[a-zA-Z0-9+]+);",
header,
)
ext = ext_match.group("ext").lower() if ext_match else "png"
if ext == "svg+xml":
ext = "svg"
elif ext == "jpeg":
ext = "jpg"
if not ext or len(ext) > 5 or not ext.isalnum():
ext = "png"
unique_filename = f"media_{uuid4().hex}.{ext}"
absolute_filepath = os.path.join(
media_absolute_save_dir, unique_filename
)
markdown_path = os.path.join(
markdown_relative_media_folder, unique_filename
)
with open(absolute_filepath, "wb") as f:
f.write(media_data)
logger.info(f"Data URI media saved to {absolute_filepath}")
return markdown_path, media_url
except Exception as e:
logger.error(f"Failed to decode/save data URI media: {e}")
return None, media_url
actual_media_url_str = media_url
if not parsed_media_url.scheme or not parsed_media_url.netloc:
if not base_url_for_relative:
logger.warning(
f"Cannot resolve relative media URL {actual_media_url_str} without a base URL."
)
return None, actual_media_url_str
actual_media_url_str = urljoin(
base_url_for_relative, actual_media_url_str
)
parsed_actual_url = urlparse(actual_media_url_str)
ext = None
path_part_for_ext = parsed_actual_url.path
filename_from_url_for_ext = os.path.basename(path_part_for_ext)
if "." in filename_from_url_for_ext:
candidate_ext = filename_from_url_for_ext.split(".")[-1].lower()
if (
len(candidate_ext) <= 5
and candidate_ext.isalnum()
and candidate_ext
in [
"jpg",
"jpeg",
"png",
"gif",
"svg",
"webp",
"bmp",
"tiff",
"mp4",
"webm",
"ogg",
"mov",
"avi",
"mkv",
"mp3",
"wav",
"aac",
]
):
ext = candidate_ext
if parsed_actual_url.scheme == "file":
local_file_path_str = parsed_actual_url.path
if (
os.name == "nt"
): # Windows: remove leading '/' if path starts like /C:/...
if (
len(local_file_path_str) > 2
and local_file_path_str[0] == "/"
and local_file_path_str[2] == ":"
):
local_file_path_str = local_file_path_str[1:]
local_file_to_copy = Path(local_file_path_str)
if local_file_to_copy.exists() and local_file_to_copy.is_file():
if not ext:
ext = (
local_file_to_copy.suffix[1:].lower() or "dat"
) # Get ext from local file if not from URL
unique_filename = f"media_{uuid4().hex}.{ext}"
absolute_filepath_dest = os.path.join(
media_absolute_save_dir, unique_filename
)
markdown_path = os.path.join(
markdown_relative_media_folder, unique_filename
)
shutil.copy(str(local_file_to_copy), absolute_filepath_dest)
logger.info(
f"Local media file '{local_file_to_copy}' copied to '{absolute_filepath_dest}'"
)
return (
markdown_path,
media_url,
) # Return original media_url for consistency
else:
logger.warning(
f"Local file '{local_file_to_copy}' referenced by '{actual_media_url_str}' not found or not a file."
)
return None, media_url
elif parsed_actual_url.scheme in ["http", "https"]:
response = requests.get(
actual_media_url_str,
headers={"User-Agent": USER_AGENT},
timeout=self.MEDIA_DOWNLOAD_TIMEOUT,
stream=True,
)
response.raise_for_status()
content_type = response.headers.get("Content-Type", "").lower()
if not ext: # Try to get extension from Content-Type if not from URL
if any(
content_type.startswith(prefix)
for prefix in media_type_prefixes
):
type_part = content_type.split(";")[0]
candidate_ext_ct = type_part.split("/")[-1]
if candidate_ext_ct == "svg+xml":
ext = "svg"
elif candidate_ext_ct == "jpeg":
ext = "jpg"
elif candidate_ext_ct in [
"png",
"gif",
"webp",
"bmp",
"tiff",
"mp4",
"webm",
"ogg",
"mov",
"avi",
"mkv",
"mp3",
"wav",
"aac",
]:
ext = candidate_ext_ct
ext = ext if ext else "dat" # Final fallback extension
unique_filename = f"media_{uuid4().hex}.{ext}"
absolute_filepath = os.path.join(
media_absolute_save_dir, unique_filename
)
markdown_path = os.path.join(
markdown_relative_media_folder, unique_filename
)
with open(absolute_filepath, "wb") as f:
for chunk in response.iter_content(chunk_size=81920):
f.write(chunk)
logger.info(
f"HTTP/S media {actual_media_url_str} downloaded to {absolute_filepath}"
)
return (
markdown_path,
actual_media_url_str,
) # Return resolved URL for HTTP/S
else:
logger.warning(
f"Skipping download for unsupported scheme: {actual_media_url_str}"
)
return None, actual_media_url_str
except requests.exceptions.Timeout:
logger.error(
f"Timeout processing media {original_media_url_for_error_logger}"
)
except requests.exceptions.HTTPError as e:
logger.error(
f"HTTP error {e.response.status_code} processing media {original_media_url_for_error_logger}: {e.response.reason}"
)
except requests.exceptions.RequestException as e:
logger.error(
f"RequestException processing media {original_media_url_for_error_logger}: {e}"
)
except IOError as e:
logger.error(
f"IOError processing media {original_media_url_for_error_logger}: {e}"
)
except Exception as e:
logger.error(
f"Unexpected error processing media {original_media_url_for_error_logger}: {e}"
)
return None, original_media_url_for_error_logger
def _process_images_in_html(
self, html_content, base_url_for_relative, markdown_relative_image_folder
):
logger.debug(
f"Starting image processing. MD relative image folder: {markdown_relative_image_folder}"
)
soup = BeautifulSoup(html_content, "html.parser")
for img_tag in soup.find_all("img"):
original_src = img_tag.get("src")
alt_text = img_tag.get("alt", "").strip()
if not original_src:
img_tag.decompose()
continue
original_src = original_src.strip()
if not original_src:
img_tag.decompose()
continue
if original_src.startswith("cid:"):
cid = original_src[4:]
if hasattr(self, "mhtml_resources") and cid in self.mhtml_resources:
media_data, resource_filename_ext = self.mhtml_resources[cid]
ext_from_mhtml = "png"
if "." in resource_filename_ext:
candidate_ext = resource_filename_ext.split(".")[-1].lower()
if len(candidate_ext) <= 5 and candidate_ext.isalnum():
ext_from_mhtml = candidate_ext
unique_filename = f"image_{uuid4().hex}.{ext_from_mhtml}"
absolute_filepath = os.path.join(
self.current_image_absolute_path, unique_filename
)
markdown_path = os.path.join(
markdown_relative_image_folder, unique_filename
)
try:
with open(absolute_filepath, "wb") as f:
f.write(media_data)
img_tag["src"] = markdown_path
if not alt_text:
alt_text = f"Embedded image {unique_filename}"
img_tag["alt"] = alt_text
except IOError as e:
img_tag.decompose()
else:
img_tag.decompose()
continue
markdown_image_path, _ = self._download_media_file(
original_src,
base_url_for_relative,
self.current_image_absolute_path,
markdown_relative_image_folder,
media_type_prefixes=("image/",),
)
if markdown_image_path:
img_tag["src"] = markdown_image_path
if not alt_text:
alt_text = (
f"Downloaded image {os.path.basename(markdown_image_path)}"
)
img_tag["alt"] = alt_text
else:
img_tag.decompose()
logger.debug("Image processing finished.")
return str(soup)
def _process_videos_in_html(
self,
html_content,
base_url_for_relative,
markdown_relative_video_folder,
markdown_relative_image_folder_for_poster,
):
logger.debug(
f"Starting video processing. MD video folder: {markdown_relative_video_folder}, MD poster folder: {markdown_relative_image_folder_for_poster}"
)
soup = BeautifulSoup(html_content, "html.parser")
for video_tag in soup.find_all("video"):
original_poster_src = video_tag.get("poster")
if original_poster_src:
original_poster_src = original_poster_src.strip()
if original_poster_src:
logger.info(f"Processing poster for video: {original_poster_src}")
if (
self.current_image_absolute_path
): # Ensure image path is set for saving posters
poster_md_path, _ = self._download_media_file(
original_poster_src,
base_url_for_relative,
self.current_image_absolute_path, # Save posters in the image asset directory
markdown_relative_image_folder_for_poster, # Use the image folder's relative path for MD link
media_type_prefixes=("image/",),
)
if poster_md_path:
video_tag["poster"] = poster_md_path
else:
if "poster" in video_tag.attrs:
del video_tag["poster"]
else:
logger.warning(
f"Cannot process poster {original_poster_src} as image asset path is not initialized."
)
source_tags = video_tag.find_all("source")
processed_source_successfully = False
if source_tags:
for source_tag in source_tags:
original_src = source_tag.get("src")
if original_src:
original_src = original_src.strip()
if not original_src:
continue
if original_src.startswith("cid:"):
cid = original_src[4:]
if (
hasattr(self, "mhtml_resources")
and cid in self.mhtml_resources
):
media_data, resource_filename_ext = (
self.mhtml_resources[cid]
)
ext_from_mhtml = "mp4"
if "." in resource_filename_ext:
candidate_ext = resource_filename_ext.split(".")[
-1
].lower()
if (
len(candidate_ext) <= 5
and candidate_ext.isalnum()
):
ext_from_mhtml = candidate_ext
unique_filename = (
f"video_{uuid4().hex}.{ext_from_mhtml}"
)
absolute_filepath = os.path.join(
self.current_video_absolute_path, unique_filename
)
markdown_path = os.path.join(
markdown_relative_video_folder, unique_filename
)
try:
with open(absolute_filepath, "wb") as f:
f.write(media_data)
source_tag["src"] = markdown_path
processed_source_successfully = True
except IOError as e:
source_tag.decompose()
else:
source_tag.decompose()
continue
markdown_video_path, _ = self._download_media_file(
original_src,
base_url_for_relative,
self.current_video_absolute_path,
markdown_relative_video_folder,
media_type_prefixes=("video/", "application/octet-stream"),
)
if markdown_video_path:
source_tag["src"] = markdown_video_path
processed_source_successfully = True
else:
source_tag.decompose()
original_video_src_attr = video_tag.get("src")
if original_video_src_attr and not processed_source_successfully:
original_video_src_attr = original_video_src_attr.strip()
if original_video_src_attr:
if original_video_src_attr.startswith("cid:"):
cid = original_video_src_attr[4:]
if (
hasattr(self, "mhtml_resources")
and cid in self.mhtml_resources
):
media_data, resource_filename_ext = self.mhtml_resources[
cid
]
ext_from_mhtml = "mp4"
if "." in resource_filename_ext:
candidate_ext = resource_filename_ext.split(".")[
-1
].lower()
if len(candidate_ext) <= 5 and candidate_ext.isalnum():
ext_from_mhtml = candidate_ext
unique_filename = f"video_{uuid4().hex}.{ext_from_mhtml}"
absolute_filepath = os.path.join(
self.current_video_absolute_path, unique_filename
)
markdown_path = os.path.join(
markdown_relative_video_folder, unique_filename
)
try:
with open(absolute_filepath, "wb") as f:
f.write(media_data)
video_tag["src"] = markdown_path
processed_source_successfully = True
except IOError as e:
if "src" in video_tag.attrs:
del video_tag["src"]
else:
if "src" in video_tag.attrs:
del video_tag["src"]
else:
markdown_video_path, _ = self._download_media_file(
original_video_src_attr,
base_url_for_relative,
self.current_video_absolute_path,
markdown_relative_video_folder,
media_type_prefixes=("video/", "application/octet-stream"),
)
if markdown_video_path:
video_tag["src"] = markdown_video_path
processed_source_successfully = True
else:
if "src" in video_tag.attrs:
del video_tag["src"]
# If no video source was successfully processed, remove the entire video tag.
if not processed_source_successfully:
logger.warning(
f"Decomposing video tag as no downloadable sources were found."
)
video_tag.decompose()
logger.debug("Video processing finished.")
return str(soup)
def _cleanup_markdown(self, markdown_text):
logger.debug("Starting Markdown cleanup.")
markdown_text = re.sub(r"\[\s*\]\(\s*\)", "", markdown_text)
markdown_text = re.sub(r"!\[(.*?)\]\s+\((.*?)\)", r"", markdown_text)
markdown_text = re.sub(r"\[(.*?)\]\s+\((.*?)\)", r"[\1](\2)", markdown_text)
markdown_text = re.sub(r"\n([*-+])(\S)", r"\n\1 \2", markdown_text)
markdown_text = re.sub(r"\n(\d+\.)(\S)", r"\n\1 \2", markdown_text)
markdown_text = re.sub(r"!\[\s*\]\((.*?)\)", r"", markdown_text)
markdown_text = re.sub(r"\n{3,}", "\n\n", markdown_text)
lines = markdown_text.splitlines()
stripped_lines = [line.strip() for line in lines]
markdown_text = "\n".join(stripped_lines)
logger.debug("Markdown cleanup finished.")
return markdown_text.strip()
def convert(self, source, output_filename_stem=None):
html_content = None
self.base_url = None
self.mhtml_resources = {}
self.source_html_filepath = None
if not output_filename_stem:
stem = os.path.splitext(os.path.basename(source))[0]
output_filename_stem = (
stem if stem else f"file_conversion_{uuid4().hex[:8]}"
)
logger.info(
f"Starting conversion. Source: {source}, Type: html_file, Output stem: {output_filename_stem}"
)
self.source_html_filepath = os.path.abspath(
source
) # Store absolute path of source HTML
try:
with open(
self.source_html_filepath, "r", encoding="utf-8", errors="replace"
) as f:
html_content = f.read()
self.base_url = (
Path(self.source_html_filepath).parent.as_uri() + "/"
) # file:///path/to/containing_directory/
except FileNotFoundError:
logger.error(f"HTML file not found: {source}")
return None
except IOError as e:
logger.error(f"Could not read HTML file {source}: {e}")
return None
except Exception as e:
logger.error(f"Unexpected error reading HTML file {source}: {e}")
return None
if not html_content:
logger.error(f"No HTML content to process from {source}.")
return None
md_img_rel_folder = f"{output_filename_stem}"
self.current_image_absolute_path = os.path.join(
self.output_dir, md_img_rel_folder
)
md_vid_rel_folder = f"{output_filename_stem}"
self.current_video_absolute_path = os.path.join(
self.output_dir, md_vid_rel_folder
)
try:
os.makedirs(self.current_image_absolute_path, exist_ok=True)
os.makedirs(self.current_video_absolute_path, exist_ok=True)
except OSError as e:
logger.error(f"Could not create asset directories: {e}")
return None
logger.info("Cleaning HTML...")
cleaned_html = self._clean_html(html_content)
logger.info("Processing and downloading images...")
html_after_images = self._process_images_in_html(
cleaned_html, self.base_url, md_img_rel_folder
)
logger.info("Processing and downloading videos...")
# Pass md_img_rel_folder for posters
html_after_videos = self._process_videos_in_html(
html_after_images, self.base_url, md_vid_rel_folder, md_img_rel_folder
)
logger.info("Converting HTML to Markdown...")
try:
markdown_output = md(
html_after_videos,
heading_style="atx",
bullets="-",
default_title=False,
strip=[],
)
except Exception as e:
logger.error(f"Error during Markdown conversion for {source}: {e}.")
try:
markdown_output = md(
html_after_images,
heading_style="atx",
bullets="-",
default_title=False,
strip=[],
) # Fallback
except Exception as e2:
debug_html_path = os.path.join(
self.output_dir, f"{output_filename_stem}_debug_processed.html"
)
try:
with open(debug_html_path, "w", encoding="utf-8") as f_debug:
f_debug.write(html_after_videos)
except IOError:
pass
return None
logger.info("Cleaning Markdown...")
final_markdown = self._cleanup_markdown(markdown_output)
output_md_path = os.path.join(self.output_dir, f"{output_filename_stem}.md")
try:
with open(output_md_path, "w", encoding="utf-8") as f:
f.write(final_markdown)
logger.info(f"Markdown file saved to {output_md_path}")
for asset_path in [
self.current_image_absolute_path,
self.current_video_absolute_path,
]:
if os.path.exists(asset_path) and not os.listdir(asset_path):
try:
os.rmdir(asset_path)
except OSError as e_rmdir:
logger.warning(
f"Could not remove empty asset folder {asset_path}: {e_rmdir}"
)
return output_md_path
except IOError as e:
logger.error(f"Could not write Markdown file {output_md_path}: {e}")
return None
except Exception as e:
logger.error(
f"Unexpected error writing Markdown file {output_md_path}: {e}"
)
return None
def html_handler(input_file_name, doc_id, converter):
if os.path.exists(input_file_name):
md_path_local_html = converter.convert(
input_file_name,
output_filename_stem=doc_id,
)
if not md_path_local_html:
logger.warning(f"Failed to convert local HTML: {input_file_name}")
else:
logger.debug(f"\nLocal HTML test file not found at '{input_file_name}'.")
def handler(cache_dir, file_or_url: str):
output_dir = f"{cache_dir}"
converter = HTML2MarkdownConverter(
output_dir=output_dir,
media_download_timeout=60,
)
doc_id = str(uuid4())
if file_or_url.endswith((".html", ".htm")):
html_handler(file_or_url, doc_id, converter)
else:
logger.error(
f"Unsupported file type: {file_or_url}. Only .html and .htm files are supported."
)
return None, None, None
return f"{cache_dir}/{doc_id}.md", f"{cache_dir}/{doc_id}", doc_id
if __name__ == "__main__":
output_dir = "/Users/tju/Library/Caches/bisheng"
input_file = "/Users/tju/Resources/docs/html/f.html"
output_md, asset_dir, doc_id = handler(output_dir, input_file)
if output_md and os.path.exists(output_md):
print(f"Markdown saved to: {output_md}")
else:
print("Conversion failed.")
================================================
FILE: src/backend/bisheng/api/services/md_from_pdf.py
================================================
import os
import threading
from uuid import uuid4
import fitz
from loguru import logger
pymu_lock = threading.Lock()
def convert_pdf_to_md(output_dir, pdf_path, doc_id):
"""
will specify the PDF Convert file to Markdown files and keep the contents in their original order.
This function extracts PDF Text, tables and pictures in and based on what they are on the page
Vertical position to sort and then consolidate to one Markdown in the file.
The image is saved as a separate file in the specified output directory.
Args:
pdf_path (str): Entered PDF FilePath
output_dir (str): SAVING Markdown A directory of files and pictures.
"""
# Make sure the output directory exists
if not os.path.exists(output_dir):
os.makedirs(output_dir)
md_filename = f"{doc_id}.md"
md_filepath = os.path.join(output_dir, md_filename)
img_dir = os.path.join(output_dir, f"images")
if not os.path.exists(img_dir):
os.makedirs(img_dir)
doc = None
try:
doc = fitz.open(pdf_path)
except Exception as e:
raise Exception('The file is damaged.')
try:
md_content = ""
image_counter = 1
for page_num in range(len(doc)):
with pymu_lock:
page = doc.load_page(page_num)
page_elements = []
tables = page.find_tables()
if tables.tables:
for tab in tables.tables:
if not tab.to_pandas().empty:
md_table = tab.to_pandas().to_markdown(index=False)
table_bbox = fitz.Rect(tab.bbox)
page_elements.append(
{
"type": "table",
"bbox": table_bbox,
"content": md_table,
}
)
image_info_list = page.get_image_info(xrefs=True)
if image_info_list:
for img_info in image_info_list:
xref = img_info["xref"]
if xref == 0:
continue
base_image = doc.extract_image(xref)
if not base_image:
continue
image_bytes = base_image["image"]
image_ext = base_image["ext"]
img_filename = f"image_{page_num + 1}_{image_counter}.{image_ext}"
img_path = os.path.join(img_dir, img_filename)
with open(img_path, "wb") as img_file:
img_file.write(image_bytes)
md_image = f""
image_bbox = fitz.Rect(img_info["bbox"])
page_elements.append(
{"type": "image", "bbox": image_bbox, "content": md_image}
)
image_counter += 1
table_bboxes = (
[fitz.Rect(tab.bbox) for tab in tables.tables]
if tables.tables
else []
)
text_blocks = page.get_text("blocks")
for b in text_blocks:
block_rect = fitz.Rect(b[:4])
block_text = b[4].strip()
is_in_table = False
for table_bbox in table_bboxes:
if block_rect.intersects(table_bbox):
is_in_table = True
break
if block_text and not is_in_table:
page_elements.append(
{"type": "text", "bbox": block_rect, "content": block_text}
)
page_elements.sort(key=lambda el: el["bbox"].y0)
for elem in page_elements:
md_content += elem["content"] + "\n\n"
with open(md_filepath, "w", encoding="utf-8") as md_file:
md_file.write(md_content)
except Exception as e:
logger.exception(f"Error processing pdf: {e}")
raise Exception(f"Document parsing failed: {str(e)[-100:]}") # Capture last100characters to avoid overly long error messages
finally:
with pymu_lock:
if doc:
doc.close()
def is_pdf_damaged(pdf_path: str) -> bool:
"""
Others PDF Whether the file is corrupt.
Args:
pdf_path (str): PDF Path of file
Returns:
bool: If the file is damaged, go back True; otherwise go back to False。
"""
try:
doc = fitz.open(pdf_path)
doc.close()
return False
except Exception as e:
logger.error(f"PDF file is damaged: {e}")
return True
def handler(cache_dir, file_or_url: str):
doc_id = uuid4()
ouput_dir = f"{cache_dir}/{doc_id}"
convert_pdf_to_md(ouput_dir, file_or_url, doc_id)
return f"{ouput_dir}/{doc_id}.md", f"{ouput_dir}/images", doc_id
def exec_thread_safe():
pdf_path = "/Users/tju/Documents/Resources/pdf/bisheng/chen4.pdf"
output_directory = "/Users/tju/Desktop/output"
md_file, local_image, doc_id = handler(output_directory, pdf_path)
if __name__ == "__main__":
import multiprocessing
processes = []
for _ in range(10):
process = multiprocessing.Process(target=exec_thread_safe)
processes.append(process)
process.start()
for process in processes:
process.join()
threads = []
for i in range(4):
thread = threading.Thread(target=exec_thread_safe, name=f"Thread-{i}")
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
================================================
FILE: src/backend/bisheng/api/services/md_from_pptx.py
================================================
from bisheng.pptx2md import convert, ConversionConfig
from pathlib import Path
from uuid import uuid4
def parser_pptx2md(
pptx_file: str,
md_file: str,
image_dir: str = None,
):
"""
Convert a PowerPoint file to Markdown format.
Args:
pptx_file (str): Path to the PowerPoint file.
md_file (str): Path to the output Markdown file.
image_dir (str, optional): Directory to save images. Defaults to None
"""
# Basic usage
convert(
ConversionConfig(
pptx_path=Path(pptx_file),
output_path=Path(md_file),
image_dir=Path(image_dir),
disable_notes=True,
)
)
def handler(
cache_dir,
file_name,
):
doc_id = str(uuid4())
md_file_name = f"{cache_dir}/{doc_id}.md"
image_dir = f"{cache_dir}/{doc_id}"
parser_pptx2md(
pptx_file=file_name,
md_file=md_file_name,
image_dir=image_dir,
)
# Image,Can be used asynchronously
# GantimdPicture path in file
return md_file_name, image_dir, doc_id
if __name__ == "__main__":
pptx_file = "/Users/tju/Resources/docs/ppt/you-lian.pptx"
cache_dir = "/Users/tju/Desktop"
md_file_name, image_dir, doc_id = handler(cache_dir, pptx_file)
print(f"Markdown file: {md_file_name}")
print(f"Image directory: {image_dir}")
print(f"Document ID: {doc_id}")
================================================
FILE: src/backend/bisheng/api/services/md_post_processing.py
================================================
import html
import os
import re
from bs4 import BeautifulSoup
def post_processing(file_path, retain_images=True):
"""
(Final full version)
Comprehensively combine oneMarkdownin the fileHTMLConvert tags to standardMarkdownFormat and process the picture correctly according to the parameters.
"""
try:
with open(file_path, "r", encoding="utf-8") as file:
content = file.read()
# Step 1: Image Handling (Top Priority Execution)
if not retain_images:
# If the image is not preserved, delete the image in all formats globally before any conversion
content = re.sub(r"
]*>", "", content, flags=re.IGNORECASE)
content = re.sub(
r"\[!\[.*?\]\(.*?\)\]\(.*?\)", "", content, flags=re.DOTALL
)
content = re.sub(r"!\[.*?\]\(.*?\)", "", content, flags=re.DOTALL)
else:
# Convert only if image is preservedHTMLright of privacyimgTaggedMarkdownFormat
# Use a helper function to extractsrcAndalt
def _img_to_md(match):
img_tag = match.group(0)
src_match = re.search(r'src="([^"]+)"', img_tag, re.IGNORECASE)
alt_match = re.search(r'alt="([^"]*)"', img_tag, re.IGNORECASE)
src = src_match.group(1) if src_match else ""
alt = alt_match.group(1) if alt_match else ""
return f""
content = re.sub(r"
]*>", _img_to_md, content, flags=re.IGNORECASE)
# Step 2: ComplexityHTMLBlock Level Element Conversion (UseBeautifulSoupSupport)
def _table_to_md(match):
soup = BeautifulSoup(match.group(0), "html.parser")
headers = [
th.get_text(strip=True).replace("|", r"\|")
for th in soup.find_all("th")
]
if not headers: # If no evidence of microbial, Try putting the first line | As table header
first_row = soup.find("tr")
if not first_row:
return ""
headers = [
td.get_text(strip=True).replace("|", r"\|")
for td in first_row.find_all("td")
]
rows_html = soup.find_all("tr")[1:]
else:
rows_html = (
soup.find("tbody").find_all("tr")
if soup.find("tbody")
else soup.find_all("tr")[1:]
)
if not headers:
return "" # Empty forms
md_table = ["| " + " | ".join(headers) + " |", "|" + "---|" * len(headers)]
for row in rows_html:
cols = [
td.get_text(strip=True).replace("\n", " ").replace("|", r"\|")
for td in row.find_all("td")
]
# Fill the cell to match the header length
while len(cols) < len(headers):
cols.append("")
md_table.append("| " + " | ".join(cols) + " |")
return "\n\n" + "\n".join(md_table) + "\n\n"
content = re.sub(
r"",
_table_to_md,
content,
flags=re.IGNORECASE | re.DOTALL,
)
# Step 3: Other block level and inlineHTMLTag transformation (Mainly using regular)
# Vertical (Simplify processing byul/ol/liConvert to unordered list)
content = re.sub(
r"]*>(.*?)", r"\n- \1", content, flags=re.IGNORECASE | re.DOTALL
)
content = re.sub(r"?(ul|ol)[^>]*>", "", content, flags=re.IGNORECASE)
# Title h1-h6
content = re.sub(
r"(.*?)",
lambda m: "\n" + "#" * int(m.group(1)) + " " + m.group(2).strip() + "\n",
content,
flags=re.IGNORECASE | re.DOTALL,
)
# Cite
content = re.sub(
r"]*>(.*?) ",
lambda m: "\n> " + m.group(1).strip().replace("\n", "\n> ") + "\n",
content,
flags=re.IGNORECASE | re.DOTALL,
)
# Links
content = re.sub(
r']*>(.*?)',
r"[\2](\1)",
content,
flags=re.IGNORECASE | re.DOTALL,
)
# bolded
content = re.sub(
r"<(strong|b)>(.*?)\1>",
r"**\2**",
content,
flags=re.IGNORECASE | re.DOTALL,
)
# Italic
content = re.sub(
r"<(em|i)>(.*?)\1>", r"*\2*", content, flags=re.IGNORECASE | re.DOTALL
)
# Strikethrough
content = re.sub(
r"<(del|s)>(.*?)\1>", r"~~\2~~", content, flags=re.IGNORECASE | re.DOTALL
)
# Subscript and superscript/Subscript
content = re.sub(
r"(.*?)", r"^\1^", content, flags=re.IGNORECASE | re.DOTALL
)
content = re.sub(
r"(.*?)", r"~\1~", content, flags=re.IGNORECASE | re.DOTALL
)
# Inline code
content = re.sub(
r"(.*?)", r"`\1`", content, flags=re.IGNORECASE | re.DOTALL
)
# Horizontal Line
content = re.sub(r" ]*>", "\n---\n", content, flags=re.IGNORECASE)
# Line Wrap
content = re.sub(r" ", " \n", content, flags=re.IGNORECASE)
# Paragraphs (Convert to Line Break)
content = re.sub(r"", "\n", content, flags=re.IGNORECASE)
content = re.sub(r"]*>", "\n", content, flags=re.IGNORECASE)
# Span (Remove tags, keep content)
content = re.sub(
r"]*>(.*?)", r"\1", content, flags=re.IGNORECASE | re.DOTALL
)
# Step 4: Final cleanup
content = html.unescape(content) # Code BreakingHTMLEntity
content = re.sub(r"\n{3,}", "\n\n", content.strip()) # Normalize Blank Rows
with open(file_path, "w", encoding="utf-8") as file:
file.write(content)
except FileNotFoundError:
raise Exception(f"Error-free: Doc. {file_path} Nothing found.")
except Exception as e:
raise Exception(f"Error processing file: {e}")
if __name__ == "__main__":
# --- Methods Used ---
# Please replace the path below with the one you want to process.mdActual path of the file
# markdown_file_to_process = "/path/to/your/markdown_file.md"
markdown_file_to_process = (
"/Users/tju/Desktop/d40c526e-2081-49c3-9603-83132ce88978.md" # Example, please replace
)
if os.path.exists(markdown_file_to_process):
# Examples1: TukarHTMLand keep the image
post_processing(markdown_file_to_process, retain_images=True)
# Examples2: TukarHTMLand remove all images
# post_processing_revised(markdown_file_to_process, retain_images=False)
else:
print(f"Please refer to the 'your_markdown_file.md' Replace with the real file path before running.")
================================================
FILE: src/backend/bisheng/api/services/patch_130.py
================================================
import os
from langchain_core.documents import Document
from bisheng.api.services.md_from_docx import handler as docx_handler
from bisheng.api.services.md_from_excel import handler as excel_handler
from bisheng.api.services.md_from_html import handler as html_handler
from bisheng.api.services.md_from_pdf import handler as pdf_handler
from bisheng.api.services.md_from_pptx import handler as pptx_handler
from bisheng.api.services.md_post_processing import post_processing
from bisheng.core.cache.utils import CACHE_DIR
from bisheng.core.storage.minio.minio_manager import get_minio_storage_sync
def combine_multiple_md_files_to_raw_texts(
path,
) -> tuple[list[Document], list[Document]]:
"""
combine multiple md file to raw texts including meta-data list.
Args:
path: the directory containing the md files.
Returns:
0: split raw texts, each text is a Document object.
1: a single Document object containing all the texts combined.
"""
files = sorted([f for f in os.listdir(path)])
raw_texts = []
# A file corresponds to only one complete Document Objects, texts It is only after cuttingchunkContents
documents = [Document(page_content="", metadata={})]
for file_name in files:
full_file_name = f"{path}/{file_name}"
with open(full_file_name, "r", encoding="utf-8") as f:
content = f.read()
raw_texts.append(Document(page_content=content, metadata={}))
documents[0].page_content += content
return raw_texts, documents
def convert_file_to_md(
file_name,
input_file_name,
header_rows=[0, 1],
data_rows=10,
append_header=True,
knowledge_id=None,
retain_images=True,
):
"""
The main function that handles file conversions.
Args:
file_name:
input_file_name:
header_rows:
data_rows:
append_header:
knowledge_id:
"""
file_name = file_name.lower()
md_file_name = None
local_image_dir = None
include_cache_dir = True
doc_id = None
if file_name.endswith(".docx") or file_name.endswith(".doc"):
md_file_name, local_image_dir, doc_id = docx_handler(CACHE_DIR, input_file_name)
elif file_name.endswith(".pptx") or file_name.endswith(".ppt"):
md_file_name, local_image_dir, doc_id = pptx_handler(CACHE_DIR, input_file_name)
include_cache_dir = False
elif (
file_name.endswith(".xlsx")
or file_name.endswith(".xls")
or file_name.endswith(".csv")
):
md_file_name, local_image_dir, doc_id = excel_handler(
CACHE_DIR, input_file_name, header_rows, data_rows, append_header
)
local_image_dir = None
return md_file_name, local_image_dir, doc_id
elif (
file_name.endswith(".html")
or file_name.endswith(".htm")
or file_name.endswith(".mhtml")
):
(
md_file_name,
local_image_dir,
doc_id,
) = html_handler(CACHE_DIR, input_file_name)
include_cache_dir = False
elif file_name.endswith("pdf"):
md_file_name, local_image_dir, doc_id = pdf_handler(CACHE_DIR, input_file_name)
include_cache_dir = True
else:
raise ValueError(f"unsupported file type {file_name} for conversion to markdown.")
return replace_image_url(
md_file_name,
local_image_dir,
doc_id,
include_cache_dir,
knowledge_id=knowledge_id,
retain_images=retain_images,
)
def replace_image_url(
md_file_name,
local_image_dir,
doc_id,
include_cache_dir,
knowledge_id=None,
retain_images=True,
):
"""
Usage:
user the same bucket as origin file located.
Args:
md_file_name:
local_image_dir:
doc_id:
knowledge_id:
if the knowledge_id is None, this process will be interrupted,
because the image files wouldn't be put into minio
"""
from bisheng.api.services.knowledge_imp import KnowledgeUtils
minio_image_path = f"/{get_minio_storage_sync().bucket}/{KnowledgeUtils.get_knowledge_file_image_dir(doc_id, knowledge_id)}"
url_for_replacement = local_image_dir
if not include_cache_dir:
url_for_replacement = doc_id
if md_file_name and local_image_dir and doc_id:
with open(md_file_name, "r", encoding="utf-8") as f:
content = f.read()
content = content.replace(url_for_replacement, minio_image_path)
with open(md_file_name, "w", encoding="utf-8") as f:
f.write(content)
post_processing(md_file_name, retain_images)
return md_file_name, local_image_dir, doc_id
================================================
FILE: src/backend/bisheng/api/services/role_group_service.py
================================================
import asyncio
import json
from datetime import datetime
from typing import List, Any, Dict, Optional
from fastapi import Request, HTTPException
from fastapi.encoders import jsonable_encoder
from loguru import logger
from bisheng.api.services.assistant import AssistantService
from bisheng.api.services.audit_log import AuditLogService
from bisheng.api.v1.schemas import resp_200
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.http_error import UnAuthorizedError
from bisheng.common.errcode.user import UserGroupNotDeleteError, AdminUserUpdateForbiddenError
from bisheng.core.cache.redis_manager import get_redis_client_sync
from bisheng.database.constants import AdminRole
from bisheng.database.models.assistant import AssistantDao
from bisheng.database.models.flow import FlowDao, FlowType
from bisheng.database.models.group import Group, GroupCreate, GroupDao, GroupRead, DefaultGroup
from bisheng.database.models.group_resource import GroupResourceDao, ResourceTypeEnum
from bisheng.database.models.role import RoleDao
from bisheng.database.models.user_group import UserGroupCreate, UserGroupDao, UserGroupRead
from bisheng.knowledge.domain.models.knowledge import KnowledgeDao
from bisheng.telemetry_search.domain.services.dashboard import DashboardService
from bisheng.tool.domain.models.gpts_tools import GptsToolsDao
from bisheng.user.domain.models.user import User, UserDao
from bisheng.user.domain.models.user_role import UserRoleDao
from bisheng.utils import get_request_ip
class RoleGroupService():
def get_group_list(self, group_ids: List[int]) -> List[GroupRead]:
"""Get the full amountgroupVertical"""
# Inquirygroup
if group_ids:
groups = GroupDao.get_group_by_ids(group_ids)
else:
groups = GroupDao.get_all_group()
# Inquiryuser
user_admin = UserGroupDao.get_groups_admins([group.id for group in groups])
users_dict = {}
if user_admin:
user_ids = [user.user_id for user in user_admin]
users = UserDao.get_user_by_ids(user_ids)
users_dict = {user.user_id: user for user in users}
groupReads = [GroupRead.validate(group) for group in groups]
for group in groupReads:
group.group_admins = [
users_dict.get(user.user_id).model_dump() for user in user_admin
if user.group_id == group.id
]
return groupReads
def create_group(self, request: Request, login_user: UserPayload, group: GroupCreate) -> Group:
"""Add Usergroup"""
group_admin = group.group_admins
group.create_user = login_user.user_id
group.update_user = login_user.user_id
group = GroupDao.insert_group(group)
if group_admin:
logger.info('set_admin group_admins={} group_id={}', group_admin, group.id)
self.set_group_admin(request, login_user, group_admin, group.id)
self.create_group_hook(request, login_user, group)
return group
def create_group_hook(self, request: Request, login_user: UserPayload, group: Group) -> bool:
""" New User Group Post Action """
logger.info(f'act=create_group_hook user={login_user.user_name} group_id={group.id}')
# Log Audit Logs
AuditLogService.create_user_group(login_user, get_request_ip(request), group)
return True
def update_group(self, request: Request, login_user: UserPayload, group: Group) -> Group:
"""Update User"""
exist_group = GroupDao.get_user_group(group.id)
if not exist_group:
raise ValueError('User group does not exist')
exist_group.group_name = group.group_name
exist_group.remark = group.group_name
exist_group.update_user = login_user.user_id
exist_group.update_time = datetime.now()
group = GroupDao.update_group(exist_group)
self.update_group_hook(request, login_user, group)
return group
def update_group_hook(self, request: Request, login_user: UserPayload, group: Group):
logger.info(f'act=update_group_hook user={login_user.user_name} group_id={group.id}')
# Log Audit Logs
AuditLogService.update_user_group(login_user, get_request_ip(request), group)
def delete_group(self, request: Request, login_user: UserPayload, group_id: int):
"""Can delete existing usergroups"""
if group_id == DefaultGroup:
raise HTTPException(status_code=500, detail='Default group cannot be deleted')
group_info = GroupDao.get_user_group(group_id)
if not group_info:
return resp_200()
# Determine if there are still users in the group
user_group_list = UserGroupDao.get_group_user(group_id)
if user_group_list:
return UserGroupNotDeleteError.return_resp()
GroupDao.delete_group(group_id)
self.delete_group_hook(request, login_user, group_info)
return resp_200()
def delete_group_hook(self, request: Request, login_user: UserPayload, group_info: Group):
logger.info(f'act=delete_group_hook user={login_user.user_name} group_id={group_info.id}')
# Log Audit Logs
AuditLogService.delete_user_group(login_user, get_request_ip(request), group_info)
# Move resources under a group to the default user group
# Get all resources under a group
all_resource = GroupResourceDao.get_group_all_resource(group_info.id)
need_move_resource = []
for one in all_resource:
# Getting resources belongs to several groups,If you belong to more than one group, you don't have, Otherwise, transfer the resource to the default user group
resource_groups = GroupResourceDao.get_resource_group(ResourceTypeEnum(one.type), one.third_id)
if len(resource_groups) > 1:
continue
else:
one.group_id = DefaultGroup
need_move_resource.append(one)
if need_move_resource:
GroupResourceDao.update_group_resource(need_move_resource)
GroupResourceDao.delete_group_resource_by_group_id(group_info.id)
# Delete role list under user group
RoleDao.delete_role_by_group_id(group_info.id)
# Delete administrators of user groups
UserGroupDao.delete_group_all_admin(group_info.id)
# Send delete event toredisQueued
delete_message = json.dumps({"id": group_info.id})
redis_client = get_redis_client_sync()
redis_client.rpush('delete_group', delete_message, expiration=86400)
redis_client.publish('delete_group', delete_message)
def get_group_user_list(self, group_id: int, page_size: int, page_num: int) -> List[User]:
"""Get the full amountgroupVertical"""
# Inquiryuser
user_group_list = UserGroupDao.get_group_user(group_id, page_size, page_num)
if user_group_list:
user_ids = [user.user_id for user in user_group_list]
return UserDao.get_user_by_ids(user_ids)
return None
def insert_user_group(self, user_group: UserGroupCreate) -> UserGroupRead:
"""Insert User Group"""
user_groups = UserGroupDao.get_user_group(user_group.user_id)
if user_groups and user_group.group_id in [ug.group_id for ug in user_groups]:
raise ValueError('Duplicate setup user group')
return UserGroupDao.insert_user_group(user_group)
def replace_user_groups(self, request: Request, login_user: UserPayload, user_id: int, group_ids: List[int]):
""" Overwrite the user group the user belongs to """
# Determine if the Operated User is a Super Admin
user_role_list = UserRoleDao.get_user_roles(user_id)
if any(one.role_id == AdminRole for one in user_role_list):
raise AdminUserUpdateForbiddenError()
# Get all previous groupings of users
old_group = UserGroupDao.get_user_group(user_id)
old_group = [one.group_id for one in old_group]
if not login_user.is_admin():
# Get Operator Managed Groups
admin_group = UserGroupDao.get_user_admin_group(login_user.user_id)
admin_group = [one.group_id for one in admin_group]
# Filter the group where the operator is located, only groups with permission management are processed
old_group = [one for one in old_group if one in admin_group]
# Describe this user Not in a user group administered by this user group administrator
if not old_group:
raise UnAuthorizedError()
need_delete_group = old_group.copy()
need_add_group = []
for one in group_ids:
if one not in old_group:
# User groups to join
need_add_group.append(one)
else:
# Remaining in the old user group is the user group to be moved out
need_delete_group.remove(one)
if need_delete_group:
UserGroupDao.delete_user_groups(user_id, need_delete_group)
if need_add_group:
UserGroupDao.add_user_groups(user_id, need_add_group)
# Log Audit Logs
group_infos = GroupDao.get_group_by_ids(old_group + group_ids)
group_dict: Dict[int, str] = {}
for one in group_infos:
group_dict[one.id] = one.group_name
note = "Pre-edit user groups:"
for one in old_group:
note += f'{group_dict.get(one, one)}、'
note = note.rstrip('、')
note += "Post-edit user groups:"
for one in group_ids:
note += f'{group_dict.get(one, one)}、'
note = note.rstrip('、')
AuditLogService.update_user(login_user, get_request_ip(request), user_id, list(group_dict.keys()), note)
return None
def get_user_groups_list(self, user_id: int) -> List[GroupRead]:
"""Get a list of user groups"""
user_groups = UserGroupDao.get_user_group(user_id)
if not user_groups:
return []
group_ids = [ug.group_id for ug in user_groups]
return GroupDao.get_group_by_ids(group_ids)
def set_group_admin(self, request: Request, login_user: UserPayload, user_ids: List[int], group_id: int):
"""Set up user group administrators"""
# Get the list of administrators of the current user group
user_group_admins = UserGroupDao.get_groups_admins([group_id])
res = []
need_delete_admin = []
need_add_admin = user_ids
if user_group_admins:
for user in user_group_admins:
if user.user_id in need_add_admin:
res.append(user)
need_add_admin.remove(user.user_id)
else:
need_delete_admin.append(user.user_id)
if need_add_admin:
# Users who are not in the group can be assigned as administrators. Do user creation
for user_id in need_add_admin:
res.append(UserGroupDao.insert_user_group_admin(user_id, group_id))
if need_delete_admin:
UserGroupDao.delete_group_admins(group_id, need_delete_admin)
# Modified by the most recent modifier for the user group
GroupDao.update_group_update_user(group_id, login_user.user_id)
group_info = GroupDao.get_user_group(group_id)
self.update_group_hook(request, login_user, group_info)
return res
def set_group_update_user(self, login_user: UserPayload, group_id: int):
"""Set up user group administrators"""
GroupDao.update_group_update_user(group_id, login_user.user_id)
async def get_group_resources(self, group_id: int, resource_type: ResourceTypeEnum, name: str,
page_size: int, page_num: int) -> (List[Any], int):
""" Get resources under user """
if resource_type.value == ResourceTypeEnum.FLOW.value:
return await asyncio.to_thread(self.get_group_flow, group_id, name, page_size, page_num)
elif resource_type.value == ResourceTypeEnum.KNOWLEDGE.value:
return await asyncio.to_thread(self.get_group_knowledge, group_id, name, page_size, page_num)
elif resource_type.value == ResourceTypeEnum.WORK_FLOW.value:
return await asyncio.to_thread(self.get_group_flow, group_id, name, page_size, page_num, FlowType.WORKFLOW)
elif resource_type.value == ResourceTypeEnum.ASSISTANT.value:
return await asyncio.to_thread(self.get_group_assistant, group_id, name, page_size, page_num)
elif resource_type.value == ResourceTypeEnum.GPTS_TOOL.value:
return await asyncio.to_thread(self.get_group_tool, group_id, name, page_size, page_num)
elif resource_type.value == ResourceTypeEnum.DASHBOARD.value:
return await self.get_group_dashboards(group_id, name, page_size, page_num)
logger.warning('not support resource type: %s', resource_type)
return [], 0
def get_user_map(self, user_ids: set[int]):
user_list = UserDao.get_user_by_ids(list(user_ids))
user_map = {user.user_id: user.user_name for user in user_list}
return user_map
async def aget_user_map(self, user_ids: set[int]):
user_list = await UserDao.aget_user_by_ids(list(user_ids))
user_map = {user.user_id: user.user_name for user in user_list}
return user_map
def get_group_flow(self, group_id: int, keyword: str, page_size: int, page_num: int,
flow_type: Optional[FlowType] = None) -> (List[Any], int):
""" Get a list of knowledge bases under user groups """
# Query skills under user groupsIDVertical
rs_type = ResourceTypeEnum.FLOW
if flow_type == FlowType.WORKFLOW:
rs_type = ResourceTypeEnum.WORK_FLOW
resource_list = GroupResourceDao.get_group_resource(group_id, rs_type)
if not resource_list:
return [], 0
res = []
flow_ids = [resource.third_id for resource in resource_list]
flow_type_value = flow_type.value if flow_type else FlowType.FLOW.value
data, total = FlowDao.filter_flows_by_ids(flow_ids, keyword, page_num, page_size, flow_type_value)
db_user_ids = {one.user_id for one in data}
user_map = self.get_user_map(db_user_ids)
for one in data:
one_dict = jsonable_encoder(one)
one_dict["user_name"] = user_map.get(one.user_id, one.user_id)
res.append(one_dict)
return res, total
def get_group_knowledge(self, group_id: int, keyword: str, page_size: int, page_num: int) -> (List[Any], int):
""" Get a list of knowledge bases under user groups """
# Query Knowledge Base under User GroupsIDVertical
resource_list = GroupResourceDao.get_group_resource(group_id, ResourceTypeEnum.KNOWLEDGE)
if not resource_list:
return [], 0
res = []
knowledge_ids = [int(resource.third_id) for resource in resource_list]
# Query Knowledge Base
data, total = KnowledgeDao.filter_knowledge_by_ids(knowledge_ids, keyword, page_num, page_size)
db_user_ids = {one.user_id for one in data}
user_map = self.get_user_map(db_user_ids)
for one in data:
one_dict = jsonable_encoder(one)
one_dict["user_name"] = user_map.get(one.user_id, one.user_id)
res.append(one_dict)
return res, total
def get_group_assistant(self, group_id: int, keyword: str, page_size: int, page_num: int) -> (List[Any], int):
""" Get a list of helpers under a user group """
# Query Assistant under User GroupsIDVertical
resource_list = GroupResourceDao.get_group_resource(group_id, ResourceTypeEnum.ASSISTANT)
if not resource_list:
return [], 0
res = []
assistant_ids = [resource.third_id for resource in resource_list] # Query Assistant
data, total = AssistantDao.filter_assistant_by_id(assistant_ids, keyword, page_num, page_size)
for one in data:
simple_one = AssistantService.return_simple_assistant_info(one)
res.append(simple_one)
return res, total
def get_group_tool(self, group_id: int, keyword: str, page_size: int, page_num: int) -> (List[Any], int):
""" Get a list of tools under user groups """
# Query Tools under User GroupsIDVertical
resource_list = GroupResourceDao.get_group_resource(group_id, ResourceTypeEnum.GPTS_TOOL)
if not resource_list:
return [], 0
res = []
tool_ids = [int(resource.third_id) for resource in resource_list]
# Query Tools
data, total = GptsToolsDao.filter_tool_types_by_ids(tool_ids, keyword, page_num, page_size)
db_user_ids = {one.user_id for one in data}
user_map = self.get_user_map(db_user_ids)
for one in data:
one_dict = jsonable_encoder(one)
one_dict["user_name"] = user_map.get(one.user_id, one.user_id)
res.append(one_dict)
return res, total
async def get_group_dashboards(self, group_id: int, keyword: str, page_size: int, page_num: int) -> (List[Any],
int):
""" Get a list of dashboards under a user group """
# Query the dashboard under the user groupIDVertical
resource_list = await GroupResourceDao.aget_group_resources(group_id=group_id,
resource_type=ResourceTypeEnum.DASHBOARD)
if not resource_list:
return [], 0
res = []
dashboard_ids = [int(resource.third_id) for resource in resource_list]
# Query Dashboard
data = await DashboardService.get_simple_dashboards(keyword=keyword, filter_ids=dashboard_ids)
user_map = await self.aget_user_map(set([one.user_id for one in data]))
for one in data:
one_dict = one.model_dump(exclude={"layout_config", "style_config"})
one_dict["name"] = one.title
one_dict["user_name"] = user_map.get(one.user_id, one.user_id)
res.append(one_dict)
if page_size and page_num:
start_index = (page_num - 1) * page_size
end_index = start_index + page_size
paged_res = res[start_index:end_index]
return paged_res, len(res)
return res, len(res)
async def get_manage_resources(self, login_user: UserPayload, keyword: str, page: int, page_size: int) -> (list, int):
""" Get a list of apps under a user group managed by a user Contains skills, assistants, workflows"""
groups = []
if not login_user.is_admin():
groups = [str(one.group_id) for one in await UserGroupDao.aget_user_admin_group(login_user.user_id)]
if not groups:
return [], 0
resource_ids = []
# Description is a user group administrator, need to filter to get the resources under the corresponding group
if groups:
group_resources = await GroupResourceDao.get_groups_resource(groups, resource_types=[ResourceTypeEnum.FLOW,
ResourceTypeEnum.ASSISTANT,
ResourceTypeEnum.WORK_FLOW])
if not group_resources:
return [], 0
resource_ids = [one.third_id for one in group_resources]
return await FlowDao.aget_all_apps(keyword, id_list=resource_ids, page=page, limit=page_size)
================================================
FILE: src/backend/bisheng/api/services/tag.py
================================================
import json
from typing import List
from fastapi import Request
from loguru import logger
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.http_error import UnAuthorizedError, NotFoundError
from bisheng.common.errcode.tag import TagExistError, TagNotExistError
from bisheng.common.models.config import ConfigDao, ConfigKeyEnum, Config
from bisheng.database.models.assistant import AssistantDao
from bisheng.database.models.flow import FlowDao
from bisheng.database.models.group_resource import ResourceTypeEnum, GroupResourceDao
from bisheng.database.models.role_access import AccessType
from bisheng.database.models.tag import TagDao, Tag, TagLink
class TagService:
@classmethod
def get_all_tag(cls,
request: Request,
login_user: UserPayload,
keyword: str = None, page: int = 0, limit: int = 10) -> (List[Tag], int):
""" Get all tags """
result = TagDao.search_tags(keyword, page, limit)
return result, TagDao.count_tags(keyword)
@classmethod
def create_tag(cls,
request: Request,
login_user: UserPayload,
name: str) -> Tag:
# Query if there is a renaming of the label name
exist_tag = TagDao.get_tag_by_name(name)
if exist_tag:
raise TagExistError.http_exception()
new_tag = Tag(name=name, user_id=login_user.user_id)
new_tag = TagDao.insert_tag(new_tag)
return new_tag
@classmethod
def update_tag(cls,
request: Request,
login_user: UserPayload,
tag_id: int,
name: str) -> Tag:
tag_info = TagDao.get_tag_by_id(tag_id)
if not tag_info:
raise TagNotExistError.http_exception()
# Query if there is a renaming of the label name
exist_tag = TagDao.get_tag_by_name(name)
if exist_tag and exist_tag.id != tag_id:
raise TagExistError.http_exception()
tag_info.name = name
new_tag = TagDao.insert_tag(tag_info)
return new_tag
@classmethod
def delete_tag(cls,
request: Request,
login_user: UserPayload,
tag_id: int) -> bool:
""" NO NAME SPACE NO KEY VALUE!! """
return TagDao.delete_tag(tag_id)
@classmethod
def check_tag_link_permission(cls,
request: Request,
login_user: UserPayload,
resource_id: str,
resource_type: ResourceTypeEnum) -> bool:
""" Check if labeling of resources is allowed """
if login_user.is_admin():
return True
resource_info = None
access_type: AccessType
if resource_type == ResourceTypeEnum.ASSISTANT:
resource_info = AssistantDao.get_one_assistant(resource_id)
access_type = AccessType.ASSISTANT_WRITE
elif resource_type == ResourceTypeEnum.FLOW:
resource_info = FlowDao.get_flow_by_id(resource_id)
access_type = AccessType.FLOW_WRITE
elif resource_type == ResourceTypeEnum.WORK_FLOW:
resource_info = FlowDao.get_flow_by_id(resource_id)
access_type = AccessType.WORKFLOW_WRITE
else:
raise NotFoundError()
if not resource_info:
raise NotFoundError()
if login_user.access_check(resource_info.user_id, resource_id, access_type):
return True
# Get user groups to which the resource belongs
resource_groups = GroupResourceDao.get_resource_group(resource_type, resource_id)
resource_groups = [int(one.group_id) for one in resource_groups]
# Determine if the operator under is an administrator of a user group
if not login_user.check_groups_admin(resource_groups):
raise UnAuthorizedError()
return True
@classmethod
def create_tag_link(cls,
request: Request,
login_user: UserPayload,
tag_id: int,
resource_id: str,
resource_type: ResourceTypeEnum) -> TagLink:
""" Associate resources with tags """
cls.check_tag_link_permission(request, login_user, resource_id, resource_type)
new_link = TagLink(tag_id=tag_id, resource_id=resource_id, resource_type=resource_type.value,
user_id=login_user.user_id)
try:
new_link = TagDao.insert_tag_link(new_link)
except Exception as e:
logger.error(f'tag_link_error: {e}')
raise TagExistError.http_exception()
return new_link
@classmethod
def delete_tag_link(cls,
request: Request,
login_user: UserPayload,
tag_id: int,
resource_id: str,
resource_type: ResourceTypeEnum) -> bool:
""" Remove association of resources and tags """
cls.check_tag_link_permission(request, login_user, resource_id, resource_type)
return TagDao.delete_resource_tag(tag_id, resource_id, resource_type)
@classmethod
def get_home_tag(cls,
request: Request,
login_user: UserPayload) -> List[Tag]:
""" Get a list of tags to show on the homepage """
home_tags = ConfigDao.get_config(ConfigKeyEnum.HOME_TAGS)
if not home_tags:
return []
home_tags = json.loads(home_tags.value)
tags = TagDao.get_tags_by_ids(home_tags)
tags = sorted(tags, key=lambda x: home_tags.index(x.id))
return tags
@classmethod
def update_home_tag(cls,
request: Request,
login_user: UserPayload,
tag_ids: List[int]) -> bool:
""" Update the list of tags displayed on the homepage """
home_tags = ConfigDao.get_config(ConfigKeyEnum.HOME_TAGS)
if not home_tags:
home_tags = Config(key=ConfigKeyEnum.HOME_TAGS.value, value=json.dumps(tag_ids))
else:
home_tags.value = json.dumps(tag_ids)
ConfigDao.insert_config(home_tags)
return True
================================================
FILE: src/backend/bisheng/api/services/tiktoken_file/cl100k_base.tiktoken
================================================
IQ== 0
Ig== 1
Iw== 2
JA== 3
JQ== 4
Jg== 5
Jw== 6
KA== 7
KQ== 8
Kg== 9
Kw== 10
LA== 11
LQ== 12
Lg== 13
Lw== 14
MA== 15
MQ== 16
Mg== 17
Mw== 18
NA== 19
NQ== 20
Ng== 21
Nw== 22
OA== 23
OQ== 24
Og== 25
Ow== 26
PA== 27
PQ== 28
Pg== 29
Pw== 30
QA== 31
QQ== 32
Qg== 33
Qw== 34
RA== 35
RQ== 36
Rg== 37
Rw== 38
SA== 39
SQ== 40
Sg== 41
Sw== 42
TA== 43
TQ== 44
Tg== 45
Tw== 46
UA== 47
UQ== 48
Ug== 49
Uw== 50
VA== 51
VQ== 52
Vg== 53
Vw== 54
WA== 55
WQ== 56
Wg== 57
Ww== 58
XA== 59
XQ== 60
Xg== 61
Xw== 62
YA== 63
YQ== 64
Yg== 65
Yw== 66
ZA== 67
ZQ== 68
Zg== 69
Zw== 70
aA== 71
aQ== 72
ag== 73
aw== 74
bA== 75
bQ== 76
bg== 77
bw== 78
cA== 79
cQ== 80
cg== 81
cw== 82
dA== 83
dQ== 84
dg== 85
dw== 86
eA== 87
eQ== 88
eg== 89
ew== 90
fA== 91
fQ== 92
fg== 93
oQ== 94
og== 95
ow== 96
pA== 97
pQ== 98
pg== 99
pw== 100
qA== 101
qQ== 102
qg== 103
qw== 104
rA== 105
rg== 106
rw== 107
sA== 108
sQ== 109
sg== 110
sw== 111
tA== 112
tQ== 113
tg== 114
tw== 115
uA== 116
uQ== 117
ug== 118
uw== 119
vA== 120
vQ== 121
vg== 122
vw== 123
wA== 124
wQ== 125
wg== 126
ww== 127
xA== 128
xQ== 129
xg== 130
xw== 131
yA== 132
yQ== 133
yg== 134
yw== 135
zA== 136
zQ== 137
zg== 138
zw== 139
0A== 140
0Q== 141
0g== 142
0w== 143
1A== 144
1Q== 145
1g== 146
1w== 147
2A== 148
2Q== 149
2g== 150
2w== 151
3A== 152
3Q== 153
3g== 154
3w== 155
4A== 156
4Q== 157
4g== 158
4w== 159
5A== 160
5Q== 161
5g== 162
5w== 163
6A== 164
6Q== 165
6g== 166
6w== 167
7A== 168
7Q== 169
7g== 170
7w== 171
8A== 172
8Q== 173
8g== 174
8w== 175
9A== 176
9Q== 177
9g== 178
9w== 179
+A== 180
+Q== 181
+g== 182
+w== 183
/A== 184
/Q== 185
/g== 186
/w== 187
AA== 188
AQ== 189
Ag== 190
Aw== 191
BA== 192
BQ== 193
Bg== 194
Bw== 195
CA== 196
CQ== 197
Cg== 198
Cw== 199
DA== 200
DQ== 201
Dg== 202
Dw== 203
EA== 204
EQ== 205
Eg== 206
Ew== 207
FA== 208
FQ== 209
Fg== 210
Fw== 211
GA== 212
GQ== 213
Gg== 214
Gw== 215
HA== 216
HQ== 217
Hg== 218
Hw== 219
IA== 220
fw== 221
gA== 222
gQ== 223
gg== 224
gw== 225
hA== 226
hQ== 227
hg== 228
hw== 229
iA== 230
iQ== 231
ig== 232
iw== 233
jA== 234
jQ== 235
jg== 236
jw== 237
kA== 238
kQ== 239
kg== 240
kw== 241
lA== 242
lQ== 243
lg== 244
lw== 245
mA== 246
mQ== 247
mg== 248
mw== 249
nA== 250
nQ== 251
ng== 252
nw== 253
oA== 254
rQ== 255
ICA= 256
ICAgIA== 257
aW4= 258
IHQ= 259
ICAgICAgICA= 260
ZXI= 261
ICAg 262
b24= 263
IGE= 264
cmU= 265
YXQ= 266
c3Q= 267
ZW4= 268
b3I= 269
IHRo 270
Cgo= 271
IGM= 272
bGU= 273
IHM= 274
aXQ= 275
YW4= 276
YXI= 277
YWw= 278
IHRoZQ== 279
Owo= 280
IHA= 281
IGY= 282
b3U= 283
ID0= 284
aXM= 285
ICAgICAgIA== 286
aW5n 287
ZXM= 288
IHc= 289
aW9u 290
ZWQ= 291
aWM= 292
IGI= 293
IGQ= 294
ZXQ= 295
IG0= 296
IG8= 297
CQk= 298
cm8= 299
YXM= 300
ZWw= 301
Y3Q= 302
bmQ= 303
IGlu 304
IGg= 305
ZW50 306
aWQ= 307
IG4= 308
YW0= 309
ICAgICAgICAgICA= 310
IHRv 311
IHJl 312
LS0= 313
IHs= 314
IG9m 315
b20= 316
KTsK 317
aW0= 318
DQo= 319
ICg= 320
aWw= 321
Ly8= 322
IGFuZA== 323
dXI= 324
c2U= 325
IGw= 326
ZXg= 327
IFM= 328
YWQ= 329
ICI= 330
Y2g= 331
dXQ= 332
aWY= 333
Kio= 334
IH0= 335
ZW0= 336
b2w= 337
ICAgICAgICAgICAgICAgIA== 338
dGg= 339
KQo= 340
IHsK 341
IGc= 342
aWc= 343
aXY= 344
LAo= 345
Y2U= 346
b2Q= 347
IHY= 348
YXRl 349
IFQ= 350
YWc= 351
YXk= 352
ICo= 353
b3Q= 354
dXM= 355
IEM= 356
IHN0 357
IEk= 358
dW4= 359
dWw= 360
dWU= 361
IEE= 362
b3c= 363
ICc= 364
ZXc= 365
IDw= 366
YXRpb24= 367
KCk= 368
IGZvcg== 369
YWI= 370
b3J0 371
dW0= 372
YW1l 373
IGlz 374
cGU= 375
dHI= 376
Y2s= 377
4oA= 378
IHk= 379
aXN0 380
LS0tLQ== 381
LgoK 382
aGU= 383
IGU= 384
bG8= 385
IE0= 386
IGJl 387
ZXJz 388
IG9u 389
IGNvbg== 390
YXA= 391
dWI= 392
IFA= 393
ICAgICAgICAgICAgICAg 394
YXNz 395
aW50 396
Pgo= 397
bHk= 398
dXJu 399
ICQ= 400
OwoK 401
YXY= 402
cG9ydA== 403
aXI= 404
LT4= 405
bnQ= 406
Y3Rpb24= 407
ZW5k 408
IGRl 409
MDA= 410
aXRo 411
b3V0 412
dHVybg== 413
b3Vy 414
ICAgICA= 415
bGlj 416
cmVz 417
cHQ= 418
PT0= 419
IHRoaXM= 420
IHdo 421
IGlm 422
IEQ= 423
dmVy 424
YWdl 425
IEI= 426
aHQ= 427
ZXh0 428
PSI= 429
IHRoYXQ= 430
KioqKg== 431
IFI= 432
IGl0 433
ZXNz 434
IEY= 435
IHI= 436
b3M= 437
YW5k 438
IGFz 439
ZWN0 440
a2U= 441
cm9t 442
IC8v 443
Y29u 444
IEw= 445
KCI= 446
cXU= 447
bGFzcw== 448
IHdpdGg= 449
aXo= 450
ZGU= 451
IE4= 452
IGFs 453
b3A= 454
dXA= 455
Z2V0 456
IH0K 457
aWxl 458
IGFu 459
YXRh 460
b3Jl 461
cmk= 462
IHBybw== 463
Ow0K 464
CQkJCQ== 465
dGVy 466
YWlu 467
IFc= 468
IEU= 469
IGNvbQ== 470
IHJldHVybg== 471
YXJ0 472
IEg= 473
YWNr 474
aW1wb3J0 475
dWJsaWM= 476
IG9y 477
ZXN0 478
bWVudA== 479
IEc= 480
YWJsZQ== 481
IC0= 482
aW5l 483
aWxs 484
aW5k 485
ZXJl 486
Ojo= 487
aXR5 488
ICs= 489
IHRy 490
ZWxm 491
aWdodA== 492
KCc= 493
b3Jt 494
dWx0 495
c3Ry 496
Li4= 497
Iiw= 498
IHlvdQ== 499
eXBl 500
cGw= 501
IG5ldw== 502
IGo= 503
ICAgICAgICAgICAgICAgICAgIA== 504
IGZyb20= 505
IGV4 506
IE8= 507
MjA= 508
bGQ= 509
IFs= 510
b2M= 511
Ogo= 512
IHNl 513
IGxl 514
LS0tLS0tLS0= 515
LnM= 516
ewo= 517
Jyw= 518
YW50 519
IGF0 520
YXNl 521
LmM= 522
IGNo 523
PC8= 524
YXZl 525
YW5n 526
IGFyZQ== 527
IGludA== 528
4oCZ 529
X3Q= 530
ZXJ0 531
aWFs 532
YWN0 533
fQo= 534
aXZl 535
b2Rl 536
b3N0 537
IGNsYXNz 538
IG5vdA== 539
b2c= 540
b3Jk 541
YWx1ZQ== 542
YWxs 543
ZmY= 544
KCk7Cg== 545
b250 546
aW1l 547
YXJl 548
IFU= 549
IHBy 550
IDo= 551
aWVz 552
aXpl 553
dXJl 554
IGJ5 555
aXJl 556
IH0KCg== 557
LnA= 558
IHNo 559
aWNl 560
YXN0 561
cHRpb24= 562
dHJpbmc= 563
b2s= 564
X18= 565
Y2w= 566
IyM= 567
IGhl 568
YXJk 569
KS4= 570
IEA= 571
aWV3 572
CQkJ 573
IHdhcw== 574
aXA= 575
dGhpcw== 576
IHU= 577
IFRoZQ== 578
aWRl 579
YWNl 580
aWI= 581
YWM= 582
cm91 583
IHdl 584
amVjdA== 585
IHB1YmxpYw== 586
YWs= 587
dmU= 588
YXRo 589
b2lk 590
ID0+ 591
dXN0 592
cXVl 593
IHJlcw== 594
KSk= 595
J3M= 596
IGs= 597
YW5z 598
eXN0 599
dW5jdGlvbg== 600
KioqKioqKio= 601
IGk= 602
IHVz 603
cHA= 604
MTA= 605
b25l 606
YWls 607
PT09PQ== 608
bmFtZQ== 609
IHN0cg== 610
IC8= 611
ICY= 612
YWNo 613
ZGl2 614
eXN0ZW0= 615
ZWxs 616
IGhhdmU= 617
ZXJy 618
b3VsZA== 619
dWxs 620
cG9u 621
IEo= 622
X3A= 623
ID09 624
aWdu 625
U3Q= 626
Lgo= 627
IHBs 628
KTsKCg== 629
Zm9ybQ== 630
cHV0 631
b3VudA== 632
fQoK 633
ZGQ= 634
aXRl 635
IGdldA== 636
cnI= 637
b21l 638
IOKA 639
YXJhbQ== 640
Y2M= 641
ICov 642
RVI= 643
SW4= 644
bGVz 645
X3M= 646
b25n 647
aWU= 648
IGNhbg== 649
IFY= 650
ZXJ2 651
cHI= 652
IHVu 653
cm93 654
YmVy 655
IGRv 656
bGw= 657
IGVs 658
IHNlbGY= 659
YXRlZA== 660
YXJ5 661
IC4= 662
J10= 663
dWQ= 664
IGVu 665
IFRo 666
ICAgICAgICAgICAgICAgICAgICAgICA= 667
dGU= 668
X2M= 669
dWN0 670
IGFi 671
b3Jr 672
LmdldA== 673
ICM= 674
YXc= 675
cmVzcw== 676
b2I= 677
TmFtZQ== 678
MjAx 679
YXBw 680
Wyc= 681
IGFsbA== 682
b3J5 683
aXRpb24= 684
YW5jZQ== 685
ZWFy 686
IGNvbnQ= 687
dmVudA== 688
aWE= 689
IHdpbGw= 690
SU4= 691
ICAgICAgICAg 692
cmV0dXJu 693
IDwv 694
ZGF0YQ== 695
KQoK 696
UmU= 697
cGxl 698
aWxk 699
dGhlcg== 700
IHlvdXI= 701
Igo= 702
KCQ= 703
IG91dA== 704
KSw= 705
IGhhcw== 706
U3RyaW5n 707
c28= 708
IHVw 709
YXg= 710
IGRlZg== 711
IGJv 712
Z2U= 713
YWxzZQ== 714
T04= 715
cGVy 716
MTI= 717
aWNo 718
IGJ1dA== 719
IAo= 720
IF8= 721
X20= 722
YWRk 723
cXVlc3Q= 724
b2RlbA== 725
c2VsZg== 726
ZXJ5 727
ZnQ= 728
ZW5z 729
Ly8vLw== 730
YWtl 731
LkM= 732
IGdv 733
IGZ1bmN0aW9u 734
IEs= 735
aXZhdGU= 736
IGlt 737
IGNvbnN0 738
LnQ= 739
ICovCg== 740
KTsNCg== 741
IHZvaWQ= 742
IHNldA== 743
IFN5c3RlbQ== 744
Y3Jp 745
KCkK 746
bGk= 747
CWlm 748
Lm0= 749
YWxseQ== 750
c2V0 751
ZXA= 752
4oCZcw== 753
Ym8= 754
ZGVm 755
JywK 756
IG1l 757
ICE= 758
YXRjaA== 759
Ij4= 760
IiwK 761
ZWM= 762
IElu 763
cGg= 764
IHw= 765
X2Y= 766
IHZhcg== 767
ZW5jZQ== 768
SWQ= 769
cmVl 770
aW5r 771
bGVjdA== 772
dWc= 773
ZXRo 774
IGVsc2U= 775
LS0tLS0tLS0tLS0tLS0tLQ== 776
MTk= 777
Y29udA== 778
IHNv 779
YXRpYw== 780
IGxv 781
cHJv 782
dG9u 783
c3M= 784
b3du 785
YWJlbA== 786
b2ludA== 787
b3Vz 788
ZWxk 789
U1Q= 790
VGhl 791
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 792
UkU= 793
Ijo= 794
b2xvcg== 795
dHA= 796
ZWc= 797
a2V5 798
dWRl 799
IFN0 800
b3VuZA== 801
IGFy 802
Iik7Cg== 803
ZW5lcg== 804
c2Vy 805
MTE= 806
YmplY3Q= 807
ZXNzYWdl 808
ZmVy 809
IG1vcmU= 810
YXRpb25z 811
ZW50cw== 812
IGhpcw== 813
IHRoZXk= 814
LlM= 815
IFk= 816
dXNl 817
bmU= 818
aXNo 819
b2xk 820
X2Q= 821
aW8= 822
aWVsZA== 823
IHBlcg== 824
Q29udA== 825
aW5ncw== 826
IyMjIw== 827
IGRhdGE= 828
IHNh 829
ZWY= 830
Zm8= 831
IG9uZQ== 832
ZW5n 833
IGRpcw== 834
QVQ= 835
IG5hbWU= 836
IHRydWU= 837
dmFs 838
bGVk 839
LmY= 840
IG5l 841
IGVuZA== 842
MzI= 843
LlQ= 844
MTY= 845
Y3Jl 846
YXJr 847
bG9n 848
RXg= 849
ZXJyb3I= 850
X2lk 851
dXJyZQ== 852
YW5nZQ== 853
IG51bGw= 854
cnJheQ== 855
IG15 856
cGFu 857
aWN0 858
YXRvcg== 859
Vmlldw== 860
TGlzdA== 861
CXJldHVybg== 862
4oCd 863
IHByZQ== 864
IHg= 865
Y2x1ZGU= 866
YXJn 867
MTU= 868
b3Y= 869
Lmg= 870
ID4= 871
IHRoZWly 872
Jyk= 873
aXJzdA== 874
aWNr 875
Z2g= 876
TEU= 877
T1I= 878
IHByaXZhdGU= 879
dGVt 880
DQoNCg== 881
dXNlcg== 882
ICk= 883
Y29t 884
LkE= 885
IjsK 886
IGlk 887
cmVhZA== 888
IHdobw== 889
X2I= 890
Ij4K 891
IHRpbWU= 892
IG1hbg== 893
cnk= 894
PT09PT09PT0= 895
cm91cA== 896
cm9w 897
cHVibGlj 898
dmVs 899
dW1iZXI= 900
Ymxl 901
IHdoaWNo 902
KioqKioqKioqKioqKioqKg== 903
IGFueQ== 904
IGZhbHNl 905
d2U= 906
IHZhbHVl 907
IGxp 908
Iik= 909
bmRlcg== 910
Z3I= 911
IG5v 912
cGFyYW0= 913
MjU= 914
Zmln 915
LmNvbQ== 916
IGFwcA== 917
X2w= 918
aW9ucw== 919
LkQ= 920
IENo 921
IGFib3V0 922
IGFkZA== 923
IHN1 924
IHN0cmluZw== 925
SUQ= 926
IG92ZXI= 927
c3RyaW5n 928
Lmw= 929
b3VyY2U= 930
MDAw 931
X0M= 932
XQo= 933
IHF1 934
IFN0cmluZw== 935
Y2E= 936
U0U= 937
IHJv 938
c2g= 939
dWFs 940
VHlwZQ== 941
c29u 942
bmV3 943
ZXJu 944
IGFn 945
QVI= 946
XTsK 947
XS4= 948
ID8= 949
aWNhbA== 950
IGRlcw== 951
dXRo 952
aXg= 953
YXlz 954
IHR5cGU= 955
J3Q= 956
YXVsdA== 957
IGludGVy 958
dmFy 959
LmI= 960
IHBhcnQ= 961
LmQ= 962
dXJyZW50 963
SVQ= 964
RU4= 965
MzA= 966
ZW5j 967
KGY= 968
cmE= 969
dmFsdWU= 970
Y2hv 971
MTg= 972
dXR0b24= 973
b3Nl 974
MTQ= 975
ICE9 976
YXRlcg== 977
w6k= 978
cmVhdGU= 979
b2xs 980
cG9z 981
eWxl 982
bmc= 983
QUw= 984
dXNpbmc= 985
YW1lcw== 986
IHsNCg== 987
YXRlcw== 988
ZWx5 989
IHdvcms= 990
IGVt 991
aW5hbA== 992
IHNw 993
IHdoZW4= 994
LnNldA== 995
ICAgICAg 996
KToK 997
dG8= 998
cXVpcmU= 999
aW5kb3c= 1000
bGVtZW50 1001
cGVjdA== 1002
YXNo 1003
W2k= 1004
IHVzZQ== 1005
LkY= 1006
cGVj 1007
IGFk 1008
b3Zl 1009
Y2VwdGlvbg== 1010
ZW5ndGg= 1011
aW5jbHVkZQ== 1012
YWRlcg== 1013
ICAgICAgICAgICAgICAgICAgICAgICAgICAg 1014
YXR1cw== 1015
VGg= 1016
aXRsZQ== 1017
cml0 1018
dm9pZA== 1019
KCku 1020
KAo= 1021
IG9mZg== 1022
IG90aGVy 1023
ICYm 1024
JzsK 1025
bXM= 1026
IGJlZW4= 1027
IHRl 1028
bWw= 1029
Y28= 1030
bmM= 1031
MTM= 1032
ZXJ2aWNl 1033
ICU= 1034
KioK 1035
YW5u 1036
YWRl 1037
CgoKCg== 1038
bG9jaw== 1039
Y29uc3Q= 1040
MTAw 1041
cG9uc2U= 1042
IHN1cA== 1043
Kys= 1044
ZGF0ZQ== 1045
IGFjYw== 1046
IGhhZA== 1047
IGJ1 1048
MjAw 1049
IFJl 1050
IHdlcmU= 1051
IGZpbGU= 1052
IHdvdWxk 1053
IOKAnA== 1054
dmVu 1055
aXNz 1056
IG91cg== 1057
Y2xhc3M= 1058
cmF3 1059
IHllYXI= 1060
RGF0YQ== 1061
IHZhbA== 1062
IHNvbWU= 1063
ZnRlcg== 1064
eXM= 1065
IC8vLw== 1066
cm91bmQ= 1067
dmlldw== 1068
IHBl 1069
IHRoZXJl 1070
IHNhaWQ= 1071
ZHU= 1072
b2Y= 1073
bGluZQ== 1074
Lyo= 1075
ZHVjdA== 1076
IGhlcg== 1077
ICAgICAgICAgICAgIA== 1078
UmVz 1079
IGNv 1080
IGNvbW0= 1081
aXNl 1082
bWlu 1083
ICAgIAo= 1084
I2luY2x1ZGU= 1085
ZXRob2Q= 1086
LlA= 1087
dXRl 1088
IGFzcw== 1089
SW50 1090
YXNr 1091
bG9j 1092
IGxpa2U= 1093
b2R5 1094
IGxldA== 1095
bG9hZA== 1096
IGFt 1097
cm9s 1098
IGdy 1099
eXA= 1100
IGFsc28= 1101
IEl0 1102
dXJs 1103
aWZpYw== 1104
b3Jz 1105
X1A= 1106
X24= 1107
aWdo 1108
IHRoYW4= 1109
Q29t 1110
QU4= 1111
VUw= 1112
YXRpbmc= 1113
MTc= 1114
IFRoaXM= 1115
cmVm 1116
X1M= 1117
IHN0YXRpYw== 1118
cm9sbA== 1119
IGp1c3Q= 1120
IHJlc3VsdA== 1121
aWFu 1122
aWR0aA== 1123
IHRoZW0= 1124
KSk7Cg== 1125
ZGVy 1126
cmVhaw== 1127
Q29u 1128
Oi8v 1129
dWxl 1130
Li4u 1131
YXJjaA== 1132
ZW1lbnQ= 1133
IDw8 1134
NTA= 1135
dXNo 1136
ZW5zZQ== 1137
YXJy 1138
IGludG8= 1139
Y2Vzcw== 1140
YW1w 1141
aWVk 1142
dW1lbnQ= 1143
IFw= 1144
XSw= 1145
d28= 1146
YWxz 1147
IHdoYXQ= 1148
YW5j 1149
VmFsdWU= 1150
PSc= 1151
b2x1bQ== 1152
IHBvcw== 1153
YWdlcw== 1154
YXllcg== 1155
IHNj 1156
dWVz 1157
IikK 1158
X1Q= 1159
IGxpc3Q= 1160
KHM= 1161
IGNhc2U= 1162
Q2g= 1163
CQkJCQk= 1164
Ly8vLy8vLy8= 1165
cG9uZW50 1166
IHo= 1167
IGtu 1168
bGV0 1169
REU= 1170
cmVk 1171
IGZl 1172
IH0sCg== 1173
ICw= 1174
KHQ= 1175
IGZpcnN0 1176
Jyk7Cg== 1177
d29yZA== 1178
IGltcG9ydA== 1179
IGFjdA== 1180
IGNoYXI= 1181
Q1Q= 1182
IFRy 1183
b3BsZQ== 1184
PXs= 1185
CWY= 1186
MjQ= 1187
aWVudA== 1188
Y2VudA== 1189
Lmo= 1190
bGVjdGlvbg== 1191
KSkK 1192
IG9ubHk= 1193
IHByaW50 1194
bWVy 1195
Llc= 1196
b2Nr 1197
IC0t 1198
VGV4dA== 1199
IG9w 1200
YW5r 1201
IGl0cw== 1202
IGJhY2s= 1203
WyI= 1204
IG5lZWQ= 1205
IGNs 1206
IHN1Yg== 1207
IGxh 1208
KCg= 1209
LiI= 1210
T2JqZWN0 1211
IHN0YXJ0 1212
ZmlsZQ== 1213
KHNlbGY= 1214
bmVy 1215
ZXk= 1216
IHVzZXI= 1217
IGVudA== 1218
IENvbQ== 1219
aXRz 1220
IENvbg== 1221
b3VibGU= 1222
b3dlcg== 1223
aXRlbQ== 1224
dmVyeQ== 1225
IFdl 1226
NjQ= 1227
bGljaw== 1228
IFE= 1229
cGhw 1230
dHRw 1231
Jzo= 1232
aWNz 1233
IHVuZGVy 1234
ICoK 1235
Lkw= 1236
KTs= 1237
aWNlcw== 1238
IHJlZw== 1239
KQ0K 1240
CXB1YmxpYw== 1241
U1M= 1242
IHRoZW4= 1243
cmVhdA== 1244
aW91cw== 1245
Lkc= 1246
ZWs= 1247
aXJlY3Q= 1248
aGVjaw== 1249
Y3JpcHQ= 1250
bmluZw== 1251
IFVu 1252
IG1heQ== 1253
IFdo 1254
Qm8= 1255
SXRlbQ== 1256
c3RydWN0 1257
LnN0 1258
cmVhbQ== 1259
aWJsZQ== 1260
bG9hdA== 1261
IG9yZw== 1262
dW5k 1263
c3Vt 1264
X2lu 1265
Li4v 1266
X00= 1267
IGhvdw== 1268
cml0ZQ== 1269
Jwo= 1270
VG8= 1271
NDA= 1272
d3c= 1273
IHBlb3BsZQ== 1274
aW5kZXg= 1275
Lm4= 1276
aHR0cA== 1277
KG0= 1278
ZWN0b3I= 1279
IGluZA== 1280
IGphdg== 1281
XSwK 1282
IEhl 1283
X3N0 1284
ZnVs 1285
b2xl 1286
KXsK 1287
IHNob3VsZA== 1288
b3B5 1289
ZWxw 1290
aWVy 1291
X25hbWU= 1292
ZXJzb24= 1293
SU9O 1294
b3Rl 1295
IHRlc3Q= 1296
IGJldA== 1297
cnJvcg== 1298
dWxhcg== 1299
44A= 1300
INA= 1301
YnM= 1302
dGluZw== 1303
IG1ha2U= 1304
VHI= 1305
IGFmdGVy 1306
YXJnZXQ= 1307
Uk8= 1308
b2x1bW4= 1309
cmM= 1310
X3Jl 1311
ZGVmaW5l 1312
MjI= 1313
IHJpZ2h0 1314
cmlnaHQ= 1315
ZGF5 1316
IGxvbmc= 1317
W10= 1318
KHA= 1319
dGQ= 1320
Y29uZA== 1321
IFBybw== 1322
IHJlbQ== 1323
cHRpb25z 1324
dmlk 1325
Lmc= 1326
IGV4dA== 1327
IF9f 1328
JykK 1329
cGFjZQ== 1330
bXA= 1331
IG1pbg== 1332
c3RhbmNl 1333
YWly 1334
YWN0aW9u 1335
d2g= 1336
dHlwZQ== 1337
dXRpbA== 1338
YWl0 1339
PD8= 1340
SUM= 1341
dGV4dA== 1342
IHBo 1343
IGZs 1344
Lk0= 1345
Y2Nlc3M= 1346
YnI= 1347
Zm9yZQ== 1348
ZXJzaW9u 1349
KSwK 1350
LnJl 1351
YXRlZw== 1352
IGxvYw== 1353
aW5z 1354
LXM= 1355
dHJpYg== 1356
IEludA== 1357
IGFycmF5 1358
LCI= 1359
UHJv 1360
KGM= 1361
ZXNzaW9u 1362
PgoK 1363
IHNoZQ== 1364
Il0= 1365
YXBo 1366
IGV4cA== 1367
ZXJ0eQ== 1368
IFNl 1369
IHBhcg== 1370
dW5j 1371
RVQ= 1372
IHJlYWQ= 1373
cHJpbnQ= 1374
IHJlbA== 1375
IGZvcm0= 1376
IGRy 1377
RXhjZXB0aW9u 1378
aW5wdXQ= 1379
IHRyYW5z 1380
IyMjIyMjIyM= 1381
b3JkZXI= 1382
Qnk= 1383
IGF3 1384
aXRpZXM= 1385
dWZm 1386
cGxheQ== 1387
LmFkZA== 1388
IOKAkw== 1389
IHdhbnQ= 1390
IGNvbXA= 1391
bWVudHM= 1392
IHx8 1393
YXo= 1394
YmU= 1395
IG51bWJlcg== 1396
IHJlcXVpcmU= 1397
IEV4 1398
NjA= 1399
IGNvbA== 1400
IGtleQ== 1401
ZW1iZXI= 1402
IHR3bw== 1403
IHNpemU= 1404
IHdoZXJl 1405
VVQ= 1406
cmVzdWx0 1407
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 1408
b3VnaA== 1409
b3JsZA== 1410
b29k 1411
dWNo 1412
YXRpdmU= 1413
Z2Vy 1414
YXJlbnQ= 1415
IC8q 1416
IGFyZw== 1417
IHdoaWxl 1418
MjM= 1419
KHRoaXM= 1420
IHJlYw== 1421
IGRpZg== 1422
U3RhdGU= 1423
IHNwZWM= 1424
cmlkZQ== 1425
X0Y= 1426
IGxvb2s= 1427
QU0= 1428
aWxpdHk= 1429
ZXRlcg== 1430
4oCZdA== 1431
CgoK 1432
YXlvdXQ= 1433
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 1434
YWdlcg== 1435
IGNvdWxk 1436
IGJy 1437
ZW5kcw== 1438
dXJlcw== 1439
IGtub3c= 1440
ZXRz 1441
IElm 1442
IFNo 1443
Lnc= 1444
YmFjaw== 1445
IHNlcg== 1446
ICs9 1447
IGZy 1448
KCkpOwo= 1449
IGhhbmQ= 1450
SW5k 1451
VUxM 1452
SW0= 1453
KCk7Cgo= 1454
IG1vc3Q= 1455
IHRyeQ== 1456
IG5vdw== 1457
cm91Z2g= 1458
Pg0K 1459
YWNrYWdl 1460
IGhpbQ== 1461
Ll8= 1462
aWZ5 1463
IGJyZWFr 1464
ICk7Cg== 1465
cmVu 1466
I2RlZmluZQ== 1467
aXR0 1468
IGFw 1469
CWM= 1470
KG4= 1471
IFlvdQ== 1472
OgoK 1473
LW0= 1474
IGV2ZXJ5 1475
dXN0b20= 1476
bGllbnQ= 1477
b2N1bWVudA== 1478
Y3JpcHRpb24= 1479
RXJyb3I= 1480
LWI= 1481
0L4= 1482
XVs= 1483
OTk= 1484
dHJhbnM= 1485
IHBvaW50 1486
IHN0ZA== 1487
IGZpbA== 1488
VGltZQ== 1489
ODA= 1490
IG1vZA== 1491
IC0+ 1492
IGVycm9y 1493
YWg= 1494
IHRleHQ= 1495
cm9sbGVy 1496
bG9zZQ== 1497
cWw= 1498
IHBvbA== 1499
Pjwv 1500
IHNob3c= 1501
VXNlcg== 1502
YXNlZA== 1503
IHsKCg== 1504
IGZpbmQ= 1505
0LA= 1506
RUQ= 1507
c3Bhbg== 1508
ZW51 1509
IGN1cnJlbnQ= 1510
IHVzZWQ= 1511
Y2VwdA== 1512
Y2x1ZA== 1513
IHBsYXk= 1514
IGxvZw== 1515
dXRpb24= 1516
Zmw= 1517
IHNlZQ== 1518
aW5kb3dz 1519
IGhlbHA= 1520
IHRoZXNl 1521
IHBhc3M= 1522
IGRvd24= 1523
IGV2ZW4= 1524
YXNvbg== 1525
dWlsZA== 1526
ZnJvbQ== 1527
KGQ= 1528
IGJs 1529
bGFiZWw= 1530
ZWxzZQ== 1531
0LU= 1532
ICgh 1533
aXplZA== 1534
KCks 1535
IG9i 1536
IGl0ZW0= 1537
dW1w 1538
VVI= 1539
b3Ju 1540
IGRvbg== 1541
U2U= 1542
bWFu 1543
Mjc= 1544
YW1wbGU= 1545
dG4= 1546
PT09PT09PT09PT09PT09PQ== 1547
SGU= 1548
Z3JhbQ== 1549
IGRpZA== 1550
d24= 1551
X2g= 1552
aXZlcg== 1553
IHNt 1554
IHRocm91Z2g= 1555
IEFu 1556
Y2hl 1557
IGludg== 1558
b3VzZQ== 1559
IGVz 1560
IE5ldw== 1561
ZXhwb3J0 1562
bWFyeQ== 1563
dXRv 1564
bGVy 1565
IGxhc3Q= 1566
IGV2ZW50 1567
dHJ5 1568
77w= 1569
aWx5 1570
aWduZWQ= 1571
aW5lcw== 1572
b2xsb3c= 1573
aWNlbnNl 1574
c29sZQ== 1575
bGVhcg== 1576
KGludA== 1577
IGFnYWlu 1578
IGhpZ2g= 1579
aHRtbA== 1580
SW5kZXg= 1581
dXRob3I= 1582
IC8qKgo= 1583
IGxpbmU= 1584
RXZlbnQ= 1585
X0Q= 1586
IGRvZXM= 1587
aXRpYWw= 1588
IGNy 1589
YXJz 1590
Mjg= 1591
IHRlbQ== 1592
Y2F1c2U= 1593
ZmFjZQ== 1594
IGA= 1595
X0E= 1596
QnV0dG9u 1597
YXR1cmU= 1598
ZWN0ZWQ= 1599
RVM= 1600
aXN0ZXI= 1601
CQo= 1602
IGJlZm9yZQ== 1603
YWxl 1604
b3RoZXI= 1605
IGJlY2F1c2U= 1606
cm9pZA== 1607
IGVk 1608
aWs= 1609
cmVn 1610
IERl 1611
IGRpc3Q= 1612
fSwK 1613
IHN0YXRl 1614
IGNvbnM= 1615
cmludA== 1616
YXR0 1617
IGhlcmU= 1618
aW5lZA== 1619
IGZpbmFs 1620
ICIi 1621
S2V5 1622
TE8= 1623
IGRlbA== 1624
cHR5 1625
dGhpbmc= 1626
MjY= 1627
IEFuZA== 1628
IHJ1bg== 1629
IFg= 1630
eW0= 1631
LmFwcA== 1632
IHZlcnk= 1633
Y2Vz 1634
X04= 1635
YXJlZA== 1636
d2FyZA== 1637
bGlzdA== 1638
aXRlZA== 1639
b2xvZw== 1640
aXRjaA== 1641
Qm94 1642
aWZl 1643
MzM= 1644
IGFj 1645
IG1vZGVs 1646
IG1vbg== 1647
IHdheQ== 1648
bGV0ZQ== 1649
IGNhbGw= 1650
IGF0dA== 1651
IGNhbA== 1652
dmVydA== 1653
IGRlYw== 1654
bGVhc2U= 1655
b3Vu 1656
IH0pOwo= 1657
ZnI= 1658
Zm9ybWF0aW9u 1659
ZXRhaWw= 1660
IG51bQ== 1661
YWo= 1662
cXVlcnk= 1663
IHdlbGw= 1664
IG9iamVjdA== 1665
IEFz 1666
IHllYXJz 1667
Q29sb3I= 1668
SVM= 1669
IGRlZmF1bHQ= 1670
V2g= 1671
IGlucw== 1672
YWludA== 1673
IGphdmE= 1674
IHNpbQ== 1675
IEFy 1676
bW9u 1677
dGls 1678
KCk7DQo= 1679
KTo= 1680
U2V0 1681
Mjk= 1682
YXR0ZXI= 1683
IHZpZXc= 1684
IHByZXM= 1685
YXJyYXk= 1686
V2U= 1687
QXQ= 1688
IGJlbA== 1689
IG1hbnk= 1690
MjE= 1691
TWFu 1692
ZW5kZXI= 1693
IGJlaW5n 1694
IGdvb2Q= 1695
CQkJCQkJ 1696
YXRpb25hbA== 1697
d2FyZQ== 1698
LmxvZw== 1699
ew0K 1700
IHVzaW5n 1701
X0I= 1702
IDo9 1703
X3c= 1704
aXN0cw== 1705
bGlzaA== 1706
IHN0dWQ= 1707
IEFs 1708
IGd1 1709
Y29uZmln 1710
dXJpbmc= 1711
dGltZQ== 1712
b2tlbg== 1713
YW1lc3BhY2U= 1714
IHJlcXVlc3Q= 1715
IGNoaWxk 1716
IMM= 1717
bG9i 1718
IHBhcmFt 1719
IH0NCg== 1720
MDE= 1721
IGVjaG8= 1722
ZnVuY3Rpb24= 1723
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 1724
cHM= 1725
RWxlbWVudA== 1726
YWxr 1727
bGljYXRpb24= 1728
Ynk= 1729
U2l6ZQ== 1730
cmF3aW5n 1731
IHBlcnNvbg== 1732
ICAgICAgICAgICAgICAgICA= 1733
XG4= 1734
b2JqZWN0 1735
aW5jZQ== 1736
RW4= 1737
RmlsZQ== 1738
dWY= 1739
ZmZlY3Q= 1740
QUM= 1741
IHN0eWxl 1742
c3VtbWFyeQ== 1743
IHF1ZQ== 1744
X3I= 1745
ICgk 1746
TW9kZWw= 1747
aWRlbnQ= 1748
IG1ldGhvZA== 1749
SUw= 1750
b3R0 1751
bGVzcw== 1752
SU5H 1753
ICgp 1754
IGV4cGVjdA== 1755
eW5j 1756
cGFja2FnZQ== 1757
MzU= 1758
dXJz 1759
IHByb3Q= 1760
Li8= 1761
cHJl 1762
ICkK 1763
bWE= 1764
IHN1cg== 1765
IGZvdW5k 1766
SW5mbw== 1767
cGFy 1768
aW1lcw== 1769
LmU= 1770
YWlucw== 1771
IHBvc3Q= 1772
LWQ= 1773
NDU= 1774
b2xlYW4= 1775
IHNs 1776
UEU= 1777
IHN1Y2g= 1778
c2VsZWN0 1779
YWluZXI= 1780
IHRoaW5r 1781
IGRpZmZlcg== 1782
LnI= 1783
LyoqCg== 1784
RkY= 1785
b29s 1786
cGxhdGU= 1787
cXVhbA== 1788
IEZvcg== 1789
IG11Y2g= 1790
dWM= 1791
KG5ldw== 1792
b2R1bGU= 1793
IHNvbQ== 1794
IGh0dHA= 1795
IExpc3Q= 1796
IGNvdW50 1797
IGluc3Q= 1798
Y2hhcg== 1799
bWl0 1800
Lmlk 1801
YWtpbmc= 1802
IGdlbmVy 1803
cHg= 1804
dmljZQ== 1805
Mzc= 1806
X2RhdGE= 1807
IE5VTEw= 1808
fQ0K 1809
aWRk 1810
44CC 1811
IG1lZA== 1812
b3Jn 1813
aWRlcg== 1814
YWNoZQ== 1815
d29yaw== 1816
IGNoZWNr 1817
d2Vlbg== 1818
ICgo 1819
dGhl 1820
YW50cw== 1821
Pjw= 1822
LkI= 1823
LWM= 1824
IG9wZW4= 1825
IGVzdA== 1826
ICAgICAgICAK 1827
IG5leHQ= 1828
SU0= 1829
0YI= 1830
T1Q= 1831
w7M= 1832
IGZvbGxvdw== 1833
Y29udGVudA== 1834
ICAgICAgICAgICAg 1835
IGluY2x1ZA== 1836
SEU= 1837
IFJlcw== 1838
IGhyZWY= 1839
0Lg= 1840
IGNhcg== 1841
eXBlcw== 1842
aW1hZ2U= 1843
VW4= 1844
IGJvb2w= 1845
QUQ= 1846
IGdhbWU= 1847
LkZvcm0= 1848
cm93cw== 1849
Ki8= 1850
dmVsb3A= 1851
LkRyYXdpbmc= 1852
IHBhdGg= 1853
aXNpb24= 1854
IGVhY2g= 1855
IFBs 1856
X3R5cGU= 1857
UGF0aA== 1858
bmVjdGlvbg== 1859
IGF2 1860
Jyku 1861
IHN1cHBvcnQ= 1862
RU5U 1863
cmVt 1864
Iiku 1865
IG93bg== 1866
IGNvcg== 1867
Y291bnQ= 1868
bWlzcw== 1869
dWFsbHk= 1870
IG1lbQ== 1871
c3Rk 1872
aWVuY2U= 1873
c2VhcmNo 1874
IgoK 1875
Rm9ybQ== 1876
IHNleA== 1877
ZW5hbWU= 1878
IHNpZ24= 1879
IGV0 1880
ICAgICAgICAgIA== 1881
Jywn 1882
IEFwcA== 1883
IHRob3Nl 1884
b2Zm 1885
IGVycg== 1886
IHN5c3RlbQ== 1887
IGJlc3Q= 1888
Y29kZQ== 1889
IHNhbWU= 1890
IGRp 1891
dXNz 1892
IGNyZWF0ZQ== 1893
YXRoZXI= 1894
QXJyYXk= 1895
Lmlu 1896
ZmU= 1897
U2VydmljZQ== 1898
VU4= 1899
YXRz 1900
IFo= 1901
YWx0aA== 1902
IG1hZGU= 1903
dHJ1ZQ== 1904
QUI= 1905
IG1hcms= 1906
cmlk 1907
aWZpZWQ= 1908
LA0K 1909
eW4= 1910
cHJlc3M= 1911
IGdyb3Vw 1912
IGZpbg== 1913
IExpY2Vuc2U= 1914
RmllbGQ= 1915
ZWdlcg== 1916
IHdvcmxk 1917
aW5lc3M= 1918
dHk= 1919
IHByb2Nlc3M= 1920
KGI= 1921
IGNyZQ== 1922
YXJu 1923
aXZlcw== 1924
IG1haW4= 1925
aWRlbw== 1926
MzY= 1927
X2c= 1928
QUc= 1929
dmFsaWQ= 1930
aW1n 1931
UEk= 1932
IGNvbG9y 1933
IHJlcG9ydA== 1934
IHRha2U= 1935
cmli 1936
T00= 1937
IGRheQ== 1938
UmVxdWVzdA== 1939
IHNr 1940
YmVycw== 1941
CXM= 1942
LkFkZA== 1943
b290 1944
SW1hZ2U= 1945
IGNvbXBsZQ== 1946
b2xsZWN0aW9u 1947
IHRvcA== 1948
IGZyZWU= 1949
QVM= 1950
RGU= 1951
IE9u 1952
SUc= 1953
OTA= 1954
ZXRh 1955
RGF0ZQ== 1956
IGFjdGlvbg== 1957
MzQ= 1958
T3Zlcg== 1959
aXRvcg== 1960
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 1961
bm90 1962
IGluZGV4 1963
aGVy 1964
aWNvbg== 1965
T24= 1966
Ow0KDQo= 1967
aXZpdHk= 1968
bWFuZA== 1969
LldpbmRvd3M= 1970
T0w= 1971
IHJlYWw= 1972
IG1heA== 1973
bGFuZA== 1974
Li4uLg== 1975
cmFwaA== 1976
IGJ1aWxk 1977
bGVn 1978
YXNzd29yZA== 1979
PwoK 1980
4oCm 1981
b29r 1982
dWNr 1983
IG1lc3NhZ2U= 1984
dGVzdA== 1985
aXZlcnM= 1986
Mzg= 1987
IGlucHV0 1988
IGFydA== 1989
IGJldHdlZW4= 1990
R2V0 1991
ZW50ZXI= 1992
Z3JvdW5k 1993
ZW5l 1994
w6E= 1995
Lmxlbmd0aA== 1996
Tm9kZQ== 1997
KGk= 1998
Q2xhc3M= 1999
Zm9y 2000
IOKAlA== 2001
dGVu 2002
b2lu 2003
IGtl 2004
dWk= 2005
IElO 2006
IHRhYmxl 2007
c3Vi 2008
IExl 2009
IGhlYWQ= 2010
IG11c3Q= 2011
Ly8vLy8vLy8vLy8vLy8vLw== 2012
LnV0aWw= 2013
Q29udGV4dA== 2014
IG9yZGVy 2015
IG1vdg== 2016
b3Zlcg== 2017
IGNvbnRpbg== 2018
IHNheQ== 2019
c3RhdGlj 2020
LlRleHQ= 2021
IGNsYXNzTmFtZQ== 2022
cGFueQ== 2023
IHRlcg== 2024
aGVhZA== 2025
cmc= 2026
IHByb2R1Y3Q= 2027
VGhpcw== 2028
LuKAnQ== 2029
IEJ1dA== 2030
NzA= 2031
bG95 2032
IGRvdWJsZQ== 2033
c2c= 2034
IHBsYWNl 2035
Lng= 2036
bWVzc2FnZQ== 2037
IGluZm9ybWF0aW9u 2038
cHJpdmF0ZQ== 2039
IG9wZXI= 2040
Y2Vk 2041
ZGI= 2042
Ij48Lw== 2043
UGFyYW0= 2044
aWNsZQ== 2045
IHdlZWs= 2046
IHByb3A= 2047
dGFibGU= 2048
aWRnZXQ= 2049
cGxhY2U= 2050
UHJvcA== 2051
IEFsbA== 2052
ZWxz 2053
Ym94 2054
LgoKCgo= 2055
LlI= 2056
IFRv 2057
aXRlcg== 2058
U2g= 2059
dXJhdGlvbg== 2060
b2xkZXI= 2061
X2xpc3Q= 2062
Y29tZQ== 2063
IHN3 2064
aXphdGlvbg== 2065
CWZvcg== 2066
Ymw= 2067
IHByb2dyYW0= 2068
KGU= 2069
YXBl 2070
Y2hlY2s= 2071
LkZvcm1z 2072
IHVuZA== 2073
YXRlZ29yeQ== 2074
NzU= 2075
YWdz 2076
IHJlc3BvbnNl 2077
VVM= 2078
cmVxdWVzdA== 2079
IHN0cnVjdA== 2080
ZXNjcmlwdGlvbg== 2081
IGNvZGU= 2082
X0g= 2083
dWZmZXI= 2084
IHdpdGhvdXQ= 2085
bG9iYWw= 2086
TWFuYWdlcg== 2087
aWx0ZXI= 2088
UE8= 2089
CXRoaXM= 2090
b3B0aW9u 2091
IHNvbA== 2092
ID09PQ== 2093
YWtlcw== 2094
Q29udHJvbGxlcg== 2095
NDQ= 2096
TWVzc2FnZQ== 2097
IHJlZg== 2098
ZXZlcg== 2099
IFNv 2100
YWluaW5n 2101
LmFwcGVuZA== 2102
IHN0aWxs 2103
IHByb3ZpZA== 2104
IGFzc2VydA== 2105
bWVk 2106
IGNhcA== 2107
dXNpbmVzcw== 2108
IHJlcA== 2109
dGluZ3M= 2110
dmVk 2111
Lk4= 2112
YXBp 2113
T0Q= 2114
IGZpZWxk 2115
aXZlbg== 2116
b3Rv 2117
4oCc 2118
Y29s 2119
KHg= 2120
Z2h0 2121
UmVzdWx0 2122
Q29kZQ== 2123
Lmlz 2124
bGluaw== 2125
IGNvdXI= 2126
QW4= 2127
IHRlYW0= 2128
CWludA== 2129
aWZ0 2130
NTU= 2131
IHNlY29uZA== 2132
IGdvaW5n 2133
IHJhbmdl 2134
X0U= 2135
bmVzcw== 2136
Mzk= 2137
IGZhbQ== 2138
IG5pbA== 2139
IENvbnQ= 2140
YWlsYWJsZQ== 2141
dXRlcw== 2142
YXRhYg== 2143
IGZhY3Q= 2144
IHZpcw== 2145
KCY= 2146
IEFO 2147
MzE= 2148
QWw= 2149
dGl0bGU= 2150
IGFuZHJvaWQ= 2151
Q0U= 2152
XCI= 2153
aXJ0 2154
IHdyaXQ= 2155
0L0= 2156
CW0= 2157
ZnR3YXJl 2158
b25k 2159
IHJldA== 2160
b3NpdGlvbg== 2161
IGhvbWU= 2162
IGxlZnQ= 2163
YXJncw== 2164
bWVyaWM= 2165
NDg= 2166
IGRpcmVjdA== 2167
b2Np 2168
UGw= 2169
QXM= 2170
cmV0 2171
YWRv 2172
T2Y= 2173
Y2hu 2174
IEdldA== 2175
ZWU= 2176
cm9zcw== 2177
KCk7 2178
X19fXw== 2179
LnBo 2180
SXQ= 2181
b3V0ZQ== 2182
IGV4cGVy 2183
Y2hvb2w= 2184
d3d3 2185
fSw= 2186
IGFsbG93 2187
IMI= 2188
KCkp 2189
c2l6ZQ== 2190
aXNt 2191
YWk= 2192
dHJhY3Q= 2193
YW5l 2194
Li4uCgo= 2195
Y29udGV4dA== 2196
IGJlZw== 2197
Q0g= 2198
IHBhZ2U= 2199
aGlw 2200
bm8= 2201
Y29yZQ== 2202
c3A= 2203
IGRpZmZlcmVudA== 2204
aWFibGU= 2205
IE1l 2206
X0lO 2207
YnV0dG9u 2208
IElz 2209
ZXJ2aWNlcw== 2210
IGNh 2211
IGFyb3VuZA== 2212
QXBw 2213
cmF0aW9u 2214
IHJlY2U= 2215
IHJlYWxseQ== 2216
IGltYWdl 2217
IHRhcmdldA== 2218
IGRlcA== 2219
b3B5cmlnaHQ= 2220
dHJh 2221
aW5nbGU= 2222
aXRhbA== 2223
TGF5b3V0 2224
IGJvdGg= 2225
T3ZlcnJpZGU= 2226
YXJt 2227
PT4= 2228
YXRlcmlhbA== 2229
aWxlZA== 2230
IHB1dA== 2231
UXU= 2232
0YA= 2233
dW5n 2234
bWFw 2235
CQkJCQkJCQk= 2236
IGxldmVs 2237
Q29tcG9uZW50 2238
Ym9vaw== 2239
Y3JlZW4= 2240
X1JF 2241
IGNvbmZpZw== 2242
44E= 2243
T3I= 2244
LmRhdGE= 2245
IGRvY3VtZW50 2246
Iiwi 2247
dHJpYnV0ZQ== 2248
dXg= 2249
TG9n 2250
ZmVyZW5jZQ== 2251
cG9zdA== 2252
X2U= 2253
IGxvY2Fs 2254
YW5kb20= 2255
YXNzZXJ0 2256
VmFs 2257
bGVjdGVk 2258
aW5h 2259
YXRhYmFzZQ== 2260
QWRk 2261
IGNvbnRlbnQ= 2262
LnByaW50 2263
c2lnbmVk 2264
cmlj 2265
LiIKCg== 2266
IGZh 2267
IQoK 2268
LWY= 2269
aXZlZA== 2270
IHF1ZXN0 2271
LmV4 2272
IGZsb2F0 2273
IGRldmVsb3A= 2274
0L7Q 2275
TWFw 2276
YWRpbmc= 2277
IHBvc3M= 2278
VUU= 2279
bmFtZXNwYWNl 2280
X08= 2281
CWI= 2282
LkdldA== 2283
Pig= 2284
anNvbg== 2285
ZXRhaWxz 2286
NjY= 2287
IHRvbw== 2288
IGV4dGVuZHM= 2289
IE5vbmU= 2290
IGZvcmU= 2291
KFN0cmluZw== 2292
Zm9ybWF0 2293
IGdyZWF0 2294
aW50ZXI= 2295
Y2FsZQ== 2296
0YE= 2297
cm9u 2298
aXZpbmc= 2299
RW50 2300
ZW5jeQ== 2301
eHQ= 2302
b3k= 2303
MDU= 2304
IG1vbnRo 2305
IGhhcHA= 2306
IHN1cGVy 2307
YmFy 2308
ZGVmYXVsdA== 2309
X2Rl 2310
b3Jkcw== 2311
bG4= 2312
KHsK 2313
IEluZA== 2314
YXNlcw== 2315
IHRpdGxl 2316
IGNvbnRleHQ= 2317
MDg= 2318
b2g= 2319
LXA= 2320
RW0= 2321
IG1ldA== 2322
VGVzdA== 2323
IGxpZmU= 2324
X3Y= 2325
IFVT 2326
VUk= 2327
b2NhdGlvbg== 2328
bWQ= 2329
IFsK 2330
IF0= 2331
c3c= 2332
IGluY3Jl 2333
c2NyaXB0 2334
ZW50aWFs 2335
d2F5cw== 2336
LmRl 2337
IHNyYw== 2338
IGNhdGNo 2339
IEFtZXJpYw== 2340
Ly8K 2341
ICAgICAgICAgICAgICA= 2342
IHBheQ== 2343
cGxpdA== 2344
4oCU 2345
IGNvdW4= 2346
b2Jq 2347
LnBocA== 2348
IGNoYW5nZQ== 2349
ZXRoaW5n 2350
J3Jl 2351
YXN0ZXI= 2352
bG9z 2353
bGF0aW9u 2354
ICAK 2355
TGU= 2356
w6Q= 2357
KHs= 2358
cmVhZHk= 2359
IE5v 2360
IHBvc2l0aW9u 2361
IG9sZA== 2362
IGJvb2s= 2363
YWJsZWQ= 2364
YnVn 2365
MjAy 2366
SGFuZA== 2367
fTsKCg== 2368
aXNwbGF5 2369
YXZpbmc= 2370
MDQ= 2371
IGdvdmVy 2372
IHZlcnNpb24= 2373
U3lzdGVt 2374
bmVjdA== 2375
cmVzcG9uc2U= 2376
U3R5bGU= 2377
VXA= 2378
YW5ndQ== 2379
IHRocmVl 2380
aW5pdA== 2381
ZXJv 2382
IGxhdw== 2383
ZW5kaWY= 2384
IGJhc2U= 2385
ZW1haWw= 2386
KGw= 2387
X1Y= 2388
IGNvbmY= 2389
QVRF 2390
IGR1cmluZw== 2391
dGVz 2392
IGNvbnNvbGU= 2393
IFBy 2394
IHNwZQ== 2395
dmVz 2396
NjU= 2397
cGF0aA== 2398
aWFsb2c= 2399
ZGl0aW9u 2400
X3Rv 2401
YXJkcw== 2402
IGFnYWluc3Q= 2403
ZXR3b3Jr 2404
IFBo 2405
X0w= 2406
Y3Vy 2407
aW1pdA== 2408
V2l0aA== 2409
IHBvd2Vy 2410
aXVt 2411
JzsKCg== 2412
IHdvbQ== 2413
bGVmdA== 2414
b3VyY2Vz 2415
YXRyaQ== 2416
IElt 2417
IE1hbg== 2418
b3J0aA== 2419
JHs= 2420
ODg= 2421
cXVhbHM= 2422
ZXNl 2423
X3NpemU= 2424
IGlzcw== 2425
b3RhbA== 2426
LWc= 2427
aXF1ZQ== 2428
cmFtZQ== 2429
IHdpZHRo 2430
ZXJn 2431
KSg= 2432
aXR0bGU= 2433
VFI= 2434
IFRoZXk= 2435
ZW5jZXM= 2436
MDI= 2437
cmw= 2438
b25z 2439
IGxhYmVs 2440
Lnk= 2441
LXQ= 2442
dXBkYXRl 2443
YW5lbA== 2444
c2M= 2445
LnRv 2446
IHByb2plY3Q= 2447
w7w= 2448
IGVsZW1lbnQ= 2449
IHN1Y2Nlc3M= 2450
CQkK 2451
LnNo 2452
cmFt 2453
Y2hlZA== 2454
KCkpCg== 2455
ICgK 2456
IGRhdGU= 2457
IHRvdA== 2458
X1NU 2459
QWxs 2460
aWZpY2F0aW9u 2461
CXZhcg== 2462
IHRyaQ== 2463
Y2hlbQ== 2464
bXk= 2465
IGJpZw== 2466
IEFk 2467
IEF0 2468
b3Rz 2469
bnVt 2470
QWN0 2471
IG1hcA== 2472
ZXJh 2473
Y29wZQ== 2474
LiQ= 2475
LOKAnQ== 2476
IHBvcA== 2477
IGZldw== 2478
IGxlbg== 2479
dWlk 2480
ZXRlcnM= 2481
dWxlcw== 2482
w60= 2483
c291cmNl 2484
aHR0cHM= 2485
IGRlbQ== 2486
IGVhcg== 2487
IyMjIyMjIyMjIyMjIyMjIw== 2488
IG1hdGNo 2489
b3JpZXM= 2490
NDk= 2491
YWNlcw== 2492
IENs 2493
IG5vZGU= 2494
Nzg= 2495
aXJj 2496
bG9jYWw= 2497
dW5pdHk= 2498
fTsK 2499
IGFub3RoZXI= 2500
PDw= 2501
b2dsZQ== 2502
IHNpdA== 2503
ZXdvcms= 2504
VEU= 2505
Lkk= 2506
TlM= 2507
b2xvZ3k= 2508
b3VnaHQ= 2509
LkNvbnQ= 2510
Pj4= 2511
IGNhcmU= 2512
c3RhdGU= 2513
CXByaXZhdGU= 2514
IGVmZmVjdA== 2515
Kysp 2516
X2ZpbGU= 2517
ZW5kaW5n 2518
TGluZQ== 2519
Rm9y 2520
aW9y 2521
IFNj 2522
IGZ1bg== 2523
LlNpemU= 2524
CWVsc2U= 2525
XSk= 2526
c3RhcnQ= 2527
dmlvdXM= 2528
IH0s 2529
b3Vycw== 2530
IGxlZw== 2531
IHNlcnZpY2U= 2532
IHNpbmNl 2533
aXJvbg== 2534
TGFiZWw= 2535
IG5vbg== 2536
IGxvcw== 2537
aWN0aW9u 2538
IGZ1bGw= 2539
YWN0ZXI= 2540
Ym9hcmQ= 2541
Z3Jlc3M= 2542
IHR1cm4= 2543
aXRoZXI= 2544
MDk= 2545
LnNpemU= 2546
IGJvZHk= 2547
cmVzaA== 2548
ZXR1cm4= 2549
MTk5 2550
KF8= 2551
eWxlcw== 2552
b3JtYWw= 2553
cGk= 2554
IHNvbWV0aGluZw== 2555
IS0t 2556
dWludA== 2557
IHByb2R1 2558
IHN0YW5k 2559
IHByb2JsZQ== 2560
IGF2YWlsYWJsZQ== 2561
bXQ= 2562
IEJs 2563
IC4uLg== 2564
IGJsb2Nr 2565
SW5wdXQ= 2566
IGtlZXA= 2567
Q291bnQ= 2568
b3Blbg== 2569
IFsn 2570
IHRocm93 2571
dWlsZGVy 2572
QWN0aW9u 2573
IHRoaW5ncw== 2574
VHJ1ZQ== 2575
IHVybA== 2576
IEJv 2577
cHJpbnRm 2578
IHJlZA== 2579
anM= 2580
LmNyZWF0ZQ== 2581
IE9y 2582
U3RhdHVz 2583
SW5zdGFuY2U= 2584
IGNvbnRyb2w= 2585
IGNvbWU= 2586
IGN1c3RvbQ== 2587
bG9jYXRpb24= 2588
MDc= 2589
bW9kZWw= 2590
IA0K 2591
IHNvdXJjZQ== 2592
IGVhcw== 2593
Lm91dA== 2594
XQoK 2595
b25leQ== 2596
IGF3YWl0 2597
IHBhcnRpYw== 2598
QVA= 2599
dWJsaXNo 2600
b2Rlcw== 2601
X3Bybw== 2602
cGx5 2603
cml0ZXI= 2604
IHByb3Y= 2605
IG1pbGw= 2606
SFQ= 2607
XSkK 2608
IGNoYW5n 2609
IGFzaw== 2610
ICAgICAgICAgICAgICAgICAgICAg 2611
IG91dHB1dA== 2612
IGVtYWls 2613
Njg= 2614
LnB1c2g= 2615
IH0NCg0K 2616
aW5hdGlvbg== 2617
NDc= 2618
YXRyaXg= 2619
VGFibGU= 2620
dWNjZXNz 2621
XSk7Cg== 2622
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 2623
IGRpc2M= 2624
KFs= 2625
IGJ1c2luZXNz 2626
aGVpZ2h0 2627
Lmh0bWw= 2628
dGE= 2629
ZmllbGQ= 2630
IHJlcXVpcmVk 2631
X1I= 2632
IGdvdmVybg== 2633
fQ0KDQo= 2634
bGV4 2635
NTAw 2636
Liw= 2637
IFNldA== 2638
dXJjaA== 2639
Ly8v 2640
dHM= 2641
YWY= 2642
IG1pZ2h0 2643
aXN0b3J5 2644
U3Ry 2645
IG5ldmVy 2646
UmVzcG9uc2U= 2647
YXJzZQ== 2648
YWRh 2649
IEhvdw== 2650
ICop 2651
IDs= 2652
IGhhcmQ= 2653
QWQ= 2654
IGludGVybg== 2655
dXNlZA== 2656
KGRhdGE= 2657
bW9k 2658
YW5uZWw= 2659
IG5w 2660
dWdn 2661
IC8+Cg== 2662
IGNhbGxlZA== 2663
Ym9keQ== 2664
IGNobw== 2665
KHI= 2666
X3NldA== 2667
aXJk 2668
ID49 2669
IH07Cg== 2670
IG9wdGlvbnM= 2671
IEdlbmVy 2672
IGhlaWdodA== 2673
UG9pbnQ= 2674
WW91 2675
ZXR5 2676
Q2xpY2s= 2677
IHNtYWxs 2678
IGlkZQ== 2679
IGFjY2Vzcw== 2680
YW5ndWFnZQ== 2681
IHByb3RlY3RlZA== 2682
IGpvYg== 2683
IFRoZXJl 2684
RGVm 2685
IGFkZHJlc3M= 2686
IHVpbnQ= 2687
Tm90 2688
b28= 2689
YXBz 2690
PGRpdg== 2691
YWluZWQ= 2692
YXR1cg== 2693
IHN1bQ== 2694
LXc= 2695
IERhdGU= 2696
IGxpdHRsZQ== 2697
IGZyaQ== 2698
WVBF 2699
IHBvcnQ= 2700
ZWg= 2701
cHJpbmc= 2702
X3BhdGg= 2703
IHN0YXR1cw== 2704
MDY= 2705
YWlt 2706
Ym9vbA== 2707
IGFwcGU= 2708
IG9z 2709
Lm5hbWU= 2710
ZW5zaW9u 2711
X0c= 2712
IHVwZGF0ZQ== 2713
Q29uZmln 2714
YWZm 2715
RVJS 2716
IDw9 2717
YXRlbHk= 2718
I2lm 2719
dWN0aW9u 2720
OTU= 2721
IFRl 2722
IGxpbms= 2723
IFVzZXI= 2724
LmZpbmQ= 2725
Lm9yZw== 2726
bWU= 2727
IGdpdmVu 2728
T3V0 2729
I2VuZGlm 2730
IGJldHRlcg== 2731
UGFnZQ== 2732
IGZlZWw= 2733
ZW5u 2734
TUw= 2735
IGFscmVhZHk= 2736
IGluY2x1ZGluZw== 2737
b29nbGU= 2738
cnU= 2739
aWNhbGx5 2740
cHJvcA== 2741
bGVhbg== 2742
b3V0ZXI= 2743
IGFsd2F5cw== 2744
b3JkaW5n 2745
SWY= 2746
b3JhZ2U= 2747
IHBhcmVudA== 2748
dmlz 2749
CQkJCQkJCQ== 2750
IGdvdA== 2751
c3RhbmQ= 2752
IGxlc3M= 2753
L3M= 2754
IEFzcw== 2755
YXB0 2756
aXJlZA== 2757
IEFkZA== 2758
IGFjY291bnQ= 2759
cGxveQ== 2760
IGRlcg== 2761
cmVzZW50 2762
IGxvdA== 2763
IHZhbGlk 2764
CWQ= 2765
IGJpdA== 2766
cG9uZW50cw== 2767
IGZvbGxvd2luZw== 2768
X2V4 2769
U09O 2770
IHN1cmU= 2771
b2NpYWw= 2772
IHByb20= 2773
ZXJ0aWVz 2774
aGVhZGVy 2775
LnBybw== 2776
IGJvb2xlYW4= 2777
IHNlYXJjaA== 2778
a2Vu 2779
IG9yaWc= 2780
IGVy 2781
RWQ= 2782
RU0= 2783
YXV0 2784
bGluZw== 2785
YWxpdHk= 2786
QnlJZA== 2787
YmVk 2788
CWNhc2U= 2789
NDY= 2790
ZXRoZXI= 2791
cG9zaXQ= 2792
IGludmVzdA== 2793
IE9S 2794
IHNheXM= 2795
bWlzc2lvbg== 2796
QU1F 2797
IHRlbXA= 2798
b2Fk 2799
IHJlc3Q= 2800
aW5mbw== 2801
IGludGVyZXN0 2802
QXJn 2803
IHBlcmZvcm0= 2804
cG9ucw== 2805
IFZpZXc= 2806
IHZlcg== 2807
bGli 2808
KGNvbnN0 2809
VXRpbA== 2810
TGlzdGVuZXI= 2811
YXJnZQ== 2812
Nzc= 2813
IG11bHQ= 2814
IGRpZQ== 2815
IHNpdGU= 2816
Li4vLi4v 2817
RUw= 2818
IHZhbHVlcw== 2819
IH0pCg== 2820
cGVu 2821
Tm8= 2822
aWNybw== 2823
IGJlaA== 2824
ICcuLw== 2825
YWN5 2826
cmVj 2827
KCktPg== 2828
CSAgIA== 2829
Iikp 2830
Q29udGVudA== 2831
X1c= 2832
cGxlbWVudA== 2833
IHdvbg== 2834
IHZpZGVv 2835
YWRp 2836
cG9pbnQ= 2837
JSU= 2838
MDM= 2839
IGds 2840
ZXJ2ZWQ= 2841
dmlyb24= 2842
SUY= 2843
dXRlZA== 2844
44M= 2845
J20= 2846
IGNlcnQ= 2847
IHByb2Y= 2848
IGNlbGw= 2849
YXJp 2850
IHBsYXllcg== 2851
YWlz 2852
IGNvc3Q= 2853
IGh1bQ== 2854
KFI= 2855
IG9mZmlj 2856
a3M= 2857
LnRleHQ= 2858
YXR1cmVz 2859
IHRvdGFs 2860
ICovCgo= 2861
b3Bl 2862
IHN0YXQ= 2863
VU0= 2864
IGxvYWQ= 2865
aWdodHM= 2866
IGNsZWFy 2867
dXJv 2868
IHRlY2hu 2869
dXBwb3J0 2870
SVI= 2871
IHJvdw== 2872
IHNlZW0= 2873
IHE= 2874
IHNob3J0 2875
IE5vdA== 2876
aXBw 2877
R3JvdXA= 2878
c2VjdGlvbg== 2879
bWF4 2880
aXJs 2881
IG92ZXJyaWRl 2882
IGNvbXBhbnk= 2883
IGRvbmU= 2884
Iik7DQo= 2885
IGdyZQ== 2886
LlJl 2887
IGJlbGll 2888
cmlzdA== 2889
IGhlYWx0aA== 2890
QU5U 2891
KCkKCg== 2892
IEJl 2893
LnZhbHVl 2894
IEdy 2895
b3R0b20= 2896
IGFyZ3M= 2897
UFQ= 2898
c3RhdHVz 2899
ZnVuYw== 2900
dW1lbnRz 2901
LWg= 2902
TnVtYmVy 2903
Og0K 2904
IExvZw== 2905
ZXJ2ZXI= 2906
ICksCg== 2907
YW1lbnQ= 2908
IG9iag== 2909
aW5j 2910
IGNoaWxkcmVu 2911
aWN5 2912
SVo= 2913
YW5kcw== 2914
YWJseQ== 2915
IGRpc3RyaWI= 2916
IGN1cg== 2917
ZXJpYWw= 2918
IGRheXM= 2919
cmVhdGVk 2920
cmVjdA== 2921
LWw= 2922
aXJt 2923
aWRkZW4= 2924
b21i 2925
IGluaXRpYWw= 2926
Lmpz 2927
IOI= 2928
UXVlcnk= 2929
IG9ubGluZQ== 2930
aW1hbA== 2931
LmNvbg== 2932
YXU= 2933
VXJs 2934
Y29udHJvbA== 2935
aXJlY3Rpb24= 2936
IGluc3RhbmNl 2937
T1JU 2938
IEZy 2939
d2hlcmU= 2940
IGphdmF4 2941
IG9yZ2Fu 2942
YXB0ZXI= 2943
IHJlYXNvbg== 2944
b3B0aW9ucw== 2945
NTk= 2946
IE1hcg== 2947
KGE= 2948
IHdpdGhpbg== 2949
LuKAnQoK 2950
T0RF 2951
X0RF 2952
YWRtaW4= 2953
ZW5kZWQ= 2954
IGRlc2lnbg== 2955
IERhdGE= 2956
dW5l 2957
IEZpbGU= 2958
cm9vdA== 2959
IGNlbnQ= 2960
IGFycg== 2961
X2FkZA== 2962
bGVu 2963
cGFnZQ== 2964
LCc= 2965
X3N0cg== 2966
IGJybw== 2967
YWJpbGl0eQ== 2968
b3V0aA== 2969
NTg= 2970
L2M= 2971
cG9zZQ== 2972
aXJ0dWFs 2973
ZWFyY2g= 2974
X3VybA== 2975
YXJnaW4= 2976
SHR0cA== 2977
IHNjaG9vbA== 2978
YXZh 2979
IGNvbnNpZGVy 2980
LmxhYmVs 2981
IEFycmF5 2982
NDI= 2983
d2Vi 2984
b3B0 2985
LnByaW50bG4= 2986
dWxhdGlvbg== 2987
IGZ1bmM= 2988
UEw= 2989
ICJc 2990
IFRleHQ= 2991
YWN0b3J5 2992
KGZ1bmN0aW9u 2993
bnVsbA== 2994
IGVuZw== 2995
ZG93bg== 2996
IGluY2x1ZGU= 2997
IEVu 2998
IERy 2999
IGRi 3000
ISE= 3001
c2lkZQ== 3002
IGluaXQ= 3003
cXVpcmVk 3004
IFNoZQ== 3005
Q29sdW1u 3006
cmVhY3Q= 3007
IGFubg== 3008
IHN0b3A= 3009
IGxhdGVy 3010
IFRoYXQ= 3011
ZW50aW9u 3012
ZGY= 3013
VUc= 3014
SUxF 3015
IGNsaWVudA== 3016
cmFmdA== 3017
ZmZlcg== 3018
UE9TVA== 3019
ZWxwZXI= 3020
IGxvdmU= 3021
cXVvdGU= 3022
b3Vk 3023
IGpzb24= 3024
IGFibGU= 3025
IG1lbg== 3026
QVg= 3027
IENvcHlyaWdodA== 3028
w7Y= 3029
YXZpZw== 3030
cmVx 3031
Q2xpZW50 3032
fSk7Cg== 3033
LkNvbQ== 3034
ZXJj 3035
aWx0 3036
cGVjaWFs 3037
X2NvbQ== 3038
cm9vbQ== 3039
Lk5hbWU= 3040
IGdpdmU= 3041
YW1i 3042
aWtl 3043
IGNvbmRpdGlvbg== 3044
Y2xpZW50 3045
YXRvcnM= 3046
OiI= 3047
IGNvcHk= 3048
dXR1cmU= 3049
aXZlcnNpdHk= 3050
ZXJuYWw= 3051
e3s= 3052
IENhbg== 3053
b3VuYw== 3054
ZG8= 3055
IG9jYw== 3056
IGFwcHJv 3057
dGhlcnM= 3058
emU= 3059
IGVpdGhlcg== 3060
IEZs 3061
IGltcG9ydGFudA== 3062
IGxlYWQ= 3063
YXR0cg== 3064
QVJU 3065
RXF1YWw= 3066
IGRh 3067
ZXRjaA== 3068
ZW50aXR5 3069
IGZhbWlseQ== 3070
YWRkaW5n 3071
IG9wdGlvbg== 3072
IGV4aXN0 3073
aWNh 3074
IE9iamVjdA== 3075
Njk= 3076
J3Zl 3077
dmVycw== 3078
aXRpb25hbA== 3079
Njc= 3080
b3V0cHV0 3081
IFRydWU= 3082
IE9G 3083
X3RpbWU= 3084
IG9mZmVy 3085
IH0pOwoK 3086
SEVS 3087
ZWdpbg== 3088
IiI= 3089
IHdhdGVy 3090
IGNoZQ== 3091
IE15 3092
b3JlZA== 3093
IHN0ZXA= 3094
YW5jZXM= 3095
Q0s= 3096
QVk= 3097
4Lg= 3098
c3RydWN0aW9u 3099
KEM= 3100
MzAw 3101
b3VjaA== 3102
U3RyZWFt 3103
YWN0aXZl 3104
YW1h 3105
RW50aXR5 3106
cHJvZHVjdA== 3107
KCl7Cg== 3108
IGdvdmVybm1lbnQ= 3109
IElE 3110
YWpvcg== 3111
QW5k 3112
IGRpc3BsYXk= 3113
0Ls= 3114
IHRpbWVz 3115
IGZvdXI= 3116
IGZhcg== 3117
IHByZXNlbnQ= 3118
IE5T 3119
IFwK 3120
dWVzdA== 3121
IGJhcw== 3122
ZWNobw== 3123
Y2hpbGQ= 3124
aWZpZXI= 3125
SGFuZGxlcg== 3126
IGxpYg== 3127
UHJvcGVydHk= 3128
dHJhbnNsYXRpb24= 3129
IHJvb20= 3130
IG9uY2U= 3131
IFtd 3132
Y2VudGVy 3133
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 3134
IHJlc3VsdHM= 3135
IGNvbnRpbnVl 3136
IHRhbGs= 3137
X2dldA== 3138
IGdyb3c= 3139
LnN3 3140
ZWI= 3141
IFB1YmxpYw== 3142
T1A= 3143
ZWN1dGU= 3144
b2xz 3145
ICoq 3146
Iik7Cgo= 3147
IG1hc3M= 3148
dXJlZA== 3149
LmNsYXNz 3150
b21pYw== 3151
IG1lYW4= 3152
aXBz 3153
IGF1dA== 3154
KTsNCg0K 3155
IHVudGls 3156
IG1hcmtldA== 3157
IGFyZWE= 3158
dWl0 3159
IGxlbmd0aA== 3160
IFdpdGg= 3161
c3RydWN0b3I= 3162
ZXZlbnQ= 3163
Ij48 3164
IFNw 3165
SVY= 3166
IG11cw== 3167
aWZm 3168
IGtpbmQ= 3169
YXV0aG9y 3170
b3VuZHM= 3171
bWI= 3172
X2tleQ== 3173
NDE= 3174
d2lkdGg= 3175
cG9zaXRvcnk= 3176
IGxpZ2h0 3177
dWs= 3178
Um93 3179
b2hu 3180
YWxm 3181
dmlyb25tZW50 3182
YXBwZXI= 3183
b2xsZWN0aW9ucw== 3184
IHNpZGU= 3185
X2luZm8= 3186
IGV4YW1wbGU= 3187
aW1hcnk= 3188
IHdy 3189
IGNhbXA= 3190
Y3JpYmU= 3191
MjU1 3192
Ii8= 3193
IG1pc3M= 3194
d2F5 3195
IGJhc2Vk 3196
IHBsYW4= 3197
Vmlz 3198
b21haW4= 3199
dW5r 3200
IGF3YXk= 3201
VVA= 3202
PFQ= 3203
T1M= 3204
aW9k 3205
IE1vbg== 3206
4oCZcmU= 3207
IGxpaw== 3208
w6c= 3209
aXZlbHk= 3210
LnY= 3211
aW1lcg== 3212
aXplcg== 3213
U3Vi 3214
IGJ1dHRvbg== 3215
IFVw 3216
IGV4cGVyaWVuY2U= 3217
Q0w= 3218
IHJlbmRlcg== 3219
X3ZhbHVl 3220
IG5lYXI= 3221
VVJM 3222
YWx0 3223
IGNvdW50cnk= 3224
aWJpbGl0eQ== 3225
NTc= 3226
KCksCg== 3227
ZWFk 3228
IGF1dGhvcg== 3229
IHNwZWNpZmlj 3230
YmFzZQ== 3231
KG5hbWU= 3232
b25lcw== 3233
IERv 3234
IGFsb25n 3235
eWVhcg== 3236
IGV4cHJlc3M= 3237
Lic= 3238
ZW52 3239
IGJlZ2lu 3240
IHNvZnR3YXJl 3241
IGltcA== 3242
IHdpbg== 3243
w7Nu 3244
IHRoaW5n 3245
VHJhbnM= 3246
IFRIRQ== 3247
IDw/ 3248
IHdoeQ== 3249
IGRvZXNu 3250
aWo= 3251
Z2luZw== 3252
CWc= 3253
IHNpbmdsZQ== 3254
b2Zmc2V0 3255
YXJuaW5n 3256
b2dyYXBo 3257
bGV5 3258
X2NvdW50 3259
IGFuYWw= 3260
Y3JlYXRl 3261
L20= 3262
IFJlZw== 3263
OTg= 3264
dW5jaA== 3265
PSQ= 3266
aXNr 3267
IHJpZ2h0cw== 3268
KE0= 3269
ICIiIgo= 3270
YXBlcg== 3271
Lm1vZGVs 3272
IHBv 3273
ZW1wdHk= 3274
YXJ0bWVudA== 3275
IGFudA== 3276
IFdoZW4= 3277
IHdvbWVu 3278
IEVk 3279
IHNlYXNvbg== 3280
IGRlc3Q= 3281
w6M= 3282
KGg= 3283
IHBvc3NpYmxl 3284
IHNldmVy 3285
IGJ0bg== 3286
IGRpZG4= 3287
IHNlbnQ= 3288
IGVuYw== 3289
IGNvbW1hbmQ= 3290
IF0sCg== 3291
X3g= 3292
IHJlY2VudA== 3293
b2x1dGlvbg== 3294
dmVjdG9y 3295
IEJ5 3296
IE1heQ== 3297
IEFjdA== 3298
u78= 3299
IG1vbmV5 3300
SU5U 3301
YnNpdGU= 3302
CXA= 3303
Lg0K 3304
77u/ 3305
c2w= 3306
YXR0ZXJu 3307
IENsYXNz 3308
IHRvbGQ= 3309
dWRpbw== 3310
Y3VycmVudA== 3311
IGVxdQ== 3312
IGF1dG8= 3313
IFN0YXRl 3314
ZGE= 3315
bXNn 3316
KSk7Cgo= 3317
IHdvcmtpbmc= 3318
IHF1ZXJ5 3319
IEJy 3320
IHdpbmRvdw== 3321
YXV0aA== 3322
b25seQ== 3323
CXQ= 3324
IGxlYXN0 3325
YWdu 3326
IGV4cGw= 3327
aXR0ZXI= 3328
YXJpbmc= 3329
IGNvbHVtbg== 3330
IEdlbmVyYWw= 3331
Ijoi 3332
ZXJhbA== 3333
cmlvcg== 3334
IHJlY29yZA== 3335
SUI= 3336
RVg= 3337
IGRhdA== 3338
IG1ha2luZw== 3339
dWVk 3340
IENhcg== 3341
ZW1w 3342
Ii4= 3343
IE1lZA== 3344
IGNsb3Nl 3345
IHBlcmNlbnQ= 3346
IHBhc3Q= 3347
KGc= 3348
Oig= 3349
IHdyaXRl 3350
IG1vdmU= 3351
IHBhdA== 3352
Q29udHJvbA== 3353
LlRv 3354
IHZp 3355
Ki8K 3356
aW5hdGU= 3357
J2xs 3358
YWdlZA== 3359
TnVsbA== 3360
IHNwZWNpYWw= 3361
SVpF 3362
IGNpdHk= 3363
LyoK 3364
IEVuZw== 3365
aXhlZA== 3366
aW5hcnk= 3367
cHk= 3368
IGVmZg== 3369
YXJpbw== 3370
IHRlbGw= 3371
YXZvcg== 3372
IHNlbGVjdA== 3373
bGV2ZWw= 3374
aW11bQ== 3375
b3Blcg== 3376
QnVpbGRlcg== 3377
SVA= 3378
JyksCg== 3379
ZXNj 3380
IGZvbnQ= 3381
IjsKCg== 3382
IEFt 3383
aXNoZWQ= 3384
aWxscw== 3385
SW50ZXI= 3386
T1c= 3387
IGNvdXJzZQ== 3388
IGxhdGU= 3389
aWRkbGU= 3390
NDM= 3391
IGFtb3VudA== 3392
IGFzeW5j 3393
aW5v 3394
Y3Vs 3395
IOw= 3396
YW5kbGU= 3397
X3VzZXI= 3398
IGJlbg== 3399
IENhbA== 3400
ICRf 3401
IFJlcA== 3402
IGVub3VnaA== 3403
VG9rZW4= 3404
LnVzZXI= 3405
KGo= 3406
U2M= 3407
V2lkdGg= 3408
bm93 3409
YXRmb3Jt 3410
IGxvb2tpbmc= 3411
IGhvbGQ= 3412
TW9kdWxl 3413
SVRZ 3414
dm8= 3415
aXNvbg== 3416
LkRhdGE= 3417
eWM= 3418
IHBvdA== 3419
IFRydW1w 3420
aWR1YWw= 3421
aWRlcw== 3422
cnQ= 3423
IHByb3BlcnR5 3424
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 3425
YW1ld29yaw== 3426
Z28= 3427
IGxvdw== 3428
IHBhcmE= 3429
IHByaWNl 3430
dXJ5 3431
IHRvZGF5 3432
cm95 3433
ICcv 3434
IHBvbGl0 3435
ICcn 3436
eW1i 3437
UGg= 3438
IGFkdg== 3439
IGF0dGFjaw== 3440
IFN0ZQ== 3441
Uk9N 3442
NDAw 3443
YW5h 3444
IG1lYW5z 3445
IHN0b3J5 3446
aWRz 3447
YWtlbg== 3448
IG1lZXQ= 3449
IG1vbQ== 3450
IOKAmA== 3451
ID8+ 3452
IGRlbg== 3453
b2JpbGU= 3454
Y2hhbmdl 3455
ICAgICAgICAgICAgCg== 3456
aWNp 3457
bmE= 3458
IEZvcm0= 3459
IHNvcnQ= 3460
U2VsZWN0 3461
cGFyZQ== 3462
IHRob3VnaHQ= 3463
X2Nvbg== 3464
IHRhc2s= 3465
b2N1cw== 3466
IERF 3467
IE1pbg== 3468
IG9wdA== 3469
CWJyZWFr 3470
dW1lcg== 3471
S0U= 3472
dGhlbg== 3473
IGRldA== 3474
IFRlc3Q= 3475
cG9ydHM= 3476
IHJldmlldw== 3477
KCcv 3478
bW92ZQ== 3479
IHN3aXRjaA== 3480
RVJU 3481
cGF0Y2g= 3482
YW5ub3Q= 3483
44I= 3484
IGFib3Zl 3485
aXRpdmU= 3486
NTY= 3487
IHF1ZXN0aW9u 3488
IFF1 3489
44CCCgo= 3490
Z2xl 3491
IHdvcmQ= 3492
IHByb3ZpZGU= 3493
IFJldHVybg== 3494
IHJlc2VhcmNo 3495
w6Nv 3496
dXN0cg== 3497
IHB1Ymxpc2g= 3498
Y2hlbWE= 3499
fX0= 3500
IENPTg== 3501
LWlu 3502
YWxsYmFjaw== 3503
IGNvdmVy 3504
XFw= 3505
Y29sb3I= 3506
IElT 3507
IHdoZXRoZXI= 3508
aW1hdGU= 3509
aXNj 3510
QmFy 3511
IGRpdg== 3512
QmU= 3513
b3Vybg== 3514
IGhhdmluZw== 3515
bGVt 3516
cGxheWVy 3517
YWJz 3518
YW1lcmE= 3519
bmV5 3520
IGV4Yw== 3521
Z2V0aGVy 3522
cGxpZWQ= 3523
YW8= 3524
WyQ= 3525
ICsr 3526
aXBl 3527
c2hvdw== 3528
L2Q= 3529
Wzo= 3530
YWdlbWVudA== 3531
bGV2 3532
X0lE 3533
OTc= 3534
cmFyeQ== 3535
YWRlcw== 3536
X3Nl 3537
YXVzZQ== 3538
IGVtcGxveQ== 3539
ICovDQo= 3540
IGZyZQ== 3541
ICdA 3542
IGNvbXBsZXQ= 3543
IGxhcmdl 3544
cmFs 3545
XHg= 3546
IGZhYw== 3547
PFN0cmluZw== 3548
IGNyZWF0ZWQ= 3549
dXBlcg== 3550
LnN0YXRl 3551
IGhvc3Q= 3552
ZW5lcmlj 3553
L2I= 3554
KCE= 3555
d2hpbGU= 3556
aWFz 3557
QlVH 3558
ICk7Cgo= 3559
IHJvbGU= 3560
UmVn 3561
IENvbG9y 3562
U3RhcnQ= 3563
IHBvcm4= 3564
dG9w 3565
IHdlYg== 3566
IGRldg== 3567
IGRlYWw= 3568
KyspCg== 3569
SW50ZWdlcg== 3570
cG9zaXRpb24= 3571
Lm9u 3572
ICgi 3573
5Lg= 3574
IHByb2JsZW0= 3575
c3Y= 3576
IHByZXNz 3577
QUJMRQ== 3578
QVRJT04= 3579
IFNlZQ== 3580
YW5jaA== 3581
IHRob3VnaA== 3582
bGVlcA== 3583
IDwhLS0= 3584
IHBvaW50cw== 3585
ICAgICAgICAgICAgICAgICAgICAgICAgIA== 3586
Lko= 3587
IDo6 3588
cHRy 3589
REI= 3590
Kys7Cg== 3591
LnBuZw== 3592
bm9kZQ== 3593
c29mdA== 3594
cG9uZA== 3595
IGV2ZXI= 3596
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 3597
TWVudQ== 3598
KCcj 3599
IHNlcnZpY2Vz 3600
cGc= 3601
fSkK 3602
cGFyYW1z 3603
IGFjdHVhbGx5 3604
ICIv 3605
RW1wdHk= 3606
TWV0aG9k 3607
IGlkZW50 3608
dW5pYw== 3609
IG1pbGxpb24= 3610
IGFmZg== 3611
c3R5bGU= 3612
IGNvbmM= 3613
aW9z 3614
aWdubWVudA== 3615
VUxU 3616
UHI= 3617
IjsNCg== 3618
IHVuZGVyc3RhbmQ= 3619
dWFyeQ== 3620
IGhhcHBlbg== 3621
IHNlcnZlcg== 3622
IENv 3623
U0M= 3624
IGxlcw== 3625
IGZpbGVz 3626
R3JpZA== 3627
c3Fs 3628
IG9mdGVu 3629
IGluZm8= 3630
X3Ry 3631
c3Jj 3632
b255 3633
IHNwYWNl 3634
dW1i 3635
IHBhc3N3b3Jk 3636
IHN0b3Jl 3637
LAoK 3638
IFdoYXQ= 3639
Z2Vk 3640
IEZhbHNl 3641
VXM= 3642
c3dlcg== 3643
X2luZGV4 3644
IGZvcm1hdA== 3645
bW9zdA== 3646
c20= 3647
TmV3 3648
IGRldGFpbHM= 3649
IHByb2I= 3650
IEFORA== 3651
KCkNCg== 3652
aWxhcg== 3653
ICR7 3654
cnlwdA== 3655
LkNvbGxlY3Rpb25z 3656
JHRoaXM= 3657
IEZyZWU= 3658
X29m 3659
KGZhbHNl 3660
ZGF0ZWQ= 3661
ID4+ 3662
IGZhY2U= 3663
Q1RJT04= 3664
IHNhdmU= 3665
IHR5cA== 3666
ZGV2 3667
KCIj 3668
QUdF 3669
Y29udGFpbmVy 3670
ZWRpdA== 3671
UUw= 3672
IGl0ZW1z 3673
IHNvY2lhbA== 3674
aWVu 3675
IFJlYWN0 3676
KS4KCg== 3677
IG1hcg== 3678
IHJlZHU= 3679
IFJF 3680
LnB1dA== 3681
IG1ham9y 3682
Q2VsbA== 3683
bmV4dA== 3684
IGV4cGVjdGVk 3685
IHlldA== 3686
IGluZGl2 3687
dHJpYnV0ZXM= 3688
YXRpcw== 3689
YW1lZA== 3690
IGZvb2Q= 3691
U291cmNl 3692
KHN0cmluZw== 3693
ICsK 3694
aXRlcw== 3695
ZHI= 3696
IG1lbWJlcnM= 3697
IGNvbWI= 3698
aXRlbXM= 3699
IFBlcg== 3700
VEg= 3701
PVRydWU= 3702
IGJhcg== 3703
X1NF 3704
Y29tbQ== 3705
KHc= 3706
KQoKCg== 3707
IHNlbmQ= 3708
IGluYw== 3709
dW5zaWduZWQ= 3710
RkE= 3711
IHBhcmFtcw== 3712
YXBwaW5n 3713
cm9z 3714
dWdpbg== 3715
ZmE= 3716
IGNvbm5lY3Rpb24= 3717
IH07Cgo= 3718
IGJlY29tZQ== 3719
TW9kZQ== 3720
IGV2 3721
IGRpZmY= 3722
IFVuaXRlZA== 3723
SGVpZ2h0 3724
ZnVsbHk= 3725
aW1hZ2Vz 3726
IG1ha2Vz 3727
IGdsb2JhbA== 3728
IGNvbnRhY3Q= 3729
JzoK 3730
IGFicw== 3731
0LDQ 3732
ZmxvYXQ= 3733
IGV4Y2VwdA== 3734
IFBvbA== 3735
Q2hpbGQ= 3736
dHlw 3737
IGNlcnRhaW4= 3738
acOzbg== 3739
T1VU 3740
IGltcHJv 3741
aWxlcw== 3742
IC0tPgo= 3743
IFBhcnQ= 3744
dmFsdWVz 3745
b3Nz 3746
Lyoq 3747
aWxpdA== 3748
IEV2ZW50 3749
Y3VyaXR5 3750
c3Rlcg== 3751
IGNoYXJhY3Rlcg== 3752
MTk4 3753
IG5ld3M= 3754
ICIs 3755
IGRldmljZQ== 3756
Y2Vs 3757
bG9naW4= 3758
aGVldA== 3759
RGVmYXVsdA== 3760
QCI= 3761
CSA= 3762
Y2xpY2s= 3763
KHZhbHVl 3764
IEFi 3765
IHByZXZpb3Vz 3766
RVJST1I= 3767
b2NhbA== 3768
IG1hdGVyaWFs 3769
IGJlbG93 3770
IENocmlzdA== 3771
IG1lZGlh 3772
Y292ZXI= 3773
IFVJ 3774
IGZhaWw= 3775
IGJsYWNr 3776
IGNvbXBvbmVudA== 3777
IEFtZXJpY2Fu 3778
IGFkZGVk 3779
IGJ1eQ== 3780
c3RpdA== 3781
IGNhbWU= 3782
IGRlbGV0ZQ== 3783
cHJvcGVydHk= 3784
b2Rpbmc= 3785
IGNhcmQ= 3786
cm9wcw== 3787
IGh0dHBz 3788
IHJvb3Q= 3789
IGhhbmRsZQ== 3790
Q0M= 3791
QmFjaw== 3792
ZW1wbGF0ZQ== 3793
IGdldHRpbmc= 3794
X2J5 3795
bWFpbA== 3796
X3No 3797
LmFzc2VydA== 3798
IERlYw== 3799
KHRydWU= 3800
IGNvbXB1dA== 3801
IGNsYWlt 3802
Jz0+ 3803
IFN1Yg== 3804
IGFpcg== 3805
b3Bz 3806
bmF2 3807
ZW1lbnRz 3808
KGlk 3809
IGVudGVy 3810
YW5nZWQ= 3811
RW5k 3812
IGxvY2F0aW9u 3813
IG5pZ2h0 3814
IGRvaW5n 3815
IFJlZA== 3816
bGlu 3817
fQoKCg== 3818
dmlkZXI= 3819
IHBpY2s= 3820
IHdhdGNo 3821
ZXNzYWdlcw== 3822
IGh1bWFu 3823
IGRhbQ== 3824
cGVuZA== 3825
ZGly 3826
IHRheA== 3827
IGdpcmw= 3828
cmVldA== 3829
IGJveA== 3830
IHN0cm9uZw== 3831
KHY= 3832
cmVs 3833
IGludGVyZmFjZQ== 3834
IG1zZw== 3835
ZmVjdA== 3836
X2F0 3837
IGhvdXNl 3838
IHRyYWNr 3839
Jyk7Cgo= 3840
amU= 3841
IEpvaG4= 3842
aXN0cg== 3843
KFM= 3844
dWJl 3845
IGNl 3846
aXR0ZWQ= 3847
VkVS 3848
Kik= 3849
cGFyZW50 3850
IGFwcGxpY2F0aW9u 3851
YW55 3852
LnN3aW5n 3853
IHBhY2s= 3854
XHU= 3855
IHByYWN0 3856
IHNlY3Rpb24= 3857
Y3R4 3858
IHVuc2lnbmVk 3859
LlBvaW50 3860
IE9uZQ== 3861
xLE= 3862
aXBsZQ== 3863
YWlk 3864
0YM= 3865
VmVjdG9y 3866
Ynl0ZQ== 3867
IHdhaXQ= 3868
IMOg 3869
w6U= 3870
IHRvZ2V0aGVy 3871
IHRocm93cw== 3872
Rk8= 3873
Jykp 3874
aG9zdA== 3875
aXNpbmc= 3876
LnZpZXc= 3877
IHRlcm1z 3878
ZnJhbWV3b3Jr 3879
LXI= 3880
IGFwcGx5 3881
IHNlc3Npb24= 3882
T3B0aW9ucw== 3883
dWdnZXN0 3884
IG90aGVycw== 3885
d2l0dGVy 3886
IGZ1bmQ= 3887
SW5pdA== 3888
X18o 3889
ZW5zb3I= 3890
R0VU 3891
IHNldmVyYWw= 3892
aWk= 3893
W2o= 3894
SU8= 3895
IHRlbXBsYXRl 3896
UG9zaXRpb24= 3897
IGVjb24= 3898
YWNoaW5l 3899
IGls 3900
LnNwcmluZw== 3901
bWFpbg== 3902
ZWx0 3903
aW1lbnQ= 3904
UmVj 3905
bW0= 3906
IFVuaXZlcnNpdHk= 3907
dXJzb3I= 3908
ICAgICAgICAgICAgICAgICAgICA= 3909
R0w= 3910
aWN0dXJl 3911
aXRodWI= 3912
Y2Vy 3913
Y2FzdA== 3914
RnJvbQ== 3915
YWxlcw== 3916
IHN1YmplY3Q= 3917
cGFzc3dvcmQ= 3918
bnk= 3919
IGVzYw== 3920
LndyaXRl 3921
77yM 3922
V2hhdA== 3923
Lkg= 3924
IGhpc3Rvcnk= 3925
IEZl 3926
IGluZGl2aWR1YWw= 3927
dW5pdA== 3928
IC0tPg== 3929
IGR1 3930
SVNU 3931
IHVzZXJz 3932
ZnM= 3933
ZmFsc2U= 3934
dW50 3935
VGl0bGU= 3936
IG1vdA== 3937
IGZ1dHVyZQ== 3938
YWNoZWQ= 3939
IHN0YXJ0ZWQ= 3940
IG1vZGU= 3941
ICc8 3942
X2FycmF5 3943
IGF4 3944
J107Cg== 3945
aXJlcw== 3946
VGhlcmU= 3947
dWdodA== 3948
dG1s 3949
cG9zZWQ= 3950
aWN1bHQ= 3951
IHRvb2s= 3952
IGdhbWVz 3953
IH19 3954
ID8+Cg== 3955
IHByb2R1Y3Rz 3956
SXM= 3957
IGJhZA== 3958
IERlcw== 3959
LnBhdGg= 3960
JwoK 3961
IFBvc3Q= 3962
YXZlbA== 3963
KDo= 3964
MTUw 3965
IG5lZWRz 3966
IGtub3du 3967
Rmw= 3968
IGV4ZWM= 3969
IHNlZW4= 3970
NTE= 3971
dW1l 3972
IGJvcmRlcg== 3973
IGxpdmU= 3974
dGVtcA== 3975
UGVy 3976
IHZhcmlhYmxl 3977
aWV0 3978
IERlZg== 3979
IGdl 3980
ZW1l 3981
X2JhY2s= 3982
Zmlyc3Q= 3983
IHByb3ZpZGVk 3984
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 3985
IGZpbGVuYW1l 3986
IGhvcGU= 3987
dWx5 3988
YXV0bw== 3989
ZmluZA== 3990
X3N0cmluZw== 3991
YnRu 3992
aXR1ZGU= 3993
QXR0cmlidXRl 3994
IHlvdW5n 3995
LnR4dA== 3996
IHdlYnNpdGU= 3997
IFByb3A= 3998
IGV5 3999
PigpOwo= 4000
aW9uYWw= 4001
QVJS 4002
aWN0aW9uYXJ5 4003
dXJ0aGVy 4004
Ljwv 4005
QUxM 4006
IHN0dWR5 4007
aWxp 4008
IG5ldHdvcms= 4009
eWw= 4010
aXN0YW5jZQ== 4011
T0s= 4012
TlU= 4013
cmVzdA== 4014
IFNU 4015
aWNyb3NvZnQ= 4016
IGxpbWl0 4017
IGN1dA== 4018
KCk6Cg== 4019
IGNvdQ== 4020
b2du 4021
IHNpemVvZg== 4022
aXZhbA== 4023
IHdlbnQ= 4024
Lno= 4025
TGluaw== 4026
IGZpcmU= 4027
IGFjcm9zcw== 4028
IGNvbW11bml0eQ== 4029
cmVnaW9u 4030
TkU= 4031
UmVm 4032
IG9mZmljaWFs 4033
IHZpc2l0 4034
b2x2ZQ== 4035
IHJlY2VpdmVk 4036
IHRva2Vu 4037
IG1vbnRocw== 4038
IGFuaW0= 4039
IHBhcnRpY3VsYXI= 4040
c3R5bGVz 4041
aWNv 4042
IGVzcw== 4043
ODc= 4044
LkNvbnRyb2w= 4045
IMOp 4046
YmFsbA== 4047
IGxlYXJu 4048
aW5kaW5n 4049
VmFy 4050
IGRlY2w= 4051
KGVycg== 4052
TEVDVA== 4053
T25l 4054
cGhh 4055
IH4= 4056
Zm9ydA== 4057
YXN1cmU= 4058
IG1pbmQ= 4059
IEVuZA== 4060
Q2hlY2s= 4061
IHF1aWNr 4062
Iiks 4063
QU5E 4064
dXRpb25z 4065
QmFzZQ== 4066
X19fX19fX18= 4067
IGNvbW1lbnQ= 4068
SU5F 4069
4oCZdmU= 4070
QnV0 4071
IEVs 4072
IFVz 4073
IGFkbWlu 4074
bWFyaw== 4075
IE5hbWU= 4076
YAo= 4077
IFR5cGU= 4078
YW1pYw== 4079
cGM= 4080
bG9vcg== 4081
RlQ= 4082
IG9wcA== 4083
Y2tldA== 4084
KS0+ 4085
dHg= 4086
IHB1cg== 4087
dWVs 4088
eW1ib2w= 4089
dWF0aW9u 4090
YW5nZXI= 4091
IGJhY2tncm91bmQ= 4092
ZWNlc3M= 4093
ZWZpbmVk 4094
Li4uLi4uLi4= 4095
IGRlc2NyaXB0aW9u 4096
IHJlcHJlc2VudA== 4097
IikpOwo= 4098
cHJlc3Npb24= 4099
cm93c2Vy 4100
IHNlcmllcw== 4101
d2FyZHM= 4102
NTI= 4103
KCRf 4104
YWlzZQ== 4105
IGhvdA== 4106
YWNpdHk= 4107
cmllcw== 4108
YWN0aW9ucw== 4109
Q3JlYXRl 4110
YWRpbw== 4111
YW1wbGVz 4112
IG9yaWdpbmFs 4113
ZW5zaXZl 4114
Zm9udA== 4115
c3RyZWFt 4116
77u/dXNpbmc= 4117
LnNwcmluZ2ZyYW1ld29yaw== 4118
MDAx 4119
c2VydmVy 4120
IGJpbGw= 4121
QUNL 4122
aWxlbmFtZQ== 4123
IGZyYW1l 4124
ID0K 4125
RWRpdA== 4126
YWRpdXM= 4127
IGRyYXc= 4128
YW5rcw== 4129
IGRldGVy 4130
IGNvbWVz 4131
X2ludA== 4132
IGZvcmVhY2g= 4133
YW5nbGU= 4134
IGVsZWN0 4135
cGVjdGVk 4136
SGVhZGVy 4137
aXN0cmF0aW9u 4138
RmFsc2U= 4139
IEdhbWU= 4140
IGZpbHRlcg== 4141
QWN0aXZpdHk= 4142
IGxhcmc= 4143
aW5pdGlvbg== 4144
ICI8 4145
MjU2 4146
aXNlZA== 4147
IHJlbW92ZQ== 4148
IFRyYW5z 4149
bWV0 4150
c2Vl 4151
Rm9ybWF0 4152
Q29tbWFuZA== 4153
IEVY 4154
Tm9uZQ== 4155
IGZyb250 4156
QVNF 4157
IFJlYw== 4158
b3VuZGF0aW9u 4159
IHZv 4160
OTY= 4161
PVwi 4162
KCo= 4163
Q2hhbmdl 4164
LldyaXRl 4165
Z3JvdXA= 4166
aWVudHM= 4167
dXk= 4168
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 4169
IGRpZw== 4170
aHI= 4171
KC0= 4172
IGdlbg== 4173
bnVtYmVy 4174
dmVj 4175
dXJvcGU= 4176
ZW50cnk= 4177
TEw= 4178
IHN0ZQ== 4179
VmFsaWQ= 4180
J10s 4181
X3BhcmFt 4182
IHNlbGVjdGVk 4183
IGFjY29yZGluZw== 4184
IERpcw== 4185
IHV0aWw= 4186
QnVmZmVy 4187
X2Vycm9y 4188
IGFzc29jaQ== 4189
X1NJWkU= 4190
IHdvcg== 4191
IHByaW50Zg== 4192
cmFn 4193
wqA= 4194
REQ= 4195
IFZhbA== 4196
IGFjdGl2 4197
RW5n 4198
ZXRpbWU= 4199
IHZpcnR1YWw= 4200
YWlnbg== 4201
YXVy 4202
IFByZXM= 4203
IEV4Y2VwdGlvbg== 4204
IGFueXRoaW5n 4205
IE9mZg== 4206
IGhvdXJz 4207
IHdhcg== 4208
QXJncw== 4209
YWdpbmc= 4210
IG1vZGVscw== 4211
IFRpbWU= 4212
T2I= 4213
YW1z 4214
am95 4215
IGVhcmx5 4216
LnJlYWQ= 4217
ODY= 4218
IGNlbnRlcg== 4219
IEluaXRpYWw= 4220
IGxhbmd1YWdl 4221
bGVuZ3Ro 4222
eHk= 4223
IHNu 4224
IGluZg== 4225
UG9zdA== 4226
IGFnbw== 4227
IGVhc3k= 4228
X2NvZGU= 4229
IEFOWQ== 4230
X2No 4231
IGRvd25sb2Fk 4232
KFQ= 4233
YXZlZA== 4234
4oCT 4235
IHN0dWRlbnRz 4236
IGZpZw== 4237
bGlnaHQ= 4238
eHg= 4239
IGJ1ZmZlcg== 4240
IERlcA== 4241
IE1hdGg= 4242
SVRI 4243
IHZhcmk= 4244
IGR1ZQ== 4245
RmFjdG9yeQ== 4246
IHBvcg== 4247
IGVw 4248
b3R5cGU= 4249
IGNhbm5vdA== 4250
IHdoaXRl 4251
PGludA== 4252
dGVybg== 4253
IHJlZ2lzdGVy 4254
IHByZWQ= 4255
Y2x1cw== 4256
X2RhdGU= 4257
IC8qKg== 4258
IGF1dGg= 4259
IFtdCg== 4260
IHBlcmlvZA== 4261
bm93bg== 4262
IHZvdA== 4263
IHNjcmVlbg== 4264
J2Q= 4265
VHlwZXM= 4266
IHRtcA== 4267
0LXQ 4268
dXJhbA== 4269
IGJlbmVm 4270
X3k= 4271
IG5ldA== 4272
IFN0YXRlcw== 4273
J11bJw== 4274
IE5l 4275
IE5PVA== 4276
IG5lZw== 4277
MTAy 4278
IGNvbW1vbg== 4279
c2NvcGU= 4280
IGNyZWQ= 4281
Z2Vz 4282
X1RZUEU= 4283
IHN1Z2dlc3Q= 4284
b29t 4285
LgoKCg== 4286
IGFjY2VwdA== 4287
IHJhbmRvbQ== 4288
ZXJt 4289
IFZlY3Rvcg== 4290
d2l0aA== 4291
VEVS 4292
KHN0cg== 4293
IHJlc3BvbnM= 4294
IGhpdA== 4295
LlNldA== 4296
Z3JpZA== 4297
cmlh 4298
IGNsaWNr 4299
dW5kbGU= 4300
Q2FzZQ== 4301
aW5zZXJ0 4302
VXRpbHM= 4303
ICIiIg== 4304
IGltcGxlbWVudA== 4305
YXRhbA== 4306
dGVtcHQ= 4307
dGVtcGxhdGU= 4308
b2Ny 4309
cmV0dXJucw== 4310
IHBsYXllcnM= 4311
dXNlcnM= 4312
ZWRlZg== 4313
IFRoZXNl 4314
IGFtb25n 4315
IGRlYg== 4316
aGE= 4317
LmdldEVsZW1lbnQ= 4318
IGNpcmM= 4319
IGFuc3dlcg== 4320
IHdhbGs= 4321
IHRyZWF0 4322
IEdl 4323
IENyZWF0ZQ== 4324
IGFnZQ== 4325
IHJlcQ== 4326
T1NU 4327
YW5ndWxhcg== 4328
0Y8= 4329
IGZpdmU= 4330
NTM= 4331
IGRpc3RyaWJ1dGVk 4332
IGZyaWVuZA== 4333
VFA= 4334
IGNsZWFu 4335
b3dz 4336
LkNvbnRyb2xz 4337
ZGlz 4338
IHdvcmRz 4339
Lmlv 4340
enk= 4341
IGhlYWRlcg== 4342
IENoZWNr 4343
4oCZbQ== 4344
anVzdA== 4345
aG9sZGVy 4346
PSI8Pw== 4347
IEdOVQ== 4348
IENvbA== 4349
aW1lc3Q= 4350
ZW50aWM= 4351
ewoK 4352
IHRyZQ== 4353
bGFzdA== 4354
bGE= 4355
IFlvcms= 4356
TG8= 4357
IGRpc2N1c3M= 4358
IEdvZA== 4359
IGlzc3Vl 4360
cmV3 4361
V2luZG93 4362
IGxhbmQ= 4363
MTIw 4364
IHN0cmVhbQ== 4365
IFBhcg== 4366
IHF1YWxpdHk= 4367
UGFy 4368
X251bQ== 4369
NTQ= 4370
IHNhbA== 4371
ZWx2ZXM= 4372
T1JE 4373
KHVzZXI= 4374
IHdvcmtz 4375
IGhhbGY= 4376
ZW5zZXM= 4377
dmFz 4378
IHBvbGljZQ== 4379
KCIv 4380
dWE= 4381
IHNpbXBsZQ== 4382
QWRkcmVzcw== 4383
IGVtcHR5 4384
ZXNo 4385
MTI4 4386
VXBkYXRl 4387
IENyZWF0ZWQ= 4388
KCcu 4389
KS4K 4390
ICAgICAgICAgICAgICAgICAg 4391
IGFncmU= 4392
IEZST00= 4393
IGNvb2s= 4394
IGV2ZXJ5dGhpbmc= 4395
aWxpdGllcw== 4396
LnN0YXR1cw== 4397
IHJlbGF0aW9ucw== 4398
ZXh0ZXJu 4399
IG5vdGhpbmc= 4400
IHJ1bm5pbmc= 4401
CXZvaWQ= 4402
Ukk= 4403
X2E= 4404
X0NPTg== 4405
cG9y 4406
LnN1Yg== 4407
cmVxdWlyZQ== 4408
IENpdHk= 4409
IFdlc3Q= 4410
IG1vcg== 4411
c3RvcmU= 4412
RXF1YWxz 4413
b2Rlcg== 4414
IG5h 4415
IFtb 4416
ICgn 4417
IERvbg== 4418
RVJT 4419
L3A= 4420
Lmpzb24= 4421
YWJvcg== 4422
IHNvbWVvbmU= 4423
X3RleHQ= 4424
LmNzcw== 4425
LlRhYg== 4426
IFNvbWU= 4427
YXRv 4428
ZG91Ymxl 4429
IHNoYXJl 4430
KHZvaWQ= 4431
X2Rpcg== 4432
IHVy 4433
U3RhY2s= 4434
IFdvcmxk 4435
Llg= 4436
c3RyYWN0 4437
SG93 4438
LkdlbmVyaWM= 4439
aWNsZXM= 4440
IGVudHJ5 4441
IGNoYW5nZXM= 4442
IHBlcnNvbmFs 4443
KEE= 4444
IG9mZnNldA== 4445
X3B0cg== 4446
IHBpZQ== 4447
IEphbg== 4448
LWdyb3Vw 4449
bW9kdWxl 4450
SXRlbXM= 4451
IEhvd2V2ZXI= 4452
dmVyYWdl 4453
LkZvbnQ= 4454
IGV2ZW50cw== 4455
Lm1pbg== 4456
IGludm9s 4457
emE= 4458
IHdob2xl 4459
IG5lZWRlZA== 4460
IGxpa2VseQ== 4461
cmllZg== 4462
T1JN 4463
dmVyc2lvbg== 4464
IGZpZ2h0 4465
IGVpbg== 4466
RnJhbWU= 4467
MTk3 4468
Z2Vu 4469
IE91dA== 4470
YXZpZ2F0aW9u 4471
TGVuZ3Ro 4472
aWxsZWQ= 4473
cXVlbmNl 4474
ICE9PQ== 4475
IFNvZnR3YXJl 4476
IHdyaXRpbmc= 4477
IHJhdGU= 4478
J10sCg== 4479
UGFuZWw= 4480
aW5uZXI= 4481
IFsi 4482
IHR3 4483
Y2Q= 4484
IDsK 4485
X3N0YXRl 4486
IFNt 4487
IE1hcms= 4488
KSkKCg== 4489
cHJvdA== 4490
IE1y 4491
bWV0aG9k 4492
dXN0b21lcg== 4493
SWNvbg== 4494
IGNvcnJlY3Q= 4495
KG9iamVjdA== 4496
IE1vcmU= 4497
IGZhbGw= 4498
IHZvbA== 4499
IGRldmVsb3BtZW50 4500
ZW50bHk= 4501
IHNp 4502
bWVkaQ== 4503
dmluZw== 4504
UFA= 4505
YWtlcg== 4506
IGluZHU= 4507
IGVsaWY= 4508
IHByZXQ= 4509
IGJlbGlldmU= 4510
bnM= 4511
b21ldA== 4512
MTIz 4513
IEludGVybg== 4514
UmVjdA== 4515
U28= 4516
LmVycm9y 4517
UmVhZA== 4518
IGZlYXR1cmVz 4519
IG1pbnV0ZXM= 4520
LS0t 4521
YXNpbmc= 4522
Y3JldA== 4523
Ij4NCg== 4524
LmFubm90 4525
IGNvbGxlY3Rpb24= 4526
Jy4= 4527
IHNpbWlsYXI= 4528
IHRha2Vu 4529
KCIl 4530
T3JkZXI= 4531
J10K 4532
LW1k 4533
IFRI 4534
YWNlZA== 4535
IGlzbg== 4536
L2o= 4537
IHNvbg== 4538
Z3JhcGg= 4539
IEludGVnZXI= 4540
IG5lY2Vzcw== 4541
cmVlbg== 4542
IHVt 4543
IFw8 4544
IG1vbWVudA== 4545
IGJyaW5n 4546
IGluZGlj 4547
eXNpcw== 4548
TGV2ZWw= 4549
dmVyc2U= 4550
dXJyZW5j 4551
X3Rlc3Q= 4552
IGVudGlyZQ== 4553
RG93bg== 4554
IH0KCgo= 4555
KHJlc3VsdA== 4556
IFJlYWQ= 4557
w6g= 4558
TW9k 4559
IHRyeWluZw== 4560
IiksCg== 4561
IG1lbWJlcg== 4562
IENvcg== 4563
T0RP 4564
LWNvbnRyb2w= 4565
dW50aW1l 4566
IFNpbQ== 4567
RGlhbG9n 4568
cGxvdA== 4569
X29u 4570
IHBoeXM= 4571
fS8= 4572
IG5hbWVzcGFjZQ== 4573
CQ0K 4574
YWNj 4575
UGxheWVy 4576
QVJF 4577
ODk= 4578
IGZvb3Q= 4579
IGJvYXJk 4580
cGFydA== 4581
IHN1cw== 4582
d2lzZQ== 4583
IE1j 4584
IHB1c2g= 4585
QVRB 4586
IHBsZWFzZQ== 4587
cmllZA== 4588
d2VldA== 4589
Yml0 4590
aWRlZA== 4591
VkU= 4592
IFN3 4593
VUI= 4594
IHR5cGVz 4595
ZWRpYQ== 4596
IGNsb3M= 4597
YWNlYm9vaw== 4598
V2hlbg== 4599
IGVkaXQ= 4600
aWdnZXI= 4601
IGVuZXJn 4602
Q29udGFpbmVy 4603
IHBob3Q= 4604
IENvdW50 4605
IEV1cm9wZQ== 4606
Lklz 4607
IFJ1c3M= 4608
cGVlZA== 4609
IFN0cg== 4610
IHB5 4611
IGN1bHQ= 4612
IGRlZmluZWQ= 4613
Y2NvdW50 4614
IG9idA== 4615
LkxvY2F0aW9u 4616
IHRocmVhZA== 4617
aWxsZQ== 4618
IGluc3RlYWQ= 4619
c3Ryb25n 4620
IFNlYw== 4621
VVJF 4622
IGlkZWE= 4623
LnNl 4624
ZW15 4625
c2VsZWN0ZWQ= 4626
Q29ubmVjdGlvbg== 4627
YWNpbmc= 4628
dGhyZWFk 4629
Lm5leHQ= 4630
IGNvbGw= 4631
IGZpbG0= 4632
aXN0aWM= 4633
IGNvbXBldA== 4634
IGNvbm4= 4635
dGhvdWdo 4636
IGNvbXBhbg== 4637
b2NrZXQ= 4638
IHRlYWNo 4639
PSg= 4640
IHBob25l 4641
IGFjdGl2ZQ== 4642
Nzk= 4643
ZGVsZXRl 4644
MTAx 4645
dHJpZXM= 4646
IG1v 4647
IGRlYXRo 4648
fSk7Cgo= 4649
b2NvbA== 4650
V2lkZ2V0 4651
IGFydGljbGU= 4652
cm9kdQ== 4653
YW5kaWQ= 4654
0Ys= 4655
IENy 4656
a2E= 4657
KCk6 4658
bG9vZA== 4659
CQkJCg== 4660
IGFsbW9zdA== 4661
IHNlbGw= 4662
ZXJ2bGV0 4663
cmlw 4664
VW5pdA== 4665
IGFwcGxpYw== 4666
IGNvbm5lY3Q= 4667
IGZlYXR1cmU= 4668
IHZpYQ== 4669
Jyks 4670
IGxpbQ== 4671
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 4672
IEd1 4673
RW5naW5l 4674
IGVucw== 4675
IGVudmlyb25tZW50 4676
YmxvY2s= 4677
SEVSRQ== 4678
TlVMTA== 4679
Z3k= 4680
dGFn 4681
KSku 4682
ZXhw 4683
IGNvbXBs 4684
IGluc3RhbGw= 4685
IGNvbXBsZXRl 4686
cXVldWU= 4687
YXR1cmFs 4688
IGdlbmVyYWw= 4689
dGhvbg== 4690
IGFza2Vk 4691
b3Jlcw== 4692
KHJlcw== 4693
IHJlc2VydmVk 4694
U1A= 4695
IOKApg== 4696
xYI= 4697
IHNpZ25pZmlj 4698
T2Zm 4699
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 4700
IEFn 4701
IEp1c3Q= 4702
IEVycm9y 4703
IGluZmw= 4704
YWRhdGE= 4705
IGljb24= 4706
YXNrcw== 4707
Jyc= 4708
X0xP 4709
Py4= 4710
YWNjb3VudA== 4711
ICgq 4712
JykKCg== 4713
cmFw 4714
X3Zhcg== 4715
IEZPUg== 4716
IHBhcnR5 4717
IFlvdXI= 4718
Y2F0 4719
c3RyeQ== 4720
Lm5ldw== 4721
Ym9vdA== 4722
IE5vdg== 4723
IHZlY3Rvcg== 4724
IG5vcm1hbA== 4725
IGZ1cnRoZXI= 4726
UmVwb3NpdG9yeQ== 4727
ODAw 4728
IGRhdGFiYXNl 4729
YXR0bGU= 4730
IG11c2lj 4731
IHNwZWVk 4732
IGRvYw== 4733
cHJvY2Vzcw== 4734
SUdIVA== 4735
LnBhcnNl 4736
IHRha2luZw== 4737
IHZpb2w= 4738
Y2VlZA== 4739
IEFmdGVy 4740
IGZvcndhcmQ= 4741
IGNyaXQ= 4742
Ii8+Cg== 4743
cm90 4744
IGZhaWxlZA== 4745
ZWZvcmU= 4746
IGNvbmNlcm4= 4747
b2U= 4748
YmE= 4749
IHNlbmRlcg== 4750
IHRlcm0= 4751
aGFz 4752
PSIj 4753
IHBvdGVudGlhbA== 4754
TnVt 4755
IHB1Ymxpc2hlZA== 4756
LmNsb3Nl 4757
IEltYWdl 4758
c3RyYWludA== 4759
VUQ= 4760
IE9i 4761
IHByb2JhYmx5 4762
bGlt 4763
IjoK 4764
b2x1bWU= 4765
IGNvbnN1bQ== 4766
NzY= 4767
YWd1ZQ== 4768
ZW5zaW9ucw== 4769
IGludmVzdGln 4770
LXllYXI= 4771
Jyk7 4772
LXNt 4773
IGVuam95 4774
b3JpZw== 4775
ZXJpbmc= 4776
Y3A= 4777
bGVhc2Vk 4778
cGxlbWVudHM= 4779
IHJldHVybnM= 4780
cGF0 4781
Qk8= 4782
IEhvdXNl 4783
LkxhYmVs 4784
IHdlaWdodA== 4785
aWdoYg== 4786
IGNvbmRpdGlvbnM= 4787
IGV4Y2VwdGlvbg== 4788
ZGVzY3JpcHRpb24= 4789
IHRyYWQ= 4790
LXRv 4791
IHt9 4792
IG1vZHVsZQ== 4793
RU5E 4794
LmFw 4795
LnByb3Bz 4796
IGNvbnN0cnVjdG9y 4797
YXZlcw== 4798
IGZhdm9y 4799
IE5vdw== 4800
O2k= 4801
IE1haW4= 4802
X2s= 4803
ZXJpZXM= 4804
4oCZbGw= 4805
dHJhbnNmb3Jt 4806
aW1lc3RhbXA= 4807
UHJl 4808
IG1lcg== 4809
LnJlcw== 4810
c3RhbnQ= 4811
TG9jYXRpb24= 4812
X05BTUU= 4813
IGxvc3M= 4814
IAoK 4815
bmV0 4816
IGVuZ2luZQ== 4817
QmxvY2s= 4818
IGlzc3Vlcw== 4819
IHBhcnNl 4820
IEJhcg== 4821
IHN0YXk= 4822
IEpTT04= 4823
IGRvbQ== 4824
YWlycw== 4825
d25lcg== 4826
IGxvd2Vy 4827
IiwNCg== 4828
IERlbQ== 4829
dWZhY3Q= 4830
IHBz 4831
IHBlcmZlY3Q= 4832
Ukw= 4833
IGVkdWM= 4834
bHM= 4835
ZW1vcnk= 4836
QVJSQU5U 4837
dWdl 4838
IGV4YWN0 4839
LmtleQ== 4840
YWxsZWQ= 4841
ZWNo 4842
aWVm 4843
XC8= 4844
b2tl 4845
IGZvcm1lcg== 4846
YWxsb2M= 4847
IHNpeA== 4848
aWRh 4849
IG1hcmdpbg== 4850
IGhlYXJ0 4851
YWxk 4852
cGFjaw== 4853
LmdldEVsZW1lbnRCeUlk 4854
IFdBUlJBTlQ= 4855
IHJhdGhlcg== 4856
IGJ1aWxkaW5n 4857
ZXJtYW4= 4858
bGljZQ== 4859
IHF1ZXN0aW9ucw== 4860
aXplcw== 4861
bGVnZQ== 4862
aXJlY3Rvcnk= 4863
IGpl 4864
IGNhcw== 4865
cHJvcHM= 4866
dXRm 4867
IHNlY3VyaXR5 4868
IGhvd2V2ZXI= 4869
d2VpZ2h0 4870
IGluc2lkZQ== 4871
IHByZXNpZGVudA== 4872
Q2hhcg== 4873
IFdJVEg= 4874
Lm1hcA== 4875
IGdyYXBo 4876
IHRhZw== 4877
X3N0YXR1cw== 4878
IGF0dGVtcHQ= 4879
b3Bw 4880
dXNlcw== 4881
CWNvbnN0 4882
IHJvdW5k 4883
LCQ= 4884
IGZyaWVuZHM= 4885
RW1haWw= 4886
Pz4= 4887
UmVzb3VyY2U= 4888
S0VZ 4889
b3Nw 4890
LnF1ZXJ5 4891
IE5vcnRo 4892
YWJsZXM= 4893
aXN0cmli 4894
X2NsYXNz 4895
ZWxsbw== 4896
VGhhdA== 4897
0Lo= 4898
cGVjaWFsbHk= 4899
IFByZXNpZGVudA== 4900
IGNhbXBhaWdu 4901
IGFsdA== 4902
YXJlYQ== 4903
IGNoYWxs 4904
IG9wcG9ydA== 4905
LkNvbg== 4906
IGVuZXJneQ== 4907
bGlrZQ== 4908
LnN0cmluZw== 4909
aW5ndG9u 4910
KSo= 4911
eXk= 4912
IHByb2Zlc3Npb24= 4913
aXJ0aA== 4914
IHNlZw== 4915
5pw= 4916
IGhvcg== 4917
aWVycw== 4918
Y2Fu 4919
IGJlaGluZA== 4920
UHJvZHVjdA== 4921
Zmc= 4922
IFNr 4923
LmpwZw== 4924
Pzo= 4925
XTsKCg== 4926
IGNhbGxiYWNr 4927
IEh0dHA= 4928
0Yw= 4929
bG9uZw== 4930
TVM= 4931
QVRI 4932
IHJhaXNl 4933
IHdhbnRlZA== 4934
cm93bg== 4935
dXRvcg== 4936
bHQ= 4937
XT0= 4938
ZWxpbmU= 4939
TUE= 4940
IHNlcGFy 4941
Y3M= 4942
c2VtYg== 4943
RGlz 4944
YnNlcnY= 4945
IFdpbGw= 4946
IHBvbGljeQ== 4947
IHRoaXJk 4948
cGhvbmU= 4949
IGJlZA== 4950
L2c= 4951
Ll9f 4952
IEluYw== 4953
aXppbmc= 4954
LnJlbW92ZQ== 4955
aW5zdGFuY2U= 4956
LnR5cGU= 4957
IHNlcnY= 4958
RWFjaA== 4959
IGhhcg== 4960
IE1lc3NhZ2U= 4961
KGtleQ== 4962
U0VMRUNU 4963
UG9z 4964
KSk7DQo= 4965
IHJlY29tbQ== 4966
IHRyYWluaW5n 4967
IEVudA== 4968
IENoYXI= 4969
aWNodA== 4970
KGZpbGU= 4971
IHByaW9y 4972
R2FtZQ== 4973
IGV4aXQ= 4974
UGFyYW1z 4975
LmNvcmU= 4976
UEM= 4977
bmVz 4978
YW5jZWQ= 4979
KHJlcXVlc3Q= 4980
UGFzc3dvcmQ= 4981
fT4K 4982
IG1hZw== 4983
IHJlbGVhc2U= 4984
IHNoYWxs 4985
dWRlbnQ= 4986
IFNvdXRo 4987
YW5kbw== 4988
Oic= 4989
LlRhYkluZGV4 4990
c2s= 4991
YW5uZXI= 4992
aXNzZXQ= 4993
IG91dHNpZGU= 4994
bGVkZ2U= 4995
IOU= 4996
IFJvYg== 4997
IGltbQ== 4998
IQo= 4999
IFdlYg== 5000
RGVz 5001
QkM= 5002
YW5jaWFs 5003
Um91dGU= 5004
RGVj 5005
ZmVyZW5jZXM= 5006
IHB1cmNo 5007
IE1vZGVs 5008
Y3Rvcg== 5009
Z24= 5010
X3N0YXJ0 5011
X3Vu 5012
Lio= 5013
aXNlcw== 5014
IGdyb3VuZA== 5015
IHVuaXF1ZQ== 5016
IGJlYXV0 5017
eyI= 5018
IHBvdXI= 5019
IE9jdA== 5020
IHRyZWU= 5021
c2V0cw== 5022
X3Jlcw== 5023
JyktPg== 5024
X3JlZw== 5025
KCJc 5026
IGJ5dGU= 5027
Qmw= 5028
IGRhdGluZw== 5029
IG1hdHRlcg== 5030
IFJlbQ== 5031
ICcuLi8= 5032
IEF1Zw== 5033
IExh 5034
ICQo 5035
b3VybmFs 5036
MTEx 5037
aWFt 5038
IHNob3dz 5039
d3JpdGU= 5040
IGJhbGw= 5041
IHNpbXBseQ== 5042
IGZhc3Q= 5043
IG1lbW9yeQ== 5044
QVNT 5045
IE9m 5046
b3ZlZA== 5047
YW50ZQ== 5048
YXVs 5049
aXN0cnk= 5050
KSkpOwo= 5051
IGZpdA== 5052
PHN0cmluZw== 5053
IHBvbGl0aWNhbA== 5054
YW5jZWw= 5055
Xy4= 5056
Y2FyZA== 5057
LmN1cnJlbnQ= 5058
b2No 5059
X2ltYWdl 5060
XHQ= 5061
Iwo= 5062
KEw= 5063
IGluZHVzdHJ5 5064
Y29taW5n 5065
IGV4dHJh 5066
NjAw 5067
IHJlcG9ydGVk 5068
LnN0YXJ0 5069
IHJlc291cmNlcw== 5070
IGltZw== 5071
Zmxvdw== 5072
X0VY 5073
KG51bGw= 5074
IFByZQ== 5075
IHdyb25n 5076
aW50ZXJmYWNl 5077
UGFyYW1ldGVy 5078
bmVycw== 5079
4bs= 5080
dHVyZQ== 5081
ZXJzaXN0 5082
b3VudHJ5 5083
IHNlZW1z 5084
YWxhbmNl 5085
ZGVzdA== 5086
CVN0cmluZw== 5087
IG1haW50 5088
IHVuaXQ= 5089
YWN0ZXJz 5090
IFRS 5091
aWZ1bA== 5092
ZXhwb3J0cw== 5093
cHJvamVjdA== 5094
QXBwbGljYXRpb24= 5095
bGVnYXRl 5096
IHRha2Vz 5097
dGVybQ== 5098
IGV0Yw== 5099
dXN0ZXI= 5100
IGFwcGVhcg== 5101
YWRkcmVzcw== 5102
IGZlbQ== 5103
aHM= 5104
IGhvbQ== 5105
LC0= 5106
IGRpZmZpY3VsdA== 5107
IGNvbWluZw== 5108
T3Blbg== 5109
IHNldHRpbmdz 5110
IFdhcg== 5111
IFRoZW4= 5112
IGF1dG9t 5113
IEZvdW5kYXRpb24= 5114
IHF1aXRl 5115
RGVzY3JpcHRpb24= 5116
IGJsb2c= 5117
aXF1 5118
UFM= 5119
MTEw 5120
X2ZpZWxk 5121
SnNvbg== 5122
U1NJT04= 5123
IFNjaA== 5124
IExP 5125
IGRlc2NyaQ== 5126
IGV2ZXJ5b25l 5127
IHByZXR0eQ== 5128
IGxvbmdlcg== 5129
IG1lbnU= 5130
IGN1cnJlbnRseQ== 5131
c2Vj 5132
IHJlbGF0aW9uc2hpcA== 5133
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= 5134
IE1hcA== 5135
YXNldA== 5136
IHBhcmFtZXRlcnM= 5137
IGNydXNo 5138
Ig0K 5139
SUxJVFk= 5140
aWdyYXRpb24= 5141
IGNvdXQ= 5142
dG90YWw= 5143
IG5hbWVz 5144
bmRlZg== 5145
Iik7 5146
cmllbmQ= 5147
eW5hbWlj 5148
IGVmZm9ydA== 5149
IGFjdHVhbA== 5150
IGZpZWxkcw== 5151
T1VO 5152
dGVycw== 5153
MjUw 5154
IGZpeA== 5155
X21vZGVs 5156
IGNhc2Vz 5157
Q0E= 5158
TXk= 5159
SW50ZXJmYWNl 5160
IFNF 5161
MTk2 5162
XV0= 5163
YWxsZQ== 5164
IE5hdGlvbmFs 5165
IEFycmF5TGlzdA== 5166
aW5saW5l 5167
LlY= 5168
YXJh 5169
cmVmaXg= 5170
YXNj 5171
UmVhZGVy 5172
INC/ 5173
YXN0aWM= 5174
KCgp 5175
Q2w= 5176
LmFubm90YXRpb24= 5177
IHBlcmZvcm1hbmNl 5178
YWlseQ== 5179
LnRvU3RyaW5n 5180
Lm5ldA== 5181
dmlld3M= 5182
LmVuZA== 5183
YXllcnM= 5184
bGF0ZQ== 5185
IEFwcg== 5186
ZWRlcmFs 5187
J10p 5188
LmJvZHk= 5189
IGhpZ2hlcg== 5190
X2Zs 5191
Y3I= 5192
YWxlcnQ= 5193
X25vZGU= 5194
IEdvb2dsZQ== 5195
IGl0c2VsZg== 5196
QXV0aA== 5197
dXJyZW5jeQ== 5198
IHNpZ25pZmljYW50 5199
YXBwZW5k 5200
IHJlc3BlY3Q= 5201
c3RyYXA= 5202
IHVuYQ== 5203
cml0ZXJpYQ== 5204
UE9SVA== 5205
LmFwYWNoZQ== 5206
T3V0cHV0 5207
IHByb2dyZXNz 5208
IG1pZA== 5209
IE1pY3Jvc29mdA== 5210
IHJlc291cmNl 5211
YWJsaXNo 5212
IGRpbQ== 5213
LmxvYWQ= 5214
LkFwcA== 5215
IGRpcmVjdGlvbg== 5216
IGFkZGl0aW9uYWw= 5217
ICAgICAgICAgICAgICAgICAgICAgICAg 5218
IG51bWJlcnM= 5219
IGNvbXBhbmllcw== 5220
LlRo 5221
IHNvdW5k 5222
dXNlcm5hbWU= 5223
IHN0YXRlbWVudA== 5224
IGFsZXJ0 5225
IGNvbnRyYWN0 5226
aG9tZQ== 5227
X2xlbmd0aA== 5228
LkNvbXBvbmVudA== 5229
ZXY= 5230
LkV4 5231
77ya 5232
Ijs= 5233
IEhpZ2g= 5234
ICkKCg== 5235
IFBvaW50 5236
b3Bo 5237
IGxpbmVz 5238
LT5f 5239
IikKCg== 5240
b3g= 5241
YXBwbGljYXRpb24= 5242
IF0K 5243
CgoKCgoK 5244
MTgw 5245
IHNvb24= 5246
Y3Rpb25z 5247
aW5nZXI= 5248
IGpvaW4= 5249
IFBl 5250
IOs= 5251
IGxhcw== 5252
LkU= 5253
Y3Nz 5254
L29y 5255
IFN0YXJ0 5256
IFRP 5257
IHN1YnM= 5258
Y29ubg== 5259
Y29tcG9uZW50cw== 5260
REVCVUc= 5261
cXVhcmU= 5262
RnVuY3Rpb24= 5263
ZW5kYXI= 5264
LmluZGV4 5265
IGZpbGw= 5266
xJk= 5267
IGNob29zZQ== 5268
aG93 5269
IEFtZXJpY2E= 5270
YXNzZXRz 5271
LS0tLS0tLS0tLS0t 5272
IFZhbHVl 5273
IG9mZmljZQ== 5274
IHZlaA== 5275
IHRyYW5zZm9ybQ== 5276
IEFydA== 5277
IGluZGU= 5278
IGZu 5279
IGltcGxlbWVudHM= 5280
YW5nbw== 5281
cGxldGU= 5282
KyI= 5283
dG1w 5284
YW1pbHk= 5285
IGhhc2g= 5286
bWlzc2lvbnM= 5287
RVNU 5288
Z3Q= 5289
UHJvdmlkZXI= 5290
ICAgICAgICAgICAgICAgICAgICAgIA== 5291
IGZsYWc= 5292
IHBhcnRpY2lw 5293
ZGVu 5294
IFJldHVybnM= 5295
IG5vdGU= 5296
w7xy 5297
cG0= 5298
aWRlb3M= 5299
IHNwZWNpZmllZA== 5300
IEVO 5301
ZXN0ZXI= 5302
b2xpZA== 5303
IHVwb24= 5304
KHN0ZA== 5305
CXY= 5306
ICdc 5307
dXo= 5308
IHZlcnQ= 5309
IHZpY3Q= 5310
CXNlbGY= 5311
ICIk 5312
ODU= 5313
Lms= 5314
IGdyb3Vwcw== 5315
Z2l0aHVi 5316
bGFuZw== 5317
IG11dA== 5318
VE8= 5319
IHZl 5320
IFBsZWFzZQ== 5321
OwoKCg== 5322
YWNjZXNz 5323
IHsi 5324
cmVh 5325
IHJpc2s= 5326
aWNrZXI= 5327
b2dnbGU= 5328
CXdoaWxl 5329
QU5H 5330
LnNlbmQ= 5331
NzI= 5332
IHdvbWFu 5333
IGdldHM= 5334
IGlnbg== 5335
IElk 5336
X2xvZw== 5337
T05F 5338
IGV2aWQ= 5339
IEhhcg== 5340
X3N1Yg== 5341
IGVuZGw= 5342
IGluY2x1ZGVk 5343
KCkpOwoK 5344
IEFw 5345
aWdy 5346
IHNlbQ== 5347
IEJsYWNr 5348
ZG9j 5349
X3RhYmxl 5350
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 5351
LXVw 5352
IGNhdXNl 5353
IC4u 5354
IHZhbg== 5355
X2RpY3Q= 5356
IGZvY3Vz 5357
SU5E 5358
Q0VTUw== 5359
LkxvZw== 5360
IG11bHRpcGxl 5361
aWRv 5362
IHJlZ2FyZA== 5363
LU0= 5364
YW5kbGVy 5365
b3Vyc2U= 5366
IGRlZw== 5367
LlU= 5368
IGFkZGl0aW9u 5369
IHZhcmlvdXM= 5370
IHJlY2VpdmU= 5371
0LXQvQ== 5372
IEhU 5373
T2Jq 5374
REY= 5375
IGluY3JlYXNl 5376
IE9wZW4= 5377
XTs= 5378
IGNvbW1pdA== 5379
Pwo= 5380
YXRlZ29yaWVz 5381
YXRvcnk= 5382
c2hpcA== 5383
IE1pY2g= 5384
IGh0bWw= 5385
cm9taXNl 5386
IGxlYXZl 5387
IHN0cmF0ZWc= 5388
YXZlbg== 5389
IENvbnNvbGU= 5390
a25vd24= 5391
LW4= 5392
X0xF 5393
LmNvbXBvbmVudA== 5394
IGJyZQ== 5395
U2Vzc2lvbg== 5396
aWFuY2U= 5397
IGFsaWdu 5398
dHlwZWRlZg== 5399
X3Jlc3VsdA== 5400
IFdIRVJF 5401
LnNwbGl0 5402
IHJlYWRpbmc= 5403
RkFVTFQ= 5404
IGNsbw== 5405
IG5vdGljZQ== 5406
X3By 5407
YXJ0ZXI= 5408
IGxvY2s= 5409
IHN0YW5kYXJk 5410
ZXRpYw== 5411
ZWxsb3c= 5412
IHBhZGRpbmc= 5413
IEhpcw== 5414
IHN0YXRlcw== 5415
X2Nhc3Q= 5416
KFA= 5417
YWE= 5418
IGludGVybmFs 5419
ZWFu 5420
IFBSTw== 5421
IEtleQ== 5422
IGVzcGVjaWFsbHk= 5423
bWluZw== 5424
IGNyb3Nz 5425
IG5hdGlvbmFs 5426
X29iamVjdA== 5427
ZmlsdGVy 5428
IHNjcmlwdA== 5429
LnVwZGF0ZQ== 5430
X2k= 5431
IEFzc2VydA== 5432
L2NvcmU= 5433
JSUlJQ== 5434
IHByb2JsZW1z 5435
aXN0b3I= 5436
IC49 5437
IGFyY2g= 5438
IHdyaXR0ZW4= 5439
IG1pbGl0 5440
TUVOVA== 5441
LmNo 5442
Y2FwZQ== 5443
IE11cw== 5444
X2NvbmZpZw== 5445
IEFQSQ== 5446
Zm9vdA== 5447
IGltYWdlcw== 5448
ZW5kbA== 5449
Lklu 5450
Rmlyc3Q= 5451
IHBsYXRmb3Jt 5452
LnByb3Q= 5453
T3B0aW9u 5454
c3Rl 5455
IFRPRE8= 5456
IGZvcmNl 5457
LmNvbnQ= 5458
CWVjaG8= 5459
IERhdg== 5460
UHRy 5461
KEI= 5462
UlQ= 5463
IEJhc2U= 5464
XVsn 5465
IGFubm91bmM= 5466
Y29uc29sZQ== 5467
IFB5 5468
ZHM= 5469
LmFz 5470
IHByZXZlbnQ= 5471
YXBhbg== 5472
IHsn 5473
fTwv 5474
IFNlcnZpY2U= 5475
IFNlbg== 5476
YWRvcg== 5477
cHJvZmlsZQ== 5478
VG9w 5479
IGl0ZXI= 5480
cG8= 5481
SUVT 5482
SlNPTg== 5483
SUU= 5484
aWFudA== 5485
44CB 5486
X2o= 5487
IFNlcHQ= 5488
X21hcA== 5489
YnVt 5490
KGNvbnRleHQ= 5491
IEhvbWU= 5492
aWFucw== 5493
R0I= 5494
NjM= 5495
IGxpdmluZw== 5496
IHBhdHRlcm4= 5497
KGlucHV0 5498
aWNpZW50 5499
OTk5 5500
Q29yZQ== 5501
IGVudGl0eQ== 5502
IGludGVn 5503
Q2hhbmdlZA== 5504
IHVzZWZ1bA== 5505
LmluZm8= 5506
IHRvb2w= 5507
KGl0ZW0= 5508
IG9r 5509
IGZlZWQ= 5510
SVg= 5511
w6lz 5512
IE5ld3M= 5513
cmVtb3Zl 5514
ZXJyeQ== 5515
CQkJCQkJCQkJ 5516
aXBtZW50 5517
YXJlcw== 5518
RG8= 5519
Q3VycmVudA== 5520
LmNvbnRlbnQ= 5521
Lkdyb3Vw 5522
dXN0cmFs 5523
INGB 5524
fSk= 5525
IHBvcHVsYXI= 5526
IHN0cmU= 5527
IG1ldGhvZHM= 5528
X0VSUk9S 5529
TGVmdA== 5530
Y2Fs 5531
YnNw 5532
LlRvU3RyaW5n 5533
IGRpcg== 5534
IGFsbG93ZWQ= 5535
IGltcGFjdA== 5536
IildCg== 5537
NjI= 5538
LmNvbmZpZw== 5539
IGVsZW1lbnRz 5540
IHByb3Rl 5541
IHRyYWlu 5542
LnRy 5543
cnM= 5544
IFJlcHVibGlj 5545
IFRhc2s= 5546
NjE= 5547
YXJpZXM= 5548
KEQ= 5549
KGdldA== 5550
4oCmCgo= 5551
IHJlbGF0ZWQ= 5552
IHZlcnM= 5553
IHNpbA== 5554
ICIiOwo= 5555
IGNtZA== 5556
IHRlY2hub2xvZ3k= 5557
LndpZHRo 5558
RmxvYXQ= 5559
IFVzZQ== 5560
Qm9keQ== 5561
c2hvdWxk 5562
LmpvaW4= 5563
Rm9udA== 5564
bGx1bQ== 5565
eWNsZQ== 5566
IEJyaXQ= 5567
IG1pdA== 5568
IHNjYWxl 5569
IChf 5570
ZXJuZWw= 5571
IikpCg== 5572
IHNjb3Jl 5573
L3Y= 5574
IHN0dWRlbnQ= 5575
VUM= 5576
LnNob3c= 5577
IGF2ZXJhZ2U= 5578
RW5hYmxlZA== 5579
KGV4 5580
Y29tbW9u 5581
aW1hdGlvbg== 5582
OkAi 5583
Y2hpZQ== 5584
IC4uLgoK 5585
cml2ZXI= 5586
IE1hcmNo 5587
Y2F0ZWdvcnk= 5588
Zmlu 5589
IGNvdXJ0 5590
0LI= 5591
U2VydmVy 5592
IGNvbnRhaW5lcg== 5593
LXN0 5594
X2Zvcg== 5595
IHBhcnRz 5596
IGRlY2lzaW9u 5597
b2Jz 5598
b3Vi 5599
bWl0dGVk 5600
ICQoJyM= 5601
IHNhdw== 5602
IGFwcHJvYWNo 5603
SUNF 5604
IHNheWluZw== 5605
IGFueW9uZQ== 5606
bWV0YQ== 5607
U0Q= 5608
IHNvbmc= 5609
ZGlzcGxheQ== 5610
T3Blcg== 5611
b3V0ZXM= 5612
IGNoYW5uZWw= 5613
IGNoYW5nZWQ= 5614
w6o= 5615
IGZpbmFsbHk= 5616
X251bWJlcg== 5617
UGxlYXNl 5618
4KQ= 5619
b3Jpbmc= 5620
LXJl 5621
IGtpbGw= 5622
IGRydWc= 5623
d2luZG93 5624
IGNvbnZlcnQ= 5625
b21icmU= 5626
IHdheXM= 5627
SGVscGVy 5628
IEZpcnN0 5629
KF9f 5630
dXJpdHk= 5631
IFdpbmRvd3M= 5632
ZWVz 5633
IG1hdA== 5634
cmFwcGVy 5635
IHBsdXM= 5636
YW5nZXM= 5637
Il0u 5638
YXpvbg== 5639
L3Q= 5640
bGF0 5641
YXN0ZQ== 5642
IHByb2ZpbGU= 5643
IHJlYWR5 5644
I2lmbmRlZg== 5645
cm90ZQ== 5646
IHNlbnNl 5647
R2VuZXI= 5648
IENvbmZpZw== 5649
b215 5650
IEp1bmU= 5651
IGxhdGVzdA== 5652
IHNhZg== 5653
IHJlZ2lvbg== 5654
IGRlZXA= 5655
d2l0Y2g= 5656
IFBhcms= 5657
fWA= 5658
IEZyb20= 5659
SUk= 5660
IGN2 5661
IHJlYWNo 5662
IGNvdW50ZXI= 5663
IFdvcms= 5664
IFVSTA== 5665
IFVwZGF0ZQ== 5666
JywNCg== 5667
IGltbWVkaQ== 5668
Y2xvc2U= 5669
YWRvcw== 5670
ZmVycmVk 5671
IHdlZWtz 5672
dXJn 5673
IGRhbWFnZQ== 5674
IGxvc3Q= 5675
YW5p 5676
X2xv 5677
IGhpbXNlbGY= 5678
IGRvZw== 5679
KV0K 5680
778= 5681
cGly 5682
dHQ= 5683
IHBhcGVy 5684
IHRoZW1z 5685
c2Vjb25k 5686
IHN0YWZm 5687
IElucHV0 5688
Iis= 5689
IEZhY2Vib29r 5690
IGFsbG9j 5691
IHNjaGVk 5692
QUNF 5693
IHRoZW1zZWx2ZXM= 5694
IENvbXBvbmVudA== 5695
IGRyaXZlcg== 5696
amE= 5697
KHBhdGg= 5698
IGNhdGVnb3J5 5699
YWxscw== 5700
cHU= 5701
bGx1bWluYXRl 5702
IEFjdGlvbg== 5703
LmJ1dHRvbg== 5704
IEdM 5705
aXN0aWNz 5706
IG9pbA== 5707
IHN0b2Nr 5708
Pic= 5709
IGRlYWQ= 5710
VkFM 5711
UVVF 5712
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 5713
IGNoYXJn 5714
UmV0dXJu 5715
IGZ1bA== 5716
ZG9t 5717
IHJ1bGVz 5718
IG1vZGlmeQ== 5719
IGV2YWw= 5720
aGFt 5721
YXRlbWVudA== 5722
XDw= 5723
dWxh 5724
PUZhbHNl 5725
UkE= 5726
IGNvbnRhaW5z 5727
NzQ= 5728
IHN0YWNr 5729
bWFy 5730
IHt9Cg== 5731
IHVuZGVmaW5lZA== 5732
QXNz 5733
IENoaW5h 5734
dmV5 5735
Kgo= 5736
IHBsYXlpbmc= 5737
KS8= 5738
YWN0b3I= 5739
IGJvdHRvbQ== 5740
bGllcg== 5741
IE51bWJlcg== 5742
IGNvdXBsZQ== 5743
REM= 5744
IFNP 5745
Z29y 5746
LnNldFRleHQ= 5747
c3VjY2Vzcw== 5748
Y29tbWFuZA== 5749
RmlsdGVy 5750
IE91cg== 5751
X2l0ZW0= 5752
IGN0eA== 5753
IHJvYWQ= 5754
VmVyc2lvbg== 5755
Y2FzZQ== 5756
dXJ0 5757
YXZpb3I= 5758
eWNo 5759
c2VtYmx5 5760
IFByb2R1Y3Q= 5761
IGhlbGQ= 5762
YWZl 5763
IGluY2x1ZGVz 5764
PHF1b3Rl 5765
IGF2b2lk 5766
IEZpbg== 5767
IE1vZA== 5768
IHRhYg== 5769
YW5v 5770
w7E= 5771
aXBwaW5n 5772
LWU= 5773
IGluc2VydA== 5774
dGFyZ2V0 5775
Y2hhbg== 5776
Lk1vZGVs 5777
SU1F 5778
XAo= 5779
IG1hY2hpbmU= 5780
YXZ5 5781
IE5P 5782
IEludGVy 5783
IG9wZXJhdGlvbg== 5784
bW9kYWw= 5785
VGFn 5786
XTo= 5787
IHByb2R1Y3Rpb24= 5788
IGFyZWFz 5789
IHJlbg== 5790
X2Zyb20= 5791
bmJzcA== 5792
IG9wZXJhdG9y 5793
bWVu 5794
YXBwZWQ= 5795
X3Blcg== 5796
emVu 5797
KCIu 5798
LnNhdmU= 5799
PSJ7ew== 5800
IHRvcg== 5801
KHJlc3BvbnNl 5802
IGNhbmRpZA== 5803
IGNvbnY= 5804
YWlsZWQ= 5805
IExpYg== 5806
Y29tcA== 5807
dXJh 5808
77+9 5809
IEhlcmU= 5810
IGFyZ3VtZW50 5811
aG9vZA== 5812
IGVzdGFibGlzaA== 5813
b2dyYXBoeQ== 5814
IG9uQ2xpY2s= 5815
YW1iZGE= 5816
IHNjaA== 5817
IG1vdmll 5818
IHNlYw== 5819
IGFjdGl2aXR5 5820
2Kc= 5821
IHNxbA== 5822
X2FsbA== 5823
aW5jaXA= 5824
IHByb3ZpZGVz 5825
IHN5cw== 5826
YWNrZXQ= 5827
IHdhc24= 5828
IHVzZXM= 5829
IEZ1bmN0aW9u 5830
Lmdvb2dsZQ== 5831
IFJlc3VsdA== 5832
ODQ= 5833
VmlzaWJsZQ== 5834
YWdtYQ== 5835
ZWxjb21l 5836
IFN5 5837
IENlbnQ= 5838
QUxTRQ== 5839
YWNpw7Nu 5840
RVhU 5841
IGxpY2Vuc2U= 5842
IExvbmc= 5843
IGFjY29t 5844
IGFiaWxpdHk= 5845
LmhlaWdodA== 5846
QWN0aXZl 5847
b2xvZ2ljYWw= 5848
b2x5 5849
KSks 5850
LlNl 5851
IHBhcmFtZXRlcg== 5852
cHJpdGU= 5853
QUJJTElUWQ== 5854
LnNlcnZpY2U= 5855
IEdyb3Vw 5856
X3F1ZXJ5 5857
IEl0ZW0= 5858
aW5pbmc= 5859
IGp1ZA== 5860
aW1z 5861
Zml4 5862
aW5kZXI= 5863
YWdyYW0= 5864
IGZ1bmN0aW9ucw== 5865
IGV4cGVyaQ== 5866
IEVt 5867
IHJvdA== 5868
IHBlbg== 5869
LmJ0bg== 5870
IEFT 5871
I2lmZGVm 5872
IGNob2ljZQ== 5873
IFBhZ2U= 5874
X1BSTw== 5875
UVU= 5876
5Y8= 5877
YW50aXR5 5878
wq0= 5879
d29yZHM= 5880
IHJlYWRvbmx5 5881
IGZsZXg= 5882
cHJvdGVjdGVk 5883
IEFueQ== 5884
IGNoYXJhY3RlcnM= 5885
ZW5jZWQ= 5886
IEp1bHk= 5887
aWxlcg== 5888
Q2FyZA== 5889
dXJhbmNl 5890
IHJldg== 5891
LmV2ZW50 5892
YWx5 5893
MTMw 5894
IHdvbmRlcg== 5895
IFBvcnQ= 5896
IGxlZ2Fs 5897
cm9sZQ== 5898
IHRlbg== 5899
IGdvZXM= 5900
TVA= 5901
d2hpdGU= 5902
KToNCg== 5903
KSkNCg== 5904
IHJlZmVyZW5jZQ== 5905
IG1pcw== 5906
IFByb2plY3Q= 5907
aWNrcw== 5908
PiY= 5909
Q09O 5910
IHJlcGw= 5911
IHJlZ3VsYXI= 5912
U3RvcmFnZQ== 5913
cmFtZXdvcms= 5914
IGdvYWw= 5915
IHRvdWNo 5916
LndpZGdldA== 5917
IGJ1aWx0 5918
ZGVz 5919
UGFydA== 5920
KHJl 5921
IHdvcnRo 5922
aGli 5923
Z2FtZQ== 5924
OTE= 5925
MTky 5926
INCy 5927
YWNpb24= 5928
IFdoaXRl 5929
KHR5cGU= 5930
KGA= 5931
ODE= 5932
IG5hdHVyYWw= 5933
IGluag== 5934
IGNhbGN1bA== 5935
IEFwcmls 5936
Lkxpc3Q= 5937
IGFzc29jaWF0ZWQ= 5938
CVN5c3RlbQ== 5939
fn4= 5940
PVs= 5941
IHN0b3JhZ2U= 5942
IGJ5dGVz 5943
IHRyYXZlbA== 5944
IHNvdQ== 5945
IHBhc3NlZA== 5946
IT0= 5947
YXNjcmlwdA== 5948
Lm9wZW4= 5949
IGdyaWQ= 5950
IGJ1cw== 5951
IHJlY29nbg== 5952
QWI= 5953
IGhvbg== 5954
IENlbnRlcg== 5955
IHByZWM= 5956
YnVpbGQ= 5957
NzM= 5958
SFRNTA== 5959
IFNhbg== 5960
IGNvdW50cmllcw== 5961
YWxlZA== 5962
dG9rZW4= 5963
a3Q= 5964
IHF1YWw= 5965
TGFzdA== 5966
YWRvdw== 5967
IG1hbnVmYWN0 5968
aWRhZA== 5969
amFuZ28= 5970
TmV4dA== 5971
eGY= 5972
LmE= 5973
IHBvcm5v 5974
IFBN 5975
ZXJ2ZQ== 5976
aXRpbmc= 5977
X3Ro 5978
Y2k= 5979
PU5vbmU= 5980
Z3M= 5981
IGxvZ2lu 5982
YXRpdmVz 5983
J10pOwo= 5984
xIU= 5985
IGlsbA== 5986
SUE= 5987
Y2hpbGRyZW4= 5988
RE8= 5989
IGxldmVscw== 5990
IHt7 5991
IGxvb2tz 5992
ICIj 5993
VG9TdHJpbmc= 5994
IG5lY2Vzc2FyeQ== 5995
ICAgCg== 5996
Y2VsbA== 5997
RW50cnk= 5998
ICcj 5999
IGV4dHJlbQ== 6000
U2VsZWN0b3I= 6001
IHBsYWNlaG9sZGVy 6002
TG9hZA== 6003
IHJlbGVhc2Vk 6004
T1JF 6005
RW51bWVy 6006
IFRW 6007
U0VU 6008
aW5x 6009
UHJlc3M= 6010
IERlcGFydG1lbnQ= 6011
IHByb3BlcnRpZXM= 6012
IHJlc3BvbmQ= 6013
U2VhcmNo 6014
YWVs 6015
IHJlcXU= 6016
IEJvb2s= 6017
Lwo= 6018
KHN0 6019
IGZpbmFuY2lhbA== 6020
aWNrZXQ= 6021
X2lucHV0 6022
IHRocmVhdA== 6023
KGlu 6024
U3RyaXA= 6025
7J0= 6026
w6fDo28= 6027
NzE= 6028
IGV2aWRlbmNl 6029
KSk7 6030
IEJybw== 6031
IFtdOwo= 6032
IG91 6033
YnVm 6034
U2NyaXB0 6035
ZGF0 6036
IHJ1bGU= 6037
I2ltcG9ydA== 6038
PSIv 6039
U2VyaWFs 6040
IHN0YXJ0aW5n 6041
W2luZGV4 6042
YWU= 6043
IGNvbnRyaWI= 6044
c2Vzc2lvbg== 6045
X25ldw== 6046
dXRhYmxl 6047
b2Jlcg== 6048
ICIuLw== 6049
IGxvZ2dlcg== 6050
IHJlY2VudGx5 6051
IHJldHVybmVk 6052
DQ0K 6053
KSkpCg== 6054
aXRpb25z 6055
IHNlZWs= 6056
IGNvbW11bmlj 6057
ICIu 6058
IHVzZXJuYW1l 6059
RUNU 6060
RFM= 6061
IG90aGVyd2lzZQ== 6062
IEdlcm1hbg== 6063
LmF3 6064
QWRhcHRlcg== 6065
aXhlbA== 6066
IHN5c3RlbXM= 6067
IGRyb3A= 6068
ODM= 6069
IHN0cnVjdHVyZQ== 6070
ICQoIiM= 6071
ZW5jaWVz 6072
YW5uaW5n 6073
IExpbms= 6074
IFJlc3BvbnNl 6075
IHN0cmk= 6076
xbw= 6077
IERC 6078
5pc= 6079
YW5kcm9pZA== 6080
c3VibWl0 6081
b3Rpb24= 6082
OTI= 6083
KEA= 6084
LnRlc3Q= 6085
ODI= 6086
CgoKCgoKCgo= 6087
XTsNCg== 6088
IGRpcmVjdGx5 6089
ICIl 6090
cmlz 6091
ZWx0YQ== 6092
QUlM 6093
KXsNCg== 6094
bWluZQ== 6095
ICAgICAgICAgICAgICAgICAgICAgICAgICA= 6096
KGs= 6097
Ym9u 6098
YXNpYw== 6099
cGl0ZQ== 6100
X19f 6101
TWF4 6102
IGVycm9ycw== 6103
IFdoaWxl 6104
IGFyZ3VtZW50cw== 6105
IGVuc3VyZQ== 6106
UmlnaHQ= 6107
LWJhc2Vk 6108
V2Vi 6109
IC09 6110
IGludHJvZHU= 6111
IEluc3Q= 6112
IFdhc2g= 6113
b3JkaW4= 6114
am9pbg== 6115
RGF0YWJhc2U= 6116
IGdyYWQ= 6117
IHVzdWFsbHk= 6118
SVRF 6119
UHJvcHM= 6120
Pz4K 6121
IEdv 6122
QE92ZXJyaWRl 6123
UkVG 6124
IGlw 6125
IEF1c3RyYWw= 6126
IGlzdA== 6127
Vmlld0J5SWQ= 6128
IHNlcmlvdXM= 6129
IGN1c3RvbWVy 6130
LnByb3RvdHlwZQ== 6131
b2Rv 6132
Y29y 6133
IGRvb3I= 6134
IFdJVEhPVVQ= 6135
IHBsYW50 6136
IGJlZ2Fu 6137
IGRpc3RhbmNl 6138
KCkpLg== 6139
IGNoYW5jZQ== 6140
IG9yZA== 6141
Y2FtZQ== 6142
cHJhZ21h 6143
IHByb3RlY3Q= 6144
cmFnbWVudA== 6145
IE5vZGU= 6146
ZW5pbmc= 6147
0Yc= 6148
IHJvdXRl 6149
IFNjaG9vbA== 6150
aGk= 6151
IG5laWdoYg== 6152
QWZ0ZXI= 6153
bGljaXQ= 6154
IGNvbnRy 6155
IHByaW1hcnk= 6156
QUE= 6157
LldyaXRlTGluZQ== 6158
dXRpbHM= 6159
IGJp 6160
UmVk 6161
LkxpbnE= 6162
Lm9iamVjdA== 6163
IGxlYWRlcnM= 6164
dW5pdGllcw== 6165
IGd1bg== 6166
b250aA== 6167
IERldg== 6168
RklMRQ== 6169
IGNvbW1lbnRz 6170
X2xlbg== 6171
YXJyb3c= 6172
YW1vdW50 6173
UmFuZ2U= 6174
c2VydA== 6175
R3JpZFZpZXc= 6176
IHVwZGF0ZWQ= 6177
IE1v 6178
IGluZm9ybQ== 6179
b2NpZXR5 6180
YWxh 6181
QWNjZXNz 6182
IGhhYg== 6183
IGNyZWF0 6184
X2FyZw== 6185
IEphbnVhcnk= 6186
IERheQ== 6187
IikNCg== 6188
dXBsZQ== 6189
ZG9jdW1lbnQ= 6190
Z29yaXRo 6191
bWVudQ== 6192
IE92ZXI= 6193
YmI= 6194
LnRpdGxl 6195
X291dA== 6196
IGxlZA== 6197
dXJp 6198
ID8+PC8= 6199
Z2w= 6200
IGJhbms= 6201
YXltZW50 6202
CXByaW50Zg== 6203
TUQ= 6204
IHNhbXBsZQ== 6205
IGhhbmRz 6206
IFZlcnNpb24= 6207
dWFyaW8= 6208
IG9mZmVycw== 6209
aXR5RW5naW5l 6210
IHNoYXBl 6211
IHNsZWVw 6212
X3BvaW50 6213
U2V0dGluZ3M= 6214
IGFjaGll 6215
IHNvbGQ= 6216
b3Rh 6217
LmJpbmQ= 6218
QW0= 6219
IHNhZmU= 6220
U3RvcmU= 6221
IHNoYXJlZA== 6222
IHByaXY= 6223
X1ZBTA== 6224
IHNlbnM= 6225
KXs= 6226
IHJlbWVtYmVy 6227
c2hhcmVk 6228
ZWxlbWVudA== 6229
IHNob290 6230
VmVydA== 6231
Y291dA== 6232
IGVudg== 6233
X2xhYmVs 6234
ID4K 6235
cnVu 6236
IHNjZW5l 6237
KGFycmF5 6238
ZGV2aWNl 6239
X3RpdGxl 6240
YWdvbg== 6241
XQ0K 6242
YWJ5 6243
IGJlY2FtZQ== 6244
Ym9vbGVhbg== 6245
IHBhcms= 6246
IENvZGU= 6247
dXBsb2Fk 6248
cmlkYXk= 6249
IFNlcHRlbWJlcg== 6250
RmU= 6251
IHNlbg== 6252
Y2luZw== 6253
Rkw= 6254
Q29s 6255
dXRz 6256
X3BhZ2U= 6257
aW5u 6258
IGltcGxpZWQ= 6259
YWxpbmc= 6260
IHlvdXJzZWxm 6261
LkNvdW50 6262
Y29uZg== 6263
IGF1ZA== 6264
X2luaXQ= 6265
Lik= 6266
IHdyb3Rl 6267
MDAz 6268
Tkc= 6269
LkVycm9y 6270
5Ls= 6271
LmZvcg== 6272
IGVxdWFs 6273
IFJlcXVlc3Q= 6274
IHNlcmlhbA== 6275
IGFsbG93cw== 6276
WFg= 6277
IG1pZGRsZQ== 6278
Y2hvcg== 6279
MTk1 6280
OTQ= 6281
w7g= 6282
ZXJ2YWw= 6283
LkNvbHVtbg== 6284
cmVhZGluZw== 6285
IGVzY29ydA== 6286
IEF1Z3VzdA== 6287
IHF1aWNrbHk= 6288
IHdlYXA= 6289
IENH 6290
cm9wcmk= 6291
aG8= 6292
IGNvcA== 6293
KHN0cnVjdA== 6294
IEJpZw== 6295
IHZz 6296
IGZyZXF1 6297
LlZhbHVl 6298
IGFjdGlvbnM= 6299
IHByb3Blcg== 6300
IGlubg== 6301
IG9iamVjdHM= 6302
IG1hdHJpeA== 6303
YXZhc2NyaXB0 6304
IG9uZXM= 6305
Lmdyb3Vw 6306
IGdyZWVu 6307
IHBhaW50 6308
b29scw== 6309
eWNs 6310
ZW5jb2Rl 6311
b2x0 6312
Y29tbWVudA== 6313
LmFwaQ== 6314
RGly 6315
IHVuZQ== 6316
aXpvbnQ= 6317
LnBvc2l0aW9u 6318
IGRlc2lnbmVk 6319
X3ZhbA== 6320
YXZp 6321
aXJpbmc= 6322
dGFi 6323
IGxheWVy 6324
IHZpZXdz 6325
IHJldmU= 6326
cmFlbA== 6327
IE9O 6328
cmljcw== 6329
MTYw 6330
bnA= 6331
IGNvcmU= 6332
KCkpOw0K 6333
TWFpbg== 6334
IGV4cGVydA== 6335
CQkNCg== 6336
X2Vu 6337
IC8+ 6338
dXR0ZXI= 6339
SUFM 6340
YWlscw== 6341
IEtpbmc= 6342
Ki8KCg== 6343
IE1ldA== 6344
X2VuZA== 6345
YWRkcg== 6346
b3Jh 6347
IGly 6348
TWlu 6349
IHN1cnBy 6350
IHJlcGU= 6351
IGRpcmVjdG9yeQ== 6352
UFVU 6353
LVM= 6354
IGVsZWN0aW9u 6355
aGFwcw== 6356
LnByZQ== 6357
Y20= 6358
VmFsdWVz 6359
ICIK 6360
Y29sdW1u 6361
aXZpbA== 6362
TG9naW4= 6363
aW51ZQ== 6364
OTM= 6365
IGJlYXV0aWZ1bA== 6366
IHNlY3JldA== 6367
KGV2ZW50 6368
IGNoYXQ= 6369
dW1z 6370
IG9yaWdpbg== 6371
IGVmZmVjdHM= 6372
IG1hbmFnZW1lbnQ= 6373
aWxsYQ== 6374
dGs= 6375
IHNldHRpbmc= 6376
IENvdXI= 6377
IG1hc3NhZ2U= 6378
CWVuZA== 6379
IGhhcHB5 6380
IGZpbmlzaA== 6381
IGNhbWVyYQ== 6382
IFZlcg== 6383
IERlbW9jcg== 6384
IEhlcg== 6385
KFE= 6386
Y29ucw== 6387
aXRh 6388
ICcu 6389
e30= 6390
CUM= 6391
IHN0dWZm 6392
MTk0 6393
IDoK 6394
IEFS 6395
VGFzaw== 6396
aGlkZGVu 6397
ZXJvcw== 6398
SUdO 6399
YXRpbw== 6400
IEhlYWx0aA== 6401
b2x1dGU= 6402
RW50ZXI= 6403
Jz4= 6404
IFR3aXR0ZXI= 6405
IENvdW50eQ== 6406
c2NyaWJl 6407
ID0+Cg== 6408
IGh5 6409
Zml0 6410
IG1pbGl0YXJ5 6411
IHNhbGU= 6412
cmVxdWlyZWQ= 6413
bm9u 6414
Ym9vdHN0cmFw 6415
aG9sZA== 6416
cmlt 6417
LW9sZA== 6418
IERvd24= 6419
IG1lbnRpb24= 6420
Y29udGFjdA== 6421
X2dyb3Vw 6422
b2RheQ== 6423
IHRvd24= 6424
IHNvbHV0aW9u 6425
dWF0ZQ== 6426
ZWxsaW5n 6427
XS0+ 6428
b3Rlcw== 6429
ZW50YWw= 6430
b21lbg== 6431
b3NwaXRhbA== 6432
IFN1cA== 6433
X0VO 6434
IHNsb3c= 6435
U0VTU0lPTg== 6436
IGJsdWU= 6437
YWdv 6438
IGxpdmVz 6439
IF4= 6440
LnVu 6441
aW5zdA== 6442
ZW5nZQ== 6443
IGN1c3RvbWVycw== 6444
IGNhc3Q= 6445
dWRnZXQ= 6446
77yB 6447
aWNlbnM= 6448
IGRldGVybWlu 6449
U2VsZWN0ZWQ= 6450
X3Bs 6451
dWV1ZQ== 6452
IGRhcms= 6453
Ly8KCg== 6454
c2k= 6455
dGhlcm4= 6456
IEphcGFu 6457
L3c= 6458
UFU= 6459
IEVhc3Q= 6460
b3ZpZQ== 6461
IHBhY2thZ2U= 6462
IG5vcg== 6463
IGFwaQ== 6464
Ym90 6465
Il07Cg== 6466
X3Bvc3Q= 6467
dWxhdGU= 6468
IGNsdWI= 6469
JykpOwo= 6470
IGxvb3A= 6471
UElP 6472
aW9uZQ== 6473
c2hvdA== 6474
SW5pdGlhbA== 6475
IHBsYXllZA== 6476
cmVnaXN0ZXI= 6477
cm91Z2h0 6478
X21heA== 6479
YWNlbWVudA== 6480
bWF0Y2g= 6481
cmFwaGljcw== 6482
QVNU 6483
IGV4aXN0aW5n 6484
IGNvbXBsZXg= 6485
REE= 6486
LkNo 6487
LmNvbW1vbg== 6488
bW8= 6489
ICcuLi8uLi8= 6490
aXRv 6491
IGFuYWx5c2lz 6492
IGRlbGl2ZXI= 6493
ICAgICAgICAgICAgICAgIAo= 6494
aWR4 6495
w6A= 6496
b25nbw== 6497
IEVuZ2xpc2g= 6498
PCEtLQ== 6499
IGNvbXB1dGVy 6500
RU5TRQ== 6501
IHBhcw== 6502
IHJhaXM= 6503
SGFzaA== 6504
IG1vYmlsZQ== 6505
IG93bmVy 6506
RklH 6507
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 6508
dGhlcw== 6509
IGF0dHI= 6510
d2Q= 6511
LnRpbWU= 6512
YXdu 6513
IHRyZWF0bWVudA== 6514
IEFj 6515
LlZpZXc= 6516
aW1wbA== 6517
bW9yZQ== 6518
cGFzcw== 6519
IGhh 6520
LmZyb20= 6521
IGxlYWRpbmc= 6522
RkZGRg== 6523
KGVycm9y 6524
LnVp 6525
YXRhcg== 6526
YWRlcnM= 6527
ZGF0ZXM= 6528
IHp1 6529
IGZsb3c= 6530
VGFyZ2V0 6531
IGludm9sdmVk 6532
IGlv 6533
cGFyc2U= 6534
JF8= 6535
aGVzdA== 6536
LmludA== 6537
LWl0ZW0= 6538
YXN5 6539
U3A= 6540
IHNoaWZ0 6541
TlQ= 6542
IHRm 6543
X1RS 6544
LndlYg== 6545
Q1M= 6546
IH0p 6547
IGV5ZXM= 6548
MTI1 6549
MTA1 6550
X3o= 6551
Jyk7DQo= 6552
aWZvcm4= 6553
IHtA 6554
IG5pY2U= 6555
Lmxpc3Q= 6556
ICAgIA0K 6557
IGZsb29y 6558
IHJlZGlyZWN0 6559
IFVL 6560
KFsn 6561
IHdpc2g= 6562
IGNhcHQ= 6563
bGVnYWw= 6564
IElP 6565
IHN0YWdl 6566
LlN0cmluZw== 6567
IEFmcg== 6568
aWdlbg== 6569
IFNI 6570
RGVsZXRl 6571
ZWxscw== 6572
IHNvbGlk 6573
IG1lZXRpbmc= 6574
IHdvcmtlZA== 6575
IGVkaXRvcg== 6576
aW55 6577
0Lw= 6578
X3JlYWQ= 6579
Lklk 6580
ZWZm 6581
T2Zmc2V0 6582
Y2hh 6583
VVNFUg== 6584
CQkgICA= 6585
aXBwZWQ= 6586
IGRpY3Q= 6587
IFJ1bg== 6588
LmhwcA== 6589
IGFuZw== 6590
eG1s 6591
aW1wbGU= 6592
IG1lZGljYWw= 6593
X3Rva2Vu 6594
Y29ubmVjdA== 6595
IGhvdXI= 6596
IGNvbnRyb2xsZXI= 6597
X21lc3NhZ2U= 6598
VUlE 6599
R3I= 6600
YW5kZWQ= 6601
X0NI 6602
IGJvb2tz 6603
IHNwZWFr 6604
YW1pbmc= 6605
IG1vdW50 6606
UmVjb3Jk 6607
CXN0cnVjdA== 6608
LldlYg== 6609
b25kb24= 6610
IC8vCg== 6611
IGZlbHQ= 6612
LkF1dG8= 6613
aWRnZQ== 6614
X3Bvcw== 6615
UFI= 6616
IG1vZGVybg== 6617
Q29sbGVjdGlvbg== 6618
X21zZw== 6619
Q0Q= 6620
IExv 6621
IHNlY29uZHM= 6622
aWJseQ== 6623
LmVxdWFscw== 6624
IGludGVybmF0aW9uYWw= 6625
I3ByYWdtYQ== 6626
b290aA== 6627
V3JpdGVy 6628
aWF0ZQ== 6629
IGNlbGU= 6630
IEJpdA== 6631
aXZv 6632
aXZlcnk= 6633
cmQ= 6634
SEVDSw== 6635
IGNhY2hl 6636
LmNvdW50 6637
IHJvbGw= 6638
LlJlYWQ= 6639
MTA4 6640
UkVE 6641
IHNldHVw 6642
aXpvbnRhbA== 6643
bW9kZWxz 6644
YXJndg== 6645
IGNvbnNpZGVyZWQ= 6646
PSIuLi8= 6647
c2V0dGluZ3M= 6648
IFJlbA== 6649
IGdyb3d0aA== 6650
IG1peA== 6651
IFdhc2hpbmd0b24= 6652
IHBsdA== 6653
IElN 6654
4bo= 6655
IHR1cm5lZA== 6656
IERhdGVUaW1l 6657
IFdlZA== 6658
KHVybA== 6659
ICIt 6660
IGxldHRlcg== 6661
QXN5bmM= 6662
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 6663
IE9jdG9iZXI= 6664
X2xpbmU= 6665
IGF0dGVudGlvbg== 6666
IGNvbGxlY3Q= 6667
IEhhc2g= 6668
IGltYWc= 6669
VHJlZQ== 6670
IHNpdHVhdGlvbg== 6671
ZXR0ZQ== 6672
X25v 6673
SVZF 6674
IHZvbg== 6675
LnRhcmdldA== 6676
IGtub3dsZWRnZQ== 6677
IGRyaXZl 6678
LnBvc3Q= 6679
IGJsb29k 6680
IGNpdA== 6681
cHJpbWFyeQ== 6682
IGNvbmZpZ3VyYXRpb24= 6683
dGVl 6684
IHBob3Rv 6685
aXNvZGU= 6686
VHJhY2U= 6687
IGdhdmU= 6688
IHNob3Q= 6689
IEFpcg== 6690
IG1vdGhlcg== 6691
cHJpY2U= 6692
IG1vcm5pbmc= 6693
KSl7Cg== 6694
LXg= 6695
IHRyYWRl 6696
IGRlc2M= 6697
ICYmCg== 6698
IHBhcmVudHM= 6699
QXBp 6700
5Yg= 6701
dGVk 6702
d2Vy 6703
IOY= 6704
IHN5 6705
IEtl 6706
UGFyc2Vy 6707
5YU= 6708
YW5jeQ== 6709
IHBpZWNl 6710
aWZvcm5pYQ== 6711
dG9TdHJpbmc= 6712
cmFu 6713
aWRpbmc= 6714
UFRJT04= 6715
Y29tZXM= 6716
L2xpYw== 6717
LmNsaWVudA== 6718
RWw= 6719
TG9uZw== 6720
IHByb2Zlc3Npb25hbA== 6721
cnVwdA== 6722
dmE= 6723
IGNvbXBsZXRlbHk= 6724
IHByYWN0aWNl 6725
MDAy 6726
IHNlbGVjdGlvbg== 6727
UmVt 6728
aW5p 6729
IGNhbQ== 6730
UkVF 6731
IHNpdGVz 6732
cGE= 6733
QVRVUw== 6734
0YHRgg== 6735
YXJyYW50 6736
Kig= 6737
X0tFWQ== 6738
IEJ1dHRvbg== 6739
IEZyaWRheQ== 6740
c2VxdQ== 6741
IHJlYWRlcg== 6742
IG1lc3NhZ2Vz 6743
6K8= 6744
IGJ1Zg== 6745
S2U= 6746
IG5vdg== 6747
SFA= 6748
TXNn 6749
YWxpZ24= 6750
YXJpbHk= 6751
ICcs 6752
X3dpdGg= 6753
IGRhcw== 6754
IGhlYXJk 6755
YXRvbWlj 6756
cmlhbA== 6757
KVs= 6758
IGRpc2U= 6759
QGVuZA== 6760
IGdvbGQ= 6761
IGZhaXI= 6762
IHNhbGVz 6763
LkJ1dHRvbg== 6764
c3RyaWN0 6765
c2F2ZQ== 6766
IG1lYXN1cmU= 6767
ICIr 6768
ZWNhdXNl 6769
Vmlld0NvbnRyb2xsZXI= 6770
IFRhYmxl 6771
LnBhcmFt 6772
IGRlY2lkZWQ= 6773
KCgo 6774
SU5GTw== 6775
IG9wcG9ydHVuaXR5 6776
VGU= 6777
SUNFTlNF 6778
Y2NvcmRpbmc= 6779
a2k= 6780
IFVO 6781
IGNvbnRhaW4= 6782
IG1hbmFnZXI= 6783
IHBhaW4= 6784
IEZpcmU= 6785
cm9tZQ== 6786
IHBsYW5z 6787
Rm91bmQ= 6788
bGF5 6789
IERlY2VtYmVy 6790
IGluZmx1 6791
w7o= 6792
cmVuY2g= 6793
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 6794
YXppbmc= 6795
YnJpZWY= 6796
Y2FsbA== 6797
d29vZA== 6798
IGxvYWRlZA== 6799
IGdyYW5k 6800
L2Y= 6801
aW1w 6802
X1U= 6803
MTI3 6804
U1RS 6805
4oCi 6806
IGNyZWRpdA== 6807
LkNvbG9y 6808
b3JnZQ== 6809
UVVFU1Q= 6810
IGRpZmZlcmVuY2U= 6811
IFBD 6812
d2FyZ3M= 6813
IHB1Yg== 6814
dW5kYXk= 6815
IGZyYQ== 6816
Lm1heA== 6817
IHRyaWVk 6818
YW5uZWxz 6819
c2VuZA== 6820
IHJlcG9ydHM= 6821
IGFkdWx0 6822
5Lo= 6823
IGNvbnNpc3Q= 6824
IFN0cmVldA== 6825
IFByb2dyYW0= 6826
U1FM 6827
TWF0cml4 6828
b3VuY2ls 6829
LUE= 6830
CXc= 6831
IHdob3Nl 6832
IHJlbGln 6833
IFNleA== 6834
IGdpdmVz 6835
bm9uZQ== 6836
Lm1lc3NhZ2U= 6837
KEc= 6838
LmF3dA== 6839
LXJpZ2h0 6840
IE5vdmVtYmVy 6841
ZWxsaWc= 6842
MzYw 6843
dXRpdmU= 6844
xIM= 6845
b3Zlcm4= 6846
IGVhc2lseQ== 6847
IGlkZWFz 6848
MTA0 6849
INC9 6850
L2Nzcw== 6851
bHlpbmc= 6852
ZWxsZQ== 6853
Q2Fu 6854
X2NvbG9y 6855
0L7Qsg== 6856
IHBhaXI= 6857
bmd0aA== 6858
IHNwbGl0 6859
MTQw 6860
ZHJvcA== 6861
YXJ0eQ== 6862
b25h 6863
IGNhcGl0YWw= 6864
IGhlYXI= 6865
IGV4aXN0cw== 6866
CWxvZw== 6867
ZW1v 6868
UnVu 6869
b2k= 6870
IHBhcnNlcg== 6871
IE1ldGhvZA== 6872
IGVkdWNhdGlvbg== 6873
W2s= 6874
IGxpYnJhcnk= 6875
PiI7Cg== 6876
X1VO 6877
CXN0ZA== 6878
b2RlZA== 6879
IGNhbGxz 6880
aGVyZQ== 6881
UmVs 6882
IGJyYW5k 6883
YmFja2dyb3VuZA== 6884
Z2E= 6885
X2FkZHJlc3M= 6886
X3BhcmFtcw== 6887
Q2F0ZWdvcnk= 6888
MTAz 6889
IEluZGlh 6890
X2V2ZW50 6891
IGluZw== 6892
UmVuZGVy 6893
LmNs 6894
dW1weQ== 6895
IHBldA== 6896
RkM= 6897
IEFudA== 6898
RXh0 6899
IGNoYXJnZQ== 6900
ZW5lZA== 6901
Z3JhZA== 6902
RU8= 6903
IGRlcGVuZA== 6904
IC4KCg== 6905
ZnJhbWU= 6906
IGRm 6907
IGh1Z2U= 6908
IFBBUlQ= 6909
ZWRz 6910
Ozs= 6911
IEFN 6912
IGJhc2lj 6913
IExldA== 6914
bGljaA== 6915
IGFybQ== 6916
IHN0YXI= 6917
IGZlZGVyYWw= 6918
V29yaw== 6919
IGNhcnJ5 6920
IElzcmFlbA== 6921
KG9iag== 6922
PXt7 6923
IHNhdmVk 6924
IHN5bg== 6925
IGNvbnN0YW50 6926
VkVOVA== 6927
IHBvc2l0aXZl 6928
IGNvbmR1Y3Q= 6929
IHNraW4= 6930
IGVhcmxpZXI= 6931
IGxheW91dA== 6932
IElQ 6933
T1VS 6934
IHRpbQ== 6935
c3R5bGVzaGVldA== 6936
X2Ns 6937
IENhcmQ= 6938
Kyspewo= 6939
IHRlbXBlcg== 6940
IERhdmlk 6941
CXRyeQ== 6942
LmRhcnQ= 6943
IHdhbnRz 6944
IHBpY3R1cmU= 6945
IHZpZGVvcw== 6946
IENvbW0= 6947
aXNpb25z 6948
X01BWA== 6949
TWFwcGluZw== 6950
LWNvbnRlbnQ= 6951
IEVhcg== 6952
LWRl 6953
IHByZW0= 6954
YnJ1YXJ5 6955
IGNvbXBvbmVudHM= 6956
IHRocm91Z2hvdXQ= 6957
IHB1bGw= 6958
IHBhZ2Vz 6959
ZW50ZQ== 6960
cmVzcG9uZA== 6961
IGdhcw== 6962
Y3JpcHRvcg== 6963
IGVkZ2U= 6964
IGJvdW5k 6965
QUNU 6966
KioqKioq 6967
IGNyZWF0aW5n 6968
IENI 6969
IG51bGxwdHI= 6970
QnI= 6971
Kyc= 6972
LmNv 6973
Pjo6 6974
IGxlYXJuaW5n 6975
Lkxlbmd0aA== 6976
X1NI 6977
IHBhdGllbnRz 6978
QUlO 6979
IGtpZHM= 6980
IGNvbWZvcnQ= 6981
IHNob3du 6982
dWdpbnM= 6983
IEJhY2s= 6984
ZWxsYQ== 6985
X0NM 6986
IGxhdA== 6987
IGRpc3BhdGNo 6988
IGNsYXNzZXM= 6989
LmF0 6990
LmJlZ2lu 6991
IHN1Y2Nlc3NmdWw= 6992
YmFu 6993
IG9idGFpbg== 6994
IFNs 6995
IGxhY2s= 6996
aXRlcmF0b3I= 6997
VGhyZWFk 6998
KHNpemU= 6999
IG5vbmU= 7000
Lmhhcw== 7001
X1g= 7002
c29ydA== 7003
bmFw 7004
cGV0 7005
Ymlu 7006
NzAw 7007
IENhbmFkYQ== 7008
VGhleQ== 7009
IGRhbnM= 7010
IE1hdA== 7011
PHRk 7012
IGhhaXI= 7013
ICcnLAo= 7014
IGN1 7015
IGxhd3M= 7016
bGV0ZWQ= 7017
cGVk 7018
IHBvdw== 7019
IGtuZXc= 7020
X0NPTQ== 7021
Xyw= 7022
IE1hZw== 7023
aWRlbnRz 7024
KHJlcQ== 7025
ICks 7026
LWNlbnRlcg== 7027
MTkw 7028
IHdpZGU= 7029
IEF1dGhvcg== 7030
c3RhbnRz 7031
IGpvYnM= 7032
IG1hdGg= 7033
ZXRpbWVz 7034
Qm9vbGVhbg== 7035
IHNjb3Bl 7036
X2lz 7037
IG1lYXM= 7038
IGtleXM= 7039
ZWxheQ== 7040
IGV4YWN0bHk= 7041
Jz0+Jw== 7042
IFBhdWw= 7043
bWFz 7044
CXByaW50 7045
KGxlbg== 7046
ZmQ= 7047
ICk7 7048
LkV2ZW50 7049
cWxp 7050
aXJpdA== 7051
aWVsZHM= 7052
b21hbg== 7053
IFRvcA== 7054
IHZvdGU= 7055
IG1hc2s= 7056
IHRoZW1l 7057
LQo= 7058
IHByb3Bz 7059
IGZpbmU= 7060
IHdyaXRlcg== 7061
X29mZnNldA== 7062
Y2Fy 7063
IGFsdGVybg== 7064
IGNvcHlyaWdodA== 7065
IGRlc3Ryb3k= 7066
cHBlcg== 7067
IGdlbmVyYXRl 7068
cHBlZA== 7069
4oCZZA== 7070
ICAgICAgCg== 7071
bWFrZQ== 7072
IFNob3c= 7073
IGJyb3dzZXI= 7074
IGZhdm9yaXRl 7075
IGNhcmVlcg== 7076
IGhhcHBlbmVk 7077
KGNoYXI= 7078
IHJlY29tbWVuZA== 7079
IGxpdGVy 7080
LmZpbHRlcg== 7081
Z3JhZGU= 7082
IMKj 7083
UGhvbmU= 7084
b21z 7085
IG5hbWVk 7086
LWxhYmVs 7087
aXBv 7088
IE90aGVy 7089
IHBhbmVs 7090
IHJvY2s= 7091
U2NhbGU= 7092
CWFzc2VydA== 7093
0LQ= 7094
IHRydXN0 7095
ZnJvbnQ= 7096
IGRlbW9u 7097
QXI= 7098
TmV0 7099
IGVjb25vbWlj 7100
Zm9vdGVy 7101
IHJhY2U= 7102
KG5vZGU= 7103
IE9wdGlvbg== 7104
c3BsaXQ= 7105
IHBoeXNpY2Fs 7106
aWZlc3Q= 7107
IHJlbW92ZWQ= 7108
Lmh0dHA= 7109
KSksCg== 7110
IGxvb2tlZA== 7111
Jzs= 7112
ZGluZw== 7113
Z2VzdA== 7114
YXR1cmRheQ== 7115
L2xpY2Vuc2Vz 7116
UHJpY2U= 7117
IGRybw== 7118
IHRvd2FyZHM= 7119
IHVucw== 7120
IENM 7121
CXN0YXRpYw== 7122
IHJvd3M= 7123
IGRlZmluZQ== 7124
LnJlcGxhY2U= 7125
IGZhdGhlcg== 7126
IERlc2lnbg== 7127
YXNzaWdu 7128
bXV0 7129
RGV2aWNl 7130
RGlk 7131
JykpCg== 7132
b21ldHJ5 7133
YXlsb2Fk 7134
IGhpc3Rvcg== 7135
IFBhcmFt 7136
IEJvb2xlYW4= 7137
IG5hdHVyZQ== 7138
IGpz 7139
IG5hdGlvbg== 7140
aWg= 7141
IGRpc2NvdmVy 7142
c2Vt 7143
SGFuZGxl 7144
CXI= 7145
IFRlY2hu 7146
IHdhbGw= 7147
eyQ= 7148
QHByb3BlcnR5 7149
ICIuLi8= 7150
IGV4YW0= 7151
LmRyYXc= 7152
b3BwaW5n 7153
IG5lYXJseQ== 7154
IGNvb2w= 7155
IGluZGVwZW5k 7156
UkVT 7157
IGhhbmRsZXI= 7158
IE1vbmRheQ== 7159
IHN1bg== 7160
U3R5bGVz 7161
b3VzbHk= 7162
IAk= 7163
dmVzdA== 7164
RGlzcGxheQ== 7165
KHk= 7166
YXRpY2FsbHk= 7167
IHByZWRpY3Q= 7168
eWluZw== 7169
IHNvbWV0aW1lcw== 7170
Il0K 7171
IGRyaW5r 7172
IGJ1bA== 7173
aWZpY2F0aW9ucw== 7174
Lmluc2VydA== 7175
LnJlZw== 7176
IHRlc3Rz 7177
QWxpZ25tZW50 7178
IGFsbGVn 7179
IGF0dHJpYnV0ZQ== 7180
IE5vdGU= 7181
IG15c2VsZg== 7182
YXJ0cw== 7183
Tm93 7184
IGludGVyZXN0aW5n 7185
bGllbnRz 7186
IHBvcHVsYXRpb24= 7187
IENhbGlmb3JuaWE= 7188
Ikk= 7189
5bk= 7190
IGdyZWF0ZXI= 7191
dWVzZGF5 7192
IHRob3Vz 7193
IGNvc3Rz 7194
IGxhdW5jaA== 7195
XEh0dHA= 7196
a2Vy 7197
YmFuZA== 7198
IFBsYXk= 7199
IGJhbmQ= 7200
LnNoYXBl 7201
ZXNvbWU= 7202
YXJ0aWNsZQ== 7203
LnJm 7204
IHdlcg== 7205
w6Fz 7206
ZW1iZXJz 7207
dXNy 7208
QkE= 7209
aWNhbg== 7210
ZXR0 7211
dmFsaWRhdGU= 7212
dWx0aQ== 7213
IGltbWVkaWF0ZWx5 7214
emVy 7215
IGZpZ3VyZQ== 7216
b2Vz 7217
ZWxsZXI= 7218
aXJjbGU= 7219
IFNpZ24= 7220
LmRi 7221
IHJhbms= 7222
Qnl0ZXM= 7223
IHByb2plY3Rz 7224
X3JlYw== 7225
VUxBUg== 7226
QVBJ 7227
IExpbmU= 7228
UG9ydA== 7229
IHBvbGw= 7230
IGdpdmluZw== 7231
aWRlbmNl 7232
LS0K 7233
IHBsb3Q= 7234
aWNpYWw= 7235
IHdhcnJhbnQ= 7236
SVRJT04= 7237
IERvdWJsZQ== 7238
IGJpbGxpb24= 7239
Z29yaXRobQ== 7240
IGVxdWlwbWVudA== 7241
REFURQ== 7242
IEAi 7243
RUU= 7244
IHBsZQ== 7245
aWF0aW9u 7246
IGhlYWRlcnM= 7247
IHByb2NlZA== 7248
LkNvbXBvbmVudE1vZGVs 7249
IE9iYW1h 7250
IHBh 7251
IEJlc3Q= 7252
aW1hdGVseQ== 7253
LmdldFN0cmluZw== 7254
Llw= 7255
bXBsb3k= 7256
IHJhdw== 7257
X2Jsb2Nr 7258
dW5kcmVk 7259
In0sCg== 7260
MTEy 7261
Lkdyb3VwTGF5b3V0 7262
IGJyb3VnaHQ= 7263
TlNTdHJpbmc= 7264
dGhyb3c= 7265
Y3JlYXRlZA== 7266
Lk5ldw== 7267
X3ZpZXc= 7268
Q1A= 7269
ZXBz 7270
T3A= 7271
IGdyYXRpcw== 7272
ICci 7273
IGludGVydmlldw== 7274
IiIiCg== 7275
IHBhcnRpYWw= 7276
IGFyaWE= 7277
YmluZw== 7278
QXV0aG9y 7279
Qm9vaw== 7280
IFBhdA== 7281
dW1hbg== 7282
VXNlcnM= 7283
cGx1cw== 7284
MTkz 7285
IERpcmVjdA== 7286
dmVudWU= 7287
YWxwaGE= 7288
VUNDRVNT 7289
IENhbGw= 7290
ICk7DQo= 7291
aW1hdGVk 7292
IHJlbWFpbg== 7293
IGFudGk= 7294
IExvbmRvbg== 7295
IHNhZmV0eQ== 7296
UE9TRQ== 7297
b2xlcw== 7298
Y29udHJvbGxlcg== 7299
Qnl0ZQ== 7300
IENvdXJ0 7301
IFBoaWw= 7302
IEFzc29jaQ== 7303
ZW5h 7304
5ZA= 7305
X1NUUg== 7306
Y29pbg== 7307
cmVzaG9sZA== 7308
IGJhdGNo 7309
X0NsaWNr 7310
ZW50aWNhdGlvbg== 7311
Pic7Cg== 7312
ZW50eQ== 7313
IGJlZ2lubmluZw== 7314
IHplcm8= 7315
IENvbnZlcnQ= 7316
IHRlcnI= 7317
IHBhaWQ= 7318
IGluY3JlYXNlZA== 7319
Y2F0Y2g= 7320
LXNpemU= 7321
MTE1 7322
YWN0aXZpdHk= 7323
ZXF1YWxz 7324
IHF1ZXVl 7325
ICIn 7326
IEludGVybmF0aW9uYWw= 7327
IGbDvHI= 7328
dXJzZGF5 7329
IHNjaWVudA== 7330
YWxsb3c= 7331
YXhpcw== 7332
IGFwcHJvcHJp 7333
ZWRnZQ== 7334
IGlkeA== 7335
U3VjY2Vzcw== 7336
ZW50aWZpZXI= 7337
Olw= 7338
eGlz 7339
IG1heGltdW0= 7340
YXJrcw== 7341
IGJpcnRo 7342
KGluZGV4 7343
IG1heWJl 7344
LnB5 7345
ZmlsZXM= 7346
IGxpbWl0ZWQ= 7347
X2NoZWNr 7348
bG9vaw== 7349
cGxpZXM= 7350
IG1vdmVtZW50 7351
J10u 7352
IGJyb2Fk 7353
IEJF 7354
IFVuaXR5RW5naW5l 7355
LmNwcA== 7356
IEV2ZXJ5 7357
QWRtaW4= 7358
IGZhbnM= 7359
cGFyZWQ= 7360
CiAgICAK 7361
IGZvcmVpZ24= 7362
IHBhbg== 7363
IHRvdXI= 7364
IE9yZGVy 7365
IG1vdmluZw== 7366
IGF1Zg== 7367
Q2FsbA== 7368
Y2I= 7369
xZ8= 7370
dmVudG9yeQ== 7371
IFNxbA== 7372
IGZ1bGx5 7373
Q2xpY2tMaXN0ZW5lcg== 7374
V09SRA== 7375
IGFubm91bmNlZA== 7376
KQ0KDQo= 7377
IGFncmVlZA== 7378
cmll 7379
IGVhcm4= 7380
X2xpbms= 7381
LmFycmF5 7382
KHRleHQ= 7383
IG1hdGVyaWFscw== 7384
LHA= 7385
ZmZmZg== 7386
dmc= 7387
IMKp 7388
IHVubGVzcw== 7389
YWpheA== 7390
TE9H 7391
IHNleHVhbA== 7392
IFwi 7393
LXRpbWU= 7394
IGNvYWNo 7395
IHN1cHBvcnRlZA== 7396
IHBob3Rvcw== 7397
aWZvcm0= 7398
LkNyZWF0ZQ== 7399
KV0= 7400
cmllcg== 7401
IGRpYWxvZw== 7402
YXZlcg== 7403
aWdl 7404
KSs= 7405
X2lkeA== 7406
Ols= 7407
X21pbg== 7408
IENvbmc= 7409
IHByZXNzdXJl 7410
IHRlYW1z 7411
U2lnbg== 7412
YmVnaW4= 7413
cmlhbg== 7414
TkVTUw== 7415
TFM= 7416
IGltcHJvdmU= 7417
IFN1bmRheQ== 7418
IGRlZmluaXRpb24= 7419
aWdlcg== 7420
cm9sbGVycw== 7421
IHRoaW5raW5n 7422
VGVtcGxhdGU= 7423
LUY= 7424
IGVtZXJn 7425
cGxhdGVz 7426
IFVTQQ== 7427
LnNldFN0YXRl 7428
IEFsc28= 7429
cmV2 7430
IGVuYWJsZQ== 7431
IENP 7432
UEVDVA== 7433
IGNvbmNlcHQ= 7434
KS0= 7435
IOKAog== 7436
IHNldHM= 7437
IG1lYW5pbmc= 7438
ZW1vbg== 7439
IENvbnM= 7440
Y21w 7441
ZWRlcg== 7442
YW5uZWQ= 7443
aWNlbnNlZA== 7444
IFN1cGVy 7445
IGRhaWx5 7446
IG11bHRp 7447
X3U= 7448
IGNoYWxsZW5n 7449
X21vZGU= 7450
IFByb21pc2U= 7451
IHN0cmljdA== 7452
am8= 7453
aW50b24= 7454
KGxpc3Q= 7455
T25seQ== 7456
Pns= 7457
IHZlaGljbGU= 7458
7ZU= 7459
IFBsYXllcg== 7460
MTA2 7461
IERlbA== 7462
IHBvb2w= 7463
LnVybA== 7464
bmVzZGF5 7465
KCk7DQoNCg== 7466
OTAw 7467
ICIpOwo= 7468
TG9jYWw= 7469
LiIpOwo= 7470
IG9yZ2FuaXphdGlvbg== 7471
cmVuZGVy 7472
IEFwcGxpY2F0aW9u 7473
IHN1bW1lcg== 7474
ZXhwZWN0ZWQ= 7475
TkE= 7476
IHJhcA== 7477
X29iag== 7478
IHN1cmZhY2U= 7479
IFBVUg== 7480
IH0sCgo= 7481
IHZhcmlhYmxlcw== 7482
KG1lc3NhZ2U= 7483
IG9waW4= 7484
LmJhY2s= 7485
0LDQvQ== 7486
IHdvcmtlcnM= 7487
dm0= 7488
Q28= 7489
dWdodGVy 7490
IG1hc3Rlcg== 7491
ICIiLA== 7492
IHN0b3JpZXM= 7493
LlVzZXI= 7494
IGNlbGVicg== 7495
aW5lc2U= 7496
QlM= 7497
IENvbW1hbmQ= 7498
YXNoYm9hcmQ= 7499
IG9n 7500
a2c= 7501
LmltYWdl 7502
LnN0eWxl 7503
IHN0ZXBz 7504
IEJlbg== 7505
KGFyZ3M= 7506
NDA0 7507
IFBlcnNvbg== 7508
LHk= 7509
IG9mZmljaWFscw== 7510
fAo= 7511
IHNraWxscw== 7512
dmM= 7513
IGJ1aWxkZXI= 7514
IGdhcg== 7515
QWNjb3VudA== 7516
IEF1dGg= 7517
55Q= 7518
J10pCg== 7519
IEFU 7520
bm4= 7521
LkludA== 7522
U1NFUlQ= 7523
IGVmZmVjdGl2ZQ== 7524
TEVURQ== 7525
IHRvb2xz 7526
QVJE 7527
IGRpZ2l0YWw= 7528
MTkx 7529
RG91Ymxl 7530
IEZpbmQ= 7531
UkM= 7532
IGlubGluZQ== 7533
L3I= 7534
QVJBTQ== 7535
QVNL 7536
IGludGVudA== 7537
YWlnaHQ= 7538
X2FkZHI= 7539
IHJlcXVlc3Rz 7540
LmZpcnN0 7541
IGRlYnVn 7542
IHNwZW50 7543
KCkpKTsK 7544
xZs= 7545
IHByaW5jaXA= 7546
TG9nZ2Vy 7547
Y2x1ZGVz 7548
LnVzZQ== 7549
IHN1cnY= 7550
bWVkaWE= 7551
IEZlYnJ1YXJ5 7552
IE1hYw== 7553
IG1pc3Npbmc= 7554
IHdpZmU= 7555
IHRhbGtpbmc= 7556
IE1ha2U= 7557
IGNhcnQ= 7558
IGxvY2F0ZWQ= 7559
RW5j 7560
LWE= 7561
Y2hyb24= 7562
IGNhcmRz 7563
IGd1eQ== 7564
IHBlcnM= 7565
IFllcw== 7566
YXRldmVy 7567
IEFuZw== 7568
b2xhcg== 7569
IEV2ZW4= 7570
IGFjY3Vy 7571
IFBvd2Vy 7572
IEdvbGQ= 7573
Y2xlYXI= 7574
UHJvY2Vzcw== 7575
IHJlY29yZHM= 7576
IGtpbGxlZA== 7577
LmNsZWFy 7578
IFdBUlJBTlRJRVM= 7579
IHB1cnBvc2U= 7580
cGFuZWw= 7581
SkVDVA== 7582
w61h 7583
IGV4ZXJj 7584
V1M= 7585
L0w= 7586
LmV4cG9ydHM= 7587
IF9fXw== 7588
IHNpbg== 7589
U2VydmxldA== 7590
IGTDqQ== 7591
LmRlbGV0ZQ== 7592
cm9rZQ== 7593
U2w= 7594
dWdo 7595
ZWFycw== 7596
IHBvaW50ZXI= 7597
IGhvcA== 7598
YWxsZXJ5 7599
IG9icw== 7600
Y292ZXJ5 7601
CWNoYXI= 7602
CQkJCQkJCQkJCQ== 7603
CWRlZg== 7604
b2NpdHk= 7605
aXRjaGVu 7606
dWxhdGlvbnM= 7607
IEZJVA== 7608
ICku 7609
c3RyYWludHM= 7610
dmVudGlvbg== 7611
IHJlcXVpcmVz 7612
IE9wZXI= 7613
TUU= 7614
T1VOVA== 7615
YWxsZXQ= 7616
IG5vcm0= 7617
SVJF 7618
ZXhhcw== 7619
IHByb2dyYW1z 7620
IHdlYWs= 7621
Jy4k 7622
dWluZw== 7623
CSAgICAgICA= 7624
IG1pbA== 7625
IGZpcm0= 7626
aW5pdGVseQ== 7627
X1ZBTFVF 7628
YXBzZQ== 7629
YXRpc2Y= 7630
IGRlbWFuZA== 7631
X21vZA== 7632
IGRlc2NyaWJlZA== 7633
IHBsYWNlcw== 7634
VklE 7635
IGFsb25l 7636
IGV4cG9ydA== 7637
IHZlYw== 7638
IE1heA== 7639
IGFjdGl2aXRpZXM= 7640
aWN0dXJlcw== 7641
Z2VuZXI= 7642
IG1h 7643
gqw= 7644
IGV4cHJlc3Npb24= 7645
Q2FsbGJhY2s= 7646
X2NvbnRlbnQ= 7647
IE1vc3Q= 7648
IHRlc3Rpbmc= 7649
RUM= 7650
Q0hBTlQ= 7651
IGFkanVzdA== 7652
LlRocmVhZGluZw== 7653
KGN0eA== 7654
IGFncmVl 7655
aWdoZXN0 7656
IHVp 7657
IExhdw== 7658
Llk= 7659
Pjw/ 7660
IHBvZA== 7661
LWxn 7662
4oCdCgo= 7663
IGRlc2NyaWJl 7664
IEV1cm9wZWFu 7665
LXNo 7666
IFBVUlBPU0U= 7667
T1JZ 7668
IGNvbnZlcnM= 7669
IElsbHVtaW5hdGU= 7670
IEF2 7671
KGNo 7672
PyI= 7673
Y2hlbg== 7674
aW1h 7675
RG9jdW1lbnQ= 7676
IG9wZXJhdGlvbnM= 7677
d2lu 7678
CWZ1bmN0aW9u 7679
LkltYWdl 7680
IHNjZW4= 7681
L2g= 7682
IFND 7683
IGV4cGxv 7684
OiU= 7685
LyoqDQo= 7686
TkFNRQ== 7687
5og= 7688
KHZhcg== 7689
IGRpcmVjdG9y 7690
T05H 7691
IHlpZWxk 7692
IGZlZXQ= 7693
IFNlYXJjaA== 7694
IEls 7695
IHJlc3RhdXI= 7696
ZHVj 7697
IGludGVnZXI= 7698
MTA3 7699
ICcnOwo= 7700
IGhpZ2hseQ== 7701
Y2hlY2tlZA== 7702
IFBBUlRJQw== 7703
RVJDSEFOVA== 7704
77yJ 7705
IG9wdGlt 7706
UXVldWU= 7707
IExJ 7708
aXRhdGlvbg== 7709
IHRyYW5zcG9ydA== 7710
aXNzaW9u 7711
ZmlsbA== 7712
dXNpb24= 7713
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 7714
CWJvb2w= 7715
LXRo 7716
dXB0 7717
IGVzc2VudGlhbA== 7718
YW50ZWQ= 7719
IGJlbmVmaXRz 7720
CVM= 7721
JzsNCg== 7722
aWtp 7723
IGdpcmxz 7724
aWNlZA== 7725
YnVmZmVy 7726
XSs= 7727
IHNvY2tldA== 7728
IHByaWNlcw== 7729
IEZyZQ== 7730
IHNhdA== 7731
IHdvb2Q= 7732
TWVudUl0ZW0= 7733
QVJH 7734
IEFkbWlu 7735
T1dO 7736
ZGs= 7737
IHJlc2V0 7738
IGZvcm1z 7739
INC4 7740
5pY= 7741
IFR1ZXNkYXk= 7742
MTA5 7743
IEluaXRpYWxpemVk 7744
X3RyYWlu 7745
b3Jhcnk= 7746
YXRlZ29y 7747
IGR0 7748
VG90YWw= 7749
Y29uc3RydWN0 7750
aWxpZXM= 7751
IGd1eXM= 7752
0LXRgA== 7753
IGluc3RydWN0aW9u 7754
MDEw 7755
eWxlZA== 7756
IGludGVybmV0 7757
ZXRhZGF0YQ== 7758
YWR5 7759
ZmFjZXM= 7760
amVjdGlvbg== 7761
IEphY2s= 7762
IHJlY3Q= 7763
Wy0= 7764
IExlZw== 7765
IGRldmljZXM= 7766
T0M= 7767
ICoNCg== 7768
b3JhdGlvbg== 7769
ZXJ0YWlu 7770
IGd1YXJk 7771
b3N0cmVhbQ== 7772
IGVudW0= 7773
LmxheW91dA== 7774
ICI7Cg== 7775
dm9rZQ== 7776
IE9r 7777
SG9tZQ== 7778
KHRy 7779
RVRI 7780
IGRlbGF5 7781
IHB1cmNoYXNl 7782
ZGM= 7783
IGFyZW4= 7784
X29uY2U= 7785
CQkJCQo= 7786
cm9y 7787
ZHJhdw== 7788
LnJ1bg== 7789
KG1vZGVs 7790
VGltZW91dA== 7791
bGlr 7792
IEFyZw== 7793
LmVu 7794
IGZpc2g= 7795
Y3B5 7796
X2Zl 7797
RVJDSEFOVEFCSUxJVFk= 7798
KFg= 7799
X291dHB1dA== 7800
Pz8= 7801
IGpv 7802
YW5kYXJk 7803
IGRvbGw= 7804
ZXJyb3Jz 7805
X2Jhc2U= 7806
IFBBUlRJQ1VMQVI= 7807
IGxlYWRlcg== 7808
IGNvbXBhcg== 7809
IGRvdWI= 7810
IFZpcw== 7811
U3RhY2tUcmFjZQ== 7812
LUM= 7813
IFN0dWQ= 7814
c3RpdHV0ZQ== 7815
TW9yZQ== 7816
IERlc2NyaXB0aW9u 7817
V0FSRQ== 7818
YWRz 7819
INC6 7820
YmluZA== 7821
PXNlbGY= 7822
ZW1wbG95 7823
W24= 7824
LmFsbA== 7825
LUI= 7826
JiY= 7827
YWxt 7828
IGN1bHR1cmU= 7829
aG91c2U= 7830
IHN1ZmZlcg== 7831
ICcl 7832
IHN0cmFpZ2h0 7833
IFN0YXI= 7834
dWRv 7835
IGRlZA== 7836
IENPTQ== 7837
IGNvbmZpcm0= 7838
IEdvb2Q= 7839
LnNj 7840
X19fX19fX19fX19fX19fXw== 7841
RFI= 7842
Q29uZmlndXJhdGlvbg== 7843
RGF0ZVRpbWU= 7844
IGFkdmVydA== 7845
IGNvdWxkbg== 7846
YXN5bmM= 7847
c3RhY2s= 7848
JykNCg== 7849
S2l0 7850
IGhvdXM= 7851
IG1lY2hhbg== 7852
cmF0ZQ== 7853
MjA0 7854
IGF1ZGlv 7855
CWNvdXQ= 7856
Y29yZXM= 7857
IHNwb3Q= 7858
IGluY3JlYXNpbmc= 7859
ICMj 7860
KSkp 7861
cG9pbnRz 7862
IGNvbXBhcmVk 7863
bGln 7864
IGJlaGF2aW9y 7865
IEJZ 7866
IEF0dA== 7867
Y3JhZnQ= 7868
aGVhZGVycw== 7869
ZXRl 7870
ZW5kcmVnaW9u 7871
IGRldGFpbA== 7872
VUxF 7873
IENvbW1vbg== 7874
CXByb3RlY3RlZA== 7875
c3Rvbg== 7876
IEZJVE5FU1M= 7877
IGZyZXNo 7878
Ij4KCg== 7879
LmV4YW1wbGU= 7880
YmVyZw== 7881
IG1vdmVk 7882
CWU= 7883
IFNhdHVyZGF5 7884
IHBheWxvYWQ= 7885
xIc= 7886
KToKCg== 7887
IGJleQ== 7888
dXJlcg== 7889
PHNjcmlwdA== 7890
IHN5bWJvbA== 7891
IGFzc3Vt 7892
IHB1bA== 7893
RWZmZWN0 7894
IGh1bmRyZWQ= 7895
VG9vbA== 7896
YWtlZA== 7897
Y29ubmVjdGlvbg== 7898
IHZvaWNl 7899
IHBk 7900
IHRyYW5zYWN0aW9u 7901
IGxpbmtz 7902
RXJy 7903
IEluZGlhbg== 7904
VEM= 7905
YXRhbG9n 7906
bmk= 7907
c2lnbg== 7908
PDwi 7909
amk= 7910
eWE= 7911
IGRlbW9uc3Ry 7912
dWxhdGVk 7913
LlN0 7914
IGluc3RpdA== 7915
IGJvb3N0 7916
IGNlbGxz 7917
b2xpYw== 7918
LlBybw== 7919
Ojwv 7920
RXZlbnRMaXN0ZW5lcg== 7921
aWZ5aW5n 7922
IERp 7923
b3Jyb3c= 7924
LmV4ZWN1dGU= 7925
IGNvbGxlZ2U= 7926
WW91cg== 7927
IGxhcmdlc3Q= 7928
LmRpcw== 7929
IHF1aQ== 7930
IGluZGl2aWR1YWxz 7931
X2J1ZmZlcg== 7932
IG5n 7933
U0E= 7934
IENvbnRyb2w= 7935
IHNpbmc= 7936
IHN1aXQ= 7937
ICAgIAk= 7938
U0c= 7939
IGp1bXA= 7940
IHNtYXJ0 7941
b21h 7942
IEV4cA== 7943
ICct 7944
IGFzc2lzdA== 7945
IHN1Y2Nlc3NmdWxseQ== 7946
c3lz 7947
IENyZQ== 7948
X3JlZg== 7949
IFRodXJzZGF5 7950
IGJ1cg== 7951
INC0 7952
IGJleW9uZA== 7953
IG5vZGVz 7954
RGV0YWlscw== 7955
aW5jdA== 7956
IEphbWVz 7957
IGFmZmVjdA== 7958
ZXhjZXB0aW9u 7959
IHR5cGVvZg== 7960
KA0K 7961
LXNl 7962
IGZldGNo 7963
YCw= 7964
IGNydXNoZXI= 7965
fS4= 7966
IEJP 7967
U2hvdw== 7968
IHJhdGVz 7969
IGJvbg== 7970
LWljb24= 7971
IE1lZGlh 7972
UkVTUw== 7973
IFZhbGlk 7974
0L7Quw== 7975
IGZ1Y2s= 7976
YWNrcw== 7977
IHN0dWRpZXM= 7978
TWU= 7979
IG93bmVycw== 7980
fWVsc2U= 7981
IGdyb3dpbmc= 7982
VmFyaWFibGU= 7983
IEJlbA== 7984
LnJhbmRvbQ== 7985
dmVtZW50 7986
b255bQ== 7987
KEY= 7988
IEZBTFNF 7989
IHRvcmNo 7990
KHJvdw== 7991
aWdv 7992
c3RydWN0dXJl 7993
MTIx 7994
IGNlcnRhaW5seQ== 7995
RGVw 7996
IEdyZWVu 7997
cXVlc3Rpb24= 7998
IGFkZGluZw== 7999
IERldmVsb3A= 8000
X2RlZg== 8001
IG1hY2g= 8002
PSU= 8003
CQkg 8004
Y29uZHM= 8005
UHJvamVjdA== 8006
IHJlamVjdA== 8007
IM4= 8008
IHBvb3I= 8009
IGF3YXJl 8010
MTE0 8011
IEJ1aWxk 8012
IEJyaXRpc2g= 8013
IE5F 8014
IG51bWVy 8015
cmVlcw== 8016
Y2xhaW0= 8017
IG1vY2s= 8018
IG9t 8019
IHNjcmU= 8020
T0xE 8021
LnBs 8022
ZWxlcg== 8023
IGNvcnJlc3BvbmQ= 8024
X0hF 8025
IGJpbmFyeQ== 8026
MTE2 8027
X29yZGVy 8028
IFNRTA== 8029
IGFkdmFudA== 8030
IHByZXY= 8031
Lls= 8032
LmFzc2VydEVxdWFs 8033
cGxpZXI= 8034
YXJw 8035
IGNsb3NlZA== 8036
IGVuY291cg== 8037
IFFTdHJpbmc= 8038
YXVk 8039
IGRldmVsb3BlZA== 8040
IHBlcm1pc3Npb24= 8041
LmRlYnVn 8042
b3BlcmF0b3I= 8043
ICcK 8044
IHN5bQ== 8045
YXRpdmVseQ== 8046
w6ll 8047
LWNvbG9y 8048
IEdFVA== 8049
a3k= 8050
IGFsdGhvdWdo 8051
X3JlcXVlc3Q= 8052
X2VsZW1lbnQ= 8053
Li4uLi4uLi4uLi4uLi4uLg== 8054
X0RBVEE= 8055
IGFtYXppbmc= 8056
IHNi 8057
IERlZmF1bHQ= 8058
RXZlbnRz 8059
IGZhaWx1cmU= 8060
YWNsZQ== 8061
UHJvcGVydGllcw== 8062
IGRyZWFt 8063
IGRpc3Ry 8064
IGF1 8065
IGdlbmVyYXRlZA== 8066
5pU= 8067
IFRlYW0= 8068
VVNF 8069
IGluY29tZQ== 8070
IGV5ZQ== 8071
X25vdA== 8072
Il0s 8073
X2Zvcm0= 8074
U3VwcG9ydA== 8075
b3JkZXJz 8076
LlByaW50 8077
dmlsbGU= 8078
IFdlZG5lc2RheQ== 8079
b2x2ZXI= 8080
IG9wcG9z 8081
aXNhdGlvbg== 8082
b2xh 8083
Q2xvc2U= 8084
PHA= 8085
X3dpZHRo 8086
SW52YWxpZA== 8087
eGI= 8088
IHN0cnVnZw== 8089
X2FjdGlvbg== 8090
IHR4dA== 8091
IFBhdGg= 8092
YWxhcg== 8093
IE1FUkNIQU5UQUJJTElUWQ== 8094
c2VydmljZQ== 8095
IE1pY2hhZWw= 8096
YWJsZVZpZXc= 8097
RGVidWc= 8098
b2tlcw== 8099
U2hl 8100
IGd1ZXNz 8101
IEphdmE= 8102
X1BBVEg= 8103
IHBhcnRpY3VsYXJseQ== 8104
IElJ 8105
IGRvbWFpbg== 8106
5bm0 8107
IHJlZHVjZQ== 8108
LWxlZnQ= 8109
cmVhbA== 8110
IGFwcGVhcnM= 8111
IGNvbW8= 8112
IFVuaXQ= 8113
IEdvdmVybg== 8114
YWxp 8115
YWxsZWw= 8116
IEpldw== 8117
X0k= 8118
IGNvcw== 8119
LmNvbG9y 8120
IEdsb2JhbA== 8121
IHRlbGU= 8122
YmVu 8123
X3RyYW5z 8124
IHJlYXNvbnM= 8125
IGVtYg== 8126
ZW5zaXR5 8127
bGluZXM= 8128
b21pbg== 8129
U2NyZWVu 8130
0LDRgg== 8131
cGVjdHM= 8132
Y2xpcA== 8133
Zm9v 8134
cmVudA== 8135
IGFm 8136
IGRhbmdlcg== 8137
aWxpbmc= 8138
TmFtZXM= 8139
T3Vy 8140
IGRpc3RyaWJ1dGlvbg== 8141
V2hpbGU= 8142
U0w= 8143
V3JpdGU= 8144
IGdvdG8= 8145
IGNvbG9ycw== 8146
IHBvd2VyZnVs 8147
a2lu 8148
IGRlcHRo 8149
ZXJjaWFs 8150
IENvbmdyZXNz 8151
IE1hcmtldA== 8152
RGI= 8153
dW5kZXI= 8154
IExhc3Q= 8155
w58= 8156
Z3JlZw== 8157
IHBvc3Rz 8158
X1VSTA== 8159
b3Rvcw== 8160
RG9u 8161
IG1pY3Jv 8162
IGFycmVzdA== 8163
0L8= 8164
IChA 8165
IEhvdA== 8166
IEluZGV4 8167
OyY= 8168
IyE= 8169
IE5vcg== 8170
IENhcA== 8171
LSg= 8172
IGludGVyZXN0ZWQ= 8173
cGVhcg== 8174
IHJlbnQ= 8175
IGFsYnVt 8176
b2xpY3k= 8177
Lmxhbmc= 8178
LnRyYW5z 8179
LmZvcm1hdA== 8180
IHsNCg0K 8181
cGhlcmU= 8182
IGF4aXM= 8183
IEJ1c2luZXNz 8184
ZXJzaXN0ZW5jZQ== 8185
dXJy 8186
IG1pbmltdW0= 8187
ZW5kb3I= 8188
IFNE 8189
MTEz 8190
IEludGVybmV0 8191
5aQ= 8192
RXhw 8193
aXZlcnNl 8194
TU0= 8195
IG9idmlvdXM= 8196
IGJhc2lz 8197
IHNjaWVuY2U= 8198
IGJ1ZGdldA== 8199
aXphdGlvbnM= 8200
UEE= 8201
IGZsYWdz 8202
cHJldA== 8203
TE9DSw== 8204
IHZhcmlldHk= 8205
IHRydXRo 8206
ZHQ= 8207
IGdvbmU= 8208
IGJhdHRsZQ== 8209
PHN0ZA== 8210
IFNpbA== 8211
cmY= 8212
dWRh 8213
IGVyb3Q= 8214
IENhbQ== 8215
IHN0YXRpb24= 8216
ICc8Lw== 8217
Y2hlbWU= 8218
IFN1bg== 8219
IGZpbmlzaGVk 8220
IHNob3A= 8221
IEtvcmU= 8222
IGVpZ2h0 8223
X1JFRw== 8224
TkQ= 8225
Piw= 8226
Ij48Pw== 8227
KG51bQ== 8228
CWlubGluZQ== 8229
VHJhbnNhY3Rpb24= 8230
Lk9u 8231
IG1haWw= 8232
cmV5 8233
cmVzdWx0cw== 8234
IG5hdg== 8235
SU1JVA== 8236
X2lkcw== 8237
TWFrZQ== 8238
5Yo= 8239
TW9kYWw= 8240
IExPRw== 8241
IFN1cg== 8242
IGluc3RhbmNlb2Y= 8243
IG92ZXJhbGw= 8244
IEluZm9ybWF0aW9u 8245
IGNvbnN0cnVjdGlvbg== 8246
X0ZJTEU= 8247
YnV0 8248
IG1lZGlj 8249
IGR1cmF0aW9u 8250
aXRuZXNz 8251
YWdlbnQ= 8252
QVY= 8253
IHNldmVu 8254
b2xm 8255
IH19Cg== 8256
Il0sCg== 8257
MTcw 8258
MTIy 8259
IGNhbGxpbmc= 8260
IGFucw== 8261
dGhyb3dz 8262
b3Jpem9udGFs 8263
IHVzZVN0YXRl 8264
LmZs 8265
IFN0YXR1cw== 8266
IE9ubGluZQ== 8267
UlI= 8268
IFJpY2g= 8269
IEhpbGw= 8270
IGJyYWlu 8271
IGZvbGxvd2Vk 8272
MjQw 8273
ZW1pYw== 8274
IHNsaWdodA== 8275
IGluc3VyYW5jZQ== 8276
LkFycmF5 8277
IGFic3RyYWN0 8278
IFN1bQ== 8279
cmVkaXJlY3Q= 8280
b3duZXI= 8281
KG1zZw== 8282
IENsaW50b24= 8283
Tm9u 8284
CWV4 8285
IHZvbHVtZQ== 8286
IEV2ZW50QXJncw== 8287
LUw= 8288
IERpbQ== 8289
IE1hcnQ= 8290
IGN1cnNvcg== 8291
IGltcGxlbWVudGF0aW9u 8292
dXJyZWQ= 8293
IGxhcmdlcg== 8294
KTsKCgo= 8295
Jys= 8296
LnRyYW5zZm9ybQ== 8297
IHVwbG9hZA== 8298
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 8299
RHJhdw== 8300
bmVs 8301
CWZsb2F0 8302
cXJ0 8303
IE5ldHdvcms= 8304
IHRpdA== 8305
QXhpcw== 8306
LmFuZHJvaWQ= 8307
IGNvbXBsZXRlZA== 8308
IG11cg== 8309
IGNvbHVtbnM= 8310
eGM= 8311
IHN1cHBseQ== 8312
aW1pbmFs 8313
IHNwcg== 8314
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== 8315
IHVuaXRz 8316
KHU= 8317
bWk= 8318
cmVwbGFjZQ== 8319
W2tleQ== 8320
4Lk= 8321
YW50aWM= 8322
IHBheW1lbnQ= 8323
LEI= 8324
IEFwcGxl 8325
Z2lu 8326
UmVxdWlyZWQ= 8327
Iys= 8328
bGFuZHM= 8329
IHNxdQ== 8330
IGZhY3Rvcg== 8331
ZGVj 8332
IHN0cmVuZ3Ro 8333
IGJveQ== 8334
IGJhbGFuY2U= 8335
IHNvdXJjZXM= 8336
c2NyZWVu 8337
LXRvcA== 8338
IEFtYXpvbg== 8339
IGhpZGRlbg== 8340
0LXRgg== 8341
X2NsaWVudA== 8342
IGVhdA== 8343
LmRpc3BsYXk= 8344
IMK7 8345
IHRyaWdnZXI= 8346
YW5hZ2Vy 8347
IHRybw== 8348
IGNsYWltcw== 8349
Zm9yZA== 8350
IENvbXBhbnk= 8351
IGdpZnQ= 8352
LDo= 8353
X2FwcA== 8354
aGFuZGxl 8355
IHByb2R1Y2U= 8356
L2xpYg== 8357
NTEy 8358
IC0q 8359
CXNldA== 8360
J107 8361
YXJj 8362
YW5kZXI= 8363
IEVuZ2luZQ== 8364
IGF0dHJpYnV0ZXM= 8365
dGFzaw== 8366
PD0= 8367
KE4= 8368
IHdhcm0= 8369
d2hpY2g= 8370
IEZvcmU= 8371
YWdub3N0 8372
bXlz 8373
IHRhbA== 8374
IFNhbA== 8375
Z2k= 8376
IFByaW50 8377
IFRSVUU= 8378
INC+ 8379
LlVJ 8380
IGZsYXNo 8381
cm9wZXJ0eQ== 8382
LmxvY2F0aW9u 8383
IE1pbGw= 8384
Ymk= 8385
Y29udHI= 8386
LnJlcXVlc3Q= 8387
IFNhbQ== 8388
IG5lZ2F0aXZl 8389
a2l0 8390
IHNldHQ= 8391
LnByaW50U3RhY2tUcmFjZQ== 8392
YWJl 8393
CWk= 8394
IGJ1cm4= 8395
IHNvY2lldHk= 8396
Q2FjaGU= 8397
IFNlY3VyaXR5 8398
Lm1vZGVscw== 8399
IFdBUlJBTlRZ 8400
X3Vw 8401
Y2VpdmU= 8402
IGNsaWVudHM= 8403
LlRy 8404
IHByb3ZpZGluZw== 8405
IHJvdXQ= 8406
bWF0ZXJpYWw= 8407
IHx8Cg== 8408
IFNlcg== 8409
IE9mZmljZQ== 8410
RlRXQVJF 8411
ICck 8412
IGZvYw== 8413
IGV4Y2VsbA== 8414
IGNhdA== 8415
bm9ybWFs 8416
IGRldGVybWluZQ== 8417
CXVpbnQ= 8418
UGFuZQ== 8419
IGVtcGxveWVlcw== 8420
IFRleGFz 8421
IHRyYWZm 8422
IFJlcG9ydA== 8423
YW50YQ== 8424
IEJveA== 8425
IGRqYW5nbw== 8426
IHBhcnRuZXI= 8427
RUI= 8428
TElORQ== 8429
IGZlZWxpbmc= 8430
IGNpdmls 8431
KGZsb2F0 8432
U3Fs 8433
IHdvdWxkbg== 8434
LmluaXQ= 8435
LmxlZnQ= 8436
LXY= 8437
X2xldmVs 8438
J30= 8439
QUY= 8440
IGxvYWRpbmc= 8441
IE9ubHk= 8442
IGNvb2tpZXM= 8443
IEds 8444
Q08= 8445
IHN0cmF0ZWd5 8446
KCcuLw== 8447
IHNoaXA= 8448
cG9zZXM= 8449
IHNpZ25hbA== 8450
IGFscGhh 8451
LnBvcA== 8452
UmFkaXVz 8453
IHJlcGxhY2U= 8454
X0RJUg== 8455
Y291bnRlcg== 8456
YnNlcnZhYmxl 8457
ZWxh 8458
V2VpZ2h0 8459
aGFzaA== 8460
Ym9zZQ== 8461
Zng= 8462
IEVtYWls 8463
IHJlZmVy 8464
bG9jYWxob3N0 8465
X1JP 8466
aXF1ZXM= 8467
U3RlcA== 8468
IGFoZWFk 8469
KFZpZXc= 8470
IFNlcnZpY2Vz 8471
IEpzb24= 8472
ZXNzb3I= 8473
IHB1bg== 8474
IGFwcHJvcHJpYXRl 8475
YWtlcnM= 8476
b3Nlbg== 8477
cG9zaW5n 8478
IGFnZW50 8479
ZmM= 8480
IHRyYW5zZmVy 8481
IGludmFsaWQ= 8482
IFJlc2VhcmNo 8483
VmVydGV4 8484
IGdheQ== 8485
IGpvdXJuYWw= 8486
W3g= 8487
ICIiLAo= 8488
IFdlbGw= 8489
LlRhc2tz 8490
U3BlYw== 8491
IG9s 8492
IHNwZW5k 8493
IEF1c3RyYWxpYQ== 8494
TWF0Y2g= 8495
Lmp1bml0 8496
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 8497
IE1BWA== 8498
aXphYmxl 8499
Y2x1c2l2ZQ== 8500
X3ZhbGlk 8501
IHF1YXJ0ZXI= 8502
eWFu 8503
MDA1 8504
IEVkaXQ= 8505
YXJkZW4= 8506
PW5ldw== 8507
IGZyYWc= 8508
Qml0 8509
emk= 8510
YWluZQ== 8511
dWRk 8512
Lk9iamVjdA== 8513
ZGVidWc= 8514
IGNhc2g= 8515
X0lN 8516
IGVlbg== 8517
IGNvbW1lcmNpYWw= 8518
IFZpZGVv 8519
bG9hZGVy 8520
IGZpeGVk 8521
IGFwcGxpY2F0aW9ucw== 8522
IF8s 8523
IFJ1c3NpYQ== 8524
aXRlY3Q= 8525
Xyg= 8526
IEJsb2Nr 8527
IHNhbg== 8528
IFRvbQ== 8529
IHBlcmhhcHM= 8530
IHNpZw== 8531
bGV2YW50 8532
IGNvcnBvcg== 8533
YXRhc2V0 8534
cm9uaWM= 8535
eGU= 8536
IGV0aA== 8537
U29tZQ== 8538
cG9w 8539
X09L 8540
IHRlbmQ= 8541
LlJlcw== 8542
X2FuZA== 8543
IHJldmlld3M= 8544
IHdpbGQ= 8545
MTE3 8546
IGRlZ3JlZQ== 8547
Lk8= 8548
Lm9iamVjdHM= 8549
X2FyZ3M= 8550
bmls 8551
IGRpc2FibGVk 8552
UGFyZW50 8553
IG5vdGVz 8554
ICIiCg== 8555
KHN0YXRl 8556
aXN0cmljdA== 8557
IGxvZ2dpbmc= 8558
LklP 8559
IE1hbA== 8560
RE0= 8561
IHhtbA== 8562
IFJvYmVydA== 8563
ZWxlbg== 8564
bGF5b3V0 8565
Zm9s 8566
J10pKQ== 8567
LGI= 8568
IEplcg== 8569
ZmlsZW5hbWU= 8570
IGZhbg== 8571
IEN1c3RvbQ== 8572
PSIi 8573
IERpZQ== 8574
QnVuZGxl 8575
LnV0aWxz 8576
IHRyaXA= 8577
TUI= 8578
IHNvZnQ= 8579
X01PREU= 8580
IGFwcGxpY2FibGU= 8581
IHVwcGVy 8582
RVJWRVI= 8583
X2Fs 8584
X0xPRw== 8585
SGVyZQ== 8586
d3A= 8587
IFNlcnZlcg== 8588
IENsaWVudA== 8589
IGNoZW0= 8590
U2Nyb2xs 8591
IGhpZ2hlc3Q= 8592
IFNlbGVjdA== 8593
ICJA 8594
IFdoeQ== 8595
U2Vj 8596
aGVlbA== 8597
T3BlcmF0aW9u 8598
IGNvbm5lY3RlZA== 8599
aXJtZWQ= 8600
IGNpdGl6 8601
IENoZQ== 8602
IGZvcmNlcw== 8603
IHd3dw== 8604
Um9vdA== 8605
QU5DRQ== 8606
TWFueQ== 8607
aWNpcA== 8608
cmdhbg== 8609
MjIw 8610
IFRvcg== 8611
IFByZXNz 8612
IE1vcg== 8613
LWxpbmU= 8614
dWxlZA== 8615
Plw= 8616
IHRodXM= 8617
IFJlZ2lzdGVy 8618
aG9s 8619
IENoaW5lc2U= 8620
IHBvc3RlZA== 8621
IG1hZ24= 8622
YWJpbGl0aWVz 8623
IGRpc2Vhc2U= 8624
IHJlbWFpbnM= 8625
IFByb2Y= 8626
LWZvcm0= 8627
IGNpbg== 8628
b3JnYW4= 8629
aWNhdGU= 8630
IHN0cmVzcw== 8631
XSo= 8632
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 8633
X2NvbnRleHQ= 8634
b3JyeQ== 8635
IGRpZWQ= 8636
bWF0 8637
IHN0YXJ0cw== 8638
Lk1lc3NhZ2U= 8639
IHJ1bnM= 8640
IGd1aWRl 8641
IHdhcnJhbnR5 8642
ZW50aWFscw== 8643
ZGljdA== 8644
IFNpemU= 8645
dWxlcg== 8646
IHJlc3BvbnNpYmxl 8647
X1NFVA== 8648
IGNvbnRhaW5pbmc= 8649
IFByaWNl 8650
fHw= 8651
MzUw 8652
RlM= 8653
IGVtcA== 8654
X2J1dHRvbg== 8655
KHVpbnQ= 8656
IHN1ZmY= 8657
cHRo 8658
IGRlZmluaXRlbHk= 8659
cHV0ZQ== 8660
IG1hcmtldGluZw== 8661
IFdI 8662
IFNpZQ== 8663
Kz0= 8664
T0xPUg== 8665
IGNvbnN1bHQ= 8666
IHNpZ25lZA== 8667
IHNlcXVlbmNl 8668
bGVl 8669
IHJlcXVpcmVtZW50cw== 8670
aHk= 8671
RXhwcmVzcw== 8672
TVQ= 8673
c2V5 8674
IHVsdA== 8675
5a4= 8676
ZWxsaWdlbmNl 8677
IGFuYWx5 8678
IGRyZXNz 8679
ZW5naW5l 8680
IEdyZWF0 8681
IEFuZHJvaWQ= 8682
IEFsZXg= 8683
bW9kZQ== 8684
RGljdGlvbmFyeQ== 8685
LkRhdGU= 8686
5L0= 8687
VklDRQ== 8688
IGZhbWlsaWVz 8689
IFJ1c3NpYW4= 8690
IFRpbWVz 8691
LmNhbGw= 8692
JCg= 8693
UHJvZmlsZQ== 8694
IGZvbGRlcg== 8695
Y2hlcw== 8696
IGxlZ2lz 8697
X3Jvdw== 8698
dW5lcw== 8699
2YQ= 8700
IH0pLg== 8701
QXNzZXJ0 8702
YWdlbg== 8703
IEhhbmQ= 8704
SXRlcg== 8705
IGJpZ2dlc3Q= 8706
b3JlYWNo 8707
IHBvbGlj 8708
IHBlcm1pc3Npb25z 8709
IHNob3dlZA== 8710
IEVsZW1lbnQ= 8711
IHRvcGlj 8712
4oCU4oCU 8713
cm9hZA== 8714
IEJhbms= 8715
cmVjb3Jk 8716
IHBhcnRuZXJz 8717
IFJlZg== 8718
ZXNzaW9ucw== 8719
IGFzc2Vzcw== 8720
VVNU 8721
IFBhcnR5 8722
cHJvZHU= 8723
TEM= 8724
IHVs 8725
LmZvcm0= 8726
aGlkZQ== 8727
Y29weQ== 8728
VVRG 8729
IFNPRlRXQVJF 8730
DQoNCg0K 8731
IExpbg== 8732
dW5h 8733
dWdhcg== 8734
IGFkbWluaXN0cmF0aW9u 8735
IG9wZW5pbmc= 8736
IHNjYW4= 8737
IGNvbnRpbnVlZA== 8738
Y29tcG9uZW50 8739
LnNw 8740
IGhhcHBlbnM= 8741
dW1teQ== 8742
IFBS 8743
LkZpbGU= 8744
IERvd25sb2Fk 8745
TG9hZGluZw== 8746
ZGk= 8747
IHdhaXRpbmc= 8748
X0FERA== 8749
VGFi 8750
LnF1ZXJ5U2VsZWN0b3I= 8751
IGVjb25vbXk= 8752
IEZyZW5jaA== 8753
dHh0 8754
IGZhbnQ= 8755
XzsK 8756
SG9sZGVy 8757
U0g= 8758
MDA0 8759
IG51bXB5 8760
IHN0cmVldA== 8761
IG1hbGU= 8762
XE1vZGVs 8763
YW5naW5n 8764
MzMz 8765
IEJpbGw= 8766
IHByZXZpb3VzbHk= 8767
Qkk= 8768
IFNlY3JldA== 8769
IG1pc3Q= 8770
IEZpZWxk 8771
dXBz 8772
IFByb2Nlc3M= 8773
IGtlcHQ= 8774
IE9U 8775
IHRyYWRpdGlvbmFs 8776
Lmk= 8777
YW1pbg== 8778
IGhlbHBz 8779
QW55 8780
b3JpZ2lu 8781
aWx0ZXJz 8782
anU= 8783
ZGVzYw== 8784
IEFjY291bnQ= 8785
ICkNCg== 8786
a3RvcA== 8787
b2xseQ== 8788
IGZz 8789
IOo= 8790
IHV0 8791
IGNlbnRyYWw= 8792
KHRlc3Q= 8793
LkFu 8794
IHNhdGlzZg== 8795
R1I= 8796
IEZ1bGw= 8797
IGhlYXQ= 8798
aWJlcg== 8799
IG9udG8= 8800
bW9z 8801
U2NoZW1h 8802
IGZhY3Rvcnk= 8803
Ii4k 8804
YXdz 8805
U3RhdGVtZW50 8806
KHRhcmdldA== 8807
CW5ldw== 8808
LmJl 8809
IGd1ZXN0 8810
IG1hbA== 8811
QVJZ 8812
IHJlYWNoZWQ= 8813
IG1vdXNl 8814
IGNoYWxsZW5nZQ== 8815
CWRvdWJsZQ== 8816
IFRlbQ== 8817
IHRlcnJvcg== 8818
IGV4dHJhY3Q= 8819
X1RP 8820
IHNlcGFyYXRl 8821
IG1pcg== 8822
aGVscA== 8823
IGNhcGFjaXR5 8824
IFByb3BlcnR5 8825
a2Fu 8826
X2NyZWF0ZQ== 8827
IExpZ2h0 8828
LnBhcmVudA== 8829
IHVuZGVyc3RhbmRpbmc= 8830
IGVhc2llcg== 8831
IHw9 8832
IGVuaA== 8833
IGZhdA== 8834
IHByb3Rlc3Q= 8835
YW1t 8836
X0FU 8837
LW9m 8838
aWxz 8839
IE9o 8840
IHBzeWNo 8841
ICQu 8842
aW5kcw== 8843
IHJlbGF0aXZl 8844
c2hvcA== 8845
c2hvcnQ= 8846
IFNhbmQ= 8847
MjEw 8848
dWVzdGlvbg== 8849
IGZlYXI= 8850
LwoK 8851
LmNvbnRleHQ= 8852
IHNjaG9vbHM= 8853
IHNlcnZl 8854
em9uZQ== 8855
X2Ri 8856
IG1ham9yaXR5 8857
ZXhhbXBsZQ== 8858
IGxhbmc= 8859
CSAg 8860
UmVnaXN0ZXI= 8861
ZW5kbw== 8862
IHByb2Nlc3Npbmc= 8863
X3RlbXBsYXRl 8864
LXVzZXI= 8865
IGVn 8866
Q09N 8867
IEJsdWU= 8868
aXJv 8869
IHJlbW90ZQ== 8870
IElU 8871
IyEv 8872
IHJlZGlzdHJpYg== 8873
MTI0 8874
cmF6 8875
IFNpbmNl 8876
IFR1cg== 8877
MTM1 8878
QmFja2dyb3VuZA== 8879
PT09 8880
IHJlZmxlY3Q= 8881
IHByb3M= 8882
Y21k 8883
IHdob20= 8884
Q29tcGF0 8885
IEFyZQ== 8886
SWRlbnRpZmllcg== 8887
IFRob20= 8888
X3BvcnQ= 8889
Z3U= 8890
IG1vbml0b3I= 8891
cm0= 8892
IHBhdGllbnQ= 8893
dmVydGVy 8894
IGdhaW4= 8895
LXVp 8896
SW5zdA== 8897
IGRpZXM= 8898
MTE4 8899
QXJlYQ== 8900
X2ZpbHRlcg== 8901
IGdyYXQ= 8902
IHJlYWxpdHk= 8903
b3JkaW5hdGU= 8904
b2x2ZWQ= 8905
Q29udGFjdA== 8906
IGNvbXBsaWFuY2U= 8907
X29y 8908
IFZhcg== 8909
ZGw= 8910
IGFwcGVuZA== 8911
R0VS 8912
KG1heA== 8913
LnJlbmRlcg== 8914
IGR5bmFtaWM= 8915
b3JkaW5hdGVz 8916
X29wdGlvbnM= 8917
X2NvbHVtbg== 8918
IGJhdHRlcg== 8919
c3BhY2U= 8920
TGE= 8921
IFNvdXJjZQ== 8922
L2Jpbg== 8923
IGRvcw== 8924
IEJvYXJk 8925
IFRocmVhZA== 8926
IEFM 8927
KGNvbmZpZw== 8928
MTQ0 8929
IE1lcg== 8930
IG1pbGVz 8931
X2hlYWRlcg== 8932
RVRIT0Q= 8933
aXp6 8934
IGJlbmVmaXQ= 8935
IGludGVncg== 8936
KGN1cnJlbnQ= 8937
dWxv 8938
LmRlZmF1bHQ= 8939
IERpdg== 8940
IHRvbg== 8941
b3Ro 8942
ZXJ2YXRpb24= 8943
ZWRvbQ== 8944
IGJhYnk= 8945
Y2VpdmVk 8946
LnRvcA== 8947
cmlvcml0eQ== 8948
IExvY2Fs 8949
cmlhZ2U= 8950
IGF0dGFja3M= 8951
IGhvc3BpdGFs 8952
MTY4 8953
IGZlbWFsZQ== 8954
IExvZ2lu 8955
IEZsb3I= 8956
IGNoYWlu 8957
YXNoaW9u 8958
VGV4dHVyZQ== 8959
U2F2ZQ== 8960
IGZhcm0= 8961
LmNvbnRhaW5z 8962
LlRlc3Q= 8963
IGtub3dz 8964
IGdlbmVyYWxseQ== 8965
aXBlbGluZQ== 8966
IG1lYW50 8967
ZW5jaWE= 8968
IG5pY2h0 8969
IGNvbnRlbnRz 8970
UE0= 8971
Y2hlZHVsZQ== 8972
KGxpbmU= 8973
Q0c= 8974
am9i 8975
IFJlYWw= 8976
dWVy 8977
ZmlybQ== 8978
INg= 8979
ZXRybw== 8980
ImAK 8981
IHNwZWVjaA== 8982
IHRocg== 8983
Zm9yZWFjaA== 8984
IHdhcm4= 8985
CWw= 8986
IGhlYXZ5 8987
PGxp 8988
TmU= 8989
IGludmVzdGlnYXRpb24= 8990
TWF0aA== 8991
LXRpdGxl 8992
IGNodXJjaA== 8993
IGRlc3BpdGU= 8994
Y2hhaW4= 8995
IHdoYXRldmVy 8996
YXJpYW4= 8997
Zm4= 8998
IG1ldGE= 8999
fSkKCg== 9000
VUZG 9001
IHJlZ2FyZGluZw== 9002
X1NVQ0NFU1M= 9003
bWVz 9004
IEludGVudA== 9005
IHJlc29sdmU= 9006
cG9zcw== 9007
aXJh 9008
Zm9yY2U= 9009
b2ljZQ== 9010
w6I= 9011
IHBt 9012
IHVwZGF0ZXM= 9013
QXJy 9014
INE= 9015
dGVzdGluZw== 9016
IHRvd2FyZA== 9017
bnRheA== 9018
64s= 9019
IGxpc3Rlbg== 9020
IGdvYWxz 9021
SW5zdGFuY2VTdGF0ZQ== 9022
RHI= 9023
IHJhcmU= 9024
IHRyYWls 9025
S2V5cw== 9026
Q2Fs 9027
Q2Fy 9028
IFBlb3BsZQ== 9029
CWxvY2Fs 9030
Y2xhc3Nlcw== 9031
UmVmZXJlbmNl 9032
LmZvckVhY2g= 9033
ZW1i 9034
YWN0aXY= 9035
IHByaW0= 9036
cmVkaWN0 9037
IHJhZA== 9038
5pWw 9039
LkJhY2s= 9040
IHNwcmVhZA== 9041
IGNsb2Nr 9042
IHZpcg== 9043
ZWRpdG9y 9044
IGVmZm9ydHM= 9045
IGJyYW5jaA== 9046
IGluZHVzdA== 9047
IG1vdG9y 9048
IGFtYg== 9049
IGRhdGV0aW1l 9050
IHJlbmNvbnQ= 9051
IENocmlzdGlhbg== 9052
IEFtZXJpY2Fucw== 9053
ZnVsbA== 9054
IGZtdA== 9055
Lm1haW4= 9056
IGNhdXNlZA== 9057
X3VwZGF0ZQ== 9058
IENvbnRlbnQ= 9059
QVRDSA== 9060
IGJhdGg= 9061
IEVhY2g= 9062
IHJhZGlv 9063
YWNobWVudA== 9064
dXp6 9065
U3VibWl0 9066
IHJlc3RyaWN0 9067
YWJpbg== 9068
IExvYWQ= 9069
IGV4dGVuc2lvbg== 9070
IGVzc2F5 9071
IGhhdA== 9072
YXZpb3Vy 9073
dG9CZQ== 9074
Ijpb 9075
IG9mZmVyZWQ= 9076
IHZpbGw= 9077
KGRvdWJsZQ== 9078
MTE5 9079
5pel 9080
YmM= 9081
X2ZyZWU= 9082
IE1pc3M= 9083
IEJlcg== 9084
IOg= 9085
IExpa2U= 9086
IGhlbHBlZA== 9087
LmdldE5hbWU= 9088
X0FM 9089
IHNwaXJpdA== 9090
IEFwYWNoZQ== 9091
d3M= 9092
IHRoZXJlZm9yZQ== 9093
KHBhcmFtcw== 9094
X2ltZw== 9095
IHBlYWNl 9096
IGluY29y 9097
IEVYUEVDVA== 9098
IG1pbm9y 9099
aXBlcw== 9100
CWRhdGE= 9101
c2VsZWN0b3I= 9102
Y2l0eQ== 9103
dHJpZQ== 9104
LmJhc2U= 9105
X2ZyYW1l 9106
IG9wZW5lZA== 9107
L2pzb24= 9108
TFk= 9109
bnU= 9110
LkRl 9111
dGY= 9112
bWFyZ2lu 9113
LlBhcnNl 9114
IHBp 9115
IGVx 9116
YmQ= 9117
RmllbGRz 9118
IFRyZWU= 9119
IGJhbg== 9120
aXN0YW4= 9121
CiAgICAgICAgCg== 9122
CWds 9123
IHByb2R1Y2Vk 9124
c3lzdGVt 9125
TWFyaw== 9126
X2hhc2g= 9127
IGJn 9128
IGNvbnN0aXQ= 9129
IExlYWd1ZQ== 9130
IG1pc3Npb24= 9131
X2Zvcm1hdA== 9132
KFsK 9133
Y2x1c2lvbg== 9134
ISI= 9135
0Lc= 9136
YnJlYWs= 9137
CXN3aXRjaA== 9138
IHRoZXI= 9139
VHJhbnNmb3Jt 9140
IGZvb3RiYWxs 9141
LWxpbms= 9142
cm91dGU= 9143
LmF1dGg= 9144
IGJhZw== 9145
b3ZlcnM= 9146
IGVuYWJsZWQ= 9147
IHJhYw== 9148
KEk= 9149
Q1I= 9150
YW5jaW5n 9151
IG1hbmFnZWQ= 9152
X3E= 9153
TkdUSA== 9154
IG1hYw== 9155
IEF1dG8= 9156
YW1lbnRl 9157
ICcnLA== 9158
LkFwcGVuZA== 9159
IHBpbg== 9160
Lml0ZW0= 9161
YWNraW5n 9162
IG9jY2Fz 9163
cGVyc29u 9164
IHRp 9165
LlJlZw== 9166
IGhhdmVu 9167
IGdsYXNz 9168
ICI8Lw== 9169
IFNpbXBsZQ== 9170
UHJpbnQ= 9171
IHN1cnJvdW5k 9172
Tk8= 9173
44CCCg== 9174
ICAgICAgICANCg== 9175
IE1hbnk= 9176
ICJf 9177
IHdlZWtlbmQ= 9178
IHNvbWV3 9179
LnBhcmFtcw== 9180
c21hbGw= 9181
QVRFRA== 9182
IHBsdWdpbg== 9183
ZmllbGRz 9184
IEluaXRpYWxpemU= 9185
b29u 9186
YXRpbGU= 9187
eWU= 9188
IHZvdXM= 9189
TEFH 9190
IG9sZGVy 9191
IGdhbQ== 9192
IGV4dHJlbWVseQ== 9193
IGhldA== 9194
ZW51bQ== 9195
IFNFVA== 9196
eGZm 9197
IHRpbWVy 9198
L2luZGV4 9199
IGNyaXRpY2Fs 9200
Um93cw== 9201
X2FyZ3VtZW50 9202
IGV4ZWN1dGU= 9203
IHNob3dpbmc= 9204
LnhtbA== 9205
LWxpc3Q= 9206
Um9sZQ== 9207
dHlwZW5hbWU= 9208
X21ldGhvZA== 9209
dGhhdA== 9210
Y2hlcg== 9211
IOKG 9212
WFQ= 9213
IHRob3VzYW5kcw== 9214
CW4= 9215
IHJlc3A= 9216
X3ByaWNl 9217
b2x1dA== 9218
QWc= 9219
IFR3bw== 9220
IGJlY29tZXM= 9221
IGh1cw== 9222
LlVzZQ== 9223
dGhlbWU= 9224
dXJi 9225
IC8qCg== 9226
ZXJpYWxpemU= 9227
QVJO 9228
IGxvc2U= 9229
TG93ZXI= 9230
IHZlbA== 9231
IGRlZmVuc2U= 9232
Y29uZGl0aW9u 9233
IGJlcw== 9234
IGRyeQ== 9235
IHNjcm9sbA== 9236
LlNob3c= 9237
SUVM 9238
0L7RgA== 9239
IFJlc3Q= 9240
V2hlcmU= 9241
b29kcw== 9242
IEplcw== 9243
IHdpcmU= 9244
X0lORk8= 9245
IHN0cmluZ3M= 9246
Z21lbnQ= 9247
IG1hdGNoZXM= 9248
IGVsZWN0cmlj 9249
IGV4Y2VsbGVudA== 9250
IENvdW5jaWw= 9251
aWRhZGU= 9252
IHd4 9253
cHVzaA== 9254
X2VudHJ5 9255
IHRhc2tz 9256
IHJpY2g= 9257
c2E= 9258
IFNtaXRo 9259
VU5DVElPTg== 9260
UG9pbnRlcg== 9261
cGVjdGl2ZQ== 9262
MTMx 9263
IHdpZGdldA== 9264
aXN0YQ== 9265
IGFnZW5jeQ== 9266
IHNpY2g= 9267
b2xvZ2llcw== 9268
IHRyaWFs 9269
YWx5c2lz 9270
LmNoZWNr 9271
QVJL 9272
IG9uQ2hhbmdl 9273
YWJvdXQ= 9274
Jywk 9275
KHZhbA== 9276
IHBsYWNlZA== 9277
X05P 9278
IGRhbg== 9279
LmVxdWFs 9280
CSAgICAg 9281
IHdlYXRoZXI= 9282
LmdhbWU= 9283
IGRlc3RpbmF0aW9u 9284
X1VTRVI= 9285
aWVjZQ== 9286
IHByb3ZpZGVy 9287
Lmxhc3Q= 9288
cGxleA== 9289
Tm90ZQ== 9290
L2pz 9291
IHDDpQ== 9292
IHBsYW5uaW5n 9293
YXR0cmlidXRl 9294
UFJP 9295
YXRjaGVz 9296
IDwt 9297
IHNlZWluZw== 9298
IGNhbmNlbA== 9299
X2luZA== 9300
LmtleXM= 9301
IHZpc3VhbA== 9302
IEN1cnJlbnQ= 9303
IENvbGxlZ2U= 9304
IFJvY2s= 9305
IGFncmVlbWVudA== 9306
IFN0b3Jl 9307
b3Zpbmc= 9308
IGNvcm5lcg== 9309
YW1waW9ucw== 9310
SVNF 9311
Rmlu 9312
IHByb3RlY3Rpb24= 9313
IGZp 9314
UGxheQ== 9315
cGx1Z2lu 9316
KX0= 9317
LmZyYW1l 9318
LXo= 9319
IHRyYW5zaXRpb24= 9320
aWdpbg== 9321
IGNhbmRpZGF0ZQ== 9322
IFVuaW9u 9323
X3ZhbHVlcw== 9324
KG1hcA== 9325
Y2xl 9326
IHRyZW5k 9327
d2lkZQ== 9328
YXJlbg== 9329
TG9j 9330
VVRI 9331
IEJheQ== 9332
IHNtYWxsZXI= 9333
aXVz 9334
MTQx 9335
d2VsbA== 9336
IGNyaW1pbmFs 9337
IGNvbmZsaWM= 9338
YmVydA== 9339
X0lOVA== 9340
IGludmVzdG1lbnQ= 9341
Y3VzdG9t 9342
IFNlc3Npb24= 9343
X3dyaXRl 9344
YW5pYQ== 9345
IE1hc3M= 9346
X0VR 9347
X05PVA== 9348
IHZpb2xlbmNl 9349
QXJndW1lbnQ= 9350
X2VtYWls 9351
IGJlbG9uZw== 9352
X2Z1bmN0aW9u 9353
IGVuZW15 9354
ZW1h 9355
IEFkZHJlc3M= 9356
LmVtcHR5 9357
IGlubmVy 9358
IENvbnRhY3Q= 9359
TG9hZGVy 9360
PGlucHV0 9361
IENB 9362
bG90 9363
IHBpY3R1cmVz 9364
IFN1cHBvcnQ= 9365
X25hbWVz 9366
MTg4 9367
TGF5ZXI= 9368
IENsaWNr 9369
U3Vt 9370
w6Y= 9371
IExvb2s= 9372
dW91cw== 9373
TGli 9374
RmxhZ3M= 9375
dGVhbQ== 9376
RVA= 9377
MTg5 9378
aGF0 9379
b3ZlcnJpZGU= 9380
YXBzZWQ= 9381
IGxhYmVscw== 9382
cXVpcw== 9383
IFN0cmVhbQ== 9384
X2RldmljZQ== 9385
IENvbW1pdA== 9386
KHJvb3Q= 9387
In0= 9388
LmlzRW1wdHk= 9389
MTI2 9390
CU0= 9391
IGFuZ2xl 9392
IEJlY2F1c2U= 9393
JSUlJSUlJSU= 9394
IGFpbQ== 9395
IHN0aWNr 9396
c3RtdA== 9397
YWdyYXBo 9398
YW5zd2Vy 9399
IGNsaW4= 9400
IElzbA== 9401
LmV4dA== 9402
IElOVA== 9403
IHN0eWxlcw== 9404
IGJvcm4= 9405
IHNjcg== 9406
IGV4cGFuZA== 9407
IHJhaXNlZA== 9408
VGV4dEJveA== 9409
SUxM 9410
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 9411
SFRUUA== 9412
MTMy 9413
Pik= 9414
X2NoYXI= 9415
cmVzb3VyY2U= 9416
IGVwaXNvZGU= 9417
ICdf 9418
IEVz 9419
IEVhcnRo 9420
wqDCoA== 9421
VVBEQVRF 9422
MTMz 9423
IFNvdQ== 9424
dWlz 9425
dHlwZXM= 9426
IG1hcw== 9427
IGZhdg== 9428
IGNvbnN0cnVjdA== 9429
X3JhdGU= 9430
ZXJhcw== 9431
IHwK 9432
cm9wZXJ0aWVz 9433
IGV4dGVybmFs 9434
IGFwcGxpZWQ= 9435
IHByZWZpeA== 9436
b3RlZA== 9437
bGVycw== 9438
IGNvbGQ= 9439
IFNQ 9440
IENodXJjaA== 9441
IE91dHB1dA== 9442
bG9zZWQ= 9443
55o= 9444
aWZpY2F0ZQ== 9445
b3BlcmF0aW9u 9446
aGVyaXQ= 9447
eEZG 9448
LmVudg== 9449
X2Vycg== 9450
b3No 9451
RGlyZWN0aW9u 9452
Q2FuY2Vs 9453
IEZyYW5r 9454
IGZpbmRpbmc= 9455
LikKCg== 9456
IHJvdXRlcg== 9457
44O7 9458
c2Vz 9459
IGNyb3c= 9460
PT0n 9461
IHNhbmQ= 9462
IHJpZA== 9463
aXR1cmU= 9464
IGVudHJl 9465
IG9ic2Vydg== 9466
IHZhYw== 9467
8J8= 9468
LVQ= 9469
QXJ0 9470
bmlnaHQ= 9471
LnNlYXJjaA== 9472
IGV4Y2hhbmdl 9473
IGRpc3RyaWN0 9474
Lm9z 9475
IGRlcGFydG1lbnQ= 9476
IGRvY3VtZW50cw== 9477
IGNlbnR1cnk= 9478
IE5leHQ= 9479
SG9zdA== 9480
IEtJTkQ= 9481
IHN1c3A= 9482
LVA= 9483
cmVuZA== 9484
LmVt 9485
dWl0ZQ== 9486
aXN0ZXJz 9487
KGpzb24= 9488
IEFubg== 9489
d3Q= 9490
YXRp 9491
IEhUTUw= 9492
d2hlbg== 9493
RGlyZWN0b3J5 9494
IHNodXQ= 9495
PGE= 9496
ZWR5 9497
IGhlYWx0aHk= 9498
IHRlbXBlcmF0dXJl 9499
IEdlbg== 9500
IG1ldGFs 9501
IHN1Ym1pdA== 9502
IERP 9503
IGF0dHJhY3Q= 9504
IHt9Owo= 9505
IFdvcmQ= 9506
IGxs 9507
IHNlZW1lZA== 9508
a28= 9509
SUVE 9510
IGxhYm9y 9511
LkNvbnRleHQ= 9512
IGFzc2V0 9513
eW91 9514
IGNhcnM= 9515
IENvbHVtbg== 9516
IHLDqQ== 9517
IHNxdWFyZQ== 9518
IE5TU3RyaW5n 9519
4oCdLA== 9520
YXBlcw== 9521
Li4uCg== 9522
IHRoYW5rcw== 9523
KHByb3Bz 9524
IHRpY2s= 9525
IGV4cGVyaW1lbnQ= 9526
IHByaXNvbg== 9527
dHJlZQ== 9528
LXRleHQ= 9529
IElPRXhjZXB0aW9u 9530
LXdpZHRo 9531
X1NUQVRVUw== 9532
ZmFzdA== 9533
LWJvZHk= 9534
LWhlYWRlcg== 9535
IGd1YXI= 9536
Y3JldGU= 9537
IFRpbQ== 9538
IGNsZWFybHk= 9539
IFJlcHVibGljYW4= 9540
IGp1c3RpZnk= 9541
0LjRgg== 9542
CSAgICA= 9543
Y2FjaGU= 9544
Oy8v 9545
IHByZXNlbmNl 9546
IGZhY3RvcnM= 9547
IGVtcGxveWVl 9548
XSkp 9549
TWVtYmVy 9550
IHNlbGVjdG9y 9551
Ym9y 9552
IE1leA== 9553
55qE 9554
dXRleA== 9555
X3RhZw== 9556
YWlsdXJl 9557
IE5ldA== 9558
IHJlbGk= 9559
RUc= 9560
IGZwcmludGY= 9561
IHRlZW4= 9562
bG9zcw== 9563
IGxlYXZpbmc= 9564
MTM0 9565
RGVsZWdhdGU= 9566
IGJlYXQ= 9567
IG1pbnV0ZQ== 9568
c3Vic2NyaWJl 9569
IHJlZGlzdHJpYnV0ZQ== 9570
Q29uc3RhbnRz 9571
IGNhbmNlcg== 9572
L3s= 9573
Qkw= 9574
IHNwYW4= 9575
IENoaWxk 9576
Q2VudGVy 9577
IGVhcnRo 9578
WVM= 9579
IExldmVs 9580
IHNlYQ== 9581
LnN1cHBvcnQ= 9582
LmlubmVy 9583
Lkl0ZW0= 9584
aWxsaW5n 9585
ICAgIAogICAgCg== 9586
IExhYmVs 9587
MzIw 9588
IEVzdA== 9589
KGFyZw== 9590
MTQ1 9591
Ym9Cb3g= 9592
CWZvcmVhY2g= 9593
Y29z 9594
RmFpbGVk 9595
c3dlcnM= 9596
RWRpdG9y 9597
cm9udA== 9598
IE1Q 9599
ZXhwcg== 9600
IExpZmU= 9601
ID8/ 9602
w7Zy 9603
IGF0dGVuZA== 9604
IFF1ZQ== 9605
IHNwZWNpZXM= 9606
LUQ= 9607
IGF1cw== 9608
U3RydWN0 9609
IGFkdmFudGFnZQ== 9610
b3N0b24= 9611
LWJsb2Nr 9612
aW5pdGlhbA== 9613
Q1JF 9614
IHRydWx5 9615
IGNvbXBhcmU= 9616
b3JuZXk= 9617
IHNwZWN0 9618
RnVsbA== 9619
YmVz 9620
IHZpc2libGU= 9621
IG1lc3M= 9622
c3RhbmNlcw== 9623
IGNsb3Vk 9624
X3ZlcnNpb24= 9625
IGZ1cm4= 9626
aWNhZ28= 9627
TE9X 9628
IHRyYWZmaWM= 9629
IGZvbA== 9630
cnlwdG8= 9631
IGRlY2xhcg== 9632
IHNsb3Q= 9633
IEV4dA== 9634
IEVuZ2xhbmQ= 9635
IFVuZGVy 9636
IHRh 9637
bGV0dGVy 9638
MjAz 9639
IG9mZmljZXI= 9640
IERvbmFsZA== 9641
WWVz 9642
X2pzb24= 9643
SVRhYmxlVmlldw== 9644
IFVTRQ== 9645
bXBsb3llZQ== 9646
IG9waW5pb24= 9647
IEF1dA== 9648
Ym9yZGVy 9649
IGFkdmljZQ== 9650
IGF1dG9tYXRpY2FsbHk= 9651
aXNjbw== 9652
IG1t 9653
LnZpcw== 9654
YW1s 9655
IGluaXRpYWxpemU= 9656
ICh7 9657
IDsKCg== 9658
IGdlbmVyYXRpb24= 9659
IGJpdHM= 9660
Y2xpcHNl 9661
IHVuZg== 9662
dXRvcnM= 9663
cGx0 9664
IGRlbHRh 9665
ZXN0cm95 9666
aXNpcw== 9667
PGJy 9668
IGxpbWl0YXRpb25z 9669
IGVuZGVk 9670
IE1hZA== 9671
aWxt 9672
VGhlc2U= 9673
MTg3 9674
IE1pbmlzdGVy 9675
IGNoYXJ0 9676
RnJhZ21lbnQ= 9677
IGluZGVwZW5kZW50 9678
WWVhcg== 9679
IGluc3Ry 9680
IHRhZ3M= 9681
QVZF 9682
IEFyY2g= 9683
c3RvcA== 9684
UHJvZ3Jlc3M= 9685
IG1p 9686
IGxlYXJuZWQ= 9687
R2U= 9688
IGhvdGVs 9689
MTUx 9690
U00= 9691
VFlQRQ== 9692
IGN5 9693
RVJTSU9O 9694
dW5hdGVseQ== 9695
bGltaXQ= 9696
c2Vs 9697
IG1vdmllcw== 9698
IHN0ZWVs 9699
b3o= 9700
Z2I= 9701
IENhbXA= 9702
c2l0ZQ== 9703
IExvZ2dlcg== 9704
UExF 9705
0L7QtA== 9706
LnJpZ2h0 9707
IENvcmU= 9708
IG1peGVk 9709
c3RlcA== 9710
IHB1dHM= 9711
c3VwZXI= 9712
Um91dGVy 9713
MTg2 9714
Lkh0dHA= 9715
MjIy 9716
bHlwaA== 9717
IENvbG9ycw== 9718
IGFuZHJvaWR4 9719
LnN0cg== 9720
IGlubm92 9721
IGRlY2s= 9722
Jz4K 9723
YXBlcnM= 9724
XSg= 9725
Y29udGludWU= 9726
c3BlYw== 9727
IFJvYWQ= 9728
QVNI 9729
aWxpYXI= 9730
IGNvbnRpbnVlcw== 9731
IGFwcG9pbnQ= 9732
ICMK 9733
IFZpcg== 9734
ID8+Ig== 9735
IGJpbg== 9736
fSIs 9737
Z29pbmc= 9738
ZWFjaA== 9739
QkQ= 9740
MTg1 9741
IEFjY2Vzcw== 9742
RG9j 9743
IE1hbmFnZW1lbnQ= 9744
QkVS 9745
YXNrZXQ= 9746
LmdldEluc3RhbmNl 9747
MTI5 9748
IGVzdGFibGlzaGVk 9749
c29ja2V0 9750
SU5T 9751
CXZpcnR1YWw= 9752
CXJlc3VsdA== 9753
UkVBRA== 9754
X2hlaWdodA== 9755
MTUy 9756
IEZvbnQ= 9757
ICgpOwo= 9758
X2h0bWw= 9759
IG5laWdoYm9y 9760
bG9y 9761
IGdhdGhlcg== 9762
IH0pCgo= 9763
IGlkZW50aXR5 9764
IGZhYg== 9765
cGFkZGluZw== 9766
IFJvdXRl 9767
RW51bWVyYWJsZQ== 9768
w7Q= 9769
IGZvcmNlZA== 9770
L2pxdWVyeQ== 9771
LgoKCgoKCg== 9772
cmVzZW50cw== 9773
X2xlZnQ= 9774
LlBhcmFt 9775
CXRocm93 9776
IEhhbQ== 9777
IGV2ZW50dWFsbHk= 9778
YWNlcg== 9779
cHVi 9780
IHRyYQ== 9781
dW5pcXVl 9782
ZGVs 9783
IEZsb3JpZGE= 9784
IENsZWFu 9785
eGE= 9786
IMK3 9787
IHZhbGlkYXRl 9788
VmlzdWFs 9789
RXhwcmVzc2lvbg== 9790
X2Z1bmM= 9791
bWVtYmVy 9792
CWg= 9793
dHJs 9794
MTM2 9795
CUc= 9796
bmFwc2hvdA== 9797
IFByb3BUeXBlcw== 9798
dmlu 9799
MTUz 9800
XSkKCg== 9801
b3ds 9802
aWZpZXM= 9803
ICQoJy4= 9804
IENvbnRleHQ= 9805
IFRvYXN0 9806
LktleQ== 9807
IG9mZmljZXJz 9808
L24= 9809
c24= 9810
dW5kZWZpbmVk 9811
Lml0ZW1z 9812
dXRvdw== 9813
YW1hZ2U= 9814
IGFjY291bnRz 9815
b29raWU= 9816
U2VjdGlvbg== 9817
aWNpYW5z 9818
IGFkdmlz 9819
KGlz 9820
Wzos 9821
IEZyYW5jZQ== 9822
RnVuYw== 9823
aWNpb3Vz 9824
IHRvaw== 9825
Q2hhbm5lbA== 9826
IEFE 9827
X05VTQ== 9828
IHRpbWVvdXQ= 9829
bGVtbWE= 9830
cmVtZQ== 9831
dWo= 9832
LkFs 9833
dWNsZWFy 9834
KG9z 9835
KCI8 9836
Wwo= 9837
ZmV0Y2g= 9838
IGJhbA== 9839
IGd1aWQ= 9840
LWFsaWdu 9841
IFdyaXRl 9842
IE9uY2U= 9843
dXRvd2lyZWQ= 9844
T0RVTEU= 9845
IHBpdGNo 9846
Q0Y= 9847
Ynl0ZXM= 9848
IENvbW1pc3Npb24= 9849
IGluY3JlZA== 9850
UEVS 9851
X3Jlc3BvbnNl 9852
IExvcw== 9853
cGFyc2Vy 9854
IGFzc3VtZQ== 9855
LlJlcXVlc3Q= 9856
IFRva2Vu 9857
X3Bvc2l0aW9u 9858
IG5vbQ== 9859
LXRlcm0= 9860
IHJlbWFpbmluZw== 9861
aW9zdHJlYW0= 9862
IHBpZWNlcw== 9863
YXB5 9864
IExlc3M= 9865
cmFuZ2U= 9866
dW1ibg== 9867
cHJpc2U= 9868
X29wdGlvbg== 9869
MjMw 9870
SW1wbA== 9871
a3dhcmdz 9872
IGJ1c2luZXNzZXM= 9873
QWxlcnQ= 9874
IHBhcnRpZXM= 9875
IENvbnRhaW5lcg== 9876
IFByaXZhdGU= 9877
IFBsYW4= 9878
IHJlZ2lzdGVyZWQ= 9879
IGpvdXI= 9880
YWNrZXI= 9881
0LXQvdC4 9882
Lz4= 9883
Y2hhdA== 9884
c2VjdA== 9885
IGNyZWF0aW9u 9886
b2x1dGVseQ== 9887
IGluc3RhbnQ= 9888
IGRlbGl2ZXJ5 9889
aWNrZW4= 9890
eWVz 9891
MTYz 9892
IEZyYW5j 9893
Ymxpbmc= 9894
ZW5kYQ== 9895
Wyg= 9896
X3Jhbmdl 9897
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 9898
IHNjaGVkdWxl 9899
Q29ubg== 9900
IHRoYW5r 9901
eGQ= 9902
IGhvb2s= 9903
IGRvY3VtZW50YXRpb24= 9904
UGFyYW1ldGVycw== 9905
SGVsbG8= 9906
dnQ= 9907
IGFydGljbGVz 9908
IHdlc3Q= 9909
ZGVmaW5lZA== 9910
LnNlbGVjdA== 9911
b2tlbnM= 9912
IFZBTA== 9913
LmZpbGU= 9914
cmVzZXQ= 9915
IG15cw== 9916
IE1B 9917
XSks 9918
IGNpdGllcw== 9919
cmVsYXRlZA== 9920
5Zs= 9921
IGFwcGVhcmVk 9922
IHdpZA== 9923
LnBhbmVs 9924
IElucw== 9925
LmVudGl0eQ== 9926
IGRlY3Jl 9927
IExvdQ== 9928
KHRpbWU= 9929
IFRoYW5r 9930
LmNyZWF0ZUVsZW1lbnQ= 9931
IG1lbnRpb25lZA== 9932
b3VuY2U= 9933
IFRyeQ== 9934
IFdhbGw= 9935
L2ltYWdlcw== 9936
IE1lbnU= 9937
Jw0K 9938
IEVy 9939
IGNyaXRpYw== 9940
IFllYXI= 9941
KHBhcmFt 9942
IGZsbw== 9943
Tk4= 9944
b290ZXI= 9945
IF07Cg== 9946
IEFmZg== 9947
ImdpdGh1Yg== 9948
cm9vbXM= 9949
IGh5cA== 9950
Z2xvYmFs 9951
IGF2ZWM= 9952
5pyI 9953
IGNvbXBsZXRpb24= 9954
IGNvbmQ= 9955
b255bW91cw== 9956
KHRlbXA= 9957
IHN0YXJz 9958
IHJlbGV2YW50 9959
IGNvdmVyZWQ= 9960
IGVsaW0= 9961
X3R5cGVz 9962
KGJvb2w= 9963
IHR1 9964
X2V4aXN0cw== 9965
IHNlY3VyZQ== 9966
IHN0b3JlZA== 9967
XS8= 9968
eEY= 9969
IENvbnRyb2xsZXI= 9970
IG1pZ3I= 9971
TUk= 9972
IERlbg== 9973
IGFubnVhbA== 9974
VUlM 9975
LWFuZA== 9976
IGNyaW1l 9977
YmVs 9978
IGtpdGNoZW4= 9979
QGc= 9980
X3Bo 9981
b3VybmFtZW50 9982
IFNvY2lhbA== 9983
IFNwZWNpYWw= 9984
bG9nZ2Vy 9985
IHRhaWw= 9986
IHVua25vd24= 9987
ZGVk 9988
IGFwcHJlYw== 9989
KGRi 9990
Y2Y= 9991
MTU1 9992
IGFzc2lnbg== 9993
LW91dA== 9994
IE1vbnQ= 9995
ZHA= 9996
d2lkZ2V0 9997
IHN0b25l 9998
LXByaW1hcnk= 9999
LmdyaWQ= 10000
UmVzdWx0cw== 10001
YXp6 10002
IGRhdWdodGVy 10003
IGN1cnI= 10004
MTc1 10005
IGxpbg== 10006
IHNvdXRo 10007
Zm9ybXM= 10008
IE9VVA== 10009
bGV0dGU= 10010
YWtz 10011
aWd1cmU= 10012
IEVV 10013
dmFyaWFibGU= 10014
IGJyaWVm 10015
IFNjb3R0 10016
IGNvbmZlcmVuY2U= 10017
YW5kYQ== 10018
X2xvY2s= 10019
b3JhbA== 10020
IGVpbmU= 10021
T1JT 10022
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw== 10023
ZXNzbw== 10024
IHJpcw== 10025
IGdlbmRlcg== 10026
ZXN0aWM= 10027
TGljZW5zZQ== 10028
KG91dA== 10029
IG1z 10030
U2Vl 10031
IHdpbGxpbmc= 10032
YXpl 10033
IHNwb3J0cw== 10034
IHllcw== 10035
bHU= 10036
IHB1cnM= 10037
L2phdmFzY3JpcHQ= 10038
LXBybw== 10039
bmF2YmFy 10040
X3Byb2R1Y3Q= 10041
L2Jvb3RzdHJhcA== 10042
IGRyaXZpbmc= 10043
IMQ= 10044
IHByb3Bvcw== 10045
dWx0aXA= 10046
dXBsaWM= 10047
LmVtYWls 10048
IGFwcHJveA== 10049
KGNs 10050
IHdlYXI= 10051
IHJlcGx5 10052
YXNzZXQ= 10053
IGljZQ== 10054
IHR4 10055
a3I= 10056
IEdlcm1hbnk= 10057
IEdlb3JnZQ== 10058
IGNi 10059
CWVycg== 10060
TW92ZQ== 10061
IHBvbHk= 10062
dm9pY2U= 10063
fSI= 10064
IGFuaW1hbA== 10065
QXY= 10066
IExvY2F0aW9u 10067
IG5hdGl2ZQ== 10068
XVsi 10069
PGRvdWJsZQ== 10070
IG1haXM= 10071
LGludA== 10072
IHByZXBhcg== 10073
IGludGVydmFs 10074
cGxlbWVudGF0aW9u 10075
X0VSUg== 10076
IGJ1Zw== 10077
PiI= 10078
c3RhdA== 10079
IH0sDQo= 10080
PHNwYW4= 10081
IGZhaXRo 10082
IHJvbQ== 10083
cHJldg== 10084
IEVsZWN0 10085
RmluZA== 10086
IGdvZA== 10087
b3Rvcg== 10088
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 10089
b3JpZ2luYWw= 10090
Q3Bw 10091
IFNlbmF0ZQ== 10092
IHBvc2l0aW9ucw== 10093
IHdlYXBvbnM= 10094
IGNvZmY= 10095
IHB1cnBvc2Vz 10096
cG9s 10097
IGltcHJlc3M= 10098
IGFuaW1hbHM= 10099
LkVudGl0eQ== 10100
KG5w 10101
IG11cmRlcg== 10102
IGBg 10103
ZmxhZw== 10104
IHNvbHV0aW9ucw== 10105
IEFjdGl2ZQ== 10106
IGJyaWdodA== 10107
LmRhdGU= 10108
IHNpdHU= 10109
77yI 10110
LklE 10111
IHNpZQ== 10112
KSwNCg== 10113
YWt0 10114
U3BhY2U= 10115
LmRhdA== 10116
LmluZGV4T2Y= 10117
aGFu 10118
YXppbmU= 10119
IFpl 10120
IGNyYXNo 10121
KC8= 10122
Pj0= 10123
0LE= 10124
MTM5 10125
aXZh 10126
LkF1dG9TaXpl 10127
IExhdA== 10128
X2V4dA== 10129
SW5pdGlhbGl6ZQ== 10130
LnJlZ2lzdGVy 10131
MTU2 10132
T1BZ 10133
IHJldmVyc2U= 10134
X2Rpcw== 10135
J11b 10136
IHByb21wdA== 10137
b250bw== 10138
IEpvdXJuYWw= 10139
cm91dGVy 10140
IG15c3FsaQ== 10141
I2Vsc2U= 10142
KSI= 10143
LXhz 10144
bGV0cw== 10145
cGhhbg== 10146
LkxF 10147
MTM3 10148
V2lsbA== 10149
IGFmZm9yZA== 10150
IHNraWxs 10151
LXRvZ2dsZQ== 10152
TkM= 10153
QmluZA== 10154
VFM= 10155
SnVzdA== 10156
aXRlcmFs 10157
WVA= 10158
CXVuc2lnbmVk 10159
IHdpbmQ= 10160
MTQ5 10161
KSk6Cg== 10162
IHdhcm5pbmc= 10163
IFdhdGVy 10164
IGRyYWZ0 10165
IGNt 10166
IHNhbQ== 10167
IGhvbGRpbmc= 10168
emlw 10169
IFNjaWVuY2U= 10170
IHN1cHBvc2Vk 10171
R2Vu 10172
IGRpZXQ= 10173
PGg= 10174
IFBhc3M= 10175
dmk= 10176
IGh1c2JhbmQ= 10177
77+977+9 10178
bm90ZQ== 10179
IEFib3V0 10180
IEluc3RpdHV0ZQ== 10181
IGNsaW1hdGU= 10182
LkZvcm1hdA== 10183
IG51dA== 10184
ZXN0ZWQ= 10185
IGFwcGFyZW50 10186
IGhvbGRz 10187
Zmk= 10188
bmV3cw== 10189
Q00= 10190
dmlkZW8= 10191
Jzon 10192
RElUSU9O 10193
cGluZw== 10194
IHNlbmlvcg== 10195
d2E= 10196
LS0+Cg== 10197
X2RlZmF1bHQ= 10198
IERhdGFiYXNl 10199
cmVw 10200
RVNT 10201
bmVyZ3k= 10202
LkZpbmQ= 10203
X21hc2s= 10204
IHJpc2U= 10205
IGtlcm5lbA== 10206
Ojok 10207
LlE= 10208
IG9mZmVyaW5n 10209
ZGVjbA== 10210
IENT 10211
IGxpc3RlZA== 10212
IG1vc3RseQ== 10213
ZW5nZXI= 10214
IGJsb2Nrcw== 10215
b2xv 10216
IGdvdmVybmluZw== 10217
XEY= 10218
IGNvbmNlbnQ= 10219
LmdldFRleHQ= 10220
IG1i 10221
IG9jY3VycmVk 10222
IGNoYW5naW5n 10223
U2NlbmU= 10224
X0NPREU= 10225
QmVo 10226
IlRoZQ== 10227
IHRpbGU= 10228
IEFzc29jaWF0aW9u 10229
CVA= 10230
YWx0eQ== 10231
X2Fk 10232
b2RpZXM= 10233
aWF0ZWQ= 10234
IHByZXBhcmVk 10235
cG9zc2libGU= 10236
IG1vcnQ= 10237
VEVTVA== 10238
MTQy 10239
IGlnbm9yZQ== 10240
IGNhbGM= 10241
IHJz 10242
IGFzc2VydEVxdWFscw== 10243
IHN6 10244
IFRISVM= 10245
LiIK 10246
IGNhbnZhcw== 10247
amF2YQ== 10248
IGR1dA== 10249
VkFMSUQ= 10250
LnNxbA== 10251
LmlucHV0 10252
IGF1eA== 10253
U3Vw 10254
IGFydGlzdA== 10255
VmVj 10256
X1RJTUU= 10257
LnN0cmluZ2lmeQ== 10258
ZXR3ZWVu 10259
IENhdGVnb3J5 10260
IFst 10261
IERldkV4cHJlc3M= 10262
IEp1bA== 10263
IHJpbmc= 10264
LmVk 10265
WVk= 10266
TGV0 10267
VGV4dEZpZWxk 10268
IGZsYXQ= 10269
X3ByaW50 10270
IE9USEVS 10271
YWRpYW4= 10272
IGNoZWNrZWQ= 10273
ZWxl 10274
QWxpZ24= 10275
c3RhbmRpbmc= 10276
IFtdLA== 10277
IGxhYg== 10278
dWNreQ== 10279
IENocmlzdG1hcw== 10280
KGltYWdl 10281
Lm1vZHVsZQ== 10282
IGxvdHM= 10283
IHNsaWdodGx5 10284
KGZpbmFs 10285
ZXJnZQ== 10286
6L8= 10287
MTQ3 10288
IFBvbGljZQ== 10289
MTQz 10290
IFJpZ2h0 10291
IGF3YXJk 10292
IE9T 10293
IHt9Cgo= 10294
IHB0cg== 10295
b3Zlcw== 10296
aWNhdGVk 10297
0LXQvA== 10298
IG1hbmFnZQ== 10299
b2xpZGF5 10300
QW1vdW50 10301
b29sU3RyaXA= 10302
dGJvZHk= 10303
TmF2 10304
d3JhcA== 10305
QkI= 10306
IHdhdGNoaW5n 10307
YXJpb3M= 10308
IG9wdGlvbmFs 10309
X0s= 10310
IExpY2Vuc2Vk 10311
Lk1hcA== 10312
VGltZXI= 10313
IEFQ 10314
IFJldg== 10315
KG8= 10316
LGM= 10317
dW1pbg== 10318
ZXRhaWxlZA== 10319
IEh5 10320
IGJsYW5r 10321
YWdnZXI= 10322
IFNlbGY= 10323
KClb 10324
Lm1ha2U= 10325
ZWFybg== 10326
Y2hhbm5lbA== 10327
PHByZQ== 10328
YmxlbQ== 10329
X3Bhc3N3b3Jk 10330
X3Nw 10331
aWNpbmc= 10332
ZXo= 10333
IHRoZW9yeQ== 10334
IFRlcg== 10335
MTg0 10336
LG4= 10337
bG9nbw== 10338
IEhUVFA= 10339
KCkpKQ== 10340
LmhhbmRsZQ== 10341
PjsK 10342
V29ybGQ= 10343
IHB5dGhvbg== 10344
IGxpZg== 10345
IHRyYXY= 10346
IGNvbnZlbg== 10347
Y29tcGFueQ== 10348
IENsdWI= 10349
MTM4 10350
VmVy 10351
QnRu 10352
IHpvbmU= 10353
cHJvZHVjdHM= 10354
IEVkdWM= 10355
IHZlcmlmeQ== 10356
IE1pbA== 10357
b25v 10358
XSk7Cgo= 10359
RU5DRQ== 10360
IHBhY2tldA== 10361
IGNlcg== 10362
IGVudW1lcg== 10363
IHBhcnM= 10364
Zm9ybWVk 10365
IG9jY3Vw 10366
dHJl 10367
IGV4ZXJjaXNl 10368
RGF5 10369
X3N1bQ== 10370
IGFza2luZw== 10371
YXB0aW9u 10372
IG9yZGVycw== 10373
IHNwZW5kaW5n 10374
IEVSUg== 10375
LkRpcw== 10376
IFV0aWw= 10377
4oCcSQ== 10378
XCc= 10379
Pyk= 10380
Lz4K 10381
IGVtb3Q= 10382
IGluZmx1ZW5jZQ== 10383
IEFmcmljYQ== 10384
YXR0ZXJz 10385
2YU= 10386
LnNlc3Npb24= 10387
IGNoaWVm 10388
CQkJCQkJCQkJCQk= 10389
IHRvbQ== 10390
Y2x1ZGVk 10391
c2VyaWFs 10392
X2hhbmRsZXI= 10393
LlR5cGU= 10394
YXBlZA== 10395
IHBvbGljaWVz 10396
LWV4 10397
LXRy 10398
Ymxhbms= 10399
bWVyY2U= 10400
IGNvdmVyYWdl 10401
IHJj 10402
X21hdHJpeA== 10403
X2JveA== 10404
IGNoYXJnZXM= 10405
IEJvc3Rvbg== 10406
UGU= 10407
IGNpcmN1bQ== 10408
IGZpbGxlZA== 10409
MTQ4 10410
IG5vcnRo 10411
aWN0dXJlQm94 10412
CXJlcw== 10413
6K4= 10414
IHRlcm1pbg== 10415
IFvigKY= 10416
SVJFQ1Q= 10417
IGJlcg== 10418
ICIuLi8uLi8= 10419
cmV0Y2g= 10420
LmNvZGU= 10421
X2NvbA== 10422
IEdvdmVybm1lbnQ= 10423
IGFyZ3Y= 10424
IExvcmQ= 10425
YXNp 10426
RXhlYw== 10427
CWxldA== 10428
dmVydGlz 10429
IGRpc2N1c3Npb24= 10430
ZW5hbmNl 10431
b3V0dWJl 10432
dHlwZW9m 10433
IHNlcnZlZA== 10434
IFB1dA== 10435
CXg= 10436
IHN3ZWV0 10437
QmVmb3Jl 10438
YXRlZ3k= 10439
Lm9m 10440
IE1hdGVyaWFs 10441
U29ydA== 10442
T05U 10443
aWdpdGFs 10444
V2h5 10445
IHN1c3Q= 10446
IOc= 10447
YWJldA== 10448
IHNlZ21lbnQ= 10449
IFtdLAo= 10450
IE11c2xpbQ== 10451
IGZpbmRWaWV3QnlJZA== 10452
Y3V0 10453
X1RFWFQ= 10454
IE1hcnk= 10455
IGxvdmVk 10456
IGxpZQ== 10457
IEpP 10458
IGlzc2V0 10459
bW9udGg= 10460
IHByaW1l 10461
dGk= 10462
IENhcm9s 10463
VXNl 10464
MTQ2 10465
IFBvcA== 10466
IFNhdmU= 10467
SW50ZXJ2YWw= 10468
ZXhlY3V0ZQ== 10469
ZHk= 10470
IElyYW4= 10471
X2NvbnQ= 10472
CVQ= 10473
IHBoYXNl 10474
Y2hlY2tib3g= 10475
d2Vlaw== 10476
IGhpZGU= 10477
IHRpbA== 10478
IGp1 10479
Q3VzdG9t 10480
YnVyZw== 10481
L00= 10482
VE9O 10483
IHF1YW50 10484
IHJ1Yg== 10485
aXhlbHM= 10486
IGluc3RhbGxlZA== 10487
IGR1bXA= 10488
IHByb3Blcmx5 10489
KExpc3Q= 10490
IGRlY2lkZQ== 10491
YXBwbHk= 10492
SGFz 10493
IGtlZXBpbmc= 10494
IGNpdGl6ZW5z 10495
IGpvaW50 10496
cG9vbA== 10497
U29ja2V0 10498
X29w 10499
IHdlYXBvbg== 10500
Z25vcmU= 10501
IEV4ZWM= 10502
b3R0ZW4= 10503
IE1T 10504
ICgt 10505
IFJldmlldw== 10506
IGV4YW1wbGVz 10507
IHRpZ2h0 10508
ISg= 10509
RFA= 10510
IE1lc3NhZ2VCb3g= 10511
IHBob3RvZ3JhcGg= 10512
MTY0 10513
VVJJ 10514
w6l0 10515
bG93 10516
IEdyYW5k 10517
LnBlcnNpc3RlbmNl 10518
IG1haW50YWlu 10519
IG51bXM= 10520
IHppcA== 10521
aWFscw== 10522
IEdldHM= 10523
cGVn 10524
IEJ1ZmZlcg== 10525
fn5+fg== 10526
cmFzdHJ1Y3R1cmU= 10527
IFBM 10528
dWVu 10529
b2JieQ== 10530
c2l6ZW9m 10531
IHBpYw== 10532
IHNlZWQ= 10533
IGV4cGVyaWVuY2Vk 10534
IG9kZA== 10535
IGtpY2s= 10536
IHByb2NlZHVyZQ== 10537
YXZpZ2F0b3I= 10538
LW9u 10539
LGo= 10540
IEFsdGhvdWdo 10541
IHVzZXJJZA== 10542
YWNjZXB0 10543
Qmx1ZQ== 10544
SUNvbG9y 10545
bGF5ZXI= 10546
YXZhaWxhYmxl 10547
IGVuZHM= 10548
LnRhYmxl 10549
IGRhdGFzZXQ= 10550
YnVz 10551
IGV4cGxhaW4= 10552
KHBybw== 10553
IENvbW1pdHRlZQ== 10554
IG5vdGVk 10555
XToK 10556
RGlt 10557
c3RkaW8= 10558
MTU0 10559
LiIsCg== 10560
X3NvdXJjZQ== 10561
MTgx 10562
IFdlZWs= 10563
IEVkZ2U= 10564
IG9wZXJhdGluZw== 10565
IGVzdGU= 10566
aXBs 10567
MzMw 10568
YWdpbmF0aW9u 10569
IHByb2NlZWQ= 10570
IGFuaW1hdGlvbg== 10571
Lk1vZGVscw== 10572
IFdhdGNo 10573
aWF0 10574
IG9wcG9u 10575
L0E= 10576
UmVwb3J0 10577
IHNvdW5kcw== 10578
X2J1Zg== 10579
SUVMRA== 10580
IGJ1bmQ= 10581
CWdldA== 10582
LnBy 10583
KHRtcA== 10584
IGtpZA== 10585
PgoKCg== 10586
IHlhbmc= 10587
Tm90Rm91bmQ= 10588
0YY= 10589
bWF0aA== 10590
QGdtYWls 10591
IExJTUlU 10592
cmVkaWVudHM= 10593
IHZlbnQ= 10594
YXZpZ2F0ZQ== 10595
TG9vaw== 10596
IHJlbGlnaW91cw== 10597
IHJhbmQ= 10598
cmlv 10599
KEdM 10600
X2lw 10601
dWFu 10602
aWNpZW5jeQ== 10603
IENoYW5nZQ== 10604
Pg0KDQo= 10605
IEVudGl0eQ== 10606
IHJlbmNvbnRyZQ== 10607
IFJldA== 10608
cGxhbg== 10609
w6lu 10610
Qk9PTA== 10611
dXJpZXM= 10612
dHJhaW4= 10613
RGVmaW5pdGlvbg== 10614
PT09PT09PT09PT09 10615
eno= 10616
NDUw 10617
QW5pbWF0aW9u 10618
IE9L 10619
X21lbnU= 10620
LmJs 10621
X3Njb3Jl 10622
IGFjYWQ= 10623
KFN5c3RlbQ== 10624
IHJlZnJlc2g= 10625
Jz0+JA== 10626
LkdyYXBoaWNz 10627
YW1lbnRv 10628
cGlk 10629
dGM= 10630
IHRpcHM= 10631
IGhvbWVz 10632
IGZ1ZWw= 10633
4pY= 10634
X2hlbHBlcg== 10635
ICANCg== 10636
IFJvb20= 10637
LkNsb3Nl 10638
X2F0dHI= 10639
IE1vdW50 10640
IEV2 10641
YXJzZXI= 10642
X3RvcA== 10643
ZWFo 10644
IERlbGV0ZQ== 10645
44CN 10646
dWtl 10647
IHVzYWdl 10648
YXJpYQ== 10649
X2Rldg== 10650
IHRleHR1cmU= 10651
IGNvbnZlcnNhdGlvbg== 10652
ZXBlcg== 10653
QmVhbg== 10654
ZG9uZQ== 10655
bm9uYXRvbWlj 10656
IFNlY29uZA== 10657
IHNob290aW5n 10658
X3ByZQ== 10659
Q29tcG9uZW50cw== 10660
IF0KCg== 10661
X18s 10662
c3RpdHV0aW9u 10663
LkNoYXI= 10664
PigpOwoK 10665
IHByZXNlbnRlZA== 10666
IHdh 10667
b2tlcg== 10668
LQoK 10669
aW5lcg== 10670
IGJlY29taW5n 10671
IGluY2lkZW50 10672
QXR0 10673
MTYy 10674
IHJldmVhbGVk 10675
Zm9yYw== 10676
IGJvb3Q= 10677
LnBhZ2U= 10678
RW51bWVyYXRvcg== 10679
MTY1 10680
Xy0+ 10681
UGhvdG8= 10682
IHNwcmluZw== 10683
LiIs 10684
IERpY3Rpb25hcnk= 10685
QkpFQ1Q= 10686
IGxvY2F0aW9ucw== 10687
IHNhbXBsZXM= 10688
SW5wdXRTdHJlYW0= 10689
IEJyb3du 10690
IHN0YXRz 10691
cXVhbGl0eQ== 10692
0YU= 10693
LWRpcw== 10694
IGhlbHBpbmc= 10695
IHBlZA== 10696
MjI0 10697
KHNl 10698
IFdobw== 10699
YWxpYW4= 10700
aW50ZXJuYWw= 10701
IGZ0 10702
PigpLg== 10703
LT57 10704
IG1pbmU= 10705
IHNlY3Rvcg== 10706
IGdybw== 10707
IG9wcG9ydHVuaXRpZXM= 10708
IMO8 10709
IG1w 10710
IGFsbGVnZWQ= 10711
IGRvdWJ0 10712
TW91c2U= 10713
QWJvdXQ= 10714
X3BhcnQ= 10715
IGNoYWly 10716
IHN0b3BwZWQ= 10717
MTYx 10718
bG9vcA== 10719
ZW50aXRpZXM= 10720
IGFwcHM= 10721
YW5zaW9u 10722
IG1lbnRhbA== 10723
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 10724
RlI= 10725
IGRlZmVuZA== 10726
Y2FyZQ== 10727
IGlkZWFs 10728
L2FwaQ== 10729
dXJmYWNl 10730
MDEx 10731
IGVsZQ== 10732
dWxhdG9y 10733
IFJpZ2h0cw== 10734
YW5ndWFnZXM= 10735
IGZ1bmRz 10736
IGFkYXB0 10737
QXR0cmlidXRlcw== 10738
IGRlcGxveQ== 10739
b3B0cw== 10740
IHZhbGlkYXRpb24= 10741
IGNvbmNlcm5z 10742
dWNl 10743
Lm51bQ== 10744
dWx0dXJl 10745
aWxh 10746
IGN1cA== 10747
IHB1cmU= 10748
LkZvcmU= 10749
MTgz 10750
IEhhc2hNYXA= 10751
LnZhbHVlT2Y= 10752
YXNt 10753
TU8= 10754
IGNz 10755
IHN0b3Jlcw== 10756
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 10757
IGNvbW11bmljYXRpb24= 10758
bWVt 10759
LkV2ZW50SGFuZGxlcg== 10760
LlN0YXR1cw== 10761
X3JpZ2h0 10762
LnNldE9u 10763
U2hlZXQ= 10764
IGlkZW50aWZ5 10765
ZW5lcmF0ZWQ= 10766
b3JkZXJlZA== 10767
ICJb 10768
IHN3ZQ== 10769
Q29uZGl0aW9u 10770
IEFjY29yZGluZw== 10771
IHByZXBhcmU= 10772
IHJvYg== 10773
UG9vbA== 10774
IHNwb3J0 10775
cnY= 10776
IFJvdXRlcg== 10777
IGFsdGVybmF0aXZl 10778
KFtd 10779
IENoaWNhZ28= 10780
aXBoZXI= 10781
aXNjaGU= 10782
IERpcmVjdG9y 10783
a2w= 10784
IFdpbA== 10785
a2V5cw== 10786
IG15c3Fs 10787
IHdlbGNvbWU= 10788
a2luZw== 10789
IE1hbmFnZXI= 10790
IGNhdWdodA== 10791
KX0K 10792
U2NvcmU= 10793
X1BS 10794
IHN1cnZleQ== 10795
aGFi 10796
SGVhZGVycw== 10797
QURFUg== 10798
IGRlY29y 10799
IHR1cm5z 10800
IHJhZGl1cw== 10801
ZXJydXB0 10802
Q29y 10803
IG1lbA== 10804
IGludHI= 10805
KHE= 10806
IEFD 10807
YW1vcw== 10808
TUFY 10809
IEdyaWQ= 10810
IEplc3Vz 10811
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 10812
LkRF 10813
IHRz 10814
IGxpbmtlZA== 10815
ZnJlZQ== 10816
IFF0 10817
IC8qKg0K 10818
IGZhc3Rlcg== 10819
Y3Ry 10820
X0o= 10821
RFQ= 10822
LkNoZWNr 10823
IGNvbWJpbmF0aW9u 10824
IGludGVuZGVk 10825
LXRoZQ== 10826
LXR5cGU= 10827
MTgy 10828
ZWN0b3Jz 10829
YW1p 10830
dXRpbmc= 10831
IHVtYQ== 10832
WE1M 10833
VUNU 10834
QXA= 10835
IFJhbmRvbQ== 10836
IHJhbg== 10837
LnNvcnQ= 10838
IHNvcnRlZA== 10839
LlVu 10840
NDAx 10841
X1BFUg== 10842
aXRvcnk= 10843
IHByaW9yaXR5 10844
IEdhbA== 10845
IE9sZA== 10846
aG90 10847
IERpc3BsYXk= 10848
KHN1Yg== 10849
X1RI 10850
X1k= 10851
IENhcmU= 10852
bG9hZGluZw== 10853
S2luZA== 10854
X2hhbmRsZQ== 10855
LCw= 10856
cmFzZQ== 10857
X3JlcGxhY2U= 10858
LmFkZEV2ZW50TGlzdGVuZXI= 10859
IFJU 10860
MTcy 10861
IGVudGVyZWQ= 10862
Z2Vycw== 10863
IGljaA== 10864
KHN0YXJ0 10865
MjA1 10866
L2FwcA== 10867
IGJyb3RoZXI= 10868
TWVtb3J5 10869
T3V0bGV0 10870
IHV0Zg== 10871
cHJlYw== 10872
IG5hdmlnYXRpb24= 10873
T1JL 10874
IGRzdA== 10875
RGV0YWls 10876
IGF1ZGllbmNl 10877
IGR1cg== 10878
IGNsdXN0ZXI= 10879
dW5jaGVk 10880
IF0s 10881
IGNvbWZvcnRhYmxl 10882
LnZhbHVlcw== 10883
IFRvdGFs 10884
IHNuYXA= 10885
IHN0YW5kYXJkcw== 10886
IHBlcmZvcm1lZA== 10887
aGFuZA== 10888
KCJA 10889
5a0= 10890
IHBoaWw= 10891
aWJy 10892
dHJpbQ== 10893
IGZvcmdldA== 10894
MTU3 10895
IGRvY3Rvcg== 10896
LlRleHRCb3g= 10897
Mzc3 10898
aWNvbnM= 10899
LHM= 10900
IE9w 10901
U20= 10902
U3RvcA== 10903
CUxpc3Q= 10904
CXU= 10905
Q29tbWVudA== 10906
X1ZFUlNJT04= 10907
Llh0cmE= 10908
UGVyc29u 10909
cmI= 10910
TE9C 10911
ICAgICAgICAgICAgICAgICAgICAK 10912
IENlbnRyYWw= 10913
Mjcw 10914
SUNL 10915
cmFx 10916
IHB1dHRpbmc= 10917
IG1k 10918
IExvdmU= 10919
UHJvZ3JhbQ== 10920
Qm9yZGVy 10921
b29y 10922
IGFsbG93aW5n 10923
YWZ0ZXI= 10924
IGVudHJpZXM= 10925
IE1heWJl 10926
XSku 10927
IFNob3J0 10928
KVw= 10929
Lm5vdw== 10930
ZnJpZW5k 10931
IHByZWZlcg== 10932
IEdQSU8= 10933
b3Npcw== 10934
IEdhbWVPYmplY3Q= 10935
IHNraXA= 10936
IGNvbXBldGl0aW9u 10937
X21hdGNo 10938
bGljYXRpb25z 10939
X0NPTlQ= 10940
Lmdyb3VwQm94 10941
IGFscw== 10942
NjY2 10943
Ildl 10944
X2Vx 10945
bGFu 10946
X3NlYXJjaA== 10947
IE11c2lj 10948
YXNpcw== 10949
IGJpbmQ= 10950
IElzbGFuZA== 10951
cnVt 10952
KEU= 10953
IHNlYXQ= 10954
VmlkZW8= 10955
IGFjaw== 10956
cmVlaw== 10957
PXsoKQ== 10958
IHJhdGluZw== 10959
IHJlc3RhdXJhbnQ= 10960
NDU2 10961
REVY 10962
KGJ1Zg== 10963
cHBpbmc= 10964
dWFsaXR5 10965
IGxlYWd1ZQ== 10966
MTc2 10967
IGZvY3VzZWQ= 10968
YXBvbg== 10969
JGRhdGE= 10970
Q0xVRA== 10971
Q0xVRElORw== 10972
IGFic29sdXRl 10973
KHF1ZXJ5 10974
IHRlbGxz 10975
QW5n 10976
IGNvbW11bml0aWVz 10977
IGhvbmVzdA== 10978
b2tpbmc= 10979
IGFwYXJ0 10980
YXJpdHk= 10981
LyQ= 10982
X21vZHVsZQ== 10983
IEVuYw== 10984
LmFu 10985
LkNvbmZpZw== 10986
Q3Jl 10987
IHNob2Nr 10988
IEFyYWI= 10989
SUVOVA== 10990
L3Jl 10991
IHJldHJpZQ== 10992
eWNsZXI= 10993
aXNh 10994
IE9yZ2Fu 10995
LmdyYXBo 10996
IO0= 10997
IEJBUw== 10998
RW51bQ== 10999
IHBvc3NpYmx5 11000
0YDQsNA= 11001
IEphcGFuZXNl 11002
IGNyYWZ0 11003
IFBsYWNl 11004
IHRhbGVudA== 11005
IGZ1bmRpbmc= 11006
IGNvbmZpcm1lZA== 11007
IGN5Y2xl 11008
L3g= 11009
R0U= 11010
IGhlYXJpbmc= 11011
IHBsYW50cw== 11012
IG1vdXRo 11013
cGFnZXM= 11014
b3JpYQ== 11015
IFJlbW92ZQ== 11016
X3RvdGFs 11017
IG9k 11018
b2xsYXBzZQ== 11019
ZG9vcg== 11020
IGJvdWdodA== 11021
IGFkZHI= 11022
QVJDSA== 11023
X2RpbQ== 11024
ZGRlbg== 11025
IGRlY2FkZXM= 11026
UkVRVUVTVA== 11027
IHZlcnNpb25z 11028
ZmlyZQ== 11029
MDA2 11030
IG1vdmVz 11031
ZmI= 11032
IGNvZmZlZQ== 11033
LmNvbm5lY3Q= 11034
IFJvdw== 11035
IHNjaGVtYQ== 11036
U2NvcGU= 11037
LVR5cGU= 11038
IGZpZ2h0aW5n 11039
IHJldGFpbA== 11040
IG1vZGlmaWVk 11041
VEY= 11042
RmlsZXM= 11043
bmll 11044
X2NvbW1hbmQ= 11045
c3RvbmU= 11046
INGC 11047
X3RocmVhZA== 11048
IGJvbmQ= 11049
IERldmVsb3BtZW50 11050
IHB0 11051
Rk9STQ== 11052
cGxldA== 11053
IGlkZW50aWZpZWQ= 11054
Y3Bw 11055
MjA2 11056
MjI1 11057
IGNvZGluZw== 11058
b2tlZA== 11059
IE1hc3Rlcg== 11060
SURUSA== 11061
IHJlc2lkZW50cw== 11062
cmVkaXQ= 11063
IFBob3Rv 11064
PS0= 11065
dW50ZQ== 11066
YXRldXI= 11067
MTU5 11068
X1NUQVRF 11069
IFNpbmc= 11070
IHNoZWV0 11071
LnZhbA== 11072
b3JzZQ== 11073
IGhlcnM= 11074
IGRldGVybWluZWQ= 11075
Q29tbW9u 11076
IHdlZA== 11077
X3F1ZXVl 11078
UEg= 11079
IEF0bA== 11080
Y3JlZA== 11081
L0xJQ0VOU0U= 11082
IG1lcw== 11083
IGFkdmFuY2Vk 11084
LmphdmE= 11085
LlNo 11086
R28= 11087
a2lsbA== 11088
ZnA= 11089
X3NldHRpbmdz 11090
IHBhbA== 11091
IHRydWNr 11092
IGNvbWJpbmVk 11093
ICIkew== 11094
IENvcnBvcg== 11095
IGpvaW5lZA== 11096
IEpvc2U= 11097
IEN1cA== 11098
dW5z 11099
ZXN0aXZhbA== 11100
bGV2aXNpb24= 11101
IGJyb2tlbg== 11102
IG1hcnJpYWdl 11103
IFdlc3Rlcm4= 11104
IHJlcHJlc2VudHM= 11105
IFRpdGxl 11106
IHNz 11107
LkFzcw== 11108
b25nb29zZQ== 11109
aWVudG8= 11110
PD4oKTsK 11111
IGFic29sdXRlbHk= 11112
IHNtb290aA== 11113
VEVSTg== 11114
IFVubGVzcw== 11115
V29yZA== 11116
IG1lcmdl 11117
aWdhbg== 11118
IFZvbA== 11119
IG5u 11120
LmdldElk 11121
INC3 11122
MTcx 11123
IHNleHk= 11124
IHNlZWtpbmc= 11125
U2luZ2xl 11126
LnRoaXM= 11127
MTc5 11128
IGtvbQ== 11129
Ym91bmQ= 11130
OyI= 11131
IGZvbnRTaXpl 11132
X2Rm 11133
IGluanVyeQ== 11134
KEg= 11135
IGlzc3VlZA== 11136
X0VORA== 11137
OnNlbGY= 11138
MDIw 11139
IHBhdGNo 11140
IGxlYXZlcw== 11141
IGFkb3B0 11142
RmlsZU5hbWU= 11143
44CQ 11144
IGV4ZWN1dGl2ZQ== 11145
IEJ5dGU= 11146
XSkpCg== 11147
IG51 11148
b3V0aW5n 11149
Y2x1ZGluZw== 11150
LVI= 11151
Lm9wdGlvbnM= 11152
IHN1YnN0YW50 11153
YXZheA== 11154
IEJVVA== 11155
IHRlY2huaWNhbA== 11156
IHR3aWNl 11157
IG3DoXM= 11158
IHVuaXZlcnM= 11159
eXI= 11160
IGRyYWc= 11161
IERD 11162
IHNlZA== 11163
IGJvdA== 11164
IFBhbA== 11165
IEhhbGw= 11166
Zm9yY2VtZW50 11167
IGF1Y2g= 11168
Lm1vZA== 11169
bm90YXRpb24= 11170
X2ZpbGVz 11171
LmxpbmU= 11172
X2ZsYWc= 11173
W25hbWU= 11174
IHJlc29sdXRpb24= 11175
IGJvdHQ= 11176
KCJb 11177
ZW5kZQ== 11178
KGFycg== 11179
RnJlZQ== 11180
KEAi 11181
IERpc3RyaWN0 11182
UEVD 11183
Oi0= 11184
UGlja2Vy 11185
IEpv 11186
ICAgICAK 11187
IFJpdmVy 11188
X3Jvd3M= 11189
IGhlbHBmdWw= 11190
IG1hc3NpdmU= 11191
LS0tCg== 11192
IG1lYXN1cmVz 11193
MDA3 11194
IFJ1bnRpbWU= 11195
IHdvcnJ5 11196
IFNwZWM= 11197
CUQ= 11198
44CR 11199
ICl7Cg== 11200
IHdvcnNl 11201
KGZpbGVuYW1l 11202
IGxheQ== 11203
IG1hZ2lj 11204
IFRoZWly 11205
b3Vs 11206
c3Ryb3k= 11207
IFdoZXJl 11208
Mjgw 11209
IHN1ZGRlbg== 11210
IGRlZmU= 11211
IGJpbmRpbmc= 11212
IGZsaWdodA== 11213
IE9uSW5pdA== 11214
IFdvbWVu 11215
IFBvbGljeQ== 11216
IGRydWdz 11217
aXNoaW5n 11218
KCcuLi8= 11219
IE1lbA== 11220
cGVhdA== 11221
dG9y 11222
IHByb3Bvc2Vk 11223
IHN0YXRlZA== 11224
X1JFUw== 11225
IGVhc3Q= 11226
MjEy 11227
IENPTkRJVElPTg== 11228
X2Rlc2M= 11229
IHdpbm5pbmc= 11230
Zm9saW8= 11231
TWFwcGVy 11232
IFBhbg== 11233
IEFuZ2U= 11234
LnNlcnZsZXQ= 11235
IGNvcGllcw== 11236
TE0= 11237
IHZt 11238
5Y0= 11239
IGRpY3Rpb25hcnk= 11240
U2Vn 11241
MTc3 11242
ZWxpbmVz 11243
IFNlbmQ= 11244
IGlyb24= 11245
IEZvcnQ= 11246
MTY2 11247
LmRvbWFpbg== 11248
IGRlYmF0ZQ== 11249
Tm90TnVsbA== 11250
ZXE= 11251
YWNoZXI= 11252
bGY= 11253
CWZtdA== 11254
IGxhd3k= 11255
MTc4 11256
xJ8= 11257
IE1lbg== 11258
IHRyaW0= 11259
KE5VTEw= 11260
ICEh 11261
IHBhZA== 11262
IGZvbGxvd3M= 11263
Il1bIg== 11264
cmVxdQ== 11265
IEVw 11266
LmdpdGh1Yg== 11267
KGltZw== 11268
ZXRv 11269
KCdc 11270
U2VydmljZXM= 11271
dW1ibmFpbA== 11272
X21haW4= 11273
cGxldGVk 11274
Zm9ydHVuYXRlbHk= 11275
IHdpbmRvd3M= 11276
IHBsYW5l 11277
IENvbm5lY3Rpb24= 11278
LmxvY2Fs 11279
dWFyZA== 11280
fVw= 11281
PT0i 11282
YW5kb24= 11283
IFJveQ== 11284
d2VzdA== 11285
MTU4 11286
aWdpbmFs 11287
ZW1pZXM= 11288
aXR6 11289
Jyk6Cg== 11290
IFBldGVy 11291
IHRvdWdo 11292
IHJlZHVjZWQ= 11293
IGNhbGN1bGF0ZQ== 11294
IHJhcGlk 11295
Y3VzdG9tZXI= 11296
IGVmZmljaWVudA== 11297
IG1lZGl1bQ== 11298
IGZlbGw= 11299
LnJlZg== 11300
IENhcw== 11301
IGZlZWRiYWNr 11302
U3BlZWQ= 11303
KG91dHB1dA== 11304
YWpl 11305
IGNhdGVnb3JpZXM= 11306
IGZlZQ== 11307
fTs= 11308
IGRlbGV0ZWQ= 11309
cmVo 11310
IHByb29m 11311
RGVzYw== 11312
QnVpbGQ= 11313
IHNpZGVz 11314
LkFycmF5TGlzdA== 11315
LSU= 11316
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 11317
2LE= 11318
Lm1hdGNo 11319
0LvQuA== 11320
IGZlZWxz 11321
IGFjaGlldmU= 11322
IGNsaW0= 11323
X09O 11324
IENE 11325
IHRlYWNoZXI= 11326
X2N1cnJlbnQ= 11327
Ym4= 11328
X1BM 11329
aXN0aW5n 11330
RW5hYmxl 11331
R0VO 11332
IHR2 11333
IHNvY2s= 11334
IHBsYXlz 11335
IGRpc2NvdW50 11336
IEtF 11337
IERlYnVn 11338
Rm9yZQ== 11339
IElyYXE= 11340
IGFwcGVhcmFuY2U= 11341
TW9u 11342
IHN0eWxlZA== 11343
IEh1bWFu 11344
aW90 11345
IEhpc3Rvcnk= 11346
IHNhYw== 11347
IENvbGxlY3Rpb24= 11348
IHJlY29tbWVuZGVk 11349
LlNlbGVjdGVk 11350
IG9yZ2FuaXphdGlvbnM= 11351
IGRpc2NvdmVyZWQ= 11352
Y29ob2w= 11353
YWRhcw== 11354
IFRob21hcw== 11355
TWF5 11356
IGNvbnNlcnY= 11357
IGRvbWlu 11358
IEZvbGxvdw== 11359
IFNlY3Rpb24= 11360
IFRoYW5rcw== 11361
VXNlcm5hbWU= 11362
IHJlY2lwZQ== 11363
IHdvbmRlcmZ1bA== 11364
LnNsZWVw 11365
X2lm 11366
CQoJCg== 11367
b3Jubw== 11368
IHJ1 11369
X3RhcmdldA== 11370
LiIi 11371
4KY= 11372
RXZlbnRBcmdz 11373
IGlucHV0cw== 11374
IGZpZg== 11375
IHZpc2lvbg== 11376
Y3k= 11377
IFNlcmllcw== 11378
KSgoKA== 11379
IHRyYWRpbmc= 11380
IG1hcmtlcg== 11381
QmVnaW4= 11382
IHR5cGljYWxseQ== 11383
IGNhdXNlcw== 11384
ZHJvcGRvd24= 11385
X0RFQlVH 11386
MjYw 11387
IGRldGVjdA== 11388
Y291bnRyeQ== 11389
ISIpOwo= 11390
CVI= 11391
YXBweQ== 11392
IGNyZWY= 11393
KCc8 11394
Ij0+ 11395
IExF 11396
cmVhZGVy 11397
IGFkbWluaXN0cg== 11398
w7U= 11399
dWNrZXQ= 11400
IGZhc2hpb24= 11401
LmNoYXI= 11402
aXphcg== 11403
IGRpc2FibGU= 11404
IHN1Yw== 11405
IExpdmU= 11406
aXNzdWU= 11407
IG1ldGFkYXRh 11408
ZmxhZ3M= 11409
IPCf 11410
IGNvbW1pdHRlZA== 11411
IHZh 11412
IHJvdWdo 11413
ICcnJwo= 11414
IGhpZ2hsaWdodA== 11415
X3ZhcnM= 11416
Vk8= 11417
IGVuY29kaW5n 11418
LVo= 11419
X3NpZ24= 11420
JCgiIw== 11421
IHJhaW4= 11422
cmVhdGVzdA== 11423
IEVORA== 11424
U2VsZWN0aW9u 11425
IGNhbmRpZGF0ZXM= 11426
IHNhdg== 11427
LkVtcHR5 11428
IGRlY2lzaW9ucw== 11429
IGNvbGxhYm9y 11430
cmlkZ2U= 11431
ZmVlZA== 11432
cmVzc2lvbg== 11433
IHBlcnNvbnM= 11434
Vk0= 11435
MDA4 11436
ZWdh 11437
X0JJVA== 11438
QWNjb3JkaW5n 11439
YWNrZWQ= 11440
IGRvbGxhcnM= 11441
X2xvc3M= 11442
IENvc3Q= 11443
fSIK 11444
Tm90aWZpY2F0aW9u 11445
IHByb3N0aXQ= 11446
IGF1dGhvcml0eQ== 11447
LnJlYw== 11448
IHNwb2tlcw== 11449
IFRvZGF5 11450
aXN0YW50 11451
IEhlYWQ= 11452
4oCdLg== 11453
ZXJ0YWlubWVudA== 11454
Y2Vhbg== 11455
Y3VsYXRl 11456
IHZlbg== 11457
SG93ZXZlcg== 11458
X2Fycg== 11459
IHRva2Vucw== 11460
R3JhcGg= 11461
IEp1ZA== 11462
IFZpcmdpbg== 11463
IFNlcmlhbA== 11464
dW5uaW5n 11465
TXV0YWJsZQ== 11466
YWdlcnM= 11467
LmNzdg== 11468
IGRldmVsb3Bpbmc= 11469
IGluc3RydWN0aW9ucw== 11470
IHByb21pc2U= 11471
IHJlcXVlc3RlZA== 11472
X2VuY29kZQ== 11473
LyI= 11474
IEljb24= 11475
dWlsdA== 11476
LWRheQ== 11477
IGludGVsbGlnZW5jZQ== 11478
LklT 11479
IE9ic2VydmFibGU= 11480
IEhhcmQ= 11481
Qm9vbA== 11482
MjEx 11483
aWRlbnRpYWw= 11484
LkFuY2hvcg== 11485
IHNlbGxpbmc= 11486
Q0k= 11487
QUdFUw== 11488
dGxl 11489
YnVy 11490
VUZGRVI= 11491
Ulk= 11492
IGJpZ2dlcg== 11493
IHJhdA== 11494
IGZhbW91cw== 11495
IHR5cGVuYW1l 11496
IGV4cGxhaW5lZA== 11497
fX0K 11498
IG51Y2xlYXI= 11499
LU4= 11500
IGNyaXNpcw== 11501
IEVudGVy 11502
IGFuc3dlcnM= 11503
LyR7 11504
L3Bs 11505
IHNlcXU= 11506
X25leHQ= 11507
bWFzaw== 11508
IHN0YW5kaW5n 11509
IHBsZW50eQ== 11510
IENyb3Nz 11511
CXJldA== 11512
ZHJv 11513
IENhc3Q= 11514
MTY3 11515
PXRydWU= 11516
IENocmlz 11517
aWNpbw== 11518
IE1pa2U= 11519
RGVjaW1hbA== 11520
YWRkQ29tcG9uZW50 11521
TGVu 11522
IGNvY2s= 11523
ICN7 11524
VVJO 11525
PHRy 11526
IGF1dGhvcml0aWVz 11527
UmVzb3VyY2Vz 11528
LUg= 11529
Qm90dG9t 11530
MDEy 11531
X3F1 11532
cHV0ZXI= 11533
ZXN0ZXJkYXk= 11534
RGlzcGF0Y2g= 11535
c2luY2U= 11536
IGZhbWlsaWFy 11537
LGk= 11538
VkM= 11539
IG1lbnQ= 11540
LEM= 11541
IGZyZWVkb20= 11542
IHJvdXRlcw== 11543
IEJ1eQ== 11544
IGNvbW1hbmRz 11545
IG1lc2g= 11546
L0M= 11547
IFNldHRpbmdz 11548
LXN0eWxl 11549
IHdpdG5lc3M= 11550
IGNsZQ== 11551
IHVuaW9u 11552
ZWZhdWx0 11553
YXJldA== 11554
IHRob3VnaHRz 11555
IC0tLS0= 11556
X3Byb2Nlc3M= 11557
X3Vz 11558
aW5nbHk= 11559
VUVT 11560
VG91Y2g= 11561
INC8 11562
X29wZW4= 11563
IFZlYw== 11564
IHJld2FyZA== 11565
LkNsaWNr 11566
Lzo= 11567
IG5pZQ== 11568
Q2hhbmdlcw== 11569
TW9udGg= 11570
77yf 11571
IGV4ZWN1dGlvbg== 11572
IGJlYWNo 11573
KEludGVnZXI= 11574
CWE= 11575
Lyc= 11576
LkZvbnRTdHlsZQ== 11577
IGFib3J0 11578
IFNpbmdsZQ== 11579
KGlzc2V0 11580
IGRw 11581
IH19PC8= 11582
IE1h 11583
MjE0 11584
LlJvd3M= 11585
IFBldA== 11586
JSk= 11587
cmFuZA== 11588
6YA= 11589
UnVsZQ== 11590
IGhlbA== 11591
MDIx 11592
UklURQ== 11593
IHF1aWV0 11594
IHJhdGlv 11595
IENPTkRJVElPTlM= 11596
b3NvcGg= 11597
IElM 11598
IGFkdmVudA== 11599
Y2Fw 11600
Ozwv 11601
IFVTQg== 11602
RHJpdmVy 11603
IG91cnM= 11604
IEpvaG5zb24= 11605
Lks= 11606
X2RlbGV0ZQ== 11607
LnE= 11608
CXN0cg== 11609
L2NvbW1vbg== 11610
CXN0cmluZw== 11611
IFBERg== 11612
YWN0cw== 11613
LkFjdGlvbg== 11614
IFF1ZXJ5 11615
LnJlc3BvbnNl 11616
IEdpcmw= 11617
IHByb2Nlc3Nlcw== 11618
PEludGVnZXI= 11619
aW1v 11620
IGFkZHM= 11621
IGVudGlyZWx5 11622
IHdhc2g= 11623
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 11624
IGFuaW1hdGVk 11625
IHByb2ZpdA== 11626
ZW5jaW5n 11627
L1M= 11628
IFN5bQ== 11629
IG1hbnVhbA== 11630
RG93bmxvYWQ= 11631
ICghJA== 11632
IG1vdGlvbg== 11633
d2VicGFjaw== 11634
LWJvdHRvbQ== 11635
IGdyYXR1aXQ= 11636
UEc= 11637
KDos 11638
IGVyYQ== 11639
IGhv 11640
IEppbQ== 11641
cXVpcg== 11642
IEJBU0lT 11643
w6Fu 11644
REVS 11645
IGV4cGVuc2l2ZQ== 11646
X2Nv 11647
Qm91bmRz 11648
V2VsbA== 11649
IERlbW9jcmF0aWM= 11650
IOKGkg== 11651
LlJlbQ== 11652
X1NZ 11653
bmFtZXM= 11654
IFZp 11655
IGlzaW5zdGFuY2U= 11656
XCI+ 11657
ICo9 11658
IFBT 11659
IGRhbmdlcm91cw== 11660
W3A= 11661
T01F 11662
T3RoZXI= 11663
IFN0cmluZ0J1aWxkZXI= 11664
UG9pbnRz 11665
aGVhZGluZw== 11666
IGN1cnJlbmN5 11667
IHBlcmNlbnRhZ2U= 11668
X0FQSQ== 11669
IGNsYXNzaWM= 11670
dGhlYWQ= 11671
IE1P 11672
RkU= 11673
SWR4 11674
YXdhaXQ= 11675
IMOo 11676
IGFjY2lkZW50 11677
IHZhcmlhbnQ= 11678
IG15c3Q= 11679
IExhbmQ= 11680
IEJyZQ== 11681
IGhhcm0= 11682
IEFjYw== 11683
IGNoYXJnZWQ= 11684
aW9uZXM= 11685
VmlzaWJpbGl0eQ== 11686
YXJyeQ== 11687
IExhbmd1YWdl 11688
IHdhbGtpbmc= 11689
Ii4KCg== 11690
aWZlcg== 11691
IGxlYWRlcnNoaXA= 11692
LkZyb20= 11693
eW5hbQ== 11694
IHRpbWVzdGFtcA== 11695
aXB0 11696
IEhhcw== 11697
UkVGRVI= 11698
IEl0cw== 11699
IGxpc3RlbmVy 11700
VVRF 11701
MjEz 11702
X2Rlc2NyaXB0aW9u 11703
IGV4cGVyaWVuY2Vz 11704
IGNyZWF0ZXM= 11705
UlM= 11706
Y2FydA== 11707
YmxhY2s= 11708
IGNob2ljZXM= 11709
d2Fy 11710
NzUw 11711
ICcnJw== 11712
IG9yZGVyZWQ= 11713
IGV2ZW5pbmc= 11714
IHBpbA== 11715
IHR1bg== 11716
IEJhZA== 11717
KGFwcA== 11718
cmFuZG9t 11719
IGV4cGxpY2l0 11720
IGFycml2ZWQ= 11721
IGZseQ== 11722
IGVjb25vbQ== 11723
LW1haWw= 11724
IGxpc3Rz 11725
IGFyY2hpdGVjdA== 11726
MjM0 11727
IFBheQ== 11728
IGRz 11729
IFNvbA== 11730
IHZlaGljbGVz 11731
SHo= 11732
LWNvbQ== 11733
IGtpbmc= 11734
X2VxdWFs 11735
IEhlbHA= 11736
IGFidXNl 11737
NDgw 11738
MTY5 11739
LS07Cg== 11740
IGV4dHI= 11741
IGNoZW1pY2Fs 11742
5L8= 11743
IG9yaWVudA== 11744
IGJyZWF0aA== 11745
IFNwYWNl 11746
KGVsZW1lbnQ= 11747
d2FpdA== 11748
REVE 11749
aWdtYQ== 11750
IGVudHI= 11751
IHNvYg== 11752
LW5hbWU= 11753
IGFmZmVjdGVk 11754
aWth 11755
IGNvYWw= 11756
X3dvcms= 11757
IGh1bmRyZWRz 11758
IHBvbGl0aWNz 11759
c3ViamVjdA== 11760
IGNvbnN1bWVy 11761
QU5HRQ== 11762
IHJlcGVhdGVk 11763
U2VuZA== 11764
ICNb 11765
IHByb3RvY29s 11766
IGxlYWRz 11767
dXNldW0= 11768
RXZlcnk= 11769
ODA4 11770
MTc0 11771
SW1wb3J0 11772
KGNvdW50 11773
IGNoYWxsZW5nZXM= 11774
IG5vdmVs 11775
IGRlcGFydA== 11776
Yml0cw== 11777
LkN1cnJlbnQ= 11778
IGAkew== 11779
b3Rpbmc= 11780
KFw= 11781
IGNyZWF0aXZl 11782
IGJ1ZmY= 11783
IGludHJvZHVjZWQ= 11784
dXNpYw== 11785
bW9kdWxlcw== 11786
QXJl 11787
LWRvYw== 11788
bGFuZ3VhZ2U= 11789
X2NhY2hl 11790
IHRvZA== 11791
Pz48Lw== 11792
b21ldGhpbmc= 11793
IGh1bg== 11794
5bo= 11795
YXRlcnM= 11796
SW50ZW50 11797
IGltcGxlbWVudGVk 11798
IENhc2U= 11799
Q2hpbGRyZW4= 11800
IG5vdGlmaWNhdGlvbg== 11801
UmVuZGVyZXI= 11802
V3JhcHBlcg== 11803
T2JqZWN0cw== 11804
dGw= 11805
LkNvbnRhaW5z 11806
UGx1Z2lu 11807
LnJvdw== 11808
IGZvcmc= 11809
IHBlcm1pdA== 11810
IHRhcmdldHM= 11811
IElG 11812
IHRpcA== 11813
c2V4 11814
IHN1cHBvcnRz 11815
IGZvbGQ= 11816
cGhvdG8= 11817
fSwNCg== 11818
IGdvb2dsZQ== 11819
JCgnIw== 11820
IHNoYXJpbmc= 11821
IGdvb2Rz 11822
dnM= 11823
IERhbg== 11824
UmF0ZQ== 11825
IE1hcnRpbg== 11826
IG1hbm5lcg== 11827
bGll 11828
LlRoZQ== 11829
SW50ZXJuYWw= 11830
IENPTlRS 11831
TW9jaw== 11832
UklHSFQ= 11833
ICd7 11834
IGNvbnRyb2xz 11835
TWF0 11836
IG1hbmQ= 11837
IGV4dGVuZGVk 11838
T2s= 11839
IGVtYmVk 11840
IHBsYW5ldA== 11841
IE5vbg== 11842
LWNo 11843
KSIs 11844
ZXBhcg== 11845
IGJlbGlldmVk 11846
IEVudmlyb25tZW50 11847
IEZyaWVuZA== 11848
LXJlcw== 11849
IGhhbmRsaW5n 11850
bmlj 11851
LWxldmVs 11852
c2NyaQ== 11853
WG1s 11854
QkU= 11855
dW5nZW4= 11856
IGFsdGVy 11857
W2lkeA== 11858
UG9w 11859
Y2Ft 11860
ICgoKA== 11861
IHNoaXBwaW5n 11862
IGJhdHRlcnk= 11863
aWRkbGV3YXJl 11864
TUM= 11865
IGltcGw= 11866
b3RhdGlvbg== 11867
IExhYg== 11868
PGZvcm0= 11869
CW5hbWU= 11870
IEdhbWVz 11871
cmF5 11872
RXh0cmE= 11873
VHdv 11874
KHBsYXllcg== 11875
IExlcw== 11876
wrA= 11877
IGNoYXJzZXQ= 11878
IGpvdXJuZXk= 11879
ZXRpbmc= 11880
5pg= 11881
4pQ= 11882
55So 11883
IGRpbg== 11884
IHBlcm1hbg== 11885
IHNvbHZl 11886
IGxhdW5jaGVk 11887
IG5pbmU= 11888
IHNlbmRpbmc= 11889
IHRlbGxpbmc= 11890
LnBhc3N3b3Jk 11891
IE1hdHJpeA== 11892
ZXJpYw== 11893
IGdyYWI= 11894
LnU= 11895
IExpYnJhcnk= 11896
IGRlYnQ= 11897
SU5L 11898
LmZpbmRWaWV3QnlJZA== 11899
IGZyZXF1ZW5jeQ== 11900
LmFk 11901
X1RFU1Q= 11902
IG5lZ290 11903
IEFmcmljYW4= 11904
c2VuZGVy 11905
xaE= 11906
R2xvYmFs 11907
MTcz 11908
IGV4cGVydHM= 11909
KyspDQo= 11910
IGRlcGVuZGluZw== 11911
Z3JheQ== 11912
IGp1ZGdl 11913
IHNlbnRlbmNl 11914
bG9zdXJl 11915
QWM= 11916
IHRyYWNl 11917
RWRnZQ== 11918
IGZyaWVuZGx5 11919
IGNvbmNlcm5lZA== 11920
YmxvZw== 11921
IGNsYWltZWQ= 11922
fSc= 11923
aW50ZWdlcg== 11924
X3RyZWU= 11925
CWNvbnRpbnVl 11926
eGk= 11927
IGFjY2VwdGVk 11928
X29uZQ== 11929
IEVkdWNhdGlvbg== 11930
dWJsaXNoZWQ= 11931
Z29u 11932
YXBwb2ludA== 11933
b3V0cw== 11934
IG1pbmluZw== 11935
IHNvbmdz 11936
IGhlcnNlbGY= 11937
IGdyYW50ZWQ= 11938
IHBhc3Npb24= 11939
IExha2U= 11940
IGxvYW4= 11941
dWVudA== 11942
Y2hhbnQ= 11943
IGRldGFpbGVk 11944
ZXhjZXB0 11945
X2NtZA== 11946
IEhF 11947
UmVsYXRlZA== 11948
enQ= 11949
J30sCg== 11950
IHNwZWNpZmljYWxseQ== 11951
U3RhdGlj 11952
IGNhcnJpZWQ= 11953
QU5T 11954
XCI6 11955
Q3JlYXRlZA== 11956
IGN1bA== 11957
XS0= 11958
X2FwaQ== 11959
RlA= 11960
IHNpdHRpbmc= 11961
ICIiKQ== 11962
CWdvdG8= 11963
IEVxdQ== 11964
IGFzc2F1bHQ= 11965
a2lucw== 11966
YW5jZXI= 11967
b2dlbg== 11968
IHZvdGVycw== 11969
IFByb3Q= 11970
RGVzY3JpcHRvcg== 11971
44O8 11972
LkFzc2VydA== 11973
YnNpdGVz 11974
b3N0ZXI= 11975
LW1lbnU= 11976
IGFybXM= 11977
LkNsaWVudA== 11978
LmJhY2tncm91bmQ= 11979
YXZpdHk= 11980
IHZ1bA== 11981
X01BU0s= 11982
IGhvdXNpbmc= 11983
IGJlYXI= 11984
X2l0ZXI= 11985
cGlyZWQ= 11986
IG1hcmtldHM= 11987
IFN0dWRlbnQ= 11988
IHRpY2tldA== 11989
IG1pbGxpb25z 11990
ZmxhdGVy 11991
KT0= 11992
IHJlY292ZXI= 11993
IEZvcmNl 11994
IEJvdGg= 11995
IHZpY3RpbQ== 11996
IERpc2M= 11997
cmVwb3J0 11998
IGZvdXJ0aA== 11999
IEFzc2VtYmx5 12000
L3VzZXI= 12001
TnVsbE9y 12002
dGV4dGFyZWE= 12003
IGF0aA== 12004
IChb 12005
IGNoYW5uZWxz 12006
IEp1c3RpY2U= 12007
Y2hvaWNl 12008
TE9CQUw= 12009
ZXhlYw== 12010
ZW1hbGU= 12011
IGVsZW0= 12012
X2xl 12013
IHJlc3BvbnNpYmlsaXR5 12014
IFR3 12015
SUNBVElPTg== 12016
IGVsc2VpZg== 12017
IGZv 12018
YXN0cw== 12019
IHRyZWF0ZWQ= 12020
c2Vu 12021
IFZpY3Q= 12022
c3VtZXI= 12023
X0JBU0U= 12024
IGFzdA== 12025
Pnt7 12026
IFJlc291cmNl 12027
IFN0YW5kYXJk 12028
IFByZW0= 12029
dXBkYXRlZA== 12030
aXZhbGVudA== 12031
IGFzc2V0cw== 12032
X3RlbXA= 12033
IGludGVyZXN0cw== 12034
IGhhcmR3YXJl 12035
IFJvbQ== 12036
IFNoYXJl 12037
ICcnCg== 12038
ICos 12039
IFRha2U= 12040
IEltYWdlcw== 12041
X0NIRUNL 12042
KHR5cGVvZg== 12043
IEp1bg== 12044
XDxe 12045
IGxpcXU= 12046
IHdvcnN0 12047
eW1ib2xz 12048
CQkJICAg 12049
IGRyaXZlcnM= 12050
IERvY3VtZW50 12051
ZW5v 12052
IFRlY2hub2xvZ3k= 12053
IGFwcHJvdmVk 12054
dW1wcw== 12055
IHNub3c= 12056
Zm9ybWFuY2U= 12057
X0FTU0VSVA== 12058
dWl0cw== 12059
MjA3 12060
2YY= 12061
IGRpZmZlcmVuY2Vz 12062
LlZpc2libGU= 12063
CQkJDQo= 12064
IFBz 12065
X2ZldGNo 12066
IHRvZG8= 12067
LicsCg== 12068
IHNlbA== 12069
dXJlcnM= 12070
aW52YWxpZA== 12071
IHR3ZWV0 12072
VkVM 12073
IHJlc2VhcmNoZXJz 12074
IHNwcmludGY= 12075
IFJP 12076
IHBlbA== 12077
LlRyYW5z 12078
IGlsbGVnYWw= 12079
ZGlhbG9n 12080
c21hcnR5 12081
bGc= 12082
X01JTg== 12083
IGhlcm8= 12084
ZmluYWw= 12085
IHBw 12086
Lkxl 12087
IGNp 12088
CVJU 12089
IHN1Z2dlc3RlZA== 12090
cGRm 12091
YWNoaW5n 12092
IFJv 12093
IFByb3BlcnRpZXM= 12094
IFNp 12095
IGJ1eWluZw== 12096
IG11 12097
IGxhbmRz 12098
aWZpZXJz 12099
IEZJTEU= 12100
Uk9VUA== 12101
IGhvbGRlcg== 12102
IFNvbg== 12103
IHN5bXB0 12104
LnJvdXRl 12105
KT8= 12106
IGFyZ2M= 12107
IGZvcnQ= 12108
IGNhc2lubw== 12109
X2NhdGVnb3J5 12110
IGZvcnVt 12111
MjE1 12112
cHJlZml4 12113
YXB0dXJl 12114
VHViZQ== 12115
ZW1z 12116
aW1pemU= 12117
IG51ZQ== 12118
YXVz 12119
Y291cnNl 12120
QVRPUg== 12121
KCkpLA== 12122
QWR2ZXJ0aXM= 12123
SU5HUw== 12124
IGFja25vdw== 12125
IEtvcmVh 12126
cGxpbmc= 12127
IHdvcmtlcg== 12128
UExJRUQ= 12129
aGFs 12130
IFJpY2hhcmQ= 12131
RWxlbWVudHM= 12132
CQkJIA== 12133
c3Rhcg== 12134
IHJlbGF0aW9uc2hpcHM= 12135
IGNoZWFw 12136
QUNI 12137
IFhNTA== 12138
LCY= 12139
IExvdWlz 12140
IHJpZGU= 12141
X0ZBSUw= 12142
IGNodW5r 12143
W3M= 12144
X09VVA== 12145
IGNob3Nlbg== 12146
X1s= 12147
Lyg= 12148
IEplZmY= 12149
X3Ns 12150
cHJpdg== 12151
IENhbmFkaWFu 12152
IHVuYWJsZQ== 12153
X0ZMQUc= 12154
IG5vcw== 12155
aGlnaA== 12156
IGxpZnQ= 12157
ZnVu 12158
KCl7 12159
ZWxseQ== 12160
eWNsZXJWaWV3 12161
X2Fz 12162
X0xJU1Q= 12163
IHJhZGk= 12164
LmdldFZhbHVl 12165
MzA0 12166
IEFuZ2VsZXM= 12167
IFNwYW4= 12168
X2luc3RhbmNl 12169
aXRvcnM= 12170
MjA4 12171
IG1pZ3JhdGlvbg== 12172
QUs= 12173
T2g= 12174
wq4= 12175
LnNlbGVjdGVk 12176
IEdU 12177
IGFkdmFuY2U= 12178
IFN0eWxl 12179
LkRhdGFHcmlkVmlldw== 12180
ZWN0aW9u 12181
0Y4= 12182
cGlv 12183
cm9n 12184
IHNob3BwaW5n 12185
IFJlY3Q= 12186
SWxsdW1pbmF0ZQ== 12187
T1U= 12188
CWFycmF5 12189
IHN1YnN0YW50aWFs 12190
IHByZWdu 12191
IHByb21vdGU= 12192
SUVX 12193
LkxheW91dA== 12194
IHNpZ25z 12195
Ly4= 12196
IGxldHRlcnM= 12197
Qm9hcmQ= 12198
Y3RybA== 12199
Ilw= 12200
IEpvbmVz 12201
IHZlcnRleA== 12202
IGph 12203
IGFmZmlsaQ== 12204
IHdlYWx0aA== 12205
CWRlZmF1bHQ= 12206
IHNpZ25pZmljYW50bHk= 12207
IGVj 12208
IHhz 12209
YWN0dWFs 12210
LnBlcg== 12211
X3N0ZXA= 12212
YW52YXM= 12213
bWFj 12214
IHRyYW5zbA== 12215
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 12216
SXRlcmF0b3I= 12217
IG9jaA== 12218
YWdub3N0aWM= 12219
IER1cmluZw== 12220
IERFRkFVTFQ= 12221
IHRpbGw= 12222
IHNpZ25hdHVyZQ== 12223
IGJpcmQ= 12224
IE9s 12225
MzEw 12226
IEly 12227
SFM= 12228
YXZhdGFy 12229
RVNTQUdF 12230
IGVsZXY= 12231
IG10 12232
IE5hdg== 12233
IHJlbGF4 12234
IHBsYXRl 12235
SVRFTQ== 12236
KGRhdGU= 12237
Lm5vdA== 12238
IGdyYWRl 12239
IH0pLAo= 12240
PyIKCg== 12241
aWVuY2Vz 12242
SGlnaA== 12243
IERJUw== 12244
MjMx 12245
ZGlzYWJsZWQ= 12246
UVVJ 12247
IG5vaXNl 12248
YXV4 12249
IFVQ 12250
ODg4 12251
b3Nh 12252
IHZvYw== 12253
ICkp 12254
b2NvbQ== 12255
X09GRg== 12256
IERi 12257
TG9jaw== 12258
LmVjbGlwc2U= 12259
LGQ= 12260
IERyYXc= 12261
ICIo 12262
IHZpc2l0ZWQ= 12263
IOKI 12264
IHN1Y2NlZWQ= 12265
IGltcG9zc2libGU= 12266
YWlyZQ== 12267
IFR1cm4= 12268
IGRpc2g= 12269
Rkc= 12270
IHNlbnNvcg== 12271
QU5O 12272
YWJh 12273
IHN1cmc= 12274
XSk7DQo= 12275
IGZw 12276
X2Fu 12277
LUo= 12278
LUc= 12279
IEpvYg== 12280
Q29udmVydA== 12281
IEtFWQ== 12282
IGF1dGhvcnM= 12283
X3NlcnZlcg== 12284
XHI= 12285
IC0qLQ== 12286
ZmxleA== 12287
IHNvYw== 12288
UmV0 12289
IHNhbHQ= 12290
IOKApgoK 12291
IENsZWFy 12292
KHBhZ2U= 12293
LWRhbmdlcg== 12294
IHJvb21z 12295
Y29udg== 12296
I3s= 12297
Lm9w 12298
IEFyZWE= 12299
X1ND 12300
aGVu 12301
IGJlZ2lucw== 12302
LXk= 12303
IGV4Y2l0ZWQ= 12304
IGlnbm9yZWQ= 12305
IGJvbnVz 12306
c3R1ZGVudA== 12307
IE1lbWJlcg== 12308
IHJlbGF0aXZlbHk= 12309
IExvdw== 12310
IFByb2R1 12311
YXRld2F5 12312
cG9zdXJl 12313
IHRoaWNr 12314
YW5pZWw= 12315
KHZpZXc= 12316
IENydXNo 12317
RXh0ZW5zaW9u 12318
SWw= 12319
ZWVk 12320
TE9D 12321
Lmlt 12322
Lkl0ZW1z 12323
IGNvbmZsaWN0 12324
LnByZXZlbnQ= 12325
MjUy 12326
IG9uQ3JlYXRl 12327
dXY= 12328
aXNlcg== 12329
IHdhdmU= 12330
TWFy 12331
IENvbW11bml0eQ== 12332
aWNoZQ== 12333
IE5vdGhpbmc= 12334
W20= 12335
IExlZQ== 12336
cmllbmRz 12337
MjMy 12338
w6hyZQ== 12339
ISEh 12340
YW56 12341
LnJlc3VsdA== 12342
IFNL 12343
X1BBUkFN 12344
IGRlbW9jcg== 12345
QmFja0NvbG9y 12346
LmV4aXN0cw== 12347
Ikl0 12348
KG9wdGlvbnM= 12349
cmF6eQ== 12350
YXNlcg== 12351
XERhdGFiYXNl 12352
YWxlbmRhcg== 12353
X2Fzcw== 12354
O30K 12355
dmVydGV4 12356
aW5lY3JhZnQ= 12357
V2FybmluZw== 12358
YXJnbw== 12359
IGFjdG9y 12360
IEluc3RlYWQ= 12361
IFVzaW5n 12362
U2VsZg== 12363
QGludGVyZmFjZQ== 12364
IHNwZWFraW5n 12365
IFBhcmlz 12366
IExJQ0VOU0U= 12367
Lm5vZGU= 12368
IEZvb2Q= 12369
RUlG 12370
IEJp 12371
LlN0YXJ0 12372
IElC 12373
IHVuaXZlcnNpdHk= 12374
MjU0 12375
IEhlYWRlcg== 12376
LnByb2R1Y3Q= 12377
NDA5 12378
Q29weQ== 12379
ZXRj 12380
cmljYWw= 12381
ID4+Pg== 12382
Ym9va3M= 12383
IGFsZ29yaXRobQ== 12384
ICdfXw== 12385
KGphdmF4 12386
IG51bWVyb3Vz 12387
U2hhcmU= 12388
SGF2ZQ== 12389
IHJlY3J1 12390
IHByb3Zl 12391
LnN1YnN0cmluZw== 12392
aGVhbHRo 12393
0LXQuw== 12394
IGRlY2ltYWw= 12395
IGNvbW1pc3Npb24= 12396
c2NyaXB0aW9u 12397
eEM= 12398
IHN1bW1hcnk= 12399
YXR0ZWQ= 12400
IGNsb3Nlcg== 12401
ZmluaXNoZWQ= 12402
KCkpewo= 12403
IFdvb2Q= 12404
MzAx 12405
X2ZpZWxkcw== 12406
a3U= 12407
X2l0ZW1z 12408
RmxhZw== 12409
IGNvbmZpZGVuY2U= 12410
IEZlZGVyYWw= 12411
ZHV4 12412
IGNvbXBhdA== 12413
IHZlcnRpY2Fs 12414
0Lk= 12415
w6hz 12416
OyI+Cg== 12417
X21hbmFnZXI= 12418
KCkpKQo= 12419
SURF 12420
OiIs 12421
MjM1 12422
X18K 12423
IFdheQ== 12424
MjIx 12425
0Yg= 12426
VGVtcA== 12427
IFNUUg== 12428
cml0dGVu 12429
U3luYw== 12430
IEFW 12431
IENFTw== 12432
IEd1aWQ= 12433
IGVudmlyb25tZW50YWw= 12434
IGNvcnJlc3BvbmRpbmc= 12435
CWNvbnNvbGU= 12436
IGp1c3RpY2U= 12437
IEpT 12438
IGxpdmVk 12439
Z2Fy 12440
IEdyYXBo 12441
IFN0YXQ= 12442
IGlQaG9uZQ== 12443
LmFs 12444
IEhE 12445
IG9jY3Vy 12446
IHRocmVzaG9sZA== 12447
NTA5 12448
IG9uY2xpY2s= 12449
UkVH 12450
LkdyYXBoaWNzVW5pdA== 12451
TWV0YQ== 12452
xb4= 12453
IGN1bQ== 12454
LmdudQ== 12455
w6s= 12456
IG9idGFpbmVk 12457
IGNvbXBsYWludA== 12458
IGVhdGluZw== 12459
IHRhcg== 12460
X3Rhc2s= 12461
IG9wdHM= 12462
MjE2 12463
KHRv 12464
UGFzcw== 12465
IHBsYXN0aWM= 12466
dGlsaXR5 12467
IFdpbg== 12468
LnByZXZlbnREZWZhdWx0 12469
cGlsZQ== 12470
IEdhcg== 12471
IHF1YW50aXR5 12472
X2xhc3Q= 12473
IGdyZWF0ZXN0 12474
RGFv 12475
X0RJUw== 12476
IFVzZWQ= 12477
IEhQ 12478
cml0aW5n 12479
U0lPTg== 12480
Ymx1ZQ== 12481
ZG9tYWlu 12482
IHNjb3Jlcw== 12483
Tm9ybWFs 12484
X2FkbWlu 12485
IEFTU0VSVA== 12486
VGhlbg== 12487
Kioq 12488
ZGlzdA== 12489
bG9u 12490
IGhhdGU= 12491
c2hhbA== 12492
SW1hZ2VWaWV3 12493
ZGF0YWJhc2U= 12494
IHBhbmQ= 12495
IGxvZ2lj 12496
PWZhbHNl 12497
Ymc= 12498
IENvbmZpZ3VyYXRpb24= 12499
IG51cg== 12500
T0c= 12501
IG1hcnJpZWQ= 12502
Ois= 12503
IGRyb3BwZWQ= 12504
MDQw 12505
IHJlZ2lzdHJhdGlvbg== 12506
0L7QvA== 12507
dWx0aXBsZQ== 12508
aXplcnM= 12509
c2hhcGU= 12510
LmNvcHk= 12511
IHdlYXJpbmc= 12512
IENhdGg= 12513
IGRlZGljYXRlZA== 12514
IC4uLgo= 12515
IGFkdm9j 12516
IEZhbWlseQ== 12517
IHN0YXRlbWVudHM= 12518
ZW1hdGlj 12519
YW1waW9uc2hpcA== 12520
IG1vdGl2 12521
IEhhdmU= 12522
IGJsb3c= 12523
Sm9i 12524
Y2VydA== 12525
X3ZlY3Rvcg== 12526
aW5zdGFsbA== 12527
IENPUFk= 12528
ZW1iZWQ= 12529
RElS 12530
IFNwcmluZw== 12531
IGV4aGli 12532
MjIz 12533
Y2Ru 12534
IENvbW1lbnQ= 12535
IE9wdGlvbmFs 12536
LnBsYXllcg== 12537
IERhcms= 12538
KHBvcw== 12539
IFNob3VsZA== 12540
IGNlbnRyZQ== 12541
IEd1YXJk 12542
w7N3 12543
IHRyb3VibGU= 12544
RU5FUg== 12545
KHVuc2lnbmVk 12546
X3NlcnZpY2U= 12547
IG5z 12548
dWxpbmc= 12549
IE1leGljbw== 12550
IE5Z 12551
bXlzcWw= 12552
IGxpYw== 12553
5Zw= 12554
TXI= 12555
LWZs 12556
IEN1c3RvbWVy 12557
aWRp 12558
ID8+Cgo= 12559
cmlibGU= 12560
INC/0YA= 12561
IHNpemVz 12562
X1NUUklORw== 12563
dmFsaWRhdGlvbg== 12564
IEpvbg== 12565
KEh0dHA= 12566
YWRkQ2xhc3M= 12567
Tm9kZXM= 12568
IGZyYWdtZW50 12569
IHNwb2tl 12570
IHdhc3Rl 12571
Sm9pbg== 12572
IGlsbHVzdHI= 12573
ZWxp 12574
Y2llbnQ= 12575
IGFpZA== 12576
IHByb3NlYw== 12577
Jyl7Cg== 12578
IHBhc3Npbmc= 12579
IGZhY2Vz 12580
U2hhcGU= 12581
X1o= 12582
aXRp 12583
IGFsbGU= 12584
IHJvYm90 12585
ICAgICAgIAo= 12586
IFNwZQ== 12587
IHJlY2VpdmluZw== 12588
IERldGFpbHM= 12589
ICIp 12590
bWc= 12591
X1JFRg== 12592
IGNvbXBhcmlzb24= 12593
Kiw= 12594
IEZvdW5k 12595
X3Nlc3Npb24= 12596
KFU= 12597
L0Y= 12598
IHh4eA== 12599
TmV0d29yaw== 12600
ZGVycw== 12601
IGNhcHR1cmU= 12602
IGNvcnJl 12603
IEx0ZA== 12604
IEFkdg== 12605
W0A= 12606
IGNsaXA= 12607
TWlsbA== 12608
IFByb2ZpbGU= 12609
IGVuZGlm 12610
IG9ibGln 12611
ZGVzY3JpYmU= 12612
LmVsZW1lbnQ= 12613
cml0ZXJpb24= 12614
TEQ= 12615
ZXJlZA== 12616
IGZhdm91cg== 12617
c2NvcmU= 12618
IEZpbHRlcg== 12619
YXR0cmlidXRlcw== 12620
IGNoZWNrcw== 12621
SW5mbGF0ZXI= 12622
IFBsdXM= 12623
IHNjaWVudGlmaWM= 12624
IHByaXZhY3k= 12625
SGVhZA== 12626
IGZlYXQ= 12627
IGRlZ3JlZXM= 12628
IFBhbGU= 12629
OyI+ 12630
IGZpbG1z 12631
IEF1ZGlv 12632
IFRhZw== 12633
IEVuZXJneQ== 12634
aXRhcg== 12635
cGFyYXRvcg== 12636
IGZlbGxvdw== 12637
IGV2dA== 12638
IFRyaQ== 12639
IERBTQ== 12640
Y2xvdWQ= 12641
IFBhc3N3b3Jk 12642
IERlbW9jcmF0cw== 12643
IEFjYWQ= 12644
JGxhbmc= 12645
IHJlYg== 12646
KCkpCgo= 12647
0L3Riw== 12648
IEJ1cg== 12649
cmVhZGNy 12650
IGhleA== 12651
MjA5 12652
Q29uc29sZQ== 12653
Y3Rs 12654
b3VzZWw= 12655
IFdpbGxpYW0= 12656
IGF6 12657
X1BPUlQ= 12658
IHByYWN0aWNlcw== 12659
IGFueXdoZXJl 12660
IFBvc2l0aW9u 12661
IC0+Cg== 12662
aWFtcw== 12663
LnVzZXJuYW1l 12664
cGxhY2Vob2xkZXI= 12665
IG9kZXI= 12666
IFNlY3JldGFyeQ== 12667
IGlU 12668
bW9uZA== 12669
ZXZlbnRz 12670
P+KAnQ== 12671
LlN1Yg== 12672
IGF0dGFjaGVk 12673
IG7Do28= 12674
IGVzdGF0ZQ== 12675
MzY1 12676
LmFjdGlvbg== 12677
IGZpZ3VyZXM= 12678
IH0pOw0K 12679
IHN1YnNjcmk= 12680
LnRhZw== 12681
bmFt 12682
LnBsb3Q= 12683
bm9vbg== 12684
bGlhbWVudA== 12685
Q2hhcmFjdGVy 12686
LnRhYg== 12687
IHdpbnRlcg== 12688
IFZhcmlhYmxl 12689
IHRyZWVz 12690
IHByb3Vk 12691
KFY= 12692
X2xvYWQ= 12693
IGhpZXI= 12694
IEVjb24= 12695
IGZk 12696
IHZpY3RpbXM= 12697
UmVzdA== 12698
aWFuYQ== 12699
IGZha2U= 12700
LlByaW50bG4= 12701
IHN0cmxlbg== 12702
IHNhZA== 12703
IGJsZQ== 12704
UHJvdA== 12705
IGJ1dHRvbnM= 12706
IHRlbGV2aXNpb24= 12707
IGxvZ28= 12708
ZXh0ZW5zaW9u 12709
CWo= 12710
c3RlaW4= 12711
YWNpb25lcw== 12712
ICIiIgoK 12713
IHNpbXA= 12714
IHJlY29yZGVk 12715
IGJyaW5ncw== 12716
IHByaW5jaXBhbA== 12717
IGZlZXM= 12718
KHNvdXJjZQ== 12719
a2Rpcg== 12720
IHV0aWxz 12721
IGNvcnJlY3RseQ== 12722
Zmls 12723
IHdlbA== 12724
UGFpcg== 12725
LWJ1dHRvbg== 12726
c2NhbGU= 12727
dmVyaWZ5 12728
W2M= 12729
IC0tLQ== 12730
IGVzY2FwZQ== 12731
aWtlcw== 12732
TG93ZXJDYXNl 12733
aWNpYW4= 12734
IGNoYXB0ZXI= 12735
IFRZUEU= 12736
IHNoYWRvdw== 12737
IGF3ZXNvbWU= 12738
V0U= 12739
ZWxpZg== 12740
IGxhbWJkYQ== 12741
IGRpc3RpbmN0 12742
IGJhcmU= 12743
LW9mZg== 12744
IGNvbG91cg== 12745
LmFwcGVuZENoaWxk 12746
b2xlYw== 12747
YWdh 12748
LmZpbGw= 12749
CXN1cGVy 12750
IGFkag== 12751
KHBvc2l0aW9u 12752
LmdldEl0ZW0= 12753
MjQy 12754
U2hvcnQ= 12755
IHRvdGFsbHk= 12756
VkQ= 12757
IFRyZQ== 12758
X2Vw 12759
dmVtZW50cw== 12760
IFNvbHV0aW9u 12761
IGZ1bmRhbWVudA== 12762
Rm9sbG93 12763
IGZhY2lsaXR5 12764
IGhhcHBlbmluZw== 12765
T0Y= 12766
LnRleHRCb3g= 12767
U3Bhbg== 12768
IMKr 12769
aWRlbg== 12770
IGV4Y2VlZA== 12771
KHBhcmVudA== 12772
IGNw 12773
57s= 12774
IGhhc24= 12775
IHByaQ== 12776
IGNvbnNlcXU= 12777
bmVu 12778
IElOVE8= 12779
SWdub3Jl 12780
IEZ1dHVyZQ== 12781
IGNhcmJvbg== 12782
IFN0ZWVs 12783
Zm10 12784
b2tpZQ== 12785
IHNwbA== 12786
KHRpdGxl 12787
LWluZm8= 12788
IGRlYWxz 12789
IGZpeHR1cmU= 12790
ZWE= 12791
RGl2 12792
IHRlc3RlZA== 12793
X3JldHVybg== 12794
KQoKCgo= 12795
dXBwb3J0ZWQ= 12796
IENvb2s= 12797
IHBheWluZw== 12798
IElsbA== 12799
IGFycmVzdGVk 12800
IFByaW1l 12801
X2NhbGxiYWNr 12802
PiwK 12803
ZHJpdmVy 12804
T25jZQ== 12805
YWJi 12806
X2J5dGVz 12807
IFNldHM= 12808
KE9iamVjdA== 12809
IGNj 12810
IHNoZWxs 12811
YWxv 12812
KTsvLw== 12813
KGxvZw== 12814
MjY0 12815
Y3RvcnM= 12816
KTwv 12817
IG5laWdoYm9yaG9vZA== 12818
NDIw 12819
YWlsYWJpbGl0eQ== 12820
dm9s 12821
IHlvdXRo 12822
IHRlY2huaXF1ZXM= 12823
IFNjaGVtYQ== 12824
dWg= 12825
bWVudGU= 12826
IHJlcG9zaXRvcnk= 12827
aW1t 12828
IGNvb2tpZQ== 12829
SlM= 12830
b3ZpZXM= 12831
Ons= 12832
Q29tcGxldGU= 12833
U2luY2U= 12834
IGxhdWdo 12835
X0JP 12836
ZW5hYmxl 12837
IERvZXM= 12838
IFdhbGs= 12839
d2hhdA== 12840
a2Vz 12841
IG11bHRpcA== 12842
aW1lbnRz 12843
ZXVy 12844
IHZpY3Rvcnk= 12845
R2VuZXJhdG9y 12846
IE1vcw== 12847
cm92ZXJz 12848
IGNvbXB1dGU= 12849
IHByb3ZpZGVycw== 12850
IE1lZGlj 12851
TFA= 12852
X0NPTkZJRw== 12853
IHZldGVy 12854
c3RlcnM= 12855
X3dpbmRvdw== 12856
dW1lcmlj 12857
CQkJCQkK 12858
LlJlc3BvbnNl 12859
IHJlcGxhY2Vk 12860
LnJvb3Q= 12861
LWZyZWU= 12862
LWNvbnRhaW5lcg== 12863
IG1hdGNoaW5n 12864
IEVkaXRvcg== 12865
PSR7 12866
IFNhZg== 12867
IHNpbmQ= 12868
KGJ1ZmZlcg== 12869
5Yc= 12870
LmVkdQ== 12871
KV07Cg== 12872
IE5GTA== 12873
YXlh 12874
IGRvZ3M= 12875
IGRlc2lyZQ== 12876
IE1pZGRsZQ== 12877
Q2FydA== 12878
MzA2 12879
VGhlbWU= 12880
IG1vYg== 12881
IGRpc3BsYXllZA== 12882
aWdpdA== 12883
IGFkdWx0cw== 12884
IiIi 12885
IGRlbGl2ZXJlZA== 12886
dmlzaWJsZQ== 12887
Ijp7Cg== 12888
PDw8 12889
IEdP 12890
c2Nyb2xs 12891
eEU= 12892
IGFzc2lnbmVk 12893
IEJvb2w= 12894
IHdw 12895
IGNvbWJhdA== 12896
IEhhdw== 12897
Li0= 12898
IHN1cHBvcnRpbmc= 12899
LkNvbnRlbnQ= 12900
MzQ1 12901
aXJjcmFmdA== 12902
IHNwaW4= 12903
IENS 12904
Lm15 12905
4KU= 12906
dHBs 12907
IHNwYWNlcw== 12908
Pyw= 12909
Mzg0 12910
IFN5cmlh 12911
IHBhdHRlcm5z 12912
LWJveA== 12913
IGZyYW1ld29yaw== 12914
LyU= 12915
KGxvbmc= 12916
IHRlYWNoaW5n 12917
QVJOSU5H 12918
X2tleXM= 12919
IHRhYmxlcw== 12920
VU5D 12921
aW5hdGlvbnM= 12922
LXdlaWdodA== 12923
cmFkaW8= 12924
IFBhYw== 12925
LnNlcnZlcg== 12926
LkNoYXJGaWVsZA== 12927
cmluZw== 12928
IHF1b3Rl 12929
YW5uYQ== 12930
IHdlcmRlbg== 12931
IGNyZWFt 12932
IG1hY2hpbmVz 12933
LWs= 12934
Mzc1 12935
IHN0aW0= 12936
IFN0b2Nr 12937
cmljaw== 12938
IGltcG9ydGFuY2U= 12939
cng= 12940
w7Vlcw== 12941
2Yg= 12942
IHN0cm9rZQ== 12943
YWdyYQ== 12944
IHRhc3Rl 12945
IERFQlVH 12946
VGhhbmtz 12947
IFJlcXVpcmVk 12948
b3Zh 12949
TWVkaWE= 12950
IHNpxJk= 12951
KGJhc2U= 12952
cG9zdHM= 12953
IGZpbGVOYW1l 12954
Q2hlY2tlZA== 12955
IGludGVycnVwdA== 12956
ICgpCg== 12957
cHl0aG9u 12958
cGFpcg== 12959
IGNpcmNsZQ== 12960
IGluaXRp 12961
X3N0cmVhbQ== 12962
IGNvbXByZWg= 12963
bGVhcm4= 12964
UHVibGlj 12965
IGh1bWFucw== 12966
IGJyaW5naW5n 12967
b2dyYXBoaWM= 12968
X2xheWVy 12969
LWxpa2U= 12970
dXBwb3J0SW5pdGlhbGl6ZQ== 12971
aWRlYmFy 12972
IHZvdGVz 12973
IGRlc2lyZWQ= 12974
TWFzaw== 12975
IHJlbGF0aW9u 12976
Lkluc3RhbmNl 12977
SGVscA== 12978
IGluc3Bpcg== 12979
IE1vbm8= 12980
Vmlld01vZGVs 12981
b21ldGltZXM= 12982
IGJhY2tncm91bmRDb2xvcg== 12983
IHJvdGF0aW9u 12984
IG1hcmk= 12985
L3Rlc3Q= 12986
SU5TRVJU 12987
U3Rhcg== 12988
cGh5 12989
SWRz 12990
X0dFVA== 12991
IGluY3JlYXNlcw== 12992
X2Nsb3Nl 12993
MjMz 12994
X0ZPUk0= 12995
IFvigKZdCgo= 12996
YXph 12997
VEVYVA== 12998
IMOk 12999
IFZhbg== 13000
IGxpZ2h0cw== 13001
IEd1aWRl 13002
IGRhdGVz 13003
LkNvbW1hbmQ= 13004
YW1hbg== 13005
IHBhdGhz 13006
LmVkaXQ= 13007
CWFkZA== 13008
ZHg= 13009
IHJlYWN0aW9u 13010
IEJlYWNo 13011
LmdldE1lc3NhZ2U= 13012
RW52aXJvbm1lbnQ= 13013
aW50ZXJlc3Q= 13014
IG1pbmlzdGVy 13015
IHJlYWRlcnM= 13016
CUY= 13017
IGRvbWVzdGlj 13018
IGZpbGVk 13019
Q2l0eQ== 13020
IG1hcHBpbmc= 13021
IERFUw== 13022
IHJlcGFpcg== 13023
dGljcw== 13024
aXh0dXJl 13025
IG5vbWJyZQ== 13026
LklTdXBwb3J0SW5pdGlhbGl6ZQ== 13027
em8= 13028
LklzTnVsbE9y 13029
IENhcm9saW5h 13030
IERlcg== 13031
IEVWRU5U 13032
IGdlc3Q= 13033
IGhpc3Q= 13034
cmVzb3VyY2Vz 13035
IG9ycGhhbg== 13036
LkFyZQ== 13037
IEludmVzdA== 13038
UkVGRVJSRUQ= 13039
LkxvZ2dlcg== 13040
IFJvbWFu 13041
IGN1bHR1cmFs 13042
ZmVhdHVyZQ== 13043
cHRz 13044
YnQ= 13045
IGRvdA== 13046
IGRpYW0= 13047
dXNwZW5k 13048
X2FjY2Vzcw== 13049
KCl7DQo= 13050
IHN1cnByaXNl 13051
YWJpbA== 13052
IHZpcnQ= 13053
IGJvbWI= 13054
YXJvbg== 13055
X0lT 13056
IHZhc3Q= 13057
UmVhbA== 13058
ZXBlbmQ= 13059
aWN0ZWQ= 13060
IHBpY2tlZA== 13061
IEZM 13062
IFJlcHVibGljYW5z 13063
Lnplcm9z 13064
UHJlc3NlZA== 13065
c3Vw 13066
LkNvcmU= 13067
TWljcm9zb2Z0 13068
c2VydmljZXM= 13069
YWdpYw== 13070
aXZlbmVzcw== 13071
IHBkZg== 13072
IHJvbGVz 13073
NDAz 13074
cmFz 13075
IGluZHVzdHJpYWw= 13076
IGZhY2lsaXRpZXM= 13077
MjQ1 13078
6KE= 13079
IG5p 13080
IGJh 13081
IGNscw== 13082
CUI= 13083
Q3VzdG9tZXI= 13084
IGltYWdpbmU= 13085
IGV4cG9ydHM= 13086
T3V0cHV0U3RyZWFt 13087
IG1hZA== 13088
KGRl 13089
KXsKCg== 13090
IGZybw== 13091
aHVz 13092
IGNvbW1pdHRlZQ== 13093
7J20 13094
LHg= 13095
IGRpdmlzaW9u 13096
KGNsaWVudA== 13097
KGphdmE= 13098
b3B0aW9uYWw= 13099
LkVxdWFs 13100
IFBoeXM= 13101
aW5ndQ== 13102
MDMz 13103
NzIw 13104
IHN5bmM= 13105
IE5h 13106
fX08Lw== 13107
T0xVTQ== 13108
aXTDqQ== 13109
IGlkZW50aWZpZXI= 13110
b3dlZA== 13111
IGV4dGVudA== 13112
IGh1cg== 13113
VkE= 13114
Y2xhcg== 13115
IGVkZ2Vz 13116
Q3JpdGVyaWE= 13117
IGluZGVlZA== 13118
aW5oZXJpdA== 13119
IE5pZ2h0 13120
MzAy 13121
IHJlcG9ydGluZw== 13122
IGVuY291bnRlcg== 13123
IGtpbmRz 13124
X3ByZWQ= 13125
IGNvbnNpZGVyaW5n 13126
Lig= 13127
IHByb3RlaW4= 13128
VHlw 13129
Z3JpY3VsdA== 13130
IEJhbGw= 13131
QENvbXBvbmVudA== 13132
IEVzcw== 13133
IFJ1Yg== 13134
ODAy 13135
dWxw 13136
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 13137
aXR1ZA== 13138
LmF0dHI= 13139
aWVudGU= 13140
IHNwZWxs 13141
IEpvZQ== 13142
RU5URVI= 13143
X2hvc3Q= 13144
aXRhbg== 13145
IG1hdHRlcnM= 13146
IGVtZXJnZW5jeQ== 13147
dWF0ZWQ= 13148
IENoYXQ= 13149
PXsn 13150
Y29udHJp 13151
YXJrZXI= 13152
5oiQ 13153
aXBlcg== 13154
IHNjaGVtZQ== 13155
KHN0ZGVycg== 13156
ICoo 13157
Y2VpdmVy 13158
LmNvbHVtbg== 13159
IG1hcmtlZA== 13160
X0FUVFI= 13161
IGJvZGllcw== 13162
IElNUExJRUQ= 13163
R2Fw 13164
IFBPU1Q= 13165
IGNvcnBvcmF0ZQ== 13166
IGRpbWVuc2lvbg== 13167
IGNvbnRyYXN0 13168
ZXJ2aWV3 13169
IEVSUk9S 13170
IGNhcGFibGU= 13171
IGFkdmVydGlzaW5n 13172
dXJjaGFzZQ== 13173
IFBB 13174
IEZyYW5jaXNjbw== 13175
IGZhY2luZw== 13176
44CM 13177
Z2l0 13178
IGJlZXI= 13179
IHNreQ== 13180
ZG93bmxvYWQ= 13181
IEN1cg== 13182
bWM= 13183
YW5ueQ== 13184
LmZsb29y 13185
IGNyaXRlcmlh 13186
IHBhcnNlSW50 13187
YCwK 13188
IGFzcGVjdA== 13189
IGJ1bmRsZQ== 13190
Q291bGQ= 13191
IHRhbms= 13192
LWlk 13193
IGh1cnQ= 13194
IGJyb2FkY2FzdA== 13195
T0tFTg== 13196
b3dudA== 13197
bnVsbGFibGU= 13198
Q2Fw 13199
IGFsY29ob2w= 13200
IENvbGw= 13201
IEhlbHBlcg== 13202
IEFm 13203
Lm1ldGhvZA== 13204
IHBsYW5uZWQ= 13205
cGxlcg== 13206
IFNpdGU= 13207
IHJlc2M= 13208
b21lbnQ= 13209
IEphdmFTY3JpcHQ= 13210
U0VSVkVS 13211
IHJocw== 13212
ZXJlcw== 13213
KCIs 13214
aWZp 13215
LmZpZWxkcw== 13216
IHBhcmtpbmc= 13217
IGlzbGFuZA== 13218
IHNpc3Rlcg== 13219
Xwo= 13220
Q29uc3RyYWludHM= 13221
IEF1c3Q= 13222
ZGlt 13223
X3BvaW50cw== 13224
IGdhcA== 13225
X2FjdGl2ZQ== 13226
IHZvb3I= 13227
IFBP 13228
QmFn 13229
LXNjYWxl 13230
bGFtYmRh 13231
LkRpc3Bvc2U= 13232
cnVsZQ== 13233
IG93bmVk 13234
IE1lZGljYWw= 13235
MzAz 13236
ZW50cmllcw== 13237
IHNvbGFy 13238
IHJlc3VsdGluZw== 13239
IGVzdGltYXRlZA== 13240
IGltcHJvdmVk 13241
RHVyYXRpb24= 13242
ZW1wbG95ZWU= 13243
JC4= 13244
QWN0aW9ucw== 13245
TGlrZQ== 13246
LCg= 13247
KFJlcXVlc3Q= 13248
JXM= 13249
Lk9wZW4= 13250
KSIK 13251
IHBpeGVs 13252
IGFkYXB0ZXI= 13253
IHJldmVudWU= 13254
b2dyYW0= 13255
IExB 13256
IE1hY2hpbmU= 13257
INin 13258
IGZsZQ== 13259
IGJpa2U= 13260
SW5zZXRz 13261
IGRpc3A= 13262
IGNvbnNpc3RlbnQ= 13263
YcOnw6Nv 13264
Z2VuZGVy 13265
IFRob3Nl 13266
cGVyaWVuY2U= 13267
LkJhY2tDb2xvcg== 13268
LnBsYXk= 13269
IHJ1c2g= 13270
IGF4aW9z 13271
IG5lY2s= 13272
X21lbQ== 13273
LlBSRUZFUlJFRA== 13274
X2ZpcnN0 13275
Q0I= 13276
IFdpZGdldA== 13277
IHNlcQ== 13278
aGFy 13279
IGhpdHM= 13280
IOKCrA== 13281
IGNvbnRhaW5lZA== 13282
cmllbnQ= 13283
d2F0ZXI= 13284
TE9BRA== 13285
IFZpcmdpbmlh 13286
IEFybQ== 13287
IC4v 13288
wrs= 13289
X3Jvb3Q= 13290
IGFzc2lzdGFuY2U= 13291
W10s 13292
c3luYw== 13293
IHZlZ2V0 13294
ZXNjYXBl 13295
aWNlcg== 13296
Ym9vc3Q= 13297
IEZsb2F0 13298
LVc= 13299
Ki8NCg== 13300
Kj4= 13301
MjE4 13302
ICQoIi4= 13303
LnBvcw== 13304
IGJveXM= 13305
IHdlZGRpbmc= 13306
IGFnZW50cw== 13307
PSJf 13308
IEFybXk= 13309
IGhpbnQ= 13310
dmlzaW9u 13311
IHRlY2g= 13312
IENvbm5lY3Q= 13313
IGxlZ2VuZA== 13314
IEJldA== 13315
LkJhc2U= 13316
U3ViamVjdA== 13317
IGxpdA== 13318
UmVtb3Zl 13319
ICI6 13320
IEZpbmFs 13321
cGVhcmFuY2U= 13322
IGlUdW5lcw== 13323
IHBhcnRpY2lwYW50cw== 13324
IFB5dGhvbg== 13325
IGJ1c3k= 13326
aWVs 13327
dmVydGljZXM= 13328
IHRlbXBsYXRlVXJs 13329
IENsb3Nl 13330
SW1n 13331
IENvcnBvcmF0aW9u 13332
dGltZXN0YW1w 13333
IGV4dGVuZA== 13334
IHdlYnNpdGVz 13335
IHBvc3NpYmlsaXR5 13336
0L7Rgg== 13337
IGvDtg== 13338
IG1lYXQ= 13339
IHJlcHJlc2VudGF0aW9u 13340
MjQx 13341
IAkJ 13342
X1NUQVJU 13343
LmFwcGx5 13344
IFZhbGxleQ== 13345
IFN1Y2Nlc3M= 13346
SGk= 13347
IG5vYg== 13348
IElFbnVtZXJhYmxl 13349
X3NlbGVjdA== 13350
Z2Vv 13351
LiIpCg== 13352
IHR1cm5pbmc= 13353
IGZhYnJpYw== 13354
KCIiKTsK 13355
IHBlcnNwZWN0aXZl 13356
6Zc= 13357
IFNu 13358
VGhhbms= 13359
O2o= 13360
LlBhcmFtZXRlcnM= 13361
CSAgICAgICAgICAg 13362
IGZhY3Rz 13363
MzA1 13364
IHVudA== 13365
Lmluc3RhbmNl 13366
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 13367
LWVuZA== 13368
IEpPSU4= 13369
IEhlbg== 13370
IHVyaQ== 13371
5ZCN 13372
INC90LA= 13373
IEluZm8= 13374
IGNvbmR1Y3RlZA== 13375
IMOl 13376
T1VSQ0U= 13377
IHdpbmU= 13378
Sm9obg== 13379
LkVycm9yZg== 13380
IEFnZQ== 13381
b3VuZGVk 13382
IHJlYWxpemU= 13383
MzEy 13384
IF07 13385
IHN1YnNlcXU= 13386
LG0= 13387
KFVzZXI= 13388
aWFubw== 13389
IGFjY29tcGw= 13390
aXNw 13391
LnN0ZA== 13392
6Yc= 13393
IEJlZA== 13394
LnNldEF0dHJpYnV0ZQ== 13395
QlI= 13396
a2VlcA== 13397
IEFMTA== 13398
IGlzb2w= 13399
YW1tYQ== 13400
UGFja2FnZQ== 13401
IG9jY2FzaW9u 13402
LXN1Y2Nlc3M= 13403
0LXQtA== 13404
IExJTUlURUQ= 13405
c3RyaXA= 13406
KCkKCgo= 13407
aXN0cmlidXRpb24= 13408
Q29sb3Jz 13409
ICs6Kw== 13410
RGlkTG9hZA== 13411
YWxlcg== 13412
IHRpZA== 13413
IExFRA== 13414
IExpbmtlZA== 13415
IENhcnQ= 13416
KCkpDQo= 13417
X1JFQUQ= 13418
IGtpbGxpbmc= 13419
IFBIUA== 13420
ZmVjdGlvbg== 13421
IGluc3RhbmNlcw== 13422
Y3Y= 13423
Ii8+ 13424
IHNm 13425
IHRheGVz 13426
X2xvY2F0aW9u 13427
IEJpdGNvaW4= 13428
dWFibGU= 13429
cmFuaw== 13430
aWdub3Jl 13431
dHJhY2s= 13432
0LrQsA== 13433
IHNob3VsZG4= 13434
IE9Q 13435
PT57Cg== 13436
IGtt 13437
IGhlbHBlcg== 13438
X2hlYWQ= 13439
IFdoZXRoZXI= 13440
b2Nv 13441
X2Js 13442
IHN0YXRpc3RpY3M= 13443
IGJlYXV0eQ== 13444
IHRvZw== 13445
dGlw 13446
64uk 13447
IGNzdg== 13448
KHNxbA== 13449
c3RkbGli 13450
d2Vhaw== 13451
IGxpa2Vz 13452
xI0= 13453
IHJlcGVhdA== 13454
IGFwYXJ0bWVudA== 13455
IGVtcGg= 13456
X2VkaXQ= 13457
IHZpdA== 13458
CXR5cGU= 13459
MjE3 13460
RXZlbg== 13461
dXRlbg== 13462
IGNpcmN1bXN0YW5jZXM= 13463
Ymlhbg== 13464
IHN1Z2Fy 13465
V2luZG93cw== 13466
7J4= 13467
IG9ic2VydmVk 13468
L2RhdGE= 13469
IGNhbGVuZGFy 13470
IHN0cmlrZQ== 13471
IFJFUw== 13472
X3Nj 13473
Zm9ueQ== 13474
b3JlbQ== 13475
KHo= 13476
cG93ZXI= 13477
ZXRlY3Q= 13478
IFNhdA== 13479
LmRlc2NyaXB0aW9u 13480
IGdhbmc= 13481
IFNwb3J0cw== 13482
b25ncw== 13483
IEJ1bmRsZQ== 13484
LnN1bQ== 13485
b25jZQ== 13486
IGFjY3VzZWQ= 13487
IGV4cGxvcmU= 13488
IGFwcHJveGltYXRlbHk= 13489
IGxvc2luZw== 13490
dGhlc2lz 13491
IEZ1bmQ= 13492
IGRpYWdu 13493
QXV0b3dpcmVk 13494
cHJvcGVydGllcw== 13495
IF8u 13496
IGNudA== 13497
Y2VkdXJl 13498
IHl5 13499
IGdyYW50 13500
c29jaw== 13501
LmlubmVySFRNTA== 13502
IF0pOwo= 13503
IENPTkZJRw== 13504
PSck 13505
NTUw 13506
XV07Cg== 13507
VU5E 13508
IGdsb2I= 13509
IGRpcmU= 13510
dWZmbGU= 13511
X01FTQ== 13512
IGF1dGhlbnRpYw== 13513
Pigi 13514
IGRlY2FkZQ== 13515
IEltcG9ydA== 13516
IG9yaWdpbmFsbHk= 13517
IGpRdWVyeQ== 13518
IGluZGljYXRl 13519
IG91cnNlbHZlcw== 13520
U3c= 13521
LmxibA== 13522
ZW5lcmF0ZQ== 13523
IGJhc2ljYWxseQ== 13524
IEhvbQ== 13525
ICsjKw== 13526
IEJyaXRhaW4= 13527
IEthcg== 13528
dG9FcXVhbA== 13529
LnN0b3A= 13530
IG1vZGFs 13531
aXNp 13532
IHN1Z2dlc3Rz 13533
IGR0eXBl 13534
IHR1cg== 13535
YmY= 13536
IGNvbm5lY3Rpb25z 13537
IEJlZm9yZQ== 13538
aXN0ZWQ= 13539
bW91c2U= 13540
IHB1bGxlZA== 13541
LmJ1aWxk 13542
IGxlZ2lzbGF0aW9u 13543
IGZvcnRo 13544
cGFk 13545
ZWdv 13546
Lk5vdw== 13547
IGV4Y2l0aW5n 13548
fQoKCgo= 13549
IGNvbXBy 13550
IHNoYXJlcw== 13551
IHJpZw== 13552
Z3JlZW4= 13553
X3ZlYw== 13554
IGVudW1lcmF0ZQ== 13555
QXV0bw== 13556
aWNhdG9y 13557
IFJheQ== 13558
YXNzZQ== 13559
IGhvbGlkYXk= 13560
IG51bGxhYmxl 13561
Z3Vu 13562
X2RldGFpbHM= 13563
IHdyYXBwZXI= 13564
c2Vx 13565
IFlvdW5n 13566
anVhbmE= 13567
ICJfXw== 13568
bGljZW5zZQ== 13569
c2VydmU= 13570
Xig= 13571
aWRlcnM= 13572
LlJlbW92ZQ== 13573
cm9wZG93bg== 13574
J1M= 13575
cGlu 13576
KHRva2Vu 13577
LkRlZmF1bHQ= 13578
IHJlYXNvbmFibGU= 13579
YW1waW9u 13580
IFNvY2lldHk= 13581
IGJlaQ== 13582
ZXJ2ZXM= 13583
cmFk 13584
IEZveA== 13585
X2ltYWdlcw== 13586
IHdoZWVs 13587
Jylb 13588
IGNmZw== 13589
KEJ5 13590
Q29uc3RydWN0b3I= 13591
IHZhcnk= 13592
LnN3aWZ0 13593
IHByb3h5 13594
CUg= 13595
IEFub3RoZXI= 13596
IFBlbg== 13597
IGNoZWNraW5n 13598
IGplc3Q= 13599
bWFuYWdlcg== 13600
T3JpZ2lu 13601
dWdz 13602
b2ly 13603
PjwhLS0= 13604
IGV4cHJlc3NlZA== 13605
IG1vZGVy 13606
IGFnZW5jaWVz 13607
IGlo 13608
LWhpZGRlbg== 13609
aW91c2x5 13610
IFJvZA== 13611
IHNvbGU= 13612
TWVk 13613
LkFueQ== 13614
IHBj 13615
YmFs 13616
RXhhbXBsZQ== 13617
IFNhbGU= 13618
IHN0cmlw 13619
IENvbXA= 13620
IHByZXNpZGVudGlhbA== 13621
TW9zdA== 13622
cHV0YXRpb24= 13623
KHJlZg== 13624
IEZvdXI= 13625
X2ZpbGVuYW1l 13626
IGVuZm9yY2VtZW50 13627
2K8= 13628
IEdlb3Jn 13629
d2VpZ2h0cw== 13630
L2w= 13631
IGFnZ3Jlc3M= 13632
IGRyYXdpbmc= 13633
YW5keQ== 13634
PEk= 13635
LWo= 13636
YWth 13637
aHJlZg== 13638
IHRlYWNoZXJz 13639
X1E= 13640
KGl0 13641
IE1C 13642
IHRlbXBvcmFyeQ== 13643
aXJlYmFzZQ== 13644
c3RyYQ== 13645
5pe2 13646
6LQ= 13647
KGxhYmVs 13648
b3Vw 13649
IHRvcGljcw== 13650
IHBvcnRpb24= 13651
aWRvcw== 13652
IEpld2lzaA== 13653
IHJlY292ZXJ5 13654
NjUw 13655
IHN0YW5kcw== 13656
I1s= 13657
IGFmdGVybm9vbg== 13658
IEFydGljbGU= 13659
X2F0dA== 13660
IGV4cGxhbg== 13661
IFBhaw== 13662
LnNldE9uQ2xpY2tMaXN0ZW5lcg== 13663
LmNoaWxkcmVu 13664
IGlr 13665
Kyg= 13666
bGFn 13667
IGRpc2s= 13668
IGNvbnRyb3ZlcnM= 13669
Ij4m 13670
YXNw 13671
IHdpZQ== 13672
IEF1c3RyYWxpYW4= 13673
IFlvdVR1YmU= 13674
QXR0cg== 13675
Y29udGFpbnM= 13676
ZHVjZQ== 13677
IE1hdHQ= 13678
MzQw 13679
YXRlcm4= 13680
IHZvbHVudGU= 13681
IG5ld3Nw 13682
VlA= 13683
b2x0aXA= 13684
IGRlbGVnYXRl 13685
X21ldGE= 13686
IGFjY3VyYXRl 13687
IEV4YW1wbGU= 13688
JSw= 13689
IERhaWx5 13690
IGNhYmlu 13691
IFNX 13692
IGxpbWl0cw== 13693
a2lw 13694
IGFybXk= 13695
IGVuZGluZw== 13696
IGJvc3M= 13697
IERpYWxvZw== 13698
QWxzbw== 13699
PSIjIg== 13700
b3JkYW4= 13701
cm93c2U= 13702
LW1pbg== 13703
ICIm 13704
X2xvYw== 13705
VVg= 13706
IGRldmVsb3BlcnM= 13707
IGFjY3VyYWN5 13708
IG1haW50ZW5hbmNl 13709
IGhlYXY= 13710
IGZpbHRlcnM= 13711
LlRvb2xTdHJpcA== 13712
IG5hcnI= 13713
IEVtcA== 13714
T1JERVI= 13715
IE1vYmlsZQ== 13716
LlNlcmlhbA== 13717
Lm91dHB1dA== 13718
MjQ0 13719
LmNvbA== 13720
TWF0ZXJpYWw= 13721
dW1h 13722
IGNvbnN1bWVycw== 13723
c2hpZnQ= 13724
IHB1ZWQ= 13725
IG1pbmk= 13726
Y29sbGVjdGlvbg== 13727
IGthbg== 13728
LmNlbnRlcg== 13729
SGlzdG9yeQ== 13730
IGJlbmNo 13731
KCkpOw== 13732
aXRvcmllcw== 13733
IGNyb3dk 13734
X2NhbGw= 13735
IHBvd2Vycw== 13736
LUU= 13737
IGRpc21pc3M= 13738
IHRhbGtz 13739
IENoYW5uZWw= 13740
Zm9yd2FyZA== 13741
X2NvbnRyb2w= 13742
L3NyYw== 13743
aWVzdA== 13744
KioqKioqKioqKioqKioqKioqKioqKioq 13745
IGJldGE= 13746
KGNvbG9y 13747
X09CSkVDVA== 13748
IEFwaQ== 13749
IGVmZmVjdGl2ZWx5 13750
Q2FtZXJh 13751
c2Q= 13752
dXNzeQ== 13753
Mjkw 13754
RGljdA== 13755
IEVmZmVjdA== 13756
aWJpbGl0aWVz 13757
IHJldHVybmluZw== 13758
IEZhcg== 13759
ICcnKQ== 13760
IG1vZHVsZXM= 13761
MjE5 13762
aWxhdGlvbg== 13763
ICgl 13764
VFJHTA== 13765
IHN0b3Jt 13766
b25uYQ== 13767
IEVYUA== 13768
IHNwb25z 13769
IGRpc3Bs 13770
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 13771
ZmFsbA== 13772
5Yw= 13773
aWduS2V5 13774
X1VT 13775
ZXRyaWNz 13776
IGhhbmRsZXM= 13777
VEw= 13778
X2Ftb3VudA== 13779
b3dh 13780
YnJhbmQ= 13781
IFRvb2w= 13782
IHVzdWFs 13783
Llo= 13784
Y3JlbWVudA== 13785
YWRpdW0= 13786
c3RvY2s= 13787
IHNlcnZpbmc= 13788
IEJvbg== 13789
IGxpbmVhcg== 13790
IFRhcmdldA== 13791
IFJhZGlv 13792
SEw= 13793
U2hhZGVy 13794
b21hdGlj 13795
YWd1ZXM= 13796
aW5pdHk= 13797
ZGlmZg== 13798
X2l0ZXJhdG9y 13799
cXVvdA== 13800
ICwK 13801
Y2FsbGJhY2s= 13802
IHN5bXB0b21z 13803
W18= 13804
IEJ1bA== 13805
IEZlYg== 13806
dW5kbw== 13807
X2FjY291bnQ= 13808
IHR5cGVkZWY= 13809
0LjRgQ== 13810
dHJhcw== 13811
VXNlcklk 13812
IFBlbm4= 13813
IFN1cHJlbWU= 13814
fT4= 13815
dXNlcklk 13816
MzI3 13817
IEtpbQ== 13818
IGdh 13819
IGFydGlzdHM= 13820
5bg= 13821
IEFic3RyYWN0 13822
b2tlbW9u 13823
IGhhbQ== 13824
b3ZhbA== 13825
IGNoYQ== 13826
YXRlbg== 13827
5YY= 13828
Rml4ZWQ= 13829
IHZ1bG5lcg== 13830
IFBhcmFtZXRlcnM= 13831
cXVhbnRpdHk= 13832
LkNsZWFy 13833
U2VydmxldFJlcXVlc3Q= 13834
IHlh 13835
IHNvdWw= 13836
MDgw 13837
dHJhbnNhY3Rpb24= 13838
IHNvbG8= 13839
IHBhaXJz 13840
5pQ= 13841
IEdyZQ== 13842
X3dvcmQ= 13843
IEND 13844
IGdp 13845
emll 13846
IHNjaGVkdWxlZA== 13847
cm90YXRpb24= 13848
Z3lwdA== 13849
dWxvdXM= 13850
Ojpf 13851
IEVsbA== 13852
PCE= 13853
CQkgIA== 13854
bHA= 13855
YWhh 13856
Q29weXJpZ2h0 13857
MDA5 13858
IGRyYW0= 13859
MjUx 13860
IGRpYWdyYW0= 13861
IE1lbQ== 13862
IGdhcmRlbg== 13863
Q29tcA== 13864
IGF0dGVtcHRz 13865
dWZmaXg= 13866
Pigp 13867
IHBoaWxvc29waA== 13868
X3JlbA== 13869
5bw= 13870
IHN2 13871
LnNlY29uZA== 13872
YW50bw== 13873
Lkpzb24= 13874
IFRlbGU= 13875
X2xvY2Fs 13876
X3NlbmQ= 13877
IGFzcGVjdHM= 13878
7Jc= 13879
SUJMRQ== 13880
IHJhaWw= 13881
IHdpZGVseQ== 13882
YXNoZWQ= 13883
aWFy 13884
aW5m 13885
dXBwZXI= 13886
ZGphbmdv 13887
X3Jlc3VsdHM= 13888
aXNzaW5n 13889
IGVxdWl2YWxlbnQ= 13890
T1VORA== 13891
IHR5 13892
IHBvdGVudGlhbGx5 13893
QWR2ZXJ0aXNlbWVudA== 13894
MjM4 13895
IFJlY29yZA== 13896
Mzgw 13897
cmVzZW50YXRpb24= 13898
X3dpZGdldA== 13899
b3VuZGluZw== 13900
IHJlbGlnaW9u 13901
IGNvbnNj 13902
IExpbQ== 13903
LmFt 13904
SHRtbA== 13905
ICc6 13906
UEFUSA== 13907
X3NwZWM= 13908
b3J0ZWQ= 13909
aWRhZGVz 13910
X3NoYXBl 13911
IGtlZXBz 13912
LlNhdmU= 13913
IExvYw== 13914
b3Jp 13915
IFRFU1Q= 13916
dW5pY2lw 13917
IHJlZ2lvbnM= 13918
IGJlbGlldmVz 13919
L2Vu 13920
cG9zaXRl 13921
eyc= 13922
cHJlcGFyZQ== 13923
X2NvbnN0 13924
c2FtcGxl 13925
IFdpbGxpYW1z 13926
IHN0cnQ= 13927
X0dldA== 13928
IEFuZHJldw== 13929
LmFjdGl2ZQ== 13930
IGxheWVycw== 13931
VmlzdWFsU3R5bGU= 13932
YXp5 13933
IEtu 13934
IGFjaWQ= 13935
IEFzaWE= 13936
IGV4Y2Vzcw== 13937
CW15 13938
IGtleWJvYXJk 13939
ZW5zdXM= 13940
IGNyZXc= 13941
IG1pc3NlZA== 13942
bWFzdGVy 13943
IFdpbGQ= 13944
IG5ld2x5 13945
IHdpbm5lcg== 13946
IHN0dWI= 13947
aWNvZGU= 13948
Lm1vdmU= 13949
RG9tYWlu 13950
IFNhcg== 13951
IGZvcmVzdA== 13952
TEVE 13953
Y2xhaW1lcg== 13954
LmV4aXQ= 13955
IFdpbmRvdw== 13956
IHJlc2lzdGFuY2U= 13957
IENIRUNL 13958
KCIt 13959
IFJ5YW4= 13960
IHBpcGU= 13961
IGNvYXN0 13962
REVG 13963
Ly8h 13964
X29mZg== 13965
ZXhpdA== 13966
IHVsdGltYXRlbHk= 13967
aW1pdGl2ZQ== 13968
IEtlZXA= 13969
IGhpc3RvcmljYWw= 13970
IGFueXdheQ== 13971
IEphY2tzb24= 13972
b2NrZXI= 13973
RVJO 13974
IFVJTlQ= 13975
eW50YXg= 13976
RVJZ 13977
aXNtcw== 13978
IGNu 13979
IG9jY3Vycw== 13980
IDs7 13981
VGV4dFZpZXc= 13982
QUU= 13983
L2ltZw== 13984
IHllc3RlcmRheQ== 13985
LWRlZmF1bHQ= 13986
IHRpbnk= 13987
IHByb2M= 13988
IGFsaXZl 13989
IFJFRw== 13990
LnRo 13991
ZWFyaW5n 13992
LmdldExvZ2dlcg== 13993
PGxpbms= 13994
X2xvZ2lu 13995
Rm9sZGVy 13996
YWJj 13997
bHlwaGljb24= 13998
0L3Qvg== 13999
IG5vdGljZWQ= 14000
b2RpZ28= 14001
IGVkaXRpb24= 14002
aW1hdG9y 14003
LkVuYWJsZWQ= 14004
LnBhcnNlSW50 14005
IHlhcmRz 14006
CQkJCQkJCQkJCQkJ 14007
IHZlcmJvc2U= 14008
0LvRjw== 14009
X0JZ 14010
LmxvZ2lu 14011
Lio7Cg== 14012
IE1pZA== 14013
w6llcw== 14014
IGdsbw== 14015
IGJ1aWxkaW5ncw== 14016
IHpl 14017
IEl0ZXI= 14018
IHR1YmU= 14019
IFBvdA== 14020
XE0= 14021
MjUz 14022
PHRo 14023
YnJpZGdl 14024
IFNjcmlwdA== 14025
IE1vZHVsZQ== 14026
IHZhY2M= 14027
IGluc3RhbGxhdGlvbg== 14028
dnk= 14029
VmlzdWFsU3R5bGVCYWNrQ29sb3I= 14030
IFNN 14031
LnRvdGFs 14032
NjQw 14033
YmF0 14034
IGZpbmRz 14035
IGF0bW9z 14036
U3Vidmlldw== 14037
aXphcmQ= 14038
IHJlcGxhY2VtZW50 14039
bGljYXRlZA== 14040
YXBpcw== 14041
IGxvZ2dlZA== 14042
IExlZnQ= 14043
R3Vp 14044
X1R5cGU= 14045
dG0= 14046
UGFk 14047
IGhvdXNlaG9sZA== 14048
IHJlbGU= 14049
IHByb3Bvc2Fs 14050
X0NMQVNT 14051
MjQz 14052
Ojo6Og== 14053
IGluZnJhc3RydWN0dXJl 14054
SW5qZWN0 14055
L2h0bWw= 14056
MjI2 14057
IGFkcw== 14058
aXp6YQ== 14059
IG1n 14060
Y3RyaW5l 14061
JQo= 14062
PGh0bWw= 14063
LWltYWdl 14064
IGF0dG9ybmV5 14065
PG0= 14066
KCcs 14067
IGNhbm4= 14068
IHByaW50bG4= 14069
b29zZQ== 14070
IHllbGxvdw== 14071
LmV4cA== 14072
cGF5bWVudA== 14073
IHRhYmxlVmlldw== 14074
YXdheQ== 14075
IG9wcG9zaXRpb24= 14076
IEFnYWlu 14077
IEhhbmRsZQ== 14078
IGV4Y2x1c2l2ZQ== 14079
aW5hcg== 14080
w6ly 14081
0L7QsQ== 14082
IENPREU= 14083
ZW1wb3Jhcnk= 14084
IHJlYWN0 14085
cGlwZQ== 14086
MjM2 14087
Y3o= 14088
LmFjdGl2aXR5 14089
IGxhcmdlbHk= 14090
IGRpc3M= 14091
YXh5 14092
ZXNpcw== 14093
IFJlbg== 14094
IGNvcm4= 14095
LlVzZVZpc3VhbFN0eWxlQmFja0NvbG9y 14096
ZGF5cw== 14097
IGZydWl0 14098
SW5zZXJ0 14099
X2VuYw== 14100
RXN0 14101
X2RlYw== 14102
IEx1Yw== 14103
IMO8YmVy 14104
cGFyYW1ldGVycw== 14105
UEVSVA== 14106
ZXhwcmVzcw== 14107
X3Byb2ZpbGU= 14108
VW5rbm93bg== 14109
IHJldm9sdXRpb24= 14110
LmFkZHJlc3M= 14111
X3JlcXVpcmU= 14112
IHVuaWZvcm0= 14113
IFBhY2s= 14114
bGFy 14115
IFVJVGFibGVWaWV3 14116
IGRlcGVuZHM= 14117
VmFsaWRhdGlvbg== 14118
Y29uZmlybQ== 14119
T3duZXI= 14120
IHRyaWI= 14121
aGV0 14122
IElkZQ== 14123
YW5zYXM= 14124
MjQ3 14125
TGFuZ3VhZ2U= 14126
dWV0 14127
IFBv 14128
IFN0ZXZl 14129
IGNvbnRlc3Q= 14130
X0RFRkFVTFQ= 14131
IGFwcGFyZW50bHk= 14132
UkVFTg== 14133
IGZyZXF1ZW50bHk= 14134
IHRyYWRpdGlvbg== 14135
b2NvbGF0ZQ== 14136
U0k= 14137
IEFyZ3VtZW50 14138
Rm9jdXM= 14139
ZXJ0ZQ== 14140
IExheW91dA== 14141
IGR4 14142
IGdlbmVyYXRvcg== 14143
IFdhaXQ= 14144
UG9saWN5 14145
bGlnaHRz 14146
LkV4ZWN1dGU= 14147
NTU1 14148
UHk= 14149
IGJlZHJvb20= 14150
ZWRh 14151
cmFpZA== 14152
CXNpemU= 14153
IGFuY2llbnQ= 14154
IHB1bXA= 14155
IGR3 14156
ICghKA== 14157
IHNwZWNpZnk= 14158
KHN0YXR1cw== 14159
IEZCSQ== 14160
LmV4Y2VwdGlvbg== 14161
IHJlbWFyaw== 14162
bHltcA== 14163
YW50ZWU= 14164
VXBsb2Fk 14165
ZXJuZXQ= 14166
6aE= 14167
aW5lbnQ= 14168
IFJlbmRlcg== 14169
ZG0= 14170
IE1lbW9yeQ== 14171
cmljaA== 14172
IFRvb2xz 14173
IGtuZQ== 14174
IHBlcm0= 14175
YmFk 14176
IGRpbm5lcg== 14177
LnJlc2V0 14178
IGpMYWJlbA== 14179
RmVhdHVyZQ== 14180
LlNlcnZpY2U= 14181
ICh7Cg== 14182
IHJlZmVycmVk 14183
LmNsYXNzTGlzdA== 14184
MjQ4 14185
IGluaXRXaXRo 14186
IFRleHRWaWV3 14187
IG5laXRoZXI= 14188
IGNvdW50eQ== 14189
ICJ7 14190
56c= 14191
IHRhY2s= 14192
Y2xhc3NOYW1l 14193
IFVTRVI= 14194
IHJlbmV3 14195
YGA= 14196
Z2V0TmFtZQ== 14197
IGJyb3du 14198
RXJyb3Jz 14199
ZXJ0bw== 14200
IHN1c3RhaW4= 14201
U08= 14202
bGV0ZXM= 14203
IEludmFsaWQ= 14204
MjQ2 14205
MjI3 14206
IGVuZW1pZXM= 14207
dW5nZQ== 14208
IGV4aXN0ZW5jZQ== 14209
ZXJyYQ== 14210
CiAgCg== 14211
dXRvcmlhbA== 14212
I2E= 14213
cGF5 14214
Y2hhcmdl 14215
IElyZQ== 14216
YXRlc3Q= 14217
IGV4cGxvcw== 14218
IGZpcmVk 14219
TkVS 14220
IFR5 14221
aWNpb24= 14222
VXJp 14223
IG9idmlvdXNseQ== 14224
IENvbHVt 14225
ICcr 14226
IERldmljZQ== 14227
LXJlbGF0ZWQ= 14228
X0FSRw== 14229
IHZvcg== 14230
IExlc3Nlcg== 14231
X09Q 14232
U2VyaWFsaXplcg== 14233
IHVwZ3JhZGU= 14234
TGlnaHQ= 14235
IGNvZGVz 14236
Kys7DQo= 14237
IHdyaXRlcw== 14238
Zm9vZA== 14239
IMOpdA== 14240
QHNlY3Rpb24= 14241
IHRyYWNrcw== 14242
IHNlcmlvdXNseQ== 14243
Y2h0 14244
NDMw 14245
KHNpemVvZg== 14246
IGltbWVkaWF0ZQ== 14247
IHNjaWVudGlzdHM= 14248
IHsk 14249
X25l 14250
LkFuY2hvclN0eWxlcw== 14251
IGFjY29tbW9k 14252
IEhhcnJ5 14253
IHNpZ2h0 14254
IFBhbGVzdA== 14255
ZXJzaXN0ZW50 14256
INGD 14257
LWlucHV0 14258
IGNvb3JkaW5hdGVz 14259
wrc= 14260
MjI4 14261
V2VsY29tZQ== 14262
LmNvbmY= 14263
IGdyZXc= 14264
IGJvbGQ= 14265
IENQVQ== 14266
KG15 14267
IHBlcmZlY3RseQ== 14268
IG1vbWVudHM= 14269
IE1vdmll 14270
LWRhdGE= 14271
eXN0YWw= 14272
X1dJRFRI 14273
MjYy 14274
IFNjcmVlbg== 14275
5p0= 14276
IGRpc2Fw 14277
IHJlZHVjdGlvbg== 14278
LkdldENvbXBvbmVudA== 14279
X01PRFVMRQ== 14280
IGdlbmVyaWM= 14281
IGR5 14282
YWxsZXI= 14283
IGN1cmw= 14284
IEJvZHk= 14285
IGJhbmtz 14286
LHQ= 14287
YXZn 14288
IGV2aWw= 14289
IG1hbnVmYWN0dXJlcg== 14290
IHJlY2VpdmVy 14291
Q29sdW1ucw== 14292
IGluZ3JlZGllbnRz 14293
CW91dA== 14294
cXVlcw== 14295
LkxvYWQ= 14296
IHNsb3dseQ== 14297
IFRvd24= 14298
IENlbGw= 14299
X25vcm1hbA== 14300
X3ByZWZpeA== 14301
IEFsZXJ0 14302
KCJ7 14303
w6Ry 14304
4oCcVGhl 14305
IE1E 14306
IGNvdXJzZXM= 14307
YXRoYW4= 14308
6Zk= 14309
b2Nj 14310
IFNFUg== 14311
ZXNpZ24= 14312
QWRkcg== 14313
PVsn 14314
KCIuLw== 14315
XX0= 14316
LmZvbnQ= 14317
IEluc3RhZ3JhbQ== 14318
IEJvcmRlcg== 14319
b2Rh 14320
IGhhbGw= 14321
IHJ1bQ== 14322
X2JpdA== 14323
IHNhdmluZw== 14324
X2Rvd24= 14325
UmFuZG9t 14326
X3JlZ2lzdGVy 14327
KENvbnRleHQ= 14328
IG9wcG9zaXRl 14329
Um9vbQ== 14330
WUVT 14331
0LDQvdC4 14332
IGVuam95ZWQ= 14333
X3J1bg== 14334
Q2xlYXI= 14335
4oCY 14336
IEZvcmQ= 14337
b25pYw== 14338
b3N0ZW4= 14339
Il0p 14340
X2F1dGg= 14341
Ly8NCg== 14342
IHN1ZmZpY2llbnQ= 14343
TEVT 14344
IHBoZW4= 14345
IG9o 14346
X2Nzdg== 14347
IHJvdXRpbmU= 14348
LkFyZUVxdWFs 14349
YXlsb3I= 14350
IGJhc2tldA== 14351
X0NPTU0= 14352
cnlwdGVk 14353
U2lt 14354
IFNob3A= 14355
IHN0dWRpbw== 14356
YXRvcw== 14357
KFc= 14358
W3N0cmluZw== 14359
w6R0 14360
b2dh 14361
IHNocg== 14362
IHNpY2s= 14363
QW5vdGhlcg== 14364
IGRvb3Jz 14365
X05F 14366
IFRIUkVF 14367
Lm9yZGVy 14368
cmF6aWw= 14369
IG1hcHM= 14370
X1RSVUU= 14371
dHJhbnNsYXRl 14372
IG5lYXJieQ== 14373
MjY1 14374
IG5hY2g= 14375
TE9BVA== 14376
YmF0Y2g= 14377
MjI5 14378
IGx1eA== 14379
YXNoZXM= 14380
YW5nZXJz 14381
4oCm4oCm 14382
X0VWRU5U 14383
X1VQ 14384
IGFjdHM= 14385
aW52 14386
X01FVEhPRA== 14387
Y2Npb24= 14388
IHJldGFpbg== 14389
dXRjaA== 14390
INCx 14391
IGtub3dpbmc= 14392
IHJlcHJlc2VudGluZw== 14393
Tk9U 14394
cG5n 14395
Q29udHJhY3Q= 14396
IHRyaWNr 14397
IEVkaXRpb24= 14398
dXBsaWNhdGU= 14399
IGNvbnRyb2xsZWQ= 14400
Y2Zn 14401
amF2YXNjcmlwdA== 14402
IG1pbGs= 14403
V2hpdGU= 14404
U2VxdWVuY2U= 14405
YXdh 14406
IGRpc2N1c3NlZA== 14407
NTAx 14408
IEJ1c2g= 14409
IFlFUw== 14410
LmZhY3Rvcnk= 14411
dGFncw== 14412
IHRhY3Q= 14413
IHNpZA== 14414
JCQ= 14415
IEVudW0= 14416
Mjc1 14417
IGZyYW1lcw== 14418
fSk7 14419
IHJlZ3Vs 14420
J107DQo= 14421
UmVnaW9u 14422
MzIx 14423
ZmZm 14424
IGNybw== 14425
KGNvbQ== 14426
PSIr 14427
U3R1ZGVudA== 14428
IGRpc2FwcG9pbnQ= 14429
UkVTVUxU 14430
Q291bnRlcg== 14431
IGJ1dHRlcg== 14432
IEhh 14433
IERpZ2l0YWw= 14434
IGJpZA== 14435
Ij57ew== 14436
aW5nZXJz 14437
IENvdW50cnk= 14438
X3RwbA== 14439
Il0pCg== 14440
L2s= 14441
ZGF0aW5n 14442
OiM= 14443
IERBVEE= 14444
eW5jaHJvbg== 14445
X2JvZHk= 14446
b2xseXdvb2Q= 14447
IHZhbG9y 14448
aXBpZW50 14449
b2Z0 14450
VUJM 14451
ZG9jcw== 14452
IHN5bmNocm9u 14453
IGZvcm1lZA== 14454
cnVwdGlvbg== 14455
IGxpc3Rh 14456
UmVxdWVzdE1hcHBpbmc= 14457
IHZpbGxhZ2U= 14458
IGtub2Nr 14459
b2Nz 14460
Ins= 14461
X2ZsYWdz 14462
IHRyYW5zYWN0aW9ucw== 14463
IGhhYml0 14464
IEpl 14465
ZWRlbg== 14466
IGFpcmNyYWZ0 14467
aXJr 14468
IEFC 14469
IGZhaXJseQ== 14470
LmludGVy 14471
LkFjdA== 14472
IGluc3RydW1lbnQ= 14473
cmVtb3ZlQ2xhc3M= 14474
LmNvbW1hbmQ= 14475
0Yk= 14476
CW1lbQ== 14477
KG1pbg== 14478
IG90 14479
IGNvbGxl 14480
PXM= 14481
dGltZW91dA== 14482
IGlkcw== 14483
IE1hdGNo 14484
aWpu 14485
emVybw== 14486
NDEw 14487
IG5ldHdvcmtz 14488
Lmdvdg== 14489
IGludGVs 14490
IHNlY3Rpb25z 14491
b3V0aW5l 14492
KGNtZA== 14493
KGRpcg== 14494
IExJQUJJTElUWQ== 14495
IEJsb2c= 14496
IGJyaWRnZQ== 14497
MzA4 14498
IENW 14499
Y29udmVydA== 14500
ICIpCg== 14501
IEJlcm4= 14502
X1BP 14503
ZXZhbA== 14504
KHNldA== 14505
dG9vbA== 14506
IHBheW1lbnRz 14507
QmVoYXZpb3Vy 14508
IGNvbmNyZXRl 14509
IGVsaWc= 14510
IGFjY2VsZXI= 14511
IGhvbGU= 14512
X28= 14513
VEVHRVI= 14514
IGdyYXBoaWNz 14515
T3du 14516
Rm9ybWF0dGVy 14517
b25kZXI= 14518
IHBhY2thZ2Vz 14519
L2E= 14520
IEtub3c= 14521
T3JEZWZhdWx0 14522
IGR1dHk= 14523
V2FpdA== 14524
0L3QsA== 14525
X3JlY29yZA== 14526
W3Q= 14527
TWVzaA== 14528
IG9uZ29pbmc= 14529
LmJlYW5z 14530
IHRhbg== 14531
IGludGVycHJldA== 14532
YXN0ZXJz 14533
UVVBTA== 14534
IGxlZ3M= 14535
XFJlcXVlc3Q= 14536
LWZpbGU= 14537
X211dGV4 14538
IFNhaW50 14539
Ly8j 14540
IHByb2hpYg== 14541
KGluZm8= 14542
Oj0= 14543
bGludXg= 14544
IGJsbw== 14545
b3RpYw== 14546
CWZpbmFs 14547
X2V4cA== 14548
IFN0b3A= 14549
YXBpbmc= 14550
KHNhdmVk 14551
X3B1c2g= 14552
IGVhc2U= 14553
X0ZS 14554
cG9uc2l2ZQ== 14555
c3RyY21w 14556
OgoKCgo= 14557
5Lu2 14558
b2xp 14559
IGV4dHJlbWU= 14560
IHByb2Zlc3Nvcg== 14561
SW1hZ2Vz 14562
LklPRXhjZXB0aW9u 14563
IGFkZHJlc3Nlcw== 14564
cGxlbWVudGVk 14565
IGluY29ycG9y 14566
IHVzZUVmZmVjdA== 14567
X09G 14568
IERh 14569
bm9tYnJl 14570
SVJTVA== 14571
IGRpc2NyaW0= 14572
IGNvbXBlbnM= 14573
Z3JlZ2F0ZQ== 14574
YW5jZWxs 14575
YWNoZXM= 14576
IENyaXRlcmlh 14577
JHJlc3VsdA== 14578
RGVzdHJveQ== 14579
IHNlY29uZGFyeQ== 14580
V2F0Y2g= 14581
IFNlbQ== 14582
IE1jQw== 14583
IGFjYWRlbWlj 14584
VXBwZXI= 14585
Ojp+ 14586
dXRyYWw= 14587
IERvZw== 14588
YWRlZA== 14589
MjM3 14590
VmFsaWRhdG9y 14591
IGRlcml2ZWQ= 14592
IHNldFRpbWVvdXQ= 14593
IEtlbg== 14594
IHR5cGljYWw= 14595
IEJvYg== 14596
IGJvdW5kcw== 14597
IFNlYXNvbg== 14598
IGNyYXp5 14599
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 14600
LXJvdXRlcg== 14601
aXR0ZXN0 14602
IE1pcg== 14603
IGVtb3Rpb25hbA== 14604
LHY= 14605
Y24= 14606
L3N0 14607
5b0= 14608
b25vbQ== 14609
IGRlY2xhcmVk 14610
Pi4= 14611
YWlsaW5n 14612
IC8qPDw8 14613
IG5vcm1hbGx5 14614
KE1l 14615
ZXZpbg== 14616
bGlrZWx5 14617
IHBvaW50ZWQ= 14618
IFN0YWNr 14619
IHdhbGxz 14620
LlZlY3Rvcg== 14621
bWVhbg== 14622
XV0K 14623
IGxpc3RlbmluZw== 14624
YWR2 14625
IHN3YXA= 14626
SUZU 14627
2Ko= 14628
LmFyZ3Y= 14629
dWxz 14630
PG9wdGlvbg== 14631
bm90YXRpb25z 14632
IGVtYWlscw== 14633
IFVrcg== 14634
YXN0YQ== 14635
IFRodXM= 14636
IFN0b25l 14637
IGFwcGVhbA== 14638
LuKAmQ== 14639
IHJlZ3VsYXRpb25z 14640
UHJlZmVyZW5jZXM= 14641
IFBob25l 14642
dWxm 14643
IERS 14644
IHRlY2hub2xvZ2llcw== 14645
IHBhcmFncmFwaA== 14646
IG5lY2Vzc2FyaWx5 14647
Mzcw 14648
MDMw 14649
LmVhY2g= 14650
PGZsb2F0 14651
cmVzYQ== 14652
IHVuZGVyc3Q= 14653
IGZpbmdlcg== 14654
cHJlc3NlZA== 14655
LWJ5 14656
aWZmZXI= 14657
d2F0Y2g= 14658
IEJh 14659
QUlN 14660
IHdlaWdodHM= 14661
IFJvbg== 14662
Jyl9fQ== 14663
W3NlbGY= 14664
LS0tLS0tLS0tLQo= 14665
cGVyaW1lbnQ= 14666
IHRvU3RyaW5n 14667
eGlj 14668
IENhbWVyYQ== 14669
IQoKCgo= 14670
YXVyYW50 14671
UHJlZml4 14672
IGluc3RpdHV0aW9ucw== 14673
OmludA== 14674
IGV4cG9zdXJl 14675
cGF0dGVybg== 14676
IExpbnV4 14677
Lm51bWJlcg== 14678
cmVkaWVudA== 14679
QXJndW1lbnRFeGNlcHRpb24= 14680
IENoaWVm 14681
In0s 14682
IGVsZWN0cm9uaWM= 14683
cm9uZw== 14684
ZXJk 14685
c3BOZXQ= 14686
cmFpdA== 14687
Lycs 14688
IE9oaW8= 14689
Q29udHJvbGxlcnM= 14690
IGNvbnRpbnVpbmc= 14691
IFRlbXBsYXRl 14692
IEV0aA== 14693
c3o= 14694
L2Vudg== 14695
RW52 14696
JS4= 14697
YXJ0ZXJz 14698
KSgo 14699
IFRBQkxF 14700
IMOu 14701
cGVyYXR1cmU= 14702
cHJvZ3Jlc3M= 14703
UHJlcw== 14704
6rA= 14705
aW1wbGVtZW50YXRpb24= 14706
IGJpZW4= 14707
IHN0cmVldHM= 14708
X01TRw== 14709
TmV3cw== 14710
IyMj 14711
Oi8= 14712
IGN1dHRpbmc= 14713
eEI= 14714
cmVzc2Vk 14715
X0VOQUJMRQ== 14716
bGFi 14717
IGNhdXNpbmc= 14718
XSkpOwo= 14719
YnJh 14720
eEZGRkY= 14721
aWxseQ== 14722
cGxldGlvbg== 14723
d2lsbA== 14724
X2Jhcg== 14725
IHN0cnVjdHVyZXM= 14726
IEltcA== 14727
24w= 14728
IDw+ 14729
IC0tLS0tLS0tLS0tLS0tLS0= 14730
X0JVRkZFUg== 14731
LmRpcg== 14732
IHBsYWlu 14733
IHBlZXI= 14734
MjQ5 14735
Z2c= 14736
b2ludHM= 14737
IHNvbWV3aGF0 14738
IHdldA== 14739
IGVtcGxveW1lbnQ= 14740
IHRpY2tldHM= 14741
aXJtcw== 14742
IHR1cGxl 14743
c2lz 14744
JHNxbA== 14745
cmln 14746
IGNvbnZlcnNpb24= 14747
IGdlcw== 14748
IGNvbmZpZ3VyZQ== 14749
ZWdy 14750
IENh 14751
IF9fKCc= 14752
b3VzdG9u 14753
LnRva2Vu 14754
QmxhY2s= 14755
IG1hZ2F6aW5l 14756
QVc= 14757
LklO 14758
b3Npbmc= 14759
IGJyb2tl 14760
IENydQ== 14761
REVMRVRF 14762
IGRlc3Ryb3llZA== 14763
KE1hdGg= 14764
IGFwcHJvdmFs 14765
LWRvbQ== 14766
IElJSQ== 14767
dGFibGVWaWV3 14768
IGRlc2lnbnM= 14769
IGNydXNoaW5n 14770
IGNvbnNlbnQ= 14771
ZGlybmFtZQ== 14772
b21w 14773
IGNyeXB0 14774
Pyg= 14775
b3JvdWdo 14776
MzA3 14777
Lm8= 14778
CWxpc3Q= 14779
YW1zdW5n 14780
LiIiIgo= 14781
ZXJyaW5n 14782
R29vZ2xl 14783
X3BhaXI= 14784
X0lOSVQ= 14785
cmVtYXJrcw== 14786
IGdlYXI= 14787
RmlsbA== 14788
bGlmZQ== 14789
fSIpCg== 14790
IHN1aXRhYmxl 14791
IHN1cnByaXNlZA== 14792
X1JFUVVFU1Q= 14793
IG1hbmlmZXN0 14794
YXR0ZW4= 14795
IGZydXN0cg== 14796
b3ZlbWVudA== 14797
LmNsaWNr 14798
IGlp 14799
IGV4cGFuc2lvbg== 14800
aWdz 14801
UGFyc2U= 14802
LlJlZ3VsYXI= 14803
Um9i 14804
X2xheW91dA== 14805
7KA= 14806
IHRyYW5zbGF0aW9u 14807
IEJlYXV0 14808
QmVzdA== 14809
X0NPTE9S 14810
PGxhYmVs 14811
IGxpcXVpZA== 14812
SVRT 14813
IHByb2Q= 14814
MjM5 14815
IG9wZXJhdGU= 14816
VUlLaXQ= 14817
IG5hdHVy 14818
YXJndW1lbnQ= 14819
X2RldGFpbA== 14820
IENlbnRyZQ== 14821
ICItLQ== 14822
IH19Ig== 14823
bG9jYWxl 14824
LnR2 14825
X3NlcQ== 14826
IHVwY29taW5n 14827
Q2hhcnQ= 14828
IERpdmlzaW9u 14829
IGNsaW5pY2Fs 14830
Q29tcGFueQ== 14831
U2VwYXI= 14832
bGFz 14833
IEh1bg== 14834
OnM= 14835
IGhlYWRpbmc= 14836
0L7Qsw== 14837
ICIiKTsK 14838
W2lk 14839
Ymlh 14840
IHN0cmV0Y2g= 14841
aWNpZGU= 14842
IHJlcHJvZHU= 14843
LnByb2plY3Q= 14844
bGVnZW5k 14845
ZW5kZXJz 14846
IHJlc3BvbnNlcw== 14847
IG9udA== 14848
cml0aWNhbA== 14849
IHJlZnVnZQ== 14850
IExp 14851
IDoKCg== 14852
IFRocmVl 14853
LmNvbnRyb2xsZXI= 14854
X0lOREVY 14855
X0ZPUg== 14856
XE1vZGVscw== 14857
amF4 14858
CWV4aXQ= 14859
IOKW 14860
IGNvdmVycw== 14861
CXk= 14862
LS4= 14863
SU5ET1c= 14864
IGZhaWxz 14865
aW5jbHVkZXM= 14866
IGZhdWx0 14867
NDQw 14868
IGx5 14869
NDQ0 14870
w7Fv 14871
LnNsaWNl 14872
SUxFRA== 14873
IFB1cg== 14874
IEFzaWFu 14875
X2JhdGNo 14876
Lk1heA== 14877
dmw= 14878
IENPUFlSSUdIVA== 14879
IGdpYW50 14880
IE1hbnVhbA== 14881
IENvcHk= 14882
Q2xhc3NOYW1l 14883
SGVhbHRo 14884
Q3Vyc29y 14885
SUJPdXRsZXQ= 14886
IHR3ZQ== 14887
5rM= 14888
X2xhYmVscw== 14889
IGNvbGxlY3RlZA== 14890
IGZ1cm5pdHVyZQ== 14891
IGRlYWxpbmc= 14892
Q29udHJvbHM= 14893
IEhvdGVs 14894
Y2tz 14895
IGNob3Nl 14896
4pSA 14897
b2Rk 14898
U1I= 14899
2Yo= 14900
7IQ= 14901
IGFjY29yZA== 14902
IE1vdmU= 14903
IE1vZGU= 14904
IE1vY2s= 14905
IHRocmVhZHM= 14906
KysrKw== 14907
IE9wdGlvbnM= 14908
UmVmcmVzaA== 14909
IERpZA== 14910
J10tPg== 14911
dWNj 14912
X2NoYW5uZWw= 14913
LmFicw== 14914
IHt9LAo= 14915
IFdhbA== 14916
ZXJpb3I= 14917
IG1haW5seQ== 14918
IERyaXZlcg== 14919
Tm90Rm91bmRFeGNlcHRpb24= 14920
IGNvdW50cw== 14921
ZWFt 14922
ICY9 14923
UXVlc3Rpb24= 14924
IEFsaQ== 14925
IGFueW1vcmU= 14926
ZGV0YWls 14927
dGFpbA== 14928
IG1pbGU= 14929
IEZhaXI= 14930
IHNvcnJ5 14931
IHN1cnJvdW5kaW5n 14932
IGFkbQ== 14933
RGV2 14934
IG1hcmlqdWFuYQ== 14935
IFNvdW5k 14936
IEFzaA== 14937
RkQ= 14938
VGVhbQ== 14939
LnBvcnQ= 14940
IFtdCgo= 14941
dWJibGU= 14942
IGFzYw== 14943
IGludGVudGlvbg== 14944
QWNj 14945
Y2hp 14946
dXN0ZXJz 14947
IGluc3BpcmVk 14948
c2Vn 14949
Q0xV 14950
IG1hbmlw 14951
TWV0YWRhdGE= 14952
Q29ubmVjdA== 14953
IEJlaA== 14954
IGZpbmRpbmdz 14955
IGFzc2VtYmx5 14956
d29ybGQ= 14957
IHJlbWFpbmVk 14958
IHVpZA== 14959
KC4= 14960
IG14 14961
TG9vcA== 14962
CgoKCgo= 14963
IGZhbnRhc3RpYw== 14964
d2hv 14965
YWtp 14966
IEJhc2lj 14967
IFlldA== 14968
IFVzZXJz 14969
aWtpcA== 14970
IGhlYWRz 14971
IE1pY2hpZ2Fu 14972
X2l0 14973
IFRvcm9udG8= 14974
IHJlY29yZGluZw== 14975
IHN1Ym1pdHRlZA== 14976
X3ZhcmlhYmxl 14977
bWVkaWF0ZQ== 14978
LmdyYXBoaWNz 14979
IHN0b29k 14980
IHJlYXI= 14981
dmVsb2NpdHk= 14982
X01FU1NBR0U= 14983
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 14984
cm9sZXM= 14985
IFRvdXI= 14986
X3llYXI= 14987
ZW5kbWVudA== 14988
YW1wcw== 14989
IElyZWxhbmQ= 14990
bWFs 14991
IHlvdW5nZXI= 14992
IHN0cnVnZ2xl 14993
IGNhYmxl 14994
IFNETA== 14995
KCct 14996
YW5lcw== 14997
IE5lZWQ= 14998
LlJvdw== 14999
UG9s 15000
IFBI 15001
X3NjcmlwdA== 15002
YWdlbQ== 15003
IEJhcw== 15004
X3NwYWNl 15005
LmxvYw== 15006
Omk= 15007
YWRy 15008
IGVuZ2luZWVyaW5n 15009
aXRlbg== 15010
KSY= 15011
IHVr 15012
IExpdHRsZQ== 15013
X0NPVU5U 15014
eEE= 15015
QXJyYXlMaXN0 15016
5o0= 15017
ICIiKQo= 15018
QW5jaG9y 15019
IGhhbmc= 15020
dHdpdHRlcg== 15021
IGNvbXBldGl0aXZl 15022
LnNyYw== 15023
44GX 15024
IHRyYW5zbGF0ZQ== 15025
IENyZWF0ZXM= 15026
b29rcw== 15027
IFJvbGw= 15028
JycnCg== 15029
L3No 15030
c29tZQ== 15031
RW5jb2Rpbmc= 15032
LnJlc29sdmU= 15033
IGRlc2lnbmVy 15034
IFN0b3JhZ2U= 15035
IHph 15036
IE5ldmVy 15037
IHNvbWV3aGVyZQ== 15038
IGJveGVz 15039
LnNvdXJjZQ== 15040
IHB5Z2FtZQ== 15041
IGdyb3du 15042
LnR3 15043
KCkpLAo= 15044
JyxbJw== 15045
IG9wcG9uZW50 15046
KHNyYw== 15047
LmxheWVy 15048
QVBQ 15049
IEFjdGl2 15050
IGd1ZXN0cw== 15051
IFZBTFVFUw== 15052
fTsKCgo= 15053
Lm5hdGl2ZQ== 15054
IGFtb3VudHM= 15055
LlJF 15056
IGNsb25l 15057
IHdlcmVu 15058
ICI8PA== 15059
X2Fj 15060
IGJyZWFraW5n 15061
IHJlbGlhYmxl 15062
LlBPU1Q= 15063
IFNreQ== 15064
ICcm 15065
IHNhdmVkSW5zdGFuY2VTdGF0ZQ== 15066
YXN0aW5n 15067
aWxsaW9u 15068
Y29tbWVudHM= 15069
dWx0eQ== 15070
Lm1lbnU= 15071
L2NvbmZpZw== 15072
IAoKCg== 15073
VE9ETw== 15074
IHB1cmNoYXNlZA== 15075
X2Nvcg== 15076
CWF1dG8= 15077
Q29tcGF0QWN0aXZpdHk= 15078
Y29tcGxldGU= 15079
X2dyYXBo 15080
aXNvZGVz 15081
IHNpdHVhdGlvbnM= 15082
IEhvcg== 15083
UmVjZWl2ZQ== 15084
4oCcV2U= 15085
IGVudGl0aWVz 15086
LmFzc2VydEVxdWFscw== 15087
0L7Qug== 15088
IFNhbnM= 15089
dmluY2U= 15090
cm9tcHQ= 15091
PQo= 15092
IC8u 15093
LlNlbGVjdA== 15094
eWx2 15095
IGJhdHQ= 15096
QXVkaW8= 15097
IGluY3JlYXNpbmdseQ== 15098
LkJ1bmRsZQ== 15099
IGV4cGxhaW5z 15100
MDYw 15101
dGhlYXN0 15102
Lm9mZnNldA== 15103
IGhhbA== 15104
IHRlY2huaXF1ZQ== 15105
X2xpbWl0 15106
IGRyYXdu 15107
QVlFUg== 15108
IGZlYXR1cmVk 15109
eXl5eQ== 15110
YXRpbg== 15111
cGhlbg== 15112
YWNoZWw= 15113
IVw= 15114
bG93ZXI= 15115
IEdS 15116
IHBhZw== 15117
IFBhcnNl 15118
IHRvdQ== 15119
5LiA 15120
RGlzdGFuY2U= 15121
SW5kZXhQYXRo 15122
IGhlbGw= 15123
c2lt 15124
VVRUT04= 15125
VXNhZ2U= 15126
ZWxlbml1bQ== 15127
IEZhbGw= 15128
ICIuJA== 15129
IE11 15130
IGNydWM= 15131
IHNvbnQ= 15132
UkVGSVg= 15133
MzEx 15134
IGludGVyaW9y 15135
IE9seW1w 15136
LkF1dG9TY2FsZQ== 15137
cGFyYQ== 15138
QXhpc0FsaWdubWVudA== 15139
IHJpdmVy 15140
RHRv 15141
IHdpdGhkcmF3 15142
UmVhY3Q= 15143
LWNsYXNz 15144
YmVmb3Jl 15145
X2FsbG9j 15146
Q29udGVudHM= 15147
IFdhcw== 15148
SUNU 15149
IGZvcm11bGE= 15150
IGluZGljYXRlcw== 15151
ICAgIAoK 15152
X3N0b3Jl 15153
aXR0aW5n 15154
IEl0YWxpYW4= 15155
X1NldA== 15156
X3JlcG9ydA== 15157
IHBpZA== 15158
X1ZFUg== 15159
IHdpbnM= 15160
IENsb3Vk 15161
Iil7Cg== 15162
Y2hlc3Rlcg== 15163
IGRlbmllZA== 15164
IHdpcmQ= 15165
IFN0ZXA= 15166
IGludmVzdG9ycw== 15167
Ym9sZA== 15168
X2Rpc3BsYXk= 15169
b3V2ZXI= 15170
b3Jlcg== 15171
UmVzZXQ= 15172
IHN1cmdlcnk= 15173
IHN0cmF0ZWdpZXM= 15174
L21hdGVyaWFs 15175
X3VuaXQ= 15176
IGNvdW5jaWw= 15177
LlBlcg== 15178
IOKAng== 15179
IHJlZm9ybQ== 15180
RnJhbWV3b3Jr 15181
IGxpc3Rpbmc= 15182
X2J0bg== 15183
IGJpcw== 15184
JWQ= 15185
ZWdhcw== 15186
IHN1ZGRlbmx5 15187
X1NFUg== 15188
MzE1 15189
IGFv 15190
X2RpcmVjdG9yeQ== 15191
ZmFz 15192
IHByZW1pdW0= 15193
IHRyYWNraW5n 15194
IEJM 15195
IG1hdHVyZQ== 15196
IGJhdGhyb29t 15197
ICcvJw== 15198
IMSR 15199
UGVyZm9ybWVk 15200
IHNvbGRpZXJz 15201
YXJuaW5ncw== 15202
IHdhbGtlZA== 15203
LWNvbg== 15204
Ym90dG9t 15205
IHN1cnByaXNpbmc= 15206
IGdlbmU= 15207
VXN1YXJpbw== 15208
LkRFRkFVTFQ= 15209
IE1JVA== 15210
Q09ERQ== 15211
IEVneXB0 15212
cGlja2Vy 15213
eXNxbA== 15214
QVRVUkU= 15215
ZGV0YWlscw== 15216
IENvbmZlcmVuY2U= 15217
SW5mb3JtYXRpb24= 15218
IE1haWw= 15219
LWRvd24= 15220
cmFyaWVz 15221
YnJv 15222
IHN1YmplY3Rz 15223
ICcq 15224
6K+3 15225
b3JpZW50 15226
OkA= 15227
dmVyYm9zZQ== 15228
RUY= 15229
IHRvbGVy 15230
MzEz 15231
ZW5nZXJz 15232
IGVuZHBvaW50 15233
IHN0cmFuZ2U= 15234
IGNvbG9u 15235
IHByZWZlcnJlZA== 15236
ZGVw 15237
IEVW 15238
QVJSQVk= 15239
IHdoZQ== 15240
IHB1cA== 15241
X25vZGVz 15242
IHRhbGtlZA== 15243
IGluc3RpdHV0aW9u 15244
ZGJj 15245
IGV4cG9zZWQ= 15246
dGVlbg== 15247
IEZyb250 15248
VFQ= 15249
X05PTkU= 15250
XC9cLw== 15251
cHJvZ3JhbQ== 15252
IGVuY291cmFnZQ== 15253
LmA= 15254
c2hpcmU= 15255
IElzbGFt 15256
MzI1 15257
ZWVu 15258
Tkk= 15259
JyI= 15260
LldpZHRo 15261
IGxpa2Vk 15262
IHsuLi4= 15263
IFN5c3RlbXM= 15264
IHZvdHJl 15265
IG1hbnVmYWN0dXJpbmc= 15266
Q29udmVydGVy 15267
IEluZg== 15268
7Jo= 15269
RFRP 15270
IGluY2hlcw== 15271
IOCk 15272
w7k= 15273
IENoYXJsZXM= 15274
QlU= 15275
IikpOwoK 15276
IExhYm9y 15277
dW5u 15278
IGVzdGlt 15279
bW9iaWxl 15280
IExlYXJu 15281
Mjgx 15282
X0NBTEw= 15283
4oQ= 15284
IGluZGljZXM= 15285
IHR1Yg== 15286
Mjg4 15287
aWtpcGVkaWE= 15288
Q29zdA== 15289
cm93YWJsZQ== 15290
66E= 15291
Z2FnZQ== 15292
IGZ1bmN0aW9uYWxpdHk= 15293
dXp6bGU= 15294
ZW1vcw== 15295
LmxpYg== 15296
IGRhc3M= 15297
0LXQug== 15298
ZW5uYQ== 15299
IHNob3Rz 15300
IHJlc3RvcmU= 15301
L0Q= 15302
Rm9yS2V5 15303
XSxb 15304
YWxpYXM= 15305
bGludA== 15306
LnN0cmVhbQ== 15307
5qA= 15308
X0ZPUk1BVA== 15309
IHNpbHZlcg== 15310
LnJlcG9zaXRvcnk= 15311
IGxlZ2lzbA== 15312
LkJvcmRlcg== 15313
X2ZlYXR1cmVz 15314
UGVybWlzc2lvbg== 15315
IGhvdXNlcw== 15316
IFdhcnM= 15317
X0NPTVA= 15318
IGluanVyaWVz 15319
IGNvbnN0YW50bHk= 15320
Zmx1dHRlcg== 15321
RU5V 15322
IENvbmY= 15323
IHJlY29nbml6ZWQ= 15324
IHByYWN0aWNhbA== 15325
IGRlY2VudA== 15326
Qko= 15327
XSk7 15328
YXN0eQ== 15329
IEFjdGl2aXR5 15330
LW1vZGU= 15331
IHNsaWRl 15332
LklzTnVsbE9yRW1wdHk= 15333
IFlPVQ== 15334
UG93ZXI= 15335
aW5kaWNlcw== 15336
IHF1YWxpZmllZA== 15337
IHRocm93bg== 15338
aGVsbG8= 15339
MzE2 15340
IE5pY2s= 15341
bGFo 15342
YXNzZW1ibHk= 15343
IFNtYWxs 15344
b2xkaW5n 15345
U2hvdWxk 15346
IFNpbHZlcg== 15347
KHNhdmVkSW5zdGFuY2VTdGF0ZQ== 15348
IHRvZ2dsZQ== 15349
Lk5vdA== 15350
Q3RybA== 15351
Om5pbA== 15352
IENvbnRpbnVl 15353
IEJvb3Q= 15354
5ok= 15355
IE11cg== 15356
ZG9u 15357
IEZB 15358
U25hcHNob3Q= 15359
IGFzc29jaWF0aW9u 15360
Zm94 15361
LGE= 15362
YXppb25l 15363
XSkNCg== 15364
Q1RZUEU= 15365
IGZhZGU= 15366
IERhcg== 15367
Lm5hdmlnYXRpb24= 15368
IGx1Y2s= 15369
U0NSSQ== 15370
IERlYWQ= 15371
IHRlcm1pbmFs 15372
X0xFTkdUSA== 15373
IGVmZmljaWVuY3k= 15374
IHVudw== 15375
IG5hcnJvdw== 15376
aW1lbnRv 15377
KENvbG9y 15378
IFNlYQ== 15379
X2FyZWE= 15380
LEE= 15381
X29wdA== 15382
IEhpbGxhcnk= 15383
LnRhc2s= 15384
IEphYw== 15385
YXN0ZWQ= 15386
IEFkYW0= 15387
IElsbGVnYWw= 15388
IHNlYXJjaGluZw== 15389
SW5zdGFuY2VPZg== 15390
SmF2YQ== 15391
IEZvcm1hdA== 15392
IHJlYWxpemVk 15393
IENoaWxkcmVu 15394
IGtpbA== 15395
KGZyYW1l 15396
4oCdLgoK 15397
IHNjZW5hcmlv 15398
Il0pOwo= 15399
IGluY3JlZGlibGU= 15400
bGl4 15401
SU9FeGNlcHRpb24= 15402
IFF1ZXN0 15403
aWx0eQ== 15404
IHVubG9jaw== 15405
4oKs 15406
IHJlZmVyZW5jZXM= 15407
IFZlcnQ= 15408
QmluZGluZw== 15409
ZWdhdGl2ZQ== 15410
IHdyYXA= 15411
LmRhdGFiYXNl 15412
KGNvbnRlbnQ= 15413
QnVm 15414
IFRyYWQ= 15415
IEF1ZA== 15416
dHJhY2U= 15417
Lm1vY2s= 15418
IHRoZXJhcHk= 15419
CUw= 15420
LlRvSW50 15421
IEtpbmdkb20= 15422
QnVz 15423
aGF1c3Q= 15424
IiIiCgo= 15425
KGVuZA== 15426
LmRyYXdhYmxl 15427
W107Cg== 15428
IEhvc3BpdGFs 15429
IHBoYXJt 15430
LS0tLS0= 15431
IEFH 15432
w6lk 15433
PiIpOwo= 15434
IHdhbGxldA== 15435
YXRhYmxl 15436
KSQ= 15437
IG1vbnRobHk= 15438
IGRpYWdub3N0aWM= 15439
U3ltYm9s 15440
IGl0ZXJhdG9y 15441
dW5maW5pc2hlZA== 15442
IGltbWlncmF0aW9u 15443
c3I= 15444
Uk9X 15445
KGdhbWU= 15446
IGNsb3RoZXM= 15447
IFVudA== 15448
IGFjdGl2YXRpb24= 15449
X0Nvbg== 15450
Mjcz 15451
Lmhhc2g= 15452
IGluaXRpYWxseQ== 15453
Lkhhc2g= 15454
IGN1dHM= 15455
Zm91bmQ= 15456
IFN0b3J5 15457
0YbQuA== 15458
YWNhbw== 15459
X1RZUA== 15460
cHJvdG8= 15461
ZXN0cg== 15462
LXBhZ2U= 15463
YWhy 15464
IGluY29ycmVjdA== 15465
IEpvc2VwaA== 15466
VGV4dEJveENvbHVtbg== 15467
X3N0eWxl 15468
IERhbmllbA== 15469
c2hlZXQ= 15470
IGxpdg== 15471
bGluZWQ= 15472
IHJh 15473
UnVudGltZQ== 15474
X2VtcHR5 15475
c2x1Zw== 15476
X3N0cnVjdA== 15477
64o= 15478
bXU= 15479
IHBlcm1pdHRlZA== 15480
IHJlZ2lvbmFs 15481
IHNvYnJl 15482
IFN1Y2g= 15483
IFtf 15484
IHJvb2Y= 15485
LkFsaWdubWVudA== 15486
dGltZXM= 15487
Lm1zZw== 15488
IGNoZXN0 15489
IFRhYg== 15490
IGVzdGE= 15491
w6Ru 15492
IHN1YnNjcmlwdGlvbg== 15493
KGNvbW1hbmQ= 15494
c3BlY2lhbA== 15495
IG1lYWw= 15496
Iik6Cg== 15497
X2N0eA== 15498
IGNsb3NlbHk= 15499
MzA5 15500
ZXRyeQ== 15501
LWJl 15502
YWRlbA== 15503
IFJhbQ== 15504
aWdlc3Q= 15505
IFNwYW5pc2g= 15506
IGNvbW1pdG1lbnQ= 15507
IHdha2U= 15508
Kj4o 15509
UEhQ 15510
X3s= 15511
Y2tlcg== 15512
PExpc3Q= 15513
X251bGw= 15514
Mzkw 15515
IFJlc2VydmVk 15516
IGluaGVy 15517
LkNvbHVtbnM= 15518
LkFzcE5ldA== 15519
X0lOVkFMSUQ= 15520
IFBhcmFtZXRlcg== 15521
IGV4cHI= 15522
fXs= 15523
Q2VsbFN0eWxl 15524
IHZhbHVhYmxl 15525
IGZ1bm55 15526
SW52 15527
IHN0YWJsZQ== 15528
KnQ= 15529
IHBpbGw= 15530
Mjk5 15531
cGxpZXJz 15532
IENTUw== 15533
IENvbmRpdGlvbg== 15534
IFNwZWVk 15535
dWJsaXNoZXI= 15536
MjU5 15537
IG9mZmVuc2l2ZQ== 15538
Y2VzdA== 15539
aWNhcw== 15540
IHNwYXJr 15541
IFByb3Rl 15542
c2V0dXA= 15543
SUZZ 15544
IFRheA== 15545
V2hv 15546
RmFtaWx5 15547
LWZvcg== 15548
LnVr 15549
IGZhc2M= 15550
c3Zn 15551
IikpLg== 15552
IGJpcnRoZGF5 15553
4paI 15554
dmVo 15555
ZWxsZWQ= 15556
IGltcG9ydHM= 15557
IElzbGFtaWM= 15558
VEE= 15559
IFN0YW4= 15560
d2VhdGhlcg== 15561
IHN1c3BlY3Q= 15562
ZWF0dXJl 15563
ZW5uZXM= 15564
V00= 15565
Lm1pbmVjcmFmdA== 15566
YXZpZA== 15567
6L0= 15568
LnNlY3VyaXR5 15569
aW5vcw== 15570
R29vZA== 15571
IG1hcmNo 15572
NjU1 15573
MjU3 15574
IHBvc3Nlc3M= 15575
dXN1YXJpbw== 15576
Q29ucw== 15577
YW1iZXI= 15578
Y2hlZHVsZXI= 15579
IGhvcnNl 15580
570= 15581
KGJvZHk= 15582
IFRyYW5zZm9ybQ== 15583
X2RlY29kZQ== 15584
LnN2Zw== 15585
IGZvbw== 15586
IGRlbGxh 15587
ZXh0ZW5kcw== 15588
YW1lcg== 15589
IHByb2Nlc3NlZA== 15590
IEhhcnI= 15591
IEFJ 15592
IGtv 15593
Q0hBUg== 15594
KCU= 15595
IHRhcA== 15596
KHsn 15597
Y3JvbGw= 15598
RE9N 15599
IHRlYQ== 15600
IHJlaW4= 15601
MjYx 15602
IHdvcmxkd2lkZQ== 15603
X2Zu 15604
c2hh 15605
IGJpcg== 15606
w6fDtWVz 15607
PSIjIj4= 15608
IHJlcHJlc2VudGVk 15609
aWxsZXI= 15610
KGV4cGVjdGVk 15611
IGRhbmNl 15612
IHZpc2l0b3Jz 15613
LmNvbmNhdA== 15614
LWJpdA== 15615
VVJSRQ== 15616
IFJvZw== 15617
dnA= 15618
aXBo 15619
IExMQw== 15620
aXRsZWQ= 15621
aWFtaQ== 15622
Q29sbA== 15623
X3JlYWw= 15624
X3Nob3c= 15625
X2ZvbGRlcg== 15626
IGRhcg== 15627
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 15628
IGxhdHRlcg== 15629
YXJjaHk= 15630
IGJvdw== 15631
IG91dGNvbWU= 15632
NTEw 15633
IFBvc3RlZA== 15634
IHJpc2tz 15635
IFRoZXJlZm9yZQ== 15636
IG93bmVyc2hpcA== 15637
IHBhcmFsbGVs 15638
IHBlbmRpbmc= 15639
Z2VvbWV0cnk= 15640
IHJlY29nbml6ZQ== 15641
U1RFTQ== 15642
IENQ 15643
IGltbWlncg== 15644
SVRMRQ== 15645
ICAgIAkJ 15646
Y29ubmVjdGVk 15647
IHNtaWxl 15648
KGRvY3VtZW50 15649
XENvbXBvbmVudA== 15650
dmVydGljYWw= 15651
IGNvbnN1bXB0aW9u 15652
IHNob2Vz 15653
LmltcGw= 15654
dW5rcw== 15655
LiI7Cg== 15656
IGZvb2Rz 15657
Xyk7Cg== 15658
LmFzc2VydFRydWU= 15659
IHBpcGVsaW5l 15660
IGNvbGxlY3Rpb25z 15661
IGVhcm5lZA== 15662
IENlcnQ= 15663
IHBhcnRuZXJzaGlw 15664
KGFjdGlvbg== 15665
MjYz 15666
IGNk 15667
IFZlcnk= 15668
T3B0aW9uYWw= 15669
IHNjcmVlbnM= 15670
IHRpdGxlcw== 15671
ZW5lcmF0b3I= 15672
IGFiYW5kb24= 15673
a2luZA== 15674
SUxURVI= 15675
IGNsb3Npbmc= 15676
bGljYQ== 15677
X2ludGVy 15678
IGNhbXB1cw== 15679
c2V0dGluZw== 15680
U3ByaXRl 15681
44Gv 15682
X3JlcGx5 15683
VG9MaXN0 15684
OlwvXC8= 15685
ZWRl 15686
IGZvbGtz 15687
IGJvYXQ= 15688
KGFyZ3Y= 15689
IHBlcm1hbmVudA== 15690
IGNhcnJ5aW5n 15691
IGNvbnNlcnZhdGl2ZQ== 15692
aW1wb3J0YW50 15693
LmltZw== 15694
IEltbQ== 15695
IGRpbWVuc2lvbnM= 15696
YWxhbmQ= 15697
c2luZ2xl 15698
RXhpdA== 15699
LS0tLS0tLS0tLQ== 15700
YXJpYW50 15701
dGVybmFs 15702
U2Vjb25kcw== 15703
IEl0YWx5 15704
b3RsaW4= 15705
LlJlc3VtZQ== 15706
PSci 15707
KT09 15708
Y2VwdG9y 15709
IHNjYQ== 15710
L21haW4= 15711
U2VjdXJpdHk= 15712
X2RhdA== 15713
IGxldHM= 15714
IGFxdQ== 15715
IHdoZW5ldmVy 15716
YmVycnk= 15717
IGFjdGluZw== 15718
YW50aQ== 15719
cGQ= 15720
Jmd0 15721
5q0= 15722
Wm9uZQ== 15723
VG9kYXk= 15724
IS4= 15725
MzIz 15726
VG9Qcm9wcw== 15727
YWJpcw== 15728
aXRhYmxl 15729
IGdhbA== 15730
XXs= 15731
aXpvbmE= 15732
IGluY29udHJp 15733
TkVU 15734
Ly8vCg== 15735
W2lu 15736
X3NhdmU= 15737
IGV4ZW0= 15738
IEtlbm4= 15739
IGV2b2x1dGlvbg== 15740
Mjcy 15741
dmFycw== 15742
X3N0YXRz 15743
LW9ubHk= 15744
IENvbG9yYWRv 15745
IHdhdGNoZWQ= 15746
Ym91cg== 15747
IHNldmVyZQ== 15748
IHByb2Zlc3Npb25hbHM= 15749
cG9ydGlvbg== 15750
IGd1YXJhbnRl 15751
0LM= 15752
IHB1c2hlZA== 15753
IEdp 15754
770= 15755
IHR1bQ== 15756
IEF6 15757
IEVkZ2VJbnNldHM= 15758
IikpOw0K 15759
aXNzZQ== 15760
LmFj 15761
U2V0dGluZw== 15762
IGFwcHJlY2lhdGU= 15763
IFZhbHVlRXJyb3I= 15764
IHN1cnZl 15765
IFJvbGU= 15766
LkludGVy 15767
cGxvdGxpYg== 15768
amV0 15769
ZGFt 15770
IHBsYXRmb3Jtcw== 15771
dGVsZQ== 15772
VVRP 15773
IEludGVybmFs 15774
Kzo= 15775
fTsNCg== 15776
R2VuZXJhbA== 15777
XEVudGl0eQ== 15778
IGxhd3llcg== 15779
cXVpdg== 15780
IFBvc3Rz 15781
aXNv 15782
IGFjY3Vt 15783
b2Jl 15784
IG1hcmtz 15785
IF07Cgo= 15786
CXRleHQ= 15787
LnN1Y2Nlc3M= 15788
Y3Vycg== 15789
YXNh 15790
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 15791
IHRoaW4= 15792
X292ZXI= 15793
MDE2 15794
YXJlc3Q= 15795
IE9z 15796
KGFkZHJlc3M= 15797
IHZlbG9jaXR5 15798
IFtdOwoK 15799
PSIuLi8uLi8= 15800
IFByaXY= 15801
Ym93 15802
IGd1YXJhbnRlZQ== 15803
JQoK 15804
MzIy 15805
IGV2YWx1YXRl 15806
LkxFTkdUSA== 15807
IGludmVudG9yeQ== 15808
cWE= 15809
X2RlYnVn 15810
Lk9uQ2xpY2tMaXN0ZW5lcg== 15811
IGxpZXM= 15812
IGFzc2Vzc21lbnQ= 15813
ZGF0ZXRpbWU= 15814
LmJhY2tncm91bmRDb2xvcg== 15815
ICovDQoNCg== 15816
cmFm 15817
dW53cmFw 15818
IEZvb3Q= 15819
IG5vdGlmeQ== 15820
IGxvd2VzdA== 15821
RE9DVFlQRQ== 15822
IGxhbmd1YWdlcw== 15823
ZXh0cmE= 15824
LWJhY2s= 15825
IGVpbmVu 15826
dGVtcGxhdGVz 15827
Mjcx 15828
X3Bhc3M= 15829
NTIw 15830
Nzc3 15831
IE11c3Q= 15832
IGVzdMOh 15833
X2NvcmU= 15834
IFNjb3Q= 15835
QUk= 15836
IGJpYXM= 15837
YXRpb25zaGlw 15838
Q29uc3RhbnQ= 15839
IHByb2dyYW1taW5n 15840
SW5z 15841
dXNwZW5kTGF5b3V0 15842
IFBST1ZJRA== 15843
YW50ZXM= 15844
IHNoaXJ0 15845
aW5hdGVk 15846
Lk9L 15847
W2E= 15848
IHRoaW5rcw== 15849
PwoKCgo= 15850
IHJlZ2FyZGxlc3M= 15851
IE1hZ2lj 15852
dWxhdGluZw== 15853
CWNsYXNz 15854
YWRkR3JvdXA= 15855
UkVBVEU= 15856
IFNV 15857
IHNpbXBs 15858
Y29weXJpZ2h0 15859
IGJ1bmNo 15860
IHVuaXZlcnNl 15861
OTUw 15862
IEVycg== 15863
IHByZXNlbnRhdGlvbg== 15864
Y2F0ZWdvcmllcw== 15865
IGF0dGFjaA== 15866
LnNpZ24= 15867
X0FD 15868
IGRpc2NpcGw= 15869
IHJlZ3VsYXJseQ== 15870
IHByaW1hcmlseQ== 15871
aW5rcw== 15872
W1s= 15873
LnJhbmQ= 15874
LnNob3VsZA== 15875
b3dudG93bg== 15876
PSIn 15877
IHNhbnM= 15878
IHN1cHBvcnRlcnM= 15879
c2VxdWVuY2U= 15880
R08= 15881
Li4KCg== 15882
IFNwcg== 15883
IGNhcmVmdWxseQ== 15884
VUlDb2xvcg== 15885
ZGVzdHJveQ== 15886
IHRvZG9z 15887
IE9SREVS 15888
b3R0ZWQ= 15889
IGRvbnQ= 15890
YXVkaQ== 15891
X3BsYXllcg== 15892
Z3Jl 15893
NjI1 15894
IE9pbA== 15895
PGJvZHk= 15896
X3N0YWNr 15897
LlBhZGRpbmc= 15898
IFByb2R1Y3Rz 15899
IHByaXZpbGU= 15900
MDE0 15901
IGluanVyZWQ= 15902
IEZ1cnRoZXI= 15903
IGFsaWFz 15904
LlJlc3VtZUxheW91dA== 15905
X0xFTg== 15906
IHNlcw== 15907
J107Cgo= 15908
Y3JlZW5z 15909
IGRpcmVjdGVk 15910
LlN1c3BlbmRMYXlvdXQ= 15911
b2RnZQ== 15912
LkF0 15913
bWFya3M= 15914
IFVuaXZlcnM= 15915
ZXJ0cw== 15916
IEVzYw== 15917
IG5hdmJhcg== 15918
IHV0aWxpdHk= 15919
YWdub3N0aWNz 15920
IGluamVjdA== 15921
IEROQQ== 15922
ICIsIg== 15923
YW1hcg== 15924
IGV1 15925
IHJlc3RhdXJhbnRz 15926
X3B1dA== 15927
dXRlcnM= 15928
VG9vbFN0cmlw 15929
dHc= 15930
aXN0cm8= 15931
IHpvb20= 15932
IGxlZ2l0 15933
cGVjaWZpYw== 15934
Mjg1 15935
IENvbWU= 15936
IGxvY2FsU3RvcmFnZQ== 15937
IGFic29y 15938
LlBhbmVs 15939
IERlc2lnbmVy 15940
IG93 15941
SUNBTA== 15942
X3VyaQ== 15943
KGZpZWxk 15944
IHN1cGVydg== 15945
RXhpc3Rz 15946
IHJlc3BlY3RpdmVseQ== 15947
IFN0YW5k 15948
Q29uZg== 15949
dXNzaWFu 15950
MzY0 15951
IGFyYw== 15952
IG5k 15953
dWNrcw== 15954
IHJlc3Ry 15955
IHNlYXNvbnM= 15956
IENoYXB0ZXI= 15957
IFN3aXRjaA== 15958
cGlj 15959
IGhp 15960
bG9hZGVk 15961
IGZsdWlk 15962
LWJ0bg== 15963
IHJ1bnRpbWU= 15964
Lml0 15965
MjU4 15966
Qk4= 15967
T3BhY2l0eQ== 15968
YXNhbnQ= 15969
cnlwdGlvbg== 15970
LW5hdGl2ZQ== 15971
IHRhdWdodA== 15972
5a8= 15973
YWdtZW50 15974
IG11bA== 15975
UmVnaXN0cnk= 15976
X2dyaWQ= 15977
IEJyb29r 15978
OlNldA== 15979
IG1vbmdvb3Nl 15980
QU1FUw== 15981
aW5uZXJIVE1M 15982
IHNvY2k= 15983
IEludGVs 15984
Z2V0SWQ= 15985
Q21k 15986
IGFjY2Vzc2libGU= 15987
cmFtZXM= 15988
bGV0b24= 15989
IF9fKA== 15990
CWRlbGV0ZQ== 15991
IFNxdWFyZQ== 15992
IgoKCg== 15993
IGJ1Y2tldA== 15994
YXZvcml0ZQ== 15995
IEJyZWFr 15996
Kytd 15997
IGJydXNo 15998
MjY2 15999
IHRlbnNvcg== 16000
L2h0dHA= 16001
VGlsZQ== 16002
IGZ1bmN0aW9uYWw= 16003
ICIq 16004
d2hlbA== 16005
IHRlbnQ= 16006
IENoYXJhY3Rlcg== 16007
IHNlZXM= 16008
LlNU 16009
Qmln 16010
IGV4dGVybg== 16011
VXJscw== 16012
KSkpKSw= 16013
IEpy 16014
LkJ1aWxkZXI= 16015
Ljs= 16016
bmw= 16017
X0luaXQ= 16018
IEhFUg== 16019
xbxl 16020
bXlzcWxp 16021
X2ljb24= 16022
dmFu 16023
IGZlZWxpbmdz 16024
IGxlYW4= 16025
IGhvcGluZw== 16026
VFY= 16027
PSI8Pz0= 16028
IGN1cnZl 16029
X3N0ZA== 16030
X0xJTkU= 16031
ZHN0 16032
IG1vcmFs 16033
ZW1lcw== 16034
b2d5 16035
IHVyYmFu 16036
MDE1 16037
IGFzaWRl 16038
IGVkaXRpbmc= 16039
QURE 16040
U2Vjb25k 16041
VHJhY2s= 16042
IHZvdGluZw== 16043
IGhvbm9y 16044
Lics 16045
ZWxsZW4= 16046
Q2hhdA== 16047
IGltcHJvdmVtZW50 16048
J10KCg== 16049
oIE= 16050
IHBhcnNlZA== 16051
ICAgICAgICAgCg== 16052
IGxhenk= 16053
IGZhbGxpbmc= 16054
U2VyaWFsaXpl 16055
IFBh 16056
X2dy 16057
IGZvcmV2ZXI= 16058
LndoaXRl 16059
LlF1ZXJ5 16060
QmVk 16061
IER1 16062
IHJlc3VtZQ== 16063
IHBhcGVycw== 16064
IEluaXQ= 16065
IHN1ZmZlcmluZw== 16066
4oCL 16067
IGRlY2xhcmF0aW9ucw== 16068
KCkt 16069
IGV4ZWN1dGVk 16070
IEhvbA== 16071
LmJsb2Nr 16072
44Oz 16073
U0s= 16074
IHN0dWNr 16075
IExvY2s= 16076
aW5jaXBhbA== 16077
TnVsbGFibGU= 16078
IHNlc3Npb25z 16079
dW5p 16080
IGNvdXA= 16081
YXBwcm8= 16082
Z2hhbg== 16083
X3Bvb2w= 16084
Mjgz 16085
CWlk 16086
IHNsb3Rz 16087
IG1lZGljaW5l 16088
IGdsYWQ= 16089
IE1vbm9CZWhhdmlvdXI= 16090
YXRyZQ== 16091
ICQoJw== 16092
bWVyaWNhbg== 16093
YWdn 16094
IGthbm4= 16095
X2Nvbm5lY3Q= 16096
IGJyYW5kcw== 16097
IHNrZQ== 16098
IGRpZ2l0 16099
PG4= 16100
IGJhY2t1cA== 16101
IHBlcnNvbmFsbHk= 16102
LlByb3BlcnR5 16103
MzE0 16104
LmNvbW1pdA== 16105
IGNyeQ== 16106
X2NvdW50ZXI= 16107
IG1hbGxvYw== 16108
IGdyYW4= 16109
IERyb3A= 16110
cGxhdGZvcm0= 16111
cmVkZW50aWFscw== 16112
aW5raW5n 16113
IFVJTA== 16114
dWJz 16115
IG1s 16116
bGVzc2x5 16117
R2VuZXJhdGVk 16118
ZXJlb3R5cGU= 16119
IGJhdA== 16120
TGF5b3V0UGFuZWw= 16121
TE9U 16122
Iik7DQoNCg== 16123
IG11c2NsZQ== 16124
IGNlcnRpZmljYXRl 16125
QU5ETEU= 16126
IGhhcmRlcg== 16127
IHBpeGVscw== 16128
KSIsCg== 16129
LkhlYWRlcg== 16130
IGRldmVsb3Blcg== 16131
IExhcw== 16132
ZWdhbg== 16133
Ljw= 16134
IGV4cGxvZGU= 16135
IHBhcnRpY2lwYXRl 16136
UGF0dGVybg== 16137
KHRhYmxl 16138
IFRFWFQ= 16139
Y29uc3RhbnRz 16140
eEQ= 16141
dGhldw== 16142
fSwKCg== 16143
44Gu 16144
X2Rlcw== 16145
IHN1YnN0cg== 16146
IFNtYXJ0 16147
IHNjYWxh 16148
Z2VudA== 16149
LWJhcg== 16150
ZXNzaW9uYWw= 16151
dW1icw== 16152
LmV4ZWM= 16153
J1w= 16154
VEs= 16155
dW5pc3Q= 16156
cHJvb2Y= 16157
Y2lhbA== 16158
cHJvYw== 16159
PXsi 16160
LmhyZWY= 16161
PSQo 16162
IGx1bmNo 16163
aXNjYWw= 16164
IEVudHJ5 16165
IG91dGRvb3I= 16166
c2VtYmxl 16167
IGVzc2VudGlhbGx5 16168
L0c= 16169
W10p 16170
JSI= 16171
c3Rlbg== 16172
VVNFRA== 16173
IGR1c3Q= 16174
5bA= 16175
CQoK 16176
IHJldGlyZQ== 16177
IGZpYg== 16178
QWx0aG91Z2g= 16179
IGxvdmVz 16180
IHJlYWRz 16181
eWNsZXM= 16182
IEhlbA== 16183
X3VpbnQ= 16184
ICcuJA== 16185
X2luaXRpYWw= 16186
TmFtZWQ= 16187
IGZ1bmRhbWVudGFs 16188
QURJTkc= 16189
IHRvdw== 16190
IEFERA== 16191
IEFjYWRlbXk= 16192
MDUw 16193
OlN0cmluZw== 16194
IGNvbXByZWhlbnNpdmU= 16195
LnNjYWw= 16196
IE1ldGE= 16197
TWVzc2FnZXM= 16198
LmFubm90YXRpb25z 16199
XFJlc3BvbnNl 16200
IGFja25vd2xlZA== 16201
IEFSRQ== 16202
XT09 16203
IGNsZWFuaW5n 16204
6L4= 16205
RW50aXRpZXM= 16206
IFNhbGVz 16207
IFdpcw== 16208
LmV4dGVuZA== 16209
YWxsZW5nZQ== 16210
IGdhbWluZw== 16211
JHF1ZXJ5 16212
SUNFUw== 16213
RVRDSA== 16214
SG9yaXpvbnRhbA== 16215
cXVlbnRpYWw= 16216
ODUw 16217
QkFDSw== 16218
ZGV2ZWxvcA== 16219
aXNvcg== 16220
KGNvZGU= 16221
LUs= 16222
X1BJTg== 16223
cmVxdWVuY3k= 16224
IFF1ZXN0aW9u 16225
X2NvbnRhaW5lcg== 16226
X21vZHVsZXM= 16227
IEplcnNleQ== 16228
X2RpZmY= 16229
LmVs 16230
ICooKA== 16231
Y250 16232
IFNh 16233
Q1BQ 16234
aW5pdGU= 16235
IHVudXM= 16236
LXdoaXRl 16237
ZXRhcnk= 16238
IGludm9sdmluZw== 16239
ID8+DQo= 16240
YmVzdA== 16241
YWxsYXM= 16242
ZW50ZWQ= 16243
ICAgICAgICAgICAgICAgICAgICAgICAgCg== 16244
X2Nvbm5lY3Rpb24= 16245
IHJlcG8= 16246
ZW5hYmxlZA== 16247
0LDQug== 16248
IHNoYQ== 16249
IG1lbWJlcnNoaXA= 16250
U3RhdHVzQ29kZQ== 16251
aW5hdGluZw== 16252
X3Nt 16253
X2N1c3RvbQ== 16254
X3dlaWdodA== 16255
IGNzcw== 16256
U3RhdA== 16257
X2Vudg== 16258
bGlua3M= 16259
VFJM 16260
IEhpdA== 16261
LHI= 16262
dXBpZA== 16263
IG9wZW5z 16264
IGdlbnQ= 16265
X3Zpcw== 16266
IGpveQ== 16267
PHc= 16268
X2Nvc3Q= 16269
IFB5T2JqZWN0 16270
cmVuY2U= 16271
IEdlb3JnaWE= 16272
IEJyb2Fk 16273
bW1h 16274
4oI= 16275
cGY= 16276
ICJcIg== 16277
ICgm 16278
b21v 16279
IGxpdGVyYWxseQ== 16280
iJg= 16281
bWV0cmlj 16282
IGJhcnM= 16283
emVk 16284
KHdpbmRvdw== 16285
IElzcmFlbGk= 16286
IGZvcm1hbA== 16287
aWRlbnRpZmllcg== 16288
LmRhbw== 16289
IERlYXRo 16290
JTsK 16291
IGRlY2xhcmU= 16292
YXJtcw== 16293
UkVBTQ== 16294
UEVSVFk= 16295
IGNvbnNlcXVlbmNlcw== 16296
dG9vbHM= 16297
UGVvcGxl 16298
IFdoaWNo 16299
PigpOw0K 16300
LmRlY29kZQ== 16301
X0FDVA== 16302
QnV0dG9ucw== 16303
LmZsb2F0 16304
LkZpcnN0 16305
66U= 16306
IFBvbGl0 16307
IFhDVA== 16308
VGFncw== 16309
IENHRmxvYXQ= 16310
PXN0cg== 16311
IGxlYWY= 16312
LWNoZWNr 16313
IElzcw== 16314
LnN5c3RlbQ== 16315
bG9nb3V0 16316
YWNodA== 16317
QW5nbGU= 16318
c2lu 16319
Y2hhcnQ= 16320
SU5URVI= 16321
IE5VTQ== 16322
QmFzaWM= 16323
LlByb3BlcnRpZXM= 16324
5Lit 16325
X2NoYW5nZQ== 16326
IEJyYXppbA== 16327
QWJzdHJhY3Q= 16328
IDorOg== 16329
X3VzZQ== 16330
0LDQuw== 16331
MjY4 16332
IEx5 16333
SUJVVA== 16334
IG91dGVy 16335
IC0tPg0K 16336
IHJlbGllZg== 16337
bGFw 16338
cXVlcg== 16339
X3BhcmVudA== 16340
aGVhcA== 16341
TE9TRQ== 16342
IGNvbWJpbmU= 16343
IFJvc2U= 16344
b3dlcnM= 16345
IHByb2NlZHVyZXM= 16346
IFNvcnQ= 16347
YW5pbQ== 16348
dmFyaWFudA== 16349
ZWhpY2xl 16350
IHNpZ25pbmc= 16351
UHJpbWFyeQ== 16352
Y3VycmVuY3k= 16353
IHNleGU= 16354
b2Vu 16355
dGhldGE= 16356
ZW1hbg== 16357
IGltcHJlc3NpdmU= 16358
KCdf 16359
CVU= 16360
IFRleHRTdHlsZQ== 16361
X2NudA== 16362
IHNsaWNl 16363
KCc6 16364
IHVuZGVyc3Rvb2Q= 16365
SGlz 16366
Mjc3 16367
MDEz 16368
IGluZm9ybWVk 16369
IG5pY2s= 16370
NDI5 16371
KFRBRw== 16372
aGQ= 16373
IGVsZWN0aW9ucw== 16374
ZXN0dXJl 16375
IFNhbnRh 16376
IENvYXN0 16377
LnBkZg== 16378
aW5jaXBsZQ== 16379
LmNsb25l 16380
Ym9ybg== 16381
dXRh 16382
IGxpY2Vuc2Vk 16383
Q3I= 16384
IGJyZWFk 16385
IEhvdXN0b24= 16386
IG5vZA== 16387
IGhvcGVz 16388
IENHUmVjdA== 16389
IGd1aWx0eQ== 16390
LmdpZg== 16391
IHJvc2U= 16392
LkNvbW1vbg== 16393
VGlw 16394
QU5L 16395
IEZD 16396
RHVyaW5n 16397
IFN5bWZvbnk= 16398
IGRlZmVuc2l2ZQ== 16399
a20= 16400
KT4= 16401
YXJjaGl2ZQ== 16402
IFVSSQ== 16403
eWNsaW5n 16404
LW8= 16405
IFdlYnNpdGU= 16406
QU1Q 16407
NDA1 16408
aXNobWVudA== 16409
IGRvY3RvcnM= 16410
RGlyZWN0 16411
QVJJ 16412
IFJlZGlyZWN0 16413
aWVyZW4= 16414
OTYw 16415
X2Rpc3Q= 16416
eW8= 16417
IFByb2dyZXNz 16418
IHp1bQ== 16419
IG1lbW9y 16420
IEVE 16421
IGp1cg== 16422
5o2u 16423
X1RBQkxF 16424
IHV1aWQ= 16425
RXhwcg== 16426
LmhlYWQ= 16427
KCcl 16428
cG9pbnRlcg== 16429
IGVzdGltYXRl 16430
IEdyZWc= 16431
IGxvYWRlcg== 16432
IGlPUw== 16433
IG1lbnM= 16434
W3k= 16435
IHJlZnVzZWQ= 16436
IHByZWNpc2lvbg== 16437
aXNjaA== 16438
IEFDVElPTg== 16439
Q2xvdWQ= 16440
c1dpdGg= 16441
KHJldA== 16442
Mjky 16443
X0FERFI= 16444
X2NvbmY= 16445
KGRm 16446
IGxvY2tlZA== 16447
IHJpc2luZw== 16448
44O744O7 16449
IE1z 16450
IHNjZW5lcw== 16451
X0VYVA== 16452
X3Jhdw== 16453
X3RoZQ== 16454
cGVvcGxl 16455
IHJlY29u 16456
IEZ1bg== 16457
IGJsZXNz 16458
IFVwZGF0ZWQ= 16459
NDIy 16460
w7xu 16461
ICAgICAgICAgICAgDQo= 16462
cGVjdGlvbg== 16463
UmVsZWFzZQ== 16464
LmxvZ2dlcg== 16465
IFNZ 16466
IGNvdW5zZWw= 16467
dXJk 16468
X3RydWU= 16469
IGV2ZXJ5Ym9keQ== 16470
aXZvdA== 16471
IGhlbmNl 16472
IE5BUw== 16473
Nzg5 16474
IG9wcG9zZWQ= 16475
dW5rbm93bg== 16476
IERFU0M= 16477
IENoYWly 16478
ZmFpbGVk 16479
IElOQ0xVRElORw== 16480
Mzg2 16481
MzUy 16482
IHdyaXRlcnM= 16483
e30K 16484
w610 16485
X2NvcHk= 16486
fTo= 16487
IEJhdA== 16488
IGNvbnZlcnRlZA== 16489
ZWRpbmc= 16490
cGxhY2VtZW50 16491
IEhvc3Q= 16492
U291bmQ= 16493
0LjQvA== 16494
IHNvdWdodA== 16495
NDAy 16496
bWlk 16497
IHNhbGFyeQ== 16498
b2dn 16499
4oSi 16500
YnVs 16501
IHdpcg== 16502
dmFsaWRhdG9y 16503
X1NUQVQ= 16504
LnN0b3Jl 16505
IEJhdHRsZQ== 16506
xLFu 16507
IC0tPgoK 16508
VHJ1bXA= 16509
ZG90 16510
IENPTlQ= 16511
LmZldGNo 16512
IGNvbnRpbnU= 16513
d2Fz 16514
IGZyYXVk 16515
X3RtcA== 16516
bWl0dGVy 16517
LnBpY3R1cmVCb3g= 16518
R0E= 16519
IHRvdXJuYW1lbnQ= 16520
LklucHV0 16521
MzQz 16522
W3I= 16523
ZXhpb24= 16524
Y2VudGFnZQ== 16525
IEtvcmVhbg== 16526
dW5kZWY= 16527
IEF2YWlsYWJsZQ== 16528
cmVzaGFwZQ== 16529
IGtpdA== 16530
IFN0cnVjdA== 16531
IFNVQg== 16532
QW5zd2Vy 16533
X2xpYg== 16534
LnR3aXR0ZXI= 16535
IG9yZQ== 16536
IERyYWdvbg== 16537
LkV4dA== 16538
LGs= 16539
IGV4cGxhbmF0aW9u 16540
cmVmcw== 16541
IERyaXZl 16542
IFRyYWluaW5n 16543
Mjgy 16544
Lkhhcw== 16545
MzQx 16546
aW50YWdl 16547
Ymln 16548
b2xvZ2lzdA== 16549
ZW5uaXM= 16550
NDYw 16551
2Yc= 16552
IGNoaWNrZW4= 16553
ICAgICAgICAgIAo= 16554
55s= 16555
44Gn 16556
IHBlYWs= 16557
IGRyaW5raW5n 16558
IGVuY29kZQ== 16559
IE5FVw== 16560
bWFsbG9j 16561
CWZwcmludGY= 16562
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 16563
aW5jbHVkaW5n 16564
IHByaW5jaXBsZXM= 16565
IE1haA== 16566
MjY3 16567
c3RvcmFnZQ== 16568
LWtleQ== 16569
IGtleXdvcmQ= 16570
JTs= 16571
IHRyYWluZWQ= 16572
LmNvbnRyaWI= 16573
IGt2 16574
X18nOgo= 16575
IEJveQ== 16576
cGFyYW1ldGVy 16577
IHN1aXRl 16578
IHRob3VzYW5k 16579
IGNvb3JkaW5hdGU= 16580
LWdlbmVyYXRlZA== 16581
7ZWY 16582
Z2VuZXJhdGVk 16583
IGFkbWl0dGVk 16584
IHB1c3N5 16585
I3c= 16586
IHN3aW0= 16587
dW5pb24= 16588
TmE= 16589
Mjc0 16590
IFJveWFs 16591
LmNoYW5uZWw= 16592
VXBkYXRlZA== 16593
X1JPT1Q= 16594
IHZpdGFs 16595
MzM1 16596
cmFjdGlvbg== 16597
IENydXNoZXI= 16598
IHByZWNlZA== 16599
IGhvcml6b250YWw= 16600
Qmx1ZXByaW50 16601
IGF0dHJz 16602
IHNtb2tl 16603
0JI= 16604
LkVxdWFscw== 16605
RkI= 16606
IFJlc291cmNlcw== 16607
cm9sbGluZw== 16608
IHBhc3Nlcw== 16609
IE51bQ== 16610
cm90YXRl 16611
ZXR5cGU= 16612
XCIs 16613
IHNlbnNpdGl2ZQ== 16614
IHRhbGw= 16615
P+KAnQoK 16616
UHJveHk= 16617
aXk= 16618
X3NlY3Rpb24= 16619
4oCU4oCU4oCU4oCU 16620
YnJpZA== 16621
IGNpcmN1aXQ= 16622
YXRhbg== 16623
RU5D 16624
IGRyaXZlbg== 16625
IHZvdGVk 16626
IGVkdWNhdGlvbmFs 16627
IGludGVyYWN0aW9u 16628
YWJldGVz 16629
IHRvbmU= 16630
IEluaXRpYWxpemVDb21wb25lbnQ= 16631
IG1lcmVseQ== 16632
IOye 16633
Y29va2ll 16634
X2Rpdg== 16635
IFVJTGFiZWw= 16636
dmVseQ== 16637
fSk7DQo= 16638
X0VOVA== 16639
IysjKw== 16640
YXJ0aWNsZXM= 16641
IFNvdXRoZXJu 16642
IHN0cm9uZ2Vy 16643
IEdpdmVu 16644
IEVyaWM= 16645
IElS 16646
YWJzdHJhY3Q= 16647
VW5kZXI= 16648
bmFibGU= 16649
IGluY3JlbWVudA== 16650
b3Zlbg== 16651
IGNvaW4= 16652
X3RpbWVy 16653
IHN1ZmZlcmVk 16654
IEZSRUU= 16655
J10uIg== 16656
IFF1ZWVu 16657
c3RhdHM= 16658
IG1lZXRpbmdz 16659
Mjc2 16660
IGVudGVyaW5n 16661
IGFsb25nc2lkZQ== 16662
KHNlc3Npb24= 16663
aXRhbHM= 16664
IGZvdW5kYXRpb24= 16665
IENyZWRpdA== 16666
LmRpdg== 16667
X0FMTA== 16668
cGNpb24= 16669
X3N0YXQ= 16670
aWNraW5n 16671
RGVmYXVsdHM= 16672
X3NyYw== 16673
IG91dHB1dHM= 16674
L0I= 16675
IGVudGh1cw== 16676
LWJs 16677
LkZvcmVDb2xvcg== 16678
CXRlbXA= 16679
RmFjZQ== 16680
IGludGVyYWN0 16681
IHdlaXJk 16682
TW91bnQ= 16683
cmVsbA== 16684
dWRlbnRz 16685
IHJlcXVpcmVtZW50 16686
IFN1cw== 16687
SUVS 16688
IGVsZWN0ZWQ= 16689
cmVmZXJlbmNl 16690
IE1F 16691
IHNlcnZlcnM= 16692
LndhaXQ= 16693
IHNuYXBzaG90 16694
aWx0b24= 16695
IHRyaWVz 16696
IHRpcG8= 16697
LlRpbWU= 16698
Pnc= 16699
IG1vdW50YWlu 16700
IHBvdW5kcw== 16701
IFsuLi4= 16702
ZXhpc3Rz 16703
IG5nT24= 16704
X01BUA== 16705
IGZseWluZw== 16706
MzMx 16707
eGlldHk= 16708
CXZhbHVl 16709
X0RC 16710
dW5v 16711
IHNlYXRz 16712
VFVSTg== 16713
LmF1dGhvcg== 16714
ISk= 16715
b3JjZQ== 16716
IGluZGljYXRlZA== 16717
MzE3 16718
LnNpbg== 16719
IGFzc2lnbm1lbnQ= 16720
aW1pZW50bw== 16721
IEZyYW1l 16722
MzI0 16723
X2dlbg== 16724
aW5lcnk= 16725
Xyk= 16726
bWVzc2FnZXM= 16727
LnNldHRpbmdz 16728
IE1lYW4= 16729
IE11c2V1bQ== 16730
aXJx 16731
YXR0YWNo 16732
IFBhbGVzdGlu 16733
X1FV 16734
X3RhZ3M= 16735
IGNhc3VhbA== 16736
ZW1lbg== 16737
QVNTV09SRA== 16738
NDMy 16739
JHM= 16740
IENpcmM= 16741
0L7QuQ== 16742
ZXRyaWM= 16743
L1A= 16744
MDE4 16745
IGVwb2No 16746
PGhlYWQ= 16747
X0NNRA== 16748
IGdpdA== 16749
IHBlbmFsdHk= 16750
b3JwaA== 16751
X3VzZXJz 16752
b3Vyc2Vz 16753
LkRhdGVUaW1l 16754
YXRlcm5pb24= 16755
X3Byb2plY3Q= 16756
IHN1cGVyaW9y 16757
IERhbQ== 16758
IFNlYXR0bGU= 16759
WFk= 16760
PlRoZQ== 16761
IEFr 16762
IGdyYXNz 16763
LyoNCg== 16764
KGRpcw== 16765
IGd1bnM= 16766
IHRi 16767
IEtldmlu 16768
LmFyZ3M= 16769
IEFo 16770
b3BlZA== 16771
KEo= 16772
Y29sdW1ucw== 16773
YXJndW1lbnRz 16774
IFdpdGhFdmVudHM= 16775
X2Z1bGw= 16776
IERlZmVuc2U= 16777
U2ltcGxl 16778
IGRlYXRocw== 16779
Mjk1 16780
IGV4dGVuc2l2ZQ== 16781
IFN0aWxs 16782
IEV4cHJlc3Npb24= 16783
IEFnZW5jeQ== 16784
IHBlcmZvcm1pbmc= 16785
Rlg= 16786
IHVzdWFyaW8= 16787
VUFM 16788
U2lkZQ== 16789
b2Rvcw== 16790
YXB0b3A= 16791
IGNyZWRlbnRpYWxz 16792
X2NhcA== 16793
YXRpZW50 16794
IERpc25leQ== 16795
IGFp 16796
IGNoaXA= 16797
IHZvbHQ= 16798
Lm1ha2VUZXh0 16799
JSUlJSUlJSUlJSUlJSUlJQ== 16800
IGJlbGllZg== 16801
X0xPQw== 16802
IENpdmls 16803
TmF2aWdhdGlvbg== 16804
IHJldmVhbA== 16805
IHZpb2xlbnQ= 16806
IEZpbA== 16807
IGNhdGFsb2c= 16808
ZW1lZA== 16809
c2Nhbg== 16810
LmNvbnRyb2w= 16811
IGNvbnN0aXR1dGlvbg== 16812
Q291bnRyeQ== 16813
U2VwYXJhdG9y 16814
X0FQUA== 16815
dG9waWM= 16816
dWV0b290aA== 16817
TUlO 16818
IGRlc2NyaXB0b3I= 16819
eXQ= 16820
RVRIRVI= 16821
IGRpc3RyaWJ1dGU= 16822
J30K 16823
LnRyaW0= 16824
LkxpbmU= 16825
IGxibA== 16826
YXNzZXJ0RXF1YWxz 16827
IERldA== 16828
b21ib2s= 16829
KHdpZHRo 16830
IHRvcnQ= 16831
IEVYUFJFU1M= 16832
YWNv 16833
VXNpbmc= 16834
IEJyYW5k 16835
d2FsbA== 16836
RU1FTlQ= 16837
IENvbW11bmlj 16838
PHVpbnQ= 16839
IEdVSQ== 16840
RUdJTg== 16841
IFJhbmdl 16842
L2k= 16843
IFRheWxvcg== 16844
Y29zdA== 16845
IHJlc3BvbmRlZA== 16846
IFRoZW1l 16847
bmNl 16848
SVNI 16849
IGZlYXR1cmluZw== 16850
UmV0dXJucw== 16851
IEty 16852
IC4K 16853
IG5hbQ== 16854
X2Ni 16855
VGVzdGluZw== 16856
IHt9LA== 16857
eWFs 16858
LmZpZWxk 16859
IC89 16860
X1NIT1JU 16861
bWF0ZXM= 16862
VGVzdENhc2U= 16863
YWlubGVzcw== 16864
IGV2YWx1YXRpb24= 16865
X0lURU0= 16866
IFBhY2lmaWM= 16867
CWs= 16868
IGNhbnQ= 16869
IFJvcw== 16870
KXM= 16871
IGZldA== 16872
U1RSSU5H 16873
MzE5 16874
IERpc3Bvc2U= 16875
Z2Fs 16876
IEpvaW4= 16877
IFBvcm4= 16878
IENhdGhvbGlj 16879
QVJHRVQ= 16880
Y3B1 16881
56CB 16882
LnNjcm9sbA== 16883
MzI4 16884
SVNJTkc= 16885
aWZlc3R5bGU= 16886
YW5jZW1lbnQ= 16887
IG1lcmM= 16888
IEJyb3dzZXI= 16889
ZXRlcm1pbg== 16890
IG92ZXJmbG93 16891
QXZhaWxhYmxl 16892
IGJvdHRsZQ== 16893
OlVJ 16894
aWZpY2lhbA== 16895
IGNvb3Jk 16896
Y2xhcmF0aW9u 16897
IGNvbmo= 16898
R0xPQkFM 16899
b2t1 16900
IGt3YXJncw== 16901
Y29uZGl0aW9ucw== 16902
dWx1bQ== 16903
IGdlbnU= 16904
IEhlcm8= 16905
5Y4= 16906
IHVuZXhwZWN0ZWQ= 16907
IERBTUFHRVM= 16908
IGth 16909
IENvdWxk 16910
VVBQT1JU 16911
IFBob3Rvcw== 16912
IGNvbmZpZGVudA== 16913
IGRldGVjdGVk 16914
ZGVn 16915
cmdi 16916
IHN0cm9uZ2x5 16917
IH07DQo= 16918
ICk6 16919
IGxlY3Q= 16920
dXJzaXZl 16921
Uk9M 16922
IFdlaWdodA== 16923
IGVudGVydGFpbm1lbnQ= 16924
ICkpOwo= 16925
IGdvbm5h 16926
IGJi 16927
LmRv 16928
R1M= 16929
IG1pc3Rha2U= 16930
REw= 16931
IFBST1ZJREVE 16932
ZWFybmluZw== 16933
TGltaXQ= 16934
aXNzaW9ucw== 16935
W3Y= 16936
5LiN 16937
aXJ0eQ== 16938
RGVs 16939
IHVuZGVybHlpbmc= 16940
cHJlbmU= 16941
IGphdw== 16942
IERJ 16943
cGVlcg== 16944
IG9iamVjdGl2ZQ== 16945
IGRlcG9zaXQ= 16946
IGtvbg== 16947
IGVzcA== 16948
Mjc4 16949
LnNldFZpc2liaWxpdHk= 16950
L2xvZ2lu 16951
PHR5cGVuYW1l 16952
IGZyYW5jaA== 16953
L2U= 16954
MjY5 16955
UGFyYWxsZWw= 16956
IHNjb3JlZA== 16957
IEhvbg== 16958
IFZpbGw= 16959
aWdh 16960
IGFudGljaXA= 16961
X2Fzc2VydA== 16962
IE9wdA== 16963
IGRlc2NyaWJlcw== 16964
d2Fu 16965
bW91bnQ= 16966
IG1vbml0b3Jpbmc= 16967
IHRvdXQ= 16968
64qU 16969
fSx7 16970
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4= 16971
PWludA== 16972
IGN1c3Q= 16973
LS0tLS0t 16974
IGF0bW9zcGhlcmU= 16975
UEFS 16976
b3J0ZQ== 16977
SVNJQkxF 16978
IElyb24= 16979
IE5vdGlmaWNhdGlvbg== 16980
LmxvZ2dpbmc= 16981
IEJPT0w= 16982
LXBvaW50 16983
IGFmcmFpZA== 16984
ZW50YQ== 16985
IHRvbW9ycm93 16986
QGltcGxlbWVudGF0aW9u 16987
IGVuZ2FnZQ== 16988
IEFudGg= 16989
IEZsb29y 16990
IFVs 16991
VG9vbHM= 16992
IGJhYg== 16993
IGNhcmVmdWw= 16994
44GE 16995
IGNydWNpYWw= 16996
IGNhbGN1bGF0ZWQ= 16997
IFNB 16998
IHd5 16999
OTEx 17000
RFg= 17001
X1RBRw== 17002
aW5kZWQ= 17003
IGpldA== 17004
IEVuZ2luZWVyaW5n 17005
Lk1BWA== 17006
ZW56 17007
dmQ= 17008
IHB1YmxpY2F0aW9u 17009
ICMjIw== 17010
IGZhY2Vk 17011
cmFoYW0= 17012
IENhcHQ= 17013
MzM2 17014
QXNzZXQ= 17015
IENvbnN0YW50cw== 17016
IGxvYW5z 17017
X0lQ 17018
IEZpc2g= 17019
UmVkdWM= 17020
X21hdA== 17021
RGF0ZUZvcm1hdA== 17022
X21l 17023
W11bXQ== 17024
IGludGVncml0eQ== 17025
IENvdXJzZQ== 17026
bG9iYWxz 17027
IGZhY2lsaXQ= 17028
IGVtYnI= 17029
IE5n 17030
LlN5c3RlbQ== 17031
IG1hbnVmYWN0dXJlcnM= 17032
IHByb3Zlbg== 17033
Lm9uQ3JlYXRl 17034
IGFsYXJt 17035
IMKn 17036
IGNvbW1vbmx5 17037
aWNvcw== 17038
5paw 17039
IFN0YXRpb24= 17040
fSku 17041
IEZpbG0= 17042
d2k= 17043
54k= 17044
IGVuZ2FnZWQ= 17045
U3RhdHM= 17046
IGdvdmVybm1lbnRz 17047
NTQw 17048
IGFmZm9yZGFibGU= 17049
X3Byb3BlcnR5 17050
IGFnZXM= 17051
KCctLQ== 17052
IGbDtnI= 17053
IFByb2Zlc3Nvcg== 17054
IGh5ZHJv 17055
UHVzaA== 17056
IG9yZ2FuaXplZA== 17057
Mjg0 17058
QWNjZXB0 17059
w6lt 17060
X2NlbGw= 17061
IG5i 17062
cGI= 17063
QXJ0aWNsZQ== 17064
IHJlbW92YWw= 17065
IGF1dGhlbnRpY2F0aW9u 17066
IEZS 17067
bGlkZQ== 17068
IHBsZWFzdXJl 17069
YXBvbA== 17070
IHBhcnRpdGlvbg== 17071
IFNpZGU= 17072
IGNyaW1lcw== 17073
IGRlbW8= 17074
aG9sZGVycw== 17075
IFBha2lzdGFu 17076
SW5zdHJ1Y3Rpb24= 17077
IGV4cGVjdGF0aW9ucw== 17078
MzMy 17079
LnNjZW5l 17080
ICcp 17081
aGVz 17082
aW5vaXM= 17083
X1Bybw== 17084
IG1vbGVj 17085
YW5kYWw= 17086
X3Nob3J0 17087
IGRlZmF1bHRz 17088
IG5hdGlvbnM= 17089
aW5lbg== 17090
IHJ0 17091
T0NL 17092
UGFja2V0 17093
U0I= 17094
IFNIQUxM 17095
X2NvbnRlbnRz 17096
aXNlY29uZHM= 17097
dmVydHk= 17098
w6F0 17099
R3VpZA== 17100
bm9t 17101
IGNvbmNsdXNpb24= 17102
LlVwZGF0ZQ== 17103
IGxvdmVseQ== 17104
IGVtaXQ= 17105
YmVj 17106
CQkJCSA= 17107
IGludGVsbGVjdA== 17108
IGJyZXc= 17109
ZWN5Y2xl 17110
RmlyZQ== 17111
MzU4 17112
IGFkbWl0 17113
IGFyYml0 17114
IGFycmFuZw== 17115
IE1JTg== 17116
TWFpbA== 17117
IE5hdGl2ZQ== 17118
Q3Vy 17119
IGNvbnZlbnQ= 17120
LlJ1bnRpbWU= 17121
In0K 17122
LlJ1bg== 17123
IHByaW50ZWQ= 17124
IGNvbnZlbmllbnQ= 17125
LmFy 17126
bW9jaw== 17127
IEFkbWluaXN0cmF0aW9u 17128
44G+ 17129
IGVsZWN0cm9u 17130
ZmxhdGU= 17131
IGxvbWJvaw== 17132
IGphdmFmeA== 17133
bmg= 17134
IHN1cHBsaWVz 17135
IHZpc2l0aW5n 17136
YWhs 17137
IHBvd2Rlcg== 17138
IHVsdGltYXRl 17139
IG9yaWVudGF0aW9u 17140
dXRhcw== 17141
X3NjYWxl 17142
Q29uZmlybQ== 17143
cGhvbmVz 17144
IE9wZXJhdGlvbg== 17145
L1Q= 17146
NDQz 17147
X0lOVEVS 17148
IGFpcnBvcnQ= 17149
IG1ldHJpY3M= 17150
IHBoZW5vbWVu 17151
YXVkaW8= 17152
MzM0 17153
IG1haQ== 17154
KEs= 17155
aHU= 17156
YWxsaW5n 17157
cm9kdWN0aW9u 17158
IFRyYW5zcG9ydA== 17159
IE5PVEU= 17160
5paH 17161
IGZld2Vy 17162
X1RJTQ== 17163
7Kc= 17164
0LrQuA== 17165
QWdl 17166
RklO 17167
Mjk0 17168
IOyd 17169
IEF0dHJpYnV0ZQ== 17170
Z3JvdXBz 17171
ZXJr 17172
YXR0bw== 17173
LmRlZmluZQ== 17174
LkFzcE5ldENvcmU= 17175
YXRlZ29yaWE= 17176
IFNpcg== 17177
KGZvcm0= 17178
PFVzZXI= 17179
LnJvdW5k 17180
X2RheQ== 17181
LkFsbA== 17182
U2VydmxldFJlc3BvbnNl 17183
Lk5v 17184
bGFyZ2U= 17185
SUdI 17186
cXVlbnQ= 17187
IHZpcnVz 17188
IHJldHJv 17189
IGltcGVy 17190
Qml0bWFw 17191
IHZpY2U= 17192
IG9mZmVuc2U= 17193
aXN0ZQ== 17194
IEFVVEg= 17195
IOqw 17196
VG9vbFN0cmlwTWVudUl0ZW0= 17197
R3U= 17198
IHJhcGU= 17199
IERhdmlz 17200
IG92ZXJ3aGVs 17201
OmZsdXR0ZXI= 17202
LXRhYmxl 17203
IENvbnN0cnVjdG9y 17204
UHJpdmF0ZQ== 17205
ZXZlbg== 17206
Y2hy 17207
IGFwcGxpZXM= 17208
X2F0dHJpYnV0ZQ== 17209
IGNvbnRyaWJ1dGU= 17210
RVZFUg== 17211
Mjg5 17212
TGluZXM= 17213
IEFmZ2hhbg== 17214
VmlzaXRvcg== 17215
IFNM 17216
c2Vhc29u 17217
Q1U= 17218
IGludHJvZHVjdGlvbg== 17219
IG1hdHBsb3RsaWI= 17220
xZE= 17221
IG5ld3NwYXBlcg== 17222
4oCUYW5k 17223
PHRhZw== 17224
IGluaQ== 17225
IGRpdmVyc2U= 17226
SWdub3JlQ2FzZQ== 17227
MzUz 17228
IFVy 17229
QWdlbnQ= 17230
IGJ1bGw= 17231
LmVtaXQ= 17232
KEV4Y2VwdGlvbg== 17233
YXJMYXlvdXQ= 17234
IGluY3JlZGlibHk= 17235
IFRydXN0 17236
PXso 17237
LW5hdg== 17238
IGVxdWFscw== 17239
IGxhZHk= 17240
IFBvZA== 17241
ZGlzYw== 17242
YWxhbQ== 17243
IElW 17244
4pk= 17245
aXZpZHVhbA== 17246
cGhp 17247
MDE3 17248
YWRkZWQ= 17249
IGRpZmZpY3VsdHk= 17250
IGNvbXBhY3Q= 17251
NTMw 17252
IEFjdGlvblJlc3VsdA== 17253
Y2Vycw== 17254
X2NsYXNzZXM= 17255
Tm9uTnVsbA== 17256
IHF1aXQ= 17257
IHBvdQ== 17258
U3dpdGNo 17259
aXJz 17260
LXRlc3Q= 17261
IEtpbmQ= 17262
IENhbGVuZGFy 17263
NDA2 17264
IHN0cmVhbWluZw== 17265
fScs 17266
Mjc5 17267
U1c= 17268
IHN0ZWFk 17269
b2Nh 17270
IHByb3ZpbmNl 17271
OTc4 17272
IGNvbHNwYW4= 17273
IHBlcnNvbm5lbA== 17274
IEVtcGxveWVl 17275
IHByb2R1Y2Vy 17276
IGV2ZXJ5d2hlcmU= 17277
b2Ri 17278
0J8= 17279
YnNvbHV0ZQ== 17280
YWN0aXZhdGU= 17281
IGdyaW5kaW5n 17282
IEJ1aWxkaW5n 17283
IFNhbmRlcnM= 17284
KHNj 17285
IE9mZnNldA== 17286
Ly8vLy8vLy8vLy8v 17287
fTsNCg0K 17288
KHsi 17289
IHNjYW5m 17290
IFlZ 17291
CWRlZmVy 17292
IGpldw== 17293
IHJlc3RyaWN0aW9ucw== 17294
Lm1w 17295
W2w= 17296
5LiL 17297
bGFiZWxz 17298
cmVkaWNhdGU= 17299
YXdlc29tZQ== 17300
IHdhdmVz 17301
IGNvbmZyb250 17302
IG1lYXN1cmVk 17303
IGRhdGFz 17304
X2V4aXQ= 17305
MzU1 17306
b3R0b24= 17307
IHNob3VsZGVy 17308
YXNrYQ== 17309
KyM= 17310
ICAgICAgICAKICAgICAgICAK 17311
IHRyb29wcw== 17312
Mjkz 17313
IFVuZA== 17314
X2NhcmQ= 17315
d2ljaA== 17316
IG5vdXM= 17317
ICIvIg== 17318
c2I= 17319
IGNvbW11bmljYXRpb25z 17320
RXhwb3J0 17321
IGRlY29kZQ== 17322
dGhz 17323
aW50ZXJwcmV0 17324
QnlOYW1l 17325
IFNwaXJpdA== 17326
ZWRnZXM= 17327
T0xF 17328
IEVN 17329
dGl0 17330
IFRocm91Z2g= 17331
IGJpbw== 17332
IFBhY2thZ2U= 17333
b3JuZQ== 17334
Mjkx 17335
IH0u 17336
NDEx 17337
YDsK 17338
IG9rYXk= 17339
IFplYWxhbmQ= 17340
aWRlbnRpdHk= 17341
KG5leHQ= 17342
IEJhbmc= 17343
TGlicmFyeQ== 17344
IGhlYXZpbHk= 17345
aWxvbg== 17346
IGRpcGw= 17347
IHJvdGF0ZQ== 17348
cHV0cw== 17349
KScsCg== 17350
IERhdGFUYWJsZQ== 17351
IG1heW9y 17352
LnRvTG93ZXJDYXNl 17353
IHNvbWVob3c= 17354
IE5vcnRoZXJu 17355
YWxj 17356
IGNhcGFiaWxpdGllcw== 17357
IHZpYnI= 17358
Kwo= 17359
IFN1 17360
Mjg2 17361
IFJlc2V0 17362
X21lYW4= 17363
IGNpZw== 17364
LmNsb3Vk 17365
IEJhbmQ= 17366
IEZhY3Rvcnk= 17367
IEFyaXpvbmE= 17368
X2lv 17369
b3BoZXI= 17370
IGNvbnNjaW91cw== 17371
IMO2 17372
XENvbnRyb2xsZXJz 17373
X3NwZWVk 17374
IEZhYw== 17375
X0NvbQ== 17376
IEJpYmxl 17377
d2Vu 17378
RURJVA== 17379
IHVubg== 17380
IFN0YWZm 17381
IElubg== 17382
IG1lY2hhbmlzbQ== 17383
IE1lbWJlcnM= 17384
IG1pZ3JhdGlvbkJ1aWxkZXI= 17385
J10uJw== 17386
LmdldEludA== 17387
PHZvaWQ= 17388
CWZyZWU= 17389
b2lkcw== 17390
XFN1cHBvcnQ= 17391
IGF1dG9tYXRpYw== 17392
IGNoYW5jZXM= 17393
0LY= 17394
IGNvbXBsaWNhdGVk 17395
W3Jvdw== 17396
YWhvbw== 17397
IH0KCgoK 17398
TW9kZWxz 17399
V2lu 17400
IHRhcGU= 17401
aXJ1cw== 17402
aXpvbg== 17403
b25vbXk= 17404
KCJf 17405
Oi4= 17406
LnN0ZXJlb3R5cGU= 17407
Mjk2 17408
KGVudg== 17409
X3JlY3Q= 17410
KHdpdGg= 17411
IGFzc2VydFRoYXQ= 17412
IGNvbnN0cmFpbnRz 17413
cHV0eQ== 17414
RW1wbG95ZWU= 17415
NjIw 17416
VEQ= 17417
IGd1aXRhcg== 17418
ODc1 17419
IEpld3M= 17420
LnByb2Nlc3M= 17421
IGZpY3Rpb24= 17422
IFNoYXJlZA== 17423
4pSA4pSA 17424
IHByb3BhZw== 17425
Lk5ldA== 17426
IGFjaGlldmVk 17427
CVE= 17428
IG51cnM= 17429
U2hhcmVk 17430
X0ZBSUxVUkU= 17431
IGJlaGF2aW91cg== 17432
IGNvbHM= 17433
aXNtbw== 17434
IGZlbWlu 17435
IGNoYWxsZW5naW5n 17436
IHBvc3Rpbmc= 17437
ZW5jaWw= 17438
IGNhcHR1cmVk 17439
IERvdQ== 17440
KHdvcmQ= 17441
IFR1cmtleQ== 17442
cGFuaWVz 17443
IHJlcHV0YXRpb24= 17444
T1JNQUw= 17445
IGVsaWdpYmxl 17446
cHJvdG9jb2w= 17447
NDE0 17448
aWRhcw== 17449
KGZyb20= 17450
MzQ0 17451
IGZpbmFuY2U= 17452
LXBlcg== 17453
IGdvdHRlbg== 17454
SEE= 17455
ZHVyYXRpb24= 17456
IFBhcmVudA== 17457
Njc4 17458
IGludmVudA== 17459
IHJlc3RhcnQ= 17460
0L7Qu9GM 17461
cml0aW9u 17462
KHJz 17463
PGJvb2w= 17464
aWVydA== 17465
IG1vZGlmaWNhdGlvbg== 17466
IFRY 17467
cmVhZGNydW1i 17468
YmFuaw== 17469
MzI2 17470
JC8= 17471
IE1pbGxlcg== 17472
XSksCg== 17473
LkNoZWNrZWQ= 17474
IHNhY3I= 17475
c2VjdXJpdHk= 17476
IHBvc2U= 17477
IEJyYWQ= 17478
IGZpdG5lc3M= 17479
IGFubm91bmNlbWVudA== 17480
YXRpb25Ub2tlbg== 17481
IHNlcnZlcw== 17482
bmVlZA== 17483
IGdlb21ldHJ5 17484
QVJT 17485
5oA= 17486
YW5kaWRhdGU= 17487
IHNwcml0ZQ== 17488
X3NwbGl0 17489
V2Vlaw== 17490
YWRpZXM= 17491
PigK 17492
Pz4i 17493
IC8vLwo= 17494
IGVpbmVy 17495
IHdlZWtseQ== 17496
CWxvZ2dlcg== 17497
X3BvcA== 17498
X21hbg== 17499
IG1pZ3JhdGlvbnM= 17500
IGFza3M= 17501
IGJz 17502
IGZhbGxz 17503
LldoZXJl 17504
LWhlaWdodA== 17505
X2ZlYXR1cmU= 17506
Lk1pbg== 17507
IGh5cGVy 17508
IHZvbGF0aWxl 17509
IHR3ZW50eQ== 17510
VHlwb2dyYXBoeQ== 17511
VW5hYmxl 17512
RGV0 17513
LGY= 17514
LW1vZA== 17515
IHNldHRsZW1lbnQ= 17516
IGNvbnRyYWN0cw== 17517
bm9tZQ== 17518
QmFk 17519
IEJyaWFu 17520
NzY4 17521
KHVzZXJuYW1l 17522
ISEhIQ== 17523
IGhhY2s= 17524
LkZpZWxk 17525
SFI= 17526
IEpvcmRhbg== 17527
aXph 17528
IMKg 17529
IFNoZXI= 17530
LmhlYWRlcg== 17531
KG90aGVy 17532
IER1Yg== 17533
KG9w 17534
IFJvdW5k 17535
IHZpZQ== 17536
IGFwcGw= 17537
CUo= 17538
IEluc2VydA== 17539
IExQ 17540
cmVnb24= 17541
IE1QSQ== 17542
IGFuY2hvcg== 17543
YWNh 17544
w7hy 17545
IGFkZQ== 17546
YW5jaG9y 17547
cXVlZQ== 17548
IFRyZWVOb2Rl 17549
IHRhcmdldGVk 17550
IGxhaWQ= 17551
QUJFTA== 17552
dmV0 17553
IE9yaWdpbg== 17554
QW50 17555
LicpOwo= 17556
ZXhwZWN0 17557
ZWRSZWFkZXI= 17558
IE1ham9y 17559
IGluY2g= 17560
Q29tcGFy 17561
IHByZXZpZXc= 17562
IGlsbG5lc3M= 17563
IENPTlRSQUNU 17564
IEluZGVwZW5k 17565
dXVpZA== 17566
IG5vbWU= 17567
IHRj 17568
IEF2ZW51ZQ== 17569
aXNhbg== 17570
IHBocmFzZQ== 17571
X21vdmU= 17572
Iilb 17573
NDEy 17574
IHByb3Zpc2lvbg== 17575
IGNvbmNlbnRy 17576
X0lS 17577
IFV0 17578
KCkr 17579
IG5hcw== 17580
ISw= 17581
IFJvYmlu 17582
aWF0aW9ucw== 17583
YXRpdHVkZQ== 17584
IHB4 17585
IFdpdGhvdXQ= 17586
L2Jhc2g= 17587
ZWt0 17588
cmVlbWVudA== 17589
MzQy 17590
T2JzZXJ2ZXI= 17591
MzE4 17592
IFJlZ2lvbg== 17593
VUJMSUM= 17594
IHsvLw== 17595
S04= 17596
5bc= 17597
R2FtZU9iamVjdA== 17598
5b4= 17599
ZW5jb2Rpbmc= 17600
ICoqKg== 17601
cHJvamVjdHM= 17602
IHRr 17603
IGNoZWVzZQ== 17604
RU1QTA== 17605
YXJv 17606
INin2YQ= 17607
NjEw 17608
MzM3 17609
IGNvbnNpc3Rz 17610
cmVmcmVzaA== 17611
dXJlYXU= 17612
IFNjYW5uZXI= 17613
IHNvaWw= 17614
IGZsYXZvcg== 17615
RGF0YVNvdXJjZQ== 17616
RXhlY3V0ZQ== 17617
0LXQvdC40LU= 17618
IHNoaXQ= 17619
5YiG 17620
PGFueQ== 17621
IHJldHJpZXZl 17622
IGJlbG9uZ3M= 17623
LnN0cmlw 17624
YWJzb2x1dGU= 17625
IGV4cGFuZGVk 17626
Ym95 17627
KTot 17628
IHJlc2N1ZQ== 17629
LkpMYWJlbA== 17630
IHJlbHk= 17631
IGFsaWdubWVudA== 17632
LWZhbWlseQ== 17633
IHJlbmQ= 17634
T0xVTU4= 17635
IGJvcnJvdw== 17636
IHF1b3Rlcw== 17637
IExldw== 17638
IHNob3dlcg== 17639
IERFTEVURQ== 17640
X2xvb3A= 17641
ISIKCg== 17642
CXJl 17643
IGF0dGVtcHRlZA== 17644
YXZlcmFnZQ== 17645
IFBhaW50 17646
cXVpc2l0aW9u 17647
b2xlbg== 17648
IGxpdGVyYXR1cmU= 17649
IFJlZmVyZW5jZQ== 17650
X1RFWFRVUkU= 17651
IFNlZw== 17652
IEluZHVzdA== 17653
Y3R5cGU= 17654
RFVDVA== 17655
X0hPU1Q= 17656
IFRyYWRl 17657
IHBsdWdpbnM= 17658
IGJyZWFzdA== 17659
dWxzZQ== 17660
IGNyZWF0dXJl 17661
Mzcy 17662
44GZ 17663
IFdp 17664
IHN1cHBsaWVk 17665
Y29sbA== 17666
ISgi 17667
IGZ1Y2tpbmc= 17668
IENocm9tZQ== 17669
IFVyaQ== 17670
IE5hdGlvbg== 17671
IHZlcnRpY2Vz 17672
VEhF 17673
IE9yaWdpbmFs 17674
b25kZQ== 17675
IHNoYXJw 17676
IGNvb2tpbmc= 17677
MzQ3 17678
IHsvKg== 17679
IFBzeWNo 17680
IEhvbGx5d29vZA== 17681
PSRf 17682
LkRvY2s= 17683
IGdlcg== 17684
IGJvbmU= 17685
X2Nvbm4= 17686
X3NlYw== 17687
eXNpY3M= 17688
ID0i 17689
Mjk4 17690
U2Fs 17691
c2Y= 17692
IGRlZXBseQ== 17693
YW5nbGVz 17694
VGVybQ== 17695
YmVsbA== 17696
IFF1aWNr 17697
NTYw 17698
ZW5lcmF0aW9u 17699
YWRpb0J1dHRvbg== 17700
5YWl 17701
fQ0KDQoNCg== 17702
IGNhcHRpb24= 17703
bGM= 17704
IEVM 17705
LFs= 17706
ICAgICAgDQo= 17707
cmV0dA== 17708
KG1ldGhvZA== 17709
IEZsYXNo 17710
NDcw 17711
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 17712
V0lTRQ== 17713
LnNjYWxl 17714
IHJvdWdobHk= 17715
X2NoaWxk 17716
bWVtb3J5 17717
YXlpbmc= 17718
IGluaXRpYWxpemVk 17719
aW5hdG9y 17720
0LDRgA== 17721
IHNjYWxhcg== 17722
IEhv 17723
YWlyZXM= 17724
KGNvbHVtbg== 17725
LmRlc3Ryb3k= 17726
UEFDSw== 17727
IGhlbQ== 17728
YW5nZWw= 17729
X1NVQg== 17730
LnF1 17731
INc= 17732
REVGQVVMVA== 17733
cG9zaXRvcmllcw== 17734
NTAz 17735
IExlbmd0aA== 17736
IEZhc3Q= 17737
IHNpZ25hbHM= 17738
IC8vJA== 17739
cmllcnM= 17740
IGR1bW15 17741
QU5Z 17742
IHBlcnNvbmFsaXR5 17743
IGFncmljdWx0 17744
UGxhdGZvcm0= 17745
RVJP 17746
IFRyYQ== 17747
IGVub3Jt 17748
CVc= 17749
QWN0aW9uUmVzdWx0 17750
IGF2ZXI= 17751
W3N0cg== 17752
ICctLQ== 17753
LlNwcmludGY= 17754
IGRlYnV0 17755
INGH 17756
aGV4 17757
X3V0aWxz 17758
IHBi 17759
VUlUYWJsZVZpZXc= 17760
IHp1cg== 17761
LmVuY29kZQ== 17762
NDE2 17763
IHZhZw== 17764
LmVycm9ycw== 17765
0L7QvQ== 17766
IG1y 17767
IEF3YXJk 17768
IGNwdQ== 17769
IHByZXNzZWQ= 17770
J2VzdA== 17771
IEZlc3RpdmFs 17772
J1Q= 17773
IGFr 17774
cmVzb2x2ZQ== 17775
MDQz 17776
Lm1l 17777
IG5pYw== 17778
IGdlbnJl 17779
IGF0dHJpYg== 17780
IE1vb24= 17781
IGFycml2ZQ== 17782
IERhdGluZw== 17783
IHRt 17784
LkNvbmZpZ3VyYXRpb24= 17785
NTA1 17786
LnJlZA== 17787
IGdsbQ== 17788
IHN0YXRpb25z 17789
c3dpdGNo 17790
IHRpZWQ= 17791
5Lq6 17792
IC8+PC8= 17793
UXVhbnRpdHk= 17794
cXVpcnk= 17795
X3RhYg== 17796
IGFsZw== 17797
VG9hc3Q= 17798
cmVzaXpl 17799
cXVlc3Rpb25z 17800
c2NoZW1h 17801
TGl0ZXJhbA== 17802
KGVudGl0eQ== 17803
TkVDVElPTg== 17804
Y2hhbmdlZA== 17805
X0ZJRUxE 17806
X0hFSUdIVA== 17807
IG9yZ2FuaWM= 17808
UFJF 17809
IENhdA== 17810
LkRyYXc= 17811
RXM= 17812
IGxvdWQ= 17813
Njgw 17814
ICAgICAgICAJ 17815
IEthdA== 17816
IGhlYXA= 17817
4oCcSXQ= 17818
MDcw 17819
ZXRy 17820
IHVubGlrZWx5 17821
ZXJhbHM= 17822
L2F1dGg= 17823
NTAy 17824
dG9kbw== 17825
UGxhY2U= 17826
UG9zdGVk 17827
Q29tbWVudHM= 17828
IFRlY2g= 17829
IEZpbmFsbHk= 17830
ZWdyYXRpb24= 17831
IG1pbmltYWw= 17832
IEZpbGVz 17833
IHRhbWI= 17834
66Gc 17835
IFJlbGVhc2U= 17836
NDI1 17837
LnJlc2l6ZQ== 17838
IM8= 17839
Y29sbGVjdA== 17840
PXA= 17841
IExJQUJMRQ== 17842
IHByb2R1Y2luZw== 17843
LXdyYXBwZXI= 17844
IHNpbmdsZXM= 17845
IE5CQQ== 17846
b3Jy 17847
ZXJlbg== 17848
LmFkZEFjdGlvbg== 17849
IHRoZXNpcw== 17850
ZG4= 17851
UFRZ 17852
LmRlcw== 17853
IGJhY3Rlcg== 17854
IEV4cHJlc3M= 17855
ICopCg== 17856
5ZE= 17857
L2FkbWlu 17858
c2Vjb25kcw== 17859
5Yqf 17860
dXNzaW9u 17861
YWJldGg= 17862
IENvbXB1dGVy 17863
IHJ1bGluZw== 17864
KCIuLi8= 17865
LkdFVA== 17866
IE1lZGFs 17867
aXRpb25hbGx5 17868
Y29tbWl0 17869
Zm9jdXM= 17870
X0xFVkVM 17871
aW5kYQ== 17872
RmFjdA== 17873
PW5w 17874
PSIiPgo= 17875
IHN1YnNlcXVlbnQ= 17876
cG9zYWJsZQ== 17877
LWZsdWlk 17878
IHRob3JvdWdo 17879
IHB1YmxpY2x5 17880
YXB0ZXJz 17881
IFdpbHNvbg== 17882
X1BSRQ== 17883
eWFyZA== 17884
5Lw= 17885
CWlu 17886
MzM5 17887
IHJldmVycw== 17888
IGJ1bGxldA== 17889
Y3JpYmVk 17890
bmVzb3Rh 17891
ICgkXw== 17892
YW5ub24= 17893
Y3Vyc29y 17894
IGNsb3RoaW5n 17895
IE11bHRp 17896
Mjg3 17897
Oics 17898
IHZlc3M= 17899
b3JkaW5hdG9y 17900
IGVpbmVt 17901
Q2Fubm90 17902
IGFybWVk 17903
CVY= 17904
5LiK 17905
LkZsYXQ= 17906
IFNlcA== 17907
IFN1YmplY3Q= 17908
X2ZvbnQ= 17909
IGNoYXJhY3RlcmlzdGljcw== 17910
RG9uZQ== 17911
ZWxu 17912
IyMjIyMjIyMjIyMj 17913
UE9T 17914
IGRlbnNpdHk= 17915
IFBsYXRmb3Jt 17916
LWl0ZW1z 17917
IG92ZXJz 17918
IHB1c2hpbmc= 17919
56Q= 17920
LkNvbm5lY3Rpb24= 17921
X3Rlcm0= 17922
IGluaXRpYWxpemF0aW9u 17923
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18= 17924
56w= 17925
LmRvY3VtZW50 17926
bGVzaA== 17927
CWRvY3VtZW50 17928
IFBpbg== 17929
w6dh 17930
IGRlZmluaXRpb25z 17931
LlBhdGg= 17932
X1dSSVRF 17933
IAkK 17934
Pz4KCg== 17935
IHRlcnJpYmxl 17936
YmVhbg== 17937
aWNrZXRz 17938
IFNW 17939
QnV5 17940
KHRhc2s= 17941
IHJlZ2ltZQ== 17942
Z29vZ2xl 17943
IGNyYWNr 17944
LnZpc2l0 17945
TlVN 17946
ZW5lcmd5 17947
IHN0cnVjaw== 17948
X3NhbXBsZQ== 17949
LnBheWxvYWQ= 17950
IHJldmlz 17951
IFNjZW5l 17952
IHBn 17953
IGJyZWFrZmFzdA== 17954
VVJSRU5U 17955
LmNoYXJBdA== 17956
X2V4Y2VwdGlvbg== 17957
IEFudG9u 17958
IGd1aWRlbGluZXM= 17959
IGV4aGF1c3Q= 17960
IEZpbmFuY2lhbA== 17961
IGluZGVudA== 17962
IGRlc2t0b3A= 17963
SGlkZGVu 17964
RmFpbHVyZQ== 17965
IHByaW5jaXBsZQ== 17966
IGl2 17967
IHNla3M= 17968
bmV0d29yaw== 17969
IG51bWJlck9m 17970
IEFsYmVydA== 17971
CWxvbmc= 17972
ODAx 17973
LC4= 17974
IHplcm9z 17975
ZmFkZQ== 17976
IFR5cA== 17977
IFRlcm0= 17978
IEFydHM= 17979
LkFwcGxpY2F0aW9u 17980
IGJlaGFsZg== 17981
5oi3 17982
IG1lcmU= 17983
KGAkew== 17984
IGF3YXJlbmVzcw== 17985
ZWxwZXJz 17986
ZmxpeA== 17987
IHdlaWdo 17988
IGVzdGltYXRlcw== 17989
LmNoaWxk 17990
L08= 17991
IEJpdG1hcA== 17992
LmJvdHRvbQ== 17993
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 17994
RXhwZWN0 17995
ZW50bw== 17996
IEZvcnVt 17997
dmVyYWw= 17998
IGphaWw= 17999
IGFiaWxpdGllcw== 18000
IEhPTEQ= 18001
IENpdA== 18002
IGR5bmFt 18003
IGdyYXk= 18004
CQkJCQkJCQkJCQkJCQ== 18005
Lm5leHRJbnQ= 18006
YW50bHk= 18007
IEFSSVNJTkc= 18008
KHByaXZhdGU= 18009
IHJlamVjdGVk 18010
IE5pYw== 18011
IGxlYXRoZXI= 18012
PXsK 18013
YWx5dGljcw== 18014
dGhldGlj 18015
LlRvcA== 18016
Mzcz 18017
LlBhZ2U= 18018
PXtg 18019
IDsNCg== 18020
ZGVwdGg= 18021
bWFubg== 18022
V0Q= 18023
IFNvbQ== 18024
LlJpZ2h0 18025
ICl9Cg== 18026
IHRyYWl0 18027
w5c= 18028
aWFj 18029
IHJ2 18030
U2FtcGxl 18031
LlhtbA== 18032
b3BwZWQ= 18033
INGE 18034
bGlzdHM= 18035
IHRlYXI= 18036
aXZlcnNhcnk= 18037
LmNvbGxlY3Rpb24= 18038
IENvbnN0aXR1dGlvbg== 18039
IEh0dHBSZXNwb25zZQ== 18040
IGJyaWxs 18041
IFByb20= 18042
aG92ZXI= 18043
MzY2 18044
IE1pYW1p 18045
IGFyZ3Vl 18046
X2Zsb2F0 18047
NTA0 18048
IOOC 18049
IG5hdA== 18050
IFRhbA== 18051
IGludGVncmF0aW9u 18052
KGN1cg== 18053
IHJlbW92aW5n 18054
IGNvZWZm 18055
IFRob3VnaA== 18056
IGZvcmVjYXN0 18057
NDA4 18058
IFZlZ2Fz 18059
U2l0ZQ== 18060
MzQ2 18061
IHRyYWI= 18062
IEhlbnJ5 18063
LWk= 18064
IGludm9sdmVz 18065
QlQ= 18066
IHNsbw== 18067
SW52b2tl 18068
IGx1Y2t5 18069
MDI1 18070
cmF0 18071
ID8K 18072
IGhhbmRsZWQ= 18073
KGZk 18074
Y29udGVudHM= 18075
IE9GRg== 18076
UkY= 18077
IHN0eQ== 18078
IE1vdG9y 18079
dGVyeQ== 18080
dGF4 18081
TUFQ 18082
IE1ycw== 18083
IHBob25lcw== 18084
IFVJVmlldw== 18085
IikpKTsK 18086
KGRldg== 18087
IElyaXNo 18088
MDE5 18089
IHdz 18090
REk= 18091
X09GRlNFVA== 18092
IEV2ZW50cw== 18093
IHN0YWdlcw== 18094
IH0vLw== 18095
IGhhYmVu 18096
U1RBTkNF 18097
IFNpbg== 18098
IE1vbmV5 18099
KHRvcA== 18100
IGFwcG9pbnRtZW50 18101
VkVSU0lPTg== 18102
bWV0YWRhdGE= 18103
X2NvbW1lbnQ= 18104
IGNvbGxlYWd1ZXM= 18105
bWFwcw== 18106
4pg= 18107
CgkK 18108
KGFs 18109
X3JlcQ== 18110
IGZ1dA== 18111
IGFyY2hpdGVjdHVyZQ== 18112
MzUx 18113
IFdIRVRIRVI= 18114
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 18115
X3NjcmVlbg== 18116
IHN0eWxlVXJscw== 18117
IG1vbnN0ZXI= 18118
LnVw 18119
cGhpYQ== 18120
IHByb2Nlc3Nvcg== 18121
IFRlcnI= 18122
PScs 18123
IE1hbnVmYWN0 18124
IE5U 18125
a2Vs 18126
aWJlcm4= 18127
CWZpbGU= 18128
QWxp 18129
cmllbnRhdGlvbg== 18130
IC8vIQ== 18131
YXBvcmU= 18132
YW5lb3Vz 18133
IENyZWF0 18134
Zm9sZGVy 18135
NDE1 18136
IGhheQ== 18137
U3VwcHJlc3M= 18138
KGxlZnQ= 18139
IGV1cm8= 18140
IGRpc2NsYWltZXI= 18141
dXN0cnk= 18142
c2hpcHM= 18143
X2Zk 18144
IEZh 18145
X2luc2VydA== 18146
IHJvbA== 18147
aWZ0aW5n 18148
IENvbW1lbnRz 18149
X2Jy 18150
IGxvc3Nlcw== 18151
IEFkZGVk 18152
Y2hhcmc= 18153
INC/0L4= 18154
X3N5c3RlbQ== 18155
IFNvbWV0aW1lcw== 18156
IFNwYWlu 18157
KGdyb3Vw 18158
aWFsaXM= 18159
IGRvbGxhcg== 18160
IEFyZ3M= 18161
NDk5 18162
Mjk3 18163
cXVpcmVz 18164
IFRlbg== 18165
LnNjc3M= 18166
IHN1cnZpdmU= 18167
dXNhZ2U= 18168
IGp1bg== 18169
aW1pdGVy 18170
77yBCgo= 18171
IGZpZnRo 18172
dG9nZ2xl 18173
IGRlY2xpbmU= 18174
KCQi 18175
KExvbmc= 18176
aW5nZQ== 18177
IHBpbG90 18178
LWxpZ2h0 18179
LXJhZGl1cw== 18180
IHBvZGNhc3Q= 18181
IG5hdHVyYWxseQ== 18182
UGFnZXM= 18183
5Li6 18184
IERlc3BpdGU= 18185
IGxpZ2h0aW5n 18186
IGNyYXRl 18187
IEJpbmFyeQ== 18188
IHJlZHVjaW5n 18189
IGVsZWc= 18190
IE1vdXNl 18191
IFRlc3RCZWQ= 18192
IGJlZm9yZUVhY2g= 18193
X0FSUkFZ 18194
UmVkaXJlY3Q= 18195
MzI5 18196
IGZsb29k 18197
IHNoaXBz 18198
MzYz 18199
IGVsZWN0cmljaXR5 18200
KSoo 18201
6rg= 18202
IFZpZXQ= 18203
aGVybw== 18204
IGRpYQ== 18205
IEtlbnQ= 18206
aGVhcnQ= 18207
IHRocmVhdHM= 18208
X2FjYw== 18209
IHN5bWJvbHM= 18210
aXNjaGVu 18211
X2luc3Q= 18212
Q3JpdGVyaW9u 18213
IFRJTQ== 18214
LkhlaWdodA== 18215
NTgw 18216
IOKAmQ== 18217
KCk7CgoK 18218
UHJvZHVjdHM= 18219
X1NQ 18220
IEN5 18221
IGRlcGVuZGVudA== 18222
ZXN0ZQ== 18223
IGRhdG9z 18224
ZGl0 18225
0LDQsg== 18226
SUdOQUw= 18227
IGxlc3Nvbg== 18228
Ij4n 18229
IENvdmVy 18230
IEhvcGU= 18231
IFRpbWVy 18232
IGRhZA== 18233
dmlkZXJz 18234
IFBob3Q= 18235
Lz8= 18236
cm9weQ== 18237
b21pbmc= 18238
YXNpb24= 18239
IFwo 18240
IEVU 18241
IFJlYWRpbmc= 18242
IGVwaXNvZGVz 18243
bG0= 18244
NDIx 18245
ZWNoYQ== 18246
IG5ldXJv 18247
ODIw 18248
IGhhcm1vbg== 18249
IGxpYmVyYWw= 18250
LWluZA== 18251
Mzkz 18252
REFUQQ== 18253
IGV2ZXJ5ZGF5 18254
IGRpdmlkZWQ= 18255
IEFjdGl2ZVJlY29yZA== 18256
ZmlndXJl 18257
VUE= 18258
5Lk= 18259
cmllbmRseQ== 18260
dGVjaA== 18261
NjAx 18262
LmdhbWVPYmplY3Q= 18263
0LjRgtGM 18264
Mzc0 18265
IG1vb24= 18266
ZnRpbWU= 18267
IG5vY2g= 18268
IFRPUlQ= 18269
IFZN 18270
LmluaXRpYWw= 18271
KGNoaWxk 18272
IG11c2ljYWw= 18273
IG9j 18274
YmFz 18275
IEhheQ== 18276
MzYx 18277
X2xvbmc= 18278
IG1lbXNldA== 18279
aWxleQ== 18280
YWRlbHBoaWE= 18281
U1Y= 18282
cm9hdA== 18283
X3R4 18284
IGxvbg== 18285
IG5nT25Jbml0 18286
YnA= 18287
IEdvbGRlbg== 18288
QUNIRQ== 18289
IHdvcnJpZWQ= 18290
YXpp 18291
RWFy 18292
VGFrZQ== 18293
KGZw 18294
YnVyZ2g= 18295
X0RhdGE= 18296
Z3Jlcw== 18297
IE9udA== 18298
cHVz 18299
IHRyYW5zcGFyZW50 18300
IHBvY2tldA== 18301
IHJhbQ== 18302
aWdyYXRpb25z 18303
Lg0KDQo= 18304
IFso 18305
IGFkb3B0ZWQ= 18306
IHJlcG9ydGVkbHk= 18307
IERyZWFt 18308
IH0pKTsK 18309
bG9zaW5n 18310
IHRlZXRo 18311
IEJvb2tz 18312
Iiwm 18313
ZW5ueQ== 18314
TEVNRU5U 18315
IGdlbA== 18316
IFBsYW50 18317
NDM3 18318
IeKAnQ== 18319
Lmhvc3Q= 18320
IFJlcGx5 18321
Mzc2 18322
cmVuZ3Ro 18323
IHJlY29nbml0aW9u 18324
IH19Pgo= 18325
TEE= 18326
IG1pcnJvcg== 18327
IGFzc2lzdGFudA== 18328
KGRldmljZQ== 18329
IHNwaXJpdHVhbA== 18330
YnVpbGRlcg== 18331
wqc= 18332
IG91dHI= 18333
IHR0 18334
IFBFUg== 18335
IHJhZGljYWw= 18336
TWV0aG9kcw== 18337
IHBhY2U= 18338
dWR5 18339
IGd1dA== 18340
IEdyZWVr 18341
IG5vbmF0b21pYw== 18342
IFBhcGVy 18343
X0dQSU8= 18344
IG9ic3Q= 18345
LkFk 18346
dmlyb25tZW50cw== 18347
IFNvdg== 18348
MzU2 18349
KGNvbg== 18350
IFRyYW5zYWN0aW9u 18351
LmFzc2lnbg== 18352
CWNhdGNo 18353
ZWx0ZXI= 18354
IGJpdGNvaW4= 18355
X0dS 18356
IDw/PQ== 18357
X2xhbmc= 18358
7J2E 18359
QnJvd3Nlcg== 18360
IGNvbnNpZGVyYXRpb24= 18361
IEV4ZWN1dGl2ZQ== 18362
6Ze0 18363
O1w= 18364
IEpTT05PYmplY3Q= 18365
IEJlbGw= 18366
IHNwb2tlc21hbg== 18367
fn5+fn5+fn4= 18368
b2NrZXk= 18369
IEdybw== 18370
IEF3 18371
Q29uc3RyYWludA== 18372
IFByYWN0 18373
IEV2ZXI= 18374
cHJpbQ== 18375
OnsK 18376
X2lt 18377
UE4= 18378
TWlsbGlz 18379
VU1FTlQ= 18380
IGJhZ3M= 18381
w6Vy 18382
QU5ORUw= 18383
MzU0 18384
IGlj 18385
IHRyYW5zcG9ydGF0aW9u 18386
IFNhdWRp 18387
aGFuZGxlcg== 18388
RHJhZw== 18389
IGhk 18390
Y29sbGFwc2U= 18391
X1BI 18392
IHVi 18393
QVJN 18394
IEFQUA== 18395
IHRvbmlnaHQ= 18396
IGRpbmluZw== 18397
UmVjb2du 18398
IGJj 18399
aWd0 18400
KG51bWJlcg== 18401
Qm9vdA== 18402
IGVsc2V3aGVyZQ== 18403
IGFycm93 18404
YXJnYQ== 18405
IGRlbGljaW91cw== 18406
IFNO 18407
V1I= 18408
VmFsaWRhdGU= 18409
IFF1YWxpdHk= 18410
KGVtYWls 18411
IGludGVycHJl 18412
aWdhdGlvbg== 18413
IGNob2NvbGF0ZQ== 18414
NTI1 18415
X2VkZ2U= 18416
IHN0b3Bz 18417
OmZ1bmN0aW9u 18418
KXw= 18419
IHRoYWk= 18420
IExvYWRpbmc= 18421
U3Rvcnk= 18422
VHJpZ2dlcg== 18423
YnJhbmNo 18424
IHRk 18425
ZW50aWNhdGVk 18426
IGFkdmVudHVyZQ== 18427
IGJsb2NrY2hhaW4= 18428
RXZlbnRIYW5kbGVy 18429
IHNxcnQ= 18430
LlBy 18431
TG5n 18432
QmVjYXVzZQ== 18433
IHZpdg== 18434
IG9jZWFu 18435
eWx2YW5pYQ== 18436
0LDRgQ== 18437
IFV0aWxz 18438
IGRlc3Blcg== 18439
IGRlZmVy 18440
CXJlcXVpcmU= 18441
aGw= 18442
UmVxdWlyZQ== 18443
XVw= 18444
IGRpcmVjdGlvbnM= 18445
X3Jlc291cmNl 18446
IHN1YnNjcmliZQ== 18447
IMO6 18448
IEhlYXJ0 18449
ZXN0cw== 18450
LXN1Yg== 18451
IFJo 18452
Zm9yRWFjaA== 18453
IGRlbGlnaHQ= 18454
IHRlcnJpdG9yeQ== 18455
LmNvbmN1cnJlbnQ= 18456
ICgr 18457
anBn 18458
IHByZXBhcmF0aW9u 18459
IHJvdW5kZWQ= 18460
Q29tbQ== 18461
LkxlZnQ= 18462
IG9waW5pb25z 18463
IE5hdmlnYXRpb24= 18464
KGZpcnN0 18465
Iiwk 18466
IGhpcmU= 18467
IGRldGVjdGlvbg== 18468
LmdldEVsZW1lbnRz 18469
IGVwcw== 18470
IHNrbGVhcm4= 18471
IGN6 18472
IC8+DQo= 18473
bWV0aWM= 18474
IHRyYW5zZm9ybWF0aW9u 18475
5Y+3 18476
IHJnYg== 18477
aXN0cmlidXRpb25z 18478
IGltcGxpY2l0 18479
L2lu 18480
ZGVzdGluYXRpb24= 18481
0LDRgtGM 18482
WmVybw== 18483
IHVuc2V0 18484
OTIw 18485
LndoZXJl 18486
Lmdv 18487
IGZvcm1hdGlvbg== 18488
IGRlY2xhcmF0aW9u 18489
KCkNCg0K 18490
IEV4cGw= 18491
CQkJICA= 18492
L3Bybw== 18493
LkpTT04= 18494
NDQx 18495
IGRlc2s= 18496
LnN1YnN0cg== 18497
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 18498
bHlu 18499
cHNvbg== 18500
NDA3 18501
ZGlzYWJsZQ== 18502
IEZ1bmM= 18503
CUFzc2VydA== 18504
IE1BUks= 18505
IGRlZmVhdA== 18506
IGJsaW5k 18507
IGNvbnN0YW50cw== 18508
MzYy 18509
LmhlYWRlcnM= 18510
VUlMRA== 18511
IGV4cGVuc2Vz 18512
UGl4ZWw= 18513
IGhy 18514
IGZlbA== 18515
IEVhc3Rlcm4= 18516
NDI0 18517
NDkw 18518
X2RlbA== 18519
MzU3 18520
IEN1Yg== 18521
IHNx 18522
CWNvdW50 18523
IERpcmVjdG9yeQ== 18524
IGV4Y2x1cw== 18525
IGhpc3Rvcmlj 18526
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 18527
IGNvbXBvc2l0aW9u 18528
IGRhdGFHcmlkVmlldw== 18529
IEJ1cm4= 18530
IEJD 18531
TWFzdGVy 18532
IHNwYXdu 18533
IGJlYXJpbmc= 18534
LlNldEFjdGl2ZQ== 18535
aWxv 18536
IGdhbGxlcnk= 18537
IGZvdW5kZWQ= 18538
IGF2YWlsYWJpbGl0eQ== 18539
LnNxcnQ= 18540
IHBlcw== 18541
IERPTQ== 18542
bWF0ZQ== 18543
T2N0 18544
IG1hdGNoZWQ= 18545
aXRpdml0eQ== 18546
IGFueGlldHk= 18547
LnByaWNl 18548
IEluc3RhbnQ= 18549
7Io= 18550
IHR1dA== 18551
SUNvbGxlY3Rpb24= 18552
LnNoYXJlZA== 18553
X3NxbA== 18554
dGJs 18555
bGlicmFyeQ== 18556
X2Rlc3Ryb3k= 18557
ZXJtYWw= 18558
IE5vdGVz 18559
IEVpbg== 18560
IHNvdXRoZXJu 18561
IE9USEVSV0lTRQ== 18562
IG1hY3Jv 18563
Lmxvd2Vy 18564
Y2xz 18565
Q29udGVudFZpZXc= 18566
Lmxpbms= 18567
Y29uc3RhbnQ= 18568
IEJlcw== 18569
IHNvbWVib2R5 18570
bmI= 18571
Mzk5 18572
Ij57 18573
KGxvY2Fs 18574
Li4uLi4= 18575
IE51bGw= 18576
bXg= 18577
IMOn 18578
IHBhdXNl 18579
LS0tLS0tLS0tLS0= 18580
X01P 18581
IENN 18582
IGZvcktleQ== 18583
IERWRA== 18584
IGNsb3Nlc3Q= 18585
X0RFVklDRQ== 18586
IFN0ZXBoZW4= 18587
IEJCQw== 18588
IFRyYXZlbA== 18589
UGFpbnQ= 18590
IFJlc3VsdHM= 18591
IFJ1bGU= 18592
IHRw 18593
IHJhdGluZ3M= 18594
Y2lu 18595
Y3N2 18596
Pi8= 18597
IEdPUA== 18598
bGFk 18599
INGA 18600
IGluZGV4UGF0aA== 18601
bWF0cml4 18602
PWY= 18603
YXJzZWQ= 18604
IH0pOw== 18605
IENvcw== 18606
IFNjb3Jl 18607
IHRhaw== 18608
IEVTUA== 18609
IElOQw== 18610
X05VTEw= 18611
LWZsZXg= 18612
Il1b 18613
aW50bw== 18614
ZWxhbmQ= 18615
QXV0aG9yaXphdGlvbg== 18616
X0ZBTFNF 18617
IGdhdGU= 18618
IHZpZA== 18619
aXN0ZW50 18620
VElNRQ== 18621
IHJld3JpdGU= 18622
IHRpZQ== 18623
IGFyY2hpdmU= 18624
NTEx 18625
LmV2ZW50cw== 18626
LmdldFBhcmFtZXRlcg== 18627
IFBlcm1pc3Npb24= 18628
IHByb2dyYW1tZQ== 18629
IOk= 18630
anVk 18631
IGNhbWVyYXM= 18632
MzM4 18633
MzQ5 18634
KHN5cw== 18635
IFN5cmlhbg== 18636
IGltcHJvdmVtZW50cw== 18637
IGhpcA== 18638
IHN1aWNpZGU= 18639
IHNjaG9sYXI= 18640
IGNvbXBhdGlibGU= 18641
MDIy 18642
cmVtb3Rl 18643
LmRvd24= 18644
RlVOQ1RJT04= 18645
IG1hbmFnaW5n 18646
IFVJS2l0 18647
LnJhdw== 18648
Pj4+Pg== 18649
Mzcx 18650
IGRlbWFuZHM= 18651
ZWxsaXRl 18652
IGRlbnQ= 18653
IE1pY3Jv 18654
5Y+W 18655
J11bJA== 18656
IElF 18657
aW1lbnNpb24= 18658
IHRyZW0= 18659
NjMw 18660
IGdhaW5lZA== 18661
LndpdGg= 18662
Lm9r 18663
aG91 18664
IGJvbQ== 18665
YW1wYWlnbg== 18666
IGpvaW5pbmc= 18667
ZmlzaA== 18668
IGFkZFN1YnZpZXc= 18669
ODYw 18670
IG5vcnRoZXJu 18671
LmNvcg== 18672
b3JldA== 18673
RGll 18674
aW5pc2g= 18675
X2NvbXA= 18676
IGF0dGVuZGVk 18677
IGNvbGxhcHNl 18678
IFNT 18679
YWNlbnQ= 18680
X0VRVUFM 18681
IERlZXA= 18682
UkdC 18683
CXRlc3Q= 18684
b2x2ZXM= 18685
dXNldA== 18686
VW5pdHlFbmdpbmU= 18687
d3JpdGVy 18688
UmVzb2x2ZXI= 18689
LCU= 18690
aWZmZXJlbmNl 18691
X3JlbW92ZQ== 18692
b25kYQ== 18693
IGZlbW1l 18694
Mzg1 18695
ZGVjb2Rl 18696
QnJhbmNo 18697
IGZsdXNo 18698
IGlubm92YXRpdmU= 18699
VGVzdHM= 18700
IFsnLi8= 18701
IGNvdmVyaW5n 18702
LmFkbWlu 18703
dWx0aXBhcnQ= 18704
KGxhbWJkYQ== 18705
77u/bmFtZXNwYWNl 18706
IFNwb3J0 18707
ICEo 18708
YWNsZXM= 18709
IGRlcHJlc3Npb24= 18710
IEtvbmc= 18711
NTcw 18712
IHBlcnQ= 18713
IENvbm4= 18714
IE90aGVyd2lzZQ== 18715
L2hvbWU= 18716
c3VwcG9ydGVk 18717
IHBpbms= 18718
IGludml0ZWQ= 18719
w7Fvcw== 18720
X2VuYWJsZWQ= 18721
IC0K 18722
Rlc= 18723
ZW5lcnM= 18724
IE1Z 18725
IHN1Z2dlc3Rpb25z 18726
Q2FudmFz 18727
IGZlcg== 18728
IE1hcmtldGluZw== 18729
QFRlc3Q= 18730
dW50dQ== 18731
IFZlbg== 18732
IENvdQ== 18733
aXZhbHM= 18734
RG9uYWxk 18735
bGltaXRlZA== 18736
CQkJCQkJCg== 18737
IGFuYWx5c3Q= 18738
KGVudHJ5 18739
IHJlcHJlc2VudGF0aXZl 18740
X2F0dHJpYnV0ZXM= 18741
IGZ1cg== 18742
LmhpZGU= 18743
cmVzcA== 18744
YWRvcmVz 18745
cmlkZXM= 18746
IEpvc2g= 18747
cm9ib3Q= 18748
IE5BVA== 18749
IHNlc3Nv 18750
IGludGVncmF0ZWQ= 18751
OnRydWU= 18752
cGFydHM= 18753
IHN0dXBpZA== 18754
OmV2ZW50 18755
QGVuZHNlY3Rpb24= 18756
IHB1 18757
LlRhYmxl 18758
IFlpaQ== 18759
YDsKCg== 18760
IGNsYW5n 18761
PSIiPg== 18762
ZW5nYW4= 18763
X3BhcmFtZXRlcnM= 18764
LmludGVybmFs 18765
IE1vZGVybg== 18766
IG1ldHJpYw== 18767
IHNlbWk= 18768
PXt7Cg== 18769
NzA3 18770
LmFtYXpvbg== 18771
IEJC 18772
YWludHk= 18773
dmlld3BvcnQ= 18774
MzY3 18775
IHN0YXJ0QWN0aXZpdHk= 18776
ZGlzcGF0Y2g= 18777
KioqKio= 18778
IGZsYXY= 18779
aWZmZXJlbnQ= 18780
Mzgy 18781
W3RoaXM= 18782
IHN0YWtl 18783
IGFyZ3VlZA== 18784
dmlvdXNseQ== 18785
Lndvcms= 18786
IE9haw== 18787
T2xk 18788
KGFzeW5j 18789
bm90ZXM= 18790
IGZsaXA= 18791
IGRpc2Fn 18792
IFRF 18793
CWVycm9y 18794
PCc= 18795
IMK7Cgo= 18796
IGZpbHRlcmVk 18797
IE1hY2g= 18798
IGh1bmc= 18799
X2R1bXA= 18800
X3NhbXBsZXM= 18801
LWRpc21pc3M= 18802
IHJheQ== 18803
SW1wbGVtZW50ZWQ= 18804
REs= 18805
IGplZA== 18806
MDkw 18807
IGJyZWFrcw== 18808
IGZpdHM= 18809
Lmdy 18810
IFplcm8= 18811
b3Jv 18812
IGVxdWFsbHk= 18813
ICdb 18814
IGNvbmNlcm5pbmc= 18815
PG1ldGE= 18816
cGxheWVycw== 18817
X1BPUw== 18818
X3NpbQ== 18819
SmFu 18820
IHlvdXJz 18821
CU4= 18822
IHNwaXI= 18823
IGNoYW1waW9u 18824
IEFuYWx5c2lz 18825
YXBh 18826
IE5TTG9n 18827
X2xpbmVz 18828
w7Fh 18829
CQkgICAgICAg 18830
ODE5 18831
LlNj 18832
UmVw 18833
ZXRyb2l0 18834
dXJhYmxl 18835
TUlU 18836
Y29tcGF0 18837
b3duZWQ= 18838
X2luZGljZXM= 18839
XSwNCg== 18840
IGRpc2NvdmVyeQ== 18841
IERpZWdv 18842
b2Jp 18843
LkluZGV4 18844
IHRyZW5kcw== 18845
UExBWQ== 18846
Lm5v 18847
IGxlbnM= 18848
X2NmZw== 18849
IGFubm8= 18850
YWdhbg== 18851
IHBlcmlvZHM= 18852
dGVybXM= 18853
eXo= 18854
IGF0dGFja2Vk 18855
aWJyYXRpb24= 18856
UEVDSUFM 18857
X2dyYWQ= 18858
IGFjY29yZGFuY2U= 18859
LlJlYWRMaW5l 18860
LmRldmljZQ== 18861
cml4 18862
LmNvbnRhaW5lcg== 18863
bWF5 18864
ZXJjaXNl 18865
IEx1 18866
IHJn 18867
INGB0YI= 18868
CQkKCQkK 18869
KHVu 18870
VEVSTkFM 18871
IGxlc3NvbnM= 18872
IGFsbGVnYXRpb25z 18873
IHRyYW5zbWlzc2lvbg== 18874
LlJlZg== 18875
TW9iaWxl 18876
IFRvdXJuYW1lbnQ= 18877
IE51dA== 18878
IEdh 18879
IENhcGl0YWw= 18880
ZGVmaW5pdGlvbg== 18881
LWV4cA== 18882
Y2xlYW4= 18883
IGZhbnRhc3k= 18884
IGVuaGFuY2U= 18885
ZW50ZW5jZQ== 18886
MDMx 18887
J106Cg== 18888
YWNrZXRz 18889
IGNlbGVicmF0ZQ== 18890
QCIs 18891
U2VyaWFsaXplRmllbGQ= 18892
IGFycmF5cw== 18893
dGI= 18894
CXN0 18895
W2Fzc2VtYmx5 18896
KHJlZw== 18897
LmNhdGVnb3J5 18898
IGltcHJvdmluZw== 18899
IHNhbG9wZQ== 18900
Qnl0ZUFycmF5 18901
T3JpZ2luYWw= 18902
IFt7Cg== 18903
5Zue 18904
IENsaW4= 18905
b2VuaXg= 18906
IFNhbXN1bmc= 18907
IG1haW50YWluZWQ= 18908
IGFnZW5kYQ== 18909
ZmFpbA== 18910
IHByZXNlbnRz 18911
IHRpbWluZw== 18912
Lm1hcms= 18913
Jz48 18914
IHByb21vdA== 18915
IGluY2w= 18916
X29ubHk= 18917
66W8 18918
IEF0dG9ybmV5 18919
LWRhdGU= 18920
IGxhbmRzY2FwZQ== 18921
IGZ1 18922
U1k= 18923
LnByb3A= 18924
IEFycg== 18925
cGFn 18926
UGFyYWxsZWxHcm91cA== 18927
JzoNCg== 18928
IGxvZ3M= 18929
YXVuY2g= 18930
dW5jaQ== 18931
bmFtYQ== 18932
VGFibGVDZWxs 18933
aXNzdWVz 18934
Lns= 18935
ZWN1cml0eQ== 18936
X2V4ZWM= 18937
b2xkcw== 18938
IGhvc3Rz 18939
IHByb3Rv 18940
X2ltcG9ydA== 18941
X3NvcnQ= 18942
IEJvdw== 18943
IE5vcm1hbA== 18944
IEZhcm0= 18945
LmNyZWF0ZVBhcmFsbGVsR3JvdXA= 18946
Um90YXRpb24= 18947
LmVycg== 18948
IHBsZWFzZWQ= 18949
aXRhZ2U= 18950
Lldo 18951
CQkgICAg 18952
TVI= 18953
IE1PUkU= 18954
IE5hdHVyYWw= 18955
X3RyYW5zZm9ybQ== 18956
QkFTRQ== 18957
ZW5lcmFs 18958
dXRkb3du 18959
LmNvbW1vbnM= 18960
V1Q= 18961
IGFhbg== 18962
LlJlc3VsdA== 18963
ZG9n 18964
IGNsaWNraW5n 18965
KSwKCg== 18966
I2xpbmU= 18967
T3BlcmF0b3I= 18968
IGNpdg== 18969
IG1lcmc= 18970
b2J1Zg== 18971
bmd0aGVu 18972
IFt7 18973
IGNhbmNlbGw= 18974
dHJpZ2dlcg== 18975
Ljo= 18976
V09SSw== 18977
ZGVjbGFyZQ== 18978
IGRlY3JlYXNl 18979
xZtjaQ== 18980
bG9vbQ== 18981
Lk5vbmU= 18982
IE1J 18983
IEphc29u 18984
IGhlYWx0aGNhcmU= 18985
aWFtb25k 18986
c3lsdmFuaWE= 18987
Kng= 18988
IFJh 18989
W2I= 18990
IHByaW50aW5n 18991
cGhhYmV0 18992
IExhYm91cg== 18993
b3BwZXI= 18994
IHppam4= 18995
LXRhcmdldA== 18996
X0ZVTkNUSU9O 18997
IG9jdA== 18998
0LXQvdC40Y8= 18999
5Zyo 19000
IHdlc3Rlcm4= 19001
IGNvbXB1dGVycw== 19002
IFJFVA== 19003
SGFzaE1hcA== 19004
W1N0cmluZw== 19005
Z2V0VmFsdWU= 19006
X0RBVEU= 19007
Lk5leHQ= 19008
IEZpZg== 19009
w6ls 19010
aWNrZWQ= 19011
5o4= 19012
LU1N 19013
IHsKCgo= 19014
IGNvbnRhY3Rz 19015
IGRpZ2l0cw== 19016
UHJvZHU= 19017
IHVudXN1YWw= 19018
IHJhcGlkbHk= 19019
dHVyZXM= 19020
IGFuZ3J5 19021
Y2FuY2Vs 19022
eHh4eA== 19023
X3BhcnNlcg== 19024
aWRpdHk= 19025
X1BSRUZJWA== 19026
NzEw 19027
IG1laHI= 19028
IHJhcmVseQ== 19029
ZXRoZQ== 19030
b3Blcw== 19031
ICUu 19032
d29ya3M= 19033
IHRoZXRh 19034
IGNvbnRyaWJ1dGlvbg== 19035
IFRvbnk= 19036
IHNxdWFk 19037
NTM3 19038
0LDQuQ== 19039
IMOubg== 19040
dGhlcmU= 19041
b3V0ZWQ= 19042
CXE= 19043
mYI= 19044
Z29vZA== 19045
TEk= 19046
6aG1 19047
IExpdmluZw== 19048
aXphYmV0aA== 19049
IGt0 19050
IERhbGxhcw== 19051
XV0sCg== 19052
IC8+Cgo= 19053
IHJhaXNpbmc= 19054
L3JvdXRlcg== 19055
X2dhbWU= 19056
MzY4 19057
IENVUg== 19058
emVucw== 19059
LmVz 19060
IGZvbnRXZWlnaHQ= 19061
KGZ1bmM= 19062
bm90aWZpY2F0aW9u 19063
ICcuLi8uLi8uLi8= 19064
IGJsYW1l 19065
44CCCgoKCg== 19066
YW5jbw== 19067
OTgw 19068
SWRlbnRpdHk= 19069
Zm9sbG93 19070
IGFydHM= 19071
eHM= 19072
IG9mZmljaWFsbHk= 19073
IFN0dWRpbw== 19074
IHJlY29tbWVuZGF0aW9ucw== 19075
IGxvY2FsZQ== 19076
IGFtYXRldXI= 19077
IEVuYWJsZQ== 19078
IGNhcHM= 19079
LkVuZA== 19080
Mzg4 19081
LWFkZA== 19082
X2dzaGFyZWQ= 19083
IENU 19084
Rm9yY2U= 19085
CiAgICAgICAgICAgIAo= 19086
IG9yYW5nZQ== 19087
IGxw 19088
IGFuc3dlcmVk 19089
LkdyaWQ= 19090
IGR1YWw= 19091
IHN0cmF0ZWdpYw== 19092
IG5vYm9keQ== 19093
IGZhdGFs 19094
X2VzdA== 19095
KGVs 19096
IOyg 19097
IEJ1ZGQ= 19098
QUlU 19099
X2ZhY3Rvcg== 19100
LW9uZQ== 19101
IEhBVkU= 19102
Ig0KDQo= 19103
NzYw 19104
UHJvZg== 19105
IMOkcg== 19106
c3RyaW5ncw== 19107
IGRpcnR5 19108
IEZhY2U= 19109
IEJlZ2lu 19110
IEJ1cw== 19111
IHdpcw== 19112
5a2X 19113
IHNwZWFrZXI= 19114
IGNhcnJpZXI= 19115
IE9t 19116
IGhhZG4= 19117
QWxsb3c= 19118
OjpfXw== 19119
IHZlcmI= 19120
IENvbXBsZXRl 19121
IEVhc3k= 19122
IGJpbGxz 19123
ICAKCg== 19124
VmVydGljYWw= 19125
IHByb24= 19126
IERlZmluZQ== 19127
IGxvb2t1cA== 19128
dmFyaWFibGVz 19129
IHBhbmRhcw== 19130
dW1lcw== 19131
IGlubm9j 19132
IHNldFVw 19133
IENoYW1waW9uc2hpcA== 19134
YXJ0aXN0 19135
IENUeXBl 19136
Rm91bmRhdGlvbg== 19137
4LmI 19138
IFNldHVw 19139
NDI4 19140
IHJlY2lwZXM= 19141
IFVJQ29sb3I= 19142
IEZpZ2h0 19143
IGF1dGhvcml6ZWQ= 19144
X2NsaWNr 19145
OTkw 19146
X3N1Y2Nlc3M= 19147
YW5nYW4= 19148
IE1vdW50YWlu 19149
IERvY3Rvcg== 19150
IGVnZw== 19151
IE1lZGljaW5l 19152
Y2xlcw== 19153
YC4K 19154
W2ludA== 19155
ZGFzaGJvYXJk 19156
IEFwcHJv 19157
LWRy 19158
IHByb2R1Y2Vz 19159
IHJlbnRhbA== 19160
IHJlbG9hZA== 19161
Mzgx 19162
IGFycml2YWw= 19163
c3BvdA== 19164
IHVuZGVydA== 19165
Mzc4 19166
IGVxdWlwcGVk 19167
IHByb3ZlZA== 19168
IGNlbnRlcnM= 19169
IGRlZmluZXM= 19170
YWxzbw== 19171
IG9wYWNpdHk= 19172
IFVuZm9ydHVuYXRlbHk= 19173
IElsbGlub2lz 19174
INC90LU= 19175
IFRlbXBsZQ== 19176
IFRyYWls 19177
IEtlbGx5 19178
IG1lYXN1cmVtZW50 19179
IHNlcGFyYXRlZA== 19180
LWNpcmNsZQ== 19181
SGV5 19182
IFJFQUQ= 19183
aWdpdHM= 19184
IGli 19185
IE1PRA== 19186
YXR0ZXJ5 19187
0LDQtw== 19188
IHZlbmQ= 19189
0LXQvdGC 19190
IEh0dHBDbGllbnQ= 19191
MzU5 19192
c2FmZQ== 19193
X0FTUw== 19194
aWNpdA== 19195
IENvbnN0cnVjdA== 19196
IENsbw== 19197
IFNpeA== 19198
X1RPS0VO 19199
KGJsb2Nr 19200
IHdhcm5lZA== 19201
Lyoh 19202
ITwv 19203
YWNhZGVz 19204
IG1hcmc= 19205
ZXJhc2U= 19206
IGRpc3BsYXlz 19207
aXN0cmF0b3I= 19208
Z2V0cw== 19209
IGd0aw== 19210
X0dFTkVS 19211
bmVk 19212
XyU= 19213
IGZhdm91cml0ZQ== 19214
IEJydQ== 19215
IMOh 19216
c2Vjb25kYXJ5 19217
IG1hc3Q= 19218
IHNvcGg= 19219
IFNhZmV0eQ== 19220
aGFyZA== 19221
MDYy 19222
cmFpc2U= 19223
IEV4Y2hhbmdl 19224
IGNvbnRlbXBvcmFyeQ== 19225
IGRyZWFtcw== 19226
IHRlbA== 19227
IG5laWdoYm9ycw== 19228
IEhvbHk= 19229
Mzgz 19230
Lm1lYW4= 19231
ODEw 19232
ZW1pdA== 19233
IE1lc3M= 19234
Q2FzdA== 19235
TkVDVA== 19236
cGx1Z2lucw== 19237
IHJi 19238
d3I= 19239
IGh1Yg== 19240
IFN0dWRpZXM= 19241
NTYy 19242
IHBvc3Nlc3Npb24= 19243
JCgnLg== 19244
ZW5zaXRpdmU= 19245
IGFkZENyaXRlcmlvbg== 19246
X18u 19247
IGV4cGVydGlzZQ== 19248
QXJjaA== 19249
IGN1Yg== 19250
ZXJ2ZXJz 19251
IHBhcnRpY2xlcw== 19252
dWFy 19253
IGJvdW5kYXJ5 19254
KScs 19255
YWpv 19256
IHByZWY= 19257
OmA= 19258
IGhhcmFzcw== 19259
aXU= 19260
IHJlYWNoaW5n 19261
IG1lZw== 19262
IHpv 19263
KElE 19264
X3JlcXVpcmVk 19265
IHPDqQ== 19266
IFF1ZXVl 19267
QU8= 19268
IGdlbQ== 19269
ODEy 19270
cHRvbg== 19271
ODgw 19272
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 19273
NjYw 19274
aWpr 19275
KHsNCg== 19276
IGNvbGxpc2lvbg== 19277
IFVrcmFpbmU= 19278
IC0qLQo= 19279
TlNJbnRlZ2Vy 19280
X0JMT0NL 19281
NTY3 19282
IFRleHR1cmU= 19283
IGRlY2xpbmVk 19284
bmFu 19285
X3dhaXQ= 19286
IHBvbGl0aWNpYW5z 19287
NDEz 19288
IGNvaW5z 19289
IGRlcml2 19290
aGVscGVy 19291
IFBlcmhhcHM= 19292
LnJlY3Q= 19293
IFBvbHk= 19294
YWJsaW5n 19295
fS8+Cg== 19296
IGlubm92YXRpb24= 19297
XyI= 19298
ICk7DQoNCg== 19299
IHNwb3Rz 19300
IGNob29zaW5n 19301
LmNz 19302
IGZsZXhpYmxl 19303
VUludA== 19304
NDM1 19305
OTMw 19306
IHNjcmF0Y2g= 19307
LWFs 19308
IGZlc3RpdmFs 19309
IG91dHN0YW5kaW5n 19310
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 19311
TWVhbg== 19312
IE9yZWdvbg== 19313
c3ltYm9s 19314
LmFjY291bnQ= 19315
ZG5leQ== 19316
Jycn 19317
ISIs 19318
OTAx 19319
IHBhcnRpY2xl 19320
w4M= 19321
W01BWA== 19322
SVZFUg== 19323
RVJFTkNF 19324
TlNNdXRhYmxl 19325
IENvbHVtYmlh 19326
XwoK 19327
LmZy 19328
IGNvZ24= 19329
VlI= 19330
IE1ldGhvZHM= 19331
IE1hZGU= 19332
IEJS 19333
IEVsc2U= 19334
IGVnZ3M= 19335
IHN3aW5n 19336
IEludg== 19337
IGRpc2Vhc2Vz 19338
IGZpcm1z 19339
IGxlbW1h 19340
fWApOwo= 19341
bGluZ3M= 19342
IGd5bQ== 19343
dW1pbnVt 19344
LlRyaW0= 19345
TWVt 19346
IGNyaXRpY2lzbQ== 19347
aWJlcm5hdGU= 19348
X1RY 19349
aW9uaQ== 19350
IGd1aWRhbmNl 19351
IHJlcGVhdGVkbHk= 19352
IHN1cHBsaWVy 19353
IHBhaW50aW5n 19354
ODY0 19355
LkZyYWdtZW50 19356
ZWRFeGNlcHRpb24= 19357
IHdpcmluZw== 19358
IGNvdXJ0cw== 19359
V0VC 19360
5pyJ 19361
XC4= 19362
aWxsYW5jZQ== 19363
IGJyb3dz 19364
IFBhdHRlcm4= 19365
UExJQ0FUSU9O 19366
IFN1bW1lcg== 19367
Q2hhaW4= 19368
IGN1dGU= 19369
bWVyY2lhbA== 19370
IGRpbA== 19371
IEZyYW5rbGlu 19372
CWdsb2JhbA== 19373
SU5DTFVESU5H 19374
aGlzdG9yeQ== 19375
IGxzdA== 19376
UXQ= 19377
U0RM 19378
YWxpYQ== 19379
aWVyZQ== 19380
KC4uLg== 19381
CWNpbg== 19382
aWZmcw== 19383
dmVsb3Bl 19384
IFJvb3Q= 19385
Y2x1c3Rlcg== 19386
VXNlck5hbWU= 19387
aWduZQ== 19388
PFM= 19389
IGZlc3Q= 19390
NDE5 19391
IGluZGljYXRpbmc= 19392
a2VlcGVy 19393
IGNhZGE= 19394
w6ln 19395
Y29uc2lu 19396
IEdC 19397
IGxi 19398
ZW1vbnk= 19399
LWljb25z 19400
X2RvYw== 19401
QWN0b3I= 19402
ZWxlbQ== 19403
LkRlbGV0ZQ== 19404
IGluZmVjdGlvbg== 19405
IFByaXZhY3k= 19406
IGdyZWF0bHk= 19407
IFBvcw== 19408
IFRyZWF0 19409
Rmxvdw== 19410
IGF0dHJhY3RpdmU= 19411
IE1hcmM= 19412
c3Vkbw== 19413
dGVzeQ== 19414
LWFu 19415
OTk4 19416
YWJhbWE= 19417
IFdvdWxk 19418
IHN1Y2s= 19419
aW5kZXhQYXRo 19420
IEV0 19421
VGltZXM= 19422
Nzgw 19423
IGNsdWJz 19424
X2Fzc29j 19425
IGFjcXVpcmVk 19426
KCI6 19427
IGludGVuc2U= 19428
Lm1hcHM= 19429
RXhwZWN0ZWQ= 19430
VG9nZ2xl 19431
IGF5 19432
IGxpZmVzdHlsZQ== 19433
LWNhbGxlZA== 19434
IFNub3c= 19435
Vm9sdW1l 19436
IGNhbm5hYmlz 19437
IERpcmVjdGlvbg== 19438
IExpbWl0ZWQ= 19439
LXNwZWNpZmlj 19440
IGRvd250b3du 19441
L2ljb25z 19442
IHJldmVu 19443
TGVn 19444
ODg1 19445
PW51bGw= 19446
NDk2 19447
S2V5Ym9hcmQ= 19448
JykpLg== 19449
ICIiOw0K 19450
IGF0dGl0dWRl 19451
Lm5hdmlnYXRl 19452
LWVycm9y 19453
QU1QTEU= 19454
IEpheQ== 19455
dnI= 19456
Y293 19457
LmNvbXBpbGU= 19458
IG1lbW9yaWVz 19459
X21hcms= 19460
IE1pbm5lc290YQ== 19461
IGtvc3Rlbg== 19462
IHByb2JhYmlsaXR5 19463
d2FybmluZw== 19464
IGdlbmV0aWM= 19465
Rml4dHVyZQ== 19466
IEhhc2hTZXQ= 19467
Tm9tYnJl 19468
X21vbnRo 19469
xrA= 19470
LXN0YXJ0 19471
eHlnZW4= 19472
CWZ0 19473
aWFnbm9zdGljcw== 19474
IE1hdHRoZXc= 19475
IGNvbmNlcHRz 19476
IGNvbnN0cg== 19477
LlN0YXRl 19478
0LjQvQ== 19479
Tm92 19480
zrE= 19481
IFBhbmVs 19482
5Liq 19483
Y29tcGFyZQ== 19484
PigpCg== 19485
IGFwcGx5aW5n 19486
IHByb21pc2Vk 19487
IG94 19488
bmNpYQ== 19489
IFZhbGlkYXRpb24= 19490
b3J0cw== 19491
X2N1cg== 19492
ZWxlY3Q= 19493
ZXll 19494
KERhdGE= 19495
IHJlcG9ydGVy 19496
IEJ1ZmY= 19497
Mzk1 19498
IHNy 19499
ICI7 19500
aWNreQ== 19501
IHRlbXBvcg== 19502
U04= 19503
IHJlc2lkZW50 19504
cGlyZXM= 19505
eXNpY2Fs 19506
IGVuZG9yc2U= 19507
IFNvbmc= 19508
aXNFbXB0eQ== 19509
bGVldA== 19510
X3V0aWw= 19511
IGRpc3Rpbmd1 19512
IFRhbGs= 19513
IE1vdA== 19514
KGRlZmF1bHQ= 19515
LkFyZw== 19516
Z29yaXRobXM= 19517
X3dvcmRz 19518
aW1tZXI= 19519
X3Jlc2V0 19520
ZmFtaWx5 19521
V1c= 19522
IHNhdmluZ3M= 19523
IOKAnQ== 19524
X2VuYWJsZQ== 19525
c2lkZWJhcg== 19526
UnVubmluZw== 19527
IGFsaQ== 19528
IHRlc3RpbQ== 19529
IHdhcm5pbmdz 19530
IENoZW0= 19531
IEV4aXQ= 19532
IGZvdW5kZXI= 19533
cGVjdG9y 19534
IHJt 19535
X2RhdGFzZXQ= 19536
IERhcw== 19537
IGhhbg== 19538
R2V0dHk= 19539
w6Fs 19540
IG55 19541
IHBvdmVydHk= 19542
IHJlc3VsdGVk 19543
LmJ5 19544
IFZpc2l0 19545
IG9idGFpbmluZw== 19546
LycuJA== 19547
ICAgICAgICAgICAK 19548
c2hhbGw= 19549
X0xFRlQ= 19550
VUlJbWFnZQ== 19551
X05hbWU= 19552
aGF2ZQ== 19553
IE5vYg== 19554
bHI= 19555
LWZvb3Rlcg== 19556
IG5ha2Vk 19557
IEdhcmRlbg== 19558
XEZhY2FkZXM= 19559
IGdyYWR1YXRl 19560
NDE3 19561
IGZyYW5jaGlzZQ== 19562
cGxhbmU= 19563
IGNvbnRyaWJ1dGlvbnM= 19564
IHN0cmluZ1dpdGg= 19565
IGNyeXB0bw== 19566
IG1vdmVtZW50cw== 19567
YXRoZXJz 19568
IGxpZmV0aW1l 19569
IGNvbW11bmljYXRl 19570
amFy 19571
IEZyYWdtZW50 19572
X0lG 19573
IE5hdnk= 19574
IEZpZ3VyZQ== 19575
IHNpbXVsYXRpb24= 19576
X3N0b3A= 19577
IHJlcG9ydGVycw== 19578
IHZlcnN1cw== 19579
YWph 19580
IM6x 19581
IGdvdmVybm9y 19582
TGlzdEl0ZW0= 19583
IHNlYWxlZA== 19584
LkJhY2tncm91bmQ= 19585
ZWRp 19586
YXNoaW5n 19587
IGxpcA== 19588
IElo 19589
bWVyZ2U= 19590
IG5lYw== 19591
MDI0 19592
ZWxvY2l0eQ== 19593
QVRFRw== 19594
IHNlZWRz 19595
IGZsb2F0aW5n 19596
NzAx 19597
X0ZB 19598
d2Fsaw== 19599
CXVzZXI= 19600
X2RlcHRo 19601
IHdhZ2U= 19602
QGFwcA== 19603
Tmls 19604
KFsi 19605
KHZlY3Rvcg== 19606
IHNlY3JldGFyeQ== 19607
NDYx 19608
IGpQYW5lbA== 19609
dmV6 19610
wqDCoMKgwqA= 19611
ZGlyZWN0aW9u 19612
IEVQ 19613
IGh1bnQ= 19614
Mzk2 19615
SnNvblByb3BlcnR5 19616
IFBPUlQ= 19617
XSIs 19618
0LDQvw== 19619
IEZvcmVpZ24= 19620
cGFuaWM= 19621
IHRyaWFscw== 19622
IEFsZQ== 19623
IHJ1cmFs 19624
LXZhbHVl 19625
YXV0aG9yaXplZA== 19626
IFNjb3RsYW5k 19627
LmRyb3A= 19628
IE1U 19629
57E= 19630
Mzkx 19631
cm93dGg= 19632
NTE1 19633
RmlsZVBhdGg= 19634
IHJlY2FsbA== 19635
aWZsZQ== 19636
IGNlbA== 19637
IFNFTEVDVA== 19638
a24= 19639
X2Nhc2U= 19640
IGNyb3A= 19641
NTQz 19642
c3VyZQ== 19643
cG90 19644
SUNT 19645
IHN0ZW0= 19646
IGluZHVzdHJpZXM= 19647
UHV0 19648
IGFiZXI= 19649
cm9hZGNhc3Q= 19650
SWNvbnM= 19651
KSIpCg== 19652
5oiQ5Yqf 19653
Z3Vp 19654
IGFzc3VtZWQ= 19655
IHJ4 19656
RUE= 19657
6Kc= 19658
RUxM 19659
IGRvc2U= 19660
IGluZQ== 19661
IGRlZXBlcg== 19662
bGlkZXI= 19663
IG9yZGluYXJ5 19664
IGdvbGY= 19665
NjA1 19666
X0lNQUdF 19667
IE5BTUU= 19668
KG1vZHVsZQ== 19669
IGF0b20= 19670
IGJlbHQ= 19671
IG9mZmljZXM= 19672
NTA2 19673
YmV0YQ== 19674
IHBoaWxvc29waHk= 19675
KEpTT04= 19676
LWZpZWxk 19677
IGludHJvZHVjZQ== 19678
IGNvbnZlbmllbmNl 19679
b3B0aW0= 19680
PiIK 19681
YXRoeQ== 19682
IGVtcGxveWVy 19683
cXVhdGU= 19684
IGVkaXRlZA== 19685
QXJndW1lbnRz 19686
IE5hdGlvbnM= 19687
X18p 19688
IG5vc2U= 19689
IFNhbXBsZQ== 19690
JykKCgo= 19691
IGNha2U= 19692
LmdldEF0dHJpYnV0ZQ== 19693
SEQ= 19694
Mzky 19695
TW9kaWZpZWQ= 19696
NDQ1 19697
IHByZWRpY3RlZA== 19698
xYQ= 19699
YW5pZQ== 19700
U29ycnk= 19701
KGRvYw== 19702
d2luZA== 19703
aWV2ZQ== 19704
IHByb3Zpc2lvbnM= 19705
QVRFUg== 19706
T1RF 19707
TVk= 19708
LkF1dG93aXJlZA== 19709
IEJhdGg= 19710
NDIz 19711
LkJvb2xlYW4= 19712
IGJhY2tlbmQ= 19713
Lk1vdXNl 19714
YXRlcmFs 19715
cGFwZXI= 19716
Q29uc3Q= 19717
IFZS 19718
X2VudGl0eQ== 19719
X0NUUkw= 19720
IFByb3RlY3Rpb24= 19721
IEdN 19722
IFN0dWR5 19723
IHNvdXA= 19724
b3RpbWU= 19725
J3VzZQ== 19726
XSI= 19727
L3VzZXJz 19728
YXVn 19729
IEhvbmc= 19730
X25vcm0= 19731
44Go 19732
IHNlY3Jl 19733
KEJ1aWxk 19734
IENvbnRyYWN0 19735
b2xhcw== 19736
IHNhdWNl 19737
IGFnZ3Jlc3NpdmU= 19738
IHJhY2lhbA== 19739
Y2hhcmFjdGVy 19740
QEA= 19741
IGNvbXBpbGU= 19742
IFZvaWQ= 19743
X3JlbQ== 19744
X21lbW9yeQ== 19745
MzQ4 19746
a2s= 19747
IG1pYw== 19748
U2FtZQ== 19749
VXRpbGl0eQ== 19750
IEh0bWw= 19751
IFhtbA== 19752
UmVhZHk= 19753
IGdhbGw= 19754
IGFsbGVnZWRseQ== 19755
CQkJCSAgIA== 19756
IE1ldGFs 19757
IFBlcnNvbmFs 19758
IGJvcmRlclJhZGl1cw== 19759
cnhqcw== 19760
b2JqZWN0cw== 19761
IHdhbnRpbmc= 19762
IGJvd2w= 19763
dmVuZG9y 19764
b2Zmc2V0b2Y= 19765
IFJz 19766
IFJhdGluZw== 19767
IHJhbGx5 19768
X05PREU= 19769
NDE4 19770
IE1peA== 19771
IGFkdmVydGlz 19772
NDg1 19773
NjY3 19774
IG5hcnJhdGl2ZQ== 19775
c2Fs 19776
IG1j 19777
U0Vycm9y 19778
IGZpbmdlcnM= 19779
IGFjY29tcGFueQ== 19780
IHRpcmVk 19781
IHN0cmlkZQ== 19782
IGd1aQ== 19783
ZWxpc3Q= 19784
TG9jYWxl 19785
IHJlbGVhc2Vz 19786
aWtpbmc= 19787
IGFuZ2Vy 19788
KSkpCgo= 19789
YWxsZXN0 19790
U3VtbWFyeQ== 19791
KE8= 19792
KGZvcg== 19793
IGJhc2tldGJhbGw= 19794
IHJvYWRz 19795
IEluc3RhbGw= 19796
IEZhYg== 19797
aXRtYXA= 19798
NDc1 19799
ICkpCg== 19800
IGludGVyc2VjdGlvbg== 19801
aWdoYm9y 19802
IEJyeQ== 19803
IEhFUkU= 19804
U29mdHdhcmU= 19805
ZWxmYXJl 19806
YWNz 19807
NjIy 19808
IHRyYWlsZXI= 19809
LmdldENsYXNz 19810
Y2hhcnM= 19811
IHJlZ3VsYXRpb24= 19812
IHJlZmVycw== 19813
IGRlc3RydWN0aW9u 19814
IGNvbnRpbnVvdXM= 19815
IEF1c3Rpbg== 19816
6aI= 19817
YWthbg== 19818
LndpbmRvdw== 19819
IFRlbXBsYXRlcw== 19820
IGFic2VuY2U= 19821
Om4= 19822
IGRpc29yZGVy 19823
Zmxhc2g= 19824
IGRlbGV0 19825
Ym9hcmRz 19826
ICAJ 19827
Uk9Q 19828
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 19829
IGFjcXU= 19830
IGxhd3N1aXQ= 19831
IFJldmlld3M= 19832
IGdhcmFnZQ== 19833
dGltZXI= 19834
IGVq 19835
IFJlY3RhbmdsZQ== 19836
IGZsb3dlcnM= 19837
Mzk4 19838
aWxzdA== 19839
IEluc3RhbmNl 19840
U3VwZXI= 19841
ZGV0 19842
ZGlzcG9zaW5n 19843
IEVT 19844
IElD 19845
dmVyZQ== 19846
U2s= 19847
X2NoYW5uZWxz 19848
cHV0ZWQ= 19849
L251bGw= 19850
bm5lbg== 19851
NDMx 19852
IEdhbGxlcnk= 19853
X2dsb2JhbA== 19854
QXV0aGVudGljYXRpb24= 19855
IFJhbms= 19856
IGJsb2NrZWQ= 19857
IGNhbG0= 19858
bWFya2V0 19859
CXZhbA== 19860
IGF1Zw== 19861
cGVyaW9k 19862
IENvbnN0YW50 19863
ID8+Ij4K 19864
IGxvYmJ5 19865
cGFs 19866
Mzc5 19867
IHNpbms= 19868
NTA4 19869
aWFo 19870
0KE= 19871
dXJuYW1l 19872
IGNvbnZlcg== 19873
IGludmVzdGlnYXRl 19874
Q2hyaXN0 19875
SHVi 19876
IElORA== 19877
IFBlZA== 19878
dXJhcw== 19879
CXVybA== 19880
IFRybw== 19881
IHByZWZlcmVuY2Vz 19882
IGd1YXJhbnRlZWQ= 19883
YAoK 19884
IHBvcnRpb25z 19885
IGV2YWx1 19886
Jz48Lw== 19887
KCl7Cgo= 19888
ZW5jb2RlZA== 19889
emlsbGE= 19890
LkNsYXNz 19891
ICpf 19892
Xyc= 19893
IHZpZXdlZA== 19894
IFBoaWxhZGVscGhpYQ== 19895
LnJvd3M= 19896
QWRkZWQ= 19897
IFRvdWNo 19898
ODQw 19899
LmRlbGVnYXRl 19900
cXVlZXpl 19901
c2xpZGU= 19902
IFNlbmlvcg== 19903
KHRhZw== 19904
IGludGVydmlld3M= 19905
IHN1YQ== 19906
YXRhcw== 19907
QAoK 19908
ZGlzdGFuY2U= 19909
IHNlaW4= 19910
bGF0ZXN0 19911
IFByaW5jZQ== 19912
IGx1eHVyeQ== 19913
IHJlZnI= 19914
IEtpdGNoZW4= 19915
0YQ= 19916
KGF0 19917
RmluYWw= 19918
w7xjaw== 19919
X3plcm8= 19920
IEFCQw== 19921
IE1hbmNoZXN0ZXI= 19922
IGNvdw== 19923
Q09M 19924
X05VTUJFUg== 19925
Y2hhbmdlcw== 19926
Z2VuZXJhdGU= 19927
LlByaW50Zg== 19928
MzY5 19929
c2hhcmU= 19930
U3RvY2s= 19931
IFBU 19932
QW5pbQ== 19933
YW5nYQ== 19934
IGln 19935
dXBsb2Fkcw== 19936
IHBhY2tlZA== 19937
IH1dOwo= 19938
KHNlbmRlcg== 19939
IFdpcmU= 19940
aXNvbnM= 19941
IHBsYXlvZmY= 19942
XEU= 19943
NjA4 19944
L1I= 19945
IGhlYWRlZA== 19946
QWxwaGE= 19947
KG9yZGVy 19948
IG9wcG9uZW50cw== 19949
YWNrc29u 19950
X21lbWJlcg== 19951
VHVybg== 19952
IFNvdmlldA== 19953
7JeQ 19954
YXVnZQ== 19955
NDQ4 19956
IGluY29taW5n 19957
IGphaw== 19958
LWdhbWU= 19959
IE1hbGU= 19960
IE1vbnRo 19961
U3RhZ2U= 19962
LmV4ZQ== 19963
T3duUHJvcGVydHk= 19964
LnNldEl0ZW0= 19965
IGRj 19966
5L2c 19967
IGJydXQ= 19968
IGF0dGVtcHRpbmc= 19969
Lmxlbg== 19970
IGp1ZGdtZW50 19971
IHNhYg== 19972
IGNhZA== 19973
IEl0ZW1z 19974
Y29tZm9ydA== 19975
ZWxpemU= 19976
L2xvZw== 19977
IGVudHJlcHJlbmU= 19978
IGNvbXBpbGVy 19979
X3ZhbGlkYXRpb24= 19980
cmV2aWV3 19981
IHRleHRCb3g= 19982
IGZyYWN0aW9u 19983
IEJhbA== 19984
PjsKCg== 19985
LkF1dG9TY2FsZU1vZGU= 19986
IGNhdHM= 19987
NDY1 19988
IHJlZ2lzdHJ5 19989
dWx1cw== 19990
Rkk= 19991
cGF5bG9hZA== 19992
LXNlYXJjaA== 19993
IHN0YXlpbmc= 19994
YWNpb3Vz 19995
RGVjb3JhdGlvbg== 19996
UmV2aWV3 19997
SW5m 19998
S2VlcA== 19999
aXRpcw== 20000
LFN0cmluZw== 20001
Q29vcmQ= 20002
IHBlcm8= 20003
U2V4 20004
IEF0bGFudGE= 20005
dWVzdGE= 20006
QXJnYg== 20007
Pio= 20008
fV8= 20009
Rm9vdGVy 20010
IGVtcGxveWVk 20011
X2JvdW5k 20012
dmlkZQ== 20013
LmZ1bmM= 20014
JHNjb3Bl 20015
IHNwbw== 20016
IEFuYWw= 20017
b3VuY2Vk 20018
YXJvdW5k 20019
IHJlc3RyaWN0aW9u 20020
IHNob3Bz 20021
5YA= 20022
IExhdGlu 20023
LWNvbA== 20024
IGJhcmVseQ== 20025
IEV1cm8= 20026
RXI= 20027
IGZhaXJl 20028
X2Rpc3RhbmNl 20029
X3VubG9jaw== 20030
UXVvdGU= 20031
SVZBVEU= 20032
IOWI 20033
IGFpbWVk 20034
IFJldHJpZQ== 20035
Lml0ZXI= 20036
IHdyYXBwZWQ= 20037
IGFncmVlbWVudHM= 20038
c3RydW1lbnQ= 20039
KHByb2R1Y3Q= 20040
IHN0dWRpZWQ= 20041
LnNldFZhbHVl 20042
IHll 20043
IENhY2hl 20044
TUJPTA== 20045
IHF1YXJ0ZXJiYWNr 20046
IHN5bnRheA== 20047
LmdldEVsZW1lbnRzQnk= 20048
LnZlcnNpb24= 20049
d2Vic2l0ZQ== 20050
UnVubmVy 20051
X3NpbmdsZQ== 20052
YXRpdg== 20053
IEFsdGVybg== 20054
IEJlYXV0aWZ1bA== 20055
cmlnaHRhcnJvdw== 20056
IGRpdmVyc2l0eQ== 20057
cGxhc2g= 20058
KGNv 20059
LkZpbGw= 20060
IHR5cGluZw== 20061
Mzg3 20062
MDIz 20063
IGNsYXI= 20064
SGl0 20065
T08= 20066
YWNjbw== 20067
NTA3 20068
d29ydGg= 20069
IHNjcmlwdHM= 20070
IE11c2xpbXM= 20071
IExM 20072
ZXJ2aW5n 20073
KGJvb2xlYW4= 20074
IGJhc2ViYWxs 20075
IENBTg== 20076
Mzk0 20077
MDQ0 20078
TUFJTA== 20079
ZGVwZW5k 20080
IHJlc3BlY3RpdmU= 20081
IGNvbnN0ZXhwcg== 20082
Lio7Cgo= 20083
J10pKQo= 20084
IHlhcmQ= 20085
IGlkZW50aWNhbA== 20086
aWZlY3ljbGU= 20087
VVNI 20088
dXBpdGVy 20089
LnZhbGlkYXRl 20090
Y2xp 20091
SVNURVI= 20092
SW5kaWNhdG9y 20093
RmFpbA== 20094
IGRlbW9jcmFjeQ== 20095
LnZhcg== 20096
IHNhdGlzZmllZA== 20097
LS0tLS0tLS0tLS0tLQ== 20098
ZW5jZXI= 20099
aG9y 20100
IHJvdW5kcw== 20101
REFP 20102
b2E= 20103
IGZsYXNr 20104
PWM= 20105
W10K 20106
L2Rpc3Q= 20107
IHBhcnRl 20108
IGNvbmZpcm1hdGlvbg== 20109
ZXJvbg== 20110
YXdhcmU= 20111
PD8+ 20112
IGRlcGVuZGVuY2llcw== 20113
IFZpZGVvcw== 20114
LXJvdw== 20115
ICoqLwo= 20116
IG5vdQ== 20117
IGhvdmVy 20118
5p4= 20119
IG5pbg== 20120
IFVTRA== 20121
TWFj 20122
X0xvYWQ= 20123
IG91dGNvbWVz 20124
X3NvY2tldA== 20125
IHF1ZXJpZXM= 20126
d20= 20127
NTky 20128
IGhpdHRpbmc= 20129
aW51eA== 20130
TWljaA== 20131
dWRnZQ== 20132
QVRBQg== 20133
IHZ1bG5lcmFibGU= 20134
5L4= 20135
IHBvcnRmb2xpbw== 20136
OllFUw== 20137
CW1hcA== 20138
Qm91bmQ= 20139
IGl0ZXJhdGlvbg== 20140
aW5jZXNz 20141
IGFjdG9ycw== 20142
IFF1YWw= 20143
X2NsZWFu 20144
44CR44CQ 20145
TVNH 20146
R3JlZW4= 20147
IE9mZmljZXI= 20148
IHNtb2tpbmc= 20149
Pics 20150
IEZsbw== 20151
Kys7 20152
NDMz 20153
b2x5Z29u 20154
IGJ1bGs= 20155
IGRyYW1h 20156
IGV4Y2VwdGlvbnM= 20157
b3NlZA== 20158
ICsNCg== 20159
IGxlZ2FjeQ== 20160
Q1Y= 20161
IGNvbnRyaWJ1dGVk 20162
IFRlcm1z 20163
IGJ0 20164
NDM0 20165
IHVudHVr 20166
IGFsaWVu 20167
PT09Cg== 20168
CVZlY3Rvcg== 20169
IGxz 20170
T25saW5l 20171
LmZhY2Vib29r 20172
bnVtZXJpYw== 20173
b2NrZXRz 20174
QXV0 20175
YnVyeQ== 20176
LXJlZHV4 20177
IFJlZGlzdHJpYnV0aW9ucw== 20178
R0xPQkFMUw== 20179
dXJyZW5jaWVz 20180
IHRvbnM= 20181
4oCZLA== 20182
IMOq 20183
KGNvbA== 20184
IFN5bWJvbA== 20185
IHN0YXllZA== 20186
IE1M 20187
IG11bmljaXA= 20188
IHNleG8= 20189
U2Vu 20190
bnI= 20191
IGdhaW5z 20192
IHNob3J0bHk= 20193
Lk1lbnU= 20194
w70= 20195
S05PV04= 20196
IG9wZXJhdG9ycw== 20197
LVY= 20198
IFBhdHJpY2s= 20199
L2FkZA== 20200
X0NP 20201
aXJhdGlvbg== 20202
KHBvc3Q= 20203
UG9zdHM= 20204
L18= 20205
IHBsdWc= 20206
IGludGVsbGVjdHVhbA== 20207
IG1ldGFi 20208
IHByZWduYW5jeQ== 20209
IFByZW1pZXI= 20210
bm0= 20211
IHByZWRpY3Rpb24= 20212
NjA2 20213
IE1pbmlzdHJ5 20214
VGhyZWU= 20215
dmFsdWF0ZQ== 20216
IE1pbmk= 20217
YnU= 20218
0L7Qtw== 20219
PHVs 20220
IGRk 20221
b2x2aW5n 20222
IEN1dA== 20223
NjAy 20224
IHNjaGVt 20225
LnRyYWlu 20226
aXRhdGU= 20227
IHJpY2U= 20228
IGJpcmRz 20229
44Gr 20230
bWlkZGxl 20231
c3RydWN0aW9ucw== 20232
IG5lcnY= 20233
YXF1ZQ== 20234
NDUz 20235
IGZsdQ== 20236
IHN1cnZpdmFs 20237
IEdhbGF4eQ== 20238
IEZhbnQ= 20239
Lk9yZGVy 20240
QXR0cmli 20241
aXJ0cw== 20242
w6lj 20243
TW92aWU= 20244
IGNvbmNl 20245
cXVhcnRlcnM= 20246
IG1vb2Q= 20247
LkFkZFJhbmdl 20248
OTQy 20249
IHJlc29sdmVk 20250
44OI 20251
IGJ1cm5pbmc= 20252
NzAy 20253
CQkJCQ0K 20254
IFdF 20255
IGhvc3Rpbmc= 20256
TEFC 20257
IG1hbmFnZXJz 20258
IHN0cmVuZ3RoZW4= 20259
PGNvbnN0 20260
IEZpcmViYXNl 20261
b25lZA== 20262
IEplYW4= 20263
Jzwv 20264
IDo9Cg== 20265
YWxnb3JpdGht 20266
IEFyYw== 20267
IGZyb3plbg== 20268
X2V2ZW50cw== 20269
IG92ZXJzZQ== 20270
Z29vZHM= 20271
IGZhaXQ= 20272
IHZpYWdyYQ== 20273
b3Nlcw== 20274
OTIy 20275
IGNvbXBpbGVk 20276
IEF0aA== 20277
IHN1YnN0YW5jZQ== 20278
YW5pbWF0ZWQ= 20279
UEY= 20280
cHJldmlvdXM= 20281
IHJvb3Rz 20282
KGZpbHRlcg== 20283
b2x1bWVz 20284
IGludHJv 20285
KGV2dA== 20286
IEJhZw== 20287
IERlZmluaXRpb24= 20288
IEZlYXR1cmVz 20289
QW5ub3RhdGlvbg== 20290
IGF2Zw== 20291
KHN1bQ== 20292
UVVJUkU= 20293
IHJlbmRlcmVy 20294
IEZpeA== 20295
LmRhdGV0aW1l 20296
PWRldmljZQ== 20297
U3Bl 20298
Z2V0SW5zdGFuY2U= 20299
IGV4dGVuc2lvbnM= 20300
X25ldA== 20301
IFBhcmxpYW1lbnQ= 20302
IGNvbWlj 20303
NDY4 20304
IFBpY2s= 20305
YXJtYQ== 20306
CW1vZGVs 20307
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 20308
IG1lbmc= 20309
bWFudWFs 20310
YWRhcHRlcg== 20311
fS0= 20312
ZWRiYWNr 20313
IGVsZWN0cmljYWw= 20314
IENvdW50ZXI= 20315
QXBwbGljYXRpb25Db250ZXh0 20316
X2J5dGU= 20317
KGJ5dGU= 20318
IEF1dG9t 20319
IHRlcnJvcmlzdA== 20320
55A= 20321
dGhyb3VnaA== 20322
IGZpc2NhbA== 20323
b25pbmc= 20324
NDU1 20325
IHNwZWN0cnVt 20326
IGJpdG1hcA== 20327
IHNsZQ== 20328
cHJvZA== 20329
IGFnZWQ= 20330
IGJlbmU= 20331
IFNwaQ== 20332
IGJyaWxsaWFudA== 20333
IHN0YWJpbGl0eQ== 20334
IGRpYWJldGVz 20335
IGNvbmZpZ3VyZWQ= 20336
Ym9uZQ== 20337
NzQ4 20338
NDg0 20339
b3VzZXM= 20340
Lmdvb2dsZWFwaXM= 20341
RkFDRQ== 20342
IGluc3BpcmF0aW9u 20343
IERldHJvaXQ= 20344
ZW5jaA== 20345
0YDRgw== 20346
dmVoaWNsZQ== 20347
U3RhdGlvbg== 20348
IGhvbGVz 20349
IGR1cmNo 20350
Lk1lZGlh 20351
IENOTg== 20352
aW5uaW5n 20353
NjA0 20354
IFBlbm5zeWx2YW5pYQ== 20355
IGVtb3Rpb24= 20356
U2VjcmV0 20357
w6FyaW8= 20358
IFJhdGU= 20359
NDUx 20360
RGVwdGg= 20361
IG1vZGVz 20362
NDI2 20363
KGlkeA== 20364
IGhlcw== 20365
IGdyZXk= 20366
U3RhbmRhcmQ= 20367
UXVlc3Q= 20368
YnV5 20369
c3Vy 20370
IFRyYWNr 20371
b21t 20372
Lmds 20373
IChc 20374
dHdv 20375
X0lP 20376
b3NleA== 20377
X3JvbGU= 20378
56S6 20379
cm91dGVz 20380
U2hvcA== 20381
IEFTQw== 20382
IG1lbWNweQ== 20383
ZGlyZWN0 20384
NDQ2 20385
ICoKCg== 20386
IEJN 20387
IFBvcg== 20388
X2hpc3Rvcnk= 20389
IFJlc3BvbnNlRW50aXR5 20390
LnNldEZvbnQ= 20391
IGVuZ2FnZW1lbnQ= 20392
LGg= 20393
IFdvcmRQcmVzcw== 20394
ZmVjaGE= 20395
IGVudHJhbmNl 20396
RGVzcGl0ZQ== 20397
SURFTlQ= 20398
IHNhbml0 20399
IEdlbmVyYXRl 20400
KCIiLA== 20401
X3ZpZGVv 20402
U3RyYXRlZ3k= 20403
X29r 20404
IHRpZXM= 20405
IGxvZ2ljYWw= 20406
IEJyb24= 20407
KEZpbGU= 20408
IE1vaA== 20409
LlNwbGl0 20410
LlRyeQ== 20411
IEhpbmQ= 20412
IHNjb3Jpbmc= 20413
IGFwcHJvYWNoZXM= 20414
IGZsb3Vy 20415
VlJU 20416
ODA0 20417
VVNUT00= 20418
NDY3 20419
c2NyaXB0cw== 20420
IEVwaXNvZGU= 20421
Mzg5 20422
IEFtYg== 20423
X09S 20424
IGZyYXVlbg== 20425
IHVubGlrZQ== 20426
IHJpZGluZw== 20427
IHBpdA== 20428
IHRyYW5zZg== 20429
YXJ0ZQ== 20430
4LmJ 20431
cmFwZQ== 20432
cmV0dmFs 20433
X2FmdGVy 20434
Ijw8 20435
NzAz 20436
IEJlcmxpbg== 20437
IHRpc3N1ZQ== 20438
LkludGVudA== 20439
INC00LvRjw== 20440
IHN0dW5uaW5n 20441
IEhhbA== 20442
LkludGVnZXI= 20443
IHdoZXJlYXM= 20444
IGRlbGVn 20445
IHVzZXJOYW1l 20446
IGZvcm1hdHM= 20447
IGNvbXBlbnNhdGlvbg== 20448
IEh1bQ== 20449
YXJyaW5n 20450
IHVuc2FmZQ== 20451
UGlu 20452
Y2x1Yg== 20453
a2V5d29yZA== 20454
X3RoZW1l 20455
IGNhbGxlcg== 20456
IGdob3N0 20457
IGVudGl0bGVk 20458
IE1hcw== 20459
NTYx 20460
IGRlbW9uc3RyYXRl 20461
IEhvd2FyZA== 20462
RHJvcA== 20463
I3VuZGVm 20464
NDI3 20465
IGludm9rZQ== 20466
IEJyaWRnZQ== 20467
ZW5kZW4= 20468
aWJsaW5n 20469
U2xvdA== 20470
QVRBQkFTRQ== 20471
IHRlbXBlcmF0dXJlcw== 20472
c2VyaWVz 20473
IFJlbWVtYmVy 20474
Q2FsZW5kYXI= 20475
QkY= 20476
PT8= 20477
MDY0 20478
IEFG 20479
KGh0dHA= 20480
bWFrZXJz 20481
ZmluaXR5 20482
cHJlY2F0ZWQ= 20483
V0g= 20484
b2xpZGF5cw== 20485
LXVu 20486
aWFsZQ== 20487
XFVzZXI= 20488
cmVhc29u 20489
JywKCg== 20490
T1dFUg== 20491
IHByZWRpY3Rpb25z 20492
cHJvYg== 20493
Lm5u 20494
ICc7Cg== 20495
LkZyb21Bcmdi 20496
X0xPTkc= 20497
IHRyb3Vi 20498
IHVuaXR0ZXN0 20499
ZWxpaG9vZA== 20500
CWlz 20501
NDQy 20502
IGNvbnNlYw== 20503
TEVBU0U= 20504
IGNsaWNrZWQ= 20505
IHRlbXBsYXRlcw== 20506
Qlk= 20507
cGVybQ== 20508
bWF0Y2hlcw== 20509
bGF3 20510
KHRm 20511
X3JhdGlv 20512
aXRlbXB0eQ== 20513
IGNyZWF0b3I= 20514
Qml0cw== 20515
RW5jb2Rlcg== 20516
Ki4= 20517
IFVJVA== 20518
IE1hc2s= 20519
Y3VybA== 20520
LWdv 20521
IE9jYw== 20522
Y29ycmVjdA== 20523
IEdlcg== 20524
KGxheW91dA== 20525
dW5jdA== 20526
LmRpc3BhdGNo 20527
O2FtcA== 20528
LmlzUmVxdWlyZWQ= 20529
CWRv 20530
bWly 20531
IHB0aHJlYWQ= 20532
LWF1dG8= 20533
IEljZQ== 20534
IHZpb2xhdGlvbg== 20535
IGNvbmNsdWRlZA== 20536
IHZhcnM= 20537
Y2FudmFz 20538
IFRlbXA= 20539
IFBoaWxpcHA= 20540
iOuLpA== 20541
Y3JlYXNl 20542
IGZpc2hpbmc= 20543
YWJiaXQ= 20544
IGNvbmNlbnRyYXRpb24= 20545
aXJ0aGRheQ== 20546
IGdyb3Nz 20547
IGtp 20548
IEhhbmRsZXI= 20549
IGltbWlncmFudHM= 20550
6IA= 20551
VW5k 20552
cG4= 20553
cmFj 20554
NDU0 20555
IENvbnN1bHQ= 20556
Zm9sZA== 20557
IHN0cnVnZ2xpbmc= 20558
aGVhdA== 20559
R2VuZXJpYw== 20560
IHJpZGlj 20561
IENPVklE 20562
b21pdGVtcHR5 20563
X09QVElPTg== 20564
6rCA 20565
IGNyZWF0dXJlcw== 20566
X1BBR0U= 20567
ZWk= 20568
KGhvc3Q= 20569
X0hQUA== 20570
NTE2 20571
IFhYWA== 20572
IGF3aw== 20573
YXNjYWRl 20574
IHByZWc= 20575
cHJvdmlkZXI= 20576
UGFs 20577
ZWdlbg== 20578
Y2xvbmU= 20579
LlJlZ2lzdGVy 20580
IGF0dGFjaG1lbnQ= 20581
YmVpdA== 20582
dGhlbGVzcw== 20583
KERhdGU= 20584
IEZvcmVzdA== 20585
Q0dSZWN0 20586
IGNoaWxkaG9vZA== 20587
YW1pbmU= 20588
YXhlcw== 20589
J109 20590
TmF2aWdhdG9y 20591
IHJlcGxpZWQ= 20592
X2ludg== 20593
LFQ= 20594
IEZlYXR1cmU= 20595
NDM4 20596
ey0= 20597
TEFORw== 20598
IGNvbnZleQ== 20599
55So5oi3 20600
IFNlcmlm 20601
IEF1cw== 20602
bGljaGU= 20603
IHVudXNlZA== 20604
IG1vbnQ= 20605
bm9kZXM= 20606
IHNldQ== 20607
LmNsYXNzTmFtZQ== 20608
bm9ybQ== 20609
X1NFUlZFUg== 20610
IHdpbmc= 20611
aW54 20612
UmF3 20613
IEphbQ== 20614
NTkw 20615
IGluc2lnaHQ= 20616
NDcx 20617
NTM1 20618
IE5H 20619
IEludGVyZmFjZQ== 20620
IHN0bXQ= 20621
IG5hbg== 20622
Y3VsYXRvcg== 20623
LWFwcA== 20624
KEJ1bmRsZQ== 20625
TWVzc2FnZUJveA== 20626
4K4= 20627
IG1lZXRz 20628
dWJ5 20629
T3B0aW9uUGFuZQ== 20630
aXRhcmlhbg== 20631
IGNvbGxhYm9yYXRpb24= 20632
bW92aWU= 20633
IGFybW9y 20634
X2JpdHM= 20635
IEhhdmluZw== 20636
IG51ZGU= 20637
IFNldHRpbmc= 20638
IHN1Y2M= 20639
RGVsYXk= 20640
LmNvbXBvbmVudHM= 20641
YWNodXNldA== 20642
IEFsZXhhbmRlcg== 20643
wqk= 20644
IG1ldGVycw== 20645
IHByZXBhcmluZw== 20646
IGluY2VudA== 20647
5ZM= 20648
IGvDtm5uZW4= 20649
IENvbnNlcnY= 20650
IG51bWVybw== 20651
YWNodXNldHRz 20652
LWludA== 20653
IGVtcGhhcw== 20654
bGF5b3V0cw== 20655
RXhjZWw= 20656
SUJBY3Rpb24= 20657
IHJlc2lkZW50aWFs 20658
ZWxpbmc= 20659
IE5D 20660
IEFsbGVu 20661
IGNldHRl 20662
IG1pbmRz 20663
LnJlcXVpcmVk 20664
2LM= 20665
IEdpcmxz 20666
IH07 20667
IHN0cmluZ1dpdGhGb3JtYXQ= 20668
IGFkZHJlc3NlZA== 20669
dGhleQ== 20670
IEJsb29k 20671
cG9zZXI= 20672
IGphbQ== 20673
yJk= 20674
5pWw5o2u 20675
IHN0ZG91dA== 20676
IFVURg== 20677
Q2xhc3Nlcw== 20678
PiI7DQo= 20679
IFNhdg== 20680
LkJvbGQ= 20681
IGVuYWJsZXM= 20682
CXRtcA== 20683
IG1hbnVhbGx5 20684
IFNxdQ== 20685
dXNlcmlk 20686
LmZ1bmN0aW9u 20687
LmNhY2hl 20688
TE9QVA== 20689
LlNlcnZpY2Vz 20690
NTg4 20691
ZGRpdA== 20692
dGlt 20693
PGltZw== 20694
IFRoaW5ncw== 20695
IEV2ZXJ5dGhpbmc= 20696
IGFwdA== 20697
Mzk3 20698
ZW1hbmQ= 20699
IHJvbGxpbmc= 20700
66Y= 20701
LmxldmVs 20702
IHN0b20= 20703
IFdpbnRlcg== 20704
IHZpZXdpbmc= 20705
KHZhbHVlcw== 20706
b2NvbXBsZXRl 20707
dmlh 20708
dXBv 20709
IGFib3J0aW9u 20710
NTMy 20711
acOocmU= 20712
77yR 20713
X0JVVFRPTg== 20714
X2RvbWFpbg== 20715
IGJyYQ== 20716
IEFzdA== 20717
aW5hcw== 20718
IHN0YXRpc3Q= 20719
Y29k 20720
TFI= 20721
IGRyaXZlcw== 20722
IGZvbGxvd2Vycw== 20723
IGFsbGllcw== 20724
CWN1cnJlbnQ= 20725
ZWNlc3Nhcnk= 20726
IGRhbWFnZWQ= 20727
X3B0 20728
YW5kbGVz 20729
b3VudHJpZXM= 20730
IHNpbXVsdA== 20731
ZXU= 20732
IGNvbnRyb3ZlcnNpYWw= 20733
X0dST1VQ 20734
IHJpYg== 20735
LkluZm8= 20736
Om1t 20737
Lm5vcm1hbA== 20738
X0FERFJFU1M= 20739
IO2V 20740
YWRkbGU= 20741
IER1cg== 20742
LkVsZW1lbnQ= 20743
NjU2 20744
V2FybmluZ3M= 20745
IGNyZWRpdHM= 20746
IGluaGli 20747
IGVtaXNzaW9ucw== 20748
NTQ1 20749
IGhheg== 20750
LnlvdXR1YmU= 20751
dWdnZWQ= 20752
IGJvdGhlcg== 20753
IEthbnNhcw== 20754
IEZpeGVk 20755
IFRlc3Rz 20756
IEZJWA== 20757
NTc2 20758
VW5pZm9ybQ== 20759
IGtvbnQ= 20760
Pj4+ 20761
c3RhdGlvbg== 20762
bG9yZQ== 20763
YXR5cGU= 20764
aXNob3A= 20765
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 20766
NTIx 20767
Q29tYm9Cb3g= 20768
IHZhY2F0aW9u 20769
IGluaXRpYXRpdmU= 20770
IGRlZmF1bHRWYWx1ZQ== 20771
Nzcw 20772
Y29uY2F0 20773
IEto 20774
NjMy 20775
IFdlbGNvbWU= 20776
aXplZE5hbWU= 20777
TWlncmF0aW9u 20778
IGdyYWRpZW50 20779
SG90 20780
IGhhcmRseQ== 20781
ZWxv 20782
IFN0dWRlbnRz 20783
IGxvb3Nl 20784
NzMw 20785
YXR6 20786
LlNlbmQ= 20787
Jy8= 20788
IHVuaXZlcnNhbA== 20789
IGVudGVycHJpc2U= 20790
IHJlZ2V4 20791
IHZpc2l0b3I= 20792
IEZseQ== 20793
U2Vx 20794
4LiZ 20795
IFZpc3VhbA== 20796
IGxpYnJhcmllcw== 20797
YXRvZXM= 20798
UGF5bWVudA== 20799
NDQ3 20800
IHBlbnQ= 20801
IGdhdGhlcmVk 20802
VlJUWA== 20803
IERN 20804
U3BsaXQ= 20805
IGxldHRpbmc= 20806
0J0= 20807
X2Vycm9ycw== 20808
ZXBvY2g= 20809
UEFSQU0= 20810
Y3U= 20811
0YHRgtCy 20812
b2x1dGlvbnM= 20813
RWRpdGluZw== 20814
Zm9udHM= 20815
IGFsbG9jYXRlZA== 20816
IEJhc2Vk 20817
KFk= 20818
IEp1ZGdl 20819
IGJyb3RoZXJz 20820
RklMRVM= 20821
w6dv 20822
NTMx 20823
d2I= 20824
X1BJ 20825
J14= 20826
IHN3b3Jk 20827
LnNlcnZpY2Vz 20828
IG5s 20829
VGlt 20830
aWdn 20831
IE1vb3Jl 20832
IGNyeXB0b2M= 20833
5Ye6 20834
X3Bvc3Rz 20835
b3RhdGU= 20836
Pyc= 20837
Li4uLgoK 20838
IGts 20839
PSIk 20840
IGRlY29yYXRpb24= 20841
4bqh 20842
IERJUkVDVA== 20843
R1VJ 20844
KT0+ewo= 20845
IG5ld3NsZXR0ZXI= 20846
IHByZWNpcw== 20847
KHBvaW50 20848
IEVxdWlwbWVudA== 20849
dXR5 20850
IERhdmU= 20851
IHBhcnRpY2lwYXRpb24= 20852
dWFyaW9z 20853
eGl0 20854
LkFz 20855
RVRFUg== 20856
b3JvdXM= 20857
IHNoaWVsZA== 20858
W10+ 20859
aWxpdGFyeQ== 20860
Lm9yaWdpbg== 20861
IHByb21vdGlvbg== 20862
VW50 20863
IGN0 20864
VFJB 20865
NTU2 20866
Vmlld0hvbGRlcg== 20867
IHNpZ21h 20868
ZGVsdGE= 20869
YXJlaG91c2U= 20870
Y29udHJhY3Q= 20871
KFZlY3Rvcg== 20872
NzIx 20873
IGNvbXBldGU= 20874
L2Zvcm0= 20875
L2NvbXBvbmVudHM= 20876
IG5y 20877
IEluZG9uZXM= 20878
INC+0YI= 20879
IFZvbHVtZQ== 20880
LmZpbGVz 20881
KHJlc3A= 20882
L21vZGVscw== 20883
IHN1cmY= 20884
c3RhbmRhcmQ= 20885
L28= 20886
IFhDVEFzc2VydA== 20887
VklDRVM= 20888
LkNvZGU= 20889
U0VE 20890
IGFjdGl2YXRl 20891
RGVsdGE= 20892
IGxpbWl0YXRpb24= 20893
cmlq 20894
IHByZWduYW50 20895
Ol4o 20896
IHNvdXI= 20897
cGll 20898
ODAz 20899
IGV4cGVuc2U= 20900
aWNhdGlvbg== 20901
IExhcmdl 20902
IMKx 20903
IEJvd2w= 20904
KG1vZGVscw== 20905
L04= 20906
ODU3 20907
UGE= 20908
LnJlbG9hZA== 20909
IHdvbmRlcmluZw== 20910
NDYy 20911
RXhlY3V0aW9u 20912
CSAgICAgIA== 20913
IEdyYXBoaWNz 20914
IENvbnRpbg== 20915
X2pvYg== 20916
IGdldE5hbWU= 20917
IE1hZ24= 20918
IERXT1JE 20919
bWFk 20920
IG5o 20921
ZmVhdHVyZXM= 20922
fSIpOwo= 20923
aGVldHM= 20924
KHRyYWlu 20925
em4= 20926
IHJlY3J1aXQ= 20927
LmNvbm5lY3Rpb24= 20928
IGJhcnJlbA== 20929
IHN0ZWFt 20930
X3NldHRpbmc= 20931
IGFuZ3VsYXI= 20932
YW5lb3VzbHk= 20933
IGJpbA== 20934
IE5vcm0= 20935
NTIy 20936
KCEk 20937
aWJ0 20938
JSg= 20939
IHBvc2l0 20940
IEZhdGhlcg== 20941
aW50ZW5kbw== 20942
NTY1 20943
TGl2ZQ== 20944
MDQx 20945
IHBvcnRz 20946
IG1lag== 20947
IGxhbmRpbmc= 20948
cG9uZGVy 20949
IGNvZA== 20950
X0hFQURFUg== 20951
Lk1hcmdpbg== 20952
IGJhbGxz 20953
IGRpc2N1c3Npb25z 20954
IGJsZW5k 20955
SGV4 20956
IGZhcm1lcnM= 20957
IG1haW50YWluaW5n 20958
ICAgDQo= 20959
c3lu 20960
W1Q= 20961
cnVz 20962
NDM5 20963
dWZmZXJz 20964
IGNvbnRyaWJ1dG9ycw== 20965
X3N5cw== 20966
LkRlYnVn 20967
IGNvbnN0cnVjdGVk 20968
b21lcw== 20969
P2lk 20970
c2xpZGVy 20971
IHN1cHBsaWVycw== 20972
NjEx 20973
c2NyaWJlcg== 20974
cGVz 20975
0J4= 20976
IjoNCg== 20977
XENvbnRyb2xsZXI= 20978
KSkKCgo= 20979
IGx1YQ== 20980
TXVsdGk= 20981
RU5T 20982
U3Jj 20983
IHBldGl0aW9u 20984
IHNsYXZl 20985
bG9va2luZw== 20986
VkVSVA== 20987
CXZlY3Rvcg== 20988
U3BlY2lhbA== 20989
aGg= 20990
YW5uZQ== 20991
IE5pZ2Vy 20992
L3ZpZXdz 20993
emluZw== 20994
ZW5kYW50 20995
PEM= 20996
c3BlZWQ= 20997
NTE0 20998
IHt9OwoK 20999
QmVnaW5Jbml0 21000
IGZvcGVu 21001
QFJlcXVlc3RNYXBwaW5n 21002
RW5kSW5pdA== 21003
IHB1bmNo 21004
U2VuZGVy 21005
NjAz 21006
6ZQ= 21007
Z2V0TWVzc2FnZQ== 21008
L3R5cGVz 21009
LlBJ 21010
KCcnKTsK 21011
b2N1c2Vk 21012
KGFsbA== 21013
IGRyb3Bkb3du 21014
KS5fXw== 21015
IFZpbg== 21016
LkZvcmVpZ25LZXk= 21017
NjEy 21018
Y2FuZg== 21019
b3VyZWQ= 21020
IE9yZ2FuaXphdGlvbg== 21021
INCw 21022
IEN1bHR1cmU= 21023
KGNscw== 21024
LF8= 21025
OTAy 21026
cmdiYQ== 21027
7J2Y 21028
LmRhdGFHcmlkVmlldw== 21029
IGRvemVu 21030
IEdlcw== 21031
ODA1 21032
NDY0 21033
X3NoYXJlZA== 21034
bmljaw== 21035
IGhvc3A= 21036
b21ldGVy 21037
NDk1 21038
IGNsYWltaW5n 21039
MDMy 21040
aWJsZXM= 21041
cmlr 21042
5piv 21043
ZW5hcmlv 21044
IGRlbmdhbg== 21045
b2Ji 21046
bW9udA== 21047
X3Jhbms= 21048
KCcvJyw= 21049
IGFwb2xvZw== 21050
UHM= 21051
X3Bvd2Vy 21052
IEdyZWU= 21053
IGZ1bGZpbGw= 21054
IGZpcmViYXNl 21055
OTEw 21056
IGZhcmU= 21057
IEhpbQ== 21058
IGJlYW4= 21059
4oCmLg== 21060
IFNQSQ== 21061
X1JY 21062
IHBlcmNlcHRpb24= 21063
cmVsYXRpdmU= 21064
Y29tcGlsZQ== 21065
dXVt 21066
dXRvcw== 21067
YXVj 21068
IEFzaw== 21069
IGluZGljYXRvcg== 21070
L3Ro 21071
LnNldFN0cmluZw== 21072
IFdpc2NvbnNpbg== 21073
LkRvbWFpbg== 21074
IGFydGlmaWNpYWw= 21075
RGV2ZWxvcA== 21076
IFNhcmFo 21077
IGx5aW5n 21078
KHNlYXJjaA== 21079
IEVtcGlyZQ== 21080
dXJyaW5n 21081
5pe26Ze0 21082
PSIkew== 21083
IGdldElk 21084
IFBheW1lbnQ= 21085
dHJhbnNpdGlvbg== 21086
IF0u 21087
aXhpbg== 21088
VlQ= 21089
LXNlbGVjdA== 21090
IGRlbW9uc3RyYXRlZA== 21091
IGxhc3ROYW1l 21092
ZW1wbG95bWVudA== 21093
LmdldFByb3BlcnR5 21094
IGZvdWdodA== 21095
ZmlsZU5hbWU= 21096
IFBlcnM= 21097
NDUy 21098
LWNhcmQ= 21099
YXN0cg== 21100
YXR0cnM= 21101
IHByb21pbmVudA== 21102
RGVzaWdu 21103
YW5jb3V2ZXI= 21104
44GX44E= 21105
YXJkbw== 21106
c2VjcmV0 21107
IHJhZw== 21108
IHBvaXNvbg== 21109
LW1hbg== 21110
LG9taXRlbXB0eQ== 21111
NzQw 21112
CXVu 21113
aXR6ZXI= 21114
IENhc2lubw== 21115
IFJvc3M= 21116
LWZvb3Q= 21117
KHJlc3VsdHM= 21118
UGxhbg== 21119
IGxhc2Vy 21120
6riw 21121
X0RS 21122
NTIz 21123
RmFjZWJvb2s= 21124
NDQ5 21125
IGJvYXJkcw== 21126
c3Rh 21127
XV0s 21128
Njc1 21129
IHRpbGVz 21130
U0laRQ== 21131
ID1+ 21132
OTcw 21133
IHByZW1pZXI= 21134
b2NhYg== 21135
IGVuY29kZWQ= 21136
IHJlc2VydmU= 21137
NjA5 21138
IEFmZ2hhbmlzdGFu 21139
IExpc3ROb2Rl 21140
dXJscw== 21141
IHN1Ym1pc3Npb24= 21142
IG5ldQ== 21143
NDc3 21144
ICMrIw== 21145
X1BPU1Q= 21146
IG1vaXN0 21147
ZWxsaQ== 21148
ZWxsaWdlbnQ= 21149
LmFsZXJ0 21150
w7Nk 21151
YnJl 21152
IENvbGxlY3Q= 21153
IGdyYXBoaWM= 21154
IGxvbmdpdHVkZQ== 21155
IFByb3ZpZA== 21156
IENhbGN1bGF0ZQ== 21157
eGZmZmY= 21158
Y3JpdGVyaWE= 21159
IHdhdGVycw== 21160
cm9jaw== 21161
bG9xdWVudA== 21162
IFRyaWI= 21163
NTEz 21164
IGJ1cnN0 21165
IHN1ZmZpeA== 21166
LkV4dGVuc2lvbnM= 21167
aXNoZXM= 21168
aXZlbA== 21169
IExJS0U= 21170
IEdldHR5 21171
LkFjdGlvbkV2ZW50 21172
LnNsZg== 21173
IEhBTA== 21174
dXBhbA== 21175
RUFS 21176
NTI0 21177
dWRp 21178
X3RpbWVvdXQ= 21179
VUY= 21180
IFNpbmdhcG9yZQ== 21181
IEFkdmVudA== 21182
X2ludGVydmFs 21183
Y2hhZnQ= 21184
IEVtZXI= 21185
IHRlbGVwaG9uZQ== 21186
IFR1cms= 21187
X2ludGVyZmFjZQ== 21188
IE93bg== 21189
IGVuY291cmFnZWQ= 21190
PE9iamVjdA== 21191
X1RleHQ= 21192
IE9udGFyaW8= 21193
IEFwcGx5 21194
LmZpcmViYXNl 21195
IGFudGli 21196
UHJpb3JpdHk= 21197
ZW5leg== 21198
RGF5cw== 21199
Y2lk 21200
dXJyZW5jZQ== 21201
Oy8= 21202
aW5uZWQ= 21203
0YHRjw== 21204
IHZleg== 21205
Znc= 21206
Ly8k 21207
YXR0YWNr 21208
NDU4 21209
IHN0YXJ0dXA= 21210
YWluZXJz 21211
LmZyYWdtZW50 21212
b3BhY2l0eQ== 21213
KGNvbm4= 21214
aGVpbQ== 21215
Lm5ldHdvcms= 21216
KHN0cmVhbQ== 21217
Njcw 21218
IE5PTg== 21219
dG9s 21220
ODMw 21221
IFhib3g= 21222
IERT 21223
IGNhY2hlZA== 21224
IHByb3N0aXR1dGFz 21225
IEJhbHQ= 21226
KCdb 21227
NTc1 21228
IG5vZXhjZXB0 21229
Iic= 21230
IHNk 21231
LnZhbGlk 21232
X2Fn 21233
IHJhY2Vz 21234
NDgx 21235
IHJvZA== 21236
aXR1ZGVz 21237
PD4o 21238
NTQ0 21239
LlByb2R1Y3Q= 21240
Rm9ybXM= 21241
TkVX 21242
UGF5 21243
CWJvb2xlYW4= 21244
X2NvbnRhY3Q= 21245
IEVsZWN0cmlj 21246
c2tpcA== 21247
IHd1cg== 21248
IGNocm9uaWM= 21249
X2RyaXZlcg== 21250
OTQw 21251
IFNhYg== 21252
IFVsdA== 21253
IFJhZA== 21254
U1RBVFVT 21255
IExld2lz 21256
T0I= 21257
IGdpZnRz 21258
LlJlYw== 21259
VFJVRQ== 21260
IGludGVuc2l0eQ== 21261
TWFya2Vy 21262
LmNvbXBhcmU= 21263
ZmZpYw== 21264
Q29va2ll 21265
IEJhYnk= 21266
IEJpZ0RlY2ltYWw= 21267
aWxldA== 21268
IEhPTERFUlM= 21269
IExhZHk= 21270
IGx1bmc= 21271
IEFsYWJhbWE= 21272
IGRlc3M= 21273
YCk7Cg== 21274
IEJ1aWxkZXI= 21275
X3JlZ2lvbg== 21276
IG5ldXRyYWw= 21277
OTA5 21278
Qm90aA== 21279
IGhw 21280
IGhvcm4= 21281
IHNlZ21lbnRz 21282
IEVD 21283
Ij0+Ig== 21284
KHJlYw== 21285
IFBp 21286
R00= 21287
IGxhcHRvcA== 21288
U2NhbGFy 21289
NDYz 21290
aXNk 21291
LWRpYWxvZw== 21292
IEFuZGVyc29u 21293
IG1pc3Rha2Vz 21294
NzA4 21295
IEhhbg== 21296
amVz 21297
ZXN0aW5hdGlvbg== 21298
NDM2 21299
IHByb21pc2Vz 21300
Ymlk 21301
IFNjaWVudA== 21302
R0lO 21303
IFBlcmZvcm1hbmNl 21304
YmFnZQ== 21305
LnVzZXJz 21306
bGVhZGluZw== 21307
IG9yYWw= 21308
R3JhcGhpY3M= 21309
NDg4 21310
X1BUUg== 21311
NTE4 21312
aGFuZw== 21313
IGluZXY= 21314
cHJvY2Vzc2luZw== 21315
RmFjdG9y 21316
IE5B 21317
JHN0cmluZw== 21318
IGdyb3VuZHM= 21319
LlNhdmVDaGFuZ2Vz 21320
Y2xvY2s= 21321
OTQx 21322
Y3JpcGNpb24= 21323
IE5ld3Rvbg== 21324
Z2M= 21325
LmluY2x1ZGVz 21326
IGJsYXN0 21327
ICctJw== 21328
IHB1ZWRl 21329
NDY5 21330
LlNlc3Npb24= 21331
IGdyZXA= 21332
X2ZpbmFs 21333
IEdheQ== 21334
IEdpdmU= 21335
aXJp 21336
LXN0YXI= 21337
IFVJSW1hZ2U= 21338
X2Vwb2No 21339
dWJi 21340
ZW50aA== 21341
IGVsaXRl 21342
IGNhbXBhaWducw== 21343
IFBvcm5v 21344
X2Fzc2lnbg== 21345
UHJvdG9jb2w= 21346
IEJlaW5n 21347
IEFpcnBvcnQ= 21348
IGNvbnZlbnRpb25hbA== 21349
IFdhdA== 21350
IENJ 21351
RVRB 21352
IEFudGhvbnk= 21353
IHRhYmxldA== 21354
KGZvcm1hdA== 21355
IGNvbnNpc3RlbnRseQ== 21356
IElvd2E= 21357
NDc0 21358
IGF2YXRhcg== 21359
MDI3 21360
LmN1cnNvcg== 21361
IVs= 21362
IGhhbmdpbmc= 21363
SGVy 21364
U3VjaA== 21365
JzsKCgo= 21366
b3JnZW91cw== 21367
KCk9PQ== 21368
IHZpZXdNb2RlbA== 21369
IOOD 21370
IGVscw== 21371
IEFnZW50 21372
RmV0Y2g= 21373
YXBvcg== 21374
IGN4 21375
cHJlYWQ= 21376
IFBpZXI= 21377
b2VmZg== 21378
NjE2 21379
U24= 21380
ODkw 21381
IFZpcnR1YWw= 21382
QXBy 21383
LldoaXRl 21384
NjE1 21385
X01PRA== 21386
IFBvaW50cw== 21387
5aSx 21388
IGdlbmVz 21389
IHZlbmRvcg== 21390
IG1haW5zdHJlYW0= 21391
PHNyYw== 21392
IEVsaXphYmV0aA== 21393
RGVjb2Rlcg== 21394
LXN0YXRl 21395
IEdsYXNz 21396
bmN5 21397
YWRpYW5z 21398
X21vbg== 21399
IFJlbW90ZQ== 21400
IHdpcmVsZXNz 21401
IE1p 21402
5Yk= 21403
NDY2 21404
6KGo 21405
c3RhZ2U= 21406
IFRpbGU= 21407
bGxpYg== 21408
VmFyaWFudA== 21409
PT0K 21410
IGdvbGRlbg== 21411
KFFTdHJpbmc= 21412
LnB1dEV4dHJh 21413
IERvbQ== 21414
IEFuaW1hdGlvbg== 21415
IGludGVyYWN0aXZl 21416
aWZhY3Q= 21417
6Zmk 21418
TEVU 21419
IGZyZXF1ZW50 21420
IDw+Cg== 21421
RmlsZW5hbWU= 21422
IHNuZQ== 21423
IEZvb3RiYWxs 21424
IHJpdmFs 21425
IGRpc2FzdGVy 21426
aW9uaWM= 21427
IERhbWFnZQ== 21428
LlJlc291cmNl 21429
LWVu 21430
IFR5cGVz 21431
Z2V0U3RyaW5n 21432
KGJvYXJk 21433
IGJvbA== 21434
cGxhaW4= 21435
enlt 21436
4Liy 21437
IHNjYW5uZXI= 21438
aWxkZXI= 21439
X21zZ3M= 21440
5o8= 21441
KGludGVudA== 21442
IGRlc3RydWN0 21443
IGJ1c3Q= 21444
IEVtcGxveQ== 21445
b25p 21446
IFVJVmlld0NvbnRyb2xsZXI= 21447
IG9kZHM= 21448
ZWFyZXI= 21449
R2VvbWV0cnk= 21450
IHlpaQ== 21451
X0VYUE9SVA== 21452
IEF0dGFjaw== 21453
IG5pZXQ= 21454
IGltcHJlc3Npb24= 21455
IEdpbA== 21456
X3Byb2I= 21457
NTI4 21458
IENG 21459
IEV4cGVyaWVuY2U= 21460
L3BsdWdpbnM= 21461
Lk1ldGhvZA== 21462
IGJlbGllZnM= 21463
TmF0aXZl 21464
X2J1aWxk 21465
IHZpZw== 21466
IHJhbmtz 21467
Y292ZXJlZA== 21468
NzA1 21469
c3VjaA== 21470
R3VhcmQ= 21471
LnBhY2s= 21472
YWRkZXI= 21473
ODA5 21474
aXZpYQ== 21475
bG5n 21476
INCy0Ys= 21477
NTUy 21478
VGltZXN0YW1w 21479
X25vdw== 21480
IHBva2Vy 21481
IHVuYw== 21482
IHNoYXBlcw== 21483
LXR5cGVz 21484
X3BlcmlvZA== 21485
cGs= 21486
IHZldGVyYW4= 21487
IHNvbm8= 21488
IGFwcG9pbnRlZA== 21489
b3ZlcmZsb3c= 21490
LmRyaXZlcg== 21491
X2NhdA== 21492
dXR0 21493
cGxhbnQ= 21494
aW1i 21495
IEFjY2VwdA== 21496
IGNvbmNlcnQ= 21497
CW5vZGU= 21498
CXo= 21499
Pz4NCg== 21500
IGJhbm5lZA== 21501
CSAgICAgICAgICAgICAgIA== 21502
IHRveGlj 21503
IGRpc2FwcGU= 21504
NDcz 21505
yJs= 21506
IGdyYWNl 21507
YXRlZnVs 21508
UmVwbHk= 21509
IENydXo= 21510
NDg2 21511
IHNjcmFw 21512
IGtleXdvcmRz 21513
c2ltcA== 21514
IG1vcnRnYWdl 21515
IGN5YmVy 21516
IEV4ZWN1dGU= 21517
IGxhdGl0dWRl 21518
aWZ1 21519
LkNPTQ== 21520
ZGJv 21521
IHNvcnRz 21522
IEdhcw== 21523
b21pYWw= 21524
LkxvY2Fs 21525
Q2VsbHM= 21526
LlJlcGxhY2U= 21527
U3RyaW5ncw== 21528
LmZpdA== 21529
IFRoaXJk 21530
JSIsCg== 21531
IHt9Ii4= 21532
IFNvbnk= 21533
IFs6 21534
NTg1 21535
IGZhbGxlbg== 21536
LicpCg== 21537
aW5o 21538
IE1D 21539
IHJlZGlz 21540
Q29kZXM= 21541
IHByb2ZpbGVz 21542
aG9vaw== 21543
UmVkdWNlcg== 21544
X0ZVTkM= 21545
IG5hdmlnYXRl 21546
c3RybGVu 21547
IGhvcm0= 21548
4Z4= 21549
IFNS 21550
LmJvb3Q= 21551
IGRpZ2VzdA== 21552
CWhlYWRlcg== 21553
LmZpbmRPbmU= 21554
5oE= 21555
RGJUeXBl 21556
bmlh 21557
X21lcmdl 21558
IGRvbm5l 21559
L0dldHR5 21560
X0NIQVI= 21561
IGJhbmRz 21562
LlVSTA== 21563
YXJ0aWFs 21564
IGZyZXE= 21565
IHNpc3Q= 21566
Tmc= 21567
IHJlbmRlcmluZw== 21568
XENvcmU= 21569
V2lkZ2V0cw== 21570
IFZB 21571
IGFjdGl2aXN0cw== 21572
U3Rl 21573
PV8= 21574
YWxsYQ== 21575
U3RhbXA= 21576
IGxvYWRz 21577
IHh4 21578
IExlYXJuaW5n 21579
Lk12Yw== 21580
dWly 21581
KCIk 21582
IGNvbm5lY3Rpbmc= 21583
UmVhZE9ubHk= 21584
dXJ1 21585
IEVhZw== 21586
QklU 21587
X0RFTA== 21588
5ac= 21589
YXJyYXNz 21590
ZXh0ZXJuYWw= 21591
IFlPVVI= 21592
IEJyZXc= 21593
IEZpdmU= 21594
IHJlc2l6ZQ== 21595
aWdpZA== 21596
ZXJhdGlvbg== 21597
NjUz 21598
INGN 21599
NTM2 21600
5Yqg 21601
MDM5 21602
IENhdGNo 21603
2YE= 21604
IExlb24= 21605
YW1pbA== 21606
LkJvZHk= 21607
Q2xpcA== 21608
L2xpc3Q= 21609
LmJy 21610
RWRpdFRleHQ= 21611
CWRi 21612
LkdhbWU= 21613
KEJ1aWxkQ29udGV4dA== 21614
YmFja2VuZA== 21615
LlJlZA== 21616
ZmFjZWJvb2s= 21617
NTI5 21618
LnVybHM= 21619
bXI= 21620
cm9sbGVk 21621
LS0tLS0tLQ== 21622
IGludGVydmVudGlvbg== 21623
IHJldGlyZW1lbnQ= 21624
IEtpdA== 21625
IFBSRQ== 21626
VXBwZXJDYXNl 21627
IFNvY2tldA== 21628
IDot 21629
IHN0dWR5aW5n 21630
IE1ldHJv 21631
YXJkZWQ= 21632
IGNvbnZlcnNhdGlvbnM= 21633
Q2FsbGVk 21634
IGV4YW1pbmU= 21635
ZXJ0aWZpY2F0ZQ== 21636
Lmd6 21637
LXJlc3BvbnNpdmU= 21638
IHJlZnVuZA== 21639
X25ldHdvcms= 21640
MDI2 21641
YWxsb3dlZA== 21642
ZW1wdA== 21643
IG1lYWxz 21644
Q2F0ZWdvcmllcw== 21645
IHRyYXZlbGluZw== 21646
IGtn 21647
IHNoYW1l 21648
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 21649
IGV4cGxpY2l0bHk= 21650
IG1hdGhlbWF0aWM= 21651
IFN1aXRl 21652
IFJHQg== 21653
KioqKioqLw== 21654
IG1peHR1cmU= 21655
bGVhcm5pbmc= 21656
LnRlbXBsYXRl 21657
YXR0cw== 21658
d3g= 21659
CWN0eA== 21660
LnByb3BlcnRpZXM= 21661
IGRyaW5rcw== 21662
IEVpdGhlcg== 21663
c2V0VGV4dA== 21664
LmdldERhdGE= 21665
LnppcA== 21666
IHJldmVhbHM= 21667
PHRhYmxl 21668
Lkhhc2hNYXA= 21669
IEh1cg== 21670
KSIpOwo= 21671
LmZyYW1ld29yaw== 21672
IFNUQVJU 21673
ZmVlZGJhY2s= 21674
NDU3 21675
IHNhZmVseQ== 21676
Lmljb24= 21677
Y29uZmlndXJl 21678
LmxvY2s= 21679
LmxheWVycw== 21680
Lz4uCg== 21681
IHJhbmtlZA== 21682
X2ltcGw= 21683
IEhhbmRsZXM= 21684
IGhvc3RlZA== 21685
IHVwZGF0aW5n 21686
YWxidW0= 21687
6Z0= 21688
IHNoYWRlcg== 21689
RWRpdG9ycw== 21690
LXJvdW5k 21691
W117 21692
IHNlcA== 21693
IEhp 21694
VEVN 21695
bG9va3Vw 21696
Lm1hbg== 21697
X0lOUFVU 21698
IHRocmVhdGVuZWQ= 21699
X0lNUE9SVA== 21700
IGRyb3Bz 21701
cnVpdA== 21702
c2lk 21703
Ym90aA== 21704
IEV4Y2Vs 21705
IGplcg== 21706
b3JkaW5hcnk= 21707
0LXQuQ== 21708
VklFVw== 21709
cmVwbHk= 21710
ICk6Cg== 21711
Y29sb3Jz 21712
dmVyaWZpZWQ= 21713
X1Ry 21714
X3BhcnNl 21715
IGNvbmdyZXNz 21716
NjE3 21717
UHJvbWlzZQ== 21718
aW50cw== 21719
IE1vdGhlcg== 21720
LkFwaQ== 21721
IER1cmF0aW9u 21722
IGZpcnN0TmFtZQ== 21723
aW5oZXJpdGRvYw== 21724
IE1hcnM= 21725
IGFwcg== 21726
T0RZ 21727
IHZpc2l0cw== 21728
NjMx 21729
IGhlYWxpbmc= 21730
bGV0dGVycw== 21731
KSkpOw0K 21732
ZnV0dXJl 21733
LkZyYW1ld29yaw== 21734
IGtpc3M= 21735
IGludm9sdmU= 21736
IHNpbGVudA== 21737
YWRvd3M= 21738
IGFueWJvZHk= 21739
c2No 21740
Njkw 21741
IHNvbGVseQ== 21742
LWltZw== 21743
IHByb3ByaQ== 21744
IGluc3RydWN0 21745
IGxpY2Vuc2Vz 21746
IG1ldGg= 21747
IGNvbmRlbQ== 21748
IERvbWFpbg== 21749
IEhhcnJpcw== 21750
IHPDpQ== 21751
Q0VQVA== 21752
QmF0Y2g= 21753
QGV4dGVuZHM= 21754
IENPTlRSSUJVVA== 21755
LkRhdGFGcmFtZQ== 21756
NDcy 21757
X3BhY2tldA== 21758
cmVjaXNpb24= 21759
IGZvY3VzaW5n 21760
Lmh0 21761
X18iOgo= 21762
OkdldA== 21763
IEtD 21764
IHBhc3NhZ2U= 21765
U2VnbWVudA== 21766
X2NlbnRlcg== 21767
LXpB 21768
X0JM 21769
IGNvbnZpbg== 21770
IGNsYXNzaWZpZWQ= 21771
IE5TTXV0YWJsZQ== 21772
X2Fw 21773
dGlsZQ== 21774
UmVjdGFuZ2xl 21775
NDky 21776
KG51bXM= 21777
dmVucw== 21778
IFVJQnV0dG9u 21779
IEZlZGVy 21780
YW1v 21781
IG91dGxpbmU= 21782
IFBhcnNlcg== 21783
IOKJ 21784
IFdvcmtz 21785
LlNjaGVtYQ== 21786
IGVuZ2luZXM= 21787
NjM3 21788
NTYz 21789
X2NvbW1vbg== 21790
NTQy 21791
X29sZA== 21792
IHNldENvbnRlbnRWaWV3 21793
IC8vLzw= 21794
IEJU 21795
Zm0= 21796
IGRpdmVycw== 21797
X3dlaWdodHM= 21798
ZW1hcms= 21799
IEFDVA== 21800
IHByb3BvcnRpb24= 21801
b3ZlcmxheQ== 21802
LmRpcm5hbWU= 21803
IEdpdA== 21804
X1JFRkVSRU5DRQ== 21805
PD4= 21806
bGI= 21807
X3J1bGU= 21808
6LSl 21809
IFB1dGlu 21810
IHNsZWVwaW5n 21811
KCk6DQo= 21812
IHByZXNlcnZl 21813
IHBhcmxpYW1lbnQ= 21814
IExvb2tpbmc= 21815
IHBpY2tpbmc= 21816
IERpc3BhdGNo 21817
IHNsaXA= 21818
65M= 21819
IEx5bg== 21820
X3NpZ25hbA== 21821
Y29uZmlndXJhdGlvbg== 21822
IFBpdHQ= 21823
NDkx 21824
YWRlbg== 21825
cHJvY2VkdXJl 21826
IGVudGh1c2k= 21827
ZmlnaHQ= 21828
IENvbnNpZGVy 21829
IHRvcm4= 21830
Q29ubmVjdGVk 21831
LmNvcw== 21832
X2dyb3Vwcw== 21833
IFRoaW5r 21834
IGRlbGliZXI= 21835
IHJlc2lk 21836
d29ya2luZw== 21837
LmNvbHVtbnM= 21838
IENhbGxlZA== 21839
IGVzbGludA== 21840
PiIs 21841
X0RPV04= 21842
aGlzdA== 21843
IEFkdmFuY2Vk 21844
IHJld2FyZHM= 21845
YWN0b3Jz 21846
IHNpbGVuY2U= 21847
NDc5 21848
IG15dGg= 21849
IG5ldXI= 21850
NTE5 21851
IGF1Y3Rpb24= 21852
LkdldFN0cmluZw== 21853
ZWtz 21854
KHByb2plY3Q= 21855
NTk4 21856
CW1zZw== 21857
CW91dHB1dA== 21858
IGNvbXBsYWludHM= 21859
NTUx 21860
LFM= 21861
IHRibA== 21862
ICwKCg== 21863
cmlvcnM= 21864
YWhyZW4= 21865
IGxhd3llcnM= 21866
cmVkdXg= 21867
X3N5bWJvbA== 21868
b2ZmZWU= 21869
X1JFU1VMVA== 21870
KE5hbWU= 21871
VVRD 21872
LmN1cnJlbnRUaW1l 21873
IG9yZ2FuaXM= 21874
LmFyZw== 21875
NTMz 21876
IG1pbmlt 21877
d2ljaw== 21878
IHJlY2VpdmVz 21879
QmFsYW5jZQ== 21880
IHNwZWFrcw== 21881
IERheXM= 21882
IEJlbG93 21883
NDgz 21884
dGlwbw== 21885
UHJlc2VudA== 21886
IHJlc2Vydg== 21887
aHA= 21888
IHJpdA== 21889
X1JJR0hU 21890
LS0p 21891
IGNoYWlybWFu 21892
Nzgx 21893
RElT 21894
IEJPT1NU 21895
IGV4cGVyaW1lbnRz 21896
Njg3 21897
X18pOwo= 21898
IHN0YW1w 21899
IGZlcnQ= 21900
IGZvbmQ= 21901
VGVy 21902
ZWx2ZQ== 21903
dXJlbg== 21904
K2k= 21905
ZW5kZW5jeQ== 21906
IHZpcnR1YWxseQ== 21907
Li4uIg== 21908
772e 21909
OTI1 21910
LWNlbnQ= 21911
X3VuaXF1ZQ== 21912
IHByaWNpbmc= 21913
bWlj 21914
UkVTSA== 21915
IDo6Og== 21916
IGFubm90YXRpb24= 21917
IENpcmNsZQ== 21918
b25nb2Ri 21919
aXRhcw== 21920
ICUo 21921
KGNvbXBvbmVudA== 21922
INC+0LE= 21923
KHBvcnQ= 21924
LWhvdXI= 21925
Lm9iag== 21926
TEJM 21927
IGp1cnk= 21928
R0JU 21929
IHNweQ== 21930
IFByb2Zlc3Npb25hbA== 21931
ICIiOwoK 21932
IHN0cmlraW5n 21933
IGRpc2NyaW1pbmF0aW9u 21934
IHBheXM= 21935
OTM3 21936
bGljdA== 21937
ZW50ZXM= 21938
IHRocm93aW5n 21939
IFBsdWdpbg== 21940
KGRlZg== 21941
IFJ1bnRpbWVFeGNlcHRpb24= 21942
IE1pZ3JhdGlvbg== 21943
NTk5 21944
IGRpYw== 21945
YmFn 21946
b25pYQ== 21947
IGNvcnJ1cHRpb24= 21948
NzA0 21949
KE1hcA== 21950
IHByeg== 21951
LmR0bw== 21952
IGFjcXVpcmU= 21953
U3RhdGVUb1Byb3Bz 21954
IGxvdmluZw== 21955
0L7Qtg== 21956
X3BhdHRlcm4= 21957
IGVtb3Rpb25z 21958
IHB1Ymxpc2hlcg== 21959
X2Jl 21960
IGNvdXBsZXM= 21961
NDk4 21962
b2o= 21963
IENoYXJ0 21964
IHRyb3A= 21965
LnRvb2w= 21966
IGVzdGFibGlzaG1lbnQ= 21967
IGRvbA== 21968
NjU0 21969
IHRvd2Vy 21970
IGxhbmU= 21971
IFN5ZG5leQ== 21972
IGZpbGxpbmc= 21973
Y2xhaW1lZA== 21974
NjQ0 21975
IGRpYWxvZ3Vl 21976
IGNvbnZlbnRpb24= 21977
Ym9va2luZw== 21978
cGFyZW5jeQ== 21979
5rE= 21980
IEdlbmVyaWM= 21981
NzE4 21982
XFNjaGVtYQ== 21983
NDgy 21984
NjE4 21985
IHJhbmdlcw== 21986
L2No 21987
IHBhbmVscw== 21988
IHJ1bGVk 21989
55Sf 21990
LnRz 21991
X3NldHM= 21992
IGNsZWFudXA= 21993
UHJldmlvdXM= 21994
IEFuaW1hbA== 21995
NjA3 21996
KCQo 21997
IEF2ZQ== 21998
b2xsYXI= 21999
MDI4 22000
X2V2YWw= 22001
CU5hbWU= 22002
KHRyZWU= 22003
ICJd 22004
NTcx 22005
IGR1dGllcw== 22006
PScv 22007
Q2xpY2tlZA== 22008
IGRpZmZlcmVudGx5 22009
IENsYXJr 22010
IGRpdA== 22011
b2xvZ2lzdHM= 22012
IHN5bmQ= 22013
IHNlbmRz 22014
LWtub3du 22015
a2I= 22016
IE1vZGFs 22017
aXRhdGl2ZQ== 22018
IHJhY2luZw== 22019
IGhpZ2hsaWdodHM= 22020
IFNpbW9u 22021
IENhcHRhaW4= 22022
5L+h 22023
IENC 22024
Y29udGlu 22025
YXJhbg== 22026
IHBoeXNpY3M= 22027
cmV0dHk= 22028
ZXRhbA== 22029
Lm1k 22030
YXhpb3M= 22031
IHNwZWFrZXJz 22032
IHByZXA= 22033
IGF3YXJkZWQ= 22034
7KeA 22035
IENvcm4= 22036
IE5hdHVyZQ== 22037
VURJTw== 22038
NzM3 22039
IHByb2o= 22040
LXByZQ== 22041
W3U= 22042
RmVhdHVyZXM= 22043
IGlzRXF1YWw= 22044
QmluYXJ5 22045
c2ln 22046
IGNvbmZ1c2lvbg== 22047
NTQ2 22048
NTY4 22049
IEhhdA== 22050
IGt0w7M= 22051
LmNvbmZpZ3VyZQ== 22052
TU9O 22053
NDk0 22054
L2VkaXQ= 22055
X0FkZA== 22056
LHRydWU= 22057
NTQx 22058
IGNsaQ== 22059
RXJyb3JNZXNzYWdl 22060
LWxvYWRlcg== 22061
RGltZW5zaW9ucw== 22062
dWx0aXBseQ== 22063
IHshIQ== 22064
IFNxbENvbW1hbmQ= 22065
IHNwb2tlbg== 22066
IHBpY3M= 22067
IHRveQ== 22068
KEtleQ== 22069
IExvb3A= 22070
2Kg= 22071
RUFUVVJF 22072
aW5jdGlvbg== 22073
X3NldHVw 22074
d3JhcHBlcg== 22075
IHRvbmc= 22076
Y3VsYXI= 22077
T3B0 22078
LlBs 22079
PSIs 22080
KGxlbmd0aA== 22081
dW1u 22082
IGNocm9t 22083
IHNldmVudA== 22084
IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbg== 22085
NDc4 22086
CXN0YXJ0 22087
IGJlZ3Vu 22088
Q0VQVElPTg== 22089
ZGF0YXNldA== 22090
ODI1 22091
IEZhaWxlZA== 22092
Y29scw== 22093
NDU5 22094
IGtuZWU= 22095
aW1vcmU= 22096
LnNwbGljZQ== 22097
c2hlbGw= 22098
aWdnZXJz 22099
IHRoZW1lcw== 22100
OTk1 22101
IERK 22102
IEFzc2lzdGFudA== 22103
LSQ= 22104
TWF5YmU= 22105
IG9yZGVyaW5n 22106
IEludGVsbGlnZW5jZQ== 22107
IE1hc3NhY2h1c2V0dHM= 22108
IGZhaWxpbmc= 22109
ZWxzb24= 22110
R3JlYXQ= 22111
PWk= 22112
LnJlc3Q= 22113
IGludml0ZQ== 22114
LWRpc2FibGU= 22115
Lkdyb3VwQm94 22116
4oCZZXN0 22117
IHRhY2tsZQ== 22118
Z3Y= 22119
ZXR0ZXI= 22120
ICksDQo= 22121
X3J1bGVz 22122
Lndhcm4= 22123
ZnVuY3Rpb25z 22124
IENocmlzdGlhbnM= 22125
IGJhY2tlZA== 22126
IHNsaWRlcg== 22127
IGVuam95aW5n 22128
bmVzdA== 22129
IGhpag== 22130
X21z 22131
Ly8q 22132
QW5ub3RhdGlvbnM= 22133
IFZhcmlhYmxlcw== 22134
PFY= 22135
KHNlcnZlcg== 22136
IE9yYWNsZQ== 22137
ZWxlbWVudHM= 22138
IG9yZ2FuaXNhdGlvbg== 22139
X3BvaW50ZXI= 22140
IEhlYWRlcnM= 22141
W2Q= 22142
IGRlYWRsaW5l 22143
aXNzYQ== 22144
IGtuaWZl 22145
IE5BU0E= 22146
IEhlaWdodA== 22147
Nzg0 22148
IEFzeW5j 22149
IHZlbnVl 22150
LmRvbQ== 22151
Ym91cm5l 22152
IEhhd2Fp 22153
IG1lbW8= 22154
aWN0aW9ucw== 22155
IHN1cnZlaWxsYW5jZQ== 22156
b21p 22157
L2Fzc2V0cw== 22158
NTg3 22159
IGVkdQ== 22160
xJs= 22161
IHJvc3Rlcg== 22162
IGhpcmVk 22163
IFRvaw== 22164
IHBsYWNlbWVudA== 22165
dXJhdGlvbnM= 22166
IHNldFN0YXRl 22167
IE1hZ2F6aW5l 22168
IGhvcnJvcg== 22169
VHJ5 22170
IGxhZw== 22171
IEV2ZXJ5b25l 22172
dGh1cg== 22173
KSk7DQoNCg== 22174
LnJldHVybg== 22175
IHN5bXA= 22176
4paI4paI 22177
IG5pZ2h0cw== 22178
d29ya2Vy 22179
IGFsZQ== 22180
ZW5uZXNzZWU= 22181
LnN0ZXA= 22182
IHN5bmNocm9uaXplZA== 22183
NDg3 22184
b3VyaQ== 22185
RG9lcw== 22186
LmNoYW5nZQ== 22187
Zm9u 22188
LnNldEJhY2tncm91bmQ= 22189
aXJjdWxhcg== 22190
NDc2 22191
Ky0= 22192
IENJQQ== 22193
NzI5 22194
IEphbmU= 22195
IFNpbWlsYXI= 22196
LUk= 22197
bGV2ZWxhbmQ= 22198
IHByb3NwZWN0 22199
X2ZvdW5k 22200
CWNvbG9y 22201
LkRpYWdub3N0aWNz 22202
IGFubm91bmNl 22203
IGFzc3VtZXM= 22204
L3Ry 22205
IGJk 22206
OTg3 22207
IENhcmJvbg== 22208
IGFuYWx5cw== 22209
NTY0 22210
LmRlc3Q= 22211
bmlr 22212
IExpZQ== 22213
LWluZGV4 22214
RHJhd2FibGU= 22215
IFRBRw== 22216
IHRyaWFuZ2xl 22217
X0ZMT0FU 22218
CQkgICAgIA== 22219
LmJsYWNr 22220
dnVl 22221
Y3VyYWN5 22222
IGFmZmVjdHM= 22223
OTA2 22224
IHN1cmVseQ== 22225
U2xpZGVy 22226
dWtp 22227
Y2VyeQ== 22228
IHVudGVy 22229
LnByb2ZpbGU= 22230
b3Jkb24= 22231
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 22232
bGVhdmU= 22233
IHNtYXJ0cGhvbmU= 22234
Z2ll 22235
IGNvbnNwaXI= 22236
IHR1dG9yaWFs 22237
57G7 22238
IGNhYg== 22239
NzY1 22240
IFN1bW1hcnk= 22241
KgoK 22242
w6Ro 22243
IlRoaXM= 22244
IHNsaWRlcw== 22245
Ijwv 22246
LmRldg== 22247
Jzw= 22248
IFJpbmc= 22249
xYJh 22250
IGtvdGxpbg== 22251
LmR1bXBz 22252
IGJhc3M= 22253
7Is= 22254
UE9JTlQ= 22255
IHV0dGVy 22256
IMOpcw== 22257
LmZ1bGw= 22258
T0xM 22259
IGNlcmVtb255 22260
c2xvdA== 22261
IGFpbXM= 22262
dG9vbHRpcA== 22263
LnNjb3Jl 22264
LWRk 22265
NjQy 22266
IHByb3g= 22267
UmVjb2duaXplcg== 22268
ZHluYW1pYw== 22269
w6RuZA== 22270
L3N0ZA== 22271
RFU= 22272
IE5vdEltcGxlbWVudGVk 22273
KCItLQ== 22274
UkFX 22275
NjM1 22276
IGV0aG5pYw== 22277
YW5ubw== 22278
IGNoYW1waW9uc2hpcA== 22279
LHNlbGY= 22280
IGFjY2VwdGFibGU= 22281
IFNwcml0ZQ== 22282
W3R5cGU= 22283
w7xo 22284
IFZL 22285
KGpQYW5lbA== 22286
NTQ4 22287
aXRy 22288
66A= 22289
YXVyYQ== 22290
IGZhY3VsdHk= 22291
YXZlcnM= 22292
IFJlY29yZHM= 22293
LlNlY3VyaXR5 22294
IGNvbnN0cmFpbnQ= 22295
LkJs 22296
VWludA== 22297
YmFsYW5jZQ== 22298
IGNvbW1l 22299
IE5paw== 22300
U3VwcHJlc3NXYXJuaW5ncw== 22301
IE9jZWFu 22302
NTU0 22303
X0lk 22304
RGF0YVNldA== 22305
IGluc2VydGVk 22306
IjsNCg0K 22307
4oCz 22308
aXBwZXQ= 22309
IGFubml2ZXJzYXJ5 22310
IHJldGlyZWQ= 22311
b3JjaA== 22312
IHBlcnBldA== 22313
XEZvcm0= 22314
IGludm9sdmVtZW50 22315
X3VzZXJuYW1l 22316
YWxlbQ== 22317
X1NFUlZJQ0U= 22318
IEluZGlhbmE= 22319
IGNpZ2FyZXQ= 22320
YXJ0eg== 22321
IFJD 22322
IG1lYXN1cmVtZW50cw== 22323
572u 22324
IGFmZmlsaWF0ZQ== 22325
YWNpb25hbA== 22326
LXNlY3Rpb24= 22327
X2NvbnRyb2xsZXI= 22328
dmFyZA== 22329
X2Vs 22330
IFRveQ== 22331
PFA= 22332
TWFjaGluZQ== 22333
w7ptZXI= 22334
IFllYWg= 22335
IllvdQ== 22336
IG1vbA== 22337
LkNs 22338
Y29udHJvbGxlcnM= 22339
IHN1c3BlbmRlZA== 22340
Kys7Cgo= 22341
QVRU 22342
IHByb2plY3Rpb24= 22343
UGFkZGluZw== 22344
NTg2 22345
Lm1hdGg= 22346
Njg2 22347
ZmFjdG9yeQ== 22348
MDQy 22349
IGdhbW1h 22350
KCk+ 22351
Y3ljbGU= 22352
IEJ1bGw= 22353
cGF0aHM= 22354
IHVucA== 22355
IHZpZXdEaWRMb2Fk 22356
X01vZGVs 22357
IGFzc2VydFRydWU= 22358
IHJhdGVk 22359
RGVjbA== 22360
dmVydGVk 22361
IERhdA== 22362
YnJldw== 22363
IHBvaW50aW5n 22364
TXM= 22365
IFBvaW50ZXI= 22366
KSc= 22367
X25vbg== 22368
NTI3 22369
IFNFQw== 22370
IHllYWg= 22371
Z2VuY3k= 22372
aW5pdGlhbGl6ZQ== 22373
Zmx5 22374
NzEx 22375
W3Bvcw== 22376
LGc= 22377
VGVsZQ== 22378
MDM0 22379
IGpva2U= 22380
IGNsYXVzZQ== 22381
LmZpbmRCeUlk 22382
ZW5lcw== 22383
KGluc3RhbmNl 22384
NjI2 22385
wqM= 22386
OTE1 22387
IHNsaWM= 22388
X2hvbWU= 22389
ICovfQo= 22390
X3BhZ2Vz 22391
KHNlcnZpY2U= 22392
OTA1 22393
UlA= 22394
IEFtb25n 22395
LmdldEN1cnJlbnQ= 22396
ODA2 22397
44K5 22398
IHNsZWU= 22399
PTw/ 22400
X3Byb3A= 22401
Zmx1c2g= 22402
IE1N 22403
QmVs 22404
Tm90ZXM= 22405
ICovCgoK 22406
MDM1 22407
IHJo 22408
VGFibGVz 22409
IEp1 22410
IFwNCg== 22411
bGljaGVu 22412
IEluc3VyYW5jZQ== 22413
XQoKCg== 22414
IGNvb3Blcg== 22415
4oCUdGhl 22416
Lm1hdA== 22417
NDg5 22418
IGZvaQ== 22419
KGF1dG8= 22420
TWFyZ2lu 22421
NjM2 22422
IHJlc2lkZW5jZQ== 22423
NTU5 22424
IEhpc3Rvcg== 22425
IH49 22426
RGk= 22427
ICcpCg== 22428
IGV4Y2x1ZGU= 22429
LkRyb3A= 22430
JyI7Cg== 22431
IGNvYw== 22432
X3VwbG9hZA== 22433
SGlkZQ== 22434
IFVua25vd24= 22435
IG5vcm1hbGl6ZQ== 22436
X3JldA== 22437
LicKCg== 22438
Lm5vZGVz 22439
ODcw 22440
LkRhdGFTb3VyY2U= 22441
YmxlbXM= 22442
IGdlbnRsZQ== 22443
OiQ= 22444
JykpOwoK 22445
LlJlc291cmNlcw== 22446
4og= 22447
IFRhaQ== 22448
VkVE 22449
IEd1bg== 22450
bGVhbnM= 22451
IERvYw== 22452
LlZvaWQ= 22453
IEFtZW5kbWVudA== 22454
ODY2 22455
ZXNzZWQ= 22456
NzA2 22457
IHJlY2lwaWVudA== 22458
Lk5vZGU= 22459
b3Zv 22460
IGFsaWduSXRlbXM= 22461
IFVuaXR5 22462
IFJvbWU= 22463
YnVybg== 22464
IHZvbHRhZ2U= 22465
IFNIQQ== 22466
NTM0 22467
NTcy 22468
IEdPT0Q= 22469
aGVscGVycw== 22470
LyoqKi8= 22471
IGVsaW1pbmF0ZQ== 22472
d2Fw 22473
X2FuZ2xl 22474
IHJlZnVnZWVz 22475
CWFzc2VydEVxdWFscw== 22476
IHByb2Jl 22477
KCcuLi8uLi8= 22478
eW91cg== 22479
IG1lcmNo 22480
VUJMRQ== 22481
CXJlc3BvbnNl 22482
X0RFRg== 22483
IGVudmlyb25tZW50cw== 22484
b3VzaW5n 22485
IHJlc3RyaWN0ZWQ= 22486
IENPTlRSSUJVVE9SUw== 22487
NjIx 22488
IGNvbXBhbmlvbg== 22489
4bqj 22490
cG93 22491
dXJ0bGU= 22492
Ymll 22493
LlBlcmZvcm0= 22494
PW4= 22495
cmVkaXM= 22496
IGRpdmlkZQ== 22497
IGNvbGxlY3RpdmU= 22498
RGlmZg== 22499
RHluYW1pYw== 22500
aXNTZWxlY3RlZA== 22501
YXN0eXBl 22502
IExvdA== 22503
IFN0YXRlbWVudA== 22504
aWNpcGFudA== 22505
YWto 22506
NTE3 22507
IHNlcmlhbGl6ZXI= 22508
X0NGRw== 22509
YXZhbA== 22510
IHZpZXdlcnM= 22511
IEZP 22512
T2Nj 22513
IHJvYnVzdA== 22514
IE1pdA== 22515
X0FORA== 22516
VHJhbnNpdGlvbg== 22517
dW5hdGU= 22518
IHByaWRl 22519
IGRyYW1hdGlj 22520
IFBhZ2Vz 22521
X3R1cGxl 22522
IGNvcGllZA== 22523
bW4= 22524
IG91Z2h0 22525
IGVxdWFsaXR5 22526
X2hhcw== 22527
X1dS 22528
NTcz 22529
ZW1p 22530
IHN1cmdl 22531
aWxsbw== 22532
KCl9 22533
MDgx 22534
IHBlcmY= 22535
OTIx 22536
dWxr 22537
IGludmVzdG1lbnRz 22538
Nzg1 22539
IGdlbmVyYXRpb25z 22540
IHJlc29ydA== 22541
IHRydXN0ZWQ= 22542
X2ZyZXE= 22543
IGZvcm1h 22544
QVRJT05T 22545
IEh1 22546
IEdyYWQ= 22547
X2NwdQ== 22548
ICIsCg== 22549
cmVzc2U= 22550
KCoq 22551
IGhlcmVieQ== 22552
IGxha2U= 22553
X1NUQUNL 22554
IEJ1cmVhdQ== 22555
IHN1c3RhaW5hYmxl 22556
IFBF 22557
IGRlaQ== 22558
IEFuc3dlcg== 22559
UGx1cw== 22560
L3dlYg== 22561
IHN0ZXI= 22562
IG1vdW50ZWQ= 22563
X2NsZWFy 22564
Zm9ubw== 22565
aWFuY2Vz 22566
X2ZpbmQ= 22567
IGNvbmZ1c2Vk 22568
X2Jpbg== 22569
REVDTA== 22570
IGluc3RhbnRseQ== 22571
VUlU 22572
X0RP 22573
U2V0dXA= 22574
a2Vl 22575
X3ByaW50Zg== 22576
X3N0bXQ= 22577
IFN0ZWFt 22578
cHJvZg== 22579
bHY= 22580
IHNvbHZpbmc= 22581
bGF0b3I= 22582
b3R5cGVz 22583
QW5kcm9pZA== 22584
X2VzY2FwZQ== 22585
TGVhdmU= 22586
LmdldFRpbWU= 22587
ODEx 22588
aWZz 22589
IGNvdg== 22590
IENsYXNzaWM= 22591
LWRhcms= 22592
NTI2 22593
RGlzcGF0Y2hlcg== 22594
LWdyYXk= 22595
IFBhbGVzdGluaWFu 22596
LmRlZXA= 22597
IEluamVjdA== 22598
IHJlZmxlY3Rpb24= 22599
NTM4 22600
IGh5cG8= 22601
Y29uc3RydWN0b3I= 22602
LmFwcGxpY2F0aW9u 22603
eXN0ZXI= 22604
4pU= 22605
c2Nob29s 22606
IENvdw== 22607
NTkz 22608
IGZvb3RhZ2U= 22609
LWlucw== 22610
IC8qKjw= 22611
YXRvbQ== 22612
IHByb2ZpdHM= 22613
OTIz 22614
IGJvb2tpbmc= 22615
X3RocmVzaG9sZA== 22616
IExpdmVy 22617
IGNpdGl6ZW4= 22618
Yng= 22619
IFN0b3Jt 22620
IENvcnA= 22621
IHdpZGVy 22622
Iikpewo= 22623
X0FDVElPTg== 22624
aW9ycw== 22625
YWlzZXM= 22626
Om5vbmU= 22627
IGNpdGVk 22628
ImZtdA== 22629
QXVn 22630
Y29tYg== 22631
IHdoaXRlcw== 22632
IHNlc3M= 22633
Xl4= 22634
aWdodGg= 22635
IHRhbmc= 22636
X0NBUA== 22637
NjE0 22638
IGludGVyYWN0aW9ucw== 22639
NDk3 22640
IGdhcmQ= 22641
NjQ2 22642
IHByaXpl 22643
NjQ3 22644
YWZrYQ== 22645
VHJp 22646
XEVsb3F1ZW50 22647
IER5bmFtaWM= 22648
55CG 22649
Z3A= 22650
IHJlYWxt 22651
IE5p 22652
IEVkd2FyZA== 22653
IGlkZW50aWZpY2F0aW9u 22654
IHBoeXNpY2FsbHk= 22655
5pys 22656
IHBpY2tz 22657
LWZyaWVuZGx5 22658
PGk= 22659
aWZpY2U= 22660
X0FQ 22661
TG9nZ2Vk 22662
NTUz 22663
fSIu 22664
L3V0aWxz 22665
IC4uLi4= 22666
RU5USUFM 22667
KEFjdGlvbg== 22668
J10pOwoK 22669
IHByb3Rlc3Rz 22670
b2xpbmU= 22671
X1JFVFVSTg== 22672
IHBvcHVsYXRpb25z 22673
IFJhaW4= 22674
ZHVw 22675
b3JpYWw= 22676
IEF1dGhvcml0eQ== 22677
X2V4cHI= 22678
MDc1 22679
LnVz 22680
IGNvcnJ1cHQ= 22681
CWltcG9ydA== 22682
PGNoYXI= 22683
IExFRlQ= 22684
IGNhYmluZXQ= 22685
IG5laWdoYm91cg== 22686
IFNxbFBhcmFtZXRlcg== 22687
YXR0ZXJlZA== 22688
ZW1pYQ== 22689
IHJldmlld2Vk 22690
IEhlbGxv 22691
YmxvY2tz 22692
KHByb2Nlc3M= 22693
OTk3 22694
IG9ic2VydmF0aW9u 22695
cmF0aW5n 22696
Lmdsb2JhbA== 22697
IHByZWZlcmVuY2U= 22698
LnByZXBhcmU= 22699
IGRvemVucw== 22700
V29ya2Vy 22701
IGNhbGN1bGF0aW9u 22702
IFRvd2Vy 22703
YWlyeQ== 22704
IElTTw== 22705
IGh1bWFuaXR5 22706
LmFzSW5zdGFuY2VPZg== 22707
NzEy 22708
IGR5cw== 22709
IHBpZXI= 22710
aWd1ZQ== 22711
IGFzc29jaWF0ZQ== 22712
IGludGlt 22713
bm90aWZ5 22714
KHt9LA== 22715
ODI4 22716
IFJlcHJlc2VudA== 22717
cGhldA== 22718
c2V1ZG8= 22719
64uI64uk 22720
LlBvc2l0aW9u 22721
IGNsb3N1cmU= 22722
KGNsYXNz 22723
CXRpbWU= 22724
IE9yYW5nZQ== 22725
X29wcw== 22726
IHBvcHVw 22727
IEltcHJv 22728
X3NlY3JldA== 22729
IEV1 22730
LnNldExheW91dA== 22731
dWxseQ== 22732
IHNjcmV3 22733
IFNpemVk 22734
IENPTVA= 22735
IG5vdGlmaWNhdGlvbnM= 22736
VHJhbnNmZXI= 22737
RW1pdHRlcg== 22738
KG9sZA== 22739
bGV0aWM= 22740
NDkz 22741
IC0KCg== 22742
IHBhbmlj 22743
NzE1 22744
IExDRA== 22745
cnVsZXM= 22746
IGFmZmFpcnM= 22747
IEZpbGw= 22748
X0lSUQ== 22749
OTEy 22750
YXR0YWNobWVudA== 22751
IHZvbQ== 22752
PGJ1dHRvbg== 22753
NTk1 22754
IHRleHRz 22755
IGFjdGl2YXRlZA== 22756
LmFjY2Vzcw== 22757
KHJlYWRlcg== 22758
VGVt 22759
IGNvcm9u 22760
cm9waA== 22761
RE1JTg== 22762
IGVtZXJnZWQ= 22763
IGluZmxhdGVy 22764
IEluZGVwZW5kZW50 22765
b3Jpb3Vz 22766
IERlbGhp 22767
Njcy 22768
IGdseXBoaWNvbg== 22769
IENhcmw= 22770
U2k= 22771
IGV4cGVyaW1lbnRhbA== 22772
LmJhcg== 22773
SUFO 22774
IHNxbGl0ZQ== 22775
Y2Npw7Nu 22776
OTA0 22777
X0JBQ0s= 22778
LG5hbWU= 22779
aG9ydA== 22780
IHRlbnM= 22781
NTQ5 22782
6rM= 22783
dXNpdmU= 22784
IGdlbnVpbmU= 22785
IGJ1Y2s= 22786
L2Rpdg== 22787
LnJvb20= 22788
X05FVw== 22789
ZXN0YWRv 22790
IEFyaw== 22791
b2NvbHM= 22792
LmdlbmVyYXRl 22793
dG91Y2g= 22794
Zml4ZWQ= 22795
ICco 22796
IHJlZmVycmluZw== 22797
IG92ZXJ3aGVsbWluZw== 22798
KGxldA== 22799
IGZ1ZQ== 22800
NjIz 22801
X0VOVg== 22802
d29tYW4= 22803
RmlndXJl 22804
YW5pbWF0ZQ== 22805
IE1vcnQ= 22806
IGxvbmdlc3Q= 22807
Y29sbg== 22808
VE0= 22809
Ol8= 22810
cmllbA== 22811
LE4= 22812
IFJBTQ== 22813
IGp1c3RpZnlDb250ZW50 22814
IGFjdGl2ZWx5 22815
L3B1YmxpYw== 22816
IOuw 22817
R2l2ZW4= 22818
T1RBTA== 22819
5aSx6LSl 22820
U2VxdWVudGlhbA== 22821
IHN1cHBsZW1lbnQ= 22822
LmFi 22823
IGNhdGVnb3I= 22824
fX0sCg== 22825
YWhhbg== 22826
J3Vu 22827
b3NpdHk= 22828
IGFjY29tcGxpc2g= 22829
VXRpbGl0aWVz 22830
LnZpZXdz 22831
LmNu 22832
Y2VpbA== 22833
IENCRA== 22834
IFJG 22835
UEVH 22836
IEdpZnQ= 22837
QVlT 22838
IFdJTg== 22839
cGFuaWVk 22840
IMWf 22841
IG9ic2VydmVy 22842
IHNtZWxs 22843
IHs6 22844
TGlua2Vk 22845
PlsK 22846
b2xlcg== 22847
IGxpYmVydA== 22848
IGAK 22849
IHdlbm4= 22850
bGF0ZWQ= 22851
IGltbXVuZQ== 22852
KE5vZGU= 22853
IFByb2JsZW0= 22854
IEFicw== 22855
bG9ncw== 22856
IC4uLw== 22857
IEFEQw== 22858
IH19Ij4K 22859
PicpOwo= 22860
PWI= 22861
IFdpbmQ= 22862
bGFob21h 22863
IGFsbG9jYXRl 22864
b3JpYW4= 22865
IHByZXNjcmlwdGlvbg== 22866
LXF1YWxpdHk= 22867
IE1heW9y 22868
ODU1 22869
aW5lbHk= 22870
ZW5kZm9yZWFjaA== 22871
IENvbXBsZXg= 22872
a29t 22873
NzA5 22874
VFk= 22875
Nzkw 22876
XV0u 22877
LlN0eWxl 22878
X21hbnk= 22879
JywnJA== 22880
IGJhcnJpZXI= 22881
IEZldGNo 22882
IE1hcnZlbA== 22883
IHJlc2lzdA== 22884
0L7Qs9C+ 22885
YmlkZGVu 22886
IFJ1bm5hYmxl 22887
OmZhbHNl 22888
ODk5 22889
IGJ1aWxkcw== 22890
IFN0YWdl 22891
IGR1Yg== 22892
ZW1wbw== 22893
LnNpdGU= 22894
NTU4 22895
OwoKCgo= 22896
OTk0 22897
IERlbnZlcg== 22898
IHJldmVs 22899
IHRyaWdnZXJlZA== 22900
IGRpY2U= 22901
X2ZhaWw= 22902
IGdj 22903
ODMz 22904
NTg5 22905
CVg= 22906
IFRocm93YWJsZQ== 22907
Nzc1 22908
LnJvdXRlcg== 22909
IFJldm9sdXRpb24= 22910
0YDQsA== 22911
X05PTg== 22912
MDU1 22913
n6U= 22914
NTc4 22915
IGVsZGVy 22916
IGFicm9hZA== 22917
INC1 22918
IEFkdWx0 22919
Ymxy 22920
Z2x5cGhpY29u 22921
NjEz 22922
IHByb21vdGluZw== 22923
IGl6 22924
IFNvbGlk 22925
NjQ1 22926
X2xvYWRlcg== 22927
ZWFybHk= 22928
LmVuYWJsZWQ= 22929
LWVkaXQ= 22930
IFVM 22931
X3BsYXk= 22932
IEludGVycnVwdA== 22933
IGFkdmFudGFnZXM= 22934
dWNsZQ== 22935
IG1lY2hhbmljYWw= 22936
LnRhYmxlTGF5b3V0UGFuZWw= 22937
IFdvcmtpbmc= 22938
IGFub255bW91cw== 22939
UmF0aW5n 22940
aWdpb3Vz 22941
X3Bob25l 22942
LmFkZEFjdGlvbkxpc3RlbmVy 22943
IGZyYW4= 22944
dW5kZW4= 22945
ICopJg== 22946
X2Jvb2w= 22947
dWxhdGl2ZQ== 22948
IGNvbmU= 22949
IE11bHQ= 22950
IG3Dtg== 22951
IEZvcndhcmQ= 22952
XSk6Cg== 22953
IGNvbnZpbmNlZA== 22954
YWN0ZWQ= 22955
NjQz 22956
44GT 22957
IENvbmZpZ3VyZQ== 22958
IGNlaWxpbmc= 22959
RGVy 22960
IHBhc3NlbmdlcnM= 22961
R3JvdXBz 22962
IHNvY2Nlcg== 22963
L1c= 22964
YXZpb3Jz 22965
c3dpdGg= 22966
IFpvbmU= 22967
Lk9wdGlvbnM= 22968
IE1vbQ== 22969
aWVkZXI= 22970
QXJyYXlz 22971
IHRyZWF0bWVudHM= 22972
IHByb3RlY3Rpbmc= 22973
ZmFj 22974
IHBpY2tsZQ== 22975
QnV0dG9uSXRlbQ== 22976
NzEz 22977
IGJsb2NraW5n 22978
c3RyYXI= 22979
w7I= 22980
IEV4cG9ydA== 22981
IHRocmV3 22982
b3R0YQ== 22983
IEJBU0U= 22984
Lndz 22985
LkxFQURJTkc= 22986
b3JkZXJCeQ== 22987
X2RlbGF5 22988
IFB1 22989
LmRsbA== 22990
IENob29zZQ== 22991
OTky 22992
UG9saWNl 22993
IEJFR0lO 22994
Ym94ZXM= 22995
IGRpYW1vbmQ= 22996
LGw= 22997
IAkJCQ== 22998
IGN1cmlvdXM= 22999
NjI0 23000
dHY= 23001
IGVyb3Rpc2NoZQ== 23002
YWNrYWdlcw== 23003
CVNldA== 23004
VGljaw== 23005
LmJvcmRlcg== 23006
c3RhdGljbWV0aG9k 23007
IGNoZXI= 23008
aW52b2ljZQ== 23009
IGNydQ== 23010
IGRlZmVjdA== 23011
X21ldGFkYXRh 23012
cmVsYXRpb24= 23013
aWthbg== 23014
W04= 23015
KFF0 23016
KEJhc2U= 23017
5oGv 23018
YmVhdA== 23019
IEVtcHR5 23020
CW8= 23021
X3NoaWZ0 23022
IHJlZ3JldA== 23023
NzIy 23024
VGhvc2U= 23025
Q2VudA== 23026
IFBvcnR1Zw== 23027
IElzbGFuZHM= 23028
IFRJTUU= 23029
TWFuYWdlbWVudA== 23030
OTk2 23031
LXNw 23032
NTM5 23033
w6ptZQ== 23034
IG5vdGlvbg== 23035
dW5pZnU= 23036
UEs= 23037
ODI2 23038
6KGM 23039
IENVUkxPUFQ= 23040
XCJc 23041
VVY= 23042
57o= 23043
ZHJh 23044
Y291 23045
PWA= 23046
IERlc3Ryb3k= 23047
cnA= 23048
LmNhbmNlbA== 23049
R0c= 23050
cnVudGltZQ== 23051
IFZ1ZQ== 23052
IHByb2dyZXNzaXZl 23053
L3NlcnZpY2Vz 23054
IHJ1bm5lcg== 23055
X0ZSQU1F 23056
LlRvb2xTdHJpcE1lbnVJdGVt 23057
ICcsJw== 23058
ZGVsYXk= 23059
PXV0Zg== 23060
IHNjcmVlbmluZw== 23061
IHB1bGxpbmc= 23062
b21hcw== 23063
IGFudGg= 23064
LW5ldw== 23065
L2xvY2Fs 23066
IGlQYWQ= 23067
IHR3aXR0ZXI= 23068
IGR5aW5n 23069
IGhlYXZlbg== 23070
IFVJbnQ= 23071
IFNlbmF0b3I= 23072
IHByZXN1bQ== 23073
IFdhbGtlcg== 23074
IG92ZXJjb21l 23075
ZXRlY3Rpb24= 23076
IGVtYmFycmFzcw== 23077
Q2hpbmE= 23078
NjM5 23079
SW5jbHVkZQ== 23080
Uk9MTA== 23081
IGRhdGFUeXBl 23082
RGF2aWQ= 23083
4Lij 23084
bG9w 23085
LW1vbnRo 23086
IHNjYXI= 23087
IFNhZmU= 23088
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 23089
IGFjY2Vzc29yaWVz 23090
IHJhbXA= 23091
X1VTRQ== 23092
IGNvbnRyYWQ= 23093
KSldCg== 23094
IHByZXN0 23095
IEhS 23096
IFJhcA== 23097
IHVzaXpl 23098
IGNhcGFiaWxpdHk= 23099
IGNvcnQ= 23100
LW5leHQ= 23101
MDc3 23102
NjI3 23103
IGJ1cmRlbg== 23104
ODIy 23105
X3JlYWRlcg== 23106
IEBA 23107
cmVndWxhcg== 23108
IEth 23109
MDM2 23110
TUFO 23111
IGFzdHI= 23112
ICcnKQo= 23113
IGZlZA== 23114
IHBhcnNpbmc= 23115
IFllYXJz 23116
IGJyb2tlcg== 23117
Ijp7Ig== 23118
IGFrdA== 23119
SW52ZW50b3J5 23120
YWJlbGVk 23121
IGFyZ3BhcnNl 23122
KioqKioqKgo= 23123
dmVyc2F0aW9u 23124
IGNvcmQ= 23125
IFRp 23126
IGhvcGVmdWxseQ== 23127
IGFo 23128
dmVyYg== 23129
IHN0b2xlbg== 23130
LkVudHJ5 23131
IGV4cGVjdGluZw== 23132
T3JpZW50YXRpb24= 23133
IHBvd2VyZWQ= 23134
IHBlcnNpc3Q= 23135
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 23136
J10pOw== 23137
JykpLAo= 23138
IENhc2g= 23139
CWl0ZW0= 23140
ODE4 23141
Z3JhZGVz 23142
cm9wb2w= 23143
YmFzaWM= 23144
ICIpOw0K 23145
IGF3YXJkcw== 23146
KHJhbmdl 23147
LWFsbA== 23148
IElCT3V0bGV0 23149
IEluZGVlZA== 23150
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 23151
IHN0b21hY2g= 23152
IGZsb3dlcg== 23153
IHNldw== 23154
X3RpbWVz 23155
YXZpcw== 23156
UVN0cmluZw== 23157
IFJvdXRlcw== 23158
X3Byb3Q= 23159
IGNvbWVkeQ== 23160
IGxvZ291dA== 23161
IHdvb2Rlbg== 23162
IHBvc3Rlcg== 23163
cGllY2U= 23164
LkpvaW4= 23165
IFBvaw== 23166
Y2Vsb25h 23167
bXV0ZXg= 23168
Ow0KDQoNCg== 23169
IHN0cmlrZXM= 23170
Nzg3 23171
TG9hZGVk 23172
KWFyZw== 23173
ZXNh 23174
VW5pdGVk 23175
RXA= 23176
UEVMTA== 23177
ODA3 23178
IEF0bGFudGlj 23179
dWxsZXQ= 23180
NjUy 23181
YXBwbGU= 23182
IHNldHRsZWQ= 23183
YWNvbg== 23184
IHByaW50ZXI= 23185
IEdD 23186
5a6a 23187
IHJlbmRlcmVk 23188
LOKAmQ== 23189
aGVpdA== 23190
c29jaWFs 23191
Lmdl 23192
NzE0 23193
IFJpY2s= 23194
IFV0YWg= 23195
Z290 23196
b25pY2Fs 23197
IFNjcm9sbA== 23198
IFNjaWVuY2Vz 23199
IGp1Zw== 23200
IGFtcGw= 23201
ZW50aQ== 23202
TEVGVA== 23203
IHRhYnM= 23204
IGVub3Jtb3Vz 23205
LmdldEtleQ== 23206
bG9jYXRl 23207
LkVY 23208
LnN0b3JhZ2U= 23209
Lldl 23210
IHRvYXN0 23211
IEFkZGl0aW9uYWxseQ== 23212
ODgy 23213
IE5PVw== 23214
NTQ3 23215
X1VQREFURQ== 23216
IHRyYW5zZmVycmVk 23217
dGhh 23218
LkRpc3BsYXk= 23219
X3Vp 23220
SURFTw== 23221
IG1lYW5pbmdmdWw= 23222
IE1vc2Nvdw== 23223
LHRoaXM= 23224
IFZpY3Rvcmlh 23225
5pS5 23226
INCf 23227
LnN0YWNr 23228
IEJhcm4= 23229
cGFyZWRTdGF0ZW1lbnQ= 23230
OnN0cmluZw== 23231
IGJpag== 23232
IFNUQVRF 23233
IGVtcGxveWVycw== 23234
CWlucHV0 23235
KHw= 23236
IGxleA== 23237
aW52b2tl 23238
CW51bQ== 23239
Kyss 23240
YXRpYWw= 23241
b3JzZXM= 23242
IGZvcms= 23243
X3R4dA== 23244
IEFudG9uaW8= 23245
ICg8 23246
YXZlcnNl 23247
IGRldmFzdA== 23248
44CA 23249
LkRlYw== 23250
IEdhcmQ= 23251
L3Vp 23252
LiU= 23253
dHJp 23254
IHJvbGxlZA== 23255
VmFsdWVQYWly 23256
aXR0ZW4= 23257
IFRoZXI= 23258
IHZyb3U= 23259
IEZsb3c= 23260
IEZpbmFuY2U= 23261
IENvbWI= 23262
SEM= 23263
LnNldFZpc2libGU= 23264
aXNs 23265
IHBr 23266
Nzcz 23267
IHVwc2V0 23268
KHJhdw== 23269
IFZpY2U= 23270
ZWF0dXJlcw== 23271
IExhbmc= 23272
MDI5 23273
TG9va2luZw== 23274
NzY3 23275
IEFTVA== 23276
IHRyaXBz 23277
IEp1c3Rpbg== 23278
YnJvd3Nlcg== 23279
PSInLiQ= 23280
LnZlcnRpY2Vz 23281
ODIx 23282
LWNv 23283
fS97 23284
ID8s 23285
IERvbWlu 23286
IEJlbGc= 23287
Ijw= 23288
IHN1cHBvc2U= 23289
YWRkeQ== 23290
IHdhbGtz 23291
Njg4 23292
RVJSVQ== 23293
X2ZpbHRlcnM= 23294
UHJlZmVycmVk 23295
c2NlbmU= 23296
0LXRgQ== 23297
IEFmZmFpcnM= 23298
ICIjew== 23299
IG9uU3VibWl0 23300
IHN0b2Nrcw== 23301
L3ZpZXc= 23302
Z3JlZQ== 23303
LWdldA== 23304
OTAz 23305
aGl0 23306
Sm8= 23307
LmdldEM= 23308
NzI1 23309
SW5pdGlhbGl6ZWQ= 23310
0YLQuA== 23311
Y3V0cw== 23312
KFR5cGU= 23313
IEFncmVlbWVudA== 23314
IFZpZXRuYW0= 23315
IC8qIQ== 23316
IHBpenph 23317
LXZpZXc= 23318
X2Vt 23319
IGxocw== 23320
IG11eQ== 23321
IElkZW50 23322
IEZyaWVuZHM= 23323
MDYx 23324
IGFidW5k 23325
X0FE 23326
LnRpbWVzdGFtcA== 23327
LSc= 23328
IGR1cGxpY2F0ZQ== 23329
IGh1bnRpbmc= 23330
IHJlZ3VsYXRvcnk= 23331
aWFv 23332
YW1vdXM= 23333
IEVudGVydGFpbm1lbnQ= 23334
W0E= 23335
aWF0cmlj 23336
X0NMSUVOVA== 23337
IEtpZHM= 23338
L3BrZw== 23339
QnJlYWs= 23340
KSkpOwoK 23341
IFNoYXBl 23342
IHJlbGF0aW5n 23343
SW50ZXJydXB0 23344
YWJsZU9wYWNpdHk= 23345
ZW1icmU= 23346
IG15c3Rlcnk= 23347
IGpvdXJuYWxpc3Rz 23348
cml0YWJsZQ== 23349
Lkxpbms= 23350
IHN0b3BwaW5n 23351
Q1JFVA== 23352
LkRC 23353
IHBvcHVsYXJpdHk= 23354
IGdldw== 23355
IGltcHI= 23356
c2V0VmFsdWU= 23357
RkxBRw== 23358
CW1heA== 23359
IGJha2U= 23360
d3k= 23361
IEVjb25vbWlj 23362
IGVuY29udHI= 23363
IGZuYW1l 23364
L2Rl 23365
UmFuaw== 23366
IGJ1Z3M= 23367
LnNt 23368
IG1lZGlhbg== 23369
RE9XTg== 23370
IFN1cmU= 23371
QXRJbmRleA== 23372
IERpY2s= 23373
IChfXw== 23374
LmRlbHRh 23375
RnI= 23376
IHN1Z2dlc3Rpbmc= 23377
IFJlY3ljbGVyVmlldw== 23378
LGU= 23379
U1RBUlQ= 23380
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 23381
eGZvcmQ= 23382
IHJlY2VpcHQ= 23383
Q0xBSU0= 23384
cmVhZG9ubHk= 23385
OTY4 23386
IGVuZ2FnaW5n 23387
NjE5 23388
Q2E= 23389
YXNtYQ== 23390
IGVuc3VyaW5n 23391
RW5nbGlzaA== 23392
IFZhbmNvdXZlcg== 23393
aHl0aA== 23394
IHB1cmNoYXNpbmc= 23395
IFBJ 23396
LndvcmQ= 23397
KHNw 23398
LmhvbWU= 23399
OmRlZg== 23400
IGdpZw== 23401
NTc0 23402
Njcx 23403
IFZl 23404
Zm9ydW0= 23405
IE1pdGNo 23406
QmF5 23407
X0ZM 23408
NjUx 23409
IHNvbGw= 23410
NTc3 23411
X2NvbHVtbnM= 23412
IG1pbm9yaXR5 23413
YmlyZA== 23414
IGhhbmRlZA== 23415
U1NM 23416
U1RBVA== 23417
IG5lcnZvdXM= 23418
g70= 23419
IGZpbGVQYXRo 23420
Q1JFQVRF 23421
QXc= 23422
IHBlbnM= 23423
ODM1 23424
c2VlZA== 23425
IENvbXB1dGU= 23426
b2xr 23427
NTk0 23428
IEFzc2V0 23429
cmVhY2g= 23430
JyksDQo= 23431
bmF2aWdhdGlvbg== 23432
TEY= 23433
L3V0aWw= 23434
IFB1Yg== 23435
IOKU 23436
Y2lvbg== 23437
IyMK 23438
MDcy 23439
SUlJ 23440
VGFnTmFtZQ== 23441
IGFtaWQ= 23442
cGVybWlzc2lvbg== 23443
aWZpYWJsZQ== 23444
eEZGRkZGRkZG 23445
0L3QuA== 23446
LkJ1ZmZlcg== 23447
X2lycQ== 23448
ZGFyaw== 23449
IHJldHZhbA== 23450
LmZpcmU= 23451
cHJvZHVjdGlvbg== 23452
Lmxpc3Rlbg== 23453
IFdlYXRoZXI= 23454
IGJ1eWVycw== 23455
Lm5l 23456
ZXJw 23457
IFBlbnQ= 23458
Njk5 23459
IHdlbGZhcmU= 23460
IHBhZ2VTaXpl 23461
IFN0YWRpdW0= 23462
ZXJ0YQ== 23463
IGxldg== 23464
YW1wYQ== 23465
UGFnZXI= 23466
NjY1 23467
IGNoYXJnaW5n 23468
IE5ldGZsaXg= 23469
fG51bGw= 23470
X3JhbmRvbQ== 23471
LnhwYXRo 23472
IHN0ZXJl 23473
IElTSVM= 23474
cG9uc2Vz 23475
KGxvYw== 23476
NTY2 23477
ZXlvbmQ= 23478
IE9mZmljaWFs 23479
NjU3 23480
IE1hcnlsYW5k 23481
RGF0YVR5cGU= 23482
X3Bhcg== 23483
e30s 23484
IEVuam95 23485
NzI3 23486
X1NISUZU 23487
IEF3YXJkcw== 23488
X0VOVFJZ 23489
IHNlZW1pbmdseQ== 23490
ZW50aWNhdGU= 23491
IGhlYXJ0cw== 23492
NTgz 23493
XzsKCg== 23494
IEhJVg== 23495
IGluZGl2aWQ= 23496
IEZsYWc= 23497
X2N0cmw= 23498
IENhbGxiYWNr 23499
LHo= 23500
IEdQVQ== 23501
CW9iag== 23502
IFBob2VuaXg= 23503
IEJVUw== 23504
OTA3 23505
IHJ1YmJlcg== 23506
X0FVVEg= 23507
IFNvbHV0aW9ucw== 23508
KGxvY2F0aW9u 23509
VmFyaWFibGVz 23510
LnNldEVuYWJsZWQ= 23511
X2hpZ2g= 23512
V08= 23513
R2VzdHVyZQ== 23514
IHJldHJ5 23515
IG9iamVjdEZvcktleQ== 23516
YWxsb3dlZW4= 23517
IG1vcw== 23518
IENlbGU= 23519
IGlra2U= 23520
KGNlbGw= 23521
IE1PREU= 23522
cmVuYQ== 23523
IGRlc2NyaWJpbmc= 23524
NjQx 23525
IHBoaQ== 23526
IHJk 23527
IGRlc2VydmU= 23528
IHdoZWVscw== 23529
5biC 23530
IGNyaXRpY3M= 23531
NzU1 23532
TmFtZXNwYWNl 23533
IEZyYQ== 23534
IAoKCgo= 23535
IGFsbGE= 23536
IHJlcXVpcmluZw== 23537
5pyf 23538
dXRhdGlvbg== 23539
IGRlbGF5ZWQ= 23540
IGFkbWluaXN0cmF0aXZl 23541
IGJheQ== 23542
LmhpZGRlbg== 23543
VGV4 23544
MDUx 23545
IGJvdW5kYXJpZXM= 23546
IF0pOwoK 23547
IEZvbGxvd2luZw== 23548
fi8= 23549
Rmk= 23550
X2NvbnY= 23551
X1RJVExF 23552
IGRlc2Rl 23553
SUNvbGxlY3Rpb25WaWV3 23554
QWxpYXM= 23555
IGJpdGU= 23556
cGF0aWVudA== 23557
X0NPTU1BTkQ= 23558
Q29tcGxldGVk 23559
CWVsaWY= 23560
KDw= 23561
QnVzaW5lc3M= 23562
IFBvb2w= 23563
IHB1cnN1ZQ== 23564
IEJhbg== 23565
X3N0ZXBz 23566
X0RFQ0w= 23567
dW1ibGU= 23568
IGNvbWJv 23569
IExheWVy 23570
Lnhy 23571
IGR1cA== 23572
LS0tLS0tLS0t 23573
NjI4 23574
IG1vZGlmaWVy 23575
cm9i 23576
cmV6 23577
Njk2 23578
IGF0aGxldGVz 23579
VXNlZA== 23580
d2Vhcg== 23581
ODE1 23582
IGxlZ2l0aW1hdGU= 23583
ICIKCg== 23584
IGh2 23585
U3Rk 23586
MDM3 23587
IEhvbGQ= 23588
IHN1cnZpdg== 23589
IEFsbGlhbmNl 23590
IEVhcmx5 23591
Nzc4 23592
QmVoYXZpb3I= 23593
KGZvbnQ= 23594
L2xpYnM= 23595
IHJlY3RhbmdsZQ== 23596
IHNpbmdlcg== 23597
IGFtcA== 23598
RXF1YWxUbw== 23599
ICIuIg== 23600
IGdpcmxmcmllbmQ= 23601
5bE= 23602
bGluZWFy 23603
b2JzZXJ2 23604
IHBpw7k= 23605
IGNvbXBsZW1lbnQ= 23606
V2l0aFZhbHVl 23607
KHBhc3N3b3Jk 23608
dGFrZQ== 23609
Qmxhbms= 23610
IENvbXBhcg== 23611
JyIs 23612
X3BvbGljeQ== 23613
bW9uZ29vc2U= 23614
X0ZBSUxFRA== 23615
LnJlcG9ydA== 23616
UmF0aW8= 23617
LlBlcmZvcm1MYXlvdXQ= 23618
NzQ3 23619
dXNhYmxl 23620
bWVycw== 23621
X3JlbmRlcg== 23622
UEVFRA== 23623
Nzcy 23624
IGxlc2I= 23625
CUU= 23626
X3Rvb2w= 23627
IGxhZGllcw== 23628
OTA4 23629
0L7RgQ== 23630
KSkpKQo= 23631
Ozs7Ow== 23632
LmRvdA== 23633
IG5lc3Q= 23634
cGVhaw== 23635
dWtraXQ= 23636
ZWNh 23637
X1NX 23638
ICYo 23639
IE9rbGFob21h 23640
IGJhbmtpbmc= 23641
NTY5 23642
IE5pbnRlbmRv 23643
NzUy 23644
IHJlcHJvZHVjZQ== 23645
X2VsZW1lbnRz 23646
X21hYw== 23647
cHJveHk= 23648
IHJlbWFya2FibGU= 23649
fS8kew== 23650
IG91dHM= 23651
Lmhhc05leHQ= 23652
TU9ERQ== 23653
NjU4 23654
IGFuaW1l 23655
LmNvbm4= 23656
VW5pcXVl 23657
RG9t 23658
IGltcG9ydGFudGx5 23659
aXR0eQ== 23660
IGp1aWNl 23661
VHc= 23662
IFBhcnRuZXJz 23663
IGF0dGFja2luZw== 23664
IHBvcnRhYmxl 23665
YW1pZW50bw== 23666
LlBpY3R1cmVCb3g= 23667
Lmdlbg== 23668
IG9wdGltYWw= 23669
NTgy 23670
IHJlY3Jl 23671
IGpvdXJuYWxpc3Q= 23672
IEV4dHJhY3Q= 23673
IE1vcmVvdmVy 23674
IG1hcmdpblRvcA== 23675
LkFw 23676
IGZpcmluZw== 23677
TmFO 23678
CXRlbXBsYXRl 23679
0LDQtA== 23680
LkVu 23681
IGRlZmVuY2U= 23682
IFRlbA== 23683
aWxlbg== 23684
amFu 23685
PWRhdGE= 23686
IFVybA== 23687
IFJldXRlcnM= 23688
KHRvdGFs 23689
IEZpZnRo 23690
IGVzc2F5cw== 23691
IGludGVycHJldGF0aW9u 23692
IGNoYXJpdHk= 23693
IFJ1bGVz 23694
IHN1YnNlY3Rpb24= 23695
c3R5bGVk 23696
YXplcg== 23697
bGFncw== 23698
TElTVA== 23699
IHVwbG9hZGVk 23700
IHRyYXNo 23701
IHJlZ2lzdHI= 23702
IHNlbGxlcg== 23703
Pic7DQo= 23704
IHN0YXJ0VGltZQ== 23705
55k= 23706
c3k= 23707
KEh0dHBTZXJ2bGV0UmVxdWVzdA== 23708
IHRyYXA= 23709
R0M= 23710
IGVtYmVkZGVk 23711
IHN1cnJvdW5kZWQ= 23712
ODE2 23713
aW1pdHM= 23714
VFg= 23715
eWxpbmRlcg== 23716
Njg1 23717
IEZhbA== 23718
IHNlbnRlbmNlcw== 23719
IEph 23720
SUZJQ0FUSU9O 23721
d2VhcG9u 23722
b3ZhdGlvbg== 23723
IGNvYXQ= 23724
IGludGVycG9s 23725
IGxpcHM= 23726
IEt5 23727
IHZlY3RvcnM= 23728
X2Ft 23729
IGludGFrZQ== 23730
Lndvcmxk 23731
IGluYm94 23732
IE1BQw== 23733
X2Fi 23734
KG5hbWVvZg== 23735
NjMz 23736
IGVudGVydA== 23737
IGdhdGhlcmluZw== 23738
IFNJTQ== 23739
Kysu 23740
bnlh 23741
J319 23742
IFVQREFURQ== 23743
IHBhYw== 23744
KGh0bWw= 23745
IFNhbnQ= 23746
aWF0aW5n 23747
IElkZWFz 23748
IHNwcmF5 23749
IEhhcnQ= 23750
IHZlcmlmaWNhdGlvbg== 23751
YWRlc2g= 23752
L21vZHVsZXM= 23753
IE1pbmQ= 23754
IFNpemVkQm94 23755
IHNoZWx0ZXI= 23756
IGhlcm9lcw== 23757
YXR0eQ== 23758
IGNlcnRpZmllZA== 23759
c2o= 23760
IMOqdHJl 23761
xYJv 23762
IHB1Ymxpc2hpbmc= 23763
IE1hbGF5cw== 23764
LmdldFVzZXI= 23765
IFByb3ZpZGVy 23766
IExpbmtlZExpc3Q= 23767
IEJvcg== 23768
Uk9VTkQ= 23769
ZGlk 23770
dGFpbg== 23771
cGlyZQ== 23772
IEplbm4= 23773
dGVs 23774
YW5kZQ== 23775
NzU3 23776
X2Zyb250 23777
IE1jRw== 23778
VGVzdE1ldGhvZA== 23779
4Lit 23780
IG9jY2FzaW9uYWxseQ== 23781
IFdhbGVz 23782
IGV4ZXJjaXNlcw== 23783
INCS 23784
MDQ1 23785
LXBsdXM= 23786
IHZhbGlkYXRvcg== 23787
IHByYXllcg== 23788
TEFURUQ= 23789
X2F1dGhvcg== 23790
IGxhYm91cg== 23791
KysK 23792
LWVxdWl2 23793
IEdQTA== 23794
IGZhY2Vib29r 23795
c2ltcGxl 23796
Z2x5 23797
UHJvY2Vzc29y 23798
aXB5 23799
NzQ0 23800
ICo+ 23801
NjQ4 23802
IGNsZWFyZWQ= 23803
IFB1c2g= 23804
ODU4 23805
IHBlbmlz 23806
U3RydWN0dXJl 23807
bGlq 23808
IE1vcmdhbg== 23809
IGhhbmRmdWw= 23810
Ii4K 23811
OTg0 23812
fFw= 23813
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 23814
IEFxdQ== 23815
NTg0 23816
X0lD 23817
LmxvYWRz 23818
IG1ldGVy 23819
IE1hcmluZQ== 23820
Ojp7 23821
IFRT 23822
Nzc2 23823
IEFycmF5cw== 23824
LlRpdGxl 23825
R1JBTQ== 23826
dGVybWlu 23827
IGNvaW5j 23828
RWxzZQ== 23829
X3N0YXRlcw== 23830
LXJ1bg== 23831
bWVtYmVycw== 23832
Nzgy 23833
YXN0cm8= 23834
MDY2 23835
IG9uUHJlc3M= 23836
IGJlaW5ncw== 23837
IGFiYW5kb25lZA== 23838
IHRheHA= 23839
b3duZXJz 23840
Lm1vZGU= 23841
IGRpYWdub3Npcw== 23842
IF8K 23843
IEtuaWdodA== 23844
CUE= 23845
IG9ic2VydmU= 23846
KSwn 23847
ODIz 23848
ISIpCg== 23849
IFBhcmE= 23850
IHZhcmlhdGlvbg== 23851
KEZhbHNl 23852
IEFudGk= 23853
IGdyaQ== 23854
IGhvbWVsZXNz 23855
P3Y= 23856
IGJleg== 23857
LlNlcnZlcg== 23858
cmVsZWFzZQ== 23859
IFBhdHJp 23860
IGNoYXJz 23861
IHJhbmtpbmc= 23862
YWN0aXZhdGlvbg== 23863
NTgx 23864
IHdpZGVz 23865
cXI= 23866
LlNxbA== 23867
YWN1bGFy 23868
IEJvdA== 23869
X3N5bmM= 23870
IGhhcHBpbmVzcw== 23871
IHZvbHVudGVlcnM= 23872
ODc3 23873
IHNpdHM= 23874
Lzw= 23875
W2U= 23876
KGZpbGVOYW1l 23877
IGNhcGFj 23878
ODMy 23879
IE1hcmlh 23880
ZmF0aGVy 23881
IGdyYW0= 23882
Kmk= 23883
IGNhc28= 23884
X2RyYXc= 23885
IFJhdw== 23886
IEl0ZXJhdG9y 23887
NjY0 23888
IFBhZGRpbmc= 23889
OTI0 23890
UEQ= 23891
Qk9Y 23892
IFNQRUNJQUw= 23893
IGZlY2hh 23894
IHZpZGU= 23895
IExlYWRlcg== 23896
5Lul 23897
JCgiLg== 23898
IGRpYW1ldGVy 23899
IG1pbGQ= 23900
NzQ1 23901
IHJvY2tz 23902
YXBwaW5ncw== 23903
MDQ4 23904
ZGlyZWN0b3J5 23905
NTU3 23906
LmZsdXNo 23907
IEplc3M= 23908
VU5JVA== 23909
IFBlYXI= 23910
IG1hbmRhdG9yeQ== 23911
U3Vy 23912
cXQ= 23913
IHN0cmVhbXM= 23914
IGNvb3BlcmF0aW9u 23915
IFNhYw== 23916
IGNoZWFwZXI= 23917
CWNo 23918
YW5pbWF0aW9u 23919
ZmFyZQ== 23920
KGhlaWdodA== 23921
KFRydWU= 23922
Tlk= 23923
IHdyZXN0 23924
IHBvbGxz 23925
IGVuY291bnRlcmVk 23926
IE1hcmtldGFibGU= 23927
X1BBU1NXT1JE 23928
NzE2 23929
X1NFTEVDVA== 23930
IEFyYWJpYQ== 23931
X2Nsb2Nr 23932
IHZveQ== 23933
INC40Lc= 23934
IHN0aXI= 23935
aXNpYmxl 23936
LWVmZmVjdA== 23937
LmNyZWF0ZWQ= 23938
IHRveXM= 23939
IFRyYWRhYmxl 23940
IHJ1c3Q= 23941
IHN0cmNweQ== 23942
X3RpbWVzdGFtcA== 23943
IHRhbGVudGVk 23944
LG51bGw= 23945
IEpvYnM= 23946
IFBvcnRsYW5k 23947
IHdlYWtuZXNz 23948
VGhyb3c= 23949
IEFuZ2Vs 23950
5L+u 23951
NzU0 23952
IHVuY2VydA== 23953
77yJCg== 23954
IOydtA== 23955
V2hpY2g= 23956
IFstXTo= 23957
U29tZXRoaW5n 23958
IGNvbnZpY3RlZA== 23959
a2xl 23960
ZWRpdW0= 23961
IGJyYW5jaGVz 23962
IGJhc2Vz 23963
564= 23964
IGNvbXBsZXhpdHk= 23965
IEZpZw== 23966
LnJlc2hhcGU= 23967
JGRi 23968
NzM2 23969
X0NPTlNU 23970
IFRlcw== 23971
LnJ1bnRpbWU= 23972
IGRlbnk= 23973
IEJTRA== 23974
IGty 23975
aGF0dA== 23976
IFN0YXRpYw== 23977
IHVuaXZlcnNpdGllcw== 23978
UmVwbGFjZQ== 23979
IGRyb3Zl 23980
IGFkb2xlcw== 23981
X3BsdWdpbg== 23982
IExHQlQ= 23983
IHRleA== 23984
ZHVjdGlvbg== 23985
NzUx 23986
Nzk5 23987
RURJ 23988
IFRlZA== 23989
X1VSSQ== 23990
IHJlY2VwdGlvbg== 23991
YXJ0ZW4= 23992
LlNpbmdsZQ== 23993
cmljZQ== 23994
c2Npb3Vz 23995
ODQz 23996
X2Jn 23997
IHdhZ2Vz 23998
IFNlcnZsZXQ= 23999
VUlMYXlvdXQ= 24000
IGZvcm1hdHRlZA== 24001
Lk1vZA== 24002
PGNsYXNz 24003
aXNlbg== 24004
IHJlcHJlc2VudGF0aXZlcw== 24005
Il09 24006
IHBvcnRhbA== 24007
IEh1bnRlcg== 24008
IGhpcmluZw== 24009
X18pCg== 24010
cmljdWx1bQ== 24011
dW8= 24012
bGllc3Q= 24013
IHRlYXJz 24014
TGF0 24015
IGxpdGVyYWw= 24016
Lkluc2VydA== 24017
IGN1cnM= 24018
IENvbXB1dA== 24019
IHRlcnJvcmlzbQ== 24020
IHN3ZWVw 24021
IFtdDQo= 24022
IHBhc3Nlbmdlcg== 24023
IGVhc3Rlcm4= 24024
IHR3ZWV0cw== 24025
IG9wZXJhdGVk 24026
d25k 24027
IFN5bg== 24028
LnRvb2xz 24029
IFdN 24030
dWxhdGVz 24031
IGJhY3Rlcmlh 24032
KGJ5dGVz 24033
LnNldERhdGE= 24034
IHZpc2liaWxpdHk= 24035
Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 24036
ZWxt 24037
IGdlbmVyYXRpbmc= 24038
IG12 24039
IGto 24040
amVu 24041
L3NlYXJjaA== 24042
IGFjY291bnRpbmc= 24043
c2VnbWVudA== 24044
YWN0aWM= 24045
Lmlw 24046
IGRlcGxveW1lbnQ= 24047
IGZvb3Rlcg== 24048
PicsCg== 24049
IGV4cGFuZGluZw== 24050
IEhhbWlsdG9u 24051
IENvbnRyaWI= 24052
LlRhYmxlcw== 24053
NzI4 24054
QWN0aXY= 24055
SEg= 24056
b2NvbW1lcmNl 24057
Xzs= 24058
IGFtb25nc3Q= 24059
b3dpbmc= 24060
ODU5 24061
IENvbGQ= 24062
QVBI 24063
IHBzeWNob2xvZ2ljYWw= 24064
X3RlbnNvcg== 24065
IHBhY2thZ2luZw== 24066
IFN3ZWRlbg== 24067
IHBhcmU= 24068
IGFnZ3JlZ2F0ZQ== 24069
IG1vZGVyYXRl 24070
ODYy 24071
X2hhbmQ= 24072
IGRlc2lnbmF0ZWQ= 24073
IGRydW0= 24074
IGdldFVzZXI= 24075
IENyZWVr 24076
X3Njb3Bl 24077
IFRyYW5zZmVy 24078
IE1hcmc= 24079
IGZpZ2h0ZXJz 24080
V25k 24081
IFNlbA== 24082
IExhdW5jaA== 24083
IGVtZXJnaW5n 24084
aWZyYW1l 24085
IEFkZGl0aW9uYWw= 24086
IGZlYXJz 24087
IHNhdGVsbGl0ZQ== 24088
Xzo= 24089
IGRpc3Bvc2luZw== 24090
R2V0VmFsdWU= 24091
SHR0cFBvc3Q= 24092
QVRJVkU= 24093
dWxhcnk= 24094
Vmlld3M= 24095
IGF0dGVuZGluZw== 24096
IFRlbm5lc3NlZQ== 24097
IE1pc3Npb24= 24098
IG1lZGljYXRpb24= 24099
IFd5 24100
IEFubmE= 24101
2Lk= 24102
IFZlcnRleA== 24103
LnR5cGVz 24104
T3JnYW4= 24105
LkRhdGFHcmlkVmlld1RleHRCb3hDb2x1bW4= 24106
IFJT 24107
IHRlbXBv 24108
KEFwcA== 24109
ODky 24110
VmVyc2lvblVJRA== 24111
LnBvaW50 24112
IER1dGNo 24113
SG91cnM= 24114
TFU= 24115
IHF1b3RlZA== 24116
LmJ1aWxkZXI= 24117
IFBlcmZlY3Q= 24118
IEFsd2F5cw== 24119
X3R3bw== 24120
IGV4Y2x1c2l2ZWx5 24121
IENyYQ== 24122
aWZpY2Fy 24123
IEFXUw== 24124
aW5naGFt 24125
Y29tcGxleA== 24126
a2VybmVs 24127
IGdyYXZpdHk= 24128
IHdp 24129
MDUy 24130
IG92ZXJ2aWV3 24131
NjYx 24132
IFdhbnQ= 24133
IFdQ 24134
KHNo 24135
LnJvdGF0aW9u 24136
U3RhdGVz 24137
IFRlZW4= 24138
X2NvbXBvbmVudHM= 24139
7IiY 24140
UmVjZWl2ZWQ= 24141
IGx5cmljcw== 24142
cml0ZXM= 24143
CQkJCQkg 24144
LUFtZXJpY2Fu 24145
W251bQ== 24146
L3B5dGhvbg== 24147
IFVBUlQ= 24148
IGFwcGxl 24149
IEpvbmF0aGFu 24150
IG1vbWVudHVt 24151
4Lix 24152
grk= 24153
IG1pY2g= 24154
YW5kcmE= 24155
IGJpb2xvZ2ljYWw= 24156
IE1lbnM= 24157
ICUl 24158
ZWxzZWE= 24159
IE1leGljYW4= 24160
LnJhbmRpbnQ= 24161
IHRhbGU= 24162
IFZhbGlkYXRl 24163
IGRlZmVhdGVk 24164
Lmh0bQ== 24165
IGNvcHBlcg== 24166
PS8= 24167
Y29zeXN0ZW0= 24168
IHJpcA== 24169
ZGVjaW1hbA== 24170
LlZJU0lCTEU= 24171
IFRh 24172
CQkJCQkJCQkJCQkJCQk= 24173
IGRvd25sb2FkZWQ= 24174
ZW52aXJvbm1lbnQ= 24175
IG5vbWluZQ== 24176
YnVpbGRpbmc= 24177
IFNwb3Q= 24178
aXBoZXJhbA== 24179
IGFsdG8= 24180
cXVldA== 24181
IEZU 24182
L2dldA== 24183
L21hc3Rlcg== 24184
V0lO 24185
5YWD 24186
Njc2 24187
V2VzdA== 24188
YXJnYw== 24189
IHByb2R1Y2Vycw== 24190
IE11Y2g= 24191
X3N0b3JhZ2U= 24192
Y3JlZGl0 24193
Q09OVA== 24194
IHZldA== 24195
IHZvaWNlcw== 24196
KCcnLA== 24197
IGluc3RydW1lbnRz 24198
NjYy 24199
IE1TRw== 24200
ZXNzZQ== 24201
cmVwb3NpdG9yeQ== 24202
b21pY3M= 24203
IGRlYWxlcg== 24204
U3RpbGw= 24205
IGJhbm5lcg== 24206
YXNjaWk= 24207
IHJlbWFya3M= 24208
W2pz 24209
IHNob3J0ZXI= 24210
Z3VscA== 24211
IG15c3Rlcg== 24212
IGt1bg== 24213
IEJpcmQ= 24214
IHRpZW5l 24215
Nzg4 24216
bnV0 24217
IFVt 24218
IHdpc2U= 24219
WWVhaA== 24220
SU5FU1M= 24221
MDQ2 24222
X2JlZ2lu 24223
LWhlYWRpbmc= 24224
Q291cnNl 24225
IA0KDQo= 24226
b21iaWU= 24227
Z3JhZGVk 24228
IEdQUw== 24229
IMW8ZQ== 24230
Rml0 24231
Y2FwdGlvbg== 24232
w7Zu 24233
L2ltYWdl 24234
bGlh 24235
KG1vZA== 24236
IGxlYWs= 24237
ZW56YQ== 24238
NjI5 24239
L0g= 24240
IEhhcHB5 24241
OTkz 24242
RGlzdA== 24243
bng= 24244
IEdvdmVybm9y 24245
KGxhc3Q= 24246
dGVhY2hlcg== 24247
IFNlbnQ= 24248
c3VwcG9ydA== 24249
ODM4 24250
amVjdG9yeQ== 24251
INmF 24252
UmVnaXN0cmF0aW9u 24253
MDYz 24254
IEdyYXk= 24255
LGZhbHNl 24256
IGFkanVzdGVk 24257
KHNldHRpbmdz 24258
PFI= 24259
IE1hZ2U= 24260
IHBsYWludA== 24261
XykK 24262
CWl0 24263
b21ldHJpYw== 24264
LmJvb3RzdHJhcA== 24265
IGNhcnJpZXM= 24266
SXA= 24267
ICEk 24268
IHN3aW1taW5n 24269
IE1hcmlv 24270
IFF1ZXN0aW9ucw== 24271
UEFDRQ== 24272
5pa5 24273
ZW9y 24274
fX0i 24275
IG92ZW4= 24276
IEtvbg== 24277
IHdpc2RvbQ== 24278
IGFjcXVpc2l0aW9u 24279
ZXNzbWVudA== 24280
YWdpbmU= 24281
IGV4cHJlc3Npb25z 24282
U2VxdWVudGlhbEdyb3Vw 24283
RnJvbnQ= 24284
dWxwdA== 24285
YXdr 24286
J10pCgo= 24287
ODEz 24288
NzMy 24289
X0FS 24290
IGFuYWxvZw== 24291
dWxpbg== 24292
X1BSSU5U 24293
IExH 24294
IGJsb2I= 24295
IEZ1cnRoZXJtb3Jl 24296
X2NvbXBvbmVudA== 24297
IENvbGU= 24298
TEFO 24299
U0NSSVBUSU9O 24300
IGxhcA== 24301
aWNlbnNpbmc= 24302
X1RJTUVPVVQ= 24303
IEZybw== 24304
IGxpYWJpbGl0eQ== 24305
IGNvbXBvc2Vk 24306
NjM0 24307
LmNyZWF0ZVNlcXVlbnRpYWxHcm91cA== 24308
X3BlcnNvbg== 24309
IGJlYW0= 24310
CSAgICAgICAg 24311
IE5vdEZvdW5k 24312
Njg0 24313
LicK 24314
w61z 24315
LlRleHRWaWV3 24316
UERG 24317
IGthcg== 24318
X18oJw== 24319
ICI6Ig== 24320
X21lc3NhZ2Vz 24321
IGhhcnZlc3Q= 24322
Lmhpc3Rvcnk= 24323
PicK 24324
LWZvbGQ= 24325
5oo= 24326
IEJldHRlcg== 24327
ICJcPA== 24328
c3BhY2luZw== 24329
IGZ1cm5pc2hlZA== 24330
OTEz 24331
b3Nlcg== 24332
XX0K 24333
ICQi 24334
cHVsbA== 24335
LlBvc3Q= 24336
OTE5 24337
KGlw 24338
l48= 24339
LmZyb250 24340
bnRl 24341
IEZN 24342
Z3VpZA== 24343
ODQ0 24344
IG5lZ290aWF0aW9ucw== 24345
YWdvbmFs 24346
OTM0 24347
IHRyZW1lbmQ= 24348
dW5nZW9u 24349
QWR2 24350
Y2Fyb3VzZWw= 24351
w59l 24352
X0RFU0M= 24353
IGhhbW1lcg== 24354
4bqt 24355
ICAgICAgICAKCg== 24356
LWNvcmU= 24357
LXNlcnZpY2U= 24358
IGNvcm5lcnM= 24359
IFNG 24360
cHJlZA== 24361
PkE= 24362
IEpMYWJlbA== 24363
IHJvbWFudGlj 24364
IHRlc3RpbW9ueQ== 24365
b3Nj 24366
IEdlbmVyYXRpb24= 24367
YXN1cmVz 24368
X2ludGVybmFs 24369
IHByaW50cw== 24370
IF0pCg== 24371
IENsZXZlbGFuZA== 24372
cmVwbw== 24373
RGlzYw== 24374
Njc3 24375
NzYy 24376
ICI+Cg== 24377
77+977+977+977+9 24378
IG5lYXJlc3Q= 24379
NTkx 24380
X3Ri 24381
KHJlcXVpcmU= 24382
RU9G 24383
LWNoaWxk 24384
IGJ1ZGQ= 24385
Llh0cmFFZGl0b3Jz 24386
YWx0aWVz 24387
NzIz 24388
XCI6XCI= 24389
V29yZHM= 24390
OTE3 24391
IGxvY2FsbHk= 24392
IHB1cmNoYXNlcw== 24393
Njk1 24394
RHJhd2Vy 24395
ZXh0cmFjdA== 24396
IGV4ZWN1dA== 24397
fScu 24398
dXNlcmRhdGE= 24399
IGZvY3VzZXM= 24400
LW1pbnV0ZQ== 24401
NzY0 24402
IFB1Ymxpc2g= 24403
b2dv 24404
IG1vdW50YWlucw== 24405
Qm90 24406
fT57 24407
IHRlbnNpb24= 24408
cm9k 24409
bWVzaA== 24410
IHRyYW5zZm9ybWVk 24411
LFI= 24412
KCl9Cg== 24413
Lmxvbmc= 24414
IGdvcmdlb3Vz 24415
IFNjaGVkdWxl 24416
IG9sZGVzdA== 24417
IHN1YnByb2Nlc3M= 24418
KElO 24419
eWVjdA== 24420
IENvb3Blcg== 24421
YXJuZXNz 24422
IE1vbml0b3I= 24423
LnBhcnQ= 24424
OTcy 24425
IE5CQw== 24426
NjY4 24427
IGNvdHRvbg== 24428
IGhvbA== 24429
NzI2 24430
IHJnYmE= 24431
IEJpbw== 24432
Q29udGludWU= 24433
UG9k 24434
IHBhcnRpY2lwYXRpbmc= 24435
Y2x1c2lvbnM= 24436
KEJ5VmFs 24437
NzM0 24438
w6w= 24439
IEhPVw== 24440
X3NldG9wdA== 24441
IGFjY29tcGFueWluZw== 24442
MDkx 24443
YXRvbg== 24444
IC9c 24445
IEF1dGhlbnRpY2F0aW9u 24446
acOpbg== 24447
IEJhcmFjaw== 24448
Lyou 24449
IGVhZ2Vy 24450
IENhbmNlbA== 24451
PGxlbW1h 24452
ZXBo 24453
CXdpbmRvdw== 24454
IGluY2lkZW50cw== 24455
NzU2 24456
KSwo 24457
LkRlcw== 24458
aWJl 24459
IEZ1bmN0aW9ucw== 24460
IGhvc3BpdGFscw== 24461
MDM4 24462
IG94eWdlbg== 24463
cm9vdFNjb3Bl 24464
IGRyZXc= 24465
CXJlcXVlc3Q= 24466
bm90aWNl 24467
YWt1 24468
YW1lbnRz 24469
ZmFy 24470
OTcz 24471
Nzc0 24472
IHByZWNpc2U= 24473
X3dyYXBwZXI= 24474
IGxpc3RlbmVycw== 24475
QVo= 24476
LmJvdW5kcw== 24477
IEF2ZXJhZ2U= 24478
ZmllbGRzZXQ= 24479
X2F4aXM= 24480
IGV4YW1pbmF0aW9u 24481
Jy4K 24482
bW9ucw== 24483
Kyspew0K 24484
IEZvcm1z 24485
7ZWc 24486
OTE2 24487
Q3BwTWV0aG9k 24488
X3RyYWNl 24489
IGVuZ2luZWVy 24490
NjYz 24491
IEZsYXQ= 24492
IHJldmlzaW9u 24493
IGhlYXRpbmc= 24494
NjM4 24495
L3Byb2ZpbGU= 24496
LnJ1 24497
cHJpb3JpdHk= 24498
IGluZmVy 24499
X1NUUkVBTQ== 24500
ICopKA== 24501
PiQ= 24502
T0xFQU4= 24503
T0tJRQ== 24504
SUJJTElUWQ== 24505
VUFHRQ== 24506
IFN1cnZleQ== 24507
MDcx 24508
IHJlc2lnbg== 24509
d2luZw== 24510
IHNlY3JldHM= 24511
IGNoaXBz 24512
SlNPTk9iamVjdA== 24513
RGVza3RvcA== 24514
NTk2 24515
X1NZTUJPTA== 24516
KHJlc291cmNl 24517
IDwvPgo= 24518
IG5ld2VzdA== 24519
dWxp 24520
IGRlc2VydA== 24521
IGRpcA== 24522
IFBvdw== 24523
IGVxdWF0aW9u 24524
IHBvc3NpYmlsaXRpZXM= 24525
IEZlZA== 24526
b3NwaA== 24527
IFsl 24528
IGJ1YmJsZQ== 24529
ZXRoZXJsYW5kcw== 24530
Nzkz 24531
IGNlbWVudA== 24532
LmF1dG8= 24533
X0FO 24534
4oCZLg== 24535
c2VsZWN0aW9u 24536
IEJvbmQ= 24537
OTg4 24538
RGVu 24539
LU8= 24540
LmdldFR5cGU= 24541
ODk2 24542
LldpbmRvdw== 24543
cHJlcw== 24544
IHN3aW5nZXI= 24545
In0pCg== 24546
IHBpcA== 24547
IG1pY2U= 24548
IGNvbXBvdW5k 24549
LXBsdWdpbg== 24550
aWtv 24551
IGNlbnR1cmllcw== 24552
aWN1bGFy 24553
LWlubGluZQ== 24554
CWtleQ== 24555
Plw8 24556
RU5TSU9O 24557
IFsNCg== 24558
IHByZWNpc2VseQ== 24559
IMOpdMOp 24560
IFBhc3Q= 24561
IENhbWJyaWRnZQ== 24562
LWZ1bGw= 24563
IGFuYWx5emU= 24564
IFN0ZXZlbg== 24565
IG5lbQ== 24566
ZHVl 24567
b3Jlbg== 24568
IG11c2NsZXM= 24569
aWppbmc= 24570
ODUy 24571
Ly0= 24572
IEtlbm5lZHk= 24573
NTk3 24574
Uk0= 24575
b3NzaWJsZQ== 24576
IGFjdHJlc3M= 24577
IGRvbG9y 24578
OTE0 24579
5b2V 24580
TmVlZA== 24581
LnRvZ2dsZQ== 24582
IFJhY2U= 24583
d2Vycw== 24584
Lm1hdGVyaWFs 24585
IER1ZQ== 24586
IFBlbA== 24587
I3ByaW50 24588
IGluZGVwZW5kZW5jZQ== 24589
ZXh1cw== 24590
U2hhZG93 24591
IGVuY29kZXI= 24592
KGxldmVs 24593
IFN3aWZ0 24594
LmRvYw== 24595
X3NlbGVjdGlvbg== 24596
OTUy 24597
IHNlcmlhbFZlcnNpb25VSUQ= 24598
OTQ1 24599
TGFiZWxz 24600
IHBlcmZvcm1hbmNlcw== 24601
LlRhZw== 24602
IE5ITA== 24603
aXplbg== 24604
L1VJS2l0 24605
OTkx 24606
X0NPTlRST0w= 24607
IGVhcm5pbmdz 24608
OTc1 24609
IEFsdA== 24610
X0hBTkRMRQ== 24611
Q3R4 24612
IHBlcnN1 24613
IHRyYW4= 24614
56g= 24615
X0NIQU5ORUw= 24616
IHNhdGlzZmFjdGlvbg== 24617
IEdQ 24618
NzY5 24619
aW94 24620
bWl0dA== 24621
bGFuZG8= 24622
IHBpZw== 24623
aW5hbHM= 24624
w6puY2lh 24625
NzMx 24626
U3VyZmFjZQ== 24627
IFVVSUQ= 24628
IGJlbmVmaWNpYWw= 24629
IHNlcXVlbmNlcw== 24630
CW1lbXNldA== 24631
IG1hZ2ljYWw= 24632
wqs= 24633
IHdvcm4= 24634
QVND 24635
cG9wdXA= 24636
Q09NUA== 24637
X2JlZm9yZQ== 24638
ZW5lc3M= 24639
VWk= 24640
TGVz 24641
LnJlcXVpcmU= 24642
LlNlcmlhbGl6YWJsZQ== 24643
YWRkR2Fw 24644
IGF1dGhvcml6YXRpb24= 24645
MDg1 24646
LnB5cGxvdA== 24647
dXJyYXk= 24648
bGF0aXR1ZGU= 24649
ODQ1 24650
ZnJhbWVz 24651
YWpz 24652
IGNvbXBhc3M= 24653
IG9ic2VydmF0aW9ucw== 24654
X3N1cA== 24655
LmVudmlyb24= 24656
IHRyaXBsZQ== 24657
IFJ1Ynk= 24658
IGRyYWlu 24659
X0ZJTFRFUg== 24660
U2Fu 24661
VU1Q 24662
TnVsbEV4Y2VwdGlvbg== 24663
IEdhYg== 24664
b3dl 24665
IFR1cmtpc2g= 24666
X3NlcXVlbmNl 24667
IEdyYW50 24668
dWVsYQ== 24669
IHdv 24670
IGN1YmU= 24671
aXE= 24672
IGRpc29yZGVycw== 24673
IGV4dHJhb3JkaW5hcnk= 24674
IGN0cmw= 24675
IFNlcQ== 24676
ZW50cg== 24677
ODY1 24678
IHNhbmN0aW9ucw== 24679
OTQ5 24680
dXRzY2g= 24681
UmVwb3J0cw== 24682
IGluaGVyaXQ= 24683
UGVyaW9k 24684
IHBob3RvZ3JhcGh5 24685
IEZyYW1ld29yaw== 24686
IHNwZWNpYWxpc3Q= 24687
ID8KCg== 24688
X3NlbGVjdGVk 24689
LlBsYXllcg== 24690
IGFsbG9jYXRpb24= 24691
KGFjY291bnQ= 24692
IHN0cnVjdHVyYWw= 24693
dmFibGU= 24694
LW9mZnNldA== 24695
LkFwcENvbXBhdEFjdGl2aXR5 24696
0LDQvA== 24697
LkFkZFdpdGhWYWx1ZQ== 24698
IGljb25z 24699
IHNodXRkb3du 24700
X2xvdw== 24701
IENvbXBhcmU= 24702
IENl 24703
PWhlYWQ= 24704
bGFt 24705
LnByZWRpY3Q= 24706
X0RFQw== 24707
IFNsZWVw 24708
IEdyYXRpcw== 24709
IHN1Z2dlc3Rpb24= 24710
IERFTA== 24711
Y2FmZg== 24712
YXZpcnVz 24713
Tm90aGluZw== 24714
nos= 24715
IHdpZGVzcHJlYWQ= 24716
IG1lY2hhbmlzbXM= 24717
IHRleHRBbGlnbg== 24718
b2NjdXA= 24719
IFJhaWw= 24720
Ok5T 24721
IGZpYmVy 24722
IG1r 24723
IHZpbnRhZ2U= 24724
LWxvbmc= 24725
LnJlZHVjZQ== 24726
LkVudGl0aWVz 24727
KHJlY29yZA== 24728
IHBsZWFzYW50 24729
RlJJTkc= 24730
LkNlbGxz 24731
T1RU 24732
CWVsc2VpZg== 24733
NjQ5 24734
NzI0 24735
X2NvbmZpcm0= 24736
IFZpZXdHcm91cA== 24737
c3lt 24738
IHByYXk= 24739
IHN1c3BlY3RlZA== 24740
Q29udGFpbnM= 24741
OTgz 24742
IGJvcmRlcnM= 24743
IGNvbXBvbmVudERpZA== 24744
QVNTRVJU 24745
IGluZmluaXRl 24746
LW9yZGVy 24747
IGhlbGxv 24748
IEdyYWRl 24749
LmN1cnJlbnRUaW1lTWlsbGlz 24750
YXBvbGlz 24751
emg= 24752
CU9iamVjdA== 24753
Olxc 24754
SE8= 24755
dmFsdWF0aW9u 24756
IHZvY2Fi 24757
NzE5 24758
IGNvdXBvbg== 24759
YXRhYmFzZXM= 24760
LkdldFR5cGU= 24761
TGVhcm4= 24762
Nzky 24763
XT0i 24764
IEdhcnk= 24765
b3RpdmU= 24766
IGFzaA== 24767
IGJpYg== 24768
WFhYWA== 24769
IGJhbGFuY2Vk 24770
VkFMVUU= 24771
IE5hdA== 24772
X0Fk 24773
PEU= 24774
5Yy6 24775
IE1ldGhvZEluZm8= 24776
ODk3 24777
TElC 24778
IGNvbnNpZGVyYWJsZQ== 24779
IEluZHVzdHJ5 24780
dGVzdHM= 24781
LnNldFRpdGxl 24782
IEJsdWV0b290aA== 24783
IG1hcHBlZA== 24784
IEJydWNl 24785
IE1haW5XaW5kb3c= 24786
CXN0YXR1cw== 24787
IHJheg== 24788
IE1hbmQ= 24789
IGNsYXNzaWZpY2F0aW9u 24790
UGVybWlzc2lvbnM= 24791
OTY5 24792
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 24793
IGNvbnRhaW5lcnM= 24794
OnNldA== 24795
X3htbA== 24796
IHdoaWxzdA== 24797
VGhyb3VnaA== 24798
IHZhbGlnbg== 24799
IHdvcmxkcw== 24800
Q09SRA== 24801
RURJQQ== 24802
0YDQvtCy 24803
IHNwYXJl 24804
IEhhZA== 24805
IERFRg== 24806
KHB0cg== 24807
IHdhcm1pbmc= 24808
ODk4 24809
4KS+ 24810
IGNvbnNlbnN1cw== 24811
YWduZQ== 24812
Q1RM 24813
IOyV 24814
Lk1haW4= 24815
d2ViRWxlbWVudA== 24816
IHBpc3Q= 24817
Rmxhc2g= 24818
QXBwZW5k 24819
LnR3aW1n 24820
VGFw 24821
IHZlZ2V0YWJsZXM= 24822
YWxn 24823
MDU4 24824
LnNhbXBsZQ== 24825
IGNvYWNoaW5n 24826
KGluZA== 24827
Q2VsbFZhbHVl 24828
Q2hlY2tCb3g= 24829
IEhlbGw= 24830
Uk9PVA== 24831
Nzk2 24832
IHN0YWRpdW0= 24833
IGludmVzdGlnYXRpbmc= 24834
KSU= 24835
c3RlZA== 24836
OTY1 24837
IFdyaXRpbmc= 24838
IOqy 24839
IHVubw== 24840
IHt7LS0= 24841
IGNvb3Jkcw== 24842
IHVuc2Vy 24843
b3JnYW5pemF0aW9u 24844
IENyaW1l 24845
IERlbW9jcmF0 24846
NTc5 24847
IHZpbg== 24848
L2ZpbGU= 24849
MDc4 24850
LWFwaQ== 24851
IEF5 24852
IGZ1bmRlZA== 24853
IEJyZXhpdA== 24854
IEdo 24855
ZW50aW5h 24856
Y2FzZXM= 24857
IGRhc2g= 24858
ICEhfQo= 24859
SEk= 24860
T2ZmaWNl 24861
IGNhcHRhaW4= 24862
IHdvcnNoaXA= 24863
XEM= 24864
NzMz 24865
ODUx 24866
IGdsb2Jl 24867
X2JvYXJk 24868
IGJhYmllcw== 24869
ODc2 24870
IGNvbnNlY3V0aXZl 24871
IGVuaGFuY2Vk 24872
ZXJldW0= 24873
IEFkdmlz 24874
IGdyYWlu 24875
Nzcx 24876
IGNyYXc= 24877
YW5jZWxsYXRpb25Ub2tlbg== 24878
LmFscGhh 24879
X1dJVEg= 24880
IE90dA== 24881
IENvb2w= 24882
LmJhdGNo 24883
IHZlcmlmaWVk 24884
KGNhbGxiYWNr 24885
IHJlZ2FyZHM= 24886
Njgz 24887
IEludFB0cg== 24888
b3VjaGVy 24889
IGtpbg== 24890
IHRvdWNoZWQ= 24891
aXTDoA== 24892
YXRob24= 24893
IGFkamFjZW50 24894
IGFjY29tcGFuaWVk 24895
TEVBUg== 24896
IGltcGxpZXM= 24897
IGhpbGw= 24898
IEJhbHRpbW9yZQ== 24899
PSIt 24900
RmluYWxseQ== 24901
ODgz 24902
U2Ft 24903
aWNvcHQ= 24904
IHNvZA== 24905
IG1hag== 24906
IFNoaXBwaW5n 24907
IGdldEFsbA== 24908
IGNvYWNoZXM= 24909
IGRvbmF0aW9ucw== 24910
aWxvdA== 24911
IFRhcg== 24912
Y2Vycg== 24913
IGJhZGdl 24914
IG1hcmtlcnM= 24915
IFJhbmQ= 24916
YWlzZWQ= 24917
aXNzYW5jZQ== 24918
IGV4cGxvcmluZw== 24919
ODI3 24920
dWNlZA== 24921
IEluZG9uZXNpYQ== 24922
IGJlbmVhdGg= 24923
IG1hZ25ldGlj 24924
IG11c2V1bQ== 24925
bWF0Y2hDb25kaXRpb24= 24926
IGRpc3J1cHQ= 24927
IHJlbWluZA== 24928
IFRN 24929
IC8+PA== 24930
IGZvb2w= 24931
IGVzaw== 24932
Lk51bGw= 24933
IERpZXM= 24934
X09VVFBVVA== 24935
X1RZUEVE 24936
IHBhaW50ZWQ= 24937
Njcz 24938
NzM1 24939
IHNvcGhpc3RpYw== 24940
IEJlYXI= 24941
Km4= 24942
X1BBQ0s= 24943
IGRlbGl2ZXJpbmc= 24944
IENPVU5U 24945
5Y2V 24946
IGplZw== 24947
LWNhcg== 24948
Zm5hbWU= 24949
IHJhbmdpbmc= 24950
ODQ4 24951
IE5lZw== 24952
LyoqKioqKi8= 24953
IENIQVI= 24954
IHVsdHJh 24955
R3JhZA== 24956
PXQ= 24957
IGp1ZGdlcw== 24958
IERpc2U= 24959
YW5uZXJz 24960
OTg1 24961
ODkx 24962
ODYx 24963
IHNjYWw= 24964
X2NhbA== 24965
IENPTk5FQ1RJT04= 24966
X2VtYmVk 24967
KGZu 24968
IENyYWZ0 24969
MDQ3 24970
IFBhcw== 24971
IiktPg== 24972
LmNvbnZlcnQ= 24973
LnJlc291cmNl 24974
IFNUQVRVUw== 24975
w7RuZw== 24976
IFRpdA== 24977
IGNsYXNzcm9vbQ== 24978
IEFyY2hpdGVjdA== 24979
IEtpbmdz 24980
IHN0ZWFkeQ== 24981
LyohCg== 24982
IEdlbmU= 24983
KSI7Cg== 24984
aWNpYQ== 24985
c3Rhbg== 24986
IENvbnN0cnVjdGlvbg== 24987
dW1wZXI= 24988
OTUx 24989
d2M= 24990
IENCUw== 24991
aW5naW5n 24992
LXBhcnR5 24993
KGRyaXZlcg== 24994
TUFSSw== 24995
MDgy 24996
IG5lc3RlZA== 24997
ZXdhcmQ= 24998
IGRlcGVuZGVuY3k= 24999
IG1hbGVz 25000
OTI4 25001
IE9ORQ== 25002
IFByb2R1Y3Rpb24= 25003
XVsk 25004
44O844M= 25005
X0xPQUQ= 25006
IEJvbA== 25007
ZWxyeQ== 25008
ODMx 25009
oOmZpA== 25010
IFJlcXVpcmU= 25011
IHBsYWNpbmc= 25012
eHh4 25013
Q0FMRQ== 25014
IHRodW1i 25015
ODI0 25016
Q2hvb3Nl 25017
IHByb3RvdHlwZQ== 25018
Vk9JRA== 25019
IGxlc2JpYW4= 25020
NzQx 25021
IHRyYWl0cw== 25022
U2hhcnA= 25023
IGNvbnN1bWU= 25024
VHJ1dGg= 25025
IGFjdGlvblBlcmZvcm1lZA== 25026
IEVudmlyb25tZW50YWw= 25027
IERlYW4= 25028
IGVzdGFkbw== 25029
c2FtZQ== 25030
IG51bWVyaWM= 25031
IHRyYW5zaXQ= 25032
LkVtYWls 25033
LXNpZGU= 25034
X1JVTg== 25035
IFZpbGxhZ2U= 25036
X09QRU4= 25037
6KY= 25038
LnJlbQ== 25039
LXdhcm5pbmc= 25040
YW55YQ== 25041
UHJvcGVydHlDaGFuZ2Vk 25042
ICghXw== 25043
KGNoZWNr 25044
aWxpYQ== 25045
IFNvZnQ= 25046
c3RlcHM= 25047
IE1hZHJpZA== 25048
TWVtb3J5V2FybmluZw== 25049
IGhhbmRsZXJz 25050
IGV4cGVyaWVuY2luZw== 25051
IGluc3BlY3Q= 25052
YnV0dG9ucw== 25053
UmVjZWl2ZU1lbW9yeVdhcm5pbmc= 25054
Y2hlbXk= 25055
TGlua3M= 25056
IHVybGxpYg== 25057
LlN5c3RlbUNvbG9ycw== 25058
IEVpZ2Vu 25059
IHB1bmlzaG1lbnQ= 25060
OlVJQ29udHJvbA== 25061
YmFyYQ== 25062
LXNldA== 25063
IH0NCg0KDQo= 25064
IHRvbGVyYW5jZQ== 25065
IGludGVyZmFjZXM= 25066
LnJlZGlyZWN0 25067
aWdoYm9ycw== 25068
Y3NyZg== 25069
X2JhY2tncm91bmQ= 25070
LlV0aWxz 25071
X0hU 25072
Njky 25073
IEludGVyZXN0 25074
aW1vcw== 25075
IGdyYW50cw== 25076
MDgz 25077
IGV4YW1pbmVk 25078
0JQ= 25079
IGNm 25080
Zm9yZ2U= 25081
YmFja3M= 25082
IE9iamVjdHM= 25083
X3NlbnQ= 25084
LmVudHJ5 25085
IFRIRU4= 25086
ZWxsaWRv 25087
Y2lh 25088
LHJlcw== 25089
NjU5 25090
Njgx 25091
L3N0ZGM= 25092
Lm5k 25093
KEludA== 25094
IEF1dGhvcnM= 25095
IEFwcENvbXBhdEFjdGl2aXR5 25096
J3s= 25097
IG1lZGk= 25098
TXVzaWM= 25099
aWdt 25100
Y2VpcHQ= 25101
IGF1c3M= 25102
IHRhcmdldGluZw== 25103
IEtleXM= 25104
aG4= 25105
Ol0K 25106
IG1pbmVyYWw= 25107
w64= 25108
LmNh 25109
NzYx 25110
b21lZA== 25111
IHNoZWV0cw== 25112
IGNhbWI= 25113
IGRlYWRseQ== 25114
LmluamVjdA== 25115
KHVuaXQ= 25116
IFNlbGVjdGlvbg== 25117
Lmdtcw== 25118
KGNvbm5lY3Rpb24= 25119
ICQoIg== 25120
w6ltb24= 25121
IEN1cnJlbnRseQ== 25122
cHRl 25123
X3BhdGhz 25124
ODQ3 25125
bGVhZg== 25126
IGltcGxpY2F0aW9ucw== 25127
cG9zYWw= 25128
5L2N 25129
Wy8= 25130
YW5jaWE= 25131
6Zs= 25132
bXVs 25133
Y2ll 25134
IGdlaWxl 25135
Njc5 25136
aW1hbHM= 25137
VUlWaWV3 25138
IHN1cnJl 25139
c2VyaWFsaXpl 25140
SVNP 25141
IGFyYml0cmFyeQ== 25142
IHNvY2thZGRy 25143
LmZu 25144
IE1lcmM= 25145
IGNhc3Rpbmc= 25146
S2V5RG93bg== 25147
IG5ld1ZhbHVl 25148
b3BlbnM= 25149
NzE3 25150
VG9kbw== 25151
IGZsZXhpYmlsaXR5 25152
CQkJCSAg 25153
VmVsb2NpdHk= 25154
w7pu 25155
cm93aW5n 25156
IGNvbXB1dGVk 25157
YCkK 25158
c3RhdGVtZW50 25159
IHJp 25160
X2NhcnQ= 25161
TG93 25162
dHJhbnNmZXI= 25163
Lm5hdg== 25164
IGdyYXZl 25165
IERvb3I= 25166
CWFsZXJ0 25167
Njkx 25168
Njk4 25169
LnN1YnNjcmliZQ== 25170
LXByb2ZpbGU= 25171
CWJhc2U= 25172
IOKIkg== 25173
X18KCg== 25174
IGVuZ2luZWVycw== 25175
IGV4cGxvc2lvbg== 25176
IGRhcmk= 25177
Njgy 25178
CUxvZw== 25179
b25hbA== 25180
IGlzb2xhdGVk 25181
e2k= 25182
IE1zZw== 25183
RnV0dXJl 25184
IHJhY2lzdA== 25185
LXdyYXA= 25186
IFZlcnM= 25187
Ym9yZw== 25188
SVNJT04= 25189
INGA0LDQ 25190
IFlhbg== 25191
ODM2 25192
aW5pdFdpdGg= 25193
IG5vbWlu 25194
KGVtcHR5 25195
w61u 25196
44Kk 25197
CXdpZHRo 25198
IGNoYW1iZXI= 25199
L2FqYXg= 25200
RU1Q 25201
MDkz 25202
IG5lY2Vz 25203
aXZvcw== 25204
bG9naWM= 25205
Kikm 25206
Y3JpcHRz 25207
OTc2 25208
Um93QXQ= 25209
MDUz 25210
aWJsaW5ncw== 25211
IGVhcnM= 25212
IGNvbXB1dGluZw== 25213
IG1ha2Vy 25214
IE5laXRoZXI= 25215
YnJlYWRjcnVtYg== 25216
IHNlcmlhbGl6ZQ== 25217
IFdpdGhpbg== 25218
IGRlbGw= 25219
X1RSQUNF 25220
MDky 25221
PWE= 25222
IHdpc2hlcw== 25223
LWluY2g= 25224
IERvcg== 25225
IGlubm9jZW50 25226
IERvbA== 25227
IGludGVucw== 25228
Zm9yY2Vk 25229
MDU0 25230
IEJJVA== 25231
IHBob3RvZ3JhcGhz 25232
IGNhc2E= 25233
IExlbg== 25234
XEZyYW1ld29yaw== 25235
LlNpbXBsZQ== 25236
IGRlYXI= 25237
ODk1 25238
KS8o 25239
aXBwaQ== 25240
IG93bnM= 25241
UGxheWVycw== 25242
IHByb3Bvc2Fscw== 25243
LnBp 25244
dXNhbGVt 25245
RGFtYWdl 25246
IGNhbG9yaWVz 25247
IENyZWF0aXZl 25248
IFsk 25249
IC8vDQo= 25250
Nzg2 25251
QW5kVmlldw== 25252
w6htZQ== 25253
LmN1c3RvbQ== 25254
X2ZhY3Rvcnk= 25255
Y29tbWFuZHM= 25256
X2xvb2s= 25257
IHN0cmNtcA== 25258
WU4= 25259
YWlyZWQ= 25260
IGF1ZGl0 25261
0L7RgdGC 25262
IFJldmVyc2U= 25263
cm9wcmlhdGU= 25264
ZXRpY3M= 25265
PHZlY3Rvcg== 25266
LnNlbGVuaXVt 25267
Lm9y 25268
IHByZWRpY2F0ZQ== 25269
IGZpbmlzaGluZw== 25270
IGtsZQ== 25271
IFJlcG9z 25272
IEtoYW4= 25273
IE1ha2luZw== 25274
IEZT 25275
IHB1dGU= 25276
CXN0YXRl 25277
X1NVUFBPUlQ= 25278
Jy0= 25279
b3JpZW50YXRpb24= 25280
IGV4aXN0ZWQ= 25281
YXR1cmE= 25282
IGV4cGVjdHM= 25283
IFNoYWRvdw== 25284
OTY2 25285
IG9yZ2FuaXo= 25286
5Z6L 25287
IHN1c3BlbnNpb24= 25288
NjY5 25289
IHVpdA== 25290
IHNpbXVsdGFuZW91c2x5 25291
IEFmZmVybw== 25292
OiIpOwo= 25293
IHJvY2tldA== 25294
Y2Fz 25295
ZXRlcm1pbmU= 25296
YWNldXQ= 25297
Njkz 25298
eGw= 25299
IEFNRA== 25300
KGdyYXBo 25301
NzU4 25302
ODcy 25303
YXNzb2Np 25304
X0NS 25305
LmFyYW5nZQ== 25306
MDQ5 25307
KGpMYWJlbA== 25308
IGJlZWY= 25309
UXVpY2s= 25310
LmNhcmQ= 25311
XSk6 25312
LWdy 25313
Nzk3 25314
LkdPTkU= 25315
X0NMT1NF 25316
IE5ldg== 25317
w61hcw== 25318
IHN0ZXBwZWQ= 25319
IEZyZWVkb20= 25320
IFdS 25321
TlNBcnJheQ== 25322
X3J4 25323
X2RpYWxvZw== 25324
IGhvdGVscw== 25325
OTUz 25326
IChcPA== 25327
IERpYW1vbmQ= 25328
IGFzc3VtcHRpb24= 25329
dW1p 25330
KGl0ZW1z 25331
DQ0NCg== 25332
5rOV 25333
IG5lbA== 25334
Qm9va3M= 25335
5Y6/ 25336
dXNi 25337
IEZJTg== 25338
ODgx 25339
5qw= 25340
IGNvcnBvcmF0aW9ucw== 25341
VVNB 25342
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 25343
OTI5 25344
LnByb3BlcnR5 25345
ZXdpc2U= 25346
X3Bsb3Q= 25347
Ij4nOwo= 25348
IHBlcHBlcg== 25349
OTg5 25350
IHNoZWQ= 25351
IE1lZGl1bQ== 25352
IENvb2tpZQ== 25353
ODg5 25354
IG92ZXJzZWFz 25355
ZWRvcg== 25356
YXN1cmVtZW50 25357
NzY2 25358
5a2Y 25359
ICcuJw== 25360
IHBocA== 25361
IFBST0M= 25362
IGV4Y2VwdGlvbmFs 25363
KHRo 25364
IEpldA== 25365
IG9jY3VwaWVk 25366
LnNldEltYWdl 25367
IFJlbGF0ZWQ= 25368
dWNrZXI= 25369
TWVtYmVycw== 25370
UFJJTlQ= 25371
IEdsbw== 25372
X1ZJRVc= 25373
fSIsCg== 25374
IGFkb3B0aW9u 25375
W10pCg== 25376
ODQy 25377
IE1pc3NvdXJp 25378
IExpbmNvbG4= 25379
ZXJhbGQ= 25380
UG9wdXA= 25381
IGZhdGU= 25382
LWJvb3RzdHJhcA== 25383
ZmVjdGlvbnM= 25384
IFBvbGw= 25385
X0FSR1M= 25386
aW5hbmNl 25387
Njk3 25388
LWhvbWU= 25389
Liks 25390
X2RvbmU= 25391
Njk0 25392
OgoKCg== 25393
IGRpc2N1c3Npbmc= 25394
IFNRTEV4Y2VwdGlvbg== 25395
IGVsZWN0cm8= 25396
CXJlcQ== 25397
IHp3 25398
ODg2 25399
IGx1aQ== 25400
OTMy 25401
IG92ZXJuaWdodA== 25402
JHVzZXI= 25403
IFdBWQ== 25404
IGFsbGVyZw== 25405
IGRpc2FwcG9pbnRlZA== 25406
IHJhZGlhdGlvbg== 25407
IGltcHJlc3NlZA== 25408
aWZpY2F0ZXM= 25409
IHRvYg== 25410
Q0xBU1M= 25411
IGN1ZGE= 25412
X2RldA== 25413
LXBvc3Q= 25414
dWx1 25415
VHJhbnNsYXRpb24= 25416
LWhhbmQ= 25417
LnllYXI= 25418
IE1vbmdv 25419
IHVuY2xlYXI= 25420
LmVuZ2luZQ== 25421
V0VCUEFDSw== 25422
cmljZXM= 25423
X0FDQ0VTUw== 25424
IGhvbGlkYXlz 25425
cGVyY2VudA== 25426
LklkZW50aXR5 25427
IEdvdg== 25428
IHBhc3Npb25hdGU= 25429
ISEu 25430
IEdyZWVjZQ== 25431
cGx1c3BsdXM= 25432
JykpOw== 25433
R1A= 25434
IGV4Y2l0 25435
LnRhYlBhZ2U= 25436
X2NvbmQ= 25437
IHNwb25zb3I= 25438
TU9EVUxF 25439
X3Byb2M= 25440
ICQK 25441
IHJhdGlvbmFs 25442
LlRvb2w= 25443
IGlocg== 25444
Y2Nh 25445
5ZOB 25446
IEVzdGF0ZQ== 25447
SUJVVEU= 25448
QWN0aW9uUGVyZm9ybWVk 25449
IFNvbGFy 25450
poI= 25451
IGVxdWl0eQ== 25452
dGlk 25453
OTM4 25454
IHJlY2lw 25455
LnNpbXBsZQ== 25456
bWs= 25457
Njg5 25458
IEx1a2U= 25459
IEd1YXJkaWFu 25460
IGVuY3J5cHRlZA== 25461
IGRvbWluYW50 25462
LnBsYWNl 25463
IE5W 25464
ODM5 25465
IHRvbmd1ZQ== 25466
KEdldA== 25467
IHN0YWlubGVzcw== 25468
LlBsYXk= 25469
IGVi 25470
YWNp 25471
LmJ1ZmZlcg== 25472
cmVhZGNydW1icw== 25473
IHZhY2NpbmU= 25474
cHJvbQ== 25475
OTc5 25476
IHVzZXJJbmZv 25477
IHNsdWc= 25478
U2VyaWFsaXplZE5hbWU= 25479
LXdpZGU= 25480
IHJlYWN0aW9ucw== 25481
IFlhbmc= 25482
IEFkZHM= 25483
KHVzZXJJZA== 25484
IHBsYXRlcw== 25485
IE1FTQ== 25486
IGJhaWw= 25487
SW5zaWRl 25488
ZXRlZA== 25489
IGVsc2lm 25490
IHNha2U= 25491
IGN5Y2xlcw== 25492
IOyX 25493
CUk= 25494
LWNvbGxhcHNl 25495
ODQx 25496
IEdNVA== 25497
ODE0 25498
RGVjbGFyYXRpb24= 25499
IGdyb3M= 25500
IHJlYWNoZXM= 25501
IGN1c3RvZHk= 25502
VW50aWw= 25503
NzUz 25504
ODU2 25505
dHU= 25506
IENoZW4= 25507
IG54 25508
KGFkZHI= 25509
IE9mZmVy 25510
IGNvbGxlZw== 25511
YXNzYWRvcg== 25512
Njc0 25513
IG1hcHBlcg== 25514
ODU0 25515
IFNJR05BTA== 25516
IEJsb29t 25517
IEhvbGw= 25518
IEltcGVy 25519
LWRlcw== 25520
X3NpdGU= 25521
UHJvYw== 25522
RXF1 25523
IGF0b21pYw== 25524
IFdvbWFu 25525
c2VudA== 25526
NzM4 25527
ODE3 25528
c2Nhcg== 25529
IGludGVsbGlnZW50 25530
IEdldHRpbmc= 25531
IFJlZ2lzdHJhdGlvbg== 25532
IFBoaWxs 25533
IGtpbGxlcg== 25534
dW5pY29kZQ== 25535
CgkJCg== 25536
IEphY29i 25537
IENvbnN0 25538
IGxvY2F0ZQ== 25539
IGNhdXM= 25540
NzQ5 25541
IFNjaG9sYXI= 25542
IGNvbnN0aXR1dGlvbmFs 25543
IGluZmxhdGlvbg== 25544
IEdvdA== 25545
PWFycmF5 25546
ZW5kdW0= 25547
IHRyYW5zbGF0ZWQ= 25548
IGRpdm9yY2U= 25549
RW50cmllcw== 25550
IHNvcg== 25551
IFF1b3Rl 25552
aXJsaW5lcw== 25553
VUs= 25554
IGV4Y2Vs 25555
KG9wdA== 25556
IEFEVg== 25557
LDos 25558
IGNvbnRhY3RlZA== 25559
NzQy 25560
IERB 25561
IHJpbmdz 25562
IEluZHVzdHJpYWw= 25563
LmdldENvbnRleHQ= 25564
IGZvcmdvdHRlbg== 25565
IFRhbg== 25566
IHBhbnRz 25567
IG92 25568
IGRlY29kZXI= 25569
IFBhcnRpYWw= 25570
IHZj 25571
IGJhdHRsZXM= 25572
QXJpYWw= 25573
RlJJTkdFTUVOVA== 25574
aXJhdGVz 25575
LHc= 25576
YWludGVuYW5jZQ== 25577
IE9k 25578
IFRlY2hub2xvZ2llcw== 25579
5YmN 25580
IENhcnRlcg== 25581
LmZpbmRBbGw= 25582
Tm9tZQ== 25583
QmVu 25584
IFVzYWdl 25585
IFBpY3R1cmU= 25586
IGJhZGx5 25587
X3BhbmVs 25588
IHBhdGVudA== 25589
IFByb3RvY29s 25590
bG90dGU= 25591
CXBsYXllcg== 25592
amVjdGlvbnM= 25593
NzQ2 25594
IGRvdQ== 25595
X3JlbGVhc2U= 25596
dXJuaXR1cmU= 25597
X3RheA== 25598
IEZpZWxkcw== 25599
LmRhdGFzZXQ= 25600
X21hc3Rlcg== 25601
Q0xVREU= 25602
IFBoYXJt 25603
YnN0 25604
IG9wZXJhdGlvbmFs 25605
LmNlbGw= 25606
IGlkZW50aWZ5aW5n 25607
IGp3dA== 25608
dHVwbGU= 25609
IFRD 25610
IENybw== 25611
OTM2 25612
aXhtYXA= 25613
LWNvbXBvbmVudHM= 25614
Z2VuZXJhbA== 25615
IG96 25616
X0Rl 25617
X2RvdWJsZQ== 25618
IFRvbw== 25619
MDg4 25620
LlZpZXdHcm91cA== 25621
ODc5 25622
Z2F0ZQ== 25623
ZGluZ3M= 25624
cGhvdG9z 25625
IGdyYW5kZQ== 25626
b2xsZWN0 25627
X2xpbg== 25628
IGF3ZnVs 25629
ZmlsdGVycw== 25630
IGFsdGVybmF0ZQ== 25631
ZXNw 25632
IGNvbXByZXNz 25633
ZW8= 25634
IFNjYWxl 25635
IGluZGlyZWN0 25636
IGludm9pY2U= 25637
CgoKCgoKCgoKCgoKCgoKCg== 25638
U3RhcnRpbmc= 25639
IFBsYXllcnM= 25640
aWVsZQ== 25641
LnRoZW4= 25642
OTgx 25643
T3Jk 25644
IFR1cGxl 25645
IGJvdXQ= 25646
IFN0YXRpc3RpY3M= 25647
UHJldmlldw== 25648
IHB1enpsZQ== 25649
IFdpZHRo 25650
U1RBVEU= 25651
IG92ZXJsYXk= 25652
CW9u 25653
IGluZnI= 25654
IHNtYWxsZXN0 25655
bG9ja2Vk 25656
0YLQvg== 25657
c3Ns 25658
Nzc5 25659
IGRlZW1lZA== 25660
IHNjbw== 25661
cmVjaw== 25662
IGpCdXR0b24= 25663
IG1pc3Npb25z 25664
ODcx 25665
56ew 25666
LlNlbGVjdGVkSW5kZXg= 25667
VEFCTEU= 25668
U2VwdA== 25669
IGFja25vd2xlZGdl 25670
IHN0cnRvdGltZQ== 25671
IFRlbGw= 25672
IERhaw== 25673
IGFsdW1pbnVt 25674
IGZlbmNl 25675
IFN0YXJz 25676
Q09ORklH 25677
IHJldHJvZml0 25678
IGVtcGhhc2lz 25679
L2hlYWRlcg== 25680
IFNvbWV0aGluZw== 25681
aW5pc2hlZA== 25682
PSciLiQ= 25683
IFZhbGlkYXRvcnM= 25684
IHBvbGFy 25685
c2VjdGlvbnM= 25686
OTQ0 25687
LmFzcHg= 25688
IGFzcGly 25689
Lk1vY2s= 25690
Q29kZUdlbg== 25691
IHBldXQ= 25692
OTcx 25693
IGFjY2VwdGluZw== 25694
IGJhY2tpbmc= 25695
UGljdHVyZQ== 25696
L2Fw 25697
0LXQsw== 25698
X1NFQw== 25699
LXVzZQ== 25700
YW5ub3RhdGlvbg== 25701
IGNvZ25pdGl2ZQ== 25702
IGdyaXA= 25703
aG91cg== 25704
IExlZ2Fs 25705
IGVwaWM= 25706
LnRvb2xTdHJpcA== 25707
Lm5vdGlmeQ== 25708
Lkxhc3Q= 25709
T1JJWg== 25710
TWlkZGxld2FyZQ== 25711
Y3JpcHRpb25z 25712
bGFzaA== 25713
X0ZPVU5E 25714
IExpdmVycG9vbA== 25715
IHt9Iiw= 25716
OTMx 25717
SW5zdGFsbA== 25718
IG5pdA== 25719
IGZpZ3VyZWQ= 25720
W2xlbg== 25721
Lldpbg== 25722
LnBsYXRmb3Jt 25723
ODUz 25724
IGdhbWJsaW5n 25725
KGR0 25726
YXZlcnk= 25727
CWluY2x1ZGU= 25728
V2hldGhlcg== 25729
Um91dGluZw== 25730
IHRoZXJhcA== 25731
UmVtb3Rl 25732
IExvc3M= 25733
eWxs 25734
IGFwcHJvYWNoZWQ= 25735
IFZlaGljbGU= 25736
IEFscGhh 25737
IHZvY8Oq 25738
YW5zd2Vycw== 25739
TlNEaWN0aW9uYXJ5 25740
OTU0 25741
Y29uc2lkZXI= 25742
dW51c2Vk 25743
IEZhbg== 25744
b3JhYmxl 25745
ZnJl 25746
ODcz 25747
IERJU0NMQUlN 25748
IEFjdG9y 25749
Ll0= 25750
dG9IYXZl 25751
LnVzZXJJZA== 25752
IHNwZWVkcw== 25753
ZXdheQ== 25754
IHJlY3Vycw== 25755
INCz 25756
X3ByaXY= 25757
IeKAnQoK 25758
Q2hvaWNl 25759
IHNldHRsZQ== 25760
IHBsYW5lcw== 25761
J30s 25762
VG9t 25763
SVRFUg== 25764
ISIK 25765
5bs= 25766
YWNoZWxvcg== 25767
IHNlcGFyYXRpb24= 25768
IGRhbA== 25769
YWRq 25770
IHJlZ2lzdGVycw== 25771
cml6 25772
IE5vdGljZQ== 25773
IGx1 25774
IGNvdXJhZ2U= 25775
IGF4ZXM= 25776
Y2VsbGVudA== 25777
LmFzeW5j 25778
MDcz 25779
IGNvbXBhdGliaWxpdHk= 25780
56s= 25781
ICEKCg== 25782
CXRpdGxl 25783
WUxF 25784
CW1lc3NhZ2U= 25785
VVVJRA== 25786
T0xERVI= 25787
IEhI 25788
IFN0eWxlU2hlZXQ= 25789
IGFjY2Vzc2Vk 25790
LnZhbGlkYXRpb24= 25791
dGFza3M= 25792
IHBvbGx1dGlvbg== 25793
LmNhbnZhcw== 25794
IGluZ3JlZGllbnQ= 25795
IENhYmlu 25796
QWg= 25797
b2xkb3du 25798
IE5PSQ== 25799
IMOX 25800
W2Y= 25801
ZWR1Yw== 25802
eWFsdHk= 25803
KG5vdA== 25804
X1N0YXRl 25805
OTMz 25806
YW1lbg== 25807
Nzk1 25808
NzM5 25809
IGRhbw== 25810
dWRhZA== 25811
ZWxsZXJz 25812
fSY= 25813
bGljaXR5 25814
X1dJTkRPVw== 25815
IHRhdHRv 25816
dmFsb3I= 25817
LlJhbmdl 25818
IHJlZmVyZW5jZWQ= 25819
IFJlc2VydmU= 25820
TW9uZXk= 25821
ODc0 25822
U0NSSVBU 25823
L3Byb2R1Y3Q= 25824
Y2hvaWNlcw== 25825
IHRpbg== 25826
44KT 25827
OTE4 25828
IHNlcGFyYXRvcg== 25829
IHBrZw== 25830
YW1tZWQ= 25831
IE1BVA== 25832
ISEKCg== 25833
IHJhaWQ= 25834
IG1vdGl2YXRpb24= 25835
IFhQ 25836
IEJhY2tncm91bmQ= 25837
IFF1YXRlcm5pb24= 25838
LmRlZmluZVByb3BlcnR5 25839
aWtlcg== 25840
CXBhcmVudA== 25841
IE9yaWdpbmFsbHk= 25842
YW50YWdl 25843
IEhhbnM= 25844
IHRpbWVsaW5l 25845
LmN1cg== 25846
b3BpYw== 25847
IFNlcXU= 25848
bXVzdA== 25849
IENvYWw= 25850
IGZvcm1hdHRlcg== 25851
X1JHQg== 25852
IF8oIg== 25853
J30pLAo= 25854
ID09PT09PT09PT09PT09PT09 25855
IEZVTkNUSU9O 25856
IGxuZw== 25857
aWNhdGVz 25858
bGl2ZQ== 25859
X2VuZ2luZQ== 25860
IHRvd25z 25861
ODY4 25862
JykpCgo= 25863
IFBL 25864
KGFwaQ== 25865
CXNjYW5m 25866
MDg5 25867
cGFja2V0 25868
LnBob25l 25869
4YA= 25870
IEFuZHk= 25871
X05BTUVT 25872
OTgy 25873
UExZ 25874
OTU1 25875
IG1pbnM= 25876
aW1p 25877
IGJyaWNr 25878
IGJsYWRl 25879
LnN0ZG91dA== 25880
fWA7Cg== 25881
U2hpZnQ= 25882
CXNi 25883
IENoZWNrcw== 25884
IHBoZW5vbWVub24= 25885
QXZhdGFy 25886
IG1pbmlzdHJ5 25887
cm9zZQ== 25888
CUZpbGU= 25889
ODc4 25890
IHRpdGxlZA== 25891
KExPRw== 25892
IGdhbg== 25893
ZGVzaWdu 25894
KCksDQo= 25895
IGJvbmVz 25896
c3Rt 25897
xZvEhw== 25898
IElucHV0U3RyZWFt 25899
IHZvbHVudA== 25900
IFNlcmlhbGl6YWJsZQ== 25901
IGZpZ2h0ZXI= 25902
IERyYWc= 25903
VHdpdHRlcg== 25904
IHN1YnNpZA== 25905
57w= 25906
IGZvcnVtcw== 25907
LmxvYWRpbmc= 25908
bG9nZ2Vk 25909
X3RoaXM= 25910
IHRlcnJhaW4= 25911
IGlycmU= 25912
IEluZw== 25913
IENO 25914
X29iamVjdHM= 25915
LnVpZA== 25916
IGNvbnNjaW91c25lc3M= 25917
VElOR1M= 25918
IEdhbGw= 25919
IHBvcnRyYXk= 25920
MDU2 25921
IERldmVsb3Blcg== 25922
IHBhcnRpY2lwYW50 25923
ICI7DQo= 25924
L21vZGVs 25925
Nzk0 25926
IE9wZXJhdGlvbnM= 25927
Xlw= 25928
IExhdGVy 25929
IHJhaXNlcw== 25930
LW5vbmU= 25931
Lm1ldGE= 25932
PScuJA== 25933
RmluaXNoZWQ= 25934
IHJlcGxhY2luZw== 25935
IHNhbXBsaW5n 25936
IEplbg== 25937
IlRoZXJl 25938
UkVBTA== 25939
QUxF 25940
7Iqk 25941
T3JkZXJz 25942
X3BhcmFtZXRlcg== 25943
IE9seW1waWM= 25944
IHRyw6hz 25945
IGFyZW5h 25946
aW9s 25947
Oz8+ 25948
IGltcGFjdHM= 25949
IFdT 25950
OmdldA== 25951
IGZsaWdodHM= 25952
IFJ1c3NlbGw= 25953
Y2FtZXJh 25954
Rm4= 25955
c2lnbWE= 25956
IGZvcmNpbmc= 25957
IGxvY2Fscw== 25958
IGRlcGFydHVyZQ== 25959
IGNlbGVicmF0aW9u 25960
IFNheQ== 25961
ODg0 25962
77yS 25963
IEhpbGxz 25964
Lmhhc093blByb3BlcnR5 25965
IHR5cGluZ3M= 25966
LkFQSQ== 25967
IGRvbmF0aW9u 25968
T3BlcmF0aW9uRXhjZXB0aW9u 25969
LkFjdGl2aXR5 25970
Y3BsdXNwbHVz 25971
IENoYXJsaWU= 25972
IGltcG9ydGVk 25973
IGRhbm4= 25974
IG9jY2FzaW9ucw== 25975
IGltcGxlbWVudGluZw== 25976
IHB1cnBsZQ== 25977
LmRpYWxvZw== 25978
U1FMRXhjZXB0aW9u 25979
ZXJubw== 25980
IHdhcnM= 25981
IHBhc3Rl 25982
IGRlY3JlYXNlZA== 25983
IGhhcnNo 25984
IGVsYWJvcg== 25985
aW5wdXRz 25986
IFZpZXdz 25987
IGVycm9yTWVzc2FnZQ== 25988
X211bA== 25989
CXdyaXRl 25990
IENvcA== 25991
IEFubnVhbA== 25992
KGJ1dHRvbg== 25993
IHZpZGE= 25994
YmFycw== 25995
IEhhcnZhcmQ= 25996
CWV4cGVjdA== 25997
IGluZGV4ZXM= 25998
IGRvY3VtZW50YXJ5 25999
IGZsZXNo 26000
T1JMRA== 26001
IERlbHRh 26002
TUFORA== 26003
QnJ1c2g= 26004
LWNvbHVtbg== 26005
IGRldmVsb3BtZW50cw== 26006
OTc0 26007
Nzgz 26008
bWV0aG9kVmlzaXRvcg== 26009
c2xpY2U= 26010
IFBETw== 26011
IGludmVzdGluZw== 26012
ODY3 26013
aXJhYmxl 26014
IHhtbG5z 26015
77yb 26016
YXJ0YQ== 26017
IHRoZW9yaWVz 26018
X2NpdHk= 26019
ICRfXw== 26020
Q3JlYXRpbmc= 26021
KHBy 26022
RHJvcGRvd24= 26023
aXNtYXRjaA== 26024
IE5FVA== 26025
OTI2 26026
J10pKXsK 26027
IFZhbHVlcw== 26028
IFNFTw== 26029
IFNUQVQ= 26030
IGVjb3N5c3RlbQ== 26031
IHRlbXB0 26032
IFxc 26033
IC8vewo= 26034
IENocmlzdG9waGVy 26035
IEtlbnR1Y2t5 26036
IEh0dHBTZXJ2bGV0UmVzcG9uc2U= 26037
IGh5YnJpZA== 26038
eW9u 26039
IGZlZWRpbmc= 26040
IEV4dHJh 26041
Tm9ybQ== 26042
SVRDSA== 26043
IFNlYW4= 26044
IFVwbG9hZA== 26045
bXVu 26046
cHVy 26047
IHBlcnNpc3RlbnQ= 26048
IElEQw== 26049
IFBlcmZvcm0= 26050
ODYz 26051
Lm1lcmdl 26052
X3Jvb20= 26053
TWVhbndoaWxl 26054
IT0n 26055
IFdlbA== 26056
QXJnc0NvbnN0cnVjdG9y 26057
ODg3 26058
LkRhdGFiYXNl 26059
IGNvdW50aW5n 26060
KCkq 26061
lOWbng== 26062
IFRPUA== 26063
bWlsbA== 26064
IERU 26065
SUdORUQ= 26066
OTU2 26067
IEtC 26068
IGNvbXBseQ== 26069
U291dGg= 26070
X2NvbGxlY3Rpb24= 26071
Q2hhcHRlcg== 26072
IGV4cGxhaW5pbmc= 26073
X0FN 26074
X3Rz 26075
Y2FyZHM= 26076
IHF1ZWw= 26077
IHBvbGU= 26078
IHRvdWNoZG93bg== 26079
IE90aGVycw== 26080
IHBlZXJz 26081
IFR5cGVFcnJvcg== 26082
NzYz 26083
IHNpeHRo 26084
IGNoZWVy 26085
IGRpc3B1dGU= 26086
OTYz 26087
ODkz 26088
dXNj 26089
KV0s 26090
dGh1bWI= 26091
IGhpZGluZw== 26092
IFNJRw== 26093
bGlrZXM= 26094
IFBBR0U= 26095
LlJlZmxlY3Rpb24= 26096
IGhlYWRxdWFydGVycw== 26097
VElORw== 26098
IEdob3N0 26099
TUxF 26100
JAo= 26101
IGNvbnRyYXJ5 26102
ZXh0ZW5k 26103
J10pLg== 26104
RkZFQ1Q= 26105
IFBpbnRlcmVzdA== 26106
w7ptZXJv 26107
cmljYW5l 26108
CXNlc3Npb24= 26109
IGNyeXN0YWw= 26110
LUNvbnRyb2w= 26111
b3Zlcm5tZW50 26112
b2dyYWY= 26113
OTYx 26114
LWFjdGlvbg== 26115
dm9sdW1l 26116
ZnRlbg== 26117
IHVuY29u 26118
IGFuaW1hdGU= 26119
IGxlYXNl 26120
c2Ny 26121
IHJlZnVzZQ== 26122
44CL 26123
ZnRw 26124
aW5mb3JtYXRpb24= 26125
IGV2YWx1YXRlZA== 26126
IGluamVjdGlvbg== 26127
IGphY2s= 26128
IHdvcmtzaG9w 26129
5rOo 26130
UFRI 26131
IFRz 26132
b2ZmZXI= 26133
CW9z 26134
IGtpbmdkb20= 26135
TWlzc2luZw== 26136
IGxhd21ha2Vycw== 26137
ZXh0RmllbGQ= 26138
IHNpbmdpbmc= 26139
YWJp 26140
L2NsaWVudA== 26141
Lm1lZGlh 26142
QVRFR09SWQ== 26143
U2lnbmF0dXJl 26144
JScsCg== 26145
IEZ1Y2s= 26146
XVs6 26147
IHNlbnNvcnM= 26148
L2NvbQ== 26149
IFByaW1hcnk= 26150
LlNRTA== 26151
X3Byb2dyYW0= 26152
IHBpbGxz 26153
IGludGVncmFs 26154
IGZsZWV0 26155
IGRyb3BwaW5n 26156
LnNs 26157
QmVlbg== 26158
IHBldHM= 26159
IGFkdmlzZWQ= 26160
IGRyYWdvbg== 26161
X0VESVQ= 26162
KGlt 26163
OTM5 26164
RkVS 26165
IERydWc= 26166
KHJhbmRvbQ== 26167
IGNvbXByZXNzaW9u 26168
b3VzdA== 26169
WyU= 26170
IGJ1eWVy 26171
aG9w 26172
Um9sZXM= 26173
bWFuYWdl 26174
IHBhaW5mdWw= 26175
IEJyYW5jaA== 26176
LW1vZGFs 26177
ZW5hbnQ= 26178
IE1lc2g= 26179
L2ZvbnQ= 26180
IEdyYWhhbQ== 26181
IOKY 26182
IG5j 26183
IEZyYW5jaXM= 26184
IHNwZWNpZmljYXRpb24= 26185
IGRhbWFnZXM= 26186
LWNvbmZpZw== 26187
IHRoZW9yZXQ= 26188
c2VjdXJl 26189
X211bHRp 26190
YWNldXRpY2Fs 26191
IGRlbWFuZGluZw== 26192
ZW5uZQ== 26193
SVNUUw== 26194
MDk0 26195
KCkpKTsKCg== 26196
UmVhc29u 26197
UmVjZW50 26198
cGhhc2U= 26199
IHBzeQ== 26200
X01BTg== 26201
IHZvbHVudGVlcg== 26202
5b8= 26203
aXN0cmlidXRlZA== 26204
bGlv 26205
IHByb2R1Y3Rpdml0eQ== 26206
X2NvbW0= 26207
U3ByaW5n 26208
bmlz 26209
LndlaWdodA== 26210
IENhbmNlcg== 26211
QWxsb2M= 26212
IFR3ZWV0 26213
IHNlcGFyYXRlbHk= 26214
CWNoZWNr 26215
X3Byb3BlcnRpZXM= 26216
LlVuaXQ= 26217
ODI5 26218
X0NMSw== 26219
IGd0 26220
ICgpOwoK 26221
IGhhbmR5 26222
ODM0 26223
IFRob21wc29u 26224
IHVubmVjZXNzYXJ5 26225
IFJlYWRlcg== 26226
ODk0 26227
R04= 26228
PXJlcXVlc3Q= 26229
IFV0aWxpdHk= 26230
LlJlcG9zaXRvcnk= 26231
IEF4 26232
aHlkcg== 26233
Nzkx 26234
aWV1 26235
IHRoeQ== 26236
IGx0 26237
X21haWw= 26238
5L+u5pS5 26239
YWlsYW5k 26240
IFBoaWxpcA== 26241
IGJpdHRlcg== 26242
IGJldHRpbmc= 26243
ODM3 26244
IHRpbWVk 26245
b2Nrcw== 26246
MDc2 26247
J2E= 26248
IGFsZ29yaXRobXM= 26249
IHJlaW50ZXJwcmV0 26250
IHRvc3M= 26251
cm9nZW4= 26252
IGhvcGVk 26253
KHNlbGVjdGVk 26254
IHZlbnR1cmU= 26255
VEVY 26256
IExlYXZl 26257
LlN1YnN0cmluZw== 26258
IGdyYXRlZnVs 26259
NzQz 26260
dWth 26261
IENvbnN1bWVy 26262
IGFnZ3JlZw== 26263
Q2lyY2xl 26264
4LiB 26265
X2Jsb2Nrcw== 26266
IGxlZ2FsbHk= 26267
ICJ8 26268
44OD 26269
LmJvYXJk 26270
LkFi 26271
RnVuY3Rpb25z 26272
cmVjaXBl 26273
6Ic= 26274
IE94Zm9yZA== 26275
IHdob2xlcw== 26276
LkJ1aWxk 26277
X2NoYW5nZWQ= 26278
aGFp 26279
IGRlcGFydG1lbnRz 26280
OTY0 26281
SW1w 26282
IGNvYWxpdGlvbg== 26283
SU5GUklOR0VNRU5U 26284
IGVtcG93ZXI= 26285
aXRjaGVz 26286
Tm9ydGg= 26287
IGluZmxhbW0= 26288
T05TRQ== 26289
IG1pc3NpbGU= 26290
IFJhag== 26291
IElzc3Vl 26292
IGF0b2k= 26293
Y2FsZWQ= 26294
LkNvbnRyb2xsZXJz 26295
IFdvbGY= 26296
IGNydXNoZXJz 26297
4buH 26298
LkF1dGg= 26299
LmFkZEF0dHJpYnV0ZQ== 26300
aGlz 26301
IGJvb3Rz 26302
LmNsZWFu 26303
Y2FtcA== 26304
IHRlbmFudA== 26305
IHR1bmU= 26306
IHt9Jy4= 26307
IHdvcmtvdXQ= 26308
UmVwbw== 26309
IHBhcnRpYWxseQ== 26310
TUlTU0lPTg== 26311
amFtaW4= 26312
IFNC 26313
IGRldGVybWluYXRpb24= 26314
ICcnKTsK 26315
IEJlbmc= 26316
IHZvcw== 26317
IGluaGFi 26318
L2xhbmc= 26319
c2J1cmdo 26320
RXhlY3V0b3I= 26321
aG9uZQ== 26322
IENoYWxsZW5nZQ== 26323
X2xpbmtz 26324
LkxldmVs 26325
IHVuZGVyZ3JvdW5k 26326
LWNvZGU= 26327
OTU5 26328
IG9wdGltaXphdGlvbg== 26329
bG9nZ2luZw== 26330
X2Rlc3Q= 26331
IHNuYWtl 26332
IGNoZW1pY2Fscw== 26333
X0lNUE9SVEVE 26334
YWRvb3A= 26335
IFRIQVQ= 26336
bWFuYWdlZA== 26337
IHJlZHVjZXM= 26338
IFJFQUw= 26339
IEd1eQ== 26340
X0dFTkVSSUM= 26341
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 26342
LmFtb3VudA== 26343
IGRlcmU= 26344
Z2V0VGltZQ== 26345
IHBhbnQ= 26346
YW5vbnltb3Vz 26347
IGhhcm1vbnk= 26348
IEFsYW4= 26349
IHNjZW5hcmlvcw== 26350
IGRpcnQ= 26351
aHRhZ3M= 26352
TWM= 26353
U2hlbGw= 26354
cmlu 26355
ew0KDQo= 26356
LnBvdw== 26357
CWNsaWVudA== 26358
IGNvbnNwaXJhY3k= 26359
IGFkbWlzc2lvbg== 26360
IFJlZ2lvbmFs 26361
IFZpZXdDb250cm9sbGVy 26362
IFBoaWxpcHBpbmVz 26363
IGRlcG9z 26364
IHBhcA== 26365
OTYy 26366
IFBhZA== 26367
UGF1bA== 26368
LkNvbWJvQm94 26369
IHR1dG9y 26370
IFJlY2lwZQ== 26371
d3JpdGluZw== 26372
IGNvbnRyaWJ1dG9y 26373
T1RI 26374
U21hbGw= 26375
Vkk= 26376
IGhhY2Vy 26377
ZXF1 26378
IEV4YW1wbGVz 26379
aHVtYW4= 26380
Lm1lc3NhZ2Vz 26381
CXR5cA== 26382
ICgNCg== 26383
IFNTTA== 26384
TEVO 26385
IFJvbW5leQ== 26386
KGdyaWQ= 26387
CW1pbg== 26388
ID4KCg== 26389
IGZydWl0cw== 26390
IHZvdGVy 26391
SW5saW5l 26392
cGFuZQ== 26393
IENvbGxlY3Rpb25z 26394
Y2hhcnNldA== 26395
IHNwYW0= 26396
emI= 26397
aXRlbWFw 26398
IHN1Y2NlZWRlZA== 26399
X0NPTA== 26400
IGVsYXBzZWQ= 26401
aW1ldGVy 26402
IHJlY292ZXJlZA== 26403
VGVuc29y 26404
aGF0dGFu 26405
LnNldHVw 26406
aXN0bw== 26407
KGhlYWQ= 26408
OTc3 26409
IFNJWkU= 26410
IHRhY3RpY3M= 26411
IGRpc3R1cg== 26412
IHByZXZhbA== 26413
aWNpb3M= 26414
KFZhbHVl 26415
X2NvbHM= 26416
IEZhdA== 26417
IHNlYWw= 26418
IHNvbnM= 26419
IGVuc3VyZXM= 26420
MDk1 26421
IHByZXNzaW5n 26422
PSY= 26423
aWdlbm91cw== 26424
IGhhcmFzc21lbnQ= 26425
X0pTT04= 26426
IGlnbm9y 26427
eW5vbWlhbA== 26428
b21lcg== 26429
X3N0YXRpYw== 26430
IHNpZ25pZmljYW5jZQ== 26431
IGNpcmNsZXM= 26432
X1N5c3RlbQ== 26433
IGRpc2NpcGxpbmU= 26434
IGRyZXNzZWQ= 26435
IHNwaGVyZQ== 26436
OTI3 26437
IGNsaW1i 26438
NzU5 26439
X2FjdGlvbnM= 26440
IEJhYg== 26441
ICc9Jyw= 26442
X3NjaGVtYQ== 26443
InVzZQ== 26444
IHVuZGVycw== 26445
IGN1cHM= 26446
LnNjcmVlbg== 26447
L25ldw== 26448
IGFwcGVhcmluZw== 26449
VE9Q 26450
dmlzZWQ= 26451
Y2xhbmc= 26452
IGludmVzdGlnYXRvcnM= 26453
IG15c3RlcmlvdXM= 26454
IHByb21pc2luZw== 26455
IHF1YWxpZnk= 26456
IGNhdmU= 26457
IGVxdWlw 26458
PXg= 26459
R1Q= 26460
KGxpbms= 26461
LnZlbG9jaXR5 26462
LmVyYXNl 26463
b3Rlcg== 26464
KysrKysrKys= 26465
cHJvZml0 26466
IHpvbmVz 26467
X3VpZA== 26468
LXNlcg== 26469
IG9iamVjdGl2ZXM= 26470
IG1pbGY= 26471
d2Via2l0 26472
KG1hdGNo 26473
bmVo 26474
IEFzc29jaWF0ZWQ= 26475
IFRvZG8= 26476
PWQ= 26477
MDY1 26478
Q2Ft 26479
IHZvY2Fs 26480
IHN1ZG8= 26481
KEVY 26482
IHRyb3U= 26483
QUJD 26484
LmJlYW4= 26485
IEdyb3VuZA== 26486
IFJFU1Q= 26487
d2VldHM= 26488
SW5n 26489
aW1vbg== 26490
OTQ2 26491
X2J1cw== 26492
IENPTE9S 26493
dW50bw== 26494
IGZvc3M= 26495
IExpbmtz 26496
ODY5 26497
w6RuZw== 26498
L2Zvcm1z 26499
cHJpc2Vz 26500
IGFjaGlldmVtZW50 26501
Q0FMTA== 26502
0LXQu9GM 26503
IFZlcmlmeQ== 26504
X1NPVVJDRQ== 26505
YXB0Y2hh 26506
SURE 26507
X3JlZmVyZW5jZQ== 26508
R29sZA== 26509
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo= 26510
OTQ3 26511
UmVjZWl2ZXI= 26512
MDk5 26513
IGFq 26514
X2RpcmVjdGlvbg== 26515
fV0= 26516
IENvbXBldA== 26517
IGJhbmc= 26518
Nzk4 26519
IENhc3M= 26520
LXVybA== 26521
dGVjaG4= 26522
IEplcnVzYWxlbQ== 26523
bG9uZ2l0dWRl 26524
Jyk7DQoNCg== 26525
IHdpbm5lcnM= 26526
VGFza3M= 26527
IERNQQ== 26528
IHRvb2x0aXA= 26529
jrc= 26530
IEJyYQ== 26531
X2R1cmF0aW9u 26532
Y3VyeQ== 26533
cGFyZW50cw== 26534
LS0tLTwv 26535
IHBhc3Nwb3J0 26536
ODQ5 26537
V0M= 26538
INC7 26539
Y2Vzc2lvbg== 26540
IFllbGxvdw== 26541
IGVuY3J5cHRpb24= 26542
JwoKCg== 26543
IGxpc3Rpbmdz 26544
IENvbW11bmljYXRpb25z 26545
Ll8K 26546
ICIiIg0K 26547
IGZi 26548
IHN0cmljdGx5 26549
IExpdGVy 26550
IEVudGVycHJpc2U= 26551
X2JvdHRvbQ== 26552
QUtF 26553
a2V0 26554
IHRhbQ== 26555
QmV0d2Vlbg== 26556
X1RPUA== 26557
RGlzYWJsZQ== 26558
IGZpbGluZw== 26559
IENocm9u 26560
U0VRVQ== 26561
ICZfX18= 26562
ODQ2 26563
IGZhbA== 26564
IFNMT1Q= 26565
RW1iZWQ= 26566
dXRoZXI= 26567
IFJlc3RhdXJhbnQ= 26568
IHJlYWxpc3RpYw== 26569
IScpOwo= 26570
IERFQUw= 26571
IFBlcmlvZA== 26572
LmdldFg= 26573
IHNlaHI= 26574
Il0nKS4= 26575
OTQz 26576
ZXNzYQ== 26577
CW1lbWNweQ== 26578
IGFja25vd2xlZGdlZA== 26579
c2VuYWw= 26580
IFVuaXZlcnNhbA== 26581
ICcnOwoK 26582
L3dpa2k= 26583
aWVubmU= 26584
IE5TQXJyYXk= 26585
IGFjY2VwdGFuY2U= 26586
IGxpdmVy 26587
IHRvb3Ro 26588
IGFjY3Vz 26589
CUxPRw== 26590
dmFsdQ== 26591
5YC8 26592
IHNlY3RvcnM= 26593
cGVyaW1lbnRhbA== 26594
L2NsYXNz 26595
X2dv 26596
TWljaGFlbA== 26597
b2xhdGlsZQ== 26598
IFBST0Y= 26599
IGNvbXByb20= 26600
c3BlY2lhbGNoYXJz 26601
IOKc 26602
IGlzRXF1YWxUb1N0cmluZw== 26603
IEh1bmc= 26604
LmFzTGlzdA== 26605
L2dv 26606
Pj4o 26607
IEtpcg== 26608
IGludHJvcw== 26609
IHNrZXRjaA== 26610
IHNraWxsZWQ= 26611
IGltbWVy 26612
IGFkZXF1YXRl 26613
X3JlcA== 26614
KGhlYWRlcg== 26615
X2xpa2U= 26616
IHBlcmNlaXZlZA== 26617
c3No 26618
IGFzc3VtaW5n 26619
IGZm 26620
X3V1aWQ= 26621
dWxhcw== 26622
IGRlbW9jcmF0aWM= 26623
LmVudGl0aWVz 26624
U2VyaWVz 26625
YXBob3Jl 26626
IG5ld2Vy 26627
fSg= 26628
U0VD 26629
YWlybw== 26630
IGNvbW1vZA== 26631
IHByaXZpbGVnZQ== 26632
IGRldXg= 26633
IEhvcA== 26634
Licv 26635
Y3RpYw== 26636
Lic7Cg== 26637
PD89 26638
IFVU 26639
ZXRpZXM= 26640
X0NPTlRFTlQ= 26641
LnJlbGVhc2U= 26642
LmRpc21pc3M= 26643
IGZj 26644
b3VuZ2U= 26645
cHdk 26646
X3ByZXY= 26647
TWdy 26648
IEJ1ZmZlcmVkUmVhZGVy 26649
d3JpdHRlbg== 26650
IEVi 26651
ICkKCgo= 26652
dWl0bw== 26653
IGNvbnRyb3ZlcnN5 26654
IGRpc3Bvc2Vk 26655
IGZvdG8= 26656
TGlzdFZpZXc= 26657
L2NyZWF0ZQ== 26658
IENPTA== 26659
Y29tbXVuaWM= 26660
MDY4 26661
IGZyZWVseQ== 26662
dW5hbA== 26663
b3ZpZA== 26664
CXRy 26665
cGFnaW5hdGlvbg== 26666
IENvbW1vbnM= 26667
RWxlbQ== 26668
IFJFTQ== 26669
IGNvcnJlbGF0aW9u 26670
KCkrIg== 26671
IEhpZGU= 26672
YW5kaW5n 26673
KHZlYw== 26674
aXRvcw== 26675
IEN1bHQ= 26676
IG51dHJpdGlvbg== 26677
dmFscw== 26678
IGRldGVybWluaW5n 26679
bG9yZA== 26680
IHNjYW5kYWw= 26681
IHNoYWxsb3c= 26682
b2Rhc2g= 26683
X3NlcmlhbA== 26684
IFNsbw== 26685
IGRpc3Bvbg== 26686
UGxvdA== 26687
aWNrbGU= 26688
IGVsbA== 26689
IHVuZW1wbG95bWVudA== 26690
Rk0= 26691
cm9ucw== 26692
bMSx 26693
TW8= 26694
RXhpc3Q= 26695
SURT 26696
Q2hv 26697
IEtleWJvYXJk 26698
LnBhcnNlcg== 26699
LkdldE9iamVjdA== 26700
IHNwZWxscw== 26701
IGdlc2No 26702
IG1hZ25pdHVkZQ== 26703
X1NM 26704
aXNkaWN0aW9u 26705
ICcpOwo= 26706
aWxpYW5z 26707
IHNoYXI= 26708
IFByb2I= 26709
dWlsdGlu 26710
IHR1bm5lbA== 26711
PkM= 26712
IFdhcnJlbg== 26713
IG9wdGltaXplcg== 26714
IFNFUlZJQ0VT 26715
X29wZXI= 26716
Z2V0QXR0cmlidXRl 26717
IE1jSw== 26718
X3NlbGY= 26719
MDg0 26720
LnJz 26721
IikKCgo= 26722
R2V0Q29tcG9uZW50 26723
ZXJjZQ== 26724
IHRvdXM= 26725
dW5pdHM= 26726
J10pOw0K 26727
Wm9vbQ== 26728
L0U= 26729
IG9ic2M= 26730
IGZhc3Rlc3Q= 26731
b25saW5l 26732
IHBlYWNlZnVs 26733
ZmZlbg== 26734
IGNhcmdv 26735
CXBy 26736
IHNlZWtz 26737
enU= 26738
MDc0 26739
VHJpbQ== 26740
IHdhcmQ= 26741
IHZlcmQ= 26742
IGJsb2dz 26743
LmV4Y2VwdGlvbnM= 26744
IFByZW1pdW0= 26745
IE5ldGhlcmxhbmRz 26746
U2FmZQ== 26747
RmluaXNo 26748
IEFsYnVt 26749
X0FDQw== 26750
PXRoaXM= 26751
dmlydHVhbA== 26752
XT4= 26753
X0xBQkVM 26754
IE5pY2g= 26755
X3dpbg== 26756
IEFhcm9u 26757
V1A= 26758
OyQ= 26759
YWltcw== 26760
IEltYWdlVmlldw== 26761
IGVuZGxlc3M= 26762
RVJB 26763
X0RJU0FCTEU= 26764
IGNhbmNlbGxlZA== 26765
LXVz 26766
IGluc3BlY3Rpb24= 26767
ZW1pbg== 26768
IEdyZXk= 26769
LW9wZW4= 26770
IGl0ZXJhdGlvbnM= 26771
Lm93bmVy 26772
IGtlcmFz 26773
LlBhc3N3b3Jk 26774
IFJ5 26775
IElOUw== 26776
QWly 26777
IFNldmVyYWw= 26778
LlRhYlN0b3A= 26779
SU5HTEU= 26780
IEhhaXI= 26781
IENhbnZhcw== 26782
QUFBQQ== 26783
IGZsYXc= 26784
Y2VkZXM= 26785
LlJlcG9ydA== 26786
7Yo= 26787
IFRpcHM= 26788
Y3JpcHRvcnM= 26789
LnRyYW5zYWN0aW9u 26790
LlNwcmluZw== 26791
IHZpZXdlcg== 26792
IGluc2lnaHRz 26793
6L6T 26794
b3JkaW9u 26795
VUlOVA== 26796
c2Vlaw== 26797
IEF1Zg== 26798
7J6Q 26799
IHN0cmFpbg== 26800
VG9vbHRpcA== 26801
IGR6 26802
aWduYWw= 26803
YWR0 26804
IHVj 26805
ZmluaXRl 26806
IG5t 26807
LmNtZA== 26808
IE15U3Fs 26809
W2RhdGE= 26810
LmphY2tzb24= 26811
LnRyZWU= 26812
UmVxdWVzdFBhcmFt 26813
X2FnZW50 26814
IildDQo= 26815
IGFzc2Fzcw== 26816
KENvbnN0YW50cw== 26817
OnNz 26818
IE1BTg== 26819
Ky0rLQ== 26820
IEJvdHRvbQ== 26821
cHJpbnRz 26822
IFNhbWU= 26823
QEF1dG93aXJlZA== 26824
c3dhcA== 26825
aWNpw7Nu 26826
IHByb3Rlc3RlcnM= 26827
IGhvbmV5 26828
IFZldGVy 26829
KENhbGVuZGFy 26830
LWFk 26831
IEJyb29rbHlu 26832
TGlmZQ== 26833
X1ZBUg== 26834
emVjaA== 26835
IENBTEw= 26836
X0NBU1Q= 26837
IEVsZWN0aW9u 26838
IHRoaWNrbmVzcw== 26839
VmVyeQ== 26840
X0lOVEVHRVI= 26841
LWRldg== 26842
KSkpKQ== 26843
YXBhdA== 26844
b29vbw== 26845
ZGVtbw== 26846
IHBhcnNlRmxvYXQ= 26847
IFJhdGhlcg== 26848
U1RJVA== 26849
bWFrZXI= 26850
W2N1cnJlbnQ= 26851
Y2hyb25v 26852
IGNocmlzdA== 26853
44Gq 26854
IERldGFpbA== 26855
xrDhuw== 26856
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 26857
IHN1bA== 26858
aWRlbmN5 26859
UXVl 26860
IGVsZWdhbnQ= 26861
YXBvbnM= 26862
IGRpc2hlcw== 26863
IGludGVnZXJz 26864
KHJlYWQ= 26865
MDU3 26866
ZmluZFZpZXdCeUlk 26867
IEFtb3VudA== 26868
IFNraXA= 26869
IGhhYml0cw== 26870
Kiko 26871
IG1vbnN0ZXJz 26872
TUFD 26873
OmVuZA== 26874
IGZyYW5r 26875
QXNzZW1ibHk= 26876
IGRmcw== 26877
IG5ldXQ= 26878
X1RZUEVT 26879
ZXF1YWw= 26880
bG95ZA== 26881
KHVyaQ== 26882
IGNoaQ== 26883
IGRlZmVuZGFudA== 26884
IGNvbmZsaWN0cw== 26885
IHZpbA== 26886
LWpz 26887
IFBlYWNl 26888
IG11dGFibGU= 26889
KXNlbmRlcg== 26890
IEZvY3Vz 26891
5bu6 26892
IGFwcHJlY2lhdGVk 26893
c2xlZXA= 26894
IFJFRA== 26895
Q3VsdHVyZQ== 26896
IGRlc2lnbmVycw== 26897
X2dlbmVyYXRvcg== 26898
Y29kZXM= 26899
L2V4 26900
LkdldFZhbHVl 26901
dW1ibGVk 26902
LnNjYWxhanM= 26903
cGVyb3I= 26904
IHZldGVyYW5z 26905
IH0pDQo= 26906
IHVuZm9ydHVuYXRlbHk= 26907
X0NSRUFURQ== 26908
TWFzcw== 26909
IENMQUlN 26910
IE1lZXQ= 26911
X3N1cHBvcnQ= 26912
QmFuaw== 26913
KCkuCg== 26914
RGFyaw== 26915
X0xPVw== 26916
IE1pbmluZw== 26917
IE93bmVy 26918
aWVyYQ== 26919
Q2xpZW50ZQ== 26920
IGVuY291cmFnaW5n 26921
PlM= 26922
IGJveWZyaWVuZA== 26923
IEhhbGY= 26924
IEFDQw== 26925
QWZm 26926
X2Fy 26927
LWxpZmU= 26928
Y3g= 26929
LkpCdXR0b24= 26930
aXphZG8= 26931
Lnplcm8= 26932
Lm9wZW5xYQ== 26933
b3Rvbg== 26934
LnRleHRDb250ZW50 26935
IHRvbGw= 26936
YXRpZQ== 26937
IGJhbGxvdA== 26938
LW51bWJlcg== 26939
LkV4Y2VwdGlvbg== 26940
CXBhcmFtcw== 26941
Y2lyY2xl 26942
LW1hcA== 26943
IG5hcA== 26944
IFJvYm90 26945
IEljaA== 26946
cmVnaXN0cmF0aW9u 26947
QW1hem9u 26948
cm9sbG1lbnQ= 26949
KGV4cA== 26950
IHRhbmtz 26951
IEdvcmRvbg== 26952
IG1hY2hpbmVyeQ== 26953
IGJhc2VsaW5l 26954
5os= 26955
MDg2 26956
2Kk= 26957
IENvbnZlbnRpb24= 26958
CWNvbmZpZw== 26959
b29raWVz 26960
bXVsdA== 26961
UmVjb3Jkcw== 26962
IEVTVA== 26963
IGdhcmJhZ2U= 26964
IGNvbmZvcm0= 26965
aWRhbA== 26966
IGJhcmc= 26967
IHN1cnZpdmVk 26968
IGludmVzdGlnYXRpb25z 26969
OTM1 26970
LmNvbnRhaW5zS2V5 26971
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 26972
b3J0aW9u 26973
IGhvcnI= 26974
X2h0dHA= 26975
IG1hbnQ= 26976
XTsNCg0K 26977
YmluYXJ5 26978
OTQ4 26979
ZW1wbA== 26980
IGlucXVpcnk= 26981
IE1lYW53aGlsZQ== 26982
MDk4 26983
IGNvbGxlY3Rpbmc= 26984
LkVudGl0eUZyYW1ld29yaw== 26985
IiwKCg== 26986
IFBpYw== 26987
QEluamVjdA== 26988
aWNrbmVzcw== 26989
IEJpbmRpbmc= 26990
IGNvbnRyb2xsaW5n 26991
cmV2ZXJzZQ== 26992
IGNoYWlycw== 26993
c2VtYmxlZA== 26994
KGFkZA== 26995
RGlzYWJsZWQ= 26996
YW5hcw== 26997
LnRyYW5zbGF0ZQ== 26998
LS0tLS0tLS0tLS0K 26999
IHJlZmxlY3RlZA== 27000
Il0KCg== 27001
RXh0ZXJuYWw= 27002
QXJyb3c= 27003
U2luZ2xldG9u 27004
JXg= 27005
IMU= 27006
IGFuY2VzdA== 27007
IE9ybGVhbnM= 27008
CWNtZA== 27009
IHByb2hpYml0ZWQ= 27010
aXRobWV0aWM= 27011
KGNoYW5uZWw= 27012
X2Nzcw== 27013
Rm9yd2FyZA== 27014
LnNvY2tldA== 27015
IGx1Yw== 27016
4oY= 27017
IEZpcmVmb3g= 27018
IE1vdmllcw== 27019
KV8= 27020
LmVuZHM= 27021
KHNoYXBl 27022
IGRlYWx0 27023
IHNhdmVz 27024
IGdsb3J5 27025
IG1lam9y 27026
IGJyZWF0aGluZw== 27027
IGVsbGVy 27028
Z2V0RGF0YQ== 27029
IGFuZ2xlcw== 27030
IHRvb2xiYXI= 27031
IHNwYWNpbmc= 27032
MDU5 27033
SVBT 27034
IGZsb29ycw== 27035
X0FDVElWRQ== 27036
IHNodWZmbGU= 27037
L3NoYXJlZA== 27038
IEVsZQ== 27039
ZWRpc2g= 27040
IHdlYmNhbQ== 27041
LmV4cGVjdA== 27042
aWxvYw== 27043
IEluY2x1ZGVz 27044
IHR3ZWV0ZWQ= 27045
IDop 27046
IEVzc2F5 27047
Rml4 27048
LWJldHdlZW4= 27049
X3dlYg== 27050
LmNvbnY= 27051
IHJhY2lzbQ== 27052
IHJlZmxlY3Rz 27053
dW1t 27054
0LjRgtC1 27055
X2Zvb3Rlcg== 27056
L2RvY3M= 27057
IFBvdXI= 27058
TmdNb2R1bGU= 27059
LmluaXRpYWxpemU= 27060
cGF0dGVybnM= 27061
X0lu 27062
IEFiYg== 27063
Kg0K 27064
IHNlbnRpbWVudA== 27065
YnVmZg== 27066
X2NvdW50cw== 27067
IHJldXNl 27068
Y2h1bms= 27069
IGltcG9zZWQ= 27070
UHJpbWFyeUtleQ== 27071
Rm9yZWdyb3VuZA== 27072
IGNvbnN1bWVk 27073
PyE= 27074
IGRpY2s= 27075
IGNocm9u 27076
IEZlcm4= 27077
IHJlc3BvbnNpdmU= 27078
OTU4 27079
IGluc2VjdA== 27080
aWN1bHR5 27081
IHJ3 27082
IGFsaWtl 27083
IHN1YnNldA== 27084
IENvb2tpZXM= 27085
IFBhaXI= 27086
IHRpZXI= 27087
SUZP 27088
YXZvdXI= 27089
IFFV 27090
LHNpemVvZg== 27091
IG1lcmdlZA== 27092
bXY= 27093
aXRvbA== 27094
eWxvbg== 27095
IGp1bXBlZA== 27096
LnJvbGU= 27097
ZW5zYWpl 27098
UnVsZXM= 27099
IGJyb3dzZQ== 27100
QW5pbWF0b3I= 27101
IHlvZ2E= 27102
IHZhcmlhbnRz 27103
IGNvdXJ0ZXN5 27104
dXJhbg== 27105
cGJz 27106
ZWxzZWlm 27107
QWx0 27108
IExhbmU= 27109
Q0xL 27110
SU1BUlk= 27111
X1BST1BFUlRZ 27112
77yQ 27113
IGNoYW4= 27114
IGdyYWR1YWxseQ== 27115
IHNoYWtl 27116
IGJsb25kZQ== 27117
Li4uIik7Cg== 27118
LXNleA== 27119
IGdhbWVwbGF5 27120
YWNpZXM= 27121
LnJlZnJlc2g= 27122
VVNC 27123
IFBsb3Q= 27124
V2Fz 27125
aXNzaXBwaQ== 27126
IFRlbnNvcg== 27127
IGNyeXB0b2N1cnJlbmN5 27128
IGRpZmZpY3VsdGllcw== 27129
RGVsZXRlZA== 27130
V2l0aG91dA== 27131
X2FwcGVuZA== 27132
X3Zlcg== 27133
OTY3 27134
IikpDQo= 27135
IGhvbmVzdGx5 27136
IHBpdm90 27137
IHRlbXBz 27138
X3Bz 27139
IFVubGlrZQ== 27140
Wzot 27141
VlM= 27142
X2luZg== 27143
IGp1bmlvcg== 27144
IGFuaW1hdGlvbnM= 27145
IGZpbGVwYXRo 27146
Pzwv 27147
W1w= 27148
IG9wZXJhdGVz 27149
X3JlZA== 27150
IEJvb3RzdHJhcA== 27151
bGVhZA== 27152
ZWZmZWN0 27153
wr0= 27154
IFN0ZXI= 27155
IEJ1Y2s= 27156
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 27157
IGRlcHV0eQ== 27158
VGhhbg== 27159
4bq/ 27160
T05FTlQ= 27161
IEhlYXQ= 27162
ZXRoZWxlc3M= 27163
XSl7Cg== 27164
IGtvc3Rlbmxvcw== 27165
KCk7Ly8= 27166
IGRlcGxveWVk 27167
Pnt7JA== 27168
IHVuaWNvZGU= 27169
cGxhY2Vz 27170
IENvZmZlZQ== 27171
LlNF 27172
IFBBUg== 27173
KHR4dA== 27174
Z2VicmE= 27175
IGZpcmVz 27176
TWFpbldpbmRvdw== 27177
bWVkaXVt 27178
ICjigJw= 27179
IGxn 27180
IGNtcA== 27181
L2Jhc2U= 27182
X2xheWVycw== 27183
X2VudHJpZXM= 27184
IGFkbWluaXN0ZXI= 27185
IFNVQ0g= 27186
QlA= 27187
IFNjb3R0aXNo 27188
CQ0KCQ0K 27189
Z3VhcmQ= 27190
IFN0cm9uZw== 27191
SW5zbg== 27192
IENBUA== 27193
YXN1cnk= 27194
IFNFRQ== 27195
Q2xvY2s= 27196
ZXJpZQ== 27197
XG1vZGVscw== 27198
ICQk 27199
IENhYg== 27200
IHd1cmRl 27201
IHNvbGRpZXI= 27202
IGNsaXBz 27203
IGFycmFuZ2VtZW50 27204
IFdvbmRlcg== 27205
IEhvcm4= 27206
IHNjYXJlZA== 27207
IGN1cmU= 27208
bWtkaXI= 27209
IGFsaWduZWQ= 27210
IFBpbms= 27211
IGxhbmRlZA== 27212
RGltZW5zaW9u 27213
U2Nyb2xsUGFuZQ== 27214
LmNoYXQ= 27215
LldpdGg= 27216
IFRyYWlu 27217
XS4K 27218
IHRoaXJ0eQ== 27219
IGR1cmFibGU= 27220
IGxk 27221
IGxhdGVpbml0 27222
IGNoYXJ0cw== 27223
IGluc3VsdA== 27224
LkZhdGFs 27225
X2N0 27226
IG1hc2tz 27227
Q0xVREVE 27228
UHJlc2lkZW50 27229
IGNvbG91cnM= 27230
Z21lbnRz 27231
LmF0dHJpYnV0ZXM= 27232
IEZsZXg= 27233
IENsb2Nr 27234
w61jdWw= 27235
aW1lbg== 27236
Sk8= 27237
IFJlZ2V4 27238
X0xJTks= 27239
IGNvdWNo 27240
IElOUFVU 27241
IGJlYXRpbmc= 27242
YnVzaW5lc3M= 27243
cHJlY2Vk 27244
LnVuaXQ= 27245
IEZlbA== 27246
TmV2ZXI= 27247
b3NwZWw= 27248
LnN0YXJ0c3dpdGg= 27249
IEVQQQ== 27250
Lm9ubHk= 27251
IHByZXZlbnRpbmc= 27252
eWVy 27253
Q29sdW1uTmFtZQ== 27254
IGVsZXZhdGlvbg== 27255
Zmx1 27256
aWN5Y2xl 27257
IG9mZmxpbmU= 27258
VG9vbGJhcg== 27259
IGNvbXBldGluZw== 27260
KV0u 27261
IG1vZw== 27262
IGlzVmFsaWQ= 27263
QXNr 27264
X2F2 27265
X2xhdA== 27266
QU5D 27267
IEpvaA== 27268
a2Vycw== 27269
IGd1YXJkcw== 27270
IGNoYWlucw== 27271
IFNpbXBsZURhdGVGb3JtYXQ= 27272
LnN0YXRpYw== 27273
IHZlc3NlbA== 27274
IG11ZA== 27275
IHN0YWJpbA== 27276
IHN0cmV0 27277
Z20= 27278
YW1hdGlvbg== 27279
55w= 27280
LXdpdGg= 27281
IHJvcw== 27282
X1BB 27283
IHJlc3VsdGFkbw== 27284
IGNvbmZpZGVudGlhbA== 27285
IFRva3lv 27286
CXVzaW5n 27287
IE1hdGhm 27288
b21iaW5l 27289
IEVTUE4= 27290
IGRlYWxlcnM= 27291
IGRpc21pc3NlZA== 27292
VFJZ 27293
IHRlZW5z 27294
cmVjb3Jkcw== 27295
IHdpbmdz 27296
Z2FsbGVyeQ== 27297
YWNjb3VudHM= 27298
X0xJQg== 27299
IGphY2tldA== 27300
IE5TT2JqZWN0 27301
IHN0b25lcw== 27302
IERlbGl2ZXJ5 27303
IERpZXQ= 27304
L3dhdGNo 27305
IHRvaWxldA== 27306
IEd1ZXN0 27307
LmRheQ== 27308
MDY3 27309
IGludHZhbA== 27310
MDg3 27311
VmlzaXQ= 27312
IGludmVzdGlnYXRlZA== 27313
IHBlbnRydQ== 27314
IFRoZWF0cmU= 27315
YW5kaWRhdGVz 27316
TGFuZw== 27317
IFNlcnY= 27318
IGNvbnRyb2xsZXJz 27319
IHNldFRpdGxl 27320
TlA= 27321
YW15 27322
ZmxhdA== 27323
KHVp 27324
MDY5 27325
X2RvY3VtZW50 27326
6IO9 27327
IENvaW4= 27328
IEFkYW1z 27329
cHRpYw== 27330
IHByb2R1Y3RpdmU= 27331
IGFjY29tcGxpc2hlZA== 27332
DQoNCg0KDQo= 27333
IGRlZmVycmVk 27334
aWVudGVz 27335
IHNpbmM= 27336
b2xhcnM= 27337
UmlnaHRhcnJvdw== 27338
IHZhcmlhdGlvbnM= 27339
KG9mZnNldA== 27340
OTU3 27341
LkxheW91dEluZmxhdGVy 27342
IHN1c3BlbmQ= 27343
IHByZXZlbnRpb24= 27344
X3ByaXZhdGU= 27345
X2pz 27346
4piF 27347
IHdpZWRlcg== 27348
YXR1bQ== 27349
kow= 27350
IGFwcGVhcmFuY2Vz 27351
LkRvY3VtZW50 27352
IHZhbGlkYXRlcw== 27353
Y2FsZW5kYXI= 27354
fSI7Cg== 27355
LmRlbW8= 27356
Y29udXQ= 27357
IGNvcnJlY3Rpb24= 27358
IERlYWw= 27359
IGJhdHRlcmllcw== 27360
LmR1cmF0aW9u 27361
LFw= 27362
X21hcmtlcg== 27363
bXVsdGk= 27364
IGhhbHQ= 27365
IGNtcw== 27366
IHNoYXBlZA== 27367
QnJv 27368
cmVkdWNl 27369
ICMjIyM= 27370
Q1RPUg== 27371
IEJlbmVm 27372
IGljb25pYw== 27373
IHBpYW5v 27374
IGVmZmVjdGl2ZW5lc3M= 27375
fC4K 27376
IGFqYXg= 27377
IHZvbHVtZXM= 27378
4Lih 27379
IGNsanM= 27380
ICAgICAgICAgICAgICAK 27381
YXRocw== 27382
cmFpdHM= 27383
5aSn 27384
0ZY= 27385
X211bHQ= 27386
IGZhc2NpbmF0aW5n 27387
QXZlcmFnZQ== 27388
IHByw6k= 27389
IENoYWlybWFu 27390
LmZpbmRFbGVtZW50 27391
X3Bpbg== 27392
IGNvbXBhcmluZw== 27393
IGRhcmtuZXNz 27394
LUZp 27395
LXNlcnZlcg== 27396
IHNlbGVjdGluZw== 27397
c3RlcmRhbQ== 27398
IFBhcnRz 27399
Rk9STUFUSU9O 27400
IG5vdGluZw== 27401
IHBpbGU= 27402
b2dz 27403
IHBhbGV0dGU= 27404
X2Rv 27405
aXRpemU= 27406
MDc5 27407
KCko 27408
IGRlZmluaW5n 27409
IHJlbWFpbmRlcg== 27410
VW5pdHM= 27411
X1RBU0s= 27412
SHR0cENsaWVudA== 27413
U29jaWFs 27414
IGZ1bmRyYQ== 27415
TlI= 27416
Y2hlc3Q= 27417
Q3VycmVuY3k= 27418
LmFkYXB0ZXI= 27419
IGRvcA== 27420
dW50aW5n 27421
QU5HVUFHRQ== 27422
Ikhl 27423
CWluZGV4 27424
X3BhY2thZ2U= 27425
Lkljb24= 27426
IHJlcGV0 27427
bWFzcw== 27428
PSIuJA== 27429
IFN1ZA== 27430
IGxpZA== 27431
cHJvdmluY2U= 27432
7Jw= 27433
R1BJTw== 27434
0Jo= 27435
IE15U1FM 27436
IGRvY3M= 27437
IEdB 27438
IGlwc3Vt 27439
S2VybmVs 27440
IGFjY2VwdHM= 27441
IGZpdHRpbmc= 27442
IGN1YW5kbw== 27443
IGR1cGxpYw== 27444
IEJyb3RoZXI= 27445
IEtsZQ== 27446
bnVtcw== 27447
IG1vcnBo 27448
ICMjIyMjIyMj 27449
IENHUG9pbnQ= 27450
PHVuc2lnbmVk 27451
5L6L 27452
IER1a2U= 27453
LnNldEJvdW5kcw== 27454
cXM= 27455
b3JpYw== 27456
amVy 27457
IHJlZ2FyZGVk 27458
SHR0cFJlcXVlc3Q= 27459
IGJvbmRz 27460
IHRob3JvdWdobHk= 27461
ZW5jZW50 27462
IGhpZ2hsaWdodGVk 27463
IGFjcmVz 27464
IHdvcmtwbGFjZQ== 27465
IEx1eA== 27466
IHF1b3Q= 27467
OTg2 27468
LmluZmxhdGU= 27469
IGRvY3VtZW50ZWQ= 27470
IGFkZGljdGlvbg== 27471
IG11dGF0aW9u 27472
LmNpdHk= 27473
IGJvdHRsZXM= 27474
IFJlcG9zaXRvcnk= 27475
b25u 27476
ZXJybm8= 27477
QVJJQUJMRQ== 27478
5bqm 27479
X0JFR0lO 27480
Z2xhcw== 27481
J30pCg== 27482
IE1hc3NhZ2U= 27483
IFdoaXQ= 27484
cmVnZXg= 27485
V0E= 27486
IG91dGxldA== 27487
LWhlYWQ= 27488
IGV4cGlyZWQ= 27489
IFRoYWk= 27490
L2luY2x1ZGU= 27491
Z3JhZGllbnQ= 27492
c2NhbmY= 27493
IHNlYW0= 27494
d2Fs 27495
CWJ1Zg== 27496
QmVhcmVy 27497
IHByZWNpb3Vz 27498
aWZhY3Rz 27499
Y29vcmQ= 27500
IGV4cGxvcmF0aW9u 27501
LmdldFk= 27502
KGhhbmRsZQ== 27503
VG9waWM= 27504
IFZlbnQ= 27505
cmhz 27506
LS0tLS0tCg== 27507
IEJyaWdodA== 27508
IGd1aWxk 27509
bW90aGVy 27510
c3Rvcm0= 27511
IG11bmljaXBhbA== 27512
IGluaw== 27513
LlRZUEU= 27514
d2w= 27515
Li4uPC8= 27516
X0RFVg== 27517
PSIuLw== 27518
X2Jvb2s= 27519
dGh5 27520
aXR6ZXJsYW5k 27521
b3BsZXM= 27522
dHJhY3Rpb24= 27523
IENhbWVyb24= 27524
IEFuZHJl 27525
LnJlc3VsdHM= 27526
IGNocm9tZQ== 27527
IHNlY3VyZWQ= 27528
IHN1cmZhY2Vz 27529
KTw= 27530
IHRvYmFjY28= 27531
CXNwcmludGY= 27532
IGVzY2Fs 27533
IHN0ZGVycg== 27534
IE1lbGJvdXJuZQ== 27535
IGRpc3RyaWN0cw== 27536
IG1hdHQ= 27537
b2hlbg== 27538
IGRhdGFHcmlkVmlld0NlbGxTdHlsZQ== 27539
KE1vZGVs 27540
IHNlbnNpdGl2aXR5 27541
S0E= 27542
dHJhbnNwb3J0 27543
LmdldERhdGU= 27544
IHN1YnRsZQ== 27545
VUdJTg== 27546
Lm1vdXNl 27547
IGFsdGVybmF0aXZlcw== 27548
IGVsbGU= 27549
Y29yYXRpb24= 27550
cmVhdGlvbg== 27551
5ps= 27552
X05PUk1BTA== 27553
RGlzcGxheU5hbWU= 27554
IGZhbmN5 27555
SVNFRA== 27556
TU9E 27557
LlJlYWRPbmx5 27558
IFVi 27559
IEN1 27560
aWNvbA== 27561
IE5lbHNvbg== 27562
IENPUg== 27563
YW56YQ== 27564
IFNwYXJr 27565
ICJcXA== 27566
LS0KCg== 27567
d29vY29tbWVyY2U= 27568
IHJlbWVtYmVyZWQ= 27569
dmVyaXR5 27570
IEV4dGVuc2lvbg== 27571
IFBE 27572
IHNlYXJjaGVz 27573
LnNv 27574
IEZvb3Rlcg== 27575
ID0n 27576
IFdBUk5JTkc= 27577
LWxv 27578
CXRhYmxl 27579
IGRyYXdlcg== 27580
cGljdHVyZQ== 27581
IEZhbnRhc3k= 27582
c3Rvcnk= 27583
IG3Dqm1l 27584
IwoK 27585
X3NsaWNl 27586
b2x0YWdl 27587
SGFy 27588
L3k= 27589
IEVS 27590
ZGll 27591
IFBPUw== 27592
LmFjdGlvbnM= 27593
KE1haW4= 27594
ZXdhcnQ= 27595
YXBldXQ= 27596
IFNURQ== 27597
aWRkaW5n 27598
LnJlYWRMaW5l 27599
IHNlYXJjaGVk 27600
V2Vk 27601
LmZpZ3VyZQ== 27602
dWdodGVycw== 27603
KCkuX18= 27604
IG9yYml0 27605
c2hpcHBpbmc= 27606
IGZyaWVuZHNoaXA= 27607
IFNoaWZ0 27608
LW9y 27609
cXVv 27610
V0hFUkU= 27611
IEVzcA== 27612
LmZvcndhcmQ= 27613
b2ZmaWNl 27614
IGnDpw== 27615
IENoZWxzZWE= 27616
SXRlbVNlbGVjdGVk 27617
YWNoZXJz 27618
ZGVsZXRlZA== 27619
cm91cw== 27620
ICItIg== 27621
IEdyYW4= 27622
IPCfmA== 27623
LXBvd2Vy 27624
ZXR0YQ== 27625
IHJlbWluZGVy 27626
ZW5zb3Jz 27627
IEFsbG93 27628
xJlk 27629
X3RlYW0= 27630
IGNyb3du 27631
dGlja2V0 27632
IGNvbGxlY3Rpb25WaWV3 27633
bGFjZQ== 27634
IGZpeGVz 27635
IEh1Yg== 27636
Y2F0YWxvZw== 27637
IElkZW50aXR5 27638
IGV4Y2Vzc2l2ZQ== 27639
IE5hdmlnYXRvcg== 27640
X0JS 27641
LXBsYXk= 27642
IENhbXBhaWdu 27643
ICAgICAgICAgICAgICAgCg== 27644
YXNpdmU= 27645
IHdj 27646
IEJlaWppbmc= 27647
L3d3dw== 27648
IG1ha2V1cA== 27649
IGRpc3RhbmNlcw== 27650
IHNhdGlzZnk= 27651
Q09ORA== 27652
IHdvdW5k 27653
KCld 27654
IHZpb2xhdGlvbnM= 27655
IHN0YXlz 27656
LyM= 27657
aWxpbmU= 27658
XEV4Y2VwdGlvbg== 27659
IE1vdGlvbg== 27660
IGhlYWw= 27661
X3BsYW4= 27662
cmFzZXM= 27663
KG1haW4= 27664
QXBwbGU= 27665
IGNvbXBsZXRpbmc= 27666
IGRldGVybWluZXM= 27667
U2Nhbg== 27668
IHN0ZWFs 27669
IFNvYw== 27670
QW5hbHlzaXM= 27671
IGZhdm9yaXRlcw== 27672
IGNhbXBv 27673
b25lcg== 27674
IEZsaWdodA== 27675
Li4uCgoKCg== 27676
KSkpKSk7Cg== 27677
LWNvdW50 27678
IHB3 27679
QXNTdHJpbmc= 27680
IHNleHVhbGx5 27681
Rmlyc3ROYW1l 27682
IEVzY29ydA== 27683
Y2FsYw== 27684
IFdpa2lwZWRpYQ== 27685
IGRvY2tlcg== 27686
IFN3ZWV0 27687
J2lk 27688
SW50bw== 27689
IEh1bnQ= 27690
LmVxdWFsVG8= 27691
IGxhYm9yYXRvcnk= 27692
IEJVU0lORVNT 27693
RmlsZURpYWxvZw== 27694
VHJlZU5vZGU= 27695
LkVuYw== 27696
IE1heGltdW0= 27697
IG1vdGhlcnM= 27698
5rU= 27699
IGZyYWN0 27700
LnN0YXJ0c1dpdGg= 27701
IGhhcmRjb3Jl 27702
Lm9i 27703
5aeL 27704
ID48Lw== 27705
X3Jv 27706
KCgq 27707
Pz8/Pw== 27708
X3ZlcnRleA== 27709
a2VpdA== 27710
IEhhbGxvd2Vlbg== 27711
VEk= 27712
IFZh 27713
X2Nhcg== 27714
PSJ7eyQ= 27715
IHJhbmRvbWx5 27716
0LDQvdC40LU= 27717
IHNob2NrZWQ= 27718
IFBva8OpbW9u 27719
c2lnbmFs 27720
IFNESw== 27721
bWlkZGxld2FyZQ== 27722
IHRyZWF0aW5n 27723
IGJ1cm5lZA== 27724
RGVwYXJ0bWVudA== 27725
IFNwZWN0 27726
IGNsaWVudGU= 27727
IFJlZGRpdA== 27728
X2F2Zw== 27729
IGluc3RhbGxpbmc= 27730
X2FscGhh 27731
LGRhdGE= 27732
IHNldElk 27733
IExpc3RWaWV3 27734
KHByb3BlcnR5 27735
IGNyb3NzaW5n 27736
IE9iag== 27737
IFdhcmQ= 27738
IFJlZGlyZWN0VG8= 27739
IFByZXNlbnQ= 27740
IGRyYXdz 27741
Y2hlZHVsZWQ= 27742
IGxlZ2lzbGF0aXZl 27743
IHR3aXN0 27744
IFN0cmE= 27745
IEFGUA== 27746
IENoYXA= 27747
LXBy 27748
OkNHUmVjdA== 27749
IGNlcw== 27750
Um91dGVz 27751
bm9m 27752
IHZpc2E= 27753
IFRDUA== 27754
IEVWRU4= 27755
aXZpYWw= 27756
IExldHRlcg== 27757
UkFZ 27758
IGltcGxvZGU= 27759
LmVx 27760
PScr 27761
IG1vdGl2YXRlZA== 27762
LnZpc2libGU= 27763
LnNob3J0 27764
Pm1hbnVhbA== 27765
IFRlY2huaWNhbA== 27766
IGNvcnBvcmF0aW9u 27767
IEhX 27768
YW5rYQ== 27769
VEFJTA== 27770
aXN0YXM= 27771
IHBlcmZvcm1z 27772
IEJlaGF2aW9y 27773
LkZvcg== 27774
X09SREVS 27775
IEtpY2s= 27776
IGNhbGxiYWNrcw== 27777
X2Ry 27778
dWVnbw== 27779
aHVi 27780
dWZmaWNpZW50 27781
c2t5 27782
IGJw 27783
aHRhYmxl 27784
IE9OTFk= 27785
IEFVVEhPUlM= 27786
LkFyZ3VtZW50 27787
In07Cg== 27788
IFRodW5kZXI= 27789
IEtvbQ== 27790
LlNob3VsZA== 27791
QVVUSA== 27792
YWh1 27793
X3BheW1lbnQ= 27794
IHN0YXJ0ZXI= 27795
7ISc 27796
7Jqp 27797
QmxvZw== 27798
LnBhdGNo 27799
IGdvdmVybmVk 27800
YXNzeQ== 27801
LWZvdW5k 27802
IHRoZWF0ZXI= 27803
IEZvbnRXZWlnaHQ= 27804
IEJhdG1hbg== 27805
Iklm 27806
LlJhbmRvbQ== 27807
X2RlbHRh 27808
IENF 27809
QXV0aGVudGljYXRlZA== 27810
IGRyb25l 27811
IGNvdXM= 27812
cmFkaXVz 27813
TWVy 27814
KE5vbmU= 27815
IE5K 27816
X2hlYWRlcnM= 27817
IGFtZXI= 27818
cHl0ZXN0 27819
IEFjdGlvbnM= 27820
CQkJICAgIA== 27821
IGV0dA== 27822
IGhvbHk= 27823
IHVuY29tZm9ydA== 27824
IE5pbg== 27825
IERlY2ltYWw= 27826
IE1lc3NhZ2Vz 27827
LnNlbmRlcg== 27828
XV0pCg== 27829
IGVtYnJhY2U= 27830
VGhvdWdo 27831
L3Nw 27832
IGN1bHR1cmVz 27833
IGhpZ2h3YXk= 27834
dGFy 27835
LmZhaWw= 27836
X2hpZGRlbg== 27837
IGNvbXBvbmVudERpZE1vdW50 27838
IFdyaWdodA== 27839
IGphZw== 27840
X2ls 27841
Li4vLi4vLi4v 27842
aWd1 27843
Rm9vZA== 27844
IGFjZQ== 27845
IGHDsW9z 27846
VVNE 27847
IG11dHVhbA== 27848
TG9naWM= 27849
IHRlbXBsZQ== 27850
IGJyaWVmbHk= 27851
IFRyaXA= 27852
Y2xhc3NtZXRob2Q= 27853
ZGVmYXVsdHM= 27854
IGNodW5rcw== 27855
LCwsLA== 27856
IFJlYXNvbg== 27857
JGlk 27858
LXVwcw== 27859
IGRhbW4= 27860
IHRydWNrcw== 27861
IHVubGltaXRlZA== 27862
IHNjdWxwdA== 27863
IENhcmRz 27864
IGF1dG9y 27865
IFRlc3Rpbmc= 27866
IGRpZXNl 27867
c2hvcHM= 27868
57Q= 27869
KHBheWxvYWQ= 27870
IFBBVEg= 27871
IE1lbW9yaWFs 27872
IHJpZGljdWxvdXM= 27873
ZWdyZWU= 27874
LXdpbm5pbmc= 27875
IHJlaGFi 27876
IHNvcGhpc3RpY2F0ZWQ= 27877
d3BkYg== 27878
CXBhdGg= 27879
ISI7Cg== 27880
X1NZUw== 27881
LnNwZWVk 27882
IHNvYXA= 27883
c3VmZml4 27884
V3JhcA== 27885
IGVuaGFuY2VtZW50 27886
w4k= 27887
w7pi 27888
IHBsYXlsaXN0 27889
IG1peGluZw== 27890
YW50aWRhZA== 27891
PSIiOwo= 27892
IFJldmlzaW9u 27893
IEJlYXQ= 27894
LmluYw== 27895
LXdheQ== 27896
ZW5jaWFz 27897
dWxlcnM= 27898
Q2F0 27899
aWRlbA== 27900
IFNoaXA= 27901
LnNldENvbG9y 27902
IHRocmVhdGVuaW5n 27903
Lm1vZHVsZXM= 27904
IGFmdGVyd2FyZHM= 27905
IERhc2hib2FyZA== 27906
CiAK 27907
U2lnbmFs 27908
IHByaW1lcg== 27909
b3JuZXlz 27910
aWNpYXJ5 27911
IGxpZ25l 27912
X3ByZWRpY3Q= 27913
IGFlc3Q= 27914
X2h0dHBz 27915
Pjo= 27916
IExleA== 27917
IHJlbmNvbnRyZXM= 27918
ZWdyYWw= 27919
c2NhbGE= 27920
X2ZhbWlseQ== 27921
w59lbg== 27922
X3N5bQ== 27923
IHVuY2VydGFpbnR5 27924
IFZBTFVF 27925
IH07DQoNCg== 27926
IGJyb2FkZXI= 27927
IGhvcnNlcw== 27928
44Gd 27929
IEthbA== 27930
b2Jh 27931
X0lORVQ= 27932
IEtpbGw= 27933
anF1ZXJ5 27934
YW1pbmF0aW9u 27935
W0Ai 27936
IG11ag== 27937
IyMjCg== 27938
Rmlyc3RPckRlZmF1bHQ= 27939
dGhlblJldHVybg== 27940
Q2hl 27941
L2Zvb3Rlcg== 27942
IHBhcmtz 27943
YXNqZQ== 27944
IEd1bGY= 27945
IG1vZGVzdA== 27946
LkluaXQ= 27947
77yfCgo= 27948
IHByb3NwZWN0cw== 27949
IHN2Zw== 27950
IOWP 27951
LkRpYWxvZw== 27952
X05FVA== 27953
ICgoJA== 27954
IGVr 27955
IFdhcm5pbmc= 27956
IE1L 27957
PExN 27958
ICcNCg== 27959
aWVt 27960
aGV0aWM= 27961
IGl4 27962
dGhpbms= 27963
LXNoYWRvdw== 27964
IEVsZA== 27965
IE5ldmFkYQ== 27966
IExlYWY= 27967
IEdST1VQ 27968
IHByb21v 27969
ZW50aW5l 27970
CU1hcA== 27971
IE1vZGVscw== 27972
IEtyaXN0 27973
X2tlcm5lbA== 27974
LW1hZGU= 27975
IGNlcnI= 27976
QXNzZXRz 27977
ZWxsYXI= 27978
IGludm9rZWQ= 27979
LnZ1ZQ== 27980
IGN1bHRpdg== 27981
Q2xvc2Vk 27982
IGdlbmVyYXRlcw== 27983
ZmZmZmZm 27984
dGhlc2l6ZQ== 27985
c3FydA== 27986
IENhc3RsZQ== 27987
LmNhcg== 27988
IGtlZW4= 27989
dW5kYQ== 27990
IENyb3c= 27991
IFNpbmdo 27992
eXRob24= 27993
IGJlYW5z 27994
bGFyZw== 27995
5paH5Lu2 27996
QXdlc29tZQ== 27997
dW5jYXRl 27998
UGF0aHM= 27999
b2pp 28000
KGN1cnI= 28001
Q09ORFM= 28002
IG1pbQ== 28003
IHNob3VsZGVycw== 28004
SGFyZA== 28005
YXN0ZXM= 28006
0LDQtdGC 28007
IGNvbnZpbmNl 28008
ZGVjZXNz 28009
bWFkZQ== 28010
IENNRA== 28011
Lklt 28012
IGNoYW9z 28013
ZW5zaXZlbHk= 28014
IGNvb2xpbmc= 28015
IGJ1cmllZA== 28016
KCdA 28017
X1Nl 28018
CQkJCQkJCQkJCQkJCQkJCQ== 28019
LmNvbXBhbnk= 28020
LnN1Ym1pdA== 28021
cGhhbnQ= 28022
IGJvb3RzdHJhcA== 28023
X2hlbHA= 28024
4Kc= 28025
LmR1bXA= 28026
IGRpZmVy 28027
X21hcHBpbmc= 28028
IGNpcmN1bGFy 28029
IGVzY29ydHM= 28030
IGJlcmU= 28031
IGdyYWR1 28032
IExlZ2VuZA== 28033
aW1lZGlh 28034
IEJhcmNlbG9uYQ== 28035
IGJlZHM= 28036
5Yiw 28037
44CK 28038
X3ZvbHVtZQ== 28039
IHRyZW1lbmRvdXM= 28040
IHNjYWxpbmc= 28041
IHBpbnM= 28042
ZW5hcw== 28043
dHlwZXBhcmFt 28044
RGFzaGJvYXJk 28045
cmVuZGVyZXI= 28046
IHNwaQ== 28047
ICYk 28048
IFNraW4= 28049
YWxtYXJ0 28050
IGhvY2tleQ== 28051
ICciLiQ= 28052
IGVycm5v 28053
IGJldw== 28054
Rm9sbG93aW5n 28055
Lk1vZHVsZQ== 28056
ZXJhYmxl 28057
IE1pbGl0YXJ5 28058
IFJpbw== 28059
X2F2YWlsYWJsZQ== 28060
IFN1cmZhY2U= 28061
IHN0YWI= 28062
SUZJRVI= 28063
IExJU1Q= 28064
IGRhc2hib2FyZA== 28065
IGNsdXN0ZXJz 28066
LnBsdWdpbg== 28067
IGpvdQ== 28068
IERlY29y 28069
Rm91cg== 28070
IGRlbGxl 28071
KioqKioqLwo= 28072
aWF6 28073
aW5kZQ== 28074
Y2hpbmc= 28075
IGdldEl0ZW0= 28076
LkFkZHJlc3M= 28077
bWVudGVk 28078
QW1lcmlj 28079
UGxhaW4= 28080
IHVzYg== 28081
IFByYWN0aWNl 28082
X21lbnQ= 28083
LmJsdWU= 28084
SGludA== 28085
0YDQsNCy 28086
IGNvbm5lY3Rvcg== 28087
IGluaGVyaXRlZA== 28088
0LjQsg== 28089
IGludGVydmFscw== 28090
IGNlcmU= 28091
IHVk 28092
IGluY29u 28093
LkV4aXN0cw== 28094
IE1pYw== 28095
Rks= 28096
KGNhcmQ= 28097
LlNldHRpbmdz 28098
IGV4aGliaXRpb24= 28099
IG9uUHJlc3NlZA== 28100
IHJlc3RvcmVk 28101
ZW5ndQ== 28102
LmRlZg== 28103
IHJlY3Y= 28104
LiIpOw0K 28105
ZW5jb2Rlcg== 28106
YXRoZXJpbmU= 28107
KGRlc3Q= 28108
YXplZA== 28109
I2VuZHJlZ2lvbg== 28110
c2VtYmw= 28111
LE0= 28112
b2J5 28113
INC/0LXRgA== 28114
LkNhbGw= 28115
IGF0dGVuZGFuY2U= 28116
LWJvcmRlcg== 28117
IGFkZHJlc3Npbmc= 28118
w6pu 28119
IExldg== 28120
IGJhc2g= 28121
YmVuY2g= 28122
Q3JlZGVudGlhbHM= 28123
U3BhY2luZw== 28124
KG9m 28125
X1JFU0VU 28126
aWd1b3Vz 28127
IGNydWVs 28128
IGNyb3NzZWQ= 28129
IGxldXI= 28130
IEdvbGY= 28131
b3JyZWN0 28132
IHBhY2tldHM= 28133
IERhdGFTZXQ= 28134
IHBhcnRseQ== 28135
U0VRVUVOVElBTA== 28136
IGluZGljYXRpb24= 28137
IFNhbHQ= 28138
YWNpYQ== 28139
ICopOwo= 28140
CWluZm8= 28141
IFZpZXdCYWc= 28142
b256 28143
IGVkaXRvcmlhbA== 28144
IEFyZW5h 28145
IHNpcg== 28146
X1N0YXRpYw== 28147
KHNvY2tldA== 28148
c3U= 28149
Y2hvb3Nl 28150
Lm1vbnRo 28151
Lk15 28152
MDk2 28153
w6lyaQ== 28154
O2ZvbnQ= 28155
ZG9lcw== 28156
IGNvbnZlcnRlcg== 28157
IHNhbHY= 28158
IGxy 28159
IGluZmx1ZW5jZWQ= 28160
KGZlYXR1cmU= 28161
IFF1ZWVucw== 28162
bGV0dA== 28163
X01PTg== 28164
JmFtcA== 28165
VG91Y2hhYmxlT3BhY2l0eQ== 28166
T0ZG 28167
IG1ldGFib2w= 28168
KGl0ZXI= 28169
IHZpdGFtaW4= 28170
IElORElSRUNU 28171
YXV0b20= 28172
X3B1YmxpYw== 28173
IGFkanVzdG1lbnQ= 28174
IHNwZWNpYWxpemVk 28175
d2luZG93cw== 28176
LmFkZEFsbA== 28177
IGFjY29yZGluZ2x5 28178
IEpPcHRpb25QYW5l 28179
IGNlbGxzcGFjaW5n 28180
IHF1YWQ= 28181
IGNyZWVw 28182
IG91dGxldHM= 28183
fWApCg== 28184
IHByaWVzdA== 28185
X1RIUkVBRA== 28186
IE1hcng= 28187
IEJ5VmFs 28188
IGN1YWw= 28189
6Z2i 28190
IHRlbXBvcmFyaWx5 28191
QW5u 28192
a2VsZXRvbg== 28193
5aU= 28194
IExPQw== 28195
YXVlcg== 28196
ZGVyaXZl 28197
IGJlaGF2aW9ycw== 28198
YXNlbmFtZQ== 28199
IENlbnR1cnk= 28200
IGhvcnJpYmxl 28201
TUVTUw== 28202
X0xpc3Q= 28203
d2Vp 28204
UGF0 28205
IENob2ljZQ== 28206
X0ZST00= 28207
CWxpbmU= 28208
Lmludm9rZQ== 28209
LkJvdHRvbQ== 28210
IG5vd2hlcmU= 28211
LiIKCgoK 28212
X2V4cG9ydA== 28213
IHN0cnVnZ2xlZA== 28214
LkFwcGVhcmFuY2U= 28215
IEpCdXR0b24= 28216
IEplcmVteQ== 28217
KFtb 28218
IGtpY2tlZA== 28219
bWFyc2hhbA== 28220
c3RhZmY= 28221
ZXNpdHk= 28222
IHF1aXo= 28223
X2VmZmVjdA== 28224
IH0pKTsKCg== 28225
bWVs 28226
YmFubmVy 28227
IFBJTg== 28228
IGludmVudGlvbg== 28229
IGNvbnNvbGlk 28230
IG9wcw== 28231
IEJldHdlZW4= 28232
amFjaw== 28233
ZXJuYXRpb25hbA== 28234
IHNhY3JpZmljZQ== 28235
YWdhdGlvbg== 28236
IEpveQ== 28237
IGFtZW5kbWVudA== 28238
IFNvbGQ= 28239
IHByaXNvbmVycw== 28240
0LDQvdC90Ys= 28241
RG9jdW1lbnRz 28242
KV0pCg== 28243
dXN0ZWQ= 28244
IExpbmVhckxheW91dA== 28245
b3Nv 28246
X0VN 28247
LnNlbGY= 28248
Lk1pZGRsZQ== 28249
KS8v 28250
IFwn 28251
IGZ1Y2tlZA== 28252
IE11cnJheQ== 28253
IHByb2ZvdW5k 28254
X0VMRU1FTlQ= 28255
dWx0YQ== 28256
aWxlcnM= 28257
cG9ydGZvbGlv 28258
SnVuZQ== 28259
dGNw 28260
bW9kaWZpZWQ= 28261
IFRyYWNl 28262
IEtlbA== 28263
YWx5emVy 28264
KT0+ 28265
IFJlcGFpcg== 28266
X0JF 28267
QnJhbmQ= 28268
dWFydA== 28269
cHJldmlldw== 28270
IGluaXRpYXRpdmVz 28271
cnVubmluZw== 28272
YmFuZw== 28273
CXVwZGF0ZQ== 28274
IENvYWNo 28275
UmljaA== 28276
IHlvdXR1YmU= 28277
IHJpdHVhbA== 28278
YXBwYQ== 28279
IFJvYmluc29u 28280
cHJlY2lzaW9u 28281
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw== 28282
PVtdCg== 28283
IGNlbGVicmF0ZWQ= 28284
T1RP 28285
IGluY2x1c2lvbg== 28286
SlA= 28287
JzsNCg0K 28288
IG5vdGFibGU= 28289
KF8u 28290
TWFuYWdlZA== 28291
IGd1aWRlcw== 28292
Jm5ic3A= 28293
YXRlZFJvdXRl 28294
IEFkanVzdA== 28295
IGNvbG9yZWQ= 28296
X3Njb3Jlcw== 28297
IFRlc2xh 28298
X3Byb2dyZXNz 28299
Lmluc3Q= 28300
Wydf 28301
LmZsYWdz 28302
IGZjbG9zZQ== 28303
X09QRVI= 28304
xbx5 28305
X25vdGU= 28306
IHRyYW5zZ2VuZGVy 28307
5ZU= 28308
UklQVA== 28309
IGFic2VudA== 28310
IGFtZXQ= 28311
IG9wZXJhbmQ= 28312
66k= 28313
IGhvb2Q= 28314
dG9Mb3dlckNhc2U= 28315
YXZv 28316
IENpcmN1aXQ= 28317
IExpbmQ= 28318
LS19fQo= 28319
PW0= 28320
IHN1cHByZXNz 28321
IE1BUA== 28322
aWFuZw== 28323
LWFkbWlu 28324
IHNpZGViYXI= 28325
IEJ1 28326
IEhleA== 28327
LEY= 28328
IFNpZ25hbA== 28329
IHRyYW5zcGFyZW5jeQ== 28330
IEZlZGVyYXRpb24= 28331
L1Y= 28332
UmVx 28333
IHB1bHNl 28334
IHRlbmRz 28335
TnVtYmVycw== 28336
JSc= 28337
IGRlcG9ydA== 28338
ZGF0YXM= 28339
X1VJTlQ= 28340
X3RyYQ== 28341
b2tv 28342
ICI/ 28343
Y29tcGV0 28344
c29sZXRl 28345
dW5kcnk= 28346
IG92ZXJsYXA= 28347
fWAsCg== 28348
Lmx5 28349
X3N1bW1hcnk= 28350
IExvc3Q= 28351
LkNlbnRlcg== 28352
IGRpc2FiaWxpdHk= 28353
LlNlcmlhbGl6YXRpb24= 28354
IGdlb20= 28355
ID86 28356
IFdv 28357
IHNoaXBwZWQ= 28358
guaVsA== 28359
IHVnbHk= 28360
IGV4Y2l0ZW1lbnQ= 28361
IGV4dGVyaW9y 28362
IGNoZWNrb3V0 28363
IGt1cg== 28364
LEQ= 28365
IEFsYXNrYQ== 28366
IHN5bnRoZXRpYw== 28367
IEJ1ZGdldA== 28368
IFN1YnNjcmliZQ== 28369
ICYK 28370
yJlp 28371
IFl1 28372
CXF1ZXJ5 28373
fS4K 28374
IHRyYWdlZA== 28375
YXNzZW4= 28376
IGFjY29tbW9kYXRpb24= 28377
IHBoeXNpY2lhbg== 28378
IHJlbmFtZWQ= 28379
IHRpZGFr 28380
esSF 28381
IG1pbnVz 28382
bnljaA== 28383
MDk3 28384
X0VYQ0VQVElPTg== 28385
dGhyZWFkcw== 28386
IHRpcmU= 28387
X2NyZWF0ZWQ= 28388
ZW5zdXJl 28389
IHdvcnRoeQ== 28390
IGV4Y3VzZQ== 28391
IGNsb3Ro 28392
LnBhcmVudE5vZGU= 28393
L3BsYXRmb3Jt 28394
IFVGQw== 28395
IEd0aw== 28396
dW5ueQ== 28397
IGdpYnQ= 28398
a2VsZXk= 28399
aHVt 28400
KHR4 28401
CWRldg== 28402
IG91dGZpdA== 28403
ZG9vcnM= 28404
IGZvbg== 28405
aWN1dA== 28406
dm9sYXRpbGU= 28407
IGhvbW9zZXg= 28408
TWF4aW11bQ== 28409
IGV4cGVuZA== 28410
IH0pOwoKCg== 28411
RXE= 28412
b25kZXJz 28413
ZGVwYXJ0bWVudA== 28414
IFBoeXNpY3M= 28415
In0pOwo= 28416
IHBhcmFk 28417
LlN0cg== 28418
IHNlbGU= 28419
SUZJRUQ= 28420
IGRlbGl2ZXJz 28421
aXZhbg== 28422
IHJlc3BvbnNpYmlsaXRpZXM= 28423
IGFkdm9jYXRlcw== 28424
6LU= 28425
IFJJRA== 28426
LnBhcmFtZXRlcnM= 28427
TWV0cmljcw== 28428
cm9uaWNz 28429
IFVJVGFibGVWaWV3Q2VsbA== 28430
QWJzb2x1dGU= 28431
aXBzZQ== 28432
eWx1bQ== 28433
TUxFbGVtZW50 28434
X1ZBTElE 28435
PHRpdGxl 28436
RGxn 28437
cGFjZXM= 28438
IHN5bmRyb21l 28439
YmVhbnM= 28440
X2RhdGFiYXNl 28441
b3ppbGxh 28442
IE1lZw== 28443
REJH 28444
IGx1Yg== 28445
QmFnQ29uc3RyYWludHM= 28446
YWJhZA== 28447
IHByb2plY3RlZA== 28448
X0JZVEU= 28449
LlNpemVG 28450
c3RyZWV0 28451
CgoKCgoKCgoKCg== 28452
IExPU1M= 28453
IGRpcmVjdG9ycw== 28454
L25ld3M= 28455
IG51cnNpbmc= 28456
IERvbmU= 28457
LkhUVFA= 28458
ZGlzY291bnQ= 28459
IFJvdA== 28460
VG9NYW55 28461
IGVuYWJsaW5n 28462
IGF1c3Np 28463
b3N0YQ== 28464
ICAgICAgICAgICAgICAgIA0K 28465
6L29 28466
IGhlbGljb3B0 28467
IEluc2lkZQ== 28468
5L+h5oGv 28469
aXNwZXI= 28470
IEFsbGFo 28471
QVJDSEFS 28472
IHJvbGxz 28473
Q29tcGFyZQ== 28474
WFA= 28475
SW5kZXhPZg== 28476
U1VN 28477
IGFzc3VyZWQ= 28478
IFBoeXNpY2Fs 28479
RW5kcG9pbnQ= 28480
Lkdsb2JhbA== 28481
LmRldGFpbA== 28482
IHRoZWZ0 28483
Lmp1cGl0ZXI= 28484
IGh1bW9y 28485
LlJlbmRlcg== 28486
QWxleA== 28487
LmNhcA== 28488
IGJ1ZmZlcnM= 28489
IGRpc3Bvc2U= 28490
dGlvbg== 28491
LnByZXNlbnQ= 28492
emVs 28493
LFA= 28494
IGRlc3BlcmF0ZQ== 28495
LmdldENvbHVtbg== 28496
IHR3aW4= 28497
7JY= 28498
LmNhbg== 28499
IGZsZWU= 28500
IElyYW5pYW4= 28501
IHN0aWNreQ== 28502
IFVUQw== 28503
TFQ= 28504
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v 28505
IGxpY2Vuc2luZw== 28506
X1BPSU5U 28507
IE1hcHM= 28508
IGxvbA== 28509
PW1vZGVscw== 28510
LXRhYg== 28511
IE5hc2g= 28512
X2xvZ2dlcg== 28513
dG9yY2g= 28514
IENPTlNFUVVFTlRJQUw= 28515
Tm90RW1wdHk= 28516
L3JlYWN0 28517
IHBm 28518
IGFzc2VydGlvbg== 28519
IHN1YnNlcXVlbnRseQ== 28520
X2Nhbg== 28521
IHBhbmRlbWlj 28522
b2d1ZQ== 28523
IisK 28524
X2VudA== 28525
X1BhcmFt 28526
LgoKCgoKCgoK 28527
UmVzZWFyY2g= 28528
Q2FwdHVyZQ== 28529
IGJlbG92ZWQ= 28530
ZGVt 28531
IGV4dHJhY3RlZA== 28532
IGZpZ2h0cw== 28533
RVJD 28534
KGF1dGg= 28535
cG9zaXRpb25z 28536
IHJldmVyc2Vk 28537
KHN0YWNr 28538
IF8p 28539
dXRvZmY= 28540
X2Zsb3c= 28541
54K5 28542
KEdhbWU= 28543
IGV4Y2x1ZGVk 28544
IENTVg== 28545
Y2c= 28546
IFRpdGFu 28547
cGF1c2U= 28548
IGNlcmNh 28549
IGR1bXBzdGVy 28550
TGVzcw== 28551
IGtvdGxpbng= 28552
YXN0ZXJ4bWw= 28553
IHBvaW50ZXJz 28554
IGZsb3dz 28555
IFR1bg== 28556
IE1haW5BY3Rpdml0eQ== 28557
IGRpc2NyZXQ= 28558
IGNvbWJpbmF0aW9ucw== 28559
dmlzaXQ= 28560
X2JpbmQ= 28561
b290aW5n 28562
ZGF0ZXI= 28563
X2xvb2t1cA== 28564
Lm5pbw== 28565
IHN3ZWF0 28566
IFJk 28567
IHNjaWVudGlzdA== 28568
IFBpeGVs 28569
QE5nTW9kdWxl 28570
UGxheWluZw== 28571
IHVuZm9sZA== 28572
VHJhbnNsYXRl 28573
IExhd3JlbmNl 28574
IEZJWE1F 28575
QmlsbA== 28576
IFJJR0hU 28577
IHdoZXJldmVy 28578
IG9vaw== 28579
dmlkZW5jZQ== 28580
IF1dOw== 28581
IFNraWxs 28582
dW5pc3Rk 28583
IPCfmYI= 28584
IGZlbWFsZXM= 28585
LS0pCg== 28586
jrflj5Y= 28587
IEZyZWQ= 28588
T3ZlcmFsbA== 28589
2YI= 28590
IGVzc2VuY2U= 28591
IHRoZXJlYnk= 28592
IHdvdW5kZWQ= 28593
IERPV04= 28594
bGVzc29u 28595
dGV4dHVyZQ== 28596
Um91bmQ= 28597
IGF1dG9tYXRlZA== 28598
INCh 28599
IFVwZGF0ZXM= 28600
IHNoYWRl 28601
cHVibGlzaA== 28602
IEdlYXI= 28603
PWxhbWJkYQ== 28604
IGxldmVy 28605
KSsi 28606
aGlsbA== 28607
IHJhZGFy 28608
cnlpbmc= 28609
ICIpLg== 28610
ZmlsbGVk 28611
IGxpbmV1cA== 28612
IGRs 28613
IHdvcmtzcGFjZQ== 28614
Vm8= 28615
X2R0 28616
67I= 28617
X0l0ZW0= 28618
TlNVUkw= 28619
LnZlcmlmeQ== 28620
IEhhd2FpaQ== 28621
R29k 28622
TWFyY2g= 28623
IFvigKZd 28624
IHBlbG8= 28625
dXJpb3Vz 28626
IFBpdHRzYnVyZ2g= 28627
Lkl0 28628
Q2xlYW4= 28629
Plw8Xg== 28630
IGlvcw== 28631
c291bmQ= 28632
Il07 28633
IGZyZWVk 28634
cm90dGxl 28635
IExvd2Vy 28636
W2NvdW50 28637
5Z0= 28638
IHBhbGU= 28639
IFdheW5l 28640
ZWFydGg= 28641
X2NhdGVnb3JpZXM= 28642
VUNL 28643
Lm1ldGFkYXRh 28644
IHN1bW1vbg== 28645
SE9NRQ== 28646
0L7Qu9GM0Lc= 28647
IG1hbnVmYWN0dXJlZA== 28648
IGRvY2s= 28649
IGNvbXBldGl0b3Jz 28650
X01PREVM 28651
b2tpYQ== 28652
IEhleQ== 28653
zr8= 28654
IGJhY2t3YXJk 28655
IFBPU1M= 28656
cm9wYQ== 28657
IGNyaQ== 28658
X09CSg== 28659
VHJhbnNwb3J0 28660
LWhpZ2g= 28661
IGVyb3Rpaw== 28662
X3Nsb3Q= 28663
IGFydGlj 28664
X2ZyYW1ld29yaw== 28665
LXNlcmlm 28666
IFNxbERiVHlwZQ== 28667
Jyko 28668
KyIv 28669
IHdvcmU= 28670
U2ls 28671
IHN0b3Jpbmc= 28672
IFBoYXNl 28673
dWFudA== 28674
IGJ1bXA= 28675
aW5obw== 28676
IGRpZ24= 28677
IGJhY2tz 28678
cXE= 28679
KGhhc2g= 28680
IGdlbw== 28681
IHRlbmRlcg== 28682
TG9nbw== 28683
ISkK 28684
IE1Y 28685
IEFydGh1cg== 28686
ZXNzb2E= 28687
X0No 28688
IGJlZHJvb21z 28689
PSIjIj48 28690
IHRocm9hdA== 28691
aW5zaWM= 28692
LmludGVnZXI= 28693
IHByaW1pdGl2ZQ== 28694
VHJ1dGh5 28695
IGZhY2lsaXRhdGU= 28696
IGNyZWF0aXZpdHk= 28697
IEROUw== 28698
IGdyYQ== 28699
dWV6 28700
IGNvdW50bGVzcw== 28701
IFBvbGFuZA== 28702
J00= 28703
IERpc3Q= 28704
IHZlc3Q= 28705
IGNlcnRpZmljYXRpb24= 28706
4buR 28707
aGVsZA== 28708
ZXh0ZW5zaW9ucw== 28709
KHN0YXRpYw== 28710
IGdyYWRlcw== 28711
IFViZXI= 28712
44Gf 28713
IFtdKQo= 28714
ZGF0b3M= 28715
IGdldERhdGE= 28716
IENoYXJn 28717
IEJT 28718
Lm1pY3Jvc29mdA== 28719
LnZpZGVv 28720
LmRpcmVjdGlvbg== 28721
LT57Jw== 28722
bHVh 28723
YXBlc3Q= 28724
IGJvaWxlcg== 28725
ZXJlaw== 28726
IGRlY2lkZXM= 28727
Lmphcg== 28728
SVND 28729
IFdvcmRz 28730
KENPTg== 28731
RU1QTEFURQ== 28732
cmVlemU= 28733
c2hvdHM= 28734
YXBwcw== 28735
dW50ZWQ= 28736
LnNldE5hbWU= 28737
Ojo8 28738
LWJvbGQ= 28739
6rI= 28740
5a+G 28741
TG9uZ3JpZ2h0YXJyb3c= 28742
IHVuZmFpcg== 28743
IGVhcm5pbmc= 28744
IHNoZWxm 28745
VVJFTUVOVA== 28746
IGlkbGU= 28747
X01FTlU= 28748
LkN1c3RvbQ== 28749
QUdFUg== 28750
LSI= 28751
X3N3aXRjaA== 28752
YmVjYXVzZQ== 28753
KXZpZXc= 28754
bWFyZQ== 28755
X2NvbmRpdGlvbg== 28756
IFN0YXJ0aW5n 28757
TXZj 28758
KHByZQ== 28759
ZHVtcA== 28760
X0xPQ0s= 28761
YXRldGltZQ== 28762
LmNhbGxiYWNr 28763
IENlcg== 28764
b3BvbA== 28765
aWJyYXJ5 28766
IHJlc2VydmF0aW9u 28767
CQkJCQkJCQo= 28768
bGVjdG9y 28769
Z3JhZHVhdGU= 28770
IGdlbmVyb3Vz 28771
IGlvbg== 28772
cmljYW8= 28773
bXE= 28774
X2NvbXBsZXRl 28775
KGN1cnNvcg== 28776
IEZvcm1Db250cm9s 28777
OmNlbnRlcg== 28778
IHN1YnN0aXR1dGU= 28779
IFBsYW5uaW5n 28780
IHBlbnNpb24= 28781
IHJlY29tbWVuZGF0aW9u 28782
IFRhZ3M= 28783
IGdlZg== 28784
IGFsYnVtcw== 28785
IHdhc2hpbmc= 28786
cm9j 28787
IHRyYWlucw== 28788
YXRpbmdz 28789
IGV4cG9uZW50 28790
YWNrYmFy 28791
LWxu 28792
w6Fn 28793
LkRhdGFBbm5vdGF0aW9ucw== 28794
IEVJRg== 28795
IE1hbGF5c2lh 28796
CVBPUlQ= 28797
b251cw== 28798
IGNsZXZlcg== 28799
IHBldQ== 28800
PgoKCgo= 28801
IEFyZ3VtZW50cw== 28802
IGRlYnVnZ2luZw== 28803
KHJpZ2h0 28804
J0Q= 28805
Y29tcHV0ZQ== 28806
IGZpbmVzdA== 28807
T1JBR0U= 28808
IHNwZWN0YWN1bGFy 28809
cGhyYXNl 28810
IGluZGlh 28811
IGxlZ2VuZGFyeQ== 28812
YmlydGg= 28813
IGNvbXBvc2l0ZQ== 28814
IGdyb3dz 28815
IFRE 28816
IGVwaWQ= 28817
IGxhdW5jaGluZw== 28818
XV1b 28819
TWludXRlcw== 28820
IENoYQ== 28821
IGNsZWFuZWQ= 28822
IHdpdG5lc3Nlcw== 28823
dWthbg== 28824
CVR5cGU= 28825
IGhhYmU= 28826
cGFyYWdyYXBo 28827
IEpQYW5lbA== 28828
IEhhbm4= 28829
IHZhcmllZA== 28830
IFBva2Vtb24= 28831
IE1VU1Q= 28832
5Yqo 28833
LnZpc2liaWxpdHk= 28834
b3B1cA== 28835
Xls= 28836
LmV4cGFuZA== 28837
ICInLA== 28838
LmZhc3RlcnhtbA== 28839
X2F1dG8= 28840
IFNoZWV0 28841
bWFya2Vy 28842
UGFyY2Vs 28843
ZXdz 28844
IFN0cmF0ZWd5 28845
LW1ha2luZw== 28846
IHVudmU= 28847
IHRyYWlsaW5n 28848
IGNsaWNrcw== 28849
IEdldENvbXBvbmVudA== 28850
CWNvbnRlbnQ= 28851
SUdFTkNF 28852
RVJORUw= 28853
TlNNdXRhYmxlQXJyYXk= 28854
IGJyZWF0 28855
IGhhcm1mdWw= 28856
tog= 28857
IGJlc2lkZXM= 28858
IGJvcmluZw== 28859
IGJydXRhbA== 28860
dmFuZw== 28861
KHBhcnNl 28862
cXVpY2s= 28863
IHB5dGVzdA== 28864
IHN3aXRjaGluZw== 28865
KCldCg== 28866
IOyE 28867
TEVS 28868
CWZvbnQ= 28869
IG5ldHQ= 28870
KV0KCg== 28871
KC9c 28872
5p6c 28873
dG9BcnJheQ== 28874
IGJyZWVk 28875
IENBUg== 28876
IFdlYXBvbg== 28877
QWJz 28878
dG90 28879
IHNldE5hbWU= 28880
YXB0aXZl 28881
IDos 28882
IGVzY2FwZWQ= 28883
b3JkZW4= 28884
IFByaQ== 28885
dGh1bWJuYWls 28886
IGRlc2NyaXB0aW9ucw== 28887
L3N0eWxlcw== 28888
IFBDSQ== 28889
IGFscGhhYmV0 28890
YXN0aWNzZWFyY2g= 28891
Tk9URQ== 28892
IGNpYWxpcw== 28893
IEdyaWZm 28894
IHBvcnF1ZQ== 28895
IHByb3RlaW5z 28896
cGxheXM= 28897
IHN0YXRpbmc= 28898
IGltYWdpbmF0aW9u 28899
IGZhY2lhbA== 28900
IE1lY2hhbg== 28901
IGFycmFuZ2Vk 28902
X3VzZWQ= 28903
IGFycmFuZ2VtZW50cw== 28904
IFBpcGU= 28905
aG9zdG5hbWU= 28906
IHByb3ZpbmM= 28907
VGl0 28908
LkZsYXRTdHlsZQ== 28909
IFNwbGl0 28910
IExvYWRlcg== 28911
LmNj 28912
IGNsaW5pYw== 28913
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 28914
IGJha2luZw== 28915
IEVOVA== 28916
bmVhdGg= 28917
44CBCgo= 28918
QU5F 28919
LkVudGl0eUZyYW1ld29ya0NvcmU= 28920
YXBwZXJz 28921
Lmlj 28922
IE5nTW9kdWxl 28923
IEZPUk0= 28924
ICc7 28925
LXByb2ZpdA== 28926
aHc= 28927
ZW5lbXk= 28928
IEV5ZQ== 28929
IGNhdXRpb24= 28930
dG93bg== 28931
IHVyZ2Vk 28932
IEppbW15 28933
eW5jaHJvbm91cw== 28934
LXNpemVk 28935
bWFraW5n 28936
LHs= 28937
XScs 28938
X09iamVjdA== 28939
YWhvbWE= 28940
IGFjdGl2aXN0 28941
SU5WQUw= 28942
IENvbW1lcmNpYWw= 28943
IE9ybGFuZG8= 28944
KHRhYg== 28945
INio 28946
QWxnb3JpdGht 28947
IGhlcml0YWdl 28948
R2V0TWFwcGluZw== 28949
IGZhaWx1cmVz 28950
cmlvcw== 28951
YXRpdmE= 28952
IHRldA== 28953
IGNhcnBldA== 28954
KFo= 28955
dGhyZWU= 28956
IGRpc2Nsb3N1cmU= 28957
LkVSUk9S 28958
X2NhbGxlZA== 28959
IGRpYWw= 28960
IG9jY2FzaW9uYWw= 28961
LkVycg== 28962
IGZ1bmNpb24= 28963
Y2FmZm9sZA== 28964
IHJlbGVhc2luZw== 28965
77yJCgo= 28966
X1ZhbHVl 28967
IFZhcmk= 28968
eWVsbG93 28969
IHN0cnVnZ2xlcw== 28970
LmNhbA== 28971
IERha290YQ== 28972
CWNsb3Nl 28973
IHNhbmR3aWNo 28974
IGFuYWx5dGljcw== 28975
ICoqKQ== 28976
JiM= 28977
IEpvcw== 28978
IHBhc3NpdmU= 28979
QVRUUg== 28980
VGhyb3dhYmxl 28981
IE11bg== 28982
IFVpbnQ= 28983
KGRpc3Bvc2luZw== 28984
YXJhaw== 28985
IExlYWRlcnM= 28986
IGFmZmVjdGluZw== 28987
IGl0ZW1WaWV3 28988
IGVjb25vbWljcw== 28989
ZnY= 28990
4LmA 28991
LnJi 28992
IE92ZXJhbGw= 28993
IHdlYWx0aHk= 28994
IGV2b2x2ZWQ= 28995
bmRh 28996
IEh1cw== 28997
cmVzdHJpY3Q= 28998
dW1lbg== 28999
IEFncmljdWx0 29000
IQoKCg== 29001
IGV4cGlyZXM= 29002
IHNwb2tlc3BlcnNvbg== 29003
aW50ZXJ2YWw= 29004
IMOi 29005
IHF1ZWVu 29006
KG5pbA== 29007
aW5nbw== 29008
SGVhcA== 29009
2Y4= 29010
IGNvbXBsYWlu 29011
U3lt 29012
IENsb25l 29013
IFJ1 29014
IFdJTEw= 29015
IENyeXN0YWw= 29016
L2NvbnRlbnQ= 29017
aW5nZW4= 29018
b2ludG1lbnQ= 29019
TGFzdE5hbWU= 29020
YXZpY29u 29021
IElCTQ== 29022
IERpbWVuc2lvbg== 29023
YW5o 29024
aWNpcGFudHM= 29025
IEFubmU= 29026
LnByb2dyZXNz 29027
IGFsZ28= 29028
b2JpbA== 29029
IFZvaWNl 29030
IEZF 29031
IGdsaQ== 29032
IHZlZA== 29033
IHByZXZlbnRz 29034
XENvbHVtbg== 29035
IGZvbGs= 29036
ZXR0aQ== 29037
IG1u 29038
IENMQVNT 29039
IGRpc3BsYXlpbmc= 29040
IEts 29041
IEZlcnI= 29042
ZHV0bw== 29043
Lmli 29044
IGRhZG9z 29045
J25hbWU= 29046
LXNwYWNl 29047
IGl0YWxpYW4= 29048
IGludmVyc2U= 29049
IGRlbnNl 29050
dXRlcg== 29051
IElFbnVtZXJhdG9y 29052
LXNpZ24= 29053
IG5hdGlvbndpZGU= 29054
IHBlcnNvbmE= 29055
IHNvbHZlZA== 29056
IGRyYW1hdGljYWxseQ== 29057
TG9nb3V0 29058
IGdyYXY= 29059
IGFuYWx5c2Vz 29060
b2xsbw== 29061
IGxhbXA= 29062
LnRlYW0= 29063
IEVyb3Q= 29064
PVsi 29065
IGRhbmNpbmc= 29066
ID8+Lw== 29067
IGNhdGVy 29068
ZmZl 29069
IFNoYQ== 29070
IEJvcw== 29071
IFJFUVVJUkU= 29072
IE1vbnN0ZXI= 29073
IFJC 29074
IElERQ== 29075
IHN1aXRz 29076
IGZvcm1EYXRh 29077
KHRoZXRh 29078
IHNwYXRpYWw= 29079
PU5VTEw= 29080
IFNxbENvbm5lY3Rpb24= 29081
IOA= 29082
IFZlbmV6 29083
IE1vcm5pbmc= 29084
IHB1YmxpY2F0aW9ucw== 29085
IE5PTklORlJJTkdFTUVOVA== 29086
Zmlyc3ROYW1l 29087
dWRz 29088
V291bGQ= 29089
X0hFQUQ= 29090
IGludmVzdGVk 29091
c3RhYmxl 29092
ZnJlZA== 29093
IGNvbW1hbmRlcg== 29094
U0VT 29095
4oCUYQ== 29096
YW5jaGU= 29097
IE1vdmVtZW50 29098
67M= 29099
U3VpdGU= 29100
IGp1cmlzZGljdGlvbg== 29101
66as 29102
IEJldGg= 29103
alF1ZXJ5 29104
IElzYQ== 29105
IGRlbnRhbA== 29106
LCo= 29107
IExpbWl0 29108
aWxpYXRpb24= 29109
PSJ7 29110
YmFzdA== 29111
IHR1cmI= 29112
aXN5 29113
T09L 29114
IGFkdm9jYXRl 29115
aW1hZw== 29116
TEVDVElPTg== 29117
0LvRjA== 29118
KGNhdGVnb3J5 29119
LmRlYw== 29120
IHVuaXF1 29121
X3Nu 29122
IGF0dHJhY3RlZA== 29123
IMOJ 29124
IFJ1bm5pbmc= 29125
X2VkZ2Vz 29126
IERpc2FibGU= 29127
X0FT 29128
5Zu+ 29129
IG5ldHdvcmtpbmc= 29130
X2JyYW5jaA== 29131
SGF2aW5n 29132
dG9CZVRydXRoeQ== 29133
R0k= 29134
IGNhbXBz 29135
c2Vw 29136
LXBhcnQ= 29137
ICkKCgoKCgoKCg== 29138
dXN0cmFsaWE= 29139
IFJlcG9ydHM= 29140
cml0bw== 29141
IHdhaXN0 29142
X3BsdXM= 29143
IFdX 29144
LXBlcnNvbg== 29145
QXByaWw= 29146
IHNhcg== 29147
LnRhcg== 29148
IGFncmljdWx0dXJhbA== 29149
dGlj 29150
IHRjcA== 29151
IHNldFZhbHVl 29152
YWdlbnRv 29153
IEFwcGU= 29154
cGlsZXI= 29155
Q0FERQ== 29156
IGFuY2hl 29157
YXRjaGVy 29158
IGNvbWljcw== 29159
IGxicw== 29160
X3NlZ21lbnQ= 29161
J109JA== 29162
aXR0ZXJz 29163
aWNoZXI= 29164
R0lORQ== 29165
IHV0aWxpemU= 29166
IEN1cnNvcg== 29167
X2V4cHJlc3Npb24= 29168
IGRhZw== 29169
PGxvbmc= 29170
IHJoeXRo 29171
5o+Q 29172
IGNvbnN1bHRhdGlvbg== 29173
WWV0 29174
IikpCgo= 29175
X01BQw== 29176
Y291bGQ= 29177
ICdcXA== 29178
IFZv 29179
CWh0dHA= 29180
IGdz 29181
cGhlcg== 29182
LWdyaWQ= 29183
SmFtZXM= 29184
SnVs 29185
IHNjaG9u 29186
IHRlbnNvcmZsb3c= 29187
IExPR0dFUg== 29188
YW1hcw== 29189
IHNjaXB5 29190
IGNvbnZpY3Rpb24= 29191
LmFn 29192
IGFkbWluaXN0cmF0b3I= 29193
KSl7DQo= 29194
IG51bg== 29195
Imdyb3Vw 29196
UG9y 29197
IG51cnNl 29198
ZXhwcmVzc2lvbg== 29199
YWt5 29200
IEhlYXZ5 29201
Lm9wdA== 29202
LmdldEFsbA== 29203
IG92ZXJs 29204
LyIs 29205
X2NvdW50cnk= 29206
544= 29207
IEdFTkVS 29208
X3JvdXRl 29209
IERhbA== 29210
wrQ= 29211
b2xvYWQ= 29212
IHVuY29tZm9ydGFibGU= 29213
KG1lbnU= 29214
IGhvc3RuYW1l 29215
JyIpOwo= 29216
IGNhbGN1bGF0aW9ucw== 29217
LWNsaWNr 29218
IHByb3RlY3RpdmU= 29219
44Kv 29220
X0Zvcm0= 29221
dW5ncw== 29222
QWN0dWFs 29223
bWY= 29224
IFByb2Nlc3Npbmc= 29225
IEludmVudG9yeQ== 29226
KG1hdHJpeA== 29227
YXBwcm9wcmlhdGU= 29228
d2Vn 29229
aWph 29230
IGNocg== 29231
IHJpZmxl 29232
LXdzag== 29233
a2Fy 29234
IGluZGVwZW5kZW50bHk= 29235
SU9T 29236
IGNvbnNpc3RlbmN5 29237
dm4= 29238
L3N5c3RlbQ== 29239
IENoYW5nZXM= 29240
IGV4cG9zZQ== 29241
aWNpZW50cw== 29242
IHJlbGF0ZQ== 29243
CW5leHQ= 29244
6Kg= 29245
dWRlcw== 29246
IGdsYXNzZXM= 29247
RlhNTA== 29248
Li4uLi4u 29249
IFBkZg== 29250
IGFwcHJvdmU= 29251
IHtc 29252
IGV4aXN0ZQ== 29253
KSko 29254
QVJFTlQ= 29255
0L7Qvw== 29256
IExhdGVzdA== 29257
IE5pZ2VyaWE= 29258
LkludGVyZmFjZXM= 29259
IHJlbW92ZXM= 29260
RW5lbXk= 29261
IGVuZm9yY2U= 29262
dmVydHM= 29263
CXBvcw== 29264
X3RleHR1cmU= 29265
V0FSRA== 29266
IElOQ0lERU5U 29267
KGNvbnRhaW5lcg== 29268
IGRlZmVuZGluZw== 29269
IFJY 29270
IEhvb2s= 29271
YnJpcw== 29272
IEZsYXNr 29273
R3JheQ== 29274
LikK 29275
dmlzaWJpbGl0eQ== 29276
IFJlZGlyZWN0VG9BY3Rpb24= 29277
ZXJyYWw= 29278
X2VsZW0= 29279
IHJlc29u 29280
ZnJvbnRlbmQ= 29281
X3ZhcmlhYmxlcw== 29282
YXRlcmlh 29283
ICsi 29284
YXZlbGVk 29285
UklY 29286
IGRlZmljaXQ= 29287
X0NoZWNr 29288
WVlZWQ== 29289
VG9PbmU= 29290
c3B5 29291
IHVuaXRlZA== 29292
ZW5kZW50 29293
IHBvZGU= 29294
44GM 29295
Q0FU 29296
KGZtdA== 29297
IEJvbnVz 29298
IHJlY2s= 29299
wro= 29300
TW9kdWxlcw== 29301
IHZhY3V1bQ== 29302
UmFkaW8= 29303
IERBTUFHRQ== 29304
UGVu 29305
IFBhcmtlcg== 29306
OzsK 29307
IFJlYWxseQ== 29308
X25lZw== 29309
cGVuZGluZw== 29310
IG5vbWluZWU= 29311
IENhdGVnb3JpZXM= 29312
IFVsdHJh 29313
V2VhcG9u 29314
IGRlZmVuZGVy 29315
SXNz 29316
IEdlbmRlcg== 29317
IERyZXNz 29318
IGltcHJpc29u 29319
IGJhbmtydXB0 29320
aW1lbnNpb25hbA== 29321
UEhB 29322
IFN0cmF0ZWc= 29323
IFBST0ZJVFM= 29324
IHBhdHJp 29325
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 29326
ZGVsZWdhdGU= 29327
IGZvclN0YXRl 29328
IGRldm90ZWQ= 29329
X21ha2U= 29330
IHRlcnJvcmlzdHM= 29331
IFNuYXA= 29332
X25hdg== 29333
IEFB 29334
IElhbg== 29335
CWFwcA== 29336
UGxhY2VtZW50 29337
X2hkcg== 29338
PEs= 29339
IHNhbmc= 29340
c3Ryb2tl 29341
LVE= 29342
Pjw/PQ== 29343
LW1vZGVs 29344
YXZhbmE= 29345
IFdhbmc= 29346
ICAgICAgICAgICAgIAo= 29347
CWluaXQ= 29348
IGVudHJlcHJlbmV1cg== 29349
YXRpdm8= 29350
TG92ZQ== 29351
LW92ZXI= 29352
V2F0ZXI= 29353
IG1vZHM= 29354
Z2VuY2U= 29355
VGVjaG4= 29356
Png= 29357
LlRhc2s= 29358
bW9uZXk= 29359
aWJhYmE= 29360
J30pOwo= 29361
IFNwZWNpZmlj 29362
IExpbmVhcg== 29363
X09QVA== 29364
SGFzaENvZGU= 29365
KFBsYXllcg== 29366
LkNvbnRhaW5zS2V5 29367
IGNvbGxhcHNlZA== 29368
dHJhbnNwYXJlbnQ= 29369
X1JBTkdF 29370
Vmlld2Vy 29371
KGNmZw== 29372
IHNvcnRpbmc= 29373
IGluZmVjdGVk 29374
IE5hY2g= 29375
IGFjY29tbW9kYXRl 29376
LmVsZW1lbnRz 29377
X1BBUlQ= 29378
IFNleHk= 29379
PWdldA== 29380
KHllYXI= 29381
IHhocg== 29382
Ol0= 29383
b3dza2k= 29384
IHN1bW1hcg== 29385
IMK/ 29386
IGludGU= 29387
IHdvcmtmbG93 29388
IFRhaXdhbg== 29389
dmVyc2lvbnM= 29390
5Y+R 29391
IHN1cnByaXNpbmdseQ== 29392
IG9wdGljYWw= 29393
IHByb2Nlcw== 29394
IGRpc2FncmVl 29395
IG51ZXZv 29396
IENBTQ== 29397
c29ydGVk 29398
bGVhc2Vz 29399
aXN0bGU= 29400
SWRlbnQ= 29401
CWV2ZW50 29402
amVjdGVk 29403
Q2h1bms= 29404
VmFycw== 29405
LnByb3ZpZGVy 29406
IHByb2NlZWRpbmdz 29407
IGluY2x1c2l2ZQ== 29408
IGFydHdvcms= 29409
ZW5kYW50cw== 29410
77yaCg== 29411
c2Vlbg== 29412
IGxpZw== 29413
IG1ha2Vycw== 29414
X2Z1bg== 29415
IGxlbmd0aHM= 29416
UGF0aFZhcmlhYmxl 29417
W2l0ZW0= 29418
4Li1 29419
RGVhZA== 29420
RkZGRkZG 29421
IFVyYmFu 29422
dXBsZXM= 29423
aWNoZW4= 29424
KG51bGxwdHI= 29425
LnNwZWM= 29426
LFN5c3RlbQ== 29427
VVJBVElPTg== 29428
KGpvYg== 29429
5byP 29430
IHRyYWNrZXI= 29431
xZk= 29432
IE1S 29433
IFNRTGl0ZQ== 29434
IGR0bw== 29435
IDs7Cg== 29436
IG1pbnQ= 29437
IEludHJvZHVjdGlvbg== 29438
Y2Fv 29439
IHF1ZXN0aW9uZWQ= 29440
IGZpdHRlZA== 29441
cmV2aXNpb24= 29442
c3E= 29443
IG1pZw== 29444
X3VuaXRz 29445
X2FzeW5j 29446
IGZsaWNr 29447
fSk7CgoK 29448
IG5vdHJl 29449
fWAs 29450
RmlsdGVycw== 29451
IG11bmRv 29452
X2RheXM= 29453
IGZybQ== 29454
dXRj 29455
IHZhbHM= 29456
ZXdpZHRo 29457
IEdlbmVyYXRvcg== 29458
IEFydGlzdA== 29459
IElEcw== 29460
IEFydGljbGVz 29461
cmVhdGVy 29462
IENvbXBvbmVudEZpeHR1cmU= 29463
Lj0= 29464
IHJvdQ== 29465
LW5v 29466
LmJ1a2tpdA== 29467
ZWdn 29468
IERpZmY= 29469
YXRpY3M= 29470
0YPRhw== 29471
4oCUCgo= 29472
IENoYXJsb3R0ZQ== 29473
Ynll 29474
IH0pOw0KDQo= 29475
IFZpaw== 29476
IEJyb3c= 29477
IGx2 29478
IEdpYg== 29479
LXdpbmc= 29480
R0xJR0VOQ0U= 29481
KEls 29482
IEVuZ2luZWVy 29483
LldhaXQ= 29484
IFBpY3R1cmVz 29485
IHJoZXQ= 29486
IHRoZXJtYWw= 29487
IHByYWlzZQ== 29488
PD4oKTsKCg== 29489
IFNwaWRlcg== 29490
UGF1c2U= 29491
IEJha2Vy 29492
IHNsb3dlcg== 29493
IH1dCg== 29494
X2VucXVldWU= 29495
IGRpc2FwcGVhcmVk 29496
IFRpY2tldA== 29497
SU5VWA== 29498
X0xPQ0FM 29499
0LDRgdGB 29500
QEluamVjdGFibGU= 29501
Y29tbXVuaXR5 29502
R2VzdHVyZVJlY29nbml6ZXI= 29503
5Zu9 29504
IHNjYWxlcw== 29505
IC0o 29506
Lycr 29507
IFNpdA== 29508
IGV4ZWN1dGl2ZXM= 29509
YXJkaW5n 29510
IGFkdmVycw== 29511
IGJhY2t3YXJkcw== 29512
CWNvbnRleHQ= 29513
IEhhbXA= 29514
IFBG 29515
IERlY2s= 29516
IENyYWln 29517
QW1lcmljYW4= 29518
IGJlbGw= 29519
IHByb2w= 29520
dWZlbg== 29521
IHJuZw== 29522
YXJzaGFs 29523
IFNpbXBseQ== 29524
Zmlyc3RuYW1l 29525
c2hvcmU= 29526
SnVseQ== 29527
IG1vcnRhbGl0eQ== 29528
IOKGkgoK 29529
SGVscGVycw== 29530
IGJlbmNobWFyaw== 29531
ZW1hZGU= 29532
IG9yZ2FuaXNhdGlvbnM= 29533
Lmdzb24= 29534
IFRleHRGaWVsZA== 29535
IGNpdmlsaWFucw== 29536
LkFycmF5cw== 29537
IE1pc3Npc3NpcHBp 29538
IGludGVybWVkaWF0ZQ== 29539
Z2V0VXNlcg== 29540
X2NsdXN0ZXI= 29541
UmVsYXRpdmU= 29542
Zm9yZWlnbg== 29543
LnF1ZXJ5U2VsZWN0b3JBbGw= 29544
Rm9yZWlnbktleQ== 29545
IHJlYXNvbmFibHk= 29546
LS0tLS0tLS0tCg== 29547
Q2FyZHM= 29548
IEthbQ== 29549
IFRob3I= 29550
IHJvbGxlcg== 29551
LWVsZW1lbnQ= 29552
IEN1cnJlbmN5 29553
ZGRpZQ== 29554
QUxMWQ== 29555
IFJB 29556
IHBlcm1ldA== 29557
YWFhYQ== 29558
IGhvbWV3b3Jr 29559
IFZpdA== 29560
IG1vbGQ= 29561
IEZlcg== 29562
W3N0YXJ0 29563
IHN0YXRpc3RpY2Fs 29564
IHNjYXJ5 29565
X0hPTUU= 29566
LkJlZ2lu 29567
Q29uc3RydWN0 29568
b2dlbmlj 29569
IERFQUxJTkdT 29570
IHRhbWJpw6lu 29571
aXhvbg== 29572
LmluZA== 29573
YWNyZQ== 29574
IHRyYW5zZm9ybXM= 29575
IE5hcA== 29576
LkJsb2Nr 29577
dXNzaWE= 29578
cGlyYXRpb24= 29579
dWxlbnQ= 29580
IGNlaWw= 29581
Q2xhdXNl 29582
bmFpcmU= 29583
VEVT 29584
IG5lYXQ= 29585
U1RE 29586
IFJlZ0V4cA== 29587
cGVyZm9ybQ== 29588
Oik= 29589
IHVuaW9ucw== 29590
IHN1YmxpYw== 29591
IHdpbmRz 29592
bG9hdGluZw== 29593
Z2xpY2g= 29594
IHBhZ2luYXRpb24= 29595
U2tpbGw= 29596
QXBwbHk= 29597
IE9wZXJhdG9y 29598
aXN0b2dyYW0= 29599
IHF1YWxpdGllcw== 29600
Q3Jvc3M= 29601
IGRlY29t 29602
XSwi 29603
IEp1YW4= 29604
Lm1vZGFs 29605
LkNoaWxk 29606
IFJvZ2Vy 29607
U1RJVFVURQ== 29608
OkNHUmVjdE1ha2U= 29609
YWxldHRl 29610
IHN0YQ== 29611
YXNpZGU= 29612
IGJsdXI= 29613
IFdh 29614
aWZldGltZQ== 29615
cmVlZA== 29616
Y29udHJvbHM= 29617
IGJpbnM= 29618
INC/0L7Quw== 29619
Ki8sCg== 29620
VUlT 29621
IFJvdQ== 29622
IERlbW8= 29623
LWF3ZXNvbWU= 29624
IENoYWlu 29625
IGhhc3Rh 29626
IEJhcnQ= 29627
LktFWQ== 29628
IHZlbmRvcnM= 29629
bm9mb2xsb3c= 29630
IERlc3Q= 29631
X2J1aWxkZXI= 29632
IGFyZ3Vlcw== 29633
X2Fuc3dlcg== 29634
Z290bw== 29635
IFJFU1VMVA== 29636
IE1PTg== 29637
IHBvZGVy 29638
b29ucw== 29639
X0NBU0U= 29640
IHJlcGxpYw== 29641
IGZpbmFuY2luZw== 29642
IERBVEU= 29643
Y2Vybg== 29644
X3RyYWNr 29645
dGllcw== 29646
L2xvZ28= 29647
IE5FR0xJR0VOQ0U= 29648
Z2V0VHlwZQ== 29649
PlQ= 29650
YmV0 29651
Z2lybA== 29652
IElOQ0lERU5UQUw= 29653
LXNpdGU= 29654
LnRyaWdnZXI= 29655
IExpc2E= 29656
X2lucHV0cw== 29657
IHJlbGF0aXZlcw== 29658
TG9nZ2VkSW4= 29659
Q29uZmlndXJl 29660
SUs= 29661
LmFjY2VwdA== 29662
UmVzdW1l 29663
IERyYWZ0 29664
ICo+KA== 29665
IFdB 29666
ZWRpYW4= 29667
ZXJuZXNz 29668
IExheW91dEluZmxhdGVy 29669
Ki8NCg0K 29670
b3RoeQ== 29671
IG9ibGlnYXRpb24= 29672
U3Vic2NyaWJl 29673
IHRodW1ibmFpbA== 29674
ZXhpc3Q= 29675
IGluc2lzdGVk 29676
IFVJQ29sbGVjdGlvblZpZXc= 29677
IEFuZ3VsYXI= 29678
IHRhYmxldHM= 29679
IEltcGFjdA== 29680
44CNCgo= 29681
YWhv 29682
IGNoYXJhY3RlcmlzdGlj 29683
Z2Q= 29684
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 29685
b3VydA== 29686
YC4= 29687
QXBwcm8= 29688
Q29vcmRpbmF0ZQ== 29689
UmVtZW1iZXI= 29690
IG1hcmluZQ== 29691
XT09Jw== 29692
IEFkbWluaXN0cmF0b3I= 29693
LmdldERlZmF1bHQ= 29694
IGZvcmdvdA== 29695
IFN0cnVjdHVyZQ== 29696
VnVl 29697
YXJzaW5n 29698
bW9tZW50 29699
a3c= 29700
X2N1cnNvcg== 29701
QXR0YWNr 29702
IGF0aGxldGlj 29703
IGRpYWdub3NlZA== 29704
IGVuZGU= 29705
5Yig6Zmk 29706
SG91c2U= 29707
IFBBUkFN 29708
IHdpa2k= 29709
IE9wcA== 29710
IGNvbnNlcnZhdGlvbg== 29711
IHNuZA== 29712
X3RlbQ== 29713
c3Vic3Ry 29714
IENhcGU= 29715
LnNpbQ== 29716
VVRJT04= 29717
YW5hbg== 29718
4oCZdW4= 29719
IGd5 29720
LXdvcms= 29721
IGNvbXBlbGxpbmc= 29722
PScj 29723
CXN1Yg== 29724
IGRpcmVjdG9yaWVz 29725
7Yq4 29726
IHRvdWNoZXM= 29727
b3V0aW5lcw== 29728
LkNvbGxlY3Rpb24= 29729
c2NoZWR1bGU= 29730
LmxhdA== 29731
IERvY3RyaW5l 29732
Q0FB 29733
IFJlZmVy 29734
IHNoaWZ0cw== 29735
IGxpa2VsaWhvb2Q= 29736
cHJldGVy 29737
IEZlbWFsZQ== 29738
IGludGVyY2VwdA== 29739
IGxvdQ== 29740
55m7 29741
IHJ1Zw== 29742
IENyb3du 29743
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 29744
LXByb2R1Y3Q= 29745
IHByb21wdGVk 29746
dW5nbGU= 29747
ZG9ja2Vy 29748
IFR1 29749
IFVuaXF1ZQ== 29750
X0Vycm9y 29751
dWxvcw== 29752
IOKE 29753
IChg 29754
R2V0dGluZw== 29755
X3NjYWw= 29756
IEVuaA== 29757
w7x0 29758
IHN1c3RhaW5lZA== 29759
IHBhdGNoZXM= 29760
IHByb3NwZXI= 29761
IEdhemE= 29762
X2xpZ2h0 29763
IGluY29ucw== 29764
LS0tLS0tLS0K 29765
CQkgICAgICA= 29766
U0Y= 29767
Q04= 29768
OiI7Cg== 29769
IENvbGxpbnM= 29770
KCop 29771
IGNvbXBpbGF0aW9u 29772
J10NCg== 29773
IGNvbnNlcXVlbmNl 29774
LC4uLg== 29775
IGRt 29776
IEJMT0NL 29777
Q2x1c3Rlcg== 29778
IHNraQ== 29779
KGFyZ2M= 29780
VHVwbGU= 29781
IGpvaW5z 29782
IFNoZXJpZmY= 29783
V2Fy 29784
aW5kaQ== 29785
IGNvbW1lbnRlZA== 29786
SE9TVA== 29787
IGludml0YXRpb24= 29788
YXBhbmVzZQ== 29789
IHBlcm1pdHM= 29790
cHJlY2VkZW50ZWQ= 29791
X3pvbmU= 29792
IEFteQ== 29793
X1JE 29794
TWluaW11bQ== 29795
IGludm9jYXRpb24= 29796
LmVuYWJsZQ== 29797
aWNodGVu 29798
LW93bmVk 29799
Imlk 29800
X1BPSU5URVI= 29801
RmFj 29802
IHNwZWNpZmljYXRpb25z 29803
IG5vbWluYXRpb24= 29804
IGdw 29805
PCg= 29806
IHJvYm90cw== 29807
IEplcnJ5 29808
IGhvbGRlcnM= 29809
IHdhbmQ= 29810
Y21z 29811
IH0pKQo= 29812
LlRvYXN0 29813
IElMaXN0 29814
QmFzZWQ= 29815
em9vbQ== 29816
L3N0eWxl 29817
IEJlY2s= 29818
TWVu 29819
IGNvbnRyaWJ1dGluZw== 29820
IHVuZG8= 29821
IE9I 29822
IGFkZE9iamVjdA== 29823
IGVpZ2Vu 29824
c2lnbnVw 29825
6ZSZ 29826
IGRpc3RhbnQ= 29827
UEFSQVRPUg== 29828
IE1hcmk= 29829
IG3DoQ== 29830
RW1w 29831
w7Nz 29832
IOyImA== 29833
ZXZ0 29834
K2o= 29835
cGFyaw== 29836
IFN0YXk= 29837
IER1bg== 29838
IHNveQ== 29839
PiU= 29840
YXppbmVz 29841
IHRpZW1wbw== 29842
KG1l 29843
cHJlc2VudA== 29844
LlRoaXM= 29845
IGVkaXRvcnM= 29846
RklFTEQ= 29847
Lldvcms= 29848
IFVuaXZlcnNl 29849
IGRydW5r 29850
LnRpbWVy 29851
IGFsdGVyZWQ= 29852
IE5hcg== 29853
66Cl 29854
LkFjdGl2ZQ== 29855
aWRvcg== 29856
560= 29857
LmRlbHRhVGltZQ== 29858
IGF3a3dhcmQ= 29859
JnF1b3Q= 29860
IFNhZmFyaQ== 29861
IHRyaWNrcw== 29862
TUVOVFM= 29863
ZGl2aXNpb24= 29864
IHZhcnlpbmc= 29865
IEhpZ2h3YXk= 29866
IHBob3RvZ3JhcGhlcg== 29867
IFN0ZXdhcnQ= 29868
IGxhc3Rpbmc= 29869
LlByZQ== 29870
LmFtYXpvbmF3cw== 29871
IEx1Y2s= 29872
LkRlc2NyaXB0aW9u 29873
IE5heg== 29874
bmVn 29875
IGPDsw== 29876
PDwiXA== 29877
IFN1cnY= 29878
IFVuYw== 29879
UmVjaXBl 29880
LkJvcmRlclN0eWxl 29881
IG1vZGlmaWNhdGlvbnM= 29882
LWF0 29883
QVRGT1JN 29884
aGRy 29885
YWtv 29886
IHN1YmxpY2Vuc2U= 29887
IEp1bXA= 29888
IGJlaW0= 29889
IE1hbmhhdHRhbg== 29890
LmJvb2w= 29891
X2h3 29892
0YLRjA== 29893
Qmlu 29894
IGdhdGV3YXk= 29895
IiI6 29896
IFVJUw== 29897
OiIr 29898
LWRlZg== 29899
IFJlZ3VsYXI= 29900
L3Rlc3Rpbmc= 29901
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 29902
c3RyaW5nc3RyZWFt 29903
IGRpc3Bhcg== 29904
IG1vYmls 29905
LXJlYWQ= 29906
IEFkYXB0ZXI= 29907
IENoYW1waW9ucw== 29908
IHNjaGVkdWxlcg== 29909
IGtpbGxz 29910
IE11bHRpcGxl 29911
aXJyb3I= 29912
IGdvZHM= 29913
QURP 29914
YWt0ZQ== 29915
IFVzdWFyaW8= 29916
LmNpcmN1bGFy 29917
IHJlY2VwdA== 29918
IEV4cHI= 29919
IGVsZGVybHk= 29920
IG5pY2VseQ== 29921
IGJlc3Rl 29922
V2FudA== 29923
IGNsYXNzaWNhbA== 29924
LnNwcml0ZQ== 29925
b2JqYw== 29926
IE1hc29u 29927
IHNpc3RlbWE= 29928
LkJsYWNr 29929
ZXNv 29930
IFplaXQ= 29931
IGRpdmlk 29932
IGVudGVycw== 29933
X3N1YmplY3Q= 29934
IFBsYW5ldA== 29935
Lndhcm5pbmc= 29936
IEdyYW0= 29937
X3Rva2Vucw== 29938
IGhvdXNlaG9sZHM= 29939
X2N1c3RvbWVy 29940
dXNlck5hbWU= 29941
Y3Jvc3M= 29942
IHBpb25l 29943
IGFzc2lzdHM= 29944
X1NN 29945
aWJv 29946
IGxveWFs 29947
IHVzZWxlc3M= 29948
I2VsaWY= 29949
IFVsdGltYXRl 29950
Q29tZQ== 29951
Z2Vs 29952
IGRpY2g= 29953
eHl6 29954
aWtlbA== 29955
b2JyYQ== 29956
X3NjYW4= 29957
IEludGVyaW9y 29958
IE5pY2U= 29959
IHBsYWM= 29960
CXRhcmdldA== 29961
IHZpcmFs 29962
YXNzbw== 29963
KCkv 29964
dW5kZQ== 29965
IEFkb2Jl 29966
T3M= 29967
dmlzaXRlZA== 29968
IE9X 29969
IEZlZWQ= 29970
IFNlcXVlbmNl 29971
IG1hbmFnZXM= 29972
aW5zb24= 29973
IExvdWlzaWFuYQ== 29974
e30p 29975
IEhhYg== 29976
IExE 29977
IGJpcA== 29978
cHJpdGVz 29979
KGVsZW0= 29980
LmhpYmVybmF0ZQ== 29981
w6lsw6k= 29982
IG9obmU= 29983
X3RyYW5zYWN0aW9u 29984
IGFubnVuY2k= 29985
UHVibGlzaGVk 29986
IEhvbmRh 29987
IFRhbQ== 29988
IFBhY2tldA== 29989
X3NlbGVjdG9y 29990
IGNoYWxsZW5nZWQ= 29991
UHJvY2Vzc2luZw== 29992
LWhvdmVy 29993
IHRyYWluZXI= 29994
X2NhbmNlbA== 29995
IE5TRGljdGlvbmFyeQ== 29996
YWJyaWM= 29997
IE1MUw== 29998
X3NlbnNvcg== 29999
IHNocmluaw== 30000
IEZY 30001
dGhyZXNob2xk 30002
CUhY 30003
LW1hcms= 30004
YC5g 30005
U2NoZW1l 30006
KGZ1bGw= 30007
X3dyaXRlcg== 30008
IFN5cw== 30009
IGZsZWQ= 30010
IENpbg== 30011
LXdpZGdldA== 30012
IFByZXZpb3Vz 30013
R2VuZGVy 30014
X3F1ZXN0aW9u 30015
RmVlZA== 30016
IHNjcnV0 30017
KHByZWZpeA== 30018
44CC44CC 30019
IGluZmVjdGlvbnM= 30020
UGFydHM= 30021
IGhpZXJhcmNoeQ== 30022
X0RFTEVURQ== 30023
IFBhdGllbnQ= 30024
X3BheQ== 30025
IHByb21vdGVk 30026
IOyL 30027
IGNpdmlsaWFu 30028
IGFncmljdWx0dXJl 30029
IFBpZWNl 30030
IHN0YW5jZQ== 30031
dXRzY2hl 30032
QXNzaWdu 30033
LkFDVElPTg== 30034
Rmln 30035
X3JhZGl1cw== 30036
IFN5bmM= 30037
ZHVjZXI= 30038
ZmFpbHVyZQ== 30039
ZW5zZWQ= 30040
cHRpbWU= 30041
Qk0= 30042
X2RhdGV0aW1l 30043
cXVpdm8= 30044
UVVFVUU= 30045
6ICF 30046
QXBwZWFy 30047
IHN1bW1pdA== 30048
OnZvaWQ= 30049
IHZpbmU= 30050
6K6k 30051
b25uZQ== 30052
X1RSQU5T 30053
LmdyZWVu 30054
X2Nj 30055
IGh1bmdyeQ== 30056
ICI+ 30057
KCkpOw0KDQo= 30058
RXh0cmFjdA== 30059
aXplbnM= 30060
IHNvbHZlcg== 30061
Tm90aWZ5 30062
IGVuZ2xpc2g= 30063
IFNob3BwaW5n 30064
aW50ZXJmYWNlcw== 30065
UkVR 30066
IGlsbGVn 30067
IFVJSW1hZ2VWaWV3 30068
IGRpc2Nvbm5lY3Q= 30069
IFVudGls 30070
IENvbnNlcnZhdGl2ZQ== 30071
QENvbHVtbg== 30072
IHNoaWZ0ZWQ= 30073
IDoNCg== 30074
IGZpY2g= 30075
IGRsYQ== 30076
IHNob2U= 30077
IiksDQo= 30078
dWxhcml0eQ== 30079
X1JFU1A= 30080
V2VhdGhlcg== 30081
VUlBcHBsaWNhdGlvbg== 30082
Lml0ZXJhdG9y 30083
IGFnaW5n 30084
LlBhcmVudA== 30085
b3dpZQ== 30086
KGVxdWFs 30087
IENvbnY= 30088
L2RlZmF1bHQ= 30089
IG1lYXN1cmluZw== 30090
LnByZXY= 30091
LklzVmFsaWQ= 30092
LkZhdA== 30093
IHPEgw== 30094
a2V5d29yZHM= 30095
d2l0aG91dA== 30096
IHNvdmVyZQ== 30097
IGV4Y2hhbmdlcw== 30098
IG1lbHQ= 30099
IGlzbGFuZHM= 30100
IEludGVncg== 30101
IGp1bXBpbmc= 30102
IGdsZQ== 30103
IGpvdXJuYWxpc20= 30104
IGRhdGVk 30105
TG9jYWxpemVk 30106
IFJlZnJlc2g= 30107
UGFydGljbGU= 30108
IGFh 30109
IFNUUklDVA== 30110
IGJvZA== 30111
LlByb2Nlc3M= 30112
X0FVVE8= 30113
IFB1Ymxpc2hlZA== 30114
ZXZlcnk= 30115
IHRlY2hub2xvZ2ljYWw= 30116
bHN4 30117
IGlycml0 30118
QWRkaXRpb25hbA== 30119
IGRlbGltaXRlcg== 30120
X2xhbmd1YWdl 30121
LWFyZWE= 30122
Ym95cw== 30123
IFR1YmU= 30124
IHdhdA== 30125
IG1lY2hhbmljcw== 30126
X293bmVy 30127
U3BlbGw= 30128
IFN0b3JpZXM= 30129
LkFwcGVuZExpbmU= 30130
VGFibGVWaWV3 30131
aGVt 30132
c3RpY2s= 30133
b2xsb3dlcg== 30134
SUZG 30135
IFVW 30136
b2xsaXNpb24= 30137
U1VC 30138
IGNvbXBhcmFibGU= 30139
IGRvbmRl 30140
c2FsZXM= 30141
bGx2bQ== 30142
IH1dLAo= 30143
T1RUT00= 30144
IFB1cnBvc2U= 30145
TGFi 30146
IGludGVydmlld2Vk 30147
b2lz 30148
YXNpbA== 30149
LnNldElk 30150
IEluc3RydWN0aW9u 30151
LS0+ 30152
IE1vZGlmaWVk 30153
YXRpb25hbGx5 30154
IE1lZXRpbmc= 30155
6K+v 30156
I3JlZ2lvbg== 30157
IHJvdXRpbmc= 30158
LmZvY3Vz 30159
IFlvdXRo 30160
PEQ= 30161
IE5hZw== 30162
Y29udGFjdHM= 30163
IGZvcm1pbmc= 30164
IG1pZQ== 30165
JyxbJy4uLw== 30166
IEJQ 30167
IGFwcGV0 30168
IFRlYWNoZXI= 30169
IFRQ 30170
IGFubnVhbGx5 30171
b3V0ZWRFdmVudEFyZ3M= 30172
IFNwZWFrZXI= 30173
IHJlbmFtZQ== 30174
Q0ZH 30175
KCIvLw== 30176
5o6l 30177
L3BhZ2Vz 30178
IHByw6lz 30179
IFNwZWxs 30180
LkFsbG93 30181
IElOVEVSUlU= 30182
ICgj 30183
4oCZCgo= 30184
X0dlbmVyaWM= 30185
Lmltc2hvdw== 30186
X3RpbQ== 30187
LWZhY2U= 30188
KCYo 30189
YXRpbnVt 30190
IHJldm9sdXRpb25hcnk= 30191
IEhvdXJz 30192
cmFpbg== 30193
IGFueXRpbWU= 30194
IGFiYg== 30195
LmpzcA== 30196
U2Nyb2xsVmlldw== 30197
IFRydXRo 30198
IGFudGljaXBhdGVk 30199
IGFjY2VudA== 30200
LmNoZWNrZWQ= 30201
IHNwZWNpZmllcw== 30202
IGNhZg== 30203
IGNlbGxwYWRkaW5n 30204
IGNvb2tlZA== 30205
IEh1Z2g= 30206
cGVlaw== 30207
X1JBVEU= 30208
IGRvcm0= 30209
Lw0K 30210
SVZJVFk= 30211
LkNvbnRyb2xsZXI= 30212
KHBhcnQ= 30213
LmNvbnN0cmFpbnQ= 30214
IGludmFzaW9u 30215
TU9WRQ== 30216
IGdsdWM= 30217
bGVuYW1l 30218
IGFtZW4= 30219
ZW5nbGlzaA== 30220
IFN3aXR6ZXJsYW5k 30221
IjsKCgo= 30222
cGVzdA== 30223
LmNvbGxlY3Q= 30224
Tmli 30225
IERpY3Q= 30226
IEVtYg== 30227
KHN1YmplY3Q= 30228
IG91dHJhZ2U= 30229
IGRlY2lkaW5n 30230
IHNlbnRlbmNlZA== 30231
RmVjaGE= 30232
IkE= 30233
IHF1ZXI= 30234
IGZvbnRGYW1pbHk= 30235
IHF1YWRy 30236
LVk= 30237
X0NBQ0hF 30238
IGFuYWx5emVk 30239
IGdhaW5pbmc= 30240
IEFnYWluc3Q= 30241
IFNvdWw= 30242
dGF1 30243
IGxpZ2h0d2VpZ2h0 30244
IFRG 30245
IEVmZmVjdHM= 30246
LlR5cGVz 30247
LmFkZENsYXNz 30248
IHZlZ2Fu 30249
6YE= 30250
Lici 30251
IEV4cGxvcmVy 30252
LmRldGVjdA== 30253
LnNoaWZ0 30254
IG9ibGlnYXRpb25z 30255
bGFzdE5hbWU= 30256
IGFzc29jaWF0aW9ucw== 30257
IFRpbWVTcGFu 30258
dW50ZXI= 30259
IEZyZXNo 30260
Q29tcGF0aWJsZQ== 30261
UHVi 30262
aWRnZXM= 30263
Lm9wdGlvbg== 30264
dmFyaQ== 30265
Lmhhc2hDb2Rl 30266
IGdlYg== 30267
LnNlY3Rpb24= 30268
LW5vdA== 30269
IFN1Ym1pdA== 30270
VE4= 30271
cmVnaXN0cnk= 30272
X21lZGlh 30273
IG5hag== 30274
ZmZ0 30275
IG1hdGU= 30276
LXRoaXJk 30277
IHBvY2tldHM= 30278
ZXN0YQ== 30279
IGJlbnQ= 30280
IE5vcmQ= 30281
IHJldGFpbGVycw== 30282
IE1vcnJpcw== 30283
LiIiIgoK 30284
V3Jvbmc= 30285
IMWb 30286
UmF5 30287
LmVj 30288
IEJpbmQ= 30289
X0hBTkQ= 30290
KG5vbg== 30291
aXNWYWxpZA== 30292
IHNpbWlsYXJseQ== 30293
X0xJTUlU 30294
IGR5bmFtaWNz 30295
IGRpc3RpbmN0aW9u 30296
44GG 30297
PE4= 30298
IG9ydGg= 30299
IFRveW90YQ== 30300
IEthdGU= 30301
IExT 30302
b3JpZQ== 30303
IFNwcmluZ3M= 30304
IGZyZWFr 30305
bGFzdG5hbWU= 30306
X01VTFQ= 30307
LXN0ZXA= 30308
Iig= 30309
QUREUg== 30310
IGVudGVydGFpbmluZw== 30311
X0NPTkY= 30312
IGRlY29kZWQ= 30313
IHN0cmVhaw== 30314
IHdhaXRlZA== 30315
IG5vdGlmaWVk 30316
cm9kdWNlZA== 30317
dmlzdWFs 30318
LkxheW91dFBhcmFtcw== 30319
5rA= 30320
ZXNpYW4= 30321
Zml0cw== 30322
c3ByaW5n 30323
IEJlcm5pZQ== 30324
VXNlckRlZmF1bHRz 30325
IHBlZGVzdA== 30326
QXBwZWFyYW5jZQ== 30327
IFdpa2k= 30328
IE5PVElDRQ== 30329
IHNzaA== 30330
IGR1cmFudGU= 30331
IFppcA== 30332
xLFy 30333
IE5BVE8= 30334
IHR3ZWx2ZQ== 30335
IHJveWFs 30336
77g= 30337
IG1lcmNoYW50 30338
IEZ1cm5pdHVyZQ== 30339
J10pLAo= 30340
LFg= 30341
IGZvbGRlcnM= 30342
IEdhdGU= 30343
CWZ1bmM= 30344
cGljaw== 30345
X3VzdWFyaW8= 30346
IFZlcm0= 30347
bWVudGlvbg== 30348
dXJwb3Nl 30349
IGFsZXJ0cw== 30350
eGlvdXM= 30351
X3NpZw== 30352
IEZ1 30353
ICg6 30354
IGR1bWI= 30355
5YWz 30356
IGFjY3VyYXRlbHk= 30357
6YeN 30358
UkI= 30359
LXNjcmVlbg== 30360
IFZFUg== 30361
am91cg== 30362
IHJvbWFuY2U= 30363
dWNjZWVk 30364
LmNob2ljZQ== 30365
IGFkaXA= 30366
X2RpbXM= 30367
U2VyaWFsaXphYmxl 30368
44KL 30369
LmpvYg== 30370
IHByb2c= 30371
dWNoYXI= 30372
IGdlbnRseQ== 30373
IFJTUw== 30374
aWN0dXJlZA== 30375
X0VOQUJMRUQ= 30376
CWxhYmVs 30377
YXdrcw== 30378
IEVuc3VyZQ== 30379
cmVtZW1iZXI= 30380
7KCV 30381
IHRyYW5zbWl0 30382
e3sk 30383
LlRyYW5zYWN0aW9u 30384
dXJzZQ== 30385
X3JlbGF0aXZl 30386
IHNpemVk 30387
IFhY 30388
IFByaW5jZXNz 30389
IExhcnJ5 30390
IHByw7M= 30391
INGB0YLRgA== 30392
IHNpc3RlcnM= 30393
ZXN0cnVjdA== 30394
IGNoZWNrcG9pbnQ= 30395
Omxlbmd0aA== 30396
IENhcmxvcw== 30397
L2ljb24= 30398
X1RBUkdFVA== 30399
VG9rZW5z 30400
IHBhdGllbmNl 30401
IFNlbGVjdGVk 30402
cXR5 30403
LnNob3dNZXNzYWdl 30404
IHdpbGRsaWZl 30405
IFByb3Bz 30406
Ym0= 30407
LWFycm93 30408
IHBhcmNlbA== 30409
ZmlyZWJhc2U= 30410
IEJlbmphbWlu 30411
Y2Vzc28= 30412
LnRpbQ== 30413
IEdhcmM= 30414
LmFueQ== 30415
IEhPV0VWRVI= 30416
IEtv 30417
IGdyYWJiZWQ= 30418
X2ZyYW1lcw== 30419
IG9iamVjdEF0SW5kZXg= 30420
IEFEVklTRUQ= 30421
IHN1YnVy 30422
CUdM 30423
IH0pfQo= 30424
LWxlbmd0aA== 30425
7Iuc 30426
IFBvdHRlcg== 30427
X2J1ZmY= 30428
Lmd1aQ== 30429
IEVuY29kaW5n 30430
RWxlY3Q= 30431
LW1lc3NhZ2U= 30432
IO+/vQ== 30433
IMiZaQ== 30434
IEFyZ3VtZW50TnVsbEV4Y2VwdGlvbg== 30435
0LDRhtC4 30436
IG1pbmltaXpl 30437
IHJlc3BvbmRpbmc= 30438
JF9bJw== 30439
IEluZGl2aWR1YWw= 30440
w6Fj 30441
IElOVEVS 30442
IG1hc3R1cmI= 30443
IEJpbg== 30444
KCck 30445
65Oc 30446
IG9wZW5seQ== 30447
ID48 30448
IHVudG8= 30449
b2xvZ2ljYWxseQ== 30450
IE11bA== 30451
VklESUE= 30452
IHNsaW0= 30453
IENvbW1pc3Npb25lcg== 30454
KG9u 30455
IHVuZGVybmVhdGg= 30456
L2Ri 30457
dm90ZQ== 30458
KE1lc3NhZ2U= 30459
IFBvcGU= 30460
RGVmaW5lZA== 30461
IHN3aWZ0 30462
dXJm 30463
IGFkYXB0ZWQ= 30464
U0VM 30465
IHJldmVudWVz 30466
IGRpdmluZQ== 30467
PXk= 30468
R3JhZGllbnQ= 30469
X2FjdA== 30470
IC8qITw= 30471
IHBvbHlnb24= 30472
IEZEQQ== 30473
IENhcnI= 30474
YXRhYmxlcw== 30475
KHN0ZG91dA== 30476
IHJlZnJpZ2Vy 30477
IGNvb3JkaW4= 30478
YXZvcml0ZXM= 30479
0YjQuA== 30480
IGNvbXBhc3Npb24= 30481
IFBPU1NJQklMSVRZ 30482
LXNlY29uZGFyeQ== 30483
dXJhY3k= 30484
IGNvbXByb21pc2U= 30485
X0FW 30486
X29z 30487
IGJlc2lkZQ== 30488
g50= 30489
IGxu 30490
LnBsdWdpbnM= 30491
Q2FwYWNpdHk= 30492
YWxhaA== 30493
LmJpbg== 30494
IENSQw== 30495
X2JhbGFuY2U= 30496
IGZsZXhEaXJlY3Rpb24= 30497
IGFtYml0 30498
IG5pY2tuYW1l 30499
IEZvcmNlcw== 30500
Q0xF 30501
IFNoZWxs 30502
IHNhaWw= 30503
IFdyaXRlcg== 30504
IEFsaWNl 30505
ZHc= 30506
IEluZGlhbnM= 30507
IE1hcnNoYWxs 30508
X1NSQw== 30509
IG5vcm1hbGl6ZWQ= 30510
IEphZw== 30511
44KS 30512
emVpdA== 30513
cnBj 30514
w61j 30515
LmlubGluZQ== 30516
IHRyYXZlcnM= 30517
X251bWVyaWM= 30518
IHV0aWxpdGllcw== 30519
IGV2YWM= 30520
SU5QVVQ= 30521
CXJlZ2lzdGVy 30522
TVg= 30523
IENhbXBiZWxs 30524
IGRhdGFzZXRz 30525
IGRlbWFuZGVk 30526
IGluaXRpYWxTdGF0ZQ== 30527
Z2Fu 30528
IGVp 30529
VW5leHBlY3RlZA== 30530
LXdlYg== 30531
dHJhaXQ= 30532
LFk= 30533
IFRvZGQ= 30534
IHNrZWxldG9u 30535
IG9wdGltaXpl 30536
56ys 30537
IFVwb24= 30538
IFN0T2JqZWN0 30539
IGFwbGlj 30540
Lic8Lw== 30541
QUND 30542
YWxvdXM= 30543
IGhhc2hDb2Rl 30544
IEJpYg== 30545
SU5BTA== 30546
IGludmlzaWJsZQ== 30547
IGhldGVy 30548
IHNhZmVy 30549
fS8v 30550
LnRoZW1l 30551
Lm5hdmlnYXRpb25Db250cm9sbGVy 30552
X21lc2g= 30553
c2tpbGw= 30554
IFZpb2w= 30555
wrI= 30556
IEVPRg== 30557
IEtp 30558
eW1tZXRyaWM= 30559
IG1heGxlbmd0aA== 30560
xaM= 30561
ZnJpZW5kcw== 30562
IEV2YW5z 30563
IGxlbW9u 30564
ICgu 30565
U2xpZGU= 30566
IFRoYWlsYW5k 30567
IENhbm4= 30568
IGFtZW5k 30569
IGNpcg== 30570
IHNpbGx5 30571
ZXNpbWFs 30572
X3BpYw== 30573
cHJvY2Vzc29y 30574
SmF2YVNjcmlwdA== 30575
IGV2aWRlbnQ= 30576
X2Rp 30577
PlA= 30578
dnJvbg== 30579
LlVO 30580
IHBhaW50ZXI= 30581
aXphcnJl 30582
IGxhdg== 30583
IHBvbQ== 30584
cHJlZw== 30585
PWZ1bmN0aW9u 30586
KHNlcmlhbA== 30587
aWZpY2E= 30588
dW1pbmc= 30589
5Zyw 30590
44GC 30591
LW9w 30592
VUNI 30593
IEhlbmQ= 30594
LnByb3BUeXBlcw== 30595
IHlv 30596
IHJvdXRpbmVz 30597
IGNhcmluZw== 30598
U2Vt 30599
IHJlc2VydmVz 30600
IHByaW9yaXRpZXM= 30601
cmVkaXRz 30602
SVNUUg== 30603
Q29udGVudFR5cGU= 30604
IFNjaHc= 30605
L21lZGlh 30606
IGVzdHI= 30607
IGNsaW1iaW5n 30608
LXdlZWs= 30609
Y2hlcmNoZQ== 30610
c2Vuc29y 30611
VG9BcnJheQ== 30612
IE1vbnRyZWFs 30613
IGNsb3Vkcw== 30614
IEluamVjdGFibGU= 30615
IFJpY2U= 30616
IHByb3BhZ2FuZGE= 30617
X3Byb3ZpZGVy 30618
IGluZG9vcg== 30619
IGluYXVn 30620
IGRpcGxvbQ== 30621
IG1lc3NhZ2luZw== 30622
X211dA== 30623
5aaC 30624
IGt3 30625
T05T 30626
YXJpYW5z 30627
UlBD 30628
KV0NCg== 30629
LXJheQ== 30630
IFNvcg== 30631
bWFsbA== 30632
IG1hcmtldHBsYWNl 30633
IHZ0aw== 30634
TWE= 30635
b2dhbg== 30636
aWdp 30637
IHNwb25zb3JlZA== 30638
IERhbmk= 30639
LlNFVkVS 30640
PicuJA== 30641
bXVsdGlwYXJ0 30642
IFdvbA== 30643
IHRhYmxlTmFtZQ== 30644
IFVzZXJuYW1l 30645
QmFja2dyb3VuZENvbG9y 30646
IGZyaWdodA== 30647
X0VNQUlM 30648
U2VwdGVtYmVy 30649
X3ZhbHM= 30650
b3BpYQ== 30651
IHNwb3R0ZWQ= 30652
LUNo 30653
IGRhdGFTb3VyY2U= 30654
LyIK 30655
0LXQutGC 30656
IFJlcXVlc3RNZXRob2Q= 30657
IFJlcGxhY2U= 30658
LWRv 30659
YWhu 30660
IFBoRA== 30661
XS4KCg== 30662
Tk9O 30663
Z2VtZW50 30664
IFRocg== 30665
IHF1aWV0bHk= 30666
IHRvcnR1cmU= 30667
IHRlYXM= 30668
IENZ 30669
IGF0cg== 30670
ZGV2ZWxvcG1lbnQ= 30671
LWRldGFpbA== 30672
IGxpZ2h0ZXI= 30673
IGFyZ3Vpbmc= 30674
IGRlc2VydmVz 30675
IGN1cnJpY3VsdW0= 30676
X0NPTlRFWFQ= 30677
xYJ5 30678
SElURQ== 30679
CUlE 30680
L3VwbG9hZHM= 30681
IHRpdHM= 30682
cmVv 30683
X2Ryb3A= 30684
LlVURg== 30685
IHBpY2t1cA== 30686
IGdyb2Nlcnk= 30687
IFB1cmU= 30688
IGVhc2llc3Q= 30689
UGhpbA== 30690
LmZlYXR1cmU= 30691
KCIq 30692
IGludmVzdG9y 30693
dG9r 30694
IGphcg== 30695
TG9z 30696
4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU 30697
LnF1ZXVl 30698
LXNwZWVk 30699
TWFs 30700
dW1ibHI= 30701
IENPTlNU 30702
IEhSRVNVTFQ= 30703
IERhbmNl 30704
KGZpbGVQYXRo 30705
IGF0dHJpYnV0ZWQ= 30706
4KWN 30707
IEJ1bmQ= 30708
Y29pbnM= 30709
IHPDo28= 30710
IHBpcg== 30711
cGVyc29uYWw= 30712
IHByZWxpbQ== 30713
IHByb3Bvc2U= 30714
IFRM 30715
XV0p 30716
IFN1YnNjcmlwdGlvbg== 30717
IEtyZQ== 30718
LGxlbg== 30719
LkZpcnN0T3JEZWZhdWx0 30720
KS0t 30721
X3Byb2R1Y3Rz 30722
LkdldEJ5dGVz 30723
U2hpcA== 30724
IGVuY3J5cHQ= 30725
IFNH 30726
IE15c3Q= 30727
aGly 30728
IGl0ZXJhdGU= 30729
IGludGVuZA== 30730
Lm1vY2tpdG8= 30731
IGNoYXB0ZXJz 30732
KGFuZ2xl 30733
IFZsYWQ= 30734
6K6+ 30735
Jy4KCg== 30736
UmVzcG9uc2VCb2R5 30737
IEFiZA== 30738
ZGVhbA== 30739
IGJhcnJpZXJz 30740
LW91dGxpbmU= 30741
YmlsbA== 30742
IEZhbGxz 30743
X3NlY29uZA== 30744
LmluY2x1ZGU= 30745
LmNlaWw= 30746
IG9jY3VwYXRpb24= 30747
cGhvbnk= 30748
Lm1vdmVUbw== 30749
IEplbm5pZmVy 30750
QVNURVI= 30751
OyI+PA== 30752
IEVuYWJsZWQ= 30753
IHRlcm1pbmF0ZQ== 30754
IElv 30755
bGF0aW9ucw== 30756
IFRIRU9SWQ== 30757
IGVhcmxpZXN0 30758
IHJhY2s= 30759
IFNjYXI= 30760
c2hha2U= 30761
Y2hpcA== 30762
IHV2 30763
IGFsbGlhbmNl 30764
0L/QuNGB 30765
IEdPT0RT 30766
emlvbmU= 30767
IFZJ 30768
IHst 30769
IGZpbHRlcmluZw== 30770
IG1pc2Nvbg== 30771
LkRvY2tTdHlsZQ== 30772
IGJ1c2g= 30773
IGp1bms= 30774
5ow= 30775
IFFVRQ== 30776
IGhvb2tz 30777
IGZpcm13YXJl 30778
IG1pZGRsZXdhcmU= 30779
ZGlj 30780
IE9ha2xhbmQ= 30781
IGFycml2ZXM= 30782
UGF5bG9hZA== 30783
cGl4ZWw= 30784
XXw= 30785
IHN0YXJ0RGF0ZQ== 30786
LlBSTw== 30787
X2F1ZGlv 30788
IG1pZGZpZWxk 30789
aWdpZGJvZHk= 30790
IFN3aXNz 30791
IENsaXA= 30792
IER1bXA= 30793
IFRleHRCb3g= 30794
IGdlaA== 30795
eWllbGQ= 30796
b2Rz 30797
IHJlZmVyZW5kdW0= 30798
QmFja2VuZA== 30799
IENyZWFt 30800
IGRvbWluYXRlZA== 30801
IEFyY2hpdmU= 30802
IHJpZGVycw== 30803
LnByZXBhcmVTdGF0ZW1lbnQ= 30804
IHF1YW5kbw== 30805
IGNoZWY= 30806
d2lraQ== 30807
aW5lbA== 30808
YW1wbGluZw== 30809
KCJcXA== 30810
IHNhZw== 30811
X3Byb3h5 30812
44GV 30813
cGRv 30814
LmdldEVsZW1lbnRzQnlUYWdOYW1l 30815
IGRlbW9uc3RyYXRpb24= 30816
IE5QQw== 30817
IGFyY2hpdm8= 30818
ZW5kYW5jZQ== 30819
IGVmZmljaWVudGx5 30820
KGFjdHVhbA== 30821
LnRhYmxlVmlldw== 30822
IG11c2g= 30823
IGJlYXJz 30824
X3RocmVhZHM= 30825
amFz 30826
YWh1bg== 30827
IG5ldXJhbA== 30828
IGRlc2lnbmluZw== 30829
IEdEUA== 30830
IGxpZnRlZA== 30831
55uu 30832
IEpvaW50 30833
IEluY2x1ZGU= 30834
IEdpYW50cw== 30835
IHdpdGhkcmF3YWw= 30836
IFJlbnQ= 30837
bmF0aXZl 30838
IFNlZWs= 30839
Z3Jlc3Npb24= 30840
X0NQVQ== 30841
XFM= 30842
IFNoaWVsZA== 30843
IHNvbGlj 30844
IGJvb20= 30845
eWVjdG8= 30846
IG1hbnVmYWN0dXJl 30847
IOKAiw== 30848
IGJib3g= 30849
IGVhcnRocXU= 30850
b2xsZWN0b3Jz 30851
OkAiJQ== 30852
IGxvb3Bz 30853
SmU= 30854
YWxraW5n 30855
IFdoYXRz 30856
IEJveXM= 30857
LmJvb2s= 30858
QVJHRQ== 30859
X3BpeGVs 30860
IHN1c3BlY3Rz 30861
zrk= 30862
dXNw 30863
IEJNVw== 30864
aWVjZXM= 30865
KHBlcnNvbg== 30866
5byA 30867
6bs= 30868
IFBvZGNhc3Q= 30869
IGJvdQ== 30870
KEl0ZW0= 30871
w7s= 30872
KElucHV0 30873
SHR0cEdldA== 30874
IGJ1cmc= 30875
KV4= 30876
Qk9BUkQ= 30877
Ki8s 30878
IGd1bHA= 30879
IEJlbm4= 30880
IGRlY2tz 30881
LnN0YXR1c0NvZGU= 30882
IGFjdXRl 30883
IGh1Zw== 30884
dWd1 30885
IHBsZWQ= 30886
LCIl 30887
aGFwZQ== 30888
INC30LDQvw== 30889
IE1haW5l 30890
LnJlYWw= 30891
IGRhbGFt 30892
IE1pbm9y 30893
LkZsb2F0 30894
ZGlzcA== 30895
IHRs 30896
IGVuY291bnQ= 30897
PT4k 30898
IGZn 30899
dGVlcw== 30900
IFJlY29tbQ== 30901
w6Rs 30902
IGNoZW1pc3RyeQ== 30903
QmxvY2tz 30904
T0lE 30905
IGZvcmV4 30906
IEFwcGVuZA== 30907
IHsq 30908
IFN1cHBseQ== 30909
Q0dGbG9hdA== 30910
KGJs 30911
IGF0ZQ== 30912
YWRvcmE= 30913
IGd1c3Q= 30914
QXNzb2Np 30915
Pi4K 30916
RkVUQ0g= 30917
LnNlcmlhbA== 30918
d2lkZ2V0cw== 30919
YXJkbGVzcw== 30920
aWVmcw== 30921
X0ZVTEw= 30922
ZXJuZXRlcw== 30923
IFByZWQ= 30924
2K0= 30925
5LqL 30926
dWJlcm5ldGVz 30927
IExhdXJh 30928
IGxhYmVsZWQ= 30929
SGlnaGxpZ2h0 30930
IGFubm95aW5n 30931
L3VwZGF0ZQ== 30932
KGRlc2NyaXB0aW9u 30933
IGludGltaWQ= 30934
JGM= 30935
IikpKQo= 30936
LkFQ 30937
IFtdKg== 30938
IEVYSVQ= 30939
Lkhvc3Q= 30940
IE9QRU4= 30941
LnNlbmRNZXNzYWdl 30942
X2NhbWVyYQ== 30943
X3RpbGU= 30944
IHRoZXJt 30945
b25vbW91cw== 30946
IGRpc2Fkdg== 30947
IG5hYXI= 30948
aW5kZXhPZg== 30949
IFBQ 30950
LnByb3RvY29s 30951
QUZF 30952
IHRleHR1cmVz 30953
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj 30954
dW1iYWk= 30955
LnN0YXRz 30956
IEdF 30957
IGll 30958
IFNURA== 30959
IE1hbm4= 30960
LnJlZmxlY3Q= 30961
S0I= 30962
IGRpdmU= 30963
Lndhdg== 30964
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 30965
L3NldHRpbmdz 30966
LmxpZmVjeWNsZQ== 30967
IGRhdWdodGVycw== 30968
b3J1cw== 30969
dWJlcg== 30970
TklORw== 30971
c3RyaQ== 30972
IFRpcA== 30973
IHpu 30974
IHN3aXRjaGVk 30975
aW5ldA== 30976
dWZmeQ== 30977
IFRyYW5zcG9ydGF0aW9u 30978
KGNvbmY= 30979
ZnJpY2E= 30980
IFhM 30981
IExlYWQ= 30982
X3BlcmNlbnQ= 30983
PE1hcA== 30984
IHRocnVzdA== 30985
b3Ji 30986
aWtr 30987
IHRyYXVtYQ== 30988
QWNjZXNzb3I= 30989
IEZpdA== 30990
IFN0cmluZ0J1ZmZlcg== 30991
ZXhwbA== 30992
KHNjcmVlbg== 30993
IGF1ZGllbmNlcw== 30994
IE9QVElPTg== 30995
X3JvdW5k 30996
W25vZGU= 30997
YmVo 30998
LT5fXw== 30999
cGVybWlzc2lvbnM= 31000
IERldGVybWluZQ== 31001
Lk1hbg== 31002
IGFkdmFuY2Vz 31003
LklucHV0U3RyZWFt 31004
IHN0cm9uZ2VzdA== 31005
IGVCYXk= 31006
ICMt 31007
IGRpcm5hbWU= 31008
IFNNUw== 31009
IG1lZGljYXRpb25z 31010
IGFtZW5kZWQ= 31011
IGNodXJjaGVz 31012
IEltcGVyaWFs 31013
JHJvdw== 31014
IE1hZGlzb24= 31015
IEluc3A= 31016
IGFmZmFpcg== 31017
IHBzeWNob2xvZ3k= 31018
dmg= 31019
IHNldmVyaXR5 31020
4oCQ 31021
IHN0cmlwcw== 31022
QUg= 31023
dmVydGlzaW5n 31024
IGNvbnNl 31025
SU1BR0U= 31026
IFN0YXRz 31027
CXNj 31028
LkN1cnNvcg== 31029
IGZyZWV6ZQ== 31030
c3Nvbg== 31031
KHhtbA== 31032
IFN1c2Fu 31033
LnRpbGU= 31034
ZWRlZA== 31035
ICAgIAkJCQ== 31036
dWVsbGU= 31037
IE1pdGNoZWxs 31038
YmFzZWQ= 31039
T3BlcmFuZA== 31040
veaVsA== 31041
IEZG 31042
CXN0cmNweQ== 31043
b3VuY2Vz 31044
aWxkbw== 31045
LmV4ZWN1dGVRdWVyeQ== 31046
IGFwcHJvYWNoaW5n 31047
IFNldmVu 31048
IG51dHM= 31049
IHJpYw== 31050
YXNzaWdubWVudA== 31051
IGNhbGN1bGF0b3I= 31052
IE11cnBoeQ== 31053
IEJvdQ== 31054
7YQ= 31055
IGJ1dHQ= 31056
IHRpY2tz 31057
UHJvamVjdHM= 31058
aWxpYg== 31059
LnRleHRDb2xvcg== 31060
bW92 31061
X2xvZ28= 31062
KHRlbXBsYXRl 31063
IElOSVQ= 31064
IGltYWdlVmlldw== 31065
c2NyaXB0aW9ucw== 31066
T1JJVFk= 31067
Q29uc3VtZXI= 31068
IHVucHJlY2VkZW50ZWQ= 31069
IHRvdXJpc3Q= 31070
IGJyb24= 31071
IGNvbnRyYWN0b3I= 31072
IGxpY2VuY2U= 31073
IE5hbQ== 31074
5q8= 31075
KHRyYW5zZm9ybQ== 31076
X0FUVA== 31077
UHJlZg== 31078
IEdhbQ== 31079
IHZlc3NlbHM= 31080
IGhhdg== 31081
TGF0ZXI= 31082
LlRvTG93ZXI= 31083
IHVybHM= 31084
IGJyZWFrZG93bg== 31085
IHBlbmFsdGllcw== 31086
IGZvc3Rlcg== 31087
IFVF 31088
IGNsdWU= 31089
Y29tZWQ= 31090
5ZCN56ew 31091
LW1haW4= 31092
IHB0cw== 31093
IGNvdW50ZWQ= 31094
aWN0cw== 31095
L3Bvc3Q= 31096
IGdldGF0dHI= 31097
IHBpbmc= 31098
QU5DRUw= 31099
IHBlYw== 31100
0YXQvtC0 31101
YW50b20= 31102
IEJsdWVwcmludA== 31103
IEV2ZW50RW1pdHRlcg== 31104
IGzDpA== 31105
5rI= 31106
IHN0cmF3 31107
KGNvbXA= 31108
J3VuZQ== 31109
Pk4= 31110
LWNsaWVudA== 31111
ZXNNb2R1bGU= 31112
LWJhc2U= 31113
IHJldHJlYXQ= 31114
X3NpbXBsZQ== 31115
CQkJCQkJIA== 31116
ZmVl 31117
JykNCg0K 31118
Q29udHJvbEl0ZW0= 31119
IHN1YnNjcmliZXJz 31120
cGxlYXNl 31121
IEVmZg== 31122
IHBvdW5k 31123
IEJ5dGVz 31124
IFRlYQ== 31125
X2FjdGl2aXR5 31126
IG1heGlt 31127
IG9wY29kZQ== 31128
QlNE 31129
LmNvbnN0YW50 31130
O30= 31131
b21icmVz 31132
IGNhcmVlcnM= 31133
KS4KCgoK 31134
IHNwcmVhZGluZw== 31135
LWV4cGFuZGVk 31136
IE9yZA== 31137
YW1hcmlu 31138
IG1vYmlsaXR5 31139
VW5mb3J0dW5hdGVseQ== 31140
YWtr 31141
Tkw= 31142
X3JlZGlyZWN0 31143
IFBH 31144
IFNlbnNvcg== 31145
Ym9s 31146
dGFw 31147
X01FTU9SWQ== 31148
IFVJQWxlcnQ= 31149
cGxpdHVkZQ== 31150
V2Vic2l0ZQ== 31151
IExvZ28= 31152
bG92ZQ== 31153
W2luZA== 31154
IGFsdG9nZXRoZXI= 31155
IHdvbmRlcmVk 31156
IGVzcGVy 31157
IExpYmVyYWw= 31158
IG9zcw== 31159
IGVsaXQ= 31160
IHN0aWZm 31161
b2RveA== 31162
X21lbnRpb25z 31163
IERvdWdsYXM= 31164
X3BpZA== 31165
IENL 31166
IGluaXRXaXRoRnJhbWU= 31167
LmJsb2c= 31168
cGtn 31169
YW5naGFp 31170
UVVJUkVE 31171
dXU= 31172
IG1rZGly 31173
QVRBTA== 31174
IHVuaA== 31175
aW5jZXM= 31176
c3Ro 31177
IGh5cG90aGVzaXM= 31178
IGNhdGE= 31179
IFRC 31180
IENsYXI= 31181
IHByZWRlY2Vzcw== 31182
IHNpdHVhdGVk 31183
LXdvcmxk 31184
KSkv 31185
IGhlYWRsaW5lcw== 31186
LnN0YXQ= 31187
IG91dGJyZWFr 31188
c3BhdGg= 31189
X0ZMQUdT 31190
IFNlcnZsZXRFeGNlcHRpb24= 31191
U3Vu 31192
RlJPTQ== 31193
IERpcg== 31194
44O744O744O7 31195
X2Nvb3Jk 31196
IE9wdGlt 31197
TW9uaXRvcg== 31198
LmJpdA== 31199
WFhY 31200
IHRvZGFz 31201
ZmVsZA== 31202
0YDQuA== 31203
aW1pcg== 31204
IHBvbGl0aWNhbGx5 31205
IG1vbGVjdWxhcg== 31206
IHRyYWRlZA== 31207
IHt7JA== 31208
IFN3ZWRpc2g= 31209
ICdALw== 31210
X1JFQUw= 31211
IHdhcmVob3VzZQ== 31212
dG9kYXk= 31213
LEw= 31214
b3Jw 31215
PHNlY3Rpb24= 31216
LWJy 31217
eW1l 31218
IFVzZXJTZXJ2aWNl 31219
IGxpYmVydHk= 31220
IG1vbWVudG8= 31221
KEltYWdl 31222
PHNpemU= 31223
U2No 31224
IGpvZw== 31225
aW9sb2d5 31226
YXJlbnRseQ== 31227
IHF1YW50dW0= 31228
IEFidQ== 31229
IHJpbQ== 31230
IG1hbmE= 31231
Rm9udFNpemU= 31232
QnVpbGRpbmc= 31233
c3RhaXJz 31234
QUlMQUJMRQ== 31235
ICYn 31236
IHNlY3Q= 31237
IHNpZ2g= 31238
KGJhdGNo 31239
LklDb250YWluZXI= 31240
cG9sbA== 31241
IENvcnBz 31242
zrU= 31243
YXJ1 31244
IEtheQ== 31245
LnJhbmdl 31246
X2NsaWNrZWQ= 31247
IFJvYmVydHM= 31248
Lk5ldHdvcms= 31249
ZmluaXNo 31250
LU1hbg== 31251
IGNvbGxlZ2Vz 31252
IEZpbmU= 31253
IikpLAo= 31254
ZmlsbQ== 31255
IHJlbWluZGVk 31256
IGdlc3R1cmU= 31257
b3V0aWw= 31258
IHRocmVhZGluZw== 31259
IG9iamV0 31260
IHRvdXJz 31261
YWN0aXZhdGVk 31262
Lm1rZGly 31263
PXVzZXI= 31264
IHJlZGU= 31265
ZsO8 31266
X1NZU1RFTQ== 31267
cHY= 31268
IGNvbmdy 31269
IG1hc3Nhc2pl 31270
IHByYWN0aXRpb24= 31271
VW5pdmVyc2l0eQ== 31272
IHRhYmluZGV4 31273
0Jg= 31274
U2V0cw== 31275
IGNvdW50aWVz 31276
Z3Vlc3Q= 31277
ZmFu 31278
IHdvcmRlbg== 31279
LmRp 31280
0L3QsNGH 31281
wr8= 31282
aWdEZWNpbWFs 31283
IHNob3Jl 31284
IGfDtg== 31285
IHJlcGFpcnM= 31286
IGhlbHBlcnM= 31287
IGNlbnRlcmVk 31288
T0xMT1c= 31289
IG1hcFN0YXRlVG9Qcm9wcw== 31290
IGNlbnRz 31291
PEE= 31292
IGV4cGVjdGF0aW9u 31293
T2N0b2Jlcg== 31294
IGJnY29sb3I= 31295
Y2FsZXM= 31296
LkNPTg== 31297
IFZlbA== 31298
IGNyeWluZw== 31299
LXNlYXNvbg== 31300
IGZ1bmN0aW9uaW5n 31301
X0xPQ0FUSU9O 31302
w7xzcw== 31303
YmVyeQ== 31304
UGFyYQ== 31305
b21pbmF0b3I= 31306
LWxl 31307
IGV0aGljYWw= 31308
aGFzaHRhZ3M= 31309
ZW1wbG8= 31310
IG7Dum1lcm8= 31311
KGFjdGl2aXR5 31312
LlN0b3A= 31313
LnN0cmZ0aW1l 31314
SUxE 31315
IHRvZQ== 31316
CU5vZGU= 31317
IikNCg0K 31318
IFB1ZXJ0bw== 31319
IGV4ZWN1dGluZw== 31320
IEdVSUQ= 31321
IG9wcG9zaW5n 31322
YWxwaA== 31323
IGV4aGliaXQ= 31324
X2ZsYXNo 31325
IG1laWxsZQ== 31326
IGpzb25PYmplY3Q= 31327
SGVybw== 31328
YWludGVk 31329
X0RPTQ== 31330
IHdpbA== 31331
IHNsb3Bl 31332
IG3DpQ== 31333
IElyYXFp 31334
IG9yZ2FuaXpl 31335
CWpRdWVyeQ== 31336
SFVE 31337
c2hpbmU= 31338
Lndl 31339
IFNraWxscw== 31340
cG9uc29y 31341
IGNvbmNsdXNpb25z 31342
IHJlZm9ybXM= 31343
IHJlbHVjdA== 31344
bmFtZWQ= 31345
IE9saXZlcg== 31346
IC8vfQo= 31347
LWxvb2tpbmc= 31348
IGZvZw== 31349
IEhP 31350
IEZyaWVk 31351
IGluZXZpdGFibGU= 31352
IERhdGFHcmlkVmlldw== 31353
SG91cg== 31354
aWxsZXM= 31355
bG9naWNhbA== 31356
IGNvbm5lY3Rpdml0eQ== 31357
LnR3aWc= 31358
IEt5bGU= 31359
KGRzdA== 31360
LVNo 31361
IFN0dWRpb3M= 31362
KExldmVs 31363
LmpldA== 31364
X1BST1RP 31365
LWRlY29yYXRpb24= 31366
T1RIRVI= 31367
IHJlYWRpbHk= 31368
LlBhcmFtZXRlcg== 31369
IG11bHRpcGx5 31370
IExJQg== 31371
YXJtZWQ= 31372
IHNvb25lcg== 31373
5oQ= 31374
X0VT 31375
IGZvc3NpbA== 31376
IEFuYw== 31377
4oCcVGhpcw== 31378
bG9kYXNo 31379
UHl0aG9u 31380
IGhpc3RvZ3JhbQ== 31381
d2VzdGVybg== 31382
IGluZmFudA== 31383
IGNvb3JkaW5hdG9y 31384
IG5pYg== 31385
Om0= 31386
IHJlc3BlY3RlZA== 31387
IGRlZmluaXQ= 31388
JlQ= 31389
X3BhZA== 31390
IFRyaWdnZXI= 31391
dGhhbA== 31392
IGltYWdlTmFtZWQ= 31393
IGJlYXRlbg== 31394
CXJj 31395
IFBhbGFjZQ== 31396
IGhhemFyZA== 31397
IGlzb2xhdGlvbg== 31398
X3Jj 31399
Y29udHJl 31400
T1VUUFVU 31401
IHJlaWdu 31402
IFBsYXRl 31403
QVRFUw== 31404
IGZsdXg= 31405
IHBhY2tz 31406
LmdldFNlbGVjdGVk 31407
IHBhcnRpY2lwYXRlZA== 31408
IG5lZWRsZQ== 31409
LWRlcHRo 31410
Ojo6Ojo6 31411
LWxhdw== 31412
aW5zcGFjZQ== 31413
b25pdG9y 31414
PW5v 31415
IEF0b21pYw== 31416
IEJyYWlu 31417
RWRpdGFibGU= 31418
LXNj 31419
cmVkZW50aWFs 31420
IFBlcnJ5 31421
a2ll 31422
IC0tLS0tLS0tLS0K 31423
LnN0cm9rZQ== 31424
KEludGVudA== 31425
IHVuaXR5 31426
dW1sYWg= 31427
RnVydGhlcg== 31428
IHByemU= 31429
IHPDuA== 31430
44KK 31431
IFBST0NVUkVNRU5U 31432
IEhvdXNpbmc= 31433
IGF0dG9ybmV5cw== 31434
IGNvbXBvc2U= 31435
YXR0ZXJpbmc= 31436
IldoYXQ= 31437
ZHJhdWw= 31438
IHN0cmFpZ2h0Zm9yd2FyZA== 31439
SW5zdGFudA== 31440
LkpUZXh0RmllbGQ= 31441
IHRyYWRlcw== 31442
0LvQsA== 31443
IHsh 31444
IGxhdGVseQ== 31445
SU1H 31446
IEFsZA== 31447
IElOTkVS 31448
IGNhcnRvb24= 31449
LlNvdXJjZQ== 31450
RkFMU0U= 31451
IGRvdWdo 31452
ZmVu 31453
KHJlY3Q= 31454
RGF0YVRhYmxl 31455
Tmljaw== 31456
IEJ1dHRlcg== 31457
cmVhZHM= 31458
X2NvbW1lbnRz 31459
RU5W 31460
IENvbm5lY3RpY3V0 31461
LUZJUlNU 31462
CQkJICAgICA= 31463
YWNoaQ== 31464
Lk1zZw== 31465
cmVjdGlvbg== 31466
IHJlbGF4ZWQ= 31467
IHNoYWZ0 31468
IGVm 31469
IEFkZGluZw== 31470
IGJyZWFjaA== 31471
IO+8mg== 31472
cmFtYQ== 31473
IGNvbmR1Y3Rpbmc= 31474
ICg7 31475
KGds 31476
IENBVVNFRA== 31477
YXNoaQ== 31478
IEZMQUc= 31479
IENvbW1lcmNl 31480
IElOVEVHRVI= 31481
aG91cnM= 31482
IFNjaG9vbHM= 31483
IG51Y2xl 31484
QWdhaW4= 31485
cHJvag== 31486
IHNldmVudGg= 31487
RU1QTEFSWQ== 31488
KG1vY2s= 31489
J10sDQo= 31490
X1NQRUVE 31491
PmZhbHNl 31492
IHNwYQ== 31493
IE5lYXI= 31494
7JU= 31495
IGludHJpZw== 31496
X21lbWJlcnM= 31497
d2F2ZQ== 31498
IGFuYWx5c3Rz 31499
X09T 31500
ZWRpbg== 31501
IEZyaQ== 31502
IHJldHJpZXZlZA== 31503
UmVndWxhcg== 31504
X29icw== 31505
RVhQT1JU 31506
Jyl9fSI= 31507
ImNsYXNz 31508
X18oKA== 31509
YnVja2V0 31510
IHN0cm8= 31511
IFBhdGNo 31512
eXN0aWNr 31513
ZnVsbmVzcw== 31514
YXBvcw== 31515
RGE= 31516
CQkJCQkgICA= 31517
IGVucmljaA== 31518
dW5vcmRlcmVk 31519
aG9sZQ== 31520
Q29uZw== 31521
PFByb2R1Y3Q= 31522
IEN1cnQ= 31523
KHRoZQ== 31524
X2xvd2Vy 31525
IGF2b2lkaW5n 31526
IGJ1eno= 31527
IHZpYWJsZQ== 31528
dWJh 31529
LWlz 31530
YXJlbA== 31531
IGFjdGVk 31532
LWRldGFpbHM= 31533
4LiH 31534
IFRoZW9yeQ== 31535
IFB1bg== 31536
IEFub255bW91cw== 31537
Li4uIgo= 31538
w6hyZXM= 31539
5Y+v 31540
IFZpc2lvbg== 31541
X3NlbQ== 31542
YXNoYQ== 31543
IGNlbGVicml0eQ== 31544
IGVuZERhdGU= 31545
IHBvcHVsYXRl 31546
IGN1aXM= 31547
cXVhbnQ= 31548
Zmxvb3I= 31549
IGdsb2JhbGx5 31550
IGNydWlzZQ== 31551
IFN0YW5sZXk= 31552
IGJpa2Vz 31553
LmdldENvbm5lY3Rpb24= 31554
IHBvb3JseQ== 31555
X290aGVy 31556
YW1waW5n 31557
LiIpOwoK 31558
b2Rp 31559
X0FETUlO 31560
LmNvbG9ycw== 31561
IEdhbWluZw== 31562
Pic7Cgo= 31563
U1RSVUNU 31564
UVI= 31565
SURz 31566
KGFyZ3VtZW50cw== 31567
X2F1eA== 31568
KEV2ZW50 31569
X1BSSVZBVEU= 31570
IFRyZWs= 31571
IGRvd25sb2Fkcw== 31572
bXV0YWJsZQ== 31573
X1NUUlVDVA== 31574
KHd4 31575
IGRvbWFpbnM= 31576
anNweA== 31577
IFZpYWdyYQ== 31578
Q29tbWFuZHM= 31579
SnM= 31580
LmNmZw== 31581
Q29udGVudFBhbmU= 31582
IEVkaXRUZXh0 31583
4KWN4KQ= 31584
QXR0YWNo 31585
IEFSTQ== 31586
cG9zaXRpdmU= 31587
IEdlbmVyYXRlZA== 31588
IHNlaXplZA== 31589
PTo= 31590
IGVsZWN0cm9uaWNz 31591
IEFwcENvbXBvbmVudA== 31592
LycsCg== 31593
LmVxdWFsc0lnbm9yZUNhc2U= 31594
RG9jdHJpbmU= 31595
ZGlzaw== 31596
IFBvbGl0aWNhbA== 31597
Q0hP 31598
PEY= 31599
CWhlaWdodA== 31600
IEJ1Zw== 31601
Lmxl 31602
aWto 31603
IG1pbGxpc2Vjb25kcw== 31604
IGNvbnN0aXR1 31605
bWFn 31606
Lm5s 31607
LXJhbmdl 31608
YW5nZ2Fs 31609
Jyxb 31610
cm9wb2xpdGFu 31611
IMOc 31612
IFVD 31613
LmRlc2M= 31614
LUxBU1Q= 31615
ZnN0cmVhbQ== 31616
aWJpbA== 31617
IGZpZXI= 31618
VkVSWQ== 31619
IOuz 31620
SVJU 31621
X1VJ 31622
KGFicw== 31623
IGtuZWVz 31624
IHJvb2tpZQ== 31625
IFZhYw== 31626
YXJlbmE= 31627
Y29tbWVuZA== 31628
LVw= 31629
IFNVQlNUSVRVVEU= 31630
U29mdA== 31631
IHBhcnRpcg== 31632
d2VhbHRo 31633
6KaB 31634
KGRhdGFzZXQ= 31635
IENsaW1hdGU= 31636
LXNob3c= 31637
IHJlbGlhYmlsaXR5 31638
X2NodW5r 31639
5Luj 31640
X3N0b2Nr 31641
IEVYRU1QTEFSWQ== 31642
77iP 31643
IHbDrQ== 31644
IHNtaWxlZA== 31645
IGRyaWxs 31646
LkZ1bmN0aW9u 31647
IFNJ 31648
IHJlZ3Jlc3Npb24= 31649
LVg= 31650
IEphcg== 31651
cHJlZg== 31652
CXN1Y2Nlc3M= 31653
IEhpdGxlcg== 31654
IGluc3RpbmN0 31655
IGZlbW1lcw== 31656
IGxvdmVy 31657
PAo= 31658
IG11bHRpcGxpZXI= 31659
cmls 31660
UmVzaXpl 31661
IEF1dGhvcml6YXRpb24= 31662
IEthbg== 31663
RGlzcGF0Y2hUb1Byb3Bz 31664
IGNyb3Bz 31665
dG9rZW5z 31666
ZWNu 31667
ZW50aWFsbHk= 31668
IElOVEVSUlVQVElPTg== 31669
ZmFrZQ== 31670
VW5kZWZpbmVk 31671
IEFL 31672
IFRlc3RDYXNl 31673
IHJhYg== 31674
IHRvcnJlbnQ= 31675
IE90 31676
QmFycw== 31677
IGxlY3R1cmU= 31678
IGVuam8= 31679
IHJlc3BvbmRz 31680
IGluZGV4ZWQ= 31681
T2ZXb3Jr 31682
X2NoYWlu 31683
KSktPg== 31684
IEJlYXV0eQ== 31685
IGA8 31686
IHRvdWNoaW5n 31687
IHwtLQ== 31688
CWZsYWc= 31689
bm9ybWFsaXpl 31690
IHRyYXBwZWQ= 31691
IGVzdGFibGlzaGluZw== 31692
L2J1aWxk 31693
QUo= 31694
Znk= 31695
LXJlYWN0 31696
YXZu 31697
UklQVElPTg== 31698
IGt1dA== 31699
IEZhc2hpb24= 31700
IEluZm9ybQ== 31701
Y3VyaXRpZXM= 31702
PGJ5dGU= 31703
IFVrcmFpbg== 31704
IHN1Zw== 31705
IGNvbnNpc3Rpbmc= 31706
b29kbGU= 31707
LmN0eA== 31708
LlRvTGlzdA== 31709
IGNvbW1lbnRhcnk= 31710
IHRyYW5zZmVycw== 31711
IG5vc3Q= 31712
aWhhZA== 31713
IFVwcGVy 31714
IGNvbmZ1c2luZw== 31715
bWlzc2luZw== 31716
LWNs 31717
IGJvdW5kaW5n 31718
IGNvbmdyZXNzaW9uYWw= 31719
IHJldmVhbGluZw== 31720
ZGg= 31721
cnVw 31722
IHRyZXM= 31723
cmVwZWF0 31724
LAoKCgo= 31725
X3RhYw== 31726
IGV4cGVk 31727
R2lybA== 31728
aG9yaXpvbnRhbA== 31729
ICIuLi8uLi8uLi8= 31730
KG9wdGlvbg== 31731
IHdlaXRlcg== 31732
CXNxbA== 31733
ID0+ewo= 31734
IGdhcmxpYw== 31735
IHJlcHI= 31736
IHJlcGxpZXM= 31737
KHByb3A= 31738
IHNwaXJpdHM= 31739
IGluc3BpcmU= 31740
IGJhc2VtZW50 31741
LnJlamVjdA== 31742
IGhpbnRz 31743
IHBvbGxpbmc= 31744
CSAK 31745
X3JhdGluZw== 31746
IGNhdGg= 31747
YXZpZXI= 31748
IGNvbXByZXNzZWQ= 31749
IFZT 31750
XSc= 31751
IGp1ZGljaWFs 31752
IFRyZW5k 31753
dHJhaW5pbmc= 31754
RVNUQU1Q 31755
b2duaXRpb24= 31756
xIE= 31757
U0VOVA== 31758
dmVudGlvbnM= 31759
IGNvbnN1bHRhbnQ= 31760
dW1waA== 31761
IHVzZXJTZXJ2aWNl 31762
LE5VTEw= 31763
a2g= 31764
RGVhcg== 31765
X0JBRA== 31766
aXRhdGlvbnM= 31767
IG1ldGFwaA== 31768
J8Op 31769
YW5kaXNl 31770
LWZvbnQ= 31771
LmNoYXJ0 31772
IHNn 31773
X0NvbnRyb2xsZXI= 31774
LmpwZWc= 31775
IFVMT05H 31776
CWdhbWU= 31777
KHNz 31778
IE1hag== 31779
CWdv 31780
IFNhZA== 31781
IEJlcmc= 31782
IE1pbmU= 31783
UGFjaw== 31784
IHJlc2lzdGFudA== 31785
IFJPTQ== 31786
IHBlZw== 31787
IFN0YW5mb3Jk 31788
IFlhaG9v 31789
IHNjYWxlZA== 31790
IGxhbg== 31791
PVtd 31792
Ii8+PC8= 31793
IHBsb3Rz 31794
LioK 31795
IHRyYXZlbGVk 31796
IE9zY2Fy 31797
Vkw= 31798
IGxpbmtpbmc= 31799
IHRpcmVz 31800
ICcqJw== 31801
IEJ1ZmZlcmVk 31802
ZXJp 31803
ICoqKio= 31804
IG92ZXJsb29r 31805
Lk5vbg== 31806
IHLDqXM= 31807
IGVneQ== 31808
5bCP 31809
IGF0dGFja2Vy 31810
CQkJCQkJCQkJCQkJCQkJ 31811
LnN5bmM= 31812
QVNDQURF 31813
R3JvdW5k 31814
IGRlY2F5 31815
IFRvbg== 31816
IGpld2Vscnk= 31817
IGJ5cGFzcw== 31818
IG1lbWJy 31819
Uk5B 31820
PFN5c3RlbQ== 31821
IE1lZGljYXJl 31822
KG5ldA== 31823
b3Np 31824
SEI= 31825
REVD 31826
e0VJRg== 31827
X2ZpbGw= 31828
IHRyYXZlbGxpbmc= 31829
b2JzZXJ2ZXI= 31830
IGNvbnN1bHRpbmc= 31831
UkVBVA== 31832
UGhhc2U= 31833
KGlp 31834
IFNVTQ== 31835
Pg0NCg== 31836
IHN1ZA== 31837
CWJhY2tncm91bmQ= 31838
IHNjaG9sYXJz 31839
LW11dGVk 31840
YXLDoQ== 31841
ID09PT09 31842
IF9fX18= 31843
Q3JlYXQ= 31844
ZW5ldmVy 31845
L3dw 31846
IFZQTg== 31847
RXJyb3JDb2Rl 31848
KV0sCg== 31849
KGJ1aWxkZXI= 31850
IEVuZW15 31851
U2Vuc29y 31852
dXNh 31853
IHRyaWdnZXJz 31854
IHBsYXlvZmZz 31855
X1JFUQ== 31856
ICh+ 31857
IEJhcnJ5 31858
IHBlcm1hbmVudGx5 31859
IFJVTg== 31860
IGJ1cmU= 31861
LkZhdGFsZg== 31862
IGNoaWNr 31863
CXBhbmlj 31864
cHNp 31865
b2th 31866
6YCJ 31867
Pls= 31868
IHVuZGVyc3RhbmRz 31869
IEp1bmlvcg== 31870
IElORk8= 31871
PW15c3FsaQ== 31872
dXN0YWlu 31873
LXNvdXJjZQ== 31874
c2Vydg== 31875
IENSRUFURQ== 31876
LmF1 31877
IHNlbGxz 31878
ICAKICAK 31879
RXVyb3Bl 31880
enc= 31881
cHJlaA== 31882
IE5TQQ== 31883
IHh5 31884
4Li0 31885
IEJleW9uZA== 31886
SW5zdGVhZA== 31887
Tm9uUXVlcnk= 31888
IGFyaXNl 31889
IGF2b2lkZWQ= 31890
LmVtcGxhY2U= 31891
X21vZGVscw== 31892
fSksCg== 31893
IGhpZA== 31894
ICZf 31895
LnBvaW50cw== 31896
LmdldFdpZHRo 31897
LkV4ZWM= 31898
IC8vLy8= 31899
IFNlc3Npb25z 31900
Li4uXA== 31901
IENvbG9tYg== 31902
IGFjY2VsZXJhdGlvbg== 31903
cmVzdG9yZQ== 31904
IGlsZQ== 31905
b2JpYw== 31906
PE5vZGU= 31907
IERY 31908
IEJlc2lkZXM= 31909
LmFnZQ== 31910
IENvbnRhaW5z 31911
TmF0aW9uYWw= 31912
IEltcGxlbWVudGF0aW9u 31913
IGVmZmlj 31914
IFJN 31915
SHk= 31916
IFdlZGRpbmc= 31917
b2tpZXM= 31918
IHJlY3Vyc2l2ZQ== 31919
IHByb3NlY3V0b3Jz 31920
LlNlbGVjdGlvbg== 31921
IEZvcm11bGE= 31922
QmVlbkNhbGxlZA== 31923
W2lp 31924
IEZyYW4= 31925
IHRyYWdlZHk= 31926
X0ZFQVRVUkU= 31927
mag= 31928
Y29tcGFzcw== 31929
IEJo 31930
PwoKCg== 31931
LndyaXRlcg== 31932
IEhvdXI= 31933
RGJDb250ZXh0 31934
aW92 31935
YW1vbg== 31936
cmVwcg== 31937
6YM= 31938
CWZp 31939
J11d 31940
IERyeQ== 31941
LnJv 31942
IE9ic2Vydg== 31943
5qCH 31944
Rm9ybWVy 31945
IEJhbGFuY2U= 31946
CWpzb24= 31947
IHByenk= 31948
SVNT 31949
KHNvY2s= 31950
IExJTkU= 31951
IGRlY2U= 31952
IGFsbHk= 31953
IHRlbmRlbmN5 31954
RnVu 31955
IHNjaGVtZXM= 31956
IGludGVydmVu 31957
5piO 31958
IGFkdmVyc2U= 31959
cXVvdGVsZXY= 31960
IHNhY3JpZmlj 31961
X3NpZGU= 31962
IG11dGV4 31963
QUdJQw== 31964
IG9jY3VycmluZw== 31965
IENvbW11bmljYXRpb24= 31966
dW1hcg== 31967
57yW 31968
IFRyZWF0bWVudA== 31969
LnBlcnNvbg== 31970
IExD 31971
IGVjaA== 31972
KCgi 31973
IERpc2Vhc2U= 31974
w6Rk 31975
IEFa 31976
LkFjY291bnQ= 31977
IGNvbnRpbnVvdXNseQ== 31978
RU5ESU5H 31979
IFJFVFVSTg== 31980
LXN0cmluZw== 31981
LmZpbGVuYW1l 31982
c3ludGhlc2l6ZQ== 31983
UmVzcG9uZGVy 31984
KG9wdHM= 31985
cmVncw== 31986
IG51ZXN0 31987
UGVlcg== 31988
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 31989
IGdhdWdl 31990
IEtpbg== 31991
LnNjaGVtYQ== 31992
IGFycmFuZ2U= 31993
IEJsYWtl 31994
X1R5cGVJbmZv 31995
Q292ZXI= 31996
IEhhbXBzaGlyZQ== 31997
UGFwZXI= 31998
LWlubmVy 31999
dXRpbGl0eQ== 32000
IGNyb3Nzb3JpZ2lu 32001
Rk9S 32002
IGlnbm9yaW5n 32003
IERE 32004
YXZhbg== 32005
IHRyYWRpdGlvbnM= 32006
IGdldFN0cmluZw== 32007
IGV0aGljcw== 32008
IE1hdGVyaWFscw== 32009
REVTQw== 32010
IGVuenlt 32011
aW9sZXQ= 32012
IENoaXA= 32013
IE1jRG9uYWxk 32014
IG5lcnZl 32015
54Q= 32016
Iild 32017
5rGC 32018
IFN1Z2Fy 32019
X1NJTQ== 32020
anBlZw== 32021
IGRpc2NyZXRpb24= 32022
IFRO 32023
Ym92ZQ== 32024
IE1pbmltdW0= 32025
IEZvcm1Hcm91cA== 32026
IHdvcmtmb3JjZQ== 32027
IEV4ZWN1dGlvbg== 32028
ZXJyZXI= 32029
CSAgICAJ 32030
IHByZXNjcmliZWQ= 32031
LlRleHRBbGlnbg== 32032
T1BFTg== 32033
IFBC 32034
aW1pdHk= 32035
IEV4dGVybmFs 32036
wrBD 32037
IEFwcGxpY2F0aW9uQ29udHJvbGxlcg== 32038
IGJhcnI= 32039
aW1wbGljaXQ= 32040
X2RvdA== 32041
IENvbG9u 32042
Q09MT1I= 32043
LlByb2plY3Q= 32044
Kjwv 32045
LXhs 32046
IG9zYw== 32047
KHBhdHRlcm4= 32048
Jyl9Cg== 32049
c3VjY2Vzc2Z1bA== 32050
YWxvZw== 32051
U3R1ZGVudHM= 32052
XXN0cmluZw== 32053
YW50b24= 32054
YXR0aQ== 32055
Y2hlbWljYWw= 32056
LmluZg== 32057
KGRy 32058
OlVJQ29udHJvbFN0YXRl 32059
dG9JbnQ= 32060
XTwv 32061
0LDQtdC8 32062
IMW+ 32063
LkFjdGlvbkxpc3RlbmVy 32064
LlNFVkVSRQ== 32065
IFNhbHY= 32066
X1RSQU4= 32067
L2ludGVybmFs 32068
IHdlbGNvbWVk 32069
LmNvbW1lbnQ= 32070
bXV0YXRpb24= 32071
IEZBUQ== 32072
Lm9uZQ== 32073
IExBQg== 32074
In19 32075
IFJvbA== 32076
aWV2ZWQ= 32077
IGFkdmVudHVyZXM= 32078
IGZ1bmVyYWw= 32079
IHNwb3VzZQ== 32080
KG9wZW4= 32081
IFJlYWR5 32082
IHRvdXJpc20= 32083
YWRpbg== 32084
X2ZhY2U= 32085
4oKB 32086
IG1pZ3JhbnRz 32087
IFB1cmNoYXNl 32088
Y29yZA== 32089
IE9VVFBVVA== 32090
KSkNCg0K 32091
U2VndWU= 32092
dGFicw== 32093
IGRvdHM= 32094
IG5haWw= 32095
Ym9ybmU= 32096
IGRlc2lyZXM= 32097
IHByZXZlbnRlZA== 32098
J109PQ== 32099
IHRpbWVseQ== 32100
SUNB 32101
U2Nhbm5lcg== 32102
IEx1Y2Fz 32103
IGdpdGh1Yg== 32104
J11bXQ== 32105
ZGlh 32106
Y29ub21pYw== 32107
IGRpZXNlcg== 32108
dW5kZXJz 32109
LkhhbmRsZXI= 32110
PyIs 32111
LmRhdGFi 32112
IGFkdmlzZQ== 32113
LmFuaW1hdGlvbg== 32114
IG92ZXJoZWFk 32115
IG9ic3RhY2xlcw== 32116
X2pvaW4= 32117
IG3DqQ== 32118
RmxhdA== 32119
LmRpc3Bvc2U= 32120
IEV4cGVjdGVk 32121
IGZsZXc= 32122
IGVtYm9k 32123
X3NsdWc= 32124
IG5hbWVseQ== 32125
IHdpdG5lc3NlZA== 32126
c29saWQ= 32127
LmxlZ2VuZA== 32128
UXVhbA== 32129
X3N1cmZhY2U= 32130
44Op 32131
QW1lcmljYQ== 32132
IGFmZmlsaWF0ZXM= 32133
IFByb3M= 32134
X2V4dGVuc2lvbg== 32135
YmluZGluZw== 32136
U1RBTEw= 32137
LnJlYWR5 32138
IGNvcHlpbmc= 32139
IEhlbmNl 32140
IGRpc2NvcmQ= 32141
X3NoaXA= 32142
UHJvcGVydHlOYW1l 32143
CQkgICAgICAgICAgIA== 32144
IGFjaGlldmluZw== 32145
IEJlYw== 32146
Wmlw 32147
U29tZXRpbWVz 32148
44GL 32149
IGNvbnRyYQ== 32150
IHB1bmlzaA== 32151
IGluc3VsaW4= 32152
IGRpc2FwcGVhcg== 32153
X2VudW0= 32154
LmF1dA== 32155
IGhhc2F0dHI= 32156
YWZmZWN0ZWQ= 32157
c2hl 32158
JHRhYmxl 32159
a3Np 32160
IGxhY2tpbmc= 32161
IGRpc2NvdW50cw== 32162
U3RtdA== 32163
IEFyZ2VudGluYQ== 32164
IHVucGFjaw== 32165
IFJvdXRlZEV2ZW50QXJncw== 32166
ICc/ 32167
aW50ZXJvcA== 32168
IHNvZmE= 32169
IGR5bg== 32170
IEdyYWNl 32171
IGludGVncmF0ZQ== 32172
2YM= 32173
IGRlbGF5cw== 32174
IEltcGxlbWVudA== 32175
UHJvb2Y= 32176
IGFwcGxpY2FudHM= 32177
IExlYXRoZXI= 32178
7Ja0 32179
IGVuam95YWJsZQ== 32180
U3Bpbm5lcg== 32181
L3o= 32182
IGZvYW0= 32183
IExhYm9yYXRvcnk= 32184
IHJlc2VhcmNoZXI= 32185
IENocmlzdGlhbml0eQ== 32186
IGN1c3RvbWl6ZQ== 32187
IGNpcGhlcg== 32188
IGRvZA== 32189
IHPDsw== 32190
QEVudGl0eQ== 32191
T05MWQ== 32192
aW52ZW50b3J5 32193
IGNvbmNsdWRl 32194
IGN1ZW50YQ== 32195
IENvaGVu 32196
LWluY29tZQ== 32197
bWJI 32198
bWVudGF0aW9u 32199
IHZlcnc= 32200
dWRw 32201
QU1M 32202
LmNvbWJvQm94 32203
Zmg= 32204
am9icw== 32205
RmlsZVN5bmM= 32206
IEJhcmJhcmE= 32207
IFNjYW4= 32208
Y3JlZW5zaG90 32209
IE9ydGg= 32210
LnZpZXdEaWRMb2Fk 32211
IEFSUkFZ 32212
LEA= 32213
L2ludA== 32214
R2VuZXJhdGU= 32215
IGRlbW9uc3RyYXRlcw== 32216
IFplbmQ= 32217
5YiX 32218
CXZvbGF0aWxl 32219
PXI= 32220
IGZt 32221
CWJ1ZmZlcg== 32222
ZW5hdGU= 32223
LkNvbWJpbmU= 32224
IG1pc2M= 32225
Y2hlbWFz 32226
IHB1cmVseQ== 32227
IGdsVmVydGV4 32228
LlJlc3Q= 32229
IHJlY2FsbGVk 32230
IGZyZWVs 32231
IHNxdWU= 32232
VHJhY2tlcg== 32233
IFBocA== 32234
IERpc3RhbmNl 32235
IGJlYXN0 32236
Q29tcGxleA== 32237
IGNvbnNpZGVycw== 32238
572R 32239
dHJpYnV0aW9u 32240
IGNvbXBsaW1lbnQ= 32241
X2xpbmVubw== 32242
IE11dGFibGU= 32243
IHVuZGVm 32244
IEdlbQ== 32245
IGNvbXBvdW5kcw== 32246
LnV1aWQ= 32247
IGFub255bQ== 32248
IHN0YWlycw== 32249
IERiU2V0 32250
d29ydA== 32251
IFNlbnM= 32252
LkJlZm9yZQ== 32253
IGVuZGZvcmVhY2g= 32254
IFRvZ2V0aGVy 32255
YXRpbGl0eQ== 32256
IG1vaXN0dXJl 32257
LSR7 32258
KFRlc3Q= 32259
VEI= 32260
bXVzaWM= 32261
IGluc2lzdA== 32262
IGhlYWRsaW5l 32263
LkFuZA== 32264
UEFUQ0g= 32265
IFByZXBhcmU= 32266
IHN3aXRjaGVz 32267
KnA= 32268
IFll 32269
X2Ficw== 32270
LmhhbmRsZXI= 32271
IGFzc2lnbm1lbnRz 32272
UHJlZmVyZW5jZQ== 32273
RU5USVRZ 32274
IHBpcGVz 32275
IEFsZXJ0RGlhbG9n 32276
b2dyYXBoaWNhbA== 32277
IHBhdGlv 32278
IHdlYnBhY2s= 32279
YnBz 32280
TmF2TGluaw== 32281
Lk51bWJlcg== 32282
IEFybW9y 32283
IFBldGVycw== 32284
IERlc2M= 32285
ZHVpbm8= 32286
IEljb25z 32287
LmdldEhlaWdodA== 32288
IHRleHRWaWV3 32289
CU5VTEw= 32290
YWxsb2NhdGU= 32291
fSR7 32292
IFByaXpl 32293
LW51bQ== 32294
Lk1vdmU= 32295
6L6T5YWl 32296
LmNhbWVyYQ== 32297
UHJvYmxlbQ== 32298
CXR5cGVkZWY= 32299
KHN0b3Jl 32300
IERJU0NMQUlNRUQ= 32301
IHN1YnN0YW50aWFsbHk= 32302
RkZG 32303
IGVwc2lsb24= 32304
IGluZXF1YWxpdHk= 32305
X2NoaWxkcmVu 32306
5LiH 32307
cmVsdQ== 32308
UGllY2U= 32309
YW50cnk= 32310
YmFiZWw= 32311
dmV0aWNh 32312
IHN1cnZleXM= 32313
IGRldGVjdG9y 32314
CWFyZ3M= 32315
LlNlbGVjdGVkVmFsdWU= 32316
IGludGVyZmVyZW5jZQ== 32317
Li4uKQo= 32318
LlNUUklORw== 32319
IFR5bGVy 32320
IENhdGFsb2c= 32321
VmVydGljZXM= 32322
IFByb2plY3Rz 32323
IExlYmFu 32324
LiIpCgo= 32325
Lmtlcm5lbA== 32326
IHJpZGVz 32327
IE11dA== 32328
YW50aA== 32329
0L7RgNC8 32330
ZW5uaWFs 32331
LnRhc2tz 32332
LnNldFByb3BlcnR5 32333
YXRlZ29yaQ== 32334
5pyA 32335
L2Nvbg== 32336
YnJhY2U= 32337
IE5TRXJyb3I= 32338
J10pKTsK 32339
bGlzdGVk 32340
IFByZXZpZXc= 32341
QWN0aXZhdGU= 32342
IGN5Y2w= 32343
LWFjdGl2ZQ== 32344
aGFk 32345
VG9v 32346
IHJlZ2lzdA== 32347
bGljYWw= 32348
IHBvZXRyeQ== 32349
SW1wb3J0cw== 32350
77yB77yB 32351
Ojw= 32352
IGNoYXJt 32353
IENvdW4= 32354
b2xsaWRlcg== 32355
IGh3 32356
fWAK 32357
PWFyZ3M= 32358
IE5ldXJv 32359
aXRpY2Fs 32360
aWVuZW4= 32361
IERvdA== 32362
X09OTFk= 32363
RE4= 32364
IFBsYXlTdGF0aW9u 32365
IHN0ZWVw 32366
IHByYWN0aWNhbGx5 32367
IGFwcGxpY2FudA== 32368
IGFyb20= 32369
YW5pYw== 32370
CWRpc3BsYXk= 32371
IHRlcm1pbmF0ZWQ= 32372
IGNsYXJpdHk= 32373
IE1lbnVJdGVt 32374
IEt1cg== 32375
aWpl 32376
X3dlZWs= 32377
KGRpY3Q= 32378
X3JlY29yZHM= 32379
IENvc3Rh 32380
IGtldA== 32381
RXh0ZW5zaW9ucw== 32382
IG5ldWtlbg== 32383
aW5zaQ== 32384
X2luYw== 32385
IOaW 32386
IGVpbmY= 32387
IFJpc2s= 32388
IGVsZXZhdGVk 32389
cGVycw== 32390
VURB 32391
IEtO 32392
IGxpbmVk 32393
IE1vcm0= 32394
KTsKCgoK 32395
Pn0K 32396
cGxhaW50 32397
Z2V0VGV4dA== 32398
IGluZGl2aWR1YWxseQ== 32399
IGNoZWNrYm94 32400
VVk= 32401
IExhbWI= 32402
IGR5c2Z1bmN0aW9u 32403
IExhcg== 32404
4LA= 32405
IENyZWF0aW5n 32406
Jyk7CgoK 32407
IlRoZXk= 32408
bG9jYXRpb25z 32409
X0NPUkU= 32410
SW50ZXJhY3Rpb24= 32411
dW1ibmFpbHM= 32412
IFBhcnRuZXI= 32413
YnJpdA== 32414
IGxlc3Nlcg== 32415
IFNsb3Q= 32416
c2V0QXR0cmlidXRl 32417
IFdhdmU= 32418
LnBv 32419
L3N0b3Jl 32420
IGJyb3dzaW5n 32421
X3Bk 32422
c3VtZQ== 32423
c2Vk 32424
Q3VydmU= 32425
IHBsYXNtYQ== 32426
IHN1c3BpY2lvdXM= 32427
7J24 32428
IEJhaA== 32429
IEV4cGxpY2l0 32430
X0ND 32431
LkNsaWVudFNpemU= 32432
XFZpZXc= 32433
IHN1YnN0aXQ= 32434
bG9vbg== 32435
IEdBTUU= 32436
IEJyaWQ= 32437
m+W7ug== 32438
X1VzZXI= 32439
IHNxdWFyZXM= 32440
Zm9uZQ== 32441
IHNhY3JlZA== 32442
dWdocw== 32443
XWludGVyZmFjZQ== 32444
IFRocm93 32445
IEtpcms= 32446
IGVtcGlyZQ== 32447
IGFzc2Vzc2Vk 32448
VGF4 32449
IEhlYXZlbg== 32450
LWJ1ZmZlcg== 32451
X1NUQVRJQw== 32452
w6luw6k= 32453
LWJvcmRlcmVk 32454
IHB1bmN0 32455
KG1vZGU= 32456
IGtlaW5l 32457
U2VudA== 32458
IENhbGN1bA== 32459
IEV2ZQ== 32460
IHN0eWxpc2g= 32461
IG9pbHM= 32462
LlRlc3RDYXNl 32463
IHRyYWRlbWFyaw== 32464
IGxpdGVyYXJ5 32465
IGNvbmNlbnRyYXRpb25z 32466
IFJlbGF0aW9ucw== 32467
KENsYXNz 32468
IHN0ZGlu 32469
IHbDpg== 32470
YmFja3Vw 32471
LlZFUlNJT04= 32472
LkF1dG9TY2FsZURpbWVuc2lvbnM= 32473
c3RhcnRlcg== 32474
VHJhbnNhY3Rpb25hbA== 32475
LXBhbmVs 32476
U3R1ZGlv 32477
a2M= 32478
IENoYW1iZXI= 32479
IFNwaWVs 32480
IHJobw== 32481
2KfZhA== 32482
ISc= 32483
LkF0dHJpYnV0ZXM= 32484
IG11cmRlcmVk 32485
YXBldXRpYw== 32486
IGludGltYXRl 32487
IHRleHRGaWVsZA== 32488
IEJ1ZmZhbG8= 32489
ZHVtbXk= 32490
IiU= 32491
IExpYmVydHk= 32492
b2Jhcg== 32493
IFRhbms= 32494
IFBvcHVsYXI= 32495
ZXJ2aXNvcg== 32496
IEluaXRp 32497
IE1hbGw= 32498
IFByaW9y 32499
Q0FQ 32500
IENsYXk= 32501
IENlcnRpZmljYXRl 32502
LkxvY2s= 32503
LXN0cmlw 32504
LWRyaXZlbg== 32505
L2FsbA== 32506
IE1lc3NhZ2VCb3hCdXR0b25z 32507
X1NFQ1JFVA== 32508
X3Bi 32509
IHJhdHM= 32510
4KS+4KQ= 32511
IG50 32512
LlJvdXRlcg== 32513
X3RvcGlj 32514
IHRlbm5pcw== 32515
IFBVQkxJQw== 32516
IEFjdGl2YXRlZFJvdXRl 32517
ICcsCg== 32518
IGNvc3R1bWU= 32519
IGpva2Vz 32520
LkhhbmRsZQ== 32521
CWJ5dGU= 32522
IGZsYXZvcnM= 32523
KGNj 32524
IHBlcnNvbmFz 32525
CWltYWdl 32526
IE5hemk= 32527
IGdyYW1tYXI= 32528
IMO6bHQ= 32529
IHZhbHZl 32530
IHZpYw== 32531
IFJhY2hlbA== 32532
X2ludmFsaWQ= 32533
UHJlZnM= 32534
c3RkaW50 32535
KHJvdXRl 32536
IGh0bWxzcGVjaWFsY2hhcnM= 32537
IHBlb3BsZXM= 32538
cGxpbmU= 32539
IG52 32540
IFF1YW50 32541
b3BwZXJz 32542
IGN1cnJlbnRVc2Vy 32543
IENhdGFs 32544
IHJlY29uYw== 32545
IGNvbmp1bmN0aW9u 32546
bHg= 32547
YW1idXJn 32548
IGluZmx1ZW50aWFs 32549
ZGFuZ2Vy 32550
aW5kZXJz 32551
ICVAIiw= 32552
LmNvbmZpZ3VyYXRpb24= 32553
b3NvbWU= 32554
LmlkZW50aXR5 32555
IHBpY2tlcg== 32556
bm9zdA== 32557
IERJWQ== 32558
QXVndXN0 32559
YWJsbw== 32560
TGVhZg== 32561
IFJlY28= 32562
Y2tv 32563
RE9D 32564
IEhlcm0= 32565
OmFueQ== 32566
IEludGVydmlldw== 32567
IFRleA== 32568
eGZl 32569
KHdvcms= 32570
IGxlYXA= 32571
SGVhZGluZw== 32572
IHF1YXJ0ZXJz 32573
XEJ1bmRsZQ== 32574
cmVi 32575
UGVyaGFwcw== 32576
IEdtYkg= 32577
QmlydGg= 32578
CXN1bQ== 32579
IFdhdHNvbg== 32580
Lm5pbA== 32581
56E= 32582
e30KCg== 32583
aWNhaWQ= 32584
R2V0dGVy 32585
Im5hbWU= 32586
ICINCg== 32587
X25vbmU= 32588
em0= 32589
YWN1dGU= 32590
dWVzdG8= 32591
IHNvdXM= 32592
IHJlYnVpbGQ= 32593
IG5ld3NwYXBlcnM= 32594
IEhheg== 32595
IGtpdHM= 32596
aWZv 32597
Qmx1cg== 32598
IHN1aXRlZA== 32599
LUlu 32600
4K8= 32601
IEtlaXRo 32602
IE5vcndheQ== 32603
SU5JVA== 32604
aXJlY2Npb24= 32605
aWV0aWVz 32606
X3VzYWdl 32607
IERvdWc= 32608
cmlzZQ== 32609
IHRyaWxsaW9u 32610
aW1pdGVk 32611
IFJFTA== 32612
YWxpYw== 32613
IGNyaXRpY2l6ZWQ= 32614
dGhlb3JlbQ== 32615
IGNlYXNl 32616
IHNpZGV3 32617
IFRlcnJ5 32618
IHN1YnNpZGk= 32619
IGZpcm1seQ== 32620
IGF3cw== 32621
IGhvdHQ= 32622
IGRyZXNzaW5n 32623
YmFkZ2U= 32624
IEFwcGxpY2F0aW9ucw== 32625
6L+U5Zue 32626
IGxhdWdoZWQ= 32627
IGhvYmJ5 32628
IG11c2ljaWFucw== 32629
ICou 32630
LnBsYWNlaG9sZGVy 32631
IGNvdW50ZXJz 32632
IENhcGl0b2w= 32633
U0RL 32634
IGhlbG1ldA== 32635
YW5kYm94 32636
cXVpdA== 32637
IGNyaW1pbmFscw== 32638
IHRlZW5hZ2Vy 32639
KHVwZGF0ZQ== 32640
R2w= 32641
LnNlbGVjdGlvbg== 32642
IGRpc2NoYXJnZQ== 32643
IHByZXNlbnRpbmc= 32644
dWZhY3R1cmVy 32645
X1VOS05PV04= 32646
IHN0cmVzc2Vk 32647
5Zmo 32648
UHJvdG8= 32649
X2NvcnJlY3Q= 32650
aGF1cw== 32651
IHJlbm92 32652
IGZpcmVhcm1z 32653
IHRlY2huaWNhbGx5 32654
LWJyb3dzZXI= 32655
IGNhbmR5 32656
U3Ryb2tl 32657
IGV4ZWN1dG9y 32658
IG9jY3VycmVuY2U= 32659
IElQdg== 32660
X0lOVEVSRkFDRQ== 32661
IFJldHJpZXZl 32662
LmJhZA== 32663
RXhjaGFuZ2U= 32664
TmF2YmFy 32665
IEtpZA== 32666
KGdldEFwcGxpY2F0aW9uQ29udGV4dA== 32667
X1NUT1A= 32668
IEJvc3M= 32669
TGlzdGVuZXJz 32670
IHNob290ZXI= 32671
IEFsYg== 32672
w6RjaA== 32673
IHBpeA== 32674
LmtleUNvZGU= 32675
YWxvbmU= 32676
IGFic3VyZA== 32677
IEN1bQ== 32678
IE5ld3RvbnNvZnQ= 32679
aWt0 32680
IGxhdWdoaW5n 32681
IGNhcGl0YWxpc20= 32682
cmVlTm9kZQ== 32683
VHg= 32684
X1FVRVJZ 32685
LlNsZWVw 32686
KGxvZ2lu 32687
V2ViRWxlbWVudA== 32688
IGNlbGVicmF0aW5n 32689
IGRlcHJlY2F0ZWQ= 32690
IG1hYXI= 32691
IGFydGlzdGlj 32692
X0FTU09D 32693
IEJvcmRlclJhZGl1cw== 32694
CXdw 32695
IHN1cnZpdm9ycw== 32696
SW5uZXI= 32697
LXJlZA== 32698
IHByb3NlY3V0aW9u 32699
X3Bw 32700
KCI8Lw== 32701
IF49 32702
IGxhbQ== 32703
IFRyYWRpbmc= 32704
ZmxhcmU= 32705
RGV0ZWN0b3I= 32706
TUY= 32707
IEVtZXJnZW5jeQ== 32708
IEVhZ2xlcw== 32709
cXVhZA== 32710
IEluY3Jl 32711
cGxpYW5jZQ== 32712
XE1pZ3JhdGlvbg== 32713
IHVwZ3JhZGVz 32714
Q1BV 32715
YWdnaQ== 32716
ZnByaW50Zg== 32717
aWdpb24= 32718
IGJlYXV0aWZ1bGx5 32719
IGRyaWVk 32720
X0hJR0g= 32721
IGdwaW8= 32722
TVND 32723
IERlcHV0eQ== 32724
IERlY2w= 32725
IHRyZWFzdXJl 32726
c2dpdmluZw== 32727
X3NpZGViYXI= 32728
IGFwYXJ0bWVudHM= 32729
IFdy 32730
IGJvYXRz 32731
IGJvcg== 32732
Lmxhbmd1YWdl 32733
IFVp 32734
bGl0 32735
ZnJt 32736
YW5jaWVz 32737
IG1hc3Nlcw== 32738
IEFzc2lnbg== 32739
IFBPTA== 32740
IG1hcERpc3BhdGNoVG9Qcm9wcw== 32741
IGJyYWNrZXQ= 32742
IFBhcA== 32743
IENp 32744
IEludG8= 32745
IHRlYW1tYXRlcw== 32746
IGZvcmFsbA== 32747
dWx1aQ== 32748
IENhcm4= 32749
X0lOUw== 32750
YXppb25p 32751
Y2Vw 32752
IHRvdXJpc3Rz 32753
LWJsdWU= 32754
IExlZA== 32755
IHBlbmV0 32756
IEZv 32757
IGltYWdpbmc= 32758
cHJh 32759
IHNsYXZlcw== 32760
b2xlcmFuY2U= 32761
IGluY29ycG9yYXRlZA== 32762
Jiw= 32763
dWFibHk= 32764
IEthcA== 32765
WG1sRWxlbWVudA== 32766
IE11ZWxsZXI= 32767
Q2hhbmdlTGlzdGVuZXI= 32768
IEhvbGlkYXk= 32769
CSAgICAgICAgIA== 32770
RmxleA== 32771
CVVzZXI= 32772
Il0pKQ== 32773
X3N1Ym1pdA== 32774
LmJvbGQ= 32775
IGxvY2tz 32776
IEN1YmE= 32777
dWRzb24= 32778
SG9vaw== 32779
IFdhcm5lcg== 32780
X3N0YXI= 32781
Ij0+JA== 32782
IGNvbW1h 32783
dW5jaGVja2Vk 32784
Z3JhcGhpY3M= 32785
cm9ycw== 32786
R1JPVU5E 32787
KHB1YmxpYw== 32788
IGN1c3RvbWl6ZWQ= 32789
IEFya2Fuc2Fz 32790
IFJldw== 32791
IGV4cGlyYXRpb24= 32792
15U= 32793
IEN1bA== 32794
IG5vbnM= 32795
LkZpbHRlcg== 32796
IHNlbmF0b3I= 32797
X2RlZmluaXRpb24= 32798
YXNoaW5ndG9u 32799
eW1waA== 32800
L0o= 32801
IGZ1c2U= 32802
cmFtaWQ= 32803
IFN1cHBsaWVy 32804
IGF1dG9jb21wbGV0ZQ== 32805
IH0pLA== 32806
LiIKCgo= 32807
X2Z1bmN0aW9ucw== 32808
CXRv 32809
LmV2YWw= 32810
IFRPYmplY3Q= 32811
UmVmZXJlbmNlcw== 32812
IGhlYXRlZA== 32813
SEFM 32814
ICkpfQo= 32815
fSQ= 32816
IEJhcnI= 32817
X1VOSVQ= 32818
KyQ= 32819
IGdldFZhbHVl 32820
aXBlZA== 32821
Y2hpZWQ= 32822
KHZt 32823
Y3Vl 32824
X2ludGVnZXI= 32825
X2NvdXJzZQ== 32826
dGhpcmQ= 32827
IHJldmlzZWQ= 32828
KiovCg== 32829
X0RJUkVDVA== 32830
T3V0T2Y= 32831
KCIo 32832
IEZlZWw= 32833
IHJlYXNz 32834
IHN1YnRpdGxl 32835
cGVyaQ== 32836
bmY= 32837
IGVuam95cw== 32838
IHRyZWF0cw== 32839
KXRoaXM= 32840
LXRhYnM= 32841
YW5jZXJz 32842
IGNvbnRpbmVudA== 32843
IGNhcmRpbw== 32844
U2Vy 32845
LnF1ZXN0aW9u 32846
IHBocmFzZXM= 32847
VmFsaWRhdG9ycw== 32848
IHBvcHVs 32849
IGzDrQ== 32850
c29uZw== 32851
X0lOVEVSTkFM 32852
IGFkdmlzZXI= 32853
IHB1eno= 32854
IGFtYml0aW91cw== 32855
IFRvYg== 32856
IERQ 32857
IHByZXNpZGVuY3k= 32858
IHN1cnJlbmRlcg== 32859
IHdhdGNoZXM= 32860
X2JpbmFyeQ== 32861
IFNvb24= 32862
IGNhbmFkYQ== 32863
KCIiKQo= 32864
XT0n 32865
IEJyYW5kb24= 32866
ZXBzaWxvbg== 32867
cnc= 32868
LmFkZENoaWxk 32869
LkNvcHk= 32870
UHJpbmNpcGFs 32871
UGhvdG9z 32872
IG1hcmdpbmFs 32873
IGJhc2ljcw== 32874
ZWluZw== 32875
TXVzdA== 32876
X1N0cmluZw== 32877
IG9sZQ== 32878
TWFnZW50bw== 32879
LmN1c3RvbWVy 32880
KHByZXY= 32881
4Lil 32882
IGxveWFsdHk= 32883
Q29n 32884
IHByb3RvY29scw== 32885
IENvbXBhbmllcw== 32886
IHRoZW9yZXRpY2Fs 32887
IGFjY2Vzc2luZw== 32888
IFplbg== 32889
Lm9uZXM= 32890
YXR0aWNl 32891
X3dvcmxk 32892
emVz 32893
IHRhdHRvbw== 32894
IG1lbm9z 32895
IGludGVyc2VjdA== 32896
Il07Cgo= 32897
YmVsaWU= 32898
IGluYWN0aXZl 32899
LnJlYWRsaW5l 32900
LWxhYmVsbGVk 32901
LmRvbmU= 32902
bGlja3I= 32903
IFdPUks= 32904
IGRlcml2YXRpdmU= 32905
IGRhdGFiYXNlcw== 32906
4oKC 32907
IHN4 32908
LmlzQXJyYXk= 32909
IHlz 32910
IHBhZGE= 32911
IEJ1bGxldA== 32912
KGAv 32913
aXNBY3RpdmU= 32914
IENHU2l6ZQ== 32915
KGVxdWFsVG8= 32916
IENvbHVtYnVz 32917
IG1hcnJ5 32918
REVW 32919
X2xpbWl0cw== 32920
cm9uZXM= 32921
SUFT 32922
IHRhdQ== 32923
bWlubw== 32924
X1dyaXRl 32925
IFdpbmU= 32926
IFtbJw== 32927
IFB1bGw= 32928
cml0ZXJz 32929
cmllbnRz 32930
IHNoaWZ0aW5n 32931
dXBw 32932
X1RJTUVS 32933
IENvbmRpdGlvbnM= 32934
4bql 32935
IE9yZGVycw== 32936
IFN0cmVuZ3Ro 32937
5omA 32938
IHZhbGlkaXR5 32939
IGZvdA== 32940
ZXR1cg== 32941
IGJvbHQ= 32942
5YaF 32943
IEFsb25n 32944
b3NoaQ== 32945
IGFzc3VtcHRpb25z 32946
IG1hZ2F6aW5lcw== 32947
X1NQSQ== 32948
IHB1bnQ= 32949
X1BST0RVQ1Q= 32950
IHJlbGF5 32951
IEphdmFzY3JpcHQ= 32952
LnRl 32953
LWVz 32954
IHdpZGdldHM= 32955
KGZz 32956
PEl0ZW0= 32957
X2V4dHJh 32958
IHJlY3J1aXRpbmc= 32959
RXQ= 32960
IG5lY2Vzc2l0eQ== 32961
cHc= 32962
IG5vdmVscw== 32963
dXNzZWxz 32964
Q3JlYXRvcg== 32965
IE1WUA== 32966
IE9D 32967
dGhvb2Q= 32968
Y2xpZW50cw== 32969
KSkq 32970
IGNoYXJhY3Rlcml6ZWQ= 32971
X1NFTkQ= 32972
dXRp 32973
VHk= 32974
LmZyb21Kc29u 32975
QFNlcnZpY2U= 32976
44KC 32977
Q2hyaXM= 32978
X0lz 32979
IEpvaG5ueQ== 32980
IGNsZWFuZXI= 32981
IEluaXRpYWxpemVz 32982
VU5L 32983
KGF4aXM= 32984
0LXQtw== 32985
aWV2YWw= 32986
IFdhcnJpb3Jz 32987
fSko 32988
RE1J 32989
4pmA 32990
IFRyZWFzdXJ5 32991
IGZlYXM= 32992
IHNsYQ== 32993
X0VOVU0= 32994
bGhz 32995
IEluc3RpdA== 32996
aXBwZXJz 32997
TGluZWFy 32998
UmVhZGluZw== 32999
cXVpcmllcw== 33000
LWNlbGw= 33001
Y2hyb21l 33002
LlNlYXJjaA== 33003
SU5B 33004
57G75Z6L 33005
IAogCg== 33006
IFNhbXVlbA== 33007
IG1pbGxz 33008
IGRvbmF0ZQ== 33009
IEdlbw== 33010
KHJvd3M= 33011
IHNoZWVw 33012
IMOpbA== 33013
5L2T 33014
IGJlbQ== 33015
X1VOVVNFRA== 33016
IFJDQw== 33017
IGludHJvZHVjaW5n 33018
YXR0YQ== 33019
IFByaW9yaXR5 33020
IEZC 33021
IFNlcmdl 33022
PiI7 33023
YXRjaGluZw== 33024
IEtub3dsZWRnZQ== 33025
CVRoZQ== 33026
O21hcmdpbg== 33027
bGVzc25lc3M= 33028
b3BhcmQ= 33029
dW1hdGlj 33030
KCkpKTsNCg== 33031
IGZhbHM= 33032
KGNhY2hl 33033
VHlwZUlk 33034
6YCa 33035
X2Nob2ljZQ== 33036
IEdvdGg= 33037
IFNpdGVz 33038
TUc= 33039
X2JvcmRlcg== 33040
SW5kaWNlcw== 33041
Q29tcGFyZXI= 33042
IFJlZGlzdHJpYnV0aW9u 33043
IGNsb3NldA== 33044
IHZlcnNhdGlsZQ== 33045
SW5wdXRz 33046
KioqKioqKioqKioqKioqKioqKio= 33047
IG9iZXNpdHk= 33048
cXVpeg== 33049
Z3Jh 33050
KGdsb2JhbA== 33051
5Yqh 33052
IGNvbGxlY3Rvcg== 33053
IGtvcg== 33054
b3ZhYmxl 33055
QURD 33056
IEV2ZW50SGFuZGxlcg== 33057
Lm5j 33058
IHBsYXliYWNr 33059
aWVudG9z 33060
X3Blcm0= 33061
X1dBUk5JTkc= 33062
IE9seW1waWNz 33063
Lm5vcm0= 33064
IEJyb2FkY2FzdA== 33065
X3NtYWxs 33066
ZHJpdmU= 33067
Lmlsb2M= 33068
IHR5cGVk 33069
TUVN 33070
X2NvbnM= 33071
RE1FVEhPRA== 33072
IGx1bg== 33073
LmRpc3RhbmNl 33074
KHBhcg== 33075
cG9vbg== 33076
IGJhc3Q= 33077
YWN0aXZpdGllcw== 33078
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 33079
Og0KDQo= 33080
U0VS 33081
KSYm 33082
X2xzdA== 33083
IFBvbGlzaA== 33084
IGtub2NrZWQ= 33085
IGZydXN0cmF0aW9u 33086
YXVrZWU= 33087
IHBob3NwaA== 33088
aXF1aWQ= 33089
X2NvZWZm 33090
5q2k 33091
TGF0ZXN0 33092
IER1c3Q= 33093
VGlwbw== 33094
IG1haW50YWlucw== 33095
IG1hcnNo 33096
aW5jaW5u 33097
bGJs 33098
Q2FyZQ== 33099
IG5laWdoYm9yaG9vZHM= 33100
X2dwaW8= 33101
IEFyc2VuYWw= 33102
RGVt 33103
IFdoZQ== 33104
X2hvb2s= 33105
IGxkYw== 33106
IEhhcnBlcg== 33107
IEJlcmtlbGV5 33108
IGdyYWR1YXRlZA== 33109
UGVyY2VudA== 33110
IGFycml2aW5n 33111
IEFkdmVudHVyZQ== 33112
KHNjb3Bl 33113
KCcq 33114
cXVhcnRlcg== 33115
IE1hcmll 33116
U3BlYWtpbmc= 33117
X2NvZGVnZW4= 33118
IGltbXVu 33119
Y2FzdGVy 33120
44KM 33121
5ZWG 33122
IERpbWVuc2lvbnM= 33123
LnJlY29yZA== 33124
IHRleHRv 33125
IE1pY2hlbGxl 33126
UGVuZGluZw== 33127
KGJ5 33128
X1BBUg== 33129
dWNodA== 33130
YmVl 33131
LlRocmVhZA== 33132
YW1waXJl 33133
a25vdw== 33134
IENsaW5pY2Fs 33135
IG1hcmdpbkJvdHRvbQ== 33136
IGRpc3Rpbmd1aXNo 33137
LkZ1bGw= 33138
LnVuZGVmaW5lZA== 33139
IFNlcXVlbGl6ZQ== 33140
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 33141
IGVkdWNhdGVk 33142
X09WRVI= 33143
5bqP 33144
IMKgIMKg 33145
X2VhY2g= 33146
IHVyZ2U= 33147
ZGVwYXJ0 33148
IGRvbm9ycw== 33149
IEF1 33150
IGJpbGxpb25z 33151
IGJlbG9uZ2luZw== 33152
X2FnZQ== 33153
X0ludA== 33154
IHN1YnN0YW5jZXM= 33155
bWFjaGluZQ== 33156
ISEhCgo= 33157
IGpzb25pZnk= 33158
aWJiZWFu 33159
IENhZA== 33160
IGVuZFRpbWU= 33161
IGN5Y2xpbmc= 33162
IFVJVGV4dEZpZWxk 33163
IGxldmVyYWdl 33164
IHZhbmlsbGE= 33165
ZWF0 33166
TGF1bmNo 33167
KHB0 33168
c3RhdGVz 33169
IENvbnRyb2xz 33170
IFJlc3BvbnM= 33171
IEpha2U= 33172
IGFzbGVlcA== 33173
Zm9ydHVuYXRl 33174
Lm5leHRMaW5l 33175
U2l6ZU1vZGU= 33176
7J28 33177
VGVzdGluZ01vZHVsZQ== 33178
R2VybWFu 33179
IEludmVzdGln 33180
LnJldmVyc2U= 33181
IEJBQ0s= 33182
KERhdGVUaW1l 33183
IG5vbnByb2ZpdA== 33184
IEV4cGVjdA== 33185
IHRhbnRv 33186
J10pLA== 33187
CXRoZQ== 33188
TXVsdGlwbGU= 33189
KGdldEFjdGl2aXR5 33190
X1dBSVQ= 33191
IGrDoQ== 33192
ZGVjb3I= 33193
bGV2YW5jZQ== 33194
IEdpdEh1Yg== 33195
bWluYXRpb24= 33196
X3F1YW50aXR5 33197
LlNjYW5uZXI= 33198
IExpb24= 33199
6ZSZ6K+v 33200
IGRyZQ== 33201
IHRhbnRyYQ== 33202
IGNvbnRlbnRUeXBl 33203
IGZpZA== 33204
X2FsdA== 33205
TlNJbmRleFBhdGg= 33206
LXBs 33207
5YyW 33208
IGFudGliaW90 33209
dGFibGVz 33210
YWNpYWw= 33211
IFJlZ2lzdHJ5 33212
IG9saXZl 33213
aWdlcnM= 33214
IHN1YnNjcmliZXI= 33215
X3ByZXM= 33216
IFN5bnRheA== 33217
IGxvdmVycw== 33218
LkJ5dGU= 33219
b2xkZXJz 33220
X2ZvcndhcmQ= 33221
YWx3YXlz 33222
Q2FwdGlvbg== 33223
UHJpdg== 33224
IFRhbXBh 33225
aXNhdGV1cg== 33226
LWxhYmVsbGVkYnk= 33227
IFRvU3RyaW5n 33228
IOyCrA== 33229
IGluaXRpYXRlZA== 33230
V0Y= 33231
IGluc3RpdHV0aW9uYWw= 33232
aW5qZWN0 33233
IFNjcg== 33234
IGRvY3RyaW5l 33235
IHNwYWNpb3Vz 33236
aXN1cmU= 33237
IEFuYQ== 33238
InRpbWU= 33239
ZXNzYWdpbmc= 33240
IGNpZA== 33241
IE5hbg== 33242
IGluY29tcGxldGU= 33243
VEFH 33244
LWJ1aWxk 33245
RGVjZW1iZXI= 33246
IHJlc2lkdWFs 33247
KFBETw== 33248
IExpc3Rlbg== 33249
IGdseXBo 33250
IGdhcHM= 33251
bmVh 33252
LlJlY3Q= 33253
IHNhdQ== 33254
IFBob3RvZ3JhcGg= 33255
IGV4ZWN1dGFibGU= 33256
IEV4cGVydA== 33257
Q29yb3V0aW5l 33258
X3NpemVz 33259
IE5M 33260
LmlzVmFsaWQ= 33261
KTt9Cg== 33262
LXJlZw== 33263
IGNpdGluZw== 33264
Y3dk 33265
IE90dGF3YQ== 33266
IEJhdHQ= 33267
IHJlbmV3YWJsZQ== 33268
IHByZWxpbWluYXJ5 33269
IGFzeWx1bQ== 33270
IHdyaXN0 33271
IHV0aWxpeg== 33272
IGRldGVudGlvbg== 33273
RmFzdA== 33274
IGFuZ2U= 33275
aW5jaW5uYXRp 33276
IHN0ZWVyaW5n 33277
IE5hTg== 33278
aW9zaXR5 33279
L3BhZ2U= 33280
IOi/ 33281
c3Rlcm9s 33282
IGRpc2c= 33283
KERC 33284
IERFU0NSSVBUSU9O 33285
IF8k 33286
IG9ic3RhY2xl 33287
IGJpemFycmU= 33288
IGV4dHJhY3Rpb24= 33289
X2V4cGVjdGVk 33290
IGxvc2Vz 33291
IENlbGVicg== 33292
IGh0bWxGb3I= 33293
IGV4cGxvaXQ= 33294
0L7Qu9GM0LfQvtCy 33295
WFla 33296
IG1hZ25ldA== 33297
YW1wZWQ= 33298
IGF0b21z 33299
U291cmNlcw== 33300
cGVjdGl2ZXM= 33301
0YHQu9C4 33302
ID0NCg== 33303
IGRhcmU= 33304
IFdhbHRlcg== 33305
IGJyaWdodG5lc3M= 33306
IGFubm90YXRpb25z 33307
648= 33308
aXNrZQ== 33309
U2NoZWR1bGU= 33310
LmltYWdlcw== 33311
cm9zc28= 33312
ICIuLg== 33313
Z2FtbWE= 33314
IGluc3RydWN0b3I= 33315
IG92ZXJ3cml0ZQ== 33316
LWFt 33317
IGRldmFzdGF0aW5n 33318
IFNhaW50cw== 33319
IGhz 33320
IGJvbnVzZXM= 33321
JG91dHB1dA== 33322
aWpk 33323
KEFjdGlvbkV2ZW50 33324
bW9uaXRvcg== 33325
IG1hdHRyZXNz 33326
SmFudWFyeQ== 33327
Lmpw 33328
IGNhcmFjdGVy 33329
IGltcG9zZQ== 33330
X3Jlc3Q= 33331
IFNpZ25hdHVyZQ== 33332
IGNvcm9uYXZpcnVz 33333
44GK 33334
X2NvbXBhcmU= 33335
TWVhc3VyZQ== 33336
aXRhdGVk 33337
ZWxpams= 33338
aWdvcw== 33339
ZXNhcg== 33340
IHJ1c2hlZA== 33341
bWV0cnk= 33342
X1NFUEFSQVRPUg== 33343
X1dF 33344
X0FUVFJJQlVURQ== 33345
IHlhbWw= 33346
IHNwZWNz 33347
IFJhaA== 33348
cGhlcmlj 33349
IEludmVzdG1lbnQ= 33350
w6RsbA== 33351
IGFwcGVhbGluZw== 33352
IHZpZXdwb3J0 33353
56k= 33354
IG1hcmdpbkxlZnQ= 33355
IHN1YnRyYWN0 33356
IEVESVQ= 33357
CUFycmF5TGlzdA== 33358
Z3JhZGluZw== 33359
IEZhaWx1cmU= 33360
YXNwZXI= 33361
RUVL 33362
KG5vdw== 33363
PG9iamVjdA== 33364
IEFsaWdubWVudA== 33365
cGxlYWRv 33366
cXR0 33367
KEVSUk9S 33368
IElOVkFMSUQ= 33369
IHVzZXJpZA== 33370
cmFpc2Vz 33371
SURJ 33372
IHZhcmlhbmNl 33373
IE5pbA== 33374
L2RlbGV0ZQ== 33375
X01BSU4= 33376
LlRva2Vu 33377
LkNhdGVnb3J5 33378
PikK 33379
Q29sbGlzaW9u 33380
IEdyZWF0ZXI= 33381
IFJhY2luZw== 33382
YWxhbg== 33383
IG1vbmV0YXJ5 33384
LG5ldw== 33385
IFNvcnJ5 33386
LkVuYWJsZQ== 33387
IEluc3RhbnRpYXRl 33388
b2xsZW4= 33389
66m0 33390
IENhbGxpbmc= 33391
X2hvdXI= 33392
QURB 33393
IHNoeQ== 33394
KSoq 33395
ID09Pg== 33396
IGVzcGVjaWFs 33397
IGludGVycHJldGVk 33398
IT0i 33399
IHBoYXJtYWN5 33400
LnNpbmdsZQ== 33401
IENpYWxpcw== 33402
IHBhcmFz 33403
LnRvVXBwZXJDYXNl 33404
IERlbW9u 33405
UHJpbWU= 33406
IHJhbmtpbmdz 33407
QWRkaW5n 33408
X0hBU0g= 33409
IEV4YW0= 33410
2qk= 33411
IFZpY3Rvcg== 33412
T2theQ== 33413
Il07DQo= 33414
IGZvcnR1bmU= 33415
IEZFVENI 33416
ZXhwYW5k 33417
LkludGVyb3A= 33418
IGJhcm4= 33419
5raI 33420
dWV2bw== 33421
IHNwZWN1bGF0aW9u 33422
4pSA4pSA4pSA4pSA 33423
IE51 33424
IEJsdWVz 33425
KGZuYW1l 33426
IGluaGFiaXQ= 33427
IFwiJQ== 33428
Q0VT 33429
dWxhcmlv 33430
X2Ny 33431
IHZhbGlkYXRlZA== 33432
IG1pZG5pZ2h0 33433
YW5raW5n 33434
IGluY29ycG9yYXRl 33435
IHB1cnN1aXQ= 33436
RVhQ 33437
cHJpbWU= 33438
UGlk 33439
LVVT 33440
IE51cnM= 33441
IFdoZWVs 33442
6Zg= 33443
IGlucA== 33444
IHN1cHBvcnRpdmU= 33445
Lm1lbWJlcg== 33446
IFNob3Q= 33447
LkNoZWNrQm94 33448
IGFmZmlybQ== 33449
VG9y 33450
RnVsbFllYXI= 33451
IGNvbnNpZGVyYWJseQ== 33452
Y3JlZGVudGlhbHM= 33453
X29wdHM= 33454
Um9sbA== 33455
KHJvdW5k 33456
IGNvbWVudA== 33457
X1VBUlQ= 33458
IGV4dGVuZGluZw== 33459
Ukc= 33460
cmVzdWx0YWRv 33461
aXR1 33462
LmdldFNlc3Npb24= 33463
IGF0dHJhY3Rpb24= 33464
JkQ= 33465
JGh0bWw= 33466
IEplc3NpY2E= 33467
IEFzc29jaWF0ZQ== 33468
YcOx 33469
X2Vk 33470
IExhZw== 33471
IG9yaWdpbnM= 33472
KCkpLT4= 33473
YWRkRXZlbnRMaXN0ZW5lcg== 33474
SUFMT0c= 33475
5ZCm 33476
LkNvbXBhcmU= 33477
QWxidW0= 33478
IEt1 33479
PFE= 33480
YXJnZXN0 33481
IHByb2xvbmc= 33482
IGNvbmZpZ3VyYXRpb25z 33483
IGFjY2lkZW50YWxseQ== 33484
X3Bob3Rv 33485
ICcnOw0K 33486
IHZlcnNl 33487
Qm9i 33488
IGZhcm1pbmc= 33489
ZGVsaXZlcnk= 33490
IE1hY2s= 33491
IHVzZVNlbGVjdG9y 33492
LmJvb3RzdHJhcGNkbg== 33493
a2VlcGluZw== 33494
ZW55 33495
LnVwbG9hZA== 33496
IE1FVEhPRA== 33497
Y3JlYXRvcg== 33498
PF8= 33499
IEVhc3Rlcg== 33500
Li0t 33501
VUlCdXR0b24= 33502
44KJ 33503
b21ldGVycw== 33504
IHNoaW5l 33505
IGhvZ3k= 33506
XHM= 33507
IGhhcm5lc3M= 33508
LkNlbGw= 33509
IGxpZnRpbmc= 33510
IGNvbWJpbmVz 33511
IE9jY3Vw 33512
ZXhjbHVkZQ== 33513
cGF0aWFs 33514
IHJlc3Bpcg== 33515
X2ZpdA== 33516
IGZpZnR5 33517
IE1vbA== 33518
IHR1bmVk 33519
LWRpbWVuc2lvbmFs 33520
IHFz 33521
IHRvcHM= 33522
PiI7Cgo= 33523
cXVpc2l0ZQ== 33524
Y2hhbm5lbHM= 33525
L3Jlcw== 33526
IEFuYWx5dGljcw== 33527
LmFwcGNvbXBhdA== 33528
L3Rv 33529
IG9uRXJyb3I= 33530
KGF0dHI= 33531
SVJN 33532
IHJhZ2F6 33533
LWFz 33534
LlNlY29uZA== 33535
b3JpZW50ZWQ= 33536
IGRvbm4= 33537
IGxpZ2h0bmluZw== 33538
Zmlk 33539
IFBsZQ== 33540
44G+44GZ 33541
dHJv 33542
LlRydWU= 33543
T2JzZXJ2YWJsZQ== 33544
15k= 33545
dW1iaW5n 33546
IHByb3NwZWN0aXZl 33547
LWZpbHRlcg== 33548
IHB1cnN1YW50 33549
KHBvaW50cw== 33550
LkJpbmQ= 33551
IHBhbG0= 33552
Y2xlYXJmaXg= 33553
w7Zz 33554
IEdvbno= 33555
IHdlYWtlbg== 33556
RHJpdmU= 33557
ZW5pZG8= 33558
bGxk 33559
b2JveA== 33560
YW5lYW4= 33561
R290 33562
5L+d 33563
UmVnZXg= 33564
5oM= 33565
IHNhbGFk 33566
YXNzaXM= 33567
Im5ldA== 33568
aW5oZXJpdERvYw== 33569
IFJW 33570
cXVpZXI= 33571
IGNsYXp6 33572
xLHFnw== 33573
b3N0ZXJvbmU= 33574
IGFpcmxpbmU= 33575
Lmxpc3RkaXI= 33576
IGRvd25sb2FkaW5n 33577
IFBhbG0= 33578
d2F1a2Vl 33579
Jmx0 33580
LkJM 33581
X0lOTElORQ== 33582
b2Zmcw== 33583
PDwo 33584
X25ld3M= 33585
IGNoYXNl 33586
Lz48 33587
IGV1cm9z 33588
IEVneXB0aWFu 33589
IFN0YWlubGVzcw== 33590
X0JPT0w= 33591
IEd1aWxk 33592
IER5bmFt 33593
W2luZGV4UGF0aA== 33594
IO8= 33595
IG1lbW9yYWJsZQ== 33596
IENoYW1waW9u 33597
UmVzb3VyY2VNYW5hZ2Vy 33598
LkxvZ2lu 33599
IEZvcm1lcg== 33600
eXBlZA== 33601
IGxsZWc= 33602
OyIs 33603
RFdPUkQ= 33604
IHRheGk= 33605
IGJvbWJz 33606
cmFo 33607
LnRhZ3M= 33608
X3Rlc3Rz 33609
c3RvbmVz 33610
4oCdKQ== 33611
W2c= 33612
cnR5cGU= 33613
IHZ1 33614
IGhvc3RpbGU= 33615
Q2hhcnM= 33616
IFBhdHJpb3Rz 33617
L3N0YXR1cw== 33618
PEI= 33619
IEluY29tZQ== 33620
IERhZA== 33621
IHBhdHJvbA== 33622
X0NIQU5HRQ== 33623
IHVwZ3JhZGVk 33624
IGNoaW5h 33625
c2V0cQ== 33626
U3RhcnRlZA== 33627
LlVuZGVm 33628
IGNoZWNrc3Vt 33629
IGZydXN0cmF0ZWQ= 33630
e28= 33631
IGVuZg== 33632
IHdvb2Rz 33633
IEFueW9uZQ== 33634
RW5jb2Rl 33635
IFF0V2lkZ2V0cw== 33636
YXJlYXM= 33637
IHNoZWVy 33638
c2tp 33639
ZW5kcG9pbnQ= 33640
X1Rlc3Q= 33641
U291cA== 33642
fn5+fn5+fn5+fn5+fn5+fg== 33643
KGZpbGVz 33644
CQkJCQkNCg== 33645
LnNwYXJr 33646
IHZhbHVlZA== 33647
ICUK 33648
LmNvbnRyb2xz 33649
IFhDVEFzc2VydEVxdWFs 33650
IGZhbWU= 33651
IFJpYw== 33652
RE9U 33653
IEFsYmVydGE= 33654
5L2/ 33655
b3NhbA== 33656
LldlYkNvbnRyb2xz 33657
IC0tLS0tLS0tLS0tLQ== 33658
IE1pcw== 33659
IFNZUw== 33660
Tm9ubnVsbA== 33661
PWl0ZW0= 33662
IGV4cGlyZQ== 33663
RGVjb2Rl 33664
X29wZXJhdGlvbg== 33665
IFZhbGlkYXRvcg== 33666
LkNFTlRFUg== 33667
dWZmcw== 33668
Km0= 33669
IGF2YW50 33670
5qyh 33671
4oCcWW91 33672
LnBlcm1pc3Npb24= 33673
Li4uKQ== 33674
IExpYw== 33675
X2Nvb3Jkcw== 33676
Lm5vbWJyZQ== 33677
Y2xv 33678
LkludGVybmFs 33679
IENobw== 33680
X3N3 33681
CUls 33682
Y2xr 33683
IGNhc3RsZQ== 33684
KGxheWVy 33685
cGl0 33686
IGd1aWRlZA== 33687
IOKWiA== 33688
IHN1cGVyYg== 33689
IHN1cHBsZW1lbnRz 33690
X2NlbnQ= 33691
IHBlZWs= 33692
SU5BUlk= 33693
LkNvbnRlbnRBbGlnbm1lbnQ= 33694
ZmFsbHM= 33695
IikpOw== 33696
V2FsbA== 33697
KS4NCg== 33698
IERhbm55 33699
aXJtaW5naGFt 33700
SUFMSVo= 33701
KGNyZWF0ZQ== 33702
Iklu 33703
U2VydmljZVByb3ZpZGVy 33704
IHByaWNlZA== 33705
bWFjcm8= 33706
YW1hYw== 33707
LmJveA== 33708
LS0tLQo= 33709
44Or 33710
IFN1aXQ= 33711
dXJzdA== 33712
YnJ1 33713
b3VybmFscw== 33714
bnVtZXJv 33715
X18oKQo= 33716
RGFz 33717
IE1pdHQ= 33718
dWRlcg== 33719
P1w= 33720
ZnU= 33721
W0I= 33722
IDopCgo= 33723
KGludGVy 33724
YnJhaW5z 33725
IGF0dGl0dWRlcw== 33726
VmVyaWZ5 33727
IHNpZ25hdHVyZXM= 33728
YWNrQmFy 33729
IGdk 33730
SmFjaw== 33731
LmNhdA== 33732
IHp6 33733
d2FyZg== 33734
RlRFUg== 33735
Iik7CgoK 33736
QWxpdmU= 33737
SUNMRQ== 33738
IFdoYXRldmVy 33739
IG91dGxpbmVk 33740
c3ByaXRl 33741
0LXQsg== 33742
X0FC 33743
X0RFUFRI 33744
IGNydXNoZWQ= 33745
YWFh 33746
KGV2 33747
5py6 33748
QW50aQ== 33749
SUNP 33750
aXNFcXVhbFRv 33751
LnN1bg== 33752
aWN1bG8= 33753
c2FsZQ== 33754
X2hleA== 33755
IFZr 33756
YXB0b3I= 33757
VW5pb24= 33758
IERpc2NvdW50 33759
bGlzdGE= 33760
LlVuZGVmT3I= 33761
IGF1dG9tYXRpb24= 33762
Tm9y 33763
5a+5 33764
5Y+C5pWw 33765
IHJlZmxleA== 33766
IExhdXJl 33767
LnNob3dNZXNzYWdlRGlhbG9n 33768
LnRlbXA= 33769
IGFrYW4= 33770
IF9fX19fXw== 33771
LklzVHJ1ZQ== 33772
QVJFRA== 33773
YWdsZQ== 33774
RW5lcmd5 33775
IHF1YW50aXRpZXM= 33776
4oCZw6k= 33777
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 33778
IGNpdGl6ZW5zaGlw 33779
bW91dGg= 33780
IGluYXBwcm9wcmlhdGU= 33781
IE91dGRvb3I= 33782
V2hpdGVTcGFjZQ== 33783
QW5vbnltb3Vz 33784
bG9hZHM= 33785
d2ViRWxlbWVudFByb3BlcnRpZXM= 33786
VGVu 33787
IGFjY2lkZW50cw== 33788
IGFkdmVydGlzZW1lbnQ= 33789
IFllbWVu 33790
KGNhbGw= 33791
IHNsYXZlcnk= 33792
0YHQvw== 33793
IExhbQ== 33794
X0JJVFM= 33795
b21lZ2E= 33796
IE9sZQ== 33797
IGtpZG4= 33798
X0Fu 33799
IFJhaWQ= 33800
Q3JlYXRpb24= 33801
c2F2ZWQ= 33802
IHByb3BvcnQ= 33803
V0FSTklORw== 33804
XFA= 33805
IHB3ZA== 33806
RGF0YVJlYWRlcg== 33807
aXNjaGVy 33808
YWRlb24= 33809
IFByZWRpY3Q= 33810
IHJlYXNvbmluZw== 33811
IGRlc3Ryb3lpbmc= 33812
SGVs 33813
KmQ= 33814
IExlZ2lzbA== 33815
X1By 33816
CQkJICAgICAgIA== 33817
IHN5bXBhdGg= 33818
IGNoZXNz 33819
IG1hbQ== 33820
OmhvdmVy 33821
IGNvbnZlcnRz 33822
IHBlbGE= 33823
IHByb2dyZXNzaW9u 33824
ICJfIg== 33825
IEdpbGw= 33826
CXNob3c= 33827
IHN1cHBvc2VkbHk= 33828
YWNjdXJhY3k= 33829
ZWxpbg== 33830
IHVuZm9sZGluZw== 33831
IEh5cGVy 33832
IHdhbm5h 33833
IHVwcw== 33834
KCM= 33835
IENyaW1pbmFs 33836
KFBvaW50 33837
YXRMbmc= 33838
YWN0bHk= 33839
IGNvbnRyYWN0b3Jz 33840
J119 33841
ZHJhdWxpYw== 33842
w7NkaWdv 33843
IFRU 33844
IFdpZGU= 33845
IEFSRw== 33846
X2lj 33847
RkxBR1M= 33848
U2Nob29s 33849
IGNsZWFyaW5n 33850
LWJlaW5n 33851
PXtb 33852
LGNvbnN0 33853
bWFuZW50 33854
T3ZlcmxheQ== 33855
KCci 33856
6YeP 33857
IFRpbWVzdGFtcA== 33858
IG1haWxpbmc= 33859
IENha2U= 33860
LlRoYXQ= 33861
IG1lZGl0YXRpb24= 33862
cXA= 33863
IGVtcHJlc2E= 33864
IExpb25z 33865
IHdlbGQ= 33866
IExpbmtlZElu 33867
IGN1c2g= 33868
IGdlbm9tZQ== 33869
LkluZGV4T2Y= 33870
YWdhaW4= 33871
IGZhbGxiYWNr 33872
IGNhbXBpbmc= 33873
cmVkZA== 33874
LXN0cmlwZWQ= 33875
IGR2 33876
RmVicnVhcnk= 33877
IFByb3h5 33878
dXNr 33879
IGRpZXNlbA== 33880
V1JJVEU= 33881
UkVBSw== 33882
TG9yZW0= 33883
Lkludm9rZQ== 33884
LWRpdg== 33885
SW50ZXJjZXB0b3I= 33886
IERI 33887
aWFsZXM= 33888
IHZpbGxhZ2Vz 33889
2LQ= 33890
IEVOVg== 33891
U3lz 33892
LlhS 33893
IHBvZW0= 33894
w4I= 33895
Y2FkZQ== 33896
cGxvdHM= 33897
IHso 33898
LmdpdA== 33899
L3N2Zw== 33900
bmNtcA== 33901
IMSN 33902
YWluZXM= 33903
5Ye95pWw 33904
ICgpCgo= 33905
b3BzaXM= 33906
IFJlbGF0aW9uc2hpcA== 33907
X2F1dA== 33908
IEJvbWI= 33909
CWNvbQ== 33910
KnNpemVvZg== 33911
b2ZmaWNpYWw= 33912
X3BheWxvYWQ= 33913
CQkJCQkgIA== 33914
Lm1hbmFnZXI= 33915
IEFyb3VuZA== 33916
CXNlbmQ= 33917
IEV4ZXJjaXNl 33918
IEJpbGx5 33919
aXZp 33920
IG5lZWRpbmc= 33921
X3VybHM= 33922
X3Rhc2tz 33923
IEhlbQ== 33924
IHRlYXJEb3du 33925
ZW5jcnlwdA== 33926
LnRpZQ== 33927
IGFzbQ== 33928
SUNI 33929
IENHUmVjdE1ha2U= 33930
7ISx 33931
dWxvbmc= 33932
IGl0cg== 33933
IEdTVA== 33934
IG9mZmVyaW5ncw== 33935
cm9iZQ== 33936
RUVF 33937
b3BlcmF0b3Jz 33938
X1BST1A= 33939
aW5kZW50 33940
QURF 33941
b3Jm 33942
65A= 33943
IGJsZXNzZWQ= 33944
dmFzY3VsYXI= 33945
IGNvbm9j 33946
SGFwcHk= 33947
QnJpZGdl 33948
aWxpdGF0aW9u 33949
am9pbnQ= 33950
IEFkbWluaXN0cg== 33951
LXRyYW5zZm9ybQ== 33952
IG1lYW50aW1l 33953
L0s= 33954
IEJlZHJvb20= 33955
IHJpZ2lk 33956
IGJyb3dzZXJz 33957
RU1QVFk= 33958
LlNlcmlhbGl6ZQ== 33959
X0VE 33960
IHN0aXRjaA== 33961
IGphbg== 33962
ZWxsdA== 33963
IGJyYWNl 33964
IHRyYWlscw== 33965
cHVibGlzaGVk 33966
5a+G56CB 33967
fScpCg== 33968
IGFjaWRz 33969
ICEhIQ== 33970
X2RpcmVjdA== 33971
PigpKTsK 33972
YWrEhQ== 33973
X09DQw== 33974
IHBsYW5ldHM= 33975
5p+l 33976
IER1Ymxpbg== 33977
IHNlcmll 33978
LnByaW50Zg== 33979
ZGVlcA== 33980
YCk= 33981
IFwk 33982
IM68 33983
X1ZJREVP 33984
ZW5kb3Jz 33985
IENyeXB0bw== 33986
RmFy 33987
LlRyYW5zcGFyZW50 33988
LlRS 33989
aWFzbQ== 33990
X3RyYWluaW5n 33991
IHRlYWNoZXM= 33992
IEJlbHQ= 33993
IGxpbWl0aW5n 33994
IEthdGg= 33995
IEluZGV4UGF0aA== 33996
IGFjaGlldmVtZW50cw== 33997
IHNlcsOh 33998
aW50ZXJvcFJlcXVpcmU= 33999
IGRpc3Nl 34000
Lklm 34001
YXJtaW5n 34002
dWxzaW9u 34003
UG8= 34004
X0RFVEFJTA== 34005
UHJvdG90eXBl 34006
IENBTA== 34007
IGFncmVlcw== 34008
LnZv 34009
LkV4ZWN1dGVOb25RdWVyeQ== 34010
IFRvcGlj 34011
ICd7fQ== 34012
QXJt 34013
IGVjYw== 34014
TWFn 34015
IHNlcmlhbGl6ZWQ= 34016
CWNvbm4= 34017
Y2FjaGVk 34018
PXRm 34019
IEJ5dGVBcnJheQ== 34020
cHJvdG9idWY= 34021
dmFyY2hhcg== 34022
CUFTU0VSVA== 34023
IGxpc3Rl 34024
X3RyaWdnZXI= 34025
t7g= 34026
RmVlbA== 34027
VGFob21h 34028
IExpaw== 34029
IHN0cnVjdHVyZWQ= 34030
ZXJndXM= 34031
LkluaXRpYWw= 34032
X2dl 34033
Y2xqcw== 34034
LmNvbnRhY3Q= 34035
IGFuZGVyZQ== 34036
JHN0bXQ= 34037
X0NVUlJFTlQ= 34038
IERpc2NvdmVy 34039
JHJlcw== 34040
Zm9ybWF0dGVy 34041
SGE= 34042
dmFuZ3N0 34043
IGVtZXJnZQ== 34044
44CC4oCd 34045
IENhYmluZXQ= 34046
LXNxdWFyZQ== 34047
6YOo 34048
IHJhZ2U= 34049
IEFK 34050
IFZU 34051
c2hhZG93 34052
IEZhaXRo 34053
ZW5hbWVz 34054
cHJldHR5 34055
aGFzaWw= 34056
cGFydHk= 34057
IHZhcmNoYXI= 34058
IGZvdG9z 34059
IGFsdW0= 34060
IEJlbGdpdW0= 34061
LnlsYWJlbA== 34062
IGRlag== 34063
X251bWJlcnM= 34064
IGh1 34065
LnNldEFkYXB0ZXI= 34066
IFVzdWFsbHk= 34067
KHNhbXBsZQ== 34068
LlNoYXJlZA== 34069
IGJvb2tlZA== 34070
ID4+PQ== 34071
IG1pbmVyYWxz 34072
Ij48Pz0= 34073
IGFkanVzdG1lbnRz 34074
IERM 34075
IHZpYnJhbnQ= 34076
IERlcGVuZGVuY3k= 34077
IHphcA== 34078
L1g= 34079
IGZvbnRz 34080
dHJpcA== 34081
0LjRhw== 34082
IHR1YmVz 34083
Y2xhbWF0aW9u 34084
IOun 34085
IHByb3RhZ29u 34086
b3Vwb24= 34087
IEJydXNo 34088
KHByZWQ= 34089
b3VybmV5 34090
J10pLT4= 34091
cHJvZw== 34092
Ym9v 34093
X21k 34094
X3BhY2s= 34095
KGV4cHJlc3M= 34096
dXR6 34097
XEF1dGg= 34098
LGlk 34099
IENoaWxl 34100
YWN0aWNl 34101
IHJlY3J1aXRtZW50 34102
IHBvc2Vz 34103
IHZ1bG5lcmFiaWxpdHk= 34104
aW5zdGFuYw== 34105
b3J1bQ== 34106
ZGVzcw== 34107
IHhs 34108
JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSU= 34109
KGZpZw== 34110
IGRlbGV0aW5n 34111
LmRlbA== 34112
KScpCg== 34113
IFdlZWtseQ== 34114
Pz8/ 34115
KHN0cmNtcA== 34116
c21pdGg= 34117
IHB1cnN1aW5n 34118
LXNv 34119
IEFwcHM= 34120
LycK 34121
IGRlY2lz 34122
Rk9SRQ== 34123
RXZlcnlvbmU= 34124
IGxhbmVz 34125
VmlydHVhbA== 34126
LmF0dGFjaA== 34127
KExvZw== 34128
IE1lZGljYWlk 34129
KFBhdGg= 34130
IFR1cm5lcg== 34131
L2FwcGxpY2F0aW9u 34132
IHBvcnRyYWl0 34133
IG9wcG9zZQ== 34134
Y2hlY2tvdXQ= 34135
IGZpbmlzaGVz 34136
X01F 34137
QmFycmllcg== 34138
U29uZw== 34139
VkFS 34140
RWFybGllcg== 34141
cmVsbGE= 34142
IGhhc3Q= 34143
YXphcg== 34144
IHB1bGxz 34145
bmd4 34146
IGluc3BpcmluZw== 34147
0YPRjg== 34148
LWRpcmVjdGlvbg== 34149
IGV4cGxvc2l2ZQ== 34150
IGNyZWF0ZWRBdA== 34151
c3Rv 34152
IHdoZWF0 34153
IEJ1aWx0 34154
J2Fp 34155
IHRyYWNrZWQ= 34156
aGFtbWFk 34157
Um93QXRJbmRleFBhdGg= 34158
X2hlYXA= 34159
RHVl 34160
IGNvbm5lY3Rz 34161
LnB1Ymxpc2g= 34162
ZW11 34163
IGJ1bGxldHM= 34164
QkFS 34165
b2xhdGU= 34166
IGludGVybmFsbHk= 34167
IGNhdGNoaW5n 34168
LXBhc3N3b3Jk 34169
b3VjaGVk 34170
5oCn 34171
ZW91cw== 34172
IHhyYW5nZQ== 34173
UXVhbGl0eQ== 34174
dnY= 34175
TWFuYWdl 34176
KCgk 34177
YWNlbWVudHM= 34178
IEJyb3RoZXJz 34179
IEhFQUQ= 34180
IFVuc3VwcG9ydGVk 34181
c2Fu 34182
ZXNp 34183
KioqCg== 34184
IGFkYXB0YXRpb24= 34185
IFdvcmtlcg== 34186
J10v 34187
LnNhdmVmaWc= 34188
KHRyYW5z 34189
2Kw= 34190
bmVl 34191
Q29ycmVjdA== 34192
Li4uIikK 34193
IHN1Ym1pdHRpbmc= 34194
LXBhdGg= 34195
CWxhc3Q= 34196
aXNzYW4= 34197
LnhsYWJlbA== 34198
IFNlcGFy 34199
L25v 34200
X2Jlc3Q= 34201
IE1pbGxz 34202
X3NvY2s= 34203
KGZsYWc= 34204
IGRlc3RpbmF0aW9ucw== 34205
ZW1wdGlvbg== 34206
IEZBSUw= 34207
5ZKM 34208
IHJw 34209
ZmFjdA== 34210
CWxlbg== 34211
REFZ 34212
IHNlaXo= 34213
X2RzdA== 34214
bGlw 34215
LkxpbmVhcg== 34216
IEJhc2tldA== 34217
JHQ= 34218
JGk= 34219
LWJyYW5k 34220
IE5laWw= 34221
IEVx 34222
IHRob3U= 34223
b2dlbmU= 34224
IHNjaG9sYXJzaGlw 34225
5pu0 34226
IHN3bw== 34227
YWdpbmF0b3I= 34228
ZW5p 34229
KGJvb2s= 34230
IGJsaW5r 34231
dGh1cw== 34232
IGNhbmNlbGxhdGlvblRva2Vu 34233
IFBhbGVzdGluaWFucw== 34234
IHByb2ZpdGFibGU= 34235
IGJhY2twYWNr 34236
ZW5zb24= 34237
PExvbmc= 34238
IHBvb2xz 34239
IHN0aWNrcw== 34240
IHNwb2tlc3dvbWFu 34241
QmVpbmc= 34242
IEhlcml0YWdl 34243
IE5pa2U= 34244
U0hB 34245
IE5vdEltcGxlbWVudGVkRXhjZXB0aW9u 34246
JGNvcmU= 34247
IFJpY28= 34248
L2xhdGVzdA== 34249
IEN6ZWNo 34250
bmVyUmFkaXVz 34251
KGxpbmVz 34252
IHNlbWVzdGVy 34253
IHdvdW5kcw== 34254
UHJvY2VkdXJl 34255
Lm1haWw= 34256
KCkpOgo= 34257
IGNvcnJpZA== 34258
dGVyZWQ= 34259
IE5DQUE= 34260
IGdhbGF4eQ== 34261
X2tpbmQ= 34262
aWxr 34263
IHRyYXM= 34264
X1BPTA== 34265
IEhldA== 34266
IHJlZnVnZWU= 34267
IHRlZW5hZ2U= 34268
LmJpbmRpbmc= 34269
cG9zdGFs 34270
IGnDp2lu 34271
IERhdGFUeXBl 34272
6ZY= 34273
eWNsZXJ2aWV3 34274
LHZhbHVl 34275
X2lkZW50aWZpZXI= 34276
PGI= 34277
IG91dGZpbGU= 34278
DQogICAgDQo= 34279
IGNyw6k= 34280
IHJlc3BvbmRlbnRz 34281
IEJlYXN0 34282
Y2VsZWQ= 34283
IGludGVyZg== 34284
LXRoZW1l 34285
Z2lm 34286
IFJhbmdlcnM= 34287
SVRBTA== 34288
IGF1dGhlbnRpY2F0ZQ== 34289
Q29tcGxldGlvbg== 34290
dXJzb3Jz 34291
IGNpbmVtYQ== 34292
IGRpc2NvdXI= 34293
IEphdw== 34294
T0NLRVQ= 34295
IHByYXllcnM= 34296
IEx1aXM= 34297
ZnJhZw== 34298
PVsK 34299
IGJyYXZl 34300
X3Bvc2U= 34301
Q2VydGlmaWNhdGU= 34302
LWZl 34303
aWZlcmF5 34304
IEZsYWdz 34305
Q29udGFpbmVyR2Fw 34306
IENyaXQ= 34307
UmVzdWx0U2V0 34308
CWN1cg== 34309
IGNvcnJlc3BvbmRz 34310
U3RhZmY= 34311
Lkh0dHBTZXJ2bGV0UmVxdWVzdA== 34312
IG5ldXJvbnM= 34313
IE1haW5BeGlzQWxpZ25tZW50 34314
ZWRhcg== 34315
IGdhZA== 34316
X3BhcnRz 34317
IM6y 34318
IGZ4 34319
L2ZpbGVz 34320
IEJyb3M= 34321
aGlwcw== 34322
IGdsdWNvc2U= 34323
IGZhcm1z 34324
IG1lbnRhbGx5 34325
cmVzdGF1cmFudA== 34326
VGFibGVOYW1l 34327
IE1lcmNlZGVz 34328
LlZpc3VhbA== 34329
IGFuY2g= 34330
aW5hbGc= 34331
X3J1bnRpbWU= 34332
IHByb3ByaWV0YXJ5 34333
IGludGVudGlvbnM= 34334
aXpp 34335
U2xpY2U= 34336
OyI+PC8= 34337
X1dPUkQ= 34338
XE1pZ3JhdGlvbnM= 34339
IEVOQUJMRQ== 34340
X1BBUkFNRVRFUg== 34341
IEJpc2hvcA== 34342
LnN1YmplY3Q= 34343
aWxsYXM= 34344
Lm1hdHJpeA== 34345
dXJyZW5jZXM= 34346
Knk= 34347
IGNvc3RseQ== 34348
IENodWNr 34349
IGNsb3Nlcw== 34350
IE1pZ2h0 34351
LXN0b3Jl 34352
IG1hbGw= 34353
aWV0ZW4= 34354
LkFicw== 34355
IGNvdXBsZWQ= 34356
LmJhc2lj 34357
IDo6Ojo6Ojo6 34358
TWFrZXI= 34359
Y2Fubm90 34360
IGFjaA== 34361
IEVsaQ== 34362
4oiS 34363
b3JuYQ== 34364
IGNwcw== 34365
IHRoZXJlb2Y= 34366
IEB7 34367
IE5TTXV0YWJsZUFycmF5 34368
zr0= 34369
cHJvZHVjdGl2ZQ== 34370
U3F1YXJl 34371
dGVtcHRz 34372
IGVsaW1pbmF0ZWQ= 34373
PE0= 34374
IGNvbnNlcnZhdGl2ZXM= 34375
IFN1cmc= 34376
LnBhcg== 34377
IEJ1Y2g= 34378
KmI= 34379
Rm9ydA== 34380
Q29sb3Vy 34381
IENoaQ== 34382
ZWRpYw== 34383
PnRydWU= 34384
IE5ZQw== 34385
IGJvcmVk 34386
IERldGVjdA== 34387
IGFwcGFy 34388
IGplYW5z 34389
IFRhaw== 34390
SU9E 34391
IEhvcnNl 34392
KEZJTEU= 34393
KD8= 34394
cmlxdWU= 34395
b3B0aW1pemVy 34396
bmF0 34397
bG95cw== 34398
CVRva2Vu 34399
b3VidGVk 34400
dWVzcw== 34401
b2NvYQ== 34402
RGF0YU1lbWJlcg== 34403
X1BPV0VS 34404
Y2xhc3NMaXN0 34405
UHVzaEJ1dHRvbg== 34406
IFdpRmk= 34407
LlN0cmVhbQ== 34408
Lmd1aWxk 34409
IG5vZw== 34410
IFBvcnR1Z2Fs 34411
IFVudGVy 34412
UHJpbWl0aXZl 34413
Ym9zcw== 34414
IERldXRzY2g= 34415
IGVyb3RpYw== 34416
IHN0cmNvbnY= 34417
LlRyeVBhcnNl 34418
IGdyYW1z 34419
LlN1Y2Nlc3M= 34420
X3Br 34421
IEhhcnZleQ== 34422
LW1pbmRlZA== 34423
LmNvdW50cnk= 34424
W10i 34425
IGFuZ2Vs 34426
IGJlYXRz 34427
IFZvcg== 34428
aWxpbw== 34429
Lm1hc3Rlcg== 34430
c29tZXRoaW5n 34431
IFBBQ0s= 34432
KGlm 34433
UmVxdWVzdEJvZHk= 34434
IGFudGVz 34435
L3dpZGdldA== 34436
IG1vZG8= 34437
IEFX 34438
ZmluZGVy 34439
IG9wdGltaXplZA== 34440
IG1pc3NpbGVz 34441
TkI= 34442
CWludGVybmFs 34443
dGV4 34444
IFNyaQ== 34445
IGRhbWFnaW5n 34446
IE1haXM= 34447
LUFsbG93 34448
IFpo 34449
LWFsdA== 34450
ICkpOwoK 34451
6Ik= 34452
IGluZmx1ZW5jZXM= 34453
IGNhdGFs 34454
X1JFR0lTVEVS 34455
IEFQSXM= 34456
LWNlbnR1cnk= 34457
IGJpb2xvZ3k= 34458
IEFjdHVhbA== 34459
IGhlZWxz 34460
VFJBQ0U= 34461
X0RJRw== 34462
RGF0YXNldA== 34463
IE1hdHRlcg== 34464
IGNsYXNzaWZpZXI= 34465
Lndpa2lwZWRpYQ== 34466
IFJvZ2Vycw== 34467
IGRvbmF0ZWQ= 34468
cmF3bGVy 34469
ZW5lbg== 34470
IGNhc2lub3M= 34471
b3J0YWw= 34472
IHByaXZl 34473
c3Bl 34474
ZHVjZXJz 34475
LmVw 34476
IGdyYXNw 34477
YWNqaQ== 34478
IGRhaXJ5 34479
IGJ1c2Vz 34480
LmNvbW0= 34481
Lmlucw== 34482
IElSUw== 34483
IEJlZXI= 34484
YWRj 34485
b2FyZA== 34486
X01FVA== 34487
ICcrJw== 34488
cmFucw== 34489
IGtpbmRh 34490
IOKUgg== 34491
IE1hdXI= 34492
0LDQsw== 34493
IGJhbmR3aWR0aA== 34494
aWJ1cw== 34495
IERpZmZlcmVudA== 34496
KG1hdA== 34497
IFJlc3VtZQ== 34498
X1VOUw== 34499
ZXN0YWJsaXNo 34500
IGZvbmN0aW9u 34501
U3Vic2NyaXB0aW9u 34502
X2NvbXBhbnk= 34503
IGxpZ2h0bHk= 34504
LmNvbmZpcm0= 34505
LnlhbWw= 34506
IEJvb3N0 34507
Q29tbWVyY2U= 34508
LXRlbXBsYXRl 34509
X0RFTEFZ 34510
IEhJ 34511
IG5hdmln 34512
KFNlbmRlcg== 34513
IEhT 34514
XyIr 34515
IFJFUVVFU1Q= 34516
IHdpZmk= 34517
PSIiCg== 34518
XSktPg== 34519
IHJvcGU= 34520
IHZpb2xhdGVk 34521
IGdsYW5jZQ== 34522
IEt1cmQ= 34523
IOiu 34524
ZGVjaw== 34525
IElTQk4= 34526
IGluZmVjdA== 34527
IEZvbw== 34528
IGdldHRlcg== 34529
IHRlbmVy 34530
YXBwZQ== 34531
Lmho 34532
X2hvdA== 34533
PEFN 34534
cG9seQ== 34535
ISIsCg== 34536
IGNvbnZlcnRpbmc= 34537
IFdXRQ== 34538
Uk9T 34539
KCd7 34540
Q29tbWl0 34541
KUw= 34542
IE9yZQ== 34543
IHNwYXJzZQ== 34544
IGRpc3Bvc2Fs 34545
IGNhbmNlbGVk 34546
5ZCO 34547
IGFlcg== 34548
IHZpbnls 34549
4buD 34550
cmVjb2du 34551
YXJraW5n 34552
IHRyaWNreQ== 34553
KnM= 34554
IHByb2NlZWRz 34555
IGlzbw== 34556
IGNvY29udXQ= 34557
IGNyYWZ0ZWQ= 34558
SUVMRFM= 34559
IHF1ZXN0bw== 34560
IGNvbW11bg== 34561
X0NPTk5FQ1Q= 34562
IHRyYWZmaWNraW5n 34563
RGVlcA== 34564
YcOnw7Vlcw== 34565
Y29kaWdv 34566
dmVhdQ== 34567
IGJldHJheQ== 34568
aW50YQ== 34569
VEVE 34570
w6Zy 34571
bWFydA== 34572
X0JVUw== 34573
L3Nj 34574
aWFsbHk= 34575
IGNpZ2FyZXR0ZXM= 34576
6K+B 34577
KG5u 34578
IG1vZGVsaW5n 34579
L3Byb2R1Y3Rz 34580
d2Fybg== 34581
IG1ldHJv 34582
IEl2 34583
Jik= 34584
IENhYmxl 34585
zrs= 34586
Q29tcGFyaXNvbg== 34587
Z2FyeQ== 34588
IEJB 34589
UEFSVA== 34590
IHB2 34591
X3VwZGF0ZWQ= 34592
Q3JlZGl0 34593
b3J0aHk= 34594
b2JzZXJ2YWJsZQ== 34595
IHRoZWF0cmU= 34596
QkxF 34597
O30KCg== 34598
bGF1bmNo 34599
X3N0cmluZ3M= 34600
dWdv 34601
IFJQRw== 34602
LWF1dGg= 34603
0KA= 34604
aG9sbQ== 34605
IFBhbmQ= 34606
VWlk 34607
IGltcGx5 34608
7Jy8 34609
J109Jw== 34610
L1VzZXI= 34611
IHN0cmNhdA== 34612
0L3Ri9C5 34613
RGF0YUFkYXB0ZXI= 34614
IGxhbmRzYw== 34615
IGRpcGxvbWF0aWM= 34616
77yT 34617
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 34618
IENoaWNrZW4= 34619
IGJjcnlwdA== 34620
LkluZg== 34621
W2NvbA== 34622
IFF1YW50aXR5 34623
LXBvc2l0aW9u 34624
IGRpZXRhcnk= 34625
IGZpbG1t 34626
SXNyYWVs 34627
UHJldg== 34628
IE1pbGxpb24= 34629
IHJlbWVk 34630
IGJpbGxpbmc= 34631
IG91dGRvb3Jz 34632
LnRt 34633
IG5hZA== 34634
Rm9yZw== 34635
Wlo= 34636
IHNzbA== 34637
XSwn 34638
S1Q= 34639
ZnJlcQ== 34640
PWRvY3VtZW50 34641
Ymx1cg== 34642
rLg= 34643
IEplZmZlcnNvbg== 34644
Q3M= 34645
KHNhdmU= 34646
IHN0cmFw 34647
SW5kaWE= 34648
IGlkZW9sb2d5 34649
Qk9TRQ== 34650
IEZQ 34651
KGFucw== 34652
IGZldmVy 34653
IFlhbQ== 34654
S2luZw== 34655
4LI= 34656
QVRJTkc= 34657
Ym9oeWRy 34658
cm9sbGJhY2s= 34659
IG5ld05vZGU= 34660
IE5WSURJQQ== 34661
IGhvbm91cg== 34662
IENvbmZpcm0= 34663
eGJk 34664
IHN1Y2Nlc3Nvcg== 34665
L3U= 34666
bGl2 34667
b3VybmFtZW50cw== 34668
QXR0YWNobWVudA== 34669
IGdydXA= 34670
IHRyaWJl 34671
IGNhcmVz 34672
ZWZ0 34673
X3NhbWU= 34674
J2xhYmVs 34675
IOOAkA== 34676
TW90b3I= 34677
IGluZXhw 34678
ICIoIg== 34679
X1BPU0lUSU9O 34680
IHZhbGxleQ== 34681
IFJlc3VsdFNldA== 34682
IHByZXNlcnZlZA== 34683
IG11dGF0aW9ucw== 34684
IHF1ZXN0aW9uaW5n 34685
bXVuaXRpb24= 34686
cGFyc2VJbnQ= 34687
IFNy 34688
IE1ldGFkYXRh 34689
4oCd77yM 34690
dGltZXN0YW1wcw== 34691
IHRyYW5zaXRpb25z 34692
7Zk= 34693
0Yo= 34694
aW9t 34695
LkRv 34696
IHBpbmU= 34697
IGZ1bmc= 34698
IHRyYW5zbWl0dGVk 34699
Y3RpbWU= 34700
IEZhbQ== 34701
UmV2aXNpb24= 34702
QmFz 34703
VVBFUg== 34704
RGVzdGluYXRpb24= 34705
dG9IYXZlQmVlbkNhbGxlZA== 34706
IHVuZm9ydHVuYXRl 34707
SU5FUw== 34708
X3Byb2Y= 34709
QW1vbmc= 34710
IEN5YmVy 34711
IEJhdHRlcnk= 34712
Z2VucmU= 34713
IFZpZXdNb2RlbA== 34714
LT0= 34715
IHV0aWxpemVk 34716
cGFpbnQ= 34717
LkludGVnZXJGaWVsZA== 34718
ZXJuaXR5 34719
Y29tcGlsZXI= 34720
4oCLCgo= 34721
IE1hc3RlcnM= 34722
LlRvQXJyYXk= 34723
IHN0cnRvbA== 34724
IFVrcmFpbmlhbg== 34725
fSkpOwo= 34726
IHNoZW1hbGU= 34727
IlRoYXQ= 34728
Zm9yYWxs 34729
L2Rvd25sb2Fk 34730
IHJoZXRvcmlj 34731
LmxhdGl0dWRl 34732
IFdIRU4= 34733
IHNob2NraW5n 34734
SUZJQw== 34735
Lk5vcm1hbA== 34736
X0ZPTERFUg== 34737
IGRyaWZ0 34738
IG1vdW50aW5n 34739
LWJvb2s= 34740
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK 34741
IFdpcmVsZXNz 34742
PiIuJA== 34743
IHJlbGllcw== 34744
KENvbnNvbGU= 34745
SW50ZXJuYXRpb25hbA== 34746
LT57JA== 34747
TWlk 34748
IGRpc3NlcnQ= 34749
ZGRz 34750
IGRlcG9zaXRz 34751
CWRyaXZlcg== 34752
I2dh 34753
cHJpc2luZw== 34754
cHJpbnRsbg== 34755
IHByZXNlbnRlcg== 34756
IG1pbmVz 34757
Q1NT 34758
IER1YWw= 34759
KCEo 34760
IGthbQ== 34761
IGlzTG9hZGluZw== 34762
IFByb3RlY3Q= 34763
LnVwcGVy 34764
YXJpdW0= 34765
XToKCgo= 34766
WWlp 34767
LXNoaXJ0 34768
IElNQUdF 34769
X2NvbG9ycw== 34770
IHVyZ2VudA== 34771
LkNvbnRhaW5lcg== 34772
ISgK 34773
U2F0dXJkYXk= 34774
IHNvY2lldGllcw== 34775
IFRoYW4= 34776
IENvZA== 34777
PUA= 34778
IGF0dGFjaG1lbnRz 34779
Lm1vYmlsZQ== 34780
IHNwaXRl 34781
IGJvdW5jZQ== 34782
cmF3bA== 34783
aW5zdGFuY2V0eXBl 34784
IFRydWNr 34785
IG1hbmlwdWxhdGlvbg== 34786
KENvbmZpZw== 34787
LWluc3Q= 34788
IHN0b3I= 34789
aXR1dGlvbg== 34790
UHJlZmVycmVkR2Fw 34791
IG1haW5BeGlzQWxpZ25tZW50 34792
IGxpc3RlbmVk 34793
JycnCgo= 34794
b3R0YWdl 34795
LXByb2plY3Q= 34796
LkFQUExJQ0FUSU9O 34797
CXJvb3Q= 34798
IHdoaXQ= 34799
IGJpbGRlcg== 34800
IGtlcg== 34801
IGFwcGxpYW5jZXM= 34802
cm93YXZl 34803
7J2A 34804
ZW1hdGljcw== 34805
IE9yZw== 34806
b3Bpbmc= 34807
X1NFQVJDSA== 34808
IGNoYW0= 34809
YWRkQ29udGFpbmVyR2Fw 34810
ICgpLg== 34811
IEFycm93 34812
SWxsZWdhbA== 34813
Q3VycmVudGx5 34814
IHVzYQ== 34815
IHBhc3N3b3Jkcw== 34816
IHJlbm93bg== 34817
YXZlcm4= 34818
IEV2aWw= 34819
IGNvbmNhdA== 34820
IGR1bw== 34821
IHZhbGU= 34822
IEJlYW4= 34823
IGluZGljYXRvcnM= 34824
Y21hdGg= 34825
IFB1bXA= 34826
Tm92ZW1iZXI= 34827
aWZpY2FudA== 34828
X0RPTUFJTg== 34829
cmVnYXI= 34830
IFBvcnRhbA== 34831
IiQ= 34832
IGZvcm1lcmx5 34833
Il06Cg== 34834
IFZpc2liaWxpdHk= 34835
LmdldEVsZW1lbnRzQnlDbGFzc05hbWU= 34836
X1JFRA== 34837
IGNoYW1waW9ucw== 34838
4LQ= 34839
VmFsb3I= 34840
X2Vz 34841
KmE= 34842
LXJlcGVhdA== 34843
QmFuZA== 34844
LnN0YWdl 34845
IGJ1cmVhdWM= 34846
Q250 34847
ZXRlbg== 34848
LWZ1bmN0aW9u 34849
IG11aXRv 34850
UElE 34851
X2VkaXRvcg== 34852
IGNyYXNoZWQ= 34853
ZGVhZA== 34854
a2F0 34855
YWdo 34856
IEVYVA== 34857
YXNzZXI= 34858
LXNtYWxs 34859
IHJlYWxpeg== 34860
KEVudGl0eQ== 34861
w7pz 34862
IEFjdHVhbGx5 34863
IEVsaXRl 34864
IGhlbG0= 34865
KG5vbmF0b21pYw== 34866
YXNoZXI= 34867
Q29tbXVuaXR5 34868
YWxsZW5n 34869
aXJ5 34870
IEdyb3d0aA== 34871
IHN1ZQ== 34872
IGZyZXF1ZW5jaWVz 34873
X2Rlc2NyaXB0b3I= 34874
LkF0dHJpYnV0ZQ== 34875
IHJlY2lwaWVudHM= 34876
X05T 34877
LyIr 34878
aWJhbg== 34879
IGF0aGxldGU= 34880
IElnbg== 34881
X0RNQQ== 34882
KGRz 34883
IFJlcXVpcmVtZW50cw== 34884
QURJ 34885
ZXJleg== 34886
XEFkbWlu 34887
YnJhc2th 34888
IFJ1c3Q= 34889
UmVsYXRpb24= 34890
Q09E 34891
IFZFUlNJT04= 34892
ZW1tYQ== 34893
KSl7 34894
LkR1cmF0aW9u 34895
IENhbWI= 34896
LWxvZ28= 34897
IHJlYWRhYmxl 34898
IGNyZWF0b3Jz 34899
KCldOwo= 34900
VXBEb3du 34901
LWhhbGY= 34902
LmdldE1vbnRo 34903
KHNm 34904
UGlj 34905
IGh1bmdlcg== 34906
LnR4 34907
IGV4Y2VlZGVk 34908
X3NlZWQ= 34909
KF4= 34910
X3Nr 34911
LnBlcmZvcm0= 34912
ID46Og== 34913
IG1vbmdv 34914
PWZsb2F0 34915
YmluZFBhcmFt 34916
U21hcnQ= 34917
aWZh 34918
IHNlY3VyaXRpZXM= 34919
IHByZWp1ZA== 34920
ICwi 34921
IGNvcnBz 34922
IHZyYQ== 34923
YW1hY2FyZQ== 34924
aXRlcnI= 34925
KE1lZGlh 34926
dWNoZQ== 34927
IGNvYg== 34928
IGxpYmVy 34929
Lmdlb21ldHJ5 34930
TG9jYXRvcg== 34931
IHNsaWRpbmc= 34932
IHN1cmdpY2Fs 34933
X0NVUg== 34934
IGNvbnNlY3Q= 34935
Wyo= 34936
IFJlc29ydA== 34937
U3R1Yg== 34938
X0RPVUJMRQ== 34939
IFNvcGg= 34940
IGVsZWN0b3JhbA== 34941
X2Rpc2FibGU= 34942
INGB0L4= 34943
IExpZ2h0bmluZw== 34944
IG1lbnRpb25z 34945
b2N5 34946
IGxlYWtlZA== 34947
IHJlbGF4aW5n 34948
UHJlc2VudGVy 34949
dnNw 34950
IGd1aWx0 34951
PS09LQ== 34952
LnJlcGx5 34953
IE1pcnJvcg== 34954
Q2FtcA== 34955
ICsjKyMrIys= 34956
ICsjKyMrIysjKyMr 34957
LkF1dGhvcg== 34958
IGRpcmVjdGl2ZQ== 34959
LWhvb2s= 34960
7YSw 34961
fQoKCgoK 34962
QHB5dGVzdA== 34963
X3JhbmQ= 34964
bWlz 34965
IGNvbG9yZnVs 34966
dWpl 34967
bGFzc2Vz 34968
IENsYXNzZXM= 34969
LmhhdmU= 34970
JSks 34971
6aKY 34972
IGRpc3R1cmJpbmc= 34973
c3Vic3RyaW5n 34974
IEtvaA== 34975
SW52ZXN0 34976
cHVyY2hhc2U= 34977
IHJlY3ljbGluZw== 34978
IEFSVA== 34979
aWVyYXJjaHk= 34980
IGZwcw== 34981
LmNoZWNrQm94 34982
7ZW0 34983
X21hdGVyaWFs 34984
ZHVjYXRpb24= 34985
IGZ3 34986
dWRpdA== 34987
IHJldmlld2luZw== 34988
IFNpZA== 34989
U3ludGF4 34990
IFdyaXR0ZW4= 34991
YXJnYXI= 34992
VU1F 34993
L3E= 34994
Q2xhc3NpZmllcg== 34995
T2ZmaWNpYWw= 34996
IGpheno= 34997
IG9tZWdh 34998
UGh5c2ljcw== 34999
IGx1Z2Fy 35000
X2FjY2Vzc29y 35001
LmNvbW1hbmRz 35002
QWJpbGl0eQ== 35003
IEJhdGNo 35004
UkFN 35005
IGVuY291bnRlcnM= 35006
LlF1 35007
QllURQ== 35008
IERpc3RyaWJ1dGlvbg== 35009
IHVzbw== 35010
IFJlY292ZXJ5 35011
YXBwcm92ZWQ= 35012
IGRlbmlhbA== 35013
L3NoYXJl 35014
TGlua2VkTGlzdA== 35015
KQ0KDQoNCg== 35016
dWRkeQ== 35017
IGZpbmVz 35018
IHJ5 35019
VW5pY29kZQ== 35020
CXJlbmRlcg== 35021
IHByZW1pc2Vz 35022
IHBvbg== 35023
YWxpYXNlcw== 35024
L0ZvdW5kYXRpb24= 35025
Y3VkYQ== 35026
IENvY2s= 35027
LDop 35028
KGZvbGRlcg== 35029
IG3DqWQ= 35030
ZHJhZw== 35031
IHRhbGVudHM= 35032
ICAgCgo= 35033
0LXRgdGC0LI= 35034
bW9i 35035
LnltbA== 35036
IGFzdGVy 35037
IGRpc2NyZQ== 35038
Z29hbA== 35039
IEdUWA== 35040
IFNVQ0NFU1M= 35041
IExPTkc= 35042
KGZpbmQ= 35043
IHNpbmd1bGFy 35044
X3N6 35045
IEV0aGVyZXVt 35046
Li4K 35047
IGlycmVz 35048
Jykpewo= 35049
IG1pbmlzdGVycw== 35050
U3RlcHM= 35051
aXZlcnNhbA== 35052
IE5ldmVydGhlbGVzcw== 35053
LWxlZA== 35054
ICglKQ== 35055
56Gu 35056
IHRpbWV6b25l 35057
IHN0cmFuZ2Vy 35058
KHJlbmRlcg== 35059
IHNodXRpbA== 35060
IG1waA== 35061
IHRyaW8= 35062
cHB5 35063
IHByZWRvbWlu 35064
IGVuZG9ycw== 35065
IFJ1c3NpYW5z 35066
CXJvdw== 35067
IHdpemFyZA== 35068
LnNlcmlhbGl6ZQ== 35069
IGNvbXBsYWluZWQ= 35070
IHNpZG8= 35071
IGRlbGlnaHRlZA== 35072
LW1l 35073
IFJhdg== 35074
SHVtYW4= 35075
YWRheXM= 35076
cmVjdg== 35077
V29ya2luZw== 35078
SnVtcA== 35079
IMOlcg== 35080
IEF1dG9tYXRpYw== 35081
X0Jhc2U= 35082
5qC8 35083
YXVyYW50cw== 35084
wq8= 35085
5rg= 35086
KENUeXBl 35087
SUZJ 35088
KGFtb3VudA== 35089
IGJlbGlldmluZw== 35090
PW15c3Fs 35091
IGZpcg== 35092
IHJlc3RvcmF0aW9u 35093
ZXJlY28= 35094
0KI= 35095
Xycr 35096
IGVib29r 35097
IGRlYnJpcw== 35098
KGlucHV0cw== 35099
QVlPVVQ= 35100
IHNjcmVhbWluZw== 35101
YXZpYQ== 35102
bGFuZGVy 35103
IGRpc3RyZXNz 35104
IGFzc2VtYmxlZA== 35105
IEF2b2lk 35106
KHRocmVhZA== 35107
IFJQQw== 35108
X0VYSVQ= 35109
KHF1ZXVl 35110
0LjRgdGC 35111
RGxs 35112
IHNrdWxs 35113
X3B1Yg== 35114
Y2hleg== 35115
bWluYXRl 35116
ZW5zZW4= 35117
IGluc2FuZQ== 35118
Ym91bmRz 35119
IFJvc2Vu 35120
IGNvbmRpdGlvbmluZw== 35121
cHJvY2Vzc2Vk 35122
dmlkZW9z 35123
Zm91cg== 35124
LkNvbnY= 35125
fDsK 35126
UGVyc29uYWw= 35127
Y2VycHQ= 35128
OlVJQ29udHJvbFN0YXRlTm9ybWFs 35129
IGRvc2Vz 35130
IEthcmw= 35131
IEZyZXF1 35132
LkJBU0U= 35133
IFZvdGU= 35134
IGNvbmN1cnJlbnQ= 35135
IE1lc3NhZ2VCb3hJY29u 35136
IMOW 35137
IER1YmFp 35138
IFJldGFpbA== 35139
Om51bWJlcg== 35140
IE9ic2VydmVy 35141
IEJpZ0ludGVnZXI= 35142
X29yaWdpbg== 35143
X1dPUks= 35144
RnJhbWVz 35145
IG5vdGFibHk= 35146
LuKAnA== 35147
IHRyb3BpY2Fs 35148
IG5pY2hl 35149
YW1pbmE= 35150
LnN5cw== 35151
KHRva2Vucw== 35152
bW9kaWZ5 35153
b3NpdA== 35154
c3Ryb20= 35155
IENvbWljcw== 35156
T1BUSU9O 35157
VGlja2V0 35158
IGZhY3Rvcmllcw== 35159
IGRpc3B1dA== 35160
X0ZpbGU= 35161
IEZpbm4= 35162
ZWVl 35163
IERpc2NvcmQ= 35164
X21vbmV5 35165
LnRwbA== 35166
X3NhZmU= 35167
TEI= 35168
IGdsdXQ= 35169
Sks= 35170
LmZsb3c= 35171
LWNvbnQ= 35172
Z29z 35173
IGhvcml6b24= 35174
IFJ1c2g= 35175
Ojoq 35176
UGlwZQ== 35177
dWxsYQ== 35178
Ym9yb3VnaA== 35179
aGVpbWVy 35180
KG1vdmU= 35181
KFRleHQ= 35182
fSk7DQoNCg== 35183
d2VsY29tZQ== 35184
IENvbXBvbmVudHM= 35185
IGdvdmVybmFuY2U= 35186
Y2xvc2Vk 35187
CW1hcmdpbg== 35188
IGxhdW5kcnk= 35189
IFRlcm1pbmFs 35190
aXphcmRz 35191
LuKAlA== 35192
LnJlbW90ZQ== 35193
LnJhZGl1cw== 35194
IFF1ZWJlYw== 35195
IGRo 35196
VGVjaA== 35197
IE1pc3Q= 35198
c2VsbGVy 35199
X2xpdGVyYWw= 35200
IGdlbml1cw== 35201
IGJyYWlucw== 35202
Z2Vt 35203
IE1lYXN1cmU= 35204
IGNhdGFzdA== 35205
cmFuY2U= 35206
LlRleHRGaWVsZA== 35207
IGNvbnN1bWluZw== 35208
ICdcJyc= 35209
b3VidGVkbHk= 35210
IENlcnRhaW4= 35211
RXY= 35212
ZXJ0aQ== 35213
YmVpbmc= 35214
RXhwZXJpZW5jZQ== 35215
IC8vWw== 35216
IEFyYWJpYw== 35217
IENyaXN0 35218
IEF6dXJl 35219
IGhvcmE= 35220
bGFkZXNo 35221
XEJsdWVwcmludA== 35222
ZGFy 35223
LnJlbA== 35224
IHN1cHJlbQ== 35225
IFJlYWdhbg== 35226
IEF0dHJpYnV0ZXM= 35227
LXNpZGViYXI= 35228
IHVzZVN0eWxlcw== 35229
IEFpcmxpbmVz 35230
IGhpbGxz 35231
L3hodG1s 35232
dmluYw== 35233
X21vY2s= 35234
CiAgICAgICAgICAgICAgICAK 35235
IFBpbGw= 35236
LkxheW91dFN0eWxl 35237
IENvbW1hbmRlcg== 35238
XTw= 35239
c2lnbmF0dXJl 35240
IHt9DQo= 35241
IGhhdHJlZA== 35242
IOuL 35243
b2xlc3Rlcm9s 35244
ICoqKioqKioq 35245
YW5jZWxsb3I= 35246
Y3JvcA== 35247
VElN 35248
CQkKCg== 35249
eXNxbGk= 35250
dWl0aXZl 35251
CXVuc2V0 35252
X3NlbA== 35253
IG1lbnVz 35254
dGljaw== 35255
IGNvbnN0aXR1dGU= 35256
IEVsZW1lbnRz 35257
IFJlZGlz 35258
YWdnaW8= 35259
X2Zw 35260
X2RlcGVuZA== 35261
ZW1hcw== 35262
Q0FTVA== 35263
b3Jhbmdl 35264
am9u 35265
IEVtaWx5 35266
IHBvdGF0b2Vz 35267
IHJlY2VwdG9y 35268
IEVsZWN0cm9uaWM= 35269
IExpZ2h0cw== 35270
IGNvbWJpbmluZw== 35271
IFNvbWVvbmU= 35272
ICMjIyMjIyMjLg== 35273
IFRPRA== 35274
L3Nob3c= 35275
WGQ= 35276
LiIn 35277
YWZ4 35278
IHRyYWdpYw== 35279
U3R5bGVk 35280
IE1hcmNv 35281
R2FsbGVyeQ== 35282
ZGFsZQ== 35283
LuKAnQoKCgo= 35284
w6lyaWU= 35285
L3NlcnZpY2U= 35286
5LqG 35287
IGFtYmllbnQ= 35288
X1NFVFRJTkdT 35289
LkFkYXB0ZXI= 35290
bGVuZQ== 35291
IHRyYXZlbHM= 35292
Tm90aWNl 35293
IGNsZWFucw== 35294
IEZlbQ== 35295
Y2hhaXI= 35296
0YPQvQ== 35297
L215 35298
X2JhZA== 35299
IEVjb25vbWljcw== 35300
SVNB 35301
X0NOVA== 35302
KE1lbnU= 35303
5LqO 35304
IFJpZGdl 35305
IGxlbmd0aHk= 35306
RG90 35307
IGp1bXBz 35308
IGhleQ== 35309
JHBkZg== 35310
IHdvcm0= 35311
IHN1dA== 35312
IHNoZXI= 35313
aWFtbw== 35314
IENhbGM= 35315
dHJpZXZl 35316
IGNvcHM= 35317
IENocm9t 35318
IHJlZ3VsYXRlZA== 35319
cmVhdG1lbnQ= 35320
IEhpZ2hlcg== 35321
b2tz 35322
IGRlemU= 35323
TE9DQVRJT04= 35324
b25nc1Rv 35325
IGZpbml0ZQ== 35326
IHZhcmllcw== 35327
IHBvc2l0aW9uZWQ= 35328
J2ls 35329
6YeR 35330
IGhpa2U= 35331
KGRvbmU= 35332
cGxheWxpc3Q= 35333
IGFkYQ== 35334
IGNvYXN0YWw= 35335
IE5hbmN5 35336
LkRhdGVUaW1lRmllbGQ= 35337
Q3BwQ29kZUdlbg== 35338
IFNpbWlsYXJseQ== 35339
cmV1cg== 35340
IENvbnRy 35341
IEhpZGRlbg== 35342
IEJldGE= 35343
YXRjaGVk 35344
X2luc3RhbGw= 35345
Lk91dHB1dA== 35346
TG9va3Vw 35347
IFJpY2htb25k 35348
cXVhcmVk 35349
IG1hbmdh 35350
LWNvbnRyb2xz 35351
IEJlcm5hcmQ= 35352
TGFyZ2U= 35353
IHNsaWNlcw== 35354
IG9mZmVuY2U= 35355
IE1lZ2E= 35356
IGVzdGFy 35357
IGpvaW50cw== 35358
IHN1bW0= 35359
X3BsYXRmb3Jt 35360
QnVmZg== 35361
LmFkZFN1YnZpZXc= 35362
IHJldGFpbmVk 35363
TGV0dGVy 35364
LmRpbQ== 35365
IGVzc2VyZQ== 35366
IFNjYWZmb2xk 35367
RVhQRUNU 35368
CVJF 35369
LmxvbmdpdHVkZQ== 35370
w7xuZA== 35371
IHN0YXR1ZQ== 35372
LmFkZFdpZGdldA== 35373
IENhcmliYmVhbg== 35374
YWRkUHJlZmVycmVkR2Fw 35375
aWxkZQ== 35376
VUlMYWJlbA== 35377
IE9wcG9ydA== 35378
IGltcGVyaWFs 35379
dXJzaW9u 35380
IG1hbmRhdGU= 35381
IHByb21vdGlvbmFs 35382
IHZr 35383
aWHFgg== 35384
IHB5bA== 35385
IENyZWF0aW9u 35386
0L7Qt9C0 35387
IHNpbXBsZXI= 35388
LndoYXQ= 35389
IFJlY2VudA== 35390
U3Rvcm0= 35391
LnF1YW50aXR5 35392
IExvdg== 35393
Ii0= 35394
dWJibGVz 35395
X25vdGlmaWNhdGlvbg== 35396
KHdvcmxk 35397
dXJnZXI= 35398
Kigt 35399
OiIK 35400
aG0= 35401
YW5zaGlw 35402
IEFsbW9zdA== 35403
IG1vdG9yY3ljbGU= 35404
X2ZlZQ== 35405
IGFic29yYg== 35406
IFZpbmNlbnQ= 35407
IHNvdW5kZWQ= 35408
w61zdA== 35409
IHBoYXJtYWNldXRpY2Fs 35410
aHRhZw== 35411
IEtpbmRsZQ== 35412
aXRhbGl6ZQ== 35413
IEVtcGVyb3I= 35414
b3VzdGlj 35415
IHNwZWNpYWxpc3Rz 35416
5YWs 35417
Qm9yZGVyU3R5bGU= 35418
L1w= 35419
UkVMQVRFRA== 35420
KCcsJyw= 35421
KGV4cHI= 35422
IGh0 35423
5Y2I 35424
X0NyZWF0ZQ== 35425
IHNwZWNpYWxseQ== 35426
IFtdOw0K 35427
IGhlZWw= 35428
IHNlcHQ= 35429
X2FyY2g= 35430
KGluaXRpYWw= 35431
JS4KCg== 35432
XCIsXCI= 35433
IGRpc2N1c3Nlcw== 35434
IHVwdA== 35435
IFsm 35436
IG1hbnVz 35437
LmhhbmQ= 35438
IE1BSU4= 35439
IERlbm1hcms= 35440
IF0sDQo= 35441
IGNyeXN0 35442
IG5hY2s= 35443
Q29vcmRz 35444
X2lubmVy 35445
IG1pZHN0 35446
IGF3YWtl 35447
INCe 35448
LWJyZWFr 35449
w612ZWw= 35450
X1BBU1M= 35451
IFBhcmFtcw== 35452
IGRldHI= 35453
IHNwaWRlcg== 35454
IENvbmNlcHQ= 35455
IHByZW5k 35456
Q0hFRA== 35457
LkV4aXQ= 35458
IHBvcHVsYXRlZA== 35459
IHZpcnR1ZQ== 35460
X1NFU1NJT04= 35461
IG5vdXZlbA== 35462
b2F1dGg= 35463
INC00LDQvdC90Ys= 35464
cmluaw== 35465
LkhlYWRlclRleHQ= 35466
YXR1cmF0ZWQ= 35467
IGVyc3Q= 35468
IOWF 35469
4KWH 35470
X3Zpc2libGU= 35471
ZXllcg== 35472
IGxpYWJsZQ== 35473
IGRlYmU= 35474
IGJ3 35475
ey0j 35476
X1dJTg== 35477
ZGZz 35478
SG92ZXI= 35479
IFBVVA== 35480
LWFuZ2xl 35481
IG5vYmxl 35482
IHRyYWNlcw== 35483
ZW5jdg== 35484
IHVzZXJEYXRh 35485
X2lucw== 35486
IFN1eg== 35487
IG5ld3NsZXR0ZXJz 35488
IE1vZGk= 35489
IGVudHJlcHJlbmV1cnM= 35490
IHRyaWJ1dGU= 35491
IHJ1bW9ycw== 35492
IHJy 35493
IFF1YXJ0ZXI= 35494
6rOg 35495
IGZlZWRz 35496
w7Nn 35497
IGVudmVsb3Bl 35498
IGxlYXI= 35499
IGvDuA== 35500
ZGV2ZWxvcGVy 35501
U2ltaWxhcg== 35502
OiIpCg== 35503
c3Vic2NyaXB0aW9u 35504
TW9kaWZpZXI= 35505
aXRhbGlj 35506
IG5hc3R5 35507
IHRlcm1pbmF0aW9u 35508
IGNoYXJtaW5n 35509
IOKf 35510
dG9ucw== 35511
LnRyYWNl 35512
aG90cw== 35513
IFVS 35514
TW9udA== 35515
IGp1c3RpZmllZA== 35516
IEdhbmc= 35517
aW5lYQ== 35518
IGJvZw== 35519
KGFw 35520
XyQ= 35521
IGNvbnRhbWlu 35522
LkRvdA== 35523
CURlYnVn 35524
KGV4cG9ydHM= 35525
IHBhaXJlZA== 35526
IEFzc2lnbm1lbnQ= 35527
IGF1dG9tb2JpbGU= 35528
k40= 35529
IHBoYXNlcw== 35530
dnc= 35531
QFN1cHByZXNzV2FybmluZ3M= 35532
PVw= 35533
cmFudA== 35534
LWVk 35535
CWF3YWl0 35536
IGNlcnRpZmljYXRlcw== 35537
Jz4i 35538
IGludGFjdA== 35539
Q1RSTA== 35540
TWlrZQ== 35541
Z3JlZ2F0aW9u 35542
QVRURVJO 35543
IHJlcHVibGlj 35544
X3VwcGVy 35545
aWxpYXJ5 35546
IGNvbXB1dGF0aW9u 35547
aGlyZQ== 35548
IFNoaW4= 35549
X0FOWQ== 35550
IE1hbnVmYWN0dXJlcg== 35551
IENhcm0= 35552
IGJlYXJpbmdz 35553
X2NvbWI= 35554
Y2Fk 35555
dXJpc3RpYw== 35556
IHdob2xlc2FsZQ== 35557
IGRvbm9y 35558
LmludGVyZmFjZXM= 35559
cHJlc3Nv 35560
IEJydW4= 35561
LWNsb3Nl 35562
cHJvdmU= 35563
X1NL 35564
CWZyYW1l 35565
ZXRyb3M= 35566
IFBhaW4= 35567
X0VYUA== 35568
IExU 35569
X2Zz 35570
LmRhdGFz 35571
CXNz 35572
dm9pcg== 35573
IEF4aXM= 35574
TWFqb3I= 35575
PSI8 35576
W2g= 35577
IHByb2Zlc3M= 35578
aWdyYXRl 35579
KHNjb3Jl 35580
S2V5d29yZA== 35581
Im9z 35582
ICAgIAkK 35583
YW5hbHlzaXM= 35584
IHJlcGxheQ== 35585
LnBhc3M= 35586
XGQ= 35587
dGxz 35588
IHNhbmN0 35589
LmxpZ2h0 35590
X21vYmlsZQ== 35591
0YHRgtGM 35592
CXRvdGFs 35593
dWl0eQ== 35594
IHBhdXNlZA== 35595
TkFT 35596
IGVuY29yZQ== 35597
bG9l 35598
IC0qLQoK 35599
LmhpZ2g= 35600
YW1wbGVy 35601
IFNlY3VyZQ== 35602
IGZyYWdtZW50cw== 35603
X3ZlbA== 35604
aWxsYXJ5 35605
IFN0ZWlu 35606
IERhd24= 35607
IG1heGltaXpl 35608
4Lii 35609
IC9e 35610
IGNvbnRpbnVhbGx5 35611
IHNoYWRvd3M= 35612
CSAgICAgICAgICAgICAgICAgICA= 35613
IElBY3Rpb25SZXN1bHQ= 35614
IGluZm9ybWFjacOzbg== 35615
Q0hFQ0s= 35616
LlNlbGVjdGVkSXRlbQ== 35617
YnVuZGxl 35618
b2xsZXk= 35619
PEludA== 35620
QUlORVI= 35621
IFdpbmc= 35622
dGl0bGVz 35623
b3VudGFpbg== 35624
Q1k= 35625
IExvY2FsZQ== 35626
Zm9ybWVy 35627
PGNvbnRleHQ= 35628
UmFkaW9CdXR0b24= 35629
X3NjaGVkdWxl 35630
IGZhYnVsb3Vz 35631
Um9iZXJ0 35632
X1BST0ZJTEU= 35633
IGdhdGVz 35634
SU1Q 35635
IFBlbnRhZ29u 35636
Z29sZA== 35637
YmFjaA== 35638
ZW1wbG95ZWVz 35639
Um90YXRl 35640
IGNoYW1w 35641
IHNlbGJzdA== 35642
QWx0ZXJu 35643
IGNvbnZlcnRWaWV3 35644
Lyw= 35645
IH4o 35646
U3RyZWV0 35647
X3BsYWNl 35648
IHBlcnNvbmFsaXplZA== 35649
UHVibGlzaGVy 35650
IFNPQ0s= 35651
X05BTUVTUEFDRQ== 35652
IFN0YW5kYXJkcw== 35653
c29ldmVy 35654
X0NFTlRFUg== 35655
SW50ZXJlc3Q= 35656
w7R0 35657
dGVtcGVyYXR1cmU= 35658
Vmlld3BvcnQ= 35659
Z2V0UmVzb3VyY2U= 35660
IGVhdGVu 35661
IHNlbXByZQ== 35662
IGFibm9ybWFs 35663
IGN5bGluZGVy 35664
IHRyb3VibGVz 35665
bm9k 35666
0YvQsg== 35667
Z2FtZXM= 35668
X2ds 35669
UGxhbmU= 35670
Z3JleQ== 35671
X3RibA== 35672
LkNvbXBvbmVudFBsYWNlbWVudA== 35673
IENoYXNl 35674
TG9nZ2luZw== 35675
bWFueQ== 35676
7IY= 35677
IGZsYW1l 35678
PSI8Pz0k 35679
IEdyb3Vwcw== 35680
LVU= 35681
0YDQsNC9 35682
CgoKCgoKCg== 35683
IHZhdWx0 35684
b21vbg== 35685
cHJvYmxlbQ== 35686
IHRyYWRlcnM= 35687
IHBlcmlwaGVyYWw= 35688
IGhvbWVwYWdl 35689
KGRlcw== 35690
IFN1Y2Nlc3NmdWxseQ== 35691
IHJlYm9vdA== 35692
IGNlbGx1bGFy 35693
aWlp 35694
IFBsYW5z 35695
bGlzdGluZw== 35696
CWRpcw== 35697
IFJlZmxlY3Q= 35698
CWV4Y2VwdA== 35699
Iiko 35700
IHRhbWLDqW0= 35701
VmVoaWNsZQ== 35702
YWNjaQ== 35703
bHVzaA== 35704
T3JkZXJCeQ== 35705
IGltYWdpbmVk 35706
Y29kZWM= 35707
IGRhdGVUaW1l 35708
TWljcm8= 35709
IHJlbWluZHM= 35710
IGZydXN0cmF0aW5n 35711
IFZpc3Rh 35712
VHJhaW4= 35713
INCy0YE= 35714
IG1vbGVjdWxlcw== 35715
YXZpbg== 35716
IGRvdWJsZWQ= 35717
IGJyYWtl 35718
IGNhbGNpdW0= 35719
RnJpZGF5 35720
IElkZW50aWZpZXI= 35721
5Z8= 35722
0YvQuQ== 35723
IEphaA== 35724
UmVu 35725
IHNjYW0= 35726
IERlbm5pcw== 35727
LnNldEludA== 35728
4p8= 35729
IGFwcGVhbHM= 35730
IEF1cg== 35731
IHNwbGFzaA== 35732
ZXF1YWxzSWdub3JlQ2FzZQ== 35733
d2h5 35734
IHNhcA== 35735
U3VwcG9ydGVk 35736
IHNlcmE= 35737
IDoi 35738
IFZlcm1vbnQ= 35739
IHJldW4= 35740
IE5vdmE= 35741
ICAgICAgICAgICAgCiAgICAgICAgICAgIAo= 35742
UmF0ZWQ= 35743
IGxheWluZw== 35744
IEthcmVu 35745
LkRlc2VyaWFsaXpl 35746
IGNvZGVj 35747
IHRheHBheWVycw== 35748
OyIpOwo= 35749
IGNydWRl 35750
IG1vbGU= 35751
IHVzZUNvbnRleHQ= 35752
CXJlc3A= 35753
IHBrdA== 35754
IENhbm5vdA== 35755
UGlwZWxpbmU= 35756
5YaG 35757
dGljYWw= 35758
QWN0aW9uQmFy 35759
YWVkYQ== 35760
IENyaXRpY2Fs 35761
IE5hZA== 35762
IGJsZWVkaW5n 35763
IGxsdm0= 35764
L2N1c3RvbQ== 35765
IFNpbXBzb24= 35766
U3k= 35767
aXRhYmx5 35768
IFN1bW1pdA== 35769
KCkpKS4= 35770
RUxMT1c= 35771
JCcs 35772
TWV0 35773
SW52b2ljZQ== 35774
b2xpc3Q= 35775
IHNwaW5l 35776
YXV0aWZ1bA== 35777
cGFpZA== 35778
IGxvY2tlcg== 35779
X2FybQ== 35780
XCI+PA== 35781
IHRyYWplY3Rvcnk= 35782
X3Jpbmc= 35783
IGh5ZHJvZ2Vu 35784
dHJvbg== 35785
IHN0YXR1dGU= 35786
IGNvbmRpdGlvbmFs 35787
IHRyYXk= 35788
LXNjaG9vbA== 35789
KHdpZGdldA== 35790
JGNvbmZpZw== 35791
IHJlcXVlc3Rpbmc= 35792
LnVpbnQ= 35793
ZXRvbg== 35794
YnJpdGllcw== 35795
T2ZUeXBl 35796
QURNSU4= 35797
cHJlZGljdA== 35798
IGdlZ2Vu 35799
IEhhcHA= 35800
T0NVTUVOVA== 35801
IEFwYXJ0 35802
IC0tLS0t 35803
cm9l 35804
dWlkZQ== 35805
anVzdGlmeQ== 35806
IFNxdWFk 35807
IHByb2Zlcw== 35808
LmJvdA== 35809
X2N1cnJlbmN5 35810
aW5uZW4= 35811
IE11bWJhaQ== 35812
IE51bWJlcnM= 35813
YXZhbmF1Z2g= 35814
YWduaXR1ZGU= 35815
4oCcVGhlcmU= 35816
PWh0dHA= 35817
54mH 35818
IHZi 35819
Kyc8Lw== 35820
IG9yZ2FuaXppbmc= 35821
YW5pdW0= 35822
SW5TZWN0aW9u 35823
LmFuZA== 35824
IGV0ZXJuYWw= 35825
IHNvdWxz 35826
X09ORQ== 35827
X25z 35828
X2Jhc2lj 35829
IHJldFZhbA== 35830
LXNoYXBlZA== 35831
aWZkZWY= 35832
IE1vemlsbGE= 35833
IGVpZw== 35834
Y29tcGxldGVk 35835
Tm90aWZpY2F0aW9ucw== 35836
VEVDVA== 35837
cmllbg== 35838
Y29vcmRpbmF0ZXM= 35839
IHByZXRlbmQ= 35840
cG9uc29yZWQ= 35841
LnN0ZGVycg== 35842
IGdhbWVycw== 35843
IGRlZmVuZGVk 35844
VG9vbFRpcA== 35845
dWl0YXI= 35846
IGZyYW5jYQ== 35847
IFdvb2Rz 35848
IGlocmU= 35849
IHBzZXVkbw== 35850
IGNyb3dkcw== 35851
IFNZU1RFTQ== 35852
bGVj 35853
LmtlcmFz 35854
IGNpcmN1bGF0aW9u 35855
ZWVy 35856
LmNi 35857
dXp6eQ== 35858
7Zg= 35859
LnJlYWRlcg== 35860
IHNlcXVlbA== 35861
U2V2ZXJhbA== 35862
LnBvcnRhbA== 35863
LS0tLS0K 35864
aXN0cmFy 35865
77u/Ly8= 35866
UGk= 35867
IFwiIg== 35868
IGN1c3RvbXM= 35869
IGRpc3BsYXlOYW1l 35870
IG5vdGljZXM= 35871
IGNhcmI= 35872
Ll8KCg== 35873
IHByb2R1Y3Rv 35874
INGB0Ls= 35875
IG51bWVyaWNhbA== 35876
IHVuaW50 35877
IGNvZGlnbw== 35878
T3JkaW5hbA== 35879
U3RyaW5nVXRpbHM= 35880
IGTDqWM= 35881
IExhbg== 35882
IHNob3djYXNl 35883
IGFyaXRobWV0aWM= 35884
LXNjcm9sbA== 35885
X1RFTVBMQVRF 35886
IFJvdXRlck1vZHVsZQ== 35887
IFNoYWRlcg== 35888
INCd 35889
cG9saWN5 35890
UGVyZm9ybWFuY2U= 35891
CWJvcmRlcg== 35892
KGZpbGVwYXRo 35893
56m6 35894
X2VuZXJneQ== 35895
X0NT 35896
VGhlaXI= 35897
LnNwYWNpbmc= 35898
KGRw 35899
IExBTkdVQUdF 35900
IGhpc3RvcmljYWxseQ== 35901
Ij57eyQ= 35902
IGlub2Rl 35903
c2ls 35904
IGhhY2U= 35905
IHNldmVyZWx5 35906
IE92ZXJ2aWV3 35907
IHNwcmF3 35908
IGJlYWNoZXM= 35909
OmxlZnQ= 35910
t7s= 35911
KCR7 35912
IEZJUlNU 35913
IFNwYQ== 35914
LWFzcw== 35915
IGJhaXNl 35916
IE5PREU= 35917
IFBpenph 35918
UGV0 35919
KHNlcQ== 35920
XCI+Cg== 35921
Q3BwTWV0aG9kUG9pbnRlcg== 35922
IHZw 35923
IGlh 35924
X3NlY29uZHM= 35925
ZW1ldA== 35926
L2Jsb2I= 35927
X1RIUkVTSA== 35928
Li4uDQo= 35929
RGVzdA== 35930
IE5I 35931
LmRhdGFTb3VyY2U= 35932
aXTDqXM= 35933
IEphaw== 35934
c2VsbA== 35935
IHdvcmtzaG9wcw== 35936
PHU= 35937
IHJpdmFscw== 35938
IEVYSVNUUw== 35939
aG9t 35940
LXRva2Vu 35941
Y29tcGF0aWJsZQ== 35942
LkpQYW5lbA== 35943
IHBoeXNpY2lhbnM= 35944
YXJ0aW4= 35945
IGRlc2lyYWJsZQ== 35946
IGRpc3RpbmN0aXZl 35947
LkRlcA== 35948
Z2lk 35949
aWxpYXRl 35950
LG1heA== 35951
IHByZW1pZXJl 35952
IHFEZWJ1Zw== 35953
IGFkdm9jYWN5 35954
IHdoaXNwZXI= 35955
UHQ= 35956
IHVuY2hhbmdlZA== 35957
X3F0eQ== 35958
6K+35rGC 35959
U2Vhc29u 35960
YXZlbGVuZ3Ro 35961
IFB1bA== 35962
IGTDrWE= 35963
J11dXSwK 35964
YWxpcw== 35965
KCIm 35966
Ym9ybw== 35967
IGJt 35968
IFJhZGk= 35969
d3Jvbmc= 35970
IEdvaW5n 35971
aW1lVHlwZQ== 35972
aWpp 35973
LWZlZWRiYWNr 35974
IE5hbWVz 35975
IEJhcHQ= 35976
IHByb2JhYmxl 35977
IEV0aGVy 35978
IFBvbGl0aWNz 35979
X3Byb3RvY29s 35980
bGluaW5n 35981
U2F0 35982
IGNvcnJlbA== 35983
LlByaW1hcnk= 35984
KG51bGxhYmxl 35985
UklPUklUWQ== 35986
IGNvbG9yaW5n 35987
IHV0aWxpemluZw== 35988
ZGFz 35989
IGV4cG9ydGVk 35990
IGNhcnJpZXJz 35991
Q29udg== 35992
LmVkaXRvcg== 35993
acOz 35994
KGhhbmRsZXM= 35995
IGFwcHJlY2lhdGlvbg== 35996
LmltcG9ydA== 35997
IEF1c3RyaWE= 35998
IFN0cmlw 35999
aWxpZ2h0 36000
IGFwcHJvcHJpYXRlbHk= 36001
IFByZXN0 36002
IFdpcg== 36003
IFVJQXBwbGljYXRpb24= 36004
YWxjaGVteQ== 36005
IE1vYg== 36006
IERldGVybWlu 36007
ZXJndXNvbg== 36008
cmVnaXN0ZXJlZA== 36009
X2NvbnZlcnQ= 36010
IFZsYWRpbWly 36011
LlNob3dEaWFsb2c= 36012
cmVmbGVjdA== 36013
IHNob29r 36014
IGFzc3VyZQ== 36015
IE9mdGVu 36016
IGNpdmlsaXphdGlvbg== 36017
IHZvY2FidWxhcnk= 36018
Zm9yZWdyb3VuZA== 36019
IFNjb3Bl 36020
IHVud2FudGVk 36021
YWN0aW5n 36022
IChbXQ== 36023
IG1hcmtpbmc= 36024
Lm9yaWdpbmFs 36025
IE1PVkU= 36026
IHNwb3J0aW5n 36027
Y2VwdGlvbnM= 36028
TlNOdW1iZXI= 36029
U2l6ZXM= 36030
IHByb3ZpbmNpYWw= 36031
X1RyYW5z 36032
IHByb2JsZW1hdGlj 36033
ZGlnaXQ= 36034
IEVtbWE= 36035
bG9ja3M= 36036
IENyZXc= 36037
aWJh 36038
Jyk6 36039
aXNoYQ== 36040
IG1hbW0= 36041
IG9jY3VyZWQ= 36042
d2Nz 36043
KHJ1bGU= 36044
IG1lcmNoYW5kaXNl 36045
ZXNwZWNpYWxseQ== 36046
IFR3aW4= 36047
IG5hbWluZw== 36048
IHNsb2c= 36049
IGltcHJvdmVz 36050
IGFkaGVy 36051
OnRleHQ= 36052
LmhhZG9vcA== 36053
X0hUVFA= 36054
LnRvTGlzdA== 36055
LmRpc2FibGVk 36056
IGxlbnNlcw== 36057
LmluaQ== 36058
IFJhcmU= 36059
IFVidW50dQ== 36060
IHNjcmFt 36061
b2xhdGlvbg== 36062
dGl0dWxv 36063
RXZlcnl0aGluZw== 36064
IG5vZGRlZA== 36065
aWNodGln 36066
X2NvbnN0YW50 36067
emM= 36068
bGlmdA== 36069
IE5vdGlmeQ== 36070
b25kbw== 36071
IElORg== 36072
KCIr 36073
IEtheg== 36074
IGRyZWFk 36075
Lm1hcHBlcg== 36076
bGV1cg== 36077
IENvbWV5 36078
IE5C 36079
aWNlcnM= 36080
LlB1c2g= 36081
IEhhY2s= 36082
IEJyYXppbGlhbg== 36083
X3Byb2Q= 36084
IC8vCgo= 36085
IGJpY3ljbGU= 36086
IHVuYXZhaWxhYmxl 36087
IGFkb2xlc2NlbnQ= 36088
Ymxr 36089
IG1pdGln 36090
X2JsdWU= 36091
7Jg= 36092
ZmFkZUlu 36093
IFV0aWxpdGllcw== 36094
IE1O 36095
O2s= 36096
PHN0eWxl 36097
LXN0YXR1cw== 36098
aW5kbw== 36099
IGlubmluZ3M= 36100
IGdq 36101
IHx8PQ== 36102
LmV1 36103
Ok51bWJlcg== 36104
IGN1aXNpbmU= 36105
IFVSTHM= 36106
aWVr 36107
IHdpcmVz 36108
CXBz 36109
aWVn 36110
Lm1r 36111
c29hcA== 36112
IHNvbWV0aW1l 36113
IHN0YXA= 36114
X3Nlcmllcw== 36115
LlRhcmdldA== 36116
5ro= 36117
LmRlc3RpbmF0aW9u 36118
T1VOVEVS 36119
UmFpc2Vz 36120
JkE= 36121
IHNtYXJ0cGhvbmVz 36122
TklFbnY= 36123
LnNkaw== 36124
IGhlbGljb3B0ZXI= 36125
IGltcGU= 36126
IEJpcnRo 36127
QVU= 36128
YnJlYWRjcnVtYnM= 36129
Y29vcmRz 36130
IGV4cGxvcmVk 36131
IGxvZA== 36132
IElw 36133
Z2FibGU= 36134
aWFuZQ== 36135
IGFydGlmYWN0cw== 36136
Qm94TGF5b3V0 36137
2KfYsQ== 36138
bGlzdGVuZXI= 36139
LmNhcnQ= 36140
IEh1ZmY= 36141
IEhpbmR1 36142
IERhdGFUeXBlcw== 36143
IERydXBhbA== 36144
SUdOT1JF 36145
IG9mZnNldHM= 36146
IFJUQw== 36147
LWxvZ2lu 36148
5q4= 36149
IFFPYmplY3Q= 36150
IHByb3NlY3V0b3I= 36151
Um9jaw== 36152
X2NoYXQ= 36153
V2F5 36154
7LI= 36155
IG5lZ2xpZw== 36156
IGR1ZGU= 36157
Ozw= 36158
IGRlbGVnYXRlcw== 36159
X2ZhaWxlZA== 36160
L2Rldg== 36161
L3dvcms= 36162
KE5ldw== 36163
ZXRhYmxl 36164
KCki 36165
KEljb25z 36166
IHBvcms= 36167
IE1vZGVsQW5kVmlldw== 36168
IFZJUA== 36169
IEtvcg== 36170
bWl4 36171
IG94aWQ= 36172
IFNDUkVFTg== 36173
IEZvdXJ0aA== 36174
LyIsCg== 36175
IHRlZQ== 36176
IFN0ZXZlbnM= 36177
dGlja3M= 36178
IHBsZWRnZQ== 36179
aWJib24= 36180
IExvYW4= 36181
IG5lbw== 36182
bnVtcHk= 36183
IFNoYXJlZFByZWZlcmVuY2Vz 36184
LW9yaWVudGVk 36185
IExvZ2dlckZhY3Rvcnk= 36186
IEdyYXBoUUw= 36187
emVuaWE= 36188
Il8= 36189
V29tZW4= 36190
LmNhc3Q= 36191
IGRlbGliZXJhdGVseQ== 36192
K2I= 36193
IEFybg== 36194
Zm9udFNpemU= 36195
IG1hemU= 36196
IGJsYW1lZA== 36197
Lm1hcw== 36198
fSkNCg== 36199
ZWxlcmlr 36200
IHNjYW5uaW5n 36201
IFdvcmtzaG9w 36202
IGZpbmRlbg== 36203
IGNhdXQ= 36204
VUlGb250 36205
KHJldHVybg== 36206
YWxpbg== 36207
Y2FzdGxl 36208
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v 36209
IGluY2VudGl2ZQ== 36210
b3BhdGg= 36211
YmxvYg== 36212
IGNpZ2FyZXR0ZQ== 36213
IGZlcnRpbA== 36214
Ki8KCgo= 36215
IFNoYXI= 36216
CiAgICAgIAo= 36217
IHVuY2VydGFpbg== 36218
IFN0b24= 36219
T3BlcmF0aW9ucw== 36220
IFNwZW5jZXI= 36221
IGRlZmlu 36222
IFNvbG8= 36223
b25lc3Q= 36224
t7vliqA= 36225
IHVvbW8= 36226
R2l2ZQ== 36227
IGRlbnRybw== 36228
O3BhZGRpbmc= 36229
ZW50YWk= 36230
IENhcnM= 36231
IGVudGh1c2lhc20= 36232
IE9wZXJhdGluZw== 36233
U2tpcA== 36234
cGFyYXRpb24= 36235
IHByb3RlY3Rz 36236
IHJldmVy 36237
ZGc= 36238
IENpbmNpbm5hdGk= 36239
IGNvbnNlY3RldHVy 36240
IG11c3M= 36241
ZW1wbG95ZWQ= 36242
YXVzZXM= 36243
aW5rbGU= 36244
LlZhbHVlcw== 36245
o7w= 36246
bG92 36247
X1dBUk4= 36248
IGJvb2ttYXJr 36249
IEFwb2xsbw== 36250
LmF4aXM= 36251
IG3DqXQ= 36252
IG9wZW5lcg== 36253
IHR1bW9y 36254
ZGFu 36255
IGVsZW1lbnRhcnk= 36256
IHNraXBwZWQ= 36257
IEtlcg== 36258
YXNpYQ== 36259
X3Jlc3A= 36260
IGRlbW9s 36261
IENhbmFkaWFucw== 36262
IHRhc3Rlcw== 36263
VUludGVnZXI= 36264
ICckew== 36265
LmF3cw== 36266
Uk9JRA== 36267
cmlhbnM= 36268
TVE= 36269
b3JkYWJsZQ== 36270
IGNvdXNpbg== 36271
UHJvcGFnYXRpb24= 36272
KFNlc3Npb24= 36273
cGhhbHQ= 36274
VUxE 36275
IFNjYWxhcg== 36276
IGJsb29keQ== 36277
IOCm 36278
Lm1hc2s= 36279
LHE= 36280
IFVuaXRz 36281
IGNlbnRyZXM= 36282
IFByaW0= 36283
Ll0KCg== 36284
IFNoYXc= 36285
UHJvbQ== 36286
IFRob3VnaHQ= 36287
Q2hlY2tlcg== 36288
X291dHB1dHM= 36289
KGNoYW4= 36290
RUlOVkFM 36291
IGJvYg== 36292
X2NtcA== 36293
UGVk 36294
IG1hdHJpY2Vz 36295
IHZyb3V3ZW4= 36296
IGdlbnVpbmVseQ== 36297
aGlnaGxpZ2h0 36298
KGRpc3BsYXk= 36299
KSE9 36300
IGRlbGljYXRl 36301
IEx1dGhlcg== 36302
IE1pbGVz 36303
IHVzZXJJRA== 36304
JT0= 36305
YXRldXJz 36306
X0JVRg== 36307
LS0tLS0tLQo= 36308
aW1pdGl2ZXM= 36309
IHNoZWx2ZXM= 36310
c2xvdw== 36311
X2luZm9ybWF0aW9u 36312
TEVH 36313
V3I= 36314
LmZvcm1z 36315
Y2VsYW5k 36316
L3Vu 36317
OiY= 36318
LuKAmQoK 36319
PSIl 36320
IHByb3N0 36321
IGZvbnRzaXpl 36322
dWNpw7Nu 36323
Z2V0aWM= 36324
YW10 36325
PSIu 36326
RGVjb3I= 36327
QnJpdA== 36328
ICIiKS4= 36329
IGZvdW5kaW5n 36330
LkZpbGVOYW1l 36331
IFRpZXI= 36332
IGRpc2Nsb3Nl 36333
w6Ft 36334
LnN5bg== 36335
LlZpZXdIb2xkZXI= 36336
bGljYW50 36337
X3N0YWdl 36338
TW9uZGF5 36339
IGRlc2VyaWFsaXpl 36340
dGFsaw== 36341
IHRyYWRpdGlvbmFsbHk= 36342
5oCB 36343
2K4= 36344
TEVY 36345
IGVo 36346
CVJPTQ== 36347
IHt9KQo= 36348
UXVlc3Rpb25z 36349
bmNweQ== 36350
IGZpeGluZw== 36351
0LrRgw== 36352
X0tleQ== 36353
Ong= 36354
IFNUUklORw== 36355
INGE0LDQuQ== 36356
CWxlZnQ= 36357
IEJlbmNo 36358
ZWxsaWo= 36359
VVJSRUQ= 36360
IERpYWdyYW0= 36361
fWNhdGNo 36362
L3RpbWU= 36363
IE1pc3Npbmc= 36364
ZGJuYW1l 36365
IHNvcmU= 36366
IFdhbHQ= 36367
dWdnaW5n 36368
cmVwcmVzZW50 36369
IEdT 36370
bmV5cw== 36371
CXBhZ2U= 36372
IHZvbGNhbg== 36373
KGJ0bg== 36374
IGV4Y2VlZHM= 36375
IGVyZw== 36376
IHBpbG90cw== 36377
IFNlZA== 36378
ZXJzaW9ucw== 36379
IHBhdHJvbg== 36380
UlY= 36381
L3RvcA== 36382
LmFzc2V0 36383
X2Nyb3Nz 36384
LkVkaXRvcg== 36385
LnRi 36386
IHdlbGNvbWluZw== 36387
U0NSRUVO 36388
KWZpbmRWaWV3QnlJZA== 36389
Q29kZXI= 36390
PElBY3Rpb25SZXN1bHQ= 36391
X1FVRVVF 36392
4YM= 36393
IGhlaWdodHM= 36394
UmVxdWVzdHM= 36395
IHN5bWJvbGlj 36396
DQ0KDQ0K 36397
IGNvdXBvbnM= 36398
LWZpdmU= 36399
IERlc2t0b3A= 36400
IG1pc21hdGNo 36401
ICdfJw== 36402
X0RJVg== 36403
QVNPTg== 36404
LnRyYW5zcG9zZQ== 36405
KG1hc2s= 36406
IENlbHQ= 36407
LkhhbmQ= 36408
YXR1 36409
asSZ 36410
IHt9KTsK 36411
TWlzcw== 36412
IHByaW1h 36413
bXVuZA== 36414
b2x2 36415
IFByZXR0eQ== 36416
IHJlYmVs 36417
IEZE 36418
YXN0aWNhbGx5 36419
T0xU 36420
LWF4aXM= 36421
dXhl 36422
IGVpbmZhY2g= 36423
IENoZW1pY2Fs 36424
X3NlZw== 36425
bGVldGNvZGU= 36426
bG9wZQ== 36427
X29yaWc= 36428
ICAJCQ== 36429
KERvdWJsZQ== 36430
IFBheVBhbA== 36431
LkJhY2tncm91bmRJbWFnZQ== 36432
IGhvbWVtYWRl 36433
Liku 36434
KHBhcnNlcg== 36435
YXRybw== 36436
YWNjb3JkaW9u 36437
RGVmaW5l 36438
IOyeiA== 36439
IEFVVE8= 36440
LnN1bW1hcnk= 36441
c2NhbGFy 36442
IEhvb2Q= 36443
cXVpbg== 36444
X2Rlcg== 36445
IEdlc2No 36446
LmNvbXB1dGU= 36447
RmVlZGJhY2s= 36448
IHBoYXJtYWM= 36449
IMWfaQ== 36450
IGdsb3Nz 36451
IEZJTFRFUg== 36452
SU5TVEFOQ0U= 36453
IGthbA== 36454
LlBM 36455
X0ZSRUU= 36456
R3JhZGU= 36457
IOKZ 36458
Lm1ldHJpY3M= 36459
IGNhZ2U= 36460
Llh0cmFHcmlk 36461
X2Rz 36462
emln 36463
aW50ZXJvcFJlcXVpcmVEZWZhdWx0 36464
LnJlbW92ZUNsYXNz 36465
PT09PT09PT09PT09PQ== 36466
IG1hc3RlcnM= 36467
U3RhdGVFeGNlcHRpb24= 36468
aWxsZXJ5 36469
IEJyYWR5 36470
IGxpbmluZw== 36471
X2Nz 36472
aW5zdWxh 36473
IH06 36474
W3Bvc2l0aW9u 36475
IFJ4 36476
IEJZVEU= 36477
IFN0cmlrZQ== 36478
INCa 36479
IENsdXN0ZXI= 36480
LmRvd25sb2Fk 36481
QWxsb3dlZA== 36482
IGFtZW5pdGllcw== 36483
IG9uVGFw 36484
ZnVsV2lkZ2V0 36485
IHN0cmVuZ3Rocw== 36486
dHdlZXQ= 36487
IGFzY2VuZGluZw== 36488
IGRpc2Nsb3NlZA== 36489
Z3Jhdg== 36490
ZGlzdHJpY3Q= 36491
KTw8 36492
KSwi 36493
KGRlZnVu 36494
X3w= 36495
IGdhemU= 36496
0LDRjw== 36497
IGZvcnR5 36498
PT09PT09PT09PT0= 36499
U2NpZW5jZQ== 36500
c2VtYmxlcg== 36501
CWJvZHk= 36502
X3RyYW5zZmVy 36503
IGxvbmd0aW1l 36504
IGNvbXBsaWNhdGlvbnM= 36505
IGJvb3Ro 36506
VkVSUg== 36507
IHlpZWxkcw== 36508
IG5hdmlnYXRvcg== 36509
OjpfKCc= 36510
RUNUT1I= 36511
X0NvbmZpZw== 36512
IGxhc3RlZA== 36513
dXNhbA== 36514
55m75b2V 36515
IGdsb3Zlcw== 36516
IGJlbGx5 36517
U2FsZXM= 36518
KE1ldGhvZA== 36519
KG1lbWJlcg== 36520
IFJlZWQ= 36521
cGFzc2Vk 36522
U2lnbklu 36523
LG51bQ== 36524
VUxPTkc= 36525
IExFRw== 36526
bmVscw== 36527
IG1lbnRvcg== 36528
KHJj 36529
IE9idmlvdXNseQ== 36530
Lmlm 36531
IEZyZWRlcg== 36532
SEVBRA== 36533
QGF1dGhvcg== 36534
Q29uZGl0aW9ucw== 36535
IGdhcmRlbnM= 36536
IFJpcA== 36537
KHVzZXJz 36538
IE9rYXk= 36539
IHdyZXN0bGluZw== 36540
aW1lc3RvbmU= 36541
IENlcnRpZmllZA== 36542
IHZlcmRpY3Q= 36543
YWlkYQ== 36544
LmlubmVyVGV4dA== 36545
aWNhc3Q= 36546
CWF0 36547
IHByZXN1bWFibHk= 36548
IEZVTg== 36549
YWplcw== 36550
0Jc= 36551
PiIsCg== 36552
X1Bpbg== 36553
dWVzZQ== 36554
IG92ZXJyaWRlcw== 36555
X3JlYWR5 36556
QWR2YW5jZWQ= 36557
IG9waQ== 36558
LWNhcnQ= 36559
KCIvIiw= 36560
IERlYg== 36561
Q1JZ 36562
IFZlcnRpY2Fs 36563
IE9WRVI= 36564
IENvcnBvcmF0ZQ== 36565
ICIiOw== 36566
IHN0ZXBwaW5n 36567
ZWo= 36568
IGFjY3VzYXRpb25z 36569
IG9yYXo= 36570
X3RhaWw= 36571
IGluZHVjZWQ= 36572
IGVsYXN0aWM= 36573
IGJsb3du 36574
LC8v 36575
IGJhY2tncm91bmRz 36576
4oCZdW5l 36577
LXNkaw== 36578
IHNldEludGVydmFs 36579
IGluY2VudGl2ZXM= 36580
IHZlZ2V0YWJsZQ== 36581
X09u 36582
ZXhwYW5kZWQ= 36583
cGl4 36584
X3NoYWRlcg== 36585
IFNQRFg= 36586
QGV4YW1wbGU= 36587
IFdyYXBwZXI= 36588
Llplcm8= 36589
UG9zaXRpdmU= 36590
IHNwaW5uZXI= 36591
IGludmVudGVk 36592
IEdhdGVz 36593
0L7RgtC+0YA= 36594
IGNvbXBhcmlzb25z 36595
6Lc= 36596
LnByaW1hcnk= 36597
ZGF0YVByb3ZpZGVy 36598
YWRkaXRpb25hbA== 36599
CW9wdGlvbnM= 36600
c25hcHNob3Q= 36601
LnNldEhvcml6b250YWw= 36602
ICJ7fQ== 36603
IEZpc2hlcg== 36604
aGFsdGVu 36605
PFR5cGU= 36606
IG1heExlbmd0aA== 36607
IE10 36608
IOqwgA== 36609
LmpldGJyYWlucw== 36610
IGlkZW50aWZpZXM= 36611
IGZsb3dpbmc= 36612
IERpc2N1c3Npb24= 36613
YXRzYnk= 36614
IHNjaHc= 36615
dWdodHk= 36616
IHJpdmVycw== 36617
LnVuaXF1ZQ== 36618
X1BIWQ== 36619
ZWRyYWw= 36620
KGxs 36621
IGNzcmY= 36622
cHBlcnM= 36623
w7xs 36624
IEVzcGVjaWFsbHk= 36625
cG9ydGVk 36626
IEhhcnJpc29u 36627
KioqKioqKi8K 36628
VGV4dENvbG9y 36629
7Iq1 36630
d2lyZQ== 36631
IHN0YXR1c0NvZGU= 36632
IEZpbmlzaA== 36633
Y2VuY2U= 36634
IE1jQ2Fpbg== 36635
IFdvcg== 36636
KGF3YWl0 36637
ICktPg== 36638
IFJlZ2lzdGVyZWQ= 36639
SU5FRA== 36640
a2Fs 36641
cGFyaXNvbg== 36642
IG9iamV0bw== 36643
Vmk= 36644
bWFuZGE= 36645
IHJlbmV3ZWQ= 36646
IFNvZg== 36647
ZXNzZWw= 36648
Lm5kYXJyYXk= 36649
IGNyYXA= 36650
566h 36651
LmFic3BhdGg= 36652
KHVw 36653
IGNsZWFyYW5jZQ== 36654
IFRX 36655
X0NPUFk= 36656
ICAgICAgICAgICAgCQ== 36657
IGZvcmVzdHM= 36658
IGFyZ3VhYmx5 36659
IEFTUw== 36660
aGV5 36661
YW1lbA== 36662
X2ZvcmU= 36663
IFNvdXRoZWFzdA== 36664
IGFidXNlZA== 36665
IHByYWN0aWNpbmc= 36666
YWtlZGlycw== 36667
5Li7 36668
X3Jlc291cmNlcw== 36669
IHBvbmQ= 36670
LkZpeGVk 36671
TGFzdEVycm9y 36672
IFBzeWNob2xvZ3k= 36673
ICIvLw== 36674
ITo= 36675
UmV1c2FibGU= 36676
IG1lbnNhamU= 36677
IHJvc3B5 36678
IGJvdXI= 36679
IHZhcmlldGllcw== 36680
IGVtcGF0aA== 36681
KCh7 36682
X29yZw== 36683
IE1lcw== 36684
IE1hZ2VudG8= 36685
SVNUT1JZ 36686
VW5sZXNz 36687
IGhq 36688
IER1dHk= 36689
SnVu 36690
LHNpemU= 36691
IHBhaW50aW5ncw== 36692
IGRpc3BlbnM= 36693
ZGFydA== 36694
IGJlaGF2aW9yYWw= 36695
IHJwYw== 36696
Y2FsY3VsYXRl 36697
ZnJ1aXQ= 36698
X21t 36699
CXB0aHJlYWQ= 36700
TWF4TGVuZ3Ro 36701
IGN1cnJlbmNpZXM= 36702
X2NhcGFjaXR5 36703
IE96 36704
IGZpcmVhcm0= 36705
IGNvZWZmaWNpZW50 36706
IGJhbmtydXB0Y3k= 36707
d2FydA== 36708
IGZhdGlndWU= 36709
QVZB 36710
IGVzcGE= 36711
X3Bj 36712
IFF1b3Rlcw== 36713
X0xJR0hU 36714
IFRpY2tldHM= 36715
IHJlbGF0ZXM= 36716
IHB1Ymxpc2hlcnM= 36717
IHVubG9ja2Vk 36718
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 36719
IEludGVycnVwdGVkRXhjZXB0aW9u 36720
IG91dGxvb2s= 36721
cm4= 36722
IHJlYmVscw== 36723
V3JpdHRlbg== 36724
IGFzaWFu 36725
b3R0bw== 36726
IAkJCQk= 36727
X2dwdQ== 36728
VHh0 36729
LkltYWdlVmlldw== 36730
IHN1aXM= 36731
X3RhYmxlcw== 36732
LlJlY3ljbGVyVmlldw== 36733
IHdoYXRzb2V2ZXI= 36734
6IE= 36735
XSsrOwo= 36736
YXNzZXJ0VHJ1ZQ== 36737
X3ZlcmlmeQ== 36738
IFJpdmVycw== 36739
IF1b 36740
SmV0 36741
aWRpYW4= 36742
U2libGluZw== 36743
IGdlbnJlcw== 36744
LkFjY2Vzcw== 36745
T1BT 36746
IHRyaXZpYWw= 36747
4Liq 36748
YWxlbg== 36749
0LLQtdC0 36750
IFN3b3Jk 36751
IHNjcnV0aW55 36752
KGNi 36753
IGNvbW1lcmNl 36754
IGd1YXJhbnRlZXM= 36755
X2Fkdg== 36756
IExFVA== 36757
cmVjaW8= 36758
IGhpbGFy 36759
IGJhY2t5YXJk 36760
44CP 36761
IGlsbHVzdHJhdGVk 36762
L3ZlbmRvcg== 36763
LlV0aWw= 36764
IHdvdw== 36765
TE9Z 36766
IE1hcnNoYWw= 36767
Ij4nLiQ= 36768
IEJhaw== 36769
IG1vZGlmaWVycw== 36770
ZGljdGlvbmFyeQ== 36771
IFN0cmU= 36772
bXVsdGlwbGU= 36773
IikpLA== 36774
IENvcnQ= 36775
J10iKS4= 36776
KGFkbWlu 36777
IENyZWF0b3I= 36778
SW50ZXJuZXQ= 36779
KG1z 36780
bG9neQ== 36781
REVDTEFSRQ== 36782
IE1hcmN1cw== 36783
PDw8PA== 36784
44Gg 36785
X215 36786
KGluc3Q= 36787
IHNjaWVuY2Vz 36788
TkRFUg== 36789
LmVudGVy 36790
IGl0dQ== 36791
IGJlaGF2ZQ== 36792
UGFu 36793
b21iaWVz 36794
PSc8 36795
JykpOw0K 36796
IE1FTlU= 36797
IFdvcmtlcnM= 36798
Lk5vRXJyb3I= 36799
IGJpbmRpbmdz 36800
IGRpc2FiaWxpdGllcw== 36801
e1w= 36802
IE11bmljaXA= 36803
IGNvcmVz 36804
dXJwbGU= 36805
IE5va2lh 36806
dXNpb25z 36807
IEZpdG5lc3M= 36808
LmhhbmRsZUNoYW5nZQ== 36809
IGphdmFzY3JpcHQ= 36810
7JqU 36811
KGRlYw== 36812
IHBhY2tpbmc= 36813
LWRlcGVuZA== 36814
IHRyYW5zY3JpcHQ= 36815
emVyb3M= 36816
X2FsZXJ0 36817
PyIsCg== 36818
bGlicw== 36819
sdC+0YI= 36820
IHwKCg== 36821
dHJhaW5lZA== 36822
IEdlbnQ= 36823
IFJhYg== 36824
eHA= 36825
X2NvbmZpZ3VyYXRpb24= 36826
5aSp 36827
X2FjY2VwdA== 36828
LnJlY3ljbGVydmlldw== 36829
OnVybA== 36830
IE11aGFtbWFk 36831
IHByaXZpbGVnZXM= 36832
X2Jhbms= 36833
dWt1 36834
d2FsbGV0 36835
IFJPT1Q= 36836
IGVuY3VlbnQ= 36837
P2ZhbWlseQ== 36838
CXBvc2l0aW9u 36839
IGNn 36840
IHByZWNpcA== 36841
bWV0aG9kcw== 36842
X2Zhc3Q= 36843
aW5jcmVtZW50 36844
IFRpZ2Vy 36845
X09DQ1VSUkVE 36846
cXVpcA== 36847
IEhBUw== 36848
X2RvbQ== 36849
IHdyZWNr 36850
Ymo= 36851
IGRlcm4= 36852
IG9yZ2Fucw== 36853
LmVudHJpZXM= 36854
IF8oJw== 36855
cmFtZW50bw== 36856
IEphbWll 36857
IHB1bms= 36858
SVBQ 36859
IHByb2dyYW1h 36860
IGF0dGFpbg== 36861
IHByb3Zlcw== 36862
L3NpZ24= 36863
IGFuc3dlcmluZw== 36864
IGxhZGRlcg== 36865
KioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 36866
IFdhbG1hcnQ= 36867
IENPTlRFTlQ= 36868
ZHVjdG9y 36869
IHZlcmJhbA== 36870
IFBJRA== 36871
Y3J5cHRv 36872
X0NBTExCQUNL 36873
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== 36874
IHBvdGVudA== 36875
IHNob3J0cw== 36876
LlVyaQ== 36877
LnVuaWZvcm0= 36878
O2JvcmRlcg== 36879
IFdlcg== 36880
IGhlcmVpbg== 36881
bGxh 36882
IElocg== 36883
UGl4bWFw 36884
bGl0ZXJhbA== 36885
ISkKCg== 36886
Z2VuZXJpYw== 36887
cnVzdA== 36888
X3NjcmlwdHM= 36889
b3N0bw== 36890
aXR1cw== 36891
IENvYWxpdGlvbg== 36892
IHJlbW90 36893
ZGVwbG95 36894
IEVhZ2xl 36895
44CB44CM 36896
IGltcG9ydGFudGU= 36897
CW9iamVjdA== 36898
IHNlYXNvbmFs 36899
bmVq 36900
YWlkdQ== 36901
QmluZFZpZXc= 36902
IFNpZXJyYQ== 36903
LWJn 36904
IG1ha2VTdHlsZXM= 36905
W29mZnNldA== 36906
R2FtZXM= 36907
IGhvcm1vbmU= 36908
QVJJTw== 36909
aGVhZHM= 36910
KHNlbGVjdA== 36911
IFN0YXJ0ZWQ= 36912
QHBhcmFt 36913
X2RlY2w= 36914
X2Jsb2c= 36915
IGHDsW8= 36916
XEFwaQ== 36917
IE1pbHdhdWtlZQ== 36918
UHJvdmlk 36919
QW5pbWF0ZWQ= 36920
IGNvb2xlcg== 36921
IFNlZWQ= 36922
LkVkaXQ= 36923
z4Q= 36924
IFRha2luZw== 36925
IGJvcmRlckNvbG9y 36926
LWZvdW5kZXI= 36927
LkxvZ2dlckZhY3Rvcnk= 36928
ICIiCgo= 36929
QUxU 36930
IExhdGU= 36931
RURJQVRF 36932
ICk7CgoK 36933
YWZh 36934
IGNhbmNlbGxhdGlvbg== 36935
QXRvbQ== 36936
IEJpcm1pbmdoYW0= 36937
ZW1wcmVzYQ== 36938
SEVNQQ== 36939
YXNjYWw= 36940
IHVwc2lkZQ== 36941
LlZlcnNpb24= 36942
IEZvbGRlcg== 36943
IEVpZ2h0 36944
IFZpbnRhZ2U= 36945
IEFwcERlbGVnYXRl 36946
IFByZXZlbnRpb24= 36947
LnNlcGFyYXRvcg== 36948
U1RN 36949
KHJvb20= 36950
Z2VuZXJhdG9y 36951
IGNhdHRsZQ== 36952
CVo= 36953
IFBhcnRpY2xl 36954
J307Cg== 36955
IG5laWdoYm91cnM= 36956
IFN0YXRlbGVzcw== 36957
IGFsdGl0dWRl 36958
IHNhaW50 36959
0L7QsdCw0LI= 36960
IGNvbnZpbmM= 36961
IENvbnRlbnRz 36962
IGpldW5l 36963
KHRz 36964
U2VyaWFsaXphdGlvbg== 36965
KGNvbGxlY3Rpb24= 36966
IEpheno= 36967
IERvZA== 36968
IFJvY2g= 36969
YWNpbw== 36970
Y29tbWVuZGVk 36971
REVGSU5F 36972
Lm9ubG9hZA== 36973
IHNwZWNpYWx0eQ== 36974
UExBQ0U= 36975
X01PVkU= 36976
IGFjY291bnRhYmxl 36977
UmV1dGVycw== 36978
IGZpY2tlbg== 36979
IGRlcHI= 36980
V293 36981
Vm9pZA== 36982
LnNwYWNl 36983
4LiX 36984
IHRx 36985
IFBldHM= 36986
PCQ= 36987
KEN1cnJlbnQ= 36988
YmVycmllcw== 36989
cGxhbmF0aW9u 36990
IGxpc3RPZg== 36991
IFRodQ== 36992
IFBSSU5U 36993
IG1pc21v 36994
IGRvaQ== 36995
Y2hr 36996
IFVuaWNvZGU= 36997
KHJvbGU= 36998
IHZpcmdpbg== 36999
PFBvaW50 37000
X1JFU1BPTlNF 37001
LWhvdXNl 37002
IFZlbmV6dWVsYQ== 37003
RU1BSUw= 37004
IHDDumI= 37005
X2V4aXN0 37006
QmFsbA== 37007
LkNM 37008
cmVmZXJlbmNlcw== 37009
IEJlYXV0aWZ1bFNvdXA= 37010
CUV4cGVjdA== 37011
VEhJUw== 37012
0YPQtA== 37013
YmFuZQ== 37014
IHRlbXBvcmFs 37015
RVJJQw== 37016
ZXRhcw== 37017
IHJlZnJlc2hpbmc= 37018
IHNlY3VsYXI= 37019
QHN5bnRoZXNpemU= 37020
YWNjdXI= 37021
IG5lbGxh 37022
IFNPTA== 37023
LnBpcGU= 37024
Q2hhbm5lbHM= 37025
6Ieq 37026
IGluc2VydGlvbg== 37027
4buL 37028
ZWxpYQ== 37029
IGFkanVzdGFibGU= 37030
Q2FuYWRh 37031
IElURU0= 37032
IGN1cnZlcw== 37033
IENoZWFw 37034
bGV0aW5n 37035
IG9wdGltaXN0aWM= 37036
YWxsbw== 37037
IHBvbGl0aWNpYW4= 37038
X2Rvd25sb2Fk 37039
PWVkZ2U= 37040
T1JUSA== 37041
IG1vZGVsbw== 37042
YXJ0bw== 37043
LnJvdGF0ZQ== 37044
IHNlbGVuaXVt 37045
5oiR 37046
X2FsaWFz 37047
IHJlbm93bmVk 37048
Licu 37049
IGN6eQ== 37050
IGFsbGVz 37051
LkNvbXBpbGVy 37052
IEJhc3M= 37053
Q29ubmVjdG9y 37054
LlJvbGU= 37055
TElOSw== 37056
IGNyaXRlcmlvbg== 37057
bGVtZXRyeQ== 37058
U3VjY2Vzc2Z1bGx5 37059
L3BuZw== 37060
IGV5ZWI= 37061
YXNwYmVycnk= 37062
KGdy 37063
IGRhbmdlcnM= 37064
IGNvcnJlY3RlZA== 37065
IGdsb3c= 37066
IGVsYWJvcmF0ZQ== 37067
IEJlYXJz 37068
YXdhaQ== 37069
PSInKw== 37070
IHByb21vdGlvbnM= 37071
IG1hdGhlbWF0aWNhbA== 37072
ICJg 37073
X0dlbmVyaWNDbGFzcw== 37074
IENoZWY= 37075
LlNvcnQ= 37076
dGFibGVOYW1l 37077
UklD 37078
IHZvbHVudGFyeQ== 37079
IEJsYWRl 37080
LWVsZWN0 37081
IENvbWJhdA== 37082
IEFiaWxpdHk= 37083
IGFiZG9t 37084
IGR1Y2s= 37085
VG1w 37086
5YWo 37087
IGVyYXNl 37088
LlBo 37089
IERlZmF1bHRz 37090
cGFydG1lbnQ= 37091
X1VTQg== 37092
w6p0ZQ== 37093
Oyc= 37094
IHBhZHM= 37095
IE9iYW1hY2FyZQ== 37096
LlRvdGFs 37097
IGRpdmVydA== 37098
IGNyaWNrZXQ= 37099
IHJlY3JlYXRpb25hbA== 37100
KHJlZA== 37101
IENsZQ== 37102
UlU= 37103
IG1pc3Rha2Vu 37104
IE1vbnRhbmE= 37105
IHN0cml2ZQ== 37106
X3NsaWRlcg== 37107
IFBsYXN0aWM= 37108
IGRlY29yYXRlZA== 37109
IFZQ 37110
bGljbw== 37111
CWZhbHNl 37112
IHByZWZz 37113
KFwi 37114
X2ZhbHNl 37115
aWVuZG8= 37116
IEAk 37117
QnVja2V0 37118
YWN0aWNhbA== 37119
IFpoYW5n 37120
LmNvbHM= 37121
LkJpbmRpbmc= 37122
IHdheA== 37123
X1NUT1JBR0U= 37124
IGxhd24= 37125
IHJm 37126
LlNjZW5l 37127
IENhbGN1bGF0b3I= 37128
LmRlc2lnbg== 37129
IHJlc2ls 37130
0LvQtdC8 37131
RW1wbG95 37132
IFByaWNlcw== 37133
IFBXTQ== 37134
YWdp 37135
LmV2YWx1YXRl 37136
CXBhcmFt 37137
IGJyYXNz 37138
YmJlbg== 37139
IGluZmxhbW1hdGlvbg== 37140
dWxsaXZhbg== 37141
IGFubm90 37142
IHBI 37143
aWFtZXRlcg== 37144
IEJUQw== 37145
KGJveA== 37146
U3Rvcnlib2FyZA== 37147
IGNsYXk= 37148
LmFzc2VydFJhaXNlcw== 37149
fHN0cmluZw== 37150
LkFwcGx5 37151
IG1hdGNoZXI= 37152
dW5kZWQ= 37153
IHNhdGlzZnlpbmc= 37154
IOyglQ== 37155
UmVuZGVyaW5n 37156
X2FwcHJv 37157
aW5kcm9tZQ== 37158
QU5FTA== 37159
X2ZpeA== 37160
YnJ1c2g= 37161
Lk1hdGNo 37162
IHNtaWxpbmc= 37163
b25hdXQ= 37164
U3VuZGF5 37165
IGRlbGV0aW9u 37166
IGVuY291cmFnZXM= 37167
UHVsbA== 37168
IHJldmVuZ2U= 37169
IHF1YXJyeQ== 37170
dHJhZGU= 37171
IGNhYmxlcw== 37172
KGRlbHRh 37173
aXRlc3BhY2U= 37174
IGZo 37175
LmJ1bmlmdQ== 37176
IHZpZWw= 37177
X0lOQ0xVREVE 37178
IFRhaWw= 37179
YWRhcg== 37180
b2Zz 37181
IG1ldGFscw== 37182
Z29t 37183
X21ldGhvZHM= 37184
IG5q 37185
LlN0ZA== 37186
KHdpbg== 37187
JCgn 37188
IHR1cnRsZQ== 37189
dXJvbg== 37190
IGVucm9sbGVk 37191
IEh6 37192
IEJveERlY29yYXRpb24= 37193
IHBvbnQ= 37194
cmVsYXRpb25zaGlw 37195
Qmk= 37196
s7s= 37197
IG1hc2N1bA== 37198
IHNoYWRlcw== 37199
IHZy 37200
IExvZ2lj 37201
IGFpbg== 37202
IERJU1Q= 37203
IGNvbGxhcg== 37204
InByb2ZpbGU= 37205
R2VuZXJhdGVkVmFsdWU= 37206
IFBvc3NpYmxl 37207
IGVpbmVz 37208
g4E= 37209
LnRpbWVvdXQ= 37210
IEVj 37211
IGplcnNleQ== 37212
LkRvdWJsZQ== 37213
IHF1YWxpZnlpbmc= 37214
dm9y 37215
Q1JFRU4= 37216
X0FwcA== 37217
X3JlY3Y= 37218
IGFsaWVucw== 37219
SXRz 37220
RXNj 37221
aWF0b3I= 37222
IEVjbGlwc2U= 37223
IGdo 37224
VmljdA== 37225
CWh0bWw= 37226
dG9v 37227
LmNvbnN0 37228
IGFudGVyaW9y 37229
IFd1 37230
KGtleXM= 37231
IHVsdHI= 37232
X3BvbHk= 37233
IFRhcA== 37234
IEJ1ZA== 37235
QVdT 37236
IGNyYXNoZXM= 37237
X3RvdA== 37238
Q29udGlu 37239
LWhhbmRlZA== 37240
YWx0aG91Z2g= 37241
4Lia 37242
aWZpY2VudA== 37243
IGRldmU= 37244
dXRvcnk= 37245
IFdvcnRo 37246
X01T 37247
IGZsb29yaW5n 37248
IHNlbGxlcnM= 37249
IFRoYW5rc2dpdmluZw== 37250
IHBuZw== 37251
IHZhbG9yZXM= 37252
IHNsZWV2ZQ== 37253
IGZpbGxl 37254
0JA= 37255
IGFwcG9pbnRtZW50cw== 37256
IHZpbQ== 37257
VXNlckluZm8= 37258
Qk9PU1Q= 37259
IHBvc2Vk 37260
aW5pdGlhbGl6ZWQ= 37261
LnByb2R1Y3Rz 37262
IExlYWRlcnNoaXA= 37263
bWFudWVs 37264
JyU= 37265
ZW1hcmtz 37266
UGVyY2VudGFnZQ== 37267
KGRpc3Q= 37268
LmF2YXRhcg== 37269
KGhPYmplY3Q= 37270
5LuK 37271
X2lmZg== 37272
aWNvbmU= 37273
Oyk= 37274
X25pbA== 37275
IGFib2w= 37276
0LXRgdGC 37277
IHZlbnVlcw== 37278
LkNvbnZlcnQ= 37279
IScpCg== 37280
LkJpdG1hcA== 37281
c2tpbg== 37282
X0NPTFVNTg== 37283
UmV2 37284
R1JFU1M= 37285
Z293 37286
IHdpc2hlZA== 37287
dHJhY3Rz 37288
LmFzc2VydEZhbHNl 37289
IHNjcmVlbnNob3Q= 37290
IGZvaXM= 37291
Q29tYg== 37292
TGluZVdpZHRo 37293
IEdyYWI= 37294
IGludGVuc2l2ZQ== 37295
CXNo 37296
Kyk= 37297
LmZpcnN0TmFtZQ== 37298
X1BST0NFU1M= 37299
IHRpbHQ= 37300
aXRvcmVk 37301
LkxPRw== 37302
IGJhaw== 37303
IGludGVudGlvbmFsbHk= 37304
LnBsYXllcnM= 37305
KGNhbnZhcw== 37306
KSkpDQo= 37307
LlByb3ZpZGVy 37308
X1BVQkxJQw== 37309
VGFsaw== 37310
IExpdg== 37311
Y2hlZHVsZXJz 37312
IGxj 37313
YWRpYw== 37314
ZmVhdHVyZWQ= 37315
LnJlc291cmNlcw== 37316
RnVsbE5hbWU= 37317
IG1lYW53aGlsZQ== 37318
QnVmZmVycw== 37319
IHJlc29sdmVy 37320
IFNBUA== 37321
X1RF 37322
R05V 37323
IEZvcm1zTW9kdWxl 37324
X3do 37325
IFN3ZQ== 37326
LndpZGdldHM= 37327
IGNhYmluZXRz 37328
IHN1c2NlcHQ= 37329
IEJvdHQ= 37330
YWN0aXZleA== 37331
YXZhcg== 37332
YW50aWNz 37333
ICI9Ig== 37334
X2t3YXJncw== 37335
IGdhbWVPYmplY3Q= 37336
IEFuZ2xl 37337
Lkl0ZXI= 37338
bWFyc2g= 37339
IEJpcnRoZGF5 37340
IENNUw== 37341
cmVxdWVzdHM= 37342
IFBlYXJs 37343
X0VPTA== 37344
IGxpbnV4 37345
KG9yZw== 37346
X01vdXNl 37347
LmNvbnN0cnVjdG9y 37348
IHpk 37349
IGtpY2tz 37350
YXJ0aXNhbg== 37351
IGVheA== 37352
S24= 37353
cG9uZ2U= 37354
IEZpbmxhbmQ= 37355
IG1ldHJlcw== 37356
IEFzc2Vzc21lbnQ= 37357
cGFydG5lcg== 37358
L3ByZQ== 37359
IScsCg== 37360
W0ludA== 37361
IG9zbG8= 37362
ZGF0ZXBpY2tlcg== 37363
L1N0cmluZw== 37364
b3BsYXk= 37365
IEhlYnJldw== 37366
LGRvdWJsZQ== 37367
IHRyYWJhbA== 37368
KyJc 37369
CUVJRg== 37370
L3RleHQ= 37371
X0ZJUlNU 37372
IFBldGU= 37373
IGVnbw== 37374
IGV4dHJhcw== 37375
UERP 37376
IHJlZ3VsYXRl 37377
IFFXaWRnZXQ= 37378
c3Rz 37379
IFNob3dz 37380
IE5IUw== 37381
LmNvdXJzZQ== 37382
cHRocmVhZA== 37383
IEZ1ZWw= 37384
LnRpbWVz 37385
IMKw 37386
IHN0cmlkZXM= 37387
KCQoJyM= 37388
KHdvcmRz 37389
IHJoeXRobQ== 37390
IHNwb250 37391
IHNlbnNhdGlvbg== 37392
IHNwaWtl 37393
Q2xvc2luZw== 37394
6aG16Z2i 37395
TnVtZXJpYw== 37396
IGJyZWF0aGU= 37397
IGZpbmFsZQ== 37398
X0ZBQ1Q= 37399
aW5pb24= 37400
IGNoaWxs 37401
IGZvcm1hbGx5 37402
QU5HRUQ= 37403
ICc6Jw== 37404
INC/0YDQuA== 37405
YXE= 37406
IEZhYnJpYw== 37407
KGxhdA== 37408
IFByaW5jaXBhbA== 37409
IGVycm8= 37410
b2NhbGU= 37411
Tm9t 37412
IGZvc3Q= 37413
X0NVU1RPTQ== 37414
LmludGVsbGlq 37415
ZXJ0b29scw== 37416
IGNsYXNzZQ== 37417
YWRpZW50cw== 37418
IGZ1bmRyYWlzaW5n 37419
RU5F 37420
X09QVElPTlM= 37421
X29i 37422
Ly99Cg== 37423
IHByb3RlY3Rpb25z 37424
LnNlZWQ= 37425
TlY= 37426
dGVybWluYWw= 37427
Ozs7 37428
UHJlZGljYXRl 37429
IOy2 37430
IGJvbWJpbmc= 37431
R0Y= 37432
IGNoZXc= 37433
KSkpLg== 37434
cXVhbGlmaWVk 37435
XT17 37436
bGlzdGVu 37437
Q0VOVA== 37438
ZGlnZXN0 37439
RWFzdA== 37440
IGRpdmVy 37441
IGVuZHBvaW50cw== 37442
IGVl 37443
IGNvbGxlYWd1ZQ== 37444
IGRpc3NlcnRhdGlvbg== 37445
X2NvbW1pdA== 37446
X0RBVA== 37447
LnJj 37448
IGJyZWFzdHM= 37449
IFJ1Zw== 37450
IFBpbA== 37451
Q29udHJhY3Rz 37452
IEJyeWFu 37453
V2ViVmlldw== 37454
IGNvbmNlbnRyYXRl 37455
IElubmVy 37456
ICd8 37457
c3Rkb3V0 37458
X1N1Yg== 37459
Pi0tPgo= 37460
Vm9s 37461
IFNTRA== 37462
KSkpLA== 37463
Lk9wdGlvbmFs 37464
IG51cnNlcw== 37465
IG9yYg== 37466
X3Bl 37467
KTsNCg0KDQo= 37468
cGxhY2Vk 37469
ZXNzZXI= 37470
IHRoZXJhcGV1dGlj 37471
IHdoaXRlc3BhY2U= 37472
IGFzdG9u 37473
U3VjY2Vzc2Z1bA== 37474
IHByYWlzZWQ= 37475
IFdlcw== 37476
IGVpZ2h0aA== 37477
aXJhbA== 37478
IHZyb3V3 37479
IGZhY3Rpb24= 37480
X2JpYXM= 37481
IHdpdGNo 37482
IG5wYw== 37483
KHNi 37484
IFJvZHJpZw== 37485
X2JpZw== 37486
RGVwZW5kZW5jeQ== 37487
IEFicmFoYW0= 37488
YXJkaQ== 37489
Q0FS 37490
bm9z 37491
IGFidW5kYW5jZQ== 37492
IG51dHJpZW50cw== 37493
aW5zdGVpbg== 37494
LlZlcnQ= 37495
IElTUw== 37496
PFU= 37497
IHN1bXM= 37498
X2hpc3Q= 37499
IGZhcm1lcg== 37500
IEFicg== 37501
U2hvdA== 37502
IEJhZFJlcXVlc3Q= 37503
IGhhc3M= 37504
IFJhaWxz 37505
IGFmZmlsaWF0ZWQ= 37506
5p2l 37507
IGVyZg== 37508
SU5G 37509
IFZpZXdIb2xkZXI= 37510
bWluaQ== 37511
IFJvdGg= 37512
IGZhaXRoZnVs 37513
IFBoaWxsaXBz 37514
QU5ET00= 37515
XS5b 37516
X1BBWQ== 37517
IEFyY3RpYw== 37518
ZmFrZXI= 37519
RGlnaXQ= 37520
TWFsZQ== 37521
c3RkZXJy 37522
c2V5cw== 37523
IMWh 37524
X3JlbW90ZQ== 37525
bGlxdWU= 37526
IGluZGVm 37527
IEluZHVzdHJpZXM= 37528
aXRyYQ== 37529
X3BhaXJz 37530
PGlvc3RyZWFt 37531
IHNhbGFyaWVz 37532
aWtlbg== 37533
LkZyYW1l 37534
UExJQw== 37535
X1NQRUM= 37536
IE1lZGl0ZXJy 37537
IHN5c3RlbWF0aWM= 37538
IGludGVycm9n 37539
SWNvbkJ1dHRvbg== 37540
c2Vh 37541
aW50cm8= 37542
IElzc3Vlcw== 37543
ZW5jcnlwdGVk 37544
IGludGVybmF0aW9uYWxseQ== 37545
IHNucHJpbnRm 37546
IHBhc3Rh 37547
IEJyYWRsZXk= 37548
X1N0YXR1cw== 37549
QUxL 37550
X1BBRA== 37551
LmxhdW5jaA== 37552
PHNlbGVjdA== 37553
IGhhcmRlc3Q= 37554
IHBoeQ== 37555
ICgoKg== 37556
LXNsaWRl 37557
IE5vYm9keQ== 37558
U3U= 37559
IGFzw60= 37560
Y2xvc2VzdA== 37561
X2luaXRpYWxpemVy 37562
IHN1cHBvcnRlcg== 37563
LWdlbg== 37564
IHRhbGVz 37565
IGNvcnA= 37566
X2Z1 37567
c2F0 37568
bmVpZ2hib3I= 37569
Lk1pZ3JhdGlvbnM= 37570
IGFsZ3Vu 37571
IHNpbm9u 37572
LlNwZWM= 37573
PywK 37574
LkdM 37575
bWFsZQ== 37576
IG1vbml0b3Jz 37577
eWxhbg== 37578
LUxpY2Vuc2U= 37579
Lm1hdGNoZXM= 37580
IEFCUw== 37581
IE1hc3Q= 37582
IFdhbGxldA== 37583
KCQoIiM= 37584
RGlydHk= 37585
IGNvcGU= 37586
IGludGVycG9sYXRpb24= 37587
b3VzZWQ= 37588
IEpldHM= 37589
LkZMQUc= 37590
LkNhbmNlbA== 37591
LkV2ZW50cw== 37592
bmV2ZXI= 37593
IE1Ieg== 37594
PkQ= 37595
IHNlcnZsZXQ= 37596
YmFzdGlhbg== 37597
ID4m 37598
U0lE 37599
X2Nsaw== 37600
IGRpdmlzaW9ucw== 37601
fScsCg== 37602
IGRpbGRv 37603
IHBhcmFkZQ== 37604
bWFqb3I= 37605
IGFib2FyZA== 37606
Oysr 37607
IGZ1c2lvbg== 37608
In0seyI= 37609
IERpYWxvZ1Jlc3VsdA== 37610
CWFycg== 37611
LWVt 37612
X25y 37613
KGhhbmRsZXI= 37614
Lk5FVA== 37615
Llh0cmFSZXBvcnRz 37616
IFNoYWg= 37617
IEJyaWVm 37618
LSw= 37619
IHByZWNpbw== 37620
CQkJICAgICAg 37621
IHRhbnQ= 37622
IEdyYW5kZQ== 37623
L3htbA== 37624
X0lDT04= 37625
IFJldHJv 37626
dW5xdWU= 37627
IG5hZw== 37628
dG9GaXhlZA== 37629
WEw= 37630
IGRlY2xhcmluZw== 37631
IENvbmNyZXRl 37632
IEFtYXppbmc= 37633
CXByaW50aw== 37634
IGRlYmF0ZXM= 37635
REFURUQ= 37636
IGFlc3RoZXRpYw== 37637
ZW1ldGVyeQ== 37638
Um91dGluZ01vZHVsZQ== 37639
IE5hc2h2aWxsZQ== 37640
V0FZUw== 37641
IHdvbGY= 37642
IG9ic2VydmVycw== 37643
T1RB 37644
YW5zb24= 37645
IGVh 37646
IGdyZWVuaG91c2U= 37647
k43kvZw= 37648
IHN0YWly 37649
IGltbWlncmFudA== 37650
X2FwcGx5 37651
cGVhcmU= 37652
IEJsb29tYmVyZw== 37653
X1BMQVlFUg== 37654
UmVzcA== 37655
5q2j 37656
Q2hvb3Nlcg== 37657
IElDb2xsZWN0aW9u 37658
UGV0ZXI= 37659
RXJybw== 37660
LmRldGVjdENoYW5nZXM= 37661
TWFwcw== 37662
IHNxdWVlemU= 37663
IEhvbWVz 37664
d2VnaWFu 37665
IGZvcm1hdHRpbmc= 37666
IG5lZ290aWF0ZQ== 37667
dWxk 37668
IE5lcA== 37669
IFFC 37670
IGVjb25vbWllcw== 37671
ICovLA== 37672
IHJlZHVuZA== 37673
IEFiZXI= 37674
LklzTnVsbE9yV2hpdGVTcGFjZQ== 37675
eWNsZWQ= 37676
ICAgICAgICAgICAgICAgICAgCg== 37677
X1No 37678
IHNrZXB0 37679
IHJlY3JlYXRlZA== 37680
IGdldFR5cGU= 37681
IG1hcmdpbnM= 37682
IGNvbG9uaWFs 37683
Y2hhcnRz 37684
Ly9A 37685
IHByb2Nlc3NvcnM= 37686
6K+0 37687
YmF0aXM= 37688
5oSP 37689
YXRvcmlv 37690
bWVudGlvbmVk 37691
UGF0aWVudA== 37692
IHByZXk= 37693
Q2hlY2tib3g= 37694
X3hwYXRo 37695
LnNraXA= 37696
IE1vcm1vbg== 37697
IE1lbW9yeVN0cmVhbQ== 37698
Q1JFTUVOVA== 37699
IGt1 37700
bWVsZA== 37701
XERhdGE= 37702
IEtlcm5lbA== 37703
aWx0cg== 37704
6YCB 37705
KHByb2ZpbGU= 37706
Q2FyYm9u 37707
Uk9MRQ== 37708
KHBs 37709
XSoo 37710
Lm1lbW9yeQ== 37711
IG1lZGFs 37712
IGFkdmlzb3I= 37713
aXTDpHQ= 37714
IGhkcg== 37715
aWVydW5n 37716
IFByb3ZpZGVz 37717
KGFscGhh 37718
IHRlZW5hZ2Vycw== 37719
LXBhcnNlcg== 37720
LkxhdExuZw== 37721
XSgpCg== 37722
IGZlbG9ueQ== 37723
CQkJCgkJCQo= 37724
Qk9PSw== 37725
IHNsYXNo 37726
IGNsZWFyZml4 37727
IFByb3BoZXQ= 37728
5a65 37729
cmlnaHRuZXNz 37730
LWZp 37731
LmtpbmQ= 37732
ZXJ0b24= 37733
Smlt 37734
IG1hbmlwdWxhdGU= 37735
IHdvcmtzaGVldA== 37736
b2xpbg== 37737
c3RhcnM= 37738
IGFydGlmYWN0 37739
X0VNUFRZ 37740
CW1haW4= 37741
LS0tLS0tLS0tLS0tLTwv 37742
L3N0YXRpYw== 37743
SVRJRVM= 37744
IENvdW5zZWw= 37745
IFdD 37746
IEJMQUNL 37747
LXN5c3RlbQ== 37748
IFRyaXBsZQ== 37749
LmJ0 37750
c29mdHdhcmU= 37751
XScpLg== 37752
SW5qZWN0aW9u 37753
X25vdGlmeQ== 37754
IGZpZnRlZW4= 37755
IGFtYmFzc2Fkb3I= 37756
YnJlYWtpbmc= 37757
VVJJQ29tcG9uZW50 37758
IFByb3Rlc3Q= 37759
LlJlc2V0 37760
IE1Qcw== 37761
dnJv 37762
LmdldFN0YXR1cw== 37763
X21vcmU= 37764
Y3Vw 37765
IEtlbnlh 37766
5bey 37767
IGFtbXVuaXRpb24= 37768
15XX 37769
IERhc2g= 37770
IHVuZGVyZ28= 37771
IGJ1ZGR5 37772
0YLQvtGA 37773
ZXRpY2FsbHk= 37774
X091dA== 37775
IEJyb2Fkd2F5 37776
qow= 37777
IEZpdHo= 37778
IHN0cmlwcGVk 37779
LWNhY2hl 37780
IHVtYg== 37781
IGFub20= 37782
IHNpYmxpbmdz 37783
b2N1bWVudGVk 37784
SW50ZXJydXB0ZWRFeGNlcHRpb24= 37785
IHBlbmc= 37786
bHN0 37787
X0FMSUdO 37788
LWNhcA== 37789
UkQ= 37790
Y2VsbHM= 37791
IE1vdG9ycw== 37792
IHRyYW5zbGF0aW9ucw== 37793
dXN0ZXJpbmc= 37794
6Zo= 37795
IGxlYWtz 37796
ZmlsZVBhdGg= 37797
IG91dGdvaW5n 37798
X2VuZHBvaW50 37799
X0dM 37800
LmxpZmVyYXk= 37801
cmljaHQ= 37802
IE9wZW5HTA== 37803
LmpwYQ== 37804
IGFmZmVjdGlvbg== 37805
Zmx1eA== 37806
IGdseQ== 37807
IGJ1ZA== 37808
Pic7 37809
IGV4cHJlc3Npbmc= 37810
IElR 37811
IEZhY3Q= 37812
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK 37813
X21hc3M= 37814
KSk6 37815
IGNvbmRvbQ== 37816
IGNyZWF0ZVN0YXRl 37817
b21ldG93bg== 37818
IGlycg== 37819
ID4o 37820
PkI= 37821
aXRlcmF0aW9u 37822
44Oq 37823
IHNoaXJ0cw== 37824
b3VudHk= 37825
LT4k 37826
X1NJR04= 37827
IERhbGU= 37828
IGpq 37829
RWFzeQ== 37830
RnJl 37831
IE55 37832
IGNobG9y 37833
bWF0Y2hlZA== 37834
IEdlcm0= 37835
LVVB 37836
IE5hdGhhbg== 37837
ZWR1Y2F0aW9u 37838
LXlhcmQ= 37839
LWNoZQ== 37840
aG91c2Vz 37841
cml0aW9uYWw= 37842
IHByb3hpbWl0eQ== 37843
IGRpZXNlbQ== 37844
4bqtcA== 37845
IGRyb3VnaHQ= 37846
LmF1ZGlv 37847
IExlbw== 37848
IGZhdm9yYWJsZQ== 37849
aW5jaA== 37850
IERhdw== 37851
cmlibHk= 37852
X3N0dWRlbnQ= 37853
aWRhYmxl 37854
T1ZF 37855
IGxhY2tz 37856
b3VuY2luZw== 37857
LmJ1c2luZXNz 37858
IHJlb3Blbg== 37859
bWF5YmU= 37860
X0dMT0JBTA== 37861
IGRyZXNzZXM= 37862
IEVkd2FyZHM= 37863
ZW5zaWJsZQ== 37864
IEhhcmR3YXJl 37865
IEV4Y2VsbGVudA== 37866
IFRpbWVVbml0 37867
Q1RJT05T 37868
IHNjaGVkdWxlcw== 37869
IHNlZ3Vl 37870
T3BlbnM= 37871
YW1tZW4= 37872
LUlkZW50aWZpZXI= 37873
IHN0YXJpbmc= 37874
IGhhcHBpbHk= 37875
IEhvYg== 37876
J18= 37877
ICIpOw== 37878
YW1lbnRvcw== 37879
ZXRjaGVk 37880
IC8+fQo= 37881
LlVzZXJz 37882
IGludGVycnVwdGVk 37883
Q29udGFjdHM= 37884
IHJlZ2lzdHJv 37885
aW5idXJnaA== 37886
Q0hB 37887
X2ltcA== 37888
cGhpcw== 37889
c2F5 37890
IHJldGFpbGVy 37891
Lk5PREU= 37892
L21hcHM= 37893
X0xBU1Q= 37894
IENoYXJnZQ== 37895
X2d1YXJk 37896
Q29sbGlkZXI= 37897
IFN0YXRlbGVzc1dpZGdldA== 37898
IjpbIg== 37899
KCIuLi8uLi8= 37900
aW94aWRl 37901
IFN1bmQ= 37902
ICcnOw== 37903
dW5zZXQ= 37904
YWRkV2lkZ2V0 37905
0LvRjg== 37906
ZWxsZXM= 37907
YWxrZXI= 37908
QXJj 37909
IGRlZHVjdA== 37910
R1VJTGF5b3V0 37911
IFZpbGxh 37912
IGZvcmJpZGRlbg== 37913
X3doZXJl 37914
IFwv 37915
IFRpYg== 37916
X0FY 37917
XQ0KDQo= 37918
IEJpcg== 37919
IGJlbmQ= 37920
IE1BS0U= 37921
IE1FVA== 37922
IGZ1dHVyZXM= 37923
IHdlaWdodGVk 37924
IiIiDQo= 37925
IGF1dGhvcml6ZQ== 37926
KHByb2dyYW0= 37927
fSx7Ig== 37928
IGNvZWZmaWNpZW50cw== 37929
w6pz 37930
UGVyUGFnZQ== 37931
IEJhdGhyb29t 37932
IFB1Ymxpc2hpbmc= 37933
R1BM 37934
IHN1Ym1pc3Npb25z 37935
IE5VTUJFUg== 37936
asSF 37937
IGFkZGl0aW9uYWxseQ== 37938
ZW1wcmU= 37939
IFNoZWw= 37940
b3R5cA== 37941
U29sdXRpb24= 37942
IHRodW5kZXI= 37943
X2Vj 37944
IAogICAgCg== 37945
IEZlbGxvdw== 37946
IGtheQ== 37947
IG5ld1N0YXRl 37948
T05UQUw= 37949
SW1wbGVtZW50YXRpb24= 37950
Lkxvb2s= 37951
IGVudHM= 37952
IGxvcnM= 37953
IEJJRw== 37954
ZmFi 37955
IGF2ZXJhZ2Vk 37956
IEZlZWRiYWNr 37957
IFdlbGxz 37958
IG1hcnRpYWw= 37959
IGluZHVs 37960
IENvbW11bmlzdA== 37961
IEZvcmV4 37962
IEFncmljdWx0dXJl 37963
Ils= 37964
IHF1YXI= 37965
IEtvbnQ= 37966
CXZpZXc= 37967
LkJ5dGVz 37968
ZGVza3RvcA== 37969
IE1ha2Vz 37970
YWtlc3BlYXJl 37971
Lk51bGxhYmxl 37972
IHNwb3RsaWdodA== 37973
VkI= 37974
b3d5 37975
KHRvcmNo 37976
dHJpZGdl 37977
X2JvdW5kcw== 37978
IGFwb2xvZ2l6ZQ== 37979
LmFkZEl0ZW0= 37980
YW50ZA== 37981
Kik7Cg== 37982
LHU= 37983
KGdlbg== 37984
57uT 37985
cmVhdG9y 37986
IENvcmQ= 37987
b3VwcGVy 37988
Lm1ldHJv 37989
IGV3 37990
IFdPUkQ= 37991
LkFmdGVy 37992
IGRldGFpbmVk 37993
IEhhbW1lcg== 37994
ZXhpc3Rpbmc= 37995
IG9zdA== 37996
IG1vbnVtZW50 37997
LWN1c3RvbQ== 37998
VXNlcklE 37999
IE5vbQ== 38000
IHJlamVjdGlvbg== 38001
KGRpbQ== 38002
IHNpbmdsZXRvbg== 38003
CWRpZQ== 38004
YXJpYW5jZQ== 38005
cmVwb3J0cw== 38006
XSE9 38007
ZWxkYQ== 38008
IHByZXZhbGVuY2U= 38009
X3JlZ3M= 38010
LiIu 38011
IGZlbWluaXN0 38012
Q29kZWM= 38013
ICoqCg== 38014
KGxhYmVscw== 38015
X01BUks= 38016
RkFJTEVE 38017
IGFkbWluaXN0ZXJlZA== 38018
V04= 38019
ICAgICAgICAJCQ== 38020
IG5vdW4= 38021
d2ln 38022
IGdvdHRh 38023
IHJpZg== 38024
LWlt 38025
IFBhdWxv 38026
IENvbW1hbmRUeXBl 38027
XSkpCgo= 38028
LXplcm8= 38029
VHJhaW5pbmc= 38030
IGxvcmQ= 38031
X2FydA== 38032
cmVkZGl0 38033
Q2VydA== 38034
IHBlc28= 38035
Um90 38036
IGVuZGFuZ2Vy 38037
LmRy 38038
dXNlckluZm8= 38039
dW50cw== 38040
bnY= 38041
IFRyYWlsZXI= 38042
LWZpcnN0 38043
KG1ha2U= 38044
IGJlbmVmaWNp 38045
LWJsYWNr 38046
acOf 38047
IHVuZG91YnRlZGx5 38048
IG1leA== 38049
IEFuY2llbnQ= 38050
KGFz 38051
IGRlc2NlbnQ= 38052
UGljaw== 38053
IHJlcGxpY2E= 38054
JG9iag== 38055
w6Rocg== 38056
IGFycm93cw== 38057
ZnR5 38058
IExpYnlh 38059
dWdh 38060
Y2hhcmdlZA== 38061
VHVy 38062
IGhvbWlj 38063
aXNzZW4= 38064
IEZha2U= 38065
IGJlZXJz 38066
IHNjYXR0ZXJlZA== 38067
KFRpbWU= 38068
VVRJTA== 38069
IGJ1cmVhdWNy 38070
L3BsYWlu 38071
IHN0aWNraW5n 38072
RkFJTA== 38073
IENvdmlk 38074
VGhpcmQ= 38075
X3ByZXNlbnQ= 38076
IFBpZXJyZQ== 38077
IOuq 38078
IFsuLi5dCgo= 38079
UHJvYg== 38080
IFRyYWZmaWM= 38081
aWNhbw== 38082
ZG9jdG9y 38083
ICksCgo= 38084
VGFicw== 38085
YWx1 38086
77ya4oCc 38087
IGluaGVyZW50 38088
X05v 38089
cml0aXM= 38090
IFByb29m 38091
LmJhc2VuYW1l 38092
5Lya 38093
IGNoaW0= 38094
IFByb3RlY3RlZA== 38095
Y3JpdA== 38096
IHByb25l 38097
INC60L7QvQ== 38098
IEhlcm9lcw== 38099
IGFueGlvdXM= 38100
IGFub3M= 38101
IHdlZWtlbmRz 38102
IHNleHQ= 38103
IHJlZHVjZXI= 38104
PVVURg== 38105
aGFsZg== 38106
IFNhdw== 38107
Lm1t 38108
IG51ZXZh 38109
LmN1cnJlbnRUYXJnZXQ= 38110
Lmx1YQ== 38111
X0VYVEVOU0lPTg== 38112
CXJlZw== 38113
IEN0cmw= 38114
X2FsaWdu 38115
YWNjZXB0YWJsZQ== 38116
IHJ1c2hpbmc= 38117
ZnJhYw== 38118
IGJvYXN0cw== 38119
Rml2ZQ== 38120
wrE= 38121
IFRlbXBlcmF0dXJl 38122
Pik6 38123
IGNoYXJ0ZXI= 38124
UkVBVEVE 38125
IHN1YmplY3RlZA== 38126
IG9wYw== 38127
aGVhbHRoeQ== 38128
5L2/55So 38129
IFNjaWVudGlmaWM= 38130
IGZyYXU= 38131
cmlhZ2Vz 38132
4LiU 38133
LmludmVudG9yeQ== 38134
YXRpb25hbGU= 38135
TWFk 38136
bWludXRlcw== 38137
Pj4oKTsK 38138
IEVudg== 38139
IHJlY29yZGluZ3M= 38140
IHN1c3BpY2lvbg== 38141
c3FsaXRl 38142
CXJlYWQ= 38143
44Gm 38144
IHdvcnJpZXM= 38145
LnB1dFN0cmluZw== 38146
IFNoYW5naGFp 38147
KHVpZA== 38148
cmVy 38149
IHbDrWRl 38150
Iik6 38151
IG1ldGhvZG9sb2d5 38152
INC60L7RgtC+0YA= 38153
Y2Nj 38154
YXZhZA== 38155
IGluZHVjdGlvbg== 38156
CVRocmVhZA== 38157
LHN0cmluZw== 38158
4bqhaQ== 38159
bmVobWVu 38160
dWl0aW9u 38161
ICpfXw== 38162
LmVtZg== 38163
IOyc 38164
L3RoZW1lcw== 38165
IE5pbmU= 38166
Lk9uZQ== 38167
IEVtYmVk 38168
IGZheg== 38169
dWF0aW9ucw== 38170
IHByaXZhdGVseQ== 38171
IGxpbmc= 38172
W0Y= 38173
dXNoaQ== 38174
IGxhdW5jaGVz 38175
KEtFWQ== 38176
R01U 38177
IGFpbWluZw== 38178
cGF0aWJsZQ== 38179
IEJpZGVu 38180
aXc= 38181
IERlZ3JlZQ== 38182
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 38183
ICQoJzw= 38184
w6FyaW9z 38185
dG9VcHBlckNhc2U= 38186
7KCc 38187
IEVVUg== 38188
IG92ZXJzaWdodA== 38189
IHRhYmxlc3A= 38190
VXBkYXRlcw== 38191
Lm1ha2VkaXJz 38192
IGh1bWlkaXR5 38193
L3RlbXBsYXRl 38194
QWx3YXlz 38195
KElT 38196
X2NlcnQ= 38197
RGln 38198
IHVuZGVyd2F5 38199
b3J0b24= 38200
IEh1cnJpY2FuZQ== 38201
IHNwZW5kcw== 38202
IFNlZ21lbnQ= 38203
IGZsaWVz 38204
IFRvZ2dsZQ== 38205
IEx5bmNo 38206
IHNlbnNlcw== 38207
IEtvcw== 38208
c2V0RW5hYmxlZA== 38209
aXN0aWNhbGx5 38210
IHRlc3Rlcg== 38211
IGFkbWluaXN0cmF0b3Jz 38212
IHRhZ2dlZA== 38213
0JM= 38214
IHNob3J0Y3V0 38215
IFJlc29sdXRpb24= 38216
IHN1cGVydmlzaW9u 38217
IEFzaGxleQ== 38218
VHJhY2tpbmc= 38219
dWxhdG9yeQ== 38220
YW5kZWw= 38221
aXN0ZW4= 38222
IHVucmU= 38223
KGRpZmY= 38224
QU5UUw== 38225
IHJpZGVy 38226
IHPEhQ== 38227
LlNlcmllcw== 38228
X29yZGVycw== 38229
T1JJWk9OVEFM 38230
IHJldGVudGlvbg== 38231
44CCPC8= 38232
LlRlc3Rz 38233
U3lu 38234
LnBhcnNlRG91Ymxl 38235
a29kZQ== 38236
emVudA== 38237
R2VuZXJhdGlvbg== 38238
IGFkbWl0cw== 38239
IExlYWs= 38240
IGFrYQ== 38241
Uk9XUw== 38242
IEFuZ2VsYQ== 38243
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 38244
IG5vb24= 38245
IHN0YXJr 38246
IGRyYWdnZWQ= 38247
44O844I= 38248
IHJlY3ljbGVyVmlldw== 38249
IFNpbGljb24= 38250
X3N1ZmZpeA== 38251
Sm9u 38252
Y29jaw== 38253
IFByb2JhYmx5 38254
SW50cm9kdWN0aW9u 38255
IFRlcnJvcg== 38256
KFRoaXM= 38257
IEJhc2ViYWxs 38258
IGplbnRlcg== 38259
Y2hlc3RyYQ== 38260
Lm5hbg== 38261
PWc= 38262
IGNsYXJpZnk= 38263
eWlp 38264
cm9vdHM= 38265
IG5vdGVib29r 38266
IEV4Y2VwdA== 38267
IHJpc2Vz 38268
IEJydXNzZWxz 38269
YXRvcmllcw== 38270
LlVTRVI= 38271
cm9zc292ZXI= 38272
L3VwbG9hZA== 38273
IEV2ZW50dWFsbHk= 38274
Q29uc2lkZXI= 38275
IEJvdW5k 38276
LmlkZW50aWZpZXI= 38277
KHVuaXR0ZXN0 38278
IGluZmVyaW9y 38279
IGNyYw== 38280
IGF1dGlzbQ== 38281
VUlBbGVydA== 38282
IEthdmFuYXVnaA== 38283
aW5lbWVudA== 38284
cXVldWVSZXVzYWJsZQ== 38285
U2tpbg== 38286
LmJhY2tlbmQ= 38287
LmdldFN0YXRl 38288
dW5kaW5n 38289
IHN1YmNsYXNz 38290
IHJlZmluZWQ= 38291
IGFubm95 38292
IHJuZA== 38293
RGlyZWN0b3I= 38294
IOuC 38295
YmVjY2E= 38296
bW9uZ29kYg== 38297
IENvbW1vbndlYWx0aA== 38298
QXo= 38299
IFRoaW5n 38300
IHJlY29t 38301
dW5pbmc= 38302
CWNvbg== 38303
CSAgICAK 38304
ZW1pY3M= 38305
ZWNk 38306
IGhvcm55 38307
QVRSSVg= 38308
IG1pc2xlYWRpbmc= 38309
IEJldw== 38310
L25vZGU= 38311
Y3N0ZGlv 38312
4Lin 38313
IGFkZGl0aW9ucw== 38314
cmly 38315
X3JlcXVlc3Rz 38316
IHJlY2hlcmNoZQ== 38317
c3R1ZGVudHM= 38318
X3Bvc2l0aW9ucw== 38319
ZXJ0ZXh0 38320
IEV2b2x1dGlvbg== 38321
YW5kZXo= 38322
IGRpc3R1cmI= 38323
a2V5dXA= 38324
IEJ1dGxlcg== 38325
LnJlYWRsaW5lcw== 38326
X3N0ZGlv 38327
IGJlZQ== 38328
IEFyY2hpdmVz 38329
IG5ldmVydGhlbGVzcw== 38330
VVJJVFk= 38331
IGRyb25lcw== 38332
dXJpdGllcw== 38333
IOKYhQ== 38334
Ij4NCg0K 38335
IGRpYWdvbmFs 38336
IENhbmNlbGxhdGlvblRva2Vu 38337
X0ludGVybmFs 38338
IHJ1aW4= 38339
LlF0 38340
b2NyYXRpYw== 38341
VGVs 38342
IEFuc3dlcnM= 38343
bWF0aWM= 38344
IHhw 38345
YXRlbQ== 38346
X2pvYnM= 38347
X2FueQ== 38348
IHNlbmlvcnM= 38349
IGxhbmRtYXJr 38350
IFFMaXN0 38351
IG1hbmV1 38352
b3RpZnk= 38353
LyI7Cg== 38354
L3NlcnZlcg== 38355
IFBoaWxvc29waA== 38356
dXRlbmFudA== 38357
KGlv 38358
aHo= 38359
IGF1dGhlbnRpY2F0ZWQ= 38360
ZHY= 38361
LUNvbXBhdGlibGU= 38362
T3JpZ2luYWxseQ== 38363
LGZ1bmN0aW9u 38364
44CCDQo= 38365
IFJlcHJlc2VudGF0aXZl 38366
YXNpbHk= 38367
aXJjdWl0 38368
LmR0 38369
KG1hdGg= 38370
Lk1hcnNoYWw= 38371
Wyw= 38372
IENpdGllcw== 38373
X3R1cm4= 38374
fCkK 38375
IGNhbnRpZGFk 38376
YWx0ZXI= 38377
CXVp 38378
IE5lYnJhc2th 38379
IHNraXJ0 38380
LmJn 38381
U2hhcmVkUHJlZmVyZW5jZXM= 38382
KHN0eWxl 38383
IGdyaWVm 38384
Z2V3 38385
IHNhZmVn 38386
b2xhbmc= 38387
X2xpc3Rz 38388
7Js= 38389
IGdyYW5pdGU= 38390
IGhvdHRlc3Q= 38391
LmpkYmM= 38392
LkN1c3RvbWVy 38393
IOKJpA== 38394
IHdhYXI= 38395
X3NjZW5l 38396
Kycv 38397
IEpUZXh0RmllbGQ= 38398
IHNlYXRpbmc= 38399
IHdlYXJz 38400
IGAv 38401
Q2FzZXM= 38402
IFlvdXR1YmU= 38403
xLFt 38404
IGJhbGNvbg== 38405
LEc= 38406
TWV0YURhdGE= 38407
LXByaWNl 38408
U0NS 38409
VW5pdHk= 38410
IHRydW5r 38411
PXtgJHs= 38412
IGVhcnRocXVha2U= 38413
UGFydGlhbA== 38414
IHN1YnN0 38415
IGVsaW1pbg== 38416
PSInLg== 38417
Ly8qW0A= 38418
IHN1cGVydmlzb3I= 38419
dnJvbGV0 38420
X2FydGljbGU= 38421
IHBhbmU= 38422
Ymlv 38423
IG1vdG9ycw== 38424
Tk0= 38425
RnJhbms= 38426
IG9uaW9u 38427
LXdvcmQ= 38428
SXRlbUNsaWNrTGlzdGVuZXI= 38429
IGJyaXQ= 38430
ZW5kZW5jaWVz 38431
Q29tcHV0ZXI= 38432
X3J1bm5pbmc= 38433
KGRheQ== 38434
LWhl 38435
KG5hbWVk 38436
IFNhY2g= 38437
0L7Rhw== 38438
Y2FtcGFpZ24= 38439
LkFic3RyYWN0 38440
KHdyYXBwZXI= 38441
LnBheQ== 38442
IHV3 38443
R2Vv 38444
cmFpbHM= 38445
L3NlbGVjdA== 38446
aWNodGU= 38447
c29ucw== 38448
RVZFTlQ= 38449
IGFsaW1lbnQ= 38450
UHJvdmlkZXJz 38451
QXdhaXQ= 38452
X0lOVEVSVkFM 38453
Lm9mZg== 38454
IGdsdXRlbg== 38455
X2Nsb3Vk 38456
IHdlbg== 38457
LmV4dHJhY3Q= 38458
CWJ1dHRvbg== 38459
L01N 38460
UGFydHk= 38461
IGRlbW9ncmFwaGlj 38462
X2Vycm5v 38463
IGhpa2luZw== 38464
KCcnKQo= 38465
IixAIg== 38466
IHdpdA== 38467
csOh 38468
b2xvZ2ll 38469
IFN0eWxlcw== 38470
IEJyb3dzZXJNb2R1bGU= 38471
LlJlcXVlc3RNYXBwaW5n 38472
aWNhbnM= 38473
UEFHRQ== 38474
Y3JlYXRpb24= 38475
IEZlcmd1c29u 38476
dWRlZA== 38477
bnVtYmVycw== 38478
IEdUSw== 38479
IHByZXNlbnRhdGlvbnM= 38480
IEJvYmJ5 38481
X3NwYW4= 38482
ZXN0eWxl 38483
IGlsbGVnYWxseQ== 38484
YWJlbGE= 38485
IGJhdHRsZWZpZWxk 38486
Y2FwYWNpdHk= 38487
dGVycm9y 38488
XSIpOwo= 38489
IHdhcnJpb3I= 38490
bGVhZGVy 38491
IERCRw== 38492
IFJldmVudWU= 38493
IHZpZ2ls 38494
IGNvdW50ZXJwYXJ0cw== 38495
KEVycm9y 38496
QUNURVI= 38497
IGhlZWZ0 38498
IHNlbGVjdGlvbnM= 38499
emV1Zw== 38500
dG9t 38501
LXR3bw== 38502
LjsK 38503
X3N0YXRlbWVudA== 38504
IEFpZA== 38505
IFZ1bA== 38506
X3JnYg== 38507
IHByaXplcw== 38508
IGVkaXRhYmxl 38509
CWZvcm0= 38510
xLFuxLE= 38511
LmRlY29y 38512
RGVtbw== 38513
bGljZXM= 38514
IGVuY3R5cGU= 38515
cmF0dWxhdGlvbnM= 38516
IFJPUw== 38517
X2NoYXJz 38518
IEphaHI= 38519
cGFydGlhbA== 38520
0YPRgg== 38521
IFJlY2VpdmU= 38522
IExhbmRz 38523
QVBURVI= 38524
IGNob3BwZWQ= 38525
Li4i 38526
IEFuYWx5 38527
IFVJRA== 38528
IFJhZGVvbg== 38529
IEJlZQ== 38530
IHVubQ== 38531
Pk0= 38532
LmZpbmRhbGw= 38533
VG9rZW5pemVy 38534
IFdIQVQ= 38535
IHNq 38536
RHJhd2luZw== 38537
RXNz 38538
T05E 38539
irY= 38540
KHBhY2tldA== 38541
4oCUYnV0 38542
SW52b2NhdGlvbg== 38543
IE51Y2xlYXI= 38544
PzsK 38545
IGdyYW5kZXM= 38546
IENyeXB0 38547
cmVtYXJr 38548
ICcuLi8uLi8uLi8uLi8= 38549
IGluYWJpbGl0eQ== 38550
bWFnaWM= 38551
Y2F0cw== 38552
IHNpbXVsYXRl 38553
OiR7 38554
aW5mbGF0ZQ== 38555
IGVuZXI= 38556
Ok5P 38557
aXBsZXM= 38558
IG1lcml0 38559
IFJhdGVk 38560
IGdsdWU= 38561
L2Jsb2c= 38562
IGdyZW4= 38563
IHRocmlsbGVk 38564
LkNI 38565
dW5jYW4= 38566
IFBSSU1BUlk= 38567
IHBlcnNlYw== 38568
IGZlYXJlZA== 38569
Lk1JTg== 38570
IFRoZWF0ZXI= 38571
6ZI= 38572
YXRlZ29yaWU= 38573
5q61 38574
IGFwcGV0aXRl 38575
c3F1YXJl 38576
IEFsZXhhbmQ= 38577
LlVzZXJJZA== 38578
X2d0 38579
X2VudGVy 38580
IGdyYWR1YXRlcw== 38581
RnJhZ21lbnRNYW5hZ2Vy 38582
QXV0aG9yaXpl 38583
LU5MUw== 38584
KE15 38585
IHRyaXVtcGg= 38586
dXN0aW5n 38587
X1BBUkFNUw== 38588
Q2hhcmFjdGVycw== 38589
KDosOiw= 38590
X0JVSUxE 38591
TUh6 38592
IHdhc2hlZA== 38593
IHVuY2xl 38594
U3RldmU= 38595
YXJkb3du 38596
PHN0ZGlv 38597
X3Rlcm1z 38598
IE1BUg== 38599
IGhvc2U= 38600
dWN1cw== 38601
IENsYWlt 38602
IFJhbXM= 38603
IG1vZGVsQnVpbGRlcg== 38604
IG7DqQ== 38605
dXNlcklE 38606
PWpzb24= 38607
LlJlc3BvbnNlV3JpdGVy 38608
mOiupA== 38609
IGdydXBv 38610
LWl0 38611
IEtP 38612
LU1haWw= 38613
IGNvbmZlcmVuY2Vz 38614
SUZB 38615
IEFzc2Fk 38616
IHByb25vdW5jZWQ= 38617
IGFuY2VzdG9ycw== 38618
IFRSQUNF 38619
IEdlRm9yY2U= 38620
IHByaXZhdA== 38621
cGVsbA== 38622
ZW1vamk= 38623
INmI 38624
R2VucmU= 38625
IGNvbmNlbnRyYXRlZA== 38626
amFuZw== 38627
TU9URQ== 38628
IFpvb20= 38629
dG9vbGJhcg== 38630
IHV0dGVybHk= 38631
IGVuY29tcGFzcw== 38632
IFNvY2Nlcg== 38633
IGV1cm9wZQ== 38634
LWFpcg== 38635
LmFuaW0= 38636
X0NUTA== 38637
aGVyZW50 38638
cmV4 38639
aW50ZXJhY3RpdmU= 38640
44Gn44GZ 38641
IEthcw== 38642
IGRlc3BlcmF0ZWx5 38643
KGFy 38644
IGJpaw== 38645
IHRyYXZlcnNl 38646
ZXVycw== 38647
UmVjeWNsZXJWaWV3 38648
IE1hcmdhcmV0 38649
IGhvcGVmdWw= 38650
IE1pZw== 38651
X01FTUJFUg== 38652
cmVjZWl2ZXI= 38653
TWF0Y2hlcg== 38654
ZGVwZW5kZW50 38655
IGV4Y2VsbGVuY2U= 38656
0LDQtg== 38657
TE9T 38658
QXNwZWN0 38659
IGFkYWxhaA== 38660
IEVjb25vbXk= 38661
dWxvdXNseQ== 38662
IGV2YWx1YXRpbmc= 38663
IGRldmlhdGlvbg== 38664
ZXh0ZXI= 38665
L2RhdA== 38666
Q29scw== 38667
IFBva2Vy 38668
Ym9hcmRpbmc= 38669
LkNoaWxkcmVu 38670
QU5HTEU= 38671
w68= 38672
IFlvZ2E= 38673
IGhhdGVk 38674
QWRhbQ== 38675
IEZDQw== 38676
SU1BTA== 38677
IGZhaW50 38678
X0RJU1BMQVk= 38679
IGV2b2x2ZQ== 38680
IGZyaWRnZQ== 38681
IHLDqWc= 38682
IGVtb3Rpb25hbGx5 38683
4oCcSWY= 38684
YXdlaQ== 38685
ZXJlc2E= 38686
Jywi 38687
QkVHSU4= 38688
IFZBUkNIQVI= 38689
IHhp 38690
ZmFjdG9y 38691
dHo= 38692
X3BoYXNl 38693
U0VR 38694
KHJhbmQ= 38695
IG1hdGhlbWF0aWNz 38696
IGNvbnRleHRz 38697
LWFj 38698
IEZJRw== 38699
IENhcHRpb24= 38700
IFdhaXRGb3I= 38701
LXdlc3Q= 38702
IGZpcmVmaWdodA== 38703
X0xFRA== 38704
ZWN0aW9ucw== 38705
CXRocm93cw== 38706
IFRha2Vz 38707
b2JyZQ== 38708
IEF2YXRhcg== 38709
IElubm92YXRpb24= 38710
IGNhbGlicmF0aW9u 38711
OnRoaXM= 38712
X2VuY29kaW5n 38713
IGNhbGN1bGF0aW5n 38714
ICMjIyMjIyMjIyMjIyMjIyM= 38715
IFByb2dyYW1z 38716
IEhJR0g= 38717
LmNvbmZpZ3VyZVRlc3RpbmdNb2R1bGU= 38718
UG9seWdvbg== 38719
X0RCRw== 38720
Il0sDQo= 38721
0LDQsQ== 38722
IHNpbWlsYXJpdHk= 38723
IHByemV6 38724
IEZpcm0= 38725
IG1pc3VuZGVy 38726
IE1vdmluZw== 38727
IE1PVg== 38728
IHJlYWN0b3I= 38729
UmVxdWVzdGVk 38730
ZXhwZWN0cw== 38731
IGVyZWN0 38732
bGljaHQ= 38733
b3VsZGVy 38734
SURHRVQ= 38735
IGRldmls 38736
IHByb2dyYW1tZXM= 38737
IENvbW1vbk1vZHVsZQ== 38738
ICInIg== 38739
KEF1dGg= 38740
44CC77yM 38741
IFN0YXRlZnVsV2lkZ2V0 38742
6K6h 38743
L29wZW4= 38744
aW5hbGx5 38745
LlJvdW5k 38746
IFdpc2g= 38747
IGh1bWFuaXRhcmlhbg== 38748
QWNjZXNzVG9rZW4= 38749
IFNPQw== 38750
IHBva2Vtb24= 38751
IHZhcG9y 38752
X2FkZGVk 38753
CUdldA== 38754
c3BlbGw= 38755
IEluaXRpYXRpdmU= 38756
IEhFTA== 38757
YWlycm8= 38758
YmxlZA== 38759
INCx0Ys= 38760
IHNlbnNpYmxl 38761
IEx1YQ== 38762
fCgK 38763
IGZpeHR1cmVz 38764
IG9yZ2FzbQ== 38765
Q3V0 38766
dWt0 38767
Z3Vl 38768
IGNyZWRpYmlsaXR5 38769
OmltYWdl 38770
IENQUA== 38771
LnNu 38772
KGRlc2M= 38773
IFJlaWQ= 38774
LWRlZ3JlZQ== 38775
X3NvdW5k 38776
Q2xvbmU= 38777
4buZ 38778
YWtzaQ== 38779
PiR7 38780
X2NvbmZpcm1hdGlvbg== 38781
IHRyb3BoeQ== 38782
V29ya3M= 38783
IEVsZWN0cm9uaWNz 38784
IE1lZGl0ZXJyYW5lYW4= 38785
X21ldHJpY3M= 38786
IGFubm91bmNpbmc= 38787
IERBWQ== 38788
X3Byb3Rv 38789
IHBlYXI= 38790
YmFzZVVybA== 38791
CQkJCQkJCQkK 38792
IGNvb3JkaW5hdGlvbg== 38793
Ok4= 38794
LmFuaW1hdGU= 38795
IENvdHRvbg== 38796
X2hpdA== 38797
4pw= 38798
IGpldHp0 38799
aWZ0ZXI= 38800
KGZpZWxkcw== 38801
b3dubG9hZA== 38802
aWZpY2FjaW9u 38803
LmN1ZGE= 38804
IExpdQ== 38805
PmVxdWFscw== 38806
IEFjZQ== 38807
0YDQsNC8 38808
IFN1cGVybWFu 38809
IEdhcmNpYQ== 38810
IGFycmVzdHM= 38811
YWdhcg== 38812
IHt9KQ== 38813
IG1hY3Jvcw== 38814
cm91cGU= 38815
w6p0cmU= 38816
IHR3aXN0ZWQ= 38817
c3RydW1lbnRz 38818
Xygi 38819
X3ZlcnRpY2Vz 38820
IFRyYW5zaXRpb24= 38821
0LjQug== 38822
W21heA== 38823
bWluZA== 38824
IGFjY2Vzc1Rva2Vu 38825
IHVubGU= 38826
bXVz 38827
Y29w 38828
IEZhY3Rvcg== 38829
IGNvbmNlZA== 38830
IHJldHI= 38831
LmxpbmFsZw== 38832
LXNsaWRlcg== 38833
b2Js 38834
X1N0YXRpY0ZpZWxkcw== 38835
IHpvbWJpZQ== 38836
c2VsbGluZw== 38837
IGNoYXA= 38838
IHNoYWtpbmc= 38839
IFRyYW5zbGF0ZQ== 38840
IEFtc3RlcmRhbQ== 38841
IEVUSA== 38842
X0VYVEVSTg== 38843
a2Q= 38844
X2Rpc2M= 38845
IHByZWNlZGluZw== 38846
IHByaXg= 38847
T2JqZWN0TmFtZQ== 38848
X21vZGlmaWVk 38849
YXJkd2FyZQ== 38850
ID8+Ij4= 38851
IERX 38852
YCR7 38853
ID8+Ij48Pw== 38854
dXllbg== 38855
IGRvbm5h 38856
IHhzaQ== 38857
ICQiew== 38858
IERyYXdpbmc= 38859
LG5pbA== 38860
IG9uZGVy 38861
Qkc= 38862
T2JzZXJ2 38863
IGNvbnNpZGVyYXRpb25z 38864
Ym9hdA== 38865
IEJhbmtz 38866
IGluZGljdA== 38867
LEk= 38868
IEJsdQ== 38869
KHZlcnNpb24= 38870
Y2xpZW50ZQ== 38871
b2xhbg== 38872
TEVTUw== 38873
YXNzZXJ0U2FtZQ== 38874
X3ZvaWQ= 38875
IFdBUw== 38876
CWVudW0= 38877
IG1peGVy 38878
RVc= 38879
YWZmZQ== 38880
IGJsb3dqb2I= 38881
dGV4dEZpZWxk 38882
IGltbWVuc2U= 38883
X3JlcG8= 38884
IGdsb2JhbHM= 38885
YW50YWdlcw== 38886
LnRvZGF5 38887
VGh1cnNkYXk= 38888
IEJyaWc= 38889
e30pCg== 38890
IEltYWdpbmU= 38891
KEdQSU8= 38892
IGVzdG8= 38893
IFByb3ZpbmNl 38894
IE1lbnRhbA== 38895
X2NlbGxz 38896
IEp1bGlhbg== 38897
LlNjcmVlbg== 38898
IGNhbmRsZQ== 38899
IG1vbmRl 38900
IHZlcmc= 38901
aXRlcmFscw== 38902
LWxheW91dA== 38903
R3Vlc3Q= 38904
IHZpbmQ= 38905
IEVjaG8= 38906
Jyl9 38907
IG1hbm4= 38908
X0JPT0xFQU4= 38909
aGFw 38910
IG5pZ2h0bWFyZQ== 38911
VUdI 38912
IG5vbmV0aGVsZXNz 38913
IGF0aGU= 38914
IEhvbGxhbmQ= 38915
IEJvcm4= 38916
XE9STQ== 38917
YW51dA== 38918
X2xldmVscw== 38919
IHBldGl0ZQ== 38920
LWFydA== 38921
X1NIT1c= 38922
bnVtYmVyT2Y= 38923
X3RodW1ibmFpbA== 38924
YW1pbnM= 38925
IERlZmluZXM= 38926
ICI9 38927
LlN0YXR1c0NvZGU= 38928
IGRpZ25pdHk= 38929
IEJpa2U= 38930
Lk5ld0xpbmU= 38931
IEdsYXM= 38932
KGxvZ2dlcg== 38933
IGNhdGNoZXM= 38934
dm90ZXM= 38935
IGV4YW1pbmluZw== 38936
L3JlZ2lzdGVy 38937
IHNwZWNpZnlpbmc= 38938
X2ZpeGVk 38939
IGRyYXdpbmdz 38940
VGhyZXNob2xk 38941
QXg= 38942
IEFyY2hpdGVjdHVyZQ== 38943
KHBpZA== 38944
V2lyZQ== 38945
KGNvbnQ= 38946
bGFuZQ== 38947
TGlzdHM= 38948
IHNwcmludA== 38949
IGdyYW5kZmF0aGVy 38950
X0FH 38951
IHNjaGVkdWxpbmc= 38952
Q0xVUw== 38953
YXR1cml0eQ== 38954
IGxvY2tpbmc= 38955
W3NpemU= 38956
X3N0eWxlcw== 38957
IHdi 38958
LS0+Cgo= 38959
IHNwaW5uaW5n 38960
X3BlbmRpbmc= 38961
TWF0Y2hlcnM= 38962
LktleXM= 38963
IFBW 38964
ZW51cw== 38965
YW50aXM= 38966
IGRpc2NhcmQ= 38967
IGhhdWw= 38968
IGVtcGly 38969
IHBhdGh3YXk= 38970
IG9haw== 38971
0LzQtdC9 38972
LWluZHVjZWQ= 38973
IGltcGFpcg== 38974
IENhbGdhcnk= 38975
LmlzSGlkZGVu 38976
ZHo= 38977
X2luY2x1ZGU= 38978
IGdt 38979
ICcoJw== 38980
UFk= 38981
dWdnZXN0aW9ucw== 38982
IGNvbW1vZGl0eQ== 38983
Y3Jv 38984
L3N1Yg== 38985
IGdldEluc3RhbmNl 38986
IExlZ2FjeQ== 38987
IEtpbA== 38988
QmFs 38989
KHNob3J0 38990
SW5mb3Jt 38991
K3g= 38992
KnI= 38993
IEhvcGVmdWxseQ== 38994
b3JhdGU= 38995
IG1hY2hlbg== 38996
IHRyZWF0eQ== 38997
IE9yaQ== 38998
LnB1YmxpYw== 38999
LWhvcml6b250YWw= 39000
IHRhY3RpYw== 39001
IGJvcmQ= 39002
d2FyZXM= 39003
IGFtbW8= 39004
IExpc3Rz 39005
IGVxdWF0aW9ucw== 39006
L2hlcg== 39007
IE5TVw== 39008
Qm91bmRpbmc= 39009
X0NvbGxlY3Rpb25z 39010
IGF2YWls 39011
LkRyb3BEb3du 39012
6LA= 39013
IGho 39014
IGzDoA== 39015
LnBi 39016
IG1lbW9yaWFs 39017
IEFUVFI= 39018
IGV4aGF1c3RlZA== 39019
IHRzcA== 39020
CXJlZGlyZWN0 39021
IGxpa2V3aXNl 39022
U1RFUg== 39023
TGphdmE= 39024
IGNvbmRlbW5lZA== 39025
b2NhdXN0 39026
KHN0cmljdA== 39027
IGV4ZW1wdA== 39028
IHNtcw== 39029
IGV4YWdnZXI= 39030
U1lT 39031
IGxvdW5nZQ== 39032
Ol4= 39033
IHRvZGQ= 39034
ZGVi 39035
YXRvcmlhbA== 39036
IFBvcnRlcg== 39037
IHR1aXRpb24= 39038
IGV4ZW1wbA== 39039
IHBhcmVu 39040
LmxpbmVUbw== 39041
IGtpZG5leQ== 39042
IMOnYQ== 39043
IGN1aQ== 39044
77yM6K+3 39045
WEM= 39046
IG1vxbw= 39047
IG5vbWluYXRlZA== 39048
bHVuZw== 39049
SW1HdWk= 39050
IEJ1eno= 39051
IHN0ZXJlbw== 39052
cG9ydGFs 39053
cmVzYXM= 39054
IGtsYXNz 39055
IGRyYWZ0ZWQ= 39056
IHByb2plY3RpbGU= 39057
L2dwbA== 39058
KHBhcmFtZXRlcnM= 39059
KikK 39060
IGFzc2lzdGVk 39061
IE5TSW50ZWdlcg== 39062
c2l0ZW1hcA== 39063
Om50aA== 39064
LlZpZXdz 39065
LkFyZ3VtZW50UGFyc2Vy 39066
IG1lZXI= 39067
emllcg== 39068
IERpZw== 39069
PD89JA== 39070
X3Blcm1pc3Npb24= 39071
CUFkZA== 39072
b2xvZ2lh 39073
IHNjaQ== 39074
IGZpbmFuY2lhbGx5 39075
IHNjcm9sbGluZw== 39076
LmRpc3Q= 39077
X0hBUw== 39078
dWJ1bnR1 39079
LnBhZ2Vz 39080
SW5jcmU= 39081
YnVyc2U= 39082
IEFtYXRldXI= 39083
5rqQ 39084
QmxvYg== 39085
IGNob2xlc3Rlcm9s 39086
REVT 39087
bWluaW11bQ== 39088
IHJlZnVzaW5n 39089
dW5uZWQ= 39090
0Jw= 39091
IFJE 39092
LlNlcnZsZXQ= 39093
ICovOwo= 39094
dWRkZW4= 39095
IHZpZXdCb3g= 39096
IG1ldGFib2xpc20= 39097
IHN0ZWFsaW5n 39098
IEJldmVy 39099
YWduZXRpYw== 39100
VkVSUklERQ== 39101
X0FVRElP 39102
0YDRiw== 39103
IGFyY2hpdmVz 39104
LmxpbmVhcg== 39105
PXs8 39106
dW5jYXRlZA== 39107
QWNjZXNzRXhjZXB0aW9u 39108
IHBpY3R1cmVCb3g= 39109
CXNlbGVjdA== 39110
TGF0aXR1ZGU= 39111
dmlzb3I= 39112
cmVpYg== 39113
IHBhaw== 39114
SG9wZQ== 39115
IEl0ZXJhYmxl 39116
LnJlc3BvbnNlVGV4dA== 39117
IFF1YWQ= 39118
IEJyb29rcw== 39119
IFRvdA== 39120
T1BU 39121
ZWxvbmc= 39122
IGNvY2FpbmU= 39123
IGFubw== 39124
RGFu 39125
IHBzaQ== 39126
0LDQu9GM 39127
LmdldENoaWxk 39128
IFJFRg== 39129
LWFi 39130
IFRyaWFuZ2xl 39131
PFRleHQ= 39132
IENvbG9tYmlh 39133
aW5reQ== 39134
6Imy 39135
KX0+Cg== 39136
IHBsYWc= 39137
cGluZQ== 39138
IGJsYW5rZXQ= 39139
IDo8Lw== 39140
IFRyYW5zbGF0aW9u 39141
bm92 39142
IHBlcmZlY3Rpb24= 39143
IENvbmZlZGVy 39144
LnN0dWI= 39145
LkludGVyb3BTZXJ2aWNlcw== 39146
LlN0b3Jl 39147
IGVucm9sbG1lbnQ= 39148
IGRlZXI= 39149
TW92ZW1lbnQ= 39150
LWZyb20= 39151
aGM= 39152
IGV2YW5nZWw= 39153
IElsbHVzdHI= 39154
IHRydW1w 39155
X1N0YXJ0 39156
cGxhbmVz 39157
IEJpbA== 39158
SW5mb3M= 39159
LXRyYW5z 39160
IHJhbmNo 39161
IExpbmRh 39162
X21hcg== 39163
UkVU 39164
L25ldA== 39165
TGF3 39166
TkY= 39167
IFByZXZlbnQ= 39168
IGNyaWVk 39169
IGVkdWNhdGU= 39170
YXN0aWNz 39171
eWk= 39172
LkxpbmVhckxheW91dA== 39173
TUVUSE9E 39174
IEVn 39175
bWFwcGVy 39176
5pmC 39177
LmFzYXJyYXk= 39178
z4E= 39179
acOnw6Nv 39180
UmV1c2U= 39181
X3Jldg== 39182
IFBST0RVQ1Q= 39183
X0NvZGU= 39184
ICAgICANCg== 39185
IFNFUlZJQ0U= 39186
X2NvdmVy 39187
LiwK 39188
LkV4ZWN1dGVSZWFkZXI= 39189
IERpbmluZw== 39190
LmFyY2g= 39191
IG90cm8= 39192
IERpc2NvdmVyeQ== 39193
IEtleUVycm9y 39194
IEJlbmVmaXRz 39195
X1NIQQ== 39196
LlVubWFyc2hhbA== 39197
SEVBREVS 39198
TXV0ZXg= 39199
QU1B 39200
IGluaXRpYXRl 39201
U3RheQ== 39202
TGl0dGxl 39203
ICgpLA== 39204
IGRlY2VudHJhbA== 39205
UmVzb2x1dGlvbg== 39206
LmhlYWx0aA== 39207
CWZjbG9zZQ== 39208
5Lqk 39209
IHN0YWtlaG9sZGVycw== 39210
IGFyY2hhZQ== 39211
RGlnaXRhbA== 39212
bGVzY29wZQ== 39213
X3Blbg== 39214
IEl0ZW1TdGFjaw== 39215
IENhbm9u 39216
IEtlbmQ= 39217
IMO4 39218
X2FqYXg= 39219
aW5ncmVkaWVudHM= 39220
RGVsaXZlcnk= 39221
U2VjdGlvbnM= 39222
IGRpc2FwcG9pbnRpbmc= 39223
IEdyZW4= 39224
LHJl 39225
IGRlY3J5cHQ= 39226
b2xvZ2lj 39227
X2ZtdA== 39228
IFNsaWRlcg== 39229
bmFo 39230
V2FzaGluZ3Rvbg== 39231
enVuZw== 39232
INGG 39233
eWN6 39234
aWV2ZXM= 39235
LkRFQlVH 39236
IFRJ 39237
IGhhY2tpbmc= 39238
IGNlbnRy 39239
Zmxvd3M= 39240
IGRpZFJlY2VpdmVNZW1vcnlXYXJuaW5n 39241
IGFjY291bnRhYmlsaXR5 39242
Q09VTlQ= 39243
0LvQtdC80LXQvdGC 39244
Ymxv 39245
L2lk 39246
IFNsb3c= 39247
aXp6YXJk 39248
LnJlbW92ZUV2ZW50TGlzdGVuZXI= 39249
IOyehQ== 39250
L0k= 39251
aXNtYQ== 39252
IEh1ZHNvbg== 39253
fX0s 39254
dW1lZA== 39255
IHJlYWxpc2U= 39256
dW5zYWZl 39257
IHp1cw== 39258
IHNob3J0YWdl 39259
b2xpYQ== 39260
X3ByaW9yaXR5 39261
IGZsb29kaW5n 39262
b3BlcmF0aW9ucw== 39263
UG9seQ== 39264
YWJhbg== 39265
W2N1cg== 39266
IGVza29ydGU= 39267
X0RFU0NSSVBUSU9O 39268
X25hdA== 39269
IG1hbGljaW91cw== 39270
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 39271
IFBhcmtz 39272
IHRheHBheWVy 39273
IEZvc3Rlcg== 39274
IHNleHVhbGl0eQ== 39275
57O7 39276
67A= 39277
XA0K 39278
LnNlZWs= 39279
0LDQvdC40Y8= 39280
L2FydGljbGU= 39281
6L+H 39282
IFVocg== 39283
IGdyYW5kbW90aGVy 39284
IEJsZQ== 39285
ZnVydA== 39286
YW1iYWg= 39287
bm90aWZpY2F0aW9ucw== 39288
ZGVwcmVjYXRlZA== 39289
IHVpbnRwdHI= 39290
b2tp 39291
KEFycmF5 39292
IGF1dG9ub21vdXM= 39293
IG9icg== 39294
wq/Crw== 39295
IGJhc2VuYW1l 39296
IHVudmVpbGVk 39297
c29s 39298
IE5vdEltcGxlbWVudGVkRXJyb3I= 39299
IGRlcHJlc3M= 39300
XycuJA== 39301
IFVOSVQ= 39302
JScs 39303
LXRhZw== 39304
Z3JlcA== 39305
IE1haW50ZW5hbmNl 39306
IHdhcmZhcmU= 39307
X1JFU09VUkNF 39308
KHNwZWM= 39309
KGN2 39310
IG5hZGE= 39311
55S1 39312
IGNyb3dkZWQ= 39313
QmVsb3c= 39314
IFphY2g= 39315
RXN0YWRv 39316
X3ByaW1l 39317
IHRyYWJham8= 39318
IGluZm9ybWF0aXZl 39319
U2NvdHQ= 39320
IHNlcmlhbGl6ZXJz 39321
IE5hcw== 39322
VGh1bms= 39323
IG1lcmN5 39324
LC4uLgoK 39325
IGFkZGljdA== 39326
LmNvbnN0YW50cw== 39327
IGRhdGFmcmFtZQ== 39328
X3JlYXNvbg== 39329
Z29tZXJ5 39330
7Iq164uI64uk 39331
IG5lZ2xlY3Q= 39332
IExpbmVz 39333
IG1lbWI= 39334
X0VYRUM= 39335
YXNzYWdl 39336
IFlhcmQ= 39337
e30nLg== 39338
IGxvdHRlcnk= 39339
dGVpbg== 39340
X2NhbGM= 39341
aWt1 39342
X1JFQ09SRA== 39343
V2Fybg== 39344
IGhlYWx0aGllcg== 39345
dXJlbWVudA== 39346
IHlhcm4= 39347
IENvcm5lcg== 39348
KHppcA== 39349
KGluaXQ= 39350
IExpdA== 39351
SFc= 39352
c3Vic2V0 39353
IE1G 39354
RVRFUlM= 39355
X3JvdA== 39356
IGVyZQ== 39357
IE92ZXJyaWRl 39358
V2FsbGV0 39359
X3Jld2FyZA== 39360
IHNhZ2U= 39361
c2V0VmlzaWJsZQ== 39362
IEpzb25SZXNwb25zZQ== 39363
SUNZ 39364
6K+i 39365
VmFyQ2hhcg== 39366
YWF0 39367
LWdyZWVu 39368
IGlycQ== 39369
YW5pdHk= 39370
IHdob2V2ZXI= 39371
X3NoYXJl 39372
IGZvdXQ= 39373
cm9sbHM= 39374
IHdpbGxpbmduZXNz 39375
LmNvbXBvbmVudEluc3RhbmNl 39376
IGhvbm9yZWQ= 39377
dXJ2ZXk= 39378
QmVy 39379
IHJ1bm5lcnM= 39380
IGxpZXU= 39381
b3Jwb3I= 39382
X3N0cnVjdHVyZQ== 39383
QmFyQnV0dG9uSXRlbQ== 39384
YWR4 39385
IEJlbm5ldHQ= 39386
IGRpbGln 39387
IGZsdWN0 39388
SURERU4= 39389
X1NlbGVjdGVk 39390
KGRpdg== 39391
IHF1aWNrZXI= 39392
YWxvbmc= 39393
Z3JhcGhxbA== 39394
aW5leg== 39395
IGNpdGU= 39396
IEluc3RydWN0aW9ucw== 39397
IGluc2VydGluZw== 39398
LmNsb3VkZmxhcmU= 39399
Y291cG9u 39400
ZWRMaXN0 39401
IFN0b3Jlcw== 39402
X21hbGxvYw== 39403
56ym 39404
IEF3ZXNvbWU= 39405
IGxhbWI= 39406
UkVTVA== 39407
IGludGVzdA== 39408
IE5hdmJhcg== 39409
LmZlYXR1cmVz 39410
SW5jcmVtZW50 39411
IFBvbQ== 39412
IGluc3VmZmljaWVudA== 39413
X0xPR0lO 39414
UExFTUVOVA== 39415
IE9BdXRo 39416
LklORk8= 39417
IGV4b3RpYw== 39418
IENBU0U= 39419
CSAgCg== 39420
IEdhbmQ= 39421
dGhlc2Vz 39422
IG5vdm8= 39423
IERlbGw= 39424
4oCm4oCm4oCm4oCm 39425
X3NvZnQ= 39426
IGFncmVlaW5n 39427
Y2VudHM= 39428
bG9hbg== 39429
JyIsCg== 39430
IFJhbg== 39431
REVM 39432
IG9yZ2FuaXNlZA== 39433
K24= 39434
IEhlYWx0aGNhcmU= 39435
IGRldGVyaW9y 39436
IGltcGxlbWVudGF0aW9ucw== 39437
IGNhcm4= 39438
ICwn 39439
IExPQUQ= 39440
IHBsYW50ZWQ= 39441
5pyq 39442
Rm9ybUNvbnRyb2w= 39443
X21hdGNoZXM= 39444
IHBlcmlvZGlj 39445
X1Rv 39446
IEpvZWw= 39447
IGFua2xl 39448
IG1pbGl0YW50cw== 39449
IFdpdGNo 39450
dW5pZm9ybQ== 39451
dWVudGE= 39452
T2ZXZWVr 39453
IHBlcnBldHI= 39454
IGludGVydmVudGlvbnM= 39455
KHdyaXRlcg== 39456
YW50aW5l 39457
UHJvZ3Jlc3NCYXI= 39458
IGxlYWd1ZXM= 39459
Y29tcHJlc3M= 39460
aXppb25l 39461
IEVB 39462
Il09Ig== 39463
IFN0ZXBoYW4= 39464
bWludXM= 39465
c3N0cmVhbQ== 39466
X2xlZA== 39467
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 39468
IldoZW4= 39469
QWxyZWFkeQ== 39470
IGNvbnRlbXBs 39471
IGF0YXU= 39472
IENvbmdyZXNzaW9uYWw= 39473
IHJhcHBvcnQ= 39474
IEJvdXI= 39475
aXNoaQ== 39476
IHR5bQ== 39477
IEFybWVu 39478
INGA0LDQtw== 39479
LWZvcm1hdA== 39480
X1JlYWQ= 39481
KGNvbHVtbnM= 39482
IG5ldWU= 39483
X2JveGVz 39484
IFNhbmR5 39485
XywK 39486
IFdpemFyZA== 39487
IG9yZGVu 39488
IGZpbGVzeXN0ZW0= 39489
ZmxpZ2h0 39490
IHdzeg== 39491
YW5jZWxlZA== 39492
IGRhd24= 39493
IEdzb24= 39494
X3dhcm5pbmc= 39495
IEljZWxhbmQ= 39496
IHNsdXQ= 39497
IHNldElz 39498
X2lkZW50 39499
IG9mZnNob3Jl 39500
IFNrZXRjaA== 39501
OyU= 39502
IHRyaWJlcw== 39503
X1NQQUNF 39504
IG90cm9z 39505
Q29tcGlsZXI= 39506
CUVuZA== 39507
IF0pLAo= 39508
R3Jhdml0eQ== 39509
IHRlbnNpb25z 39510
IHNtb290aGx5 39511
S25vdw== 39512
b290aGluZw== 39513
IFN0YXJ0dXA= 39514
IEh5cA== 39515
IGFtYXpvbg== 39516
IFJlY2VpdmVk 39517
emVuaWU= 39518
654= 39519
IENob2NvbGF0ZQ== 39520
IMSw 39521
Ik5v 39522
IEFMUw== 39523
IFByb2dyYW1taW5n 39524
IERvZ3M= 39525
IGdvb2RuZXNz 39526
KGVycm5v 39527
L2Vz 39528
IHJlbW90ZWx5 39529
IEhvb2tz 39530
VXVpZA== 39531
IG92ZXJseQ== 39532
IOWQ 39533
IGdwdQ== 39534
IHN0aW11bHVz 39535
KHN0ZXA= 39536
LllvdQ== 39537
IGJpb20= 39538
SU5D 39539
LmJpdHM= 39540
KG1Db250ZXh0 39541
IGFtZXJpY2Fu 39542
IHRlcnJpdG9yaWVz 39543
IE5E 39544
XSIK 39545
IE1hcHBpbmc= 39546
IHByb2NlZWRpbmc= 39547
LmF4 39548
IHN1YnN0cmluZw== 39549
QlVUVE9O 39550
IEln 39551
LXBhbmU= 39552
IEFucw== 39553
IGdyYWR1YXRpb24= 39554
IHBlcnNwZWN0aXZlcw== 39555
TWl4aW4= 39556
X21pbnVz 39557
CQkJCSAgICA= 39558
IikpKQ== 39559
bm9ybWFsaXplZA== 39560
Lmxhc3ROYW1l 39561
IGNsYW4= 39562
QXNpYQ== 39563
KE1vdXNl 39564
cGFnaW5hdGU= 39565
IGdpZg== 39566
ZWxpZw== 39567
IHBvc3RlcnM= 39568
bmluZ3M= 39569
IM+E 39570
IGFwb3N0 39571
IElocmU= 39572
RGxsSW1wb3J0 39573
IEVxdWFs 39574
IGRpc3Rpbmd1aXNoZWQ= 39575
bmVhcG9saXM= 39576
IGJhY2tkcm9w 39577
IEFsdGVybmF0aXZlbHk= 39578
L21vZA== 39579
IGxlbmQ= 39580
IFNIT1c= 39581
X2NvZGVz 39582
IGF0w6k= 39583
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 39584
LWNhc2U= 39585
Y2h0ZQ== 39586
IGRvbmM= 39587
OmFkZA== 39588
TmVnYXRpdmU= 39589
ZmF2b3JpdGU= 39590
IGF0dHJhY3Rpb25z 39591
aW50Q29sb3I= 39592
IFBpcg== 39593
Q29ubmVsbA== 39594
TWFuaWZlc3Q= 39595
dGVhbXM= 39596
IH07CgoK 39597
IHBsdXJhbA== 39598
IG92ZXJ0aW1l 39599
IEV1cm9wYQ== 39600
IEJhbmdsYWRlc2g= 39601
KGFu 39602
IGxpbmd1 39603
aXRpbWU= 39604
aW5zdG9u 39605
LnNoYWRvdw== 39606
56iL 39607
IFVTUw== 39608
U2VydmVyRXJyb3I= 39609
SVZFUlM= 39610
IEppbg== 39611
IGh1bWJsZQ== 39612
YXV0b2xvYWQ= 39613
YXJleg== 39614
4oCy 39615
IEFzdHI= 39616
aWNvbG9u 39617
LlZpZXdNb2RlbHM= 39618
b2Jv 39619
IHN3aXBl 39620
IHJlY2Vzc2lvbg== 39621
6ZU= 39622
IOyY 39623
bmVyZw== 39624
aW5ncmVkaWVudA== 39625
bWFpbHRv 39626
IEZhbWU= 39627
UHJpbnRpbmc= 39628
UGl4ZWxz 39629
IEJhc2g= 39630
cG9zdGE= 39631
X0pP 39632
IGluZmFtb3Vz 39633
IExhbmM= 39634
KGxvY2FsU3RvcmFnZQ== 39635
LmJsaXQ= 39636
IHlvdW5nZXN0 39637
IGZpZWxkTmFtZQ== 39638
IGNvbnRpbmc= 39639
IHdvb2w= 39640
IEltR3Vp 39641
IE5TVA== 39642
LnByZWZpeA== 39643
VG9JbnQ= 39644
IFNveA== 39645
IGhhYml0YXQ= 39646
KCJ8 39647
PSciKw== 39648
SU5HVE9O 39649
X3dyYXA= 39650
dWNrZXRz 39651
IFdSSVRF 39652
IG1lZGljaW5lcw== 39653
IG1lbWJyYW5l 39654
IEpUZXh0 39655
IHJlcHJvZHVjdGlvbg== 39656
X3JlY2VpdmU= 39657
VGFibGVSb3c= 39658
cXVldWVSZXVzYWJsZUNlbGw= 39659
aG9va3M= 39660
IHJlbHlpbmc= 39661
IGRyaWxsaW5n 39662
X0ls 39663
KGV4Y2VwdGlvbg== 39664
IGR1cmFiaWxpdHk= 39665
IGhlc2l0YXRl 39666
IGNvbXBhcnQ= 39667
SUxJTkc= 39668
IEVsZGVy 39669
IGNhZmZl 39670
IGRldmVsb3Bz 39671
aXNoZXI= 39672
IHBseQ== 39673
IHRvbA== 39674
X1BMQVk= 39675
IGZyaWN0aW9u 39676
KGFsd2F5cw== 39677
IGluZGlnZW5vdXM= 39678
IE9wZXJh 39679
IENhbXB1cw== 39680
YW5jZW1lbnRz 39681
IGxpdHRlcg== 39682
LmxpbWl0 39683
KFRva2Vu 39684
ZW5pcw== 39685
IGhpZ2hsaWdodGluZw== 39686
IEF1Yg== 39687
IHZhbGlkYXRvcnM= 39688
LWhvc3Q= 39689
d2hlZWw= 39690
PHs= 39691
KSkr 39692
IE5ld3NsZXR0ZXI= 39693
X2F2ZXJhZ2U= 39694
IHNvZGl1bQ== 39695
IEhpbA== 39696
IE1pbGU= 39697
IEF1dGhTZXJ2aWNl 39698
U3RhdGlzdGljcw== 39699
IE51dHJpdGlvbg== 39700
IHNwb25zb3Jz 39701
b3ZlbmFudA== 39702
PT09PT09PT09PT09PT0= 39703
LkFic29sdXRl 39704
IGbDpQ== 39705
SGFuZGxpbmc= 39706
IC0tLS0tLS0K 39707
KGRpcmVjdG9yeQ== 39708
IikuCg== 39709
YW5vbA== 39710
LmJyb3dzZXI= 39711
IEdyaW5kaW5n 39712
IGNr 39713
RnJlcXVlbmN5 39714
KClbJw== 39715
QWRqdXN0 39716
Y3Jldw== 39717
YWZldHk= 39718
IGdu 39719
IHdpdmVz 39720
b29v 39721
IHByb3N0aXR1 39722
IG/DuQ== 39723
aWZ0eQ== 39724
IGxpdGlnYXRpb24= 39725
IEV6 39726
SmVmZg== 39727
LnBr 39728
IFNob2Vz 39729
Y29ybg== 39730
eXl2c3A= 39731
IGFkYXA= 39732
PXU= 39733
Q09ORg== 39734
QU5EQVJE 39735
IGVsZXZhdG9y 39736
YmlsbGluZw== 39737
IGNhbmQ= 39738
IGNhcnA= 39739
W2ZpZWxk 39740
LWxpYg== 39741
c2VxdWVudGx5 39742
Pi0= 39743
IGxjZA== 39744
LS0tLS0tLS0tLS0tLS0t 39745
KCIi 39746
IHRhY3RpY2Fs 39747
IFJvbmFsZA== 39748
ZXh0cg== 39749
IEZlc3Q= 39750
IGZ1ZXI= 39751
LW5hdmlnYXRpb24= 39752
IGti 39753
Z2hvc3Q= 39754
IGhhbmRsZUNoYW5nZQ== 39755
X2Nscw== 39756
KCkhPQ== 39757
Q29tcGFyYXRvcg== 39758
LnZt 39759
IENveA== 39760
X3Jldmlldw== 39761
L0A= 39762
X2Nvb2tpZQ== 39763
IHJlY29nbmlzZWQ= 39764
bGRhcA== 39765
VGhyZWFkcw== 39766
IFNleHVhbA== 39767
IEJlYXJpbmc= 39768
KFNRTA== 39769
IHhy 39770
IHRoaWdo 39771
VVJMQ29ubmVjdGlvbg== 39772
IFNVVg== 39773
IG1Db250ZXh0 39774
IGluY2lkZW5jZQ== 39775
IEVzdGU= 39776
LnN1cA== 39777
X3Rl 39778
KEVYSVQ= 39779
Q01E 39780
LyI+ 39781
QWxtb3N0 39782
IFVuZQ== 39783
IGFuZGVyZW4= 39784
IFNpbmdsZXRvbg== 39785
IGJvcmU= 39786
VGhpbms= 39787
IG5hcmM= 39788
XWluaXRXaXRo 39789
X3Nob3A= 39790
KHN0cmF0ZWd5 39791
IScs 39792
aGVyaXRz 39793
IERlc2s= 39794
X21hY2hpbmU= 39795
Lm5ldHR5 39796
xLFuZGE= 39797
PTw= 39798
IFFS 39799
IFNpZGViYXI= 39800
LnNwbGl0Q29udGFpbmVy 39801
IG9uU3VjY2Vzcw== 39802
IG1vbmtleQ== 39803
RW5qb3k= 39804
KG5vZGVz 39805
cGVjdHJ1bQ== 39806
ICgqKA== 39807
CVVJTlQ= 39808
LGhlaWdodA== 39809
IE5ldHdvcmtz 39810
LnRhaWw= 39811
LmxpbnNwYWNl 39812
ICIuLi4= 39813
TGlzdGVu 39814
xqE= 39815
LkNoYW5uZWw= 39816
LWRlZmluZWQ= 39817
UmVwZWF0 39818
YWRqdXN0 39819
RVJN 39820
X2FwcGxpY2F0aW9u 39821
LmFzc2VydE5vdE51bGw= 39822
LXN0cmVhbQ== 39823
IHJhYmJpdA== 39824
IHBvc2l0aW9uaW5n 39825
IHdva2U= 39826
IGZpbmc= 39827
IG11bHRpcGxheWVy 39828
IHJlZ2lzdGVyaW5n 39829
dW50aWw= 39830
w6Vu 39831
KDo6 39832
dXNzaW9ucw== 39833
IHBvdGF0bw== 39834
IEVxdWFscw== 39835
LlN1cA== 39836
L2FwYWNoZQ== 39837
ICg9 39838
LiIp 39839
LnB0cg== 39840
IFNwZWVjaA== 39841
LmNsaXA= 39842
IEdhYnJpZWw= 39843
IG11c2ljaWFu 39844
L2lzc3Vlcw== 39845
LnNob3A= 39846
IEhpZXI= 39847
X1JFVA== 39848
X2J1Y2tldA== 39849
44Oh 39850
YXZz 39851
IHJveg== 39852
Zmxvd2Vy 39853
V3JpdGVCYXJyaWVy 39854
IE1pbGFu 39855
IGxlZ2lzbGF0dXJl 39856
IERvbGw= 39857
IHByb3Zpbmc= 39858
LmNvbmNhdGVuYXRl 39859
4pWQ 39860
IGdjaGFy 39861
Y2RuanM= 39862
Ymxlcw== 39863
IExpc3Rpbmc= 39864
0LvQvg== 39865
LnhyTGFiZWw= 39866
IFNhaw== 39867
anVzdGljZQ== 39868
IFZhbGVudGluZQ== 39869
dW5sZXNz 39870
IHBpZ2Vy 39871
KHJ1bg== 39872
IHRlc3RpZmllZA== 39873
QU5B 39874
IFJlbW92ZXM= 39875
KSkpKTsK 39876
cmVjYXRlZA== 39877
IFJ1bnRpbWVNZXRob2Q= 39878
IGNvbnF1 39879
44Ki 39880
IHRpc3N1ZXM= 39881
YWlsZXI= 39882
w6l0w6k= 39883
LVN0YXI= 39884
IGZsYW1lcw== 39885
LnNldEljb24= 39886
IHN1cGVybg== 39887
IHZhZ2luYQ== 39888
LXZhcmlhYmxl 39889
IHdlbGxuZXNz 39890
Q1VS 39891
IGJlbGxl 39892
LmdldFJlcXVlc3Q= 39893
IHBvY28= 39894
YmVuaA== 39895
YWdlbnM= 39896
IHNwaWxs 39897
IEp1cg== 39898
IGRpc3BhdGNoZXI= 39899
0L3QvtCz0L4= 39900
ZW1vbmlj 39901
KGRpcm5hbWU= 39902
INCU 39903
IHBhc3Nl 39904
IGdhbno= 39905
cmljaW5n 39906
RVU= 39907
IG11amVyZXM= 39908
ZXNzZW4= 39909
LmF0dHJpYnV0ZQ== 39910
amo= 39911
CQkgCg== 39912
W14= 39913
IHN0cnRvbG93ZXI= 39914
bGV4ZXI= 39915
ZWN0YXI= 39916
aG90ZWw= 39917
LnNxdWFyZQ== 39918
IHJhbGw= 39919
IGxvd2VyZWQ= 39920
aGFuZGxlZA== 39921
TWFya2V0 39922
IFVzZXM= 39923
aXZhcw== 39924
LkJ1c2luZXNz 39925
44GX44Gm 39926
RElW 39927
IHdhc3RlZA== 39928
IGF2b2ly 39929
w6pt 39930
X0FDQ09VTlQ= 39931
LmV0 39932
CVNETA== 39933
a2Fw 39934
IGZveA== 39935
dXBwZXQ= 39936
e30sCg== 39937
Iiwn 39938
RmF2b3JpdGU= 39939
UEVORA== 39940
IEFFUw== 39941
fSks 39942
IGRlZHVjdGlvbg== 39943
IHBvbMOtdA== 39944
IGNvbXBvbmVudFdpbGw= 39945
IFRlbGVyaWs= 39946
X1NFTEY= 39947
IG11c2U= 39948
Q3JhZnQ= 39949
IGRlbnM= 39950
4KS/ 39951
KHRw 39952
IHRhc3R5 39953
IGJhbGFuY2Vz 39954
IGRlZGljYXRpb24= 39955
IFdhbGxhY2U= 39956
IHVubGF3 39957
XCI+XA== 39958
IG11bQ== 39959
LXVwZGF0ZQ== 39960
ZW1lbnRl 39961
IHNvZGE= 39962
UmVwdWJsaWM= 39963
YXNtaW5l 39964
w6lyaWM= 39965
KFN0YXR1cw== 39966
IEpzb25Db252ZXJ0 39967
IERpc2s= 39968
LlJlZGlyZWN0 39969
IGZpbG1pbmc= 39970
L21vbA== 39971
Um8= 39972
IHZpbGxl 39973
IHRyYWJhag== 39974
IHN5bnRoZXNpcw== 39975
cmVnYQ== 39976
IHJs 39977
U2NoZWR1bGVy 39978
SVNIRUQ= 39979
Y3VycmVudFVzZXI= 39980
KGVycm9ycw== 39981
J2g= 39982
X2JvdA== 39983
eGltbw== 39984
IFVTQVJU 39985
X3N1cGVy 39986
X0RFQ1JFRg== 39987
0L3QvtC5 39988
X1JPVw== 39989
IHByb21vdGVz 39990
IFRB 39991
IGhvcmFz 39992
IFJlcHJlc2VudHM= 39993
IG5hbWVvZg== 39994
IEV4Yw== 39995
IEdhcmFnZQ== 39996
IHNlaW5l 39997
LCM= 39998
IGhlcmI= 39999
L3Jlc291cmNlcw== 40000
IHBsZWFkZWQ= 40001
LnJhZGlvQnV0dG9u 40002
IOaY 40003
T3Bz 40004
IE5lc3Q= 40005
Y3N0cmluZw== 40006
IERlZmVuY2U= 40007
IHJlZmVyZQ== 40008
X2xlYWY= 40009
IHJldmVsYXRpb24= 40010
66c= 40011
LmV4ZWN1dGVVcGRhdGU= 40012
X1dPUkxE 40013
IGV4cGFucw== 40014
KCJcIg== 40015
amFi 40016
IGRvdWJ0cw== 40017
IEdlb21ldHJ5 40018
IGludHJvZHVjZXM= 40019
IHNlbmF0b3Jz 40020
IGNhbmFs 40021
LmhlbHBlcg== 40022
IEJpb2xvZ3k= 40023
X1NFTlM= 40024
LnByZXZpb3Vz 40025
LXRvdWNo 40026
YWJpdA== 40027
IGltcGFjdGVk 40028
IGJyYWNrZXRz 40029
LmRpcmVjdA== 40030
YWNjdW0= 40031
IHRlc3Rvc3Rlcm9uZQ== 40032
CWFjdGlvbg== 40033
IENoYW5jZQ== 40034
IHBlYWtz 40035
Q3BwQ29kZUdlbldyaXRlQmFycmllcg== 40036
IHVuYmVsaWU= 40037
X3ByZXNz 40038
LlJlbA== 40039
YW5nbGVk 40040
L3RlbXBsYXRlcw== 40041
LS0+DQo= 40042
bGltZQ== 40043
IHN1ZmZpY2llbnRseQ== 40044
X250 40045
RXhwYW5k 40046
LmlzZmlsZQ== 40047
IGlzRW1wdHk= 40048
IHF0 40049
IG11bGhlcg== 40050
YWNvYg== 40051
R2Vvcmdl 40052
5bi4 40053
IGFzc2lt 40054
YXNv 40055
IGNvbXByaXNlZA== 40056
T1Y= 40057
KENPTkZJRw== 40058
CXdyaXRlcg== 40059
IGRlc3A= 40060
IHRlbnVyZQ== 40061
KGNy 40062
LnBvb2w= 40063
IEJyZW5k 40064
IGNlbnNvcg== 40065
KHRpbWVvdXQ= 40066
IHBsZWE= 40067
LldyYXA= 40068
IHRpZ2h0bHk= 40069
IFdlcmU= 40070
IElnbm9yZQ== 40071
YWJlaQ== 40072
IGJyaWRnZXM= 40073
IGNvbmRlbW4= 40074
IHNpbXBsaWNpdHk= 40075
IHJvdXRpbmVseQ== 40076
IGJsYWNrcw== 40077
amI= 40078
IFBpdA== 40079
VXRm 40080
IC8K 40081
cmVsb2Fk 40082
IHNldE9iamVjdA== 40083
L2dsb2JhbA== 40084
IGZhdHR5 40085
IHNvY2tz 40086
Q291bGRu 40087
IGVyb3Rpc2s= 40088
5p2h 40089
IFByZXNzdXJl 40090
IE1heg== 40091
bnBvcw== 40092
dG9sb3dlcg== 40093
IEVR 40094
dXRldXI= 40095
IE1vbWVudA== 40096
IGV0YQ== 40097
e3stLQ== 40098
IGdyYXBocw== 40099
IEd1YXI= 40100
cmluZQ== 40101
KC0t 40102
IEh0dHBTdGF0dXM= 40103
KHN0dWRlbnQ= 40104
Km5w 40105
IHJhaWx3YXk= 40106
IGFzeW5jaHJvbm91cw== 40107
X3Zt 40108
J10sJw== 40109
LHRleHQ= 40110
bWVyY2hhbnQ= 40111
KEd1aWQ= 40112
IEdyYQ== 40113
aXhlcg== 40114
ZmV0Y2hBbGw= 40115
LmFkZExpc3RlbmVy 40116
ZmxpcA== 40117
KiQ= 40118
PigpLA== 40119
IHN1bmxpZ2h0 40120
YXNzaWduZWQ= 40121
IGFiYw== 40122
IENPTFVNTg== 40123
IPCfmYIKCg== 40124
KS4uLg== 40125
IGVuc2VtYmxl 40126
IG5ld2xpbmU= 40127
X1NJTkdMRQ== 40128
aWVkYWQ= 40129
IGRhcmtlcg== 40130
b3JtYXA= 40131
IGxpb24= 40132
cGxpdHM= 40133
IGlsbHVzdHJhdGlvbg== 40134
IElFRUU= 40135
IHZpc3Rh 40136
b3VzYW5kcw== 40137
KioqKioqKg== 40138
IFRvbW15 40139
IGh1ZQ== 40140
U2Vs 40141
IGF1cmE= 40142
IFRoZXJhcHk= 40143
IGFuaW1hdG9y 40144
LmNvbnN0cmFpbnRz 40145
IHZhZ3Vl 40146
KCIiKQ== 40147
IHZpbGxhaW4= 40148
IGJsZXNzaW5n 40149
IHN0cmluZ0J1aWxkZXI= 40150
IE1pc2M= 40151
IERJUg== 40152
ZmF4 40153
LW5vZGU= 40154
IFdhbGtpbmc= 40155
IEFV 40156
c2Vzcw== 40157
IGdyaWxs 40158
VkVSVElTRQ== 40159
IEZvb2Rz 40160
IHRvdXJuYW1lbnRz 40161
w5M= 40162
IE1hcnNo 40163
IHdvbmRlcnM= 40164
TG9uZ2l0dWRl 40165
LkNvbW1hbmRUZXh0 40166
PWlucHV0 40167
X2VuY29kZXI= 40168
cGFnZVNpemU= 40169
IGdldFN0YXRl 40170
Pj4K 40171
LmdyZXk= 40172
cG9k 40173
IHJlYWRpbmdz 40174
IHJlY29uc2lkZXI= 40175
U3RhcnR1cA== 40176
IGV4Y2Vy 40177
LmJhbGFuY2U= 40178
X2N5Y2xl 40179
X1RpbWU= 40180
TE9DQUw= 40181
IEVGSQ== 40182
IFJleW4= 40183
LnNldEZvcmVncm91bmQ= 40184
Ynlu 40185
IGRpc2Nvbm5lY3RlZA== 40186
QUNUSVZF 40187
IGVtYmVkZGluZw== 40188
aWNrZXJz 40189
IHN1cnJvdW5kaW5ncw== 40190
KmM= 40191
IGdhcmFudA== 40192
IGJm 40193
IHdpcGU= 40194
IOS4iw== 40195
X1RSQQ== 40196
YWRveA== 40197
55U= 40198
IHN1Y2tz 40199
IFNvbmdz 40200
IEFzc29jaWF0ZXM= 40201
IEJhbGQ= 40202
IEJyZXR0 40203
dmVuaWxl 40204
IHZ0 40205
IGluYWRl 40206
IHJlc2lnbmVk 40207
IEdsZW5u 40208
LnBhdHRlcm4= 40209
LkRhdGFCaW5k 40210
0YPQvA== 40211
TGF5b3V0SW5mbGF0ZXI= 40212
Y2hldA== 40213
IFRlc3RhbWVudA== 40214
Lm1z 40215
IHBhdg== 40216
IFJlYWN0RE9N 40217
dXJkeQ== 40218
QURBVEE= 40219
TXU= 40220
L2FjdGlvbnM= 40221
IEpz 40222
X2V4dHJhY3Q= 40223
IEJyaW5n 40224
Omlk 40225
c3RydA== 40226
aXZhdGlvbg== 40227
IG91dHJpZ2h0 40228
YXp1 40229
bG95bWVudA== 40230
0LjRjw== 40231
YWxkbw== 40232
IFB1Ymxpc2hlcg== 40233
RWR1Y2F0aW9u 40234
UGFsZXR0ZQ== 40235
X2Rydg== 40236
ICgkKA== 40237
IEFuZGE= 40238
IHJlbWVkeQ== 40239
IGluY29uc2lzdGVudA== 40240
dGVjdGlvbg== 40241
IHJlZ3VsYXRvcnM= 40242
IHNob3J0ZXN0 40243
KHBhaXI= 40244
IEluc3RhbGxhdGlvbg== 40245
IGRlZmVuZGFudHM= 40246
ICgpOw== 40247
LWxhcmdl 40248
TWVs 40249
IHRocmVhdGVu 40250
0L3Rjw== 40251
IGZldGlzaA== 40252
b3RpbmU= 40253
X2RpYw== 40254
IDwk 40255
IHN0YWdnZXI= 40256
c3Bp 40257
JHJlc3BvbnNl 40258
U2Vydg== 40259
LWJvcm4= 40260
am9z 40261
CWltZw== 40262
CVdIRVJF 40263
X2x0 40264
5b2T 40265
LmNvc3Q= 40266
IFR1ZQ== 40267
LmxhYmVscw== 40268
IExW 40269
d2Nzc3RvcmU= 40270
IEplc3Nl 40271
4Lir 40272
VHJhZGU= 40273
IHByZWRlY2Vzc29y 40274
64I= 40275
ZmluYWxseQ== 40276
X2dlbmVyYWw= 40277
b2dnbGVy 40278
X1JFR0lPTg== 40279
bmVtZW50 40280
IGJsb2dnZXI= 40281
IEhhcmJvcg== 40282
IERhdGFzZXQ= 40283
W3c= 40284
IGF0dGVuZGVlcw== 40285
Lmljbw== 40286
bWF4aW11bQ== 40287
LlVubG9jaw== 40288
X1NZTkM= 40289
w6FnaW5h 40290
IGRvd25z 40291
IFdpaQ== 40292
XSkv 40293
IGtpY2tpbmc= 40294
dW5pY2F0aW9u 40295
IERBQw== 40296
IElEUw== 40297
IFJlbnRhbA== 40298
IGN1cnJlbnRUaW1l 40299
IHZhY2NpbmVz 40300
IERldmls 40301
IG5vcnM= 40302
X21vdXNl 40303
dXJyZWN0aW9u 40304
KG5v 40305
ID4NCg== 40306
IGFnZ3Jlc3Npb24= 40307
IGJyZWVkaW5n 40308
LnN5bWJvbA== 40309
aW1hbg== 40310
QWJzb2x1dGVQYXRo 40311
IFdITw== 40312
X2ZsdXNo 40313
LXJvb3Q= 40314
YXJuYQ== 40315
Jk0= 40316
IGZhdGhlcnM= 40317
IFJvY2tldA== 40318
aXZlYXU= 40319
IHdhbmRlcg== 40320
IGNvbXBvcw== 40321
IFdhcnJpb3I= 40322
IFNlYXQ= 40323
IENsaW5pYw== 40324
X2ludm9pY2U= 40325
KGRpc3BhdGNo 40326
UHJvZHVjdG8= 40327
YXR1cmluZw== 40328
b3NzaWVy 40329
IE1BWQ== 40330
IGRhZ2dlcg== 40331
IHNhbml0aXplZA== 40332
IFJGQw== 40333
IHByb3Bo 40334
IHVyaW5l 40335
IGdyaW5k 40336
IEV4cGFuZGVk 40337
ZGVzY3JpcGNpb24= 40338
LWZ3 40339
IEtlcnJ5 40340
PW5hbWU= 40341
IGNoaw== 40342
IG5hdGlvbmFsbHk= 40343
IHRoZWU= 40344
SW5j 40345
ID8+Pg== 40346
LlJhZGlvQnV0dG9u 40347
Lkh0dHBTZXJ2bGV0UmVzcG9uc2U= 40348
L1k= 40349
CWZpZWxk 40350
IGhvbW1l 40351
eXBlcg== 40352
UGh5c2ljYWw= 40353
PXY= 40354
IGRyaXY= 40355
IEVycm9ycw== 40356
IGPEgw== 40357
RGVhdGg= 40358
IFdJTkRPVw== 40359
IHBvZXQ= 40360
IFNoYXJw 40361
IEltbXV0YWJsZQ== 40362
CWNyZWF0ZQ== 40363
IGdlaHQ= 40364
IFJlZm9ybQ== 40365
YWlzZXI= 40366
IEluaXRpYWxpemF0aW9u 40367
IGltbXVuaXR5 40368
LmNvbXBvc2U= 40369
IGxhdGVuY3k= 40370
IExlYmFub24= 40371
IFBhcmFk 40372
IGZ1ZWxz 40373
IEV4aGli 40374
Y29o 40375
JSI+Cg== 40376
IENMSQ== 40377
KWluaXRXaXRo 40378
LVph 40379
X0NMRUFS 40380
cmVnbg== 40381
IGZpbmFuY2Vz 40382
LnN0YW5kYXJk 40383
X0NBVEVHT1JZ 40384
LmxpYnJhcnk= 40385
IHRyYXZlbGVycw== 40386
X3dw 40387
IEV2YWx1YXRpb24= 40388
c3RhcnRpbmc= 40389
ICkpLAo= 40390
ZXBpc29kZQ== 40391
IFZhcmlhbnQ= 40392
IGRhZW1vbg== 40393
IEp1bGlh 40394
IE5S 40395
IGRvdWJsZXM= 40396
PHY= 40397
L3J1bnRpbWU= 40398
IGludGVycHJldGVy 40399
IElOREVY 40400
IEhvbG1lcw== 40401
X0RJTQ== 40402
IHBhZGRsZQ== 40403
X2V4YW1wbGU= 40404
IGZvcmVncm91bmQ= 40405
LnJvdXRlcw== 40406
IHNvd2ll 40407
U1VDQ0VTUw== 40408
IENEQw== 40409
IEJE 40410
Xy0= 40411
YXN1cmVk 40412
V3JpdGluZw== 40413
IGN1cnJlbnRQYWdl 40414
KGFuc3dlcg== 40415
IEFTQ0lJ 40416
4Kg= 40417
IHNvY2lhbGx5 40418
eXl5 40419
IFNwZWNpYWxpc3Q= 40420
KGN1c3RvbWVy 40421
aXN0YW5p 40422
a2VzdA== 40423
IE1haw== 40424
IHRobw== 40425
LnB0 40426
KGNvbW1lbnQ= 40427
IENvbnZlcnRlcg== 40428
Z2Ft 40429
Ymlucw== 40430
LnRlbGU= 40431
IFZldGVyYW5z 40432
X0FMTE9D 40433
0L7Qu9GM0LfQvtCy0LDRgg== 40434
aW5uYW1vbg== 40435
O3dpZHRo 40436
b2hs 40437
IGZhbnRhcw== 40438
IHN1bmc= 40439
CUs= 40440
KEpzb24= 40441
IG5laWdoYm91cmhvb2Q= 40442
IHZvdw== 40443
IHNpbnM= 40444
b25hY2Np 40445
IGVwb2Nocw== 40446
aW1hZ2Vu 40447
LkNoYW5nZQ== 40448
Lm15YmF0aXM= 40449
U2Vlaw== 40450
V0VS 40451
566h55CG 40452
IGludGVyZXNz 40453
X0V2ZW50 40454
ZWRlcmxhbmQ= 40455
IHRlcnJpdG9y 40456
IGNpdWRhZA== 40457
dWNrZWQ= 40458
IHNuYWNr 40459
IHRyYW5zcG9ydGVk 40460
IE1hbmlmZXN0 40461
IERBVA== 40462
X3RoZXRh 40463
IHdvbnQ= 40464
LgoKCgoKCgoKCgo= 40465
irbmgIE= 40466
IEVwaWM= 40467
RGVjaw== 40468
bHRyYQ== 40469
X1pFUk8= 40470
IFtdOw== 40471
L3NjcmlwdHM= 40472
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 40473
5oOF 40474
IHdlZWQ= 40475
TkJD 40476
IHJhcGVk 40477
IEdhdGV3YXk= 40478
W00= 40479
IFRpbWVvdXQ= 40480
ZW5jaG1hcms= 40481
LlZpZXdNb2RlbA== 40482
IHBvcm5vcw== 40483
IFlh 40484
dGhyaXRpcw== 40485
IEZseW5u 40486
IG1lZ2E= 40487
YWNpbg== 40488
IHRyaWJhbA== 40489
LmFwcGxl 40490
IEJsbw== 40491
w6Ju 40492
aWJp 40493
cm92 40494
IExpdmVz 40495
Xi4= 40496
Z2V0UmVxdWVzdA== 40497
IEVzdGFibGlzaA== 40498
Y29udGFpbmVycw== 40499
IHN0YXJyaW5n 40500
IGNlbGVicml0aWVz 40501
IFJlbGF0aXZl 40502
IEhlaWdodHM= 40503
IHRxZG0= 40504
IE5vcnRod2VzdA== 40505
aXZpYw== 40506
CWNs 40507
IGF1dG9tb3RpdmU= 40508
ZW50cmlj 40509
IGZvcnR1bmF0ZQ== 40510
IGZpcmVwbGFjZQ== 40511
c2V1ZA== 40512
bmlja25hbWU= 40513
O3M= 40514
X0NBTA== 40515
aGFsdA== 40516
KG5z 40517
X2RlbGV0ZWQ= 40518
RGV2ZWxvcG1lbnQ= 40519
bW92aWVz 40520
IGlkZW50aXRpZXM= 40521
IHByb21wdGx5 40522
2KfZhg== 40523
IGFudGU= 40524
ICInLCc= 40525
5Y+j 40526
aW1wc2U= 40527
IHlhcA== 40528
VHlwZU5hbWU= 40529
IGJpdGNo 40530
IGFzc29jaWF0ZXM= 40531
SEVNRQ== 40532
LWVtcHR5 40533
INiq 40534
b2x2ZXJz 40535
IHBpc3RvbA== 40536
U2NvcGVk 40537
YWduZXI= 40538
J109PSc= 40539
IElNUA== 40540
ZXhj 40541
IG9taXR0ZWQ= 40542
IG1pbmRzZXQ= 40543
IFtdKA== 40544
IG9ybg== 40545
X0NBTQ== 40546
QXZn 40547
TG9jYWxpemVkU3RyaW5n 40548
IE5hdHVy 40549
IGNvbXBvc2Vy 40550
IFBsYXlpbmc= 40551
IG92ZXJk 40552
X3V0Zg== 40553
LnNr 40554
IEZvbA== 40555
JHBhZ2U= 40556
LE9iamVjdA== 40557
IGJlZXM= 40558
YWxhcnk= 40559
YnVsbGV0 40560
X2xpYnJhcnk= 40561
T2ZmZXI= 40562
bG9jYXRlZA== 40563
IChfLA== 40564
4oCcSGU= 40565
IE93bmVycw== 40566
KSkuCg== 40567
IGJyaQ== 40568
LkFkbWlu 40569
a3Rpb24= 40570
0LvRjtGH 40571
IGVyb3RpY2k= 40572
Q2FuY2VsbGVk 40573
IGFncg== 40574
cmV2aWV3cw== 40575
X2RtYQ== 40576
UklDVA== 40577
IGdmeA== 40578
bXBp 40579
cHBv 40580
IC8vQA== 40581
IHVwcGVyY2FzZQ== 40582
IGNvbW1pdHRpbmc= 40583
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 40584
VXNlckRhdGE= 40585
IHZhaQ== 40586
CXNvcnQ= 40587
IGNvbmdyYXQ= 40588
IGRpb3hpZGU= 40589
0LTQsA== 40590
LmFyZWE= 40591
IEpvc2h1YQ== 40592
IEtvY2g= 40593
X2JyZWFr 40594
YXp1cmU= 40595
aXN0aWNhbA== 40596
X0FMUEhB 40597
X3ZpZXdz 40598
IGVsaW1pbmF0aW5n 40599
T01C 40600
ZW51bWVy 40601
IEh5ZHJv 40602
KCoo 40603
RVJUSUNBTA== 40604
IGluZXZpdGFibHk= 40605
IHN0b2xl 40606
LWVhc3Q= 40607
aWVyb24= 40608
IGxpbmdlcg== 40609
L2RvYw== 40610
xbo= 40611
IEFscmVhZHk= 40612
YXNpbw== 40613
IC0tCg== 40614
IGFiYnJldg== 40615
IEF0b20= 40616
aGlt 40617
IElOU0VSVA== 40618
c3Vu 40619
4pmq 40620
Q09OTkVDVA== 40621
ZXJhdG9y 40622
IE1hbm5pbmc= 40623
IDoo 40624
Z2Fz 40625
PT4n 40626
IHF1ZXJ5c2V0 40627
O30NCg== 40628
IFBvcHVsYXRpb24= 40629
dXRlZFN0cmluZw== 40630
cmVzaWRlbnQ= 40631
X0ZPTlQ= 40632
IFJlc3BvbmQ= 40633
IG9ic2N1cmU= 40634
IG9ic2VydmFibGU= 40635
IENvbnRyaWJ1dG9ycw== 40636
a29u 40637
IE11c2s= 40638
ZXhhbw== 40639
IFR1Yg== 40640
Qm9vdEFwcGxpY2F0aW9u 40641
U09S 40642
Lkhvcml6b250YWw= 40643
LmZpbmRCeQ== 40644
LnBvd2Vy 40645
IHBvc2l0aXZlbHk= 40646
dmVuaWVuY2U= 40647
IEpvbmc= 40648
IHdoaXN0bGU= 40649
INC30L3QsNGH 40650
IGxlbmRpbmc= 40651
IGRlc3RydWN0aXZl 40652
IG9uRGVsZXRl 40653
YXV0aG9yaXphdGlvbg== 40654
KCk7Pz4= 40655
X29yaWdpbmFs 40656
c2NpZW5jZQ== 40657
YXRyYQ== 40658
Pyw/LA== 40659
IEFzYw== 40660
IGNvbnZpbmNpbmc= 40661
JGE= 40662
b3JnZW4= 40663
X0RhdGU= 40664
IFByb3ZpZGU= 40665
IGxvbmVseQ== 40666
KScK 40667
ZXhjaGFuZ2U= 40668
Oz8+Cg== 40669
LmZhc3Q= 40670
U2FtcGxlcw== 40671
TG9uZG9u 40672
J10pDQo= 40673
IElvbmlj 40674
IHBlc3Nv 40675
IEtuaWdodHM= 40676
IFJhZg== 40677
X2F0dHJz 40678
IHJlcGVhbA== 40679
Pk1haW4= 40680
IE9yZGVyZWQ= 40681
X05ldw== 40682
PSIiPjwv 40683
dXJscGF0dGVybnM= 40684
QVRJT05BTA== 40685
cGVlY2g= 40686
IElkYWhv 40687
IHByaW5jZXNz 40688
IEN1c3RvbWVycw== 40689
YXdheXM= 40690
YWRi 40691
IEJyeWFudA== 40692
bm9uY2U= 40693
IGFkdWw= 40694
IGBgKA== 40695
IGFmdGVybWF0aA== 40696
PWRpY3Q= 40697
dGV4dEJveA== 40698
IHNwZXJt 40699
IGNvdWdo 40700
SG9y 40701
4oCZUw== 40702
LkNvbXBvbmVudFJlc291cmNlTWFuYWdlcg== 40703
IHJlZ3VsYXRvcg== 40704
IHBhcnRuZXJzaGlwcw== 40705
L3Byb2plY3Rz 40706
dHJ5cw== 40707
IExhc2Vy 40708
4p+p 40709
IEZ1bms= 40710
IHVuY29uc2Npb3Vz 40711
IGNydXN0 40712
IFRlYW1z 40713
IEJhbm5lcg== 40714
IEhvbmV5 40715
bGVtcw== 40716
IG1heFdpZHRo 40717
UG9pbnRlckV4Y2VwdGlvbg== 40718
ZmFkZU91dA== 40719
LVN0 40720
IHN0cmFuZ2Vycw== 40721
X0dP 40722
V3JpdGFibGU= 40723
X0luZm8= 40724
Lk5vbk51bGw= 40725
YW5ub3RhdGlvbnM= 40726
IEdE 40727
IGVuZG9yc2Vk 40728
CVRva2VuTmFtZQ== 40729
IERlcGVuZGluZw== 40730
WU5BTQ== 40731
IE1ldGVvcg== 40732
IEluY3JlYXNl 40733
Lk1hbnk= 40734
PT0o 40735
LlVVSUQ= 40736
X0tFUk5FTA== 40737
IHZpZMOp 40738
IHBx 40739
IFF0R3Vp 40740
IFZhcmlvdXM= 40741
IGpvaG4= 40742
X3BhdGNo 40743
IHRvdXRlcw== 40744
IEZhaWw= 40745
IHN1cnZpdmluZw== 40746
KCIkew== 40747
ICAgICAgIA0K 40748
IGltYWdlVXJs 40749
LndvcmRwcmVzcw== 40750
c291cmNlcw== 40751
CWdsVmVydGV4 40752
4oCZYQ== 40753
IGVzY29s 40754
UkFSWQ== 40755
IFNuYWtl 40756
IHF1aW50 40757
IGxhc3Rz 40758
IEhhcm1vbg== 40759
IGNvaWw= 40760
IGV4cGxvaXRhdGlvbg== 40761
bGVlbg== 40762
Jz4iOwo= 40763
IFNFUlZFUg== 40764
IEhFQURFUg== 40765
X3ZlbG9jaXR5 40766
IEludm9rZQ== 40767
LnRpbWVzdGFtcHM= 40768
IHN1bGY= 40769
SVFVRQ== 40770
IGluaGFiaXRhbnRz 40771
cGhpbnM= 40772
YXp6bw== 40773
IG1vbm8= 40774
TGVnZW5k 40775
IG5vbmNl 40776
SUZF 40777
OyI7Cg== 40778
LWNyZWF0ZQ== 40779
IiIsCg== 40780
cGVybWl0 40781
IEltbWlncmF0aW9u 40782
IHBhdGhuYW1l 40783
ZmZlY3RpdmU= 40784
4pmA4pmA 40785
IGV4YW1z 40786
LWV2ZW50 40787
IFRpbGw= 40788
W21pZA== 40789
RklY 40790
O2NvbG9y 40791
KE9yZGVy 40792
X3RyYWl0cw== 40793
IG9yZGVyQnk= 40794
IHN1bnQ= 40795
IE5pY2hvbGFz 40796
2LI= 40797
IHN1bm55 40798
aW5lcnM= 40799
IGFjY2Vzc2liaWxpdHk= 40800
IEhC 40801
LmNvbXA= 40802
CW9w 40803
IG1pbm9yaXRpZXM= 40804
ZXRoZXVz 40805
IGNvbGxhYm9yYXRpdmU= 40806
cHJpdA== 40807
SElS 40808
IHdyYXBz 40809
CWRyYXc= 40810
Z29k 40811
IElY 40812
LmFwcHM= 40813
IE5N 40814
IGlycmVsZXZhbnQ= 40815
IFRpZ2Vycw== 40816
IGRpYWc= 40817
R1Y= 40818
IEFjY2Vzc29yaWVz 40819
a29udA== 40820
IHNpbXBsaWZ5 40821
IEZhdm9yaXRl 40822
X3Rvb2xz 40823
KFtdKTsK 40824
IHRvd2Vycw== 40825
QmVz 40826
IGh1bnRlcg== 40827
IHNhbG9u 40828
KGJ1ZmY= 40829
CWRlYnVn 40830
IG1hbHdhcmU= 40831
TW92aW5n 40832
LW9wdGlvbnM= 40833
KSsn 40834
IExPVkU= 40835
X1NPQ0tFVA== 40836
X2Zpbg== 40837
IERlbGF3YXJl 40838
IHNoZXJpZmY= 40839
LWludmFsaWQ= 40840
IEZVTEw= 40841
INC/0L7QtA== 40842
ZWxhcw== 40843
InN0cmluZ3M= 40844
IFJlcHJlc2VudGF0aXZlcw== 40845
c3VyZmFjZQ== 40846
cmVzb2x2ZWQ= 40847
aHRkb2Nz 40848
KSk6DQo= 40849
IHByZXNzdXJlcw== 40850
IG5vcm1z 40851
IHBsYQ== 40852
IHN1cm5hbWU= 40853
IHBvc3RhbA== 40854
IERlcGFydA== 40855
IHNsYXVnaHRlcg== 40856
b3JpZGE= 40857
IGhlYmJlbg== 40858
IGRlc2Fy 40859
Y29tcGFjdA== 40860
X0xBTkc= 40861
5ZCI 40862
b3BvbHk= 40863
X3JhZA== 40864
IFNURE1FVEhPRA== 40865
TGF6eQ== 40866
ICAgCQ== 40867
Li4uLA== 40868
KHdlYg== 40869
IFBvbnQ= 40870
IGV0d2Fz 40871
IHVwd2FyZA== 40872
X2hhdA== 40873
IF0sCgo= 40874
IGJhc2VVcmw= 40875
IHdvcnJ5aW5n 40876
LWFkZG9u 40877
KGdldENsYXNz 40878
U1BJ 40879
IGNhcHR1cmluZw== 40880
KX0sCg== 40881
RWZmZWN0cw== 40882
IGNvbXBldGVudA== 40883
IGZvdWw= 40884
IHN1YnNjcmliaW5n 40885
IE9CSkVDVA== 40886
SVhFTA== 40887
YnVja3M= 40888
KGVkZ2U= 40889
KHBhc3M= 40890
IFBldGVyc29u 40891
IGJvb2Jz 40892
IERlbGF5 40893
X3NxdWFyZQ== 40894
ZWxpbQ== 40895
b3RlcnM= 40896
X1BD 40897
JUU= 40898
b25jbGljaw== 40899
IFNWRw== 40900
IHRvcHBlZA== 40901
IGZpc3Q= 40902
c21hcnQ= 40903
IFJhbHBo 40904
KG93bmVy 40905
am91cnM= 40906
IGJyb256ZQ== 40907
IEFyZ3VtZW50RXhjZXB0aW9u 40908
KG9yaWdpbmFs 40909
X1NDQUxF 40910
X2Nw 40911
IHJlY29tbWVuZHM= 40912
LnNldFN0eWxl 40913
U3VyZQ== 40914
TEFORA== 40915
IHJlcGVhdGluZw== 40916
TWF0dA== 40917
LlZpc2liaWxpdHk= 40918
IGVudGVycHJpc2Vz 40919
LlNldHVw 40920
KHNjZW5l 40921
IFJlYWN0aXZl 40922
dXJnZQ== 40923
Ync= 40924
LlB1dA== 40925
cGVyc2lzdA== 40926
LmNvb2tpZQ== 40927
IEF1ZGk= 40928
YHM= 40929
c3VwcGxpZXI= 40930
KEZvcm0= 40931
wqE= 40932
X3Nv 40933
jIA= 40934
IExlZ2lvbg== 40935
dHRl 40936
TmQ= 40937
TG9zcw== 40938
KGF0dHJz 40939
LnNjYXR0ZXI= 40940
IGdyb29t 40941
IGdsaW1wc2U= 40942
IG5haWxz 40943
IGN1bXVsYXRpdmU= 40944
IGZhemVy 40945
X3NlcnZpY2Vz 40946
Lk51bQ== 40947
aWJpbGl0 40948
X3Jlc29sdXRpb24= 40949
IFR4 40950
dW1pbml1bQ== 40951
b3Bh 40952
LnNjaGVkdWxl 40953
c210cA== 40954
4LiV 40955
dXJyeQ== 40956
w7xr 40957
Z29vZw== 40958
X3NpZ25hdHVyZQ== 40959
LmludG8= 40960
IFN0ZXBz 40961
IGhvbWVvd25lcnM= 40962
IE5TVVJM 40963
IFBBQw== 40964
ICAgICAgICAgICAgCgo= 40965
PicpCg== 40966
ZW5o 40967
IGluY2Fw 40968
JE1FU1M= 40969
IG1vaW5z 40970
IEZp 40971
IG9mZnNlYXNvbg== 40972
cHJlc3Npb25z 40973
Pi48Lw== 40974
IE1hcmtlcg== 40975
IG9uQ2xvc2U= 40976
TEVWRUw= 40977
IGludGVyZmVyZQ== 40978
IENvbGlu 40979
IFJlc2lzdGFuY2U= 40980
RGlzY291bnQ= 40981
IFdlYkVsZW1lbnQ= 40982
IGJhdGhyb29tcw== 40983
bGVnYWN5 40984
IENhcHR1cmU= 40985
IGFyaXNpbmc= 40986
ICIpOwoK 40987
0YjQuNCx 40988
IEluZmluaXR5 40989
QWR2ZXJ0aXNlbWVudHM= 40990
IENvbWluZw== 40991
IFBST0pFQ1Q= 40992
X1BST1RPQ09M 40993
IHVzZURpc3BhdGNo 40994
LmNoYW5uZWxz 40995
IENpdGl6ZW5z 40996
ZW50cmU= 40997
X21w 40998
LkNvbnN0YW50cw== 40999
IFNlcmlhbGl6ZQ== 41000
X0lOQw== 41001
KGx1YQ== 41002
IGNsYXNo 41003
X3dpdGhvdXQ= 41004
LmtleVNldA== 41005
IHJlY2VpdmVycw== 41006
5pa55rOV 41007
KG1lbQ== 41008
IEhvcml6b250YWw= 41009
IGNvY2t0YWls 41010
IGNob29zZXM= 41011
LklubmVy 41012
IHJlbGllZA== 41013
b3VudGVy 41014
ICJe 41015
IHRlbmFudHM= 41016
ImA= 41017
X1BN 41018
ZXJzZWQ= 41019
IH19Ij48Lw== 41020
IHByb3ZpbmNlcw== 41021
X1JBVw== 41022
XEFwcA== 41023
IHByb3N0aXR1ZXI= 41024
X2dhaW4= 41025
LnRlbmNlbnQ= 41026
ZmZlY3Rz 41027
KHBr 41028
c2t1 41029
IHVzYWJsZQ== 41030
RVJWRUQ= 41031
IGFudGVubmE= 41032
aGVh 41033
cGxpc3Q= 41034
X1BMVUdJTg== 41035
0YHQuw== 41036
Lmxvb2t1cA== 41037
4buB 41038
IGVubGFyZw== 41039
IHBpc3M= 41040
SGFt 41041
aW1hcA== 41042
IGludmFsaWRhdGU= 41043
IHNpbGs= 41044
PSIjIj4K 41045
IEdyYXNz 41046
IEdvYWw= 41047
X3BkZg== 41048
SGFuZGxlcnM= 41049
IHN0YWNrcw== 41050
LmdldEZ1bGxZZWFy 41051
PVtdOwo= 41052
6L2m 41053
LFY= 41054
KHNwbGl0 41055
0YPQvdC6 41056
IGJha2VjYQ== 41057
IH4vLg== 41058
cGV6 41059
dGFpbHM= 41060
IEdsZW4= 41061
IHNldEltYWdl 41062
IENvbWlj 41063
QkxPQ0s= 41064
CVRoaXM= 41065
b2FkZXI= 41066
IGNhcGl0YWxpc3Q= 41067
X1NURVA= 41068
KEJvb2xlYW4= 41069
IENvcnJlY3Q= 41070
cmluYQ== 41071
IGNvbmNhdGVu 41072
5a6e 41073
KCk6Cgo= 41074
IHVuYW5pbQ== 41075
bGxp 41076
YWxhcnM= 41077
LW5l 41078
IGRpdm9y 41079
IEtpY2tzdGFydGVy 41080
XS5f 41081
PG51bWJlcg== 41082
L21lbnU= 41083
R1JBUEg= 41084
dmlzaXRvcg== 41085
IGltcHJvcGVy 41086
X05FWFQ= 41087
IGJpc2E= 41088
YmFja2dyb3VuZENvbG9y 41089
L2lucHV0 41090
IG1vaQ== 41091
R29hbA== 41092
bGlxdQ== 41093
IG1pc2NvbmR1Y3Q= 41094
IGNvbXByaXNlcw== 41095
YXducw== 41096
IFBpZQ== 41097
cmFpcw== 41098
cm9sZXVt 41099
IGN1cnNl 41100
eXU= 41101
X3BvbGw= 41102
LmN1cnJlbnRVc2Vy 41103
RVNI 41104
XSlb 41105
IHN0b3J5dA== 41106
KT87Cg== 41107
Kj0= 41108
IEJ1cmc= 41109
L2xheW91dA== 41110
X2JhY2tlbmQ= 41111
Oz8+PC8= 41112
IFdoYXRzQXBw 41113
IE1vdW50YWlucw== 41114
dmlzaW9ucw== 41115
Zmx1ZW5jZQ== 41116
LmNyZWF0ZUNvbXBvbmVudA== 41117
IFBzeQ== 41118
Zm9yZ2V0 41119
c3J2 41120
X0NPTVBPTkVOVA== 41121
IE5leHVz 41122
ICl7 41123
ZW5kaQ== 41124
SU1VTQ== 41125
IEdG 41126
57uE 41127
4oCUdGhhdA== 41128
Yms= 41129
TW96aWxsYQ== 41130
IGRlZmVuZGVycw== 41131
LXNldHRpbmdz 41132
aW1taW5n 41133
IE9QVA== 41134
IENX 41135
IHRoYXRz 41136
IE9wZW5pbmc= 41137
UmVsZWFzZWQ= 41138
bnBt 41139
IGhycw== 41140
IGdyb3VwZWQ= 41141
LyIuJA== 41142
IEhpc3RvcmljYWw= 41143
KCQiew== 41144
b3ZpYw== 41145
KHNpZ24= 41146
IFBob3RvZ3JhcGh5 41147
IHNpZ251cA== 41148
X0FSQ0g= 41149
LnRlc3RuZw== 41150
L2FuZ3VsYXI= 41151
UmVzdENvbnRyb2xsZXI= 41152
c2hpdA== 41153
dWxsZQ== 41154
LnBhdXNl 41155
KFtdLA== 41156
KHF1ZXN0aW9u 41157
aWxvZ3k= 41158
IEV1Zw== 41159
LWxvY2Fs 41160
IGt2aW4= 41161
IHJlc2VydmF0aW9ucw== 41162
b2JpYQ== 41163
IHN1YnNpZGlhcnk= 41164
IGFjY3VtdWxhdGVk 41165
IFFWYXJpYW50 41166
IEJKUA== 41167
IE5vcm1hbg== 41168
IEludGVncmF0aW9u 41169
LlZhcmlhYmxl 41170
KFJlc291cmNl 41171
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 41172
RXhwb3Nl 41173
ICd9 41174
LkNPTE9S 41175
INGH0LjRgQ== 41176
QWpheA== 41177
IHRocnU= 41178
TW92aWVz 41179
IHByb3Bvc2l0aW9u 41180
L3RoZW1l 41181
TW9kZWxQcm9wZXJ0eQ== 41182
IEF3cw== 41183
IEFuZHJlYQ== 41184
IE1lcmdl 41185
LmZpbmlzaA== 41186
KHJlcXVpcmVk 41187
IFByZWw= 41188
ZWxlZA== 41189
5pON5L2c 41190
LlRSQQ== 41191
TUFT 41192
IHJlYWxpc2Vk 41193
cm9pZHM= 41194
CWZu 41195
cmg= 41196
LiI8Lw== 41197
dmlkaWE= 41198
IGRlcHVpcw== 41199
IEJW 41200
TG4= 41201
IGx1c3Q= 41202
QXNj 41203
CQkJCQkJCSA= 41204
aXNsZQ== 41205
LWNhcmU= 41206
X0lOVg== 41207
IERyZXc= 41208
IHdoYXRz 41209
IENhcGFjaXR5 41210
UGFybQ== 41211
X21vbml0b3I= 41212
LnN0dWRlbnQ= 41213
IFJOQQ== 41214
LmVuZHN3aXRo 41215
Ymlo 41216
IE1MQg== 41217
L3Byb2plY3Q= 41218
IHJlc3Rpbmc= 41219
c2VwYXJhdG9y 41220
eWQ= 41221
ZXJ0aWE= 41222
IG1vbml0b3JlZA== 41223
Ij4qPC8= 41224
LkZD 41225
IE5FV1M= 41226
IENhbGxz 41227
IGFkZXF1 41228
Q2hlY2tpbmc= 41229
ZXN0aW1hdGU= 41230
IHJlY2FsbHM= 41231
X2ZyZXF1ZW5jeQ== 41232
IHVzZVJlZg== 41233
IEdyb3Zl 41234
IFhpYQ== 41235
IMOt 41236
ZXNzZW5nZXI= 41237
LWNvc3Q= 41238
LmZj 41239
IEt1bWFy 41240
LkZvY3Vz 41241
ZWxsYW5lb3Vz 41242
LkFsZXJ0 41243
ZWF4 41244
IG9yY2g= 41245
LnBt 41246
IGxhbmRsb3Jk 41247
KHBvcA== 41248
X2FjdHVhbA== 41249
IExC 41250
R3JhbmQ= 41251
LnJlbmRlcmVy 41252
IGxvYg== 41253
Y3VzdG9tZXJz 41254
IGNhcHR1cmVz 41255
V0lORE9X 41256
IGRvY2g= 41257
IGFwb2xvZ3k= 41258
IEphbWE= 41259
QFs= 41260
LnRha2U= 41261
bm9vcA== 41262
IGx1bQ== 41263
IGRpZmZlcmVudGlhbA== 41264
IGVmZmljYWN5 41265
CUlO 41266
X0JPWA== 41267
X3Nk 41268
X3J0 41269
Y29kZXI= 41270
b3VuY2VtZW50 41271
aGFzQ2xhc3M= 41272
IHJpc2t5 41273
IEVzdGFkbw== 41274
LURE 41275
IENhcnNvbg== 41276
U3VmZml4 41277
IHRvZGE= 41278
IFRyYWNrZXI= 41279
IERlbGVnYXRl 41280
YCxg 41281
IFBhcmtpbmc= 41282
IG5lcg== 41283
YXpv 41284
IEZpbGVJbnB1dFN0cmVhbQ== 41285
IHJlY291bnQ= 41286
cWk= 41287
Y2tlbg== 41288
IHNvY2lhbGlzdA== 41289
IEludm9pY2U= 41290
INC/0YDQvg== 41291
JSIs 41292
ZW5uZW4= 41293
IHZpdm8= 41294
IG9yZ2FuaXphdGlvbmFs 41295
IHVuY29tbW9u 41296
dXRhcg== 41297
IGh1bGw= 41298
VHVlc2RheQ== 41299
IGFzc2Vzc21lbnRz 41300
KGFwcGxpY2F0aW9u 41301
IHByZW1pc2U= 41302
U3RhcnRUaW1l 41303
IGRr 41304
IGludGVyZmVy 41305
IFF1ZWVuc2xhbmQ= 41306
IGNyZWRlbnRpYWw= 41307
IGxlaXN1cmU= 41308
WVo= 41309
IENtZA== 41310
QlVT 41311
dXNhbg== 41312
CXZlYw== 41313
aW9sb2dpY2Fs 41314
IExvdHM= 41315
IGVubGlnaHQ= 41316
IGZyZXNobWFu 41317
IENPTU1BTkQ= 41318
IEFjdGlvbkxpc3RlbmVy 41319
dXRt 41320
YXJpdXM= 41321
VHdpZw== 41322
IHN3ZXB0 41323
LXRvb2w= 41324
xJA= 41325
Y2hhcHRlcg== 41326
LWdyYWRl 41327
IGN1cmlvc2l0eQ== 41328
IHN1c3RhaW5hYmlsaXR5 41329
IE1pbmVjcmFmdA== 41330
d2VuZA== 41331
SWZFeGlzdHM= 41332
IEN1bHR1cmFs 41333
IFNhY3JhbWVudG8= 41334
TGF5ZXJz 41335
U3Vic2NyaWJlcg== 41336
LkdyYXBo 41337
IGxt 41338
ZXN0eQ== 41339
YWR2ZXJ0 41340
JHA= 41341
IEhvY2tleQ== 41342
IERFVA== 41343
c2V0VGl0bGU= 41344
eWFuZw== 41345
IGJhYmU= 41346
ZWxzaXVz 41347
VHJhdmVs 41348
IG1lc21v 41349
KG1hcFN0YXRlVG9Qcm9wcw== 41350
X1NFTA== 41351
LXBvcA== 41352
IGVtaXNzaW9u 41353
4oCZLgoK 41354
LnN3aXRjaA== 41355
b3Rpb25z 41356
LnBob3Rv 41357
TFY= 41358
YW1vZGVs 41359
IHdvcmR0 41360
SUdHRVI= 41361
IFRPREFZ 41362
T0xT 41363
X0lERU5U 41364
IGNvbW1lbnRpbmc= 41365
RGF0b3M= 41366
IGhpbGFyaW91cw== 41367
KGFueQ== 41368
IGRhbXA= 41369
LWNvbnRyb2xsZWQ= 41370
ICI8Pw== 41371
X2JsYWNr 41372
TmV0QmFy 41373
LnNldFNlbGVjdGVk 41374
Q3Nz 41375
IHF1YXJ0 41376
IG93bmluZw== 41377
IEZJRUxE 41378
LnJlbHU= 41379
IGxpcw== 41380
7Jqw 41381
LlJFTEFURUQ= 41382
IGxvaw== 41383
IEZsaXA= 41384
IHByZXN0aWdpb3Vz 41385
IGRn 41386
IElucHV0U3RyZWFtUmVhZGVy 41387
IHVzdQ== 41388
IGdpcg== 41389
IGFuYQ== 41390
X3B5 41391
dW5uZWw= 41392
CXN5c3RlbQ== 41393
IGNvYXRpbmc= 41394
IEdlbnJl 41395
ZXJybw== 41396
IENMSUVOVA== 41397
IHN0cmV0Y2hlZA== 41398
Lkhhc1ZhbHVl 41399
Ozs7Ozs7Ozs= 41400
54mI 41401
IGZpbmFscw== 41402
LmdldENoaWxkcmVu 41403
IC0tfX0K 41404
IENvd2JveXM= 41405
IEVkaW5idXJnaA== 41406
IFBsYXph 41407
YWJlbg== 41408
QXJ0aXN0 41409
VVJB 41410
IEh1Z2hlcw== 41411
b2JiaWVz 41412
X25vaXNl 41413
Lk9iamVjdHM= 41414
RXhwcmVzc2lvbnM= 41415
IGFudGhyb3A= 41416
JykpDQo= 41417
KS4i 41418
Y3JpcHRpdmU= 41419
IHNhbG1vbg== 41420
IHdhc3Q= 41421
cmhv 41422
LnRpY2s= 41423
IGV4cGxvcmVz 41424
IEFsZ29yaXRobQ== 41425
Q2hhckFycmF5 41426
4LiE 41427
X1BBQ0tFVA== 41428
SkU= 41429
Il1dOwo= 41430
Lm5vdGU= 41431
QmFja2luZw== 41432
IEhvbGRlcg== 41433
cmVpY2g= 41434
IFppb24= 41435
L2dy 41436
ICAgICAgICAgICAgICAgICAgIAo= 41437
TW90aW9u 41438
IFRyaWJ1bmU= 41439
IGNyaXRpY2FsbHk= 41440
IENSTQ== 41441
IGJsb3dpbmc= 41442
IGNvbW1pc3Npb25lcg== 41443
Sm9l 41444
IFRlbGV2aXNpb24= 41445
CXByZQ== 41446
IFRSQU4= 41447
IFZpa2luZ3M= 41448
IEJFVA== 41449
d291bGQ= 41450
LkNhcHRpb24= 41451
IGJhY29u 41452
aG1h 41453
bWVyZ2Vk 41454
IHN1YnNjcmlwdGlvbnM= 41455
b2NjdXBpZWQ= 41456
TGl2ZURhdGE= 41457
IGFsbG93YW5jZQ== 41458
cmlnZXNpbWFs 41459
ZGRk 41460
LmxvZ291dA== 41461
IFRhbmc= 41462
IHdhcm10aA== 41463
TW9kZWxJbmRleA== 41464
IFByYQ== 41465
IHNjZW50 41466
IGhhY2tlcnM= 41467
IGlsbHVzdHJhdGU= 41468
SWNo 41469
IGRpYXM= 41470
Q0FTRQ== 41471
IFNjaQ== 41472
JHVybA== 41473
IE1PRFVMRQ== 41474
dXNob3J0 41475
bGllcnM= 41476
IERldmljZXM= 41477
bWluc3Rlcg== 41478
dW5hbWU= 41479
IHVucg== 41480
RXhhbXBsZXM= 41481
IHJpc2Vu 41482
LmFp 41483
Y2hyb20= 41484
X3dvcmtlcg== 41485
IGFsaWFzZXM= 41486
TW91c2VFdmVudA== 41487
IHNldHRlcg== 41488
IFB1cnBsZQ== 41489
Sm9pbkNvbHVtbg== 41490
PWU= 41491
VEhPT0s= 41492
IFRvdw== 41493
IENydXNoaW5n 41494
IEplZGk= 41495
IEdyaWZmaW4= 41496
IGtvcw== 41497
X0ZT 41498
aW5nZXM= 41499
c29sZXM= 41500
KG5hbWVz 41501
IEJpZA== 41502
LXBvd2VyZWQ= 41503
TXVsdA== 41504
YW1pbGlhcg== 41505
LmNsZWFuZWQ= 41506
IFppbW1lcg== 41507
CWNsZWFy 41508
IHVuc3VwcG9ydGVk 41509
Q2FsbGFibGU= 41510
IHJlcHM= 41511
YWx0ZXJu 41512
X1JFUE9SVA== 41513
LmdldENvbHVtbkluZGV4 41514
X1NUT1JF 41515
IHN1Y2h0 41516
c3VidGl0bGU= 41517
IHBlcmQ= 41518
q5g= 41519
Lk5PVA== 41520
fT48Lw== 41521
OmQ= 41522
bWRp 41523
YmluZFZhbHVl 41524
IERlY2lzaW9u 41525
UmV0dXJuVmFsdWU= 41526
LGluZGV4 41527
eGZj 41528
IHNlcnVt 41529
Z2V0RmllbGQ= 41530
Q29ubmVjdGlvblN0cmluZw== 41531
LW9iamVjdA== 41532
LnJlY3Y= 41533
IHVuZGVyZ3JhZHVhdGU= 41534
LkluZnJhc3RydWN0dXJl 41535
IEthYg== 41536
IGFkdmlzb3J5 41537
LXRyZWU= 41538
IG11ZQ== 41539
aW5mb3Jt 41540
LmVtYmVk 41541
IGVycm9yQ29kZQ== 41542
bWljcm8= 41543
IHNwYXJrZWQ= 41544
IGltYWdlcnk= 41545
Y29uYw== 41546
X21pc3Npbmc= 41547
IHN1cnBsdXM= 41548
S1M= 41549
CVJUSE9PSw== 41550
VGVsbA== 41551
cml1bQ== 41552
IFJhZGl1cw== 41553
cmlrYQ== 41554
bG9zaW9u 41555
IEhlcm4= 41556
R2FtbWE= 41557
IEZlZQ== 41558
IE5hbWVk 41559
IENhbnlvbg== 41560
IEpTT05BcnJheQ== 41561
IHp3ZWk= 41562
IFNTSA== 41563
IHNlcnZhbnQ= 41564
Y29hbA== 41565
IGRlbnlpbmc= 41566
IHNwbGl0cw== 41567
SW5jb3JyZWN0 41568
IHRveA== 41569
IEFuYWx5c3Q= 41570
IGFjY3JlZA== 41571
dWJsZQ== 41572
IHd0 41573
IFRyaWFs 41574
LmV4dGVuc2lvbg== 41575
IENhcmVlcg== 41576
IHNlY3VyaW5n 41577
IExpbA== 41578
IHByb2plY3Rpb25z 41579
IHllYXN0 41580
TWFkZQ== 41581
IGZvdW5kYXRpb25z 41582
YWNpZmlj 41583
LnZvbHVtZQ== 41584
IG1pcnJvcnM= 41585
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= 41586
IHZpb2xhdGU= 41587
YXJzZXJz 41588
IHNvY2lv 41589
IHRraW50ZXI= 41590
IExJTks= 41591
LmdldFNpemU= 41592
IFdob2xl 41593
KXZpZXdEaWRMb2Fk 41594
CWRvbmU= 41595
dWRlYXU= 41596
XCI+PC8= 41597
QW5kcmV3 41598
ZXJi 41599
IGbDtg== 41600
LmNsdXN0ZXI= 41601
IGRpc2NvdXJzZQ== 41602
X0RFRklO 41603
IHB1ZWRlbg== 41604
IExPVw== 41605
LmF2 41606
IHByZWNh 41607
IHF1bw== 41608
IHZlbG9j 41609
LCcn 41610
IHh5eg== 41611
CXBhZGRpbmc= 41612
IHRvbWF0b2Vz 41613
IEJlbnQ= 41614
X2N1cnI= 41615
TlNEYXRl 41616
IGdldEN1cnJlbnQ= 41617
IFtg 41618
V2VkbmVzZGF5 41619
LkJhcg== 41620
IFZvdXM= 41621
aW56 41622
IFF1aW5u 41623
ZXhjZWw= 41624
ZG9z 41625
IG91dGRhdGVk 41626
T1VUSA== 41627
IE1ha2Vy 41628
ZXBlbmRlbmN5 41629
IGR1bGw= 41630
IFdpbm4= 41631
b2dl 41632
Y2xhdmU= 41633
IG5vdmE= 41634
IGF2YWw= 41635
Q2FwdA== 41636
IFNwb3RpZnk= 41637
IGp1bA== 41638
KXRhYmxlVmlldw== 41639
IGZpbGVuYW1lcw== 41640
IGVza29ydA== 41641
5ZGo 41642
IHNrZXc= 41643
dGVyaW9y 41644
IGZpbmFuYw== 41645
IHRhYmxh 41646
IFVJQg== 41647
ICgpOg== 41648
IERvY2tlcg== 41649
cGVyY2VudGFnZQ== 41650
TWVldA== 41651
aWNoaQ== 41652
IGludGVyaW0= 41653
ICc9Jw== 41654
LkpTT05PYmplY3Q= 41655
KGZpZA== 41656
IGRvd250 41657
IHRyYW5zaWVudA== 41658
IFN0ZXBo 41659
IGlnbm9yYW5jZQ== 41660
IENvZGVz 41661
PScnLA== 41662
IElDRQ== 41663
IHRyYW5xdQ== 41664
IEV4dGVuZGVk 41665
IG11bmQ= 41666
IEhPTUU= 41667
IGtpbG9tZXRlcnM= 41668
IGltYWdlbg== 41669
b3V4 41670
KHN6 41671
WW91bmc= 41672
dWZmZWQ= 41673
IFdha2U= 41674
IGFpZGU= 41675
UFJPQw== 41676
IFJhdA== 41677
IExpdGg= 41678
YmFydA== 41679
IEFycmFuZ2U= 41680
cHJvbXB0 41681
0KM= 41682
KGN0 41683
IEludGVydmFs 41684
ZGVwdA== 41685
RGFuaWVs 41686
IGZpbGxz 41687
LnRlbnNvcg== 41688
KHRyaW0= 41689
IGplYWxvdXM= 41690
RmVi 41691
XENvbW1vbg== 41692
IGFtZW5kbWVudHM= 41693
X29wZXJhdG9y 41694
X2N1c3RvbWl6ZQ== 41695
IF1d 41696
IGJu 41697
IGRpc2FwcG9pbnRtZW50 41698
IG1pbGxlbm4= 41699
LndoZW4= 41700
IG9iZXk= 41701
IG9mZmVuZGVycw== 41702
V2lsZA== 41703
IGNlbGxGb3I= 41704
IGFwcGFyYXR1cw== 41705
LmFmdGVy 41706
IEVQUw== 41707
IGFkb3JhYmxl 41708
b3BlcmFuZA== 41709
KGxpc3RlbmVy 41710
dmVhbA== 41711
ICko 41712
IGNhcmRpb3Zhc2N1bGFy 41713
dXBsaWNhdGVz 41714
cmlzdG9s 41715
IHJlZnVzZXM= 41716
KFFXaWRnZXQ= 41717
IGVsZW1lbnRv 41718
TnVtYmVyT2Y= 41719
LmRlbGF5 41720
Lmdyb3Vwcw== 41721
Ij4nKw== 41722
5Z2A 41723
YWNlbmN5 41724
KFVSTA== 41725
X2hhbGY= 41726
PWw= 41727
IGxpc3RWaWV3 41728
KHNlY3Rpb24= 41729
LnRvQXJyYXk= 41730
Ky8= 41731
IFJvZHJpZ3Vleg== 41732
aXN0cmVhbQ== 41733
IGVsaWdpYmlsaXR5 41734
Ojot 41735
Lm5ld0luc3RhbmNl 41736
UEI= 41737
IEFzc2V0cw== 41738
IENvbXBvc2l0ZQ== 41739
IExhYnM= 41740
IEhhbWFz 41741
KyspOwo= 41742
IGJsaw== 41743
IE5lbw== 41744
THVj 41745
QGxvZ2lu 41746
IHVuYXdhcmU= 41747
Lm1ldA== 41748
X1JFTEVBU0U= 41749
KFNU 41750
QU1JTA== 41751
cmlrZQ== 41752
ICgpewo= 41753
KHNwcmludGY= 41754
IEFjY291bnRz 41755
IFZJRVc= 41756
IEFq 41757
44Kw 41758
IHdoaXNr 41759
IGlkaQ== 41760
IHJvZGU= 41761
IGlobg== 41762
IEVsZW1lbnRhcnk= 41763
UXR5 41764
IGludHJpZ3Vpbmc= 41765
IOWk 41766
Sm9icw== 41767
CW9mZnNldA== 41768
IEFobWVk 41769
IFRhbGliYW4= 41770
IOiOt+WPlg== 41771
IGluamVjdGVk 41772
LkF1dGhlbnRpY2F0aW9u 41773
X2xpbmVhcg== 41774
LkRlY2ltYWw= 41775
IGFwcGxlcw== 41776
IHNoYXJlaG9sZGVycw== 41777
IGJha2Vk 41778
LmRpZmY= 41779
IEVkZGll 41780
b2tlcnM= 41781
IGNvbmZyb250ZWQ= 41782
dm9pY2Vz 41783
IHR1cw== 41784
IFNwaW4= 41785
Tk9ERQ== 41786
X1Vu 41787
Q1RY 41788
L2dvb2dsZQ== 41789
VGVtcGVyYXR1cmU= 41790
ICcnKS4= 41791
IG1hZ25pZmljZW50 41792
IHN0YXJ0SW5kZXg= 41793
c2VtYmxlcw== 41794
QW55b25l 41795
ems= 41796
ZWhlbg== 41797
IERhbWU= 41798
LnN0cmljdA== 41799
IHJlcGxhY2Vz 41800
IGxpbmViYWNr 41801
IHB1c2hlcw== 41802
IGNoZWVr 41803
IFNoaQ== 41804
X0JZVEVT 41805
UkVB 41806
4bqjbg== 41807
X0NPTk5FQ1RJT04= 41808
R2F0ZXdheQ== 41809
IFRyYXZpcw== 41810
IEFY 41811
IEJhc2ljYWxseQ== 41812
IFVwZ3JhZGU= 41813
4Ko= 41814
dGhlbWVz 41815
ZXJtbw== 41816
a29y 41817
RmVtYWxl 41818
X2F0dGFjaA== 41819
IOyCrOyaqQ== 41820
IHBveg== 41821
PT09PT09PT09PT09PT0K 41822
KHN5bWJvbA== 41823
IFNlY3Rvcg== 41824
X18pCgo= 41825
X3BhZGRpbmc= 41826
77yaIg== 41827
IGZhYnM= 41828
IHJhbmdlZA== 41829
c2V0TmFtZQ== 41830
IHBlcnJvcg== 41831
4pc= 41832
IEZpbGVSZWFkZXI= 41833
IGZ1bGZpbGxlZA== 41834
X0N1cnJlbnQ= 41835
IGRvbWluYXRl 41836
IHNtdWdn 41837
UG9zdE1hcHBpbmc= 41838
X2ZvcmNl 41839
IGJsb2M= 41840
IEdpYW50 41841
KHZpZGVv 41842
IENV 41843
U3lzdGVtU2VydmljZQ== 41844
IGVsZg== 41845
IGtvbnRha3Q= 41846
66o= 41847
a2Vlcw== 41848
Z3Rr 41849
IHBhcmFtSW50 41850
IG1hcmt1cA== 41851
dWFsZXM= 41852
IGFjY291bnRlZA== 41853
IGdhbmdiYW5n 41854
UllQVA== 41855
IFdyb25n 41856
IGNyZWRpdGVk 41857
IE1FU1NBR0U= 41858
IGZsYXdz 41859
IGJidw== 41860
IG1ldGFib2xpYw== 41861
IE9FTQ== 41862
L2V2ZW50 41863
KENvbGxlY3RvcnM= 41864
bW9udG9u 41865
YXBwZWFy 41866
IG9wdGVk 41867
IGNoZWF0 41868
IGRhdg== 41869
IFByb2NlZWQ= 41870
IOq4 41871
YW5rZWQ= 41872
0LjQtw== 41873
YW5zaw== 41874
IEhhbmc= 41875
IENsZXI= 41876
IGRpc2d1 41877
IGNtYXA= 41878
LmNsanM= 41879
IGF1bWVudA== 41880
bGV6 41881
IEpvaW5lZA== 41882
X3JlY2VpdmVk 41883
IGFlcmlhbA== 41884
b3RlbA== 41885
IGdyZWV0 41886
InM= 41887
IEdlbmVzaXM= 41888
IENhbGlm 41889
cGFuaW9u 41890
IHRhaWxvcmVk 41891
bWFwcGluZw== 41892
YW5kRXhwZWN0 41893
LnRyYWNr 41894
YXRvbXk= 41895
IE93 41896
dWxsYWg= 41897
Llllcw== 41898
IFNpbXBsZU5hbWU= 41899
ZGJo 41900
J2Vu 41901
IG5vbnNlbnNl 41902
IHBoaWxvc29waGljYWw= 41903
KGdldENvbnRleHQ= 41904
IGlzc28= 41905
IEFDRQ== 41906
c3RhcnREYXRl 41907
IGLEmWQ= 41908
IEFVVEhPUg== 41909
IEdsb2Jl 41910
IGluc2VjdHM= 41911
X0Fs 41912
dXNoaW5n 41913
6K6w 41914
L0hvbWU= 41915
IExvY2FsRGF0ZQ== 41916
bmVlZGVk 41917
aGVzaXZl 41918
IGlsbHVzaW9u 41919
5LqM 41920
IHRyYXQ= 41921
eG8= 41922
L2RldGFpbA== 41923
X01BVENI 41924
IGJyb2FkYmFuZA== 41925
IHdhbA== 41926
IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbg== 41927
SVJFQ1RJT04= 41928
IG5vcnRoZWFzdA== 41929
ZXNpdW0= 41930
IENsaWVudGU= 41931
dWxhbmNl 41932
bnR5 41933
IHRlY24= 41934
RGV2aWNlcw== 41935
IGdyYWlucw== 41936
IE9n 41937
IFNFTA== 41938
dWRpYW50 41939
ICsrOwo= 41940
IGV4cGxhbmF0aW9ucw== 41941
b2Njbw== 41942
IGRpZXRz 41943
IGNvaG9ydA== 41944
KGNvbnRyb2xsZXI= 41945
Lkl0ZXJhdG9y 41946
LXJpY2g= 41947
cm9jZXNz 41948
R0Q= 41949
IGNhcmJvaHlkcg== 41950
IGZyaWVk 41951
IEVtcGxveW1lbnQ= 41952
7J6l 41953
IExlb25hcmQ= 41954
XyR7 41955
cXVhcmVz 41956
IGNvbXBhbmlvbnM= 41957
IHBhcmlz 41958
IHN0aW11bGF0aW9u 41959
IFpvbw== 41960
IHJlbGV2YW5jZQ== 41961
IENvbG91cg== 41962
IHNwZWFy 41963
b3Rpb25hbA== 41964
IExpdGU= 41965
IEtvc3Rlbg== 41966
IMOz 41967
X2F0dGFjaG1lbnQ= 41968
b3JwaGlj 41969
IGRhbWl0 41970
IGRsZw== 41971
IHRocml2ZQ== 41972
Q0hBTkdF 41973
IEFwcGFyZW50bHk= 41974
IGF0dWFs 41975
IHJvb3RlZA== 41976
KGltYWdlcw== 41977
YXdp 41978
YXJpYXQ= 41979
IGNoZXJyeQ== 41980
U1RBVElD 41981
bW50 41982
IFVzZXJJZA== 41983
aWxsZXQ= 41984
IEhpc3Bhbmlj 41985
IG5haw== 41986
IGNlbnRybw== 41987
IGRpbXM= 41988
X2luaXRpYWxpemU= 41989
xLFr 41990
IENlbnRlcnM= 41991
UkVO 41992
IGV2b2x1dGlvbmFyeQ== 41993
IFRvcGljcw== 41994
X2RhbWFnZQ== 41995
ZW1lcg== 41996
IHJ1bmQ= 41997
IHB1bmlzaGVk 41998
IGN1Ymlj 41999
ZmFpcg== 42000
W107Cgo= 42001
IGluc3RhbnRpYXRl 42002
IG92ZXJzZWU= 42003
LWRlbGV0ZQ== 42004
dW50ZWVy 42005
c3RhcnRUaW1l 42006
IFBpcGVsaW5l 42007
X0dBTUU= 42008
IENpcg== 42009
CU51bGw= 42010
LkZvcm1hdHRpbmc= 42011
dWN1bWJlcg== 42012
IFJpZGU= 42013
IHpvbw== 42014
IGNoZWNrZXI= 42015
5ZCM 42016
PUM= 42017
IGdyaXQ= 42018
Iik7Ly8= 42019
X3h5 42020
IERlY2xhcmF0aW9u 42021
IGNhbGxhYmxl 42022
Rm9v 42023
IExpc3RJdGVt 42024
IGluYWNjdXI= 42025
bWxpbg== 42026
CURhdGE= 42027
IGV2b2x2aW5n 42028
YXdhbg== 42029
IGNhZmU= 42030
Zm9saw== 42031
X0lEWA== 42032
IEFueXRoaW5n 42033
IFBhbGVzdGluZQ== 42034
IEdyaWRWaWV3 42035
IGNvbG9ueQ== 42036
IEdlcm1hbnM= 42037
KCs= 42038
LnBpZA== 42039
LmpzeA== 42040
IFN1cGVyaW9y 42041
Q2hyaXN0aWFu 42042
IExlY3Q= 42043
CUdhbWU= 42044
IGluc3RydW1lbnRhbA== 42045
QW5pbWF0aW9ucw== 42046
0LTQsNC7 42047
IE1vc2Vz 42048
CQkNCgkJDQo= 42049
enM= 42050
a3Rl 42051
5Lia 42052
X0RJU1Q= 42053
Yml0bWFw 42054
ZEI= 42055
IHBlcnNpc3RlbmNl 42056
0YDQvtGB 42057
JGw= 42058
QnJvbg== 42059
IHt8 42060
X2NoYXJ0 42061
IENvbnN1bQ== 42062
IGhlbXA= 42063
ICIpKQo= 42064
IGF0dGFja2Vycw== 42065
IGtub3dsZWRnZWFibGU= 42066
IGNldA== 42067
IHZpcnVzZXM= 42068
J0k= 42069
IHBpdGNoZXI= 42070
IHN3ZWVwaW5n 42071
PWxpc3Q= 42072
YXB0b3Bz 42073
LmRlcHRo 42074
IGluc3RydWN0ZWQ= 42075
IFJ1cw== 42076
YmVuaGF2bg== 42077
INC40L0= 42078
U3BvcnRz 42079
IG9uc2V0 42080
5p2D 42081
LlJFRA== 42082
X3Np 42083
IFBTVA== 42084
Lm9uQ2hhbmdl 42085
PnRhZw== 42086
IFJvaA== 42087
X2NoYXJhY3Rlcg== 42088
IExhd3M= 42089
IEJhY2hlbG9y 42090
X3N3YXA= 42091
LnJlYWN0aXZleA== 42092
IHJld2FyZGluZw== 42093
TWVkaXVt 42094
LVs= 42095
IFJlY2VudGx5 42096
Sm9pbnQ= 42097
cGFydGl0aW9u 42098
IE1pbnV0ZXM= 42099
IGluZG8= 42100
IGFic29yYmVk 42101
IEdO 42102
X0lORA== 42103
IHNhYmVy 42104
U3Bhd24= 42105
b3V0cHV0cw== 42106
IEplZmZyZXk= 42107
IG1lZGlldmFs 42108
aGVk 42109
R3VpZGU= 42110
IHBzeWNobw== 42111
IGdsYW0= 42112
RWxpbQ== 42113
w6RkY2hlbg== 42114
X3BsYWlu 42115
IFNhdQ== 42116
LWZvdXI= 42117
IGFuYWx5emluZw== 42118
UVVFUlk= 42119
IHRvbWF0bw== 42120
X2J1dHRvbnM= 42121
VkVO 42122
LnNldFN0YXR1cw== 42123
LlVybA== 42124
KwoK 42125
IGNvbXBsYWluaW5n 42126
ZGVncmVl 42127
Y29uZmlybWVk 42128
IHN1YnQ= 42129
cGFyc2Vk 42130
IHRvcnF1ZQ== 42131
IHRyb3VibGVk 42132
IFRBUkdFVA== 42133
IHRyYWRlbWFya3M= 42134
IENvb3JkaW5hdGU= 42135
IFZpdg== 42136
IC8vfQoK 42137
IGFwcsOocw== 42138
LmdldFBvc2l0aW9u 42139
KEtleUNvZGU= 42140
IFNpbHZh 42141
IG1ldGVvcg== 42142
IGVuZG9yc2VtZW50 42143
T3ZlcnZpZXc= 42144
IFBvc3M= 42145
LkluamVjdA== 42146
IGV2ZW5seQ== 42147
IHZpc3VhbGl6YXRpb24= 42148
IHdjaGFy 42149
IEhETUk= 42150
IGZ1bmN0 42151
aWNrbmFtZQ== 42152
JywnJywn 42153
IGZvcndhcmRz 42154
TWFuYWdlZE9iamVjdA== 42155
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 42156
CXNlcnZlcg== 42157
IE91dGxvb2s= 42158
IENocm9uaWNsZQ== 42159
IGR1YmJlZA== 42160
IGRvaw== 42161
IFdlYXI= 42162
LkFM 42163
cGFyZW4= 42164
LkludGVyZmFjZQ== 42165
SW50ZXJmYWNlcw== 42166
LmNvZA== 42167
IGRpYg== 42168
Lkdsb2JhbGl6YXRpb24= 42169
IEFjYWRlbWlj 42170
IGFzc21z 42171
QXV0b20= 42172
IGx3 42173
IE5X 42174
ICYmDQo= 42175
IHByb2JsZW1h 42176
IE1hbnVmYWN0dXJpbmc= 42177
bGltaXRz 42178
LW1vYmlsZQ== 42179
IGZpbG1l 42180
L21hcA== 42181
IGRvaXQ= 42182
IEluaw== 42183
IHN1ZWQ= 42184
LmFycg== 42185
IHVuZGVybWlu 42186
IFByb2M= 42187
Y3JvbGxWaWV3 42188
X18k 42189
IHNpZGV3YWxr 42190
KHRoYXQ= 42191
4Li3 42192
W3E= 42193
Z3JhbW1hcg== 42194
IHTDqw== 42195
cXVpdG8= 42196
IHNwaXJhbA== 42197
ZXh0ZW5kZWQ= 42198
IGZvY2Fs 42199
IGRpZ2dpbmc= 42200
cGFz 42201
IFRhbGw= 42202
LnByb3h5 42203
aXR1cmVz 42204
VFJBQ1Q= 42205
IFJlYWxt 42206
IGZlZGVy 42207
IG9yaWVudGVk 42208
IEFsdGVybmF0aXZl 42209
IG93ZQ== 42210
IHNvdXJjZWQ= 42211
aW5rZXI= 42212
LmRldA== 42213
U2Vw 42214
IFF1aQ== 42215
IFBhbG1lcg== 42216
KF8s 42217
c2FtcGxlcw== 42218
b3llcg== 42219
dWxsYW4= 42220
cXVleg== 42221
RWRnZXM= 42222
IHNob3V0 42223
IEFjaGll 42224
IGhhYXI= 42225
X0NvbnN0cnVjdA== 42226
IHByZW1hdHVyZQ== 42227
IHJldmVydA== 42228
JykuCg== 42229
IHNjaG4= 42230
ZmlsdGVyZWQ= 42231
bnVsbHB0cg== 42232
U2F2ZWQ= 42233
aXRlY3R1cmU= 42234
Q0xB 42235
IHZs 42236
c3RlbGw= 42237
CU1l 42238
IExpcA== 42239
bmF0aW9uYWw= 42240
IHdob2xseQ== 42241
IHNwcmluZ3M= 42242
LlRpbWVy 42243
CXNyYw== 42244
ZWxzZW4= 42245
5YW2 42246
IGNvbW11bmljYXRpbmc= 42247
IFF1aXo= 42248
IHRlbmc= 42249
IGdleg== 42250
IE91dHNpZGU= 42251
LlNpZ24= 42252
KGNz 42253
IGRpc3B1dGVz 42254
IFdlaXNz 42255
YW5uZXM= 42256
Pk5v 42257
IEJhY2g= 42258
LnJlbW92ZUFsbA== 42259
cmVmZXI= 42260
L2Rhc2hib2FyZA== 42261
IEFqYXg= 42262
SW5kZXhDaGFuZ2Vk 42263
IFdlYWs= 42264
JyIK 42265
IHNpZ2h0cw== 42266
YWNjZXNzVG9rZW4= 42267
IEpvaQ== 42268
KGRvbWFpbg== 42269
CWN2 42270
IGNvbnRpbnVhdGlvbg== 42271
IHBsdW0= 42272
YWRpcg== 42273
LnNldE1lc3NhZ2U= 42274
IO+8jA== 42275
IHN3YWxsb3c= 42276
IExhbXA= 42277
IHF3 42278
IHV1 42279
Q29pbg== 42280
dWJpYw== 42281
IERlYWxz 42282
cmFjZQ== 42283
IGRpY3RhdG9y 42284
IG1lbWU= 42285
dHVybmVk 42286
IEp1bGll 42287
LmdyaWRDb2x1bW4= 42288
IHB1cHB5 42289
IHBhbQ== 42290
ICl7DQo= 42291
IGludml0aW5n 42292
IGZyZW5jaA== 42293
dmlt 42294
IHdyYXBwaW5n 42295
ICMtfQo= 42296
KFst 42297
RWFybHk= 42298
IHNoaW55 42299
LmZhY2Vz 42300
IHJlYmVsbA== 42301
YWJjZGVm 42302
w6RsdA== 42303
IGVzdGltYXRpb24= 42304
cGh5cw== 42305
bG9zdXJlcw== 42306
X1JFTA== 42307
IGV4Y2x1c2lvbg== 42308
IFNreXBl 42309
d2Vpc2U= 42310
LXN0b3A= 42311
bm90aGluZw== 42312
IEVnZw== 42313
aXNvcnM= 42314
UmljaGFyZA== 42315
IGNvdW5zZWxpbmc= 42316
IGNvbW1lbQ== 42317
IFFNZXNzYWdlQm94 42318
IFN5bmQ= 42319
IEZyb3N0 42320
IENvbXBldGl0aW9u 42321
IEF3YWtl 42322
IHRlZA== 42323
aWNpb25lcw== 42324
IERldkNvbXBvbmVudHM= 42325
VkVSVElTRU1FTlQ= 42326
b3R0aQ== 42327
LnJ1bm5lcg== 42328
IHVuaXF1ZWx5 42329
LmZsYWc= 42330
CXJz 42331
X2dlbmVyaWM= 42332
IGBgYAo= 42333
QUNISU5F 42334
IG1laW4= 42335
KEFwcGxpY2F0aW9u 42336
KGJy 42337
IHJhdGlvcw== 42338
Oiw= 42339
IFhDVGVzdA== 42340
dXN0YWluYWJsZQ== 42341
LXd3dw== 42342
aXRsZXM= 42343
X1RFTVA= 42344
IHN5c3Q= 42345
dW1lcmljVXBEb3du 42346
CWFzc2VydFRydWU= 42347
IHdm 42348
LnBlZWs= 42349
IEJ1bGc= 42350
IHRlcnJpZnlpbmc= 42351
Lk1PREU= 42352
IEdX 42353
w6Fy 42354
IGZpYw== 42355
IGNvbW1pdG1lbnRz 42356
LXRlY2g= 42357
IExpcXVpZA== 42358
b3Bleg== 42359
emhlaW1lcg== 42360
YcOxYQ== 42361
LW1lZGlh 42362
KGFuaW1hdGVk 42363
X2dvYWw= 42364
IGd1bQ== 42365
eXN0b25l 42366
LlNFVA== 42367
IFdlbmQ= 42368
c2V0Q2VsbFZhbHVl 42369
IG1zZ3M= 42370
Y2FzaA== 42371
QUxMT0M= 42372
L2F3cw== 42373
IG1pY3Jvd2F2ZQ== 42374
LlBvaW50ZXI= 42375
CUNvbnNvbGU= 42376
X3NvcnRlZA== 42377
IEZpbGlw 42378
UHJvZA== 42379
IC8vITw= 42380
aW5ncm91cA== 42381
IGtz 42382
X1RSSQ== 42383
IHRlYXNwb29u 42384
IEFUVA== 42385
IHJlY292ZXJpbmc= 42386
IEdMT0JBTA== 42387
LlBhcg== 42388
IC8+Owo= 42389
IG1hcmJsZQ== 42390
dWxhdG9ycw== 42391
IEN5Y2xl 42392
IGhlcmJz 42393
X21ldHJpYw== 42394
KSE= 42395
X0NMT0NL 42396
X0J1dHRvbg== 42397
SGFycnk= 42398
6L+b 42399
IHN0cmFpbnM= 42400
IEFwcEJhcg== 42401
IENoYW4= 42402
L3ZpZGVv 42403
IGJhbQ== 42404
LlByb2dyZXNz 42405
JGY= 42406
bGVtZW4= 42407
IGlycmVndWxhcg== 42408
IER1bmNhbg== 42409
IE1pbnQ= 42410
LXZpZGVv 42411
4Ka+ 42412
w7N3bg== 42413
IEVNUFRZ 42414
IHN0YWNrZWQ= 42415
IEhB 42416
X2N1dA== 42417
IHdoZXJlaW4= 42418
IFdheXM= 42419
KGNvdW50ZXI= 42420
6K+V 42421
Rm9ybUdyb3Vw 42422
IGJsZXc= 42423
Y291cnNlcw== 42424
IHByb2R1Y3Rvcw== 42425
cnlz 42426
IFJlc3Ry 42427
IHN0eWxpbmc= 42428
PnM= 42429
IHBpdg== 42430
IGl0ZXJ0b29scw== 42431
Z2V0UmVwb3NpdG9yeQ== 42432
IElr 42433
X2RldmljZXM= 42434
bGF5dWk= 42435
IGhhbGZ3YXk= 42436
IGZyYW7Dpw== 42437
IHR1bmluZw== 42438
T0E= 42439
X05vZGU= 42440
YXJkZQ== 42441
IGZpZXJjZQ== 42442
bGljdGVk 42443
Iw0K 42444
IGJyZWFrdGhyb3VnaA== 42445
IEVyaWs= 42446
IGJyaWRl 42447
IC4i 42448
Y3VsdXM= 42449
aW5zaWRl 42450
IEluZGlhbmFwb2xpcw== 42451
IEVF 42452
IHlvZw== 42453
dXJyZXQ= 42454
LmZz 42455
LmdyYWQ= 42456
X2NhcmRz 42457
X2FjY3VyYWN5 42458
X2VwaQ== 42459
cXVlZGE= 42460
L29yZw== 42461
6aqM 42462
IGNvbXB0ZQ== 42463
KSlb 42464
T3V0c2lkZQ== 42465
R3JlYXRlcg== 42466
IFJlbmRlcmVy 42467
LmFjdG9y 42468
QWNjb3VudHM= 42469
SWRsZQ== 42470
X2hvdXJz 42471
ZXJuZXI= 42472
Sm9pbmVk 42473
IG1lbmo= 42474
cmVxdWlyZXM= 42475
IE9QRVI= 42476
LnJlbW92ZUNoaWxk 42477
CXNw 42478
IGVzc2U= 42479
cmlmdA== 42480
eEZF 42481
IFNoYWtlc3BlYXJl 42482
X19fX19fX19fX19f 42483
IGJ1ZGdldHM= 42484
TW9kZWxTdGF0ZQ== 42485
ZmlsbGFibGU= 42486
LWNvbXBvbmVudA== 42487
b2Nvcw== 42488
IEJVVFRPTg== 42489
L2lv 42490
LG91dA== 42491
c21z 42492
VGhvbWFz 42493
IEFybWVk 42494
cmVzdW1l 42495
IHJvdGF0aW5n 42496
IFZhdWx0 42497
IHNldXM= 42498
Ligq 42499
IGFtaW5v 42500
IFtdKTsKCg== 42501
IHByb3ZvYw== 42502
bm94 42503
LkdldEVudW1lcmF0b3I= 42504
PT09PT09PQo= 42505
5paZ 42506
X3Njcm9sbA== 42507
IGZpbG1lZA== 42508
IFNvY2k= 42509
Z2Fw 42510
Z3Jv 42511
Vm90ZQ== 42512
IkJ1dA== 42513
X1JD 42514
QW5pbWFs 42515
woA= 42516
aWJpbGU= 42517
IGF3YWtlbg== 42518
b3Jlc3Q= 42519
aW5qYQ== 42520
IEl2YW4= 42521
KENvbW1hbmQ= 42522
ICoqKioq 42523
zrc= 42524
IGt2aW5kZXI= 42525
L2hlbHBlcnM= 42526
X2Nhc2Vz 42527
dGc= 42528
7IS4 42529
UmVnaXN0ZXJlZA== 42530
CXBhc3M= 42531
X2RpZ2l0cw== 42532
IGNvbnRvdXI= 42533
IGluZmFudHM= 42534
IGp1c3RpZmljYXRpb24= 42535
IEZvcnR1bmF0ZWx5 42536
Q29udHI= 42537
IG9uQ3JlYXRlVmlldw== 42538
X1NBTVBMRQ== 42539
IGFsbG93TnVsbA== 42540
IG51ZA== 42541
IGZldGNoZWQ= 42542
X2VxdQ== 42543
IFVuYWJsZQ== 42544
PVwiIg== 42545
PnsK 42546
IGNvbW1pdHRlZXM= 42547
aXN0ZW1h 42548
KyIu 42549
w61hbg== 42550
bWFudA== 42551
IHNvdXRoZWFzdA== 42552
77yMCg== 42553
ZGlhbG9ncw== 42554
UFJPSkVDVA== 42555
Y2hhcmdlcg== 42556
LXBvcnQ= 42557
KHV1aWQ= 42558
LmV4cG9ydA== 42559
U2l4 42560
IFJQ 42561
UHJlbQ== 42562
IGNvbnNjaWVuY2U= 42563
IG1hcmdpblJpZ2h0 42564
X2Rpc3RyaWJ1dGlvbg== 42565
eWFtbA== 42566
cmVzaXppbmc= 42567
RG9jaw== 42568
IExvY2F0aW9ucw== 42569
R1k= 42570
U2VlZA== 42571
QlVGRkVS 42572
b3NzaXA= 42573
dWxsZW4= 42574
VGhpbmdz 42575
LXNlbGY= 42576
LnBvbGw= 42577
UExBWUVS 42578
IOWu 42579
R1JPVVA= 42580
IEF3YXk= 42581
IGdvc3BlbA== 42582
eGZk 42583
TWFyeQ== 42584
IFBvcnRhYmxl 42585
VFVSRQ== 42586
IHV0aWxpcw== 42587
IHNlaXQ= 42588
IHN0cmFuZA== 42589
IHRyYW5zYw== 42590
IChe 42591
IEFsZnJlZA== 42592
Lm1lbQ== 42593
LmNpcmNsZQ== 42594
IH4v 42595
Zm9yY2luZw== 42596
IHJpb3Q= 42597
cHJveA== 42598
VEhPTg== 42599
aXphY2nDs24= 42600
IE5J 42601
cm9zdA== 42602
IGRpc3Bybw== 42603
X2luc3RhbmNlcw== 42604
77yM4oCc 42605
b2dyYXBoZXI= 42606
ZW5kYXM= 42607
IElzYWFj 42608
IFBpbmU= 42609
L2Rpcw== 42610
IGNvbG9yV2l0aA== 42611
aXRlcmF0ZQ== 42612
X3N0cmlkZQ== 42613
IHB1bnRv 42614
LkV2ZW50QXJncw== 42615
KGNlbnRlcg== 42616
IG5laWdoYm9yaW5n 42617
IFByaXNvbg== 42618
IE1lc3Nlbmdlcg== 42619
IGVwaWRlbWlj 42620
ZGFv 42621
X2NvbXBsZXg= 42622
IGdyYXZlbA== 42623
X0RJUA== 42624
w6ltZW50 42625
IEFyaQ== 42626
X2JpdG1hcA== 42627
LnF1aXQ= 42628
KHZhbGlk 42629
IHBlbmQ= 42630
IHJlc3BpcmF0b3J5 42631
IHJlYm91bmQ= 42632
RGVmYXVsdFZhbHVl 42633
44Ot 42634
IGNvbW1pdHM= 42635
LnRlc3Rz 42636
X2Zy 42637
aXRldA== 42638
LnNm 42639
IHNwYWNlY3JhZnQ= 42640
Y3JpdGljYWw= 42641
IGRlcHJlc3NlZA== 42642
IEFueU9iamVjdA== 42643
IHVuYg== 42644
IGRpc2Nlcm4= 42645
KG15c3Fs 42646
TGF0aW4= 42647
IEJvZw== 42648
IFdpbGRsaWZl 42649
VG9GaWxl 42650
aW94aWQ= 42651
QFJlc3RDb250cm9sbGVy 42652
ICIkKA== 42653
IDw8Ig== 42654
IGRlZmVjdHM= 42655
IGRhdHVt 42656
aGlu 42657
IHJlYWxpemFy 42658
YW55YWh1 42659
IFNpZw== 42660
QERhdGE= 42661
YWRhcHRpdmU= 42662
IENhdGhlcmluZQ== 42663
LmNy 42664
IENPT0tJRQ== 42665
IHBpY3R1cmVk 42666
IEZpZ2h0ZXI= 42667
UXVlcnlhYmxl 42668
IEFueXdheQ== 42669
IEdMRlc= 42670
X25hbWVzcGFjZQ== 42671
X2Z0 42672
IF0p 42673
T3JnYW5pemF0aW9u 42674
IGNvbnN0aXR1dGVz 42675
IHF1YW5k 42676
KGNodW5r 42677
Ii8+DQo= 42678
IExha2Vz 42679
bWFpbndpbmRvdw== 42680
Q2FydGh5 42681
c3Bpbg== 42682
KGNzdg== 42683
OnJlZA== 42684
LWNvbW1lcmNl 42685
4Li5 42686
IGRpc2NvdmVyaW5n 42687
IGVjbw== 42688
X2ZhYw== 42689
aW5jZXRvbg== 42690
IEdyZWVucw== 42691
and0 42692
2LU= 42693
IEJyb25jb3M= 42694
IEdvb2Rz 42695
KEdUSw== 42696
IHJldHVyblZhbHVl 42697
IHNpZW1wcmU= 42698
IG5ldXRy 42699
d2VudA== 42700
IE5hdGFs 42701
IGVudGh1c2lhc3RpYw== 42702
4buN 42703
Rk4= 42704
L2RhdGFiYXNl 42705
Q2F0YWxvZw== 42706
IGJydW4= 42707
IEthc2g= 42708
X1Bs 42709
aXNjcmlt 42710
LHdpZHRo 42711
IGlubWF0ZXM= 42712
QXNzaWdubWVudA== 42713
IEhhdmVu 42714
IHBsYXlncm91bmQ= 42715
ZXhhbQ== 42716
QENvbnRyb2xsZXI= 42717
dWxpYXI= 42718
LmdldFBhcmVudA== 42719
ICI7Cgo= 42720
OnNpemU= 42721
aXNzb3Jz 42722
IGZpcw== 42723
IGFsYw== 42724
ZW5zYXRpb24= 42725
IE5peG9u 42726
IG1pZ2h0eQ== 42727
LXN0cg== 42728
X3NwZWNpYWw= 42729
X0FEQw== 42730
IFR3aWc= 42731
dW1ibGluZw== 42732
LWFkZHJlc3M= 42733
IGhlcm9pbg== 42734
WVRF 42735
ICAgICAgICAgICAgICAgICAK 42736
RnJpZW5k 42737
IGF2ZQ== 42738
IFBORw== 42739
IEt1cmRpc2g= 42740
RGF0YVNldENoYW5nZWQ= 42741
IGJsYWRlcw== 42742
YnJhbA== 42743
U3RlYW0= 42744
IHNpZ3U= 42745
SVJUVUFM 42746
YWNvcw== 42747
VURQ 42748
KGRhdGFiYXNl 42749
aGVj 42750
IFN0cmluZ3M= 42751
X3NjYWxhcg== 42752
CWRlc2M= 42753
IFRMUw== 42754
OyIK 42755
IENvcmJ5bg== 42756
U2ltcGxlTmFtZQ== 42757
dWVsbA== 42758
IEVudHJl 42759
ZWxsaXRlcw== 42760
LXBsYWNl 42761
IGZyYW5rbHk= 42762
IEVyZg== 42763
Q0VM 42764
IHBhw61z 42765
IGhlZGdl 42766
IGxhdGVudA== 42767
IElSUQ== 42768
IEhlcmFsZA== 42769
IFByZWM= 42770
67O0 42771
LlRFWFQ= 42772
U2FsYXJ5 42773
IGF1dHVtbg== 42774
IHRyYXZhaWw= 42775
LlN1bQ== 42776
IGNhcmVk 42777
TW9y 42778
IGludHVpdGl2ZQ== 42779
IGpvdXJuYWxz 42780
X0lU 42781
IFRyb3U= 42782
5Lyg 42783
SGFzQ29sdW1uTmFtZQ== 42784
Q29tcG9zaXRl 42785
IHNwaWNl 42786
X2Rpc2s= 42787
X0NPREVT 42788
IEludHJvZHVjZWQ= 42789
aW9uYQ== 42790
IG51ZXN0cmE= 42791
b2N0 42792
ICAgIAogICAgCiAgICAK 42793
KHBhcmFtZXRlcg== 42794
IHN0dWRpb3M= 42795
IHByb2plY3RJZA== 42796
IGJkc20= 42797
LlNxbENsaWVudA== 42798
aW1pemVy 42799
IENBUkQ= 42800
K3Q= 42801
YWFu 42802
LnNvbA== 42803
X0FkanVzdA== 42804
IHJpZ2h0ZW91cw== 42805
IExvZ2dpbmc= 42806
LmZpbHRlcnM= 42807
X1RBQg== 42808
CXN5cw== 42809
cm9waGlj 42810
b3RoZXJhcHk= 42811
IEJyb3dzZQ== 42812
a2V5Ym9hcmQ= 42813
Uk9O 42814
K1w= 42815
cm9wcGVk 42816
IGV4dGVuc2l2ZWx5 42817
Zms= 42818
IGxpbWU= 42819
eWVhcnM= 42820
RXhj 42821
IHNwaA== 42822
IGNoZWF0aW5n 42823
YW5kcm8= 42824
w61v 42825
IHByaW5jZQ== 42826
b2lyZQ== 42827
IERlc3RpbmF0aW9u 42828
IENvbnZlcnRz 42829
IHVwc3RyZWFt 42830
b2xlZA== 42831
IHNlcnZhbnRz 42832
IHNlbWFudGlj 42833
IGNydW5jaA== 42834
IGV2ZW50dWFs 42835
cnVubmVy 42836
L2Vycm9y 42837
U3Bpbg== 42838
IHNlY3JldGx5 42839
IGFzc2VtYmxl 42840
LlBlcnNvbg== 42841
ZW5kZXJyb3I= 42842
Xzw= 42843
IHBlbmRhbnQ= 42844
U2xlZXA= 42845
IENoZW1pc3RyeQ== 42846
IGJvc3Nlcw== 42847
bGs= 42848
KSkpLAo= 42849
QmxvY2tseQ== 42850
REVWSUNF 42851
IHJlZmxlY3Rpbmc= 42852
IGFtcGxl 42853
TWlsbGlzZWNvbmRz 42854
IFByZXNpZGVudGlhbA== 42855
IHVzdWFyaW9z 42856
IE5a 42857
IFNhbGFyeQ== 42858
IEFtYW5kYQ== 42859
X25w 42860
anVyeQ== 42861
IGvDtm4= 42862
IHRoZXJhcGlzdA== 42863
IGhvbW9zZXh1YWw= 42864
IERyYWtl 42865
LXdpbmRvdw== 42866
IExvY2F0ZWQ= 42867
LkRyaXZlcg== 42868
IFZJREVP 42869
IG1lcmNoYW50cw== 42870
IENoZXN0 42871
LWxvY2s= 42872
L3BocA== 42873
IG1pbGFubw== 42874
X1NUWUxF 42875
YXJnZXI= 42876
aWRlYQ== 42877
R1VJRA== 42878
YWR2YW5jZWQ= 42879
bWVhbA== 42880
T3B0aW9uc0l0ZW1TZWxlY3RlZA== 42881
PScl 42882
IENoYW0= 42883
OmRhdGE= 42884
KHN0YXQ= 42885
V2lsbEFwcGVhcg== 42886
IGluZm9ybWFs 42887
YWpp 42888
IHJlcHJvZHVjdGl2ZQ== 42889
IENBUw== 42890
44Gj 42891
RlVOQw== 42892
IFJ1dGg= 42893
KSso 42894
Q09OU1Q= 42895
IEZhbnM= 42896
IGdyb3VwSWQ= 42897
eGZmZmZmZmZm 42898
IHNhbXBsZXI= 42899
IH19Ij4= 42900
LnRoZQ== 42901
IGhvbGxvdw== 42902
V0FZ 42903
IEZhY3VsdHk= 42904
QXR0cmlidXRlZFN0cmluZw== 42905
IExvb2tz 42906
IFJleA== 42907
ams= 42908
IE1JTA== 42909
IGJhcmQ= 42910
Lkxvbmc= 42911
IGxpdmVzdA== 42912
IHNrYWw= 42913
aWNpc20= 42914
TUFJTg== 42915
IG11Y2hv 42916
Qk9EWQ== 42917
IGVzZQ== 42918
CXVzZQ== 42919
Rm9vdA== 42920
LlNRTEV4Y2VwdGlvbg== 42921
IGluaGVyaXRhbmNl 42922
cmVjZWl2ZWQ= 42923
IHB1dGFz 42924
ZWRpcw== 42925
YWxzYQ== 42926
IEVycm9yTWVzc2FnZQ== 42927
Qm9va2luZw== 42928
IHRyYWN0 42929
YWN6 42930
IENhbnQ= 42931
X3JlZ2V4 42932
IGlkZW9sb2dpY2Fs 42933
IGppaGFk 42934
aG9z 42935
L3N5cw== 42936
Y29sbQ== 42937
KHBvb2w= 42938
IGVzdMOhbg== 42939
IFBlbmRpbmc= 42940
ZW3DoXM= 42941
IGt0w7NyeQ== 42942
KSk7CgoK 42943
dHJhbnNhY3Rpb25z 42944
IHdpZWxk 42945
aXRlcmU= 42946
ZXJ0dXJl 42947
X3Nz 42948
IHN0cmV0Y2hpbmc= 42949
IHByaXNvbmVy 42950
LlJlYWRBbGw= 42951
IGJlc2No 42952
LS07DQo= 42953
IGNyaXNw 42954
X1NDQU4= 42955
IGFl 42956
U3RyaWN0 42957
IE1pbm5lYXBvbGlz 42958
IEJvZWluZw== 42959
YXJpcw== 42960
cmVr 42961
X3BpcGU= 42962
IHByaWVzdHM= 42963
KEVJRg== 42964
ZWhpY2xlcw== 42965
IEludGVyYWN0aXZl 42966
YmV0d2Vlbg== 42967
CU51bGxDaGVjaw== 42968
IEJsYWly 42969
IEx0 42970
X2lubGluZQ== 42971
ZXRoeWw= 42972
wrw= 42973
X3BhY2thZ2Vz 42974
IGJhcnJlbHM= 42975
X2hl 42976
IHJlZ2V4cA== 42977
X3B0cw== 42978
X0hhbmRsZXI= 42979
aW5ndWxhcg== 42980
IE5pc3Nhbg== 42981
IFJhbmNo 42982
IHBlcmNo 42983
VW5zdXBwb3J0ZWQ= 42984
U21pdGg= 42985
IExlZ2VuZHM= 42986
TWk= 42987
IGdm 42988
c3RlZGVy 42989
IGFjcXVpcmluZw== 42990
IHNpbXVsYXRvcg== 42991
KCksIg== 42992
cmVjZWl2ZQ== 42993
IGlucGxhY2U= 42994
QUNUSU9O 42995
IFdlYkRyaXZlcg== 42996
ZmlsZXN5c3RlbQ== 42997
PE9yZGVy 42998
bG9wZW4= 42999
IEhFSUdIVA== 43000
LnNldEJvcmRlcg== 43001
jbA= 43002
X19bIg== 43003
IGNsYW1w 43004
U2Vnb2U= 43005
YmFuZHM= 43006
dG9MaXN0 43007
YW1iYQ== 43008
PicrCg== 43009
IGNyZWRpYmxl 43010
YW1hdA== 43011
cGxheWluZw== 43012
LnNldEltYWdlUmVzb3VyY2U= 43013
cXVlbA== 43014
IHBvZHI= 43015
Z2VvbQ== 43016
RWs= 43017
IFFhdGFy 43018
IGdlbGQ= 43019
PycsCg== 43020
IGN5bA== 43021
KGF4 43022
IFdJ 43023
dXJhbGx5 43024
IEJyYXNpbA== 43025
IHNlbnph 43026
YWxleQ== 43027
b25lbg== 43028
IGJhaA== 43029
IG1vbGVjdWxl 43030
UmFk 43031
6L+w 43032
QU5DSA== 43033
LWJhY2tncm91bmQ= 43034
LWFnZW50 43035
IHByb2xpZmVy 43036
OmJvb2xlYW4= 43037
IHRpZGU= 43038
ZXJpYWxpemVy 43039
XzsNCg== 43040
RmVl 43041
Kiop 43042
ZXJneQ== 43043
IEhvbm9y 43044
LkxvZ2dpbmc= 43045
aXJpcw== 43046
IHVuZGVybWluZQ== 43047
IER5 43048
IHR5cg== 43049
IGRlcXVl 43050
IGRhbWVy 43051
KFtdKQo= 43052
LmxheW91dENvbnRyb2xJdGVt 43053
cGVhdGVk 43054
Q0FO 43055
cmFnbWVudHM= 43056
TGFuZA== 43057
KV0pOwo= 43058
IFNhaA== 43059
IERFQ0w= 43060
V2l0aGlu 43061
IE5hbWVzcGFjZQ== 43062
YW5vdGhlcg== 43063
c2VtYmxpbmc= 43064
LmRlc2NyaWJl 43065
Q29uc3Vt 43066
IEZlYXI= 43067
Z2l2ZW4= 43068
T3Jhbmdl 43069
PGJvb2xlYW4= 43070
IHN0ZWFkaWx5 43071
cGFSZXBvc2l0b3J5 43072
IHJlc3VsdFNldA== 43073
X0VOVEVS 43074
X3JlcGVhdA== 43075
IHRvbmVz 43076
IFBST1A= 43077
bmFs 43078
cGFydGljbGU= 43079
IHNpZ25hbGluZw== 43080
IGFjY2Vzc29yeQ== 43081
CQkJCQkJICA= 43082
IHZpZWxl 43083
IE5vYWg= 43084
LWFn 43085
IG11cmRlcnM= 43086
IGFpcmVk 43087
IFBMQVk= 43088
IFN1bGxpdmFu 43089
X0NvcmU= 43090
IHVsb25n 43091
IGJsb2dnaW5n 43092
PlRoaXM= 43093
IGRhdGFJbmRleA== 43094
IHByaW50YWJsZQ== 43095
IEV5ZXM= 43096
X3RhcmdldHM= 43097
KFB5 43098
Lm92ZXI= 43099
IGJydQ== 43100
YW1wdG9u 43101
IHBsYWludGlmZg== 43102
PEtleQ== 43103
YnVsbA== 43104
IOKfqA== 43105
SXNzdWU= 43106
LmNvcm5lclJhZGl1cw== 43107
Q3JpdGljYWw= 43108
X3BoaQ== 43109
LmFuZ2xl 43110
IGR5bmFtaWNhbGx5 43111
ISIpOw0K 43112
Pik7Cg== 43113
aW52ZXN0 43114
LioKCg== 43115
IHTDqWzDqQ== 43116
IHN1cGVyZg== 43117
IGNhc2NhZGU= 43118
RFRE 43119
IHZpdmlk 43120
IHN1YnNpZGllcw== 43121
IEhhc3M= 43122
IGNvbGxhcHM= 43123
IGNlcmFtaWM= 43124
e30iLg== 43125
IExlYWthZ2U= 43126
LXRyYXNo 43127
Y29sbGFwc2Vk 43128
LXNvY2lhbA== 43129
IENoYWQ= 43130
IGluY2xpbmVk 43131
IHN0bw== 43132
IHN0b3J5Ym9hcmQ= 43133
LnBheW1lbnQ= 43134
c3RhY2tvdmVyZmxvdw== 43135
IFJhaWRlcnM= 43136
ICMn 43137
b2xpY2llcw== 43138
7Jy866Gc 43139
ZW1hcA== 43140
IGtq 43141
IHF1b3Rh 43142
IEdhcmRlbnM= 43143
67KI 43144
IEFuZ2Vscw== 43145
IG9mdA== 43146
IGxvd2VyY2FzZQ== 43147
IGlQYXJhbQ== 43148
IGNoZWFwZXN0 43149
dW50YQ== 43150
X3BrdA== 43151
aWNhdG9ycw== 43152
IGxldXJz 43153
IGRlY3JlYXNlcw== 43154
CWRlZmluZQ== 43155
UFJFQw== 43156
YW1tZXJz 43157
IFByZXBhcmVkU3RhdGVtZW50 43158
KGRpcmVjdGlvbg== 43159
IGNyZXdz 43160
YXJrZWQ= 43161
IE1lbXBoaXM= 43162
IFNlbGw= 43163
R1RL 43164
IG1haWQ= 43165
OmRpc2FibGU= 43166
6ZuG 43167
IFBm 43168
IGFsYmVpdA== 43169
b3Blbmg= 43170
Pz4iPgo= 43171
LmdldFNvdXJjZQ== 43172
KHNjYWxl 43173
RHU= 43174
IFBJTA== 43175
X3JlZnJlc2g= 43176
IGJldHM= 43177
KGNhcg== 43178
IFZvbg== 43179
fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== 43180
IEdyYXQ= 43181
TXVjaA== 43182
KERpYWxvZw== 43183
LnN0b3BQcm9wYWdhdGlvbg== 43184
IHRlaw== 43185
IGV4aXRz 43186
J10sJA== 43187
IHBob25lTnVtYmVy 43188
dWNz 43189
ZWNpbWFs 43190
LS0tLS0tLS0tLS0tLS0= 43191
aW5w 43192
LnBvam8= 43193
IGNvcnB1cw== 43194
IHByYWN0aXRpb25lcnM= 43195
LnBpYw== 43196
InRlc3Rpbmc= 43197
IHN0cmluZ0J5 43198
Lk5vdE51bGw= 43199
IHJhbmc= 43200
LkR5bmFtaWM= 43201
X1JlbmRlcg== 43202
0LDRgtCw 43203
V2FpdGluZw== 43204
IFdpaw== 43205
IG92ZXJ3aGVsbWVk 43206
JSI+ 43207
IEFF 43208
fX0+Cg== 43209
dXc= 43210
X3R5cA== 43211
IGJ1Y2tldHM= 43212
IGdyZWV0aW5n 43213
IGxhdWdodGVy 43214
IGFudGFnb24= 43215
dWdnZXN0aW9u 43216
LWVtYWls 43217
CXRvcA== 43218
IGVyb3M= 43219
X3RyaQ== 43220
IGlzc3Vpbmc= 43221
IGjDoQ== 43222
IGlzb2xhdGU= 43223
T3ZlcmZsb3c= 43224
LEU= 43225
IG51dHJpdGlvbmFs 43226
IEFiYm90dA== 43227
IG5m 43228
LnRvdWNo 43229
LmZldGNoYWxs 43230
X3ppcA== 43231
Iil9Cg== 43232
IGFtYXQ= 43233
IENpc2Nv 43234
IG7DpQ== 43235
UExFWA== 43236
IHNlaQ== 43237
Zm90bw== 43238
LnRvSnNvbg== 43239
5aSa 43240
IEtsZWlu 43241
IGxpYmM= 43242
IG1pbmVycw== 43243
5aI= 43244
LXByaW50 43245
IFByaWRl 43246
VG9kb3M= 43247
IG1hc2tlZA== 43248
IHNldERhdGE= 43249
IHRlbGVmb24= 43250
IHVuaGFwcHk= 43251
IFRhYmxlcw== 43252
Z2Vi 43253
KGRlYnVn 43254
X2FsbG93ZWQ= 43255
LWFjY2Vzcw== 43256
IGxvZ2lzdGljcw== 43257
IGdlbXM= 43258
IE1hdHVyZQ== 43259
IHJzcA== 43260
IEFsbGU= 43261
LmdldEJ5dGVz 43262
XHdlYg== 43263
eW5jaHJvbml6ZWQ= 43264
UGFyYWdyYXBo 43265
IHRocm90dGxl 43266
LnNxbGl0ZQ== 43267
Y29uc3VsdGE= 43268
IFNlYWg= 43269
Q2U= 43270
IHN1Ym1hcg== 43271
RVJF 43272
Vm91cw== 43273
IHJlZGRpdA== 43274
IHNxbGFsY2hlbXk= 43275
LW1pbGU= 43276
b2NpZGU= 43277
UG91cg== 43278
fX0iPgo= 43279
c3RlYWQ= 43280
IEAo 43281
IFtdKQ== 43282
IEFkcw== 43283
IG92ZXJsb2Fk 43284
cmlkZGVu 43285
IERlc2VydA== 43286
IFdyYXA= 43287
IFBvcnR1Z3Vlc2U= 43288
ZXR6 43289
CWZpcnN0 43290
IG1pbGVzdG9uZQ== 43291
5peg 43292
0YPRiQ== 43293
KHN1Y2Nlc3M= 43294
PFZlY3Rvcg== 43295
Y29vbA== 43296
IFtdKTsK 43297
ZXJ2YWxz 43298
IGludmVydA== 43299
Imlv 43300
Y3Vyc28= 43301
ZnJhZ21lbnQ= 43302
IGZlYXNpYmxl 43303
LnNldFBvc2l0aW9u 43304
IGVsbQ== 43305
IGltYWdpbg== 43306
QFNwcmluZw== 43307
IGJhdHM= 43308
cHXDqXM= 43309
Z2FsZW1lbnQ= 43310
bnNpYw== 43311
Z2llbmU= 43312
ZWxsYXRpb24= 43313
IEJhaWxleQ== 43314
U2hhcg== 43315
IFR1bA== 43316
IEhL 43317
IGZyZWV6aW5n 43318
Z2xt 43319
Y2VhbnM= 43320
LWN1dA== 43321
X2NpcmNsZQ== 43322
5ZGY 43323
bmVnYXRpdmU= 43324
IGluZGlhbg== 43325
c2FsdA== 43326
IHRpbmc= 43327
CW1vZA== 43328
IHNpbnQ= 43329
YWtpbg== 43330
dW1s 43331
IFRleHRJbnB1dA== 43332
IHBvcHBlZA== 43333
VE1Q 43334
IHBhcmtlZA== 43335
15nX 43336
IEZ1c2lvbg== 43337
IGhlYXRlcg== 43338
RVRG 43339
cm96ZW4= 43340
aGFsbA== 43341
IE1paw== 43342
bGV2YXJk 43343
LWhlYXJ0 43344
CW9yZGVy 43345
TWFraW5n 43346
IHBsZWRnZWQ= 43347
IGRpcnM= 43348
JHBvc3Q= 43349
IEhlcnI= 43350
c3RhbnRpYXRl 43351
LCIK 43352
LmdldENvbG9y 43353
IFNBVA== 43354
IHRpbWVkZWx0YQ== 43355
IE1haQ== 43356
CW1ldGhvZA== 43357
IGlkaW90 43358
IFRyYXY= 43359
aWRlbnRpZmllZA== 43360
IERpdmluZQ== 43361
LmdldFBhdGg= 43362
RGFzaA== 43363
IGluZmlsdHI= 43364
IGhhbmRsZVN1Ym1pdA== 43365
YnJvb2s= 43366
LmdlbmVyaWM= 43367
LnNob3J0Y3V0cw== 43368
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg== 43369
IGRhdGluZ3M= 43370
IE1W 43371
77u/Iw== 43372
fSIKCg== 43373
IGltcHJpc29ubWVudA== 43374
YXNvbmlj 43375
cm91ZA== 43376
dWNpb24= 43377
5oql 43378
IGRpYWxlY3Q= 43379
IG9uTW91c2U= 43380
Y29uc3RleHBy 43381
LmxhYmVsQ29udHJvbA== 43382
IHdlYWtlcg== 43383
IG1hbmtpbmQ= 43384
IFJFQ0U= 43385
IGRpeg== 43386
IGFwcEJhcg== 43387
IHF1w6k= 43388
ZnJh 43389
X2RlZmF1bHRz 43390
IGFsaXF1 43391
X2F0b20= 43392
OmluZGV4UGF0aA== 43393
IG1pc3Nlcw== 43394
IHZpc3VhbGx5 43395
IEhhbmRz 43396
U1RSVQ== 43397
aWF0ZXM= 43398
X2Fzc2V0 43399
RmluZGVy 43400
bWlkdA== 43401
IHNuYWNrcw== 43402
KF9fKCc= 43403
LnVyaQ== 43404
IEluc3RydW1lbnQ= 43405
dmVuaXI= 43406
KCRfXw== 43407
LkRvdE5ldEJhcg== 43408
IGNvbmZpZ3M= 43409
IGd1ZXNzZWQ= 43410
4KS/4KQ= 43411
IGluaXRpYWxpemVy 43412
ID8iLA== 43413
IFZlcml6b24= 43414
bWFuaWZlc3Q= 43415
Z2ViZW4= 43416
LmRldGFpbHM= 43417
R2F0ZQ== 43418
cG9uc2libGU= 43419
IEVsaW0= 43420
LHN0cg== 43421
IHdyaXRpbmdz 43422
IERlcmVr 43423
IENvb3JkaW5hdG9y 43424
IHBpbGxvdw== 43425
IG5vdGljZWFibGU= 43426
UnM= 43427
IGR1cGxpY2F0ZXM= 43428
ZXJuZWxz 43429
a0o= 43430
Lnp6 43431
b2xsYW5k 43432
IFNFQ1RJT04= 43433
X2ZuYW1l 43434
dWZmbGVk 43435
J10uJzwv 43436
X0NN 43437
IHly 43438
cGxhdA== 43439
b2JvZHk= 43440
bmRl 43441
KEVsZW1lbnQ= 43442
IEF0bGFz 43443
IO+8iA== 43444
IG5pdmVs 43445
IGluc2lzdHM= 43446
W1A= 43447
IGVudGh1c2lhc3Rz 43448
IOyeheugpQ== 43449
IGJldmVyYWdl 43450
e30iLA== 43451
OnJpZ2h0 43452
IG5vdXZlYXU= 43453
IENvbXBsZQ== 43454
IFBhZw== 43455
b3ducw== 43456
IHJlbWVtYmVycw== 43457
IFByYWRlc2g= 43458
IGNoYWxr 43459
IExhdXJlbg== 43460
XFNlcnZpY2U= 43461
X0dFTg== 43462
PiIpCg== 43463
IERvbGxhcg== 43464
IGVtb2pp 43465
Q2Fyb3VzZWw= 43466
LXBsYXllcg== 43467
IGFkanVzdGluZw== 43468
IGp1Z2E= 43469
YWxsZW5nZXM= 43470
Z2VuZQ== 43471
KGJvZHlQYXJzZXI= 43472
bG9wZWRpYQ== 43473
IEJlaGluZA== 43474
IHNsZWV2ZXM= 43475
IGRyYWdnaW5n 43476
IENoZXZyb2xldA== 43477
IGJpeg== 43478
aXZpdGllcw== 43479
IEZyZXF1ZW5jeQ== 43480
LGNoYXI= 43481
LldISVRF 43482
X3ByZXZpZXc= 43483
KSc7Cg== 43484
X2F4 43485
SU9OUw== 43486
LmNwdQ== 43487
LmlucHV0cw== 43488
VUJF 43489
X2ZlZWQ= 43490
IFN1cHBsZW1lbnQ= 43491
ISku 43492
ZXN1cw== 43493
IFVEUA== 43494
IG1pY3JvcGhvbmU= 43495
IGNvbmZpcm1z 43496
LmlzTm90RW1wdHk= 43497
IjoiIiwK 43498
X1NDUkVFTg== 43499
CWV4cGVjdGVk 43500
Ky0rLSstKy0= 43501
IEhhaXQ= 43502
ZmFzdGNhbGw= 43503
IGRlcGljdA== 43504
dmI= 43505
X3BpY3R1cmU= 43506
CWRlc2NyaXB0aW9u 43507
IFdpZmU= 43508
dWNp 43509
IHZpY2lvdXM= 43510
5LuW 43511
dWViYQ== 43512
IHNldFVzZXI= 43513
44Gh 43514
IGRpdmluZw== 43515
IG9wZXJh 43516
dXNlcmNvbnRlbnQ= 43517
YXJhaA== 43518
KX0s 43519
eXVu 43520
dmVsdA== 43521
IHVuY292ZXJlZA== 43522
IGhpcHM= 43523
IG9zY2lsbA== 43524
IGFzc2VydGluZw== 43525
IFhp 43526
LnJlc3RvcmU= 43527
a2Vh 43528
IHNwZWxsaW5n 43529
IGRlcml2ZQ== 43530
YWJ3ZQ== 43531
IERvdw== 43532
LnNldFR5cGU= 43533
X3Zz 43534
IGNvenk= 43535
LmNhdGVnb3JpZXM= 43536
T3Jn 43537
X21ncg== 43538
IGR1bmdlb24= 43539
Y29sbGVjdGlvblZpZXc= 43540
IEJsYW5r 43541
YWNpYXM= 43542
w6TDpA== 43543
X2NsZWFudXA= 43544
X0FDVElWSVRZ 43545
IHRyaWFuZ2xlcw== 43546
Lk1lbnVJdGVt 43547
IGlwaG9uZQ== 43548
IFdvbg== 43549
XV0KCg== 43550
IENvbXBhcmlzb24= 43551
LkRvYw== 43552
IGNhbm9uaWNhbA== 43553
IFN1ZGFu 43554
Jyl7 43555
VXBJbnNpZGU= 43556
YnVpbHRpbg== 43557
RU5DWQ== 43558
eGJl 43559
IGNodWNr 43560
IGNvbnRyYWRpY3Q= 43561
IG51ZXN0cm8= 43562
IGFyY2hpdGVjdHVyYWw= 43563
IEZpYg== 43564
IGNvbXBhcmVz 43565
Kms= 43566
Q2Zn 43567
54Sh 43568
bnRlbg== 43569
TWF0Y2hlcw== 43570
IERPV05MT0FE 43571
X0hBTkRMRVI= 43572
bWFuYWdlbWVudA== 43573
W1M= 43574
RU5H 43575
woDC 43576
ZmFuZw== 43577
IHNsaXBwZWQ= 43578
IExhbmth 43579
ZXNjYXBpbmc= 43580
IHRhY2tsZXM= 43581
IFBlZHJv 43582
LlByb3A= 43583
Licn 43584
LkdlbmVyYXRlZA== 43585
Lk5ld0d1aWQ= 43586
YXRyaWdlc2ltYWw= 43587
aWxsb24= 43588
IHN0YXRpc3RpYw== 43589
c3BlY2llcw== 43590
aG9sZGluZw== 43591
RHJ1cGFs 43592
IGZ1bmRhbWVudGFsbHk= 43593
IGJvbmRhZ2U= 43594
IHJlc29sdXRpb25z 43595
SW5saW5lRGF0YQ== 43596
XFR5cGU= 43597
ZXN0aW9u 43598
LndyYXA= 43599
IHdhcnJpb3Jz 43600
IExPQ0FM 43601
QXJjaGl2ZQ== 43602
IGVtYnJhY2Vk 43603
4bun 43604
LlZlcg== 43605
IEFmZm9yZGFibGU= 43606
b2xlc2FsZQ== 43607
IEFwcGxpZWQ= 43608
IENvbnZlcnNpb24= 43609
bWVnYQ== 43610
X2NhbQ== 43611
IGNlcmVtb24= 43612
YXVydXM= 43613
IFZvbGs= 43614
Lm9wZW5z 43615
L2Fib3V0 43616
IFN0ZA== 43617
am91cm5hbA== 43618
KCkpew0K 43619
LCJc 43620
KEFycmF5cw== 43621
IERlbnNl 43622
YXNlw7Fh 43623
w6RubmVy 43624
L3N0YXQ= 43625
dXNlckRhdGE= 43626
IGdlcm1hbg== 43627
IHR6 43628
d29ydGh5 43629
Rm9ybWF0RXhjZXB0aW9u 43630
cGhlcmQ= 43631
IHNtaWxlcw== 43632
IFdoZW5ldmVy 43633
KGFkYXB0ZXI= 43634
LmJhZGxvZ2lj 43635
IGJyaWVmaW5n 43636
LkdyaWRDb2x1bW4= 43637
LWNoYXI= 43638
ZGltZW5zaW9u 43639
IENvcHBlcg== 43640
IG5pbnRo 43641
ICd7ew== 43642
IHJhdg== 43643
X1RhYmxl 43644
IGRlcml2YXRpdmVz 43645
IFJhaXNl 43646
IEZ1dA== 43647
YXJtb3I= 43648
LXBhZGRpbmc= 43649
IHJlbWlu 43650
CXN0eWxl 43651
IE1lbWJlcnNoaXA= 43652
IHNwcmVhZHM= 43653
IGdhbGxlcmllcw== 43654
IENsYXJrZQ== 43655
IGNvbmNlcHRpb24= 43656
bWludXRl 43657
IGFidXNpdmU= 43658
X2Fkag== 43659
IHRlcnJpZmlj 43660
IG92ZXJ0 43661
b3VyY2luZw== 43662
IGVudHJhZGE= 43663
bGV2ZWxz 43664
IGNyaXRpcXVl 43665
IHJlc3BlY3Rz 43666
IE1NQQ== 43667
aWVuZQ== 43668
IGVuY2Fwcw== 43669
IFJheW1vbmQ= 43670
RGl2aWRlcg== 43671
aXZhYmxl 43672
YmF6 43673
IEBfOwo= 43674
IENsYWlyZQ== 43675
IHVyZ2luZw== 43676
Q0VF 43677
IHRyYW5zZm9ybWVy 43678
ZGlzY29yZA== 43679
IEpvdXJuZXk= 43680
dG9z 43681
IGNvbXBldGl0aW9ucw== 43682
IE9CSg== 43683
IEJpcw== 43684
IHJlbGF4YXRpb24= 43685
aWR5 43686
X0lOU1RBTkNF 43687
IFByZWY= 43688
ZGFkb3M= 43689
aWNpZW5jaWVz 43690
IE1lZGlhUXVlcnk= 43691
IEN1YmU= 43692
IFN0cmFuZ2U= 43693
Z3B1 43694
KGRheXM= 43695
X0luaXRTdHJ1Y3Q= 43696
IGZpbmdlcnByaW50 43697
ZW1hdA== 43698
IEdlY2tv 43699
IHJhaWxz 43700
IEx1bQ== 43701
c3RyYWN0aW9u 43702
aWd1bmc= 43703
KG1vdmll 43704
X2RpY3Rpb25hcnk= 43705
X2ludGVycnVwdA== 43706
IFFD 43707
aWtlZA== 43708
YXBwZW5kQ2hpbGQ= 43709
cmVjaXBpZW50 43710
csOp 43711
VmU= 43712
IHRvd2Vs 43713
Lmxhc3RJbmRleE9m 43714
IHBsYWNlYm8= 43715
IFdpZQ== 43716
LmVzcA== 43717
KERlYnVn 43718
b3BlcmF0aXZl 43719
IGRlY2Vhc2Vk 43720
Jmlk 43721
CW11dGV4 43722
ZWxpYw== 43723
IGJhcHQ= 43724
CQ0KDQo= 43725
IGZhcnRoZXI= 43726
SGFsZg== 43727
LmRpc2FibGU= 43728
Lm1lbnVTdHJpcA== 43729
bGVjY2lvbg== 43730
IHJlc3VsdENvZGU= 43731
IGNhbnM= 43732
LWVsZWN0aW9u 43733
ZmVtYWxl 43734
X0ZJWA== 43735
YXVzaWJsZQ== 43736
IFBPV0VS 43737
IHJlY29uc3RydWN0aW9u 43738
IHNjYW5z 43739
Llh0cmFCYXJz 43740
4oCYcw== 43741
UmVtb3ZlZA== 43742
IHBhcmFncmFwaHM= 43743
X21hcmdpbg== 43744
IGx5bXBo 43745
IGJvcw== 43746
bGluZ3Rvbg== 43747
IEJhcHRpc3Q= 43748
IGFkdmVydGlzZW1lbnRz 43749
IE1hbmFnZQ== 43750
L3l5eXk= 43751
SU9VUw== 43752
RU5DRVM= 43753
IEZpY3Rpb24= 43754
CW1lbnU= 43755
IEZpbGVPdXRwdXRTdHJlYW0= 43756
b3Zhbg== 43757
IEZlbmc= 43758
IHNraXBwaW5n 43759
Z2V0Q2xhc3M= 43760
YW5uaQ== 43761
IHJlYm91bmRz 43762
IHB1YmxpY2l0eQ== 43763
IGluZ3Jlcw== 43764
dXNlbWVudA== 43765
IHRob3VnaHRmdWw= 43766
LkNoYXJ0 43767
IGhhdHRl 43768
cGFzc3BvcnQ= 43769
IGhvb2tlZA== 43770
IExlbnM= 43771
IGZsYWdzaGlw 43772
IHN0aXA= 43773
IEdFTg== 43774
IGNsdWVz 43775
aXB2 43776
IFJpc2U= 43777
IEdldw== 43778
dGFibGVuYW1l 43779
IGZvcmVtb3N0 43780
X3ZhbGlkYXRl 43781
X2FuYWx5c2lz 43782
b2xsYQ== 43783
IHF1YWxpZmljYXRpb25z 43784
IGRpc3RyaWJ1dGlvbnM= 43785
IEZsb3dlcg== 43786
IHRlbnNl 43787
IHRoYW5rZnVs 43788
IGNsdXRjaA== 43789
IHVuaWZpZWQ= 43790
cm9hZHM= 43791
IHNpdGk= 43792
IHN0YWxs 43793
X1BSSU9SSVRZ 43794
Y3N0ZGxpYg== 43795
X1VTRVJOQU1F 43796
LmJ5dGVz 43797
P3BhZ2U= 43798
ZXJtYWxpbms= 43799
IFZlZ2V0 43800
L3ZuZA== 43801
LWF1dGhvcg== 43802
Lk5PTkU= 43803
IENvbmN1cnJlbnQ= 43804
IENyeQ== 43805
IHN0YXJ0ZXJz 43806
IEludGVyYWN0aW9u 43807
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 43808
IExFVkVM 43809
RWxs 43810
IGNvbWJvQm94 43811
IFRoZXJlc2E= 43812
dGVr 43813
X0hhbmRsZQ== 43814
IGFieQ== 43815
LmdkeA== 43816
LGVuZA== 43817
KExvY2Fs 43818
T2w= 43819
a25pZmU= 43820
YXJpYWw= 43821
IEhvZmY= 43822
IHByb3N0aXR1ZXJhZGU= 43823
RG9jdG9y 43824
SW5zdGFuY2Vz 43825
LlNldFZhbHVl 43826
CWZyb20= 43827
IGx1eHVyaW91cw== 43828
SW5kZW50 43829
QWxsb2NhdG9y 43830
X0RSQVc= 43831
KCIsIiw= 43832
IEZyYW5jZXM= 43833
IGdyb3VwQm94 43834
KHNjaGVtYQ== 43835
UHJpbnRm 43836
T1JJRVM= 43837
LWdyYWRpZW50 43838
IHJlcHV0 43839
YXJpbg== 43840
X0RPTkU= 43841
aW5jcmU= 43842
aWdudHk= 43843
IGV4ZXJ0 43844
IC0u 43845
L0FwcA== 43846
LXRocm91Z2g= 43847
IGRlY2xpbmluZw== 43848
IGRlc3NlcnQ= 43849
IGluY3VtYg== 43850
IGRlc2lnbmF0aW9u 43851
LlBPUlQ= 43852
LHN0cm9uZw== 43853
IHNhbmRib3g= 43854
IHdpbmVz 43855
IFBhdg== 43856
JHN0cg== 43857
YXNrZWxs 43858
IGjDtg== 43859
IFBZ 43860
R2V0SW5zdGFuY2U= 43861
VGV4dElucHV0 43862
Z2FtZU9iamVjdA== 43863
L2V2ZW50cw== 43864
Y3JlYXRlZEF0 43865
IGxvY2FsVmFy 43866
IFdISVRF 43867
cGVyZWQ= 43868
aWxlZ2U= 43869
ZWZmaWNpZW50 43870
LGNvbG9y 43871
Y2F0ZQ== 43872
IENhZmU= 43873
IHNpbWlsYXJpdGllcw== 43874
IHB1bXBz 43875
IEh1bmdhcnk= 43876
LlVzZXJuYW1l 43877
IHNrYXRl 43878
IHRvdWNoZG93bnM= 43879
IGFjY2VsZXJhdGU= 43880
IEhlbGVu 43881
T01FTQ== 43882
IEt1bg== 43883
X3ZvbA== 43884
IGZpbmRBbGw= 43885
IE1lbnNjaGVu 43886
YWhlYWQ= 43887
KTsi 43888
a29tbWVu 43889
IHBvc3Nlc3NlZA== 43890
LmFyZ21heA== 43891
LnRyYW5zaXRpb24= 43892
QVJQ 43893
T0xVTUU= 43894
KHNjcmlwdA== 43895
INCY 43896
IEZpbmRpbmc= 43897
b25jZXM= 43898
SW8= 43899
Qm9sZA== 43900
IHJlbmV3YWw= 43901
X0RJQUxPRw== 43902
IGRpc3JlZw== 43903
SU5URVJO 43904
IHRvdXRl 43905
IGVsZWN0cg== 43906
IEdyb3Nz 43907
CXRydWU= 43908
LkZpZWxkcw== 43909
IFdJRFRI 43910
IERlbnQ= 43911
IMOB 43912
TlNOb3RpZmljYXRpb24= 43913
IGFvcw== 43914
IG1lbGVl 43915
LlZhbGlkYXRpb24= 43916
IERFQw== 43917
LWRlcGVuZGVudA== 43918
IHN1aWM= 43919
VHJhaXRz 43920
JG1lc3NhZ2U= 43921
IERlYXI= 43922
CUZJTEU= 43923
bGFuZ3VhZ2Vz 43924
LlByb3Q= 43925
LmFkZHI= 43926
LWdlbmVyYXRpb24= 43927
SUNPTg== 43928
IHRyYW5zcGxhbnQ= 43929
LWRlc2NyaXB0aW9u 43930
IGNoYXNpbmc= 43931
IGNoZWVz 43932
IH0qLwo= 43933
VHJhZA== 43934
cXVlcmllcw== 43935
L3dpZGdldHM= 43936
c3VicGFja2FnZQ== 43937
IGVzcGVj 43938
IGNyYWNrZWQ= 43939
IGNvbXBldGl0b3I= 43940
UHVyY2hhc2U= 43941
LXRlYW0= 43942
b2xlY3VsYXI= 43943
b3JUaHVuaw== 43944
JlA= 43945
IHJlbGVudA== 43946
LyN7 43947
IHByb2R1Y3RJZA== 43948
IOi+ 43949
IExhdg== 43950
IEFsdGVy 43951
Lk1vZGU= 43952
QURJTw== 43953
Z3Jw 43954
5re75Yqg 43955
UXVpdA== 43956
IGRlcHRocw== 43957
LWNhdGVnb3J5 43958
IERBVEFCQVNF 43959
U1BFTEw= 43960
IEZhbGNvbg== 43961
IFFTdHJpbmdMaXN0 43962
ICcnLg== 43963
IEluc3RpdHV0aW9u 43964
ZGFtYWdl 43965
YXpvcg== 43966
YmVsb25nc1Rv 43967
dmVyYWdlcw== 43968
IE5PTkU= 43969
aXBwZXRz 43970
LFwK 43971
IGZvb3RwcmludA== 43972
X2FyY2hpdmU= 43973
bmFr 43974
LmdldEZpZWxk 43975
IFJlZmxlY3Rpb24= 43976
ICdd 43977
IEhCTw== 43978
X2Rpc2NvdW50 43979
IGluY2VzdA== 43980
IERvZGdl 43981
IFdhZGU= 43982
Lk5P 43983
ImVuY29kaW5n 43984
IEJsb2NrY2hhaW4= 43985
IGxhd3N1aXRz 43986
IE1haW50 43987
Y2h0ZW4= 43988
IMOpdGFpdA== 43989
IGt0w7NyZQ== 43990
X2N0bA== 43991
KHRpbWVy 43992
QmF0dGxl 43993
aXpv 43994
YXllZA== 43995
SU9S 43996
IEdsYXNnb3c= 43997
IHN5bnRo 43998
X2xvZ3M= 43999
LnBvc2U= 44000
X0FkanVzdG9yVGh1bms= 44001
KCgm 44002
IHVuc3VyZQ== 44003
eXN0YXRl 44004
7ZWY64qU 44005
T1VMRA== 44006
Lm5n 44007
IGRlZmF1bHRkaWN0 44008
d29ya3NwYWNl 44009
IHNlbGVjdGl2ZQ== 44010
UGlja2VyQ29udHJvbGxlcg== 44011
WU5BTUlD 44012
Lm1ldGhvZHM= 44013
IHBhdGh3YXlz 44014
IEZldw== 44015
S0c= 44016
Q1JZUFQ= 44017
Zm9sbG93aW5n 44018
IERMQw== 44019
IFNhcmE= 44020
IHByZXNldA== 44021
ZXN0cnVjdG9y 44022
IEt1cnQ= 44023
IGFpcnBsYW5l 44024
IG9tcA== 44025
IFBhcmVudHM= 44026
IE1hcnRpbmV6 44027
LmNvbXBsZXRl 44028
IGJyb2FkbHk= 44029
IHNjYXJl 44030
IE3DqQ== 44031
IGVsaW1pbmF0aW9u 44032
IHBvdXJlZA== 44033
L3N3 44034
IGNvbXVu 44035
IG1hc2M= 44036
IE9yZ2FuaWM= 44037
IFN0cmluZ1V0aWxz 44038
aWxhdGVyYWw= 44039
IHJlbHVjdGFudA== 44040
LWFnZQ== 44041
IG56 44042
LiJc 44043
IHBhc3Rvcg== 44044
YWxleg== 44045
IGVmZWN0 44046
cHJvdg== 44047
L2luaXQ= 44048
IHBlbm4= 44049
dW5kcw== 44050
IHNzaXpl 44051
IFByb2o= 44052
YmFzZW5hbWU= 44053
IHNoZWxscw== 44054
IE5lY2s= 44055
IEVuZm9yY2VtZW50 44056
dmlkZWQ= 44057
c3Rvd24= 44058
U3BoZXJl 44059
JHI= 44060
dXNzZW4= 44061
YWZpbA== 44062
IFRlbGVncmFt 44063
IGFuYWx5dGljYWw= 44064
0L3Ri9C1 44065
dXN1YWxseQ== 44066
eG4= 44067
IGhpc3Rvcmlhbg== 44068
IEdyZWdvcnk= 44069
b2xwaA== 44070
IFVuYQ== 44071
IGNvbnRyaWJ1dGVz 44072
JS0= 44073
YW50aWFnbw== 44074
0YDQtdC0 44075
LnJlZ2lvbg== 44076
IGFicnVwdA== 44077
IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9u 44078
IFRBU0s= 44079
X2ZpbmlzaA== 44080
IG5vdG9yaW91cw== 44081
IFZz 44082
IE1R 44083
IHN1bnNldA== 44084
IHVuYWNjZXB0YWJsZQ== 44085
YXJjZXI= 44086
IGlsbHVtaW4= 44087
IE9yYg== 44088
IGJo 44089
RXN0ZQ== 44090
X2Rpc3BhdGNo 44091
IHJpcHBlZA== 44092
IHRvdWpvdXJz 44093
IFBhcmNlbA== 44094
X2xs 44095
LnVzZXJOYW1l 44096
LmNsYXNzZXM= 44097
U09VUkNF 44098
KE51bWJlcg== 44099
0LXQu9GP 44100
IGhlYWRwaG9uZXM= 44101
KHNpZGU= 44102
Y29uc3RpdHV0aW9u 44103
YW5uYWg= 44104
DQogICAgICAgIA0K 44105
IGNsaWZm 44106
LXJlZg== 44107
IG1vc3RyYXI= 44108
IFBvd2VsbA== 44109
K3k= 44110
IEJH 44111
X2ZyYWdtZW50 44112
LlBvcnQ= 44113
IHJlYWxpemluZw== 44114
cGFyYW1yZWY= 44115
IGhvbWV0b3du 44116
QFRhYmxl 44117
KyI8Lw== 44118
b21pZA== 44119
IGR1Zw== 44120
CWJ0bg== 44121
IHN1YmplY3RpdmU= 44122
L2Jyb3dzZXI= 44123
IHVzaG9ydA== 44124
IE1vbnRnb21lcnk= 44125
LXJhdGU= 44126
CXB1dHM= 44127
bGV0aWNz 44128
b3Jucw== 44129
4oCcV2hhdA== 44130
ZWVwZXI= 44131
LkludmFyaWFudA== 44132
IGNvbmNlYWxlZA== 44133
X251bXB5 44134
PT09PT09PT09 44135
KHBz 44136
TG9jYXRpb25z 44137
LmFzdHlwZQ== 44138
IENIQU5HRQ== 44139
Lk9yZGVyQnk= 44140
O2hlaWdodA== 44141
IGdlbnRl 44142
IGdydW50 44143
IFBsYW5l 44144
IHNhZGx5 44145
IExvZ2Fu 44146
X3VzZWM= 44147
LmRndg== 44148
IHNpbmNlcg== 44149
IHBu 44150
CWd0aw== 44151
IGluc3RhbGxlcg== 44152
IGRpc3BsYWNlbWVudA== 44153
IGJ1cm5z 44154
0YPRgQ== 44155
aXZlcmVk 44156
Ol0pCg== 44157
c2VhdA== 44158
YW5pbmc= 44159
fSkKCgo= 44160
X3JvbGVz 44161
YXRpY2Fu 44162
IGdlbmVyYXRvcnM= 44163
IGh1cnRz 44164
IHNuaXBwZXQ= 44165
IGdzb24= 44166
IHNlZ3JlZw== 44167
IGRpc3RyaWJ1dG9y 44168
IGFkdmFuY2luZw== 44169
cG9zdGdyZXM= 44170
IHVzcg== 44171
IExpcw== 44172
LmFzc2VydElz 44173
X2Nk 44174
IGh5ZHJhdWxpYw== 44175
LmNvdW50ZXI= 44176
IEluZGVwZW5kZW5jZQ== 44177
IGRpZmbDqQ== 44178
VW5saWtl 44179
IHRvbWI= 44180
dmlr 44181
cG9zdGVk 44182
d2Y= 44183
IGRlc2NlbmRpbmc= 44184
ZHlu 44185
YW1lbnRhbA== 44186
IEZydWl0 44187
IFlv 44188
LmRvdWJsZQ== 44189
IElB 44190
aWV2 44191
aWJyYXRl 44192
IFJlbGlnaW9u 44193
TWFueVRvT25l 44194
LVRh 44195
IGJhbmFuYQ== 44196
IEF2ZW5nZXJz 44197
IEhvbG9jYXVzdA== 44198
IGdldEM= 44199
IGNvbmRv 44200
IEdvdGhpYw== 44201
IHByb3NwZXJpdHk= 44202
VFJBTlM= 44203
IGRvZXNudA== 44204
IENoYW9z 44205
SVRU 44206
IENVUlJFTlQ= 44207
XGhlbHBlcnM= 44208
X1NBVkU= 44209
YXZpdA== 44210
Y29tcHV0ZXI= 44211
X3NoZWV0 44212
IEJyZXdpbmc= 44213
IHJvYmJlcnk= 44214
IOqyvQ== 44215
INC60L7QvA== 44216
IG7DpA== 44217
LnJlZ2V4 44218
IGRpc3J1cHRpb24= 44219
IFNpbXVsYXRpb24= 44220
YXBpZA== 44221
IHN1cHJlbWU= 44222
zrw= 44223
IGNvbW1pc3Npb25lZA== 44224
IGFic29ycHRpb24= 44225
IE5ld2Nhc3RsZQ== 44226
CWNvbnN0cnVjdG9y 44227
VGVybXM= 44228
IHJpdg== 44229
IHJlbGlnaW9ucw== 44230
V2l0aFRhZw== 44231
Lkh0bWw= 44232
bGlua2Vk 44233
Q29tcG91bmQ= 44234
IE1hbnM= 44235
IGxha2Vz 44236
aXp6bGU= 44237
LnNldFNpemU= 44238
YWJlcg== 44239
IE5lZWRz 44240
cGFja2FnZXM= 44241
LlRhYlBhZ2U= 44242
IHJlZnM= 44243
IGlvdXRpbA== 44244
IERvaW5n 44245
ICJcKA== 44246
IHBoZW5vbWVuYQ== 44247
LkdldEludA== 44248
QUxUSA== 44249
IHBhcmxpYW1lbnRhcnk= 44250
IHJlZnVzYWw= 44251
IGluZXhwZW5zaXZl 44252
IH0KCgoKCg== 44253
IHNvbGlkYXJpdHk= 44254
CXB1c2g= 44255
aGF1bA== 44256
IEJlcmU= 44257
U2l6ZXI= 44258
SW5kaXZpZHVhbA== 44259
IGFuY2U= 44260
IGRpbGU= 44261
IFBlYWs= 44262
KGhy 44263
RWRpdGluZ0NvbnRyb2xsZXI= 44264
SE4= 44265
X1BFUklPRA== 44266
RVRT 44267
QmFubmVy 44268
ZXJyb3JNZXNzYWdl 44269
LkNBU0NBREU= 44270
LWlnbm9yZQ== 44271
IFNJR04= 44272
IE9C 44273
X2Rk 44274
KERFRkFVTFQ= 44275
IHNvbw== 44276
IFZpY3Rvcmlhbg== 44277
IGN1cnQ= 44278
IGRpc2NyZXRl 44279
cnlsaWM= 44280
aW1iYWJ3ZQ== 44281
LnRvRml4ZWQ= 44282
bMOk 44283
LnN0ZGlu 44284
IHF0eQ== 44285
Uk9MTEVS 44286
bWVkaWF0ZWx5 44287
IHBsdW1iaW5n 44288
IFByb3BlcnR5Q2hhbmdlZA== 44289
YXJyYW50eQ== 44290
IEJyZWFrZmFzdA== 44291
LnNldEhlYWRlcg== 44292
LnB5dGhvbg== 44293
Y29tbWVyY2U= 44294
b3BlbmN2 44295
Pi0tfX0K 44296
RnJlbmNo 44297
RW50aXR5TWFuYWdlcg== 44298
IFBsYWlu 44299
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 44300
wrM= 44301
KFJF 44302
Y2FwdA== 44303
IG9yZ2FuaXNtcw== 44304
IGpldHM= 44305
b2xvY2F0aW9u 44306
IEFwcFJvdXRpbmdNb2R1bGU= 44307
IGdsb3Jpb3Vz 44308
5pyN 44309
IGRpc2NhcmRlZA== 44310
CQkJCSAgICAg 44311
IEFybm9sZA== 44312
bHVn 44313
IHBhcmw= 44314
IGhvcm1vbmVz 44315
IG1haA== 44316
IFNvbmlj 44317
IG9yZ2FuaXplcnM= 44318
X1BMQVRGT1JN 44319
Lmludg== 44320
IGNob3Jk 44321
dmVudGlvbmFs 44322
CW9m 44323
RXBpc29kZQ== 44324
LkVudW0= 44325
dW5rdA== 44326
IERo 44327
IEphcmVk 44328
IE5haw== 44329
IGludGVuZHM= 44330
RW5kaWFu 44331
IGF1c3RyYWxpYQ== 44332
X2N2 44333
KHJlc29sdmU= 44334
IGNsaW5pY3M= 44335
bGlrZWQ= 44336
QVNISU5HVE9O 44337
aW5oYQ== 44338
Jyo= 44339
IE5Q 44340
X2JlaA== 44341
IGhm 44342
IHfDvHI= 44343
Y2F0ZWdvcmlh 44344
JGZvcm0= 44345
IHN1YndheQ== 44346
IGlzQWN0aXZl 44347
cG9wdWxhcg== 44348
Q291cg== 44349
IGNvb2xkb3du 44350
IGFpbnNp 44351
IEdMdWludA== 44352
ZXJlYWw= 44353
IGFycmF5T2Y= 44354
IGhhdGNo 44355
PT09PT09PT09PQ== 44356
cmVzc2Vz 44357
X1BQ 44358
Ll4= 44359
X2RlY2F5 44360
IEJsZXNz 44361
bWV0cmljcw== 44362
IENPUFlJTkc= 44363
IER1bXBzdGVy 44364
IEpvc8Op 44365
IERlc2lnbnM= 44366
PFZvaWQ= 44367
57q/ 44368
ID8+PA== 44369
ICJ9Cg== 44370
dGltZXpvbmU= 44371
IGVlcg== 44372
bWF4Y2Ru 44373
IEVTQw== 44374
aWdhcmV0 44375
X2Nvbm5lY3RlZA== 44376
X3JldmVyc2U= 44377
IHF1ZXN0aW9uYWJsZQ== 44378
IFVTQw== 44379
IHR1dHRp 44380
IGRyb3BvdXQ= 44381
IEFjdGl2aXRpZXM= 44382
IFdpbmRz 44383
JykpKTsK 44384
IGNvbmdlc3Q= 44385
xJ/EsQ== 44386
IHByb2xvbmdlZA== 44387
6L+Z 44388
IENyb3NzQXhpc0FsaWdubWVudA== 44389
TEVFUA== 44390
IFZBTElE 44391
IEdheg== 44392
IGRlcGVuZGVuY2U= 44393
IFByaXg= 44394
LkNvbXBpbGVyU2VydmljZXM= 44395
anVtcA== 44396
IHN0cmF0 44397
Y2lyYw== 44398
IENVU1RPTQ== 44399
eGFh 44400
IGJtcA== 44401
IGJ1cmVhdQ== 44402
IHdhcmVu 44403
Tlg= 44404
KFdpbmRvdw== 44405
IENocmlzdGll 44406
X0ZF 44407
IHRu 44408
IE9tZWdh 44409
Y29tbXVuaWNhdGlvbnM= 44410
SG9tZVBhZ2U= 44411
Y29tcGxldGlvbg== 44412
IHN1cHBseWluZw== 44413
WVBFUw== 44414
w6F2ZWw= 44415
5Yi2 44416
KGNsaWNr 44417
XENvbnRyYWN0cw== 44418
L3F1ZXN0aW9ucw== 44419
IGV6 44420
QU1T 44421
Lm1lc2g= 44422
ICc8Pw== 44423
asOg 44424
SW5p 44425
LiM= 44426
IENhcmRpbmFscw== 44427
cGNpw7Nu 44428
Q3ViZQ== 44429
IFBhdGllbnRz 44430
X3ByZWY= 44431
QWN0aW9uQnV0dG9u 44432
KGJ1aWxk 44433
IFZpc2E= 44434
b3ZlbA== 44435
KEFycmF5TGlzdA== 44436
SWdu 44437
IHJlaGFiaWxpdGF0aW9u 44438
IHBhbGFjZQ== 44439
IHNwZWVjaGVz 44440
fScK 44441
SHR0cFJlc3BvbnNl 44442
CWNvZGU= 44443
RHVtbXk= 44444
IGFjYWRlbXk= 44445
Lm1vdmll 44446
IGluY29ycmVjdGx5 44447
IGN5Yw== 44448
KFVuaXR5RW5naW5l 44449
CWNhbGxiYWNr 44450
IFNhdGFu 44451
IEZVTkM= 44452
IGNoYW50 44453
IEhlYWx0aHk= 44454
OicsCg== 44455
U2hpcHBpbmc= 44456
X21j 44457
IER5bGFu 44458
IFByb2R1Y2Vy 44459
IHJlc3B1ZXN0YQ== 44460
IHBvbGlzaGVk 44461
QnJvYWRjYXN0 44462
IGJhbGFuY2luZw== 44463
IFNsaWRl 44464
IENhcHM= 44465
c3RpbGw= 44466
IGhhcHBpZXI= 44467
IEdvc3BlbA== 44468
dHJhbg== 44469
LnBhdGhuYW1l 44470
QWN0aXZlU2hlZXQ= 44471
IENoYW5n 44472
PlwK 44473
Um9ib3Q= 44474
SnNvbk9iamVjdA== 44475
IERG 44476
IFByb2Nlc3Nvcg== 44477
X3Nob3VsZA== 44478
LnByb3RvYnVm 44479
LXVzZXJz 44480
IGVtYnJ5 44481
Rk9OVA== 44482
IHN0YXJ0dXBz 44483
IERhdGFTb3VyY2U= 44484
KSM= 44485
dXJvcw== 44486
X0NvbG9y 44487
IHN0YW5kYWxvbmU= 44488
fVs= 44489
amQ= 44490
IGZvcmdpdmU= 44491
IG5neA== 44492
IEdlbmVyYWxseQ== 44493
IGNvbmZpZ3VyYWJsZQ== 44494
L29yZGVy 44495
IHZhcw== 44496
JykiOwo= 44497
IFJS 44498
IFRyb3k= 44499
IGNvbXByb21pc2Vk 44500
IFN3YW4= 44501
aW50ZW5kZW50 44502
Q2VudHJhbA== 44503
X2tlZXBlcg== 44504
IGFycXVpdm8= 44505
IFJlYWRPbmx5 44506
X2N1cnZl 44507
a3Y= 44508
ZW50aW4= 44509
6LE= 44510
IEV5 44511
LmltcmVhZA== 44512
IFBhbQ== 44513
aWZmZQ== 44514
YXRpdml0eQ== 44515
eGJj 44516
IGdyaW0= 44517
LWZpbGxlZA== 44518
bmFtZXNl 44519
J106 44520
IGF1cg== 44521
IEdpYnNvbg== 44522
Lk1vdXNlRXZlbnQ= 44523
IGxhZG8= 44524
YXZhZG9j 44525
IGZhbWls 44526
IE1vZGVy 44527
ZnBz 44528
44CA44CA 44529
LWV4YW1wbGU= 44530
IEFsemhlaW1lcg== 44531
IFV0Zg== 44532
X2FyZ3VtZW50cw== 44533
Q29uY2x1c2lvbg== 44534
dGV4dENvbnRlbnQ= 44535
cmVtYWluaW5n 44536
IGludGVycnVwdHM= 44537
IEJhY2t1cA== 44538
IE1vbmc= 44539
IHJlY2VwdG9ycw== 44540
aGlzdG9y 44541
LmNvcm91dGluZXM= 44542
IHNob3V0ZWQ= 44543
QWxhcm0= 44544
IGNvbWJ1c3Q= 44545
IGdyb3Rl 44546
dWx0dXJhbA== 44547
KGlkcw== 44548
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 44549
aXBsaW5hcnk= 44550
T3B0cw== 44551
IFlhbGU= 44552
bG9jYWxTdG9yYWdl 44553
IGVxdWl2YWw= 44554
IEZsZWV0 44555
XGI= 44556
KnBp 44557
IFFMYWJlbA== 44558
5qE= 44559
IHZ4 44560
IEFDTA== 44561
IHN1Y2Vzc28= 44562
IHBlcmM= 44563
IE5vdHJl 44564
IGFuYXJjaA== 44565
UmluZw== 44566
c3Bi 44567
IHN0cnBvcw== 44568
c3RvcmVz 44569
IE1hcGxl 44570
KE1haW5BY3Rpdml0eQ== 44571
KCIiKSk= 44572
IHZpZXdIb2xkZXI= 44573
UXVhZA== 44574
IGlndWFs 44575
b3JzY2hl 44576
Lm1hcmdpbg== 44577
IGluZGll 44578
IGZyYW5j 44579
IEZvcm1CdWlsZGVy 44580
IFBhcnRpY2lw 44581
LmZsYXNo 44582
IHN0b3Jtcw== 44583
VWx0 44584
IGZlbg== 44585
W25ldw== 44586
RXZlcg== 44587
PSIK 44588
IGxvY2FsaXplZA== 44589
X2ZvbGxvdw== 44590
IG5hdmU= 44591
IGRvbWluYW5jZQ== 44592
KHRpbGU= 44593
Sm91cm5hbA== 44594
IFZD 44595
IHBlbmV0cmF0aW9u 44596
77yV 44597
IGNvbXBhcnRtZW50 44598
IGJpZHM= 44599
Rm9ybWF0dGVk 44600
KioqKioqLwoK 44601
KGNpdHk= 44602
4oCUaXQ= 44603
W0M= 44604
IHVzZUNhbGxiYWNr 44605
YXVi 44606
KT8u 44607
IFZBUg== 44608
IFNlYmFzdGlhbg== 44609
IE1vc3M= 44610
IGFidW5kYW50 44611
R3JlZw== 44612
0YLQsA== 44613
X2Np 44614
IGJpYmxp 44615
Q1JN 44616
IEF0dGVtcHQ= 44617
aXNtZQ== 44618
ZGFzaA== 44619
44CO 44620
X211 44621
LkZvcm1hdHRpbmdFbmFibGVk 44622
SW5kZWVk 44623
LWRpcmVjdA== 44624
IHN1Y2tpbmc= 44625
IHBuZQ== 44626
b2NhYnVsYXJ5 44627
IFBhY2tlcnM= 44628
Lk5hdmlnYXRpb24= 44629
IHBpZWQ= 44630
Y3JpYmluZw== 44631
IFN0dWFydA== 44632
LlRvRG91Ymxl 44633
IFNlY29uZGFyeQ== 44634
U2F2aW5n 44635
IER1dA== 44636
IE1hZGQ= 44637
TWFnaWM= 44638
LEg= 44639
LmRvY3VtZW50RWxlbWVudA== 44640
IEJTVA== 44641
IGRpZmZlcnM= 44642
IG1vcmVvdmVy 44643
X25k 44644
U0VBUkNI 44645
0L/RgNCw0LI= 44646
5rQ= 44647
dG9NYXRjaA== 44648
IGRlY3JlYXNpbmc= 44649
LW1lbWJlcg== 44650
YW1wdXM= 44651
KGJvb3N0 44652
RGFpbHk= 44653
RGF0YUdyaWRWaWV3 44654
IEh0dHBDb250ZXh0 44655
IGhpcHA= 44656
X3dvcmtlcnM= 44657
LWxhbmd1YWdl 44658
6ZM= 44659
IGNvbnNpc3RlZA== 44660
YXRoaW5n 44661
IE1lcmN1cnk= 44662
JGNvbnRlbnQ= 44663
IHByYWN0aWNlZA== 44664
IE1vZHVsZXM= 44665
X0RBWQ== 44666
IHdlYWtuZXNzZXM= 44667
IExvZGdl 44668
IG5hcg== 44669
IE1hdGU= 44670
IGpw 44671
IEh0dHBIZWFkZXJz 44672
IHNtbw== 44673
IFRPS0VO 44674
XSko 44675
IGFxdWk= 44676
c3dhZ2Vu 44677
IHNydg== 44678
CWFucw== 44679
QXJvdW5k 44680
IE1hbnVlbA== 44681
IGZpY3Rpb25hbA== 44682
IElNRw== 44683
IC4n 44684
IEJlcnJ5 44685
IHdhbGxwYXBlcg== 44686
c2V4dWFs 44687
aWVybw== 44688
IOeahA== 44689
7IaM 44690
QmFja2luZ0ZpZWxk 44691
IEFkcmlhbg== 44692
QkFTRVBBVEg= 44693
IHJlcGVhdHM= 44694
IGJsdWVz 44695
IHVucHJlZGljdA== 44696
X2NvbGw= 44697
c3RhY2xl 44698
IFR1bWJscg== 44699
IEVsZg== 44700
IGFzc3VyYW5jZQ== 44701
IGNlbnN1cw== 44702
IElNUE9SVA== 44703
RU5ERVI= 44704
YW5vcw== 44705
ID0o 44706
IEVsbGlz 44707
IgoKCgo= 44708
Lndpbg== 44709
IEFib3Zl 44710
YWxvbg== 44711
X3RpY2s= 44712
IHJlcHJlc2VudGF0aW9ucw== 44713
IOaV 44714
d2lk 44715
IEFybXM= 44716
TGlzdGE= 44717
X2ZhaWx1cmU= 44718
X2Nt 44719
LkZsYXRBcHBlYXJhbmNl 44720
IHRocm9uZQ== 44721
UGF0Y2g= 44722
IFZveQ== 44723
ZW5nbA== 44724
IG5lZ290aWF0aW5n 44725
PmA= 44726
IHNob290cw== 44727
IEZQUw== 44728
LlllYXI= 44729
IEtpc3M= 44730
ZW5jacOzbg== 44731
cmVldGluZw== 44732
RnJvbUZpbGU= 44733
IHJlc2lnbmF0aW9u 44734
2Lc= 44735
IHR3aW5z 44736
xrDhu6M= 44737
IGdlYnJ1 44738
LmdldENvbnRlbnQ= 44739
LlRyZWU= 44740
IEVtcGxveWVlcw== 44741
IEZJRkE= 44742
IGNlcnRhaW50eQ== 44743
KENs 44744
IHRvdGFscw== 44745
ZWRpdGFibGU= 44746
4KWA 44747
LlJlcG9ydGluZw== 44748
TWFz 44749
cXVpZXQ= 44750
LnJ1bGVz 44751
IFZP 44752
Y29uZXhpb24= 44753
LEs= 44754
IGFsbG9jYXRvcg== 44755
IFBvd2Rlcg== 44756
XFJlcG9zaXRvcnk= 44757
QmVhdA== 44758
X3RpcG8= 44759
IFsnJyw= 44760
X0lOVFI= 44761
IDw8PA== 44762
PGhy 44763
Iik9PQ== 44764
dWdnYWdl 44765
IENyYXc= 44766
IMOpZ2FsZW1lbnQ= 44767
IGdpbmdlcg== 44768
IHByaW1lcmE= 44769
IHByb2R1dG8= 44770
bHRr 44771
LlVzZXJOYW1l 44772
IHN0cmVycm9y 44773
bWl0aA== 44774
X25i 44775
IGRpc2NvbWZvcnQ= 44776
J107Pz48Lw== 44777
UVQ= 44778
IGVydXB0 44779
IERhbmlzaA== 44780
XEFjdGl2ZQ== 44781
X2FkYXB0ZXI= 44782
IGJ1YmJsZXM= 44783
cm9sbG8= 44784
b3Jnb3Q= 44785
0L3Ri9GF 44786
VkVDVE9S 44787
b2NvZGU= 44788
IEJ1bGxz 44789
IGJvaWw= 44790
PiIpOw0K 44791
ZHJvcElmRXhpc3Rz 44792
IEJlZw== 44793
X0hBTA== 44794
IGNyb3NzQXhpc0FsaWdubWVudA== 44795
IEV2aWRlbmNl 44796
IHBlY3VsaWFy 44797
IGluc3RpdHV0ZQ== 44798
dmVpcw== 44799
IGZmdA== 44800
w4E= 44801
IHpvZWt0 44802
YW5hbHk= 44803
IEhvbWVsYW5k 44804
IHBlbmV0cg== 44805
dWRkZW5seQ== 44806
CWVsZW1lbnQ= 44807
IEJyZW4= 44808
IFRydWRlYXU= 44809
IEN1YmFu 44810
amFt 44811
dXNsaW0= 44812
X2V2 44813
IHN0ZW1z 44814
fSU= 44815
neWniw== 44816
IGJyYW5kaW5n 44817
IGNvcnJlc3BvbmRlbmNl 44818
LmpxdWVyeQ== 44819
ouWNlQ== 44820
IFJlYWRz 44821
KEh0dHBTdGF0dXNDb2Rl 44822
YXNzaW4= 44823
KHNsb3Q= 44824
IEdyYWR1YXRl 44825
Ly8vPA== 44826
IGluZm9ybWF0aW9ucw== 44827
RU5BQkxF 44828
IHB1aXM= 44829
IGZpbmRlcg== 44830
IEJyaXM= 44831
IG5ldHRzdGVkZXI= 44832
X21pZA== 44833
IG9ncw== 44834
IFN0ZXJsaW5n 44835
IGFycm9n 44836
c3RyZnRpbWU= 44837
fAoK 44838
IHZveA== 44839
IFJlZ2FyZGxlc3M= 44840
IGVzbw== 44841
IENvbWZvcnQ= 44842
LkJvb2xlYW5GaWVsZA== 44843
IHVo 44844
QUNZ 44845
IHNxdWVleg== 44846
IFZpYw== 44847
Y29udHJv 44848
Lmxv 44849
IGlyZQ== 44850
IENvbWVkeQ== 44851
67Y= 44852
IG9yaWdpbmF0ZWQ= 44853
IHNoaXBtZW50 44854
fG1heA== 44855
X2d1aWQ= 44856
bGV2YXRpb24= 44857
0L3QsNGP 44858
KHVuZGVmaW5lZA== 44859
IEREUg== 44860
IHNob290aW5ncw== 44861
IExhdGlubw== 44862
RU5ET1I= 44863
IGF2ZXJhZ2luZw== 44864
IGdyZWV0ZWQ= 44865
IHRoZWF0ZXJz 44866
0L7QtQ== 44867
IGRC 44868
IGdzdA== 44869
IGRlZmluaXRl 44870
LlN0b3JhZ2U= 44871
Lmhlcg== 44872
IGFmb3Jl 44873
IFJlYWxpdHk= 44874
IEdvZHM= 44875
dmVyc2Vk 44876
IGhhbmRzb21l 44877
IGV4Y2x1ZGluZw== 44878
KGFk 44879
UXVvdGVz 44880
IFNjaGVtZQ== 44881
P3E= 44882
IFRhbWls 44883
VGlja3M= 44884
IHBlc3Q= 44885
J24= 44886
IHBvcm5vZ3JhcGh5 44887
X21vZGFs 44888
IC0tLS0tLS0tLS0= 44889
IGRpc3Bvc2FibGU= 44890
RlJFRQ== 44891
IHNoYXJr 44892
Q0hF 44893
IGRlcGljdGVk 44894
IGRlbW9uc3RyYXRpb25z 44895
IEtpbGxlZA== 44896
IFJVTEU= 44897
IG9ic2Vzc2Vk 44898
IHNpbXBsaWZpZWQ= 44899
UG9zdGFs 44900
IGNvbmNlcHR1YWw= 44901
IHBzdA== 44902
TGFz 44903
X1BST0pFQ1Q= 44904
dWNjZWVkZWQ= 44905
b2x1 44906
xJ9p 44907
IHBlcnNvbmFsaXRpZXM= 44908
IHJlc2hhcGU= 44909
IGVuY2xvc2Vk 44910
CXB0cg== 44911
IHR1dG9yaWFscw== 44912
IGV4cGxvZGVk 44913
X0RJUkVDVE9SWQ== 44914
5YaF5a65 44915
IGNhbm9u 44916
IHJlY29nbmlzZQ== 44917
UEFE 44918
IEFwcHJveA== 44919
IFJlc3RvcmU= 44920
IEltcG9ydGFudA== 44921
IGhlYXZpZXI= 44922
LlNlcXVlbnRpYWw= 44923
RWFydGg= 44924
IE1pbGs= 44925
LnNldFJlcXVlc3Q= 44926
LnRlbQ== 44927
IHJlY29uc3RydWN0 44928
IHNrZXB0aWNhbA== 44929
X1ByaXZhdGU= 44930
QlVG 44931
cXVh 44932
OmE= 44933
IHNlaw== 44934
IGR3ZWxs 44935
b3NzYQ== 44936
IHJld2FyZGVk 44937
0LjQuQ== 44938
KHRvcGlj 44939
X3BhcnRpdGlvbg== 44940
IF9fX19fX19fX19fX19fX19fXw== 44941
S2V5d29yZHM= 44942
IEZyYW5jbw== 44943
TGl0ZQ== 44944
IG5ha2Vu 44945
INC30LA= 44946
T0JKRUNU 44947
IGNyYWZ0cw== 44948
IFN3YXA= 44949
LlhuYQ== 44950
LkNvbm5lY3Q= 44951
IGJhbGNvbnk= 44952
KHJlYWw= 44953
IEJhcm5lcw== 44954
Ymly 44955
IFR3ZW50eQ== 44956
YXlhbg== 44957
YXRhcnM= 44958
IFByb3BlbA== 44959
IElobmVu 44960
VXBncmFkZQ== 44961
IGN1cmI= 44962
LXNlY29uZA== 44963
IG5lcGg= 44964
LnByZXM= 44965
7J6F 44966
LnNlcQ== 44967
IHBhZGRlZA== 44968
Ij8= 44969
amw= 44970
44Os 44971
Jyk8Lw== 44972
IGNpdmlj 44973
Z29ucw== 44974
PmE= 44975
Q29vcmRpbmF0ZXM= 44976
IGVuYWN0ZWQ= 44977
RU5UUw== 44978
IGxhYw== 44979
LmZpbmFs 44980
IFBocFN0b3Jt 44981
Y2FsbGVk 44982
IGlucXVpcmllcw== 44983
Lm1pZGRsZXdhcmU= 44984
IERvd250b3du 44985
Lyc7Cg== 44986
IGtpbG9tZXQ= 44987
YWNjZWw= 44988
IHF1aWVu 44989
d3N0cmluZw== 44990
c2V0RGF0YQ== 44991
IG1hbmVyYQ== 44992
IG1vZHVsYXI= 44993
cmltcA== 44994
IHRhcmlmZnM= 44995
4oCZaWw= 44996
X1RIUk9X 44997
L2NvbG9y 44998
IEhUTUxFbGVtZW50 44999
IGNhcnJv 45000
IHByZXJl 45001
IHBsb3R0aW5n 45002
IFBvc2l0aXZl 45003
IE1hY2hpbmVz 45004
T1RFUw== 45005
4bub 45006
cGxlYXNhbnQ= 45007
IGFsdGU= 45008
IGFpbmRh 45009
dGhlc2U= 45010
IGNvcnM= 45011
aXBheQ== 45012
IEFkdmlzb3J5 45013
IFJ1Ymlv 45014
anE= 45015
IGxpbWVzdG9uZQ== 45016
IGRldGFjaGVk 45017
6K6+572u 45018
dGVuYW50 45019
IERlcHRo 45020
YWxvcmU= 45021
INGB0YLRgNC+0Lo= 45022
IEZPUkU= 45023
IExheQ== 45024
cHJlc2VudGF0aW9u 45025
KScpOwo= 45026
LnN1YnBsb3Rz 45027
z4M= 45028
Tk9X 45029
R2Fy 45030
aGFuZGxlcw== 45031
YWJyYQ== 45032
cHV0aWVz 45033
IEVsZWN0cmljYWw= 45034
TWlkZGxl 45035
cm9waWM= 45036
IEpE 45037
IER5bg== 45038
IEJyaXN0b2w= 45039
IE1jQ2FydGh5 45040
IHN0cmlrZXI= 45041
IGVudW1lcmFibGU= 45042
IEV2YW4= 45043
LmRlZmF1bHRz 45044
cXVlbmNlcw== 45045
KXx8 45046
CXRva2Vu 45047
4peP 45048
LWRyb3Bkb3du 45049
U1RPUkU= 45050
IEdyYXBoaWM= 45051
KHBw 45052
RXhwbA== 45053
IHVwd2FyZHM= 45054
IERpc3RyaWJ1dGVk 45055
IFdFQg== 45056
SmVy 45057
aXNOYU4= 45058
55Sf5oiQ 45059
PlI= 45060
w7xzc2Vu 45061
ZWZz 45062
IHVuY292ZXI= 45063
IGx1ZA== 45064
LmNhbGN1bGF0ZQ== 45065
IGludHB0cg== 45066
IG1pZGZpZWxkZXI= 45067
LkhlYWRlcnM= 45068
IG1m 45069
ZXJlZg== 45070
Lk1ldHJv 45071
IFNwZWFraW5n 45072
OmI= 45073
IGNyeXB0b2N1cnJlbmNpZXM= 45074
IGRlbW9ucw== 45075
CUVYUEVDVA== 45076
IHdpY2tlZA== 45077
eW91dHViZQ== 45078
OkludA== 45079
IEhpbmRp 45080
IENBVA== 45081
INi5 45082
cmFy 45083
b21vcmU= 45084
L3Blcg== 45085
L2xpY2Vuc2U= 45086
IHJlaW0= 45087
IGF3YWl0aW5n 45088
IGxldGhhbA== 45089
IEVG 45090
cm91bmRlZA== 45091
IFBsYXRpbnVt 45092
INCy0YHQtQ== 45093
LmNvb3Jkcw== 45094
LkRldmljZQ== 45095
L2l0ZW0= 45096
IFdlbm4= 45097
Y29tcGlsZUNvbXBvbmVudHM= 45098
IEtpbmRlcg== 45099
LnJlbW92ZUl0ZW0= 45100
IGFuZGE= 45101
Ym5i 45102
IHByYQ== 45103
KHRyYW5zYWN0aW9u 45104
IGVtYmFycmFzc2luZw== 45105
CUJPT0w= 45106
LmNvbnRlbnRWaWV3 45107
IGV2ZW50ZGF0YQ== 45108
YXRvcmU= 45109
IHByb3ZpZGVkSW4= 45110
aXJtYQ== 45111
IHpvbmE= 45112
X0hX 45113
5pk= 45114
IHN0b3Zl 45115
IGNvdW50ZXJwYXJ0 45116
X1Byb2R1Y3Q= 45117
X01BTkFHRVI= 45118
IGluZnJpbmc= 45119
IEVSQQ== 45120
X3BhcnR5 45121
0ZE= 45122
IGluaWNp 45123
X1JlcXVlc3Q= 45124
IG1pcmFjbGU= 45125
IGNhbmNlbEJ1dHRvbg== 45126
U3B5 45127
YXTDsw== 45128
IHBvbGlzaA== 45129
IE5pY29sZQ== 45130
LmRpc3BsYXlOYW1l 45131
XFJlcXVlc3Rz 45132
IHVzZUhpc3Rvcnk= 45133
Um91dGVyTW9kdWxl 45134
IHN0YXJlZA== 45135
SURFUg== 45136
0YPQvdC60YbQuA== 45137
IG5vdGE= 45138
JGFycg== 45139
cGVjaWZpZWQ= 45140
IHRvcHA= 45141
X0RSSVZFUg== 45142
L25n 45143
5aA= 45144
X3Rt 45145
JXRpbWVvdXQ= 45146
PHM= 45147
ICgqKQ== 45148
IEh0dHBSZXF1ZXN0 45149
X1RSQUNL 45150
KG5vdGU= 45151
IEV4cGxvcmU= 45152
X3NlcnY= 45153
IOe7 45154
QmluZGVy 45155
KyIs 45156
LmF0dA== 45157
IEV0aGk= 45158
IGPDs2RpZ28= 45159
PSdc 45160
LmxpbmVz 45161
KE9m 45162
5bCG 45163
bWlzc2libGU= 45164
IHbDqQ== 45165
IGFjb3VzdGlj 45166
IGNyYWZ0aW5n 45167
bml0 45168
LmJh 45169
IEx1Y3k= 45170
IGlQb2Q= 45171
IHB1cGlscw== 45172
LW1heA== 45173
X3dy 45174
KGNw 45175
IFJFUE9SVA== 45176
IGRucw== 45177
IFJlZmVyZW5jZXM= 45178
IHVuZGVydGFrZW4= 45179
IGvDuGJlbmhhdm4= 45180
IGNoYWk= 45181
IENyb2F0 45182
X0xvZw== 45183
cm93bmVk 45184
X21lZA== 45185
CWRhdGU= 45186
I19f 45187
IGNvc3R1bWVz 45188
IFJlcXVpcmVz 45189
YWZmbGU= 45190
54q25oCB 45191
LVNlbWl0 45192
ZWxhaWRl 45193
0LXRgtC+0LQ= 45194
IHBlc3RpYw== 45195
IGRyYQ== 45196
RE9DVU1FTlQ= 45197
IC4uLg0K 45198
fWB9Cg== 45199
IEF1Y3Rpb24= 45200
IERvY2s= 45201
eHh4eHh4eHg= 45202
KGdldFN0cmluZw== 45203
hY0= 45204
IGJvcmRlcldpZHRo 45205
IE1hY2hpbmVyeQ== 45206
IHByZWRpY3RhYmxl 45207
LlNI 45208
IGFtcGxpdHVkZQ== 45209
LmZvclJvb3Q= 45210
SU5hdmlnYXRpb24= 45211
VGFibGVNb2RlbA== 45212
YXR0cmli 45213
IG1hbmV1dmVy 45214
IGV4Y2F2 45215
QkVSUw== 45216
IGRhcGF0 45217
IGluc3RhbGxhdGlvbnM= 45218
LkFzeW5j 45219
IHJheXM= 45220
PeKAnQ== 45221
Ow0NCg== 45222
LmNyeXB0bw== 45223
X2RiZw== 45224
IEVudW1lcmFibGU= 45225
T2ZTaXpl 45226
X2Vwb2Nocw== 45227
bXc= 45228
TUVOVQ== 45229
b3V0bGluZQ== 45230
IFBhcGVycw== 45231
PT09PT09PT09PT09Cg== 45232
IHVuaWZvcm1z 45233
IEdpZw== 45234
LXBhY2thZ2U= 45235
IEplbmtpbnM= 45236
IEhvbWVQYWdl 45237
LmlzU2VsZWN0ZWQ= 45238
IG1lY2hhbmlj 45239
TUs= 45240
IFNvdW5kcw== 45241
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 45242
IHJlc2VhcmNoaW5n 45243
IGluZm9z 45244
b2dyYXBoaWNz 45245
ZXJzZXQ= 45246
KFsnLw== 45247
IFRpbWJlcg== 45248
LmFnZW50 45249
LnRvSlNPTg== 45250
X2NvbW1hbmRz 45251
cGFyaW5n 45252
X2FkanVzdA== 45253
Lm5vbWU= 45254
KGdsbQ== 45255
U3RhdHVzQmFy 45256
ZmlsZXBhdGg= 45257
P+KAmQ== 45258
IGRldGVjdGl2ZQ== 45259
IHVuc2VyZXI= 45260
IFRpYmV0 45261
RU5ERUQ= 45262
KHNlZWQ= 45263
IHNuZWFr 45264
IGFtb3I= 45265
PSIvLw== 45266
IFBhbnRoZXJz 45267
YWxsYXg= 45268
IExJVkU= 45269
CURXT1JE 45270
XT0t 45271
IHRvcm5hZG8= 45272
L21pbg== 45273
IGx1bmdz 45274
LWN1cnJlbnQ= 45275
IEJvb2tpbmc= 45276
5YiX6KGo 45277
IGVuam95bWVudA== 45278
4KSw 45279
SkE= 45280
dHlwZWQ= 45281
LkJ0bg== 45282
ZmF0 45283
dWdhbA== 45284
IFNoYXJlcw== 45285
IGRpc2dy 45286
IEJBUg== 45287
IEZPWA== 45288
T3Bjb2Rl 45289
IFN6 45290
a2V5ZG93bg== 45291
aWN0aW9uYXJpZXM= 45292
IGRldGFpbGluZw== 45293
fSkpCg== 45294
IHBvaw== 45295
IGRlbW9uc3RyYXRpbmc= 45296
IG5vdGF0aW9u 45297
bGF5ZXJz 45298
QGlm 45299
IE5QUg== 45300
LnN0cmljdEVxdWFs 45301
IFJlY2lwZXM= 45302
LlRlbnNvcg== 45303
IGxpcXVvcg== 45304
IGRlYnRz 45305
LmVuZHNXaXRo 45306
V2hlZWw= 45307
LlBvcw== 45308
Q1NW 45309
JGFyaXR5 45310
IHVuc3RhYmxl 45311
KGxvc3M= 45312
RU5TT1I= 45313
IGVsZXZlbg== 45314
IExvcGV6 45315
IEhvcGtpbnM= 45316
Y29ub20= 45317
IFNldGg= 45318
IHBvZW1z 45319
UXVhbnQ= 45320
IGdzbA== 45321
IHN5cnVw 45322
IHNpYmxpbmc= 45323
IGNhc3M= 45324
LXZvdXM= 45325
w7Z0 45326
X1BBVFRFUk4= 45327
X1NFQ1RJT04= 45328
ZXN0aW1hdGVk 45329
dXBncmFkZQ== 45330
Lm1vbmdvZGI= 45331
IEJvYXQ= 45332
X0NUWA== 45333
IGZldGNoaW5n 45334
dXN0aW4= 45335
cGllbA== 45336
TWFyZw== 45337
UmVmbGVjdGlvbg== 45338
IGR1Y3Q= 45339
IE11bmljaXBhbA== 45340
IGJ4 45341
LkdldEN1cnJlbnQ= 45342
bWxpbms= 45343
IEFjY291bnRpbmc= 45344
IEdlbmV2YQ== 45345
X1Bvcw== 45346
IHBhc3Nlcg== 45347
IGhlYXJpbmdz 45348
Y29tcGFu 45349
IGZyYWdpbGU= 45350
SW5pdGlhbGl6ZXI= 45351
d2Fsa2Vy 45352
Lk1hdGVyaWFs 45353
IEh1bnRpbmc= 45354
dHJ5c2lkZQ== 45355
IGthdA== 45356
IGNsZXJr 45357
4Z8= 45358
ZG9pbmc= 45359
CWdyb3Vw 45360
IHNhbmN0aW9u 45361
Lmxi 45362
IExhenk= 45363
IENvbnN0cmFpbnQ= 45364
UGFnaW5hdGlvbg== 45365
IHBvdXZleg== 45366
IEluZGljYXRlcw== 45367
TUVS 45368
IGNvdXJz 45369
IHllYXJseQ== 45370
IGdyb3NzZQ== 45371
YWJicmV2 45372
IERPTg== 45373
IHByb2NlZWRlZA== 45374
ZW50bGljaA== 45375
IHByb3BlcnR5TmFtZQ== 45376
IFRlYWNoaW5n 45377
c3RhZHQ= 45378
IGN1dG9mZg== 45379
b3JuZXJz 45380
IGFmcmljYQ== 45381
IHJlbmRlcnM= 45382
IFlhbmtlZXM= 45383
IFRvb2xiYXI= 45384
c3BhY2Vz 45385
LmZpbGxTdHlsZQ== 45386
IHNlZ3VuZG8= 45387
X3N0cmxlbg== 45388
LkZpcmViYXNl 45389
5aSE 45390
IG1lbnRpb25pbmc= 45391
XCg= 45392
IFZhbHZl 45393
U2V0dGVy 45394
IHNwYW5z 45395
IEFsY29ob2w= 45396
IExldHRlcnM= 45397
XHhl 45398
IFRL 45399
X0JMRQ== 45400
LmdldFJlc3VsdA== 45401
PFBsYXllcg== 45402
IFBhdHQ= 45403
IGVhc2luZw== 45404
IHR1cmtleQ== 45405
IEZlbg== 45406
Jyki 45407
IGNvbmZpbmVk 45408
IGluY2x1cw== 45409
U3VwZXJ2aWV3 45410
KHdpdGhJZGVudGlmaWVy 45411
ZW5jaWFs 45412
IHN0dWZmZWQ= 45413
VGhldGE= 45414
IGVjb25vbWlzdHM= 45415
fSkpOwoK 45416
Y29va2llcw== 45417
IFJvb3Nl 45418
IENoZWVzZQ== 45419
IGZpY2hpZXI= 45420
IGVuZm9yY2Vk 45421
QUJC 45422
bm/Fm2Np 45423
X0FMTE9X 45424
IHJlY3J1aXRlZA== 45425
IGV4cGVuZGl0dXJl 45426
LW5pZ2h0 45427
IGFzc2VydE5vdE51bGw= 45428
X2V4ZWN1dGU= 45429
INiv 45430
SU5ERVg= 45431
X0ZNVA== 45432
IHJlc2N1ZWQ= 45433
IE1vbnRobHk= 45434
IENvbnNlcnZhdGlvbg== 45435
IEdlYg== 45436
T2JhbWE= 45437
RXBvY2g= 45438
aWNpZXM= 45439
IE9ydA== 45440
IHNvaXQ= 45441
KGljb24= 45442
RnJpZW5kcw== 45443
bW9s 45444
IGdyb3VuZGVk 45445
IENhdXNl 45446
YWRlbmE= 45447
V0VFTg== 45448
IEx1bg== 45449
SVRJVkU= 45450
Lmxvb3A= 45451
X3VudGls 45452
IGNvcnI= 45453
LmVkZ2Vz 45454
IGh5cG90aA== 45455
Y2hlZHVsaW5n 45456
dHJhbnNsYXRvcg== 45457
INCc 45458
Um9t 45459
44CRCgo= 45460
IFhhbWFyaW4= 45461
IHZpb2xhdGluZw== 45462
LmFuY2hvcg== 45463
LS0tCgo= 45464
IHRyYWRlcg== 45465
QURWRVJUSVNFTUVOVA== 45466
IHVuc2VyZQ== 45467
IERBTw== 45468
IGJsb25k 45469
IFBBVA== 45470
Lmdsb2I= 45471
IOi+kw== 45472
IHNwbGl0dGluZw== 45473
IHVuc3Vic2NyaWJl 45474
IGF0bW9zcGhlcmlj 45475
IFRyaW0= 45476
IGNpdGF0aW9u 45477
IGluZmVyZW5jZQ== 45478
IEZ0 45479
IERhcndpbg== 45480
ZmluZE9uZQ== 45481
IEdlbA== 45482
KENvbnZlcnQ= 45483
IGFjY2Vzc29y 45484
O3RleHQ= 45485
KHNvcnRlZA== 45486
IGp1ZGdlZA== 45487
KTtc 45488
OnA= 45489
IG1laW5l 45490
IFNsaW0= 45491
LkNvbW1hbmRz 45492
IHBlcmNlaXZl 45493
Y29ob2xpYw== 45494
PERhdGE= 45495
LmVudHJ5U2V0 45496
IGFzc2VydEZhbHNl 45497
IFBhdHJvbA== 45498
ZW5zZW0= 45499
xYLEhQ== 45500
qKE= 45501
V0lEVEg= 45502
IFJlc2N1ZQ== 45503
IFVJRg== 45504
X1RIUkVTSE9MRA== 45505
IE1pY2hlbA== 45506
QVRFUklBTA== 45507
b3BlbnNvdXJjZQ== 45508
IERpYW5h 45509
IGludml0ZXM= 45510
X0JPRFk= 45511
IHJlc2Vydm9pcg== 45512
IHJvaQ== 45513
Y3VzdA== 45514
KHRj 45515
77yBIik7Cg== 45516
IGZlc3RpdmFscw== 45517
IHBlcmZvcm1lcnM= 45518
IGNsaW1iZWQ= 45519
IGp1bmdsZQ== 45520
U3RyaW5nTGVuZ3Ro 45521
IHVubGF3ZnVs 45522
aWVycmU= 45523
dmVydGlzZW1lbnQ= 45524
IHN0YWtlcw== 45525
IGhhdHM= 45526
TW9kaWZ5 45527
IExFVFRFUg== 45528
LkhpZGU= 45529
IHN0YXR1dG9yeQ== 45530
X3doaXRl 45531
IFBlcmw= 45532
dXRlbmJlcmc= 45533
ZW1wbGU= 45534
Lldvcmxk 45535
IG92ZXJsb29rZWQ= 45536
IGNvbmNsdWRlcw== 45537
Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 45538
LXdpc2U= 45539
CXN0cmVhbQ== 45540
cG9wdWxhdGlvbg== 45541
IGV2ZW50bw== 45542
IGlsbHVzdHJhdGlvbnM= 45543
ZnRz 45544
IGF1dG9m 45545
IFByb2NlZHVyZQ== 45546
IGRlc2VydmVk 45547
LXRpbWVz 45548
IGdvbA== 45549
TlNFcnJvcg== 45550
Y3Jlc3Q= 45551
IFBha2lzdGFuaQ== 45552
YW55Y2g= 45553
Z2V0Q3VycmVudA== 45554
IGxhcg== 45555
bnRs 45556
IFJlYmVjY2E= 45557
IG1hdGVyaWE= 45558
IGZpbmRCeQ== 45559
L2Fk 45560
Q2FsbGJhY2tz 45561
IEFscw== 45562
IEthdGll 45563
IE9ic2VydmFibGVDb2xsZWN0aW9u 45564
IERvY3VtZW50YXRpb24= 45565
VHlwZWQ= 45566
IEN1bHR1cmVJbmZv 45567
IFRpbW90aHk= 45568
IGxhdGVyYWw= 45569
InR5cGU= 45570
IHVuYXV0aG9yaXplZA== 45571
IHRlYWNoaW5ncw== 45572
IGRlYnVnZ2Vy 45573
W3ZhbHVl 45574
IGFsb3Jz 45575
IHV6 45576
IHNjYXR0ZXI= 45577
IGRvd253YXJk 45578
IG1pZ2xp 45579
c3RhdHVzQ29kZQ== 45580
ICgpKQ== 45581
IE1X 45582
INC80L7Qtg== 45583
Uk9TUw== 45584
LmJ1Zg== 45585
IGZhaXJ5 45586
IEluZnJhc3RydWN0dXJl 45587
PT4i 45588
dGxlbWVudA== 45589
JCgi 45590
RnJvbVN0cmluZw== 45591
IEJpbGQ= 45592
IGNvbnZlbnRpb25z 45593
X25hdGl2ZQ== 45594
IEluc3BlY3Rvcg== 45595
IFBpc3Q= 45596
dWJhcg== 45597
IHJlZ3M= 45598
IFBpbG90 45599
VGh1cw== 45600
Picr 45601
IGNlbGE= 45602
Lm5ld3M= 45603
KFByb2R1Y3Q= 45604
TGl2aW5n 45605
UnVzc2lh 45606
IGZhY2V0 45607
ZXRpY2Fs 45608
IFsnJA== 45609
L1s= 45610
IERpcmU= 45611
IGdhc2Vz 45612
IElORk9STUFUSU9O 45613
IEVhdA== 45614
IEZvcnVtcw== 45615
IENoYXJhY3RlcnM= 45616
X21ldA== 45617
IOyLnA== 45618
IGtpbmdz 45619
YWNoaWU= 45620
IExhbWJkYQ== 45621
IHRpbWVycw== 45622
IExpZ2h0aW5n 45623
IENhc2V5 45624
YWRkaXI= 45625
YW5kZXg= 45626
LmFuc3dlcg== 45627
IEhpcA== 45628
IFByaW5jaXA= 45629
U3RhcnREYXRl 45630
IOOAjA== 45631
dHJlcw== 45632
ICYj 45633
Lk1heFZhbHVl 45634
IFByb2JsZW1z 45635
IGxhdGV4 45636
T2ZDbGFzcw== 45637
IEx5bm4= 45638
Ly8n 45639
IHZveWFnZQ== 45640
IHNodXR0bGU= 45641
IFJvbGxlcg== 45642
IFJ1bnRpbWVFcnJvcg== 45643
dXlh 45644
RGlj 45645
CWJ1aWxkZXI= 45646
IGJ1bGx5aW5n 45647
IHNpbXBsZXN0 45648
LmNhbGxlZA== 45649
IExS 45650
IG1vcmFsaXR5 45651
IHN0dXJkeQ== 45652
dHJhY2tpbmc= 45653
LnN3YWdnZXI= 45654
X0JJTkQ= 45655
SVRPUg== 45656
LXVybGVuY29kZWQ= 45657
INGF 45658
IFRyaW5pdHk= 45659
IHRyYXBz 45660
IHwt 45661
IHNldFRleHQ= 45662
IGJhcmdhaW4= 45663
IGJyYWtlcw== 45664
LmdldENvZGU= 45665
IG1pZ3JhdGU= 45666
IHJpYmJvbg== 45667
KXJldHVybg== 45668
IGNoYXJnZXI= 45669
YWNvbQ== 45670
QURJVVM= 45671
IEFtYmFzc2Fkb3I= 45672
LWFmdGVy 45673
IGFubmk= 45674
CXNwaW4= 45675
Q29uY2VwdA== 45676
IEhlbmRlcnNvbg== 45677
IEhPU1Q= 45678
LnJhbms= 45679
IE5vcnRoZWFzdA== 45680
IGJlcmxpbg== 45681
IHJlcXVpcw== 45682
LmZlZWQ= 45683
IHNvdXJjZU1hcHBpbmc= 45684
IFJlbmNvbnRyZQ== 45685
LmFqYXg= 45686
bmVzdGpz 45687
IHRyZWs= 45688
IE5hY2lvbmFs 45689
ICZb 45690
IHBheWFibGU= 45691
b3J0ZXg= 45692
IGRlcHQ= 45693
ZmllbGROYW1l 45694
IGNvbXBsZXRlcw== 45695
IFJWQQ== 45696
IG9uaW9ucw== 45697
YWxpZ25tZW50 45698
Rm9ybWF0cw== 45699
ICd7JA== 45700
SGFzaFNldA== 45701
IEJvZA== 45702
LkludmFyaWFudEN1bHR1cmU= 45703
IHNldHRsZW1lbnRz 45704
IGh5ZHI= 45705
LnVwZGF0ZWQ= 45706
dmVudGg= 45707
KHNlY29uZHM= 45708
PSIvIg== 45709
IHdlYnBhZ2U= 45710
KAoK 45711
IHRpcg== 45712
IHRvZXM= 45713
IEJyaWNr 45714
IGFtYml0aW9u 45715
UG90 45716
PW1heA== 45717
RVRJTUU= 45718
IGRlcG90 45719
Y2FsbHM= 45720
IE5vcndlZ2lhbg== 45721
YDo= 45722
IGJ1cmdlcg== 45723
IHByb2Zlc3NvcnM= 45724
IEFsbG9jYXRl 45725
LXRoaXJkcw== 45726
LWNoYXJ0 45727
IGZvcmQ= 45728
Kk4= 45729
LmtvdGxpbg== 45730
IHBhcGVyd29yaw== 45731
IERFVklDRQ== 45732
JUAiLA== 45733
cmVzcGVjdA== 45734
KG1w 45735
6auY 45736
LWlm 45737
IGN1c2hpb24= 45738
b2JvdA== 45739
IHBhcmM= 45740
U1BBQ0U= 45741
IE5ldGFueWFodQ== 45742
IHNlbGZpc2g= 45743
ZmVhdA== 45744
IGNsaWVudGVz 45745
LXRvb2xz 45746
IHBvcmNo 45747
IGpx 45748
LnZlcmJvc2U= 45749
IGxpYmVyYWxz 45750
XSkKCgo= 45751
cGllcw== 45752
Tm90Qmxhbms= 45753
KHRlcm0= 45754
yJtp 45755
X1BhcmFtcw== 45756
Lm5vcm1hbGl6ZQ== 45757
QnVsbGV0 45758
QVNJQw== 45759
KGhleA== 45760
X2NsaWVudGU= 45761
Kyw= 45762
X0RJ 45763
IGZvcnRoY29taW5n 45764
fSIpXQo= 45765
c2Vv 45766
VW0= 45767
Pk5hbWU= 45768
IGNvbWZvcnRhYmx5 45769
aXJlY3Rpb25hbA== 45770
V0lUSA== 45771
L3By 45772
IFBvb3I= 45773
IFZpdGFtaW4= 45774
dmlj 45775
R0g= 45776
IHByaW9yaXQ= 45777
IE5O 45778
IENsb3NlZA== 45779
pO0= 45780
IGlzT3Blbg== 45781
XENvbnNvbGU= 45782
QW5kRmVlbA== 45783
LlNVQ0NFU1M= 45784
X09QRVJBVElPTg== 45785
cG9sYXRpb24= 45786
IFRhcw== 45787
cHN6 45788
Picu 45789
Q1VSUkVOVA== 45790
VmVuZG9y 45791
aG9zdHM= 45792
IEVyZA== 45793
PnRhZ2dlcg== 45794
IHNvdXJjZU1hcHBpbmdVUkw= 45795
IG1hcmF0aG9u 45796
X2Nsb3NlZA== 45797
IGV4ZW1wdGlvbg== 45798
IHJlY29nbml6ZXM= 45799
aWRlc2hvdw== 45800
JyQ= 45801
KCcvJyk7Cg== 45802
bWl0cw== 45803
d2Fyeg== 45804
IENoZXJyeQ== 45805
taw= 45806
bm9y 45807
cG9ydGU= 45808
IHds 45809
X2JhY2t1cA== 45810
LmdldEJvb2xlYW4= 45811
LmdldFJlc291cmNl 45812
IGRlZmluaXRpdmU= 45813
LkVkaXRUZXh0 45814
IHPDrQ== 45815
LkNPTlQ= 45816
IFBMQVlFUg== 45817
LmNhcmRz 45818
IFNob3Jl 45819
KCcvJykK 45820
Y2x1aXI= 45821
V2ViRHJpdmVy 45822
KG1vbnRo 45823
LXJlbGVhc2U= 45824
IGluc3BlY3Rvcg== 45825
5aM= 45826
IE5G 45827
X2NsaXA= 45828
5a2Q 45829
IGludGVyYWN0aW5n 45830
LnRtcA== 45831
ICcnJwoK 45832
IGRlZQ== 45833
IGZyb3N0 45834
Il0pKQo= 45835
IFBsYWNlcw== 45836
VGhyb3dz 45837
Zm9yaw== 45838
L2RheQ== 45839
aVBob25l 45840
IE1JQw== 45841
IGZvbGRpbmc= 45842
IGNyb3Jl 45843
IENoaWVmcw== 45844
cGhlcmljYWw= 45845
KHByaWNl 45846
LldyaXRlU3RyaW5n 45847
IGV4aXRpbmc= 45848
XScsCg== 45849
aWdodGluZw== 45850
SW5ncmVkaWVudA== 45851
KHZlcnRleA== 45852
IHNjcm9sbFZpZXc= 45853
aGY= 45854
Om5ldw== 45855
U0VO 45856
c2VjdG9y 45857
IHNwaW5z 45858
IFNjaGVkdWxlcg== 45859
b3RlY2hu 45860
c2VtaWNvbG9u 45861
Rm9udE9mU2l6ZQ== 45862
IFNwZWNpZmljYWxseQ== 45863
ZmxhbW0= 45864
Lk9iamVjdElk 45865
IGNvbnRh 45866
X3Blcm1pc3Npb25z 45867
CUZST00= 45868
SUNPREU= 45869
L2tn 45870
IEhvdGVscw== 45871
LW1lZA== 45872
IERpbg== 45873
IG5hdnk= 45874
Z2V0UGFyYW0= 45875
IG1lbmQ= 45876
IHBvcnRyYXllZA== 45877
IE1ldHJvcG9saXRhbg== 45878
UGFpbnRlcg== 45879
IHJlZmVycmFs 45880
X2dvb2Q= 45881
IG1hcnZlbA== 45882
b3NhaWM= 45883
Pigm 45884
LnVy 45885
IGVzdG9z 45886
V2lsbGlhbQ== 45887
IHRpbWJlcg== 45888
IHF1ZWxxdWVz 45889
IERvY3VtZW50cw== 45890
LlhhbWw= 45891
IGJhdGNoZXM= 45892
6YGT 45893
IFJlbGVhc2Vk 45894
VGFpbA== 45895
Q09PS0lF 45896
aGVpZA== 45897
X3N0YXRpb24= 45898
IFZpYQ== 45899
U2FsZQ== 45900
IFJlcGVhdA== 45901
IHByb21pbg== 45902
IFpv 45903
LWZvcndhcmQ= 45904
IElvbg== 45905
aXRhcnk= 45906
IGp1cw== 45907
LXJlcXVlc3Q= 45908
IHByb3VkbHk= 45909
IFN0cmVhbWluZw== 45910
KE1vdXNlRXZlbnQ= 45911
IFNwcmludA== 45912
X3JvdGF0aW9u 45913
UmVwb3NpdG9yaWVz 45914
IHRhcnQ= 45915
INGB0LI= 45916
IG1hcHBpbmdz 45917
6Ko= 45918
Q3U= 45919
Q3ljbGU= 45920
IGJ1bg== 45921
CWx1YQ== 45922
44OJ 45923
ICgoIQ== 45924
IGNvbGxlY3RpdmVseQ== 45925
IENvbmQ= 45926
IHdzenlzdA== 45927
KGxpYg== 45928
b3BlbmhhZ2Vu 45929
X3NraXA= 45930
LkNvbHVtbkhlYWRlcg== 45931
6YI= 45932
cGVyaWVuY2Vk 45933
j+i/sA== 45934
X3Byb3Bz 45935
IGNvbnRyYWNl 45936
IG1hdGNodXA= 45937
YWJldGlj 45938
Lm1lbWJlcnM= 45939
UkVDVA== 45940
KGRhdA== 45941
IHNvZw== 45942
cmVub20= 45943
X01ldGhvZA== 45944
Q3VzdG9tZXJz 45945
ZnVsbG5hbWU= 45946
Wk4= 45947
cmV0cnk= 45948
IGthcA== 45949
IE5ldQ== 45950
6Io= 45951
YWRkQ2hpbGQ= 45952
d2lsbFJldHVybg== 45953
X3Blcm1hbGluaw== 45954
IGVuZXJnZXRpYw== 45955
IFdldA== 45956
IE1vcnI= 45957
IGdjZA== 45958
Y291bnRz 45959
LHR5cGU= 45960
ZGln 45961
KExvZ2lu 45962
IGNyYWNrcw== 45963
IGJhY3RlcmlhbA== 45964
IE1lYXQ= 45965
IEFybXN0cm9uZw== 45966
IEJyb256ZQ== 45967
IGFwcHJveGltYXRl 45968
X2RpcnM= 45969
bGlnYQ== 45970
xYJhZA== 45971
IGtpbmRuZXNz 45972
IGNvbnRyZQ== 45973
IEVWRVJZ 45974
TUVU 45975
IGFubm91bmNlbWVudHM= 45976
Z3Bpbw== 45977
IFdhaXRGb3JTZWNvbmRz 45978
IFBob3Rvc2hvcA== 45979
IGRpc2NvbnRpbg== 45980
L2Rk 45981
IHRvcG9sb2d5 45982
YW5pY2Fs 45983
LmludGVyZmFjZQ== 45984
YXVjb3Vw 45985
Lkhhc2hTZXQ= 45986
QVJJQU5U 45987
KHJvdXRlcw== 45988
IFRlaA== 45989
IGh5cGU= 45990
XSIpLg== 45991
IHNsYW0= 45992
IGJyb3Ro 45993
LWludGVy 45994
IFJpZA== 45995
LW1hbmFnZXI= 45996
Q2FuY2VsYXI= 45997
IFBhZ2luYXRpb24= 45998
IHNvdW5kdHJhY2s= 45999
IHBvc3Rlcmlvcg== 46000
IHNjcnVi 46001
Y3JlYXRpbmc= 46002
LSo= 46003
aXJ0ZWVu 46004
LmR5 46005
LnN5bW1ldHJpYw== 46006
ICIiLg== 46007
PT09PT09PT09PT09PT09 46008
IGNoYXNzaXM= 46009
IG51bWJlck9mUm93cw== 46010
RGV2ZWxvcGVy 46011
X2JpbnM= 46012
IE9VUg== 46013
cmllYg== 46014
UHJvcw== 46015
IHdpxJk= 46016
ImQ= 46017
IGFzeW5jaW8= 46018
emVpZ2Vu 46019
X3NwaQ== 46020
LkFMTA== 46021
IHNjcmV3cw== 46022
Q2hpbmVzZQ== 46023
IGFwaUtleQ== 46024
IHVuc3VjY2Vzc2Z1bA== 46025
IFNlYWhhd2tz 46026
T1JH 46027
56ug 46028
IHByb2Zlc3Npb25hbGx5 46029
IENvdXBvbg== 46030
5a2X5q61 46031
Q29udmVudGlvbg== 46032
IHBvbHlt 46033
5omL 46034
IHNhbHZhdGlvbg== 46035
IGVuZ2luZWVyZWQ= 46036
IFdyZXN0 46037
IEdDQw== 46038
IHdhcm1lcg== 46039
TGF5b3V0Q29uc3RyYWludA== 46040
IGFnZ3Jhdg== 46041
U2NyaXB0cw== 46042
dmVudHVyZQ== 46043
IHJlZnJpZ2VyYXRvcg== 46044
IGlubm92YXRpb25z 46045
IFJ1bm5lcg== 46046
TklD 46047
IFJvbGxpbmc= 46048
Q29udHJvbEV2ZW50cw== 46049
IGxvb3M= 46050
cGFj 46051
CXBhbmVs 46052
ZWZl 46053
IEJ1ZGRoYQ== 46054
LS0tLS0tLS0tLS0tLS0K 46055
5bqT 46056
KGZvcktleQ== 46057
IGx1bWlu 46058
ICg/ 46059
IEFJRFM= 46060
LHVzZXI= 46061
aW1pZW50b3M= 46062
Y29udGVudFR5cGU= 46063
YW50bHI= 46064
6aY= 46065
IFdlbHQ= 46066
UHJvZHVjdGlvbg== 46067
bWlnaHQ= 46068
IFZJSQ== 46069
Iiwo 46070
IG9ic2VydmluZw== 46071
IGRlbGliZXJhdGU= 46072
KGNvbnRyb2w= 46073
IHdpdGhk 46074
IHNlbWFuYQ== 46075
U1RBQ0s= 46076
dWNoZW4= 46077
TmljZQ== 46078
IERldXRzY2hsYW5k 46079
IFNwZWNpZmllcw== 46080
ZG1h 46081
aXppbw== 46082
IEZhY3Rz 46083
X3BvcHVw 46084
IERpcmVjdG9ycw== 46085
ezo= 46086
W1I= 46087
INGN0LvQtdC80LXQvdGC 46088
IHBsYXQ= 46089
IGRpcmVjdGluZw== 46090
5LiJ 46091
IEdpbGJlcnQ= 46092
4oCmLgoK 46093
LnFtbA== 46094
IHRoZXJlYWZ0ZXI= 46095
IGRpc3Bvc2l0aW9u 46096
ZHJhZnQ= 46097
IHN1cmdlb24= 46098
IEluc2lkZXI= 46099
QmxlbmQ= 46100
IFRyZXY= 46101
dHJpbnNpYw== 46102
VG9waWNz 46103
cmlldmU= 46104
X0ZJTEVOQU1F 46105
IGF1dHJlcw== 46106
Sm9zZQ== 46107
UHJvZHVjZXI= 46108
ZXJ1cw== 46109
IHBldGl0 46110
IE5FWFQ= 46111
IEZpbHRlcnM= 46112
IHJlcGxpY2F0ZQ== 46113
Il0pLg== 46114
IGxlbmRlcnM= 46115
XSIsCg== 46116
O2NoYXJzZXQ= 46117
Q3BwT2JqZWN0 46118
IGZsb3JhbA== 46119
IFRpcG8= 46120
IGNpcmN1aXRz 46121
ZWFzeQ== 46122
KCYk 46123
aXR0YQ== 46124
ZXJ5bA== 46125
X0NPTU1PTg== 46126
J319Pgo= 46127
LWJhY2tlZA== 46128
KHZhcmlhYmxl 46129
KEluZGV4 46130
IHZvaXI= 46131
X2xvY2F0aW9ucw== 46132
Kyspew== 46133
IExvdWlzdmlsbGU= 46134
IGdyYXRpdHVkZQ== 46135
Lk1vY2tpdG8= 46136
IFBvd2Vycw== 46137
aWV1cnM= 46138
IGdlb2dyYXBoaWM= 46139
cmFsZQ== 46140
IGNyYQ== 46141
IFNwdXJz 46142
aXBoZXJ0ZXh0 46143
QUNJT04= 46144
LWNvbW1vbg== 46145
IHZpY3Rvcmllcw== 46146
IEZpbmFscw== 46147
LnNodWZmbGU= 46148
LW1pbGxpb24= 46149
X1BST0M= 46150
YXNzdW1l 46151
IGlscw== 46152
REJD 46153
Qm9vdFRlc3Q= 46154
IGxhdm9y 46155
LnRlc3Rpbmc= 46156
LmFzdA== 46157
Il0v 46158
bW9pZA== 46159
IHF1YWxpZmljYXRpb24= 46160
Z2VzY2g= 46161
CXB1dA== 46162
IGFpcnBvcnRz 46163
Skk= 46164
VGVhY2hlcg== 46165
X3VuaWZvcm0= 46166
IG5hbWE= 46167
IEJhc3Q= 46168
ZXJ0eXBl 46169
Y2FwdHVyZQ== 46170
Z2V0QWxs 46171
IFJleW5vbGRz 46172
b29sZWQ= 46173
LmNvbW1lbnRz 46174
IGNoaW4= 46175
KS4q 46176
INC40LvQuA== 46177
dGds 46178
dWRvcw== 46179
IGTDrWFz 46180
Y2hhaQ== 46181
LnByb2dyYW0= 46182
IHBzeg== 46183
CWljb24= 46184
cGhpbA== 46185
ZW50cmFs 46186
X1dSQVA= 46187
b3Zp 46188
IG5vc3RhbGc= 46189
SW5maW5pdHk= 46190
CXlpZWxk 46191
IHZpdGFtaW5z 46192
UXVhdGVybmlvbg== 46193
U2luaw== 46194
X2dvb2Rz 46195
IC4uLi4uLi4u 46196
IFdpbmdz 46197
dXJpZGFk 46198
LXN0b3J5 46199
Il0pCgo= 46200
aWRlbGl0eQ== 46201
VHlwZURlZg== 46202
R3Rr 46203
IO2M 46204
X01haW4= 46205
IGNoZXo= 46206
IFJhdmVu 46207
IHBheXJvbGw= 46208
IGZyZWVsYW5jZQ== 46209
TExV 46210
IE1lbmQ= 46211
ZWRheQ== 46212
QXBpTW9kZWxQcm9wZXJ0eQ== 46213
LkZvcm1Cb3JkZXJTdHlsZQ== 46214
IGVjb25vbWlzdA== 46215
c3RhbmJ1bA== 46216
IGZyZWlnaHQ= 46217
LUFnZW50 46218
KG1ldGE= 46219
IHN5bW1ldHJ5 46220
ICcuLg== 46221
LkNhbGVuZGFy 46222
LWF1dA== 46223
Z2Y= 46224
cGVudA== 46225
eWNsb3BlZGlh 46226
IHdpc2hpbmc= 46227
CgoKCgoKCgoKCgoK 46228
IGdlbnRsZW1hbg== 46229
IOqz 46230
PSM= 46231
IGxlY3R1cmVz 46232
4oCcSW4= 46233
ICFf 46234
IGhi 46235
IFZlbmRvcg== 46236
UmVjZW50bHk= 46237
X25vdGVz 46238
5o+Q56S6 46239
Ik15 46240
SGVhZGVyc0hlaWdodA== 46241
X1NP 46242
IHVud2lsbGluZw== 46243
IHN1cGVyaGVybw== 46244
Z2lv 46245
cHN5 46246
IFBlZXI= 46247
amF2YXg= 46248
JmFwb3M= 46249
IENyaXNpcw== 46250
b3JkaW5hbA== 46251
TWVtY3B5 46252
KysrKysrKysrKysrKysrKw== 46253
LXZhbA== 46254
IHdvcmtib29r 46255
LWFw 46256
PWs= 46257
IG1ldGFsbGlj 46258
X3BlZXI= 46259
QnlQcmltYXJ5S2V5 46260
X1NE 46261
dWF0b3I= 46262
X1NIQURFUg== 46263
KU1hdGg= 46264
LlRyYW5zZm9ybQ== 46265
IGNvd3M= 46266
UGhp 46267
IENsZW0= 46268
KF8oIg== 46269
IEx1ZA== 46270
LWRlbGF5 46271
IFNlY3VyaXRpZXM= 46272
IE9ydGhvZG94 46273
U3ltZm9ueQ== 46274
KHJlcG9ydA== 46275
IGVudGVydGFpbg== 46276
RVBT 46277
aXpvcGg= 46278
ZXh1YWw= 46279
SVJE 46280
5LuO 46281
IGxpdGg= 46282
IHNhbml0aXpl 46283
IGZlbWluaW5l 46284
SVNCTg== 46285
LmF1dGhlbnRpY2F0aW9u 46286
X3BpcGVsaW5l 46287
L2NvbnN0YW50cw== 46288
IENPTkY= 46289
IGx1Y3I= 46290
cmljaWE= 46291
LnR0Zg== 46292
LnNldENvbnRlbnQ= 46293
IHN0YW4= 46294
b3JlYW4= 46295
IExsb3lk 46296
LnJhd1ZhbHVl 46297
IGdvcg== 46298
IEJyb3ducw== 46299
UmVncmVzc2lvbg== 46300
IGxvd2VyaW5n 46301
bmFpc3NhbmNl 46302
IGJsb3dz 46303
IGFtYXplZA== 46304
IHVucmVsYXRlZA== 46305
UmV2aWV3cw== 46306
IHJ1Ynk= 46307
IE1vZGlmaWVy 46308
IGdpYW50cw== 46309
LnRocmVhZA== 46310
IGNvbnRhaW5tZW50 46311
IFN0YXJ0Q29yb3V0aW5l 46312
dW1hdA== 46313
b3JlbGVhc2U= 46314
IFJhbmR5 46315
QGVuZGlm 46316
RGlnZXN0 46317
IHN1YnVyYmFu 46318
PSIpOwo= 46319
IGFubm9uY2U= 46320
LnZhcmlhYmxl 46321
XEZvdW5kYXRpb24= 46322
IGFjcmU= 46323
VmFu 46324
IHR1cGxlcw== 46325
ZG5z 46326
IFN0YW5kaW5n 46327
X2xhcmdl 46328
IGJveGluZw== 46329
U3VwcG9ydEFjdGlvbkJhcg== 46330
IEZvcnR1bmU= 46331
IFJ1bQ== 46332
X211bHRpcGxl 46333
YXJjaGljYWw= 46334
IGZ3cml0ZQ== 46335
X3F1b3Rl 46336
IGZvb2xpc2g= 46337
IGNvbXByaXNpbmc= 46338
INC+0L8= 46339
LXNlbGVjdGVk 46340
dmY= 46341
bWFpZA== 46342
TmFtYQ== 46343
KGRhdGV0aW1l 46344
IGluZGlyZWN0bHk= 46345
Z2FydA== 46346
Zml4dHVyZXM= 46347
Y2hvcw== 46348
IEhhbG8= 46349
IHJlY3VycmluZw== 46350
LW5ld3M= 46351
dmls 46352
IE51cnNpbmc= 46353
LXByb2R1 46354
IEhR 46355
XEh0dHBGb3VuZGF0aW9u 46356
ZW5jaQ== 46357
YXVlbg== 46358
IHZ5 46359
b2NyYWN5 46360
IGRlbGVnYXRpb24= 46361
IGFzcGhhbHQ= 46362
IHNldFNlbGVjdGVk 46363
a29r 46364
L3Jlc3Q= 46365
bWV0aWNz 46366
IE5TRGF0ZQ== 46367
IHRyYXZlbGxlZA== 46368
IHJlY2li 46369
IG1pbWU= 46370
Q0xJRU5U 46371
IEdV 46372
IEhBTkRMRQ== 46373
L1E= 46374
W3o= 46375
IGJvdGhlcmVk 46376
IEJCUQ== 46377
w6dhcw== 46378
X2V4YW1wbGVz 46379
X0ZJTg== 46380
IHdoaXRlQ29sb3I= 46381
IGFzdHJvbm9t 46382
LWRpcg== 46383
IHNvdmVyZWlnbg== 46384
IGJyZWV6ZQ== 46385
IGlubmluZw== 46386
IEVkbW9udG9u 46387
Z2xp 46388
LmJsb2dzcG90 46389
anN4 46390
IHZlcnNh 46391
IE1vaGFtbWVk 46392
LkpvYg== 46393
LXRvZ2dsZXI= 46394
INC/0L7Qu9GM0LfQvtCy0LDRgg== 46395
YXJkb24= 46396
IG5ld2Jvcm4= 46397
IG5hdmFs 46398
bm90ZXE= 46399
IHR1bWJscg== 46400
IGhlbnRhaQ== 46401
IFR5cGljYWxseQ== 46402
IGxvb3Q= 46403
LlNwcml0ZQ== 46404
RmxpZ2h0 46405
IHdhdmVsZW5ndGg= 46406
LXNr 46407
IEVsbGU= 46408
X2V4cG9ydHM= 46409
INGP 46410
IElI 46411
aXpvcGhyZW4= 46412
IO2B 46413
X3ByaW1hcnk= 46414
IG1vaXM= 46415
IEJO 46416
IHN5c3RlbWlj 46417
IGRpZmVyZW50ZXM= 46418
SU5DVA== 46419
ICcnCgo= 46420
JHE= 46421
V2lkZ2V0SXRlbQ== 46422
Y2xpZGU= 46423
JGZpbGU= 46424
TGVtbWE= 46425
L3RhYmxl 46426
YWdyaWQ= 46427
IE1vbmdvREI= 46428
aW50ZQ== 46429
IGFwcHJlbnQ= 46430
wq1pbmc= 46431
LkRi 46432
IMOC 46433
aGFtbWVy 46434
PScnOwo= 46435
IGJyb2tlcnM= 46436
aXRsZW1lbnQ= 46437
c2VtYmxpZXM= 46438
RWxl 46439
e3g= 46440
IGxhc3RuYW1l 46441
PC0= 46442
IGZsYXR0ZW4= 46443
X2JhbmQ= 46444
LlJvb3Q= 46445
LnJlYWRGaWxlU3luYw== 46446
PT09PT09 46447
LnJ4 46448
Pw0K 46449
IG1ldGFwaG9y 46450
VGk= 46451
Y29udGU= 46452
IGRlYml0 46453
IGNvbnRlbXB0 46454
Q3BwVHlwZQ== 46455
5pSv 46456
Rm9ybUZpZWxk 46457
cmF0aW8= 46458
b3NvcGhlcg== 46459
IGltcGxhbnQ= 46460
UFVSRQ== 46461
IGFsdGE= 46462
X21hbmFnZW1lbnQ= 46463
IHJlZmluZQ== 46464
IENoZWNrQm94 46465
IENoYXJs 46466
LXZlcnNpb24= 46467
Y29uZGl0aW9uYWw= 46468
dmVudWVz 46469
IHJpZmxlcw== 46470
IG9mZnNwcmluZw== 46471
IG1pbGxpbmc= 46472
IHNoYXJwbHk= 46473
IHVuZGVyd2F0ZXI= 46474
KG9yaWdpbg== 46475
X0NvbnRyb2w= 46476
IC4k 46477
UGx1Z2lucw== 46478
IGRyeWluZw== 46479
IGlsbHVzdHJhdGVz 46480
LXU= 46481
IHZlZ2V0YXJpYW4= 46482
bnBj 46483
SGVhcnQ= 46484
OycsCg== 46485
Y29tbWE= 46486
dGVlbnRo 46487
YXNhbg== 46488
L3NwZWM= 46489
X21vdmVz 46490
LW1hcmdpbg== 46491
IGluZ2Vu 46492
wqDCoMKg 46493
IHByb2pldA== 46494
IG90cmE= 46495
IGJyYXM= 46496
LnV0Yw== 46497
IHNsZXB0 46498
PXN1Yg== 46499
YWJpbGl0 46500
cG9zdGVy 46501
IHNkaw== 46502
b3VuY2lsbA== 46503
IHdk 46504
UHJlcGFyZWRTdGF0ZW1lbnQ= 46505
IERydW0= 46506
KGF0dHJpYnV0ZQ== 46507
IEV0aGVybmV0 46508
CURC 46509
Q2FsaWZvcm5pYQ== 46510
Y3ViZQ== 46511
W0k= 46512
LkNyZWF0ZWQ= 46513
IEhN 46514
IHRyYWNpbmc= 46515
Rm9ybXNNb2R1bGU= 46516
LXlvdQ== 46517
LmN1cnJlbmN5 46518
ZmVlZGluZw== 46519
IHRib2R5 46520
TGk= 46521
YWNjaW9u 46522
bmFz 46523
IHRyb3V2ZXI= 46524
Tk9ORQ== 46525
In0sDQo= 46526
IGZ0cA== 46527
V2l0aElkZW50aWZpZXI= 46528
cG9sYXRl 46529
RmlsZUluZm8= 46530
IHB1cnN1ZWQ= 46531
ICAgIA0KICAgIA0K 46532
REVTQ1JJUFRJT04= 46533
fSovCg== 46534
RnJvbU5pYg== 46535
IGRlY29yYXRpdmU= 46536
X1NTTA== 46537
KGNoYXQ= 46538
VExT 46539
IHN1cnByaXNlcw== 46540
YWxjdWxhdGU= 46541
IFNwbGFzaA== 46542
KENvbmZpZ3VyYXRpb24= 46543
IFNFTQ== 46544
aW1zb24= 46545
L2xpYnJhcnk= 46546
PERvdWJsZQ== 46547
LnJvYm90 46548
wqDCoMKgwqDCoMKgwqDCoA== 46549
IENQRg== 46550
IFVuZGVyc3RhbmRpbmc= 46551
IGNvc21ldGlj 46552
IFh0 46553
dGlwcw== 46554
K2s= 46555
KCIn 46556
IFBEVA== 46557
V0FS 46558
LmdldE9iamVjdA== 46559
IFRyYWRpdGlvbmFs 46560
LnNsdWc= 46561
IERpcGw= 46562
PSIiLA== 46563
IEZpbG1z 46564
IEFuaW0= 46565
LmhlbHA= 46566
IGVtYmFzc3k= 46567
IEJvb3Rz 46568
IGJ1bms= 46569
LXJpc2s= 46570
IHBjaQ== 46571
IC9cLg== 46572
IElQVA== 46573
IGNyYXNoaW5n 46574
IGlwdg== 46575
X2tl 46576
IFJFU1A= 46577
LkxvZ0Vycm9y 46578
IGluYWRlcXVhdGU= 46579
SW9u 46580
IEbDvHI= 46581
cmljdWxh 46582
IHNob3VsZEJl 46583
YWxyZWFkeQ== 46584
J10uIjwv 46585
IFN0dWZm 46586
RGlnaXRl 46587
IHRyYW5zbGF0b3I= 46588
X3Nwcml0ZQ== 46589
bGV0YWw= 46590
IG1haW9y 46591
IFNleGU= 46592
dGhhbmtz 46593
IENvbXBsZXRlZA== 46594
IGdhc29saW5l 46595
LmF0dHJz 46596
YmFnYWk= 46597
IE9yaWc= 46598
Ol0s 46599
LmxvY2FsZQ== 46600
IFJvbWE= 46601
w61m 46602
IGZhdm9yZWQ= 46603
IHZhaW4= 46604
IHNwb29u 46605
IEphaHJlbg== 46606
IG5pbmc= 46607
V1dX 46608
LGZsb2F0 46609
X0RBVEFCQVNF 46610
Qm9vdHN0cmFw 46611
IENCQw== 46612
IENodW5r 46613
X2ludG8= 46614
IEtvbA== 46615
IGRlZmVuc2Vz 46616
b3JlZFByb2NlZHVyZQ== 46617
YmFsbHM= 46618
VGV4dENoYW5nZWQ= 46619
IHNoYXBpbmc= 46620
IH19Pg== 46621
R0VE 46622
ZmFx 46623
IG9wdGlvbmFsbHk= 46624
X0Rpcw== 46625
IFN1Y2Nlc3NmdWw= 46626
IENlbnN1cw== 46627
IGluY2FyY2Vy 46628
X0NBUkQ= 46629
IGF2aWF0aW9u 46630
IEd5bQ== 46631
QXV0aG9yaXR5 46632
LkJlYW4= 46633
c2hhZGVy 46634
Tm90RXhpc3Q= 46635
X1RleHRDaGFuZ2Vk 46636
IFNUT1A= 46637
KHRlYW0= 46638
Ikg= 46639
d2c= 46640
IGdyaW5kZXI= 46641
IHN0cmlwZQ== 46642
IHByZXNlcnZhdGlvbg== 46643
Q2xhaW0= 46644
YXZlcnNhbA== 46645
d2FyZWhvdXNl 46646
dGFyZ2V0cw== 46647
VHJ1c3Q= 46648
IGFsbGV2 46649
LHd3dw== 46650
b3Vzc2U= 46651
X2NoYW4= 46652
X1NpemU= 46653
c3lzdGVtcw== 46654
IG9iamVjdGlvbg== 46655
IEthbmU= 46656
IGNvcnJvcw== 46657
IERTTA== 46658
IHVh 46659
IE1I 46660
IFN0cmF0ZWdpYw== 46661
X3RjcA== 46662
IOqwkg== 46663
IGJvcnJvd2Vk 46664
IEFjaA== 46665
CWNvbW1hbmQ= 46666
IGdwcw== 46667
bGVzdG9u 46668
aWNoZXZlcg== 46669
IFVB 46670
IGFzc2F1bHRlZA== 46671
IHNwZWNpYWxpemVz 46672
CXNlYXJjaA== 46673
SG90ZWw= 46674
ICAgICAgICAgICAgICAgICAgICANCg== 46675
IFBpdGNo 46676
INmB 46677
UkVBRFk= 46678
IHBhcmVudGFs 46679
IGfDqW7DqQ== 46680
IGRvbm7DqWVz 46681
IGRldGFpbg== 46682
VEFSR0VU 46683
IHByb3RhZ29uaXN0 46684
IGNsZWFySW50ZXJ2YWw= 46685
IEljb25CdXR0b24= 46686
IEdldEFsbA== 46687
VHlwZUluZm8= 46688
RUg= 46689
4oCcVGhleQ== 46690
IHtb 46691
IGdhZw== 46692
INqp 46693
IERyb3Bkb3du 46694
LmZyZWU= 46695
Z29uZQ== 46696
aW1lbnM= 46697
IGluc3RhbA== 46698
CWN1cmw= 46699
X0NBTg== 46700
IEJvbmU= 46701
77yU 46702
b255bXM= 46703
LWdvdmVybm1lbnQ= 46704
LmJpbmRpbmdOYXZpZ2F0b3I= 46705
IERhbnM= 46706
IE1jTA== 46707
KGVu 46708
Pihf 46709
0JLRiw== 46710
Lio7DQo= 46711
PWo= 46712
LWNvcg== 46713
U29u 46714
LlRvb2xTdHJpcEl0ZW0= 46715
LWFyb3VuZA== 46716
X1hNTA== 46717
ZW5kRGF0ZQ== 46718
IHNsYWNr 46719
IHJvdGF0ZWQ= 46720
IG5vcWE= 46721
IGNvdHRhZ2U= 46722
IGVuY29udHJhcg== 46723
X3NraWxs 46724
aG91ZXR0ZQ== 46725
IQ0K 46726
LndlYXRoZXI= 46727
IGVtcGhhc2l6ZWQ= 46728
5a62 46729
INGB0L/QuNGB 46730
IENvbXBpbGVy 46731
KGFuZHJvaWQ= 46732
IOKAug== 46733
LnR1cm4= 46734
IHN1cHByZXNzaW9u 46735
X2NhbGxz 46736
ICpA 46737
KHN0cmxlbg== 46738
LmhleA== 46739
IEJpbGxz 46740
IFJTQQ== 46741
z4I= 46742
IEVzY2FwZQ== 46743
ZW1lbnRpYQ== 46744
IGZyb250ZW5k 46745
IHBpbnQ= 46746
X2V4Yw== 46747
enpv 46748
W10sCg== 46749
ICInLCci 46750
LkVudmlyb25tZW50 46751
IGFmb3JlbWVudGlvbmVk 46752
IGVuZHVyZQ== 46753
cHJvdG90eXBl 46754
dGhlcmFweQ== 46755
c3Np 46756
RGVn 46757
X3BsdWdpbnM= 46758
LnVzZXJJbmZv 46759
UHJpbnRlcg== 46760
IFBST0dSQU0= 46761
IHJ1aW5z 46762
IGVtcGlyaWNhbA== 46763
IGNyYXds 46764
IEJvaWxlcg== 46765
LWNvbW1lbnQ= 46766
LnN1YnBsb3Q= 46767
X2V0 46768
ICcuJyw= 46769
bWlub3I= 46770
IEN1c3RvbXM= 46771
IHlhdw== 46772
dW5kZXJsaW5l 46773
IENvbW8= 46774
KCgn 46775
KG1lYW4= 46776
IGNoYXF1ZQ== 46777
IEJsb2Nrcw== 46778
LnJhZA== 46779
aWxpYnJpdW0= 46780
IHdlYmRyaXZlcg== 46781
IG1lbGhvcg== 46782
ZGFuYQ== 46783
IEFidXNl 46784
IFNvdXRod2VzdA== 46785
IFBhcmVu 46786
UEVSVElFUw== 46787
CUlM 46788
IHNjcmVhbQ== 46789
dnU= 46790
IGluY29tZXM= 46791
IG5pbQ== 46792
IGxhY2U= 46793
IGNvbXBlbnNhdGU= 46794
UmV2ZXJzZQ== 46795
RGF0 46796
X2F0dGFjaw== 46797
IG5vdXI= 46798
YWNoZW4= 46799
Y2Vr 46800
PEZ1bmM= 46801
d2ll 46802
Y29tcHJlc3NlZA== 46803
LW1hdGNo 46804
KCIiKV0K 46805
aW1pemVk 46806
Lm9yaWVudGF0aW9u 46807
LmNvbXBhcmVUbw== 46808
IG1hc3NhZ2dp 46809
IOychA== 46810
IGVsYm93 46811
IGFudGlveGlk 46812
dW5kcmVkcw== 46813
L3Rvb2xz 46814
IFJPVw== 46815
YW5tYXI= 46816
IFdvdw== 46817
X3RpY2tldA== 46818
UHJvZ3JhbW1pbmc= 46819
IHRoZW9y 46820
LXJldmlldw== 46821
KCkpKSk7Cg== 46822
IFJpY2hhcmRzb24= 46823
IFBvY2tldA== 46824
XVtd 46825
YW1wcA== 46826
X2hlYWx0aA== 46827
IFBPUA== 46828
IE5hdmFs 46829
R3Vlc3M= 46830
IGFuY2VzdG9y 46831
LkdldEFsbA== 46832
LmxvY2FsU2NhbGU= 46833
IE1hcHBlcg== 46834
IGFjY3VtdWxhdGlvbg== 46835
IHNpbXVsYXRlZA== 46836
IERyaXZlcnM= 46837
IGTDqXM= 46838
Y3VycmluZw== 46839
IGVsZXBoYW50 46840
IGFkdmVydGlzZWQ= 46841
IG1haWxib3g= 46842
U0hJRlQ= 46843
IE1vbmljYQ== 46844
IGFuYw== 46845
IHdhcmRyb2Jl 46846
SW5ncmVkaWVudHM= 46847
IHx8DQo= 46848
aXBweQ== 46849
IGFudGliaW90aWNz 46850
YXZpbmdz 46851
KGN4 46852
IEZlcnJhcmk= 46853
IEFuaW1hdG9y 46854
LmR0eXBl 46855
cmVtb3ZlZA== 46856
b3JkZXJieQ== 46857
IGNyZXM= 46858
b2PDqg== 46859
IHB5bQ== 46860
IENpcmN1bGFy 46861
QGluZGV4 46862
IFdhcm0= 46863
U2F5 46864
IEFzc2lzdGFuY2U= 46865
IGN1cnRhaW4= 46866
IE1vbnRl 46867
SUxFUg== 46868
IENWRQ== 46869
IER1Y2s= 46870
IEFsbG93cw== 46871
X2ZpcmU= 46872
IERlcmJ5 46873
IHJlcG9z 46874
IGh0dHBDbGllbnQ= 46875
IHBzeWNoaWF0 46876
IG5vd2FkYXlz 46877
IGNhdXRpb3Vz 46878
IENvbXB1dGluZw== 46879
IGNvbXBsZXRpb25IYW5kbGVy 46880
IFdlbHNo 46881
IEJFU1Q= 46882
IHN0cmVzc2Z1bA== 46883
X1BF 46884
5pel5pyf 46885
IERhdGFGcmFtZQ== 46886
CUludGVnZXI= 46887
X1ByaW50 46888
TW92ZXM= 46889
IHRyYW5zZm9ybWluZw== 46890
LkJhdGNo 46891
eWFob28= 46892
UG9zaXRpb25z 46893
emVq 46894
IG5vb2Q= 46895
aW9yZXM= 46896
Xyo= 46897
IGNsaw== 46898
IEZsb3lk 46899
IGhhcA== 46900
Zm9udHNpemU= 46901
IG5heg== 46902
Lm5vdGlmaWNhdGlvbg== 46903
IERlcHJlc3Npb24= 46904
IGFjbmU= 46905
KioqCgo= 46906
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== 46907
LmNvbnRlbnRz 46908
eW50aA== 46909
IFN0cmFpZ2h0 46910
Jyl9fSI+PC8= 46911
IGJ1bGI= 46912
Ulg= 46913
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 46914
IGNvbXVuaWM= 46915
IFJO 46916
LW1lZGl1bQ== 46917
TEVBTg== 46918
PWxlbg== 46919
UGhvbmVOdW1iZXI= 46920
ZXJ2YXRpb25z 46921
QWNjdXJhY3k= 46922
IEFubm90YXRpb24= 46923
X2tleXdvcmQ= 46924
X2hpbnQ= 46925
IEF0aGVucw== 46926
IGFzc2lzdGluZw== 46927
IEhD 46928
LkluaXRpYWxpemU= 46929
JykpKQo= 46930
dXBh 46931
IHN1aXY= 46932
IElQQw== 46933
PFRFbnRpdHk= 46934
IGJyYW5kZWQ= 46935
b29tbGE= 46936
bGFyxLE= 46937
IFhNTEh0dHBSZXF1ZXN0 46938
IGTDqWrDoA== 46939
IHRyYW5zY3JpcHRpb24= 46940
IHByZXZhbGVudA== 46941
LnBsYW4= 46942
IHN0YXJl 46943
IHdvcmtvdXRz 46944
IEVkdWNhdGlvbmFs 46945
IG1lc3N5 46946
IE1PVA== 46947
LkNvbW1hbmRUeXBl 46948
UWVk 46949
KGdjYQ== 46950
IExpbmVhckxheW91dE1hbmFnZXI= 46951
IEJsb3c= 46952
IEFsdW1pbnVt 46953
IHN3aW5nZXJjbHVi 46954
IFRyYW5zaXQ= 46955
IGV4cG9z 46956
dmly 46957
KHNlY29uZA== 46958
IGJlbG9uZ2Vk 46959
U3RvbmU= 46960
6ZW/ 46961
IFN1bA== 46962
IGdpZA== 46963
IGFsbG95 46964
ZXJ2YQ== 46965
aXNlY29uZA== 46966
X1JFTkRFUg== 46967
IGFuZ2Vscw== 46968
IFBoaWxvc29waHk= 46969
b3B1cw== 46970
IG1vbw== 46971
ZW5ndWlu 46972
X1ZBUklBQkxF 46973
X0RFU1Q= 46974
KGF1eA== 46975
IGhvZQ== 46976
IGRvYg== 46977
YXR0YWNobWVudHM= 46978
IGNvcnJpZG9y 46979
IGRpdmlkZW5k 46980
nbw= 46981
IFRocm91Z2hvdXQ= 46982
Lm9wdGlt 46983
JG5ldw== 46984
IGJlcmc= 46985
IHNwcmVhZHNoZWV0 46986
LlRyeUdldFZhbHVl 46987
IHBheW91dA== 46988
IE9uRGVzdHJveQ== 46989
YXV0aGVudGljYXRpb24= 46990
IE1pZ3VlbA== 46991
cnRj 46992
IENocmlzdGluZQ== 46993
IEFJUg== 46994
IGp1cmlz 46995
IGRlc3BhaXI= 46996
IHBhdGVudHM= 46997
LWhhcw== 46998
JV4= 46999
5LuY 47000
X3N0cmR1cA== 47001
IFJlYXI= 47002
ZXR0ZXM= 47003
KHByb3BlcnRpZXM= 47004
IHdyaXRhYmxl 47005
LmlzTnVsbA== 47006
b2xpY3M= 47007
X2Jsb2I= 47008
IGN1YWxxdWllcg== 47009
YWZp 47010
b3d5Y2g= 47011
6I635Y+W 47012
w4c= 47013
IENhcmRpbmFs 47014
IHRlbWE= 47015
IkFuZA== 47016
UGFnZVNpemU= 47017
56eS 47018
LlNpbXBsZURhdGVGb3JtYXQ= 47019
IFdpbm5lcg== 47020
IGNvcnJlbw== 47021
X3dl 47022
LmFkZE9iamVjdA== 47023
KGNvdXJzZQ== 47024
IGhvZw== 47025
b3Bybw== 47026
IHByb2JhdGlvbg== 47027
dW5hYmxl 47028
KGFjdGl2ZQ== 47029
5Zu+54mH 47030
IHBlcnRhaW5pbmc= 47031
IGVtcGhhc2l6ZQ== 47032
IFByaW50ZXI= 47033
PS4= 47034
IHVwZ3JhZGluZw== 47035
L2NvbnRhY3Q= 47036
PVtb 47037
LXNhbg== 47038
CXZhbHVlcw== 47039
IGRvc2FnZQ== 47040
U29saWQ= 47041
IFJvb3NldmVsdA== 47042
5ZWG5ZOB 47043
IHJlY3JlYXRpb24= 47044
IFRlcm1pbg== 47045
LkJhZA== 47046
IEJvbHQ= 47047
U2t5 47048
X0ltYWdl 47049
IHNxdWly 47050
IENvYg== 47051
T1JO 47052
IGF1Yw== 47053
LkxFRlQ= 47054
J0I= 47055
LXJlc2lzdGFudA== 47056
PiIr 47057
IHRva2VuaXplcg== 47058
IHNvdmVyZWlnbnR5 47059
IFBlbmNl 47060
KCkiKTsK 47061
IHBlc3NvYXM= 47062
Lkdl 47063
IEluY2x1ZGVk 47064
IHBhZ2luYQ== 47065
IGV4cG9zaW5n 47066
0LXRiA== 47067
X1NDUklQVA== 47068
LyQnLA== 47069
VGh1bWJuYWls 47070
15Q= 47071
d2ViRWxlbWVudFg= 47072
d2ViRWxlbWVudFhwYXRocw== 47073
cHJlc3N1cmU= 47074
IEN1cnJ5 47075
X0NQ 47076
T0xVVElPTg== 47077
SUxFUw== 47078
cHJvdGVjdA== 47079
b29sYQ== 47080
V29ya3NwYWNl 47081
e307Cg== 47082
IFVOUw== 47083
IHN5bXBhdGh5 47084
cm9rZXI= 47085
IHJlbW9kZWw= 47086
CWNlbGw= 47087
IGF0b3A= 47088
LkZ1bGxOYW1l 47089
IGZhdXQ= 47090
IEVhc2lseQ== 47091
X2R5bmFtaWM= 47092
IGZyYW1lZA== 47093
IG1vdGl2ZQ== 47094
6Lev 47095
c2Ft 47096
IG1hcmNh 47097
IFRleHRFZGl0aW5nQ29udHJvbGxlcg== 47098
IGRlc3RydWN0b3I= 47099
Y3JlYW0= 47100
IHJ1ZGU= 47101
IEJvbGQ= 47102
IEluZGlnZW5vdXM= 47103
IGdlbnM= 47104
IHJlbGFjaW9u 47105
KHN5c3RlbQ== 47106
IFVJRm9udA== 47107
X2NoYXJnZQ== 47108
VVNURVI= 47109
RVY= 47110
Lk5hbWVzcGFjZQ== 47111
IG1lcmdlcg== 47112
IGNhbGxvYw== 47113
Z2FuZw== 47114
QmFkUmVxdWVzdA== 47115
IHNwZXI= 47116
LWRlc2lnbg== 47117
IOKH 47118
Q2hhbg== 47119
IG9yZ2FuaXNt 47120
LCk= 47121
PWlk 47122
X3BsYW5l 47123
IENhc2Vz 47124
ZWxmYXN0 47125
IExlZ2lzbGF0dXJl 47126
IEZha2Vy 47127
IGludm9raW5n 47128
LXV0aWxz 47129
KCkuJw== 47130
LmZhY2U= 47131
IGd1YXJkaWFu 47132
bXlNb2RhbA== 47133
IGNsaXBib2FyZA== 47134
IEFUTQ== 47135
IHBlYXM= 47136
IFN5bHY= 47137
LmNhbGM= 47138
IENvbnRhY3Rz 47139
aW50VmFsdWU= 47140
IG1vZGlmeWluZw== 47141
IEJhcmI= 47142
Lmxvc3M= 47143
X3BlcmNlbnRhZ2U= 47144
QXNrZWQ= 47145
KGxzdA== 47146
YXRlZ29yaWNhbA== 47147
LWZpbGVz 47148
IFJvbWFuaWE= 47149
LkFj 47150
IGhhaQ== 47151
IEZseWluZw== 47152
IMW8 47153
anA= 47154
IFRyYWluZXI= 47155
LmFyYw== 47156
X2RlZw== 47157
IHRyYWNlYmFjaw== 47158
T3JGYWls 47159
RkxPVw== 47160
Lm9sZA== 47161
b3lh 47162
Z210 47163
aXNlbXB0eQ== 47164
IHZhY2NpbmF0aW9u 47165
IG9ic29sZXRl 47166
cmVjb2duaXplZA== 47167
IHJ1aW5lZA== 47168
IFJlaW4= 47169
IFRyYWNraW5n 47170
eGZi 47171
2KfbjA== 47172
IHbDpnJl 47173
IGJyeXN0ZXI= 47174
IElUUw== 47175
IGRlc3Rpbnk= 47176
IHN3ZWFy 47177
IHJlZGVz 47178
IGNsZg== 47179
IGZsaXBwZWQ= 47180
CWhlYWQ= 47181
Qmx1ZXRvb3Ro 47182
IE92ZXJyaWRlcw== 47183
OkJvb2xlYW4= 47184
Xz0= 47185
X2xy 47186
c3Bhd24= 47187
OmluZGV4 47188
VkFMVUVT 47189
aXNrZXk= 47190
PyIpOwo= 47191
LnN5bnRoZXRpYw== 47192
IENoZWNraW5n 47193
c3RydWN0dXJlcw== 47194
aXBpbmc= 47195
IHZvY2Fscw== 47196
LVVw 47197
IE1hbnVmYWN0dXJlcnM= 47198
IE1hcnJpYWdl 47199
5Luj56CB 47200
IGdhcm5lcg== 47201
X0NsaWVudA== 47202
cGFyYWxsZWw= 47203
UklFTkQ= 47204
IHZpbmVnYXI= 47205
c2VndWU= 47206
SkI= 47207
IGNvbnRhY3Rpbmc= 47208
IENhcnJvbGw= 47209
IG91dHJlYWNo 47210
dGVuc29y 47211
X3ZhcmlhbnQ= 47212
IHRoZWF0 47213
bGljYWJsZQ== 47214
e3w= 47215
dGlueQ== 47216
X2xldHRlcg== 47217
IHBlbmNpbA== 47218
SGVhZGVyc0hlaWdodFNpemVNb2Rl 47219
aWx0cm8= 47220
LmF1dG9jb25maWd1cmU= 47221
LmRyYWc= 47222
LnVzZVN0YXRl 47223
IEJNSQ== 47224
aGludA== 47225
Q29tcGlsZQ== 47226
Klw= 47227
ZW5hcnk= 47228
IGx2bA== 47229
LkNhY2hl 47230
Kz0i 47231
X3R2 47232
cnVpdG1lbnQ= 47233
IGZyZWFk 47234
QXJ0aWNsZXM= 47235
ZmlsYQ== 47236
IHBhY2thZ2Vk 47237
4piG 47238
QVRIRVI= 47239
IFBsYW5uZWQ= 47240
c2NoZW1l 47241
IGRpYXJ5 47242
IG9mZmVuc2Vz 47243
Lzw/ 47244
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 47245
UHJvZ3Jlc3NIVUQ= 47246
IEdvcg== 47247
LmdldFRpdGxl 47248
IG1vY2tlZA== 47249
IFRvcnk= 47250
ICIpIjsK 47251
I2c= 47252
IGxpZWQ= 47253
IHN2Yw== 47254
X2d1aQ== 47255
RU5UUlk= 47256
IHNlcnZpY2lv 47257
bW91c2VvdmVy 47258
U0FDVElPTg== 47259
44Kz 47260
IHJlaWZl 47261
bGVjdHJpYw== 47262
X2NyZWF0aW9u 47263
UmVhbGl0eQ== 47264
KCcr 47265
cHJvZHVjdElk 47266
U3VwcGxpZXI= 47267
LUxl 47268
LnJlcG8= 47269
dWNraW5n 47270
X1N0cg== 47271
IFJlbGF5 47272
0LjQuA== 47273
IHBlcnY= 47274
Q2hpY2Fnbw== 47275
IG1haXNvbg== 47276
IHN0aWNrZXI= 47277
X3ByZXNzZWQ= 47278
U3dhcA== 47279
IElH 47280
IHN1c2NlcHRpYmxl 47281
b2NhZG8= 47282
IGdpbg== 47283
ZXhl 47284
aWdoYm9yaG9vZA== 47285
KWA= 47286
IGRpYWdyYW1z 47287
IGluZmxhbW1hdG9yeQ== 47288
IHTDqQ== 47289
IFBvcHVw 47290
IGFwcHJlaA== 47291
IFBvcnRmb2xpbw== 47292
IHdvcnM= 47293
LmVudW1z 47294
0LXQs9C+ 47295
L0J1dHRvbg== 47296
IFBoYW50b20= 47297
ICM6 47298
IGRpaw== 47299
cGFnZXI= 47300
ZnRhcg== 47301
IG9yZ2FuaXplcg== 47302
KGNoaWxkcmVu 47303
IE11bmljaA== 47304
IHN0cmFuZw== 47305
IFJX 47306
44K/ 47307
TWFo 47308
cHRpZGU= 47309
IGxlYXJucw== 47310
IHJlZHVjdGlvbnM= 47311
IFJlcGxhY2VtZW50 47312
T1RT 47313
YWxjb24= 47314
KHBhcnRz 47315
YmFzaA== 47316
IENpdGl6ZW4= 47317
jbDsnbQ= 47318
IEh0dHBTZXJ2bGV0 47319
X1NDSEVNQQ== 47320
bWVhbnM= 47321
IGhvcnJpZmlj 47322
VkVSSUZZ 47323
IERDSEVDSw== 47324
ICgv 47325
LmJlZm9yZQ== 47326
LnRleHR1cmU= 47327
Z2V0TW9jaw== 47328
IFNlbnNl 47329
SW5zcGVjdG9y 47330
VGV4dE5vZGU= 47331
KEFM 47332
LmdldE5vZGU= 47333
IGJveWM= 47334
IEJyaXNiYW5l 47335
IGJhdHRsaW5n 47336
CXR4 47337
IGxvYmJ5aW5n 47338
YnVpbHQ= 47339
IFNFRUs= 47340
IHJhbmRvbWl6ZWQ= 47341
Z25p 47342
X2NsdXN0ZXJz 47343
X2lkZW50aXR5 47344
IGNhcmRpYWM= 47345
IG5ld1VzZXI= 47346
LlZpZGVv 47347
ZHVpdA== 47348
XWluaXQ= 47349
QXRs 47350
KXZhbHVl 47351
VGV4dFV0aWxz 47352
INC10YHQu9C4 47353
Q29tcHV0ZQ== 47354
PSgn 47355
CQkgICAgICAgICAgICAgICA= 47356
IGFydGVy 47357
IFRXTw== 47358
JykpLA== 47359
IERJVg== 47360
IHByaXZpbGVnZWQ= 47361
IFBhcnRuZXJzaGlw 47362
IEhlYXRoZXI= 47363
YmF5 47364
YXRpc2ZpZWQ= 47365
aW5zdGFncmFt 47366
X1NlbmQ= 47367
IEFTRg== 47368
JG5hbWU= 47369
IGJvbw== 47370
IGTDqWY= 47371
X0ZpZWxk 47372
IEVkdQ== 47373
Y2FuZGlkYXRl 47374
cnVieQ== 47375
IGFjY3VtdWxhdGU= 47376
KEludFB0cg== 47377
IGJ1c2luZXNzbWFu 47378
IGVjb25vbWljYWxseQ== 47379
IFJpbmdz 47380
IElucHV0cw== 47381
uYQ= 47382
YWNpZQ== 47383
IEFsYXJt 47384
IExvZ291dA== 47385
LnNlcXVlbmNl 47386
IFZpZW5uYQ== 47387
b3By 47388
IGRydW1z 47389
PWNvbmZpZw== 47390
cXVp 47391
IGRhdG8= 47392
IHBvbHltZXI= 47393
IENoYW5nZWQ= 47394
V2ViUmVxdWVzdA== 47395
IEFkdmFuY2U= 47396
IHVuZGVyZ29pbmc= 47397
LkNvbnNvbGU= 47398
IGN1cnJlbnROb2Rl 47399
IFdvb2w= 47400
IHDDoWdpbmE= 47401
UkVHSVNURVI= 47402
IHNhZ2E= 47403
IFlPUks= 47404
YW1hbmhv 47405
5a6M 47406
IEJ1bmRlcw== 47407
IERpYWxvZ0ludGVyZmFjZQ== 47408
Z2VvaXM= 47409
dW5jaWF0aW9u 47410
PyQ= 47411
LkFzc2VydGlvbnM= 47412
IHNlYXRlZA== 47413
IFNweQ== 47414
UG9zZQ== 47415
IkM= 47416
IGFob3Jh 47417
INGE0LDQudC7 47418
IOuzgA== 47419
IHdhcnA= 47420
UHJvamVjdGlvbg== 47421
IFNpbmdsZXM= 47422
IEFkdmVydGlzaW5n 47423
TGludXg= 47424
dXN0eQ== 47425
IHBlbmFs 47426
VVNJQw== 47427
b2RpYQ== 47428
Lm5ldGJlYW5z 47429
IFVn 47430
IEJyZW50 47431
LWxvZw== 47432
L2NhdGVnb3J5 47433
IEN1c3RvbWl6ZQ== 47434
aXJlbg== 47435
77yaPC8= 47436
aW5hcnM= 47437
ICgrKw== 47438
R29pbmc= 47439
RVhFQw== 47440
KG1lc2g= 47441
IHBlcmltZXRlcg== 47442
Q2xz 47443
Y2VpdmluZw== 47444
bWVuc2FqZQ== 47445
KCkpKXsK 47446
IHByb3N0YXRl 47447
X2J1eQ== 47448
IFJvb2Y= 47449
LlJldHVybg== 47450
IG1hcnJpYWdlcw== 47451
X3RodW1i 47452
574= 47453
4K+N 47454
VGV4dHVyZXM= 47455
KFRFWFQ= 47456
c2hvcnRjdXQ= 47457
VHJhbnNmb3JtZXI= 47458
QVRJQw== 47459
IFNub3dkZW4= 47460
c2NyaWJlcnM= 47461
bWFya2Vk 47462
IOKGkQ== 47463
aG9yYQ== 47464
T1BFUg== 47465
IEZZ 47466
IEF1dGhlbnRpYw== 47467
IGF1ZGk= 47468
cmFtZXI= 47469
IExpdGVyYXR1cmU= 47470
IGl0ZW1JZA== 47471
LkF0dA== 47472
KGNudA== 47473
IEtT 47474
LWxpbnV4 47475
IFBhcnRpY2lwYW50 47476
IENydWlzZQ== 47477
aXR1bG8= 47478
dXN0cmlhbA== 47479
IGNsYXNl 47480
ID0k 47481
X2RhdGVz 47482
Y3VycmVudFBhZ2U= 47483
aXhh 47484
ZXhhY3Q= 47485
IHRzbA== 47486
LlNv 47487
L2RvY3VtZW50 47488
aGFydA== 47489
X0lETEU= 47490
e30u 47491
eWV0 47492
SXJvbg== 47493
IFRocm9uZXM= 47494
c25k 47495
XHhh 47496
IGJldmVyYWdlcw== 47497
X3RyYW5zcG9ydA== 47498
IGZvaWw= 47499
IHRhc3Rpbmc= 47500
IGdvZWQ= 47501
TWVtbw== 47502
IG5pdHJvZ2Vu 47503
Lk1lbWJlcg== 47504
LmZsYXQ= 47505
IGlsbHVt 47506
bWluZW50 47507
Lnpvb20= 47508
IFB0cg== 47509
b2Npbw== 47510
IENvbnN1bHRpbmc= 47511
IENvbmU= 47512
CWl0ZW1z 47513
IExN 47514
IG9hdXRo 47515
IFByb2dyYW1tZQ== 47516
b2Nob25k 47517
KHNlbGVjdG9y 47518
IHdhdGVycHJvb2Y= 47519
IE1lcmtlbA== 47520
IHN1ZmZlcnM= 47521
IG5wbQ== 47522
6LGh 47523
IExhbmRpbmc= 47524
IExBTg== 47525
CQkJCQkJDQo= 47526
L2lz 47527
IHPDqXJpZQ== 47528
IEdVSUxheW91dA== 47529
Z2l2ZQ== 47530
X0NZ 47531
QnJvd3Nl 47532
Lm11bHRpcGx5 47533
PSIkKA== 47534
dXNv 47535
LXBhcmVudA== 47536
Lk1hdGg= 47537
Lm51bWJlck9m 47538
IHRpZW5lbg== 47539
IHJlc2VudA== 47540
IHBpdGNoaW5n 47541
Il0pLAo= 47542
LlV0aWxpdGllcw== 47543
IG11bHRpcGxpY2F0aW9u 47544
OnR5cGU= 47545
IHBwcmludA== 47546
aWFuaQ== 47547
5YiZ 47548
IGxhdW5jaGVy 47549
IHJ1Z2J5 47550
546w 47551
CgkJCQo= 47552
aGlk 47553
QW5nbGVz 47554
IGdvb2RieWU= 47555
IGlucHV0U3RyZWFt 47556
LndhdGNo 47557
R29vZHM= 47558
IFNheXM= 47559
PkY= 47560
IFN0aWNr 47561
IGNlcmM= 47562
IFNsZWU= 47563
CQkgICAgICAgIA== 47564
PEltYWdl 47565
IOiuvg== 47566
LWVkaXRvcg== 47567
cGllY2Vz 47568
IERyYW1h 47569
IC8vLy8vLy8vLy8vLy8vLy8vLw== 47570
IFRhc2tz 47571
QVJD 47572
Z2F0ZXdheQ== 47573
LmdldGN3ZA== 47574
Lk1ldGFkYXRh 47575
IGd1ZXNzaW5n 47576
5Zyw5Z2A 47577
IHNtYXJ0ZXI= 47578
IEdldEVudW1lcmF0b3I= 47579
IGVmdGVy 47580
L29wZXJhdG9ycw== 47581
IEdMZmxvYXQ= 47582
IGbDuHI= 47583
IG9wYXF1ZQ== 47584
5L+d5a2Y 47585
U3ByZWFk 47586
U1lTVEVN 47587
IGludmVyc2lvbg== 47588
IEJhc2tldGJhbGw= 47589
IHNpbXVsYXRpb25z 47590
IGRlbmllcw== 47591
IGF2ZXo= 47592
X2xpc3RlbmVy 47593
IGVuaGFuY2luZw== 47594
IE15dGg= 47595
IExha2Vycw== 47596
X01E 47597
TmRFeA== 47598
REFUQUJBU0U= 47599
IHThuw== 47600
YXJ0aA== 47601
W2xlZnQ= 47602
IGNvbnRlc3Rz 47603
c3RpbGU= 47604
KEtFUk4= 47605
X2Zj 47606
X3Bt 47607
IHByZXNpZGVudHM= 47608
IGhvc3BpdGFsaXR5 47609
IGZhZGVJbg== 47610
Uk9QRVJUWQ== 47611
X21hcHM= 47612
IERlZmluaXRpb25z 47613
IGFzc2Vzc2luZw== 47614
IHVzYXI= 47615
IHF1YW50aXRhdGl2ZQ== 47616
bW96 47617
QmVhdXRpZnVs 47618
Wygo 47619
Ym9ucw== 47620
ZnJlcXVlbmN5 47621
Q29udGFpbg== 47622
IHB1enpsZXM= 47623
IENhc3Rybw== 47624
IHZpbGxh 47625
IGtpbmRseQ== 47626
Rm9udEF3ZXNvbWU= 47627
ZXJuYQ== 47628
ZXBvY2hz 47629
X2RhdGFz 47630
CWlw 47631
LnBhZGRpbmc= 47632
IENvbnRlc3Q= 47633
IGVkaXRpb25z 47634
IGRpc3Byb3BvcnRpb24= 47635
IElDTw== 47636
IGNvbWViYWNr 47637
PXZhbHVl 47638
cmlhZA== 47639
LXNvcnQ= 47640
U3VibWl0dGVk 47641
KG5ldHdvcms= 47642
IENlbA== 47643
IGluc3RhbGxtZW50 47644
bGFzaGVz 47645
Lkxpc3RWaWV3 47646
IFZhdGljYW4= 47647
KE1lZGlhVHlwZQ== 47648
SVZFRA== 47649
cmVhY2hhYmxl 47650
Oklz 47651
IENJVFk= 47652
5Lqs 47653
IEhlbHBmdWw= 47654
IGJhxZ8= 47655
JQ0K 47656
IHBzeWNoaWF0cmlj 47657
IHJlY3ljbGVk 47658
Rk9STUFU 47659
IEdyb3c= 47660
YmluZQ== 47661
R2l0 47662
LnNz 47663
IFdlYXBvbnM= 47664
IFN0eQ== 47665
X2Fycm93 47666
KnNlbGY= 47667
aXJlbWVudA== 47668
IGRlZ2xp 47669
QXBwRGVsZWdhdGU= 47670
X2Jhbm5lcg== 47671
IGNvb3JkaW5hdGVk 47672
IFdlYmNhbQ== 47673
IGNlbGVicmF0aW9ucw== 47674
LmFjdA== 47675
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 47676
KHNob3c= 47677
IHdlZWtkYXk= 47678
IGNvbmNlcnRz 47679
0L7Qu9C9 47680
Y2xpbg== 47681
IGNyb24= 47682
IE5pbQ== 47683
LnNldFZlcnRpY2Fs 47684
IEVsbGVu 47685
2LPYqg== 47686
IFNBTQ== 47687
RWZm 47688
Z3o= 47689
c3RlYW0= 47690
IGFudGlxdWU= 47691
cGh5c2ljYWw= 47692
IEZvcm1EYXRh 47693
LnNldHRlcg== 47694
IFBPSU5U 47695
Qm9u 47696
IGZsYXZvdXI= 47697
ZXJ2ZW50aW9u 47698
X0VOVElUWQ== 47699
CSAgICAgICAgICAgIA== 47700
IGludHJpbnNpYw== 47701
IOaO 47702
YXBwZW5kVG8= 47703
YXJhbWVs 47704
KV0p 47705
IFJlY29tbWVuZA== 47706
KW0= 47707
T3V0T2ZSYW5nZQ== 47708
IGtuaWdodA== 47709
IHNhdGVsbGl0ZXM= 47710
IFRpdGFucw== 47711
IHdlaWdoZWQ= 47712
IERhbmE= 47713
ZWFzZQ== 47714
IHNpcA== 47715
U0lN 47716
IERldmVsb3BlcnM= 47717
bWFsaW5r 47718
L2NoZWNr 47719
X1BMTA== 47720
bnVuZw== 47721
IGRyeWVy 47722
PUE= 47723
LmR3 47724
X1NRTA== 47725
IHN1YnBsb3Q= 47726
RFJPUA== 47727
IHByb3RvdHlwZXM= 47728
IGhvdXJseQ== 47729
ZGlzcGxheU5hbWU= 47730
IGFzaQ== 47731
IFZpb2xlbmNl 47732
IGFzdHJvbmF1dA== 47733
IGRhdGF0eXBl 47734
IGluZm9ybWF0aW9uYWw= 47735
IGludmVzdGlnYXRpdmU= 47736
ZXRlcm1pbmVk 47737
cmVuYWw= 47738
Oyc+ 47739
CWNvbA== 47740
Vkc= 47741
X2Jvb2xlYW4= 47742
cmVjZW50 47743
ICopCgo= 47744
IFJhaW5ib3c= 47745
b21tZW4= 47746
IGx1cg== 47747
IG9wcHJlc3Npb24= 47748
KCIsIik7Cg== 47749
IEZhY2lsaXR5 47750
REVGSU5FRA== 47751
IG5lb24= 47752
IG9mZmVuZGVy 47753
QUZQ 47754
IENsZWFuaW5n 47755
W10pOg== 47756
IHVuZG9jdW1lbnRlZA== 47757
LlJlcG9zaXRvcmllcw== 47758
IEd1aXRhcg== 47759
0LDRgdGB0LjQsg== 47760
U2tpbGxz 47761
IHRlc3RpbW9u 47762
cnlwdG9ncmFwaHk= 47763
IEFtYmVy 47764
IFN0YWxpbg== 47765
IGxvbmU= 47766
IGFwZW5hcw== 47767
IGRpZXNlcw== 47768
IEFyZHVpbm8= 47769
6L2s 47770
PT0t 47771
X0FjdA== 47772
IGNvZGVk 47773
4pag 47774
YW1idXJnZXI= 47775
LWxpbmtz 47776
IGFybW91cg== 47777
LkhpZ2g= 47778
Z2V0Q29udGVudA== 47779
c3RhZw== 47780
IGhlY2s= 47781
IOyXhg== 47782
IE1jQ29ubmVsbA== 47783
IENvbmNlcnQ= 47784
IEFsbG9j 47785
w6RyZQ== 47786
LnJlcGxhY2VBbGw= 47787
IHBhcnRpdGlvbnM= 47788
cm90dA== 47789
IEZsZQ== 47790
X1RSRUU= 47791
cmVhc29uYWJsZQ== 47792
IFJlcG9ydGluZw== 47793
IGJpbGxpb25haXJl 47794
c2NvcmVz 47795
bWlucw== 47796
LWV5ZQ== 47797
TU9SRQ== 47798
YWJvcnQ= 47799
IFNXVA== 47800
IGludmVydGVk 47801
IFRlYWNoZXJz 47802
O24= 47803
IGFzdHJv 47804
0L3QvtCy 47805
0LDQvdC40YY= 47806
cHJvZHVjdG8= 47807
Y291bnRyaWVz 47808
IE93ZW4= 47809
IGNvbnRhbWluYXRpb24= 47810
IHZpYmU= 47811
IEVsbGk= 47812
LnNjcmlwdA== 47813
IE9saXZl 47814
RE1B 47815
dmllcg== 47816
OnNlbWljb2xvbg== 47817
LW1vZHVsZQ== 47818
Z3Jlc3NpdmU= 47819
YWd1 47820
X3BsYXllcnM= 47821
IHJlc3VsdGFkb3M= 47822
c3RhcnRlZA== 47823
c2Nyb2xsVG9w 47824
PT09PT0= 47825
IHdlaWdoaW5n 47826
IFtbWw== 47827
emFobA== 47828
KE5T 47829
IEFzc2VydGlvbg== 47830
bGVhZ3Vl 47831
LnNldFRleHRDb2xvcg== 47832
CU1lc3NhZ2U= 47833
IG1vbXM= 47834
X0FG 47835
Lndo 47836
QUxT 47837
IGF1dHJl 47838
XQoKCgo= 47839
Lm9wYWNpdHk= 47840
IEJ1ZGRoaXN0 47841
IGRlYWY= 47842
IE9yZ2FuaXNhdGlvbg== 47843
KEdsb2JhbA== 47844
ZW5zY2g= 47845
IGhlYWRhY2hl 47846
IEFsaWVu 47847
X2lub2Rl 47848
IFN0YXJr 47849
IOaJ 47850
LWxuZA== 47851
b3JlZg== 47852
X2ZlYXQ= 47853
IHBlZGVzdHJpYW4= 47854
IG5vbWluYWw= 47855
IGJhbGxvb24= 47856
IHNwcml0ZXM= 47857
UHJvdG90eXBlT2Y= 47858
IEFwb3N0 47859
IEZFQVRVUkU= 47860
T0g= 47861
IHJlY2Vzcw== 47862
IERvbm5h 47863
Y29uc3VtZXI= 47864
JEdMT0JBTFM= 47865
IEdJRg== 47866
LWZyYW1l 47867
SW5pY2lv 47868
IHBhc3NhZ2Vz 47869
RGF0ZVN0cmluZw== 47870
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 47871
LmJ5dGU= 47872
QnVn 47873
aW5pdGlhbGl6ZXI= 47874
cGt0 47875
b2RpdW0= 47876
IERFUg== 47877
Lm9wcw== 47878
bGVyaQ== 47879
IGdpZnRlZA== 47880
IGRldGFjaA== 47881
dGVycmFpbg== 47882
ZWx0ZXJz 47883
44GP 47884
LmxvYWRlcg== 47885
IE5HTw== 47886
c3RybmNtcA== 47887
S2g= 47888
KGZvbnRTaXpl 47889
cm9ja2V0 47890
IHByZWNlZGVudA== 47891
IEF1cm9yYQ== 47892
IEV4cGVyaW1lbnQ= 47893
aXNwaGVyZQ== 47894
RW5jb2RlZA== 47895
IOKAkwoK 47896
IHB5cmFtaWQ= 47897
IEFubml2ZXJzYXJ5 47898
b2ZpbA== 47899
658= 47900
KHBsdWdpbg== 47901
Q29lZmY= 47902
IGNvb3BlcmF0ZQ== 47903
IHByZWRvbWluYW50bHk= 47904
SVNN 47905
UGhyYXNl 47906
X0RFRklORQ== 47907
RmxpcA== 47908
QU1JTFk= 47909
IE1hcmtldHM= 47910
IFN0cmVhbVJlYWRlcg== 47911
IENvbWJpbmU= 47912
IG1hbnVzY3JpcHQ= 47913
enph 47914
LHRw 47915
V2hhdGV2ZXI= 47916
SVRJQ0FM 47917
aWdoYm91cg== 47918
RGF0YVByb3ZpZGVy 47919
LlRleHR1cmU= 47920
cHJpdmFjeQ== 47921
LlNESw== 47922
IHJlY2hhcmdl 47923
IGNwcA== 47924
IENGRw== 47925
KGhvbGRlcg== 47926
KHB5 47927
bW90 47928
IHNhdm9pcg== 47929
IFJvc2E= 47930
IFBDcw== 47931
IO2Z 47932
Lmhlcm9rdQ== 47933
IGZyZW4= 47934
IFJpbGV5 47935
YWdhdGU= 47936
IHNvbmQ= 47937
Lnhsc3g= 47938
IGhhY2tlZA== 47939
c3RhZA== 47940
R2k= 47941
IHNhbml0eQ== 47942
IFNxbERhdGFBZGFwdGVy 47943
Li4uIiw= 47944
IFB1c3N5 47945
ICoqKioqKioqKioqKioqKio= 47946
IGhhc3NsZQ== 47947
X1BBUkVOVA== 47948
IFVBRQ== 47949
IGJlZ2lubmVycw== 47950
KENsaWVudA== 47951
IHN0YXRpc3RpY2FsbHk= 47952
LmhvdXI= 47953
ZWRlbHRh 47954
IHRyYWN0aW9u 47955
dWVsdmU= 47956
YXJhdA== 47957
IHNhdW5h 47958
SU5WQUxJRA== 47959
IGluZGljdG1lbnQ= 47960
QUxMRQ== 47961
IGRpc3NlbnQ= 47962
IFR5cG9ncmFwaHk= 47963
IGludGVudGlvbmFs 47964
c2l0 47965
IEFuaW1hbHM= 47966
IGNvdW50cnlzaWRl 47967
IHVhcnQ= 47968
fVwi 47969
IHNlYW1sZXNz 47970
vuekug== 47971
IGF1dG9z 47972
ICInIjsK 47973
Rmx1c2g= 47974
QU5OT1Q= 47975
IGFsZ2VicmE= 47976
YXNzb2M= 47977
IFdhdGVycw== 47978
IHByZXBhcmF0aW9ucw== 47979
cm9ueW0= 47980
Wyxd 47981
U2Fucw== 47982
IGFybWllcw== 47983
aXBlZw== 47984
IGNyZWFteQ== 47985
LmFydA== 47986
ZXRyZQ== 47987
IEFuaW1hdGVk 47988
IHVucGxlYXNhbnQ= 47989
ZW1lYW4= 47990
Z3JlYXQ= 47991
acSF 47992
IEVhcmxpZXI= 47993
IGNoaWM= 47994
IHByZXNlcnZpbmc= 47995
KGV4ZWM= 47996
IEludmVzdGlnYXRpb24= 47997
CUdQSU8= 47998
IHJpZ29yb3Vz 47999
aWpv 48000
PW51bQ== 48001
IHRvb2xTdHJpcA== 48002
KXNldA== 48003
KyIm 48004
IEFjY2VsZXI= 48005
IGRldmVsb3BtZW50YWw= 48006
aXNwb3NhYmxl 48007
IGZsYXdlZA== 48008
cmVuZQ== 48009
VXBkYXRpbmc= 48010
IHdhdGNoZG9n 48011
IGRlbm9taW5hdG9y 48012
IHN1YnVyYnM= 48013
IC4uLik= 48014
IGNvbnZpY3Rpb25z 48015
Y2xvc3VyZQ== 48016
LklQ 48017
IHRyYW5zbGF0ZXM= 48018
LnN3dA== 48019
LlRyYWNl 48020
IG1ldHRyZQ== 48021
LmlzRW5hYmxlZA== 48022
IEVmZmVjdGl2ZQ== 48023
LnRvSW50 48024
IGVuY2hhbnQ= 48025
IHN0dW5uZWQ= 48026
IHBvaQ== 48027
L2NvZGU= 48028
YWRt 48029
LmRhdGFiaW5kaW5n 48030
IExvcmVt 48031
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw== 48032
IGxlZGdlcg== 48033
IGNhcmE= 48034
IEdpcg== 48035
IHdhaXRz 48036
VW5v 48037
IGN3ZA== 48038
6L6R 48039
IFRSZXN1bHQ= 48040
IHJlam8= 48041
IGVtaXR0ZWQ= 48042
IFdlc3RtaW5zdGVy 48043
5LiA5Liq 48044
bmVr 48045
X1Rpcw== 48046
IGVuYWN0 48047
CXdpdGg= 48048
b3JnaWE= 48049
IGp1ZQ== 48050
UGVyZm9ybQ== 48051
U1BBVEg= 48052
LnRvcGlj 48053
IERhdGVu 48054
4bqn 48055
IHNpdGlv 48056
X01N 48057
IlNv 48058
YmlhbA== 48059
IHNjb3BlZA== 48060
UmVxdWlyZXM= 48061
IFRPVEFM 48062
IENoYW5jZWxsb3I= 48063
KGNvbnRlbnRz 48064
IHN0ZWFsdGg= 48065
ZGV2aWNlcw== 48066
LXBhc3M= 48067
aWxpaA== 48068
IE1hbGNvbG0= 48069
IERlcG90 48070
IGNvbmZpZ3Vy 48071
YXVzc2lhbg== 48072
X2NvbnN0cmFpbnQ= 48073
0LLQtdGC 48074
R1JB 48075
IFJhdGVz 48076
LmRhdGFHcmlkVmlld1RleHRCb3hDb2x1bW4= 48077
IE5vYmVs 48078
aXRpY3M= 48079
IGlnbm9yYW50 48080
IFJlcG9ydGVy 48081
IEVib2xh 48082
IFNob2Nr 48083
X3JlbGF0aW9u 48084
IE5pbmph 48085
KWM= 48086
IHRpY2tlcg== 48087
LmlzQ2hlY2tlZA== 48088
IFN1cHBsaWVycw== 48089
IFJhcGlk 48090
TGV2ZWxz 48091
4oKs4oSi 48092
CXF1ZXVl 48093
IGNob3A= 48094
IFVuaXg= 48095
cmVqZWN0 48096
LWNhbGVuZGFy 48097
KHNvcnQ= 48098
w6huZQ== 48099
ZXJjaWNpbw== 48100
IGhlY3Q= 48101
Q0FMTFRZUEU= 48102
cm91cG9u 48103
IHJlbnRhbHM= 48104
YXV0aG9ycw== 48105
e25hbWU= 48106
IEZJRk8= 48107
IGxhc3Nlbg== 48108
IE5vdXM= 48109
IHNuYXBwZWQ= 48110
IGZlcnRpbGl0eQ== 48111
ImxvZw== 48112
Y2xpY2tlZA== 48113
IHBsYW50aW5n 48114
IGdi 48115
L291dHB1dA== 48116
UEVBVA== 48117
IGNhdGVnb3JpYQ== 48118
IGJhY2g= 48119
UHJvZmVzc29y 48120
aW50aA== 48121
Il0NCg== 48122
UmVjb3JkZXI= 48123
c2VyZGU= 48124
IFRyYW5zbWlzc2lvbg== 48125
dHJhZA== 48126
IHR1cmJv 48127
X1ZFUlRFWA== 48128
XEV2ZW50 48129
aWx2ZXI= 48130
IGJvZGlseQ== 48131
IFNvdXJjZXM= 48132
IGtpbGxpbmdz 48133
LnhyVGFibGVDZWxs 48134
IGZvbGRlZA== 48135
L2xlZ2Fs 48136
dW5lcg== 48137
IFJpZmxl 48138
IE1JREk= 48139
X1NlbGVjdGVkSW5kZXhDaGFuZ2Vk 48140
LlNpemVUeXBl 48141
IFdlYlNvY2tldA== 48142
IHNlbGVjY2lvbg== 48143
U2FuZA== 48144
b3Ryb3M= 48145
IGVudmlzaW9u 48146
L2V0Yw== 48147
IE1lbGlzc2E= 48148
U3BvdA== 48149
0L3QvtC1 48150
X0FSTQ== 48151
QXR0ZW1wdA== 48152
IEJJ 48153
44GU 48154
IERV 48155
IGJhY2tsYXNo 48156
c3RyaWRl 48157
L2NsYXNzZXM= 48158
IHRleHRDb2xvcg== 48159
X3N0YWZm 48160
b2JsaW4= 48161
YWdlbnRh 48162
LmNvbGxlY3Rpb25z 48163
aWxsYWdl 48164
Jw0KDQo= 48165
ZmxhdHRlbg== 48166
X3NhbGVz 48167
X01BU1RFUg== 48168
VFc= 48169
X2Rh 48170
UGl0Y2g= 48171
cGhpZXM= 48172
IHpvbWJpZXM= 48173
IFZFUlk= 48174
IFBoYXJtYWN5 48175
IHByb2dyZXNzQmFy 48176
IGhhc2h0YWc= 48177
U2lkZWJhcg== 48178
QHN0b3A= 48179
KHBj 48180
0L7Qu9C2 48181
TUFLRQ== 48182
IENvcm9u 48183
IGt2aW5uZXI= 48184
IE1haWQ= 48185
Ym9i 48186
LnRpdGxlTGFiZWw= 48187
IHN1Y2Nlc3Nlcw== 48188
IERlbW9jcmFjeQ== 48189
IFN1cmdlcnk= 48190
IGNvdWdhcg== 48191
IGN1cnNv 48192
IGxvcm8= 48193
aXN0ZW5jeQ== 48194
U2VuaW9y 48195
w6Zr 48196
IEFBQQ== 48197
IEJPT0s= 48198
0LrQvg== 48199
V1NUUg== 48200
ICovLAo= 48201
b3lhbA== 48202
LnZlY3Rvcg== 48203
IFNQRUM= 48204
U1NG 48205
IGNvbXB1bHM= 48206
IEFwcGVhbHM= 48207
IFdpbnN0b24= 48208
IE1vY2tpdG8= 48209
Y29udHJpYg== 48210
LmF2YWlsYWJsZQ== 48211
ZW50aXR5TWFuYWdlcg== 48212
YXJpYXM= 48213
X3NhbGU= 48214
X3Jz 48215
IGRlY29kaW5n 48216
IGxvY2F0b3I= 48217
b2xpdGg= 48218
IGtvbA== 48219
IGFzY2lp 48220
IFJ1dA== 48221
L2ludGVyZmFjZQ== 48222
CQkJCQkJICAg 48223
IE51bWVy 48224
LmZsaXA= 48225
LWRlbA== 48226
IGJvbHN0ZXI= 48227
b25vbWlj 48228
IHpt 48229
TEc= 48230
RmluZEJ5 48231
IGFkYXB0aXZl 48232
bG9v 48233
IHZ1ZQ== 48234
KHJldmVyc2U= 48235
X2NhbnZhcw== 48236
LnJvbGVz 48237
aWZpY2Fkbw== 48238
dmVuaWVudA== 48239
IkFz 48240
IEVudHI= 48241
YWxpZ25lZA== 48242
IGJlcmVpdHM= 48243
Ly8vCgo= 48244
Lmd3dA== 48245
LmVtcGxveWVl 48246
X2NsaQ== 48247
IGFudGljaXBhdGU= 48248
6ZmQ 48249
IHBpaw== 48250
IG11c2hyb29tcw== 48251
KHR0 48252
IG9tYQ== 48253
IFNhbmNoZXo= 48254
X2dvb2dsZQ== 48255
LlZhbGlk 48256
IEZpbGVOYW1l 48257
aXZhdGl2ZQ== 48258
a2Vk 48259
LXdhcg== 48260
IG1hdHVyaXR5 48261
0LjQtA== 48262
IG1pbmVy 48263
UmVkdWNlcnM= 48264
IExhdExuZw== 48265
X1NURA== 48266
RGlnaXRz 48267
Q2FsYw== 48268
LXVwbG9hZA== 48269
IGhhbmRpYw== 48270
4Li14LmI 48271
ZWdyYXRlZA== 48272
IFNUTQ== 48273
Q2xpZW50cw== 48274
IFR1cmJv 48275
U1lOQw== 48276
IHBob3RvZ3JhcGhlcnM= 48277
Lk91dA== 48278
LmNoYXJhY3Rlcg== 48279
QlVJTEQ= 48280
LnVubG9jaw== 48281
IGFyaXNlcw== 48282
IENvbW1hbmRz 48283
KCIiKTsNCg== 48284
X0ZPUkU= 48285
Oycs 48286
KyIn 48287
LkltYWdlcw== 48288
Iil7 48289
IE1leWVy 48290
IG5lZ2F0aXZlbHk= 48291
IERMTA== 48292
IGV4ZQ== 48293
IGRlZmljaWVuY3k= 48294
IHdpbGRseQ== 48295
LXN3aXRjaA== 48296
Y29uc3RydWN0aW9u 48297
IGV4Y2VwdGlvbmFsbHk= 48298
IExpeg== 48299
L2phdmE= 48300
IHRoZWlycw== 48301
IENvbnRlbXBvcmFyeQ== 48302
bGlz 48303
LmZpbGxSZWN0 48304
IE5GQw== 48305
IHJlaGU= 48306
KG51bWJlcnM= 48307
IHJhc3Rlcg== 48308
IGZpZ3VyaW5n 48309
IHNob3dj 48310
IEppbGw= 48311
IGFyY2FkZQ== 48312
IENvbnN0cnVjdHM= 48313
bWRs 48314
KCd8 48315
IGlkZW50aWZpZXJz 48316
IHN0ZWxsYXI= 48317
KENvbm5lY3Rpb24= 48318
ICJ7ew== 48319
eW9y 48320
KG15c3FsaQ== 48321
IGRvdmU= 48322
T2ZCaXJ0aA== 48323
LmRpc2Nvbm5lY3Q= 48324
X2hp 48325
IHp3aXNjaGVu 48326
IEdydW5k 48327
aXJvcw== 48328
X0FycmF5 48329
Lm9uY2xpY2s= 48330
YW5zb20= 48331
QW5zd2Vycw== 48332
CXJlbW92ZQ== 48333
RmE= 48334
IGh1cnJ5 48335
LWluZg== 48336
IGdldENsYXNz 48337
IFJlZ3VsYXRpb24= 48338
IEZMQUdT 48339
bWlzYw== 48340
S2Vu 48341
X2hlYWRpbmc= 48342
R0h6 48343
LWVudHJ5 48344
IGJpb2dyYXBoeQ== 48345
U2ln 48346
LW1m 48347
V2F0Y2hlcg== 48348
4oCcQQ== 48349
fXB4 48350
IHNwaWN5 48351
X3Nx 48352
TG9zdA== 48353
KHRyYWNr 48354
0LDQu9C4 48355
RGVzY2VuZGluZw== 48356
PGJpdHM= 48357
cXVpbmU= 48358
IEFkdm9j 48359
X1NO 48360
IEhhbm5haA== 48361
UE9Q 48362
IGVtaXR0ZXI= 48363
IGN5bg== 48364
IENBRA== 48365
Pyku 48366
L3NldA== 48367
IFNpc3Rlcg== 48368
IEVuZHBvaW50 48369
IG1lbm9y 48370
IGludGVycA== 48371
cms= 48372
aWRsZQ== 48373
IG91dGZpdHM= 48374
LnZlcnRleA== 48375
IGNsaWM= 48376
QVJFTg== 48377
IHBvc3R1cmU= 48378
IE9wcG9ydHVuaXR5 48379
dng= 48380
IEZvcmJlcw== 48381
LkRpcmVjdGlvbg== 48382
IHJlc2lkZQ== 48383
IHJlbWVtYmVyaW5n 48384
bmVzdHk= 48385
QXV0b3Jlc2l6aW5n 48386
cHJvdmlkZXJz 48387
IEFI 48388
IGh1cnRpbmc= 48389
IExpbHk= 48390
ZXZhbHVhdGU= 48391
bGlqaw== 48392
cGFwZXJz 48393
IFNtYXNo 48394
IExBU1Q= 48395
IHdlbGxz 48396
d2FzaGVy 48397
X1JPTEU= 48398
IERhbmdlcg== 48399
Kigo 48400
X3JlcG9zaXRvcnk= 48401
IFJlc29sdmU= 48402
IFJvb21z 48403
X1JH 48404
IFFU 48405
b29w 48406
IEhlYXA= 48407
IHNsb3dpbmc= 48408
IGdyYXR1aXRl 48409
X2NhdGFsb2c= 48410
IHBvbHlub21pYWw= 48411
THk= 48412
cGNz 48413
Rm94 48414
IEN5cg== 48415
IGRpbWlu 48416
L21vbnRo 48417
U2FsdA== 48418
IGhpbmQ= 48419
LlBFUg== 48420
Rm9ydW0= 48421
Y2Vu 48422
X3BvbA== 48423
7Zi4 48424
IGluc2Vy 48425
KH4= 48426
QHRlc3Q= 48427
IEdvbGRtYW4= 48428
IHVwbG9hZGluZw== 48429
RmM= 48430
IGtvbW1lcg== 48431
IG1pdHQ= 48432
X2xvZ2dlZA== 48433
IGJ1Y2tz 48434
LWxheWVy 48435
KX07Cg== 48436
IE9N 48437
IHZlZw== 48438
Y29sb3Vy 48439
INC+0LHRig== 48440
U3RkU3RyaW5n 48441
X3F1ZQ== 48442
IFRpYW4= 48443
IHNwZWNpYWxpemU= 48444
0LjQvw== 48445
INC60Ls= 48446
dHJpYWw= 48447
LWVkZ2U= 48448
IG1hcnM= 48449
T0dMRQ== 48450
IGVtcGF0aHk= 48451
IEJvbQ== 48452
IGNvbGxpc2lvbnM= 48453
IGNhcnRl 48454
IFRlaWw= 48455
IE1QTA== 48456
IHBvcm7DtA== 48457
IGFpcmxpbmVz 48458
QXdz 48459
TnM= 48460
IFNwYXdu 48461
KHVzZQ== 48462
6buY6K6k 48463
IHlhY2M= 48464
c3Rvcg== 48465
IGNvbmZlc3M= 48466
IHBlcXVl 48467
cmFnZQ== 48468
PyIK 48469
L2RhdGF0YWJsZXM= 48470
IFNob3dlcg== 48471
X18v 48472
IGNyeXN0YWxz 48473
IGJ1c2Nhcg== 48474
IEhhdXM= 48475
aXphw6fDo28= 48476
X2VudGl0aWVz 48477
lYw= 48478
mow= 48479
eGNj 48480
dmlydA== 48481
LWNoZXZyb24= 48482
KFJlc3VsdA== 48483
Y2FrZQ== 48484
Q09NRQ== 48485
IHByb2hpYml0 48486
IENoZXNz 48487
IGJlYXVjb3Vw 48488
INGH0YLQvg== 48489
UlVO 48490
IElL 48491
w7PFgg== 48492
X1VwZGF0ZQ== 48493
IHNsZWVr 48494
IFNwZWNpZnk= 48495
X2NyZWRlbnRpYWxz 48496
xZ90 48497
IFVzZXJOYW1l 48498
CVZhbHVl 48499
IGFycmF5TGlzdA== 48500
IGV4Y2hhbmdlZA== 48501
aXBzaXM= 48502
LnJlbGF0ZWQ= 48503
IFNlaXRl 48504
X0JBUg== 48505
IExlbQ== 48506
IFdBVENI 48507
IENsaWVudHM= 48508
IC4q 48509
IEVhcmw= 48510
LXJlcG9ydA== 48511
IGZvcmVpZ25lcnM= 48512
IHN0cmVuZ3RoZW5pbmc= 48513
CURlc2NyaXB0aW9u 48514
KGdv 48515
LnRvb2xiYXI= 48516
IGNhbGN1bGF0ZXM= 48517
CXNvdXJjZQ== 48518
IGN6YXM= 48519
IHJlY2w= 48520
YWJv 48521
IGxvY2FsaG9zdA== 48522
IF57Cg== 48523
LlBvcA== 48524
IERlc2lnbmVk 48525
XEFic3RyYWN0 48526
SG9sZA== 48527
IEd1aWRlbGluZXM= 48528
aXBsaW5l 48529
IGNhY2hpbmc= 48530
LlJlYWRlcg== 48531
X2V4dGVybmFs 48532
LnN0cnB0aW1l 48533
IFdlZWtlbmQ= 48534
LU1hcg== 48535
IEJlaQ== 48536
IHsqfQ== 48537
IFJ1ZA== 48538
IGV4cGxvcg== 48539
IEJvdWxldmFyZA== 48540
Q2FzaA== 48541
IHByZXBhcmVz 48542
IHNlcmlhbGl6YXRpb24= 48543
ZXdhdGVy 48544
IGFkYw== 48545
OgoKCgoKCg== 48546
UmVmZXI= 48547
IHNjYW5uZWQ= 48548
fX0KCg== 48549
IEZ1bA== 48550
IHRvdXJpbmc= 48551
44OD44Kv 48552
Pigo 48553
c3VydmV5 48554
IO2Y 48555
Li4uJykK 48556
IERpdmlkZXI= 48557
b3Ns 48558
X0NBTkNFTA== 48559
X3ByZXBhcmU= 48560
c3Rpbg== 48561
IEhlYXRo 48562
LlByaW1hcnlLZXk= 48563
IOKGkA== 48564
IExvY2FsRGF0ZVRpbWU= 48565
IGNvb3BlcmF0aXZl 48566
TGVhcm5pbmc= 48567
LmVucXVldWU= 48568
IGdvb2c= 48569
IFJlZ3Jlc3Npb24= 48570
aW1hdGVz 48571
IHZveWV1cg== 48572
IERyaW5r 48573
cGx1Zw== 48574
IGxlbmRlcg== 48575
bWFuYQ== 48576
IHBlcnNvbm5lcw== 48577
eXBzZQ== 48578
IHVubGluaw== 48579
IFJhdmVucw== 48580
IGh1cmQ= 48581
IHBlcmlvZGljYWxseQ== 48582
QVJHUw== 48583
IEdI 48584
Y2hhcmFjdGVycw== 48585
Li4uIgoK 48586
LWVzdGFibGlzaA== 48587
IGRu 48588
KGNvbmRpdGlvbg== 48589
IEdyYXZpdHk= 48590
IGVzdGFz 48591
X2ZvY3Vz 48592
Q3JlYXR1cmU= 48593
KHNpdGU= 48594
IGNhcnI= 48595
IFJM 48596
IFJJ 48597
IE1vdG8= 48598
QVNG 48599
IEx1Y2tpbHk= 48600
CVJvdXRl 48601
IGVudHJvcHk= 48602
KCIsIg== 48603
Q29sbGVjdA== 48604
KGNvbnRhY3Q= 48605
IEZsb3JlbmNl 48606
IHByZW1pdW1z 48607
IGxpZmVjeWNsZQ== 48608
IGJhbnM= 48609
eGVm 48610
V2ViS2l0 48611
IEZsb2F0aW5n 48612
IGNvc2E= 48613
U3BlY2lmaWM= 48614
IExvYW5z 48615
YnJlYWQ= 48616
IGRlc2NyaXB0b3Jz 48617
IHs6Lg== 48618
VEhSRUFE 48619
IFRyZW50 48620
IHNjb3A= 48621
UUE= 48622
IEFudGFy 48623
cGVs 48624
X2RpZmZlcmVuY2U= 48625
X2NoYW5nZXM= 48626
KC4uLik= 48627
IFJvdGF0aW9u 48628
IExHUEw= 48629
IEpVU1Q= 48630
KFRhc2s= 48631
X3N1YnNldA== 48632
IFRSQU5T 48633
5Yqb 48634
IFNjb3V0 48635
LXBvcHVw 48636
IHNtb2tlZA== 48637
X0NsYXNz 48638
IHR1cm5vdmVy 48639
YnJha2s= 48640
IFJvY2t5 48641
dGFz 48642
LlJlZ3VsYXJFeHByZXNzaW9ucw== 48643
IEVsbGlvdHQ= 48644
IFNwaW5uZXI= 48645
RFVDVElPTg== 48646
IGxpYnJl 48647
IG1vbHRv 48648
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 48649
IEZUUA== 48650
bXBlZw== 48651
KGZlYXR1cmVz 48652
IGJhbGQ= 48653
IFZpZA== 48654
IHNob3V0aW5n 48655
TGludA== 48656
IHNvY2tldHM= 48657
IHByb3c= 48658
IG5vdXZlbGxl 48659
aXNjYXJk 48660
IFNwb25zb3I= 48661
IGNvbnN1bHRh 48662
KSkpOw== 48663
SW5kaWFu 48664
IFJhc3BiZXJyeQ== 48665
IHRlYW1tYXRl 48666
IEpXVA== 48667
IEdoYW5h 48668
IGNha2Vz 48669
cHJpbWVy 48670
Zm9ybWE= 48671
ZXJnYXJ0ZW4= 48672
X01hbmFnZXI= 48673
IHByZXNlYXNvbg== 48674
R0FNRQ== 48675
fCI= 48676
IEJyb2Nr 48677
IG9jY3VweQ== 48678
IGRlY29yYXRpb25z 48679
w6FuZA== 48680
IGNvdA== 48681
IHBhcmFu 48682
RGlzaw== 48683
cmVtYWlu 48684
Pj8= 48685
U3Ryb25n 48686
IGZyYW5jZQ== 48687
IEVyYQ== 48688
LWNy 48689
LkJ1ZmZlcmVkUmVhZGVy 48690
IFBhcmFkaXNl 48691
IFZBVA== 48692
IEFuZGVycw== 48693
IGxpbWI= 48694
YW1wb28= 48695
IGltcGVyYXRpdmU= 48696
VVRJTElUWQ== 48697
IFJlY29nbml0aW9u 48698
IHJhZ2F6emU= 48699
IHBvcHM= 48700
eXByZXNz 48701
IGVtYmFyZ28= 48702
Ly97Cg== 48703
IHN5bGw= 48704
UFRS 48705
5a2Y5Zyo 48706
IGRpZG50 48707
TWFpbGVy 48708
IGFjYWRlbWljcw== 48709
IEZyYXVlbg== 48710
bmVpZGVy 48711
LXJlbA== 48712
IHJhaW5ib3c= 48713
KElu 48714
IHNsaWNlZA== 48715
PT09PT09PT09PT09PQo= 48716
KHNlbmQ= 48717
TlNNdXRhYmxlRGljdGlvbmFyeQ== 48718
dm9z 48719
KHBhY2thZ2U= 48720
IG9yZGluYW5jZQ== 48721
dmlld2Vy 48722
IFNhbnRvcw== 48723
LXNlbGxpbmc= 48724
IGdvdg== 48725
ZXR0bGU= 48726
IGZvdW5kZXJz 48727
IHdha2luZw== 48728
c2xhc2hlcw== 48729
LXBvdW5k 48730
cmVjaHQ= 48731
2KfYqg== 48732
Lm9uQ2xpY2s= 48733
IG5vcmQ= 48734
c3TDpG5k 48735
X3doZW4= 48736
VVRFUlM= 48737
aWNj 48738
IGNhcHN1bGU= 48739
IFdpZA== 48740
TWFyYw== 48741
4Li4 48742
cm9yZWQ= 48743
VUdF 48744
TE9VRA== 48745
IEF1ZGl0 48746
aXBpZW50cw== 48747
b3BpYW4= 48748
IFN1ZQ== 48749
IHd1cmRlbg== 48750
LkhlbHBlcnM= 48751
IGZhY3Rpb25z 48752
W25w 48753
LXRoYW4= 48754
IHJlY28= 48755
IGthcw== 48756
IGNtZHM= 48757
L25ldHdvcms= 48758
eGJm 48759
Z2V0Q29sb3I= 48760
IGJpYXNlZA== 48761
IExhaw== 48762
RGF0YXM= 48763
dmVudHM= 48764
IOuy 48765
X1BT 48766
LlZhbGlkYXRl 48767
SW52b2tlcg== 48768
IG5ldWVu 48769
IGp1dmVuaWxl 48770
VklTSU9O 48771
IGRldm90ZQ== 48772
IGxpbmhh 48773
IGRpc2NvdW50ZWQ= 48774
XENvbmZpZw== 48775
IHdvcnRod2hpbGU= 48776
IHNraW5ueQ== 48777
IENvdXJzZXM= 48778
bGV5cw== 48779
IE1vcnRnYWdl 48780
S2V2aW4= 48781
IGFubm91bmNlcw== 48782
XSkq 48783
cmVzZXJ2YXRpb24= 48784
IOaVsA== 48785
IHByZWp1ZGljZQ== 48786
IFN0cmluZ0NvbXBhcmlzb24= 48787
IGJlYXJk 48788
LXdpbg== 48789
IFPDo28= 48790
CW1z 48791
amFs 48792
IEVhcm4= 48793
X3BvcnRz 48794
IE5vbWJyZQ== 48795
X0NPUg== 48796
IEJVSUxE 48797
LnNvdW5k 48798
WWVsbG93 48799
IGxpbmViYWNrZXI= 48800
IGNoYXJpdGFibGU= 48801
anVn 48802
X05PTk5VTEw= 48803
IERlbnRhbA== 48804
Ij4kew== 48805
CW1hdGNo 48806
UnVzc2lhbg== 48807
IHZlcnNjaA== 48808
IHBpbm5lZA== 48809
IGFkb3B0aW5n 48810
T3B0aW9uc01lbnU= 48811
UGFn 48812
IHBhaXJpbmc= 48813
IHRyZWFk 48814
ZXJjaXNlcw== 48815
IFNwcmVhZA== 48816
KWk= 48817
IEJBRA== 48818
X3Rm 48819
VUlJbWFnZVZpZXc= 48820
cG9wdWxhdGU= 48821
YmFi 48822
IM+D 48823
Wysr 48824
IG9waW9pZA== 48825
ICMjCg== 48826
ZHR5cGU= 48827
IFN0YXJ0cw== 48828
KCcvJyk= 48829
IHBlcnNvbmFscw== 48830
LW1hcmtldA== 48831
IHJlZHVuZGFudA== 48832
IEVzc2VudGlhbA== 48833
IHNjcmFweQ== 48834
INC40Lw= 48835
YWNs 48836
IGNyZWFy 48837
IEJlbmQ= 48838
IHJlbGlldmU= 48839
LXJvb20= 48840
d2lmZQ== 48841
IHbDoA== 48842
IFFQb2ludA== 48843
IHF1YXNp 48844
IG1ldGhvZE5hbWU= 48845
XHhj 48846
IFBlcnU= 48847
L1RoZQ== 48848
Lm9ybQ== 48849
IHZpeg== 48850
L3BkZg== 48851
TG9jYXRlZA== 48852
IGNvbmZyb250YXRpb24= 48853
IENoYW1waW9uc2hpcHM= 48854
IGh5cGVydA== 48855
IGRq 48856
IFVzZXJJbmZv 48857
IOWIm+W7ug== 48858
XHhi 48859
KHNpbQ== 48860
ID09Cg== 48861
IHN0YWdpbmc= 48862
IGRyYXN0aWNhbGx5 48863
5a2m 48864
bG9yZHM= 48865
Lmxlc3M= 48866
0LLQtdC00LjRgtC1 48867
IEJ1Y2tldA== 48868
IE1hbQ== 48869
LnRlcm0= 48870
X3Bp 48871
Y3p5 48872
LnB1Yg== 48873
cHJlY2lv 48874
IFZpcnQ= 48875
IHJvbWFu 48876
aXRhdA== 48877
TGV4 48878
X2luZm9z 48879
xLA= 48880
Lm90aGVy 48881
VkVMTw== 48882
IHBvbmRlcg== 48883
IGhhbm5v 48884
KFBhZ2U= 48885
ZG9p 48886
IHBvbGl0ZQ== 48887
IHByb2dyYW1tZXI= 48888
RGllcw== 48889
JGQ= 48890
IHJlcGxpY2F0aW9u 48891
YWRkQ29sdW1u 48892
ZnJpY2Fu 48893
IGxlbmc= 48894
YmVlcg== 48895
b2l0 48896
IHdhc3Rpbmc= 48897
eWxpbQ== 48898
bWVhc3VyZQ== 48899
TmVn 48900
IHBhcnRpZQ== 48901
LmNvbnNvbGU= 48902
IEd1aW5lYQ== 48903
VEVM 48904
X2ZhY3Q= 48905
LmNodW5r 48906
IGxlbnQ= 48907
IGFsbGVy 48908
IOCklQ== 48909
X2lkbGU= 48910
IGFkbWlzc2lvbnM= 48911
SlNPTkFycmF5 48912
IHZpYnJhdGlvbg== 48913
LmhlbHBlcnM= 48914
5aSW 48915
IGhlbg== 48916
am9obg== 48917
IOyDnQ== 48918
IGp1ZGdlbWVudA== 48919
IGdlZW4= 48920
dGVycmE= 48921
Xns= 48922
IEl6 48923
IGPDog== 48924
aW5zdGFuY2Vz 48925
IHRocmVhdGVucw== 48926
IG3DvHNzZW4= 48927
S2luZE9mQ2xhc3M= 48928
IHN0b3J5dGVsbGluZw== 48929
X2RlbW8= 48930
cmlhcw== 48931
UHJpdmFjeQ== 48932
aGlmdA== 48933
IFlp 48934
ZXNvcg== 48935
7ZWg 48936
ZW5zaXRpdml0eQ== 48937
LldyaXRlcg== 48938
4LiC 48939
RGlzdHJpY3Q= 48940
LmdldEpTT05PYmplY3Q= 48941
SW1wcm8= 48942
KGdldFJlc291cmNlcw== 48943
IFNQRUxM 48944
cm9kdWNl 48945
IHNsb3dlZA== 48946
IGxpbmV3aWR0aA== 48947
IGhvbmVzdHk= 48948
IENvb3Jk 48949
IEZvcms= 48950
IERpc3BhdGNoUXVldWU= 48951
IENsaWZm 48952
IFdpcmluZw== 48953
X1RJTUVTVEFNUA== 48954
b2xsYWg= 48955
YXZvaWQ= 48956
KytdOwo= 48957
c2VtYW50aWM= 48958
LWNzcw== 48959
IHZldG8= 48960
IE1lcnI= 48961
IGxlZ2lzbGF0b3Jz 48962
Q0VFREVE 48963
IHF1ZXN0aW9ubmFpcmU= 48964
IFBpbGxz 48965
Q2FsY3VsYXRl 48966
KGNvcmU= 48967
J2U= 48968
IGRpc2xpa2U= 48969
IFByZWZlcmVuY2Vz 48970
X0VYVEVSTkFM 48971
6LCD 48972
IGRvZGdl 48973
5pyN5Yqh 48974
Lm5hbWVz 48975
LmRyYXdJbWFnZQ== 48976
X3Byb20= 48977
dWNrbGFuZA== 48978
IDwkPg== 48979
xLF6 48980
L3NpdGU= 48981
6aG5 48982
cm9waGU= 48983
IGNvbXBlbGxlZA== 48984
IGxhcHRvcHM= 48985
IHVuaQ== 48986
Q0xPU0U= 48987
IGNhc3VhbHRpZXM= 48988
IFVuaWZvcm0= 48989
VGVybWluYWw= 48990
LiIsIg== 48991
REFU 48992
KFRyZWVOb2Rl 48993
IEdhbmRoaQ== 48994
KHN0bXQ= 48995
QVhC 48996
Kk0= 48997
IHVtYnJlbGxh 48998
YW5pbWFs 48999
IGdycGM= 49000
IHdoZXJlYnk= 49001
IGZsb2F0cw== 49002
CWFyZw== 49003
IGRiZw== 49004
IGV4Y2VlZGluZw== 49005
RXZlbnRUeXBl 49006
LlNhdmVDaGFuZ2VzQXN5bmM= 49007
IHt7ew== 49008
IG93ZWQ= 49009
YWhyZW5oZWl0 49010
IOyn 49011
IGVxdWlwbw== 49012
dXJhaQ== 49013
IGlkb2w= 49014
XSIpCg== 49015
X21ham9y 49016
IGVudGlyZXR5 49017
aW5nZXJwcmludA== 49018
w6dvcw== 49019
L2FjY291bnQ= 49020
CXJpZ2h0 49021
dXJzb3M= 49022
IEVEVA== 49023
X0lOU0VSVA== 49024
IHNoaW5pbmc= 49025
IDw6 49026
RWRnZUluc2V0cw== 49027
IGNvbG9uaWVz 49028
LklN 49029
CSAJ 49030
Uk9BRA== 49031
Q0NDQw== 49032
cGxhY2luZw== 49033
IGdldEFjdGl2aXR5 49034
ZW1hY3M= 49035
JyUo 49036
LmNsaWNrZWQ= 49037
IFRoZW0= 49038
aXNpYQ== 49039
QnVzY2Fy 49040
LnJlbmFtZQ== 49041
IG9hdGg= 49042
IGFmdGVyd2FyZA== 49043
IFVGTw== 49044
QVBT 49045
IEphY2tzb252aWxsZQ== 49046
LnNvbWU= 49047
Q29uZmlybWVk 49048
LnNjYW4= 49049
aWdJbnRlZ2Vy 49050
RGVjb3JhdG9y 49051
c2hpZWxk 49052
cmVzc2l2ZQ== 49053
LmRpZA== 49054
6K+36L6T5YWl 49055
IHNodXR0ZXI= 49056
RGFt 49057
IHBhcmVudGluZw== 49058
ZXllZA== 49059
JGl0ZW0= 49060
LWRldmVsb3A= 49061
IGV4dHJhY3Rz 49062
IGRlY2VudHJhbGl6ZWQ= 49063
IEVsc2E= 49064
X3NwaW4= 49065
XSkr 49066
LWluaXRpYWw= 49067
IG11bHRpdHVkZQ== 49068
IHNlbnNvcnk= 49069
IE1PREVM 49070
IHNhZmVndWFyZA== 49071
7Lk= 49072
IGh1bnRlcnM= 49073
IFRpbnk= 49074
SU5P 49075
ZGVjb3JhdGU= 49076
IE5vU3VjaA== 49077
SG8= 49078
KFJlc3BvbnNl 49079
IHJ1bGVy 49080
CXNob3J0 49081
IGNhc3Rlcg== 49082
IGNsaWVudElk 49083
IHBkYg== 49084
64+E 49085
aXRpYw== 49086
IEdhbWVTdGF0ZQ== 49087
IG5ld0l0ZW0= 49088
KQoKCgoKCg== 49089
b3Vpcw== 49090
bm9j 49091
LkJMQUNL 49092
X1ZFQ1RPUg== 49093
LS0tLS0tLS0tLTwv 49094
IGV4YW1pbmVz 49095
CWJsb2Nr 49096
IGFkZG9u 49097
IHN1cnZleWVk 49098
IExpc3RlbmVy 49099
IGZyb250aWVy 49100
IGxhY2tlZA== 49101
SlVTVA== 49102
INGN0YI= 49103
IHRpbnQ= 49104
IE15c3Rlcnk= 49105
ZGF0ZVRpbWU= 49106
IFR1dG9yaWFs 49107
IGZ1bGxOYW1l 49108
IERyYWdvbnM= 49109
X0ZJTEVT 49110
IFByaW50V3JpdGVy 49111
IGJlZXQ= 49112
IExhZGllcw== 49113
X3RpcA== 49114
IEphaHJl 49115
b3JhbWE= 49116
IGluc3VsYXRpb24= 49117
KEVudmlyb25tZW50 49118
X2FzdA== 49119
YmVyZ2Vy 49120
bGVuYQ== 49121
b2dlbmVvdXM= 49122
X01PTlRI 49123
LXByZXNlbnQ= 49124
IGZyYW1ld29ya3M= 49125
UVE= 49126
UEhQRXhjZWw= 49127
IGNvdW50ZG93bg== 49128
IEZX 49129
KGNsdXN0ZXI= 49130
OmM= 49131
IG9raHR0cA== 49132
b2JzZXJ2ZQ== 49133
W3BsYXllcg== 49134
Lmhl 49135
IFBhbmFtYQ== 49136
QXVzdHJhbGlh 49137
IG91bmNlcw== 49138
IGFnZ3Jlc3NpdmVseQ== 49139
IHdhcm5z 49140
IGN1c3RvbWl6YXRpb24= 49141
X1F1ZXJ5 49142
d2lz 49143
IGludmFs 49144
QUZG 49145
KGNhbWVyYQ== 49146
V2ly 49147
IG5lZ290aWF0aW9u 49148
CU8= 49149
IHJlc3BlY3RmdWw= 49150
IGRpYW1vbmRz 49151
J2F2 49152
YXBwcm94 49153
L2Ry 49154
IGdyYWJz 49155
IGFjY29tcGFuaWVz 49156
Y29uc3RyYWludA== 49157
IHJleg== 49158
KHJlZ2lvbg== 49159
IGJhaXQ= 49160
dGVybWluYXRl 49161
IEJlbGdpYW4= 49162
YXNzaXVt 49163
IF0NCg== 49164
U3lzdGVtcw== 49165
b3VzZWRvd24= 49166
LmJ1cw== 49167
U2V0VmFsdWU= 49168
IFByZXA= 49169
IGNvbnZlbmllbnRseQ== 49170
Lm1pZA== 49171
Y2FzZWNtcA== 49172
TnVtZXJv 49173
ZGFpbHk= 49174
IENvZGluZw== 49175
KGRlc3RpbmF0aW9u 49176
IyQ= 49177
dWrEhQ== 49178
IGVtZXJnZW5jZQ== 49179
X3BhcmE= 49180
X0lOQ0xVREU= 49181
Izo= 49182
IHJlY29nbml6aW5n 49183
IGZ1Zw== 49184
In19LAo= 49185
IGJ1aWxkZXJz 49186
IFRlcnJpdG9yeQ== 49187
IGluaGVyZW50bHk= 49188
IGRlcml2aW5n 49189
LmV0aA== 49190
IERpbm5lcg== 49191
LnNldE9iamVjdE5hbWU= 49192
IGNlbGVicmF0ZXM= 49193
IHF1ZXVlcw== 49194
IE1hcmtz 49195
QUxURVI= 49196
IERhcnQ= 49197
cG9rZQ== 49198
X0NIQU5HRUQ= 49199
IHBhYXI= 49200
bGllcw== 49201
LnZvbGxleQ== 49202
IE1lYW5pbmc= 49203
IE9GRlNFVA== 49204
ZW5zaW5n 49205
IGZyw6Vu 49206
LmxvY2FsU3RvcmFnZQ== 49207
IOup 49208
KHt9KTsK 49209
ZGVjb2Rlcg== 49210
IHJvdWxldHRl 49211
IGRpc21hbnQ= 49212
SXI= 49213
IGluc3VyZw== 49214
ICcnOgo= 49215
LuKAnQo= 49216
IGJydW5ldHRl 49217
LmFzc2V0cw== 49218
X05FVFdPUks= 49219
4LiK 49220
bnlt 49221
X1NvdXJjZQ== 49222
XFRlc3Rz 49223
RXNjYXBl 49224
Y3J5cHQ= 49225
LlhNTA== 49226
IHNvdW5kaW5n 49227
b3Bjb2Rl 49228
IGNsYXNzaWZ5 49229
IGVtYmFycmFzc2Vk 49230
IExPR0lO 49231
IHJlc2lkdWU= 49232
IE5FRUQ= 49233
LmRlZXBFcXVhbA== 49234
cGVyYw== 49235
LWNhbA== 49236
UmVkaXM= 49237
VHJh 49238
KF8p 49239
YXNrZXRz 49240
Z3JhZGF0aW9u 49241
IGVuenltZQ== 49242
IFN0ZXBoYW5pZQ== 49243
LkludmFsaWQ= 49244
J10/Pjwv 49245
IGRpc3BsYWNlZA== 49246
IGVsZW1lbnRvcw== 49247
KGR1cmF0aW9u 49248
cm93Q291bnQ= 49249
IEZTdGFy 49250
bGV0YQ== 49251
L3BvcHBlcg== 49252
IHN0YXRv 49253
IHBlcmZvcm1lcg== 49254
IGRpc2NpcGxpbmVz 49255
IEZ1bGx5 49256
aWN1bGFybHk= 49257
IGVyc3Rlbg== 49258
IFBvbHlnb24= 49259
IGRpc2NpcGxlcw== 49260
LmlzZGly 49261
IHRlc3RpZnk= 49262
X1NS 49263
cHJpc2luZ2x5 49264
IEdMaW50 49265
IHdpcGVk 49266
IGNhcnZlZA== 49267
IERpc2g= 49268
Lmhlcm9rdWFwcA== 49269
c3RpdGlhbA== 49270
IE1BVENI 49271
Y2xhaXI= 49272
IERheXRvbg== 49273
LycpCg== 49274
SURETEU= 49275
IGluZnJh 49276
IGxpdmVseQ== 49277
IGRlcHM= 49278
IFsuLi5d 49279
CQkJCQkJCQkJCQkJCQkJCQk= 49280
IExvbg== 49281
RXh0cmFz 49282
VHJhbnNpZW50 49283
0LLQtdGA 49284
L21vZHVsZQ== 49285
IGVuZHVyYW5jZQ== 49286
X3RleA== 49287
ICJ+Lw== 49288
X3lsYWJlbA== 49289
IG9iZWQ= 49290
L2dhbWU= 49291
b3BzeQ== 49292
IGZpcnN0bmFtZQ== 49293
LmZvcmNl 49294
IG1hcnQ= 49295
XENsaWVudA== 49296
IGxlZ2l0aW0= 49297
LmZsYXR0ZW4= 49298
Iics 49299
b3NleHVhbA== 49300
IGpvdXJz 49301
TUg= 49302
ZXhwaXJlcw== 49303
IHN0eWw= 49304
LmludGVydmFs 49305
S25vd24= 49306
IGZvbGxvd2Vy 49307
IGRhbGxh 49308
cGlyeQ== 49309
X3NzbA== 49310
aXNobGlzdA== 49311
IFJleQ== 49312
IHN1cGVybWFya2V0 49313
T2J2aW91c2x5 49314
LWVudGVy 49315
IHByb2JhYmlsaXRpZXM= 49316
IEhW 49317
IENpbmVtYQ== 49318
IGN0eXBlcw== 49319
IEJDTQ== 49320
X1RBQw== 49321
O2E= 49322
LmJ1dHRvbnM= 49323
IHJldHJpZXZpbmc= 49324
aWxhcml0eQ== 49325
IHVuZGVydGFraW5n 49326
CXN0YWNr 49327
IGtlbA== 49328
IFhlbg== 49329
KHBoaQ== 49330
IHRvdWdoZXI= 49331
IFNlbGxlcg== 49332
Y2Fwcw== 49333
IEVtYmVy 49334
IENoaW4= 49335
IGxhdWdocw== 49336
Q29udmVyc2lvbg== 49337
Lmxpc3RlbmVy 49338
JkI= 49339
IHBhcmFkaWdt 49340
IGp1bmN0aW9u 49341
JC8sCg== 49342
W28= 49343
IENvbnNlcnZhdGl2ZXM= 49344
z4A= 49345
bGF0ZXM= 49346
X0V4Y2VwdGlvbg== 49347
IG1laWxsZXVy 49348
IHN0cmFwcw== 49349
cXVpc2l0ZXM= 49350
CXNu 49351
IG1hc3NhY3Jl 49352
b3R0ZXM= 49353
X2dyZWVu 49354
VGl0bGVz 49355
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 49356
IFJlZ3VsYXRpb25z 49357
YXJs 49358
X3Nob3J0Y29kZQ== 49359
IERyYXdlcg== 49360
IHBhcm9sZQ== 49361
IHdpbGRlcm5lc3M= 49362
aXNzb24= 49363
IEFGVEVS 49364
Q3JlZGVudGlhbA== 49365
QmxvY2tpbmc= 49366
IEhUQw== 49367
U2lu 49368
KGF1dGhvcg== 49369
IGNvcnRleA== 49370
Jyl7DQo= 49371
77yJ77yM 49372
IGR1bXBlZA== 49373
IFNodXQ= 49374
IEtleUV2ZW50 49375
CVBsYXllcg== 49376
LmdldFBsYXllcg== 49377
IGlnbm9yZXM= 49378
dG9nZ2xlQ2xhc3M= 49379
IEV4Y2x1c2l2ZQ== 49380
PigpOw== 49381
LmdldFA= 49382
YW55ZQ== 49383
IG5ldXJvbg== 49384
aWZvbGQ= 49385
IEtub3du 49386
Qml0Y29pbg== 49387
QW55d2F5 49388
YXlldHRl 49389
ICdbJw== 49390
w6BuaA== 49391
bWdy 49392
IGNvcnJlbGF0ZWQ= 49393
IG5hdXNl 49394
IG1lbnRhbGl0eQ== 49395
aGFzTWFueQ== 49396
IEZH 49397
YW1waWU= 49398
SVRV 49399
RnM= 49400
LlNw 49401
X2JldHdlZW4= 49402
RGVwZW5kZW5jaWVz 49403
b3Vn 49404
UGxhY2Vob2xkZXI= 49405
PXRleHQ= 49406
IE1hbmFnaW5n 49407
b2NhbHlwc2U= 49408
5YyX 49409
X21hZw== 49410
Zmxk 49411
4pE= 49412
Q0FN 49413
IEhlbHBlcnM= 49414
IGRvc3Q= 49415
L291dA== 49416
IGFzc2Fzc2luYXRpb24= 49417
LmdldEltYWdl 49418
IEtlbm55 49419
LicpCgo= 49420
KXsvLw== 49421
IFJhbmdlcg== 49422
IGdlaw== 49423
IHNpbmNlcmU= 49424
PFZhbHVl 49425
IERPVA== 49426
IFZpY3Rvcnk= 49427
IGxlZ2VuZHM= 49428
IHByaXNvbnM= 49429
KGV4cHJlc3Npb24= 49430
IFJhYmJpdA== 49431
X3NlbnRlbmNl 49432
IGJpdGVz 49433
IG9uRmFpbHVyZQ== 49434
IOKIiA== 49435
S2lt 49436
LmdlbmRlcg== 49437
IM67 49438
IFsu 49439
Il0pOw== 49440
bGFuZGluZw== 49441
LWRpZ2l0 49442
VEVNUA== 49443
CWVudHJ5 49444
IHN0cnRvaw== 49445
IGRlc2NlbmRhbnRz 49446
dW1ubw== 49447
IGxlYW5pbmc= 49448
IHNwZWNpZmljcw== 49449
cW4= 49450
IFNwYXJ0 49451
IHBvcnI= 49452
RURJQVRFSw== 49453
IHNlcGVy 49454
J2F1dA== 49455
IFNURVA= 49456
IEJvcmRlckxheW91dA== 49457
IHJldHJvcw== 49458
IFNhbHZhZG9y 49459
IEVOR0lORQ== 49460
eGRj 49461
VHdlZXQ= 49462
dms= 49463
IOyy 49464
XTw8 49465
aGV0aWNz 49466
Y29kaW5n 49467
UmVhY2g= 49468
LnJlcQ== 49469
Z3VpZGU= 49470
LnNjb3Bl 49471
c2hpcnQ= 49472
cm9nYXRl 49473
U0VUVElORw== 49474
IFByb3RlaW4= 49475
IGVpbmc= 49476
LkVNUFRZ 49477
LmRm 49478
IGNsZWFyZXI= 49479
IGNyb3Nzb3Zlcg== 49480
IFRveXM= 49481
IGNvYXRlZA== 49482
Lk1vbnRo 49483
IEF0dGFjaA== 49484
L3J1bg== 49485
LnRhYnM= 49486
IG9nc8Ol 49487
QnJvd24= 49488
LkRBVEU= 49489
IGZvcw== 49490
5a2X56ym 49491
V29vZA== 49492
LXRocmVl 49493
aGVyaXRlZA== 49494
IHJvcA== 49495
KGFj 49496
IGVtYm9kaW1lbnQ= 49497
IEtlbm5ldGg= 49498
IGNhbm5vbg== 49499
IGJpZGRpbmc= 49500
PElFbnVtZXJhYmxl 49501
CXNldFRpbWVvdXQ= 49502
X2RpZ2l0 49503
IGVsaW1pbmFy 49504
KG5l 49505
YnVkZ2V0 49506
Q1NJ 49507
IOyVhA== 49508
IEFTUA== 49509
R3JvdXBJZA== 49510
X0NPVU5URVI= 49511
Y29uc3VsdA== 49512
IGlmcmFtZQ== 49513
bGVnZW4= 49514
X0RFQ0xBUkU= 49515
U2hhcnBlcg== 49516
IEZyaWVuZGx5 49517
dWxldA== 49518
LWNvbW1hbmQ= 49519
INCg 49520
Y3ljbGVz 49521
IFdhc3Rl 49522
IHRhcHBlZA== 49523
CUJ1ZmZlcg== 49524
4oCUaW4= 49525
IAogIAo= 49526
IElkZWFs 49527
IENhbmR5 49528
X1N5bnRheA== 49529
w6p0 49530
7J2M 49531
YWJvdmU= 49532
IE5hemlz 49533
IGZzdA== 49534
c2Vpbg== 49535
IGt1bm5lbg== 49536
d2lr 49537
IFNhdmluZw== 49538
LmV4dGVuc2lvbnM= 49539
IERlc2VyaWFsaXpl 49540
b3VyZw== 49541
LmF0dHJpYg== 49542
77yaCgo= 49543
IFdpbnM= 49544
LmVxbA== 49545
Unlhbg== 49546
X2Fjaw== 49547
T1VSQ0VT 49548
IG9ucw== 49549
Z3Jlc2U= 49550
YWZpYQ== 49551
TW9kZXJu 49552
IGFkaGVyZQ== 49553
IGJpb3M= 49554
KGFjYw== 49555
a2Jk 49556
VGhyb3du 49557
qeuLiOuLpA== 49558
CUh0dHA= 49559
CXhtbA== 49560
RW5kRGF0ZQ== 49561
KHBhcnNlZA== 49562
LmdldGVudg== 49563
cmVnaXN0cg== 49564
bmVsbA== 49565
aW9uYXJpbw== 49566
LmlubmVyV2lkdGg= 49567
cnRs 49568
UFY= 49569
X3BpZWNl 49570
IERlcG9zaXQ= 49571
eWVycw== 49572
IE5TTnVtYmVy 49573
IGdpbnQ= 49574
ZW5zZW1ibGU= 49575
IG5ld2NvbQ== 49576
IFZpZXRuYW1lc2U= 49577
X2hw 49578
IGFjY3VzaW5n 49579
IHF1aXM= 49580
IGludmVzdGlnYXRvcg== 49581
ZXNzZW50aWFs 49582
IENY 49583
LmZvck5hbWU= 49584
ZGVmcw== 49585
IGFuYWx5c2U= 49586
X2FuaW1hdGlvbg== 49587
IHRoYQ== 49588
dGFib29sYQ== 49589
IFRIQw== 49590
w61jdWxv 49591
IGdsb3dpbmc= 49592
IGhvbm9ycw== 49593
YnN0cmFjdA== 49594
a3A= 49595
SVRFUw== 49596
ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= 49597
I2dldA== 49598
L0Rlc2t0b3A= 49599
CWdsbQ== 49600
IHppbmM= 49601
w6F0aWNh 49602
IDw8Cg== 49603
Vk1M 49604
IFVubGltaXRlZA== 49605
dnJl 49606
LWJlZA== 49607
X25vbmNl 49608
IEdJ 49609
dHJhdmVs 49610
IGlzS2luZE9mQ2xhc3M= 49611
IGFub255bWl0eQ== 49612
RmlyZXN0b3Jl 49613
IGVtYWlsZWQ= 49614
X0ZMQVNI 49615
IGbDpXI= 49616
4piF4piF 49617
IDpd 49618
SHVt 49619
LnJlc2VydmU= 49620
w7xt 49621
IGtvc3Rlbmxvc2U= 49622
IFNDUA== 49623
dXRhbg== 49624
IEdvcmU= 49625
IGNoYXRz 49626
Lz4NCg== 49627
LmdldFJlc291cmNlcw== 49628
IGx1bXA= 49629
X2NvbnN0cw== 49630
KGV4dA== 49631
CWRpcg== 49632
4p0= 49633
IHBhZGRpbmdUb3A= 49634
IG9ic2Vzc2lvbg== 49635
IGJhbm5pbmc= 49636
IEFwcE1vZHVsZQ== 49637
IHBhcnRpc2Fu 49638
IGNhdGFsb2d1ZQ== 49639
IG1pbm9ycw== 49640
IHBpdGNoZXM= 49641
d2VlcA== 49642
IHVuZGVydGFrZQ== 49643
IHRoZW1lZA== 49644
YXVkaXQ= 49645
LnNjcm9sbFRvcA== 49646
IHJlcg== 49647
IHN5bXB0b20= 49648
IG9wZW5pbmdz 49649
LmJsb2Nrcw== 49650
b3Blbmlk 49651
IGFzc2g= 49652
LXNhdmU= 49653
IFBpZw== 49654
IHJlZ2Fpbg== 49655
IGluaWNpYWw= 49656
L2Zhdmljb24= 49657
CWV4cA== 49658
IHNwaWNlcw== 49659
aXNrYQ== 49660
Y2xhaW1z 49661
bWFr 49662
ZGVmaW5pdGlvbnM= 49663
IGNvcnJlc3BvbmRlbnQ= 49664
IENhbm5hYmlz 49665
X18sCg== 49666
IEx1Y2t5 49667
IEdhdXNzaWFu 49668
IE5lYXJseQ== 49669
Q0FE 49670
J11dCg== 49671
IGFkZXF1YXRlbHk= 49672
IFRJVExF 49673
Y29uc3RpdHV0aW9uYWw= 49674
LW1t 49675
X292ZXJyaWRl 49676
IGJsYXM= 49677
LnJlYWR5U3RhdGU= 49678
IHJlbWluaXM= 49679
IHJlaW5mb3JjZWQ= 49680
IENvbGxhYm9y 49681
IGRlY29yYXRpbmc= 49682
IGJhY2hlbG9y 49683
RVJSVVBU 49684
IHVwcmlnaHQ= 49685
aXBhdGlvbg== 49686
IE5vYmxl 49687
IHZhbHVlRm9yS2V5 49688
IHNldExvYWRpbmc= 49689
Lklnbm9yZQ== 49690
5YE= 49691
R2xvYmFscw== 49692
IE1lbnQ= 49693
QVNTRVM= 49694
IGxpbWJz 49695
IEhVRA== 49696
aW5jaQ== 49697
Lml2 49698
IFFNb2RlbEluZGV4 49699
RnVzZQ== 49700
IHBlZGFs 49701
X0ZSRVE= 49702
KHZlcmJvc2U= 49703
IGxvbmdpdHVk 49704
IENoYXJ0ZXI= 49705
6re4 49706
IGJ1bmRsZXM= 49707
Lmlnbm9yZQ== 49708
dW1ibw== 49709
RU1B 49710
Li4uLi4uLg== 49711
c3g= 49712
LkNhcmQ= 49713
IGhldXRl 49714
IHN0ZWVy 49715
anVtbGFo 49716
IHtf 49717
X0NoZWNrZWQ= 49718
IGZheA== 49719
IEd1c3Q= 49720
aXRjaGVucw== 49721
ICkpCgo= 49722
IHJlbWFya2FibHk= 49723
L1hNTA== 49724
LXJlbW92ZQ== 49725
X2J0 49726
IGluY3Vi 49727
LnBhY2thZ2U= 49728
LmN1cnJlbnRUaHJlYWQ= 49729
IEhpZ2hsYW5kZXI= 49730
LnNpZGU= 49731
c3BsYXNo 49732
IGljaQ== 49733
PUQ= 49734
IHB1Y2s= 49735
IGJhbGxvdHM= 49736
IGh1Z2VseQ== 49737
Y29lZmY= 49738
IHBEYXRh 49739
LkNPTFVNTg== 49740
IEhlYWxpbmc= 49741
IG9yZGlu 49742
ISks 49743
ICcnLA0K 49744
KG1k 49745
IFNhc2s= 49746
PHN0cm9uZw== 49747
IHN1cnZpdm9y 49748
LnNlcmllcw== 49749
IGNhZmZlaW5l 49750
IGAo 49751
LlRSQUlMSU5H 49752
X0lucHV0 49753
KCJe 49754
emQ= 49755
Jik7Cg== 49756
IFBpbmc= 49757
IHZvdWNoZXI= 49758
LnJhdGluZw== 49759
LXNoaXJ0cw== 49760
IFJldHJpZXZlcw== 49761
LmFsaWJhYmE= 49762
T3JhY2xl 49763
X01PVg== 49764
T2xkRGF0YQ== 49765
IC8qDQo= 49766
IGdib29sZWFu 49767
ID0+DQo= 49768
IHLDoQ== 49769
IGJsdW50 49770
IEltYWdlSWNvbg== 49771
aWZpaw== 49772
UlRD 49773
IGZpYmVycw== 49774
IHRvaWxl 49775
LnNlbnQ= 49776
IFB5UXQ= 49777
JGFwcA== 49778
IG1lZGlv 49779
IGdyYW50aW5n 49780
IHRzbGludA== 49781
IE3Dtg== 49782
KGZpZ3NpemU= 49783
IGh1cnJpY2FuZQ== 49784
IGxpZmVz 49785
IMOE 49786
cm9jZXNzaW5n 49787
X3N0YW5kYXJk 49788
LW9wdGlvbg== 49789
JykpKQ== 49790
IHZhY2FudA== 49791
5bel 49792
IEhvbGxvdw== 49793
aGFuZGxlQ2hhbmdl 49794
IGRpdmlkZXI= 49795
IEVuZ2luZWVycw== 49796
IHN2ZW5z 49797
IGNvbXBsaWFudA== 49798
dGFuZ2dhbA== 49799
IENyZWRpdHM= 49800
IEVtaXJhdGVz 49801
UnVsZUNvbnRleHQ= 49802
IHJlYWxpemF0aW9u 49803
IGRpc3RyYWN0ZWQ= 49804
XSs9 49805
IGF1Z21lbnQ= 49806
IER3 49807
b3Rw 49808
b3JyZW50 49809
RWRpdGFy 49810
LnN0b2Nr 49811
U3R1ZHk= 49812
cGVjdGlvbnM= 49813
IEdhbWVNYW5hZ2Vy 49814
PWN1dA== 49815
IGZsb2Nr 49816
IFJvbWFucw== 49817
dGhlbQ== 49818
LWhvcA== 49819
IHNjcmVlbnNob3Rz 49820
IC8qIQo= 49821
IGNvbnZlcnNpb25z 49822
IG5vcm1hbGl6YXRpb24= 49823
KGNvbmZpZ3VyYXRpb24= 49824
IGFlcm9z 49825
X3NlY3VyaXR5 49826
IScK 49827
Qm9udXM= 49828
IERSSVZFUg== 49829
CURhdGU= 49830
dGll 49831
IFd5b21pbmc= 49832
U3RhbmQ= 49833
aXRyZQ== 49834
IHNob3BwZXJz 49835
IGRpc2FkdmFudGFnZQ== 49836
IGxpa2luZw== 49837
56yR 49838
IHVuZGVyc3RhbmRhYmxl 49839
U0VF 49840
IGhveQ== 49841
IG5pbmV0ZQ== 49842
IGNvbmZlcg== 49843
IG5vd3JhcA== 49844
IFZlcm4= 49845
LA0KDQo= 49846
aW1lc3RlcA== 49847
TGF5b3V0TWFuYWdlcg== 49848
4Lc= 49849
CXdhaXQ= 49850
UExFVEVE 49851
SmFwYW4= 49852
IGluZHVjZQ== 49853
IOWv 49854
0L7Qt9Cy 49855
X0VORFBPSU5U 49856
Lmhvcml6b250YWw= 49857
IGFjY2VsZXJhdGVk 49858
cmltb24= 49859
SVZFUw== 49860
VHJhbnNhY3Rpb25z 49861
TGVhbg== 49862
IFNPVVI= 49863
d2hldGhlcg== 49864
eWc= 49865
IG9pZA== 49866
IEVudGl0eU1hbmFnZXI= 49867
T1VOVFJZ 49868
IGZpbGE= 49869
T0xVTU5T 49870
SU5VRQ== 49871
IEFuY2hvcg== 49872
VFJBTg== 49873
d29v 49874
YmxvY2txdW90ZQ== 49875
IE51cnNl 49876
IENhcnA= 49877
IHJlZGVlbQ== 49878
LnRyeQ== 49879
IEpQ 49880
IHRpbWVzdGFtcHM= 49881
ID8+Ij48 49882
IFJFTU9WRQ== 49883
IFN0YXJidWNrcw== 49884
UmVhbGx5 49885
IGZsb29kZWQ= 49886
LkNhbGxiYWNr 49887
RHJvcERvd24= 49888
aXBybw== 49889
IHRlbmRlZA== 49890
bHRl 49891
IHByb3BvcnRpb25z 49892
LXRl 49893
IFJlbmE= 49894
bGljYXRl 49895
Zm9yY2Vz 49896
LmV4dHJh 49897
LmF1dGhlbnRpY2F0ZQ== 49898
0LLQvtC0 49899
obA= 49900
IGZvckNvbnRyb2xFdmVudHM= 49901
IHNlbmhh 49902
IGtlaW4= 49903
IG1pbmlzdA== 49904
IFByZWZlcmVuY2U= 49905
IFRlbGVncmFwaA== 49906
0YPQvw== 49907
c3RycG9z 49908
IGlsbG5lc3Nlcw== 49909
IHBpZ3M= 49910
IGdldEludGVudA== 49911
U29s 49912
IMKh 49913
KGNwdQ== 49914
W3Byb3A= 49915
c2NyZWVucw== 49916
Jyk7Pz4= 49917
IEFjdHM= 49918
IHN0cmR1cA== 49919
IGF2ZXJhZ2Vz 49920
YW5hbA== 49921
IENhc3VhbA== 49922
R3JvdXBCb3g= 49923
IEhhbmRib29r 49924
L2NvbW1lbnRz 49925
IG51bWJlcmVk 49926
IGJyb2FkY2FzdGluZw== 49927
55uR 49928
Lm5hdGl2ZUVsZW1lbnQ= 49929
Lm11 49930
IHVwZGF0ZWRBdA== 49931
IERvZXNu 49932
LkFD 49933
LmNvbGw= 49934
IHJlY29yZGVy 49935
X3NoYQ== 49936
Qmc= 49937
Ymls 49938
IGJvbHRz 49939
IOes 49940
IGltcG9zaW5n 49941
IEluZm9ybWF0aW9uZW4= 49942
X2ZsYXNoZGF0YQ== 49943
ZWNvbm9taWM= 49944
UmVtYXJr 49945
dWNhcw== 49946
IE9mZmljZXJz 49947
IFRFUg== 49948
V2Fsaw== 49949
IG1lcmNhZG8= 49950
X2dlbmVyYXRl 49951
SFk= 49952
Q2FsbGluZw== 49953
c25hcA== 49954
c2NyaXB0SWQ= 49955
Lm9wZXJhdGlvbg== 49956
IEZsYW1l 49957
bGluZXNz 49958
IHJlbnRlZA== 49959
X3RvZ2dsZQ== 49960
LWNoYW5naW5n 49961
IFRZ 49962
J3V0aWw= 49963
RUVQ 49964
IGdyYXBocWw= 49965
IFVuaQ== 49966
IGltcHVsc2U= 49967
LkJhc2lj 49968
IGVuZXJnaWVz 49969
TUFSWQ== 49970
IE1hcmNlbA== 49971
IG1vcnRhbA== 49972
IGZyZXM= 49973
bWVucw== 49974
bW90aW9u 49975
IHNhbXBsZWQ= 49976
4oCcVGhhdA== 49977
aWRheQ== 49978
cXVpcG1lbnQ= 49979
Z2V0SW50 49980
IEFic29sdXRl 49981
LCci 49982
dW5lZA== 49983
LnNoYXJl 49984
IH0pKA== 49985
bW1t 49986
IFJpc2luZw== 49987
5Lu7 49988
IHVuZW1wbG95ZWQ= 49989
eGZh 49990
LmZvbGxvdw== 49991
CQkJCSAgICAgIA== 49992
c2x0 49993
LlBob25l 49994
IGtuaXZlcw== 49995
IGV2ZQ== 49996
b25DbGljaw== 49997
XSkpDQo= 49998
IFdpdG5lc3M= 49999
CU5T 50000
IEVPUw== 50001
IFN0ZWZhbg== 50002
IFByaWVzdA== 50003
4oCUd2hpY2g= 50004
R2V0U3RyaW5n 50005
LkJ5 50006
IHVwc3RhaXJz 50007
IGRldHJpbWVudA== 50008
YnJva2Vu 50009
ZW1icm8= 50010
IG5pY290aW5l 50011
aWxpb24= 50012
IGFzdG9uaXNoaW5n 50013
X2FmZg== 50014
IExlc3Nvbg== 50015
IGFjY2lkZW50YWw= 50016
b2Rvcg== 50017
IGRlY2ly 50018
IG5ld05hbWU= 50019
Ky4= 50020
55u4 50021
aWdzbGlzdA== 50022
IEdpdGh1Yg== 50023
IHN1Y2Nlc3NpdmU= 50024
cmFjaWFs 50025
IGVudmlyb24= 50026
6aqM6K+B 50027
IHJlZGlyZWN0ZWQ= 50028
VE9UQUw= 50029
IGdyYWJiaW5n 50030
IExhbmNl 50031
IGZvcmZl 50032
X0NC 50033
5b6u 50034
RWxhcHNlZA== 50035
X3dheQ== 50036
KERpYWxvZ0ludGVyZmFjZQ== 50037
X21lYXN1cmU= 50038
eGJi 50039
RG9n 50040
RGVwYXJ0 50041
LXNyYw== 50042
cmVzb2x2ZXI= 50043
d2l0aHN0YW5kaW5n 50044
X3NoZWxs 50045
IExhc3ROYW1l 50046
IEF2aWF0aW9u 50047
IGJlZ2lubmVy 50048
KCIlLg== 50049
KHRvb2w= 50050
INC90L7Qsg== 50051
OmluaXQ= 50052
KEFQSQ== 50053
IE1vcnJpc29u 50054
dnRDb2xvcg== 50055
IHN0YXBsZQ== 50056
L0lORk8= 50057
IHN1cGVybmF0dXJhbA== 50058
IHN0ZWFr 50059
dGltZWxpbmU= 50060
enpsZQ== 50061
ImAKCg== 50062
U2Vjb25kYXJ5 50063
IE5lcGFs 50064
LlN0cmluZ1V0aWxz 50065
IGFkYW0= 50066
ICguLi4= 50067
IHN1YnN0aXR1dGlvbg== 50068
IGJvYXJkaW5n 50069
IEtleXdvcmQ= 50070
IEFzc2F1bHQ= 50071
ZGJjVGVtcGxhdGU= 50072
IG9yZGVySWQ= 50073
KGVuZ2luZQ== 50074
LmFzc2VydFRoYXQ= 50075
IFZlbnVz 50076
IGhvbWljaWRl 50077
IEF2YWw= 50078
IGd1dHRlcg== 50079
IFN1cHBvcnRlZA== 50080
L3BhcnQ= 50081
IGFjY2xhaW1lZA== 50082
SGlzdG9y 50083
IG1lc2Vz 50084
w7xiZXI= 50085
IFJlbmV3 50086
IGdyYXM= 50087
IEVr 50088
IGluZmlsZQ== 50089
aW5keQ== 50090
Lm11c2lj 50091
LlNjcm9sbA== 50092
IEFnZXM= 50093
IE5hcnV0bw== 50094
IEdhdGhlcg== 50095
IGNvbmZpcm1pbmc= 50096
PSgi 50097
IHBpdGNoZWQ= 50098
b2xleQ== 50099
RnJhbmNl 50100
Kyci 50101
JHRvdGFs 50102
IG9uZGU= 50103
IGRpdGNo 50104
X3NpZ21h 50105
IGNvbnRpbnVpdHk= 50106
cmV3YXJk 50107
LWxvYWQ= 50108
IHByb2Nlc28= 50109
TG9ja2Vk 50110
c3Rhdw== 50111
IHNwaW5hbA== 50112
bGF6eQ== 50113
IT09 50114
amVzdA== 50115
IGR1bg== 50116
IFJvZGdlcnM= 50117
CWdyaWQ= 50118
IGxvZ29z 50119
IEJlbmdhbA== 50120
LnN1cGVy 50121
UHJvdmlkZXM= 50122
IG51dHJpZW50 50123
LlRpbWVzdGFtcA== 50124
SVpBVElPTg== 50125
5YaM 50126
IGZhdHM= 50127
IFh4eA== 50128
Y3RpY2E= 50129
VGFyZ2V0cw== 50130
IGNvbnRvdXJz 50131
IHJlb3JkZXJlZA== 50132
OkFycmF5 50133
IHRvbGVyYXRl 50134
Vmly 50135
IHRlcnJpYmx5 50136
IGJyaWNrcw== 50137
KCZf 50138
aGI= 50139
UG9ydGFs 50140
IEJyZWFk 50141
LndoaWNo 50142
wq10 50143
YXNJbnN0YW5jZU9m 50144
IGpvYmplY3Q= 50145
CWxlbmd0aA== 50146
X01U 50147
OyI+DQo= 50148
X0VYSVNU 50149
IG1hdGVybmFs 50150
UkVM 50151
IOqyveyasA== 50152
aGVl 50153
IGxheW91dHM= 50154
IExhcA== 50155
YWlzeQ== 50156
IHN0dW1ibGVk 50157
IFVJRw== 50158
IFNjbw== 50159
IGltcGFpcmVk 50160
UkVTU0VE 50161
IGFidXNlcw== 50162
VkY= 50163
QVJC 50164
Lk5BTUU= 50165
cmNo 50166
cHJpbWly 50167
X2NvbXBsZXRlZA== 50168
IHBlbm55 50169
Q2hyb21l 50170
KGJlZ2lu 50171
ZXJuZW4= 50172
LWNoZWNrYm94 50173
UGxhaW5PbGREYXRh 50174
IExQQw== 50175
cmFkZQ== 50176
c3Bpcg== 50177
IGNvbmNlaXZlZA== 50178
VGlwcw== 50179
IElvVA== 50180
IEdhbg== 50181
6IGU 50182
IGJpYXNlcw== 50183
IGNvbnN1bHRhbnRz 50184
cGxlZA== 50185
X2h0 50186
YXNzb2NpYXRlZA== 50187
XSwKCg== 50188
IGRlbGlnaHRmdWw= 50189
INGC0LXQug== 50190
SGVsdmV0aWNh 50191
KGxvYWQ= 50192
LWV4cGFuZA== 50193
X1dJREdFVA== 50194
dG9h 50195
IEFrdA== 50196
IG9tbg== 50197
IGNsYXVzZXM= 50198
SW50ZWw= 50199
Ki99Cg== 50200
X3JlZ2lzdHJhdGlvbg== 50201
IG9sZFZhbHVl 50202
IHJlc3RvcmluZw== 50203
IHVucmVhbA== 50204
T1ZFUg== 50205
CQoJCgkK 50206
QVRT 50207
X3Byb2Jl 50208
IGRpdmlzb3I= 50209
LnVwZGF0ZUR5bmFtaWM= 50210
5bmz 50211
UHJvZHVjZXM= 50212
c3RhbXA= 50213
Lmpib3Nz 50214
CXRhc2s= 50215
ISg6 50216
IHBzeWNoaWM= 50217
QGNsYXNz 50218
TWFydGlu 50219
IFBhc3NlZA== 50220
Y2xhcmF0aW9ucw== 50221
aGVs 50222
0LDRhw== 50223
CWNvcHk= 50224
LWJpbg== 50225
emFu 50226
aWdyYW0= 50227
4Ka+4KY= 50228
KHNpZw== 50229
IENhdmFs 50230
XyMj 50231
ICU9 50232
b3V0bGluZWQ= 50233
IEFjaWQ= 50234
IHVucHJlZGljdGFibGU= 50235
LWRhc2hib2FyZA== 50236
SGV4U3RyaW5n 50237
K2M= 50238
LlB1YmxpYw== 50239
4bqp 50240
IGNvbnZleW9y 50241
IEVC 50242
IHNlbGVjdHM= 50243
IGtub2NraW5n 50244
IENlYw== 50245
SUJVVEVT 50246
b3dhxIc= 50247
Z2F0c2J5 50248
KnY= 50249
ZW50cm9weQ== 50250
IGRpc3BhdGNoZWQ= 50251
IGNhbWVs 50252
IFNhdHVybg== 50253
IG92ZXJ3ZWlnaHQ= 50254
KHBob25l 50255
cGFyYWJsZQ== 50256
JUI= 50257
X3ZlY3RvcnM= 50258
IGJyZXdpbmc= 50259
IFRr 50260
IERvd25sb2Fkcw== 50261
IFNhdmVk 50262
LlByaWNl 50263
IGN1cnZlZA== 50264
IFBhcmVudGhvb2Q= 50265
6LY= 50266
LnBubA== 50267
cGxldGVseQ== 50268
LkRheQ== 50269
IGFkdmVydGlzZXJz 50270
IGVqZWM= 50271
IHByemVk 50272
668= 50273
ISc7Cg== 50274
IEt1c2g= 50275
IFRBQg== 50276
IHF1ZXN0cw== 50277
IGNvaW5jaWRlbmNl 50278
dW1taWVz 50279
IEthc2htaXI= 50280
IEV0aGljcw== 50281
X2dyb3d0aA== 50282
IGFrdGl2 50283
IGdyb3VwaW5n 50284
5aKe 50285
X3RydXRo 50286
5ZCs 50287
dG9kb3M= 50288
aXNldA== 50289
VGV4Q29vcmQ= 50290
w6R0dA== 50291
IFp1cg== 50292
cm95cw== 50293
X01BR0lD 50294
IGJyZXdlcnk= 50295
KFN0YXRl 50296
IFNNQUxM 50297
IFBsYW50cw== 50298
aXRiYXJ0 50299
ZWFjaGVy 50300
IEFkZWxhaWRl 50301
THU= 50302
IGZpY2s= 50303
dW5kbGVz 50304
X2xvYWRlZA== 50305
0LjQtQ== 50306
UG9sbA== 50307
cml0aWM= 50308
RUxZ 50309
ICsn 50310
IFByb2Zlc3Npb24= 50311
IHN0YW1wcw== 50312
IFNldw== 50313
c2Nyb2xsVmlldw== 50314
IGNvbW11bmlzdA== 50315
L3Byb2JsZW1z 50316
fQ0KDQoNCg0K 50317
LG8= 50318
IHVkcA== 50319
IG9iZXNl 50320
YXBwcm92ZQ== 50321
YW5jZWxsYXRpb24= 50322
X0dhbWU= 50323
IEhhc2h0YWJsZQ== 50324
YWRhcHRpdmVTdHlsZXM= 50325
IHBvc3Nlc3Nlcw== 50326
Lm1hdGNoZXI= 50327
ZnVuY3Rpb25hbA== 50328
TXJz 50329
CXNhdmU= 50330
IERiVHlwZQ== 50331
IGtlbg== 50332
Z2V0Q29udGV4dA== 50333
IG1hbnM= 50334
KHJlbA== 50335
IEJyb3RoZXJob29k 50336
KWAK 50337
6Kej 50338
LkluZm9ybWF0aW9u 50339
T3V0T2ZSYW5nZUV4Y2VwdGlvbg== 50340
IFNlaw== 50341
Q2Fz 50342
IGJsb2dnZXJz 50343
RWl0aGVy 50344
KCIiIg== 50345
IHBpbmNo 50346
IGNvYXJzZQ== 50347
KXA= 50348
IFB1bHNl 50349
IGxlYXJudA== 50350
IGRlbnRpc3Q= 50351
IG9uY2hhbmdl 50352
IGRpcmVjdGl2ZXM= 50353
KGFjdGlvbnM= 50354
bnlkZXI= 50355
IFNoaXI= 50356
VHJhaXQ= 50357
X2RlcA== 50358
IFBFVA== 50359
IFJFUA== 50360
LkFwcFNldHRpbmdz 50361
Y3VhZG9y 50362
aWRlbmF2 50363
IGVudmk= 50364
IHNsYW1tZWQ= 50365
IFNob290 50366
IGRhdGVGb3JtYXQ= 50367
LmpvZGE= 50368
dmV5cw== 50369
ICkuCgo= 50370
IGNhcmVn 50371
IFBhcmFsbGVs 50372
X3RyYW5zbGF0aW9u 50373
LmZ1bmN0aW9ucw== 50374
Lm9icw== 50375
UnVudGltZUV4Y2VwdGlvbg== 50376
W109 50377
b3ZlcnZpZXc= 50378
IFNjaGw= 50379
IG5vaXN5 50380
IE9uUHJvcGVydHlDaGFuZ2Vk 50381
U2VuZGluZw== 50382
IHVuZmFtaWxpYXI= 50383
VXBvbg== 50384
IFByaW50cw== 50385
LnR5cA== 50386
IGZsZWVpbmc= 50387
CW1vdmU= 50388
KFVu 50389
IHFy 50390
15w= 50391
X2JldGE= 50392
IHNraWVz 50393
CW1l 50394
V05E 50395
IHN0aWNrZXJz 50396
Ymxhcw== 50397
IGluc2VydHM= 50398
IHZlcnNlcw== 50399
IERldw== 50400
IHRhbmdpYmxl 50401
IGhlY2hv 50402
UE9M 50403
IHRlYXJkb3du 50404
b21uaWE= 50405
SUJF 50406
LmNvdmVy 50407
X3N0cmF0ZWd5 50408
Xi0= 50409
c2V0UG9zaXRpb24= 50410
dWFsZQ== 50411
U2lnbmVk 50412
IGlmYWNl 50413
YXNlbGluZQ== 50414
LnNldFRpbWU= 50415
IE1pbmVyYWw= 50416
IEZpZ2h0aW5n 50417
c2tpbnM= 50418
IGRpc2NyaW1pbg== 50419
IGRhbnNr 50420
IFByaW5jZXRvbg== 50421
YWNpc3Q= 50422
ICgpKTsK 50423
dHJhY2tz 50424
aW1vbmlhbA== 50425
YWRlY2ltYWw= 50426
RVBST00= 50427
dWdnbGU= 50428
Lk5vdGlmaWNhdGlvbg== 50429
JG1haWw= 50430
Y2FudGlkYWQ= 50431
IEp1bmc= 50432
IHNlZWtlcnM= 50433
IHBsYXVzaWJsZQ== 50434
dGllcg== 50435
0LXQtg== 50436
IHJhcHBlcg== 50437
IE1hbmE= 50438
IEh0dHBTdGF0dXNDb2Rl 50439
IGJ1cm50 50440
bG9zZXM= 50441
IEZvdG8= 50442
IEpzb25PYmplY3Q= 50443
SW5zdGFncmFt 50444
IHN5c2NhbGw= 50445
IHJlYWxpdGllcw== 50446
IE1BVExBQg== 50447
Ol57Cg== 50448
VEVSTQ== 50449
IENiZA== 50450
IFBhcmFncmFwaA== 50451
IHRyYXbDqXM= 50452
IGNvbnN0cnVjdGluZw== 50453
IHN3YWw= 50454
IHBpZ2U= 50455
TExMTA== 50456
LWV4aXN0aW5n 50457
R2V0cw== 50458
IG1lbHRlZA== 50459
IG1pdGlnYXRl 50460
SGVu 50461
IGht 50462
aW1hcw== 50463
IEFv 50464
IFBlcmV6 50465
IERBTA== 50466
IOuLpA== 50467
IGRpdmlz 50468
U3Rvcnlib2FyZFNlZ3Vl 50469
IE1vZGlmeQ== 50470
IMOcYmVy 50471
X09WRVJSSURF 50472
LnBlbQ== 50473
dW50b3M= 50474
IGVzcGHDsQ== 50475
IHs/ 50476
IFBBWQ== 50477
X2lwdg== 50478
IEZ1cnk= 50479
X18uX18= 50480
ZWxvdw== 50481
LWNlbnRlcmVk 50482
Y2hlY2tz 50483
X1JlZw== 50484
LUphdmFkb2M= 50485
CWxvYWQ= 50486
IExpa2V3aXNl 50487
2KfZhQ== 50488
VU5F 50489
LnNlbQ== 50490
eGNi 50491
IENhdmU= 50492
X3NsZWVw 50493
IHNpbGVudGx5 50494
IEV4dHJlbWU= 50495
LlRvVXBwZXI= 50496
CUNIRUNL 50497
IGN1ZQ== 50498
IFFCeXRlQXJyYXk= 50499
IGNvcnJ1cHRlZA== 50500
IETDqQ== 50501
IGltcGVk 50502
R2V0TmFtZQ== 50503
IGluYWNjdXJhdGU= 50504
IHNvYmVy 50505
0LXQtQ== 50506
IGJhcmNvZGU= 50507
LS0pewo= 50508
aW5raQ== 50509
IMOpcA== 50510
IGRyaQ== 50511
IEFMVA== 50512
Pj4+Pj4+Pj4= 50513
b250YQ== 50514
W0w= 50515
IGludGVyZXM= 50516
dmVydGluZw== 50517
IGRpYWdub3N0aWNz 50518
cGRldg== 50519
6Kk= 50520
IEludGVncmF0ZWQ= 50521
KS4n 50522
X2dj 50523
JHRleHQ= 50524
LmdhbWVz 50525
IFRlcnJh 50526
J1Jl 50527
LnRyYW5zZmVy 50528
X0ZJRk8= 50529
Z2V0TW9kZWw= 50530
IGJsYW5k 50531
IENvbGVtYW4= 50532
IHByaW1lcw== 50533
IOaI 50534
IGNyb3NzZXM= 50535
bms= 50536
R0lORw== 50537
ICde 50538
IEJsb2I= 50539
IGludGVyY291cnNl 50540
IEJsdmQ= 50541
IHdlaWdocw== 50542
X3JlZ3VsYXI= 50543
IFBlcnRo 50544
IHNlcGFyYXRpbmc= 50545
IGJpbGxlZA== 50546
LnRhYkNvbnRyb2w= 50547
IHB1cHBldA== 50548
IHV0aWxpemF0aW9u 50549
IOKWoA== 50550
IHN1Y2Nlcw== 50551
IGxhbXBz 50552
X3Byb2o= 50553
RXJpYw== 50554
IHJlbm92YXRpb24= 50555
IEZhbWlsaWVz 50556
IEJpdHM= 50557
cGFydGlhbHM= 50558
LU1lbg== 50559
c29sdXRpb24= 50560
IGR3YXJm 50561
LklOVEVHRVI= 50562
IExPQ0s= 50563
LmN0 50564
IGV4Y2VycHQ= 50565
IFBpeA== 50566
IEZpcnN0TmFtZQ== 50567
QU5URUQ= 50568
IEFkbWly 50569
LWhlbHA= 50570
UHJpb3I= 50571
IEFsaWdu 50572
LklOU1RBTkNF 50573
TGluZUVkaXQ= 50574
KCcvOg== 50575
IGluZXQ= 50576
b2R1cw== 50577
LnBrbA== 50578
IEtZ 50579
dXBlcnQ= 50580
IG5lcnZlcw== 50581
X2dyYWRpZW50 50582
fScsJw== 50583
X3VucmVm 50584
IHNhdHVyYXRlZA== 50585
IENvbm5lY3RlZA== 50586
IEZO 50587
RVhJVA== 50588
IHRlbGVwb3J0 50589
IGF2YWl0 50590
UGFnZVJvdXRl 50591
IGRpdm9yY2Vk 50592
KGxhbmc= 50593
ZnN0 50594
IFR5cg== 50595
IG1lc3Nlbmdlcg== 50596
aWZzdHJlYW0= 50597
WFM= 50598
IEJhbmtpbmc= 50599
IGluZmVjdGlvdXM= 50600
IE1vbnM= 50601
X0xPT1A= 50602
IHp1csO8Y2s= 50603
IG9idGVuZXI= 50604
L3JlcG9z 50605
VmVs 50606
YWNybw== 50607
IHVzZXJSZXBvc2l0b3J5 50608
c3R5bGVUeXBl 50609
IFNSQw== 50610
Vk1MSU5VWA== 50611
cmVjdXJzaXZl 50612
L2Jhcg== 50613
X2NoaXA= 50614
b21pbmF0ZWQ= 50615
IE5pdA== 50616
4oCUdG8= 50617
IEJ1ZGRo 50618
0L7QvNC10YA= 50619
IE1BRw== 50620
IENIRQ== 50621
X2Rlbg== 50622
LnJhaXNlcw== 50623
X2RlZ3JlZQ== 50624
IHB1bXBraW4= 50625
X3RlbXBsYXRlcw== 50626
X01FRElB 50627
IFRpbWVsaW5l 50628
IGJvdHM= 50629
T2JqZWN0VHlwZQ== 50630
IGJ1eXM= 50631
LnBvc3Rz 50632
Q0FM 50633
d2FpdGluZw== 50634
IERhbmllbHM= 50635
IGRhYmVp 50636
IFNpZ21h 50637
aWxvcg== 50638
aWdlbA== 50639
LFc= 50640
QURT 50641
KHBhbmVs 50642
7LK0 50643
aXRhdGluZw== 50644
LnBhbGV0dGU= 50645
IG1vc3F1aXRv 50646
IHRlZ28= 50647
KHBhcnNlSW50 50648
IGRlc3B1w6lz 50649
cHJvbWlzZQ== 50650
IHdpag== 50651
dHlwZXNjcmlwdA== 50652
IFR2 50653
X0lERU5USUZJRVI= 50654
KS4KCgo= 50655
X2ZsYXQ= 50656
aXRzdQ== 50657
VVNS 50658
ZXhwZXJpZW5jZQ== 50659
LWZpdA== 50660
cGhpbng= 50661
X3RocmVzaA== 50662
IGlkZWFsbHk= 50663
IEZyZWVtYW4= 50664
LERC 50665
X3J3 50666
562J 50667
VWI= 50668
X3N0YXRpc3RpY3M= 50669
PSIiPjw= 50670
IGNob3Jl 50671
IHlvcms= 50672
aW5zdGFsbGVk 50673
QWRkaXRpb25hbGx5 50674
IHBzdG10 50675
eWxrbw== 50676
OjoK 50677
Rm9yZXN0 50678
IGhlYWRzZXQ= 50679
IGdhbGxvbg== 50680
0YDQtdC8 50681
IHdpdGhkcmF3bg== 50682
IENhbmRpZGF0ZQ== 50683
IG1lbHRpbmc= 50684
IGZyZWV6ZXI= 50685
IGhs 50686
X0hFTFA= 50687
bWltZQ== 50688
KC8q 50689
IHRoaXJzdA== 50690
JHJldHVybg== 50691
bWVtYmVyb2Y= 50692
0LXQsQ== 50693
IEh0dHBTZXJ2bGV0UmVxdWVzdA== 50694
KG9i 50695
X1Jlc3VsdA== 50696
IGFzc2VydGVk 50697
IGZ1bGZpbGxpbmc= 50698
IHN0cmV0Y2hlcw== 50699
cGFyYXRlZA== 50700
LWZ1bmRlZA== 50701
IOWb 50702
aW5nbGVz 50703
X2Nh 50704
LmNvbmRpdGlvbg== 50705
IERpc3BsYXlz 50706
IG9yYW5n 50707
IENSRQ== 50708
IGdsQmluZA== 50709
IFNlbGVjdG9y 50710
L3R5cGU= 50711
IEFsZXhh 50712
Y2hlZHVsZXM= 50713
IFBlbmluc3VsYQ== 50714
IHBhcml0eQ== 50715
CWRlc3Q= 50716
IERvb3Jz 50717
DQoJDQo= 50718
X2RpbWVuc2lvbg== 50719
IGFsb2Fk 50720
LlN0b3JlZFByb2NlZHVyZQ== 50721
KHBhcmVu 50722
IEJ1cmtl 50723
JyldCg== 50724
LWVuZ2luZQ== 50725
IHF1aXI= 50726
IEh5YnJpZA== 50727
IERvZQ== 50728
IG91dGxpbmVz 50729
IFRyZW5kcw== 50730
X05W 50731
cGVyaW1lbnRz 50732
IEhpbg== 50733
Pycs 50734
CVRleHQ= 50735
RlVM 50736
IHNtZWxscw== 50737
IHNsaWNr 50738
IG1pc2VyYWJsZQ== 50739
IEFycmF5QWRhcHRlcg== 50740
IHBhcmFtU3RyaW5n 50741
SG9t 50742
X2xpdGVyYWxz 50743
dXN1YXJpb3M= 50744
IHByb21wdGluZw== 50745
X2xhenk= 50746
IEFjdGl2YXRpb24= 50747
X29j 50748
V2Vhaw== 50749
IGFuZWNk 50750
IFVDTEE= 50751
PXJl 50752
aXNzZW1lbnQ= 50753
IEVzY29ydHM= 50754
RXhjZWxsZW50 50755
IFBhdXNl 50756
IHJlcG9zaXRvcmllcw== 50757
VE9S 50758
YXJpYXRl 50759
X2lzbw== 50760
dXBkYXRlcw== 50761
aGFsYg== 50762
dWRpYW50ZQ== 50763
66Gd 50764
IG5haXZl 50765
IFBlZw== 50766
IExvdW5nZQ== 50767
QVJHSU4= 50768
KGJpbg== 50769
T25DbGlja0xpc3RlbmVy 50770
IEZBSUxFRA== 50771
IGxpdGU= 50772
IGR6aWU= 50773
IExpdGVyYWw= 50774
aXZvcg== 50775
ZmNudGw= 50776
IGVhdHM= 50777
IHFlZA== 50778
VW5sb2Nr 50779
cmlkaW5n 50780
dW5kYWk= 50781
PU0= 50782
QVRURVI= 50783
Q29uZmlndXJlQXdhaXQ= 50784
aWNpYXM= 50785
dXN0b21lZA== 50786
IHN1Y2Nlc3Npb24= 50787
ZW5kVGltZQ== 50788
IEp1cGl0ZXI= 50789
IGp1ZGdpbmc= 50790
ZHJhdGlvbg== 50791
X2RvY3M= 50792
Lm1v 50793
IGVkdWNhdG9ycw== 50794
IFZpbmU= 50795
Q29uZA== 50796
W291dA== 50797
cWI= 50798
XFZhbGlkYXRvcg== 50799
IG1lYW5pbmdz 50800
IHByZXNlbnRseQ== 50801
IGRpdmlkaW5n 50802
b3R0ZW5oYW0= 50803
YXNjdWxhcg== 50804
IHRyYWlsZXJz 50805
IENMT1NF 50806
0LDQvNC4 50807
4oCZYWk= 50808
IEdhaW4= 50809
d29y 50810
IHBsYW5uZXI= 50811
IGRpc3RyaWJ1dGluZw== 50812
dmF0 50813
bW9udGhz 50814
eGxhYmVs 50815
SEY= 50816
VmlvbA== 50817
LkJBU0VMSU5F 50818
0LXRgtGB0Y8= 50819
IFJvdGF0ZQ== 50820
IHR4bg== 50821
OmJvbGQ= 50822
IGJsb3Nz 50823
Rm9yZ2VyeQ== 50824
KGVtYmVk 50825
IGpha28= 50826
c3ByaW50Zg== 50827
dGhlaXI= 50828
IGV4aGliaXRz 50829
LXN0YXRpYw== 50830
aGVjeQ== 50831
Z2V0QWN0aXZlU2hlZXQ= 50832
LmNsaWVudHM= 50833
44GN 50834
X2hpZGU= 50835
W3dvcmQ= 50836
Q2I= 50837
YWRkSXRlbQ== 50838
YXhl 50839
X3JhZGlv 50840
YWxpb24= 50841
bW9kaWZpZXI= 50842
IHNhdHVyYXRpb24= 50843
IGRlbm9t 50844
X3BpeGVscw== 50845
bWVzcw== 50846
KGZs 50847
YXRpZg== 50848
IHNlY3M= 50849
IHByb3N0aXR1dGlvbg== 50850
IGdyYW5kY2hpbGRyZW4= 50851
IHBhcmFkaXNl 50852
IEZlbGQ= 50853
X0JJTkFSWQ== 50854
aXRvdXM= 50855
4LmE 50856
IGZsYXNoaW5n 50857
LXNpZGVk 50858
IGNvbnRyYWRpY3Rpb24= 50859
LyoKCg== 50860
eWxhYmVs 50861
IFRldA== 50862
IGFkbWlyZQ== 50863
cmVzbw== 50864
IGxldHo= 50865
IFNFQVJDSA== 50866
c2xvdHM= 50867
IFJld2FyZHM= 50868
IEhvZw== 50869
IE5TRGF0YQ== 50870
c3Rhc2g= 50871
RmFsbA== 50872
IEFtZXI= 50873
TGluZWFyTGF5b3V0 50874
L3Bob3Rvcw== 50875
IGZlYXRoZXI= 50876
IHwNCg== 50877
RG93bmxvYWRz 50878
LlN0YXJ0c1dpdGg= 50879
IC8vIw== 50880
aW5lVHJhbnNmb3Jt 50881
IGFmZmlk 50882
VnRibA== 50883
IFJvZ3Vl 50884
c2NyaWJlZA== 50885
IGZhdWM= 50886
IE1vbnJvZQ== 50887
IGRlY2xhcmVz 50888
bW9kZXJu 50889
cmVvbg== 50890
YXliZQ== 50891
UEFTUw== 50892
ZmVycw== 50893
X01VTFRJ 50894
IE1hdGhlbWF0aWNz 50895
IHN1ZGFo 50896
X0FUVEFDSA== 50897
IG51bWJlcldpdGg= 50898
IFNvbG9tb24= 50899
amlu 50900
b2dyYWZpYQ== 50901
w7Zs 50902
X2Rlc2lnbg== 50903
Y3VsYXRlZA== 50904
IEx1bmE= 50905
aWVzeg== 50906
ID0+Jw== 50907
IHJldmVsYXRpb25z 50908
QWxvbmc= 50909
KGVk 50910
IEZpbGVuYW1l 50911
IHlsYWJlbA== 50912
U2VjdXJl 50913
IGJ1c2Nh 50914
YWdub3Npcw== 50915
X1JFQ0U= 50916
IG92ZXJsYXBwaW5n 50917
RXh0ZW50 50918
IGFudGljaXBhdGlvbg== 50919
Q2hlY2tz 50920
IEFMU08= 50921
b3Jj 50922
aWxpbmd1YWw= 50923
aXRhdGlvbmFs 50924
IGFkdmFuY2VtZW50 50925
b3Vybw== 50926
IFByZWRpY2F0ZQ== 50927
5b6X 50928
ZXJpYQ== 50929
IFBpZXJjZQ== 50930
b3Jpbw== 50931
IG1lcml0cw== 50932
IHBlYW51dA== 50933
LlBhY2thZ2U= 50934
IENvbmR1Y3Q= 50935
X1NFTlNPUg== 50936
IGJvaWxpbmc= 50937
IGludHJh 50938
IElHTg== 50939
IEZ1cg== 50940
LlJlZnJlc2g= 50941
IFJlYWNo 50942
X2RlY29kZXI= 50943
LkV4cA== 50944
INGC0LDQug== 50945
cGlsbA== 50946
LFE= 50947
IEdyaWxs 50948
IHBvcHBpbmc= 50949
LkFn 50950
IHByb3llY3Rv 50951
IG1pbGVhZ2U= 50952
IGVjb2xvZ2ljYWw= 50953
XV0pOwo= 50954
IMKt 50955
c3VicGxvdA== 50956
YWNhZA== 50957
IFRyeWluZw== 50958
cmVjaXBlcw== 50959
JGNyaXRlcmlh 50960
IFBlcnNpYW4= 50961
LWJvdW5k 50962
TUFTSw== 50963
IEdlc3R1cmU= 50964
IGtr 50965
IFBWQw== 50966
IHByb2hpYml0aW9u 50967
IGNvbWFuZG8= 50968
IExPT0s= 50969
U2hvcHBpbmc= 50970
IGRpc3RvcnRpb24= 50971
PEJvb2xlYW4= 50972
LkdldExlbmd0aA== 50973
dW1wdA== 50974
XFByb2R1Y3Q= 50975
ZWxsZXJ5 50976
IGZpcmV3YWxs 50977
Zm9ybWF0dGVk 50978
LnJlZGlz 50979
IGVzYQ== 50980
IFJob2Rl 50981
U29t 50982
Lm5vbg== 50983
ICcpLg== 50984
IGdldFZpZXc= 50985
4bqhbg== 50986
cHJ1cw== 50987
TWF0dGhldw== 50988
IHNpYQ== 50989
IEZvcnM= 50990
R1BV 50991
aWVudHJhcw== 50992
X0lOU1Q= 50993
IG9sYXJhaw== 50994
IGltcG9ydGluZw== 50995
VENQ 50996
LyIpOwo= 50997
ZWl0aGVy 50998
IGZyZXNobHk= 50999
Y2FzY2FkZQ== 51000
KGNoYXJhY3Rlcg== 51001
IEplZXA= 51002
b3RpY3M= 51003
X1VUSUw= 51004
Llh0cmFQcmludGluZw== 51005
LmZpcnN0Q2hpbGQ= 51006
IEV4Y2VsbA== 51007
IGR2ZA== 51008
IHRhbGxlcg== 51009
IHJhcw== 51010
eXBhc3M= 51011
IGFzc2lnbnM= 51012
IGdyaWV2 51013
LW1vcmU= 51014
SkQ= 51015
IEJ1cm5z 51016
Jz4NCg== 51017
LkRlcGVuZGVuY3k= 51018
LlF1ZXJ5U3RyaW5n 51019
Lk93bmVy 51020
IGV4cGlyeQ== 51021
VGh1 51022
KFZlYw== 51023
IGhhemFyZG91cw== 51024
IHJwbQ== 51025
QVBPTg== 51026
IGFkZFRhcmdldA== 51027
c3ZpbGxl 51028
cE5ldA== 51029
IEltZw== 51030
IFRJTUVS 51031
LkFuaW1hdGlvbg== 51032
IGJlaw== 51033
IGFzc29ydA== 51034
IGxlYmlo 51035
IGJvZHlQYXJzZXI= 51036
IHZpYnJhdGluZw== 51037
SURM 51038
IGJ1dHRlcmtuaWZl 51039
aW50ZXJz 51040
IHBlcnN1YWRl 51041
IExHQlRR 51042
6Is= 51043
LnNvZnQ= 51044
IGJlYW1z 51045
X3N1cg== 51046
LkRlZg== 51047
IGxhYnM= 51048
CXBsdA== 51049
IHNraW5z 51050
IHRyYW5zZmVycmluZw== 51051
IGltYWdpbmFyeQ== 51052
X0VuZA== 51053
O2JhY2tncm91bmQ= 51054
IGxhcHM= 51055
X0NPTU1FTlQ= 51056
KFNETA== 51057
b25kcw== 51058
LlJlY29yZA== 51059
IEltcGxlbWVudHM= 51060
X3RpY2tz 51061
KCkpKQoK 51062
IGFyb3Nl 51063
XT8= 51064
IE1w 51065
IElDb21tYW5k 51066
IHNjdWxwdHVyZQ== 51067
IGNvbnRyYWN0ZWQ= 51068
PEhUTUw= 51069
IGNhbGVuZA== 51070
YXR5 51071
L1N1Yg== 51072
IGt2aW5u 51073
X0lHTk9SRQ== 51074
IFNoYW5l 51075
TUxT 51076
IHN0aW11bGF0ZQ== 51077
UGFydGl0aW9u 51078
IG11bg== 51079
w7Nt 51080
ZXJhbGE= 51081
LWFjY291bnQ= 51082
LkJpbmFyeQ== 51083
Y8Op 51084
IHNlaXpl 51085
Y29ubmVjdGlvbnM= 51086
IAogICAgICAgIAo= 51087
IERpYWdub3N0aWM= 51088
VklTSUJMRQ== 51089
IFJ1bnM= 51090
IGltcHJlc3Npb25z 51091
c3VpdGU= 51092
b2JsZQ== 51093
fi0= 51094
YWt1a2Fu 51095
PFBlcnNvbg== 51096
IE5vcw== 51097
IEd1aQ== 51098
LndhaXRGb3I= 51099
UkVTRVQ= 51100
IHBvc3Rwb24= 51101
RGlzY292ZXI= 51102
YXJyaXNvbg== 51103
c2hhdw== 51104
Ymxvb2Q= 51105
QUpPUg== 51106
5pu05paw 51107
IE11c2U= 51108
5pS2 51109
IHJldGFpbmluZw== 51110
b3R0ZQ== 51111
IG1vc3F1ZQ== 51112
IFNuZQ== 51113
IHN0YW5kYXJkaXplZA== 51114
IG1haW5sYW5k 51115
X3RocmVl 51116
dW5nZW9ucw== 51117
Z2V0RG9jdHJpbmU= 51118
IHdoYWxl 51119
IGFnZw== 51120
IFBvcnNjaGU= 51121
bm93bGVk 51122
bGF0ZW50 51123
IFJlbGF0aW9u 51124
IC8vJw== 51125
IHNodXR0aW5n 51126
IFJlbWl4 51127
X2Nvdg== 51128
IHNhaWxpbmc= 51129
IHZvd2Vk 51130
IHBvdHM= 51131
b3V0dQ== 51132
IGhhaXJ5 51133
Y2FzdHM= 51134
UmVsb2Fk 51135
IHJlY29ubmVjdA== 51136
dGVyYQ== 51137
LmNoaWxkTm9kZXM= 51138
IFJhY2s= 51139
IGN1cnJlbnRJbmRleA== 51140
IGFsbGVu 51141
IOeUqOaItw== 51142
IEN1YnM= 51143
W1g= 51144
X1NFUQ== 51145
X1JFTU9WRQ== 51146
LmdldEFjdGlvbg== 51147
KC9e 51148
ZXJyYXI= 51149
IGV0aGVy 51150
Y3VydmU= 51151
IHNsYXA= 51152
IHVvbQ== 51153
T3RoZXJz 51154
IGVuZ3I= 51155
RGlzcG9zaXRpb24= 51156
IHN0YWdlZA== 51157
RXll 51158
IEF1eA== 51159
YXV0aGVudGljYXRl 51160
ICQ/ 51161
IEFuZHJlYXM= 51162
IHNldHc= 51163
LkFydA== 51164
IGZvcmVjYXN0cw== 51165
IGF1bnQ= 51166
LW1pZGRsZQ== 51167
IG1pc2Q= 51168
ZGVzaw== 51169
IGVzY29ydGU= 51170
IENhc2E= 51171
cm9waWNhbA== 51172
IGV4ZW1wbGU= 51173
cGxhbmV0 51174
KFVJTlQ= 51175
IHdoaXA= 51176
IFBDQg== 51177
Y2xpZGVhbg== 51178
PSJc 51179
IG94aWRl 51180
IHN1Y2NlZWRz 51181
ZGVyaXZlZA== 51182
IEVjb25vbQ== 51183
X2Nvb3JkaW5hdGVz 51184
aXJhcw== 51185
RHJhZnQ= 51186
IHZpc3VhbGl6ZQ== 51187
QnJpYW4= 51188
X0FTU1VNRQ== 51189
IE9iamVjdElk 51190
IHRyYWluZXJz 51191
X0ZPUkNF 51192
IGNvbnNvbGVz 51193
LXByb2Nlc3M= 51194
bGljaGVy 51195
IFNpbW1vbnM= 51196
VGFraW5n 51197
IENsYWltcw== 51198
IGRpZmbDqXJlbnQ= 51199
QWN0aXZpdHlSZXN1bHQ= 51200
IHNucw== 51201
6YCJ5os= 51202
IENydXM= 51203
IGxsYW0= 51204
cmFi 51205
IEpvYW4= 51206
QUFB 51207
CWZpbHRlcg== 51208
aXNob3Bz 51209
Z2V0dGluZw== 51210
4LU= 51211
IHF1YW50bw== 51212
UGFzdA== 51213
b3ZpY2g= 51214
IGluanVzdGljZQ== 51215
IEZMT0FU 51216
IGFscmlnaHQ= 51217
XERC 51218
KEdhbWVPYmplY3Q= 51219
dWlzaA== 51220
KGJvdA== 51221
IGdhbGxvbnM= 51222
IFLDqQ== 51223
IFNhaWQ= 51224
IFNURE1FVEhPRENBTExUWVBF 51225
YWlzaW5n 51226
X3Byb2Nlc3Nvcg== 51227
ZWxsaWRvcw== 51228
dGVyZGFt 51229
IEJlYW0= 51230
VGV4dEFyZWE= 51231
IHJldG9ybm8= 51232
Lk1ha2U= 51233
ICQoIjw= 51234
IGxvY2tkb3du 51235
IHJlbWVkaWVz 51236
IHZlZWw= 51237
eGVl 51238
ZG9jdHlwZQ== 51239
Rmls 51240
IEV4cGFuZA== 51241
IGVtcGxveXM= 51242
IHNlc3Npb25TdG9yYWdl 51243
UGhw 51244
UHVibGlzaA== 51245
IHJldGFs 51246
ZmFicw== 51247
eW5hbWljcw== 51248
IHRvc3NlZA== 51249
IG51bWJlck9mUm93c0luU2VjdGlvbg== 51250
eHBhdGg= 51251
XG1vZHVsZXM= 51252
IGRpc2FzdHI= 51253
IE1VTFQ= 51254
Lk1lc2g= 51255
LXN0YWdl 51256
IHNkZg== 51257
aXR1bmc= 51258
dWdlcw== 51259
ID8+Ij48Lw== 51260
X2luZGV4ZXM= 51261
IHZhbHVhdGlvbg== 51262
IGxpZmVsb25n 51263
IGV4cGVkaXRpb24= 51264
KFlpaQ== 51265
IHBhaW5z 51266
IFBSSQ== 51267
IE1peGVk 51268
IENoYW5naW5n 51269
R2VybWFueQ== 51270
Y29tbXVuaWNhdGlvbg== 51271
Lm9yZ2Fu 51272
IE1hcmF0aG9u 51273
Z2V0UGF0aA== 51274
IEFjY3VyYWN5 51275
IEdsb2JhbHM= 51276
Jyl9fTwv 51277
IE9XTkVS 51278
4oCm4oCd 51279
IHN0YWJiZWQ= 51280
IHNjaGl6b3BocmVu 51281
IEZu 51282
IENPUkU= 51283
IERhdGFSb3c= 51284
IExURA== 51285
IG15dGhz 51286
IGZhbW91c2x5 51287
fCwK 51288
IFNlb3Vs 51289
U2ly 51290
IEJlcms= 51291
UmVnRXhw 51292
LmdldFJvdw== 51293
IERlY29kZQ== 51294
Uk4= 51295
IG1hbmc= 51296
IGVtcGxveWluZw== 51297
X25vbWJyZQ== 51298
PFRhc2s= 51299
IEd1eXM= 51300
IEFydGlrZWw= 51301
QmVycnk= 51302
enVyZQ== 51303
IHZhbGV1cg== 51304
aGl0cw== 51305
IGx1Y3JhdGl2ZQ== 51306
IGluZm9ybWF0 51307
Q2xpbnRvbg== 51308
IHRlcw== 51309
IENlcnRpZmljYXRpb24= 51310
X3dz 51311
IG9mZmVuY2Vz 51312
ZWJyYQ== 51313
IEF4aW9z 51314
cmVzdGFydA== 51315
TE4= 51316
LkVuY29kZQ== 51317
bWl1bQ== 51318
IEZlYXR1cmVk 51319
0YjQuNCx0LrQsA== 51320
IERlcHQ= 51321
OyYj 51322
IE15ZXJz 51323
CXRyYW5zZm9ybQ== 51324
VGV4YXM= 51325
16g= 51326
IFlvcmtzaGlyZQ== 51327
bG5hbWU= 51328
QnJl 51329
44GT44Gu 51330
IHNjZW5lcnk= 51331
IGbDvGg= 51332
CQkJCSAgICAgICA= 51333
IERvb20= 51334
IEFETUlO 51335
KGVz 51336
INC80LDRgdGB0LjQsg== 51337
X2FzY2lp 51338
L0RhdGE= 51339
bGVzaG9vdGluZw== 51340
QmFu 51341
IG1lbW9pcg== 51342
INmG 51343
IEF1c3M= 51344
KXBhcmVu 51345
IGd1aWRpbmc= 51346
IGJheg== 51347
w7h5 51348
QURN 51349
IGRtYQ== 51350
LlF1ZXVl 51351
IFN1cHBsaWVz 51352
IE1jRA== 51353
IEFnZW50cw== 51354
X2Ji 51355
c2xhc2g= 51356
IGhhc2hlcw== 51357
IGNyYW5r 51358
IFJhZw== 51359
IGF1dG9ub215 51360
w610dWxv 51361
IHJlY3Vyc2lvbg== 51362
IENyYXp5 51363
X3RyYWNrZXI= 51364
IE1i 51365
X3BoeQ== 51366
Zm9vYmFy 51367
CXNwZWVk 51368
IGNhbXBvcw== 51369
IG1vdWxk 51370
IGNoYXJpdGllcw== 51371
SEVJR0hU 51372
IGVhdXRv 51373
X3NvbHV0aW9u 51374
IERH 51375
bWFydmlu 51376
WWVzdGVyZGF5 51377
IEJlY29tZQ== 51378
PGxs 51379
b3Jpcw== 51380
W25leHQ= 51381
IGluY3VtYmVudA== 51382
IER1cA== 51383
CW92ZXJyaWRl 51384
5a6J 51385
CWNmZw== 51386
IHPDtg== 51387
IGRlc2U= 51388
LWRp 51389
IG9udHZhbmdzdA== 51390
IGRlY2lzaXZl 51391
5Lu3 51392
X2tlZXA= 51393
KERhdGFiYXNl 51394
Xy8= 51395
IENMTA== 51396
LW1ldGhvZA== 51397
CVBvaW50 51398
IEJ5dGVCdWZmZXI= 51399
IHRyYWNlZA== 51400
YWRkVG8= 51401
7IS47JqU 51402
YW55YWs= 51403
IGVtcHJlc2Fz 51404
KHJlcG9zaXRvcnk= 51405
LmNyZWF0ZVN0YXRlbWVudA== 51406
IGVsYQ== 51407
Rm9yZ2VyeVRva2Vu 51408
IGlzZW1wdHk= 51409
YXNpbg== 51410
IExvb2t1cA== 51411
0LXQvdCw 51412
IHZpb2xhdGVz 51413
IFNtYXJ0eQ== 51414
IHphaw== 51415
KCQu 51416
U0hPVw== 51417
INCi 51418
YXJ1cw== 51419
KFRFU1Q= 51420
cGFja2Vk 51421
IGhpc3Rvcmlh 51422
IGNhbmNlcnM= 51423
IEtyZW1saW4= 51424
UmVkdWNl 51425
L2hvdw== 51426
IMSQ 51427
VElUTEU= 51428
LmxvY2FsUG9zaXRpb24= 51429
bGlhYmxl 51430
IOesrA== 51431
IGZyYW5jYWlz 51432
CWhhc2g= 51433
IGluaWNpbw== 51434
IENyYXNo 51435
IHsu 51436
IGNsb2Nrcw== 51437
ZHVjdG9yeQ== 51438
IFB2 51439
6528 51440
IGRvaXM= 51441
XC0= 51442
IGphYXI= 51443
IE1heWE= 51444
bW96aWxsYQ== 51445
CXJlc291cmNl 51446
ISEK 51447
YXlzY2FsZQ== 51448
ICctJyw= 51449
5Y+W5raI 51450
IHN0YWxl 51451
Q29ybmVy 51452
w6hsZQ== 51453
aXRpdmVz 51454
emFz 51455
aWNvcm4= 51456
LkV4cHJlc3Npb24= 51457
w7N0 51458
QXBwbGljYXRpb25z 51459
UmVzdHI= 51460
X0luZGV4 51461
jbDsnbTthLA= 51462
IEpGcmFtZQ== 51463
c2l4 51464
X0lNRw== 51465
6JeP 51466
IE51bWVyaWM= 51467
IHdpcms= 51468
X1NVTQ== 51469
PERhdGVUaW1l 51470
IHB5bGludA== 51471
IGxhbWVudA== 51472
IFBvc2U= 51473
X2VudHJvcHk= 51474
IGVuY291cmFnZW1lbnQ= 51475
IGxhaW4= 51476
5Yib5bu6 51477
LWZy 51478
IGNvcnJlY3Rpb25z 51479
cGhhcw== 51480
dXVy 51481
YXRlZ29yaWFz 51482
IGNhdGFseXN0 51483
LmFsdA== 51484
IEZlcm5hbmRv 51485
LkRhdGFHcmlkVmlld0NlbGxTdHlsZQ== 51486
IGhlcmJhbA== 51487
IFJH 51488
U1RFUA== 51489
SUZu 51490
IFRvbmc= 51491
xb5l 51492
IElOQ0xVREU= 51493
IGhj 51494
dHJhY2tlcg== 51495
CVN0cmluZ0J1aWxkZXI= 51496
IERlc3Rpbnk= 51497
IHNvcGhvbW9yZQ== 51498
IERlZA== 51499
IFBBUkE= 51500
aXpvbnRhbGx5 51501
LWNoYW5nZQ== 51502
ZW5kaWQ= 51503
6YCJ5oup 51504
aWprZQ== 51505
IEF0aGxldGlj 51506
YmFp 51507
Z2V0UG9zaXRpb24= 51508
Lm5hbWVzcGFjZQ== 51509
6K6i5Y2V 51510
UkFDVA== 51511
IHJlbGlldmVk 51512
IHBvdXJpbmc= 51513
IGl5 51514
cm92ZQ== 51515
IGFkb2xlc2NlbnRz 51516
IGF3ZQ== 51517
cmVhcw== 51518
QW50aUZvcmdlcnlUb2tlbg== 51519
cm93bmluZw== 51520
IFVuY2xl 51521
LkNvbm4= 51522
IE1lZGlhVHlwZQ== 51523
Lm9yYWNsZQ== 51524
SU5URVJOQUw= 51525
LGFuZA== 51526
IGZhdXg= 51527
aXBtYXA= 51528
JG1vZGVs 51529
IEdlb2Zm 51530
X0FYSVM= 51531
KCgpKQo= 51532
IG5lZ2xlY3RlZA== 51533
IHF1YXJ0ZXJseQ== 51534
IGRpZXNlbg== 51535
IGRyYWdvbnM= 51536
TmlnaHQ= 51537
L1dlYg== 51538
PFZlYw== 51539
CSAgICAgICAgICAgICAgICAgICAgICAg 51540
IE9icw== 51541
YmRk 51542
IGhlaXI= 51543
LWFuZ3VsYXI= 51544
TWVudVN0cmlw 51545
ICciPic= 51546
a2luc29u 51547
INC60L7Quw== 51548
b2duaXRpdmU= 51549
X2xp 51550
IGltbWluZW50 51551
IGFmZmluaXR5 51552
LnNpZ25hbA== 51553
IG5vdGNo 51554
IFN0ZWVsZXJz 51555
bWF4bGVuZ3Ro 51556
S0s= 51557
IEV1Z2VuZQ== 51558
X1BXTQ== 51559
cm9p 51560
IOKXjw== 51561
IEhhbWJ1cmc= 51562
Lk11c3Q= 51563
IGF4ZQ== 51564
ZW5lZg== 51565
IGFtYml0aW9ucw== 51566
IFNwZWNpZXM= 51567
IFN0cmVzcw== 51568
IGF3aGlsZQ== 51569
INCx0YPQtA== 51570
IHdpdGhzdGFuZA== 51571
IERlY29kZXI= 51572
X2ludmVudG9yeQ== 51573
IHsNDQo= 51574
IHRndA== 51575
IHJhaWxyb2Fk 51576
V0FTSElOR1RPTg== 51577
IG5lZ290aWF0ZWQ= 51578
TlNU 51579
LXBob25l 51580
LFU= 51581
IGV4ZXJjaXNpbmc= 51582
4bul 51583
X1BJWEVM 51584
YXZvcnM= 51585
aXRlcmF0ZWQ= 51586
IHZhbXBpcmU= 51587
YWRhbA== 51588
SW5ncmVzZQ== 51589
IHVuZw== 51590
amVjdGl2ZQ== 51591
LmNlbGxz 51592
IG5hbm8= 51593
IG1hcmtkb3du 51594
X1JVTEU= 51595
KGV2ZW50cw== 51596
IGx1Z2dhZ2U= 51597
TUVTU0FHRQ== 51598
aWdrZWl0 51599
JGNvdW50 51600
QXR0cmlidXRlTmFtZQ== 51601
SUdJTkFM 51602
X0VudA== 51603
IEJG 51604
IENPTU1FTlQ= 51605
X2luaQ== 51606
IEV1cm9wZWFucw== 51607
IEJlbGxl 51608
5ZG9 51609
KVsn 51610
5bqU 51611
IFVzZWZ1bA== 51612
LnJlZmVyZW5jZQ== 51613
KCkiLA== 51614
X2dyYWRl 51615
IEthdw== 51616
IHNlbnRlbmNpbmc= 51617
IHNvY2lhbGlzbQ== 51618
bW9uc3Rlcg== 51619
X0xBWUVS 51620
IGRlZXBlc3Q= 51621
d2s= 51622
IE5vaXNl 51623
IyMjCgo= 51624
IHByw6lj 51625
b3RsZQ== 51626
0YLQtQ== 51627
YXVm 51628
aWJhbA== 51629
IGNvbnF1ZXI= 51630
PkVtYWls 51631
IGFtYnVsYW5jZQ== 51632
T0FE 51633
ICgiJQ== 51634
IEZJ 51635
LmZpeHR1cmU= 51636
IHRlcnNl 51637
ICAgIAkJCQk= 51638
IHNhbmN0dWFyeQ== 51639
dWdp 51640
IENvbXBhcmF0b3I= 51641
RGVmaW5pdGlvbnM= 51642
IGFzdGhtYQ== 51643
IGxhY3Q= 51644
IGhhcmR3b29k 51645
LmNsb2Nr 51646
IGF0dHJhY3Rpbmc= 51647
IE1vdXI= 51648
KGRpc3RhbmNl 51649
aWNpdHM= 51650
IGJvbm5l 51651
IEFDQ0VTUw== 51652
LkRlc2VyaWFsaXplT2JqZWN0 51653
IFR5cGVk 51654
IGpldQ== 51655
IGFwcElk 51656
IENsYXJh 51657
IEhG 51658
IFJlaWNo 51659
aXBwbGVz 51660
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 51661
X2RlbGl2ZXJ5 51662
ZXJpYWxpemF0aW9u 51663
IHBsYWludGlmZnM= 51664
U2NpZW50 51665
c2hvcHBpbmc= 51666
IER1bW15 51667
IFdhbGQ= 51668
R3JvdXBOYW1l 51669
IGluc2NyaXB0aW9u 51670
ZWxvZw== 51671
Ojo6Ojo6Ojo= 51672
X2xk 51673
QmFja1ByZXNzZWQ= 51674
LlJhdw== 51675
IE9uVHJpZ2dlcg== 51676
IG11c2V1bXM= 51677
IEJlZW4= 51678
IEFkdmVudHVyZXM= 51679
IHNsYXRl 51680
IGxldHQ= 51681
IHN1bmQ= 51682
IEdpbg== 51683
IE1lY2hhbmljYWw= 51684
LnNoaXA= 51685
QXBwQ29tcG9uZW50 51686
IGRlc3RpbmVk 51687
IGR3ZWxsaW5n 51688
UHJvZmlsZXI= 51689
UHJlcGFyZQ== 51690
emVpY2g= 51691
IHNpbGljb24= 51692
KGhhcw== 51693
ICMl 51694
VklERU8= 51695
IGNvbGxhYm9yYXRl 51696
TGlu 51697
IHNjb3Blcw== 51698
KGNsYXNzTmFtZQ== 51699
KHNk 51700
YW5kaW4= 51701
LmhhbQ== 51702
U2VydmljZUltcGw= 51703
LWRlc2NyaWJlZA== 51704
IGlyb255 51705
c3RpYWw= 51706
IEh1YXdlaQ== 51707
KHJlcG8= 51708
IHVuZXhwZWN0ZWRseQ== 51709
IEthaQ== 51710
Lmluc3RhbGw= 51711
XHhm 51712
IGV4aGliaXRlZA== 51713
X1RDUA== 51714
IE94 51715
X0NITw== 51716
IHByb3N0aXR1ZXJ0ZQ== 51717
IHbDpA== 51718
IHNpdG8= 51719
IGNvbnN0aXR1ZW50cw== 51720
IENvbnRpbnVlZA== 51721
IFNBVkU= 51722
cnNz 51723
L21lc3NhZ2U= 51724
dWJlcw== 51725
IG1pc2RlbWVhbg== 51726
IHRheGF0aW9u 51727
IHN0b3J5bGluZQ== 51728
aGFpcg== 51729
IEZpbmRz 51730
U0lH 51731
dmVyaWZpY2F0aW9u 51732
fj0= 51733
Lmhw 51734
SXRlcmFibGU= 51735
0YvQtQ== 51736
YXRvcmk= 51737
IGN0cg== 51738
Ung= 51739
Xyk7Cgo= 51740
ZGFn 51741
LnBpbg== 51742
IHBzZXVk 51743
IGludm8= 51744
0YHRgtGA 51745
X3BpeA== 51746
5Li656m6 51747
IHN3b3Ju 51748
4oCUb3I= 51749
X3JlZ2lzdHJ5 51750
IGRpc2FzdGVycw== 51751
IFJPSQ== 51752
IOKAlQ== 51753
YWt0dQ== 51754
Zm9yZXN0 51755
YmVpdGVu 51756
4oCUSQ== 51757
dWV2YQ== 51758
ZWd0 51759
IHNwaWtlcw== 51760
VVJFUw== 51761
IFJlY29tbWVuZGVk 51762
IGV4cGxvaXRlZA== 51763
IEZyZWRlcmljaw== 51764
X0NPTVBMRVRF 51765
IERydWdz 51766
ISEhISEhISE= 51767
IFJpdg== 51768
U1RPUA== 51769
Uk9PTQ== 51770
IFBBU1NXT1JE 51771
Q29va2llcw== 51772
LkVs 51773
4but 51774
IEJlcnQ= 51775
IGhhc2hlZA== 51776
aWNlc3Rlcg== 51777
IGRlY29yYXRvcg== 51778
IHF1ZXJ5U3RyaW5n 51779
OjsK 51780
ICJbIg== 51781
b3RvcGU= 51782
LUFtZXJpYw== 51783
IE1hdHRoZXdz 51784
VVJBTA== 51785
4oCcLA== 51786
U3VtbWVy 51787
Zm9z 51788
X0NPTlRBSU5FUg== 51789
X0FDSw== 51790
IGZpbHRy 51791
X2Rpc3A= 51792
X1Jl 51793
IGZhY2lsZQ== 51794
0LDRiA== 51795
IOyVig== 51796
IGViZW4= 51797
IHNwcmluaw== 51798
IFF1aW50 51799
PlY= 51800
IGhpc3RvcmlhbnM= 51801
b3VybWV0 51802
IE1vbml0b3Jpbmc= 51803
bGVkZ2Vy 51804
Y290dA== 51805
IHdhcmU= 51806
R0dMRQ== 51807
Y2Fycw== 51808
IE1FRElBVEVL 51809
IHZvbHVwdA== 51810
X1ZpZXc= 51811
SEVM 51812
KGNvcHk= 51813
KHN0YXRz 51814
IGNocm9tb3NvbWU= 51815
IEN1cnRpcw== 51816
LWNvbmY= 51817
KGFzc2V0 51818
IGh2b3I= 51819
RmlsZVN5c3RlbQ== 51820
PD4oKTsNCg== 51821
b2NvZGVy 51822
IENhbm5vbg== 51823
KXg= 51824
IFNtb290aA== 51825
IFNBUw== 51826
X2Nl 51827
CXByZXY= 51828
X21vdmll 51829
RWM= 51830
X3dhbGw= 51831
PEJ1dHRvbg== 51832
IEZBU1Q= 51833
IG9uVmlldw== 51834
dWxhbg== 51835
IFNVUFBPUlQ= 51836
IGdlc2NoaWNodGVu 51837
IFNvbnM= 51838
SW1t 51839
JElGbg== 51840
IGZhaXJuZXNz 51841
IGRwaQ== 51842
YXRzdQ== 51843
Sm9zaA== 51844
RXF1YWxpdHk= 51845
IH0oKQo= 51846
X2xlc3M= 51847
IFJhdGlv 51848
IENhdHM= 51849
IFN0ZXJu 51850
TW9uc3Rlcg== 51851
IG1lcmN1cnk= 51852
w7xocg== 51853
IHBsdXNpZXVycw== 51854
LmRlc2VyaWFsaXpl 51855
c2NvcHk= 51856
LkZhbHNl 51857
KWFuaW1hdGVk 51858
IEV4cGVydHM= 51859
ICIiKXsK 51860
LldoZW4= 51861
c2VlYWxzbw== 51862
LnVucGFjaw== 51863
TEVN 51864
LnNlbGVjdEFsbA== 51865
IHBlcmNlcHRpb25z 51866
dWRpbmc= 51867
aXJsaW5n 51868
IFByaW50aW5n 51869
Z3JhbXM= 51870
IEZpbGVTdHJlYW0= 51871
ZXJ2aWxsZQ== 51872
aWxvZw== 51873
aWNtcA== 51874
X0NvdW50 51875
IGxpdmVzdG9jaw== 51876
LWNh 51877
ZG9jdW1lbnRz 51878
IHBvbGVz 51879
CXdhbnQ= 51880
IGZsdW9yZXM= 51881
IHN0YW5kcG9pbnQ= 51882
IEh1Z2U= 51883
IHJhZGlhbnM= 51884
IFVJQmFy 51885
RURJVU0= 51886
IEhpc3Rvcmlj 51887
X2hvbGRlcg== 51888
IE1hcmluZXM= 51889
IHTDpA== 51890
LkxpZ2h0 51891
cXVpcmVy 51892
YXNvbnJ5 51893
ZGl2aWRlcg== 51894
IEZsdXR0ZXI= 51895
X2Zi 51896
cmVzdHJpY3RlZA== 51897
IEV2ZXJ5Ym9keQ== 51898
TsOjbw== 51899
IGtub3Q= 51900
IFR3aXRjaA== 51901
IGhhbGx3YXk= 51902
KENvbGxpZGVy 51903
SW5wdXRFbGVtZW50 51904
PykK 51905
L29mZg== 51906
Lyk= 51907
cGxheWVk 51908
W09G 51909
IGJhdHRpbmc= 51910
X2Rs 51911
IGNvbWVkaWFu 51912
IMOpdg== 51913
IERFTQ== 51914
IEVkZW4= 51915
OndoaXRl 51916
Jycs 51917
Q29uc3RydWN0aW9u 51918
YWNlcmI= 51919
IHRhc2tlZA== 51920
Lm1hbmFnZQ== 51921
UmVsYXRpb25zaGlw 51922
IHBob24= 51923
bno= 51924
X0JHUg== 51925
VmFsaWRhdGVBbnRpRm9yZ2VyeVRva2Vu 51926
X2Fpcg== 51927
4oCcV2hlbg== 51928
IGdsZnc= 51929
IENvbnZlcnNhdGlvbg== 51930
X1RPVEFM 51931
LFo= 51932
IGdyYXo= 51933
IGl0ZXJhYmxl 51934
IFBBU1M= 51935
IGFkdmVydGlzZQ== 51936
IG3DtmdsaWNo 51937
L3RyYWlu 51938
IFZvbGtzd2FnZW4= 51939
IGNyZWVweQ== 51940
ICIpDQo= 51941
UVVFTkNF 51942
IGFsdGFy 51943
IGVkaXRz 51944
Y29tcGlsZWQ= 51945
YXduaW5n 51946
IER1bmdlb24= 51947
IG9zZw== 51948
TmF2aWdhdGlvbkJhcg== 51949
IHRyZW5kaW5n 51950
IEVjbw== 51951
b2dnbGVz 51952
Y2RvdA== 51953
fC0= 51954
U2ll 51955
ZWNyZXQ= 51956
IE5lZ2F0aXZl 51957
IExpbmc= 51958
IERJTQ== 51959
IENXRQ== 51960
IENhcnJpZXI= 51961
IGNhcnRyaWRnZQ== 51962
X3VzYg== 51963
PW9z 51964
IEphY2tpZQ== 51965
IG90cmFz 51966
IGNvbW1vZGl0aWVz 51967
IFByZXNlbnRhdGlvbg== 51968
KSYmKA== 51969
IE1hcnRoYQ== 51970
IENhdGhvbGljcw== 51971
IE1vbmQ= 51972
0L7QsdGL 51973
X2Fic29sdXRl 51974
IGFzaGFtZWQ= 51975
cG9uc29ycw== 51976
dGFs 51977
IHNhZG5lc3M= 51978
IHB1w7I= 51979
RmFkZQ== 51980
LXByZXZpZXc= 51981
IFJlcXVlc3Rz 51982
IENhbHZpbg== 51983
aG9ybg== 51984
UmV1c2VJZGVudGlmaWVy 51985
KHByb3ZpZGVy 51986
L2FwcHM= 51987
aW1lbw== 51988
CUNsYXNz 51989
U2Ftc3VuZw== 51990
IFdPUkxE 51991
IGNpbm5hbW9u 51992
ZG90ZW52 51993
IElVc2Vy 51994
IERFVg== 51995
X0NoYXI= 51996
LmliYXRpcw== 51997
ZXRp 51998
L21l 51999
c3N0 52000
LnN5bQ== 52001
IFJ1Z2J5 52002
LW1hc3Rlcg== 52003
YWphcg== 52004
IFlFQVI= 52005
IG9kcA== 52006
IFJvbGVz 52007
IGJpcGFydGlzYW4= 52008
YWlsbGU= 52009
IGJsb2NrZXI= 52010
IGdyZWVucw== 52011
LlNFQ09ORFM= 52012
IGJlbGlldmVycw== 52013
IExpa2Vz 52014
RkxPQVQ= 52015
IG1haw== 52016
IGdjYw== 52017
4pWQ4pWQ 52018
KCJ+Lw== 52019
U0NSSVBUT1I= 52020
IHRvbm5lcw== 52021
IFNhbmc= 52022
IHRyYW5zcG9zZQ== 52023
ZW5uYWk= 52024
UHJlZA== 52025
IHNvbGx0ZQ== 52026
LmdpdGh1YnVzZXJjb250ZW50 52027
KHByaW50 52028
IEhvbGU= 52029
55yL 52030
YWRnZXQ= 52031
IHByb21wdHM= 52032
IGdlbmV0aWNhbGx5 52033
IEhvZA== 52034
IHZlcnRpY2FsbHk= 52035
X2NvbnRyb2xz 52036
0YHRgtCw0L0= 52037
Iil7DQo= 52038
JHRpdGxl 52039
IH0pLAoK 52040
IHN0YXRld2lkZQ== 52041
IENvcnJlc3BvbmQ= 52042
IEF0dHI= 52043
aXRhbnQ= 52044
RWxlbWVudFR5cGU= 52045
IG91dHdhcmQ= 52046
IGZhbWlsaWE= 52047
KGFydGljbGU= 52048
IGJsYXQ= 52049
wqAK 52050
IGdsR2V0 52051
IFJlY2VpdmVy 52052
ICUt 52053
YWRhbQ== 52054
V2lubmVy 52055
IHRhaWxvcg== 52056
X3B3ZA== 52057
ZXJ0ZW4= 52058
U3Rhbg== 52059
CWFsbA== 52060
YWxpdmU= 52061
c3RydG90aW1l 52062
77+9cw== 52063
c2Vzc2lvbnM= 52064
JGNvbm4= 52065
YXNzaXN0 52066
IGNoYXR0aW5n 52067
IE1hbnQ= 52068
ICVA 52069
ICIiKTsKCg== 52070
IGRndg== 52071
IO2VqA== 52072
LnJlcGVhdA== 52073
X01lc3NhZ2U= 52074
IGFkdmlzZXJz 52075
L3BhdGg= 52076
IGtlcw== 52077
KX08Lw== 52078
TWlzYw== 52079
IGJzb24= 52080
IHRyaW1tZWQ= 52081
IEFjaw== 52082
VmVydGV4QXR0cmli 52083
57Si 52084
dWF0ZXM= 52085
Lm15c3Fs 52086
IGRlc3Rpbg== 52087
IHByb2Js 52088
KENvbnN0YW50 52089
YXNzZXM= 52090
LWltYWdlcw== 52091
X0FSRUE= 52092
X18qLw== 52093
W10o 52094
IHNpZ25Jbg== 52095
xJE= 52096
eHI= 52097
YWhpcg== 52098
LmZpcmVzdG9yZQ== 52099
IHNlcXVlbnRpYWw= 52100
IElkZWE= 52101
LWJhc2lj 52102
X3BhZw== 52103
IGluc3RhZ3JhbQ== 52104
b3Ryb24= 52105
X2FsaWdubWVudA== 52106
XFxcXA== 52107
LkZhY3Rvcnk= 52108
LnJ1bGU= 52109
LmNoZGly 52110
IGxpYnJv 52111
KGdhbWVPYmplY3Q= 52112
LlRvb2xTdHJpcEJ1dHRvbg== 52113
IGRpc2NvdmVycw== 52114
LkFyZ3M= 52115
ZG9i 52116
IHZu 52117
4oaS 52118
IGTDvA== 52119
IFhN 52120
IGFsdW1uaQ== 52121
IGhvbmU= 52122
IHNlY3VyZWx5 52123
X2Ryb3Bkb3du 52124
RGlzY2xhaW1lcg== 52125
IGR6aQ== 52126
KHRpbWVzdGFtcA== 52127
Jyld 52128
IGN1bHRpdmF0aW9u 52129
Li4uCgoK 52130
IFRyZWF0eQ== 52131
IERpc3M= 52132
IGNvbmZsaWN0aW5n 52133
LmdldFNlbGVjdGlvbg== 52134
IHBsYXlhYmxl 52135
IFNpbGs= 52136
IEVxdWFsaXR5 52137
IG1veQ== 52138
IGZsYXR0 52139
IG1vdGl2ZXM= 52140
UGVyZmVjdA== 52141
LmV4aXN0 52142
IHR3ZWFr 52143
IG9taXQ= 52144
IFR3aWxpZ2h0 52145
IGtpc3Npbmc= 52146
IGNocmlzdGlhbg== 52147
KFNF 52148
X2RlZmluZQ== 52149
IFBlbmc= 52150
U29ydGVk 52151
J2lu 52152
TG9ncw== 52153
4buHbg== 52154
IG55bG9u 52155
RHVtcA== 52156
SW1hZ2luZQ== 52157
cmVuYW1l 52158
IGJlZm9yZWhhbmQ= 52159
cHlnYW1l 52160
IGJweQ== 52161
IERq 52162
IHRpdHVsbw== 52163
IG5sdGs= 52164
IFNjaG1pZHQ= 52165
IENhdg== 52166
KG9uZQ== 52167
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 52168
LmdldE1vZGVs 52169
IFB0 52170
YXRvaQ== 52171
LmxvY2Fscw== 52172
YnVyc2VtZW50 52173
UHJvdmluY2U= 52174
IEFwcHJvdmVk 52175
KCk8PA== 52176
w7NyaWE= 52177
dXNjaA== 52178
IEplbm55 52179
YXJyYW50cw== 52180
IExpYmVydA== 52181
TG9yZA== 52182
IFJlbW92ZWQ= 52183
X2NvZGVj 52184
LmJ1bmRsZQ== 52185
IEdvbnphbGV6 52186
b3BlcnM= 52187
neWni+WMlg== 52188
ZXR0aW5n 52189
IGdvZGRlc3M= 52190
cmlwZQ== 52191
IG11c2N1bGFy 52192
CQkJCQkJCQkg 52193
IEh1Z28= 52194
IG1lam9yZXM= 52195
bG9pZA== 52196
cml0ZWxu 52197
Z2lz 52198
YWRkb24= 52199
ICgoKCg= 52200
YXBwb2ludG1lbnQ= 52201
cmVzZXJ2ZWQ= 52202
CWZyaWVuZA== 52203
X2F2YXRhcg== 52204
Qk9PTEU= 52205
YWhp 52206
LUVORA== 52207
IGlmZg== 52208
w7Ni 52209
IEJydW5v 52210
cm93c2FibGU= 52211
IFBvaXNvbg== 52212
KGZsYWdz 52213
dXJ0bGVz 52214
IEFuaW1l 52215
IG1pZ3JhbnQ= 52216
CXN0cmNhdA== 52217
KHJlcGx5 52218
IFJlZnVnZQ== 52219
IEJX 52220
ZWZ1bA== 52221
JHZhbHVl 52222
ZmVk 52223
ICAgICAgICAgICAgICAgICAgICAgICAK 52224
6LWE 52225
KGNt 52226
IHZ1bG5lcmFiaWxpdGllcw== 52227
IFsoJw== 52228
IHVuYmVsaWV2YWJsZQ== 52229
c3RyaWN0aW9u 52230
ZW50aWV0aA== 52231
IHByYXlpbmc= 52232
Q2xhaW1z 52233
IGthdWZlbg== 52234
bsOp 52235
IHBvaXNvbmluZw== 52236
Y29sbGVjdGlvbnM= 52237
IGluaXRTdGF0ZQ== 52238
IFNldmVyaXR5 52239
IGNvbnRlbnRpb24= 52240
IAoJCg== 52241
LmNvbnRyb2xsZXJz 52242
c3RydWN0dXJlZA== 52243
aWN0aW0= 52244
IE9iZXI= 52245
IC8qI19f 52246
X09U 52247
IEFtZXJpY2Fz 52248
IEFkYQ== 52249
UHJvZHV0bw== 52250
Lm11bHRp 52251
IGdyYXBl 52252
YmVn 52253
5p+l6K+i 52254
IHF1YXJ0eg== 52255
IFJvbWFuY2U= 52256
IE1pZHdlc3Q= 52257
IGhvdXNlZA== 52258
IGZ1cm5pc2g= 52259
aWNvbnQ= 52260
LnVuc2hpZnQ= 52261
b3RyZQ== 52262
IMO6bg== 52263
aXBwbGU= 52264
IHN1YnVyYg== 52265
dWFsaQ== 52266
Vm9pY2U= 52267
LklzQW55 52268
LGNvbHVtbg== 52269
IFByb3NlYw== 52270
SURB 52271
CXBvc3Q= 52272
cHRvbXM= 52273
dsOp 52274
IEluZ3JlZGllbnRz 52275
w7ZmZg== 52276
Lm9wZXJhdG9y 52277
IDw8PQ== 52278
bGFzdGlj 52279
IHJlc2VtYmxl 52280
VW5hdXRob3JpemVk 52281
IHR1dHRv 52282
X1NXSVRDSA== 52283
X1JFQURZ 52284
fT0= 52285
bm93bGVkZ2U= 52286
IGFwcGVuZGVk 52287
dW5nYW4= 52288
4oCZZW4= 52289
IExvcmVu 52290
cHVibGlzaGVy 52291
IE1H 52292
fSwi 52293
IFdhbHNo 52294
VGVtcGxhdGVz 52295
X3NvY2lhbA== 52296
IHBhcmlzaA== 52297
IFNwbA== 52298
bWluYXRlZA== 52299
KEZBTFNF 52300
IGZvcmVmcm9udA== 52301
bW9kaXR5 52302
IGJpbGF0ZXJhbA== 52303
IGNvbXBldGl0 52304
IGNhbmRsZXM= 52305
LmRw 52306
IGNvbGxlY3Rz 52307
dGVsZWZvbm8= 52308
IGF0dGVudA== 52309
IExlbW9u 52310
aXphZGE= 52311
IHRoZXJhcGllcw== 52312
IHBhcmFkb3g= 52313
IHRhcw== 52314
LXN1Ym1pdA== 52315
ZWtlcg== 52316
SU5hdmlnYXRpb25Db250cm9sbGVy 52317
IG1ldGF2YXI= 52318
IHNld2luZw== 52319
IFppbWJhYndl 52320
IGxhd2Z1bA== 52321
IGxvcmU= 52322
IExvYWRz 52323
INGB0L7Qt9C0 52324
LnByb21pc2U= 52325
IEZhY2Vz 52326
LlBsYXRmb3Jt 52327
LmdldExvY2F0aW9u 52328
IHRyb3VibGluZw== 52329
IHbDrWRlbw== 52330
IEZlYXR1cmluZw== 52331
5Lqn 52332
cWVk 52333
IG9uQmluZA== 52334
IHRvZGRsZXI= 52335
Q2xv 52336
RGl2aXNpb24= 52337
LWdhbGxlcnk= 52338
IEdlbGQ= 52339
c3BlY2lmaWM= 52340
RmllbGROYW1l 52341
X2V4Y2Vs 52342
XGh0ZG9jcw== 52343
IERW 52344
ICY6 52345
IHR3aWc= 52346
IENvbmNlcm4= 52347
IHNob3RndW4= 52348
IG5pY2tlbA== 52349
IEx1eHVyeQ== 52350
X0tFWVM= 52351
Lm5weQ== 52352
xa8= 52353
IGZvcmVoZWFk 52354
zrI= 52355
IGVuZGFuZ2VyZWQ= 52356
L3RoZQ== 52357
cGlwZWxpbmU= 52358
xbE= 52359
bmVv 52360
RXhwbG9yZQ== 52361
U3BlY1dhcm4= 52362
IGludGVyY2hhbmdl 52363
KHBp 52364
YmlydGhkYXk= 52365
RGF0YVJvdw== 52366
IFNQUg== 52367
IG9zdGU= 52368
ICJ+ 52369
YXRpc2ZhY3Rpb24= 52370
Tkg= 52371
b3Jkbw== 52372
LWZvY3VzZWQ= 52373
J0E= 52374
lok= 52375
LmJlc3Q= 52376
IFNwZWNpZmljYXRpb24= 52377
Lz4uCgo= 52378
b2dlbmVzaXM= 52379
IE9QVElPTlM= 52380
dXB0b29scw== 52381
IG1pbGl0YW50 52382
IGV4aXRlZA== 52383
aWdhcg== 52384
IENPTU0= 52385
IERpc3Bvc2FibGU= 52386
YXljYXN0 52387
IHJvd3NwYW4= 52388
IHN5bnRoZXM= 52389
IHNvbmRlcm4= 52390
IDwhLS08 52391
IEVuZGU= 52392
LnZhcmlhYmxlcw== 52393
IGNvbnNlcXVlbnRseQ== 52394
c2Rr 52395
U3VwcGx5 52396
cmVzcG9uc2l2ZQ== 52397
T3BlbmluZw== 52398
cGhvdA== 52399
IH1c 52400
IGJ1bGxzaGl0 52401
IGJlYWNvbg== 52402
X3NhdA== 52403
IHNuYXBz 52404
IEdIeg== 52405
TE9ORw== 52406
PHBhaXI= 52407
IFsKCg== 52408
IFZlcmc= 52409
IEVpbmU= 52410
L3Bvc3Rz 52411
IGFyYWI= 52412
IHN1bWE= 52413
44Oz44OI 52414
IHNjYXJj 52415
IG9sZWg= 52416
ID8/Pw== 52417
IE9mZmVycw== 52418
eGVk 52419
IGZ1bGxXaWR0aA== 52420
LWFjdGlvbnM= 52421
T3V0ZXI= 52422
IEV4cG8= 52423
w6lyZXI= 52424
Lkhl 52425
REg= 52426
IGhpbA== 52427
IE1pbGxlbm4= 52428
0LXQvdGM 52429
SWNl 52430
X2dyYXk= 52431
INC/0L7Qu9GD0Yc= 52432
IFB1bms= 52433
IHRpbWV2YWw= 52434
IGlzYQ== 52435
IENIdG1s 52436
LkRhdGFQcm9wZXJ0eU5hbWU= 52437
IGRpeQ== 52438
dG91cg== 52439
IGpUZXh0RmllbGQ= 52440
IGplbGx5 52441
IGFra2E= 52442
LWVyYQ== 52443
RGVwcmVjYXRlZA== 52444
X0lNUEw= 52445
IE1vbnRocw== 52446
X0lURVI= 52447
IGFydGU= 52448
IEhlYWRpbmc= 52449
IEJvaA== 52450
IHByYWc= 52451
IGRvd25zdHJlYW0= 52452
IEJPQVJE 52453
X2tleXdvcmRz 52454
IE1ldHJvRnJhbWV3b3Jr 52455
KS0o 52456
PEV2ZW50 52457
4bqldA== 52458
IFByZWNpc2lvbg== 52459
IE1SSQ== 52460
aGVyZW5jZQ== 52461
aXhv 52462
KSkpewo= 52463
KCk/Pg== 52464
IHNhYXQ= 52465
IFdhcmVob3VzZQ== 52466
X2F0b21pYw== 52467
IHZvaWNlZA== 52468
SXRlbUNsaWNr 52469
ICAgICAgCQ== 52470
LlJlc3VsdFNldA== 52471
L3BsdWdpbg== 52472
IGhhbGxz 52473
PWZvcm0= 52474
IFdhZ25lcg== 52475
ZW1haWxz 52476
JSUK 52477
VU5LTk9XTg== 52478
IFJpbQ== 52479
dWludHB0cg== 52480
IExpYmVyYWxz 52481
IHRlcnJpdG9yaWFs 52482
IE11cmRlcg== 52483
IExhZGVu 52484
IHByZXNpZGVudGU= 52485
KGNhcA== 52486
IH0sewo= 52487
YXZvdXJpdGU= 52488
ZmluZEFsbA== 52489
IGFwcGxhdWQ= 52490
IOuplA== 52491
L3Bob3Rv 52492
X3N5bg== 52493
LndhbGs= 52494
IHN1bnNoaW5l 52495
IHN0dWJib3Ju 52496
IGRvd25zaWRl 52497
IExURQ== 52498
LWJ1aWxkaW5n 52499
UXVlcnlCdWlsZGVy 52500
X2Rpc2FibGVk 52501
VGVycg== 52502
YWtyYQ== 52503
UmVmcmVzaGluZw== 52504
X3Byb2Jz 52505
IGZvbGw= 52506
PmI= 52507
IGNvbGxhdGVyYWw= 52508
JGVycm9y 52509
IGFjb21wYW4= 52510
X2l2 52511
K2Q= 52512
YWp1 52513
IOKd 52514
c3VybmFtZQ== 52515
LmFydGljbGU= 52516
IGJpY3k= 52517
IjoKCg== 52518
Pjw/PSQ= 52519
0LrQu9GO0Yc= 52520
ZWNvbWU= 52521
RmluZGluZw== 52522
KHBk 52523
IHJlY3Rhbmd1bGFy 52524
ZXN0bw== 52525
aWhpbA== 52526
PScnKQo= 52527
IG1hbnNpb24= 52528
X2ZpbHRlcmVk 52529
YW5lZA== 52530
UFJPRFVDVA== 52531
TE9HWQ== 52532
X2ly 52533
LlJlbW90ZQ== 52534
IGV4ZWN1dGVz 52535
b3RlY2hub2xvZ3k= 52536
IFBST0NFU1M= 52537
IHJvd0luZGV4 52538
Z2V0WA== 52539
TXV0 52540
aW5za3k= 52541
KHN0cmluZ3M= 52542
IE1veg== 52543
Rmxvb3I= 52544
LlN0cnVjdA== 52545
X3ByZWRpY3Rpb24= 52546
IGNhcnJpYWdl 52547
IGNvbGxlY3RvcnM= 52548
IFdoZWVscw== 52549
IGJ1bmRsZWQ= 52550
YXhlZA== 52551
a29s 52552
X2Nyb3A= 52553
IGJsb29t 52554
QmVzaWRlcw== 52555
IG92ZXJyaWRkZW4= 52556
IHN1Ym5ldA== 52557
aWVuaWE= 52558
Kj46Og== 52559
IFByaW1pdGl2ZQ== 52560
IOag 52561
LkNoYXJhY3Rlcg== 52562
6KGo56S6 52563
IEFESEQ= 52564
Uk9Z 52565
SmFwYW5lc2U= 52566
T1VT 52567
OlVJQ29udHJvbEV2ZW50 52568
IFBBTA== 52569
aXphY2lvbg== 52570
IGNoZXJjaGU= 52571
b3J0aW5n 52572
IG9yZ2Fz 52573
LlV0Yw== 52574
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 52575
XERvbWFpbg== 52576
T1JB 52577
IHRlcnJhY2U= 52578
IHByaXM= 52579
CQkJCQkJCQkJCg== 52580
IHJhaWRz 52581
X2luY3JlbWVudA== 52582
IHVuanVzdA== 52583
JG9wdGlvbnM= 52584
b25DaGFuZ2U= 52585
Qmxvb2Q= 52586
RmlsbQ== 52587
IGhhbmRpbmc= 52588
IG11Zw== 52589
U09MRQ== 52590
44OV 52591
aWNvbmR1Y3Rvcg== 52592
IElzbGFtaXN0 52593
ICIiKTsNCg== 52594
LW92ZXJsYXk= 52595
LGNvbA== 52596
6Zw= 52597
YXJyaW5ncw== 52598
X2NvbnRyYWN0 52599
CWxs 52600
cGlw 52601
X2VtYmVkZGluZw== 52602
IHBlcm1pdGU= 52603
IG1vZGVt 52604
IHRyaWdnZXJpbmc= 52605
KGh3bmQ= 52606
LiIpXQo= 52607
IHNhbnQ= 52608
IGV4dGluY3Rpb24= 52609
IGNsYXNoZXM= 52610
LkF1ZGlv 52611
IHN1bw== 52612
Lm11bHQ= 52613
IHNlYXNvbmVk 52614
LlZhckNoYXI= 52615
cG93ZXJlZA== 52616
ImNvbnRleHQ= 52617
IG1lbmM= 52618
KEdyYXBoaWNz 52619
JHdoZXJl 52620
IHJlY3VwZXI= 52621
YWNrbGU= 52622
IG5ld0RhdGE= 52623
IEJyZWFraW5n 52624
ZXJnZWQ= 52625
IENQUFVOSVQ= 52626
IE11bGw= 52627
IGtvbW10 52628
IExlZWRz 52629
JywnPQ== 52630
Lm5leHRUb2tlbg== 52631
IFJpZw== 52632
UkVUVVJO 52633
CXRpbWVy 52634
fV97 52635
IE1hcmluYQ== 52636
IHNsb2dhbg== 52637
SVpFRA== 52638
T3BlbkdM 52639
X1BhZ2U= 52640
YXRpdmFz 52641
IGhhemFyZHM= 52642
J3ZhbHVl 52643
IGNvcnBzZQ== 52644
IEZsb3dlcnM= 52645
X29ubGluZQ== 52646
ZGFs 52647
IENvbGxpc2lvbg== 52648
w6BuZw== 52649
IGZlcnJ5 52650
IHBva2U= 52651
IFRvdXJpc20= 52652
aW5lcmFyeQ== 52653
L1NldA== 52654
LkVtcGxveWVl 52655
PkA= 52656
LHZhbA== 52657
IE1pbGY= 52658
YXZleg== 52659
UmV0cnk= 52660
LiIv 52661
IHJvdW5kaW5n 52662
LXBsYWNlbWVudA== 52663
IGNlcnY= 52664
TWV4 52665
IE1zZ0JveA== 52666
X3Npbms= 52667
bWFuaWE= 52668
X2NyZWRpdA== 52669
R3VhcmRhcg== 52670
IHZhbml0eQ== 52671
IGltbXV0YWJsZQ== 52672
IGNvbnRhbWluYXRlZA== 52673
0LrQsNC3 52674
5Liy 52675
YWNoYQ== 52676
IGhhdGg= 52677
IGVudW1lcmF0aW9u 52678
LmdldEJ5 52679
4bq/dA== 52680
IERhbw== 52681
b2JpZXJubw== 52682
IEd1dA== 52683
X1BJUEU= 52684
LmFkdg== 52685
IEd1dGVuYmVyZw== 52686
YWRo 52687
66y4 52688
ZnVzYw== 52689
LlZL 52690
cHRh 52691
IEVNUA== 52692
LkZpcnN0TmFtZQ== 52693
IHJlYWxpemVz 52694
LmNn 52695
IHVuaXRl 52696
UExJVA== 52697
IEFiZHVs 52698
IE1FRA== 52699
UkFJTlQ= 52700
IHF1ZXN0YQ== 52701
c3RkaW4= 52702
IGNhbG9yaWU= 52703
CWdsQmluZA== 52704
IGFybWE= 52705
eWxsYW5k 52706
T01Q 52707
LXE= 52708
IEtoYWw= 52709
c2FsYXJ5 52710
CUFORA== 52711
c2dp 52712
X3RoYW4= 52713
LWJ1aWx0 52714
ICsvLQ== 52715
IG5hcmdz 52716
X2xhdW5jaA== 52717
IFNR 52718
em9u 52719
IEJlbmVk 52720
X3VuaW9u 52721
PigpOw0KDQo= 52722
IFNpbXM= 52723
IERhdGVz 52724
CUNvbm5lY3Rpb24= 52725
IFBlcmM= 52726
Z3JhbnQ= 52727
YW1waWw= 52728
IGFnZ3JlZ2F0aW9u 52729
ZXNlbGVjdA== 52730
X1NVUA== 52731
KHsKCg== 52732
Lm9t 52733
IHdt 52734
LmNvbnRyYWN0 52735
LU9yaWdpbg== 52736
IGdlbWU= 52737
ZnJlZXpl 52738
TlVNQkVS 52739
LmN1cnI= 52740
IEdsYWQ= 52741
c2xh 52742
IFJlYg== 52743
0LXRgdGC0LLQvg== 52744
YXJib24= 52745
L2NvbnRyb2xsZXJz 52746
U2xvdHM= 52747
LmRlZXBjb3B5 52748
RlVMTA== 52749
dWlyZQ== 52750
QHN0dWRlbnQ= 52751
4LmJ4Lit 52752
VHJhbnNsYXRvcg== 52753
IHByZWZlcmFibHk= 52754
Y2hlbWlzdHJ5 52755
IEphY29icw== 52756
bmFy 52757
ICgiXA== 52758
bmVhcg== 52759
aWZpcXVl 52760
CWNvbHVtbg== 52761
IG1pbnV0b3M= 52762
aWdlcw== 52763
IGVzdGFibGU= 52764
LWRpc2M= 52765
KENoYXI= 52766
a292 52767
ZXhhbXBsZXM= 52768
X18oIg== 52769
INC60LDQug== 52770
IEJvcmlz 52771
KGR4 52772
c3By 52773
IG92ZXJoYXVs 52774
YXRvb24= 52775
IEhhcmxleQ== 52776
aWNhbWVudGU= 52777
4paI4paI4paI4paI 52778
ZXZpdHk= 52779
dXNoZXI= 52780
LlZpc3VhbFN0dWRpbw== 52781
V2F2ZQ== 52782
IE5vcm1hbGx5 52783
c3Rvb2Q= 52784
b3JuaW5ncw== 52785
IGhhbmRtYWRl 52786
KGxvZ2dpbmc= 52787
IGNhcmNpbg== 52788
YWNqYQ== 52789
IHN1cGVycw== 52790
IHNpZWdl 52791
CUlm 52792
IElMb2dnZXI= 52793
VUFSVA== 52794
QW5pbWF0aW9uRnJhbWU= 52795
IHRhcGVz 52796
IGFpZHM= 52797
IENvbG9uZWw= 52798
dmVlZG9y 52799
IG1kbA== 52800
cGhvbg== 52801
RGlzbWlzcw== 52802
QXZhaWxhYmlsaXR5 52803
VW5pZm9ybUxvY2F0aW9u 52804
IGlkZWFscw== 52805
cXVldHRl 52806
a2VpdGVu 52807
IEVNQUlM 52808
IE5lYg== 52809
IHN1bW1vbmVk 52810
IGdvdmVybm1lbnRhbA== 52811
IEhvcnJvcg== 52812
Y2hhbmdpbmc= 52813
IEFjdGl2YXRl 52814
SWxs 52815
PHRib2R5 52816
Y3JlYXRpdmU= 52817
IEJMRQ== 52818
IG1hZG5lc3M= 52819
T3JOaWw= 52820
IGhpbg== 52821
xZM= 52822
LkdldEtleQ== 52823
X2NvbnNvbGU= 52824
Ik91cg== 52825
IGd1aW50 52826
IGFtaQ== 52827
IHJlZmxlY3RpdmU= 52828
IGNyYWNraW5n 52829
IFJp 52830
UkFM 52831
dXJzZWQ= 52832
cHVyZQ== 52833
IHJlcGFpcmVk 52834
IHRpZ2Vy 52835
IE5pY29sYXM= 52836
VnM= 52837
bnRo 52838
LmV4cHJlc3Npb24= 52839
IHNlYXM= 52840
X0FDQ0VQVA== 52841
IGZvcmM= 52842
IEZyYXU= 52843
IHRocmVzaA== 52844
IM+A 52845
KEJBU0U= 52846
X09wZW4= 52847
V3VudXNlZA== 52848
IERvbWVzdGlj 52849
KHByaXY= 52850
Z3Vlc3M= 52851
Ly8hCg== 52852
Z2V0SXRlbQ== 52853
KCkpCgoK 52854
bXV0YXRpb25z 52855
IHN0cw== 52856
IGRlbWVudGlh 52857
c3Bva2Vu 52858
JHBhcmFtcw== 52859
IHBhdHJvbnM= 52860
IHJ1bndheQ== 52861
IEJVWQ== 52862
Lldhcm5pbmc= 52863
IG5ldXRyYWxpdHk= 52864
emhvdQ== 52865
0YDQsNGJ 52866
YWt0ZXI= 52867
IENvbnN0cnVjdG9ycw== 52868
w5NO 52869
IFByb2dyZXNzaXZl 52870
IEJ1cmdlcg== 52871
IGluY3VycmVk 52872
IGltcGxpY2l0bHk= 52873
X2Vudmlyb25tZW50 52874
IGV4YWNlcmI= 52875
IGVuZHVyaW5n 52876
c2lj 52877
IFBhcnRpY2lwYW50cw== 52878
X0Jsb2Nr 52879
IGVucm9sbA== 52880
X2VtcGxveWVl 52881
IFBlcHBlcg== 52882
bGF1Z2h0ZXI= 52883
44OW 52884
J107Pz4= 52885
PScu 52886
KHJlbmFtZQ== 52887
IHNoZWx0ZXJz 52888
IEFNQQ== 52889
X2dhcA== 52890
IFJFVVRFUlM= 52891
eGFtcHA= 52892
T01JQw== 52893
IHBlZGlkbw== 52894
IGTDqXZlbG9w 52895
X18oLyoh 52896
X29k 52897
d2VyZQ== 52898
X051bWJlcg== 52899
X211bHRpcGxpZXI= 52900
S0VFUA== 52901
IHNob3dlcnM= 52902
IG1hZ2U= 52903
IHNpbm8= 52904
Y3Jvdw== 52905
LmlkeA== 52906
X25vdGljZQ== 52907
dWVpbA== 52908
IG15cmlhZA== 52909
IEF2YWlsYWJpbGl0eQ== 52910
Y2VudHJhbA== 52911
IEFCT1VU 52912
IGluY29ycG9yYXRpbmc= 52913
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== 52914
X3dpZGdldHM= 52915
IHN5c3RlbUZvbnRPZlNpemU= 52916
w7ZydA== 52917
L2pwZWc= 52918
IFNNVFA= 52919
KGJyb3dzZXI= 52920
Z3Vucw== 52921
c2V0dw== 52922
X0FWQUlMQUJMRQ== 52923
IGluY29ycG9yYXRlcw== 52924
L2FuZHJvaWQ= 52925
eXg= 52926
5biD 52927
X2xhYg== 52928
IGxlYWtpbmc= 52929
IEhpbnQ= 52930
w7xuY2hlbg== 52931
LlNjYWxl 52932
IGZpcmV3b3Jrcw== 52933
IGxQYXJhbQ== 52934
YnNk 52935
YXhvbg== 52936
KHByZWRpY3Q= 52937
Q29uZ3JhdHVsYXRpb25z 52938
IFNwZWN0cnVt 52939
SVJD 52940
IEFkbWluaXN0cmF0aXZl 52941
IGltcHJpc29uZWQ= 52942
UlNwZWM= 52943
IHJldGFpbnM= 52944
IHNldHRsaW5n 52945
IGNpdGF0aW9ucw== 52946
IFdvcmxkcw== 52947
c3RyY29udg== 52948
b3VzYW5k 52949
IEJlZ2lubmluZw== 52950
IEFuZHJld3M= 52951
IFNoYXJvbg== 52952
RXhlY3V0aW5n 52953
Z3JvdXBJZA== 52954
YWRkRmllbGQ= 52955
IGV4cGFuZHM= 52956
IGtpbG9tZXRyZXM= 52957
bGlua3k= 52958
IGdycA== 52959
SU5BVElPTg== 52960
QnJpdGlzaA== 52961
IGNvbXBvcnQ= 52962
LkRhdGFHcmlkVmlld0NvbHVtbg== 52963
IFByb2R1Y3Rpb25z 52964
aWxkZW4= 52965
IHVuaXg= 52966
X2dhbGxlcnk= 52967
X1BST1ZJRA== 52968
b3JkZXJpbmc= 52969
X2Fubg== 52970
Ymg= 52971
LkRlc2lnbg== 52972
IHRyZWZmZW4= 52973
IHVuZGVybGluZQ== 52974
X251bXM= 52975
7ZWc64uk 52976
KXY= 52977
dXNpemU= 52978
IGRpc2FwcGVhcmFuY2U= 52979
VG9Cb3VuZHM= 52980
IHBjbA== 52981
IFdpbm5pcGVn 52982
IFNoZXJtYW4= 52983
X2xhbWJkYQ== 52984
bmFudA== 52985
IHJvb3RWaWV3 52986
LkZsYWdz 52987
IGNlbnNvcnNoaXA= 52988
c2VudGVuY2U= 52989
LnJlYWRJbnQ= 52990
X2Fzc2lnbm1lbnQ= 52991
IHZlcnNjaGllZA== 52992
IEZyYWN0aW9u 52993
IG5hdGlvbmFsaXN0 52994
IGp1ZWdv 52995
IERlYWxlcg== 52996
IHByZWRpY3Rpbmc= 52997
YXVwdA== 52998
aGVsbQ== 52999
X1BSSUNF 53000
X0RT 53001
KCIjew== 53002
bGlmdGluZw== 53003
IHBvc2luZw== 53004
IE5TTXV0YWJsZURpY3Rpb25hcnk= 53005
IHNtYXNo 53006
IGFraW4= 53007
IGNhbXB1c2Vz 53008
IE91dGxpbmU= 53009
IEVsYXN0aWM= 53010
X0NoZWNrZWRDaGFuZ2Vk 53011
KElFbnVtZXJhYmxl 53012
c3F1ZWV6ZQ== 53013
cHR1bmU= 53014
X0ZST05U 53015
bWg= 53016
IOyDneyEsQ== 53017
UnVuV2l0aA== 53018
IHR1cm5vdXQ= 53019
c2libGluZ3M= 53020
KWU= 53021
X0FSR1VNRU5U 53022
IEdyaWRCYWdDb25zdHJhaW50cw== 53023
X1BPT0w= 53024
LlJJR0hU 53025
aWdnaW5z 53026
dGVsZXBob25l 53027
XEV4dGVuc2lvbg== 53028
IEFyaXN0 53029
aXR1cg== 53030
IGZyaWVz 53031
X2R1cA== 53032
RXhwYW5kZWQ= 53033
LXJv 53034
IFdvcmxkd2lkZQ== 53035
IENvcms= 53036
w7Ns 53037
TGlt 53038
IGRlbm4= 53039
UHJldHR5 53040
IGZ5 53041
VHJpYW5nbGU= 53042
RmVhdHVyZWQ= 53043
KENvbW1vbg== 53044
X2VmZg== 53045
ICIiDQo= 53046
4bubaQ== 53047
X0xJTkVBUg== 53048
IFJpY2E= 53049
IGNhZsOp 53050
IGFwcGVsbA== 53051
IG5pdmVhdQ== 53052
ICYs 53053
IGZhYnJpY3M= 53054
X1BsYXllcg== 53055
IGh5Z2llbmU= 53056
IGRpc2FzdHJvdXM= 53057
IHNoYXJlZEluc3RhbmNl 53058
X3BpdGNo 53059
cno= 53060
ZW5tZW50 53061
TmVhcg== 53062
X1NUQVRT 53063
IHN0YWlu 53064
IEROQw== 53065
IGlzc3U= 53066
Xks= 53067
CXRyZWU= 53068
X2Jsaw== 53069
c2V6 53070
bGFpbg== 53071
YW11 53072
X293bmVk 53073
VVNBUlQ= 53074
Lmhhc0NsYXNz 53075
SVNPTg== 53076
IGZvZQ== 53077
dXNoZWQ= 53078
X1VOU0lHTkVE 53079
IGluZGV4aW5n 53080
IEZpcmViYXNlQXV0aA== 53081
IGxpdGVyYWN5 53082
IFNVUg== 53083
IENvbHRz 53084
YmVjdWU= 53085
IEludHJv 53086
IGNoYW90aWM= 53087
IGFuaQ== 53088
IEFubmll 53089
xrDhu50= 53090
LmR4 53091
ZGlzY29ubmVjdA== 53092
IGFyY2hpdmVk 53093
W0xpc3Q= 53094
PU4= 53095
LnByZXNlbnRhdGlvbg== 53096
UmVzdGF1cmFudA== 53097
IHJvY2tldHM= 53098
PWh0dHBz 53099
L29w 53100
IHB1cnNl 53101
IEtyaXM= 53102
IGNvcmFs 53103
c2V0UGFyYW1ldGVy 53104
IGlycmln 53105
UXVlZW4= 53106
TlNEYXRh 53107
IHZhc3RseQ== 53108
LkZpbGVz 53109
IGZlbWluaXNt 53110
KFN0cmVhbQ== 53111
IGF0cmli 53112
IGxpcXVpZGl0eQ== 53113
PEZpbGU= 53114
dHJhZw== 53115
W2NvbnRhaW5z 53116
IGhpbmRp 53117
CWNw 53118
aG9tZXBhZ2U= 53119
IHN1cnBhc3M= 53120
IGRheWxpZ2h0 53121
YXV0aG9yaXpl 53122
IENvbnNlcXVlbnRseQ== 53123
QXN5bmNSZXN1bHQ= 53124
IERpYXJ5 53125
LlBhdHRlcm4= 53126
LiovCg== 53127
ZW5zY2hhZnQ= 53128
IEp1ZGljaWFyeQ== 53129
QWR1bHQ= 53130
KCY6 53131
IGplb3BhcmQ= 53132
IEJsaXp6YXJk 53133
IGdn 53134
IjsvLw== 53135
WEhS 53136
IHBhc3N3ZA== 53137
Pn0= 53138
JyksJw== 53139
IGNvbXBhcmF0b3I= 53140
LmNoYWlu 53141
IGluc3VyZWQ= 53142
X0VER0U= 53143
IHR5bGtv 53144
X01BSk9S 53145
d2F2 53146
XEZpbGU= 53147
RW50cg== 53148
J2FwcA== 53149
IGZvcmdpdmVuZXNz 53150
CWRzdA== 53151
Ijot 53152
Lm1vbg== 53153
ICgKCg== 53154
IGNhcGl0YQ== 53155
IGluaXRDb21wb25lbnRz 53156
IHN3b3Jkcw== 53157
IE91dHB1dFN0cmVhbQ== 53158
IGhlYXJz 53159
IFNQQUNF 53160
LWluc3BpcmVk 53161
X2Jvb3Q= 53162
Lm5vbmU= 53163
LmdldElucHV0U3RyZWFt 53164
IGRldmlzZQ== 53165
IHBlZGlhdHJpYw== 53166
YW5zaQ== 53167
X3BhcnRpYWw= 53168
IHNoYXJk 53169
IGZ1cmlvdXM= 53170
IGRyYXdhYmxl 53171
JSku 53172
KGVt 53173
IEJha2U= 53174
CXBlcnJvcg== 53175
IFJlbGlnaW91cw== 53176
LSIr 53177
CQkJICAgICAgICAgICA= 53178
IFNlY3JldHM= 53179
KG5vcm1hbA== 53180
QUNFUw== 53181
IFN0b2NraG9sbQ== 53182
LW5vcm1hbA== 53183
IGFjY3VzdG9tZWQ= 53184
IGJvdXRpcXVl 53185
IFN3aW5n 53186
IGZpbQ== 53187
IFBV 53188
LlNvY2tldA== 53189
ICciJw== 53190
YW5q 53191
TWFudWFs 53192
IG11amVy 53193
IHBoeXNpb2xvZ2ljYWw= 53194
Y29udGFpbg== 53195
TWVyZ2U= 53196
IHN1YXM= 53197
ICd7Ig== 53198
bmVnbw== 53199
IHN1YnNjcmliZWQ= 53200
dG9hc3Q= 53201
X1ZFUkJPU0U= 53202
IGtuaXQ= 53203
IEFydGlzdHM= 53204
IGhlYXJ0YmVhdA== 53205
IGZpcmVmaWdodGVycw== 53206
c3Nh 53207
W3s= 53208
IHVuZGVyc2NvcmU= 53209
IGhpc3Rvcmllcw== 53210
aWdtb2lk 53211
RmllbGRWYWx1ZQ== 53212
VG9BZGQ= 53213
LkNv 53214
IEhhcm9sZA== 53215
QXZvaWQ= 53216
aWdoYm91cnM= 53217
b3JkZQ== 53218
IHRydXRocw== 53219
L2Fs 53220
IHdpcmVk 53221
IEl0YWxpYQ== 53222
IHNlcnZpY2lvcw== 53223
IEFVRElP 53224
ICciKw== 53225
IHB1bXBpbmc= 53226
IENsZW1lbnQ= 53227
w4NP 53228
5Y6f 53229
Pm4= 53230
IHN0clNxbA== 53231
amRiYw== 53232
4oE= 53233
CVNFVA== 53234
IEJVRkZFUg== 53235
Oi8vIg== 53236
IGNpcmN1bXN0YW5jZQ== 53237
VUlUYWJsZVZpZXdDZWxs 53238
LnZlcnRpY2Fs 53239
IEpvaG5z 53240
dG9saXN0 53241
IGRyaXZld2F5 53242
IGxlYXJuZXJz 53243
dG9iZXI= 53244
d2lubmVy 53245
LXlvdXI= 53246
LnN0YXRlcw== 53247
SE0= 53248
IGdyYWRpZW50cw== 53249
IHNlaXp1cmU= 53250
IG1hdGVy 53251
IGRldGFs 53252
IFJlZHVjZQ== 53253
KG1vdXNl 53254
IFJlU2hhcnBlcg== 53255
LXJvdXRpbmc= 53256
INi0 53257
IGpvaW50bHk= 53258
IEZhbWls 53259
PE1lc3NhZ2U= 53260
ZXhwaXJl 53261
X3RyYWRl 53262
4oCmLi4= 53263
IEZVTkNUSU9OUw== 53264
IHhlbg== 53265
IHt9Ow== 53266
RmFi 53267
IGZlYXN0 53268
KERi 53269
Rmlyc3RSZXNwb25kZXI= 53270
xLFsxLE= 53271
IG1heFZhbHVl 53272
IC06 53273
YXB0aWM= 53274
Lkdzb24= 53275
IFJvdmVy 53276
X2Nu 53277
bG91ZA== 53278
IGNoYW1iZXJz 53279
INC30LDQtA== 53280
LmZvcmVhY2g= 53281
LmdldEVtYWls 53282
55+l 53283
Lk5vZGVz 53284
IFZX 53285
IFdhaXRpbmc= 53286
KFF0Q29yZQ== 53287
IHPDs2xv 53288
cnE= 53289
YW5ndWFyZA== 53290
IHJlc2VtYmxlcw== 53291
Oltb 53292
IGdlZA== 53293
X0VQ 53294
KEFjdGl2aXR5 53295
IElzbg== 53296
IENydXNoZXJz 53297
X1JVTlRJTUU= 53298
CW9wZW4= 53299
IEhpZ2hsaWdodHM= 53300
w6lyYXRpb24= 53301
IHllbGxpbmc= 53302
IExJR0hU 53303
UGhvdA== 53304
dmVuZ2U= 53305
IFN1c3A= 53306
IENocg== 53307
LkRpc3RhbmNl 53308
YXJzaW1w 53309
bGljYXM= 53310
Lk1vbg== 53311
IHN1Y2tlZA== 53312
cHJpbnRlZA== 53313
bXV0ZQ== 53314
IHNldEVycm9y 53315
Lk9wdGlvbg== 53316
IGltcGFpcm1lbnQ= 53317
bm9pc2U= 53318
IHBhcnRuZXJlZA== 53319
w40= 53320
ZGVucw== 53321
aWN6 53322
IHdhaXRGb3I= 53323
IG92ZXJsb29raW5n 53324
IEZPUk1BVA== 53325
IFRTdHJpbmc= 53326
IHJlbnRpbmc= 53327
CWNvbXBvbmVudA== 53328
LkZyZWU= 53329
IExhdW5jaGVy 53330
PWRhdGU= 53331
IFBvZHM= 53332
QUdNRU5U 53333
Q29kaWdv 53334
Qml0RmllbGRz 53335
IHViaXF1 53336
LWNhcm91c2Vs 53337
IFNpbXVsYXRvcg== 53338
aW5vZGU= 53339
J10pewo= 53340
IEJhZ2hk 53341
IG5vcnRod2VzdA== 53342
aHRha2luZw== 53343
PCY= 53344
IHRyYW0= 53345
IGZvcndhcmRlZA== 53346
IGVycm9yTXNn 53347
X0FTU0lHTg== 53348
IEVudGl0aWVz 53349
LlBhcnQ= 53350
cmVhdHVyZQ== 53351
KFVyaQ== 53352
IERyaXZpbmc= 53353
IGludmFzaXZl 53354
aWdyYXRpb25CdWlsZGVy 53355
b3NhdXJz 53356
CXBvcnQ= 53357
IGJyYW4= 53358
aXR0aW5ncw== 53359
RG9vcg== 53360
IHsl 53361
KGxpbWl0 53362
IHNxdWFyZWQ= 53363
IERJU1BMQVk= 53364
LkFjY2VwdA== 53365
LmJhc2VVcmw= 53366
LkVudGVy 53367
IC4uLikK 53368
IG93bA== 53369
IHNsYXRlZA== 53370
LmZlY2hh 53371
X1NFRw== 53372
PXsk 53373
IE9OTElORQ== 53374
T05Z 53375
INC00LDQvdC90YvRhQ== 53376
b250ZQ== 53377
X0NMSUNL 53378
U2E= 53379
SW1wb3J0YW50 53380
IGNhcm91c2Vs 53381
IGFwcGVhbGVk 53382
IE5pZQ== 53383
L2Jvb2s= 53384
W10+KA== 53385
IHhtYXg= 53386
IGxhbmdl 53387
LlN1cHByZXNz 53388
IFRoaW5raW5n 53389
QWRkcmVzc2Vz 53390
IFNhbGx5 53391
LVRW 53392
IENoYXJsZXN0b24= 53393
KSIKCg== 53394
IHRhbGx5 53395
IHVsbA== 53396
IGxvY2FsZXM= 53397
ZXdhbg== 53398
IGluY3JlbWVudGFs 53399
65Cc 53400
IGNhcmV0 53401
anVyZQ== 53402
IGRvcg== 53403
IGxvY2FsaXphdGlvbg== 53404
IHNlYWZvb2Q= 53405
IFJ1YmJlcg== 53406
LlRoZXJl 53407
IEZpc2hpbmc= 53408
WVlZ 53409
bWFnZQ== 53410
IEZsZXhpYmxl 53411
IEdFTkVSQUw= 53412
ZWth 53413
IHRocml2aW5n 53414
IHNpcw== 53415
IGJvdXJnZW9pcw== 53416
RmFrZQ== 53417
LFwi 53418
INC+0LQ= 53419
Q09S 53420
LWVmZmVjdGl2ZQ== 53421
IHNrdQ== 53422
ZWRseQ== 53423
IyMKCg== 53424
IEhvbGx5 53425
IEZMQVNI 53426
L1RS 53427
Lm5z 53428
cHJvYmU= 53429
Z2lmdA== 53430
b3dpdHo= 53431
LW5hdmJhcg== 53432
IHNhY2s= 53433
57qn 53434
IFRocmVhdA== 53435
WkE= 53436
WE0= 53437
JyksCgo= 53438
IExMVk0= 53439
YXN6 53440
RWRpdGVk 53441
V2l0aFN0cmluZw== 53442
U2lsdmVy 53443
eW5h 53444
X3JlbmRlcmVy 53445
CURFQlVH 53446
KG9wZXJhdGlvbg== 53447
IFNsb3Rz 53448
IEF1YnVybg== 53449
eGVj 53450
IGhvbW9zZXh1YWxpdHk= 53451
LlJlc3RDb250cm9sbGVy 53452
ZXJzaXZl 53453
IHByb2ZpbA== 53454
IE15YW5tYXI= 53455
cm9zc2U= 53456
X0lSUW4= 53457
IHNlbmRNZXNzYWdl 53458
IHRlY2huaWNpYW5z 53459
IG1hbmU= 53460
Y29tbW9ucw== 53461
IHNocmVkZA== 53462
Qm9vc3Q= 53463
IHN5bXBhdGhldGlj 53464
LWVmZg== 53465
IENlcnRhaW5seQ== 53466
IHfDpGg= 53467
IFJvY2hlc3Rlcg== 53468
dWNjaQ== 53469
dXJt 53470
ZW1wb3I= 53471
ICIiOgo= 53472
LXNwYWNpbmc= 53473
IHNpeHR5 53474
IOKckw== 53475
X3JlcG9ydGluZw== 53476
V2ls 53477
b3lv 53478
IGRpZFNlbGVjdA== 53479
LmdldExvbmc= 53480
LnNldEVycm9y 53481
X25j 53482
IERvbmc= 53483
CWFzeW5j 53484
IEhpZ2hseQ== 53485
XToNCg== 53486
TGVha3M= 53487
LC4uLgo= 53488
dmFsdWF0b3I= 53489
ZGljdGlvbnM= 53490
b3hlbA== 53491
IGdlc3R1cmVz 53492
PSI/ 53493
YmFncw== 53494
IFJlbGllZg== 53495
c3Vic2V0ZXE= 53496
KG5hbWVzcGFjZQ== 53497
fXw= 53498
IG1pY3JvYmk= 53499
IHB1cml0eQ== 53500
Y2hpbw== 53501
fT8= 53502
X01VVA== 53503
X2FjdGl2YXRpb24= 53504
IFBpcmF0ZXM= 53505
ICUj 53506
aWZpY2FjacOzbg== 53507
5Ys= 53508
IE5SQQ== 53509
w6dvbg== 53510
fSkoKTsK 53511
IENoZXN0ZXI= 53512
4oCT4oCT 53513
Z2V0Q29ubmVjdGlvbg== 53514
LmFyZ3VtZW50cw== 53515
RmV0Y2hpbmc= 53516
IEZyeQ== 53517
IERpdA== 53518
IHppY2g= 53519
cGFzdA== 53520
LWxpYnJhcnk= 53521
IEhheWVz 53522
IGJvdW50eQ== 53523
IFNwcmluZ2ZpZWxk 53524
UE9S 53525
IEFQUg== 53526
IEVtYmFzc3k= 53527
UVVFU1RJT04= 53528
IFNvbGRpZXI= 53529
ZXJ0YXM= 53530
IE5PUk1BTA== 53531
IGR1cw== 53532
Ym9sdA== 53533
IGRvcnQ= 53534
IExpZnQ= 53535
IGdldFJhbmRvbQ== 53536
LlJ1bldpdGg= 53537
LCksCg== 53538
IHZhcmFyZ2lu 53539
IGhhbmRsZUNsaWNr 53540
XEh0bWw= 53541
IGhvbW1lcw== 53542
Y2lkYWRl 53543
KGVw 53544
SmE= 53545
L2RpYWxvZw== 53546
LnJhdGU= 53547
IFdlaQ== 53548
ZnVsbHNjcmVlbg== 53549
IE5Vbml0 53550
Lm1lYXN1cmU= 53551
VmFscw== 53552
IFNpZ25lZA== 53553
IHJ1cw== 53554
IHJhZnQ= 53555
IEJsb25kZQ== 53556
IG5ldHM= 53557
IE1ldHJpYw== 53558
aWNoVGV4dEJveA== 53559
IHVyZQ== 53560
IGludGVycmFjaWFs 53561
ICd9Cg== 53562
KHN0b3JhZ2U= 53563
SW50ZWdyYXRpb24= 53564
IGJhbmNv 53565
QVNZ 53566
IGppbnQ= 53567
IGRlZ3JhZGF0aW9u 53568
IEhBTkQ= 53569
dWVyZG8= 53570
PScn 53571
IHN0cm9rZXM= 53572
cmV3cml0ZQ== 53573
KFNldA== 53574
IE1hdERpYWxvZw== 53575
IGRvc3NpZXI= 53576
CWFuZA== 53577
QURESU5H 53578
IG11dHVhbGx5 53579
IHByZWNlZGVk 53580
fX07Cg== 53581
IHN1YnR5cGU= 53582
IHJlc29sdmluZw== 53583
IGdlb21ldHJpYw== 53584
W2NvbHVtbg== 53585
IENUUkw= 53586
IEhM 53587
IGRhaA== 53588
ICg7Ow== 53589
UmFpbHM= 53590
w5w= 53591
IEdlbmVyYXRlcw== 53592
LUxlbmd0aA== 53593
cGVkbw== 53594
b2dlbm91cw== 53595
IFJvYmVydHNvbg== 53596
LkJvb2w= 53597
b2RlcnM= 53598
X0FHRU5U 53599
cGFzc3dk 53600
IE5vZGVz 53601
LmJp 53602
IFdC 53603
IHByb3BoZXQ= 53604
c2xhdmU= 53605
IOW8 53606
IHdlaWw= 53607
JTwv 53608
IGNhcmJz 53609
5rC0 53610
IGV4cHJlc3NseQ== 53611
XHhk 53612
LWV5ZWQ= 53613
IENyZWF0dXJl 53614
Y29udGFpbmVk 53615
KFNJRw== 53616
IEVuaGFuY2VtZW50 53617
IENvcnM= 53618
R2Fs 53619
X1NJR05BTA== 53620
cmVpbnRlcnByZXQ= 53621
IFFQdXNoQnV0dG9u 53622
X05vbmU= 53623
IGdlbm9jaWRl 53624
IFNlYWw= 53625
5LiK5Lyg 53626
KHBlcg== 53627
0LvRjNGC 53628
IMOgcw== 53629
LlRlbXBsYXRl 53630
ICkNCg0K 53631
LnNpbmdsZXRvbg== 53632
CXNsZWVw 53633
IHNwYXduZWQ= 53634
IHBvc3Nlc3Npb25z 53635
Z2V0Q29uZmln 53636
IHRhaQ== 53637
bHVkZQ== 53638
IE1ldGVy 53639
IGJpYmxpY2Fs 53640
bWFyc2hhbGxlcg== 53641
LlRvb2xraXQ= 53642
IExlc2JpYW4= 53643
LnNtYXJ0 53644
IGJveWNvdHQ= 53645
IGZyeQ== 53646
LWRlc2M= 53647
X1NlcnZpY2U= 53648
IG1hY2h0 53649
IENhaXJv 53650
w6Bp 53651
X3ByZXZpb3Vz 53652
LnRyYW5zcG9ydA== 53653
TWVkaWNhbA== 53654
Q0dQb2ludA== 53655
UVVBUkU= 53656
IGJyaWdodGVy 53657
IGNoZWNrQm94 53658
IEZPVU5E 53659
LmJyYW5jaA== 53660
IGJsYWg= 53661
IFByZWx1ZGU= 53662
T2ZmbGluZQ== 53663
TGlzdGluZw== 53664
LyoqLyou 53665
IEpS 53666
cGhhbnRz 53667
Z2V0WQ== 53668
LkZpbmRDb250cm9s 53669
Ii4uLg== 53670
0LrQtQ== 53671
SFJFU1VMVA== 53672
IGNoZWNrbGlzdA== 53673
KGFzdA== 53674
IGJvcnJvd2luZw== 53675
4oCmYW5k 53676
INCX 53677
IHByb2N1cmVtZW50 53678
LXRhc2s= 53679
X2hhbA== 53680
UGxheWxpc3Q= 53681
LnN0YXI= 53682
X1NVUFBPUlRFRA== 53683
QVNN 53684
JUE= 53685
cmVzdHJpYWw= 53686
INC40YHQvw== 53687
IHBhZ2Vy 53688
IERpYWJldGVz 53689
IE1haGFy 53690
dGFu 53691
QWN0dWFsbHk= 53692
Pi8v 53693
IFhW 53694
4KeN 53695
IHNlamE= 53696
LnZpc3VhbA== 53697
a2tlcg== 53698
XTsKCgo= 53699
IHR5cGVOYW1l 53700
LkJ1dA== 53701
Q2xpZW50UmVjdA== 53702
aWNhbHM= 53703
IERqYW5nbw== 53704
IFJhcGU= 53705
IHBheWRheQ== 53706
KHJlc291cmNlcw== 53707
LmJpeg== 53708
dG9p 53709
KFJ1bnRpbWU= 53710
IER5bmFtaWNz 53711
IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24= 53712
KHR5cGVz 53713
IFRhYnM= 53714
Lk1pZGRsZUxlZnQ= 53715
eGFi 53716
IF8o 53717
IERyZWFtcw== 53718
X0dyb3Vw 53719
KGNvcg== 53720
TGVhZGVy 53721
IGdyYWR1YWw= 53722
KEJpZ0RlY2ltYWw= 53723
IHRleHRhcmVh 53724
bGV0aW9u 53725
IEZpbmlzaGVk 53726
IFBvbGU= 53727
IHRhcHBpbmc= 53728
Jig= 53729
IGZsaXJ0 53730
IHRlcnJpZmllZA== 53731
IHBhZHk= 53732
ZXJlZw== 53733
ZWxkb20= 53734
IHN0YXRpb25hcnk= 53735
IHBvbnk= 53736
IFJFR0lTVEVS 53737
X2FjY2Vs 53738
IEhlcno= 53739
IG1hdHJpeg== 53740
IENhZg== 53741
eGFj 53742
YXNjdXM= 53743
IGVubGFyZ2U= 53744
QUNIRUQ= 53745
eXl2YWw= 53746
IHNpYw== 53747
IENhbmFs 53748
OnY= 53749
PT8s 53750
IEltcHJvdmVtZW50 53751
P30iLA== 53752
TlNPYmplY3Q= 53753
IGVzY2FwaW5n 53754
IE51bGxhYmxl 53755
IGjDpA== 53756
d2FudA== 53757
RWxpbWluYXI= 53758
IENMTG9jYXRpb24= 53759
IHJldXNlSWRlbnRpZmllcg== 53760
QnVmZmVyU2l6ZQ== 53761
w59lcg== 53762
IEFza2Vk 53763
J11dLAo= 53764
IHNoaWVsZHM= 53765
Z3JhbmQ= 53766
IFRvd25zaGlw 53767
IFB1Yk1lZA== 53768
ZWN0bA== 53769
Zml2ZQ== 53770
IFJlYWN0aXZlRm9ybXNNb2R1bGU= 53771
IEdMZW51bQ== 53772
RGFy 53773
aWZhY2U= 53774
LWluZGVudA== 53775
Rm9ybXVsYQ== 53776
LnNuYXBzaG90 53777
Q09NUEFSRQ== 53778
IGJlbHRz 53779
CWNhY2hl 53780
bGRhdGE= 53781
IGVkYWQ= 53782
IEJPWA== 53783
KGNhcnQ= 53784
X0xBWU9VVA== 53785
IGZmbHVzaA== 53786
IExPUw== 53787
IFNvcnRlZA== 53788
LnNsaWRl 53789
IHRpamQ= 53790
IFRleGFucw== 53791
IFB1cmNo 53792
IExldmVscw== 53793
IHNlbWFudGljcw== 53794
IFRlaHJhbg== 53795
Ym1w 53796
LnVybGVuY29kZWQ= 53797
X3hsYWJlbA== 53798
KGd1bHA= 53799
IEJ1dHRvbnM= 53800
IEJyb2tlcg== 53801
55uR5ZCs 53802
JGVtYWls 53803
2ZA= 53804
IGNsYXNzaWNz 53805
Y29tcG9zZQ== 53806
KGJz 53807
IHVuaGVhbHRoeQ== 53808
RXhlcmNpc2U= 53809
Y3JldHM= 53810
IFBhcnM= 53811
IERldGVybWluZXM= 53812
YWZvcnQ= 53813
KG9icw== 53814
IG5hc3Q= 53815
IGlocmVu 53816
IHJveWFsdHk= 53817
c2VyaWFsaXplcg== 53818
aWV1eA== 53819
ICAgICAgICAgICAgICAgICAgICAgIAo= 53820
ZXhlY3V0aW9u 53821
IHZpZXdDb250cm9sbGVy 53822
IHJlcHJv 53823
LnBl 53824
IGNhcGl0YWxpemU= 53825
5Ye7 53826
IHR1bm5lbHM= 53827
LkRBVEE= 53828
cGlyaXQ= 53829
Q29sbGVjdGlvbnM= 53830
KX19 53831
IE9E 53832
IGZ1enp5 53833
SW1tZWRpYXRl 53834
bGo= 53835
Oz8+Ig== 53836
W3Zhcg== 53837
IHZvbGF0aWxpdHk= 53838
cmVnbG8= 53839
IHByb2xpZmVyYXRpb24= 53840
IG9yYWNsZQ== 53841
IEN2 53842
IG51bmNh 53843
UFJJTlRG 53844
IGJyZWFrcG9pbnQ= 53845
LkVO 53846
IGJlc3Rlbg== 53847
IHJlYmVsbGlvbg== 53848
UGF1c2Vk 53849
IGZsb3du 53850
IHZpY2luaXR5 53851
d3JpZ2h0 53852
LGNw 53853
aXNjaW5n 53854
b3VjaGVycw== 53855
QXNo 53856
eWFy 53857
IEVq 53858
cmVwcmVzZW50ZWQ= 53859
b2RpYw== 53860
LmNyb3Nz 53861
IGNyZWF0aW9ucw== 53862
IFBhYmxv 53863
ZmVzdA== 53864
IEhpbHRvbg== 53865
UmVwb3J0ZXI= 53866
IERpbA== 53867
aWxlbmFtZXM= 53868
IGV4cGVuZGl0dXJlcw== 53869
X0VESVRPUg== 53870
IEFyaWFs 53871
IHBsdW5n 53872
IHVubmFtZWQ= 53873
T3JFbHNl 53874
IHJlY3JlYXRl 53875
IEhlYXJ0cw== 53876
PmFsZXJ0 53877
LmdldFBhc3N3b3Jk 53878
IE11c3Rhbmc= 53879
Vks= 53880
IGFjY29tcGxpc2htZW50cw== 53881
QXBwZW5kaW5n 53882
IENheQ== 53883
IFVzZXJNb2RlbA== 53884
IHN1YnN5c3RlbQ== 53885
TGVnYWw= 53886
eW5jaHJvbml6ZQ== 53887
X1BFUk1JU1NJT04= 53888
IEFwYXJ0bWVudA== 53889
bGlnZQ== 53890
IGFmZmlsaWF0aW9u 53891
KERFQlVH 53892
VHM= 53893
IENvbG9yaW5n 53894
IFdvaG4= 53895
bmljZQ== 53896
KGxpc3Rh 53897
4LE= 53898
cGxveW1lbnQ= 53899
44G+44Gf 53900
5aW9 53901
c3Vic3Q= 53902
J11dWyc= 53903
YWJvbA== 53904
PSdf 53905
4KeN4KY= 53906
b3JwaGlzbQ== 53907
LmxpdGVyYWw= 53908
IFBsdWc= 53909
IG13 53910
b21hbA== 53911
ICInIiw= 53912
dXNp 53913
IHNpZ2hlZA== 53914
aWN1bHR1cmFs 53915
Lios 53916
IFByb3N0aXQ= 53917
KGNvbnNvbGU= 53918
SVBMRQ== 53919
IFRyYXA= 53920
WFI= 53921
IEVkaXRvckdVSUxheW91dA== 53922
X3ZvY2Fi 53923
IGluY29tcGF0aWJsZQ== 53924
IHVuY29uc3RpdHV0aW9uYWw= 53925
LWxh 53926
IGVyb3RpcXVl 53927
IGRlcHV0aWVz 53928
cXVpc2l0aW9ucw== 53929
bmV3VmFsdWU= 53930
YWRpYQ== 53931
IGh3bmQ= 53932
Z2luZ3M= 53933
IFZhcw== 53934
IEluY3JlbWVudA== 53935
IEZsaW50 53936
YW1iaWE= 53937
X1BvaW50 53938
LWRpc3BsYXk= 53939
IEZ1bm55 53940
LnRvYXN0 53941
LmRhcms= 53942
QmluZGluZ3M= 53943
IGRlc2NyaXB0aXZl 53944
YXJlbmQ= 53945
LlJldA== 53946
IHJlY3Vyc2l2ZWx5 53947
IE1r 53948
IFRJTEU= 53949
LmNyZWF0ZVRleHROb2Rl 53950
IFJBVw== 53951
IGluZmx1eA== 53952
54mp 53953
VG9r 53954
LWJvYXJk 53955
UmVjb3JkaW5n 53956
U3RyZW5ndGg= 53957
IHJhaW5mYWxs 53958
KGRk 53959
LmZ4bWw= 53960
bmV0cw== 53961
LkltYWdpbmc= 53962
IEJJT1M= 53963
XSsi 53964
T0U= 53965
IHJlc2lkZW5jeQ== 53966
WkU= 53967
V0I= 53968
LnNwYW4= 53969
X2RlZmluZWQ= 53970
Qk9U 53971
Pm51bGw= 53972
Zm9ybURhdGE= 53973
Q3BwTWV0aG9kSW5pdGlhbGl6ZWQ= 53974
X1VTRVJT 53975
IE5vdmVs 53976
aW5za2k= 53977
PntA 53978
ZXR0bw== 53979
bmF0dXJhbA== 53980
IFN0cmljdA== 53981
Onc= 53982
LnNhZmU= 53983
IHRvd2Vscw== 53984
4bqtdA== 53985
LmdzdWI= 53986
66M= 53987
aW5xdQ== 53988
IGFpZGVz 53989
IGluY29t 53990
Z2V0dGVy 53991
IHdhc2hlcg== 53992
YWN0b3JpZXM= 53993
IGdldHRlcnM= 53994
bWl0ZQ== 53995
X3NvdXJjZXM= 53996
IGhhcm1sZXNz 53997
IHVub3M= 53998
cHJlaGVuc2l2ZQ== 53999
IG5vZG8= 54000
IGdlb2dyYXBoaWNhbA== 54001
IFNlbGVjdExpc3Q= 54002
LlNjcmlwdA== 54003
LkVudW1z 54004
IEVOVEVS 54005
d2FsZA== 54006
IEJhcm9u 54007
IHBhcnRpY3Vs 54008
LmN1cnJlbnRQYWdl 54009
QFRyYW5zYWN0aW9uYWw= 54010
W2xpbmU= 54011
CWRlcw== 54012
SmFzb24= 54013
LmdldENvdW50 54014
IFBlbm55 54015
IFBheWxvYWQ= 54016
c2hhcnA= 54017
W3JpZ2h0 54018
dmVudGE= 54019
IGFwbA== 54020
IHByb2R1aXRz 54021
IG90dA== 54022
VHJhY2tz 54023
LkFuZHJvaWQ= 54024
IHNpbGljb25l 54025
IEVMU0U= 54026
YW5pbWF0aW9ucw== 54027
dWx0dXJlSW5mbw== 54028
IGJsdWVwcmludA== 54029
b2ZzdHJlYW0= 54030
IFtdW10= 54031
IFNlcnZl 54032
IHRyaWc= 54033
CXNlcnZpY2U= 54034
IFN0cmF0 54035
IFNhdmFnZQ== 54036
IG9ianM= 54037
IE5vdGlmaWNhdGlvbnM= 54038
LHBvcw== 54039
VGhpbmc= 54040
IFJCSQ== 54041
b3BhdGh5 54042
IG5hdWdodHk= 54043
bGJz 54044
ZXByb20= 54045
PiIu 54046
IHBpb25lZXI= 54047
IGphcGFuZXNl 54048
QXVk 54049
IGFsbGV5 54050
IFBldHNj 54051
J10/Pg== 54052
IEtpbGxlcg== 54053
LmdldEFic29sdXRlUGF0aA== 54054
X2NhcHM= 54055
xas= 54056
IHN1YnN0cmF0ZQ== 54057
LmFzc2VydElu 54058
7JWE 54059
IHRoeXJvaWQ= 54060
IERlbHV4ZQ== 54061
IGZhY3RvcmlhbA== 54062
IHByZXNzZXM= 54063
IEFjY29t 54064
PW9wZW4= 54065
LmdldFM= 54066
IGV4cGxvcmVy 54067
IHJlc2lkZXM= 54068
QXNzb2NpYXRlZA== 54069
IHRyYW5zZm9ybWF0aW9ucw== 54070
VHU= 54071
IFJpY2hhcmRz 54072
X2JpcnRo 54073
PSN7 54074
LXNwZQ== 54075
KG5k 54076
IHZpc3VhbHM= 54077
X3N0YW1w 54078
IHRlcm1pbmFscw== 54079
cm91dGluZQ== 54080
KioqLwo= 54081
IEphYg== 54082
S0w= 54083
Q29udHJpYg== 54084
IHNvdXRod2VzdA== 54085
IFBlcA== 54086
CWVudGl0eQ== 54087
IGxpbmVy 54088
LlN0YXR1c09L 54089
IFNjaHVs 54090
KENM 54091
IG1pam4= 54092
YXN0b3M= 54093
X2RpZ2VzdA== 54094
IHBlcnNpc3RlZA== 54095
LWNvbnRhY3Q= 54096
IG9kb3I= 54097
IGRpc2NvdmVyaWVz 54098
X0ZJRUxEUw== 54099
Rmx5 54100
IHJ6 54101
IExpc3Rh 54102
UmVzZXJ2ZWQ= 54103
dGF4b25vbXk= 54104
KXNlY3Rpb24= 54105
LyIpCg== 54106
L3JlcXVlc3Q= 54107
IHNvbWVkYXk= 54108
Y2l0aWVz 54109
L2ZpcmU= 54110
IG9iamVjdGlvbnM= 54111
CURFQ0xBUkU= 54112
Lm5hdmlnYXRpb25JdGVt 54113
LnNldGRlZmF1bHQ= 54114
cmV0dXJuVmFsdWU= 54115
VUNDRUVERUQ= 54116
IG9ibGlnZWQ= 54117
IFFhZWRh 54118
IGh5c3Rlcg== 54119
ZXN0aGVz 54120
ZGlzdGluY3Q= 54121
w6B5 54122
IENvbWJv 54123
CXNm 54124
IOKK 54125
IGRpc2NyZXBhbg== 54126
IGluc2lnbg== 54127
IFJFU1VMVFM= 54128
IFZhbGlkYXRpb25FcnJvcg== 54129
IEh0dHBSZXNwb25zZVJlZGlyZWN0 54130
CVFTdHJpbmc= 54131
IGF1dG9mb2N1cw== 54132
RHVy 54133
IFJFTEVBU0U= 54134
LWRvbGxhcg== 54135
LkNvbW1pdA== 54136
IGtow7RuZw== 54137
IGxhdW5kZXI= 54138
Lj0i 54139
IOaWhw== 54140
IGJ5ZQ== 54141
LkdldEtleURvd24= 54142
IGdpbw== 54143
X3NpZA== 54144
IGdxbA== 54145
LmNt 54146
X1NMT1Q= 54147
LkdldEluc3RhbmNl 54148
cmV1c2U= 54149
LnNodXRkb3du 54150
IGplcnNleXM= 54151
X01Q 54152
cGF0aWJpbGl0eQ== 54153
IOiuvue9rg== 54154
IHJlcGxhY2VtZW50cw== 54155
IHByZWNlZGVuY2U= 54156
IGJ1ZmZlcmVk 54157
LmJz 54158
X0dSRUVO 54159
YnJhaW4= 54160
w6FjaA== 54161
YXZhaWxhYmlsaXR5 54162
IEVURg== 54163
IGZyZXQ= 54164
aXN0aW5l 54165
IGxpZnRz 54166
RXhpc3Rpbmc= 54167
IHN0ZXJlb3R5cGVz 54168
IGVtcHQ= 54169
bW9uZ28= 54170
LnRyYWluaW5n 54171
YWxpc3Q= 54172
LklzRW5hYmxlZA== 54173
ICIh 54174
PD8K 54175
dWlkbw== 54176
IGludFZhbHVl 54177
LmVsYXN0aWNzZWFyY2g= 54178
TE9HSU4= 54179
IHJlbGlhbmNl 54180
IHZpZXdUeXBl 54181
IGRpbWluaXNoZWQ= 54182
U2FyYWg= 54183
IEFwcHJvYWNo 54184
X1dFQg== 54185
IGRybQ== 54186
IGNvbHVtbmlzdA== 54187
TWFya3Vw 54188
IGFxdcOt 54189
IERpYW5l 54190
IGN3 54191
IFRpY2s= 54192
Lm9ic2VydmU= 54193
SVJPTg== 54194
SW5CYWNrZ3JvdW5k 54195
IGVib255 54196
IENvdXJ0ZXN5 54197
Om51bGw= 54198
KioqKioqKi8KCg== 54199
L3Jlc291cmNl 54200
SXRlcmF0aW9u 54201
ZGVmYXVsdFZhbHVl 54202
YXR0ZW50aW9u 54203
INGA0LDQsdC+0YI= 54204
IHdhaXZlcg== 54205
IHByb2R1aXQ= 54206
IEdyYWRpZW50 54207
IHBlcmNlbnRhZ2Vz 54208
IFNBTA== 54209
IE1k 54210
KHNuYXBzaG90 54211
CWlv 54212
aWtlcnM= 54213
V2VicGFjaw== 54214
IHNldFBhc3N3b3Jk 54215
IGRlZmVhdGluZw== 54216
IEplZw== 54217
ZWxhcHNlZA== 54218
aG9sZHM= 54219
X3NoYWRvdw== 54220
IG9mZmVuZGVk 54221
IFBhbnQ= 54222
IENhbGxhYmxl 54223
X0lORk9STUFUSU9O 54224
ZmZlZQ== 54225
KGVtcGxveWVl 54226
IFlBTUw= 54227
cG9zc2libHk= 54228
IG1heGltYWw= 54229
ZWxsdWxhcg== 54230
IFNueWRlcg== 54231
ZGVzY3JpcHRvcg== 54232
IFBMRUFTRQ== 54233
RGxnSXRlbQ== 54234
IGFydGlsbGVyeQ== 54235
YH0K 54236
cG9zaXVt 54237
IGxlZXI= 54238
JWM= 54239
IGRpc3Bvcw== 54240
Lm11bA== 54241
IGdlb2dyYXBoeQ== 54242
IGdyYXBoaWNhbA== 54243
IGRyYW5r 54244
IG1vdGlvbnM= 54245
IHJ1dGg= 54246
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 54247
IHByb2R1Y3Rpb25z 54248
IGNyZWF0ZVRpbWU= 54249
IFNjcmlwdHVyZQ== 54250
YmJi 54251
dWNocw== 54252
5LiN6IO9 54253
LkJpZ0RlY2ltYWw= 54254
c2l6ZXM= 54255
X3NvbHZlcg== 54256
X0Zyb20= 54257
X2pvaW50 54258
IHBhdGhsaWI= 54259
IGdlYXJz 54260
INGE0L7RgNC8 54261
IGNvbmNlYWw= 54262
IGRpZmZlcmVudGlhdGU= 54263
PEdhbWVPYmplY3Q= 54264
IGplZGVu 54265
IGFsbw== 54266
Z2xvYmFscw== 54267
ZXJ2YXRpdmU= 54268
IHBhZGQ= 54269
IFBseQ== 54270
X3R5 54271
IHByZXNlbnRl 54272
IHByb3ByaWV0 54273
X2xz 54274
IFB1bmNo 54275
IENyYXdmb3Jk 54276
YmVsb3c= 54277
Q3BwR2VuZXJpYw== 54278
IENPTlRST0w= 54279
IG9jZWFucw== 54280
IFJPVVQ= 54281
IHJhbmRpbnQ= 54282
CWFkZHI= 54283
IEhvbmVzdA== 54284
IGVudmVsb3A= 54285
IHRyYXVtYXRpYw== 54286
IExBVA== 54287
IHRn 54288
7Iqk7Yq4 54289
RXh0ZW5kZWQ= 54290
IHVuY2hlY2tlZA== 54291
IG9ic3RydWN0 54292
X3RpbWV6b25l 54293
UGVyc2lzdGVudA== 54294
IGxsZXY= 54295
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo= 54296
IEZsYQ== 54297
LnBoeXNpY3M= 54298
IGZvcmdlZA== 54299
IExhdXI= 54300
IG1vbm9wb2x5 54301
IGNocmlzdG1hcw== 54302
Z292 54303
IFNtb2tl 54304
W2Rm 54305
IGJpc2hvcA== 54306
bG9jYWxPYmplY3Q= 54307
b3JyaA== 54308
b250dmFuZ3N0 54309
ZHJ5 54310
IGVyZm9s 54311
LWNl 54312
IE9yZGVyZWREaWN0 54313
IGh4 54314
IFJFU0VU 54315
U3Vj 54316
IHJlY2tsZXNz 54317
YWxhbWF0 54318
QmlnSW50ZWdlcg== 54319
IGJ1bGJz 54320
IG11dGU= 54321
5pS+ 54322
LlVsdHJh 54323
TG9u 54324
IGNsZWFyVGltZW91dA== 54325
PFJpZ2lkYm9keQ== 54326
c3dpcGVy 54327
IENvbWVz 54328
XGRi 54329
CW1w 54330
IHJlc3Rz 54331
TW92ZWQ= 54332
IExvcmU= 54333
LkRpbWVuc2lvbg== 54334
IE1hbml0 54335
Lmh4eA== 54336
PT09PT09PQ== 54337
cGl0Y2g= 54338
ZmZpZWxk 54339
c2tpbGxz 54340
X2FsYnVt 54341
dHJhbnNsYXRlZA== 54342
IFhJ 54343
IHZlaW4= 54344
IERhdmlkc29u 54345
IEF1Y2tsYW5k 54346
eXNzZXk= 54347
IGF1dGhlbnRpY2l0eQ== 54348
IEFzc2lzdA== 54349
IGNvbXByaXNl 54350
Q3JlYXRlVGltZQ== 54351
IHRyZW5jaA== 54352
LndlZWs= 54353
LS07 54354
IFVJQWxlcnRDb250cm9sbGVy 54355
X3JlbGF0ZWQ= 54356
Q01T 54357
cmVtZWx5 54358
IGxleGVy 54359
aXJtd2FyZQ== 54360
RWxlbWVudHNCeQ== 54361
LXVwcGVy 54362
IHN0YWdu 54363
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 54364
X3NuYXBzaG90 54365
L1hNTFNjaGVtYQ== 54366
X09yZGVy 54367
IGFubmV4 54368
X0VOQ09E 54369
IEFsdG8= 54370
YXJpb3Vz 54371
REo= 54372
IGFib3J0aW9ucw== 54373
Q29tYmF0 54374
IExpY2VuY2U= 54375
dWdnZXN0ZWQ= 54376
W0s= 54377
LCkpCg== 54378
KCcvLw== 54379
LkNhbg== 54380
c2Vjcw== 54381
cXVvdGVz 54382
X3RyeQ== 54383
IFNhZ2U= 54384
IE1vdg== 54385
J29u 54386
cmVnaXN0 54387
IFdyaXRlcw== 54388
IERpZ2VzdA== 54389
CWNvbnRhaW5lcg== 54390
LXByb2dyZXNz 54391
IGdvYXQ= 54392
X3NjaGVtZQ== 54393
LkdldENoaWxk 54394
IGFzeW0= 54395
Lm15YmF0aXNwbHVz 54396
YXRpY2E= 54397
cGdzcWw= 54398
X2Fzc2V0cw== 54399
Pks= 54400
IGFmaW4= 54401
TlNT 54402
IE5BVg== 54403
KCcuJyw= 54404
IGAi 54405
IGF1ZGl0b3I= 54406
X01PVVNF 54407
IHdhbGxldHM= 54408
IG1vdQ== 54409
cnVucw== 54410
ZXRlcmFuZ2Fu 54411
IFJlc2VydmF0aW9u 54412
IGV4cGVyaWVuY2lh 54413
CXByb2Nlc3M= 54414
LWltcG9ydA== 54415
X1JldHVybg== 54416
IE1hY3Jv 54417
IFBlbmlz 54418
cGl4ZWxz 54419
IHNldEVtYWls 54420
KE1pZ3JhdGlvbkJ1aWxkZXI= 54421
KHhz 54422
IEVzdG9u 54423
IEJ1YmJsZQ== 54424
QUxMT1c= 54425
CWhhbmRsZXI= 54426
JHJldA== 54427
IGNvbXBsaW1lbnRhcnk= 54428
LWNpdHk= 54429
IGVsbG9z 54430
IFNPVVJDRQ== 54431
IEFkdmlzb3I= 54432
b2xvZ8OtYQ== 54433
IGZhZGVk 54434
LnBj 54435
X1JHQkE= 54436
QUZY 54437
IHJlcGF5 54438
IEZhbGNvbnM= 54439
X2lzc3Vl 54440
b21pZG91 54441
LmJhb21pZG91 54442
IGluZnJpbmdlbWVudA== 54443
dXJuaW5n 54444
L3N0b3JhZ2U= 54445
X3F1YW50 54446
IFF0Q29yZQ== 54447
IG1lbGw= 54448
X2RlbnNpdHk= 54449
IEtub3g= 54450
IFN1cnZpdmFs 54451
LmdldFVzZXJuYW1l 54452
IGNvbW1lcmNpYWxseQ== 54453
Z3Jhc3M= 54454
IG1laXM= 54455
5Lq/ 54456
IFBlcm1pc3Npb25z 54457
X1FVT1RFUw== 54458
aXBob25l 54459
IExPVA== 54460
IHRocmlsbGVy 54461
IENoYXBlbA== 54462
IFJpcw== 54463
Pmk= 54464
LUlE 54465
IHJpZ2h0bHk= 54466
Q3J5cHQ= 54467
IElzdGFuYnVs 54468
cmVkcw== 54469
X3Jlc2l6ZQ== 54470
UG9wdWxhdGlvbg== 54471
KGZldGNo 54472
IEhPVA== 54473
OmZpcnN0 54474
IGdhZGdldHM= 54475
UHlPYmplY3Q= 54476
IG1lcmdpbmc= 54477
ZHVjZWQ= 54478
bGVnYXRlcw== 54479
dWJlY3Rs 54480
JS8= 54481
YWxsZWU= 54482
IHp1c2FtbWVu 54483
LlByb3BUeXBlcw== 54484
YXN0bw== 54485
Oio= 54486
cmVjZQ== 54487
UmVzcG9uc2VUeXBl 54488
L2dyb3Vw 54489
IGJhcmJhcg== 54490
IENhcm9saW5l 54491
b3VyY2Vk 54492
57uP 54493
IGx1YnJpYw== 54494
aW5zcGVjdGlvbg== 54495
YW1tYWQ= 54496
CUltYWdl 54497
IGllcnI= 54498
IGN1cnRhaW5z 54499
X0FSQg== 54500
IE9yYWw= 54501
IGFsbGllZA== 54502
IFN0YXR1c0NvZGU= 54503
IENsZWFybHk= 54504
UHJlZmVycmVkU2l6ZQ== 54505
cXVpbmE= 54506
IHNwb3M= 54507
IG9wdGltaXNt 54508
IGNvbXByYXI= 54509
IGx1Zw== 54510
IEJvb20= 54511
Y29uZmlybWF0aW9u 54512
X0RVUkFUSU9O 54513
X2Jyb3dzZXI= 54514
IHJlcGV0aXRpb24= 54515
IGtlZXBlcg== 54516
IGFkZFRv 54517
KGpz 54518
LlN0YXQ= 54519
LkNvbmQ= 54520
IEhlcm5hbmRleg== 54521
cGFxdWU= 54522
IHZvbHVudGFyaWx5 54523
IGplcms= 54524
IExleQ== 54525
IGRvY3VtZW50bw== 54526
X2RlYWQ= 54527
IFRFQ0g= 54528
IGluY2VwdGlvbg== 54529
KCJ7fQ== 54530
IG9uTG9hZA== 54531
eGRk 54532
IElTUA== 54533
c3BlY2lmaWVk 54534
IOusuA== 54535
UFJPQ0VTUw== 54536
KGFsZXJ0 54537
Lk1N 54538
IGNyZWF0ZVN0b3Jl 54539
KHVuaXF1ZQ== 54540
LmdldEJsb2Nr 54541
656Y 54542
dW5vcw== 54543
IHRyb3BoaWVz 54544
X2hvdmVy 54545
IERhZGR5 54546
Lk1l 54547
IENPVVI= 54548
T0JK 54549
YXRlbWFsYQ== 54550
IFBzaQ== 54551
IG5vcm1hbHM= 54552
YWNpZXI= 54553
IE1CQQ== 54554
IHBhd24= 54555
z4U= 54556
IHNwb250YW5lb3Vz 54557
IGF1eGlsaWFyeQ== 54558
IGluYXVndXJhbA== 54559
IGZhc3Rpbmc= 54560
IEZpbGVTeXN0ZW0= 54561
IHplbg== 54562
X0JMVUU= 54563
IHN1YnRyZWU= 54564
IHByZXByb2Nlc3M= 54565
LXRyYWNr 54566
Q2hhcmxlcw== 54567
IGRlcG9zaXRlZA== 54568
IHF1ZXJ5UGFyYW1z 54569
0L7Qu9GM0LrQvg== 54570
aWVtYnJl 54571
IHByYXc= 54572
eEZD 54573
IHBhbmM= 54574
X25vbQ== 54575
aGVyb2Vz 54576
Lmphdg== 54577
OjokXw== 54578
INin2YTZhQ== 54579
U0dsb2JhbA== 54580
5o+P6L+w 54581
PXRlbXA= 54582
ZXN0aQ== 54583
IGNvbnN0cnVjdGl2ZQ== 54584
IFNoaW0= 54585
IERpcmVjdGlvbnM= 54586
IEJpbmc= 54587
ZGlydHk= 54588
LXJ1bm5pbmc= 54589
X2ZpbGVwYXRo 54590
b3JkZXJJZA== 54591
Z2FyZA== 54592
X29yaWVudA== 54593
IHNjb3V0 54594
IHBzeWNob2xvZ2lzdA== 54595
7LY= 54596
IOWt 54597
ZGVxdWU= 54598
IEhlcm1pb25l 54599
IFBvd2VyUG9pbnQ= 54600
IGVsbGE= 54601
IFVJQmFyQnV0dG9uSXRlbQ== 54602
U3Vidmlld3M= 54603
QFJlcG9zaXRvcnk= 54604
IiIiCgoK 54605
IHJldG91cg== 54606
IGNpcmNh 54607
R3JhcGhpYw== 54608
IEdyYXR1aXQ= 54609
ZGR5 54610
IHRlY2huaWNpYW4= 54611
IENsZWFudXA= 54612
IHBlcnNvbm5l 54613
IHJlc2lu 54614
Lk11bHQ= 54615
JG0= 54616
IE9yY2hlc3RyYQ== 54617
IHdoZWVsY2hhaXI= 54618
LlND 54619
CUdhbWVPYmplY3Q= 54620
IG1vxbxl 54621
T3BlbmVk 54622
IGNoaWNrZW5z 54623
b3Rhcw== 54624
X3RlbXBlcmF0dXJl 54625
IGRldGVjdGluZw== 54626
IGFjcXVhaW50 54627
IDw/PSQ= 54628
Pl0= 54629
IG1lbnN0cg== 54630
IGR5ZQ== 54631
Um9ib3Rv 54632
LnVuaXRz 54633
IFZpbnls 54634
Y3VyYQ== 54635
cnlwdG9u 54636
ZWRk 54637
PXRlc3Q= 54638
IHRyb3Y= 54639
Q29uZmlybWF0aW9u 54640
IHRoZW9sb2d5 54641
IEhvbGRpbmdz 54642
dWF0aW5n 54643
UHJlZGljdA== 54644
W3VzZXI= 54645
IDon 54646
IFNlc3Nv 54647
cGFyZW50SWQ= 54648
Q29kZUF0 54649
YWJibw== 54650
IFRyZXZvcg== 54651
IFF1aXQ= 54652
X3NoaXBwaW5n 54653
X1JB 54654
IGtsZWluZQ== 54655
56Y= 54656
X0xhYmVs 54657
IE9tYXI= 54658
IEdSRUVO 54659
LykK 54660
cm9r 54661
IHJvYXN0ZWQ= 54662
X1JU 54663
IOKAjg== 54664
QFJ1bldpdGg= 54665
Pk5O 54666
IHRhbmQ= 54667
Kycu 54668
Y3J1ZA== 54669
LmtleWJvYXJk 54670
YXN0ZXJ5 54671
QkFE 54672
IENvbHVtbnM= 54673
LkNvbXBhbnk= 54674
IHNlbWluYXI= 54675
IGdldENvbnRlbnRQYW5l 54676
IGNhdGFzdHJvcGhpYw== 54677
IGVtYnJvaWQ= 54678
aWF0aXZl 54679
IGNydWVsdHk= 54680
Ymlz 54681
IGluc2U= 54682
IEJyb2tlbg== 54683
CWZz 54684
IG1WaWV3 54685
0LDRhtC40Lg= 54686
LWZhY2Vib29r 54687
IGNhY2hlcw== 54688
44CC44CCCgo= 54689
IE9STQ== 54690
IERpc3RyaWI= 54691
IFNjZW5lTWFuYWdlcg== 54692
X3RyYW5zaXRpb24= 54693
b21leg== 54694
IFNIRQ== 54695
IHdvcmtsb2Fk 54696
U3VwcG9ydGVkRXhjZXB0aW9u 54697
IHJpZXM= 54698
IOWc 54699
KGNhdA== 54700
SGFzTWF4TGVuZ3Ro 54701
QXBwcw== 54702
LlRBQkxF 54703
IEtleVZhbHVlUGFpcg== 54704
ZWRpZG8= 54705
LlJlbmRlcmluZw== 54706
IGVsZWN0cm9t 54707
IGFyYml0cmF0aW9u 54708
IHZhcmlhYmlsaXR5 54709
YXBvbGxv 54710
IHV0bW9zdA== 54711
b3BlbnNzbA== 54712
IGjDpQ== 54713
KCcm 54714
LlN0YW5kYXJk 54715
IGRpc3RyYWN0aW9u 54716
aWZheA== 54717
IOuVjA== 54718
dGhvc2U= 54719
aXNwZW5z 54720
dmFr 54721
IFNVUA== 54722
IElzUGxhaW5PbGREYXRh 54723
LGtleQ== 54724
ZnJhZ2lzdGljcw== 54725
IEpveWNl 54726
IEZpYmVy 54727
LlNlcnZsZXRFeGNlcHRpb24= 54728
X0FsbA== 54729
IGJhY2tlcnM= 54730
IEF0dHJpYnV0ZUVycm9y 54731
ewoKCg== 54732
QHlhaG9v 54733
LWRpcmVjdG9yeQ== 54734
IHVuaW5zdGFsbA== 54735
IGZsdW9y 54736
bGlxdWlk 54737
IGzDoQ== 54738
IGZyaWdodGVuaW5n 54739
YWRhbg== 54740
IEFVVA== 54741
IHRhdHRvb3M= 54742
IHByb3BhZ2F0aW9u 54743
LnRyYW5zbGF0aW9u 54744
0J/RgA== 54745
X3NjaGVkdWxlcg== 54746
44CC4oCc 54747
IGNhaXJv 54748
IEh0dHBDbGllbnRNb2R1bGU= 54749
IE5EUA== 54750
IEhpdHM= 54751
IFRyYW5zZm9ybWF0aW9u 54752
IENhZXNhcg== 54753
c3RpbQ== 54754
IEJ1cnRvbg== 54755
d3lu 54756
IGNvbW1hbmRlZA== 54757
IENsb3RoaW5n 54758
IFJ1bnRpbWVPYmplY3Q= 54759
cmVhbGx5 54760
Y2xh 54761
LnNh 54762
IFNoYW5ub24= 54763
IGNvbW1pc3Npb25z 54764
IEphbmV0 54765
IGRpc2d1c3Rpbmc= 54766
IG9wdGltdW0= 54767
X3NvbA== 54768
dXJvbnM= 54769
IFNIQVJF 54770
QXR0cnM= 54771
IFNjaGU= 54772
IEJpZ051bWJlcg== 54773
IGNpZ2Fy 54774
KGRlcHRo 54775
IGZyYWM= 54776
IEN1cnZl 54777
TEFTVA== 54778
IFNDUklQVA== 54779
6rO8 54780
TWFsbG9j 54781
Lmdyb3VwYnk= 54782
IExlc2xpZQ== 54783
IHdoaWNoZXZlcg== 54784
U21hcnR5 54785
L3dl 54786
IEFtcA== 54787
LGlu 54788
bG9wcw== 54789
ZGVwZW5kZW5jeQ== 54790
Y2VkdXJlcw== 54791
IGB7 54792
eGljbw== 54793
Q29sbGVjdG9y 54794
IGhhYw== 54795
IERhcmtuZXNz 54796
ZmZmZmZmZmY= 54797
Jz0+Ig== 54798
IHBsZWFzaW5n 54799
Y29ubmVjdG9y 54800
em9z 54801
UENJ 54802
dmFj 54803
IEluY29ycG9y 54804
IG5lZA== 54805
X0ZBQ1RPUg== 54806
LmZi 54807
IG91bmNl 54808
X3NhdmVk 54809
INix 54810
IGRlZWRz 54811
IERvbHBoaW5z 54812
IGJ1ZW4= 54813
RVND 54814
LHRpbWU= 54815
X0FVVA== 54816
ZWNz 54817
IFNlbmF0b3Jz 54818
Lm91dGVy 54819
IFNlbGxpbmc= 54820
IHJpbg== 54821
PmAK 54822
Lm9ic2VydmFibGU= 54823
IGNvc3Rpbmc= 54824
REc= 54825
IHdpbmRpbmc= 54826
IHNrYQ== 54827
IGNpcmN1bGF0aW5n 54828
IGZvcm1pZGFibGU= 54829
YW1wbw== 54830
IFJhaXNlZA== 54831
IHZlZ2V0YXRpb24= 54832
VUZGSVg= 54833
S2lsbA== 54834
cHRpdmU= 54835
KHJ2 54836
IENvdW50cmllcw== 54837
IE5ha2Vk 54838
IEpB 54839
KSkiCg== 54840
dWRhcw== 54841
IGJhcms= 54842
CWxldmVs 54843
IGZvZXM= 54844
PkFkZA== 54845
WW91VHViZQ== 54846
O3Q= 54847
TkNZ 54848
Q2x1Yg== 54849
RWlu 54850
LS0NCg== 54851
IGNvbnN0cmFpbmVk 54852
RVR3aXR0ZXI= 54853
WUc= 54854
RGVzY3JpcGNpb24= 54855
VU5DSA== 54856
IGVucXVldWU= 54857
IGRpc2tz 54858
IFdlbnQ= 54859
IG11aXQ= 54860
CWxvY2F0aW9u 54861
IHJldmlzaW9ucw== 54862
IEFDSw== 54863
LWZpeGVk 54864
dHJhc291bmQ= 54865
XFRlc3Q= 54866
U3RhcnRQb3NpdGlvbg== 54867
LWh0bWw= 54868
IHByb2JsZW1hcw== 54869
X0lOVEVSUlVQVA== 54870
IFNUT1JF 54871
5qih 54872
aWxpYXRlZA== 54873
IFJQTQ== 54874
W3RlbXA= 54875
YWNodGVu 54876
IGNpYw== 54877
IEF1dG9tYXRpb24= 54878
IGhpZ2hz 54879
Lyg/ 54880
OicpCg== 54881
c3Bhcms= 54882
cmVscw== 54883
CW1vdg== 54884
VVRFUw== 54885
LkF1dGhvcml6YXRpb24= 54886
IFNjaG5laWRlcg== 54887
IGNoZWVrcw== 54888
YWRkcmVzc2Vz 54889
YXJkaW4= 54890
IHJlbW92YWJsZQ== 54891
LkJhZFJlcXVlc3Q= 54892
aWNpb25hcg== 54893
IERpZXNlbA== 54894
dGhhbg== 54895
L34= 54896
IGRhenU= 54897
UmVnaXN0cm8= 54898
ZmZp 54899
X0RMTA== 54900
IG5pZXU= 54901
IG1vaXN0dXI= 54902
LWV2ZW50cw== 54903
IHRocmlsbA== 54904
LmdldEVudGl0eQ== 54905
IHRvZ2c= 54906
IHdhdg== 54907
KWRpZA== 54908
YXRr 54909
KHN1YnN0cg== 54910
IEluamVjdGlvbg== 54911
X21i 54912
LkRpdg== 54913
IGVuZGVhdm9y 54914
ICjCow== 54915
IGNsdXR0ZXI= 54916
IHVyZ2VuY3k= 54917
IGluc3RydWN0b3Jz 54918
LScs 54919
LXN0YW5kYXJk 54920
Y2Vt 54921
CWhhbmRsZQ== 54922
LmZ0 54923
U3RlcGhlbg== 54924
Um9u 54925
44GZ44KL 54926
c2Np 54927
IEF0bW9z 54928
IGNhdGVyaW5n 54929
IGZpYXQ= 54930
LlBlcmNlbnQ= 54931
IENvbmdv 54932
eGRm 54933
Lm1vemlsbGE= 54934
IHNlaGVu 54935
LnNob3dUb2FzdA== 54936
T09U 54937
LXJlc3VsdA== 54938
zIE= 54939
IGdob3N0cw== 54940
IEJ1ZW4= 54941
IFJpZGVy 54942
IERvY3RvcnM= 54943
IHVyYW5pdW0= 54944
IGxvdWRseQ== 54945
IHBvaXNlZA== 54946
IGZhdm9ycw== 54947
KEFQ 54948
TEVZ 54949
IHNpY2tuZXNz 54950
IGNoYXR0ZQ== 54951
IGludGVncmF0aW5n 54952
IFl1cA== 54953
Q2xvc3VyZQ== 54954
IFRhbGVz 54955
IGxpbmVh 54956
IGV5ZWw= 54957
LkNyeXB0b2dyYXBoeQ== 54958
dW5leHBlY3RlZA== 54959
YWxlbWVudA== 54960
Y2l0 54961
ZXRBZGRyZXNz 54962
TGVhZA== 54963
eGNk 54964
X25lZ2F0aXZl 54965
X2NvcnI= 54966
aWdyYXBo 54967
LWNoYW5uZWw= 54968
IGRpc2Nv 54969
U2VlZGVy 54970
YmVhbQ== 54971
X2Rw 54972
Q0ND 54973
IFByb3ZpZGVk 54974
IGpzb25EYXRh 54975
X1dI 54976
RklORQ== 54977
Qlg= 54978
LkRhdGFBY2Nlc3M= 54979
IHRlbXB0ZWQ= 54980
IGZpbmVk 54981
aXNDaGVja2Vk 54982
IGZyYXVkdWxlbnQ= 54983
RnJp 54984
IGRvbWlj 54985
UXVpeg== 54986
IFVuZGVyZ3JvdW5k 54987
YWJyYXM= 54988
IElEaXNwb3NhYmxl 54989
IFBlcnNvbmE= 54990
IHJvZ3Vl 54991
IEJleQ== 54992
Z2V0Q2xpZW50 54993
ZWtlbg== 54994
ICcnJw0K 54995
V2lraQ== 54996
KEh0dHBTdGF0dXM= 54997
U3RyZXRjaA== 54998
IEdlc3Q= 54999
IO2VmA== 55000
IGVudGl0bGVtZW50 55001
IGRvZW4= 55002
YmxvZ3M= 55003
IHZpdHJv 55004
Ik9o 55005
IFN1bW1vbg== 55006
IEJhY2tib25l 55007
IGfDvA== 55008
Z2V0Q29sdW1u 55009
IFdJTkFQSQ== 55010
CXZh 55011
X1JFUVVJUkVE 55012
LnRocm93 55013
IHNldEN1cnJlbnQ= 55014
ZHVjdGVk 55015
KEZ1bmN0aW9u 55016
ZWxzaW5raQ== 55017
X1Blcg== 55018
ZmxpZXM= 55019
IGluY29tcGV0 55020
IGp1xbw= 55021
KCkl 55022
IC0tLQo= 55023
dW1hcw== 55024
IE9sZGVy 55025
IGRpc3B1dGVk 55026
X1JFUVVJUkU= 55027
Lm1hdG11bA== 55028
dW5rZW4= 55029
5LmL 55030
44GL44KJ 55031
IHR0bA== 55032
dW5kZXJzY29yZQ== 55033
IFBhdHJpY2lh 55034
IHRhcGVy 55035
IHNlaW5lcg== 55036
IHNheWE= 55037
5Y+w 55038
aWVyaQ== 55039
LnNlY3JldA== 55040
IHhvcg== 55041
IG1pdG9jaG9uZA== 55042
IGNhcmRib2FyZA== 55043
fWB9 55044
LUJFR0lO 55045
IGRhdmlk 55046
b3Vsb3M= 55047
IFBldGVyc2J1cmc= 55048
ICIiLA0K 55049
c2hlbGY= 55050
LXdhdGVy 55051
LWJ5dGU= 55052
INC+0LHRitC10LrRgg== 55053
IHN0aXJyaW5n 55054
7Je0 55055
IGNvbXB0 55056
IFBvdGVudGlhbA== 55057
UkFGVA== 55058
IGVhcHBseQ== 55059
IHN3aW5naW5n 55060
IGZlYw== 55061
QVJB 55062
IHdhbmRlcmluZw== 55063
IHByZWZlcnM= 55064
SmVzdXM= 55065
IHBpcmF0ZQ== 55066
IElzaXM= 55067
Lk1pbmltdW0= 55068
IFZhbGU= 55069
X0JU 55070
cmVuY2hlZA== 55071
Y29ycw== 55072
KGl0ZW1WaWV3 55073
IGfDpQ== 55074
LkNvbnRhY3Q= 55075
Vmlld0NoaWxk 55076
aW5kc2F5 55077
Y29uZmlncw== 55078
RHVwbGljYXRl 55079
4oCmSQ== 55080
enlzdA== 55081
KHRvZG8= 55082
LlJlbW92ZUF0 55083
X0RJRkY= 55084
IEJvdHRsZQ== 55085
IHZvbHRh 55086
dHJhZmZpYw== 55087
TGVl 55088
IOyk 55089
IHR1bmVz 55090
IEVjdWFkb3I= 55091
IFl1bg== 55092
IHVuZGVyd2VudA== 55093
aWNvbQ== 55094
ICcnKXsK 55095
LXBvbA== 55096
ZmxhbW1hdG9yeQ== 55097
TXV0YXRpb24= 55098
IHJlY2Fw 55099
X3ZlcnQ= 55100
T1RJT04= 55101
Q0RBVEE= 55102
aWNpbmU= 55103
X2JvdW5kYXJ5 55104
U2NhbGFycw== 55105
IFVsdGltYXRlbHk= 55106
RVE= 55107
bWV0YWw= 55108
a3Nlcw== 55109
bXBs 55110
IGNvbnRlbg== 55111
U29sZA== 55112
RVNTQUdFUw== 55113
IGJpbmRlcg== 55114
IGxpbmVu 55115
IE15QXBw 55116
LW1ldGE= 55117
CXJhaXNl 55118
b3VsdHJ5 55119
CW1vZHVsZQ== 55120
5pi+56S6 55121
bsOt 55122
IHlycw== 55123
IHBoeXNpYw== 55124
LXBsYXRmb3Jt 55125
IHN3aW5nZXJz 55126
KGhlYWRlcnM= 55127
Licp 55128
IEJV 55129
IEluY29udHJp 55130
U2NlbmFyaW8= 55131
QW1i 55132
IHByZW1pw6hyZQ== 55133
L2FydGljbGVz 55134
IE1ham9yaXR5 55135
Q0xVU0lWRQ== 55136
b25vcg== 55137
IGhhYsOtYQ== 55138
5bee 55139
IG1pZGk= 55140
IExhYw== 55141
LmZpbmRJbmRleA== 55142
IFBhaW50aW5n 55143
LmJvcmRlckNvbG9y 55144
Kmo= 55145
IGNvbmdlc3Rpb24= 55146
X0RJQ1Q= 55147
b2xsZQ== 55148
YXJuYXRpb24= 55149
KHRleHR1cmU= 55150
IHVm 55151
IEVpbnN0ZWlu 55152
KFRocmVhZA== 55153
IGluZG9vcnM= 55154
c2NyYXRjaA== 55155
IG1ha2Vu 55156
LlNUQVJU 55157
IEp1ZHk= 55158
Zm9ydW1z 55159
CgoKCgoKCgoK 55160
QklMRQ== 55161
IHZvdQ== 55162
TVlTUUw= 55163
IGdlcm5l 55164
IEltcG9ydEVycm9y 55165
IFN1cnJl 55166
PG5hdg== 55167
IERpZXNl 55168
ZXdhcmU= 55169
IOuqqA== 55170
aW1wbGVtZW50ZWQ= 55171
U0lHTg== 55172
ICd7QA== 55173
cnpl 55174
Lm1pbmVjcmFmdGZvcmdl 55175
LmlubmVySGVpZ2h0 55176
YmVjaw== 55177
IGN1cnJ5 55178
IGZvcm11bGFz 55179
YWdvZw== 55180
ZW5kZXQ= 55181
IFBhaWQ= 55182
IFJvYmVydG8= 55183
IHVucGFpZA== 55184
PWhlYWRlcnM= 55185
LlBvd2Vy 55186
IGJyZWQ= 55187
b3JFbHNl 55188
b3hpZGU= 55189
IGZpbmFsaXpl 55190
c2V0Q29sb3I= 55191
IFN0YWR0 55192
KCdcXA== 55193
aXNtaWM= 55194
IGhlbGU= 55195
LlByb3RvY29s 55196
Lkhvc3Rpbmc= 55197
X01lbnU= 55198
X2NvbmRpdGlvbnM= 55199
IHB1cmdl 55200
LnhhbWw= 55201
YmFyZQ== 55202
RlJBTUU= 55203
IGN1YmVz 55204
IEpvaGFubmVz 55205
b2NyYXRz 55206
LkRpcmVjdG9yeQ== 55207
KWE= 55208
Pyk6 55209
X0xJQlJBUlk= 55210
IGdldFRva2Vu 55211
IGVjaG9lZA== 55212
PWg= 55213
X3NvYw== 55214
IEV2YWx1YXRl 55215
IOq4sA== 55216
IERlbGV0ZWQ= 55217
RXU= 55218
IGNsb25lZA== 55219
c3RhdGlzdGljcw== 55220
LkNhbnZhcw== 55221
IGhhY2tlcg== 55222
IGdhbmdz 55223
LnJlc3VtZQ== 55224
cGVhY2U= 55225
0JLQstC10LTQuNGC0LU= 55226
IFByb2NlZWRpbmdz 55227
56U= 55228
IGphcGFu 55229
ID8+Pgo= 55230
ICR7KHs= 55231
LnJlY3RhbmdsZQ== 55232
Z3c= 55233
IE9yaWVudGF0aW9u 55234
JW0= 55235
LiIpKTsK 55236
IExpZXV0ZW5hbnQ= 55237
LnRydWU= 55238
IGVsdA== 55239
IERJUkVDVE9SWQ== 55240
zq8= 55241
LmRheXM= 55242
dXR0Z2FydA== 55243
IHVuZGVyd2Vhcg== 55244
LCkK 55245
Q0lE 55246
aW1lbGluZQ== 55247
IEJsZW5k 55248
cGhhc2lz 55249
IHBlcnNl 55250
IGdsaXR0ZXI= 55251
IHVuaXE= 55252
IENvbWJvQm94 55253
IHNlc3Npb25JZA== 55254
dXN0ZXJpdHk= 55255
SURHRQ== 55256
0L7QsdGJ 55257
0KQ= 55258
cmVuZGVycw== 55259
X3Bvc2l0aXZl 55260
X3Nsb3Rz 55261
YnJvYWRjYXN0 55262
IE1vbGQ= 55263
L0NvcmU= 55264
IEJhbm5vbg== 55265
VG9vbEJhcg== 55266
YWJlbGxl 55267
X2F3 55268
b2xlY3VsZQ== 55269
IGRlbGV0ZXM= 55270
IMOhcmVh 55271
IHByb3BvcnRpb25hbA== 55272
TVc= 55273
IHdhcnk= 55274
IGludGVybWVkaQ== 55275
ICoqKioqKioqKioqKioqKioqKioqKioqKg== 55276
LlNUQVRVUw== 55277
X3R3 55278
IGFyb21h 55279
IGFjdGl2aXNt 55280
LklzTm90TnVsbA== 55281
dWF0 55282
IHBvc3REYXRh 55283
IHBlbQ== 55284
X2N0b3I= 55285
IFJhcGlkcw== 55286
LW9mZnNldG9m 55287
IGluZWZmZWN0aXZl 55288
IG9uRGVzdHJveQ== 55289
IE1ldHJpY3M= 55290
IHBhZGRpbmdMZWZ0 55291
LWVuYWJsZWQ= 55292
IEdvYWxz 55293
eW5jaHJvbm91c2x5 55294
IHllcg== 55295
SXRlbUF0 55296
IE1ZU1FM 55297
Y2Vzbw== 55298
LktpbmQ= 55299
dGVj 55300
KGJ1bmRsZQ== 55301
IHJlZmVyZWU= 55302
LiI7DQo= 55303
IGNvbmV4 55304
IGJpa2luaQ== 55305
X0FQUExJQ0FUSU9O 55306
IHN3ZWxsaW5n 55307
IGJlYWRz 55308
IGJhcmdhaW5pbmc= 55309
LS0tLS0tLS0tLS0KCg== 55310
IGtpdGE= 55311
KmZ0 55312
TWluaQ== 55313
IFRvbmlnaHQ= 55314
IG1hbmlwdWxhdGVk 55315
TWlycm9y 55316
IFBvc3RhbA== 55317
IG1hcmU= 55318
RFc= 55319
IGNvbXBpbGluZw== 55320
IGZvcmVuc2lj 55321
LmdldFZpZXc= 55322
ZXBpbmc= 55323
Q29z 55324
IGFjY3JlZGl0ZWQ= 55325
IG9iamV0aXZv 55326
Y2FyZXQ= 55327
UGFpcnM= 55328
KT4+ 55329
IHNlw7E= 55330
IHF1b3RhdGlvbg== 55331
IEJyYW5kcw== 55332
dWJp 55333
eXB5 55334
IElubGluZQ== 55335
aW1ldGVycw== 55336
V2ludmFsaWQ= 55337
CWxpbms= 55338
IEJlbGZhc3Q= 55339
IE1lYXN1cmVtZW50 55340
X05PVElGSUNBVElPTg== 55341
IHJveQ== 55342
IENHQ29udGV4dA== 55343
IHdlZGRpbmdz 55344
VVJOUw== 55345
IHBvZGNhc3Rz 55346
IFNlcmc= 55347
IOuNsOydtO2EsA== 55348
IGVhcm5lc3Q= 55349
Y292ZXJhZ2U= 55350
aXRlRGF0YWJhc2U= 55351
RW1wbG95ZWVz 55352
IERlbWFuZA== 55353
IGNvbnRlbmlkbw== 55354
IFFWZWN0b3I= 55355
IiwiXA== 55356
IEdlcmFsZA== 55357
KClg 55358
IGdyaWRCYWdDb25zdHJhaW50cw== 55359
UkVTT1VSQ0U= 55360
IFNhZw== 55361
YWJpbGlkYWQ= 55362
IGNvZXJj 55363
b3VuY2VtZW50cw== 55364
IElzbGU= 55365
LmVkZ2U= 55366
IGV4dGVy 55367
KV1b 55368
IFBsYXlsaXN0 55369
IEJsaW5k 55370
IFZpdGFs 55371
IGxhdHRpY2U= 55372
cmF0ZWQ= 55373
ZGVwZW5kZW5jaWVz 55374
IGBgYA== 55375
IEthbmc= 55376
bWFjaA== 55377
LmZhZGU= 55378
IEd1ZXNz 55379
Kls= 55380
TmF0dXJhbA== 55381
Lk9r 55382
IFJlbmFpc3NhbmNl 55383
IHRodWlz 55384
IGxpa2Vu 55385
Kmg= 55386
XCcs 55387
LWNsb2Nr 55388
IE9iamVjdGl2ZQ== 55389
ZmluZE9yRmFpbA== 55390
IERpcnR5 55391
IHNjYW5k 55392
IFZBUklBQkxF 55393
IGNvbXBhcmF0aXZl 55394
eXBhZA== 55395
KFNvdXJjZQ== 55396
ZWNv 55397
IGp1c3F1 55398
CWFwaQ== 55399
QnVpbHQ= 55400
ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj 55401
IGxhYmVsaW5n 55402
IGhlYWRhY2hlcw== 55403
IG11ZmY= 55404
IE9yY2g= 55405
IGhhdGVz 55406
LWJyZWFraW5n 55407
L2J1dHRvbg== 55408
IEJ1eWluZw== 55409
TWV0cmlj 55410
IHVuc3BlY2lmaWVk 55411
L2hlYWQ= 55412
IHN0aW5n 55413
IHJlaW5mb3JjZQ== 55414
IENvbVZpc2libGU= 55415
Ymxpbms= 55416
IEFobWFk 55417
ZGJn 55418
X2xibA== 55419
IGh0dA== 55420
7JuQ 55421
cm9wb2xpcw== 55422
ICgoX18= 55423
IHBlcm1l 55424
IGFwcGFyZWw= 55425
U1RSRUFN 55426
Y2h0cw== 55427
IHNlaW5z 55428
ZmlsbFR5cGU= 55429
7KO8 55430
Uk9XU0VS 55431
dW1waW5n 55432
IE5pZ2VyaWFu 55433
4oCUaXM= 55434
X2xvZ2lj 55435
Lk9yZGluYWw= 55436
bG9zdA== 55437
L3Vzcg== 55438
QWY= 55439
IEl0ZXJhdGU= 55440
aWJz 55441
YWFs 55442
IHN5bW1ldHJpYw== 55443
LGlucHV0 55444
IFBMTA== 55445
dXppb25l 55446
Y2FwdGNoYQ== 55447
IFRhbGU= 55448
RXhwaXJlZA== 55449
IE9iamVjdE1hcHBlcg== 55450
Y2lkbw== 55451
LmdldE5leHQ= 55452
IG1lbmphZGk= 55453
OnNlbGVjdGVk 55454
IHJpZW4= 55455
X3NlbmRlcg== 55456
UHdk 55457
IEZsaWNrcg== 55458
LkphdmE= 55459
X3ZvdGU= 55460
X01vZGU= 55461
LiR7 55462
IGZ1Y2tz 55463
IEFsaWJhYmE= 55464
IGluc2lkZXI= 55465
YWNpbWllbnRv 55466
IGZyYW7Dp2Fpcw== 55467
SlNPTkV4Y2VwdGlvbg== 55468
IEp3dA== 55469
TWl0 55470
bGVpY2g= 55471
IHByYWN0aXRpb25lcg== 55472
L3NvdXJjZQ== 55473
IG9nbmk= 55474
IHBoaWxvc29waGVy 55475
U25hY2tCYXI= 55476
c3RlbGx1bmc= 55477
KGJpdG1hcA== 55478
IGFzdGVyb2lk 55479
IG1hcGxl 55480
dWNoYQ== 55481
aXRlbUlk 55482
IHN0ZWh0 55483
T3JkZXJlZA== 55484
ZW5idXJn 55485
L3Rva2Vu 55486
6YWN 55487
IFdlYmI= 55488
b3dhbmll 55489
IFdBSVQ= 55490
IEhEUg== 55491
IEV2YQ== 55492
QVRUTEU= 55493
KG1hc3Rlcg== 55494
IGVycw== 55495
YWxvYWQ= 55496
IHNtdHA= 55497
dW5pcQ== 55498
IGd1aXQ= 55499
IFJhZmFlbA== 55500
Imlu 55501
KFVJ 55502
KExheW91dEluZmxhdGVy 55503
b3Jhbg== 55504
IHNlcnZp 55505
bmV6 55506
IFRvcnJlcw== 55507
Lk1pZGRsZUNlbnRlcg== 55508
IG1vbGw= 55509
IFRleHRBbGlnbg== 55510
X3VwbG9hZGVk 55511
IE1laHI= 55512
IGhvbW8= 55513
LWxpbmtlZA== 55514
dW5uZXI= 55515
X2xlbmd0aHM= 55516
IGRpZmZ1c2U= 55517
IEF1dG9tb3RpdmU= 55518
WWVhcnM= 55519
IGxpZW4= 55520
W2NvdW50ZXI= 55521
a2xhc3M= 55522
0YHRgtC4 55523
LkVuZ2luZQ== 55524
IG1lbnk= 55525
dWx0eg== 55526
IGluZmFudHJ5 55527
Vmlh 55528
c2VjdHM= 55529
LmRhc2hib2FyZA== 55530
IHNwb25zb3JzaGlw 55531
Lk1vZGlmaWVk 55532
Oy0= 55533
IFZlbG9jaXR5 55534
dHJhY3RlZA== 55535
KG1ldGFkYXRh 55536
IHBsYWd1ZQ== 55537
TlNVc2VyRGVmYXVsdHM= 55538
YXBwcm92YWw= 55539
cHJvYmFibHk= 55540
LXNpeA== 55541
X1ZJUw== 55542
OicnLAo= 55543
LmVuYw== 55544
Lk1lc3NhZ2Vz 55545
X1BST0dSRVNT 55546
IG5lY2tsYWNl 55547
IFRlbXBvcmFyeQ== 55548
X21hcmt1cA== 55549
IEZ1bmN0aW9uYWw= 55550
IEpp 55551
IHRlc3RDYXNl 55552
ICgpOw0K 55553
X0NlbGw= 55554
IFJlc2lkZW50aWFs 55555
IFJhaWx3YXk= 55556
KCgmX19f 55557
IGRlZmF1bHRzdGF0ZQ== 55558
IGVpbm1hbA== 55559
LmZhYw== 55560
KmY= 55561
IHBpY25pYw== 55562
KGV2YWw= 55563
IGZ1cm5hY2U= 55564
YXNzb2NpYXRpb24= 55565
eyEh 55566
IENvbXBpbGU= 55567
eGVi 55568
RXZhbA== 55569
gOyepQ== 55570
KGNhbA== 55571
IG1hcmtldGVycw== 55572
X2hlbHBlcnM= 55573
bG9jYWxjdHg= 55574
IHlvZ3VydA== 55575
IHZpdGE= 55576
LGxlbmd0aA== 55577
IElucHV0RGVjb3JhdGlvbg== 55578
IGludGVydmVuZQ== 55579
IGNvbXB1dGF0aW9uYWw= 55580
RGVuaWVk 55581
L2Vudmlyb25tZW50 55582
aWlk 55583
LkJveA== 55584
LVRpbWU= 55585
IGV4Y3VzZXM= 55586
dHJhbnNwb3Nl 55587
IG91dHJhZ2VvdXM= 55588
KFNlcnZlcg== 55589
ZGltcw== 55590
Il0pOw0K 55591
kJw= 55592
IEVpc2Vu 55593
KE9w 55594
IGhhc2hsaWI= 55595
KGxp 55596
fiw= 55597
xLFuZA== 55598
IFNwaGVyZQ== 55599
IEJlbGxh 55600
LXRyYW5zaXRpb24= 55601
LnJlYWRTdHJpbmc= 55602
aGVhcmQ= 55603
IFp1Y2tlcg== 55604
IHdhbm4= 55605
IGphaWxlZA== 55606
IFRhbGVudA== 55607
b3Bob2JpYQ== 55608
wrY= 55609
IG9wZXJhbmRz 55610
U29tZW9uZQ== 55611
IExpYnJhcmllcw== 55612
cHJpbWFyeUtleQ== 55613
16o= 55614
VXI= 55615
IG1hdGVz 55616
INGI 55617
LWR1dHk= 55618
cG91cg== 55619
PEVudGl0eQ== 55620
PllvdQ== 55621
Q3JlYXRvcnM= 55622
V2l0aE5hbWU= 55623
J2ludA== 55624
IFJhdGlvbmFs 55625
PUI= 55626
LkF1dG9GaWVsZA== 55627
IEZvdW5kZXI= 55628
IE1lZ2Fu 55629
LmltYWdlVmlldw== 55630
Ym93cw== 55631
IHdpdGhSb3V0ZXI= 55632
IGxpYmVyYXRpb24= 55633
IGZvcmFt 55634
IGNpdGFz 55635
b2NoZW4= 55636
LnN3YXA= 55637
IC4uCg== 55638
LmN2dENvbG9y 55639
IEF3YXJl 55640
IHF1ZWVy 55641
5aSE55CG 55642
IEluZmluaXRl 55643
L3N0cmluZw== 55644
IGJsZW5kZWQ= 55645
LUNvbA== 55646
IHd5cw== 55647
IHNpY2hlcg== 55648
Lkxhc3ROYW1l 55649
X3dhdGVy 55650
X1JlbQ== 55651
IGFydGhyaXRpcw== 55652
LkFQUA== 55653
IEV4cGFuc2lvbg== 55654
eGRi 55655
ZXN0cm8= 55656
ZmF2aWNvbg== 55657
VmVyaWZpZWQ= 55658
IGRlbGl2ZXJpZXM= 55659
YXJrZXQ= 55660
IGdldEltYWdl 55661
IEpQRUc= 55662
IFRSSQ== 55663
IEVsZXY= 55664
ZnVzaW9u 55665
IGpwZWc= 55666
Y29sbGlzaW9u 55667
IGRlc2NlbmQ= 55668
LmZvcmU= 55669
IExvZ3M= 55670
IHBvbGljaW5n 55671
dW50YXM= 55672
Lmhvc3RuYW1l 55673
YWNjZXB0ZWQ= 55674
4KWL 55675
IFdlbmR5 55676
LnJlYWRGaWxl 55677
IFNhbnRpYWdv 55678
IEdvbA== 55679
cmliYm9u 55680
c3RyYXRpb24= 55681
IHB1ZGQ= 55682
IC8vXw== 55683
aXNMb2FkaW5n 55684
X1NFUklBTA== 55685
IGluc3RhbnRpYXRlZA== 55686
IHBvZHM= 55687
IHdhcnJhbnRz 55688
IGFkbWl0dGluZw== 55689
CWNvbm5lY3Rpb24= 55690
X2J1ZmZlcnM= 55691
IEluY2g= 55692
IFpFUk8= 55693
d2VydA== 55694
IENsYW4= 55695
CWls 55696
KHNoYWRlcg== 55697
IHBpbGdy 55698
IOWK 55699
RHN0 55700
X2JhcmFuZw== 55701
Oicj 55702
QnV0dG9uVGV4dA== 55703
dGVyZQ== 55704
X2FtdA== 55705
IEZvcmV2ZXI= 55706
LkxpbmtlZExpc3Q= 55707
dWFyZHM= 55708
dXJvdXM= 55709
IFNlbmRlcg== 55710
dmFyaWFudHM= 55711
X21hZ2lj 55712
IGFjY29tbW9kYXRpb25z 55713
YXBHZXN0dXJlUmVjb2duaXplcg== 55714
UHJvbXB0 55715
ID8+DQoNCg== 55716
IHJlcHJvZHVjZWQ= 55717
X3ByZWNpc2lvbg== 55718
IHJ1dA== 55719
bW9uZHM= 55720
O3g= 55721
IH0sDQoNCg== 55722
55S7 55723
IFZpdGE= 55724
IHByb3Bvc2Vz 55725
IFBhcnRpdGlvbg== 55726
SElORw== 55727
ICN7QA== 55728
IGVzc2E= 55729
KGJhcg== 55730
IFplbGRh 55731
LmNhdGNo 55732
X2V4Y2VwdA== 55733
IG92ZXJ3aGVsbWluZ2x5 55734
CVRFU1Q= 55735
X0NPTlRBQ1Q= 55736
X187 55737
IFNlbWk= 55738
IHRyYWJhbGhv 55739
cmFkb3Vybw== 55740
X3NxdWFyZWQ= 55741
4LY= 55742
JUQ= 55743
IHByYXQ= 55744
aXRleg== 55745
KGVsZW1lbnRz 55746
UGxhbnQ= 55747
YWd1YQ== 55748
IGlocmVy 55749
LkNvbA== 55750
IE1jTg== 55751
IENvcmV5 55752
T05FWQ== 55753
Q2VsZQ== 55754
cmVtZW50 55755
IG1hbHQ= 55756
IEx1aw== 55757
57uf 55758
UE1FTlQ= 55759
IGFuYWx5emVy 55760
IEhhbms= 55761
X3VuaWNvZGU= 55762
IGJ1cmlhbA== 55763
IENlbHRpYw== 55764
RUZG 55765
TG90 55766
d29u 55767
IE51ZGU= 55768
IE5hdGU= 55769
IFNpbmdlcg== 55770
IFNJVEU= 55771
KGJpdA== 55772
Yml6 55773
IGRldG9u 55774
UkVBRE1F 55775
OkFkZA== 55776
IEhvbGRpbmc= 55777
e3JldHVybg== 55778
bmNpYXM= 55779
Pg0KDQoNCg== 55780
cnVwdGlvbnM= 55781
LnJlYWN0 55782
dXJzYWw= 55783
4Lib 55784
IERPTkU= 55785
aXZhdGVk 55786
Lm5vdGVz 55787
IHN0cmlwZXM= 55788
cmlwcA== 55789
aXJhbg== 55790
IHNsYWI= 55791
IEJ1cm5pbmc= 55792
KGVudA== 55793
LnNlYw== 55794
R1U= 55795
X2dvbGQ= 55796
XSkpLg== 55797
ZWxpbmVzcw== 55798
0L7QsdGA0LDQ 55799
IOKIgA== 55800
IGNvc21pYw== 55801
J10pOgo= 55802
Y2Npb25lcw== 55803
Y2lzaW9u 55804
Y29tcGFyaXNvbg== 55805
IEV2YW5nZWw= 55806
IFNoaXJ0 55807
bGFnZW4= 55808
IGnFnw== 55809
IGZpbGxlcg== 55810
LnByb2Q= 55811
IAkJCQkJ 55812
INGE0YPQvdC60YbQuA== 55813
IFplcm9Db25zdHJ1Y3Rvcg== 55814
QXRB 55815
XSkNCg0K 55816
IGNvbnN0cnVjdG9ycw== 55817
X1NIQVJFRA== 55818
CWRldmljZQ== 55819
IEFkdmljZQ== 55820
OkAiJUA= 55821
Pn0n 55822
LklzRW1wdHk= 55823
IGludHM= 55824
bW9zdGF0 55825
IFNpZ251cA== 55826
Z2Vhcg== 55827
KHBhdGhz 55828
LHsi 55829
L0RvY3VtZW50cw== 55830
PENhdGVnb3J5 55831
VUVTVA== 55832
IGdldERlc2NyaXB0aW9u 55833
ICJ7XCI= 55834
IEpvZXk= 55835
b2Rlbg== 55836
X2d1ZXNz 55837
RVVS 55838
IGhlcnI= 55839
IHNlZGFu 55840
IHJlYWN0ZWQ= 55841
X2Nsb25l 55842
IFJldmVs 55843
IGZvcmI= 55844
UmVtYWluaW5n 55845
XFNlcnZpY2Vz 55846
IGF2aXM= 55847
YmF0aW0= 55848
emVwdA== 55849
IERCTnVsbA== 55850
Q29ubmVjdGlvbnM= 55851
IGRpc3BvbmlibGU= 55852
cGhpbg== 55853
IHN0dQ== 55854
IHNjaG9sYXJzaGlwcw== 55855
LXNoYXJpbmc= 55856
Zm9ybWluZw== 55857
IEJyaQ== 55858
VmFySW5zbg== 55859
L3Nlc3Npb24= 55860
IGFtYmlndW91cw== 55861
IGFwcmVzZW50 55862
X3Jk 55863
c2l0ZXM= 55864
L2FjdGlvbg== 55865
dHJhY3Rvcg== 55866
IGRpbGVtbWE= 55867
IFNY 55868
XS0tPgo= 55869
IEphY2tldA== 55870
UkFUSU9O 55871
LmdldFNlbGVjdGVkSXRlbQ== 55872
LWluaXQ= 55873
IFJlZ2lzdGVycw== 55874
X3NlcA== 55875
IFRvb2xraXQ= 55876
LmRpY3Q= 55877
IHhsYWJlbA== 55878
XFRhYmxl 55879
dG9j 55880
X2NvbWJv 55881
IENvbXBhY3Q= 55882
IHJ1Z2dlZA== 55883
4KWH4KQ= 55884
LW1hbmFnZW1lbnQ= 55885
Jyl9fSI+Cg== 55886
IFN0YW1w 55887
xLFs 55888
cm94 55889
IGxhbmRzY2FwZXM= 55890
X05PVEU= 55891
bW9uYXJ5 55892
Y2Fi 55893
IG1vZXQ= 55894
eGFm 55895
cmNvZGU= 55896
LWNsaQ== 55897
X2dhdGU= 55898
W2V2ZW50 55899
U1BPUlQ= 55900
Z2lh 55901
IFNVUEVS 55902
L0xvZ2lu 55903
X3NodXRkb3du 55904
aW50ZXJydXB0 55905
IHByZXRlbmRpbmc= 55906
IGZyaW5nZQ== 55907
IFJlZHM= 55908
IENVREE= 55909
IFVOSVg= 55910
dml0 55911
IGJyaWc= 55912
ZHJ2 55913
IENvbm5lY3Rvcg== 55914
VGhlcmVmb3Jl 55915
IGxpYQ== 55916
RGV0ZWN0aW9u 55917
X2FjdG9y 55918
IHRlbXBmaWxl 55919
IGVjY2VudHJpYw== 55920
LXJvbGU= 55921
IHBhZHg= 55922
ZGVudA== 55923
V2VzdGVybg== 55924
IOq3uA== 55925
IEFwcGxpY2F0aW9uUmVjb3Jk 55926
IGNhbXBhaWduaW5n 55927
X3J1bm5lcg== 55928
IENpdmlj 55929
YWxlaWdo 55930
IGRpcmVrdA== 55931
LnN1bA== 55932
ICAJCQk= 55933
YW50ZW4= 55934
IGlzc3Vlcg== 55935
IGFzc2VydGlvbnM= 55936
KG9yaWc= 55937
QVRJTw== 55938
IGxlYW5lZA== 55939
w6Rz 55940
LkRUTw== 55941
ZXhwbG9kZQ== 55942
Lk9ic2VydmFibGU= 55943
IHN0YWdnZXJpbmc= 55944
IGtpZG5hcHBlZA== 55945
IHByb2dyYW1tZXJz 55946
IElubm92 55947
LnBhcmFtZXRlcg== 55948
IGRvbWluYXRpb24= 55949
IHNrZXB0aWM= 55950
IOaYrw== 55951
IGF2b2lkcw== 55952
LlZlcmlmeQ== 55953
dWJieQ== 55954
IEFTTg== 55955
IGZvcm1hdG8= 55956
IEJlYXRsZXM= 55957
X2JyYW5k 55958
IGluc2V0 55959
eW91dHU= 55960
IHRvYw== 55961
LWZpbmFs 55962
U2hvd2luZw== 55963
IERvdWI= 55964
IE1lc2E= 55965
QWRq 55966
X21lZGl1bQ== 55967
Q3JlYXRlcw== 55968
KGVuZHBvaW50 55969
CVVQ 55970
YmJpZQ== 55971
IHN0YWxr 55972
LmRhdGFiaW5k 55973
LlNjYW4= 55974
YWdlbnRz 55975
JCw= 55976
aW5kaXZpZHVhbA== 55977
Kykv 55978
CXZt 55979
KG5vdGlmaWNhdGlvbg== 55980
IGluZXg= 55981
IENsYXNzaWZpY2F0aW9u 55982
cmVubw== 55983
IG9saWc= 55984
LXJhdGVk 55985
IGZvcm11bGF0aW9u 55986
Jyx7 55987
IGFjZXB0 55988
X3VucGFjaw== 55989
X0NB 55990
LlBvdw== 55991
CWlt 55992
IGFsdW1pbml1bQ== 55993
QU5P 55994
IHhu 55995
IGPDs21v 55996
IEluZ3JlZGllbnQ= 55997
IHNlaXp1cmVz 55998
5YWx 55999
aWZpY2Fkb3I= 56000
IHNpZ3VpZW50ZQ== 56001
IEluZnJhZ2lzdGljcw== 56002
IGR1cGxpY2F0ZWQ= 56003
IERlZQ== 56004
IG7DuA== 56005
IEFDQ0VQVA== 56006
KGNyYXRl 56007
0LjRgtC10LvRjA== 56008
LWxlc3M= 56009
IGluZmluaXR5 56010
QW5hbHl6ZXI= 56011
LURheQ== 56012
cml0dA== 56013
KGNpbg== 56014
IEd5 56015
IG11bHRpcGxpZWQ= 56016
dWNoaQ== 56017
IEJhbGR3aW4= 56018
L2lw 56019
IHNob3J0Y3V0cw== 56020
LkFERA== 56021
IHZpZ29y 56022
X2luc3RydWN0aW9u 56023
KDs= 56024
X2V0YQ== 56025
6L+e 56026
dXRvcmlhbHM= 56027
IGJvb3N0aW5n 56028
YnY= 56029
IGFja25vd2xlZGdlcw== 56030
TGlzdGVuaW5n 56031
RkFR 56032
O2I= 56033
KCgt 56034
IGFyY2hpdGVjdHM= 56035
IHp3ZQ== 56036
IHB1bHM= 56037
IGdldENvdW50 56038
dmVyYnM= 56039
44Cc 56040
KENvbGxlY3Rpb24= 56041
a3Jl 56042
IGp1cmlzZGljdGlvbnM= 56043
X2JyaWRnZQ== 56044
IENyYWNr 56045
IERpZmZpY3VsdHk= 56046
S08= 56047
UmVzZXJ2YXRpb24= 56048
X3JlcXVpcmVz 56049
VG91cg== 56050
44GX44Gf 56051
LnNldEN1cnJlbnQ= 56052
IGt5 56053
IEFsYmFueQ== 56054
IOin 56055
bGxlcg== 56056
YWduYQ== 56057
d29ya2Vycw== 56058
LmJsYW5r 56059
IFByYXllcg== 56060
TUlD 56061
IHJlc2lsaWVuY2U= 56062
VGVY 56063
IExhbmd1YWdlcw== 56064
c3R1ZHk= 56065
CWN1cnI= 56066
IGVuenltZXM= 56067
U2x1Zw== 56068
IO2MjA== 56069
c3RyYWw= 56070
IHR1bW9ycw== 56071
IHNlZ3VuZGE= 56072
PSd7 56073
aW5zdHJ1Y3Rpb24= 56074
IExpc3A= 56075
L2luZm8= 56076
ICJ7JA== 56077
LDopLA== 56078
IGd2 56079
KEVycm9yTWVzc2FnZQ== 56080
ICc9 56081
fS0kew== 56082
LkRvY3VtZW50cw== 56083
IldlbGw= 56084
IHJlbWluaXNjZW50 56085
IGdheg== 56086
aXJvcHI= 56087
ZWhy 56088
IHN1cHByZXNzZWQ= 56089
ZXJzaA== 56090
LnNjcm9sbFRv 56091
IGNhZGVuYQ== 56092
IGdhbWVTdGF0ZQ== 56093
w61t 56094
KGNvbnY= 56095
IFRvbW9ycm93 56096
IENDVA== 56097
TW9uZ28= 56098
dWxn 56099
LkNhbWVyYQ== 56100
LmhhbmRsZXJz 56101
bXBo 56102
IHN0aw== 56103
IGdlbmV0aWNz 56104
QUNJTkc= 56105
VHJpdmlh 56106
IEJhbQ== 56107
KG1hcmtlcg== 56108
LlN0cmV0Y2g= 56109
IFN1bm5p 56110
IEJldHR5 56111
LnRvbGlzdA== 56112
dW5saWtlbHk= 56113
LlJlY3RhbmdsZQ== 56114
b2Jzb2xldGU= 56115
SUxPTg== 56116
aW5uZXJUZXh0 56117
ZW1ib3VyZw== 56118
YU4= 56119
IFZlaGljbGVz 56120
dW5sb2Nr 56121
OnV0Zg== 56122
bm9i 56123
IFNlZWluZw== 56124
IE5FVkVS 56125
IHRscw== 56126
IGZpbGxlcw== 56127
IGJlbmVmaXRlZA== 56128
IENsaW50 56129
Ki8pLA== 56130
LmZvbGQ= 56131
IHBvc2libGU= 56132
QURFRA== 56133
dGhvdXNl 56134
LkRBTA== 56135
IE9kZA== 56136
cm9rZXM= 56137
IFN1bm55 56138
IFBhcnRpYWxFcQ== 56139
X0J1ZmZlcg== 56140
IExldmk= 56141
bG9uZ3JpZ2h0YXJyb3c= 56142
ZWxkb24= 56143
Z2FnZXM= 56144
X3dhcm4= 56145
LkNyZWF0ZVRhYmxl 56146
IERpcA== 56147
X3F1ZXN0aW9ucw== 56148
LmxvZ2lj 56149
ICMi 56150
PXsoKT0+ 56151
IHRlcA== 56152
IGp1aWN5 56153
7IKs 56154
ZW5rbw== 56155
aWFsZWN0 56156
2Yk= 56157
IG9uYm9hcmQ= 56158
IOaP 56159
CXJ0 56160
X1VURg== 56161
IFFBY3Rpb24= 56162
4oCe 56163
KENvbXBvbmVudA== 56164
KGF1ZGlv 56165
LmhpdA== 56166
Z3Rl 56167
IHByb2dyYW1tZWQ= 56168
c3RhdGVQYXJhbXM= 56169
IHBvbHllc3Rlcg== 56170
ZmlyZXM= 56171
Ynlzcw== 56172
XT0o 56173
X3F1YWxpdHk= 56174
T2ZEYXk= 56175
IEZhaXJ5 56176
IHllbGxlZA== 56177
b3Bs 56178
KHVzZXJOYW1l 56179
IERpZmZlcmVuY2U= 56180
IGV2YWx1YXRpb25z 56181
aWZmYW55 56182
IGN5Y2xpc3Rz 56183
IGNpZGFkZQ== 56184
IHRleHRib29r 56185
IHByb2ZpbGluZw== 56186
X18pLA== 56187
ZGVh 56188
LmFjdGl2YXRl 56189
IGluZGljYXRpb25z 56190
0JU= 56191
VG91Y2hVcEluc2lkZQ== 56192
IGludmFsdWFibGU= 56193
IE1BU0s= 56194
IGNvbnRlbmQ= 56195
RnJlcQ== 56196
IHJlY3J1aXRz 56197
KGludGVydmFs 56198
IFVzZXJQcm9maWxl 56199
ICcuLy4uLw== 56200
ZWR1 56201
X0NhbGxiYWNr 56202
IGFuYWxvZ3k= 56203
IFRyb3BoeQ== 56204
YXBwaGlyZQ== 56205
VmlkZW9z 56206
IENoZXI= 56207
IEhhdg== 56208
4oCmIg== 56209
LnZhbGlkYXRvcg== 56210
Z2Z4 56211
IFVPYmplY3Q= 56212
Y2xhc3NuYW1lcw== 56213
dHJpYW5nbGU= 56214
IEVuY29kZXI= 56215
LnNweQ== 56216
IHByZWRhdG9ycw== 56217
PXN0YXR1cw== 56218
LXNhZmU= 56219
OiIsCg== 56220
IEluY2x1ZGluZw== 56221
IHt9Ow0K 56222
KmNvcw== 56223
IGVuZHVyZWQ= 56224
LnN1bGFrZQ== 56225
IG51cnNlcnk= 56226
IGZyYWdyYW5jZQ== 56227
IHJlYnVpbGRpbmc= 56228
IG50aA== 56229
IEZyYXNlcg== 56230
LnNldERhdGU= 56231
IFZpbmNl 56232
X1JFU1Q= 56233
IHZlbnRpbGF0aW9u 56234
5rW3 56235
Y3JpYmVz 56236
LmFzbQ== 56237
bHBWdGJs 56238
IEFiZQ== 56239
dWlzaW5l 56240
LGFycmF5 56241
CWNsYXNzTmFtZQ== 56242
ZXJyYWxz 56243
ICcKCg== 56244
Q2hlY2tvdXQ= 56245
IHNvbGljaXQ= 56246
QXV4 56247
X2NhcHR1cmU= 56248
IHJpYnM= 56249
cmFnb24= 56250
dmlvbA== 56251
dG9waWNz 56252
RnVuY3Rpb25GbGFncw== 56253
IE1hcnR5 56254
YmlrZQ== 56255
IFR1Y2tlcg== 56256
KGtlcm5lbA== 56257
IE9wcw== 56258
Q2xvc2VPcGVyYXRpb24= 56259
L2RlbW8= 56260
aWxkYQ== 56261
IGzDrW5lYQ== 56262
QVBQSU5H 56263
IHN1aXRlcw== 56264
LnZpc2l0VmFySW5zbg== 56265
dXJ1cw== 56266
IE1pbnV0ZQ== 56267
KG1hbmFnZXI= 56268
IGJ1dHRlcmZseQ== 56269
IGFwYXJl 56270
IHdvbHZlcw== 56271
SldU 56272
IFNhbG9u 56273
CWRlbGF5 56274
LWVzbGludA== 56275
aXNhdGlvbnM= 56276
LnJwYw== 56277
KXwo 56278
IFNuYXBjaGF0 56279
L21t 56280
TU4= 56281
Y2VyaWVz 56282
LnRleHRBbGlnbm1lbnQ= 56283
IEZyYW5rZnVydA== 56284
IGFkbw== 56285
KG5ld1ZhbHVl 56286
KGFjY2Vzcw== 56287
KEV4cHJlc3Npb24= 56288
IFNpZ25Jbg== 56289
IEhhaXRp 56290
X3Rw 56291
LnNldFBhcmFtZXRlcg== 56292
TWludXRl 56293
IG1hbnVhbHM= 56294
cmljYW5lcw== 56295
IFBUUg== 56296
IE91dGVy 56297
IGdldGxpbmU= 56298
b2NhdGlvbnM= 56299
X0NE 56300
IEx5b24= 56301
L2d1aQ== 56302
X2xpdmU= 56303
aWRhbg== 56304
Lmdlb20= 56305
IGJvcmRlckJvdHRvbQ== 56306
aW11dGg= 56307
X2NoZWNrcG9pbnQ= 56308
IG1ldQ== 56309
IElydmluZw== 56310
IHBldXZlbnQ= 56311
KE1BWA== 56312
IEFSQ0g= 56313
IHBvdg== 56314
LnNvdXJjZWZvcmdl 56315
IGphbWFpcw== 56316
IGFyaw== 56317
IEJhZ2hkYWQ= 56318
IENMRUFS 56319
TWVudUJhcg== 56320
IHRyb2lz 56321
Q0hFRFVMRQ== 56322
ICMNCg== 56323
KENhbGw= 56324
JG9yZGVy 56325
KE1hdGVyaWFs 56326
IGVuY29udHJhZG8= 56327
JGxpc3Q= 56328
IE1FVEhPRFM= 56329
LmJlZ2luVHJhbnNhY3Rpb24= 56330
X01BRw== 56331
U3R5bGVTaGVldA== 56332
IG1ham9ycw== 56333
IGluZGVmaW5pdGVseQ== 56334
Y2xlYW51cA== 56335
IGhvbWVsYW5k 56336
KGR0bw== 56337
RGF0ZXM= 56338
UHJlc2VudGF0aW9u 56339
IERL 56340
PXtgLw== 56341
CUtleQ== 56342
KEJsb2Nr 56343
X2NoZWNrYm94 56344
bmVlZHM= 56345
IG9uQ29tcGxldGU= 56346
cmljbw== 56347
IGdsZWljaA== 56348
IHht 56349
T09E 56350
QmV0dGVy 56351
IFNRTElURQ== 56352
LkJvb2s= 56353
eGFk 56354
IEdvbmU= 56355
CWRw 56356
IGRldm90aW9u 56357
IHN0bQ== 56358
IG9ic2Vzcw== 56359
IEJhY2tlbmQ= 56360
UXVlcmllcw== 56361
SWs= 56362
Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 56363
IGRpdmlkZW5kcw== 56364
LnBhcmVudEVsZW1lbnQ= 56365
fSIpCgo= 56366
IE1hdGVyaWFsUGFnZVJvdXRl 56367
Om51bQ== 56368
IGV4cGxpYw== 56369
IE9M 56370
bGVhc3Q= 56371
T29wcw== 56372
aW1lbnRvcw== 56373
IGluc3VyZXJz 56374
IGhlcm9pYw== 56375
CWZpZWxkcw== 56376
LmltZ3Vy 56377
LmJ0bkNhbmNlbA== 56378
IERldGVjdGl2ZQ== 56379
KHNt 56380
IE11dGFibGVMaXZlRGF0YQ== 56381
LmxhYg== 56382
KChb 56383
IGhhaXJzdA== 56384
IFRyYW5zYWN0aW9ucw== 56385
5byA5aeL 56386
IHN0ZENsYXNz 56387
dWVudG8= 56388
R0lT 56389
X2NvZA== 56390
SW5zdHJ1Y3Rpb25z 56391
Q2FsbHM= 56392
UG9pbnRlclR5cGU= 56393
IFJ3 56394
IGFzc29ydG1lbnQ= 56395
IERJRw== 56396
K3I= 56397
X0NFUlQ= 56398
IGluc3RhYmlsaXR5 56399
IHZpYg== 56400
b25hcw== 56401
IHJva3U= 56402
YXBlbGxpZG8= 56403
IGFuZ2w= 56404
cHJlbmV1cg== 56405
IGZsdWlkcw== 56406
aXNlYXNl 56407
IGRlZWQ= 56408
cXVpc3Q= 56409
X0NPTlNUQU5U 56410
IGVxdWlsaWJyaXVt 56411
X2RlbGVnYXRl 56412
IFF1YW50dW0= 56413
cmVp 56414
Q2FwYWJpbGl0aWVz 56415
cmVjdGFuZ2xl 56416
Pz48 56417
YWxpZW4= 56418
IEp1Zw== 56419
RE5B 56420
VGlja2V0cw== 56421
T2NjdXJz 56422
IEhhd2s= 56423
LnNldEhvcml6b250YWxHcm91cA== 56424
XENvbGxlY3Rpb24= 56425
ZmZpdGk= 56426
IHJlYXJy 56427
LnNldFZlcnRpY2FsR3JvdXA= 56428
IGNhdml0eQ== 56429
IGFkdWx0ZQ== 56430
RmFjYWRl 56431
LXdo 56432
IExPTA== 56433
2LA= 56434
IGdyYW5kcGFyZW50cw== 56435
U3dpZnQ= 56436
CXd4 56437
5omA5pyJ 56438
aWZlbg== 56439
ZmZzZXQ= 56440
QmV5b25k 56441
Ly99Cgo= 56442
IHdhZ2Vy 56443
IGJ1cnk= 56444
IGNvbW1lbmNl 56445
cmVnaXN0cm8= 56446
c2NpZW50 56447
IFBlcmNlbnQ= 56448
INC00L7Qu9C2 56449
KGlkZW50aWZpZXI= 56450
LnNldE1vZGVs 56451
IHNlbGRvbQ== 56452
bnRvbg== 56453
IGFwcGxpYW5jZQ== 56454
YW11cw== 56455
cnlzbGVy 56456
IHBhbnRpZXM= 56457
ZW5ndWlucw== 56458
IG1pbWlj 56459
IG9uQ2hhbmdlZA== 56460
IGFsY29ob2xpYw== 56461
LnJlbG9hZERhdGE= 56462
Q2hhcmdl 56463
IEZheA== 56464
IGpTY3JvbGxQYW5l 56465
RW1wcmVzYQ== 56466
IHNoYXR0ZXJlZA== 56467
eGJh 56468
Rm9udHM= 56469
P3M= 56470
IHBvc3RzZWFzb24= 56471
cmV0YWlu 56472
X3JhdGVz 56473
IHJlcXVlc3RDb2Rl 56474
LnRvZG8= 56475
wrRz 56476
Q0hL 56477
IEtlZXBpbmc= 56478
ZW5nZWFuY2U= 56479
IHZzY29kZQ== 56480
SVBQSU5H 56481
RGVmYXVsdENsb3NlT3BlcmF0aW9u 56482
X3JhaXNl 56483
IE9jdWx1cw== 56484
b2dyYW1z 56485
cmFq 56486
cGNp 56487
IGNvcnJvc2lvbg== 56488
LmhhbmRsZVN1Ym1pdA== 56489
QWNjZXNzaWJsZQ== 56490
IFBpYW5v 56491
bGl0dGxl 56492
QUNM 56493
xIdl 56494
LnVud3JhcA== 56495
IENvbnZlcnM= 56496
IExlYmVu 56497
aW9uZWVy 56498
IE1lcmNoYW50 56499
IEpvcmdl 56500
IGVtYnJhY2luZw== 56501
IHZlbnRh 56502
w6FzdA== 56503
IHZpZW5l 56504
PFFTdHJpbmc= 56505
IGV4cGxvc2lvbnM= 56506
IGRpc3R1cmJlZA== 56507
LiI8 56508
bWVtbw== 56509
IEFib3JpZ2luYWw= 56510
IGNvbXBsZXRv 56511
VGV4UGFyYW1ldGVy 56512
IHVvbWluaQ== 56513
KGFnZW50 56514
0YPRgA== 56515
IFdob2xlc2FsZQ== 56516
L2Ft 56517
IEJvb2ttYXJr 56518
ZHJhZ29u 56519
IGdsb3Zl 56520
ICIiKSk7Cg== 56521
aXZhcmlhdGU= 56522
bm93cmFw 56523
SW5DaGlsZHJlbg== 56524
LkJy 56525
IGNvbmV4aW9u 56526
IGJhY2tib25l 56527
IGVjbGlwc2U= 56528
IHBlcnNlY3V0aW9u 56529
JzoKCg== 56530
L2xpbms= 56531
IFBlcm8= 56532
YW5kYXM= 56533
IFRlaw== 56534
LiIpOw== 56535
LWFuYWx5c2lz 56536
IGVyYWQ= 56537
TWFyc2hhbA== 56538
IGFuY2hvcnM= 56539
b2dlcg== 56540
IGNvbnZlcmdlbmNl 56541
c3RpY2t5 56542
IG5hdmVn 56543
aW50ZXJu 56544
X0RFU0NSSVBUT1I= 56545
IENvbnN1bHRhbnQ= 56546
ICAgICAgICAgICAgICAgICAgICAgCg== 56547
IEF1Y2g= 56548
IGVycmU= 56549
xZtsaQ== 56550
IEhvcml6b24= 56551
Y29sYQ== 56552
SW5zdGFsbGF0aW9u 56553
aG90bWFpbA== 56554
Q05O 56555
LkNvbGxlY3RvcnM= 56556
Y2hz 56557
KHRyYWNl 56558
IEVuY3J5cHQ= 56559
IC0tLS0tLQ== 56560
IEJhc2VDb250cm9sbGVy 56561
IGFndWE= 56562
IHJlYWN0aXZl 56563
aWRs 56564
IGNsYXNzTmFtZXM= 56565
CVNlc3Npb24= 56566
IERvZGdlcnM= 56567
SGFk 56568
X2x2 56569
SXNWYWxpZA== 56570
IEhFTFA= 56571
dXR0bw== 56572
IFZlcmlmaWNhdGlvbg== 56573
IGdldGVudg== 56574
X3Bh 56575
LmJtcA== 56576
OmY= 56577
IExvdWlzZQ== 56578
KCc7 56579
L3NvY2tldA== 56580
R3JhbnRlZA== 56581
LmNhbGVuZGFy 56582
KElQ 56583
IFBY 56584
LlJvb20= 56585
IHByb2dyYW1t 56586
ZW5zaQ== 56587
IHRhYmxlc3Bvb25z 56588
IGxldmU= 56589
IG1vc3Ry 56590
LnRpcG8= 56591
L2Fu 56592
KGRp 56593
IGJpb2Q= 56594
IGRiQ29udGV4dA== 56595
IEpTWA== 56596
CXJlc3VsdHM= 56597
LkVORA== 56598
aHRl 56599
bGlmeQ== 56600
UHJlY2lzaW9u 56601
6IqC 56602
QVJTRVI= 56603
KWRpZFJlY2VpdmVNZW1vcnlXYXJuaW5n 56604
YXR0ZW1wdA== 56605
SVNQ 56606
JmE= 56607
X1BPUA== 56608
IFRhYw== 56609
IHByZXBhcmVkU3RhdGVtZW50 56610
INC30LDQv9C40YE= 56611
IG93aW5n 56612
LHN0YXJ0 56613
IHJldmlld2Vy 56614
IHJzdA== 56615
IHByb3BUeXBlcw== 56616
IHJvY2t5 56617
X2xvY2FsZQ== 56618
IFN0cmF0ZWdpZXM= 56619
IFdlYmVy 56620
LkNhc2NhZGU= 56621
X2VxdWFsVG8= 56622
IGNvc2Fz 56623
IERlbGV0ZXM= 56624
IE1heGlt 56625
IHNocmltcA== 56626
cmV0cmlldmU= 56627
LkluY2x1ZGU= 56628
SUdJTg== 56629
IE9F 56630
XSk7DQoNCg== 56631
LmVudW1lcg== 56632
IGNvZWY= 56633
X051bGw= 56634
UmE= 56635
dHlhcmQ= 56636
IFNoYXdu 56637
a2VlcGVycw== 56638
IHFx 56639
X3Ni 56640
b21lbnM= 56641
IEV4ZWN1dGVz 56642
IyI= 56643
VFRZ 56644
IFZhbHVlVHlwZQ== 56645
KTsqLwo= 56646
IEFic29sdXRlbHk= 56647
IFRvdHRlbmhhbQ== 56648
L2FydA== 56649
IGJsZXNzaW5ncw== 56650
IHN3aWZ0bHk= 56651
YnVzdGVy 56652
IGF2aWQ= 56653
Q09NTQ== 56654
LHRlbXA= 56655
IH0/Pgo= 56656
LWdyb3dpbmc= 56657
IGRlZXBjb3B5 56658
QWNr 56659
ZWdnaWVz 56660
IF9fKCI= 56661
IG5vaXI= 56662
dGVycm9yaXNt 56663
IGFudGhlbQ== 56664
YWdlbmN5 56665
X1BBQ0tBR0U= 56666
IENsb3N1cmU= 56667
LnJlZ2lzdHJ5 56668
IG1hbW1hbHM= 56669
PEw= 56670
VUlDb2xsZWN0aW9uVmlldw== 56671
IExFRHM= 56672
IHZvbGxleQ== 56673
KEJ1ZmZlcg== 56674
X05BVElWRQ== 56675
bGliYw== 56676
aW1wbG9kZQ== 56677
U2Nyb2xsQmFy 56678
IE1hcmlvbg== 56679
LkNvbnRyYWN0cw== 56680
X0F0 56681
IFdlaW5zdGVpbg== 56682
Y29tcGFyZVRv 56683
IEhvc2U= 56684
ZW5pdHk= 56685
LmNyZWF0ZVF1ZXJ5 56686
X3JvdXRlcg== 56687
IHN0aW11bGk= 56688
ICsrKQ== 56689
IENoYW1w 56690
IEJheWVybg== 56691
YXNzYQ== 56692
LnZh 56693
IGRpc3RyaWJ1dG9ycw== 56694
IGZpbGVwcml2YXRl 56695
IGRlcGFydGVk 56696
Y2NjYw== 56697
QGNsaWNr 56698
IEx1bmNo 56699
Pkw= 56700
IGJsdWV0b290aA== 56701
LkRlZXA= 56702
LXN0YW5kaW5n 56703
w6FjaWw= 56704
IHJvb2Z0 56705
IFBhdGhz 56706
X2l0ZXJhdGlvbnM= 56707
SW52YWxpZEFyZ3VtZW50RXhjZXB0aW9u 56708
LnNwaQ== 56709
IFVJQWxlcnRBY3Rpb24= 56710
dXll 56711
c2lnbmlu 56712
LnByaW9yaXR5 56713
IEVzc2F5cw== 56714
PSd7JA== 56715
IOi/lOWbng== 56716
X3NpZ25lZA== 56717
LnBlcnNpc3Q= 56718
IHJlZGVzaWdu 56719
VG9Mb3dlcg== 56720
IE5ld21hbg== 56721
PXN0YXJ0 56722
IElzcmFlbGlz 56723
YXNpc3dh 56724
U3BlZWNo 56725
IG51bWVyb3M= 56726
aGFuZGxlcnM= 56727
IFdvbmc= 56728
INC80LXRgtC+0LQ= 56729
V2VpZ2h0cw== 56730
IEd1amFy 56731
dGVpbA== 56732
IE5vbmV0aGVsZXNz 56733
X0VGRkVDVA== 56734
IHZlY3Q= 56735
IE9zYw== 56736
IGNvYXRz 56737
IFdoZWF0 56738
IGdlZWs= 56739
IFBST1BFUlRZ 56740
d29ybQ== 56741
X2NvbnN0YW50cw== 56742
IEJvdWxkZXI= 56743
IFBhcm0= 56744
Y29sZQ== 56745
IGRlZmF1bHRDZW50ZXI= 56746
IFJvdWdl 56747
OkE= 56748
eGNm 56749
IFZlbmljZQ== 56750
bWVkaWFu 56751
IHJlZGVtcHRpb24= 56752
RnJlc2g= 56753
IGNvc20= 56754
IGZpZ3Vy 56755
IHJlZnVyYg== 56756
Q09QRQ== 56757
LmNk 56758
IGNob3Jkcw== 56759
IFNndA== 56760
xY0= 56761
VlBO 56762
IFNFTkQ= 56763
YWluZW4= 56764
X2FjY291bnRz 56765
IHRlbnRo 56766
IGRpc3NvbHZlZA== 56767
PEFwcA== 56768
IENvdmVyYWdl 56769
dXNlU3RhdGU= 56770
w6lybw== 56771
Li48 56772
IOyjvA== 56773
IGRyZWFtaW5n 56774
IEZvcmVjYXN0 56775
LkN1cnNvcnM= 56776
IHZpc2Fz 56777
L3NjcmlwdA== 56778
X3N0YXJ0ZWQ= 56779
IGdhc3Ry 56780
KFBSTw== 56781
XTsvLw== 56782
LlRpbGU= 56783
KnNpbg== 56784
KEFkYXB0ZXI= 56785
IFNhbmRyYQ== 56786
X1NJRw== 56787
YXJkYXNo 56788
IE92YWw= 56789
IGRlc2NyaXBjaW9u 56790
KHNs 56791
IERlc2NyaXB0b3I= 56792
IGAk 56793
L2ZyZWU= 56794
IEtleXdvcmRz 56795
IHR1ZG8= 56796
aW9uYWxl 56797
KGZvdW5k 56798
Lnh5eg== 56799
IEdlbmVyYXRpb25UeXBl 56800
X0RJU0FCTEVE 56801
KGFyZWE= 56802
IGVsaXRlcw== 56803
IGhvbWJyZQ== 56804
KG1lc3NhZ2Vz 56805
IFJhYw== 56806
IGV4dGluZ3U= 56807
IEVzdGE= 56808
b3Bv 56809
LnZlbA== 56810
bW91c2VvdXQ= 56811
IGNvbnZvbHV0aW9u 56812
IEhhbmRsaW5n 56813
IGNlaWxpbmdz 56814
VGVr 56815
IEFyZWFz 56816
LndyaXRlcm93 56817
PFZpZXc= 56818
IENvcm5lbGw= 56819
X0JJTg== 56820
LmludmFsaWQ= 56821
JycnDQo= 56822
aWXFvA== 56823
X1Bvc2l0aW9u 56824
IGtpZGRpbmc= 56825
UENPREU= 56826
IHdhdGNoZXI= 56827
bG94 56828
IOKX 56829
RGF2ZQ== 56830
X2FsbG93 56831
IGJpc2V4dWFs 56832
IHVub3JkZXJlZA== 56833
IFNjaHdl 56834
X3NlZ21lbnRz 56835
IHRlYXJpbmc= 56836
SU5MSU5F 56837
IHVuZGVz 56838
Lmdvb2Rz 56839
LmNhbQ== 56840
IExX 56841
CXdoZXJl 56842
Q2FsY3VsYXRvcg== 56843
LXRocmVhdA== 56844
LWFsZXJ0 56845
IFN1enVraQ== 56846
IElQQQ== 56847
IEF0dGFjaG1lbnQ= 56848
QUNDRVNT 56849
KGR0eXBl 56850
T3Bw 56851
X3N5bWJvbHM= 56852
IGRhbnNrZQ== 56853
bGFnZQ== 56854
b3JnZXQ= 56855
cmVzb2x1dGlvbg== 56856
0LXRhw== 56857
IFFDb2xvcg== 56858
IEJhcnJldHQ= 56859
0LDRhtC40Y8= 56860
PVwn 56861
IE5hdkNvbnRyb2xsZXI= 56862
L3JlZg== 56863
KGNvdW50cnk= 56864
X0hEUg== 56865
IHRlcnNlYnV0 56866
cGV0aXRpb24= 56867
IHN1Zg== 56868
Y3JlZGl0cw== 56869
4LmM 56870
eG0= 56871
IERhdmllcw== 56872
LnJlZGRpdA== 56873
IHdvdmVu 56874
IE9ibA== 56875
IEtN 56876
IENvbnNpZGVyaW5n 56877
ZW5zb3JlZA== 56878
LnBlcmlvZA== 56879
IGRkbA== 56880
JHdw 56881
IGV4dHJlbWlzdA== 56882
O1wK 56883
IGtpbQ== 56884
YWxlcnM= 56885
IHNwYW5uaW5n 56886
IGNvaGVyZW50 56887
IGNvbnNlZ3U= 56888
LnRleHRMYWJlbA== 56889
LmdlbmVyYWw= 56890
X2Rhc2hib2FyZA== 56891
0LvQtdC90LjQtQ== 56892
a2ljaw== 56893
X1BJRA== 56894
IEV4dGVuc2lvbnM= 56895
cmVnZXhw 56896
IENsYXVzZQ== 56897
X21vdg== 56898
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 56899
IFJld2FyZA== 56900
IExFR08= 56901
QWs= 56902
PS09LT0tPS0= 56903
CXBhcnNlcg== 56904
IG9uemU= 56905
6YCA 56906
4oCd44CC 56907
X2JhbGw= 56908
KHJocw== 56909
IGNob3J1cw== 56910
PGNvdW50 56911
YXN1cmFibGU= 56912
IHdpcmtsaWNo 56913
IEVyaW4= 56914
IE1TTkJD 56915
IGV0dGVy 56916
IENyb24= 56917
X0ZMT1c= 56918
ICwNCg== 56919
IGNhbGlkYWQ= 56920
IEZpbGVXcml0ZXI= 56921
CXN0bXQ= 56922
KEJ5dGU= 56923
X3BhdA== 56924
IHRlbGVzY29wZQ== 56925
IGdyZWVk 56926
IFRvcnQ= 56927
KHdyaXRl 56928
XGFwcGxpY2F0aW9u 56929
CVJUTFI= 56930
IENvbmZpZ3VyYXRpb25NYW5hZ2Vy 56931
VW5peA== 56932
RW5kVGltZQ== 56933
SW5jbHVkZXM= 56934
IEhhcnZlc3Q= 56935
ZW5iZXJn 56936
IEF1c3RyYWxpYW5z 56937
IOuT 56938
IHJu 56939
IHJlcHV0YWJsZQ== 56940
IGJsZW5kaW5n 56941
VUxBVElPTg== 56942
IEJyZW5kYW4= 56943
ZGFk 56944
IG3DuA== 56945
IFdvbw== 56946
X2Rj 56947
VW5l 56948
IHJ1ZQ== 56949
d2l0aGlu 56950
YW5nZXA= 56951
IHBvdWNo 56952
XCIiLA== 56953
IFNpYw== 56954
4oCdKSw= 56955
YWx5emU= 56956
IEdlZg== 56957
Y292ZXJz 56958
IGRibw== 56959
cmVwbGFjZUFsbA== 56960
CUxvZ2dlcg== 56961
VHJ5aW5n 56962
W3N0YXRl 56963
LXBpZWNl 56964
6ZaT 56965
YmVoYXZpb3I= 56966
YWxsb3dz 56967
bHJ0 56968
X3B5dGhvbg== 56969
ZXJ0dXJh 56970
LWNvdW50cnk= 56971
IFRH 56972
LlVJTWFuYWdlcg== 56973
YmVucw== 56974
YWxleA== 56975
IEJyZWl0YmFydA== 56976
YmFj 56977
IHByZWRpY3Rz 56978
IGdhYg== 56979
IGNhcmRpbmFs 56980
LlRpbWVVbml0 56981
IFZpc2l0b3I= 56982
IE1pbmc= 56983
IGxpdnJl 56984
IHBhcmVudElk 56985
cG9ydHVu 56986
IGRpbWVuc2lvbmFs 56987
IFZlc3Q= 56988
ZW5pYw== 56989
4LM= 56990
INmH 56991
IEJMVUU= 56992
IGl0ZW1Db3VudA== 56993
IGZlYXRoZXJz 56994
CXBzdG10 56995
IFBvbGFy 56996
ey8v 56997
dW5kaQ== 56998
0YPQtg== 56999
emFy 57000
RXJyb3JSZXNwb25zZQ== 57001
7IOB 57002
UmVwcmVzZW50YXRpb24= 57003
Kl8= 57004
K10= 57005
cHJlcGVuZA== 57006
ICc+ 57007
IGxlZ2l0aW1hY3k= 57008
IG9v 57009
U2xpbmt5 57010
IG5hdGlvbmFscw== 57011
LndvcmRz 57012
O3A= 57013
dHJhcA== 57014
b21hbmlw 57015
IGN1ZXM= 57016
IGdyYWR1YXRpbmc= 57017
IHNlbWFwaG9yZQ== 57018
Il0pOwoK 57019
YWNleQ== 57020
UkVFVA== 57021
R3JhYg== 57022
IEZlbGl4 57023
KElk 57024
X25laWdoYm9ycw== 57025
IG1lYW5pbmdsZXNz 57026
KGRlbA== 57027
IGplZGVy 57028
IENvbnRlbnRWYWx1ZXM= 57029
LmFic29sdXRl 57030
L2Ns 57031
IHhi 57032
ZGF0dW0= 57033
IHRvcnR1cmVk 57034
IHJ1YmJpbmc= 57035
U2NvcmVz 57036
IPCfmIk= 57037
IGF2b25z 57038
IGFtc3RlcmRhbQ== 57039
RU9T 57040
SGFs 57041
IHRydXN0d29ydGh5 57042
Iz0= 57043
LkVYVFJB 57044
IG1hbm8= 57045
aXNpY2luZw== 57046
LXN1cHBvcnQ= 57047
CWN1cnNvcg== 57048
IFNwbw== 57049
YWltYXNzYWdl 57050
TWlzc2lvbg== 57051
W117Ig== 57052
IHByaW50ZXJz 57053
R1JFRU4= 57054
IHRlZw== 57055
IGFiZG9taW5hbA== 57056
IQoKCgoKCg== 57057
LlNob3J0 57058
0LDQt9Cy 57059
IEdpZnRz 57060
fSIp 57061
KGJpbmRpbmc= 57062
eGNl 57063
4oCR 57064
aW5mb3M= 57065
Rm9ybURhdGE= 57066
IGRhcnQ= 57067
IGVsZW1z 57068
KGludg== 57069
WUw= 57070
dGlu 57071
R0VORVI= 57072
4buv 57073
IFRha2Vu 57074
dWNrbGU= 57075
OmU= 57076
IHNwZWN0cmFs 57077
LmJhaWR1 57078
LycpOwo= 57079
IGdyZWVkeQ== 57080
ZXNpb24= 57081
LCwsLCwsLCw= 57082
IC8+LAo= 57083
SW50ZXJuYWxTZXJ2ZXJFcnJvcg== 57084
TlNOb3RpZmljYXRpb25DZW50ZXI= 57085
IEFp 57086
IHNwaXQ= 57087
IGF1Z21lbnRlZA== 57088
IHN0YW5kYXJkVXNlckRlZmF1bHRz 57089
RklOSVRZ 57090
UmFjZQ== 57091
OkM= 57092
IFJFQ09SRA== 57093
IEhpZ2hsaWdodA== 57094
ICdg 57095
IGRlZmljaXRz 57096
IG5laQ== 57097
IHJlc2VhcmNoZWQ= 57098
VGE= 57099
IGNvcHA= 57100
LkdldEhhc2hDb2Rl 57101
KToNCg0K 57102
T25DbGljaw== 57103
IFdlbGxpbmd0b24= 57104
IHJldml2YWw= 57105
5q+U 57106
6Zeu 57107
IE5TUw== 57108
IGZvcm4= 57109
IGludMOp 57110
IEt1d2FpdA== 57111
X2ZsaXA= 57112
X2Jv 57113
X1w= 57114
IG9jY3VycmVuY2Vz 57115
IFNjaWVudGlzdHM= 57116
U1JD 57117
b2dlbnM= 57118
aWdyYW50 57119
UkVNT1RF 57120
IFNJRA== 57121
Lm9wdHM= 57122
dXZl 57123
KCldKQo= 57124
IGxpYmVydGFyaWFu 57125
IEdsaWRl 57126
bGVzZW4= 57127
IGZvcm1l 57128
b3dhbmlh 57129
IGFubm95ZWQ= 57130
RGVmcw== 57131
IEV4ZWN1dG9y 57132
IGNhc3Rz 57133
LnNldENoZWNrZWQ= 57134
IFNoYXJpbmc= 57135
LlNlcmlhbGl6ZU9iamVjdA== 57136
IHNlbGVjdG9ycw== 57137
X09USEVS 57138
66+4 57139
KHN1cGVy 57140
KE9T 57141
X1ZFUklGWQ== 57142
aWR1bnQ= 57143
PGhlYWRlcg== 57144
IC8+JzsK 57145
IHZpZMOpbw== 57146
IE5lZ3Jv 57147
IExvcmRz 57148
IFRvdXJz 57149
IHNvZnRseQ== 57150
LnJlY2VpdmU= 57151
IEVSQw== 57152
IGRhdGFTZXQ= 57153
QmFkZ2U= 57154
CUV2ZW50 57155
IHBlcmw= 57156
IHt9XA== 57157
KHNlbnRlbmNl 57158
T3JVcGRhdGU= 57159
IGRpbWluaXNo 57160
UElO 57161
KGRyYXc= 57162
LlRvRGF0ZVRpbWU= 57163
LkVxdWFsVG8= 57164
KHBpbg== 57165
LXBlbmNpbA== 57166
bHVlbnQ= 57167
IENhbGxlcg== 57168
IHBsYXlmdWw= 57169
LScr 57170
eGNh 57171
c3dpY2s= 57172
KXt9Cg== 57173
fTokew== 57174
IE1ldGg= 57175
LmdldENlbGw= 57176
LmJyZWFr 57177
IHltYXg= 57178
PSc8Pw== 57179
LWpzb24= 57180
IHByaW1laXJv 57181
IGluZGljZQ== 57182
44Kj 57183
IFVOSVRZ 57184
KGFi 57185
0YbQuNC4 57186
X0hBVkU= 57187
LXllYXJz 57188
IEVyZG9nYW4= 57189
LXN0YWNr 57190
IGRpc2NoYXJnZWQ= 57191
IGJyZWF0aHRha2luZw== 57192
IGdyYXNzcm9vdHM= 57193
IEFzaWRl 57194
aGVsbA== 57195
IHNuYWtlcw== 57196
L2xvZ291dA== 57197
IG1pbldpZHRo 57198
IEhlYXI= 57199
IFN0b25lcw== 57200
IFdpc2RvbQ== 57201
IEV2ZW5pbmc= 57202
X2JsYW5r 57203
IFByb21vdGlvbg== 57204
IE1NTQ== 57205
IEJhcnM= 57206
44K3 57207
bmo= 57208
X1RJ 57209
IFNvY2lhbGlzdA== 57210
IEVH 57211
LW9wdA== 57212
PVwiJA== 57213
KGRpYWxvZw== 57214
IGJlaG9sZA== 57215
IGludHJpY2F0ZQ== 57216
IGVyZWN0aWxl 57217
RXh0cmFjdG9y 57218
IHNjbA== 57219
IGNsYXM= 57220
KGhpc3Rvcnk= 57221
aWRlbnRhbGx5 57222
IHBuZXVt 57223
UmFuZA== 57224
IExhcHRvcA== 57225
Y2FsbGVy 57226
IEZsb29k 57227
b3BlbmVk 57228
dWRkZXI= 57229
IEdldHRlcg== 57230
X3dhbGs= 57231
KHdlaWdodA== 57232
IEFsZXhhbmRyaWE= 57233
IHRhYmxlYXU= 57234
VmFyaQ== 57235
IC0tLS0tLS0t 57236
6Iez 57237
ZXdvcnRoeQ== 57238
U3BlY2lmaWNhdGlvbg== 57239
IHRocmVzaG9sZHM= 57240
KCIiKTsKCg== 57241
X2ZvdXI= 57242
IFNhZGx5 57243
IChfKQ== 57244
aXNtYXRpYw== 57245
IEphaWw= 57246
dG9IYXZlQmVlbkNhbGxlZFdpdGg= 57247
Lm1hcg== 57248
IHByZXZpZXdz 57249
IHNjYWZm 57250
aW5kaWNhdG9y 57251
IGNvZGVjcw== 57252
IGF1dG9j 57253
KHJ0 57254
LmdldEhvdXJz 57255
IFJI 57256
IFN1cmdl 57257
aXZhbWVudGU= 57258
IGNvbnRlbmRlcg== 57259
Q3BwR2VuZXJpY0NsYXNz 57260
IDs7Xg== 57261
OjoqOwo= 57262
LXJlY29yZA== 57263
IG1hbWE= 57264
IGltZ3M= 57265
LmlzTG9hZGluZw== 57266
IG5lZWRsZXM= 57267
IGVuY3VlbnRyYQ== 57268
b2RhdGE= 57269
IEJ1ZmZlcmVkSW1hZ2U= 57270
CWphdmE= 57271
IFRvbWI= 57272
VU5JVFk= 57273
IGxpbmdlcmll 57274
IEphbWFpY2E= 57275
YnVncw== 57276
KioKCg== 57277
IE1hbw== 57278
LmJlZ2luUGF0aA== 57279
IHByb3N0aXR1dA== 57280
IFBoaWxpcHBpbmU= 57281
X3Nm 57282
X3Bvdw== 57283
IFNjaG8= 57284
eGRl 57285
J8OpdA== 57286
4oCZYXV0 57287
YWlzb24= 57288
IEZpbGVJbmZv 57289
dHVybnN0aWxl 57290
ZHJlYW0= 57291
IGlWYXI= 57292
c3ludGF4 57293
aWxsaXNlY29uZHM= 57294
cHJvZmlsZXM= 57295
X1JFR0VY 57296
INC00L4= 57297
IENvbW11bg== 57298
QmV0 57299
aXB6aWc= 57300
IE1lbW8= 57301
Lmlkcw== 57302
IHBob3RvZ3JhcGhlZA== 57303
IGFwcHJveGltYXRpb24= 57304
OnZhcmlhYmxlcw== 57305
IG1vZGlmaWNhcg== 57306
X1NNQUxM 57307
IEhlbXA= 57308
IGRpc3Jlc3BlY3Q= 57309
IGNvbnRlc3RlZA== 57310
IGlubm9jZW5jZQ== 57311
aWxsaXM= 57312
U3ltYm9scw== 57313
IGluc3BpcmF0aW9uYWw= 57314
IGRpc2NpcGxpbmFyeQ== 57315
IFBlcm1hbmVudA== 57316
IGRlc2Ny 57317
IFVOREVS 57318
0YHRiw== 57319
cHJlc3Nvcg== 57320
SU1FUg== 57321
IG1vdW50cw== 57322
IG1vcmFsbHk= 57323
X1NFQ09ORA== 57324
LmZpbGVOYW1l 57325
44OX 57326
IGNvbnN0cnVjdHM= 57327
IFNVTg== 57328
RVNQ 57329
RmluYW5jaWFs 57330
IE51cg== 57331
w7RsZQ== 57332
cmljdWxhcg== 57333
IFVzZXJNYW5hZ2Vy 57334
aWJpbGlkYWQ= 57335
IG9uUmVzcG9uc2U= 57336
IGZpbG1tYWtlcg== 57337
IGFsb3Q= 57338
X1RIUkVBRFM= 57339
IGVudmlyb25tZW50YWxseQ== 57340
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u 57341
IHJhc2g= 57342
IEx5cmljcw== 57343
IGlwYWlycw== 57344
QmFja3Vw 57345
U2lnbnVw 57346
IEB7Cg== 57347
SlVuaXQ= 57348
d29ya2Zsb3c= 57349
IENvbXBsZXRpb24= 57350
IGludHVpdGlvbg== 57351
8J0= 57352
IG1pYQ== 57353
IFNuYWNrYmFy 57354
IFRpbg== 57355
CWluc3RhbmNl 57356
IE11c2ljYWw= 57357
IHdlbGNvbWVz 57358
IHJlZHJhdw== 57359
X2NvbG91cg== 57360
X1JFQUxUWVBF 57361
X3NpbmNl 57362
IEJ5dGVBcnJheU91dHB1dFN0cmVhbQ== 57363
LWRlbWFuZA== 57364
YXJldGg= 57365
LnBhZA== 57366
c2Vr 57367
JywuLi4K 57368
LWZpcmU= 57369
Lnw= 57370
IG51bWI= 57371
IERPVUJMRQ== 57372
QU1BR0U= 57373
Y2htb2Q= 57374
LWls 57375
IGFsYXJtaW5n 57376
Q29w 57377
5aSH 57378
aW52aXRl 57379
X0lURU1T 57380
IGxldWs= 57381
IHJlZWw= 57382
IGZ1bGZpbGxtZW50 57383
UmVzdG9yZQ== 57384
X3Jy 57385
KGNsYXNzZXM= 57386
IHBhZ2luZw== 57387
eW1heA== 57388
cmFwcGVk 57389
7ZmU 57390
fWB9Pgo= 57391
IEhpcm8= 57392
KFRSVUU= 57393
YXN1cmVy 57394
IGN1ZXI= 57395
VWJlcg== 57396
Lk9wZXJhdGlvbg== 57397
IG9sYW4= 57398
IHRocmlsbGluZw== 57399
PFJlc3BvbnNl 57400
IEZlbWlu 57401
IHRyYXZlcnNhbA== 57402
IHBvYw== 57403
IHNldFN0YXR1cw== 57404
ZGVjbGFy 57405
c3RkYWZ4 57406
IGFkZGljdGl2ZQ== 57407
IEJ0bg== 57408
IGV4cGxvc2l2ZXM= 57409
IENvb2tpbmc= 57410
IFBsYWludA== 57411
IGFjY3VtdWxhdG9y 57412
IEFwcG9pbnRtZW50 57413
LHBhc3N3b3Jk 57414
IEZBUg== 57415
bHVldA== 57416
RnVydGhlcm1vcmU= 57417
ZGVjbHNwZWM= 57418
X1N0YXRpY3M= 57419
LkRpY3Rpb25hcnk= 57420
Ij4nLg== 57421
CXZhbGlk 57422
IiIs 57423
SW5zdHJ1bWVudA== 57424
Pko= 57425
IG5vc3Ry 57426
IFJpZnQ= 57427
X1BvcnQ= 57428
IHZlY2Vz 57429
W1sn 57430
IHJhbGxpZXM= 57431
LXNlcmllcw== 57432
IHZ2 57433
LnVj 57434
IHJ0bg== 57435
U3RhdGVDaGFuZ2Vk 57436
KGlucw== 57437
IENsYQ== 57438
LS0tLS0tLS0tLS0tCg== 57439
Y3Vz 57440
IFJlbG9hZA== 57441
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 57442
LnNlY29uZHM= 57443
X2Rlc3RpbmF0aW9u 57444
IHNjcmV3ZWQ= 57445
PmM= 57446
VGhpY2tuZXNz 57447
RGVzaWduZXI= 57448
IGdyaWRz 57449
bsSF 57450
KGNvb2tpZQ== 57451
VHJpcA== 57452
LU1vYmlsZQ== 57453
IHZvbGw= 57454
IGdlbml0YWw= 57455
IGNvbmZpc2M= 57456
IENvbmZlZGVyYXRl 57457
IHdlYlZpZXc= 57458
IG1pc2U= 57459
IGNsZXI= 57460
KHNlbGVjdGlvbg== 57461
JGRhdGU= 57462
IHNoYXJwZW4= 57463
cmFnZW4= 57464
QW5kVXBkYXRl 57465
IHJlbWl4 57466
IGh0b25z 57467
Ulc= 57468
TVBJ 57469
IHJldHJpZXZhbA== 57470
IHJpY2hlc3Q= 57471
LkRlY29kZQ== 57472
OmluaXRDb21wb25lbnRz 57473
IFRWYWx1ZQ== 57474
U2FpbnQ= 57475
QGluY2x1ZGU= 57476
IFBFUlNPTg== 57477
LnNlcA== 57478
IExEQVA= 57479
Z2Jh 57480
IGdyb8OfZQ== 57481
IHJlbGlhYmx5 57482
IERGUw== 57483
LmdldEl0ZW1JZA== 57484
IHByw6lzZW50 57485
LmdldFRva2Vu 57486
IGNoaW5lc2U= 57487
IE1lYWw= 57488
WU9V 57489
Ij48Pz0k 57490
KGNob2ljZQ== 57491
IHBoZW5vbWVuYWw= 57492
IFN0ZWVsZQ== 57493
wqI= 57494
IFBhY2thZ2VNYW5hZ2Vy 57495
IFN5bmRyb21l 57496
RGlyZWN0b3JpZXM= 57497
aXZhcg== 57498
LnVuc3Vic2NyaWJl 57499
bGllw58= 57500
bW9ubw== 57501
X2Nvbm5lY3Rpb25z 57502
X3ByZXNlbmNl 57503
eW55 57504
S25pZmU= 57505
IGdyb292ZQ== 57506
IHNjb29w 57507
VEVNUEw= 57508
YXNha2k= 57509
LmhhbWNyZXN0 57510
IGhhcmJvcg== 57511
Y292 57512
Kno= 57513
IFh1 57514
IHByb3Bvc2luZw== 57515
IEZSQU1F 57516
Q2hpcA== 57517
IEVlbg== 57518
IOyghA== 57519
IHNtYXNoZWQ= 57520
VW5zaWduZWQ= 57521
KC4u 57522
X2ZpbmlzaGVk 57523
IGdldFN0YXR1cw== 57524
IGZpYnJl 57525
QXhlcw== 57526
ICcvJyw= 57527
eWFyZHM= 57528
TURC 57529
LWJz 57530
aW50ZW50 57531
IGJvb3N0ZXI= 57532
LmRzdA== 57533
LkRpYWxvZ1Jlc3VsdA== 57534
IE1ldHM= 57535
IGJlYXN0cw== 57536
aW5jcmVtZW50cw== 57537
LmthZmth 57538
VUlBbGVydEFjdGlvbg== 57539
LWV2ZXI= 57540
X2JhbA== 57541
IGhlbHQ= 57542
IGZyZW9wZW4= 57543
IFJlY3J1aXRtZW50 57544
bGljdHM= 57545
Zm9yZ2V0dGFibGU= 57546
RGlzcGxheWVk 57547
X1ZFTkRPUg== 57548
Q29sbGVnZQ== 57549
QVNDSUk= 57550
IFNpbms= 57551
IE1hY2Vk 57552
IGN0b3I= 57553
IGVzdMOjbw== 57554
IFdpbmRzb3I= 57555
X2NoZWNrZWQ= 57556
X2RldGVjdA== 57557
YXR0ZW5k 57558
IHhtaW4= 57559
IGluZGlzcGVucw== 57560
L3BlcnNvbg== 57561
X0RFVEFJTFM= 57562
UkVESVQ= 57563
SGF5 57564
YWJvbGlj 57565
IGZ1bmN0b29scw== 57566
aWFpcw== 57567
RlRQ 57568
X1JlY3Q= 57569
IEluZHk= 57570
LXB1YmxpYw== 57571
b2hhbg== 57572
X21hbmFnZQ== 57573
Q29tcHV0ZWQ= 57574
7JeQ7ISc 57575
IFNsaWNl 57576
IGdheXM= 57577
IGFsZXg= 57578
YWl0cw== 57579
IHJlY2VpcHRz 57580
U1BFQw== 57581
IEJFRk9SRQ== 57582
IFByZWZpeA== 57583
X3Zpc2l0 57584
IHNwdW4= 57585
TEVURUQ= 57586
IGRvdw== 57587
IGxlZ2FsaXphdGlvbg== 57588
YWJiYWdl 57589
IGNsYXc= 57590
IFRjbA== 57591
eGltYQ== 57592
IGNvdmVydA== 57593
Tmk= 57594
IHRoYW5rZWQ= 57595
IGFsbGVyZ2lj 57596
bG92ZXI= 57597
IEJyZWFzdA== 57598
LmlzQWN0aXZl 57599
IGdlYmVu 57600
VkVSU0U= 57601
Wk9ORQ== 57602
CVJlc3VsdA== 57603
JykuJw== 57604
IGdlZQ== 57605
IFNlcmlvdXNseQ== 57606
cHVycGxl 57607
IEVzcGHDsWE= 57608
aWZpZQ== 57609
LXBhY2s= 57610
UGFydGljbGVz 57611
ICcvLi4v 57612
IG11bHRpbWVkaWE= 57613
YXV0b2NvbXBsZXRl 57614
IFRIUkVBRA== 57615
IHJlZmVyZW5jaW5n 57616
cmVldGluZ3M= 57617
IHF1b3Rpbmc= 57618
IGFzc2lzdGFudHM= 57619
amVuaXM= 57620
aGFwcHk= 57621
IGxheXM= 57622
bGliZnQ= 57623
eGRh 57624
IGZvdQ== 57625
cGlhcg== 57626
UmVjb21tZW5kZWQ= 57627
IEJpcmRz 57628
IFdhcnJhbnR5 57629
w7xybGljaA== 57630
LklOVklTSUJMRQ== 57631
X2FuY2hvcg== 57632
4oCdOg== 57633
RmFudA== 57634
X2RlZnM= 57635
IGRyZWFtZWQ= 57636
IF9fX19fX18s 57637
cGxh 57638
w6RmdA== 57639
b2RrYQ== 57640
xLFz 57641
IGRhZGR5 57642
c2NoZW1hcw== 57643
PXplcm9z 57644
IHJhdHQ= 57645
CQkgICAgCQ== 57646
aWVq 57647
IGRyaWxscw== 57648
LTw/ 57649
QUJB 57650
Lmxpbmtz 57651
IERlcGVuZGVuY3lQcm9wZXJ0eQ== 57652
Lmxvdw== 57653
aGVlZA== 57654
X0JMQUNL 57655
L0FkbWlu 57656
IGFtaWdvcw== 57657
aW5nZWQ= 57658
IE1pY2tleQ== 57659
LkdldEF4aXM= 57660
IE5lZWRlZA== 57661
IEVuY29kZQ== 57662
w6lyaWV1cg== 57663
IE1hbmlsYQ== 57664
IENvbGxlZw== 57665
YWRhc3Rybw== 57666
IGNoaWNhcw== 57667
5L2g 57668
IG9uZXNlbGY= 57669
eGVh 57670
ZHVr 57671
IGd3 57672
dXJnaWNhbA== 57673
IENlbnRybw== 57674
IGFlcw== 57675
ZmVlbA== 57676
IHRyb3Q= 57677
IGVsZWN0cm9ucw== 57678
IHJpdHVhbHM= 57679
IEJpbGRlcg== 57680
IGRlY29yYXRl 57681
IFRva2VuVHlwZQ== 57682
IGx1cmU= 57683
QXBpQ2xpZW50 57684
Z3JwYw== 57685
IE9yYw== 57686
Q29udGV4dE1lbnU= 57687
UFJFRklY 57688
LXRoZW1lZA== 57689
X2ZpZm8= 57690
LklucHV0U3RyZWFtUmVhZGVy 57691
X3NwZWNpZmlj 57692
IERTUA== 57693
PXN1YnByb2Nlc3M= 57694
L3NoZQ== 57695
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo= 57696
IGRhdW50aW5n 57697
IGNsZWFycw== 57698
IE1vdmVz 57699
IG15c3Rlcmllcw== 57700
LWJlc3Q= 57701
IFZ1 57702
b2xpYg== 57703
IElzaA== 57704
IGNhcmFjdA== 57705
KExhYmVs 57706
IERlYmlhbg== 57707
IEV4cGVyaW1lbnRhbA== 57708
IGNhdg== 57709
LlRvRGVjaW1hbA== 57710
IFJob2Rlcw== 57711
IEhhd2tz 57712
IGZvdW50YWlu 57713
X1BFTkRJTkc= 57714
X1NV 57715
IHd4U3RyaW5n 57716
IFBldw== 57717
LmNsaQ== 57718
0YTQvtGA0Lw= 57719
LndlYmtpdA== 57720
X0NO 57721
IDs7PQ== 57722
CW5hbWVzcGFjZQ== 57723
IHdQYXJhbQ== 57724
IHB1cHBpZXM= 57725
IHRlcm1pbm9sb2d5 57726
IGFkZGljdGVk 57727
IGZvcmdl 57728
IEdhcmRuZXI= 57729
IHBlc3NvYQ== 57730
CVJlc3VsdFNldA== 57731
IGF0dGVudQ== 57732
YW5nZW1lbnQ= 57733
X2luZHM= 57734
Q2hp 57735
YXJpdGg= 57736
RW5jb2RpbmdFeGNlcHRpb24= 57737
bW91c2Vkb3du 57738
IEJFVFdFRU4= 57739
d2VpZ2g= 57740
IkZvcg== 57741
LmRk 57742
aXRlbA== 57743
WU8= 57744
IERpY2U= 57745
dW5peA== 57746
IE9idA== 57747
IENlZGFy 57748
IHNwZWNpbWVucw== 57749
cG9ybg== 57750
IHVub2ZmaWNpYWw= 57751
6buR 57752
c29tZXRpbWVz 57753
IEJ1bGxk 57754
dHJ1c3Q= 57755
Z2V0UmVzdWx0 57756
IHNtb2tlcnM= 57757
IHNhbmR3aWNoZXM= 57758
IGV4aA== 57759
IEZhZGU= 57760
X0RD 57761
IG1hc3R1cmJhdGlvbg== 57762
Zm9ydGF3ZXNvbWU= 57763
VEhJTkc= 57764
X2FuZHJvaWQ= 57765
IGRlZGlj 57766
LXNlbnNpdGl2ZQ== 57767
IG5hY2t0 57768
TElCSU5U 57769
IGFnb24= 57770
IERJU0FCTEU= 57771
b25lc2lh 57772
Ymllcw== 57773
IFpJUA== 57774
IGhhdW50ZWQ= 57775
IGN1aWQ= 57776
L2NhcnQ= 57777
a29z 57778
CVJUTFU= 57779
IGhpbmRlcg== 57780
IGFkaXBpc2ljaW5n 57781
SUVOQ0U= 57782
LmJhbms= 57783
IEN5cHJ1cw== 57784
bWl4ZWQ= 57785
LmN5 57786
LXNpbmdsZQ== 57787
PGxlbg== 57788
Q29taW5n 57789
IGZhdWx0cw== 57790
IGZvcmVzZWU= 57791
Z2V0bGluZQ== 57792
ImE= 57793
IGJyYWc= 57794
IGRpc2Nz 57795
IHJpcGU= 57796
IG7DpnI= 57797
IEdH 57798
U0hPVA== 57799
ZGVyYWJhZA== 57800
KGVkaXQ= 57801
VG9MZWZ0 57802
W10pOwo= 57803
IGRvR2V0 57804
dmF0dXJl 57805
TmVlZGVk 57806
IENoZW5n 57807
Y2Np 57808
RUZJ 57809
IGZldWQ= 57810
IGx1bmFy 57811
LlNoYXBl 57812
Tm9ib2R5 57813
X1RSSUdHRVI= 57814
Q3k= 57815
Z3JvdW5kQ29sb3I= 57816
IFJlbW92YWw= 57817
KGJvdHRvbQ== 57818
JG1zZw== 57819
U0NJSQ== 57820
cml0eg== 57821
IGZyZW50ZQ== 57822
IGNvbXBvc3Q= 57823
YW5zd2VyZWQ= 57824
IFJvZHI= 57825
X0hUTUw= 57826
IHNpbGhvdWV0dGU= 57827
IFFVRVNU 57828
IENhdGhlZHJhbA== 57829
LkNvbW1lbnQ= 57830
IE1u 57831
LW5ldHdvcms= 57832
LmdldEZpbGU= 57833
LmdlbmVyYXRvcg== 57834
IENoZWNrb3V0 57835
X3pvb20= 57836
IGVuY29kZVVSSUNvbXBvbmVudA== 57837
X1RD 57838
c29t 57839
IFNlcmll 57840
IGJhc2VVUkw= 57841
CXJ1bg== 57842
IGh1aA== 57843
LnNlbGVjdGVkSW5kZXg= 57844
IFNUQVI= 57845
fi1+LQ== 57846
YWJjZGVmZ2g= 57847
Lm1hcHBpbmc= 57848
PWRhdGV0aW1l 57849
Q29vbA== 57850
bmlt 57851
IERpcmVjdGl2ZQ== 57852
RmVkZXJhbA== 57853
IG1lbnVJdGVt 57854
INCQ 57855
QW5uYQ== 57856
IFJlY3JlYXRpb24= 57857
cnlhbg== 57858
LWFnZWQ= 57859
emVyYmFp 57860
4oCm4oCdCgo= 57861
Y2FtcG8= 57862
IG1pbmlhdHVyZQ== 57863
ZGV0YWNo 57864
bWVhbmluZw== 57865
X2VtcA== 57866
UGVhaw== 57867
IGJjbQ== 57868
IEh1bmdhcmlhbg== 57869
IENhc2NhZGU= 57870
IHNhY2tz 57871
IHRydW5jYXRl 57872
IOKWiOKWiA== 57873
IHdoYWxlcw== 57874
IHNvcnRhYmxl 57875
IGFzc2VydHM= 57876
IHNlYWxz 57877
b2N5dGVz 57878
XSkpKQo= 57879
YWxhcm0= 57880
cmVzc2luZw== 57881
KHNpZ25hbA== 57882
IGVtcGVyb3I= 57883
CU9O 57884
Y29tbWl0dGVl 57885
IHRyaWxvZ3k= 57886
LlRyYW5zYWN0aW9uYWw= 57887
R3Jvdw== 57888
X3VhcnQ= 57889
IHN3aW5ncw== 57890
IHNwZWN0YWNsZQ== 57891
4oCZYXY= 57892
IFNlbnRpbmVs 57893
INmE 57894
IFRvdQ== 57895
IHdpZG93 57896
Z2VyYWxk 57897
LHVpbnQ= 57898
IHVudXN1YWxseQ== 57899
PENhcmQ= 57900
IFJlc3RhcnQ= 57901
bW9y 57902
44GC44KK 57903
aXhlZFJlYWxpdHk= 57904
IGhhbmRndW4= 57905
4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 57906
IGxpdGhpdW0= 57907
UmVzb2x2ZQ== 57908
Z2V0Qnl0ZXM= 57909
L2Z1bmN0aW9ucw== 57910
IHRhY2tsaW5n 57911
T3V0bGluZWQ= 57912
IH08Lw== 57913
IFNleG8= 57914
IEFuaw== 57915
IHJhdGlvbmFsZQ== 57916
cmVtb3ZlQXR0cg== 57917
IG11bmljaXBhbGl0eQ== 57918
IGFzc2F1bHRz 57919
Q0hPT0w= 57920
IFJlZQ== 57921
IGJhdWQ= 57922
pqw= 57923
IGVuaGFuY2Vz 57924
INC/0YDQtdC0 57925
IGNvbmNlc3M= 57926
Lmluc3RhZ3JhbQ== 57927
LmdldFJlc3BvbnNl 57928
c2VnbWVudHM= 57929
IHdlbGxiZWluZw== 57930
fTsKCgoK 57931
aHVuZw== 57932
44OG 57933
IHJlbm92YXRlZA== 57934
LmV4cGVjdGVk 57935
IHJhZGlhbA== 57936
IGNvbW11bmFs 57937
dXNlck1hbmFnZXI= 57938
K2E= 57939
IGZ1bmRhbWVudGFscw== 57940
LlRI 57941
6II= 57942
IHJhbnQ= 57943
IFN0cmF3 57944
IE9sZURi 57945
YXppbw== 57946
IGhhbWJ1cmc= 57947
IHBhaW50cw== 57948
IHRodW1icw== 57949
IE51bGxQb2ludGVyRXhjZXB0aW9u 57950
IGdyb3VwZQ== 57951
IEhvbWVDb21wb25lbnQ= 57952
IGJhbGxv 57953
IElOSVRJQUw= 57954
X2FyZQ== 57955
IFBlcw== 57956
dXJzZXM= 57957
IGJhcmR6bw== 57958
LmdldExlbmd0aA== 57959
YW1vdG8= 57960
Lm5vdGlmeURhdGFTZXRDaGFuZ2Vk 57961
aWVuZXM= 57962
ZW56aWU= 57963
X2VtYg== 57964
dW1uaQ== 57965
c21vb3Ro 57966
IERybw== 57967
cGFzdGU= 57968
IE5hcnI= 57969
LS0tLQoK 57970
z4k= 57971
IEF1dG9y 57972
IG91dHJvcw== 57973
IExBQkVM 57974
LnBh 57975
LlN0dWRlbnQ= 57976
KFhtbA== 57977
IGV0aG5pY2l0eQ== 57978
IEl2eQ== 57979
44KI 57980
X2Zha2U= 57981
Pyg6 57982
dXBsb2FkZWQ= 57983
Z2V0TWFuYWdlcg== 57984
LVFhZWRh 57985
b2RpYWM= 57986
Q29ubm9y 57987
aWhhbg== 57988
TUFU 57989
KG1pZA== 57990
IEFsYmFu 57991
IHNvaXI= 57992
Q29tYm8= 57993
IFB1YmxpY2F0aW9u 57994
b3BvdWxvcw== 57995
cGlz 57996
IHRlbXBsZXM= 57997
b25neWFuZw== 57998
X2NsaWVudHM= 57999
IHJvZHM= 58000
IHhj 58001
aWprZW4= 58002
IHJlYXA= 58003
IOS4i+WNiA== 58004
CWNvbm5lY3Q= 58005
Rm9jdXNlZA== 58006
LGNvdW50 58007
aWV0ZXQ= 58008
IGhhY2lh 58009
X2FsbG9jYXRvcg== 58010
IHRveGljaXR5 58011
KHNlcXVlbmNl 58012
IG51ZXN0cm9z 58013
IFByaW5jaXBsZXM= 58014
IGxsZQ== 58015
YWxhcmlh 58016
LndyaXRlU3RyaW5n 58017
IEFGTA== 58018
aWZuZGVm 58019
IERvcw== 58020
xZtjaWU= 58021
IEFnZ3JlZ2F0ZQ== 58022
IHNhY3JpZmljZXM= 58023
X29mZnNldHM= 58024
bGRi 58025
IGxhdGNo 58026
IGZ1bGxzY3JlZW4= 58027
bWlzc2l2ZQ== 58028
T1BUSU9OUw== 58029
IFRlbGVwaG9uZQ== 58030
IGFyc2VuYWw= 58031
amVqZXI= 58032
IEhvc3A= 58033
IGZhdm91cml0ZXM= 58034
cml2ZQ== 58035
LmluY3JlbWVudA== 58036
IGJ2 58037
IEZhbnRhc3RpYw== 58038
LnNheQ== 58039
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 58040
IG1lZGljaW5hbA== 58041
IERST1A= 58042
IHBpdHk= 58043
bWV0aXM= 58044
IHdvbGxlbg== 58045
IGJlZg== 58046
X0Js 58047
ID4+Cgo= 58048
Ym93ZXI= 58049
IHN3YXBwZWQ= 58050
L2luc3RhbGw= 58051
IHNpbmtz 58052
ZXRyaXpl 58053
IGRlY2xpbmVz 58054
CW15c3Fs 58055
IENTdHJpbmc= 58056
IE1vdGlvbkV2ZW50 58057
Lkxhbmd1YWdl 58058
Um9hZA== 58059
0YLQtdGA 58060
YXNjaW1lbnRv 58061
JykpLT4= 58062
LmFib3V0 58063
KGVkaXRvcg== 58064
IFJhdGluZ3M= 58065
aW5jb21l 58066
xaFl 58067
LmRlcXVldWVSZXVzYWJsZUNlbGw= 58068
IEF1c3RyaWFu 58069
IHN1bGxh 58070
IFRyaWJ1bmFs 58071
IERpZG4= 58072
0L7QstCw0YA= 58073
IGluc3BlY3Rpb25z 58074
Qm9zcw== 58075
IGNvY2t0YWlscw== 58076
IGFwb2xvZ2l6ZWQ= 58077
X3N1YnBsb3Q= 58078
b3BhbA== 58079
Kz0o 58080
IHJlc29uYW5jZQ== 58081
aWJ1 58082
IOumrA== 58083
cm9tYQ== 58084
cmVzZXJ2ZQ== 58085
cGxz 58086
IFRhaA== 58087
YXhpZXM= 58088
T1BMRQ== 58089
IERhcnJlbg== 58090
IFpvbWJpZQ== 58091
X01hcA== 58092
IF0pCgo= 58093
IFFp 58094
IFNhaWw= 58095
IHJlc3RyaWN0aXZl 58096
IGVyb3Npb24= 58097
LXBhcg== 58098
V0hJVEU= 58099
IG9sZHU= 58100
IGFwZXJ0dXJl 58101
IGJpdGNvaW5z 58102
dGV4dG8= 58103
IENvbWNhc3Q= 58104
IHRpbWVsZXNz 58105
ZW5raW5z 58106
IGZlZWRlcg== 58107
L3RtcA== 58108
cmVzZGVu 58109
Kydf 58110
LkRlc3Ryb3k= 58111
IMOnb2s= 58112
IERPQ1VNRU5U 58113
LmxuZw== 58114
LnRhZ05hbWU= 58115
IGt1bGxhbg== 58116
ZWdyYXRl 58117
ICgqLg== 58118
57yW6L6R 58119
IGhhbmRzaGFrZQ== 58120
c29j 58121
X2dlb21ldHJ5 58122
IERhbWFzY3Vz 58123
TWlub3I= 58124
IEthZmth 58125
7Jes 58126
RmxvcmlkYQ== 58127
X2NvbXB1dGU= 58128
LmV4cHI= 58129
IHBhcmFsbGU= 58130
IERpYXo= 58131
Y2ly 58132
W3RhcmdldA== 58133
IGpva2luZw== 58134
IGdsb3I= 58135
KHNldHE= 58136
X2hhbmRsZXJz 58137
SGFuZw== 58138
IGZlcnI= 58139
cmltaW5hbA== 58140
CSAgICAJCQ== 58141
ZW50aWVz 58142
ZGVmaW5lcw== 58143
LXRheA== 58144
anNvbnA= 58145
IFVQUw== 58146
bWV0cm8= 58147
X187Cg== 58148
IFVnYW5kYQ== 58149
XSkpOgo= 58150
X3Rk 58151
eGFl 58152
bHc= 58153
Lk9T 58154
IExvZ2dlZA== 58155
YWNpZA== 58156
IE1heW8= 58157
YXNwZWN0 58158
IHZhZ2luYWw= 58159
IGluaXRpYWxpemluZw== 58160
IHN0ZXJvaWRz 58161
ZmljdGlvbg== 58162
R1JF 58163
Z2VuZA== 58164
IGxpYWJpbGl0aWVz 58165
IExldHM= 58166
TWVjaA== 58167
KG5j 58168
KGNoYW5nZQ== 58169
IGNvbm5lY3RvcnM= 58170
Oms= 58171
IHRhc3Q= 58172
ISIpOwoK 58173
dGhpbmdz 58174
cm9waHk= 58175
bHVldG9vdGg= 58176
IFNpZ25VcA== 58177
LmN0cmw= 58178
IHRoZXJlaW4= 58179
b3JkYQ== 58180
LmVzY2FwZQ== 58181
aWdhdG9y 58182
IHBldHJvbA== 58183
IHNwZWNpbWVu 58184
IGRlYnV0ZWQ= 58185
LVBybw== 58186
IGNyaXNlcw== 58187
LmFkZFZpZXc= 58188
64+Z 58189
LWRvb3I= 58190
IG1vbmV0 58191
IG1pbGxpcw== 58192
IHZpZXI= 58193
SW50ZXJuYWxFbnVtZXJhdG9y 58194
IGFkbWlucw== 58195
IExhaXI= 58196
emlu 58197
Z2V0UXVlcnk= 58198
dW1ibGVz 58199
TElNSVQ= 58200
IFZpZw== 58201
X3Nvbmc= 58202
PENoYXJhY3Rlcg== 58203
Ojou 58204
X2hvbQ== 58205
X2Jw 58206
IFN1cGVydmlzb3I= 58207
c3VibWlzc2lvbg== 58208
YWJpbGU= 58209
IG5vaQ== 58210
T3JDcmVhdGU= 58211
IHBlZWw= 58212
IG9uU3RhcnQ= 58213
IHNlbnRpbWVudHM= 58214
dmVoaWNsZXM= 58215
IGNsYXNzcm9vbXM= 58216
IHN6ZXI= 58217
IGJlbmRpbmc= 58218
IGxvbmdldml0eQ== 58219
IGFjbA== 58220
IEFsZXBwbw== 58221
IFVN 58222
IFJpY2h0 58223
IG11bHRpcHJvY2Vzc2luZw== 58224
RE9NQUlO 58225
IiwiKw== 58226
X1lFQVI= 58227
IHNjcmFwZQ== 58228
IHNvbGl0YXJ5 58229
ICJdIjsK 58230
L2Vycm9ycw== 58231
7J6s 58232
nOugpQ== 58233
YmV0dGVy 58234
CW51bWJlcg== 58235
IExG 58236
IEFjcm9zcw== 58237
UHViTWVk 58238
XCIi 58239
IEV4Y2VsbGVuY2U= 58240
IHVzYW5kbw== 58241
IFVJUA== 58242
QWN0aXZpdHlJbmRpY2F0b3I= 58243
X1ZPSUQ= 58244
IGJyZWVkcw== 58245
772l 58246
dWVzdGFz 58247
IFRyZWFzdXJl 58248
dXN0cmFsaWFu 58249
KGZhY2U= 58250
IFRlbm5pcw== 58251
CUludA== 58252
IEhhbnNlbg== 58253
57U= 58254
Okk= 58255
IOKclA== 58256
R1JBWQ== 58257
T1VTRQ== 58258
IGhlcGF0 58259
oO0= 58260
QUlS 58261
w7PFvA== 58262
IHF1ZXVlZA== 58263
dmluY2lh 58264
IENocm9taXVt 58265
IGNvbXBldGVuY2U= 58266
dW5nYWw= 58267
aWxsaQ== 58268
IGdldEJ5 58269
IEZpbmRlcg== 58270
IGluY2FwYWJsZQ== 58271
IHNhZGQ= 58272
IGNpdGVz 58273
IENodXJjaGlsbA== 58274
U2Rr 58275
TW9yZW92ZXI= 58276
QXNwTmV0 58277
KEZsb2F0 58278
JHBhc3N3b3Jk 58279
IENvbm5vcg== 58280
LXNlc3Npb24= 58281
X2Rt 58282
Kikp 58283
IGRldXRzY2g= 58284
IE5Y 58285
IHBlcmtz 58286
X1NPUlQ= 58287
X1RPT0w= 58288
X1ZJU0lCTEU= 58289
LmFzcA== 58290
5oiW 58291
IEJyZWF0aA== 58292
RGV0ZWN0 58293
IER1ZWw= 58294
LmNtYg== 58295
W2l0 58296
LlNldEJvb2w= 58297
IG5hcmNpc3M= 58298
IGFiaWRl 58299
IGVqZW1wbG8= 58300
IOKElQ== 58301
IG1vcm5pbmdz 58302
IGNvbXB1dGVz 58303
LnNzbA== 58304
anQ= 58305
IG11Y2hvcw== 58306
X1NT 58307
W2VuZA== 58308
IGJhc2lu 58309
IGFsZ3Vub3M= 58310
IENyb2F0aWE= 58311
bGluZXdpZHRo 58312
KHRhZ3M= 58313
KGhpZGRlbg== 58314
w61jaW8= 58315
IGFwYXI= 58316
INC2 58317
5LiO 58318
LmZvb2Q= 58319
IFJ1cmFs 58320
IGJyZWFkdGg= 58321
5b2x 58322
KHNlc3M= 58323
KyIp 58324
IFBhc3Rl 58325
IHNlcnZpZG9y 58326
IEJpdFNldA== 58327
IFRyYW4= 58328
bGF1cw== 58329
dmV0dGU= 58330
ZXllcw== 58331
IENMSUNL 58332
IFZJSUk= 58333
IFR1cm5z 58334
IExlQnJvbg== 58335
IE11ag== 58336
IERlZw== 58337
IEFkdWx0cw== 58338
X3N1aXRl 58339
cHJvY2Vzc2FibGU= 58340
IFBIWQ== 58341
Z2hlc3Q= 58342
LkZhaWw= 58343
IFNsYWNr 58344
Y2Vq 58345
XENhcmJvbg== 58346
IHN1cGVyc3Rhcg== 58347
IGhvbGRpbmdz 58348
KGZvcm1z 58349
ICcjJw== 58350
TXVsdGlw 58351
KCJbJQ== 58352
LXNvbGlk 58353
L3VybA== 58354
LXRpZXI= 58355
W2xlbmd0aA== 58356
IFN0cmVhbVdyaXRlcg== 58357
IE1hcmtldHBsYWNl 58358
Z2V0dGV4dA== 58359
X1RJQ0s= 58360
IEZvcmdl 58361
IGJsYWNramFjaw== 58362
IERPRVM= 58363
IE1hdHRlcnM= 58364
d2F2ZXM= 58365
IHdoaXNwZXJlZA== 58366
IGx1c2g= 58367
7Jik 58368
ZGlnaXRhbA== 58369
IHdyaW5r 58370
IEhvZ2Fu 58371
IHJ1c3RpYw== 58372
LkFwcGx5UmVzb3VyY2Vz 58373
IEhhcmR5 58374
b3NvbWVz 58375
QVVU 58376
LlNUQVRF 58377
IG5hcnJhdGl2ZXM= 58378
CXN0b3Jl 58379
Ymli 58380
CVNjYW5uZXI= 58381
IENvZHk= 58382
XFJlcG9zaXRvcmllcw== 58383
IHJldW5pb24= 58384
YW5kdW0= 58385
4oCZaA== 58386
IHNuaWZm 58387
TlNCdW5kbGU= 58388
IGNvbXByZWhlbmQ= 58389
X1VTQUdF 58390
X29jYw== 58391
VVJSRU5DWQ== 58392
Sk5J 58393
IHNwZWNpYWxpemluZw== 58394
IHZpc2lvbnM= 58395
IGRvbG9yZQ== 58396
IHbDoQ== 58397
IENoZXZ5 58398
IFN0eWxlZA== 58399
aW1wYWN0 58400
YWxsZW4= 58401
IGthcnQ= 58402
IFRhYmxldA== 58403
c3R1ZmY= 58404
cmVlc29tZQ== 58405
0LDRgtC+0YA= 58406
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 58407
X0FkbWlu 58408
IGNlbGxwaG9uZQ== 58409
IGF1dG9wbGF5 58410
IGNhbWJpbw== 58411
IG1hcml0aW1l 58412
X0JPT1Q= 58413
LXF1YXJ0ZXI= 58414
IGxhdGluYQ== 58415
IEFKQVg= 58416
ZXF1aXY= 58417
IEZyb250aWVy 58418
IFhZ 58419
fV0K 58420
IFJvdWdo 58421
LnByb3Rv 58422
IGNvcnJlY3RuZXNz 58423
IGZhY2ls 58424
IFJlYWNoZWQ= 58425
44Gd44Gu 58426
VklT 58427
LnBz 58428
IHN0cm5jcHk= 58429
IGRpZmZ1c2lvbg== 58430
LnN0YXJ0QWN0aXZpdHk= 58431
77+977+977+9 58432
IGFjY29tcA== 58433
QU1FU1BBQ0U= 58434
aW1vbmlhbHM= 58435
IEJsYXN0 58436
YWJ5cmlu 58437
IGRvbWU= 58438
IGV4dHJhdg== 58439
IHllbg== 58440
IGN1bGluYXJ5 58441
UFJJ 58442
IENvbW11bml0aWVz 58443
bmlk 58444
X29wZXJhdGlvbnM= 58445
Lmhz 58446
IE1pbHRvbg== 58447
IG5vaXNlcw== 58448
QXV0b3Jlc2l6aW5nTWFzaw== 58449
KGNpZA== 58450
fQoKCgoKCg== 58451
XX0sCg== 58452
IERldGVjdGlvbg== 58453
dGFibGE= 58454
IGxpYmVydGllcw== 58455
X0RZTkFNSUM= 58456
d2dldA== 58457
IFTDvHI= 58458
IFBhc2NhbA== 58459
VHJhbnNwYXJlbnQ= 58460
RGVsYXllZA== 58461
XSgp 58462
IEhlcmJlcnQ= 58463
PEFjdGlvblJlc3VsdA== 58464
Y2hhbGxlbmdl 58465
IG11c2hyb29t 58466
Lmluc2VydEJlZm9yZQ== 58467
IFJpbg== 58468
IGh1bW91cg== 58469
IGbDuA== 58470
YXBpS2V5 58471
YWxsb2NhdGVk 58472
IGNvbmZlc3Npb24= 58473
LiIsDQo= 58474
CWFzc2VydFRoYXQ= 58475
IFNPUlQ= 58476
IExPUkQ= 58477
IGV4cG9ydGVy 58478
LnNldExldmVs 58479
cG9rZW1vbg== 58480
YXNodHJh 58481
IGbDqQ== 58482
dXJhdG9y 58483
KE1TRw== 58484
IHR1cA== 58485
IEh1bGw= 58486
IHlpZWxkZWQ= 58487
LlN1YmplY3Q= 58488
XFJvdXRl 58489
IT8= 58490
INGD0LTQsNC7 58491
XFNlY3VyaXR5 58492
LWFy 58493
IGFsbGVnYXRpb24= 58494
KFNldHRpbmdz 58495
w6RuZGVy 58496
IGVsbGlwc2U= 58497
IFJldHJvZml0 58498
IHJlZ3VsYXRpbmc= 58499
IE1vbGx5 58500
IExvaw== 58501
X0N1c3RvbQ== 58502
IFByb21v 58503
aXNpbg== 58504
IHJlc3VtZWQ= 58505
IG1ldHJvcG9saXRhbg== 58506
LmVycm9yTWVzc2FnZQ== 58507
Oi0tLS0tLS0tLS0tLS08Lw== 58508
Lm1s 58509
c2NvcGlj 58510
LnJlZnM= 58511
YXB0b3Jz 58512
IEluc3RydW1lbnRz 58513
IHByb3BhZ2F0ZQ== 58514
fS0+ 58515
IHBhc2Fkbw== 58516
dGhhbms= 58517
X0RlbGV0ZQ== 58518
IEJyaWdodG9u 58519
LHVuc2lnbmVk 58520
5L2c6ICF 58521
IGFzcGlyYXRpb25z 58522
LWhvdw== 58523
Um9zZQ== 58524
PSgo 58525
X25lZWRlZA== 58526
X3BsdXJhbA== 58527
PEFwcGxpY2F0aW9u 58528
IFdFRUs= 58529
IFVubG9jaw== 58530
IFRFTVA= 58531
U291 58532
IHNjaGl6b3BocmVuaWE= 58533
IHRyb2xs 58534
IGNvbXBsZW1lbnRhcnk= 58535
IE5FVFdPUks= 58536
IGJsaXI= 58537
IHByb2dyZXNzRGlhbG9n 58538
IiUo 58539
IEF0dHJpYnV0ZVNldA== 58540
CXRz 58541
Lml0ZXJpdGVtcw== 58542
6K+d 58543
IGVzY3JpdA== 58544
dm91cw== 58545
X3BsYWNlcw== 58546
SEs= 58547
IHNlZ3Vpcg== 58548
X2Z3 58549
IFJvdW5kZWQ= 58550
IGRpc3Bvc2l0 58551
6KeG 58552
cGFybQ== 58553
d293 58554
U1RSVUNUSU9O 58555
LmFsbG93 58556
IENoYXJTZXF1ZW5jZQ== 58557
CWV4dGVybg== 58558
IHByb3NlY3V0ZWQ= 58559
IG1vcnRhcg== 58560
IEp1ZGE= 58561
LW1zZw== 58562
IGVzdHVk 58563
LmdldERlc2NyaXB0aW9u 58564
IHNvdw== 58565
YW1icmU= 58566
IHJvbWE= 58567
RW5o 58568
Ym9udXM= 58569
IHNxdWF0 58570
IGRpc3RyYQ== 58571
ZWRJbWFnZQ== 58572
IHBlcHBlcnM= 58573
LXBlcmZvcm1hbmNl 58574
LAoKCg== 58575
LGZpbGU= 58576
IE1JTUU= 58577
X2NvbmNhdA== 58578
QUJT 58579
LWZhc2hpb24= 58580
IHVuZGVyY292ZXI= 58581
T25lVG9NYW55 58582
IHJlY2xhaW0= 58583
Q09QWQ== 58584
IGJpbmRz 58585
IFRhcGU= 58586
IGdvc3NpcA== 58587
IEVxdWl0eQ== 58588
L0NhcmQ= 58589
LmFjdGl2 58590
J2Ft 58591
IGRyYWluYWdl 58592
PFNjYWxhcnM= 58593
IG9uQmluZFZpZXdIb2xkZXI= 58594
KCk/Lg== 58595
IHNvcnJvdw== 58596
IEli 58597
dXB5 58598
X1VVSUQ= 58599
IENoYXJt 58600
IEVsZWN0aW9ucw== 58601
Lm9uRGVzdHJveQ== 58602
IEludGVyZXN0aW5nbHk= 58603
b3VuZGluZ0JveA== 58604
X2RldGVjdGlvbg== 58605
LWhlbGQ= 58606
X3Vua25vd24= 58607
IHJlZnJhaW4= 58608
IG3DqXRvZG8= 58609
IGVCb29r 58610
RU5PTUVN 58611
IGRhbmc= 58612
UHJvZmVzc2lvbmFs 58613
IGRpY3Rpb25hcmllcw== 58614
L215c3Fs 58615
IFNUVUQ= 58616
IG1hc3Nl 58617
c2NhcGU= 58618
IGRyZWk= 58619
Om5hbWU= 58620
LmxvZ28= 58621
U2lnblVw 58622
IHRhaHVu 58623
KHRoZW1l 58624
IEZlbW1l 58625
IGJvbWJlcg== 58626
IEphZGU= 58627
IFRheQ== 58628
IHN1Ym1hcmluZQ== 58629
X2NsYXVzZQ== 58630
enljaA== 58631
IHNpbXVsdGFuZW91cw== 58632
IGNhc29z 58633
LmJvb2xlYW4= 58634
KGxocw== 58635
IGNvbnRpbmVudGFs 58636
LXNhbGU= 58637
CWVudg== 58638
IEN1dGU= 58639
IEZhY3RvcnlHaXJs 58640
YWJ1cw== 58641
L3ZhbHVl 58642
IGphZHg= 58643
IHN0ZXJu 58644
Pj4KCg== 58645
IHN1cmZhY2Vk 58646
IOyggOyepQ== 58647
cGxhdHo= 58648
CWVtYWls 58649
Y2VwdG9ycw== 58650
Ij4o 58651
IGVwaWxl 58652
6K+7 58653
IERlYnQ= 58654
5ZGK 58655
Tk9Q 58656
Imh0dHBz 58657
Omo= 58658
Rm9ybUl0ZW0= 58659
X0xJQ0VOU0U= 58660
LmdldERvdWJsZQ== 58661
IEFnZW5kYQ== 58662
CWZpbmFsbHk= 58663
KGZpbHRlcnM= 58664
KGF2 58665
576O 58666
QVBFUg== 58667
IGxhdmE= 58668
0LXRgNC2 58669
KSkpKQoK 58670
IGZhdWx0eQ== 58671
X25t 58672
IHRyYXZh 58673
KEJpdG1hcA== 58674
IHNwZWVkaW5n 58675
PicpLg== 58676
IHNjcmVlbmVk 58677
X3JvbGw= 58678
IE1hY0Jvb2s= 58679
IEFVRA== 58680
IGRpYWdub3Nl 58681
LkdlbmVyYXRl 58682
IF5e 58683
IHN0cnM= 58684
W1Rlc3Q= 58685
IHJhbnNvbQ== 58686
IERIQ1A= 58687
ZWxkZW4= 58688
IGludGVycHJldGF0aW9ucw== 58689
KCldLg== 58690
ZmxhdE1hcA== 58691
IGxpbmVIZWlnaHQ= 58692
X21vdW50 58693
IFdpemFyZHM= 58694
IHNsdXRz 58695
ZWhsZXI= 58696
b2RhbA== 58697
IG1pbGl0aWE= 58698
5bI= 58699
ZWFybmVk 58700
IG1pc2VyeQ== 58701
aW50dmFs 58702
ZnVuZA== 58703
IGhpZGVz 58704
IGRpYXJy 58705
IFdlc2xleQ== 58706
IHhtbQ== 58707
IHF1ZW0= 58708
IEFyYWJz 58709
aWZ0aA== 58710
YXRlZ29yaXplZA== 58711
RGlzcG9zYWJsZQ== 58712
UHVyZQ== 58713
X05PVElGWQ== 58714
c25pcHBldA== 58715
IEdhcnJldHQ= 58716
LnJ1bm5pbmc= 58717
LndlaWdodHM= 58718
ICgtLQ== 58719
IGludmFyaWFudA== 58720
5LqL5Lu2 58721
IEFsbG93ZWQ= 58722
ZGlycw== 58723
IHBhc3Npb25z 58724
IGxhZA== 58725
IEZsdXNo 58726
bWVudXM= 58727
OmJsb2Nr 58728
IGNvbXByYQ== 58729
LmNob21w 58730
YWxsb2NhdG9y 58731
IGN1cmF0ZWQ= 58732
IEtub3dpbmc= 58733
IFBhdHRlcnNvbg== 58734
IHRlbGFo 58735
J2V4 58736
IGRvb21lZA== 58737
IHBoaWxhbnRo 58738
b3R0eQ== 58739
LnN0eWxlcw== 58740
T3duZWQ= 58741
IGFsbGVyZ2llcw== 58742
PXBhcmFtcw== 58743
b2Nlc2U= 58744
aXRlbGlzdA== 58745
IFNlbmRpbmc= 58746
YmVm 58747
b3JyYXI= 58748
IE7Do28= 58749
IEZhcmdv 58750
IEx1Yg== 58751
IENvbWJpbmVk 58752
X2dpdmVu 58753
CQkJCQkgICAg 58754
IHJlY29uY2lsaWF0aW9u 58755
UGF0dGVybnM= 58756
YXphcmQ= 58757
IGJpb21hc3M= 58758
IEhvdXNlcw== 58759
cmVzcHVlc3Rh 58760
Y2Nv 58761
L3RvcGljcw== 58762
IFl1aw== 58763
IHdlYWtlbmVk 58764
X2NhbGVuZGFy 58765
IG11bGhlcmVz 58766
IE1hcmw= 58767
IHNpbmU= 58768
IFRpbA== 58769
IFNvdWxz 58770
IERldXRzY2hl 58771
IEZPTExPVw== 58772
IHBpcGVsaW5lcw== 58773
IEJldmVybHk= 58774
X0RJUFNFVFRJTkc= 58775
IiM= 58776
IFByb3Rv 58777
LmJpZw== 58778
IFNhdmluZ3M= 58779
IFRhbno= 58780
anVu 58781
IEdhbW1h 58782
IFNhZGQ= 58783
IGFkdmlzb3Jz 58784
IHJvYXN0 58785
IHVudGVycw== 58786
dWRpZXM= 58787
X2xvbg== 58788
LXBvaW50ZXI= 58789
IEVsZW1lbnRSZWY= 58790
XEJ1aWxkZXI= 58791
ZXhhbXBsZUlucHV0 58792
LndlYmRyaXZlcg== 58793
ZGF0YVR5cGU= 58794
IFF1aXRl 58795
IENlbHRpY3M= 58796
dWls 58797
LWRlZmVuc2U= 58798
YmlzaA== 58799
IFVJV2luZG93 58800
IFN1ZGRlbmx5 58801
LmhvdA== 58802
LnJlYXNvbg== 58803
IGfDtnI= 58804
QU1E 58805
Lk11bHRp 58806
YXV0aGVudGljYXRlZA== 58807
cmVnaW9ucw== 58808
Oyg= 58809
0LDRgNCw0Lw= 58810
IEtpcmJ5 58811
JHJvdXRl 58812
UFJFQ0FURUQ= 58813
IER1cmhhbQ== 58814
b3dv 58815
IFBlcmZvcm1z 58816
IGRpc3JlZ2FyZA== 58817
bnN0 58818
IFBvbHM= 58819
IGdldFA= 58820
Il06 58821
LWNvbG9yZWQ= 58822
KEtleXM= 58823
IEFsbGVn 58824
X21vZGlmeQ== 58825
X2xvYWRpbmc= 58826
c3RyYWluZWQ= 58827
IGF0cm9j 58828
X3Bocg== 58829
PFNwcml0ZQ== 58830
IHNhdGlzZmFjdG9yeQ== 58831
bWFuc2hpcA== 58832
LnBpcGVsaW5l 58833
VG9ueQ== 58834
IHRoaWVm 58835
cG9sYXRvcg== 58836
KGxvY2s= 58837
YnVyc3Q= 58838
IE9wdGltaXphdGlvbg== 58839
IHN1cmZpbmc= 58840
Illlcw== 58841
IGRlc2NlbmRlZA== 58842
5pI= 58843
X0NsZWFy 58844
IGNyaWVz 58845
IEZyb3plbg== 58846
RElSRUNU 58847
LUNvbg== 58848
IExlaWNlc3Rlcg== 58849
5aWz 58850
T09N 58851
PWRi 58852
IGdldE1lc3NhZ2U= 58853
PFN0dWRlbnQ= 58854
X2JhdGNoZXM= 58855
Lk1hc2s= 58856
X2V0aA== 58857
XCk= 58858
IHNvbWE= 58859
Q2F0Y2g= 58860
W2No 58861
T3duZXJz 58862
aW5kbGU= 58863
OmF1dG8= 58864
LnZlcnQ= 58865
aXZy 58866
LnNldExvY2F0aW9u 58867
IGZsdWVudA== 58868
X0VORElBTg== 58869
IENhcmxv 58870
Y2VwdHM= 58871
YWRkQWN0aW9u 58872
Lm9hdXRo 58873
PFVuaXR5RW5naW5l 58874
cmVlbWVudHM= 58875
LlNraXA= 58876
PykKCg== 58877
LmRlZmF1bHRQcm9wcw== 58878
IGNhYmU= 58879
IFNoZW4= 58880
ZXJvc2lz 58881
IFByb2ZpdA== 58882
IHBvaXM= 58883
X0NSRUFURUQ= 58884
IHJlbW92ZUZyb20= 58885
KHdz 58886
P2FjdGlvbg== 58887
KEZpZWxk 58888
IGVycm9uZQ== 58889
Lm1pbmltdW0= 58890
IFJldHJpZXZlZA== 58891
IGRhZG8= 58892
IFBSSVZBVEU= 58893
LXNwZWM= 58894
IGd6aXA= 58895
cGRhdGE= 58896
IHBvc1k= 58897
KGxvdw== 58898
IHF1YWxxdWVy 58899
L2Nsb3Vk 58900
6rKM 58901
KGNvbW1vbg== 58902
IEFyYmVpdA== 58903
b3JnYW5pc2F0aW9u 58904
IHRpZHk= 58905
IFJvbGFuZA== 58906
KHBo 58907
LnpvbmU= 58908
IGdlbnRsZW1lbg== 58909
xrDhu6Nj 58910
5bGx 58911
IGVuY2xvc3VyZQ== 58912
IE1hbmFmb3J0 58913
CUNvbG9y 58914
U3RlbmNpbA== 58915
Tmlj 58916
IHRoZW9yZW0= 58917
IFZH 58918
IGNvbG91cmVk 58919
VkJveExheW91dA== 58920
dWxzaXZl 58921
RHJhZ29u 58922
Y2Zm 58923
ZXRlc3Q= 58924
ZW5zYQ== 58925
b2ZkYXk= 58926
LkF6dXJl 58927
OlVJQ29udHJvbEV2ZW50VG91Y2hVcEluc2lkZQ== 58928
X3VwZGF0ZXM= 58929
IHRyZW5keQ== 58930
dWdhcw== 58931
d2Vha1NlbGY= 58932
IHJpZGdl 58933
aWJyaQ== 58934
IOy2lA== 58935
KENH 58936
IE1vbmtleQ== 58937
LndyaXRlSW50 58938
LnRpbWVkZWx0YQ== 58939
Vmlld0NvbnRyb2xsZXJBbmltYXRlZA== 58940
IFByb3ZpZGVuY2U= 58941
44GI 58942
IGJsZW5kcw== 58943
L1N1YnRocmVzaG9sZA== 58944
IEFwcGw= 58945
IGF0YW4= 58946
IHJlbG9hZERhdGE= 58947
dW1ib3Ryb24= 58948
c3TDvHQ= 58949
T0F1dGg= 58950
IEdpdmluZw== 58951
IOyEpA== 58952
IEZpbm5pc2g= 58953
Y2hlY2tpbmc= 58954
LkVtYmVk 58955
c2VxdWVsaXpl 58956
IGluaXRpYWxpemVz 58957
IE9zbG8= 58958
2LY= 58959
Z2V0RXh0ZW5zaW9u 58960
X0FMVA== 58961
KGJsYW5r 58962
IGZhdGFsRXJyb3I= 58963
IGRlbWlzZQ== 58964
KioqKioK 58965
IFhT 58966
KEFG 58967
IEVucw== 58968
YW50aGE= 58969
IFBPUg== 58970
IG5pY2g= 58971
Lk5hbWVk 58972
IGdpZ2FudGlj 58973
IE9ic2VydmF0b3J5 58974
LlJlc29sdmU= 58975
IFBheW1lbnRz 58976
Z3VpbGQ= 58977
IGN1cnJlbnRTdGF0ZQ== 58978
PT09PT09PT09PT09PT09Cg== 58979
IFNleQ== 58980
cERhdGE= 58981
IGRlYWRsaW5lcw== 58982
IGNlbnRyYWxpemVk 58983
IFNjaG9sYXJzaGlw 58984
X3N1cHBvcnRlZA== 58985
LmNocm9tZQ== 58986
KCldKTsK 58987
IGN5YW4= 58988
IENhZ2U= 58989
QXV0aG9ycw== 58990
Xw0K 58991
L29z 58992
a2lt 58993
ZGVl 58994
LnRleA== 58995
IHlvdXJzZWx2ZXM= 58996
IG1ncg== 58997
IGFsaw== 58998
LWluc3RhbGw= 58999
IGRyYWZ0aW5n 59000
IHJ1bW9y 59001
IHN0YXR1ZXM= 59002
UG9vbGluZw== 59003
b2xpbmE= 59004
QUFBQUFBQUE= 59005
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 59006
IGV4dHJlbWlzdHM= 59007
Q2FsY3Vs 59008
aWdodGhvdXNl 59009
SW5zZXQ= 59010
KElOUFVU 59011
IHN5bmNocm9uaXphdGlvbg== 59012
aXZpcnVz 59013
LmF4ZXM= 59014
IEdhcA== 59015
LUFu 59016
X1RlbXBsYXRl 59017
IGdhbWVy 59018
IENyaWNrZXQ= 59019
IGxpbnQ= 59020
IGF1dGhvcml0YXJpYW4= 59021
TlNVSW50ZWdlcg== 59022
IHJlZG8= 59023
IGFkaXBpc2Npbmc= 59024
X0ZFVENI 59025
Y2hlaWQ= 59026
IEZhbmc= 59027
LmluZGljZXM= 59028
dG9uZQ== 59029
0LTQtdC7 59030
IHt7LS08 59031
YnJhaGlt 59032
IHNhbGE= 59033
Z2V0Q29kZQ== 59034
IGNvbW11bmljYXRlZA== 59035
c3RhcnRzV2l0aA== 59036
ZXJ0eg== 59037
UmVhZGFibGU= 59038
SXRlbUlk 59039
b3JlZmVycmVy 59040
Y3JlZGlibGU= 59041
w6FyaWE= 59042
IGNvbWJpbmVSZWR1Y2Vycw== 59043
KiovCgo= 59044
IGJsaXNz 59045
IGFkb3Ju 59046
ZGVwZW5kcw== 59047
IFJPT00= 59048
IGZyYW1pbmc= 59049
ID8nLA== 59050
YXV0eQ== 59051
X3BvdA== 59052
X3RhYnM= 59053
RXhhY3Q= 59054
LCIs 59055
ICd9JzsK 59056
IGFyYml0cg== 59057
YWhyYWlu 59058
LmdldFN0cmluZ0V4dHJh 59059
ICRc 59060
IG91dHB1dFN0cmVhbQ== 59061
IGNvbW1lbmM= 59062
YW51cw== 59063
Y2h5 59064
PEVtcGxveWVl 59065
IGhleGF0cmlnZXNpbWFs 59066
IG5hY2lvbmFs 59067
KHNlcmlhbGl6ZXJz 59068
X3B1dGNoYXI= 59069
X1NBRkU= 59070
ZW50aWFsQWN0aW9u 59071
SXRlbVNlbGVjdGVkTGlzdGVuZXI= 59072
LkRpc3BhdGNo 59073
Q29uZmxpY3Q= 59074
X2Fib3V0 59075
b3NhdXI= 59076
Qm91bmRhcnk= 59077
IGNsZWFyQ29sb3I= 59078
KExvY2F0aW9u 59079
IE1PTlRI 59080
IFRhc3Rl 59081
LUdlbmVyYWw= 59082
IFdBUg== 59083
IGVyaGFsdGVu 59084
LXNhdmluZw== 59085
IGNvdXBsaW5n 59086
LXRyaWdnZXI= 59087
bW90b3I= 59088
IHl5eXk= 59089
IFBhdGVudA== 59090
cHRv 59091
IG1pc2RlbWVhbm9y 59092
dmFzaW9u 59093
IEFkbWlyYWw= 59094
4LmJ4Liy 59095
X1BXUg== 59096
IGRldmFzdGF0ZWQ= 59097
Zm9saW9z 59098
SVRVREU= 59099
dXJyZWN0 59100
IHJvYm90aWM= 59101
IFNhbmN0 59102
IEhhd2FpaWFu 59103
LlJvdXRl 59104
LWNvbmRpdGlvbg== 59105
IHJr 59106
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK 59107
Y3JlYXRlRWxlbWVudA== 59108
IEtvcA== 59109
aWduYW50 59110
LnJvbGxiYWNr 59111
IHNhbHVk 59112
Xycs 59113
IEFOU0k= 59114
RXhjZXB0 59115
IERyYXdhYmxl 59116
LlV0Y05vdw== 59117
Ijpbewo= 59118
IGtvbGU= 59119
THVh 59120
IEJlbGlldmU= 59121
Q29tcHV0 59122
IGhhbGx1Yw== 59123
IFNpZ25z 59124
cnN0 59125
Lmh1 59126
IEtOT1c= 59127
V2k= 59128
IEJyYXNz 59129
IFJhcw== 59130
QGhvdG1haWw= 59131
IHNlZGltZW50 59132
IGFwaw== 59133
IOyDgQ== 59134
X3JlZ2lvbnM= 59135
IHBvZGl1bQ== 59136
PEJvb2s= 59137
0LbQtQ== 59138
IHNpeHRlZW4= 59139
IEFsaWFz 59140
IGluZnJhcmVk 59141
IFZhbmRlcg== 59142
IExlYWRpbmc= 59143
dWNpbmc= 59144
LDosOg== 59145
X2hvcg== 59146
d2F0 59147
IGTDqWNvdQ== 59148
X1dpZGdldA== 59149
U291bmRz 59150
X25hdmlnYXRpb24= 59151
IHNjaG5lbGw= 59152
KGdlbmVyYXRvcg== 59153
dWNlbmU= 59154
IHJlbWFrZQ== 59155
SVB2 59156
IHLDqWFs 59157
X0lOQ1JFTUVOVA== 59158
IGh5cG90aGV0aWNhbA== 59159
X2FuZw== 59160
IG9mcw== 59161
ICEK 59162
LmNvbXBsZXRlZA== 59163
R2V0VHlwZQ== 59164
IGtvbW1lbg== 59165
w6FsaWRv 59166
YWRkT24= 59167
IHrFgg== 59168
VUxB 59169
X2luZGljYXRvcg== 59170
J10KCgo= 59171
YXBhY2hl 59172
X1NlbGVjdA== 59173
IEdyZWVuZQ== 59174
V2hhdHM= 59175
X2FuaW0= 59176
IHJlcGV0aXRpdmU= 59177
bXVjaA== 59178
IFRocmVzaG9sZA== 59179
IGxm 59180
KENhdGVnb3J5 59181
Y29uZQ== 59182
TWl4 59183
X01FVEFEQVRB 59184
YXlzaWE= 59185
TmVpZ2hib3Jz 59186
CQoJCQo= 59187
SVBIRVI= 59188
IEZyYWc= 59189
IENlbGxz 59190
IG5hbWVzcGFjZXM= 59191
KGJhY2s= 59192
IFJlc3RhdXJhbnRz 59193
c3Zj 59194
INC70Lg= 59195
b3RlY2g= 59196
LXNs 59197
pb8= 59198
IFdU 59199
IFJlZHVjdGlvbg== 59200
IGRvdHRlZA== 59201
CWZvdW5k 59202
IFRFQU0= 59203
Qm9ybg== 59204
IE11c2g= 59205
IENvbXBhcmFibGU= 59206
IGhpdGNo 59207
QVRP 59208
IG1heEhlaWdodA== 59209
YmVnaW5UcmFuc2FjdGlvbg== 59210
w612 59211
X2Ju 59212
IGhlcmQ= 59213
IHJldmVyc2Fs 59214
IEhvbmQ= 59215
ZGVsaW1pdGVy 59216
IGNvbmZ1c2U= 59217
IGhvcHM= 59218
IGNlbnRyb2lk 59219
IGNvdXJ0cm9vbQ== 59220
LmRlY29yYXRvcnM= 59221
IG1waQ== 59222
IEltcHJvdmVk 59223
SU5ORVI= 59224
IEJhbmdhbG9yZQ== 59225
IFRhbWI= 59226
IGJvYXN0 59227
KCkpKQ0K 59228
IGlsbGljaXQ= 59229
IE1vcm9jY28= 59230
Z3JlZ2F0b3I= 59231
X3Jlc3VtZQ== 59232
IGNyYWNrZG93bg== 59233
IHBvcnRyYWl0cw== 59234
L2hpZ2g= 59235
KFwn 59236
IGF5dWQ= 59237
X2ZlZWRiYWNr 59238
IGNhdGU= 59239
L2F2YXRhcg== 59240
IGhlYg== 59241
UG9pbnRDbG91ZA== 59242
IOWSjA== 59243
IDwhWw== 59244
IGdldFJlc291cmNlcw== 59245
fTp7 59246
T3BlcmF0aW5n 59247
IEZvZw== 59248
CXRhYg== 59249
IFJlc2VhcmNoZXJz 59250
IGZhYnJpY2F0aW9u 59251
LmRhdGFzZXRz 59252
IENhbXBv 59253
IEthdWY= 59254
IGRsbA== 59255
bGlndA== 59256
XSkpOwoK 59257
c3RlbGxlbg== 59258
QUNLRVQ= 59259
bHZs 59260
IEdsb3J5 59261
LmRhdGVUaW1l 59262
IGNvbW11dGU= 59263
IG9uQ3JlYXRlVmlld0hvbGRlcg== 59264
IFhFbGVtZW50 59265
IFRva2Vucw== 59266
PHRoZWFk 59267
X3BpY2s= 59268
7KQ= 59269
dm9u 59270
ZGVwYXJ0dXJl 59271
KHJlbmRlcmVy 59272
cGhvbmVOdW1iZXI= 59273
KFBlcnNvbg== 59274
Z2VuZXM= 59275
IExhcnM= 59276
ICl7Cgo= 59277
IEpzb25SZXN1bHQ= 59278
IG1ldG9kbw== 59279
Vk9LRQ== 59280
LmdldFVzZXJJZA== 59281
QWNjZWxlcg== 59282
CXJlcXVpcmVk 59283
IGNoYW1waW9uc2hpcHM= 59284
QnVpbGRDb250ZXh0 59285
L3Rhc2s= 59286
L3JlbGVhc2Vz 59287
Q2F0ZWdvcmlh 59288
X292ZXJsYXk= 59289
IHNjYXJjZQ== 59290
X2xpbQ== 59291
bmdy 59292
YWhsZW4= 59293
IEFydGlmaWNpYWw= 59294
c3ByZWFk 59295
IGJvd2xpbmc= 59296
LmFuYWx5c2lz 59297
U01UUA== 59298
CXBhc3N3b3Jk 59299
IGJhdGhz 59300
XSkpewo= 59301
Y3VycmVudGx5 59302
YWNpZW50ZQ== 59303
X3NlcGFyYXRvcg== 59304
IGRlYmVy 59305
IERpc2FibGVk 59306
acOocmVz 59307
IOKV 59308
X3Byb2Nlc3Npbmc= 59309
IHByb3Rlc3Rpbmc= 59310
IFJPVA== 59311
Z3JhYg== 59312
INC30LDQug== 59313
IHByb2FjdGl2ZQ== 59314
d29yZHByZXNz 59315
IFNldmVy 59316
aW5kZW4= 59317
IHdpa2lwZWRpYQ== 59318
KXsNCg0K 59319
X3dpbmRvd3M= 59320
aXNsYXRpb24= 59321
IHVucmVzdA== 59322
IGRpc21pc3NhbA== 59323
Lk5VTQ== 59324
X0ZBU1Q= 59325
aXNzdWVk 59326
IEZBQ0U= 59327
X3VuZGVy 59328
IHBsdWdnZWQ= 59329
IOWw 59330
IGLEmWR6aWU= 59331
IElDQw== 59332
IGNvbWJ1c3Rpb24= 59333
IGtpc3NlZA== 59334
IHN0YXJyZWQ= 59335
IFdhdHRz 59336
IHNwaWVsZW4= 59337
LXB1cnBvc2U= 59338
IEV2YWw= 59339
YXJnZXM= 59340
LHJlc3VsdA== 59341
dGVjaG5vbG9neQ== 59342
IG5hdGlvbmFsaXR5 59343
aWN1cw== 59344
IE51Zw== 59345
INGC0L4= 59346
CQkJCQkJCSAg 59347
Y29sbw== 59348
IGdhc3Rybw== 59349
YW50ZWVk 59350
T0xJRA== 59351
LmJpYXM= 59352
X3RlbGU= 59353
Lmluc3BlY3Q= 59354
IHZlaWw= 59355
LmZvb3Rlcg== 59356
IG5lZ2xpZ2VuY2U= 59357
IGp1ZGdtZW50cw== 59358
Um9vbXM= 59359
eW5u 59360
CWNvdW50ZXI= 59361
b2NjdXBhdGlvbg== 59362
IOeUnw== 59363
dW5hcw== 59364
ICheKSg= 59365
TGFtYmRh 59366
ZmVs 59367
LlBhcmFtcw== 59368
INC00L7QsdCw0LI= 59369
c2V0TGF5b3V0 59370
IGRlcG9ydGF0aW9u 59371
IGxvY2FsT2JqZWN0 59372
IFBoYXJtYWNldXRpY2Fs 59373
Y2VwdGl2ZQ== 59374
IE5vbWU= 59375
RXF1aXBtZW50 59376
RmFu 59377
VW5pdmVyc2Fs 59378
CXNvY2tldA== 59379
IGdyaW4= 59380
IGV4cG9zZXM= 59381
IGhhYmVy 59382
IHNpbmNlcmVseQ== 59383
IGNhbXM= 59384
IG3DvA== 59385
ZW5pYQ== 59386
RW1lcg== 59387
Q3J5cHRv 59388
U2xvdw== 59389
KHhocg== 59390
IT0o 59391
LXNlcnZpY2Vz 59392
IFBX 59393
IHByZW5kcmU= 59394
IG3DpGRjaGVu 59395
ZW1vbnM= 59396
0L7Qt9Cy0YDQsNGJ 59397
Lk1hbmFnZXI= 59398
7Jk= 59399
IGdyYWY= 59400
LXJh 59401
bWV0cmljYWw= 59402
L2Zs 59403
IGNlbWV0ZXJ5 59404
Z2Vucw== 59405
IHDFmQ== 59406
IE15U3FsQ29tbWFuZA== 59407
LVRv 59408
IHbDpQ== 59409
IGFpcnN0 59410
b21lbnR1bQ== 59411
IHNlcnZv 59412
bWlsbGlvbg== 59413
IE1pcmFuZGE= 59414
IlNoZQ== 59415
IGFkdm9jYXRpbmc= 59416
LWNhcHRpb24= 59417
IEF0dHJpYnV0aW9u 59418
IHdlbGNoZQ== 59419
X3ZlbmRvcg== 59420
CVN0YXR1cw== 59421
YXJyaXM= 59422
IHByaW50aw== 59423
IiwiIw== 59424
IHJlbGF0aXY= 59425
aWZmZXJlbmNlcw== 59426
aXp6ZXM= 59427
IGRlY2ltYWxz 59428
IFByb3Y= 59429
Lm1heGltdW0= 59430
QXJu 59431
IGhlbGljb3B0ZXJz 59432
X0JPVFRPTQ== 59433
Y2h1cmU= 59434
b2Rpbmdz 59435
Jyg= 59436
IikpKTsNCg== 59437
KGJlYW4= 59438
LmZk 59439
RnVuZA== 59440
IGhhbmdz 59441
YXBwaWQ= 59442
L2tlcm5lbA== 59443
LnBvaQ== 59444
Lk1pblZhbHVl 59445
LXZhbGlkYXRpb24= 59446
THVrZQ== 59447
Y2Rm 59448
IEZ1bmVyYWw= 59449
IFNhbXBsZXM= 59450
CWRl 59451
IHRvYXN0cg== 59452
IHRheGFibGU= 59453
IGNsdXN0ZXJpbmc= 59454
ICdcJw== 59455
IHJlc3RyYWludA== 59456
ZWNlZA== 59457
Y2hhaW5z 59458
44CC77yI 59459
X0dSQVBI 59460
IGZ1ZWxlZA== 59461
6ZyA 59462
SHA= 59463
5aSN 59464
VGlsZXM= 59465
IGF1bnF1ZQ== 59466
SkM= 59467
IGhvc3RhZ2U= 59468
IEVzaw== 59469
IG1hdg== 59470
IGdlc3Rpb24= 59471
IGJhbm5lcnM= 59472
fXsk 59473
LmludFZhbHVl 59474
LiciCgo= 59475
X01BVFJJWA== 59476
IGNlYXNlZA== 59477
IEdPRA== 59478
X0NBTUVSQQ== 59479
LkFsbG93VXNlcg== 59480
dHJhY2tlZA== 59481
Q29vaw== 59482
YmFpcnJv 59483
KGNvbXBhbnk= 59484
IHZpZXdwb2ludA== 59485
LmdldFdyaXRlcg== 59486
IE5ldHM= 59487
d2l2ZXM= 59488
ICgpKQo= 59489
ZXhhbXBsZU1vZGFs 59490
CWNoaWxk 59491
IG15dGhvbG9neQ== 59492
IC8vIg== 59493
X2F4ZXM= 59494
aWJvbGQ= 59495
LkRhcms= 59496
IE1heHdlbGw= 59497
IGdwb2ludGVy 59498
b2xpY2l0dWQ= 59499
QmF0 59500
dWxuZXI= 59501
YmFsYW5jZWQ= 59502
bWFpbGVy 59503
IGNvbnRlbXBvcg== 59504
5omL5py6 59505
KCJfXw== 59506
ICIpIg== 59507
cmVhcg== 59508
IEh1YW5n 59509
XScpCg== 59510
16k= 59511
RlRB 59512
IENhbGxpbmdDb252ZW50aW9u 59513
IE91dHB1dHM= 59514
UGs= 59515
LlJlZmVyZW5jZQ== 59516
bGVjdHVhbA== 59517
ICk6Cgo= 59518
IGJyYWNlbGV0 59519
dWdlcg== 59520
CUVycm9y 59521
U3dlZXQ= 59522
KCIvIik7Cg== 59523
aHg= 59524
IHVucmVhc29uYWJsZQ== 59525
SW50ZXJwcmV0ZXI= 59526
IGxvZnQ= 59527
X3Byb2R1Y3Rv 59528
IHNvY2lldGFs 59529
LlBhcnNlcg== 59530
IEFkYXB0 59531
LmZvbw== 59532
KHdoZXJl 59533
LkZlYXR1cmU= 59534
IFlhbWFoYQ== 59535
Z2xhc3M= 59536
Rm9yZ2U= 59537
IHByb2hpYml0cw== 59538
IGNhcGFjaXRpZXM= 59539
IO2VqOyImA== 59540
IHBlcm11dGF0aW9u 59541
IGlobQ== 59542
Rmxk 59543
ZWxpYWw= 59544
PT09PT09PT09PT0K 59545
QENvbmZpZ3VyYXRpb24= 59546
IGdlYXJlZA== 59547
aW9zbw== 59548
aWVzdGE= 59549
dHJhbnNsYXRpb25z 59550
SW5wdXRDaGFuZ2U= 59551
UG9wdWxhcg== 59552
IFBMVVM= 59553
IHZm 59554
X0ZyZWU= 59555
YmJveA== 59556
IGNhdXNhbA== 59557
UElMRQ== 59558
IHNjaMO2 59559
IGlyb25pYw== 59560
TWly 59561
LkA= 59562
5Y2X 59563
IOiH 59564
UmV3 59565
dWxlbmNl 59566
Zmxlbg== 59567
IGNhbkFjdGl2YXRl 59568
LXJlc3BvbnNl 59569
IGFjY2VudHM= 59570
aWdub3JlZA== 59571
wrBG 59572
LkRlcGVuZGVuY3lJbmplY3Rpb24= 59573
CXBvaW50 59574
IGNvbnRpbmdlbnQ= 59575
IHNxdWFzaA== 59576
IHBhcm1z 59577
IENlbWV0ZXJ5 59578
IGRlbHRhVGltZQ== 59579
IERPUw== 59580
IHZhbmlzaGVk 59581
0LDRgNCw0LzQtdGC 59582
IERQUw== 59583
dGZvb3Q= 59584
IFp1cw== 59585
X0lOU1RBTEw= 59586
R0FO 59587
IGFyYg== 59588
IG11bmljaXBhbGl0aWVz 59589
SW50b0NvbnN0cmFpbnRz 59590
QXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50cw== 59591
LGltYWdl 59592
X2lnbm9yZQ== 59593
IGRhbmdlcm91c2x5 59594
cXVpc2E= 59595
cGx1Y2s= 59596
IGhhcnVz 59597
dXBwZQ== 59598
SHR0cEV4Y2VwdGlvbg== 59599
QnJhY2tldA== 59600
LicnCgo= 59601
IFRvbA== 59602
IFZpZXdlcg== 59603
emJvbGxhaA== 59604
LkNvZGVBbmFseXNpcw== 59605
w6xuaA== 59606
IGNvcnJlY3RhbWVudGU= 59607
LmRh 59608
IEFsZ2Vy 59609
15A= 59610
YmF1bQ== 59611
IFBhbnRoZXI= 59612
cGFydGljaXBhbnQ= 59613
5b+F 59614
LXN1cA== 59615
IGVtdWxhdG9y 59616
IGZhZGluZw== 59617
IFdvbHZlcg== 59618
Y3JlYXRlcw== 59619
IGJvb2tpbmdz 59620
LlF1ZXN0aW9u 59621
p+ihjA== 59622
IHN0cmVzc2Vz 59623
IHJld3JpdHRlbg== 59624
LlBJUEU= 59625
ZWRlcw== 59626
IGNiZA== 59627
IjoiLw== 59628
IGVuaGFuY2VtZW50cw== 59629
X3N5 59630
QklO 59631
IFNsaXA= 59632
SW5zcGVjdA== 59633
IFdlZw== 59634
IGNvbmdyZWdhdGlvbg== 59635
IF86 59636
X3Jt 59637
RnJhbWVidWZmZXI= 59638
ICcmIw== 59639
IEZhbGxvdXQ= 59640
SXNSZXF1aXJlZA== 59641
IFBlYXJzb24= 59642
IEZBQ1Q= 59643
IHJlbGll 59644
CWJveA== 59645
IFNoZXBoZXJk 59646
IFdpa2lMZWFrcw== 59647
IENvbGxlY3Rvcg== 59648
IHJlc2l6ZWQ= 59649
bWV0aG9kTmFtZQ== 59650
IGV2ZW50VHlwZQ== 59651
IEF0aGVu 59652
RGVzY3JpcHRvcnM= 59653
IGJlcnM= 59654
LW9wZXI= 59655
IEluaXRpYWxseQ== 59656
5aE= 59657
X0JUTg== 59658
ICAgICAgICAgDQo= 59659
w6Fi 59660
X2NhbXBhaWdu 59661
X3dhdGNo 59662
Rm9yZA== 59663
LWRhdGVwaWNrZXI= 59664
IHZpc2M= 59665
IHNhdHU= 59666
X3Ntcw== 59667
IGNvbnRhZG9y 59668
LXN2Zw== 59669
IERPSQ== 59670
JGFyZ3M= 59671
IGtub2I= 59672
LkJPTEQ= 59673
IGRlYmF0ZWQ= 59674
aW1ncw== 59675
c29ja29wdA== 59676
dHJ1dGg= 59677
IEZlZXM= 59678
IGhXbmQ= 59679
X2Zvb2Q= 59680
IGFicmFz 59681
IG5vdGlvbnM= 59682
IFRvZA== 59683
OmNyZWF0ZQ== 59684
IENvbmZsaWN0 59685
VXN1YXJpb3M= 59686
T1RPUw== 59687
IG1zbQ== 59688
S0hUTUw= 59689
KFso 59690
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 59691
IH1d 59692
d2l6YXJk 59693
IG1pZW50cmFz 59694
IGRhdGFMaXN0 59695
IGVtZXJnZXM= 59696
xINuZw== 59697
LlJlYWRJbnQ= 59698
UEdB 59699
SUxMSVNF 59700
SUVudW1lcmF0b3I= 59701
KHR1cGxl 59702
Q2hyaXN0bWFz 59703
TG9va0FuZEZlZWw= 59704
b2dlbmVyYXRlZA== 59705
ICMKCg== 59706
Y29udHJvbGxlZA== 59707
IGV4cXVpc2l0ZQ== 59708
IGFjZXN0 59709
UmVhZFdyaXRl 59710
R2Fpbg== 59711
44CN44CM 59712
IGNvcHlyaWdodGVk 59713
IGRvb20= 59714
LlRhYmxlTGF5b3V0UGFuZWw= 59715
IERvcnQ= 59716
IGNoaWxp 59717
IHdlcms= 59718
IEVWRU5UUw== 59719
IEJlYWNvbg== 59720
IHNoaXBtZW50cw== 59721
IHNlYmFnYWk= 59722
dXBvbg== 59723
dXRvbQ== 59724
LmNvbnZlcnRlcg== 59725
LkRyb3BUYWJsZQ== 59726
PXt9Cg== 59727
Zmlj 59728
fgoK 59729
IGxlc2JpYW5z 59730
X25h 59731
Rm9yZWlnbg== 59732
CXRoZW4= 59733
L21z 59734
IG9yaQ== 59735
Z2V0UHJvcGVydHk= 59736
CXNucHJpbnRm 59737
aGVzaW9u 59738
44Gk 59739
In0sIg== 59740
IGFjcnlsaWM= 59741
UGVycw== 59742
QEVuYWJsZQ== 59743
SXNs 59744
KENhcmQ= 59745
LlN0YWNr 59746
TGljZW5zZWQ= 59747
X0dVSUQ= 59748
OnRpdGxl 59749
IGh1c3Q= 59750
IHByaW5jaXBhbFRhYmxl 59751
YW5pdGl6ZQ== 59752
L2VtYmVk 59753
IGVuc3VyZWQ= 59754
IEVHTA== 59755
2YjYsQ== 59756
IOWIhg== 59757
LywK 59758
IGZ1bmRyYWlzZXI= 59759
S2V5TmFtZQ== 59760
IG1hcmNoZWQ= 59761
X1ZBTFVFUw== 59762
IFNjZW5hcmlv 59763
IG1ldGlj 59764
X2Fzc29jaQ== 59765
IFBhc3Rvcg== 59766
CQkJCQkJCQkJCQkJCQkJCQkJ 59767
ZXJhdGU= 59768
IGludml0YXRpb25z 59769
cXVvaXNl 59770
IGJsYW1pbmc= 59771
IGRhcmluZw== 59772
VU1NWQ== 59773
IHJpY2hlcg== 59774
ZW1ha2Vy 59775
IElkZW50aWZpY2F0aW9u 59776
IOyduA== 59777
IEJpbmRpbmdGbGFncw== 59778
Y2hhcw== 59779
IHJlc2lsaWVudA== 59780
X3Bn 59781
IHJlbGVn 59782
IElSQQ== 59783
U1RF 59784
IHRyYWN0b3I= 59785
LWxvYWRpbmc= 59786
IFByZXZpb3VzbHk= 59787
IFZhY2M= 59788
L2Jl 59789
IG7DpXI= 59790
IHVybGVuY29kZQ== 59791
IE5vcmZvbGs= 59792
LlJlbGVhc2U= 59793
IE5ldXRyYWw= 59794
5Lit5Zu9 59795
IEFybGluZ3Rvbg== 59796
IGFsbGVnZXM= 59797
IFdyaXRlcnM= 59798
VGVzdGVy 59799
IFJhbGx5 59800
IGPDoQ== 59801
CVByaW50 59802
IOKHkg== 59803
IFVzZXJDb250cm9sbGVy 59804
IFNlZWtpbmc= 59805
LlZBTA== 59806
TGlzdE5vZGU= 59807
X2Zm 59808
IFBoaWxsaXA= 59809
RkFDVA== 59810
IGNhcmFtZWw= 59811
IE11bHRpcA== 59812
IENvbXBhcmVk 59813
IFNlcmJpYQ== 59814
n7M= 59815
IHJldml2ZQ== 59816
IEthbnll 59817
IHZlcmdl 59818
IEJ1bGdhcmlh 59819
Z2V0Qm9keQ== 59820
IHw+ 59821
Y2VwaA== 59822
LkRhdGVUaW1lUGlja2Vy 59823
LiI7Cgo= 59824
IFRpZQ== 59825
LGl0ZW0= 59826
IG1lbm4= 59827
R2Fz 59828
b2NoYQ== 59829
X3ZpcnR1YWw= 59830
IG1hc3RlcnBpZWNl 59831
X3NlcXVlbmNlcw== 59832
TFRF 59833
IFN1Ym1pc3Npb24= 59834
Q2FsbGVy 59835
JFw= 59836
U3BvcnQ= 59837
YWd1cw== 59838
Q29uc3RyYWludE1ha2Vy 59839
IGNvbG9j 59840
IHdpZw== 59841
INCj 59842
CUFycmF5 59843
TG9va3M= 59844
IEdUQQ== 59845
LnN0ZXBz 59846
YXRjaGV3YW4= 59847
X3Jhbmdlcw== 59848
ZXh0QWxpZ25tZW50 59849
IEJyZW5uYW4= 59850
IGFic3RyYWN0aW9u 59851
dWxlckFuZ2xlcw== 59852
Lm1pc2M= 59853
IGFudGlib2RpZXM= 59854
IGV4cG9uZW50aWFs 59855
IENIQU5ORUw= 59856
ZXhwZW5zZQ== 59857
J3k= 59858
IGRldGVjdGl2ZXM= 59859
IHB1cnBvcnRlZA== 59860
WVNURU0= 59861
IHJhZGlvYWN0aXZl 59862
IExhdGluYQ== 59863
LkVuY29kaW5n 59864
LlRBRw== 59865
eGlu 59866
RGVncmVl 59867
dXJhY2lvbg== 59868
cHJpY2Vz 59869
IFJlZmVyZW50aWFsQWN0aW9u 59870
IHJhcml0eQ== 59871
IHBpbGVz 59872
Z2VuZGU= 59873
X3Byb2plY3Rz 59874
X2dsb2JhbHM= 59875
LnN0YXJ0VGltZQ== 59876
IOq1rA== 59877
U0VDVElPTg== 59878
X3B1Ymxpc2g= 59879
RmF1bHQ= 59880
RERM 59881
X3ByaW9y 59882
TW9t 59883
IHRoaWNrZXI= 59884
IHNlcXVlbGl6ZQ== 59885
IGVzc2VudGlhbHM= 59886
c3RyYXM= 59887
aW50cg== 59888
PigoKQ== 59889
Lm1hbmFnZW1lbnQ= 59890
ZWls 59891
6Zet 59892
QXdhcmU= 59893
LkNpdHk= 59894
IEFyYml0 59895
X0RN 59896
X2tleWJvYXJk 59897
TE9iamVjdA== 59898
LXdlYnBhY2s= 59899
IE5ld3BvcnQ= 59900
IHByaW5jaXBhbENvbHVtbg== 59901
bGVnYW50 59902
IHBhbGxldA== 59903
IGZyYWN0dXJl 59904
IGdtYWls 59905
Lk1ldGE= 59906
QWJvdmU= 59907
LktleUV2ZW50 59908
aml0 59909
X21hY3Jv 59910
X1BVU0g= 59911
4bup 59912
L2NvbnRyb2xsZXI= 59913
5Yqg6L29 59914
IHN1cGVyZmljaWFs 59915
ZXh0ZXJpdHk= 59916
IG1lbnNhZ2Vt 59917
V2luZA== 59918
aXN0b24= 59919
Lm9wZW5hcGk= 59920
0LjRgNC+0LI= 59921
IFNlcmlhbGl6ZXI= 59922
dWN0aXZl 59923
IHphcg== 59924
UGxhY2Vz 59925
LlN0YXRpYw== 59926
QmE= 59927
IGluYWR2ZXJ0 59928
IEluZG9uZXNpYW4= 59929
X0lQVg== 59930
KGhvcml6b250YWw= 59931
IGdldFRpdGxl 59932
aWRlcHJlc3M= 59933
IENvbnNvbGVDb2xvcg== 59934
aXBlcnM= 59935
JG91dA== 59936
IGZlc3RpdmU= 59937
IGV2ZW5pbmdz 59938
LkdldERhdGE= 59939
dWl0a2E= 59940
IE1hbnVhbHM= 59941
dXNzZWQ= 59942
X01heA== 59943
LkNoYXQ= 59944
IEFpcmNyYWZ0 59945
PWNvbQ== 59946
Rk9VTkQ= 59947
YXBybw== 59948
IHRyZWFzdXJlcw== 59949
X2FsaXZl 59950
IGdhZGdldA== 59951
ZWtpbmc= 59952
QnV0dG9uRG93bg== 59953
QnJvd3NhYmxl 59954
LlBFUk1JU1NJT04= 59955
UEFTU1dPUkQ= 59956
IEhBU0g= 59957
ZsOp 59958
XFRlc3RDYXNl 59959
TE9TUw== 59960
b3RoZXJz 59961
LEo= 59962
IGFzc2hvbGU= 59963
d2Vyaw== 59964
IG3Dow== 59965
Lmll 59966
ZXZpbA== 59967
a29udGFrdGU= 59968
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K 59969
PXN5cw== 59970
CWxvY2s= 59971
LS07Cgo= 59972
X0ZVTg== 59973
RmlsbENvbG9y 59974
w7Nh 59975
cHJlbmQ= 59976
IGNvbXByZXNzb3I= 59977
TW90aGVy 59978
IEFyY2hlcg== 59979
LmdvdG8= 59980
IHfDvHJkZQ== 59981
IGJhbWJvbw== 59982
77yO 59983
IFRyZWVz 59984
IGJ1bXBlcg== 59985
IHNhdXNhZ2U= 59986
IEVsYXN0aWNzZWFyY2g= 59987
IGhvcml6b250YWxseQ== 59988
IEd1bA== 59989
SW1tdXRhYmxl 59990
IGxvc2Vy 59991
IGFib3J0ZWQ= 59992
LWRlbW8= 59993
IEhhdGNo 59994
IHVuZGU= 59995
IHByb2Nlc3Nv 59996
LWNhbGw= 59997
SW5jb21l 59998
5YM= 59999
X3JldHVybnM= 60000
J10uIic= 60001
KHN3 60002
Q0JT 60003
YW1pbGllcw== 60004
IFlvdXJzZWxm 60005
IEhvbHQ= 60006
Lk1PTg== 60007
4KeH 60008
0YjQtQ== 60009
YW5vbg== 60010
IEZvbnRBd2Vzb21l 60011
cHJvZHVjZXI= 60012
anI= 60013
IG1hdQ== 60014
CWludGVy 60015
IGRpc2hvbmVzdA== 60016
IG1hZ25h 60017
IENvbGxlY3RpdmU= 60018
IHZyYWltZW50 60019
IGNob2l4 60020
c3RheQ== 60021
IHdlbGRpbmc= 60022
cmlzaW5n 60023
LG1pbg== 60024
IEZhdGU= 60025
Z2xvYg== 60026
UkdCQQ== 60027
IGRldHRl 60028
VmVu 60029
IGVtYmFycmFzc21lbnQ= 60030
LkRFTEVURQ== 60031
Z3JlZ2Fy 60032
LXJlbmRlcg== 60033
KGJ1Y2tldA== 60034
Ij4KCgo= 60035
LndhaXRLZXk= 60036
QnVzeQ== 60037
IGRpZmZlcmVudGlhdGlvbg== 60038
IENTVA== 60039
LkNvbnN0YW50 60040
IGxpbmVOdW1iZXI= 60041
KG1hdGNoZXM= 60042
IHdlYnNvY2tldA== 60043
IGJhcnJlZA== 60044
IHB1ZWRlcw== 60045
TW9ubw== 60046
Q09SRQ== 60047
SUlE 60048
ICAgIA0KDQo= 60049
IHDDumJsaWNv 60050
bGVhbmluZw== 60051
IGNsZWFuc2luZw== 60052
IGNyaXM= 60053
IERldmlscw== 60054
X1NFVFRJTkc= 60055
dW50YXJ5 60056
Lik7Cg== 60057
CiAgIAo= 60058
W2N1cnI= 60059
dHN5 60060
IEFsZXhpcw== 60061
cml0ZWw= 60062
IHBldHJvbGV1bQ== 60063
LnByZXByb2Nlc3Npbmc= 60064
bWF0dGVy 60065
Rm9yUmVzdWx0 60066
LWxpY2Vuc2U= 60067
IHRyYXZlbGxlcnM= 60068
IERpc3BhdGNoZXI= 60069
ZW5uaWZlcg== 60070
IGRpZ2VzdGl2ZQ== 60071
UEVE 60072
aGliaXRpb24= 60073
TUFTQ29uc3RyYWludE1ha2Vy 60074
IFdhdHQ= 60075
QmVuZWY= 60076
LnNldFZpZXc= 60077
ZHRv 60078
VEVF 60079
IFBlbG9zaQ== 60080
X0VYVFJB 60081
IG1lZGFscw== 60082
eGhy 60083
Zm9yZWNhc3Q= 60084
IG5hcmdpbg== 60085
b3Vucw== 60086
LWZpbGw= 60087
X0NVUlNPUg== 60088
IHN1cGVydmlzZWQ= 60089
IHR1cmY= 60090
IEVkZ2Fy 60091
UE9TSVRJT04= 60092
IGNhdGVnb3J5SWQ= 60093
4ok= 60094
X0VS 60095
4bunYQ== 60096
U2hvd24= 60097
Lmxs 60098
X1BPTElDWQ== 60099
KCksJw== 60100
IFByZXY= 60101
IFN0cmluZ0ZpZWxk 60102
CUdsb2JhbA== 60103
YXNzZWQ= 60104
VGhyb3VnaG91dA== 60105
b3N0cmluZ3N0cmVhbQ== 60106
LmF3dGV4dHJh 60107
IHNsb3Blcw== 60108
IFNlcXVlbnRpYWw= 60109
IGdpb3Ju 60110
IHplbGY= 60111
IHZlcnNhdGlsaXR5 60112
bGVuZWNr 60113
LmNnaQ== 60114
IGRvdWJsaW5n 60115
IEJhbmdrb2s= 60116
IGJ1dXJ0 60117
IHVzdcOhcmlv 60118
c3R1ZGlv 60119
IGpldW5lcw== 60120
IG11dGVk 60121
IGlwcw== 60122
X2ZyYWN0aW9u 60123
JiYo 60124
IHN0dW50 60125
Jyk7Pz48Lw== 60126
IExpZ2E= 60127
IHF1YWxpdMOp 60128
QXNzaWduYWJsZQ== 60129
IHdvcmthcm91bmQ= 60130
IHNwdXI= 60131
IHNsZXc= 60132
X0dF 60133
IEFncmljdWx0dXJhbA== 60134
IHJlbGVudGxlc3M= 60135
KFF1ZXJ5 60136
IFNlY3Rpb25z 60137
IHJldmlld2Vycw== 60138
UmFpbg== 60139
ZGxn 60140
YXNzZXJ0RmFsc2U= 60141
IG5vbWluZWVz 60142
X18pLg== 60143
LmR5bmFtaWM= 60144
IFBCUw== 60145
Q2hhbmdpbmc= 60146
IHNsaWdodGVzdA== 60147
IE1hbmc= 60148
fT4NCg== 60149
IGV2YXBvcg== 60150
YmFibGU= 60151
IFBSSUNF 60152
IOaz 60153
bHVjZW50 60154
IHZhbXA= 60155
IFRlY2huaWNpYW4= 60156
IHVuaXF1ZW5lc3M= 60157
TWVz 60158
dXJiYW4= 60159
LnBhcmFtZXRyaXpl 60160
IFJlcGxheQ== 60161
U2Vzc2lvbnM= 60162
ZW1icg== 60163
LUFtZXJpY2Fucw== 60164
X1BST1hZ 60165
IHBpYW4= 60166
IHRyaWU= 60167
IERlc3RydWN0b3I= 60168
R2FtZVN0YXRl 60169
IElNRg== 60170
Y2hpbg== 60171
IHBvcnRl 60172
IFN3YWw= 60173
5Z+O 60174
U3Vic3RyaW5n 60175
aW1pbmc= 60176
L0xpYnJhcnk= 60177
IGZyaWdodGVuZWQ= 60178
d3JpdGVz 60179
IHJlY3Vyc29z 60180
YXJSZXN1bHQ= 60181
X0lOSVRJQUxJWg== 60182
IEJhZGdl 60183
X2NyYw== 60184
RWlnaHQ= 60185
IERJU1RJTkNU 60186
IHRocm8= 60187
QFhtbA== 60188
IExlZ2VuZGFyeQ== 60189
LXR3aXR0ZXI= 60190
X2Vhc3k= 60191
ICsrKw== 60192
KERBVEE= 60193
LkxvY2FsZQ== 60194
IGvDpA== 60195
IG51cnQ= 60196
IGNydWlz 60197
X2lvcw== 60198
IHNlbnNpbmc= 60199
X0xpbmU= 60200
CiAgICAgICAgICAgICAgICAgICAgCg== 60201
cG9uZw== 60202
b2xlb24= 60203
IHdpbGRjYXJk 60204
55So5oi35ZCN 60205
IGJlZ2dpbmc= 60206
Um9k 60207
IMOO 60208
X0NFTEw= 60209
UmVzZWFyY2hlcnM= 60210
LnNlbGVjdG9y 60211
X2luZw== 60212
IGFzcGlyaW5n 60213
IGltbW9ydGFs 60214
IHltaW4= 60215
X3JvYm90 60216
IHBsdXI= 60217
QlRD 60218
IERJRA== 60219
IHBpZXJjaW5n 60220
KnU= 60221
X0RFRklORUQ= 60222
IFRoaQ== 60223
aXRhaXJl 60224
KG1lZGlh 60225
LW9ucw== 60226
IGNoZWZz 60227
ICIqLg== 60228
L0FQ 60229
IHJhem9y 60230
IHNlYXJjaERhdGE= 60231
ID0m 60232
IOOAgg== 60233
IG1vdXJu 60234
dGluZ2hhbQ== 60235
IG9saQ== 60236
IFZlcm5vbg== 60237
X1JT 60238
nuaApw== 60239
IGbDoWNpbA== 60240
YW5nZW4= 60241
Y2VsYWlu 60242
IGFpbA== 60243
bGVzdA== 60244
IFFDT01QQVJF 60245
Z2Fpbg== 60246
IM61 60247
IEtvYg== 60248
IEZhdWx0 60249
X2NvbmZpZ3M= 60250
57uT5p6c 60251
Lis= 60252
Y2FsYXI= 60253
KGNvbG9ycw== 60254
TXVs 60255
X0FSVA== 60256
IGV4cGVyaW1lbnRpbmc= 60257
ZXJtZW4= 60258
IEFuZ2xv 60259
LkZpeGVkU2luZ2xl 60260
U2Vh 60261
IGN0eHQ= 60262
LnNsaWRlcg== 60263
Q29sbGFwc2U= 60264
R3JleQ== 60265
IGZsZA== 60266
LXByb29m 60267
LmNhcGFjaXR5 60268
Z2V0UGFyZW50 60269
IENvbXBsaWFuY2U= 60270
IGJ1cmds 60271
LXJlYw== 60272
IG92ZXJ3cml0dGVu 60273
TVU= 60274
IHJvdXRlcnM= 60275
CU1vZGVs 60276
IGZhbnRhc2llcw== 60277
YXZpYW4= 60278
X3ByZWM= 60279
IFNjYW5kaW4= 60280
IC8vPA== 60281
L29jdA== 60282
IGNlcmVtb25pZXM= 60283
TW9udGhz 60284
dW5keQ== 60285
IHF1ZWQ= 60286
IE5vdQ== 60287
IFZpYnI= 60288
LnJnYg== 60289
IGNpdHJ1cw== 60290
IGJyYWNlcw== 60291
LXVwcGVyY2FzZQ== 60292
Z2V0VGFibGU= 60293
IGRvcG8= 60294
IEtlcnI= 60295
X0NISUxE 60296
LWNsb3Vk 60297
CU1hdHJpeA== 60298
IGdhcmRlbmluZw== 60299
U2luZw== 60300
YWxtb3N0 60301
UmVxdWlyZW1lbnRz 60302
dWd1YXk= 60303
KFByb3BlcnR5 60304
c3Vic2NyaWJlcg== 60305
RkFTVA== 60306
cmVhY3Rpb24= 60307
KGxw 60308
KX0pCg== 60309
YCku 60310
LndhbGxldA== 60311
X2V4Y2hhbmdl 60312
Lk1heGltdW0= 60313
IFZlcmI= 60314
4pSB 60315
KCk8 60316
77ybCg== 60317
Uk9U 60318
Q0FSRA== 60319
dWJpdA== 60320
e0A= 60321
X2tlbA== 60322
IFRvb2x0aXA= 60323
TXlTUUw= 60324
TWFpbkFjdGl2aXR5 60325
YXJm 60326
IG1hbGlnbg== 60327
IHNlaW5lbg== 60328
YXBpc3Q= 60329
IDwl 60330
TWV0aG9kSW1wbA== 60331
TWls 60332
IE1pY2s= 60333
LmRlcGVuZA== 60334
PElE 60335
IHByZWRpY3RpdmU= 60336
IEFQUExJQ0FUSU9O 60337
bGVm 60338
ZGltZW5zaW9ucw== 60339
IGNvbm9jZXI= 60340
L2NvbmY= 60341
IFRyYWN5 60342
Rm90bw== 60343
X3JlbWFpbmluZw== 60344
PWZpbGU= 60345
IHBhZ2VJbmRleA== 60346
IFBhcmlzaA== 60347
IHRleGFz 60348
IE1BR0lD 60349
IEhldw== 60350
ZGlmZmVyZW5jZQ== 60351
IGFsdHVyYQ== 60352
Y3Vt 60353
CWRhdGFUeXBl 60354
IGNhcmFjdGVyZXM= 60355
YXZpb3Vycw== 60356
IFZPSUQ= 60357
6L+R 60358
UFVCTElD 60359
Qmlv 60360
IHN0cmluZ0J5QXBwZW5kaW5n 60361
UGFyc2VFeGNlcHRpb24= 60362
IFN1ZmY= 60363
IE5vcnRvbg== 60364
L2RldGFpbHM= 60365
Lm51bGw= 60366
Pj4m 60367
CW9r 60368
LWxvdw== 60369
LnVzdWFyaW8= 60370
bmVzdGVk 60371
WEI= 60372
T1VSUw== 60373
LkJvcmRlckNvbG9y 60374
IGJyb3c= 60375
INCV 60376
Y29ycg== 60377
IFJlZHNraW5z 60378
LmdldFRhZw== 60379
LmdldFRyYW5zYWN0aW9u 60380
IHN0aWdtYQ== 60381
aGFyZHQ= 60382
IFBsYXllclByZWZz 60383
YWxzeQ== 60384
dWNzb24= 60385
TGFuZ3VhZ2Vz 60386
IE9saXZpYQ== 60387
IHRhYw== 60388
IGJsaQ== 60389
IGNhdmFs 60390
IGNvbnNvbGlkYXRlZA== 60391
IHBlcmls 60392
IGRlbGU= 60393
IGZvcm11bGF0ZWQ= 60394
IGhpZ2h3YXlz 60395
LnNwYXdu 60396
PT0k 60397
IE5pZXQ= 60398
IHZlZ2dpZXM= 60399
eXBv 60400
LXJ1bGU= 60401
IFZpZQ== 60402
L2VwbA== 60403
IGVuZmFudHM= 60404
c3RyaW5nTGl0ZXJhbA== 60405
IHRvdWdoZXN0 60406
YnV5ZXI= 60407
IGNvdmFyaWFuY2U= 60408
IGlsaQ== 60409
IFNvcGhpZQ== 60410
IEJBQg== 60411
ICIpLA== 60412
IFVr 60413
Y3VycmVudEluZGV4 60414
X3VzZXJkYXRh 60415
LmNvZGVj 60416
IFB1bmphYg== 60417
IFNOUA== 60418
bG9s 60419
YWR2YW5jZQ== 60420
IGNvbWZ5 60421
SnNvbklnbm9yZQ== 60422
IGZhc2hpb25hYmxl 60423
IElDT04= 60424
IG9yYQ== 60425
IFByaWNpbmc= 60426
PG51bQ== 60427
IElSQw== 60428
RVJW 60429
IE1laW4= 60430
IElEaWN0aW9uYXJ5 60431
QURPVw== 60432
aXNOZXc= 60433
IERldm9u 60434
YXRs 60435
KHJlcXVlc3RDb2Rl 60436
CVByZXBhcmVkU3RhdGVtZW50 60437
SU1QT1JU 60438
IG1hcml0YWw= 60439
X1NFTEVDVEVE 60440
Z2V0UmVzcG9uc2U= 60441
YXJEb3du 60442
QlY= 60443
aWJOYW1l 60444
IFBBVENI 60445
w6TDpG4= 60446
IGRhYXI= 60447
IEZpbGVNb2Rl 60448
IG1hcnR5 60449
LlNwcmluZ0FwcGxpY2F0aW9u 60450
Y2VuZQ== 60451
YW1wb2xpbmU= 60452
Z2V0U2l6ZQ== 60453
UmVzdGFydA== 60454
5pWI 60455
LnByb2plY3Rz 60456
IEV0aGlvcGlh 60457
IHN0YXR1c2Vz 60458
VElPTg== 60459
KGJn 60460
IFh1bml0 60461
VGVtcG9yYXJ5 60462
IEVuZ2FnZW1lbnQ= 60463
IHhm 60464
IHByb3hpZXM= 60465
IGdlbmVzaXM= 60466
UGFnZXJBZGFwdGVy 60467
IFNsYXZl 60468
IHN1bmdsYXNzZXM= 60469
IENobG9l 60470
IGtvamk= 60471
YWRlbQ== 60472
CUpTT05PYmplY3Q= 60473
zrM= 60474
IGhvcnM= 60475
Knc= 60476
w7Ny 60477
ZXNjaA== 60478
IGNyaXRpY2lzZWQ= 60479
emlhbA== 60480
IFNhbGVt 60481
LlZlcnRpY2Fs 60482
IFJhc2g= 60483
PkU= 60484
dGVyaW5n 60485
L3NjcmVlbnM= 60486
IGhlaWdodGVuZWQ= 60487
0LDRgNGC 60488
QXV0aG9yaXRpZXM= 60489
X2Jib3g= 60490
w7xuc3Q= 60491
LmZvbnRTaXpl 60492
IEJPT0xFQU4= 60493
ZGl2aWRl 60494
IFNsb3Zlbg== 60495
dWNlcg== 60496
2ZI= 60497
c3R1Yg== 60498
IG5hdmlnYXRpbmc= 60499
OmFuaW1hdGVk 60500
X05PVw== 60501
X3ZlY3Q= 60502
fXsK 60503
QCg= 60504
IHRlbGVjb20= 60505
IGNvbnRyYWN0aW5n 60506
IEFzc2FuZ2U= 60507
IGV4dHJhY3Rpbmc= 60508
IGdyw7Y= 60509
Y29icmE= 60510
LkRJUw== 60511
IGNyYWI= 60512
IHR3aXRjaA== 60513
IHZlcnRz 60514
IHJlamVjdHM= 60515
CWZvcm1hdA== 60516
IHJlZ2VuZXJhdGlvbg== 60517
LlN5cw== 60518
c29sdmU= 60519
CWRpYWxvZw== 60520
c2hp 60521
bWV0ZXI= 60522
KGJlc3Q= 60523
dmFsaWRhdG9ycw== 60524
IG9ud2FyZHM= 60525
IGd1cnU= 60526
IG1vZGVyYXRvcg== 60527
b3dpZWQ= 60528
ZXhwZXJpbWVudA== 60529
cnVi 60530
IG1xdHQ= 60531
IENhdWNhcw== 60532
IG5hdGlvbmFsaXNt 60533
IG1hbmdl 60534
CUltR3Vp 60535
L0VkaXQ= 60536
IGluaA== 60537
IGludGVsbGln 60538
ZXJva2Vl 60539
CWV4cG9ydA== 60540
IGRpc2NyaW1pbmF0ZQ== 60541
c3VidHJhY3Q= 60542
IE1vb2RsZQ== 60543
ZW5zZXI= 60544
IEd1aWRlcw== 60545
UkFQ 60546
LWhvdA== 60547
X2dycA== 60548
LnBpY3R1cmU= 60549
WEE= 60550
IGluaXRWaWV3 60551
X0NvbW0= 60552
IG92ZXJkb3Nl 60553
ICsKCg== 60554
IFNpbGVudA== 60555
c2hvd3M= 60556
IGludGVycG9sYXRl 60557
Rm9ybWF0aW9u 60558
IGJpc2M= 60559
bWFya2V0cw== 60560
KFND 60561
WmU= 60562
IE5ldHdvcmtpbmc= 60563
IGFkcmVuYWw= 60564
IEd1bnM= 60565
ZXRlb3I= 60566
RGVjbGFyZWQ= 60567
b3JnZXRvd24= 60568
IGthcmVuYQ== 60569
L3Bhc3N3b3Jk 60570
X2FkZHJlc3Nlcw== 60571
SVRFUkFM 60572
QnV6eg== 60573
IENvbndheQ== 60574
KGNhc2U= 60575
UFdE 60576
aGVpcm8= 60577
KGFjdA== 60578
KioNCg== 60579
KCkpOwoKCg== 60580
IGFudg== 60581
IC4uCgo= 60582
KE1lbnVJdGVt 60583
KG1haWw= 60584
X3NlY3Rpb25z 60585
CW5ldA== 60586
IHBsdXQ= 60587
IHdyZW5jaA== 60588
L29iamVjdA== 60589
IElzdA== 60590
IFZJUw== 60591
L3B1Yg== 60592
YWx0ZW4= 60593
IGd1aXRhcnM= 60594
IGFudGliaW90aWM= 60595
77yW 60596
wrk= 60597
ICIrIg== 60598
Zm9ybXVsYQ== 60599
IGJhYmVz 60600
IFByb21wdA== 60601
IGVuaW0= 60602
L3BsYXllcg== 60603
CXJlZg== 60604
IGJ5xIc= 60605
IGNvbnN1bWVz 60606
IEhhc3Q= 60607
IFRhbw== 60608
ICcpKQo= 60609
IGNsYW0= 60610
IHRoaWdocw== 60611
IG1vdGlm 60612
QXBpT3BlcmF0aW9u 60613
IFdM 60614
Z2V0Qw== 60615
CWZsYWdz 60616
b2ludG1lbnRz 60617
IGVjb25vbWljYWw= 60618
bmVlZGxl 60619
eGxz 60620
cHJhY3RpY2U= 60621
dXR6ZXI= 60622
dGltZW9mZGF5 60623
LW91dHB1dA== 60624
IGZpbmRCeUlk 60625
IEJ1ZGR5 60626
0J7Rgg== 60627
U2V2ZW4= 60628
IEJhcms= 60629
IGVudm95 60630
X2FsZ29yaXRobQ== 60631
5Yip 60632
IGJhbGxpc3RpYw== 60633
56e7 60634
cmFkZXM= 60635
CWRvYw== 60636
cm9kdWNpbmc= 60637
IEVhdGluZw== 60638
VW5tb3VudA== 60639
L2RhdGFUYWJsZXM= 60640
X2JvbnVz 60641
IGxpdHQ= 60642
cHBz 60643
KWxvY2FsT2JqZWN0 60644
cGVyZg== 60645
IEhlbHZldGljYQ== 60646
c2h1dGRvd24= 60647
L21s 60648
LnRva2Vucw== 60649
IEhhcmRjb3Jl 60650
LHJvdw== 60651
L2Jn 60652
U2NhbGVy 60653
4oCUYXM= 60654
X2xvZ2l0cw== 60655
4oCZaW50 60656
CUFwcA== 60657
SW1wbGljaXQ= 60658
LkZwcmludGY= 60659
RVRP 60660
IHRlcnJh 60661
IHBvc3Nlc3Npbmc= 60662
LnJzdHJpcA== 60663
LCks 60664
PXllcw== 60665
IFN0cmlwZQ== 60666
Pz0= 60667
bmV1dHJhbA== 60668
Lmdvb2Q= 60669
IGtlbm5lbg== 60670
IFN1bmc= 60671
ZmF1bHQ= 60672
eXN0YXRlY2hhbmdl 60673
Q2FuYWRpYW4= 60674
JywnIi4k 60675
IE1pdHM= 60676
w6ZuZA== 60677
IFNUUlVDVA== 60678
IFVSTFdpdGhTdHJpbmc= 60679
IENvbXBhc3M= 60680
IC0tCgo= 60681
IE5TTGF5b3V0Q29uc3RyYWludA== 60682
fG1pbg== 60683
LWFkanVzdA== 60684
IHJlYnVpbHQ= 60685
TElHSFQ= 60686
L3Nl 60687
LW1vdW50 60688
dnBu 60689
dmFsaWRhdGVk 60690
KFFPYmplY3Q= 60691
IGlnbml0aW9u 60692
IENoYXJnZXJz 60693
UllQVE8= 60694
XWluaXRXaXRoRnJhbWU= 60695
IEZsdWlk 60696
IGNhZHJl 60697
IG5vbWluYXRpb25z 60698
TmVpbGw= 60699
IEhvdQ== 60700
IGN1cnJlbnRz 60701
X2dlbmU= 60702
KGlucA== 60703
UGFyaXM= 60704
esSZ 60705
YWdncmVnYXRl 60706
IGFzc29j 60707
d2VldGVk 60708
ZXJyYXQ= 60709
4oCTCgo= 60710
ICcvJywK 60711
Zml4dHVyZQ== 60712
IEhpZ2hlc3Q= 60713
YW1iaWVudA== 60714
IGNobW9k 60715
IGNvbnRl 60716
IHNlbnN1YWw= 60717
IGdhcm1lbnQ= 60718
emVycw== 60719
IFBvd2VyZWQ= 60720
ZG9tYWlucw== 60721
UmV3YXJk 60722
aW9tYW5pcA== 60723
IGNvY2twaXQ= 60724
b3V0ZmlsZQ== 60725
IGJ1aWx0aW4= 60726
IGluc2lzdGluZw== 60727
LnZhcnM= 60728
emlwY29kZQ== 60729
IO+/ve+/ve+/ve+/vQ== 60730
ZmFpbHM= 60731
IGNvbnNvbGlkYXRpb24= 60732
X29pZA== 60733
UGxhbmV0 60734
ID0iLA== 60735
CWVs 60736
VUlMVA== 60737
w6R0eg== 60738
YWZhcmk= 60739
IE1jQ2w= 60740
VGltZWxpbmU= 60741
RXN0YQ== 60742
IGZyYW0= 60743
WUU= 60744
IGNlcmVicmFs 60745
T2ZNb250aA== 60746
IFByZWdu 60747
INC60LvQsNGB0YE= 60748
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCg== 60749
IEZyZXM= 60750
QXBwcm92ZWQ= 60751
LlNwZWNpYWw= 60752
IFByb3Rlc3RhbnQ= 60753
IGFsbGVyZ3k= 60754
X3BjbQ== 60755
CUNvcHlyaWdodA== 60756
IHN1cGVyQ2xhc3M= 60757
InN0cmNvbnY= 60758
IE1vaGFtZWQ= 60759
ICcvLw== 60760
Rm9yZUNvbG9y 60761
QXJ0aHVy 60762
IEp1bmdsZQ== 60763
IHZlaW5z 60764
U2Fk 60765
IGJhY2t1cHM= 60766
IE9waW5pb24= 60767
w7t0 60768
IGludGVybWl0dA== 60769
b2R5bg== 60770
IENocmlzdGluYQ== 60771
IGFuZHJl 60772
IGV2YWN1YXRpb24= 60773
cGFsZXR0ZQ== 60774
aG9yc2U= 60775
IFJlc2lkZW50 60776
IEhhc3Nhbg== 60777
Lk5pbA== 60778
IGFpc2xl 60779
IEdyb3dpbmc= 60780
IGJsb2dpbmZv 60781
L3NxbA== 60782
X2lvY3Rs 60783
U2NhbGluZw== 60784
IE1vbmFk 60785
X2NwcA== 60786
IEh1dGNo 60787
IEFwcGxlV2ViS2l0 60788
RXhwZW5zZQ== 60789
X0pPQg== 60790
IHBvaW50bGVzcw== 60791
RnJvbUJvZHk= 60792
YW50YWw= 60793
IGRlcGljdGluZw== 60794
IENFTEw= 60795
IHJlZmlu 60796
IENOQw== 60797
7LmY 60798
X2RpbWVuc2lvbnM= 60799
IFNBTg== 60800
IGFmdA== 60801
IGZvb3RzdGVwcw== 60802
Y2NvbGk= 60803
X1BIT05F 60804
L21hdGg= 60805
LWtpbmQ= 60806
IE1lYW5z 60807
aWNoYWVs 60808
Lmd1bmE= 60809
IGluYXVndXJhdGlvbg== 60810
LWRyaXZpbmc= 60811
KGRlbGV0ZQ== 60812
IHRvdGFsQ291bnQ= 60813
X01D 60814
LkV4dGVuc2lvbg== 60815
Q29tbWVyY2lhbA== 60816
IHpJbmRleA== 60817
PEN1c3RvbWVy 60818
Imc= 60819
LXNoYXJl 60820
IHBhY3Q= 60821
YWdhcmE= 60822
IFNJTA== 60823
X21vZGVz 60824
IE1vbGVjdWxhcg== 60825
IHN5c3RlbWF0aWNhbGx5 60826
PEc= 60827
X3Njcg== 60828
IE9ybw== 60829
YXNlcnM= 60830
IGJpYw== 60831
IGRlc3Ryb3lz 60832
UElQRQ== 60833
LlN0YXJ0UG9zaXRpb24= 60834
IGPhu6dh 60835
aXJleg== 60836
LkJ1bmlmdQ== 60837
X0Z1bmN0aW9u 60838
IHPDvA== 60839
X2Z1dHVyZQ== 60840
IFdlYWx0aA== 60841
IE5hdHVyYWxseQ== 60842
5oC7 60843
X3llcw== 60844
IGFicnVwdGx5 60845
U3RyaW5nRW5jb2Rpbmc= 60846
IENHUG9pbnRNYWtl 60847
IHpo 60848
IGltcGVyc29u 60849
IHBpdm90YWw= 60850
IFNvbWFsaWE= 60851
IHNlZ21lbnRhdGlvbg== 60852
X0FOQUw= 60853
IExvZ2luQ29tcG9uZW50 60854
Q29uc3VsdA== 60855
IHRydW5jYXRlZA== 60856
XSI7Cg== 60857
LmdldENvbmZpZw== 60858
IGludGVybnNoaXA= 60859
QmFieQ== 60860
6rCc 60861
IHN0cmVuZ3RoZW5lZA== 60862
X01J 60863
YmFza2V0 60864
IG5pY2h0cw== 60865
IFRWcw== 60866
IFNoYW4= 60867
44K1 60868
cmFjdXNl 60869
LlJlTFU= 60870
L2ludGVyZmFjZXM= 60871
IGdldEl0ZW1Db3VudA== 60872
IHJldGlyaW5n 60873
IHNwZWNpYWxz 60874
IGVudGl0eU1hbmFnZXI= 60875
YmVsaWVm 60876
IHNvbGRlcg== 60877
ZGF1Z2h0ZXI= 60878
aWprbA== 60879
IHV0aWxpemVz 60880
LmZpeGVk 60881
U1U= 60882
IGRyYXN0aWM= 60883
IGhhY2tz 60884
Z3J1bmQ= 60885
IE1V 60886
IFN0YXJ0ZXI= 60887
LkNvbXBvbmVudHM= 60888
X21vdG9y 60889
R29sZGVu 60890
IGxvZGdl 60891
ICkpOw== 60892
IENvcmludGg= 60893
0LjRh9C10YHRgtCy0L4= 60894
w7NuaWNv 60895
Z3JlU1FM 60896
IEZsdWVudA== 60897
IG1hcmM= 60898
LkxvYWRTY2VuZQ== 60899
Lkdyb3Vwcw== 60900
IGVyaA== 60901
IEF1dHVtbg== 60902
U3RvcHBlZA== 60903
IGl0YWxpYW5v 60904
IG1pbmlvbnM= 60905
IEFzc2VydGlvbnM= 60906
IG11eA== 60907
QnU= 60908
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 60909
CXVw 60910
cmVhZHlzdGF0ZWNoYW5nZQ== 60911
X01ldGE= 60912
IGN1cnJlbnREYXRl 60913
IENoYXBtYW4= 60914
VW5kbw== 60915
U2Vhbg== 60916
YXBy 60917
IHBhcm0= 60918
X2ljb25z 60919
IFN0YQ== 60920
w6F6 60921
IHN1YmRpdmlzaW9u 60922
IGFsdGVyaW5n 60923
UE5H 60924
cG9uZW50aWFs 60925
IHBvc3RncmVz 60926
IEJEUw== 60927
LWV4aXN0ZW50 60928
IEJyYWRmb3Jk 60929
IE9NWA== 60930
X1dISVRF 60931
X1BST0dSQU0= 60932
cWM= 60933
IHR5cGluZ3NTbGlua3k= 60934
IFBpY3M= 60935
X01FVEE= 60936
SVRURVI= 60937
X3N1YnNjcmlwdGlvbg== 60938
SVJPTk1FTlQ= 60939
IEh5dW5kYWk= 60940
KCk7CgoKCg== 60941
INiz 60942
IGphYw== 60943
IGVsaW1pbmF0ZXM= 60944
KX0pOwo= 60945
IGNvbXByZW5k 60946
CWluc2VydA== 60947
X2ZhY2Vz 60948
Ij4k 60949
IGViYXk= 60950
IGNhcHRpdmU= 60951
cGxpYW50 60952
IENhbGN1bGF0ZXM= 60953
b2x0YQ== 60954
ZXN0aW5n 60955
X3JldmlzaW9u 60956
IG3DunM= 60957
K20= 60958
IiwiIiwi 60959
V0hBVA== 60960
IGNvbXBhc3Npb25hdGU= 60961
aGFyZ2E= 60962
W3JhbmRvbQ== 60963
IG1vZHVsbw== 60964
KHNu 60965
IG9jY3VwYXRpb25z 60966
Ly8vLwo= 60967
CWJvYXJk 60968
IEJhbGs= 60969
d2nEhQ== 60970
IFdpZmk= 60971
LlByb2ZpbGU= 60972
Om1hag== 60973
CW1hdA== 60974
TE9DS1M= 60975
KGpCdXR0b24= 60976
ICgnJA== 60977
TXVy 60978
5oyJ 60979
YmJsZQ== 60980
IGZyb2c= 60981
LWhpZGU= 60982
IGJyb2FkY2FzdGVy 60983
4Lie 60984
aGFsZWQ= 60985
IGFtdXNpbmc= 60986
X3ByZWRpY3Rpb25z 60987
X2ludHI= 60988
IGVhZ2xl 60989
0LDRgtC10LvRjA== 60990
IGdldExpc3Q= 60991
cHNpbG9u 60992
IGNoYXJhY3Rlcml6YXRpb24= 60993
QVJEUw== 60994
IHJlbG9jYXRpb24= 60995
IHJ1bGVycw== 60996
UEFZ 60997
IERlZmluaXRlbHk= 60998
X0FjdGlvbg== 60999
IGNsb3N1cmVz 61000
IGZhY3R1YWw= 61001
b2R5bmFtaWM= 61002
IHByZWNhdXRpb25z 61003
bmllag== 61004
IFBhcnRpZXM= 61005
IFN1YmFydQ== 61006
IGNvdXNpbnM= 61007
YXJiZWl0 61008
Lm1vbmV5 61009
Z3VudGE= 61010
KGFuZA== 61011
Z2V0aXRlbQ== 61012
LlN0eWxlUHJpb3JpdHk= 61013
IHNsaWQ= 61014
c2luZ2xldG9u 61015
IGdhcm4= 61016
IFBBUw== 61017
IGRheno= 61018
YcW8 61019
IGJvZ3Vz 61020
IE1vZw== 61021
IHJpdmFscnk= 61022
aXNvbA== 61023
IGxhbmRtYXJrcw== 61024
w7Fhcw== 61025
QmVybg== 61026
IFNhY2hz 61027
ICIpCgo= 61028
IGhvc3RpbGl0eQ== 61029
X21leA== 61030
bWVyZQ== 61031
TW90 61032
cGljdHVyZUJveA== 61033
RGVmZW5zZQ== 61034
IGFmZmlkYXZpdA== 61035
b3RoZXJ3aXNl 61036
LmRpcmVjdG9yeQ== 61037
X1VuaXR5RW5naW5l 61038
LWJsb2c= 61039
LnNraW4= 61040
cGhlbQ== 61041
QXBlbGxpZG8= 61042
ZXJjaGFudA== 61043
W2NsYXNz 61044
IHdhcnQ= 61045
LiJb 61046
YWxldXI= 61047
L2JhY2s= 61048
ICAgIAkgICA= 61049
IHByZWNpcGl0YXRpb24= 61050
IG9ic3RydWN0aW9u 61051
IHBPYmo= 61052
IHJ1cHQ= 61053
VUNLRVQ= 61054
YXll 61055
5o6S 61056
Z3g= 61057
IGVjbA== 61058
IHNlY3JlY3k= 61059
L0hlYWRlcg== 61060
IExlc2I= 61061
IGxlaQ== 61062
IEJ1bGxldGlu 61063
IGdpdmVhd2F5 61064
LkhvbWU= 61065
X1JPT00= 61066
Ilc= 61067
IGNvd29yaw== 61068
X3Jh 61069
IEN5Y2xpbmc= 61070
IFBhdw== 61071
IHB1cGls 61072
L2FyY2g= 61073
IEZpbGVVdGlscw== 61074
6aaW 61075
cnNw 61076
IGZyZWVkb21z 61077
IExlYXI= 61078
fWApLg== 61079
IGJvd2xz 61080
L2Jsb2Nr 61081
X2xvZ2dpbmc= 61082
IG1ldGhhbmU= 61083
IGhvcm5z 61084
IHdvbmRlcmZ1bGx5 61085
IGFsdGVyYXRpb25z 61086
IGV4aWxl 61087
bHNlbg== 61088
X3BhdXNl 61089
X0xBTkdVQUdF 61090
IFVTREE= 61091
X215c3Fs 61092
X0FNT1VOVA== 61093
IExJRkU= 61094
IHlvdW5nc3RlcnM= 61095
IHJpb3Rz 61096
W0U= 61097
IHVuZm9yZ2V0dGFibGU= 61098
LH0sCg== 61099
RGlzcG9zZWQ= 61100
IEFzc2Fzc2lu 61101
VU5H 61102
IE5ld3Nw 61103
VXNlclNlcnZpY2U= 61104
OmFsb2Fk 61105
Kycs 61106
IHNldHRsZXJz 61107
IHNjcmVhbXM= 61108
IGluY29udmVuaWVuY2U= 61109
LlJvdGF0ZQ== 61110
IGphcnM= 61111
IFB1enpsZQ== 61112
IG1lc3Q= 61113
YXJzaQ== 61114
IFNoYXJtYQ== 61115
fCg= 61116
LmRz 61117
IFNhY3JlZA== 61118
X2V2dA== 61119
IGV4cHJlc3Nlcw== 61120
IGhvY2g= 61121
IER1Y2g= 61122
LmNhbGxz 61123
dGhy 61124
IFNoZWZmaWVsZA== 61125
LkFsZXJ0RGlhbG9n 61126
IHJhZGljYWxseQ== 61127
IHRyb3Vz 61128
IHByZXZhaWxpbmc= 61129
IFdXSUk= 61130
4oCZbg== 61131
ZW5zZWx5 61132
IFllc3RlcmRheQ== 61133
IFNpcml1cw== 61134
IGtpbGxlcnM= 61135
IEZGVA== 61136
IG92YWw= 61137
Jyk6DQo= 61138
IOygleuztA== 61139
b3VyYWdl 61140
IENoZWNrYm94 61141
V29ya2Jvb2s= 61142
LmRlZmVy 61143
X2Zsb29y 61144
IGNvdW5jaWxs 61145
IG5vcnNrZQ== 61146
bW9pbA== 61147
b3JlYQ== 61148
IG1hcmtldGVk 61149
X1NVUg== 61150
eEFB 61151
IHN0YWluZWQ= 61152
ZXV0 61153
IE1lbmc= 61154
IGllZWU= 61155
LmV4dGVybg== 61156
ZWdpZQ== 61157
IHJhcHA= 61158
IFB5b25neWFuZw== 61159
J2NsYXNz 61160
TW9i 61161
IGluaXRpYWxWYWx1ZQ== 61162
X3dhdmU= 61163
IGphYg== 61164
IG1hc2N1bGluZQ== 61165
IGFtcGxpZmllcg== 61166
IHR0eQ== 61167
UGF0aENvbXBvbmVudA== 61168
X3h0 61169
IEdGUA== 61170
L3NlYw== 61171
CWRpc3BhdGNo 61172
bWFya2Rvd24= 61173
IFNjaG4= 61174
Ym9sZQ== 61175
wrfCtw== 61176
bW91c2Vtb3Zl 61177
IGVyck1zZw== 61178
IGFzaWdu 61179
X21vbm8= 61180
VG9TZWxlY3Rvcg== 61181
IFp1 61182
KFJlY3Q= 61183
IEVycm9yQ29kZQ== 61184
bGF0aW4= 61185
YW5naWJsZQ== 61186
dnRr 61187
Q0dTaXpl 61188
UG9rZW1vbg== 61189
IGNsYXNzbWF0ZXM= 61190
IGF0dHJhY3Rz 61191
IFRhdHRv 61192
dWx0YW4= 61193
b2zDs2c= 61194
IGhhbHRlZA== 61195
4KSo 61196
IEthcnQ= 61197
IHVl 61198
X0luaXRTdHJ1Y3R1cmU= 61199
VGVzdENsYXNz 61200
IEFpcmJuYg== 61201
XyIs 61202
IGNoYXJjb2Fs 61203
IGlwYw== 61204
IFN0cmV0Y2g= 61205
LmdsaWRl 61206
bGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRz 61207
IHBvdGlvbg== 61208
SVRUTEU= 61209
IGNvdW50ZXJ0 61210
X2hk 61211
cHJlcGFyZWQ= 61212
QWRz 61213
IFZhbXBpcmU= 61214
cm9ib3Rz 61215
LkNyZWF0ZUluZGV4 61216
U3RhdHVzTGFiZWw= 61217
IHR1Y2tlZA== 61218
YWbDvHI= 61219
VXQ= 61220
IHN3ZWF0ZXI= 61221
X0ZO 61222
ICAgICAgICAgICAgICAgIAk= 61223
YXRha2E= 61224
IGV5ZWJyb3dz 61225
YWNvZXM= 61226
dWRlbg== 61227
LkxpbmVhckxheW91dE1hbmFnZXI= 61228
IHN3YXk= 61229
IG11bHRpbg== 61230
KCkpKSkK 61231
IE5TVUludGVnZXI= 61232
IE15QmFzZQ== 61233
UGFydG5lcg== 61234
dXRzY2hlbg== 61235
IENhdGVy 61236
LnNldEJhY2tncm91bmRDb2xvcg== 61237
IGFjY29tcGxpc2htZW50 61238
X3Byb2JsZW0= 61239
LmR0ZA== 61240
IHBhZ2VOdW1iZXI= 61241
IGphY2tldHM= 61242
IGNyb3BwZWQ= 61243
dWVscw== 61244
IEhlcA== 61245
IGNhcHBlZA== 61246
Kk1hdGg= 61247
X2NhbGxiYWNrcw== 61248
IHB1YmI= 61249
IEJydW5zd2ljaw== 61250
LnJlc3BvbmQ= 61251
WyJf 61252
IGJlZGRpbmc= 61253
aHl0aG0= 61254
T1g= 61255
KHNwZWVk 61256
IHBlc3RpY2lkZXM= 61257
IC0tLS0tLS0= 61258
LkJsdWU= 61259
IG5vb2RsZXM= 61260
IEdvZXM= 61261
IHNhdmVy 61262
b3h5 61263
X2NvbXBsZXRpb24= 61264
IFN3aW5nZXI= 61265
IGdldERhdGU= 61266
IG1pbmRlZA== 61267
aW50ZWdyYXRpb24= 61268
IExvdHVz 61269
KHN0b3A= 61270
KCcsJyk7Cg== 61271
IGZsb29kcw== 61272
IFdvcmtmbG93 61273
IGVydXB0ZWQ= 61274
TWFjcm8= 61275
IFNhdWNl 61276
IGV2ZW50TmFtZQ== 61277
XElucHV0 61278
QnJlYWtpbmc= 61279
CXdoZW4= 61280
X3B3 61281
SU5ERVI= 61282
IFdlbGxuZXNz 61283
IHZveGVs 61284
IE1lbGw= 61285
IE1FRElB 61286
U0VOUw== 61287
IEZ1bmRz 61288
IE1pbGQ= 61289
PEFycmF5 61290
LXRoaXM= 61291
dW1wZWQ= 61292
L2Z3 61293
IERiQ29udGV4dA== 61294
V0k= 61295
Z2lybHM= 61296
SE9X 61297
Jyk7Pz4K 61298
IHRlbXB0aW5n 61299
IHRlc3RhbWVudA== 61300
IGJpYmxl 61301
IGNvbnN1bHRlZA== 61302
IEluZGV4RXJyb3I= 61303
6KiY 61304
IGtleXBhZA== 61305
aXp6bw== 61306
KG9r 61307
IHdoYXRzYXBw 61308
IFJlbW90ZUV4Y2VwdGlvbg== 61309
IHRlYW1lZA== 61310
4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU 61311
wrss 61312
IGdldFRpbWU= 61313
ZGlhZw== 61314
aXNzeQ== 61315
IGhlZA== 61316
IGtub3Rz 61317
am9t 61318
IGZ1bm5lbA== 61319
LW1haWxz 61320
IGV4cG9ydGluZw== 61321
IFZM 61322
IEthcm4= 61323
IEJ1ZGRoaXNt 61324
IEFsbGFu 61325
X1JBRElVUw== 61326
IHdvcmRpbmc= 61327
IEZvcmdldA== 61328
IENvcm9uYQ== 61329
aXBoeQ== 61330
IGxpbWJ1cmc= 61331
dWdneQ== 61332
IFVzZXJSZXBvc2l0b3J5 61333
aW1pbg== 61334
KGVsZQ== 61335
IGxhYmVsbGVk 61336
56S+ 61337
IEhlcm1hbg== 61338
LnFx 61339
ICIpKTsK 61340
aWViZXI= 61341
LlRyYW5zbGF0ZQ== 61342
cnlu 61343
IGRlc2Vudg== 61344
dW1k 61345
U2ltcGx5 61346
CW1vZGU= 61347
UnBj 61348
IFZhbGVuY2lh 61349
IHN0YWZmZXJz 61350
IHNlbHY= 61351
IFNwaWtl 61352
IGRlbGlj 61353
IGVydQ== 61354
X0RU 61355
SnVkZ2U= 61356
4buV 61357
IEJhc2lu 61358
Lm11dGFibGU= 61359
InVybA== 61360
IHRhcmlmZg== 61361
IFNsZWV2ZQ== 61362
IGZsYXJl 61363
LmRyb3BvdXQ= 61364
IGJyaWRlcw== 61365
KSksDQo= 61366
X2NvbnN0cmFpbnRz 61367
ZGVzdHJ1Y3Q= 61368
T3V0bGluZQ== 61369
IGRpc2FwcGVhcnM= 61370
X2xvY2tlZA== 61371
IE5TTG9jYWxpemVkU3RyaW5n 61372
Y2tl 61373
CW51bGw= 61374
YWRyZXNzZQ== 61375
IHRvcHBpbmc= 61376
IEpva2Vy 61377
YmlzaG9w 61378
0L3QvtGB0YLRjA== 61379
YW5kZXJpbmc= 61380
X2FtcA== 61381
PXRpbWU= 61382
X1NwYWNl 61383
X1BVTEw= 61384
Jz0= 61385
IGFudGlxdQ== 61386
IGNhY2g= 61387
X19fCgo= 61388
T05FUw== 61389
0L7Rjw== 61390
IHVucmVhZA== 61391
LnBvbGljeQ== 61392
b29vb29vb28= 61393
65+s 61394
IHVzdGVk 61395
IFJlY2U= 61396
IGFsbGVt 61397
44O844K5 61398
IFRob3VnaHRz 61399
dmVpbGxhbmNl 61400
aXN0cmF0ZQ== 61401
X2xhbmU= 61402
IGZhbWVk 61403
LkdldE5hbWU= 61404
IHNtb290aGVy 61405
IFF1YWxpZmllZA== 61406
YXplcnM= 61407
X2dlbw== 61408
RmF4 61409
IE1pbmRz 61410
IFJhaXNlcw== 61411
IHRyYW5zY3JpcHRz 61412
Q29udmVyc2F0aW9u 61413
IHJlbWFya2Vk 61414
64KY 61415
ZGxpbmc= 61416
IGRlcGxveWluZw== 61417
IHNoYXJlZEFwcGxpY2F0aW9u 61418
IGtw 61419
Rm9udEF3ZXNvbWVJY29u 61420
X2R1bW15 61421
cmVpYmVu 61422
IEphbmVpcm8= 61423
RGlyZWN0aW9ucw== 61424
LmdldEJlYW4= 61425
c2Fzcw== 61426
IGNvbW1hbmRlcnM= 61427
dmF0aW9u 61428
ZXJyb3JDb2Rl 61429
IEFsbG95 61430
LmxvY2FsaXplZA== 61431
0JE= 61432
IGRpc2h3YXNoZXI= 61433
IFNvdXA= 61434
TnU= 61435
X0RlZmF1bHQ= 61436
IHVuZXZlbg== 61437
IC8+IjsK 61438
LUJhc2Vk 61439
IHNlYW1sZXNzbHk= 61440
LW51bGw= 61441
IFhD 61442
IHN0ZXc= 61443
KGRlbGF5 61444
QVRPUlM= 61445
IFdoZWVsZXI= 61446
Ijw/ 61447
IENoYW5kbGVy 61448
IHJldGFsaWF0aW9u 61449
IGJ1ZGRpZXM= 61450
LXNpemluZw== 61451
IEVpbnM= 61452
IC4uLiw= 61453
cXVldGU= 61454
IERPQw== 61455
IGZhbHNlbHk= 61456
IGZsYXRz 61457
TklDQUxM 61458
IGxpYnI= 61459
QmVOdWxs 61460
aW11bGF0aW9u 61461
CVF1ZXJ5 61462
X3V0 61463
IHBsYXF1ZQ== 61464
YmlsZA== 61465
IHNjcmVhbWVk 61466
Lm12Yw== 61467
LldpZGdldA== 61468
IGRpZmZlcmluZw== 61469
L3N1cHBvcnQ= 61470
X1ZPTFVNRQ== 61471
Lm5vZGVUeXBl 61472
CVdyaXRl 61473
IHLDs3du 61474
Ym9va21hcms= 61475
X0NPTk4= 61476
IENyZWVk 61477
IGluaGliaXRpb24= 61478
IFJlaGFi 61479
dXZyZQ== 61480
IGR1bXBz 61481
b3dlag== 61482
X3BsYWNlaG9sZGVy 61483
IEhXTkQ= 61484
IGRlcm1hdA== 61485
LmRldGFjaA== 61486
IGZpbmFsaXplZA== 61487
Z2VyaWVz 61488
aWRhaw== 61489
X3Byb2c= 61490
IHVwZGF0ZVVzZXI= 61491
bHlz 61492
Lkdvb2dsZQ== 61493
IGx1ZWdv 61494
IGFudHM= 61495
5qCH6aKY 61496
IERSTQ== 61497
0LvQtdC9 61498
LWRi 61499
ZXJyaWNr 61500
X2xu 61501
Li5c 61502
aWtpdA== 61503
IERpZW4= 61504
IHBhcmFtZXRyb3M= 61505
a2V5cHJlc3M= 61506
IEtlcmFsYQ== 61507
IGRyYWluZWQ= 61508
ZsO8Zw== 61509
IGNhcGl0 61510
X2F1Zw== 61511
dGFudA== 61512
TmF2QmFy 61513
IHJvbGxiYWNr 61514
IGxleQ== 61515
4LiI 61516
IEJTUA== 61517
IFByZWRpY3Rvcg== 61518
IHdhZ29u 61519
ICJ8Ig== 61520
U2VydmU= 61521
LkRvbmU= 61522
IER1cmNo 61523
UHJvdmlkZQ== 61524
CXNjb3Jl 61525
X09E 61526
LndlYXBvbg== 61527
IHVuaXZlcnNhbGx5 61528
IGluanVuY3Rpb24= 61529
X1NDUk9MTA== 61530
Lk1hdHJpeA== 61531
IE1vbmdvQ2xpZW50 61532
YnVmZmVycw== 61533
IGJhZGdlcw== 61534
IHNoYXJrcw== 61535
IFNoYXJr 61536
TU9ERUw= 61537
LlJFQUQ= 61538
CXRhZw== 61539
IHN0cnRvdXBwZXI= 61540
RVJHWQ== 61541
Ymlhcw== 61542
IGFjY291bnRJZA== 61543
IEVtbWFudWVs 61544
IHJlc29ydHM= 61545
IHN2bg== 61546
d2FybmluZ3M= 61547
X0lF 61548
TEFT 61549
IG51bGxh 61550
CWFz 61551
IGRlbWVhbg== 61552
4oCcQXM= 61553
QXV0aG9yaXplZA== 61554
IHRlbmRlbmNpZXM= 61555
LXNldHRpbmc= 61556
IHByZWxvYWQ= 61557
IGNubg== 61558
4oCcTm8= 61559
JSkKCg== 61560
PVQ= 61561
dXN0bw== 61562
IEZJUkU= 61563
cmVzZWFyY2g= 61564
INCT 61565
IExlc3NvbnM= 61566
LkFwcGVuZEZvcm1hdA== 61567
IGluaXRpYXRpb24= 61568
IENvdXM= 61569
YXJlcg== 61570
cHJvamVjdGlvbg== 61571
IFNoZWV0cw== 61572
IEZvbGQ= 61573
UmVkZGl0 61574
RGVsZXRpbmc= 61575
IHphbQ== 61576
IE5ldXJhbA== 61577
IEZlY2hh 61578
IMKu 61579
IHRhc3RlZA== 61580
IEVuZW1pZXM= 61581
IEpvaG5zdG9u 61582
IGRhbmNlcnM= 61583
IGRpc2FibGluZw== 61584
IHBldHR5 61585
IFdlbGQ= 61586
Ly0t 61587
KHNwcml0ZQ== 61588
SUdP 61589
YXJnb3V0 61590
IHF1YXJ0ZXJiYWNrcw== 61591
ZGlzcGF0Y2hlcg== 61592
IFN1c3RhaW5hYmxl 61593
ZW5hcmlvcw== 61594
IFNraQ== 61595
IGZhY3Rv 61596
aWxsaW4= 61597
X2V4dGVuc2lvbnM= 61598
ybU= 61599
Pkg= 61600
ZWFzdA== 61601
LmFpcg== 61602
4oCcQnV0 61603
T2JqZWN0Q29udGV4dA== 61604
c3VjY2Vzc2Z1bGx5 61605
X2xhbmQ= 61606
IGZvbGRz 61607
X0NPT1JE 61608
IHN1YnBv 61609
LmdldEFkZHJlc3M= 61610
aW5zdHI= 61611
TWF0ZXJpYWxz 61612
0YPRgdGC 61613
ZGVwb3NpdA== 61614
LWxhc3Q= 61615
X0dSQVk= 61616
PWZpbmQ= 61617
IG11dGFudA== 61618
IGxlc2JpZW5uZQ== 61619
bGV0Y2hlcg== 61620
Uk9VR0g= 61621
dXJla2E= 61622
LmNhcHR1cmU= 61623
IGVubg== 61624
IChbWw== 61625
IEZsdQ== 61626
IHRhc2tJZA== 61627
IEh1c3NlaW4= 61628
LmZvbGRlcg== 61629
IGF1c3Rlcml0eQ== 61630
SVNUUkFUSU9O 61631
X0ltcGw= 61632
5rOo5oSP 61633
IGRlY3JlZQ== 61634
LWNoYXQ= 61635
IGltcGxpY2F0aW9u 61636
IGd1ZXNzZXM= 61637
dWxrYW4= 61638
QW5hbHl0aWNz 61639
LnBsdXM= 61640
Q09NTUFORA== 61641
0LXQu9C4 61642
wrsKCg== 61643
X1NJVEU= 61644
IGVxdWFsVG8= 61645
U3VwcG9ydEZyYWdtZW50TWFuYWdlcg== 61646
IFJlY29yZGluZw== 61647
5a6M5oiQ 61648
IGJhZ2dhZ2U= 61649
IHBpdGNoZXJz 61650
IEVo 61651
b3F1ZQ== 61652
CWNudA== 61653
ID0+JA== 61654
L2Zvbw== 61655
SVJB 61656
IFNhdGVsbGl0ZQ== 61657
Ym9yYWg= 61658
IH19Igo= 61659
IEVuZHM= 61660
IFNwcmF5 61661
LHBhcmFt 61662
LkNocm9tZQ== 61663
KnE= 61664
dGhvdWdodA== 61665
aWJyYXRlZA== 61666
IHRoaWV2ZXM= 61667
IGJlbmVmaWNpYXJpZXM= 61668
RW50ZXJlZA== 61669
b3R0ZXN2aWxsZQ== 61670
IHZldGVyaW4= 61671
QnlJRA== 61672
cXVpcGU= 61673
dW1wdGlvbg== 61674
LXVuaXQ= 61675
RXhlY3V0aW9uQ29udGV4dA== 61676
QHM= 61677
IEdpb3Y= 61678
LlRvb2xUaXA= 61679
X2ZyaWVuZA== 61680
KGF0dHJpYnV0ZXM= 61681
IGR1bXBpbmc= 61682
IEpD 61683
X0RPQ1VNRU5U 61684
IEFybW91cg== 61685
KGluc2VydA== 61686
Lkhvcml6b250YWxBbGlnbm1lbnQ= 61687
IFFlZA== 61688
44GE44G+44GZ 61689
L2dpdA== 61690
IFlZWVk= 61691
IENhcmRpZmY= 61692
IGFwYQ== 61693
b3JnYW5pYw== 61694
IFdoZXJlYXM= 61695
IOad 61696
IE1pYQ== 61697
IGRlbW9saXRpb24= 61698
IHNjYXJz 61699
IHBhaQ== 61700
IHJldHJpZXM= 61701
IHJx 61702
IERlbmlz 61703
KFV0aWxz 61704
IGFsbGV2aWF0ZQ== 61705
IFBJQw== 61706
aWR1ZQ== 61707
IGFja25vd2xlZGdpbmc= 61708
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 61709
56Gu5a6a 61710
xKs= 61711
XEpzb24= 61712
LmJpbmFyeQ== 61713
IHh0eXBl 61714
c2lnbmFscw== 61715
IEFwcGVhcmFuY2U= 61716
JnI= 61717
fXM= 61718
Q2k= 61719
IElsbHVt 61720
cG9yYXRl 61721
aG9n 61722
IGluZGV4T2Y= 61723
XENvbW1hbmQ= 61724
X3BhcmFsbGVs 61725
IFNoZXJsb2Nr 61726
7YM= 61727
ICIiKQ0K 61728
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v 61729
IGNyaXRpY2l6ZQ== 61730
IFNvYXA= 61731
IE1hdGNoZXI= 61732
IGdyaWxsZWQ= 61733
KlQ= 61734
IGFkb3Jl 61735
dWxsaW5n 61736
IGplZG9jaA== 61737
X3JlZnM= 61738
bGVhbnVw 61739
IEpBWEI= 61740
IHJvc2Vz 61741
IExpYW0= 61742
c2l6ZWk= 61743
IGdldGNoYXI= 61744
IHRhcmRl 61745
LXRvb2x0aXA= 61746
IHF1YWxpZmllcg== 61747
IEludGVybWVkaWF0ZQ== 61748
X1dpbmRvdw== 61749
IE1hbHRh 61750
RGlzY29ubmVjdA== 61751
ZXdoZXJl 61752
Q2FtcG8= 61753
IGlycmF0aW9uYWw= 61754
bGVkbw== 61755
IERO 61756
QVJHVg== 61757
IG91dHJv 61758
IHRoaXJ0ZWVu 61759
Sm9zZXBo 61760
TUFS 61761
L2ds 61762
SmVzcw== 61763
IFBzeWNoaWF0 61764
IHBhZGRpbmdCb3R0b20= 61765
LWxvb3A= 61766
L2ZvbnRz 61767
X3NlZW4= 61768
VGVhbXM= 61769
UmVhY3RET00= 61770
KG1hbg== 61771
KHhwYXRo 61772
LmdldFNpbXBsZU5hbWU= 61773
Pigq 61774
IFB2dA== 61775
IGVsZGVycw== 61776
IHBpZXM= 61777
LnVzZXJBZ2VudA== 61778
LXJlZ2lvbg== 61779
IEdyZWVrcw== 61780
KGZyYWdtZW50 61781
c3R1 61782
IGNvdW5jaWxz 61783
IHN0YW1pbmE= 61784
IEdvZGRlc3M= 61785
6KW/ 61786
IHBoaWxvc29waGVycw== 61787
IHBlcnNvbmU= 61788
IExvc2U= 61789
IENMUg== 61790
IERvY3M= 61791
IHNvYWs= 61792
IEhPTERFUg== 61793
IGJlbGxz 61794
aGFzaENvZGU= 61795
UkFURQ== 61796
X1dFSUdIVA== 61797
aW5vdXM= 61798
ZW5kcmE= 61799
b3Bob2JpYw== 61800
IHByb3Nl 61801
IGZpbmVseQ== 61802
L29hdXRo 61803
KHNwYWNl 61804
YWRnZQ== 61805
IE1hbWE= 61806
IHN0cmluZ0J1ZmZlcg== 61807
IHN0aW50 61808
IG1pc21h 61809
IHZpbGxhaW5z 61810
IENyaW1lYQ== 61811
IGRpcGxvbWE= 61812
INC/0L7RgdC7 61813
IEJlYQ== 61814
KGpvaW4= 61815
IO2VtA== 61816
Q0hBVA== 61817
cGVyaW5n 61818
IENyb3M= 61819
IG1vbmtleXM= 61820
IHByZWRz 61821
eWxh 61822
LCws 61823
IHZpYnJhdG9y 61824
IE5V 61825
5YWI 61826
ZmFudA== 61827
emV0 61828
IGJpZXRldA== 61829
dW5mdA== 61830
c3dvcnRo 61831
LkZsb3c= 61832
IHBzeWNoZWQ= 61833
IENvbnRpbmVudGFs 61834
PnQ= 61835
IHF1aWx0 61836
LlVQ 61837
IGV4cGFuc2l2ZQ== 61838
RGlzcG9zZQ== 61839
KGxhbmd1YWdl 61840
Q2Fwcw== 61841
X1pPTkU= 61842
IHJlY3ljbGU= 61843
IE1hbmFnZWQ= 61844
Y3VycmVudENvbG9y 61845
LmJyb2FkY2FzdA== 61846
c2lnbklu 61847
LnByb20= 61848
bGx1 61849
dWVibG8= 61850
IHB1bmNoZXM= 61851
IGF1dG9tYXQ= 61852
IGFzc2lnbmluZw== 61853
IGNyZWF0ZVVzZXI= 61854
IEFsbGllZA== 61855
IGNvbmR1Y3Rvcg== 61856
gqg= 61857
IHNhZGRsZQ== 61858
IGRuaQ== 61859
b21lZGljYWw= 61860
LVdlc3Q= 61861
UG9zaXRpdmVCdXR0b24= 61862
IGl0YWxpYw== 61863
P1s= 61864
KHRyaWdnZXI= 61865
IGVsZXBoYW50cw== 61866
IjoiIiwi 61867
IGNhbGliZXI= 61868
cmFmdGVk 61869
ZGlnaXRz 61870
IG1hcnNoYWw= 61871
bWlsbGlzZWNvbmRz 61872
bWFya2Vycw== 61873
bW9t 61874
L3BsYWNl 61875
IGhvbGlzdGlj 61876
OnQ= 61877
Iyw= 61878
IGJvdG8= 61879
IG5hdXNlYQ== 61880
IFNob290aW5n 61881
aXRlY2g= 61882
IHRleHRTdGF0dXM= 61883
PENsYXNz 61884
IERlc2NyaWJl 61885
IGJ1ZmZldA== 61886
Z2ls 61887
IGxvZ2l0cw== 61888
c3RkY2FsbA== 61889
bW9kcw== 61890
IFNrdWxs 61891
IEJhcmU= 61892
aG9wZQ== 61893
IEludHI= 61894
RmFpcg== 61895
CXB0 61896
IGFjb21wYW5o 61897
IGZraw== 61898
X3JwYw== 61899
SW5zdGFsbGVk 61900
X2Fucw== 61901
LmdldE1pbnV0ZXM= 61902
4oCmIgoK 61903
LXRocmVhZA== 61904
IHByZXNjaG9vbA== 61905
QUlMUw== 61906
IGRpZmZpYw== 61907
KGNvbnZlcnQ= 61908
IE5hdGg= 61909
IERPSg== 61910
IHJlZ2ltZXM= 61911
IGVudGh1c2lhc3Q= 61912
IHdhcnJhbnRpZXM= 61913
IGZhc2NpbmF0ZWQ= 61914
X2JpbmRpbmc= 61915
X05vdA== 61916
b2Z0ZW4= 61917
X1JX 61918
L21haWw= 61919
IHRpdGxlTGFiZWw= 61920
IHZpbGxhZ2Vycw== 61921
IEppYW5n 61922
IHN3YWdnZXI= 61923
LlJvd0luZGV4 61924
X2ltZ3M= 61925
cmFweQ== 61926
VkVSQUdF 61927
LlVw 61928
IG5vb3A= 61929
Y2lv 61930
CVNU 61931
IGRlY3JlbWVudA== 61932
IG1hZ25lc2l1bQ== 61933
X3JvdGF0ZQ== 61934
U2l0 61935
IG5pZXV3ZQ== 61936
IHRlcm1lZA== 61937
7ZWp64uI64uk 61938
IHVyZw== 61939
X3RvdWNo 61940
IHN3YXJt 61941
IGNsYXZl 61942
dGhlc3Q= 61943
IExhZg== 61944
SFg= 61945
IEh1bGs= 61946
IHBsYWludGV4dA== 61947
IFNvZmE= 61948
Z2V0U2Vzc2lvbg== 61949
TGVk 61950
IGVjb3N5c3RlbXM= 61951
aGVp 61952
IEtpbGxz 61953
IGh1c2JhbmRz 61954
0YXRgNCw0L0= 61955
KGRvbQ== 61956
X3RpbGVz 61957
TmliTmFtZQ== 61958
IGRvbmF0aW5n 61959
LmFjYw== 61960
IGxpZmVzcGFu 61961
LmJu 61962
X1JHQ1RY 61963
5qU= 61964
YW5zZW4= 61965
IG1vZGVsbGluZw== 61966
TGF5b3V0UGFyYW1z 61967
IG9uQ2hhbmdlVGV4dA== 61968
cnNh 61969
LWxvY2F0aW9u 61970
LlBl 61971
KGJ1cw== 61972
KHNvbmc= 61973
IHByb2R1aw== 61974
IFNIT1VMRA== 61975
IENK 61976
IHNvcw== 61977
IEhvbWVDb250cm9sbGVy 61978
LmxvYWRlZA== 61979
KERvY3VtZW50 61980
LnNvY2lhbA== 61981
dGlsZXM= 61982
IGxhbWU= 61983
PWRm 61984
LnBhcnNlTG9uZw== 61985
IHByYWM= 61986
IGRldG94 61987
IFZF 61988
IHB1bnRvcw== 61989
IGRvY3Ry 61990
IGFuY29y 61991
Q0FQRQ== 61992
IGNtYg== 61993
54S2 61994
Kiki 61995
Oi8vLw== 61996
VmFsdWVUeXBl 61997
IG1vcnRnYWdlcw== 61998
O3E= 61999
IFJvY2tldHM= 62000
c3BvcnQ= 62001
VUdD 62002
Y3Rz 62003
44KB 62004
aWV1cg== 62005
IEFwcGVhbA== 62006
KG5i 62007
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 62008
SU1BVElPTg== 62009
IENyZXM= 62010
IE1hbmlw 62011
Q2F1c2U= 62012
YXR5cGVz 62013
bWFudWZhY3R1cmVy 62014
Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 62015
IHNwb3I= 62016
ZXNvbg== 62017
IHB1bmNoZWQ= 62018
IGJvb2ttYXJrcw== 62019
IEJ1bGs= 62020
Q29tcGxldGVMaXN0ZW5lcg== 62021
IFRhbGtpbmc= 62022
IEVybmVzdA== 62023
IHJ1YmJpc2g= 62024
a2lsbHM= 62025
IERFRklO 62026
IG5laWdoYm91cmluZw== 62027
YXJsbw== 62028
IFBDQQ== 62029
CW1hdHJpeA== 62030
bG9r 62031
IGF0bGFz 62032
IEd1cg== 62033
IHd5bg== 62034
LW5lZ2F0aXZl 62035
IHR1bA== 62036
IHJlbGlj 62037
IFZvbHRhZ2U= 62038
IFByZWlz 62039
IEpOSUNBTEw= 62040
IFBNSUQ= 62041
YWtldA== 62042
CWF0dHI= 62043
IGV0aXF1 62044
IE1K 62045
IEdtYWls 62046
Y2xy 62047
X2V4ZWN1dGlvbg== 62048
6ZSu 62049
cG9zaXRvcg== 62050
LmFm 62051
TnI= 62052
R2VvcmdpYQ== 62053
VG9wb2xvZ3k= 62054
IHBlcmNow6k= 62055
IG11c2xpbQ== 62056
IGVwaWRlbWk= 62057
IHNhYm90 62058
YWN0dXM= 62059
IOuMgA== 62060
IElPRXJyb3I= 62061
LmVzdA== 62062
cHJlZnM= 62063
IEtyaXNo 62064
LlJlYWRLZXk= 62065
TkFTQQ== 62066
dcOnw6Nv 62067
X0Ri 62068
dW1lcmF0b3I= 62069
V2lkZQ== 62070
KHN0YXRlbWVudA== 62071
LmVuZHBvaW50 62072
Li4uLi4uLi4u 62073
IFsq 62074
c3RyZWFtcw== 62075
bXRpbWU= 62076
UHg= 62077
YXRy 62078
IHRwbA== 62079
Um9tYW4= 62080
IHNjZW5pYw== 62081
Lm56 62082
IFNlY29uZHM= 62083
c3VibWVudQ== 62084
IOyLpO0= 62085
X2J1bmRsZQ== 62086
IGRlxJ8= 62087
IFNpc3RlcnM= 62088
cHJlZmVyZW5jZXM= 62089
IHBvcnRh 62090
QWR2aXNvcg== 62091
bWF4TGVuZ3Ro 62092
IEdSRUFU 62093
X18oCg== 62094
b2xlc3Q= 62095
IExhYmVscw== 62096
IGVuZmVy 62097
ICAgICAgCgo= 62098
IFRoZWZ0 62099
X0ZJTEw= 62100
IFdpc2U= 62101
KWFwcGxpY2F0aW9u 62102
dW5hbWk= 62103
PigpKQo= 62104
QUREUkVTUw== 62105
QlNU 62106
ZXR6dA== 62107
IFFncw== 62108
U2Vuc2U= 62109
RXhjZXB0aW9uSGFuZGxlcg== 62110
IENodQ== 62111
LmdldE93blByb3BlcnR5 62112
IGV4ZXJjaXNlZA== 62113
aW90aWM= 62114
IFJlbGVhc2Vz 62115
IHBpbnRlcmVzdA== 62116
b2xpZQ== 62117
aXNvZnQ= 62118
IHNlcXVlbmNpbmc= 62119
IHBhZHJl 62120
XSkpOw0K 62121
KHJhZGl1cw== 62122
Lm1lZA== 62123
YWludGllcw== 62124
Lk9iamVjdE1vZGVs 62125
IGVtcGxl 62126
IHNlZ3Vybw== 62127
U3RhcnM= 62128
IHF1YWxpdGF0aXZl 62129
bGVtbg== 62130
4bux 62131
PiIpLg== 62132
IGd4 62133
LWNlcnQ= 62134
IEFTVE0= 62135
IGZ1bGxuYW1l 62136
IHRlbGVtZXRyeQ== 62137
IENhbWJvZGlh 62138
X3Vs 62139
IENsYXJl 62140
Q1VTVE9N 62141
UUM= 62142
IFVucw== 62143
IEhUVFBT 62144
IFBhcmtpbnNvbg== 62145
YW5jeWJveA== 62146
JywnLg== 62147
VHVl 62148
LmdldExhc3Q= 62149
IGFiaQ== 62150
xIVk 62151
QXN0 62152
IEVkaXRpbmc= 62153
LlVuaXR5 62154
am1w 62155
IG1hdHM= 62156
IHNoYXJlZFByZWZlcmVuY2Vz 62157
Q2FwdGFpbg== 62158
LnBhZ2VTaXpl 62159
IHJ0bA== 62160
IGFubWVsZA== 62161
UnVudGltZU9iamVjdA== 62162
IGRlbWFuZGU= 62163
KCI7 62164
c2VpdGU= 62165
LWhlYWRlZA== 62166
IEtyYQ== 62167
IEZPTlQ= 62168
YFw= 62169
Q2xhc3NOb3RGb3VuZEV4Y2VwdGlvbg== 62170
LmF2Zw== 62171
YXRpY2Fs 62172
QWo= 62173
IHBlcm1pdHRpbmc= 62174
UHJvag== 62175
RVJSUQ== 62176
IGNyZWFtcGll 62177
IEJ1eWVy 62178
LW1vZHVsZXM= 62179
IFN1bmRheXM= 62180
fGAK 62181
IGRheXRpbWU= 62182
ICso 62183
IGdsaXRjaA== 62184
IE9wZXJhbmQ= 62185
IHRveGlucw== 62186
aW55YQ== 62187
RE5T 62188
IFNhcw== 62189
Q2FrZQ== 62190
IE5hdGlvbmFscw== 62191
LmFkZFRv 62192
IHNpbmtpbmc= 62193
IGNvbXByZWhlbnNpb24= 62194
IHNjb3I= 62195
YWdlbWVudHM= 62196
IHRhcmQ= 62197
IG1hcmNoaW5n 62198
IE1UVg== 62199
IHNhbmU= 62200
Q3JlYXRlSW5mbw== 62201
4bqv 62202
IGVuZEluZGV4 62203
CWxheW91dA== 62204
IOWQjQ== 62205
U0lURQ== 62206
IFRIRVJF 62207
IFt7Jw== 62208
b3BhdGhpYw== 62209
IHRyYW5zbWl0dGVy 62210
L2JvZHk= 62211
IHB1bmQ= 62212
IENsb3Npbmc= 62213
IHNldGF0dHI= 62214
IGJvdW5kZWQ= 62215
QXRsYXM= 62216
c3VtaW5n 62217
KHRpbWVz 62218
cGFyZXI= 62219
eW5vbQ== 62220
ZmVpdA== 62221
IGZyZW0= 62222
LWxlZw== 62223
IEJyYXM= 62224
PiM= 62225
IOy2nOugpQ== 62226
IElOU1RBTkNF 62227
IENvdWNo 62228
X2hvc3Rz 62229
bGlrZWxpaG9vZA== 62230
Lk1hcmtlcg== 62231
IE1hc2tz 62232
IGNlcmVhbA== 62233
dXRpbGl0aWVz 62234
IGVsZW1lbnRhbA== 62235
IGRpc3RvcnRlZA== 62236
aW5hY3RpdmU= 62237
Y3J5 62238
V0w= 62239
VVBQT1JURUQ= 62240
LlRocm93cw== 62241
L3NjaGVtYQ== 62242
c2VyaWU= 62243
LiInLA== 62244
IEJlbmVkaWN0 62245
LXBpY2tlcg== 62246
aWdncw== 62247
IFBpcmF0ZQ== 62248
5ZGo5pyf 62249
IFRoZW1h 62250
IFNvdXRoYW1wdG9u 62251
IGFycmF5V2l0aA== 62252
IFBhdWxh 62253
IHByZWRpY3Rvcg== 62254
LUFzcw== 62255
LnVzZXJpZA== 62256
IHBlcmk= 62257
IGV4YWdnZXJhdGVk 62258
dXJhdGU= 62259
YXJzZWlsbGU= 62260
IENvbmNlbnQ= 62261
IFBpaw== 62262
IEBfOwoK 62263
IGZvcm1hdGlvbnM= 62264
IGRlbm9taW4= 62265
Ii8+Lgo= 62266
ZW5kZWRvcg== 62267
IHBhbmNyZQ== 62268
IGFtdA== 62269
IG9uUmVzdW1l 62270
b25EZWxldGU= 62271
IEJDSA== 62272
KSgi 62273
bW92ZW1lbnQ= 62274
IHBvdGFzc2l1bQ== 62275
PCEtLVs= 62276
IG1lbWVz 62277
X1NFVFVQ 62278
X2dhbW1h 62279
IGNvbG9yV2l0aFJlZA== 62280
IGdyYXZlcw== 62281
IHN0YXR1dGVz 62282
IGFxdWFyaXVt 62283
IExhbWFy 62284
IHhBeGlz 62285
V2VicGFja1BsdWdpbg== 62286
X2ZvbGQ= 62287
Lmdlbw== 62288
IEZlZXQ= 62289
LXNwZWFraW5n 62290
6aKd 62291
X2Nvcw== 62292
IEF2ZWM= 62293
YW5zdA== 62294
IEVFUFJPTQ== 62295
IGRlYWxlcnNoaXA= 62296
IFVudGVybmVobWVu 62297
LEludGVnZXI= 62298
IMOqdGVz 62299
LmB8YAo= 62300
dmluZQ== 62301
IEtuaWZl 62302
X3ZlcnRpY2Fs 62303
LkRvd25sb2Fk 62304
IG92ZXJzaXplZA== 62305
bGlk 62306
IHBpbGxhcg== 62307
Y2F1Z2h0 62308
IGZsYWdnZWQ= 62309
KHJvdXRlcg== 62310
KFJFRw== 62311
IGJhcmJlY3Vl 62312
YnJvd3Nl 62313
IEZpdHpnZXJhbGQ= 62314
INC/0YDQvtCy 62315
aXJpZQ== 62316
IGVyc3Rl 62317
ZWxpYg== 62318
X1BSRVNT 62319
IGhlYWxlZA== 62320
IGhhdXQ= 62321
PnhwYXRo 62322
IFdlbg== 62323
Z3J1bnQ= 62324
LktleXdvcmQ= 62325
LWhhc3BvcHVw 62326
bnc= 62327
U1o= 62328
Z2FiZQ== 62329
SW50ZXJhY3Rpb25FbmFibGVk 62330
cHJlY2g= 62331
IHByaW1v 62332
c3RyaXBl 62333
YWx0ZWQ= 62334
X0JPUkRFUg== 62335
ZmluZEJ5 62336
X2Fubm90YXRpb24= 62337
V2ViU29ja2V0 62338
QnVy 62339
IGRpcGxvbWFjeQ== 62340
KHRk 62341
IFNpbXBs 62342
ZGV0ZWN0 62343
cGVyZm9ybWFuY2U= 62344
IGNhcmJvaHlkcmF0ZXM= 62345
L2lvdXRpbA== 62346
LS0tLS0tKw== 62347
X3Ny 62348
bWVldGluZw== 62349
IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 62350
X1Zhcg== 62351
IHJvdmVy 62352
IGNhc2k= 62353
IE1hdGNoZXM= 62354
cXJ5 62355
X0JPT0s= 62356
IHByZXN1bWVk 62357
IE3DqXQ= 62358
L2l0ZW1z 62359
IENyZWRlbnRpYWxz 62360
XSkuCg== 62361
IEthcmRhc2g= 62362
QWRtaW5pc3Ry 62363
IFNsb3Zhaw== 62364
KCcsJykK 62365
IGNvbnF1ZXN0 62366
UGVyc2lzdA== 62367
IERyYWlu 62368
Ymlq 62369
IGRvdg== 62370
IHPDuGdlcg== 62371
V29uZGVy 62372
QVNFVA== 62373
W21pbg== 62374
Z3VuYQ== 62375
Z3Jvd24= 62376
IH0pCgoK 62377
QVVE 62378
IGJlbGlldmVy 62379
aXNlcnM= 62380
KHNlbnQ= 62381
SmFja3Nvbg== 62382
IHBhaXM= 62383
IGN1ZGFNZW1jcHk= 62384
IGZsYXNoZXM= 62385
YmVyZQ== 62386
IG11bHRpZg== 62387
IENhcmdv 62388
RWxlbWVudHNCeVRhZ05hbWU= 62389
KGVwb2No 62390
IEt1bmRlbg== 62391
UmVjb2duaXRpb24= 62392
IFNldFZhbHVl 62393
IFN1bnNoaW5l 62394
QUNQ 62395
OnN0cg== 62396
IGFtYmlndQ== 62397
IO2VnA== 62398
LWxpbmVhcg== 62399
IFdPVw== 62400
KGN1c3RvbQ== 62401
IGlzRW5hYmxlZA== 62402
QkFU 62403
X2RpYWc= 62404
X0dVSQ== 62405
SGVhdA== 62406
IGFzc2VtYmxpZXM= 62407
IENldHRl 62408
L2NhcmQ= 62409
IERlY2xhcmU= 62410
IHVwaGVsZA== 62411
IENsYXVk 62412
LWZsb3c= 62413
IGhvb2t1cA== 62414
SVJR 62415
RmF0aGVy 62416
RGVsZXRlcw== 62417
KSk7Ly8= 62418
IFBUU0Q= 62419
KTsNDQo= 62420
ZWdhbA== 62421
LmFycm93 62422
IE1QVQ== 62423
w7Nq 62424
IG1vdGl2YXRl 62425
IEthdGhlcmluZQ== 62426
LmZyYW1lcw== 62427
IHRoaQ== 62428
PFJlc3VsdA== 62429
LmdyYXk= 62430
IEt1c2huZXI= 62431
IENlbWVudA== 62432
IEJ1cmw= 62433
SW50ZXJ2aWV3 62434
PSciLg== 62435
UE9XRVI= 62436
IENEcw== 62437
IFsmXSg= 62438
IGNoYW5nZXI= 62439
Pj4sCg== 62440
LXdl 62441
IENMSw== 62442
IEFkcmk= 62443
IGNpbA== 62444
PVg= 62445
IHNlbmRv 62446
IENlbHNpdXM= 62447
YmxvY2tlZA== 62448
T3V0T2ZCb3VuZHM= 62449
LiE= 62450
b3Byb2plY3Q= 62451
YW5kZXM= 62452
ZWRpdGluZw== 62453
IHB1bXBlZA== 62454
KCk7fQo= 62455
4Ka/ 62456
X0VWRU5UUw== 62457
IEZyaWVkbWFu 62458
ID4v 62459
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 62460
IHRlbXB0YXRpb24= 62461
IElwc3Vt 62462
IENlcw== 62463
IG5vdGljaW5n 62464
X2VsZQ== 62465
QWNjZW50 62466
IE52aWRpYQ== 62467
IGFtdXNlbWVudA== 62468
IGludHJvZHVjdG9yeQ== 62469
CXJldHZhbA== 62470
IGxpbA== 62471
aXJpbQ== 62472
ZW5xdWV1ZQ== 62473
LWhpc3Rvcnk= 62474
IGNvdW5zZWxvcg== 62475
VFJBTlNGRVI= 62476
X1ZlY3Rvcg== 62477
Y2F0ZWdvcnlJZA== 62478
cGVyeQ== 62479
RklMVEVS 62480
KHJlbW90ZQ== 62481
IHNlcGFyYXQ= 62482
IEVtYmVkZGVk 62483
IEJhY29u 62484
dGVycmFmb3Jt 62485
IHJlc3BlY3RhYmxl 62486
aWNoYQ== 62487
YWlj 62488
Kydc 62489
IHN0cmF5 62490
0LXQvdC40Lk= 62491
IEF1ZGl0b3I= 62492
ZW50aWNhdG9y 62493
IGNsb2Fr 62494
IFVOS05PV04= 62495
IEFtZW4= 62496
dm94 62497
YXN0cmVldA== 62498
Li4uXQ== 62499
IGAl 62500
LXByb3BlcnR5 62501
IFF1YWxjb21t 62502
ZWRpdGVk 62503
IGRpc2NyZWV0 62504
LU11c2xpbQ== 62505
LnJlY2lwZQ== 62506
IHZhbmRhbA== 62507
IHXFvHk= 62508
c2VuaGE= 62509
LGlz 62510
IFBvbXBl 62511
IEtuaWNrcw== 62512
KCknLA== 62513
KHRi 62514
IEhJRA== 62515
IHBldw== 62516
IGNhcnJvdHM= 62517
IHBvbGljeW0= 62518
Lmxp 62519
IHR3ZW50aWV0aA== 62520
X3Byb21wdA== 62521
c2NlbmFyaW8= 62522
LkpGcmFtZQ== 62523
IE1RVFQ= 62524
IEluZGl2aWR1YWxz 62525
dG9NYXRjaFNuYXBzaG90 62526
w61zdGljYXM= 62527
IkQ= 62528
IGZvZA== 62529
IHJpY2h0 62530
IFphcg== 62531
IHJlc3VycmVjdGlvbg== 62532
IG1pbGl0YXI= 62533
IE1hbmFnZXJz 62534
X0dSSUQ= 62535
bm9ubnVsbA== 62536
QkVSVA== 62537
T3V0cHV0cw== 62538
ICAgIAoKCg== 62539
IHByZWRlY2Vzc29ycw== 62540
IGlzU2VsZWN0ZWQ= 62541
IGN5YmVyc2VjdXJpdHk= 62542
5YaZ 62543
Lm1j 62544
UXVp 62545
IGFsbGVnaW5n 62546
IHRpYw== 62547
TWFudWZhY3R1cmVy 62548
IEVuaGFuY2Vk 62549
IEJpeg== 62550
IHJlYWRPbmx5 62551
w7Ru 62552
IGx1bWJlcg== 62553
YWVk 62554
IHJhaW5z 62555
cHJvdmlkZQ== 62556
TGF0ZQ== 62557
IHBlZGVzdHJpYW5z 62558
amF2 62559
QWN0aXZhdGlvbg== 62560
J0JyaWVu 62561
IHZhY2FuY3k= 62562
Ly8t 62563
IGJsYWRkZXI= 62564
IGFnaWxl 62565
IHN0ZWFscw== 62566
IHJlZ2lzdHJhcg== 62567
IGVsZWN0b3JhdGU= 62568
R292ZXJubWVudA== 62569
J109Ig== 62570
YWxidW1z 62571
ZWxlY3Rpb24= 62572
YWJs 62573
IE9yaWVudA== 62574
IHBpcmF0ZXM= 62575
IGxvb3Bo 62576
CXJlYWRlcg== 62577
IMO6bHRpbW8= 62578
IFBldHJv 62579
INGB0YLRgNCw0L3QuNGG 62580
IHNhbXA= 62581
aW52ZXJzZQ== 62582
LmdyYWRsZQ== 62583
IERvbnQ= 62584
eG9u 62585
IGNyZWFk 62586
ZXJ0aWxpdHk= 62587
cmdjdHg= 62588
IHBvbMOtdGljYQ== 62589
VmFsdWVDaGFuZ2Vk 62590
QXBpUmVzcG9uc2U= 62591
Y29tYm8= 62592
IFVY 62593
IGRhaGE= 62594
J2Fu 62595
LW15 62596
4oCcTXk= 62597
cGVl 62598
bGF0bG9uZw== 62599
XEJhc2U= 62600
Lndpaw== 62601
IFBPVA== 62602
IHB1bmN0dWF0aW9u 62603
cXVz 62604
aW55aW4= 62605
PW1pbg== 62606
IG51Y2xldXM= 62607
IGNvbmNlc3Npb25z 62608
LmF2ZXJhZ2U= 62609
dXNlcmluZm8= 62610
IHRhYmxlc3Bvb24= 62611
IE5laWdoYm9yaG9vZA== 62612
KFRocm93YWJsZQ== 62613
PnY= 62614
b3Z5 62615
WFhYWFhYWFg= 62616
aXN0aQ== 62617
IGJhcnQ= 62618
77u/Cg== 62619
RW5jcnlwdA== 62620
PWVuZA== 62621
IGluY3Vy 62622
IHBlcnRpbmVudA== 62623
X01JTk9S 62624
KSI+Cg== 62625
Y2hpZWY= 62626
IHZk 62627
KGAK 62628
dXJneQ== 62629
YWJ5cmludGg= 62630
IFNoYXBlcw== 62631
IHZhZ3k= 62632
LmRkcw== 62633
bWVtY21w 62634
CUl0 62635
c2VtZXN0ZXI= 62636
IEVtaXQ= 62637
IGluc2Fu 62638
IGJydXNoZWQ= 62639
X0ZBVEFM 62640
ImVycm9ycw== 62641
IGRpc3J1cHRpdmU= 62642
JW4= 62643
IGNvbXBvc2l0aW9ucw== 62644
IGJhY2hlY2E= 62645
IGRpc2FncmVlbWVudA== 62646
UHJvdGVjdA== 62647
TElLRQ== 62648
LkZpbGVOb3RGb3VuZEV4Y2VwdGlvbg== 62649
IHdlaXRlcmU= 62650
IE1vbmFjbw== 62651
Xzw/ 62652
IG1vZGVsZWQ= 62653
c3RlZWw= 62654
ZWVudGg= 62655
IFtdKS4= 62656
KHJlZ2V4 62657
ZW5pZQ== 62658
LkZsdXNo 62659
LnBvcHVw 62660
IE92ZXJz 62661
LkRlYnVnZ2Vy 62662
PmA7Cg== 62663
bml0ZQ== 62664
LnF1b3Rl 62665
IGNvZw== 62666
IHdha2Vz 62667
IFdyZXN0bGluZw== 62668
SW50cm8= 62669
IHNlcmRl 62670
IHJldXNhYmxl 62671
IENvbXBvdW5k 62672
SW1wbE9wdGlvbnM= 62673
CUl0ZW0= 62674
IG51bU9m 62675
IENIUg== 62676
IEJvbHRvbg== 62677
UExVUw== 62678
Ym91bmRpbmc= 62679
KCsr 62680
ICIsIjsK 62681
IEd1ZXN0cw== 62682
IGRlcHJpdmVk 62683
IG1lbG9keQ== 62684
WklQ 62685
Pj4oKQ== 62686
IGNvbmNlZGVk 62687
X2RpZQ== 62688
IGpveXN0aWNr 62689
IGFuYXRvbXk= 62690
IFRvb2xTdHJpcA== 62691
IEVub3VnaA== 62692
Iio= 62693
aW50b3No 62694
aGFiaQ== 62695
IFN5cmFjdXNl 62696
IEluY3JlYXNlZA== 62697
TXVz 62698
LnBhdGllbnQ= 62699
IGluY3JlbWVudHM= 62700
IFBJWA== 62701
IGJvb3R5 62702
LnByaXZhdGU= 62703
ZXJ0b2lyZQ== 62704
IGN1dHRlcg== 62705
IGJla2Fu 62706
IGRyYXdlcnM= 62707
X0FMSUFT 62708
QW5pbWF0aW5n 62709
X2Fuc3dlcnM= 62710
LmF0dGFjaw== 62711
d3JpdGVycw== 62712
IGdhYW4= 62713
aWtvbg== 62714
CWNvbnRyb2xsZXI= 62715
IGZhY2FkZQ== 62716
k+WQjQ== 62717
LHN0YXR1cw== 62718
LmZl 62719
IHBvc3Rwb25lZA== 62720
IEZvbnRz 62721
IEJlbmNobWFyaw== 62722
aWRlbnRhbA== 62723
IGNoaWxsaW5n 62724
IEtpZXY= 62725
IGJydXNoZXM= 62726
LXdoZWVs 62727
IEhpcmU= 62728
KHByb2M= 62729
IGNoZW1vdGhlcmFweQ== 62730
INCx0YvRgtGM 62731
IE5vbGFu 62732
KGllcnI= 62733
IEp1ZGU= 62734
LUF1Zw== 62735
dW1ub3M= 62736
Y29udmVyc2F0aW9u 62737
IEJlaGF2aW9yU3ViamVjdA== 62738
YmF1Z2g= 62739
IGd1aXRhcmlzdA== 62740
Lm9mZmVy 62741
IGFjY3VzZQ== 62742
cGFyZA== 62743
cmVmZg== 62744
LlJlYWN0 62745
IHVjaGFy 62746
IG9mZnNldG9m 62747
JHN0YXR1cw== 62748
L2VtYWls 62749
LmNvbm5lY3RlZA== 62750
Lys= 62751
QHFx 62752
YXJhdmVs 62753
IGZ2 62754
LlBlcnNpc3RlbnQ= 62755
ZW5zdGVpbg== 62756
Li4uXQoK 62757
LmdyaWRWaWV3 62758
IEpPQg== 62759
LScuJA== 62760
LmxheW91dENvbnRyb2w= 62761
IGNhcmc= 62762
IEtvdA== 62763
X2VxdWFscw== 62764
IHdpdGhkcmV3 62765
QVRFU1Q= 62766
LWJ1dHRvbnM= 62767
CVVQUk9QRVJUWQ== 62768
IFVJR3JhcGhpY3M= 62769
IFB1YmxpY2F0aW9ucw== 62770
IElOVEVSTg== 62771
IGV0aGFub2w= 62772
w6RuZ2Vy 62773
U0VORA== 62774
CXNsb3Q= 62775
0LvQtdC90LjRjw== 62776
IHBhc28= 62777
X2V4dGVuZGVk 62778
b3J0aGFuZA== 62779
KHNoZWV0 62780
IHByb2NlZHVyYWw= 62781
IGtpZG5hcHBpbmc= 62782
Ly8tLS0tLS0tLS0tLS0tLS0t 62783
W21zZw== 62784
T2NjdXJyZWQ= 62785
QWxpY2U= 62786
IENBU1Q= 62787
IGthdGE= 62788
5rOo5YaM 62789
Y2hlYXA= 62790
aWNpdHk= 62791
IHJlYWRpbmVzcw== 62792
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 62793
IFNZTg== 62794
IE1hZ2dpZQ== 62795
cmljYQ== 62796
IHlp 62797
IFR3ZQ== 62798
aWdub24= 62799
YW5kZW4= 62800
IGpxdWVyeQ== 62801
IHN0YXJ0WQ== 62802
IGF2ZW51ZQ== 62803
QW50aA== 62804
X2NhcHRpb24= 62805
IFJvd3M= 62806
wq/Cr8Kvwq8= 62807
c2VxdWVuY2Vz 62808
0LjRhA== 62809
KCIvIikK 62810
Y3JhdGU= 62811
IFNhZ2E= 62812
SnVk 62813
IGZhY2V0cw== 62814
X3NjYWxlZA== 62815
UnVieQ== 62816
IFBR 62817
IGNydXM= 62818
SXJhbg== 62819
LnNxdWVlemU= 62820
CWZk 62821
IHBlcmNl 62822
IGRhdGFw 62823
Xl5eXg== 62824
X1NDT1BF 62825
IFNhbG1vbg== 62826
IHRhaWxsZQ== 62827
IFZhbG9y 62828
QUdFTUVOVA== 62829
UnA= 62830
IEd1YXJkaWFucw== 62831
IHJlYWRGaWxl 62832
IG5lZ3Jv 62833
IG9icmE= 62834
LlBhcmNlbA== 62835
Q0FDSEU= 62836
cmV0Y2hlZA== 62837
Y3Jt 62838
cXJzdA== 62839
b3VmbA== 62840
7ZqM 62841
Lm5vbQ== 62842
c3NpZA== 62843
IHNhZmVzdA== 62844
LkVycm9ycw== 62845
X3BuZw== 62846
Q29udmVydGVyRmFjdG9yeQ== 62847
PFNlbGY= 62848
IHNlcGFyYXRlcw== 62849
X2pCdXR0b24= 62850
IG1pc3VzZQ== 62851
ZXhjZXB0aW9ucw== 62852
IFt7Ig== 62853
IFBBRA== 62854
562+ 62855
a0h6 62856
PWVu 62857
IGjDoG5n 62858
SFo= 62859
IFhhdmllcg== 62860
e2lk 62861
IHN0YWlyY2FzZQ== 62862
dGV4dGZpZWxk 62863
L2RvY2tlcg== 62864
KHRhYmxlTmFtZQ== 62865
IHRlbGVjb21tdW5pY2F0aW9ucw== 62866
b25zbw== 62867
b2Ns 62868
UGFyZW50cw== 62869
L3BhcnNlcg== 62870
LWRyb3A= 62871
KHN0eWxlcw== 62872
X21vZGlmaWVy 62873
UmVxdWVzdElk 62874
LmJyYW5k 62875
IENvaW5z 62876
IGt1bnQ= 62877
Lkdy 62878
IEhJU1RPUlk= 62879
KGRyb3A= 62880
QnJhZA== 62881
IHNla3Np 62882
X3Nkaw== 62883
IGluc3BlY3RlZA== 62884
cHJlZGljYXRl 62885
LmZp 62886
R09S 62887
IGNvY29h 62888
IElRdWVyeWFibGU= 62889
LS0tPC8= 62890
IGRlcm5pZXI= 62891
IFVzZXJEZWZhdWx0cw== 62892
X1RT 62893
IGVvcw== 62894
IGJsZW5kZXI= 62895
IGxvdWRlcg== 62896
U3BhbmlzaA== 62897
bGluZXI= 62898
XHdpZGdldHM= 62899
IHNjaGVtYXM= 62900
X0NBUFRVUkU= 62901
Lm1pY3Jv 62902
44Kt 62903
IPCfkQ== 62904
IGFuZGVy 62905
YWx0dW5n 62906
ID09Jw== 62907
IGVuZm9yY2luZw== 62908
IEV4aXN0 62909
dXZ3 62910
aXJ0c2NoYWZ0 62911
IEdyZWF0ZXN0 62912
IE1vc3Vs 62913
X3Bv 62914
IHNpbW1lcg== 62915
IHByb2dyZXNzZWQ= 62916
IHJvdGFyeQ== 62917
IG50bw== 62918
Tm9pc2U= 62919
IGNoYXNlZA== 62920
IGluc3RpbmN0cw== 62921
UHVibGljS2V5 62922
IHNuYXBzaG90cw== 62923
IFN1cGVydg== 62924
Lm1hYw== 62925
IEJpYmxp 62926
Li4uKQoK 62927
CW9sZA== 62928
S0VO 62929
IENsaW0= 62930
IFByb2dyZXNzRGlhbG9n 62931
bGljYW50cw== 62932
X3NsaWRl 62933
K2g= 62934
IGVtcG93ZXJlZA== 62935
SW5qZWN0b3I= 62936
IGluZmx1ZW56YQ== 62937
IHBsYW5ldGFyeQ== 62938
V2lsbGlhbXM= 62939
IG1vbmQ= 62940
ZW5hbg== 62941
LnJhbmRvbVVVSUQ= 62942
KFBvc2l0aW9u 62943
IGhvbWJyZXM= 62944
IGluc2VjdXJl 62945
IHZlcmJz 62946
X3JlY3RhbmdsZQ== 62947
SU5TVEFMTA== 62948
IFBhcnNlRXhjZXB0aW9u 62949
X1RB 62950
JGZpZWxk 62951
LkltYWdlSWNvbg== 62952
IEd1amFyYXQ= 62953
LWxpdmVk 62954
X3NvbWU= 62955
IGNsaXBwaW5n 62956
LmdldENvbXBvbmVudA== 62957
LmNsb3Nlc3Q= 62958
LmxpdmU= 62959
IGluY2lk 62960
DQoJCQ0K 62961
IHByb2R1dG9z 62962
X211c2lj 62963
U3FsQ29ubmVjdGlvbg== 62964
IFByZWRpY3Rpb24= 62965
IFhU 62966
LW5vdGVz 62967
IEpld2Vscnk= 62968
cmVtZW4= 62969
KHJlYXNvbg== 62970
U25hcA== 62971
QWZmaW5lVHJhbnNmb3Jt 62972
YW5nZWxvZw== 62973
IGRpY3RhdGU= 62974
IHpvc3Rh 62975
QmFyQ29udHJvbGxlcg== 62976
L3Nob3A= 62977
ZWlk 62978
LXN3 62979
Q291cnNlcw== 62980
Zm9udFdlaWdodA== 62981
IEhvZmZtYW4= 62982
X051bQ== 62983
S1I= 62984
IFdpbGxpZQ== 62985
YXJrYW4= 62986
LXNjYWw= 62987
IGF1ZGl0aW9u 62988
LmRpc2M= 62989
IHR3aXN0cw== 62990
IGRlcGljdHM= 62991
IGJhbnlhaw== 62992
IEtpdHM= 62993
IEhlemJvbGxhaA== 62994
bm9ydGg= 62995
IEdSRQ== 62996
w7Zn 62997
cXVvaQ== 62998
LXRocmVhdGVuaW5n 62999
IHdvcm1z 63000
IFBO 63001
IHNleGRhdGU= 63002
IG1vbnVtZW50cw== 63003
TU1D 63004
Ym90cw== 63005
IFNETEs= 63006
ZGVhdGg= 63007
IHBpdHM= 63008
X2Nob2ljZXM= 63009
KHNvbHV0aW9u 63010
IHByb2NsYWltZWQ= 63011
IFFpbmc= 63012
IHNzY2FuZg== 63013
c3RyYXRlZ3k= 63014
ZGVhdXg= 63015
IEZpc2NoZXI= 63016
X0lW 63017
IGlud2FyZA== 63018
RGF0ZVBpY2tlcg== 63019
IHNld2Vy 63020
IGV1cm9w 63021
IGhvbWVsZXNzbmVzcw== 63022
LlNwcmluZ0Jvb3RBcHBsaWNhdGlvbg== 63023
IFNwYWNlWA== 63024
IGluZm9ybWluZw== 63025
ICch 63026
IHBsYXN0ZXI= 63027
SW5pdGlhbGl6YXRpb24= 63028
LmJldGE= 63029
IFBlcnNvbnM= 63030
dWdnbGluZw== 63031
IHNoYW1wb28= 63032
IEplaA== 63033
IHNlcnI= 63034
IG1heFNpemU= 63035
IHN0aXRjaGVz 63036
W3BhdGg= 63037
LnJldA== 63038
IFByZXQ= 63039
TmVpbA== 63040
Q29udmVydGVk 63041
IE1hemRh 63042
UE9TSVQ= 63043
VG9vbGtpdA== 63044
IFJFQURNRQ== 63045
Q3VzdG9tQXR0cmlidXRlcw== 63046
YXJjaGl2bw== 63047
LlBhaW50 63048
Z2V0T2JqZWN0 63049
SVE= 63050
LldlYkRyaXZlcg== 63051
IGFudGlib2R5 63052
IExpbWE= 63053
aW5jb3JyZWN0 63054
RnJhY3Rpb24= 63055
IERlYWRsaW5l 63056
c2VuZE1lc3NhZ2U= 63057
Lk9mZnNldA== 63058
ZWRpbw== 63059
INeQ 63060
IHNtb290aGluZw== 63061
LmJv 63062
IENFTlQ= 63063
ZWxhc3RpYw== 63064
LmNoYXJDb2RlQXQ= 63065
UmVmcmVzaExheW91dA== 63066
QUdFRA== 63067
KTtcCg== 63068
IFtdKQoK 63069
IHRhcHM= 63070
RFY= 63071
4oCV 63072
IENveQ== 63073
IG91dHdlaWdo 63074
J2dj 63075
XEV4Y2VwdGlvbnM= 63076
IEdyYW1tYXI= 63077
IEd1YXRlbWFsYQ== 63078
IEd1cnU= 63079
IHRlag== 63080
IGZyaWVuZHNoaXBz 63081
IGNvcGluZw== 63082
KHVwZGF0ZWQ= 63083
X2R4 63084
QW5hbA== 63085
LU1heQ== 63086
IG1hdGNobWFraW5n 63087
IGp1bnRv 63088
UEFDS0FHRQ== 63089
IHJlbnRz 63090
IOiHqg== 63091
Y2FrZXM= 63092
44CCJywK 63093
cmVuZGluZw== 63094
X0ZyYW1ld29yaw== 63095
LSk= 63096
KHVwbG9hZA== 63097
IG9wb3J0dW4= 63098
IGNhdXNh 63099
IHByb2xpZmlj 63100
Um93Q291bnQ= 63101
IG5hY2t0ZQ== 63102
IFNveQ== 63103
U2h1dGRvd24= 63104
6Ig= 63105
X0VYUEk= 63106
IEhhcmJvdXI= 63107
IHRvcmU= 63108
XE1lc3NhZ2U= 63109
L1U= 63110
T01CUkU= 63111
LnNlZ21lbnQ= 63112
IGNvbWVk 63113
cm9tYW4= 63114
IHNlZ8O6bg== 63115
U2lnbWE= 63116
IHNraWluZw== 63117
IFRlcnJhaW4= 63118
IGJlbmNobWFya3M= 63119
IEF0dGVudGlvbg== 63120
IH0qLwoK 63121
IGdlaWw= 63122
IGNhcnRvb25z 63123
IGF0dHJpYnV0aW9u 63124
IHJvdG9y 63125
ZW5oYQ== 63126
IM6z 63127
IHRyYWo= 63128
IGPDtG5n 63129
IHNoYWtlcw== 63130
IENsZW1zb24= 63131
IGJydXRhbGl0eQ== 63132
IDsNCg0K 63133
IGVpZ2h0ZWVu 63134
IEF3YXJlbmVzcw== 63135
KHJlc3Q= 63136
IHZpb2xpbg== 63137
X1JPVVRF 63138
LkZpZWxkTmFtZQ== 63139
IEFkZQ== 63140
aXppYQ== 63141
IEhlbG0= 63142
IHR5aW5n 63143
IFByb2dyZXNzQmFy 63144
YXV0b3I= 63145
IGxvbmRvbg== 63146
Jnc= 63147
Z29v 63148
SVNUUlk= 63149
L0NyZWF0ZQ== 63150
IFVTSU5H 63151
IEdY 63152
IEVGRkVDVA== 63153
RmNu 63154
IEVuY3J5cHRpb24= 63155
Q0VE 63156
ZmluZQ== 63157
LWFycmF5 63158
IHB1c2hWaWV3Q29udHJvbGxlcg== 63159
QCQ= 63160
VXBsb2FkZWQ= 63161
LXdyaXRl 63162
LmdldFBhZ2U= 63163
X2VzdGFkbw== 63164
QU5UTFI= 63165
IFZpZXdEYXRh 63166
ICR7KA== 63167
IGFsbW9uZA== 63168
IExvZ2ljYWw= 63169
IHNob290ZXJz 63170
IOygnA== 63171
IHB1ZmY= 63172
IHVuY29tbWVudA== 63173
IGN1c3RvbWl6YWJsZQ== 63174
xINy 63175
RGlyZWN0aXZl 63176
CWlkeA== 63177
Q2hhbGxlbmdl 63178
IHN1bW1hcml6ZQ== 63179
IEF2Zw== 63180
LlVzZXJJRA== 63181
LmRpc3BhdGNoRXZlbnQ= 63182
IGNvb2tlcg== 63183
IGNvbm5lY3Rpb25TdHJpbmc= 63184
IHNocmlua2luZw== 63185
amFk 63186
IFRoZW1lcw== 63187
YW5kYXRvcnk= 63188
IGR1YmlvdXM= 63189
IGNlcA== 63190
c3Bpbm5lcg== 63191
IHN1YnJlZGRpdA== 63192
IGlpaQ== 63193
L2NhY2hl 63194
ZGVmZXI= 63195
IHN1YnN0aXR1dGVk 63196
IGd1bm1hbg== 63197
Y2xpbmc= 63198
IOyw 63199
KGN0cmw= 63200
T3JkZXJJZA== 63201
X2VuZw== 63202
IGZpbG1tYWtlcnM= 63203
IGZvcndhcmRpbmc= 63204
IHN0cmFuZGVk 63205
IExlYW4= 63206
IOunjA== 63207
KFVuaXQ= 63208
IGRpZFNldA== 63209
bGFrZQ== 63210
Z3JvdW5kcw== 63211
5Zug 63212
IHVucmVnaXN0ZXI= 63213
IG1pbmhh 63214
IFZlZ2Fu 63215
CWlWYXI= 63216
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 63217
b3R0bGU= 63218
SVBD 63219
IHByYWdtYQ== 63220
IElJRA== 63221
X01pbg== 63222
JTsiPgo= 63223
X3JhbQ== 63224
ZHJpdmVycw== 63225
IENoaWNr 63226
IGNscg== 63227
X0JVRkY= 63228
INCy0YvQsQ== 63229
TWVyYw== 63230
anV2ZW4= 63231
IHNoaW0= 63232
0YvRhQ== 63233
IHRoZW9yZXRpY2FsbHk= 63234
L2ZvcnVt 63235
IHNwaWRlcnM= 63236
IGdvb3Nl 63237
IFBob3Rvbg== 63238
IHByb2ZpY2llbmN5 63239
IENsZXJr 63240
X2ZpZw== 63241
Q29uY2Vybg== 63242
KGNvc3Q= 63243
IHJlZGQ= 63244
LmVudmlyb25tZW50 63245
Q3JvcA== 63246
IOKJpQ== 63247
eWVjdG9z 63248
LkJhdGNoTm9ybQ== 63249
LWNvbXA= 63250
JGltYWdl 63251
IE5pa29u 63252
IGRtZw== 63253
Wzo6LQ== 63254
UExM 63255
dW5jaW9z 63256
Zm9jdXNlZA== 63257
IHR1bw== 63258
IGh2b3JkYW4= 63259
IGF0dGFpbmVk 63260
IHByb3RlY3Rvcg== 63261
IEthbnQ= 63262
IHNob3Jlcw== 63263
IEV0aGFu 63264
X3NjaG9vbA== 63265
IG5lYXRseQ== 63266
LlNoYXBlcw== 63267
IE5lbQ== 63268
aGNw 63269
LicvJy4k 63270
IE3DqXhpY28= 63271
c3RydWN0dXJpbmc= 63272
IGxha2g= 63273
IGFkcmVzc2U= 63274
JywnIw== 63275
IEhhc2tlbGw= 63276
X0VOR0lORQ== 63277
IHJlcGVudA== 63278
IGN1Y2s= 63279
LkZJRUxE 63280
IFNrZQ== 63281
QEBAQA== 63282
SGl0cw== 63283
IGltcGxhbnRz 63284
IENvbnN0aXR1dGlvbmFs 63285
IFBIUFVuaXQ= 63286
IHRvaWxldHM= 63287
LmFsYnVt 63288
5LiL6L29 63289
CXNldFN0YXRl 63290
KCItLS0tLS0tLS0tLS0tLS0t 63291
LkFtb3VudA== 63292
ZWN0dXJl 63293
IFRob3VzYW5kcw== 63294
TmVpdGhlcg== 63295
IHByZXNldHM= 63296
IEFzc3VtZQ== 63297
KGZhY3Rvcnk= 63298
IGxpY2s= 63299
IGdvYWxrZWVwZXI= 63300
PFN0YXRl 63301
LXNlY3VyaXR5 63302
X2ll 63303
ZXNrdG9w 63304
IEx2 63305
IFN5bXBob255 63306
LnNhbXBsZXM= 63307
IGh5cGVydGVuc2lvbg== 63308
xYJ1 63309
Lmp1c3Q= 63310
TWVuc2FqZQ== 63311
IT0t 63312
PFRLZXk= 63313
IHNweWluZw== 63314
LGRhdGU= 63315
b3JnYW5pemVk 63316
ICAgICAgICAgIA0K 63317
KGN1ZGE= 63318
X01ldGFkYXRh 63319
dWJpc2hp 63320
LUJlbno= 63321
X0Fzcw== 63322
IEVsc2VJZg== 63323
IGxlc2lvbnM= 63324
IFByZXN0b24= 63325
VGVjaG5pY2Fs 63326
IHBsYXRpbnVt 63327
L3Bp 63328
SW5kZXhlcw== 63329
IHBhcmFwaA== 63330
IG92ZXJ0aHJvdw== 63331
aXBhdGVk 63332
b250b2xvZ3k= 63333
IGRlbW9ncmFwaGljcw== 63334
IGNhbmU= 63335
IHByb2ZpdGFiaWxpdHk= 63336
IGVzdGFibGlzaG1lbnRz 63337
XSY= 63338
OmFic29sdXRl 63339
ZW50cmFkYQ== 63340
VHA= 63341
IHNoYXJlaG9sZGVy 63342
Lidf 63343
5aaC5p6c 63344
bnBq 63345
dnJpcg== 63346
IEVYRUM= 63347
IFBvbGljaWVz 63348
IGZlbGxvd3NoaXA= 63349
IENHUmVjdEdldA== 63350
X3JlY2lwZQ== 63351
X1JFQw== 63352
dW51 63353
IHJvYmJlZA== 63354
IHR1cm1vaWw= 63355
KTo6 63356
LnN0YXJ0RGF0ZQ== 63357
IGV2YWN1YXRlZA== 63358
LWVxdQ== 63359
IGZvdXJ0ZWVu 63360
QFNwcmluZ0Jvb3RBcHBsaWNhdGlvbg== 63361
IOaVsOaNrg== 63362
bmFudHM= 63363
dGhyZW4= 63364
U29ueQ== 63365
REZT 63366
LWNpZ2FyZXQ= 63367
IGFnZ3JhdmF0ZWQ= 63368
IG5lZGVybGFuZA== 63369
IEZ1ag== 63370
dWNlcw== 63371
L3VzZQ== 63372
dW1tZXI= 63373
KFNURA== 63374
6rCE 63375
Kj4m 63376
LnBlcmNlbnQ= 63377
aWFudHM= 63378
IEN0 63379
VkFT 63380
X1RIRU1F 63381
IHNuaXBlcg== 63382
X0VM 63383
LXdvcmtlcnM= 63384
U25vdw== 63385
IEF1cmE= 63386
aWVnbw== 63387
IEdsb2I= 63388
TmFtZWRRdWVyeQ== 63389
X0JH 63390
IExpdmVEYXRh 63391
IFNlbmRNZXNzYWdl 63392
IHJlc3BvbmRzVG9TZWxlY3Rvcg== 63393
ZW5jZXJz 63394
aW5zdHJ1Y3Rpb25z 63395
KEl0 63396
5ZG95ZGo5pyf 63397
IEdvbWV6 63398
Y2hhcmdlcw== 63399
LkdlbmVyYXRlZFZhbHVl 63400
IE1hY3Jvbg== 63401
KFBPUlQ= 63402
IFByb2Nlc3Nlcw== 63403
Lm9uUmVzdW1l 63404
IGZpZQ== 63405
QnVpbGRlcnM= 63406
KWdldA== 63407
X3dhbGxldA== 63408
IGNhbmM= 63409
IE1vYmlsaXR5 63410
IGFsYXJtcw== 63411
cm9zaXM= 63412
YW1hw7Fv 63413
IHBpcw== 63414
IOODuw== 63415
U2hh 63416
IGNvbmZlc3NlZA== 63417
KElORk8= 63418
KCcsJw== 63419
X1NlcnZlcg== 63420
IGJsYXN0ZWQ= 63421
IEZhcm1lcnM= 63422
cnV6 63423
Y2tlZGl0b3I= 63424
X0lNUExFTUVOVA== 63425
IG1vdHRv 63426
IENBUkU= 63427
IHlkaw== 63428
Qm9uZQ== 63429
IGFkZW3DoXM= 63430
KyIvIis= 63431
UHJvcFR5cGVz 63432
X1Na 63433
LnBhaW50 63434
LnBpeGVs 63435
IE1lc3NhZ2VUeXBl 63436
IHR3ZWFrcw== 63437
YC4KCg== 63438
VmVyaWZpY2F0aW9u 63439
bmVjaw== 63440
YmVycmE= 63441
IG1pbmRmdWw= 63442
U3Vydg== 63443
IDotCg== 63444
IGFueXdheXM= 63445
IEFkbWlzc2lvbg== 63446
YWNjZXNzaWJsZQ== 63447
RmxhdEJ1dHRvbg== 63448
ICInIik7Cg== 63449
IGhhaGE= 63450
VG9Qb2ludA== 63451
IGJ1cmdlcnM= 63452
Z2V0U3RhdGU= 63453
XEhlbHBlcg== 63454
IEZVTkNU 63455
IEVMRU1FTlQ= 63456
IENFUlQ= 63457
IEFDQ09VTlQ= 63458
Y2hhcmdpbmc= 63459
X2NhbmRpZGF0ZQ== 63460
X3JlY2VudA== 63461
IEluc3RydWN0b3I= 63462
IGRydW5rZW4= 63463
WVNRTA== 63464
b3JhdGl2ZQ== 63465
IjoiIg== 63466
IHRhZ05hbWU= 63467
X05FRw== 63468
IHFw 63469
IFVuZGVmaW5lZA== 63470
IGdyZWFzZQ== 63471
CSAgCQ== 63472
IGVhZ2VybHk= 63473
VGV4UGFyYW1ldGVyaQ== 63474
ZGlzdHJpYnV0ZWQ= 63475
QWRtaW5pc3RyYXRvcg== 63476
RGlzdHJpYnV0aW9u 63477
IERlY29tcA== 63478
IFRyYW5zZm9ybWVy 63479
LmJ0blNhdmU= 63480
IEdvcw== 63481
KEVudW0= 63482
Y2Fpcm8= 63483
LWNp 63484
L3JlcG9ydA== 63485
IFBvc3Rlcg== 63486
X2RlcGVuZGVuY3k= 63487
IGV4cGxvaXRz 63488
c2V0Rmxhc2g= 63489
IHh0 63490
IGpld2VsbGVyeQ== 63491
IGRhaQ== 63492
X1JBTQ== 63493
IGJlcnJpZXM= 63494
IGdyYW5ueQ== 63495
RmF0YWw= 63496
w6lhbA== 63497
LW1vc3Q= 63498
LlZpc3VhbEJhc2lj 63499
IFBlbmQ= 63500
YmVp 63501
amFr 63502
OyovCg== 63503
Qm95 63504
PlNlbGVjdA== 63505
aW5kcmljYWw= 63506
VGVjaG5vbG9neQ== 63507
IEFsbGlzb24= 63508
ZGF0YXR5cGU= 63509
J2Nsb2Nr 63510
IGtvc3Q= 63511
IGJham8= 63512
LkNvdW50cnk= 63513
WmVuZA== 63514
LndyYXBwZXI= 63515
4L0= 63516
IEZpbGlwaW5v 63517
b2NyZQ== 63518
U1NI 63519
IFNBTVBMRQ== 63520
X2luaXRpYWxpemVk 63521
KTs/Pgo= 63522
IHBvcm5vc3Q= 63523
ZXNhbg== 63524
IEN1dHRpbmc= 63525
IG1peGVz 63526
X2FnYWlu 63527
IGZvcm11bGFyaW8= 63528
W1Y= 63529
IHRlbGVmb25v 63530
L3Vz 63531
IGxvYWREYXRh 63532
LnJlZmVyZW5jZXM= 63533
IG1hcFZpZXc= 63534
KyJf 63535
IFNRTGl0ZURhdGFiYXNl 63536
aXRvbg== 63537
Q29sdW1uVHlwZQ== 63538
IEV2ZXJ0b24= 63539
LlJlc3VsdHM= 63540
L25vdA== 63541
IGdldEZpbGU= 63542
aGVyaXRhbmNl 63543
IGdldEhlaWdodA== 63544
JHVzZXJuYW1l 63545
d2l0aGRyYXc= 63546
Xyk7DQo= 63547
LnV0 63548
IFFBcHBsaWNhdGlvbg== 63549
dXJuYWw= 63550
LWRvd25sb2Fk 63551
YnVyZ2Vy 63552
cHJlY2k= 63553
IFRoYW5rZnVsbHk= 63554
LkVWRU5U 63555
IGdyZWF0bmVzcw== 63556
IGxvb3NlbHk= 63557
IG1hc2g= 63558
IGdlaGVu 63559
X2FudA== 63560
IGltcGVuZGluZw== 63561
LmlzUHJlc2VudA== 63562
IHN0YWlucw== 63563
SU1T 63564
LmJhY2tlbmRz 63565
IGlycmlnYXRpb24= 63566
IFRhdA== 63567
L3Rlc3Rz 63568
IEtpbmdzdG9u 63569
LnRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRz 63570
IHZvbWl0aW5n 63571
LXJlcXVpcmVk 63572
IGJsYXpl 63573
IFN0YWZmb3Jk 63574
UklE 63575
L2Z3bGluaw== 63576
IGthbGU= 63577
c29sZA== 63578
KHByb2dyZXNz 63579
KGNoYXJ0 63580
IGN5c3Q= 63581
IGRpbGlnZW5jZQ== 63582
L21w 63583
IGNsZXJneQ== 63584
IEJyb3dzZXJSb3V0ZXI= 63585
IEFQSw== 63586
IENPTlRBQ1Q= 63587
QmFySXRlbQ== 63588
LURpc3Bvc2l0aW9u 63589
IE1vdG9yb2xh 63590
X3NhbA== 63591
IFdvb2Rlbg== 63592
IFRIRVk= 63593
IGNvbW1lbnRhdG9ycw== 63594
IGNvbW1lcmNpYWxz 63595
PW1vZGVs 63596
LiIpLAo= 63597
IFBsdWdpbnM= 63598
ZGFpbg== 63599
aGVhZGVk 63600
IENvb3JkaW5hdGVz 63601
SmFuZQ== 63602
IFByZWZlcnJlZA== 63603
IHBvZGVtb3M= 63604
LmlzQmxhbms= 63605
IFN0YXA= 63606
IHdzcA== 63607
IENPTEw= 63608
X2JpZA== 63609
IHByb2Jlcw== 63610
dWFuaWE= 63611
KHN5bQ== 63612
IGN1ZXJwbw== 63613
IG1hbmlwdWxhdGluZw== 63614
IGFtYXppbmdseQ== 63615
LkRBWQ== 63616
dW1wdGVjaA== 63617
YWNvYmlhbg== 63618
VGVybWluYXRl 63619
IHN0YXRpb25lZA== 63620
U2V0QnJhbmNo 63621
U2NyZWVuc2hvdA== 63622
ZXN0aGVzaWE= 63623
IHdhbGtlcg== 63624
I2Zyb20= 63625
Y29vcmRpbmF0ZQ== 63626
X2ludGVyZXN0 63627
IGhlbHBsZXNz 63628
CXB1Yg== 63629
bmdh 63630
X0V4 63631
IG53 63632
IHRleHR1YWw= 63633
IHBsdWdz 63634
IG1pbmlvbg== 63635
bWFyZXM= 63636
PD4K 63637
QUNB 63638
Q29tcGFueU5hbWU= 63639
KGVj 63640
IExhbmRzY2FwZQ== 63641
X1BST1ZJREVS 63642
Y3c= 63643
lIQ= 63644
QWNjb3VudElk 63645
JDo= 63646
IFBlcnNvbmFsbHk= 63647
cHJvcGVydHlOYW1l 63648
IEt1Yg== 63649
J2k= 63650
IEdpdWw= 63651
IHByaW9yaXRpemU= 63652
Rk9STUFOQ0U= 63653
IFBhcmFkZQ== 63654
KVwK 63655
c3RkYm9vbA== 63656
IGFsZXJ0RGlhbG9n 63657
IExlaA== 63658
LmNhdGFsb2c= 63659
IHdlYmluYXI= 63660
IGltcG9ydGVy 63661
cHJvamVjdElk 63662
VFlQTw== 63663
X18NCg== 63664
R1c= 63665
c3VtbWVy 63666
IHNpbmlzdGVy 63667
LmZhaWxlZA== 63668
IGJlc29pbg== 63669
aXNtYW4= 63670
REVTVA== 63671
IG5o4bqtcA== 63672
IG1vxbxuYQ== 63673
X2luc3Ry 63674
IHBhdmVk 63675
IHByZWZpeGVz 63676
IHJhbXBhbnQ= 63677
IHlBeGlz 63678
IOazqA== 63679
X21pZGRsZQ== 63680
IHNjaG9sYXJseQ== 63681
IHByb3N0aXR1dGVz 63682
IG1vcmFsZQ== 63683
LnBlcm1pc3Npb25z 63684
LmdldExpc3Q= 63685
IHJlamVjdGluZw== 63686
IGxvb3Bpbmc= 63687
IFNwZWNpZmljYXRpb25z 63688
IGltbWVuc2VseQ== 63689
IE1lZGlhbg== 63690
KGNoYWlu 63691
IGNsaWNo 63692
L2ZsdXR0ZXI= 63693
YWNm 63694
LnVybG9wZW4= 63695
dXR0ZXJzdG9jaw== 63696
IHNwZWN0cmE= 63697
IGFkbWly 63698
L21heA== 63699
LkVtaXQ= 63700
KHdlaWdodHM= 63701
acSZ 63702
SW5zdGFsbGluZw== 63703
SnU= 63704
IEZlbGw= 63705
IEZSRQ== 63706
LmRlbg== 63707
IEJpZ0ludA== 63708
Ij5A 63709
ICopOwoK 63710
IEJpb2xvZ2ljYWw= 63711
IHBhdGVudGVk 63712
LnBhZ2luYXRpb24= 63713
LnJvbGw= 63714
IER1bA== 63715
IGRlc2Fycm9sbG8= 63716
UmVnYXJkbGVzcw== 63717
mOydtA== 63718
IHJvYmU= 63719
0J3QtQ== 63720
IEJveWQ= 63721
LyoqKioqKioqKioqKioqKioqKioqKioqKg== 63722
cmVjZWlwdA== 63723
IEFzc2lnbmVk 63724
YXR0ZW5kYW5jZQ== 63725
LWNob2ljZQ== 63726
ZXRzeQ== 63727
X2Vsc2U= 63728
LG5leHQ= 63729
X2V4aXN0aW5n 63730
ICcnKSwK 63731
IGxpYmVydGlu 63732
dHJhaXRz 63733
YXR0ZQ== 63734
Q29tcGFyYWJsZQ== 63735
IENvdg== 63736
IEFkb2xlcw== 63737
LHRoZQ== 63738
IExvYWRlZA== 63739
fHI= 63740
PWluZGV4 63741
IEdhc3Q= 63742
IGluamVjdG9y 63743
CXN0b3A= 63744
LWdvb2dsZQ== 63745
IGZldGFs 63746
IGFsbG8= 63747
eWxlZnQ= 63748
Z2V0UGFyYW1ldGVy 63749
4oCd4oCU 63750
X3NlY3Rvcg== 63751
LlV0aWxpdHk= 63752
b3Njb3Bl 63753
LmVhc2U= 63754
IE1hZ25ldGlj 63755
QXJyYXlPZg== 63756
IGZlYXJmdWw= 63757
IEluZmVy 63758
IEZ1aw== 63759
Sm9obnNvbg== 63760
JGFycmF5 63761
IHNhaXM= 63762
X2NvbnRy 63763
RGVzY3Jp 63764
IERldGFpbGVk 63765
X2xlYXZl 63766
X1JPVA== 63767
IG7DpGNo 63768
IGthbWk= 63769
RENBTEw= 63770
OmVx 63771
IG1vbms= 63772
X29ianM= 63773
KFNlcnZpY2U= 63774
ZmluYW5jZQ== 63775
IHBvZGVt 63776
X3Jlc3RvcmU= 63777
IGRlY29yYXRvcnM= 63778
IGFkdmlzaW5n 63779
INC/0LDRgA== 63780
LnBlcm0= 63781
IEhhaQ== 63782
IGZr 63783
dW50ZWVycw== 63784
IFJUV0Y= 63785
X2l4 63786
QUNT 63787
IGJyZWFrb3V0 63788
ZGlyZWNjaW9u 63789
IFN1bnNldA== 63790
X2Z4 63791
b2xrYXRh 63792
LXJhZGlv 63793
SGV0 63794
LnV0aWxpdGllcw== 63795
X2Jhc2lz 63796
KGtpbmQ= 63797
IENvbmM= 63798
VGh1bWI= 63799
IE1pY2hl 63800
ZGVsaXZy 63801
IGd1dGU= 63802
IEZpbGVQYXRo 63803
IFRyaWJl 63804
XCIp 63805
X2N1ZGE= 63806
RGlmZmVyZW5jZQ== 63807
IE1vbnN0ZXJz 63808
IHNldFR5cGU= 63809
LkNvbnRlbnRUeXBl 63810
IGR1bQ== 63811
RW52ZWxvcGU= 63812
YWd0 63813
IHVubG9hZA== 63814
X2NoZWNrZXI= 63815
IHJlc3Rv 63816
X3Blb3BsZQ== 63817
UHJpY2Vz 63818
UHJvZmlsZXM= 63819
KClc 63820
RlVO 63821
ICIjIg== 63822
IFBhdHRlcm5z 63823
IFNQRA== 63824
X1JPV1M= 63825
T3JpZw== 63826
YmxhZGU= 63827
IGzDqQ== 63828
JWk= 63829
Kysr 63830
TGlmZWN5Y2xl 63831
LS0tLS0tLS0tLS0tLS0tCg== 63832
VGFy 63833
VGhhbk9y 63834
JnE= 63835
IGNyaXRpY2lzbXM= 63836
LXBo 63837
RWxlbWVudEV4Y2VwdGlvbg== 63838
X2d1ZXN0 63839
IOu2 63840
X0Fz 63841
IENhcnJ5 63842
X0JJRw== 63843
YWtldXA= 63844
X3JldHJ5 63845
IG7DqWNlc3M= 63846
IE1JU1M= 63847
aXN1 63848
IFNwaXJpdHVhbA== 63849
XyRf 63850
IHJlZmxlY3Rpb25z 63851
PHQ= 63852
IGZ1bsOnw6Nv 63853
IG1vbmFyY2g= 63854
IFBhdGVs 63855
X3ZvbHRhZ2U= 63856
IHJhaW55 63857
Y291cnQ= 63858
IHVsdHJhc291bmQ= 63859
aU9T 63860
X0FMV0FZUw== 63861
V28= 63862
X0JMRU5E 63863
b2tzZW4= 63864
IHRyYXZlbGVy 63865
IGRhdGFUYWJsZQ== 63866
c2V0Q3VycmVudA== 63867
V29ya2Zsb3c= 63868
LnllbGxvdw== 63869
XSkt 63870
QUJTUEFUSA== 63871
X2l0ZXJhdGlvbg== 63872
0LTRgA== 63873
IHViaWM= 63874
IG1lYXRz 63875
L2Vt 63876
IERpc29yZGVy 63877
IGVudmlhcg== 63878
U0VP 63879
IGhlYXZlbnM= 63880
X3N0dWI= 63881
IGFkcmVzcw== 63882
IFRyaWU= 63883
IExpbmRzYXk= 63884
bGVp 63885
IHBsYXRh 63886
LnNldHRpbmc= 63887
IGVsZWs= 63888
ICgkew== 63889
QXV0b21hdGlj 63890
IGRvd25zdGFpcnM= 63891
UElY 63892
aWNpb25hbA== 63893
YWJhbA== 63894
LXN0b3JhZ2U= 63895
aWNoaWVy 63896
IEFscGhhYmV0 63897
LGxhYmVs 63898
QAo= 63899
IGludGVzdGluYWw= 63900
IHZhcmE= 63901
Lm1h 63902
IHByb2du 63903
IG5lcGhldw== 63904
VGltaW5n 63905
Y2xhc3NuYW1l 63906
IGxvY29t 63907
IFNhbWFudGhh 63908
IEFjY29yZGluZ2x5 63909
IFhDVGVzdENhc2U= 63910
IFBsYWlucw== 63911
IExlbmlu 63912
bm9w 63913
IFR5c29u 63914
IHJlbmFs 63915
b2luZQ== 63916
KFRlc3RDYXNl 63917
IExvbWI= 63918
QmFuZw== 63919
IHZvbHVt 63920
X2dlbmRlcg== 63921
IGx1dA== 63922
IO+8 63923
Q29uZmlndXJlcg== 63924
IHN0cm9rZVdpZHRo 63925
Lkh0dHBTZXJ2bGV0 63926
fHg= 63927
LkpTY3JvbGxQYW5l 63928
IGNvbnNvcnQ= 63929
LmJ1bXB0ZWNo 63930
dHJpZGdlcw== 63931
IGJlbmVmaWNpYXJ5 63932
PXJlcXVpcmU= 63933
cmVuYw== 63934
IE9V 63935
ZW50YXJpbw== 63936
IHVyZ2Vz 63937
4oCUbm90 63938
Q2FtcGFpZ24= 63939
ZHJl 63940
IFJpdmVyc2lkZQ== 63941
CXRi 63942
IG91dHB1dEZpbGU= 63943
IGFic3Q= 63944
IHN0cnVjdHM= 63945
IHJ2YWw= 63946
XCI+Ig== 63947
IGFjcXVpc2l0aW9ucw== 63948
QkxBQ0s= 63949
IHRydW5j 63950
IGFubm90YXRlZA== 63951
c2V0VXA= 63952
VE9LRU4= 63953
IENvY2E= 63954
RGlzYXBwZWFy 63955
OnZhbHVl 63956
IGFpZGVk 63957
dHRs 63958
bHV4 63959
IGFjdWVyZG8= 63960
IEZpbmdlcg== 63961
Lkdlb21ldHJ5 63962
XScpOwo= 63963
Lmdm 63964
VFhU 63965
IFNjb3RpYQ== 63966
YXZyYQ== 63967
IHZpcA== 63968
IHdob3BwaW5n 63969
LWdpcmw= 63970
IGN1cnNlZA== 63971
XVst 63972
IGNpcmN1bGF0ZWQ= 63973
dW5jdHVyZQ== 63974
b3JtYW4= 63975
IG1BZGFwdGVy 63976
IOKAlAoK 63977
RmlsZU1hbmFnZXI= 63978
KGlQYXJhbQ== 63979
SW1hZ2VCdXR0b24= 63980
REFR 63981
QXJtb3I= 63982
IHNwYXQ= 63983
LmpzZGVsaXZy 63984
IG1pc29n 63985
LmVjb3Jl 63986
J119Cg== 63987
aW1wb3J0cw== 63988
IGRpbm9zYXVy 63989
LUZyZWU= 63990
IGFubm9u 63991
IHRyaWJ1bmFs 63992
WWE= 63993
Lmd1aWQ= 63994
bW9zdGx5 63995
PT09PQo= 63996
IGltYWdlbQ== 63997
U3VpdA== 63998
a2Fz 63999
IENoYW5uZWxz 64000
QnVkZ2V0 64001
IERpdmlkZQ== 64002
amVt 64003
IEdyaQ== 64004
IGluZGljYXRpdmU= 64005
XEZhY3Rvcnk= 64006
LnJlcG9zaXRvcmllcw== 64007
IEFNUA== 64008
LnNucA== 64009
IGHDpw== 64010
Ims= 64011
IMK1 64012
ZGVjb2RlZA== 64013
X2FyYw== 64014
LUNsYXVzZQ== 64015
IEFkag== 64016
IG5ld0FycmF5 64017
KEdFVA== 64018
IGxhdGlu 64019
IHd6 64020
OnVpbnQ= 64021
5Yir 64022
Ii4u 64023
Q29ubmVjdGluZw== 64024
ZW5ub24= 64025
5bm2 64026
IFNlcw== 64027
IGJlbG9uZ2luZ3M= 64028
Kycm 64029
CXNldHRpbmdz 64030
SU5W 64031
IHDDqQ== 64032
IGFkdWx0aG9vZA== 64033
YW1ibGU= 64034
X21hc2tz 64035
LXJlc29sdXRpb24= 64036
cmF0cw== 64037
IO2BtA== 64038
IHZvZw== 64039
IFNobw== 64040
IENvdmVuYW50 64041
IHJlbWluZGluZw== 64042
b3JuYWRv 64043
aWFk 64044
5byC 64045
Q3JlYXRpdmU= 64046
IFNUWUxF 64047
IGFub21hbHk= 64048
XEFwcGxpY2F0aW9u 64049
IG1hbmlmZXN0YXRpb24= 64050
IE5hbm8= 64051
TWFwVmlldw== 64052
aWRlYWw= 64053
YWNoaW5lcnk= 64054
IFZhdWdo 64055
cHJpbnRlcg== 64056
VmVyZGFuYQ== 64057
L2NvbXBvbmVudA== 64058
IGFkZENoaWxk 64059
IGxlYXJuZXI= 64060
IGRlY3J5cHRlZA== 64061
IHRpZ2h0ZXI= 64062
5p2f 64063
IGplag== 64064
IC4KCgoK 64065
IExvYmJ5 64066
bGVw 64067
w6Rubg== 64068
bGVpZ2g= 64069
L3JvdXRlcw== 64070
IGNhbm9weQ== 64071
IEZpc2NhbA== 64072
Ojsi 64073
IGJ1cmRlbnM= 64074
L2Z1bGw= 64075
IENTUg== 64076
LlNoYXJlZFByZWZlcmVuY2Vz 64077
L3RyZWU= 64078
IGRyb2l0 64079
SW1wbGVtZW50 64080
R2V0Q3VycmVudA== 64081
KHB1c2g= 64082
JHg= 64083
0Y/Qtw== 64084
QUNJVFk= 64085
PT09PT09PT09PQo= 64086
amM= 64087
X2hyZWY= 64088
LmdldFJvb3Q= 64089
IEtE 64090
KGxz 64091
W2NudA== 64092
IGRhbGw= 64093
KGJw 64094
IEVX 64095
S2V5RXZlbnQ= 64096
bG9iZQ== 64097
IGh0bWxlbnRpdGllcw== 64098
IGZhbHRh 64099
IHZhbHZlcw== 64100
IHNpemluZw== 64101
UG9ybg== 64102
IHNob3dFcnJvcg== 64103
IEZyaWQ= 64104
IMOH 64105
LnJhbmRu 64106
IHRhbnRy 64107
IHNheA== 64108
dXJvdmlzaW9u 64109
dGhlb24= 64110
X1JDQw== 64111
eEZE 64112
SW5pdFN0cnVjdA== 64113
IGNhbm5lZA== 64114
IHF1YW50aWRhZGU= 64115
LldBUk5JTkc= 64116
IEJyaXR0 64117
LXJlZ2lzdGVy 64118
YWN0aXZlbHk= 64119
IE5hdGFsaWU= 64120
44G/ 64121
IENPTk5FQ1Q= 64122
emVr 64123
IG1pbGxvbmVz 64124
XWludA== 64125
ICcsJyw= 64126
IHByaW4= 64127
IjpbLQ== 64128
IC8vLg== 64129
IGludGltaWRhdGluZw== 64130
cmF6aW9uZQ== 64131
LmlibQ== 64132
IEpha2FydGE= 64133
0LzQtdGA 64134
IGxvYWRDaGlsZHJlbg== 64135
X1VQTE9BRA== 64136
IFdlZWtz 64137
IGdldFRleHQ= 64138
IPCfkg== 64139
IF1dCg== 64140
IENvc3Rz 64141
xJlw 64142
cGF5bWVudHM= 64143
Lk1vdmll 64144
bGg= 64145
tIg= 64146
X2NlcnRpZmljYXRl 64147
PXE= 64148
bGlicmFyaWVz 64149
IEFlcg== 64150
YXVzcw== 64151
CWZhaWw= 64152
T1VORFM= 64153
c2VuZEtleXM= 64154
IHNjYW1z 64155
d2FydHM= 64156
SGlzdA== 64157
IEVzc2V4 64158
IGZ1cnk= 64159
IHRpdHJl 64160
IENvcGVuaGFnZW4= 64161
IHByZWRlZmluZWQ= 64162
c2Nw 64163
c2VycmF0 64164
LmVuc3VyZQ== 64165
aWxlZQ== 64166
TWVyaXQ= 64167
X1VOTE9DSw== 64168
IENvcnJlY3Rpb24= 64169
Tm9ybWFsaXphdGlvbg== 64170
IOS/ruaUuQ== 64171
IHN0b29s 64172
IOWIoOmZpA== 64173
U2hvcnRjdXQ= 64174
Y2hvc2Vu 64175
IGJ1bGx5 64176
IGZ1bmNpw7Nu 64177
44O844Or 64178
IOeUn+WRveWRqOacnw== 64179
LmFsaWFz 64180
PlRvdGFs 64181
IFNURU0= 64182
cGVuZw== 64183
Y2FsZXI= 64184
cGVyZmVjdA== 64185
IGJvbmRpbmc= 64186
UGhvbmVz 64187
IHB1bHA= 64188
67aA 64189
SUVXUw== 64190
IERlZXI= 64191
X0xDRA== 64192
IENvbmNvcmQ= 64193
V2l6YXJk 64194
IG9mcmVj 64195
IEVtZXJhbGQ= 64196
dGVuZXNz 64197
bmF2aWdhdG9y 64198
VGhlb3J5 64199
IGd1YXJkYXI= 64200
IGZ1bGZpbA== 64201
IFVuYXV0aG9yaXplZA== 64202
IEJvdXQ= 64203
CWhvc3Q= 64204
IFJpYg== 64205
KGZ0 64206
RG9jcw== 64207
LmdldEJvZHk= 64208
5b+D 64209
IFJpdmVyYQ== 64210
IHdhdmluZw== 64211
IHBlcmZpbA== 64212
Qm91bmRpbmdDbGllbnRSZWN0 64213
LmZh 64214
cGFnZWQ= 64215
IEFmZmlsaWF0ZQ== 64216
IHByb2xldA== 64217
fS0+ew== 64218
KHNjb3Jlcw== 64219
IHZpdGFl 64220
e05hbWU= 64221
c2NoZWR1bGVy 64222
X1NBTg== 64223
IE5lYw== 64224
IEJlZWY= 64225
X3Rj 64226
TElO 64227
IEV2ZW50VHlwZQ== 64228
IEJ1ZmZlcmVkV3JpdGVy 64229
IHNvZnRlcg== 64230
IFZvdGluZw== 64231
IEdlc3R1cmVEZXRlY3Rvcg== 64232
IHVuc2Vlbg== 64233
IFNDTw== 64234
IGVsbw== 64235
Y29tYmluZQ== 64236
X21ha2VDb25zdHJhaW50cw== 64237
IHVuZGVyZ29uZQ== 64238
IE9mZmljaWFscw== 64239
LG9wdA== 64240
IGxheWVyZWQ= 64241
ScOTTg== 64242
IGJhbmtlcnM= 64243
IHNlZ3JlZ2F0aW9u 64244
IHJ1c3NpYW4= 64245
IHZlbnRhbmE= 64246
Z2V0S2V5 64247
U2FudGE= 64248
LlRvb2xTdHJpcFNlcGFyYXRvcg== 64249
IEFlcm9z 64250
LnB1dEludA== 64251
IGluZm9ybXM= 64252
X2JpbGw= 64253
66aE 64254
LnNldE1heA== 64255
IH0+Cg== 64256
IElQUw== 64257
IEFsaWM= 64258
In0KCg== 64259
IHVzaGVy 64260
IE5ndXllbg== 64261
IGFic29sdXQ= 64262
IGd1YXJkZWQ= 64263
IFJlYmVs 64264
IFp3 64265
IEFubnVuY2k= 64266
IHByw6E= 64267
YWJjZGVmZ2hpamts 64268
IFZlcmlmaWVk 64269
W2l4 64270
IHRpZXJz 64271
w6J0 64272
LiIpDQo= 64273
aWp1 64274
bGl2aW5n 64275
R1BT 64276
LlRlc3RUb29scw== 64277
U2l6ZVBvbGljeQ== 64278
IG1hc3NhZ2Vz 64279
YXNzZXJ0SW5zdGFuY2VPZg== 64280
IHBvc3PDrXZlbA== 64281
IGJ1c2M= 64282
IEp1ZGFpc20= 64283
IGluZGlzcGVuc2FibGU= 64284
IE1vc3RseQ== 64285
SVRB 64286
IGdldENvbnRlbnQ= 64287
QnJvd3NlclJvdXRlcg== 64288
LWNvdW50ZXI= 64289
IG9idGVu 64290
IC8+KTsK 64291
0LjQuw== 64292
aGVhZGxpbmU= 64293
KGhvbWU= 64294
YWxpY2U= 64295
bGRyZQ== 64296
X01vZHVsZQ== 64297
Q29tcGFuaWVz 64298
TlBD 64299
IHRvcnNv 64300
LmNvbnM= 64301
CWFkZHJlc3M= 64302
X3B1cmNoYXNl 64303
IEJhcmQ= 64304
Z3N0 64305
LWFuaW1hdGlvbg== 64306
X3BhaWQ= 64307
LnNwZWNpYWw= 64308
IGRlbGlt 64309
IHRha2VvdmVy 64310
KGhhbmQ= 64311
ZW51aW5l 64312
LWdyZXk= 64313
IEFCSQ== 64314
U2Vzc2lvbkZhY3Rvcnk= 64315
aW5zdGFsbGVy 64316
X0RJU1RBTkNF 64317
IEZhdm9yaXRlcw== 64318
oIA= 64319
Jz57 64320
IExhdXJlbnQ= 64321
0YfQtdGC 64322
IHN0cmlwc2xhc2hlcw== 64323
IGVzdGFiYQ== 64324
JnQ= 64325
LnBhbg== 64326
IFBBUlRZ 64327
IEJhbGk= 64328
Y3Np 64329
KG1lbW9yeQ== 64330
IFRvZG9z 64331
IFNPQVA= 64332
YWduZXQ= 64333
CWJlZm9yZQ== 64334
T3B0aW9uc1Jlc29sdmVy 64335
aWJlbg== 64336
INmF2YY= 64337
IGFkZGl0aXZl 64338
IE1lbGVl 64339
IE1hbml0b2Jh 64340
IFBlcmNlbnRhZ2U= 64341
PSgt 64342
LmtpbGw= 64343
IGx4 64344
YW5jYQ== 64345
IGZvdG9ncmFm 64346
IGJsYW5j 64347
IFJlc2lkZW50cw== 64348
cGluaw== 64349
SEJveExheW91dA== 64350
LnVuaW9u 64351
IEhZ 64352
IGNvbnRlbnRWaWV3 64353
LWZhdA== 64354
CWhhcw== 64355
66OM 64356
IHdoaXBwZWQ= 64357
dmVuZG9ycw== 64358
dWJyZQ== 64359
SVRIRVI= 64360
LmZ1bmN0aW9uYWw= 64361
INCy0LXRgA== 64362
Q2FuY2VsZWQ= 64363
LWNu 64364
SW5PdXQ= 64365
LlJvd1N0eWxlcw== 64366
IHRyYXRh 64367
IEluZG9vcg== 64368
LWZhc2hpb25lZA== 64369
IEJvb3Ro 64370
LkxhYmVsQ29udHJvbA== 64371
IHBvcGU= 64372
IENhcm5lZ2ll 64373
bmVyZ2ll 64374
IEJY 64375
44CCIiwK 64376
IFdlYnN0ZXI= 64377
CWRpdg== 64378
TmFycg== 64379
IGNvbmp1Zw== 64380
a2lk 64381
IG1vZGVyYXRpb24= 64382
IGFteQ== 64383
IFNvbHZl 64384
VklD 64385
IEVa 64386
aWxsYWM= 64387
IENpcGhlcg== 64388
IEFjY2VwdGVk 64389
TEFCRUw= 64390
IHdyYXRo 64391
IG1pblZhbHVl 64392
IGthxbw= 64393
IERhdWdodGVy 64394
KS5e 64395
KGRj 64396
IHJlc29sdmVz 64397
c2Nzcw== 64398
YWJvdXRz 64399
dWx0aXBhcnRGaWxl 64400
IGZlYXRz 64401
IGxhdW5kZXJpbmc= 64402
IGNvbXBhw7E= 64403
IHNlZ3VyaWRhZA== 64404
IGhvYmJpZXM= 64405
LWZhY2luZw== 64406
InZhbHVl 64407
Z2V0SW1hZ2U= 64408
U3FsU2VydmVy 64409
IHdpdGhTdHlsZXM= 64410
PkRhdGU= 64411
IEV4cGVk 64412
JGpzb24= 64413
6ZO+ 64414
IEFDVElPTlM= 64415
U2Vuc2l0aXZl 64416
Ymxhc3Q= 64417
IMO2ZmY= 64418
ZnRl 64419
Q1RTVFI= 64420
IExvZ0xldmVs 64421
Y29udHJhY3Rz 64422
LmRqYW5n 64423
Ij4NDQo= 64424
RVRZUEU= 64425
IG9iamM= 64426
X1NPVU5E 64427
X3NwYWNpbmc= 64428
X2NsYXNzaWZpZXI= 64429
IHJvYw== 64430
Q2xhc3NpYw== 64431
IOuztA== 64432
X2ludmVyc2U= 64433
LWFjcmU= 64434
IEZJTA== 64435
IERWRHM= 64436
IHN3YWxsb3dlZA== 64437
dmlsbGE= 64438
IFJlcGxpZXM= 64439
RmlyZWJhc2U= 64440
IHBoeXNpcXVl 64441
CXRoYXQ= 64442
IFJlc2l6ZQ== 64443
Pj4+Pj4+Pg== 64444
TmVhcmx5 64445
LmFydGlzdA== 64446
LXs= 64447
Pz4NCg0K 64448
Lmxy 64449
Lmly 64450
KFsk 64451
aWFubmU= 64452
CW9i 64453
LCcl 64454
IGtuZXg= 64455
IGNvcnJv 64456
IE93ZW5z 64457
PW5pbA== 64458
bGF5cw== 64459
YXBn 64460
w5Y= 64461
RU5P 64462
SGVucnk= 64463
SnVzdGlu 64464
ZWxlY3RyaWM= 64465
IE5vcmRpYw== 64466
5oyH 64467
IGV4Y2x1ZGVz 64468
RXVyb3BlYW4= 64469
IHRlbnRz 64470
KFN0cmluZ1V0aWxz 64471
KHBlZXI= 64472
eXN0b3Jl 64473
UG9ja2V0 64474
ZnVlbA== 64475
ZXR1cw== 64476
IE1hcmlu 64477
0YDRg9C6 64478
6K+E 64479
IFBlbnM= 64480
IGluZWZmaWNpZW50 64481
IGV0ZXJuaXR5 64482
Licm 64483
IFBhY2thZ2Vz 64484
IEFwcENvbmZpZw== 64485
IG11bHRpZA== 64486
Y3Vsbw== 64487
IGJvcnJvd2Vycw== 64488
IERlYmJpZQ== 64489
IGZyb250cw== 64490
Sko= 64491
ICIuLi8uLi8uLi8uLi8= 64492
ICIrCg== 64493
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 64494
IEdhdmlu 64495
IG1pc2g= 64496
4pWR 64497
X0FUVEFDSw== 64498
SW5kZXBlbmQ= 64499
4K+N4K4= 64500
w6Fm 64501
Z2Fycw== 64502
IFBhcnRpY2lwYXRpb24= 64503
VmVyYm9zZQ== 64504
U3By 64505
U3Zn 64506
KFZhbHVlRXJyb3I= 64507
IHJlY29uY2lsZQ== 64508
CURCRw== 64509
bWVldA== 64510
IExvZ2luUGFnZQ== 64511
LXVudXNlZA== 64512
IGpvbmc= 64513
IGFuY29yYQ== 64514
INij 64515
Plo= 64516
PXc= 64517
IFJlbm8= 64518
dmll 64519
b3Rpb25FdmVudA== 64520
IExpc3RUaWxl 64521
X1J1bnRpbWU= 64522
IHVwaG9sZA== 64523
IE9idGFpbg== 64524
cHJvdmlkZWQ= 64525
IERhdGVQaWNrZXI= 64526
IENHSQ== 64527
IEJsYWNrQmVycnk= 64528
YWNobw== 64529
IElzYWlhaA== 64530
5pW0 64531
IEFiZHVsbGFo 64532
IHVwcA== 64533
IHVybHBhdHRlcm5z 64534
CXNpemVvZg== 64535
IHBpc3NlZA== 64536
IHByZWZlcnJlZFN0eWxl 64537
QVBQRVI= 64538
IFZC 64539
IFRlcmVzYQ== 64540
b2duaXRv 64541
RU1Z 64542
IGVsZWdhbmNl 64543
IENsYXl0b24= 64544
YXRpdm9z 64545
IEFuYWxvZw== 64546
IGdhdXNzaWFu 64547
IEhpYmVybmF0ZQ== 64548
W11b 64549
IHN3ZWV0bmVzcw== 64550
IE5pZWxzZW4= 64551
IER1dGVydGU= 64552
KHNlbA== 64553
LCs= 64554
IGV4dHJhb3JkaW4= 64555
Zmxha2U= 64556
W0RvdWJsZQ== 64557
Ly8vDQo= 64558
IG11Y2hhcw== 64559
IEJyb2FkY2FzdGluZw== 64560
QXNzb2NpYXRpb24= 64561
ZXhlcmNpc2U= 64562
LlJlbGF0aXZl 64563
IHViaXF1aXRvdXM= 64564
U0JBVENI 64565
xLFuYQ== 64566
LWZvb2Q= 64567
IGNyeXN0YWxs 64568
0YPQsQ== 64569
ICd+ 64570
INCR 64571
IGR1bms= 64572
IHpp 64573
IE11Zw== 64574
IGRlY2VwdGlvbg== 64575
IEVtYWNz 64576
CiAgICAKICAgIAo= 64577
IMSRxrDhu6Nj 64578
IFdvbHZlcw== 64579
YW1lbnRp 64580
ICcpWw== 64581
Zm9ybWF0cw== 64582
UmVjdg== 64583
RGV0YWlsZWQ= 64584
KEhXTkQ= 64585
X3RyaWFs 64586
YWdyYW50 64587
T20= 64588
Y29uc2Npb3Vz 64589
IG9zcA== 64590
cXXDqQ== 64591
IGdvbg== 64592
IG1lcmVrYQ== 64593
YXJlbmRyYQ== 64594
TWluZQ== 64595
LmxpbmtlZGlu 64596
IGZpZm8= 64597
Lm1vbml0b3I= 64598
IHJ1bmU= 64599
bW5vcA== 64600
IHNwZWN1bGF0ZQ== 64601
ZWds 64602
IHZhc2N1bGFy 64603
LnRlY2g= 64604
IG1hZ21h 64605
IGxlc3Q= 64606
dW1hbm4= 64607
IERyaXZlck1hbmFnZXI= 64608
IG9ydA== 64609
IGxpbmdlcmluZw== 64610
IG9zdHJlYW0= 64611
IHNwYXJrbGluZw== 64612
LmNvbm5lY3Rvcg== 64613
IHRhaWxz 64614
IGtlcm5lbHM= 64615
VVNFUk5BTUU= 64616
CWNj 64617
IG9uU2VsZWN0 64618
L01QTA== 64619
dGFwZQ== 64620
LmRqYW5nb3Byb2plY3Q= 64621
R2VuZQ== 64622
4oCZaW4= 64623
L2ZpbHRlcg== 64624
LWVudmVsb3Bl 64625
IGFwcGxhdXNl 64626
IHJlZ2lzdHJvcw== 64627
IENvcnk= 64628
b2ZmbGluZQ== 64629
LXNob3Q= 64630
bGVzYw== 64631
b3RlbnQ= 64632
IG51bWVyYXRvcg== 64633
LmVmZmVjdA== 64634
cGxhY2VtZW50cw== 64635
IEFGQw== 64636
LlNlcXVlbmNl 64637
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 64638
eW50aGlh 64639
IEdyaWZmaXRo 64640
ZWxtYW4= 64641
c2V0RGVzY3JpcHRpb24= 64642
IE5pZ2h0cw== 64643
Lm9yZGVycw== 64644
IGAsCg== 64645
IFNhbGFk 64646
amlhbmc= 64647
IHJlY3Vy 64648
IFNUQVRJQw== 64649
LXNwb25zb3JlZA== 64650
eWxlbmU= 64651
LGVtYWls 64652
X18pKQ== 64653
KSIpLg== 64654
Q0VMTA== 64655
YW1tZW50 64656
TEFZ 64657
LHN0ZA== 64658
LnByZWY= 64659
LkNvcg== 64660
cmVkbw== 64661
IEZ1Y2tlZA== 64662
IHJ1c3M= 64663
IGVzdGFibGlzaGVz 64664
bnZhcmNoYXI= 64665
LkdldEZpbGVOYW1l 64666
IHBlbWI= 64667
IFNhdWQ= 64668
X3BhY2tldHM= 64669
Lmludm9pY2U= 64670
LmdldFRvdGFs 64671
SG9tZUNvbnRyb2xsZXI= 64672
IHTDtg== 64673
YWdoZXI= 64674
LmVudA== 64675
LkFic29sdXRlQ29uc3RyYWludHM= 64676
IGdlbnVz 64677
IEJhYnlsb24= 64678
IC4uLy4uLw== 64679
IE1pZG5pZ2h0 64680
IHdn 64681
IGRhbmNlcg== 64682
LWltbQ== 64683
ZGlyZQ== 64684
aGF6aQ== 64685
Y2VydGlmaWNhdGU= 64686
IG1EYXRh 64687
IGN1cmVk 64688
c3Zu 64689
IkI= 64690
aWJyZQ== 64691
IGRyYWZ0cw== 64692
Q2FwaXRhbA== 64693
IGNvbmNpc2U= 64694
IFBlYWNo 64695
IHxc 64696
IHBwbQ== 64697
X2NvbnRhaW5z 64698
QXV0b3I= 64699
QXV0b1NpemU= 64700
X2xi 64701
IHNvbGVtbg== 64702
IGZpbmdlcnQ= 64703
IEluZGljYXRvcg== 64704
IFN2 64705
UGFyaw== 64706
JHR5cGU= 64707
X01JU1M= 64708
YW5udWFs 64709
UGFpZA== 64710
bWFzdGVycw== 64711
IFdE 64712
IHZ1ZWw= 64713
IGVqYWM= 64714
CWdsdXQ= 64715
IHVuZmluaXNoZWQ= 64716
ZXN0ZWVt 64717
Z3JvdXBCb3g= 64718
UmVtb3Zpbmc= 64719
IGVpbmlnZQ== 64720
IFNjcmlwdHM= 64721
Z2V0dG8= 64722
LkhhbmRsZUZ1bmM= 64723
Il0pLA== 64724
IGRpc2FkdmFudGFnZXM= 64725
LWZyb250 64726
PnA= 64727
c2V0T25DbGlja0xpc3RlbmVy 64728
IGxhbmRsb3Jkcw== 64729
IE3DvA== 64730
IHByZXByb2Nlc3Npbmc= 64731
KX0+ 64732
LWNvbnRleHQ= 64733
LGJvb2w= 64734
UVVJVA== 64735
ICIpIik7Cg== 64736
IFdlYnNpdGVz 64737
IENoYXJsb3R0ZXN2aWxsZQ== 64738
TGF0Y2g= 64739
LmRpcmVjdGl2ZQ== 64740
IEh1ZmZpbmd0b24= 64741
X2RpcnR5 64742
ZXhwaXJhdGlvbg== 64743
IFRQTQ== 64744
IGVkeA== 64745
IFdlYkRyaXZlcldhaXQ= 64746
IGFkbWlyZWQ= 64747
IGxpc3RlbnM= 64748
IFZpbA== 64749
ZGlmZmVyZW50 64750
IGxpdmVsaWhvb2Q= 64751
IFdhcmNyYWZ0 64752
IHBvc2ljaW9u 64753
IGltcGVhY2htZW50 64754
SmF5 64755
IHBvc2l0aXZlcw== 64756
IGp1bmdl 64757
IFNNQg== 64758
L2luY2x1ZGVz 64759
KCcuLi8uLi8uLi8= 64760
QXJndW1lbnROdWxsRXhjZXB0aW9u 64761
ZGVzY3JpY2Fv 64762
QUJDREU= 64763
LUFB 64764
IGludmFkZWQ= 64765
IGFtZXJpY2E= 64766
dWVkZQ== 64767
IFBoYXNlcg== 64768
IHNjb3Jlcg== 64769
IGRpc2NvdXJhZ2Vk 64770
dGhpbg== 64771
IGFiZG9tZW4= 64772
IElQUA== 64773
IEhhbXB0b24= 64774
L0RlbGV0ZQ== 64775
W3NyYw== 64776
Q1N0cmluZw== 64777
IE51bg== 64778
IGVwaXRo 64779
4oC7 64780
LnRhYmxlcw== 64781
IEhlaW4= 64782
IHdoaXJs 64783
IGNsYXJpZmljYXRpb24= 64784
IHdlZGdl 64785
IGjDpHI= 64786
IFRpbmE= 64787
IHRod2FydA== 64788
IENvc3R1bWU= 64789
aW9uYWdl 64790
Q29k 64791
X2FjbA== 64792
IHJlc2g= 64793
IE1lcmN5 64794
IERpeG9u 64795
IGRlc2Fycm9sbA== 64796
VmlyZ2lu 64797
KiopJg== 64798
IExlbm92bw== 64799
IGVyYXNlZA== 64800
ZW50aW9ucw== 64801
IHNsaXBwaW5n 64802
5Zub 64803
IGNyYXZpbmc= 64804
cGxhbnRz 64805
IGdldHRleHQ= 64806
IG1hc3NpdmVseQ== 64807
IFJlbmFtZQ== 64808
Lmhlcm8= 64809
44K7 64810
IHRvbWFy 64811
IENPU1Q= 64812
IFByYWN0aWNlcw== 64813
Lk1lZGlhVHlwZQ== 64814
IEZ1bmRpbmc= 64815
RmluZQ== 64816
aWdlcmlh 64817
VW5j 64818
IHN3YXBwaW5n 64819
PicuCg== 64820
aW50ZXJw 64821
YXJ0aWZhY3Q= 64822
IEJhZ3M= 64823
LnZpZXdNb2RlbA== 64824
cXVvdGVk 64825
CUxvbmc= 64826
X1NDT1JF 64827
IHNhdnZ5 64828
bmVsbGU= 64829
a2zDpA== 64830
Q291bnRz 64831
2q8= 64832
RmllbGRUeXBl 64833
b2thYmxl 64834
IFJUTA== 64835
I2luZGV4 64836
ICV7 64837
IGFyaXN0 64838
LkdldE1hcHBpbmc= 64839
KEFkYXB0ZXJWaWV3 64840
PSIiKQo= 64841
IGRpc2lu 64842
IFRvdWNoYWJsZU9wYWNpdHk= 64843
IE1PWg== 64844
IER1bm4= 64845
Q2FwYWJpbGl0eQ== 64846
YWtoc3Rhbg== 64847
VUlWaWV3Q29udHJvbGxlcg== 64848
KHNvY2tmZA== 64849
IEphY3F1ZXM= 64850
PXRr 64851
YXJQYXJhbXM= 64852
Y29uZGE= 64853
IGFkdm9jYXRlZA== 64854
IHBlbmV0cmF0ZQ== 64855
SkVDVElPTg== 64856
IOuwmA== 64857
IEZJTkQ= 64858
IGVhcm5z 64859
YXBwZW4= 64860
6rE= 64861
IHRocm91Z2hwdXQ= 64862
IHBlbnNpb25z 64863
IGZ1c3M= 64864
SFRUUFJlcXVlc3Q= 64865
bnV0cw== 64866
b2NodA== 64867
LWVzdGFibGlzaGVk 64868
IEFMSUdO 64869
IGpzcGI= 64870
RGlzcA== 64871
X2VtYmVkZGluZ3M= 64872
IHJlcHQ= 64873
IFlvcmtlcg== 64874
w7JuZw== 64875
IGpvdXJuZXlz 64876
IEFwcHJvdmFs 64877
CVNFTEVDVA== 64878
KEdyYXBo 64879
0LzQuA== 64880
IGRvbGxz 64881
IHNleGlzdA== 64882
IHBhbnM= 64883
IG1wbA== 64884
IG9wZXJhdGl2ZQ== 64885
IFRvcnJlbnQ= 64886
WU0= 64887
IFBhc3Npb24= 64888
5pat 64889
LmNvbXBpbGVy 64890
CUNTdHJpbmc= 64891
PWNvbG9y 64892
b3JpYW5DYWxlbmRhcg== 64893
IEtub2Nr 64894
IGhhaWxlZA== 64895
L3N0YXRl 64896
IHNldHVwdG9vbHM= 64897
IE1hcmU= 64898
IHN5bmNocm9uaXpl 64899
IFN3aXBl 64900
IGdhbWJsZQ== 64901
LCcnXV1dLAo= 64902
IGRlZmVjdGl2ZQ== 64903
X09CSkM= 64904
IGRlbmlt 64905
IHRhZA== 64906
IEtpbWJlcg== 64907
IG5ldXJvbG9naWNhbA== 64908
w6puY2lhcw== 64909
CWNi 64910
LnNldFBhc3N3b3Jk 64911
IFBsZWFzYW50 64912
IFBoaQ== 64913
LXRhZ3M= 64914
IGNvbnRhZw== 64915
IENvcmFs 64916
IGRpc3RyYWN0 64917
aXRpemVy 64918
IHN1bnJpc2U= 64919
c2V0SWQ= 64920
IENoZW5uYWk= 64921
IE9ncmU= 64922
X0hJU1RPUlk= 64923
UFJFU1NJT04= 64924
X1NVRkZJWA== 64925
ZHVwbGljYXRl 64926
LmF1dGhTZXJ2aWNl 64927
IHNwYWNlZA== 64928
IEJlbmdhbHM= 64929
U29sdmVy 64930
IGJ1cmVhdWNyYWN5 64931
X2hpdHM= 64932
INGC0LjQvw== 64933
IGPDqQ== 64934
IGRpc2dyYWNl 64935
6KeS 64936
aXNPcGVu 64937
Q2hlbQ== 64938
X2xpY2Vuc2U= 64939
X2hvc3RuYW1l 64940
X0JSRUFL 64941
IGZpZXJ5 64942
OkQ= 64943
L2xpbnV4 64944
VGl0dWxv 64945
UmFkaWFucw== 64946
aXpvbnM= 64947
UmFt 64948
b2RpYW4= 64949
aWFuZ2xl 64950
IG5pbmph 64951
RXZlcnlib2R5 64952
KCI+ 64953
IHRha8W8ZQ== 64954
IGdyb3VuZGJyZWFraW5n 64955
IGRpcmln 64956
SFRNTEVsZW1lbnQ= 64957
IFVuY29tbWVudA== 64958
Y2hlaW4= 64959
IOeUn+WRveWRqOacn+WHveaVsA== 64960
JSIK 64961
IHRpcG9z 64962
Q2hhckNvZGU= 64963
IFByb2R1Y3Rv 64964
ZmFpdA== 64965
J2w= 64966
LXRodW1ibmFpbA== 64967
dXN1 64968
X2Zvcm11bGE= 64969
LlRPUA== 64970
LmJ1eQ== 64971
IG1pZXV4 64972
Q2VudHVyeQ== 64973
cGVp 64974
IHRic3A= 64975
LVBhY2lmaWM= 64976
b2dp 64977
IGZhdHRv 64978
IGZhbnRhc3Q= 64979
IFNBTEU= 64980
LmFkcw== 64981
IHBpbGxhcnM= 64982
X3RyaXA= 64983
IHR1YQ== 64984
IGFwZWxsaWRv 64985
LnNldENlbGxWYWx1ZQ== 64986
ICgoXw== 64987
IE5pbmE= 64988
PGM= 64989
aW5pdW0= 64990
ZGZ1bmRpbmc= 64991
LXdvcmtpbmc= 64992
IEVzdGFkb3M= 64993
IE1hbGk= 64994
PGY= 64995
dXJhbmNlcw== 64996
cGFnaW5h 64997
X1BL 64998
IHVuYXJtZWQ= 64999
b2dnbGVk 65000
Q2FuZGlkYXRl 65001
UmF0aGVy 65002
IGZyYW5jaGlzZXM= 65003
IGNvdmVuYW50 65004
wqo= 65005
aXBwaW5lcw== 65006
R3Vu 65007
LWZlaXJh 65008
IGxpbmVhZ2U= 65009
X0dSQU5URUQ= 65010
Z2VucmVz 65011
LkVsYXBzZWQ= 65012
IGxhcmdv 65013
0Js= 65014
LXJlYWR5 65015
X3Byb2Nlc3NlZA== 65016
bGFuZ3M= 65017
w7ptZXJvcw== 65018
ZnE= 65019
L25wbQ== 65020
X3Nydg== 65021
IGF0dGVuZGFudA== 65022
aXZpZA== 65023
ZXZpY2U= 65024
QUJJ 65025
KGJpbmFyeQ== 65026
X1ZBTElEQVRF 65027
IGFkZEl0ZW0= 65028
X2NvZWY= 65029
YWxlYg== 65030
b2dyYXBoaWNhbGx5 65031
Qm9yZGVyQ29sb3I= 65032
IGFzc2F5 65033
IGNhdGNoRXJyb3I= 65034
IENocnlzbGVy 65035
b2do 65036
IGtleVZhbHVl 65037
ZGVjaXNpb24= 65038
LW9mZnM= 65039
IGxpZWd0 65040
KERhdGFUeXBl 65041
IGlyaXM= 65042
IGV1cA== 65043
cmlnZXI= 65044
b25pY2E= 65045
IHJvcGVz 65046
IG5hcnJvd2x5 65047
IFF1YWRy 65048
IGVwdWI= 65049
ZXN0aW5hbA== 65050
LXR1cm4= 65051
IGxhbmdz 65052
55uR5ZCs6aG16Z2i 65053
IHF1ZWxsbw== 65054
LGFyZ3M= 65055
aWdhdGU= 65056
IFNlZW1z 65057
IGZvcnRl 65058
Q0xJ 65059
X0xPQURJTkc= 65060
LlJ1bGU= 65061
IHlvdXRocw== 65062
KHh4 65063
IEFzc3VtaW5n 65064
YWdoZXR0aQ== 65065
KQoKCgoK 65066
IG9uT3B0aW9uc0l0ZW1TZWxlY3RlZA== 65067
T2NjdXA= 65068
IGRldHJpbWVudGFs 65069
IGlubmF0ZQ== 65070
IEJhcnJlbA== 65071
dWVuY2lh 65072
IG9uQmx1cg== 65073
IGxpYnM= 65074
W2xhc3Q= 65075
IGNwZg== 65076
LlRpbWVvdXQ= 65077
ZXN0YXRpb24= 65078
IHdpZWw= 65079
IHV0aWxpemFy 65080
IGRpc2d1aXNl 65081
IER1bQ== 65082
T0NJ 65083
T05HTw== 65084
ICg/LA== 65085
IFBhdGlv 65086
VmVydGV4QXJyYXk= 65087
LmF1dGhvcml6YXRpb24= 65088
cm96 65089
IEhvcw== 65090
LlNwYWNl 65091
IFZpcnVz 65092
KGtleXdvcmQ= 65093
VE9DT0w= 65094
X0NPTlRST0xMRVI= 65095
IEJsb2NrZWQ= 65096
IENob3A= 65097
d2nEmQ== 65098
XFJvdXRpbmc= 65099
L3BhY2thZ2U= 65100
IHBlcnN1YWRlZA== 65101
YmVpdHM= 65102
TENE 65103
IG11Yw== 65104
X0ZPUldBUkQ= 65105
IG91dGxhdw== 65106
IHphdw== 65107
X3ZlaGljbGU= 65108
IEplbnNlbg== 65109
LkdyZWVu 65110
IC8vLy8v 65111
SVJDTEU= 65112
LWJ1c2luZXNz 65113
LkhpZGRlbg== 65114
IGtvbm50ZQ== 65115
cHE= 65116
IHBhcmVjZQ== 65117
IGxhbmRzY2FwaW5n 65118
IERlY29yYXRpb24= 65119
IEdSQQ== 65120
X3Byb2ZpbGVz 65121
IEZsZW0= 65122
Q0xJQ0s= 65123
IEZBSUxVUkU= 65124
IGlvbnM= 65125
X1RpbWVy 65126
LkRvZXM= 65127
IGJvdW5jaW5n 65128
dXBweQ== 65129
dWxpcw== 65130
L2Fn 65131
IEdhcm4= 65132
IGh1ZA== 65133
IHJlc3BvbmRlcg== 65134
IHN0cmNocg== 65135
IGNob2tl 65136
IHN0YXNo 65137
X2NoZWNrc3Vt 65138
IHN0YW1wZWQ= 65139
QEdldE1hcHBpbmc= 65140
LkJ5dGVBcnJheQ== 65141
IER5cw== 65142
YXRlcm5pdHk= 65143
KHJi 65144
IGVkaXRUZXh0 65145
IGVyZWN0aW9u 65146
IGNlc3M= 65147
X2V2ZXJ5 65148
X2dhdGV3YXk= 65149
ICciLg== 65150
IHN0YWZmaW5n 65151
IGludm9pY2Vz 65152
aW5pY2lv 65153
fV0sCg== 65154
LHZhcg== 65155
eWNpbg== 65156
IERpb24= 65157
ICUlCg== 65158
Jywo 65159
LXNwYW4= 65160
IHRow6BuaA== 65161
IGJvcm5l 65162
IEthdGhsZWVu 65163
6L+e5o6l 65164
X2N1YmU= 65165
IGluZm9ybWHDp8O1ZXM= 65166
bmdlcg== 65167
L0ZpbGU= 65168
IGRhcmE= 65169
IG1M 65170
KioqKioqCg== 65171
IG1hcmtpbmdz 65172
YmJl 65173
IHJlY3VycmVudA== 65174
IFJhbmtpbmc= 65175
X2ludGVncmFs 65176
XT4K 65177
IHVuYW5pbW91c2x5 65178
IGRpcGxvbWF0cw== 65179
IElPUw== 65180
OyI+PD8= 65181
IE1hdHRl 65182
IFJhbGVpZ2g= 65183
IEltcHJvdmU= 65184
ZXhpc3RlbnQ= 65185
IGZha2Vy 65186
IEhpZ2hsYW5k 65187
c3RlbQ== 65188
LW1z 65189
TGlzdE9m 65190
Lkxpc3RlbmVy 65191
KHdhaXQ= 65192
X1JTVA== 65193
VW5h 65194
IG9jY3VwYXRpb25hbA== 65195
LW1lbW9yeQ== 65196
IFN1cmY= 65197
IGJydXRl 65198
X0VsZW1lbnQ= 65199
ZGRkZA== 65200
IERlY3Jl 65201
LnBzaQ== 65202
LWRldmVs 65203
IE9uVHJpZ2dlckVudGVy 65204
VG9EZWxldGU= 65205
IGhlcmFsZA== 65206
IHNvY2lhbGVz 65207
IGJvb3N0ZWQ= 65208
Lkl0b2E= 65209
KiI= 65210
IGFudGlkZXByZXNz 65211
IE1hdmVy 65212
X18pKQo= 65213
KER1cmF0aW9u 65214
ZXN0YXRl 65215
YnJhdGU= 65216
Q2xh 65217
IOS4ig== 65218
65CY 65219
cmnDqHJl 65220
YnJlYWtlcg== 65221
X2xlZw== 65222
fWVsc2VpZg== 65223
X2Z1bmNz 65224
dcOt 65225
LnBhZ2VZ 65226
Y3JlYXR1cmU= 65227
IGNhbm5hYmlu 65228
IEFzdHJv 65229
bG9jYWxz 65230
IExBUw== 65231
X2NvbnZlcnNpb24= 65232
IENSVUQ= 65233
LnNraWxs 65234
IHN0cmF0ZWdpc3Q= 65235
LnBvbA== 65236
KHNlZ21lbnQ= 65237
IHBlZQ== 65238
fSIpOwoK 65239
LnByZXZpZXc= 65240
SmFt 65241
IGhlZnR5 65242
aXZhdGluZw== 65243
R3JpZENvbHVtbg== 65244
IGN1ZGQ= 65245
IGluamVjdGlvbnM= 65246
IE5JTA== 65247
LW9sZHM= 65248
ZmxhdGlvbg== 65249
IExlYWZz 65250
IHNwaGVyaWNhbA== 65251
IGZhbGxvdXQ= 65252
YW1pbmVy 65253
IDo6PQ== 65254
LnBvaW50ZXI= 65255
LU1hcnQ= 65256
IG1hdHRl 65257
IGNvcXVpbmU= 65258
IGRpc2NvbnRpbnVlZA== 65259
IFJFR0lPTg== 65260
LlJpZ2h0VG9MZWZ0 65261
IHNxdWVlemVk 65262
X1BPSU5UUw== 65263
YmVzdG9z 65264
LWxhc3Rpbmc= 65265
KHV0aWxz 65266
PEJhc2U= 65267
IHBhcmRvbg== 65268
U3RyaWRl 65269
Y2Ry 65270
IG5hcnJhdG9y 65271
dm9sdXRpb24= 65272
IHVzZXJJbnB1dA== 65273
X2NvbnRhY3Rz 65274
KGVuZW15 65275
IENoYW1iZXJz 65276
emllbA== 65277
IGJsb2NrU2l6ZQ== 65278
QW5pbWF0aW9uc01vZHVsZQ== 65279
IGltbWVyc2l2ZQ== 65280
IG91dGluZw== 65281
dWVzdG9z 65282
VHdlZW4= 65283
IGtlcA== 65284
IHLDqXN1bHQ= 65285
IEJvbGx5d29vZA== 65286
RExM 65287
IFN1cmVseQ== 65288
LlJvd1N0eWxl 65289
KHRt 65290
X2dlbmVyYXRpb24= 65291
IFN0aXI= 65292
IGRhdGFTbmFwc2hvdA== 65293
Y2h1cmNo 65294
IGNvbmZpZGVudGlhbGl0eQ== 65295
X3N1c3BlbmQ= 65296
dmlw 65297
IEthdGh5 65298
44Km 65299
IHZpb2xlbnRseQ== 65300
cGV0cw== 65301
IG1lc3NlZA== 65302
IHRleHRib29rcw== 65303
ICAgICAgICAJCQk= 65304
5raI5oGv 65305
IExhcmF2ZWw= 65306
IEFyY2FkZQ== 65307
IGVudGg= 65308
IGJlbmlnbg== 65309
X0RST1A= 65310
LWVuYWJsZQ== 65311
4oCdKS4= 65312
dXZ3eHl6 65313
X2xpc3Rpbmc= 65314
IE5JQw== 65315
44GV44GE 65316
KCIuIiw= 65317
LXJvdW5kZWQ= 65318
LXBhY2Vk 65319
cGF0cmljaw== 65320
U2VsZQ== 65321
LmdldEZpcnN0 65322
LkVYSVQ= 65323
ZXRlcm1pbmF0ZQ== 65324
R3JhbQ== 65325
Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 65326
LmV4dGVybmFs 65327
IHdyb25nZG9pbmc= 65328
IEVsbQ== 65329
IHNhbms= 65330
VGVlbg== 65331
IFRob21zb24= 65332
cHJpb3I= 65333
amV0YQ== 65334
IEFEUw== 65335
IFBlcnNpc3RlbmNl 65336
IEZvbGs= 65337
e1wi 65338
Ym9uZA== 65339
X1NQRUNJQUw= 65340
X0xBVA== 65341
b25la3Np 65342
IG1vdGhlcmJvYXJk 65343
IHNoZWFy 65344
RnVsbFNjcmVlbg== 65345
Kks= 65346
KEJsdWVwcmludA== 65347
TWV0aG9kSW5mbw== 65348
QmVjb21l 65349
IGhhaWw= 65350
IERvYg== 65351
IGdlbmVyb3NpdHk= 65352
ID8iOwo= 65353
IHdoaXNrZXk= 65354
IHRoaW5uZXI= 65355
IENw 65356
IGludGVyc2VjdGlvbnM= 65357
Q3JpdA== 65358
cmFpc2Fs 65359
cmVmZmVu 65360
V2hlbmV2ZXI= 65361
IGNvbW1lbmNlZA== 65362
VHJhbnNmb3JtYXRpb24= 65363
L3dyaXRl 65364
PSIiIg== 65365
KGxk 65366
IG5vcnNr 65367
QU1FTlQ= 65368
LnNoYXJlZEluc3RhbmNl 65369
X2hvdXNl 65370
IGdsRW5hYmxl 65371
6L2v 65372
IG5hbw== 65373
IGRlcG9zaXRpb24= 65374
IGRpbm9zYXVycw== 65375
IHRpbWVTdGFtcA== 65376
X18pOwoK 65377
LlJpYmJvbg== 65378
IExpbmRzZXk= 65379
OnVzZXI= 65380
IMOA 65381
X2Zvcm1z 65382
bWluYXRpbmc= 65383
IE9saXY= 65384
IGTDqWJ1dA== 65385
YmFyY29kZQ== 65386
c2ltaWxhcg== 65387
IHBsYXRlYXU= 65388
IGluZGVt 65389
UmVhbG0= 65390
IGZlcnRpbGl6ZXI= 65391
IGNhcGU= 65392
IGNoYW1wYWduZQ== 65393
IHNlbGZpZQ== 65394
IHBsYWlubHk= 65395
IGNhdGFzdHJvcGhl 65396
IGJldHJheWVk 65397
dmVyc2libGU= 65398
VXBkYXRlVGltZQ== 65399
Lk91dHB1dFN0cmVhbQ== 65400
Ymlhc2Vk 65401
Ym91bmNl 65402
IFNwb3J0aW5n 65403
Q29vcmRpbmF0b3I= 65404
ZGV2ZWxvcGVycw== 65405
IHRyYWNlcg== 65406
IG11c3RhcmQ= 65407
U1E= 65408
X3Rlcm1pbmFs 65409
IGNvb2xlZA== 65410
IGF2b2lkYW5jZQ== 65411
TG9naWNhbA== 65412
IHllbGw= 65413
X3JvdXRlcw== 65414
IGFydGVyeQ== 65415
IEJlYXJpbmdz 65416
Lm12cA== 65417
LkdVSQ== 65418
VUlTY3JlZW4= 65419
eW1t 65420
aXTDpA== 65421
KClbIg== 65422
IEF6ZXJiYWk= 65423
IGNvbmRpdGlvbmVy 65424
IHdhZw== 65425
IHNjYWxw 65426
dmluY2lhbA== 65427
b3dsZXI= 65428
LicpOwoK 65429
QkxVRQ== 65430
IMKnwqc= 65431
Qm9zdG9u 65432
IExpbmtlZEhhc2hNYXA= 65433
RG9jdW1lbnRhdGlvbg== 65434
LkxlcnA= 65435
IGRlbm5l 65436
IGhlc2l0YXRpb24= 65437
IENlbGVicml0eQ== 65438
IEh5ZGU= 65439
IGNvbW1hbmRpbmc= 65440
YWNlbGx1bGFy 65441
IHBhdmVtZW50 65442
IEhhbW1vbmQ= 65443
YXNzaWM= 65444
UExVR0lO 65445
IHJldm9rZWQ= 65446
RG9jdW1lbnRv 65447
LnBob3Rvcw== 65448
IFdpbGxvdw== 65449
IFZpa2luZw== 65450
IHVwZnJvbnQ= 65451
IExpZmV0aW1l 65452
ICVb 65453
RHJlYW0= 65454
5aS0 65455
IGFjY2VsZXJhdG9y 65456
UGVyc29uYQ== 65457
X3RvcGljcw== 65458
77yJ44CB 65459
IChfLg== 65460
IHPDqWN1cg== 65461
IEt3 65462
X2Nhc2g= 65463
IHNvb3RoaW5n 65464
IExvdmVseQ== 65465
IEhlcnM= 65466
ZWxvbg== 65467
TElDRU5TRQ== 65468
X2NhY2hlZA== 65469
LnNoYQ== 65470
UkZD 65471
LkZpbGVJbnB1dFN0cmVhbQ== 65472
LUFs 65473
IHVzZXJMaXN0 65474
IG7DpHI= 65475
SGlsbGFyeQ== 65476
IHBhZ28= 65477
LlBsdWdpbg== 65478
IENvdmU= 65479
X3lhbWw= 65480
X3JzcA== 65481
J3Bvc3Q= 65482
LWR1cmF0aW9u 65483
IHNlbnRpZG8= 65484
IG1pbkhlaWdodA== 65485
IHR1cnJldA== 65486
LWVuZXJneQ== 65487
IOeJ 65488
0YDRg9Cz 65489
b3RlY2E= 65490
X3F1YWw= 65491
U2VsZWN0aXZl 65492
IEJFTE9X 65493
CWFkbWlu 65494
IH19LAo= 65495
J3VzZXI= 65496
U1ZH 65497
IGN1bG8= 65498
KFdvcmxk 65499
LWJpbmRpbmc= 65500
bmJy 65501
IFNlbmRz 65502
IHN1cHJlbWFjeQ== 65503
IHNrYXRpbmc= 65504
IGNyZWVr 65505
IGFjY3VzYXRpb24= 65506
YXBnb2xseQ== 65507
LklERU5USVRZ 65508
IG1hbmRhdGVk 65509
IGdvd24= 65510
IHdpZHRocw== 65511
IExTVQ== 65512
L3ZlcnNpb24= 65513
IFJlYWRlcnM= 65514
IFJvbmFsZG8= 65515
IGJhZmY= 65516
IGA7Cg== 65517
R0xJU0g= 65518
KGRvdA== 65519
IE9wZXJhdG9ycw== 65520
LlNjZW5lTWFuYWdlbWVudA== 65521
bWVyYw== 65522
X3JlcG9ydHM= 65523
LWNlbnRyaWM= 65524
IENlaWxpbmc= 65525
PXsh 65526
bW9ueQ== 65527
IEFERFJFU1M= 65528
5a+56LGh 65529
TWF0Y2hpbmc= 65530
IHVuaw== 65531
IGtleUNvZGU= 65532
ICcvJyk= 65533
KWRhdGE= 65534
IFZvbHVudGVlcg== 65535
IGxheg== 65536
IEd1YW5n 65537
IENhbmRpZGF0ZXM= 65538
RW5zdXJl 65539
aWFnZQ== 65540
c3VjYw== 65541
Q2VydGFpbg== 65542
IGxlZnRvdmVy 65543
aW5pbg== 65544
LWVsZW1lbnRz 65545
cGlrZQ== 65546
IHNsaWRlc2hvdw== 65547
LnRvb2xTdHJpcFNlcGFyYXRvcg== 65548
LnBoYXNl 65549
IGVudGVydGFpbmVk 65550
IENhcnJpZQ== 65551
IE1vaGFtbWFk 65552
LmxvZ2dlZA== 65553
IHNjcm9sbFRvcA== 65554
IEFiYmV5 65555
aW1vbnk= 65556
KHJlc3VsdFNldA== 65557
IGFkaGVzaXZl 65558
X0RBTUFHRQ== 65559
IGlvY3Rs 65560
YnJvd24= 65561
SU5TVA== 65562
LkNsb25l 65563
IGxvb21pbmc= 65564
RGVzZXJpYWxpemU= 65565
IGx1eg== 65566
cXJzdHV2d3h5eg== 65567
LmlkZW50 65568
SGVhdnk= 65569
IGRpbw== 65570
5piv5ZCm 65571
IEZ1cm4= 65572
6YKu 65573
emltbWVy 65574
44O844OJ 65575
c3BlYWtlcg== 65576
IEdlZA== 65577
IHVuaWRlbnRpZmllZA== 65578
SW50ZXJmYWNlT3JpZW50YXRpb24= 65579
IFN1cnZpdm9y 65580
ZGVlbg== 65581
IEJvcmc= 65582
dG9Eb3VibGU= 65583
X2J3 65584
IHB1Ymxpc2hlcw== 65585
X0FMRVJU 65586
YW5ncw== 65587
aWVyZXM= 65588
IGhlaQ== 65589
IElDb25maWd1cmF0aW9u 65590
IGNvbnN0aXR1dGVk 65591
V0FUQ0g= 65592
cHJpdmF0aW9u 65593
IEdyYW5pdGU= 65594
LlRleHRBbGlnbm1lbnQ= 65595
X2t3 65596
OyIsCg== 65597
Y290 65598
IE5ld2Fyaw== 65599
cm9hY2g= 65600
KW9iag== 65601
Q29tcGlsYXRpb24= 65602
Q2F0ZWdvcnlJZA== 65603
LnNldFVzZXI= 65604
aXZ5 65605
IEltYWdpbmc= 65606
aWdodGVk 65607
IHdnZXQ= 65608
IG1vdXRocw== 65609
Lmxpbg== 65610
IFJhZGlvQnV0dG9u 65611
LkNtZA== 65612
c3Nl 65613
IG1lc2hlcw== 65614
IFNvbGU= 65615
LnJlY29yZHM= 65616
IGFudGlz 65617
KG1vbg== 65618
INGH0LjRgdC70L4= 65619
gq0= 65620
IOyeiOuKlA== 65621
QWxsQXJnc0NvbnN0cnVjdG9y 65622
IHN1cnJlYWw= 65623
IE1hcnJpZWQ= 65624
IHhwYXRo 65625
XGY= 65626
QnJpbmc= 65627
IHlhaG9v 65628
IEV0c3k= 65629
X2RhaWx5 65630
IHRocm93YWJsZQ== 65631
IFBsYXNtYQ== 65632
L1B1YmxpYw== 65633
aW1pemVCb3g= 65634
IHZlcw== 65635
IHRyb20= 65636
X3Jocw== 65637
LWFscGhh 65638
IEFyYm9y 65639
KSkt 65640
RmlzaA== 65641
ZmVlZHM= 65642
IGNhbGY= 65643
IFNlcmdlYW50 65644
KGVudW0= 65645
IFJhbXNleQ== 65646
IElkZW50aWZ5 65647
LmluaXRTdGF0ZQ== 65648
IGZsdWN0dWF0aW9ucw== 65649
X0FUVFJJQlVURVM= 65650
IHB3bQ== 65651
RVNB 65652
Y3Bm 65653
U2ltdWxhdGlvbg== 65654
IHlvdXRoZnVs 65655
IEluZmFudHJ5 65656
IGdsYW5jZWQ= 65657
IFByb3Blcg== 65658
5LmJ 65659
IEtyYWZ0 65660
Q2l0 65661
b29wcw== 65662
PXVybA== 65663
cG9zdGluZw== 65664
ZGVjbGFyaW5n 65665
IHBOb2Rl 65666
SmF2YXNjcmlwdA== 65667
CQkJCQoJCQkJCg== 65668
LmNvb3JkaW5hdGVz 65669
cmlldA== 65670
IFNx 65671
X0NBVA== 65672
IFBhcGE= 65673
YW5kaQ== 65674
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v 65675
TWVldGluZw== 65676
IOyekA== 65677
SW1hZ2Vu 65678
w6lyaWVuY2U= 65679
QWdncmVnYXRl 65680
LnBvbHk= 65681
IHdhdmVk 65682
IGludmVycw== 65683
c2VhcmNoTW9kZWw= 65684
IHRyb2xscw== 65685
W2xldmVs 65686
IExvd2U= 65687
dWxsbw== 65688
KHBsYWNl 65689
IE5BU0NBUg== 65690
IG9yYml0YWw= 65691
LnN0b3J5 65692
IGF1dGhvcml0YXRpdmU= 65693
LnRleHRWaWV3 65694
IGFscGg= 65695
X3JlZHVjZQ== 65696
IEZyYW1lcw== 65697
IEJyb20= 65698
cmVkaQ== 65699
KE1ldGhvZEltcGxPcHRpb25z 65700
bWFjZW4= 65701
VG90 65702
IG1pZGQ= 65703
2Y8= 65704
IEJhc2VNb2RlbA== 65705
IFZlZ2E= 65706
ID8+Igo= 65707
IFJpZ2lkYm9keQ== 65708
LnNldENvbnRlbnRUeXBl 65709
YWFT 65710
QmFzZWxpbmU= 65711
IGJsYW5rZXRz 65712
c2Fw 65713
IGNhc3VhbGx5 65714
VW5pdmVycw== 65715
IFRyYXk= 65716
IEFpcmVz 65717
IG1heFk= 65718
X1BST1BFUlRJRVM= 65719
IGhlbG1ldHM= 65720
wqY= 65721
X2Rlc2Ny 65722
c2hpbnQ= 65723
X0NQUA== 65724
dW1v 65725
YWRheQ== 65726
KHBsb3Q= 65727
ZW56eW1l 65728
IEV4Y2VwdGlvbnM= 65729
X3Zpc3VhbA== 65730
Ol0KCg== 65731
KHRhcmdldEVudGl0eQ== 65732
cGhlcmVz 65733
dW5hbg== 65734
IHNlbG9u 65735
d2ls 65736
IFJlbmRlcmluZw== 65737
S0M= 65738
IGNvbnN0aXR1ZW5jeQ== 65739
U0NSSUJF 65740
ZXN5 65741
IEZlbGxvd3NoaXA= 65742
5Y+4 65743
IGZ1dHVybw== 65744
IGFybW9yZWQ= 65745
bGlzdGU= 65746
b3Jhcw== 65747
bXVsdGlwbHk= 65748
Z2VtZQ== 65749
Y29lZg== 65750
0L7QsdGA0LDQtg== 65751
IERlbGl2ZXI= 65752
ZW5nbw== 65753
LnVzZXJTZXJ2aWNl 65754
T05VUw== 65755
Lm9ucmVhZHlzdGF0ZWNoYW5nZQ== 65756
ICIvIiw= 65757
YW1iaW8= 65758
X1Byb2plY3Q= 65759
Jyk/Pg== 65760
IGZsaXBwaW5n 65761
d29tZW4= 65762
LkNyb3Nz 65763
IGhvbGxhbmQ= 65764
IGNpbmVtYXRpYw== 65765
IHdoaXN0bGVibA== 65766
IGxpbmd1aXN0aWM= 65767
LkdldHRlcg== 65768
IG3DpG5uZXI= 65769
IExlZ28= 65770
IFNjaHVtZXI= 65771
YXNzZXNzbWVudA== 65772
X2Noaw== 65773
IHJlY29tbWVuZGluZw== 65774
LnNjYWxh 65775
IEd1YXJhbnRlZQ== 65776
IEBf 65777
LkFVVEg= 65778
IHlQb3M= 65779
bGF0ZXg= 65780
IEFsYmVydG8= 65781
5q2l 65782
dGhvcmE= 65783
4Li34LmI 65784
VVJMRXhjZXB0aW9u 65785
R2hvc3Q= 65786
LlRvb2xiYXI= 65787
IGVuZGlhbg== 65788
6Zeo 65789
c3RyYWN0aW9ucw== 65790
RmlsZU5vdEZvdW5kRXhjZXB0aW9u 65791
IHN0aW11bGF0aW5n 65792
YnNlcnZpY2U= 65793
YXTDs3Jpbw== 65794
aXRpb3Vz 65795
IGF1dGhTZXJ2aWNl 65796
X1RSQU5TRkVS 65797
IHJlZGlyZWN0VG8= 65798
IG1lbnNlbg== 65799
IFNQTA== 65800
IMK7LA== 65801
IGFjZXQ= 65802
X0JhY2s= 65803
4KSV 65804
YWFj 65805
IFJpb3Q= 65806
X0ZC 65807
IFph 65808
UGxhdGU= 65809
IGxhYmVsVGV4dA== 65810
INCy0YDQtdC8 65811
aHRvbg== 65812
IE1jQQ== 65813
IEFwcGVuZGl4 65814
IEtvaw== 65815
IGludGVydmlld2luZw== 65816
X3NwZWxs 65817
IFN1YmplY3Rz 65818
IGJ1cm5lcg== 65819
5a+8 65820
aWxsaWFu 65821
IGJ1bXBz 65822
UGFzc2Vk 65823
IENvbnRyaWJ1dG9y 65824
WW8= 65825
Ymxh 65826
IHNvdXQ= 65827
LmV4Yw== 65828
Tm90aWZpZXI= 65829
c2hpdg== 65830
LlVuaXRUZXN0aW5n 65831
dWVsbGVz 65832
X1NMRUVQ 65833
CW9wdHM= 65834
IHByZXNjcmlwdGlvbnM= 65835
IHJldmlzZQ== 65836
RURJVE9S 65837
IGFubsOpZXM= 65838
X3BrZw== 65839
IFRyYWNrcw== 65840
4LmI4Liy 65841
PWZvcm1z 65842
LlJVTg== 65843
IGFzZWc= 65844
IHDDoQ== 65845
IGplcw== 65846
R3Jl 65847
YWNy 65848
T2ZmaWNpYWxz 65849
dWtlcw== 65850
Y29tcGFuaWVz 65851
XFF1ZXJ5 65852
IFByaW50YWJsZQ== 65853
5a6i 65854
X1ZP 65855
IGRlaXg= 65856
IGRldmljZUlk 65857
IGRpc3R1cmJhbmNl 65858
bmlzdA== 65859
Lmlzbw== 65860
cGFyYWxsZQ== 65861
LWRlc2NyaWJlZGJ5 65862
IExpZg== 65863
IGJyZWFzdGZlZWRpbmc= 65864
IGZlbWluaXN0cw== 65865
bGVncm91bmQ= 65866
IGRhbWU= 65867
IGNvbXB1bHNvcnk= 65868
TUVSQ0hBTlRBQklMSVRZ 65869
LXJlc3VsdHM= 65870
Zm9ybWVkVVJMRXhjZXB0aW9u 65871
OlsK 65872
LWludGVyZXN0 65873
IHPDpA== 65874
IG5vc3RhbGdpYQ== 65875
IGNsYXJpZmllZA== 65876
IFBIT1RP 65877
IHJldmlzaXQ= 65878
IGNhcHN1bGVz 65879
IHNoaW5lcw== 65880
IGNyYWZ0c20= 65881
c3ViamVjdHM= 65882
ICAgICAgICAgICANCg== 65883
5LiN6IO95Li656m6 65884
IFNjaHdhcnR6 65885
cmV1 65886
IG1hZHJpZA== 65887
LnBlbmRpbmc= 65888
IExJTg== 65889
IHVuc3Q= 65890
CW12 65891
IHZpdmFzdHJlZXQ= 65892
IHNwb2ls 65893
w7hq 65894
64u5 65895
IGJ1ZW5h 65896
IGRpZ2l0YWxXcml0ZQ== 65897
c3Vicw== 65898
IFVOSVZFUlM= 65899
IFN1aWNpZGU= 65900
PEd1aWQ= 65901
LmVsZW0= 65902
X2NvbnN0cnVjdA== 65903
IGFtaWRzdA== 65904
IOuP 65905
LWVzdGVlbQ== 65906
IEludGVncml0eQ== 65907
LmZtbA== 65908
T3V0T2ZCb3VuZHNFeGNlcHRpb24= 65909
LVNlbWl0aXNt 65910
QmV0YQ== 65911
LWdvaW5n 65912
U2VnbWVudHM= 65913
IE1hZQ== 65914
IFBlcnNvbmFsaXR5 65915
dXJiYXRpb24= 65916
5Y+z 65917
IHNlcnZpY2luZw== 65918
IGJpcG9sYXI= 65919
X1NUQUdF 65920
LkpQRw== 65921
Jyl9fSI+ 65922
aXNobHk= 65923
SVZFUlk= 65924
IEluc3BpcmVk 65925
LnNlcnY= 65926
KGRhdGFz 65927
IGRpdmlkZXM= 65928
PFJlYWw= 65929
dmVydHVyZQ== 65930
IG1vdGl2YXRpb25z 65931
dmVydGU= 65932
RU5DSA== 65933
ZmRz 65934
IHJldm9sdA== 65935
d2VidG9rZW4= 65936
aW5zdGVhZA== 65937
CW9wdA== 65938
IE1hcmlqdWFuYQ== 65939
X2FkYw== 65940
YmFv 65941
W1NlcmlhbGl6ZUZpZWxk 65942
IGdyYWZmaXRp 65943
LWFvcw== 65944
ZW1pYWg= 65945
IGbDrXM= 65946
IGV0aGlj 65947
J2FsbA== 65948
OmtleQ== 65949
65Ok 65950
IHJlc3RyaWN0aW5n 65951
IFhIVE1M 65952
ZXJlbw== 65953
dW5kb3M= 65954
CWVuZGlm 65955
WzosOiw= 65956
IHN0ZWhlbg== 65957
YWtoaXI= 65958
IGp1aWNlcw== 65959
ZGF0YVNvdXJjZQ== 65960
X21r 65961
LmRlbGV0ZWQ= 65962
Q29uZ3Jlc3M= 65963
aW1tZWw= 65964
RWxlY3RyaWM= 65965
YW9z 65966
IE92ZXJsYXk= 65967
IEFDTFU= 65968
cm5k 65969
ZXNzZXM= 65970
IEx1eGVtYm91cmc= 65971
cGFyc2VGbG9hdA== 65972
IGd1dHM= 65973
Y2xhc3NpZmllZA== 65974
IGRlZlN0eWxl 65975
IFRjcA== 65976
cGVhdGluZw== 65977
Q2hhcnRz 65978
X3Vy 65979
X2xhdGVzdA== 65980
KSEK 65981
Y2F0aW9u 65982
LkdldGVudg== 65983
KGxvb3A= 65984
IHVubA== 65985
X2R0eXBl 65986
emXFhA== 65987
KEpOSUVudg== 65988
LmZldGNob25l 65989
IHNpZ21vaWQ= 65990
IE9MRA== 65991
IE1pbmlzdA== 65992
7YE= 65993
IEvDtg== 65994
IGZyYWN0aW9ucw== 65995
IHNpeg== 65996
PT09PT0K 65997
LlByaW50V3JpdGVy 65998
X0FkZHJlc3M= 65999
IEF1ZGllbmNl 66000
Q29tbw== 66001
IEJydWlucw== 66002
LmFjdGl2aXRpZXM= 66003
IGFuY2VzdHJ5 66004
0YPQu9GM0YI= 66005
CVJldHVybg== 66006
cHVu 66007
IGdyYXBlcw== 66008
SUxvZw== 66009
IGRpam8= 66010
IFBlcmtpbnM= 66011
IFZNd2FyZQ== 66012
X2F1dGhlbnRpY2F0ZWQ= 66013
w650cmU= 66014
b3ZlcndyaXRl 66015
IEhk 66016
IGdhbGF4aWVz 66017
YWNodQ== 66018
SHJlZg== 66019
W0Q= 66020
IHBhcmNl 66021
TGF0TG5n 66022
X3BhdHRlcm5z 66023
IFNIT1JU 66024
IHJ1bW91cnM= 66025
Y291bnR5 66026
IEdSSUQ= 66027
IFsv 66028
IFNreXJpbQ== 66029
RGF0YUdyaWRWaWV3VGV4dEJveENvbHVtbg== 66030
IGNlbg== 66031
IGN1Y3VtYmVy 66032
LklOVA== 66033
X0NPTkZJUk0= 66034
IGN0bA== 66035
cGVybA== 66036
aWxsb3M= 66037
IEFDQQ== 66038
IEdlb3JnZXRvd24= 66039
X2NhbGxhYmxl 66040
IENyYWZ0cw== 66041
L2Nv 66042
IGluYm91bmQ= 66043
IFRlY2huaXF1ZXM= 66044
c2V0Q2hlY2tlZA== 66045
IHBuYW1l 66046
Y29tcHV0 66047
U3RlZWw= 66048
IGhhbmRoZWxk 66049
IEFsYW0= 66050
YWJzdHJhY3RtZXRob2Q= 66051
6aKR 66052
SU5Z 66053
YmF0dGxl 66054
X0VWVA== 66055
IGNldXg= 66056
IGF0b2Y= 66057
IEFieXNz 66058
X3ZhbGlkYXRvcg== 66059
IGhhaXJz 66060
VmVydGV4QXR0cmliQXJyYXk= 66061
IGNvbW1vbnM= 66062
LWJpbmQ= 66063
TXVp 66064
IGNvc21ldGljcw== 66065
IG1pcmFj 66066
Lm1hcmtlcg== 66067
U0NBTEU= 66068
LldvcmQ= 66069
LXVs 66070
IERpdmVyc2l0eQ== 66071
IEREUw== 66072
LmN3ZA== 66073
X3h5eg== 66074
IENvbXB1dGVz 66075
KGNsaWNrZWQ= 66076
VEVNUExBVEU= 66077
IHpvbmluZw== 66078
IGZpbnM= 66079
IFBK 66080
ZXh0Vmlldw== 66081
Q2hhcmFjdGVyaXN0aWM= 66082
aWdhdG9ycw== 66083
IHByb2NsYWlt 66084
IHByaXN0aW5l 66085
IGRhdGFzdG9yZQ== 66086
IGRpc2NvdXJhZ2U= 66087
X25zZWM= 66088
IG5pbmV0ZWVudGg= 66089
IGNlbHVp 66090
Sm9uYXRoYW4= 66091
IGFtcGg= 66092
IENyb3NzaW5n 66093
IEh1bWFucw== 66094
IEJvb2tlcg== 66095
w6JjZQ== 66096
Z2V0UG9zdA== 66097
IE1vbnRlcg== 66098
IEZsYXZvcg== 66099
TWVkaWFUeXBl 66100
IuKAlA== 66101
IEFyY2hhZQ== 66102
QHJldHVybg== 66103
LWF3YXJl 66104
b3J1 66105
LVRoZQ== 66106
YW1wbGVk 66107
S0Y= 66108
LlRlbXA= 66109
IERyZQ== 66110
KHtf 66111
cG9seWdvbg== 66112
IMOm 66113
IERlZmVuZGVy 66114
77yY 66115
Xyks 66116
LlVuc3VwcG9ydGVk 66117
X14o 66118
KElEQw== 66119
JHY= 66120
IHdvcnRobGVzcw== 66121
IFNFRw== 66122
aWxpa2k= 66123
Tm9BcmdzQ29uc3RydWN0b3I= 66124
IE1lcmNo 66125
IG5vcA== 66126
IGZvcmdldHRpbmc= 66127
IGRvcGFtaW5l 66128
anVhbA== 66129
ZW9u 66130
IFJlYXNvbnM= 66131
c29ydEJ5 66132
KCctJyw= 66133
LXN5bmM= 66134
ZWNlZG9y 66135
S1A= 66136
KGNvb3Jk 66137
KENoYXQ= 66138
XCQ= 66139
ZXN0cmluZw== 66140
Y2Vm 66141
LmhhbmRsZUVycm9y 66142
24zYrw== 66143
0YHQug== 66144
IGhhbmRj 66145
ZWxpamtl 66146
IFNwaXI= 66147
IEJ1Y2tz 66148
IFFSZWN0 66149
U2V0Rm9udA== 66150
LmV4ZWNTUUw= 66151
OjoKCg== 66152
IHN1aWNpZGFs 66153
c2VlaW5n 66154
IGNpZGVy 66155
UHJvZ3Jlc3NEaWFsb2c= 66156
IG1vbGRpbmc= 66157
CXRyYWNl 66158
IGVtcGhhc2l6ZXM= 66159
IG11bHRpcGxlcw== 66160
X1BU 66161
X091dHB1dA== 66162
Y2FwaXRhbA== 66163
TmVlZHM= 66164
X0RJUkVDVElPTg== 66165
LmlzVmlzaWJsZQ== 66166
IHJlc3Rl 66167
IG92YXI= 66168
KHNoYXJlZA== 66169
LWNvbXBvc2U= 66170
LmJhY2t3YXJk 66171
CXJlY3Q= 66172
QW1hemluZw== 66173
LmRpZFJlY2VpdmVNZW1vcnlXYXJuaW5n 66174
U0VSVklDRQ== 66175
IEluanVyeQ== 66176
QnJhaW4= 66177
IGF1c2dl 66178
KHBl 66179
Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 66180
b3JwdGlvbg== 66181
X01BSUw= 66182
b2hh 66183
IHNubw== 66184
IGJvaWxlZA== 66185
aWxkZW5hZmls 66186
IFdlbGZhcmU= 66187
IFF1YXJ0eg== 66188
IGNhcHRjaGE= 66189
IFdFU1Q= 66190
IE1hemU= 66191
IGdyYXBoZW5l 66192
IHBlcms= 66193
IG1pc3RyZXNz 66194
LkZvcm1TdGFydFBvc2l0aW9u 66195
IGV4cGVyaW1lbnRhdGlvbg== 66196
KikoKA== 66197
IGJyb2FkY2FzdHM= 66198
IHJlbW92ZUFsbA== 66199
CUdVSQ== 66200
5YOP 66201
YWJjZGVmZ2hpamtsbW5vcA== 66202
IHVuaW5z 66203
QVNQ 66204
K3c= 66205
bXVy 66206
IGRpbmU= 66207
IGFyb3U= 66208
IGVzY2FwZXM= 66209
IFRvYmFjY28= 66210
Lm5hbWVk 66211
IFBhdHJlb24= 66212
X0ZBQ0U= 66213
X3NwaW5uZXI= 66214
bW92aW5n 66215
X3ZvdGVz 66216
T2hpbw== 66217
LmVuY29kaW5n 66218
RGVncmVlcw== 66219
IlRv 66220
IHByZXN0aWdl 66221
b3NwaGVyZQ== 66222
IExhbmNhc3Rlcg== 66223
77yX 66224
IG9uQ2FuY2Vs 66225
IEhJUw== 66226
0J7RiNC40LHQutCw 66227
IG9yY2hlc3Ry 66228
IHJlZnJlc2hlZA== 66229
RGF0aW5n 66230
KG11 66231
IEplZA== 66232
IEVkaXRvcmlhbA== 66233
U2V0QnJhbmNoQWRkcmVzcw== 66234
Q3BwVHlwZURlZmluaXRpb24= 66235
IEJyb254 66236
IGdhdGhlcmluZ3M= 66237
ICcnDQo= 66238
cG9zdERhdGE= 66239
IEZyYW0= 66240
Q2xpcGJvYXJk 66241
IFhQYXRo 66242
cmF5cw== 66243
IGJha2VyeQ== 66244
IHJvd0NvdW50 66245
IGxvd3M= 66246
YW5kV2hlcmU= 66247
X3ZlcnNpb25z 66248
IEd1bm4= 66249
IHdlZXI= 66250
IGNvbnRleHR1YWw= 66251
IEtleUNvZGU= 66252
IFNhc2thdGNoZXdhbg== 66253
IFBoaWxseQ== 66254
IE1vdXRo 66255
IGRvUG9zdA== 66256
IHBlcmNlbnRpbGU= 66257
IGJ1ZmZlclNpemU= 66258
KGZyZXE= 66259
JHNtYXJ0eQ== 66260
aWVydGU= 66261
aXNzYW50 66262
X2Zwcw== 66263
IGludGltYWN5 66264
X2Jvb2tpbmc= 66265
IGRlY29tcG9zaXRpb24= 66266
dW5pY2lwaW8= 66267
IE5TSW5kZXhQYXRo 66268
IEtS 66269
IHR1cmJpbmU= 66270
LXByb20= 66271
X0NBUlQ= 66272
KGNvb3Jkcw== 66273
ZWNvbQ== 66274
IGNvd2FyZA== 66275
IHdheXBvaW50 66276
LUNvbGE= 66277
IHByb2ZvdW5kbHk= 66278
IEVSUA== 66279
Ym91bmRhcnk= 66280
IHBvb3Jlcg== 66281
L2V4YW1wbGU= 66282
IHJlbmNvbnRy 66283
IG5pY2Vy 66284
54E= 66285
LWNoYWlu 66286
IEVudGl0eVN0YXRl 66287
IGdyYWRpbmc= 66288
QUxJR04= 66289
IFBpY2tz 66290
LmFr 66291
LXZlY3Rvcg== 66292
IEVudHJpZXM= 66293
IFNlcmdpbw== 66294
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 66295
T0RC 66296
IOW9 66297
IGNvcm9uYXJ5 66298
IHNoYXZlZA== 66299
IGFxdWU= 66300
ZW1wbG95ZXI= 66301
IHBhcmNo 66302
IG1lYXN1cmFibGU= 66303
IGJvaXM= 66304
am9pbmluZw== 66305
IHZvbGNhbm8= 66306
Ok0= 66307
LnRocmVzaG9sZA== 66308
IERveWxl 66309
dmVyYm9zaXR5 66310
IOKWug== 66311
IHNwb3VzZXM= 66312
IHJlc3VtZXM= 66313
TmF0 66314
ek0= 66315
X0VuYWJsZQ== 66316
IFVTRUQ= 66317
IENhcmV5 66318
CWZw 66319
UGF0cmljaw== 66320
IE9zdw== 66321
UG9zc2libGU= 66322
LmxlYWRpbmc= 66323
YWhydW5n 66324
4pmqCgo= 66325
CQkJCQkJCQkJIA== 66326
44CC44CM 66327
LmFkZEVkZ2U= 66328
IGVjeA== 66329
J0xCTA== 66330
IFRDTA== 66331
IGJpcnRocw== 66332
IHRoZWF0cmljYWw= 66333
IHBpag== 66334
Z3JlYXRlcg== 66335
IEZTdHJpbmc= 66336
QkVE 66337
7ZmY 66338
LkNhc3Q= 66339
Q1g= 66340
L01haW4= 66341
cGVhdGVy 66342
IHBlcnN1YXNpdmU= 66343
Y29udG8= 66344
eGxzeA== 66345
X0FCUw== 66346
IEJ1bg== 66347
bWFuYWdlZFR5cGU= 66348
0LPQvg== 66349
IFNjYWxh 66350
cmFkb3I= 66351
IHJlY29nbml6YWJsZQ== 66352
dHJ1 66353
IHRq 66354
XE1hcHBpbmc= 66355
X0JPQVJE 66356
IHRvSnNvbg== 66357
IGJvd2Vs 66358
KWQ= 66359
J30p 66360
KGhXbmQ= 66361
aHJz 66362
Y2FudA== 66363
X18oKQoK 66364
IGludGVycm9nYXRpb24= 66365
bGljYXRpdmU= 66366
CQkJCgo= 66367
IFR3aW5z 66368
IEFP 66369
QmlyZA== 66370
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 66371
cGVyaGFwcw== 66372
b2ZpbGU= 66373
IHBlbmM= 66374
IHRyZWVOb2Rl 66375
IHRvcGljYWw= 66376
LXByaXZhdGU= 66377
54m5 66378
IERpc2N1c3M= 66379
IGRlc24= 66380
UnVh 66381
LlZFUlRJQ0FM 66382
44CN44Go 66383
SUZPUk0= 66384
IGNvdXJ0eWFyZA== 66385
INGB0LXRgA== 66386
ICMjIwo= 66387
IGVtcG93ZXJpbmc= 66388
IEZhY2lsaXRpZXM= 66389
XCIsXA== 66390
vZQ= 66391
Ok9iamVjdA== 66392
IFZvdGVz 66393
aXNlbA== 66394
IGV1Y2g= 66395
b3JzdA== 66396
KENsb25l 66397
LmNvb2tpZXM= 66398
JHRtcA== 66399
KGluZGljZXM= 66400
ZXJnZW5jeQ== 66401
IHBsYWd1ZWQ= 66402
IERpYQ== 66403
eWNsaWM= 66404
fSkp 66405
6rK9 66406
IGR1ZWw= 66407
IGhldGVyb3NleHVhbA== 66408
LmFkZENvbXBvbmVudA== 66409
U0VDUkVU 66410
bGVybw== 66411
Y29uc3RyYWludHM= 66412
IGdldENvbm5lY3Rpb24= 66413
IExlYmVucw== 66414
IFBvbg== 66415
IENocm9uaWNsZXM= 66416
ICAgICAgICAgICAgICAgICAgICAgICAgDQo= 66417
IE1vdXJpbmhv 66418
IG9jY3VwYW5jeQ== 66419
X3NsYXZl 66420
T1JJWkVE 66421
CVk= 66422
LmhpZ2hsaWdodA== 66423
X3NlbnNpdGl2ZQ== 66424
IHNwZWN0cm8= 66425
LmVuY3J5cHQ= 66426
IHNwb2lsZXJz 66427
LlNpemVNb2Rl 66428
IHByb2Zlc3Npb25hbGlzbQ== 66429
Pklu 66430
RXhwaXJlcw== 66431
QXU= 66432
IEhWQUM= 66433
cmVsYXRpb25z 66434
IEFUSw== 66435
X0dFTkVSQUw= 66436
IFNpZ2h0 66437
IGtpdGNoZW5z 66438
OlJlZ2lzdGVy 66439
IGVkbQ== 66440
IHRvbGVyYXRlZA== 66441
IFNFU1NJT04= 66442
aWVyeg== 66443
IElOU1Q= 66444
LnBhdGhz 66445
IHBlcnBldHJhdG9ycw== 66446
ZWJw 66447
cGVjdGluZw== 66448
ZWR1Y2F0ZWQ= 66449
IFBpb25lZXI= 66450
X1JFVg== 66451
IGJ1c3R5 66452
c3RhdHVzZXM= 66453
UmVzcG9uZA== 66454
c2h1ZmZsZQ== 66455
IFRpbmRlcg== 66456
RXhhY3RseQ== 66457
aWxsaXNlY29uZA== 66458
INC30L3QsNGH0LXQvdC40LU= 66459
KEFjY291bnQ= 66460
LiY= 66461
aXpy 66462
YXNzdW1pbmc= 66463
CU9wdGlvbmFs 66464
U2VuaGE= 66465
IGVucm9s 66466
dHVy 66467
IGFycm9nYW50 66468
IEpPYmplY3Q= 66469
b2xpdGhpYw== 66470
bWFwcGVk 66471
IHRpcHBlZA== 66472
LlVQREFURQ== 66473
w6htZXM= 66474
R05VQw== 66475
V1g= 66476
IG1vbmtz 66477
LmJvcmRlcldpZHRo 66478
IFNodXRkb3du 66479
IEhhcm1vbnk= 66480
Y2xhc3NpZmljYXRpb24= 66481
IGRlcXVldWVSZXVzYWJsZUNlbGw= 66482
IF07DQo= 66483
Lkdlbg== 66484
IGxhdm9ybw== 66485
IExlb25hcmRv 66486
ICYp 66487
IGRlcG9pcw== 66488
IFZvbHQ= 66489
RXRo 66490
IExlb25l 66491
IE5lZGVybGFuZA== 66492
IEVYVFJB 66493
UmVzb2x2ZWQ= 66494
IHBlbmluc3VsYQ== 66495
X1ZN 66496
R2Vy 66497
2KfYrw== 66498
LnByb21wdA== 66499
LmFsaWdu 66500
aW5nZ2E= 66501
ZmlsbXM= 66502
SEFORExF 66503
IGNhcnRz 66504
KFNvbWU= 66505
PEF1ZGlv 66506
IGVubGFyZ2VtZW50 66507
IGdyb2Nlcmllcw== 66508
LWhvbGRlcg== 66509
IGlycml0YXRpb24= 66510
Q29tbXVuaWNhdGlvbg== 66511
IHByaW1hcmllcw== 66512
aHR1Yg== 66513
X2luaWNpbw== 66514
IGNvb3JkaW5hdGluZw== 66515
KHF1 66516
IGZhaXM= 66517
IHZpc3Rv 66518
Z3VpZGVk 66519
IHZsYW4= 66520
IGVzcHJlc3Nv 66521
w6h0ZQ== 66522
c2VoZW4= 66523
X3Blbmc= 66524
IHJvb2Zpbmc= 66525
IEFsaXZl 66526
QXhpc1NpemU= 66527
IHN0dW4= 66528
IHJlc3RlZA== 66529
dWxsZXRz 66530
IE1hbGF5c2lhbg== 66531
LFVuaXR5RW5naW5l 66532
IGVudnk= 66533
J107DQoNCg== 66534
IE9zdA== 66535
X2p1bXA= 66536
IGNvbnRyYXNlw7Fh 66537
Ing= 66538
CVBhZ2U= 66539
KVsi 66540
IFNJUA== 66541
IEdlb2dyYXBoaWM= 66542
IGNhdWN1cw== 66543
X1RFUg== 66544
4oCdOw== 66545
UG9zdEV4ZWN1dGU= 66546
aW1zaG93 66547
IENPTVBBTlk= 66548
IE5lYWw= 66549
IEhlYXJpbmc= 66550
KGFjdG9y 66551
Qmlk 66552
LlBS 66553
LlByb2R1Y3Rz 66554
IEVtbQ== 66555
IOab 66556
IHB1bHNlcw== 66557
X0VW 66558
L2V4cA== 66559
X21vdGlvbg== 66560
IGdiYw== 66561
IG5hdmlnYXRpb25Db250cm9sbGVy 66562
IENvdXJ0cw== 66563
IEljb25EYXRh 66564
d3U= 66565
X3Jm 66566
IFJhZ2U= 66567
LWZsYXQ= 66568
IEhpbXNlbGY= 66569
X2NodW5rcw== 66570
IG92ZXJzaA== 66571
IGNpZg== 66572
KElz 66573
cGVha2Vy 66574
IENQVXM= 66575
aXJlY3Rvcg== 66576
LHRpdGxl 66577
LnNldERlc2NyaXB0aW9u 66578
IGVhcnRocXVha2Vz 66579
IHdu 66580
Z2x5cGg= 66581
dWx1bWk= 66582
IHNwZWVkeQ== 66583
IGVzcGFjaW8= 66584
IGVtdWxhdGU= 66585
IFwiJA== 66586
X0lORg== 66587
Y2FsbG9j 66588
LXF1ZXJ5 66589
KHZhbHM= 66590
IHNlYWI= 66591
IGhhdm9j 66592
IEludGVyc3RhdGU= 66593
IHRyaWFuZ3VsYXI= 66594
YmluZGluZ3M= 66595
CQkJCQkgICAgIA== 66596
IAkg 66597
YmNyeXB0 66598
IGNyZWRpdG9ycw== 66599
IHNlbWlm 66600
bGxl 66601
aWVuemE= 66602
IEtlbGxlcg== 66603
IG1vbnN0cg== 66604
IE1hcmNvcw== 66605
KHJlaW50ZXJwcmV0 66606
IGhpdmU= 66607
U2Ny 66608
X2hyZXN1bHQ= 66609
IOyhsA== 66610
IFNxbERhdGFSZWFkZXI= 66611
YW5ub3VuY2U= 66612
X3ByZWZlcmVuY2Vz 66613
IHRydXN0cw== 66614
RXJvdA== 66615
LXdvcmtlcg== 66616
IHR3ZWVu 66617
IFN0cmVldHM= 66618
gq3soJw= 66619
IEZyYW56 66620
IOKApi4= 66621
VUlUZXh0RmllbGQ= 66622
LmdldEl0ZW1z 66623
IHRvbHVh 66624
4oCcT3Vy 66625
IHPhu5E= 66626
IHZpcnR1ZXM= 66627
IHBvdWx0cnk= 66628
PXJvdw== 66629
Y29kZWQ= 66630
Tm9TdWNo 66631
IGtvZA== 66632
bHNp 66633
IGtldG8= 66634
IGdyb3VwTmFtZQ== 66635
YXNu 66636
IHVuY29tcA== 66637
IHRleHRpbGU= 66638
dG9vbFN0cmlw 66639
LlBvcGVu 66640
IHByb3N0aXR1dGU= 66641
IHByb21vdGVy 66642
Ijt9Cg== 66643
IGNvbGxpZGVy 66644
QnJva2Vy 66645
ZGF0YXNldHM= 66646
CU5TU3RyaW5n 66647
YW5nbGVy 66648
UklFUw== 66649
YXRvbXM= 66650
IHJlbmRleg== 66651
YXBv 66652
IOuE 66653
Lmdj 66654
IFNPTUU= 66655
IGZnZXRz 66656
R0xF 66657
IHphbA== 66658
IE9wcG9zaXRpb24= 66659
aGFuZGxlU3VibWl0 66660
X21hdGg= 66661
IHNwcmU= 66662
IHNob3J0ZW5lZA== 66663
IGNhdmVz 66664
U01T 66665
LWNvbnNjaW91cw== 66666
IFNhdmVz 66667
LkJhY2tncm91bmRJbWFnZUxheW91dA== 66668
IGVsZWN0cm9tYWduZXRpYw== 66669
KGl0ZXJhdG9y 66670
IHVuYmU= 66671
amVjdG9yaWVz 66672
IG1lZGlhbnRl 66673
IMOubnQ= 66674
Iiwt 66675
IEFTTQ== 66676
6K6w5b2V 66677
IGNvbmZpbmVtZW50 66678
4oCmCgoK 66679
RXhjZXB0aW9ucw== 66680
LW1ham9y 66681
IFZhbmlsbGE= 66682
IExPQ0FUSU9O 66683
IGVsdXNpdmU= 66684
VUFSSU8= 66685
IElOTElORQ== 66686
IHByb2R1Y3ROYW1l 66687
X3F1ZXJpZXM= 66688
Li4uIjsK 66689
IFhpYW8= 66690
V2luZG93VGl0bGU= 66691
bGV0dGVz 66692
IHBlcnBldHVhbA== 66693
U2V2ZXJpdHk= 66694
IEFjaGlldmVtZW50 66695
w6JuY2lh 66696
IHJlbWluZGVycw== 66697
c29ydGFibGU= 66698
IGFmZm9yZGVk 66699
IGluZmx1ZW5jaW5n 66700
IFR1bm5lbA== 66701
LmxlYXJuaW5n 66702
IFF1w6k= 66703
cGhldGFtaW5l 66704
LkJBRA== 66705
Lm1ldGFtb2RlbA== 66706
LWRldmljZQ== 66707
IEtvbnRha3Q= 66708
4pSB4pSB 66709
LXN1bW1hcnk= 66710
KCc8Pw== 66711
KTw9 66712
IHdpc2VseQ== 66713
X290 66714
Om1vZGVs 66715
IFVX 66716
IE9wZW5TU0w= 66717
IEpwYVJlcG9zaXRvcnk= 66718
Q29uZXhpb24= 66719
VE9U 66720
LmNyZWF0ZWRBdA== 66721
KHRyYWluaW5n 66722
IGJpc2hvcHM= 66723
IHZlbnR1cmVz 66724
LkVucXVldWU= 66725
IFRoZXJtYWw= 66726
IEJyZXdlcnk= 66727
b3Rlbg== 66728
IEZhdGFs 66729
X3N1cHBseQ== 66730
IGNvbmRpdGlvbmVk 66731
IHN1cGVyaW9yaXR5 66732
IElicmFoaW0= 66733
IGNvcnBv 66734
dW91c2x5 66735
IFByYWN0aWNhbA== 66736
Ly9b 66737
IEFmcmljYW5z 66738
IEJhaHJhaW4= 66739
IHN0ZXJpbA== 66740
IENsYXNzTm90Rm91bmRFeGNlcHRpb24= 66741
LlJlZ2lvbg== 66742
IHRyYW5zaXRpb25hbA== 66743
IGludGVycHJldGluZw== 66744
LlNvdW5k 66745
IGZyb250YWw= 66746
IGhhcnZlc3Rpbmc= 66747
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4= 66748
YXRhaXJl 66749
Lkh0dHBTdGF0dXM= 66750
S00= 66751
IEVyb3Rpc2NoZQ== 66752
IGVyb3Rpc2tl 66753
RmlnaHQ= 66754
UGFja2FnZU5hbWU= 66755
IENBQ0hF 66756
d2luZ0NvbnN0YW50cw== 66757
IFppbW1lcm1hbg== 66758
L2Nhcg== 66759
IFF1cmFu 66760
TWV0YWw= 66761
IHVzZXJNYW5hZ2Vy 66762
IG1hc3Rlcnk= 66763
KFVVSUQ= 66764
IHZpZXdXaWxsQXBwZWFy 66765
IHN1bW1lZA== 66766
KC0o 66767
ICAgICAgIAoK 66768
VGFrZW4= 66769
IGNsb2Nrd2lzZQ== 66770
IENhZsOp 66771
KGxldHRlcg== 66772
IENyb3NzUmVm 66773
IEFzdG9u 66774
IEFzc2VtYmx5VmVyc2lvbg== 66775
6Z2e 66776
bnRz 66777
ICQoJ1s= 66778
X1JBVElP 66779
aWNpZW50ZQ== 66780
IHJpY2h0aWc= 66781
IHBlZGln 66782
KGl4 66783
0YHRi9C7 66784
QXNzaWduYWJsZUZyb20= 66785
Ym91bmRlZA== 66786
IGFsa2Fs 66787
X3ByaWNlcw== 66788
IGfFgg== 66789
YW5jaGlzZQ== 66790
X3JlY2VpdmVy 66791
SUdBVElPTg== 66792
X3B1bGw= 66793
IFN0YXRpc3RpY2Fs 66794
X3Rvb2xiYXI= 66795
YW1pZGU= 66796
IEFzeW5jVGFzaw== 66797
cmV0YQ== 66798
IOyi 66799
IFJFQUxMWQ== 66800
IGJ1cnN0cw== 66801
IElucXVpcnk= 66802
IGJpZ290 66803
c2FuaXRpemU= 66804
IEhvbWVy 66805
UXXDqQ== 66806
IFJvdXRpbmc= 66807
LmNvbGxlY3Rpb25WaWV3 66808
IEJpbGxpb24= 66809
U1RSVUNUT1I= 66810
LmVqYg== 66811
IGVuY2g= 66812
LnNldFRpbWVvdXQ= 66813
UnVi 66814
LXJvYWQ= 66815
Lm91dHB1dHM= 66816
Y29udGVzdA== 66817
IHNwaGVyZXM= 66818
IHJlc3VycmVjdA== 66819
Ii4i 66820
IElyaXM= 66821
IOya 66822
IFhL 66823
IFJhcml0eQ== 66824
IElTZXJ2aWNl 66825
YXRoYQ== 66826
IOWH 66827
IHByZXZhaWw= 66828
CXBw 66829
Lkxv 66830
Z2V0V2lkdGg= 66831
IHd3 66832
IHdpY2h0aWc= 66833
QEdldHRlcg== 66834
IEpheXM= 66835
IHNwZWN1bGF0aXZl 66836
KGF0dA== 66837
IHRlZGlvdXM= 66838
IHNjcmF0Y2hlcw== 66839
IHBlbMOtY3Vs 66840
IGJvcm91Z2g= 66841
IG3Dsw== 66842
UmVwcmVzZW50 66843
YXRvcml1bQ== 66844
KENhbWVyYQ== 66845
IGNvbHVtbk5hbWU= 66846
IHJlaXRlcmF0ZWQ= 66847
IENhc3Rpbmc= 66848
LmdldEhlYWRlcg== 66849
IOKAnFs= 66850
IEp1aWNl 66851
Y2h1 66852
LkhUTUw= 66853
IEFudHdvcnQ= 66854
R0x1aW50 66855
CUl0ZXJhdG9y 66856
IEFOQUw= 66857
IHVucG9wdWxhcg== 66858
KExvY2FsZQ== 66859
IG1pdGlnYXRpb24= 66860
IGFkcmVz 66861
4bq3 66862
fSx7Cg== 66863
IFNjaHdhcg== 66864
X1BBSVI= 66865
PigpLAo= 66866
b3V2 66867
IEFsZg== 66868
eEVG 66869
55yB 66870
IGVzY3Jp 66871
TE9VUg== 66872
U0VMRg== 66873
IFRtYXg= 66874
VHJl 66875
bG90cw== 66876
ICguLi4p 66877
XSsk 66878
IGFtZXJpYw== 66879
L3JlZmVyZW5jZQ== 66880
IE9keXNzZXk= 66881
IE1pbmVz 66882
IGFnb3Jh 66883
IHByb3BoZWN5 66884
IE9wcG9ydHVuaXRpZXM= 66885
cHJvZmVzc2lvbmFs 66886
KHByb3h5 66887
cGhhbnVtZXJpYw== 66888
IEVkaXRlZA== 66889
b2xvZ25h 66890
LmlzT3Blbg== 66891
KHZlcnRpY2Vz 66892
IFJpY2t5 66893
X292ZXJsYXA= 66894
Pjs= 66895
LkRPTQ== 66896
e31f 66897
IENPTVBVVA== 66898
cmVkaXJlY3RUbw== 66899
IHNoYWtlbg== 66900
IHJhdGlvbg== 66901
IG5lbGw= 66902
X2Jj 66903
IE5lcg== 66904
YW5kUmV0dXJu 66905
IGVyZWN0ZWQ= 66906
Q2hpZWY= 66907
IGRpbmVybw== 66908
IGphc21pbmU= 66909
LS0tLS0tLS0tLS0tLQo= 66910
ZmFybQ== 66911
IEhhdGU= 66912
VEFTSw== 66913
QU5ORVI= 66914
J11dXQo= 66915
IE5pZ2Vs 66916
aGliaXQ= 66917
IFFUZXh0 66918
Lkxlbg== 66919
IHRlxbw= 66920
c2xpZGVz 66921
ZmVsdA== 66922
IFJFVg== 66923
X2hvbGQ= 66924
IENvdXBsZQ== 66925
ZXNjYXBlZA== 66926
LWV4cG9ydA== 66927
Pkk= 66928
ZXdpc2g= 66929
KEFwaQ== 66930
ICghWw== 66931
Tm91cw== 66932
T1RPUg== 66933
IHNlYWxpbmc= 66934
V2ll 66935
IGthbm5zdA== 66936
K3htbA== 66937
IG14QXJyYXk= 66938
IGFkbWlyYXRpb24= 66939
Lm5i 66940
IGpld2Vs 66941
LlRlYW0= 66942
IHByb3NlY3V0ZQ== 66943
LnhtbGJlYW5z 66944
Y2h3 66945
KGJhY2tncm91bmQ= 66946
IEF2aXY= 66947
CWZpbGw= 66948
IGRpc3Bhcml0eQ== 66949
4Lo= 66950
X0FQUEVORA== 66951
IFB2UA== 66952
44OQ 66953
IFZpdmU= 66954
IGdyYW5kc29u 66955
LmFkZEVsZW1lbnQ= 66956
QXRvbWlj 66957
IHByaW1hcnlLZXk= 66958
IGNvbnRpbmVudHM= 66959
IEZ1Y2tpbmc= 66960
JScK 66961
QG1haWw= 66962
IGN1bHR1cmFsbHk= 66963
YW5nYW5lc2U= 66964
7KCE 66965
Zm9sbG93ZXJz 66966
IHVybg== 66967
IHJhY2tz 66968
IFNBRkU= 66969
Ly8NCg0K 66970
KCIvew== 66971
X0lOSVRJQUw= 66972
X1Jlc3BvbnNl 66973
RXZlbnREYXRh 66974
Jz4k 66975
c3RhcnRz 66976
4Kk= 66977
IHRoYWltYXNzYWdl 66978
IHNwZWNpYWxpemF0aW9u 66979
IOyEpOyglQ== 66980
ZWRv 66981
IGNvbXBlbnNhdGVk 66982
X2NoYXJzZXQ= 66983
fS57 66984
L2VudGl0aWVz 66985
X2Zr 66986
LS0tLS0tCgo= 66987
YXNjYXI= 66988
IGNlbGxGb3JSb3dBdEluZGV4UGF0aA== 66989
IFByb3Bvc2Fs 66990
IE90dG8= 66991
IF9fX19f 66992
ICIqIg== 66993
IHRvb2xraXQ= 66994
IGV4cGVjdGFuY3k= 66995
RG93bkxpc3Q= 66996
LWRh 66997
IHByb3ZvY2F0aXZl 66998
IG1laW8= 66999
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== 67000
KCgpPT57Cg== 67001
JGxpbms= 67002
aW5jYXJl 67003
IGljeQ== 67004
IEhpc3Q= 67005
QWNjZXB0ZWQ= 67006
IGNsb25lcw== 67007
IFFB 67008
IGNvbmZvcnQ= 67009
IHByb3ByaW8= 67010
IFZvZw== 67011
KG1hcms= 67012
X1NlYXJjaA== 67013
IGVuZHdoaWxl 67014
ICQj 67015
44GX44GL 67016
X0xU 67017
SW5zdGFuY2VJZA== 67018
YmFyZA== 67019
cm5l 67020
cmVnb3I= 67021
IG5vcmdl 67022
XDo= 67023
0YDRg9C3 67024
LmJ0bkFkZA== 67025
IHBpbGxvd3M= 67026
IFBhcmFtZXRlckRpcmVjdGlvbg== 67027
SGFuZGxlcw== 67028
IGRlYWxpbmdz 67029
IGNvbnZleA== 67030
IENoYXJpdHk= 67031
Lk51bWVyaWNVcERvd24= 67032
IFNrZWxldG9u 67033
IFp1Y2tlcmJlcmc= 67034
ZXNlbg== 67035
IEZBQQ== 67036
X3N0ZQ== 67037
IGh1bWlk 67038
am0= 67039
Y2hn 67040
LmdldExvY2Fs 67041
IHRhbmRlbQ== 67042
aXN0bGVz 67043
X210 67044
LmFjY291bnRz 67045
IEluc3BlY3Rpb24= 67046
IEZyYXVk 67047
IGvDvA== 67048
IHN5bmNocm9ub3Vz 67049
IFJpY2FyZG8= 67050
IEh1ZQ== 67051
IENvbm5lY3Rpb25z 67052
SU1FTlQ= 67053
b2NoYXN0aWM= 67054
XGRhdGE= 67055
IEVudGVycHJpc2Vz 67056
LXNpbXBsZQ== 67057
IGltYWdlRGF0YQ== 67058
IFVtYg== 67059
LXNjcmlwdA== 67060
L2dlbmVyYWw= 67061
QVBU 67062
IFR1dA== 67063
aW1pemF0aW9u 67064
IGlkYWRl 67065
IEtlbQ== 67066
ZWxzaWY= 67067
LkFMSUdO 67068
IFRvcmllcw== 67069
IEJhc2ls 67070
b2dvbmFs 67071
aGFjaw== 67072
TnVsbE9yRW1wdHk= 67073
IiksCgo= 67074
44OD44OI 67075
ICclJw== 67076
X1JG 67077
ZWdvdA== 67078
LmFzcGVjdA== 67079
KFByb2plY3Q= 67080
TEVOR1RI 67081
cGxlbWVudGFyeQ== 67082
X3ByZWRz 67083
IEhvbGRz 67084
Y2Fycmllcg== 67085
CWxheWVy 67086
QXR0YWNoZWQ= 67087
LXByZXNpZGVudA== 67088
aW5kaA== 67089
J10uJyI= 67090
LkFDQ0VTUw== 67091
IENFTlRFUg== 67092
UXVhbGlmaWVk 67093
IG9zdHI= 67094
LlN5bWJvbA== 67095
dGFodW4= 67096
IExBTkc= 67097
X2J1c2luZXNz 67098
CVN0YXJ0 67099
ZXJyZQ== 67100
IGFzaGVz 67101
IEFkdmVydGlzZW1lbnQ= 67102
Lkhvdw== 67103
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 67104
IG9ibGl2 67105
IGJsZWVk 67106
IHN2bw== 67107
Lm5vZGVOYW1l 67108
IGl0ZW1OYW1l 67109
IEJBTks= 67110
w61jdWxvcw== 67111
IEVtbXk= 67112
IERvbWluaWNhbg== 67113
JylbJw== 67114
IHJlYWxsb2M= 67115
dWxzZXM= 67116
6L6T5Ye6 67117
IE9mZmVyaW5n 67118
64ql 67119
LXByb2dyYW0= 67120
INGB0L7QvtCx0Yk= 67121
TU9W 67122
IG5vZGVJZA== 67123
0LXQvw== 67124
Zmx1aWQ= 67125
IHRlYXNl 67126
w7hyZQ== 67127
IGNvbXJhZGVz 67128
IHVucmVsaWFibGU= 67129
IHBvc3RJZA== 67130
Z2V0SUQ= 67131
b2dyYXBocw== 67132
VGFuaw== 67133
IFFWRVJJRlk= 67134
IGZsb2F0ZWQ= 67135
X1RISVM= 67136
Y2ltaWVudG8= 67137
IE5pY2Fy 67138
c2hy 67139
Qm91bmRpbmdCb3g= 67140
IGlub3JkZXI= 67141
IEdsb3Nz 67142
V2l0aFRpdGxl 67143
dW5jaW8= 67144
IHBlcnNpc3Rz 67145
IGRpcmVjdHM= 67146
YWNjacOzbg== 67147
U2FtcGxlcg== 67148
IGJsYWNrbGlzdA== 67149
IGFEZWNvZGVy 67150
IGludm9rZXM= 67151
X3NraW4= 67152
Pklm 67153
dHJ1bmNhdGU= 67154
LlNpbg== 67155
c29vbg== 67156
IGRpc2Zy 67157
CVZlYw== 67158
IyNf 67159
LnNjaG9vbA== 67160
IGJsaW5kcw== 67161
IGFjYWI= 67162
IHBhdGhldGlj 67163
IHZvbGNhbmlj 67164
IHJkZg== 67165
IGN1bHRpdmF0ZWQ= 67166
IFVJTmF2aWdhdGlvbkNvbnRyb2xsZXI= 67167
IGlwdA== 67168
IGdsYW5k 67169
IGV2aWRlbnRseQ== 67170
UGh5cw== 67171
IHN3YW1w 67172
IGltYWdlTmFtZQ== 67173
LkxheWVy 67174
dWZl 67175
LFsn 67176
IENyaW1zb24= 67177
6YCg 67178
PGZvb3Rlcg== 67179
IGJpa2luZw== 67180
INC00LDQvdC90YvQtQ== 67181
bW92ZXM= 67182
Y3Jj 67183
aWxsYXRpb24= 67184
IGxhdXJl 67185
0YDQsNCx0L7Rgg== 67186
0YPQug== 67187
IENhaW4= 67188
IHB5cw== 67189
IGNvbGxpZGU= 67190
IHxffA== 67191
KHNwYW4= 67192
IGdpbmc= 67193
IG9iZWRpZW5jZQ== 67194
b3V0ZXJz 67195
U29vbg== 67196
IFdoaXRuZXk= 67197
IEltcG9ydHM= 67198
OlVJVGFibGVWaWV3 67199
KiY= 67200
IGJr 67201
V2l0aEVycm9y 67202
LWV4dA== 67203
X1JET05MWQ== 67204
X3RyYWNraW5n 67205
bm9vcGVuZXI= 67206
w7xucw== 67207
IEd0a1dpZGdldA== 67208
c2ti 67209
U0FWRQ== 67210
T2Jz 67211
KCcuJylb 67212
IGF1dGhvcmVk 67213
LS8= 67214
TG91aXM= 67215
LmdldE91dHB1dFN0cmVhbQ== 67216
IGdlbmVyYWxpemVk 67217
7Yw= 67218
IGFydGlzYW4= 67219
KGNwcw== 67220
IERtaXQ= 67221
0LvQuNGG 67222
LkltYWdlTGF5b3V0 67223
IHN1Y2hlbg== 67224
XX0s 67225
LmNvbGxpZGVy 67226
VGFiUGFnZQ== 67227
XT1b 67228
aHlkcm8= 67229
X3N0cmlw 67230
IGxpY2tpbmc= 67231
IGJvb3N0cw== 67232
IHNrZXB0aWNpc20= 67233
IGpvZ28= 67234
IGNvbXBldGVk 67235
IOuCtA== 67236
Tm9kZVR5cGU= 67237
WEY= 67238
IHBvc3NpYmlsaXQ= 67239
LWNvcHk= 67240
IHRyaXR1cg== 67241
IEF0dGFja3M= 67242
IG7Dqw== 67243
SURBRA== 67244
b2dyYXBoaWVz 67245
VGltZVN0YW1w 67246
b3R5cGluZw== 67247
LUFwcg== 67248
INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjw== 67249
ICI7Ig== 67250
IEhhbGU= 67251
L2FwaXM= 67252
IDpdCg== 67253
X2hkbA== 67254
IERpYWw= 67255
CUNvbmZpZw== 67256
X0ZSQUdNRU5U 67257
X0VkaXQ= 67258
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 67259
IGNhbmRpZGFjeQ== 67260
IENvbXByZXNzaW9u 67261
X2xvc3Nlcw== 67262
Kj4oJg== 67263
SW50ZWdyYWw= 67264
IHBhcm9keQ== 67265
IGluaXRpYWxpc2U= 67266
ZmlsbHM= 67267
IGFsdHJp 67268
X0VMRU1FTlRT 67269
YWRhc3RyYXI= 67270
Y29ycmVv 67271
IHdhdHQ= 67272
X0RSVg== 67273
IEZvcmdvdA== 67274
IGdldENvbnRleHQ= 67275
IHNob3J0YWdlcw== 67276
IE9DVA== 67277
d2VldGFsZXJ0 67278
IE9wZW5z 67279
Kmw= 67280
IEtpdHR5 67281
4oCZw6l0 67282
IFBpY2Fzc28= 67283
LnRvQnl0ZUFycmF5 67284
0L7Qu9GD0Yc= 67285
IERFTg== 67286
5aeT5ZCN 67287
V2ludGVy 67288
YW50YW4= 67289
X19b 67290
UHJpbQ== 67291
IHJvb2Z0b3A= 67292
IEJpbGxib2FyZA== 67293
dGVzdENhc2U= 67294
cHJvZHV0bw== 67295
LXRodW1i 67296
IHJlc2V0cw== 67297
Z2Vibg== 67298
PkVycm9y 67299
LmRlcGFydG1lbnQ= 67300
IGVhcnJpbmdz 67301
IENhcm91c2Vs 67302
KGV4YW1wbGU= 67303
CWVt 67304
XENvbnRhaW5lcg== 67305
IEVsdmlz 67306
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 67307
RW5nbGFuZA== 67308
Y3JlZGl0ZWQ= 67309
X2NvbnN0cnVjdG9y 67310
IGxvcg== 67311
IERhd3Nvbg== 67312
QnVybg== 67313
IEJyaWdhZGU= 67314
IE11dGV4 67315
IFRyYW5zaXRpb25hbA== 67316
IE1vdXNlRXZlbnQ= 67317
Z3Jvdw== 67318
Lm1pbnV0ZQ== 67319
IEdNTw== 67320
PVtdLA== 67321
IHN1c2hp 67322
IGFlc3RoZXRpY3M= 67323
T0NVUw== 67324
IFNFTEY= 67325
IEFzc2VydGlvbkVycm9y 67326
IE1DVQ== 67327
IGhpbnRUZXh0 67328
IHNlYXc= 67329
bmdsZQ== 67330
IGV4cGVsbGVk 67331
UFJPUEVSVFk= 67332
KS48Lw== 67333
LW9wZXJhdGlvbg== 67334
IEltbXVu 67335
IGxpY2Vucw== 67336
aWJpYQ== 67337
IGJpZXRlbg== 67338
IGdyaXBz 67339
Q0hBTk5FTA== 67340
X0VSUk9SUw== 67341
X3JlY3Vyc2l2ZQ== 67342
VWx0aW1hdGVseQ== 67343
IE1hamVzdHk= 67344
IGRlYWN0aXZhdGU= 67345
IEVYQU1QTEU= 67346
dWNpb25lcw== 67347
IGN1cnJlbnRWYWx1ZQ== 67348
IGV2YWx1YXRlcw== 67349
L0dyYXBoaWNz 67350
InRleHQ= 67351
X3BhbGV0dGU= 67352
IFRNUA== 67353
IEJlZHM= 67354
LkNvcw== 67355
4Lix4LiZ 67356
PXRvcmNo 67357
IFBBQ0tBR0U= 67358
aWxsYXJk 67359
LmNw 67360
leyduA== 67361
LWFwcHJvdmVk 67362
IE5vcnRod2VzdGVybg== 67363
PHRleHRhcmVh 67364
IENvbXBhdGlibGU= 67365
X1JEV1I= 67366
LlF1YW50aXR5 67367
QElk 67368
X29yaWVudGF0aW9u 67369
Z2V0VXJs 67370
IHRyYW5zbGF0aW5n 67371
IFdlYXZlcg== 67372
IGpzb25BcnJheQ== 67373
IGVtYmxlbQ== 67374
LklzTnVsbA== 67375
IENoYXJ0cw== 67376
W119 67377
Z2Fl 67378
X25lc3RlZA== 67379
dGVtcHM= 67380
cGF0aG5hbWU= 67381
Q1c= 67382
LXdyaXR0ZW4= 67383
IFBBUks= 67384
KGNvbmQ= 67385
X2FsYXJt 67386
IGdlcmU= 67387
IEdpeg== 67388
IE5nYg== 67389
IC5f 67390
YXBwaW5lc3M= 67391
IERlcGxveW1lbnQ= 67392
aVBhZA== 67393
Il1d 67394
IHN0cnN0cg== 67395
IHRvbnVtYmVy 67396
KGRs 67397
CXdvcmQ= 67398
W3Rv 67399
X0ZJWEVE 67400
RXhwaXJhdGlvbg== 67401
OnJldHVybg== 67402
T250 67403
PlBsZWFzZQ== 67404
Z2V0VGl0bGU= 67405
LnNwbGl0ZXh0 67406
Y29tYmluZWQ= 67407
T2Q= 67408
IG5vdmVsdHk= 67409
IlM= 67410
IHN2bQ== 67411
Q292ZXJhZ2U= 67412
IEh1dA== 67413
IHJlc2lzdGVk 67414
IGVsbG8= 67415
IG3DtmNodGU= 67416
S2F5 67417
Lmxpa2U= 67418
Y2Npb25l 67419
IHJlc2VtYmw= 67420
RGVhdGhz 67421
IGVwaXQ= 67422
KHJnYg== 67423
LkNsYXNzZXM= 67424
INC00L7RgdGC 67425
Y2FwdHVyZXM= 67426
XStc 67427
YW1pZW50 67428
IFBhc28= 67429
LlNlbmRNZXNzYWdl 67430
IFJlbmF1bHQ= 67431
IE5hcmVuZHJh 67432
dG91dA== 67433
IGhhZGRl 67434
IFR3ZWVu 67435
w6VkZQ== 67436
IG91dGZpZWxk 67437
Lz48Lw== 67438
QFw= 67439
IER1cmFudA== 67440
IGFicmU= 67441
X3N0b3J5 67442
IHBlcmZ1bWU= 67443
Q3BwVHlwZURlZmluaXRpb25TaXplcw== 67444
INC/0LDRgNCw0LzQtdGC 67445
Y2hlbWVz 67446
IFNhZGRhbQ== 67447
cHJlbm9t 67448
dXNwZW5kZWQ= 67449
IEJlbmVmaXQ= 67450
IHNjZXB0 67451
X01vdmU= 67452
IE5hag== 67453
LU9u 67454
cnVk 67455
SW1hZ2VQYXRo 67456
wq4s 67457
IGFuYWx5c2Vk 67458
IE9H 67459
ZWxsZWljaHQ= 67460
YmlyZHM= 67461
ZWt0ZQ== 67462
IEFsaXNvbg== 67463
IGF0aGVpc3Q= 67464
eyU= 67465
YWJo 67466
LXBob3Rv 67467
aW5zdHJ1bWVudA== 67468
IGhpbnRlZA== 67469
IE9mZmxpbmU= 67470
KSIpOwoK 67471
X1BSRUY= 67472
IHN0eWxpc3Q= 67473
IEt1YmVybmV0ZXM= 67474
IGZlcnY= 67475
CgoKCgoKCgoKCgoKCgo= 67476
KCI9Ig== 67477
LmdldE0= 67478
IG5vdGV3b3J0aHk= 67479
IHNjb3V0aW5n 67480
X3RyYW5zbGF0ZQ== 67481
IGJlZ2lubmluZ3M= 67482
IEx1bw== 67483
IHFs 67484
X2FsaWduZWQ= 67485
IGVydw== 67486
dWFycw== 67487
X1BhdGg= 67488
LicuJA== 67489
IGhvYw== 67490
IGRlcnA= 67491
bG9p 67492
IE1jS2lu 67493
6K+05piO 67494
Lz0= 67495
TGlua0lk 67496
c3RkZGVm 67497
cmVkdWNlcnM= 67498
aXNhbnM= 67499
Lmhpc3Q= 67500
Jy8+Cg== 67501
IFRveGlj 67502
IGRpc2FwcGVhcmluZw== 67503
IGNpcw== 67504
KGRv 67505
IG1haW5TY3JlZW4= 67506
X0JBTks= 67507
IGRlbW9uc3RyYXRvcnM= 67508
IFBhbGV0dGU= 67509
dWVseQ== 67510
UmFyZQ== 67511
IHJlc2lkaW5n 67512
IGFtYmllbnRl 67513
IG1pc20= 67514
LXF1ZXN0aW9u 67515
IG9wcHJlc3NlZA== 67516
IGxldHJh 67517
PGR5bmFtaWM= 67518
IEZvdG9z 67519
LXBvbGljeQ== 67520
aXN0ZW0= 67521
LmV4Y2hhbmdl 67522
c3RyZQ== 67523
JC8s 67524
7ZWY6riw 67525
JAoK 67526
IFJlbmU= 67527
IHRvdXRlZA== 67528
LUNvcmU= 67529
IENyYW4= 67530
IFRyYWRlcg== 67531
IGRldw== 67532
IGZsYXA= 67533
CWZpbGVuYW1l 67534
IGlubWF0ZQ== 67535
KE1vY2s= 67536
IFNvYg== 67537
aXNibg== 67538
IG5vZQ== 67539
IEZvcmJpZGRlbg== 67540
IGVsZXM= 67541
IGRpbmc= 67542
X3Nh 67543
KSovCg== 67544
YXJpZQ== 67545
IFN1cHBvcnRz 67546
IG1vZHVsYXRpb24= 67547
IGVuc2w= 67548
IFNoYWRvd3M= 67549
cHJpbmNpcGFs 67550
YW5nZW50 67551
LUphbg== 67552
IFBhbnRz 67553
LHRy 67554
IGZpdHRl 67555
IGdhcm1lbnRz 67556
TWFyZ2lucw== 67557
TFRS 67558
IE1peQ== 67559
dmVudHVz 67560
IE3DtmdsaWNo 67561
W2F0dHI= 67562
L3Jlc3BvbmQ= 67563
IHR0aw== 67564
IG9sZHXEnw== 67565
IENvbnNl 67566
UHJlbWl1bQ== 67567
IGZyYW5jYWlzZQ== 67568
X2hvcml6b250YWw= 67569
X2li 67570
IEZhcmU= 67571
IGhhcnZlc3RlZA== 67572
ZW5kaXI= 67573
KGhpdA== 67574
PiovCg== 67575
IElSZXBvc2l0b3J5 67576
eWxpZQ== 67577
IGRldGVjdHM= 67578
Om5v 67579
4pi0 67580
IGRpc2XDsQ== 67581
IHVuc2VyZW4= 67582
IG1vY2tpbmc= 67583
c291dGg= 67584
cmF0ZXM= 67585
IGh5cG9j 67586
IFNob3J0bHk= 67587
IEJsYWNrcw== 67588
0YLQuNGA0L7Qsg== 67589
IEFTQVA= 67590
cmViYmU= 67591
aWVj 67592
LkFkZERheXM= 67593
IGVwaXM= 67594
LWluZmxhbW1hdG9yeQ== 67595
LW5ldA== 67596
IHBhbGw= 67597
65Q= 67598
IGlzc3VhbmNl 67599
IGNvbnRlbnRpb3Vz 67600
LkFyZWFz 67601
0LjQu9GM 67602
IGNvbnRpZ3VvdXM= 67603
W2FjdGlvbg== 67604
IGV4cHJlcw== 67605
ISIpCgo= 67606
VUxP 67607
IHdyZQ== 67608
IHN1YmRpdg== 67609
IHR1cm5hcm91bmQ= 67610
IGFjY2Vs 67611
IFVuaXY= 67612
IFVuaXZlcnNpZGFk 67613
c2V0dA== 67614
ZGVzY3I= 67615
LkdlbmVyYXRpb24= 67616
IHBhdHJpb3Q= 67617
IGZhcw== 67618
KioqKgo= 67619
UVA= 67620
IOWN 67621
b3BwZWw= 67622
IGp1ZWdvcw== 67623
LmRyYXdTdHJpbmc= 67624
LWNvbmZpcm0= 67625
CSAgICAgICAgICAgICA= 67626
PFByb3Bz 67627
IGZhbWlsbGU= 67628
IEhlbG1ldA== 67629
ZXJ0aWFyeQ== 67630
YXRoaQ== 67631
IGN1bHRpdmF0ZQ== 67632
IGR1cGxpY2F0aW9u 67633
IHNweU9u 67634
Ki8pCg== 67635
IEh1bmdlcg== 67636
T3J0aA== 67637
IHBpbnBvaW50 67638
IEhhZw== 67639
IHRpbWV0YWJsZQ== 67640
bWFyZ2luVG9w 67641
IHJlY2lwcm8= 67642
ZmVsbA== 67643
IFBlcnNpc3RlbnQ= 67644
44Gp 67645
cGx1cmFs 67646
cXVldWVk 67647
IGdyYWNpYXM= 67648
w6F0aWNv 67649
IGhhcmRzaGlw 67650
IEFwYXJ0bWVudHM= 67651
IEp1bms= 67652
IFJldmU= 67653
X01zaw== 67654
IHN1cHJh 67655
IEFUUA== 67656
IHNldFNob3c= 67657
5a2X56ym5Liy 67658
IE5vdHRpbmdoYW0= 67659
U3RldmVu 67660
IE11bmQ= 67661
cmFuZ2Vz 67662
IHVwbG9hZHM= 67663
IGJmcw== 67664
cHo= 67665
dWx0aW1hdGU= 67666
IEVmZmljaWVuY3k= 67667
QU1J 67668
5b6E 67669
X1JFUEVBVA== 67670
IGFjYWRlbWlh 67671
LnRvb2xTdHJpcEJ1dHRvbg== 67672
VG9FbmQ= 67673
cnZpbmU= 67674
IFRoeQ== 67675
IEVsZWN0b3JhbA== 67676
IFJFUVVJUkVE 67677
IHBsdW5nZQ== 67678
IFJldm9sdXRpb25hcnk= 67679
IFRlbnQ= 67680
IGdyZW5hZGU= 67681
IjpbeyI= 67682
IG1vdXI= 67683
UG93 67684
IGV2YW5nZWxpY2Fs 67685
VEVDVEVE 67686
IG92ZXJ0dXJu 67687
CUlucHV0 67688
cmVjb21tZW5k 67689
JUM= 67690
IHNsYWc= 67691
IEJoYXI= 67692
X2VuY3J5cHQ= 67693
IFdhcmZhcmU= 67694
KGFnZQ== 67695
QVRFR09SSUVT 67696
bWlsZQ== 67697
IGhlYXZlbmx5 67698
YW1tZXI= 67699
KCkpWw== 67700
YWRlcmE= 67701
aGc= 67702
IExBVw== 67703
IHBhY2thZ2VOYW1l 67704
X3R5cGVEZWZpbml0aW9u 67705
KGJl 67706
REJOdWxs 67707
X3Rhcg== 67708
IGhldXJpc3RpYw== 67709
IFdhbnRlZA== 67710
IFN0dWI= 67711
IGtpdHQ= 67712
UkVD 67713
IHBhc2Fy 67714
Lm5ld0J1aWxkZXI= 67715
CWdyYXBo 67716
aW9zYQ== 67717
LmNvbHVtbkhlYWRlcg== 67718
IHNldE9wZW4= 67719
IFRoaXJ0eQ== 67720
ICIlLg== 67721
QWxiZXJ0 67722
IHNhbWE= 67723
IHJvY2tpbmc= 67724
Q29tcGxl 67725
TVY= 67726
fCgpCg== 67727
X3JlYWRz 67728
KHZhcmFyZ2lu 67729
b3Vsb3VzZQ== 67730
IFNJTUQ= 67731
IGNhcmJvaHlkcmF0ZQ== 67732
d2hvbGU= 67733
LE5vbmU= 67734
i+ivlQ== 67735
IENoYW5k 67736
Y3phcw== 67737
X3F1ZXJ5c2V0 67738
IGV4aXN0ZW50aWFs 67739
IGVkaWJsZQ== 67740
IGFnaWxpdHk= 67741
IFdpbGxpcw== 67742
IGh5bQ== 67743
IEJyaWxs 67744
0LjRhQ== 67745
IE5vdEZvdW5kRXhjZXB0aW9u 67746
ICgoKQ== 67747
QVBTSE9U 67748
IHN1YnN0YW50aXZl 67749
X3R5cGVEZWZpbml0aW9uU2l6ZQ== 67750
IHZhY2FuY2llcw== 67751
RU5HSU5F 67752
IGFuZGVycw== 67753
IHN5bWI= 67754
IGV0cmVl 67755
KS5f 67756
IHRyYW5zcG9ydGluZw== 67757
aW1wcw== 67758
L2NvcA== 67759
YWN0YWJsZQ== 67760
X2ZsdXg= 67761
IG5ld0luc3RhbmNl 67762
YXRvaXJl 67763
IGNvbHVtbkluZGV4 67764
IEdpbw== 67765
IHN1YnRpdGxlcw== 67766
LldpbkZvcm1z 67767
0LvRj9C10Lw= 67768
IGFsZXJ0ZWQ= 67769
IHN0cmlwcGluZw== 67770
d2VuZHVuZw== 67771
IE1ldGhvZEludm9jYXRpb24= 67772
RXJyb3JIYW5kbGVy 67773
U2Nyb2xsYmFy 67774
UG9ydGZvbGlv 67775
Y29uc3Vt 67776
IENPTU1PTg== 67777
TGY= 67778
X2Jhc2Vk 67779
b2NhbHk= 67780
IGVmZmV0 67781
dnZt 67782
cmlwc2k= 67783
IGZsb3VyaXNo 67784
Y2h0ZXI= 67785
PT09PT09PT09Cg== 67786
IHJlcXVlcg== 67787
LnF1ZXN0aW9ucw== 67788
KCI/ 67789
IHBvc1g= 67790
IFBDUg== 67791
IE9yZ2FuaXphdGlvbnM= 67792
cHLDvA== 67793
RXhhbQ== 67794
IEluY29ycG9yYXRlZA== 67795
X3BocmFzZQ== 67796
IHByYXllZA== 67797
IGhvbWVvd25lcg== 67798
IFRhag== 67799
eng= 67800
IElkZWFsbHk= 67801
X01BQ0hJTkU= 67802
IFJlbW92aW5n 67803
Q29lZmZpY2llbnQ= 67804
IGVkdWNhdGluZw== 67805
ID8+Jg== 67806
IHBvdXJz 67807
aXJhbQ== 67808
X3BlYWs= 67809
IG5lc3Rpbmc= 67810
YWJ5dGU= 67811
bmF0dXJl 67812
IGFmcw== 67813
IFJvbw== 67814
Y2FyZ28= 67815
b2JqZXQ= 67816
IGZyZWVpbmc= 67817
cXVha2U= 67818
RGVuc2l0eQ== 67819
IGRlc2NyaWNhbw== 67820
LyoqKioqKioq 67821
IGRhc2hlZA== 67822
IGdyb8Of 67823
b29reQ== 67824
IFBFT1BMRQ== 67825
X1Bvc3Q= 67826
IGNlcnZpY2Fs 67827
IEFkanVzdGFibGU= 67828
ZW5zdWFs 67829
IFJldmlzZWQ= 67830
KHJlZmVyZW5jZQ== 67831
CUJhc2U= 67832
ZXNzaW0= 67833
TWFpbnQ= 67834
IGdldFNpemU= 67835
IFNhbmR3aWNo 67836
cmFkaWVudA== 67837
c2luaw== 67838
Oi8vJw== 67839
X3R0 67840
RlBT 67841
IEFybWVuaWFu 67842
cHJldlN0YXRl 67843
X0xJTkVT 67844
IHRpZ2h0ZW4= 67845
PFs= 67846
XTw8Ig== 67847
IFRyYWZm 67848
IGxpcXVpZHM= 67849
IGFyY3M= 67850
X0NvbW1hbmQ= 67851
QHByb3RvY29s 67852
LWlzaA== 67853
IHJ1YmJlZA== 67854
QkJD 67855
L2ZpcmViYXNl 67856
QXBwQmFy 67857
PFg= 67858
IFNJTkdMRQ== 67859
LlN0YXR1c0ludGVybmFsU2VydmVyRXJyb3I= 67860
IHZlcnRl 67861
L3F1ZXJ5 67862
IGdldENvbmZpZw== 67863
IERpcmVjdFg= 67864
cGh5c2ljcw== 67865
eWNvcA== 67866
IGJyZWFrZXI= 67867
LXZvbHVtZQ== 67868
ZGF0YVRhYmxl 67869
4oCZZQ== 67870
cmlvdHQ= 67871
IEV0ZXJuYWw= 67872
Z2V0SGVpZ2h0 67873
IG9uSXRlbUNsaWNr 67874
IHF1YXRlcm5pb24= 67875
IGtpbmt5 67876
ZGVzZXJpYWxpemU= 67877
KFNwcmluZw== 67878
IHBlYWNlZnVsbHk= 67879
X0RldmljZQ== 67880
KE1hdHJpeA== 67881
acOocmVtZW50 67882
KHR5cA== 67883
LnZhYWRpbg== 67884
LmdldE1ldGhvZA== 67885
IOKAnQoK 67886
IHRocmVhZGVk 67887
IEZhbW91cw== 67888
IEdhbWI= 67889
IOyngA== 67890
INCk 67891
IGZha3Q= 67892
IGVjaHQ= 67893
X3Vi 67894
LkpwYVJlcG9zaXRvcnk= 67895
IHVuZ2U= 67896
LWVuZGluZw== 67897
IENBTUVSQQ== 67898
Y3JlZGVudGlhbA== 67899
IFBhc3Nwb3J0 67900
CVJUREJH 67901
IGV4dHJhZA== 67902
LW9yaWdpbg== 67903
IHNhY3JpZmljZWQ= 67904
IFNjaHVsdHo= 67905
IFR1cnRsZQ== 67906
LmNlbnRlclg= 67907
IHNob3djYXNpbmc= 67908
IGJ6dw== 67909
eXJv 67910
aXNOdWxs 67911
LmlzRGlyZWN0b3J5 67912
bWFpbnQ= 67913
X2Jp 67914
IFNwcmluZ2Vy 67915
fSgpCgo= 67916
aXNzdWVy 67917
LWFybQ== 67918
ZXNr 67919
bGluaGE= 67920
IGtvcnQ= 67921
YWphcw== 67922
YWxpbms= 67923
KEJ1dHRvbg== 67924
IFJlc3RvcmF0aW9u 67925
IGluY3I= 67926
IFpob3U= 67927
CSAgICAgICAgCQ== 67928
IERpc2NsYWltZXI= 67929
IGt2aW5ub3I= 67930
IERhcmU= 67931
IDwtPg== 67932
6K+m 67933
CQkJCQkJCQkJCQo= 67934
LkNsYW1w 67935
CXNjb3Bl 67936
IE11bQ== 67937
PDw8PDw8PA== 67938
L3t7 67939
X2FydGlzdA== 67940
IFJlYWN0aW9u 67941
IE5pY2tlbA== 67942
X1JlbW92ZQ== 67943
KCgoKA== 67944
64yA 67945
IGR5bmFzdHk= 67946
IFRocm93cw== 67947
IENvdWw= 67948
X3JuZw== 67949
IERvaw== 67950
Lmxpc3RWaWV3 67951
IFR1Y3Nvbg== 67952
KHRvaw== 67953
IFBoaWxpcHBl 67954
VG9TaG93 67955
IGRpZXRh 67956
IFVsdHI= 67957
LlRpY2s= 67958
IEdldFR5cGU= 67959
aWV0ZQ== 67960
IExlYWg= 67961
SGFyZHdhcmU= 67962
IENvbXByZWhlbnNpdmU= 67963
Q09NTU9O 67964
IGluZHVzdHJp 67965
aXJpY2Fs 67966
LWJlZHJvb20= 67967
IGd5cm8= 67968
INC60L7RgA== 67969
IC0vCg== 67970
Y291cg== 67971
IEJydXNoZXM= 67972
TXVsdGlwbGllcg== 67973
IHVzZXJkYXRh 67974
IFJlY29nbg== 67975
IG9ibGlnYXRlZA== 67976
IExldmlu 67977
YW5jZXN0b3I= 67978
IG1lbmluZw== 67979
IFVk 67980
LGpzb24= 67981
KGFzc2lnbg== 67982
IG5kYXJyYXk= 67983
X2Nvcm5lcg== 67984
QEFsbEFyZ3NDb25zdHJ1Y3Rvcg== 67985
6aqM6K+B56CB 67986
YWRvcnM= 67987
IHJlc3BvbmRlbnQ= 67988
R09SSVRI 67989
IHRlbmdv 67990
IHNldE1lc3NhZ2U= 67991
IElQTw== 67992
YXJyYXlz 67993
IEFHQUlO 67994
J1s= 67995
ICItLy8= 67996
w6Rt 67997
44CCXA== 67998
Lm9uY2U= 67999
Y3VycmVudFRpbWU= 68000
R292 68001
IGdldG9wdA== 68002
bWx4 68003
IFRvbmU= 68004
J11dOwo= 68005
IHByZWRhdG9y 68006
V3k= 68007
L2VudGl0eQ== 68008
IG1hbnRyYQ== 68009
KT49 68010
b2dyYWQ= 68011
IG1lbGFu 68012
IHNvcnRCeQ== 68013
IERFRklORQ== 68014
UHJvdGVjdGVk 68015
Y2RlY2w= 68016
Jz4iLiQ= 68017
PGN2 68018
Y3JpcmU= 68019
LVRydW1w 68020
IHVjZmlyc3Q= 68021
Y2Fzc2VydA== 68022
IGFja25vd2xlZGdlbWVudA== 68023
IElOVg== 68024
IFVOVQ== 68025
LnNxdWFyZXVw 68026
IFNheA== 68027
cmV0dGU= 68028
KCkKCgoK 68029
IERhdGFCYXNl 68030
IFBhdHJpb3Q= 68031
X1Jvdw== 68032
IEV4aGliaXRpb24= 68033
IGRldGFpbmVlcw== 68034
IFN0cmluZ0lP 68035
X0RFTg== 68036
TW9kaWZpZXJz 68037
YXNhcg== 68038
aXJ0aW5n 68039
IHRyYW5xdWls 68040
KGVuYw== 68041
IOOCsw== 68042
bmNvZGVy 68043
X3VudXNlZA== 68044
IEJpYW4= 68045
VmVyYg== 68046
X2V4Y2VycHQ= 68047
L2V4cG9ydA== 68048
IFNleHQ= 68049
RHM= 68050
QU1QTA== 68051
T2ZTdHJpbmc= 68052
X3RyYWNrcw== 68053
d2o= 68054
b3Rvbmlu 68055
IElURQ== 68056
SVZFTg== 68057
LW9yaWdpbmFs 68058
IEZJTkFM 68059
X18pCgoK 68060
IGVuc2U= 68061
IFV0dA== 68062
Oioq 68063
IFN1cnJleQ== 68064
IEthaXNlcg== 68065
YWRtaW5pc3RyYXRvcg== 68066
LWxhcmdlc3Q= 68067
IGxldHp0ZW4= 68068
IGNoYWluZWQ= 68069
J0g= 68070
IGRvY3VtZW50aW5n 68071
IExlY3R1cmU= 68072
Ukg= 68073
b2xsYXBzZWQ= 68074
c2tpcnRz 68075
ZWxkZXI= 68076
IFNpeHRo 68077
IGFsbGVnaWFuY2U= 68078
SVNPU3RyaW5n 68079
VXNhZ2VJZA== 68080
LmhhcmR3YXJl 68081
IHBhcmk= 68082
IHfDpGhyZW5k 68083
IHJkcg== 68084
IGhqZW0= 68085
TE9PUg== 68086
IExQQVJBTQ== 68087
INC80L7QttC10YI= 68088
IGhvbWFnZQ== 68089
b3V0c2lkZQ== 68090
IENoYXJTZXQ= 68091
PEdhbWU= 68092
77yZ 68093
X01VVEVY 68094
KSkvKA== 68095
X3Jlb3JkZXJlZA== 68096
dGV4dElucHV0 68097
QU5DRUQ= 68098
IFRlZQ== 68099
IGNvcm5lcmJhY2s= 68100
UXVlcnlTdHJpbmc= 68101
IGxvbmdpdHVkaW5hbA== 68102
IEhvbGlkYXlz 68103
QUJDREVGRw== 68104
LktleVByZXNz 68105
LnVs 68106
eWRybw== 68107
IFRhdGU= 68108
CXJvdXRlcg== 68109
c3BvdHM= 68110
IHBhdWw= 68111
LXByZXY= 68112
IGtub3dpbmdseQ== 68113
IEt1cmRz 68114
IEV1cm9w 68115
LmNlcnQ= 68116
QklH 68117
KGNvZWZm 68118
IENsYXVz 68119
L2V4YW1wbGVz 68120
IEZhcm1z 68121
IC8vKA== 68122
U1BBTg== 68123
IGNpcmN1cw== 68124
IE1JUw== 68125
IFRyYWl0cw== 68126
LWNsZWFy 68127
IHJlZ2ltZW4= 68128
IGJhY2tncm91bmRJbWFnZQ== 68129
dXNhaGE= 68130
X01ldGFkYXRhVXNhZ2VJZA== 68131
IHJoZQ== 68132
Q2xpbg== 68133
IERvbWluaWM= 68134
Lm5leHREb3VibGU= 68135
KGRldGFpbA== 68136
VGhyZWFkUG9vbA== 68137
IENhcnBlbnRlcg== 68138
c29ydGluZw== 68139
IGdvdmVybm9ycw== 68140
IHNpbmdlcnM= 68141
dW5saW5r 68142
IHJpbmdpbmc= 68143
IHNjaGVtYXRpYw== 68144
IGVycm1zZw== 68145
IGJlYg== 68146
LiIr 68147
IEluY3JlYXNlcw== 68148
IkFsbA== 68149
IGFjb250ZQ== 68150
emlh 68151
LlRleHRDaGFuZ2Vk 68152
IFRvRG8= 68153
LDopOwo= 68154
bmFnZQ== 68155
Y2hs 68156
b3dlbA== 68157
IGdlcmFkZQ== 68158
X2ZmdA== 68159
IGVzdGFtb3M= 68160
U1RBUg== 68161
IGRpc2d1c3Q= 68162
Z3Jhbg== 68163
cG9ydHVuaXR5 68164
IGF1dG9iaQ== 68165
e317Cg== 68166
IENvdXBvbnM= 68167
X0dBSU4= 68168
IFRDSEFS 68169
L3Bhc3M= 68170
55Sx 68171
IGZvb3R3ZWFy 68172
KGJvdW5kcw== 68173
YXB1cw== 68174
Y2l0ZQ== 68175
Qk9PVA== 68176
IENvZGVj 68177
bG9ndWU= 68178
LXByb3BlcnRpZXM= 68179
YXV0b21hdGlvbg== 68180
IFNob2U= 68181
c3BlY3Q= 68182
KG1t 68183
IEtldA== 68184
W3BhcmFt 68185
IGJhc2ls 68186
IEFuZ3VsYXJGaXJl 68187
IGFkdmVudHVyb3Vz 68188
X1VDbGFzcw== 68189
IGluZHVsZ2U= 68190
CWN1ZGE= 68191
IGluc3VsdGluZw== 68192
LkV4cHJlc3Npb25z 68193
IG9uQ3JlYXRlT3B0aW9uc01lbnU= 68194
VUVM 68195
IGJpdGluZw== 68196
KCFf 68197
IEVuY3ljbG9wZWRpYQ== 68198
IGJlcnQ= 68199
IFZlcmE= 68200
IEJpYmxpY2Fs 68201
aW5zaWNz 68202
X1NJTVBMRQ== 68203
IHNhbGlkYQ== 68204
cmVxdWVzdGVk 68205
IENvbXBvc2l0aW9u 68206
LkF0b2k= 68207
KEtleUV2ZW50 68208
ZXJlYQ== 68209
IGRlcG9ydGVk 68210
IFF1cg== 68211
IG5pcHBsZXM= 68212
aXNBcnJheQ== 68213
INGD0LrQsNC3 68214
IGJyaW5r 68215
bWV0cm9z 68216
RW51bWVyYXRpb24= 68217
IEJ1aWxkcw== 68218
ZXJ0b3M= 68219
IHNhaW50cw== 68220
LmRlcGxveQ== 68221
ZXRoZXJldW0= 68222
IGtpbmRlcmdhcnRlbg== 68223
dmFuaXplZA== 68224
IGNvbWJpbg== 68225
IHBvdXZvaXI= 68226
S2lu 68227
YXLEsQ== 68228
IC4uLi4u 68229
77y+ 68230
Lkdv 68231
IHF1aXJreQ== 68232
xLFuZGFu 68233
IGFjdGlvblR5cGVz 68234
IFFVRVJZ 68235
VGF5bG9y 68236
IFJL 68237
dGF0 68238
LnBhY2tldA== 68239
IElNUE9SVEFOVA== 68240
IGN1c2hpb25z 68241
YnVsaw== 68242
ZHVjdGl2ZQ== 68243
YmVuZWY= 68244
b2NyaXN5 68245
IGZ1ZXJvbg== 68246
IGN1cnNlcw== 68247
IGZpbGluZ3M= 68248
ZWxpZXI= 68249
KD86 68250
X2RyaXZl 68251
IGNvbnRhY3Rv 68252
IFBhcmt3YXk= 68253
dmlkZXM= 68254
Z25l 68255
YXZhZ2U= 68256
XFwu 68257
ZnVsbE5hbWU= 68258
ZGxs 68259
IHNob2Nrcw== 68260
ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 68261
X3B4 68262
QFdlYg== 68263
LlBlcnNpc3RlbmNl 68264
IHN1bms= 68265
LnRvb2x0aXA= 68266
YXV0aWNhbA== 68267
TmV3c2xldHRlcg== 68268
IHdhaXRlcg== 68269
IGlucXVpcmU= 68270
0LDQtdGC0YHRjw== 68271
KCdfXw== 68272
dG9n 68273
SUVOVEFUSU9O 68274
IGNvbXBhbnlJZA== 68275
IEJhc2ljcw== 68276
CUpMYWJlbA== 68277
IG1hY09T 68278
IE1hdHM= 68279
X3RlbA== 68280
LXByZWZpeA== 68281
IG11dGF0ZQ== 68282
fScp 68283
Y2hlbmc= 68284
IE1pbGl0 68285
IiY= 68286
ZmluZGluZw== 68287
IERhdGFMb2FkZXI= 68288
LkdQSU8= 68289
IExldnk= 68290
IHNuZWFrZXJz 68291
IGNyw6lk 68292
YXduZXI= 68293
eGlh 68294
L3NpbXBsZQ== 68295
Q0hS 68296
IGZsb3RhdGlvbg== 68297
LnNlbnNvcg== 68298
QnJhemls 68299
IFNlYXNvbnM= 68300
IFNwZWFr 68301
LWJhbGw= 68302
IE11dGF0aW9u 68303
dWtrYW4= 68304
IE9tYWhh 68305
4oCZb24= 68306
IEN1b21v 68307
IEp1ZGljaWFs 68308
IGNoZWNrcG9pbnRz 68309
IEZyZW0= 68310
CUlk 68311
ZWdyaXR5 68312
X2Fm 68313
QE5vQXJnc0NvbnN0cnVjdG9y 68314
IHRhYmVsYQ== 68315
WyM= 68316
bm90YQ== 68317
IEZhY3RvcnM= 68318
KGdyb3Vwcw== 68319
aXN3YQ== 68320
SVZP 68321
IHNjcmk= 68322
YWNldA== 68323
IE1laA== 68324
KGNsYXp6 68325
IFs8 68326
cGVyaWFs 68327
IHN1cnBhc3NlZA== 68328
IGpva2Vk 68329
IHJ1ZA== 68330
IGltYmFsYW5jZQ== 68331
IEZyYWdl 68332
c3Nw 68333
IGluZGljdGVk 68334
Lm1hcmtldA== 68335
O20= 68336
IHJlcGFpcmluZw== 68337
LW5vdGU= 68338
RGVidWdnZXI= 68339
KFdlYg== 68340
IHNpbmdz 68341
IExveQ== 68342
IERFU0lHTg== 68343
LkNvbXA= 68344
LWNvbnRyb2xsZXI= 68345
IGF2b2NhZG8= 68346
IEJvd2ll 68347
Y29udGFkb3I= 68348
dWxpbmdz 68349
dWNob3M= 68350
c3BlY2lmaWVy 68351
IFZvbHZv 68352
IGRlbW9z 68353
IFByb2R1dG8= 68354
Lk5vdEZvdW5k 68355
IG5pw7Fvcw== 68356
IEJvbHM= 68357
X291dGVy 68358
U2hlcg== 68359
QVVUTw== 68360
IGpvdg== 68361
IEZyZWRkaWU= 68362
b3JpYXM= 68363
IGFmZWN0 68364
IGZhY2lsaXRhdGluZw== 68365
IGRvbWluYXRpbmc= 68366
UGFyY2VsYWJsZQ== 68367
JywnLQ== 68368
bW9vbg== 68369
IG1ldGFzdA== 68370
IHNjYXJm 68371
IFRoZXJt 68372
Q2FsbEJhY2s= 68373
0YHRgtCw0LI= 68374
LkltcG9ydA== 68375
IGJldHJheWFs 68376
aWN1bG9z 68377
IHdlacOf 68378
5YyF 68379
X14= 68380
d2lmaQ== 68381
IFNFTlNPUg== 68382
X0JVU1k= 68383
JGI= 68384
X0ZJTkQ= 68385
IHBsYXN0aWNz 68386
IENPTlZFUlQ= 68387
CWNhbGw= 68388
IFByYWd1ZQ== 68389
IGdhcm5lcmVk 68390
X2xlYXJuaW5n 68391
c2hvb3Q= 68392
J10pKQ0K 68393
IEdpbmdlcg== 68394
PXBk 68395
LHRlc3Q= 68396
UHJvZml0 68397
IGVzdGltYXRvcg== 68398
IGJyZWU= 68399
IC8vPC8= 68400
X2hhdmU= 68401
IEtvZA== 68402
X0lNTQ== 68403
aXp6YXM= 68404
bWlnaHR5 68405
154= 68406
IE9uQ2xpY2tMaXN0ZW5lcg== 68407
44OH 68408
IFNjaWVudGlzdA== 68409
RmlsdGVyZWQ= 68410
YXZs 68411
aGF5 68412
X2dlbmVyYXRlZA== 68413
XScK 68414
IEF1dGhvcml0aWVz 68415
OnBhcmFt 68416
IHN0YXR0 68417
LW1hdGVyaWFs 68418
IGxpZGVy 68419
IENyb3A= 68420
IEJ1bmlmdQ== 68421
IG5leHRQcm9wcw== 68422
b3J6 68423
X29yZA== 68424
PHg= 68425
X0lPQ1RM 68426
IE11c2NsZQ== 68427
CWV4ZWM= 68428
RU5BTUU= 68429
X2xldHRlcnM= 68430
IyMjIyM= 68431
IENz 68432
J109PSI= 68433
ICInKQ== 68434
Q2xlYW51cA== 68435
LnN0cnVjdHVyZQ== 68436
zro= 68437
6YCa6L+H 68438
J107Pz4i 68439
IExhdGl0dWRl 68440
YmJpbmc= 68441
IGJhbmFuYXM= 68442
cmVjdGlvbnM= 68443
IFJhbmRhbGw= 68444
TllTRQ== 68445
IGFwcmVuZA== 68446
LlJlc3BvbnNlRW50aXR5 68447
IHRlc3REYXRh 68448
XGU= 68449
IFdL 68450
LkFkZENvbXBvbmVudA== 68451
X3J1bnM= 68452
w6dvaXM= 68453
LW1pbmk= 68454
Zm9sZGVycw== 68455
IGxvc2Vycw== 68456
IFRvd2Vycw== 68457
LUVuY29kaW5n 68458
OnI= 68459
Y2hvb3Nlcg== 68460
IGZsYXR0ZW5lZA== 68461
0YHRgtCw0L3QvtCy 68462
CVB5 68463
5Lic 68464
IGRhbW5lZA== 68465
RGVwdA== 68466
d2Vk 68467
IHBpc2M= 68468
Z2llcw== 68469
X2dhbWVz 68470
Lm1hc3M= 68471
KEVxdWFs 68472
IG5hdGl2ZXM= 68473
LnRodW1ibmFpbA== 68474
bHRy 68475
IGVxbA== 68476
X2luY29tZQ== 68477
CWhlYWRlcnM= 68478
LWhhaXJlZA== 68479
IG1lZGlvY3Jl 68480
IFdpdGhkcmF3 68481
IGJpdHRl 68482
2b4= 68483
PWlu 68484
b2NrZWQ= 68485
RnVsbHk= 68486
IFRFTVBMQVRF 68487
w7pkZQ== 68488
T2Rk 68489
aWxsZXo= 68490
VGVsZXBob25l 68491
IAoJCQo= 68492
KCInIg== 68493
X3NjaGVk 68494
ZXJuZQ== 68495
wr4= 68496
LnBpY2s= 68497
IE1TSQ== 68498
CWZm 68499
RGlzY292ZXJ5 68500
IENPRA== 68501
IExhY2s= 68502
IHNlbnNhdGlvbmFs 68503
bW90aA== 68504
IExlZ2lzbGF0aXZl 68505
0Y0= 68506
IHZpYWJpbGl0eQ== 68507
IGdldEVtYWls 68508
IHVuYW5pbW91cw== 68509
IHBlbGxldA== 68510
ICIoKQ== 68511
Y29hdA== 68512
YWdvb24= 68513
IEFMV0FZUw== 68514
XHVD 68515
X3N0ZG91dA== 68516
QW5keQ== 68517
IG5ld0xpc3Q= 68518
IE1haGFyYXNodHJh 68519
LF9f 68520
PXVzZXJuYW1l 68521
IHNjcmlwdGluZw== 68522
IFRtaW4= 68523
PEFjdGlvbg== 68524
PXt9LA== 68525
c3ltYm9scw== 68526
IGZlbmNpbmc= 68527
IHbDrWRlb3M= 68528
IE1hdXJpY2U= 68529
Y29ybGli 68530
IGtlbQ== 68531
In0pLAo= 68532
IENsYXNzaWNhbA== 68533
Y29sbGVnZQ== 68534
IEhvbWVwYWdl 68535
IH19Cgo= 68536
X01zcA== 68537
IENvbXBsYWludA== 68538
IHNhbmR5 68539
QXNpYW4= 68540
X3NlcmlhbGl6ZXI= 68541
IExhaA== 68542
IGJ1ZHM= 68543
b2xvZ25l 68544
IHJlc3BvbnNlRGF0YQ== 68545
b3BoaWxl 68546
a2F0ZWdvcmk= 68547
RW5kZWQ= 68548
bGVjdGlj 68549
IGNsYXdz 68550
Li4uJyk7Cg== 68551
IHBsYW5uZXJz 68552
IFphaw== 68553
IEdsb3Zlcw== 68554
Iil9 68555
IGZhc2hpb25lZA== 68556
YnJvbg== 68557
IG5ld2NvbWVycw== 68558
dmFuYQ== 68559
IHBpZXJ3cw== 68560
UmVjZWlwdA== 68561
LWVudg== 68562
IHJ1dGE= 68563
IEZhcm1lcg== 68564
b2RvcmU= 68565
bXVp 68566
IHJvbWFudA== 68567
IGluZmxpY3Q= 68568
IHNlbWluYXJz 68569
PWN2 68570
KHN0b2Nr 68571
IGV4dHJhY3Rvcg== 68572
IFRpZmZhbnk= 68573
X3V2 68574
LmNvbnRhY3Rz 68575
JyksKCc= 68576
IHNvbHZlcw== 68577
LkNvbm5lY3Rpb25TdHJpbmc= 68578
L2RlYnVn 68579
IEF2ZXJ5 68580
44Oj 68581
IG1heFg= 68582
U3Bhcms= 68583
PHRoaXM= 68584
IGhpa2Vz 68585
S2V5VmFsdWVQYWly 68586
IFF1aWV0 68587
c3RhYg== 68588
IEtvbW1lbnQ= 68589
bHljZXI= 68590
IE1TTQ== 68591
IExhbnRlcm4= 68592
IGNvbmp1bnRv 68593
aHNp 68594
TVVMVA== 68595
V2l0aER1cmF0aW9u 68596
YXR0YWNoZWQ= 68597
IEFzdGVy 68598
CXBvaW50cw== 68599
IFNpYmVy 68600
IE1ldGhvZGlzdA== 68601
L3NpdGVz 68602
IGZvcnR1bmVz 68603
UGFydGljaXBhbnQ= 68604
IGN1c3RvbWVySWQ= 68605
KWluaXQ= 68606
X3NlcnZlcnM= 68607
IHdlYXZl 68608
IFRSQUlO 68609
IGhhcmFzc2Vk 68610
7J6R 68611
YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo= 68612
X2Zhcg== 68613
QWxjaGVteQ== 68614
LmxpbmVXaWR0aA== 68615
IHRoZXJhcGlzdHM= 68616
IExvYg== 68617
ZXF1aXBtZW50 68618
IHJlY2h0 68619
Lm1pcG1hcA== 68620
Lm5pY2tuYW1l 68621
IHVudG91Y2hlZA== 68622
QUdPTg== 68623
IFNhdWw= 68624
IHdvcmtzaGVldHM= 68625
IFZldGVyYW4= 68626
b3VkZW4= 68627
YWNsYXNz 68628
X2FzbQ== 68629
IHRlbXBs 68630
IEV4cGVuc2U= 68631
ZWlnaHQ= 68632
I1NCQVRDSA== 68633
em9uZXM= 68634
LnBhcnRz 68635
YXRyaWNl 68636
bGF3cw== 68637
dG9CZURlZmluZWQ= 68638
RWZmZWN0aXZl 68639
IFBpZWNlcw== 68640
YXJ0aQ== 68641
IGluaGliaXRvcnM= 68642
CXBhcmFtZXRlcnM= 68643
IHRlbGVncmFt 68644
Ym91cmc= 68645
X25vdGlmaWNhdGlvbnM= 68646
IHBvc2l0aW9uYWw= 68647
LWRlYWxz 68648
IC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 68649
IHNoYWRlcnM= 68650
XT0k 68651
IGRlY28= 68652
ZXR5cGVz 68653
Y2xhcmU= 68654
IEdTTQ== 68655
LnV0aWxpdHk= 68656
VG9TdHI= 68657
YWZlbg== 68658
IFht 68659
X3BhcnRpY2xlcw== 68660
IGZsdWZmeQ== 68661
TWFya2V0aW5n 68662
IHN0YW5kaW5ncw== 68663
PwoKCgoKCg== 68664
VU1BTg== 68665
X1BBWU1FTlQ= 68666
CVRpbWU= 68667
cmF3bg== 68668
b3Jybw== 68669
IGVlcnN0ZQ== 68670
IHBhZ2VOdW0= 68671
IENPUA== 68672
IHBsYWdpYXI= 68673
VXBsb2FkZXI= 68674
JHNlbGY= 68675
bGF0ZXI= 68676
ZXJpYWxpemVk 68677
IGFsaWduU2VsZg== 68678
IOKZpQ== 68679
LmFycmF5Y29weQ== 68680
IG5vc290cm9z 68681
CWdwaW8= 68682
IHBsb3R0ZWQ= 68683
aXRlcmF0aW9ucw== 68684
IFJlbGF4 68685
Y2lwaGVy 68686
R2lmdA== 68687
IEJldHQ= 68688
IFhS 68689
IHN0cmlwZWQ= 68690
KGVudmlyb25tZW50 68691
ZWdlcnM= 68692
X1JFU0VSVkVE 68693
IGvDtm5udGU= 68694
IGluZmVycmVk 68695
UGRm 68696
c29ycnk= 68697
cGFyYXRl 68698
LkNvbmNhdA== 68699
IGxpcGlk 68700
LkJP 68701
IG9ybQ== 68702
IENvbnNvcnQ= 68703
IG92ZXJzZWVpbmc= 68704
IGFtYmVy 68705
IHBsZXRob3Jh 68706
CUFjdGlvbg== 68707
cXVlcnF1ZQ== 68708
IGh1aXM= 68709
ID1b 68710
IHByb2dyZXNzZXM= 68711
anVkdWw= 68712
IGNvbnZlcnRpYmxl 68713
LmVtYmVkZGluZw== 68714
IHs/Pgo= 68715
IHJlZHV4 68716
W2xhYmVs 68717
OiIpOw0K 68718
Lm9ubGluZQ== 68719
cXVhcnRlcmVk 68720
IHNjaG9vbGluZw== 68721
ICJcIiI= 68722
W2xpc3Q= 68723
QWxhbg== 68724
J30KCg== 68725
eXBzdW0= 68726
IHN0cml2aW5n 68727
IFJlc3BvbnNpYmxl 68728
IO2MjOydvA== 68729
LkludFB0cg== 68730
cmlrZXM= 68731
ZW52aWxsZQ== 68732
LnNldExheW91dE1hbmFnZXI= 68733
IFBhc3Nlbmdlcg== 68734
IGRpc29i 68735
IGZlcm1lbnQ= 68736
LlBpeGVs 68737
Pign 68738
IGNvbnRlbmRlcnM= 68739
LWJldGE= 68740
IGFmZmlybWF0aXZl 68741
0L3QvtGB0YLQuA== 68742
aWHDp8Ojbw== 68743
UmVjb21tZW5k 68744
aW1pdGVycw== 68745
X3lsaW0= 68746
IHN1YnNpZHk= 68747
IGVyYg== 68748
RmlsZVNpemU= 68749
KHNy 68750
IHBvb3Jlc3Q= 68751
IHZvaQ== 68752
U2lk 68753
IHNsaXBz 68754
X21pbnV0ZXM= 68755
IHVn 68756
xqFu 68757
IG5hdMO8cmxpY2g= 68758
44Oe 68759
YmVhcg== 68760
fV8kew== 68761
IGZpc3Nl 68762
IGRpc2NyaW1pbmF0b3J5 68763
CQkgIAo= 68764
IENvaWw= 68765
X2lmYWNl 68766
LnZlcg== 68767
IG1pbmVk 68768
IGFzc2Fzc2lu 68769
IHVuc2V0dA== 68770
LnJlcXVlc3Rz 68771
LlVT 68772
aW1hZ2VVcmw= 68773
IHN0cmF0ZWdpY2FsbHk= 68774
LWJhbmQ= 68775
IHRyb3VzZXJz 68776
WEQ= 68777
ey8= 68778
bGVjdGlvbnM= 68779
YCgp 68780
IlA= 68781
IHNrZXRjaGVz 68782
Y2xpZW50SWQ= 68783
IFNyYw== 68784
b3BlbmluZw== 68785
UHV0aW4= 68786
IFBvZXRyeQ== 68787
IFBST00= 68788
SUxMSVNFQ09ORFM= 68789
IGJvb21pbmc= 68790
U2ltaWxhcmx5 68791
Omxhc3Q= 68792
Lndvcmtlcg== 68793
LmdldElE 68794
LlNQ 68795
c2VydmVycw== 68796
b2N1bGFy 68797
IHNwaW5hY2g= 68798
SVNL 68799
w7A= 68800
J10pWw== 68801
IGNoaWVmcw== 68802
IGdyb8OfZW4= 68803
cmlldmluZw== 68804
LmFzaw== 68805
LXN1cg== 68806
VlY= 68807
Lz4iOwo= 68808
KHJlbW92ZQ== 68809
IEtM 68810
IEhhbGV5 68811
QFJlc3BvbnNlQm9keQ== 68812
LSY= 68813
U3dhZ2dlcg== 68814
IHpuYWo= 68815
Lm9uRXJyb3I= 68816
cmVnbw== 68817
ZWxpeA== 68818
IEFWQUlMQUJMRQ== 68819
IHNlcGVydGk= 68820
aWFw 68821
X21pc3M= 68822
IHN1cmdlcmllcw== 68823
IGltcGFydGlhbA== 68824
IENvdA== 68825
YWt0aW9u 68826
IHdoaXRlbGlzdA== 68827
INCw0LI= 68828
X21peA== 68829
IEJlZHJvb21z 68830
IHByaW1laXJh 68831
IHNpZ25pZmljYQ== 68832
L2J5 68833
IHN0YXJ0bGluZw== 68834
IFNQRQ== 68835
dWNjacOzbg== 68836
TnVtZXI= 68837
SUJN 68838
LmZyYWdtZW50cw== 68839
UmVudA== 68840
IHLDs3duaWXFvA== 68841
LkFVVE8= 68842
LkZvckVhY2g= 68843
IFpodQ== 68844
IEN1bm5pbmc= 68845
IFdhcm4= 68846
IEJI 68847
X0RPV05MT0FE 68848
QnlLZXk= 68849
KeKAlA== 68850
IGNvbW1hbmRl 68851
X0FOUw== 68852
Q2hyb24= 68853
RklU 68854
X2F0b21z 68855
X1NLSVA= 68856
IHZhcA== 68857
KEJveA== 68858
IGxkYXA= 68859
dW5wcm9jZXNzYWJsZQ== 68860
SVRJT05T 68861
w6lyw6k= 68862
LG1zZw== 68863
IG91dHNldA== 68864
IGRyaWxsZWQ= 68865
IGTDqXZlbG9wcA== 68866
IENvYXQ= 68867
IEJlbmdoYXpp 68868
SG9va3M= 68869
IE1pc3NpbGU= 68870
X1Jlc2V0 68871
Pi88 68872
ICItIgo= 68873
KCk9PnsK 68874
IEhvY2g= 68875
LmF3YWl0 68876
QWRyZXNzZQ== 68877
IGRpZ2l0YWxseQ== 68878
IlRoZXNl 68879
b3BsZXZlbA== 68880
IGFzeW5jaHJvbm91c2x5 68881
IER1Y2tz 68882
UkVTUA== 68883
SVJP 68884
LmZpeA== 68885
IFJhZGFy 68886
dmVydGlzZQ== 68887
w61zZXM= 68888
SXRlcmF0aW9ucw== 68889
bW91c2V1cA== 68890
bWludA== 68891
RklSU1Q= 68892
IHBheXBhbA== 68893
X3VwZ3JhZGU= 68894
V3JhcHBlZA== 68895
Ow0NDQo= 68896
K3M= 68897
IGNhdGNoZXI= 68898
Lk9w 68899
X05PVElDRQ== 68900
cGFyYWxsZWxlZA== 68901
Q1ZF 68902
Zm9yZ290 68903
IHBhbm9y 68904
IG9mZnJl 68905
IGVub3JtZQ== 68906
KCkNCg0KDQo= 68907
YWRpYXRvcg== 68908
YWRkQWxs 68909
W3RleHQ= 68910
KHV0aWw= 68911
LlByb21pc2U= 68912
YW5pc20= 68913
X29mZmVy 68914
RU5ESUY= 68915
ZG90cw== 68916
IEtybw== 68917
IHNwZWxsZWQ= 68918
IGFwcE5hbWU= 68919
QWN0aXZpdGllcw== 68920
IFNwaWNl 68921
ZWF0ZWQ= 68922
IHNrYg== 68923
IGvDtno= 68924
IHRvcmNodmlzaW9u 68925
Q2l2aWw= 68926
IGhvcw== 68927
X0hlbHBlcg== 68928
acSH 68929
X3Vuc2lnbmVk 68930
6K66 68931
4oCcQW5k 68932
CWtmcmVl 68933
LnJhaXNl 68934
IGNhbGxl 68935
IExhbnM= 68936
IGFudGln 68937
XCI+IjsK 68938
YnJhbmNoZXM= 68939
bG9ncmFkb3Vybw== 68940
IHN0YWxsZWQ= 68941
YWx5emVk 68942
RGVyaXZlZA== 68943
Om5vdA== 68944
IGdpYmk= 68945
IFR1cm5idWxs 68946
LnVzZXJEYXRh 68947
KFRhYmxl 68948
IERlcml2ZWQ= 68949
CWNvbmY= 68950
IGFsZ2Fl 68951
IGthZmth 68952
IG5ha25l 68953
IEhlYXRpbmc= 68954
IFRpcmU= 68955
YWR1bHQ= 68956
IERhdGVGb3JtYXQ= 68957
b3Bj 68958
ZW5zYWdlbQ== 68959
LlRvb2xz 68960
Lk1peGVkUmVhbGl0eQ== 68961
cmFp 68962
IFdvbmRlcmZ1bA== 68963
KV0pCgo= 68964
aWFyZA== 68965
VGhlbWVQcm92aWRlcg== 68966
IGV2ZW50RGF0YQ== 68967
I2Fk 68968
LmdldFVybA== 68969
IHRvb2xib3g= 68970
IG92ZXJyaWRpbmc= 68971
Q09OVEVOVA== 68972
LXByb2R1Y3Rz 68973
d2lsZA== 68974
X2V4cGFuZA== 68975
aW5haXJl 68976
QnJ1 68977
b2xscw== 68978
INGN0YLQvg== 68979
Y3Rlc3Q= 68980
IHB1bmNoaW5n 68981
RFJW 68982
X3NwYWNlcw== 68983
IFN1cGVyaW50ZW5kZW50 68984
IGxheXVp 68985
KGZlZWQ= 68986
dG9k 68987
IHZo 68988
IGluc3VsdHM= 68989
IFN1Yw== 68990
aWtz 68991
VG9ycmVudA== 68992
Lmty 68993
X2FjdGl2YXRl 68994
k5g= 68995
amVl 68996
aW1lcnM= 68997
cnVpdHM= 68998
IHByZWNpbmN0 68999
LlJlcXVpcmVk 69000
IHNhdGlzZmllcw== 69001
IGNoZWVyaW5n 69002
IGFycml2 69003
CXJlYw== 69004
IENvYmI= 69005
IGNvbmN1c3Npb24= 69006
dWpldA== 69007
Tm90Rm91bmRFcnJvcg== 69008
SmVhbg== 69009
IHBob3Rvbg== 69010
Pl8= 69011
IEJhcmNs 69012
YW1k 69013
ICV9Cg== 69014
PVwiIw== 69015
SW50ZXJu 69016
IENvbW1pdHRlZXM= 69017
LmJlbA== 69018
bnVtbWVy 69019
IGxldml0cmE= 69020
X3ZlcmJvc2U= 69021
KGNvZGVj 69022
IFN0aXRjaA== 69023
PSIiOw0K 69024
IHJlZ3JldHM= 69025
IG11bHRpbmF0aW9uYWw= 69026
IHJlc3RydWN0dXJpbmc= 69027
IE1FTg== 69028
eW5jaHJvbml6YXRpb24= 69029
IG1lZGlhdG9y 69030
a2ly 69031
UHJpbmNl 69032
IGluaGliaXQ= 69033
IGdvc3Q= 69034
IE1NQw== 69035
IHNpZGVk 69036
X2Rhcms= 69037
KGJsb2I= 69038
PkxvcmVt 69039
PiIpOwoK 69040
c2Nhbm5lcg== 69041
OmlubGluZQ== 69042
LmNhcm91c2Vs 69043
b3RpZGU= 69044
IFdXVw== 69045
IGRydW1tZXI= 69046
LmZhbWlseQ== 69047
IG9yZGluYWw= 69048
5b2T5YmN 69049
IGRpcGxvbWF0 69050
IHN1cHBsZW1lbnRhbA== 69051
IGRhZsO8cg== 69052
IEZBVA== 69053
IFlvbmc= 69054
aGFwdXM= 69055
IEp1bmN0aW9u 69056
emw= 69057
LlVzZUZvbnQ= 69058
IGhhc2hNYXA= 69059
LVJl 69060
ICIqKg== 69061
LnNldEJhY2tncm91bmRSZXNvdXJjZQ== 69062
IGltcGVyZmVjdA== 69063
LkZpbmRFbGVtZW50 69064
IExMUA== 69065
IG11cmRlcmVy 69066
IHRleHRl 69067
aXPDqQ== 69068
YWN0aWNz 69069
VG95 69070
R3JhbnQ= 69071
X2Rpc2Nvbm5lY3Q= 69072
IGJyYXNpbGU= 69073
IGVtZXJnZW5jaWVz 69074
X2x2bA== 69075
IEAiXA== 69076
fSovCgo= 69077
X1NPQw== 69078
Tk9STUFM 69079
L2dhbGxlcnk= 69080
YXNpY3M= 69081
RXZlbnR1YWxseQ== 69082
IGdyYXA= 69083
IGNyaXN0 69084
IHByb2plY3Rvcg== 69085
IGdlb21ldA== 69086
IGRldGVjdG9ycw== 69087
IGNyaXRpY2l6aW5n 69088
IGNoaWNrcw== 69089
IEhpag== 69090
L2ZyYW1l 69091
LW1vbmV5 69092
ImRlc2NyaXB0aW9u 69093
IHRleHRpbmc= 69094
IHNleGlzbQ== 69095
IE1WQw== 69096
LWdlbmVyYWw= 69097
IG92ZXJ0dXJuZWQ= 69098
IG1vdmVy 69099
IFBocmFzZQ== 69100
IFVOVVNFRA== 69101
IEVudHJlcHJlbmV1cg== 69102
VEVHUg== 69103
ZWxsaXBzZQ== 69104
TWFya2Rvd24= 69105
X18oKg== 69106
IEthcmRhc2hpYW4= 69107
cHBlbGlu 69108
IEdvdHQ= 69109
IGR5c3Q= 69110
IFJlZHV4 69111
SG9sYQ== 69112
PyEKCg== 69113
IFJlYWx0eQ== 69114
U3VydmV5 69115
IE1jR3JlZ29y 69116
X2hhbmRsZXM= 69117
IGludHJpZ3VlZA== 69118
IGdldFVybA== 69119
IGRldmlzZWQ= 69120
IFBheXBhbA== 69121
IHRoaW5rZXJz 69122
IFN0YXR1c0Jhcg== 69123
IEVsaWc= 69124
IGNvbXBsZXhlcw== 69125
INC60L7QtA== 69126
c3RvY2tz 69127
LWluaXRpYWxpemVk 69128
IHNjYW5kYWxz 69129
IGNvbWZvcnRpbmc= 69130
IFJvY2tz 69131
IGxpb25z 69132
bG9jYXRvcg== 69133
IV0= 69134
IFBvbnk= 69135
RGF0dW0= 69136
IEZldA== 69137
IG9mZnNldFk= 69138
IFJFVFVSTlM= 69139
IGJyZWFjaGVz 69140
VGltZUludGVydmFs 69141
IHZpZWxlbg== 69142
VmVyc2U= 69143
IGthZA== 69144
IGdhYXQ= 69145
KCItIiw= 69146
IG1vdXNlWQ== 69147
KFBvc3Q= 69148
IFVo 69149
ZWxpZ2libGU= 69150
YWx0YQ== 69151
IHV0aWxpc2U= 69152
ZmFjdHM= 69153
SElQ 69154
IG9yY2hlc3RyYQ== 69155
IFNwYWNlcw== 69156
aXNwaWVs 69157
IG11bHRpcGFydA== 69158
LW9wYWNpdHk= 69159
U2VhcmNoaW5n 69160
IFBsYXRv 69161
VmlzaW9u 69162
IGx1bA== 69163
IEFwcHJlbnQ= 69164
57uc 69165
W3JhbmQ= 69166
LWRpc2FibGVk 69167
IEZsZXRjaGVy 69168
IHRyYW5zcG9ydHM= 69169
JmU= 69170
dHBhcmFt 69171
cG9sZQ== 69172
IEJ1ZW5vcw== 69173
w7pibGljYQ== 69174
aW50ZXJhY3Rpb24= 69175
IGhvYg== 69176
IGluZmxpY3RlZA== 69177
bGl0ZQ== 69178
IFBBUkFNRVRFUlM= 69179
IFN0YW0= 69180
KG14 69181
IEF1dG9NYXBwZXI= 69182
aWxpYW4= 69183
IHF1aXR0aW5n 69184
PXt9 69185
IEpvbmFz 69186
IGxvY2FsaXR5 69187
IFNpbGVuY2U= 69188
X2ZsdXR0ZXI= 69189
IG5icg== 69190
bGl0ZXI= 69191
IE5vcm1hbGl6ZQ== 69192
IGFjdW0= 69193
QnJhaW5z 69194
ZXF1aXA= 69195
XT09Ig== 69196
IGRlc3Rpbm8= 69197
IERpb3M= 69198
Lk11bHRpbGluZQ== 69199
YWdyZWU= 69200
KQoKCgoKCgoK 69201
IHN0ZWxsZW4= 69202
IGN1cmx5 69203
Lk9mZmljZQ== 69204
LWFib3V0 69205
ICcuLy4uLy4uLw== 69206
IFVUSUw= 69207
IFJw 69208
4oC6 69209
IG1hcGE= 69210
LkRP 69211
YWdhbA== 69212
LndpbmRvd3M= 69213
IGFkdmVyc2VseQ== 69214
Llh0cmFMYXlvdXQ= 69215
bWVkaWNhbA== 69216
IHVuc3Vy 69217
dGhlcm1hbA== 69218
Lk1vZGVsQWRtaW4= 69219
LmFjdHVhbA== 69220
c2V0Q29udGVudA== 69221
IHBvc3RmaXg= 69222
UFc= 69223
IENoYWlycw== 69224
IGdyYW1t 69225
IGNvbXBsaWM= 69226
RElTUExBWQ== 69227
IE1vb3Nl 69228
aGFhcg== 69229
QUxFUw== 69230
IGxkYQ== 69231
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCg== 69232
ICcvJwo= 69233
QVNO 69234
IEJhcmJlcg== 69235
IG1haW5z 69236
IG1haW5XaW5kb3c= 69237
0LDQt9Cy0LDQvdC40LU= 69238
IGVtYW4= 69239
X2NvbGxlY3Q= 69240
IHJlbXBs 69241
LnRheA== 69242
YmFo 69243
IFBzeWNoaWF0cnk= 69244
RGVzY3JpcHRpb25z 69245
IGV4ZWN1dGlvbnM= 69246
CUxPR0dFUg== 69247
JkU= 69248
OmJn 69249
IGtk 69250
LmRhbWFnZQ== 69251
IG5pc2k= 69252
5qy+ 69253
IENhbWVs 69254
aW5pZGFk 69255
IExpZmVzdHlsZQ== 69256
IFRISVJE 69257
IOCkuA== 69258
IHBvbHlnb25z 69259
IGF0dGlyZQ== 69260
YWxlbnQ= 69261
X1VTQVJU 69262
IG1hbGFyaWE= 69263
bG9icw== 69264
IF19Cg== 69265
KHJlZ2lzdGVy 69266
LXBz 69267
X29wdGltaXplcg== 69268
KEFMT0FE 69269
IHZhcGU= 69270
LnNvY2s= 69271
kOiXjw== 69272
JHByb2R1Y3Q= 69273
KEVSUg== 69274
Y2twdA== 69275
YnVxdWVycXVl 69276
IH19Ij57ew== 69277
IEhpdmU= 69278
IE1hc2g= 69279
IEVwaWQ= 69280
IEx1bmQ= 69281
X3RyYW5zYWN0aW9ucw== 69282
IHN1YmNsYXNzZXM= 69283
RWFzZQ== 69284
X0Nsb3Nl 69285
X2NoZWNrb3V0 69286
IicsCg== 69287
U2VjdG9y 69288
b2lzZQ== 69289
LXRlbXA= 69290
KSIp 69291
aHlwZXI= 69292
ZXJjdWw= 69293
c3RhY2twYXRo 69294
X05S 69295
SUxMRQ== 69296
IHJlbGFjacOzbg== 69297
IE1hdHRo 69298
X0NPREVD 69299
IGhhbmRsZUVycm9y 69300
X09uZQ== 69301
YWxib3Jn 69302
CQkgICAgICAgICA= 69303
IFVwbG9hZGVk 69304
Tm0= 69305
Ly89 69306
KlM= 69307
X0VYUEVDVA== 69308
IGZyYWN0aW9uYWw= 69309
Q291 69310
IHNjYWxhYmxl 69311
IENJRA== 69312
PFBvc3Q= 69313
CXRocmVhZA== 69314
aGFyZHdhcmU= 69315
LmNoYW5nZWQ= 69316
LkVsZW1lbnRBdA== 69317
IGFydGljdWxhdGU= 69318
ZWRvcmVz 69319
RXN0YWJsaXNo 69320
PXtbCg== 69321
ISo= 69322
IFNK 69323
TWV0ZXI= 69324
LnJlcA== 69325
IFZPTA== 69326
IE91 69327
bMOp 69328
IHBuZXVtb25pYQ== 69329
X3BpY2tlcg== 69330
ZXhwbG8= 69331
IOyekQ== 69332
IFN3aW0= 69333
ZHJlc3M= 69334
c3Rvcmllcw== 69335
L25hdg== 69336
VmE= 69337
INit 69338
L3NlbGY= 69339
IHZldGVyaW5hcnk= 69340
KERlbnNl 69341
CWJvb3N0 69342
IElzTm90 69343
IHRydXN0aW5n 69344
IExlYmFuZXNl 69345
JHJlcXVlc3Q= 69346
eGZmZmZmZg== 69347
X3JlbW92ZWQ= 69348
IHVwZGF0ZXI= 69349
2KfY 69350
RE9XTkxPQUQ= 69351
IEltbWVkaWF0ZWx5 69352
IHJvYW1pbmc= 69353
IEhvcm55 69354
LmNvZGlnbw== 69355
IEZpZ3VyZXM= 69356
IHBhbnRyeQ== 69357
KHNhbXBsZXM= 69358
IEJFTA== 69359
IHNldENvbnRlbnQ= 69360
dW1vcg== 69361
5pSv5LuY 69362
X01JTlVT 69363
IHVubGVhc2hlZA== 69364
IHByb2ZpY2llbnQ= 69365
CVVJ 69366
LkV4Y2VwdGlvbnM= 69367
IHNyYW5k 69368
UHJlc3N1cmU= 69369
LmFzc2VydE5vdA== 69370
KHNlcmlhbGl6ZXI= 69371
CXR4dA== 69372
UG9ydHM= 69373
IG5lY2VzYXJpbw== 69374
IHJldml2ZWQ= 69375
IG1pbGVzdG9uZXM= 69376
Y2Fubw== 69377
RXNjb3J0 69378
IGVudGVuZA== 69379
QVBF 69380
aXBj 69381
LmF0b21pYw== 69382
IFBlbWI= 69383
IHJlYWNoYWJsZQ== 69384
IGthbnM= 69385
d2hhdGV2ZXI= 69386
TGlzdEJveA== 69387
IENseQ== 69388
cGljdHVyZWQ= 69389
IEVsZWN0cm8= 69390
YWJpYw== 69391
IGZ1bms= 69392
IGRpYXJyaGVh 69393
IOeZ 69394
IFNvbHZlcg== 69395
IEJhYw== 69396
IHNrZWxldGFs 69397
IO+C 69398
IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbg== 69399
ICIpWw== 69400
IFRyYWl0 69401
dWRva3U= 69402
LS0tLS0tLS0tLQoK 69403
QW5nZWw= 69404
YWdy 69405
IHNpbXBsZXM= 69406
IGJhbmM= 69407
IEFsZXJ0cw== 69408
IENvbmZpcm1hdGlvbg== 69409
IEFseQ== 69410
Y2FsbGJhY2tz 69411
IGZ1bmt0aW9u 69412
IGdyYWZ0 69413
WVBE 69414
L0FGUA== 69415
V0s= 69416
a3Vy 69417
Q0tFVA== 69418
IFNsYXRl 69419
IFN0ZWY= 69420
CVJ1bnRpbWU= 69421
IEVTTA== 69422
IHByZWFjaGluZw== 69423
QnJvYWQ= 69424
IHNldERlc2NyaXB0aW9u 69425
YXplbA== 69426
PQoK 69427
IGphY2twb3Q= 69428
IC8vIQo= 69429
dmlhcg== 69430
IGVpZA== 69431
IGF0aXY= 69432
IHJlZmxleGl2aXR5 69433
Lkxpc3Rlbg== 69434
IGx5cmlj 69435
IHZlcms= 69436
IGNvbGx1c2lvbg== 69437
YXphYXI= 69438
IHdpbms= 69439
IE11ZA== 69440
L29wZXJhdG9y 69441
IGV4dGVybmFsbHk= 69442
IGJhcnU= 69443
IGJhc2tldHM= 69444
dGlja2Vy 69445
KHBob3Rv 69446
X2V2ZW4= 69447
IHNwb25nZQ== 69448
IGhlaWdodEZvcg== 69449
Z2V0Q2hpbGQ= 69450
X2Zvcm1hdHM= 69451
LkV4ZWN1dGlvbg== 69452
X1Byb3BlcnR5 69453
cmVwb3M= 69454
dGhlaWQ= 69455
X1BIWVM= 69456
IGV2aWRlbmNlZA== 69457
LmhlYWRpbmc= 69458
QW5ndWxhcg== 69459
IFZlbnVl 69460
IEhPVVNF 69461
IEVzdG9uaWE= 69462
0LzQsA== 69463
cmdhbml6YXRpb24= 69464
L2RldmljZQ== 69465
SVJS 69466
X3RoZW4= 69467
YXJlbQ== 69468
IGFnZ2k= 69469
RU1PTg== 69470
INGB0Lo= 69471
IEVwaA== 69472
IE1TUA== 69473
IGxvZ2ZpbGU= 69474
LWxlYWRpbmc= 69475
YXRoYW0= 69476
IHVubWF0Y2hlZA== 69477
IFNpdHVhdGlvbg== 69478
KCl7fQo= 69479
CWNoYW5nZQ== 69480
IENoYXB0ZXJz 69481
LlJFU1VMVA== 69482
IG9l 69483
RVRZ 69484
X3ZpZA== 69485
Li4uJyw= 69486
IGFsdGVybmF0aXZlbHk= 69487
X1dT 69488
IFBsZW50eQ== 69489
IENyYXRl 69490
YXNpb25hbGx5 69491
IExhd24= 69492
IElNTQ== 69493
IFZhbml0eQ== 69494
IFZvb3I= 69495
5ZCv 69496
IG1pag== 69497
c3RlcnJlaWNo 69498
IFJERg== 69499
IENyaXRlcmlvbg== 69500
Lkludg== 69501
LlN0ZXA= 69502
X0ZyYW1l 69503
IEVOVU0= 69504
774= 69505
SG9wZWZ1bGx5 69506
TmF2Q29udHJvbGxlcg== 69507
IOy2lOqwgA== 69508
IFZhZGVy 69509
IHJ1dGhsZXNz 69510
JGtleQ== 69511
Y2t0 69512
aW5lbQ== 69513
aWxlbnQ= 69514
IHJlc3BlY3Rpbmc= 69515
bGNk 69516
KGJ0 69517
IEVsbGlvdA== 69518
IFVuaWRvcw== 69519
KENoYW5uZWw= 69520
IGVpdXM= 69521
IGFzdHJvbmF1dHM= 69522
IEhvc3Rpbmc= 69523
IGNhc3Rl 69524
IGhhcm1lZA== 69525
b3VwbGVz 69526
PFJvbGU= 69527
LkRlc2M= 69528
LWNvdXJzZQ== 69529
IENhcnRvb24= 69530
aWxlZ2Vk 69531
IG15c3RpY2Fs 69532
IOex 69533
KGZpZWxkTmFtZQ== 69534
V0lUSE9VVA== 69535
LHN1bQ== 69536
J2FjYw== 69537
CXJvd3M= 69538
IGdldFBhc3N3b3Jk 69539
IGNvY2tz 69540
cGl2b3Q= 69541
bmFtZW9m 69542
IGZlYXNpYmlsaXR5 69543
IGNvbW1lbmNlbWVudA== 69544
IERvbWU= 69545
LkpTT05FeGNlcHRpb24= 69546
IEh5ZGVyYWJhZA== 69547
IExpc3RlZA== 69548
IENvbXB1dGVycw== 69549
W3ZhbA== 69550
IGlzb3Q= 69551
CXdpbg== 69552
IG5laA== 69553
KElOVA== 69554
UmVwdWJsaWNhbg== 69555
INC/0YDQvtCy0LXRgA== 69556
RmF0 69557
IGVxdWl2 69558
IERhdHVt 69559
YXN0aQ== 69560
IHNvaWxz 69561
dXB1bmN0dXJl 69562
cHJlc3NpdmU= 69563
XykpOwo= 69564
Lldhcm4= 69565
IGhhcmI= 69566
Lm9uT3B0aW9uc0l0ZW1TZWxlY3RlZA== 69567
IGNsb3du 69568
IE9XTg== 69569
IGV4YW1pbmF0aW9ucw== 69570
IEV4aXN0aW5n 69571
am91cmQ= 69572
IGNvbmNlc3Npb24= 69573
IEZpcmViYXNlRGF0YWJhc2U= 69574
IHVwdGFrZQ== 69575
IGVubGlzdGVk 69576
IENhcmI= 69577
IGZ1cw== 69578
IGFidXNpbmc= 69579
LnByb2R1Y3Rpb24= 69580
eW5jaA== 69581
aWx5bg== 69582
cmVmdW5k 69583
LWhhdmU= 69584
KGFyZ3VtZW50 69585
IGZzY2FuZg== 69586
Y29uY2VwdA== 69587
X0xBTkU= 69588
IGVuZ2FnZXM= 69589
IEV4YWN0bHk= 69590
YWx0dXJh 69591
KEFkZHJlc3M= 69592
IHN5bm9ueW1vdXM= 69593
VG93bg== 69594
IFBheW5l 69595
cm9pdA== 69596
cGVyaWVuY2Vz 69597
cGFydGljbGVz 69598
X2Jk 69599
IEdyaW5kZXI= 69600
TWFuYWdlZE9iamVjdENvbnRleHQ= 69601
KGJi 69602
W3RtcA== 69603
LWNvbnM= 69604
YW9rZQ== 69605
IHN0ZXdhcmQ= 69606
IFZpZXdDaGlsZA== 69607
LmRyYXdMaW5l 69608
IFdBUk4= 69609
IHB1ZXM= 69610
bW9kYXRpb24= 69611
IHpz 69612
QWdyZWdhcg== 69613
ICIuIiw= 69614
LmNlbnRlclk= 69615
IGZsYXdsZXNz 69616
IGRldXRzY2hl 69617
IExpcXU= 69618
aXRlaXQ= 69619
X2ludHJv 69620
LXVzZWQ= 69621
LHRhcmdldA== 69622
IEhERA== 69623
ICUr 69624
b3JlbnQ= 69625
L09iamVjdA== 69626
IGRpc3J1cHRlZA== 69627
w6J0ZQ== 69628
IGFjY2Vzbw== 69629
IExvd2VzdA== 69630
IFdpbGxpYW1zb24= 69631
X2NyZWF0b3I= 69632
U2VsbA== 69633
IEJVRw== 69634
X3JlcHI= 69635
6ICM 69636
IGFyY2hhZW9sb2dpY2Fs 69637
b21lcnM= 69638
IEVsb24= 69639
IFNjcm9sbFZpZXc= 69640
IGxpbmVzdHlsZQ== 69641
aXNSZXF1aXJlZA== 69642
aXNrbw== 69643
X3Ji 69644
ZsO8aA== 69645
ICAgCQk= 69646
KGRlZmluZQ== 69647
IFNDTQ== 69648
IERJRkY= 69649
X2Jz 69650
cGVuZGljdWxhcg== 69651
cGFjZWQ= 69652
IEpvdXJuYWxpc20= 69653
LkpTT05BcnJheQ== 69654
IERhdGFBY2Nlc3M= 69655
TWFyaWE= 69656
IELDvA== 69657
SEVMTA== 69658
IE1BVFJJWA== 69659
T0xUSVA= 69660
YXBzaWJsZQ== 69661
XToKCg== 69662
bmFpcmVz 69663
X2hpc3RvZ3JhbQ== 69664
IGZsYWly 69665
aGF2aW5n 69666
IFVzZXJJRA== 69667
IFJlbGF0aW9uc2hpcHM= 69668
UmVwbGFjZW1lbnQ= 69669
IHJzYQ== 69670
IGVucmljaGVk 69671
IHJlaGVhcnM= 69672
IHfDpHJl 69673
IGxvYWRlcnM= 69674
IEVsZW5h 69675
IFdhdGNoaW5n 69676
CWpvYg== 69677
TkVXUw== 69678
L3NldHRpbmdzZGlhbG9n 69679
aXZlYw== 69680
X0VRVUFMUw== 69681
VGVtcGxhdGVOYW1l 69682
IEJPRFk= 69683
LmFkYXB0ZXJz 69684
d29mZg== 69685
Y29tYm9Cb3g= 69686
Lk5ld1JlYWRlcg== 69687
fHJlcXVpcmVk 69688
X3Byb2JhYmlsaXR5 69689
ICg6Og== 69690
IGNyYXo= 69691
IFVG 69692
VGVzdElk 69693
IGVzcGVjaWZpYw== 69694
aWJlbA== 69695
cGF3bg== 69696
640= 69697
IE1hcnI= 69698
IHN0YXJ0WA== 69699
X3NpdGVz 69700
Lz4KCg== 69701
IGltcGxpY2F0ZWQ= 69702
KGlubmVy 69703
IGVmZm9ydGxlc3NseQ== 69704
wq10aW9u 69705
YXdhcmQ= 69706
IGhvdmVyaW5n 69707
cHJp 69708
JHRlbXBsYXRl 69709
dWFuZw== 69710
IGF1dG9tYXRl 69711
ICoqLwoK 69712
aWJsaQ== 69713
IG51dHJpdA== 69714
KS4o 69715
ZWVlZQ== 69716
QXBpQ29udHJvbGxlcg== 69717
L293bA== 69718
IFdvbWVucw== 69719
LWRvdWJsZQ== 69720
IE9yZGVyaW5n 69721
c3Bt 69722
TW9kZXI= 69723
Lk5hdGl2ZQ== 69724
IEJlcmdlcg== 69725
ZXNkYQ== 69726
ZXJkaW5ncw== 69727
X2VjaG8= 69728
IHN1bW1hcml6ZWQ= 69729
IGVsZXZhdGU= 69730
X3F1YWQ= 69731
IHdvbw== 69732
dWxhbnQ= 69733
UHJvcGVydHlWYWx1ZQ== 69734
IHBsaXN0 69735
IEdSQVBI 69736
IFNUREVSUg== 69737
KScpLg== 69738
QXNzZXJ0aW9u 69739
bGlua3BsYWlu 69740
IGFjY2VsZXJhdGluZw== 69741
IHNuaXBwZXRz 69742
IFNhbG1hbg== 69743
YWJjZA== 69744
LmVjaG8= 69745
X2lkeHM= 69746
IHBjbQ== 69747
b2NhbHlwdGlj 69748
X2Nvb3JkaW5hdGU= 69749
KHByZXZpb3Vz 69750
LXNob3J0 69751
LnN1YnRyYWN0 69752
KEJpdA== 69753
P3Q= 69754
IE5vdGVib29r 69755
IEthdHJpbmE= 69756
aWZmZXJlbnRpYWw= 69757
c2lsZW50 69758
dGVybWluYXRlZA== 69759
IHRhbmdlbnQ= 69760
OlQ= 69761
IGNvc8Os 69762
IHBhcmFub2lk 69763
IGRlcHJpdmF0aW9u 69764
L3t7JA== 69765
IGhlbWlzcGhlcmU= 69766
IHJlaW5zdA== 69767
ZWN6 69768
dGVycg== 69769
IFBMQVRGT1JN 69770
IHRyb3VibGVzaG9vdGluZw== 69771
IHZhbGlkYXRpbmc= 69772
IE9yaW9u 69773
YXN1cmluZw== 69774
0LjQvdCw 69775
IGh1YnM= 69776
YXJlbmNl 69777
IENoYWxsZW5nZXM= 69778
IHplYWw= 69779
U3Bv 69780
IFNjcmVlbnM= 69781
IG11bmRhbmU= 69782
IER1bms= 69783
ICMjIyMj 69784
IFJFRkVS 69785
b25ldA== 69786
LmNhc2U= 69787
LXBvc2l0aXZl 69788
SU5URUdFUg== 69789
Lm1ldHJvTGFiZWw= 69790
U0FO 69791
IHByb2Zlc3Npb25z 69792
IHR5cmVz 69793
UGFsaW5kcm9tZQ== 69794
IFNFQ09ORA== 69795
LkdSRUVO 69796
IFNuYXBzaG90 69797
VUxL 69798
X2NpZA== 69799
JEk= 69800
IGN1bnQ= 69801
ZXN0cnVjdGlvbg== 69802
UHN5Y2g= 69803
IEh0dHBSZXNwb25zZU1lc3NhZ2U= 69804
ZW1iYWxp 69805
X3Jldmlld3M= 69806
U2VsZWN0YWJsZQ== 69807
X1BSRVNFTlQ= 69808
IEpzb25SZXF1ZXN0 69809
IFRoZXRh 69810
X2ludGVycA== 69811
UmFzdGVy 69812
I2Vycm9y 69813
LG9iag== 69814
IHR3ZWV0aW5n 69815
X0dQVQ== 69816
X3RvZGF5 69817
X3NlY3M= 69818
bmVlcw== 69819
LmdldFN5c3RlbVNlcnZpY2U= 69820
IHZub2Rl 69821
IFJlZ3VsYXRvcnk= 69822
IEZhaHJlbmhlaXQ= 69823
IHNjYWxlcg== 69824
X21hcmtldA== 69825
LmFsbG9jYXRl 69826
dGlja2V0cw== 69827
YXRhaw== 69828
IFBpa2U= 69829
IExvcg== 69830
ZGl0b3I= 69831
IGxvY2F0aW9uTWFuYWdlcg== 69832
IGluaXREYXRh 69833
IFdhcmU= 69834
IEluY2lkZW50 69835
IGNvbW1lbnRhdG9y 69836
dWVudGVz 69837
IEluZmxhdGU= 69838
IOWG 69839
IGFjdGl2aWRhZA== 69840
IEJq 69841
RU5VTQ== 69842
IHJldXNlZA== 69843
INC80LXQvQ== 69844
IHNlc2nDs24= 69845
LicpKTsK 69846
44GT44KT 69847
L2dl 69848
YWdhaW5zdA== 69849
LGxpbmU= 69850
KFVubWFuYWdlZFR5cGU= 69851
KT0i 69852
IHl0 69853
dWRpYW50ZXM= 69854
cm9sbGFibGU= 69855
5aGr 69856
X0NPTExFQ1RJT04= 69857
b2xpcw== 69858
dW1iZXJsYW5k 69859
KCIiIgo= 69860
IHppcHBlcg== 69861
DAo= 69862
L3NpZ251cA== 69863
IHN0cmFuZHM= 69864
cmF4 69865
LmNvbnN1bWVy 69866
IHVuY2VydGFpbnRpZXM= 69867
RGVidWdFbmFibGVk 69868
IGRlZmVhdHM= 69869
IGRydg== 69870
IHJlYWxpc20= 69871
YWdyYW1z 69872
WEU= 69873
IEhhemFyZA== 69874
LW5lZWRlZA== 69875
KHRhYmxlVmlldw== 69876
LkVsZW1lbnRz 69877
IFNBUg== 69878
CWVsZW0= 69879
KHBrZw== 69880
U2ltb24= 69881
VGludENvbG9y 69882
IFBoZW4= 69883
X0VNUA== 69884
2Iw= 69885
Pz4KCgo= 69886
X2F0dHJpYg== 69887
IGJveFNoYWRvdw== 69888
IENHQWZmaW5lVHJhbnNmb3Jt 69889
IENhbmJlcnJh 69890
IHN0YXJ0UG9z 69891
IFJhaw== 69892
CWNlcnI= 69893
IFRhbnphbmlh 69894
dW9uZw== 69895
Y2Fm 69896
LmJhc2ljQ29uZmln 69897
b2lucw== 69898
Q29udGFpbmVk 69899
PXNldA== 69900
X2dpdA== 69901
CXBhY2tldA== 69902
IGNvZg== 69903
KFRS 69904
5qC85byP 69905
KHt9KQo= 69906
IGRpcmVjY2lvbg== 69907
IHBsYXlsaXN0cw== 69908
IGFmZmluZQ== 69909
LnNldFNlbGVjdGlvbg== 69910
IGFtbW9u 69911
IGNvbnF1ZXJlZA== 69912
IFJhbW9z 69913
IFBTUA== 69914
PXN1bQ== 69915
IGNvcnJlbGF0aW9ucw== 69916
IHJvYWRtYXA= 69917
IGV4dGluY3Q= 69918
IGFkdmlzYWJsZQ== 69919
IGJvbWJlcnM= 69920
IFVJUmVzcG9uZGVy 69921
X0JQ 69922
INCx0YPQtNC10YI= 69923
IFByZW1pZXJl 69924
IFJV 69925
dHJhc2g= 69926
KGNsanM= 69927
Z251 69928
LlBhZ2Vz 69929
IGluc3BlY3RvcnM= 69930
TWV4aWNv 69931
IFZlcmU= 69932
UHJlYw== 69933
IFNjYWw= 69934
aXNwZXJz 69935
UnVubmFibGU= 69936
Lm9yaWc= 69937
IHNhaWxvcnM= 69938
UGFyc2luZw== 69939
IFZpc2l0b3Jz 69940
JnR5cGU= 69941
cG9wb3Zlcg== 69942
PCgpLA== 69943
IG93ZXM= 69944
IHJlYWN0cw== 69945
IERlZmluZWQ= 69946
IHJlYWxtZW50ZQ== 69947
IGRpY3RhdG9yc2hpcA== 69948
YWRtaW5pc3Ry 69949
aWRlbmQ= 69950
PUw= 69951
c3RyY2FzZWNtcA== 69952
XSU= 69953
0L7Qs9GA0LDQvA== 69954
ZWR1bGE= 69955
LWRlc2lnbmVk 69956
Q09WRVI= 69957
X0NoYW5uZWw= 69958
IHByb2pldG8= 69959
eW1vb24= 69960
Q0hLRVJSUQ== 69961
6YeK 69962
IHZlcmlmeWluZw== 69963
L2tleQ== 69964
LmZyb21DaGFyQ29kZQ== 69965
LkJpdA== 69966
X2J1ZGdldA== 69967
ICUi 69968
dmV5b3I= 69969
IHl1bQ== 69970
IGV4dHJlbWVz 69971
X0NSRQ== 69972
Z2V0U3RhdHVz 69973
c3Vic2VjdGlvbg== 69974
IHNvYWtlZA== 69975
IGdlbmF1 69976
X0NIQVJBQ1RFUg== 69977
5oyB 69978
LW9ubGluZQ== 69979
LnRvQ2hhckFycmF5 69980
Y2VyZXI= 69981
Il0sIg== 69982
IHN0cm9sbA== 69983
IFl1YW4= 69984
IFdhbmRlcg== 69985
IHNpc3RlbQ== 69986
X3Vj 69987
KG5vbWJyZQ== 69988
Y2hhbnRtZW50 69989
KGNsb3Nl 69990
bWV0aA== 69991
LXNlY3JldA== 69992
cHNldWRv 69993
Q291bnR5 69994
Q09OVFJPTA== 69995
IHNvbHZlbnQ= 69996
IHNvYXJpbmc= 69997
IHNwaWVz 69998
TmF2SXRlbQ== 69999
IHJlc2VtYmxhbmNl 70000
KGJpdHM= 70001
IGNlbGx1bA== 70002
IGFzc29jaWF0aXZl 70003
Lmltd3JpdGU= 70004
LmNvb3JkaW5hdGU= 70005
XSwk 70006
KHNr 70007
Ki8p 70008
IG1vY2tz 70009
IGp1bmc= 70010
X0RPQw== 70011
LXJ1bnRpbWU= 70012
IEdpdmVz 70013
dW5q 70014
KHNlZw== 70015
KFtc 70016
IG5haA== 70017
X2V4cGVjdA== 70018
Um93SW5kZXg= 70019
KGZvcmNl 70020
IEdldFZhbHVl 70021
IHN1bW1hcmllcw== 70022
X1NIQVJF 70023
LXRyYWluZWQ= 70024
IEJsYW5j 70025
IGZpdHRpbmdz 70026
IHdhdGVyZnJvbnQ= 70027
Lk5vdGU= 70028
IFdhbmQ= 70029
b3ZlcmU= 70030
cHJlZGljdGlvbg== 70031
IGNzcg== 70032
LnRvcEFuY2hvcg== 70033
IFN0cm9rZQ== 70034
X0ZpbHRlcg== 70035
YXRoZQ== 70036
ICJcXCI= 70037
IEFGRg== 70038
PSIvIj4= 70039
LlJlcXVlc3RNZXRob2Q= 70040
kJzntKI= 70041
IHdpdG5lc3Npbmc= 70042
QXBwYXJlbnRseQ== 70043
IG1kaQ== 70044
c3RpY2tz 70045
IEFsdg== 70046
w6TDnw== 70047
X2NvbnRpbg== 70048
IGJvaWxlcnM= 70049
IE1hcnhpc3Q= 70050
SU9D 70051
bmVybw== 70052
aW5uYWNsZQ== 70053
TGl0 70054
Y2Vj 70055
S2V5UHJlc3M= 70056
R2V0RGF0YQ== 70057
IGlzbnQ= 70058
0YDQvtCy0LXRgA== 70059
IHFyeQ== 70060
Um9vdEVsZW1lbnQ= 70061
IE5TQ29kZXI= 70062
LmdldE51bQ== 70063
IHRocmVlc29tZQ== 70064
VXNlcw== 70065
LiJf 70066
IENvbnRpbnVvdXM= 70067
IHBvcHVsaXN0 70068
IFBzeWNob2xvZ2ljYWw= 70069
X2N5Y2xlcw== 70070
IGlmZGVm 70071
aXBoZXJhbHM= 70072
CSAgICAgICAgICA= 70073
IGFkdmlzZXM= 70074
IENvbXBhbmlvbg== 70075
dHJpZ2h0 70076
IGdyb3dlcnM= 70077
IFNPQ0tFVA== 70078
eW1jZQ== 70079
UlNT 70080
bWVtYmVyT2Y= 70081
VG91Y2hhYmxl 70082
X2FycmF5cw== 70083
IGp1bXBlcg== 70084
IGhlcnBlcw== 70085
IFRpdHM= 70086
IFRlbGVmb24= 70087
X1BBTkVM 70088
dWdlbg== 70089
5YyX5Lqs 70090
LlNpdGU= 70091
X3VucmVnaXN0ZXI= 70092
X2Nocg== 70093
LnRm 70094
LWh1bWFu 70095
IGFzb2Np 70096
IHF1ZWVucw== 70097
QW50aG9ueQ== 70098
IHN0cmluZ2VudA== 70099
IG1vbGVzdA== 70100
c2V0SWNvbg== 70101
SEVFTA== 70102
SEVMUA== 70103
RERT 70104
LmNtcw== 70105
SVNUUklCVVQ= 70106
Y2llcw== 70107
LmZvckNoaWxk 70108
LmNoaw== 70109
IE90dG9tYW4= 70110
IFRQUA== 70111
IG1pbw== 70112
IEJ1Zg== 70113
Ym9h 70114
VmVyc2lvbnM= 70115
KGxvY2FsZQ== 70116
IFJhaWxyb2Fk 70117
YmNj 70118
LyoqPA== 70119
LXBhaWQ= 70120
IGNlbGVyeQ== 70121
YXRpc2NoZQ== 70122
Z2V0T3B0aW9u 70123
b3Jpb3VzbHk= 70124
IGFkYXB0ZXJz 70125
U3RvcmVz 70126
L3NhdmU= 70127
IEJhc2lz 70128
0Y7Rgg== 70129
IExhZA== 70130
X3JlbGF0aW9uc2hpcA== 70131
IENsdWJz 70132
IOCo 70133
OiI8PA== 70134
X01JU0M= 70135
VmlzdWFsaXphdGlvbg== 70136
IG1pcnJvcmVk 70137
ZXNwZXI= 70138
U3RyTG4= 70139
IHJlc3BvbnNlT2JqZWN0 70140
5ZCR 70141
LmVuY29kZXI= 70142
LS0tLS0tLS0tCgo= 70143
IGdyaWRWaWV3 70144
X2luZGVudA== 70145
YW50d29ydA== 70146
IGFycml2YWxz 70147
IFNldHRsZW1lbnQ= 70148
Vmlld0luaXQ= 70149
LXZhbHVlcw== 70150
IHdhdGVyZmFsbA== 70151
IGluY2FyY2VyYXRpb24= 70152
IFRlZW5z 70153
CXNpZ24= 70154
aW1tdW5l 70155
LnNlY29uZGFyeQ== 70156
IHZpZGVvZXI= 70157
IOi+k+WFpQ== 70158
IGludGltaWRhdGlvbg== 70159
ZW5kYWxl 70160
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj 70161
IGluc2lnaHRmdWw= 70162
IHNhbmRz 70163
IHBob3RvZ3JhcGhpYw== 70164
UGFnaW5hdG9y 70165
IGRpc2NpcGxpbmVk 70166
X1RMUw== 70167
XSkpLA== 70168
cmxlbg== 70169
PGNlbnRlcg== 70170
X1BDTQ== 70171
S2VsbHk= 70172
LWJpbGxpb24= 70173
LmN4 70174
IGpldXg= 70175
IGZpbGVMaXN0 70176
IFFEaWFsb2c= 70177
dHJhY3RpdmU= 70178
RHQ= 70179
IGVzdHJvZ2Vu 70180
IHN0YXJjaA== 70181
X2VtaXQ= 70182
INC30LDQv9GA0L7RgQ== 70183
IFF1YXJ0 70184
IGluYWR2ZXJ0ZW50bHk= 70185
IHRyb25n 70186
c2hpcG1lbnQ= 70187
IE5PUg== 70188
IFNjcmVlbmluZw== 70189
IERpc2Nvbm5lY3Q= 70190
bWVubw== 70191
IFdvcnN0 70192
IE5y 70193
e2s= 70194
c3Bs 70195
X2N0cg== 70196
LnNvcnRlZA== 70197
LXBsYWNlaG9sZGVy 70198
KCk7Ig== 70199
aHVyc3Q= 70200
LWhpdA== 70201
LnNvbHZl 70202
566X 70203
IHVuZGVhZA== 70204
IHdoaW1z 70205
IGdldERlZmF1bHQ= 70206
IE5pa2tp 70207
YXNzZW1ibGU= 70208
IHJlbG9jYXRlZA== 70209
LXJldA== 70210
SXRhbGlhbg== 70211
OlN5c3RlbQ== 70212
LnNjaGVkdWxlcg== 70213
4oCcU28= 70214
Rm9yYmlkZGVu 70215
QVZPUg== 70216
emlhxYI= 70217
LkFkYW0= 70218
CWNhbnZhcw== 70219
IHBhcnRuZXJpbmc= 70220
IGd5bW4= 70221
IG1hbmlj 70222
RGlmZmVyZW50 70223
IMOlcmh1cw== 70224
IGZlcnRpbGU= 70225
Y2xm 70226
LQ0K 70227
LnJldmlldw== 70228
b2RhYmxl 70229
IEJvdW5kcw== 70230
b2Jhbw== 70231
IFBhcGVyYmFjaw== 70232
IG1vZGlmaWM= 70233
Y2hlY2twb2ludA== 70234
IEFwcEJ1bmRsZQ== 70235
IHN0YWJpbGl6ZQ== 70236
IEF1ZGlvQ2xpcA== 70237
bW9udGhseQ== 70238
LmJlaA== 70239
IGZsb3I= 70240
IGJvbmRlZA== 70241
IFdvcmtvdXQ= 70242
Y29taW5ncw== 70243
IHJhYmJpdHM= 70244
IEJBTA== 70245
Q0NS 70246
X3Z1ZQ== 70247
IExldml0cmE= 70248
IGxpYmVydGluZQ== 70249
IGNoYWxsZW5nZXI= 70250
IFZhY2F0aW9u 70251
VG9G 70252
fSQv 70253
X0RyYXc= 70254
IGZlbmNlcw== 70255
IGRhdGFzb3VyY2U= 70256
IHBhcGVs 70257
c2xpY2s= 70258
X21lcw== 70259
IFVJU3Rvcnlib2FyZFNlZ3Vl 70260
KFRhZw== 70261
IOWvuQ== 70262
ICctJyk= 70263
X0NMQVNTRVM= 70264
KFJlbmRlcg== 70265
CWZ3cml0ZQ== 70266
VUVE 70267
QUVT 70268
KGpzb25QYXRo 70269
IHNsb3dz 70270
PkRlc2NyaXB0aW9u 70271
IGVucmljaG1lbnQ= 70272
IGl0ZW1wcm9w 70273
IFBvdmVydHk= 70274
IGFic29yYmluZw== 70275
IFBzeWNobw== 70276
5rGf 70277
LC4KCg== 70278
SW52ZXJzZQ== 70279
IGFkanVk 70280
aWdpZEJvZHk= 70281
emlvbmk= 70282
ICInLiQ= 70283
5LiN5a2Y5Zyo 70284
VGhhaQ== 70285
IHNsYWlu 70286
IGJydXRhbGx5 70287
IFBlcnNwZWN0aXZl 70288
IFJldGlyZW1lbnQ= 70289
JHJz 70290
IHNlcnZpY2VOYW1l 70291
IOyI 70292
LXByb2Nlc3Npbmc= 70293
YnJhbmRz 70294
OmVycm9y 70295
KHByb3BlcnR5TmFtZQ== 70296
IEJvZWg= 70297
L2Nt 70298
L3JlYWQ= 70299
QU1C 70300
IHJvdGF0aW9ucw== 70301
LndvcmtzcGFjZQ== 70302
Onk= 70303
IHVwaG9s 70304
dW5reQ== 70305
IEJyYWNl 70306
L21ldGE= 70307
IEJyYXZl 70308
YWNqZQ== 70309
KFVJbnQ= 70310
IHZpZWlsbGU= 70311
cmFkaQ== 70312
X2R5bg== 70313
Tlc= 70314
bG9zZXI= 70315
ZXJ1c2Zvcm0= 70316
IEJhcnRvbg== 70317
IGZhcmVz 70318
IE11aw== 70319
4buHdQ== 70320
IEF1ZGlvU291cmNl 70321
KChf 70322
LkJpZw== 70323
Lm9yZ2FuaXphdGlvbg== 70324
IFRyaWNr 70325
IGJsdXNo 70326
KFRZUEU= 70327
IFJlbGF0aXZlTGF5b3V0 70328
bGVjdHJvbg== 70329
XX0i 70330
IFphcA== 70331
IFR3ZWx2ZQ== 70332
Okw= 70333
IHN0aWZmbmVzcw== 70334
X0hFTA== 70335
IHNwZXA= 70336
KGNvZGVy 70337
IHRhbWFuaG8= 70338
IGFudGlveGlkYW50 70339
IGhvc3BpdGFsaXplZA== 70340
R1BD 70341
IHNjcnV0aW4= 70342
4buBbg== 70343
IFNa 70344
IEp1bGl1cw== 70345
IFNhYmI= 70346
ZWxvcg== 70347
KG1j 70348
6YeM 70349
IFBpbnM= 70350
IG1vZGVyYXRlbHk= 70351
IEvDvA== 70352
b3JnYW5pemF0aW9ucw== 70353
IFNDT1JF 70354
IHNjb3Vy 70355
IGNob3I= 70356
IFVJRWRnZUluc2V0cw== 70357
IHNrdWxsZQ== 70358
X29wZXJhbmQ= 70359
LmdzdGF0aWM= 70360
L25naW54 70361
IGdldFdpZHRo 70362
QmF0dGVyeQ== 70363
IFNldHRlcg== 70364
bUE= 70365
KFJlc291cmNlcw== 70366
X3BsYXlsaXN0 70367
IG1hbmdv 70368
IE9SRA== 70369
YW5raW5k 70370
ZXdheXM= 70371
Pyks 70372
IEdMVVQ= 70373
IGp1c3Rl 70374
IHBheWVy 70375
KGNhbQ== 70376
IFRlYWNo 70377
IEZsdXg= 70378
IG91dHNwb2tlbg== 70379
IFN0cmluZ1V0aWw= 70380
IFpoYW8= 70381
LkhlbHBlcg== 70382
IGVzdGlsbw== 70383
IEFudGhyb3A= 70384
IEd1YXJkcw== 70385
Vm9jw6o= 70386
Olsn 70387
CXByb2R1Y3Q= 70388
dXBkYXRlZEF0 70389
IGluc3BpcmVz 70390
cXc= 70391
QkxFTQ== 70392
YWtpc3Rhbg== 70393
IGN6xJk= 70394
LWhlYXJ0ZWQ= 70395
IENvbXBlbnNhdGlvbg== 70396
0LjQsw== 70397
IGNvbWE= 70398
IEZpYXQ= 70399
IHhtbGh0dHA= 70400
IHJlZmVycmFscw== 70401
IHNwZWN0YXRvcnM= 70402
IFRvcw== 70403
aXNvcw== 70404
SU1QTEVNRU5U 70405
IGVudHJlcHJlbmV1cmlhbA== 70406
IFNjb3V0cw== 70407
IEFsb25l 70408
YnJva2Vy 70409
UHJvZHVjdElk 70410
IEtvYmU= 70411
IGNoYXVk 70412
L2ZlYXR1cmVz 70413
IHJvb21tYXRl 70414
IFByb2plY3Rpb24= 70415
YXZvdXJpdGVz 70416
X0pPSU4= 70417
IEFWQw== 70418
X3BoeXM= 70419
S2V5UHJlc3NlZA== 70420
LDw= 70421
IHVucmVhY2hhYmxl 70422
IENpdGF0aW9u 70423
W2NoYW5uZWw= 70424
c3RhcnRzd2l0aA== 70425
IEphZ3VhcnM= 70426
LklzRmFsc2U= 70427
bWVtYmVyc2hpcA== 70428
QXR0ZW50aW9u 70429
IHJlbW9kZWxpbmc= 70430
IENpbmR5 70431
IGNsaW5pY2FsbHk= 70432
IG1pbGxlbm5pYWxz 70433
IM60 70434
IHJmbA== 70435
ZW5ldA== 70436
IG9icmln 70437
IHZvbHVudGVlcmluZw== 70438
Q3JlZGl0cw== 70439
CWFy 70440
IHJlc2lzdGluZw== 70441
IFByb2R1a3Q= 70442
PT09Ig== 70443
IGNvbmVjdA== 70444
IHJpag== 70445
INeU 70446
IHB1YmxpY0tleQ== 70447
IG95 70448
IEJ1dHQ= 70449
X21pc2M= 70450
IEJlc3Rl 70451
IFBMQw== 70452
IOafpQ== 70453
IEJveEZpdA== 70454
IiIu 70455
VGVzdEZpeHR1cmU= 70456
IGNoYXR0ZXI= 70457
IGRvb3J3YXk= 70458
eXNpemU= 70459
INGH0YI= 70460
SUNUVVJF 70461
PScuLi8= 70462
c2hvd24= 70463
X3dlYXRoZXI= 70464
IExvZ01hbmFnZXI= 70465
XX0iCg== 70466
IGNvbG91cmZ1bA== 70467
IHJ1bW9yZWQ= 70468
IGzDpQ== 70469
IHByb2Jz 70470
CWJ1aWxk 70471
IOWmgg== 70472
LnJldg== 70473
IGludGVyY2VwdGVk 70474
R2F5 70475
TGlzdENvbXBvbmVudA== 70476
IHBpw6g= 70477
IkF0 70478
IGFnYXI= 70479
IEd1bmQ= 70480
X0FFUw== 70481
7IM= 70482
jpjsnbQ= 70483
IGF1dGhvcmlzZWQ= 70484
IENoYWxs 70485
X2xvZ291dA== 70486
Y3Jvbg== 70487
YXRlZ2llcw== 70488
cGVyc2lzdGVudA== 70489
IEFuZEFsc28= 70490
dXN6 70491
X3Jlc3RhcnQ= 70492
IGRlY2lk 70493
emY= 70494
IHBhZ2luYXRvcg== 70495
b2xsZXI= 70496
IEhH 70497
T3BhcXVl 70498
c2VhdQ== 70499
IE9NSVQ= 70500
IFRoaWNrbmVzcw== 70501
IEFpcndheXM= 70502
X2RlbQ== 70503
eXRpYw== 70504
IHByb3Rlc3RlZA== 70505
IHVwcmlzaW5n 70506
IHN1aW5n 70507
IFNoZWxieQ== 70508
LmVuZXJneQ== 70509
IGFsbGVsZQ== 70510
LWJpZw== 70511
U3RyaW5nQnVpbGRlcg== 70512
IHNpZGVsaW5lcw== 70513
IFRV 70514
X2Fp 70515
LkhPUklaT05UQUw= 70516
IHJhZ2luZw== 70517
LnRvTG9jYWxl 70518
Lm11c3Q= 70519
eEZGRg== 70520
Lm5paA== 70521
ICd7fSc= 70522
2YjYrw== 70523
IHB1bG1vbmFyeQ== 70524
IOWPkQ== 70525
IG7Dum1lcm9z 70526
IE5hcG9sZW9u 70527
X01ldGhvZEluZm8= 70528
bGFzdGluZw== 70529
IGV4cG9zdXJlcw== 70530
IGVtYmFyaw== 70531
X3VkcA== 70532
S2lkcw== 70533
X0NPTk5FQ1RFRA== 70534
IHdlZWRz 70535
UE9PTA== 70536
IGtyaWo= 70537
IG51aXM= 70538
Sk5JRVhQT1JU 70539
YWFhYWFhYWE= 70540
IO2P 70541
5Lu9 70542
IHJlcGxlbg== 70543
IFRyaWFscw== 70544
d2FzaA== 70545
cnV0 70546
LWJlZm9yZQ== 70547
X0FUVEFDSE1FTlQ= 70548
VU5U 70549
XFZhbGlkYXRpb24= 70550
VG9u 70551
IGhlYWRpbmdz 70552
UHJvYmFibHk= 70553
IGZhYnJpY2F0ZWQ= 70554
U29ja2V0QWRkcmVzcw== 70555
IGxldHRyZQ== 70556
KSI+ 70557
IHZhY2NpbmF0ZWQ= 70558
Omh0dHA= 70559
IGNvbmRvbA== 70560
c2hlZA== 70561
IFNwaWVsZQ== 70562
44OU 70563
RGVwbG95 70564
LkNvbnRyYWN0 70565
LWJv 70566
Iy8= 70567
IGludGVyY2VwdGlvbg== 70568
IGlzYm4= 70569
IG1hbm5lcnM= 70570
L2Fj 70571
CUNoZWNr 70572
X2Zn 70573
IGVuZFBvaW50 70574
X3dlYXBvbg== 70575
IHVuaW50ZW50aW9u 70576
IHF1aXRz 70577
X01JQw== 70578
YXBpcm8= 70579
IGJhbGxvb25z 70580
IGdyYWRz 70581
bWFycmllZA== 70582
IDwqPg== 70583
IGRpc3RvcnQ= 70584
X01FU1NBR0VT 70585
IFBTQQ== 70586
X1BE 70587
YWxzZXg= 70588
IERpYWxvZ3Vl 70589
IHJlZ2lzdHJhdGlvbnM= 70590
IE9yaWdpbnM= 70591
IGZsYW5r 70592
PzsKCg== 70593
OwoKCgoK 70594
XS0k 70595
IERlc3M= 70596
LlN0YXR1c0JhZFJlcXVlc3Q= 70597
IGluaGFiaXRlZA== 70598
IGdpbHQ= 70599
IFNURENBTEw= 70600
LnRoZXRh 70601
JCQkJA== 70602
aWNsYXNz 70603
QXBhcnQ= 70604
Lmxpc3RCb3g= 70605
IEJlbGFydXM= 70606
IGRlbmVu 70607
IFN1c3NleA== 70608
CWRlbA== 70609
X0VD 70610
bmVhcmVzdA== 70611
XE9yZGVy 70612
UGFja2FnZXM= 70613
Zm9ybWVybHk= 70614
Ke+8jA== 70615
6LSj 70616
U2V4eQ== 70617
IGhvcnJvcnM= 70618
Uk9BRENBU1Q= 70619
QXBwcm94 70620
RGVzaw== 70621
QU1FRA== 70622
Lk5vcm1hbGl6ZQ== 70623
X3B1Ymxpc2hlZA== 70624
IERlYm9yYWg= 70625
56eR 70626
IHBvdW5kaW5n 70627
IEVzcGVy 70628
IERhbmNpbmc= 70629
IExPT1A= 70630
IFJveWFscw== 70631
IGluc3VyZQ== 70632
IEludmVzdG9ycw== 70633
IHRoZW9sb2dpY2Fs 70634
QXBwb2ludG1lbnQ= 70635
IGNhdGVnb3JpY2Fs 70636
IGNyYW4= 70637
VmFsaWRpdHk= 70638
IHJlc3BvbmRlcnM= 70639
ICgpDQo= 70640
ZXBhZA== 70641
QklUUw== 70642
IExhbWJlcnQ= 70643
c3VtbQ== 70644
YWNpZGFk 70645
IGxvZ2dlZElu 70646
PVc= 70647
LkxvY2FsaXphdGlvbg== 70648
cmlkbw== 70649
JyIpCg== 70650
IFdlYlZpZXc= 70651
bG90aA== 70652
IHRlYXNlcg== 70653
IENhbmQ= 70654
IGVwaWxlcHN5 70655
SW5jcmVhc2U= 70656
aXZpdHlNYW5hZ2Vy 70657
ZW50cmFudA== 70658
VGVsZWZvbm8= 70659
LmN1cnJlbnRTdGF0ZQ== 70660
IE5vZWw= 70661
ICAgICAgICAgICAgCQk= 70662
IGV4aGF1c3Rpb24= 70663
ZWxpYW4= 70664
IGNvdmV0ZWQ= 70665
LXByb2R1Y3Rpb24= 70666
KHN0ZGlu 70667
IHByZWZlcmFibGU= 70668
IG9mZmVuZGluZw== 70669
KGNvbW1pdA== 70670
CWFs 70671
IHJlbG9jYXRl 70672
IGFub21hbA== 70673
IERpc2Vhc2Vz 70674
IEZvcmc= 70675
IFdJRkk= 70676
IEtpbGxpbmc= 70677
cXY= 70678
IGZtYXA= 70679
IGxsZXZhcg== 70680
dGl0cmU= 70681
LmVtcA== 70682
LCRf 70683
YXZy 70684
Q2FuQmU= 70685
X21h 70686
IEhhd2tpbnM= 70687
X1JPVVQ= 70688
IGxvYWRJbWFnZQ== 70689
IFdhaA== 70690
IERlbXM= 70691
IGluZGVudGF0aW9u 70692
cHJlY2F0aW9u 70693
IOaWh+S7tg== 70694
IEJ1ZGFwZXN0 70695
IHV0Yw== 70696
KGhvdXJz 70697
IHRyYW5ueQ== 70698
QW5z 70699
ennEhw== 70700
LnZlaGljbGU= 70701
Q29pbnM= 70702
IEJyYXVu 70703
CVJlc3BvbnNl 70704
IHZyaWo= 70705
IHN0cmFuZ2VseQ== 70706
IEZhc2M= 70707
XFNlc3Npb24= 70708
TW91c2VMaXN0ZW5lcg== 70709
IFJvbGxz 70710
4bqnbg== 70711
LmdycGM= 70712
SW50ZWdlckZpZWxk 70713
CWFmeA== 70714
RG9ja0NvbnRyb2w= 70715
JVw= 70716
JTsi 70717
IGdpZ2c= 70718
IGJvcnJvd2Vy 70719
IGRpc3BvbmlibGVz 70720
X1JFQ1Q= 70721
IFRoaW4= 70722
IHBlYXJs 70723
eEZC 70724
IHJpcHBsZQ== 70725
IGtIeg== 70726
LmFjcXVpcmU= 70727
Ymlvcw== 70728
dGFibGVGdXR1cmU= 70729
L2FudGxy 70730
b3JhY2xl 70731
IEFSRUE= 70732
IGludGVuc2VseQ== 70733
IHByb3RvYnVm 70734
IExFTkc= 70735
IEhlYWRxdWFydGVycw== 70736
YXRoZWQ= 70737
TWluZA== 70738
aW5peg== 70739
CVBhdGg= 70740
WE1MTG9hZGVy 70741
IGFsbG9jYXRpb25z 70742
LnNsb3Q= 70743
UHJvY0FkZHJlc3M= 70744
IHJvbGVJZA== 70745
Oyc7Cg== 70746
IEJSRUFL 70747
IFBlcmZvcm1pbmc= 70748
Lk9yZGluYWxJZ25vcmVDYXNl 70749
LWds 70750
Omg= 70751
IGRvd25sb2FkYWJsZQ== 70752
IFN1YnNjcmliZXI= 70753
YW5zZQ== 70754
IGNoYXJhY3Rlcml6ZQ== 70755
IHNocnVnZ2Vk 70756
IHNjcA== 70757
IGd1c3Rh 70758
IG1ldGFsbA== 70759
IGxhYm9yYXRvcmllcw== 70760
IFhpbg== 70761
IE1vdG9yY3ljbGU= 70762
IGVnZXQ= 70763
IGZpbmFuY2Vk 70764
IE1PRElGWQ== 70765
KlI= 70766
QWk= 70767
IGV4dHJlbWlzbQ== 70768
IEhhbGlmYXg= 70769
IHZhbW9z 70770
JG51bQ== 70771
IGltcGFydA== 70772
YnJpY2s= 70773
IOexuw== 70774
IGZ1ZXJh 70775
IFJPTEU= 70776
LkNvbmN1cnJlbnQ= 70777
X09QRVJBVE9S 70778
IGN5bmljYWw= 70779
IFJlZ2luYQ== 70780
Z2V0RXJyb3I= 70781
2KM= 70782
YnN1Yg== 70783
SmFwZ29sbHk= 70784
IGluaGliaXRvcg== 70785
SnVzdGljZQ== 70786
44U= 70787
TmV2ZXJ0aGVsZXNz 70788
LXNlbQ== 70789
Lm9nZw== 70790
cmVxdWVudA== 70791
IG5vc3Nv 70792
SGFpcg== 70793
LkxpYnJhcnk= 70794
bWRpcg== 70795
IGhhcmk= 70796
IFRhcmE= 70797
IFBvcnRv 70798
bmV0aW5ldA== 70799
IGFsbGlhbmNlcw== 70800
ZWxsc2NoYWZ0 70801
X1N1cmZhY2U= 70802
CVZpZXc= 70803
YXR1cmRheXM= 70804
IHBvcGNvcm4= 70805
X1BBUlNF 70806
IFJpcHBsZQ== 70807
IHBoYW50b20= 70808
IG1vbmRv 70809
LmNyZWF0ZUNsYXNz 70810
IEtvcmVhbnM= 70811
IGZhc2U= 70812
IFdvY2hlbg== 70813
IEVxdWlw 70814
LWVpZ2h0 70815
IFN0YXRlbWVudHM= 70816
IGFkYXB0aW5n 70817
UHJlY2lv 70818
IEN1cmU= 70819
IGNhbWJpYXI= 70820
5rCR 70821
IGhleGFkZWNpbWFs 70822
c3BpcmFjeQ== 70823
YmlsdA== 70824
IFl1Zw== 70825
IC0tLT4= 70826
IFBQQw== 70827
aXN6 70828
YWtlRnJvbU5pYg== 70829
IERpc3A= 70830
IEF0aGxldGljcw== 70831
IG5pZ2h0Y2x1Yg== 70832
R09PRA== 70833
LnNldEdlb21ldHJ5 70834
K1s= 70835
L3NlbmQ= 70836
IGJpbmFyaWVz 70837
IHLDoXA= 70838
OnJlcQ== 70839
LWNvbnN1bWluZw== 70840
ZXJ0aW1l 70841
VVBEQVRFRA== 70842
X251bGxhYmxl 70843
VklO 70844
dWxpYQ== 70845
Y3lhbg== 70846
IG1pc3VuZGVyc3RhbmRpbmc= 70847
b3JpY2Fs 70848
ZGVncmVlcw== 70849
TGVhZGluZw== 70850
LkFS 70851
aWNrZXN0 70852
TnVldm8= 70853
dWZvcmlh 70854
IGdvb2RpZXM= 70855
IGZvcmVz 70856
KCk8PCI= 70857
YWRlbWlj 70858
QWN0aW9uQ3JlYXRvcnM= 70859
c2VydmVybmFtZQ== 70860
KG50 70861
ZGJDb250ZXh0 70862
IGFpcmJvcm5l 70863
IGV4aGliaXRpb25z 70864
Y2VsZQ== 70865
IHRlbGE= 70866
PE1vdmll 70867
KCd7fQ== 70868
RXhwbGFuYXRpb24= 70869
IGhPYmplY3Q= 70870
IGJlYXJlcg== 70871
ZW5zaWJseQ== 70872
bmlw 70873
IEplcm9tZQ== 70874
IENa 70875
IGRhdGVGb3JtYXR0ZXI= 70876
w6ljaWFs 70877
U2V0TmFtZQ== 70878
b3VjZQ== 70879
IHJlZ3Jlc3M= 70880
JkM= 70881
KCkiPg== 70882
LnNldFByZWZlcnJlZFNpemU= 70883
IE1JRA== 70884
IEFsZXNz 70885
IGhvcnNlcG93ZXI= 70886
IGF0bQ== 70887
IFBhY2thZ2luZw== 70888
IGNpcGhlcnRleHQ= 70889
UmVxdWVzdE1ldGhvZA== 70890
IGJlaWRlbg== 70891
6KM= 70892
IFBPVw== 70893
LldyaXRlSGVhZGVy 70894
ZGlyZWN0b3I= 70895
LWJ1dA== 70896
44Gg44GV44GE 70897
aW5jZXI= 70898
X2Ru 70899
ISEhISE= 70900
IG1hbnVmYWN0dXJlcw== 70901
LlRleHRVdGlscw== 70902
IGNvbnNjaW91c2x5 70903
IGJvdW5jZWQ= 70904
Y3VsdHVyZQ== 70905
IFNwYXI= 70906
IFBpcGVy 70907
LnByZXNz 70908
LW93bmVy 70909
IGV2YWx1YXRvcg== 70910
IFNUUkVBTQ== 70911
LlBpY3R1cmVCb3hTaXplTW9kZQ== 70912
IHN1Z2Fycw== 70913
U2NyZWVuV2lkdGg= 70914
IG5leHRTdGF0ZQ== 70915
IGl2b3J5 70916
IGJydW5jaA== 70917
ZGVuc2l0eQ== 70918
X09X 70919
IENvcm9uYXZpcnVz 70920
IENGUg== 70921
YmFr 70922
XENhdGVnb3J5 70923
5pWw57uE 70924
IGludm9rZXZpcnR1YWw= 70925
fSgpCg== 70926
IHN1amV0 70927
LW1hcmtlcg== 70928
aXNkaWdpdA== 70929
IE1vYmls 70930
IEpzb25SZXF1ZXN0QmVoYXZpb3I= 70931
X1JFTU9URQ== 70932
LmV4aXN0c1N5bmM= 70933
IHJpY2hlcw== 70934
LnByZXNlbnRlcg== 70935
IGdsQ29sb3I= 70936
IGhhbnlh 70937
IGZvcnRyZXNz 70938
IGZsYXNoZWQ= 70939
dml6 70940
cmVxdWVudGx5 70941
YnVhdA== 70942
JGNvbg== 70943
Pnw= 70944
LkZ1bmM= 70945
IGh1bW9yb3Vz 70946
dWVt 70947
LlpFUk8= 70948
IFNUTA== 70949
IEJ1aw== 70950
L3NhbXBsZQ== 70951
IEdyb3M= 70952
UmVjaXBlcw== 70953
IGluZmxhdGVk 70954
IHN3dW5n 70955
OkY= 70956
RmFjaW5n 70957
LlRoZW1l 70958
0L3QuNC6 70959
IHNwbGVuZGlk 70960
IHJlcXVlc3RJZA== 70961
LkNlbnRlclNjcmVlbg== 70962
L2F1dG9sb2Fk 70963
ZW1iZWRkZWQ= 70964
X2RlcGFydA== 70965
IFBvcnRz 70966
4LmD 70967
0LDQudC0 70968
ZGlzY3Vzc2lvbg== 70969
X2NvbnN1bQ== 70970
IHNjb3V0cw== 70971
IGNvbGFib3I= 70972
LlN0YWdl 70973
Lm5hbm8= 70974
ZWxkb3Jm 70975
IGdlbWFjaHQ= 70976
ICAgICAgICAgICAgICAgICAgICAgICAgICAK 70977
IHBvbGljeW1ha2Vycw== 70978
X1BLVA== 70979
LFRo 70980
b2t5 70981
X1VJRA== 70982
UGluZw== 70983
IG9yY2hlc3Q= 70984
IG9wdGljcw== 70985
dWhhbg== 70986
IFhPUg== 70987
IGVzcGHDsW9s 70988
IEFkaWRhcw== 70989
cm5n 70990
bWFucw== 70991
LnZzdGFjaw== 70992
IGdldGF3YXk= 70993
IGhpZXJhcmNoaWNhbA== 70994
YW5vaWE= 70995
IEJpdG1hcEZhY3Rvcnk= 70996
cmVhbG0= 70997
CWFw 70998
X2FwcHM= 70999
LWRpdmlkZXI= 71000
LmRyYXdlcg== 71001
IEhBUkQ= 71002
J107Pz4K 71003
LXBhY2tlZA== 71004
5rK7 71005
X1NUUlVDVFVSRQ== 71006
W1k= 71007
aVBhcmFt 71008
KGVx 71009
IGVuY29tcGFzc2Vz 71010
IFwKCg== 71011
LT5b 71012
JnV0bQ== 71013
Z3JvdXBvbg== 71014
c3RyYXRl 71015
RFk= 71016
b21vcnBoaWM= 71017
Jzpb 71018
IGdyYXZpdGF0aW9uYWw= 71019
IE1pY2hh 71020
IFRlbmNlbnQ= 71021
IGNvYWNoZWQ= 71022
7Lac 71023
0YPQvNC10L3Rgg== 71024
L21vYmlsZQ== 71025
TW91c2VEb3du 71026
YnVk 71027
IFlhcw== 71028
IFByb3ZpZGVycw== 71029
Tlo= 71030
CXJlcG9ydA== 71031
ZXJybXNn 71032
IGltYWdlUGF0aA== 71033
YWN0ZXJpYWw= 71034
IE1hbmdh 71035
d2lja2x1bmc= 71036
KHVzdWFyaW8= 71037
IikpOw0KDQo= 71038
LyoqKg== 71039
IG9yZ2FuaXNl 71040
SW5kZXhlZA== 71041
X1FVQUw= 71042
KFB5T2JqZWN0 71043
IHN1cnJlbmRlcmVk 71044
UE9DSA== 71045
IE5PVEVT 71046
XFwi 71047
LWpvYg== 71048
IHNldmVudHk= 71049
IyMjIwo= 71050
IE1hbm9y 71051
IGRvd25yaWdodA== 71052
IHRpbWVmcmFtZQ== 71053
aW5zdXJhbmNl 71054
Y2hlY2tlcg== 71055
IFNFQ1JFVA== 71056
IGVjaG9lcw== 71057
IENhcm1lbg== 71058
LnNldEhvcml6b250YWxBbGlnbm1lbnQ= 71059
IGlzQ2hlY2tlZA== 71060
IFRPUg== 71061
X25u 71062
KCco 71063
RmV0Y2hSZXF1ZXN0 71064
IFByaW50ZWQ= 71065
Rmx1aWQ= 71066
IFNUQUNL 71067
R0VT 71068
YWlnbmVk 71069
aWdvcg== 71070
LlVua25vd24= 71071
Q0JD 71072
IENhcmxzb24= 71073
LlVSSQ== 71074
IHBsaWdodA== 71075
L3N0YXJ0 71076
IFBlcnNvbm5lbA== 71077
IFBSRUZJWA== 71078
LCoq 71079
IGxpbWl0ZQ== 71080
X2hlYXQ= 71081
Je+8jA== 71082
IERvbm5l 71083
Z2V0Tm9kZQ== 71084
IFNjaWVudG9sb2d5 71085
IGNvbWV0 71086
IHdlbmln 71087
QXNpZGU= 71088
IE1QRUc= 71089
Jz8= 71090
dmFyaWFibHk= 71091
LmVuZERhdGU= 71092
IHVuY29udA== 71093
IFNjb3Jlcw== 71094
IExvZ2luRm9ybQ== 71095
LmdlbmVyYXRlZA== 71096
LGNo 71097
LW1hcg== 71098
IE5lZA== 71099
IGV2ZW50SWQ= 71100
K3A= 71101
IFNJTg== 71102
L3Jlc2V0 71103
LlJFQUNU 71104
IE1lc3Np 71105
X1JBTks= 71106
LndyaXRlRmlsZQ== 71107
IGNyaXBw 71108
ZXN0aGV0aWM= 71109
RVJTSVNU 71110
IHJlaW1idXJzZW1lbnQ= 71111
Q3VycmVudFZhbHVl 71112
IHVuaW4= 71113
RG93bkxhdGNo 71114
IHBhZGRpbmdSaWdodA== 71115
IHN0b2NrZWQ= 71116
Lycu 71117
IHJlcGF5bWVudA== 71118
dHJhaw== 71119
L2JhY2tlbmQ= 71120
INC40LfQvNC10L0= 71121
Q1NS 71122
IHByZXZlbnRpdmU= 71123
IHBhbnRhbGxh 71124
X3RyaW0= 71125
UGVkaWRv 71126
aG9zcGl0YWw= 71127
IG1hbmFnZWFibGU= 71128
cm91dGVQYXJhbXM= 71129
dGV4dHVyZXM= 71130
Li4uLi4uCgo= 71131
IHPDqWxlY3Rpb24= 71132
TmFtZVZhbHVlUGFpcg== 71133
IHBvbGx1dA== 71134
TW9kZXM= 71135
IExhdWQ= 71136
amF5 71137
IFVycw== 71138
IHNpZ25lcg== 71139
IEpK 71140
IENoZXJva2Vl 71141
X0VYSVNUUw== 71142
IGR3YXI= 71143
ICgkKCcj 71144
IHJlZWY= 71145
Pnsk 71146
IEJheWxvcg== 71147
IE1vZGVsU3RhdGU= 71148
LV8= 71149
IFN0cnVjdHVyZXM= 71150
IHNvdXZlbnQ= 71151
U3BlY2lmeQ== 71152
KHBpcGU= 71153
IGZyYWNraW5n 71154
IEdQQQ== 71155
IGJlbGU= 71156
CQkJCQkJCSAgIA== 71157
IE1pbm9yaXR5 71158
IHR1ZA== 71159
IG9wZW5uZXNz 71160
IElsbHVzdHJhdGVk 71161
IG94aWRhdGlvbg== 71162
IE5L 71163
CVVwZGF0ZQ== 71164
IEVNUw== 71165
IFRlZGR5 71166
IGdlbmVyYWxz 71167
CU1hdA== 71168
IHJhZGlvcw== 71169
IEFudGlxdWU= 71170
Y29ub215 71171
IFNxdWFkcm9u 71172
KScsJw== 71173
5aOw 71174
IHlvdXJl 71175
IE1haW5QYWdl 71176
IGJlaGF2aW91cnM= 71177
ZW5naHQ= 71178
KEAiJUAiLA== 71179
IHRlc3RjYXNl 71180
IENvbXBpbGF0aW9u 71181
IGZsYXZvdXJz 71182
IEV4dGVuZA== 71183
aWxsYXRvcg== 71184
IGNvaA== 71185
IHNwbGluZQ== 71186
IEtH 71187
LXBheQ== 71188
IGNvbW11bmlzbQ== 71189
IEJ1c2luZXNzZXM= 71190
b2NraW5n 71191
Lk1heExlbmd0aA== 71192
YXNzYW5kcmE= 71193
cXVpcmluZw== 71194
YWRkZW4= 71195
IEplYg== 71196
X2ZhdWx0 71197
W2ZpbGU= 71198
IHByb21pbmVuY2U= 71199
ZGlzY2lwbGluYXJ5 71200
4oCUdGhleQ== 71201
X2V4dGVudA== 71202
IFZJQw== 71203
IGVudGFpbHM= 71204
LnBhcnRuZXI= 71205
IGhpcHBvYw== 71206
TGVhZ3Vl 71207
55S3 71208
d2lwZQ== 71209
LXNwaW5uZXI= 71210
IHNhbHV0ZQ== 71211
IFN1cmdpY2Fs 71212
KG91dHB1dHM= 71213
d29ya2Vk 71214
W3N0cmxlbg== 71215
YXBwb2ludGVk 71216
IEhlZw== 71217
IEFDUEk= 71218
KFte 71219
dWFsYQ== 71220
X3RvbA== 71221
IFJpdA== 71222
LlBheW1lbnQ= 71223
a293c2tp 71224
IHdhbG1hcnQ= 71225
cmVxdWlyZW1lbnRz 71226
IEZJTlNFUQ== 71227
X0JBQ0tHUk9VTkQ= 71228
IE9zYm9ybmU= 71229
KGVycm9yTWVzc2FnZQ== 71230
UmVwb3J0aW5n 71231
IGF1Y3Rpb25z 71232
IGNvbWJvcw== 71233
IE5vdGljZWQ= 71234
X29jdA== 71235
IHByaW1lcm8= 71236
dGFpcmU= 71237
X2hy 71238
INC80L7QtA== 71239
IGNvbnRyYWRpY3Rvcnk= 71240
PSJA 71241
YWNoaW5lcw== 71242
KG9wdGFyZw== 71243
IFBlbmd1aW4= 71244
IEFiYmFz 71245
IHN1YmxpbWU= 71246
IHBhZ2VhYmxl 71247
IERlZmVuc2l2ZQ== 71248
IGRpc3RpbmN0bHk= 71249
IEF1dG9tYXRpY2FsbHk= 71250
VW5kZXJzdGFuZGluZw== 71251
RXF1YWxpdHlDb21wYXJlcg== 71252
Z290YQ== 71253
ICI6Og== 71254
IHB1bHZlcg== 71255
IEJhdHRsZXM= 71256
IHVucGFyYWxsZWxlZA== 71257
VENIQQ== 71258
IGNvbnN0cnVlZA== 71259
LWFmZg== 71260
IHByZWN1cnNvcg== 71261
LWxmcw== 71262
IG1hZHVyYXM= 71263
IERhaXN5 71264
IEFyYmVpdHM= 71265
Lk1hbmFnZW1lbnQ= 71266
CUlu 71267
IHJvYmVz 71268
IHNww6lj 71269
4oCcKA== 71270
IG1hdGVybml0eQ== 71271
ZXh0ZW50 71272
IFNwYWNlcg== 71273
RGlkQXBwZWFy 71274
CXVz 71275
LmdldFJlcXVlc3REaXNwYXRjaGVy 71276
KGNvbHM= 71277
IHBsdW1tZXQ= 71278
7IU= 71279
IHsKCgoK 71280
w6lyaWNh 71281
IFNpemVz 71282
LmVudW0= 71283
LkhpZ2hsaWdodA== 71284
ICEhfTwv 71285
QVRURVJZ 71286
IFNvcm9z 71287
R0xmbG9hdA== 71288
44KE 71289
IEplbm5pbmdz 71290
Pz8KCg== 71291
IFJvbWVv 71292
ID8+CgoK 71293
V2Vubg== 71294
IGNsaW1heA== 71295
IGNyZW0= 71296
X3RoYXQ= 71297
W+KApg== 71298
X2RvbWFpbnM= 71299
X1JFUExZ 71300
IGNvbXBsZXRh 71301
VkVTVA== 71302
X3BhcnRpY2xl 71303
IHNvcA== 71304
IGZhdGFsaXRpZXM= 71305
aW1wbGlmeQ== 71306
IFNLRg== 71307
IGluZnVzaW9u 71308
IEphdmllcg== 71309
IGJhbGxldA== 71310
IGFtaWdv 71311
LndhbnQ= 71312
IGNvbGxhZ2Vu 71313
IExhd3llcg== 71314
LlN0YXRlbWVudA== 71315
LnJ0 71316
YmFhcg== 71317
RW5kUG9pbnQ= 71318
IEJlaw== 71319
U0hJUA== 71320
IHBhdHJpYXJjaA== 71321
IEF1bnQ= 71322
X1RN 71323
IG3DrW4= 71324
IG1hc3RlcmVk 71325
V1hZWg== 71326
IGVzcG9z 71327
PWxvZ2dpbmc= 71328
IHJpZ2h0ZW91c25lc3M= 71329
dG9ycmVudA== 71330
IGJzdA== 71331
X0NIQUlO 71332
IG91dHNraXJ0cw== 71333
KHJvdGF0aW9u 71334
ICcuJyk= 71335
aWdyYW50cw== 71336
K2xzaQ== 71337
IENDVFY= 71338
X1BIQVNF 71339
LmF6dXJl 71340
X1Byb2Nlc3M= 71341
dmFl 71342
IFRyb3BpY2Fs 71343
IEFua2FyYQ== 71344
aW1hZ2VWaWV3 71345
X1JVTk5JTkc= 71346
ICopX18= 71347
4bq/bg== 71348
KGNsaQ== 71349
c2NhdHRlcg== 71350
IHNjaGU= 71351
UmVnaXN0cmFy 71352
IGFpcmluZw== 71353
IHB5cGxvdA== 71354
aXNpw7Nu 71355
L2N1c3RvbWVy 71356
IHNpbXBsZW1lbnQ= 71357
IGNsYXNzeQ== 71358
IERXQw== 71359
IEJhc2hhcg== 71360
IERFVkVMTw== 71361
IFZpY2s= 71362
YXZhaWw= 71363
IEjDtg== 71364
X2V4dGVuZA== 71365
ZHJGYw== 71366
LmlzTm90Qmxhbms= 71367
IHBsYWlz 71368
fH0K 71369
IHBvcm5vZmls 71370
bGFicw== 71371
IGhhdXM= 71372
IG9yaWdpbmF0aW5n 71373
IHN1cnJvdW5kcw== 71374
IFFVQUw= 71375
bWVn 71376
L2xvZ2dlcg== 71377
W29iag== 71378
IGlycmVzcG9uc2libGU= 71379
IFB1YmxpY0tleQ== 71380
SE9ORQ== 71381
Oicv 71382
aWJveA== 71383
IEZWZWN0b3I= 71384
fHsK 71385
YXRhbG9hZGVy 71386
aGF3a3M= 71387
SERS 71388
IGVzY2FsYXRpb24= 71389
IFBvZHNEdW1teQ== 71390
ZWxpdGU= 71391
IHByZXN1cA== 71392
Q2FjaGVk 71393
Pkc= 71394
Lm9wdGltaXplcg== 71395
IFZpc2libGU= 71396
tIA= 71397
IG5lbg== 71398
IHBjcw== 71399
IElkbGU= 71400
W0FueQ== 71401
IGtleWJvYXJkcw== 71402
IENPTVBPTkVOVA== 71403
IHRpdGFuaXVt 71404
KG11dA== 71405
IExlZGdlcg== 71406
IHByb3NwZXJvdXM= 71407
ZXRyb2ZpdA== 71408
X0xM 71409
X3BhdGllbnQ= 71410
IHBkYXRh 71411
IGtvbnRha3Rl 71412
U3dpcGU= 71413
IGNoZWVyZnVs 71414
IEhvbmR1cmFz 71415
Il1bJA== 71416
IGhlbW9ycmg= 71417
IjoiKw== 71418
IGxlYXNpbmc= 71419
IGluc3RhbGxz 71420
IFBheA== 71421
IExvZ2lzdGljcw== 71422
IGtpbmV0aWM= 71423
IFBob24= 71424
X21vdmVtZW50 71425
CWJ5dGVz 71426
IGNpbmNv 71427
IE1hZG5lc3M= 71428
Iikr 71429
IEpF 71430
X2lq 71431
U2NlbmVNYW5hZ2Vy 71432
IEJ1c3Q= 71433
cHRlc3Q= 71434
YWVh 71435
IGJlc3Nlcg== 71436
w61n 71437
0LTQuNC9 71438
KHRhc2tz 71439
KCIoIg== 71440
c2V0VHlwZQ== 71441
KG91dGZpbGU= 71442
CXJlc2V0 71443
IEFSQw== 71444
IG3DunNpY2E= 71445
IFNoZWxm 71446
IG1pblk= 71447
cGNo 71448
IHdlaWJlcg== 71449
aXNzb3I= 71450
IHRyb3V2ZQ== 71451
CUJ1dHRvbg== 71452
IHJlZ2VuZXJhdGVk 71453
xaNp 71454
aW1hY2hpbmVyeQ== 71455
YmxvY2tpbmc= 71456
LmRhdGFUYWJsZXM= 71457
X2ZyYWM= 71458
IEFkdmFudGFnZQ== 71459
LnZpc2l0TWV0aG9k 71460
6YeN5paw 71461
IGV4dHJhcG9s 71462
IHRlYXNpbmc= 71463
IEhpdGNo 71464
IEdlZWs= 71465
RVNDTw== 71466
IHdpY2g= 71467
CWF4 71468
X2RlY29y 71469
IHNjcmVlbldpZHRo 71470
IFNvcGhpYQ== 71471
Rm9yZ290 71472
LnVuaQ== 71473
IFZlbnR1cmU= 71474
X2NvbGxpc2lvbg== 71475
IGxhd21ha2Vy 71476
KEVkaXQ= 71477
YmxlcnM= 71478
IGdldE5leHQ= 71479
4oCUeW91 71480
TWVkaWFQbGF5ZXI= 71481
IEhvcmRl 71482
IENvbmdyZXNzbWFu 71483
b2JzZXJ2YXRpb25z 71484
CXByb3BlcnR5 71485
IDwtLQ== 71486
Q3JlYXRlZEF0 71487
dWJ5dGU= 71488
IHF1YXJhbnRpbmU= 71489
IGRpc3RyZXNzZWQ= 71490
X0FQQg== 71491
IEdvb2RtYW4= 71492
44Kr 71493
IHJlY29tZW5k 71494
X1BSSU5URg== 71495
RE9ORQ== 71496
QmluZGFibGU= 71497
cnN0cmlw 71498
Y2VudGFqZQ== 71499
IFVuZXhwZWN0ZWQ= 71500
IFNDSE9PTA== 71501
IFByb2Zlc3Npb25hbHM= 71502
IEdQVXM= 71503
TGVzc29u 71504
RXhjbHVzaXZl 71505
IGF0cmF2 71506
IERhbms= 71507
IExhd3llcnM= 71508
IFdhbHRvbg== 71509
Pltd 71510
IGFsb3Vk 71511
PSIuLi8uLi8uLi8= 71512
IGRlYmF0aW5n 71513
IEFWRw== 71514
X1ZPTA== 71515
L2NnaQ== 71516
LmRlZw== 71517
Omc= 71518
LkluZm9m 71519
TWVhc3VyZVNwZWM= 71520
LnNvbmc= 71521
bXRyZWU= 71522
dWxscw== 71523
Sm9yZGFu 71524
IENvdmVycw== 71525
IGF0dHJpYnV0YWJsZQ== 71526
IGplZGlz 71527
aWF0cmljcw== 71528
IHJvdHRlcmRhbQ== 71529
IG1lbGQ= 71530
IENvbnRlbnRUeXBl 71531
IG1hbnRsZQ== 71532
IGFsaWNl 71533
X2R1cGxpY2F0ZQ== 71534
L0ludGVybmFs 71535
IGZpbGVzaXpl 71536
CWZpcmU= 71537
cmVzZQ== 71538
b25kZXJl 71539
IGZhbWlsaWFyaXR5 71540
IENyZXN0 71541
IGthcm1h 71542
IHRvcmlubw== 71543
IG1lc2E= 71544
L3RlbXA= 71545
IGNoaXI= 71546
IE92ZXJmbG93 71547
IHRlbmVtb3M= 71548
dW5paw== 71549
TkVYVA== 71550
QWxsZQ== 71551
IG54dA== 71552
TWFydA== 71553
IGF0bA== 71554
IHBlcmlvZG8= 71555
X3lvdQ== 71556
IH0pKS4= 71557
aW50ZXN0aW5hbA== 71558
LkFkYXB0ZXJWaWV3 71559
IGhlc2l0YW50 71560
IGNvbXBhcmF0aXZlbHk= 71561
LlVJbnQ= 71562
KHZpZXdNb2RlbA== 71563
IHNhbmdhdA== 71564
IFJlc3BvbnNpdmU= 71565
IFphY2s= 71566
4oU= 71567
SkFWQQ== 71568
IEZ1bGxlcg== 71569
IOKdpA== 71570
LkNvbnN1bWVy 71571
IGFuaw== 71572
IHJlYWN0b3Jz 71573
ZnVjaw== 71574
X3JhdA== 71575
IHNlc3Npb25GYWN0b3J5 71576
X2JhY2t3YXJk 71577
IHNjcmFtYmxlZA== 71578
CXRo 71579
IGluc2Vuc2l0aXZl 71580
IGNoYW1wcw== 71581
IG5naW54 71582
IGNvbmhlYw== 71583
IEphc3Blcg== 71584
LmZt 71585
U3RyaWN0RXF1YWw= 71586
YWNoc2Vu 71587
LU5vdg== 71588
bGFzc2Vu 71589
LmludGVncmF0aW9u 71590
KGxibA== 71591
Q29tcG9zZQ== 71592
IEZvbg== 71593
w5o= 71594
R3JhdGlz 71595
IExpbWU= 71596
IEFkYXB0ZXJWaWV3 71597
IHBvaXNvbmVk 71598
YW5jaG9ycw== 71599
6K6+6K6h 71600
J10/PiI= 71601
IHByb2N1cg== 71602
SXRhbHk= 71603
Lk1PTlRI 71604
IExVQQ== 71605
IExpdGh1YW5pYQ== 71606
IEhlYWRz 71607
X0NIVU5L 71608
IFBVU0g= 71609
QXNwZWN0UmF0aW8= 71610
IHdlZw== 71611
IHZpZHM= 71612
IFdlaW4= 71613
CUlOVA== 71614
c2Vzc2lvbklk 71615
SW5kdXN0cnk= 71616
IGRlbm91bmNlZA== 71617
SktMTQ== 71618
IFZhbmVzc2E= 71619
LklkZW50aWZpZXI= 71620
cHJvcHJp 71621
INC40LM= 71622
IHTDqWNu 71623
IG1vc2FpYw== 71624
U3RyZWFtUmVhZGVy 71625
LVRo 71626
Zm9ydGg= 71627
IGFkaGVyZW5jZQ== 71628
YmF0ZQ== 71629
IGtuaWdodHM= 71630
c291bmRz 71631
IHNhbGxl 71632
T01FVA== 71633
44K544OI 71634
LXRt 71635
IFJoZQ== 71636
LkZpbGVPdXRwdXRTdHJlYW0= 71637
5YiG57G7 71638
IEVORw== 71639
aG9saWRheQ== 71640
IENvbmdyYXR1bGF0aW9ucw== 71641
KSgK 71642
IGFnZ3JlZ2F0ZXM= 71643
SE9PSw== 71644
ZXdpcmU= 71645
U2VuYXRvcg== 71646
IGVtYmVkZGluZ3M= 71647
ZXB5 71648
KENPTQ== 71649
IHJvYmJlcg== 71650
w6R0ZXI= 71651
d2FuZw== 71652
X3RlYWNoZXI= 71653
IHJlc2VudG1lbnQ= 71654
IGxldHR1Y2U= 71655
ZXJyZXVy 71656
KGlj 71657
IFRhY3RpY2Fs 71658
IENvbnRyYWN0cw== 71659
IG3Dpm5k 71660
IHNpdGlvcw== 71661
IGJhc3RhbnRl 71662
IG51ZXZvcw== 71663
CU5kckZj 71664
IHByaXZhdGVLZXk= 71665
dWNjaA== 71666
TU1kZA== 71667
IOi+k+WHug== 71668
dW1iYQ== 71669
QGZvcmVhY2g= 71670
OiIpOwoK 71671
IHNsaXBwZXJ5 71672
IEtleXN0b25l 71673
IHBpb25lZXJpbmc= 71674
X3RyaWFuZ2xl 71675
KCIK 71676
CQkJCQkJCQkgIA== 71677
IEludGVydmVudGlvbg== 71678
U0NJ 71679
IGNKU09O 71680
IHRlcm1pbmF0aW5n 71681
67mE 71682
IGJhYnlz 71683
U3Vic2V0 71684
IOuh 71685
IHNldWxlbWVudA== 71686
IG11ZXN0cmE= 71687
RW50cmU= 71688
5Lul5LiK 71689
bmdv 71690
ImJ5dGVz 71691
UVJTVA== 71692
IHlwb3M= 71693
cGVyc29uYQ== 71694
IERlcGxveQ== 71695
Y2Vl 71696
IOCu 71697
LmdvYWw= 71698
IGhhYml0YXRz 71699
IGlzQWRtaW4= 71700
IGV4cGxvaXRpbmc= 71701
IHZlbnRpbA== 71702
IEJhbGxz 71703
2KfYqA== 71704
IG1pbmRmdWxuZXNz 71705
KGt3YXJncw== 71706
IHJlc2VtYmxpbmc= 71707
IGNob2ly 71708
IG9uQmFja1ByZXNzZWQ= 71709
IFNFQ1VSSVRZ 71710
L2d0ZXN0 71711
IGp1c3RpY2Vz 71712
IGludGVnZXJWYWx1ZQ== 71713
YmxhaA== 71714
IEFpbQ== 71715
X2ZpbmFsaXpl 71716
a2Vo 71717
IENvbXBsZXhpdHk= 71718
IGF1Z3VzdA== 71719
Z2V0RWxlbWVudHNCeVRhZ05hbWU= 71720
IHByZWFjaA== 71721
IHByb251bmNpYXRpb24= 71722
IFRyYXNo 71723
LXBlcmNlbnQ= 71724
X1BSSVY= 71725
IEh1bnRz 71726
IEN1cnNl 71727
dWVsbGVu 71728
IGhlYXZ5d2VpZ2h0 71729
WGk= 71730
CXNlbGVjdGVk 71731
IE1jQ295 71732
5byC5bi4 71733
fD0K 71734
IEJhdHRsZWZpZWxk 71735
SXRlbUltYWdl 71736
IGRlZHVjdGlvbnM= 71737
IEVsZW1lbnRhbA== 71738
KCkpOy8v 71739
IEJ1cms= 71740
fSkNCg0K 71741
c3dpZnQ= 71742
L2Z1bmN0aW9u 71743
VXN1YWxseQ== 71744
X1N0 71745
X2ZlYXRz 71746
IElzVmFsaWQ= 71747
IHphZA== 71748
SW1hZ2VDb250ZXh0 71749
IGNsYXNzbmFtZQ== 71750
IGRvbm5lcg== 71751
IC0tPgoKCg== 71752
IG1vdG9yY3ljbGVz 71753
KycvJys= 71754
IHNldEJhY2tncm91bmQ= 71755
XENNUw== 71756
LkFsbEFyZ3NDb25zdHJ1Y3Rvcg== 71757
IExleGluZ3Rvbg== 71758
LmV4YW1wbGVz 71759
IFB1cnM= 71760
UHVzaE1hdHJpeA== 71761
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 71762
LmFkZFRhcmdldA== 71763
cG9yYQ== 71764
RnVsbHNjcmVlbg== 71765
IGdvb2Y= 71766
aGxlbg== 71767
w6RnZQ== 71768
IENVUkw= 71769
IEludGVyZXN0aW5n 71770
IHJldHJpZXZlcw== 71771
X09iag== 71772
aW5uZXNz 71773
LS0tLS0KCg== 71774
LnRzdg== 71775
KElN 71776
IEJyYXZlcw== 71777
X0lTUg== 71778
b3N0aQ== 71779
4buT 71780
IEV4dGVyaW9y 71781
IENvdXJ0bmV5 71782
IHJlc2lkdWVz 71783
VGllcg== 71784
Lio7DQoNCg== 71785
OmJsYWNr 71786
d2ViVmlldw== 71787
InBhdGg= 71788
IG1hc2E= 71789
XSE9Jw== 71790
IE1hdGNoaW5n 71791
ZHVy 71792
SnZt 71793
PWNvbnRleHQ= 71794
X1JJTkc= 71795
IHByb3BvbmVudHM= 71796
IFFTdHJpbmdMaXRlcmFs 71797
IGluZmxhdGU= 71798
PEZsb2F0 71799
IERvbm92YW4= 71800
KElP 71801
SE9SVA== 71802
IGRpc2FncmVlZA== 71803
aXNreQ== 71804
YXNraW5n 71805
X1ZFQw== 71806
SEFTSA== 71807
IG1hdGhz 71808
IExhc3RseQ== 71809
IGRlcHJlc3Npbmc= 71810
LmVzdGFkbw== 71811
IGhhbG8= 71812
X2JsZQ== 71813
IEdhYnJp 71814
PFRSZXN1bHQ= 71815
IHRyb29w 71816
IGVudW1z 71817
IFNFUklBTA== 71818
bnVtZXJ1c2Zvcm0= 71819
IENoaWM= 71820
LWV4ZWM= 71821
IGJhY2tsb2c= 71822
IEJyYXZv 71823
UG9wTWF0cml4 71824
IEJydXQ= 71825
IGJsb3F1ZQ== 71826
IGp1bml0 71827
IFdoaWxzdA== 71828
0YbQuNGP 71829
ZmV3 71830
rIE= 71831
IFZhcmlldHk= 71832
IFBvbGl0aWNv 71833
ZXhlbXBsZQ== 71834
VXNlckNvbnRyb2xsZXI= 71835
IGhhcmRlbmVk 71836
YWtlbnM= 71837
IFNlZWRlcg== 71838
b3dhcmRz 71839
Y2hlY2tzdW0= 71840
IFNhaQ== 71841
VkVSVEVY 71842
UmVzcG9uc2Vz 71843
cGxvZGU= 71844
LWhhcmQ= 71845
U3BlY2llcw== 71846
UmVuZGVyVGFyZ2V0 71847
X0NIQVQ= 71848
IHNob3djYXNlcw== 71849
aXRpbWF0ZQ== 71850
X0ZPUkVBQ0g= 71851
X0NPTkZJR1VSQVRJT04= 71852
ZWJh 71853
IEVzc2VudGlhbGx5 71854
KHBvbHk= 71855
LWxlYXJuaW5n 71856
IGfDpXI= 71857
X3N1Y2M= 71858
KE1hdA== 71859
IGNvaWxz 71860
YnJhcw== 71861
IGFtYQ== 71862
X21hdGNoaW5n 71863
aW5kdXN0cnk= 71864
IE5vcnJpcw== 71865
IEV4cG9zdXJl 71866
IHBlcnZhc2l2ZQ== 71867
IGRleg== 71868
5peP 71869
IGVsZWN0cm9uaWNhbGx5 71870
RERS 71871
IFN0aW0= 71872
INGE0LDQudC70LA= 71873
IG1hZHJl 71874
bmVtb25pYw== 71875
a2ljaA== 71876
IEZyYWdlbg== 71877
IFJ1bmU= 71878
IG9uVG91Y2g= 71879
CXNjYWxl 71880
IFBoYXJtYWM= 71881
IE1hbmRhdG9yeQ== 71882
IFN0bw== 71883
IEJyYW0= 71884
X0xlZnQ= 71885
X1NUQVI= 71886
KX19Ig== 71887
c2Npb3VzbHk= 71888
0LXQt9GD0LvRjNGC 71889
56uZ 71890
Z3Jhdml0eQ== 71891
K0M= 71892
fTw= 71893
QU5HRVM= 71894
IGNvbnRyYWN0aW9u 71895
IFdhbGxwYXBlcg== 71896
LkZhY2U= 71897
IHByw7N4aW1v 71898
LmZpZw== 71899
bGFuZ2xl 71900
INC/0LXRgNC10Lw= 71901
X0NSRUFU 71902
QmFzaWNhbGx5 71903
IGF3YWl0cw== 71904
IENIQVJBQ1RFUg== 71905
IHZwbg== 71906
SG9u 71907
IGV2aXRhcg== 71908
IFVuZG8= 71909
UVM= 71910
IEVkbXVuZA== 71911
IG1pcmFjbGVz 71912
IFRpbWluZw== 71913
IFZlbmV6dWVs 71914
LlNxcnQ= 71915
b2lkYWw= 71916
IGVycnM= 71917
LS0tLS0tLS0KCg== 71918
IERFQ0xBUkU= 71919
IHZpZ29yb3Vz 71920
YXJnb24= 71921
IGFnZ3JlZ2F0ZWQ= 71922
IFNoYXJrcw== 71923
IEN5cnVz 71924
IHJlcHLDqXM= 71925
bWF0Y2hlcg== 71926
IGd1aUFjdGl2ZQ== 71927
PyIpCg== 71928
IEpOSQ== 71929
LmNoYXJzZXQ= 71930
J3w= 71931
IGdvYXRz 71932
aW5kcmU= 71933
LmdldERheQ== 71934
IHBhcnNlcw== 71935
IElocmVu 71936
X18uJy8= 71937
aWxlZ2Vz 71938
bmF2aWdhdGU= 71939
IEJ1ZmZ5 71940
UEhQVW5pdA== 71941
IG1hc3Nh 71942
YWx0YXI= 71943
JyldLAo= 71944
IG92ZXJzZWVz 71945
IHt9DQoNCg== 71946
IFdMQU4= 71947
Y2xpcGJvYXJk 71948
X0luc3RhbmNl 71949
IGdsYWRseQ== 71950
KHNlcmllcw== 71951
IHZhZA== 71952
IGdldFBhZ2U= 71953
W29m 71954
LkludGVydmFs 71955
aW51cw== 71956
Y2hhckF0 71957
b2xlbQ== 71958
YWludGluZw== 71959
LkFG 71960
X21pbm9y 71961
X0lM 71962
O3k= 71963
IFRlbGVjb20= 71964
IFBvbmQ= 71965
IG1tYXA= 71966
L14= 71967
IFlhaw== 71968
IFJhYmJp 71969
ZW5vcw== 71970
CUNvbnRleHQ= 71971
LnZlYw== 71972
KEF0dHJpYnV0ZQ== 71973
IGNhdGVnb3JpemVk 71974
IGRpYWJldGlj 71975
KHJhbms= 71976
IHBhw61zZXM= 71977
IEAiIjsK 71978
IGppa2E= 71979
YXJzaXR5 71980
IC8o 71981
LkhlbHA= 71982
LWJhbm5lcg== 71983
IEJ5cm9u 71984
IHVucmVhbGlzdGlj 71985
IHxf 71986
IFN0b3B3YXRjaA== 71987
IGV4ZW1wdGlvbnM= 71988
L2NhcmRz 71989
IHRvc3RyaW5n 71990
bmdpbmU= 71991
IHNwcmF3bGluZw== 71992
IGx0ZA== 71993
IFVuZGVyc3RhbmQ= 71994
INGC0LXQutGB0YI= 71995
ZXdpdG5lc3M= 71996
IGNhbGxCYWNr 71997
LVllYXI= 71998
RnVlbA== 71999
PSo= 72000
IGludmVudG9y 72001
IGJlc3RzZWxsaW5n 72002
IGhhcmRuZXNz 72003
IFR1cw== 72004
IGtleW5vdGU= 72005
IGJlYXU= 72006
X2Fib3J0 72007
IHByb3Bvcg== 72008
IGNvbWVyYw== 72009
X1JFRkVS 72010
UGFz 72011
aGF2ZW4= 72012
LWZpeA== 72013
Q2Fub25pY2Fs 72014
IGxvb2tvdXQ= 72015
RXhwbG9yZXI= 72016
IGNlcmNv 72017
KHNlbnNvcg== 72018
IEpzb25TZXJpYWxpemVy 72019
IHZva3Nlbg== 72020
IGJyaWdodGVzdA== 72021
IHN0YWJiaW5n 72022
LkJl 72023
LmFkZFByb3BlcnR5 72024
IEh1bXBo 72025
IGlzQXV0aGVudGljYXRlZA== 72026
5rKh 72027
IHBvcmVz 72028
IGplZ28= 72029
IFNob3dpbmc= 72030
ID8+Ij4NCg== 72031
X0NPU1Q= 72032
aWxpbmVhcg== 72033
IFdvcmtzcGFjZQ== 72034
IHNwZWw= 72035
YWdvZ3Vl 72036
IE1pbGxlbm5pdW0= 72037
IFBvcHVsYXRl 72038
IG5pZA== 72039
LnBhcnNlQ29sb3I= 72040
U29sYXI= 72041
IEdhZA== 72042
IOykkQ== 72043
IEthbXA= 72044
CXJt 72045
IGJlbno= 72046
IEhvbmVzdGx5 72047
IGVsZWN0cm9kZQ== 72048
IFByYWlyaWU= 72049
IFBST0ZJTEU= 72050
IE9yaWVudGFs 72051
IE9MRUQ= 72052
L2NvcHlsZWZ0 72053
YXdhaWk= 72054
KHByb2R1Y3Rz 72055
KVw8 72056
LWNyZWF0ZWQ= 72057
Lk1hbnlUb01hbnk= 72058
Ikhvdw== 72059
INCy0YvQvw== 72060
IG1pdG9jaG9uZHJpYWw= 72061
X3Rlc3Rpbmc= 72062
KGNyZWF0ZWQ= 72063
IGdldEZpZWxk 72064
X0VWQUw= 72065
XS4i 72066
IEZTTQ== 72067
IFJpdGE= 72068
IOWPguaVsA== 72069
IGPDtHQ= 72070
IEluc2lnaHQ= 72071
CW15c3FsaQ== 72072
X3RpbWluZw== 72073
SURP 72074
KSkpKSkK 72075
Q09WRVJZ 72076
LmltYWc= 72077
Q0RG 72078
bHVzdA== 72079
aWNrdA== 72080
X0ZQ 72081
LicsJw== 72082
Z2Nj 72083
IGt1cno= 72084
X3B3bQ== 72085
IG9kcG93aWVk 72086
IEJhcnJpZXI= 72087
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo= 72088
cGFr 72089
LUlzcmFlbA== 72090
IFJ1dGdlcnM= 72091
IHNlbGVjdGVkSXRlbQ== 72092
IFJhbWlyZXo= 72093
RmFybQ== 72094
IGNhbGVuZGFycw== 72095
Z3ppcA== 72096
IGJsb2NrYnVzdGVy 72097
IFBseW1vdXRo 72098
55yM 72099
cmVzcG9uc2Vz 72100
LkRpYWxvZ0ludGVyZmFjZQ== 72101
LWdyYW5k 72102
IGdldFNvdXJjZQ== 72103
IGRlanRpbmdz 72104
IHRpZXRlbg== 72105
IGNvbmRlbW5hdGlvbg== 72106
IGNvbnRpbnVhcg== 72107
Lk1vY2tNdmM= 72108
L2VuZ2xpc2g= 72109
IE1lZGlhUGxheWVy 72110
Y29tcHV0ZWQ= 72111
IENsaXBwZXJz 72112
KGRlbGVnYXRl 72113
LlNsZg== 72114
IOuhnA== 72115
IFRpZGU= 72116
IGlocmVt 72117
IFdhbg== 72118
0YPRjtGJ 72119
fT48 72120
RGlzY3Vzc2lvbg== 72121
IHdhdHRz 72122
LW1pbnVz 72123
IEp1bGlldA== 72124
6ZuF 72125
IGNvbmNsdWRpbmc= 72126
YW5kc2NhcGU= 72127
IMO6bHRpbWE= 72128
IERFUlA= 72129
IHNpZ25VcA== 72130
IFNlY29uZGx5 72131
V0FJVA== 72132
bGRz 72133
LmNhbGxiYWNrcw== 72134
KGhvdXI= 72135
aW1hdG9ycw== 72136
dm9sZW50 72137
QUFG 72138
ZWRyaXZlcg== 72139
IE1hdGhlbWF0aWM= 72140
PFR1cGxl 72141
IC8+Jw== 72142
e2o= 72143
X0FCT1JU 72144
RXRoZXI= 72145
IGVkdWNhdG9y 72146
IHByZWNhdXRpb24= 72147
IGZpbmdlcnRpcHM= 72148
Z2V0VmFy 72149
Y2FtYXRhbg== 72150
LWRlYnVn 72151
IFJBRg== 72152
W2FyZw== 72153
IHJhY2Vk 72154
IHRzdW5hbWk= 72155
LmZsaW5r 72156
IGdseWM= 72157
dWtv 72158
IE11bHRpcGx5 72159
IHJlZGlzdHJpYnV0aW9u 72160
QUdP 72161
IFJvdXRpbmU= 72162
IG9wcg== 72163
KGxvd2Vy 72164
IEZ1bmt0aW9u 72165
LmRr 72166
IGVndA== 72167
X0JBU0lD 72168
c3lzY2FsbA== 72169
IExTRA== 72170
IER1cGxpY2F0ZQ== 72171
X3NlbGw= 72172
IGVycm9ySGFuZGxlcg== 72173
X2lwcw== 72174
IGVydg== 72175
YW5uaWU= 72176
KHJlc291cmNlTmFtZQ== 72177
IGJvdHRsZWQ= 72178
IGNyYXdsaW5n 72179
ZWdtZW50 72180
LnNldFRhZw== 72181
IHJzcw== 72182
IFF1YXJyeQ== 72183
X2V4YWN0 72184
Lmp3dA== 72185
IEJvYXJkcw== 72186
b3Bp 72187
IG5hc2Fs 72188
IFhZWg== 72189
LnVk 72190
Tm9ydGhlcm4= 72191
IGFjdGl2YXRpbmc= 72192
ZWR4 72193
b3ZhaA== 72194
IGluZHg= 72195
QWxlcnREaWFsb2c= 72196
IHRpZW5lcw== 72197
YW5ueWE= 72198
X3Bhbg== 72199
KGRlY2ltYWw= 72200
LkRpY3Q= 72201
IHN1YnNpZGlhcmllcw== 72202
UHJvZHVjdE5hbWU= 72203
RmV3 72204
ZGF0bw== 72205
b2RpZWQ= 72206
LXVuZGVy 72207
IOqygw== 72208
54mI5pys 72209
YXRpc20= 72210
W01hdGg= 72211
Lic8 72212
KGluZmlsZQ== 72213
IGRlbm90ZXM= 72214
JGNsYXNz 72215
X1NFQ1VSSVRZ 72216
IHNld2FnZQ== 72217
bWVsb24= 72218
KENoYXJhY3Rlcg== 72219
L2dpdGh1Yg== 72220
IGdsYXJpbmc= 72221
Lkd1aWQ= 72222
X3NwYXJzZQ== 72223
IE1hcmdpbg== 72224
X2Rucw== 72225
IG1laW5lcg== 72226
IGxlZnRpc3Q= 72227
CWxvYw== 72228
YWJ5dGVz 72229
IGVxdWlwbWVudHM= 72230
ZXhwbw== 72231
IFNvbWVyc2V0 72232
RUs= 72233
5o2i 72234
IGxlY3R1cmVy 72235
IG1lbWlsaWtp 72236
5qC4 72237
57Sg 72238
cHJvbg== 72239
OnBvaW50ZXI= 72240
Ym9ycm93 72241
IFByb3RlY3RpdmU= 72242
X2Nm 72243
INCV0YHQu9C4 72244
YnBw 72245
JzsKCgoK 72246
YXR1cmFsbHk= 72247
X05BVg== 72248
IHBlcHRpZGU= 72249
PmQ= 72250
IGlmc3RyZWFt 72251
X0ZBQ1RPUlk= 72252
Jyk7Ly8= 72253
am9pbmVk 72254
bW9uZw== 72255
IHRpbWVzcGVj 72256
IGRlc3RhYmls 72257
IGF1dG9w 72258
LWxpbWl0 72259
cHVibGljYXRpb24= 72260
IERlbm4= 72261
Lk1lbW9yeQ== 72262
KHNrYg== 72263
IEFuYWhlaW0= 72264
X1JFVFVSTlRSQU5TRkVS 72265
b3VldXI= 72266
KF8oJw== 72267
bGVndA== 72268
aXN0aW5ndQ== 72269
CXByaXY= 72270
IHJlZGlyZWN0cw== 72271
TXQ= 72272
IGFsbGVlbg== 72273
IFBvaW50Rg== 72274
IG9taW4= 72275
IGNpdHQ= 72276
IFRhZ2U= 72277
IFdhbGxz 72278
4buJ 72279
IG9jY3VweWluZw== 72280
eEJG 72281
cmFuZ2xl 72282
IHJlbGF0aW9uYWw= 72283
LW9yZw== 72284
IGpwZw== 72285
LWRlcml2ZWQ= 72286
IG1hbGZ1bmN0aW9u 72287
IEJlbnNvbg== 72288
KHNjcm9sbA== 72289
IFhE 72290
SG9seQ== 72291
KGNvbW1hbmRz 72292
IHRpcHBpbmc= 72293
IHByaW1pdGl2ZXM= 72294
IHNleGxl 72295
Q2FsbENoZWNr 72296
IE1BU1RFUg== 72297
X1RFQU0= 72298
LnNldFJlcXVlc3RIZWFkZXI= 72299
X3NwZWNz 72300
IHNlcmdl 72301
Lk1hc3Rlcg== 72302
IGltcw== 72303
LlNwcmluZ0Jvb3RUZXN0 72304
cGF5cGFs 72305
IFdBTlQ= 72306
Lkluc3Q= 72307
IENhcnBldA== 72308
IHdyb25nbHk= 72309
KCQoJy4= 72310
IGJpbGQ= 72311
LlJvbGw= 72312
IFVyYg== 72313
LWNhbg== 72314
44GP44Gg44GV44GE 72315
b2xpYmVyYWw= 72316
PCEtLTw= 72317
4oCUZm9y 72318
IG5lZ2F0ZQ== 72319
KG5vcm0= 72320
YWVj 72321
X3NhbGFyeQ== 72322
cGxhaW50ZXh0 72323
b2Rlc2s= 72324
IEJvc2No 72325
U2NpZW50aXN0cw== 72326
aW5kZXhlcw== 72327
IG1weg== 72328
IGdyb3VuZHdhdGVy 72329
fX0pOwo= 72330
0LDQu9C40Lc= 72331
IGVybw== 72332
IHByZXNjcmliZQ== 72333
IEV4dHI= 72334
PEFycmF5TGlzdA== 72335
IGF0cm9jaXRpZXM= 72336
QXJlYXM= 72337
IFRJbnQ= 72338
KHBsYXllcnM= 72339
IGRhdGFi 72340
IHd5bQ== 72341
44Gb 72342
IGR1YXM= 72343
X3Bvc3NpYmxl 72344
IGluc3RydWN0aW9uYWw= 72345
aXRpb25lcg== 72346
L2F1ZGlv 72347
ICAgICAgICAgICAgICAgIAoK 72348
c3RvcmVk 72349
T01QSQ== 72350
IGFwcHJlbnRpY2Vz 72351
VGVuYW50 72352
IENvdXQ= 72353
IGNvbnRyYWNlcHRpb24= 72354
TG9hbg== 72355
X3Zpc2liaWxpdHk= 72356
J3x8 72357
LlBhcnNlRXhjZXB0aW9u 72358
IGNvaW5jaWRl 72359
LmdldFdpbmRvdw== 72360
IE1hcnRpYWw= 72361
X3Rscw== 72362
L2Jvb2tz 72363
IG91dHJhZ2Vk 72364
ICh+KA== 72365
c3Ryc3Ry 72366
IEJveGVz 72367
6YO9 72368
44Ol 72369
Uk9J 72370
RnVuY3Rpb25hbA== 72371
IFByb2Q= 72372
PFRlc3Q= 72373
IHZpZGVvdA== 72374
IGFtb3Jl 72375
YWJicg== 72376
IE1vbnVtZW50 72377
IHJlaW5mb3JjZW1lbnQ= 72378
IENvY29udXQ= 72379
LnNlbmRTdGF0dXM= 72380
Lmtl 72381
IExlYXA= 72382
X2FydGljbGVz 72383
UGll 72384
IElydmluZQ== 72385
QUJDREVGR0hJ 72386
IEV4cGxhbmF0aW9u 72387
Z3JvdXBCeQ== 72388
IG92ZXJoZQ== 72389
IGFuw6Fs 72390
IGNsYXNzaWZpZXJz 72391
IE1peGVy 72392
L2NvbG9ycw== 72393
IFVzZXJEYXRh 72394
X0FSUk9X 72395
X3ZsYW4= 72396
LkNyZWF0ZURpcmVjdG9yeQ== 72397
IEhhaw== 72398
IEJvbmVz 72399
IEFwaVJlc3BvbnNl 72400
IE1vb2R5 72401
REFD 72402
Z2V0Yw== 72403
6LaF 72404
LkZpcmU= 72405
6aM= 72406
IGhpdHRlcg== 72407
ZnJlc2g= 72408
4LmB 72409
IENoaWxkaG9vZA== 72410
eG9y 72411
LWh0dHA= 72412
IE1PUg== 72413
LnNlbmRLZXlz 72414
X3NoYXBlcw== 72415
IFVwcw== 72416
IEFycmVzdA== 72417
YXp6aQ== 72418
X29wY29kZQ== 72419
Lk5vbWJyZQ== 72420
IHByw7Nw 72421
IHp4 72422
IHRyZW1lbmRvdXNseQ== 72423
U3BhY2Vz 72424
ZWNj 72425
IHZlbHZldA== 72426
IG1lbW9yaWE= 72427
IExBUA== 72428
LkRyYXdMaW5l 72429
IHRhcmdldFR5cGU= 72430
cmVzdHJpY3Rpb24= 72431
IERSVg== 72432
W3RvcA== 72433
IeKAmQ== 72434
L2NoYXQ= 72435
IHNvbmlj 72436
VG9yb250bw== 72437
b3dp 72438
LmRvY3M= 72439
IEluaXRpYWxpc2U= 72440
IDwh 72441
LnRibA== 72442
LlByZXBhcmVkU3RhdGVtZW50 72443
L2RvbQ== 72444
LnJvdA== 72445
X1BST00= 72446
S2VlcGluZw== 72447
IGhhcmdh 72448
IGpvcm4= 72449
IGlkZW50aWZpYWJsZQ== 72450
W2lw 72451
UGluaw== 72452
X0hlYWRlcg== 72453
w5E= 72454
YWRsZQ== 72455
572R57uc 72456
c2VxdWVudA== 72457
QWN0aXZhdGVk 72458
dG1wbA== 72459
IFBhbGw= 72460
IGZhdGFsbHk= 72461
fX0pCg== 72462
UG9wb3Zlcg== 72463
IE1jTGFyZW4= 72464
Q2hhbmdlZEV2ZW50QXJncw== 72465
IEZvcm1hdGlvbg== 72466
TmFt 72467
bmV3c2xldHRlcg== 72468
LmZyb21TdHJpbmc= 72469
X2ltbQ== 72470
QVBQRUQ= 72471
LG5vZGU= 72472
KGRldA== 72473
IHBhcmFsbGVscw== 72474
IGxhc2Vycw== 72475
IGNob2NvbA== 72476
L3BvcnQ= 72477
YWZmZW4= 72478
KGRldGFpbHM= 72479
IHJlcGxpY2F0ZWQ= 72480
QXNTdHJlYW0= 72481
YXJtYWM= 72482
XV09 72483
YWxhY2g= 72484
X3Nlc3Npb25z 72485
QWxnb3JpdGhtRXhjZXB0aW9u 72486
IHZlcmJvc2l0eQ== 72487
LkNvbHVtblN0eWxlcw== 72488
KFVTRVI= 72489
IHNsZWVwcw== 72490
IGFxdWF0aWM= 72491
X2J1bGs= 72492
PScuLw== 72493
b3VybsOpZQ== 72494
IE1TRA== 72495
IEJsb2M= 72496
IEdsZQ== 72497
IHJlcHJlc3Npb24= 72498
IGVudG9uY2Vz 72499
CQkgICAgICAgICAgICAgICAgICAg 72500
WU5D 72501
LkFsbG93R2V0 72502
IHR1cnRsZXM= 72503
ICd+Lw== 72504
ZXNzb24= 72505
IERJRQ== 72506
IEFxdWE= 72507
IFNFUQ== 72508
Ozs7Ozs7Ozs7Ozs7Ozs7Ow== 72509
LnB1dHM= 72510
IE1BSw== 72511
KEN1c3RvbWVy 72512
IGRlc3NlcnRz 72513
IGVtYmVsbA== 72514
IHRheGVk 72515
5bqX 72516
IHNjaGw= 72517
cmVzY28= 72518
IEZyb2c= 72519
IFBlbmRpbmdJbnRlbnQ= 72520
X0xvY2Fs 72521
L3NlY3VyaXR5 72522
IFJveA== 72523
IHNwb2lsZWQ= 72524
X1dJTkRPV1M= 72525
SmVubmlmZXI= 72526
IGRhdGk= 72527
VW5sb2Fk 72528
LmdyaWR4 72529
KHN0YWdl 72530
4buX 72531
U3FsQ29tbWFuZA== 72532
Lm14 72533
IGJsaXR6 72534
IEZvcnRyZXNz 72535
IEJyb3dzZXJBbmltYXRpb25zTW9kdWxl 72536
d2luZQ== 72537
TlNF 72538
LXJhbmtpbmc= 72539
eXJl 72540
IGxpbmthZ2U= 72541
w6Fr 72542
kZw= 72543
YXRzYXBw 72544
IEN5Y2w= 72545
IGVjb2xvZ3k= 72546
IGJsYXRhbnQ= 72547
IFBlcmY= 72548
IFhpYW9taQ== 72549
IERvcnRtdW5k 72550
cmVzdWx0U2V0 72551
IGdpw6A= 72552
IGZhdWNldA== 72553
IERhbHRvbg== 72554
IGZyZWVz 72555
QlVGRg== 72556
LnBhcmFsbGVs 72557
IEFzdHJvcw== 72558
IFZFQ1RPUg== 72559
IHN0YW5kb3V0 72560
w7Ntbw== 72561
IGZyYW1lYm9yZGVy 72562
X1BBUkFNRVRFUlM= 72563
IEZhbGs= 72564
IERpZ2l0 72565
IGVsZWN0csOzbmljbw== 72566
IHZlcnI= 72567
VUlBbGVydFZpZXc= 72568
KFNxbA== 72569
LUlORg== 72570
IikpKTs= 72571
JycK 72572
KEVGRkVDVA== 72573
IFp1bQ== 72574
X0RQ 72575
KV07DQo= 72576
IGFudGVubg== 72577
IGFiYnJldmlhdGlvbg== 72578
IHNlaXNtaWM= 72579
X1RSQU5TTA== 72580
tZw= 72581
Lk1pbGxpc2Vjb25k 72582
LGxhdA== 72583
IEFuY2g= 72584
X01vZA== 72585
QWxyaWdodA== 72586
ZGRh 72587
IMKl 72588
VU5ETEU= 72589
INC30LDQsw== 72590
IHN1bGZ1cg== 72591
IFNpdGg= 72592
IE5pbWJ1cw== 72593
IEV4YW1pbmF0aW9u 72594
X3dpZmk= 72595
fWApOwoK 72596
IHNlbnNhdGlvbnM= 72597
YWZz 72598
X0NMUg== 72599
IGluZmluaXRlbHk= 72600
IHN5c3TDqG1l 72601
X2ZvbnRz 72602
SW1wYWN0 72603
UG93ZXJlZA== 72604
IDw9Pg== 72605
X25lZWQ= 72606
REVDUkVG 72607
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v 72608
IFJlcG8= 72609
Z2V0U2VydmljZQ== 72610
JG4= 72611
X3BjdA== 72612
RXJyZXVy 72613
IE5HT3M= 72614
ICoKCgo= 72615
LmF0YW4= 72616
X1RNUA== 72617
IGNvbGxhcHNpbmc= 72618
IHNobw== 72619
X1BDSQ== 72620
Lm9wZXI= 72621
KGFkag== 72622
IGdpb3Y= 72623
Piku 72624
IGluY29udHJv 72625
YXJkYQ== 72626
IGFwZXg= 72627
IG1lZGlkYQ== 72628
IFNoZWlraA== 72629
IEFybWVuaWE= 72630
YXNzb2NpYXRl 72631
LXdvdw== 72632
IFR1cm5pbmc= 72633
IEZyZXVk 72634
IEZvb2w= 72635
IExEUw== 72636
LS0tLS0tLQoK 72637
b2xzb24= 72638
LkZJTEU= 72639
X2RldGVjdG9y 72640
RG9taW4= 72641
IGRlcGxveW1lbnRz 72642
IGZhcmV3ZWxs 72643
KGJpbmQ= 72644
IG5vdmljZQ== 72645
dGRvd24= 72646
IGdldEVsZW1lbnQ= 72647
IHZlbGl0 72648
YXN0aGFu 72649
CWNoYW5uZWw= 72650
X0ZSQU1FQlVGRkVS 72651
LnRyYWlsaW5n 72652
LnNldEVkaXRhYmxl 72653
Oyw= 72654
IElERg== 72655
X1BC 72656
Z2V0TGFzdA== 72657
IENvYXN0YWw= 72658
IEhhbmR5 72659
bGluZ2Vy 72660
44Gn44KC 72661
UGVyc2lzdGVuY2U= 72662
LmdldFNlcnZpY2U= 72663
INC+0Lo= 72664
IG5vdHdpdGhzdGFuZGluZw== 72665
KFBS 72666
VU1C 72667
J10pKXsNCg== 72668
ZW1icmFuY2U= 72669
ZXhjZXJwdA== 72670
YXF1 72671
X2Jsb2M= 72672
IFByb3Zpc2lvbg== 72673
IE1jRG9u 72674
IEdvbGRiZXJn 72675
IGNvbXBvbmVudFdpbGxVbm1vdW50 72676
IGJhc2VQYXRo 72677
LWZpcmVk 72678
IGZvbGxhbmRv 72679
IFRpbGVz 72680
QGVuZGZvcmVhY2g= 72681
RU5DSUw= 72682
IEJveGluZw== 72683
aXF1ZXI= 72684
QWNoaWU= 72685
RW51bXM= 72686
QmFzZVVybA== 72687
KHNjYW4= 72688
IFBhc3NpdmU= 72689
YWJlbGxh 72690
L3Nu 72691
Lm51bWVyaWNVcERvd24= 72692
IHZlcm4= 72693
bG9jYWxpemVk 72694
IE1peg== 72695
IHJlc3VsdExpc3Q= 72696
L3Z1ZQ== 72697
RVJWSUNF 72698
Lm9k 72699
IGxpZ24= 72700
IFN0cmluZ1Rva2VuaXplcg== 72701
IHRyYWc= 72702
QWNjb3JkaW9u 72703
IG5vcmVmZXJyZXI= 72704
bXNjb3JsaWI= 72705
w6F0aXM= 72706
Ynl0ZXI= 72707
IHNob3dkb3du 72708
IHNlbWFpbmU= 72709
IC0tPg0KDQo= 72710
IE1haG0= 72711
fSI7Cgo= 72712
IGRx 72713
IFB1Ymxpc2hlcnM= 72714
IEFtcGw= 72715
IERhbmllbGxl 72716
IHRlcm4= 72717
6LW3 72718
bm/Fm8SH 72719
ZWlu 72720
IEFzeW5jU3RvcmFnZQ== 72721
dW5nZXI= 72722
cm91dw== 72723
IHNjaXNzb3Jz 72724
L2Fzc2VydA== 72725
LmJ1Y2tldA== 72726
L2FyY2hpdmU= 72727
X01hbg== 72728
IGludG9sZXI= 72729
ICgpPT4= 72730
INCS0Ys= 72731
IHNhaQ== 72732
Lnh5 72733
LiINCg== 72734
IHVyaW5hcnk= 72735
ZXN1Yg== 72736
SVNUSUNT 72737
IM66 72738
IGNvbXBsaW1lbnRz 72739
IHR5cGluZ3NKYXBnb2xseQ== 72740
aWhhcg== 72741
RXhwYW5zaW9u 72742
IFNlcnZpbmc= 72743
X3N0dWRlbnRz 72744
IFhCT09MRQ== 72745
KGls 72746
IOyymA== 72747
IGrDsw== 72748
KHRvbA== 72749
KEpT 72750
CUNH 72751
IERSQVc= 72752
dHdpZw== 72753
IG9hdA== 72754
X3Ntb290aA== 72755
IENTTA== 72756
IG9zb2I= 72757
IGVuc3Vpbmc= 72758
IGJhbmtlcg== 72759
IEJhY2twYWNr 72760
X3Bpbmc= 72761
IHdpc2hsaXN0 72762
PWF4 72763
CSAgIAo= 72764
RGlzbmV5 72765
c3RlYWR5 72766
Ij4l 72767
IHByb3BoZXRz 72768
IFpY 72769
IG1pbmltYWxpc3Q= 72770
LlBMQUlO 72771
U2VhdHRsZQ== 72772
Lm9yZGluYWw= 72773
IFBJUEU= 72774
IHJldG9ybmE= 72775
IGp1Z2Fkb3I= 72776
IEJyZXQ= 72777
IOKUnA== 72778
IHBsdXNo 72779
VUxBVE9S 72780
U29ydGluZw== 72781
LmdyaWR5 72782
ZWN0b215 72783
X2FjdGl2 72784
cmFjaw== 72785
SW50ZXJhY3RpdmU= 72786
IEFudGFyY3RpY2E= 72787
IHZlbmdlYW5jZQ== 72788
ZW5zbw== 72789
X2tub3du 72790
dXBwbGllcg== 72791
Lk1vZHVsZXM= 72792
IENvbm5lY3Rpb25TdGF0ZQ== 72793
6ZqQ6JeP 72794
QEZpbmRCeQ== 72795
IHBsYWNlcg== 72796
XG1vZGVs 72797
PCgpPg== 72798
LmlzU3VjY2Vzc2Z1bA== 72799
LWdvb2Q= 72800
Yno= 72801
IERyYWNv 72802
QXNzaXN0YW50 72803
LWV4dHJh 72804
0LDQsdC70LjRhg== 72805
IGh5cG9jcmlzeQ== 72806
IHRzdA== 72807
IEFncg== 72808
JHR4dA== 72809
IGxvZ2lzdGlj 72810
bGljZW5zZWQ= 72811
IEhvZg== 72812
IHRhdA== 72813
KGl2 72814
IGludG94aWM= 72815
cG9zdElk 72816
X3N0cmlrZQ== 72817
IGh1bWlsaWF0aW9u 72818
cGNvZGVz 72819
InN5bmM= 72820
KHJlY2lwZQ== 72821
K04= 72822
cmVudGU= 72823
CUNsaWVudA== 72824
eWNvcGc= 72825
IFp1cmljaA== 72826
IFByb2ZpbGVz 72827
Q291bnRyaWVz 72828
IHBpY3Q= 72829
IHJvbGxvdXQ= 72830
cmVxdWVuY2llcw== 72831
IHBhdGNoZWQ= 72832
IGNhcnRyaWRnZXM= 72833
IHNoYWRpbmc= 72834
SmFy 72835
IHNhbHZhZ2U= 72836
IFRheGVz 72837
IHN0YW5kYnk= 72838
YXBvcmFu 72839
RWlnZW4= 72840
LmFuZ3VsYXI= 72841
IE5lc3RlZA== 72842
5Lqr 72843
IGlzVmlzaWJsZQ== 72844
IER3aWdodA== 72845
X0JSQU5DSA== 72846
LkRlbGF5 72847
IGtlbmQ= 72848
IGZhY2lsaXRhdGVk 72849
LmZsYXRNYXA= 72850
IHNhbnRh 72851
CVNlbmQ= 72852
L21lc3NhZ2Vz 72853
IG9mVHlwZQ== 72854
CXN3YXA= 72855
I3BsdA== 72856
IFR1cmtz 72857
TkVT 72858
IHByb2dyZXNzaXZlbHk= 72859
IFJlc2lkZW5jZQ== 72860
IFRSRUU= 72861
IG5vZW4= 72862
ZGlv 72863
IG5lbGxl 72864
IHNvZ2Fy 72865
aXR0aQ== 72866
d2Vla2x5 72867
IGFtYmlndWl0eQ== 72868
X1NldHRpbmdz 72869
V2FyZQ== 72870
Lm5lbw== 72871
X0RTVA== 72872
IOaWuQ== 72873
cHJlcA== 72874
bG9iYnk= 72875
QGVtYWls 72876
L21vdmll 72877
IGZ1bmtj 72878
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== 72879
wq1z 72880
IGd1YXJkaWFucw== 72881
LXBvcw== 72882
IGNvbmZpZ3VyaW5n 72883
IENQUw== 72884
IERldXM= 72885
IHZpZMOpb3M= 72886
X2VtcHJlc2E= 72887
IHNsYXBwZWQ= 72888
PE1vZGVs 72889
IHVuZGVyc2NvcmVz 72890
VWg= 72891
LmFjY2Vzc1Rva2Vu 72892
U0VUUw== 72893
IFNwYXJzZQ== 72894
IENhbGQ= 72895
OnBhdGg= 72896
IFNlcnZlcnM= 72897
PWJhdGNo 72898
IGtuaXR0aW5n 72899
IHhh 72900
IHNlYXJjaEJhcg== 72901
IHNuYWc= 72902
IGluZnVzZWQ= 72903
LmJhbQ== 72904
bGV2ZXI= 72905
IHRheG9ub215 72906
w44= 72907
IGF0dGFjaGluZw== 72908
IGhlcm4= 72909
X05PUA== 72910
Q2xpY2thYmxl 72911
KFBhcnNl 72912
IER5bmFtbw== 72913
LWJ1aWxkZXI= 72914
IGRlcmVn 72915
IHNjYXR0ZXJpbmc= 72916
6L+b6KGM 72917
YW56aQ== 72918
IFNoZXBhcmQ= 72919
Ij4nLAo= 72920
X1hERUNSRUY= 72921
IEJ1enpGZWVk 72922
X01BUkdJTg== 72923
UExPWQ== 72924
LnNtYWxs 72925
IG1pbWVUeXBl 72926
IGhvbG9n 72927
CWNhbWVyYQ== 72928
bGlhcw== 72929
IHN1c3BlbnNl 72930
b2R5bmFt 72931
YmF1 72932
IGdyYXZleWFyZA== 72933
X25hbWVk 72934
IjoiJw== 72935
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 72936
IGdhbWVPdmVy 72937
IExFTkdUSA== 72938
CXNjcmVlbg== 72939
IGRvSW5CYWNrZ3JvdW5k 72940
X2RlcGVuZGVuY2llcw== 72941
IHJ0Yw== 72942
L3Vw 72943
X1JPTQ== 72944
SGFsbA== 72945
IGRlZmljaWVuY2llcw== 72946
KHRl 72947
JyM= 72948
X2VxdWl2 72949
IHByZW9yZGVy 72950
IEF4ZQ== 72951
0L7QvNGD 72952
LnNlbmRGaWxl 72953
IGZpbHQ= 72954
IExpbWl0cw== 72955
IENhdmFsaWVycw== 72956
LmRpc2NvdW50 72957
4oaQ 72958
IFdpdA== 72959
UVJTVFVW 72960
IGlq 72961
IHRlZ2Vu 72962
IDoiLA== 72963
ZGlmZmljdWx0eQ== 72964
cHVua3Q= 72965
IEVtYWlscw== 72966
Y2hsb3I= 72967
KGZ1bg== 72968
LlVpbnQ= 72969
IFN0YWxs 72970
X3ZlcmlmaWVk 72971
dUQ= 72972
RmlsZVR5cGU= 72973
IHBsZWFzdXJlcw== 72974
IGp1ZGljaWFyeQ== 72975
IHNoYW0= 72976
aXB1cg== 72977
X1BMVVM= 72978
b2ZmZXJz 72979
KGZvbw== 72980
X0dU 72981
CWNvcmU= 72982
RU5USU9O 72983
IExpYmVyYXRpb24= 72984
Q29tbWFuZExpbmU= 72985
X2RlcGFydG1lbnQ= 72986
LkFy 72987
X25laWdoYm9y 72988
IFN1Ym1pdHRlZA== 72989
IDwhLS1b 72990
IGxvY2F0aW5n 72991
Lk1hcHBlcg== 72992
X3N0cmVuZ3Ro 72993
Wy4uLiw= 72994
IEphbA== 72995
L2xvYWQ= 72996
IGJ1ZmZz 72997
IG1vdG9yaXN0cw== 72998
CWNz 72999
YXNjZW5kaW5n 73000
IFdoYXRzYXBw 73001
IE5hc3M= 73002
X0NPTFVNTlM= 73003
TGVvbg== 73004
cHBl 73005
ZWx0YXM= 73006
IHRqZWplcg== 73007
X0tFWVdPUkQ= 73008
cXVhbGlmaWNhdGlvbg== 73009
aHJh 73010
IHJpZGljdWxvdXNseQ== 73011
JGluZm8= 73012
RkVBVFVSRQ== 73013
ZG9lc24= 73014
IEtX 73015
IEVudW1lcmFibGVTdHJlYW0= 73016
X01BVA== 73017
IFN0cmVhbUxhenk= 73018
IHNjcmF0Y2hpbmc= 73019
LnRpY2tldA== 73020
IHNob3J0Y29taW5ncw== 73021
ZWxsaXBzaXM= 73022
PWN1cnJlbnQ= 73023
IGNyZXN0 73024
IHdob3Jl 73025
IFBldHJvbGV1bQ== 73026
Y29udGV4dHM= 73027
IOat 73028
LXB5dGhvbg== 73029
KGpzb25PYmplY3Q= 73030
IFByaXNt 73031
IHlhY2h0 73032
t6g= 73033
Zmxhc2hkYXRh 73034
IGxlaWNodA== 73035
IE1vcnRvbg== 73036
IHN0ZXJsaW5n 73037
X2l0cg== 73038
X3Vk 73039
RmFjZXM= 73040
IGhpcmVz 73041
ZmZh 73042
Jyx7Cg== 73043
LWNhbWVyYQ== 73044
X1JFQVNPTg== 73045
IEhlbGVuYQ== 73046
cnVn 73047
aWdodGx5 73048
IHBlcm11dGF0aW9ucw== 73049
IFRvcmFo 73050
IOaYr+WQpg== 73051
CXJlY29yZA== 73052
w4A= 73053
LmdtYWls 73054
Rm9ydHVuYXRlbHk= 73055
KE1vZA== 73056
T2NjdXJyZW5jZXM= 73057
IGRlcHJlY2k= 73058
IHZhZ3VlbHk= 73059
L1o= 73060
Vk4= 73061
LnRw 73062
X2dlbmVy 73063
IHs6P30iLA== 73064
d2FobA== 73065
SUtF 73066
IExlZ2lzbGF0aW9u 73067
IGhpbnRlcg== 73068
IGFkZWw= 73069
KGhpZ2g= 73070
5o+Q5Lqk 73071
L2RvbWFpbg== 73072
LnRpbGVz 73073
IFRpYmV0YW4= 73074
IFN0ZXJlbw== 73075
IGZpbGVTaXpl 73076
Z3J1cG8= 73077
aWFl 73078
U0NQ 73079
IHZvdWNoZXJz 73080
IFBhbmRvcmE= 73081
IGRpc21heQ== 73082
IGzDqWc= 73083
IEJlaGF2aW9yYWw= 73084
Y3Jhbg== 73085
TmVzdGVk 73086
YWNjb20= 73087
IE5haA== 73088
IEJhbHRpYw== 73089
IERFU1Q= 73090
IGtpc3Nlcw== 73091
Vmlu 73092
IHByb3Zva2U= 73093
X0NvbnRleHQ= 73094
IHdlZWtkYXlz 73095
dXJnZW5jZQ== 73096
TGlr 73097
IHBsYXph 73098
IGJsZXY= 73099
IHJlYWZm 73100
X1RpdGxl 73101
KEd0aw== 73102
IGNlbGxl 73103
Iz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 73104
IEpvb21sYQ== 73105
Ij4vLw== 73106
TW9udGhseQ== 73107
LnRvRG91Ymxl 73108
KGVudHJpZXM= 73109
IE5SRg== 73110
KGdjZg== 73111
IE1pZGRsZXdhcmU= 73112
fS17 73113
X0hJREU= 73114
IGxvd2Vycw== 73115
KFNlbGY= 73116
5Y+R6YCB 73117
IGlzTG9nZ2VkSW4= 73118
IGJpb2RpdmVyc2l0eQ== 73119
IG11c2NoaQ== 73120
KGNhbmRpZGF0ZQ== 73121
IEFuc2k= 73122
CXNt 73123
L2lt 73124
Kycp 73125
Y2Rj 73126
IGFsZ3VuYQ== 73127
IHNhY3JpZmljaW5n 73128
L3ZlbmRvcnM= 73129
L0FQSQ== 73130
QWR2ZXJ0aXNpbmc= 73131
IEdFTkVSQVRFRA== 73132
IERpc29yZGVycw== 73133
IFNlcmlhbGl6YXRpb24= 73134
IHNhdmFnZQ== 73135
IOm7 73136
IEluc2lnaHRz 73137
IHJldm9rZQ== 73138
IGp1cm9ycw== 73139
c3VpdA== 73140
IENhbXBpbmc= 73141
X3Byb2ZpdA== 73142
YnVjaA== 73143
LkFjdGlvbnM= 73144
IElERUE= 73145
b2x1bHU= 73146
TGlrZXM= 73147
67KI7Zi4 73148
LkJMTA== 73149
dsOk 73150
IGNhcmRp 73151
IGRpc3Byb3BvcnRpb25hdGVseQ== 73152
IGluc2FuaXR5 73153
LmVvZg== 73154
IFBsYXR6 73155
LmZpcnN0bmFtZQ== 73156
IFNsYXNo 73157
X0NG 73158
amFuZHJv 73159
IEdhdWdl 73160
IFN1bmRlcg== 73161
IEJ1bm55 73162
X3Vt 73163
6IGU57O7 73164
IGlQaG9uZXM= 73165
IEJJTw== 73166
IGtobw== 73167
eEZB 73168
IEZyaWVuZHNoaXA= 73169
IGNhbG1seQ== 73170
X3Rocg== 73171
X0FuaW0= 73172
IHJhaXNvbg== 73173
L3Jvb3Q= 73174
LmdldEJ5SWQ= 73175
IFNhdmFubmFo 73176
IEludGVycHJldA== 73177
a2lsbGVy 73178
CXdn 73179
XSld 73180
0YPQtdGC 73181
S2V5VmFsdWU= 73182
W0c= 73183
c3RyZXRjaA== 73184
LXBsYXlpbmc= 73185
JTsNCg== 73186
IHBsYW5r 73187
IHBlYWNo 73188
IERlcnJpY2s= 73189
0LTRgNC10YE= 73190
IFNoYW0= 73191
QVBQTElDQVRJT04= 73192
LnByb2dyZXNzQmFy 73193
IHRyYW5zaXRpb25pbmc= 73194
X2RyYWc= 73195
LlJlcXVlc3RCb2R5 73196
Lk1vYmlsZQ== 73197
Sm9uZXM= 73198
LlBob3Rv 73199
IGF4bGU= 73200
enVn 73201
L29wdGlvbnM= 73202
XV0pCgo= 73203
CW5v 73204
W2hyZWY= 73205
IGFncmVnYXI= 73206
IFNlcnZpY2VFeGNlcHRpb24= 73207
bmluZ2Vu 73208
RGlmZmljdWx0eQ== 73209
Qk9PTEVBTg== 73210
QWRkcw== 73211
LWhhbmRsZXI= 73212
IEdhdA== 73213
IEVib255 73214
4bqtbg== 73215
YnJpZ2h0 73216
IGNvcnBzZXM= 73217
LkNoZWNrZWRDaGFuZ2Vk 73218
IG1hdGluZw== 73219
IEhhcnRmb3Jk 73220
IHpvdQ== 73221
IGR1ZGVz 73222
X2FsZw== 73223
IEp1bGk= 73224
b2N1cA== 73225
INC/0YDQsNCy 73226
IEthdHk= 73227
X0ludGVybmFsQXJyYXk= 73228
LkNvbHVtbkhlYWRlcnNIZWlnaHRTaXplTW9kZQ== 73229
TWV0aG9kTWFuYWdlcg== 73230
IFJlZGU= 73231
IGxpc3RJdGVt 73232
LkJvdW5kcw== 73233
IGF2ZW51ZXM= 73234
IENvZ25pdGl2ZQ== 73235
RXh0ZW5k 73236
dGVjaG5pY2Fs 73237
4oCa 73238
c25ha2U= 73239
RnJvbUNsYXNz 73240
aWxlc3M= 73241
ID17 73242
dXJldHRl 73243
L3RocmVhZA== 73244
RklFTERT 73245
SVZJTkc= 73246
IFBPU0lY 73247
X2Fr 73248
IC4uLy4uLy4uLw== 73249
TXA= 73250
IGFub255bW91c2x5 73251
VGFyZ2V0RXhjZXB0aW9u 73252
YWZmZXI= 73253
YW55dGhpbmc= 73254
Imlz 73255
Z3Jlc28= 73256
IExhcmE= 73257
aXphZG9z 73258
IG1pbmc= 73259
LnRh 73260
X3Rocm93 73261
Umg= 73262
IHNvbGlkaXR5 73263
bmFobWU= 73264
aWNoYWdl 73265
IG1vdW5k 73266
b2xpbw== 73267
YXJ5YQ== 73268
QVNVUkU= 73269
IHdvaGw= 73270
IGZ1cm5pc2hpbmdz 73271
LnNlY3Rpb25z 73272
IGFwb2xvZ2llcw== 73273
YXBpa2V5 73274
IFNjcmV3 73275
IFdhcnNhdw== 73276
L2dyYXBo 73277
IFNBVEE= 73278
eXNlcw== 73279
L2J1dHRvbnM= 73280
0LXQvdC+ 73281
VUdIVA== 73282
IHBvcm5zdGFy 73283
UGljdHVyZUJveA== 73284
X1RleHR1cmU= 73285
IGHDsQ== 73286
IG5lcmQ= 73287
LWNvbm5lY3RlZA== 73288
IG91dHNpZGVycw== 73289
IG9wZXJhdGl2ZXM= 73290
YWJibGU= 73291
L21hbg== 73292
IHBsZWFk 73293
XERi 73294
IENvdmVyZWQ= 73295
PVM= 73296
IEZsYW1lcw== 73297
77+l 73298
X3RpdGxlcw== 73299
IHJldHJhY3Q= 73300
IGNvbGxhYm9yYXRpbmc= 73301
IGJlaGFuZA== 73302
LkRhdGFHcmlkVmlld0NvbHVtbkhlYWRlcnNIZWlnaHRTaXplTW9kZQ== 73303
IGxhYm9yZQ== 73304
IHRvdGFsUHJpY2U= 73305
IHNwb2lsZXI= 73306
IGRpcHBlZA== 73307
Iikpew0K 73308
X1NC 73309
IExlaQ== 73310
IGluY2x1c28= 73311
dmVsbA== 73312
CXBs 73313
SW5hY3RpdmU= 73314
IFVTU1I= 73315
b25kZW4= 73316
IHJvdXRlZA== 73317
LnN0cnVjdA== 73318
4Ks= 73319
IE1hbGlr 73320
IEhFWA== 73321
IEN1c3Q= 73322
X1BFUkNFTlQ= 73323
X2VwaXNvZGU= 73324
5ouJ 73325
VkVSUw== 73326
IGNydWlzaW5n 73327
Qm9va21hcms= 73328
4oCmCgoKCg== 73329
Y2hlY2tCb3g= 73330
b3VmbGFnZQ== 73331
IG5vbnplcm8= 73332
IGFwcm94 73333
IFB1cmR1ZQ== 73334
Y29vbg== 73335
bGVncw== 73336
IExvdHRlcnk= 73337
U2xm 73338
SEFW 73339
Pms= 73340
PkFu 73341
IHNsZW5kZXI= 73342
c2NoZWQ= 73343
VGVsZWdyYW0= 73344
Umljaw== 73345
X1N0cnVjdA== 73346
X0JD 73347
IGN1c3RvbWFyeQ== 73348
IERhbW9u 73349
dXJjaGFzZWQ= 73350
IGtvYg== 73351
IHRpb24= 73352
KHByb21wdA== 73353
IGltYg== 73354
eEND 73355
CVdlYkVsZW1lbnQ= 73356
IGhlbW9z 73357
4Kaw 73358
IENOQkM= 73359
IEFMTE9X 73360
57Gz 73361
IEVOQw== 73362
LnNjYWxhdGVzdA== 73363
IFRCRA== 73364
Z2V0UmVmZXJlbmNl 73365
IEltcG9ydGVk 73366
4Liw 73367
IGl3 73368
b2xvbg== 73369
bWls 73370
Oi8vJHs= 73371
Lk1hbmlmZXN0 73372
IGxo 73373
IGl0ZW1MaXN0 73374
X2Fkcw== 73375
SW5zcGVjdGFibGU= 73376
IFRvbGVkbw== 73377
IERpc2FzdGVy 73378
VXBkYXRlZEF0 73379
KScpLA== 73380
IFBBTg== 73381
RmlsZUNob29zZXI= 73382
IHl1YW4= 73383
aXRt 73384
INC10LPQvg== 73385
IElibg== 73386
SGF0 73387
X3Vsb25n 73388
YXBs 73389
IFVydWd1YXk= 73390
w6lueQ== 73391
IENyYWlnc2xpc3Q= 73392
ZG9jaA== 73393
IGJpbGU= 73394
IHByb2R1a3Q= 73395
IGVsZWN0cm9seQ== 73396
LkNvdXJzZQ== 73397
IG1x 73398
dW5jdHVhdGlvbg== 73399
LyoqKioqKioqKioqKioqKio= 73400
dWp1 73401
TU1NTQ== 73402
X0xFRw== 73403
IG5ldXRyb24= 73404
IHBsdXJhbGl0eQ== 73405
ICsrJA== 73406
Zm91bmRhdGlvbg== 73407
LkNvbHVtblN0eWxl 73408
IEhvb3Zlcg== 73409
LkFDVA== 73410
IEJyYXo= 73411
bGVzc29ucw== 73412
ZsO8aHI= 73413
4KSC 73414
IENsYXNzaWNz 73415
cmFpZw== 73416
IG1o 73417
IGtldHRsZQ== 73418
U3RyaWtl 73419
ZXJkYWxl 73420
RU5UQQ== 73421
IFRhYmxlQ29sdW1u 73422
IFNoYWtl 73423
IFdG 73424
IExpY2Vuc2luZw== 73425
dWHDp8Ojbw== 73426
IHNlY2FyYQ== 73427
IG5ld1ZhbA== 73428
U2VsZWNjaW9u 73429
UHJlZmFi 73430
ZmlnaHRlcg== 73431
TGF1bmNoaW5n 73432
JyI7DQo= 73433
Lmxvbg== 73434
LnV0Y25vdw== 73435
IEh1bmRyZWRz 73436
ZXN0ZWFk 73437
IE92ZXJ3YXRjaA== 73438
X0FGVEVS 73439
IHJlbW5hbnRz 73440
KS5c 73441
IGxvYmJ5aXN0cw== 73442
IHVuaW50ZW5kZWQ= 73443
IOuQ 73444
eXN6 73445
IGxpYnJvcw== 73446
LXBhZ2Vz 73447
SU5URVJGQUNF 73448
IGRldGVybWluaXN0aWM= 73449
IFVOSVFVRQ== 73450
IGV0dMOk 73451
U2luZ2xlTm9kZQ== 73452
CQkJCQkJCQ0K 73453
LXN0YXQ= 73454
IGhhc2hpbmc= 73455
L2FjY2Vzcw== 73456
dGVsbA== 73457
CXVzZXJuYW1l 73458
IERhdG9z 73459
Qml0Q29udmVydGVy 73460
Omhvc3Q= 73461
IGFsdGVybmF0aW5n 73462
IOKAi+KAiw== 73463
IHdhdmVmb3Jt 73464
PEVsZW1lbnQ= 73465
IENhbnRvbg== 73466
IGRlc3RhYw== 73467
dGVudA== 73468
LmdldE1heA== 73469
IHN0ZW5jaWw= 73470
IEFjcXVpc2l0aW9u 73471
LkdlbmVyYXRpb25UeXBl 73472
IE1FUg== 73473
X2NvbWJpbmU= 73474
IFtdLg== 73475
X0JJVE1BUA== 73476
bGRy 73477
IGNhbnY= 73478
IEpWTQ== 73479
cGFycw== 73480
IGRvd25oaWxs 73481
RGV0YWlsc1NlcnZpY2U= 73482
KE5BTUU= 73483
IHJlanV2ZW4= 73484
X3dpdGhpbg== 73485
QWNjZXNzb3J5 73486
IFPDqQ== 73487
L2luYw== 73488
IildCgo= 73489
UHVibGljYXRpb24= 73490
X3JvaQ== 73491
IG1vYnM= 73492
Lk5vQXJnc0NvbnN0cnVjdG9y 73493
IGV2ZW50b3M= 73494
LnZlbmRvcg== 73495
X1NFTEVDVE9S 73496
w6lmb25v 73497
PSJb 73498
IGxhYXQ= 73499
IGJsdXJyZWQ= 73500
IEJvcmRlclNpZGU= 73501
eEZGRkZGRg== 73502
X3dyaXR0ZW4= 73503
IGplbnRl 73504
L3Rpbnk= 73505
Lndw 73506
LnN0eWxlYWJsZQ== 73507
IENoYXJnZXI= 73508
IGJhdGhpbmc= 73509
IFBhbmRh 73510
w6lsaQ== 73511
IHBhY2llbnRl 73512
IGdpb2NoaQ== 73513
IFZpZXdTdGF0ZQ== 73514
Y2dp 73515
LmxvZ2ljYWw= 73516
RG9uYWxkVHJ1bXA= 73517
LGNvcHk= 73518
ZW1t 73519
X0xpbms= 73520
IGluc2lnbmlmaWNhbnQ= 73521
ZmZtcGVn 73522
L3BheQ== 73523
X3F1aXQ= 73524
SU9EZXZpY2U= 73525
IEV4aXN0cw== 73526
IGNvb2tz 73527
anVuY3Rpb24= 73528
IFRYVA== 73529
KGVndA== 73530
YW5pdQ== 73531
X3BhcnRuZXI= 73532
IGZhY3VsdA== 73533
IFVuaWZpZWQ= 73534
L3NiaW4= 73535
IE5laA== 73536
IEthemFraHN0YW4= 73537
cG9zdGNvZGU= 73538
IHZlZ2Fz 73539
IHNlaW5lbQ== 73540
fV0s 73541
dGV0 73542
LXBheW1lbnQ= 73543
IENvbW1lbnRhcnk= 73544
IGd1aWRlbGluZQ== 73545
KTsk 73546
IENvbnNvcnRpdW0= 73547
57O757uf 73548
dmlzbw== 73549
IEJpbGxpbmc= 73550
aWNpYXI= 73551
IFR5cGVJbmZv 73552
CXRyYW5z 73553
PFRleHR1cmU= 73554
YXRob20= 73555
bGF1Z2hz 73556
IGludGVyY2VwdGlvbnM= 73557
KEVWRU5U 73558
Rm9yZWNhc3Q= 73559
VHJhcA== 73560
dHJ4 73561
IFdoaXRlcw== 73562
c3VibWl0dGVk 73563
YWxnbw== 73564
IHRyYW5zcG9ydGVy 73565
b3VuZGFyeQ== 73566
IEluaGVyaXRz 73567
IENvbmV4aW9u 73568
LmNsaWVudFg= 73569
CXByb2plY3Q= 73570
aGVhcnRiZWF0 73571
LW90aGVy 73572
ICc7DQo= 73573
w6ty 73574
b3JwaW9u 73575
KGNvcnM= 73576
IEVMRUNU 73577
IFBlcmU= 73578
IHVzZU1lbW8= 73579
ZXdyaXRlcg== 73580
IHNxdWlydA== 73581
L2V4dGVuc2lvbnM= 73582
L2Fz 73583
LkNMSUVOVA== 73584
IGdvdXJtZXQ= 73585
IGF1dG9Db21wbGV0ZQ== 73586
UkVW 73587
IGJyYWtpbmc= 73588
X1NFTEVDVElPTg== 73589
44Oh44Oz44OI 73590
X2xpZmU= 73591
X2dyb3VuZA== 73592
X3Rlcg== 73593
c25z 73594
IFNQT1JU 73595
kuGe 73596
5rs= 73597
VW5pcXVlSWQ= 73598
IGRyaXA= 73599
X0JST1dTRVI= 73600
LW1ldGVy 73601
ZW5kZXo= 73602
IGV4aGF1c3RpdmU= 73603
KFNL 73604
IEJ1cmxpbmd0b24= 73605
d29vcmQ= 73606
KHBvdw== 73607
IHNlYXJjaFRleHQ= 73608
hYw= 73609
aGVlbHM= 73610
c3RlbGxlcg== 73611
LnNpZw== 73612
WU9VUg== 73613
LmFsaQ== 73614
IERhdGFDb2x1bW4= 73615
IHByb2plY3ROYW1l 73616
X2ZlY2hh 73617
IHJlZnVuZHM= 73618
IHRvcG8= 73619
IENISUxE 73620
IE1hcmJsZQ== 73621
IGZvckNlbGw= 73622
IHBlc3NpbQ== 73623
IGNyaXNweQ== 73624
aWZlc3R5bGVz 73625
IG92ZXJkdWU= 73626
b2xhcml0eQ== 73627
IGFtYXTDuHI= 73628
TWQ= 73629
UFJFU1M= 73630
IGluc3VyZXI= 73631
b2NyYXQ= 73632
IGZhY2lsaXRhdGVz 73633
Lw0KDQo= 73634
IGh1cmRsZXM= 73635
X0hJ 73636
TGV0dGVycw== 73637
bWluZWNyYWZ0 73638
YXh0ZXI= 73639
eWs= 73640
IGVjb27Ds20= 73641
INC90LDRhw== 73642
IFNXSVRDSA== 73643
Q29uc3VsdGE= 73644
IE5vcmE= 73645
Q0tFUg== 73646
X0NU 73647
LmFwcHNwb3Q= 73648
IC8vLS0= 73649
CUJPT1NU 73650
X2NvdXJzZXM= 73651
IHdpbGxpbmdseQ== 73652
66eM 73653
ZmZk 73654
ZmlsZXI= 73655
IE1lYXN1cmVz 73656
IGxlYXNlcw== 73657
IERvcm90aHk= 73658
Ol0u 73659
c3Vic2NyaXB0aW9ucw== 73660
IGNob2lz 73661
IGFsYW4= 73662
IGFicmly 73663
LlBvcHVw 73664
RXN0aW1hdGVk 73665
IFBMQU4= 73666
4LWN 73667
IEVMRg== 73668
IGRpc3RhbmNpbmc= 73669
CWFuc3dlcg== 73670
IHJ1Z3M= 73671
S2k= 73672
4Z+S4Z4= 73673
R3VpbGQ= 73674
ZXh0cmFz 73675
Y3Bz 73676
TW9ja3M= 73677
IHRla3N0 73678
Kmc= 73679
LnJlcXVlc3RGb2N1cw== 73680
IGFsdGVyYXRpb24= 73681
IENhdGVnb3JpYQ== 73682
aW1tZXJz 73683
IERyb3Bib3g= 73684
IEFkZHI= 73685
5byV 73686
ZGVwcw== 73687
Lk1lc3NhZ2VCb3g= 73688
ISwK 73689
LmdldEI= 73690
IG1pZ3JhdGVk 73691
IEhvYmJ5 73692
IE1n 73693
LlZlcnRleA== 73694
IGZvcmdpdmVu 73695
IERlVg== 73696
IHdlcmQ= 73697
IEFyYWJpYW4= 73698
IFNtb2tpbmc= 73699
IHN0cmF3YmVycnk= 73700
IENNUA== 73701
ZGJs 73702
IERIUw== 73703
LWVycm9ycw== 73704
LnBhZw== 73705
IFJORw== 73706
IHNoYXZl 73707
IHR3ZWU= 73708
IGFzc2VydE51bGw= 73709
IERlbnNpdHk= 73710
ZG9qbw== 73711
YWlubWVudA== 73712
IHBq 73713
LllFQVI= 73714
ICopKTsK 73715
aWJyYXJpZXM= 73716
SmV0cw== 73717
RXhlY3V0aXZl 73718
X2RlbnNl 73719
LmdldENvbnRlbnRQYW5l 73720
Y2hhbmRsZQ== 73721
YWluYQ== 73722
LXJlZmVyZW5jZQ== 73723
IGxpYXI= 73724
IEhFQUxUSA== 73725
W3Rlc3Q= 73726
LmlzbmFu 73727
Q2hhcmxpZQ== 73728
IHB1cHBlcg== 73729
IGtpcg== 73730
OmhpZGRlbg== 73731
aXNWaXNpYmxl 73732
IGtvbXQ= 73733
IGFjcXVhaW50ZWQ= 73734
IERydWlk 73735
KENz 73736
Lmxhc3RuYW1l 73737
RFNB 73738
IGRpc3NvbHZl 73739
57yW5Y+3 73740
VmFyaW91cw== 73741
IERleA== 73742
X2FuZ2xlcw== 73743
L2FwaW1hY2hpbmVyeQ== 73744
IGV4cGxvZGluZw== 73745
KENoYXJTZXF1ZW5jZQ== 73746
IEhpc3Bhbg== 73747
KyspewoK 73748
Lk1vZGVsU2VyaWFsaXplcg== 73749
UVJTVFVWV1hZWg== 73750
54K55Ye7 73751
PXNldHRpbmdz 73752
4KWB 73753
UENT 73754
IElOVEVSTkFM 73755
IEhVR0U= 73756
IG1pY3Jvc2NvcGU= 73757
aXNBZG1pbg== 73758
XHY= 73759
LnJlcXVpcmVOb25OdWxs 73760
0L7Qu9C+0LI= 73761
aWNlcmNh 73762
X1NFTlQ= 73763
IGRlcGljdGlvbg== 73764
IFVzZXJDb250cm9s 73765
IE1lbW9y 73766
IEFsbG9jYXRpb24= 73767
IEJlZGZvcmQ= 73768
IOabtA== 73769
IHRvcm1lbnQ= 73770
YXplZXJh 73771
LlRvZGF5 73772
IFJlZ2FyZGluZw== 73773
X0VOQw== 73774
X1JBTkRPTQ== 73775
TG9nTGV2ZWw= 73776
PVI= 73777
IEdyZWVubGFuZA== 73778
IHN0cmFpbmVk 73779
IG1hZ25ldHM= 73780
IGFsZXJ0Q29udHJvbGxlcg== 73781
IENocm9uaWM= 73782
X3JlZ2lzdGVyZWQ= 73783
IGxpag== 73784
IEVudHJ5UG9pbnQ= 73785
IFJlZ2ltZW50 73786
dWNpZA== 73787
IENvdWxkbg== 73788
IEFjdGluZw== 73789
X3JheQ== 73790
IG5hYg== 73791
LXNlcGFyYXRlZA== 73792
IHBubA== 73793
Q29hY2g= 73794
QVRZUEU= 73795
IHN1cHBsZW1lbnRhdGlvbg== 73796
YWNlcnM= 73797
ZmxlZXQ= 73798
SW5wdXRCb3JkZXI= 73799
IFN0cnVjdHVyYWw= 73800
IGRlaW5l 73801
IGJyZXdlcmllcw== 73802
YW5vaQ== 73803
IHRyYW5zbGF0b3Jz 73804
IGVpZ2VuZW4= 73805
IGRhbmNlcw== 73806
dGFt 73807
IENvb3BlcmF0aW9u 73808
X3JlcXVlc3RlZA== 73809
IE1hZ2ljYWw= 73810
CUxFRlQ= 73811
ICIiKSwK 73812
Ky0rLSstKy0rLSstKy0rLQ== 73813
IE5vaXI= 73814
IEVzdGltYXRl 73815
IFRocmVhZFBvb2w= 73816
IEhlY2s= 73817
ICcqLg== 73818
VHVya2V5 73819
IHN1Y2NlZWRpbmc= 73820
ZHJ1Zw== 73821
dmlv 73822
IHBvbmVy 73823
IEphZA== 73824
aXp6bHk= 73825
ZXZlcnl0aGluZw== 73826
IHt9KS4= 73827
IEluc3RpdHV0ZXM= 73828
IG51b3Zv 73829
IGluaXRXaXRoVGl0bGU= 73830
IGx1YUw= 73831
b3duaWs= 73832
IHRob3I= 73833
IGtsYXI= 73834
IG5vdG9yaW91c2x5 73835
IGRvbmc= 73836
ZW1lbnM= 73837
X3Byb2plY3Rpb24= 73838
X0dSRQ== 73839
LmV5ZQ== 73840
IHdhdGVyaW5n 73841
IFRpaw== 73842
b1M= 73843
IFN0cmFuZ2Vy 73844
ICANCg0K 73845
cGFnaW5n 73846
X2ludGVyc2VjdA== 73847
IENvbG9uaWFs 73848
TGlzYQ== 73849
LnVubGluaw== 73850
IG1pcA== 73851
YW51dHM= 73852
YW1hem9u 73853
IElERU5U 73854
c3Rhc3k= 73855
Snd0 73856
LS0tLS0tKy0tLS0tLSs= 73857
IEVWUA== 73858
Q29udGVudExvYWRlZA== 73859
CUJJVA== 73860
LnBhcmVudHM= 73861
IGFsbG9jYXRpbmc= 73862
IEdPTEQ= 73863
fWA7Cgo= 73864
QUxBUg== 73865
IHByZWNpc2E= 73866
RGlzdGluY3Q= 73867
c2Vp 73868
IHN1YnBvZW5h 73869
IHBvbXA= 73870
IFBvbG8= 73871
Y29l 73872
dmo= 73873
LndvcmtmbG93 73874
ZXN0cmU= 73875
IGNvbm5leGlvbg== 73876
aW1ldHlwZQ== 73877
LlJvd0NvdW50 73878
IERoYWJp 73879
IGVtaXRz 73880
LkJvcmRlclNpemU= 73881
KHBvbGljeQ== 73882
LG1lc3NhZ2U= 73883
T25Jbml0 73884
KShf 73885
IGZpbmVy 73886
W251bWJlcg== 73887
IHNjcmlwdHVyZQ== 73888
UmVmbGVjdA== 73889
LXRvb2xiYXI= 73890
KFBBVEg= 73891
IEVOVFJZ 73892
KC4uLikK 73893
LWRvbWFpbg== 73894
KHN0cmlw 73895
KSgq 73896
IGNvbnZleWVk 73897
IGF0dGVudGl2ZQ== 73898
w6hnZQ== 73899
X0xE 73900
IEdyYW50cw== 73901
LWhpZ2hsaWdodA== 73902
IGJyZXRocmVu 73903
2YjZhA== 73904
IGRlcXVldWVSZXVzYWJsZUNlbGxXaXRoSWRlbnRpZmllcg== 73905
YXB1bHQ= 73906
LmJvdHRvbUFuY2hvcg== 73907
IG9wY2lvbg== 73908
IG91dEZpbGU= 73909
cmVhdGluZw== 73910
ZGlu 73911
X3NhbXBsZXI= 73912
CWdsRW5hYmxl 73913
cHR5cGU= 73914
X0NPTkRJVElPTg== 73915
LWVmZmljaWVudA== 73916
Jm8= 73917
IGpj 73918
0Kc= 73919
L0Zvcm0= 73920
KWZyYW1l 73921
IGJpbmdl 73922
X2Nsb3N1cmU= 73923
SU1B 73924
KG5leHRQcm9wcw== 73925
CWNk 73926
IGdldE1lbnU= 73927
IGdldFN1cHBvcnRBY3Rpb25CYXI= 73928
IG1hbmlmb2xk 73929
WlI= 73930
Y2hhbmdlcg== 73931
YXNzaW5n 73932
ZGlzaA== 73933
IE1vdQ== 73934
Lm5ldGZsaXg= 73935
IHBvc3Rjb2Rl 73936
IHdvbWI= 73937
IEFycw== 73938
4oCmKQ== 73939
IGxpbmVXaWR0aA== 73940
RGVhbA== 73941
YXJhcw== 73942
IEdyYW50ZWQ= 73943
IGhvYXg= 73944
IGRpcmVjdGlvbmFs 73945
LktleUNoYXI= 73946
ID09Ig== 73947
IFZlcmRl 73948
X0tQ 73949
IHN1cnJvZ2F0ZQ== 73950
IERVSQ== 73951
dXB5dGVy 73952
IHBlbnNl 73953
IFJBTkQ= 73954
KGV4Yw== 73955
IG1pc3VuZGVyc3Rvb2Q= 73956
IENVVA== 73957
IOS4rQ== 73958
CXRp 73959
X2luc2lkZQ== 73960
IGJpY3ljbGVz 73961
IGRlYW4= 73962
ZGlyZWN0aXZl 73963
LnBlZXI= 73964
aWNpbmE= 73965
X2l0ZXJz 73966
IGltcGx5aW5n 73967
Lm9idGFpbg== 73968
IHBzeWNoaWF0cmlzdA== 73969
dXNlclNlcnZpY2U= 73970
ZWxpdmVyeQ== 73971
CXBhcnQ= 73972
IGh1cnJpZWQ= 73973
IGJ1bQ== 73974
IGhlcGF0aXRpcw== 73975
amlk 73976
J10+Owo= 73977
IHVuY29udmVudGlvbmFs 73978
IGZhc2Npc3Q= 73979
IFBleQ== 73980
6K+t 73981
Jyl9PC8= 73982
LkNsdXN0ZXI= 73983
IEJpdENvbnZlcnRlcg== 73984
ZWRhdGE= 73985
zr/PhQ== 73986
4pSC 73987
QXBwQnVuZGxl 73988
Lmh0dHBDbGllbnQ= 73989
IGFwbw== 73990
QUlOUw== 73991
IFZG 73992
X2dpZA== 73993
IG9kZQ== 73994
RVJSWQ== 73995
IFJlY2VpcHQ= 73996
IENhbmRsZQ== 73997
IG1pc3Npb25hcnk= 73998
IENyYW5l 73999
IFNUQVRFUw== 74000
Ym91dA== 74001
YXlhcmFu 74002
Li4uIiwK 74003
IGl0aW5lcmFyeQ== 74004
KGxhdGl0dWRl 74005
IENPTlM= 74006
L3NpZGViYXI= 74007
U3BpZGVy 74008
R1JJRA== 74009
LmRlYnVnTGluZQ== 74010
IGAn 74011
LXllbGxvdw== 74012
IHJlZmluZW1lbnQ= 74013
IE1ha2V1cA== 74014
IERhbm4= 74015
KCk7DQoNCg0K 74016
IG92ZXJjb21pbmc= 74017
IEJhdHRlcg== 74018
L3BhY2thZ2Vz 74019
INCy0LjQtA== 74020
IGFyeQ== 74021
4oCdPw== 74022
cmVsbGFz 74023
IGdydXBvcw== 74024
IFR5cGljYWw= 74025
IE1vbnNhbnRv 74026
SW50ZXJzZWN0aW9u 74027
IHR5cmU= 74028
PT09PT09Cg== 74029
zq4= 74030
OzsKCg== 74031
IHRyaXZpYQ== 74032
X3Rha2Vu 74033
IHNtdWdnbGluZw== 74034
IG5hcnJvd2Vk 74035
4bqpbQ== 74036
IHBhbGFicmE= 74037
Y2Vh 74038
cGFydGljdWxhcmx5 74039
QWNjZXNzVHlwZQ== 74040
IGNvbGU= 74041
VG9GaXQ= 74042
IHZlcmU= 74043
IENPUw== 74044
L3ZpZGVvcw== 74045
ICgkKCIj 74046
IGNyYW5l 74047
Lmhhc01vcmU= 74048
JHBhdGg= 74049
aXZpc20= 74050
IHN1cGVydmlzb3Jz 74051
IEZsb3Jlcw== 74052
cHJvZ3JhbXM= 74053
LlppcA== 74054
IGltcGFjdGluZw== 74055
IG1vdG8= 74056
IFRK 74057
cGVnYXdhaQ== 74058
X0tJTkQ= 74059
X2ludGVyZmFjZXM= 74060
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 74061
IExlYXZpbmc= 74062
VGV4dFN0eWxl 74063
YmVpdGVy 74064
IFdpbm5pbmc= 74065
LXBhcmFt 74066
R2FyeQ== 74067
IFN1bnM= 74068
YWzEscWf 74069
ZHVjaw== 74070
IHRocmVhZElkeA== 74071
IHBvZXRz 74072
IHBsZWFkaW5n 74073
IENvcmludGhpYW5z 74074
ZmNj 74075
YXdhaXRlcg== 74076
Ki0= 74077
IHBlcnNldmVy 74078
IGFjdGl2aWRhZGVz 74079
X291dGxpbmU= 74080
LXBsYW4= 74081
LnNjcm9sbFZpZXc= 74082
cXVhdA== 74083
IHNhbXN1bmc= 74084
IGxldmVsaW5n 74085
IHNwbGl0dGVy 74086
X2dlb20= 74087
IHByb21pbmVudGx5 74088
IFNlZWRz 74089
5Zyf 74090
dWFpcw== 74091
ZWZ1bGx5 74092
SUVudW1lcmFibGU= 74093
YWRkcw== 74094
dmVyc2F0aW9ucw== 74095
IGRpc2FibGVz 74096
QU5EUk9JRA== 74097
IFdlaXRlcg== 74098
X0Zvcm1hdA== 74099
X3NwbGl0cw== 74100
IEFjdGl2ZVN1cHBvcnQ= 74101
KGNzcw== 74102
X21pY3Jv 74103
c3RyaWtl 74104
IENhdXNlcw== 74105
IHZpc2libHk= 74106
Q2FuY2VsYWJsZQ== 74107
IFlvc2g= 74108
IGRyYWluaW5n 74109
IGNvbGk= 74110
YXNsZXk= 74111
IFJlc3BvbnNpYmlsaXRpZXM= 74112
IFN1dHRvbg== 74113
KnRoaXM= 74114
U2hhcmVz 74115
LWdyYXBo 74116
IGVubGFyZ2Vk 74117
Um91dGluZQ== 74118
IGZyYW1lYnVmZmVy 74119
IGFpcmZsb3c= 74120
IHRyeA== 74121
IExlaWdo 74122
IEtlbnM= 74123
KGhlYXA= 74124
IHNwaWxsZWQ= 74125
U0NBTEw= 74126
IFZlbHZldA== 74127
YWN0dWFsbHk= 74128
X0VOQ09ESU5H 74129
IFdvcm0= 74130
KSl9Cg== 74131
IERhbmdlcm91cw== 74132
IHN1cGVyaW50ZW5kZW50 74133
Lmxvb2s= 74134
IHNoZWw= 74135
L2Zz 74136
U2FmZXR5 74137
5a6L 74138
LkRFRklORQ== 74139
X2ZhY3RvcnM= 74140
IHBhcnRpZG8= 74141
IG9wdGltaXppbmc= 74142
RG91YmxlQ2xpY2s= 74143
LWNvbW1lcmNpYWw= 74144
IGxvZ2ljYWxseQ== 74145
Y3ljaA== 74146
dXJ2ZQ== 74147
wrU= 74148
QUlMWQ== 74149
IHJlYWN0aW5n 74150
X0VYUFI= 74151
a8O2 74152
LmxvY2FsaXplZERlc2NyaXB0aW9u 74153
IGFzdG91bmRpbmc= 74154
IHBhc3RyeQ== 74155
IGdsb3NzeQ== 74156
IGJlaGF2ZXM= 74157
L2Vj 74158
IGNsaXBwZWQ= 74159
IHByb3dlc3M= 74160
IFVC 74161
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 74162
CWFscGhh 74163
IGV4dHJhdmFn 74164
IGZpbm5z 74165
KFNvY2tldA== 74166
IFVuc2FmZQ== 74167
IHF1aWVyZQ== 74168
X2VuY29kZWQ= 74169
b2x1bWJpYQ== 74170
IHphYg== 74171
c3RyaWN0ZWQ= 74172
IG1uaWU= 74173
IE1PUw== 74174
IGF0aGxldGljcw== 74175
IEtlbmRhbGw= 74176
IOyYpA== 74177
QVZBSUxBQkxF 74178
aW5veA== 74179
X09QQ09ERQ== 74180
IEl0ZW1UeXBl 74181
IGNlbnRyaWY= 74182
IGludGVyc3RhdGU= 74183
X2Jvb2tz 74184
LmRlbGl2ZXJ5 74185
IExpc3Rl 74186
b3JzaQ== 74187
X3NlY3VyZQ== 74188
Z3Jvd3Ro 74189
IHZlbnRl 74190
IHBzeWNob2xvZ2lzdHM= 74191
IENDUw== 74192
dWRlbmNl 74193
IGNyYXdsZXI= 74194
L21hbnVhbA== 74195
IHRleHRTdHlsZQ== 74196
IHBhbGluZHJvbWU= 74197
IGNvbmR1Y3Rz 74198
dGFibA== 74199
V2l0aFVSTA== 74200
L3JpZ2h0 74201
IERyYQ== 74202
Lk1haWw= 74203
KHNlYw== 74204
b2Z0d2FyZQ== 74205
IHNldWw= 74206
IHdyaW5rbGVz 74207
X0ZX 74208
QXk= 74209
IEVybnN0 74210
dW5iaW5k 74211
IGNvbW1lbmQ= 74212
X2hvb2tz 74213
IE1vbmV0YXJ5 74214
IFFR 74215
dW5pdE9mV29yaw== 74216
IEVudGl0eVR5cGU= 74217
IGhvcm1vbmFs 74218
LkZBSUw= 74219
QFNsZg== 74220
L2NoYW5uZWw= 74221
c29ubw== 74222
RGFucw== 74223
X1JlZ2lzdGVy 74224
SGFu 74225
T1JC 74226
SktMTU5PUA== 74227
dmVudGVk 74228
IGxvbmdzdGFuZGluZw== 74229
IGJnQ29sb3I= 74230
IDsp 74231
IFJvYmJpZQ== 74232
KCIuIg== 74233
IGFqdXN0 74234
LmhhbmRsZUNsaWNr 74235
cmF0aW5ncw== 74236
cHRlcg== 74237
IGVyb3RpY28= 74238
IEplbGx5 74239
KioqKioqDQo= 74240
LkRvZXNOb3RFeGlzdA== 74241
CWJl 74242
JHRlbXA= 74243
Ij4mIw== 74244
55u0 74245
CVB1YmxpYw== 74246
neyytA== 74247
IEJ1aWxkaW5ncw== 74248
LWFsb25l 74249
LCdc 74250
IHN3YXBz 74251
IHBlcnBsZXg= 74252
X3Byb2Nlc3NvcnM= 74253
INC00LI= 74254
IE5ZUEQ= 74255
UENS 74256
5q+P 74257
IGhvamU= 74258
RWRpdE1vZGU= 74259
IHZ1bGdhcg== 74260
IHZlcmRl 74261
ICgpPT57Cg== 74262
L2Zyb250ZW5k 74263
IHRlbGVmb25l 74264
IGxhbnRlcm4= 74265
LnBhZ2VY 74266
IER1ZA== 74267
bGltaXRhdGlvbnM= 74268
IG5vdGlmaWVy 74269
IE1lc3NhZ2luZw== 74270
IWltcG9ydGFudA== 74271
IHN1cmdlb25z 74272
KT0o 74273
Rml4ZWRTaXpl 74274
Llpvb20= 74275
aW5hbg== 74276
IGNyZWRz 74277
IEJVRg== 74278
LlN0YWNrVHJhY2U= 74279
IHdhcnJhbnRlZA== 74280
IHNvdXJjaW5n 74281
IGNvbm5h 74282
X0ZSRQ== 74283
IHdvbGw= 74284
IHJlZmluaW5n 74285
X0FMTE9XRUQ= 74286
X212 74287
IFdvcmNl 74288
IFNpbmNsYWly 74289
Q2hlY2tzdW0= 74290
IHVubG9ja3M= 74291
IE1hcmtkb3du 74292
IGZpc2hlcm1lbg== 74293
RHVi 74294
IEJvbm5pZQ== 74295
ICAgICAgICAJCg== 74296
IHZlcno= 74297
Piw8Lw== 74298
PjwhWw== 74299
Wyc8ew== 74300
amVj 74301
IEVyZw== 74302
cmF0aGVy 74303
IHBhbGFicmFz 74304
IFBBQ0tFVA== 74305
bWlzZQ== 74306
ZGFx 74307
IE9rdG9iZXI= 74308
KEdMRlc= 74309
IEhlbnJp 74310
IEZvdA== 74311
IER1bw== 74312
IE5FUw== 74313
IHNhbHNh 74314
IHVuYmlhc2Vk 74315
QFNwcmluZ0Jvb3RUZXN0 74316
IG9mZnM= 74317
5YWs5Y+4 74318
IGFtb3VudGVk 74319
RnVsbFBhdGg= 74320
IHF1YXQ= 74321
IG1haWRlbg== 74322
IFN1YnNldA== 74323
IEFwcGxpY2F0aW9uRGJDb250ZXh0 74324
bWlycm9y 74325
bmV4 74326
LnN0cmVldA== 74327
c2V0UXVlcnk= 74328
JHJlc3VsdHM= 74329
YWRlcm8= 74330
Z3Jlc3Nvcg== 74331
X2J1Zw== 74332
aXNzZXI= 74333
IFNlYXJz 74334
IGZpbGxDb2xvcg== 74335
Lm1hc2tz 74336
IERpYWJsbw== 74337
X0FORFJPSUQ= 74338
0J7QsQ== 74339
IGZyZWFraW5n 74340
IHJpbnNl 74341
KHBrdA== 74342
IGJvb2tsZXQ= 74343
IHNhbmN0aW9uZWQ= 74344
IHN0cmVhbWVk 74345
dGFicGFuZWw= 74346
IFJldHVybmluZw== 74347
UGxhaW5UZXh0 74348
TE9ZRUU= 74349
YWxlc2Nl 74350
0L7QutCw 74351
IEZpeHR1cmU= 74352
YXNzYWRvcnM= 74353
IGRpc2JlbGllZg== 74354
IEx1c3Q= 74355
IHJhZGljYWxz 74356
LkZlYXR1cmVz 74357
X2luY2hlcw== 74358
KHByaW1hcnk= 74359
IEpNZW51SXRlbQ== 74360
X3Rha2U= 74361
IENva2U= 74362
VW5pdE9mV29yaw== 74363
IFdDSEFS 74364
IGNvbnNjaWVudA== 74365
b25lbnVtYmVy 74366
UElORw== 74367
YWJham8= 74368
XSgi 74369
LnNhbGVz 74370
X2hlcmU= 74371
IG9mZnNldFg= 74372
dGFnTmFtZQ== 74373
INmK 74374
X1JpZ2h0 74375
aWxpZw== 74376
dGhlVmFsdWU= 74377
b2NhcmQ= 74378
IGNvbnN1bHRhbmN5 74379
IGJsaWo= 74380
Z29ybQ== 74381
TmF2aWdhdGU= 74382
xLFj 74383
SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9u 74384
X3Zl 74385
LkNPTlRFTlQ= 74386
dXJvcGVhbg== 74387
LnJhZGlv 74388
IGVudmlzaW9uZWQ= 74389
IFNPTQ== 74390
LnNk 74391
QU5USVRZ 74392
IENBTExCQUNL 74393
IGhn 74394
ZGVjcnlwdA== 74395
566x 74396
XFF1ZXVl 74397
IE1JTEY= 74398
IHJlY3Vyc2U= 74399
IERhbnRl 74400
LmdhbW1h 74401
b3Jrcw== 74402
KCIiKSkK 74403
IEdyaW0= 74404
Lm9wZW5n 74405
IE1pY2hlbGU= 74406
QW5hbHk= 74407
IFBydQ== 74408
X3JlZGlyZWN0ZWQ= 74409
X3BhbA== 74410
ZmFsbGJhY2s= 74411
IOWtlw== 74412
IGRpbm5lcnM= 74413
R2VuZXJhdGluZw== 74414
JCIs 74415
aGlzdG9yaWM= 74416
Z2V0U2ltcGxlTmFtZQ== 74417
IE1pbGxpb25z 74418
LWdsb2JhbA== 74419
cm91dGluZw== 74420
IGNvbnNvbGlkYXRl 74421
IHJlY29pbA== 74422
T2JqZWN0T2ZUeXBl 74423
IGRlc3BlcmF0aW9u 74424
QW55d2hlcmU= 74425
IGdldE1vZGVs 74426
X2tpbGw= 74427
b2Jvb2s= 74428
L2Rpc3BsYXk= 74429
Ii8+Cgo= 74430
IG1heW8= 74431
INGB0L/QuNGB0L7Qug== 74432
IGdvYWxpZQ== 74433
eERG 74434
IFByZXBhcmF0aW9u 74435
IGRlcGVuZGFibGU= 74436
LklOVkFMSUQ= 74437
Li4uJw== 74438
bmF0YWw= 74439
bW9kdWxlTmFtZQ== 74440
Y2FyYm9u 74441
UEFM 74442
IG1lZQ== 74443
IGNhc2luZw== 74444
6aG555uu 74445
bmljYXM= 74446
IEhhbW0= 74447
IEJhYmU= 74448
b3dhbmU= 74449
IHN5bm9ueW0= 74450
IFFpbg== 74451
aW9j 74452
ZW1vdGlvbg== 74453
IGZlcm1lbnRhdGlvbg== 74454
IGN1bXBs 74455
IEVsZWN0cmljaXR5 74456
KFJPT1Q= 74457
dGVzdGVy 74458
IEh1c2JhbmQ= 74459
IEJhdQ== 74460
X01BQ1JP 74461
YWtlbmluZw== 74462
ICAgICAgICAKICAgICAgICAKICAgICAgICAK 74463
LmZpbg== 74464
IENvbmZpZGVudGlhbA== 74465
aWV6 74466
TUJFUg== 74467
IHNwZXJtYQ== 74468
IEhQVg== 74469
dHhu 74470
Q09OVEFDVA== 74471
LlRocm93 74472
IG11cmFs 74473
IFR3aXN0 74474
KCZfX18= 74475
IGpk 74476
IGVtcG93ZXJtZW50 74477
IGRpc3RpbnQ= 74478
IGJvbWJpbmdz 74479
T3V0Y29tZQ== 74480
IHNob3J0ZW4= 74481
5b6M 74482
QUNDT1VOVA== 74483
X2NvdmVyYWdl 74484
ZW5jbw== 74485
X3JlZmVy 74486
c2V0TWVzc2FnZQ== 74487
IHJlcGVyYw== 74488
cHRpZGVz 74489
IGRlaXR5 74490
dWNoc2lh 74491
KGh0 74492
LnN1YnNjcmlwdGlvbg== 74493
IHJlZGlzdHJpYnV0ZWQ= 74494
IER5bmFzdHk= 74495
X3Zj 74496
LWZyYW1ld29yaw== 74497
cnlmYWxs 74498
IGdhdGluZw== 74499
IExvcmVuem8= 74500
b29kb28= 74501
IGRpZ2VzdGlvbg== 74502
IGZvb3Rpbmc= 74503
CUhhc2hNYXA= 74504
cmVhbERvbmFsZFRydW1w 74505
IGFwYWNoZQ== 74506
KHZhbG9y 74507
IHBvaXNvbm91cw== 74508
LlBlcm1pc3Npb24= 74509
IHBhcmFtb3VudA== 74510
d2VpdA== 74511
bGxhbmQ= 74512
IGh5cG90aGVzZXM= 74513
IFByeQ== 74514
IGhvbWVt 74515
KERldmljZQ== 74516
aW5kaWNl 74517
ZXZh 74518
cHJlc2VuY2U= 74519
IEJlbnRsZXk= 74520
IEVuZGluZw== 74521
IGRvbWVzdA== 74522
CXRw 74523
CWVycm9ycw== 74524
Y29ybmVy 74525
bGRh 74526
CgkJCQkK 74527
X1BFUlNPTg== 74528
IFNlcmdleQ== 74529
IFBhcnNlcw== 74530
LWZpY3Rpb24= 74531
LkJhY2tncm91bmRDb2xvcg== 74532
IHNvbW1lcw== 74533
IGNvb2xlc3Q= 74534
IHJ1YmJsZQ== 74535
LmpvYnM= 74536
IGRyb3duaW5n 74537
YWRvcmFz 74538
IHdpbmdlcg== 74539
IEluY3JlYXNpbmc= 74540
2YrYqQ== 74541
QkJCQg== 74542
KFJvbGU= 74543
IG9kZGx5 74544
RGV2RXhwcmVzcw== 74545
LXV0aWw= 74546
IFNoZW1hbGU= 74547
cHJpbWl0aXZl 74548
IGFmZmlybWVk 74549
LnJldHVyblZhbHVl 74550
LWxpdmU= 74551
IEFjdGlvbkNvbnRyb2xsZXI= 74552
w6ts 74553
ZXJjdWxvc2lz 74554
IHByYWt0 74555
IGdlb3BvbA== 74556
cGljcw== 74557
Q0RD 74558
LkZs 74559
LnNpZA== 74560
cmllYmVu 74561
KHZhcnM= 74562
K3NlbGY= 74563
IGludGVyaW9ycw== 74564
IEF1Z3VzdGluZQ== 74565
IjpAIg== 74566
IFN0ZWFsdGg= 74567
IGdldENvbG9y 74568
IEdlbnRsZQ== 74569
fiI6Ig== 74570
IHdoaW0= 74571
KCc8Lw== 74572
IFNTRQ== 74573
IFZpb2xldA== 74574
X2NyZWQ= 74575
IGF0YQ== 74576
IEF6ZXJiYWlqYW4= 74577
ID8/Pz8/ 74578
LmV2ZXJ5 74579
KGNvbm5lY3Q= 74580
IERyb25l 74581
IHRvbGVyYW50 74582
c3VidG90YWw= 74583
X3NodWZmbGU= 74584
dXN0YWluYWJpbGl0eQ== 74585
cHJlZmVycmVk 74586
IFNFWA== 74587
IGNvbmdyZXNzbWFu 74588
IG5hbW9ybw== 74589
IGhvbm9yYWJsZQ== 74590
IGFmdGVyRWFjaA== 74591
IMW8eWM= 74592
SEFN 74593
LnRvbQ== 74594
IGVsb25n 74595
IFNlcmlvdXM= 74596
LVNlbWl0aWM= 74597
0KHRgg== 74598
IGZsYW0= 74599
dGVuZXI= 74600
LlRFU1Q= 74601
IFRSQUNL 74602
IFBoaWxpcHM= 74603
IEFyZW4= 74604
IEhpY2tz 74605
b2luZWQ= 74606
IEZhaA== 74607
aXNzZXVy 74608
IGNpcmN1bWNpc2lvbg== 74609
KHR3ZWV0 74610
IHBvaWw= 74611
IFNlZW4= 74612
X01BUFBJTkc= 74613
IGludmFyaWFibHk= 74614
IEZ1c2U= 74615
ICc/Jw== 74616
PXBhc3N3b3Jk 74617
IOuCmA== 74618
IElIdHRw 74619
c3R5cGU= 74620
Zml0bmVzcw== 74621
LlRhZ3M= 74622
IOqwnA== 74623
KERXT1JE 74624
IHF1YQ== 74625
IE1hcnZpbg== 74626
Ik0= 74627
LmlzQXV0aGVudGljYXRlZA== 74628
Lmd1YXJk 74629
KT8KCg== 74630
CQkJCQkJCQkJCQkJCQkJCQkJCQ== 74631
IFNoaXBz 74632
IHNlbnNpdA== 74633
fTsNCg0KDQo= 74634
YWhhaGE= 74635
IGxpZXV0ZW5hbnQ= 74636
IEphZ3Vhcg== 74637
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 74638
VUNF 74639
SW5zcA== 74640
YWludGVy 74641
X3BvbHlnb24= 74642
LkRvd24= 74643
IHRleHR1cmVk 74644
LnNldEFjdGlvbg== 74645
b2dy 74646
IHNjaWVudGlmaWNhbGx5 74647
IHNocmluZQ== 74648
IGNsb3VkeQ== 74649
LkhvdXI= 74650
UG9zdEJhY2s= 74651
QVpZ 74652
X2NhbmRpZGF0ZXM= 74653
KFNlYXJjaA== 74654
IGNvbW1pc3Npb25lcnM= 74655
IEJpZW4= 74656
IGRvY3RvcmFs 74657
IEZlZWxpbmc= 74658
X1ZFUlRJQ0FM 74659
IEJk 74660
bmdpbng= 74661
IOWcqA== 74662
X2FyZ3Y= 74663
UlNB 74664
IGVsZGVzdA== 74665
LWhlYXZ5 74666
Q09OTg== 74667
IEh0dHBOb3RGb3VuZA== 74668
LWNvbHVtbnM= 74669
IE5QQ3M= 74670
IGNhZmVz 74671
IGfDqQ== 74672
IHN0YWxscw== 74673
IGZvcmtz 74674
IHBvYmw= 74675
U3RyZWFtcw== 74676
IGJhc3RhcmQ= 74677
IFJhcHRvcnM= 74678
IEdyYW1teQ== 74679
IEdlaA== 74680
X1RpY2s= 74681
KHByZWc= 74682
IGxpcHN0aWNr 74683
X3J1 74684
PEg= 74685
IMSRaQ== 74686
LkNhcg== 74687
IHNwYXJlZA== 74688
bW9uaWM= 74689
aW5jdGlvbnM= 74690
QWZyaWNh 74691
KGRpY3Rpb25hcnk= 74692
ICoqKSY= 74693
YGBg 74694
X3ByZXNzdXJl 74695
bWll 74696
IFJvbWFuaWFu 74697
L21hcms= 74698
IG1haW50ZW5hbnQ= 74699
IHRyZW4= 74700
IFBvc3RncmVTUUw= 74701
UkVMRUFTRQ== 74702
SlBFRw== 74703
IGRlZGljYXRl 74704
TWFrZVJhbmdl 74705
IHJvYm90aWNz 74706
YWt0aXY= 74707
JSUl 74708
YWFy 74709
dmlld01vZGVs 74710
KG1hYw== 74711
dWNoZXI= 74712
IGRlYmVu 74713
TG9jYWxpemF0aW9u 74714
0L7Qt9Cy0YDQsNGJ0LDQtdGC 74715
LnNldFRvb2xUaXA= 74716
LmZhc3Rqc29u 74717
IHBlcmVubmlhbA== 74718
LWNoaWVm 74719
a2lzaA== 74720
IGF0dGlj 74721
U3VidGl0bGU= 74722
IFNsYW0= 74723
IExpdGVyYXJ5 74724
ZXJuZXM= 74725
INGC0L7Qu9GM0LrQvg== 74726
IHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQ= 74727
LkVycm9yTWVzc2FnZQ== 74728
YmluYXRpb25z 74729
Ikw= 74730
IGZvcmJpZA== 74731
IGxvZGdlZA== 74732
Lkxpc3RCb3g= 74733
IFBTRA== 74734
IGN1bHR1cmE= 74735
VU5DVA== 74736
Ik9uZQ== 74737
IEd1aWxs 74738
IEJhdHRhbGlvbg== 74739
IGNhcmVnaXZlcnM= 74740
IEtsbw== 74741
QmVoaW5k 74742
IHNlYXJjaGFibGU= 74743
X0JPVU5E 74744
Uk9D 74745
IHN0ZXJlb3R5cGU= 74746
IHByZXBlbmQ= 74747
aW50ZXJzZWN0aW9u 74748
QmFza2V0 74749
KGxv 74750
IGZpbGVJbmZv 74751
IFVJU2Nyb2xsVmlldw== 74752
ZWNlc3NhcmlseQ== 74753
IENoZXM= 74754
LWluc3RhbmNl 74755
IGFwcGFydA== 74756
IEFtYXI= 74757
IHJvd0RhdGE= 74758
IGF5dWRh 74759
IGNhcmF2YW4= 74760
X3BpY2tsZQ== 74761
IGNoYWluaW5n 74762
KV07Cgo= 74763
IGJveGVk 74764
YWVwZXI= 74765
IEVWRVI= 74766
eW50aGVzaXM= 74767
LWZhc3Q= 74768
IOuwsA== 74769
5Y+v5Lul 74770
IHZvbHVudGVlcmVk 74771
IGV4aWc= 74772
U0lERQ== 74773
IFBob25lTnVtYmVy 74774
dWxhaXJl 74775
IEthZA== 74776
IGRhcm4= 74777
IHlhaw== 74778
IEJsaW5r 74779
LnNwaW5uZXI= 74780
IG9yZGVhbA== 74781
X2VuZW15 74782
IGdldFM= 74783
IEJvbw== 74784
TGluZU51bWJlcg== 74785
X0xPT0s= 74786
RUxDT01F 74787
IHNlYW1z 74788
IHNhZ2Vu 74789
aXNjbG9zZWQ= 74790
KHJheQ== 74791
W2dyb3Vw 74792
UFRT 74793
Lk5hdmlnYXRl 74794
IE93bA== 74795
IGRidXM= 74796
IGltcGF0aWVudA== 74797
IEd1cHRh 74798
KG9iamVjdHM= 74799
IGFwcmls 74800
LXF1 74801
IG91dHJhcw== 74802
IFRIRU0= 74803
IEVNQw== 74804
RW1wbGVhZG8= 74805
IGdydWI= 74806
SUFN 74807
IHZlbm9t 74808
IHRyYW5zY2VuZA== 74809
IHZpY3RvcmlvdXM= 74810
IE1heWVy 74811
INGC0L7QstCw0YA= 74812
IEtlbGxleQ== 74813
SW5wdXRHcm91cA== 74814
IHJlZmlsbA== 74815
V2l0aFR5cGU= 74816
IGNoYXVmZg== 74817
b2xkZW0= 74818
X3RpZA== 74819
IGZsdXNoZWQ= 74820
XHN5c3RlbQ== 74821
LnJhbmRyYW5nZQ== 74822
IFBPU0lUSU9O 74823
IFRlbmFudA== 74824
Y29udmVyc2lvbg== 74825
Y2FsbGluZw== 74826
KCkpKSwK 74827
0L7QvdCw 74828
IHNpZGV3YXlz 74829
IGxheA== 74830
CXJlcA== 74831
YWVwZXJuaWNr 74832
IG5lZ2Vy 74833
IEZseWVycw== 74834
ICJALw== 74835
dXBha2Fu 74836
X2VsYXBzZWQ= 74837
dHViZQ== 74838
UG9zWA== 74839
LnNleA== 74840
IGzDpHNzdA== 74841
IEdyYXZl 74842
5Y+C 74843
KGVtcA== 74844
KHN0cnRvbG93ZXI= 74845
Y29udmVydGVy 74846
IFNwb25zb3JlZA== 74847
KHdvcmtlcg== 74848
IG1hdHJpbW9u 74849
Q29tbWlzc2lvbg== 74850
KGh3 74851
X1NJR05BVFVSRQ== 74852
bWVr 74853
IGFsZ3VuYXM= 74854
X0VU 74855
aXN0cmluZw== 74856
THY= 74857
U2xpZGVz 74858
IHdlYWtTZWxm 74859
IHdr 74860
IFppZw== 74861
IHB1YnM= 74862
IEJSQQ== 74863
IGZsdW9yZXNjZW50 74864
Y2Fycnk= 74865
LmVyYg== 74866
IEluaQ== 74867
LkRyYXdTdHJpbmc= 74868
IFNFUA== 74869
dXR0ZXJz 74870
2ZE= 74871
Um95YWw= 74872
IGNhYmJhZ2U= 74873
IFN1aw== 74874
XT49 74875
IEVkaXNvbg== 74876
IHNwZWN1bGF0ZWQ= 74877
LmRvd25jYXNl 74878
IHRwaA== 74879
IMOD 74880
IGd1bnNob3Q= 74881
cnBt 74882
IGZsdXR0ZXI= 74883
IGFueA== 74884
YXplcw== 74885
UU9iamVjdA== 74886
IEZhdm9y 74887
IG1vZHVsZU5hbWU= 74888
JnM= 74889
bGVo 74890
LldlaWdodA== 74891
IFdBTA== 74892
X1ZBUlM= 74893
IFdhc3Nlcg== 74894
IG91dGJvdW5k 74895
IGVyZm9sZ3Jl 74896
LnZhbG9y 74897
KGxpZ2h0 74898
IE1hZ251cw== 74899
IHpvZWs= 74900
eWg= 74901
IHN0eWxlc2hlZXQ= 74902
Pm0= 74903
V2hpdGVzcGFjZQ== 74904
IFsnLw== 74905
CVJlcXVlc3Q= 74906
X2luY3JlYXNl 74907
LWRpc3RhbmNl 74908
aWNvbG9y 74909
aGNp 74910
IEtJTkc= 74911
UFg= 74912
b2ls 74913
ZW1pbmc= 74914
bmFtZW50cw== 74915
RGVmaW5lcw== 74916
IFstLQ== 74917
IHZhcmlvcw== 74918
IFBSRVNT 74919
LGF4aXM= 74920
IENvbGxpZGVy 74921
KX0KCg== 74922
IGZvcmNpYmx5 74923
IHN0YWF0 74924
X1NUQU5EQVJE 74925
IG9jY3VsdA== 74926
IGJhcHRpc20= 74927
IEN1bm5pbmdoYW0= 74928
X2J1aWx0aW4= 74929
Q1BG 74930
W21heG4= 74931
IFJIUw== 74932
IE9uZXM= 74933
KF86 74934
IGluc2VjdXJpdHk= 74935
LnJlZ2lzdHJhdGlvbg== 74936
aW1wbGlmaWVk 74937
IFN5bXBvc2l1bQ== 74938
aHJlYWQ= 74939
IHF1ZWxsZQ== 74940
IGZyZW56eQ== 74941
Q2FsaWJyaQ== 74942
IFNQRUVE 74943
b3Vp 74944
KCldLAo= 74945
YWNjb3JkaW5n 74946
IG1jYw== 74947
IGFzaWF0 74948
IGFkamFjZW5jeQ== 74949
IEFibGU= 74950
IHNhbGRv 74951
bm9zdGk= 74952
IGRpbWU= 74953
ZXRyYXRpb24= 74954
IE1vZGlmaWNhdGlvbg== 74955
IEhlcmI= 74956
IHBsYWF0cw== 74957
IGludGVycGVyc29uYWw= 74958
IO2ZleyduA== 74959
YXJtZQ== 74960
IGNvbWVyY2lhbA== 74961
IEJhdGVz 74962
KGNhcmRz 74963
LmdldENsaWVudA== 74964
Lk5PUk1BTA== 74965
CVRlc3Q= 74966
ICAgICAgICANCiAgICAgICAgDQo= 74967
IFJhem9y 74968
d2Vpcw== 74969
SVRIVUI= 74970
IEVOVElUWQ== 74971
YWdpdA== 74972
IG1pbmVjcmFmdA== 74973
cHJvcG9zYWw= 74974
IHNhbHR5 74975
YW5kcg== 74976
IENvbmNsdXNpb24= 74977
IHBydWRlbnQ= 74978
IFtA 74979
IFB1cHBldA== 74980
aWdvbg== 74981
IEdvdGhhbQ== 74982
IGNoZWVycw== 74983
IFNoYXk= 74984
IGpp 74985
IEdESw== 74986
ZXhwZXJ0 74987
IGZ1bmt5 74988
IFphbQ== 74989
W05VTQ== 74990
RGVxdWU= 74991
X1RXTw== 74992
XHZpZXdz 74993
IHByb2pla3Q= 74994
IGRyb3duZWQ= 74995
a2lkcw== 74996
LnNoZWV0 74997
IG5vbmQ= 74998
IGNvdXJ0ZQ== 74999
IC4uLgoKCgo= 75000
IHBpY3R1cmVzcXVl 75001
IHR1YmluZw== 75002
KCkuIg== 75003
amV0cw== 75004
X1B1YmxpYw== 75005
IEZhcnI= 75006
IEFyZA== 75007
T1VSU0U= 75008
IGthZGFy 75009
IFByb2dyYW1t 75010
LmtleXdvcmQ= 75011
CSAgICAgICAgICAgICAgICA= 75012
aWVkYWRlcw== 75013
YXRvbG9neQ== 75014
IER1bmQ= 75015
PWNvdW50 75016
IHNsb3dkb3du 75017
LSIs 75018
LkZvcmVncm91bmRDb2xvcg== 75019
UnVucw== 75020
LlR5cGVPZg== 75021
JGN1cnJlbnQ= 75022
IHVwc2NhbGU= 75023
CXVuaW9u 75024
KGNoaXA= 75025
dW1pZGl0eQ== 75026
PVtdDQo= 75027
IGhhcnQ= 75028
ICRfWw== 75029
eW5lYw== 75030
LlVzdWFyaW8= 75031
IG9jdGF2ZQ== 75032
IHBvcnRyYXlhbA== 75033
INC90L7QvNC10YA= 75034
IE9jY3VweQ== 75035
X25hbg== 75036
IFNtYXJ0cGhvbmU= 75037
aGluZA== 75038
IHdpbmRzaGllbGQ= 75039
IGxvbmVsaW5lc3M= 75040
L2NoYXJ0 75041
IGFjdGl2YXRlcw== 75042
LnJpYmJvbg== 75043
IGxhZ2k= 75044
IHBhcmFjaA== 75045
SHlwZXI= 75046
c2NhbGVk 75047
VGVz 75048
IEJlZXQ= 75049
IGRpc3NlY3Q= 75050
IENpYw== 75051
IH0sCgoK 75052
PigpCgo= 75053
LnN0dWR5 75054
IGNvbnRyYXN0aW5n 75055
WkVSTw== 75056
IHR1bmE= 75057
IENob3c= 75058
X3Zh 75059
ZmF2b3I= 75060
W0luZGV4 75061
IFBvd2VyU2hlbGw= 75062
KHByb3Rv 75063
JykpOgo= 75064
X2Zvcm1hdHRlcg== 75065
Q2hyaXN0b3BoZXI= 75066
T3JOdWxs 75067
Q0lTSU9O 75068
X2NvbnN1bWVy 75069
UGFzdGU= 75070
KG5vbWU= 75071
ZW50b24= 75072
IHVucmF2ZWw= 75073
X2Rvbg== 75074
IHBhcmVudGhlc2Vz 75075
IE5VSVQ= 75076
L10= 75077
IOKIpw== 75078
c3RhY2xlcw== 75079
L2NvbW1lbnQ= 75080
dXR0aW5n 75081
IHNsb3BweQ== 75082
KFt7 75083
LnNhdg== 75084
dG9Kc29u 75085
IOu5hA== 75086
IFByYXR0 75087
Lm1vZGlmeQ== 75088
LklzQ2hlY2tlZA== 75089
IHZlbmV6 75090
IFNFVFRJTkdT 75091
amF3 75092
IGZpcmVzdG9yZQ== 75093
IGNvbnNvcnRpdW0= 75094
IGthYg== 75095
IFN1cHBvcnRpbmc= 75096
IFRoZXNpcw== 75097
IG5vbmxpbmVhcg== 75098
IHRleHRib3g= 75099
LiIiIg== 75100
IEVuZXJn 75101
LkpPcHRpb25QYW5l 75102
IGludGVycnVwdGlvbg== 75103
w6h0cmVz 75104
IHNoYWxl 75105
IFBsYXllZA== 75106
IHNvY2lhbGU= 75107
WUdPTg== 75108
X0JBVENI 75109
IHRyaW1lc3Q= 75110
IFByb2NlZHVyZXM= 75111
IGF0dGVuZHM= 75112
IiR7 75113
ZXZhbHVhdGlvbg== 75114
LlByb2dyZXNzQmFy 75115
IEFsZXhhbmRyYQ== 75116
Y2jDqQ== 75117
X1NFUVVFTkNF 75118
IGNyb2NoZXQ= 75119
Um9z 75120
IGlobmVu 75121
ICIqKio= 75122
IGFyb3Vz 75123
IG1vZHVsdXM= 75124
X0xJTlVY 75125
U3RhY2tTaXpl 75126
aWF0aW9uRXhjZXB0aW9u 75127
Lk11dGFibGU= 75128
IClb 75129
IHBpaQ== 75130
Zmlmbw== 75131
X1BJQ0s= 75132
UHVycG9zZQ== 75133
KFN0dWRlbnQ= 75134
IE5pY28= 75135
ZXN6 75136
L3Nt 75137
IFBQUA== 75138
W2lucHV0 75139
5Y+Y 75140
IGJsYXN0cw== 75141
IE11dHVhbA== 75142
cm9sbGV5 75143
IHV0aWxpc2Vy 75144
OlRoZQ== 75145
5Z+6 75146
LmRlY29kZXI= 75147
IG9iamV0b3M= 75148
IGF3YWtlbmluZw== 75149
IEVubGlnaHQ= 75150
CWFsaWdu 75151
X3Jld3JpdGU= 75152
L2N1cnJlbnQ= 75153
IGRhcmF1Zg== 75154
Q2FudGlkYWQ= 75155
LG5w 75156
IHZlbG9jaXRpZXM= 75157
Q0xS 75158
IG1pc2luZm9ybWF0aW9u 75159
IHN0cmVhbWxpbmVk 75160
IGdyb29taW5n 75161
IGF6aQ== 75162
b2xn 75163
IGNvbnN0aXR1ZW50 75164
IHdlZQ== 75165
0YXQvtC00LjQvA== 75166
IEFsb25zbw== 75167
aWV0Zg== 75168
Y3Rlcg== 75169
IHRoZXJtb3N0YXQ= 75170
KEND 75171
IHN0YWNraW5n 75172
X2NvbnZlcnRlcg== 75173
IERpc25leWxhbmQ= 75174
CWZpbGVz 75175
SUNJ 75176
X1RPUElD 75177
CUVsZW1lbnQ= 75178
YXJnYXM= 75179
IFxA 75180
YW5jb2Nr 75181
IEJhc2VFbnRpdHk= 75182
KCItLS0= 75183
cmJyYWtr 75184
IG5lZ2F0aXZlcw== 75185
IHZ3 75186
PWZvcGVu 75187
Y2hlbWlzdA== 75188
QXJjaGl2bw== 75189
IGAu 75190
IEZPVVI= 75191
KGFp 75192
VGFibGVXaWRnZXRJdGVt 75193
PD8+Pg== 75194
LnByZWQ= 75195
VHJhaWw= 75196
LWZhY3Rvcg== 75197
IEltYWdlQnV0dG9u 75198
cGVyaWE= 75199
IENlbGVicmF0aW9u 75200
LlJlc3BvbnNlQm9keQ== 75201
dXJjaGFzZXM= 75202
IGdldEtleQ== 75203
IENyYWI= 75204
IHFp 75205
IFdpY2s= 75206
IGNoYXN0 75207
IC4uLi4uLg== 75208
IGNvbWVueg== 75209
IHNoYXJkcw== 75210
IGTDqWNvcg== 75211
IGhhbHZlcw== 75212
UVVFTkNZ 75213
IHBvd2VyaG91c2U= 75214
TElORw== 75215
Q2xhc3NMb2FkZXI= 75216
Y2VudHJl 75217
LXNlbmQ= 75218
bWFo 75219
IHNocmVkZGVk 75220
IFRJRkY= 75221
aW5rYQ== 75222
LgoKCgoK 75223
IGRlc2lnbmF0ZQ== 75224
IE5pZ2h0bWFyZQ== 75225
IEdlbmV0aWM= 75226
X2NoYW5jZQ== 75227
KGFuaW1hdGlvbg== 75228
cXVpbGE= 75229
X3NwZWNpZXM= 75230
TkVZ 75231
b3lzdGljaw== 75232
cmVsbG8= 75233
zqw= 75234
IGRpdmlzaXZl 75235
IFJFQw== 75236
IHN0dW1ibGU= 75237
KGZha2U= 75238
IExhY2U= 75239
YW50YWdlZA== 75240
YWtlc3Q= 75241
cHJvbW90aW9u 75242
IEZvd2xlcg== 75243
PWNlbnRlcg== 75244
IENpdWRhZA== 75245
UmFkaQ== 75246
IFNsZWVwaW5n 75247
dXRyb24= 75248
IHF1b2k= 75249
IFJBRA== 75250
IGV4cG9uZW50aWFsbHk= 75251
IEJyZWVk 75252
IG1vbm9wb2w= 75253
aGlnaGVzdA== 75254
eG1sbnM= 75255
SW50UHRy 75256
IHR1dHRl 75257
IFJlZnJpZ2Vy 75258
IOmhtemdog== 75259
IHpvbmRlcg== 75260
bGJyYWtr 75261
O2VsZW1lbnQ= 75262
IEhlZA== 75263
UmVsYXRpb25z 75264
64U= 75265
Q29ycmVv 75266
5aC0 75267
IE1pZ2h0eQ== 75268
QU5HTw== 75269
X2NvbXBpbGU= 75270
LmdldENtcA== 75271
IGludmFkZQ== 75272
LnNwcmluZ2Jvb3Q= 75273
IFR1bmU= 75274
X3NuYXA= 75275
X0ZFRUQ= 75276
IGRlY2lwaGVy 75277
PXNpemU= 75278
X2ZyZQ== 75279
IFRpbGxlcnNvbg== 75280
0LjQutCw 75281
dGlnaHQ= 75282
IGN1bHByaXQ= 75283
UlRM 75284
IFBhcmU= 75285
KHB1Yg== 75286
ZWdvdg== 75287
IHBvbnRv 75288
IGNvbnN1bA== 75289
SlNJbXBvcnQ= 75290
IHZlcndlbmRldA== 75291
IEJvb3N0ZXI= 75292
5b6F 75293
IGNhcnJvdA== 75294
dmVyaWdl 75295
KExQ 75296
IHd4VA== 75297
IGltcHJvcGVybHk= 75298
Iik6DQo= 75299
IHN1Y2U= 75300
L21vZGFs 75301
IElDVA== 75302
LikuCgo= 75303
X21hcmtz 75304
IENhY2hlZA== 75305
IEN1cnJpY3VsdW0= 75306
QnM= 75307
CUpPcHRpb25QYW5l 75308
m4Q= 75309
IGNvZ25pdGlvbg== 75310
IE5lZ290 75311
PXJlc3VsdA== 75312
X0ZvbnQ= 75313
YXJpbmU= 75314
IGNvbnNwaWM= 75315
IENhbGN1bGF0aW9u 75316
IENFT3M= 75317
LXRyYW5zcGFyZW50 75318
IEJlcmVpY2g= 75319
56iL5bqP 75320
Lmh5 75321
LkFsaWdu 75322
IGhvcGVsZXNz 75323
IGNvbG9tYg== 75324
dXJiZWQ= 75325
IFNBWA== 75326
IGVpbno= 75327
KHpvbmU= 75328
IG11enpsZQ== 75329
IHRyZXNwYXNz 75330
IEFicmFtcw== 75331
IGNvbXDDqXQ= 75332
IFNhbmN0dWFyeQ== 75333
IE5TVGV4dEFsaWdubWVudA== 75334
IHN0YXY= 75335
IHByYWdtYXRpYw== 75336
c3RyZW5ndGg= 75337
V2l0aE9wdGlvbnM= 75338
LmJhbmQ= 75339
YXBoYWVs 75340
QXVzdHJhbGlhbg== 75341
IE9TRXJyb3I= 75342
TWFuY2hlc3Rlcg== 75343
SWRl 75344
XFJlc291cmNl 75345
0L7QtNC10YDQtg== 75346
IHppZQ== 75347
SGFybmVzcw== 75348
LlR3ZWVu 75349
Y2Ftcw== 75350
4pyU 75351
LXNjYWxhYmxl 75352
LW9r 75353
IGpsb25n 75354
IE9sc29u 75355
IE9ha3M= 75356
LnNsaW0= 75357
IHPFgg== 75358
IG5ld09iag== 75359
LkludmVudG9yeQ== 75360
IGtlbm4= 75361
IG5pZ2h0bWFyZXM= 75362
aXJjbGVz 75363
Lm50 75364
Z3Jlbg== 75365
IFRFTg== 75366
IFNjb3Rz 75367
IERpc2FiaWxpdHk= 75368
X21hbmlmZXN0 75369
LnNpZGViYXI= 75370
IHNodWZmbGVk 75371
IGh1bWlsaXR5 75372
LnRhcA== 75373
IEdyYWlu 75374
bm90aWNlZA== 75375
77yJ44CC 75376
X2hwcA== 75377
IGRpbGF0aW9u 75378
IGhhbmRpY2Fw 75379
Z2V0RGF0ZQ== 75380
IGR6aWHFgg== 75381
JykuJzwv 75382
cmVjb3Zlcg== 75383
eXNp 75384
KGdyYXk= 75385
YWhrYW4= 75386
IGludGVyZmVyaW5n 75387
X1RPVUNI 75388
X3JlZHVjdGlvbg== 75389
QWx0ZXI= 75390
IGN1Yw== 75391
RXhwZXJ0 75392
IEx1bXA= 75393
Wzpd 75394
IHJlbG9j 75395
IGNvbmR1Yw== 75396
Q2hhcnNldHM= 75397
Lmxpc3RlbmVycw== 75398
LWludmVyc2U= 75399
IHN1bW1vbnM= 75400
IMO6bmljbw== 75401
IE9W 75402
IFNpY2hlcg== 75403
IEpGYWN0b3J5 75404
LmdldEJvdW5kaW5nQ2xpZW50UmVjdA== 75405
amg= 75406
IHNrZWxldG9ucw== 75407
IEFzaWFucw== 75408
IEFNQw== 75409
aXNlbGVjdA== 75410
LmNsaWVudEhlaWdodA== 75411
KGZy 75412
SGFzRm9yZWlnbktleQ== 75413
LnJlbGF0aXZl 75414
INiu 75415
IG11bHRpY3VsdHVyYWw= 75416
X0NPTEw= 75417
IG1pY3JvYmlhbA== 75418
IGltcG9ydGFudGVz 75419
U3BhaW4= 75420
IGN5bGluZGVycw== 75421
aWVuaWU= 75422
X09XTkVS 75423
KERJUw== 75424
IGZhbmRvbQ== 75425
KG54 75426
IGFwbGljYWNpw7Nu 75427
b2NhdG9y 75428
ZXNzaWFu 75429
IENsYXVkZQ== 75430
IGludG9sZXJhbmNl 75431
xYJlbQ== 75432
IFNlbWFudGlj 75433
Lk1pZGRsZVJpZ2h0 75434
QVJFU1Q= 75435
IHNpZXZl 75436
xLHEn8Sx 75437
aWNhYmxl 75438
ZXJnaWM= 75439
IGJhdHRsZWQ= 75440
b3JiaXQ= 75441
KXx8KA== 75442
dWVsZQ== 75443
IGZhc2NpbmF0aW9u 75444
IGTDpQ== 75445
IFRpZ2h0 75446
X0lOQ1JFRg== 75447
LklzU3VjY2Vzcw== 75448
LE8= 75449
IHN0w7hy 75450
IHByZXNzdXJlZA== 75451
LlRSVUU= 75452
IFRob3VzYW5k 75453
IGdlbWVpbnM= 75454
IHpi 75455
IHNwaXJpdHVhbGl0eQ== 75456
IFpldXM= 75457
IFBvd2VyZnVs 75458
YmF0dGVyeQ== 75459
aXN0ZXM= 75460
IO2D 75461
LnNoaXJv 75462
IEhpcHA= 75463
ZGVjbHR5cGU= 75464
LmpmYWNl 75465
LnRlbXBlcmF0dXJl 75466
IG1hcnF1ZQ== 75467
X2JhZw== 75468
QXR1YWw= 75469
cHJpY2luZw== 75470
Q2xlYXJseQ== 75471
X0Fic3RyYWN0 75472
w6lr 75473
YWhydW5nZW4= 75474
SW5zdHI= 75475
CQoKCg== 75476
IGNoZXdpbmc= 75477
IENvYWNoaW5n 75478
JExBTkc= 75479
bWFsbG93 75480
IHNlcmlvdXNuZXNz 75481
X2N1dG9mZg== 75482
IFF1YXJ0ZXJseQ== 75483
fScpCgo= 75484
IikpKTsKCg== 75485
6KeE 75486
LlBvc2l0aXZl 75487
LXBv 75488
eGl0bw== 75489
LlJhZA== 75490
IGJyaXNr 75491
IExpZmVjeWNsZQ== 75492
5pWw5o2u5bqT 75493
ZmF0YWw= 75494
IHhwb3M= 75495
LkRldGFpbA== 75496
ZW5hbA== 75497
TUFUQ0g= 75498
IGhlZWQ= 75499
IGFmcmljYW4= 75500
RGFkb3M= 75501
YmVyYXBh 75502
IGhlbGY= 75503
JywnJyw= 75504
IGVudHJlcHJlbmV1cnNoaXA= 75505
IGNlcnRz 75506
ZWNl 75507
PnI= 75508
X2ZpeHR1cmU= 75509
IHBvb2xpbmc= 75510
IG1vZ2VsaWpr 75511
IHNldERhdGU= 75512
5pS/ 75513
LWNvbXBsZXRl 75514
X1JBRElP 75515
IGt1bA== 75516
IGdvYg== 75517
X1NMQVZF 75518
IGZ1cnJ5 75519
IE5VSVRLQQ== 75520
SUxJVElFUw== 75521
IG5vY2hl 75522
IGN1ZmY= 75523
IGNvbnRlc3RhbnRz 75524
IFdW 75525
IHBhc3Nwb3J0cw== 75526
IMWC 75527
IE5haWw= 75528
X2RlY2ltYWw= 75529
YXN0bGU= 75530
IFNvbGRpZXJz 75531
UmVjaXBpZW50 75532
IGNvdXJzZXdvcms= 75533
IGltZQ== 75534
IFNlYXRz 75535
X0RM 75536
IGNvbnN1bHRhdGlvbnM= 75537
X0FEVg== 75538
IElrZWE= 75539
IG9maWNpYWw= 75540
IHJlZ2ltZW50 75541
IEJhdGhz 75542
LXBpbg== 75543
X0JVQ0tFVA== 75544
QUJDREVGR0hJSktMTU5PUA== 75545
Il0pKTsK 75546
PE1lc2g= 75547
Iix7 75548
IGRlcml2ZXM= 75549
4oCcRm9y 75550
IFl1Z29zbA== 75551
aXNFbmFibGVk 75552
IHNvbGx0ZW4= 75553
IHBldGl0aW9ucw== 75554
b3ZlcmFsbA== 75555
IGdldFRvdGFs 75556
X0hJTlQ= 75557
TWludXM= 75558
IGFub21hbGllcw== 75559
IFBpY2t1cA== 75560
PT09Jw== 75561
bGVpdHVuZw== 75562
IERlaw== 75563
WVNJUw== 75564
LnNlc3Npb25z 75565
IGNhcmM= 75566
X0l0ZW1z 75567
IGludGVybWl0dGVudA== 75568
Lkpzb25Qcm9wZXJ0eQ== 75569
IG1NYXA= 75570
IEthaw== 75571
YWluY29udHJp 75572
X3NlZWs= 75573
IHVuYW1l 75574
X3B1dHN0cg== 75575
RmQ= 75576
TGltaXRlZA== 75577
c25vdw== 75578
IFBhdmlsaW9u 75579
IEV4YWN0 75580
IHBvc3Rpbmdz 75581
CWRpc3Q= 75582
PHN0ZGxpYg== 75583
TGlnaHRz 75584
IGZpbHRybw== 75585
V29ya2Vycw== 75586
IHN5c2xvZw== 75587
R2lybHM= 75588
IEd1bQ== 75589
X3llYXJz 75590
J319Cg== 75591
IGjDpHQ= 75592
Z2F5 75593
KHByb2I= 75594
ZWxsYXM= 75595
IHdpbHQ= 75596
Lm9wdGltaXpl 75597
X0RVTVA= 75598
KFhNTA== 75599
IERYR0k= 75600
IG3DqXRo 75601
SVRJWkU= 75602
ZWxlY3Ryb24= 75603
LmN6 75604
IHN1YnNldHM= 75605
IHJlc3Bvc3Rh 75606
IGJlYWQ= 75607
wrsu 75608
IE9TQw== 75609
JnBhZ2U= 75610
Z3Bz 75611
YW5pYW4= 75612
UHVycGxl 75613
IGFjcm9ueW0= 75614
Uk9XTg== 75615
QXVkaXQ= 75616
IGNvdXJpZXI= 75617
YWxpZQ== 75618
IFdhc3M= 75619
IGF1ZGl0cw== 75620
IFBPVg== 75621
IEZhY2lhbA== 75622
X3N0cmNtcA== 75623
ICsl 75624
ICAgICAKCg== 75625
YCk7Cgo= 75626
RUhJQ0xF 75627
WyJA 75628
LW5hdGlvbmFs 75629
6ZuF6buR 75630
6L2v6ZuF6buR 75631
X2NvZGlnbw== 75632
IHVucXVlc3Rpb24= 75633
aWxtaW5ndG9u 75634
cmVxdWVzdENvZGU= 75635
IElX 75636
LnN0cmF0ZWd5 75637
IFNZTUJPTA== 75638
IGdyw7bDnw== 75639
X2JlaGF2aW9y 75640
IHJlZnJlc2hUb2tlbg== 75641
IG1vbmc= 75642
aW1lbnRhcnk= 75643
IFNob3Bz 75644
KCc/ 75645
X2hpZ2hsaWdodA== 75646
X2xleA== 75647
IGlsbHVtaW5hdGVk 75648
IHBhbHA= 75649
LWluc2VydA== 75650
IHN0cml2ZXM= 75651
IGZvcnRz 75652
IGVtYm9kaW1lbnRz 75653
bXBqZXM= 75654
X1RPTw== 75655
IGRyYWdnYWJsZQ== 75656
IGltbWVyc2lvbg== 75657
cGlucw== 75658
IFJlZ2lzdHI= 75659
IEZyZWVCU0Q= 75660
X3hsaW0= 75661
IFR1bHNh 75662
U25hY2tiYXI= 75663
L2RhdGU= 75664
IGRhdm9u 75665
IGF1dG9yZWxlYXNl 75666
IHZhY2F0aW9ucw== 75667
CQkgCQ== 75668
aWNlcHM= 75669
IFJhbXA= 75670
IEN5bnRoaWE= 75671
X3BvcHVsYXRpb24= 75672
JCQk 75673
IFRBUg== 75674
ZW5nYQ== 75675
IHB1cw== 75676
IOW5 75677
IHRpbWVzdGVw 75678
TGlmZXRpbWU= 75679
IGZpbG1lcg== 75680
WVNU 75681
IEdhemV0dGU= 75682
IG91dHNpZGVy 75683
IEVYUE9SVA== 75684
R09SSVRITQ== 75685
LmZsZXg= 75686
IFJvb3Rz 75687
KHBpeGVs 75688
emN6ZQ== 75689
YWlyaWU= 75690
IG92ZXJsb2FkZWQ= 75691
U1RSQUNU 75692
IENvdXJpZXI= 75693
44GW 75694
Y29udGluZW50 75695
RnJlZA== 75696
IHNlbXA= 75697
IFN0ZWxsYQ== 75698
IGRvdWJ0ZnVs 75699
YWRtaW5z 75700
IG9wdGluZw== 75701
TE9UUw== 75702
IG1hbmlmZXN0bw== 75703
LWZvbGRlcg== 75704
X2Ryb3BvdXQ= 75705
dXR1cmVz 75706
w612ZWlz 75707
YWNoaWV2ZW1lbnQ= 75708
IGNveQ== 75709
ZmFpdGg= 75710
X0hBTEY= 75711
aXJlY3RlZA== 75712
IGNvbnRhdG8= 75713
U2VtYXBob3Jl 75714
UHNp 75715
IHZpdGFsaXR5 75716
IEZsYXRCdXR0b24= 75717
SXRlbVR5cGU= 75718
IGltcGVjYw== 75719
IGJ1b3k= 75720
dWlu 75721
IHNreXJvY2tldA== 75722
IFNsYXllcg== 75723
IFJDTVA= 75724
IFNldmVudGg= 75725
X0ludGVyZmFjZQ== 75726
IGZpZXJj 75727
c3RhdGlvbnM= 75728
IEdyYWY= 75729
bGljZWQ= 75730
IGVudW1lcmF0b3I= 75731
Q29udGFpbmVycw== 75732
IG9p 75733
w4fDg08= 75734
LXRvbg== 75735
UkVQ 75736
KGZsb3c= 75737
LmNvb3Jk 75738
R2Fi 75739
IE1vcnBo 75740
IFpvZQ== 75741
IGhhcmJvdXI= 75742
Lm1lc3NhZ2luZw== 75743
X29wdGlvbmFs 75744
IEJhc2VBY3Rpdml0eQ== 75745
cmVzZW50ZXI= 75746
IG5ieXRlcw== 75747
IGNvdXJhZ2VvdXM= 75748
PSE= 75749
J0l0 75750
IGZvcnM= 75751
IGNvcnJpZG9ycw== 75752
IEJFRU4= 75753
IGZ1c2Vk 75754
PWltYWdl 75755
LkdyaWRWaWV3 75756
IHNlbWVu 75757
aWdyb3Vw 75758
dXB0aW1l 75759
IFhC 75760
5o6S5bqP 75761
IGludGVncmF0ZXM= 75762
X09D 75763
IGJhaWxvdXQ= 75764
IHRlc3Rl 75765
IG9jdXA= 75766
YXVsZWQ= 75767
X29kZA== 75768
cGdh 75769
IEFTVVM= 75770
IFRTUg== 75771
IG9jY3VwYW50cw== 75772
U2V0VGl0bGU= 75773
U2NoZWR1bGVycw== 75774
IGJla29tbWVu 75775
QnJpZ2h0 75776
IE1haW5Gb3Jt 75777
Xygn 75778
RnJvbUFycmF5 75779
IGluZGljYQ== 75780
SEFORA== 75781
T3JkZW4= 75782
IFRlbXBlcg== 75783
LnN0YXR1c1RleHQ= 75784
cG9saXRpY2Fs 75785
IFBlcmN5 75786
44CCCgoKCgoK 75787
LnNldFg= 75788
Z2V0TGlzdA== 75789
aG9sZXM= 75790
UGl4 75791
IG91dHNvdXJjaW5n 75792
IG1lc3NhZ2VJZA== 75793
IGdldFNlc3Npb24= 75794
IFZJUg== 75795
T2ZGaWxl 75796
IFNwYXRpYWw= 75797
LkZsb2F0RmllbGQ= 75798
KShfXw== 75799
IFN3aW1taW5n 75800
QUNMRQ== 75801
IHNlbnRpcg== 75802
IHBsdW5nZWQ= 75803
IGF1am91cmQ= 75804
Z3VuYWthbg== 75805
KHZvbHVtZQ== 75806
IGNyYXRlcg== 75807
Lnhscw== 75808
woDCmQ== 75809
UmVuZGVyV2luZG93 75810
LnVzZXJtb2RlbA== 75811
IGZ1bmN0b3I= 75812
RG9tYWlucw== 75813
aW50ZXJwcmU= 75814
IGFibm9ybWFsaXRpZXM= 75815
YXJnaW5n 75816
RGVtb2NyYXRz 75817
IHBhbG1z 75818
4qCA 75819
w7hk 75820
KkE= 75821
RnJvbURhdGU= 75822
fFs= 75823
IEFsdGVybmF0ZQ== 75824
IHB1ZG8= 75825
IGNvbmRlbnNlZA== 75826
KHBsYW4= 75827
ZGVsaXZlcg== 75828
IGJ1bGxldGlu 75829
J11dLA== 75830
IGNyw6llcg== 75831
LWlw 75832
V3M= 75833
IiIiLAo= 75834
IGlrZWE= 75835
IHZpc2l0ZQ== 75836
IG11bHRpcw== 75837
UmVzdWx0YWRv 75838
IFBob3RvZ3JhcGhlcg== 75839
Li4uJywK 75840
IG1pZ2xpb3Jp 75841
IFRocmVhZHM= 75842
Z2V0U3R5bGU= 75843
ZXJhw6fDo28= 75844
PFRTb3VyY2U= 75845
IEdpbmc= 75846
J10iLA== 75847
IHNpZ25hbGVk 75848
U3VwcHJlc3NMaW50 75849
IGR3b3Jk 75850
IEh1bnRpbmd0b24= 75851
IEFBUA== 75852
QU5HTEVT 75853
LmNyZWRlbnRpYWxz 75854
c3dhZ2dlcg== 75855
LWNvbnNvbGU= 75856
Ii0t 75857
LlRleHRJbnB1dA== 75858
IE5PUlRI 75859
IG5pZ2h0bHk= 75860
LkZPTlQ= 75861
IHF1b3RpZW50 75862
5Lmf 75863
IHNjaMO2bg== 75864
IFBsYW5uZXI= 75865
IHJlYWRsaW5l 75866
IGNvbmZyb250aW5n 75867
YH0= 75868
SXRlbUNvdW50 75869
CWFjdGl2ZQ== 75870
IHLDqXBvbmQ= 75871
ZWxtZXQ= 75872
IGdpbW0= 75873
LG5vbmF0b21pYw== 75874
IEFDVElWRQ== 75875
aGV1cmU= 75876
L1ByaXZhdGU= 75877
IG1lYw== 75878
LlNlY3JldA== 75879
IENJUw== 75880
xYJ1Zw== 75881
KHBlcmlvZA== 75882
IGxsZWdhcg== 75883
dXJpYQ== 75884
RGVzY3JpYmU= 75885
IHBhcmVqYQ== 75886
IFZlZA== 75887
LWVmZmVjdHM= 75888
IFBhcnNpbmc= 75889
LXJlc291cmNl 75890
IGFiYQ== 75891
ICosCg== 75892
IGFuYXRvbQ== 75893
ICgqKSg= 75894
LXJlYWw= 75895
IFZlbnR1cmVz 75896
IFNoaWVsZHM= 75897
IFVuaXZlcnNpdGllcw== 75898
UFJFU0VOVA== 75899
IFFMYXRpbg== 75900
xaU= 75901
IFdpbGV5 75902
QWFyb24= 75903
IHJhY2lhbGx5 75904
IE5hZHU= 75905
IGh0dHBSZXNwb25zZQ== 75906
w610aWNh 75907
IOuwqQ== 75908
IGdyw6F0aXM= 75909
5LuL 75910
b21hcA== 75911
IGFub24= 75912
CXBvcA== 75913
YXZhdGFycw== 75914
IHN1YnBhcmFncmFwaA== 75915
ZHpp 75916
UHJvamVjdGlsZQ== 75917
RFRW 75918
bGlzdGVuaW5n 75919
X3JlZ2VuZXJhdGlvbg== 75920
IFNoZWx0ZXI= 75921
PFZlcnRleA== 75922
L21k 75923
KGxl 75924
IHZhaw== 75925
c2VsZWN0ZWRJbmRleA== 75926
X10= 75927
IFN5bnRoZXRpYw== 75928
YXBwSWQ= 75929
IEZpcmVk 75930
IHBhbXBo 75931
X2xhdGVuY3k= 75932
aW5maWxl 75933
KGNyaXRlcmlh 75934
c2VyaWFsaXphdGlvbg== 75935
UkNU 75936
CWV2 75937
IFNDSA== 75938
IE9wdGljYWw= 75939
IHN0aXJyZWQ= 75940
IFBvdGlvbg== 75941
ZXRoaWNhbA== 75942
Ojp7Cg== 75943
IFBlbmd1aW5z 75944
UEhZ 75945
RGVjaXNpb24= 75946
a2FydA== 75947
IGV4cG9ydGVycw== 75948
IFBvbHllc3Rlcg== 75949
Y29udHJlcw== 75950
IExhd3Nvbg== 75951
IEVtcGxveWVy 75952
IHNhc3M= 75953
IGRvd250aW1l 75954
IGJyb2tlcmFnZQ== 75955
IFJvdGFyeQ== 75956
IFdhaGw= 75957
V0FSTg== 75958
IHNldEFjdGl2ZQ== 75959
dGVtcGw= 75960
Q2hlZXJz 75961
LXNoZWxs 75962
Rml0bmVzcw== 75963
IHF1aWw= 75964
IGNsZWFuZXJz 75965
IOeb 75966
IE1pbGFubw== 75967
LWFzc29jaWF0ZWQ= 75968
fX19LAo= 75969
UEZO 75970
IG9uUGFnZQ== 75971
X3N0cmVhbXM= 75972
IHNjdWxwdHVyZXM= 75973
IG5haWxlZA== 75974
PXNj 75975
6aaW6aG1 75976
0LjQvNCy 75977
Y29ubmV4aW9u 75978
Sk9C 75979
IEthcm1h 75980
IFN3aWZ0VUk= 75981
IERleg== 75982
L1VJ 75983
IOyZ 75984
Z2V0Q2xpZW50T3JpZ2luYWw= 75985
IHB1bmlzaGluZw== 75986
IG9kZW5zZQ== 75987
LHJpZ2h0 75988
ZW5lcmF0aXZl 75989
IFByb2JsZQ== 75990
IEFwcFN0YXRl 75991
IGRpc2Nsb3N1cmVz 75992
IENhbnRlcg== 75993
Y29tcG9zZXI= 75994
dXBhdGVu 75995
IHN1Y2Nlc3NvcnM= 75996
Ij4nCg== 75997
IHByZXNlcnZlcw== 75998
Lm9wZW5k 75999
X05vcm1hbA== 76000
L2hy 76001
UmFuZ2Vz 76002
LGxvbmc= 76003
CQkJCSAgICAgICAgICAg 76004
cHJvZHVjdG9z 76005
IGZseWVy 76006
IEdydXBv 76007
Tmlja25hbWU= 76008
SGllcg== 76009
IERFQQ== 76010
U3ByaXRlcw== 76011
CW1hc2s= 76012
X3Jlc2VydmVk 76013
LXNob3A= 76014
Lm5vdGlmaWNhdGlvbnM= 76015
IGRpdmlzaWJsZQ== 76016
aW9zaw== 76017
a2VyamE= 76018
aW5ndA== 76019
IEZpZnR5 76020
IGFjY291bnRhbnQ= 76021
IEV4cGxvcmF0aW9u 76022
X2Jyb2FkY2FzdA== 76023
IGV4dHJhb3JkaW5hcmlseQ== 76024
IGtvdA== 76025
IGNpcmN1bWZlcmVuY2U= 76026
cm91Y2g= 76027
W0Jvb2xlYW4= 76028
Y3Jhd2xlcg== 76029
L3JlbW92ZQ== 76030
YXJlbGxh 76031
IHNleGVz 76032
SGludHM= 76033
IGdhbWI= 76034
IGRhcmVk 76035
dGVzdGVk 76036
X0tFRVA= 76037
IGZpbHRyYXRpb24= 76038
aWNrZXk= 76039
IEluZmx1ZW5jZQ== 76040
IHNwZWNpZmljaXR5 76041
X0lEUw== 76042
IFJvZG5leQ== 76043
X0lSUUhhbmRsZXI= 76044
T25FcnJvcg== 76045
IHByZXZTdGF0ZQ== 76046
aWVnZWw= 76047
IExFU1M= 76048
IGF3YWtlRnJvbU5pYg== 76049
IExV 76050
dW1hYmx5 76051
b3J0YWxpdHk= 76052
IG1hbmRhdGVz 76053
CXZlcnNpb24= 76054
IHBhcmVudE5vZGU= 76055
IHBlc3Rz 76056
IGNhc2M= 76057
Y2VwdGFy 76058
IFdvb2R5 76059
ZXJlZQ== 76060
X3Bm 76061
LlBPUw== 76062
aXN0cmE= 76063
bGV3 76064
WWFuZw== 76065
IHN5c3RlbWQ= 76066
IHJvYW0= 76067
LkdyYXk= 76068
IGNvbmR1 76069
4oCUaW5jbHVkaW5n 76070
VmlvbGF0aW9u 76071
TWFob24= 76072
IE1VU0lD 76073
IFNpcmk= 76074
IEVudGVyZWQ= 76075
IGNlcnRhaW5z 76076
ZWxhaA== 76077
CU1haW4= 76078
LkRhdGVGaWVsZA== 76079
LkhlYWx0aA== 76080
IEthc2ljaA== 76081
IGNhbmluZQ== 76082
PXJvb3Q= 76083
dWRkbGU= 76084
XGNvbW1vbg== 76085
IFN1bHRhbg== 76086
ZmluYW5jaWFs 76087
IFFTcWw= 76088
IGFzY2VudA== 76089
IHBydWViYQ== 76090
emllaHVuZw== 76091
LmdldEVycm9y 76092
IEdsb3JpYQ== 76093
RWNobw== 76094
X0NIT0lDRVM= 76095
X2Vwcw== 76096
L3Byb3ZpZGVy 76097
UEhPTkU= 76098
5YWz6Zet 76099
IGNvbXByb21pc2luZw== 76100
X0FQUFJP 76101
UHJvY2Vzc0V2ZW50 76102
IGJ5dGVBcnJheQ== 76103
IENydWM= 76104
wqg= 76105
IGljaW5n 76106
IFBDTQ== 76107
dmVjdA== 76108
QW15 76109
IFZhY3V1bQ== 76110
aW5jaWRlbnQ= 76111
IHVzZXJu 76112
emJlaw== 76113
XSspLw== 76114
IH19Ij48 76115
IEdldERhdGE= 76116
Y250bA== 76117
IHNhZ3Q= 76118
X1BSSU1BUlk= 76119
IGxlcg== 76120
IEZVQ0s= 76121
IFN0YXJy 76122
SUg= 76123
w7ZycGVy 76124
eW1z 76125
XSldCg== 76126
L3Rvb2w= 76127
Y29tYmluYXRpb24= 76128
IHRhbXA= 76129
IEJlaXQ= 76130
IE5JR0hU 76131
IGFubsOpZQ== 76132
KGFt 76133
XFRyYWl0cw== 76134
Olwi 76135
IGNhcmdh 76136
LmlkZQ== 76137
IGRpa2tl 76138
Q29tcGV0 76139
IHNjb290ZXI= 76140
IHhQb3M= 76141
KGludGVycA== 76142
IGhhc2ls 76143
Y2xpZA== 76144
IGhldXJlcw== 76145
Z2xvbWVy 76146
c2hhcmVz 76147
77yMCgo= 76148
cG9uZGU= 76149
4bqjaQ== 76150
X2R1cGxpY2F0ZXM= 76151
c29uZ3M= 76152
fV07Cg== 76153
IFNuaXBlcg== 76154
IFRodXI= 76155
cm9wcA== 76156
IGdydWVz 76157
IG9yZXM= 76158
dXNoaW1h 76159
IHVzYWJpbGl0eQ== 76160
6ZKf 76161
L21lbWJlcg== 76162
b2xkZW1vcnQ= 76163
SXNBY3RpdmU= 76164
R2V0RW51bWVyYXRvcg== 76165
bXV4 76166
V0lORE9XUw== 76167
TmVnYXRpdmVCdXR0b24= 76168
4Liz 76169
LW1ha2Vycw== 76170
44Kk44Oz 76171
IEJlcm0= 76172
QnlFeGFtcGxl 76173
IFLDvGNr 76174
U2hvd3M= 76175
Z2hp 76176
IElocmVy 76177
IENydWQ= 76178
Y2hlZg== 76179
X2F1Yw== 76180
IGFww7Nz 76181
YW5rYW4= 76182
IEtERQ== 76183
SUxMUw== 76184
IGFuZ2xhaXM= 76185
LXJlZnJlc2g= 76186
CXJhbmdl 76187
eG1t 76188
KGVkZ2Vz 76189
IGFwcGVs 76190
Ijt9 76191
IGVkaQ== 76192
IHN3b2xsZW4= 76193
IGJ1dGNoZXI= 76194
aWNpZGVz 76195
aG91bmQ= 76196
IF4o 76197
IEV2YWx1 76198
IGtleWJvYXJkVHlwZQ== 76199
U1NJRA== 76200
cm9iYXQ= 76201
IG5paw== 76202
IHN0cmF3YmVycmllcw== 76203
XCJd 76204
bm9zaXM= 76205
TUVE 76206
54g= 76207
5LqU 76208
aW1heA== 76209
XEFubm90YXRpb24= 76210
IG51cnU= 76211
IE1pbmltYWw= 76212
IHdvcmRwcmVzcw== 76213
IGNvbGRlcg== 76214
CXBhcnNl 76215
L3N0cmV0Y2g= 76216
5omn6KGM 76217
cm9tb3NvbWU= 76218
RElN 76219
IHRlbnRhdGl2ZQ== 76220
Ok5TVVRG 76221
LGltZw== 76222
IE1BVEVSSUFM 76223
IEpldEJyYWlucw== 76224
TGVnZW5kYXJ5 76225
CXN0cm5jcHk= 76226
IGRlZnM= 76227
TnVtYmVyRm9ybWF0RXhjZXB0aW9u 76228
IGJ5dGVjb2Rl 76229
IHdpc3Nlbg== 76230
X01PUkU= 76231
oO2DnQ== 76232
IENvZmY= 76233
LkNvbmRpdGlvbg== 76234
IGTDqXBhcnQ= 76235
ZHNu 76236
IHBhcmFtZXRybw== 76237
XEw= 76238
Lm5hbm9UaW1l 76239
Qk9UVE9N 76240
LldoYXQ= 76241
64Q= 76242
IERpeA== 76243
X0RB 76244
KENvbnRhaW5lcg== 76245
YXlhcg== 76246
RmxleGlibGU= 76247
LlJheWNhc3Q= 76248
IEVkd2lu 76249
W3VybA== 76250
wpI= 76251
LnN0cm9rZVN0eWxl 76252
IFBvbHlub21pYWw= 76253
aWxpdGF0aW5n 76254
IFFWQm94TGF5b3V0 76255
KHJlcA== 76256
LnZu 76257
LWFzc2V0cw== 76258
Q0hBU0U= 76259
IEVzc2VudGlhbHM= 76260
anlsbGFuZA== 76261
IGF4cw== 76262
IFRyZW0= 76263
Lm1haW5sb29w 76264
IFdJTkRPV1M= 76265
LlJFUVVFU1Q= 76266
IHJlaW50 76267
IExpYnJl 76268
Y2hlb24= 76269
IGd1ZXJy 76270
CU5kckZjU2hvcnQ= 76271
LnNvZnRtYXg= 76272
IEFzdXM= 76273
LXNjb3Jl 76274
IEpPSE4= 76275
PlN0YXR1cw== 76276
PkVkaXQ= 76277
IENhbWU= 76278
IEFzaGU= 76279
X3VzaW5n 76280
IExvbmU= 76281
IGxlc2Vu 76282
IHJldmVyc2luZw== 76283
bmdyeA== 76284
LnNpZ25hdHVyZQ== 76285
LUFzc2Fk 76286
L25hdGl2ZQ== 76287
X3JhdGluZ3M= 76288
IG55YQ== 76289
IGFkaWRhcw== 76290
KG9wdGlvbmFs 76291
Il0o 76292
IHJlY3VycmVuY2U= 76293
IEJNUA== 76294
z4w= 76295
X2dw 76296
Ij5c 76297
X3dyb25n 76298
eXBz 76299
LlByb3h5 76300
X1VEUA== 76301
UXRDb3Jl 76302
TGlua2VkSW4= 76303
IGNhdmVybg== 76304
IHNww6ljaWFs 76305
X3dpcmU= 76306
IG5hbm9w 76307
LmJhbGw= 76308
IHJlZHVjZXJz 76309
IG1haWxlZA== 76310
ZG9uZw== 76311
IG9wcG9zZXM= 76312
IEhhbnNvbg== 76313
IFNhdHVyZGF5cw== 76314
YWNvbW1lbnQ= 76315
X01ldGFEYXRh 76316
IEdhbGFjdGlj 76317
KCIvIik= 76318
IENsZWFuZXI= 76319
X1RFUk0= 76320
IGNsYXJv 76321
Lk9VVA== 76322
5a6h 76323
IHNsaWs= 76324
IGplZG5haw== 76325
SGFuZGxlckNvbnRleHQ= 76326
IGlycmFkaQ== 76327
ICAgICAgICAgICAgICAgICAgICAgICAgIAo= 76328
LnRpZ2h0 76329
QnJlYWRjcnVtYg== 76330
ZnJleQ== 76331
IOqwneyytA== 76332
bGJyYWNl 76333
TEVHQUw= 76334
LWd1bg== 76335
IEJsb2dz 76336
IFNoaXJsZXk= 76337
IFB1bmU= 76338
dXJzaW9ucw== 76339
IHN1YnRyYWN0aW9u 76340
ICoqKgo= 76341
YXJtYWN5 76342
IHNhbXQ= 76343
PSIpLg== 76344
IHBlcm1pc3NpYmxl 76345
KHJk 76346
IFdBVEVS 76347
IHByb2Zlc2lvbmFs 76348
IGhhbmRib29r 76349
IG1vdXJuaW5n 76350
YXJlZmE= 76351
IGFzbg== 76352
aXNleA== 76353
IGNvbnRlbnU= 76354
IFVOQw== 76355
LmdldFByaWNl 76356
IFB1bXBraW4= 76357
LwoKCg== 76358
IGNvc2luZQ== 76359
IG5pZWQ= 76360
IEJyYWtl 76361
RGF0YVVSTA== 76362
IERhdGFHcmlkVmlld0NlbGxTdHlsZQ== 76363
IFJldHVybmVk 76364
ZXdvb2Q= 76365
aXF1w6k= 76366
IGJsZWFr 76367
IHdlYmhvb2s= 76368
LlRoZXk= 76369
YXJi 76370
TEFOR0FETQ== 76371
X29yZGVyZWQ= 76372
IHByYW5r 76373
Lk5ld1JlcXVlc3Q= 76374
IGxpdGVyYWxz 76375
J30+Cg== 76376
c2VyaWFsaXplZA== 76377
a3Rvcg== 76378
KHJ4 76379
IGdldFk= 76380
CVN0cmluZ0J1ZmZlcg== 76381
KHNsaWNl 76382
cmJyYWNl 76383
ZW1lbnRv 76384
IGxhbmM= 76385
RGVwbG95bWVudA== 76386
IGNvbmNlbnRyYXRpbmc= 76387
U2tldGNo 76388
IGJyaWdodGx5 76389
QmVnaW5uaW5n 76390
IERhaA== 76391
VGs= 76392
SW5zZW5zaXRpdmU= 76393
IHNhYmU= 76394
KE1vZHVsZQ== 76395
IGNlZGFy 76396
X2NvbnRpbnVl 76397
IHdpdGhPYmplY3Q= 76398
IGNvbHVtbmE= 76399
IENhbGRlcg== 76400
INC/0L7QvA== 76401
X3NvZnRj 76402
c2hhbGVk 76403
ZXJ0YXRpb24= 76404
CSAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 76405
OkAiIg== 76406
IGZhw6dvbg== 76407
dXN0dW0= 76408
c3Rr 76409
X0NSQw== 76410
b2R6aQ== 76411
IGFzY2VuZA== 76412
Zmdhbmc= 76413
IHByZWZhYg== 76414
IGZpbmRldA== 76415
Oicr 76416
5Y2V5L2N 76417
dW1ibGVkb3Jl 76418
LmludmFsaWRhdGU= 76419
IHRvaQ== 76420
YW5nZXBpY2tlcg== 76421
X0FJ 76422
aGls 76423
U2VhdA== 76424
IHBpc3Rvbg== 76425
Zmli 76426
X2JsdWVwcmludA== 76427
44K4 76428
X1JlY29yZA== 76429
cmV0cw== 76430
RnJhbg== 76431
IENhaXQ= 76432
IHBlbGlj 76433
IGRuYQ== 76434
IHVwZGF0ZVRpbWU= 76435
IC9eWw== 76436
IHJhbGxpZWQ= 76437
IEhpbWFs 76438
U1NJ 76439
X3BsYW5lcw== 76440
IE91dHN0YW5kaW5n 76441
QXBwbGljYXRpb25CdWlsZGVy 76442
c3R1ZA== 76443
X2xvY2F0b3I= 76444
IGFib2xpdGlvbg== 76445
ICgkKQ== 76446
amVybmU= 76447
IEFBQw== 76448
L3dpbmRvd3M= 76449
LUNhbA== 76450
X1NFQ09ORFM= 76451
ICcnfQo= 76452
w6FueQ== 76453
IHl1bW15 76454
5omL5py65Y+3 76455
IFZHQQ== 76456
aWxhdGU= 76457
IFN1cnZlaWxsYW5jZQ== 76458
CUd0aw== 76459
8J+Y 76460
IHNoaW1tZXI= 76461
YWx0ZXJuYXRl 76462
Rm9yU2VndWU= 76463
dWVzdHJh 76464
LWNvdmVy 76465
YXNs 76466
IEluc2V0cw== 76467
bGlqYWg= 76468
OlM= 76469
CWNhdGVnb3J5 76470
IGZq 76471
w61saWE= 76472
IE1BRA== 76473
QGpz 76474
5p8= 76475
IHBvb2xlZA== 76476
IHRyZWF0aWVz 76477
IEJpaw== 76478
IEhhemVs 76479
QWxsb2NhdGU= 76480
IGFpcnBsYW5lcw== 76481
IHNlcm1vbg== 76482
IFBvc2l0aW9ucw== 76483
IE1BSUw= 76484
U3RvcHBpbmc= 76485
YXZvcmVk 76486
KFRlbXA= 76487
IGNoZWF0cw== 76488
LnVzZXJJRA== 76489
IHB1dGE= 76490
LXl5eXk= 76491
VWlUaHJlYWQ= 76492
IG9mc3RyZWFt 76493
XFNlZWRlcg== 76494
IENvdHRhZ2U= 76495
IF4K 76496
IEFMVEVS 76497
IHF1YW50aWZ5 76498
cmVpYnVuZw== 76499
IG5lY2Vzc2l0aWVz 76500
LkxvY2FsRGF0ZQ== 76501
IOaXpQ== 76502
cGljdHVyZXM= 76503
IGNydWQ= 76504
5pyo 76505
IGRvd250dXJu 76506
YWN0b3Jpbmc= 76507
IERlcm0= 76508
IGVzdHJ1Y3Q= 76509
IE11c2lr 76510
IG1seA== 76511
Lm1ham9y 76512
Lkh0dHBTZXNzaW9u 76513
Pzw= 76514
eWVhaA== 76515
IG1vam8= 76516
IFVuaXR5RWRpdG9y 76517
IHJha2U= 76518
X3R3ZWV0 76519
IHJhZGlvQnV0dG9u 76520
IERvbWluaW9u 76521
YXNTdHJpbmc= 76522
b3p5 76523
IHZvZGth 76524
b2dsb2I= 76525
IEFsdW1uaQ== 76526
YmFsYW5jZXM= 76527
X21hbnVhbA== 76528
LmxvYWR0eHQ= 76529
X2ZyaWVuZHM= 76530
IFhtbERvY3VtZW50 76531
W2ZpcnN0 76532
S2V5Q29kZQ== 76533
IHBvZXRpYw== 76534
bWluYQ== 76535
IG9wY2lvbmVz 76536
5omT 76537
X3N1cHBsaWVy 76538
LkZyb21SZXN1bHQ= 76539
X2Rpc3RyaWN0 76540
IEdhbGE= 76541
LnF0 76542
IGNvbnRyYWN0dWFs 76543
YWNvbnM= 76544
LWFuY2hvcg== 76545
IHl1cA== 76546
IHVuYW5zd2VyZWQ= 76547
IG1heGxlbg== 76548
RXJyTXNn 76549
LXNu 76550
IGh5cG5vdA== 76551
X1dN 76552
KCldWw== 76553
IGRlc2VydmluZw== 76554
b3dtZW50 76555
KFJhbmRvbQ== 76556
IHZldG9y 76557
IElTVA== 76558
0LDQvdC0 76559
LWxhbmc= 76560
IHNpaw== 76561
Y3JlYXNpbmc= 76562
IHBvcnRhbHM= 76563
IEJ1bGxkb2dz 76564
cHJvbW8= 76565
IHByb3Zva2Vk 76566
XX07Cg== 76567
IEliaWQ= 76568
ZXJnbGFzcw== 76569
X1dJRkk= 76570
YXBwcm9wcmk= 76571
IHJlZGVzaWduZWQ= 76572
IC8vLS0tLS0tLS0tLS0tLS0tLQ== 76573
emlr 76574
JG8= 76575
dWx0b24= 76576
IFJlbGF0aXZlcw== 76577
IG1ldHJvcw== 76578
IG1lbnRvcmluZw== 76579
YXTEgw== 76580
dXNobWFu 76581
IGluaGVyaXRz 76582
IFJ0 76583
L3ByZWZlcmVuY2Vz 76584
aW1lZA== 76585
Sk9JTg== 76586
KGludGVyZmFjZQ== 76587
IGFkZXB0 76588
IE9mZmVuc2l2ZQ== 76589
IEFHUkU= 76590
b25pYW4= 76591
LnBhcnNlcnM= 76592
IHBhc3NwaHJhc2U= 76593
IHVuc2VyaWFsaXpl 76594
VmlzaXRlZA== 76595
IGdldFByb3BlcnR5 76596
IG5vYw== 76597
ZWRhZA== 76598
ICMtfQoK 76599
dmlkYQ== 76600
c29sdmVy 76601
IE1vcmFsZXM= 76602
IGt2aW5uZQ== 76603
IEFjY2lkZW50 76604
IHZldXQ= 76605
IG1pc2d1aWRlZA== 76606
IFJldmVsYXRpb24= 76607
IHJhcGlkZQ== 76608
cHVuaw== 76609
Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 76610
T2JqZWN0SWQ= 76611
YWJpbmV0 76612
ZXh0cmFjb21tZW50 76613
IGJ1bm55 76614
IERlZmVycmVk 76615
dXR0YQ== 76616
dWFl 76617
YnVzdGVycw== 76618
IFNvaWw= 76619
R1NU 76620
LkN1cnJlbnRSb3c= 76621
44GR 76622
IGdyYXR1aXRz 76623
IGNydWlzZXI= 76624
15E= 76625
IFRlbm4= 76626
anNj 76627
IO2VhA== 76628
ZGlzcG9zZWQ= 76629
QUJPVVQ= 76630
fQ0NCg== 76631
ZXhwaXJlZA== 76632
IFhtbE5vZGU= 76633
IFRhdHRvbw== 76634
Vm90ZXM= 76635
Rm9sZA== 76636
RWxpemFiZXRo 76637
X0ZJTEVOTw== 76638
IGNvbmNv 76639
IEdkaw== 76640
b3BpZXM= 76641
fX19 76642
UVVPVEU= 76643
LUlJ 76644
c3BhbQ== 76645
LWxp 76646
IGNhcnRh 76647
LmxheW91dHM= 76648
IGJlc3Bva2U= 76649
IGFtYXRldXJz 76650
IGNvdWxldXI= 76651
aXRhbWlu 76652
IGlycmVzcGVjdGl2ZQ== 76653
IGJsYWNrQ29sb3I= 76654
LnlhaG9v 76655
IHdlYXJ5 76656
IHN3ZWV0cw== 76657
PyI7Cg== 76658
PVwiJQ== 76659
X3dvcmtzcGFjZQ== 76660
IERpYW1ldGVy 76661
IGFtZA== 76662
IE5ldWU= 76663
IGRiTmFtZQ== 76664
SmVyZW15 76665
bG9nZmlsZQ== 76666
YXRyaWI= 76667
IEh0dHBTZXNzaW9u 76668
CUNyZWF0ZQ== 76669
aWRkeQ== 76670
LlBBUkFN 76671
IGZpYW4= 76672
IHN6Y3o= 76673
IHFyZWFs 76674
X0VTQ0FQRQ== 76675
dXNhaGFhbg== 76676
LmRpZ2VzdA== 76677
IGdldFBhcmVudA== 76678
LkRyb3BEb3duTGlzdA== 76679
IHRow6k= 76680
IG1vbnN0cm91cw== 76681
IGJlcmhhc2ls 76682
IiIiDQoNCg== 76683
U3VwcG9ydGVkQ29udGVudA== 76684
IEdhdGhlcmluZw== 76685
aW5jeQ== 76686
LktleUNvZGU= 76687
IGZldHVz 76688
LmNlbnQ= 76689
IGJlc29uZGVycw== 76690
bmlsYWk= 76691
TFRSQg== 76692
IGhpbmdl 76693
UFJPUA== 76694
LmZvdW5kYXRpb24= 76695
bnVtZXI= 76696
LXJhbmtlZA== 76697
6I0= 76698
IHBhaW5mdWxseQ== 76699
ICg7Oyk= 76700
Zm9ybWU= 76701
TGFkeQ== 76702
L2FwcGxl 76703
IENvbnN0aXQ= 76704
IHN0b2NraW5ncw== 76705
5rS7 76706
IG1lbnRvcnM= 76707
PkNyZWF0ZQ== 76708
IEludGVybmFsRW51bWVyYXRvcg== 76709
IHRlbGV2aXNlZA== 76710
VG9rZW5UeXBl 76711
IGJyaWI= 76712
Y3JlYXRlVmlldw== 76713
L0RURA== 76714
R2l0SHVi 76715
KGJpZw== 76716
IG3DoXhpbW8= 76717
5b6u6L2v6ZuF6buR 76718
LmNm 76719
IMKgIMKgIMKgIMKg 76720
PHR5cGVvZg== 76721
IHByb2dyZXNzaW5n 76722
LnNldFdpZHRo 76723
KHR2 76724
IHVuZmFpcmx5 76725
IEFuaXRh 76726
YXJ5YXdhbg== 76727
RGFs 76728
VVJZ 76729
b2dlbmVpdHk= 76730
ZWZh 76731
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 76732
IGRlamE= 76733
T1NF 76734
cmFpbA== 76735
cm9vZg== 76736
X3F1b3Rlcw== 76737
PGo= 76738
44Ko 76739
KHNldHRpbmc= 76740
bGV2ZWxuYW1l 76741
X2hhbmRsaW5n 76742
w6lyYQ== 76743
JGo= 76744
IGRhcmxpbmc= 76745
LlBhdGhWYXJpYWJsZQ== 76746
W3NvdXJjZQ== 76747
TWV0aG9kTmFtZQ== 76748
IE91dGxldA== 76749
5pKt 76750
IENvY29h 76751
VWJ1bnR1 76752
IG1vb2ll 76753
IGZsb3JpZGE= 76754
IHJldGhpbms= 76755
IGdldFg= 76756
Z2V0RWxlbWVudA== 76757
IHJhZGl4 76758
IEdhbWVy 76759
ZGVhbGxvYw== 76760
bGVmdEpvaW4= 76761
X1NZTg== 76762
R3JpZExheW91dA== 76763
Imdv 76764
KGVhY2g= 76765
CXNjZW5l 76766
IFB5RXJy 76767
SG93YXJk 76768
LlNpZ25hbA== 76769
IFRFTQ== 76770
IOen 76771
VkVOVE9SWQ== 76772
IHNpbXVs 76773
IDw8LQ== 76774
IHR1cmJpbmVz 76775
IHN1cnRvdXQ= 76776
YWx0bw== 76777
IHVuYXJ5 76778
YA0K 76779
IFNjcmk= 76780
IE1vbms= 76781
IHVuZm9sZGVk 76782
Q29tcG9zaXRpb24= 76783
UFBFUg== 76784
IHNpZGluZw== 76785
Jyx7Jw== 76786
IHRyZWZm 76787
X1VOSUNPREU= 76788
IGRlcmVjaG8= 76789
IHBvbGFyaXR5 76790
IG9yYw== 76791
PERvY3VtZW50 76792
KHRvZGF5 76793
LikKCgoK 76794
IHNlZW1pbmc= 76795
XFY= 76796
PklE 76797
IGZpYm9uYWNjaQ== 76798
KG1hdGVyaWFs 76799
RkxBU0g= 76800
ZGlyZWN0b3JpZXM= 76801
ZXN0ZXJz 76802
VEVDVElPTg== 76803
d3JhcHBlZA== 76804
LXNlbGVjdGlvbg== 76805
LXJlbGF0aXZl 76806
KGNocg== 76807
IHBvcnRmb2xpb3M= 76808
IHNob3dEaWFsb2c= 76809
aW5nbGV0b24= 76810
IFRJQ0s= 76811
IEludmVzdG9y 76812
IGJyYXY= 76813
IFNWTg== 76814
IGhhdGVmdWw= 76815
cmlwcw== 76816
ZXhwaXJ5 76817
X2NvaW4= 76818
PgoKCgoK 76819
IG1hcmdpbmFsaXplZA== 76820
IGV4Y2VlZGluZ2x5 76821
bmF2YmFyU3VwcG9ydGVkQ29udGVudA== 76822
KGV4dGVuc2lvbg== 76823
IGFkdmFudGFnZW91cw== 76824
Lk1pY3Jvc29mdA== 76825
IGVuc3VpdGU= 76826
LXZpb2w= 76827
X2R1ZQ== 76828
S0g= 76829
IFJvbWFudGlj 76830
aW5hbmQ= 76831
ZWNp 76832
cmVwb3J0ZWQ= 76833
IENvcnB1cw== 76834
IHNwYW5raW5n 76835
IENyb3NieQ== 76836
LkZvdW5kYXRpb24= 76837
XF8= 76838
IGFubm9uY2Vz 76839
QXR0YWNobWVudHM= 76840
4Liy4Lij 76841
IFdheA== 76842
77yB77yBCgo= 76843
IHNhaWxlZA== 76844
LkV1bGVy 76845
CXNjcm9sbA== 76846
IHBlYXNhbnRz 76847
IEJ1aWxkZXJz 76848
LkdlbmVyYWw= 76849
QVJFQQ== 76850
IG1lc3Npbmc= 76851
dmVybg== 76852
IGRpYXBlcg== 76853
IG9jY3VwaWVz 76854
CWxvZ2lu 76855
LkxPQw== 76856
aWdhbnM= 76857
77yB4oCd 76858
X2Zvb3Q= 76859
X3RhdQ== 76860
LXBhY2thZ2Vz 76861
cmVjdXI= 76862
QWx0ZXJuYXRpdmU= 76863
77yB44CN 76864
YXJvbw== 76865
IHRydXN0ZWU= 76866
LDpd 76867
5pa55byP 76868
Pz4+ 76869
Lk1pbnV0ZQ== 76870
IGFsY2Fu 76871
IENvbmNlcHRz 76872
Y2hpbGROb2Rlcw== 76873
Q291cnQ= 76874
IGNlbGxhcg== 76875
bGVr 76876
YWtpcw== 76877
QnViYmxl 76878
IG9iamVjdGVk 76879
IO+7vw== 76880
Ol06Cg== 76881
LnBhcnNlRmxvYXQ= 76882
IHNwYXJrcw== 76883
LWZpbmQ= 76884
dmFyaWF0aW9u 76885
SGFjaw== 76886
RmFucw== 76887
X3BhcnNlZA== 76888
RW50aXR5VHlwZQ== 76889
YXVjZQ== 76890
X3RyZWVz 76891
IEVnZ3M= 76892
VUlCYXJCdXR0b25JdGVt 76893
X3RheG9ub215 76894
IFNIT1A= 76895
VHdlbnR5 76896
X2NoZWNrcw== 76897
IExY 76898
dXRzY2hlaW4= 76899
KHBsYXRmb3Jt 76900
IGF1dG9wc3k= 76901
UmVxdWlyZW1lbnQ= 76902
IFJFQ1Q= 76903
dG9Db250YWlu 76904
JywnJQ== 76905
L2VkaXRvcg== 76906
IHFi 76907
IEVFRw== 76908
aHRh 76909
X1RJTEU= 76910
LXN1bQ== 76911
IEFsYnVxdWVycXVl 76912
IHNob3J0Y29kZQ== 76913
IHNpbnVz 76914
IGRlc2tz 76915
IHBvb3A= 76916
Lm9wZW5zb3VyY2U= 76917
IENvbGxhcHNl 76918
LmRlcg== 76919
IGhhd2s= 76920
IFZhbmd1YXJk 76921
IE1hcnJpb3R0 76922
X1RhcmdldA== 76923
IEJhbmFuYQ== 76924
X2F0dGVudGlvbg== 76925
IEFyaWVs 76926
X3Rlbg== 76927
IGJha2Vy 76928
4oCUaGU= 76929
xIXFvA== 76930
dmVsb3BtZW50 76931
RWxm 76932
X2djaGFuZGxl 76933
UmVwdWJsaWNhbnM= 76934
IGl0ZW1CdWlsZGVy 76935
V29u 76936
X2FjY3Vt 76937
IG5ld1Bhc3N3b3Jk 76938
IGRldm9pZA== 76939
IE1hcmt1cw== 76940
ZGFlbW9u 76941
Lkh0dHBDb250ZXh0 76942
S3Jpc3Q= 76943
IGFhbGJvcmc= 76944
X3RyaWFscw== 76945
KGFzc2VydA== 76946
44Gj44Gm 76947
YmVsdA== 76948
IG1pbGRseQ== 76949
ZXJ2b2ly 76950
IGRlc2NlbmRhbnQ= 76951
IEdpb3Zhbm5p 76952
IGRlY2x0eXBl 76953
LVNoaXJ0 76954
IGFwcm8= 76955
QXBwbGllZA== 76956
LmdldFBhcmFt 76957
aG9m 76958
dXJhcg== 76959
IE9CUw== 76960
X3Nlcg== 76961
KHNlY3JldA== 76962
W2xheWVy 76963
IHVzZWZ1bG5lc3M= 76964
IEtvdQ== 76965
X3N1Ym1pc3Npb24= 76966
X0hPUklaT05UQUw= 76967
LHRtcA== 76968
Ly4K 76969
IGxlc3Nlbg== 76970
X3dj 76971
X0ZJTkFM 76972
0L3QvtC/ 76973
LnRvZG9z 76974
LlhQYXRo 76975
IElEYXRh 76976
IGRvb3JzdGVw 76977
IGNvbXBvc2luZw== 76978
IGh1dA== 76979
IFZMQU4= 76980
IG91dGY= 76981
6K+l 76982
KGJldGE= 76983
KioqLwoK 76984
IEluZG8= 76985
IGtsYQ== 76986
X2NvbmZpZ3VyZQ== 76987
Lk1hcms= 76988
b3NlY29uZHM= 76989
KFZlcnRleA== 76990
b3JnYW5pc21z 76991
IGZmbQ== 76992
IGRlbW9saXNoZWQ= 76993
ICItLS0= 76994
bGVzaQ== 76995
IFNpZG5leQ== 76996
LmdldEluZGV4 76997
Lk1vbmFk 76998
U2VsZWN0ZWRJdGVt 76999
IE5hdlBhcmFtcw== 77000
YXpvbGU= 77001
QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo= 77002
X3NlbnRlbmNlcw== 77003
IGluY2xpbmF0aW9u 77004
IEZhdGhlcnM= 77005
YWNjb3VudElk 77006
aGFyaQ== 77007
KT4K 77008
L3Jhdw== 77009
ICcnKTsKCg== 77010
K2w= 77011
KGNk 77012
IHVuemlw 77013
IGdsYW1vcm91cw== 77014
IyIs 77015
IG5hdw== 77016
IG1pbmli 77017
IEJyYW4= 77018
TmFjaA== 77019
X3R3ZWV0cw== 77020
IENDUA== 77021
JSI+PA== 77022
IFN0ZXBoZW5z 77023
bWFzxLE= 77024
J2Vz 77025
IHJlcGFy 77026
X2RvY3VtZW50cw== 77027
LmNsb3NlZA== 77028
LXJpbmc= 77029
L2NhdGVnb3JpZXM= 77030
IERlZXBDb3B5 77031
U1VQ 77032
Lm5ld2F4aXM= 77033
IGdkeQ== 77034
aG9l 77035
IFJlZWY= 77036
IHBvbGl0aWM= 77037
IFJlcXVpcmVtZW50 77038
IHNoZWRz 77039
c2VhbGVk 77040
IHBhdGhvbG9neQ== 77041
Ii8+PA== 77042
bW9kbw== 77043
IHN0ZW1taW5n 77044
IHRhYm9v 77045
IFNhdmlvcg== 77046
IH0NCg0KDQoNCg== 77047
LmN2 77048
IGpvdWV1cg== 77049
IENvcm53YWxs 77050
IFJlY2VwdGlvbg== 77051
IGlsbHVtaW5hdGlvbg== 77052
IGdkYg== 77053
VkVD 77054
b2R1 77055
Q29udGVudEFsaWdubWVudA== 77056
c3RhbnRpYWw= 77057
YmFzZWxpbmU= 77058
X2J1c3k= 77059
LwoKCgo= 77060
IHBsYXllcklk 77061
5qM= 77062
X3BldA== 77063
IE1pcmFjbGU= 77064
dXJlbnQ= 77065
IE1lcmxpbg== 77066
dWJlbg== 77067
IHNldENvbG9y 77068
IGRhcmtlc3Q= 77069
c3Rlcnk= 77070
IGNhcmlj 77071
IHJldGFyZA== 77072
IEhvdXNlaG9sZA== 77073
IGphbA== 77074
IHlw 77075
IiwiIik7Cg== 77076
IEFjZXI= 77077
W1c= 77078
b2xraWVu 77079
YXlv 77080
UHJpdmF0ZUtleQ== 77081
IFNUQVRT 77082
INC90YPQtg== 77083
OicuJA== 77084
IHRoYW5rZnVsbHk= 77085
IGRpc3RydXN0 77086
Z2V0RGVmYXVsdA== 77087
L2ZhY2Vib29r 77088
IENvbnJhZA== 77089
IHV0aWxpemFuZG8= 77090
IEthZw== 77091
L25hbWU= 77092
IGJhbWI= 77093
LkZyb21TZWNvbmRz 77094
IG11dGls 77095
IExhZ29z 77096
IEJsZXNzZWQ= 77097
aWxsZWdhbA== 77098
aWVp 77099
X1RQ 77100
IG1hdGxhYg== 77101
IGN5Y2xpYw== 77102
IHdpdGhoZWxk 77103
IGhvcnJpYmx5 77104
LWhvdXJz 77105
LUhlYWRlcnM= 77106
IG92ZXJsYXBz 77107
IGN1YXRybw== 77108
IGVxdWl0YWJsZQ== 77109
IGNvbG9ybWFw 77110
IHNoaW4= 77111
IFN1aXRlcw== 77112
X2x1YQ== 77113
KHZv 77114
X1JFU1VMVFM= 77115
IFZpa3Rvcg== 77116
RG93bmxvYWRpbmc= 77117
bm9jaA== 77118
TW9vbg== 77119
IGRlY2lkZWRseQ== 77120
44GU44GW 77121
X1JQQw== 77122
SW50ZXJwb2xhdG9y 77123
IHZhbnM= 77124
e1Q= 77125
X3NwYXdu 77126
IEV4eG9u 77127
X0NhbGw= 77128
IENsYXNzcm9vbQ== 77129
IHNlcm90b25pbg== 77130
IERpcGxvbWE= 77131
YmVkdGxz 77132
IFByb3RvdHlwZQ== 77133
LmV4ZWN1dGlvbg== 77134
IGRhdGluZ3NpZGU= 77135
IEdva3U= 77136
X3Jvb21z 77137
4oCZYW0= 77138
Z3JhZg== 77139
YWNlb3Vz 77140
IGFjY29tbW9kYXRpbmc= 77141
fSwn 77142
LmRpbWVuc2lvbg== 77143
ZXJyb3JNc2c= 77144
CW1lc2g= 77145
RmlsbGVk 77146
LnByZWZlcmVuY2U= 77147
IHNtYXJ0eQ== 77148
X2NvdXBvbg== 77149
IMO2dmVy 77150
IGNvbmNlaXZl 77151
b2Rvbg== 77152
ZGljZQ== 77153
VG9EYXRl 77154
YWRhbWVudGU= 77155
LW1hc2s= 77156
IGVzY2FsYXRpbmc= 77157
4oCmKQoK 77158
SW5SYW5nZQ== 77159
X0Vt 77160
IHV0aWxpemE= 77161
IGxldnk= 77162
PCFb 77163
IEplbm5lcg== 77164
IFJFU09VUkNF 77165
X1NUQVJURUQ= 77166
IHZvbGxleWJhbGw= 77167
IG1nYQ== 77168
IFJvc3Np 77169
Q2hhbmNl 77170
IEVuZGVk 77171
LnVudGls 77172
IGtub2Nrb3V0 77173
X2V4ZQ== 77174
IFByZXNjcmlwdGlvbg== 77175
IENPVU5UWQ== 77176
Lmhy 77177
aWVyc2hpcA== 77178
RVJWRQ== 77179
6ak= 77180
44Gn44Gv 77181
IHBlcsOt 77182
IGltZ1VybA== 77183
ZWN4 77184
IFd5bg== 77185
CVJldHVybnM= 77186
X2V5ZQ== 77187
IEFnaW5n 77188
cXVldWVz 77189
IOWIneWni+WMlg== 77190
LlNlcmlhbGl6ZWROYW1l 77191
LmhvdXJz 77192
IGlzZQ== 77193
LkFjdG9y 77194
5p2h5Lu2 77195
YXBwbA== 77196
VGFu 77197
L2NhdGFsb2c= 77198
L1Jlc291cmNlcw== 77199
ZWxhbg== 77200
KCd7ew== 77201
IGluc24= 77202
IG5vZGVOYW1l 77203
IGNvb2tib29r 77204
JywnPScsJw== 77205
Uk9NRQ== 77206
LnRlbXBsYXRlcw== 77207
ZWN1cmU= 77208
LWtleXM= 77209
IGdsVW5pZm9ybQ== 77210
IGdlw6c= 77211
IFJlY292ZXI= 77212
SURY 77213
IEtyaXN0ZW4= 77214
IHBvbnRvcw== 77215
YD0nJA== 77216
YXJnZW50 77217
IGFycmFuZ2luZw== 77218
6KiY5LqL 77219
IGVybGU= 77220
ZW5lZG9y 77221
KCkpKTs= 77222
w6Zra2U= 77223
IEdpbGxlcw== 77224
In0+Cg== 77225
Lm1vdmllcw== 77226
LXNlbGVjdG9y 77227
LmxlYXJu 77228
IHBvdGVuY3k= 77229
IGZpbm8= 77230
CWJn 77231
IGxlaGV0 77232
IGzDtg== 77233
IGVybQ== 77234
IGFzYmVzdG9z 77235
IGRlc3Rl 77236
IGJsb2NrYWRl 77237
IFJPVU5E 77238
IGxuYW1l 77239
IFNlcGFyYXRl 77240
w6RuZ2U= 77241
IGZ1eno= 77242
CVVO 77243
X25vbWU= 77244
X2xpbmtlZA== 77245
IFNoYXJlUG9pbnQ= 77246
aGF1c2Vu 77247
IGxvYWY= 77248
LWVjb25vbWlj 77249
IGRpZEZpbmlzaA== 77250
eWVu 77251
IGJsYXN0aW5n 77252
IFdlaXJk 77253
SUNMRVM= 77254
IEdGWA== 77255
IHN1ZmZpY2U= 77256
ZWJpbg== 77257
IGFwcHJvdmluZw== 77258
IFJleWVz 77259
IFJUQUw= 77260
aWdsaQ== 77261
X3Rvaw== 77262
b3Jkb3Zh 77263
Q2FybA== 77264
IFBsYXlz 77265
bG9zc2Vu 77266
cGFpcmVk 77267
QUdNQQ== 77268
d2nEhXo= 77269
bGlua2VkaW4= 77270
IGVnYWw= 77271
KHByZWRpY2F0ZQ== 77272
IFJFU1BPTlNF 77273
IG1pblg= 77274
IGNoYW5jZWxsb3I= 77275
IFJFQ0VJVkVS 77276
IGFzY2VydGFpbg== 77277
IHplcg== 77278
IFdvcmtzaGVldHM= 77279
Tks= 77280
IHZvd2Vs 77281
dmFudA== 77282
VVBT 77283
4oCcLg== 77284
IEhheWRlbg== 77285
IFNwYXJ0YW4= 77286
cmlnaHRz 77287
LmdldElu 77288
IGlubGFuZA== 77289
IE5pbGU= 77290
IFRyYW5zbGF0b3I= 77291
IHJlY3RhbmdsZXM= 77292
QnV0dG9uVHlwZQ== 77293
IFNvbGlj 77294
IHJhZ2F6emE= 77295
L3RhZw== 77296
IGlycmVzaXN0 77297
I0VuZA== 77298
KioqKioqKg0K 77299
IHJlc3RyYWluZWQ= 77300
IGNoaXJvcHI= 77301
L1No 77302
LWZsaWdodA== 77303
Y29udmVydGVk 77304
IHNraXJ0cw== 77305
KGNoYXJz 77306
JHZpZXc= 77307
IGlucHV0RmlsZQ== 77308
Z21haWw= 77309
X0RJQUc= 77310
IG51bWVs 77311
IEdpbmE= 77312
ZWxsdW5nZW4= 77313
IHRheGE= 77314
IGRyaXBwaW5n 77315
PSIiLz4K 77316
IGJvcmRlcmVk 77317
IHRvdWdobmVzcw== 77318
bGVuZXNz 77319
IEJpZWJlcg== 77320
X1dBS0U= 77321
KGV0 77322
IHNhbnTDqQ== 77323
IFRFWA== 77324
X0RJU0NPTk5FQ1Q= 77325
IHBpZW4= 77326
IEZvbnRTdHlsZQ== 77327
X1VM 77328
LXRvdGFs 77329
d29sZg== 77330
IE1hcml0aW1l 77331
IE9QVElPTkFM 77332
LXJlc3Q= 77333
IG1lbWJ1YXQ= 77334
IEJTT04= 77335
X3NpbWlsYXJpdHk= 77336
Lm92ZXJsYXk= 77337
IHBhbGF0ZQ== 77338
IEJyaWRnZXM= 77339
QW5kUGFzc3dvcmQ= 77340
IENoYXZleg== 77341
aGV0dG8= 77342
Lm9mZnNldEhlaWdodA== 77343
IHVuZGVzaXJhYmxl 77344
IGFwbGlr 77345
IC8+XA== 77346
LHRv 77347
IHJlbW92ZXI= 77348
IE1vZGVsaW5n 77349
IHB1cmNoYXNlcg== 77350
IENob29zaW5n 77351
b3BsZWZ0 77352
IG11dGFibGVMaXN0T2Y= 77353
IFNpc3RlbWE= 77354
IElQTA== 77355
aWNrZXJWaWV3 77356
SGFzQ29sdW1uVHlwZQ== 77357
IHNvYmll 77358
dWJlcm4= 77359
IGFsdW5v 77360
IGltYWdpbmF0aXZl 77361
IEludGVyZXN0ZWQ= 77362
KCl9PC8= 77363
IGRpdmVyc2lvbg== 77364
X3Rvb2x0aXA= 77365
LlNhbXBsZQ== 77366
IEZ1dHVyZXM= 77367
Y29udGVuaWRv 77368
IEVJTlZBTA== 77369
KGVuY29kZWQ= 77370
IFNoYXVu 77371
CXBheWxvYWQ= 77372
ZGVr 77373
PllvdXI= 77374
SXNv 77375
VHJhdmVyc2Fs 77376
aWNpZQ== 77377
LmNyb3A= 77378
IEpC 77379
SU5HRVI= 77380
IGV4ZW1wbGFyeQ== 77381
X3JlbHU= 77382
YW5uaXM= 77383
0LXQt9GD0LvRjNGC0LDRgg== 77384
Y2x1YnM= 77385
4oaR 77386
IHNjcmFtYmxl 77387
IFVuYmxvY2s= 77388
IGRvcnM= 77389
IHNoYWNr 77390
IG1pbmltaXppbmc= 77391
IFBhc3Npbmc= 77392
YWRkRWxlbWVudA== 77393
4bud 77394
IHJvb2Zz 77395
IGpjbGFzcw== 77396
Y29yZG92YQ== 77397
UG9zWQ== 77398
KENhbnZhcw== 77399
KGZpbg== 77400
LWxvc3M= 77401
LmJ0bkNsb3Nl 77402
ZG9jdW1lbnRhdGlvbg== 77403
IFJK 77404
YW1vbmc= 77405
TW9z 77406
bGluZ2Vu 77407
IEFndQ== 77408
b2x5bm9taWFs 77409
XTw9 77410
IGRpZmZpY2lsZQ== 77411
IFdpbm5lcnM= 77412
5bGV 77413
U3RyYQ== 77414
IGNvbmdyZWc= 77415
IEVuYWJsZXM= 77416
IFN5bXB0b21z 77417
X3Nn 77418
IFJpZGluZw== 77419
X2hlYWRz 77420
IENvc21ldGlj 77421
w650 77422
LlNpbmdsZXRvbg== 77423
IE5pY2FyYWd1YQ== 77424
IAoKCgoK 77425
IG3DrQ== 77426
J30sDQo= 77427
IEJvc25pYQ== 77428
Plg= 77429
Ly8qWw== 77430
IHBpbGVk 77431
Y2FzdGluZw== 77432
IGdyw6JjZQ== 77433
IEhlbHNpbmtp 77434
R3Jv 77435
I2Fm 77436
7Iud 77437
IHNvdWhh 77438
IEluZGll 77439
X25lYXI= 77440
IGltbW9iaWw= 77441
LkV4Y2Vs 77442
IHJhZGlhbnQ= 77443
X01C 77444
IEtldG8= 77445
dmVudGFyaW8= 77446
X2FnZW50cw== 77447
VGFibGVWaWV3Q2VsbA== 77448
IFRoZW9kb3Jl 77449
PT09PT09PT0K 77450
LGxpc3Q= 77451
KHNp 77452
aWNpcGF0aW9u 77453
QVJUSA== 77454
c2V0RGlzcGxheQ== 77455
LkZ1dHVyZQ== 77456
IFNUQU5EQVJE 77457
IE9JRA== 77458
IGZyb3duZWQ= 77459
IE1hcmlseW4= 77460
b2xhcmU= 77461
UHU= 77462
IHPDqWN1cml0w6k= 77463
UmVkdXg= 77464
U0NP 77465
CQkJCQkgICAgICA= 77466
cml2 77467
cGVydA== 77468
IHNvZnRtYXg= 77469
IHNlbmF0ZQ== 77470
PWVtYWls 77471
IGVzdGltYXRpbmc= 77472
CXRk 77473
RnVjaw== 77474
IFdhdGVybG9v 77475
IG1leGljbw== 77476
TmV3dG9u 77477
U2Fi 77478
LOKApgoK 77479
IGNlbGVzdGlhbA== 77480
IFFOYW1l 77481
IGdldEFwcA== 77482
Tmll 77483
X3BjaQ== 77484
IFFQb2ludEY= 77485
X2xpc3Rh 77486
Lk5WYXJDaGFy 77487
IENvYw== 77488
S2Fy 77489
IGJ1c3RlZA== 77490
aXphdGlvbmFs 77491
b3VyZA== 77492
X2Nvbm5lY3Rvcg== 77493
IFNla3M= 77494
0L3Rg9GO 77495
0II= 77496
L0xpc3Q= 77497
L2lj 77498
XEZyYW1ld29ya0J1bmRsZQ== 77499
dXh0 77500
IGhlYWRwaG9uZQ== 77501
RVhURVJO 77502
LXJlc2V0 77503
IEdlaWxl 77504
IHRyaWFuZw== 77505
IEFOTg== 77506
IHTDrQ== 77507
IFNQQQ== 77508
IE1hY2Vkb25pYQ== 77509
IGNyaWFy 77510
IGNsaW1icw== 77511
IFNPTg== 77512
IENyaXRpY3M= 77513
IGTDsw== 77514
X1NQTElU 77515
IEJvdW5kYXJ5 77516
X0luc2VydA== 77517
Q29sZA== 77518
LmNyZWF0ZUNlbGw= 77519
X3NhaWRh 77520
LkJMVUU= 77521
QmlnRGVjaW1hbA== 77522
KEJ5dGVz 77523
CVN0YXRl 77524
LS0tQA== 77525
Vmlld1NldA== 77526
YWthaA== 77527
X1JlcG9ydA== 77528
LWNyb3Nz 77529
LmdldEN1cnJlbnRVc2Vy 77530
dWx0dXI= 77531
KEZs 77532
IEltYWc= 77533
Q1Rlc3Q= 77534
7IOd 77535
IHN0YWc= 77536
IG96b25l 77537
IGvDqQ== 77538
cmVwYWly 77539
KSIpOw0K 77540
IHZvd3M= 77541
LkFsdGVy 77542
IEFsZ2VicmE= 77543
IEFoZWFk 77544
Z2V0dA== 77545
LklubmVyVGV4dA== 77546
IFpoZW5n 77547
LnJlYWxwYXRo 77548
IGRpc3RyYWN0aW9ucw== 77549
LGV2ZW50 77550
IElOQ0xVREVE 77551
Lk1hdGNoZXI= 77552
LnNwb3RpZnk= 77553
IGNvbnNpZA== 77554
Lk1hcHBpbmc= 77555
IEZvYW0= 77556
IE5BTkQ= 77557
IGRldmFudA== 77558
XSIpXQo= 77559
TGF1cmE= 77560
IHNhY2tlZA== 77561
X3hvcg== 77562
IHJlYWxtcw== 77563
IFJvYm90aWNz 77564
LlNlZWs= 77565
LiQk 77566
IFJpYmJvbg== 77567
CUhSRVNVTFQ= 77568
IENyZXNjZW50 77569
RUZS 77570
IE1lZGl0YXRpb24= 77571
LmdldFo= 77572
INC60L7QvNC/ 77573
anNvbndlYnRva2Vu 77574
Oj8= 77575
ZmFm 77576
VklPVVM= 77577
YWxsYWg= 77578
IHBpcGluZw== 77579
IG1vZGVybmU= 77580
cG9zdGFsY29kZQ== 77581
IGxldmVyYWdpbmc= 77582
IENISVA= 77583
cGNt 77584
bWFp 77585
IGlQ 77586
QUtFUg== 77587
ZGF0YUdyaWRWaWV3 77588
X2RlcHM= 77589
LWRyaXZlcg== 77590
TGll 77591
ZGlzY2FyZA== 77592
eW50YXhFeGNlcHRpb24= 77593
IGVjdA== 77594
IEV4aGliaXQ= 77595
ICgqKg== 77596
IOuU 77597
Q2hhbmdlRXZlbnQ= 77598
IHN1cGVybWFya2V0cw== 77599
IHNobQ== 77600
cHJvZml0cw== 77601
cGlsbGFy 77602
cmFpc29u 77603
V2F0 77604
IHBoYXJtYWNpZXM= 77605
IG5ydw== 77606
Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 77607
CXdvcmxk 77608
U3RyZWFtaW5n 77609
RGlhbW9uZA== 77610
IEVudW1lcmF0b3I= 77611
IGVucXVpcnk= 77612
LmxhbWJkYQ== 77613
YmVr 77614
Uk9UTw== 77615
IFBkZlA= 77616
IGhpc3Rv 77617
IGdldENoaWxk 77618
L3N0cmV0Y2hy 77619
IEFNQVo= 77620
IEFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbg== 77621
InVzZXI= 77622
IHNhbml0YXRpb24= 77623
IENsb3RoZXM= 77624
Lm51bXB5 77625
ZmVj 77626
ICMjIyMjIyMjIyMjIw== 77627
0LXQudGB0YLQsg== 77628
X2xw 77629
IGF6dXJl 77630
WFBhdGg= 77631
VmVudA== 77632
TGFib3I= 77633
IG1pc3Rha2VubHk= 77634
IGNvbmR1aXQ= 77635
IEZhaXJmYXg= 77636
Z2V0U3RhdHVzQ29kZQ== 77637
IE1veQ== 77638
TGlzdEFkYXB0ZXI= 77639
ICg/KQ== 77640
R2VuZXJhbGx5 77641
LmlzQ29ubmVjdGVk 77642
dmlkbw== 77643
TW91c2VCdXR0b24= 77644
R2VuZXJhdGlvblN0cmF0ZWd5 77645
X2Rlcml2 77646
IGxla2tlcg== 77647
TWVhc3VyZW1lbnQ= 77648
X0NPT0tJRQ== 77649
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 77650
IGNvbXBldGl0aXZlbmVzcw== 77651
IGdhbWxl 77652
IHJldHJvc3BlY3Q= 77653
IEVkdWFyZG8= 77654
IERhdGFTZXJ2aWNl 77655
IGVzY29ydGVk 77656
IFF0eQ== 77657
SG9saWRheQ== 77658
CXJhdw== 77659
bGV1cnM= 77660
QmlydGhkYXk= 77661
IGhlYXRz 77662
LmludmVyc2U= 77663
IF8NCg== 77664
aWxsdW0= 77665
b2thYmxlQ2FsbA== 77666
X21s 77667
TGlrZWQ= 77668
ZW51bWVyYXRl 77669
RmluaXRl 77670
LXByb3A= 77671
QXJlYVZpZXc= 77672
IG1lZGlhdGlvbg== 77673
IGNoYW50aW5n 77674
X05U 77675
X3VuYw== 77676
c21vdXRo 77677
IHBpZ21lbnQ= 77678
UGFzc3dvcmRFbmNvZGVy 77679
IHbDqXI= 77680
IHdhc3Rld2F0ZXI= 77681
LVBhY2s= 77682
IGpvdmVu 77683
YWVz 77684
S1k= 77685
UGludGVyZXN0 77686
IG11c2ljYQ== 77687
bGFjZXM= 77688
IFdpY2g= 77689
KHJvdA== 77690
KGly 77691
IOyCreygnA== 77692
44Gd44KM 77693
X1RIRQ== 77694
Z2V0RmlsZQ== 77695
W3Byb3BlcnR5 77696
IGVuZGluZ3M= 77697
aXp6YXJl 77698
PXRyYWlu 77699
LWxvdmluZw== 77700
IG5vdXZl 77701
IGNvbW1hcw== 77702
IGNhbWJp 77703
IFp1c2FtbWVu 77704
CUV4dA== 77705
KG9ic2VydmVy 77706
Zm9ybWlr 77707
IHF1aW5kaQ== 77708
IEl2b3J5 77709
IEJvbGl2aWE= 77710
YXNhZA== 77711
X2xlZ2VuZA== 77712
Q2l0aWVz 77713
X0ZJUkU= 77714
YXNkZg== 77715
LkRlcHRo 77716
VmFsdWVHZW5lcmF0aW9uU3RyYXRlZ3k= 77717
dXBk 77718
LkdldFJlc3BvbnNl 77719
IHVyZ2VudGx5 77720
SW52YXJpYW50 77721
R2V0WA== 77722
IHN0YXR1cmU= 77723
IGltYWdpbmluZw== 77724
YXRlYXU= 77725
TU9WRUQ= 77726
KFRyYW5zYWN0aW9u 77727
X3Bvcg== 77728
UmVmUHRy 77729
Lmdsb2JhbERhdGE= 77730
Z3JhdmU= 77731
aW1lc3RlcHM= 77732
Zm91bmRsYW5k 77733
U2FsaXI= 77734
YXJ0aXN0cw== 77735
IGNyZWF0ZUFjdGlvbg== 77736
IFNhbnRv 77737
INC90LXRgg== 77738
CQkJICAgICAgICAgICAgICAg 77739
LXNvbmc= 77740
IG51aXNhbmNl 77741
IGltcG92ZXI= 77742
XykNCg== 77743
IGNyb3dkZnVuZGluZw== 77744
IHRpbXA= 77745
UGljdHVyZXM= 77746
IGxvZGdpbmc= 77747
6ZKu 77748
YXRhc2V0cw== 77749
44Ot44Kw 77750
cGVyc29ucw== 77751
Y29uZHVjdA== 77752
IGV2YWRl 77753
IGhhdW50aW5n 77754
ICEhfQ== 77755
IExBUkdF 77756
IGtpdHRlbg== 77757
IHVwaGlsbA== 77758
KG1pbnV0ZXM= 77759
IEVtYW51ZWw= 77760
J0M= 77761
IFNreXdhbGtlcg== 77762
cHVycG9zZQ== 77763
X21hcHBlcg== 77764
IGFkYXB0YXRpb25z 77765
LmZpbGxUZXh0 77766
cnVr 77767
IHJlcGVydG9pcmU= 77768
KHByaW9yaXR5 77769
KG1hcHBlZA== 77770
Um9iaW4= 77771
IGVycm9uZW91cw== 77772
IGluaGFs 77773
Qk9WRQ== 77774
KCIsIikK 77775
dWVsbGVtZW50 77776
IGZpbmdlcnByaW50cw== 77777
IFBZVEhPTg== 77778
LWRlbQ== 77779
bGVhbm9y 77780
esSFZA== 77781
IlBlb3BsZQ== 77782
YXNpZXI= 77783
IHBhdHJpb3RpYw== 77784
LmZyZWV6ZQ== 77785
SUo= 77786
IEJhbmNv 77787
IGlzU3VjY2Vzcw== 77788
KHZlaGljbGU= 77789
KExheW91dA== 77790
IGNhcnZpbmc= 77791
X2NpcGhlcg== 77792
IHZlemVz 77793
KCdfJyw= 77794
IEZpcnN0bHk= 77795
IGZ1bGxlc3Q= 77796
IExpc3RlbmluZw== 77797
X3NpZ25hbHM= 77798
ZXdvbGY= 77799
IFNDUg== 77800
IE1lcnJ5 77801
L3Rlc3RpZnk= 77802
X1NBTklUSVpF 77803
aW9jdGw= 77804
SUVFRQ== 77805
PU1hdGg= 77806
IGVucXU= 77807
CWF1eA== 77808
4pml 77809
IGRpc3BlcnNlZA== 77810
aGFyZQ== 77811
YmVybg== 77812
IEFtZW5k 77813
IGluc2lkZXJz 77814
IEFsdmFyZXo= 77815
IFp1Zw== 77816
L2NhbGVuZGFy 77817
IGhldXJl 77818
LXBhcGVy 77819
IHNvZm9ydA== 77820
IHNtaXRo 77821
IHBvYg== 77822
KHJhdGU= 77823
IHNvY2nDqXTDqQ== 77824
IHdvZXM= 77825
IGJydXNoaW5n 77826
cWQ= 77827
b2xvZ3Vl 77828
c29ja2V0cw== 77829
X1lFUw== 77830
LmFkZENvbHVtbg== 77831
IGV2YXNpb24= 77832
U09GVFdBUkU= 77833
YWJveA== 77834
LnlsaW0= 77835
IGVuZ3VsZg== 77836
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwo= 77837
IG5nT25EZXN0cm95 77838
IG5vc3Nh 77839
LmxzdA== 77840
KCl9Pgo= 77841
Lmt3YXJncw== 77842
IGNvbnRleHRv 77843
IFBVQg== 77844
RnU= 77845
IGJpZ290cnk= 77846
IGJyaWQ= 77847
IHN0ZXJvaWQ= 77848
IHZpZ29yb3VzbHk= 77849
IGJ1cnN0aW5n 77850
IHZlbmU= 77851
IHNhbGFkcw== 77852
IFZBUklBQkxFUw== 77853
IE9uYw== 77854
IGZpcmVFdmVudA== 77855
c2FuZGJveA== 77856
IHRvdWNoc2NyZWVu 77857
c2Fucw== 77858
L0luc3RydWN0aW9u 77859
IGVvZg== 77860
bGVjdHVyZQ== 77861
Py0= 77862
LmxvY2FsaXphdGlvbg== 77863
VkVT 77864
X3ZvaWNl 77865
aXR1cmE= 77866
LnJlcG9ydGluZw== 77867
IF0pOw== 77868
Tm92YQ== 77869
X0NPTVBBVA== 77870
IG91dGJyZWFrcw== 77871
LmNsaWVudFdpZHRo 77872
aWZsb3dlcg== 77873
X0dSQQ== 77874
SW5pdGlhbGl6aW5n 77875
X3BlcmY= 77876
KCl9LA== 77877
PVA= 77878
X0lNRVRIT0Q= 77879
IHRpZ2h0ZW5pbmc= 77880
IHRhYkJhcg== 77881
IEJL 77882
CURvdWJsZQ== 77883
L2hhc2g= 77884
IG1leg== 77885
VG9VcHBlcg== 77886
VEc= 77887
KGluZGVudA== 77888
IHNpbGljYQ== 77889
IC8vLy8vLw== 77890
w7Zr 77891
IGVsdmVz 77892
ZW1wbGF0ZXM= 77893
LkNvbXBhcmVUbw== 77894
IGd1bmZpcmU= 77895
YW5pbWFscw== 77896
IGtlcGFkYQ== 77897
IENQUg== 77898
X0xTQg== 77899
CXZlcnRleA== 77900
INC/0LXRgNCy 77901
LCE= 77902
IGR1bHk= 77903
X1BBVENI 77904
RU5B 77905
CUND 77906
Y29tcG9zaXRpb24= 77907
X3N2 77908
TGJs 77909
amVq 77910
0YHRgtGA0L7QuQ== 77911
LkVkaXRWYWx1ZQ== 77912
5YW3 77913
YW50YXM= 77914
IGJyZWFkY3J1bWI= 77915
IFRlc3Rlcg== 77916
IE1lYXN1cmVtZW50cw== 77917
L0lucHV0 77918
IFJheg== 77919
X1BPTEw= 77920
SW5kZXBlbmRlbnQ= 77921
Lmx1Y2VuZQ== 77922
IE1lY2hhbmljcw== 77923
Y29sb24= 77924
LnN1cmZhY2U= 77925
IHVuYXM= 77926
cmFkbw== 77927
UExJQ0FURQ== 77928
Q1JU 77929
LnNldERlZmF1bHQ= 77930
JUg= 77931
IHJlc3BvbnNhYmxl 77932
IHBlcnBlbmRpY3VsYXI= 77933
IFJlc3Bpcg== 77934
IFR1bmlzaWE= 77935
XEFycmF5 77936
6Lev5b6E 77937
IHBhdw== 77938
IGRlYm91bmNl 77939
KE1QSQ== 77940
INiv2LE= 77941
IGVsaw== 77942
IFJlbGF5Q29tbWFuZA== 77943
L2xpZ2h0 77944
LnNlcmlhbGl6YXRpb24= 77945
QlNJVEU= 77946
KSgoKCg= 77947
IEJpb3M= 77948
X3N2Zw== 77949
KHN1cmZhY2U= 77950
RHVwbGljYXRlcw== 77951
ICg+ 77952
X0FTVA== 77953
Lm5pY2s= 77954
IldoeQ== 77955
IEludGVsbGVjdHVhbA== 77956
YWJicmV2aWF0aW9u 77957
ZWFyYWJsZQ== 77958
IGNvbnNlZ3Vpcg== 77959
KEJl 77960
X1BvZHM= 77961
PEFuaW1hdG9y 77962
X1VOREVGSU5FRA== 77963
QVJSWQ== 77964
IC8vfg== 77965
cGVyYXRvcg== 77966
LndyaXRlRmlsZVN5bmM= 77967
QWxz 77968
bGRlcg== 77969
IG1pZWpz 77970
IGZ1bmNz 77971
aW5jaWJsZQ== 77972
IGR1c3R5 77973
IERyaWxs 77974
IGNvbnRpbnVhbA== 77975
IEVsZWN0cm9u 77976
LmVuZW15 77977
KHBi 77978
IHJldW5pdGVk 77979
U21va2U= 77980
LWZhY2Vk 77981
SW50ZW5zaXR5 77982
IFRyZWVNYXA= 77983
IEFyZ3VtZW50RXJyb3I= 77984
LndyaXRlSGVhZA== 77985
IFRSRQ== 77986
U3BsaXRPcHRpb25z 77987
LyoqKioqKi8K 77988
IFw8Xg== 77989
IEludmVzdG1lbnRz 77990
U1VNRVI= 77991
IGRhYw== 77992
QU5J 77993
Llllc05v 77994
KG9mU2l6ZQ== 77995
eXRo 77996
ZWxvYWQ= 77997
IGltcHJlcw== 77998
IGJsb2Jz 77999
LnJldHJpZXZl 78000
IHR5cmFubnk= 78001
IGNhbmNlbEJ1dHRvblRpdGxl 78002
IGhhY2k= 78003
IENhc2lub3M= 78004
IGRoZQ== 78005
UmV0YWls 78006
IFBvcm5odWI= 78007
IENyaW1lcw== 78008
T2ls 78009
KElTZXJ2aWNl 78010
UmVzaXphYmxl 78011
CVNv 78012
T2Z0ZW4= 78013
IGNvbW1vbnBsYWNl 78014
X0dD 78015
YWxkaQ== 78016
YXRobG9u 78017
KFZpZXdHcm91cA== 78018
KEVtcGxveWVl 78019
IHNhZmVndWFyZHM= 78020
6YCA5Ye6 78021
X0FVUkE= 78022
IHVubm90aWNlZA== 78023
IFRob3Ju 78024
bW9kZWxl 78025
IGFjb3Jkbw== 78026
IFdlbmdlcg== 78027
aW11cw== 78028
ZW5zYnVyZw== 78029
b21iYQ== 78030
Y2nDs24= 78031
Imh0dHA= 78032
X01hdHJpeA== 78033
fHx8fA== 78034
b3JuZWNlZG9y 78035
CUJ1ZmZlcmVkUmVhZGVy 78036
cmVnaXN0ZXJz 78037
cmVsZWFzZWQ= 78038
IGFkZE9ic2VydmVy 78039
IFZhbGVudA== 78040
KEN1bHR1cmVJbmZv 78041
IG1hbm5lbg== 78042
IGJ1cmdsYXJ5 78043
X21pbnV0ZQ== 78044
IGludGVyY2VwdG9y 78045
b2NyYXRlcw== 78046
YXR0cm8= 78047
IFlF 78048
ZXNzbGVy 78049
bGlzdGVuZXJz 78050
L3Byb20= 78051
IOek 78052
dG91Y2hlcw== 78053
RXNw 78054
IEFib3J0 78055
IGZmaQ== 78056
IGNsdW1z 78057
TklM 78058
X1ZJUlRVQUw= 78059
IGxvaW4= 78060
eW5vbWlhbHM= 78061
INec 78062
IGd6 78063
IE5lb24= 78064
SVNJUw== 78065
YW1lcmF0ZQ== 78066
X2F2YWls 78067
IG1heGk= 78068
IGlzQXJyYXk= 78069
Q29sdW1uSW5mbw== 78070
aXppbg== 78071
IHBlcnNv 78072
IG91ZA== 78073
aWFsaXplZA== 78074
eW1p 78075
IGNvbmZpZGVudGx5 78076
PSIvIj4K 78077
LmRhdGFzb3VyY2U= 78078
IHBheWNoZWNr 78079
IEJhdg== 78080
L0JyYW5jaA== 78081
IFRlYXI= 78082
IG1lcnVwYWthbg== 78083
IEJyYWg= 78084
INC60L7QvdGC 78085
74I= 78086
LHBhdGg= 78087
IGRhenpsaW5n 78088
IFVDSEFS 78089
IHByb3Zpc2lvbmFs 78090
0L/Qvw== 78091
IGxlZ2FsaXplZA== 78092
X2FsZ28= 78093
X1JTQQ== 78094
YWx0ZXJuYXRpdmU= 78095
IERFVEFJTFM= 78096
VG9Ebw== 78097
cmVmbGVjdGlvbg== 78098
X1dFRUs= 78099
IENMRUFO 78100
IHNsb2dhbnM= 78101
IOuTsQ== 78102
IFZldGVyaW5hcnk= 78103
aWRm 78104
LmRhdGVUaW1lUGlja2Vy 78105
aWNvbnRyb2w= 78106
KHBsYXk= 78107
IHVsbGFt 78108
ICcpDQo= 78109
IGNoZXF1ZQ== 78110
5a6L5L2T 78111
IHVuc2VyZW0= 78112
IEFyY2hpdGVjdHM= 78113
YW1lbnRhbHM= 78114
IHZtYXg= 78115
IGplbWFuZA== 78116
Q0VFRA== 78117
IE9saXZpZXI= 78118
c2V2ZXJpdHk= 78119
Uks= 78120
RGlzY29ubmVjdGVk 78121
IHdlYXBvbnJ5 78122
dWnDp8Ojbw== 78123
IGJpbmdv 78124
ZG9udA== 78125
X0NIQU5ORUxT 78126
IERhZw== 78127
IGTDpHI= 78128
w6lyaXF1ZQ== 78129
Z3JhZGFibGU= 78130
IENPTVBMRVRF 78131
IHNwYW5pc2g= 78132
IGluc3RydW1lbnRhdGlvbg== 78133
dmFzaXZl 78134
RFJBVw== 78135
IGZwdXRz 78136
IFNwZW5k 78137
IFJlc3BlY3Q= 78138
Q291cnRlc3k= 78139
IHNjaG8= 78140
IHBvc3RhZ2U= 78141
IE1lYWRvd3M= 78142
IHR1dG9yaW5n 78143
ZXJ2bw== 78144
QWJzb2x1dGVseQ== 78145
w6FuZGV6 78146
vZTrk5w= 78147
IFNIUg== 78148
cGhvb24= 78149
IERlcG9z 78150
PScnCg== 78151
IHBoeXNpb2xvZ3k= 78152
KnRpbWU= 78153
IFRvdWdo 78154
ZG9jaw== 78155
L2hl 78156
KEhhdmU= 78157
IE1vaW5lcw== 78158
U1RZUEU= 78159
IEJyaWRl 78160
IHN0cm9u 78161
IHdvcmxkdmlldw== 78162
IGdyYXR1aXRv 78163
IGFlcm9zcGFjZQ== 78164
IElocmVt 78165
IHFj 78166
IG1hbmlmZXN0YXRpb25z 78167
c2xhdWdodA== 78168
PEFjY291bnQ= 78169
IEluZm9z 78170
YW1iaWw= 78171
X0ZpbmFs 78172
IGFkbWluaXN0cmF0aW9ucw== 78173
IGNvbGxhYm9yYXRlZA== 78174
LmpkZXNrdG9w 78175
b2x1Y2nDs24= 78176
YXNjdGltZQ== 78177
X2FsbG9jYXRl 78178
YXJyaXZhbA== 78179
Sk9S 78180
IHNoYWR5 78181
IHBpbmVhcHBsZQ== 78182
44KP 78183
IHNhdGlu 78184
YnJlcm8= 78185
IExpZXM= 78186
IHRlbnNvcnM= 78187
IEludGVsbGlnZW50 78188
LlNlbGVjdGVkSW5kZXhDaGFuZ2Vk 78189
IHJhZGlhdG9y 78190
YXNzaXN0YW50 78191
JGZpZWxkcw== 78192
CXN0ZXA= 78193
IE1pdGdsaQ== 78194
IEV2ZXJldHQ= 78195
IFNjaGVkdWxlZA== 78196
SG9yYQ== 78197
Il0tPg== 78198
IG1vdHM= 78199
IERTVA== 78200
Zm9udE5hbWU= 78201
IFdhcndpY2s= 78202
X1Rhc2s= 78203
KkM= 78204
44On 78205
b2JlbA== 78206
X0RFVA== 78207
IHNvY2lvbG9neQ== 78208
IEthdHo= 78209
aWNpb25z 78210
b3RsYW5k 78211
YWRvbw== 78212
X3BhcnM= 78213
IHJpcHBpbmc= 78214
aWNobw== 78215
IG51dHJpdGlvdXM= 78216
CWRhbWFnZQ== 78217
S3k= 78218
IGFuY2hvcmVk 78219
IGFydGlmaWNpYWxseQ== 78220
IEp1dmVudHVz 78221
L3Blcmw= 78222
IGV4cHJlc3NpdmU= 78223
eEVF 78224
IEVudW1lcmF0aW9u 78225
Lk1FU1NBR0U= 78226
KGRlZw== 78227
5b+X 78228
IyMjIyMj 78229
ICIiKSw= 78230
a2zDpHI= 78231
XE1haWw= 78232
RGVzaWduZWQ= 78233
IHN0YWZmZXI= 78234
IHNhbHRz 78235
KioqKioNCg== 78236
IOKB 78237
IHNldFRpdGxlQ29sb3I= 78238
RFZE 78239
LldyaXRlQWxs 78240
ZWxsYW50 78241
IGNvZXJjaW9u 78242
IFNvcnRpbmc= 78243
6KiA 78244
IHN0YXJ2YXRpb24= 78245
Ly97ew== 78246
LmhlYXA= 78247
IE1lZGlldmFs 78248
ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 78249
77yR77yQ 78250
IHdhcmRz 78251
IEhlcmM= 78252
IEhvZ3dhcnRz 78253
LWNvbW1lbnRz 78254
IExhdWRlcmRhbGU= 78255
5rw= 78256
IHJpZnQ= 78257
IHplaXQ= 78258
IHByb29mcw== 78259
LnZpZXdwb3J0 78260
JHN0YXJ0 78261
IEJvdWdodA== 78262
LnJpY2hUZXh0Qm94 78263
IGNsaW5n 78264
ICcqKg== 78265
T3duZXJzaGlw 78266
IEJvZWhuZXI= 78267
KGR5bmFtaWM= 78268
IG1lZGljYWxseQ== 78269
IFdURg== 78270
IE1haW5NZW51 78271
6LSt 78272
IGRpZmVyZW50ZQ== 78273
L3Jlc3VsdHM= 78274
ZW50aGFs 78275
IFdpZGdldHM= 78276
cnVzaA== 78277
IFJNUw== 78278
IFZvbGxleQ== 78279
IHJlbW92ZUZyb21TdXBlcnZpZXc= 78280
IExhZmF5ZXR0ZQ== 78281
IEZldGNoVHlwZQ== 78282
YWNhcw== 78283
IHBhdGhvZ2Vucw== 78284
IE1NTw== 78285
LkN1cnJlbmN5 78286
b2Npb3Vz 78287
IHNwcml0ZUJhdGNo 78288
ZG9sbA== 78289
IHZhbXBpcmVz 78290
bGF1bmNoZXI= 78291
IHBlYWtlZA== 78292
IGRlYnVuaw== 78293
IEFTRA== 78294
IHVuZXF1YWw= 78295
IHNxdWFkcw== 78296
fS4kew== 78297
bWFuaQ== 78298
IkU= 78299
IEZhaHI= 78300
IElTSQ== 78301
IHVuYXZvaWQ= 78302
b3Bob25l 78303
WzpdCg== 78304
IERpcmVjdGVk 78305
IGJ1c2hlcw== 78306
LmZhaWx1cmU= 78307
IGltbWVyc2Vk 78308
ZXhv 78309
SGlzdG9ncmFt 78310
IEthbm4= 78311
IHBpcmFjeQ== 78312
IENydW5jaA== 78313
IGzDpg== 78314
Ly8i 78315
IG1vbm90 78316
IFNhdW5kZXJz 78317
IFNldmVudA== 78318
KEFic3RyYWN0 78319
IHNtb2tlcg== 78320
cm9uZQ== 78321
LmNsaWVudFk= 78322
ICItIiw= 78323
IEZvdW50YWlu 78324
IGlubmU= 78325
7IOJ 78326
Q3Ry 78327
JGlucHV0 78328
UFJPRklMRQ== 78329
IERvbmF0aW9u 78330
V2l0aEVtYWls 78331
IGZyYWN0dXJlcw== 78332
S2VlcGVy 78333
IG1laXNqZXM= 78334
IGFyY2hpdGVjdHVyZXM= 78335
IEx1bmc= 78336
J2ltYWdl 78337
aGFybWE= 78338
IGFiYW5kb25pbmc= 78339
QUxMRUQ= 78340
c3VidHlwZQ== 78341
cmVpcmE= 78342
IG1vc3M= 78343
IFBhcnNvbnM= 78344
YWtlZG93bg== 78345
PW9iag== 78346
IHN1Y2Vzcw== 78347
IHdlYXJhYmxl 78348
44Kn 78349
IGFkdWx0aQ== 78350
LnVt 78351
IHZpYnJhdGlvbnM= 78352
IHN3ZWxs 78353
IERpc2Nsb3N1cmU= 78354
IFJERA== 78355
cGFpcnM= 78356
YW5nZ2Fu 78357
IG1haW5CdW5kbGU= 78358
IERJTg== 78359
IHJvY2tlZA== 78360
c2hvdWxkQmU= 78361
Lmdi 78362
IElNRA== 78363
IFdO 78364
LGFyZw== 78365
4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm 78366
W109JA== 78367
LlNN 78368
IGFsZ3Vucw== 78369
YWRkb25z 78370
X0NvbW1vbg== 78371
X1JFRlJFU0g= 78372
INmB2Yo= 78373
IFRZUE8= 78374
IEVjb2xvZ3k= 78375
IGdsdQ== 78376
LkRhdGFUeXBl 78377
IFByb2Jl 78378
THV4 78379
b3dlZ28= 78380
IHJlaw== 78381
IFBsYWludGlmZg== 78382
YWNoYWJsZQ== 78383
Lm5hbWE= 78384
Km91dA== 78385
fX17ew== 78386
IENBUElUQUw= 78387
5L2G 78388
SW1wb3J0ZXI= 78389
LmNyZWF0ZVNlcnZlcg== 78390
X3Jlc29sdmU= 78391
X0VQUw== 78392
c3RlbGxhcg== 78393
X1Byb2ZpbGU= 78394
CXN3 78395
LW1vbg== 78396
dWRldg== 78397
XFBsdWdpbg== 78398
X01JWA== 78399
IERpc2NyaW0= 78400
LmZyb21MVFJC 78401
IFN0cmFuZA== 78402
QW55dGhpbmc= 78403
cG93ZXJz 78404
XV0NCg== 78405
LlRJTQ== 78406
IGFkZHNsYXNoZXM= 78407
IGVzaQ== 78408
QEJlZm9yZQ== 78409
IHNhaw== 78410
ICcvJzsK 78411
Y29j 78412
xZ/EsQ== 78413
ICkpOw0K 78414
X2Fib3Zl 78415
IEVDQw== 78416
L2NwdQ== 78417
IGNhZGU= 78418
LlN0ZGVycg== 78419
IHBlbGxldHM= 78420
IFBhbGlu 78421
IGfDqW4= 78422
X2phdmE= 78423
IHNhbGFo 78424
IGJlcmdlbg== 78425
X1NXQVA= 78426
IGdpYg== 78427
acOjbw== 78428
X2Rpc3RhbmNlcw== 78429
IENpbmRlcg== 78430
IGFuYXJjaGlzdA== 78431
aW1hdA== 78432
CW1vY2s= 78433
44GX44G+44GZ 78434
T21lZ2E= 78435
IGJhaHdh 78436
X1BhcnNl 78437
LnBhcGVy 78438
CUludGVudA== 78439
cmVucw== 78440
L2dyaWQ= 78441
IGZpbHRoeQ== 78442
LmV2 78443
IyMjIyMK 78444
IHNhcmU= 78445
IHNvYWtpbmc= 78446
IFJlZ2lvbnM= 78447
X1VTRUQ= 78448
IFNpaw== 78449
aWZpa2FzaQ== 78450
CUVkaXRvcg== 78451
THVjaw== 78452
IOyXsA== 78453
xINt 78454
LiI7 78455
IFppZWw= 78456
IGdyYXlzY2FsZQ== 78457
KEZ1bmM= 78458
44OB 78459
LkRlbnNl 78460
LWxlYW5pbmc= 78461
IGdyYWNlZnVs 78462
R3JhcGhOb2Rl 78463
X0NPTU1JVA== 78464
IENWUw== 78465
IHBsYWlucw== 78466
IHJlag== 78467
cGNpb25lcw== 78468
IHVuZGVybWluaW5n 78469
X2NhdHM= 78470
ZmVi 78471
Q29sbGVjdGlvblZpZXc= 78472
U0VNQg== 78473
IHRodQ== 78474
dGV4dGJveA== 78475
KEFuZHJvaWQ= 78476
IHJpZ29y 78477
IFlpZWxk 78478
LmlzUGxheWluZw== 78479
OnZpZXc= 78480
cmVtYWluZGVy 78481
IFBpcA== 78482
KWluZGV4 78483
IEJlY2tlcg== 78484
dG9Mb2NhbGU= 78485
YXV0b3JlbGVhc2U= 78486
IFJvbWVybw== 78487
LkhhbmRsZWQ= 78488
IENhYmluZXRz 78489
KVY= 78490
IHJ0ZQ== 78491
IEh1bHU= 78492
aWNpZWw= 78493
L2FuaW1hdGlvbnM= 78494
IHByZXN1bWU= 78495
LnRyYW5zcGFyZW50 78496
IHN1Ym1lbnU= 78497
cW0= 78498
aWVydGVu 78499
IHRleHRTaXpl 78500
IHN0YXJ2aW5n 78501
L2pvYg== 78502
QXBhY2hl 78503
IHlpZWxkaW5n 78504
LWFydGljbGU= 78505
Jz0+JF8= 78506
IOih 78507
PFNwcml0ZVJlbmRlcmVy 78508
IFNoaWE= 78509
KToo 78510
IHB1Ymxp 78511
emllag== 78512
IHRlbGVzYw== 78513
IHRlaWw= 78514
TGVnYWN5 78515
IFBsYWNlbWVudA== 78516
KCkpew== 78517
IHRyb3VibGVzb21l 78518
5pif 78519
IHBlcnPDtm4= 78520
X0FzcE5ldA== 78521
PX0= 78522
KHVzZXJJRA== 78523
U3Vz 78524
44K6 78525
LWF2ZXJhZ2U= 78526
IFFJbWFnZQ== 78527
LlN0cmljdA== 78528
dGVib3Jn 78529
LWZ1bmN0aW9ucw== 78530
UkVHSU9O 78531
Pk5ldw== 78532
X2Nob29zZQ== 78533
KGNp 78534
IHVubGVhc2g= 78535
IFJJR0hUUw== 78536
IFNwZWFy 78537
CW1ha2U= 78538
IHR5cw== 78539
YW5lbGE= 78540
IFdY 78541
X01BS0U= 78542
L3NldHVw 78543
IG9uU2F2ZQ== 78544
IGNsaW5pY2lhbnM= 78545
CWJhY2s= 78546
LkxpbmtlZA== 78547
IGNvbnNlcnZl 78548
IGJpdHRlbg== 78549
X3ZhcmlhbmNl 78550
IGxpcmU= 78551
IGluZXJ0aWE= 78552
dWZmbGVz 78553
X01QSQ== 78554
aWRkbGVz 78555
W2Fycg== 78556
LnZvY2Fi 78557
IHNoaXR0eQ== 78558
IG5lc3Rl 78559
c3NpemU= 78560
IEtU 78561
Ymxlcg== 78562
X2xpbnV4 78563
IG1vbmdvZGI= 78564
IElURU1T 78565
S29u 78566
IEJ1cnN0 78567
X3Bob3Rvcw== 78568
Q29sb3JhZG8= 78569
IGFja25vd2xlZGdtZW50 78570
IG9pbHk= 78571
IG5mcw== 78572
IFppb25pc3Q= 78573
IGFkZGljdHM= 78574
IGFkZFVzZXI= 78575
IE1pc2g= 78576
IGtX 78577
IFdhbnRz 78578
KHJlY29yZHM= 78579
b2N1cnJlbmN5 78580
SlNHbG9iYWw= 78581
LmVsYXBzZWQ= 78582
IE5i 78583
IHBwdA== 78584
XERlcGVuZGVuY3k= 78585
Um9s 78586
IMOnYWzEscWf 78587
IGV4cGFuc2lvbnM= 78588
YnViYmxl 78589
IG1pZHRlcm0= 78590
ICcjew== 78591
Y3R4dA== 78592
SVN5bnRheEV4Y2VwdGlvbg== 78593
IFZhbGxl 78594
IENhZGlsbGFj 78595
ICIifSwK 78596
IHNlbXVh 78597
cmljaFRleHQ= 78598
c29mdG1heA== 78599
b2JqUEhQRXhjZWw= 78600
LmhzdGFjaw== 78601
X2NyaXRpY2Fs 78602
KDw/ 78603
ZGo= 78604
IGNvbnNvbg== 78605
IHJvb21JZA== 78606
RE9NQ29udGVudExvYWRlZA== 78607
cGFybXM= 78608
IHplaWd0 78609
VFBM 78610
LW5vdGNo 78611
IG9wcHJlc3NpdmU= 78612
Q29kaW5n 78613
IExlYXZlcw== 78614
KERpc3BsYXk= 78615
LnNpZ25Jbg== 78616
Ly8tLQ== 78617
IE9wcg== 78618
Y3Rh 78619
IG1ldGF2 78620
U2VyaWFsaXplZA== 78621
IHVuYWZmZWN0ZWQ= 78622
IEFUTA== 78623
IEtQ 78624
QXRsYW50aWM= 78625
LHVybA== 78626
LHN0YXRl 78627
IGJpc3Q= 78628
ZW5lZw== 78629
IHNpbXBsaXN0aWM= 78630
IGJpZGRlcg== 78631
IHBlcmNlcHQ= 78632
IGNlbGli 78633
IFRIUk9X 78634
KC9b 78635
VGNw 78636
IGZ1cnRoZXJtb3Jl 78637
LkFjYw== 78638
b3BwYWJsZQ== 78639
5Lik 78640
IFRhcnQ= 78641
IEJlbno= 78642
IGVtYm9kaWVk 78643
KENvbnN0 78644
ICst 78645
UGFydGljaXBhbnRz 78646
IGh0dHBSZXF1ZXN0 78647
YWNjZW50 78648
IFPDvA== 78649
IGhvcnJpZnlpbmc= 78650
IC8+LA== 78651
IGVuYWN0bWVudA== 78652
IFVOSU9O 78653
L2xvZ3M= 78654
IHNjcmVlbkhlaWdodA== 78655
IGV0d2E= 78656
5L6L5aaC 78657
IGHDum4= 78658
5bem 78659
X3RpbWVsaW5l 78660
ICIiKSkK 78661
JzonJw== 78662
Qlc= 78663
IHJlbm92YXRpb25z 78664
IDwK 78665
UGFsZQ== 78666
Pjo8Lw== 78667
U2tlbGV0b24= 78668
IGdldFVzZXJz 78669
X2RhdGFmcmFtZQ== 78670
YWJy 78671
bWF0ZXJpYWxz 78672
JmVhY3V0ZQ== 78673
LkRpc3BsYXlOYW1l 78674
IGh2aXM= 78675
X2xhbmd1YWdlcw== 78676
LnN5 78677
dG93ZXI= 78678
SUZJQ0FUSU9OUw== 78679
IGJhcnJpYw== 78680
IFBsdXRv 78681
YDs= 78682
44OL 78683
Y2VudGU= 78684
I2Fi 78685
IGxleGljYWw= 78686
IEJSTw== 78687
IHJ1bGluZ3M= 78688
SEVZ 78689
LmlPUw== 78690
cmV0dXJuZWQ= 78691
LmJvb2tz 78692
IEh1YmI= 78693
ZW9m 78694
Pj46Og== 78695
IOyG 78696
IGdvVG8= 78697
6ICD 78698
44Go44GG 78699
PEZvcm0= 78700
Y29waWVz 78701
LnF1YW50 78702
IFBvdGF0bw== 78703
IENvdXNpbnM= 78704
IHPDuw== 78705
R292ZXJu 78706
IGdhbGVy 78707
IEZJUg== 78708
X1dpZHRo 78709
IFNoZWxkb24= 78710
LkRldg== 78711
IFJlc3BvbnNpYmlsaXR5 78712
c29uaWFu 78713
IHN1cGVyY2xhc3M= 78714
Yml0c2V0 78715
ZWRkYXI= 78716
IExhYm9yYXRvcmllcw== 78717
IGNvaW5lZA== 78718
IFRlY2huaXF1ZQ== 78719
KENvcmU= 78720
IHNwcmF5ZWQ= 78721
IHBvbmc= 78722
KE5ldHdvcms= 78723
IHJvYXI= 78724
IEVBU1Q= 78725
c3RyYWlu 78726
IG1lbnN0cnVhbA== 78727
b21iYXQ= 78728
IGNhbG1pbmc= 78729
CURpbQ== 78730
X21vdmllcw== 78731
IFJBSUQ= 78732
LWRpc21pc3NpYmxl 78733
IGZyZXVuZA== 78734
LWNoYW4= 78735
IHJlc2lzdG9y 78736
X0NvcHk= 78737
b2NyaW5l 78738
IGVzcGlvbmFnZQ== 78739
Z2Fkbw== 78740
TkRBUg== 78741
IHBvcmNlbGFpbg== 78742
dGhhbG0= 78743
IGBb 78744
IGdyYWRv 78745
0LjRgA== 78746
RE9VQkxF 78747
IGFjY2Vzc2Vz 78748
LkZsb29y 78749
IOKGlA== 78750
IHRva2VuaXpl 78751
YW5hbHl0aWNz 78752
LkNyZWF0ZUluc3RhbmNl 78753
IHN1Y2hl 78754
CWVudA== 78755
aWduZXI= 78756
INC/0LXRgNC10LQ= 78757
IGNvbmRpY2lvbmVz 78758
LmxpYnM= 78759
Iic7 78760
UERPRXhjZXB0aW9u 78761
IG9uRGF0YQ== 78762
IEF1dGlzbQ== 78763
LWhlbHBlcg== 78764
IHJld2luZA== 78765
IGNvZmZpbg== 78766
44O844K4 78767
IHRyYW5zbWl0dGluZw== 78768
LnNldEFsaWdubWVudA== 78769
IGRlYWxsb2M= 78770
IGFuY2VzdHJhbA== 78771
b2dpZQ== 78772
LkNPTVA= 78773
OmZyYW1l 78774
bW1v 78775
Jzoi 78776
IFJlZ2VudHM= 78777
IGNoZWF0ZWQ= 78778
Lmdn 78779
IHBhY2Vk 78780
IGVzdGFk 78781
b2NlbmU= 78782
bHNh 78783
KGZj 78784
L2dyb3Vwcw== 78785
L21pc2M= 78786
IFNodXR0bGU= 78787
VVBJ 78788
w6Fv 78789
LWN5Y2xl 78790
CXByb3Bz 78791
IHJvdHRlbg== 78792
UmVqZWN0ZWQ= 78793
I2Fj 78794
LnVh 78795
IEFtbmVzdHk= 78796
IHBlbm5lZA== 78797
SU5DUkVNRU5U 78798
PGRpbQ== 78799
LnNldFVw 78800
IFR3ZWV0cw== 78801
IE1hZHVybw== 78802
INmC 78803
IENBY3RpdmU= 78804
CUJZVEU= 78805
KHNlcGFyYXRvcg== 78806
LlJlc2l6ZQ== 78807
dWZmbWFu 78808
c3VwcG9ydHM= 78809
IHVyYg== 78810
IEZvdW5kZWQ= 78811
X2hhcmQ= 78812
IGVjbGVjdGlj 78813
LkZpbHRlcnM= 78814
IFJvdW5kZWRSZWN0YW5nbGU= 78815
X3NhbXBsaW5n 78816
IEpldHp0 78817
YW1lcmljYW4= 78818
Lmludm9rZUxhdGVy 78819
IEJ1dHRlcmZseQ== 78820
KGNvbm5lY3Rpb25TdHJpbmc= 78821
IE5hb21p 78822
IEphaW1l 78823
cnRz 78824
IG1hZ2ljYWxseQ== 78825
Lm1hY2hpbmU= 78826
IEFwcGFsYWNo 78827
Iisi 78828
dmFsZQ== 78829
LW1vdW50ZWQ= 78830
IGFjaGU= 78831
TUo= 78832
IFVJSW1hZ2VQaWNrZXJDb250cm9sbGVy 78833
LUp1bg== 78834
TWFuYQ== 78835
a3JhaW5l 78836
RENG 78837
L1Byb2R1Y3Q= 78838
IFJFU0VSVkVE 78839
IEZIQQ== 78840
OkAiJUAiLA== 78841
IFByb2pla3Q= 78842
IE5pcg== 78843
IENhcm5pdmFs 78844
ICom 78845
IFFT 78846
V0hP 78847
IHdlbHQ= 78848
IG1hcnJ5aW5n 78849
QWxleGFuZGVy 78850
IFJldmlld2Vk 78851
YWN0ZXJpYQ== 78852
IHdhbg== 78853
KHJvYm90 78854
IFdpbmRvd01hbmFnZXI= 78855
IG1vbnVtZW50YWw= 78856
IERvbWluZw== 78857
L3dlYXRoZXI= 78858
X3NlY29uZGFyeQ== 78859
T3BlcmF0b3Jz 78860
X1NJREU= 78861
S2F0 78862
LXpvbmU= 78863
IHNpZ25pZmllcw== 78864
IEh0dHBNZXRob2Q= 78865
L2NvbnRleHQ= 78866
Ig0KDQoNCg== 78867
IFJvZHJpZ28= 78868
IGJ1Yg== 78869
L211c2lj 78870
IHNlcm9udA== 78871
IG1STkE= 78872
X2VtYWlscw== 78873
ICc+Jw== 78874
IEdlbWU= 78875
INGA0LDRgQ== 78876
IH5+ 78877
IGR1Y2tz 78878
IEZyZXVuZA== 78879
RXhwZXJpbWVudA== 78880
IHJlb3BlbmVk 78881
IFwiew== 78882
IGVsbGlwdA== 78883
IGNvbmNhdGVuYXRl 78884
IHBvbG8= 78885
VGltZVpvbmU= 78886
ICAKICAgIAo= 78887
IGNhcHRpb25z 78888
cmlja3M= 78889
LmZyZXE= 78890
Lm1lbW8= 78891
IHNtYg== 78892
RHJ1Zw== 78893
XVsv 78894
X0JBQ0tFTkQ= 78895
IEVsbGE= 78896
IFBvcnRpb25z 78897
IGZldGNoRGF0YQ== 78898
IGNvcm91dGluZQ== 78899
IGVzdGF2YQ== 78900
IEdlbml1cw== 78901
OmB+ 78902
IFN3YW5zZWE= 78903
KHBheW1lbnQ= 78904
Vm90cmU= 78905
IFBydWl0dA== 78906
Lm9mZnNldFdpZHRo 78907
YXJ5bA== 78908
IHVuaWZvcm1seQ== 78909
IFdhcnA= 78910
IFNFQQ== 78911
IGRlZHVjdGlibGU= 78912
IGJ1bGxpZWQ= 78913
IEJlc2No 78914
IFByb3NwZWN0 78915
T1NQ 78916
IlllYWg= 78917
IEFuZ3J5 78918
LlZhbA== 78919
IGdpZ3M= 78920
IGJ1bGt5 78921
ZXRlcmlh 78922
LmdldFN0YXJ0 78923
IE1FVEg= 78924
IGNvaGVyZW5jZQ== 78925
IG1lZGlhdGVk 78926
0LXQs9C40YHRgg== 78927
Li4uLgo= 78928
IHN0cm9rZUxpbmU= 78929
bWo= 78930
IFVuc3VyZQ== 78931
YXRocm9vbQ== 78932
KEJpbmFyeQ== 78933
X0tleVByZXNz 78934
5p6E 78935
aW5oZXJpdHM= 78936
IHJlcHJlaA== 78937
CVNjaGVtYQ== 78938
IHVucmVzdHJpY3RlZA== 78939
LmRlZmluaXRpb24= 78940
XT8u 78941
IGl0aA== 78942
5aCx 78943
IHNsaW1l 78944
bXNncw== 78945
X0pT 78946
CVZlcnNpb24= 78947
X1NFQ1VSRQ== 78948
IGNvc3Rv 78949
LlJlc3Ry 78950
Y3Ny 78951
X1RPT0xUSVA= 78952
cGNs 78953
IOKGkw== 78954
U2VsZlBlcm1pc3Npb24= 78955
LnJhdmVs 78956
IG1lbWJyZXM= 78957
QXNzZW1ibGVy 78958
cm9taXVt 78959
c3VyZg== 78960
IFVQREFURUQ= 78961
KGJyYW5jaA== 78962
KGluY2x1ZGU= 78963
IElkb2w= 78964
XE9iamVjdA== 78965
IGNsb25pbmc= 78966
IGlzTmFO 78967
IGFueg== 78968
xrDhu51uZw== 78969
IG9uYw== 78970
X0NMVVNURVI= 78971
IHt9KSwK 78972
aW1pbmFyeQ== 78973
CWNvbnRlbnRQYW5l 78974
dHJhaWw= 78975
IG5pbmV0eQ== 78976
IE5pYWdhcmE= 78977
IEFuZHI= 78978
w6lzeg== 78979
IGRpZmlj 78980
dXRyYQ== 78981
J319Pg== 78982
44Kk44OI 78983
c3Bhcg== 78984
ICJcIiw= 78985
IG15ZmlsZQ== 78986
ZmZj 78987
IG5vdGljZWFibHk= 78988
ZXlh 78989
IFB1dHRpbmc= 78990
SlY= 78991
LmRpbWVuc2lvbnM= 78992
ZXJjYQ== 78993
Z2VuZXNpcw== 78994
ZWZmZWN0aXZl 78995
IHBlcmRlcg== 78996
Lk9S 78997
X0NPTVBBUkU= 78998
Omxlbg== 78999
L3JlZA== 79000
IEFyaXN0b3RsZQ== 79001
IHF1ZXJpZWQ= 79002
IGZvcmVzZWVhYmxl 79003
IFVJQ29udHJvbA== 79004
cmVtaW5kZXI= 79005
IGNlbmE= 79006
IGhpYw== 79007
ICIiOw0KDQo= 79008
L2Jhc2lj 79009
IGFmZm9yZGFiaWxpdHk= 79010
LGVycg== 79011
INGB0LjQvNCy 79012
IElTUg== 79013
bGljZW5zZXM= 79014
Vk9JQ0U= 79015
Lkxhbmc= 79016
LnJlbGF0aW9uc2hpcA== 79017
IGxlbmRz 79018
IG51dHplbg== 79019
IGVzcGVjw61m 79020
aWVuZGE= 79021
PFBhaXI= 79022
VHY= 79023
X1JFVFJZ 79024
IGhvbm9yaW5n 79025
X2RlY2xhcmF0aW9u 79026
KE5P 79027
IEhpY2s= 79028
IG1pbmxlbmd0aA== 79029
IEdlc2NoaWNodGU= 79030
YXBlc2g= 79031
QVRPTQ== 79032
JykiKTsK 79033
ZW50ZXJwcmlzZQ== 79034
Pn08Lw== 79035
IHBvbGl0aXF1ZQ== 79036
ZWRpdGlvbg== 79037
X0RlYnVn 79038
QW5uZQ== 79039
LlNjb3Bl 79040
Y3Rw 79041
Y2Fub25pY2Fs 79042
Pj47Cg== 79043
TWVudXM= 79044
IGZpZXJjZWx5 79045
Lk9uY2U= 79046
IEJvcnJvdw== 79047
IHNvc3Q= 79048
IHNlcnZpbmdz 79049
LWZsYWc= 79050
IHZlc3RlZA== 79051
IGZyb24= 79052
7ZWo 79053
IGZhbWluZQ== 79054
Il0pKXsK 79055
ZXJlw6dv 79056
IGtpamtlbg== 79057
IEZsb29yaW5n 79058
55CD 79059
b2JzZXJ2YXRpb24= 79060
IHVzZXJEYW8= 79061
PSIiPg0K 79062
Q09WSUQ= 79063
YmFieQ== 79064
IHRyb3VnaA== 79065
IFNlYW0= 79066
IEZpZ2h0ZXJz 79067
b21pdA== 79068
IENoYXJnZXM= 79069
UnVzcw== 79070
IHF1ZWxxdWU= 79071
R2V0UG9zaXRpb24= 79072
IE1pbmlzdGVycw== 79073
X3JlY2VpcHQ= 79074
IHJvb3ROb2Rl 79075
bXVsdGlw 79076
JHNlYXJjaA== 79077
IikpKSkK 79078
dGFrZXM= 79079
ICghIQ== 79080
IEJBVA== 79081
Y2hhbmc= 79082
xJM= 79083
Lm9j 79084
IHNraWxsZXQ= 79085
IFNLVQ== 79086
IEdhbGxhZ2hlcg== 79087
IGNyZXNj 79088
d2Vla2RheQ== 79089
ZXJ2aXNlZA== 79090
Q2FyZENvbnRlbnQ= 79091
LmFjY2Vs 79092
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK 79093
VGFp 79094
IENvbXBhdGliaWxpdHk= 79095
eENG 79096
X3Jld2FyZHM= 79097
cmRm 79098
QVBQTEU= 79099
LWZlZA== 79100
IGRlcGVuZGVk 79101
LWdlbmVyYXRvcg== 79102
KFByb2Nlc3M= 79103
0LzQvtC2 79104
IGRpc2NyZXBhbmN5 79105
IHBob3NwaGF0ZQ== 79106
TmV0d29ya2luZw== 79107
6K6+6K6h5Zmo 79108
KHJv 79109
IGNvbmN1cnJlbmN5 79110
CWF1dGg= 79111
UGx1Zw== 79112
QVRBTE9H 79113
c3Viag== 79114
L3RlYW0= 79115
KGF2Zw== 79116
b2tpbg== 79117
IHBsZWRnZXM= 79118
IGNvbGxhYm9yYXRvcnM= 79119
IGVtYmFya2Vk 79120
IERvY2g= 79121
IERhaXJ5 79122
Y29tcGV0aXRpb24= 79123
IE11dGFibGVMaXN0 79124
LXNldmVu 79125
IGNvbmN1cnJlbnRseQ== 79126
IFZpag== 79127
IHJlc2V0dGluZw== 79128
ZHBp 79129
IHNsaXQ= 79130
IFBPSU5URVI= 79131
IENBUlQ= 79132
LmRleA== 79133
Y3Vsb3M= 79134
X3BlcnNvbmFs 79135
IGFuYWx5dGlj 79136
I2NyZWF0ZQ== 79137
X21lbWNweQ== 79138
KExpc3ROb2Rl 79139
X1RhZw== 79140
IElycg== 79141
Ij4nOw0K 79142
U2hvcnRseQ== 79143
LnRpcA== 79144
XFs= 79145
IFJlcHJlc2VudGF0aW9u 79146
X0xJVEVSQUw= 79147
LmNibw== 79148
IEthcm5hdGFrYQ== 79149
IENvbXBldGl0aXZl 79150
IFJ1ZQ== 79151
IHJ1bm9mZg== 79152
IFNwZWxscw== 79153
ZmNsb3Nl 79154
Y2lz 79155
RnJh 79156
IHJlbW9yc2U= 79157
IENvbG9nbmU= 79158
IHJhbmdlcg== 79159
IE1vcmc= 79160
ZmlnaHRlcnM= 79161
LlJlcXVlc3RQYXJhbQ== 79162
Q29ycw== 79163
IGRlbm90ZQ== 79164
IGNob3Nlcw== 79165
w6JuZA== 79166
LnJlY3ljbGU= 79167
IExvZ2lzdGlj 79168
IERFQUQ= 79169
LWxvYWRlZA== 79170
IENsZWFycw== 79171
IGtlbGw= 79172
cmFwaGlj 79173
IE1hbmU= 79174
RU1CRVI= 79175
IG1hc2tpbmc= 79176
CWVkaXRvcg== 79177
SGFsbG8= 79178
Omxpc3Q= 79179
IGV0aG4= 79180
LXNlYXQ= 79181
ICopWw== 79182
IEdseQ== 79183
IEFDUw== 79184
CXN0YXQ= 79185
L0NvbW1vbg== 79186
IGRpc2d1aXNlZA== 79187
RmluYW5jZQ== 79188
IEVsZXBoYW50 79189
dGVtcG9yYXJ5 79190
IENhcmx5 79191
IGNvY29z 79192
IEp1ZGl0aA== 79193
IHdyYXBwZXJz 79194
IEx1bmFy 79195
IHLDqWN1cA== 79196
LXNldHVw 79197
IHNpemFibGU= 79198
ICAJIA== 79199
Y2xhc3NpZmllcg== 79200
IGZpZ3NpemU= 79201
IG1hc3R1cg== 79202
IOabtOaWsA== 79203
IFJ3YW5kYQ== 79204
KXQ= 79205
IEN1cHM= 79206
QXp1cmU= 79207
KCl9LAo= 79208
U1BBUkVOVA== 79209
KGRpYw== 79210
IFRleHRGb3JtRmllbGQ= 79211
IGRlZm9ybQ== 79212
IGRpcmVjY2nDs24= 79213
IHlheg== 79214
IGdsdWVk 79215
IGF0cmF2w6lz 79216
Y29mZmVl 79217
IFVwZGF0aW5n 79218
IENvbGxlZ2Vz 79219
w6RsbHQ= 79220
YW5kZWxpZXI= 79221
IHNhbGly 79222
IFNDQUxF 79223
cWU= 79224
6rO1 79225
KHJlY2VpdmVy 79226
bWRi 79227
Im1hdGg= 79228
aXNuYW4= 79229
dGVsZWZvbmU= 79230
UkVQT1JU 79231
LmFkZE1vdXNlTGlzdGVuZXI= 79232
ZHVlZA== 79233
e31d 79234
KCkpOg== 79235
IHdvcmtpbmdz 79236
fSk7CgoKCg== 79237
IGNvbXBvbmVudFdpbGxNb3VudA== 79238
U2VydmVycw== 79239
X0NMT1NFRA== 79240
SVpFUg== 79241
IGJvb2I= 79242
IENPTkNBVA== 79243
IEhhcHBpbmVzcw== 79244
IGNvbW11bmU= 79245
eEFC 79246
b3duZXJzaGlw 79247
X05FQVI= 79248
X0hBUkQ= 79249
IFlB 79250
bGlvbg== 79251
IHNwaWVs 79252
IHRhZ2dpbmc= 79253
IGltbW9yYWw= 79254
LWdyb3VuZA== 79255
IHRodW5r 79256
IGxvY3Vz 79257
IExhdHZpYQ== 79258
aXppb25p 79259
Y2xhcnNpbXA= 79260
IHBhdGllbnRseQ== 79261
XEhhcw== 79262
IHN1Ym9yZGluYXRl 79263
IFdISUNI 79264
ZW50aW9uUG9saWN5 79265
IGRlcGxldGVk 79266
RlNJWkU= 79267
IFss 79268
IEJpb2dyYXBoeQ== 79269
IFNhbmRz 79270
U0hBUkU= 79271
Q2hhcnNldA== 79272
LndyaXQ= 79273
X1NVUw== 79274
IE1vcmVubw== 79275
IGJyb2Njb2xp 79276
IFZY 79277
YW1pY3M= 79278
LkdldFVzZXI= 79279
IENvbW1vZA== 79280
LnNjaGVtZQ== 79281
KHZz 79282
IGFuYWxvZ291cw== 79283
UHN5 79284
PWxpbmU= 79285
LnB1Ymxpc2hlcg== 79286
IG9ud2FyZA== 79287
0LXQutGB 79288
IERlYWxlcnM= 79289
IHRvQXJyYXk= 79290
IENob2ljZXM= 79291
0JTQvtCx0LDQsg== 79292
IGRlZmF1bHRNZXNzYWdl 79293
IGFncmVn 79294
IENvbmNhdA== 79295
SFY= 79296
IENpcmN1bGFyUHJvZ3Jlc3M= 79297
X3N2Yw== 79298
VEFC 79299
X2ZpbA== 79300
Lk1hcFBhdGg= 79301
emJ1cmc= 79302
IGdldFByb2R1Y3Q= 79303
IFZFUklGWQ== 79304
Lk1vbmdv 79305
IHB1bmRpdHM= 79306
cHVsc2U= 79307
bGljdGluZw== 79308
Z2lhdGFu 79309
IC4uLiI= 79310
IGZpeg== 79311
IGFudGlt 79312
IENoYXR0 79313
X1RZUEVERUY= 79314
R3V5 79315
CXRlc3Rz 79316
IFNsb3Zlbmlh 79317
IENvbW1hbmRMaW5l 79318
IGJlbmVmaWNpYXRpb24= 79319
IGJpbmRBY3Rpb25DcmVhdG9ycw== 79320
TlRBWA== 79321
LUNz 79322
IGNoYXJpc21hdGlj 79323
LmFsbG9j 79324
X25m 79325
IGFzc2F1bHRpbmc= 79326
INGC0LDQsdC70LjRhg== 79327
IGPDoWM= 79328
IFNjcm9sbHM= 79329
SEFT 79330
eXl5eU1NZGQ= 79331
IEdhbGU= 79332
IFByb3plbnQ= 79333
IFRob3JudG9u 79334
ZGVhbGVy 79335
IGV2aWN0aW9u 79336
IGFuYWxl 79337
4oCO 79338
PSIo 79339
IGVhZw== 79340
KCcnKTsKCg== 79341
IGNvbnRlbXBsYXRpbmc= 79342
aHlw 79343
YmVsdW0= 79344
IEZpdHM= 79345
IEV4YW1pbmVy 79346
IEJ1Y2M= 79347
IG1lbWJyYW5lcw== 79348
IGJyaWxsaWFudGx5 79349
IENlcmFtaWM= 79350
w6h2ZQ== 79351
IFBvdW5k 79352
IHRyZWFzdXJ5 79353
LicpOw0K 79354
CXRj 79355
ZWNha2U= 79356
Q3VycmVudFVzZXI= 79357
LmhhYmJv 79358
IHRyZWFzb24= 79359
IEZUQw== 79360
TVVY 79361
IG51bWJlcmluZw== 79362
UklB 79363
LS0pDQo= 79364
IGJlaWdl 79365
IEFydGVt 79366
YmFzZXM= 79367
X0JBTkQ= 79368
IFBhdmVs 79369
0YHRgtGA0YPQug== 79370
dGhlZA== 79371
X25icg== 79372
INCx0LDQtw== 79373
c2xpZGVVcA== 79374
IFRheGk= 79375
IGFxdWVs 79376
IE1pc2NlbGxhbmVvdXM= 79377
ZWx1 79378
IGluc3VsYXRlZA== 79379
IGFzc2V6 79380
LkNvbmZpZ3VyZQ== 79381
IHF1ZWxsYQ== 79382
IHBhcmFzaXRlcw== 79383
QXdheQ== 79384
ZHVjaWJsZQ== 79385
KCc9Jw== 79386
IHZlcm8= 79387
IFdhdGtpbnM= 79388
IFNlcGFyYXRvcg== 79389
YXBzZXM= 79390
ZW52aXJvbm1lbnRz 79391
IGFwcHJhaXNhbA== 79392
cGF1c2Vk 79393
X2RlYXRo 79394
IHNpdHVhY2nDs24= 79395
IGZyYXRlcm5pdHk= 79396
IGluc2lzdGVuY2U= 79397
X2NyeXB0bw== 79398
QXR0cmliUG9pbnRlcg== 79399
Il1dLAo= 79400
IG94aWRhdGl2ZQ== 79401
IG5ldXJvbmFs 79402
IFFHcmFwaGljcw== 79403
Ij4nLA== 79404
IFNtaWxl 79405
T2JqZWN0aXZl 79406
IFNha3VyYQ== 79407
Wk8= 79408
YW1pZW50b3M= 79409
LkxvY2FsRGF0ZVRpbWU= 79410
L3VuaXQ= 79411
LWZyZXF1ZW5jeQ== 79412
LUNT 79413
In07Cgo= 79414
IHJlbGV2 79415
QWxsb2NhdGlvbg== 79416
JU0= 79417
IER1c3Rpbg== 79418
IHN3aXBlcg== 79419
IE5hcmM= 79420
dGF0dXM= 79421
IGxvbmdpbmc= 79422
IHRodWlzb250dmFuZ3N0 79423
IGNvbW1vZG8= 79424
IEFEQQ== 79425
aW11 79426
X2ZvcnVt 79427
YW5naQ== 79428
CUFwcGxpY2F0aW9u 79429
W2Zyb20= 79430
IEJldGhlc2Rh 79431
b3Ryb3BpYw== 79432
IE1VQ0g= 79433
IHByZWRpYw== 79434
ZmlsbWU= 79435
KGdyYW1tYXI= 79436
KEFQUA== 79437
IEN1cmw= 79438
IHNob3J0aGFuZA== 79439
YWZmaWxpYXRl 79440
XSoq 79441
X250aA== 79442
aWFiaWxpdHk= 79443
Ym9tYg== 79444
WVQ= 79445
KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 79446
IEJpY3ljbGU= 79447
aW1hdGluZw== 79448
Lm5paQ== 79449
IEthcmE= 79450
YXNrYW4= 79451
cmVhY3RzdHJhcA== 79452
IHdsYW4= 79453
b2dyYXBoZXJz 79454
CSANCg== 79455
cGFnaW5hdG9y 79456
aWhhbm5h 79457
IG1hdGNodXBz 79458
X1BBRERJTkc= 79459
X3JlZ2lzdGVycw== 79460
eXRl 79461
IHByaWNleQ== 79462
IGZvb3Ro 79463
IEh1Y2s= 79464
UEFSVE1FTlQ= 79465
IHByb2hpYml0aW5n 79466
LmlzRGVidWdFbmFibGVk 79467
4KS4 79468
bGVpbg== 79469
PXJlcw== 79470
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 79471
ZGRs 79472
bXBy 79473
IOqwmQ== 79474
IFdBTEw= 79475
IHJldm9sdmVz 79476
IFBFUkY= 79477
KTt9 79478
IFRvYnk= 79479
Ly4uLw== 79480
IGthbw== 79481
IGZvcmVjYXN0aW5n 79482
X0NvbnRlbnQ= 79483
IH0pKSwK 79484
cG9ybm8= 79485
bGVhZGVycw== 79486
LWhvb2tz 79487
aXN0cmlidXRvcg== 79488
L3N0b3J5 79489
CWxpbmVz 79490
LXJlcGx5 79491
IGFkcmVuYWxpbmU= 79492
Rmxvd0xheW91dA== 79493
LnJvdXRpbmc= 79494
CXRpbWVvdXQ= 79495
IHJhaWRlZA== 79496
CURE 79497
IGRpc2RhaW4= 79498
Y29uc2lzdGVudA== 79499
Z2Vpc3Q= 79500
KCI6Lw== 79501
KHN0YXRlcw== 79502
IEhJVA== 79503
LVJheQ== 79504
LWhlYWx0aA== 79505
IC8vLQ== 79506
dGVtZW50 79507
Lm5hdmlnYXRlVG8= 79508
IGJlbmNoZXM= 79509
ZXdpbmc= 79510
ZW56aGVu 79511
LXNwbGl0 79512
UmVqZWN0 79513
IHB5bGFi 79514
IGZsYXNobGlnaHQ= 79515
IGluaXRpYXRpbmc= 79516
IE9FQ0Q= 79517
IGVudHJlZ2E= 79518
TmF0dXJl 79519
Lm9yYW5nZQ== 79520
IMO6bHRpbW9z 79521
IGVjcw== 79522
LmhvdmVy 79523
IGRlbHV4ZQ== 79524
Um9nZXI= 79525
IFRpYw== 79526
IixfXw== 79527
IHBsYWNlaG9sZGVycw== 79528
IHNwYXduaW5n 79529
IG51cnR1cmU= 79530
IGV4Y2hhbmdpbmc= 79531
Q3JlYXRlRGF0ZQ== 79532
IGxhbWlu 79533
IFNlbWljb25kdWN0b3I= 79534
ICovCgoKCg== 79535
IGbDuHJzdGU= 79536
IGluaXRpYWxz 79537
IHByb3ZlcmI= 79538
IEFjdHJlc3M= 79539
Q29uY2F0 79540
IE5pY29sYQ== 79541
LXNob3BwaW5n 79542
aXZpdMOg 79543
aXRpYW4= 79544
IFdlcnQ= 79545
LkFkZFNjb3BlZA== 79546
IHNhbGVzbWFu 79547
Ym9z 79548
IEZlcnJ5 79549
Q0VOVEVS 79550
bW9kZWxv 79551
IFJvZQ== 79552
IElzbGFuZGVycw== 79553
dXBlcnRpbm8= 79554
RGVjbGFyZQ== 79555
IHZvd2Vscw== 79556
IGJveGVy 79557
KHRvb2xiYXI= 79558
IGhhbGZ0aW1l 79559
bmlu 79560
IEJyb29rZQ== 79561
IFZlcw== 79562
0LvQsNGC 79563
IG1vdGl2bw== 79564
cHJvdGVpbg== 79565
a3Vz 79566
YnVzeQ== 79567
IHN0cmluZ1ZhbHVl 79568
CU15 79569
TnV0 79570
dXp6aQ== 79571
IHNleg== 79572
IG9sZHM= 79573
IG1ldGh5bA== 79574
IGLDvA== 79575
aGliYQ== 79576
IEluc3BpcmF0aW9u 79577
IGF3YWl0ZWQ= 79578
QnJ1Y2U= 79579
QkFMTA== 79580
IFRSWQ== 79581
LWxpdGU= 79582
IHVuZGVyZXN0aW1hdGU= 79583
CXJ2 79584
Lm1vdg== 79585
IGhpc3TDsw== 79586
IEVyaWU= 79587
Y25hbWU= 79588
L2Nvbm5lY3Q= 79589
Y29uZmVyZW5jZQ== 79590
X3RyYWl0 79591
IGt2aW5kZQ== 79592
IEludm9jYXRpb24= 79593
IERhdGVUaW1lT2Zmc2V0 79594
d2VjaGF0 79595
Q0VP 79596
IExpYnlhbg== 79597
LmNhcGl0YWxpemU= 79598
IGdyYWNlZnVsbHk= 79599
IHJlZWxz 79600
aW5jcmVhc2U= 79601
Lm1heGNkbg== 79602
ZmF2b3JpdGVz 79603
SVRFRA== 79604
PFNjYWxhcg== 79605
LkZldGNo 79606
IHN1c3BpY2lvbnM= 79607
W01BWE4= 79608
X1RSQU5TQUNUSU9O 79609
IGN5bGluZHJpY2Fs 79610
Lm5leHRFbGVtZW50 79611
IG1vcnBob2xvZ3k= 79612
IENlZA== 79613
IGNuYW1l 79614
KHJhd1ZhbHVl 79615
V2Fsa2luZw== 79616
TG9hZHM= 79617
X0FMSUdOTUVOVA== 79618
X1JPVU5E 79619
IFJPQ0s= 79620
Y2x1c3RlcnM= 79621
Img= 79622
dWV1cg== 79623
cGxhbnM= 79624
IGF0aGVpc3Rz 79625
IHZhdA== 79626
PSJfXw== 79627
YXdhaA== 79628
ZXJ2YXRpdmVz 79629
IGZpbmRPbmU= 79630
IG5vdGVib29rcw== 79631
IFRUTA== 79632
LkdldEFzeW5j 79633
IG3DvG5jaGVu 79634
bUFo 79635
YnJ0Yw== 79636
X1BZ 79637
QnVpbGRlckludGVyZmFjZQ== 79638
CWdiYw== 79639
IGJsYW5rcw== 79640
IGTDqW0= 79641
UmVjdXJzaXZl 79642
Lk1hbnlUb01hbnlGaWVsZA== 79643
X1BBUlNFUg== 79644
IGVuZGVhdm9ycw== 79645
IGRyaWI= 79646
X3BocA== 79647
IGF1dG9tb2JpbGVz 79648
bG9pdA== 79649
IE9ydGl6 79650
IFVE 79651
KGRBdEE= 79652
IE1pdHN1YmlzaGk= 79653
QXR0cmlidXRlVmFsdWU= 79654
IHBvYXRl 79655
55u45YWz 79656
IGNhdmFscnk= 79657
Lk1hdGNoZXJz 79658
IGluZ3Jlc3M= 79659
IEplaG92YWg= 79660
CXNlcQ== 79661
X3N0cmVldA== 79662
IFNvZmlh 79663
IHNjcm9sbHM= 79664
dmluY2Vz 79665
ZWxlY3Ryb25pY3M= 79666
XHBhcmFt 79667
IHplbmQ= 79668
IHNraW0= 79669
LnBpeA== 79670
ZW5r 79671
X2FyZWFz 79672
IEJvaXNl 79673
LXZhbGlkYXRvcg== 79674
IHVuZWFydGg= 79675
b2ZpbG0= 79676
IEJDRQ== 79677
b3Zza3k= 79678
IExldmVy 79679
IHBvbGljZW1hbg== 79680
IG1pZXM= 79681
IFBvcnRyYWl0 79682
IHBvdGlvbnM= 79683
X21vdA== 79684
bWFzc2FnZQ== 79685
0LXQvdGL 79686
IGN1ZA== 79687
IG1hbnVzY3JpcHRz 79688
Y29udGludW91cw== 79689
LnRj 79690
w7x6 79691
IEZyZWV6ZQ== 79692
Xzoq 79693
Lmht 79694
IENTUkY= 79695
IE3DpGRjaGVu 79696
LXBlZXI= 79697
IHB1dFN0ckxu 79698
IGltc2hvdw== 79699
IEB7JA== 79700
IEJhdWVy 79701
KHRvbHVh 79702
IHdyb3VnaHQ= 79703
IEdpYW4= 79704
IMO2bg== 79705
ZnVuZw== 79706
QnV0dG9uVGl0bGVz 79707
fSkiLA== 79708
IE11cmRvY2g= 79709
S1c= 79710
IFJlcG9ydGVk 79711
c2ll 79712
IG1laWxsZXVycw== 79713
IEthZXBlcm5pY2s= 79714
IGRzcA== 79715
IEV2ZXJ5ZGF5 79716
cmVuZHM= 79717
IENvbmNl 79718
IGluY29udHI= 79719
LnJlbW92ZUF0dHJpYnV0ZQ== 79720
44G+44GX44Gf 79721
IHJldw== 79722
IFByZXNlbmNl 79723
L2dpbg== 79724
LkNsYWltcw== 79725
CXNs 79726
RHJhZ2dpbmc= 79727
IHNwcmVl 79728
IGFjdHVhbGl6YXI= 79729
IG5vc3M= 79730
IGxpZmVzdHlsZXM= 79731
O2M= 79732
VURHRQ== 79733
SW5NaWxsaXM= 79734
IGl0aw== 79735
YWJieQ== 79736
KHBh 79737
aXNzZW50 79738
IFByZXNpZGVudHM= 79739
IEhleGF0cmlnZXNpbWFs 79740
ZWNpZGVk 79741
KHRleA== 79742
IGNyb3duZWQ= 79743
UGhpbGlw 79744
IFNhcms= 79745
IEFkZGl0aW9u 79746
IENvbGJlcnQ= 79747
IEdMRVM= 79748
IFFMaW5lRWRpdA== 79749
IGRyYWlucw== 79750
IHNvcnRPcmRlcg== 79751
ZXNjb3J0 79752
VGVk 79753
IG1hbmlmZXN0ZWQ= 79754
LnZhcmlhbnQ= 79755
IFJFRkVSRU5DRVM= 79756
KGdj 79757
L3sk 79758
b2N5dGU= 79759
IG9ybmFtZW50 79760
IGJvb2tzdG9yZQ== 79761
SG9s 79762
IFZhbGw= 79763
Lycp 79764
YWNhaw== 79765
IE5hdkJhcg== 79766
IG55ZQ== 79767
X0RlYw== 79768
b2x2aW1lbnRv 79769
TVJJ 79770
IGhvb3A= 79771
ICAgCiAgICAK 79772
IFBvc3Rpbmc= 79773
IG91dGxpbmluZw== 79774
YWdhc2Nhcg== 79775
LmJyZWFrcG9pbnRz 79776
Y2F0aWQ= 79777
X3RyaWdnZXJlZA== 79778
IHJ1bm5hYmxl 79779
L3RydW5r 79780
LWNoYWly 79781
IGJhaXNlcg== 79782
ZmFjaWxpdHk= 79783
IHBvbGxlbg== 79784
6Z+z 79785
IFtbIg== 79786
IENHU2l6ZU1ha2U= 79787
IGFzc2FpbA== 79788
IEF0aGVuYQ== 79789
IEFkZGljdGlvbg== 79790
aWxhbmQ= 79791
O2Jy 79792
LktleWJvYXJk 79793
X2Zt 79794
QWNl 79795
IFJFUQ== 79796
IE5ld2VzdA== 79797
Oy4= 79798
IE1BREU= 79799
c2V0VGltZW91dA== 79800
U2VydmxldENvbnRleHQ= 79801
CQkJCQkgICAgICAg 79802
IEx1cA== 79803
LXJldmlld2Vk 79804
IEFuYWx5emVy 79805
Lk5hTg== 79806
dXR1cmE= 79807
R2VvbQ== 79808
eW1lcw== 79809
X3Npbg== 79810
IHRydXN0ZWVz 79811
Ly89PT0= 79812
IGFkbWl0dGVkbHk= 79813
IGFrbw== 79814
IFVFRkE= 79815
X2hlcm8= 79816
R2l0aHVi 79817
X2VzdGltYXRl 79818
IGNvcnJvYm9y 79819
ZW50aWZ1bA== 79820
IFN0ZWVyaW5n 79821
IE1pdGFy 79822
IFBpcGVz 79823
IGvDpQ== 79824
X3NlYXNvbg== 79825
IEJDSFA= 79826
L3NvZnR3YXJl 79827
bmV0dGU= 79828
KiIs 79829
dW5kcmE= 79830
IGdldFJlcXVlc3Q= 79831
LkJ1ZmZlcmVk 79832
ZmVybg== 79833
TWFyaW8= 79834
IGRpc3BlcnM= 79835
X2NhdGVnb3JpYQ== 79836
IGVuZGxlc3NseQ== 79837
Z3VhcmRz 79838
CWF0b21pYw== 79839
c2NvcGVk 79840
IHVuZG9uZQ== 79841
U0hPUA== 79842
IFRvcmNo 79843
IEhhc3Rpbmdz 79844
IEZJTEVT 79845
X1NhdmU= 79846
V2l0aE1hbnk= 79847
V2lz 79848
IGludGVuc2lmaWVk 79849
LmFyZ3VtZW50 79850
IEFwaVNlcnZpY2U= 79851
IEpTSW1wb3J0 79852
ZWtp 79853
SW5zdXJhbmNl 79854
c3R5 79855
LmRzbA== 79856
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 79857
bHRyZQ== 79858
U0VH 79859
RFJBTQ== 79860
LWJsb2NraW5n 79861
0L3QtQ== 79862
cGlyaW5n 79863
IFBSRVM= 79864
IEZhY2g= 79865
IHNhcmM= 79866
IFNNRQ== 79867
IEVsZW0= 79868
IENhbGlmb3Ju 79869
VW5zYWZl 79870
IENvbXBvc2Vy 79871
KGRlcA== 79872
IEF0dGVuZA== 79873
ICopKCg= 79874
IHRlYXNlZA== 79875
IEFUSQ== 79876
KHBt 79877
ICIoXDw= 79878
J10r 79879
IHNlY3Rhcmlhbg== 79880
IFBoYXJtYQ== 79881
RUk= 79882
CVRva2VuTmFtZUlkZW50aWZpZXI= 79883
w6d1 79884
IGF1Z21lbnRhdGlvbg== 79885
IHNhamE= 79886
IGNvbG9yZQ== 79887
ZGVhZGxpbmU= 79888
LklURU0= 79889
IFJpeQ== 79890
bWFhbA== 79891
CWNsaWNr 79892
UGVybWFuZW50 79893
SG91c3Rvbg== 79894
UmVzcG9uc2l2ZQ== 79895
IEVyZ2Vibg== 79896
ICIlIg== 79897
LnRvT2JqZWN0 79898
CXBpZA== 79899
LlN1Ykl0ZW1z 79900
IFsr 79901
IGZ1bmd1cw== 79902
IGJyb2NodXJl 79903
IEFwcHJveGltYXRlbHk= 79904
IG1paw== 79905
dmVsb3Blcg== 79906
IHBhZ2FtZW50bw== 79907
5Yqo55Sf5oiQ 79908
IGN5dA== 79909
IFRlbXBs 79910
ZW5pYWJsZQ== 79911
IENvbmFu 79912
IHNldGJhY2s= 79913
b2JsaW5z 79914
IE5UTg== 79915
b3NzYWw= 79916
VkVSQk9TRQ== 79917
LmJpbw== 79918
IMWe 79919
4buf 79920
IEdyaXA= 79921
PCo= 79922
VFJJRVM= 79923
LmNob29zZQ== 79924
UGhvZW5peA== 79925
IHByb3ZpbmNpYQ== 79926
TUZMT0FU 79927
Q2Fycw== 79928
IHJldHJvc3BlY3RpdmU= 79929
IGFnb255 79930
IGxsZW4= 79931
IGJ1bXBlZA== 79932
eWxhdGlvbg== 79933
IHdhcnRv 79934
IHRvZGRsZXJz 79935
bGF2 79936
KHBhdGllbnQ= 79937
ICgpLT4= 79938
Y2xj 79939
IG9uQWN0aXZpdHlSZXN1bHQ= 79940
IGVtdWxhdGlvbg== 79941
IGJ1bGxk 79942
X0FVVEhPUg== 79943
Pk8= 79944
L3F1 79945
IMK2 79946
CWhy 79947
c3RkQ2xhc3M= 79948
IHNwYWNlcg== 79949
VHJhbnNsYXRlZg== 79950
LmFkag== 79951
Oml0ZW0= 79952
IGV4aGF1c3Rpbmc= 79953
cGx4 79954
IHJldml0YWw= 79955
xZtuaWU= 79956
IGNhbGlmb3JuaWE= 79957
c2V0U3RhdGU= 79958
L3RhYg== 79959
aW5kc2lnaHQ= 79960
X0xldmVs 79961
aW1pbGFy 79962
Lm5hdmlnYXRvcg== 79963
IHRlbXBlcmFtZW50 79964
IGRpZsOtYw== 79965
IGluZXhwZXJpZW5jZWQ= 79966
IGltcHJpbnQ= 79967
IFJlc2lzdA== 79968
X0ZPTExPVw== 79969
IFJldHJ5 79970
IGVuZ2FnZW1lbnRz 79971
Q2FuQmVDb252ZXJ0ZWQ= 79972
IHNpbmdsZWQ= 79973
Lmljb25z 79974
IGNvbmRvbXM= 79975
IEZlYXRoZXI= 79976
bGVybmVu 79977
KWI= 79978
IE5wZ3NxbA== 79979
IENvbnNvbGlk 79980
cGVrdA== 79981
56uv 79982
c3RyaW5nVmFsdWU= 79983
R2Ft 79984
IFNpbmFp 79985
IE9iamVjdFR5cGU= 79986
X2lucA== 79987
IHBhcnRp 79988
IFdhdGVycHJvb2Y= 79989
IGNvbGxpZGVk 79990
IGFpcnM= 79991
L3dvcmxk 79992
L1NlYXJjaA== 79993
X3N5bnRheA== 79994
xZ9p 79995
X2Fubm90YXRpb25z 79996
IFRhY28= 79997
TEFU 79998
IE9wY29kZQ== 79999
44CC4oCdCgo= 80000
IGxlYXNo 80001
IEFsaWNpYQ== 80002
77yM6buY6K6k 80003
IFRTQQ== 80004
IGhvdHRlcg== 80005
X0hhbmRsZVR5cGVEZWY= 80006
Z2luYXM= 80007
IGluZGlmZmVyZW50 80008
Q3VzdG9tTGFiZWw= 80009
kZA= 80010
b2R5bmFtaWNz 80011
T25VaVRocmVhZA== 80012
IENhcmE= 80013
LmRldmljZXM= 80014
IEZvcmVpZ25LZXk= 80015
PicpOw0K 80016
LmJ1dA== 80017
LnRpZg== 80018
IOaWsA== 80019
IE9rSHR0cENsaWVudA== 80020
KFRleHR1cmU= 80021
LlNPQ0s= 80022
KGluc3Ry 80023
bWlzdA== 80024
VW5uYW1lZA== 80025
U3I= 80026
Km51bQ== 80027
KE5VTQ== 80028
KioqKioKCg== 80029
L2hlbHA= 80030
YmVlbGQ= 80031
LmFkanVzdA== 80032
X1Bhcm1z 80033
X0FOR0xF 80034
VFJFRQ== 80035
IGVzdHVkaW8= 80036
d29ya3NoZWV0 80037
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== 80038
QWR2aWNl 80039
w7bDn2U= 80040
bkVudGVy 80041
YcSH 80042
IGFnZWluZw== 80043
IEt1cmRpc3Rhbg== 80044
X1JUQw== 80045
YmFua3M= 80046
LlVS 80047
IGluY2FybmF0aW9u 80048
IGdsYW1vdXI= 80049
IOOCuQ== 80050
IGltcGVyaWFsaXNt 80051
7J6F64uI64uk 80052
IHNpZGVsaW5l 80053
LkFycmF5QWRhcHRlcg== 80054
IyMjIyMjCg== 80055
IFN5cmlhbnM= 80056
IEF0dGVuZGFuY2U= 80057
LWVzcXVl 80058
IGdyZW5hZGVz 80059
X3Fvcw== 80060
T1ND 80061
X2Rvb3I= 80062
LkNhcA== 80063
REFM 80064
IGFtYnVzaA== 80065
CWVz 80066
VG9Kc29u 80067
TWFudWZhY3Q= 80068
RW1lcmdlbmN5 80069
IFFGaWxl 80070
IOWV 80071
CUxQ 80072
5pCc57Si 80073
IEdhcmxhbmQ= 80074
LmNvbm5lY3Rpb25z 80075
LlJlYWRGaWxl 80076
IEh3eQ== 80077
4oCUZXZlbg== 80078
eERF 80079
IG5vdXZlbGxlcw== 80080
IEh1c3M= 80081
RGVwb3NpdA== 80082
X2ZvcmVpZ24= 80083
YWJhag== 80084
IFBveg== 80085
ZGJ1cw== 80086
IGlvZA== 80087
w5cKCg== 80088
IENoZWVycw== 80089
SmVzc2ljYQ== 80090
IHNhaXNvbg== 80091
IFB0eQ== 80092
Ij48IS0t 80093
aW5vYQ== 80094
ZXhjbHVkaW5n 80095
IGJpdHRlcm5lc3M= 80096
dWVsaW5n 80097
UHJvdGVjdGlvbg== 80098
IEJlcmdlbg== 80099
CQkJIAo= 80100
QkVM 80101
IFRvYmlhcw== 80102
IHVwZA== 80103
67KE 80104
IGZvbGlhZ2U= 80105
X1BVUg== 80106
IEFkdm9jYXRl 80107
IG9uUmVxdWVzdA== 80108
LnBhcnRpdGlvbg== 80109
IERldmVsb3BlZA== 80110
IGNyaWI= 80111
0YHQutC4 80112
dm91Y2hlcg== 80113
IEludGVyc2VjdGlvbg== 80114
IG5pZWNl 80115
IGxr 80116
IENhdWN1cw== 80117
KFsNCg== 80118
IERldGVjdG9y 80119
L2xn 80120
IEhlZGdl 80121
IHNsdWdn 80122
YW5nc3Ryb20= 80123
IENvbnRyb2xsZXJCYXNl 80124
CXl5 80125
LnBw 80126
IEtsaW5n 80127
IExUUw== 80128
4oaT 80129
YXJyYQ== 80130
Z2V0SlNPTg== 80131
X3dlYnNpdGU= 80132
IGlkaW90cw== 80133
IE1lZ2hhbg== 80134
QnV0dG9uTW9kdWxl 80135
ICU+ 80136
IHByb2plY3RpbGVz 80137
c3dvcmQ= 80138
ICAgIAkJCQkJ 80139
IGFzc2Vz 80140
IFN1Y2hl 80141
IGtlZA== 80142
csOhZg== 80143
IHNhcsOg 80144
TEVuY29kZXI= 80145
UkFORA== 80146
IFNvbWVob3c= 80147
IFNhbGE= 80148
IG11bHRpbQ== 80149
IG51bVJvd3M= 80150
IFJvY2tpZXM= 80151
IHhk 80152
IGRpc3Byb3BvcnRpb25hdGU= 80153
CVJUTEk= 80154
CVVSTA== 80155
YWdsaQ== 80156
IFN1YkxPYmplY3Q= 80157
IEdyYXZlcw== 80158
X3JlZ3VsYXJpemVy 80159
X2NoYXJhY3RlcnM= 80160
LmFuYWx5dGljcw== 80161
Lm1vZHM= 80162
IGltcHJvdmlz 80163
IEJsb2NrUG9z 80164
X2luc3RhbGxlZA== 80165
X0NPTlRJTlVF 80166
L2Rvd24= 80167
U09D 80168
LmFwaVVybA== 80169
LlVzZXJTZXJ2aWNl 80170
VHJlZXM= 80171
5oqV 80172
X292ZXJmbG93 80173
YXVzYWw= 80174
Ym94ZWQ= 80175
Jgo= 80176
IEphY3F1 80177
X3Vzcg== 80178
SU5UUg== 80179
IHNpZ25hZ2U= 80180
IGNvY2g= 80181
Tm9ybWFsaXplZA== 80182
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo= 80183
IHN1c3RhaW5pbmc= 80184
IFNjcmFw 80185
cHJhYWs= 80186
LWF2YXRhcg== 80187
LndlYnNpdGU= 80188
KGd1aQ== 80189
PXJlc3BvbnNl 80190
KG9wZXJhdG9y 80191
IGVmZm9ydGxlc3M= 80192
IEFjdGlvbkJhcg== 80193
RkZF 80194
56uL 80195
CVJlZ2lzdGVy 80196
QVJTRQ== 80197
KW4= 80198
IE1PU1Q= 80199
X1NQUg== 80200
X0NISVA= 80201
YXNk 80202
IHRvcExlZnQ= 80203
IFR4dA== 80204
0LDQttC0 80205
LlZvbHVtZQ== 80206
IGlubGV0 80207
IGZyYWN0dXJlZA== 80208
IExvbmdpdHVkZQ== 80209
IERyYW0= 80210
LkNvbm5lY3Rpb25TdHJpbmdz 80211
YWJlZQ== 80212
cGVyYXRl 80213
am5p 80214
YHQ= 80215
ZmluZ2Vy 80216
IEplc3NpZQ== 80217
LGxs 80218
IFJ1ZHk= 80219
IGdlbmVyb3VzbHk= 80220
X0NPTlZFUlQ= 80221
IGVpdXNtb2Q= 80222
IERhaQ== 80223
aW1hZ2lu 80224
IEdPYmplY3Q= 80225
IMSRw6M= 80226
aWRpb3Vz 80227
cmlkZ2Vk 80228
IHNvcHI= 80229
0LvQsNC0 80230
IHN0aXRjaGluZw== 80231
IGtyYg== 80232
CiAgICAgICAgCiAgICAgICAgCg== 80233
IGxhdmlzaA== 80234
IENpdg== 80235
U3RhcnRFbGVtZW50 80236
IExvbA== 80237
CXV0aWw= 80238
J11dLg== 80239
IE1hbGF5 80240
IC4NCg== 80241
548= 80242
X0ludm9rZQ== 80243
aXZpc3Q= 80244
RGVwZW5kaW5n 80245
KSI7DQo= 80246
IHRvZnU= 80247
IE1DUA== 80248
IHN0b2NraW5n 80249
IGNhdGhlZHJhbA== 80250
IHF1YWRyYXRpYw== 80251
YWxlemE= 80252
Lm1vdmVUb0ZpcnN0 80253
Q29sb3JCcnVzaA== 80254
IEVyZWN0 80255
IFJDUw== 80256
OmJlZm9yZQ== 80257
PW5vZGU= 80258
IHByb2Jsw6htZQ== 80259
X3Jobw== 80260
IHN2ZW5zaw== 80261
Um95 80262
YmFzZVBhdGg= 80263
IGtvbmQ= 80264
INC10YHRgtGM 80265
Z2V0U2luZ2xldG9u 80266
IERTTQ== 80267
SWFu 80268
IGh1bnRlZA== 80269
IFRlcnJhY2U= 80270
IGNoaWxkY2FyZQ== 80271
IGNvZWZmcw== 80272
IGdyYWRlZA== 80273
IEx1Y2lh 80274
IGpzb25PYmo= 80275
YWJsZU9iamVjdA== 80276
VmF1bHQ= 80277
w61zdGljYQ== 80278
X3BhZ28= 80279
X1BG 80280
YW5kcmU= 80281
IEFuYXRvbXk= 80282
LkpDb21ib0JveA== 80283
b3VyZQ== 80284
IGdlbm90eXBl 80285
YmVuY2htYXJr 80286
IGJhaWs= 80287
IFF1w6liZWM= 80288
KCkpDQoNCg== 80289
IGt1bm5l 80290
IFBvc3NpYmx5 80291
IEJlaXNwaWVs 80292
IGNvbmRvbGVuY2Vz 80293
PXF1ZXJ5 80294
IHbDtQ== 80295
IG51ZXZhcw== 80296
IEFwb2NhbHlwc2U= 80297
dmVjdGlvbg== 80298
CXNwcml0ZQ== 80299
bGV2YXRvcg== 80300
LiJdCg== 80301
Z2V0TmV4dA== 80302
KFJlZ2lzdGVy 80303
IHVuc3Vi 80304
dHJlZXZpZXc= 80305
Tm9kZUlk 80306
IOyK 80307
JikK 80308
Zmx0 80309
IGhvdHNwb3Q= 80310
IGdhc3Ryb2ludGVzdGluYWw= 80311
ZmlnY2FwdGlvbg== 80312
b3dlcmVk 80313
IENzcw== 80314
X3Jvcw== 80315
X3NjYWxpbmc= 80316
IGVkaXRhcg== 80317
J11dKTsK 80318
Lm5lZw== 80319
IGZ1dHVyaXN0aWM= 80320
IHN0YXRh 80321
dWN0b3I= 80322
VUxBVEU= 80323
IHfFgg== 80324
LWNoYXJhY3Rlcg== 80325
ICAKCgo= 80326
IEJlYXU= 80327
IHBlcm1hbGluaw== 80328
Qnl0ZUJ1ZmZlcg== 80329
IGRpY3RhdGVz 80330
IE1MQQ== 80331
X0xvZ2lu 80332
Q29uZGl0aW9uYWw= 80333
U1lN 80334
QXJyYW5nZQ== 80335
IFN0b2Nrcw== 80336
IG1lYXNsZXM= 80337
4KSk 80338
RW5jcnlwdGlvbg== 80339
IEVudGlyZQ== 80340
IG1pbk9jY3Vycw== 80341
IGh1Z3M= 80342
L3dpbmRvdw== 80343
CXByb3A= 80344
PSQoKA== 80345
IFVDUw== 80346
IEZpcg== 80347
LkNsb2Nr 80348
LWRlc2t0b3A= 80349
IG1hbGZvcm1lZA== 80350
IEFiZXJkZWVu 80351
IMOF 80352
IFJvYWRz 80353
IEJlaGF2aW91cg== 80354
KCkn 80355
5bGe5oCn 80356
LkNvbXBhcmF0b3I= 80357
X21v 80358
X0lPUw== 80359
IE9yaW9sZXM= 80360
Lkxvb2t1cA== 80361
IGZzZWVr 80362
X0lC 80363
L3N0YXI= 80364
Kzwv 80365
X0Rlc3Ryb3k= 80366
LXRyYQ== 80367
KCcuJyk= 80368
IEZvckNhbkJlQ29udmVydGVk 80369
IEZvckNhbkJlQ29udmVydGVkVG9G 80370
IEZvckNhbkJlQ29udmVydGVkVG9Gb3JlYWNo 80371
IEFhZA== 80372
IGFpcnN0cmlrZXM= 80373
aXNPaw== 80374
IGZlZGVyYXRpb24= 80375
IExhYnJhZG9y 80376
X2xhdW5jaGVy 80377
YWxvZ3k= 80378
Pj4oKTsKCg== 80379
IEp1Yg== 80380
dXRy 80381
aXN0aW5ndWlzaGVk 80382
YWJhbnQ= 80383
UmVnaW9ucw== 80384
L2hlbHBlcg== 80385
X2xpc3Rlbg== 80386
CVRvYXN0 80387
IEZpbGVNYW5hZ2Vy 80388
aXRvcmlz 80389
IGVsZWN0cm9kZXM= 80390
R1JBREU= 80391
IGJlZ2dlZA== 80392
IFBsYXRlcw== 80393
YWZvbmU= 80394
ISEhCg== 80395
IGVieA== 80396
IGRlZmF1bHRQcm9wcw== 80397
IGNvbXBhcmVUbw== 80398
IFNDQw== 80399
LmV4dGVudA== 80400
YXV0b3M= 80401
IOyW 80402
IFRvbGtpZW4= 80403
OjoqOwoK 80404
Kics 80405
LmRvY3VtZW50cw== 80406
c2luZw== 80407
PUJpdENvbnZlcnRlcg== 80408
IEtyaXNobmE= 80409
IHBsYWlzaXI= 80410
IGJ1Z2d5 80411
IHJlZ3VsYXRlcw== 80412
IGZyaWRheQ== 80413
IGNvbXBsZXRlbmVzcw== 80414
IGF1ZGlibGU= 80415
IFJlY29nbml0aW9uRXhjZXB0aW9u 80416
IHNoZWRkaW5n 80417
W10pewo= 80418
KGJhbGw= 80419
IENoYXRDb2xvcg== 80420
KENvZGU= 80421
KCksCgo= 80422
IHRlcnRpYXJ5 80423
IFNJREU= 80424
KEpTT05PYmplY3Q= 80425
pOaWrQ== 80426
UmVtYXJrcw== 80427
IGxpc3RCb3g= 80428
LmltYWdlVXJs 80429
IGRlbGF5aW5n 80430
IHNvY2lvZWNvbm9taWM= 80431
Lmxw 80432
PE15 80433
Lm9uU3RhcnQ= 80434
IFNjb3I= 80435
Ynl0ZXJpYW4= 80436
LXJvY2s= 80437
X21ldGVy 80438
IHJlcG1hdA== 80439
IHByZWd1bnRh 80440
IE1FVEE= 80441
KGd0 80442
IEZSSUVORA== 80443
IHNvcnRl 80444
IGhlcA== 80445
b25vbWllcw== 80446
IGF1dG9tw6F0 80447
IEZvcm1hdHM= 80448
c3RhdGVQcm92aWRlcg== 80449
LWZsb29y 80450
X01VWA== 80451
KENvbnRlbnQ= 80452
IElOU1RBTEw= 80453
IFRpdGFuaXVt 80454
cnVj 80455
LkRhdGFzZXQ= 80456
YXNjbw== 80457
Lk1BVENI 80458
IGZlc3Rpdml0aWVz 80459
TVNO 80460
Lm90 80461
IEdldExhc3RFcnJvcg== 80462
aWVucw== 80463
IF9fX19fX19fX19fX19fX19fXwoK 80464
X0dG 80465
X3BsYXRl 80466
IEZvcm1hbA== 80467
LWxldHRlcg== 80468
S2F0ZQ== 80469
YXBpYQ== 80470
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K 80471
L2dlbmVyYXRlZA== 80472
IERpbmc= 80473
IEZyaWVkcmljaA== 80474
ICcpJw== 80475
VUJMSVNI 80476
IEFiaWxpdGllcw== 80477
IHVubG9ja2luZw== 80478
Lnl5 80479
IEludGVycg== 80480
bm90aHJvdw== 80481
aXBvcA== 80482
IENPUlBPUg== 80483
W2FycmF5 80484
PFdlYkVsZW1lbnQ= 80485
X1NJRA== 80486
LnF1YWw= 80487
RGlhZ25vc3RpYw== 80488
OiIiLAo= 80489
KG1vbWVudA== 80490
anVyZWQ= 80491
IHRlcnJlc3RyaWFs 80492
ZXJ1bGU= 80493
ICYpOwo= 80494
IGJ1cmVhdWNyYXRpYw== 80495
b3BwaW5z 80496
IGphcG9u 80497
bGVvbg== 80498
X3JlbmFtZQ== 80499
X0RFU1RST1k= 80500
LkVuZHNXaXRo 80501
IGVydXB0aW9u 80502
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K 80503
UEVU 80504
X3JlbG9hZA== 80505
IHN1cHBsZW1lbnRhcnk= 80506
IHppZW4= 80507
Q0xMb2NhdGlvbg== 80508
IGtsZWlu 80509
X2Vm 80510
Ont9 80511
IGNvbWVudGFyaW9z 80512
KHZhbGlkYXRpb24= 80513
Lnh0ZXh0 80514
X0lNQUdFUw== 80515
LnNldElucHV0 80516
IERlY29tcGlsZWQ= 80517
X1RCTA== 80518
Y29tcGxleFR5cGU= 80519
X2ZlYXR1cmVk 80520
ID8+PD8= 80521
LnZvdGU= 80522
IEZyaWRheXM= 80523
LmNvbnN1bWU= 80524
Lk1FRElB 80525
IHN5bmVyZw== 80526
jpjsnbTsp4A= 80527
X0hFQURFUlM= 80528
eEFD 80529
X252 80530
zq0= 80531
IFNpbW9uZQ== 80532
Q2VycmFy 80533
YWRkb2Nr 80534
LnNlcmlhbGl6ZXI= 80535
IENsYXNzaWZpZWQ= 80536
Lkl0ZW1zU291cmNl 80537
IHByZWNvbmRpdGlvbg== 80538
44Gd44GX44Gm 80539
RElTVA== 80540
SW1hZ2VVcmw= 80541
L3JhbmRvbQ== 80542
IGVyw7N0 80543
W3Jvb3Q= 80544
QUxMRVJZ 80545
Y2o= 80546
eEFE 80547
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo= 80548
IGl0YWxpYW5p 80549
fCM= 80550
IHJlZ2VuZXJhdGU= 80551
IHN0cnI= 80552
KHx8 80553
IEVtZXJzb24= 80554
IFBJRQ== 80555
Y2xpZmZl 80556
CWFu 80557
PlBhc3N3b3Jk 80558
dG9EYXRl 80559
Q2lwaGVy 80560
IGNvbnZveQ== 80561
IFhDVEFzc2VydFRydWU= 80562
L19f 80563
LWZvY3Vz 80564
IFJoaW5v 80565
IGdvbw== 80566
IGJvdG9u 80567
Lk5vU3VjaA== 80568
IFJlZHVjZWQ= 80569
TUlTUw== 80570
IFdpbmNoZXN0ZXI= 80571
dXJsZW5jb2Rl 80572
IG11ZGR5 80573
aXlh 80574
IE1icHM= 80575
IHN0YWw= 80576
b2RhZm9uZQ== 80577
5Lus 80578
IHBo4bqpbQ== 80579
ICIvIjsK 80580
IEFtbW8= 80581
TmV3UHJvcA== 80582
ID0KCg== 80583
INCf0YA= 80584
IHBheg== 80585
IGxpYmVybw== 80586
CVJlc291cmNl 80587
bmVpZ2hib3Jz 80588
LHJlc3BvbnNl 80589
X2F0dGVtcHRz 80590
IG5r 80591
IG1pbGl0aWFz 80592
X1BBWUxPQUQ= 80593
LkJ5dGVTdHJpbmc= 80594
INGB0L7QtNC10YDQtg== 80595
YXJ0b24= 80596
PkhlbGxv 80597
bGlnaHRseQ== 80598
b3dlbGw= 80599
IGd1YXJkaW5n 80600
IFRPSw== 80601
IHdoZXJlYWJvdXRz 80602
X2R3 80603
IFJvdWxldHRl 80604
IGd5cg== 80605
IEZlZG9yYQ== 80606
LkJ1dHRvbnM= 80607
IGV4Y2xhaW1lZA== 80608
IFNvbW1lcg== 80609
QXV0aEd1YXJk 80610
LXJhdGluZw== 80611
TWV0aG9kQmVhdA== 80612
LnBvc2l0aW9ucw== 80613
TWVkaWFu 80614
LuKApgoK 80615
IGdsYWM= 80616
IHVuZGVybWluZWQ= 80617
JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQ== 80618
X3RoaXJk 80619
LmtlZXA= 80620
IGhheWE= 80621
IHRvSlNPTg== 80622
IExhdXJpZQ== 80623
IAkgICA= 80624
IEFjY3Vt 80625
IHBydW5l 80626
dXJ2ZWQ= 80627
IE5TRg== 80628
IEdyYXBl 80629
RkxJQ1Q= 80630
6LI= 80631
IHByZWRpcw== 80632
X3B0cnM= 80633
IG11bHRpY2FzdA== 80634
KEdyb3Vw 80635
IGhlacOf 80636
IGZlZGVyYWxseQ== 80637
X1BBVVNF 80638
IG1hbGF5c2lh 80639
IFJlY2FsbA== 80640
IHJvZHo= 80641
IFNlbnRlbmNl 80642
aW50ZWw= 80643
X2RydmRhdGE= 80644
LXNjZW5lcw== 80645
PHk= 80646
IGZvb2xlZA== 80647
IExvdWQ= 80648
IGFudGl2aXJ1cw== 80649
LnBsaXN0 80650
IHZlcndlbmRlbg== 80651
IFdvbGZl 80652
KWl0ZW0= 80653
IHR3aXN0aW5n 80654
IGVzcGFu 80655
YXRlcm5v 80656
IEFjY29yZA== 80657
KCldLA== 80658
UkVNT1ZF 80659
ZGVoeQ== 80660
X1ByZQ== 80661
IG1pc2Nhcg== 80662
dmxh 80663
IHNlbWJs 80664
IHRldGhlcg== 80665
IEJpag== 80666
LycKCg== 80667
IENvcGllcw== 80668
LXBhdHRlcm4= 80669
Lm9uVmlldw== 80670
LXRha2luZw== 80671
X3NpbXBz 80672
44GX44GL44GX 80673
IERBQ0E= 80674
b3JuaW5n 80675
IFBlc3NvYQ== 80676
b3JueQ== 80677
X3Bhcw== 80678
IGVpZ2h0eQ== 80679
VGFj 80680
X1NUT0NL 80681
LmxvY2F0aW9ucw== 80682
Iil9LAo= 80683
IHTDoQ== 80684
LWZpZWxkcw== 80685
b2thbmU= 80686
L2t1YmVybmV0ZXM= 80687
IGNoaWNh 80688
IGFydMOtY3Vsbw== 80689
7II= 80690
Q1JFQVNF 80691
QVNB 80692
IExvbmQ= 80693
IGV4ZW1wbG8= 80694
QWxsb3dz 80695
aHRtbHNwZWNpYWxjaGFycw== 80696
KHZpcw== 80697
IGpy 80698
54Gr 80699
IEVDTQ== 80700
IGVtYmFy 80701
X0FEQVBURVI= 80702
IGRpbHV0ZWQ= 80703
X29mZmljZQ== 80704
IHNraW5jYXJl 80705
QUdJTkc= 80706
IMO+ 80707
IFNNQVJU 80708
L1RhYmxl 80709
IGJhc2Fs 80710
Q29uY3VycmVuY3k= 80711
IFZveA== 80712
IFVJQ29sbGVjdGlvblZpZXdDZWxs 80713
IHdvbA== 80714
IFNPVVRI 80715
IGZyb21EYXRl 80716
IGNvcmRz 80717
RU1T 80718
LndlaXhpbg== 80719
J2VsbGU= 80720
IOWx 80721
IGdvYWx0 80722
dWli 80723
IE5lcHR1bmU= 80724
KG9yZA== 80725
xLFuxLFu 80726
IG1pY3JvYmVz 80727
V2VhcG9ucw== 80728
LURlYw== 80729
IFJvb25leQ== 80730
IFN3YWdnZXI= 80731
66qF 80732
X2xh 80733
IGdlbmVyYWRv 80734
IEhpcg== 80735
Q29taWM= 80736
IGNhcnZl 80737
X3Jx 80738
aWN0ZXI= 80739
IGNhcnRlbA== 80740
YW5jaWFz 80741
IFBhbmFzb25pYw== 80742
IHJvYWRzaWRl 80743
IGZyZXNod2F0ZXI= 80744
IGRiYw== 80745
X3RleHRz 80746
X3NrdQ== 80747
IFN1bW1lcnM= 80748
IFBpY3R1cmVCb3g= 80749
Lmdyb3VwQ29udHJvbA== 80750
VkFSQ0hBUg== 80751
UmVMVQ== 80752
IHNhYm90YWdl 80753
DQogICAgICAgICAgICANCg== 80754
IHNjcm9sbGJhcg== 80755
IGJhdHRlcmVk 80756
Y2lw 80757
LXBpY3R1cmU= 80758
CXN0YXRz 80759
LmNyZWF0b3I= 80760
X0NMRUFO 80761
Lk1PRA== 80762
IGJpZ2ludA== 80763
IFRlcnJvcmlzbQ== 80764
X1Nob3c= 80765
IFNwaWNlcg== 80766
X0VUSA== 80767
IMSR4buD 80768
IHN1bW1lcnM= 80769
IFVyYW4= 80770
L21lbW9yeQ== 80771
UmV2aWV3ZWQ= 80772
IGR1ZXM= 80773
c2V0U2NhbGU= 80774
IFJheXM= 80775
IENTQw== 80776
aW5jb21pbmc= 80777
LWJ1eQ== 80778
IHByb2N1cmU= 80779
ZW50YXI= 80780
IGJ1bGxz 80781
IAkJCQkJCQ== 80782
IEZpYm9uYWNjaQ== 80783
LXNjaGVtYQ== 80784
bWFrZXM= 80785
RWY= 80786
X0Rlc2NyaXB0aW9u 80787
L2FsZXJ0 80788
IGpzb25TdHJpbmc= 80789
dWZmbGluZw== 80790
IEtFUk5FTA== 80791
IEhveQ== 80792
IGdyYW50UmVzdWx0cw== 80793
b25hbGQ= 80794
IFByb3ZpbmNpYWw= 80795
c2VuZGluZw== 80796
cHRvbQ== 80797
INCe0LE= 80798
IGNvbnN0cmFpbg== 80799
IMWhdG8= 80800
IFJhaXNlZEJ1dHRvbg== 80801
VVRET1dO 80802
IEdMc2l6ZWk= 80803
IOekug== 80804
44OR 80805
IEdvbg== 80806
UExJRVI= 80807
J119PC8= 80808
Y2xhc3NpYw== 80809
IGVuZ3JhdmVk 80810
IG1hc2N1bGluaXR5 80811
TWFyc2g= 80812
c3NxbA== 80813
KEdyYXZpdHk= 80814
IGxvYnN0ZXI= 80815
67aE 80816
X0ludGVy 80817
XGJhc2U= 80818
JzpbJw== 80819
IGRldGFsbGU= 80820
dHdlZXRz 80821
IGplYWxvdXN5 80822
YWdlbmRh 80823
LGl0 80824
c3dpcmU= 80825
K0I= 80826
IHRyb3V0 80827
X2FsdGVybg== 80828
OiIj 80829
IER3YXJm 80830
IFNoYXBpcm8= 80831
ZXJvb24= 80832
IG5vaw== 80833
X2xvbmdpdHVkZQ== 80834
IFdlcm5lcg== 80835
IHZpb2xldA== 80836
dXJzaXZlbHk= 80837
LWF3YWl0 80838
IH0KCgoKCgo= 80839
IExlbm5vbg== 80840
IEFudGFyY3RpYw== 80841
IGLDpWRl 80842
X3Nsb3Bl 80843
bWFuZG8= 80844
b3VuY2Vy 80845
LWlvbg== 80846
IERlc3RydWN0aW9u 80847
aXNzZW5zY2hhZnQ= 80848
UGl6emE= 80849
IEdlb2xvZ2ljYWw= 80850
Qk9VTkQ= 80851
IGNpbmU= 80852
RGVtb24= 80853
LnBlb3BsZQ== 80854
X1RPR0dMRQ== 80855
CW5vZGVz 80856
YnVzY2Fy 80857
LnByb2Nlc3Nvcg== 80858
Tmg= 80859
L3Nkaw== 80860
IG15Y2tldA== 80861
YXVjdGlvbg== 80862
TWVn 80863
R01FTQ== 80864
IGlyb25pY2FsbHk= 80865
5riF 80866
IGNvbnZlcmdl 80867
IFVJVGFibGVWaWV3RGF0YVNvdXJjZQ== 80868
QXJkdWlubw== 80869
PmU= 80870
Sm95 80871
IFNob3VsZGVy 80872
IER1Yw== 80873
UFJJTUFSWQ== 80874
Lioo 80875
LXByZXM= 80876
IGRpYWxvZ1JlZg== 80877
aW1hZ2VOYW1l 80878
X2ludm9rZQ== 80879
XFRlbXBsYXRl 80880
T0k= 80881
IHZyaWVuZA== 80882
IEd1ZXJy 80883
IHByZXJlcXVpc2l0ZQ== 80884
IFBHQQ== 80885
IFJlc3A= 80886
KSIsIg== 80887
bGxlbg== 80888
IHNuYXBwaW5n 80889
X0ZpcnN0 80890
S0lU 80891
LnNldEZvY3Vz 80892
IEN5cHJlc3M= 80893
Y3JhZnRlZA== 80894
LzsK 80895
d2VpZ2h0ZWQ= 80896
dm95 80897
X3RG 80898
X2luc24= 80899
IEluc3RhbGxpbmc= 80900
IEdhbGx1cA== 80901
QURPUg== 80902
IEFMT0c= 80903
Q29udGV4dEhvbGRlcg== 80904
IFRvdXQ= 80905
IEZvbGV5 80906
IGNvbnRlbXBsYXRl 80907
IENvaW5iYXNl 80908
WMOj 80909
d2FuZA== 80910
LkNyZWF0ZUNvbW1hbmQ= 80911
U29jaw== 80912
IHVud3JhcA== 80913
Y2xhc3NwYXRo 80914
PFJlc291cmNl 80915
X0VTVA== 80916
PXJhbmRvbQ== 80917
IFNoYWRl 80918
IGRpY2k= 80919
2K/Zig== 80920
IGtpdHR5 80921
0LDRgtC10LM= 80922
4buNbg== 80923
LkNvbXBsZXRlZA== 80924
cGxvcmVy 80925
IGJhYmVs 80926
Lk9uSXRlbUNsaWNrTGlzdGVuZXI= 80927
IE1jTWFob24= 80928
IHJlc3RUZW1wbGF0ZQ== 80929
IHRlc3M= 80930
U2V0VXA= 80931
L29jdGV0 80932
IGNhbGFt 80933
IGhpbmdlcw== 80934
IGFydGVyaWFs 80935
IFRydW1hbg== 80936
IENoZXJ5bA== 80937
X0REUg== 80938
IHRtcGw= 80939
IExlcg== 80940
W2hhc2g= 80941
S0VS 80942
IHByb3BvcmNpb24= 80943
IGNvYXN0bGluZQ== 80944
YWNpb3M= 80945
Ij4tLX19Cg== 80946
IGRpc2FkdmFudGFnZWQ= 80947
VG91Y2hMaXN0ZW5lcg== 80948
IFNlZ2E= 80949
Y29lcw== 80950
SWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbg== 80951
PEJveA== 80952
IEluY3JlZGlibGU= 80953
VXBkYXRlcg== 80954
RkxU 80955
aW5hbWU= 80956
IEludGVyZmFjZXM= 80957
Kylc 80958
ZW5kaW1lbnRv 80959
IHBhbmNha2Vz 80960
IGluY29uc2lzdA== 80961
LnBldA== 80962
IGtleW9m 80963
SW5uZXJUZXh0 80964
Picp 80965
RGVhbg== 80966
IFDDqQ== 80967
KENvbnRyb2w= 80968
IHNwYXI= 80969
bGluaWs= 80970
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 80971
IERhbmU= 80972
X1BBR0VT 80973
IHNldEJhY2tncm91bmRDb2xvcg== 80974
c3ViY2F0ZWdvcnk= 80975
IFN0cmluZ1NwbGl0T3B0aW9ucw== 80976
QWxsZW4= 80977
ISgie30iLA== 80978
hOyerA== 80979
IGJhYw== 80980
X1BST0RVQ1RT 80981
dXBwZXJjYXNl 80982
PSQoIiM= 80983
xJlr 80984
IFVJVGFwR2VzdHVyZVJlY29nbml6ZXI= 80985
TUVUQQ== 80986
IHNjYXJjZWx5 80987
6aA= 80988
X21hbmFnZWQ= 80989
IGNvbnN1bW8= 80990
TW91c2VNb3Zl 80991
IFNwZWNz 80992
IFNlYXJjaGluZw== 80993
SGVhZGVyVmlldw== 80994
Oicp 80995
IG1pY3Jvc29mdA== 80996
IEtvc292bw== 80997
ZW1hbm4= 80998
LmZmdA== 80999
IEh1YmJhcmQ= 81000
IGRleA== 81001
X1RFUk1JTg== 81002
X0ZD 81003
IHBoaWxpcHBpbmVz 81004
XENvbGxlY3Rpb25z 81005
IHRlaA== 81006
IHF1YWxpZmllcw== 81007
IGlucHV0VmFsdWU= 81008
IEdPVA== 81009
KHNh 81010
SUxMRUQ= 81011
IHNsYW5n 81012
IGtlaW5lbg== 81013
IGZlbG9u 81014
IEVyaWNr 81015
YWJpbGlkYWRl 81016
LnNlcg== 81017
IHJ1bmVz 81018
IFVucmVhbA== 81019
KG9y 81020
IOusuOyekA== 81021
IGJpZGk= 81022
IGlyYw== 81023
CWl0ZXI= 81024
Im5pbA== 81025
L3VidW50dQ== 81026
IG11cmRlcmluZw== 81027
ID8u 81028
dW5rZXI= 81029
UmVjdFRyYW5zZm9ybQ== 81030
JykpCgoK 81031
IGFyaXR5 81032
IEZyZWVs 81033
Lm1vdW50 81034
Q09NTUVOVA== 81035
ICIqIiw= 81036
ZW5jcnlwdGlvbg== 81037
W21vZGVs 81038
In19Pgo= 81039
LlRvdWNo 81040
L3RodW1i 81041
IHByZXo= 81042
L2NvbXBhbnk= 81043
IHLDs8W8 81044
IHNvZnRlbg== 81045
IHBvc3NpYmlsZQ== 81046
IEVDQg== 81047
X0Jvb2w= 81048
IC0tLS0tCg== 81049
IGludGVydHc= 81050
X3N0YQ== 81051
X0JBTA== 81052
Lm5hdmlnYXRpb25CYXI= 81053
IFJHQkE= 81054
Z3JpbHk= 81055
c3RvZmY= 81056
YWNreQ== 81057
UUI= 81058
QEFwaQ== 81059
cGVjaWE= 81060
IFJwYw== 81061
IGFtcHM= 81062
IEZlbmNl 81063
IGdlbm9taWM= 81064
KGFsaWFz 81065
Vmllbg== 81066
U3BpbkJveA== 81067
LmdldFNlY29uZHM= 81068
IGdsb2JhbGl6YXRpb24= 81069
IGN1cw== 81070
a3ViZWN0bA== 81071
IHRocm90dA== 81072
IGluZXJ0 81073
IFNjcmF0Y2g= 81074
w5c8Lw== 81075
Lmlzc3Vl 81076
ZXNzYXk= 81077
LUlzbA== 81078
IG3DoXI= 81079
CWJpdA== 81080
IGFib2xpc2hlZA== 81081
LmluZmluaXR5 81082
bGluZW5v 81083
LmFsZ29yaXRobQ== 81084
b3JzY2g= 81085
RW1haWxBZGRyZXNz 81086
IERBRw== 81087
YnJpbmdpbmc= 81088
Lm15YXBwbGljYXRpb24= 81089
LlN1cHBvcnQ= 81090
X2xlYWRlcg== 81091
IERldmlu 81092
IFtdDQoNCg== 81093
IHJtcw== 81094
IGJ1Y2tsZQ== 81095
aWdsaWE= 81096
L3Byb2JsZW0= 81097
IGhhdXRl 81098
IGluc3RpdHV0ZWQ= 81099
SVU= 81100
bGFtYQ== 81101
RVhQRUNURUQ= 81102
IEJlY2toYW0= 81103
IEh5ZHJhdWxpYw== 81104
U3RhdGljcw== 81105
X25vcm1hbGl6ZWQ= 81106
LmAsCg== 81107
IG1pbWV0eXBl 81108
IHNoYXZpbmc= 81109
T3ZlcnJpZGVz 81110
IE1lcmNlcg== 81111
dHJmcw== 81112
LXN0YXRz 81113
b3NwYWNl 81114
IGFudGlveGlkYW50cw== 81115
aW5maW5pdHk= 81116
Um9ja2V0 81117
IEV1bGVy 81118
LXZhbHU= 81119
IGzDuA== 81120
LUlO 81121
SG1t 81122
LXJldHVybg== 81123
IFBBTkVM 81124
IHRlcm1pbmF0b3I= 81125
IHRla24= 81126
IHByZWRpY2F0ZXM= 81127
U3RhbXBlZA== 81128
IHN2ZQ== 81129
YW50ZXI= 81130
IGN5Y2xpc3Q= 81131
IEVwc3RlaW4= 81132
IGhpdHRlcnM= 81133
ZG9ncw== 81134
LkFkZExpc3RlbmVy 81135
X2V4Y2VwdGlvbnM= 81136
IEZPT1Q= 81137
aWNhcmU= 81138
W3RhZw== 81139
LWZldGNo 81140
VVBMT0FE 81141
LmRyb3Bkb3du 81142
IGNlbnRyb2lkcw== 81143
IGFyYmU= 81144
IGhpam8= 81145
IERhdGFiYXNlUmVmZXJlbmNl 81146
UG9saXRpY2Fs 81147
IEJBU0lD 81148
LWZvcmNl 81149
fCQ= 81150
IFJFVklFVw== 81151
LmRlY29yYXRl 81152
IEFzcGVjdA== 81153
IGNvbW1lbW9y 81154
IGNsZWFuc2U= 81155
IENsYXVkaWE= 81156
Z2VuZXJhdGlvbg== 81157
SExU 81158
dHlwZW9ybQ== 81159
cHJlZmVy 81160
b3ZlcmxhcA== 81161
YmlvbG9neQ== 81162
U3RyZWFtZXI= 81163
Y29tbWlzc2lvbg== 81164
IHRodW1ibmFpbHM= 81165
LkN1cnJlbnRDdWx0dXJl 81166
IHVybHBhcnNl 81167
IGdpb3Jubw== 81168
IGRldnM= 81169
X2FzcGVjdA== 81170
IGNoZXJpc2hlZA== 81171
IE5hY2hyaWNodA== 81172
IHJpZ2dlZA== 81173
L2xvZ2dpbmc= 81174
aHVudA== 81175
VHlwZUVycm9y 81176
PFNlbGVjdA== 81177
KHByb2c= 81178
IEdyaWRMYXlvdXQ= 81179
6JA= 81180
IEVYUEVS 81181
CUtFWQ== 81182
LmRt 81183
CWNhcmQ= 81184
IFRhdQ== 81185
IG5vdGFtbWVudA== 81186
IGhlcm9pbmU= 81187
IGJhdGh0dWI= 81188
YXRyb24= 81189
IOaU 81190
77yS77yQ 81191
Y29ub21pY3M= 81192
IHJldmVyc2libGU= 81193
6YeR6aKd 81194
IGpzeA== 81195
IFNwZWFrZXJz 81196
RGVzZXJpYWxpemVy 81197
LnRvRmxvYXQ= 81198
INC/0LXRgNC10LzQtdC9 81199
IFByb3ZpZGluZw== 81200
6LSm 81201
W2VsZW1lbnQ= 81202
Kjo= 81203
PlJldHVybnM= 81204
IHRpdHVsYXI= 81205
IGhlYXJ0YnJlYWtpbmc= 81206
X05C 81207
LkFyZ3VtZW50cw== 81208
IG9wdGlj 81209
YXR0YWNrcw== 81210
IFZ1bG5lcg== 81211
CWtleXM= 81212
IGNvbnRyb2xl 81213
LlJHQg== 81214
IHN1Ymdyb3Vw 81215
bWFuZGF0b3J5 81216
IENBQg== 81217
CWVuZ2luZQ== 81218
44Gw 81219
TUVESUE= 81220
L3RyYW5z 81221
IGRhbms= 81222
IHNlcnZpY2Vk 81223
IGluY2FyY2VyYXRlZA== 81224
IEZyZWFr 81225
IHVwdG8= 81226
ZHJhd2Vy 81227
WyIr 81228
IGVudHdpY2s= 81229
Z0w= 81230
TW9kZWxFcnJvcg== 81231
IHJlYWRkaXI= 81232
aXN0cmlidXRl 81233
IGdsYXJl 81234
aXF1ZW1lbnQ= 81235
Y2hpbmE= 81236
IEthcGxhbg== 81237
IFN0YWJpbGl0eQ== 81238
cG9zaXRlcw== 81239
IEpBWEJFbGVtZW50 81240
IHRvdGFsbWVudGU= 81241
KGNvbW0= 81242
X3Byb2Nlc3Nlcw== 81243
VGhvdXNhbmRz 81244
IElscw== 81245
ZXJ0YWludHk= 81246
IFNoYWRlcw== 81247
YWN0YWw= 81248
bG9nZ2VkSW4= 81249
IE5pY2hvbHM= 81250
IE1pZGxhbmRz 81251
ZGV2aWw= 81252
IHN0clNRTA== 81253
In0p 81254
IEpvcmQ= 81255
KGZm 81256
IEp1bmk= 81257
5bCx 81258
YXJ0aXNhbmxpYg== 81259
IG1vb25z 81260
IHVucmVzb2x2ZWQ= 81261
IHdpdGNoZXM= 81262
IEfDvA== 81263
IEdvYmxpbg== 81264
YW5zc29u 81265
fCU= 81266
IGJ6 81267
IGR1cGxleA== 81268
ICIpKQ== 81269
Lmxpa2Vz 81270
KHZlcnRpY2Fs 81271
IGNvd2JveQ== 81272
U2VsZWNjaW9uZQ== 81273
ICcqJyw= 81274
IFNhcA== 81275
IFNhYmJhdGg= 81276
U09SVA== 81277
4Ka/4KY= 81278
X2NlbnRlcnM= 81279
XFBvc3Q= 81280
KFRyZWU= 81281
IHBhcnRlcw== 81282
X3lhdw== 81283
YXJlbW9z 81284
c2V2ZW4= 81285
IGhpYXR1cw== 81286
X2ludGVuc2l0eQ== 81287
LW1hbnk= 81288
IERvbGxhcnM= 81289
LXVuc3R5bGVk 81290
IGdyaXBwaW5n 81291
IG1hcnZlbG91cw== 81292
IHJlY2VwdGlvbnM= 81293
IG92ZXJjbG9jaw== 81294
YmVybWFu 81295
IGhlYWRxdWFydGVyZWQ= 81296
eEJC 81297
Y2xhc3NDYWxsQ2hlY2s= 81298
IG9ic2VydmVz 81299
U3VibWl0dGluZw== 81300
0LjRh9C10YE= 81301
IEh0dHBTdGF0dXNDb2RlUmVzdWx0 81302
IGhpZXJvbnRh 81303
cm9wcGluZw== 81304
Rk9SQ0U= 81305
CXV0aWxz 81306
IHZlbnRz 81307
YWRkZXJz 81308
IE1JWA== 81309
IEVsZWdhbnQ= 81310
IGFjb3M= 81311
KG1hY2hpbmU= 81312
IG1lZGRsaW5n 81313
IHZpbGU= 81314
LWNvbXBhdGlibGU= 81315
IGNyZWFtcw== 81316
IFRhYmxlUm93 81317
IFJlaGFiaWxpdGF0aW9u 81318
QWJi 81319
KHVzZXJJbmZv 81320
X2V4cGlyZWQ= 81321
Lk9iamVjdE1ldGE= 81322
IGdvZHQ= 81323
dXN1YWw= 81324
LmJpbmRpbmdOYXZpZ2F0b3JNb3Zl 81325
IFJlZ2lzdHJhcg== 81326
bWlncmF0aW9u 81327
YXB0dXJlZA== 81328
LHBhcmFtcw== 81329
IGNlbnRlclk= 81330
b3dhbg== 81331
bG9jYWxlcw== 81332
SW5wdXRNb2R1bGU= 81333
IHZpZ2lsYW50 81334
IG5jb2xz 81335
IGluZ3I= 81336
IGPDtHTDqQ== 81337
dmVydGltZQ== 81338
IHdpZGVzdA== 81339
IEhERg== 81340
IEFsZ2VyaWE= 81341
IGNoYXR0 81342
JHNlbGVjdA== 81343
Il0pDQo= 81344
IG11bHRlcg== 81345
IENoZW5leQ== 81346
ZnVzY2F0ZWQ= 81347
PSciLiRf 81348
IERlbmlzZQ== 81349
IHJpZmY= 81350
QWJzZW50 81351
IHRhbWHDsW8= 81352
IGplc3pjemU= 81353
LlByb2dyYW0= 81354
CWJy 81355
ZXJhaXM= 81356
IHNhbmRhbHM= 81357
ICws 81358
IGRpc3NvbHV0aW9u 81359
IHVudGVyc2NoaWVk 81360
UHJvdg== 81361
LnRyYW5zYWN0aW9ucw== 81362
IFRyb3VibGU= 81363
Lm1pZGRsZQ== 81364
LmdldERlY2xhcmVk 81365
IHN3ZWF0aW5n 81366
IEhhbmNvY2s= 81367
6LS5 81368
IHBvZw== 81369
IEtpYQ== 81370
IG1vZG5l 81371
IEFjY2Vzc2liaWxpdHk= 81372
IGxlYWthZ2U= 81373
IGRlY2VwdGl2ZQ== 81374
IFdPTQ== 81375
INC+0YE= 81376
IGNzYWs= 81377
YWNvY2s= 81378
LlN5bnRheA== 81379
ICxb 81380
LicpLAo= 81381
IGZvcmVjbG9zdXJl 81382
IHVuZmF2b3I= 81383
IGV4Y2w= 81384
Q1VEQQ== 81385
ZGVuc2U= 81386
PFVuaXQ= 81387
IHZhcGluZw== 81388
IG1hamVzdGlj 81389
aWF0b3Jz 81390
IGF1dGlzdGlj 81391
LmdhdGV3YXk= 81392
VXJsUGFyc2Vy 81393
SGVsbA== 81394
IENvc3Rjbw== 81395
IEhJUA== 81396
T2JzZXJ2ZXJz 81397
IFBlb3BsZXM= 81398
IFNwb3RsaWdodA== 81399
IFRhdmVybg== 81400
IFRPVVI= 81401
cGxpbmdz 81402
LldSQVA= 81403
IGFsZA== 81404
TkFM 81405
KCIqKio= 81406
c2V0UHJvcGVydHk= 81407
X1N0b3A= 81408
YW5ub3VuY2VtZW50 81409
IEltbWVkaWF0ZQ== 81410
IEhTVg== 81411
X1RFU1RT 81412
IGNyYXZl 81413
X1VD 81414
LmRlY3J5cHQ= 81415
KFJvbGVz 81416
IHN1Ymo= 81417
X0ludGVnZXI= 81418
Lm5vdE51bGw= 81419
IEdzdA== 81420
IEJ5cm5l 81421
IEFxdWFyaXVt 81422
IENhbmM= 81423
X0NIQU4= 81424
IERUTw== 81425
Lmhs 81426
IG1lbmdndW5ha2Fu 81427
RnJhbmM= 81428
RGlhbG9nQ29udGVudA== 81429
Li4uJwo= 81430
IEt1bnN0 81431
IEFsbG9jYXRvcg== 81432
VVNBR0U= 81433
S25vd2xlZGdl 81434
CWNwdQ== 81435
IG1vcmFscw== 81436
cGF0aWVudHM= 81437
IGlsaw== 81438
IGNyaXRlcg== 81439
IFZldA== 81440
IE1lc3NpYWg= 81441
X186 81442
YXZlbm91cw== 81443
X3ZpZXdlcg== 81444
KERpY3Rpb25hcnk= 81445
IEJvZGllcw== 81446
aGFzT25l 81447
0LjQvNC10YA= 81448
IHppcGNvZGU= 81449
U3Rlcg== 81450
IGLDoXM= 81451
X0Rpc3BsYXk= 81452
IGZpcm1h 81453
IFJhaWRlcg== 81454
IEtI 81455
V2l0aERhdGE= 81456
KEFSRw== 81457
IHByb3Ry 81458
IG1zZWM= 81459
IGxhdmVuZGVy 81460
KFV0aWw= 81461
INC/0YDQvtCz0YDQsNC8 81462
X211eA== 81463
X2xhdGl0dWRl 81464
UG9ydHJhaXQ= 81465
IHNpdGNvbQ== 81466
IGFkaWNpb24= 81467
KGNvbnN0YW50cw== 81468
IEFueGlldHk= 81469
IFJvc2Vz 81470
IHN0aW11bGF0ZWQ= 81471
IGNocm9ubw== 81472
IGZvc3NpbHM= 81473
IEFpcmJ1cw== 81474
bGVmdHJpZ2h0 81475
IE3DqXRvZG8= 81476
Inc= 81477
IGtsZWluZW4= 81478
IGNsaXF1ZQ== 81479
b21pbmF0aW9u 81480
IG1vdGVs 81481
L3ZlY3Rvcg== 81482
ZGVjbGFyYXRpb24= 81483
IG5ld1k= 81484
W0g= 81485
LnNjYWxhcg== 81486
b21ibw== 81487
aHVk 81488
O3NldA== 81489
ZnR5cGU= 81490
KCcnKS4= 81491
b3JkZXM= 81492
eW5vcw== 81493
J10sCgo= 81494
X0ZMVVNI 81495
aWRlbnRpZnk= 81496
L2RldmljZXM= 81497
IGRpY3RhdGVk 81498
IGRlamFy 81499
IEVtaW4= 81500
IFBlbmRhbnQ= 81501
IG9uVXBkYXRl 81502
XSkpKQ== 81503
IEJhcmtlcg== 81504
T3Jt 81505
6K+36YCJ5oup 81506
X2d1aWRl 81507
w6FiYWRv 81508
b3BoZQ== 81509
ICIuCg== 81510
IEJyZXdlcnM= 81511
IGJyaWRhbA== 81512
IENFUw== 81513
X0NhdGVnb3J5 81514
IEJUTg== 81515
IERhcnRo 81516
I2Zvcg== 81517
ZXRobmlj 81518
YXJjaGl0ZWN0dXJl 81519
IENvdXBl 81520
aWRvcmVz 81521
IGZhc2Npc20= 81522
IGNvbnRyYWRpY3Rpb25z 81523
ZWZmZWN0cw== 81524
SW5pdGlhbFN0YXRl 81525
IOekuuS+iw== 81526
bWF0cGxvdGxpYg== 81527
LmRlc2t0b3A= 81528
INCt 81529
IFFQaXhtYXA= 81530
CWJlZ2lu 81531
IHduZA== 81532
IGNvbnRpZW5l 81533
KGhlbHBlcg== 81534
Lk5vdGlmeQ== 81535
KEJvb2s= 81536
IEd1YXJhbnRlZWQ= 81537
cGxs 81538
aW9sYQ== 81539
IGZ1bmdp 81540
aXZlbnQ= 81541
IE9B 81542
5rKh5pyJ 81543
IHdpxJljZWo= 81544
CQoJCgkKCQo= 81545
77yaIis= 81546
IFRhbGtz 81547
LnN0YXJ0ZWQ= 81548
b2NpdGllcw== 81549
IGVzcG9ydHM= 81550
PElucHV0 81551
IEVYQ0VQVElPTg== 81552
IGFjdHU= 81553
LmltcA== 81554
ICIvIgo= 81555
T3RoZXJ3aXNl 81556
IFBlbnNpb24= 81557
IFdhdmVz 81558
xrDGoQ== 81559
aWFyZHM= 81560
ICo8Lw== 81561
dXJnZW9u 81562
IFNDSQ== 81563
IExhdXJlbA== 81564
ZXRhZw== 81565
TmV0ZmxpeA== 81566
IFJlc3BvbnNlcw== 81567
IG5lb2xpYmVyYWw= 81568
aXNDb250YWluZWQ= 81569
PW15 81570
IHJlcHJpbnQ= 81571
b25lc3RseQ== 81572
IGRlcGFydGluZw== 81573
UFdN 81574
ZXdoYXQ= 81575
PSI8PA== 81576
Lnlhbmc= 81577
IFRyYWRpdGlvbg== 81578
KyI6 81579
ZGVwZW5kaW5n 81580
X1VuaXQ= 81581
IENvZGFibGU= 81582
IHdoaXNreQ== 81583
IGNvcnJlbGF0ZQ== 81584
IGRpcmV0 81585
TGFzdGx5 81586
CU91dHB1dA== 81587
KGlub2Rl 81588
XExvZw== 81589
IERlcGVuZGVuY2llcw== 81590
V2lsbERpc2FwcGVhcg== 81591
IFBhbmVscw== 81592
IOKUnOKUgOKUgA== 81593
IG9zdGVuc2libHk= 81594
fC0t 81595
QW5udWFs 81596
IGF1dG9sb2Fk 81597
VmFsdWVIYW5kbGluZw== 81598
LmNvaW4= 81599
ZWR1Y3Q= 81600
Wlk= 81601
IENhbnVja3M= 81602
IHNtZWFy 81603
IHJlYWxpZGFk 81604
IHt7Cg== 81605
aXZvbA== 81606
ZXRTb2NrZXRBZGRyZXNz 81607
IEtlbXA= 81608
L0ZyYW1ld29yaw== 81609
IHF1aWNrZXN0 81610
XyIuJA== 81611
IHdpdGhob2xkaW5n 81612
IGludHJpZ3Vl 81613
IEFERFI= 81614
RGllc2U= 81615
V2Vla2x5 81616
X19fX18= 81617
IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbg== 81618
b2xhdGVk 81619
UnVuTG9vcA== 81620
IHBhc3PDqQ== 81621
LmZpcmViYXNlaW8= 81622
LmV1bGVyQW5nbGVz 81623
aXN0ZW5jZQ== 81624
IGZlYXJpbmc= 81625
IEVsZW1lbnRUeXBl 81626
L1Rlc3Q= 81627
IOafpeivog== 81628
IGZvbmRv 81629
IFBhcnI= 81630
IHplc3Q= 81631
IFRyYW5zZm9ybWVycw== 81632
TGluZVN0eWxl 81633
IGV0aGVybmV0 81634
YWZmbGVz 81635
IG5hbWVkdHVwbGU= 81636
IFNjYWxhcnM= 81637
TlNVUkxTZXNzaW9u 81638
LWV4dGVuc2lvbg== 81639
KE1lc3NhZ2Vz 81640
IGF0ZW5jacOzbg== 81641
IEplcnNleXM= 81642
YmVkUGFuZQ== 81643
IFN0dW5kZW4= 81644
IHZvaXR1cmU= 81645
IOm7mOiupA== 81646
Lm9wZW5nbA== 81647
ICJ9 81648
IFJldmVuZ2U= 81649
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 81650
SW5zdGFudGlhdGU= 81651
IGVucg== 81652
VmFsaWRhdGlvbkVycm9y 81653
X0FMUkVBRFk= 81654
TG90cw== 81655
b2Nl 81656
IHNjcmlt 81657
IGVtYm9keQ== 81658
0YDQsNGC 81659
IGNvbmNlZGU= 81660
YXNzZWw= 81661
IEJSRQ== 81662
UExFQVNF 81663
CWRpZmY= 81664
57uT5p2f 81665
LmZw 81666
YmFt 81667
TWVhbA== 81668
IE1hZG9ubmE= 81669
IHB1bmlzaGFibGU= 81670
aWZmaWVz 81671
X3VuaXg= 81672
7JmA 81673
IEdhZ2E= 81674
InN0cnVjdA== 81675
VG9TZW5k 81676
IE9DUg== 81677
IHByYWlzaW5n 81678
Z2V0U3RvcmU= 81679
IGV1dGg= 81680
IGFycmVnbG8= 81681
IGZlcm0= 81682
ZmRm 81683
Q29vbGRvd24= 81684
IFJlY3ljbGluZw== 81685
QW5h 81686
aW5kcg== 81687
X0hQ 81688
IEdvdmVybmFuY2U= 81689
IGJhcnJhZ2U= 81690
L2Nh 81691
ICwo 81692
RsO8cg== 81693
IElTUHM= 81694
IG1lbmFjZQ== 81695
VmlyZ2luaWE= 81696
IGZhbmM= 81697
IG5vbWJyZXM= 81698
Lmluc3RydWN0aW9ucw== 81699
IGVzY2FsYXRlZA== 81700
YWdpbmE= 81701
IExldmluZQ== 81702
CWZpbmQ= 81703
X2Vy 81704
IGRlanRpbmdzYWo= 81705
c3Zw 81706
YWdvcw== 81707
KHNvbA== 81708
IExpZA== 81709
UFJJVkFURQ== 81710
IElNUExFTUVOVA== 81711
ZWZlbGxlcg== 81712
KFRhcmdldA== 81713
4LmJ4Lit4Lih 81714
aG91c2luZw== 81715
LnNldEN1cnNvcg== 81716
IG5laG1lbg== 81717
LnJlY2VpdmVy 81718
IFR1dG9y 81719
IG1hdHRlcmVk 81720
bWRhdA== 81721
cmVndWxhdGVk 81722
IGdldEFkZHJlc3M= 81723
IE1pbnV0ZW4= 81724
IElV 81725
0LvQsNCy 81726
IHR1cm5vdmVycw== 81727
IHN1aXRhYmlsaXR5 81728
CWVzYw== 81729
Y2FsY3Vs 81730
X1N0cmVhbQ== 81731
X2ZpbGVuYW1lcw== 81732
LXZhcnM= 81733
Li4uLi4KCg== 81734
RGlh 81735
IHN3aW1z 81736
T3B0aW1pemVy 81737
PGJvb3N0 81738
IFBlcm1pdA== 81739
J10pKXs= 81740
XE9wdGlvbnNSZXNvbHZlcg== 81741
5qGI 81742
IGhlY3RhcmVz 81743
KHVz 81744
IERldmVsb3Bpbmc= 81745
X3hz 81746
IG5vdmVsaXN0 81747
IENvbnZlbmllbmNl 81748
d2Fsa2luZw== 81749
IGNoYXJtcw== 81750
IExlYXNl 81751
CUhBTA== 81752
KFsm 81753
IHJlc3RhcnRlZA== 81754
TWFnZQ== 81755
SXB2 81756
INGN0Lo= 81757
UkxG 81758
IGFzc2VtYmxpbmc= 81759
IEVjYw== 81760
dmluZm9z 81761
cGVkaWRv 81762
IHN5bm9wc2lz 81763
IFN0YW50b24= 81764
c3RhcnR1cA== 81765
LmdldHZhbHVl 81766
IEtpdHQ= 81767
cHJvcGVy 81768
IHByZXRyYWluZWQ= 81769
IFBFTg== 81770
LlRlcm0= 81771
IHBlcXU= 81772
ZXBoaXI= 81773
IEFsbGllcw== 81774
IG1vZGVsQW5kVmlldw== 81775
IGJ1dHRlcmZsaWVz 81776
IEtpcnN0 81777
IENoZWNrZXI= 81778
IGN1bm5pbmc= 81779
LnNldFk= 81780
X01hc3Rlcg== 81781
SW5jcmVhc2luZw== 81782
IGh1cmRsZQ== 81783
IGZpc3Rz 81784
IFNsb3Zha2lh 81785
IG5vbWJyZXV4 81786
IDo6Cg== 81787
dGFza0lk 81788
IGZvbGx5 81789
PFRyZWVOb2Rl 81790
IFZvbGRlbW9ydA== 81791
IGJsaXN0ZXI= 81792
xYJl 81793
LkVudGl0eU1hbmFnZXI= 81794
LkRPV04= 81795
IEdyZWdn 81796
LWNvb3JkaW5hdGU= 81797
KHZj 81798
w6FiYg== 81799
LlRvZ2dsZQ== 81800
IExpc2Jvbg== 81801
56I= 81802
INC/0L7Rgg== 81803
cGFyZW50Tm9kZQ== 81804
LnNldFNjYWxl 81805
X01JU1NJTkc= 81806
IG91dHJh 81807
IGt1cA== 81808
YF0= 81809
X3ZpYQ== 81810
ZWRpY3M= 81811
IEJvcmRlcnM= 81812
IGlwYWQ= 81813
IGVkdA== 81814
IENhcnRlc2lhbg== 81815
L21hYw== 81816
IGJhcmxleQ== 81817
IFNjYXJsZXQ= 81818
ICAgIAogICAgCiAgICAKICAgIAo= 81819
cXVlcnlQYXJhbXM= 81820
IHJoeXRobXM= 81821
IGdlYXJpbmc= 81822
Wlg= 81823
aHlkcmF0aW9u 81824
U1RT 81825
IHBsZW50aWZ1bA== 81826
Y29ycA== 81827
fUA= 81828
aW50ZWdy 81829
L2F0 81830
LmRlYg== 81831
IHVuZGVuaWFibGU= 81832
IG9wZW5zc2w= 81833
LmRlYWQ= 81834
IFBpbGxvdw== 81835
IEJlYW5z 81836
LmFudA== 81837
X3Fz 81838
LWluZm9ybWF0aW9u 81839
IOuzgOyImA== 81840
JSIpLAo= 81841
INC00YDRg9Cz 81842
IFNwb25nZQ== 81843
IHNpZnQ= 81844
dGVzdGltb25pYWw= 81845
IHVubmF0dXJhbA== 81846
VUlTY3JvbGxWaWV3 81847
dmVyZ2VuY2U= 81848
KHRleHRCb3g= 81849
LXBhZ2luYXRpb24= 81850
IERpc3F1cw== 81851
X3Byb2R1aw== 81852
YWduYXI= 81853
S2V5VXA= 81854
CQkJICAgICAgICA= 81855
0LXQu9C1 81856
PHNvdXJjZQ== 81857
Lmls 81858
LmF0b20= 81859
X0NvbXBvbmVudA== 81860
IHlu 81861
WydfXw== 81862
IHdlYWtlc3Q= 81863
X2RlY3J5cHQ= 81864
L21zZw== 81865
Y2Jj 81866
IHBvbGl0ZWx5 81867
b21hdA== 81868
IGVubGlnaHRlbm1lbnQ= 81869
IGNyZWE= 81870
IGJydWs= 81871
X2FscmVhZHk= 81872
IHNvY2tmZA== 81873
dW5wYWNr 81874
b3JnZXM= 81875
IFVORVNDTw== 81876
aW5hbGl0eQ== 81877
IHNlbnRpbmVs 81878
IGFmZmx1ZW50 81879
IHRocm93RXJyb3I= 81880
aWV0cw== 81881
QU5KSQ== 81882
IFN1ZmZvbGs= 81883
YmVybw== 81884
a2V0w7h5 81885
RW5kcG9pbnRz 81886
ZXhlY3V0b3I= 81887
R2E= 81888
LkxB 81889
X3BvcnRmb2xpbw== 81890
dW5zY2g= 81891
ZWxhZ2U= 81892
IGdvYmllcm5v 81893
IEJpb2w= 81894
TW9kaWZpY2F0aW9u 81895
IERlY2ltYWxGb3JtYXQ= 81896
IFZvY8Oq 81897
IG1ldGhvZG9sb2dpZXM= 81898
W10u 81899
IEdW 81900
IHJlcGxpY2Fz 81901
4oCUd2l0aA== 81902
KTspOwo= 81903
cG9zaXg= 81904
U3VjY2Vzc0xpc3RlbmVy 81905
cGhl 81906
X25vcm1hbGl6ZQ== 81907
IExhcmdlcg== 81908
IHJlcGVyY3Vzc2lvbnM= 81909
X1ZlcnQ= 81910
IGhvc3RlbA== 81911
IGluY29tcGV0ZW50 81912
aGV2 81913
X0RFTFRB 81914
IHB1ZWRv 81915
aW5zdGFsbGF0aW9u 81916
X2ZyYWc= 81917
KHJy 81918
IE1BVg== 81919
IExvY2FsaXphdGlvbg== 81920
KCIiKS4= 81921
IC0tLS0tLS0tLQ== 81922
DQoK 81923
IFB5VHVwbGU= 81924
IEp1bGlv 81925
CUdMdWludA== 81926
bWFya3Vw 81927
X0ZBTUlMWQ== 81928
UFJPR1JBTQ== 81929
IEZpcm13YXJl 81930
KnNpemU= 81931
V2lmaQ== 81932
IHZpc2l0YQ== 81933
IEVybA== 81934
RmluZE9iamVjdA== 81935
LlVOUkVMQVRFRA== 81936
cGh0aGFsbQ== 81937
IHBlcnNvbmFsaXpl 81938
IGNyw6lhdGlvbg== 81939
ICAgIAkg 81940
LnByZWNpc2lvbg== 81941
IHNldHRlcnM= 81942
IG5ld1NpemU= 81943
IENhdGFsYW4= 81944
CW9wdGlvbg== 81945
IHBpZWw= 81946
IGNhZ2Vz 81947
IFN0ZW0= 81948
ZHJhd2luZw== 81949
ZXhwbGFpbmVk 81950
IOaOpw== 81951
IGRyZWFkZnVs 81952
ZXJydXB0ZWQ= 81953
LmdldFZhbHVlQXQ= 81954
IGVsYXBzZWRUaW1l 81955
IGluZGVmaW5pdGU= 81956
IFRIQU5L 81957
X3N0YXJ0dXA= 81958
U1VSRQ== 81959
IGtpZG5leXM= 81960
IEN1aXNpbmU= 81961
fGFycmF5 81962
U2VuZE1lc3NhZ2U= 81963
ZmF2 81964
IEFlcm9zcGFjZQ== 81965
X21lYW5z 81966
IG5lYg== 81967
IE9UUA== 81968
IGNodXJu 81969
L2Zy 81970
IFJlaWdu 81971
X2NsYXNzaWZpY2F0aW9u 81972
IE1hY0RvbmFsZA== 81973
Ii4KCgoK 81974
IGNoaWxseQ== 81975
IOivt+axgg== 81976
aWhhdA== 81977
U1RB 81978
J2F1dHJlcw== 81979
IGxhc2M= 81980
Lm1peA== 81981
IGJsb3Q= 81982
IElERA== 81983
ZGF0YXRhYmxl 81984
c3BpZWw= 81985
IMOpeGl0bw== 81986
YXJ0aWM= 81987
LkF4aXM= 81988
LmFkdmFuY2U= 81989
IG1vdXNlWA== 81990
J8Og 81991
IHJlY2lldmVk 81992
IHBvc2k= 81993
IGZvdXJu 81994
IE1hZmlh 81995
IHBjYQ== 81996
YmVsb25ncw== 81997
YWJseXR5cGVk 81998
QVVUSE9SSVpFRA== 81999
LnNjYWxhYmx5dHlwZWQ= 82000
7JyE 82001
LWRvdA== 82002
IGVtcGhhc2l6aW5n 82003
TWVtYmVyc2hpcA== 82004
KnBvdw== 82005
LXNwaW4= 82006
cnV0YQ== 82007
aGV2aWs= 82008
X0FTWU5D 82009
X2NvbXBpbGVy 82010
LkZsYWc= 82011
IGVsYm93cw== 82012
LkNSRUFURQ== 82013
TWV0cm8= 82014
LmxvZ3M= 82015
em1hbg== 82016
cG9uZQ== 82017
xJnFvA== 82018
IGludGVycw== 82019
IHdlYnM= 82020
X0hJRERFTg== 82021
CW5vdw== 82022
Q29tbXVuaWM= 82023
JHRwbA== 82024
c2NvcGVz 82025
IFppa2E= 82026
IHN0cmluZ3N0cmVhbQ== 82027
IFVuY2F0ZWdvcml6ZWQ= 82028
Rlk= 82029
L3N3YWdnZXI= 82030
UGVubg== 82031
aW1lSW50ZXJ2YWw= 82032
IGNvbnRlbmRz 82033
eGllcw== 82034
IFNhbGVzZm9yY2U= 82035
IHV0ZW5z 82036
IHVuZGlz 82037
Q3J5c3RhbA== 82038
Lm5kaW0= 82039
IGZvcm11bA== 82040
IEZhdg== 82041
5bm/ 82042
cmlzaw== 82043
bmFk 82044
L3Rvcw== 82045
IFBFUkZPUk1BTkNF 82046
IHdyaXRlbG4= 82047
IGNvbGxv 82048
YW50aWNhbGx5 82049
VURFTlQ= 82050
Umdi 82051
IG9mZXJl 82052
IG1lcmdlcw== 82053
ZmlkZg== 82054
IGt6 82055
VmljdG9yaWE= 82056
IC9eXA== 82057
IGt1YmU= 82058
IEFwb3N0bGU= 82059
IGRlZmVuZHM= 82060
PD0o 82061
IE1FTU9SWQ== 82062
XElk 82063
IEFjdGl2ZUZvcm0= 82064
IE9uZVBsdXM= 82065
SHR0cFNlcnZsZXRSZXF1ZXN0 82066
IFRlbXBEYXRh 82067
7KCB 82068
LkFTQ0lJ 82069
2YTYpw== 82070
S0k= 82071
IGZyYXQ= 82072
X0NJUEhFUg== 82073
LlN1cmZhY2U= 82074
IHBpdGZhbGxz 82075
LW1lZGlhdGVk 82076
eXBp 82077
LWFsaXN0 82078
eEJD 82079
dGVhY2hlcnM= 82080
IEN5Yw== 82081
IHBzeWNoZWRlbGlj 82082
IER1bWJsZWRvcmU= 82083
IikuCgo= 82084
IFRoYXRjaGVy 82085
IFByaW5jaXBsZQ== 82086
VG9nZXRoZXI= 82087
IGZsb3Jh 82088
d2Vla3M= 82089
X2NyaXRlcmlh 82090
Ym9uZXM= 82091
LmludGVybmV0 82092
IGJsb2NrRGlt 82093
LlNpbmdsZU9yRGVmYXVsdA== 82094
RGljZQ== 82095
IEV2ZWw= 82096
IFRMYWJlbA== 82097
IElnb3I= 82098
IENvcHA= 82099
IGluYXVndXI= 82100
L3ByaXZhdGU= 82101
IGFiZXJy 82102
bmRz 82103
O2lm 82104
LXJhbmdpbmc= 82105
YWNodHM= 82106
X21hcnNoYWxs 82107
IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18= 82108
LmVuZFRpbWU= 82109
IE1vZGVsUmVuZGVyZXI= 82110
KGZvb2Q= 82111
KCJ+ 82112
IHN1cHBs 82113
KCJcKA== 82114
U3E= 82115
VHJhbnNsYXRlZA== 82116
IENvbnRpbnVpbmc= 82117
IHBvc3Nvbm8= 82118
RklYTUU= 82119
IEFuZ2Vib3Q= 82120
aWV2ZXI= 82121
IEt5b3Rv 82122
Y2ls 82123
TmV3VXJsUGFyc2Vy 82124
LkRp 82125
IGh1bWFuZQ== 82126
RGVtYW5k 82127
IE1hcnRpYW4= 82128
d29vZHM= 82129
IEhlYWw= 82130
IFl1ZQ== 82131
IGNvdXJ0aG91c2U= 82132
IHZvbnQ= 82133
IGJvbnM= 82134
aW50ZWdyYWw= 82135
ICQoJyMn 82136
ZXRlcm1pbmF0aW9u 82137
Lm1vZGlmaWVk 82138
IHByaW5jaXBhbHM= 82139
IGFsYXJtZWQ= 82140
LmNyZWF0ZU9iamVjdA== 82141
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 82142
L2NvdW50 82143
IGVudHJlbmNoZWQ= 82144
XGE= 82145
IGludHJ1c2lvbg== 82146
IE54 82147
CQkKCQkKCQkK 82148
Y2hlbWF0aWM= 82149
IHNsaWRlcnM= 82150
IHNlbGVjdGFibGU= 82151
X25s 82152
aWVzZQ== 82153
X2VzdGltYXRvcnM= 82154
IFN2Zw== 82155
IGRlbGV0ZVVzZXI= 82156
KG1hcHBpbmc= 82157
IOyymOumrA== 82158
IGFudGFnb25pc3Q= 82159
IGtpbmFzZQ== 82160
IHdlbGRlZA== 82161
IExlbmE= 82162
ZWRpdGg= 82163
aWFsaQ== 82164
KHBpYw== 82165
IGJyZWFjaGVk 82166
UElD 82167
IGNvYXN0ZXI= 82168
RkRB 82169
IGtyZQ== 82170
cGVyZmls 82171
IEdlbXM= 82172
X2ZlbmNl 82173
VVJMUmVxdWVzdA== 82174
4oCZYXBw 82175
UkVGRVJFTkNF 82176
LkV4cG9ydA== 82177
IG1pbmltaXplZA== 82178
aXBlbA== 82179
aWRhdGE= 82180
KWRlYWxsb2M= 82181
ZXNjYWw= 82182
X2Z3ZA== 82183
bWVtY3B5 82184
IExvcmk= 82185
X1JlZg== 82186
IGJhcmE= 82187
IFNlbGxlcnM= 82188
IGRldGVyaW9yYXRpb24= 82189
ZnJhY3Rpb24= 82190
KV07 82191
L3BsYXk= 82192
wqU= 82193
LXRlc3Rz 82194
T2Zmc2V0cw== 82195
T2k= 82196
IEtsYXVz 82197
IHF1ZXJ5aW5n 82198
d2lzaA== 82199
YXBlbA== 82200
X3dvcmtpbmc= 82201
bXlNb2RhbExhYmVs 82202
IHRvRGF0ZQ== 82203
cGVybWFsaW5r 82204
IGZyZWM= 82205
b2xlY3VsZXM= 82206
IEdvb3Nl 82207
LXdpZGdldHM= 82208
dHVydGxl 82209
SW1wcm92ZWQ= 82210
IHJvYWR3YXk= 82211
a2Vocg== 82212
IGFzdHJvbm9teQ== 82213
Q29tYmluZQ== 82214
IGNpZ2Fycw== 82215
X0dBVEU= 82216
L21hbmFnZQ== 82217
IEdlcmFyZA== 82218
IFByb3RlY3Rvcg== 82219
U3Vic3lzdGVt 82220
L2ZpbmQ= 82221
L1lZWVk= 82222
IHRvdGFsaW5n 82223
0LzQvtGC 82224
IE9tYW4= 82225
IGluZmluaXQ= 82226
LW9mZmljZQ== 82227
IGluc3RhbnRpYXRpb24= 82228
LsKn 82229
Y2V1 82230
KGF0b20= 82231
IERyb3BvdXQ= 82232
7YGs 82233
IGNvbmRlbW5pbmc= 82234
X2Jhc2VuYW1l 82235
XX08Lw== 82236
RGF0YUNvbnRleHQ= 82237
IFdhc2hpbmc= 82238
Lk9O 82239
IG1vbW15 82240
KCl9Owo= 82241
IDspCgo= 82242
L2V4dA== 82243
Zm9yZWdyb3VuZENvbG9y 82244
dW5zdXBwb3J0ZWQ= 82245
IHNvbGxlbg== 82246
IGNvbWXDpw== 82247
RElTQUJMRQ== 82248
IG9uUGF1c2U= 82249
INGH0YLQvtCx0Ys= 82250
IEFpbg== 82251
R3M= 82252
CVRhc2s= 82253
aGF3aw== 82254
Ik5vdA== 82255
QUdS 82256
LmdldFRhYmxl 82257
IGRpdmVyZ2VuY2U= 82258
IG5lZ29jaQ== 82259
UmVwbGFjaW5n 82260
XX0pCg== 82261
aWxsdXNpb24= 82262
IM6U 82263
X0tFWUJPQVJE 82264
S3I= 82265
CW9y 82266
56Gu6K6k 82267
CXByaW50bG4= 82268
IFNlYXJjaGVz 82269
IEZyZXNubw== 82270
IHZlcmRhZA== 82271
XE1pZGRsZXdhcmU= 82272
IOy1nA== 82273
fSkoKTs= 82274
dGV4dEFsaWdu 82275
aW5rZWw= 82276
LlR4dA== 82277
IG9wdGltaXphdGlvbnM= 82278
eW91bmc= 82279
IGxlYXNlZA== 82280
SlQ= 82281
IElvbmljTW9kdWxl 82282
ZXR0aW5ncw== 82283
ZXNlaGVu 82284
IGZhdm91cmFibGU= 82285
YW5leQ== 82286
IG90aGVyQnV0dG9uVGl0bGVz 82287
IFRoYW1lcw== 82288
CXVuaXQ= 82289
Q09MVU1O 82290
IGxvaQ== 82291
LHByb3Rv 82292
X1BSSQ== 82293
IHdhbmRlcmVk 82294
IHNhcGk= 82295
YmFja3dhcmQ= 82296
YXJhb2g= 82297
IEZI 82298
IEFsZw== 82299
CWFj 82300
YXJybw== 82301
5Y6G 82302
IFNPUw== 82303
IERyZWFk 82304
VmVjdG9yWGQ= 82305
LnJtdHJlZQ== 82306
X2V4ZWN1dG9y 82307
IHByZWduYW5jaWVz 82308
IHByYWN5 82309
IFd3dw== 82310
IEFyY2hiaXNob3A= 82311
IG1laW5lbg== 82312
RlU= 82313
LkVudg== 82314
IGVubGlnaHRlbmVk 82315
IG9yaWdpbmF0ZQ== 82316
5Y+K 82317
IHpsaWI= 82318
X1NB 82319
IHdhc3Rlcw== 82320
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 82321
cHJhcw== 82322
IGhvcnJpZmllZA== 82323
IENhbGR3ZWxs 82324
dG95 82325
X3Nob3Q= 82326
IGxlc2Jp 82327
IE1hZ25ldA== 82328
b3hpYw== 82329
U3VybmFtZQ== 82330
IHNob3dUb2FzdA== 82331
CURlc3Ryb3k= 82332
LmdldEV4dGVybmFs 82333
SUxJ 82334
IE5ldmlsbGU= 82335
dHNreQ== 82336
IG1lbGFrdWthbg== 82337
ICImIw== 82338
IGZsb3dlcmluZw== 82339
IHZldGVyaW5hcmlhbg== 82340
IGhhcm1vbmlj 82341
IENhc3NhbmRyYQ== 82342
KENyZWF0ZQ== 82343
cGVyc2U= 82344
UGVybQ== 82345
KU5TU3RyaW5n 82346
IGlzSW4= 82347
IEZsb2F0aW5nQWN0aW9uQnV0dG9u 82348
L05ldw== 82349
IPCd 82350
Y2FwYWJpbGl0eQ== 82351
IGN1Y2tvbGQ= 82352
IEJhaW4= 82353
KCl7DQoNCg== 82354
UEVBUg== 82355
IGphd3M= 82356
IGdvZGU= 82357
IGNhc3NldHRl 82358
LmZyZXF1ZW5jeQ== 82359
U0NPUkU= 82360
LmludGVudA== 82361
Olsi 82362
IOWmguaenA== 82363
77yf4oCd 82364
L0ltYWdl 82365
IHNpZW5kbw== 82366
X2FsbG9jYXRpb24= 82367
OkI= 82368
L1JlZ2lzdGVy 82369
X2thdGVnb3Jp 82370
dW55YQ== 82371
Lmluc3RhbmNlcw== 82372
IFVOSVZFUlNJVFk= 82373
IHBsZWFzYW50bHk= 82374
IGdsYW5kcw== 82375
IFlFTExPVw== 82376
IFRoaWNr 82377
QW10 82378
IHByeQ== 82379
IGx1aw== 82380
KHByb2JsZW0= 82381
IHByb2plY3Rpbmc= 82382
W25vdw== 82383
IGVzdG95 82384
KCgpPT4= 82385
IHdheXBvaW50cw== 82386
IEJsaWNr 82387
LlJlcXVpcmU= 82388
TGFrZQ== 82389
IElHTk9SRQ== 82390
IFFIQm94TGF5b3V0 82391
X3Jlc3BvbnNlcw== 82392
Lndy 82393
JmFjdGlvbg== 82394
LmNoYXJhY3RlcnM= 82395
SVc= 82396
cGFnZU51bQ== 82397
IGRpc3RyYWN0aW5n 82398
XS0n 82399
cGVlcw== 82400
b3VuY3k= 82401
IHNlZ3U= 82402
LmdldFNlbGVjdGlvbk1vZGVs 82403
SW5saW5pbmc= 82404
J2FmZg== 82405
IFByZXNlcnZl 82406
IGFjcXVhaW50YW5jZQ== 82407
IGFudXM= 82408
aW5zdGl0dXRpb24= 82409
IC8vKg== 82410
IFNpY2s= 82411
IEtvZGk= 82412
IEFWUg== 82413
IGJldHI= 82414
IEJlcm5zdGVpbg== 82415
LGN2 82416
Y2Ni 82417
Q0FG 82418
CXNpZ25hbA== 82419
6KiI 82420
UmVzdWx0c0NvbnRyb2xsZXI= 82421
IHNhbG9wZXM= 82422
IHBoZW5vdHlwZQ== 82423
dWJhaA== 82424
X2RhdGFzZXRz 82425
IGdyYWNpb3Vz 82426
IENsaXBib2FyZA== 82427
IGdlbmRlcnM= 82428
ZG93bmxvYWRz 82429
RXhwZXJpbWVudGFs 82430
IGJla2FubnQ= 82431
IG5pdmU= 82432
LkVk 82433
ZGlzbWlzcw== 82434
XFR3aWc= 82435
LkF2 82436
L3Rhc2tz 82437
LnBpY2tsZQ== 82438
KkI= 82439
Y2VzdG9y 82440
Y2FwaXRhbGl6ZQ== 82441
LkdldFNlcnZpY2U= 82442
S2V5SWQ= 82443
LnBpdGNo 82444
IENvbnRyb2xsZWQ= 82445
LnNhdmVk 82446
IHphag== 82447
IENhdGh5 82448
KENhbmNlbGxhdGlvblRva2Vu 82449
LWFuaW1hdGU= 82450
XFxc 82451
IEphc21pbmU= 82452
LkxJTkU= 82453
IGJvdGhlcnM= 82454
IGJ1ZmZhbG8= 82455
IEZPUkVJR04= 82456
IHRhY2tsZWQ= 82457
X0hFQVA= 82458
IHNlcnZpYw== 82459
Pj4s 82460
IEFjdG9ycw== 82461
LlR4 82462
ZWJ4 82463
X3Zpc2l0b3I= 82464
X21hcnNoYWxlZA== 82465
LG1hcA== 82466
IGhlYXRlcnM= 82467
IHVMb2NhbA== 82468
IEthcG9vcg== 82469
IG1pbnV0 82470
LnJlYWRBcw== 82471
IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u 82472
X1ZPTFQ= 82473
LmJ6 82474
IGNvcnJlY3Rpbmc= 82475
U0VQ 82476
YnJpbmc= 82477
SHU= 82478
IEd1cw== 82479
QUFE 82480
aWVyYW4= 82481
ZnJhcmVk 82482
X3JvbQ== 82483
IHNjYXJjaXR5 82484
IGFwb2xvZ2lzZQ== 82485
IHNvbGlkcw== 82486
IEZvcm1hdHRlcg== 82487
ICclJA== 82488
LXZpcw== 82489
IiwiIiw= 82490
VU5ERVI= 82491
ISEhIQoK 82492
IEVsZXZlbg== 82493
KSld 82494
IHNhdGlyZQ== 82495
XHVC 82496
IHNldmVudGVlbg== 82497
TEFOR1VBR0U= 82498
IGFkdmVyc2FyeQ== 82499
IHN0cmZ0aW1l 82500
IG5leHVz 82501
dWJpdHM= 82502
ICclIg== 82503
IFNLSVA= 82504
S0hS 82505
LmJhdA== 82506
IEplYW5z 82507
Lj8= 82508
IGltcG9zdA== 82509
LnF0eQ== 82510
Q29tcHJlc3Npb24= 82511
IHByaW5jaXBhbGVz 82512
b25pbw== 82513
IGJhcmNlbG9uYQ== 82514
IENoaWxp 82515
X21vc3Q= 82516
LnVm 82517
IGNvbnRlbnRWYWx1ZXM= 82518
IEZpc3Q= 82519
dWdhZG9y 82520
VGV4dFdyaXRlcg== 82521
QkFDS0dST1VORA== 82522
IGxpdnJv 82523
IERlc2lyZQ== 82524
bWVhc3VyZW1lbnQ= 82525
UHJvYmU= 82526
IHB1ZGRpbmc= 82527
LnNob3dFcnJvcg== 82528
IHVudGVyc3TDvHQ= 82529
44CB44CB 82530
IMSHZQ== 82531
IHB1bml0aXZl 82532
5q2i 82533
TGlzdEdyb3Vw 82534
LkFyZWE= 82535
IPCfmIkKCg== 82536
b29yZA== 82537
IHNjcmFwaW5n 82538
KHRpY2tldA== 82539
IFdvY2hl 82540
IGV4cGVjdGVkUmVzdWx0 82541
IEtvc3Rlbmxvcw== 82542
Y29uZmlndXJlZA== 82543
X3N0cmVycm9y 82544
LmFkZEhhbmRsZXI= 82545
bW91c2VsZWF2ZQ== 82546
IEZlbGlwZQ== 82547
IENoaW0= 82548
X0NTUg== 82549
UENB 82550
aWZpY2HDp8Ojbw== 82551
KysKCg== 82552
eWFz 82553
IOaWueazlQ== 82554
IElETQ== 82555
IGFuaW1hdGVXaXRoRHVyYXRpb24= 82556
IHNhbWVu 82557
LnN1YnRpdGxl 82558
X0tleURvd24= 82559
IFRyZXk= 82560
IHRlbXBvcmFkYQ== 82561
IHNwZA== 82562
IFJj 82563
IE1hc3NpdmU= 82564
IGJvd3M= 82565
SG9zcGl0YWw= 82566
IGdyb290 82567
IHBhdmluZw== 82568
IGNob3Jlcw== 82569
IEFsbHk= 82570
IGNlcnRpZmljYXRpb25z 82571
IHhib3g= 82572
c2VsZWN0QWxs 82573
R2FtZU92ZXI= 82574
IGNvcm5lcnN0b25l 82575
UmVjb3ZlcmVk 82576
IGRlZW0= 82577
VWx0cmE= 82578
IGdldExhc3Q= 82579
IGFsbWE= 82580
LnRleHRGaWVsZA== 82581
IHdhaXZlZA== 82582
Pih7Cg== 82583
IEVzdHI= 82584
aXNhYmxl 82585
IHByb3Rvbg== 82586
X2ZhY2Vib29r 82587
X1RSQUlO 82588
IGNvb3BlcmF0aW5n 82589
dW5naQ== 82590
QXJpem9uYQ== 82591
I2VjaG8= 82592
LWV4cHJlc3Npb24= 82593
Lm1pbnV0ZXM= 82594
IHByZWZpeGVk 82595
IGZpc2hlcmllcw== 82596
LmNvcnJlY3Q= 82597
IG7Dpg== 82598
KFNwcml0ZQ== 82599
TW9kcw== 82600
IFZpZGU= 82601
IGdldEJ5SWQ= 82602
IEtleW5lcw== 82603
IEVneXB0aWFucw== 82604
X0NPRA== 82605
Qmllbg== 82606
cmVvcGVu 82607
aWdoZXQ= 82608
UkVERU5USUFM 82609
IHVud2luZA== 82610
JA0K 82611
IHJhY2tldA== 82612
IGZsb2F0VmFsdWU= 82613
IFNwZWNpYWx0eQ== 82614
b2NhdGU= 82615
bW91bnRlZA== 82616
QXR0ZW1wdHM= 82617
T2ZmaWNlcnM= 82618
SGFzaFRhYmxl 82619
IGTDqXZlbG9wcGVtZW50 82620
IGRhcA== 82621
IG10eA== 82622
TmFycmF0ZWQ= 82623
a0I= 82624
X1NUQQ== 82625
LUNsYXNz 82626
IGR1bA== 82627
IExlYWRz 82628
IHRyw6pz 82629
ZnJpZW5kbHk= 82630
IEZpbHRlcmluZw== 82631
LXByb3ZpZGVy 82632
INGD0YHQvw== 82633
IEtvbGthdGE= 82634
bWFza2Vk 82635
SURhdGE= 82636
IFt8 82637
wqQ= 82638
IFJlZXNl 82639
IEhvbm9sdWx1 82640
VG9PYmplY3Q= 82641
IHRocmlmdA== 82642
YXNzaQ== 82643
IGNvbmdyYXR1bGF0aW9ucw== 82644
U0tJ 82645
ZW50YXJpb3M= 82646
IEZST05U 82647
dWZpZw== 82648
aG9u 82649
CWdldGxpbmU= 82650
IGhlYXJ0eQ== 82651
Y2FsaW5n 82652
IMOpY29ub20= 82653
ICoqKi8K 82654
X0hFUkU= 82655
YCg= 82656
TWljaGlnYW4= 82657
QmVhbnM= 82658
LXJvdXRl 82659
IHByaW5j 82660
IEd1aWRhbmNl 82661
CWVtaXQ= 82662
Lk9Q 82663
dGhpYw== 82664
ZWxvcGU= 82665
IElSZXF1ZXN0 82666
IGhhbmRsZUNsb3Nl 82667
ZGF0YUFycmF5 82668
LkV4ZWN1dGVTY2FsYXI= 82669
RVBISVI= 82670
IENvbnZlcnNlbHk= 82671
KEZvbnQ= 82672
IG1ldHJl 82673
IFNwaWVsZXI= 82674
RWxsaXBzZQ== 82675
IFBWT0lE 82676
IERhdGFDb250ZXh0 82677
Y29uc3RydWN0ZWQ= 82678
QU5ESU5H 82679
LS0tLS0tLS0tLS0qLwo= 82680
Qm9uam91cg== 82681
X1BIUA== 82682
cHJvZ3Jlc3NiYXI= 82683
Tm90U3VwcG9ydGVkRXhjZXB0aW9u 82684
IHZlcmRhZGU= 82685
L2NoYW5nZQ== 82686
b3Jzaw== 82687
IGFyb21hdGlj 82688
cmVzcG9ucw== 82689
cmVhbGxvYw== 82690
YXRpc2No 82691
LGV2 82692
IFNpb3V4 82693
dGVh 82694
IFBvZQ== 82695
5LmI 82696
X2Ntb3M= 82697
IGFsYg== 82698
KGxy 82699
IEFwcGFyZWw= 82700
IGRlbGxv 82701
INGC0L7Rhw== 82702
IHN0cmVhbWxpbmU= 82703
d2NoYXI= 82704
QWRvYmU= 82705
LG1vZHVsZQ== 82706
IHVuaW5zdXJlZA== 82707
fSIpDQo= 82708
KCIvLypbQA== 82709
LXBoYXNl 82710
IGZldQ== 82711
X3RB 82712
em9law== 82713
IGZvbGxpYw== 82714
IHR1Zw== 82715
IGJlZmluZA== 82716
IHRhbGxlc3Q= 82717
KG10 82718
aWVkeQ== 82719
X0xlbmd0aA== 82720
IHN0YXVuY2g= 82721
IHJlbW92ZU9iamVjdA== 82722
IGZsYWtlcw== 82723
Z3Jlc3Fs 82724
IGlua2w= 82725
IFNDU0k= 82726
IEtlZXBlcg== 82727
O2w= 82728
IEhpbmR1cw== 82729
X1BFRA== 82730
X0NPTkQ= 82731
IExhdW5kcnk= 82732
KytdPQ== 82733
X0FVWA== 82734
IGJ5xYI= 82735
IGF1bWVudG8= 82736
bWFyZ2luTGVmdA== 82737
ZXF1YWxpdHk= 82738
IEx1eg== 82739
IEVjaw== 82740
X21hcw== 82741
X2xlbnM= 82742
IHN0ZXJpbGU= 82743
Y2xpZW50ZXM= 82744
J30pCgo= 82745
IGdvb2R3aWxs 82746
IEVsbGlzb24= 82747
U3BhY2VJdGVt 82748
IHNob3dNZXNzYWdl 82749
66Gc6re4 82750
IGNvbnRyYXRv 82751
UG9zdGluZw== 82752
LmludGVycG9sYXRl 82753
KGZpbGw= 82754
IGJ1bGxwZW4= 82755
LmdlbmVy 82756
IGh1ZXM= 82757
IG1lbW9yYW5kdW0= 82758
dG9Qcm9taXNl 82759
IEJ5eg== 82760
KHB4 82761
KFByb2dyYW0= 82762
UkVTU0lPTg== 82763
YmZk 82764
IHBsYW50YQ== 82765
Lm1vdXNlUG9zaXRpb24= 82766
IFNwYW0= 82767
6LSn 82768
dGVsZWdyYW0= 82769
YWd5 82770
IGdlZnVuZGVu 82771
LkRvbQ== 82772
IGxpbmVtYW4= 82773
LmJ0bkRlbGV0ZQ== 82774
IHNlbGVjdGl2ZWx5 82775
65Og 82776
SUZT 82777
IEdldEhhc2hDb2Rl 82778
IHJldGly 82779
IHJlcXVpc2l0ZQ== 82780
QlRUYWc= 82781
cGxpYg== 82782
IGZpcmVmb3g= 82783
LnRyYWRl 82784
ICMk 82785
LmNvbXByZXNz 82786
IGxhZGVu 82787
IERpcmVjdG9yeUluZm8= 82788
IE1vZGVz 82789
IGtvbmU= 82790
IGRpdnVs 82791
CWhz 82792
Y3JvZnQ= 82793
IFdIWQ== 82794
eENF 82795
L0dyaWQ= 82796
X0FVRA== 82797
IFNjcmU= 82798
IGVycm9yVGhyb3du 82799
U2FkbHk= 82800
YXRpdGlz 82801
IG5lZ2xpZ2libGU= 82802
LlJlZ2lzdGVyVHlwZQ== 82803
IE1vaXN0 82804
5rWL6K+V 82805
IEJNQw== 82806
bGVhZmxldA== 82807
eW5l 82808
cm9rZW4= 82809
IHZpbmM= 82810
dHR5 82811
IGJldXJldHRl 82812
IEFscGluZQ== 82813
IE1jTQ== 82814
U3BvaWxlcg== 82815
ZGlzdHJpYnV0aW9u 82816
LXJheXM= 82817
IOuwlA== 82818
X3BhcmVudHM= 82819
IGNyYXRlcw== 82820
IGNvbW11dGVycw== 82821
IEFyZ2VudGluZQ== 82822
77u/LyoK 82823
L2ZyYW1ld29yaw== 82824
IGNoYW5uZWxJZA== 82825
Z3JlZW5z 82826
LnNldFN0eWxlU2hlZXQ= 82827
IGluYWNjZXNzaWJsZQ== 82828
aXRhdGVz 82829
IHdhcm1lZA== 82830
RmFicmlj 82831
Z2V0YXR0cg== 82832
ZGlzcGxheVRleHQ= 82833
X01PTklUT1I= 82834
IHNpZGV3YWxrcw== 82835
SW50aWFsaXplZA== 82836
IGtvbWVu 82837
IGRpc2NyaW1pbmF0b3I= 82838
IE5hdmlnYXRl 82839
KERpcmVjdGlvbg== 82840
IFNwaXQ= 82841
X2FkZGl0aW9uYWw= 82842
IGh0b24= 82843
IGVzcGVyYQ== 82844
IGRlbHZl 82845
IGNvbXBhcnRpcg== 82846
IHByZWVtcHQ= 82847
cHJvY2Vzc29ycw== 82848
LWdpdA== 82849
YmVlbg== 82850
LlNVQg== 82851
IFJlZXZlcw== 82852
L2dlbg== 82853
O3RvcA== 82854
CU1QSQ== 82855
Wlc= 82856
R0VTVA== 82857
YWJpbGly 82858
IHByb2dyZXNzaXZlcw== 82859
aGFmdA== 82860
QXVm 82861
IEFjdGlvblR5cGU= 82862
bGVv 82863
IHV0YW4= 82864
SW5pY2lhbA== 82865
PlVzZXI= 82866
IH0pOwoKCgo= 82867
INio2Yc= 82868
IENoYWlucw== 82869
aXNzcGFjZQ== 82870
L3JlbQ== 82871
U1FMaXRl 82872
IGNlYXNlZmlyZQ== 82873
JGFy 82874
VFJT 82875
Oi8vew== 82876
IFNwaXJpdHM= 82877
2Lo= 82878
KFNpemU= 82879
IG51Zw== 82880
IE9sc2Vu 82881
IGNobG9yaWRl 82882
IERpc3BsYXlOYW1l 82883
IFBlcnQ= 82884
IGdldE1heA== 82885
IEVkaXRvcnM= 82886
IFBhaXM= 82887
YXNtdXM= 82888
VmFj 82889
IFRhYmxlTmFtZQ== 82890
IG51YW5jZWQ= 82891
Rm9yTWVtYmVy 82892
IHNsZWVweQ== 82893
YWR2aXNvcg== 82894
IHN0YWxraW5n 82895
Lm1lZGlhbg== 82896
X0F0dA== 82897
IGdldE5vZGU= 82898
IEZhbmN5 82899
5pWw6YeP 82900
LkF0dHJpYnV0ZVNldA== 82901
KGluc3RydWN0aW9u 82902
eEJE 82903
IGtvcA== 82904
QWZmZWN0ZWQ= 82905
L25hdmJhcg== 82906
IGFpbG1lbnRz 82907
IFJhbWFkYW4= 82908
IEFjY2VudA== 82909
IFBhcmFtb3VudA== 82910
IEdBTQ== 82911
5L2N572u 82912
PSov 82913
LklOUFVU 82914
PFByb2plY3Q= 82915
TGVhc3Q= 82916
IEdlbm9tZQ== 82917
QWNjZXNzb3JUeXBl 82918
bGVmdHJpZ2h0YXJyb3c= 82919
dmVudGluZw== 82920
L3BheW1lbnQ= 82921
X1B0cg== 82922
IHRhbWU= 82923
IE1FTUJFUg== 82924
IEJpdGNvaW5z 82925
LmVwYW0= 82926
LlBsZWFzZQ== 82927
IHNjaHdhcg== 82928
Q3BwTWV0aG9kSW50aWFsaXplZA== 82929
IHVuaWNvcm4= 82930
IGJlZGV1dA== 82931
X0hT 82932
IGF1dG9nZW5lcmF0ZWQ= 82933
IExpbGx5 82934
IEFzc2Vzcw== 82935
IEhlaWRp 82936
LnNvdXJjZXM= 82937
LnRlbGw= 82938
YXJnaW5z 82939
KCInIiw= 82940
0LvQvtC2 82941
IEVyb3RpYw== 82942
IGp1c3Rv 82943
IGVzYWM= 82944
Y29tYQ== 82945
IENvbG9ueQ== 82946
IHBjdA== 82947
CWVu 82948
IGVtcGV6 82949
IERlbGV0aW5n 82950
TkVM 82951
IGVuYW0= 82952
UHJlc3NFdmVudA== 82953
IFJlc29sdmVy 82954
IFJURQ== 82955
Rng= 82956
IEluY29ycmVjdA== 82957
IHlj 82958
X3JlYWRpbmc= 82959
O2Jhc2U= 82960
IGhhc2h0YWdz 82961
IE1hcmluZXJz 82962
LlNldEZsb2F0 82963
IHJlYXNzdXJpbmc= 82964
aXJzY2g= 82965
KHVzZXJpZA== 82966
ID09PT0= 82967
XSkpKTsK 82968
a2Y= 82969
IHRpbGVk 82970
ZWd1YXJk 82971
Q2xpZW50ZXM= 82972
5pmC6ZaT 82973
ZHNs 82974
UmlnaHRz 82975
IFBzYWxt 82976
ZHVyaW5n 82977
Q2xlYXJDb2xvcg== 82978
dXN0YQ== 82979
PENvbW1lbnQ= 82980
IG5venpsZQ== 82981
IFBMQUNF 82982
L2hpc3Rvcnk= 82983
aWh1 82984
aVZhcg== 82985
IGdlcm0= 82986
IHRyaW1taW5n 82987
IEh1bnRlcnM= 82988
IFJTVlA= 82989
SW50ZXJlc3RpbmdseQ== 82990
amlhbg== 82991
KSl7Cgo= 82992
LkV4cGVjdA== 82993
IFRvaWxldA== 82994
IHdhbGxwYXBlcnM= 82995
LldlYlNlcnZsZXQ= 82996
YXJwYQ== 82997
L21haW53aW5kb3c= 82998
aHE= 82999
IHV5 83000
IGluZGlnbg== 83001
Q2hlY2tlZENoYW5nZUxpc3RlbmVy 83002
IGNhbGxlcnM= 83003
IE1vdXNlRXZlbnRBcmdz 83004
IEpTY3JvbGxQYW5l 83005
IHfFgmE= 83006
cmVwb3NpdG9yaWVz 83007
IMWbdw== 83008
IHJlZmVyZW5jaWE= 83009
IGlvdGE= 83010
IGNhcmdhcg== 83011
X29ic2VydmVy 83012
SENJ 83013
c2lsdmVy 83014
IGRldmFzdGF0aW9u 83015
LXNlbWlib2xk 83016
IEV4cGxhaW4= 83017
IEJsb2NrbHk= 83018
Llhy 83019
ZXN0dXJlUmVjb2duaXplcg== 83020
Q2FuY2VsQnV0dG9u 83021
IExvY2tl 83022
VHJpYWw= 83023
X1BMQUNF 83024
anVhbGFu 83025
IFJ1Ymlu 83026
U3RyaXBl 83027
IG1ldGFEYXRh 83028
Y29uZmlkZW5jZQ== 83029
X2JhdHRlcnk= 83030
IGlzbA== 83031
IGJvYQ== 83032
LnRhcmdldHM= 83033
bGlqa2U= 83034
IGFkb2xlc2NlbnRl 83035
YmV3 83036
LEZhbHNl 83037
IHlPZmZzZXQ= 83038
UHJldmlvdXNseQ== 83039
PXBhdGg= 83040
X0FB 83041
iOadgw== 83042
IGJha2VrYQ== 83043
IGxlZQ== 83044
IEJsb2NraW5n 83045
L3RpdGxl 83046
IOW8gA== 83047
IFN0ZXZlbnNvbg== 83048
KW9iamVjdA== 83049
aXN0cm9z 83050
LmdldFNlcnZlcg== 83051
IHBsYW50YXRpb24= 83052
X0JveA== 83053
ICc7Jw== 83054
dGljYQ== 83055
KSldOwo= 83056
IGRpc3Bhcml0aWVz 83057
xrDhu5s= 83058
aWNyb2JpYWw= 83059
IHNwYXM= 83060
L0RE 83061
KHBvaW50ZXI= 83062
IG1pZHBvaW50 83063
LmdldENsYXNzTmFtZQ== 83064
IFRvdGFsbHk= 83065
IGNvbmdlbg== 83066
IHTDqnRl 83067
LnhsaW0= 83068
Q09NUExFVEU= 83069
KGZp 83070
b3dhcmQ= 83071
0LzRjw== 83072
LmFzYw== 83073
IHBhZ2luYXRl 83074
IGx1cmtpbmc= 83075
LnNpZ251cA== 83076
U1RZTEU= 83077
IHdvcnNo 83078
aHY= 83079
IGRlZmVuc2l2ZWx5 83080
IEx1dGhlcmFu 83081
LmZ1bg== 83082
INC40L3RhNC+0YDQvA== 83083
cHNj 83084
IGFkbW9u 83085
IEVzdGltYXRlZA== 83086
IE15U3FsQ29ubmVjdGlvbg== 83087
LnN0YXR1c1N0cmlw 83088
IGFudGlnZW4= 83089
IGhlcnJhbWllbnQ= 83090
IENvbnN1bWVycw== 83091
IFlU 83092
Lm1hc2tzVG9Cb3VuZHM= 83093
Lnh0aWNrcw== 83094
OnJlcXVlc3Q= 83095
IE1vbw== 83096
LWF1 83097
IHRvUmV0dXJu 83098
IFNhcHBoaXJl 83099
Y294 83100
ZXhhbXBsZUlucHV0RW1haWw= 83101
IGNvcmF6 83102
KHBpZWNl 83103
IHJlY29uc3RydWN0ZWQ= 83104
X3NpZ251cA== 83105
J10pPw== 83106
QmlsbGluZw== 83107
IENyb3dsZXk= 83108
c3Rvcm1z 83109
Zm9yY2Vy 83110
IHN1cHJlbWFjaXN0 83111
X3doZWVs 83112
CXBj 83113
LmdldERvY3VtZW50 83114
LnVuc3F1ZWV6ZQ== 83115
LmdyYWRl 83116
ZWxsdW5n 83117
LnNob3BwaW5n 83118
Y3VzdG9tZXJJZA== 83119
IG1lZGlkYXM= 83120
IE1vbWVudHM= 83121
ZW51b3Vz 83122
SUZJQ0FURQ== 83123
IyMjIyMjIwo= 83124
5paH56ug 83125
4buNYw== 83126
b3Jtc2c= 83127
YWxvbQ== 83128
LXRyYWRl 83129
CWJ0 83130
L3N0dWRlbnQ= 83131
YnJpZw== 83132
YW5uZXNz 83133
KHJh 83134
IHJpY2VyY2E= 83135
U3BlYWtlcg== 83136
csOz 83137
Z3Rlc3Q= 83138
R2x5cGg= 83139
w7xnZW4= 83140
QEpzb24= 83141
KHN1bW1hcnk= 83142
S29t 83143
YmV0aA== 83144
L2VuZ2luZQ== 83145
Q2xpbWF0ZQ== 83146
c3VibWl0QnV0dG9u 83147
ZXZl 83148
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cg== 83149
cGVkaWE= 83150
IHVzZXJuYW1lcw== 83151
IEpN 83152
IG1zZQ== 83153
aW5zcGVjdA== 83154
IFNuYXBkcmFnb24= 83155
IGRlZmVuc2VtYW4= 83156
IFVJVGFibGVWaWV3RGVsZWdhdGU= 83157
aW5kaG92ZW4= 83158
IEJveWxl 83159
IEFsdGE= 83160
YXJkdQ== 83161
IHdyZXN0bGVy 83162
IFN0cmFpdA== 83163
IGVncmVn 83164
X2Jhc2VsaW5l 83165
RW52aXJvbm1lbnRhbA== 83166
IGludml0 83167
IEJUUw== 83168
IElTSUw= 83169
IGNvb3A= 83170
aG9yZXM= 83171
I0A= 83172
IGNvbXBlbA== 83173
KHNraXA= 83174
6Ziz 83175
X0RFUFJFQ0FURUQ= 83176
aXBoZXJz 83177
ZG91YmxlVmFsdWU= 83178
IEFSUg== 83179
LlNjb3Jl 83180
IGNocm9tb3NvbWVz 83181
Y2xhdXNl 83182
IEx1aWdp 83183
IHN1bnNjcmVlbg== 83184
IGN5dG9r 83185
LnRvSlNPTlN0cmluZw== 83186
IHByb3ByZQ== 83187
cG9vbnM= 83188
bWl0dGVycw== 83189
IGtpdHRlbnM= 83190
IGNhdGhvbGlj 83191
Lmx0 83192
wqw= 83193
X3F1aWNr 83194
IHZyYWk= 83195
IElSZWFkT25seQ== 83196
IEhpZ2dpbnM= 83197
IHNob3ZlZA== 83198
IGxpYWlzb24= 83199
X293bg== 83200
IG1vc3F1aXRvZXM= 83201
X25n 83202
LlNldEtleU5hbWU= 83203
X1JlbmRlcmVy 83204
X09zYw== 83205
LnVucmVnaXN0ZXI= 83206
TWVzc2FnZVR5cGU= 83207
LWZvdW5kZWQ= 83208
IHNvdXRoZWFzdGVybg== 83209
IGhhc2h0YWJsZQ== 83210
LmluZGVudA== 83211
IGpveWZ1bA== 83212
X3NleA== 83213
c2Fk 83214
LmRlYmlhbg== 83215
X2dhcw== 83216
IHBlcmlzaA== 83217
IGhldGU= 83218
X3NpbmdsZXRvbg== 83219
KGdyYWQ= 83220
IGt0w7NyYQ== 83221
IGR3aW5k 83222
aXR0YWw= 83223
U2VlaW5n 83224
IFJvb2tpZQ== 83225
CUxhYmVs 83226
c2hhbg== 83227
PDw8PDw8PDw= 83228
IHLDqA== 83229
aWVzZWw= 83230
YXJyZXJh 83231
Y2hyaXN0 83232
IGN1cnZhdHVyZQ== 83233
IGVwaGVt 83234
Rm9ybWF0dGluZw== 83235
LmRpY3Rpb25hcnk= 83236
LlNldHRlcg== 83237
IEhpc3RvZ3JhbQ== 83238
IFN0dXR0Z2FydA== 83239
IHBhY2luZw== 83240
dXRhdGlvbnM= 83241
IE5TSw== 83242
IFBhbWVsYQ== 83243
IEJhaWw= 83244
IHBvbGFyaXphdGlvbg== 83245
IEfDtg== 83246
IEVsYWluZQ== 83247
IGtpY2tvZmY= 83248
IGNoYXBlbA== 83249
PXBvc3Q= 83250
IG1pZHdheQ== 83251
ZXdpcw== 83252
X01S 83253
aWVlZQ== 83254
LXRlc3Rpbmc= 83255
bWV6 83256
Pi0t 83257
IGRvY3RyaW5lcw== 83258
IG1pbGlldQ== 83259
IFJBRElP 83260
dGFrZW4= 83261
UmVzcG9ucw== 83262
IGhhbmRzZXQ= 83263
IGNvbnRybw== 83264
IEFwcGxpZXM= 83265
6Zif 83266
LkJpbmRpbmdTb3VyY2U= 83267
INis 83268
IGh1bWlsaQ== 83269
IE1lbGFuaWE= 83270
T3ZlcmxhcA== 83271
KFBhcmNlbA== 83272
IHdhcmVob3VzZXM= 83273
LkdldEJ5SWQ= 83274
IGZyYW5rZnVydA== 83275
IFdpdHQ= 83276
LnByb2o= 83277
IFNhc2hh 83278
IFJldmVy 83279
IGFydGljdWxhdGVk 83280
YW5jaGVz 83281
IFNlbWluYXI= 83282
IERhZ2dlcg== 83283
IEFnaWxl 83284
T1dM 83285
IEJz 83286
b2tseW4= 83287
RXRh 83288
IGFnb3N0bw== 83289
7ZWY7Jes 83290
IG9wdGFyZw== 83291
CW9uQ2hhbmdl 83292
IFJPQUQ= 83293
R0JL 83294
IGVudGZlcg== 83295
LkF1dG9Db21wbGV0ZQ== 83296
IGhlbGZlbg== 83297
Q2hlYXA= 83298
IGFwcHJlbnRpY2U= 83299
aW90aWNz 83300
5oqA 83301
T2ZZZWFy 83302
aW5kZXJlZA== 83303
Lk1TRw== 83304
IE1hcsOtYQ== 83305
KGlucGxhY2U= 83306
IGZpbmRl 83307
KERF 83308
LlNlcmlhbGl6ZXI= 83309
JHRpbWU= 83310
dW5uYWJsZQ== 83311
TWFpblRocmVhZA== 83312
ZGVwbG95bWVudA== 83313
IG1wZnI= 83314
cmljaFRleHRQYW5lbA== 83315
KTsKCgoKCg== 83316
IGRhbnljaA== 83317
X0JFRk9SRQ== 83318
X2FyeQ== 83319
IEJhdW0= 83320
IHR1cmJ1bGVudA== 83321
IE11bHRpbWVkaWE= 83322
IHBoeXNpY2lzdA== 83323
5Zy6 83324
QW5pbWF0ZQ== 83325
PUY= 83326
UGFnbw== 83327
L3R3aXR0ZXI= 83328
b3R0aWU= 83329
dWN1cnNhbA== 83330
X3BhZ2luYXRpb24= 83331
LmFyY2hpdmU= 83332
LWRvY3VtZW50 83333
aW5pbmU= 83334
U2VsbGVy 83335
YWRyZXNz 83336
6ZO+5o6l 83337
0LDRgtC10LPQvtGA 83338
X2ZybQ== 83339
bm9EQg== 83340
aWdhdGVk 83341
IE9zYW1h 83342
cGV0dG8= 83343
Pnk= 83344
LVVu 83345
IGNvcHBpYQ== 83346
QWxtb3N0RXF1YWw= 83347
LmxleA== 83348
IGxldmVsZWQ= 83349
IFNDSVA= 83350
X0hPT0s= 83351
SUxvZ2dlcg== 83352
bmVhdQ== 83353
77ye 83354
24zZhg== 83355
aWtoYWls 83356
IHVwbG9hZGVy 83357
IENhcm9seW4= 83358
LmFkZFZhbHVl 83359
dGhpbmtpbmc= 83360
cHJpbnRTdGF0cw== 83361
IGNhbWJpb3M= 83362
cG9p 83363
IEJFRA== 83364
IHhibWM= 83365
Lu+/vQ== 83366
IHNhcmNhc3Q= 83367
IE5FQw== 83368
JGJvZHk= 83369
QWxsV2luZG93cw== 83370
IHlvdW5nc3Rlcg== 83371
IHVuZWFzeQ== 83372
KEFU 83373
IG5vc3RhbGdpYw== 83374
UFJJQ0U= 83375
IFNlaXRlbg== 83376
IG1ha2E= 83377
IGxpbXA= 83378
IGNvbnRyYXN0cw== 83379
Q29mZmVl 83380
CWdlbg== 83381
IHBlcm1z 83382
IE5lZWRsZXNz 83383
b3V2ZQ== 83384
YXJjaGluZw== 83385
X3BlbmFsdHk= 83386
cm93YWQ= 83387
b25nYW4= 83388
X2R1cg== 83389
IGlmbmRlZg== 83390
aWF1eA== 83391
IGNhcGFjaWRhZA== 83392
IE5vcnRl 83393
IC0qLQ0K 83394
aWZlcw== 83395
IE1hbnNpb24= 83396
I1JlZ2lvbg== 83397
Q2FuY2VsbGF0aW9u 83398
IG5lYXJpbmc= 83399
IGxhbmd1 83400
ZXJlcXVpc2l0ZXM= 83401
X2V4cGVyaW1lbnQ= 83402
b25kaGVpbQ== 83403
XSwm 83404
IENvb2xpbmc= 83405
IHNhZmFyaQ== 83406
IHBpb25lZXJz 83407
IGZhcm1ob3VzZQ== 83408
IGRpc3RhbmNpYQ== 83409
IGRlc2VydGVk 83410
IE5hcnJvdw== 83411
LnNn 83412
IGVudHJhcg== 83413
LnJh 83414
IHJlZnVyYmlzaGVk 83415
IGludGVyY29ubmVjdGVk 83416
IHN1cnZpdmVz 83417
IHF1YWxpZmllcnM= 83418
X0NIQVJT 83419
LWFqYXg= 83420
IFJvcnk= 83421
IGtvbGVq 83422
L0dM 83423
X2xlZ2Fs 83424
IFRZUEVT 83425
IFZvaWNlcw== 83426
IEZlcmQ= 83427
dWplbXk= 83428
IHNjb3JlYm9hcmQ= 83429
IEJPVA== 83430
eERE 83431
IEl2YW5rYQ== 83432
IGhzdg== 83433
bm9kaXNjYXJk 83434
IFRIRVNF 83435
bW9qb20= 83436
IHRpY2tpbmc= 83437
cGVx 83438
IOa3u+WKoA== 83439
IE5pY29s 83440
CWFuZ2xl 83441
X2FsbG9jYXRlZA== 83442
IHN0cnV0 83443
eERC 83444
RXZhbHVhdGU= 83445
IFZBUklBTlQ= 83446
IHJlZmVyZW5jZWRDb2x1bW5OYW1l 83447
bG9o 83448
IFJlcXVlc3RPcHRpb25z 83449
IGNvY28= 83450
IGJsZWFjaA== 83451
X29yZ2FuaXphdGlvbg== 83452
IENITw== 83453
SFRUUFM= 83454
X2JhcnJpZXI= 83455
LnZpc2l0TWV0aG9kSW5zbg== 83456
IHZpdGU= 83457
IC0k 83458
W2NlbGw= 83459
IGNlc3NhdGlvbg== 83460
CgoKCgoKCgoKCgo= 83461
INGB0LDQuQ== 83462
RXZhbHVhdGlvbg== 83463
IENJTQ== 83464
cXVhbGl0aWVz 83465
WG1sQXR0cmlidXRl 83466
IEVtb2pp 83467
ICIoJw== 83468
IFRVUk4= 83469
eHNk 83470
IEdJUw== 83471
IGNyZWF0ZVNlbGVjdG9y 83472
cmlwcGxl 83473
IHVubmVjZXNzYXJpbHk= 83474
IG5ld1Bvcw== 83475
IHN5bWJvbGlzbQ== 83476
b2J1dHRvbg== 83477
IHNhbW8= 83478
ICgqKCg= 83479
LnJld2FyZA== 83480
S0VSTkVM 83481
KGpTY3JvbGxQYW5l 83482
IGJ5c3RhbmQ= 83483
X2ljYWxs 83484
IGR1bmdlb25z 83485
IGNvbnN0ZWxsYXRpb24= 83486
IGVtYnJhY2Vz 83487
IEluZmFudA== 83488
QXVzdGlu 83489
LmFic3RyYWN0 83490
IGNvbXBhZ24= 83491
IENvbmRpdGlvbmluZw== 83492
TWFpcw== 83493
VmVyaWZpZXI= 83494
IFB5cmFtaWQ= 83495
IG1MaXN0ZW5lcg== 83496
X2J1aWxkaW5n 83497
LlJlZGlz 83498
IFRvb3Ro 83499
TE9HR0VS 83500
LkFzeW5jVGFzaw== 83501
X3ByaW5jaXBhbA== 83502
ZXhhbXBsZU1vZGFsTGFiZWw= 83503
CUxvY2Fs 83504
TWFya2Vycw== 83505
IGRvbHBoaW5z 83506
LlRleHRFZGl0 83507
J2Fs 83508
IG92ZXJzdA== 83509
LWRyaXZl 83510
IGluc29tbmlh 83511
IGFkYg== 83512
X3F1ZXVlcw== 83513
RWI= 83514
IERhbW4= 83515
aXN0cmluZ3N0cmVhbQ== 83516
CUR1ZWw= 83517
aWJibGU= 83518
IGltcmVhZA== 83519
LmZpbmlzaGVk 83520
IG1pc3JlcHJlc2VudGVk 83521
xYRzdA== 83522
aW9uYWxlcw== 83523
Ik5vdw== 83524
LlNlbGVjdFNpbmdsZU5vZGU= 83525
IHdlYWtlbmluZw== 83526
X2luc3RydWN0aW9ucw== 83527
LW9z 83528
IHN0YXJ0UG9pbnQ= 83529
IE1pbWU= 83530
IEhlbGQ= 83531
fHwo 83532
dW1taW5ncw== 83533
b2tpbm8= 83534
IHJlZmw= 83535
cmlkb3I= 83536
SW50ZWdyYXRlZA== 83537
RU9iamVjdA== 83538
cGVhdHM= 83539
Q2lyY3VsYXI= 83540
IFNvZGl1bQ== 83541
IHBvZHLDrWE= 83542
bWVkaWNpbmU= 83543
IHBhcmFub2lh 83544
L2JhY2tncm91bmQ= 83545
KGJvcmRlcg== 83546
X3Nsb3c= 83547
IHByZXNlbnRWaWV3Q29udHJvbGxlcg== 83548
IGNvbnRpbmdlbmN5 83549
IFBhc2FkZW5h 83550
bG9vcHM= 83551
IE9j 83552
YXBwbGljYXRpb25z 83553
IG1wZw== 83554
IEFR 83555
LldpbkNvbnRyb2xz 83556
bGVkb24= 83557
IFJlcQ== 83558
IEFjcmVz 83559
aWJpcg== 83560
IGdldFdpbmRvdw== 83561
IFlhaA== 83562
IG5lZWR5 83563
4pa6 83564
IFRPTQ== 83565
KFsuLi4= 83566
IGZx 83567
IENhbWRlbg== 83568
b3JkaW5hdGVk 83569
CWNoaWxkcmVu 83570
dmVnZXQ= 83571
CWRpcmVjdGlvbg== 83572
PEZpZWxk 83573
X2NvcnJlY3Rpb24= 83574
KEVORA== 83575
SEVFVA== 83576
RmFsc3k= 83577
LmR5bGli 83578
X1JFUE8= 83579
IGJyaWxsaWFuY2U= 83580
b2dyw6Fm 83581
bG9k 83582
IHBvd2RlcmVk 83583
KEFydA== 83584
IE1JTEw= 83585
0LXQtNCw0Lo= 83586
X3NpbXVsYXRpb24= 83587
IHNtYXNoaW5n 83588
IHVybFN0cmluZw== 83589
IGRyZWFkZWQ= 83590
cmllZw== 83591
L25z 83592
IEludGVycHJldGVy 83593
Om1heA== 83594
ZGVyaXY= 83595
IFBldHQ= 83596
IG1vZMOobGU= 83597
IGFtcGxpZmllZA== 83598
IFNpZ25hbHM= 83599
Lm5hdkN0cmw= 83600
5ZY= 83601
IHNlcGFyYXRvcnM= 83602
IFNISUZU 83603
IGZpZGVsaXR5 83604
LnNvbg== 83605
KGNh 83606
IFBMVUdJTg== 83607
IGxpZ2h0ZW4= 83608
UEJT 83609
ZmxvYXRpbmc= 83610
KGxvYWRlcg== 83611
IHBlZWxlZA== 83612
aGlj 83613
IHRhcGVk 83614
IG5vdmVtYnJl 83615
IHN0dWZmaW5n 83616
IEZpcmVhcm1z 83617
LkRyYXdhYmxl 83618
IGNvcnRpY2Fs 83619
IEdVSUNvbnRlbnQ= 83620
IFZlcm9uaWNh 83621
X3JzYQ== 83622
IGNvbW1lbW9yYXRl 83623
LlNZU1RFTQ== 83624
IGRhbXM= 83625
LmlzVHJ1ZQ== 83626
IFByZWduYW5jeQ== 83627
7Iug 83628
IGF1ZGl0b3J5 83629
KENlbGw= 83630
IGludmFkaW5n 83631
IGZvckVhY2g= 83632
CURyYXc= 83633
TWFyY3Vz 83634
UHJvY2Vzc2Vk 83635
IHNwcmF5aW5n 83636
IE91dGxpbmVJbnB1dEJvcmRlcg== 83637
ZXNzZXJhY3Q= 83638
IOacgA== 83639
UGc= 83640
LXF1YXJ0ZXJz 83641
IHNrbA== 83642
L3Byb3ZpZGVycw== 83643
dG9IYXZlQmVlbkNhbGxlZFRpbWVz 83644
IGNvc21vcw== 83645
IGZpbmFsaXN0cw== 83646
IHNsZWVwZXI= 83647
IE1hdGVyaWFsQXBw 83648
ZGFj 83649
IGJ1c2luZXNzbWVu 83650
xJ9lcg== 83651
Qmlhcw== 83652
ZGF0YWw= 83653
VXBFZGl0 83654
IFRpcg== 83655
SVNUSUM= 83656
IEhlcmE= 83657
X2ludGVyc2VjdGlvbg== 83658
IExhbWE= 83659
CWFwcGVuZA== 83660
IHBvbGx1dGFudHM= 83661
IFNpa2g= 83662
IGNvbGxhYm9yYXRpb25z 83663
bnV0cml0aW9u 83664
IGhhbW0= 83665
IERpbGxvbg== 83666
X0RPVA== 83667
IGZpcnN0aGFuZA== 83668
U09BUA== 83669
PXo= 83670
LnByaXY= 83671
TWlzbWF0Y2g= 83672
LnNlbmRSZWRpcmVjdA== 83673
LmxpbmtMYWJlbA== 83674
IHdyZWFr 83675
TWFydmVs 83676
L3Ns 83677
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 83678
IG1vdmFibGU= 83679
0YPQuQ== 83680
IERyaW5raW5n 83681
YWNlYQ== 83682
IHRyb3ZhcmU= 83683
LkNTUw== 83684
IGtlcm4= 83685
dmZz 83686
5pWw5a2X 83687
IHN0ZXNzbw== 83688
IEZPUkNF 83689
IGxpZWY= 83690
IGFjaGlldmVz 83691
IEVsaWphaA== 83692
R2V0UHJvcGVydHk= 83693
LypA 83694
IEh1bWFuaXR5 83695
KFRoZQ== 83696
d2FybQ== 83697
PiIp 83698
IGNvbXB1dGF0aW9ucw== 83699
LnRpbnRDb2xvcg== 83700
IHVzbGVlcA== 83701
IEdQTHY= 83702
bmRhdGE= 83703
L2NsaQ== 83704
TW9o 83705
PiINCg== 83706
LmJyaWRnZQ== 83707
IGVuY3ljbG9wZWRpYQ== 83708
IEJJTg== 83709
IFN1cHBvc2U= 83710
INio2Kc= 83711
cmlldmVk 83712
cGFnZW4= 83713
aXJzZQ== 83714
UGFjaWZpYw== 83715
LmZ1bGxOYW1l 83716
IGFsbGVnZQ== 83717
aWxsdXN0cg== 83718
IOqysA== 83719
IGRldGVycmVudA== 83720
IE5hcGxlcw== 83721
aW5jbHVkZWQ= 83722
UmF0ZXM= 83723
IGhhc05leHQ= 83724
IEplcmVtaWFo 83725
IEZlcm5hbmRleg== 83726
IGdldE9yZGVy 83727
LlN1YnNjcmliZQ== 83728
UG9zcw== 83729
OikK 83730
IFdvcmtzaGVldA== 83731
YmxlbmQ= 83732
IHdpdHR5 83733
IGNvdW50ZXJmZWl0 83734
X2R5 83735
L1J1bnRpbWU= 83736
IHNvZG9t 83737
L2Rv 83738
IDx8 83739
IFJlY3J1 83740
5aOw5piO 83741
IG1vZGVsb3M= 83742
IGJpdHJhdGU= 83743
LmNybQ== 83744
bHVz 83745
IGZpbGVUeXBl 83746
5bCR 83747
IG1hcnJvdw== 83748
IFZlbmV6dWVsYW4= 83749
IHNjYXY= 83750
IFNUT0NL 83751
IEltcG9zc2libGU= 83752
bmF2aWdhdGlvbkJhcg== 83753
IHNpZ2h0aW5ncw== 83754
IGNlbGxGb3JSb3dBdA== 83755
IHJlY3Rz 83756
IGFpcmw= 83757
IExlc3Rlcg== 83758
IG5vZHM= 83759
QHJlZ2lzdGVy 83760
eENE 83761
cG5hbWU= 83762
IHBvdHRlcnk= 83763
IHp3YXI= 83764
IFN1bmRlcmxhbmQ= 83765
4oCmYnV0 83766
L2NvbnRyb2w= 83767
IGNhbGN1bHVz 83768
KGlzb2xhdGU= 83769
cGxhY2Vob2xkZXJz 83770
Kilf 83771
IH19DQo= 83772
IEtvaGFuYQ== 83773
Y29kaWxl 83774
b3Rlcmlj 83775
IHByZXBhaWQ= 83776
IGdyYW5kbWE= 83777
IHN1bHBo 83778
IEdhaW5lcw== 83779
XE1vZHVsZQ== 83780
IGNvdW5zZWxsaW5n 83781
LWdlbmVyaWM= 83782
IFR1ZXM= 83783
LkdyYWRpZW50 83784
IFRodXJz 83785
IGVudHJh 83786
IGFkdmFuY2VtZW50cw== 83787
U1dFUA== 83788
X01BUktFUg== 83789
IGtsdWI= 83790
IG3DqWc= 83791
ZmZmZmZmZg== 83792
Il0pewo= 83793
L2NvbXBpbGVy 83794
YWRpZW5z 83795
U3RyaW5nVmFsdWU= 83796
IFNjdWxwdA== 83797
cGFuZWxz 83798
5b2i 83799
5Lqn5ZOB 83800
YXLDrWE= 83801
IGRlcmFpbA== 83802
IExvY2g= 83803
IHBlcHA= 83804
bXB6 83805
IOKe 83806
S1Y= 83807
IERpZXRhcnk= 83808
QVJSSUVS 83809
IHBvbw== 83810
IFJBTkRPTQ== 83811
6LM= 83812
IEhvbWV3b3Jr 83813
LlZhbGlkYXRpb25FcnJvcg== 83814
IE1hcnhpc20= 83815
0YPRgtGM 83816
IGNvbWVudGFyaW8= 83817
X0JPVEg= 83818
IHBybQ== 83819
Y2FzdEhpdA== 83820
aXBsaW5h 83821
IFZvdGVycw== 83822
LmFzc2lnbm1lbnQ= 83823
bmV0dA== 83824
U0FNUExF 83825
amlz 83826
InRpdGxl 83827
LnZhbGlkYXRvcnM= 83828
ICI/Ig== 83829
dW5pZGFk 83830
X2ZpZ3VyZQ== 83831
IGFjY3J1 83832
IFJlbWFyaw== 83833
Rm91bmRlcg== 83834
LmluaXRpYWxpemVBcHA= 83835
IFByZXNlbnRz 83836
IE1VTFRJ 83837
dmVzdGVy 83838
LnZpc2l0SW5zbg== 83839
IGdldFBhdGg= 83840
X2RpZmZlcmVudA== 83841
IGxvb3Nlbg== 83842
IGFycm9nYW5jZQ== 83843
IGp1bmk= 83844
IFphaGw= 83845
IEdDQk8= 83846
IG1vZGVyYXRvcnM= 83847
TGluZUNvbG9y 83848
IE5vZGVUeXBl 83849
X2JlbG93 83850
b3JndA== 83851
IEhhcmxlbQ== 83852
IE9yd2VsbA== 83853
X1VOSVg= 83854
LnJlc3RhcnQ= 83855
aXRoZQ== 83856
IGdlbmll 83857
IGNsYWQ= 83858
Jzp7Jw== 83859
IHNob3djYXNlZA== 83860
IGxhcnZhZQ== 83861
TWljaGVsbGU= 83862
IExI 83863
LmdldExvZw== 83864
Q29uc3RydWN0ZWQ= 83865
IGh2YQ== 83866
X3N1YnM= 83867
IGRhYg== 83868
LmRvY3VtZW50YXRpb24= 83869
IG5pZw== 83870
IE1hbmRhcmlu 83871
4oCUYXJl 83872
LXBpYw== 83873
X2Nvcm5lcnM= 83874
LkJvdA== 83875
XVso 83876
X18nOg0K 83877
LkVkaXRvckJ1dHRvbg== 83878
LXN5bnRheA== 83879
U2FuZGVycw== 83880
IFRhbmtz 83881
ZGVzaXJlZA== 83882
c3RhbnRpYXRlVmlld0NvbnRyb2xsZXI= 83883
R2Vhcg== 83884
IHVzZXJNb2RlbA== 83885
CWNvbnRyb2w= 83886
RGF0YUJhc2U= 83887
IERlYmF0ZQ== 83888
aW5lc2lz 83889
IHhl 83890
Lm1hZ25pdHVkZQ== 83891
IHlhbg== 83892
IEFwaUV4Y2VwdGlvbg== 83893
KHdoaWNo 83894
YXRoZXJpbmc= 83895
Q29uc2lkZXJpbmc= 83896
IEFMUEhB 83897
568= 83898
IFJhbmtpbmdz 83899
LmxpZmU= 83900
6rCS 83901
T0ZGU0VU 83902
LnRlbGVncmFt 83903
IGZhdmljb24= 83904
X3NzaA== 83905
IEVER0U= 83906
UmVmcw== 83907
YW5kYW4= 83908
IGFkb2xlc2NlbmNl 83909
IFNoYW5r 83910
IFN3YW1w 83911
X3BlcmM= 83912
IGNvbnRyYXJpbw== 83913
Lm55 83914
LiIpLA== 83915
IHVudGVu 83916
X0VOU1VSRQ== 83917
L29yZGVycw== 83918
KGNm 83919
IHVudHJlYXRlZA== 83920
YXplbg== 83921
KElucHV0U3RyZWFt 83922
IGFwcHJvdmFscw== 83923
IGdlcm1hbnk= 83924
IGF2ZXJl 83925
VHJpcGxl 83926
LWJhcnM= 83927
IHNldFBhZ2U= 83928
SmFj 83929
IEZpcmVz 83930
IERBWVM= 83931
56i/ 83932
IHNjcmF0Y2hlZA== 83933
IEJFTg== 83934
LXdpZmU= 83935
IGludGVsbGVjdHVhbHM= 83936
IHBvdWNv 83937
IHN0YWJpbGl6YXRpb24= 83938
IHBlbG9z 83939
IFNUT1JZ 83940
PGZpZWxkc2V0 83941
IE1haWRlbg== 83942
LkNpcmNsZQ== 83943
IHNtw6U= 83944
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw== 83945
L2VuZA== 83946
6Iux 83947
KG51bXB5 83948
LnBhbmVsQ29udHJvbA== 83949
Y2hyaWZ0 83950
Y29udGluZW50YWw= 83951
X3BlbA== 83952
RFNM 83953
PFwv 83954
IE9QUw== 83955
IE5vb24= 83956
IHVuZGlzY2xvc2Vk 83957
IFlpbg== 83958
c3Bv 83959
CWRlc2NyaWJl 83960
dG9ncm91cA== 83961
IGRpYXBlcnM= 83962
IG1IYW5kbGVy 83963
CUNsb3Nl 83964
IHJlbmRpdGlvbg== 83965
PXsoew== 83966
RW50ZXJpbmc= 83967
KERJUg== 83968
X09MRA== 83969
IFN0aW5n 83970
IFBhd24= 83971
dXNzZXM= 83972
IGdldENvZGU= 83973
SXRlbUxpc3Q= 83974
IGluZGlz 83975
ID4iLA== 83976
IGNvbmZs 83977
IGRvbWluYXRlcw== 83978
dGhlc2l6ZWQ= 83979
c3RlcmVk 83980
IGNhYw== 83981
IEdlbnVpbmU= 83982
PFBhdGg= 83983
IEhvZGc= 83984
LWZseQ== 83985
LmNpZA== 83986
IG9iamVjdElk 83987
KCMp 83988
Lm1vdmVUb05leHQ= 83989
RGlhbG9ndWU= 83990
PHBjbA== 83991
dGVhckRvd24= 83992
Jyl9fQo= 83993
5ri4 83994
TGl2ZXI= 83995
TWF0cml4WGQ= 83996
IGNyYXBweQ== 83997
X0RFQUQ= 83998
LnBhcnRpYWw= 83999
LkRyb3BEb3duU3R5bGU= 84000
ZnVy 84001
LkNvbGxhcHNlZA== 84002
LXRvd24= 84003
SUNJQUw= 84004
RGlyZWNjaW9u 84005
IHNldFJlc3VsdA== 84006
L3Jlc3VsdA== 84007
IFNoZWVw 84008
eXNjYWxl 84009
Y29udGk= 84010
IHJlY29ub2M= 84011
6b4= 84012
W2Jsb2Nr 84013
Y2xheno= 84014
IGJlbmVmaXRpbmc= 84015
QUFQ 84016
LnJlcXVpcmVz 84017
LkNvb2tpZQ== 84018
IGNhcHRpdml0eQ== 84019
LlNlY3Rpb24= 84020
XSkpOw== 84021
LWNhcmV0 84022
KHZh 84023
IHbDpGw= 84024
IEhpZ2hsYW5kcw== 84025
Tm90YQ== 84026
IEZNTA== 84027
d2ludGVy 84028
IGFnZW5kYXM= 84029
X18sX18= 84030
ZGVtYW5k 84031
IHR1dG9ycw== 84032
X1NZTQ== 84033
KENI 84034
IHVuZXF1aXY= 84035
LnRyYW5zaXRpb25z 84036
IENhbG9yaWVz 84037
IEVjb25vbWlzdA== 84038
LlBpbg== 84039
IGRlZmxlY3Q= 84040
RXhwb3NlZA== 84041
IGdlcA== 84042
LkxheW91dENvbnRyb2xJdGVt 84043
IHJhaw== 84044
ZmliZXI= 84045
IGFwb3B0 84046
IEVudW1z 84047
aXRldXI= 84048
IG1vZGlmaWVz 84049
IHJlbHVjdGFuY2U= 84050
IHNwaWxscw== 84051
QXNjZW5kaW5n 84052
IHRlbXBlcmF0dXJh 84053
LWludGVyZmFjZQ== 84054
IGNvd29ya2Vycw== 84055
IDpc 84056
IFJvdW5kZWRSZWN0YW5nbGVCb3JkZXI= 84057
PEtleVZhbHVlUGFpcg== 84058
UGFyc2Vk 84059
IHdpdGhkcmF3aW5n 84060
KGhpc3Q= 84061
IHRoZW9yaXN0cw== 84062
LW5n 84063
IGNoaWZm 84064
66W4 84065
UEFJUg== 84066
IEJyZXdlcg== 84067
S2E= 84068
IEJvd2xpbmc= 84069
X3Rs 84070
J30pLg== 84071
IHByb2Jpbmc= 84072
QXJz 84073
LnJlYWxt 84074
IGVzdGF0ZXM= 84075
dmFyeQ== 84076
IEtlcw== 84077
ICIsIiw= 84078
fSwNCg0K 84079
UGxhbm5pbmc= 84080
IFJlY29u 84081
IGNvbmNsdXM= 84082
dmF1bHQ= 84083
IGluY2VudGl2 84084
IGJpbm5lbg== 84085
IFBoaWxsaWVz 84086
LkxvYWRlcg== 84087
IEZhbGxlbg== 84088
X1R3bw== 84089
IEJpYXM= 84090
Um9sZUlk 84091
IFBhcmNlbGFibGU= 84092
IERvZGQ= 84093
ICQoIiMi 84094
5Lq/5YWD 84095
LW1lYW4= 84096
KE91dHB1dA== 84097
QVRUUklCVVRF 84098
IHNlY3JldGl2ZQ== 84099
IFBlcmlwaGVyYWw= 84100
IEZpbGVk 84101
IOW3 84102
X21lZGlhbg== 84103
LklD 84104
IEFycmF5QnVmZmVy 84105
KFRBQkxF 84106
IF0KCgo= 84107
IGFudGhvbG9neQ== 84108
IG9ic2NlbmU= 84109
b3BhdXNl 84110
IEVTVg== 84111
w6F2ZWlz 84112
b3NlbWl0ZQ== 84113
R3J1cG8= 84114
IE1PQ0s= 84115
IHVuYXZvaWRhYmxl 84116
IGNvdmlk 84117
aG93ZXI= 84118
Lk5ldmVy 84119
U2V0QWN0aXZl 84120
e3RleHQ= 84121
X3Byb2Jh 84122
XENvbmZpZ3VyYXRpb24= 84123
IEJyeWNl 84124
IGNvZXJjZQ== 84125
IFZhbmRlcmJpbHQ= 84126
Z2VtZW50cw== 84127
bGVnZw== 84128
IHJlYnV0 84129
IFZJTg== 84130
5YiG6ZKf 84131
IG9ic2Vzc2l2ZQ== 84132
L2NtZA== 84133
IGtvbW1lbnQ= 84134
IExhdWdo 84135
64uI 84136
IHNlbHZlcw== 84137
b3JyYQ== 84138
LnJvb21z 84139
IGNvbXBsZXhpdGllcw== 84140
CW9wZXJhdG9y 84141
QWx0ZXJuYXRl 84142
IHNvcnRpZQ== 84143
Z2V0TnVt 84144
IHJlYWxpemFkbw== 84145
RG9pbmc= 84146
X0dyaWQ= 84147
IHNldFN1cHBvcnRBY3Rpb25CYXI= 84148
w6RobHQ= 84149
5ZQ= 84150
OnsNCg== 84151
SW50ZXJlc3RlZA== 84152
IGRpbWluaXNoaW5n 84153
IExvb3Q= 84154
QWRhcHRlckZhY3Rvcnk= 84155
LXJ1bm5lcg== 84156
c2F2aW5n 84157
KHNlbQ== 84158
ZmFk 84159
RURVUkU= 84160
X2RvY3VtZW50bw== 84161
IENhbGVi 84162
IGd1aXNl 84163
IE1jR3U= 84164
KHVuaXRz 84165
IGJlemllcg== 84166
IHBhdHQ= 84167
IHBlbHZpYw== 84168
IGNvbm9zYw== 84169
YWN0aXZv 84170
IE1hbG9uZQ== 84171
LlRha2U= 84172
KHNxcnQ= 84173
c3Rhc2hvcA== 84174
LWVuZGVk 84175
IE1pZGk= 84176
IEJhbmM= 84177
IFBlcHNp 84178
X01BWQ== 84179
IHBsbA== 84180
L2luZXQ= 84181
LWVuaA== 84182
IEl0YWw= 84183
bW91cg== 84184
IHJlbHVjdGFudGx5 84185
LnJjUGFyYW1z 84186
IHBhbHM= 84187
LnBrZw== 84188
IGZvcm1hcw== 84189
bGllw59saWNo 84190
LWJvb2tz 84191
b21hbHk= 84192
IHJlY29tbWFuZA== 84193
UExJQ0lU 84194
acSN 84195
LmNnQ29sb3I= 84196
KEJvYXJk 84197
0LXQvdC40Lg= 84198
IExFTg== 84199
Xy1f 84200
IFVubw== 84201
IE5PVElGWQ== 84202
aGFuYQ== 84203
W3Nsb3Q= 84204
XGFkbWlu 84205
SW5JbnNwZWN0b3I= 84206
KWNvbnN0 84207
IGZsYXR0ZXJpbmc= 84208
aWdyYW1z 84209
Y2Fj 84210
IGhlYXJ0ZmVsdA== 84211
SW5kdXN0cmlhbA== 84212
QWlycG9ydA== 84213
WEk= 84214
IHZhbGlkYXI= 84215
cmVwcmVzZW50YXRpb24= 84216
IFJlbnRhbHM= 84217
IG9taXNzaW9u 84218
IG15dGhpY2Fs 84219
IEVudHJhbmNl 84220
IHNlcmdlYW50 84221
IHdyaXRlVG8= 84222
IE5vcndpY2g= 84223
IExpb25lbA== 84224
LWJhbA== 84225
IFp3ZQ== 84226
X3JlbnQ= 84227
IHJlbWFy 84228
IEJhaGFtYXM= 84229
IEJhbGU= 84230
OiIiLA== 84231
U3RhdGVNYW5hZ2Vy 84232
IGLDqW7DqQ== 84233
ICEqKio= 84234
IGJsb2NrZXJz 84235
LnNlbA== 84236
KExFRA== 84237
IGZzbQ== 84238
IHdpcGluZw== 84239
IHphbWFu 84240
IFJlaQ== 84241
YWd1YXk= 84242
Li4n 84243
IGxvdW5n 84244
ZXRjb2Rl 84245
IGxhbno= 84246
Y2l0YXRpb24= 84247
W2A= 84248
LWVs 84249
YXNib3VyZw== 84250
IFNPTEQ= 84251
IE9yY2hhcmQ= 84252
Q0hhbmRsZQ== 84253
IExvZnQ= 84254
LmRpdmlkZQ== 84255
LVdpdGg= 84256
L2Rlc2lnbg== 84257
LlNlcnZpY2VNb2RlbA== 84258
TWlz 84259
IHJhd0RhdGE= 84260
IGludGVyYWN0cw== 84261
IEVyb3Rpaw== 84262
IG9uUG9zdEV4ZWN1dGU= 84263
6Jk= 84264
IHZleA== 84265
IHN0cmluZ2lmeQ== 84266
eW5lcw== 84267
X0VtYWls 84268
X09N 84269
cXVpdGU= 84270
X2VmZmVjdHM= 84271
QURY 84272
IGFkb3JuZWQ= 84273
c3Nm 84274
ZWRpdGFy 84275
IE1hZGFtZQ== 84276
IHJlZnV0ZQ== 84277
IEx1Y2E= 84278
IFdvbHZlcmluZQ== 84279
c2V4bw== 84280
QW5kcmU= 84281
PFJvdXRl 84282
IFNjZW5lcw== 84283
IHJlb3JkZXI= 84284
X214 84285
Y3JlYXRlVGltZQ== 84286
IHN5bnQ= 84287
LG1vZGVs 84288
aWNyb3Vz 84289
IE1PVVNF 84290
6rk= 84291
Y29tcHJlc3Npb24= 84292
IHByaW5jZXM= 84293
IHNoYW1lZnVs 84294
IHBhdQ== 84295
IFRFRA== 84296
KGNvZWZmcw== 84297
4K+B 84298
L3VtZA== 84299
IGNhbnlvbg== 84300
L3JlbmRlcg== 84301
LnVzZWQ= 84302
IEFncmVl 84303
IEpld2Vs 84304
L2NvbW1hbmQ= 84305
QmFyY29kZQ== 84306
KGRlYWQ= 84307
d2Vic29ja2V0 84308
dW11 84309
R0xPU1M= 84310
IGZvcnRu 84311
IGJvYXN0ZWQ= 84312
ICJcIj4= 84313
aXN0dW5n 84314
LW1hY2hpbmU= 84315
IGluY2lkZW50YWw= 84316
IG1N 84317
LXJlYWRhYmxl 84318
LmZ4 84319
IFBPTElU 84320
IHN5bWxpbms= 84321
KHVzaW5n 84322
eEVE 84323
ICIiIi4= 84324
LlN0ZG91dA== 84325
IOiL 84326
IGFsbWFjZW4= 84327
CXRyaWdnZXI= 84328
LXRpcA== 84329
IENPTU1JVA== 84330
LmluZ3JlZGllbnRz 84331
IG1hbmlmZXN0cw== 84332
IE9TUw== 84333
IEhhdXQ= 84334
L2xvYWRpbmc= 84335
LlR5cGVTdHJpbmc= 84336
KGNsZWFu 84337
IExJQw== 84338
IEJhcmJpZQ== 84339
T09TRQ== 84340
LuKApg== 84341
IEludml0YXRpb24= 84342
IHJlZGVlbWVk 84343
KS4nPC8= 84344
IGltZGI= 84345
IGJlbGFuZw== 84346
IHNjcmFwcGVk 84347
LW5pbA== 84348
IFByb3Vk 84349
0LDRgdGC 84350
LlNJWkU= 84351
IHNldFZpc2libGU= 84352
IHJhaW5pbmc= 84353
IGxlbmdodA== 84354
IGFuYWs= 84355
X0NNUA== 84356
IHBhbm9yYW1pYw== 84357
IGdpbQ== 84358
c2FpZA== 84359
IHByb2dlbg== 84360
IEdCUA== 84361
4oCg 84362
IGludmVzdGlnYXRlcw== 84363
IHByw6hz 84364
L25hdmlnYXRpb24= 84365
Lm1vdGlvbg== 84366
IExpZ2h0d2VpZ2h0 84367
CQkgICAgICAgICAgICA= 84368
IG9udG9sb2d5 84369
IE5JSA== 84370
KHNpbXA= 84371
LnB1bGw= 84372
IHByb3Bvc2l0aW9ucw== 84373
QFdlYlNlcnZsZXQ= 84374
IHJlZGVmaW5l 84375
IEVORVJHWQ== 84376
7KC4 84377
T1JJWkFUSU9O 84378
IFZlcmbDvGc= 84379
fX1dLAo= 84380
IHdlZ2Vu 84381
4LmH 84382
Jm9hY3V0ZQ== 84383
LkJvYXJk 84384
IGN1bHBh 84385
IEdlbmV0aWNz 84386
IH0+ 84387
IGFkYW1hbnQ= 84388
44GV44KM 84389
CWF1ZGlv 84390
6riA 84391
IG51bWVyYWw= 84392
IHJlc3RyYWluaW5n 84393
LklOVEVSTkFM 84394
IE1vbXM= 84395
IElQQWRkcmVzcw== 84396
aW1lbnRp 84397
IGFscGhhYmV0aWNhbA== 84398
IEpGSw== 84399
IEF0dGVtcHRz 84400
ZnJhZ2U= 84401
IGRhcm0= 84402
IGJhc2VtYW4= 84403
PWxvZw== 84404
LGVycm9y 84405
IERJU0NMQUlNUw== 84406
CXRleHR1cmU= 84407
LWNvdmVyZWQ= 84408
IFBsdW0= 84409
IOWVhg== 84410
IHDDqXJp 84411
KHJldmlldw== 84412
IEZvcmNlZA== 84413
Rkg= 84414
IOy0iA== 84415
IGV5ZWJyb3c= 84416
X1JFR1M= 84417
IGNoZXN0cw== 84418
IExhcmdlc3Q= 84419
XV06Cg== 84420
VVRPUg== 84421
IGVucXVpcmllcw== 84422
IGNva2U= 84423
LWNhdGNoaW5n 84424
IEdlb2dyYXBoeQ== 84425
YXRlbA== 84426
KHByb2Q= 84427
b3JXaGVyZQ== 84428
TmluZQ== 84429
IFBpZWQ= 84430
IGFkanVzdHM= 84431
KHByb20= 84432
X21lbnVz 84433
X2V4YW0= 84434
IE5vdGlmaWNhdGlvbkNlbnRlcg== 84435
CWRz 84436
TElL 84437
X3R3aXR0ZXI= 84438
Q1JD 84439
IGV1eA== 84440
IFN0YWJsZQ== 84441
aXlvcg== 84442
IGNhcmJvbmF0ZQ== 84443
LnNhbA== 84444
TWFwcGVk 84445
aWV2aW5n 84446
KXk= 84447
eW5hbW9kYg== 84448
LkNvbXBhcmVUYWc= 84449
IHNldmVyZWQ= 84450
J2VtYWls 84451
IGZvcnNr 84452
bGV4cG9ydA== 84453
SU1JVEVS 84454
IEFwZXg= 84455
IGhtYWM= 84456
IE9kZHM= 84457
b3ZlcnJpZGVz 84458
OiI7DQo= 84459
IG9waW9pZHM= 84460
IG1lc21lcg== 84461
IEdBTA== 84462
LWxpbmVz 84463
IGFwcGx5TWlkZGxld2FyZQ== 84464
IHNlcmlh 84465
RVNJUw== 84466
IG5pbGFp 84467
IG1hbGxz 84468
IFBhb2xv 84469
IExlbnQ= 84470
LmJ1aWxkZXJz 84471
LyY= 84472
IENsaXBz 84473
IEp1cmFzc2lj 84474
4pWd 84475
LWNvbmQ= 84476
44O844OI 84477
fHd4 84478
LmhvdXNl 84479
IGhlcmF1cw== 84480
IGhr 84481
IENvY28= 84482
IlwK 84483
IGFjY3JlZGl0YXRpb24= 84484
IFJhY2g= 84485
ZXJ0ZXN0 84486
c2hvcnRjb2Rl 84487
IHZhbGlkYXRpb25z 84488
VUxTRQ== 84489
IGV4Y2VycHRz 84490
U2Vla0Jhcg== 84491
IGdldExvY2F0aW9u 84492
IGZlbmNlZA== 84493
KGdz 84494
IGx5cw== 84495
IGhhcm1z 84496
IEhvbW8= 84497
4oCcU2hl 84498
IOKAuw== 84499
PXNlc3Npb24= 84500
X0NPTVBJTEU= 84501
TWVhbnM= 84502
IHBldGl0aW9uZXI= 84503
SU1P 84504
Il09Pg== 84505
ZGJl 84506
X2dwcw== 84507
IG1q 84508
X2V4cGlyZQ== 84509
IERBTg== 84510
IHh2 84511
IGZ1bmNpb25lcw== 84512
IHNoYWt5 84513
U3VnYXI= 84514
IGdldFJlc3VsdA== 84515
PFRva2Vu 84516
aHR0cENsaWVudA== 84517
Lm9uUGF1c2U= 84518
c3Rp 84519
U25ha2U= 84520
TWFwcGluZ3M= 84521
IFJlYXBlcg== 84522
IGZyZWk= 84523
IENvc21vcw== 84524
dWVycw== 84525
IEhhag== 84526
IEJsYXpl 84527
b2ppcw== 84528
Q3JMZg== 84529
LnByb2M= 84530
IG90cA== 84531
IERyYXdz 84532
CVJFRw== 84533
KCcnJw== 84534
IGdlbmVyYQ== 84535
IEF0dGFjaGVk 84536
UkVN 84537
JTsiPg== 84538
dXJuaXNoZWQ= 84539
X3Jw 84540
IHpvYWxz 84541
IGFzc29ydGVk 84542
aXRpemVk 84543
IGNhbWlubw== 84544
IGFiZHVjdGVk 84545
LnRvQmU= 84546
J10pOg== 84547
IE1vb3I= 84548
SW5jbHVkaW5n 84549
IGdyYXppbmc= 84550
c2V0U3RhdHVz 84551
YWlyb2Jp 84552
X0V4ZWN1dGU= 84553
aWZpYW50 84554
ZWxkbw== 84555
YXV0b21hdGlj 84556
KCQp 84557
IGxlYXBz 84558
b25lZERhdGVUaW1l 84559
KGxheWVycw== 84560
LXByb2R1Y2Vk 84561
IFdvcmtib29r 84562
IGVub3Jtb3VzbHk= 84563
IGRlcHJlc3NpdmU= 84564
IGFhYQ== 84565
RW1iZWRkZWQ= 84566
QlVN 84567
IGVsbGVz 84568
IGJvYXJkZWQ= 84569
xZtteQ== 84570
IG1hc2lo 84571
X2dlbmVz 84572
CVRleHR1cmU= 84573
aXN0YXI= 84574
IEF1Z3VzdGE= 84575
IEFwcE1ldGhvZEJlYXQ= 84576
IGtvZGU= 84577
YWJleg== 84578
X3BpZWNlcw== 84579
Q3Vycg== 84580
IGxpYmVyYWxpc20= 84581
RGljaw== 84582
QWxl 84583
IHF1YWxl 84584
fSc7Cg== 84585
LmFuc3dlcnM= 84586
IEpBTg== 84587
IFBVUkU= 84588
IGNhbm9l 84589
IFNBTUU= 84590
UXVhbGlmaWVy 84591
IGRibmFtZQ== 84592
IElubm9j 84593
CVRSQUNF 84594
aXZyZQ== 84595
IG1lY2g= 84596
YXNlbA== 84597
Iixb 84598
IGFzaWE= 84599
IENhbnRlcmJ1cnk= 84600
LkRhdGFCaW5kaW5ncw== 84601
a2Fo 84602
KCkpKSk= 84603
IGR6aWV3 84604
cmV0ZQ== 84605
IHNjcmVlbmluZ3M= 84606
Lk1PVVNF 84607
IGJ1c2llc3Q= 84608
CXJlbmRlcmVy 84609
IHRlc3RpbW9uaWFscw== 84610
IGFzcGlyZQ== 84611
Zm9ydHVuZQ== 84612
IE1TQw== 84613
IGRhbXBpbmc= 84614
XCIsCg== 84615
V2Vs 84616
V2lr 84617
IOyXrA== 84618
KHRpZA== 84619
IENhbm5lcw== 84620
b2NvcA== 84621
PiIrCg== 84622
ZmFjZXQ= 84623
IHNsYXNoZWQ= 84624
IExpYmVyaWE= 84625
U21vb3Ro 84626
X2NoZQ== 84627
TGFib3Vy 84628
IGVtaW5lbnQ= 84629
Olg= 84630
XEJhY2tlbmQ= 84631
ICsrKQo= 84632
IHRlYW13b3Jr 84633
X2FnZw== 84634
LlNlcnZl 84635
IFNORA== 84636
IFBJQ0s= 84637
IHdpcGVz 84638
L1R5cG9ncmFwaHk= 84639
IEFQQQ== 84640
aWtraQ== 84641
IGNvZGVy 84642
Z2FiZW4= 84643
IHVua25vdw== 84644
LkRlcGFydG1lbnQ= 84645
4Lix4Lia 84646
IHBsYXllck5hbWU= 84647
KmU= 84648
PEJsb2Nr 84649
X3VwZA== 84650
IEdpYmJz 84651
bGVhc2luZw== 84652
IENvbG9tYmlhbg== 84653
KFBIUA== 84654
ICoqKiEK 84655
IOydvA== 84656
IEN1cnRhaW4= 84657
L2F5 84658
2YTZiQ== 84659
c3BvcnRz 84660
IGRlc2Vh 84661
aXLDoQ== 84662
IHVuY29uZGl0aW9uYWw= 84663
IHRocm9t 84664
IENIUklTVA== 84665
IEhPUg== 84666
b3Njb3BpYw== 84667
IHlhxZ8= 84668
IG5vc3Rybw== 84669
Li4uIik7DQo= 84670
IHNsdXI= 84671
IGhhdHRlbg== 84672
IHBlc3RpY2lkZQ== 84673
IGZyZWV3YXk= 84674
IENvaA== 84675
IHdhbm5vbmNl 84676
IG1laWRlbg== 84677
X3N1YnN0cg== 84678
X0NTUw== 84679
IFN5bWJvbHM= 84680
4Li34Lit 84681
REVU 84682
IE1hZGRlbg== 84683
IHJlcXVlc3Rlcg== 84684
LnZpcnR1YWw= 84685
IHd4RGVmYXVsdA== 84686
IGF1dG9tw6F0aWNhbWVudGU= 84687
YnJpZHM= 84688
aVQ= 84689
LlByaW9yaXR5 84690
Jyk7PC8= 84691
YnVuZw== 84692
RGVhZGxpbmU= 84693
Q29uY3JldGU= 84694
IG5leHRQYWdl 84695
IOuwmw== 84696
IFN0b2tl 84697
a29w 84698
INCx0L7Qu9GM 84699
IFByb2R1aw== 84700
LW1ha2Vy 84701
IFByb2plY3RpbGU= 84702
YW5jZWxsYWJsZQ== 84703
IFRIRUlS 84704
VG9SZW1vdmU= 84705
RU1V 84706
Y29tbWVyY2lhbA== 84707
QVZFRA== 84708
IHdlYXZpbmc= 84709
IGJpb21l 84710
QFNldHRlcg== 84711
cW1s 84712
IGJyb2FkZW4= 84713
INGB0L8= 84714
SVNS 84715
IGRlYWN0aXZhdGVk 84716
IHNlbGVjdGVkSW5kZXg= 84717
cmlvdXM= 84718
ZWxwcw== 84719
LkVzY2FwZQ== 84720
IHBvbGxlZA== 84721
cXVpYQ== 84722
X3JlZmw= 84723
X21pbWU= 84724
PEF1ZGlvU291cmNl 84725
KFRyYW5zZm9ybQ== 84726
ZXZlbm9kZA== 84727
CXJhbmRvbQ== 84728
bG9jcw== 84729
IGRldXQ= 84730
cmVwbGFjZW1lbnQ= 84731
IGV4YW1pbmVy 84732
SGFzS2V5 84733
IOumrOyKpO2KuA== 84734
IENsb3Ro 84735
IOCkqg== 84736
IFJlZ2lzdHJv 84737
IEVzdGhlcg== 84738
IFNoYXJlZE1vZHVsZQ== 84739
LmJvcnJvdw== 84740
IG9zY2lsbGF0b3I= 84741
IGZvb2xz 84742
uqs= 84743
IGJvYXN0aW5n 84744
X3B1bHNl 84745
c2hhcmluZw== 84746
IHBpc3RvbHM= 84747
X1BMQU4= 84748
IHNlcHRlbWJlcg== 84749
IG11c3Rlcg== 84750
IG1hcmNow6k= 84751
Q0hFTVk= 84752
IHN1aQ== 84753
IGdlYnJ1aWs= 84754
Lj0n 84755
ZXJyYXRlZA== 84756
IExpYQ== 84757
IGhhdW50 84758
IEN1c2g= 84759
cm91dGVQcm92aWRlcg== 84760
Inw= 84761
ZW5kcGhw 84762
Il1dCg== 84763
IGF2YQ== 84764
77yBIiw= 84765
7Ke4 84766
IGNvbGE= 84767
X1NQRUxM 84768
IGFsw6lt 84769
KExhbmd1YWdl 84770
KGR1bW15 84771
IGJ1bmtlcg== 84772
IEVtcHJlc2E= 84773
IGNyZWF0ZUNvbnRleHQ= 84774
Om1pbg== 84775
IEJPT1Q= 84776
IE1lcmVkaXRo 84777
Wmg= 84778
IERvd25pbmc= 84779
d2pnbA== 84780
LmRj 84781
c2RhbGU= 84782
IGluY29udmVuaWVudA== 84783
IHJlYWRtZQ== 84784
TmF2aWdhdGlvblZpZXc= 84785
Q09ORElUSU9O 84786
LmRlcA== 84787
IHLDqXVzcw== 84788
IG9wY2nDs24= 84789
IEFjY291bnRhYmlsaXR5 84790
Lk1hcg== 84791
LWd1aWQ= 84792
RURHRQ== 84793
RXZlbnRNYW5hZ2Vy 84794
IGRpc2NpcGxl 84795
dWNrbGVz 84796
fX0+ 84797
aW50ZXJlc3RlZA== 84798
RmlsdGVyV2hlcmU= 84799
IHB1c3M= 84800
LXByb3h5 84801
X3N0YXR1c2Vz 84802
IFsj 84803
dW5mb2xk 84804
IFJvbm5pZQ== 84805
JiYh 84806
IGFjZXNzbw== 84807
dW9z 84808
X3lpZWxk 84809
KGNhbGVuZGFy 84810
KHNvdW5k 84811
IGRhdGFBcnJheQ== 84812
IFlhdGVz 84813
IHByb2Nlc3Npb24= 84814
RUZBVUxU 84815
IEdIQw== 84816
YW11cmE= 84817
IHN0cmljdGVy 84818
LkJPVFRPTQ== 84819
IGhhYml0dWFs 84820
eEFG 84821
QVZJTkc= 84822
IHNldHVwcw== 84823
ID17Cg== 84824
Kioo 84825
IHNvaw== 84826
IHJldGluYQ== 84827
IEZpcmVwbGFjZQ== 84828
aW52ZXJ0 84829
IEZvcnJlc3Q= 84830
PGRhdGE= 84831
XEFjdGlvbg== 84832
T1VHSA== 84833
IGNhcmVsZXNz 84834
LmdldEFjdGl2ZQ== 84835
ZXNlcw== 84836
IHpkasSZ 84837
KSkqKA== 84838
U0VN 84839
IFBhbmlj 84840
VG91Y2hlcw== 84841
IHByZWNv 84842
L2FjY291bnRz 84843
5L6b 84844
UG9zdGFsQ29kZXM= 84845
LXBsdWdpbnM= 84846
PG1lc3NhZ2U= 84847
KHBvd2Vy 84848
IHBlcmN1c3Npb24= 84849
IGPDqWw= 84850
5o6o 84851
IGRhbmNlZA== 84852
X1NDQU5DT0RF 84853
IFNpdHRpbmc= 84854
IExva2k= 84855
U2hhcmluZw== 84856
LkRpcg== 84857
IHNjaHdlcg== 84858
X0xB 84859
Lk1lbnVTdHJpcA== 84860
X3plcm9z 84861
IGZpeGF0aW9u 84862
IEFtaXQ= 84863
IGNvbXBsaWVk 84864
LnNwYWNlQmV0d2Vlbg== 84865
IGFycmVzdGluZw== 84866
IFN1Zw== 84867
IHBlcmZvcg== 84868
IGtvbXBsZQ== 84869
IEVzc2VuY2U= 84870
IHBsZWlu 84871
c2ltdWxhdGlvbg== 84872
IGNyZWF0ZWRCeQ== 84873
IEV4cGVkaXRpb24= 84874
77yBCgoKCg== 84875
dHJhaW5lcg== 84876
Il09JA== 84877
IHN1Y3Rpb24= 84878
bVBpZA== 84879
bm90aW4= 84880
IHByZWNpb3M= 84881
IEFzc3VyYW5jZQ== 84882
IExhbA== 84883
LiIm 84884
IG1pbkxlbmd0aA== 84885
IE1pbmVyYWxz 84886
dHJhamVjdG9yeQ== 84887
U0FGRQ== 84888
IG51YW5jZXM= 84889
KGV4dHJh 84890
X3ZpZGVvcw== 84891
W109ew== 84892
IGhvbmV5bW9vbg== 84893
X3ByZXA= 84894
CQkJCQkJCQkJCSA= 84895
IHB1cnBvcw== 84896
IGFuemVpZ2Vu 84897
LnN0cnV0cw== 84898
IHBhZ2Fy 84899
LkF1dG9TaXplTW9kZQ== 84900
IHdlbmlnZXI= 84901
IHBhZ2Fu 84902
IGFjaWRpYw== 84903
Z01hcHM= 84904
IGJld2FyZQ== 84905
X2lwYw== 84906
IG1lZHM= 84907
IGRpc2XDsW8= 84908
KSkpCgoK 84909
Q2h1cmNo 84910
IG51cnR1cmluZw== 84911
X21waQ== 84912
IHJlc3VsdGFudA== 84913
IFBpc3RvbA== 84914
c1BpZA== 84915
TXNw 84916
TW9tZW50 84917
IFVQTE9BRA== 84918
TmFubw== 84919
YmxpY2s= 84920
IG1lc3VyZQ== 84921
IExheWVycw== 84922
X3RyYWo= 84923
IGJ1dHRvbldpdGhUeXBl 84924
CWNvbW1vbg== 84925
IE15Q2xhc3M= 84926
2KjYsQ== 84927
eG9vcHM= 84928
X0hlaWdodA== 84929
X1dBUk5JTkdT 84930
U2V0VGV4dA== 84931
IEhpc3Bhbmljcw== 84932
TnVsbFBvaW50ZXJFeGNlcHRpb24= 84933
LmZhY3Rvcg== 84934
IHZpZWxsZWljaHQ= 84935
IHNob3V0cw== 84936
dHJ1c3RlZA== 84937
IG5ld1Jvdw== 84938
IEZyYW7Dpw== 84939
W2pq 84940
4oCUd2hv 84941
IFFEaXI= 84942
X2FkdmFuY2Vk 84943
KEhhdmVPY2N1cnJlZA== 84944
IHVucGw= 84945
L3Jvcw== 84946
LmVhc3k= 84947
IEJBTEw= 84948
550= 84949
L2xncGw= 84950
IHN1YmNvbnNjaW91cw== 84951
ICctJzsK 84952
ICcpOw== 84953
INGW 84954
IHNjYW50 84955
X3Nlc3M= 84956
X3BsYXlpbmc= 84957
X0lTTw== 84958
IHNldFNpemU= 84959
X2RlY2s= 84960
X0xBUkdF 84961
IE1leQ== 84962
Q2hpY2tlbg== 84963
aWZmaW4= 84964
ZGlzcG9zZQ== 84965
SEVTVA== 84966
TGF1Z2g= 84967
IExDUw== 84968
IG9uc2l0ZQ== 84969
LmlzTG9nZ2VkSW4= 84970
IGlycml0YXRlZA== 84971
IGJyaWdhZGU= 84972
IGRlcXVldWU= 84973
Y2xhc3NOYW1lcw== 84974
IE3DoXM= 84975
IEF0YXJp 84976
KElPRXhjZXB0aW9u 84977
UmFjaGVs 84978
LXNhbXBsZQ== 84979
IGVpZ2VudGxpY2g= 84980
SUZERUY= 84981
Lm5laWdoYm9ycw== 84982
IHNlcGVyYXRl 84983
IExpc3Rpbmdz 84984
LmZm 84985
KGltcG9ydA== 84986
TW9kZWxBdHRyaWJ1dGU= 84987
IHNwZW5kZXI= 84988
IG1vdGlmcw== 84989
c3N1ZQ== 84990
IEFwcHJlbnRpY2U= 84991
LWNhdA== 84992
clBpZA== 84993
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K 84994
b2N6 84995
aW5pb25z 84996
L2NvbnRhaW5lcg== 84997
IHBsYWdpYXJpc20= 84998
V3JpdGFibGVEYXRhYmFzZQ== 84999
Ly4KCg== 85000
IEZldmVy 85001
LVZlcnNpb24= 85002
YWNpamE= 85003
IHdlaQ== 85004
LWluZw== 85005
IHRlbWFz 85006
IHN1cmdlZA== 85007
IGNyaWE= 85008
IGFyZA== 85009
Yml0Y29pbg== 85010
LnRpbWV6b25l 85011
IG9iamVjdE1hcHBlcg== 85012
IAogICAgICAgICAgICAK 85013
IHlsaW0= 85014
IElDVQ== 85015
IERlcHJlY2F0ZWQ= 85016
KSgpOwo= 85017
QVJHRVI= 85018
dW5nYWxvdw== 85019
VGVzdERhdGE= 85020
KHB0cw== 85021
RklMRU5BTUU= 85022
dXBwbHk= 85023
IHBhY2llbnRlcw== 85024
LGxlZnQ= 85025
IFdyaXRlTGluZQ== 85026
IHBhcmNlbHM= 85027
X2ZvbGRlcnM= 85028
IERpcms= 85029
LmFzc2VydElzSW5zdGFuY2U= 85030
TWND 85031
X1ZhcmlhYmxl 85032
KGFh 85033
IFBvcms= 85034
LlB1Ymxpc2g= 85035
LWdheQ== 85036
IFBldHJh 85037
IENvbm5lY3Rpbmc= 85038
VGFiQ29udHJvbA== 85039
aXZlcmluZw== 85040
KFNjcmVlbg== 85041
IGNoaWxsZWQ= 85042
IGFpbw== 85043
VG91Y2hFdmVudA== 85044
IGFjY2Vzc2lvbg== 85045
IExvaXM= 85046
L21vbWVudA== 85047
IGFudsOkbmQ= 85048
IHN1aWNpZGVz 85049
KGhlbHA= 85050
YW5kZXJz 85051
IFZJRA== 85052
QmVp 85053
ZXZlbnRv 85054
IEFuZ3Vz 85055
VmVycw== 85056
IEJvcmRlYXV4 85057
LnN0cmVhbWluZw== 85058
IHJvdWdl 85059
IGNyYWZ0c21hbnNoaXA= 85060
b3NzaWw= 85061
X0ZBTEw= 85062
QG1lZGlh 85063
aWxlYWtz 85064
RGF0YVNlcnZpY2U= 85065
IFRyaXBBZHZpc29y 85066
IE1hYXI= 85067
Q3Vyc28= 85068
UG9zdGFsQ29kZXNOTA== 85069
KCk7Kys= 85070
JFBvc3RhbENvZGVzTkw= 85071
IG9jb3I= 85072
IHRhaW50ZWQ= 85073
IGxlbQ== 85074
LW91dHM= 85075
IHh4eHg= 85076
IGlycml0YXRpbmc= 85077
b3hpZA== 85078
b2ludGVk 85079
IFRvcm8= 85080
X292 85081
LmJpcnRo 85082
KyU= 85083
IENoYXJhY3RlcmlzdGljcw== 85084
IEJldHRpbmc= 85085
IG9mZmVuZA== 85086
IFBIWVM= 85087
IElDTVA= 85088
eERD 85089
IENk 85090
LmdldE1hcA== 85091
YXRjaGV0 85092
LmN1cnJlbnRJbmRleA== 85093
RVJBTA== 85094
IGthcHBh 85095
aWRlbmNlcw== 85096
UGFyZW4= 85097
IFNlcmdlaQ== 85098
LWZpbg== 85099
J10sWyc= 85100
w6FtYXJh 85101
R3Jvd2luZw== 85102
R2xhc3M= 85103
CW1ldGE= 85104
dmVyYmF0aW0= 85105
L0dQTA== 85106
IEthaA== 85107
KHN2Zw== 85108
Y2xpc3Q= 85109
IEJsb3dqb2I= 85110
b2NjYW4= 85111
LmFib3J0 85112
b2RlbGlzdA== 85113
IGRpZmbDqXJlbnRz 85114
X09QVFM= 85115
PXJlcQ== 85116
IGludG94 85117
IGRpYWdvbg== 85118
IFsoIg== 85119
JlI= 85120
IG9iamVjdGl2ZWx5 85121
IGJsaW5raW5n 85122
IExvdmVz 85123
cmluZ2U= 85124
Kik7Cgo= 85125
IEJvbmRz 85126
IExvdmVk 85127
ZWx0cw== 85128
IGRpc3BhcmF0ZQ== 85129
IEVucmlxdWU= 85130
IldpdGg= 85131
cmVtaXVt 85132
YWphcmFu 85133
dHJ5aW5n 85134
LVJ1c3NpYW4= 85135
bmV3SW5zdGFuY2U= 85136
LlRSQU4= 85137
IG9yYW5nZXM= 85138
L2xvY2FsZQ== 85139
IERJU1A= 85140
CW5z 85141
IFNodXR0ZXJzdG9jaw== 85142
IENMT0NL 85143
KHJhZA== 85144
IGFzc3VyYW5jZXM= 85145
IHJhc3A= 85146
VWJlcmdyYXBo 85147
RW1pbHk= 85148
IGludmVudGlvbnM= 85149
cmlvdA== 85150
IHRvc3Npbmc= 85151
IG1ha2VvdmVy 85152
IHVuaXRPZldvcms= 85153
YnV0dG9uU2hhcGU= 85154
5Yid5aeL5YyW 85155
IHBhcnRlZA== 85156
4paR 85157
LnNpZ21vaWQ= 85158
IHJlZGlyZWN0aW9u 85159
IGRpc3R1cmJhbmNlcw== 85160
IGludGltaWRhdGVk 85161
CUNyZWF0ZWQ= 85162
YWdldA== 85163
IGNvcnJlcw== 85164
IE5FRw== 85165
aXRvbmU= 85166
L2Zyb250 85167
IFZlcnNl 85168
Z2FtYmFy 85169
IHByZW1pZXJlZA== 85170
IElNTw== 85171
IEdvYmllcm5v 85172
IGlmcw== 85173
YXlhaA== 85174
LkNPTA== 85175
IGZyZWRlcg== 85176
IHN1Ym1lcmdlZA== 85177
IE5lcm8= 85178
bW9kaWZpYWJsZQ== 85179
L0Zvb3Rlcg== 85180
LWNlbnRyYWw= 85181
IGdvdXZlcg== 85182
IFRyaWVk 85183
IGRpenp5 85184
UXVlcnlQYXJhbQ== 85185
Ij4nKwo= 85186
X3ByaW1pdGl2ZQ== 85187
56iO 85188
LmdwdQ== 85189
IHZveg== 85190
ZW56ZQ== 85191
IFdpbGRlcm5lc3M= 85192
IHByb2JhYmls 85193
L3JlYw== 85194
IGFjY2Vz 85195
IFRydXN0ZWVz 85196
R2I= 85197
IHBhZGRpbmdIb3Jpem9udGFs 85198
U2hpZWxk 85199
IE5hbWVu 85200
dWRkbGVk 85201
IFByaW9yaXR5UXVldWU= 85202
UG9vcg== 85203
IFNBRg== 85204
LS1bWw== 85205
IGNobG9yaW5l 85206
IHZlcmJhbGx5 85207
IGFpcmU= 85208
PjsNCg== 85209
aWxoYQ== 85210
W2NvbG9y 85211
YW5kYWxvbmU= 85212
LmFkZFJvdw== 85213
IFNvaw== 85214
IENvbm9y 85215
IG1lam9yYXI= 85216
J2lscw== 85217
ZGV0YWxsZQ== 85218
ICIpLAo= 85219
JUA= 85220
Lmxhenk= 85221
Lmp1bXA= 85222
b3N0ZQ== 85223
K0Y= 85224
IGluZnVyaQ== 85225
IHNvbnJh 85226
aXRlbWlk 85227
JGxvZw== 85228
IG11cmRlcm91cw== 85229
TEVD 85230
CW5pbA== 85231
IE3DpHI= 85232
KHBn 85233
aWxlbw== 85234
QXNjaWk= 85235
IExvY2toZWVk 85236
IFRoZW8= 85237
QmVsbA== 85238
YWNpb25hbGVz 85239
LmNyZWF0ZU5ldw== 85240
IOW+ 85241
LWZvb3RiYWxs 85242
IGVjb21tZXJjZQ== 85243
CVNpbXBsZQ== 85244
Y2x5 85245
LklubmVyRXhjZXB0aW9u 85246
IHBlc29z 85247
IHRyb3Bl 85248
IEFSR1M= 85249
TWlhbWk= 85250
IFBhbG8= 85251
IFN1emFubmU= 85252
X21hcHBpbmdz 85253
I3tA 85254
IE9jY3VwYXRpb25hbA== 85255
X2J1Y2tldHM= 85256
Z29hbHM= 85257
X1J1bg== 85258
LXByZXBlbmQ= 85259
c3Nz 85260
bWFyc2hhbGw= 85261
IGVxdWl2YWxlbmNl 85262
IFdlbGNo 85263
KE9wQ29kZXM= 85264
CWNsb2Nr 85265
IE1lZGluYQ== 85266
VEVSUw== 85267
b3Jhbmc= 85268
VGhvdWdodA== 85269
IG9hdHM= 85270
X1RFWA== 85271
UklDUw== 85272
IGluZGlmZmVyZW5jZQ== 85273
IGFsbG90 85274
LlVzZVRleHQ= 85275
IFRyaWNrcw== 85276
YXdl 85277
LkZJTEw= 85278
LXBocA== 85279
LnZvaWNl 85280
IFBhdGhmaW5kZXI= 85281
X1RBR1M= 85282
IFRyaXQ= 85283
5oyJ6ZKu 85284
YmJj 85285
IGFkZGl0aXZlcw== 85286
IHNjaGxl 85287
IEtleWJvYXJkSW50ZXJydXB0 85288
IHVzZVBhcmFtcw== 85289
IEJ1Y2hhbmFu 85290
cmlhbmdsZQ== 85291
IG11bHRpcGx5aW5n 85292
IHNlbGJlcg== 85293
IFllcA== 85294
Q2hhaXI= 85295
LXJlcG9ydGVk 85296
X1NESw== 85297
LG5v 85298
IEZhbGxpbmc= 85299
5rk= 85300
ICgpLAo= 85301
cGRi 85302
IEJvcm91Z2g= 85303
LnJlbW92ZUZyb20= 85304
IG92ZXJzaGFkb3c= 85305
aWdhaWw= 85306
IHR1bmc= 85307
IG1tYw== 85308
W3BhcmVudA== 85309
RXh0ZXJu 85310
YXZpb2xldA== 85311
JykiCg== 85312
IGNvdW50ZXJ0b3Bz 85313
IHVidW50dQ== 85314
5rc= 85315
IM6T 85316
IHVucHVibGlzaGVk 85317
IEluZGllcw== 85318
VU5FVA== 85319
IG9mZXJ0YQ== 85320
IGRhbWVz 85321
IGFzdGVyb2lkcw== 85322
IG5vdmVtYmVy 85323
Y29udHJhc3Q= 85324
LkFkZE1vZGVsRXJyb3I= 85325
K1NhbnM= 85326
IHNjcmFtYmxpbmc= 85327
dGV4dFZpZXc= 85328
L2NyeXB0bw== 85329
VXNlUHJvZ3JhbQ== 85330
QHVwZGF0ZQ== 85331
RGVzZGU= 85332
U0FU 85333
IGRpc3BsZQ== 85334
YW5uw6ll 85335
XERlcGVuZGVuY3lJbmplY3Rpb24= 85336
IGl0bQ== 85337
IOe8 85338
IGV0aG9z 85339
QVBP 85340
IEdhcmPDrWE= 85341
aWRpcw== 85342
IFN0ZWFr 85343
cmliYQ== 85344
X3ZlcmlmaWNhdGlvbg== 85345
IEZL 85346
IEVpbnNhdHo= 85347
IHBlcnNvbmFsaXNlZA== 85348
LW1vdGlvbg== 85349
IE1lbGFuaWU= 85350
w7Zo 85351
X1ZD 85352
IGRyaWZ0aW5n 85353
LmNvbnN0cnVjdA== 85354
IO2UhA== 85355
IGJhdGNoaW5n 85356
Li4vLi4vLi4vLi4v 85357
RVJQ 85358
X3V0Yw== 85359
IG11bHRpdA== 85360
IG1yYg== 85361
Y2Nhaw== 85362
Y2h1bmtz 85363
IHRyYW5zbHVjZW50 85364
IHBheW9mZg== 85365
4oCUYW4= 85366
IHNpbGw= 85367
IG9ybmFtZW50cw== 85368
Z3Vh 85369
VUJZ 85370
KHN0ZXBz 85371
IEJPUkRFUg== 85372
IFNPVU5E 85373
YGAK 85374
ZW5hcmllcw== 85375
IEJpdHRl 85376
IGdseXBocw== 85377
IG92ZXJydW4= 85378
IGJsb2NrSWR4 85379
IE1TVA== 85380
IGdlbm9tZXM= 85381
dGVuc29yZmxvdw== 85382
RGlyZWN0b3J5TmFtZQ== 85383
X2xocw== 85384
IGZpbnQ= 85385
YWRkdG9ncm91cA== 85386
IHN0ZWFkZmFzdA== 85387
IGNsb3Zlcw== 85388
IFNvdmlldHM= 85389
IElTQQ== 85390
wqNv 85391
dXJnZXJ5 85392
c292 85393
INCy0YvQstC+0LQ= 85394
IHB1ZA== 85395
LXdhdGNo 85396
IEhvc3BpdGFscw== 85397
fXdoaWxl 85398
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj 85399
4buj 85400
IGFrdHVhbA== 85401
IGtpbG9ncmFtcw== 85402
IEZBQw== 85403
b3BoeXM= 85404
cHJz 85405
KkA= 85406
eWI= 85407
c2VjdXJlZA== 85408
IGFsZ8O6bg== 85409
IOCkuQ== 85410
cGhhbnM= 85411
QWRkb24= 85412
IGNlbnRyYWxseQ== 85413
X1NVSVRF 85414
SW50ZXJlc3Rpbmc= 85415
dWx0aW1v 85416
QWdhaW5zdA== 85417
IEV6cmE= 85418
IEhlYg== 85419
dWlkYQ== 85420
IHNreXM= 85421
T0xWRQ== 85422
QmVuZWZpdHM= 85423
IHByaXNl 85424
Lio/KQ== 85425
LmlzRGVmaW5lZA== 85426
IHN0YW5kb2Zm 85427
IHBsYW5v 85428
LmxhdGVzdA== 85429
ICgkLg== 85430
IEdvdWxk 85431
IGNhdXRpb25lZA== 85432
J10o 85433
IG51aXQ= 85434
IEhDSQ== 85435
Zm9vdGJhbGw= 85436
IHdpbGxlbg== 85437
UHJvY2VlZA== 85438
IGludGVuZGluZw== 85439
dGlm 85440
IHNwb25zb3Jpbmc= 85441
b2hhbmE= 85442
RG9z 85443
TW9ybmluZw== 85444
ICEiKTsK 85445
LnNoZWxs 85446
IFJFTEFURUQ= 85447
IHBpbXA= 85448
L2NvdXJzZQ== 85449
IHJhbWlmaWNhdGlvbnM= 85450
IHBpeG1hcA== 85451
IHBvd2VybGVzcw== 85452
IGRvdWNoZQ== 85453
Y3JpbWU= 85454
Y29udHJpYnV0b3Jz 85455
KHByb3RvY29s 85456
IGdldFBvc2l0aW9u 85457
U0VUVElOR1M= 85458
IHZpZXQ= 85459
aXNzZXM= 85460
V2l0aEVtYWlsQW5kUGFzc3dvcmQ= 85461
UmV0dXJuVHlwZQ== 85462
QXBwZQ== 85463
IElLRQ== 85464
LkNvb2tpZXM= 85465
Lm1lZGl1bQ== 85466
LmdldEpTT05BcnJheQ== 85467
X0Zvcg== 85468
L3Rpbnlvcw== 85469
IFRhYmxlQ2VsbA== 85470
IFJFUExBQ0U= 85471
Lk5ldHdvcmtpbmc= 85472
IGJvd2Vk 85473
CW1k 85474
PSJ7ISE= 85475
IGhvbmRh 85476
IEV1cg== 85477
IGluZG9uZXNpYQ== 85478
IGhlbmQ= 85479
LnZpZXdtb2RlbA== 85480
CWN0cmw= 85481
IFRhYmxldHM= 85482
LW9yYW5nZQ== 85483
ZXJyYXM= 85484
X2dyYXBoaWNz 85485
e3M= 85486
IFRpdGxlcw== 85487
IGRpYWdub3Nlcw== 85488
b3VwbGU= 85489
X0RvdWJsZQ== 85490
W3Jlc3VsdA== 85491
IGppdHRlcg== 85492
X05VTUVSSUM= 85493
PmY= 85494
X01Z 85495
0LjRgdGC0LXQvA== 85496
c3RvcmVJZA== 85497
IHJlbGlucXU= 85498
ZW9z 85499
IHdpZGVuaW5n 85500
IHRhY29z 85501
LllFUw== 85502
XSsn 85503
IEluZGV4ZWQ= 85504
IHByb2Zlc3Npb25uZWw= 85505
IFN0cmFw 85506
QnVmZmVyRGF0YQ== 85507
ZWVh 85508
ZXJpbg== 85509
QU5DRVM= 85510
X1RYVA== 85511
IHt9Lg== 85512
KGNvbnRyYWN0 85513
eXc= 85514
IGJsaW5kbmVzcw== 85515
Q0hBTg== 85516
CWdsQ29sb3I= 85517
IGN1cnJlbnRQb3NpdGlvbg== 85518
IENhdWNhc2lhbg== 85519
JGltZw== 85520
I2Fh 85521
IHNlYW4= 85522
TWVzcw== 85523
Kj0qPQ== 85524
IGNhcGFjaXRvcg== 85525
YWxmYQ== 85526
LlJlbW92ZUFsbA== 85527
IFdQQVJBTQ== 85528
dWxhZG8= 85529
bmljb3M= 85530
IG9yZ3k= 85531
R1g= 85532
X0RFVklDRVM= 85533
b3Vya2U= 85534
IGtC 85535
IHNvcGhpc3RpY2F0aW9u 85536
X2F1ZGl0 85537
L0lQ 85538
IEx5ZnQ= 85539
L1N0 85540
CWNhbmNlbA== 85541
IG92YXJpYW4= 85542
bWFyaW5l 85543
a8SZ 85544
IFlN 85545
IE1pbG8= 85546
IE1hdFRhYmxl 85547
IEFiYnk= 85548
bnpl 85549
IEx1ZHdpZw== 85550
X2FybW9y 85551
IHNjYWZmb2xk 85552
4buXaQ== 85553
YXV0aG9yaXR5 85554
4bqleQ== 85555
LmdldFByb2R1Y3Q= 85556
IE9yYml0 85557
X1BhcmFtZXRlcg== 85558
LmRhdGVGb3JtYXQ= 85559
L3RhZ3M= 85560
LlNwZWVk 85561
KExpbmU= 85562
IHBvbGlzaGluZw== 85563
IGtvbWI= 85564
IHJ0cmlt 85565
J2ljb24= 85566
cmllcmU= 85567
IFByZWZlcg== 85568
c3RydG9sb3dlcg== 85569
UmVncw== 85570
Q0JE 85571
LT4K 85572
IHBhcmFzaXRl 85573
ZW5kc1dpdGg= 85574
IENvYnJh 85575
OnRlc3Q= 85576
IE51Z2dldHM= 85577
xaF0 85578
Q29yZUFwcGxpY2F0aW9u 85579
L2JpbmQ= 85580
IE1jSW50 85581
aXR1bmVz 85582
Wy0t 85583
IFN1cnByaXNl 85584
X0lORw== 85585
IEZhc3Rlcg== 85586
0J3QsA== 85587
OkU= 85588
IGRpbnQ= 85589
bmdl 85590
LiInLCciLiQ= 85591
IGFkamVjdGl2ZQ== 85592
LmJj 85593
Y29uc3VtZQ== 85594
Qk9S 85595
KGFuY2hvcg== 85596
IGVzdGVlbQ== 85597
IGJyZWFrdXA= 85598
ZGVjYXk= 85599
ICQKCg== 85600
RWR3YXJk 85601
QVNJ 85602
IGF0dGFjaGVz 85603
X0RJU0s= 85604
IFdpbG1pbmd0b24= 85605
IEt1bA== 85606
IFtbXQ== 85607
IERlcGFydG1lbnRz 85608
IHJldHVyblR5cGU= 85609
IFVOSVRFRA== 85610
b2JqZWN0aXZl 85611
IGdpcmxmcmllbmRz 85612
X0dV 85613
QHN0b3Jl 85614
LU91dA== 85615
Lm1vdmVz 85616
KHN0YXJ0RGF0ZQ== 85617
CUpCdXR0b24= 85618
IFBhY2U= 85619
IEJlYXRz 85620
IGxpY3o= 85621
IGV0aGVyZXVt 85622
IGNoZWVyZWQ= 85623
IGF1Y3Vu 85624
UmVnYXJkaW5n 85625
IG1pZ3JhdGluZw== 85626
IGZ1dGlsZQ== 85627
IFRhY29tYQ== 85628
X0NoYXJhY3Rlcg== 85629
IHZn 85630
IENvcGE= 85631
2Ks= 85632
IG5hbA== 85633
IGxhbmRmaWxs 85634
IHRhbWls 85635
IHBlcnBldHJhdG9y 85636
IFBhY2Vycw== 85637
LmdldE9yZGVy 85638
fA0K 85639
R2V0T2JqZWN0 85640
IGJsYQ== 85641
IEhhcmFt 85642
cG9ydGxldA== 85643
IGxva2Fs 85644
TWVyY2hhbnQ= 85645
UGFzc3dvcmRz 85646
b25lbnQ= 85647
IGFydGVyaWVz 85648
IEludGVsbGk= 85649
XFN5c3RlbQ== 85650
PWxvY2FsaG9zdA== 85651
LmF2aQ== 85652
IFZlbmQ= 85653
KHRibA== 85654
Q29ycmVjdGlvbg== 85655
IHV0ZXJ1cw== 85656
IHNhbGl2YQ== 85657
Kys7DQoNCg== 85658
KCcqJyw= 85659
IHNuYXRjaA== 85660
IFNUUkVFVA== 85661
KVs6 85662
54Sh44GX44E= 85663
U2VudGVuY2U= 85664
KCkuJy8= 85665
OnJlbGF0aXZl 85666
leOCkw== 85667
X3VzZXJpZA== 85668
b2xpbmc= 85669
IENsYXNo 85670
CXNldHVw 85671
KG1p 85672
IGppdA== 85673
IFNjYW5kaW5hdmlhbg== 85674
IFBob25lcw== 85675
Iic7Cg== 85676
IHR1bXVsdA== 85677
IEludGw= 85678
IFNpbm4= 85679
KG5ld3M= 85680
IGRicw== 85681
IFJlbWFya3M= 85682
S2l0Y2hlbg== 85683
IGFkbWlyYWJsZQ== 85684
X2Rhc2g= 85685
IERPTUFJTg== 85686
YWRkTGlzdGVuZXI= 85687
Il0uKA== 85688
CU1ldGhvZA== 85689
bWFya3Q= 85690
LGV4cG9ydHM= 85691
IG91dG51bWJlcg== 85692
X0FTQw== 85693
cHJlbWl1bQ== 85694
KU5VTEw= 85695
IEJvd21hbg== 85696
LnNldE9uSXRlbUNsaWNrTGlzdGVuZXI= 85697
IFJlZ2V4T3B0aW9ucw== 85698
S2Vs 85699
L21hdA== 85700
44GT44KM 85701
IHdlYXJlcg== 85702
aW5pcw== 85703
W2RpbQ== 85704
IE51dHp1bmc= 85705
aXNidXJ5 85706
5Yid 85707
IHJvb3RSZWR1Y2Vy 85708
ZXlK 85709
SW5jbHVkZWQ= 85710
LUxlYWd1ZQ== 85711
YW5heA== 85712
KGluZmxhdGVy 85713
IEZpZWxkVHlwZQ== 85714
IHNob3Zl 85715
IGZ1bGxmaWxl 85716
RGF0YU1hbmFnZXI= 85717
LmdldExlZnQ= 85718
IEZz 85719
ZHJvcG91dA== 85720
IOuyiA== 85721
IG1hbmnDqHJl 85722
IGZsYW1pbmc= 85723
IGNvbXBsZXRhbWVudGU= 85724
4oCw 85725
fC4= 85726
RW5lbWllcw== 85727
b3NjaQ== 85728
IFNBWQ== 85729
IG1hcnk= 85730
KFJ1bnRpbWVPYmplY3Q= 85731
IH4+ 85732
IFNpbXBzb25z 85733
J10uJA== 85734
X21lbWJlcnNoaXA= 85735
KSI6 85736
IGxheW91dE1hbmFnZXI= 85737
IFJvY2tlZmVsbGVy 85738
ICd8Jw== 85739
SVBI 85740
RE9O 85741
YWNodGU= 85742
UGVhY2U= 85743
aHRhcg== 85744
QCIK 85745
IHRyZWFkbWlsbA== 85746
IHNwdXJyZWQ= 85747
IEtW 85748
bWlkZA== 85749
IGZsb3dlZA== 85750
w6Nlc3Rl 85751
R2VuZXNpcw== 85752
PT0+ 85753
IFZlbnR1cmE= 85754
X2VsaW0= 85755
INC40LzRjw== 85756
IHNvbmd3cml0ZXI= 85757
Y3JlYXRlRm9ybQ== 85758
SUdITA== 85759
IG1vbGRlZA== 85760
IHJldmVyZWQ= 85761
VW5kZXJUZXN0 85762
aW1ibGVkb24= 85763
X1Nlc3Npb24= 85764
IG1hc2NvdA== 85765
IGFsZg== 85766
66mU 85767
PldlbGNvbWU= 85768
IGtub2Nrcw== 85769
IEVxdWF0aW9u 85770
LnRvdWNoZXM= 85771
X0xhc3Q= 85772
IHVwYmVhdA== 85773
YmlnaW50 85774
IGVudmlz 85775
L2Jhbm5lcg== 85776
44GC44KK44GM 85777
IERvd25z 85778
X1NG 85779
IHJ1bkFwcA== 85780
IHF1ZXN0aQ== 85781
VHJhZGl0aW9uYWw= 85782
X3dhaXRpbmc= 85783
cGlja3Vw 85784
KCdALw== 85785
CXNl 85786
IEtlcm4= 85787
IERlbGljaW91cw== 85788
IHNhdHVybg== 85789
IEpTT05FeGNlcHRpb24= 85790
44KN 85791
SlI= 85792
fSgpKTsK 85793
IFNvbWFsaQ== 85794
dWFp 85795
aW1hZ2Vt 85796
YW5kRmlsdGVyV2hlcmU= 85797
w6hsZXM= 85798
aW5ib3g= 85799
IHlhcMSx 85800
IG1laXN0ZW4= 85801
YF0o 85802
U1dH 85803
LGNsYXNz 85804
4LWN4LQ= 85805
dGFpZW50 85806
IEZyYW7Dp29pcw== 85807
QXV0aFRva2Vu 85808
IHB1ZXN0bw== 85809
IGps 85810
IGdhdGVk 85811
IERlYXRocw== 85812
IFNpZGQ= 85813
IHByZXZhaWxlZA== 85814
LcOqdHJl 85815
KGFsYnVt 85816
IHFpbnQ= 85817
bWFyY2E= 85818
IE5BRlRB 85819
IHRpZ2h0ZW5lZA== 85820
X0dBUA== 85821
RU5TSU9OUw== 85822
IExpYmVydGFyaWFu 85823
X3N0eWxlc2hlZXQ= 85824
LlNldEludA== 85825
X3B1Ymxpc2hlcg== 85826
cGFnZU51bWJlcg== 85827
enNjaGU= 85828
IFNRTEFsY2hlbXk= 85829
IGhvb2Y= 85830
Z2V0VG9rZW4= 85831
IG5lYmVu 85832
bHVuZA== 85833
Lm1pdA== 85834
ZXJycw== 85835
LnNldE1pbmltdW0= 85836
LXByaWNlZA== 85837
KHBv 85838
ZW5nYWdl 85839
X0ZU 85840
Ly8KCgo= 85841
IHRvbWU= 85842
ICI+PC8= 85843
VmVjdG9ycw== 85844
IFRlc3RVdGlscw== 85845
ZmlsdHI= 85846
VXN1 85847
IGRpY3Rpb25hcnlXaXRo 85848
IG9icmFz 85849
IEJEU00= 85850
LmdldFRhcmdldA== 85851
IGFsbG93YWJsZQ== 85852
IEluc2VydHM= 85853
CU5vbmU= 85854
IGxpYmVyYXRlZA== 85855
S2VudA== 85856
IFdpc2hsaXN0 85857
IExhZ2Vy 85858
IGp1aW4= 85859
IG51ZXM= 85860
IG1vbmFzdGVyeQ== 85861
IG1pY3Jvc2Vjb25kcw== 85862
IEhhbm5h 85863
0L7RgdGC0Lg= 85864
d2VhcG9ucw== 85865
X3Nwb3Q= 85866
b2RvbQ== 85867
Lk1vZGVsRm9ybQ== 85868
IG9yZGVybHk= 85869
RklOSVRF 85870
IHJlc2lkZW5jZXM= 85871
X3RD 85872
Q0dDb2xvcg== 85873
IMW+ZQ== 85874
IHNjcmVlbnBsYXk= 85875
IHB5bW9uZ28= 85876
IGTDqXQ= 85877
IGRlc3Rh 85878
IE5ldXJvc2NpZW5jZQ== 85879
bmllc3Q= 85880
QEdlbmVyYXRlZFZhbHVl 85881
RUxTRQ== 85882
PGw= 85883
IGRpc2pvaW50 85884
LnB1Ymxpc2hlZA== 85885
ZWxsYW4= 85886
IFN0cmluZ1dyaXRlcg== 85887
LkJyb2FkY2FzdA== 85888
IEZlaW5zdGVpbg== 85889
YW1waGV0YW1pbmU= 85890
S2V5U3BlYw== 85891
IEdyaW1t 85892
ZXR0ZWw= 85893
4Lic 85894
T3Q= 85895
aWJyYWx0YXI= 85896
Y2Vi 85897
IHRpbWluZ3M= 85898
aW5lZQ== 85899
IEFuZHLDqQ== 85900
RXNzYXk= 85901
Lmpk 85902
IEJ1bmRlc2xpZ2E= 85903
UmV0dXJuZWQ= 85904
IGFwcGFsbGluZw== 85905
LkJpZ0ludGVnZXI= 85906
IFNFTg== 85907
IEhvbWVtYWRl 85908
LmNoYXB0ZXI= 85909
LXZhbGlk 85910
IEFUVFJJQlVURQ== 85911
dXN0cmlh 85912
IGVudMOjbw== 85913
UmV0dXJuaW5n 85914
dmVydGlzZXI= 85915
LlBhY2thZ2VNYW5hZ2Vy 85916
Q2xhcms= 85917
IHF1b3Rhcw== 85918
IHNjYWxlRmFjdG9y 85919
IGNveg== 85920
X21pbmk= 85921
IG11dGF0ZWQ= 85922
LmFjdGl2YXRpb24= 85923
Km1hdGg= 85924
LnZlcnR4 85925
PGFydGljbGU= 85926
IGVtYnJvaWRlcnk= 85927
L2J1c2luZXNz 85928
Y2tldHQ= 85929
c2NpZW50aWZpYw== 85930
IEdpbGVz 85931
IHJhY2Vy 85932
X3BlcmZvcm1hbmNl 85933
IGxhbWluYXRl 85934
IFBISQ== 85935
UsOp 85936
IEF0aGU= 85937
Y29sZXM= 85938
IHNhxJ8= 85939
IElua1dlbGw= 85940
CXNpZw== 85941
IHNwYWNlc2hpcA== 85942
IGluc29s 85943
IFVDbGFzcw== 85944
LmxlYWRpbmdBbmNob3I= 85945
dG90YWxz 85946
IHNwcmlua2xl 85947
IE1vZHVsYXI= 85948
ICdcIg== 85949
b3Jvbg== 85950
LlJlYWRBbGxUZXh0 85951
ICAgIAkNCg== 85952
L2lvbg== 85953
REVQVEg= 85954
X21pbmltdW0= 85955
XENhY2hl 85956
IGRpdmVyc2lmaWVk 85957
aWduZXQ= 85958
IGRvam8= 85959
IFVJQWxlcnRWaWV3 85960
L3R0eQ== 85961
IFNhc3M= 85962
IC9cLig= 85963
IElNQUdFUw== 85964
IGRhdGluZ3NpZGVy 85965
IEV4cGxvcw== 85966
LmdlbnJl 85967
XEV2ZW50cw== 85968
IGVudW1lcmF0ZWQ= 85969
Y3VycmVudFN0YXRl 85970
aXRydXN0 85971
Q2FsbGFibGVXcmFwcGVy 85972
Rm91bmRlZA== 85973
IHJveWFsdGllcw== 85974
KFByb3BlcnRpZXM= 85975
IFVTUFM= 85976
LS0tLS0tLS0tLS0NCg== 85977
LlJlYWRUb0VuZA== 85978
IGNvc3k= 85979
IGFwZQ== 85980
X2RlZmluaXRpb25z 85981
IHBhZ2VObw== 85982
IGR6aWVjaQ== 85983
c3RhbmRlbg== 85984
IGJlc2Fy 85985
aXRpbg== 85986
IGNvbnNlcXVhdA== 85987
IHBydg== 85988
IHNwbGl0dGVk 85989
IGVzcG9zYQ== 85990
PWZpbmRWaWV3QnlJZA== 85991
V2Fsa2Vy 85992
IEhlYXJ0aA== 85993
aWJyYXRvcg== 85994
b3RvbXk= 85995
YWdnYWJsZQ== 85996
IOW9kw== 85997
77yBJyk7Cg== 85998
aW9uYXRl 85999
L3llYXI= 86000
IHNldEM= 86001
IE1lZGlhVGVr 86002
LWJveQ== 86003
LnRvb2xTdHJpcE1lbnVJdGVt 86004
Q29uZmlncw== 86005
YXR0ZW5kZWQ= 86006
IGVtb2M= 86007
IEJhaQ== 86008
b3BvbGl0YW4= 86009
IGludHJ1c2l2ZQ== 86010
IHp1Zw== 86011
IGZmbXBlZw== 86012
X2Jvb3N0 86013
IG1vemlsbGE= 86014
IHNsaWNpbmc= 86015
V0c= 86016
cGFnZXNpemU= 86017
UHJvcGVydHlEZXNjcmlwdG9y 86018
IEFsZWphbmRybw== 86019
VVNFUw== 86020
SG9zdGluZw== 86021
IHJpc2tpbmc= 86022
IEludml0ZQ== 86023
IEphemVlcmE= 86024
IHJlZ2FpbmVk 86025
IEhhZ3Vl 86026
IGd1ZXJyYQ== 86027
IGVuY2xvc2luZw== 86028
J10iKQo= 86029
PFRyYW5zZm9ybQ== 86030
Lk5PUlRI 86031
IGNyaW0= 86032
SU5V 86033
IGNsZW4= 86034
IE1vdGhlcnM= 86035
IE93bmVyc2hpcA== 86036
RHJpbms= 86037
IGJlYmVyYXBh 86038
Lm9uZXJyb3I= 86039
KSsK 86040
IHRhYkluZGV4 86041
IERpbw== 86042
IEZvcnR5 86043
KExpbms= 86044
IHNlZ21lbnRlZA== 86045
IGphbWVz 86046
IFRhcmdldHM= 86047
IFJUUw== 86048
INC60L3QvtC/ 86049
IHZhcmlhcw== 86050
IHTDrXR1bG8= 86051
IGTDvHI= 86052
L0dhbWU= 86053
cmFuc2l0aW9u 86054
IGRpc3Rpbmd1aXNoaW5n 86055
dWt0dXI= 86056
YW5qZQ== 86057
IE1jQ2FiZQ== 86058
cGFp 86059
KHRr 86060
RGVzdHJ1Y3Rvcg== 86061
R2FtZU9iamVjdFdpdGhUYWc= 86062
JGg= 86063
IGFmcg== 86064
LnNldEVtYWls 86065
IHJlcGV0aXRpb25z 86066
bGFuZGVycw== 86067
IFNoZWE= 86068
X2NsYWlt 86069
IGFjZXNz 86070
QmVuY2htYXJr 86071
LkVzdA== 86072
LlBP 86073
IE7DpA== 86074
IGl0Y2hpbmc= 86075
IGNvbmRvbWluaXVt 86076
X0ZXRA== 86077
IHJlYWx0aW1l 86078
IGNpdmlsaXplZA== 86079
X3BoeXNpY2Fs 86080
UmFs 86081
IHdpbnRlcnM= 86082
IFlhZA== 86083
IGZvcmE= 86084
IGNhbGlicmF0ZWQ= 86085
UGV0cw== 86086
IHN0b3JtZWQ= 86087
IGplbA== 86088
IFNTUA== 86089
ZGF0YWdyaWQ= 86090
IExhdQ== 86091
dW5hcg== 86092
dWxmaWxsZWQ= 86093
RVJJTkc= 86094
IFRyaW8= 86095
2LHZiA== 86096
Rm9yZWdyb3VuZENvbG9y 86097
PW91dA== 86098
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K 86099
IHZpZW50 86100
IEFETQ== 86101
X0Nvbm5lY3Rpb24= 86102
LWNhbmNlbA== 86103
KCcuJyk7Cg== 86104
IHNhaWxz 86105
IGVxdWl2YWxlbnRz 86106
TmI= 86107
IGZseWVycw== 86108
IEdJUg== 86109
a2VsaWc= 86110
LXdhbGw= 86111
LlJlcXVpcmVz 86112
IGNvc2U= 86113
IEFOQw== 86114
IGphZGU= 86115
IEFsZWM= 86116
IGVuZHJlZ2lvbg== 86117
IEVYVEk= 86118
ZWRlcmU= 86119
VGVycmFpbg== 86120
U3BlY2lmaWNhdGlvbnM= 86121
IFN3ZWVw 86122
c2V0SXRlbQ== 86123
IHNtaXJr 86124
IHNjcmlwdGVk 86125
W1N5c3RlbQ== 86126
56eB 86127
IHN5bmNlZA== 86128
IHNxcg== 86129
Z2V3YXRlcg== 86130
IGpld2Vscw== 86131
IGhkYw== 86132
4KWN4KSw 86133
z4Y= 86134
w7xzc2VsZG9yZg== 86135
bGllbg== 86136
Qm9yZGVycw== 86137
IEF0b21pY0ludGVnZXI= 86138
IHBhcmFseXNpcw== 86139
Q2xhc3NpZmljYXRpb24= 86140
IGdsaWRl 86141
IHVtcA== 86142
IC8+fQ== 86143
IHZlbmRpbmc= 86144
4Li04LiZ 86145
bm90aWY= 86146
Jl8= 86147
IEVtZXJnaW5n 86148
YXRpY29u 86149
IHByb3BhZ2F0ZWQ= 86150
LW9yZGVycw== 86151
YWdhcw== 86152
dXJnZW50 86153
KFRpbWVTcGFu 86154
QUxDSEVNWQ== 86155
L2Jvd2Vy 86156
7IKw 86157
LmJvb3N0 86158
LmRlcGVuZGVuY2llcw== 86159
LlN3aW5nQ29uc3RhbnRz 86160
dW50bGV0 86161
LmNoYXJz 86162
LWNpZ2FyZXR0ZXM= 86163
IE1vZHM= 86164
ICAgICAJ 86165
IGJyYXZlcnk= 86166
IGNvdW50ZXJlZA== 86167
cmVsdWRl 86168
X21vYg== 86169
QUlORUQ= 86170
bmdvaW5n 86171
IHVuZGVyZ3JhZA== 86172
R2V0TWV0aG9k 86173
RHVhbA== 86174
X2pvdXJuYWw= 86175
LE5v 86176
IHNpZGVs 86177
IExhcnNvbg== 86178
KyIsIis= 86179
IG5hcnJhdGlvbg== 86180
IFN1YndheQ== 86181
IExleGVy 86182
IE5pbmc= 86183
aW5kaWM= 86184
dGhhbmU= 86185
LlNJRw== 86186
LWVhcnRo 86187
IGJlcnJ5 86188
IFRldWNob3M= 86189
CUVudGl0eQ== 86190
ZXJzcGVjdGl2ZQ== 86191
Tm9z 86192
IE93bmVk 86193
QlVS 86194
IGxpbmVubw== 86195
IEZpamk= 86196
R2V0SW50 86197
U3RyaW5nUmVm 86198
ICcmJw== 86199
dWFkYQ== 86200
LmNhcHRpb24= 86201
YXBwTmFtZQ== 86202
KG9mZg== 86203
IHZlcnN0 86204
IHR5cG8= 86205
6ZyA6KaB 86206
YXRlcmFuZ2VwaWNrZXI= 86207
IHFlbXU= 86208
IEdFTw== 86209
X0Ns 86210
LklU 86211
IE51bmVz 86212
W1o= 86213
IENvbXBsZXRlbHk= 86214
LkxpdmU= 86215
IEphcw== 86216
IHdlaXQ= 86217
Y29zaXR5 86218
IHBvbGljZW1lbg== 86219
KHRhcmdldHM= 86220
aXRsZWRCb3JkZXI= 86221
IOinow== 86222
LkdsaWRl 86223
IGRlbW9uaWM= 86224
SW50ZXJpb3I= 86225
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 86226
IERvdGE= 86227
IG9yYml0cw== 86228
QU1Z 86229
IFRyaW5pZGFk 86230
aWN1bQ== 86231
Lnph 86232
IGdldEludA== 86233
QXRsYW50YQ== 86234
IGFtbmVzdHk= 86235
IFJhaHVs 86236
IF98 86237
aGlybw== 86238
IFRBS0U= 86239
IGp1bWxhaA== 86240
IEF1dG9tb2JpbGU= 86241
4buP 86242
d2hvc2U= 86243
X1NBTVBM 86244
UGF0aWVudHM= 86245
INGC0LXQutGD0Yk= 86246
LnN1YnNjcmlwdGlvbnM= 86247
IE1lbnRpb24= 86248
VG9Xb3JsZA== 86249
aXBh 86250
CU1lc3NhZ2VCb3g= 86251
PEFwcGxpY2F0aW9uVXNlcg== 86252
INil 86253
ZmFicmlj 86254
a2VsZXRhbA== 86255
QmFyQnV0dG9u 86256
IGFyY2hldHlwZQ== 86257
aW5zdGFudA== 86258
IGludGVybmFjaW9uYWw= 86259
IFZveWFnZXI= 86260
KHRvdWNo 86261
IFZhbGs= 86262
L01JVA== 86263
IGNhdWw= 86264
J0Nvbm5vcg== 86265
KCIh 86266
KE9Q 86267
ZmFjdWx0eQ== 86268
IEJhdG9u 86269
IFZvbHVudGVlcnM= 86270
dGFuaw== 86271
X0JJTkRJTkc= 86272
O2xpbmU= 86273
IFZlcnNpb25z 86274
WUxFUw== 86275
IGplZXA= 86276
KEVuY29kaW5n 86277
IGdlb2xvZ2ljYWw= 86278
TmljaA== 86279
KHBkZg== 86280
IGFuYWx5emVz 86281
IGNhcHRpdmF0aW5n 86282
IGhpem8= 86283
Lm1kbA== 86284
IGphcA== 86285
IGZsaXBz 86286
CWRm 86287
IFBpZXQ= 86288
IG5yb3dz 86289
IGthbXU= 86290
INCy0L7Qtw== 86291
IHBydW5pbmc= 86292
YWN1bGE= 86293
IHRyYXZlbGxlcg== 86294
U2hvb3Q= 86295
LmVwc2lsb24= 86296
IEZsZW1pbmc= 86297
aWJ1cg== 86298
b3BlcmF0ZQ== 86299
aWdodGVy 86300
IGJlZ3M= 86301
IFdhbG51dA== 86302
KFBhcnNlcg== 86303
IHdpdGhkcmF3YWxz 86304
aXNjb3BhbA== 86305
IGJpbGxib2FyZA== 86306
a2Vr 86307
LW9wZW5pbmc= 86308
IER1ZGU= 86309
Y29uaQ== 86310
eEVC 86311
IGNhbG9y 86312
YW1haGE= 86313
LlRYVA== 86314
RHJ5 86315
IG1pc3Npb25hcmllcw== 86316
X1ZlcnNpb24= 86317
IG11bHRpbGluZQ== 86318
4oCUd2U= 86319
IGNvbXBvbmVudERpZFVwZGF0ZQ== 86320
RmF2b3JpdGVz 86321
aWdoYW0= 86322
IGpvdXJuw6ll 86323
IGFtdXNlZA== 86324
IE9tbmk= 86325
dGd0 86326
IHdhaA== 86327
ZXRpbmU= 86328
IHBoYXNlZA== 86329
IG9uU3RvcA== 86330
Y3JlYXRpdmVjb21tb25z 86331
U29waA== 86332
IHVuYm9ybg== 86333
PUU= 86334
IEZlZEV4 86335
bm9ybWFsbHk= 86336
IGx5cg== 86337
TWF0cml4TW9kZQ== 86338
IHplaWdlbg== 86339
QXRo 86340
IEt1bQ== 86341
w6RobGVu 86342
LyI7Cgo= 86343
IGRhbGxl 86344
IGxhbmNl 86345
IFN1aXRhYmxl 86346
IGNvdW5zZWxvcnM= 86347
5YWo6YOo 86348
IGZhc3Rh 86349
IGJsYXppbmc= 86350
7KeE 86351
L3R1dG9yaWFs 86352
LnRjcA== 86353
5pmv 86354
TWFuYWdlckludGVyZmFjZQ== 86355
IFNhbWFy 86356
CWdsVW5pZm9ybQ== 86357
IHByZXJlcXVpc2l0ZXM= 86358
IGFudGljaXBhdGluZw== 86359
cmFxdW8= 86360
a3Nlbg== 86361
TWFnbml0dWRl 86362
dXRvbWF0aW9u 86363
SGllcmFyY2h5 86364
IGRldmlhdGlvbnM= 86365
aW1ldA== 86366
Q0NJ 86367
PSgK 86368
IGFudGxy 86369
CWluaXRpYWw= 86370
IFJlc29ydHM= 86371
aG9tZXM= 86372
CXBvb2w= 86373
IG1hdMOp 86374
P29wdGlvbg== 86375
Om15c3Fs 86376
KHV0Zg== 86377
LlRhYkNvbnRyb2w= 86378
PlRpdGxl 86379
IEFkb3B0 86380
LklzTWF0Y2g= 86381
IGVudHJ1c3RlZA== 86382
U3VzYW4= 86383
c3dpbmc= 86384
aW1hZ2VuZXM= 86385
IHNlbGVjaW9u 86386
IGFpZGluZw== 86387
KFtdKg== 86388
IHNldEZyYW1l 86389
c3Bpcml0 86390
L3Jzcw== 86391
SXRhbGlj 86392
IFByb3BlbEV4Y2VwdGlvbg== 86393
IFRvbGw= 86394
LkZpbmRHYW1lT2JqZWN0V2l0aFRhZw== 86395
aW5hbnQ= 86396
IHNlbGZpZXM= 86397
XXxb 86398
IGFwcGxpY2F0aW9uQ29udGV4dA== 86399
aXhl 86400
Y2Ri 86401
ZWJi 86402
IE92ZXJzZQ== 86403
IHNxbENvbW1hbmQ= 86404
SG9zdE5hbWU= 86405
LWxhdW5jaA== 86406
Umlzaw== 86407
O3I= 86408
LlNwYW4= 86409
X0NJVFk= 86410
X01B 86411
LyIKCg== 86412
UGF3bg== 86413
IFllbHA= 86414
QnVuZGxlT3JOaWw= 86415
IG1heW9yw61h 86416
U3RhY2tOYXZpZ2F0b3I= 86417
ITsK 86418
IHRodWdz 86419
IEJhcm5ldHQ= 86420
44O744O744O7Cgo= 86421
IOqygA== 86422
X0NPTlY= 86423
IGJ1enppbmc= 86424
a2V0ZXJhbmdhbg== 86425
TWlsaXRhcnk= 86426
d2VlZA== 86427
IGRlbGltaXRlZA== 86428
6LWE5rqQ 86429
INCw0Lo= 86430
X0hFTFBFUg== 86431
IFJFQURZ 86432
TG9vcGVy 86433
KioqKi8K 86434
IFRydWNrcw== 86435
5Y67 86436
X3BvZA== 86437
T01BVElD 86438
LWphdmE= 86439
IHVuaWZ5 86440
L0FyZWE= 86441
ICcvJyk7Cg== 86442
IEdhbWJsaW5n 86443
LkhpdA== 86444
IEZhcnJlbGw= 86445
X2ZpdG5lc3M= 86446
cmVjb21tZW5kZWQ= 86447
emVuZA== 86448
b2RpZQ== 86449
X2JlYW0= 86450
IHBsYWdl 86451
bmRvbg== 86452
LmFzc2VydGo= 86453
IGdyYXRl 86454
TWVhc3VyZWQ= 86455
LmNlbnRyYWw= 86456
Z2VzdHVyZQ== 86457
IEdsb2JhbEtleQ== 86458
cHl4 86459
IE5lY2tsYWNl 86460
5Y2O 86461
LkFkZENvbHVtbg== 86462
IFJ1ZGQ= 86463
IFByZXNieXRlcmlhbg== 86464
dW5kbGVy 86465
IyFb 86466
X2xhaGly 86467
KCk9PSI= 86468
QWNjZXNzaWJpbGl0eQ== 86469
LXRyYWluaW5n 86470
IFRob3U= 86471
X1BJWA== 86472
X1RSWQ== 86473
PEo= 86474
xrDGoW5n 86475
bHVjaw== 86476
X01BWElNVU0= 86477
IHRoYXc= 86478
VW5pZmllZA== 86479
PkNvbnRhY3Q= 86480
LVByZXNpZGVudA== 86481
LXBhcnNl 86482
IFBpY2tlcg== 86483
TWFyY28= 86484
dHJz 86485
zrQ= 86486
LiQu 86487
X01FU0g= 86488
IHNhZ3Rl 86489
Kz0n 86490
0K8= 86491
KHBhcmNlbA== 86492
aXZvcnM= 86493
IGRpdmVydGVk 86494
QUdBSU4= 86495
IG5lc3M= 86496
IHZhbGxleXM= 86497
IC4uLig= 86498
IEVRVUk= 86499
IE91dHM= 86500
IERlbW9uc3Ry 86501
RGV0YWxsZQ== 86502
IOu2gA== 86503
UG9pbnRYWVo= 86504
LmVwcw== 86505
IHN5bm9ueW1z 86506
ID09KA== 86507
4oCcWWVz 86508
J3V0aWxpc2F0ZXVy 86509
TmFtaW5n 86510
TEVW 86511
cHJvdG9jb2xz 86512
IOyb 86513
IGdldFVzZXJuYW1l 86514
LXZhcg== 86515
X210eA== 86516
IHNwZWN1bGFy 86517
IG5vdGFz 86518
SG9yaXpvbnRhbEFsaWdubWVudA== 86519
IEJheWVy 86520
c3Vz 86521
ICAgIAkJCg== 86522
IFNoYWNr 86523
cmVzaGVy 86524
IGltbWF0dXJl 86525
YnJhY2h0 86526
SVNDTw== 86527
LmNyZWRpdA== 86528
IHZpbmVz 86529
X0xQ 86530
RUVERUQ= 86531
IFNjYXJib3JvdWdo 86532
w6FudA== 86533
KT09Jw== 86534
CWRlbHRh 86535
X0NPTE9SUw== 86536
LkN1c3RvbUJ1dHRvbg== 86537
IGFmaXJt 86538
IEppbmc= 86539
UGFybXM= 86540
Y2VudGVycw== 86541
LT5fX18= 86542
IExETA== 86543
LWNvbnRyaWI= 86544
IERyZXNkZW4= 86545
IFBpeGVscw== 86546
ICIiIiIsCg== 86547
TEVUVEU= 86548
eEJF 86549
IEh1c3Q= 86550
IEV4ZWN1dGlvbkNvbnRleHQ= 86551
IEJ1ZmZldHQ= 86552
Y2xhbXA= 86553
LkFydGljbGU= 86554
IFJhdGg= 86555
IFBleXRvbg== 86556
IExPV0VS 86557
b29rZQ== 86558
IHRpZGFs 86559
IHVuaGVhcmQ= 86560
IFNoYWxs 86561
IGJvbWJhcmQ= 86562
YW5vdmE= 86563
W21hc2s= 86564
KGNyZWRlbnRpYWxz 86565
IEV1cm9z 86566
IGJyYW5jaGluZw== 86567
IHN0cm9uZ2hvbGQ= 86568
IGNpdmlsaXphdGlvbnM= 86569
LWNvbm5lY3Q= 86570
IExTVE0= 86571
LW1vdmluZw== 86572
IHV0ZW4= 86573
Y3Jhc3Q= 86574
X0RJU1A= 86575
IENvbnRyb2xsZXJz 86576
dXBl 86577
LnBlbg== 86578
IGRlc3Nh 86579
IGRpZsOtY2ls 86580
dWl0YWJsZQ== 86581
b2ZpcmU= 86582
W2NoaWxk 86583
UkVGRVJFTkNFUw== 86584
IGRlY2VpdA== 86585
IFVyZw== 86586
PEVkZ2U= 86587
IGRlc2k= 86588
IEJPVEg= 86589
ICcpJzsK 86590
dHlwZU5hbWU= 86591
Q29tbWFuZEV2ZW50 86592
d2hlcmVJbg== 86593
KG9wdGltaXplcg== 86594
IHLDqWFsaXM= 86595
IG9taW5vdXM= 86596
IEJyYWNrZXQ= 86597
IGRhdGVTdHJpbmc= 86598
IHNpbmdseQ== 86599
KEpGcmFtZQ== 86600
4oCZVA== 86601
ZXNsaW50 86602
KGhlcm8= 86603
IE1hcmE= 86604
IGNhdGNoeQ== 86605
LGNhbGxiYWNr 86606
IGN0eXBl 86607
cHJlc2V0 86608
CWdsZnc= 86609
0LXRiQ== 86610
aGs= 86611
IHRpdGFu 86612
QWNlcHRhcg== 86613
44Gh44Gv 86614
X2Fzc2lnbmVk 86615
X2VyYXNl 86616
IGluZmFuY3k= 86617
UmV2aWV3ZXI= 86618
IFJlY29yZGVy 86619
IHNjbQ== 86620
IEJpZ2dlc3Q= 86621
IEdvYQ== 86622
CVND 86623
X0xvY2F0aW9u 86624
X29yaQ== 86625
a2ls 86626
cmVuZGU= 86627
IG1hcnpv 86628
U3RyaW5nVXRpbA== 86629
0YPRidC10YHRgtCy 86630
IEhvd2U= 86631
xrDhu51p 86632
Zm9pcw== 86633
WE1MRWxlbWVudA== 86634
IGRlcmVjaG9z 86635
IGR1bmc= 86636
IFdhaw== 86637
IEdhdw== 86638
fVxc 86639
ISIpOw== 86640
IEpvaGFubmVzYnVyZw== 86641
IHN1Ym1hcmluZXM= 86642
IGFjY29s 86643
IGZvc3RlcmluZw== 86644
LgoKCgoKCgoKCgoKCg== 86645
Lk9wZXJhdG9y 86646
IG51b3Zh 86647
IHRyYWplY3Rvcmllcw== 86648
LnNjaGVkdWxlcnM= 86649
IEZvbGxvd2Vycw== 86650
IEFuZGVyc2Vu 86651
IFBlZ2d5 86652
LmZyZQ== 86653
xLFjxLE= 86654
IGt2cA== 86655
Y29i 86656
LWxlbg== 86657
IG1haWxz 86658
IGFjY3I= 86659
IEpBVkE= 86660
IGFkbWluaXN0ZXJpbmc= 86661
RGVmYXVsdENlbGxTdHlsZQ== 86662
IGNsaWNrYWJsZQ== 86663
IEphY2tldHM= 86664
O2Rpc3BsYXk= 86665
IGJyZWFkY3J1bWJz 86666
Y2hhbA== 86667
Oic7Cg== 86668
IEhvdmVy 86669
dWNjaGluaQ== 86670
IHRlYw== 86671
IHN0b3B3YXRjaA== 86672
X1JlbGVhc2U= 86673
TWF5b3I= 86674
4Z62 86675
IFlhbmtlZQ== 86676
Y2huZXI= 86677
QXJ0aWZhY3Q= 86678
LmJhbm5lcg== 86679
IGtm 86680
X3N0dWR5 86681
Zm92 86682
IE1lZXRpbmdz 86683
w7Zt 86684
IGluanVyaW5n 86685
L2RvY3VtZW50YXRpb24= 86686
QkNN 86687
c3R5bA== 86688
CXJi 86689
IG9yaWdpbmFscw== 86690
IGZsZXJl 86691
IFRlcnJhcmlh 86692
dG9rZW5pemVy 86693
LWxpdGVy 86694
Jyk7Ig== 86695
IHBldGl0cw== 86696
IEJidw== 86697
IFRoaWVm 86698
VUlMVElO 86699
Uk9VVA== 86700
IHNudWc= 86701
Pj4p 86702
LW5pbmU= 86703
IH1dOwoK 86704
IEJlbGxldg== 86705
IGVsw6k= 86706
IHl5bg== 86707
eW5hbW8= 86708
Z2xlcw== 86709
IHNwZWQ= 86710
LkJVVFRPTg== 86711
IGRpc3BlcnNpb24= 86712
b3VibGVz 86713
IG5vdmVsbGVy 86714
Il0uIg== 86715
IHByaWVzdGhvb2Q= 86716
ICIiKQoK 86717
CWd1aQ== 86718
LWluYw== 86719
WG1sTm9kZQ== 86720
IHN0dWRz 86721
LklzQWN0aXZl 86722
IHRyw6Q= 86723
IG9yZGFpbmVk 86724
IEJ5dGVBcnJheUlucHV0U3RyZWFt 86725
IHJlcXVlc3RCb2R5 86726
IFJUUA== 86727
UkVTVUxUUw== 86728
KGNvbGw= 86729
IHJlbG9hZGluZw== 86730
Lk5hdmlnYXRvcg== 86731
X2NvdW50ZXJz 86732
IGJ1ZGRpbmc= 86733
IGxpY2Vuc2Vl 86734
b2xvZ2k= 86735
IHPhuqNu 86736
IEtpcw== 86737
IEZsYXR0ZW4= 86738
X3ByaQ== 86739
IGFwcHJvcHJpYXRpb24= 86740
6K+E6K66 86741
X1JTUA== 86742
Y29tYmF0 86743
X1BH 86744
IGhpc3RvZ3JhbXM= 86745
ZHE= 86746
RW50ZXJwcmlzZQ== 86747
IE5PQUE= 86748
IFNwZWVkd2F5 86749
IGJhZ2k= 86750
IEJld2VydA== 86751
RmxvYXRpbmc= 86752
IEtpbWJlcmx5 86753
UHJvc2Vj 86754
SmltbXk= 86755
IEVsaWFz 86756
IGFyYml0cmFyaWx5 86757
IOS9v+eUqA== 86758
IENvdW50cw== 86759
dXN0ZQ== 86760
Rmlyc3RDaGlsZA== 86761
IENsZWFucw== 86762
LnB1cmNoYXNl 86763
IGludGVycG9sYXRlZA== 86764
IGJ1aWxkdXA= 86765
X1NURU5DSUw= 86766
RWd5cHQ= 86767
IGF1cmU= 86768
LnRydXRo 86769
ZmVvZg== 86770
IEdpbQ== 86771
b2NhY2hl 86772
IFV0dGFy 86773
X0NPTVBMRVRFRA== 86774
U2Vlbg== 86775
IE5hcG9saQ== 86776
KGRt 86777
IGdyaXR0eQ== 86778
LmVudGVycHJpc2U= 86779
Y29uZXhhbw== 86780
IGdhdGhlcnM= 86781
IHNldFNlYXJjaA== 86782
IENsaWZmb3Jk 86783
IFNuYXBl 86784
IFNhbHZhdGlvbg== 86785
TG9naW5Gb3Jt 86786
Q3JpdGljYWxTZWN0aW9u 86787
LnVzZXJkZXRhaWxz 86788
IHJlcGFpbnQ= 86789
44GC44KK44GM44Go44GG 86790
SHVudGVy 86791
WmVu 86792
VGlueQ== 86793
bWxhbmQ= 86794
ZXJ0aWw= 86795
CWJ1ZmY= 86796
X09mZnNldA== 86797
IHNtZWxsZWQ= 86798
Uml2ZXI= 86799
LXRvcGlj 86800
IGFjb21w 86801
IFJvdXRlU2VydmljZVByb3ZpZGVy 86802
IDwr 86803
b21icw== 86804
IENvb3BlcmF0aXZl 86805
IHNldWxl 86806
IGFpbWU= 86807
c2hvdWxkUmVjZWl2ZQ== 86808
SG9uZw== 86809
IG9hc2lz 86810
IEdlbWluaQ== 86811
cmFwaWQ= 86812
RHVw 86813
KFF0R3Vp 86814
b2RvbnQ= 86815
LWdudQ== 86816
IFNlbGVuaXVt 86817
Jyk/Pjwv 86818
IE5vcGU= 86819
R3JlYXRlclRoYW4= 86820
Lk9ic2VydmVy 86821
IEFwcHJvcHJp 86822
IExvbmVseQ== 86823
IGhhaXJjdXQ= 86824
IGFsbGVyZGluZ3M= 86825
w7NwZXo= 86826
esWR 86827
IHNsdW1w 86828
IEdpbnM= 86829
IGdpb3JuaQ== 86830
IHBhcGVyYmFjaw== 86831
LkZpbGVSZWFkZXI= 86832
ZGFm 86833
Y3JlZHM= 86834
dHlwaW5ncw== 86835
ZGVoeWRl 86836
Y29pbA== 86837
U291dGhlcm4= 86838
IG1vdXNlQ2xpY2tlZA== 86839
emVpY2huZXQ= 86840
dXNlclJlcG9zaXRvcnk= 86841
RGVzdHJveWVk 86842
aW50ZXJuZXQ= 86843
IEVpZA== 86844
IGxpbmtlcg== 86845
4oCZQg== 86846
IHNsYXVnaHRlcmVk 86847
IFBlcnI= 86848
CVJ1bnRpbWVPYmplY3Q= 86849
c2FpZGE= 86850
IHBhZ2VDb3VudA== 86851
IFJhbmRvbHBo 86852
IEpOSUVudg== 86853
X3N1cGVydXNlcg== 86854
LWRpcmVjdGVk 86855
IElEYg== 86856
IEJlcm5hcmRpbm8= 86857
IE5pbnRo 86858
IEFsZ29yaXRobXM= 86859
YmRi 86860
QHRlc3RhYmxl 86861
LmFybQ== 86862
YmVsbGlvbg== 86863
KHNpZA== 86864
IGJyaWVmZWQ= 86865
4pWX 86866
6YWN572u 86867
IFVtYQ== 86868
IEluZGljZXM= 86869
IEJ1Y2NhbmU= 86870
IGF5YW50 86871
RnJlZWRvbQ== 86872
IFl1cmk= 86873
ZXRzaw== 86874
X1Bo 86875
IGl0YWxpYQ== 86876
Y2xvc2luZw== 86877
IHdyaXN0cw== 86878
ICp9 86879
c2VjdXRpdmU= 86880
RW52aWFy 86881
cmFpdGg= 86882
IEhhd3Ro 86883
15M= 86884
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo= 86885
cGFnZVRpdGxl 86886
IGRoY3A= 86887
IOyLpO2WiQ== 86888
d2lzaGxpc3Q= 86889
IGJsYW1lcw== 86890
IHNpZGw= 86891
dWRkZWQ= 86892
IGNvbnRyb3ZlcnNpZXM= 86893
6I8= 86894
KHVzZXJEYXRh 86895
IGxpbnNwYWNl 86896
IERpZmZlcmVuY2Vz 86897
X2RlcG9zaXQ= 86898
REVUQUlM 86899
LmRlY2s= 86900
IGNvbnRpbnV1bQ== 86901
IHNhY3JhbQ== 86902
b21pdGU= 86903
IG5mbA== 86904
Q3Vt 86905
IHNvZg== 86906
IGV2aWxz 86907
IGVudGlkYWQ= 86908
CXNvY2s= 86909
IExlbW1h 86910
LlNoaXA= 86911
IHppZw== 86912
VGVsZWZvbmU= 86913
SURFUw== 86914
IE51bWVyb3Vz 86915
Lm1ldHJpYw== 86916
aW5zbg== 86917
IGNvcHlyaWdodHM= 86918
IGNvbXBsaWNhdGlvbg== 86919
IFVSTFNlc3Npb24= 86920
IGRpcHBpbmc= 86921
IGNx 86922
IEJ1c3R5 86923
cmVsYXRpb25zaGlwcw== 86924
IENvcnZldHRl 86925
U3VtbW9u 86926
ZXZlbnROYW1l 86927
SXNzdWVz 86928
IGlycmVzaXN0aWJsZQ== 86929
IGdyaXM= 86930
Q0FTQ0FERQ== 86931
IHBhdXNlcw== 86932
IGxlZGdl 86933
X0dQ 86934
LkltcA== 86935
IG9yZGVyYnk= 86936
IE9yZ2FuaXplcg== 86937
IEdyZWVud2ljaA== 86938
T2Fr 86939
LW1lbWJlcnM= 86940
IFdlYkdM 86941
IGdhbW0= 86942
bW9kdWxlSWQ= 86943
IGZ1bGxQYXRo 86944
bG9nZW4= 86945
KGV2ZW50TmFtZQ== 86946
KCIuIik7Cg== 86947
IGtyaXN0 86948
IGNsaWZmcw== 86949
IFBlcmNlcHRpb24= 86950
RVRJTkc= 86951
IGzhuqFp 86952
IGludGVydg== 86953
IG9wcG9ydHVu 86954
IEp1ZGdlcw== 86955
IENvbWJpbmF0aW9u 86956
Y29udGludWVk 86957
Y29ubw== 86958
LmRyYXdSZWN0 86959
LkNvbXBvc2U= 86960
IHNpZ3VpZW50ZXM= 86961
IER1ZmZ5 86962
KGVuY29kaW5n 86963
IFZ1bGthbg== 86964
IEdlcnI= 86965
IHBhcmZhaXQ= 86966
KHl5 86967
X1RIQU4= 86968
IGdldFNlcnZpY2U= 86969
X09SRA== 86970
LGVw 86971
Z3JhcGhpYw== 86972
IFF1ZXJpZXM= 86973
IHBhcnRpY3VsYXJz 86974
IEhhdmFuYQ== 86975
PW8= 86976
ZmFucw== 86977
IHVuaWxhdGVyYWw= 86978
IFJGSUQ= 86979
Q29tcGF0aWJpbGl0eQ== 86980
c3RyYW5k 86981
IHdha3R1 86982
IHF1YWxpZGFkZQ== 86983
UHJvcGVydHlQYXJhbXM= 86984
cmV0ZW4= 86985
KGhvc3RuYW1l 86986
X0NBUg== 86987
IHdpZGVuZWQ= 86988
IFhwZXJpYQ== 86989
cG9sbG8= 86990
QWJvcnQ= 86991
ISEpCg== 86992
IFdhZw== 86993
LS0r 86994
INGC0YA= 86995
IFJlY3Vyc2l2ZQ== 86996
IGFubmU= 86997
IEdhbWVwbGF5 86998
PENsaWVudA== 86999
LlVzYWdl 87000
IElTU1VF 87001
IGpkYmM= 87002
aXNvcnk= 87003
X21hY3Jvcw== 87004
cGlja2xl 87005
LmdhbWVzZXJ2ZXI= 87006
IHR2Yg== 87007
0YLRiw== 87008
Lk9QRU4= 87009
IHByZWRldGVybWluZWQ= 87010
IHNpcmU= 87011
CQkJDQoJCQkNCg== 87012
aXNjcmltaW5hdGlvbg== 87013
IHJlcGVhbGVk 87014
IGNvbmplY3Q= 87015
IFByZWNvbmRpdGlvbnM= 87016
IHRpbHRlZA== 87017
IGlub2M= 87018
IGV1cm9wZWFu 87019
YWJk 87020
X0RFTEVURUQ= 87021
IC0s 87022
4oCTYW5k 87023
QEZYTUw= 87024
ICldCg== 87025
UklORw== 87026
IGFsaXF1YQ== 87027
IGdydWVzb21l 87028
IEluY2hlcw== 87029
UGxheWVk 87030
KGNvbmZpcm0= 87031
IE5WSUM= 87032
X1RvdGFs 87033
aXNhcw== 87034
IE9uaW9u 87035
IHNlY29uZG8= 87036
IEdldFVzZXI= 87037
XFVybA== 87038
X2Fic3RyYWN0 87039
IGRldmV6 87040
IGN1cGJvYXJk 87041
dGV4dHM= 87042
IElzbGVz 87043
X01BVEg= 87044
U2tpcHBpbmc= 87045
X2Nvc3Rz 87046
PW91dHB1dA== 87047
aWJpbGk= 87048
IGtudWxs 87049
X2NvZWZmcw== 87050
X2F0dGVtcHQ= 87051
CVJ1bg== 87052
Z2VuZGVu 87053
cnVwdGVk 87054
IHNvYXJlZA== 87055
X2hz 87056
IGFkb3B0cw== 87057
X01PRElGSUVE 87058
XEZhY3Rvcmllcw== 87059
IFN3ZWF0 87060
IGRva3VtZW50 87061
IFRlbGVzY29wZQ== 87062
IEZpeGVz 87063
b3JxdWU= 87064
LkNoYXJ0aW5n 87065
X0RBQw== 87066
IHNlY3JldGlvbg== 87067
IHJoZXRvcmljYWw= 87068
UGVyZmls 87069
IG3DtmNodGVu 87070
LCcs 87071
IHZpZXdQYWdlcg== 87072
QlVZ 87073
IG9uRm9jdXM= 87074
b3NhbHM= 87075
IGJpc2N1aXRz 87076
IHZib3g= 87077
IGZvcmNlZnVsbHk= 87078
TmludGVuZG8= 87079
IHbDoWw= 87080
IGNsYW5z 87081
ZnJvZw== 87082
IGJvcmRlclRvcA== 87083
QnJpZWY= 87084
LkJvcmRlckZhY3Rvcnk= 87085
LXNlcnZpbmc= 87086
IHF1b3RhdGlvbnM= 87087
IEdhcm5lcg== 87088
IEFsbGV5 87089
Ij8+Cg== 87090
KHNjYW5uZXI= 87091
IGVudGFpbA== 87092
IC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== 87093
KGA8 87094
LmRlc2NyaXBjaW9u 87095
X0J5 87096
IOyalA== 87097
IHBha2lzdGFu 87098
ZWxobw== 87099
RW5naW5lZXJpbmc= 87100
IGJvb24= 87101
IExvb3Nl 87102
aWVyZ2U= 87103
U2VuYXRl 87104
IExZ 87105
cmVzcG9uc2VPYmplY3Q= 87106
aW9yZQ== 87107
w6FnZW5lcw== 87108
IOS4jQ== 87109
IGFkZEFjdGlvbg== 87110
IE1BQ0hJTkU= 87111
YW5na2Fu 87112
X21p 87113
X0FSUg== 87114
TGl0ZXI= 87115
T0xG 87116
IHN1cHBlcg== 87117
IHBhdGhNYXRjaA== 87118
IE9ycg== 87119
w61k 87120
KGZpbHRlcmVk 87121
IGF1dGhUb2tlbg== 87122
IOKEnQ== 87123
LTwv 87124
KHRlbnNvcg== 87125
IHJldm9sdmluZw== 87126
IGluaWNpYXI= 87127
IFNjaHdhcno= 87128
ZGVmZ3JvdXA= 87129
Y29sdW1uTmFtZQ== 87130
X3RyYWplY3Rvcnk= 87131
4LmE4Lih 87132
ZWdhc3Vz 87133
IOydtOumhA== 87134
IGVhdGVy 87135
IHVuZGVyZXN0aW1hdGVk 87136
IGJ0Yw== 87137
IOyEoO2DnQ== 87138
ZW5hZGU= 87139
IFNFWFA= 87140
ZW1vdXRo 87141
T01FVFJZ 87142
ZW50ZXJlZA== 87143
LnBob25lTnVtYmVy 87144
IFZvYw== 87145
IGV4Y2Vzc2l2ZWx5 87146
IENBVEVHT1JZ 87147
X1VQREFURUQ= 87148
IG1vbmFyY2h5 87149
YXJjaHM= 87150
IGNhdmVhdA== 87151
d2lucw== 87152
IHBsYXlib29r 87153
c2hhZGU= 87154
IHNldFVzZXJuYW1l 87155
IGFjY3VzZXM= 87156
IG1vxbxsaQ== 87157
IGxvcnNxdWU= 87158
IGFqdWQ= 87159
aGVhcg== 87160
IHBzeWNvcGc= 87161
KEVD 87162
IG1lbGFuY2g= 87163
dGhyb2F0 87164
bmlo 87165
V09PRA== 87166
IHZvbHRz 87167
X05FRUQ= 87168
X3doaWxl 87169
IFJpZGVycw== 87170
16I= 87171
IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4= 87172
TmV0TWVzc2FnZQ== 87173
TW9kaWZpY2Fy 87174
LnNlc3M= 87175
KCIiKSw= 87176
6Kmx 87177
IHByYWlzZXM= 87178
IGxjbQ== 87179
IG1ha2VzaGlmdA== 87180
IE5PVEhJTkc= 87181
IEFydGlmYWN0 87182
d2lq 87183
dHlwaWNhbGx5 87184
KCde 87185
PGs= 87186
xJlraQ== 87187
INC+0YLQv9GA0LDQsg== 87188
IOE= 87189
IGRlZlN0eWxlQXR0cg== 87190
aW5jZXJlbHk= 87191
w6lzdA== 87192
SW5UaGU= 87193
c3RpbWU= 87194
IGZyYWdtZW50ZWQ= 87195
IGZyeWluZw== 87196
Z3JpbQ== 87197
ZmllbGRuYW1l 87198
IGNyb3NzaW5ncw== 87199
IGFtbw== 87200
X09wdGlvbnM= 87201
IGhhaXJlZA== 87202
L3dhaXQ= 87203
IHBhcmNobWVudA== 87204
IGNyZWF0ZUVsZW1lbnQ= 87205
SHR0cFN0YXR1cw== 87206
IGVya2zDpA== 87207
aXp6YXppb25l 87208
dGh1bWJuYWlscw== 87209
bG92YWs= 87210
IGJhbmdpbmc= 87211
IHVuaW1hZ2lu 87212
IE92ZW4= 87213
KEF1ZGlv 87214
YXBzdWxhdGlvbg== 87215
IHJhbXBz 87216
55Wq 87217
IFdvb2R3YXJk 87218
6Zeu6aKY 87219
cm9ncmFt 87220
0YDRg9C/0L8= 87221
IFdvcnNoaXA= 87222
IHN0YWQ= 87223
IG5lZg== 87224
IEphdW5l 87225
YnV6eg== 87226
YWx1cw== 87227
T05ET04= 87228
LXN1 87229
IG91dHBhdGllbnQ= 87230
amFj 87231
RVNQTg== 87232
w6ZsbGFuZA== 87233
bXlw 87234
IHNob3dyb29t 87235
TW9udHNlcnJhdA== 87236
LmdldERyYXdhYmxl 87237
w6l0aWNv 87238
IHbDoG8= 87239
SUJD 87240
RXhwZXJ0cw== 87241
TWJwcw== 87242
Ij4j 87243
IG5vcnRoZWFzdGVybg== 87244
IE1lag== 87245
KG1pbGxpc2Vjb25kcw== 87246
4oCUYWxs 87247
LXJlYWNoaW5n 87248
CXJlcGx5 87249
P3R5cGU= 87250
IGNydXo= 87251
ID48Pw== 87252
LkZpbmRBc3luYw== 87253
KGNpcmNsZQ== 87254
IFNoaW5l 87255
IE1hdmVyaWNrcw== 87256
IHNhZmV6b25l 87257
IExhemFy 87258
IGRpc3RpbmN0aW9ucw== 87259
LWZlZWQ= 87260
LnNldENvZGU= 87261
4KSq 87262
IHTDqWM= 87263
IHNlcmFpdA== 87264
IE1JQ1JP 87265
IENvbnN1bXB0aW9u 87266
Xm4= 87267
LmZyb21GdW5jdGlvbg== 87268
IFJ1cGVydA== 87269
IGhhcmFzc2luZw== 87270
LUNv 87271
IHRpaw== 87272
IFN2ZW5z 87273
LkltYWdlQWxpZ24= 87274
X3doaXRlc3BhY2U= 87275
IGtpY2tlcg== 87276
IGNhZGFzdHI= 87277
Q2V0dGU= 87278
X25vdGlmaWVy 87279
IEZBRw== 87280
IHByaW1hbA== 87281
IGhvbW9nZW5lb3Vz 87282
IGFzdHJvbm9taWNhbA== 87283
IEJ1cnI= 87284
LkNvcHlUbw== 87285
Z3JhcGhz 87286
aXR0bw== 87287
T1NI 87288
IHNob3dBbGVydA== 87289
YW50cm8= 87290
ImRlZmF1bHQ= 87291
ZW1waGFzaXM= 87292
V2Vp 87293
b3V0Y29tZQ== 87294
IGFrdQ== 87295
IGNhbXBhaWduZWQ= 87296
KSI7Cgo= 87297
IHJlY2lwcm9jYWw= 87298
IFJveWFsZQ== 87299
ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= 87300
LlRJTUU= 87301
IDwq 87302
T2Zmc2V0VGFibGU= 87303
Y29tcG91bmQ= 87304
d2FpdEZvcg== 87305
dWVnb3M= 87306
LnN0cmluZ1ZhbHVl 87307
X1NDSEVE 87308
IGZhdHQ= 87309
wqDCoMKgwqDCoMKgwqA= 87310
LmRpc2s= 87311
IHdhcnBlZA== 87312
IGNyaXRpcXVlcw== 87313
PycKCg== 87314
KHNraWxs 87315
IG1vZGVyYXRlZA== 87316
X2VsZW1z 87317
S2V5TGlzdGVuZXI= 87318
IHNlYXNvbmluZw== 87319
IHBvdXJxdW9p 87320
X0ZE 87321
cHJk 87322
aHlh 87323
Ij7Dlzwv 87324
IG5vdXZlYXV4 87325
IGdpdmVhd2F5cw== 87326
5oql6YGT 87327
TWFpbk1lbnU= 87328
Oy8q 87329
IEdyb24= 87330
cXVpdm9z 87331
Ow0KDQoNCg0K 87332
IGluZmx1ZW5jZXJz 87333
KFRJTQ== 87334
U2hhcmVkUHRy 87335
IGRpYWxvZ3M= 87336
KioqKiovCg== 87337
LkF0b21pYw== 87338
IE1vcnNl 87339
IHBjYg== 87340
IEFQQw== 87341
LkltbXV0YWJsZQ== 87342
IHJlc2l6aW5n 87343
IEx1bXB1cg== 87344
IEh1bWFuaXRpZXM= 87345
X3NvbHZl 87346
X2h1bWFu 87347
ZXR5bA== 87348
IEh1cnQ= 87349
IEVzdGFibGlzaGVk 87350
Y2xhcmVk 87351
IGNvbXBhcnRtZW50cw== 87352
QmVhbQ== 87353
X1JN 87354
LmZhbHNl 87355
KEdyaWQ= 87356
IFFTaXpl 87357
X2ZsZw== 87358
aXN0aWNh 87359
PkxvZ2lu 87360
OlVJQnV0dG9uVHlwZQ== 87361
IEV4aXRpbmc= 87362
Y2xhcw== 87363
IGFyc2Vu 87364
KG1ldHJpYw== 87365
cm93c2luZw== 87366
cXVlcnlTZWxlY3Rvcg== 87367
X0ZSSUVORA== 87368
LWlv 87369
IGNvbmZpc2NhdGVk 87370
IGRlZmlhbnQ= 87371
IE1PVE9S 87372
cmVndW50YQ== 87373
IE1vcnJvdw== 87374
IEJlcnM= 87375
Q3JhaWc= 87376
IENQQQ== 87377
IHNleGtvbnRha3Rl 87378
IHNhbW1lbg== 87379
L0F1dGg= 87380
LkxpYg== 87381
Y3JhcGVy 87382
aWNlbWFpbA== 87383
Y3JhdGNo 87384
IFdpcmVk 87385
IGFkdmVydGlzZXI= 87386
IGdldENsaWVudA== 87387
IHJlc3BvbnNpYmx5 87388
CVVPYmplY3Q= 87389
LnNldFJvdGF0aW9u 87390
LkNvdW50ZXI= 87391
X0hPVVI= 87392
VGVzdENhdGVnb3J5 87393
IGhpbmRzaWdodA== 87394
XGNvbnRyb2xsZXJz 87395
d2FsbHM= 87396
LnNldE1heGltdW0= 87397
IHB1YmVydHk= 87398
X3RlYW1z 87399
X01PREFM 87400
LkNP 87401
IGJhZGFzcw== 87402
KSddLAo= 87403
w7pzcXVlZGE= 87404
aXJ1dA== 87405
Q2hlbHNlYQ== 87406
LnRyYW5zZm9ybXM= 87407
IGNhcGl0YWxpc3Rz 87408
TWFyY2E= 87409
IEFyeQ== 87410
LWNvZGVk 87411
546v 87412
VVJFRA== 87413
PFRyYW5zYWN0aW9u 87414
IFBhcmxpYW1lbnRhcnk= 87415
KSRf 87416
IHN1YnRseQ== 87417
IHNpbGt5 87418
IERpcnQ= 87419
IHB1enpsZWQ= 87420
fScpOwo= 87421
cXVlc3Rz 87422
Rm9vdGJhbGw= 87423
IENvbmZpZGVuY2U= 87424
dXp1 87425
YnVsYW4= 87426
IGh1bW1pbmc= 87427
bW91c2VlbnRlcg== 87428
UmV0ZW50aW9u 87429
IHNkbA== 87430
b2tlZGV4 87431
JywnPScsJA== 87432
IEt1YWxh 87433
U0FN 87434
IHRyYW5zZm9ybWF0aXZl 87435
UEtH 87436
aWxsdXM= 87437
IHJvb3Rpbmc= 87438
IFdpdG5lc3Nlcw== 87439
IFJhamFzdGhhbg== 87440
5byg 87441
LWFkZGVk 87442
IFRlcnJpdG9yaWVz 87443
KHNxdWFyZQ== 87444
cmFiYml0 87445
X1Jlc291cmNl 87446
6ZaL 87447
4LiT 87448
IHdpbm5pbmdz 87449
IHNwbGU= 87450
IGTDqHM= 87451
IE1EQg== 87452
w6lydA== 87453
IE1hdHRpcw== 87454
YWlsbGVz 87455
X3dlYWs= 87456
L2phdg== 87457
IGNvbGxhcHNlcw== 87458
ICAgICAgCQk= 87459
IHN3aXJs 87460
IE5TU3RyaW5nRnJvbUNsYXNz 87461
IHZvbHZlcg== 87462
LlJlY2VpdmU= 87463
IERleHRlcg== 87464
IHRhYmxlbmFtZQ== 87465
cmVhdGl2ZQ== 87466
LkdldEZpbGVz 87467
dm9vcg== 87468
IEhvZQ== 87469
VkVSTg== 87470
IE9QQw== 87471
7YOc 87472
cmFtaWRz 87473
54Sh44GX44GV44KT 87474
U3Bpcml0 87475
IE5PUA== 87476
IE1haW50YWlu 87477
KHNpZ21h 87478
b3Ry 87479
TW91c2VDbGlja2Vk 87480
cXVpZXJkYQ== 87481
X3dm 87482
0L7QutCw0Lc= 87483
YXBwYWJsZQ== 87484
IEhvbGRlbg== 87485
IENvdW50ZG93bg== 87486
LnNpZ21h 87487
Y2hhbGs= 87488
YmlsZGVy 87489
IHZpc2lvbmFyeQ== 87490
CU9u 87491
JHVwZGF0ZQ== 87492
IEdpbmdyaWNo 87493
cm9vbUlk 87494
Pk5hbWE= 87495
IHl5dHlwZQ== 87496
LkRlY2ltYWxGaWVsZA== 87497
bWFjcm9z 87498
LnNldExheW91dFBhcmFtcw== 87499
IHJubg== 87500
IElNRGI= 87501
56eN 87502
ZW1hbGVz 87503
IGluY2lkaWR1bnQ= 87504
UmVzdHJpY3RlZA== 87505
IHBlZGFscw== 87506
IEpvZw== 87507
IEFkYXB0aXZl 87508
IGZhZGVz 87509
LkV2ZW50U3lzdGVtcw== 87510
IFBhaWdl 87511
IHNlaXM= 87512
IGFwcHJvcHJpYXRlZA== 87513
RkZU 87514
Z29yaXQ= 87515
IGNvaGVzaXZl 87516
IE5pY2h0 87517
X3dvcmtmbG93 87518
bGl1cw== 87519
IEZvcnRuaXRl 87520
X0lX 87521
QXRQYXRo 87522
IGludG94aWNhdGVk 87523
bm9zdGlj 87524
QmluQ29udGVudA== 87525
LnJlZHVjZXI= 87526
KT8K 87527
J10q 87528
IE9ic2VydmF0aW9u 87529
X3ByZWZz 87530
LnJlc29sdXRpb24= 87531
LlBheWxvYWQ= 87532
TWl4ZWQ= 87533
IFJhaQ== 87534
KHBkZXY= 87535
KEAo 87536
aWNvdA== 87537
JGlz 87538
IGNyZWU= 87539
Pz0uKg== 87540
LlFMYWJlbA== 87541
IEdlb3JnaWFu 87542
eENB 87543
IGRlZmljaWVudA== 87544
dGhyb3du 87545
IHJhcGluZw== 87546
dXBvcw== 87547
CWNsaQ== 87548
Z2V0Vmlldw== 87549
SGlnaGxpZ2h0ZWQ= 87550
Q3BwR3VpZA== 87551
IHJlbGVnYXRlZA== 87552
IGxlYWRlcmJvYXJk 87553
UmVjZWl2ZVByb3Bz 87554
Lmhhcg== 87555
IGNvbmRp 87556
SU1JVElWRQ== 87557
IE1jQ2FydA== 87558
KXRocm93cw== 87559
YnVpZQ== 87560
YnVhaA== 87561
LmNvZWZm 87562
IEF1c3NpZQ== 87563
IFNhYmhh 87564
KGZhYnM= 87565
cmVsYW5k 87566
IEbDtnI= 87567
YmFyYW5n 87568
LHRvcA== 87569
CWVsc2lm 87570
U3RlcFRocm91Z2g= 87571
IHNrZXdlZA== 87572
IFVudXNlZA== 87573
Jyl9Pgo= 87574
WWU= 87575
Y2FsbGVl 87576
SGliZXJuYXRl 87577
IEV2ZXJlc3Q= 87578
aW1wb3J0RGVmYXVsdA== 87579
IHRhcm4= 87580
IE5vd2FkYXlz 87581
WUE= 87582
IENoYWxsZW5nZXI= 87583
X2xvZ2ljYWw= 87584
IGNyZWF0ZURhdGU= 87585
IEdsb3VjZQ== 87586
IGN1YW50bw== 87587
IEhBUg== 87588
IENoaWxs 87589
Il4= 87590
IGN1cnNvcw== 87591
LkVPRg== 87592
IG5pamU= 87593
IGFuZ2VyZWQ= 87594
b2N1c2luZw== 87595
PENvbnRhY3Q= 87596
IEF0bW9zcGhlcmlj 87597
IFdvbGZnYW5n 87598
IEJK 87599
Y2hpbGRz 87600
IEJ1Z3M= 87601
X0hFWA== 87602
KFNQ 87603
w6Vs 87604
X2V2YWx1YXRpb24= 87605
IFJBTkdF 87606
IFNPUA== 87607
X3Rva2VuaXpl 87608
bXNnaWQ= 87609
IHJleA== 87610
CXBt 87611
Q29weWluZw== 87612
Kkw= 87613
RGFsbGFz 87614
LVN0YXRl 87615
dWxmaWxs 87616
IGJ5xYJv 87617
IENvbnRyYWN0b3I= 87618
RGlkbg== 87619
QVNURQ== 87620
IFBJTw== 87621
LlRlbGU= 87622
LndhdGVy 87623
ZGV6 87624
IGFuZ3JpbHk= 87625
IHV0aWxpc2F0ZXVy 87626
IHZvcnRleA== 87627
Q29ycG9yYXRl 87628
YXR1cmFz 87629
IHByaXplZA== 87630
J3VybA== 87631
dWdsaWZ5 87632
IGltcHVsc2Vz 87633
IGNocm9ub2xvZ2ljYWw= 87634
cGxlbg== 87635
X25hbWE= 87636
L29u 87637
IE9mZmljZXM= 87638
IENQSQ== 87639
IEFmdGVyd2FyZHM= 87640
44GT44KT44Gr 87641
X0JMT0NLUw== 87642
R3JhY2U= 87643
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 87644
IEthYnVs 87645
IOaIkA== 87646
IExlaXB6aWc= 87647
4Kao 87648
U2hvY2s= 87649
QXVz 87650
IG11cm0= 87651
X3N0YXJ0cw== 87652
IGLDpA== 87653
IFp5 87654
IkY= 87655
LXJpZ2h0cw== 87656
IGJlaGF2aW5n 87657
KCc+ 87658
IG1vc3F1ZXM= 87659
KndpZHRo 87660
Ii8+Ljwv 87661
LnVuc3BsYXNo 87662
LmdldEFjdGl2aXR5 87663
VVU= 87664
IFNoYWs= 87665
X3Jn 87666
X0VxdWFscw== 87667
J2h0dHBz 87668
IE94eWdlbg== 87669
IFBvcnRzbW91dGg= 87670
4oCUb25l 87671
IHdhdGNoZXJz 87672
IENob2k= 87673
IHNpZGVy 87674
cGVjdHJhbA== 87675
bXF0dA== 87676
LmNyZWF0ZVVzZXI= 87677
amVjdGl2ZXM= 87678
dXJtYQ== 87679
UmVnaXN0cg== 87680
UGVyc29uYWxseQ== 87681
PWtleQ== 87682
IE5FTw== 87683
IEZBUXM= 87684
aWJpbGlkYWRl 87685
Y2tzw6U= 87686
IENvbGxhYm9yYXRpb24= 87687
CWxibA== 87688
LlNFUlZFUg== 87689
IGFib3VuZA== 87690
IEJlbmU= 87691
d2FudGVk 87692
LWhvbGU= 87693
IG11dHRlcmVk 87694
IHBlcA== 87695
bmVzYw== 87696
LlVwbG9hZA== 87697
c2VtaQ== 87698
eEVD 87699
Jz4iKw== 87700
IGVtYnJ5bw== 87701
IEZpeGVkVXBkYXRl 87702
Q2FzdGxl 87703
Lm1vZGVsbw== 87704
IHBscw== 87705
IGVudmVsb3Blcw== 87706
X3JlbWFpbg== 87707
UXVhcnRlcg== 87708
YWxlcnRWaWV3 87709
X2Zvcm1hdHRlZA== 87710
IGxhc2hlcw== 87711
emVsZg== 87712
aG9tbWU= 87713
LmZsb3dMYXlvdXRQYW5lbA== 87714
YWlycG9ydA== 87715
IE1lbW9yaWVz 87716
IEhFUk8= 87717
IEFzaHRvbg== 87718
IGV4aGliaXRpbmc= 87719
KFNFTEVDVA== 87720
U3VibWlzc2lvbg== 87721
U3R1ZmY= 87722
X3N1bg== 87723
IHBlcsOtb2Rv 87724
IGRlc3ByZQ== 87725
CWVkaXQ= 87726
IER0eXBl 87727
Y2Vzc2l2ZQ== 87728
YWFk 87729
IGRlc2Nvbg== 87730
bmVsbHk= 87731
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 87732
IHNjcmlwdHVyZXM= 87733
IG9uVmlld0NyZWF0ZWQ= 87734
IEVWRQ== 87735
IEJhbGxldA== 87736
O307Cg== 87737
VURP 87738
IFByb2JhYmlsaXR5 87739
cXVpcnJlbA== 87740
Q29udGFpbmluZw== 87741
IFBsYXQ= 87742
6KI= 87743
L2JpdA== 87744
IEpRdWVyeQ== 87745
IHRpZW5lcg== 87746
L2RyaXZlcnM= 87747
IFByZXNpZGVuY3k= 87748
XHVE 87749
IEl2ZQ== 87750
aWVuYQ== 87751
IGh5cGVycw== 87752
IFNwZW5kaW5n 87753
PFc= 87754
IFRIRU1F 87755
IHVzZXJQcm9maWxl 87756
IGFubnVt 87757
cmV0d2VldGVk 87758
IFwnJw== 87759
YnVuZGxlcw== 87760
KCk8Lw== 87761
IEN5bGluZGVy 87762
IG91dGxpZXJz 87763
IGRpc3NlbWluYXRpb24= 87764
L2FwdA== 87765
IE5hdGFzaGE= 87766
IHJlbmRlckl0ZW0= 87767
IENoaXBz 87768
IHJvdW5kdXA= 87769
IGltcHJvdg== 87770
IGNvbW11bmljYXRvcg== 87771
IHNreXBl 87772
TU1N 87773
cmlqaw== 87774
LlBsYWNl 87775
IHBhc2E= 87776
IFNZTkM= 87777
ZW5zaXM= 87778
IEF4ZWw= 87779
ZW7Dp2E= 87780
Z2V0U3RyaW5nRXh0cmE= 87781
YWJpbGl0w6k= 87782
IGVtYWNz 87783
LmdyYXZpdHk= 87784
IGNoZXJpc2g= 87785
IElTU04= 87786
CUpzb24= 87787
dXlv 87788
IHVwdGltZQ== 87789
IHJhbmRvbW5lc3M= 87790
IGxvZnR5 87791
Qm93 87792
Q3JlYXI= 87793
IHRvd2VyaW5n 87794
Y2F0ZWdvcmll 87795
L3Bvd2Vy 87796
L3dlbGNvbWU= 87797
fFI= 87798
IGJhcnJpbmc= 87799
aWRpYQ== 87800
cXVhbQ== 87801
w7pkbw== 87802
ZXhwZXJpbWVudGFs 87803
IGNsYQ== 87804
IGN1cmF0b3I= 87805
cmVhbWJsZQ== 87806
aW5keA== 87807
TExM 87808
IH0pOg== 87809
IGhpc3RvaXJl 87810
c2ltdWxhdGU= 87811
PEFueQ== 87812
IEdsYW0= 87813
IEJhcmc= 87814
VmFsdWVDb2xsZWN0aW9u 87815
IEluc3RpdHV0bw== 87816
QXNTdHJpbmdBc3luYw== 87817
IGFkZWM= 87818
IGZlbGxvd3M= 87819
cGlwZXM= 87820
IFBsYWNlaG9sZGVy 87821
IEtn 87822
IEFsYnVtcw== 87823
ICooKg== 87824
X0dPT0Q= 87825
KSIsDQo= 87826
LlFSZWN0 87827
w6Jt 87828
IH0NDQo= 87829
TWFyc2hhbEFz 87830
QmFjaGVsb3I= 87831
IEJhcmNvZGU= 87832
IFRyYXZlcnNl 87833
IG9kaW8= 87834
LnNldFBhcmVudA== 87835
IHNlbWljb25kdWN0b3I= 87836
QUxMRUw= 87837
IGJhbnF1ZXQ= 87838
IE5ld3NwYXBlcg== 87839
RE9NTm9kZQ== 87840
IE5hdWdodHk= 87841
Rm9ybWF0dGVkTWVzc2FnZQ== 87842
IGRpc3J1cHRpbmc= 87843
5piT 87844
IGxvb2thaGVhZA== 87845
IGdyYXR1aXRlcw== 87846
IGNoZWVzeQ== 87847
IFNQRg== 87848
blA= 87849
IGFyc29u 87850
IGFudGVubmFz 87851
X01JRERMRQ== 87852
X01BTExPQw== 87853
LmdvQmFjaw== 87854
IFByb3Bvc2l0aW9u 87855
IE1pY2hhZWxz 87856
X3Byb29m 87857
INC90LDQudC0 87858
w6R0emxpY2g= 87859
LXJvbGw= 87860
RURB 87861
w6Fuw60= 87862
Z292ZXJubWVudA== 87863
w7Z0dA== 87864
IEVzdGFibGlzaG1lbnQ= 87865
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 87866
X0hJVA== 87867
IEFJTQ== 87868
YWRvbA== 87869
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== 87870
X1JFRkVSRVI= 87871
IGZvcm1hdERhdGU= 87872
dWN0b3Nl 87873
IGRvd25sb2FkZXI= 87874
VGV4dEVkaXQ= 87875
IGRpc2FybQ== 87876
IEhBUFA= 87877
0L7QtNCw 87878
ISkuCgo= 87879
L3Byb2Nlc3M= 87880
IGJyYWluc3Rvcm0= 87881
IE9SSUdJTkFM 87882
LlRhYmxlTmFtZQ== 87883
IEtvc3Rlbmxvc2U= 87884
IGTDqXA= 87885
IElzYWJlbA== 87886
IGFzdHJvbm9tZXJz 87887
UVVJUkVT 87888
OiIt 87889
dXBsb2FkZXI= 87890
Oi8vJQ== 87891
IGFtaXM= 87892
RmlsZVZlcnNpb24= 87893
ICwk 87894
Y29vaw== 87895
LFNJR05BTA== 87896
JywvLw== 87897
IFN1cHByZXNz 87898
IExhdGlub3M= 87899
IHdpdGhob2xk 87900
IG1uZW1vbmlj 87901
X0NZQ0xF 87902
IGhvZA== 87903
IFdvcnNl 87904
ZXJkZQ== 87905
IHR5cGVpZA== 87906
CWV4cG9ydHM= 87907
IGFjaHRlcg== 87908
b3Nhcw== 87909
IGZvb3Rub3Rl 87910
aGFuaQ== 87911
KFBhcmFtZXRlcg== 87912
CVJlbmRlcg== 87913
IFlZU1RBQ0s= 87914
IFhJSQ== 87915
IHNpZGVu 87916
IGFyb3VzYWw= 87917
IE9P 87918
Qml0dGU= 87919
IG5lYXJlcg== 87920
IENpcmN1cw== 87921
IENPTE9SUw== 87922
IHdpZWxkaW5n 87923
LkZpbGVTeXN0ZW0= 87924
IGdyaWxsZQ== 87925
IERvdmVy 87926
CiAgICAgCg== 87927
KGdlb21ldHJ5 87928
IHN0YXBsZXM= 87929
IEFubm91bmNlbWVudA== 87930
IOuyhA== 87931
IGZvcnR1bmF0ZWx5 87932
LlNvbWU= 87933
IG1hbmdhbmVzZQ== 87934
IGludGVydmlld2Vy 87935
WVJP 87936
IGNyeXB0b2dyYXBoeQ== 87937
IGNoYW1icmU= 87938
LnJldHJ5 87939
IGltaXRhdGlvbg== 87940
JGZkYXRh 87941
IGxvdGlvbg== 87942
KGlkZW50aXR5 87943
LnBn 87944
IHByZXN1bXB0aW9u 87945
X1NVUEVS 87946
dm9jYWI= 87947
IFNlbWVzdGVy 87948
IEFiZWw= 87949
X2FwcHJvdmVk 87950
LmNvbXBhdA== 87951
IHdhcnRpbWU= 87952
XV07Cgo= 87953
bHV0 87954
X0FjY291bnQ= 87955
Pygn 87956
Y29vcA== 87957
L3JlZw== 87958
LnNldFRv 87959
aXRlc3Nl 87960
IEh5ZHJh 87961
Qmlucw== 87962
Y2FkZW5h 87963
Pi8nLA== 87964
Llwi 87965
CWFjY291bnQ= 87966
IERhaGw= 87967
IGRyb3du 87968
IGdhdXNz 87969
IHRyYW5zZm9ybWVycw== 87970
IE1ldGFsbGlj 87971
IEhlcmJhbA== 87972
YWNocw== 87973
X2J1dA== 87974
IGl0ZXJhdGl2ZQ== 87975
IEZyZWVk 87976
anVy 87977
fE0= 87978
O2JyZWFr 87979
X0ZG 87980
KGRvd25sb2Fk 87981
4buDbg== 87982
LmNoZWNrU2VsZlBlcm1pc3Npb24= 87983
TkVUV09SSw== 87984
OmZsZXg= 87985
IENUTA== 87986
IEFyYg== 87987
IFByb2R1Y2U= 87988
CXN5bmNocm9uaXplZA== 87989
4oCcT2g= 87990
LmRhdGF0YWJsZXM= 87991
IGNvbmVz 87992
RMOp 87993
0YbQsA== 87994
QWxn 87995
IGZ1bmNpb25h 87996
IFViaXNvZnQ= 87997
IGdlb3BvbGl0aWNhbA== 87998
IHNpZWh0 87999
IGh5ZHJhdGlvbg== 88000
c3Rocm91Z2g= 88001
IER1ZGxleQ== 88002
YXrEgw== 88003
IHRheGluZw== 88004
INC30LDQutCw0Lc= 88005
X0FTTQ== 88006
TmV1dHJhbA== 88007
dHJhZGl0aW9uYWw= 88008
UGxheWFibGU= 88009
IHNwYWdoZXR0aQ== 88010
IGlDbG91ZA== 88011
IERheXRvbmE= 88012
IHdlcmRl 88013
IEFOVA== 88014
IFByb24= 88015
IFN0YXRpb25z 88016
IGF0dGVzdA== 88017
IGZ1bGxlcg== 88018
IG5vdmFtZW50ZQ== 88019
XVxc 88020
Y2Nl 88021
KGRlY2s= 88022
L2F5dXNobWFu 88023
aWdzYXc= 88024
IGFkdWx0ZXM= 88025
IHRlcnJl 88026
Lk9yZGVycw== 88027
CXByb3BlcnRpZXM= 88028
RElH 88029
IFRJTUVT 88030
ImluZGljZXM= 88031
ITw= 88032
TW9uYWQ= 88033
IG5vbmV4aXN0ZW50 88034
IEF0bGFudGlz 88035
IGdyaWV2YW5jZXM= 88036
dXJlbmNl 88037
IElQUFJPVE8= 88038
4pmA4pmA4pmA4pmA 88039
IGVtcGxlYWRv 88040
INmD 88041
Lk1vdmVOZXh0 88042
IElzbw== 88043
YmVhdXRpZnVs 88044
IHNvbHVibGU= 88045
IHNsdWdnaXNo 88046
IGRpZmZz 88047
X09CUw== 88048
eG1pbg== 88049
IHR1bWJsZQ== 88050
IFVuYXJ5 88051
IHppcGZpbGU= 88052
IHN2ZW5za2E= 88053
ZXJsYW5k 88054
L2N1cGVydGlubw== 88055
CXNjcmlwdA== 88056
aXNjaGVz 88057
TW9kaWZpZWREYXRl 88058
IHZleWE= 88059
IGRldGVybWluYW50 88060
IEdvcmdlb3Vz 88061
Z2Jvb2xlYW4= 88062
IExPRA== 88063
ZGNj 88064
c2NlbmVz 88065
IFRTUk1MUw== 88066
KFR5cGVFcnJvcg== 88067
IGNhbW91ZmxhZ2U= 88068
IGJ1cmdl 88069
VGhlbQ== 88070
LkFzc2lnbg== 88071
IGxhc3RJbmRleA== 88072
X3NwaGVyZQ== 88073
X0FCSQ== 88074
w4Q= 88075
aWxhZ2U= 88076
XHhmZg== 88077
IGtheWFr 88078
IGZpeno= 88079
dWl0ZW4= 88080
LlNob3VsZEJl 88081
IGh0b25s 88082
IFBldGl0ZQ== 88083
IGhlYWxz 88084
IE9zYWth 88085
Tko= 88086
SW5QYXJhbWV0ZXI= 88087
IEJpcmNo 88088
IGNvbW1lbnRhaXJl 88089
IFNpZWdl 88090
IGtleWNvZGU= 88091
LWludGVuc2l2ZQ== 88092
cHJvcFR5cGVz 88093
RXhwb3J0cw== 88094
IGJ1dHRvblRleHQ= 88095
IEdvZHppbGxh 88096
LkV4Y2hhbmdl 88097
IHVuZGVyc3RhbmRhYmx5 88098
IGFjY29yZGlvbg== 88099
IHLDqWdpb24= 88100
IG1hcmtlZGx5 88101
YW5vb2dh 88102
IGNvbnRyYXQ= 88103
X2xpZnQ= 88104
W2RhdGU= 88105
IHNjb3Ju 88106
IERhdGFNYW5hZ2Vy 88107
4oCm4oCmCgo= 88108
X0NPTVBJTEVS 88109
IENsYXc= 88110
b2RhdGU= 88111
IHVuZGVyYWdl 88112
IEltcGxlbWVudGVk 88113
Q2xp 88114
S2Fs 88115
UHJvZHVjdG9z 88116
IGVuZmVybWVk 88117
w6lpcw== 88118
IGRpc2NyZWRpdA== 88119
IFNhbW9h 88120
IFByZXNlbnRlZA== 88121
IGNpbmVtYXQ= 88122
XEFjdGl2ZUZvcm0= 88123
IGZlcm4= 88124
IFByaW1lcg== 88125
5oKo 88126
Z2VyZQ== 88127
IGlsbHVzaW9ucw== 88128
bm90YXRlZA== 88129
IHBvag== 88130
IG1vZGVsTmFtZQ== 88131
IFBNQw== 88132
IGRlY2Fk 88133
IGZvcmVzdHJ5 88134
dm9pZQ== 88135
Li4uCgoKCgoK 88136
IH19Owo= 88137
IHRva2VuSWQ= 88138
YW1tdQ== 88139
IFBlcnNvbmVu 88140
IFZFUkJPU0U= 88141
IHBhdHJvbHM= 88142
IGFudGlj 88143
X2RlZXA= 88144
ZWdlbmQ= 88145
IFNldFByb3BlcnR5 88146
IEdhcmV0aA== 88147
IE1BUw== 88148
LnJlc3RhdXJhbnQ= 88149
IEhlYXZlbmx5 88150
aWVkbw== 88151
X2xlYWQ= 88152
IEZ1amk= 88153
UU4= 88154
TWFzc2FnZQ== 88155
IHBhcmFtTWFw 88156
IGNpdGE= 88157
X1NwZWVk 88158
KGJib3g= 88159
IEpVTA== 88160
4oCZYW4= 88161
IG1lbnRl 88162
IFNob3djYXNl 88163
IENTSQ== 88164
PlR5cGU= 88165
LlNu 88166
b3R5cGljYWw= 88167
IEZhbGxvbg== 88168
LlVUQw== 88169
IHByZWRhdG9yeQ== 88170
IG9yZ2FuaXNpbmc= 88171
Y29sZA== 88172
IHBhcnNlcnM= 88173
dWllbg== 88174
IGNvbXBpbGVycw== 88175
IFs9 88176
IEV1cmFz 88177
TU9TVA== 88178
CiAgICAKCg== 88179
UkFS 88180
LlNjaGVkdWxl 88181
Lm9wZXJhdGlvbnM= 88182
dWZz 88183
w7FhbmE= 88184
IHByZW9jdXA= 88185
LXRyZWF0ZWQ= 88186
LmdldFdvcmxk 88187
Lic6 88188
IEFUSA== 88189
OnN0YXJ0 88190
IGF1dG9pbW11bmU= 88191
IEJsYWNramFjaw== 88192
X0ZJTklTSA== 88193
KGZsb29y 88194
IHdyZWNrYWdl 88195
VVJU 88196
LkJyYW5k 88197
cGFpcw== 88198
Y2ltYWw= 88199
Y2nDsw== 88200
TkZM 88201
LWVxdWlwcGVk 88202
LmNvbnRlbnRPZmZzZXQ= 88203
IG92ZXJjcm93 88204
IFRa 88205
IG9kb20= 88206
IENlbGx1bGFy 88207
CXdyaXRlbA== 88208
KGlucHV0U3RyZWFt 88209
KHByZWY= 88210
LXN0b2Nr 88211
IERlbmllZA== 88212
LXN1cHBvcnRlZA== 88213
ICcoKA== 88214
YW5jb2Rl 88215
LmZpbHRlcmVk 88216
RGltcw== 88217
IGpi 88218
CXByaWNl 88219
IEBACg== 88220
bm9jaw== 88221
Lm9wZW5Db25uZWN0aW9u 88222
IGFudGljcw== 88223
cmVzdWx0Q29kZQ== 88224
UGxheWJhY2s= 88225
IGNlbHVsYXI= 88226
IEZPT0Q= 88227
IFBvZGVzdGE= 88228
PW1lc3NhZ2U= 88229
LnBlcmZvcm1hbmNl 88230
IERtaXRyeQ== 88231
YWx0aW1vcmU= 88232
IHBsYXRlZA== 88233
IHR1YmVyY3Vsb3Npcw== 88234
X2dlbQ== 88235
KEVkaXRvcg== 88236
VHBs 88237
IGNyaWFu 88238
IGJ1ZmZlcmluZw== 88239
6KeG6aKR 88240
ICcpCgo= 88241
VnU= 88242
TWF0aGY= 88243
IHRpbWVsaW5lcw== 88244
IFRhdGE= 88245
L3Bw 88246
IHBsYXN0 88247
IFRydWx5 88248
IFN1YnN0aXR1dGU= 88249
a2llbQ== 88250
a2Fhcg== 88251
IFZpc2g= 88252
J2h1aQ== 88253
IE1hZ2ljaw== 88254
L0xheW91dA== 88255
dXJhbsOnYQ== 88256
X3R0bA== 88257
SGlkZUluSW5zcGVjdG9y 88258
LmtleXdvcmRz 88259
TGlzdE1vZGVs 88260
X1N1Y2Nlc3M= 88261
aWxpaGFu 88262
IGJsYWNrbWFpbA== 88263
IFNlcmJpYW4= 88264
cXVlbGxl 88265
IER5c2Z1bmN0aW9u 88266
IFByZXBhcmVk 88267
IGpNZW51SXRlbQ== 88268
IGxvZ2luVXNlcg== 88269
c2V0YXR0cg== 88270
LkNS 88271
X2xjZA== 88272
IGJ5dGVzUmVhZA== 88273
IGNkZWNs 88274
IHRvd25zaGlw 88275
cGVr 88276
aWprc3RyYQ== 88277
IG1heGltaXppbmc= 88278
LnByb3ZpZGVycw== 88279
SW52ZXN0aWdhdG9ycw== 88280
IHNob290b3V0 88281
IGFpcnNwYWNl 88282
dG9vbGJveA== 88283
UVdpZGdldA== 88284
PXBr 88285
IHBvcnRlcg== 88286
IFByZWRhdG9y 88287
IFN1bnJpc2U= 88288
IGRldm91cg== 88289
CVVJbnQ= 88290
aXR0YW5jZQ== 88291
U1BB 88292
X2VuZGlhbg== 88293
IE5hZ2Fy 88294
dmVuaWRh 88295
L29wdA== 88296
QnlFbWFpbA== 88297
IFBoeXNpY2lhbg== 88298
XEQ= 88299
INC80Ys= 88300
WUVBUg== 88301
SUND 88302
L3BvcnRmb2xpbw== 88303
LmV4ZWN1dG9y 88304
dWRlbQ== 88305
RmFsbGJhY2s= 88306
dWR1 88307
U2xpbQ== 88308
w7Nsbg== 88309
Xnst 88310
YW5za2U= 88311
IGh1c3RsZQ== 88312
IElyZW5l 88313
IGFieXNz 88314
IFJvYmJpbnM= 88315
IGluZGV4ZXI= 88316
U2F1ZGk= 88317
IHdob2xlc29tZQ== 88318
LXNsb3Q= 88319
IFRlY24= 88320
IHBhZ2VUaXRsZQ== 88321
IGNvbnRlc3RhbnQ= 88322
aWNvcHRlcg== 88323
IGNvdXJzZUlk 88324
Q2hy 88325
IEFYSVM= 88326
Zm9yZGVy 88327
X1RVTg== 88328
VHJhZmZpYw== 88329
IHR5cGVhbGlhcw== 88330
IGRhcmY= 88331
LXVyaQ== 88332
dHN4 88333
LmRlc3Ryb3lBbGxXaW5kb3dz 88334
IGl0ZXJhdGluZw== 88335
UmVhY3Rpb24= 88336
CUFN 88337
IGN1ZW50 88338
LWNvb2tpZQ== 88339
IGZsYXZvcmVk 88340
c3RvaQ== 88341
IGZsaXJ0aW5n 88342
44CL77yM 88343
4KSu 88344
X0NSWVBUTw== 88345
W3Rva2Vu 88346
IHByb2xldGFyaWF0 88347
LuKAmeKAnQoK 88348
CWRj 88349
LlN0cmluZ1Zhcg== 88350
IGxlZ2l0aW1hdGVseQ== 88351
X2RlY29yYXRvcg== 88352
TG9ja2Vy 88353
IEplbm5h 88354
VVJJTkc= 88355
5YaN 88356
X1ByaW50Zg== 88357
QVRPUlk= 88358
LWRpc3Q= 88359
ICIuIik7Cg== 88360
LnF1aXo= 88361
IGlyZ2VuZA== 88362
LWxlYWd1ZQ== 88363
Z2llbg== 88364
IFByb2R1Y2Vk 88365
SGVsbWV0 88366
5Y+v6IO9 88367
UGxhdGZvcm1z 88368
IFJlc291cmNlTWFuYWdlcg== 88369
IEh1bmRyZWQ= 88370
cm9tZXRlcg== 88371
ZW5na2Fw 88372
SG9w 88373
IHBvc3N1aQ== 88374
QmVmb3JlRWFjaA== 88375
IENISw== 88376
IElNUw== 88377
VGlja2Vy 88378
IGdyaW5uZWQ= 88379
LmdldEFz 88380
IGltcG9zZXM= 88381
XSIp 88382
Rm9yZ2V0 88383
L2ltcG9ydA== 88384
IGluamVjdGluZw== 88385
TG92 88386
IGFicmls 88387
X3NsaWNlcw== 88388
LWNvbW0= 88389
IFBST0RVQ1RT 88390
IE9hc2lz 88391
IMO4bnM= 88392
IFJlamVjdA== 88393
IHJlZ3VsYXJpemF0aW9u 88394
aW1wbGljaXRseQ== 88395
bmF6 88396
U3BlY2lmaWVy 88397
IGltcG92ZXJpc2hlZA== 88398
5po= 88399
IG5vbWluYXRl 88400
IE9WRVJSSURF 88401
IEJhbmRz 88402
ZXRoeXN0 88403
IEppYW4= 88404
IG5ld2NvbWVy 88405
IE5hYg== 88406
IGVicA== 88407
IFBhZ2Vy 88408
IEh1bWI= 88409
L2Nj 88410
IGV4cMOpcmllbmNl 88411
dWRnaW5n 88412
TWI= 88413
ZGJ1Zg== 88414
Jy8+ 88415
IG9ja3PDpQ== 88416
IGpkYmNUZW1wbGF0ZQ== 88417
IFNISVBQSU5H 88418
IGludGVyZGlzY2lwbGluYXJ5 88419
IENFVA== 88420
YXV0b3A= 88421
LXN5bWJvbA== 88422
YXZlYw== 88423
IGNvbXBvdW5kZWQ= 88424
IENodW5n 88425
X1NNUw== 88426
LWll 88427
IFByb3NlY3V0b3I= 88428
IExlaWE= 88429
IE1hbmRlbGE= 88430
U2luZ2xlT3JEZWZhdWx0 88431
CVJFUVVJUkU= 88432
YXRvd24= 88433
dXJyZXRz 88434
5paH5a2X 88435
IENPTlRFWFQ= 88436
RU5TSVRZ 88437
IGluc3VyZ2VudHM= 88438
IERpYXM= 88439
LnN0YXRpb24= 88440
IEtsYW4= 88441
X21lYXN1cmVtZW50 88442
X1FNQVJL 88443
IHN0b2k= 88444
TU9PVEg= 88445
PicpOwoK 88446
IGluZ2VzdGlvbg== 88447
IEdsb3c= 88448
dXRjaGVz 88449
YmVhcmluZw== 88450
LnRvYXN0cg== 88451
IGZyYWdtZW50YXRpb24= 88452
aXBwbw== 88453
X1NFR01FTlQ= 88454
IHN0dW1ibGluZw== 88455
aW1hcg== 88456
c3Rpbmlhbg== 88457
XygpCg== 88458
IG1vdGl2YXRpb25hbA== 88459
TGlzdEl0ZW1UZXh0 88460
IHdvbWVucw== 88461
T3BlbkhlbHBlcg== 88462
aWJhbmQ= 88463
IGJ0blNhdmU= 88464
IGluY29ycG9yYXRpb24= 88465
IGRvY3VtZW50YXJpZXM= 88466
aWNs 88467
IE5k 88468
IEFyYQ== 88469
IHF1YWtl 88470
IEN1bW1pbmdz 88471
aHRt 88472
YXN0ZXJlZA== 88473
LmR0cA== 88474
IGNvbmRvcw== 88475
IEd1bmRhbQ== 88476
L2Rpc2FibGU= 88477
aHlkcmF0ZQ== 88478
IEVwb2No 88479
IG5hdGlvbmFsaXN0cw== 88480
IGRldmVy 88481
LHJlcXVlc3Q= 88482
LmdldFZlcnNpb24= 88483
Q0VMRVI= 88484
IFNhbGFo 88485
IG1vdGU= 88486
IE1lbGxvbg== 88487
c3BvdGlmeQ== 88488
IG9yaWdlbg== 88489
IG5hbGU= 88490
IGFkdmVyc2FyaWVz 88491
LkpUYWJsZQ== 88492
Zm9yY2VtZW50cw== 88493
IFJldHJlYXQ= 88494
IGFyY2hpdm9z 88495
IHNsYXNoZXM= 88496
Lk1vdXNlRG93bg== 88497
PDo6 88498
X3Rocm91Z2g= 88499
QWxhbWF0 88500
LmJsdXI= 88501
X2ZpbmRlcg== 88502
IGFsbHVyZQ== 88503
UGVyaXBoZXJhbA== 88504
X3Bhc3NlZA== 88505
X2NoYWxsZW5nZQ== 88506
IFBhbGVv 88507
SU5J 88508
RGlyZQ== 88509
c3BoZXJl 88510
KENPTE9S 88511
YWNrZXJz 88512
IEdseXBo 88513
KGludGVnZXI= 88514
INC60L4= 88515
IFJlbGV2YW50 88516
INm+ 88517
IGF0YXM= 88518
X3ByaW0= 88519
IE1VVA== 88520
bmluZ2Vy 88521
YXV0b3JlbGVhc2Vwb29s 88522
PV9f 88523
IFNpZ25pbmc= 88524
7ZWY7KeA 88525
IHVjeg== 88526
RWRpdGluZ1N0eWxl 88527
IEhlYXRlcg== 88528
IEZhaXJmaWVsZA== 88529
IEJlYXJk 88530
LGVu 88531
dXNhdA== 88532
KCcuJw== 88533
L3N0cmVhbQ== 88534
IGdldFN1cHBvcnRGcmFnbWVudE1hbmFnZXI= 88535
IG1DdXJyZW50 88536
X1NUQVRFUw== 88537
X3dpbmQ= 88538
Q0hBUFRFUg== 88539
cHJvYmFiaWxpdHk= 88540
KGFubm90YXRpb24= 88541
ICovDQoNCg0K 88542
LlVuaXF1ZQ== 88543
LkFkZEZpZWxk 88544
SGlnaGVy 88545
LmRpZ2l0YWw= 88546
LmV4cGVyaW1lbnRhbA== 88547
YXds 88548
IHdoZW5jZQ== 88549
ZXJub3Rl 88550
U0FNRQ== 88551
Lmlwdg== 88552
dG9CZUZhbHN5 88553
YnJhbmU= 88554
X2NhdGVnb3JpY2Fs 88555
QXVyYQ== 88556
IFR5cGVTY3JpcHQ= 88557
IHNwb250YW5lb3VzbHk= 88558
bG9uZ2xlZnRyaWdodGFycm93 88559
aWthbA== 88560
X1RPRE8= 88561
IFd5YXR0 88562
IGZsdXJyeQ== 88563
ZGlm 88564
IHJlY2tvbg== 88565
IENvcm91dGluZQ== 88566
CWZmbHVzaA== 88567
IHdvcmtmbG93cw== 88568
IEZBTUlMWQ== 88569
c3ByaXRlcw== 88570
X1dvcms= 88571
LkdldFNpemU= 88572
IENvbnN0cmFpbnRz 88573
QmlnSW50 88574
aXRpYQ== 88575
Z2V0Um93 88576
IGR1aw== 88577
IGlzTmV3 88578
IFByb2R1a3Rl 88579
eENC 88580
aXNpZXJ0 88581
ZnVuY3M= 88582
IEFkZW3DoXM= 88583
QmluZGluZ1V0aWw= 88584
b21waWxlcg== 88585
LWludg== 88586
IGNoYW50cw== 88587
IGVudHNwcmVjaA== 88588
KHRp 88589
X0lB 88590
0L7RgNC00LjQvQ== 88591
IEZBTEw= 88592
aW1k 88593
IGxvY2FsdGltZQ== 88594
PExpbms= 88595
0L3QuNC60LA= 88596
IHByb2ZpbGVy 88597
IGdldFVzZXJJZA== 88598
IFBoeXNpY2lhbnM= 88599
UkFE 88600
IGhtbQ== 88601
IE5lc3M= 88602
IFRlbXBv 88603
IEpU 88604
IHJlY29ubmFpc3NhbmNl 88605
PHRyYW5zbGF0aW9u 88606
IGVudGljaW5n 88607
IHF1YWludA== 88608
IGNvdXBl 88609
X18nLA== 88610
TkFTREFR 88611
INC30L3QsNGH0LXQvdC40Y8= 88612
UEVSQVRVUkU= 88613
IFBhaQ== 88614
IHRldGFz 88615
Q0FT 88616
SVJST1I= 88617
IGtj 88618
IHRvdGU= 88619
IGRyYXdiYWNr 88620
IHBhcnNsZXk= 88621
CUZ1bmN0aW9u 88622
aXN0eQ== 88623
IERVUA== 88624
X0NJRA== 88625
X1VU 88626
IGtzaQ== 88627
IGrDpA== 88628
PXZhbA== 88629
LnRvSGV4U3RyaW5n 88630
5p2/ 88631
LmNsaXBz 88632
IG9mZmVu 88633
IFRFQ0hOTw== 88634
IFNoYW1l 88635
IHN1c2NlcHRpYmlsaXR5 88636
IHN0dXBpZGl0eQ== 88637
IFRyb3V0 88638
IENoYW1wYWduZQ== 88639
ZXRoeWxlbmU= 88640
IGJlZ3I= 88641
X3JlZGlz 88642
WWVw 88643
IGhhbnM= 88644
IERlZmVuZGFudA== 88645
IGRhc2hlcw== 88646
IHVzZXJUeXBl 88647
X2RhdG9z 88648
IHVuaWM= 88649
a3JpdA== 88650
IHJlY2VwdGl2ZQ== 88651
IEdyZXQ= 88652
KG1i 88653
IEluZmx1 88654
w6tu 88655
fS8+ 88656
aW50ZXJlc3Rpbmc= 88657
VVRVUkU= 88658
IGltYWdlU2l6ZQ== 88659
IGdyZA== 88660
IGFic29s 88661
L2Zh 88662
LmdyYWRpZW50 88663
IHd5c3Q= 88664
XX0+Cg== 88665
bGVnYXRpb24= 88666
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCg== 88667
IEJsZW5kZXI= 88668
X18pOw== 88669
IHVzZXJFbWFpbA== 88670
IFBoYXI= 88671
bGVoZW0= 88672
KSk/ 88673
KFJldHVybg== 88674
ZWdyYQ== 88675
dXRpdm8= 88676
IGFwcGVuZGl4 88677
IFJUVkY= 88678
IFNFQUw= 88679
IGd5cHN1bQ== 88680
X0FyZw== 88681
IGlsbHVtaW5hdGU= 88682
IFNjaGlmZg== 88683
cXVpbA== 88684
LkNvbWJvQm94U3R5bGU= 88685
J10pKQoK 88686
IGFsdGVycw== 88687
IHByYWN0aXNl 88688
IHVzdA== 88689
IERpbWl0 88690
LVJlZ3VsYXI= 88691
IGNyZWVwaW5n 88692
IENhbmFkaWVucw== 88693
IHJldG9ybg== 88694
LWNvcm5lcg== 88695
ICJdIg== 88696
KHJuZw== 88697
IGNhbmFkaWFu 88698
IHBvc3Rv 88699
LmFzc2VydEFsbW9zdEVxdWFs 88700
IEJlY2t5 88701
L3Nz 88702
IGhvc3RhZ2Vz 88703
IGJpb2xvZ2lzdA== 88704
IEhvc3BpdGFsaXR5 88705
IEVsaw== 88706
IEJhcmFuZw== 88707
66qp 88708
YmJiYg== 88709
LnRlYWNoZXI= 88710
IHRlcm1pbmF0ZXM= 88711
IGlzRXJyb3I= 88712
IEtlbmRyaWNr 88713
ZW5kYXJz 88714
IFN1Z2dlc3Rpb25z 88715
Q2Vs 88716
IFNlcnZpY2VQcm92aWRlcg== 88717
IFdpY2hpdGE= 88718
XSkpLAo= 88719
IGhlYWRsaWdodHM= 88720
X3ZlbnRh 88721
QU5USQ== 88722
IHByb3BpZWRhZA== 88723
IGVubGlzdA== 88724
CW9yZw== 88725
TWVzc2VuZ2Vy 88726
LmxhbmQ= 88727
IicK 88728
YXNwZXJz 88729
IHRlcnM= 88730
ZmlsdA== 88731
IEZ1bmN0b3I= 88732
IHNsaW5n 88733
X0JMSw== 88734
LUV1cm9wZWFu 88735
IEFjaGlsbGVz 88736
XEVudGl0aWVz 88737
LkRpc3BsYXlNZW1iZXI= 88738
IHJlZGV2ZWxvcG1lbnQ= 88739
CWhlbHA= 88740
IFsnLQ== 88741
IEp1bGllbg== 88742
PUludGVnZXI= 88743
LmlzTnVsbE9yRW1wdHk= 88744
IFdvVw== 88745
UGF5bWVudHM= 88746
KGhkcg== 88747
IGJhamE= 88748
IEpDb21ib0JveA== 88749
RmlyZWZveA== 88750
IGNvbmdsb21lcg== 88751
X2N1c3Q= 88752
JCIpCg== 88753
IG11dGFudHM= 88754
TWFnbg== 88755
IE1QSA== 88756
e18= 88757
X3dhcm5pbmdz 88758
IGdhc3Q= 88759
THQ= 88760
IHRyYWluYWJsZQ== 88761
VHJhZGVtYXJr 88762
QkFTSA== 88763
IEVDUw== 88764
UmV0cmlldmU= 88765
J08= 88766
IGluaXRpYWxpc2Vk 88767
IGNoZW1pbg== 88768
LlRyYW5zcG9ydA== 88769
IFlpbmc= 88770
YXNpb25z 88771
IG1vYw== 88772
X0xPR0dFUg== 88773
R0VOQ1k= 88774
IEJsb2dnZXI= 88775
ICIpIgo= 88776
UEVuZA== 88777
IGFjY29tcGFnbg== 88778
LkNPREU= 88779
IG1MaXN0 88780
LWVkdWNhdGVk 88781
LC8= 88782
IE1lcnJpbGw= 88783
L3Blb3BsZQ== 88784
LicnJwo= 88785
X3RvZG8= 88786
IGfDvG4= 88787
X0ZVTExTQ1JFRU4= 88788
LmNsZWFudXA= 88789
VW5tYXJzaGFsbGVy 88790
LlN1cHByZXNzTGludA== 88791
IG9uc2xhdWdodA== 88792
IE1hcnNlaWxsZQ== 88793
ZWRpYXRvcg== 88794
X0VOVFJJRVM= 88795
LGRlZmF1bHQ= 88796
bWVsZHVuZw== 88797
ZWxmdGg= 88798
IEdvdmVybm1lbnRz 88799
IHBsZWFz 88800
b3R0cw== 88801
IHBsdW5kZXI= 88802
cmVhZE9ubHk= 88803
IGR5c2Z1bmN0aW9uYWw= 88804
J05laWxs 88805
IHVubG9hZGVk 88806
IHNxdWVlemluZw== 88807
IGRvb2Q= 88808
LmFkZERhdGE= 88809
IEFzaQ== 88810
TUVT 88811
KHNjaGVkdWxl 88812
IGFkdmVudHVyZXJz 88813
ZXhwZWN0RXhjZXB0aW9u 88814
IH19Pns= 88815
Q0xT 88816
IHJlY2hlcg== 88817
IGRlcm5pw6hyZQ== 88818
LkRldGFpbHM= 88819
IHJhbmRvbU51bWJlcg== 88820
IGlhcg== 88821
IExhbmdl 88822
ZXdl 88823
IEVtaWw= 88824
IGFkdmVydHM= 88825
IGRyYW1hcw== 88826
IEtvbW0= 88827
ICAJCQkJ 88828
X1Rlc3RDYXNl 88829
IENsYXJlbmNl 88830
0LXQvdGC0LA= 88831
dG91cHBlcg== 88832
Lm9uU3VibWl0 88833
Y2Fh 88834
X0FMQVJN 88835
KikKCg== 88836
IOuzgOqyvQ== 88837
LlByaXZhdGU= 88838
IHNreWxpbmU= 88839
UkFJTg== 88840
KGN1cmw= 88841
b3NpdGU= 88842
SWdub3Jpbmc= 88843
IHZ6 88844
IHZlZGVyZQ== 88845
IE9TWA== 88846
YmFuYW5h 88847
IG1ldGFt 88848
IHRyYW5zbGF0ZVk= 88849
IE1jR3I= 88850
4oCZYWNj 88851
5Lul5LiL 88852
IHNwaXJpdHVhbGx5 88853
KGVuYWJsZWQ= 88854
IHJlc3RvcmVz 88855
IGJ0bkNhbmNlbA== 88856
dmFuaXNoZWQ= 88857
IE51ZXZv 88858
U2FsdmFy 88859
Y2FmZmU= 88860
IG1hc3RlcmluZw== 88861
aWRkbGVk 88862
LmlzZGlnaXQ= 88863
IGdyYXZ5 88864
YWdlZExpc3Q= 88865
XFJlc291cmNlcw== 88866
IGRvd25mYWxs 88867
LlBhc3M= 88868
IGFsdGlqZA== 88869
IHBpenphcw== 88870
IH0pKQ== 88871
cGVybXM= 88872
aWdodG9u 88873
IHJlcGVsbA== 88874
ICcnKSw= 88875
Lm5vcm1hbGl6ZWQ= 88876
IG1hcmNoZXM= 88877
CXJlc29sdmU= 88878
Q2hpbGRTY3JvbGxWaWV3 88879
IEluc3RpdHV0aW9ucw== 88880
QXR0ZW5kYW5jZQ== 88881
bHNl 88882
ZXJkZW0= 88883
LmdldElucHV0 88884
SGFzQmVlbg== 88885
YXBldXRpY3M= 88886
ICpc 88887
IFJpdHVhbA== 88888
X0xT 88889
IHNwb3RpZnk= 88890
IHNww6R0ZXI= 88891
IFRodW1ibmFpbA== 88892
KGNlcnQ= 88893
IGdldFJlc291cmNl 88894
X3Bsb3Rz 88895
IHN0YWluaW5n 88896
YWRqdXN0ZWQ= 88897
INep 88898
RGl2RWxlbWVudA== 88899
IFRUQw== 88900
IGFwcm92ZQ== 88901
LnZpZXdlcg== 88902
fD0= 88903
Z2V0U291cmNl 88904
55S16K+d 88905
X1RC 88906
X2JpbGxpbmc= 88907
LUxpZmU= 88908
IHBzeWNoZQ== 88909
IHRhYlBhZ2U= 88910
IEluZmVjdA== 88911
eGZmZg== 88912
X2hpZA== 88913
IGFwb2NhbHlwc2U= 88914
IE5GUw== 88915
IElURVI= 88916
V2luZG93U2l6ZQ== 88917
aGVpdHM= 88918
IGluY3JlbWVudGVk 88919
IEJyYXk= 88920
ZW5lZ3Jv 88921
IGFsbW9uZHM= 88922
WVBSRQ== 88923
Tm9ybWFsaXpl 88924
4oCcV2VsbA== 88925
IEFwaUNvbnRyb2xsZXI= 88926
W1VuaXQ= 88927
R2VucmVz 88928
IE5leA== 88929
IExORw== 88930
IGZvcmVnb2luZw== 88931
IHRlbmRvbg== 88932
IEhw 88933
Q291bmNpbA== 88934
IFNhdWRpcw== 88935
IERlemU= 88936
IHNjcmFwZWQ= 88937
IGJvdHRsZW5lY2s= 88938
IE9ybg== 88939
IHVubWFubmVk 88940
IGludm9raW5nU3RhdGU= 88941
IEV4b2R1cw== 88942
X0FUT01JQw== 88943
U3ViTWVudQ== 88944
X2NvbXByZXNz 88945
Iy4= 88946
RHJ2 88947
LnB1c2hCdXR0b24= 88948
IHN1aXRjYXNl 88949
b3NzZWQ= 88950
Yml0cmFyeQ== 88951
U25pcHBldA== 88952
IEVwaWRlbWk= 88953
RGlzYWxsb3c= 88954
X0NISw== 88955
IHZlcmlmaWVz 88956
IENhdGFseXN0 88957
4oCUZnJvbQ== 88958
IGNvbnRhbWluYW50cw== 88959
Sm9obm55 88960
KGZpbA== 88961
IGRlcmVu 88962
IG91dGNyeQ== 88963
IEpvaGFubg== 88964
PFRhZw== 88965
X3Nhbg== 88966
IHN0ZGRldg== 88967
IHBhcmFseXplZA== 88968
IExleHVz 88969
b3NhdGU= 88970
IENoYXJzZXQ= 88971
IFJlYWx0 88972
PT8iLA== 88973
KERlZmF1bHQ= 88974
IFRyZWFzdXJlcg== 88975
RWluZQ== 88976
IHVudHJ1ZQ== 88977
IGZpbmFuemk= 88978
IGJlaGF2aW91cmFs 88979
IG5pcHBsZQ== 88980
IFJhZGljYWw= 88981
IFBheg== 88982
IE1haXNvbg== 88983
LWVtcGxveWVk 88984
IHdlcmVsZA== 88985
IGpvcw== 88986
IERpZWQ= 88987
ZW50cmVwcmlzZQ== 88988
JHJvd3M= 88989
IHNwb29m 88990
IMK7Lg== 88991
IGtleXBvaW50cw== 88992
IGN1cGNha2Vz 88993
IHt9KTsKCg== 88994
Y2hpbmU= 88995
4oCL4oCL 88996
LExPQ0FUSU9O 88997
IHBseXdvb2Q= 88998
IG1hZ2c= 88999
IFJhbw== 89000
IERQUg== 89001
IGVib29rcw== 89002
KXNpemU= 89003
IHNwZWNpYWxpc2Vk 89004
I2Fl 89005
IG1pY2hhZWw= 89006
IFNURE9VVA== 89007
IFBlbGw= 89008
QU1FUkE= 89009
YW5nZWxv 89010
IGluZ2lu 89011
IG1BdXRo 89012
IGxlZ2FsaXpl 89013
IEN1YW5kbw== 89014
IGNlcnRv 89015
IGxpdHJlcw== 89016
IEV4dHJhcw== 89017
U0hPUlQ= 89018
IHByZW1hdHVyZWx5 89019
IFNlbWFwaG9yZQ== 89020
SEVO 89021
IGFtcGhpYg== 89022
IGjDqQ== 89023
RXhpdGluZw== 89024
ZXVpbGxleg== 89025
IFRNUHJv 89026
LnByZWZlcmVuY2Vz 89027
LmdldEluZm8= 89028
w6l0aWNh 89029
IiIiLg== 89030
Lm5ld0FycmF5TGlzdA== 89031
IGtyb24= 89032
IEJMTA== 89033
Y2xpbmU= 89034
X2di 89035
IFRvbWFz 89036
cHJvYmFudGU= 89037
SVRJT05BTA== 89038
4buRaQ== 89039
IExvZA== 89040
SXNu 89041
LHsK 89042
IGtvbW11bg== 89043
d2R4 89044
Z2Vub21l 89045
6YCj 89046
dG9IYXZlTGVuZ3Ro 89047
J0U= 89048
IHDDumJsaWNh 89049
IERldGVjdGVk 89050
IF8KCg== 89051
0YzRjg== 89052
K1M= 89053
Y2xvdGg= 89054
Um90b3I= 89055
Lm51bWVybw== 89056
X3N0YW5k 89057
R0ND 89058
6rU= 89059
X3Zw 89060
X0ZBUg== 89061
QWhlYWQ= 89062
e31c 89063
KGNvcnJlY3Q= 89064
ImNyeXB0bw== 89065
bW9kdWxv 89066
X1VUSUxT 89067
LlZhcg== 89068
LW1lbg== 89069
IHZlbmlhbQ== 89070
IE1jQ29ybQ== 89071
Z2V0TG9jYXRpb24= 89072
W2NvZGU= 89073
JWY= 89074
IGRpZmZlcmVk 89075
SVBBZGRyZXNz 89076
IFN0cmF3YmVycnk= 89077
IFNhaGFyYQ== 89078
Y3JlYXRlQ2xhc3M= 89079
IS8= 89080
IG1lbWJlcnNoaXBz 89081
IHByb25vdW5jZQ== 89082
LkNvbnN0cmFpbnQ= 89083
IEVucm9sbG1lbnQ= 89084
IHJlbmV3YWJsZXM= 89085
Lmd0 89086
aXp6aWU= 89087
cnp5 89088
ZXJzZW4= 89089
PD0k 89090
REVMQVk= 89091
IHNpZ25pbg== 89092
IFBTVQ== 89093
QXBwTmFtZQ== 89094
fVwuWw== 89095
RUdB 89096
IGNpZW50 89097
IFN5bm9wc2lz 89098
IGxldHRlclNwYWNpbmc= 89099
IGNoaWxkcw== 89100
IFNjYWxpbmc= 89101
KXByZXBhcmU= 89102
IGNvbW11dGVy 89103
U2xhc2g= 89104
b3VzZXI= 89105
IHdhdGVybWFyaw== 89106
IFVJU2NyZWVu 89107
b2xpYW4= 89108
CXZlcnRpY2Vz 89109
PkFjdGlvbg== 89110
IGFwaA== 89111
aGFuZHM= 89112
IE9DQw== 89113
SFU= 89114
IHNlY2x1ZGVk 89115
IHZpc2NlcmFs 89116
IHZpZGVvZw== 89117
IFNhbXVyYWk= 89118
IFp1aw== 89119
IFdpZG93 89120
YWNjaW5l 89121
IGxpbGxl 89122
IFJ5ZGVy 89123
IFByb2dyYW1tZXI= 89124
RXhwb3J0ZXI= 89125
IG1vdmltaWVudG8= 89126
YXBhcw== 89127
IGxlaWRlcg== 89128
dWxhcmVz 89129
aWVtZQ== 89130
LWRlbnNpdHk= 89131
ZGVzY2VuZGluZw== 89132
KElU 89133
IHNjcmFwZXI= 89134
IGljZWJlcmc= 89135
X0NSSVRJQ0FM 89136
IGF1dGU= 89137
X1N0eWxl 89138
IE1BTA== 89139
IEhlY3Rvcg== 89140
LUNocmlzdGlhbg== 89141
IGRpZmZlcmVudGlhdGVk 89142
IEJpc29u 89143
ICAgICAgIAk= 89144
LnBvcHVsYXRpb24= 89145
Umlv 89146
LVRy 89147
PVZhbHVl 89148
IEx1ZnQ= 89149
IEdpdWxpYW5p 89150
55yf 89151
Q291cG9u 89152
IGhhY2llbmRv 89153
44Od 89154
cG9uY2U= 89155
X3Jlc2lkdWFs 89156
IGxp4buHdQ== 89157
XHVmZg== 89158
0L7QsdGF0L7QtNC40Lw= 89159
IHJlc3BlY3Rv 89160
IERlc2lyZWQ= 89161
RGF0YVN0cmVhbQ== 89162
LnNheA== 89163
IG1vcA== 89164
IEhhY2tlcg== 89165
QU5UQQ== 89166
QW5j 89167
VmVudGE= 89168
IFdvcmRwcmVzcw== 89169
CWVmZmVjdA== 89170
YWRhcHQ= 89171
IEludGVydmlld3M= 89172
IGRyYXdiYWNrcw== 89173
QUxMRU5H 89174
IGfDqW7DqXJhbA== 89175
LWJhZGdl 89176
UmVzaXN0YW5jZQ== 89177
IE9TSQ== 89178
dG91cm5hbWVudA== 89179
IFJlcHV0YXRpb24= 89180
IEVpc2VuaG93ZXI= 89181
RmlsZWQ= 89182
IGhlYnQ= 89183
I1w= 89184
Y3JlYXRlUXVlcnlCdWlsZGVy 89185
5pyJ5pWI 89186
dmFuY2Vk 89187
Lkhhc0tleQ== 89188
ZGRl 89189
KHN0YXJ0VGltZQ== 89190
IEluc3RhbGxlcg== 89191
IEltcGw= 89192
Y29hY2g= 89193
IHByZWFjaGVk 89194
IGJyZXdlZA== 89195
SW5zdGFsbGVy 89196
b2x2YWJsZQ== 89197
IGFsYXM= 89198
KHNwZWxs 89199
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 89200
IGRlZmFtYXRpb24= 89201
KEFyZw== 89202
IHVzZXJEZXRhaWxz 89203
IGxpY2Vuc29ycw== 89204
IEludmVzdGlnYXRpb25z 89205
IGRpbmVy 89206
IGZpY3Q= 89207
U3RpY2s= 89208
TmVpZ2hib3I= 89209
dG9UaHJvdw== 89210
LXNlY3Rvcg== 89211
IHJpc3VsdA== 89212
4oCZOg== 89213
Sk5JRW52 89214
eXBpY2Fs 89215
ZGVzaWduYXRpb24= 89216
KHdw 89217
IGNvbmZpcm1QYXNzd29yZA== 89218
LWlvcw== 89219
ICItIjsK 89220
CWFzc2VydE5vdE51bGw= 89221
YWRkRXJyb3I= 89222
YXZyYXM= 89223
Vm0= 89224
KGpRdWVyeQ== 89225
IFZpY3RpbXM= 89226
IHJlbGlhbnQ= 89227
IEJsaXR6 89228
IG91dGFnZQ== 89229
IGZsdW9yaWRl 89230
IFROVA== 89231
LkRpc2NsYWltZXI= 89232
IFNOTVA= 89233
dmFibHk= 89234
IHBob3RvbnM= 89235
LlJlYWRBc1N0cmluZ0FzeW5j 89236
U2NoZWR1bGVk 89237
IGpld2lzaA== 89238
IEdlb2ZmcmV5 89239
IEdyYW5ueQ== 89240
fgo= 89241
LW1lc3NhZ2Vz 89242
KGdvYWw= 89243
IGFyZ2VudA== 89244
IFBlc3Q= 89245
IGNvbmdyYXR1bGF0ZQ== 89246
aW5vc2F1cg== 89247
IHdoaXNwZXJz 89248
IHNpc3RlbWFz 89249
IEbDqQ== 89250
L0luZGV4 89251
Lk1JTExJU0VDT05EUw== 89252
IGFjaGlldmFibGU= 89253
IEJyaXR0YW55 89254
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKys= 89255
IFJldHVyblR5cGU= 89256
IGluZml4 89257
LmlzU3VjY2Vzcw== 89258
LkNhdGVnb3JpZXM= 89259
IG91dGxpZXI= 89260
LkFzc2V0 89261
b3RlYw== 89262
IHdpemFyZHM= 89263
IGJvb3Rsb2FkZXI= 89264
X2Jlcg== 89265
IHJlaGFiaWxpdA== 89266
YW50b3I= 89267
IFZpdm8= 89268
IEdhcm1pbg== 89269
b2JqZWN0SWQ= 89270
QFBhdGg= 89271
IMO6bmljYQ== 89272
IFlvcmtlcnM= 89273
R3VpZElk 89274
JGVycm9ycw== 89275
ICs9Cg== 89276
IGF4aW9t 89277
IFBTSQ== 89278
IFN1Y2M= 89279
IFNwb2thbmU= 89280
ICciLiRf 89281
IExO 89282
Lm5ld0xpbmU= 89283
IGludGVyc2VjdHM= 89284
bGljaGtlaXQ= 89285
IElBTQ== 89286
LkRyb3BEb3duSXRlbXM= 89287
IGNvdXJ0ZW91cw== 89288
IFNtaXRoc29uaWFu 89289
IEhtbQ== 89290
UURlYnVn 89291
c3RyYWlnaHQ= 89292
X3NvbGQ= 89293
QnVsaw== 89294
VHJpU3RhdGU= 89295
IGFkZEJ1dHRvbg== 89296
IEhpcmluZw== 89297
VHJhbnNwb3Nl 89298
IFVJVGV4dFZpZXc= 89299
aXN0ZW5jaWE= 89300
L2NwcA== 89301
INC/0L7Qu9GP 89302
IENvb2tib29r 89303
L0FwcGxpY2F0aW9u 89304
Z2VuaWM= 89305
IFdvb0NvbW1lcmNl 89306
LHZlY3Rvcg== 89307
IEJpdGU= 89308
Lmh3 89309
IGRvY2tpbmc= 89310
IFRhbnRyYQ== 89311
IFNWQw== 89312
IE1hdXJpdA== 89313
aWFsaWFz 89314
IEF1cmU= 89315
IGJvbHM= 89316
TE9DSVRZ 89317
IFdlc3Ricm9vaw== 89318
IEJQTQ== 89319
IEZleQ== 89320
IFNvdmVyZQ== 89321
IHBhbmRh 89322
IHF1aXp6ZXM= 89323
IGNyZW8= 89324
c3BlZWNo 89325
L2Rpcg== 89326
INC40YHQv9C+0LvRjNC30L7Qsg== 89327
IGZvdW5kYXRpb25hbA== 89328
LWFwcGVuZA== 89329
blRoZQ== 89330
IGFwaVVybA== 89331
LlhQQVRI 89332
IExpbmd1 89333
IEV4aGF1c3Q= 89334
UGFraXN0YW4= 89335
IG9tYXA= 89336
IGZvbnRTdHlsZQ== 89337
0LXRgdGC0Lg= 89338
IG1hbnNsYXVnaHRlcg== 89339
X0xvbmc= 89340
IGNhcnBldHM= 89341
Q2hlc3M= 89342
ZWxpZ2h0 89343
RHJhd2VyVG9nZ2xl 89344
IFBhdHR5 89345
X2Nyb3NzZW50cm9weQ== 89346
IHR3ZWFraW5n 89347
0YLRgw== 89348
IENBTEM= 89349
c2lw 89350
IEpNUA== 89351
X19fX19fX19fX19fX19fX18KCg== 89352
VHJlZVZpZXc= 89353
LXdhdmU= 89354
IHBhc3R1cmU= 89355
ZWxpbWluYXI= 89356
IGVyeQ== 89357
IHJlc3RsZXNz 89358
6rWs 89359
IG1hcmlhZ2U= 89360
IEVsbGll 89361
Xz0n 89362
IHZtaW4= 89363
S2ljaw== 89364
LnRvb2xib3g= 89365
IE1hcmlubw== 89366
eXBzeQ== 89367
c3RkYXJn 89368
cHRyZGlmZg== 89369
IFBlYWtz 89370
X1ZhbA== 89371
IGluZ2VzdA== 89372
IGNvbXBz 89373
RGViZQ== 89374
IERlY2xhcmF0aW9ucw== 89375
aXJjb24= 89376
PWFsbA== 89377
LkRlYnVnZg== 89378
UHJlZGljdGlvbg== 89379
IGRhdQ== 89380
KE1lbWJlcg== 89381
IGNoaWVmbHk= 89382
L2FuaW1hdGU= 89383
LkF0dGFjaA== 89384
IGdhc3RyaWM= 89385
IFVzZXJEZXRhaWxz 89386
w7ZyZW4= 89387
a29h 89388
LWJvb3Q= 89389
IHNwbGljZQ== 89390
bGVh 89391
b3Rp 89392
W29w 89393
U3F1YXJlZA== 89394
IHNjcm9sbFRv 89395
IE5ld2ZvdW5kbGFuZA== 89396
CUVSUk9S 89397
V2Fs 89398
RU1BTEU= 89399
R2V0WQ== 89400
IGNhYmlucw== 89401
IGFic2w= 89402
Lm1peGVy 89403
IGNkcg== 89404
Y29uY2VydA== 89405
IFN5bHZpYQ== 89406
Qks= 89407
5LuK5bm0 89408
X0NMQU1Q 89409
0YHRgtGA0YPQutGC0L7RgA== 89410
L2dhbWVz 89411
xZN1cg== 89412
PGxvY2F0aW9u 89413
IGNsb3NlQnV0dG9u 89414
IEhhaXJzdA== 89415
4bqhbw== 89416
IGNydW1ibGluZw== 89417
IHN1bGZhdGU= 89418
IGFsZ3VpZW4= 89419
IEpEQkM= 89420
IEt2 89421
UElQ 89422
X3N1cmY= 89423
IHXFvHl0aw== 89424
IG1hbm5lZA== 89425
IE9jY2FzaW9uYWxseQ== 89426
b2Jqcw== 89427
TWluaW1hbA== 89428
LWRlc3M= 89429
IFdBVg== 89430
IEVycm9ySGFuZGxlcg== 89431
IHNldExvY2F0aW9u 89432
IGlldHM= 89433
IHN1YnJvdXRpbmU= 89434
IHRvbmd1ZXM= 89435
X3F1aXo= 89436
TWlsbGVy 89437
IEJhc2VUeXBl 89438
IFZ1ZXg= 89439
aXJhdGU= 89440
U2VyaW91c2x5 89441
dHlwZWlk 89442
IGt1dGpl 89443
IHByZXNjcmliaW5n 89444
X3N1cnZleQ== 89445
LkN0 89446
IGJsaW5kbHk= 89447
LmdldExhYmVs 89448
LCIpOwo= 89449
IHBvdHJ6ZQ== 89450
IFN3b3Jkcw== 89451
U29ydGFibGU= 89452
IEJsYWNrYnVybg== 89453
IE1hdGE= 89454
IHBvbmRz 89455
IHByb3Rlc3RvcnM= 89456
IEVuc2VtYmxl 89457
OmZvY3Vz 89458
IGl0YWxpYW5h 89459
IGRvcm1hbnQ= 89460
IE5lbA== 89461
SU5DTFVERQ== 89462
KENvbnY= 89463
IGJ1Zmxlbg== 89464
IENETg== 89465
LnhodG1s 89466
SGRy 89467
IGNhcmNpbm9tYQ== 89468
IFdvcmNlc3Rlcg== 89469
bmRs 89470
dXNlUmFs 89471
dXNlUmFsYXRpdmU= 89472
dXNlUmFsYXRpdmVJbWFnZVBhdGg= 89473
IHRha2Vhd2F5 89474
ZWxlbWVudEd1aWRJZA== 89475
LmxhYmVsWA== 89476
W0lE 89477
QUxFUg== 89478
CXV2 89479
PigpLT4= 89480
L2xp 89481
K2xlbg== 89482
IHByb3BlbA== 89483
IGNhYm8= 89484
XCIiKTsK 89485
IHZvY2F0aW9uYWw= 89486
LXBpbGw= 89487
Lm5sbQ== 89488
IGVyb3RpY2E= 89489
b3BvdA== 89490
bGFuZHNjYXBl 89491
aW5zaw== 89492
IHBsYWNlbWVudHM= 89493
LnNldEF1dG8= 89494
IGhvbWljaWRlcw== 89495
X0ZpZWxkT2Zmc2V0VGFibGU= 89496
Omw= 89497
IGFubm90YXRl 89498
LXJpc2U= 89499
LGFscGhh 89500
IGludGVydmVuaW5n 89501
YW1iaQ== 89502
Lj0nPA== 89503
IHBhcmxlcg== 89504
772l772l 89505
IGNvbXBseWluZw== 89506
LWhhbmRsZQ== 89507
IGludGVycnVwdGlvbnM= 89508
cGxlcnM= 89509
cm91cHM= 89510
X0RlZg== 89511
IHBpY2tlclZpZXc= 89512
IHBpZXJjZWQ= 89513
IGVyYWRpY2F0ZQ== 89514
bW9ieA== 89515
W3RyYWlu 89516
RGVmZXJyZWQ= 89517
IHRvdGFsZWQ= 89518
Q2hpbGRJbmRleA== 89519
IFJlY29tbWVuZGF0aW9ucw== 89520
X1dPUkRT 89521
IHNpZ25pZnk= 89522
IEFlcm8= 89523
X2Jvb3RzdHJhcA== 89524
X1Vw 89525
cHJvZHVjdE5hbWU= 89526
LWFueQ== 89527
IHBwbA== 89528
X1BVVA== 89529
IGx5b24= 89530
X0lMaXN0 89531
IMOpY3JpdA== 89532
KGd1aWQ= 89533
IGNvbnRhZ2lvdXM= 89534
X1NlbGVjdGlvbg== 89535
L2xhbmd1YWdl 89536
cXVhbg== 89537
IGFjdXB1bmN0dXJl 89538
IG9mcmVjZQ== 89539
CVJURQ== 89540
Lkd1bmE= 89541
IHNlbnNlZA== 89542
IEtyYWs= 89543
IHVubHVja3k= 89544
YXZpYw== 89545
dGl0bGVMYWJlbA== 89546
IGhheXN0YWNr 89547
LmJpdG1hcA== 89548
IENvdW5zZWxpbmc= 89549
UExBVEZPUk0= 89550
X1Rvb2w= 89551
VGFt 89552
V2VyZQ== 89553
0YDQsNC3 89554
X1NQRQ== 89555
IG9uQW5pbWF0aW9u 89556
PTw/PSQ= 89557
IFNsZQ== 89558
IEd1aW5uZXNz 89559
IHR3ZWFrZWQ= 89560
LXByZXNzdXJl 89561
X21vbnRocw== 89562
KW8= 89563
UHJvYmFiaWxpdHk= 89564
IENhbXBvcw== 89565
LkNPTkZJRw== 89566
VmludGFnZQ== 89567
PndpbmRvdw== 89568
IEZhY3RvcnlCb3Q= 89569
cG9zdGdyZXNxbA== 89570
IHRhYmxldG9w 89571
IENhdGE= 89572
aG9j 89573
X2FzYw== 89574
4oKs4oCc 89575
QmFja1N0YWNr 89576
w6lv 89577
IFNvdXM= 89578
c2V0dGVy 89579
JyldKQo= 89580
dmVsbGU= 89581
IEFsdW1pbml1bQ== 89582
eEJB 89583
Lm1vbmdv 89584
IFZhcmlhdGlvbg== 89585
eXR1dA== 89586
bmVobWVy 89587
4buDbQ== 89588
IGVmZmVjdGVk 89589
ICoqLw0K 89590
IHJlY291bnRlZA== 89591
UHJhY3RpY2U= 89592
Q0FOQ0VM 89593
Y3puaWU= 89594
TGFycnk= 89595
IHFh 89596
IEh1ZmZtYW4= 89597
Z2V0RHJhd2FibGU= 89598
IGVuZnJlbnQ= 89599
IG9uQ2FuY2VsbGVk 89600
IGxlbw== 89601
IFhTUw== 89602
IEh1cnJpY2FuZXM= 89603
IGpvbg== 89604
IFRlc3RlZA== 89605
IE1vcmFs 89606
IGJlZHRpbWU= 89607
IEpBRFg= 89608
IGVjaGFuZw== 89609
IG51ZXN0cmFz 89610
UENN 89611
KS4u 89612
IOyImOyglQ== 89613
IGJvcmRlcmxpbmU= 89614
IGFzc2lzdGly 89615
IEhlbHBz 89616
IERpdmU= 89617
X3NuZA== 89618
d2l0 89619
X2JsZW5k 89620
IGlzRmlyc3Q= 89621
IGhlYXBx 89622
KCc9 89623
IGFzc2VtYmxlcg== 89624
IE15c3RpYw== 89625
b3JnaA== 89626
IGhpam9z 89627
X0tIUg== 89628
KGRlY29kZWQ= 89629
IFFVSQ== 89630
INeR 89631
IGNvbnRyb2xJZA== 89632
U3BhY2Vy 89633
LmFnZ3JlZ2F0ZQ== 89634
IHNoYWx0 89635
X3RyYXA= 89636
IEZhbWlsaWU= 89637
zrg= 89638
b3J0YQ== 89639
LlBvc3RNYXBwaW5n 89640
7LA= 89641
ICcuLics 89642
esOh 89643
L2FybQ== 89644
LmdhbGxlcnk= 89645
IGltcGVjY2FibGU= 89646
IHdpbmRvd0hlaWdodA== 89647
c2xhY2s= 89648
ZmZi 89649
X3Fw 89650
bGFkZW4= 89651
IFRFUk0= 89652
c2V0TGFiZWw= 89653
IFNpbmdsZUNoaWxkU2Nyb2xsVmlldw== 89654
ecO8aw== 89655
IHB1bHVtaQ== 89656
LWdhcA== 89657
dW5pYWNpZA== 89658
CWhvbGRlcg== 89659
LmFkZEZpZWxk 89660
IHRyaXBsZXM= 89661
IEp1ZGdtZW50 89662
IENlbmE= 89663
cGFyc2Vycw== 89664
LmRyYXdUZXh0 89665
INC60LDQttC0 89666
IGFjY3Q= 89667
aGl2ZQ== 89668
IG11c2lxdWU= 89669
IFlheg== 89670
LXBvc3Rz 89671
IGZpbHM= 89672
IC8vew0K 89673
X3B1dHM= 89674
IFN0YXR1ZQ== 89675
ZGlhbW9uZA== 89676
U3RvcmFnZVN5bmM= 89677
IHNodXRz 89678
IGdldHRpbWVvZmRheQ== 89679
IEFBQkI= 89680
aWNoZXJu 89681
Z2V0TG9jYWxl 89682
aW50cmVl 89683
IGZydWl0ZnVs 89684
QmVhcg== 89685
IHBsdW1iZXI= 89686
cWlk 89687
Q0hJUA== 89688
IG1vdGl2YXRpbmc= 89689
IGVzY2FsYXRl 89690
LmJ1bGs= 89691
IFBsYXlncm91bmQ= 89692
X21pcnJvcg== 89693
IFBlZWw= 89694
IGRhbmU= 89695
aW52b2ljZXM= 89696
SGFzQmVlblNldA== 89697
LXZlcnRpY2Fs 89698
IEZyYW5jZXNjbw== 89699
IEFTQQ== 89700
INC60L7Qu9C40YfQtdGB0YLQstC+ 89701
w6Bu 89702
Rm91cnRo 89703
IENyZWF0ZVRhYmxl 89704
Y2N0b3I= 89705
IGZyYW50aWM= 89706
YWFi 89707
IEthcmFjaGk= 89708
X2ltYWc= 89709
IG5hdHV1cg== 89710
RWF0 89711
IHN0dW1w 89712
IHJvbGxlcnM= 89713
IHRyYWl0ZW1lbnQ= 89714
INC/0YDQvtC0 89715
IHJlYWxpc3RpY2FsbHk= 89716
IGVQdWI= 89717
IFphZw== 89718
ZGFtbg== 89719
IEFubmV4 89720
cGVjaWVz 89721
KGV4aXQ= 89722
IHNwZWN0YXRvcg== 89723
IEJ1bGdhcmlhbg== 89724
IG1lZ2V0 89725
IG1hdHVyZXM= 89726
IGRldGVjdGlvbnM= 89727
IHphaGw= 89728
ZW5lZml0 89729
YWtvdg== 89730
IGFkdWx0b3M= 89731
bWlkZGxld2FyZXM= 89732
aXNPYmplY3Q= 89733
S2Vubg== 89734
IHVuZXRoaWNhbA== 89735
c3VibmV0 89736
R3JhcGhRTA== 89737
IEdhZWw= 89738
LkRyb3BvdXQ= 89739
IGJ1cmVhdWNyYXRz 89740
IFJlZGVtcHRpb24= 89741
LkR0bw== 89742
LkV2YWx1YXRl 89743
IG9nZ2k= 89744
IHRyYXRhbWllbnRv 89745
IHJlY2FsbGluZw== 89746
aXN0aW5ndWlzaA== 89747
L3JlbGVhc2U= 89748
X1dST05MWQ== 89749
CW1rZGly 89750
VHlwZUVudW0= 89751
IERBUks= 89752
5rWB 89753
IFZhcG9y 89754
IGF0b2w= 89755
CWluc3Q= 89756
LmApOwo= 89757
L2Vs 89758
IHJlY2xhaW1lZA== 89759
w59lcmRlbQ== 89760
X2xvc3Q= 89761
IEFsYQ== 89762
INC+0YjQuNCx 89763
IEJhcnRo 89764
Q29sb24= 89765
b3Bvcg== 89766
X3Bhc3N3ZA== 89767
X2V4Y2x1ZGU= 89768
QVBB 89769
Zmxvd2Vycw== 89770
IEVib29r 89771
IFNUQQ== 89772
VU5T 89773
X0RJU1BBVENI 89774
QUNJw5NO 89775
dGVybWluYXRpb24= 89776
IG5lc3RsZWQ= 89777
YWRyYXRpYw== 89778
Um93QW5pbWF0aW9u 89779
X2tt 89780
IHJvbmQ= 89781
XV0+PC8= 89782
5L2Z 89783
IGNvc3BsYXk= 89784
IG1pbGxlbm5pdW0= 89785
X3NlcmlhbGl6ZQ== 89786
IHZlcnNjaGllZGVuZW4= 89787
YW50dA== 89788
IEFtaWQ= 89789
Y3JldGlvbg== 89790
KT8k 89791
IHRvd2luZw== 89792
LmZpbA== 89793
LkZpbGVXcml0ZXI= 89794
IGFpcw== 89795
IGVTcG9ydHM= 89796
cHJ0 89797
SVBB 89798
LkZBTFNF 89799
IHByaWNr 89800
RW5kaW5n 89801
IHByw6lzaWRlbnQ= 89802
X2dseXBo 89803
IHN1cHBsZW1lbnRlZA== 89804
IGNvbnRhcg== 89805
Ii4kXw== 89806
IEJ1eWVycw== 89807
dWph 89808
IFRpbWVab25l 89809
ZW5uZW50 89810
SW5Qcm9ncmVzcw== 89811
IFN1c3RhaW5hYmlsaXR5 89812
IFByb3NwZXI= 89813
Q29udG91cnM= 89814
IHN0YXJ0bGVk 89815
X2xlYXN0 89816
IENvdmVudA== 89817
Y2huaXR0 89818
IE1pbGt5 89819
ICItPg== 89820
ZXRhaw== 89821
IHR1c3Nlbg== 89822
LXBheWluZw== 89823
X2FjY2Vzc2libGU= 89824
QmF0bWFu 89825
KGl0cg== 89826
SUFMSVpFRA== 89827
IFRleHRBcmVh 89828
YW5rZQ== 89829
X0pVTVA= 89830
IGJlaGF2ZWQ= 89831
LG9wdGlvbnM= 89832
eGl2 89833
LlBMTA== 89834
cXg= 89835
Lm9uTmV4dA== 89836
IHZlcmlmaWVy 89837
IGR1xbw= 89838
IEZ1a3VzaGltYQ== 89839
IENPUlBPUkFUSU9O 89840
X3RE 89841
IE1lYWRvdw== 89842
IHByb3llY3Rvcw== 89843
ICgnXA== 89844
IEJhcmNsYXlz 89845
IGxlZ2FsaXR5 89846
IGhhbWJ1cmdlcg== 89847
IGVpbnM= 89848
SW5kaWFuYQ== 89849
IFRLZXk= 89850
Y2xvYWs= 89851
PGFsZ29yaXRobQ== 89852
IHByZWFjaGVy 89853
e2xuZw== 89854
LmFydGljbGVz 89855
c2V0SW1hZ2U= 89856
UmVuYW1l 89857
IGJsb3Nzb20= 89858
IEJsb3Nz 89859
IHV1cg== 89860
IGRhZHM= 89861
IFRpdGFuaWM= 89862
ICAgICAgICANCg0K 89863
IG9yZGluYW5jZXM= 89864
IG3DpG5u 89865
IGVyaw== 89866
IGRpc3RpbGxlZA== 89867
IMOkbA== 89868
IHJ1cHR1cmU= 89869
IENhbWVyYXM= 89870
w7luZw== 89871
IGhhaXJzdHlsZXM= 89872
IGVtYnJ5b3M= 89873
4oCdCg== 89874
Lk5hdg== 89875
IHN0cm0= 89876
CXVzYWdl 89877
LkFJ 89878
IFRPVUNI 89879
IElsbGVnYWxBY2Nlc3NFeGNlcHRpb24= 89880
6rKw 89881
a29uZWtzaQ== 89882
ISIp 89883
IGVzY2Fw 89884
dWRpb3M= 89885
c3RhcnR0aW1l 89886
IG1laW5lbQ== 89887
IFNwaXJhbA== 89888
IEVyZWN0aWxl 89889
aXZhbGVuY2U= 89890
IGl0ZW1UeXBl 89891
IGFiYWl4bw== 89892
VmVydHM= 89893
dGFraW5n 89894
cHN0 89895
IE9zY2Fycw== 89896
IER4 89897
ZXR0eQ== 89898
TUFM 89899
IE5lZWRsZQ== 89900
IENPTVBVVEVS 89901
5Lu75Yqh 89902
IG5ld1g= 89903
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAK 89904
cGxldmVs 89905
QUNFTUVOVA== 89906
IEpvaGFu 89907
UG9pbnRG 89908
IHJlc3Ryb29t 89909
dmVybw== 89910
IGVsxZE= 89911
cHJvZHVr 89912
IFlFQVJT 89913
CWFjdHVhbA== 89914
VVBMRQ== 89915
Q29udmVydGlibGU= 89916
IHBvcnJm 89917
SW5qZWN0ZWQ= 89918
X2JvdGg= 89919
L0dhdGU= 89920
Y2FsY3VsYXRvcg== 89921
ZW1haWxlcg== 89922
LlBvZA== 89923
IFpvdA== 89924
X3NtYXJ0 89925
YmFzaXM= 89926
PENvbG9y 89927
IGNyYXZpbmdz 89928
RHJpdmVycw== 89929
KGNvcw== 89930
ZGF0YWJsZQ== 89931
LW1ldGFs 89932
IFBj 89933
LmNvcHlPZg== 89934
IG9yaWVudGF0aW9ucw== 89935
CWFzdA== 89936
IFpvbWJpZXM= 89937
IGJvbWJlZA== 89938
SG9zdG5hbWU= 89939
X3JhaXNlcw== 89940
bWVuc2FnZW0= 89941
IGNvcnRpc29s 89942
IEZpb25h 89943
bGljb3M= 89944
aGVhdnk= 89945
IOqwgOyguA== 89946
b21lbmNs 89947
IGN1bHR1cmVk 89948
IGFydGlrZWw= 89949
xaHDrQ== 89950
amRr 89951
IHZhbmRhbGlzbQ== 89952
IH1dKTsK 89953
U3RyYWlnaHQ= 89954
IHJlaGVhcnNhbA== 89955
RWRpdGlvbg== 89956
IEluc3Bpcg== 89957
CXdj 89958
IGZvcm11bGF0ZQ== 89959
YW56ZWlnZW4= 89960
IHBhdGhvbG9naWNhbA== 89961
IGtlbm5lbmxlcm5lbg== 89962
Pnsi 89963
IGRpY2Vk 89964
IGJyYWNlbGV0cw== 89965
CQkgICAgCg== 89966
Kj4q 89967
L3RhcmdldA== 89968
LkFnZW50 89969
Lm1hZ2lj 89970
IGlkZW9sb2dpZXM= 89971
VFJBQ0s= 89972
X2luZGl2aWR1YWw= 89973
PGRlY2x0eXBl 89974
IFJFQ0VJVkU= 89975
L2Jvb3Q= 89976
OkB7 89977
UU0= 89978
IE1hbmRhbA== 89979
TkFNRVNQQUNF 89980
IHRlcmNlcg== 89981
IFJlZ2dpZQ== 89982
IE5pY2hvbHNvbg== 89983
IEZ1bHRvbg== 89984
c3Rha2luZw== 89985
IHJlc29uYXRl 89986
bHBhcnI= 89987
IGNvbnZlcnRlcnM= 89988
ICgiLw== 89989
IE1hcmxpbnM= 89990
SW5mb3JtZQ== 89991
Jz0+Wyc= 89992
IHJvYmVydA== 89993
IEhJTQ== 89994
d2Vicw== 89995
LnRyYWlsaW5nQW5jaG9y 89996
LmFzY2lp 89997
IE1hc2M= 89998
IHRlY2hubw== 89999
ZXR4dA== 90000
CSAgICAgICAgCg== 90001
zrHOuQ== 90002
KFNlcQ== 90003
ID8+Ojwv 90004
IFBlYg== 90005
W3NlbGVjdGVk 90006
SkVDVEVE 90007
Q2FzdEV4Y2VwdGlvbg== 90008
P2Y= 90009
IGV5ZXdpdG5lc3M= 90010
IG1lbm8= 90011
IERhbWllbg== 90012
X0lFbnVtZXJhdG9y 90013
IC4uLi4uLi4uLi4uLi4uLi4= 90014
LlNFTEVDVA== 90015
IGNyYXk= 90016
X3BhcGVy 90017
LlJvbGxiYWNr 90018
SURFT1M= 90019
cnBhcnI= 90020
aW5lYXI= 90021
X1JlbA== 90022
IFdpbGRl 90023
IFdvbmRlcmxhbmQ= 90024
IFNodWZmbGU= 90025
IHN0cmlrZW91dHM= 90026
c2lnbW9pZA== 90027
ISgiew== 90028
ZXBhbQ== 90029
IHJpY2huZXNz 90030
IGVuZGVhdm91cg== 90031
bWVudUl0ZW0= 90032
INCf0L7Qu9GD0Yc= 90033
IGZydXN0cmF0aW9ucw== 90034
X3N1YnNjcmliZQ== 90035
IGJvb3pl 90036
IExpY2h0 90037
IHBlYXNhbnQ= 90038
IHdlaWdodGluZw== 90039
IOW/ 90040
QWN0aW9uQ29kZQ== 90041
LnRyYWNrcw== 90042
IMOY 90043
IG1pbGxpb25haXJl 90044
KHVy 90045
J10pCgoK 90046
ICIuJF8= 90047
X0VERUZBVUxU 90048
IGN1cmxz 90049
X0NvbUNhbGxhYmxlV3JhcHBlcg== 90050
LnNldFZpZXdwb3J0 90051
IGRlbmQ= 90052
IGF1dG91cg== 90053
IEZvdXJpZXI= 90054
IGJvaWxz 90055
IEpQRw== 90056
IGRpZ3M= 90057
IGNvbXBsYWlucw== 90058
LWxpbmVk 90059
IEJsYWRlcw== 90060
X2RpY3Rz 90061
IElwcw== 90062
cmVmZXJlcg== 90063
IGFueWhvdw== 90064
YW50YXI= 90065
LXNoZWV0 90066
CXBsYXk= 90067
aWVyY2U= 90068
Lk1lc3NhZ2luZw== 90069
6KeB 90070
CXByb2dyZXNz 90071
LkRhdGFWaXN1YWxpemF0aW9u 90072
IFN0b3Bz 90073
SW50ZXJ2YWxTaW5jZQ== 90074
QGJyaWVm 90075
LndpbmQ= 90076
IGdldElucHV0 90077
IEtB 90078
IFJFU1BPTlM= 90079
IHRhcmc= 90080
dmlzdWFsaXphdGlvbg== 90081
IEVzcGHDsQ== 90082
bmllcg== 90083
IERvdmU= 90084
X2lzcg== 90085
IEFQUExZ 90086
YmVkbw== 90087
W117Cg== 90088
IGV2YWN1YXRl 90089
IG1pY3Jvc2NvcGlj 90090
5q2j56Gu 90091
ZXJvdA== 90092
LW9wZXJhdGl2ZQ== 90093
aWt1dA== 90094
IGRibA== 90095
IGFqb3V0 90096
Lml4 90097
ICAgICAgICAKICAgIAo= 90098
dGVzdGU= 90099
bml2ZWw= 90100
LnNuYXA= 90101
dXR6dA== 90102
LmlzQWRtaW4= 90103
KElD 90104
IG9iZW4= 90105
IEVmZmljaWVudA== 90106
RERldmljZQ== 90107
IGluZGVtbg== 90108
IGZyb3pl 90109
LHJw 90110
IGRlY2VtYmVy 90111
57uZ 90112
IG1lbG9kaWVz 90113
IEVUQQ== 90114
44GT44KT44Gr44Gh44Gv 90115
IHF1YWxjaGU= 90116
IHNldERlZmF1bHRDbG9zZU9wZXJhdGlvbg== 90117
T1JJQQ== 90118
IHphZw== 90119
IGFsbG93YW5jZXM= 90120
L3Bo 90121
LVRva2Vu 90122
IFBvdQ== 90123
IG1pbmlzdHJpZXM= 90124
LkxPR0lO 90125
IHNlYXJjaFRlcm0= 90126
IGh1cnJpY2FuZXM= 90127
IEZsb3Vy 90128
IFNVUw== 90129
VGhlbWVz 90130
cmVlY2U= 90131
IGVudHJldg== 90132
RFhWRUNUT1I= 90133
IEJyZW5kYQ== 90134
RXJyb3JNc2c= 90135
OildOwo= 90136
IGRvbWluYQ== 90137
IEludmlzaWJsZQ== 90138
PD4oIg== 90139
cHV0Yw== 90140
SEFWRQ== 90141
RXZhbHVhdG9y 90142
bWF0Y2hpbmc= 90143
LW5hbWVz 90144
IGxhaA== 90145
X1lVVg== 90146
5pyN5Yqh5Zmo 90147
LldSSVRF 90148
KTpc 90149
LWRlZmluaXRpb24= 90150
IGNoaW1uZXk= 90151
LmNscw== 90152
a25vd2xlZGdl 90153
IEFsZXhhbmRyZQ== 90154
IGNvbGVn 90155
b8WbY2k= 90156
LkNobw== 90157
IHNvZnRlbmVk 90158
IHJvdGF0ZXM= 90159
LXN0YXRlcw== 90160
6rc= 90161
dmlvbGVudA== 90162
IDopCg== 90163
IGFjY2nDs24= 90164
bmlrYQ== 90165
IExhdHRlcg== 90166
X0Zsb2F0 90167
IGVncmVnaW91cw== 90168
b2RpYWw= 90169
U3lub3BzaXM= 90170
KHhp 90171
IH0sew== 90172
Y3h4 90173
RW1tYQ== 90174
IENvbmN1cnJlbnRIYXNoTWFw 90175
X0NhbWVyYQ== 90176
IHBlYW51dHM= 90177
44Kz44Oh44Oz44OI 90178
X2JlZA== 90179
IGVycm9yQ2FsbGJhY2s= 90180
IFBhcHVh 90181
LFRydWU= 90182
tpo= 90183
IHN0YWRpdW1z 90184
IGtub2Jz 90185
aWZpY2FjaW9uZXM= 90186
IHB1cnBvc2VseQ== 90187
IFB1cmVDb21wb25lbnQ= 90188
INC60LvQuA== 90189
LlRyYWNr 90190
c3Nj 90191
KEpvYg== 90192
KEh0dHBDb250ZXh0 90193
IGNob2lzaXI= 90194
IOy7 90195
IGF1c3A= 90196
dXBwZW4= 90197
QWR2ZW50dXJl 90198
IEZMQUM= 90199
IGFwcGVsbGFudA== 90200
ICgoIg== 90201
z4c= 90202
IHRyaWY= 90203
IGR1cmF0aW9ucw== 90204
IE5HWA== 90205
LmJw 90206
YWN0aW9uRGF0ZQ== 90207
Lmluc3RhbnQ= 90208
LVJlcXVlc3RlZA== 90209
JyYm 90210
INGH0LXRgA== 90211
PWJvb2w= 90212
IGxvcmRz 90213
bGljaW5n 90214
IG1hcmlu 90215
IGJsaW5kZWQ= 90216
L2xheW91dHM= 90217
ZmVpdG8= 90218
aXp6bGluZw== 90219
RXZ0 90220
IGJ1bGxpc2g= 90221
ZXhjbHVzaXZl 90222
4oCZZXM= 90223
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcg== 90224
IGJhcHRpemVk 90225
INGB0LvRg9GH 90226
IENlY2ls 90227
LmVmZmVjdHM= 90228
IGNyeXB0b2dyYXBoaWM= 90229
IFZpbGxl 90230
dWZ0 90231
IEFudGhlbQ== 90232
IHNlZWtlcg== 90233
IG5pY2tuYW1lZA== 90234
IGNhbXBncm91bmQ= 90235
IGFjdGlvbkJhcg== 90236
IEVwaXNvZGVz 90237
IC0tLS0tLS0tCg== 90238
QnVpbGRlckZhY3Rvcnk= 90239
X1VOU1VQUE9SVEVE 90240
VklMTEU= 90241
LlJlZ2lzdHJ5 90242
VG9uaWdodA== 90243
IG1ha3M= 90244
IGFkZG9ucw== 90245
IERlY3J5cHQ= 90246
LnNraWxscw== 90247
KGZo 90248
IGp1Z2c= 90249
IENvdXBsZXM= 90250
IEFtaXI= 90251
ID09PT09PT09PT0= 90252
IGVuZGVyZWNv 90253
LlN0cmluZ3M= 90254
IGhhcm1pbmc= 90255
IGJ1c3RsaW5n 90256
KGZpcnN0TmFtZQ== 90257
LnNwYXJzZQ== 90258
SVRP 90259
ICAgICAgICAgICAgICANCg== 90260
5p2l5rqQ 90261
b2RlZ2E= 90262
YW5hZ2Fu 90263
LkhhbmRsZXJGdW5j 90264
IHRpbmRlcg== 90265
ICMo 90266
IGltYWdpbmFibGU= 90267
IGF1bg== 90268
UHJlc2VuY2U= 90269
UGFja2FnZU1hbmFnZXI= 90270
IGx1ZGljcm91cw== 90271
acOobWU= 90272
IGdldE9iamVjdA== 90273
Ym94aW5n 90274
IHNxdWlk 90275
w6p0ZXM= 90276
RGFlbW9u 90277
X2xpa2Vz 90278
hrU= 90279
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 90280
Lnd3dw== 90281
c3NlbA== 90282
ZXRlY3Rpb25z 90283
ZGFl 90284
L2Rvd25sb2Fkcw== 90285
IENsYXNzaWZpZXI= 90286
X1NVQkpFQ1Q= 90287
emVnbw== 90288
X0dST1VQUw== 90289
YWN0aWNlcw== 90290
X2xpdGU= 90291
IGRhbm1hcms= 90292
L2Js 90293
YXB5cnVz 90294
VElNRVI= 90295
IFNjcmlwdHVyZXM= 90296
0Y/Rgg== 90297
c3Bh 90298
Ikc= 90299
IHBlbmV0cmF0aW5n 90300
IGNvbmZvcm1pdHk= 90301
bmV3bGluZQ== 90302
IGx5bg== 90303
IE1NUA== 90304
IElOVEVSRkFDRQ== 90305
IEFjdGlvblR5cGVz 90306
LmNyaXRlcmlh 90307
4buRbmc= 90308
IHJlc3RpdHV0aW9u 90309
CUZPUg== 90310
PHBhdGg= 90311
PT8iOwo= 90312
KHBlcmNlbnQ= 90313
bmRv 90314
IEFDTQ== 90315
CWN0 90316
QGE= 90317
IHTDug== 90318
IHNwb3R0aW5n 90319
w7xybg== 90320
IEdFUg== 90321
LndyaXRlVmFsdWU= 90322
X2Jsb2NrZWQ= 90323
WW1k 90324
IGluZWZm 90325
IFJhZGlhdGlvbg== 90326
IE9pbGVycw== 90327
QmVlcg== 90328
cm90cw== 90329
IFRyb3Q= 90330
cm5h 90331
cG9ydGVy 90332
ZW5lcnk= 90333
IHBvcm5vZmlsbQ== 90334
65SU 90335
X2Nr 90336
LkNvbXB1dGU= 90337
IFtdCgoK 90338
Z2l1bQ== 90339
IFRFTEU= 90340
IEluc3RhbmNlcw== 90341
Kkk= 90342
IHdpcmVUeXBl 90343
b25pdW0= 90344
ZXNoaXJl 90345
IHB1dGNoYXI= 90346
IGF3YWtlbmVk 90347
LmRlZ3JlZQ== 90348
aGVpdGVu 90349
LWF3YWl0ZWQ= 90350
IG5ldXJvdHJhbnM= 90351
LXRlc3RpZA== 90352
CgogICAgCg== 90353
IOe7kw== 90354
IGtpbm8= 90355
X0RBWVM= 90356
IFZhbGVyaWU= 90357
bnRpdHk= 90358
QEJlYW4= 90359
ZXRDb2Rl 90360
PFJlbmRlcmVy 90361
IiIK 90362
IGJlcm4= 90363
IHRvdGFsaXRhcmlhbg== 90364
Y2xpbmlj 90365
IE3DvG5jaGVu 90366
bm9pbnNwZWN0aW9u 90367
aXNjZQ== 90368
X3R1cGxlcw== 90369
LlBvaW50cw== 90370
IHBhc3RvcmFs 90371
SmFr 90372
a2VuaW5n 90373
L2NvbHVtbg== 90374
LXByb2R1Y2luZw== 90375
IGFib2xpc2g= 90376
ZmVhcw== 90377
cmVzcG9uc2VEYXRh 90378
cmVkaXJlY3RUb1JvdXRl 90379
IG9ic2VydmF0aW9uYWw= 90380
cE5leHQ= 90381
enRl 90382
Q2hvaWNlcw== 90383
CUxDRA== 90384
JlM= 90385
IGJpbGxpb25haXJlcw== 90386
X0VPRg== 90387
IGNvaG9ydHM= 90388
YW5rZW4= 90389
LmNvbWJpbmU= 90390
KE9wdGlvbmFs 90391
X0NPTlNPTEU= 90392
QWN0aXZpdHlJbmRpY2F0b3JWaWV3 90393
IHBoYXJtYWNpc3Q= 90394
IERvdWdo 90395
IE9wZXJhdGlvbmFs 90396
57I= 90397
IGphbXM= 90398
U29sbw== 90399
CWR1cmF0aW9u 90400
LnJt 90401
IFRvbmk= 90402
LmxlYXZl 90403
IHB1ZWRh 90404
IEZheQ== 90405
RGV0YWNo 90406
Lk1heGltaXplQm94 90407
IG1hcnR5cg== 90408
IGhhemU= 90409
L25l 90410
IG1hbW1h 90411
c2VsZWN0b3JNZXRob2Q= 90412
IHBpbGdyaW1hZ2U= 90413
IEFzcGhhbHQ= 90414
IHZhbGlkbw== 90415
RW5kRWxlbWVudA== 90416
IGxhcHNl 90417
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K 90418
aWxvcw== 90419
ZXJuYWxz 90420
Q29ubmVjdGlvbkZhY3Rvcnk= 90421
IExvdmluZw== 90422
LkNvbXBpbGU= 90423
IGNvcms= 90424
IEJ5ZQ== 90425
aWJOYW1lT3JOaWw= 90426
ZXN0YXI= 90427
XEdlbmVyYXRlZFZhbHVl 90428
KExM 90429
IFJhaXNlUHJvcGVydHlDaGFuZ2Vk 90430
IElyYW5pYW5z 90431
IGdldFByaWNl 90432
bWFyaWVz 90433
anVtYm90cm9u 90434
IFJlYmVscw== 90435
RElGRg== 90436
IE1vag== 90437
b3J0aWM= 90438
CWNvbnN0ZXhwcg== 90439
bnRw 90440
IG1hZ2ljaWFu 90441
IHBhdHJpb3Rpc20= 90442
LmNl 90443
LlNpbXBsZUJ1dHRvbg== 90444
IFBSSVY= 90445
aGlzdG9pcmU= 90446
aGlnaGVy 90447
cmVmaXhlcg== 90448
Q0pL 90449
IE9zd2FsZA== 90450
LnNwcml0ZXM= 90451
Lkls 90452
IGFyY2FuZQ== 90453
IENodW4= 90454
X09m 90455
IGV2ZXJ5dGltZQ== 90456
0Y7RiQ== 90457
IGxldHJhcw== 90458
aWxhbg== 90459
YmFydQ== 90460
LWJvdA== 90461
IFNpZ25pZmljYW50 90462
iOyKteuLiOuLpA== 90463
4oCM 90464
LWlzc3Vl 90465
IGluc2FuZWx5 90466
YXRlZ2lj 90467
X1ZF 90468
OkNHUG9pbnQ= 90469
TWFya3M= 90470
LnByb2JsZW0= 90471
J10uJy8= 90472
IHJlZHVuZGFuY3k= 90473
IGRlY3J5cHRpb24= 90474
SHVuZw== 90475
LXZhbGlkYXRl 90476
IEFuZ2Vsbw== 90477
Sk0= 90478
IHBvcG92ZXI= 90479
ZGViaXQ= 90480
Q29tcHV0ZWRTdHlsZQ== 90481
KV9f 90482
KHNpbg== 90483
ICcpLA== 90484
KGRlZnZhcg== 90485
w7R0ZQ== 90486
VGhhbk9yRXF1YWxUbw== 90487
Lnpo 90488
KE5vdGU= 90489
aWJCdW5kbGVPck5pbA== 90490
IFNvbmlh 90491
eW1vdXM= 90492
44CCPA== 90493
IGZpbG15 90494
IGVhcnRobHk= 90495
IExlYXJuZWQ= 90496
W3NlY3Rpb24= 90497
Lmpzb3Vw 90498
c3RydXA= 90499
IFBhdHJvbg== 90500
ICkq 90501
c2V0Rm9udA== 90502
IGhlZw== 90503
IGRlbHRhWQ== 90504
X1NDUg== 90505
LmN1dA== 90506
IHZiQ3JMZg== 90507
Lk9iamVjdE1hcHBlcg== 90508
IHLDqXBvbnNl 90509
WXU= 90510
KCl7fQoK 90511
LXBhcmFtZXRlcg== 90512
xLFzxLE= 90513
aWF6emE= 90514
SVpFUw== 90515
X1NVUFBMWQ== 90516
a2l0cw== 90517
IHJlaW5z 90518
KGRvY3M= 90519
JSE= 90520
IHN5c3RlbWN0bA== 90521
IFBzcg== 90522
IFdlcms= 90523
UGhpbGFkZWxwaGlh 90524
QlJFQUs= 90525
LmFwcGVuZFRv 90526
KGxvbg== 90527
QWJy 90528
L3JlbmRlcmVy 90529
IEVsZWFub3I= 90530
Q0VSVA== 90531
UGFyYW1ldGVyVmFsdWU= 90532
JGdldA== 90533
IOCy 90534
IEpM 90535
IGlnbml0ZQ== 90536
IGLhuqFu 90537
IENhdWw= 90538
IGhhc3Rl 90539
IGRvbWluZ28= 90540
VGVzbGE= 90541
L2NvbmZpZ3VyYXRpb24= 90542
KGV4cGVjdA== 90543
dXNyYQ== 90544
IHByZWZlY3Q= 90545
IGZyb2dz 90546
IGFzc2lnbmFibGU= 90547
IGludGVydmVuZWQ= 90548
LmNob2ljZXM= 90549
VUlTdG9yeWJvYXJkU2VndWU= 90550
IGLDqQ== 90551
IEzDtnM= 90552
YWxwaGFiZXQ= 90553
IHByZWFtYmxl 90554
ZGJh 90555
IGVtaXR0aW5n 90556
Lm1vcmU= 90557
IEJhc2Vs 90558
KGRhdGVUaW1l 90559
KCl9KTsK 90560
IG5vZGVMaXN0 90561
IEZQR0E= 90562
d2Vs 90563
IGxvZGFzaA== 90564
X2F1dGhlbnRpY2F0aW9u 90565
w7NyaW8= 90566
KHJ1bnRpbWU= 90567
X1NDRU5F 90568
IGN1ZmZz 90569
IEFkcmVzc2U= 90570
Ojw/ 90571
X2NtZHM= 90572
VMOqbg== 90573
IGVqZWN0 90574
CUVSUg== 90575
PE8= 90576
IEtyYW1lcg== 90577
4oCmCg== 90578
c29tZW9uZQ== 90579
IENQTA== 90580
77yN 90581
bG9ja2luZw== 90582
LkZvb3Rlcg== 90583
IGFsbQ== 90584
IEFkb2xm 90585
KS4v 90586
IE1hdHRoaWFz 90587
ICIsIgo= 90588
ZW51aXR5 90589
IExvdmVy 90590
IGFsaW1lbnRvcw== 90591
cGxldHM= 90592
w6R0emU= 90593
KHJlY3Y= 90594
dXJhYQ== 90595
U1RET1VU 90596
YW50eg== 90597
LkZsb2F0VGVuc29y 90598
IFJhZQ== 90599
cGln 90600
IHRlcnVn 90601
IHRoZW9sb2c= 90602
IHRheGlz 90603
Y29tcG9zaXRl 90604
c2hlcg== 90605
bGVEYg== 90606
IFJhaG1lbg== 90607
IDst 90608
SW5kZW50ZWQ= 90609
IHRyb2xsaW5n 90610
RVJJQ0FO 90611
Z2V0RW1haWw= 90612
X0VOQ09ERQ== 90613
Z2V0Q2VsbA== 90614
IFdyYXRo 90615
KHN1aXRl 90616
bm90RW1wdHk= 90617
LmdldFJpZ2h0 90618
IGJyZWF0aGFibGU= 90619
44Gf44Gg 90620
IHNldFRpbWU= 90621
J29wdGlvbnM= 90622
IHBheWxvYWRz 90623
YXVnYQ== 90624
ZWRt 90625
KHdlYXRoZXI= 90626
CXNlbQ== 90627
KGZyb250 90628
IHBheW91dHM= 90629
LnNldFRleHR1cmU= 90630
LFtdLA== 90631
IFBhY2tz 90632
IGNhenpv 90633
V2l0aFBhdGg= 90634
UHJvZw== 90635
bW1hcw== 90636
IGtvaw== 90637
LkNzcw== 90638
IGRlbGE= 90639
QXdhcmQ= 90640
w7xsdA== 90641
c291cA== 90642
KFsoJw== 90643
b2xsaXBvcA== 90644
LFNMT1Q= 90645
Y2hpYQ== 90646
IGJsYW5jbw== 90647
T0xVVEU= 90648
LXBsYW5l 90649
LExpc3Q= 90650
eGluZw== 90651
SU1BVEU= 90652
LW1vcnQ= 90653
IGdyYXZpZA== 90654
IEhhbmdpbmc= 90655
IHNjb2Zm 90656
Lml0ZW1JZA== 90657
VEhFTg== 90658
aW5mZXI= 90659
IG1pc3BsYWNlZA== 90660
CU1vbm8= 90661
d2F5bmU= 90662
IGVkZ2Vk 90663
X25pY2s= 90664
IE1BUlQ= 90665
CXN0YXRlbWVudA== 90666
IEV2ZW50QnVz 90667
PkFib3V0 90668
IGJ1cmdlb25pbmc= 90669
IGNpY2xv 90670
TE9PUA== 90671
IGRlZnk= 90672
IGVsZW1lbnRUeXBl 90673
IGNvbnNlcnZhdGlzbQ== 90674
V2ViSG9zdA== 90675
LkRpc2FibGVk 90676
IGNsYXA= 90677
IEFsZWtz 90678
cm9yaW5n 90679
aXNzaW9uYWw= 90680
LUJvbGQ= 90681
SVJUSA== 90682
Lml0ZW1WaWV3 90683
cWluZw== 90684
P2tleQ== 90685
IFZlbm9t 90686
IGFudGlk 90687
IEZvcm1hdHRpbmc= 90688
UVB1c2hCdXR0b24= 90689
IEFzc2VtYmx5VGl0bGU= 90690
X3Jlc2VydmU= 90691
LkRpcmVjdA== 90692
QW5pbWU= 90693
IG1hdGVyaWFsbHk= 90694
IGFkanVuY3Q= 90695
LnNldFRvb2xUaXBUZXh0 90696
bGFzc2lhbg== 90697
KG5y 90698
IG5pbmfDum4= 90699
IG1pc3VuZGVyc3RhbmQ= 90700
IEFwcGx5aW5n 90701
X2NvbXBhdA== 90702
IG1peGlu 90703
IGplb3BhcmR5 90704
0YvQstCw0LXQvA== 90705
IGNvY2luYQ== 90706
X1dST05H 90707
QVRBUg== 90708
S0Q= 90709
IGNhdGVnb3J5TmFtZQ== 90710
SHR0cENvbnRleHQ= 90711
IGJ1YmI= 90712
IGFua2xlcw== 90713
b3dlcmluZw== 90714
RnJhbWV3b3Jrcw== 90715
IHNlZ3VuZG9z 90716
LkFzc2VtYmx5 90717
X0VudGl0eQ== 90718
SFE= 90719
IGZvdXJz 90720
IGZvcmZlaXR1cmU= 90721
dmxhbg== 90722
LWRvbWluYXRlZA== 90723
LWF3YXk= 90724
SUNJRU5U 90725
LlJlYWRCeXRl 90726
YW1heA== 90727
Lj0iPA== 90728
X3Nwcml0ZXM= 90729
IFJlbWFpbmluZw== 90730
TE9PRA== 90731
X3JlcXVpcmVtZW50cw== 90732
J2FydGljbGU= 90733
IFBvbXBlbw== 90734
IHTDqXI= 90735
IERyb3Bz 90736
SG9tZUFz 90737
SG9tZUFzVXA= 90738
w7ph 90739
Lm5hc2E= 90740
X2Jpbw== 90741
IFlvc2hp 90742
RWxlY3Ryb25pYw== 90743
IGpvc2U= 90744
IGludGVsaWc= 90745
ID8+Pjw/ 90746
PnshIQ== 90747
X3Byb3Y= 90748
PURC 90749
PCEtLQo= 90750
LWZsb2F0aW5n 90751
eXVt 90752
LkpNZW51SXRlbQ== 90753
IE5hdGlvbndpZGU= 90754
SW1wb3NzaWJsZQ== 90755
6K+m5oOF 90756
SmVycnk= 90757
IGRlc2Nhcmdhcg== 90758
7JW8 90759
RGVjcnlwdA== 90760
IHRlbXBlcmVk 90761
IGVrcw== 90762
w61jaWE= 90763
Lmxhcmdl 90764
IHVuZm9sZHM= 90765
IGh2ZXI= 90766
IEFWTA== 90767
LnR0 90768
4oKA 90769
PSUu 90770
IHRvcHBpbmdz 90771
IHN0b3V0 90772
IHNlbWluYWw= 90773
eGVz 90774
IE9VVEVS 90775
YWRybw== 90776
IHlvaw== 90777
IERlcmU= 90778
CWZyZW9wZW4= 90779
X2xuZw== 90780
Q2h1bmtz 90781
LmdldE9yRWxzZQ== 90782
KGVsbQ== 90783
ICgpKTsKCg== 90784
Q2VsZWJy 90785
X2NhcGFiaWxpdHk= 90786
IHNvY2llZGFk 90787
IGludGltaWRhdGU= 90788
IEJsYXplcnM= 90789
aWd0aA== 90790
ZW5kY29kZQ== 90791
VUlMREVS 90792
IEhhbm5pdHk= 90793
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 90794
INC40YHQv9C+0LvRjNC3 90795
IFRvb2s= 90796
IE1vdmVk 90797
IHByb250bw== 90798
IE1hcnRpbnM= 90799
RGF0YUV4Y2hhbmdl 90800
LlBvb2w= 90801
ZXVz 90802
IGpvYklk 90803
IEF4ZXM= 90804
IGhhbXN0cmluZw== 90805
LnJtaQ== 90806
RGF0YVRhc2s= 90807
IE1hZ2ljTW9jaw== 90808
IEdBUw== 90809
IE5hdw== 90810
IHNuZWw= 90811
X3NjZW5hcmlv 90812
IGVtYWlsQWRkcmVzcw== 90813
IE11c3M= 90814
IHBob2VuaXg= 90815
IGRlbnNpdGllcw== 90816
IE1hY09T 90817
cmVtYQ== 90818
IHRlc3RlcnM= 90819
KT87Cgo= 90820
IHB1cHM= 90821
bGFwcw== 90822
ZGRi 90823
L1BlYWs= 90824
IGJhY2tzdGFnZQ== 90825
IGJhY2tCdXR0b24= 90826
KG5hdg== 90827
eEFF 90828
c3RyY3B5 90829
aWNodGV0 90830
IFJpZg== 90831
4LiB4Lij 90832
IGhvbm91cmVk 90833
IGdyYXBwbGluZw== 90834
VmVydGV4QnVmZmVy 90835
LmdldEFjY291bnQ= 90836
LU5ldw== 90837
IG9wcHJlc3M= 90838
IHV0dGVyZWQ= 90839
IFVTQUdF 90840
X0xFQVZF 90841
X2NvbGxlY3Rpb25z 90842
X1V0aWw= 90843
KCIiKSk7Cg== 90844
IHF1aWV0ZXI= 90845
YCksCg== 90846
IHR5cGVJZA== 90847
IHNlcmlm 90848
c3RhbGs= 90849
IHByaW1hcnlTdGFnZQ== 90850
eEVB 90851
Ok5TTGF5b3V0 90852
X1JC 90853
X0FQUFM= 90854
U0tV 90855
KnNjYWxl 90856
IENvdWdhcg== 90857
CVJFVFVSTg== 90858
aWZpw6k= 90859
dGltaW5n 90860
IGlkb2xz 90861
656Y7Iqk 90862
4oCUaWY= 90863
KGZvcm1hdHRlcg== 90864
IGFtYWxn 90865
c2V0V2lkdGg= 90866
LG1pZA== 90867
b3JlYWw= 90868
LlJvbGVz 90869
IGRldmVs 90870
IGdldEluZGV4 90871
IHN0b29scw== 90872
IHNub3d5 90873
IGdyYW5kaQ== 90874
0Y/QtdC8 90875
aWd1aWVudGU= 90876
0LrQvtCy 90877
IEN1dHRlcg== 90878
cm9zY29wZQ== 90879
YWlyYQ== 90880
0YPRgNGB 90881
IHRhYmVs 90882
IGRlZmlhbmNl 90883
LlRvQm9vbGVhbg== 90884
IHBlcmc= 90885
LWNvbW11bml0eQ== 90886
IHB1cnN1aXRz 90887
KG1ldHJpY3M= 90888
TXVzbGlt 90889
IFJpeWFkaA== 90890
IOKCuQ== 90891
LldlYkVsZW1lbnQ= 90892
IEhhcmRlbg== 90893
IENvcnJ1cHRpb24= 90894
IEFl 90895
IFRhbm5lcg== 90896
IGluZGVi 90897
IENoYXJnaW5n 90898
X1BST0Q= 90899
IOKTmA== 90900
IGNlbnRlclg= 90901
dHlwaW5n 90902
IHV4 90903
IFRvZQ== 90904
CWxvb3A= 90905
Zmxv 90906
UmVnaW9uYWw= 90907
X2Fh 90908
IHZpZXdwb2ludHM= 90909
PnRoaXM= 90910
LXJlc291cmNlcw== 90911
IEltYW0= 90912
IFNoaXY= 90913
IGFuZHJh 90914
UkVRVUlSRUQ= 90915
IHNlZWRlZA== 90916
dW1vbnQ= 90917
IHRvYXN0ZXI= 90918
IGhvbWVzY2hvb2w= 90919
24zYsQ== 90920
X2V4dHJhY3Rvcg== 90921
bW9kZXM= 90922
IE11bmRv 90923
X2ZpcmVzdG9yZQ== 90924
IHB1bmlzaG1lbnRz 90925
IGJvcmVkb20= 90926
anVyaWVz 90927
LlNhZmU= 90928
YW1iaXF1ZQ== 90929
IGFkdmVyc2l0eQ== 90930
VUxFUg== 90931
IGFuYWxzZXg= 90932
bW9ycGg= 90933
IE9tbg== 90934
KCkiPgo= 90935
IEdJVkVO 90936
U3o= 90937
IG5vdW5z 90938
IHF1YW0= 90939
IFdpa2ltZWRpYQ== 90940
IGR6aWV3Y3o= 90941
LmNvbW11bmlj 90942
Q291cmllcg== 90943
Qm9uZA== 90944
LmNvbW11bmljYXRpb24= 90945
LlByZWZlcmVuY2U= 90946
c2xpZGVEb3du 90947
L2djYw== 90948
IHZpYmVz 90949
QVBJVmlldw== 90950
IE92ZXJzaWdodA== 90951
X3Zr 90952
IGVtcHJlcw== 90953
IGFyaXNlbg== 90954
ICovKQ== 90955
KCcoJw== 90956
IGJ0dw== 90957
IGNvbmV4acOzbg== 90958
IFV6YmVr 90959
IOyEnA== 90960
IGltYWdlVVJM 90961
44Kq 90962
c3RvcHBlZA== 90963
IFdvdWxkbg== 90964
IENoZXc= 90965
Z3LDqQ== 90966
IHRydXRoZnVs 90967
IFRyYW5zcGFyZW50 90968
KHNlcnY= 90969
IE1jS2F5 90970
PXJlYWQ= 90971
IFNhbw== 90972
CUdyaWQ= 90973
IGluZHVjZXM= 90974
Lmxpc3RGaWxlcw== 90975
IGNhcnJlcmE= 90976
IGljb25OYW1l 90977
IENhcmx0b24= 90978
LkV2ZW50VHlwZQ== 90979
IGRyYXBlZA== 90980
X1NBTVBMRVM= 90981
KGVzdA== 90982
IFJ1aXo= 90983
IGNhcHRhaW5z 90984
IG1hZmlh 90985
IFJhcGhhZWw= 90986
IEdBUA== 90987
aW1wYW4= 90988
Y29taWM= 90989
IG1hbnRlbg== 90990
JEw= 90991
IGFmdGVybWFya2V0 90992
15c= 90993
IENm 90994
CXRpbGU= 90995
QXBwU3RhdGU= 90996
IHdob2xlc2FsZXJz 90997
bG93ZXN0 90998
RGVtb2NyYXRpYw== 90999
IHBvd2VyaW5n 91000
YXBvdA== 91001
IENvcnRleA== 91002
KHNpbmdsZQ== 91003
b3BoeXNpY2Fs 91004
LnV0Zg== 91005
77yf44CN 91006
IHRhcmVh 91007
RXF1aXA= 91008
IGtsaWs= 91009
IHJ1YQ== 91010
IGFWYWx1ZQ== 91011
IE1pbmVy 91012
IFZlZw== 91013
YW55bA== 91014
Q293 91015
QGM= 91016
X0xPQURFRA== 91017
IEFITA== 91018
d2FrZQ== 91019
LkxvZ0luZm9ybWF0aW9u 91020
KGNhdGVnb3JpZXM= 91021
IFFVRVNUSU9O 91022
LnVtbA== 91023
IENyZWF0ZU1hcA== 91024
bWVlcg== 91025
IHJlbmNvbnRyZXI= 91026
X3N1 91027
IGF0bGVhc3Q= 91028
KFByb3BlcnR5TmFtZQ== 91029
IFlhbw== 91030
IEhhdXB0 91031
QmxvY2tTaXpl 91032
IFNBQw== 91033
IExlZ3M= 91034
Yml0ZQ== 91035
IGxvZ2FyaXRo 91036
IElNZXNzYWdl 91037
QmFja2Ryb3A= 91038
IGdkaw== 91039
7Jy866m0 91040
LmV4Y2x1ZGU= 91041
QURPUw== 91042
LXNoaWZ0 91043
YXRobGV0ZQ== 91044
X2NvbWJpbmVk 91045
IHJlYmF0ZQ== 91046
IHBhcmQ= 91047
IGltcGVkYW5jZQ== 91048
cmVhdQ== 91049
Xw0KDQo= 91050
IGRhZ2Vu 91051
a2VsYXM= 91052
IGluZ3Jlc2Fy 91053
IEJSQU5E 91054
Lm1rZGlycw== 91055
IHJlaWduaW5n 91056
VGFsa2luZw== 91057
LyoqCgo= 91058
X1JFU09VUkNFUw== 91059
IFBST0dNRU0= 91060
IGRhdGFTaXpl 91061
44Og 91062
ZGVueQ== 91063
SVJT 91064
IHRlbGV2aXM= 91065
PV8oJw== 91066
ZWdpcw== 91067
PD8s 91068
IHVwc2V0dGluZw== 91069
IHNhdWNlcw== 91070
IHB1ZXJ0bw== 91071
IFZvZ3Vl 91072
aWRpbmU= 91073
IEdyZWVud29vZA== 91074
emlvbg== 91075
L3F0 91076
5bGA 91077
Lmxhbmd1YWdlcw== 91078
IFBsYXlib3k= 91079
b25uZW1lbnQ= 91080
IFBvc2l0aW9uZWQ= 91081
IOS4uw== 91082
IEZyaXR6 91083
SW5pdGlhbGx5 91084
bm9kZVZhbHVl 91085
X1RSSUFOR0xFUw== 91086
LWJhY2tlbmQ= 91087
dG9JU09TdHJpbmc= 91088
IEdvdmVybm9ycw== 91089
WUxPTg== 91090
Lk9SREVS 91091
RE9J 91092
IENoZXZyb24= 91093
IGRlY2tpbmc= 91094
IFNoYXJpYQ== 91095
b3RoZXJtYWw= 91096
RW1wdHlFbnRyaWVz 91097
KEluaXRpYWxpemVk 91098
ZG9yZg== 91099
Lmx1 91100
KFJvb20= 91101
LlllbGxvdw== 91102
IEFicmFt 91103
X2xt 91104
INC90LDQvw== 91105
IFRIQU4= 91106
fi1+LX4tfi0= 91107
Lk92ZXJyaWRl 91108
IFNWTQ== 91109
IFN1c3BlbnNpb24= 91110
IGFic29yYnM= 91111
X3RyYWZmaWM= 91112
ICI+Ig== 91113
LmZpdHM= 91114
IHJlaW5mb3JjaW5n 91115
IG1veWVu 91116
ZXJlcg== 91117
IFJvc2Vuc3RlaW4= 91118
IFdlc3Rvbg== 91119
IGNvbmZpbmVz 91120
T0xB 91121
b3JyYWluZQ== 91122
X0dSUA== 91123
IHN0cmFwcGVk 91124
IG1pbmdsZQ== 91125
CVZr 91126
IG5vc3RyYQ== 91127
IGFjdHJlc3Nlcw== 91128
IFNhbW15 91129
bGlnbmU= 91130
SUdITElHSFQ= 91131
IHN0dXA= 91132
aWN0b3J5 91133
IGNvbnZpY3Q= 91134
IHN1cHA= 91135
cGVvbg== 91136
dnJpZXI= 91137
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= 91138
IHRyb3R6 91139
IG1lbHRkb3du 91140
YXJrZXJz 91141
LlNlbGVjdENvbW1hbmQ= 91142
IExpYWJpbGl0eQ== 91143
IEJlY2FtZQ== 91144
IGx1Y2tpbHk= 91145
INC/0L7RgA== 91146
IHJlYXNzdXJl 91147
IENvbnRyYXN0 91148
IEF1ZHJleQ== 91149
IENvbnN1bHRhbnRz 91150
IFF1ZW50aW4= 91151
LU93bmVk 91152
b2NyaW4= 91153
X1NUUklQ 91154
IHJldGFsaQ== 91155
IHJhbGx5aW5n 91156
IFJlcXVlc3RDb250ZXh0 91157
IG1hc3NhYw== 91158
CWdy 91159
TEVF 91160
IGNhxYI= 91161
IEpvYW5uYQ== 91162
4butYQ== 91163
aGho 91164
IHNxbFNlc3Npb24= 91165
xLFrbA== 91166
Q29tcG9zZXI= 91167
IGN1cnJlbnRQbGF5ZXI= 91168
YWdpbmk= 91169
IEJhcmJhcg== 91170
IEhlbGxvV29ybGQ= 91171
bG9vbWJlcmc= 91172
LkhlcmU= 91173
IGRpc2d1c3RlZA== 91174
CQkJCQkJICAgIA== 91175
b2t1cw== 91176
VmV0ZXI= 91177
IGNob3Bz 91178
IEZPUldBUkQ= 91179
IEVpZw== 91180
IFBhcnRpYWxWaWV3 91181
IGltcG9zcw== 91182
IGNvbnNlcXVlbnRpYWw= 91183
IFsnIw== 91184
CWxvZ2dpbmc= 91185
IEVsaXM= 91186
cHJvY3M= 91187
LDwv 91188
X3BpbnM= 91189
XERvY3RyaW5l 91190
VXZz 91191
IEdJVA== 91192
IHRhaA== 91193
KHJ1bGVz 91194
Y3JlYXRlRnJvbQ== 91195
ICctJykK 91196
aGFuZGxpbmc= 91197
ZXh0ZXJuYWxBY3Rpb25Db2Rl 91198
Uk9EVUNUSU9O 91199
Rm9yUmVzb3VyY2U= 91200
c2J1cmc= 91201
PFRleHRWaWV3 91202
dGhpbmthYmxl 91203
YW5nbGluZw== 91204
ICJ9XA== 91205
UFJT 91206
QXBwcm92YWw= 91207
IGtsaWVudA== 91208
bm91bg== 91209
IERpYW1vbmRz 91210
SEc= 91211
IFRyaWJhbA== 91212
LnB4 91213
IHByb3BOYW1l 91214
IGhlbHk= 91215
0LvQuNGH 91216
IEJvdXRpcXVl 91217
Iik7fQo= 91218
L2hvc3Q= 91219
IHN0YXR1c0Jhcg== 91220
PkRhdGE= 91221
IGRpc2NvbnRlbnQ= 91222
IGZyYWls 91223
LmVsZW1lbnRBdA== 91224
IGVtYW5j 91225
CWZ1bg== 91226
YXR0bGVz 91227
IHByb3B1bHNpb24= 91228
IGludGVyY2hhbmdlYWJsZQ== 91229
IFRhbWJpw6lu 91230
IHZlbmVy 91231
X0xPV0VS 91232
IHBkbw== 91233
IGRldGVyZ2VudA== 91234
IHRhdmVybg== 91235
VmVudWU= 91236
Lmphc3Blcg== 91237
eXR0 91238
IEppaGFk 91239
4oCZw6A= 91240
IG1lZGlhUGxheWVy 91241
P3A= 91242
cGNm 91243
YW5kb25lZA== 91244
IHJlY2ViZXI= 91245
T1RQ 91246
KGlPUw== 91247
KCckew== 91248
UHRz 91249
IG1hbmFnZXJpYWw= 91250
IFR1ZA== 91251
IFdFTEw= 91252
b3pl 91253
IEFudG9pbmU= 91254
IFxcCg== 91255
IFZlY3Q= 91256
IFdpbWJsZWRvbg== 91257
aXNtZXQ= 91258
IGJvdGhlcmluZw== 91259
aW9zaXM= 91260
Z2V0TWV0aG9k 91261
IGlucHV0RGF0YQ== 91262
IEJpbmRlcg== 91263
IGRjdA== 91264
w6Fsbg== 91265
X0JPTEQ= 91266
IEp1Z2VuZA== 91267
IEJlZ2lubmVycw== 91268
aW9tcw== 91269
IHJlbGVudGxlc3NseQ== 91270
IE1vbmRheXM= 91271
5LyY 91272
VG9tb3Jyb3c= 91273
IFNhbXA= 91274
XFBlcnNpc3RlbmNl 91275
TUFTVEVS 91276
KHByZWRpY3Rpb25z 91277
KG51bWVybw== 91278
LnR3aXRjaA== 91279
LlJlc3RyaWN0 91280
IFpa 91281
IE1MTQ== 91282
LlNtYWxs 91283
XWJ5dGU= 91284
IFZpZXdQYWdlcg== 91285
IEFnZW5jaWVz 91286
IHBhcnRpY2lwYXRlcw== 91287
IGluaXRXaXRoU3R5bGU= 91288
JVg= 91289
IGAs 91290
Lk9iag== 91291
ID8iKTsK 91292
Q2FyZWVy 91293
IDwlPQ== 91294
a3Vs 91295
Q3BwSQ== 91296
IE11c2hyb29t 91297
dXJhdA== 91298
bWlh 91299
Q2Q= 91300
YXJkdWlubw== 91301
IGNvdW50cnlDb2Rl 91302
X3BsYWNlbWVudA== 91303
KCI9PT09PT09PT09PT09PT09 91304
LWJlbA== 91305
QXNzZXJ0aW9ucw== 91306
IHByw7N4aW1h 91307
KCkiKQo= 91308
X2Vn 91309
U1NJUA== 91310
dXpl 91311
cGxhY2Vy 91312
YW1iaWd1b3Vz 91313
X0lOSVRJQUxJWkVS 91314
IEhhdHM= 91315
IEdPT0dMRQ== 91316
IGFnaXRhdGlvbg== 91317
KG11dGV4 91318
SElHSA== 91319
OiIp 91320
IGludmFkZXJz 91321
ICl9Cgo= 91322
Lm1hbnVhbA== 91323
IFNpZW1lbnM= 91324
CUpQYW5lbA== 91325
YmluZHVuZw== 91326
ZWNlcmE= 91327
L21ldA== 91328
IMOpYw== 91329
KHN0YXRpb24= 91330
IHBvc2ljacOzbg== 91331
X2lzc3Vlcw== 91332
X2FsaWFzZXM= 91333
X3RvcG9sb2d5 91334
IEF1dG9kZXNr 91335
QWNrbm93bGVk 91336
ISpcCg== 91337
IEZyZWlnaHQ= 91338
IEZYTUxMb2FkZXI= 91339
aWNoZWw= 91340
KENoYXRDb2xvcg== 91341
IGRpc3NvY2k= 91342
IGFuYWxvZ3Vl 91343
PHVzaXpl 91344
LWV2 91345
IHRlbmRy 91346
PkFsbA== 91347
IFVTRVJT 91348
LnJlc3A= 91349
X2ludGVncmF0aW9u 91350
RGlzcGxheVN0eWxl 91351
RkFJTFVSRQ== 91352
0YfQuNGC 91353
aWxkZWQ= 91354
X3NlbWFwaG9yZQ== 91355
YWNhZGVtaWM= 91356
IHNjbGVyb3Npcw== 91357
RmFs 91358
LHN0 91359
YD0= 91360
aWZ0b24= 91361
IHN1YnN0aXR1dGVz 91362
IFN1cHBvcnRlcnM= 91363
YXBwbGljYW50 91364
KGt2 91365
IEJlcm11ZGE= 91366
IGRpc2NyZXBhbmNpZXM= 91367
LlNvbGlk 91368
d2VlbmV5 91369
IGd1bA== 91370
IGZpbGV0eXBl 91371
IHJlc3VsdGF0 91372
U2VuZGVySWQ= 91373
IGdlem9jaHQ= 91374
IEJlcmtzaGlyZQ== 91375
ICgiPA== 91376
KG1s 91377
KHNoaWZ0 91378
X1JFRElSRUNU 91379
T0xPTg== 91380
L2Jyb3dzZQ== 91381
Ok5TTWFrZVJhbmdl 91382
IHdhaXZl 91383
IGV4Y2U= 91384
IGNhdGFsb2dz 91385
5Lmm 91386
aWxsaW9ucw== 91387
LkdldEN1cnJlbnRNZXRob2Q= 91388
IGJpbGluZ3VhbA== 91389
IENhc2NhZGVUeXBl 91390
CVRyYW5zZm9ybQ== 91391
X0NVU1RPTUVS 91392
aXNpZnk= 91393
INCx0Ls= 91394
IFdob2V2ZXI= 91395
IEVBUg== 91396
IFs9Ww== 91397
INC80L7QttC90L4= 91398
IGphcmRpbg== 91399
QHNob3c= 91400
IGhlaXJz 91401
IGFiYW5kb25tZW50 91402
IFRyYW5zY3JpcHQ= 91403
XV4= 91404
OlNldFBvaW50 91405
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo= 91406
IEZhY3Rpb24= 91407
KGVudGl0aWVz 91408
ZmFjdGlvbg== 91409
bXR4 91410
X3JlY2FsbA== 91411
Lk5VTEw= 91412
Lm9wdGlvbmFs 91413
KHByZWRpY3Rpb24= 91414
QUdFTlQ= 91415
IPCfmIA= 91416
4oCZeQ== 91417
4oCZdXRpbA== 91418
IGFuZ3N0 91419
LkV4cGVyaW1lbnRhbA== 91420
aG9vdA== 91421
YXN5YXJhaw== 91422
YXV0b3BsYXk= 91423
IFNwbGFzaFNjcmVlbg== 91424
IGhlY3RpYw== 91425
IG1ldGljdWxvdXNseQ== 91426
IGNvbWVy 91427
S2VpdGg= 91428
IGZyYXNl 91429
X1VOSVFVRQ== 91430
Lk1hZ2VudGE= 91431
KE1heA== 91432
IHNjYWxlWQ== 91433
IHB1dHQ= 91434
KElG 91435
IEFQUExF 91436
UG9ybm8= 91437
LmFkZENlbGw= 91438
IG1vbHQ= 91439
Y2hpbXA= 91440
IGxlZ2dpbmdz 91441
IGZsb3A= 91442
4oCZaHVp 91443
UlRPUw== 91444
L3NwYW4= 91445
LmJlZA== 91446
LkxvZ2lj 91447
IHVudHJhbnNsYXRlZA== 91448
Q0xFQVI= 91449
O2xlZnQ= 91450
IEJGUw== 91451
LWdyb3Vwcw== 91452
dG9vaw== 91453
X2FjY2VwdGVk 91454
IGNhc2hpZXI= 91455
ZXZlbnRJZA== 91456
IGRvd25ncmFkZQ== 91457
CQkJCQkJCQkJCQkK 91458
0LDQvdC40Y4= 91459
w6RuZGU= 91460
IGNvdW5jaWxsb3I= 91461
IGRyZWQ= 91462
ZFQ= 91463
V1JBUFBFUg== 91464
Lm9s 91465
5LiA6aG1 91466
TUVB 91467
IGtpbmV0aWNz 91468
IGptcA== 91469
X2ZsaWdodA== 91470
RmVhcg== 91471
IENoYW5lbA== 91472
X21pZ3JhdGlvbg== 91473
aGRs 91474
ZXJlcXVpc2l0ZQ== 91475
LnJhcg== 91476
LU9uZQ== 91477
IHNoZXBoZXJk 91478
LmVhc2luZw== 91479
KGRlc2NyaXB0b3I= 91480
IHN1YnRvdGFs 91481
44OT 91482
Q29tcGlsZWQ= 91483
IENvbHQ= 91484
ZGxl 91485
L21vY2s= 91486
KXJvdw== 91487
IHJlc2V0dA== 91488
dGVybw== 91489
IGFlcm9iaWM= 91490
LmludHJv 91491
IGNoZWNrYm94ZXM= 91492
IE1jQ2FydG5leQ== 91493
IENseWRl 91494
77yM5bm2 91495
Y29vbGRvd24= 91496
LWluc3RhZ3JhbQ== 91497
IE1QRw== 91498
IExlaXN1cmU= 91499
IG5hd2V0 91500
IE5YVA== 91501
UmVndWxhckV4cHJlc3Npb24= 91502
IHJhdmU= 91503
QklMTA== 91504
IGJhcnRlbmRlcg== 91505
RW5sYXJnZQ== 91506
IHZhaXM= 91507
IDoKCgoK 91508
LkVuZHBvaW50 91509
ICIsDQo= 91510
fX0iPnt7JA== 91511
dHJlZXM= 91512
LmVuZw== 91513
KmxvZw== 91514
OltdLAo= 91515
IGJhdHRhbGlvbg== 91516
U3ViamVjdHM= 91517
IGV4cG9zaXRpb24= 91518
IFRvYXN0cg== 91519
IHRvcExldmVs 91520
IENFTA== 91521
IGd1YmVybg== 91522
dW5zdWJzY3JpYmU= 91523
Y29uYQ== 91524
X2FwcHJveA== 91525
VFo= 91526
IFRyZWVTZXQ= 91527
LmNvbW11bml0eQ== 91528
IG5hcnJvd2Vy 91529
KEV4cGVjdGVk 91530
Q2xy 91531
IGdvcmU= 91532
IGFjcXVpdHRlZA== 91533
IEVVUk8= 91534
G1s= 91535
IHJlcHVibGljYW4= 91536
IGF1dG9iaW9ncmFwaHk= 91537
X2Zkcw== 91538
Q29sbGFwc2Vk 91539
IA0KIA0K 91540
LXBpbGxz 91541
TUJFRA== 91542
IGlOZEV4 91543
IHJlc3BvbnNlVHlwZQ== 91544
Z2xmdw== 91545
LXR1cm5lZA== 91546
5Y+R5biD 91547
CUJvb2xlYW4= 91548
Lk9y 91549
aW5pYQ== 91550
IGhvdmVyZWQ= 91551
IHNvcnRlcg== 91552
IE5o 91553
IEV4ZXJjaXNlcw== 91554
bGVtZW50cw== 91555
aWRvbg== 91556
VG9l 91557
IHLDqWbDqQ== 91558
U1NGV29ya2Jvb2s= 91559
IG9yZ2FuaXNlcnM= 91560
IHJlc3VsdE1hcA== 91561
X0hPUg== 91562
RG9k 91563
TG9jYWxTdG9yYWdl 91564
IGpzb25SZXNwb25zZQ== 91565
QXV0aFNlcnZpY2U= 91566
IHNtZQ== 91567
ZW1icm9z 91568
IGxvYmJ5aXN0 91569
b2d1aQ== 91570
LnNwaW4= 91571
IENvcnJlY3Rpb25z 91572
X1JBRA== 91573
IExTTQ== 91574
KGN1cnJlbmN5 91575
IOaA 91576
IHByZWZldGNo 91577
LkhlYWQ= 91578
LXJlYWRlcg== 91579
IFJveg== 91580
CW1vdXNl 91581
IFRMQw== 91582
IFFUYWJsZVdpZGdldEl0ZW0= 91583
IFNUT1JBR0U= 91584
YW5uZWVy 91585
IOyXkA== 91586
YWNlbg== 91587
U1g= 91588
SW1hZ2VSZWxhdGlvbg== 91589
IHJlc3VyZ2VuY2U= 91590
aXp6eQ== 91591
aWxvZ3Vl 91592
SVZBTA== 91593
IHNtYWNr 91594
cnJoYQ== 91595
KFBBUkFN 91596
IUk= 91597
IE1lY2g= 91598
IElNYXBwZXI= 91599
IGdpc3Q= 91600
IFBPRA== 91601
dm9yZQ== 91602
dWxhw6fDo28= 91603
ICwt 91604
IGludm9sdW50YXJ5 91605
UVJT 91606
PXRpdGxl 91607
IEJpb20= 91608
IFNoZWxsZXk= 91609
IENTUA== 91610
UGVz 91611
ZHJvcHM= 91612
INGD0YHQv9C10Yg= 91613
ZGl2ZXM= 91614
IVsK 91615
IExlYXN0 91616
IGtha28= 91617
IE1vZGVsbw== 91618
IGZ1bmN0aW9uTmFtZQ== 91619
IGNob2tpbmc= 91620
IGRlZm9ybWF0aW9u 91621
JywnJyk7Cg== 91622
Y2HDp8Ojbw== 91623
IHNxdWlycmVs 91624
c2V0QmFja2dyb3VuZA== 91625
QnJva2Vu 91626
cG9saXQ= 91627
Tm9uY2U= 91628
IGtleWVk 91629
TWVzaFBybw== 91630
LnVzZXJJbnRlcmFjdGlvbkVuYWJsZWQ= 91631
IGZsdXNoaW5n 91632
IGJwcA== 91633
IEFuZ2xpYw== 91634
VHJvdQ== 91635
IFdhbHRlcnM= 91636
IHN0dXR0ZXI= 91637
SGlw 91638
X3dhcg== 91639
aXZlbWVudA== 91640
Q29ybg== 91641
IHVuZHVl 91642
YXBhdGthbg== 91643
IG1pbmRlbg== 91644
c2lnbmlmaWNhbnQ= 91645
KHF1YW50aXR5 91646
JGluc2VydA== 91647
IEFMRVJU 91648
LlVuaWNvZGU= 91649
aWhu 91650
XTo9 91651
IHBpbk1vZGU= 91652
IGZyYWlz 91653
aW50ZXJwcmV0ZXI= 91654
J2FjdGlvbg== 91655
IGJsZWliZW4= 91656
obQ= 91657
cm93c2Vycw== 91658
R0lU 91659
X0RJUlM= 91660
Rm9yZXZlcg== 91661
IFBkZlBDZWxs 91662
fG0= 91663
LnNldEhlaWdodA== 91664
IGZvcmVhcm0= 91665
IGJhdHRsZWdyb3VuZA== 91666
INC/0L7RgdC70LXQtA== 91667
IEhhdGg= 91668
IEF1dGhvcml6ZWQ= 91669
IGNvbmZlcnJlZA== 91670
IEJPVFRPTQ== 91671
LmdldEZsb2F0 91672
b2dyYXBoZWQ= 91673
YXJkeQ== 91674
IHNlcnZpw6dv 91675
b3RveGlj 91676
L2F1dGhlbnRpY2F0aW9u 91677
IHJlcHLDqXNlbnQ= 91678
IGNvbXBsZXhpb24= 91679
CUNvbW1vbg== 91680
X2Jo 91681
V2hvbGU= 91682
SW1hZ2VEYXRh 91683
IHRpbms= 91684
ZXF1YWxUbw== 91685
IFRIUg== 91686
IGRlbHRhcw== 91687
IEFHRQ== 91688
aXphZG9y 91689
YWRtaW5pc3RyYXRpb24= 91690
cXVldHM= 91691
X2ZpbGxlZA== 91692
IEjDpA== 91693
YWxsb2Nh 91694
IEJvb25l 91695
CWxjZA== 91696
Rm9sZGVyUGF0aA== 91697
LlJhaXNl 91698
XyN7 91699
ZXJ0aW5v 91700
IFRocm9uZQ== 91701
4K6/ 91702
b3hldGluZQ== 91703
cHJheQ== 91704
IGRpbGlnZW50bHk= 91705
IEFyY2hpZQ== 91706
Lm11bHRpcGFydA== 91707
IHNlbw== 91708
LmdldFByb2plY3Q= 91709
IHBhag== 91710
Y2xlcm9zaXM= 91711
YW1lcm9u 91712
IHRvdXJlZA== 91713
IG5pa2U= 91714
IEJha2VyeQ== 91715
LHBhcmVudA== 91716
X1RFTQ== 91717
U3BhdGlhbA== 91718
bGFwcGluZw== 91719
UHJvZHVjZXNSZXNwb25zZVR5cGU= 91720
KGJhbGFuY2U= 91721
SHVuZHJlZHM= 91722
LXRlcm1pbmFs 91723
IkRv 91724
Q29udGVudFNpemU= 91725
IGJiYw== 91726
IGTDqWNvdXZyaXI= 91727
dXRpbHVz 91728
LnVuZG8= 91729
LG91dHB1dA== 91730
Z3JvdXBOYW1l 91731
JG1heA== 91732
IEFsbGE= 91733
INC60LDRgNGC 91734
Lk9ORQ== 91735
X2RlY2lzaW9u 91736
RUVFRQ== 91737
IHhPZmZzZXQ= 91738
56o= 91739
IHJ1bmF3YXk= 91740
IGhhbmRqb2I= 91741
IGdlbml0YWxz 91742
KGpUZXh0RmllbGQ= 91743
LnJhZGlhbnM= 91744
IFBhZHJlcw== 91745
ZGVwZW5kZW5jZQ== 91746
IHN3YWxsb3dpbmc= 91747
cm90ZWlu 91748
IGZsZWV0cw== 91749
IGNhcmF0dGVy 91750
KGNhbg== 91751
IEZsb3JhbA== 91752
X01zZw== 91753
IGRlY2xhcmFjacOzbg== 91754
bHNydQ== 91755
c2Nob29scw== 91756
IGRlbGVnYXRlZA== 91757
IFBlbmFs 91758
IENoZXJu 91759
U21hcnRQb2ludGVy 91760
c3Rvcnlib29r 91761
IE55bG9u 91762
5oCd 91763
X0xFU1M= 91764
L2FkZHJlc3M= 91765
IENPUlM= 91766
IOydtOuvuA== 91767
IG1vZGE= 91768
bWRw 91769
IGRlcmJ5 91770
IFBoYXJtYWNldXRpY2Fscw== 91771
IGV5ZWQ= 91772
X2NwdXM= 91773
6KaL 91774
fHwK 91775
Lm1hZw== 91776
KFFM 91777
IENpdmlsaXphdGlvbg== 91778
6Yw= 91779
X0RlcA== 91780
IHN3ZWFyaW5n 91781
IFNob3J0cw== 91782
dWViYXM= 91783
IGRlbGluZQ== 91784
IEFkdmlzb3Jz 91785
IOyeiOuLpA== 91786
X0ZJTkU= 91787
fSk6 91788
LGFzc2lnbg== 91789
IFBDSWU= 91790
e3t7 91791
U2Np 91792
IGFtYm9z 91793
aWxlZW4= 91794
IHR1bmVy 91795
IHBhcmFtTmFtZQ== 91796
LHRvdGFs 91797
KExvY2FsRGF0ZQ== 91798
IHNwcA== 91799
IGVycm9yZXM= 91800
IEhlbHBpbmc= 91801
X21lcmdlZA== 91802
LnRpbWVTY2FsZQ== 91803
X0VMRU0= 91804
X1NPTA== 91805
IGF2ZW50 91806
PGQ= 91807
SnVuaW9y 91808
CWJhcg== 91809
Lmx2 91810
IOy5 91811
PXd4 91812
IG1pcmFjdWxvdXM= 91813
IFJhbmRvbUZvcmVzdA== 91814
IEZyYW5rZW4= 91815
YGAs 91816
KEluaXRpYWxpemVkVHlwZUluZm8= 91817
IHN1cGVyaGVyb2Vz 91818
IGFuc2libGU= 91819
X1R5cGVEZWY= 91820
IFBlcm0= 91821
T0xFUg== 91822
R3Jhbg== 91823
LW5vdGlmaWNhdGlvbg== 91824
IGtheg== 91825
IGV4aGlsYXI= 91826
c2VydGVy 91827
IHN0b3JlZnJvbnQ= 91828
X2VuZHM= 91829
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK 91830
CWdpdA== 91831
RFNQ 91832
Q0hBSU4= 91833
rLQ= 91834
SW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbg== 91835
IFNseQ== 91836
77yaPA== 91837
QnJpdGFpbg== 91838
L3NsaWRlcg== 91839
IHptcQ== 91840
IGJhag== 91841
YnJlZA== 91842
LlZBTFVF 91843
IGdyaWV2aW5n 91844
IHBvcm7DtHM= 91845
aWd1YQ== 91846
SU5DTFVERUQ= 91847
V2FrZQ== 91848
Y2Jk 91849
IE1vbmdvbGlh 91850
aW52aXNpYmxl 91851
IGNvcnJlY3RpdmU= 91852
IGNlbnRlcnBpZWNl 91853
Q2F1Z2h0 91854
IGthcmFrdGVy 91855
YWxtw7Y= 91856
IGJlbHVt 91857
IGFkam9pbmluZw== 91858
Pygi 91859
IFZpc3VhbGl6YXRpb24= 91860
a2tl 91861
aWZpY2Fkb3M= 91862
c3Bk 91863
X0NCQw== 91864
LUxhbmd1YWdl 91865
IHN0aWw= 91866
b3JldGljYWw= 91867
KGNvbXBsZXRpb24= 91868
IFZlcmbDvGd1bmc= 91869
X1RyZWU= 91870
cmlwcGxpbmc= 91871
LlJlbW92ZUVtcHR5RW50cmllcw== 91872
IFRBWA== 91873
CUNvZGU= 91874
5YuV 91875
dXJnYQ== 91876
INGD0LbQtQ== 91877
IGFpZGVy 91878
IFByZXNjb3R0 91879
IGZpbGFtZW50 91880
IC0tLS0tLS0tLS0tLS0tLS0tLS0t 91881
dGhlcm9z 91882
0LXRgNCw 91883
ZGViaWFu 91884
w6RobA== 91885
b2xhaA== 91886
X1VOSVRT 91887
QXJr 91888
TW91bnRlZA== 91889
LlRyaW1TcGFjZQ== 91890
LmdldE51bWJlcg== 91891
X2VvZg== 91892
Lm5y 91893
IFNIQVJFUw== 91894
aWxhdGVy 91895
IHdpY2h0 91896
X2NvbXBhcmlzb24= 91897
ICki 91898
Y2xpbmljYWw= 91899
IFRFbnRpdHk= 91900
dmVuZXM= 91901
LmdldFByb3BlcnRpZXM= 91902
IHJlbGF0 91903
IGFubm95YW5jZQ== 91904
YmVi 91905
IGFuZXN0aGVzaWE= 91906
X2ludGVydmFscw== 91907
X2Zo 91908
IHN1ZG9rdQ== 91909
IGRpc2Vu 91910
Y29ubmVjdGluZw== 91911
IG9h 91912
IOKWkQ== 91913
WkY= 91914
IGN1eg== 91915
U09FVkVS 91916
IE3DtmdsaWNoa2VpdA== 91917
Y2hhcnRlZA== 91918
IGhhc2hlcg== 91919
IEtlZXBz 91920
QUVB 91921
CWxvZ3J1cw== 91922
CU5hbWVzcGFjZQ== 91923
b3J0aG8= 91924
JGFjdGlvbg== 91925
IFJvYw== 91926
Jyk7Pz4i 91927
IFBST1Q= 91928
QGFwaQ== 91929
Y2hzZWw= 91930
L2dpZg== 91931
KEhhbmRsZQ== 91932
IGFudW5jaQ== 91933
L3B5 91934
aW52YWxpZGF0ZQ== 91935
IE1FUA== 91936
dGVtcw== 91937
O10v 91938
6IM= 91939
6L+Q 91940
IHRhY28= 91941
QURW 91942
aHBw 91943
QnV0dG9uQ2xpY2s= 91944
IGJyaW5nZW4= 91945
IFRJTUVPVVQ= 91946
IGFzdHJvbG9neQ== 91947
ZGF0ZUZvcm1hdA== 91948
T0dSQVBI 91949
RmlsZVN0cmVhbQ== 91950
5a6h5qC4 91951
LkNvbW0= 91952
J2I= 91953
IEdFVEdMT0JBTA== 91954
ZWF0aW5n 91955
YW5kZXN0 91956
IFNFVFVQ 91957
IEFkdmFuY2Vz 91958
LnNjcm9sbEhlaWdodA== 91959
QVpF 91960
ZW5kdGltZQ== 91961
d2VhdGhlcm1hcA== 91962
IE1hbmdv 91963
IFJJUA== 91964
IGl0ZXJhdG9ycw== 91965
IGNvYXg= 91966
IOWbvg== 91967
PG1haW4= 91968
cm1z 91969
cGNi 91970
IHZhY2NpbmF0aW9ucw== 91971
IGRpc2FncmVlbWVudHM= 91972
CWV2ZW50cw== 91973
PExvY2F0aW9u 91974
Lk1lYXN1cmU= 91975
IHF1ZWRh 91976
IHNpZ25hbGxpbmc= 91977
IGRlZ3JhZGVk 91978
IEFtZWxpYQ== 91979
LWNvbmZpZGVuY2U= 91980
ZGJOYW1l 91981
X2luYWN0aXZl 91982
b25hdGlvbg== 91983
IHBlcmlwaGVyYWxz 91984
5qC3 91985
U1VQRVI= 91986
J1I= 91987
LndheQ== 91988
UExBSU4= 91989
IEVuZ2Vs 91990
cmVsYXk= 91991
IGRlYmlkbw== 91992
IFRyb3Rza3k= 91993
6Iw= 91994
INCw0LTRgNC10YE= 91995
CXVzZXJz 91996
ZXRjaHVw 91997
dGVw 91998
IG5ld1Bvc2l0aW9u 91999
IHdhaXZlcnM= 92000
ZWRpY2luZQ== 92001
IHRhbmdnYWw= 92002
IGFtbW9uaWE= 92003
LWRldA== 92004
L2V4ZWM= 92005
KHBhZGRpbmc= 92006
IFNob3BwaW5nQ2FydA== 92007
IFByaW50Zg== 92008
SGFuZGxlZA== 92009
IE5BTUVT 92010
KGNsb2Nr 92011
IHt9Og== 92012
IHNpbXM= 92013
IFRlYXJz 92014
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 92015
X0NBTk5PVA== 92016
TEVHUk8= 92017
LlNldFBhcmVudA== 92018
5YW25Lit 92019
IGVycmV1cg== 92020
aXBp 92021
PEV4cHJlc3Npb24= 92022
LnRpbWVsaW5l 92023
ICdfJyw= 92024
IGNvYXRpbmdz 92025
IHVzZUZvcm0= 92026
LnRr 92027
IEZlYXN0 92028
LlNL 92029
w6RzZW50 92030
Y2h3aXR6 92031
IGludmVudGl2ZQ== 92032
IE1laQ== 92033
IHZlc3RpYg== 92034
IG7DpGNoc3Rlbg== 92035
L2JpZw== 92036
IHJldHJlYXRlZA== 92037
IHByb3BhbmU= 92038
dmljdGlt 92039
QWt0 92040
IFByZXNlcnZhdGlvbg== 92041
IFBpcw== 92042
X1NIQURPVw== 92043
IHByaWNlbGVzcw== 92044
csOzZA== 92045
b2JibGVk 92046
IHJvbGVOYW1l 92047
IEdEUFI= 92048
ICciLA== 92049
Q2VudHJl 92050
QXJjaGl0ZWN0dXJl 92051
Q3BwQ2xhc3M= 92052
IG1hdHRyZXNzZXM= 92053
IGJlZXA= 92054
IERhbWlhbg== 92055
5p2D6ZmQ 92056
YmV0dA== 92057
X2Flcw== 92058
KGNlbGxz 92059
IOuwsOyXtA== 92060
IGJpdG1hc2s= 92061
Y291bGRu 92062
LW5vdw== 92063
IGlubm92YXRl 92064
IGhhY2Vu 92065
IEx5b25z 92066
dGhpY2tuZXNz 92067
IHdoaXN0bGVibG93ZXI= 92068
JGZpbHRlcg== 92069
IGV1bGVy 92070
IEhhcm0= 92071
IGxlZHM= 92072
IEtlbHZpbg== 92073
LnF1aWNr 92074
IEzDs3Bleg== 92075
cmV2ZQ== 92076
IG5pZ2VyaWE= 92077
IGp5bGxhbmQ= 92078
LmVtcHR5TGlzdA== 92079
IHVuc2V0dGxpbmc= 92080
dXNiYW5k 92081
IHRyYWNrZXJz 92082
PVwiIjsK 92083
IGNvbnRpbnVh 92084
IE51bWVybw== 92085
ZW5kb24= 92086
IEdlcnJ5 92087
LlRPRE8= 92088
UmVwZWF0ZWQ= 92089
IFNlcmVuYQ== 92090
0LjQvNCw0LvRjA== 92091
cHJvZmls 92092
INCy0YHQtdGF 92093
QGFkbWlu 92094
LkxpbmVz 92095
IHRyYW5zbWlzc2lvbnM= 92096
IGNq 92097
YW7Dp2E= 92098
5Yig6Zmk5oiQ5Yqf 92099
IGdldE1lbnVJbmZsYXRlcg== 92100
dWZyZXE= 92101
IE1hdGhlbWF0aWNhbA== 92102
TmF2aWdhdG9yTW92ZQ== 92103
IGZ3ZA== 92104
dW5pdHRlc3Q= 92105
IHN5bnRoZXNpemVk 92106
IGNyZWVk 92107
KEZyYW1l 92108
cHN5Y2g= 92109
dm9k 92110
dUM= 92111
4bqndQ== 92112
IOKAnOKApg== 92113
IGtyYXQ= 92114
ZHJhd2FibGU= 92115
w6ZyZQ== 92116
PXRvcA== 92117
KExvZ2dlcg== 92118
RXJyb3JFeGNlcHRpb24= 92119
YWlzYWw= 92120
L3dz 92121
dWxsZWQ= 92122
QVJJTkc= 92123
IG5JbmRleA== 92124
IGludGVybmFscw== 92125
IGVmZmljaWVuY2llcw== 92126
ICNA 92127
X2JyaWdodG5lc3M= 92128
X25vcm1hbHM= 92129
IFN0b3V0 92130
IHVudmVpbA== 92131
IFNob3Rz 92132
LWNvbXBhbnk= 92133
X2VsdA== 92134
KGRsbGV4cG9ydA== 92135
IHByb2R1Y2Npw7Nu 92136
Q2lzY28= 92137
Qmxha2U= 92138
LW1vdXRo 92139
UGVhcg== 92140
INC00L7RgdGC0YPQvw== 92141
IEpBQ0s= 92142
IO2YuA== 92143
IHN0b3B3b3Jkcw== 92144
IFRlc3M= 92145
IHBvc3Rl 92146
cmF6aWVy 92147
6K0= 92148
TWVzc2FnaW5n 92149
t+aWsA== 92150
VGFtYmFo 92151
IG5hcmNvdGljcw== 92152
IGNhbXBlcg== 92153
IHRyaXBvZA== 92154
IGdsRW5k 92155
IGdpb2M= 92156
Y29tYmU= 92157
VXNlclJvbGU= 92158
VWw= 92159
RXF1aXZhbGVudA== 92160
IGdub21l 92161
IEZ1w58= 92162
cGFja2FnZU5hbWU= 92163
X3Vl 92164
RGlzY2xvc3VyZQ== 92165
YW1hdGU= 92166
X3RlbnNvcnM= 92167
IEthdGhyeW4= 92168
X0Jhcg== 92169
VGhyZWFkSWQ= 92170
IHZlcmlmaWNh 92171
LmFzc2VydE51bGw= 92172
IE9kaW4= 92173
YsOp 92174
INGB0L7RgdGC 92175
IGp0 92176
LlNlbGVjdGVkSXRlbXM= 92177
IGFjdGlvbmFibGU= 92178
IFJlZ2FyZHM= 92179
aGVr 92180
Om51bWVs 92181
LEdM 92182
IFBIT05F 92183
CURlZmF1bHQ= 92184
IGVsYXN0 92185
IGJlY2s= 92186
PWNyZWF0ZQ== 92187
OicK 92188
YXJodXM= 92189
bW9kaWZpZXJz 92190
aW50cHRy 92191
IHByb3Bpbw== 92192
77yI56yR 92193
IHJlcXVlc3RPcHRpb25z 92194
IGltcGxpYw== 92195
IGR1cm8= 92196
IFBDUw== 92197
RGVsaW1pdGVy 92198
KGxvZ2l0cw== 92199
LkVWVA== 92200
V2l0aENvbnRleHQ= 92201
IG9sdHJl 92202
X0VYRUNVVEU= 92203
b2xpY2l0ZWQ= 92204
X0VudGVy 92205
L2Zyb20= 92206
INGB0LvQvtCy 92207
IEhvcm0= 92208
dWliTW9kYWw= 92209
X0lORklOSVRZ 92210
77yM44CK 92211
VUdJTlM= 92212
T05HTA== 92213
LGJ1Zg== 92214
IHBvdXJyYWl0 92215
cGo= 92216
KGN1YmU= 92217
IHVnbA== 92218
IFNhd3llcg== 92219
SUZFU1Q= 92220
QXBpcw== 92221
IENvcmVEYXRh 92222
IHNlc2FtZQ== 92223
LnB0aA== 92224
LmdldFVzZXJOYW1l 92225
Y2FzZWQ= 92226
IHZhbmlzaA== 92227
X0FwaQ== 92228
Ly86 92229
L25vbg== 92230
LmRvY2tlcg== 92231
LnNp 92232
YWxlcnRz 92233
IGludGVzdGluZQ== 92234
cGFydGljaXBhbnRz 92235
LXZpc2libGU= 92236
ZW1zcA== 92237
bXVl 92238
X3B2 92239
IENyaQ== 92240
b2dyYQ== 92241
X2V4cGVyaWVuY2U= 92242
IElOVEVSVkFM 92243
X3JlZ3Jlc3Npb24= 92244
7ZWY7IS47JqU 92245
ZW5kZXJlY28= 92246
bGF0YWJsZQ== 92247
LmxvY2FsdGltZQ== 92248
IEJJVFM= 92249
IEZvbGRpbmc= 92250
CSAJCQ== 92251
w6lzZQ== 92252
LWJlYXJpbmc= 92253
IFhQQVI= 92254
T1BTSVM= 92255
J14kJyw= 92256
aW5jbA== 92257
IE9wcmFo 92258
IGJvb3Rocw== 92259
IFJvaGluZw== 92260
LkJvcmRlclNpZGU= 92261
YXRhdHlwZQ== 92262
Q3JlYXRlZEJ5 92263
LOKAmeKAnQ== 92264
ZG9jdHJpbmU= 92265
IGJyZWF0aGVk 92266
X2JlZw== 92267
IGFmZmxpY3RlZA== 92268
TW91bnRhaW4= 92269
QmxvYw== 92270
IHJ1aW5pbmc= 92271
LkFubm90YXRpb25z 92272
CWludGVudA== 92273
IHN0YXRpY2FsbHk= 92274
X1V0aWxz 92275
TGF1bmNoZXI= 92276
Om5vcm1hbA== 92277
IHVzZXJpbmZv 92278
LUp1bA== 92279
S3lsZQ== 92280
LlJlYWRVSW50 92281
KHVybHM= 92282
L2lm 92283
bWl0dGVs 92284
YmNt 92285
QE1vZHVsZQ== 92286
IENvbnN0YW50aW4= 92287
IGJq 92288
ZXJuYXV0 92289
PHI= 92290
IE1lbnRvcg== 92291
IGVncmV0 92292
X29hdXRo 92293
LkRhdGFDb250ZXh0 92294
X0NMSQ== 92295
KENvbnN0cnVjdG9y 92296
IHNldFBvc2l0aW9u 92297
cmVzYXI= 92298
ZW50aW5n 92299
4Li54Lil 92300
VHJhbnNtaXNzaW9u 92301
IG5vdGlmeURhdGFTZXRDaGFuZ2Vk 92302
IE1vdXNlQnV0dG9u 92303
ICoi 92304
ICAgICAgICAgICAgICAgDQo= 92305
IEx5ZGlh 92306
IHN3b3Jl 92307
IHBsYXRhZm9ybWE= 92308
CWJ1dHRvbnM= 92309
IHNwcnVuZw== 92310
KFRva2VuVHlwZQ== 92311
Q3g= 92312
QXF1 92313
CQkJCQkJCQkJICA= 92314
CUFERA== 92315
dWlkcw== 92316
IOCkrg== 92317
IOaXtumXtA== 92318
LkFjdGlvbkJhcg== 92319
IG9jdXI= 92320
IGlsbWE= 92321
LW5ldXRyYWw= 92322
ICIuIjsK 92323
CVNpemU= 92324
UGllY2Vz 92325
IHN0aWY= 92326
ICI9Iiw= 92327
IEVxdWl2YWxlbnQ= 92328
IGlnZW4= 92329
ZGZk 92330
X3RoaWNrbmVzcw== 92331
X3JlYWRhYmxl 92332
L2ZhbHNl 92333
IHRvb2x0aXBz 92334
b3BsYXN0 92335
aHVh 92336
aGFuZGxlUmVxdWVzdA== 92337
LkxBWlk= 92338
PFVGdW5jdGlvbg== 92339
aW1tdXRhYmxl 92340
aWhpbGF0aW9u 92341
IG9ydGhvZG94 92342
LnBvcHVsYXRl 92343
IHZlcmE= 92344
IG9iZXI= 92345
c2FuZA== 92346
dmln 92347
Q29uZmVyZW5jZQ== 92348
KENvbGxpc2lvbg== 92349
L2F1dG8= 92350
IFNvbGlkQ29sb3JCcnVzaA== 92351
Kic= 92352
LGFkZHJlc3M= 92353
IHN3ZWV0aGVhcnQ= 92354
w6F0aWNhcw== 92355
YW5pbmU= 92356
X3BheW1lbnRz 92357
IHVubWlzdA== 92358
IHRydW1wZXQ= 92359
QkFM 92360
IGZpbGVJZA== 92361
bmllanM= 92362
QURG 92363
IG1uaXN0 92364
IEZlaGxlcg== 92365
44CRLA== 92366
Q2hhcmFjdGVyU2V0 92367
IFZhbmNl 92368
SW5zZXJ0ZWQ= 92369
IGRvd253YXJkcw== 92370
IHJvdGF0aW9uYWw= 92371
IGVuY291bnRlcmluZw== 92372
TUJQcm9ncmVzc0hVRA== 92373
L1N5c3RlbQ== 92374
L3BvcA== 92375
IH0pDQoNCg== 92376
IC4nPC8= 92377
77yJDQo= 92378
IGRjYw== 92379
YXN5YXJha2F0 92380
IHByaW5jaXBhbGx5 92381
5a6a5LmJ 92382
KGNob2ljZXM= 92383
LnBhZ2luYXRvcg== 92384
IHVwYnJpbmdpbmc= 92385
IGRvdGVudg== 92386
KCkpLw== 92387
IFRBUw== 92388
Z2Nk 92389
X2ludGY= 92390
Lm11dGV4 92391
cHJlc3Rhc2hvcA== 92392
IGLDtnI= 92393
ZGFw 92394
X2RlbWFuZA== 92395
XERlc2t0b3A= 92396
dG9GbG9hdA== 92397
IHNlZ3JlZ2F0ZWQ= 92398
IGNsaW1hdGVz 92399
Lk9yZGVyQnlEZXNjZW5kaW5n 92400
KCcsJyk= 92401
UHVsbFBhcnNlcg== 92402
QXRvbXM= 92403
IGJlbsO2dA== 92404
IGhvbWVy 92405
YW50dQ== 92406
SXNFbXB0eQ== 92407
IEJlZ2lucw== 92408
PlNob3c= 92409
IFN1cHBsZW1lbnRz 92410
b2NjdXM= 92411
IGRvcGU= 92412
LmJvb2tpbmc= 92413
IEFsbWlnaHR5 92414
W2VkZ2U= 92415
IEViYXk= 92416
X3JhY2U= 92417
RnJvemVu 92418
X3RyYXZlbA== 92419
IHBhc3RvcnM= 92420
X1NVUkZBQ0U= 92421
X2dlbnJl 92422
X0hPVA== 92423
LGRpbQ== 92424
VGJs 92425
bXRz 92426
cHJlZGljdGlvbnM= 92427
X2N1bQ== 92428
IGRldGFsbGVz 92429
LXRyYW5zaXRpb25hbA== 92430
IHdha2V1cA== 92431
UGVyc29ucw== 92432
LmNvbG9yYmFy 92433
U3RyYW5nZQ== 92434
2K/Zhw== 92435
Jlc= 92436
IEFSUA== 92437
X1NPRlQ= 92438
X2RyYWZ0 92439
SVZB 92440
IGdyb3A= 92441
IGxpZWJl 92442
IGlpZA== 92443
2KfYsw== 92444
Y2FuZGlkYXRlcw== 92445
Z2V0QXM= 92446
PV8oIg== 92447
LkdldE9yZGluYWw= 92448
KSk9PQ== 92449
YW5ub3RhdGU= 92450
IEx1bWlh 92451
SVJNV0FSRQ== 92452
X09QRU5HTA== 92453
KGZvcm1EYXRh 92454
ZW50aW1lcw== 92455
IHdhdGVyc2hlZA== 92456
INCx0LXQtw== 92457
IGZsb3BweQ== 92458
VG93YXJkcw== 92459
KGNvbXBhY3Q= 92460
RERE 92461
e24= 92462
IHBva2luZw== 92463
QG0= 92464
IHJlY3ljbA== 92465
c3RydWN0b3Jz 92466
a2V5Q29kZQ== 92467
IHZlaGVtZW50 92468
IGxpdHJl 92469
IEJJTkQ= 92470
IEZyYW5jb2lz 92471
IG51ZGl0eQ== 92472
IGlzaXpl 92473
CW9uQ2xpY2s= 92474
eXN0YWxz 92475
IGdldFN5c3RlbVNlcnZpY2U= 92476
V2ViUmVzcG9uc2U= 92477
ZmlsZXNpemU= 92478
IENobG9y 92479
Y29saQ== 92480
X3NlYXQ= 92481
LkFkZEluUGFyYW1ldGVy 92482
KXRlc3Q= 92483
IHF1ZXM= 92484
IGNhdXRpb3VzbHk= 92485
ImRpc3BsYXk= 92486
LnNodG1s 92487
IEdVSURBVEE= 92488
KCIqKg== 92489
IGdyYW5kZGF1Z2h0ZXI= 92490
IEFzc2VtYmx5RGVzY3JpcHRpb24= 92491
Rm9yRWFjaA== 92492
V2lsc29u 92493
LGVn 92494
IGJlbGlldmFibGU= 92495
IGNyb3Nzd29yZA== 92496
bG9iYmVy 92497
IFN0YXBsZXM= 92498
KHNoaXA= 92499
IHdhZ2Vk 92500
IEJvbHNoZXZpaw== 92501
LkFkZEl0ZW0= 92502
KEZpbHRlcg== 92503
X0FCQw== 92504
IGBc 92505
0L7RiQ== 92506
IG1ib3g= 92507
IE5lcw== 92508
IEFWQ2FwdHVyZQ== 92509
IGNvbmhl 92510
IElOVEVSTkFUSU9OQUw= 92511
b3Nn 92512
IF0pLT4= 92513
U0tUT1A= 92514
IGtpZGQ= 92515
IFNTVA== 92516
IOWFsw== 92517
IEV0aG5pYw== 92518
RVJTSEVZ 92519
IG11bHRpYw== 92520
X01VTA== 92521
IEZpbmRPYmplY3RPZlR5cGU= 92522
IEV4cGVuc2Vz 92523
Z2V0TW9ja0J1aWxkZXI= 92524
LWd1aWRl 92525
J0w= 92526
IOeZuw== 92527
IHJhag== 92528
IEJsYW5jaA== 92529
IEFkZHJlc3Nlcw== 92530
Tng= 92531
IElzbGFtYWJhZA== 92532
0L7QutGD0LzQtdC90YI= 92533
IEJlYXZlcg== 92534
LnN0dWRlbnRz 92535
IEFzeW5jQ2FsbGJhY2s= 92536
c2hlZXRz 92537
ZWNhc3Q= 92538
IEZ1bmRhbWVudGFs 92539
IHZlcmRpZW5lbg== 92540
IGV4YWNlcmJhdGVk 92541
IE1vZGVyYXRvcg== 92542
Q0NDQ0ND 92543
IHRpbWVvdXRz 92544
IHN1YmRpdmlzaW9ucw== 92545
IGNvbXByb21pc2Vz 92546
dXp6ZXI= 92547
fSwkew== 92548
X2Jsb2NraW5n 92549
ZXJtYW5u 92550
IE1pa2hhaWw= 92551
IFNlbGJzdA== 92552
6ZSA 92553
LnNob3dz 92554
5LiH5YWD 92555
IFRm 92556
IElIdHRwQWN0aW9uUmVzdWx0 92557
IElFbnRpdHk= 92558
IGlx 92559
Rk1M 92560
b2RlbQ== 92561
c3Rw 92562
dWN0aW9ucw== 92563
LmZhdm9yaXRl 92564
LkdldERpcmVjdG9yeU5hbWU= 92565
IGdyYWM= 92566
IHhtbERvYw== 92567
X3B1c2hCdXR0b24= 92568
Y29sbGVjdG9y 92569
PWV4cGxvZGU= 92570
IGRlc3RpbmF0aW9uVmlld0NvbnRyb2xsZXI= 92571
IFNlcmlhbGl6ZWQ= 92572
Om1lc3NhZ2U= 92573
IENDQw== 92574
X3JlY292ZXJ5 92575
LWtpdA== 92576
c2hpbWE= 92577
cm90Y2g= 92578
IGB9Cg== 92579
X3N1cHA= 92580
VGFibGE= 92581
0YDQtdC00LXQuw== 92582
R3RrV2lkZ2V0 92583
IFNJTVBMRQ== 92584
LnBoaQ== 92585
IExpYmVydGllcw== 92586
LS1b 92587
IHVudmVpbGluZw== 92588
IGV4dGVudHM= 92589
YmNk 92590
IGh2YWQ= 92591
CWNy 92592
LnJlYWRkaXI= 92593
IHJlYWRhYmlsaXR5 92594
IGRpc21pc3Npbmc= 92595
Q2FtYg== 92596
IGNhc3VhbHR5 92597
IElQVg== 92598
bWl0ZXM= 92599
IHB1cmlmaWVk 92600
Lk9yaWVudGF0aW9u 92601
IGxq 92602
aW11bGF0b3I= 92603
ZnJhbQ== 92604
L2xvY2F0aW9u 92605
IGNvbW11bmljYXRlcw== 92606
OlVJQWxlcnQ= 92607
L3NvY2lhbA== 92608
ZWx5bg== 92609
REVO 92610
INee 92611
IGJlZm9yZVNlbmQ= 92612
IFVudGVycw== 92613
JykuIg== 92614
ICcnKTs= 92615
LndyaXRlT2JqZWN0 92616
KGdyYW1tYXJBY2Nlc3M= 92617
IEFwcGxpY2F0aW9uQ29udGV4dA== 92618
QnlVc2VybmFtZQ== 92619
IHNraXBz 92620
IGZpbGhv 92621
IHZpZXV4 92622
IG1SZWN5Y2xlclZpZXc= 92623
IGFyb3VzZWQ= 92624
Lm93bA== 92625
IGN1cmxlZA== 92626
L2NhbGxiYWNr 92627
KCc6Jylb 92628
IGludW5k 92629
IGJyZWFrcG9pbnRz 92630
LWV2ZW4= 92631
LnN0ZW0= 92632
IGRlcm9n 92633
IG5lcA== 92634
IENvbXBsZXRhYmxlRnV0dXJl 92635
LUxpbmU= 92636
Lyov 92637
LkhleA== 92638
IHJ1c3Nl 92639
IGJpZg== 92640
IEZvbmQ= 92641
aWVjdA== 92642
IGFsbG90dGVk 92643
ZGV0ZWN0b3I= 92644
IC8KCg== 92645
ZW1vZGU= 92646
dWhl 92647
dWlzc2U= 92648
IEZJWEVE 92649
bWF0aHJt 92650
IHVuc3Vz 92651
IEF1dG9z 92652
IC4uLi4uLi4uLi4= 92653
LnRyYXZlbA== 92654
TkFW 92655
IGxlc2Jpc2s= 92656
IMO8emVy 92657
IGNsZXJpYw== 92658
IGxpbWl0bGVzcw== 92659
b2x1Y2lvbg== 92660
IG5lY2tsaW5l 92661
IGRyaWZ0ZWQ= 92662
IFJlbGlhYmxl 92663
IENhcnk= 92664
IHRlbsOtYQ== 92665
ID8+Jw== 92666
L2NvbW1vbnM= 92667
IEdNQw== 92668
X05QQw== 92669
IEJsaXNz 92670
IEJ1cm1h 92671
5ZCM5pe2 92672
KGRlcGVuZA== 92673
LXN1aXRl 92674
CXN0YWdl 92675
RG91Zw== 92676
aWRlbnRpZmljYXRpb24= 92677
X3Jlc29sdmVy 92678
QmVnYW4= 92679
W3RocmVhZA== 92680
IDsKCgo= 92681
TlRTVEFUVVM= 92682
IGRpc29iZWQ= 92683
fGg= 92684
IGFjY3VtdWxhdGluZw== 92685
ICIsIik7Cg== 92686
dVBhcmFt 92687
LmJpbGw= 92688
cml0Y2g= 92689
Q3JpbWU= 92690
0LXRgdGM 92691
IFJlbWFpbg== 92692
54Sh5paZ 92693
X1RIQVQ= 92694
YCJdCg== 92695
LnN0YW1w 92696
IHBhcmFub3JtYWw= 92697
IE1QQw== 92698
InVybHM= 92699
IEVzdGF0ZXM= 92700
VG9Gcm9udA== 92701
VGhpcnR5 92702
QmV0aA== 92703
J3U= 92704
IOy9lOuTnA== 92705
VUZBQ1Q= 92706
IENyb20= 92707
IE1pc3Rlcg== 92708
IEVRVUFM 92709
ZW5oZWlt 92710
IC8vew== 92711
X3dhcw== 92712
IGJvdXF1ZXQ= 92713
IE1pZGRsZXRvbg== 92714
aXp1 92715
X2hhc2hlcw== 92716
IGhlbm5l 92717
IExJTlVY 92718
CVNlcnZpY2U= 92719
IFRBTQ== 92720
IGBf 92721
IEFUQQ== 92722
IGRhbmdsaW5n 92723
cGFpbg== 92724
X0JPVU5EUw== 92725
cHJvZ3JhbW1pbmc= 92726
IGN1cnJlbnRJdGVt 92727
IGJlc2ll 92728
ZW1ibGU= 92729
KGNhbGM= 92730
LlNraW4= 92731
IHBlYXJscw== 92732
IEJ1cmI= 92733
LW1vbml0b3I= 92734
L2Nz 92735
Zmly 92736
KHZlcg== 92737
W2FyZ3M= 92738
w7xja2Vu 92739
ZXBhcmF0b3I= 92740
RG91 92741
LkVudA== 92742
IEVTQQ== 92743
KGZt 92744
dG9uZXM= 92745
IFphYw== 92746
a3NhbQ== 92747
4oCZYWxs 92748
IE1TUw== 92749
IkRvbg== 92750
IHNpbXBsZXg= 92751
IENvbnNjaW91cw== 92752
IEFwcGxpY2FudA== 92753
cGVsbGllcg== 92754
IHBlZGVzdGFs 92755
JGh0dHA= 92756
IEF2YQ== 92757
LkNH 92758
IGludMOpcmVzcw== 92759
IEludGVncmFs 92760
cmVkZQ== 92761
PWZvcm1hdA== 92762
LlBhdGhz 92763
X1BBUlRJVElPTg== 92764
IHNlaA== 92765
IFF1YW5kbw== 92766
WW91dHViZQ== 92767
LnB1dFRleHQ= 92768
7KO87IS47JqU 92769
LkFXUw== 92770
IENzdg== 92771
Q3Vyc29yUG9zaXRpb24= 92772
LWJlZ2lu 92773
X2NvdW50cmllcw== 92774
LXJhbmRvbQ== 92775
5Y2z 92776
UGhpbGw= 92777
IHBhbm9yYW1h 92778
IHRoZXJlcw== 92779
5Y+q 92780
IHNpbGVuY2Vk 92781
IEN1bWJlcmxhbmQ= 92782
LlZpc2libGVJbmRleA== 92783
LnN0YXRpc3RpY3M= 92784
IHByb3BlbGxlZA== 92785
QW1lcmljYW5z 92786
IHZhbGlkYQ== 92787
IEd1YW0= 92788
IEZFTUE= 92789
LnN5bnRheA== 92790
ZGdl 92791
IGRlZXBlbg== 92792
ICAgICAgICAJCQkJ 92793
IFNwZWNpYWxpc3Rz 92794
IFNhbnRhbmE= 92795
IEJlZXRsZQ== 92796
ICUKCg== 92797
VXNlclByb2ZpbGU= 92798
KCIkLg== 92799
IGVtcGxvaQ== 92800
IGVtYWlsaW5n 92801
Z2V0T3JFbHNl 92802
X1VQUEVS 92803
LmRyaXZl 92804
IHJlZGhlYWQ= 92805
Rk9VTkRBVElPTg== 92806
IG11bHRpcGxpYw== 92807
L2VmZmVjdHM= 92808
IGhhbmR3cml0aW5n 92809
X3Rh 92810
IEJheg== 92811
w7ZmZmVudA== 92812
cHJpeA== 92813
IGNoaXBzZXQ= 92814
IGlwQWRkcmVzcw== 92815
w61kYQ== 92816
IFVuZw== 92817
IFNjaGE= 92818
LkZMT0FU 92819
IHF1aWVybw== 92820
b2Nocm9tZQ== 92821
IHJlZWZz 92822
YnNvbg== 92823
IG3Dug== 92824
IHRyYXlz 92825
Qm9tYg== 92826
IG15TGlzdA== 92827
eGltaXR5 92828
IERlbmc= 92829
VW5p 92830
LVNlcmllcw== 92831
b2dhbnk= 92832
bMSxaw== 92833
L2NhbA== 92834
IHJlYWxpemE= 92835
IEhpYg== 92836
CQoJCgo= 92837
IGh1bWlsaWF0aW5n 92838
WyR7 92839
IHByZXRlbmRlZA== 92840
IERhdGVuc2No 92841
YW5zaWJsZQ== 92842
CXJlbG9hZA== 92843
IG1pZ2xpb3I= 92844
X2JldA== 92845
IHRvdGFsVGltZQ== 92846
IEJheHRlcg== 92847
IGVuYW1lbA== 92848
L0ltYWdlcw== 92849
IFNFUw== 92850
IFNwcmluZ0FwcGxpY2F0aW9u 92851
KWluaXRXaXRoRnJhbWU= 92852
CWNhbA== 92853
RUxFTUVOVA== 92854
IEd1dGg= 92855
KEJpZ0ludGVnZXI= 92856
IE1lZGk= 92857
Lk1lbWJlcnM= 92858
IHJlam9pY2U= 92859
IGRvZg== 92860
UEVuZFBvaW50 92861
IGNsaXQ= 92862
X1JFVVNF 92863
TWFrZXM= 92864
IHN6eQ== 92865
IHNoYWRlZA== 92866
IGZhdm91cmVk 92867
aXN0b2w= 92868
ZGV4 92869
IGZsZXhHcm93 92870
hac= 92871
X3ByaW50ZXI= 92872
LmZuYW1l 92873
cGVyYXRpb24= 92874
IG7Ds3M= 92875
Z2dlcg== 92876
6ICB 92877
INCy0YDQtdC80Y8= 92878
KGVmZmVjdA== 92879
QnlVcmw= 92880
IEFQUw== 92881
dHV0b3JpYWw= 92882
ZWpz 92883
U3FsUGFyYW1ldGVy 92884
IHNjcmFwcw== 92885
R3JlZXRpbmdz 92886
RmVk 92887
IFJFTkRFUg== 92888
IGJsb29tcw== 92889
IGRlYmlsaXRhdGluZw== 92890
b21ldHJpY3M= 92891
IHNpbWls 92892
LWhlcm8= 92893
IHJlYWxwYXRo 92894
ZGVwYXJ0bWVudHM= 92895
QklORA== 92896
IENhc3NpZHk= 92897
bGlhbg== 92898
U0tJUA== 92899
LWNsZWFu 92900
IHNpbGRlbmFmaWw= 92901
X211bHRpcA== 92902
anNvbkRhdGE= 92903
QWdlbnRz 92904
LmZoaXI= 92905
IHRyaXVt 92906
IGFzdG9yZQ== 92907
IG5leA== 92908
OnVwZGF0ZQ== 92909
INC00LA= 92910
4KSy 92911
OyIpCg== 92912
LlRleHRJbWFnZVJlbGF0aW9u 92913
IG1pY3Jvc2NvcHk= 92914
U1VS 92915
YW5reQ== 92916
IFBldGl0 92917
bWFya2V0aW5n 92918
IHZlcmlmaWNhcg== 92919
YW1hZ2Vk 92920
Y3Ro 92921
IGluY29uc2lzdGVuY2llcw== 92922
IG1hasSF 92923
IGdldEluZm8= 92924
IHBhc3Npb25hdGVseQ== 92925
IGljbXA= 92926
W10+Cg== 92927
U2luZ2Fwb3Jl 92928
IE5ld3Rvd24= 92929
IHJhaWxpbmc= 92930
IEVubGlnaHRlbm1lbnQ= 92931
dXRoZXJsYW5k 92932
bGVpbmU= 92933
X3JlZ2lzdHJv 92934
IEVyaWNh 92935
X3RpY2tldHM= 92936
L21ldGhvZA== 92937
aXp6YXRv 92938
R2F0dA== 92939
LWZlYXR1cmU= 92940
IDotKQ== 92941
IHNlcnBlbnQ= 92942
IEdyb3VwTGF5b3V0 92943
TmlrZQ== 92944
dW5nYQ== 92945
IE1pbQ== 92946
IGluY2Vzcw== 92947
IGRlcGxldGlvbg== 92948
X2xvdA== 92949
IGJpcnRoZGF5cw== 92950
IHJlbnRlcnM= 92951
IGVxdWlwb3M= 92952
IExlaHI= 92953
X1BsYXk= 92954
IHNwaWVsZQ== 92955
IExBTkQ= 92956
IEVuY291bnRlcg== 92957
aXphbmRv 92958
IHBlcnU= 92959
IHNsYW1taW5n 92960
IHJlaW5zdGFsbA== 92961
IGFuZ2k= 92962
SW5UaGVEb2N1bWVudA== 92963
IHZlcnNjaGlsbA== 92964
IHZlcnNv 92965
LnN0YWZm 92966
KHZw 92967
KGFjY291bnRz 92968
Z2V0QXBwbGljYXRpb24= 92969
IG1hbnRlbmVy 92970
LlNP 92971
LkFE 92972
IE1vcm1vbnM= 92973
CXJlYWw= 92974
IGhvdGxpbmU= 92975
IENhcmRpbw== 92976
cGFnZUluZGV4 92977
Ymplcmc= 92978
Rm8= 92979
IGNvbnNlaWxz 92980
IG1pZ3JhaW5l 92981
IGxhdGlubw== 92982
IHRvcnBlZG8= 92983
amFiaQ== 92984
L3Jz 92985
dWJiZXI= 92986
IENsYXNzZQ== 92987
4Lw= 92988
KC9eXA== 92989
X2RlcGxveQ== 92990
R1JFUw== 92991
IFdIQVRTT0VWRVI= 92992
IGFyY3B5 92993
IG1pZWpzYw== 92994
QXJteQ== 92995
IHNjaMO2bmU= 92996
IGJtaQ== 92997
IDoiOwo= 92998
IENydWlzZXI= 92999
cWg= 93000
LnByZXBlbmQ= 93001
IHZpdmU= 93002
b3JpYXNpcw== 93003
ICE9Cg== 93004
dGVnYQ== 93005
YW1lZGk= 93006
UHJvamVjdGVk 93007
LWJyZQ== 93008
LHJlYWRvbmx5 93009
IHN1YlRpdGxl 93010
IG1pc3Ry 93011
IEluaGFs 93012
Y292ZXJpbmc= 93013
IHppag== 93014
IEFSVElDTEU= 93015
UlVMRQ== 93016
IGFsdHJv 93017
IHNldHRsZXM= 93018
aWRlbGJlcmc= 93019
OiIuJA== 93020
KGZl 93021
X2Jt 93022
IHByb3ByaWV0b3I= 93023
IGtlZXI= 93024
U2VwYXJhdGVk 93025
X05FQVJFU1Q= 93026
KHN0cnBvcw== 93027
IENvbXB1dGF0aW9uYWw= 93028
IGVybg== 93029
SW5WaWV3 93030
QWNyb3Nz 93031
IGZydWl0eQ== 93032
X21hcHBlZA== 93033
IGdyYXR1aXRlbWVudA== 93034
IHt9CgoK 93035
cG90ZW50aWFs 93036
cGFudHM= 93037
IHNlbnRpbWVudGFs 93038
IExpbmtlZGlu 93039
KHBhdGNo 93040
IGFkYXB0b3I= 93041
IFVJU3Rvcnlib2FyZA== 93042
IHNsYXNoaW5n 93043
KCIvOg== 93044
IHRleHREZWNvcmF0aW9u 93045
LmRpYWc= 93046
XFJlZGlyZWN0 93047
IG5ldXJvc2NpZW5jZQ== 93048
IEFkanVzdG1lbnQ= 93049
IFNjb3RjaA== 93050
IENvc2J5 93051
U0VB 93052
PXZpZXc= 93053
IGV2b2x2ZXM= 93054
IFNhbGlzYnVyeQ== 93055
44CB4oCc 93056
ZXZlcnlvbmU= 93057
KGFyYw== 93058
IGFwYXJ0aGVpZA== 93059
IGF6aW11dGg= 93060
IFNoYW1hbg== 93061
2KU= 93062
w7NuaWNh 93063
OmNsYXNz 93064
IEluamVjdG9y 93065
YWhhcw== 93066
YWJsZXI= 93067
X2VzdGltYXRvcg== 93068
X0NVQkU= 93069
IEtyYW5r 93070
IHVuZmF2b3JhYmxl 93071
IHJlcHV0ZWQ= 93072
IENvbmRpdGlvbmFs 93073
IG1pbGZz 93074
IFJlc3RyaWN0aW9ucw== 93075
KGhyZWY= 93076
SnVhbg== 93077
PEVudHJ5 93078
CXRlbXBsYXRlVXJs 93079
X3Byb2R1Y3Rpb24= 93080
VHlwZUlE 93081
IGJhbGs= 93082
IG5ld0Fycg== 93083
IGxpY2VuY2Vz 93084
LnNvbHV0aW9u 93085
LnNhbQ== 93086
IEh2 93087
IHRyZW1ibGluZw== 93088
WWF3 93089
IGZsZWVjZQ== 93090
IHNob3ZlbA== 93091
V2Vy 93092
IHBhdHRlcg== 93093
PVk= 93094
IEZybQ== 93095
U2NyZWVucw== 93096
JCI= 93097
IEJsb25k 93098
INGB0LjRgdGC0LXQvA== 93099
KG9k 93100
IG5vY3Q= 93101
b3VudGVycw== 93102
dXNlcHBl 93103
fGludA== 93104
LnJlbWFpbmluZw== 93105
IHVsdGltbw== 93106
IG1hc3R1cmJhdGluZw== 93107
bW1j 93108
PUc= 93109
Il19Cg== 93110
IGZlYXJsZXNz 93111
IGFsZ3VtYXM= 93112
Y3VsdA== 93113
QWx0ZXJuYXRpdmVseQ== 93114
5bKB 93115
T0RFVg== 93116
IEFkb3B0aW9u 93117
IHdlYWx0aGllc3Q= 93118
IG1lbnRyZQ== 93119
L2dvdG8= 93120
IGluZm9ybWFudA== 93121
IFJvdXQ= 93122
b2Zp 93123
IGhhbW1lcmVk 93124
IEVzdG8= 93125
4oCZQnJpZW4= 93126
IMWa 93127
IGRlbWk= 93128
INGB0LvQtdC0 93129
IENsaW50b25z 93130
7IWY 93131
5aSn5bCP 93132
RUNI 93133
IGFuYXJjaGlzdHM= 93134
IEJldmVyYWdl 93135
IGdvdQ== 93136
IGJyaWJlcnk= 93137
IHBpY2t1cHM= 93138
IHViZXI= 93139
IHN5bmVyZ3k= 93140
ZmNu 93141
IEhlbnRhaQ== 93142
IEJhc2VtZW50 93143
IG1vcmI= 93144
X2N1 93145
amFkaQ== 93146
KHByb2o= 93147
IEJpbmdv 93148
X2NhdGU= 93149
W2VtYWls 93150
Klg= 93151
X1NFUA== 93152
IHByaW5jaXBpbw== 93153
dXBkYXRpbmc= 93154
Ly99fQ== 93155
Li4uKA== 93156
IERPRQ== 93157
IHpn 93158
c2hhcGVz 93159
PXRtcA== 93160
Q3J1ZA== 93161
IHdvcmtwbGFjZXM= 93162
IHN0YWJpbGl6ZWQ= 93163
IHRlbnRhbmc= 93164
LnByb2R1Y3RJZA== 93165
IFRyaWRlbnQ= 93166
IG9yY2hlc3RyYXRlZA== 93167
IEJ1Y2NhbmVlcnM= 93168
X3RvbGVyYW5jZQ== 93169
aWdyYXBoeQ== 93170
w7xsZXI= 93171
INi1 93172
QVE= 93173
IGF0aGxldGljaXNt 93174
CVNlcnZlcg== 93175
ZXdlZA== 93176
RGlkRW50ZXI= 93177
UmVnaXN0ZXJz 93178
X2VtbHJ0 93179
IGZ1bmN0aW9uYWxpdGllcw== 93180
KGhkYw== 93181
X21hcmtlcnM= 93182
T3JlZ29u 93183
KFN0cg== 93184
IEdldEJ5SWQ= 93185
IHp3YXJ0ZQ== 93186
IE9DSQ== 93187
IEphbWU= 93188
X2NyaXQ= 93189
IHN0b2NraG9sbQ== 93190
CURpY3Rpb25hcnk= 93191
X2NhcGFiaWxpdGllcw== 93192
Q1RS 93193
IG51bWE= 93194
X2ZpcnN0bmFtZQ== 93195
IE5TUmFuZ2U= 93196
IG1vc3RyYQ== 93197
IEFycml2YWw= 93198
KElTZXJ2aWNlQ29sbGVjdGlvbg== 93199
IHRlYXNwb29ucw== 93200
IFNldFVw 93201
CQkNCg0K 93202
KGd1aWxk 93203
LiJd 93204
IG3hu5tp 93205
YmZm 93206
REFURVM= 93207
KCldCgo= 93208
IGh1bWFub2lk 93209
dGhybw== 93210
KGtsYXNz 93211
IFZhZA== 93212
ZnNw 93213
LVNhaA== 93214
IFVTRVJOQU1F 93215
IFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncw== 93216
IGxlc2lvbg== 93217
X0RFTklFRA== 93218
IFRISU5L 93219
gqQ= 93220
bWVudGFs 93221
IHByZWNhcmlvdXM= 93222
IE5vc2U= 93223
IGNvbmNs 93224
IHdpbGRmaXJl 93225
IFRCcmFuY2g= 93226
IEJBTQ== 93227
L2Nzdg== 93228
IE5BTg== 93229
IENsZWFyYW5jZQ== 93230
XEJsb2Nr 93231
LmFubm90YXRl 93232
5om+ 93233
IFdISUxF 93234
Z2VidW5n 93235
Pkxpc3Q= 93236
c2ht 93237
Um9zcw== 93238
YWZk 93239
W3RpZA== 93240
UGVyUGl4ZWw= 93241
Kyhc 93242
IEN5YW4= 93243
IEtub3Q= 93244
X3Zsb2c= 93245
L3Zhcg== 93246
W19f 93247
IGhhc2htYXA= 93248
KCk7DQ0K 93249
IGFtYXNzZWQ= 93250
IGRhdGVQaWNrZXI= 93251
IFNhdG9zaGk= 93252
X0NBUEFDSVRZ 93253
IGJ1eg== 93254
IE1pbmg= 93255
U2V0Q29sb3I= 93256
Kz0nPA== 93257
IEludmVudA== 93258
b3JjYQ== 93259
aWdudW0= 93260
IEFtcGg= 93261
IHJlZmx1eA== 93262
CiAgICAgICAgICAgICAgICAgICAgICAgIAo= 93263
dWhu 93264
KFRN 93265
YWxsZXk= 93266
IGxlZnRvdmVycw== 93267
ZmRj 93268
4oCcVGhlc2U= 93269
IGNyYXdsZWQ= 93270
KFZvaWQ= 93271
aWd0ZQ== 93272
8J+S 93273
c2V0RGVmYXVsdA== 93274
IEJlZ2lubmVy 93275
UG9r 93276
IEhMUw== 93277
IGdhbWVJZA== 93278
IEFtYmllbnQ= 93279
X1BSRUQ= 93280
LiJ9LAo= 93281
w7xocnVuZw== 93282
LlN5bmM= 93283
IGludmU= 93284
IE51cnNlcnk= 93285
IGdsYXplZA== 93286
q+yekA== 93287
X2ZhdGFs 93288
X2Rpc3BhdGNoZXI= 93289
W10pDQo= 93290
IGRldXRzY2hlbg== 93291
6rGw 93292
U2hhcGVz 93293
IGlycmV2ZXJzaWJsZQ== 93294
X3Blcw== 93295
X2VzYw== 93296
IHRoZXJtb21ldGVy 93297
44OU44O8 93298
X3NxcnQ= 93299
Il09PSI= 93300
IGN1bG1pbmF0aW9u 93301
V29yZFByZXNz 93302
IGxldmVu 93303
VmVydGV4VXZz 93304
IEhheXdhcmQ= 93305
IEFzc2V0SW1hZ2U= 93306
IG1haXpl 93307
IGNoaWNhZ28= 93308
IHRhdg== 93309
ZXhwZW5zZXM= 93310
0K0= 93311
K2Y= 93312
LiInIjsK 93313
LVNB 93314
IEtvdGE= 93315
TWFpbkZyYW1l 93316
LnNhbGU= 93317
X0JV 93318
IHN0cmVu 93319
X2ZpbHQ= 93320
L3ByaW50 93321
KFBhY2tldA== 93322
INC30LDQsg== 93323
QWN0cw== 93324
0LXQu9C10YQ= 93325
IHJlbWF0Y2g= 93326
IHJpZGRlbg== 93327
IH0pKCk7Cg== 93328
IGVuZG90aA== 93329
IGNlcnRpZnk= 93330
IFVJUGlja2VyVmlldw== 93331
XE5vdGlmaWNhdGlvbnM= 93332
CVRpdGxl 93333
IGluZXF1YWxpdGllcw== 93334
IE1vcmFu 93335
IERhZW1vbg== 93336
bGVzaWE= 93337
IGhvcHBpbmc= 93338
IGd1c3Rv 93339
IEZpcmViYXNlRmlyZXN0b3Jl 93340
IHBvbHlsaW5l 93341
IHNwaWtlZA== 93342
JSIpOwo= 93343
IExBVElO 93344
TGFiZWxUZXh0 93345
IHN0cmFwb24= 93346
X2ZpZA== 93347
LXNwZWNpYWw= 93348
YXJnZWQ= 93349
IFNUSUxM 93350
UXVhbGlmaWVkTmFtZQ== 93351
LlJFUw== 93352
I2M= 93353
LndyaXRlbG4= 93354
IEltbXV0YWJsZUxpc3Q= 93355
IFRodW1i 93356
IHNpbWQ= 93357
RGVzY3JpY2Fv 93358
LlNldFRleHQ= 93359
IG5vbnByb2ZpdHM= 93360
V2l0aGRyYXc= 93361
LWVuY29kZWQ= 93362
c2Jpbg== 93363
IGFtb3J0 93364
CWRk 93365
cmlm 93366
IHBhdGVybmFs 93367
Lk1hcEZyb20= 93368
X2Fzaw== 93369
IHJlY291cnNl 93370
IGJhY2tzdG9yeQ== 93371
CW1hbmFnZXI= 93372
X0RHUkFN 93373
IEJpaGFy 93374
aW50ZWxsaWdlbmNl 93375
IHNraW1hZ2U= 93376
KGVuY29kZXI= 93377
IHN3aXJsaW5n 93378
IEFwcGV0 93379
X3NhbHQ= 93380
IGF0dGU= 93381
IFNRVUFSRQ== 93382
IE5ldHo= 93383
X3BhaW50 93384
YXPEsQ== 93385
aXNjaQ== 93386
Rmxv 93387
LWdvYWw= 93388
LnNldFN0cm9rZQ== 93389
IEF1c2Nod2l0eg== 93390
IEFiZGVs 93391
IGFuZXc= 93392
IOWung== 93393
IHRvdGFsUGFnZXM= 93394
IHJlZmFjdG9y 93395
IGNyZWF0aXZlbHk= 93396
ZW1heA== 93397
b2RveHk= 93398
X3R4bg== 93399
LlNvY2tldHM= 93400
IFJpZGxleQ== 93401
4buxYw== 93402
c2FtcA== 93403
TWluTWF4 93404
IHdvcnNlbmluZw== 93405
b3VudGFpbnM= 93406
YXJ0bmVy 93407
LXByb2Y= 93408
c2luZ3VsYXI= 93409
PWlz 93410
IEZFQw== 93411
X0ZN 93412
IOaIlg== 93413
IENhdWdodA== 93414
X1NDTA== 93415
IGV4cG8= 93416
aW5mcmE= 93417
IE1FUw== 93418
Y2hhcA== 93419
YWx0ZQ== 93420
YXJraW4= 93421
L21M 93422
IHNlbmREYXRh 93423
IGZyYW7Dp2Fpc2U= 93424
IHPDpg== 93425
X0RFRklOSVRJT04= 93426
KioqKioqCgo= 93427
XEN1c3RvbWVy 93428
IOKWiOKWiOKWiOKWiOKWiA== 93429
IHBlcnBldHJhdGVk 93430
IEZ1cmlvdXM= 93431
IHRlbmdh 93432
bGVhcmVk 93433
VUxMRVQ= 93434
aW5pYw== 93435
ZWFyY2hCYXI= 93436
PENhcg== 93437
IFJlbmV3YWJsZQ== 93438
IGNvbnRlbXBsYXRlZA== 93439
L2Zvcm1hdA== 93440
IGZvcmdpdmluZw== 93441
LlN1YkVsZW1lbnQ= 93442
UFVURQ== 93443
LmNvbnRlbnRTaXpl 93444
IHJlc3BlY3RmdWxseQ== 93445
4oCcCgo= 93446
IHBvaWduYW50 93447
dXJpbGU= 93448
fSkiCg== 93449
c2VxdWVudGlhbA== 93450
L2Zhc3Q= 93451
cHJ1bmc= 93452
IFN0dW5uaW5n 93453
IEJZVQ== 93454
IGNvbXBhcmVy 93455
CXJk 93456
dW5pY29ybg== 93457
xrBh 93458
LkdldEl0ZW0= 93459
IHNlY3Rpb25hbA== 93460
anVkZ2U= 93461
dXh0YXA= 93462
IHN1bmRheQ== 93463
IHDDpA== 93464
TWlubmVzb3Rh 93465
Ik4= 93466
IGFwcGxpY2F0aW9uV2lsbA== 93467
QU5HRVI= 93468
IHJlYXNvbmVk 93469
IFpFTkQ= 93470
emFw 93471
PWJhY2s= 93472
b3NwaGF0ZQ== 93473
6IqC54K5 93474
IHRpdHRlbg== 93475
IEFzc29j 93476
QWN0aXZpdHlDcmVhdGVk 93477
KVst 93478
PyIKCgoK 93479
IGpvdA== 93480
2Lg= 93481
IHVuY29tcHJlc3NlZA== 93482
LklzREJOdWxs 93483
IHZhc2U= 93484
IGxvcmVt 93485
IGVudHJlcHJpc2U= 93486
IENvbnNlbnQ= 93487
44Op44Oz 93488
QnlWZXJzaW9u 93489
IHF1aWVuZXM= 93490
CWNvbnQ= 93491
IEJsYWNraGF3a3M= 93492
IEJsYXNpbw== 93493
IHRhbmtlcg== 93494
IHN0YXJ0dGltZQ== 93495
IFNlYXM= 93496
cGlvcw== 93497
LlNwbGl0Q29udGFpbmVy 93498
Y29tcGV0aXRpdmU= 93499
IHBCdWZmZXI= 93500
IGNvbnNlbnRpbmc= 93501
LmFkZE9ic2VydmVy 93502
aXRjaGVk 93503
IG1pc2NlbGxhbmVvdXM= 93504
IFRvcHM= 93505
CWxw 93506
Y21kcw== 93507
LmRlcGFydA== 93508
IGZOYW1l 93509
CWJlc3Q= 93510
OlA= 93511
IHN3YXRo 93512
IHZva3M= 93513
YWxsb24= 93514
IEh0bWxXZWJwYWNrUGx1Z2lu 93515
LmxvZ2dlZElu 93516
YnVja2V0cw== 93517
IGhvbW9waG9iaWM= 93518
IHN1YmR1ZWQ= 93519
IG1lc3NhZ2Vib3g= 93520
V2hhdHNBcHA= 93521
IGRpc3NpcA== 93522
IE1BTlVBTA== 93523
TElLRUxZ 93524
dGVzdGRhdGE= 93525
LU9jdA== 93526
RXhpdGVk 93527
IFRhc21hbmlh 93528
bGFj 93529
IHRow7RuZw== 93530
U3Rvcmllcw== 93531
IGJpb2NoZW1pY2Fs 93532
b3JyZQ== 93533
IGVjbGlwcw== 93534
IEFzc2VtYmx5UHJvZHVjdA== 93535
cnRsZQ== 93536
IFdpbGhlbG0= 93537
cGl6emE= 93538
X0RI 93539
Y29uag== 93540
IHB1ZWJsbw== 93541
IGxpcXVl 93542
IGN1cGlk 93543
IEFjdGl2aXR5Q29tcGF0 93544
LlNt 93545
Il19 93546
bWFpbGJveA== 93547
Lm9wdFN0cmluZw== 93548
LW9i 93549
IE1hdWk= 93550
YXRhaXJlcw== 93551
IG1lcnJ5 93552
Um5k 93553
IGNhcmFjdGVyw61zdGljYXM= 93554
VHJv 93555
KGNu 93556
Lmxk 93557
LXBvaW50cw== 93558
LnNi 93559
IHZlag== 93560
IGNhcmVnaXZlcg== 93561
IG5hdQ== 93562
RElSRUNUT1JZ 93563
KGFuZw== 93564
KC4p 93565
IGV4cGxhbmF0b3J5 93566
ZWxzZXk= 93567
IE92ZXJuaWdodA== 93568
IGxhaXNzZQ== 93569
IFJBVEU= 93570
IEdvdw== 93571
UmVjb2duaXRpb25FeGNlcHRpb24= 93572
aWNoZXJ0 93573
IHJldm9sdXRpb25z 93574
JGNhdGVnb3J5 93575
IHVuZGVmZWF0ZWQ= 93576
L2NvbW11bml0eQ== 93577
LXBhcnRz 93578
LWFwcGxpY2F0aW9u 93579
K0E= 93580
L3N3ZWV0YWxlcnQ= 93581
IEtt 93582
aWxhdGVk 93583
YXRhdA== 93584
UEFU 93585
xI1l 93586
IFRlYw== 93587
Lm9uQWN0aXZpdHlSZXN1bHQ= 93588
XFdlYg== 93589
IEx1Zw== 93590
b3ZvbHRh 93591
IGFsdHJ1 93592
aWd5 93593
IGLEmWTEhQ== 93594
IGFjdGl2YXRpb25z 93595
IGF1ZGl0aW5n 93596
RVJHRQ== 93597
IOiLpQ== 93598
Q2FybG9z 93599
IGtJbnN0cnVjdGlvbg== 93600
bWluZXI= 93601
IH19Lw== 93602
QW5kSGFzaENvZGU= 93603
IEJvdXJib24= 93604
LnByb2Y= 93605
IGltcHJpbWly 93606
IEZlcmRpbmFuZA== 93607
0LzQtdC90YI= 93608
L3t9Lw== 93609
IENsYWly 93610
IE9uQ29sbGlzaW9u 93611
c2FsZG8= 93612
cmFpc2Vk 93613
IEFCT1ZF 93614
KCk9Pg== 93615
IGRldXRzY2hsYW5k 93616
aGliaXRlZA== 93617
RXh0cmVtZQ== 93618
L2hvb2tz 93619
IGRvdXQ= 93620
IFZPQw== 93621
ZXRob3Zlbg== 93622
UE1D 93623
IHJlc3RhcnRpbmc= 93624
IFNDTg== 93625
IEVP 93626
IERKcw== 93627
UGFzc3dvcmRGaWVsZA== 93628
LkFjY2Vzc2libGU= 93629
CWJ1cw== 93630
U1RSVUNUSU9OUw== 93631
IGxhdGVu 93632
IFNOQVA= 93633
X0hFUlNIRVk= 93634
IG9uc3RhZ2U= 93635
5bCP5pe2 93636
IHNhaWxvcg== 93637
IEN1cnNv 93638
IGltcHJvdmlzZWQ= 93639
IGdlbmVyYWxpemU= 93640
IGJ1ZW5v 93641
IGNlcmVtb25pYWw= 93642
IENOUw== 93643
IHBpZ2Vvbg== 93644
bXNw 93645
L0FJRFM= 93646
bGluZUVkaXQ= 93647
IEZpbmFuY2luZw== 93648
IGpUYWJsZQ== 93649
IGJvdHRvbXM= 93650
IFRleHRJbnB1dFR5cGU= 93651
IG1laXNqZQ== 93652
LXNpZ25lZA== 93653
IEdyZWVudmlsbGU= 93654
b3BoaWxpYQ== 93655
SWNvbk1vZHVsZQ== 93656
IGNsYW5kZXN0 93657
ZW1haW4= 93658
U0NBTg== 93659
X1RJTUVT 93660
IGxlY2tlbg== 93661
KGNhbmNlbA== 93662
IGVjc3Rhc3k= 93663
Lk1VTFQ= 93664
IG1vZXRlbg== 93665
IGFwcHJvcHJpYXRpb25z 93666
IFFMRA== 93667
IEd1aWw= 93668
IHRyYXBwaW5n 93669
eERB 93670
IGvDtmxu 93671
ZW51bXM= 93672
4oCcVG8= 93673
cG9ydG8= 93674
bmluZ2Fy 93675
IFRPTw== 93676
LVNU 93677
IE1hdGhz 93678
IGt1cnM= 93679
IFJFUEw= 93680
X2NvbnRyaWI= 93681
IFBoeQ== 93682
cmFuZw== 93683
Lm1hdmVu 93684
LWZvbGxvdw== 93685
IC0tLS0tLS0tLS0t 93686
xLHEnw== 93687
X3dpbm5lcg== 93688
LkNyaXRlcmlh 93689
KGRhdGFTb3VyY2U= 93690
IHNldElucHV0 93691
IFRJTUVTVEFNUA== 93692
b3BlcmFuZHM= 93693
Z2V0V2luZG93 93694
LmZhY2VWZXJ0ZXhVdnM= 93695
IEludmVzdGluZw== 93696
Vnk= 93697
IHBlcnNlY3V0ZWQ= 93698
4bq/dQ== 93699
IFBsdW1iaW5n 93700
T05HT0RC 93701
RXZpZGVuY2U= 93702
IFN0cm9t 93703
cXVvdGE= 93704
TGl2ZXJwb29s 93705
CWF0dGFjaw== 93706
bWluaW1hbA== 93707
IG9uS2V5RG93bg== 93708
IG1vZHVsZUlk 93709
IFZlcmFuc3Q= 93710
bW9ydA== 93711
YWNpc3Rz 93712
IE1BU1M= 93713
X1VOREVS 93714
LmdldFJ1bnRpbWU= 93715
RU5USUNBVElPTg== 93716
Uk9LRQ== 93717
IHNjYWxlWA== 93718
IHNlcnRh 93719
IEZyZXF1ZW50bHk= 93720
X1RSQU5TRk9STQ== 93721
IHR3aWxpZ2h0 93722
IE1jS2Vuemll 93723
bGVkZ2Vk 93724
IEB7QCI= 93725
X0FDVElW 93726
IGhvb2tlcnM= 93727
PWRlZmF1bHQ= 93728
IHdhbG51dA== 93729
IHVzZU5ld1VybFBhcnNlcg== 93730
IENoZWVy 93731
IHdyb25nZnVs 93732
bmlv 93733
YnRj 93734
LnN0cmlkZQ== 93735
IHN1Y2Nlc2Z1bGx5 93736
IFRyb2xs 93737
aWZpY2lv 93738
LmNvbmQ= 93739
IGhlYXBz 93740
X1BIT1RP 93741
PEFkZHJlc3M= 93742
IFN0aWNreQ== 93743
IG5pZ2h0dGltZQ== 93744
IGRhbmRv 93745
IEJJTEw= 93746
INC+0YLQstC10YI= 93747
RGV0ZXJtaW4= 93748
IGZ6 93749
KHNpZ25hdHVyZQ== 93750
IHZpbmRlbg== 93751
LkNPTk5FQ1Q= 93752
cnVpc2U= 93753
IHh1 93754
cHJldmVudA== 93755
Rk9Y 93756
VUlBcHBsaWNhdGlvbkRlbGVnYXRl 93757
U3BsYXNo 93758
IGVtYnJvaWRlcmVk 93759
IEhpbGZl 93760
LnNoYWRlcg== 93761
IGRvdWJ0ZWQ= 93762
UmVzcG9uc2VTdGF0dXM= 93763
IHVuc3RvcHBhYmxl 93764
dW5sb2Fk 93765
KyJd 93766
ImxhYmVs 93767
IGZyZWVsYW5jZXI= 93768
RGlyZWN0ZWQ= 93769
IHZvcmhhbmQ= 93770
IFNubw== 93771
ZXhpc3RlbmNl 93772
b3JkaWFs 93773
emFn 93774
LkFnZQ== 93775
IHNwYXducw== 93776
IFBTRw== 93777
c3RpdHV0aW9ucw== 93778
IHNpZ2h0aW5n 93779
LXRhbGs= 93780
INGB0L7RhdGA0LDQvQ== 93781
ZW5lcmltYQ== 93782
IEJlbnRvbg== 93783
X1N0b3Jl 93784
VHJhbnNwYXJlbnRDb2xvcg== 93785
IEV4cGxvc2lvbg== 93786
X0lTUw== 93787
Q2hlY2twb2ludA== 93788
IGRlZmxhdGU= 93789
0JLRi9Cx 93790
LXRyYW5zZmVy 93791
IEJhYmllcw== 93792
IGltYQ== 93793
LnVzYWdl 93794
IG5lZ2F0aXZpdHk= 93795
IEV4dHJlbWVseQ== 93796
a2o= 93797
RG93bmxvYWRlcg== 93798
CWFjdA== 93799
W2NoYXI= 93800
Tm9ybWFscw== 93801
X3JlZmVyZW5jZXM= 93802
IGRyYWNvbg== 93803
4bulYw== 93804
X1RSTlM= 93805
Y29tcGFueUlk 93806
IFZlcmQ= 93807
YW5pbw== 93808
IE1hdGNoZXJz 93809
KHJlbGF0aXZl 93810
IHJlZWxlY3Rpb24= 93811
LkhF 93812
VGF1 93813
INGB0YLRgNC+0LrQuA== 93814
IE1ldGFscw== 93815
IENvY2t0YWls 93816
IGFwcmVuZGVy 93817
X3ByZWZlcmVuY2U= 93818
LlNjaGVtZQ== 93819
IGdsR2V0VW5pZm9ybUxvY2F0aW9u 93820
VXNpbmdFbmNvZGluZw== 93821
0YDQsw== 93822
ICJdIik7Cg== 93823
TGVhZGVycw== 93824
J8OqdHJl 93825
X0RlbGF5 93826
UHJvY2Vzc2Vz 93827
aWN1bHR1cmU= 93828
XCI6e1wi 93829
4oCUIg== 93830
RW1vamk= 93831
LWdyb3c= 93832
IENDRA== 93833
Y29tcG9zZWQ= 93834
TWFpbnRlbmFuY2U= 93835
IFJ5emVu 93836
KGFn 93837
LnByb2I= 93838
IFNpbmF0cmE= 93839
IGhvcnJlbmQ= 93840
IE1vdW50ZWQ= 93841
X1BFRVI= 93842
IGN1aw== 93843
IHPDuGtlcg== 93844
IFF1YXI= 93845
X1JFU09MVVRJT04= 93846
J2VhdQ== 93847
IGJvdXJib24= 93848
IGF0SW5kZXg= 93849
L3BvbA== 93850
IOq0gA== 93851
CXB3 93852
fSl9Cg== 93853
LmZvcm1EYXRh 93854
IHVkZW4= 93855
IHJvYXJpbmc= 93856
Tm90aWZpY2F0aW9uQ2VudGVy 93857
IGNsdXN0ZXJlZA== 93858
IHBhaXJ3aXNl 93859
bXVsdGlsaW5l 93860
R2FtZURhdGE= 93861
Lkxhcmdl 93862
KSc6 93863
INGB0LXRgNCy0LXRgA== 93864
IFVJTWFuYWdlcg== 93865
U3Zj 93866
IFBsYXlzdGF0aW9u 93867
Lk1vcmU= 93868
LnF1YWxpdHk= 93869
IGNvbmZpZ0ZpbGU= 93870
LWNvbnRhaW5pbmc= 93871
IEdvYXQ= 93872
ZW5jaW9u 93873
IGxpa2VuZXNz 93874
LXVzaW5n 93875
IHNlYXNpZGU= 93876
4bqpdQ== 93877
YW50aWNpcGF0ZWQ= 93878
Rm9sZGVycw== 93879
LUxldmVs 93880
b3BjaW9u 93881
KXByZXBhcmVGb3JTZWd1ZQ== 93882
PigpKQ== 93883
PWFkZA== 93884
XGdyaWQ= 93885
IHln 93886
X0RSSVZF 93887
IEdldE5hbWU= 93888
LkRBTw== 93889
IGhhbm4= 93890
CWNhdA== 93891
IHZpZ24= 93892
IEhlbGxlcg== 93893
IENSRUFURUQ= 93894
YmVyb3M= 93895
YnV0dA== 93896
IGJlbmRz 93897
IExlZXI= 93898
0KY= 93899
IFNNUA== 93900
VmVjdA== 93901
IG9iamVjdFR5cGU= 93902
OmFzeW5j 93903
IGNvbXBldGVuY3k= 93904
IFF0QXdz 93905
TG91 93906
L2NhdA== 93907
UHJvc3RpdA== 93908
LXZlcw== 93909
CXR2 93910
IEVJ 93911
QW5kV2FpdA== 93912
IFRPT0w= 93913
fSo= 93914
X1Jlcw== 93915
IGFsaWdubWVudHM= 93916
7KGw 93917
IENsYW1w 93918
LXBhZA== 93919
IHdyaXRlRmlsZQ== 93920
IEFwcHJlYw== 93921
4oCZYXV0cmVz 93922
dWRhZGVz 93923
IGx1Z2FyZXM= 93924
c3BlbmRlcg== 93925
W2ltYWdl 93926
RVhJU1Q= 93927
IGRlY2VpdmU= 93928
IGh1bnRz 93929
X1ZPSUNF 93930
X0RY 93931
Q0FD 93932
ICgoJw== 93933
aXNrcw== 93934
LGZpbGVuYW1l 93935
IGxlYW5z 93936
SW5wdXREaWFsb2c= 93937
RGF0YUNvbnRyYWN0 93938
IHNtb290aGVk 93939
IHJlY3J1aXRlcnM= 93940
IHRhbmdsZWQ= 93941
X1RhYg== 93942
IEZpbGVBY2Nlc3M= 93943
WUM= 93944
IHZY 93945
PGR5bg== 93946
TGV4ZXI= 93947
IOKYhg== 93948
IGdsR2Vu 93949
VGVtcG9yYWw= 93950
IEFURg== 93951
YW5rbw== 93952
VXNlckNvZGU= 93953
IEtvdGxpbg== 93954
Li4KCgoK 93955
RU5DRUQ= 93956
LnVudHJhY2tlZA== 93957
X21y 93958
IHdhdmVsZW5ndGhz 93959
IGRpY2hv 93960
IGltdQ== 93961
X2NyZQ== 93962
W0o= 93963
X0RG 93964
IGF0dGFpbm1lbnQ= 93965
IGxpdGVycw== 93966
W2tleXM= 93967
IGxpc3Rhcg== 93968
SHR0cHM= 93969
IGJyZXdlcnM= 93970
IGFjb21wYcOx 93971
IHRvYXN0ZWQ= 93972
LmZyaWVuZA== 93973
IHJlbHU= 93974
IFBzeWNoaWM= 93975
TWFuaXA= 93976
ZG5h 93977
UHJp 93978
LWZsYXNo 93979
KGFydGlzdA== 93980
IEtvdg== 93981
cHJlc2VydmU= 93982
X3BlbWI= 93983
LnNldFByb2dyZXNz 93984
IGR1c2s= 93985
IGNhbm5hYmlub2lkcw== 93986
IEt1bmQ= 93987
IENvdW50aWVz 93988
IO2OmOydtOyngA== 93989
IHJlbmFtaW5n 93990
IFJ1c3Nv 93991
TlNTZXQ= 93992
KEVYUFI= 93993
5YW25LuW 93994
RGlhZ3JhbQ== 93995
LGxhc3Q= 93996
KHdpdGhEdXJhdGlvbg== 93997
IGluZGVidGVk 93998
IERpY2tlbnM= 93999
IEFscHM= 94000
IERlZ3JlZXM= 94001
aWRhcg== 94002
LWJsb29k 94003
K29mZnNldA== 94004
IEh1ZA== 94005
b3VuZGVy 94006
dWxuZXJhYmxl 94007
IHByaW8= 94008
YmxpbmQ= 94009
KHBhY2s= 94010
IG5pZ2h0bGlmZQ== 94011
IGlsbHVzdHJhdGluZw== 94012
IG51dHNoZWxs 94013
IGJyb2FkY2FzdGVycw== 94014
IGNvbXBhbnlOYW1l 94015
aXRvcmU= 94016
LnJpZ2h0QmFyQnV0dG9uSXRlbQ== 94017
Ym90ZQ== 94018
IFBJVA== 94019
LXNjcm9sbGJhcg== 94020
IHdpbmR5 94021
IFFNYWluV2luZG93 94022
aHVl 94023
LmVwb2No 94024
IGNhbWVy 94025
IENMVUI= 94026
aWZhcg== 94027
VW5hdmFpbGFibGU= 94028
LXF1b3Rl 94029
IEdyYXo= 94030
IHZhbHU= 94031
X01BVEVSSUFM 94032
IHBlbnk= 94033
IHRyYXR0 94034
IGxpY2tlZA== 94035
CWNhbg== 94036
IFRhaXdhbmVzZQ== 94037
UGFnZUluZGV4 94038
LlRpcG8= 94039
X1JlZA== 94040
IHZmcw== 94041
X3RyYW1wb2xpbmU= 94042
IE1QUw== 94043
IFBlYW51dA== 94044
IExvY2tlZA== 94045
CUFU 94046
anNwYg== 94047
X05PREVT 94048
J1dl 94049
IENvbnZlbmllbnQ= 94050
X3N1Y2Nlc3NmdWw= 94051
K3o= 94052
WUxlYWY= 94053
IHBlZGlncmVl 94054
eHo= 94055
IHNhbHZhcg== 94056
X0Rlc2M= 94057
IG5lc3Rh 94058
IGhhcmRjb2RlZA== 94059
LmdvbGQ= 94060
LkltYWdlRmllbGQ= 94061
X0JT 94062
TEs= 94063
Q2hvY29sYXRl 94064
LlN0YXJ0dXA= 94065
IGFuZWNkb3Rlcw== 94066
Lk1h 94067
P10= 94068
L3RvcGlj 94069
LlNjcm9sbEJhcnM= 94070
0YHRgtCy0LA= 94071
IE1PTQ== 94072
IHFvcw== 94073
YXJ5YW5h 94074
w6RjaHN0 94075
IE1jR2lsbA== 94076
IEVEVUM= 94077
KHBvc3Rz 94078
IEVudHdpY2tsdW5n 94079
X3NraWxscw== 94080
LWd1YXJk 94081
IHRleHRpbGVz 94082
fHVuaXF1ZQ== 94083
IEFyaXRobWV0aWM= 94084
TG9hZElkZW50aXR5 94085
KTt9Cgo= 94086
IGFzc3VyZXM= 94087
V2lsZGNhcmQ= 94088
IGRlZmF1bHRlZA== 94089
IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbg== 94090
IFRvbWF0bw== 94091
LlN1bW1hcnk= 94092
ISIu 94093
dXRoZXJmb3Jk 94094
IGxvb3Bob2xl 94095
IGNtYWtl 94096
LWRhdA== 94097
IHJhZ2F6em8= 94098
IGNhcGl0YWxz 94099
IEltcG9ydGFuY2U= 94100
IER1bmdlb25z 94101
X3pvbmVz 94102
LnNhdA== 94103
ICAgICAgCiAgICAgIAo= 94104
Y2F0ZWdvcmlhcw== 94105
IGRhdGF0YWJsZQ== 94106
IG5hamxl 94107
KGdw 94108
LXJlbg== 94109
IHBhbmlja2Vk 94110
IFNreWw= 94111
IFFVSUNL 94112
dmFsdWVPZg== 94113
U3RhdGlzdGlj 94114
IGRlbWVhbm9y 94115
bmRlcm4= 94116
IEFwcGVhcnM= 94117
UHJhZ21h 94118
X3Bhc3Q= 94119
SGFzaHRhYmxl 94120
IHRoYW5raW5n 94121
LmNzcmY= 94122
IHBhdmU= 94123
IFZpY3RpbQ== 94124
IFDDpQ== 94125
Rmlyc3RuYW1l 94126
Q0FURUdPUlk= 94127
aWxlc3RvbmU= 94128
JyktPl9fKCc= 94129
IGluY2FwYWM= 94130
U3RyZWFtV3JpdGVy 94131
IGNvbW11bmlvbg== 94132
X3N0ZGVycg== 94133
6Ieq5rK7 94134
IGh1bWFuaXRpZXM= 94135
INC70Y4= 94136
IFBhcmFz 94137
bG9mZg== 94138
SGVhZGVyVGV4dA== 94139
Z3JlZ2F0ZWQ= 94140
LlhSVGFibGVDZWxs 94141
IGVudGl0eUlk 94142
IE1hc3Rlcnk= 94143
b2xkdA== 94144
JykpKTsKCg== 94145
aHVtaWRpdHk= 94146
Li4uIik7Cgo= 94147
RGVsdGFUaW1l 94148
IG1rdGltZQ== 94149
UGhvdG9u 94150
IHBlbnNhcg== 94151
c2NhbGluZw== 94152
X3llbGxvdw== 94153
X211bHRpcGx5 94154
IFZ1bGNhbg== 94155
IFBlYXJjZQ== 94156
X2xj 94157
LWV4Y2x1c2l2ZQ== 94158
SXNVbmljb2Rl 94159
IHBhZHI= 94160
X1BDSUU= 94161
IGdsaW1wcw== 94162
IHJhbXBhZ2U= 94163
IFBhZ2luYXRvcg== 94164
IGNvbnZleWluZw== 94165
bm9yZQ== 94166
X2RldGFjaA== 94167
J10hPSc= 94168
IGJvbmE= 94169
CUNvbg== 94170
TmF6 94171
IHNlZ3VpbnQ= 94172
IG1pZXN6 94173
IGVzb3M= 94174
ICcvJykK 94175
IGZhaXRoZnVsbHk= 94176
IGJla29t 94177
0LDQutGB 94178
d2hlbG1pbmc= 94179
LnR3bw== 94180
IFNDRQ== 94181
LW5h 94182
ICgpew== 94183
IERhbWVu 94184
X3RndA== 94185
YWRhbGFmaWw= 94186
IE1NSQ== 94187
VGhpbg== 94188
IGRlcHJlY2lhdGlvbg== 94189
IGFic2VudGVl 94190
IHNhbGFyaW8= 94191
IFNvbWVib2R5 94192
IFNsb2Fu 94193
IGVyZm9sZ3JlaWNo 94194
Ok5TTG9jYWxpemVkU3RyaW5n 94195
IGdlaMO2cnQ= 94196
IGVtbw== 94197
IExhZ3VuYQ== 94198
w6FzYQ== 94199
aXN0cmF0ZXM= 94200
UmFpc2U= 94201
IEFzdHJvcGg= 94202
ICdcXCc= 94203
X3BlZA== 94204
IFRIUk9VR0g= 94205
IE5pZXR6c2NoZQ== 94206
ZW5lcmF0aW5n 94207
b3BsYXllcg== 94208
IHJvZGVudHM= 94209
w7xobA== 94210
R2FtZU1hbmFnZXI= 94211
IEhlYWRlckNvbXBvbmVudA== 94212
IG1pbGFu 94213
cXVlZW4= 94214
IFBPTEw= 94215
IEx5bWU= 94216
IEJyaWdncw== 94217
ZWNlcg== 94218
d2Fnb24= 94219
LkRFU0M= 94220
IGdsQmVnaW4= 94221
U3RhdGVtZW50cw== 94222
ZXRyaQ== 94223
IG1vY2tlcg== 94224
IEJsdWVwcmludFJlYWRPbmx5 94225
L2NvbnRlbnRhc3Npc3Q= 94226
ZW1hYWt0 94227
L2xvYWRlcg== 94228
X2xvd2VyY2FzZQ== 94229
Y2l2aWw= 94230
X3ZhbG9y 94231
X0dsb2JhbA== 94232
IGFkcg== 94233
aXRpemVu 94234
LlNpZGU= 94235
IEVtYmxlbQ== 94236
IHRoaXJkcw== 94237
X1NIQVBF 94238
UmVncmVzc29y 94239
UFlUSE9O 94240
IHBzeWNob3RpYw== 94241
IGN2cw== 94242
IEFwcGxpY2F0aW9uVXNlcg== 94243
IGFsdW5vcw== 94244
VG9nZ2xlQnV0dG9u 94245
IG5nYQ== 94246
IG3Do2U= 94247
YWR2ZXJ0aXNlbWVudA== 94248
5YiG5Lqr 94249
Lm92 94250
IEFPTA== 94251
UkVX 94252
INin2LPYqg== 94253
IEdpbm55 94254
IC8vLy8vLy8vLy8= 94255
U29uZ3M= 94256
YWNpYw== 94257
Q01Q 94258
IHJlY29nbml6ZXI= 94259
IHDDq3I= 94260
RElD 94261
O1wiPg== 94262
IGNsb3Q= 94263
OkV2ZW50 94264
LlRP 94265
IEN1cnNvcnM= 94266
XFN0b3JhZ2U= 94267
IElvbmljUGFnZQ== 94268
X2pldA== 94269
KEJpdENvbnZlcnRlcg== 94270
IGNoaWxkaXNo 94271
VHJhZGVy 94272
PEhUTUxJbnB1dEVsZW1lbnQ= 94273
X0ZSRVFVRU5DWQ== 94274
PSI7Cg== 94275
eXN0YWNr 94276
SnVy 94277
IOmU 94278
IHRjYg== 94279
IHJlY2liaXI= 94280
LnN6 94281
IO2BtOuemOyKpA== 94282
UEVSU09O 94283
bm92YQ== 94284
IGNvZXI= 94285
IE1haG1vdWQ= 94286
IFdvcmtwbGFjZQ== 94287
IiIiKSwK 94288
LlBhZ2VTaXpl 94289
Z2V0Um9vdA== 94290
KGJhc2VVcmw= 94291
W1U= 94292
IE1DUw== 94293
IENsYXJrc29u 94294
LnZvbA== 94295
ICIifQo= 94296
IHBldXg= 94297
IFByb2R1Y3RTZXJ2aWNl 94298
IG1vbmRheQ== 94299
IFRlc3REYXRh 94300
IE1hdWw= 94301
IHN0cm5jbXA= 94302
IHNob3BwZXI= 94303
dGhlb3J5 94304
IGV0aXF1ZXR0ZQ== 94305
bGljZW5jZQ== 94306
c2NhbA== 94307
LWNsdXN0ZXI= 94308
IGhpc3TDs3JpYQ== 94309
IFN1YnRyYWN0 94310
IGZpYmVyZ2xhc3M= 94311
X2xhc3RuYW1l 94312
IFJld3JpdGU= 94313
L3RvZG8= 94314
IG92ZXJmbG93aW5n 94315
IEdhdXNz 94316
b2theQ== 94317
IGNsdW1zeQ== 94318
KHh5 94319
IGV4ZW1w 94320
YW5hbHl6ZQ== 94321
LXRpY2tldA== 94322
bmluZQ== 94323
IERlYWRwb29s 94324
IGNvbHVt 94325
IEpL 94326
IFtdLA0K 94327
IEFzcGVu 94328
IG1hbGlnbmFudA== 94329
aMO1ZXM= 94330
U2NhbGE= 94331
aW5uZQ== 94332
IENPTlNUQU5UUw== 94333
X1ByaWNl 94334
IyUl 94335
IGFyc2No 94336
IE5TQXR0cmlidXRlZFN0cmluZw== 94337
IEZpbGVUeXBl 94338
YWxsb2NhdGlvbg== 94339
X3Npbmd1bGFy 94340
KFBvaW50ZXI= 94341
YW5uaWVz 94342
U3RvcmVk 94343
ICc7Cgo= 94344
4oCZZXg= 94345
ZHJz 94346
QnJpZ2h0bmVzcw== 94347
L09S 94348
VGV4dGJveA== 94349
IGtuYWNr 94350
IGplbmlz 94351
IG9jYXM= 94352
ZGF0YXA= 94353
IGdhbWVUaW1l 94354
IOCw 94355
bmR4 94356
IEVWVA== 94357
QnlUZXh0 94358
IGF0dHJpYnV0ZU5hbWU= 94359
IGp1Z2Fy 94360
X3NlcXM= 94361
IEZFQVRVUkVT 94362
OmRhdGU= 94363
ZmJl 94364
cmlwcGVy 94365
56iN 94366
LkV4cHI= 94367
VXJiYW4= 94368
aWRvdA== 94369
IG9ibGl2aW91cw== 94370
KERiQ29udGV4dA== 94371
Q2Fyb2w= 94372
KCcsJywk 94373
IEJyaWxsaWFudA== 94374
a2Fk 94375
Y2VudHJhdGlvbg== 94376
IGt1aw== 94377
IE1BTkFHRU1FTlQ= 94378
X1dFQVBPTg== 94379
IGppaGFkaXN0cw== 94380
IGVudHJlZw== 94381
IGRvxJ8= 94382
IGFwcGVuZGluZw== 94383
IFpp 94384
X2N0eHQ= 94385
IHF1YWRyYW50 94386
ZWxlbWVudFR5cGU= 94387
PWltZw== 94388
YnJ1YXI= 94389
SUNBU1Q= 94390
IGludGVsbGVjdHVhbGx5 94391
LkFubm90YXRpb24= 94392
IGNhbXBhaWduZXJz 94393
LkRhdGFHcmlkVmlld0F1dG9TaXpl 94394
IMWfZWs= 94395
IC9eKA== 94396
LkRhdGFUYWJsZQ== 94397
IHdlYmxvZw== 94398
KGxpYnJhcnk= 94399
IEZ1cw== 94400
IE9TVA== 94401
X1Bhc3N3b3Jk 94402
IEJ1Y2tsZXk= 94403
aG9mZg== 94404
QWxpZ25lZA== 94405
X1JlYWw= 94406
RU5USUM= 94407
L2dyYXBocWw= 94408
IFdlZWQ= 94409
IExTQg== 94410
b2NjYXNpb24= 94411
YWRkYWZp 94412
TGV0cw== 94413
KCJg 94414
IHdpZGVu 94415
KHZpc2l0b3I= 94416
ICJcCg== 94417
QU5URQ== 94418
LWNhbXB1cw== 94419
LUJhcg== 94420
Y2FtZWw= 94421
Rm10 94422
OmRlc2NyaXB0aW9u 94423
LmFyZQ== 94424
IEFuYXN0 94425
IExvbmdlcg== 94426
c2VyaW91cw== 94427
IGRhaGVy 94428
aXp6ZXI= 94429
TXVsdGlwbGljaXR5 94430
IEhvbGxhbmRl 94431
IEFubm90YXRpb25z 94432
KCk/ 94433
IHByb3Rlc3Rlcg== 94434
IFVyZHU= 94435
IHNwZWNpYWx0aWVz 94436
X2x5 94437
Q2Fk 94438
YW5udA== 94439
anNw 94440
IGpvZQ== 94441
KXI= 94442
IFBlcnNpc3Q= 94443
IG9ibA== 94444
IGRlYWRsb2Nr 94445
IHNlcmk= 94446
UmVsYXRpdmVUbw== 94447
IFl1cw== 94448
KFByaW50 94449
YWJpbGlh 94450
IHVucHJvdGVjdGVk 94451
IEFTSUM= 94452
Lk5vbWU= 94453
IFdlYkNsaWVudA== 94454
IElUVg== 94455
w7xybmJlcmc= 94456
aXRvcmk= 94457
U2lnbmluZw== 94458
IFJlYWRvbmx5 94459
IGVsZHJl 94460
IENoZWNrZWQ= 94461
YWxudW0= 94462
U291cmNlVHlwZQ== 94463
bGV4aWNhbA== 94464
IGlsbHVzdHJhdG9y 94465
IERpcmVjdG9yYXRl 94466
IFRyb20= 94467
bXBw 94468
bG9nZw== 94469
Lmluc3RydW1lbnQ= 94470
IHdvb2RlZA== 94471
IFVzZXJUeXBl 94472
IFJlbmNvbnRyZXM= 94473
bW9kZWxOYW1l 94474
QlRUYWdDb21wb3VuZA== 94475
PlRv 94476
IGZyZWV6ZXM= 94477
IENvbnRl 94478
IENyZWRlbnRpYWw= 94479
Y2FsYQ== 94480
L3dvcmtzcGFjZQ== 94481
IGxpYmlkbw== 94482
Y2hsdXNz 94483
b2xsZXlFcnJvcg== 94484
IGFjY2lvbmVz 94485
IEppbnBpbmc= 94486
YXTDqWc= 94487
SW50ZXJzdGl0aWFs 94488
KSkpKSk7DQo= 94489
eWJyaWQ= 94490
IFJvbGxlZA== 94491
TW9kZWxDcmVhdGluZw== 94492
IFJlZmxleA== 94493
IEx1Y2lmZXI= 94494
IGVoZXI= 94495
IGNhcm5pdmFs 94496
ISI7DQo= 94497
X0xPT0tVUA== 94498
IHN1Y2PDqHM= 94499
IHJlb3BlbmluZw== 94500
IGNyZWFkbw== 94501
IFNteQ== 94502
IEVudHM= 94503
LlNpbmNl 94504
IEZpc2hlcmllcw== 94505
L2Nvbm5lY3Rpb24= 94506
IENTQQ== 94507
INC/0YDQvtCz0YDQsNC80Lw= 94508
bHNydWhl 94509
CWFjdG9y 94510
IFN0cmF1c3M= 94511
SnNvblZhbHVl 94512
CWV2YWw= 94513
bG9ja2Vy 94514
IFhJVg== 94515
X2h5cGVy 94516
IFBvbGx5 94517
4oCmdGhl 94518
IEdVUkw= 94519
0LXRgdGB 94520
IGRpdmVz 94521
dWdlb3Q= 94522
aW5lbWE= 94523
YmVyc29tZQ== 94524
Q29tcHJh 94525
LWN1bHR1cmFs 94526
IGdyYW5kcw== 94527
U2Fj 94528
IEJhcm5leQ== 94529
X1FVRVNUSU9O 94530
IG1hbWFu 94531
IGhhc3RpbHk= 94532
IGNsdWJob3VzZQ== 94533
IGdydW5k 94534
X1dBTEw= 94535
IHB1cmlmaWNhdGlvbg== 94536
hOS7tg== 94537
0LLQsA== 94538
dmVzdG1lbnQ= 94539
LkRpc3BsYXlTdHlsZQ== 94540
X2NvcmVz 94541
JVM= 94542
IG9zw7Ni 94543
IGRpc2I= 94544
IEZyYW5raWU= 94545
IGluZGlzY3JpbQ== 94546
X0JlZ2lu 94547
KGVy 94548
O28= 94549
44Oz44Kw 94550
bm9kZU5hbWU= 94551
IHJlZnVuZGVk 94552
IGRpc21hbA== 94553
IEh1ZmZQb3N0 94554
IHVuZGVjaWRlZA== 94555
d3JpdGVsbg== 94556
a8Ozdw== 94557
IEJvc2U= 94558
CWxpYg== 94559
b3BsYW4= 94560
aW50ZXJwcmV0ZWQ= 94561
IE1PTkVZ 94562
dXZv 94563
IG50b2hz 94564
aXNldW0= 94565
Pmo= 94566
IHVuZml0 94567
IGh1Z2dlZA== 94568
IEplc3Q= 94569
bXBz 94570
IGJyb20= 94571
J28= 94572
IGZvdg== 94573
IFNocmluZQ== 94574
IEVJVEhFUg== 94575
eWNhc3RsZQ== 94576
IHNhdHVy 94577
cmVxdWVzdERhdGE= 94578
W2Rpcg== 94579
T1VDSA== 94580
X0Rv 94581
IHlvbA== 94582
IGluaXRpYWxWYWx1ZXM= 94583
W3ZlcnRleA== 94584
c2VydmljZU5hbWU= 94585
LnNhbGFyeQ== 94586
IEF1dGhlbnRpY2F0ZQ== 94587
6L6+ 94588
X1ZMQU4= 94589
KFtdKTsKCg== 94590
IFNlcnVt 94591
UGF0aFBhcmFt 94592
Zm9ybXVsYXJpbw== 94593
IHN1bW1hcml6ZXM= 94594
T0NS 94595
b3JhbQ== 94596
TERBUA== 94597
Ymlj 94598
cGlja2Vk 94599
LXRoYXQ= 94600
IGNkcw== 94601
CWFuaW0= 94602
IGludHJpYw== 94603
IFdvcnQ= 94604
IFZMQw== 94605
IFNoaWl0ZQ== 94606
U3R1ZGllcw== 94607
LmRpc3BhdGNoZXI= 94608
KGVuYWJsZQ== 94609
Lm1peGlu 94610
IFNleW1vdXI= 94611
IGJpb21lZGljYWw= 94612
IFNwb29u 94613
IE5vcnNl 94614
IGludGVudHM= 94615
IMOpcXVpcA== 94616
IERyZXNzZXM= 94617
TFBBUkFN 94618
LnNldFJlc3VsdA== 94619
LmRlbGV0ZUJ5SWQ= 94620
IG5ld2ZvdW5k 94621
IE9TRA== 94622
b3VzeQ== 94623
IGVzdGFkb3M= 94624
W0J5dGU= 94625
Q2h1Y2s= 94626
Lm9uVmlld0NyZWF0ZWQ= 94627
IENvbnRyaWJ1dGlvbg== 94628
X0VuYw== 94629
SU5FVA== 94630
IGZsYXZvcmZ1bA== 94631
IOOCog== 94632
dmlzYQ== 94633
IEhlcmN1bGVz 94634
LmdldEFwcA== 94635
IFlvaw== 94636
Lk1haW5BY3Rpdml0eQ== 94637
KS5b 94638
IGxhdXQ= 94639
SW52aXRl 94640
IENodXJjaGVz 94641
LCcj 94642
2YrYsQ== 94643
KFNT 94644
IHZlbmRh 94645
YXNqb24= 94646
LklOVEVS 94647
aXBoZXJ5 94648
KFN5bnRheA== 94649
b25kcm91cw== 94650
CWNlbnRlcg== 94651
QnJhY2tldEFjY2Vzcw== 94652
IENhcGNvbQ== 94653
LmdldEZvbnQ= 94654
IFZhdWx0cw== 94655
IGRpc2XDsWFkb3I= 94656
Om8= 94657
KHNoZWxs 94658
IGVDb21tZXJjZQ== 94659
IGFsdHJl 94660
X2F0dGFjaGVk 94661
IGlzcg== 94662
IG9idGFpbnM= 94663
LkNvbnRleHRDb21wYXQ= 94664
IGF0dGVuZGVl 94665
IFR3aWNl 94666
IE1vb2Q= 94667
6YKu566x 94668
bm9kb2M= 94669
IFBJWEk= 94670
c29mYXI= 94671
IEJsb29keQ== 94672
LkNvbXBsZXRl 94673
IEJFUg== 94674
IGdldENhdGVnb3J5 94675
IGRpc3F1YWxpZmllZA== 94676
X1RydWU= 94677
J2Vy 94678
LXRvbw== 94679
IGh5cGVybGluaw== 94680
X21heGltdW0= 94681
TmVhbA== 94682
IHBJbmZv 94683
LmdldEVsZW1lbnRzQnlOYW1l 94684
c2NoZWR1bGVk 94685
cGF5ZXI= 94686
CXZlcmlmeQ== 94687
LWVudGl0eQ== 94688
bWV0YXRhYmxl 94689
YmlsZHVuZw== 94690
IGRlbHRhWA== 94691
ZW1wbGFjZQ== 94692
IHJldmVydGVk 94693
cmVwaWQ= 94694
bGVhcm5lcg== 94695
fSkpCgo= 94696
dWNvc2U= 94697
IHJpY28= 94698
IGJhbmdlZA== 94699
IEFmcm8= 94700
KGluZXJ0aWE= 94701
YW5zYQ== 94702
IMOkdmVu 94703
S2FyZW4= 94704
IHN1cGVyc3Q= 94705
IGZydWl0aW9u 94706
b3RjaA== 94707
IFBheXM= 94708
UmVzaWRlbnRz 94709
IHByaXNt 94710
Jik7Cgo= 94711
Lmptcw== 94712
IFNsdWc= 94713
PScnKQ== 94714
IGd1dGVu 94715
IFNwaWVsYmVyZw== 94716
IFRGb3Jt 94717
KGJlZm9yZQ== 94718
IEZpbml0ZQ== 94719
5paw5aKe 94720
IG1laWxsZXVyZQ== 94721
0L/QuNGB0LDQvdC40LU= 94722
X0Vycg== 94723
LWZ0 94724
bmFubw== 94725
LkFkZHI= 94726
IC8vDQoNCg== 94727
IEpvbmFo 94728
IERpc2Nv 94729
IGx1bmNoZXM= 94730
IERGQQ== 94731
ZXhwbGljaXQ= 94732
XSc7Cg== 94733
IHJlZmluZXJ5 94734
IFN0cmluZ1R5cGU= 94735
dW5zcXVlZXpl 94736
IExpa2VseQ== 94737
V3JpdGVz 94738
LmJwbQ== 94739
IHBJdGVt 94740
b3Vuc2Vs 94741
U3RhbmRpbmc= 94742
IGNob2tlZA== 94743
IGFuc2No 94744
dXBpbA== 94745
IERlYnVnZ2Vy 94746
4qCA4qCA 94747
PEdyb3Vw 94748
IFNjYWxpYQ== 94749
IHN1YnN0aXR1dGlvbnM= 94750
IGNsaW1iZXJz 94751
ICopIg== 94752
IG5hbm9wYXJ0aWNsZXM= 94753
IEFQUFJP 94754
IHB1cmNoYXNlcnM= 94755
IFFUZXN0 94756
IEF3YWtlbmluZw== 94757
CVNlcmlhbA== 94758
LnJlcGFpbnQ= 94759
IHNhdm9yeQ== 94760
IHBvcm91cw== 94761
IGFWYXI= 94762
IFN1YXJleg== 94763
LUVhc3Q= 94764
Qm94ZXM= 94765
IFdlaW5lcg== 94766
IENSQQ== 94767
IOqwkuydhA== 94768
IHhsaW0= 94769
Ij8KCg== 94770
IHdhc2hpbmd0b24= 94771
7Jq0 94772
IHRvdGFsZW1lbnQ= 94773
X210aW1l 94774
LnNldFNjZW5l 94775
IGxsYW1h 94776
IGNibw== 94777
ZWZk 94778
IHVuZGVycmF0ZWQ= 94779
cmFpc2luZw== 94780
IE5BVElPTkFM 94781
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCg== 94782
b3B0aWM= 94783
aWRlYXM= 94784
IOaPkA== 94785
IGxhaw== 94786
ISEs 94787
IGtvbW0= 94788
cGFyYWd1cw== 94789
U2l0ZXM= 94790
IHN0cmVzc2luZw== 94791
IE1hdEJ1dHRvbk1vZHVsZQ== 94792
IENvbnZlcnRlZA== 94793
YW5hbWU= 94794
X1JFQURPTkxZ 94795
XT0+ 94796
IGJvcmRlbA== 94797
IGJpYmxpb2dyYXBoeQ== 94798
IGdyaWRDb2x1bW4= 94799
IGpvdXJuYWxpc3RpYw== 94800
7J6E 94801
IHJhc3BiZXJyeQ== 94802
c3RpY2U= 94803
IGFicmFzaXZl 94804
IERCSGVscGVy 94805
IGludGY= 94806
IFJUQlU= 94807
fSciLA== 94808
IEhhbw== 94809
c3dhbmE= 94810
IGphbnZpZXI= 94811
IGluc3RpdHV0ZXM= 94812
IFNlYmFzdA== 94813
X0NPTFM= 94814
IGZpZ3VyYQ== 94815
IFp1c3Q= 94816
Zm95 94817
PigpKTsKCg== 94818
IExpZWJl 94819
QWdlbmN5 94820
IOyLnOyekQ== 94821
IFRodW1ibmFpbHM= 94822
dGV4dFRoZW1l 94823
IGVjaG9pbmc= 94824
ZW1wZXJhdHVyZQ== 94825
IGZpcmVwb3dlcg== 94826
ZWRi 94827
OicpOwo= 94828
w6lnb3I= 94829
L2ZlZWQ= 94830
IGh1cmw= 94831
LWF2YWlsYWJsZQ== 94832
IFJlbmRlcnM= 94833
IGZkcw== 94834
IEpTR2xvYmFs 94835
IENpdGl6ZW5zaGlw 94836
a2llZ28= 94837
U3RhbmRhcmRJdGVt 94838
LnBsYWNlcw== 94839
IHNjYWxhYmlsaXR5 94840
IFRyYWlscw== 94841
Zm9sbG93ZXI= 94842
IHNlcnZpw6dvcw== 94843
ID8+Ii8+Cg== 94844
W21ldGhvZA== 94845
KGli 94846
IHJpZGljdWxl 94847
IGFkYXB0YWJsZQ== 94848
ZmlsdHJv 94849
IGtldG9nZW5pYw== 94850
LkltYWdlVHJhbnNwYXJlbnRDb2xvcg== 94851
IENGTw== 94852
IFBFRA== 94853
ICIiKTs= 94854
b2dsb2Jpbg== 94855
W3NpemVvZg== 94856
QnJhbmRvbg== 94857
LlRvU2hvcnQ= 94858
IG5pxbw= 94859
IFRFUk1JTg== 94860
LmdldFN0YXR1c0NvZGU= 94861
IGRlYnRvcg== 94862
IENPTlNUUkFJTlQ= 94863
CXNpZGU= 94864
IERvbWlubw== 94865
0YLQvtC8 94866
IGdsYWNpZXI= 94867
IGdyb3U= 94868
enA= 94869
IENhcmxh 94870
LUZlYg== 94871
UGVs 94872
LnJlYWRWYWx1ZQ== 94873
Y2xpbWF0ZQ== 94874
IHRpbGVTaXpl 94875
LnRyaXA= 94876
RU5URQ== 94877
IGNodWJieQ== 94878
IGltcG9zaXRpb24= 94879
TE9XRVI= 94880
LmJ5SWQ= 94881
Lkxvb2tBbmRGZWVs 94882
YXJpaA== 94883
LmZpbmRCeUlkQW5kVXBkYXRl 94884
IFN0b3JlZA== 94885
IGJvdXJnZW9pc2ll 94886
SFRUUFJlcXVlc3RPcGVyYXRpb24= 94887
IHN1Y2tlcg== 94888
LmRlcXVldWU= 94889
bGlja2Vu 94890
IHN1YnJhbmdl 94891
X01FRElVTQ== 94892
SXNsYW0= 94893
IFNwYXJrcw== 94894
77yaJQ== 94895
aW1wb3J0ZQ== 94896
IGAt 94897
IGpveXM= 94898
Z3JvdXBpZA== 94899
Rmx5aW5n 94900
CWJz 94901
Z3Jvc3M= 94902
IEZpZXN0YQ== 94903
IGNzdA== 94904
IGFmaWNpb24= 94905
b3Bob24= 94906
X0NJ 94907
am4= 94908
QmVhdXR5 94909
IHNjZQ== 94910
IGNyYWNrZXJz 94911
YXBr 94912
IGdvcmQ= 94913
IHByZXRleHQ= 94914
IFtc 94915
IENhbmRpZA== 94916
R29hbHM= 94917
QWN0aW9uVHlwZXM= 94918
LG51bWJlcg== 94919
IHBvcHVsYWNl 94920
IGVudHJlbg== 94921
IEF1dG9m 94922
6Zmi 94923
QmFzZUNvbnRleHQ= 94924
QmFsYW5jZXI= 94925
KEJvcmRlcg== 94926
IG1pbmNlZA== 94927
cmVjYWxs 94928
Y2Jh 94929
IGFwcHJvdmVz 94930
IEtsb3Bw 94931
ZXJtaW50 94932
X2Zyb250ZW5k 94933
ZXNjbw== 94934
IG5pbmV0ZWVu 94935
RHJpdmluZw== 94936
IFhWSQ== 94937
IFRhY3RpY3M= 94938
IHByb2dyYW1hcw== 94939
aWVzZW4= 94940
TW92 94941
ZGlldA== 94942
YXV0w6k= 94943
KCIuIik= 94944
IGdvdmVybm8= 94945
X0FuZA== 94946
L21pdA== 94947
IGNhZmV0ZXJpYQ== 94948
LXRyYWNraW5n 94949
IGNvbW11dGluZw== 94950
LnVua25vd24= 94951
X3R5cGVvZg== 94952
IFNTQQ== 94953
UFJPVE8= 94954
Lk1lcmdl 94955
IGZvckNlbGxSZXVzZUlkZW50aWZpZXI= 94956
IFNhdGlzZmFjdGlvbg== 94957
ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 94958
SU1QTElFRA== 94959
IFJlc3RyaWN0ZWQ= 94960
IE1hZ251bQ== 94961
0L3QvtC8 94962
S2Fuc2Fz 94963
YXlsaWdodA== 94964
IFRvd2FyZHM= 94965
IFRvbWU= 94966
IFRlbmRlcg== 94967
X2RlcHQ= 94968
LmNydA== 94969
dHJlY2h0 94970
U1RPTkU= 94971
IGVtcHRpZWQ= 94972
ICcpOwoK 94973
4LiB4Liy4Lij 94974
0Y/RgtGM 94975
bGVjaw== 94976
IFt+LA== 94977
LmV4cGlyZXM= 94978
IFRpZw== 94979
IElyb25pY2FsbHk= 94980
CUxM 94981
Lk5vdE5pbA== 94982
IOWKoA== 94983
IEdvdmVy 94984
IFBlcnNwZWN0aXZlcw== 94985
IERWUg== 94986
IGxva2FsZQ== 94987
IHJlc2VuZA== 94988
IGRvdWJseQ== 94989
IGNvbXVuaWRhZA== 94990
IEFzc2VtYmx5Q29tcGFueQ== 94991
KHR1cm4= 94992
IHN1Ymxpc3Q= 94993
IGVuZG9yc2VtZW50cw== 94994
X1JFR0lTVFJZ 94995
ISIpDQo= 94996
KTs7Cg== 94997
IGdhbnpl 94998
IEhhcm5lc3M= 94999
X21hdGNoZWQ= 95000
5L6h 95001
4oCiCgo= 95002
Q2hlZg== 95003
CUluaXRpYWxpemU= 95004
KTsiPgo= 95005
IEZhcmFnZQ== 95006
cmlzaA== 95007
YWx0ZXQ= 95008
RGVhbGVy 95009
LkxvZ1dhcm5pbmc= 95010
KGFmdGVy 95011
IEdhcnRlbg== 95012
IGV4cGxvZGVz 95013
LkNMQVNT 95014
IHVzZVJvdXRlcg== 95015
LUxh 95016
IHNhZGRlbmVk 95017
YXJvdg== 95018
VG9VcGRhdGU= 95019
IOae 95020
cGlp 95021
JwoKCgo= 95022
IFRSQU5TQUNUSU9O 95023
b25nYQ== 95024
bG9nYW4= 95025
Q3Jvdw== 95026
IGJyaXRpc2g= 95027
IENvbnRlbnRWaWV3 95028
X0JC 95029
b2x2ZW5jeQ== 95030
bG9hZE1vZGVs 95031
VE9PTFM= 95032
aGV0ZW4= 95033
X25o 95034
QUJM 95035
LXZlcnM= 95036
QXJlbmE= 95037
LnNpbmdsZXRvbkxpc3Q= 95038
KHBhdA== 95039
CW5hbWVz 95040
KHNx 95041
IHZhbG9yZQ== 95042
JHJlcQ== 95043
IGFudGhyb3BvbG9neQ== 95044
VGhpbmtpbmc= 95045
IG1pc2NoaWVm 95046
IGFyY2hpdmFs 95047
4KS5 95048
LlNldFRvb2xUaXA= 95049
cHJhcg== 95050
YW5qYQ== 95051
IGZpcnN0bHk= 95052
CWxpZ2h0 95053
LS0s 95054
IFNwZWFycw== 95055
IG9nbA== 95056
c3RlZW4= 95057
aW1wbGVtZW50cw== 95058
cmlzdHM= 95059
K0U= 95060
IEJhbnM= 95061
IGZhc3RiYWxs 95062
IEhlcm1lcw== 95063
dmVsZWQ= 95064
dHdlbnR5 95065
IG5lY2VzaXRh 95066
IE1vcm9jY2Fu 95067
aXNMb2dnZWRJbg== 95068
Q0xPQ0tT 95069
LkFic3RyYWN0aW9ucw== 95070
LlBhY2tldA== 95071
IG1lbmFjaW5n 95072
LXZlc20= 95073
IExpdmluZ3N0b24= 95074
IG9jaQ== 95075
IGV4dHJhZGl0aW9u 95076
ICQoJA== 95077
IExvY2tlcg== 95078
IFJlYmVsbGlvbg== 95079
IG1peGlucw== 95080
Y3RhbA== 95081
L3JmYw== 95082
IFNHRA== 95083
LGlkeA== 95084
IGJsZWlidA== 95085
KFwk 95086
IHBldGVy 95087
IGJhcnJlbg== 95088
IHBob3NwaG9yeQ== 95089
IGdvZ2dsZXM= 95090
LmhvbQ== 95091
QGQ= 95092
PSct 95093
LmlzVXNlcg== 95094
YWthc2g= 95095
X2h1Yg== 95096
aXBlbGluZXM= 95097
IEB9 95098
LnN1cm5hbWU= 95099
SW50ZXJvcA== 95100
IGluRmlsZQ== 95101
IGVzcGVjaWFsbWVudGU= 95102
IGF1dG9ub20= 95103
IFphbWJpYQ== 95104
X0NPVU5UUlk= 95105
PENvdXJzZQ== 95106
aWRlb2dyYXBoaWM= 95107
IENhbWVyb29u 95108
ZmluZEJ5SWQ= 95109
KSIu 95110
IERlcGVuZHM= 95111
cml0b3M= 95112
Lk91cg== 95113
IHN1YnNpZGl6ZWQ= 95114
JywnIis= 95115
IGdsZWFu 95116
IEFzc2VtYmx5Q29weXJpZ2h0 95117
cGljYWJsZQ== 95118
IHVud2l0dGluZw== 95119
IG9tZGF0 95120
IEVhc2U= 95121
IGVtYm9kaWVz 95122
KHBEWA== 95123
IFZvdGVy 95124
QXNzaWduZWQ= 95125
cmV2ZWFs 95126
IGZlbmQ= 95127
KHBhcnNlRmxvYXQ= 95128
IGRwcw== 95129
dHBsaWI= 95130
YXNzZXJ0Q291bnQ= 95131
eG1heA== 95132
VW51c2Vk 95133
KGZi 95134
IHN1Ym1pdHM= 95135
IFJlcGxpY2E= 95136
KGR5 95137
IGJhbmRl 95138
LnNlbWFudGlj 95139
IHNlYXJjaFN0cmluZw== 95140
IFNhbmZvcmQ= 95141
CWZ1bGw= 95142
cHJt 95143
X3V0aWxpdGllcw== 95144
VU5VU0VE 95145
IHNjYW5uZXJz 95146
IGJmZA== 95147
Lk9yZ2FuaXphdGlvbg== 95148
LWN1cg== 95149
UmFpbA== 95150
IHhueHg= 95151
JSk7Cg== 95152
IG92ZXJwb3N0aW5n 95153
VmlldA== 95154
IHRhcGVyZWQ= 95155
IGNhbWVv 95156
IFZpZXdpbmc= 95157
IGRpc21hbnRsZQ== 95158
IGZpc3M= 95159
IFNlbnRyeQ== 95160
aGVhdG1hcA== 95161
IMOhcmVhcw== 95162
IEdyw7w= 95163
IGppZw== 95164
LmNsZWFyUmVjdA== 95165
ZXZlbnRUeXBl 95166
IHR1cmJ1bGVuY2U= 95167
Y2tpbGw= 95168
LkZvY3VzZWQ= 95169
IGludGVybWVkaWFyeQ== 95170
IE9iZXNpdHk= 95171
YXRlZ28= 95172
bW9udG8= 95173
IEFsYW1vZmlyZQ== 95174
IFNoZWlsYQ== 95175
IENPTExFQ1RJT04= 95176
Q2FyZEJvZHk= 95177
IEhhYml0 95178
UExBTg== 95179
LnZpc3VhbGl6YXRpb24= 95180
JSkuCgo= 95181
IEludGVsbGlK 95182
IEdsb3Zlcg== 95183
LnNwYXRpYWw= 95184
IGdyZWV0aW5ncw== 95185
IE9wZW5GaWxlRGlhbG9n 95186
ey8q 95187
IFTDqWzDqQ== 95188
IEVm 95189
ICJbJQ== 95190
IG1hZ2lzdHJhdGU= 95191
IExpdGVjb2lu 95192
IFNlbGU= 95193
IGNvbW1lcmM= 95194
cHJpbnR3 95195
bmV4dEludA== 95196
LmdldENoaWxkQXQ= 95197
IEdldEN1cnJlbnQ= 95198
IGV1cm9ww6k= 95199
IEFJUw== 95200
ZXR0ZW4= 95201
LkV2ZW50UXVldWU= 95202
YW5mb3Jk 95203
dW5ha2Fu 95204
LnNldE91dHB1dA== 95205
IGNtZGxpbmU= 95206
LGdldA== 95207
IEhlYXJk 95208
LmNvbnRlbnRUeXBl 95209
ZW1k 95210
IFJldG9ybmE= 95211
YWNk 95212
IFBsYXlvZmY= 95213
YWNtYW4= 95214
LndlYnNvY2tldA== 95215
Q2xpZW50SWQ= 95216
LmV4YW0= 95217
IGF0dGVudWF0aW9u 95218
LnNldENoYXJhY3Rlcg== 95219
CUNvbGxlY3Rpb24= 95220
5rCX 95221
IHByZWRpY3RvcnM= 95222
IFNoZXJpZGFu 95223
cmltaW5hdG9y 95224
KFN0YWNr 95225
X1BLRw== 95226
PScnKToK 95227
KHBhZA== 95228
IE5vZG8= 95229
IGludGVyb3Blcg== 95230
IFRyYW5zcGFyZW5jeQ== 95231
CWR4 95232
emVt 95233
IHByYXRpcXVl 95234
IGZpYnI= 95235
KCk/Owo= 95236
X01PQklMRQ== 95237
LlJFRw== 95238
X1lFTExPVw== 95239
VGl0YW4= 95240
JykKCgoK 95241
IGNvbXBvbmVudE5hbWU= 95242
IENvb2xlcg== 95243
aXNGdW5jdGlvbg== 95244
LmZlZWRiYWNr 95245
IHBlcmZlY3RlZA== 95246
IHBhZWQ= 95247
LXNjcmlwdHM= 95248
U3VzcA== 95249
PE9wdGlvbg== 95250
IER0 95251
7YS0 95252
J1JF 95253
IE5STA== 95254
IE1hbm55 95255
IHJvZw== 95256
IEdhcnI= 95257
X2Nvb2tpZXM= 95258
U3Bs 95259
IHByb21vdGVycw== 95260
KmR0 95261
XEFQSQ== 95262
IGV2b2tl 95263
X0VudHJ5 95264
IGZpcmVmaWdodGVy 95265
aXZpZGFk 95266
SmFjb2I= 95267
IGxlZ2lvbg== 95268
KHBvbA== 95269
CWZsYXNo 95270
b29rZWVwZXI= 95271
LmNsaXBzVG9Cb3VuZHM= 95272
IGdyYXBoaXRl 95273
J2h0dHA= 95274
X1RSSUFOR0xF 95275
IERyb3BJbmRleA== 95276
LnNtdHA= 95277
IFVOU0lHTkVE 95278
X1BJQ1RVUkU= 95279
X09SSUVOVEFUSU9O 95280
IE9QUA== 95281
Iyc= 95282
w6FmaWNv 95283
Lmhpc3RvZ3JhbQ== 95284
IEJlbm55 95285
Pldl 95286
IHJlcG9zdA== 95287
IGZpYW5jZQ== 95288
IEJvdW50eQ== 95289
c3RyZXNz 95290
RGF0ZXRpbWU= 95291
Okg= 95292
IFNwaGlueA== 95293
Tm9ybWFsbHk= 95294
YXBpeGVs 95295
IHVzZXJBZ2VudA== 95296
IE1vcmk= 95297
L2xhYg== 95298
Lk1PREVM 95299
IEVtb3Rpb25hbA== 95300
U2NhbGVk 95301
ZGV2aWNlSWQ= 95302
IOqzhA== 95303
Y2Vhc2Vk 95304
PElN 95305
Y2VlZGVk 95306
IGxpYnJhcmlhbg== 95307
KW51bGw= 95308
IG1pY3Jvbg== 95309
IEZvdQ== 95310
dWxlbg== 95311
L2xpdmU= 95312
cnNjaGVpbg== 95313
ZmVh 95314
IGhhYmls 95315
IE5hdkxpbms= 95316
bmVjZXNzYXJ5 95317
LmNvZGVz 95318
LW1ha2U= 95319
IHBQYXJlbnQ= 95320
X3JlbGF0aW9ucw== 95321
IHJ1c2hlcw== 95322
IHByb3BlbnNpdHk= 95323
IFNraW5ueQ== 95324
V0VTVA== 95325
X2NvcnB1cw== 95326
KHJlb3JkZXJlZA== 95327
ZmRi 95328
IEdldE1lc3NhZ2U= 95329
QnJ1bg== 95330
LnZz 95331
IHDFgg== 95332
IGNydW5jaHk= 95333
Qm9vbQ== 95334
UEo= 95335
SmFrZQ== 95336
57qm 95337
JGNsaWVudA== 95338
IH1dKQo= 95339
IGNvbnZlcnNl 95340
IEdSQVQ= 95341
IENSUw== 95342
Lkxvdw== 95343
KHZhbGlkYXRl 95344
X0NMSUNLRUQ= 95345
LmJsdWV0b290aA== 95346
CXh0eXBl 95347
IGNsb3NlTW9kYWw= 95348
X2ludGVudA== 95349
IHByb2dub3Npcw== 95350
c2F2 95351
Q3Rs 95352
IGNob29zZXI= 95353
IFN1ZG9rdQ== 95354
PVVzZXI= 95355
LmNsZg== 95356
CWV4cGxpY2l0 95357
IHBvdGVudGlhbHM= 95358
IEdlb3JnZXM= 95359
IGVsaWM= 95360
IHRzbGli 95361
IFJhZ25hcg== 95362
X3JlcHJlc2VudGF0aW9u 95363
LWxlZ2dlZA== 95364
aGFtc3Rlcg== 95365
IEZpcmVzdG9yZQ== 95366
Y29udmVydFZpZXc= 95367
Q29tYmluZWQ= 95368
INC00LXQuw== 95369
IGVzcGVjdA== 95370
IOOCkg== 95371
IFN0YW1pbmE= 95372
bG9va3M= 95373
RU5BUklP 95374
L2ZpeHR1cmVz 95375
LnNtcw== 95376
IHNlbWljbGFzcw== 95377
IHNlbWljbGFzc2ljYWw= 95378
LlBlZWs= 95379
XSQ= 95380
X0RTUA== 95381
X0xWTA== 95382
VklSVFVBTA== 95383
IENhcGl0YWxz 95384
IFNDVA== 95385
LldoaWxl 95386
IFN1YnN0YW5jZQ== 95387
LWRvbmU= 95388
IGVuc2xhdmVk 95389
Y2xhc3NpZnk= 95390
ZW50YW55bA== 95391
IFZlZ2V0YWJsZQ== 95392
X0RFUEVORA== 95393
RGFuaQ== 95394
IHF1aWVyZXM= 95395
IGFiYmlhbW8= 95396
IExpYmVy 95397
YWZj 95398
6YCf 95399
cHJlZGljdGVk 95400
LlBORw== 95401
IFdoaXA= 95402
Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== 95403
IOKJoA== 95404
IOWM 95405
REVN 95406
Q0NB 95407
L2Nsb3Nl 95408
IC8vLzwv 95409
IG1lc21h 95410
IEJlaXJ1dA== 95411
IEluaXRpYWxpemluZw== 95412
4buZdA== 95413
TU9OVEg= 95414
IO2bhA== 95415
UGFya2luZw== 95416
Q29tZm9ydA== 95417
IEVuZ2luZXM= 95418
d2VycA== 95419
QFJlcXVlc3RQYXJhbQ== 95420
LUtleQ== 95421
IGJhY2tsaWdodA== 95422
cGFzc2Vz 95423
Lm51bWJlck9mTGluZXM= 95424
L0xpbnV4 95425
KEhUVFA= 95426
IEh0dHBVUkxDb25uZWN0aW9u 95427
b3Nvcw== 95428
Lnh4 95429
IGZpbG1wamVz 95430
ID09PT4= 95431
b3B0aW1pemU= 95432
Q2Fub24= 95433
IC4uLiIK 95434
ICciJzsK 95435
IGPDqWxpYg== 95436
IHByaW5jaXBhbG1lbnRl 95437
IFByb3BlcnR5VmFsdWU= 95438
T1VOQ0U= 95439
IGV4Y3Vyc2lvbg== 95440
IEFjY2Vzc1Rva2Vu 95441
cmVxdWV0ZQ== 95442
Vm9sdGFnZQ== 95443
ZXhwbGFpbg== 95444
fSkoKTsKCg== 95445
VVJMT1BU 95446
IGZ1bmdhbA== 95447
R3JlZWs= 95448
LWJsaW5k 95449
IGZldWRhbA== 95450
IFNvbmF0YQ== 95451
IERpYWdub3Npcw== 95452
JHhtbA== 95453
ZWRpdGFyeQ== 95454
IHN0aW11bGF0ZXM= 95455
UG9udA== 95456
Lkhhc1ByZWZpeA== 95457
Ym9hdHM= 95458
IFNjYXR0ZXI= 95459
IEdFTkVSSUM= 95460
IGZpc2hlcw== 95461
PWxlbmd0aA== 95462
IG1lbGhvcmVz 95463
c3BlbnQ= 95464
w7Rt 95465
IEluZ3JhbQ== 95466
Pi4KCg== 95467
cGFyaXR5 95468
LlZpZGVvQ2FwdHVyZQ== 95469
IFR1YmVz 95470
IGNvbWVkaWM= 95471
IHByb2Nlc3NEYXRh 95472
QURC 95473
KG5ld1N0YXRl 95474
5YGc 95475
IFdlYnNlaXRl 95476
X09mZg== 95477
LGJvZHk= 95478
IHN1YmNvbnRyYWN0 95479
IGNodXRl 95480
IGNhcnRlc2lhbg== 95481
dGhyZXNo 95482
LkNhcnQ= 95483
IG1ldG9k 95484
Y3VzdG9taXpl 95485
THRk 95486
CXNvdW5k 95487
V2ViU2VydmljZQ== 95488
IEhpbmRlcmVk 95489
W3Jlcw== 95490
KFRpbGU= 95491
Y2FwYWJpbGl0aWVz 95492
X09WRVJGTE9X 95493
INGB0YHRi9C7 95494
IENvY2g= 95495
IHRlc3ROYW1l 95496
V09SRFM= 95497
XE1vZHVsZXM= 95498
P3VybA== 95499
X2NvbnRpbnVvdXM= 95500
IFFJY29u 95501
IHN0YXJlcw== 95502
IGVqZWN0ZWQ= 95503
IEludmFzaW9u 95504
ZmluYWxpemU= 95505
IGdldg== 95506
PGc= 95507
IEVkaXRvckdVSQ== 95508
QmVybGlu 95509
LmxpbmVFZGl0 95510
LXJlZ2V4cA== 95511
IHNsZWQ= 95512
IEVBQ0g= 95513
dWNv 95514
IHNlZWRpbmc= 95515
IGxvY2FsaXpl 95516
ZXR1 95517
X2FsbW9zdA== 95518
cGFuc2U= 95519
IFNlbnNvcnM= 95520
X1NJ 95521
KnNw 95522
IFByb3BlcnR5SW5mbw== 95523
IGFwcm94aW0= 95524
IGRhdGFHcmlkVmlld1RleHRCb3hDb2x1bW4= 95525
16A= 95526
IGRpZmVyZW5jaWE= 95527
TE9PSw== 95528
IG9tbmlw 95529
IFR1cmluZw== 95530
IHVuaWRhZGVz 95531
77yfCg== 95532
LlJvd0hlYWRlcnM= 95533
X0FDVElPTlM= 95534
IERhbHk= 95535
IGZvcnRpZmllZA== 95536
IFdhZ2U= 95537
LnNpbXBz 95538
KGlzc3Vl 95539
IGxlcHQ= 95540
T3duZXJJZA== 95541
J29yZGVy 95542
5Y+N 95543
56Wo 95544
IHJld3JpdGluZw== 95545
Lkl0YWxpYw== 95546
IEZvcmdvdHRlbg== 95547
KElM 95548
IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24= 95549
ZXdu 95550
IHBvcHVsb3Vz 95551
IFNoZWQ= 95552
IyR7 95553
IEFsbw== 95554
RGV2aWNlSW5mbw== 95555
KElOVk9LRQ== 95556
IHBlbmE= 95557
IEJCQg== 95558
LmJi 95559
IHRvcnM= 95560
IGNvbmR1Y2l2ZQ== 95561
LXB1cnBsZQ== 95562
IHNxdWFyZWx5 95563
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCg== 95564
0LrRgNGL 95565
ZmFzdGE= 95566
IGNwdA== 95567
IEluZ2Vu 95568
IHs/fQ== 95569
0YPQsw== 95570
UGVybA== 95571
LnNreQ== 95572
LWF1dG9tYXRpYw== 95573
aW1wbGVtZW50 95574
b3JubWVudA== 95575
LklNQUdF 95576
LVNwZWVk 95577
CUZpZWxk 95578
IHBvdW5kZWQ= 95579
IExa 95580
IGF1dG9Gb2N1cw== 95581
IOC5gA== 95582
LkNvbXBhbmlvbg== 95583
IFZpbQ== 95584
dW5jaWE= 95585
X3NrYg== 95586
IHVubWFycmllZA== 95587
IFNvdXI= 95588
Z2FhcmQ= 95589
TGVvZA== 95590
IOCq 95591
LkNsb3Vk 95592
IHJlaW5mb3JjZXM= 95593
J10+ 95594
IGZlbGl6 95595
IFVBVg== 95596
cmFuY2Vz 95597
5Y2B 95598
VG9MaXN0QXN5bmM= 95599
LkV4ZWN1dG9y 95600
LXRz 95601
ICcuJzsK 95602
IEtpbmVjdA== 95603
44GE44GG 95604
IGJldm9y 95605
IEV4dHJhY3Rpb24= 95606
X2RyYXdlcg== 95607
JHN1Yg== 95608
IHVwbGlmdGluZw== 95609
LmJ0bkV4aXQ= 95610
KCcvLypbQA== 95611
UkVESVM= 95612
c3RkZXhjZXB0 95613
ZGVv 95614
IGdpdmVy 95615
X2JpbmRpbmdz 95616
VG9EZXZpY2U= 95617
Lm1p 95618
IEVzdGltYXRlcw== 95619
YWxsZWxl 95620
Pz8/Cgo= 95621
IFN0cmVhbXM= 95622
IGFmZmxpY3Q= 95623
LnNhcA== 95624
IHF1YWxp 95625
IEdhdWw= 95626
U3BlY2lmaWVz 95627
IHpr 95628
IHNhbml0YXJ5 95629
IG5ld0luZGV4 95630
c3BlY3M= 95631
IGZyYWdtZW50TWFuYWdlcg== 95632
IE5lY2Vzc2FyeQ== 95633
CVNwcmluZw== 95634
PX4= 95635
IE9NQVA= 95636
Y2FyZWVy 95637
KCItIik7Cg== 95638
IERhcmxpbmc= 95639
aXRhZw== 95640
OnBr 95641
IFN0ZWxsYXI= 95642
IGluZmVydGlsaXR5 95643
bGV4aWJsZQ== 95644
VW5hcnk= 95645
IDpdLA== 95646
Lk5FVw== 95647
Z3N1Yg== 95648
X1VGdW5jdGlvbg== 95649
LnNsaWRlcw== 95650
IGRpdmVyc29z 95651
X2xvY2Fscw== 95652
XFwv 95653
IHBjYXA= 95654
IE9vaw== 95655
LkRhdGFHcmlkVmlld0NvbnRlbnRBbGlnbm1lbnQ= 95656
ZXJzb25pYw== 95657
IHRyZWJ1aWU= 95658
IHNlcXVlbnRpYWxseQ== 95659
YWJhcg== 95660
IElQQ0M= 95661
IGRldm91dA== 95662
XEhlbHBlcnM= 95663
RVR3ZWV0 95664
IHRyYWJhamFy 95665
IFdpbGtpbnNvbg== 95666
IGRhw58= 95667
SHVtYW5z 95668
VGVhY2hlcnM= 95669
IERhdGFWaWV3 95670
IFlvZw== 95671
IGplZGU= 95672
IGFtYmlhbmNl 95673
dHJhbmQ= 95674
IGVycmF0aWM= 95675
IHThu6s= 95676
LnJhYmJpdA== 95677
IG5ld2JpZQ== 95678
IGVudHJhbmNlcw== 95679
IG9ydGhvZ29uYWw= 95680
IERJU1BBVENI 95681
IFNjaHJv 95682
X1RVUk4= 95683
Omludm9rZQ== 95684
IHRhbnRhbA== 95685
IFpvbmVz 95686
c3RhdGVtZW50cw== 95687
TGltaXRz 95688
IEfDpA== 95689
aWHFgmE= 95690
LnByZWRpY2F0ZQ== 95691
LkZS 95692
IENocmlzdG9waA== 95693
LkNvbnM= 95694
IEhvcnRvbg== 95695
X0N1c3RvbWVy 95696
CU1E 95697
IGVsa2Fhcg== 95698
IE1TRQ== 95699
IElzQWN0aXZl 95700
XSop 95701
XFVuaXQ= 95702
IGVv 95703
Rm9yT2JqZWN0 95704
ZWxpYWM= 95705
LWRldmVsb3BtZW50 95706
IHRlYWw= 95707
IHN0aXRjaGVk 95708
IE91dGNvbWU= 95709
b25jw6k= 95710
ZW1iZWRkaW5n 95711
IG9uTmV4dA== 95712
IO2VtOuLuQ== 95713
KGV4aXN0aW5n 95714
LmJpZA== 95715
CWFzc2VydEZhbHNl 95716
e2w= 95717
TEVycm9y 95718
X2J1bGxldA== 95719
KEh0bWw= 95720
IGVCb29rcw== 95721
cGVyUGFnZQ== 95722
L3F1ZXN0aW9u 95723
LmZha2U= 95724
Lm1i 95725
X2RsbA== 95726
IGN1bXNob3Q= 95727
IE1hZGFnYXNjYXI= 95728
SE9MREVS 95729
IHBlc3F1aXNh 95730
X0RFQ0xT 95731
XSxbLQ== 95732
IEFsYmFuaWE= 95733
LXRvYXN0 95734
IHByb3RhZ29uaXN0cw== 95735
IG15b2NhcmQ= 95736
IHdhbGtlcnM= 95737
ID09PT09PT0= 95738
L1BhZ2U= 95739
PTw/PQ== 95740
IGVucXVhbnRv 95741
X1RSVU5D 95742
IHNlcHRlbWJyZQ== 95743
IGxheW91dFBhcmFtcw== 95744
ICcuLi8uLi8uLi8uLi8uLi8= 95745
IFRyYWZmb3Jk 95746
IHBhbGF2cmE= 95747
IHJ1bmRvd24= 95748
IGJyaXR0bGU= 95749
w6RjaGU= 95750
LllFTExPVw== 95751
IENlcmVtb255 95752
IG5ld1RleHQ= 95753
dmVjcw== 95754
IGVzc2Vu 95755
IE1ldG9kbw== 95756
IEdVSURF 95757
IHBvc3Rwb25l 95758
IFZTdGFjaw== 95759
WyIk 95760
IE1pY3Jvc3lzdGVtcw== 95761
XFBhZ2U= 95762
cG1hdA== 95763
X0ZBVUxU 95764
X21C 95765
U3RhdGVNYWNoaW5l 95766
RmFjdWx0eQ== 95767
Lnd4 95768
IE1vemFydA== 95769
YW5pbWU= 95770
IHB5dA== 95771
IEJ1a2tpdA== 95772
LUlORlJJTkdFTUVOVA== 95773
IHNlYXJjaGVy 95774
LWJhc2tldA== 95775
IG9tYXM= 95776
IFR1bmlz 95777
IFBsYXR0 95778
IHsNCg0KDQo= 95779
eWFo 95780
dG9sdWE= 95781
SW50cm9kdWNlZA== 95782
c3VwcGx5 95783
IG1pc29neW4= 95784
IFdhaXN0 95785
IEVI 95786
LW9wZXJhdG9y 95787
IGRhcmtlbg== 95788
IENvc21pYw== 95789
IGdsYWNpZXJz 95790
IA0NCg== 95791
XVtf 95792
Q29tcGFueUlk 95793
IFJlY29uc3RydWN0aW9u 95794
aXp6bGllcw== 95795
IGzDrWRlcg== 95796
IGNvbGxlZ2lhdGU= 95797
IFBldHR5 95798
T1VSTkFM 95799
ZGVjb3JhdG9ycw== 95800
cmFtcw== 95801
KCgK 95802
IEFzdHJvbm9teQ== 95803
IHJpbw== 95804
IEN5cmls 95805
anVhbg== 95806
IHJlaW5j 95807
IFBpc3RvbnM= 95808
IEJ1c3k= 95809
cHRyb24= 95810
IHBvbW9j 95811
CVJUQ0s= 95812
QnV5aW5n 95813
Ly8qKgo= 95814
IFdyYXBwZWQ= 95815
IE1lZXI= 95816
IGltYXA= 95817
IGJlc3RpbW0= 95818
IEFnaWxpdHk= 95819
LlRvVGFibGU= 95820
c3RpbmVuY2U= 95821
XSkqKg== 95822
IEF1dG9tYXRlZA== 95823
ZHNw 95824
IEdhcmxpYw== 95825
aW9kZQ== 95826
ZXhlbHM= 95827
aW50cm9z 95828
IGJlc3Rvd2Vk 95829
KHZpc2libGU= 95830
IGh5ZHJhdGVk 95831
bm94aW91cw== 95832
IEF1dGhlbnRpY2F0aW9uU2VydmljZQ== 95833
IHNob3dNb2RhbA== 95834
IGNvbXBvc2Vycw== 95835
R0VORVJBTA== 95836
Q1RT 95837
IFNocg== 95838
Y3JlYXQ= 95839
IGNsb3NldHM= 95840
IGdyb3VuZGluZw== 95841
IENPTU1FTlRT 95842
ICsj 95843
IGdyb3VuZHdvcms= 95844
KGluZGV4UGF0aA== 95845
Z3JhdGlz 95846
dXBwaWVz 95847
IGt2bQ== 95848
IGN1YWxlcw== 95849
LkRlZXBFcXVhbA== 95850
IGFsbG95cw== 95851
LWJ1ZGdldA== 95852
KF9fXw== 95853
IGNvbmVjdGFy 95854
LXJhZA== 95855
IGl0Y2g= 95856
bGFtcA== 95857
LmdycA== 95858
LWFkZG9ucw== 95859
IHNlYWJvcm4= 95860
IG5lZ2xpZ2VudA== 95861
X0RldGFpbA== 95862
IHNlcmVuZQ== 95863
IGJhcnJhY2tz 95864
IGJx 95865
IFNlY3Q= 95866
KGRhdG9z 95867
IHRoZW1hdGlj 95868
IHBvbGx1dGVk 95869
CWFuaW1hdGlvbg== 95870
SHVnaA== 95871
RXhlY3V0YWJsZQ== 95872
KCcvJylb 95873
IGFwb3B0b3Npcw== 95874
IGFiYnJldmlhdGVk 95875
Zm9vbg== 95876
UmFua2Vk 95877
CWhpdA== 95878
CQkgICAgICAgICAgICAgICAgICAgICAgIA== 95879
Q29udGludW91cw== 95880
IG1vdmVUbw== 95881
REJPYmplY3Q= 95882
IGNvbmNlaXZhYmxl 95883
IEd3ZW4= 95884
IMOhbGw= 95885
X18oKQ== 95886
IExhbmE= 95887
IGVpbnplbA== 95888
IHJlY291bnRz 95889
eXN0ZW1z 95890
b3dhbnk= 95891
KTo/Pgo= 95892
IEFrcm9u 95893
b2xpbmk= 95894
Q29ycA== 95895
YXBocmFn 95896
ICInLg== 95897
IGNvbnZlbmVk 95898
IC4uLi4KCg== 95899
IGNhbGxlZQ== 95900
IENsb3Zlcg== 95901
LmRlc2NyaXB0b3I= 95902
Lkl0ZW1TdGFjaw== 95903
IHBlcnZlcnNl 95904
X0NF 95905
PUAi 95906
LS0tDQo= 95907
IGJldg== 95908
c3VtYQ== 95909
YWNjdW11bGF0b3I= 95910
IGxpemFyZA== 95911
INC+0Yc= 95912
Z2V0RGVzY3JpcHRpb24= 95913
IFNhcmFz 95914
Lm5leHRTaWJsaW5n 95915
IGVsYXN0aWNpdHk= 95916
IGNoYWM= 95917
bW92ZWQ= 95918
X1RvcA== 95919
dHJlcg== 95920
KGRvd24= 95921
ZWxlbXM= 95922
b2JpbGk= 95923
LnBvc3RNZXNzYWdl 95924
ICjiiA== 95925
Q3N2 95926
IFlvc2VtaXRl 95927
c3dlZXQ= 95928
TUFUUklY 95929
aWdyYXRlZA== 95930
IGZvcmdpbmc= 95931
IFBhZ2VTaXpl 95932
dHJhbnNmb3Jtcw== 95933
PVlFUw== 95934
IGRpc2Nsb3Npbmc= 95935
IFBlZGlhdHJpYw== 95936
IERlYWRseQ== 95937
UmVzb3VyY2VJZA== 95938
LWJpbmFyeQ== 95939
IFJvd2U= 95940
IENhaXI= 95941
X2V4dHJhY3Rpb24= 95942
RGVjcmU= 95943
IE9ic3Q= 95944
cGxy 95945
IFBoeXNpb2xvZ3k= 95946
bXZj 95947
aHRp 95948
LlRl 95949
IGV4dHJhdmFnYW50 95950
IEFudGli 95951
w7NzdA== 95952
b3V0ZGly 95953
IGNhcm5l 95954
Vmlld1BhZ2Vy 95955
IGltcGxhbnRlZA== 95956
U2VhcmNoUGFyYW1z 95957
w7xyZ2Vy 95958
Y29uZGU= 95959
YWNlbnRl 95960
X0NVREE= 95961
JHZhbA== 95962
IldoaWxl 95963
IHRlbXBMaXN0 95964
IHN5bmFnb2d1ZQ== 95965
Y21j 95966
INGA0LDQsdC+0YLRiw== 95967
IHNlem5hbQ== 95968
IHNlc3N1YWxp 95969
IGNhYmV6YQ== 95970
ZXTDoA== 95971
IGZhw6c= 95972
Z2Vo 95973
Y2VkZQ== 95974
IlNvbWU= 95975
Om9u 95976
LWZvcm1lZA== 95977
YnluYW1l 95978
IOuwmO2ZmA== 95979
IG5hw68= 95980
IEFVRw== 95981
IGVhc2Vk 95982
XSl7 95983
KHB0aHJlYWQ= 95984
IGplZGVt 95985
KGZpeHR1cmU= 95986
IFBhcmw= 95987
XX0pOwo= 95988
IGV4cHVsc2lvbg== 95989
IEluZXRBZGRyZXNz 95990
IE1MUA== 95991
LicpOw== 95992
IG9ybw== 95993
IFNldmlsbGE= 95994
IGZvcm11bGFpcmU= 95995
LXRlcnJvcmlzbQ== 95996
L1dlYkFQSQ== 95997
KmFuZ3N0cm9t 95998
Y3Jhd2w= 95999
X2xvYW4= 96000
X0RJR0VTVA== 96001
IEtub3h2aWxsZQ== 96002
LmdjYQ== 96003
IERpeQ== 96004
bnRhZw== 96005
YWJsZVZpZXdDb250cm9sbGVy 96006
LkZlZWQ= 96007
LXNoYXJlZA== 96008
IGNvY2Np 96009
X2ludml0ZQ== 96010
IEJ1Y2tpbmdoYW0= 96011
IEdsdXRlbg== 96012
IGVuZGVtaWM= 96013
UmFpc2Vk 96014
IHF1ZXJ5SW50ZXJmYWNl 96015
IG1hcnRpbg== 96016
QuG6oW4= 96017
IGhhcmU= 96018
IGRlaW4= 96019
cmFyaWFu 96020
bXlmaWxl 96021
IGFuZ3Vpc2g= 96022
VGV4dG8= 96023
IEJVRkY= 96024
KGxu 96025
bWFycw== 96026
X3N1YnRpdGxl 96027
X2dpZnQ= 96028
IGJvbGRseQ== 96029
IFNpbmd1bGFy 96030
KExvZ0xldmVs 96031
PEFydGljbGU= 96032
L3N0YXRz 96033
INC/0L7Qsg== 96034
IGl0ZW5z 96035
IGRlbm9taW5hdGlvbg== 96036
LkRhdGFHcmlkVmlld1RyaVN0YXRl 96037
X0xS 96038
IER1Y2hlc3M= 96039
CUJsb2Nr 96040
dHJhY2Vy 96041
LUNO 96042
XEFwcERhdGE= 96043
Lmxpc3Rz 96044
KFJvdXRl 96045
IEdPT0RNQU4= 96046
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== 96047
IHRpbmhh 96048
IGV2ZXJsYXN0aW5n 96049
YURhdGE= 96050
KGNvbXBhcmU= 96051
IHJwdA== 96052
XFBocA== 96053
LkZJTEVT 96054
IHNwYXJpbmc= 96055
U2Nhcg== 96056
INin2YTYqg== 96057
IEJldGhsZWhlbQ== 96058
IGJhY2twYWdl 96059
c3BsaWNl 96060
ZsO2cg== 96061
QGR5bmFtaWM= 96062
4bupYw== 96063
7KY= 96064
LnBhZ2luZw== 96065
IEJlbG1vbnQ= 96066
LkVYUA== 96067
IGludGVybGU= 96068
IENoZWNrbGlzdA== 96069
IFVuaWNvcm4= 96070
QkVTVA== 96071
Z2V0UGxheWVy 96072
LmFyZ3NvcnQ= 96073
IHdpdGhTdHJpbmc= 96074
IE1vZGVyYXRl 96075
fSI+Cg== 96076
LnNldEltYWdlQml0bWFw 96077
IHRyZW5jaGVz 96078
IGdlbmVyYXI= 96079
IGZlcm1lbnRlZA== 96080
IGRlanRpbmc= 96081
Q3RybHM= 96082
IGRpc2FncmVlcw== 96083
UXVpZXQ= 96084
KFNRTEV4Y2VwdGlvbg== 96085
IFRlbnNvckZsb3c= 96086
T05B 96087
UG9ydGxhbmQ= 96088
LlB0cg== 96089
bGx4 96090
YXN0b24= 96091
Q2x1c3RlcnM= 96092
IFVzdWFyaW9z 96093
IGtoaQ== 96094
IGdpYQ== 96095
IERvbHBoaW4= 96096
xZFz 96097
IGx1ZGVy 96098
IGRpc3Bvc2l0aXZv 96099
IFZ5 96100
b21wc29u 96101
IO2VoA== 96102
IGtjYWw= 96103
IENhbGNpdW0= 96104
U2VjdGlvbnNJbg== 96105
IENhc2M= 96106
IGdyYXR1aXRp 96107
b3NvbWFs 96108
IHVuZGVyY3V0 96109
IENhaA== 96110
OnBhcmFtcw== 96111
IHJldHVyblVybA== 96112
IEVyZQ== 96113
w6lyYw== 96114
IGludGw= 96115
fS8jew== 96116
IG91dHB1dFBhdGg= 96117
IGZhbHNlaG9vZA== 96118
IFVzZXJSb2xl 96119
PEhhc2hNYXA= 96120
IENyZWF0ZVVzZXI= 96121
IENvd2JveQ== 96122
CVVzZQ== 96123
XSgK 96124
IFNob3BpZnk= 96125
Vmlld1N0YXRl 96126
QWR2YW5jZQ== 96127
LXRhbms= 96128
IlQ= 96129
IEplbnM= 96130
PW9wdGlvbnM= 96131
KCIuLg== 96132
Lm1pbWU= 96133
IENSVA== 96134
IGjDpHR0ZQ== 96135
KHNv 96136
LlVOS05PV04= 96137
IGRhcsO8YmVy 96138
IENPVkVS 96139
R2Vt 96140
Q3Jv 96141
X1JFQ1Y= 96142
X2hpZXJhcmNoeQ== 96143
Q2hvb3Npbmc= 96144
SkVYRUM= 96145
IGRvcnNhbA== 96146
KyI8 96147
IE5leQ== 96148
V29tYW4= 96149
QmV6aWVy 96150
IHJpZ3M= 96151
IG9udHZhbmc= 96152
77yM5YiZ 96153
IEdhdXQ= 96154
Y21i 96155
TmhhcA== 96156
IG1vbm9j 96157
IGVuZXJnaWE= 96158
b2JzZXJ2ZU9u 96159
c3Rha2Vz 96160
LSot 96161
IE5hY2s= 96162
fX0iCg== 96163
ZXJ2YXM= 96164
IEhpbmRlcmVkUm90b3I= 96165
QWRqYWNlbnQ= 96166
IEludGVybmFjaW9uYWw= 96167
CWFyZWE= 96168
IPCflA== 96169
IHNwYXJrbGU= 96170
KCkuXw== 96171
LmlkZWE= 96172
IHV0cmVjaHQ= 96173
IG1hcHBlZEJ5 96174
IENvbG8= 96175
CVRS 96176
UG9zdGVy 96177
IGNvbWJhdGluZw== 96178
IFllbGxvd3N0b25l 96179
aWVycmV6 96180
YWNjdA== 96181
IHPDoWNo 96182
Lk5ld3M= 96183
IGZpZWxkVmFsdWU= 96184
IGNheg== 96185
IEZyZWVt 96186
CQkKCQo= 96187
IHVzdXI= 96188
IHNvbGE= 96189
IGN1bWJlcnNvbWU= 96190
IGNhdGFwdWx0 96191
Ii4v 96192
IEV4ZWN1dG9ycw== 96193
IEFtZXM= 96194
ICc8JT0= 96195
ZmlsbG5h 96196
LOKAlA== 96197
OlNldFRleHQ= 96198
LWNhdGVnb3JpZXM= 96199
LWFyY2hpdmU= 96200
IFBvbGx1dGlvbg== 96201
Lk9m 96202
4oCcQXQ= 96203
X0NIQVJTRVQ= 96204
KENvbHVtbg== 96205
4oCZKQ== 96206
IHVubWlzdGFr 96207
IGVhcm0= 96208
IFBsYXRmb3Jtcw== 96209
IE1vbWVudHVt 96210
VmVjdG9yaXplcg== 96211
cmF3ZXI= 96212
KHBhc3Nwb3J0 96213
KHBsYW5l 96214
IHJlcHJlc2VudGE= 96215
IHB1YmtleQ== 96216
IEphaW4= 96217
IG1lbm5lcw== 96218
IGluc3RhbnRhbmVvdXM= 96219
IGV0aGVycw== 96220
IG5lc3Rz 96221
IFBhdHRvbg== 96222
IEhBQ0s= 96223
cGFja2luZw== 96224
SVNlcnZpY2U= 96225
IHJvY2tlcg== 96226
IGZpY2E= 96227
IEdsYWRpYXRvcg== 96228
IFVQQw== 96229
IExvd2VsbA== 96230
YmVhcmVy 96231
IHZpcGVy 96232
X2dsb2I= 96233
IG1hc2hlZA== 96234
IGhhaXJzdHlsZQ== 96235
IHVuZGVybWluZXM= 96236
cmVzdGF1cmFudHM= 96237
IHJlYWN0aW9uYXJ5 96238
IGJpbGxpZw== 96239
fSIpOw0K 96240
IHZpc3Rhcw== 96241
IG9wZW5kaXI= 96242
CWxhYmVscw== 96243
YWxsaXM= 96244
IFdvbGZm 96245
IENQQw== 96246
IHJhaWx3YXlz 96247
IFZhdWdoYW4= 96248
IEFza2luZw== 96249
Y2Fp 96250
IEdu 96251
X1BST0Y= 96252
LVNlcA== 96253
LmN1cnZl 96254
TXVsdGlwbHk= 96255
0YDQsNC90LjRhg== 96256
IG1lZXR1cA== 96257
Z2V0RGI= 96258
KEdVSQ== 96259
IHJlaW1idXJzZQ== 96260
OnJlc3VsdA== 96261
VHVtYmxy 96262
LkNsb3NlZA== 96263
IGNvbmZvcm1z 96264
IEhvaw== 96265
aWVkYWRl 96266
TmV3TGFiZWw= 96267
IG5hdkN0cmw= 96268
RG9jdG9ycw== 96269
IOyViA== 96270
IGJvdXRz 96271
IGlzYw== 96272
Lyc7Cgo= 96273
dWhs 96274
LlVp 96275
LXNhbWE= 96276
IENhbm9uaWNhbA== 96277
IG1ldGljdWxvdXM= 96278
IGdyb3Rlcw== 96279
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 96280
ZXRlcw== 96281
IGxhbmd1ZQ== 96282
IGZDaGFpbg== 96283
IFR5cGVmYWNl 96284
IEJyaWdoYW0= 96285
aWFyZQ== 96286
J8OpdGFpdA== 96287
IEVGRg== 96288
IGRlc3Ryb3llcg== 96289
X21hdHJpY2Vz 96290
TsO6bWVybw== 96291
Y2FsbGFibGU= 96292
X3BlcmlvZHM= 96293
c3RydWs= 96294
bWFq 96295
LnJs 96296
LmxpZnQ= 96297
2YrZhA== 96298
w5A= 96299
UmV0VmFs 96300
RGVudmVy 96301
IFRyaWJ1dGU= 96302
a2l5ZQ== 96303
emV3 96304
IFNwYXJl 96305
IGxldWtlbWlh 96306
IHdhaXRyZXNz 96307
IHBsdXTDtHQ= 96308
QWxpYXNlcw== 96309
IExvY2F0ZQ== 96310
5rY= 96311
SWRlbnRpZmljYXRpb24= 96312
LnRlbA== 96313
LWRheXM= 96314
dGVycml0 96315
aW1idXM= 96316
IEJ1dHRlcktuaWZl 96317
64K0 96318
cnVwdGN5 96319
IEdyYWRlcw== 96320
IHVuZGVyc2lkZQ== 96321
IGhhcmRzaGlwcw== 96322
dW5laQ== 96323
LWNvbnRhaW5lZA== 96324
IFsnLg== 96325
T2Jzb2xldGU= 96326
LlJldHJvZml0 96327
IHVyYW51cw== 96328
X3JnYmE= 96329
IHJhcGVz 96330
IEthcmU= 96331
W+KApl0= 96332
IEZpbmNo 96333
LmJ1bmlmdUZsYXRCdXR0b24= 96334
cXVpc2Fy 96335
IE51cnNlcw== 96336
ZWdhZGU= 96337
IGhu 96338
RXhjbHVkZQ== 96339
IHN0b2NoYXN0aWM= 96340
IHNvdHRv 96341
IFBlbmFsdHk= 96342
IHNvbnN0 96343
IHJvc2E= 96344
X0ZpbmQ= 96345
IEludmFsaWRhdGU= 96346
TGlzdEl0ZW1JY29u 96347
JywNDQo= 96348
X3BkdQ== 96349
IE1lYWxz 96350
YWrEhWM= 96351
IE9vcHM= 96352
IE5vdGljZXM= 96353
IGRlcml2YXRpb24= 96354
W10NCg== 96355
6Lqr 96356
eXN0ZXJ5 96357
X2ZpdmU= 96358
RWFybg== 96359
PWV2ZW50 96360
IG9ncg== 96361
LVJFQUw= 96362
IExpcHM= 96363
c2VsZWN0b3Jz 96364
YWRpZXI= 96365
IHNldEJhY2tncm91bmRJbWFnZQ== 96366
KHRoaW5n 96367
IHNvZnRiYWxs 96368
XHhhYQ== 96369
KGlkZW50 96370
IEp1cnk= 96371
IFZveWFnZQ== 96372
IFRBcnJheQ== 96373
KFBhaW50 96374
V2FybQ== 96375
RVhURVJOQUw= 96376
YXN1 96377
ICghKCg= 96378
LkZFVENI 96379
IHNraXJt 96380
T1JFRA== 96381
Y2FuY2VsbGVk 96382
aXR0ZWw= 96383
IHNlZWR1 96384
bGljaGVz 96385
b2hv 96386
LHJldGFpbg== 96387
KFdlYkRyaXZlcg== 96388
aXB0YWJsZXM= 96389
RVJJQ0E= 96390
IGNsZWFubGluZXNz 96391
ZWxsb3dvcmxk 96392
IGNvaGVzaW9u 96393
Z2lzdA== 96394
XS4n 96395
ZXJnaW5n 96396
IGlzcA== 96397
Lm9mZnNldFRvcA== 96398
KGZhY3Rvcg== 96399
dW5pdmVyc2Fs 96400
IFBsYXliYWNr 96401
IEJ5dGVTdHJpbmc= 96402
IGRhbW5pbmc= 96403
IFNTUg== 96404
YWN1cw== 96405
IFN0YXRlbg== 96406
IOWVhuWTgQ== 96407
IFBlZQ== 96408
IFNhbXBsaW5n 96409
YXRvcmlh 96410
c3RhcnRJbmRleA== 96411
5ZCr 96412
IOy0iOq4sA== 96413
IE9saXZlaXJh 96414
IEZsYWtl 96415
Ym9vbQ== 96416
X01TSw== 96417
IEZhY2luZw== 96418
b3JnaGluaQ== 96419
Zm9vZHM= 96420
VHJlZVdpZGdldEl0ZW0= 96421
IEhBTEY= 96422
IiIiKQo= 96423
IENIQVBURVI= 96424
IEV2ZWx5bg== 96425
Pis= 96426
IEhvcm5ldHM= 96427
d29rZQ== 96428
IC9b 96429
YXRob2xpYw== 96430
LnNlZ21lbnRz 96431
Lm5hdmlnYXRlQnlVcmw= 96432
IE1hbnVz 96433
IHBlcHRpZGVz 96434
IGZsZWV0aW5n 96435
IEFUVg== 96436
IFNoaWI= 96437
SW50QXJyYXk= 96438
IG1veg== 96439
cHJvYmxlbXM= 96440
b2duZQ== 96441
Lk90aGVy 96442
QWRtaW5pc3RyYXRpb24= 96443
JSUqLw== 96444
Il09PQ== 96445
IEFuZHJlcw== 96446
QWRh 96447
aGludHM= 96448
XCIiOwo= 96449
KHBuZw== 96450
IOqwgOuKpQ== 96451
44OK 96452
cmVqZWN0ZWQ= 96453
IG1vdmVycw== 96454
546H 96455
IHBhcmVudGhlc2lz 96456
KGFzc2lnbnM= 96457
RWxpdGU= 96458
UmVtaW5kZXI= 96459
IHN1ZmZlcmVycw== 96460
IFJlc291cmNlQnVuZGxl 96461
dGhhZw== 96462
PicNCg== 96463
YW50aW5v 96464
UGVyaXBo 96465
IFNoYXJk 96466
Q2hhcnREYXRh 96467
KGpq 96468
IG9zdGF0 96469
aHVnZQ== 96470
LWF1dGhvcmVk 96471
LmNp 96472
IHB5bXlzcWw= 96473
IGxpbmVycw== 96474
IEFUUw== 96475
Pkxhc3Q= 96476
KSIpCgo= 96477
IGdldHBpZA== 96478
R2V0U2l6ZQ== 96479
IGV4dG9ydGlvbg== 96480
W2Zsb2F0 96481
IEVJTkE= 96482
L0Jhc2U= 96483
LnNldE9uQWN0aW9u 96484
0L7Qu9GP 96485
IEdsYWNpZXI= 96486
X2F6 96487
IHRyYW5zcG9ydGU= 96488
IFNtcw== 96489
dGh1bWJz 96490
IHRyZWFzdXJlcg== 96491
IG16 96492
aXN0aWs= 96493
UkVESUVOVA== 96494
IGlzaQ== 96495
X3N0dWZm 96496
UE9TSVRPUlk= 96497
c3RhcnRkYXRl 96498
IFppbmM= 96499
5rG9 96500
IGthaw== 96501
IGVyZmFocmVu 96502
X0NPTUJP 96503
IHVjd29yZHM= 96504
LlBheQ== 96505
IGtpbmdkb21z 96506
IGV4Y2VsZW50ZQ== 96507
aWduaXRl 96508
X3ZhcmlhdGlvbg== 96509
IG5hdmVnYWRvcg== 96510
5LiT 96511
dmlld0NvbnRyb2xsZXI= 96512
cmlyZQ== 96513
SG9uZXN0bHk= 96514
Q2FzY2FkZQ== 96515
ZXRyYWlu 96516
QXJnZW50aW5h 96517
Y3E= 96518
IE1hcmlhbg== 96519
L2Fy 96520
IGludGVyZXNzZQ== 96521
dXJhaGFu 96522
KFBD 96523
IGZyaXZvbA== 96524
IFRydXN0ZWQ= 96525
KElDb25maWd1cmF0aW9u 96526
IFJpaGFubmE= 96527
ZW5kb3ph 96528
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 96529
IHByb2NsYW1hdGlvbg== 96530
IHByZWRvbWluYW50 96531
IGNvbnN0cw== 96532
LW5lY2s= 96533
V29sZg== 96534
LmNoZWNrYm94 96535
IHN0YW56YQ== 96536
IGVudGVuZGVy 96537
Ly8o 96538
SGFuZHM= 96539
IGJpbGxlZGVy 96540
IFRvc2hpYmE= 96541
YWJiaXg= 96542
RU5DSUVT 96543
IGppbQ== 96544
UFVS 96545
Lmxlc3Nvbg== 96546
IGJlcnRo 96547
bGFyxLFu 96548
Qmxv 96549
CWV4dA== 96550
ZWVs 96551
IGRlbWFzaQ== 96552
IGNvbG9uaXphdGlvbg== 96553
L2Rpc2M= 96554
77yP 96555
Q2VydGFpbmx5 96556
566h55CG5ZGY 96557
IGpvZ2Fkb3I= 96558
dcOp 96559
Q29sdW1uc01vZGU= 96560
IEpW 96561
IEluc3RpdHV0 96562
X3NwZWN0cnVt 96563
LmRlbnNl 96564
IFNob3J0Y3V0 96565
IHNlYnVhaA== 96566
IGZsYXNoeQ== 96567
UmVnYXJkcw== 96568
IHNoYXJwZXI= 96569
Y2FuY2VsbGF0aW9uVG9rZW4= 96570
X2RldGFsbGU= 96571
IFNjYXJsZXR0 96572
INC80LDRgg== 96573
IG5lZ29jaW8= 96574
4LiW 96575
IEpX 96576
d2ViZHJpdmVy 96577
LndhbGw= 96578
IHhhbWFyaW4= 96579
b3BhcXVl 96580
LkFkZFBhcmFtZXRlcg== 96581
KENvbnRyb2xsZXI= 96582
LWFib3J0aW9u 96583
X0ZVTkNUSU9OUw== 96584
Q3VzdG9tZXJJZA== 96585
IHZlbmly 96586
IEJ1c3Rlcg== 96587
X3ByZWRpY3RlZA== 96588
L3J1bGVz 96589
LU1ldGhvZHM= 96590
IGdkemll 96591
Il0nKTsK 96592
IFB4 96593
Q09OUw== 96594
LlNsaWNl 96595
IHJldmFtcGVk 96596
IFRhYmxlVmlldw== 96597
IGRpY2tz 96598
IO2YuOy2nA== 96599
IEF1eGlsaWFyeQ== 96600
T3BlcmE= 96601
L3Jj 96602
IHVudGhpbmthYmxl 96603
IGRlZHVjdGVk 96604
bHo= 96605
IExhZ2U= 96606
IFJvd2xpbmc= 96607
cHJvdmVk 96608
T2ZmZXJz 96609
LHNldA== 96610
UkdCTw== 96611
IEZV 96612
IENlbnRPUw== 96613
b3pv 96614
IFRyb2phbg== 96615
IG1hw7FhbmE= 96616
IC8vPQ== 96617
Kio6 96618
IHtcCg== 96619
IEJvd2Vu 96620
S25vd2luZw== 96621
IOW6 96622
PS09LT0tPS09LT0tPS09LQ== 96623
IGViZW5mYWxscw== 96624
XT17Cg== 96625
Qk1J 96626
KCk7KQ== 96627
KHBlcm1pc3Npb24= 96628
QW5kZXJzb24= 96629
IGRlZ3JhZGU= 96630
U29hcA== 96631
dcWf 96632
IFB1cHB5 96633
IEV0aGlvcGlhbg== 96634
IFRFU1RJTkc= 96635
ZW5zZXg= 96636
IGRyZXNzZXI= 96637
IENob3Jl 96638
VW5oYW5kbGVk 96639
QXNzb2NpYXRl 96640
LmFkZGl0aW9uYWw= 96641
IGRpZmbDqXJlbnRlcw== 96642
aXNxdWU= 96643
IG5lY2Vzc8Ohcmlv 96644
IGdlbmVyaWNz 96645
KHBm 96646
IFxg 96647
IE5lYXJieQ== 96648
YXBvcmF0aW9u 96649
IFRoZW1lRGF0YQ== 96650
V2lGaQ== 96651
LlJlYWw= 96652
YWN5ag== 96653
TGl2 96654
IHBzeWNob2xvZ2ljYWxseQ== 96655
bWV0aG9kUG9pbnRlclR5cGU= 96656
IE5pa29s 96657
IERlZGljYXRlZA== 96658
X1BPUlRT 96659
IEphZQ== 96660
TlNBdHRyaWJ1dGVkU3RyaW5n 96661
IGFtYmFzc2Fkb3Jz 96662
IEhhbmRsZXJz 96663
IEFuYXQ= 96664
IHZvY2FsaXN0 96665
IHJhcg== 96666
IGRldnVlbHZl 96667
Lmdz 96668
IHhjYg== 96669
IHN1Ym1vZHVsZQ== 96670
IEFTU0lHTg== 96671
dXJlZW4= 96672
IGNsYXNlcw== 96673
ZW1vdGg= 96674
X0NOVEw= 96675
X2p3dA== 96676
IOuniA== 96677
IG91dHBvc3Q= 96678
IEluYm94 96679
CWZsZXg= 96680
IEdyb2Nlcnk= 96681
SUxJTkU= 96682
Lm1vYg== 96683
IENvbnN0cg== 96684
XT1d 96685
KHdhbGxldA== 96686
IHNlZGU= 96687
ZmFs 96688
IGltcGFzcw== 96689
PXtbJw== 96690
IHVuZm9yZQ== 96691
ZnVzZQ== 96692
X0xlYW4= 96693
IGF2YWxhbmNoZQ== 96694
PXJhbmQ= 96695
IGFkdWx0ZXJ5 96696
IEdlZQ== 96697
CUlucHV0U3RyZWFt 96698
IGNhYmVs 96699
X01PVU5U 96700
IG5vdGljaWFz 96701
IFJhdW0= 96702
IGJ5dGVhcnJheQ== 96703
IG9uSGlkZQ== 96704
ICkuCg== 96705
JGluc3RhbmNl 96706
IGRpZFNlbGVjdFJvd0F0SW5kZXhQYXRo 96707
YWNhbQ== 96708
LWNvbGxlY3Rpb24= 96709
IHVwaGU= 96710
UG90ZW50aWFs 96711
IFNEUw== 96712
X2FwcHJvdmFs 96713
RGFtbg== 96714
OmNvbnZlcnQ= 96715
IE1vZGlmaWNhdGlvbnM= 96716
IOyYiA== 96717
IHVuYWI= 96718
IHNjcm9sbGVk 96719
KyIpOwo= 96720
IGdhdWNoZQ== 96721
IEhPTA== 96722
YW50YW5hbW8= 96723
IGNvbHVtbkhlYWRlcg== 96724
CVpFUEhJUg== 96725
emFj 96726
IG91dGluZ3M= 96727
IGFwcGxhdWRlZA== 96728
aG9yaWE= 96729
bW9keA== 96730
IG1pbGxlbm5pYQ== 96731
Jm0= 96732
Lkpzb25JZ25vcmU= 96733
IHBpb25lZXJlZA== 96734
IENhdnM= 96735
CWpz 96736
ZGVwYXJ0dXJlZGF5 96737
X2ti 96738
LlBhdGllbnQ= 96739
IHBldGFscw== 96740
cG9ydHJhaXQ= 96741
In19Cg== 96742
SG9tZUFzVXBFbmFibGVk 96743
LnByZXR0eQ== 96744
LGNsanM= 96745
IG1lZGlvcw== 96746
aGFzaGVk 96747
ZW1vZGVs 96748
IE1vam8= 96749
LmZyb21SR0JP 96750
LXBl 96751
IGludGltYXRlbHk= 96752
IGVsZ2c= 96753
W107DQo= 96754
L09ic2VydmFibGU= 96755
IG9iZWRpZW50 96756
IEphbWFs 96757
UmVxdWlyZWRNaXhpbg== 96758
IExpc3RWaWV3SXRlbQ== 96759
CXBsYWNlaG9sZGVy 96760
X3RyYW5zYWtzaQ== 96761
PFNlcnZpY2U= 96762
IGVuc3VlZA== 96763
IFJpY2Fu 96764
U2FnYQ== 96765
QVVESU8= 96766
IGpt 96767
LXNhbGVz 96768
LW11bHRp 96769
JSI7Cg== 96770
IGNsYXNzaWZpY2F0aW9ucw== 96771
IHTDo28= 96772
Q29hbA== 96773
OycpOwo= 96774
IGRlbGlnaHRz 96775
X2h6 96776
X2JvbGQ= 96777
REVQRU5E 96778
INCh0L7Qt9C0 96779
YXRlZQ== 96780
X3N1Ym5ldA== 96781
IFRvd25zZW5k 96782
IENhc3RpbGxv 96783
IHBydA== 96784
JC8p 96785
IGZpbGli 96786
KCcvJylbLQ== 96787
IHVwaG9sc3Rlcnk= 96788
IGNvbXBvbmVudGU= 96789
IFhG 96790
LlJldmVyc2U= 96791
X3R1bm5lbA== 96792
SW1tZWRpYXRlbHk= 96793
LW1vdmU= 96794
IGFsaXN0 96795
V1ND 96796
c3RydWN0dXJhbA== 96797
aXN0b3JpY2Fs 96798
VGFuZ2dhbA== 96799
IENPVVJU 96800
IG9ic2N1cmVk 96801
IGxhbmRzbGlkZQ== 96802
IGJlZHNpZGU= 96803
IGJhcmFuZw== 96804
LWVsZWN0ZWQ= 96805
IGNlcmFtaWNz 96806
LS0qLwo= 96807
IFdhbm5h 96808
RHlu 96809
IHZlcnNjaGllZGVuZQ== 96810
IGluZHVjaW5n 96811
IGZsdXRl 96812
LkFwcGVuZFRleHQ= 96813
IFp1Yg== 96814
IFB1bGl0emVy 96815
OmJvdGg= 96816
Lm1heExlbmd0aA== 96817
LlByb3BlcnR5VHlwZQ== 96818
YXd5 96819
aXRlbU5hbWU= 96820
IE5hcnJhdGl2ZQ== 96821
cmV2b2x1dGlvbg== 96822
IGhhbHRlbg== 96823
IEVycm9yUmVzcG9uc2U= 96824
Z2F0aGVy 96825
L3V0aWxpdHk= 96826
Oicn 96827
IEtlZQ== 96828
IE9seW1waWE= 96829
Q2xpbmljYWw= 96830
OmdyZWVu 96831
IFBsZXg= 96832
IEtlbnNpbmd0b24= 96833
IFBob25ldGlj 96834
IGRpc3RyaWJ1dGVz 96835
X2V4ZW1wdA== 96836
V2F0Y2hpbmc= 96837
Lk1pc2M= 96838
IGRvbWFpbmU= 96839
OiIu 96840
44OV44I= 96841
X01PRFVMRVM= 96842
IGhhYmxhcg== 96843
IExhb3M= 96844
LnNldFRleHRTaXpl 96845
LnBhdXNlZA== 96846
X1RX 96847
IG92ZXJ3aGVsbQ== 96848
IGhlbWF0 96849
THVja2lseQ== 96850
IFNFTlQ= 96851
IEludmVzdGlnYXRvcnM= 96852
Pih7 96853
KGZvdXQ= 96854
IEFVWA== 96855
LnJhd1F1ZXJ5 96856
LXN0cm9uZw== 96857
IHJlc2VtYmxlZA== 96858
IFNoYWZ0 96859
IFhJSUk= 96860
c3VnZ2VzdA== 96861
IHNpbmdhcG9yZQ== 96862
X2FiaWxpdHk= 96863
JGs= 96864
CWlOZEV4 96865
XEltYWdl 96866
Q2FkYXN0cm8= 96867
LnBpdm90 96868
IG1hbnBvd2Vy 96869
X2F0dHM= 96870
LnNldEZpbGw= 96871
ZXdvcmxk 96872
Y29uc3Rz 96873
R2V0V2lkdGg= 96874
IGdyYXR1aXRh 96875
IFBldHI= 96876
LWFuc3dlcg== 96877
IEhlbWlzcGhlcmU= 96878
IENhag== 96879
IFRyYWRlcw== 96880
xIdp 96881
IEZyZWRkeQ== 96882
T25DaGFuZ2U= 96883
IHBvcm5vZ3JhZmlh 96884
IFNVTU1BUlk= 96885
X21lYXM= 96886
IERSSVZF 96887
IENyZWU= 96888
X21hbGU= 96889
IHN1aw== 96890
IG1hbmV1dmVycw== 96891
c2V0VmlzaWJpbGl0eQ== 96892
YWxsaQ== 96893
IGRpc2NyZXRpb25hcnk= 96894
cmVnYXRpb24= 96895
WVNUSUNL 96896
OmhyZWY= 96897
IHRhcmFm 96898
IGNodQ== 96899
IEBb 96900
RW5vdWdo 96901
LlRyYW5zZmVy 96902
SWZOZWVkZWQ= 96903
OildKQ== 96904
CSAgICAgICAgICAgICAg 96905
W2F4aXM= 96906
VHJhbnNsYXRpb25z 96907
LnNlcnZlcnM= 96908
IEtFRVA= 96909
JywpCg== 96910
c3BvbnNvcg== 96911
YXJjaGl2ZXM= 96912
LlVsdHJhV2lu 96913
IEhvbm91cg== 96914
J10pKTs= 96915
IGluZWxpZ2libGU= 96916
IEFudHdvcnRlbg== 96917
IEFwcGxpY2F0aW9uRXhjZXB0aW9u 96918
IGNhdGVnb3JpZQ== 96919
IFdFSUdIVA== 96920
IEJ1bmR5 96921
IFBJWEVM 96922
IGR1a2U= 96923
VG93ZXI= 96924
U2NvdGxhbmQ= 96925
IHJlZmVyZWVz 96926
IEFzc2VtYmx5VHJhZGVtYXJr 96927
CXN0YXJ0QWN0aXZpdHk= 96928
Lk9uZVRvT25l 96929
IEF1c3dhaGw= 96930
IHN0cmVuZ3RoZW5z 96931
LlF1aXQ= 96932
IFVSTFJlcXVlc3Q= 96933
ZWVj 96934
IHJlZ2lzdHJhemlvbmU= 96935
IGhvc2Vz 96936
QWN0dWFsaXphcg== 96937
L2FycmF5 96938
IGNvbnN0cnVjdGlvbnM= 96939
Y2Nk 96940
IEZpbGVOb3RGb3VuZEVycm9y 96941
VGjDqm0= 96942
KHJlc3VsdGFkbw== 96943
IFNFUklFUw== 96944
U3BlYWs= 96945
X0FIQg== 96946
QmxvY2tlZA== 96947
LWZvbnRhd2Vzb21l 96948
Ol0p 96949
b2JibGU= 96950
KGxpbmtz 96951
IENhdGFsb25pYQ== 96952
R2VW 96953
LkRhdGVGb3JtYXQ= 96954
IGZsZWE= 96955
LmVm 96956
IHNvbGljaXR1ZA== 96957
IERZ 96958
Y29kZWdlbg== 96959
eXRoZQ== 96960
IGVwb2xs 96961
X1RE 96962
IGFmZmlybWF0aW9u 96963
X2Zh 96964
SVNUQQ== 96965
IEVhdG9u 96966
Y3JlYXRlUXVlcnk= 96967
IGxvZ2lzdGljYWw= 96968
IFJheWNhc3RIaXQ= 96969
IGNhdWxpZmxvd2Vy 96970
IHVsY2Vy 96971
LkFscGhh 96972
aW5rZQ== 96973
Wy4u 96974
RVhBTVBMRQ== 96975
LXdhZ2U= 96976
IHN0YXRp 96977
ZWN0aXZl 96978
LmdldE1pbg== 96979
IFNVQkpFQ1Q= 96980
IEF1ZGlvTWFuYWdlcg== 96981
enphcmVsbGE= 96982
IFNlbGVjdExpc3RJdGVt 96983
ICQNCg== 96984
IG9oaW8= 96985
IFRhaG9l 96986
IGtXaA== 96987
cXVlcnlTdHJpbmc= 96988
IGRlcGFydGFtZW50bw== 96989
PWFkbWlu 96990
IHdvcmtzdGF0aW9u 96991
KSsrOwo= 96992
SGVhZGVySW5TZWN0aW9u 96993
IFRyaXVtcGg= 96994
Q2hhcmxvdHRl 96995
IFNNQQ== 96996
Q8OzbW8= 96997
IHZlcm0= 96998
IHRoZWFubw== 96999
Ymdjb2xvcg== 97000
XCIiLAo= 97001
IFJlbWluZGVy 97002
QmlsbHk= 97003
b3JhbFR5cGU= 97004
Z2ViZXI= 97005
KGNsb25l 97006
IEt1dA== 97007
Lz4u 97008
QXBvbGxv 97009
IHNobA== 97010
Wkg= 97011
VGh1bmRlcg== 97012
IGdpZnM= 97013
X2tlbGFz 97014
IFJvdGhz 97015
IH0o 97016
IEJyb2FkY29t 97017
IERlcHRocw== 97018
CUlOTkVS 97019
cGFyY2Vs 97020
IGVqZXJjaWNpbw== 97021
IGluZGVwZW5kZW50cw== 97022
aWxsb3c= 97023
ZXhlY3V0YWJsZQ== 97024
RXZlbnRv 97025
IHpvc3Q= 97026
IEhNQUM= 97027
W0RsbEltcG9ydA== 97028
YWxsZXM= 97029
X2Rlcml2YXRpdmU= 97030
QXBpS2V5 97031
IHN0ZXBwZXI= 97032
PXBsdA== 97033
Z2V0SW5kZXg= 97034
IHZhbGV1cnM= 97035
UG9saXRpY3M= 97036
IElEWA== 97037
IFVzYQ== 97038
IExUQw== 97039
Lm1pbkxlbmd0aA== 97040
c3Rybw== 97041
X05D 97042
IHN0YWduYW50 97043
IG1vbnRhZ2U= 97044
IGJsb3VzZQ== 97045
ZWxpZ2U= 97046
IHR1cnF1b2lzZQ== 97047
IFN1cGVybg== 97048
5q2z 97049
dmFyYQ== 97050
TmV3SXRlbQ== 97051
X0VYVEVOREVE 97052
IHdvb2R3b3JraW5n 97053
IEVwaXNjb3BhbA== 97054
LnBhaXI= 97055
LlVzZXJJbmZv 97056
IGRpcmVudA== 97057
L3RjcA== 97058
IGZyYXVnaHQ= 97059
U2xhdmU= 97060
LmdldExhdGl0dWRl 97061
IFRvb2xib3g= 97062
IGVhcm5lcnM= 97063
IEhPVVI= 97064
0LDQu9Cw 97065
cG9zYWJsZXM= 97066
Y29uZGl0aW9uYWxseQ== 97067
X3h4 97068
IGxhbsOn 97069
KHJw 97070
Q2hh 97071
IGluY2Fybg== 97072
LkRhbw== 97073
Li8o 97074
2KfZgQ== 97075
VGQ= 97076
Q0VG 97077
L3JhbmQ= 97078
LlZpcnR1YWw= 97079
IGRiSGVscGVy 97080
YW1pbmVz 97081
IGx6 97082
IHN0b3M= 97083
IEF0a2lucw== 97084
X0RE 97085
aXRvcmlv 97086
IG1pbmltaXNl 97087
aGlwc3Rlcg== 97088
KHsuLi4= 97089
X1NSVg== 97090
W2ZyYW1l 97091
IFJva3U= 97092
R1JQ 97093
IGJhcmJlcg== 97094
LkZlY2hh 97095
IOuwnA== 97096
IGdyYW51bGFyaXR5 97097
IFNheWluZw== 97098
X2xpa2VsaWhvb2Q= 97099
LmJhckRvY2tDb250cm9s 97100
IGZyb250bGluZQ== 97101
IFdoYWxl 97102
IHNtZWxsaW5n 97103
IENvbnRyaWJ1dGlvbnM= 97104
aXZhbnQ= 97105
IGNyaXBwbGluZw== 97106
cHJlbG9hZA== 97107
IEhlcnJlcmE= 97108
X1dBVENI 97109
LWV0 97110
OmV4cHI= 97111
aW52ZXN0bWVudA== 97112
ZWRlcmF0aW9u 97113
X21nbXQ= 97114
IGhvb3Bz 97115
bW9ua2V5 97116
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK 97117
aW50ZXJzZWN0 97118
IGNyaW1zb24= 97119
IHN1b2k= 97120
IFtdOgo= 97121
WE9iamVjdA== 97122
U0ZNTA== 97123
RVFVQUw= 97124
KCd+ 97125
Y2VudHJvaWQ= 97126
CXJlc3RvcmU= 97127
IHByZW5hdGFs 97128
IE1pc3RyZXNz 97129
IHF4 97130
dHBz 97131
IHJlc3Bhd24= 97132
IFtdKSwK 97133
IGtvbnRyb2w= 97134
44GC44KK44GM44Go44GG44GU44GW 97135
TW9kdWxlTmFtZQ== 97136
IG5ld1BhdGg= 97137
IFBhZ2luZw== 97138
IHJpbnM= 97139
X21ha2Vy 97140
XGJyaWVm 97141
IGJpc2hlcg== 97142
CVJlYWQ= 97143
IGppaGFkaXN0 97144
LnBlcnNpc3RlbnQ= 97145
IFJvYm90cw== 97146
L2dycGM= 97147
IEpvdQ== 97148
w6RyZW4= 97149
77yM5Zyo 97150
LXB0 97151
IHpkYXJtYQ== 97152
X05N 97153
IENvbm5lY3Rpdml0eQ== 97154
KGJj 97155
IEZsb3JpYW4= 97156
IFNvY2lvbG9neQ== 97157
X3dv 97158
QW5kU2VydmU= 97159
XygpOwo= 97160
IEZMVA== 97161
X0RFUg== 97162
IENvbm5pZQ== 97163
IEJyb2FkY2FzdFJlY2VpdmVy 97164
eyg= 97165
IGNvbW1lbnRlcg== 97166
IGRlbW9jcmF0 97167
IGFtcGxpZnk= 97168
LS0tLS0tLS0tLQ0K 97169
IEhNUw== 97170
IHRyYWlsZWQ= 97171
IFNvZGE= 97172
LXRlc3RlZA== 97173
dWxpc3Q= 97174
KW5ldw== 97175
X1RocmVhZA== 97176
VG9kZA== 97177
IGRlYmlhbg== 97178
Vms= 97179
IHByZXNlbnRh 97180
IGNvbWZvcnRz 97181
IFdhc2hlcg== 97182
IGdhcmc= 97183
IEh1Y2thYmVl 97184
INGB0LDQvA== 97185
ICEi 97186
QWRhcHRlck1hbmFnZXI= 97187
IEVh 97188
IEFzc29jaWF0aW9ucw== 97189
CQkJCQkKCQkJCQkK 97190
LmdldFdyaXRhYmxlRGF0YWJhc2U= 97191
IG51Y2xlaQ== 97192
w6lnb3JpZQ== 97193
CSAgICAgICAgICAgICAgICAg 97194
QkFC 97195
IHVwa2VlcA== 97196
IFR1cA== 97197
LndpdGhPcGFjaXR5 97198
bHlh 97199
IGx1eGU= 97200
dXBybw== 97201
LWVuZw== 97202
IHJlbGHDp8Ojbw== 97203
IGtleVByZXNzZWQ= 97204
IGh5YnJpZHM= 97205
bGZ3 97206
T3BlcmF0aW9uQ29udHJhY3Q= 97207
IG5hbWVMYWJlbA== 97208
IEhvcnQ= 97209
X2dydXBv 97210
IGJhbmRh 97211
SXg= 97212
SGVhbHRoeQ== 97213
LmdldEVuZA== 97214
ZnJhdQ== 97215
KFNjZW5l 97216
KENvbGxlY3Rpb25z 97217
IFNraXBwaW5n 97218
dWJv 97219
IGbDvG4= 97220
Ij4tLT4K 97221
IGRyb2l0cw== 97222
IGhvbW9zZXh1YWxz 97223
IGFiZHVjdGlvbg== 97224
CXdpZGdldA== 97225
JGhlYWRlcnM= 97226
IERBUg== 97227
IGZsYQ== 97228
dGhyZWF0 97229
IGxvdWlz 97230
LkdldFByb3BlcnR5 97231
Ikp1c3Q= 97232
KGZyYW1lcw== 97233
cnlv 97234
cHJvZmVzc2lvbg== 97235
fGk= 97236
7ZW07ISc 97237
KHN2 97238
IHVucmVjb2duaXplZA== 97239
SW9uaWM= 97240
RmFzaGlvbg== 97241
U2NyZWVuU3RhdGU= 97242
IEluY29taW5n 97243
Tm90Tmls 97244
IHN5bmNpbmc= 97245
ZW1pZQ== 97246
IHRoZXJtbw== 97247
X3Byb2Nz 97248
IGluY29uc2lzdGVuY3k= 97249
cmVsaWdpb3Vz 97250
Lm1q 97251
IHBlcnNvbm4= 97252
IG1vbWVudG9z 97253
b3JhcmlseQ== 97254
IOaK 97255
X25ldXJvbnM= 97256
SWxsdXN0cg== 97257
aW1vdG8= 97258
aWxpaw== 97259
IFdvag== 97260
VHJhZGluZw== 97261
IGFwcGFyZQ== 97262
IGVudHJlcHJpc2Vz 97263
YWNoYXQ= 97264
IMKs 97265
IG5laWdo 97266
QlVUVE9ORE9XTg== 97267
IE1haGVy 97268
YWdoYW4= 97269
LWhhc2g= 97270
ImY= 97271
IGNsaWVudGVsZQ== 97272
LmFkZEJ1dHRvbg== 97273
CVNQ 97274
UWk= 97275
IGdyYXRlZA== 97276
UE9TSVRF 97277
Oj4= 97278
IEhvd2VsbA== 97279
IENvbXBhcmF0aXZl 97280
IElTQw== 97281
wq1p 97282
T2NlYW4= 97283
RGF2aXM= 97284
IEZpbG1l 97285
V2lucw== 97286
IEpJVA== 97287
b2NjZXI= 97288
IENvcm0= 97289
RU5DSE1BUks= 97290
cmNoaXZl 97291
aWNhw6fDo28= 97292
IG1hdGE= 97293
IGNoaWxkYmlydGg= 97294
IE9wdGlvbmFsbHk= 97295
RW5z 97296
IHhodHRw 97297
IGVsdWNpZA== 97298
X09zY0luaXRTdHJ1Y3Q= 97299
KSkpOgo= 97300
IGludHVpdA== 97301
IERvbmF0ZQ== 97302
IGNvcnJlbGF0ZXM= 97303
PkRlbGV0ZQ== 97304
IGVxdWlwZQ== 97305
IGJvY2E= 97306
IGluZmxhdGFibGU= 97307
ZXJhaA== 97308
IERhdGVUaW1lS2luZA== 97309
IGNhbHZlcw== 97310
XExpYg== 97311
IGVtbHJ0 97312
IFRyaWxvZ3k= 97313
IFBhbmM= 97314
IER1aXM= 97315
IHBlbMOtY3VsYQ== 97316
V0FSRFM= 97317
X0RFVEVDVA== 97318
LXNlY3Rpb25hbA== 97319
ZGhjcA== 97320
Rm9yUm93 97321
LWRlc3RydWN0 97322
IFByZXNlbnRlcg== 97323
L3NsaWNr 97324
LG9u 97325
IENpdGFkZWw= 97326
bG9nZ2VkaW4= 97327
X3N1YnR5cGU= 97328
IHNpZ3Vl 97329
IGN1cmluZw== 97330
IEZpcmV3YWxs 97331
IGZsdW9yZXNjZW5jZQ== 97332
IEl0YWxpYW5z 97333
0LjRgtGB0Y8= 97334
LmdldFN0eWxl 97335
SW5TZWNvbmRz 97336
amll 97337
LVNtaXRo 97338
IHhsaW5r 97339
IHN1Ym1pc3NpdmU= 97340
0L7QvdGC 97341
YXJib25hdGU= 97342
IEZhdWw= 97343
X2dvYWxz 97344
IENvbW1pc3Npb25lcnM= 97345
Y2hhcnRJbnN0YW5jZQ== 97346
X1BPU1RGSUVMRFM= 97347
IG1lZGlhbA== 97348
IG1hbm9z 97349
IGRlbHQ= 97350
c3Zt 97351
LkFwaXM= 97352
ZXBoeQ== 97353
IGFzeW1wdA== 97354
IGFwcERlbGVnYXRl 97355
IGltcHJvYmFibGU= 97356
Y2th 97357
c2ltZA== 97358
L0Vycm9y 97359
LuKAkw== 97360
IFBUUw== 97361
ZGVlcg== 97362
IHNpbmE= 97363
bWFnbml0dWRl 97364
SURBREU= 97365
J119Jw== 97366
IG1heW9yZXM= 97367
CWNvbW1lbnQ= 97368
L2NvbnNvbGU= 97369
IkA= 97370
dm9sdA== 97371
LnNlbGw= 97372
IE1hY3k= 97373
IG1lbG9k 97374
IGltw6FnZW5lcw== 97375
X2NoZw== 97376
IGlub3V0 97377
aWRlbnRl 97378
KScpLAo= 97379
ZG5p 97380
LmJsb2I= 97381
IHR5cG9ncmFwaHk= 97382
IGVlcmll 97383
X09JRA== 97384
cGVzYW4= 97385
YWphbg== 97386
IGNob3BwaW5n 97387
IGJsdWZm 97388
YWRm 97389
X2Jhc2Vz 97390
LkZvcm1hdHRlcg== 97391
IFwl 97392
IFBhZ2VJbmZv 97393
Q2Fycmllcg== 97394
IENhbGlicmF0aW9u 97395
Y29tbw== 97396
LWJvZGllZA== 97397
IGZpbmFuY2llcg== 97398
IElOQQ== 97399
LkVSUg== 97400
IGhvb2RpZQ== 97401
IFNhbml0eQ== 97402
Z3VhcmRlZA== 97403
Lm9wZW5kYXlsaWdodA== 97404
SVNNQVRDSA== 97405
SGlnaGxpZ2h0cw== 97406
w7xuaw== 97407
YW5pZW0= 97408
YW5nZXJlZA== 97409
YXNzaWdubWVudHM= 97410
IHJlZ2lzdHJhZG8= 97411
IFVQUEVS 97412
YW1waWxrYW4= 97413
YXNoaXJl 97414
IE5pa29sYQ== 97415
IENGTA== 97416
IEhEQw== 97417
IHBvaWRz 97418
IElQcw== 97419
IHByZXZlbnRhdGl2ZQ== 97420
aXBzb2lk 97421
aWZpeA== 97422
LmNhbWVs 97423
Lmdh 97424
Vm9sdW1lcw== 97425
LXN0ZQ== 97426
WWFob28= 97427
X3NpYmxpbmc= 97428
SGlnaGVzdA== 97429
b3B0Z3JvdXA= 97430
IGt2aW5uYQ== 97431
4oCd44CCCgo= 97432
IEFwcGxpYW5jZXM= 97433
ICI+PA== 97434
JykiKQo= 97435
aHR0 97436
IElkZW50aWZpZWQ= 97437
IHBlbmNpbHM= 97438
IG1lbWJlcklk 97439
IGFwcGVuZFN0cmluZw== 97440
LmxvYWREYXRh 97441
IG1vY2tNdmM= 97442
IGp1Yg== 97443
IFNsdXQ= 97444
IFRhaXBlaQ== 97445
c3RhdHQ= 97446
UG9saXQ= 97447
IHBhcnRhZ2Vy 97448
RGlkQ2hhbmdl 97449
SW5jcmVhc2Vz 97450
KX0u 97451
IEJhYmE= 97452
X0NMSVA= 97453
W3VuaXQ= 97454
INC60LvRjtGH 97455
IGFsY3VuaQ== 97456
IExvbGE= 97457
IGNsaW5naW5n 97458
QFBvc3RNYXBwaW5n 97459
KGNvbmNhdA== 97460
IHNzaWQ= 97461
IEZhdWM= 97462
b2tpdA== 97463
IFJlY29yZGVk 97464
w6FsZXo= 97465
KCQoJzw= 97466
LmFzc2VydElzTm90 97467
IGthbGk= 97468
Vm9sdA== 97469
IHdhcm1seQ== 97470
IHNjYXJlcw== 97471
Z2V0dGk= 97472
ZsO8aHJ0 97473
X2RvZXM= 97474
LkVNQUlM 97475
aW1hdGlvbnM= 97476
IHNwcmluZ2ZveA== 97477
IERlY29t 97478
YXJjeQ== 97479
IGdsaXRjaGVz 97480
IE1vZmY= 97481
IFZvbGw= 97482
LmJldHdlZW4= 97483
IGNvb3JkZW4= 97484
IFBhcnRpY3VsYXJseQ== 97485
R0JQ 97486
IHNlbWJsZQ== 97487
RWFzdGVybg== 97488
X01TQg== 97489
XSl7DQo= 97490
bW9yZ2Fu 97491
IEVWQUw= 97492
ZGVyZQ== 97493
SE9VU0U= 97494
bW9pcmU= 97495
aXN0aXF1ZQ== 97496
X2xzdG0= 97497
LWNvbW1pdA== 97498
eXN0ZXJpb3Vz 97499
IHR3aW5r 97500
LXRodW1ibmFpbHM= 97501
ZW7DrQ== 97502
OicnLA== 97503
IGJsYWNrb3V0 97504
IEZsb29ycw== 97505
IHNvZmFz 97506
IG91aQ== 97507
bGVzaG9vdA== 97508
IFJhcQ== 97509
LWFicw== 97510
IGtyYQ== 97511
TWluaW5n 97512
c2hhZnQ= 97513
LnNldENvbHVtbnM= 97514
Q2xheno= 97515
UFJFVFRZ 97516
LnBsYXlsaXN0 97517
6Zai 97518
LVNhaGFyYW4= 97519
TUlORw== 97520
CWJs 97521
6K6u 97522
amY= 97523
RE9DS0VS 97524
aG9wZWZ1bGx5 97525
KGlnbm9yZQ== 97526
IFVzZXJzQ29udHJvbGxlcg== 97527
IE1pdGFyYmVpdGVy 97528
IExFUw== 97529
SGFtaWx0b24= 97530
LW1ldGFkYXRh 97531
IEtL 97532
aWt0aWc= 97533
IHdvbGx0ZQ== 97534
ZWdyYXRvcg== 97535
XWJvb2w= 97536
LGN1cnJlbnQ= 97537
IHZhbHVlVHlwZQ== 97538
IGV4Y2F2YXRpb24= 97539
b2xhbmQ= 97540
IHZlcnY= 97541
L2ZpbGVwYXRo 97542
QXV0aFByb3ZpZGVy 97543
IHByb2NyYXN0 97544
CVVMT05H 97545
X01FTUJFUlM= 97546
IHVwbGlmdA== 97547
IEF1dG9ub21vdXM= 97548
IGFydHdvcmtz 97549
IE91dHJlYWNo 97550
IHBvcmU= 97551
SG9tZXBhZ2U= 97552
RGlhbG9nVGl0bGU= 97553
IEdlbmVyYXRpbmc= 97554
UEFSU0U= 97555
IHNlbWFuYXM= 97556
IGh1bWFubw== 97557
SlNHbG9iYWxTY29wZQ== 97558
IHZvbHRl 97559
IGJlbGxh 97560
KGlzaW5zdGFuY2U= 97561
IHBsYw== 97562
XENhdGFsb2c= 97563
IGVzdGVlbWVk 97564
6Zu3 97565
KHN1ZmZpeA== 97566
IHN3ZWVwcw== 97567
CU9SREVS 97568
IGRvaXZlbnQ= 97569
IFN3YXJt 97570
IENvbXBpbGVk 97571
Z2V0UGFnZQ== 97572
QURS 97573
LlJpY2hUZXh0Qm94 97574
IE5hbWluZw== 97575
YWdnZWQ= 97576
IEdBTkc= 97577
cmFzaW5n 97578
b2RlbGVk 97579
IGdhbGE= 97580
IEpTTmFtZQ== 97581
ZGRm 97582
IGlsbHVzdA== 97583
IExhbnNpbmc= 97584
W3BvcnQ= 97585
LWRlYXRo 97586
IGRpbmhlaXJv 97587
IEVpZ2h0aA== 97588
IGJpYW4= 97589
c3TDpQ== 97590
IHZlcnNpw7Nu 97591
IExpbmVhckdyYWRpZW50 97592
IEhhcmRpbmc= 97593
Liop 97594
ZWN6eQ== 97595
JGhlYWRlcg== 97596
IHbDpXI= 97597
VW5jaGVja2Vk 97598
IGtvamU= 97599
IFBhbGFkaW4= 97600
KCkpKSw= 97601
R2l2aW5n 97602
KCl9KQo= 97603
IGRpcHM= 97604
RnJpZW5kbHk= 97605
IHBvcnRyYXlz 97606
IGhlbGl1bQ== 97607
IGluc3VyZ2VuY3k= 97608
X2V4cGlyeQ== 97609
IHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5n 97610
IGFhbnRhbA== 97611
c2xvcGU= 97612
bWFzdA== 97613
LmdldEludGVnZXI= 97614
ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 97615
X1BJUEVMSU5F 97616
IGRlbnNlbHk= 97617
IG11dGF0aW5n 97618
bWlkaQ== 97619
IFNlaXQ= 97620
YXluZQ== 97621
Tk9XTEVE 97622
IERlc21vbmQ= 97623
IEZOYW1l 97624
IE5haXJvYmk= 97625
XENvbnRleHQ= 97626
IGNhbGN1bGFy 97627
LWRlbg== 97628
IGNvdHQ= 97629
XSk6DQo= 97630
IFJlY29tbWVuZGF0aW9u 97631
IFJvbGV4 97632
IHZhbGlkYXRpb25SZXN1bHQ= 97633
LnBhdA== 97634
IG7DoHk= 97635
IFJlc3RDbGllbnQ= 97636
IEdQSQ== 97637
IEFzaGV2aWxsZQ== 97638
IE9TUA== 97639
IFBFUk1JU1NJT04= 97640
0JTQsNGC0LA= 97641
L25vdGlmaWNhdGlvbg== 97642
S25pZ2h0 97643
X1dvcmQ= 97644
IEJlbmRlcg== 97645
cmFua2luZw== 97646
IHBhcnRpZGE= 97647
X3Jlc2VydmF0aW9u 97648
zIA= 97649
IG1OYW1l 97650
IGdldGNo 97651
IGJvcnI= 97652
IGRpbGlnZW50 97653
RGlzY3Vzcw== 97654
5q2j5Zyo 97655
YXBlYWtl 97656
aW9uZWQ= 97657
LU5hemk= 97658
LmN1bQ== 97659
IEtyb24= 97660
PSQoJyM= 97661
L3NpbmdsZQ== 97662
IGVyb3Rpc2No 97663
IFZpYg== 97664
IHJhdGlmaWVk 97665
IGNvbmNlcnRlZA== 97666
IFJFR0FSRA== 97667
IGRvYnI= 97668
LkRyaXZlck1hbmFnZXI= 97669
J3I= 97670
UG9ydGFibGU= 97671
CXN1aXRl 97672
IHJlbGFjaW9uZXM= 97673
IERvcA== 97674
ZW1wbG9p 97675
RE9C 97676
IGNydW1icw== 97677
IHhscw== 97678
X0FwcGxpY2F0aW9u 97679
KCc6Jyw= 97680
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 97681
bXNl 97682
IGJlcms= 97683
IFJldHVyblZhbHVl 97684
IEJlbGx5 97685
IGNhbWFy 97686
IFBlZWs= 97687
ZWxzaW5n 97688
IG5vdGlmaWVz 97689
IFRyaXN0YW4= 97690
IEdBUg== 97691
ZW1tZQ== 97692
IEVsZXZhdGVk 97693
X0NTVg== 97694
KGNoYWxr 97695
IHR3ZW50aWVz 97696
IFNlYXJjaFJlc3VsdA== 97697
PXNlYXJjaA== 97698
IE1peGluZw== 97699
w710 97700
IHJlY3J1aXRlcg== 97701
IElERU9HUkFQSA== 97702
IEFnbw== 97703
KE9wZXJhdGlvbg== 97704
JHZhbHVlcw== 97705
IHdvcmxkbHk= 97706
IFJvc2VuYmVyZw== 97707
IENvbmZpZ3VyZVNlcnZpY2Vz 97708
Pio8Lw== 97709
S0FOSkk= 97710
IGNodWNrbGVk 97711
IHN0cmlmZQ== 97712
IEJvbWJheQ== 97713
IEJBQ0tHUk9VTkQ= 97714
ZXRhdA== 97715
ZW51bWVyYXRvcg== 97716
IHPDu3I= 97717
IOOBrg== 97718
X3BlZGlkbw== 97719
L0Rr 97720
IGplYW4= 97721
X0NvbHVtbg== 97722
IGhlYXRtYXA= 97723
LlBlbmRpbmc= 97724
IHVuc3VjY2Vzc2Z1bGx5 97725
CWVw 97726
IHNpbmZ1bA== 97727
IEFudG9ueQ== 97728
X0ZPQ1VT 97729
VGV4dExhYmVs 97730
X3JlYWN0aW9u 97731
IElEaXJlY3Q= 97732
IGNhcm5pdg== 97733
V29ya3NoZWV0 97734
IHN1ZWRl 97735
CVJUQ1Q= 97736
IHNldGJhY2tz 97737
LnVuYmluZA== 97738
IHNpw6g= 97739
TGlxdWlk 97740
X1JFTkRFUkVS 97741
TWF0ZQ== 97742
IE1pbGxlbm5pYWxz 97743
IGVwb3h5 97744
aXp6aW5lc3M= 97745
IGJyYXppbA== 97746
0L7RgdGC0Yw= 97747
JnZpZXc= 97748
L2dwaW8= 97749
SmFtaWU= 97750
LkdyYXZpdHk= 97751
PSIuJF8= 97752
IFZBTg== 97753
IElEUg== 97754
YXBwZWFyYW5jZQ== 97755
LlNlbGVuaXVt 97756
TGVhcA== 97757
LlJlbGF0aXZlTGF5b3V0 97758
U2lnbmFscw== 97759
QWNjZWxlcmF0aW9u 97760
CUhBTkRMRQ== 97761
L09wZW4= 97762
IGdldExvZ2dlcg== 97763
U3Bp 97764
LXdyaXRpbmc= 97765
INCy0YvQtw== 97766
LXdvcnRoeQ== 97767
IHdjcw== 97768
IFFUaW1lcg== 97769
IFBvbHltZXI= 97770
IHZhbnQ= 97771
CURlbGV0ZQ== 97772
aXR0ZQ== 97773
V2hpbHN0 97774
IGFsZ3Vt 97775
IHNoaWVsZGluZw== 97776
IGttcw== 97777
CSAgICAJCQk= 97778
TWV0ZW9y 97779
IGFnZ3JlZ2F0b3I= 97780
IFNpbmQ= 97781
SG9zdEV4Y2VwdGlvbg== 97782
PScnLAo= 97783
IEpTQnJhY2tldEFjY2Vzcw== 97784
T05P 97785
X0J1aWxk 97786
IHN0cmlwcGVy 97787
IExK 97788
PENvbXBvbmVudA== 97789
L3NvdXJjZXM= 97790
IGVyZ29ub21pYw== 97791
IEFjY3JlZA== 97792
dW5jZQ== 97793
b25pcw== 97794
emVpZ3Q= 97795
IFNrYXRl 97796
IFJlY3RUcmFuc2Zvcm0= 97797
SW5jb21wbGV0ZQ== 97798
IGluZ2VuaW91cw== 97799
IGNvaXNh 97800
IGNpdHlOYW1l 97801
aGFiaXQ= 97802
X1RW 97803
IEFOU1c= 97804
Li4uIj4K 97805
IHNub3Jr 97806
X29wYWNpdHk= 97807
IGluaXRXaXRoTmliTmFtZQ== 97808
aWFkbw== 97809
QUFD 97810
IF0pLg== 97811
O3o= 97812
X3BhcmFncmFwaA== 97813
IG5vc2Vz 97814
c3RhbmRz 97815
aWZy 97816
X21F 97817
SXJhcQ== 97818
LlByZWRpY2F0ZQ== 97819
ZW5haXJl 97820
XV1dOwo= 97821
IHVuaWRhZA== 97822
IHJldGlyZWVz 97823
X2hlbGxv 97824
IG1vZGVsZQ== 97825
IFVJVGFibGVWaWV3Q29udHJvbGxlcg== 97826
ZndyaXRl 97827
X251bWVybw== 97828
X3Zpc2l0ZWQ= 97829
IHJlY2ViZQ== 97830
KE5vdGlmaWNhdGlvbg== 97831
RmFudGFzdGlj 97832
X3N1Ym1lbnU= 97833
IFBFTQ== 97834
IEN1cGVydGlubw== 97835
YXBwcm94aW1hdGVseQ== 97836
Y2xhc3NlZA== 97837
LlJlYWRTdHJpbmc= 97838
IGRvbWljaWxl 97839
X1BX 97840
IGJhbGxwYXJr 97841
IEthbGU= 97842
Y29udHJh 97843
X2Zhdm9yaXRl 97844
L29m 97845
UXVpdGU= 97846
IE9UQQ== 97847
IGFjY2VsZXJvbWV0ZXI= 97848
ZGlkbg== 97849
fF4= 97850
IFJvaGluZ3lh 97851
aXZpY3Jt 97852
YW5uYWJpbg== 97853
0L7QsdGL0YLQuA== 97854
b3JhZG8= 97855
Jykr 97856
SGF1bnRlZA== 97857
LElE 97858
KFVJQWxlcnRBY3Rpb24= 97859
dXJ2 97860
X2JlbA== 97861
IE1leGljYW5z 97862
L3Rlcm1z 97863
IFBhaW50ZXI= 97864
SW5wdXRMYWJlbA== 97865
IFZpbmNp 97866
IFJvc2ll 97867
XHVj 97868
PE1lbnU= 97869
IGNvb2xhbnQ= 97870
KGN1cnJlbnRVc2Vy 97871
X2R1YWw= 97872
KSJ9LAo= 97873
JnA= 97874
IGNvbnZlcmdlZA== 97875
IHJlc3RyYWlu 97876
IFl1Z29zbGF2aWE= 97877
PXRhcmdldA== 97878
IGltcHVscw== 97879
ZHNh 97880
U2VhcmNoVHJlZQ== 97881
IGhib3g= 97882
IEltcHJlc3M= 97883
wqfDgw== 97884
Z2V0RnVsbFllYXI= 97885
KGRh 97886
IFlZUw== 97887
LmFsaWdubWVudA== 97888
LkdldFRleHQ= 97889
LnRva2VuaXpl 97890
IE9seW1wdXM= 97891
IG11cmt5 97892
b3Jlc3RhdGlvbg== 97893
IGRpc3NhdGlzZmFjdGlvbg== 97894
CVRBcnJheQ== 97895
X2tzZXM= 97896
LkFkZFNpbmdsZXRvbg== 97897
IFN0YXJ0VGltZQ== 97898
IGZhbmF0aWM= 97899
ICAgICAgICAgICAgICAgICAgICAJ 97900
IGVudGl0eVR5cGU= 97901
Lm92ZXJyaWRl 97902
IC0tLS0tLS0tLS0tLS0= 97903
IERhdGFncmFt 97904
Zm91dA== 97905
KHdpdGhJZA== 97906
ICNfXw== 97907
n+iDvQ== 97908
ZWt5bGw= 97909
LmZyaWVuZHM= 97910
YW1lbGVvbg== 97911
IHphY2g= 97912
LnNpbXBsZUJ1dHRvbg== 97913
cmV0b3Jubw== 97914
IGtvbms= 97915
L3NtYWxs 97916
IFF1aWNrbHk= 97917
dW5yZWFk 97918
RG9uYXRl 97919
RGV0YWlsVmlldw== 97920
IGR1YQ== 97921
IHBlbmV0cmF0ZWQ= 97922
T01VWA== 97923
IG5pcg== 97924
X3BkYXRh 97925
Il0sWyI= 97926
IGxvd2Vz 97927
IGRvcGluZw== 97928
IGFzeW1tZXRyaWM= 97929
IG5lZWRsZXNz 97930
b3VyY2Vt 97931
IHVwcm8= 97932
IEd1enpsZQ== 97933
YWZi 97934
IHNleHRyZWZmZW4= 97935
LWNvbGxhcg== 97936
IGNvbG9zc2Fs 97937
TW9ua2V5 97938
bmlzaA== 97939
IGhhbmRsZU1lc3NhZ2U= 97940
SW5jcmVhc2Vk 97941
KmR4 97942
IENoYXR0YW5vb2dh 97943
Zm9yZw== 97944
IE9yZGVu 97945
IHNocmk= 97946
IFZhbmQ= 97947
ICJAIg== 97948
SW1hZ2VTaGFycA== 97949
IFdpbGRjYXRz 97950
cG9uaWJsZQ== 97951
LnNjZW5lcw== 97952
IHBhaW50ZXJz 97953
IFBmaXplcg== 97954
IFphaA== 97955
VG9Mb2NhbA== 97956
IEZsYW0= 97957
IMOpdGFpZW50 97958
KSle 97959
IFNhbmRib3g= 97960
IFRSQURF 97961
IGNocm9taXVt 97962
IGFjY2xhaW0= 97963
IHBhY21hbg== 97964
wrR0 97965
KXJlYWRlcg== 97966
TWFyaQ== 97967
LkRpc3BhdGNoZXI= 97968
LkFETUlO 97969
IFJlbWVk 97970
U3dlZGVu 97971
IG92ZXJsYXlz 97972
LmVy 97973
IHBhbmc= 97974
IGNsZWFubHk= 97975
YXZlbnBvcnQ= 97976
VG95b3Rh 97977
cGF0Y2hlcw== 97978
IHZ0eA== 97979
IEVpcw== 97980
Y2xhZG8= 97981
IFJpdGNo 97982
Uk9MUw== 97983
IGhhZGU= 97984
IGNvbnNwaWN1b3Vz 97985
IGRvY2tz 97986
KGpx 97987
IFByZW1pZXJzaGlw 97988
IEJleg== 97989
IOKElg== 97990
INGD0YHQuw== 97991
X3RvdGFscw== 97992
IHByb3Zh 97993
IEN1ZQ== 97994
IHNhw7pkZQ== 97995
IEdhbWVDb250cm9sbGVy 97996
SU1JWkU= 97997
LHBvcnQ= 97998
44CCKA== 97999
LkNkZWNs 98000
SW5zdGFudGlhdGlvbkV4Y2VwdGlvbg== 98001
IGNvbGxhZ2U= 98002
IElPQw== 98003
IGJhaXM= 98004
IG9uRmluaXNo 98005
LXN0YXJz 98006
c2V0U2l6ZQ== 98007
IG1vZ3Vs 98008
IGRpc2lsbHVzaW9u 98009
IGNoZXZ5 98010
KFNjaGVkdWxlcnM= 98011
KElS 98012
X2xvY3M= 98013
IGNhbm5vbnM= 98014
IGNhbmNlbGxpbmc= 98015
L2J1cw== 98016
IGJ1Zmlv 98017
IFlvdXJz 98018
IFBpa2FjaHU= 98019
IHRlcm1l 98020
csOl 98021
ZmFocmVu 98022
IG93bmVySWQ= 98023
IG9ibGlnYXRvcnk= 98024
IGN1bHA= 98025
IGFjaWRpdHk= 98026
LW11bHQ= 98027
IEJhbWJvbw== 98028
ICciPg== 98029
X2dz 98030
IGNvbXBpbA== 98031
bmFyZA== 98032
LWV4Yw== 98033
IHJoeW1l 98034
IGJ1dHRv 98035
c2F5cw== 98036
YW50YXN5 98037
67g= 98038
IGNpdHTDoA== 98039
IGNoZWc= 98040
VGltZVN0cmluZw== 98041
IHBvc2l0aXZpdHk= 98042
IERhYmVp 98043
IHdhbmc= 98044
IGVzY3Jl 98045
ImM= 98046
CXZpZGVv 98047
IFJhbmtlZA== 98048
LnN0cmluZ3M= 98049
Pj4+KA== 98050
INC40L3RgtC10YA= 98051
IHJlc3Rh 98052
WzosOg== 98053
IHJlbmRyZQ== 98054
IGRlc2Vy 98055
Sm9z 98056
IGRpc3J1cHRpb25z 98057
INC+0L/QtdGA 98058
c2FtcGxpbmc= 98059
c3VwcHJlc3M= 98060
IGNvbnRhaW5lclZpZXc= 98061
IFNlYW1sZXNz 98062
IGFpcnk= 98063
IG9ubG9hZA== 98064
LldpbmRvd01hbmFnZXI= 98065
IFBMQQ== 98066
YnJhY28= 98067
LnNldFBvc2l0aXZlQnV0dG9u 98068
IHBkdQ== 98069
IGdzaQ== 98070
IENsaQ== 98071
X2dyYWRpZW50cw== 98072
0Y/QtA== 98073
IFdoaXNwZXI= 98074
Y3N0ZGludA== 98075
IGzDpG5n 98076
IGZvcm11bGF0aW9ucw== 98077
w6lub20= 98078
b3VybmVtb3V0aA== 98079
WyRf 98080
IG9yZGluYXJpbHk= 98081
LnNldFVzZXJuYW1l 98082
IGZhY3VsdGllcw== 98083
TUlUVEVE 98084
L3ZhbHVlcw== 98085
IHdlaXI= 98086
IEFwdA== 98087
TVo= 98088
CWNm 98089
dWNrZW4= 98090
CQkJCQkJCQkJCQkJCQkJCQkJCQk= 98091
ZGVmZW5zZQ== 98092
W2lWYXI= 98093
IEJ1c2luZXNzRXhjZXB0aW9u 98094
U2VsZWN0b3Jz 98095
KGNvb3JkaW5hdGVz 98096
IFJlc2V0cw== 98097
IERyaW5rcw== 98098
b2xlYW5z 98099
KHN0eXB5 98100
X0lPQw== 98101
Lnh4eA== 98102
IFNsYXRlcg== 98103
IEJlbGl6ZQ== 98104
IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 98105
YWRkaW4= 98106
X2VwaXNvZGVz 98107
IGlzY2hlbQ== 98108
bGVnYWxBcmd1bWVudEV4Y2VwdGlvbg== 98109
RGFubnk= 98110
IHBhcmVk 98111
LmNvZGVoYXVz 98112
IEFzc3k= 98113
CVJlY3Q= 98114
4p4= 98115
Lmxpc3Rh 98116
INCy0LDRiA== 98117
IHZldHM= 98118
SFdORA== 98119
aXNvbmVy 98120
IHhv 98121
IG9yYWxseQ== 98122
IFN0bXQ= 98123
LnJubg== 98124
IERQSQ== 98125
IFN0cmlrZXM= 98126
LnNldFZpZXdwb3J0Vmlldw== 98127
IOiHquWKqOeUn+aIkA== 98128
WUVMTE9X 98129
R0xlbnVt 98130
cGFydG5lcnM= 98131
IEltcGxpY2l0 98132
IHRha28= 98133
4oCZZWxsZQ== 98134
IGVybcO2Zw== 98135
dG90YWxDb3VudA== 98136
R2ls 98137
CXdvcms= 98138
IHByYXRpYw== 98139
aW5hdGk= 98140
YWJpZXM= 98141
IFNraW5uZXI= 98142
IHNwaXJpdGVk 98143
IHBhbmNyZWF0aWM= 98144
IGhkZg== 98145
J2Vt 98146
IHBzeWNob3Npcw== 98147
b2xpY2l0 98148
ICJ7Ig== 98149
X2F0dWFs 98150
IMOpbGVjdA== 98151
VEVBTQ== 98152
IGRhaw== 98153
IFNXQVQ= 98154
LkZyYWdtZW50TWFuYWdlcg== 98155
IHByb3Zpc2lvbmluZw== 98156
bGlmZXRpbWU= 98157
X0VYVEVOU0lPTlM= 98158
IENBU0NBREU= 98159
ICFb 98160
KEtQ 98161
IHZlbQ== 98162
IEludGVycmFjaWFs 98163
J119LAo= 98164
c3BhY2Vy 98165
X2t2 98166
V2FyZWhvdXNl 98167
UkRE 98168
X2ZzbQ== 98169
LlN0cmV0Y2hJbWFnZQ== 98170
LFllcw== 98171
IFJlZnVnZWU= 98172
IEJyaW5naW5n 98173
IHbDoWxpZG8= 98174
LmludGVyc2VjdGlvbg== 98175
IHNwb29reQ== 98176
X3BvcnRhbA== 98177
IG1vdGg= 98178
IFpvZGlhYw== 98179
IFNPQ0lBTA== 98180
TWltZVR5cGU= 98181
J119fTwv 98182
IHJlc2l6YWJsZQ== 98183
5Lqb 98184
KHBoYXNl 98185
KG1hcHBlZEJ5 98186
IG11bmRpYWw= 98187
IGNvbnZv 98188
L2xlZnQ= 98189
L2RvY3VtZW50cw== 98190
d2FzaGluZw== 98191
IEFtw6lyaWNh 98192
X3F1b3Rh 98193
LnBvc3Rlcg== 98194
J10iKTsK 98195
IHN0ZWxsdA== 98196
IERJU0NMQUlNRVI= 98197
W29wdA== 98198
IGVkcw== 98199
IFJhY2Vz 98200
dmVudGFz 98201
IHB6 98202
IENhcGFj 98203
IFVzZXJEYW8= 98204
aXRlc3Q= 98205
UHJvdmVlZG9y 98206
IFNob3RndW4= 98207
IHRoaXJzdHk= 98208
IEJhbGFuY2Vk 98209
aXF1ZXRh 98210
IGhlYWxlcg== 98211
LyIp 98212
LlNkaw== 98213
IHRlcnQ= 98214
ImRhdGE= 98215
X3Byb3ZpbmNl 98216
LkF1dG9tYXRpb24= 98217
IGZvbnRXaXRoTmFtZQ== 98218
X0FOVA== 98219
55WM 98220
b29kbGVz 98221
IFJFUFJFU0VOVA== 98222
X0dQUw== 98223
IHBlcnN1YXNpb24= 98224
IERpc2N1c3Npb25z 98225
IGZyZWQ= 98226
TkVH 98227
OmJvcmRlcg== 98228
CWluaXRpYWxpemU= 98229
CWdsb2c= 98230
LWNhcGl0YWw= 98231
IEltVmVj 98232
IGRldmlz 98233
Q2FuZGlkYXRlcw== 98234
LmFuaW1hdGlvbnM= 98235
IHJhZ2F6emk= 98236
IFByb21ldGhldXM= 98237
IEtpZGQ= 98238
IHByb2dyYW1tYQ== 98239
Q2VydGlmaWNhdGVz 98240
Q29udGE= 98241
LmVzcHJlc3Nv 98242
IOuQmA== 98243
IGJlaWRl 98244
6ZmG 98245
LmdldFJhdw== 98246
IEZ1bGxOYW1l 98247
IGlhbQ== 98248
KCopKA== 98249
bWFpZHM= 98250
Qkg= 98251
IENvbnNwaXJhY3k= 98252
X0RV 98253
IGJsYXRhbnRseQ== 98254
IFx8 98255
IFdpZw== 98256
IENvbmo= 98257
UmVuZGVyaW5nQ29udGV4dA== 98258
TWl0Y2g= 98259
IGFsbGVsZXM= 98260
IOazqOaEjw== 98261
IHJpbXM= 98262
IE5laWdoYm9y 98263
IEt5bGll 98264
LnBhcnR5 98265
dG9ycw== 98266
IOyhsO2ajA== 98267
IHdlcw== 98268
IENyYWZ0aW5n 98269
WyIu 98270
LnNwb25nZQ== 98271
IOqx 98272
SXNsYW1pYw== 98273
IHByb3NlY3V0aW5n 98274
IHdpaw== 98275
Lm9zZ2k= 98276
b25pbmdlbg== 98277
R3JhbW1hcg== 98278
J2lt 98279
IGF4aWFs 98280
Q2xlYW5pbmc= 98281
LmdldEV4dGVybmFsU3RvcmFnZQ== 98282
PS4v 98283
IGNocm9tYXQ= 98284
0LXRhQ== 98285
YWJheQ== 98286
IGJvbGE= 98287
LkFnZ3Jlc3NpdmU= 98288
J10sJF8= 98289
aXphY2Fv 98290
UHJlcGFyaW5n 98291
OkFueQ== 98292
LkVOVEVS 98293
LXdpbmRvd3M= 98294
IGVucmFnZWQ= 98295
X2RpY2U= 98296
IGRldHRh 98297
ZWNhbA== 98298
X09SSUdJTg== 98299
IC0tLS0tLT4= 98300
X0JsdWU= 98301
IGJvdGFuaWNhbA== 98302
IGZyYWdz 98303
IGZhbWlsaWFs 98304
LWR1 98305
IHNlaXppbmc= 98306
KGJsb2Nrcw== 98307
LnJk 98308
LmNoZWNrTm90TnVsbA== 98309
IG1pc2Vy 98310
IG1heHg= 98311
IEtuZWU= 98312
Vmlld0l0ZW0= 98313
SW5uZXJIVE1M 98314
RGFuZ2Vy 98315
KChfXw== 98316
IHByenlwYWQ= 98317
Y3JlYXRlVXJs 98318
Kios 98319
IERlY29yYXRpbmc= 98320
QVRFR1k= 98321
Pz4v 98322
LkRlc2lnbmVy 98323
aGV4ZGlnZXN0 98324
IEV2ZXJ5d2hlcmU= 98325
YWxsZXJpZXM= 98326
LlRFWFRVUkU= 98327
LkJsb2Nrcw== 98328
emVsbA== 98329
IHByZcOnbw== 98330
U3VkZGVubHk= 98331
aW5wdXRFbWFpbA== 98332
KHN5bmM= 98333
LmJk 98334
Z29sZGVu 98335
PicpOw== 98336
IERpY2tpbnNvbg== 98337
Pj4oCg== 98338
IFFVRVVF 98339
IGdldENvbHVtbg== 98340
IFNBTkQ= 98341
LnBpZWNl 98342
bGljZXI= 98343
Rmx1dHRlcg== 98344
IGdldFZlcnNpb24= 98345
IHJlc291cmNlSWQ= 98346
b2ds 98347
xYJhdw== 98348
LkJyYW5jaA== 98349
CXdlYg== 98350
IGZyYW1lcmF0ZQ== 98351
UFBQ 98352
IGZyYXk= 98353
Q05U 98354
IGluZm9ybWF0aWU= 98355
J10NCg0K 98356
bmVhcw== 98357
SGVhZGVyQ29kZQ== 98358
IOa4 98359
IHRyZw== 98360
cmF3dHlwZXM= 98361
SG9uZGE= 98362
IG1hcmtldGVy 98363
IHJlcXVlc3REYXRh 98364
IFBn 98365
CW5vdA== 98366
IHBhZ2VJbmZv 98367
IGFrdHVlbGxlbg== 98368
44GV44KT 98369
IEFNUw== 98370
cHVzaFZpZXdDb250cm9sbGVy 98371
CUFM 98372
IHZlc3Rz 98373
cHJvZHVjZQ== 98374
LW3Dqm1l 98375
IFJhaG1hbg== 98376
RnVubnk= 98377
RVo= 98378
X1ZhbGlk 98379
IHNxdWFkcm9u 98380
IGxhc2g= 98381
IGlybQ== 98382
aWFzY28= 98383
IFBhcmFu 98384
IHBldGl0ZXM= 98385
IERlY2F5 98386
IHVuaW5pdGlhbGl6ZWQ= 98387
cHJpdmlsZWdlZA== 98388
IG1iZWR0bHM= 98389
5aSH5rOo 98390
IF4u 98391
IGVjc3RhdGlj 98392
RGV0cm9pdA== 98393
IHBhcnRlbg== 98394
IHNvdXZlbmly 98395
LmdldExvZ2lu 98396
0LzQvtGC0YA= 98397
ZW7Dp8Ojbw== 98398
IG3DrW5pbW8= 98399
IEFjY2Vzc2Vk 98400
cmnDsw== 98401
TWlj 98402
IFZvY2Fs 98403
LlNldFN0cmluZw== 98404
IG1lbnNhamVz 98405
5YCN 98406
IGF0dHJhdmVycw== 98407
IEFwaA== 98408
ICcpOw0K 98409
w7xuZGU= 98410
IGVuY2hhbnRlZA== 98411
IFJvb3RTdGF0ZQ== 98412
IENMT1NFRA== 98413
CQkJCQkJCQkNCg== 98414
IGNhbGllbnRl 98415
b3JyaXM= 98416
IHBoeXNpY2lzdHM= 98417
aHduZA== 98418
X3Zp 98419
IHLDoXBpZG8= 98420
IGNhcGl0YWxpemVk 98421
ZWRCeQ== 98422
IG1hY2hpbmluZw== 98423
IGh1YmJ5 98424
IFN0YWN5 98425
LkJ1cw== 98426
ZHJpbms= 98427
SHVy 98428
IHByb3BpYQ== 98429
VW5pdFRlc3Q= 98430
IG1pc2NvbmNlcHRpb24= 98431
X18pKTsK 98432
L2Rj 98433
IE1heXdlYXRoZXI= 98434
X21D 98435
LmNyZWF0ZUZyb20= 98436
IFFQYWludGVy 98437
cm9wc3ljaA== 98438
aW5uaXR1cw== 98439
YXlhcw== 98440
IGdlZw== 98441
KGR3 98442
IHVzYWRv 98443
IHRyaWNrbGU= 98444
IGFubmloaWw= 98445
IFBhc3Rh 98446
ICsrCg== 98447
KEV4cGVjdGVkQ29uZGl0aW9ucw== 98448
LnBvc3RWYWx1ZQ== 98449
aWNhcA== 98450
IERvbmV0c2s= 98451
X3NvdXA= 98452
LXB1Ymxpc2g= 98453
IFBi 98454
bWVudGlvbnM= 98455
QUNDRVBU 98456
LlB1bGw= 98457
LOKAmeKAmQ== 98458
IHJldGFyZGVk 98459
X0FUT00= 98460
IFRlcm1pbmF0b3I= 98461
LWNvdXJ0 98462
IENMTG9jYXRpb25Db29yZGluYXRl 98463
IHJldmVyZW5jZQ== 98464
IFNTQw== 98465
dXRlbHk= 98466
IFdPTg== 98467
IEdTTA== 98468
ZnJlaQ== 98469
LmdldExvbmdpdHVkZQ== 98470
IG9wZW5GaWxlRGlhbG9n 98471
LkJ1dHRlcg== 98472
LWltcG9ydGFudA== 98473
X01BTlk= 98474
IEdvbmc= 98475
4oCcSG93 98476
IGdvcmdl 98477
PW1zZw== 98478
IEV6ZWs= 98479
Y3JlYXRlQ29tbWFuZA== 98480
OmNoZWNrZWQ= 98481
IGluZm9ncmFwaGlj 98482
LldFU1Q= 98483
RGlycw== 98484
IGd1YXJkYQ== 98485
IGJlZXRsZQ== 98486
PHNtYWxs 98487
LWFuZHJvaWQ= 98488
IGNyZWRpdG9y 98489
IE3DqWQ= 98490
IGZpbmFsaXN0 98491
IGFibA== 98492
bmV2 98493
X2ludGVyYWN0aW9u 98494
IE1vbnRlcmV5 98495
amFo 98496
IGNhbmRpZXM= 98497
IFF1aW5jeQ== 98498
6Kqt 98499
IGJhdGNoU2l6ZQ== 98500
YWtpdA== 98501
IG9iZQ== 98502
KHBhcmE= 98503
IGV4cGVyaW1lbnRlZA== 98504
IGNvdW5jaWxsb3Jz 98505
IGNsYXNoZWQ= 98506
c3F1 98507
LXN0cm9rZXM= 98508
IEdL 98509
IEV4cGlyZXM= 98510
IHByb3NlY3V0aW9ucw== 98511
IENyZWF0dXJlcw== 98512
IHnDtg== 98513
eGxpbQ== 98514
X0lNUA== 98515
RW50cnlQb2ludA== 98516
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 98517
LkRlZmF1bHRDZWxsU3R5bGU= 98518
IGJyZXZl 98519
IEJyaXRhbm4= 98520
IHN3ZWF0eQ== 98521
IGxldGg= 98522
IGZsYXNoYmFjaw== 98523
cGVybWFuZW50 98524
IEpESw== 98525
X0RldGFpbHM= 98526
RXVybw== 98527
cHB0 98528
IHJpY2hUZXh0Qm94 98529
L2JvYXJk 98530
IHRyYW5jZQ== 98531
LmN5Y2xl 98532
Jyk7Iik7Cg== 98533
IHRveGlu 98534
X2RlaW5pdA== 98535
IG92ZXJhcmNoaW5n 98536
IGNvbmZpZ3BhcnNlcg== 98537
IEthd2FzYWtp 98538
LnRodW1i 98539
IHBsYXlh 98540
IEpvc2Vm 98541
K18= 98542
IHplcm9lcw== 98543
IGF1cA== 98544
IEhhcmk= 98545
Y29tbWl0dGVk 98546
Tml0 98547
LmZpbGVQYXRo 98548
IERpc2FiaWxpdGllcw== 98549
bWFudWZhY3Q= 98550
LWFsaWduZWQ= 98551
LlJFU0VU 98552
IHJ1c3R5 98553
RXk= 98554
IG91c3RlZA== 98555
Y29zYQ== 98556
U3RydWN0dXJlZA== 98557
LmdldEQ= 98558
IHPDoWJhZG8= 98559
PkxvYWRpbmc= 98560
X21B 98561
LmdldFJhbmRvbQ== 98562
Ymxpbmdz 98563
IGNoZWVzZXM= 98564
dHRp 98565
LuKAog== 98566
IEJ1cmdlc3M= 98567
ZW5kZXJpdA== 98568
LicsDQo= 98569
KCIiKw== 98570
YWNi 98571
JXA= 98572
aW5kZXhlZA== 98573
X3ByZWRpY2F0ZQ== 98574
bmVzaWE= 98575
IGJpZWQ= 98576
IENJVA== 98577
KFBvcw== 98578
X3JhZGk= 98579
5Lu35qC8 98580
Qml6 98581
IEFkb2xlc2NlbnQ= 98582
IHZpw6pu 98583
Y3ljbA== 98584
X0NhbmNlbA== 98585
IGNvbmNsdXNpdmU= 98586
IGFwcGVsbGF0ZQ== 98587
aW5mb3JtYXRpY3M= 98588
U0o= 98589
IGVsZWN0aXZl 98590
cm9sZUlk 98591
RmV0Y2hlcg== 98592
CUNvbW1hbmQ= 98593
KCIoJQ== 98594
IGZhcnQ= 98595
SUxB 98596
Z2V0QmxvY2s= 98597
QVVTRQ== 98598
INC00LDQvQ== 98599
IEFydGU= 98600
IG5vdGlmeWluZw== 98601
IGdlbGU= 98602
LnNhbWU= 98603
IFJlZ2Vs 98604
IEJhxZ8= 98605
LmNyZWF0aW9u 98606
IFZO 98607
X2NvbW11bml0eQ== 98608
IHVuc3VzdGFpbmFibGU= 98609
U0VY 98610
IGdyaWRTaXpl 98611
cmVzY2lh 98612
YXZlcnNhYmxl 98613
KCcsJylb 98614
IFBoZWxwcw== 98615
4buVaQ== 98616
QU5DRUxFRA== 98617
LUlT 98618
LnJ1bm5lcnM= 98619
IFN0b2tlcw== 98620
LlByb2R1 98621
IHdoaXBwaW5n 98622
X2FjcXVpcmU= 98623
IGludmVzdGlnYWNpw7Nu 98624
ZnJpZWQ= 98625
LmNvcHlXaXRo 98626
IEhhcmRjb3Zlcg== 98627
LVNl 98628
4Z624Z4= 98629
aW52aXRhdGlvbg== 98630
bGVzYWk= 98631
IERvcm0= 98632
INGB0L/QuNGB0LrQsA== 98633
IGNvbmNhdGVuYXRlZA== 98634
b3BoaWw= 98635
IHRoaW5rZXI= 98636
L2ZvbnRhd2Vzb21l 98637
IExlb3BhcmQ= 98638
ICIvIik7Cg== 98639
IHJlc2lkdWFscw== 98640
IE1pY3Jvd2F2ZQ== 98641
IGNvbmZvcm1l 98642
dGhyb3A= 98643
IGRpc2VtYg== 98644
IE9NRw== 98645
IERpc2NpcGxpbmU= 98646
IEFjcm9iYXQ= 98647
L3JlcG9zaXRvcnk= 98648
ZGZh 98649
X01FRA== 98650
YnVmaW8= 98651
IG3DqXRob2Rl 98652
X0hPTEQ= 98653
aWFzaQ== 98654
X2xlZ2FjeQ== 98655
KQ0NCg== 98656
5qOA 98657
R2V0UHJvY0FkZHJlc3M= 98658
IHlheQ== 98659
b3RlbmNl 98660
b3JkZXJpZA== 98661
LXR3 98662
IGRlYXJseQ== 98663
SW5jb21pbmc= 98664
L2ls 98665
IG5ldXJvcA== 98666
dWN6 98667
KTsNDQ0K 98668
IElubm92YXRpdmU= 98669
IHByb2Z1bmQ= 98670
aWdtYXQ= 98671
U2VsZWN0aW9uTW9kZQ== 98672
cmVsZXZhbnQ= 98673
LkdP 98674
IGJydWlzZXM= 98675
IHNhY2g= 98676
b2RlZg== 98677
IHJlaW1i 98678
L2Rlc2t0b3A= 98679
LXNwb3Q= 98680
dW5kYW5jZQ== 98681
RW50cm9weQ== 98682
XGNvcmU= 98683
IHN1Z2Vy 98684
IE12Yw== 98685
IEdOT01F 98686
X2luZHg= 98687
IFlZU1RZUEU= 98688
IE1hdGxhYg== 98689
IENJRg== 98690
ICopKQ== 98691
IHByb2R1Y3RMaXN0 98692
IEFscmlnaHQ= 98693
YWNlbWFyaw== 98694
0YLQuNCy 98695
bW9kaWZpY2F0aW9u 98696
aW50ZXJuYXRpb25hbA== 98697
IGhvbWVycw== 98698
IGRpY3Rz 98699
IFFGb250 98700
LlNRTGl0ZQ== 98701
IHRyYW5zcGxhbnRhdGlvbg== 98702
IE1lc3NhZ2VCb3hCdXR0b24= 98703
IEVsdmVz 98704
J11dKQo= 98705
KFFJY29u 98706
IGNpbmVtYXM= 98707
Q09PUkQ= 98708
LUNoaW5h 98709
IGto4bqpdQ== 98710
5oiR55qE 98711
IHNrdWxscw== 98712
IHBhaW5zdGFraW5n 98713
ZmNl 98714
LlhSTGFiZWw= 98715
IHNwZWNpZmllcg== 98716
IHByZWZlcnJpbmc= 98717
L2FjdGl2aXR5 98718
KFBob3Rv 98719
w6FsdA== 98720
LmxvdA== 98721
Jycu 98722
YW5ub25jZQ== 98723
Lmdvb2dsZWNvZGU= 98724
LXBkZg== 98725
IFBva2U= 98726
X0FDTA== 98727
IGVuZG93ZWQ= 98728
ZGlzY292ZXI= 98729
Lm9tZw== 98730
IHdvb2RsYW5k 98731
Lk1hZ2lj 98732
IHZvbG9udA== 98733
Tm90QWxsb3dlZA== 98734
IGNoYXZl 98735
Qk1X 98736
JywnPScs 98737
IFNJWA== 98738
5oiR5Lus 98739
IGtvc2hlcg== 98740
IGFzcGlyYXRpb24= 98741
aW50bA== 98742
X3JlZnB0cg== 98743
JysK 98744
bWVudG9y 98745
LmNsdWI= 98746
V2luZG93U3RhdGU= 98747
LkFSUg== 98748
IHp6YQ== 98749
IG1lc3NhZ2VUeXBl 98750
LmVxdQ== 98751
VGhvcg== 98752
IGluanVzdA== 98753
IGd1bXM= 98754
IGJvcmRlclNpZGU= 98755
Ly8vLy8= 98756
IFRyYW5zbWl0 98757
IGJ1ZnNpemU= 98758
IGhhaw== 98759
IGVsbGFz 98760
UkFORE9N 98761
CW1j 98762
IHBlYQ== 98763
ZWtv 98764
ZG9jdW1lbnRv 98765
IGh5c3Rlcmlh 98766
IGFyZW5hcw== 98767
IGd1bm1lbg== 98768
IG1pa2U= 98769
IGltcHVuaXR5 98770
YXRpc2F0aW9u 98771
X1plcm8= 98772
X0NPTVBBTlk= 98773
IEdvcnM= 98774
IHVzZUNsYXNz 98775
KHJlZGlz 98776
IFJVTk5JTkc= 98777
IEJhaXI= 98778
dmVsdGU= 98779
ICcsJy4= 98780
0LDRgtGM0YHRjw== 98781
w7ZzdA== 98782
ZW5jb2RlVVJJQ29tcG9uZW50 98783
X3Jlc3RyaWN0 98784
IGRlY2Fscw== 98785
IFBlZGlkbw== 98786
IGFsdGVyY2F0aW9u 98787
RGlzcGxheXM= 98788
IEFwcGxpY2FudHM= 98789
Q1VT 98790
VGV4dGFyZWE= 98791
IEFuZ29sYQ== 98792
LmZ1dHVyZQ== 98793
IFVTSE9SVA== 98794
IHN1cHByZXNzaW5n 98795
IHNldHplbg== 98796
QVBvbHlub21pYWw= 98797
IHRvY2g= 98798
IGhhbGxtYXJr 98799
ICQkJA== 98800
IENIQVJTRVQ= 98801
LnJwbQ== 98802
IERpY2g= 98803
LS0tLS0tLS0tLS0tLS0tLS0tLS0= 98804
X3Bhcm0= 98805
6L+Y 98806
YWNjaW9uZXM= 98807
aGFpdA== 98808
V0FSREVE 98809
X3JvdXRpbmc= 98810
IE5PTQ== 98811
IGVuY2xhdmU= 98812
IExvdHRv 98813
CWZy 98814
Y29tcGxleENvbnRlbnQ= 98815
IEJhbGxhcmQ= 98816
a3ViZQ== 98817
L3dpbg== 98818
LmdldENvbHVtbk1vZGVs 98819
X1JFUExBQ0U= 98820
SGVhZGVyVmFsdWU= 98821
IGVzdHVkaWFudGVz 98822
IGFwaXM= 98823
IGJwbQ== 98824
IFR5cGVOYW1l 98825
QW5kR2V0 98826
cml0YQ== 98827
UGxhbnM= 98828
Pk5vdGU= 98829
IGZldGlzY2g= 98830
IHRvbmVk 98831
X2dvdG8= 98832
b25zZW5zZQ== 98833
IG1vbGRz 98834
IGluZmlsdHJhdGlvbg== 98835
IEd1ZXJyZXJv 98836
dWJibw== 98837
Y2tp 98838
KCQoIi4= 98839
X2FjdGl2aXRpZXM= 98840
KGNoYW5nZXM= 98841
IG9mQXBw 98842
IEtlcGxlcg== 98843
IERlbXA= 98844
IENvbnRpbmVudA== 98845
LlRpY2tz 98846
IFVuc2lnbmVk 98847
IEphaHJlcw== 98848
IGZyZXNobWVu 98849
IEFyY2hpdmVk 98850
INC60L7RgtC+0YDRi9C5 98851
ICc6Og== 98852
VHV0b3JpYWw= 98853
Q2M= 98854
IHRhYmxlTGF5b3V0UGFuZWw= 98855
ZnJvbUpzb24= 98856
LmxldmVscw== 98857
X3RyYW5zaWVudA== 98858
IGVuZG9yc2luZw== 98859
IERJQw== 98860
bGF1Zg== 98861
IHNocmVk 98862
X0VNSVQ= 98863
aWZpY2FudGx5 98864
QUxB 98865
L3Byb3Rv 98866
IG5hcnJvd2luZw== 98867
VXRj 98868
RmFjdG9ycw== 98869
IHNlbnRpZW50 98870
5p6Q 98871
bGl4aXI= 98872
IENST1NT 98873
bWV0ZW9y 98874
IGdyb2lu 98875
IG1kYg== 98876
IFJvdHRlcmRhbQ== 98877
IGNvbWlkYQ== 98878
IE9wQ29kZQ== 98879
IERlZmF1bHRWYWx1ZQ== 98880
UGVybWlzc2lvbnNSZXN1bHQ= 98881
IGhldGVyb2dlbmVvdXM= 98882
IG1vb3Q= 98883
IGRlY2VpdmVk 98884
LWluZGVwZW5kZW50 98885
IE9iamVjdE91dHB1dFN0cmVhbQ== 98886
IG92ZXJwb3dlcg== 98887
LmR1cA== 98888
IGxkYg== 98889
IGRvbWVzdGljYWxseQ== 98890
IGJlc3RlbGxlbg== 98891
IGxvdg== 98892
IENvbnRyYWN0b3Jz 98893
VHJpYW5nbGVz 98894
IGZvZGRlcg== 98895
IGZpbG1lcw== 98896
5LyB 98897
IHJldm9sdmVy 98898
U3RhcnR1cFNjcmlwdA== 98899
L3ZhbGlkYXRpb24= 98900
IFJlc291cmNlVHlwZQ== 98901
acWf 98902
IExheg== 98903
ZmVm 98904
IGxzdG0= 98905
eyo= 98906
LmF0dGFjaG1lbnQ= 98907
LmhpdHM= 98908
ZXdpdGg= 98909
RE9H 98910
QWxhYmFtYQ== 98911
IG1lZGl1bXM= 98912
Lm1Db250ZXh0 98913
LWNvbHM= 98914
5Y+L 98915
Lm5vdGljZQ== 98916
IGF0dG4= 98917
IFBhY2tpbmc= 98918
IExu 98919
X0NPTVBMRVg= 98920
L1VzZXJz 98921
LnNhdmV0eHQ= 98922
IFJvdW5kcw== 98923
Pyw/LD8sPyw= 98924
IGluZ2w= 98925
IFJPQw== 98926
X2ZlbWFsZQ== 98927
IFN0YXJk 98928
XV07 98929
IHdyZXN0bGVycw== 98930
IHRvcnJlbnRz 98931
IHNpbmg= 98932
77u/Cgo= 98933
67O1 98934
c2Vuc2U= 98935
aG93ZXZlcg== 98936
LlBoeXNpY3M= 98937
SW5mcmFzdHJ1Y3R1cmU= 98938
IFNhY3I= 98939
RmVs 98940
IERJU1RSSUJVVA== 98941
w6ltZW50cw== 98942
IFZhbGlkYXRlcw== 98943
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj 98944
IHwv 98945
IGVzbA== 98946
IHLDqXNlYXU= 98947
IEJpcA== 98948
QllURVM= 98949
X1dBVEVS 98950
VHVybmluZw== 98951
RUxT 98952
IGp1eHRhcA== 98953
IGxlc2Jpc2NoZQ== 98954
w71jaA== 98955
KFVua25vd24= 98956
TmVv 98957
QEpzb25Qcm9wZXJ0eQ== 98958
IGFsdW1ub3M= 98959
IFJhcXFh 98960
aW1laQ== 98961
LmdldEJvdW5kcw== 98962
Lk1vdXNlRXZlbnRIYW5kbGVy 98963
IyMjIyMjIw== 98964
R2VuZXJpY1R5cGU= 98965
L2Ntcw== 98966
IHR1cm5v 98967
INC80LjQvQ== 98968
IGZvbGtsb3Jl 98969
IEV2bw== 98970
IGNvbmR1Y3Rpdml0eQ== 98971
IGxlYmVu 98972
IGdlYXJib3g= 98973
LXZz 98974
IM+G 98975
IGRyaW5rZXJz 98976
IGNvbmV4YW8= 98977
IFRlZXRo 98978
IGdldEFyZ3VtZW50cw== 98979
IFJBVA== 98980
ZW50aW91cw== 98981
RWR1Yw== 98982
K1c= 98983
IEluc3RpdHV0aW9uYWw= 98984
IEJvcmQ= 98985
aXNFcXVhbA== 98986
KHB3ZA== 98987
IGlnbml0ZWQ= 98988
IFJvdXNzZQ== 98989
IGltcGFjdGZ1bA== 98990
IE1hbGs= 98991
IGdlcmFs 98992
IFBpdm90 98993
IGF6dA== 98994
IGNzdmZpbGU= 98995
IFJvcGU= 98996
IFNPTFVUSU9O 98997
IEFyYml0cmFyeQ== 98998
IGxldHRv 98999
Lk1vdXNlQWRhcHRlcg== 99000
IH19fQ== 99001
IFNhaWxvcg== 99002
ZGVyYQ== 99003
UHV0dGluZw== 99004
IGNvbmNlbnRyYXRlcw== 99005
IGF1dGhEb21haW4= 99006
4oCd55qE 99007
LWZpbmFscw== 99008
LHN0cmxlbg== 99009
TXVvbg== 99010
IE9yZGluYXJ5 99011
ZmlyZWZveA== 99012
IExhVGVY 99013
IEh1bmQ= 99014
ZW5naW5lZXJpbmc= 99015
L2JsdWU= 99016
ZWRUZXh0Qm94 99017
KCIiKTs= 99018
IENEREw= 99019
a2VwdA== 99020
IEdldFN0cmluZw== 99021
S2ly 99022
KCk9Jw== 99023
IE9DRA== 99024
YW50aXVt 99025
JG1lbnU= 99026
IEFwcGFsYWNoaWFu 99027
U2VjcmV0YXJ5 99028
66WY 99029
4Li14Lii 99030
U2VtYW50aWM= 99031
ICpb 99032
ZXN0b25l 99033
dW5na2lu 99034
TWF4WQ== 99035
LXRvbmU= 99036
In07DQo= 99037
X1BhcnQ= 99038
PE1lbWJlcg== 99039
dHJhbQ== 99040
IHRyYW5zaXN0b3I= 99041
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== 99042
IERlc2Rl 99043
IHJpZ2h0ZnVs 99044
IENvcm5lbA== 99045
5pE= 99046
LkhPVVI= 99047
IHNpZGVsaW5lZA== 99048
cmVmZXJyZXI= 99049
bWF6ZQ== 99050
IGhvbHN0ZXI= 99051
IGNyaXBwbGVk 99052
IERhdGVGb3JtYXR0ZXI= 99053
b3BoYWdl 99054
X21E 99055
IGRlc2VsZWN0 99056
cmF1ZA== 99057
IFBLSw== 99058
cm93RGF0YQ== 99059
IGxvY2tzbWl0aA== 99060
LnJlc3BvbnNlcw== 99061
KHByb2R1Y3RJZA== 99062
X1NUTVQ= 99063
S2V5VHlwZQ== 99064
LlRoZW4= 99065
emVl 99066
IGNydA== 99067
IEdyYW5kbWE= 99068
QFJlc291cmNl 99069
IGJpdHdpc2U= 99070
LWNtcHI= 99071
44CCd3d3 99072
emVpdGln 99073
JmRpc3BsYXk= 99074
Q2FydEl0ZW0= 99075
LU5v 99076
IG51bcOpcm8= 99077
IG1hdXI= 99078
IGluc3RhbmNpYQ== 99079
CWR0 99080
X25wYw== 99081
IHNrYXRlYm9hcmQ= 99082
4oCcQWxs 99083
IENyb3dk 99084
IMOkbg== 99085
IGJyYXo= 99086
Y2Fl 99087
eW5ldA== 99088
L3Bt 99089
L3NjcmVlbg== 99090
T1BUQVJH 99091
IFZCb3g= 99092
IGxlb3BhcmQ= 99093
X2dyZWF0ZXI= 99094
Y3B0 99095
PGRk 99096
IG1lY2hhbmljYWxseQ== 99097
b3NwZWxz 99098
KWY= 99099
Lmx3amds 99100
LmdldFBvcnQ= 99101
IFBSRUY= 99102
LkFkZFRyYW5zaWVudA== 99103
cHBhcmQ= 99104
IO2ajA== 99105
RXRoZXJuZXQ= 99106
IHNhbGluZQ== 99107
KGxldmVscw== 99108
IHNlcnZpY2VQcm92aWRlcg== 99109
LkFuZ2xl 99110
YWx0aXR1ZGU= 99111
aWxsYXVtZQ== 99112
IHNjYXBl 99113
X0NBTEM= 99114
X3F1ZXN0 99115
IERpc3NlcnRhdGlvbg== 99116
IEVETQ== 99117
LUNkcw== 99118
IGhvbm9yYXJ5 99119
c3RvcHM= 99120
IHN1YmRpcg== 99121
IFZI 99122
IENoZWF0 99123
IHJpZ2h0ZnVsbHk= 99124
UUU= 99125
LldyaXRlQnl0ZQ== 99126
ZmlndXJlcw== 99127
ZW5uaWU= 99128
KERCRw== 99129
IHZva3NuZQ== 99130
IGV4cGVuZGVk 99131
VU5JQ0FUSU9O 99132
aWxpbng= 99133
IFJlY2Fw 99134
X3ZlcnRz 99135
IHRyYXVtYXQ= 99136
IGdldFBsYXllcg== 99137
IHZlcmJlc3M= 99138
IGN1bHRpdmF0aW5n 99139
IGluaXRpYXRvcg== 99140
VGjDtG5n 99141
ZmluZEZpcnN0 99142
X3Blcm1z 99143
IGJ1Yw== 99144
ICIiIg0KDQo= 99145
VFlQRVM= 99146
b2JqZWN0TWFuYWdlcg== 99147
KENvbmZpZ3VyYXRpb25NYW5hZ2Vy 99148
IHRpbWlk 99149
IHNuYXBjaGF0 99150
IGNvbnNlZw== 99151
CWRpc3RhbmNl 99152
X3JpZ2h0cw== 99153
X0Rlcw== 99154
IEZsZXNo 99155
LXZlcg== 99156
IGFmbA== 99157
ZnJhdWVu 99158
IGJsYXNwaA== 99159
IFF1YWxpdMOkdA== 99160
bWFm 99161
TW9uaXRvcmluZw== 99162
LkRpZmY= 99163
IHNob3JlbGluZQ== 99164
IHJlc3BvbnNlQm9keQ== 99165
bWVtc2V0 99166
PGRlY2ltYWw= 99167
U21hcnR5SGVhZGVyQ29kZQ== 99168
IGluc2V0cw== 99169
IEJpbmFyeVRyZWU= 99170
YW1lZGE= 99171
IG5paGls 99172
IE5heQ== 99173
eW1vbG9neQ== 99174
IFdH 99175
IHRhcGk= 99176
IEluc3RhbGxlZA== 99177
bWFpbnRlbmFuY2U= 99178
KX0iCg== 99179
IFhP 99180
LXBlcmlvZA== 99181
c2Fy 99182
IG5pbmd1bmE= 99183
T1JNQVQ= 99184
LnNldFByb3RvdHlwZU9m 99185
IEti 99186
IEhlbnJpaw== 99187
w6l0aXF1ZQ== 99188
IExhaG9yZQ== 99189
CUFkZHJlc3M= 99190
IG1lbHRz 99191
Tnk= 99192
X2FkdmFuY2U= 99193
IHZlbG9jaWRhZA== 99194
IGFsdW1ubw== 99195
IHNhbml0aXplcg== 99196
IHBoaXNoaW5n 99197
IENvbWV0 99198
IGNoaWFy 99199
CXNwZWM= 99200
dHJpbW1lZA== 99201
KHN0YXRlYXJy 99202
b25uZW4= 99203
UmV2ZW51ZQ== 99204
TGVucw== 99205
IGNoYWlyZWQ= 99206
IEFzc3VtZXM= 99207
VHJhc2g= 99208
X3Vuc2V0 99209
XEJyaWRnZQ== 99210
UG9pbnRTaXpl 99211
IFBvbGlj 99212
IHNleHVhbGVz 99213
CWRmcw== 99214
IFdpZGVTdHJpbmc= 99215
IGFjY3J1ZWQ= 99216
WVc= 99217
X1NDSEVEVUxF 99218
IGtpdGU= 99219
IHBhcmFjaHV0ZQ== 99220
W3RhYmxl 99221
IGFjdGl2ZUNsYXNzTmFtZQ== 99222
LlF1YWQ= 99223
SXNyYWVsaQ== 99224
IMWT 99225
IGhvb2c= 99226
IGNo4buJ 99227
ZXdlYXI= 99228
IHRpcmVsZXNzbHk= 99229
c2V0RXJyb3I= 99230
LmdldEFtb3VudA== 99231
LnNldEl0ZW1z 99232
IE1hbnNvbg== 99233
IEJheWVzaWFu 99234
X0ZsYWc= 99235
QUNIRVI= 99236
L29yaWdpbmFs 99237
IGltbWFj 99238
IExvc2luZw== 99239
Jz4KCg== 99240
TGlj 99241
IE1pcmFnZQ== 99242
IEFzc2VtYmx5RmlsZVZlcnNpb24= 99243
VGVW 99244
IFZhbHVlRXZlbnRMaXN0ZW5lcg== 99245
LXNvbHZpbmc= 99246
VGhv 99247
cm91bGV0dGU= 99248
X1dQ 99249
IHVuaW50ZXJydXB0ZWQ= 99250
IGZpZWxkVHlwZQ== 99251
LlR5cGVk 99252
IGFtb3Vy 99253
IG1vY2tlcnk= 99254
KHZvbA== 99255
IFN1YmNvbW1pdHRlZQ== 99256
IFJ1Zg== 99257
ZXJveA== 99258
OlVJQnV0dG9uVHlwZUN1c3RvbQ== 99259
IEJsdXI= 99260
IHd5a29u 99261
bmNlcw== 99262
QVNIQk9BUkQ= 99263
ISEiKTsK 99264
IG11cmRlcmVycw== 99265
LmRhaWx5 99266
IERJQUc= 99267
amluZw== 99268
IGRvbHBoaW4= 99269
IGzDsm5n 99270
IGLDtg== 99271
IFZvY2FidWxhcnk= 99272
LlN0T2JqZWN0 99273
JykiPg== 99274
IHp1bg== 99275
IHNjcmltbWFnZQ== 99276
dHLDqWFs 99277
IExpZw== 99278
W3Zp 99279
Q29sZQ== 99280
IGZyb3N0aW5n 99281
LlBsYXllcnM= 99282
LXRyYW5zbGF0ZQ== 99283
RmVlbHM= 99284
PVwiLw== 99285
LkJ1dHRlcktuaWZl 99286
ID8+Owo= 99287
IGF2aQ== 99288
aW5uaWU= 99289
LkZhaWx1cmU= 99290
IHNwaW5kbGU= 99291
Q29uZmlndXJhdGlvbkV4Y2VwdGlvbg== 99292
X2hvcA== 99293
IHBvc2nDp8Ojbw== 99294
IEF3YWl0 99295
VUlJbWFnZVBpY2tlckNvbnRyb2xsZXI= 99296
CWRheQ== 99297
IGdlbm9t 99298
Q2Fi 99299
INGA0LXQt9GD0LvRjNGC0LDRgg== 99300
T1JJR0lOQUw= 99301
IGVqYWN1bGF0aW9u 99302
KHRjcA== 99303
U0VDT05E 99304
IHRvbmlj 99305
IExpc3RCb3g= 99306
IAkJCg== 99307
KCk+Cg== 99308
IHF1YXRyZQ== 99309
xrDhu6NuZw== 99310
d2l0aEVycm9ycw== 99311
Lk1heWJl 99312
LOKApg== 99313
dG9rZW5JZA== 99314
X1VOREVG 99315
IGZyZXNobmVzcw== 99316
IEFtZW5kbWVudHM= 99317
Lm1hcGJveA== 99318
LkNW 99319
KGJsb2c= 99320
X2dldHRpbWU= 99321
LnF1ZXN0 99322
c3BhcnNl 99323
IHJlc2FsZQ== 99324
IGVudGh1c2lhc3RpY2FsbHk= 99325
IFByb3N0aXR1dGFz 99326
V2E= 99327
Q2FyZ28= 99328
LlBhcmNlbGFibGU= 99329
U0VOU09S 99330
IFJ5dQ== 99331
TGF1Z2hz 99332
X05hdGl2ZQ== 99333
L3Bn 99334
eXN0cw== 99335
IHBob3RvYw== 99336
566A 99337
YWRvcHQ= 99338
LnNwZWNpZXM= 99339
Y29uY2lsaWF0aW9u 99340
QWRqdXN0ZWQ= 99341
LkZpcmViYXNlQXV0aA== 99342
dXR0bGU= 99343
b3JkaW5hdGlvbg== 99344
IG11bmNo 99345
IFN0YWtl 99346
LnBpbmc= 99347
YW5rZXI= 99348
KFFTdHJpbmdMaXRlcmFs 99349
IHN1YnNjcmlwdA== 99350
ICAJCg== 99351
IE1DQw== 99352
X0NtZA== 99353
c2V4eQ== 99354
aW91 99355
IE1BTlk= 99356
IG5hbm55 99357
VFJBSU4= 99358
IGZsb3VyaXNoaW5n 99359
IFdhdGNoZXM= 99360
IFFNYXA= 99361
IEZlcm0= 99362
IHdhc20= 99363
IEFiZWQ= 99364
X1VE 99365
IEdsYXNzZXM= 99366
K3Y= 99367
QXR0ZW5k 99368
LkNoYWlu 99369
IGRlY2VuY3k= 99370
IFN1cHBsZW1lbnRhcnk= 99371
aHVudGVy 99372
LXR4dA== 99373
ICJ9IjsK 99374
LnNldFdpbmRvd1RpdGxl 99375
KCI8Pw== 99376
IG51bWJlcldpdGhJbnQ= 99377
IGFmYXI= 99378
56e75Yiw 99379
cml0dGU= 99380
L2xpc3Rz 99381
KeKAnQ== 99382
IGRpdmVyc2Fz 99383
IGVtYmVy 99384
LlJlYWN0Tm9kZQ== 99385
IGthbmc= 99386
IFN0YW1mb3Jk 99387
W2F0 99388
LmNsb3NlUGF0aA== 99389
IGNvbnRyYWNlcHRpdmU= 99390
KGxvY2F0aW9ucw== 99391
IGF2YW56 99392
IENvbnRhaW5lcnM= 99393
IFNjaG9sYXJz 99394
LmFjY3VyYWN5 99395
INCy0YvQv9C+0LvQvQ== 99396
5ZWP 99397
PSItLQ== 99398
IFdyZXN0bGU= 99399
IEd1YW50YW5hbW8= 99400
IG55bXBo 99401
KGd1ZXNz 99402
LnNldENvbHVtbg== 99403
X3RF 99404
LmNvbnRlbnRNb2Rl 99405
IGludmFsaWRhdGVk 99406
IFNob290ZXI= 99407
IE1hdGVy 99408
LlN1Ym1pdA== 99409
IGFuZ2xlZA== 99410
bmF2YmFyRHJvcGRvd24= 99411
QW8= 99412
IOa1 99413
0LjRgdC6 99414
IFNDQU4= 99415
CWNt 99416
IE1hcmt0 99417
dHJ1Y2s= 99418
OycK 99419
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCg== 99420
IGdoZXR0bw== 99421
IGJ1aXRlbg== 99422
IENsb3du 99423
OiE= 99424
IGNoaW1wYW4= 99425
J2ZpZWxk 99426
YW1tbw== 99427
IERlcGVuZA== 99428
KX0p 99429
KEZMQUdT 99430
IFJDQQ== 99431
IENob2ly 99432
TG9naW5QYWdl 99433
IEdvcmQ= 99434
Q29tcGFjdA== 99435
LXBvY2tldA== 99436
IGNvbnN1bHRhcg== 99437
IEludGVyY2VwdA== 99438
xZ90aXI= 99439
dWV0eXBl 99440
b25lbnRz 99441
IHN0YXJ0UG9zaXRpb24= 99442
IHBvc2l4 99443
IFdvaG51bmc= 99444
X0VYUFJFU1NJT04= 99445
IExvZ2luQWN0aXZpdHk= 99446
KG9wY29kZQ== 99447
IFRhbmdv 99448
IE51bWJlck9m 99449
Lm92ZXJmbG93 99450
IFdDUw== 99451
IE9jY3VwYXRpb24= 99452
X2Nn 99453
LlRvcGlj 99454
IENhcmVlcnM= 99455
QVJBVElPTg== 99456
LmdldExpbmU= 99457
IOyihQ== 99458
IE5hY2h0 99459
IHRvSXRlbQ== 99460
aW5jbHVzaXZl 99461
YXZpZXN0 99462
LWFwcG9pbnRlZA== 99463
KGludGVybmFs 99464
Q09OVEVYVA== 99465
KGRpZ2l0cw== 99466
PXsiLw== 99467
IHBsYXl3cmlnaHQ= 99468
IGRlYWRsaWVzdA== 99469
bGVhZHM= 99470
LlBVVA== 99471
ICp9Cgo= 99472
IFBhY3Q= 99473
IERpc2NvdW50cw== 99474
TG9jYWxpemVkTWVzc2FnZQ== 99475
IE3DpG5uZXI= 99476
Xz4= 99477
IG1hc2NhcmE= 99478
KFByb2ZpbGU= 99479
5Yqf6IO9 99480
aW1pdMOp 99481
IHdpbGRmaXJlcw== 99482
LVJPTQ== 99483
LmlzT24= 99484
KGdyb3VwSWQ= 99485
UmVwYWly 99486
YWNjdW11bGF0ZQ== 99487
IDwiLA== 99488
IGhhbmR3cml0dGVu 99489
IGFjaGV0ZXI= 99490
IE1HTQ== 99491
IElybWE= 99492
LT57Xw== 99493
Z2Vl 99494
Y3JpbWluYWw= 99495
IOiLpeimgQ== 99496
IG1vbWVudGFyaWx5 99497
IikhPQ== 99498
X2xpdA== 99499
IGV4cGlyZXNJbg== 99500
LiIpLg== 99501
6ZW/5bqm 99502
IGZyw6Zra2U= 99503
dmxj 99504
IG9yYnM= 99505
KSwk 99506
IHZlbnR1cmVk 99507
Lz5c 99508
Y2hhcm0= 99509
TnVpdGth 99510
ZWxkaWc= 99511
YXRvbmlu 99512
V2l0bmVzcw== 99513
LWxhdA== 99514
IHNldEhpZGRlbg== 99515
IHJlbGljcw== 99516
IGNvbnN1bGF0ZQ== 99517
LklHTk9SRQ== 99518
IkFmdGVy 99519
IHNldEFkZHJlc3M= 99520
IGJlc3RlaHQ= 99521
ICcnKQoK 99522
LnhheGlz 99523
IHNlcsOjbw== 99524
IG1pc2xlZA== 99525
X1VOSUZPUk0= 99526
IFZJQQ== 99527
aW5jcg== 99528
IHplbml0aA== 99529
IHZpc2Nvc2l0eQ== 99530
IHRoaW5seQ== 99531
LmdldFNoYXJlZFByZWZlcmVuY2Vz 99532
LkVycm9yQ29kZQ== 99533
IiksIg== 99534
IE1pbGxpb25lbg== 99535
IC8+KQo= 99536
U2Nyb2xsSW5kaWNhdG9y 99537
LXNlZWtpbmc= 99538
IFBPTElUSUNP 99539
YXNjYQ== 99540
X3Js 99541
TmF2aWc= 99542
KGZ1bGxmaWxl 99543
IHNvbGl0dWRl 99544
IGp1dmVu 99545
IGhhdWxpbmc= 99546
IE1hY3Jvcw== 99547
IEdyeQ== 99548
IGV4ZXJjaXRhdGlvbg== 99549
IEFUVEFDSw== 99550
VGlja0NvdW50 99551
IHJpdGVz 99552
IGRvZQ== 99553
UGFydGljbGVTeXN0ZW0= 99554
IHNsdQ== 99555
V2luZG93VGV4dA== 99556
IENsYXNzTmFtZQ== 99557
IHNsYW5kZXI= 99558
CVBvcnQ= 99559
am9uZw== 99560
P2E= 99561
LkRpYWw= 99562
4oCUYXQ= 99563
JG9ialBIUEV4Y2Vs 99564
IHNvYXI= 99565
RU5O 99566
YXBwZWFyZWQ= 99567
IHF1b3RpZA== 99568
ZW1hY2hpbmU= 99569
IG5pcA== 99570
IG1pY3JvdGltZQ== 99571
IEFsbWE= 99572
OyE= 99573
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 99574
IFBhc3NhZ2U= 99575
IGR1bXBzdGVycw== 99576
IEV4Y2x1ZGU= 99577
IHN1Z2dlc3RpdmU= 99578
IENpcmN1bGFyUHJvZ3Jlc3NJbmRpY2F0b3I= 99579
X2Nscg== 99580
QXJyYXlUeXBl 99581
SUxMQQ== 99582
RWxhcHNlZFRpbWU= 99583
RHJpdmVu 99584
IHJlc291cmNlTmFtZQ== 99585
IEdhcnJpc29u 99586
c2VyaXI= 99587
LWFoZWFk 99588
IHBpbm5hY2xl 99589
IEVzcHJlc3Nv 99590
U3BhcnNl 99591
IGFzc2F5cw== 99592
IEdpcmxmcmllbmQ= 99593
aW1pZA== 99594
XT0nXA== 99595
T05HTE9ORw== 99596
IHBvcnRyYXlpbmc= 99597
TGFuZQ== 99598
IGLDunNxdWVkYQ== 99599
IHJlaW5mb3JjZW1lbnRz 99600
IFNwcmVhZHNoZWV0 99601
IEFycmF5Q29sbGVjdGlvbg== 99602
LGFycg== 99603
bGlnaHRib3g= 99604
aWNhbmE= 99605
PCI= 99606
YnVpbGRlcnM= 99607
S2lk 99608
IE1hdFNuYWNrQmFy 99609
RVhQUg== 99610
b2RjYXN0 99611
IEZvdW5kYXRpb25z 99612
IGluZHM= 99613
PSckew== 99614
Rml6eg== 99615
LWZ1bmN0aW9uYWw= 99616
KHdvcmtzcGFjZQ== 99617
IHN0ZW1tZWQ= 99618
X3BhdGNoZXM= 99619
IEphcnZpcw== 99620
UkVBRElORw== 99621
IGRpc3Jlc3BlY3RmdWw= 99622
IFFEb20= 99623
ICR7Cg== 99624
ZXN0YXR1cw== 99625
UmVhY2hlZA== 99626
IS4KCg== 99627
SUxU 99628
IE5ERUJVRw== 99629
IENvdXJhZ2U= 99630
YmlydGhkYXRl 99631
IFRpbmc= 99632
IHV0aWxpemFkbw== 99633
w6FuY2hleg== 99634
T3V0ZG9vcg== 99635
IGhhbmRndW5z 99636
UmVmQ291bnQ= 99637
yZk= 99638
cm9tbw== 99639
IHR0cw== 99640
LlNoZQ== 99641
IFBhbmU= 99642
44CRLOOAkA== 99643
IElPQ1RM 99644
L2JsYWNr 99645
aW5zY3JpcHRpb24= 99646
IGJpb3BzeQ== 99647
IFRpbWVJbnRlcnZhbA== 99648
LlRlc3RDaGVjaw== 99649
IEdVSVN0eWxl 99650
IENhcGFiaWxpdHk= 99651
IEJlaXRyYWc= 99652
ZG9ubmVlcw== 99653
VHJlYXRtZW50 99654
LmJhY2t1cA== 99655
IHNpZ25pbmdz 99656
IEJvY2E= 99657
ZHJt 99658
Lk1BSU4= 99659
IGdvZWRl 99660
IE1hcmt1cA== 99661
R1JFRQ== 99662
IEJhc2VTZXJ2aWNl 99663
LkNyZWF0b3I= 99664
IGphaWxz 99665
IEthaG4= 99666
SXBBZGRyZXNz 99667
QUNISQ== 99668
IGluaGliaXRlZA== 99669
IEAkXw== 99670
IEFzc2Fzcw== 99671
IGVudmlhZG8= 99672
SGVyb2Vz 99673
0J/QtdGA 99674
IE1hdmVu 99675
Lmxz 99676
IGl2ZQ== 99677
fFJG 99678
IHJlc2l6ZU1vZGU= 99679
IHJ1bXBl 99680
X2F0dGFjaG1lbnRz 99681
VFU= 99682
IHRhY3RpbGU= 99683
QXR0ZW1wdGluZw== 99684
IHJvYmlu 99685
eWF3 99686
IG1lcmNlbmFyaWVz 99687
IEhhYml0YXQ= 99688
ZW5kZGF0ZQ== 99689
IG94eQ== 99690
CVJhbmRvbQ== 99691
b2hvbg== 99692
SXNOdWxs 99693
IFZhbGlkYXRpb25SZXN1bHQ= 99694
44Oa 99695
dW1iZWQ= 99696
cHB2 99697
IGFycA== 99698
aWNoaWNr 99699
X3Jubg== 99700
IFRGVA== 99701
VGV4SW1hZ2U= 99702
Ik9u 99703
IFNhbXBsZXI= 99704
dG9wbA== 99705
IGphbmU= 99706
eWxpbmc= 99707
IFVOSUNPREU= 99708
VGFiSW5kZXg= 99709
PHsK 99710
c3VzcGVuZA== 99711
dXZpYW4= 99712
LGFwcGxpY2F0aW9u 99713
0L7Qu9C40YfQtdGB0YLQstC+ 99714
eWF0 99715
ZXppZXI= 99716
IENIVU5L 99717
IEFkbGVy 99718
L0FkZA== 99719
IEtleVZhbHVl 99720
IHNwb3PDs2I= 99721
U2FtcGxpbmc= 99722
Y2hlcnM= 99723
X0FNRA== 99724
UnU= 99725
Lk11c3RDb21waWxl 99726
TmF0aW9u 99727
QXNzb2M= 99728
TWFuYWdpbmc= 99729
IEVuZ2w= 99730
X0dC 99731
IHN1Y2NpbmN0 99732
IGRpc2xpa2Vk 99733
IElrZQ== 99734
QnVsbGV0aW4= 99735
X0FSQ0hJVkU= 99736
UHJvcG9zYWw= 99737
IGpvZ2dpbmc= 99738
LkNSRUFURUQ= 99739
IGNob2w= 99740
6KOF 99741
jKg= 99742
LXB1c2g= 99743
IHJlc2VydmE= 99744
Y29yZXY= 99745
w6h0cmU= 99746
VEhS 99747
IGluY29tcGV0ZW5jZQ== 99748
IGNoYXJpc21h 99749
5oSf 99750
ICI9PQ== 99751
QlRO 99752
IExvY2F0b3I= 99753
aXZldA== 99754
KCcuJykK 99755
IGZvckluZGV4UGF0aA== 99756
w7RtZQ== 99757
IGNhcGFjaXQ= 99758
d2F0ZXJz 99759
IFdST05H 99760
aG9h 99761
IE1JUFM= 99762
IGVtaXNz 99763
IEphY3F1ZWxpbmU= 99764
KGNtcA== 99765
IGVlbnM= 99766
TGVv 99767
LnRpbWluZw== 99768
Q0xVU0lPTg== 99769
ICgiLQ== 99770
5ZOI 99771
LmtvZGU= 99772
IFVuZGVydA== 99773
IGJld2lsZA== 99774
IEVzc2Vu 99775
Lmhk 99776
IHJlbmVnb3Q= 99777
IG1vd2Vy 99778
IGxzcA== 99779
IHBlbmNoYW50 99780
IG1hbm9l 99781
IGFnbGk= 99782
IHJlY2Fs 99783
IE9QRVJBVElPTg== 99784
KF4pKA== 99785
IM69 99786
IFNjb3BlZA== 99787
IEAiCg== 99788
PWxhYmVs 99789
W2xvYw== 99790
SW50bA== 99791
IE56 99792
dGFibGV0 99793
LkNvbHVtbk5hbWU= 99794
IHNjcmVlblNpemU= 99795
REJ1cw== 99796
Y29va2Vk 99797
LXJlZ2lzdHJhdGlvbg== 99798
4oCcT25l 99799
LW5vbg== 99800
IHdpxJlj 99801
IGNvc3Rh 99802
LmFkZFRhYg== 99803
LmNvbmRpdGlvbnM= 99804
IEhlc3M= 99805
TUVNT1JZ 99806
IEF2YWxhbmNoZQ== 99807
KCl9fQo= 99808
IHRyaXBsZXQ= 99809
IGxhYnlyaW50aA== 99810
IE5vZGVMaXN0 99811
IE5ZVA== 99812
IHllbmk= 99813
ZGZm 99814
Lkh0bWxDb250cm9scw== 99815
QVZJUw== 99816
L01hdGg= 99817
IG1lbWNtcA== 99818
2KfYoQ== 99819
0L7RgdGM 99820
Y3JhcA== 99821
KHBhZ2Vz 99822
IGx4bWw= 99823
IFFEYXRlVGltZQ== 99824
X3RjYg== 99825
IG9wZW5pZA== 99826
IHN5bmFwdGlj 99827
IE1ETUE= 99828
KHNsdWc= 99829
aWdtYXRpYw== 99830
ZW5vcg== 99831
IGNyYW1wZWQ= 99832
R09Q 99833
rZA= 99834
LmlzRmlsZQ== 99835
IERpZmZlcmVudGlhbA== 99836
ID0iIjsK 99837
CQkJICAgIAk= 99838
IENvb2tl 99839
CVVGVU5DVElPTg== 99840
IHBlcnNldmVyYW5jZQ== 99841
UmVsYXRpdmVMYXlvdXQ= 99842
SU1QT1JUQU5U 99843
IGV4b24= 99844
INC+0L0= 99845
aWJhc2U= 99846
KENPTlQ= 99847
bm92YXRpb24= 99848
5L2V 99849
W3N1Yg== 99850
QWRtaW5Db250cm9sbGVy 99851
SFRUUEhlYWRlcg== 99852
Y3JlYXI= 99853
IE5JUg== 99854
IERyb3BEb3duTGlzdA== 99855
IHZhbGlkZQ== 99856
IGRlaHlkcmF0aW9u 99857
Lidd 99858
KFdJTg== 99859
IC4uLlw= 99860
IHBob3Rvc2hvcA== 99861
CUluaXQ= 99862
X2NvdQ== 99863
IHRpbWVab25l 99864
ZGFyd2lu 99865
cm9tYXRpYw== 99866
TmF2aWdhdGlvbkl0ZW1TZWxlY3RlZExpc3RlbmVy 99867
YnJhdGVz 99868
XS0tOwo= 99869
IHRyYWdlZGllcw== 99870
IFBlZGlhdHJpY3M= 99871
U01BUlQ= 99872
LUFQSQ== 99873
IE1lc3NhZ2VMb29rdXA= 99874
CXZv 99875
IHByZWp1ZGljZXM= 99876
IG1B 99877
VXBz 99878
IE1JU1NJTkc= 99879
CWFk 99880
Q3JlYW0= 99881
IFRi 99882
IE1vbmE= 99883
X2dob3N0 99884
CXR5cGVz 99885
RW1i 99886
IERvY3VtZW50YXJ5 99887
Jyk7CgoKCg== 99888
IGx1cA== 99889
X1JlZmVyZW5jZQ== 99890
IEJBVENI 99891
IGludGVydHdpbmVk 99892
PENlbGw= 99893
IENhYnI= 99894
bmF0aW9u 99895
IGlzQ29ubmVjdGVk 99896
LnJlbW92ZUxpc3RlbmVy 99897
IGNvbmc= 99898
X3Rp 99899
IFNpbGljb25l 99900
IOqysOqzvA== 99901
IFdBTg== 99902
IEdpYnJhbHRhcg== 99903
L3Jlc3BvbnNl 99904
CXBlcnNvbg== 99905
Y2hhbnRz 99906
VklQ 99907
ZW1lcmdlbmN5 99908
UGl4ZWxGb3JtYXQ= 99909
LUFt 99910
IHNvdXRod2VzdGVybg== 99911
X3BsbA== 99912
aWZlcnM= 99913
X09OQ0U= 99914
IEZheWV0dGU= 99915
Lm5jYmk= 99916
X1BhbmVs 99917
LlF1YWw= 99918
IHBvbHlz 99919
IGNyZWF0ZVN0YWNrTmF2aWdhdG9y 99920
77+9dA== 99921
IGxheW9mZnM= 99922
IEJsYW5jbw== 99923
RmVhdA== 99924
IFZpbWVv 99925
X2NoaQ== 99926
X2xpZmV0aW1l 99927
UE9JTlRT 99928
LHByaXZhdGU= 99929
IHVuYmVhcmFibGU= 99930
cHJpbnRpbmc= 99931
IGNnaQ== 99932
LkJBQ0s= 99933
IGludGVybnM= 99934
IE5ld2x5 99935
aW5mZWxk 99936
KElC 99937
IEthdGE= 99938
IERlZmVuZGFudHM= 99939
VGhy 99940
6aKE 99941
X1ZG 99942
RkZGRkZGRkY= 99943
IGRhdmlkamw= 99944
IGJpdHRlcmx5 99945
U3VnZ2VzdGlvbnM= 99946
LnNldENhbmNlbGFibGU= 99947
RklOQUw= 99948
YXNvbnM= 99949
X3J3bG9jaw== 99950
X1dSQVBQRVI= 99951
IGhhcHBpZXN0 99952
KHJvd0luZGV4 99953
w7NzaXRv 99954
VE9UWVBF 99955
QXV0b21hdGlvbg== 99956
TG9nRmlsZQ== 99957
IGNvbnNvbGF0aW9u 99958
44OA 99959
IHTDqm0= 99960
IHByZXI= 99961
cmd5eg== 99962
IEdlZw== 99963
CWR0bw== 99964
LmRlZmF1bHRWYWx1ZQ== 99965
IEthbWk= 99966
IEFTRQ== 99967
b3B0aW1pemVk 99968
IO2PrA== 99969
IG9yaWdpbmF0ZXM= 99970
ZXJyTXNn 99971
IGVzcGHDp28= 99972
KFNZUw== 99973
IE1jQg== 99974
ZGFuY2U= 99975
X2RldGVjdGVk 99976
IGZyw7w= 99977
CQkgICAgCQk= 99978
PERhdGU= 99979
KGNvbWI= 99980
IERlY2lkZQ== 99981
XEZpZWxk 99982
IFByb3Bvc2Vk 99983
Umli 99984
IGRpc2xpa2Vz 99985
IFdpZW4= 99986
CURvY3VtZW50 99987
IHRyYWY= 99988
IHN0b3JpYQ== 99989
IFRlbGxz 99990
Jyk9PQ== 99991
Q3Jp 99992
KFZBTFVF 99993
IEJ1cm5ldHQ= 99994
LHZvaWQ= 99995
IGRhbmg= 99996
IGNjcA== 99997
QmxvY2tjaGFpbg== 99998
OiItImAK 99999
SUNsaWVudA== 100000
SVNPREU= 100001
SXNzdWVy 100002
KX0NCg== 100003
LGJ1dA== 100004
IFVwaA== 100005
KFN1Yg== 100006
IHTDqWzDqXBob25l 100007
IG9uRGF0YUNoYW5nZQ== 100008
IG1hcnNoYWxsZXI= 100009
LWFuYWx5dGljcw== 100010
LGNvbnRlbnQ= 100011
IGRlYmFjbGU= 100012
X1ZhbHVlQ2hhbmdlZA== 100013
IGZhdW5h 100014
ICM9Pg== 100015
IGZveWVy 100016
J3V0aWxpc2F0aW9u 100017
IE3DvGxsZXI= 100018
IEZldGlzaA== 100019
IGRlZmF1bHRNYW5hZ2Vy 100020
IGJhY2t0cmFjaw== 100021
QmFo 100022
RXhwbGljaXQ= 100023
X0FTQ0lJ 100024
IG1BY3Rpdml0eQ== 100025
KE1zZw== 100026
IOqyjA== 100027
IFRFUk1T 100028
IEFuZ2ll 100029
SFNW 100030
IE1vc3F1ZQ== 100031
Lk5hbWVz 100032
7Yq8 100033
cmVzdGU= 100034
X3Bhcm1z 100035
IGdhcGluZw== 100036
IGNyb3BwaW5n 100037
RGF0YUZyYW1l 100038
IHJlc3BvbnNpdmVuZXNz 100039
X3VuZG8= 100040
X3RyYW4= 100041
LnRlcm1pbmF0ZQ== 100042
IGl0YWxpYW5l 100043
IHdhbGt0aHJvdWdo 100044
IGF0dHJhY3RpdmVuZXNz 100045
0LTQtQ== 100046
X1NUUw== 100047
X2xlYXJu 100048
IGNob2NvbGF0ZXM= 100049
aWVyYXJjaGljYWw= 100050
LXRoaW5raW5n 100051
ICkpKQ== 100052
aXNobWVudHM= 100053
LkxvZ2Y= 100054
IFRNWg== 100055
IENhbmFyeQ== 100056
Zm9pbA== 100057
IFZhY2NpbmU= 100058
LnZ4 100059
IFN1cnJvdW5k 100060
SW50ZXJtZWRpYXRl 100061
IGlvdg== 100062
dmFpcw== 100063
JzsiOwo= 100064
772eCgo= 100065
6YCB5paZ 100066
4oCmaXQ= 100067
U2VhdHM= 100068
Q2xhcg== 100069
V2Fycw== 100070
IEh1dGNoaW5zb24= 100071
IEhhc2Fu 100072
IScpCgo= 100073
IFJpY2hpZQ== 100074
Y2hlaWRlbg== 100075
KCQoJw== 100076
WW9yaw== 100077
IGxpZHM= 100078
IGFscGhhbnVtZXJpYw== 100079
IEdsb2Nr 100080
LnNoYXBlcw== 100081
IHNwYXJraW5n 100082
X2Vwc2lsb24= 100083
dXBsaWNhdGVk 100084
LmRpcnR5 100085
XSk9PQ== 100086
IOychOy5mA== 100087
IHNjbg== 100088
IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 100089
X1BSRVZJRVc= 100090
X0hD 100091
aWVsZGluZw== 100092
ZmdldHM= 100093
IEFkZGlzb24= 100094
IHByb2R1Y3RTZXJ2aWNl 100095
LWZpZ3VyZQ== 100096
KHJldHZhbA== 100097
emFubw== 100098
IGF1dG9i 100099
CXNk 100100
X251bWVy 100101
IFNldExhc3RFcnJvcg== 100102
IEZpb3I= 100103
aWZpY2FuY2U= 100104
VW50aXRsZWQ= 100105
IGluZmllbGQ= 100106
IHt9KSk7Cg== 100107
IHNwYWM= 100108
IHJvb2tpZXM= 100109
KGRlc2NyaWJpbmc= 100110
bmdlbg== 100111
4K6/4K4= 100112
LnJkZg== 100113
Lk11dGV4 100114
IGtuZWVsaW5n 100115
IFFF 100116
c2V0TWF4 100117
UmVhZFN0cmVhbQ== 100118
IHZlbnRhcw== 100119
c3V0 100120
Y21wZXE= 100121
LldyaXRlQWxsVGV4dA== 100122
IEV4cGVyaWVuY2Vk 100123
JF9f 100124
IGthdW0= 100125
IExJUw== 100126
IGRvY3VtZW50b3M= 100127
X0hFQUxUSA== 100128
aWNvbnRhaW5z 100129
IGFydGlzYW5z 100130
T1dORVI= 100131
IGJsaW5rZWQ= 100132
Z2V0RGlzcGxheQ== 100133
IHRvZW4= 100134
IHJvd051bQ== 100135
IGF2cmls 100136
IGludmlz 100137
IEtlYXI= 100138
dG9CZUluVGhlRG9jdW1lbnQ= 100139
YXB1cg== 100140
IHJhY2tlZA== 100141
IE1jTWFzdGVy 100142
X0FUVFJJQg== 100143
SGF6 100144
IGZhY3R1cmE= 100145
L3Rz 100146
INGA0LDQt9C80LXRgA== 100147
IHpm 100148
IHNob3J0ZmFsbA== 100149
LmZhc3Rh 100150
IENPTlNUQU5U 100151
Lm1hbmFnZWQ= 100152
Z2Vtcw== 100153
U2hhcmVkUG9pbnRlcg== 100154
IGJsdXJyeQ== 100155
YnJpZ2h0bmVzcw== 100156
KGNvbXBvbmVudHM= 100157
IC4uLiIKCg== 100158
U0VMTA== 100159
IElsbHVzdHJhdG9y 100160
LmdldENoYW5uZWw= 100161
IHRyb3V2w6k= 100162
eXN0ZXJz 100163
IHZvaXM= 100164
IExpbmRlbg== 100165
IGVtb2ppcw== 100166
IGJyYXds 100167
IE1TUg== 100168
IEVsbw== 100169
IENyb2F0aWFu 100170
UG9wdXBNZW51 100171
TGV3aXM= 100172
LkpXVA== 100173
IGFzdG9uaXNoZWQ= 100174
QnVzaA== 100175
KGl0ZW1JZA== 100176
IGRldGFjaG1lbnQ= 100177
IEVuY29yZQ== 100178
5bCU 100179
IHJla2w= 100180
IGNyYW0= 100181
KSQv 100182
LmdldEhvc3Q= 100183
X3JlY29tbWVuZA== 100184
LUhU 100185
X2NhbGlicmF0aW9u 100186
QXV0aGVudGljYXRl 100187
LmZpcmViYXNlYXBw 100188
VU5JWA== 100189
CUNhbWVyYQ== 100190
IEhFQVA= 100191
SWRlYWw= 100192
Lm9mZmljZQ== 100193
IGdvb2Z5 100194
KFN5bWJvbA== 100195
IGpvdWVy 100196
X3BhcnRpdGlvbnM= 100197
IHJhcGlkZW1lbnQ= 100198
IEdOVU5FVA== 100199
aWRVc2Vy 100200
IHN1cGVydmlzZQ== 100201
KENvbnRhY3Q= 100202
QVdO 100203
44GY 100204
IG5hYW0= 100205
IGF1c3Q= 100206
5Zyo57q/ 100207
X3NvZnRtYXg= 100208
QWxsb3dBbm9ueW1vdXM= 100209
YW1tYWJsZQ== 100210
Uk9VVEU= 100211
KkQ= 100212
IGFkZW4= 100213
IENyaXN0aW5h 100214
IENyaXN0aWFubw== 100215
IGJsb29kc3RyZWFt 100216
c3ViY2xhc3M= 100217
X3BlcnNvbmE= 100218
Q0hJTEQ= 100219
LWtub3c= 100220
IG5hdmlnYXRpb25PcHRpb25z 100221
IFp1a3VuZnQ= 100222
IFBpeGFy 100223
VHlsZXI= 100224
IHVuZGVyd29ybGQ= 100225
IHNpbmNlcml0eQ== 100226
IGRpc3BlbnNlcg== 100227
IGt0ZXI= 100228
aWRkZXJz 100229
LmFkZE5vZGU= 100230
LWNoZWNrZWQ= 100231
IGtleXN0 100232
IFdUTw== 100233
LnNpZ25hbHM= 100234
IGFkdmVudHVyZXI= 100235
IFBhbmc= 100236
XFI= 100237
PXBvcw== 100238
IGRpc3BlbnNhcmllcw== 100239
IENsb3NldA== 100240
KCJ7XCI= 100241
aWRlb24= 100242
IG7DqWNlc3NhaXJl 100243
KCkiCg== 100244
X1JFQ0VJVkVE 100245
IHLDqXN1bHRhdHM= 100246
IG1vZGVu 100247
IEljZWxhbmRpYw== 100248
O2Q= 100249
LmFsbG93ZWQ= 100250
KG5ld1VzZXI= 100251
IG1lcmNpbGVzcw== 100252
LldhaXRGb3I= 100253
IGRheWNhcmU= 100254
IENvbnZleW9y 100255
================================================
FILE: src/backend/bisheng/api/services/utils.py
================================================
from bisheng.template.field.base import TemplateField
from bisheng.template.template.base import Template
from pydantic import BaseModel
from langchain_core.language_models import BaseLanguageModel
def set_flow_knowledge_id(graph_data: dict, knowledge_id: int):
for node in graph_data['nodes']:
if 'VectorStore' in node['data']['node']['base_classes']:
if 'collection_name' in node['data'].get('node').get('template').keys():
node['data']['node']['template']['collection_name']['collection_id'] = knowledge_id
if 'index_name' in node['data'].get('node').get('template').keys():
node['data']['node']['template']['index_name']['collection_id'] = knowledge_id
return graph_data
def replace_flow_llm(graph_data: dict, llm: BaseLanguageModel, llm_param: dict):
# Ganticlass, Gantitemplate, Others do not move.
for node in graph_data['nodes']:
if 'BaseLanguageModel' in node['data']['node']['base_classes']:
node['data']['type'] = type(llm).__name__
node['data']['node']['template'] = trans_obj_to_json(llm, llm_param)
return graph_data
def trans_obj_to_json(obj: BaseModel, llm_param: dict):
# template Build.
template = []
field_json = obj.__dict__
for k, v in field_json.items():
if k in llm_param:
template.append(
TemplateField(field_type=type(v).__name__, name=k,
value=llm_param.get(k)).to_dict())
return Template(type_name=type(obj).__name__, fields=template).to_dict()
================================================
FILE: src/backend/bisheng/api/services/workflow.py
================================================
from datetime import datetime
from typing import Dict, Optional
from fastapi.encoders import jsonable_encoder
from langchain.memory import ConversationBufferWindowMemory
from bisheng.api.services.base import BaseService
from bisheng.api.v1.schema.workflow import WorkflowEvent, WorkflowEventType, WorkflowInputSchema, WorkflowInputItem, \
WorkflowOutputSchema
from bisheng.api.v1.schemas import ChatResponse
from bisheng.chat.utils import SourceType
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.flow import WorkFlowInitError
from bisheng.common.errcode.http_error import NotFoundError, UnAuthorizedError
from bisheng.common.services import telemetry_service
from bisheng.core.logger import trace_id_var
from bisheng.database.models.flow import FlowDao, FlowStatus, FlowType, Flow
from bisheng.database.models.flow import UserLinkType
from bisheng.database.models.flow_version import FlowVersionDao
from bisheng.database.models.group_resource import GroupResourceDao, ResourceTypeEnum
from bisheng.database.models.role_access import AccessType, RoleAccessDao
from bisheng.database.models.tag import TagDao
from bisheng.database.models.user_link import UserLinkDao
from bisheng.user.domain.models.user import UserDao
from bisheng.user.domain.models.user_role import UserRoleDao
from bisheng.utils import generate_uuid
from bisheng.workflow.callback.base_callback import BaseCallback
from bisheng.workflow.common.node import BaseNodeData, NodeType
from bisheng.workflow.graph.graph_state import GraphState
from bisheng.workflow.graph.workflow import Workflow
from bisheng.workflow.nodes.node_manage import NodeFactory
class WorkFlowService(BaseService):
@classmethod
def add_extra_field(cls, user: UserPayload, data: list[dict], managed: bool = False) -> list[dict]:
""" Add some extra fields for app list """
# ApplicationsIDVertical
resource_ids = []
# Skill Creation User'sIDVertical
user_ids = []
for one in data:
one['id'] = one['id']
resource_ids.append(one['id'])
user_ids.append(one['user_id'])
# Get user information in the list
user_infos = UserDao.get_user_by_ids(user_ids)
user_dict = {one.user_id: one.user_name for one in user_infos}
# Get version information in the list
version_infos = FlowVersionDao.get_list_by_flow_ids(resource_ids)
flow_versions = {}
for one in version_infos:
if one.flow_id not in flow_versions:
flow_versions[one.flow_id] = []
flow_versions[one.flow_id].append(jsonable_encoder(one))
resource_groups = GroupResourceDao.get_resources_group(None, resource_ids)
resource_group_dict = {}
for one in resource_groups:
if one.third_id not in resource_group_dict:
resource_group_dict[one.third_id] = []
resource_group_dict[one.third_id].append(one.group_id)
resource_tag_dict = TagDao.get_tags_by_resource(None, resource_ids)
# Add additional information
for one in data:
access_type = AccessType.FLOW_WRITE
if one['flow_type'] == FlowType.WORKFLOW.value:
access_type = AccessType.WORKFLOW_WRITE
elif one['flow_type'] == FlowType.ASSISTANT.value:
access_type = AccessType.ASSISTANT_WRITE
one['user_name'] = user_dict.get(one['user_id'], one['user_id'])
one['write'] = True if managed else user.access_check(one['user_id'], one['id'], access_type)
one['version_list'] = flow_versions.get(one['id'], [])
one['group_ids'] = resource_group_dict.get(one['id'], [])
one['tags'] = resource_tag_dict.get(one['id'], [])
one['logo'] = cls.get_logo_share_link(one['logo'])
return data
@classmethod
def get_all_flows(cls, user: UserPayload, name: str, status: int, tag_id: Optional[int], flow_type: Optional[int],
page: int = 1, page_size: int = 10, managed: bool = False) -> (list[dict], int):
"""
Get all the skills
"""
# SetujutagDapatkanidVertical
flow_ids = []
if tag_id:
ret = TagDao.get_resources_by_tags_batch([tag_id], [ResourceTypeEnum.FLOW, ResourceTypeEnum.WORK_FLOW,
ResourceTypeEnum.ASSISTANT])
if not ret:
return [], 0
flow_ids = [one.resource_id for one in ret]
# Get a list of skills visible to the user
if user.is_admin():
data, total = FlowDao.get_all_apps(name, status, flow_ids, flow_type, None, None, None, page, page_size)
else:
access_list = [AccessType.FLOW, AccessType.WORKFLOW, AccessType.ASSISTANT_READ]
if managed:
access_list = [AccessType.FLOW_WRITE, AccessType.WORKFLOW_WRITE, AccessType.ASSISTANT_WRITE]
flow_id_extra = user.get_user_access_resource_ids(access_list)
data, total = FlowDao.get_all_apps(name, status, flow_ids, flow_type, user.user_id, flow_id_extra, None,
page, page_size)
data = cls.add_extra_field(user, data, managed)
return data, total
@classmethod
def run_once(cls, login_user: UserPayload, node_input: Dict[str, any], node_data: Dict[any, any], workflow_id: str):
workflow_info = FlowDao.get_flow_by_id(workflow_id)
if not workflow_info:
raise NotFoundError()
node_data = BaseNodeData(**node_data.get('data', {}))
base_callback = BaseCallback()
graph_state = GraphState()
graph_state.history_memory = ConversationBufferWindowMemory(k=10)
node = NodeFactory.instance_node(node_type=node_data.type,
node_data=node_data,
user_id=login_user.user_id,
workflow_id=workflow_info.id,
workflow_name=workflow_info.name,
graph_state=graph_state,
target_edges=None,
max_steps=233,
callback=base_callback)
if node_data.type == NodeType.CODE.value:
node.handle_input({
'code_input': [
{
'key': k,
'value': v,
'type': 'input'
} for k, v in node_input.items()
]
})
elif node_data.type == NodeType.TOOL.value:
user_input = {}
for k, v in node_input.items():
user_input[k] = v
node.handle_input(user_input)
else:
for key, val in node_input.items():
graph_state.set_variable_by_str(key, val)
exec_id = generate_uuid()
result = node._run(exec_id)
log_data = node.parse_log(exec_id, result)
res = []
for one_batch in log_data:
ret = []
for one in one_batch:
if node_data.type == NodeType.QA_RETRIEVER.value and one['key'] != 'retrieved_result':
continue
if node_data.type == NodeType.RAG.value and one['key'] != 'retrieved_result' and one[
'type'] != 'variable':
continue
if node_data.type == NodeType.LLM.value and one['type'] != 'variable':
continue
if node_data.type == NodeType.AGENT.value and one['type'] not in ['tool', 'variable']:
continue
if node_data.type == NodeType.CODE.value and one['key'] != 'code_output':
continue
if node_data.type == NodeType.TOOL.value and one['key'] != 'output':
continue
ret.append({
'key': one['key'],
'value': one['value'],
'type': one['type']
})
res.append(ret)
return res
@classmethod
async def update_flow_status(cls, login_user: UserPayload, flow_id: str, version_id: int, status: int):
"""
Modify workflow status, Also modify the current version of the workflow
"""
db_flow = await FlowDao.aget_flow_by_id(flow_id)
if not db_flow:
raise NotFoundError()
if not await login_user.async_access_check(db_flow.user_id, flow_id, AccessType.WORKFLOW_WRITE):
raise UnAuthorizedError()
version_info = await FlowVersionDao.aget_version_by_id(version_id)
if not version_info or version_info.flow_id != flow_id:
raise NotFoundError()
if status == FlowStatus.ONLINE.value:
# workflowInitialization check for
try:
_ = Workflow(flow_id, db_flow.name, login_user.user_id, version_info.data, False,
10,
10,
None)
except Exception as e:
raise WorkFlowInitError(msg=str(e))
await FlowVersionDao.change_current_version(flow_id, version_info)
db_flow.status = status
await FlowDao.aupdate_flow(db_flow)
await telemetry_service.log_event(
user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.EDIT_APPLICATION,
trace_id=trace_id_var.get()
)
return
@classmethod
def convert_chat_response_to_workflow_event(cls, chat_response: ChatResponse) -> WorkflowEvent:
workflow_event = WorkflowEvent(
event=chat_response.category,
message_id=chat_response.message_id,
status='end',
node_id=chat_response.message.get('node_id'),
node_name=chat_response.message.get('name'),
node_execution_id=chat_response.message.get('unique_id'),
)
match workflow_event.event:
case WorkflowEventType.UserInput.value:
return cls.convert_user_input_event(chat_response, workflow_event)
case WorkflowEventType.GuideWord.value:
workflow_event.output_schema = WorkflowOutputSchema(
message=chat_response.message.get('guide_word')
)
case WorkflowEventType.GuideQuestion.value:
workflow_event.output_schema = WorkflowOutputSchema(
message=chat_response.message.get('guide_question')
)
case WorkflowEventType.OutputMsg.value:
return cls.convert_output_event(chat_response, workflow_event)
case WorkflowEventType.OutputWithChoose.value:
return cls.convert_output_choose_event(chat_response, workflow_event)
case WorkflowEventType.OutputWithInput.value:
return cls.convert_output_input_event(chat_response, workflow_event)
case WorkflowEventType.StreamMsg.value:
workflow_event.status = chat_response.type
workflow_event.output_schema = WorkflowOutputSchema(
message=chat_response.message.get('msg'),
reasoning_content=chat_response.message.get('reasoning_content'),
output_key=chat_response.message.get('output_key'),
)
cls.handle_source(chat_response, workflow_event)
case WorkflowEventType.Error.value:
workflow_event.event = WorkflowEventType.Close.value
workflow_event.output_schema = WorkflowOutputSchema(
message=chat_response.message
)
return workflow_event
@classmethod
def handle_source(cls, chat_response: ChatResponse, workflow_event: WorkflowEvent):
if chat_response.source == SourceType.FILE.value:
workflow_event.output_schema.source_url = f'resouce/{chat_response.chat_id}/{chat_response.message_id}'
elif chat_response.source in [SourceType.LINK.value, SourceType.QA.value]:
workflow_event.output_schema.extra = chat_response.extra
@classmethod
def convert_user_input_event(cls, chat_response: ChatResponse, workflow_event: WorkflowEvent) -> WorkflowEvent:
event_input_schema = chat_response.message.get('input_schema')
input_schema = WorkflowInputSchema(
input_type=event_input_schema.get('tab'),
)
if input_schema.input_type == 'form_input':
# Front-end form definitions go to back-end form definitions
input_schema.value = [WorkflowInputItem(**one) for one in event_input_schema.get('value', [])]
for one in input_schema.value:
one.label = one.value
one.value = ''
else:
# Description is input box input
input_schema.value = [
WorkflowInputItem(
key=event_input_schema.get('key'),
type='text',
required=True,
value=''
)
]
for one in event_input_schema.get('value', []):
tmp = WorkflowInputItem(**one)
if tmp.key == 'dialog_files_content':
tmp.type = 'dialog_file'
tmp.value = []
elif tmp.key == 'dialog_file_accept':
tmp.type = 'dialog_file_accept'
input_schema.value.append(tmp)
workflow_event.input_schema = input_schema
return workflow_event
@classmethod
def convert_output_event(cls, chat_response: ChatResponse, workflow_event: WorkflowEvent) -> WorkflowEvent:
workflow_event.output_schema = WorkflowOutputSchema(
message=chat_response.message.get('msg'),
files=chat_response.files,
output_key=chat_response.message.get('output_key')
)
cls.handle_source(chat_response, workflow_event)
return workflow_event
@classmethod
def convert_output_input_event(cls, chat_response: ChatResponse, workflow_event: WorkflowEvent) -> WorkflowEvent:
workflow_event = cls.convert_output_event(chat_response, workflow_event)
workflow_event.input_schema = WorkflowInputSchema(
input_type='message_inline_input',
value=[WorkflowInputItem(
key=chat_response.message.get('key'),
type='text',
required=True,
value=chat_response.message.get('input_msg', '')
)]
)
return workflow_event
@classmethod
def convert_output_choose_event(cls, chat_response: ChatResponse, workflow_event: WorkflowEvent) -> WorkflowEvent:
workflow_event = cls.convert_output_event(chat_response, workflow_event)
workflow_event.input_schema = WorkflowInputSchema(
input_type='message_inline_option',
value=[WorkflowInputItem(
key=chat_response.message.get('key'),
type='select',
required=True,
value='',
options=chat_response.message.get('options', [])
)]
)
return workflow_event
@classmethod
def get_frequently_used_flows(cls, user: UserPayload, user_link_type: str,
page: int = 1,
page_size: int = 8) -> (list[dict], int):
"""
Get common skills
"""
# Setujuuser_idAndtagDapatkanidlist and keep pressingcreate_timeAscending order
flow_ids = []
user_link_order = {} # Record the order of each app in the common list of users
ret = UserLinkDao.get_user_link(user.user_id, [app_type.value for app_type in UserLinkType.app.value])
if not ret:
return [], 0
# Save original order andflow_ids
for index, user_link in enumerate(ret):
flow_ids.append(user_link.type_detail)
user_link_order[user_link.type_detail] = index
# Get a list of skills visible to the user (no pagination as we need to sort manually)
if user.is_admin():
data, _ = FlowDao.get_all_apps(status=FlowStatus.ONLINE.value, id_list=flow_ids, page=0, limit=0)
else:
flow_id_extra = user.get_user_access_resource_ids(
[AccessType.FLOW, AccessType.WORKFLOW, AccessType.ASSISTANT_READ])
data, _ = FlowDao.get_all_apps(status=FlowStatus.ONLINE.value, id_list=flow_ids, user_id=user.user_id,
id_extra=flow_id_extra, page=0, limit=0)
# Reorder users in the order they are added to the stock
data.sort(key=lambda x: user_link_order.get(x['id'], float('inf')))
# Manual pagination
total = len(data)
start_index = (page - 1) * page_size
end_index = start_index + page_size
data = data[start_index:end_index]
data = cls.add_extra_field(user, data)
return data, total
@classmethod
def delete_frequently_used_flows(cls, user: UserPayload, user_link_type: str, type_detail: str):
UserLinkDao.delete_user_link(user.user_id, user_link_type, type_detail)
return True
@classmethod
def add_frequently_used_flows(cls, user: UserPayload, user_link_type: str, type_detail: str):
user_link, is_new = UserLinkDao.add_user_link(user.user_id, user_link_type, type_detail)
return is_new
@classmethod
def get_uncategorized_flows(cls, user: UserPayload, page: int = 1, page_size: int = 8) -> tuple[list, int]:
"""
Get a list of unsorted skills
"""
# SetujutagDapatkanidVertical
all_tags = TagDao.search_tags(None, None, None)
tag_id = [tag.id for tag in all_tags]
flow_ids_not_in = []
if tag_id:
ret = TagDao.get_resources_by_tags_batch(tag_id, [ResourceTypeEnum.FLOW, ResourceTypeEnum.WORK_FLOW,
ResourceTypeEnum.ASSISTANT])
if not ret:
return [], 0
flow_ids_not_in = [one.resource_id for one in ret]
# Get a list of skills visible to the user
if user.is_admin():
data, total = FlowDao.get_all_apps(None, FlowStatus.ONLINE.value, None, None, None, None, flow_ids_not_in,
page, page_size)
else:
user_role = UserRoleDao.get_user_roles(user.user_id)
role_ids = [role.role_id for role in user_role]
role_access = RoleAccessDao.get_role_access_batch(role_ids, [AccessType.FLOW, AccessType.WORKFLOW,
AccessType.ASSISTANT_READ])
flow_id_extra = []
if role_access:
flow_id_extra = [access.third_id for access in role_access]
data, total = FlowDao.get_all_apps(None, FlowStatus.ONLINE.value, None, None, user.user_id, flow_id_extra,
flow_ids_not_in, page,
page_size)
# Medical Treatment:logo URL, convert relative paths to full accessible links
for one in data:
one['logo'] = cls.get_logo_share_link(one['logo'])
return data, total
@classmethod
async def get_one_workflow_simple_info(cls, workflow_id: str) -> Flow | None:
"""
Get individual workflow details
"""
return await FlowDao.get_one_flow_simple(workflow_id)
@classmethod
def get_one_workflow_simple_info_sync(cls, workflow_id: str) -> Optional[Flow]:
"""
Get individual workflow details (Sync)
"""
return FlowDao.get_one_flow_simple_sync(workflow_id)
@classmethod
def get_all_apps_by_time_range_sync(cls, start_time: datetime, end_time: datetime, page: int = 1,
page_size: int = 100) -> list[dict]:
"""
Get all apps based on timeframe
"""
return FlowDao.get_all_app_by_time_range_sync(start_time, end_time, page, page_size)
@classmethod
def get_first_app(cls) -> Dict | None:
return FlowDao.get_first_app()
================================================
FILE: src/backend/bisheng/api/services/workstation/__init__.py
================================================
from .workstation import WorkStationService, WorkstationMessage, WorkstationConversation, SSECallbackClient
================================================
FILE: src/backend/bisheng/api/services/workstation/workstation.py
================================================
import asyncio
import json
from datetime import datetime
from typing import Optional, Any
from fastapi import BackgroundTasks, Request
from langchain_core.messages import AIMessage, HumanMessage
from loguru import logger
from openai import BaseModel
from pydantic import field_validator
from bisheng.api.services.base import BaseService
from bisheng.api.services.knowledge import KnowledgeService
from bisheng.api.v1.schema.chat_schema import UseKnowledgeBaseParam
from bisheng.api.v1.schemas import KnowledgeFileOne, KnowledgeFileProcess, WorkstationConfig
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.server import EmbeddingModelStatusError
from bisheng.common.models.config import Config, ConfigDao, ConfigKeyEnum
from bisheng.core.vectorstore.multi_retriever import MultiRetriever
from bisheng.database.constants import MessageCategory
from bisheng.database.models.message import ChatMessage, ChatMessageDao
from bisheng.database.models.session import MessageSession, MessageSessionDao
from bisheng.knowledge.domain.knowledge_rag import KnowledgeRag
from bisheng.knowledge.domain.models.knowledge import KnowledgeCreate, KnowledgeDao, KnowledgeTypeEnum
from bisheng.llm.domain.services import LLMService
from bisheng.tool.domain.langchain.knowledge import KnowledgeRetrieverTool
from bisheng.tool.domain.models.gpts_tools import GptsToolsDao
from bisheng.user.domain.models.user import UserDao
class WorkStationService(BaseService):
@classmethod
def update_config(cls, request: Request, login_user: UserPayload, data: WorkstationConfig) \
-> WorkstationConfig:
""" Update Workstation Default Configuration """
config = ConfigDao.get_config(ConfigKeyEnum.WORKSTATION)
if config:
config.value = data.model_dump_json()
else:
config = Config(key=ConfigKeyEnum.WORKSTATION.value, value=json.dumps(data.dict()))
ConfigDao.insert_config(config)
return data
@classmethod
def sync_tool_info(cls, tools: list[dict]) -> list[dict]:
""" Synchronization Tool Information """
if not tools:
return []
tool_type_ids = [t.get("id") for t in tools]
tool_type_info = GptsToolsDao.get_all_tool_type(tool_type_ids)
exists_tool_type = {t.id: t for t in tool_type_info}
tool_info = GptsToolsDao.get_list_by_type(list(exists_tool_type.keys()))
exists_tool_info = {t.id: t for t in tool_info}
new_tools = []
for one in tools:
new_one = exists_tool_type.get(one.get("id"))
if not new_one:
continue
one["name"] = new_one.name
one["description"] = new_one.description
new_children = []
for item in one.get("children", []):
if not exists_tool_info.get(item.get("id")):
continue
item["name"] = exists_tool_info[item.get("id")].name
item["description"] = exists_tool_info[item.get("id")].desc
item["tool_key"] = exists_tool_info[item.get("id")].tool_key
new_children.append(item)
one["children"] = new_children
new_tools.append(one)
return new_tools
@classmethod
def parse_config(cls, config: Any) -> Optional[WorkstationConfig]:
if config:
ret = json.loads(config.value)
ret = WorkstationConfig(**ret)
if ret.assistantIcon and ret.assistantIcon.relative_path:
ret.assistantIcon.image = cls.get_logo_share_link(ret.assistantIcon.relative_path)
if ret.sidebarIcon and ret.sidebarIcon.relative_path:
ret.sidebarIcon.image = cls.get_logo_share_link(ret.sidebarIcon.relative_path)
# Compatible with olderwebsearchConfigure
if ret.webSearch and not ret.webSearch.params:
ret.webSearch.tool = 'bing'
ret.webSearch.params = {'api_key': ret.webSearch.bingKey, 'base_url': ret.webSearch.bingUrl}
if ret.linsightConfig:
# Determine if the tool was deleted, Synchronization tool latest information name and description, etc.
ret.linsightConfig.tools = cls.sync_tool_info(ret.linsightConfig.tools)
return ret
return None
@classmethod
def get_config(cls) -> WorkstationConfig | None:
""" Get the default configuration of the workbench """
config = ConfigDao.get_config(ConfigKeyEnum.WORKSTATION)
return cls.parse_config(config)
@classmethod
async def aget_config(cls) -> WorkstationConfig | None:
""" Get the default configuration of the workbench asynchronously """
config = await ConfigDao.aget_config(ConfigKeyEnum.WORKSTATION)
return cls.parse_config(config)
@classmethod
def uploadPersonalKnowledge(
cls,
request: Request,
login_user: UserPayload,
file_path,
background_tasks: BackgroundTasks,
):
# Check if there is a personal knowledge base
knowledge = KnowledgeDao.get_user_knowledge(login_user.user_id, None,
KnowledgeTypeEnum.PRIVATE)
if not knowledge:
model = LLMService.get_knowledge_llm()
knowledgeCreate = KnowledgeCreate(name='Personal Knowledge Base',
type=KnowledgeTypeEnum.PRIVATE.value,
user_id=login_user.user_id,
model=model.embedding_model_id)
knowledge = KnowledgeService.create_knowledge(request, login_user, knowledgeCreate)
else:
knowledge = knowledge[0]
req_data = KnowledgeFileProcess(knowledge_id=knowledge.id,
file_list=[KnowledgeFileOne(file_path=file_path)])
try:
_ = LLMService.get_bisheng_knowledge_embedding(login_user.user_id, int(knowledge.model))
except Exception as e:
raise EmbeddingModelStatusError(exception=e)
res = KnowledgeService.process_knowledge_file(request,
login_user,
background_tasks, req_data)
return res
@classmethod
def queryKnowledgeList(
cls,
request: Request,
login_user: UserPayload,
page: int,
size: int,
):
# Check if there is a personal knowledge base
knowledge = KnowledgeDao.get_user_knowledge(login_user.user_id, None,
KnowledgeTypeEnum.PRIVATE)
if not knowledge:
return [], 0
res, total, _ = KnowledgeService.get_knowledge_files(
request,
login_user,
knowledge[0].id,
page=page,
page_size=size)
return res, total
@classmethod
async def queryChunksFromDB(cls, question: str, use_knowledge_param: UseKnowledgeBaseParam,
max_token: int,
login_user: UserPayload) -> tuple[list[Any], None] | tuple[list[Any], Any]:
"""
Query relevant knowledge blocks from the database
Args:
max_token: MaxtokenLimit
question: User Query Questions
use_knowledge_param: Working with Knowledge Base Parameters
login_user: Logged in user information
Returns:
List[str]: Formatted Knowledge Base Content List in the following format:
"[file name]:The file name\n[file content begin]\nContents\n[file content end]\n"
"""
try:
knowledge_ids = []
if use_knowledge_param.organization_knowledge_ids:
# Call the Knowledge Base service to get the Knowledge Block if there is an Organizational Knowledge Base
knowledge_ids.extend(use_knowledge_param.organization_knowledge_ids)
if use_knowledge_param.personal_knowledge_enabled:
# If Personal Knowledge Base is enabled, add Personal Knowledge BaseID
personal_knowledge = await KnowledgeDao.aget_user_knowledge(login_user.user_id,
knowledge_type=KnowledgeTypeEnum.PRIVATE)
if personal_knowledge:
knowledge_ids.append(personal_knowledge[0].id)
knowledge_vector_list = await KnowledgeRag.get_multi_knowledge_vectorstore(
invoke_user_id=login_user.user_id,
knowledge_ids=knowledge_ids,
user_name=login_user.user_name)
all_milvus, all_milvus_filter = [], []
all_es, all_es_filter = [], []
multi_milvus_retriever, multi_es_retriever = None, None
for knowledge_id, vectorstore_info in knowledge_vector_list.items():
milvus_vectorstore = vectorstore_info.get("milvus")
es_vectorstore = vectorstore_info.get("es")
all_milvus.append(milvus_vectorstore)
all_milvus_filter.append({"k": 100, "param": {"ef": 110}})
all_es.append(es_vectorstore)
all_es_filter.append({"k": 100})
if all_milvus:
multi_milvus_retriever = MultiRetriever(
vectors=all_milvus,
search_kwargs=all_milvus_filter,
finally_k=100
)
if all_es:
multi_es_retriever = MultiRetriever(
vectors=all_es,
search_kwargs=all_es_filter,
finally_k=100
)
knowledge_retriever_tool = KnowledgeRetrieverTool(
vector_retriever=multi_milvus_retriever,
elastic_retriever=multi_es_retriever,
max_content=max_token,
rrf_remove_zero_score=True,
sort_by_source_and_index=True
)
finally_docs = await knowledge_retriever_tool.ainvoke({"query": question})
# Format the retrieval results to the specified template format
formatted_results = []
if finally_docs:
for doc in finally_docs:
# Get the filename, preferably from metadata Get in
file_name = doc.metadata.get('source') or doc.metadata.get('document_name')
# Get document content
content = doc.page_content.strip()
# Organize content in template format
formatted_content = f"[file name]:{file_name}\n[file content begin]\n{content}\n[file content end]\n"
formatted_results.append(formatted_content)
return formatted_results, finally_docs
except Exception as e:
logger.error(f"queryChunksFromDB error: {e}")
return [], None
@classmethod
async def get_chat_history(cls, chat_id: str, size: int = 4):
chat_history = []
messages = await ChatMessageDao.aget_messages_by_chat_id(chat_id, ['question', 'answer'], size)
for one in messages:
# bug fix When constructing multi-turn dialogues, the input and response of
# the user and the assistant were reversed, leading to incorrect question-and-answer sequences.
extra = json.loads(one.extra) or {}
content = extra['prompt'] if 'prompt' in extra else one.message
if one.category == MessageCategory.QUESTION.value:
chat_history.append(HumanMessage(content=content))
elif one.category == MessageCategory.ANSWER.value:
chat_history.append(AIMessage(content=content))
logger.info(f'loaded {len(chat_history)} chat history for chat_id {chat_id}')
return chat_history
class WorkstationMessage(BaseModel):
messageId: str
conversationId: str
createdAt: datetime
isCreatedByUser: bool
model: Optional[str]
parentMessageId: Optional[str]
user_name: Optional[str]
sender: str
text: str
updateAt: datetime
files: Optional[list]
error: Optional[bool] = False
unfinished: Optional[bool] = False
flow_name: Optional[str] = None
source: Optional[int] = None
@field_validator('messageId', mode='before')
@classmethod
def convert_message_id(cls, value: Any) -> str:
if isinstance(value, str):
return value
return str(value)
@field_validator('parentMessageId', mode='before')
@classmethod
def convert_parent_message_id(cls, value: Any) -> str:
if isinstance(value, str):
return value
return str(value)
@classmethod
async def from_chat_message(cls, message: ChatMessage):
files = json.loads(message.files) if message.files else []
user_model = await UserDao.aget_user(message.user_id)
message_session_model = await MessageSessionDao.async_get_one(chat_id=message.chat_id)
return cls(
messageId=str(message.id),
conversationId=message.chat_id,
createdAt=message.create_time,
updateAt=message.update_time,
isCreatedByUser=not message.is_bot,
model=None,
parentMessageId=json.loads(message.extra).get('parentMessageId'),
error=json.loads(message.extra).get('error', False),
unfinished=json.loads(message.extra).get('unfinished', False),
user_name=user_model.user_name,
sender=message.sender,
text=message.message,
files=files,
flow_name=message_session_model.flow_name if message_session_model else None,
source=message.source
)
class WorkstationConversation(BaseModel):
conversationId: str
user: str
createdAt: datetime
updateAt: datetime
model: Optional[str]
title: Optional[str]
@classmethod
def from_chat_session(cls, session: MessageSession):
return cls(
conversationId=session.chat_id,
user=str(session.user_id),
createdAt=session.create_time,
updateAt=session.update_time,
model=None,
title=session.flow_name,
)
@field_validator('user', mode='before')
@classmethod
def convert_user(cls, v: Any) -> str:
if isinstance(v, str):
return v
return str(v)
class SSECallbackClient:
def __init__(self):
self.queue = asyncio.Queue()
async def send_json(self, data):
self.queue.put_nowait(data)
================================================
FILE: src/backend/bisheng/api/utils.py
================================================
import hashlib
from pathlib import Path
import aiohttp
from loguru import logger
from platformdirs import user_cache_dir
from sqlalchemy import delete
from sqlmodel import select
from bisheng.api.v1.schemas import StreamData
from bisheng.core.database import get_sync_db_session
from bisheng.database.models.variable_value import Variable
from bisheng.graph.graph.base import Graph
API_WORDS = ['api', 'key', 'token']
def has_api_terms(word: str):
return 'api' in word and ('key' in word or ('token' in word and 'tokens' not in word))
def remove_api_keys(flow: dict):
"""Remove api keys from flow data."""
if flow.get('data') and flow['data'].get('nodes'):
for node in flow['data']['nodes']:
node_data = node.get('data').get('node')
template = node_data.get('template')
for value in template.values():
if (isinstance(value, dict) and has_api_terms(value['name'])
and value.get('password')):
value['value'] = None
return flow
def build_input_keys_response(langchain_object, artifacts):
"""Build the input keys response."""
input_keys_response = {
'input_keys': {
key: ''
for key in langchain_object.input_keys
},
'memory_keys': [],
'handle_keys': artifacts.get('handle_keys', []),
}
# Set the input keys values from artifacts
for key, value in artifacts.items():
if key in input_keys_response['input_keys']:
input_keys_response['input_keys'][key] = value
# If the object has memory, that memory will have a memory_variables attribute
# memory variables should be removed from the input keys
if hasattr(langchain_object, 'memory') and hasattr(langchain_object.memory,
'memory_variables'):
# Remove memory variables from input keys
input_keys_response['input_keys'] = {
key: value
for key, value in input_keys_response['input_keys'].items()
if key not in langchain_object.memory.memory_variables
}
# Add memory variables to memory_keys
input_keys_response['memory_keys'] = langchain_object.memory.memory_variables
if hasattr(langchain_object, 'prompt') and hasattr(langchain_object.prompt, 'template'):
input_keys_response['template'] = langchain_object.prompt.template
return input_keys_response
async def build_flow(graph_data: dict,
artifacts,
process_file=False,
flow_id=None,
chat_id=None,
**kwargs) -> Graph:
try:
# Some error could happen when building the graph
graph = Graph.from_payload(graph_data)
except Exception as exc:
logger.error(exc)
error_message = str(exc)
yield str(StreamData(event='error', data={'error': error_message}))
return
number_of_nodes = len(graph.vertices)
for i, vertex in enumerate(graph.generator_build(), 1):
try:
log_dict = {
'log': f'Building node {vertex.vertex_type}',
}
yield str(StreamData(event='log', data=log_dict))
# # If the file exists, do not operate the file at this time to avoid duplication of operations
if not process_file and (vertex.base_type == 'documentloaders'
or vertex.base_type == 'input_output'):
template_dict = {
key: value
for key, value in vertex.data['node']['template'].items()
if isinstance(value, dict)
}
for key, value in template_dict.items():
if value.get('type') == 'fileNode':
# Filter Files
vertex.params[key] = ''
# vectore store Introduce automatic library building logic
# Chat window, etc.flow Proactively Generatedvector Need to create a new temporarycollection
# tmp_{chat_id}
if vertex.base_type == 'vectorstores':
# Knowledge Base Transmits Parameters via Parameters
if 'collection_name' in kwargs and 'collection_name' in vertex.params:
vertex.params['collection_name'] = kwargs['collection_name']
if 'collection_name' in kwargs and 'index_name' in vertex.params:
vertex.params['index_name'] = kwargs['collection_name']
# Temporary directory processing tmp_{embeding}_{loader}_{chat_id}
if 'collection_name' in vertex.params and not vertex.params.get('collection_name'):
vertex.params['collection_name'] = f'tmp_{flow_id}_{chat_id if chat_id else 1}'
elif 'index_name' in vertex.params and not vertex.params.get('index_name'):
# es
vertex.params['index_name'] = f'tmp_{flow_id}_{chat_id if chat_id else 1}'
await vertex.build(user_id=graph_data.get('user_id'))
params = vertex._built_object_repr()
valid = True
logger.debug(
f"Building node {vertex.vertex_type} {str(params)[:50]}{'...' if len(str(params)) > 50 else ''}"
)
if vertex.artifacts:
# The artifacts will be prompt variables
# passed to build_input_keys_response
# to set the input_keys values
artifacts.update(vertex.artifacts)
except Exception as exc:
logger.exception(f'Error building node {vertex.id}', exc_info=True)
params = str(exc)
valid = False
response = {
'valid': valid,
'params': params,
'id': vertex.id,
'progress': round(i / number_of_nodes, 2),
}
yield str(StreamData(event='message', data=response))
raise exc
response = {
'valid': valid,
'params': params,
'id': vertex.id,
'progress': round(i / number_of_nodes, 2),
}
yield str(StreamData(event='message', data=response))
yield graph
async def build_flow_no_yield(graph_data: dict,
artifacts,
process_file=False,
flow_id=None,
chat_id=None,
**kwargs):
try:
# Some error could happen when building the graph
graph = Graph.from_payload(graph_data)
except Exception as exc:
logger.exception(exc)
raise exc
sorted_vertices = graph.topological_sort()
for vertex in sorted_vertices:
try:
# If the file exists, do not operate the file at this time to avoid duplication of operations
if not process_file and (vertex.base_type == 'documentloaders'
or vertex.base_type == 'input_output'):
template_dict = {
key: value
for key, value in vertex.data['node']['template'].items()
if isinstance(value, dict)
}
for key, value in template_dict.items():
if value.get('type') == 'fileNode':
# Filter Files
vertex.params[key] = ''
# vectore store Introduce automatic library building logic
# Chat window, etc.flow Proactively Generatedvector Need to create a new temporarycollection
# tmp_{chat_id}
if vertex.base_type == 'vectorstores':
# Infuseuser_name
vertex.params['user_name'] = kwargs.get('user_name') if kwargs else ''
if vertex.vertex_type not in [
'MilvusWithPermissionCheck', 'ElasticsearchWithPermissionCheck'
]:
# Knowledge Base Transmits Parameters via Parameters
if 'collection_name' in kwargs and 'collection_name' in vertex.params:
vertex.params['collection_name'] = kwargs['collection_name']
if 'collection_name' in kwargs and 'index_name' in vertex.params:
vertex.params['index_name'] = kwargs['collection_name']
if 'collection_name' in vertex.params and not vertex.params.get(
'collection_name'):
vertex.params[
'collection_name'] = f'tmp_{flow_id}_{chat_id if chat_id else 1}'
logger.info(f"rename_vector_col col={vertex.params['collection_name']}")
if process_file:
# L1 RemoveMilvusBattle Log
vertex.params['drop_old'] = True
elif 'index_name' in vertex.params and not vertex.params.get('index_name'):
# es
vertex.params['index_name'] = f'tmp_{flow_id}_{chat_id if chat_id else 1}'
if vertex.base_type == 'chains' and 'retriever' in vertex.params:
vertex.params['user_name'] = kwargs.get('user_name') if kwargs else ''
await vertex.build()
params = vertex._built_object_repr()
logger.debug(
f"Building node {str(params)[:50]}{'...' if len(str(params)) > 50 else ''}")
if vertex.artifacts:
# The artifacts will be prompt variables
# passed to build_input_keys_response
# to set the input_keys values
artifacts.update(vertex.artifacts)
except Exception as exc:
raise exc
return graph
def get_L2_param_from_flow(flow_data: dict, flow_id: str, version_id: int = None):
graph = Graph.from_payload(flow_data)
node_id = []
variable_ids = []
file_name = []
for node in graph.vertices:
if node.vertex_type in {'InputFileNode'}:
node_id.append(node.id)
file_name.append(node.params.get('file_type'))
elif node.vertex_type in {'VariableNode'}:
variable_ids.append(node.id)
with get_sync_db_session() as session:
db_variables = session.exec(
select(Variable).where(Variable.flow_id == flow_id,
Variable.version_id == version_id)).all()
old_file_ids = {
variable.node_id: variable
for variable in db_variables if variable.value_type == 3
}
update = []
delete_node_ids = []
try:
for index, id in enumerate(node_id):
if id in old_file_ids:
if file_name[index] != old_file_ids.get(id).variable_name:
old_file_ids.get(id).variable_name = file_name[index]
update.append(old_file_ids.get(id))
old_file_ids.pop(id)
else:
# file type
db_new_var = Variable(flow_id=flow_id,
version_id=version_id,
node_id=id,
variable_name=file_name[index],
value_type=3)
update.append(db_new_var)
# delete variable which not delete by edit
old_variable_ids = {
variable.node_id
for variable in db_variables if variable.value_type != 3
}
if old_file_ids:
delete_node_ids.extend(list(old_file_ids.keys()))
delete_node_ids.extend(old_variable_ids.difference(set(variable_ids)))
if update:
[session.add(var) for var in update]
if delete_node_ids:
session.exec(
delete(Variable).where(Variable.node_id.in_(delete_node_ids),
version_id == version_id, flow_id == flow_id))
session.commit()
return True
except Exception as e:
logger.exception(e)
session.rollback()
return False
def raw_frontend_data_is_valid(raw_frontend_data):
"""Check if the raw frontend data is valid for processing."""
return 'template' in raw_frontend_data and 'display_name' in raw_frontend_data
def is_valid_data(frontend_node, raw_frontend_data):
"""Check if the data is valid for processing."""
return frontend_node and 'template' in frontend_node and raw_frontend_data_is_valid(
raw_frontend_data)
def update_template_values(frontend_template, raw_template):
"""Updates the frontend template with values from the raw template."""
for key, value_dict in raw_template.items():
if key == 'code' or not isinstance(value_dict, dict):
continue
update_template_field(frontend_template, key, value_dict)
def get_file_path_value(file_path):
"""Get the file path value if the file exists, else return empty string."""
try:
path = Path(file_path)
except TypeError:
return ''
# Check for safety
# If the path is not in the cache dir, return empty string
# This is to prevent access to files outside the cache dir
# If the path is not a file, return empty string
if not path.exists() or not str(path).startswith(user_cache_dir('bisheng', 'bisheng')):
return ''
return file_path
def update_template_field(frontend_template, key, value_dict):
"""Updates a specific field in the frontend template."""
template_field = frontend_template.get(key)
if not template_field or template_field.get('type') != value_dict.get('type'):
return
if 'value' in value_dict and value_dict['value']:
template_field['value'] = value_dict['value']
if 'file_path' in value_dict and value_dict['file_path']:
file_path_value = get_file_path_value(value_dict['file_path'])
if not file_path_value:
# If the file does not exist, remove the value from the template_field["value"]
template_field['value'] = ''
template_field['file_path'] = file_path_value
def update_frontend_node_with_template_values(frontend_node, raw_frontend_node):
"""
Updates the given frontend node with values from the raw template data.
:param frontend_node: A dict representing a built frontend node.
:param raw_template_data: A dict representing raw template data.
:return: Updated frontend node.
"""
if not is_valid_data(frontend_node, raw_frontend_node):
return frontend_node
# Check if the display_name is different than "CustomComponent"
# if so, update the display_name in the frontend_node
if raw_frontend_node['display_name'] != 'CustomComponent':
frontend_node['display_name'] = raw_frontend_node['display_name']
update_template_values(frontend_node['template'], raw_frontend_node['template'])
return frontend_node
async def get_url_content(url: str) -> str:
""" Get the returned of the interfacebodyContents """
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
if response.status != 200:
raise Exception(f'Failed to download content, HTTP status code: {response.status}')
res = await response.read()
return res.decode('utf-8')
def md5_hash(original_string: str):
md5 = hashlib.md5()
md5.update(original_string.encode('utf-8'))
return md5.hexdigest()
================================================
FILE: src/backend/bisheng/api/v1/__init__.py
================================================
from bisheng.api.v1.assistant import router as assistant_router
from bisheng.api.v1.audit import router as audit_router
from bisheng.api.v1.chat import router as chat_router
from bisheng.api.v1.component import router as component_router
from bisheng.api.v1.endpoints import router as endpoints_router
from bisheng.api.v1.evaluation import router as evaluation_router
from bisheng.api.v1.flows import router as flows_router
from bisheng.api.v1.invite_code import router as invite_code_router
from bisheng.api.v1.mark_task import router as mark_router
from bisheng.api.v1.report import router as report_router
from bisheng.api.v1.skillcenter import router as skillcenter_router
from bisheng.api.v1.tag import router as tag_router
from bisheng.api.v1.usergroup import router as group_router
from bisheng.api.v1.validate import router as validate_router
from bisheng.api.v1.variable import router as variable_router
from bisheng.api.v1.workflow import router as workflow_router
from bisheng.api.v1.workstation import router as workstation_router
from bisheng.tool.api.tool import router as tool_router
from bisheng.user.api.user import router as user_router
__all__ = [
'chat_router',
'endpoints_router',
'validate_router',
'flows_router',
'skillcenter_router',
'user_router',
'variable_router',
'report_router',
'component_router',
'assistant_router',
'evaluation_router',
'group_router',
'audit_router',
'tag_router',
'workflow_router',
'mark_router',
'workstation_router',
"tool_router",
"invite_code_router",
]
================================================
FILE: src/backend/bisheng/api/v1/assistant.py
================================================
from typing import List, Optional, Union
from fastapi import (APIRouter, Body, Depends, HTTPException, Query, Request, WebSocket,
WebSocketException)
from fastapi import status as http_status
from fastapi.responses import StreamingResponse
from loguru import logger
from bisheng.api.services.assistant import AssistantService
from bisheng.api.v1.schemas import (AssistantCreateReq, AssistantUpdateReq,
StreamData, resp_200)
from bisheng.chat.manager import ChatManager
from bisheng.chat.types import WorkType
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.http_error import NotFoundError
from bisheng.common.schemas.api import PageData
from bisheng.core.cache.redis_manager import get_redis_client
from bisheng.database.models.assistant import Assistant
from bisheng.share_link.api.dependencies import header_share_token_parser
from bisheng.share_link.domain.models.share_link import ShareLink
from bisheng.utils import generate_uuid
router = APIRouter(prefix='/assistant', tags=['Assistant'])
chat_manager = ChatManager()
@router.get('')
def get_assistant(*,
name: str = Query(default=None, description='assistant name, fuzzy matching, Fuzzy matches with description'),
tag_id: int = Query(default=None, description='labelID'),
page: Optional[int] = Query(default=1, gt=0, description='Page'),
limit: Optional[int] = Query(default=10, gt=0, description='Listings Per Page'),
status: Optional[int] = Query(default=None, description='Is online status'),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
data, total = AssistantService.get_assistant(login_user, name, status, tag_id, page, limit)
return resp_200(PageData(data=data, total=total))
# Get the details of an assistant
@router.get('/info/{assistant_id}')
async def get_assistant_info(*, assistant_id: str, login_user: UserPayload = Depends(UserPayload.get_login_user),
share_link: Union['ShareLink', None] = Depends(header_share_token_parser)):
"""Getting Helper Information"""
res = await AssistantService.get_assistant_info(assistant_id, login_user, share_link)
return resp_200(data=res)
@router.post('/delete')
def delete_assistant(*,
request: Request,
assistant_id: str,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""Delete Assistant"""
AssistantService.delete_assistant(request, login_user, assistant_id)
return resp_200()
@router.post('')
async def create_assistant(*,
request: Request,
req: AssistantCreateReq,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
# get login user
assistant = Assistant(**req.model_dump(), user_id=login_user.user_id)
res = await AssistantService.create_assistant(request, login_user, assistant)
return resp_200(data=res)
@router.put('')
async def update_assistant(*,
request: Request,
req: AssistantUpdateReq,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
# get login user
assistant_model = await AssistantService.update_assistant(request, login_user, req)
return resp_200(data=assistant_model)
@router.post('/status')
async def update_status(*,
request: Request,
assistant_id: str = Body(description='Assistant UniqueID', alias='id'),
status: int = Body(description='whether to go online: 0 offline, 1 online'),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
await AssistantService.update_status(request, login_user, assistant_id, status)
return resp_200()
@router.post('/auto/task')
async def auto_update_assistant_task(*, request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user),
assistant_id: str = Body(description='Assistant UniqueID'),
prompt: str = Body(description='User-filled prompts')):
# Deposit Cache
task_id = generate_uuid()
redis_client = await get_redis_client()
await redis_client.aset(f'auto_update_task:{task_id}', {
'assistant_id': assistant_id,
'prompt': prompt,
})
return resp_200(data={
'task_id': task_id
})
# Nicepromptand tool selection
@router.get('/auto', response_class=StreamingResponse)
async def auto_update_assistant(*, task_id: str = Query(description='Optimization Task UniqueID'),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
redis_client = await get_redis_client()
task = await redis_client.aget(f'auto_update_task:{task_id}')
if not task:
raise NotFoundError()
assistant_id = task['assistant_id']
prompt = task['prompt']
async def event_stream():
try:
async for message in AssistantService.auto_update_stream(assistant_id, prompt, login_user):
yield message
yield str(StreamData(event='message', data={'type': 'end', 'data': ''}))
except Exception as e:
logger.exception('assistant auto update error')
yield str(StreamData(event='message', data={'type': 'end', 'message': str(e)}))
return StreamingResponse(event_stream(), media_type='text/event-stream')
# Update assistant prompts
@router.post('/prompt')
async def update_prompt(*,
assistant_id: str = Body(description='Assistant UniqueID', alias='id'),
prompt: str = Body(description='Used by Usersprompt'),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
AssistantService.update_prompt(assistant_id, prompt, login_user)
return resp_200()
@router.post('/flow')
async def update_flow_list(*,
assistant_id: str = Body(description='Assistant UniqueID', alias='id'),
flow_list: List[str] = Body(description='List of user-selected skills'),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
AssistantService.update_flow_list(assistant_id, flow_list, login_user)
return resp_200()
@router.post('/tool')
async def update_tool_list(*,
assistant_id: str = Body(description='Assistant UniqueID', alias='id'),
tool_list: List[int] = Body(description='List of tools selected by the user'),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Update the list of tools selected by the assistant """
AssistantService.update_tool_list(assistant_id, tool_list, login_user)
return resp_200()
# Assistant Dialogue'swebsocketCONNECT
@router.websocket('/chat/{assistant_id}')
async def chat(*,
assistant_id: str,
websocket: WebSocket,
chat_id: Optional[str] = None,
login_user: UserPayload = Depends(UserPayload.get_login_user_from_ws)):
try:
await chat_manager.dispatch_client(websocket, assistant_id, chat_id, login_user,
WorkType.GPTS, websocket)
except WebSocketException as exc:
logger.error(f'Websocket exception: {str(exc)}')
await websocket.close(code=http_status.WS_1011_INTERNAL_ERROR, reason=str(exc))
except Exception as exc:
logger.exception(f'Error in chat websocket: {str(exc)}')
message = exc.detail if isinstance(exc, HTTPException) else str(exc)
if 'Could not validate credentials' in str(exc):
await websocket.close(code=http_status.WS_1008_POLICY_VIOLATION, reason='Unauthorized')
else:
await websocket.close(code=http_status.WS_1011_INTERNAL_ERROR, reason=message)
================================================
FILE: src/backend/bisheng/api/v1/audit.py
================================================
from datetime import datetime
from typing import Optional, List
from fastapi import APIRouter, Query, Depends
from bisheng.api.services.audit_log import AuditLogService
from bisheng.api.v1.schemas import resp_200
from bisheng.common.dependencies.user_deps import UserPayload
router = APIRouter(prefix='/audit', tags=['AuditLog'])
@router.get('')
async def get_audit_logs(*,
group_ids: Optional[List[str]] = Query(default=[], description='GroupingidVertical'),
operator_ids: Optional[List[int]] = Query(default=[], description='WhoidVertical'),
start_time: Optional[datetime] = Query(default=None, description='Start when'),
end_time: Optional[datetime] = Query(default=None, description='End time'),
system_id: Optional[str] = Query(default=None, description='Module Item'),
event_type: Optional[str] = Query(default=None, description='Operation behaviors'),
page: Optional[int] = Query(default=0, description='Page'),
limit: Optional[int] = Query(default=0, description='Listings Per Page'),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
group_ids = [one for one in group_ids if one]
operator_ids = [one for one in operator_ids if one]
return await AuditLogService.get_audit_log(login_user, group_ids, operator_ids,
start_time, end_time, system_id, event_type, page, limit)
@router.get('/operators')
def get_all_operators(*, login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Get all users who have acted on a resource under a group
"""
return resp_200(data=AuditLogService.get_all_operators(login_user))
@router.get('/session')
async def get_session_list(login_user: UserPayload = Depends(UserPayload.get_login_user),
flow_ids: Optional[List[str]] = Query(default=[], description='ApplicationsidVertical'),
user_ids: Optional[List[int]] = Query(default=[], description='UsersidVertical'),
group_ids: Optional[List[int]] = Query(default=[], description='User GroupsidVertical'),
start_date: Optional[datetime] = Query(default=None, description='Start when'),
end_date: Optional[datetime] = Query(default=None, description='End time'),
feedback: Optional[str] = Query(default=None,
description='like LikedislikeUnlikecopiedCopy:'),
sensitive_status: Optional[int] = Query(default=None,
description='Sensitive word review status'),
page: Optional[int] = Query(default=1, description='Page'),
page_size: Optional[int] = Query(default=10, description='Listings Per Page')):
""" Filter all session lists """
data, total = await AuditLogService.get_session_list(login_user, flow_ids, user_ids, group_ids, start_date,
end_date,
feedback, sensitive_status, page, page_size)
return resp_200(data={
'data': data,
'total': total
})
@router.get('/session/export')
async def export_session_messages(login_user: UserPayload = Depends(UserPayload.get_login_user),
flow_ids: Optional[List[str]] = Query(default=[],
description='ApplicationsidVertical'),
user_ids: Optional[List[int]] = Query(default=[], description='UsersidVertical'),
group_ids: Optional[List[int]] = Query(default=[],
description='User GroupsidVertical'),
start_date: Optional[datetime] = Query(default=None, description='Start when'),
end_date: Optional[datetime] = Query(default=None, description='End time'),
feedback: Optional[str] = Query(default=None,
description='like LikedislikeUnlikecopiedCopy:'),
sensitive_status: Optional[int] = Query(default=None,
description='Sensitive word review status')):
""" Exporting a list of session detailscsvDoc. """
url = await AuditLogService.export_session_messages(login_user, flow_ids, user_ids, group_ids, start_date, end_date,
feedback, sensitive_status)
return resp_200(data={
'url': url
})
@router.get('/session/export/data')
async def get_session_messages(login_user: UserPayload = Depends(UserPayload.get_login_user),
flow_ids: Optional[List[str]] = Query(default=[], description='ApplicationsidVertical'),
user_ids: Optional[List[int]] = Query(default=[], description='UsersidVertical'),
group_ids: Optional[List[int]] = Query(default=[], description='User GroupsidVertical'),
start_date: Optional[datetime] = Query(default=None, description='Start when'),
end_date: Optional[datetime] = Query(default=None, description='End time'),
feedback: Optional[str] = Query(default=None,
description='like LikedislikeUnlikecopiedCopy:'),
sensitive_status: Optional[int] = Query(default=None,
description='Sensitive word review status')):
""" Export data for a list of session details """
result = await AuditLogService.get_session_messages(login_user, flow_ids, user_ids, group_ids, start_date, end_date,
feedback, sensitive_status)
return resp_200(data={
'data': result
})
================================================
FILE: src/backend/bisheng/api/v1/base.py
================================================
from bisheng.interface.utils import extract_input_variables_from_prompt
from bisheng.template.frontend_node.base import FrontendNode
from langchain.prompts import PromptTemplate
from pydantic import field_validator, BaseModel
class CacheResponse(BaseModel):
data: dict
class Code(BaseModel):
code: str
class FrontendNodeRequest(FrontendNode):
template: dict # type: ignore
class ValidatePromptRequest(BaseModel):
name: str
template: str
frontend_node: FrontendNodeRequest
# Build ValidationResponse class for {"imports": {"errors": []}, "function": {"errors": []}}
class CodeValidationResponse(BaseModel):
imports: dict
function: dict
@field_validator('imports')
@classmethod
def validate_imports(cls, v):
return v or {'errors': []}
@field_validator('function')
@classmethod
def validate_function(cls, v):
return v or {'errors': []}
class PromptValidationResponse(BaseModel):
input_variables: list
frontend_node: FrontendNodeRequest
INVALID_CHARACTERS = {
' ',
',',
'.',
':',
';',
'!',
'?',
'/',
'\\',
'(',
')',
'[',
']',
'{',
'}',
}
INVALID_NAMES = {
'input_variables',
'output_parser',
'partial_variables',
'template',
'template_format',
'validate_template',
}
def validate_prompt(template: str):
input_variables = extract_input_variables_from_prompt(template)
# Check if there are invalid characters in the input_variables
input_variables = check_input_variables(input_variables)
if any(var in INVALID_NAMES for var in input_variables):
raise ValueError(
f"Invalid input variables. None of the variables can be named {', '.join(input_variables)}. "
)
try:
PromptTemplate(template=template, input_variables=input_variables)
except Exception as exc:
raise ValueError(str(exc)) from exc
return input_variables
def check_input_variables(input_variables: list):
invalid_chars = []
fixed_variables = []
wrong_variables = []
empty_variables = []
for variable in input_variables:
new_var = variable
# if variable is empty, then we should add that to the wrong variables
if not variable:
empty_variables.append(variable)
continue
# if variable starts with a number we should add that to the invalid chars
# and wrong variables
if variable[0].isdigit():
invalid_chars.append(variable[0])
new_var = new_var.replace(variable[0], '')
wrong_variables.append(variable)
else:
for char in INVALID_CHARACTERS:
if char in variable:
invalid_chars.append(char)
new_var = new_var.replace(char, '')
wrong_variables.append(variable)
fixed_variables.append(new_var)
# If any of the input_variables is not in the fixed_variables, then it means that
# there are invalid characters in the input_variables
if any(var not in fixed_variables for var in input_variables):
error_message = build_error_message(
input_variables,
invalid_chars,
wrong_variables,
fixed_variables,
empty_variables,
)
raise ValueError(error_message)
return input_variables
def build_error_message(
input_variables, invalid_chars, wrong_variables, fixed_variables, empty_variables
):
input_variables_str = ', '.join([f"'{var}'" for var in input_variables])
error_string = f'Invalid input variables: {input_variables_str}. '
if wrong_variables and invalid_chars:
# fix the wrong variables replacing invalid chars and find them in the fixed variables
error_string_vars = 'You can fix them by replacing the invalid characters: '
wvars = wrong_variables.copy()
for i, wrong_var in enumerate(wvars):
for char in invalid_chars:
wrong_var = wrong_var.replace(char, '')
if wrong_var in fixed_variables:
error_string_vars += f"'{wrong_variables[i]}' -> '{wrong_var}'"
error_string += error_string_vars
elif empty_variables:
error_string += f" There are {len(empty_variables)} empty variable{'s' if len(empty_variables) > 1 else ''}."
elif len(set(fixed_variables)) != len(fixed_variables):
error_string += 'There are duplicate variables.'
return error_string
================================================
FILE: src/backend/bisheng/api/v1/callback.py
================================================
import asyncio
import copy
import json
from queue import Queue
from typing import Any, Dict, List, Union
from fastapi import WebSocket
from langchain.callbacks.base import AsyncCallbackHandler, BaseCallbackHandler
from langchain.schema import AgentFinish, LLMResult
from langchain.schema.agent import AgentAction
from langchain.schema.document import Document
from langchain.schema.messages import BaseMessage
from langchain_core.messages import ToolMessage
from bisheng.api.v1.schemas import ChatResponse
from bisheng.database.models.message import ChatMessage as ChatMessageModel
from bisheng.database.models.message import ChatMessageDao
from loguru import logger
# https://github.com/hwchase17/chat-langchain/blob/master/callback.py
class AsyncStreamingLLMCallbackHandler(AsyncCallbackHandler):
"""Callback handler for streaming LLM responses."""
def __init__(self,
websocket: WebSocket,
flow_id: str,
chat_id: str,
user_id: int = None,
**kwargs: Any):
self.websocket = websocket
self.flow_id = flow_id
self.chat_id = chat_id
self.user_id = user_id
# Cache for tool calls intool_endWhen stitching the start and end together, store it in the database
self.tool_cache = {}
# self.tool_cache = {
# 'run_id': {
# 'input': {},
# 'category': "",
# }, # Storage tool callinputMessage
# }
# Queue for Streaming Output
self.stream_queue: Queue = kwargs.get('stream_queue')
async def on_llm_new_token(self, token: str, **kwargs: Any) -> None:
chunk = kwargs.get('chunk')
# azureOccasionally returns aNone
if token is None and chunk is None:
return
reasoning_content = getattr(chunk.message, 'additional_kwargs',
{}).get('reasoning_content')
if token is None:
token = ''
resp = ChatResponse(message={
'content': token,
'reasoning_content': reasoning_content
},
type='stream',
flow_id=self.flow_id,
chat_id=self.chat_id)
# Streaming output is placed in a queue to facilitate recording of content to a database after interrupting the streaming output
await self.websocket.send_json(resp.dict())
if self.stream_queue:
if reasoning_content:
self.stream_queue.put({'type': 'reasoning', 'content': reasoning_content})
if token:
self.stream_queue.put({'type': 'answer', 'content': token})
async def on_llm_start(self, serialized: Dict[str, Any], prompts: List[str],
**kwargs: Any) -> Any:
"""Run when LLM starts running."""
logger.debug(f'llm_start prompts={prompts}')
async def on_llm_end(self, response: LLMResult, **kwargs: Any) -> Any:
"""Run when LLM ends running."""
logger.debug(f'llm_end response={response}')
async def on_llm_error(self, error: Union[Exception, KeyboardInterrupt], **kwargs: Any) -> Any:
"""Run when LLM errors."""
logger.debug(f'on_llm_error error={error} kwargs={kwargs}')
async def on_chain_start(self, serialized: Dict[str, Any], inputs: Dict[str, Any],
**kwargs: Any) -> Any:
"""Run when chain starts running."""
logger.debug(f'on_chain_start inputs={inputs} kwargs={kwargs}')
logger.info('k=s act=on_chain_start flow_id={} input_dict={}', self.flow_id, inputs)
async def on_chain_end(self, outputs: Dict[str, Any], **kwargs: Any) -> Any:
"""Run when chain ends running."""
logger.debug(f'on_chain_end outputs={outputs} kwargs={kwargs}')
tmp_output = copy.deepcopy(outputs)
if isinstance(tmp_output, dict):
tmp_output.pop('source_documents', '')
logger.info('k=s act=on_chain_end flow_id={} output_dict={}', self.flow_id, tmp_output)
async def on_chain_error(self, error: Union[Exception, KeyboardInterrupt],
**kwargs: Any) -> Any:
"""Run when chain errors."""
logger.debug(f'on_chain_error error={error} kwargs={kwargs}')
async def on_tool_start(self, serialized: Dict[str, Any], input_str: str,
**kwargs: Any) -> Any:
"""Run when tool starts running."""
logger.debug(
f'on_tool_start serialized={serialized} input_str={input_str} kwargs={kwargs}')
logger.info('k=s act=on_tool_start flow_id={} tool_name={} input_str={}', self.flow_id,
serialized.get('name'), input_str)
resp = ChatResponse(type='stream',
intermediate_steps=f'Tool input: {input_str}',
flow_id=self.flow_id,
chat_id=self.chat_id)
await self.websocket.send_json(resp.dict())
async def on_tool_end(self, output: str, **kwargs: Any) -> Any:
"""Run when tool ends running."""
logger.debug(f'on_tool_end output={output} kwargs={kwargs}')
logger.info("k=s act=on_tool_end flow_id={} output='{}'", self.flow_id, output)
observation_prefix = kwargs.get('observation_prefix', 'Tool output: ')
# from langchain.docstore.document import Document # noqa
# result = eval(output).get('result')
result = output if isinstance(output, str) else getattr(output, 'content', output)
# Create a formatted message.
intermediate_steps = f'{observation_prefix}{result[:100]}'
# Create a ChatResponse instance.
resp = ChatResponse(type='stream',
intermediate_steps=intermediate_steps,
flow_id=self.flow_id,
chat_id=self.chat_id)
try:
# This is to emulate the stream of tokens
await self.websocket.send_json(resp.dict())
except Exception as e:
logger.error(e)
async def on_tool_error(self, error: Union[Exception, KeyboardInterrupt],
**kwargs: Any) -> Any:
"""Run when tool errors."""
logger.debug(f'on_tool_error error={error} kwargs={kwargs}')
async def on_text(self, text: str, **kwargs: Any) -> Any:
"""Run on arbitrary text."""
# This runs when first sending the prompt
# to the LLM, adding it will send the final prompt
# to the frontend
logger.debug(f'on_text text={text} kwargs={kwargs}')
if 'Prompt after formatting:' in text:
prompt_str = text[24:]
logger.info(
"k=s act=on_text prompt='{}'",
prompt_str,
)
sender = kwargs.get('sender')
receiver = kwargs.get('receiver')
if kwargs.get('sender'):
log = ChatResponse(message=text,
type='end',
sender=sender,
receiver=receiver,
flow_id=self.flow_id,
chat_id=self.chat_id)
start = ChatResponse(type='start',
sender=sender,
receiver=receiver,
flow_id=self.flow_id,
chat_id=self.chat_id)
if receiver and receiver.get('is_self'):
await self.websocket.send_json(log.dict())
else:
await self.websocket.send_json(log.dict())
await self.websocket.send_json(start.dict())
elif 'category' in kwargs:
if 'autogen' == kwargs['category']:
log = ChatResponse(message=text,
type='stream',
flow_id=self.flow_id,
chat_id=self.chat_id)
await self.websocket.send_json(log.dict())
if kwargs.get('type'):
# Under compatibility
start = ChatResponse(type='start',
category=kwargs.get('type'),
flow_id=self.flow_id,
chat_id=self.chat_id)
end = ChatResponse(type='end',
intermediate_steps=text,
category=kwargs.get('type'),
flow_id=self.flow_id,
chat_id=self.chat_id)
await self.websocket.send_json(start.dict())
await self.websocket.send_json(end.dict())
else:
log = ChatResponse(message=text,
intermediate_steps=kwargs['log'],
type=kwargs['type'],
category=kwargs['category'],
flow_id=self.flow_id,
chat_id=self.chat_id)
await self.websocket.send_json(log.dict())
async def on_agent_action(self, action: AgentAction, **kwargs: Any):
logger.debug(f'on_agent_action action={action} kwargs={kwargs}')
logger.info('k=s act=on_agent_action {}', action)
log = f'\nThought: {action.log}'
# if there are line breaks, split them and send them
# as separate messages
log = log.replace('\n', '\n\n')
resp = ChatResponse(type='stream',
intermediate_steps=log,
flow_id=self.flow_id,
chat_id=self.chat_id)
await self.websocket.send_json(resp.dict())
async def on_agent_finish(self, finish: AgentFinish, **kwargs: Any) -> Any:
"""Run on agent end."""
logger.debug(f'on_agent_finish finish={finish} kwargs={kwargs}')
logger.info('k=s act=on_agent_finish {}', finish)
resp = ChatResponse(flow_id=self.flow_id,
chat_id=self.chat_id,
type='stream',
intermediate_steps=finish.log)
await self.websocket.send_json(resp.dict())
async def on_retriever_start(self, serialized: Dict[str, Any], query: str,
**kwargs: Any) -> Any:
"""Run when retriever start running."""
logger.debug(f'on_retriever_start serialized={serialized} query={query} kwargs={kwargs}')
logger.info('k=s act=on_retriever_start flow_id={} query={} meta={}', self.flow_id, query,
serialized.get('repr'))
async def on_retriever_end(self, result: List[Document], **kwargs: Any) -> Any:
"""Run when retriever end running."""
# todo Determine skill permissions
logger.debug(f'on_retriever_end result={result} kwargs={kwargs}')
if result:
tmp_result = copy.deepcopy(result)
[doc.metadata.pop('bbox', '') for doc in tmp_result]
logger.info('k=s act=on_retriever_end flow_id={} result_without_bbox={}', self.flow_id,
tmp_result)
async def on_chat_model_start(self, serialized: Dict[str, Any],
messages: List[List[BaseMessage]], **kwargs: Any) -> Any:
# """Run when retriever end running."""
# content = messages[0][0] if isinstance(messages[0][0], str) else messages[0][0].get('content')
# stream = ChatResponse(message=f'{content}', type='stream')
# await self.websocket.send_json(stream.dict())
logger.debug(
f'on_chat_model_start serialized={serialized} messages={messages} kwargs={kwargs}')
logger.info('k=s act=on_chat_model_start messages={}', messages)
class StreamingLLMCallbackHandler(BaseCallbackHandler):
"""Callback handler for streaming LLM responses."""
def __init__(self,
websocket: WebSocket,
flow_id: str,
chat_id: str,
user_id: int = None,
**kwargs: Any):
self.websocket = websocket
self.flow_id = flow_id
self.chat_id = chat_id
self.user_id = user_id
self.stream_queue: Queue = kwargs.get('stream_queue')
def on_llm_new_token(self, token: str, **kwargs: Any) -> None:
# azureOccasionally returns aNone
if token is None:
return
resp = ChatResponse(message=token,
type='stream',
flow_id=self.flow_id,
chat_id=self.chat_id)
if self.websocket:
loop = asyncio.get_event_loop()
coroutine = self.websocket.send_json(resp.dict())
asyncio.run_coroutine_threadsafe(coroutine, loop)
if self.stream_queue:
self.stream_queue.put(token)
def on_agent_action(self, action: AgentAction, **kwargs: Any) -> Any:
log = f'\nThought: {action.log}'
# if there are line breaks, split them and send them
# as separate messages
log = log.replace('\n', '\n\n')
resp = ChatResponse(type='stream',
intermediate_steps=log,
flow_id=self.flow_id,
chat_id=self.chat_id)
if self.websocket:
loop = asyncio.get_event_loop()
coroutine = self.websocket.send_json(resp.dict())
asyncio.run_coroutine_threadsafe(coroutine, loop)
logger.info('k=s act=on_agent_action {}', action)
def on_agent_finish(self, finish: AgentFinish, **kwargs: Any) -> Any:
"""Run on agent end."""
resp = ChatResponse(type='stream',
intermediate_steps=finish.log,
flow_id=self.flow_id,
chat_id=self.chat_id)
if self.websocket:
loop = asyncio.get_event_loop()
coroutine = self.websocket.send_json(resp.dict())
asyncio.run_coroutine_threadsafe(coroutine, loop)
logger.info('k=s act=on_agent_finish {}', finish)
def on_tool_start(self, serialized: Dict[str, Any], input_str: str, **kwargs: Any) -> Any:
"""Run when tool starts running."""
resp = ChatResponse(type='stream',
intermediate_steps=f'Tool input: {input_str}',
flow_id=self.flow_id,
chat_id=self.chat_id)
if self.websocket:
loop = asyncio.get_event_loop()
coroutine = self.websocket.send_json(resp.dict())
asyncio.run_coroutine_threadsafe(coroutine, loop)
logger.info('k=s act=on_tool_start flow_id={} tool_name={} input_str={}', self.flow_id,
serialized.get('name'), input_str)
def on_tool_end(self, output: str, **kwargs: Any) -> Any:
"""Run when tool ends running."""
observation_prefix = kwargs.get('observation_prefix', 'Tool output: ')
# from langchain.docstore.document import Document # noqa
# result = eval(output).get('result')
result = output if isinstance(output, str) else getattr(output, 'content', output)
# Create a formatted message.
intermediate_steps = f'{observation_prefix}{result}'
# Create a ChatResponse instance.
resp = ChatResponse(type='stream',
intermediate_steps=intermediate_steps,
flow_id=self.flow_id,
chat_id=self.chat_id)
# Try to send the response, handle potential errors.
try:
if self.websocket:
loop = asyncio.get_event_loop()
coroutine = self.websocket.send_json(resp.dict())
asyncio.run_coroutine_threadsafe(coroutine, loop)
except Exception as e:
logger.error(e)
logger.info("k=s act=on_tool_end flow_id={} output='{}'", self.flow_id, output)
def on_retriever_start(self, serialized: Dict[str, Any], query: str, **kwargs: Any) -> Any:
"""Run when retriever start running."""
logger.info('k=s act=on_retriever_start flow_id={} query={} meta={}', self.flow_id, query,
serialized.get('repr'))
def on_retriever_end(self, result: List[Document], **kwargs: Any) -> Any:
"""Run when retriever end running."""
# todo Determine skill permissions
logger.debug(f'retriver_result result={result}')
if result:
tmp_result = copy.deepcopy(result)
[doc.metadata.pop('bbox', '') for doc in tmp_result]
logger.info('k=s act=on_retriever_end flow_id={} result_without_bbox={}', self.flow_id,
tmp_result)
def on_chain_start(self, serialized: Dict[str, Any], inputs: Dict[str, Any],
**kwargs: Any) -> Any:
"""Run when chain starts running."""
logger.debug(f'on_chain_start inputs={inputs}')
logger.info('k=s act=on_chain_start flow_id={} input_dict={}', self.flow_id, inputs)
def on_chain_end(self, outputs: Dict[str, Any], **kwargs: Any) -> Any:
"""Run when chain ends running."""
logger.debug(f'on_chain_end outputs={outputs}')
tmp_output = copy.deepcopy(outputs)
if isinstance(tmp_output, dict):
tmp_output.pop('source_documents', '')
logger.info('k=s act=on_chain_end flow_id={} output_dict={}', self.flow_id, tmp_output)
def on_chat_model_start(self, serialized: Dict[str, Any], messages: List[List[BaseMessage]],
**kwargs: Any) -> Any:
"""Run when retriever end running."""
# sender = kwargs['sender']
# receiver = kwargs['receiver']
# content = messages[0][0] if isinstance(messages[0][0], str) else messages[0][0].get('content')
# end = ChatResponse(message=f'{content}', type='end', sender=sender, recevier=receiver)
# start = ChatResponse(type='start', sender=sender, recevier=receiver)
# loop = asyncio.get_event_loop()
# coroutine2 = self.websocket.send_json(end.dict())
# coroutine3 = self.websocket.send_json(start.dict())
# asyncio.run_coroutine_threadsafe(coroutine2, loop)
# asyncio.run_coroutine_threadsafe(coroutine3, loop)
logger.debug(f'on_chat result={messages}')
logger.info('k=s act=on_chat_model_start messages={}', messages)
def on_text(self, text: str, **kwargs) -> Any:
logger.info(text)
if 'Prompt after formatting:' in text:
prompt_str = text[24:]
logger.info(
"k=s act=on_text prompt='{}'",
prompt_str,
)
class AsyncGptsLLMCallbackHandler(AsyncStreamingLLMCallbackHandler):
async def on_tool_start(self, serialized: Dict[str, Any], input_str: str,
**kwargs: Any) -> Any:
"""Run when tool starts running."""
logger.debug(
f'on_tool_start serialized={serialized} input_str={input_str} kwargs={kwargs}')
pass
async def on_tool_end(self, output: str, **kwargs: Any) -> Any:
"""Run when tool ends running."""
logger.debug(f'on_tool_end output={output} kwargs={kwargs}')
pass
class AsyncGptsDebugCallbackHandler(AsyncGptsLLMCallbackHandler):
@staticmethod
def parse_tool_category(tool_name) -> (str, str):
"""
will betool_nameResolve totool_categoryand the realtool_name
"""
tool_category = 'tool'
if tool_name.startswith('flow_'):
# Description is a skill call
tool_category = 'flow'
tool_name = tool_name.replace('flow_', '')
elif tool_name.startswith('knowledge_'):
# Description is a knowledge base call
tool_category = 'knowledge'
tool_name = tool_name.replace('knowledge_', '')
return tool_name, tool_category
async def on_chat_model_start(self, serialized: Dict[str, Any],
messages: List[List[BaseMessage]], **kwargs: Any) -> Any:
# """Run when retriever end running."""
# content = messages[0][0] if isinstance(messages[0][0], str) else messages[0][0].get('content')
# stream = ChatResponse(message=f'{content}', type='stream')
# await self.websocket.send_json(stream.dict())
logger.debug(
f'on_chat_model_start serialized={serialized} messages={messages} kwargs={kwargs}')
resp = ChatResponse(type='start',
category='processing',
flow_id=self.flow_id,
chat_id=self.chat_id)
await self.websocket.send_json(resp.dict())
async def on_llm_end(self, response: LLMResult, **kwargs: Any) -> Any:
"""Run when LLM ends running."""
logger.debug(f'llm_end response={response}')
resp = ChatResponse(type='end',
category='processing',
flow_id=self.flow_id,
chat_id=self.chat_id)
await self.websocket.send_json(resp.dict())
async def on_llm_error(self, error: Union[Exception, KeyboardInterrupt], **kwargs: Any) -> Any:
"""Run when LLM errors."""
logger.debug(f'on_llm_error error={error} kwargs={kwargs}')
resp = ChatResponse(type='end',
category='processing',
flow_id=self.flow_id,
chat_id=self.chat_id)
await self.websocket.send_json(resp.dict())
async def on_tool_start(self, serialized: Dict[str, Any], input_str: str,
**kwargs: Any) -> Any:
"""Run when tool starts running."""
logger.debug(
f'on_tool_start serialized={serialized} input_str={input_str} kwargs={kwargs}')
input_str = input_str
tool_name, tool_category = self.parse_tool_category(serialized['name'])
input_info = {'tool_key': tool_name, 'serialized': serialized, 'input_str': input_str}
self.tool_cache[kwargs.get('run_id').hex] = {
'input': input_info,
'category': tool_category,
'steps': f'Tool input: \n\n{input_str}\n\n',
}
resp = ChatResponse(type='start',
category=tool_category,
intermediate_steps=self.tool_cache[kwargs.get('run_id').hex]['steps'],
message=json.dumps(input_info, ensure_ascii=False),
flow_id=self.flow_id,
chat_id=self.chat_id,
extra=json.dumps({'run_id': kwargs.get('run_id').hex}))
await self.websocket.send_json(resp.dict())
async def on_tool_end(self, output: ToolMessage, **kwargs: Any) -> Any:
"""Run when tool ends running."""
logger.debug(f'on_tool_end output={output} kwargs={kwargs}')
observation_prefix = kwargs.get('observation_prefix', 'Tool output: ')
result = output if isinstance(output, str) else getattr(output, 'content', output)
# Create a formatted message.
intermediate_steps = f'{observation_prefix}\n\n{result}'
tool_name, tool_category = self.parse_tool_category(kwargs.get('name'))
# Create a ChatResponse instance.
output_info = {'tool_key': tool_name, 'output': result}
resp = ChatResponse(type='end',
category=tool_category,
intermediate_steps=intermediate_steps,
message=json.dumps(output_info, ensure_ascii=False),
flow_id=self.flow_id,
chat_id=self.chat_id,
extra=json.dumps({'run_id': kwargs.get('run_id').hex}))
await self.websocket.send_json(resp.dict())
# FROMtool cacheGet ininputMessage
input_info = self.tool_cache.get(kwargs.get('run_id').hex)
if input_info:
if not self.chat_id:
# Explain that it is a debugging interface and does not need to persist data
self.tool_cache.pop(kwargs.get('run_id').hex)
return
output_info.update(input_info['input'])
intermediate_steps = f'{input_info["steps"]}\n\n{intermediate_steps}'
ChatMessageDao.insert_one(
ChatMessageModel(is_bot=1,
message=json.dumps(output_info),
intermediate_steps=intermediate_steps,
category=tool_category,
type='end',
flow_id=self.flow_id,
chat_id=self.chat_id,
user_id=self.user_id,
extra=json.dumps({'run_id': kwargs.get('run_id').hex})))
self.tool_cache.pop(kwargs.get('run_id').hex)
async def on_tool_error(self, error: Union[Exception, KeyboardInterrupt],
**kwargs: Any) -> Any:
"""Run when tool errors."""
logger.debug(f'on_tool_error error={error} kwargs={kwargs}')
input_info = self.tool_cache.get(kwargs.get('run_id').hex)
if input_info:
output_info = {'output': 'Error: ' + str(error)}
output_info.update(input_info['input'])
resp = ChatResponse(type='end',
category=input_info['category'],
intermediate_steps='\n\nTool output:\n\n Error: ' + str(error),
message=json.dumps(output_info, ensure_ascii=False),
flow_id=self.flow_id,
chat_id=self.chat_id,
extra=json.dumps({'run_id': kwargs.get('run_id').hex}))
await self.websocket.send_json(resp.dict())
# Save tool call history
if not self.chat_id:
# Explain that it is a debugging interface and does not need to persist data
self.tool_cache.pop(kwargs.get('run_id').hex)
return
tool_name, tool_category = self.parse_tool_category(kwargs.get('name'))
self.tool_cache.pop(kwargs.get('run_id').hex)
ChatMessageDao.insert_one(
ChatMessageModel(
is_bot=1,
message=json.dumps(output_info),
intermediate_steps=f'{input_info["steps"]}\n\nTool output:\n\n Error: ' +
str(error),
category=tool_category,
type='end',
flow_id=self.flow_id,
chat_id=self.chat_id,
user_id=self.user_id,
extra=json.dumps({'run_id': kwargs.get('run_id').hex})))
================================================
FILE: src/backend/bisheng/api/v1/chat.py
================================================
import asyncio
import json
from typing import List, Optional, Union
from uuid import UUID, uuid4
from fastapi import (APIRouter, Body, HTTPException, Query, Request, WebSocket, WebSocketException)
from fastapi.params import Depends
from fastapi.responses import StreamingResponse
from loguru import logger
from bisheng.api.services.audit_log import AuditLogService
from bisheng.api.services.base import BaseService
from bisheng.api.services.chat_imp import comment_answer
from bisheng.api.services.knowledge_imp import delete_es, delete_vector
from bisheng.api.services.workflow import WorkFlowService
from bisheng.api.utils import build_flow, build_input_keys_response
from bisheng.api.v1.schema.base_schema import PageList
from bisheng.api.v1.schema.chat_schema import AppChatList
from bisheng.api.v1.schema.workflow import WorkflowEventType
from bisheng.api.v1.schemas import (AddChatMessages, BuildStatus, BuiltResponse, ChatInput,
ChatList, InitResponse, StreamData,
UnifiedResponseModel, resp_200)
from bisheng.chat.manager import ChatManager
from bisheng.chat_session.domain.chat import ChatSessionService
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum, ApplicationTypeEnum
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.chat import ChatServiceError, SkillDeletedError, SkillNotBuildError, SkillNotOnlineError
from bisheng.common.errcode.http_error import NotFoundError, UnAuthorizedError, ServerError
from bisheng.common.schemas.telemetry.event_data_schema import NewMessageSessionEventData, DeleteMessageSessionEventData
from bisheng.common.services import telemetry_service
from bisheng.core.cache.redis_manager import get_redis_client
from bisheng.core.database import get_sync_db_session
from bisheng.core.logger import trace_id_var
from bisheng.database.models.assistant import AssistantDao
from bisheng.database.models.flow import Flow, FlowDao, FlowStatus, FlowType
from bisheng.database.models.flow_version import FlowVersionDao
from bisheng.database.models.mark_record import MarkRecordDao, MarkRecordStatus
from bisheng.database.models.mark_task import MarkTaskDao
from bisheng.database.models.message import ChatMessage, ChatMessageDao, LikedType
from bisheng.database.models.session import MessageSession, MessageSessionDao, SensitiveStatus
from bisheng.database.models.user_group import UserGroupDao
from bisheng.graph.graph.base import Graph
from bisheng.share_link.api.dependencies import header_share_token_parser
from bisheng.share_link.domain.models.share_link import ShareLink
from bisheng.user.domain.models.user import UserDao
from bisheng.utils import get_request_ip
from bisheng.utils.util import get_cache_key
router = APIRouter(tags=['Chat'])
chat_manager = ChatManager()
expire = 600 # reids 60s Overdue
@router.get('/chat/app/list')
def get_app_chat_list(*,
keyword: Optional[str] = None,
mark_user: Optional[str] = None,
mark_status: Optional[int] = None,
task_id: Optional[int] = Query(default=None, description='Callout TaskID'),
flow_type: Optional[int] = None,
page_num: Optional[int] = 1,
page_size: Optional[int] = 20,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" By annotating tasksIDGet the corresponding session list """
group_flow_ids = []
flow_ids, user_ids = [], []
user_groups = UserGroupDao.get_user_admin_group(login_user.user_id)
if task_id:
if not login_user.is_admin():
task = MarkTaskDao.get_task_byid(task_id)
if str(login_user.user_id) not in task.process_users.split(','):
raise UnAuthorizedError()
# Determine if it is a user group administrator
if user_groups:
task = MarkTaskDao.get_task_byid(task_id)
group_flow_ids = task.app_id.split(',')
# group_flow_ids.extend([app_id for one in t_list for app_id in one.app_id.split(",")])
if not group_flow_ids:
return resp_200(PageList(list=[], total=0))
else:
task = MarkTaskDao.get_task_byid(task_id)
if str(login_user.user_id) not in task.process_users.split(','):
raise UnAuthorizedError()
# Normal
# user_ids = [login_user.user_id]
group_flow_ids = MarkTaskDao.get_task_byid(task_id).app_id.split(',')
else:
group_flow_ids = MarkTaskDao.get_task_byid(task_id).app_id.split(',')
if keyword:
flows = FlowDao.get_flow_list_by_name(name=keyword)
assistants, _ = AssistantDao.get_all_assistants(name=keyword, page=0, limit=0)
users = UserDao.search_user_by_name(user_name=keyword)
if flows:
flow_ids = [flow.id for flow in flows]
if assistants:
flow_ids.extend([assistant.id for assistant in assistants])
if user_ids:
user_ids = [user.user_id for user in users]
# Retrieval content is empty
if not flow_ids and not user_ids:
return resp_200(PageList(list=[], total=0))
if group_flow_ids:
if flow_ids and keyword:
flow_ids = flow_ids
else:
flow_ids = group_flow_ids
# Get session list
res = MessageSessionDao.filter_session(flow_ids=flow_ids, user_ids=user_ids)
total = len(res)
# Query the status of a session
chat_status_ids = [one.chat_id for one in res]
chat_status_ids = MarkRecordDao.filter_records(task_id=task_id, chat_ids=chat_status_ids)
chat_status_ids = {one.session_id: one for one in chat_status_ids}
result = []
for one in res:
tmp = AppChatList(
chat_id=one.chat_id,
flow_id=one.flow_id,
flow_name=one.flow_name,
flow_type=one.flow_type,
user_id=one.user_id,
user_name=one.user_id,
create_time=one.create_time,
like_count=one.like,
dislike_count=one.dislike,
copied_count=one.copied,
mark_status=MarkRecordStatus.DEFAULT.value,
mark_user=None,
)
if mark_info := chat_status_ids.get(one.chat_id):
tmp.mark_id = mark_info.create_id
tmp.mark_status = mark_info.status if mark_info.status is not None else 1
tmp.mark_user = mark_info.create_user
if mark_status:
if mark_status != tmp.mark_status:
continue
if mark_user:
users = [int(one) for one in mark_user.split(',')]
if tmp.mark_id not in users:
continue
result.append(tmp)
result = result[(page_num - 1) * page_size: page_num * page_size]
return resp_200(PageList(list=result, total=total))
@router.get('/chat/history')
async def get_chat_message(*,
chat_id: str,
flow_id: str,
id: Optional[str] = None,
page_size: Optional[int] = 20,
login_user: UserPayload = Depends(UserPayload.get_login_user),
share_link: Union['ShareLink', None] = Depends(header_share_token_parser)):
history = await ChatSessionService.get_chat_history(chat_id, flow_id, id, page_size)
# # Authorization check
if history and login_user.user_id != history[0].user_id:
if not share_link or share_link.resource_id != chat_id:
return UnAuthorizedError.return_resp()
return resp_200(history)
@router.get('/chat/info')
async def get_chat_info(chat_id: str = Query(..., description='Session Uniqueid,chai_id')):
""" Setujuchat_idGet session details """
res = await MessageSessionDao.async_get_one(chat_id)
res.flow_logo = WorkFlowService.get_logo_share_link(res.flow_logo)
return resp_200(res)
@router.post('/chat/conversation/rename')
def rename(conversationId: str = Body(..., description='Sessionsid', embed=True),
name: str = Body(..., description='Session name', embed=True),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
conversation = MessageSessionDao.get_one(conversationId)
conversation.flow_name = name
MessageSessionDao.insert_one(conversation)
return resp_200()
@router.post('/chat/conversation/copy')
def copy(conversationId: str = Body(..., description='Sessionsid', embed=True), ):
conversation = MessageSessionDao.get_one(conversationId)
conversation.chat_id = uuid4().hex
conversation = MessageSessionDao.insert_one(conversation)
if conversation.flow_type == FlowType.FLOW.value:
app_type = ApplicationTypeEnum.SKILL
elif conversation.flow_type == FlowType.WORKFLOW.value:
app_type = ApplicationTypeEnum.WORKFLOW
elif conversation.flow_type == FlowType.ASSISTANT.value:
app_type = ApplicationTypeEnum.ASSISTANT
elif conversation.flow_type == FlowType.LINSIGHT.value:
app_type = ApplicationTypeEnum.LINSIGHT
else:
app_type = ApplicationTypeEnum.DAILY_CHAT
# RecordTelemetryJournal
telemetry_service.log_event_sync(user_id=conversation.user_id,
event_type=BaseTelemetryTypeEnum.NEW_MESSAGE_SESSION,
trace_id=trace_id_var.get(),
event_data=NewMessageSessionEventData(
session_id=conversation.chat_id,
app_id=conversation.flow_id,
source="platform",
app_name=conversation.flow_name,
app_type=app_type
))
msg_list = ChatMessageDao.get_messages_by_chat_id(conversationId)
if msg_list:
for msg in msg_list:
msg.chat_id = conversation.chat_id
msg.id = None
ChatMessageDao.insert_one(msg)
@router.delete('/chat/{chat_id}', status_code=200)
async def del_chat_id(*,
request: Request,
chat_id: str,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
# Get a message
session_chat = await MessageSessionDao.async_get_one(chat_id)
if not session_chat or session_chat.is_delete:
return resp_200()
if session_chat.flow_type == FlowType.FLOW.value:
# Processing Temporary Data
col_name = f'tmp_{session_chat.flow_id}_{chat_id}'
logger.info('tmp_delete_milvus col={}', col_name)
await asyncio.to_thread(delete_vector, collection_name=col_name, partition_key=None)
await asyncio.to_thread(delete_es, col_name)
if session_chat.flow_type == FlowType.ASSISTANT.value:
assistant_info = await AssistantDao.aget_one_assistant(session_chat.flow_id)
if assistant_info:
await AuditLogService.delete_chat_assistant(login_user, get_request_ip(request), assistant_info)
elif session_chat.flow_type == FlowType.WORKSTATION.value:
await AuditLogService.delete_chat_message(login_user, get_request_ip(request), session_chat)
else:
# Determine whether it is an assistant or a skill, Write Audit Log
flow_info = await FlowDao.aget_flow_by_id(session_chat.flow_id)
if flow_info and flow_info.flow_type == FlowType.FLOW.value:
await AuditLogService.delete_chat_flow(login_user, get_request_ip(request), flow_info)
elif flow_info:
await AuditLogService.delete_chat_workflow(login_user, get_request_ip(request), flow_info)
# Set the delete state of the session
await MessageSessionDao.delete_session(chat_id)
# RecordTelemetryJournal
await telemetry_service.log_event(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.DELETE_MESSAGE_SESSION,
trace_id=trace_id_var.get(),
event_data=DeleteMessageSessionEventData(session_id=chat_id)
)
return resp_200()
@router.post('/chat/message', status_code=200)
def add_chat_messages(*,
request: Request,
data: AddChatMessages,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Add a full Q&A record, Security Check Write Usage
"""
logger.debug(f'gateway add_chat_messages {data}')
flow_id = data.flow_id
chat_id = data.chat_id
if not chat_id or not flow_id:
raise ServerError.http_exception()
save_human_message = data.human_message
flow_info = FlowDao.get_flow_by_id(flow_id)
if flow_info and flow_info.flow_type == FlowType.WORKFLOW.value:
# The input of the workflow, the actual input needs to be parsed from the input
try:
tmp_human_message = json.loads(data.human_message)
for node_id, node_input in tmp_human_message.items():
save_human_message = node_input.get('message')
except:
save_human_message = data.human_message
human_message = ChatMessage(flow_id=flow_id,
chat_id=chat_id,
user_id=login_user.user_id,
is_bot=False,
message=save_human_message,
sensitive_status=SensitiveStatus.VIOLATIONS.value,
type='human',
category='question')
bot_message = ChatMessage(flow_id=flow_id,
chat_id=chat_id,
user_id=login_user.user_id,
is_bot=True,
message=data.answer_message,
sensitive_status=SensitiveStatus.PASS.value,
type='bot',
category='answer')
message_dbs = ChatMessageDao.insert_batch([human_message, bot_message])
# Update session status
MessageSessionDao.update_sensitive_status(chat_id, SensitiveStatus.VIOLATIONS)
# Write Audit Log, Determine if it is a new session
session_info = MessageSessionDao.get_one(chat_id=chat_id)
if not session_info:
# New Session
# Determine whether it is an assistant or a skill, Write Audit Log
if flow_info:
session_info = MessageSessionDao.insert_one(MessageSession(
chat_id=chat_id,
flow_id=flow_id,
flow_type=flow_info.flow_type,
flow_name=flow_info.name,
user_id=login_user.user_id,
sensitive_status=SensitiveStatus.VIOLATIONS.value,
))
if flow_info.flow_type == FlowType.FLOW.value:
AuditLogService.create_chat_flow(login_user, get_request_ip(request), flow_id, flow_info)
elif flow_info.flow_type == FlowType.WORKFLOW.value:
AuditLogService.create_chat_workflow(login_user, get_request_ip(request), flow_id, flow_info)
else:
assistant_info = AssistantDao.get_one_assistant(flow_id)
if assistant_info:
session_info = MessageSessionDao.insert_one(MessageSession(
chat_id=chat_id,
flow_id=flow_id,
flow_type=FlowType.ASSISTANT.value,
flow_name=assistant_info.name,
user_id=login_user.user_id,
sensitive_status=SensitiveStatus.VIOLATIONS.value,
))
AuditLogService.create_chat_assistant(login_user, get_request_ip(request),
flow_id)
if session_info:
if session_info.flow_type == FlowType.FLOW.value:
app_type = ApplicationTypeEnum.SKILL
elif session_info.flow_type == FlowType.WORKFLOW.value:
app_type = ApplicationTypeEnum.WORKFLOW
elif session_info.flow_type == FlowType.ASSISTANT.value:
app_type = ApplicationTypeEnum.ASSISTANT
elif session_info.flow_type == FlowType.LINSIGHT.value:
app_type = ApplicationTypeEnum.LINSIGHT
else:
app_type = ApplicationTypeEnum.DAILY_CHAT
# RecordTelemetryJournal
telemetry_service.log_event_sync(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.NEW_MESSAGE_SESSION,
trace_id=trace_id_var.get(),
event_data=NewMessageSessionEventData(
session_id=session_info.session_id,
app_id=flow_id,
source="platform",
app_name=session_info.flow_name,
app_type=app_type
))
return resp_200(data=message_dbs)
@router.put('/chat/message/{message_id}', status_code=200)
def update_chat_message(*,
message_id: int,
message: str = Body(embed=True),
category: str = Body(default=None, embed=True),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Update the content of a message Security Check Usage"""
logger.info(
f'update_chat_message message_id={message_id} message={message} login_user={login_user.user_name}'
)
chat_message = ChatMessageDao.get_message_by_id(message_id)
if not chat_message:
return NotFoundError.return_resp()
if chat_message.user_id != login_user.user_id:
return UnAuthorizedError.return_resp()
chat_message.message = message
if category:
chat_message.category = category
chat_message.source = False
chat_message.sensitive_status = SensitiveStatus.VIOLATIONS.value
ChatMessageDao.update_message_model(chat_message)
MessageSessionDao.update_sensitive_status(chat_message.chat_id, SensitiveStatus.VIOLATIONS)
return resp_200()
@router.delete('/chat/message/{message_id}', status_code=200)
def del_message_id(*, message_id: str, login_user: UserPayload = Depends(UserPayload.get_login_user)):
ChatMessageDao.delete_by_message_id(login_user.user_id, message_id)
return resp_200()
@router.post('/liked', status_code=200)
def like_response(*, data: ChatInput):
message_id = data.message_id
message = ChatMessageDao.get_message_by_id(data.message_id)
if not message:
raise NotFoundError.http_exception()
if message.liked == data.liked:
return resp_200()
like_count = 0
dislike_count = 0
if message.liked == LikedType.UNRATED.value:
if data.liked == LikedType.LIKED.value:
like_count = 1
elif data.liked == LikedType.DISLIKED.value:
dislike_count = 1
elif message.liked == LikedType.LIKED.value:
like_count = -1
if data.liked == LikedType.DISLIKED.value:
dislike_count = 1
elif message.liked == LikedType.DISLIKED.value:
dislike_count = -1
if data.liked == LikedType.LIKED.value:
like_count = 1
message.liked = data.liked
ChatMessageDao.update_message_model(message)
logger.info('k=s act=liked message_id={} liked={}', message_id, data.liked)
# Number of thumbs up and down steps in the update session table
MessageSessionDao.add_like_count(message.chat_id, like_count)
MessageSessionDao.add_dislike_count(message.chat_id, dislike_count)
return resp_200()
@router.post('/chat/copied', status_code=200)
def copied_message(message_id: int = Body(embed=True)):
""" Upload CopymessageData """
message = ChatMessageDao.get_message_by_id(message_id)
if not message:
raise NotFoundError.http_exception()
if message.copied != 1:
ChatMessageDao.update_message_copied(message_id, 1)
MessageSessionDao.add_copied_count(message.chat_id, 1)
return resp_200()
@router.post('/chat/comment', status_code=200)
def comment_resp(*, data: ChatInput):
comment_answer(data.message_id, data.comment)
return resp_200()
@router.get('/chat/list')
def get_session_list(page: Optional[int] = Query(default=1, ge=1, le=1000),
limit: Optional[int] = Query(default=10, ge=1, le=100),
flow_type: Optional[List[int]] = Query(default=None, description='Abilities Category'),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
res = MessageSessionDao.filter_session(user_ids=[login_user.user_id],
flow_type=flow_type,
page=page,
limit=limit,
include_delete=False)
chat_ids = []
flow_ids = []
for one in res:
chat_ids.append(one.chat_id)
flow_ids.append(one.flow_id)
flow_list = FlowDao.get_flow_by_ids(flow_ids)
assistant_list = AssistantDao.get_assistants_by_ids(flow_ids)
logo_map = {one.id: BaseService.get_logo_share_link(one.logo) for one in flow_list}
logo_map.update({one.id: BaseService.get_logo_share_link(one.logo) for one in assistant_list})
latest_messages = ChatMessageDao.get_latest_message_by_chat_ids(chat_ids,
exclude_category=WorkflowEventType.UserInput.value)
latest_messages = {one.chat_id: one for one in latest_messages}
return resp_200([
ChatList(
chat_id=one.chat_id,
flow_id=one.flow_id,
flow_name=one.flow_name,
flow_type=one.flow_type,
logo=logo_map.get(one.flow_id, ''),
latest_message=latest_messages.get(one.chat_id, None),
create_time=one.create_time,
update_time=one.update_time) for one in res
])
# Access to all live skills and assistants
@router.get('/chat/online')
def get_online_chat(*,
keyword: Optional[str] = None,
tag_id: Optional[int] = None,
page: Optional[int] = 1,
limit: Optional[int] = 10,
user: UserPayload = Depends(UserPayload.get_login_user)):
data, _ = WorkFlowService.get_all_flows(user, keyword, FlowStatus.ONLINE.value, tag_id, None, page, limit)
return resp_200(data=data)
@router.websocket('/chat/{flow_id}')
async def chat(
*,
flow_id: UUID,
websocket: WebSocket,
chat_id: Optional[str] = None,
version_id: Optional[int] = None,
login_user: UserPayload = Depends(UserPayload.get_login_user_from_ws),
):
"""Websocket endpoint for chat."""
flow_id = flow_id.hex
redis_client = await get_redis_client()
try:
user_id = login_user.user_id
if chat_id:
with get_sync_db_session() as session:
db_flow = session.get(Flow, flow_id)
if not db_flow:
await websocket.accept()
await SkillDeletedError().websocket_close_message(websocket=websocket)
if db_flow.status != 2:
await websocket.accept()
await SkillNotOnlineError().websocket_close_message(websocket=websocket)
graph_data = db_flow.data
else:
flow_data_key = 'flow_data_' + flow_id
if version_id:
flow_data_key = flow_data_key + '_' + str(version_id)
if not await redis_client.aexists(flow_data_key) or str(
await redis_client.ahget(flow_data_key, 'status'),
'utf-8') != BuildStatus.SUCCESS.value:
await websocket.accept()
await SkillNotBuildError().websocket_close_message(websocket=websocket)
return
graph_data = json.loads(await redis_client.ahget(flow_data_key, 'graph_data'))
if not chat_id:
# When debugging, initialize the object every time
chat_manager.set_cache(get_cache_key(flow_id, chat_id), None)
trace_id_var.set(chat_id)
logger.info('websocket_verify_ok begin=handle_websocket')
await chat_manager.handle_websocket(flow_id,
chat_id,
websocket,
user_id,
gragh_data=graph_data)
except WebSocketException as exc:
await ChatServiceError(exception=exc).websocket_close_message(websocket=websocket)
except Exception as exc:
logger.exception(f'Error in chat websocket: {str(exc)}')
messsage = exc.detail if isinstance(exc, HTTPException) else str(exc)
await ChatServiceError(exception=Exception(messsage)).websocket_close_message(websocket=websocket)
@router.post('/build/init/{flow_id}')
async def init_build(*,
graph_data: dict,
flow_id: str,
version_id: Optional[int] = Query(default=None, description='Skill VersionID')):
"""Initialize the build by storing graph data and returning a unique session ID."""
chat_id = graph_data.get('chat_id')
flow_data_key = 'flow_data_' + flow_id
flow_data_store = await get_redis_client()
if chat_id:
with get_sync_db_session() as session:
graph_data = session.get(Flow, flow_id).data
elif version_id:
flow_data_key = flow_data_key + '_' + str(version_id)
graph_data = FlowVersionDao.get_version_by_id(version_id).data
try:
if flow_id is None:
raise NotFoundError()
# Check if already building
if await flow_data_store.ahget(flow_data_key, 'status') == BuildStatus.IN_PROGRESS.value:
return resp_200(InitResponse(flowId=flow_id))
# Delete from cache if already exists
await flow_data_store.ahset(flow_data_key,
mapping={
'graph_data': json.dumps(graph_data),
'status': BuildStatus.STARTED.value
},
expiration=expire)
return resp_200(InitResponse(flowId=flow_id))
except Exception as exc:
logger.error(exc)
return HTTPException(status_code=500, detail=str(exc))
@router.get('/build/{flow_id}/status', response_model=UnifiedResponseModel[BuiltResponse])
async def build_status(flow_id: str,
chat_id: Optional[str] = None,
version_id: Optional[int] = Query(default=None, description='Skill VersionID')):
"""Check the flow_id is in the flow_data_store."""
try:
flow_data_store = await get_redis_client()
flow_data_key = 'flow_data_' + flow_id
if not chat_id and version_id:
flow_data_key = flow_data_key + '_' + str(version_id)
built = (await flow_data_store.ahget(flow_data_key, 'status') == BuildStatus.SUCCESS.value)
return resp_200(BuiltResponse(built=built, ))
except Exception as exc:
logger.error(exc)
return HTTPException(status_code=500, detail=str(exc))
@router.get('/build/stream/{flow_id}', response_class=StreamingResponse)
async def stream_build(flow_id: str,
chat_id: Optional[str] = None,
version_id: Optional[int] = Query(default=None, description='Skill VersionID')):
"""Stream the build process based on stored flow data."""
async def event_stream(flow_id, chat_id: str, version_id: Optional[int] = None):
final_response = {'end_of_stream': True}
artifacts = {}
flow_data_store = await get_redis_client()
try:
flow_data_key = 'flow_data_' + flow_id
if not chat_id and version_id:
flow_data_key = flow_data_key + '_' + str(version_id)
if not await flow_data_store.aexists(flow_data_key):
error_message = 'Invalid session ID'
yield str(StreamData(event='error', data={'error': error_message}))
return
if await flow_data_store.ahget(flow_data_key, 'status') == BuildStatus.IN_PROGRESS.value:
error_message = 'Already building'
yield str(StreamData(event='error', data={'error': error_message}))
return
graph_data = json.loads(await flow_data_store.ahget(flow_data_key, 'graph_data'))
if not graph_data:
error_message = 'No data provided'
yield str(StreamData(event='error', data={'error': error_message}))
return
logger.debug('Building langchain object')
await flow_data_store.ahsetkey(flow_data_key, 'status', BuildStatus.IN_PROGRESS.value, expire)
# L1 Users, usingbuildProcess
try:
async for message in build_flow(graph_data=graph_data,
artifacts=artifacts,
process_file=False,
flow_id=flow_id,
chat_id=chat_id):
if isinstance(message, Graph):
graph = message
else:
yield message
except Exception as e:
logger.error(f'Build flow error: {e}')
await flow_data_store.ahsetkey(flow_data_key,
'status',
BuildStatus.FAILURE.value,
expiration=expire)
yield str(StreamData(event='error', data={'error': str(e)}))
return
await graph.abuild()
# Now we need to check the input_keys to send them to the client
input_keys_response = {
'input_keys': [],
'memory_keys': [],
'handle_keys': [],
}
input_nodes = graph.get_input_nodes()
for node in input_nodes:
if hasattr(await node.get_result(), 'input_keys'):
input_keys = build_input_keys_response(await node.get_result(), artifacts)
input_keys['input_keys'].update({'id': node.id})
input_keys_response['input_keys'].append(input_keys.get('input_keys'))
input_keys_response['memory_keys'].extend(input_keys.get('memory_keys'))
input_keys_response['handle_keys'].extend(input_keys.get('handle_keys'))
elif ('fileNode' in node.output):
input_keys_response['input_keys'].append({
'file_path': '',
'type': 'file',
'id': node.id
})
yield str(StreamData(event='message', data=input_keys_response))
# We need to reset the chat history
chat_manager.chat_history.empty_history(flow_id, chat_id)
chat_manager.set_cache(get_cache_key(flow_id=flow_id, chat_id=chat_id), None)
await flow_data_store.ahsetkey(flow_data_key, 'status', BuildStatus.SUCCESS.value, expire)
except Exception as exc:
logger.exception(exc)
logger.error('Error while building the flow: %s', exc)
await flow_data_store.ahsetkey(flow_data_key, 'status', BuildStatus.FAILURE.value, expire)
yield str(StreamData(event='error', data={'error': str(exc)}))
finally:
yield str(StreamData(event='message', data=final_response))
try:
return StreamingResponse(event_stream(flow_id, chat_id, version_id),
media_type='text/event-stream')
except Exception as exc:
logger.error(exc)
raise HTTPException(status_code=500, detail=str(exc))
================================================
FILE: src/backend/bisheng/api/v1/component.py
================================================
from fastapi import APIRouter, Body, Depends
from bisheng.api.services.component import ComponentService
from bisheng.api.utils import update_frontend_node_with_template_values
from bisheng.api.v1.schemas import (CreateComponentReq, CustomComponentCode, resp_200)
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.database.models.component import Component
from bisheng.interface.custom import CustomComponent
from bisheng.interface.custom.directory_reader import DirectoryReader
from bisheng.interface.custom.utils import build_custom_component_template
router = APIRouter(prefix='/component', tags=['Component'], dependencies=[Depends(UserPayload.get_login_user)])
@router.get('')
def get_all_components(*, login_user: UserPayload = Depends(UserPayload.get_login_user)):
# get login user
return ComponentService.get_all_component(login_user)
@router.post('')
def save_components(*, data: CreateComponentReq, login_user: UserPayload = Depends(UserPayload.get_login_user)):
from bisheng import __version__
# get login user
component = Component(**data.model_dump(),
user_id=login_user.user_id,
user_name=login_user.user_name,
version=__version__)
return ComponentService.save_component(component)
@router.patch('')
def update_component(*, data: CreateComponentReq, login_user: UserPayload = Depends(UserPayload.get_login_user)):
from bisheng import __version__
# get login user
component = Component(**data.model_dump(),
user_id=login_user.user_id,
user_name=login_user.user_name,
version=__version__)
return ComponentService.update_component(component)
@router.delete('')
def delete_component(*,
name: str = Body(..., embed=True, description='Component Name'),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
return ComponentService.delete_component(login_user.user_id, name)
@router.post('/custom_component')
async def custom_component(
raw_code: CustomComponentCode,
login_user: UserPayload = Depends(UserPayload.get_login_user),
):
component = CustomComponent(code=raw_code.code)
built_frontend_node = build_custom_component_template(component, user_id=str(login_user.user_id))
built_frontend_node = update_frontend_node_with_template_values(built_frontend_node,
raw_code.frontend_node)
return resp_200(data=built_frontend_node)
@router.post('/custom_component/reload')
async def reload_custom_component(path: str, login_user: UserPayload = Depends(UserPayload.get_login_user)):
from bisheng.interface.custom.utils import build_custom_component_template
reader = DirectoryReader('')
valid, content = reader.process_file(path)
if not valid:
raise ValueError(content)
extractor = CustomComponent(code=content)
return resp_200(
data=build_custom_component_template(extractor, user_id=str(login_user.user_id)))
@router.post('/custom_component/update')
async def custom_component_update(
raw_code: CustomComponentCode,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
component = CustomComponent(code=raw_code.code)
component_node = build_custom_component_template(component,
user_id=str(login_user.user_id),
update_field=raw_code.field)
# Update the field
return resp_200(data=component_node)
================================================
FILE: src/backend/bisheng/api/v1/dataset.py
================================================
from typing import List
from fastapi import APIRouter, Depends, Request
from bisheng.api.services.dataset_service import DatasetService
from bisheng.api.v1.schema.dataset_param import CreateDatasetParam
from bisheng.api.v1.schemas import UnifiedResponseModel, resp_200
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.database.models.dataset import DatasetRead
# build router
router = APIRouter(prefix='/dataset', tags=['FineTune'])
@router.get('/list', summary='Get dataset list')
def list_dataset(*,
keyword: str = None,
page: int = 1,
limit: int = 10) -> UnifiedResponseModel[List[DatasetRead]]:
"""
Get dataset list
"""
res, count = DatasetService.build_dataset_list(page, limit, keyword)
return resp_200(data={'list': res, 'total': count})
@router.post('/create', summary='Create Dataset')
def create_dataset(
*,
request: Request,
data: CreateDatasetParam,
login_user: UserPayload = Depends(UserPayload.get_login_user),
) -> UnifiedResponseModel:
"""
Create Dataset
"""
dataset = DatasetService.create_dataset(login_user.user_id, data)
return resp_200(data=dataset)
@router.delete('/del', summary='Delete Dataset')
def delete_dataset(
*,
request: Request,
dataset_id: int,
login_user: UserPayload = Depends(UserPayload.get_login_user),
) -> UnifiedResponseModel:
"""
Create Dataset
"""
DatasetService.delete_dataset(dataset_id)
return resp_200()
================================================
FILE: src/backend/bisheng/api/v1/endpoints.py
================================================
import copy
import json
import time
from typing import Annotated, List, Optional, Union
from uuid import UUID
import yaml
from fastapi import APIRouter, Body, Depends, HTTPException, Path, Request, UploadFile
from loguru import logger
from bisheng.api.v1.schemas import (ProcessResponse, UploadFileResponse,
resp_200)
from bisheng.chat.utils import judge_source, process_source_document
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum, ApplicationTypeEnum
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.http_error import NotFoundError
from bisheng.common.errcode.server import SystemConfigEmptyError, SystemConfigInvalidError, UploadFileEmptyError, \
UploadFileExtError
from bisheng.common.models.config import Config, ConfigDao, ConfigKeyEnum
from bisheng.common.schemas.telemetry.event_data_schema import NewMessageSessionEventData, ApplicationAliveEventData, \
ApplicationProcessEventData
from bisheng.common.services import telemetry_service
from bisheng.common.services.config_service import settings as bisheng_settings
from bisheng.core.cache.redis_manager import get_redis_client_sync
from bisheng.core.cache.utils import save_uploaded_file, upload_file_to_minio
from bisheng.core.logger import trace_id_var
from bisheng.database.models.flow import FlowDao, FlowType
from bisheng.database.models.message import ChatMessage, ChatMessageDao
from bisheng.database.models.session import MessageSession, MessageSessionDao
from bisheng.interface.types import get_all_types_dict
from bisheng.open_endpoints.domain.utils import get_default_operator_async
from bisheng.processing.process import process_graph_cached, process_tweaks
from bisheng.services.deps import get_session_service, get_task_service
from bisheng.services.task.service import TaskService
from bisheng.utils import generate_uuid
from bisheng.utils import get_request_ip
try:
from bisheng.worker import process_graph_cached_task
except ImportError:
def process_graph_cached_task(*args, **kwargs):
raise NotImplementedError('Celery is not installed')
# build router
router = APIRouter(tags=['Base'])
if bisheng_settings.debug:
import tracemalloc
import os
import threading
@router.get("/tracemalloc")
def tracemalloc_point():
snapshot = tracemalloc.take_snapshot()
process_id = os.getpid()
thread_id = threading.get_ident()
snapshot.dump(f"/app/data/snapshot_{process_id}_{thread_id}_{time.time()}.prof")
return resp_200()
@router.get('/all')
def get_all():
"""Get all parameters"""
all_types = get_all_types_dict()
return resp_200(all_types)
@router.get('/env')
def get_env():
from bisheng import __version__
"""Get environment variable parameters"""
uns_support = ['doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'txt', 'md', 'html', 'pdf', 'csv']
etl_for_lm_url = bisheng_settings.get_knowledge().etl4lm.url
if etl_for_lm_url:
uns_support.extend(['png', 'jpg', 'jpeg', 'bmp'])
env = {}
if isinstance(bisheng_settings.environment, str):
env['env'] = bisheng_settings.environment
else:
env = copy.deepcopy(bisheng_settings.environment)
env['uns_support'] = uns_support
if bisheng_settings.get_from_db('office_url'):
env['office_url'] = bisheng_settings.get_from_db('office_url')
# add tips from settings
env['dialog_tips'] = bisheng_settings.get_from_db('dialog_tips')
# add env dict from settings
env.update(bisheng_settings.get_from_db('env') or {})
env['pro'] = bisheng_settings.get_system_login_method().bisheng_pro
env['version'] = __version__
env['enable_etl4lm'] = bool(etl_for_lm_url)
return resp_200(env)
@router.get('/config')
def get_config(admin_user: UserPayload = Depends(UserPayload.get_admin_user)):
db_config = ConfigDao.get_config(ConfigKeyEnum.INIT_DB)
config_str = db_config.value if db_config else ''
return resp_200(config_str)
@router.post('/config/save')
def save_config(data: dict, admin_user: UserPayload = Depends(UserPayload.get_admin_user)):
if not data.get('data', '').strip():
raise SystemConfigEmptyError()
try:
# Check for complianceyamlFormat
config = yaml.safe_load(data.get('data'))
# Judging linsight_invitation_code Right?boolean
if isinstance(config, dict) and 'linsight_invitation_code' in config.keys():
if config['linsight_invitation_code'] is not None and bool(config['linsight_invitation_code']) not in [True,
False]:
raise ValueError('linsight_invitation_code must be a boolean value')
db_config = ConfigDao.get_config(ConfigKeyEnum.INIT_DB)
db_config.value = data.get('data')
ConfigDao.insert_config(db_config)
get_redis_client_sync().delete('config:initdb_config')
except Exception as e:
raise SystemConfigInvalidError()
return resp_200()
@router.get('/web/config')
async def get_web_config():
""" Get some configuration items required by the front-end, the content is determined by the front-end """
web_conf = ConfigDao.get_config(ConfigKeyEnum.WEB_CONFIG)
if not web_conf:
return resp_200(data='')
return resp_200(data={'value': web_conf.value})
@router.post('/web/config')
async def update_web_config(request: Request,
admin_user: UserPayload = Depends(UserPayload.get_admin_user),
value: str = Body(embed=True)):
""" Update some configuration items required by the front-end, the content is determined by the front-end """
logger.info(
f'update_web_config user_name={admin_user.user_name}, ip={get_request_ip(request)}')
web_conf = ConfigDao.get_config(ConfigKeyEnum.WEB_CONFIG)
if not web_conf:
web_conf = Config(key=ConfigKeyEnum.WEB_CONFIG.value, value=value)
else:
web_conf.value = value
ConfigDao.insert_config(web_conf)
return resp_200(data={'value': web_conf.value})
@router.post('/process/{flow_id}')
async def process_flow_old(
flow_id: UUID,
inputs: Optional[dict] = None,
tweaks: Optional[dict] = None,
history_count: Annotated[int, Body(embed=True)] = 10,
clear_cache: Annotated[bool, Body(embed=True)] = False, # noqa: F821
session_id: Annotated[Union[None, str], Body(embed=True)] = None, # noqa: F821
task_service: TaskService = Depends(get_task_service),
sync: Annotated[bool, Body(embed=True)] = True,
):
return await process_flow(flow_id, inputs, tweaks, history_count, clear_cache, session_id,
task_service, sync)
# For backwards compatibility we will keep the old endpoint
# @router.post('/predict/{flow_id}')
@router.post('/process')
async def process_flow(
flow_id: Annotated[UUID, Body(embed=True)],
inputs: Optional[dict] = None,
tweaks: Optional[dict] = None,
history_count: Annotated[int, Body(embed=True)] = 10,
clear_cache: Annotated[bool, Body(embed=True)] = False, # noqa: F821
session_id: Annotated[Union[None, str], Body(embed=True)] = None, # noqa: F821
task_service: TaskService = Depends(get_task_service),
sync: Annotated[bool, Body(embed=True)] = True, # noqa: F821
sse: Annotated[bool, Body(embed=True)] = False,
):
"""
Endpoint to process an input with a given flow_id.
"""
if inputs and isinstance(inputs, dict) and 'id' in inputs:
inputs.pop('id')
flow_id = flow_id.hex
logger.info(
f'act=api_call sessionid={session_id} flow_id={flow_id} inputs={inputs} tweaks={tweaks}')
login_user = await get_default_operator_async()
flow = await FlowDao.aget_flow_by_id(flow_id)
if flow is None or flow.data is None:
raise NotFoundError()
start_time = time.time()
if session_id is None:
# Generate a session ID
session_id = get_session_service().generate_key(session_id=session_id,
data_graph=flow.data)
try:
graph_data = flow.data
if tweaks:
try:
graph_data = process_tweaks(graph_data, tweaks)
except Exception as exc:
logger.error(f'Error processing tweaks: {exc}')
# process
if sync:
result = await process_graph_cached(graph_data,
inputs,
clear_cache,
session_id,
history_count=history_count,
flow_id=flow_id)
if isinstance(result, dict) and 'result' in result:
task_result = result['result']
session_id = result['session_id']
elif hasattr(result, 'result') and hasattr(result, 'session_id'):
task_result = result.result
session_id = result.session_id
else:
logger.warning('This is an experimental feature and may not work as expected.'
'Please report any issues to our GitHub repository.')
task_id, task = await task_service.launch_task(
process_graph_cached_task if task_service.use_celery else process_graph_cached,
graph_data,
inputs,
clear_cache,
session_id,
history_count=history_count,
flow_id=flow_id)
if task.status == 'SUCCESS':
task_result = task.result
if hasattr(task_result, 'result'):
task_result = task_result.result
else:
logger.error(f'task_id={task_id} exception task result={task}')
if isinstance(task_result, str):
task_result = {'answer': task_result}
# Judgment traceability
source_documents = task_result.pop('source_documents', '')
answer = list(task_result.values())[0]
extra = {}
source, result = await judge_source(answer, source_documents, session_id, extra)
try:
question = ChatMessage(user_id=login_user.user_id,
is_bot=False,
type='end',
chat_id=session_id,
category='question',
flow_id=flow_id,
message=json.dumps(inputs, ensure_ascii=False))
message = ChatMessage(user_id=login_user.user_id,
is_bot=True,
chat_id=session_id,
flow_id=flow_id,
type='end',
category='answer',
message=answer,
source=source)
ChatMessageDao.insert_one(question)
message = ChatMessageDao.insert_one(message)
try:
MessageSessionDao.insert_one(
MessageSession(
chat_id=session_id,
flow_id=flow_id,
flow_name=flow.name,
flow_type=FlowType.FLOW.value,
user_id=login_user.user_id,
))
# RecordTelemetryJournal
await telemetry_service.log_event(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.NEW_MESSAGE_SESSION,
trace_id=trace_id_var.get(),
event_data=NewMessageSessionEventData(
session_id=session_id,
app_id=flow_id,
source='api',
app_name=flow.name,
app_type=ApplicationTypeEnum.SKILL
)
)
except Exception as e:
logger.warning(f'insert repeat session error: {e}')
extra.update({'source': source, 'message_id': message.id})
if source == 1:
await process_source_document(source_documents, session_id, message.id, answer)
extra.update({
'source_url':
'resouce/{chat_id}/{msg_id}'.format(chat_id=session_id, msg_id=message.id)
})
elif source == 4:
# QA
extra_qa = json.loads(answer.metadata.get('extra'))
extra_qa.pop('answer', None)
extra.update({'doc': [extra_qa]})
task_result.update(extra)
task_result.update({'answer': result})
except Exception as e:
logger.error(e)
return resp_200(
ProcessResponse(
result=task_result,
# task=task_response,
session_id=session_id,
backend=task_service.backend_name,
))
except Exception as e:
# Log stack trace
logger.exception(e)
raise HTTPException(status_code=500, detail=str(e)) from e
finally:
end_time = time.time()
await telemetry_service.log_event(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.APPLICATION_ALIVE,
trace_id=trace_id_var.get(),
event_data=ApplicationAliveEventData(
app_id=flow_id,
app_name=flow.name,
app_type=ApplicationTypeEnum.SKILL,
chat_id=session_id,
start_time=int(start_time),
end_time=int(end_time)))
await telemetry_service.log_event(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.APPLICATION_PROCESS,
trace_id=trace_id_var.get(),
event_data=ApplicationProcessEventData(
app_id=flow_id,
app_name=flow.name,
app_type=ApplicationTypeEnum.SKILL,
chat_id=session_id,
start_time=int(start_time),
end_time=int(end_time),
process_time=int((end_time - start_time) * 1000)
))
async def _upload_file(file: UploadFile, object_name_prefix: str, file_supports: List[str] = None,
bucket_name: str = None) \
-> UploadFileResponse:
if file.size == 0:
raise UploadFileEmptyError()
file_ext = file.filename.split('.')[-1].lower()
if file_supports and file_ext not in file_supports:
raise UploadFileExtError()
object_name = f'{object_name_prefix}/{generate_uuid()}.png'
file_path = await upload_file_to_minio(file, object_name=object_name, bucket_name=bucket_name)
if not isinstance(file_path, str):
file_path = str(file_path)
return UploadFileResponse(
file_path=file_path, # minioAccessible links
relative_path=object_name, # miniohitting the nail on the headobject_name
)
@router.post('/upload/icon')
async def upload_icon(request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
file: UploadFile = None):
try:
bucket = bisheng_settings.object_storage.minio.public_bucket
resp = await _upload_file(file,
object_name_prefix='icon',
file_supports=['jpeg', 'jpg', 'png'],
bucket_name=bucket)
return resp_200(data=resp)
except Exception as e:
raise e
finally:
await file.close()
@router.post('/upload/workflow/{workflow_id}')
async def upload_icon_workflow(request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
file: UploadFile = None,
workflow_id: str = Path(..., description='workflow id')):
try:
bucket = bisheng_settings.object_storage.minio.public_bucket
resp = await _upload_file(file, object_name_prefix=f'workflow/{workflow_id}', bucket_name=bucket)
return resp_200(data=resp)
except Exception as e:
raise e
finally:
await file.close()
@router.post('/upload/{flow_id}')
async def create_upload_file(file: UploadFile, flow_id: str):
# Cache file
try:
if len(file.filename) > 80:
file.filename = file.filename[-80:]
file_path = await save_uploaded_file(file, folder_name=flow_id, file_name=file.filename)
if not isinstance(file_path, str):
file_path = str(file_path)
return resp_200(UploadFileResponse(
flowId=flow_id,
file_path=file_path,
))
except Exception as exc:
logger.error(f'Error saving file: {exc}')
raise HTTPException(status_code=500, detail=str(exc)) from exc
finally:
await file.close()
# get endpoint to return version of bisheng
@router.get('/version')
def get_version():
from bisheng import __version__
return resp_200({'version': __version__})
================================================
FILE: src/backend/bisheng/api/v1/evaluation.py
================================================
import io
from typing import Optional
from datasets import Dataset
from fastapi import APIRouter, Depends, Query, UploadFile, Form, BackgroundTasks
from bisheng.api.services.evaluation import EvaluationService, add_evaluation_task
from bisheng.api.v1.schemas import resp_200
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.server import UploadFileExtError
from bisheng.core.cache.utils import convert_encoding_cchardet
from bisheng.core.database import get_sync_db_session
from bisheng.core.storage.minio.minio_manager import get_minio_storage
from bisheng.database.models.evaluation import EvaluationCreate, Evaluation
router = APIRouter(prefix='/evaluation', tags=['Evaluation'], dependencies=[Depends(UserPayload.get_login_user)])
@router.get('')
def get_evaluation(*,
page: Optional[int] = Query(default=1, gt=0, description='Page'),
limit: Optional[int] = Query(default=10, gt=0, description='Listings Per Page'),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Get a list of assessment tasks. """
return EvaluationService.get_evaluation(login_user, page, limit)
@router.post('')
def create_evaluation(*,
file: UploadFile,
prompt: str = Form(),
exec_type: str = Form(),
unique_id: str = Form(),
version: Optional[int | str] = Form(default=None),
background_tasks: BackgroundTasks,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Create Assessment Task. """
try:
user_id = login_user.user_id
if not version:
version = 0
try:
# Try transcoding
output_file = convert_encoding_cchardet(file.file.read(), 'utf-8')
csv_data = EvaluationService.parse_csv(file_data=output_file)
data_samples = {
"question": [one.get('question') for one in csv_data],
"answer": [one.get('answer') for one in csv_data],
"ground_truths": [[one.get('ground_truth')] for one in csv_data]
}
dataset = Dataset.from_dict(data_samples)
except Exception:
raise UploadFileExtError()
finally:
file.file.seek(0)
file_name, file_path = EvaluationService.upload_file(file=file)
db_evaluation = Evaluation.model_validate(EvaluationCreate(unique_id=unique_id,
exec_type=exec_type,
version=version,
prompt=prompt,
user_id=user_id,
file_name=file_name,
file_path=file_path))
with get_sync_db_session() as session:
session.add(db_evaluation)
session.commit()
session.refresh(db_evaluation)
background_tasks.add_task(add_evaluation_task, evaluation_id=db_evaluation.id)
return resp_200(db_evaluation.copy())
except Exception as e:
raise e
finally:
file.file.close()
@router.delete('/{evaluation_id}', status_code=200)
def delete_evaluation(*, evaluation_id: int, login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Delete Assessment Task (Logical Delete). """
return EvaluationService.delete_evaluation(evaluation_id, user_payload=login_user)
@router.get('/result/file/download')
async def get_download_url(*,
file_url: str,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Get file download address. """
minio_client = await get_minio_storage()
download_url = await minio_client.get_share_link(file_url)
return resp_200(data={
'url': download_url
})
@router.post('/{evaluation_id}/process', status_code=200)
def process_evaluation(*, evaluation_id: int, background_tasks: BackgroundTasks,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Perform assessment tasks manually. """
background_tasks.add_task(add_evaluation_task, evaluation_id=evaluation_id)
return resp_200()
================================================
FILE: src/backend/bisheng/api/v1/flows.py
================================================
import json
from typing import Any, Union
from fastapi import APIRouter, Depends, HTTPException, Query, Request
from loguru import logger
from starlette.responses import StreamingResponse
from bisheng.api.services.flow import FlowService
from bisheng.api.utils import build_flow_no_yield, remove_api_keys
from bisheng.api.v1.schemas import (FlowCompareReq, FlowVersionCreate, StreamData, resp_200)
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.flow import FlowOnlineEditError, FlowNameExistsError
from bisheng.common.errcode.http_error import UnAuthorizedError, ServerError, NotFoundError
from bisheng.common.services import telemetry_service
from bisheng.common.services.config_service import settings
from bisheng.core.database import get_async_db_session
from bisheng.core.logger import trace_id_var
from bisheng.database.models.flow import (Flow, FlowCreate, FlowDao, FlowRead, FlowType, FlowUpdate)
from bisheng.database.models.flow_version import FlowVersionDao
from bisheng.database.models.role_access import AccessType
from bisheng.share_link.api.dependencies import header_share_token_parser
from bisheng.share_link.domain.models.share_link import ShareLink
# build router
router = APIRouter(prefix='/flows', tags=['Flows'], dependencies=[Depends(UserPayload.get_login_user)])
@router.post('/', status_code=201)
def create_flow(*, request: Request, flow: FlowCreate, login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""Create a new flow."""
# Determine if the user repeats the skill name
exist_flow = FlowDao.get_flow_by_name(login_user.user_id, flow.name)
if exist_flow:
raise FlowNameExistsError()
flow.user_id = login_user.user_id
db_flow = Flow.model_validate(flow)
# Create New Skill
db_flow = FlowDao.create_flow(db_flow, FlowType.FLOW.value)
current_version = FlowVersionDao.get_version_by_flow(db_flow.id)
ret = FlowRead.model_validate(db_flow)
ret.version_id = current_version.id
FlowService.create_flow_hook(request, login_user, db_flow, ret.version_id)
return resp_200(data=ret)
@router.get('/versions', status_code=200)
def get_versions(*, flow_id: str, login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Get a list of versions for your skill
"""
return FlowService.get_version_list_by_flow(login_user, flow_id)
@router.post('/versions', status_code=200)
async def create_versions(*,
flow_id: str,
flow_version: FlowVersionCreate,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Create New Skill Version
"""
return await FlowService.create_new_version(login_user, flow_id, flow_version)
@router.put('/versions/{version_id}', status_code=200)
async def update_versions(*,
request: Request,
version_id: int,
flow_version: FlowVersionCreate,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Update to version
"""
return await FlowService.update_version_info(request, login_user, version_id, flow_version)
@router.delete('/versions/{version_id}', status_code=200)
def delete_versions(*, version_id: int, login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Remove Version
"""
return FlowService.delete_version(login_user, version_id)
@router.get('/versions/{version_id}', status_code=200)
def get_version_info(*, version_id: int, login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Get Version Info
"""
return FlowService.get_version_info(login_user, version_id)
@router.post('/change_version', status_code=200)
async def change_version(*,
request: Request,
flow_id: str = Query(default=None, description='Skill UniqueID'),
version_id: int = Query(default=None, description='Current version that needs to be setID'),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Modify Current Version
"""
return await FlowService.change_current_version(request, login_user, flow_id, version_id)
@router.get('/', status_code=200)
def read_flows(*,
name: str = Query(default=None, description='accordingnameFind databases with fuzzy searches for descriptions'),
tag_id: int = Query(default=None, description='labelID'),
page_size: int = Query(default=10, description='Items per page'),
page_num: int = Query(default=1, description='Page'),
status: int = None,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""Read all flows."""
return FlowService.get_all_flows(login_user, name, status, tag_id, page_num, page_size)
@router.get('/{flow_id}')
async def read_flow(*, flow_id: str, login_user: UserPayload = Depends(UserPayload.get_login_user),
share_link: Union['ShareLink', None] = Depends(header_share_token_parser)):
"""Read a flow."""
return await FlowService.get_one_flow(login_user, flow_id, share_link)
@router.patch('/{flow_id}')
async def update_flow(*,
request: Request,
flow_id: str,
flow: FlowUpdate,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""Update a flow."""
db_flow = await FlowDao.aget_flow_by_id(flow_id)
if not db_flow:
raise HTTPException(status_code=404, detail='Flow not found')
if not await login_user.async_access_check(db_flow.user_id, flow_id, AccessType.FLOW_WRITE):
return UnAuthorizedError.return_resp()
flow_data = flow.model_dump(exclude_unset=True)
if 'status' in flow_data and flow_data['status'] == 2 and db_flow.status == 1:
# On-line verification
try:
art = {}
await build_flow_no_yield(graph_data=db_flow.data,
artifacts=art,
process_file=False,
flow_id=flow_id)
except Exception as exc:
logger.exception(exc)
raise ServerError(exception=exc)
if db_flow.status == 2 and ('status' not in flow_data or flow_data['status'] != 1):
raise FlowOnlineEditError.http_exception()
if settings.remove_api_keys:
flow_data = remove_api_keys(flow_data)
for key, value in flow_data.items():
if key in ['data', 'create_time', 'update_time']:
continue
if key == 'logo' and not value:
continue
setattr(db_flow, key, value)
async with get_async_db_session() as session:
session.add(db_flow)
await session.commit()
await session.refresh(db_flow)
await FlowService.update_flow_hook(request, login_user, db_flow)
return resp_200(db_flow)
@router.delete('/{flow_id}', status_code=200)
def delete_flow(*,
request: Request,
flow_id: str,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""Delete a flow."""
db_flow = FlowDao.get_flow_by_id(flow_id)
if not db_flow:
raise NotFoundError()
access_type = AccessType.FLOW_WRITE
if db_flow.flow_type == FlowType.WORKFLOW.value:
access_type = AccessType.WORKFLOW_WRITE
if not login_user.access_check(db_flow.user_id, flow_id, access_type):
return UnAuthorizedError.return_resp()
FlowDao.delete_flow(db_flow)
telemetry_service.log_event_sync(
user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.DELETE_APPLICATION,
trace_id=trace_id_var.get()
)
FlowService.delete_flow_hook(request, login_user, db_flow)
return resp_200()
@router.post('/compare')
async def compare_flow_node(*, item: FlowCompareReq, login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Skills Multiple Versions Comparison """
return await FlowService.compare_flow_node(login_user, item)
@router.get('/compare/stream', status_code=200, response_class=StreamingResponse)
async def compare_flow_node_stream(*,
data: Any = Query(description='Comparing the required datajsonSerialized string'),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Skills Multiple Versions Comparison """
item = FlowCompareReq(**json.loads(data))
async def event_stream(req: FlowCompareReq):
yield str(StreamData(event='message', data={'type': 'start', 'data': 'start'}))
try:
async for one in FlowService.compare_flow_stream(login_user, req):
yield one
yield str(StreamData(event='message', data={'type': 'end', 'data': ''}))
except Exception as e:
logger.exception('compare flow stream error')
yield ServerError(exception=e).to_sse_event_instance_str()
try:
return StreamingResponse(event_stream(item), media_type='text/event-stream')
except Exception as exc:
logger.error(exc)
raise ServerError()
================================================
FILE: src/backend/bisheng/api/v1/invite_code.py
================================================
from fastapi import APIRouter, Depends, Body, Request
from loguru import logger
from bisheng.api.services.invite_code.invite_code import InviteCodeService
from bisheng.api.v1.schemas import resp_200
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.utils import get_request_ip
router = APIRouter(prefix='/invite', tags=['InviteCode'])
@router.post('/code')
async def create_invite_code(request: Request, login_user: UserPayload = Depends(UserPayload.get_admin_user),
name: str = Body(..., description='Batch'),
num: int = Body(..., description='Number of invitation codes in the current batch'),
limit: int = Body(..., description='Current batch invite code usage limit')):
"""
Create an invite code
"""
logger.debug(
f"create invite code user_id: {login_user.user_id}, ip: {get_request_ip(request)}, name: {name}, num: {num}, limit: {limit}")
codes = await InviteCodeService.create_batch_invite_codes(login_user, name, num, limit)
return resp_200(data={
"name": name,
"limit": limit,
"codes": codes
})
@router.post('/bind')
async def bind_invite_code(request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user),
code: str = Body(..., embed=True, description='Invitation Code')):
"""
Binding Invitation Code
"""
result = await InviteCodeService.bind_invite_code(login_user, code)
logger.debug(f"bind_invite_code user_id:{login_user.user_id}, code:{code}, flag:{result}")
return resp_200()
@router.get('/code')
async def get_bind_code_num(request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Get the number of times a valid invitation code bound by a user can be used
"""
num = await InviteCodeService.get_invite_code_num(login_user)
return resp_200(data=num)
================================================
FILE: src/backend/bisheng/api/v1/mark_task.py
================================================
from collections import deque
from typing import Optional
from fastapi import APIRouter, Depends, Request
from loguru import logger
from bisheng.api.v1.schema.mark_schema import MarkData, MarkTaskCreate
from bisheng.api.v1.schemas import resp_200, resp_500
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.database.models.mark_app_user import MarkAppUser, MarkAppUserDao
from bisheng.database.models.mark_record import MarkRecord, MarkRecordDao
from bisheng.database.models.mark_task import MarkTask, MarkTaskDao, MarkTaskRead, MarkTaskStatus
from bisheng.database.models.message import ChatMessageDao
from bisheng.database.models.session import MessageSessionDao
from bisheng.database.models.user_group import UserGroupDao
from bisheng.user.domain.models.user import UserDao
from bisheng.utils.linked_list import DoubleLinkList
router = APIRouter(prefix='/mark', tags=['Mark'])
@router.get('/list')
def list(request: Request,
status: Optional[int] = None,
page_size: int = 10,
page_num: int = 1,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Nonadmin Can only see their own marked and unlabeled
"""
groups = UserGroupDao.get_user_admin_group(login_user.user_id)
if login_user.is_admin():
task_list, count = MarkTaskDao.get_task_list(page_size=page_size, page_num=page_num, status=status,
create_id=None, user_id=None)
else:
task_list, count = MarkTaskDao.get_task_list(page_size=page_size, page_num=page_num, status=status,
create_id=login_user.user_id if groups else None,
user_id=login_user.user_id)
result_list = []
for task in task_list:
record = MarkRecordDao.get_count(task.id)
process_list = []
user_count = {}
for c in task.process_users.split(","):
user = UserDao.get_user(int(c))
process_count = "{}:{}".format(user.user_name, 0)
user_count[int(c)] = process_count
for c in record:
process_count = "{}:{}".format(c.create_user, c.user_count)
user_count[c.create_id] = process_count
for c in user_count:
process_list.append(user_count[c])
result_list.append(MarkTaskRead(**task.model_dump(), mark_process=process_list))
result = {"list": result_list, "total": count}
return resp_200(data=result)
@router.get('/get_status')
async def get_status(task_id: int, chat_id: str,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
record = MarkRecordDao.get_record(task_id, chat_id)
if not record:
return resp_200(data={"status": ""})
if login_user.user_id == record.create_id:
is_self = True
else:
is_self = False
result = {"status": record.status, "is_self": is_self}
return resp_200(result)
@router.post('/create_task')
async def create(task_create: MarkTaskCreate, login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Apps and users are in a many-to-many relationship, relying on one director record
"""
task = MarkTask(create_id=login_user.user_id,
create_user=login_user.user_name,
app_id=",".join(task_create.app_list),
process_users=",".join(task_create.user_list)
)
MarkTaskDao.create_task(task)
user_app = [MarkAppUser(task_id=task.id, create_id=login_user.user_id, app_id=app, user_id=user) for app in
task_create.app_list for user in task_create.user_list]
MarkAppUserDao.create_task(user_app)
return resp_200(data="ok")
@router.get('/get_user')
async def get_user(task_id: int):
"""
Query under this app All Users
"""
# accordingtype Query different sessions
task = MarkTaskDao.get_task_byid(task_id)
user_list = []
for u in task.process_users.split(","):
user = UserDao.get_user(int(u))
user_list.append(user)
return resp_200(data=user_list)
@router.post('/mark')
async def mark(data: MarkData,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Flag task as current user and cannot be overwritten by others
flow_type flow assistant
"""
# record = MarkRecordDao.get_record(data.task_id,data.session_id)
# if record:
# return resp_500(data="Already flagged")
session_info = MessageSessionDao.get_one(data.session_id)
if session_info:
data.flow_type = session_info.flow_type
db_r = MarkRecordDao.get_record(data.task_id, data.session_id)
if db_r:
if data.status == MarkTaskStatus.DEFAULT.value:
MarkRecordDao.del_task_chat(task_id=db_r.task_id, session_id=db_r.session_id)
return resp_200(data="ok")
db_r.status = data.status
MarkRecordDao.update_record(db_r)
else:
# Not marked No data recorded
if data.status == MarkTaskStatus.DEFAULT.value:
return resp_200(data="ok")
record_info = MarkRecord(create_user=login_user.user_name, create_id=login_user.user_id,
session_id=data.session_id, task_id=data.task_id, status=data.status,
flow_type=data.flow_type)
# Create an article User callout record
MarkRecordDao.create_record(record_info)
task = MarkTaskDao.get_task_byid(task_id=data.task_id)
msg_list = ChatMessageDao.get_msg_by_flows(task.app_id.split(","))
# m_list = [msg.chat_id for msg in msg_list]
m_list = msg_list
r_list = MarkRecordDao.get_list_by_taskid(data.task_id)
app_record = [r.session_id for r in r_list]
m_list = [s.strip() for s in m_list if s.strip()]
app_record = [s.strip() for s in app_record if s.strip()]
m_list.sort()
app_record.sort()
logger.info("m_list={} app_record={}", m_list, app_record)
if m_list == app_record:
MarkTaskDao.update_task(data.task_id, MarkTaskStatus.DONE.value)
else:
MarkTaskDao.update_task(data.task_id, MarkTaskStatus.ING.value)
return resp_200(data="ok")
@router.get('/get_record')
async def get_record(chat_id: str, task_id: int):
record = MarkRecordDao.get_record(task_id, chat_id)
return resp_200(data=record)
@router.get("/next")
async def pre_or_next(chat_id: str, action: str, task_id: int,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
prev or next
"""
if action not in ["prev", "next"]:
return resp_500(data="actionParameter salah")
result = {"task_id": task_id}
if action == "prev":
record = MarkRecordDao.get_prev_task(login_user.user_id, task_id)
top_queue = deque()
bottom_queue = deque()
if record:
queue = top_queue
for r in record:
if r.session_id == chat_id:
queue = bottom_queue
continue
queue.append(r)
logger.info("top_queue={} bottom_queue={}", top_queue, bottom_queue)
if len(top_queue) == 0 and len(bottom_queue) == 0:
return resp_200()
record = bottom_queue.popleft() if len(bottom_queue) else top_queue.popleft()
chat = MessageSessionDao.get_one(record.session_id)
result["chat_id"] = chat.chat_id
result["flow_type"] = chat.flow_type
result["flow_id"] = chat.flow_id
return resp_200(data=result)
else:
task = MarkTaskDao.get_task_byid(task_id)
record = MarkRecordDao.get_list_by_taskid(task_id)
chat_list = [r.session_id for r in record]
msg = MessageSessionDao.filter_session(flow_ids=task.app_id.split(","), exclude_chats=chat_list)
linked = DoubleLinkList()
k_list = {}
for m in msg:
k_list[m.chat_id] = m
linked.append(m.chat_id)
cur = linked.find(chat_id)
if not k_list:
return resp_200()
logger.info("k_list={} cur={}", k_list, cur)
if cur:
if cur.next is None:
if linked.length() == 1 and linked.head().data == chat_id:
return resp_200()
cur = k_list[linked.head().data]
else:
cur = k_list[cur.next.data]
result["chat_id"] = cur.chat_id
result["flow_id"] = cur.flow_id
result['flow_type'] = cur.flow_type
return resp_200(data=result)
else:
cur = k_list[linked.head().data]
result['flow_type'] = cur.flow_type
result["chat_id"] = cur.chat_id
result["flow_id"] = cur.flow_id
return resp_200(data=result)
return resp_200()
@router.delete('/del')
def del_task(request: Request, task_id: int, login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Nonadmin Can only see their own marked and unlabeled
"""
MarkTaskDao.delete_task(task_id)
MarkRecordDao.del_record(task_id)
return resp_200(data="ok")
================================================
FILE: src/backend/bisheng/api/v1/report.py
================================================
from fastapi import APIRouter, HTTPException
from loguru import logger
from sqlalchemy import or_
from sqlmodel import select
from bisheng.api.v1.schemas import resp_200
from bisheng.core.database import get_sync_db_session
from bisheng.core.storage.minio.minio_manager import get_minio_storage
from bisheng.database.models.report import Report
from bisheng.utils import generate_uuid
from bisheng_langchain.utils.requests import Requests
# build router
router = APIRouter(prefix='/report', tags=['report'])
mino_prefix = 'report/'
@router.post('/callback')
async def callback(data: dict):
status = data.get('status')
file_url = data.get('url')
key = data.get('key')
logger.debug(f'calback={data}')
if status in {2, 6}:
# Save Back
logger.info(f'office_callback url={file_url}')
file = Requests().get(url=file_url)
object_name = mino_prefix + key + '.docx'
minio_client = await get_minio_storage()
await minio_client.put_object(bucket_name=minio_client.bucket,
object_name=object_name, file=file._content,
content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document') # noqa
# Duplicate save,key Data Update Error
with get_sync_db_session() as session:
db_report = session.exec(
select(Report).where(or_(Report.version_key == key,
Report.newversion_key == key))).first()
if not db_report:
logger.error(f'report_callback cannot find the flow_id flow_id={key}')
raise HTTPException(status_code=500, detail='cannot find the flow_id')
db_report.object_name = object_name
db_report.version_key = key
db_report.newversion_key = None
with get_sync_db_session() as session:
session.add(db_report)
session.commit()
return {'error': 0}
@router.get('/report_temp')
async def get_template(*, flow_id: str):
with get_sync_db_session() as session:
db_report = session.exec(
select(Report).where(Report.flow_id == flow_id,
Report.del_yn == 0).order_by(Report.update_time.desc())).first()
file_url = ''
if not db_report:
db_report = Report(flow_id=flow_id)
elif db_report.object_name:
minio_client = await get_minio_storage()
file_url = await minio_client.get_share_link(db_report.object_name, clear_host=False)
if not db_report.newversion_key or not db_report.object_name:
version_key = generate_uuid()
db_report.newversion_key = version_key
with get_sync_db_session() as session:
session.add(db_report)
session.commit()
session.refresh(db_report)
else:
version_key = db_report.newversion_key
res = {
'flow_id': flow_id,
'temp_url': file_url,
'original_version': db_report.version_key,
'version_key': version_key,
}
return resp_200(res)
================================================
FILE: src/backend/bisheng/api/v1/schema/base_schema.py
================================================
from typing import Generic, List, TypeVar
from pydantic import BaseModel
# Create generic variables
DataT = TypeVar('DataT')
class PageList(BaseModel, Generic[DataT]):
list: List[DataT]
total: int
================================================
FILE: src/backend/bisheng/api/v1/schema/chat_schema.py
================================================
import json
from datetime import datetime
from typing import Any, Dict, List, Optional
from pydantic import BaseModel, field_validator
from bisheng.database.models.message import ChatMessage, ChatMessageQuery
from bisheng.database.models.session import MessageSession
from bisheng.user.domain.models.user import User
class AppChatList(BaseModel):
flow_name: str
user_name: str
user_id: int
chat_id: str
flow_id: str
flow_type: int
create_time: datetime
like_count: Optional[int] = None
dislike_count: Optional[int] = None
copied_count: Optional[int] = None
sensitive_status: Optional[int] = None # Sensitive word review status
user_groups: Optional[List[Any]] = None # Groups to which the user belongs
mark_user: Optional[str] = None
mark_status: Optional[int] = None
mark_id: Optional[int] = None
messages: Optional[List[dict]] = None # All message list data for the session
@field_validator('user_name', mode='before')
@classmethod
def convert_user_name(cls, v: Any):
if not isinstance(v, str):
return str(v)
return v
class APIAddQAParam(BaseModel):
question: str
answer: List[str]
relative_questions: Optional[List[str]] = []
class UseKnowledgeBaseParam(BaseModel):
personal_knowledge_enabled: Optional[bool] = False
organization_knowledge_ids: Optional[List[int]] = []
@field_validator('organization_knowledge_ids', mode='before')
@classmethod
def convert_organization_knowledge_ids(cls, v: Any):
if len(v) > 20:
raise ValueError('Can only be used up to20organization knowledge base')
return v
class APIChatCompletion(BaseModel):
clientTimestamp: str
conversationId: Optional[str] = None
error: Optional[bool] = False
generation: Optional[str] = ''
isCreatedByUser: Optional[bool] = False
isContinued: Optional[bool] = False
model: str
text: Optional[str] = ''
search_enabled: Optional[bool] = False
use_knowledge_base: Optional[UseKnowledgeBaseParam] = None
files: Optional[List[Dict]] = None
parentMessageId: Optional[str] = None
overrideParentMessageId: Optional[str] = None
responseMessageId: Optional[str] = None
class delta(BaseModel):
id: Optional[str]
delta: Dict
class SSEResponse(BaseModel):
event: str
data: delta
def toString(self) -> str:
return f'event: message\ndata: {json.dumps(self.dict())}\n\n'
class ChatMessageHistoryResponse(ChatMessageQuery):
user_name: Optional[str] = None
flow_name: Optional[str] = None
@classmethod
def from_chat_message_objs(cls, chat_messages: List[ChatMessage], user_model: User,
message_session: MessageSession):
return [
cls.model_validate(obj).model_copy(
update={"user_name": user_model.user_name, "flow_name": message_session.flow_name}) for obj in
chat_messages
]
================================================
FILE: src/backend/bisheng/api/v1/schema/dataset_param.py
================================================
from ast import List
from typing import Optional
from pydantic import BaseModel
class CreateDatasetParam(BaseModel):
name: str
description: str
file_url: Optional[str]
qa_list: Optional[List[str]]
================================================
FILE: src/backend/bisheng/api/v1/schema/knowledge.py
================================================
from typing import Optional
from bisheng.knowledge.domain.models.knowledge_file import KnowledgeFileBase
from pydantic import Field
class KnowledgeFileResp(KnowledgeFileBase):
id: Optional[int] = Field(default=None)
title: Optional[str] = Field(default=None, description="Document Summary")
================================================
FILE: src/backend/bisheng/api/v1/schema/mark_schema.py
================================================
from typing import List, Optional, Any
from pydantic import BaseModel, Field, field_validator
class MarkTaskCreate(BaseModel):
app_list: List[str] = Field(max_length=30)
user_list: List[str]
@field_validator('user_list', mode='before')
@classmethod
def convert_user_list(cls, v: Any):
ret = []
for one in v:
if isinstance(one, str):
ret.append(one)
else:
ret.append(str(one))
return ret
class MarkData(BaseModel):
session_id: str
task_id: int
status: int
flow_type: Optional[int] = None
================================================
FILE: src/backend/bisheng/api/v1/schema/workflow.py
================================================
from enum import Enum
from typing import Optional, Any, List
from pydantic import BaseModel, Field, field_validator
class WorkflowEventType(Enum):
NodeRun = 'node_run'
# Ice Breaker
GuideWord = 'guide_word'
# Facilitation Questions
GuideQuestion = 'guide_question'
# Inform the user that user input is now required
UserInput = 'input'
# Output events that return predefined content to the user
OutputMsg = 'output_msg'
# Output requires user input at the same time
OutputWithInput = 'output_with_input_msg'
# Output requires user selection at the same time
OutputWithChoose = 'output_with_choose_msg'
# Streaming output events, including streaming process, streaming end two states
StreamMsg = 'stream_msg'
Close = 'close'
Error = 'error'
class WorkflowOutputSchema(BaseModel):
message: Any = Field(default=None, description='The message content')
reasoning_content: Optional[str] = Field(default=None, description='The reasoning content')
output_key: Optional[str] = Field(default=None, description='output message key')
files: Optional[List[Any]] = Field(default=None, description='The files list')
source_url: Optional[str] = Field(default=None, description='The document source url, is web url')
extra: Optional[str] = Field(default=None, description='The extra data')
class WorkflowInputItem(BaseModel):
key: str = Field(default=None, description='Unique key corresponding to user input')
type: str = Field(default=None, description='The input type, select or dialog or file')
value: Any = Field(default=None, description='The input default value')
label: str = Field(default=None, description='The key label')
multiple: bool = Field(default=False, description='The input is multi select')
required: bool = Field(default=False, description='The input is required')
options: Optional[Any] = Field(default=None, description='The select type options')
file_type: Optional[str] = Field(default=None, description='The allow upload file type')
class WorkflowInputSchema(BaseModel):
input_type: str = Field(default=None, description='The judge user input is dialog or form')
value: List[WorkflowInputItem] = Field(default=None, description='The input schema items')
class WorkflowEvent(BaseModel):
event: str = Field(default=None, description='The event type')
message_id: Optional[str] = Field(default=None, description='message id for save into mysql')
status: Optional[str] = Field(default='end', description='The event status')
node_id: Optional[str] = Field(default=None, description='The node id')
node_name: Optional[str] = Field(default=None, description='The node name')
node_execution_id: Optional[str] = Field(default=None, description='The node exec unique id')
output_schema: Optional[WorkflowOutputSchema] = Field(default=None, description='The output schema')
input_schema: Optional[WorkflowInputSchema] = Field(default=None, description='The input schema')
@field_validator('message_id', mode='before')
@classmethod
def validate_message_id(cls, v: Any) -> Optional[str]:
if isinstance(v, str) or v is None:
return v
return str(v)
class WorkflowStream(BaseModel):
session_id: str = Field(default=None, description='The session id')
data: WorkflowEvent | list[WorkflowEvent] = Field(default=None, description='The event data or event data list')
================================================
FILE: src/backend/bisheng/api/v1/schemas.py
================================================
from datetime import datetime
from enum import Enum
from typing import Any, Dict, Generic, List, Optional, TypeVar, Union
from langchain.docstore.document import Document
from orjson import orjson
from pydantic import BaseModel, Field, model_validator, field_validator
from bisheng.database.models.assistant import AssistantBase
from bisheng.database.models.flow import FlowCreate, FlowRead
from bisheng.database.models.message import ChatMessageRead
from bisheng.database.models.tag import Tag
from bisheng.knowledge.domain.models.knowledge import KnowledgeRead
from bisheng.knowledge.domain.schemas.knowledge_rag_schema import Metadata
from bisheng.tool.domain.models.gpts_tools import GptsToolsRead
class CaptchaInput(BaseModel):
captcha_key: str
captcha: str
class ChunkInput(BaseModel):
knowledge_id: int
documents: List[Document]
class BuildStatus(Enum):
"""Status of the build."""
SUCCESS = 'success'
FAILURE = 'failure'
STARTED = 'started'
IN_PROGRESS = 'in_progress'
class GraphData(BaseModel):
"""Data inside the exported flow."""
nodes: List[Dict[str, Any]]
edges: List[Dict[str, Any]]
class ExportedFlow(BaseModel):
"""Exported flow from bisheng."""
description: str
name: str
id: str
data: GraphData
class InputRequest(BaseModel):
input: str = Field(description='question or command asked LLM to do')
class TweaksRequest(BaseModel):
tweaks: Optional[Dict[str, Dict[str, str]]] = Field(default_factory=dict, description='List of dictionaries')
class UpdateTemplateRequest(BaseModel):
template: dict
# Create generic variables
DataT = TypeVar('DataT')
class UnifiedResponseModel(BaseModel, Generic[DataT]):
"""Unified Response Model"""
status_code: int
status_message: str
data: DataT = None
def resp_200(data: Union[list, dict, str, Any] = None,
message: str = 'SUCCESS') -> UnifiedResponseModel:
"""Success code"""
return UnifiedResponseModel(status_code=200, status_message=message, data=data)
# return data
def resp_500(code: int = 500,
data: Union[list, dict, str, Any] = None,
message: str = 'BAD REQUEST') -> UnifiedResponseModel:
"""Wrong logical response"""
return UnifiedResponseModel(status_code=code, status_message=message, data=data)
class ProcessResponse(BaseModel):
"""Process response schema."""
result: Any = None
# task: Optional[TaskResponse] = None
session_id: Optional[str] = None
backend: Optional[str] = None
class ChatInput(BaseModel):
message_id: int
comment: str = None
liked: int = 0
class AddChatMessages(BaseModel):
"""Add a pair of chat messages."""
flow_id: str # Skills or assistantsID
chat_id: str # SessionsID
human_message: str = None # User Questions
answer_message: str = None # Execution Status
class ChatList(BaseModel):
"""Chat message list."""
flow_name: str = None
flow_description: str = None
flow_id: str = None
chat_id: str = None
create_time: datetime = None
update_time: datetime = None
flow_type: int = None
latest_message: Optional[ChatMessageRead] = None
logo: Optional[str] = None
class FlowGptsOnlineList(BaseModel):
id: str = Field('Uniqueness quantificationID')
name: str = None
desc: str = None
logo: str = None
create_time: datetime = None
update_time: datetime = None
flow_type: str = None # flow: Skill assistant:gptsassistant
count: int = 0
class ChatMessage(BaseModel):
"""Chat message schema."""
is_bot: bool = False
message: Union[str, None, dict, list] = ''
type: str = 'human'
category: str = 'processing' # system processing answer tool
intermediate_steps: Optional[str] = None
files: Optional[list] = []
user_id: Optional[int] = None
message_id: Optional[int | str] = None
source: Optional[int] = 0
sender: Optional[str] = None
receiver: Optional[dict] = None
liked: int = 0
extra: Optional[str | dict] = '{}'
flow_id: Optional[str] = None
chat_id: Optional[str] = None
class ChatResponse(ChatMessage):
"""Chat response schema."""
intermediate_steps: Optional[str] = ''
is_bot: bool | int = True
category: str = 'processing'
@field_validator('type')
@classmethod
def validate_message_type(cls, v):
"""
end_cover: End & Overwrite Previousmessage
"""
if v not in [
'start', 'stream', 'end', 'error', 'info', 'file', 'begin', 'close', 'end_cover',
'over'
]:
raise ValueError('type must be start, stream, end, error, info, or file')
return v
class FileResponse(ChatMessage):
"""File response schema."""
data: Any = None
data_type: str
type: str = 'file'
is_bot: bool = True
@field_validator('data_type')
@classmethod
def validate_data_type(cls, v):
if v not in ['image', 'csv']:
raise ValueError('data_type must be image or csv')
return v
class FlowListCreate(BaseModel):
flows: List[FlowCreate]
class FlowListRead(BaseModel):
flows: List[FlowRead]
class InitResponse(BaseModel):
flowId: str
class BuiltResponse(BaseModel):
built: bool
class UploadFileResponse(BaseModel):
"""Upload file response schema."""
flowId: Optional[str] = None
file_path: str
relative_path: Optional[str] = None # minioRelative path, i.e.object_name
file_name: Optional[str] = None
repeat: bool = False # Duplicate in Knowledge Base
repeat_file_name: Optional[str] = None # Returns the file name of a duplicate file if it is a duplicate
repeat_update_time: Optional[datetime] = None # Returns the update time of a duplicate file if it is a duplicate
class StreamData(BaseModel):
event: str
data: dict | str
def __str__(self) -> str:
if isinstance(self.data, dict):
return f'event: {self.event}\ndata: {orjson.dumps(self.data).decode()}\n\n'
return f'event: {self.event}\ndata: {self.data}\n\n'
class CreateComponentReq(BaseModel):
name: str = Field(max_length=50, description='Component Name')
data: Any = Field(default='', description='Component Data')
description: Optional[str] = Field(default='', description='DESCRIPTION')
class CustomComponentCode(BaseModel):
code: str
field: Optional[str] = None
frontend_node: Optional[dict] = None
class AssistantCreateReq(BaseModel):
name: str = Field(max_length=50, description='The assistant name.')
prompt: str = Field(min_length=20, max_length=1000, description='Helper Prompt')
logo: str = Field(description='logoRelative address of the file')
class AssistantUpdateReq(BaseModel):
id: str = Field(description='assistantID')
name: Optional[str] = Field('', description='The assistant name. Leave empty to not update')
desc: Optional[str] = Field('', description='Assistant description Leave empty to not update')
logo: Optional[str] = Field('', description='logoRelative address of the file, empty to not update')
prompt: Optional[str] = Field('', description='Visible to Userprompt, Leave empty to not update')
guide_word: Optional[str] = Field('', description='Ice Breaker Leave empty to not update')
guide_question: Optional[List] = Field([], description='Guided Question List, Leave empty to not update')
model_name: Optional[str] = Field('', description='Selected model name, Leave empty to not update')
temperature: Optional[float] = Field(None, description='Model Temperature, Do not pass or do not update')
max_token: Optional[int] = Field(32000, description='MaxtokenQuantity Do not pass or do not update')
tool_list: List[int] | None = Field(default=None,
description='Tools for assistantsIDVertical,An empty list empties the bound tool forNonethen do not update')
flow_list: List[str] | None = Field(default=None,
description="Assistant's SkillsIDVertical,An empty list clears the bound skills forNonethen do not update")
knowledge_list: List[int] | None = Field(default=None,
description='The knowledge base uponIDlist, forNonethen do not update')
@field_validator('model_name', mode='before')
@classmethod
def convert_model_name(cls, v):
return str(v)
class AssistantSimpleInfo(BaseModel):
id: str
name: str
desc: str
logo: str
user_id: int
user_name: str
status: int
flow_type: Optional[int] = None
write: Optional[bool] = Field(default=False)
group_ids: Optional[List[int]] = None
tags: Optional[List[Tag]] = None
create_time: datetime
update_time: datetime
class AssistantInfo(AssistantBase):
tool_list: List[GptsToolsRead] = Field(default_factory=list, description='Tools for assistantsIDVertical')
flow_list: List[FlowRead] = Field(default_factory=list, description='Skills for assistantsIDVertical')
knowledge_list: List[KnowledgeRead] = Field(default_factory=list, description='The knowledge base uponIDVertical')
class FlowVersionCreate(BaseModel):
name: Optional[str] = Field(default=None, description='Version Name')
description: Optional[str] = Field(default=None, description='Version description')
data: Optional[Dict] = Field(default=None, description='Skill Version Node Data Data')
original_version_id: Optional[int] = Field(default=None, description='Version Source VersionID')
flow_type: Optional[int] = Field(default=1, description='Type of version') # 1:common version 10:new Version
class FlowCompareReq(BaseModel):
inputs: Any = Field(default=None, description='Inputs Required for Skill Run')
question_list: List[str] = Field(default_factory=list, description='TestcaseVertical')
version_list: List[int] = Field(default_factory=list, description='Compare VersionsIDVertical')
node_id: str = Field(default=None, description='The nodes that need to be compared are uniqueID')
thread_num: Optional[int] = Field(default=1, description='Compare Threads')
class DeleteToolTypeReq(BaseModel):
tool_type_id: int = Field(description='Tool category to deleteID')
class GroupAndRoles(BaseModel):
group_id: int
role_ids: List[int]
class CreateUserReq(BaseModel):
user_name: str = Field(max_length=30, description='Username')
password: str = Field(description='Passwords')
group_roles: List[GroupAndRoles] = Field(description='List of user groups and roles to join')
class OpenAIChatCompletionReq(BaseModel):
messages: List[dict] = Field(...,
description='Chat message list, only supporteduser、assistant。systemUse data from within the database')
model: str = Field(..., description='The only assistantID')
n: int = Field(default=1,
description='Number of answers returned, The assistant side defaults to1, multiple answers are not supported at this time')
stream: bool = Field(default=False, description='Whether to turn on streaming replies')
temperature: float = Field(default=0.0,
description="Model Temperature, Incoming0or don't post means don't overwrite")
tools: List[dict] = Field(default_factory=list,
description='Tools List, The assistant is temporarily unsupported, use the configuration of the assistant')
class OpenAIChoice(BaseModel):
index: int = Field(..., description='Index of options')
message: dict = Field(default=None, description='The corresponding message content matches the format of the input')
finish_reason: str = Field(default='stop', description='End Reason, Assistants onlystop')
delta: dict = Field(default=None, description='counterpart'sopenaiStreaming Return Message Content')
class OpenAIChatCompletionResp(BaseModel):
id: str = Field(..., description='The only one requestedID')
object: str = Field(default='chat.completion', description='Type of posts to return.')
created: int = Field(default=..., description='Returned creation timestamp')
model: str = Field(..., description="returned model, corresponding to the assistant'sid")
choices: List[OpenAIChoice] = Field(..., description='Back to answers list')
usage: dict = Field(default=None, description='Various of concerntokenQuantity, Assistant This value is empty')
system_fingerprint: Optional[str] = Field(default=None, description='System Fingerprint')
class Icon(BaseModel):
enabled: bool
image: Optional[str] = None
relative_path: Optional[str] = None
class WSModel(BaseModel):
key: Optional[str] = None
id: str
name: Optional[str] = None
displayName: Optional[str] = None
visual: Optional[bool] = False
class WSPrompt(BaseModel):
enabled: bool
prompt: Optional[str] = None
model: Optional[str] = None
tool: Optional[str] = None # Enumeration of tools
params: Optional[dict] = None # Tools Input Parameters
bingKey: Optional[str] = None
bingUrl: Optional[str] = None
class LinsightConfig(BaseModel):
"""
Ideas Management Configuration
"""
linsight_entry: bool = Field(default=True, description='Whether to open the Ideas entrance')
input_placeholder: str = Field(..., description='Input Box Prompt')
tools: Optional[List[Dict]] = Field(None, description='List of optional tools for Ideas')
class WorkstationConfig(BaseModel):
maxTokens: Optional[int] = Field(default=1500, description='MaxtokenQuantity')
sidebarIcon: Optional[Icon] = None
assistantIcon: Optional[Icon] = None
sidebarSlogan: Optional[str] = Field(default='', description='Sidebarslogan')
welcomeMessage: Optional[str] = Field(default='')
functionDescription: Optional[str] = Field(default='')
inputPlaceholder: Optional[str] = ''
models: Optional[Union[List[WSModel], str]] = None
voiceInput: Optional[WSPrompt] = None
webSearch: Optional[WSPrompt] = None
knowledgeBase: Optional[WSPrompt] = None
fileUpload: Optional[WSPrompt] = None
systemPrompt: Optional[str] = None
applicationCenterWelcomeMessage: Optional[str] = Field(default='', max_length=1000,
pattern=r'^[\u4e00-\u9fff\w\s\.,;:!@#$%^&*()\-_=+\[\]{}|\\\'"<>/?`~·!¥()【】、《》,。;:“”‘’?]+$',
description='App Center Welcome Message')
applicationCenterDescription: Optional[str] = Field(default='', max_length=1000,
pattern=r'^[\u4e00-\u9fff\w\s\.,;:!@#$%^&*()\-_=+\[\]{}|\\\'"<>/?`~·!¥()【】、《》,。;:“”‘’?]+$',
description='App Center Description')
linsightConfig: Optional[LinsightConfig] = Field(default=None, description='Inspiration Configuration')
class ExcelRule(BaseModel):
slice_length: Optional[int] = Field(default=10, description='Data Line')
header_start_row: Optional[int] = Field(default=1, description='Table header start')
header_end_row: Optional[int] = Field(default=1, description='End of header')
append_header: Optional[int] = Field(default=1, description='Whether to add a header')
# File Split Request Base Parameters
class FileProcessBase(BaseModel):
knowledge_id: int = Field(..., description='The knowledge base uponID')
separator: Optional[List[str]] = Field(default=None,
description='Split text rule, If not passed on, it is the default')
separator_rule: Optional[List[str]] = Field(default=None,
description='Segmentation before or after the segmentation rule;before/after')
chunk_size: Optional[int] = Field(default=1000, description='Split text length, default if not passed')
chunk_overlap: Optional[int] = Field(default=100, description='Split text overlap length, default if not passed')
retain_images: Optional[int] = Field(default=1, description='Keep document image')
force_ocr: Optional[int] = Field(default=0, description='EnableOCR')
enable_formula: Optional[int] = Field(default=1, description='latexFormula Recognition')
filter_page_header_footer: Optional[int] = Field(default=0, description='Filter Header Footer')
excel_rule: Optional[ExcelRule] = Field(default=None, description="excel rule")
cache: Optional[bool] = Field(default=True,
description='Whether to fetch data from the cache when previewing the document')
@model_validator(mode='before')
@classmethod
def check_separator_rule(cls, values: Any):
if not values.get('separator', None):
values['separator'] = ['\n\n', '\n']
if not values.get('separator_rule', None):
values['separator_rule'] = ['after' for _ in values['separator']]
if values.get('chunk_size', None) is None:
values['chunk_size'] = 1000
if values.get('chunk_overlap') is None:
values['chunk_overlap'] = 100
if values.get('filter_page_header_footer') is None:
values['filter_page_header_footer'] = 0
if values.get('force_ocr') is None:
values['force_ocr'] = 1
if values.get('enable_formula') is None:
values['enable_formula'] = 1
if values.get("retain_images") is None:
values['retain_images'] = 1
if values.get("excel_rule") is None:
values['excel_rule'] = ExcelRule()
if values.get("knowledge_id") is None:
raise ValueError('knowledge_id is required')
return values
# File chunked data format
class FileChunk(BaseModel):
text: str = Field(..., description='Text block Content')
parse_type: Optional[str] = Field(default=None, description='File parsing type to which the text belongs')
metadata: Metadata = Field(..., description='Text block metadata')
# Preview File Chunked Content Request Parameters
class PreviewFileChunk(FileProcessBase):
file_path: str = Field(..., description='FilePath')
cache: bool = Field(default=True, description='Whether to fetch from cache')
excel_rule: Optional[ExcelRule] = Field(default=None, description="excel rule")
class UpdatePreviewFileChunk(BaseModel):
knowledge_id: int = Field(..., description='The knowledge base uponID')
file_path: str = Field(..., description='FilePath')
text: str = Field(..., description='Text block Content')
chunk_index: int = Field(..., description='Text block index, Insidemetadatamile')
bbox: Optional[str] = Field(default='', description='Text blocksbboxMessage')
class KnowledgeFileOne(BaseModel):
file_path: str = Field(..., description='FilePath')
excel_rule: Optional[ExcelRule] = Field(default=None, description="Excel rules")
# Knowledge Base File Processing
class KnowledgeFileProcess(FileProcessBase):
file_list: List[KnowledgeFileOne] = Field(..., description='List of files')
callback_url: Optional[str] = Field(default=None, description='Asynchronous Task Callback Address')
extra: Optional[str] = Field(default=None, description='Additional Information')
# Knowledge Base Re-Segment Adjustment
class KnowledgeFileReProcess(FileProcessBase):
kb_file_id: int = Field(..., description='Knowledge Base FilesID')
file_path: str = Field(default="", description='FilePath')
excel_rule: Optional[ExcelRule] = Field(default=None, description="Excel rules")
callback_url: Optional[str] = Field(default=None, description='Asynchronous Task Callback Address')
extra: Optional[Dict] = Field(default=None, description='Additional Information')
class FrequentlyUsedChat(BaseModel):
user_link_type: str = Field(..., description='User-associatedtype')
type_detail: str = Field(..., description='User-associatedtype_id')
class UpdateKnowledgeReq(BaseModel):
"""Update Knowledge Base Model Request"""
model_id: int = Field(..., description='embeddingModelsID')
model_type: Optional[str] = Field(default=None,
description='Model type, when not passed on, it will be based onmodel_idAuto Query')
knowledge_id: Optional[int] = Field(default=None,
description='The knowledge base uponID, if empty, update all private repositories')
knowledge_name: Optional[str] = Field(default=None, description='Library Name')
description: Optional[str] = Field(default=None, description='KB Description')
================================================
FILE: src/backend/bisheng/api/v1/skillcenter.py
================================================
from typing import Optional
from fastapi import APIRouter, HTTPException, Depends
from sqlmodel import select
from bisheng.api.utils import remove_api_keys
from bisheng.api.v1.schemas import resp_200
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.flow import FlowTemplateNameError
from bisheng.common.services.config_service import settings
from bisheng.core.database import get_sync_db_session
from bisheng.database.models.flow import Flow
from bisheng.database.models.template import Template, TemplateCreate, TemplateUpdate
# build router
router = APIRouter(prefix='/skill', tags=['Skills'], dependencies=[Depends(UserPayload.get_login_user)])
ORDER_GAP = 65535
@router.post('/template/create')
def create_template(*, template: TemplateCreate):
"""Create a new flow."""
db_template = Template.model_validate(template)
if not db_template.data:
with get_sync_db_session() as session:
db_flow = session.get(Flow, template.flow_id)
db_template.data = db_flow.data
# Correctionname
with get_sync_db_session() as session:
name_repeat = session.exec(
select(Template).where(Template.name == db_template.name)).first()
if name_repeat:
raise FlowTemplateNameError.http_exception()
# Boost order_num x,x+65535
with get_sync_db_session() as session:
max_order = session.exec(select(Template).order_by(
Template.order_num.desc()).limit(1)).first()
# If no data is available, proceed from 65535 Getting Started
db_template.order_num = max_order.order_num + ORDER_GAP if max_order else ORDER_GAP
with get_sync_db_session() as session:
session.add(db_template)
session.commit()
session.refresh(db_template)
return resp_200(db_template)
@router.get('/template')
def read_template(page_size: Optional[int] = None,
page_name: Optional[int] = None,
flow_type: Optional[int] = None,
id: Optional[int] = None,
name: Optional[str] = None):
"""Read all flows."""
sql = select(Template.id, Template.name, Template.description, Template.update_time, Template.order_num)
if id:
with get_sync_db_session() as session:
template = session.get(Template, id)
return resp_200([template])
if name:
sql = sql.where(Template.name == name)
if flow_type:
sql = sql.where(Template.flow_type == flow_type)
sql = sql.order_by(Template.order_num.desc())
if page_size and page_name:
sql = sql.offset(page_size * (page_name - 1)).limit(page_size)
try:
with get_sync_db_session() as session:
template_session = session.exec(sql)
templates = template_session.mappings().all()
res = []
for one in templates:
res.append(Template.model_validate(one))
return resp_200(res)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e)) from e
@router.post('/template/{id}')
def update_template(*, id: int, template: TemplateUpdate):
"""Update a flow."""
with get_sync_db_session() as session:
db_template = session.get(Template, id)
if not db_template:
raise HTTPException(status_code=404, detail='Template not found')
template_data = template.model_dump(exclude_unset=True)
if settings.remove_api_keys:
template_data = remove_api_keys(template_data)
for key, value in template_data.items():
setattr(db_template, key, value)
with get_sync_db_session() as session:
session.add(db_template)
session.commit()
session.refresh(db_template)
return resp_200(db_template)
@router.delete('/template/{id}', status_code=200)
def delete_template(*, id: int):
"""Delete a flow."""
with get_sync_db_session() as session:
db_template = session.get(Template, id)
if not db_template:
raise HTTPException(status_code=404, detail='Template not found')
with get_sync_db_session() as session:
session.delete(db_template)
session.commit()
return resp_200()
================================================
FILE: src/backend/bisheng/api/v1/tag.py
================================================
from typing import List
from fastapi import APIRouter, Request, Depends, Query, Body
from bisheng.api.services.tag import TagService
from bisheng.api.v1.schemas import resp_200
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.database.models.group_resource import ResourceTypeEnum
router = APIRouter(prefix='/tag', tags=['Tag'])
@router.get('')
def get_all_tag(request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
keyword: str = Query(default=None, description='Search keyword ...'),
page: int = Query(default=0, description='Page'),
limit: int = Query(default=10, description='Listings Per Page')):
result, total = TagService.get_all_tag(request, login_user, keyword, page, limit)
return resp_200(data={
'data': result,
'total': total
})
@router.post('')
def create_tag(request: Request,
login_user: UserPayload = Depends(UserPayload.get_admin_user),
name: str = Body(..., embed=True, description='Label Name')):
result = TagService.create_tag(request, login_user, name)
return resp_200(result)
@router.put('')
def update_tag(request: Request,
login_user: UserPayload = Depends(UserPayload.get_admin_user),
tag_id: int = Body(..., embed=True, description='labelID'),
name: str = Body(..., embed=True, description='Label Name')):
result = TagService.update_tag(request, login_user, tag_id, name)
return resp_200(result)
@router.delete('')
def delete_tag(request: Request,
login_user: UserPayload = Depends(UserPayload.get_admin_user),
tag_id: int = Body(..., embed=True, description='labelID')):
TagService.delete_tag(request, login_user, tag_id)
return resp_200()
@router.post('/link')
def create_tag_link(request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
tag_id: int = Body(..., embed=True, description='labelID'),
resource_id: str = Body(..., embed=True, description='reasourseID'),
resource_type: ResourceTypeEnum = Body(..., embed=True, description='Resource Type')):
result = TagService.create_tag_link(request, login_user, tag_id, resource_id, resource_type)
return resp_200(result)
@router.delete('/link')
def delete_tag_link(
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
tag_id: int = Body(..., embed=True, description='labelID'),
resource_id: str = Body(..., embed=True, description='reasourseID'),
resource_type: ResourceTypeEnum = Body(..., embed=True, description='Resource Type')):
TagService.delete_tag_link(request, login_user, tag_id, resource_id, resource_type)
return resp_200()
@router.get('/home')
def get_home_tag(request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Get a list of tags to show on the homepage
"""
result = TagService.get_home_tag(request, login_user)
return resp_200(result)
@router.post('/home')
def update_home_tag(request: Request,
login_user: UserPayload = Depends(UserPayload.get_admin_user),
tag_ids: List[int] = Body(..., embed=True, description='labelIDVertical')):
"""
Update the list of tags displayed on the homepage
"""
result = TagService.update_home_tag(request, login_user, tag_ids)
return resp_200(result)
================================================
FILE: src/backend/bisheng/api/v1/usergroup.py
================================================
# build router
from typing import Annotated, List, Optional
from fastapi import APIRouter, Body, Depends, Query, Request
from bisheng.api.services.role_group_service import RoleGroupService
from bisheng.api.v1.schemas import resp_200
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.http_error import UnAuthorizedError
from bisheng.common.errcode.user import UserGroupEmptyError
from bisheng.database.models.group import Group, GroupCreate
from bisheng.database.models.group_resource import ResourceTypeEnum
from bisheng.database.models.role import RoleDao
from bisheng.database.models.user_group import UserGroupDao
router = APIRouter(prefix='/group', tags=['User'], dependencies=[Depends(UserPayload.get_login_user)])
@router.get('/list')
async def get_all_group(login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Get all groups
"""
if login_user.is_admin():
groups = []
else:
# Query if you are an administrator of another user group under
user_groups = UserGroupDao.get_user_admin_group(login_user.user_id)
groups = []
for one in user_groups:
if one.is_group_admin:
groups.append(one.group_id)
# Not an administrator of any user group does not have permission to view
if not groups:
raise UnAuthorizedError()
groups_res = RoleGroupService().get_group_list(groups)
return resp_200({'records': groups_res})
@router.post('/create')
async def create_group(request: Request, group: GroupCreate,
login_user: UserPayload = Depends(UserPayload.get_admin_user)):
"""
Add Usergroup
"""
return resp_200(RoleGroupService().create_group(request, login_user, group))
@router.put('/create')
async def update_group(request: Request,
group: Group,
login_user: UserPayload = Depends(UserPayload.get_admin_user)):
"""
Can edit existing usergroups
"""
return resp_200(RoleGroupService().update_group(request, login_user, group))
@router.delete('/create', status_code=200)
async def delete_group(request: Request,
group_id: int,
login_user: UserPayload = Depends(UserPayload.get_admin_user)):
"""
Can delete existing usergroups
"""
return RoleGroupService().delete_group(request, login_user, group_id)
@router.post('/set_user_group')
async def set_user_group(request: Request,
user_id: Annotated[int, Body(embed=True)],
group_id: Annotated[List[int], Body(embed=True)],
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Set up user groups, Batch Replacement, Replace different user groups according to different operation permissions
User group management replaces only the user groups for which he has permissions. Super Admin Full Replacement
"""
if not group_id:
raise UserGroupEmptyError()
return resp_200(RoleGroupService().replace_user_groups(request, login_user, user_id, group_id))
@router.get('/get_user_group')
async def get_user_group(user_id: int, login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Get the group to which the user belongs
"""
return resp_200(RoleGroupService().get_user_groups_list(user_id))
@router.get('/get_group_user')
async def get_group_user(group_id: int,
page_size: int = None,
page_num: int = None,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Get grouped users
"""
return RoleGroupService().get_group_user_list(group_id, page_size, page_num)
@router.post('/set_group_admin')
async def set_group_admin(
request: Request,
user_ids: Annotated[List[int], Body(embed=True)],
group_id: Annotated[int, Body(embed=True)],
login_user: UserPayload = Depends(UserPayload.get_admin_user)):
"""
Get groupingadmin, batch setting interface, overriding the historicaladmin
"""
return resp_200(RoleGroupService().set_group_admin(request, login_user, user_ids, group_id))
@router.post('/set_update_user', status_code=200)
async def set_update_user(group_id: Annotated[int, Body(embed=True)],
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Update user group last modified by
"""
return resp_200(RoleGroupService().set_group_update_user(login_user, group_id))
@router.get('/get_group_resources')
async def get_group_resources(*,
group_id: int,
resource_type: int,
name: Optional[str] = None,
page_size: Optional[int] = 10,
page_num: Optional[int] = 1,
user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Get a list of resources under a user group
"""
# Determine if you are an administrator of a user group
if not user.check_group_admin(group_id):
return UnAuthorizedError.return_resp()
res, total = await RoleGroupService().get_group_resources(
group_id,
resource_type=ResourceTypeEnum(resource_type),
name=name,
page_size=page_size,
page_num=page_num)
return resp_200(data={
"data": res,
"total": total
})
@router.get("/roles")
async def get_group_roles(*,
group_id: List[int] = Query(..., description="User GroupsIDVertical"),
keyword: str = Query(None, description="Search keyword ..."),
page: int = 0,
limit: int = 0,
user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Get a list of roles within a user group
"""
# Determine if you are an administrator of a user group
if not user.check_groups_admin(group_id):
return UnAuthorizedError.return_resp()
# List of roles under query group
role_list = RoleDao.get_role_by_groups(group_id, keyword, page, limit)
total = RoleDao.count_role_by_groups(group_id, keyword)
return resp_200(data={
"data": role_list,
"total": total
})
@router.get("/manage/resources")
async def get_manage_resources(login_user: UserPayload = Depends(UserPayload.get_login_user),
keyword: str = Query(None, description="Search keyword ..."),
page: int = 1,
page_size: int = 10):
""" Get a list of apps under a managed user group """
res, total = await RoleGroupService().get_manage_resources(login_user, keyword, page, page_size)
return resp_200(data={
"data": res,
"total": total
})
================================================
FILE: src/backend/bisheng/api/v1/validate.py
================================================
from bisheng.api.v1.base import (Code, CodeValidationResponse, PromptValidationResponse,
ValidatePromptRequest, validate_prompt)
from bisheng.api.v1.schemas import UnifiedResponseModel, resp_200
from bisheng.template.field.base import TemplateField
from loguru import logger
from bisheng.utils.validate import validate_code
from fastapi import APIRouter, HTTPException
# build router
router = APIRouter(prefix='/validate', tags=['Validate'])
@router.post('/code', status_code=200)
def post_validate_code(code: Code):
try:
errors = validate_code(code.code)
return resp_200(
CodeValidationResponse(
imports=errors.get('imports', {}),
function=errors.get('function', {}),
))
except Exception as e:
return HTTPException(status_code=500, detail=str(e))
@router.post('/prompt')
def post_validate_prompt(prompt_request: ValidatePromptRequest):
try:
input_variables = validate_prompt(prompt_request.template)
old_custom_fields = get_old_custom_fields(prompt_request)
add_new_variables_to_template(input_variables, prompt_request)
remove_old_variables_from_template(old_custom_fields, input_variables, prompt_request)
update_input_variables_field(input_variables, prompt_request)
return resp_200(
PromptValidationResponse(
input_variables=input_variables,
frontend_node=prompt_request.frontend_node,
))
except Exception as e:
logger.exception(e)
raise HTTPException(status_code=500, detail=str(e)) from e
def get_old_custom_fields(prompt_request):
try:
old_custom_fields = prompt_request.frontend_node.custom_fields[prompt_request.name].copy()
except KeyError:
old_custom_fields = []
prompt_request.frontend_node.custom_fields[prompt_request.name] = []
return old_custom_fields
def add_new_variables_to_template(input_variables, prompt_request):
for variable in input_variables:
try:
template_field = TemplateField(
name=variable,
display_name=variable,
field_type='str',
show=True,
advanced=False,
multiline=True,
input_types=['Document', 'BaseOutputParser', 'VariableNode'],
value='', # Set the value to empty string
)
if variable in prompt_request.frontend_node.template:
# Set the new field with the old value
template_field.value = prompt_request.frontend_node.template[variable]['value']
prompt_request.frontend_node.template[variable] = template_field.to_dict()
# Check if variable is not already in the list before appending
if (variable not in prompt_request.frontend_node.custom_fields[prompt_request.name]):
prompt_request.frontend_node.custom_fields[prompt_request.name].append(variable)
except Exception as exc:
logger.exception(exc)
raise HTTPException(status_code=500, detail=str(exc)) from exc
def remove_old_variables_from_template(old_custom_fields, input_variables, prompt_request):
for variable in old_custom_fields:
if variable not in input_variables:
try:
# Remove the variable from custom_fields associated with the given name
if (variable in prompt_request.frontend_node.custom_fields[prompt_request.name]):
prompt_request.frontend_node.custom_fields[prompt_request.name].remove(
variable)
# Remove the variable from the template
prompt_request.frontend_node.template.pop(variable, None)
except Exception as exc:
logger.exception(exc)
raise HTTPException(status_code=500, detail=str(exc)) from exc
def update_input_variables_field(input_variables, prompt_request):
if 'input_variables' in prompt_request.frontend_node.template:
prompt_request.frontend_node.template['input_variables']['value'] = input_variables
================================================
FILE: src/backend/bisheng/api/v1/variable.py
================================================
from typing import List, Optional
from loguru import logger
from fastapi import APIRouter, HTTPException
from sqlmodel import delete, select
from bisheng.api.v1.schemas import UnifiedResponseModel, resp_200
from bisheng.core.database import get_sync_db_session
from bisheng.database.models.flow_version import FlowVersionDao
from bisheng.database.models.variable_value import Variable, VariableCreate, VariableRead, VariableDao
# build router
router = APIRouter(prefix='/variable', tags=['variable'])
@router.post('/', status_code=200)
def post_variable(variable: Variable):
try:
if not variable.version_id:
raise HTTPException(status_code=500, detail='version_id is required')
if variable.id:
# Update with full replacement
with get_sync_db_session() as session:
db_variable = session.get(Variable, variable.id)
db_variable.variable_name = variable.variable_name[:50]
db_variable.value = variable.value
db_variable.value_type = variable.value_type
else:
# if name exist
with get_sync_db_session() as session:
db_variable = session.exec(
select(Variable).where(
Variable.node_id == variable.node_id,
Variable.variable_name == variable.variable_name,
Variable.version_id == variable.version_id)).all()
if db_variable:
raise HTTPException(status_code=500, detail='name repeat, please choose another')
db_variable = Variable.from_orm(variable)
with get_sync_db_session() as session:
session.add(db_variable)
session.commit()
session.refresh(db_variable)
return resp_200(db_variable)
except Exception as e:
logger.exception("post variable error: ")
return HTTPException(status_code=500, detail=str(e))
@router.get('/list')
def get_variables(*,
flow_id: str,
node_id: Optional[str] = None,
variable_name: Optional[str] = None,
version_id: Optional[int] = None):
try:
# No passingIDGet data for the current version by default
if version_id is None:
version_id = FlowVersionDao.get_version_by_flow(flow_id).id
res = VariableDao.get_variables(flow_id, node_id, variable_name, version_id)
return resp_200(res)
except Exception as e:
return HTTPException(status_code=500, detail=str(e))
@router.delete('/del', status_code=200)
def del_variables(*, id: int):
try:
statment = delete(Variable).where(Variable.id == id)
with get_sync_db_session() as session:
session.exec(statment)
session.commit()
return resp_200()
except Exception as e:
return HTTPException(status_code=500, detail=str(e))
@router.post('/save_all', status_code=200)
def save_all_variables(*, data: List[VariableCreate]):
try:
# delete first
flow_id = data[0].flow_id
with get_sync_db_session() as session:
session.exec(delete(Variable).where(Variable.flow_id == flow_id))
session.commit()
for var in data:
db_var = Variable.model_validate(var)
session.add(db_var)
session.commit()
return resp_200()
except Exception as e:
return HTTPException(status_code=500, detail=str(e))
================================================
FILE: src/backend/bisheng/api/v1/workflow.py
================================================
import time
from typing import Optional, Union
from fastapi import APIRouter, Body, Depends, Query, WebSocket, WebSocketException, Request, \
status as http_status
from loguru import logger
from sqlmodel import select
from bisheng.api.services.flow import FlowService
from bisheng.api.services.workflow import WorkFlowService
from bisheng.api.v1.chat import chat_manager
from bisheng.api.v1.schemas import FlowVersionCreate, resp_200
from bisheng.chat.types import WorkType
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.flow import WorkflowNameExistsError, WorkFlowOnlineEditError, AppWriteAuthError
from bisheng.common.errcode.http_error import UnAuthorizedError, NotFoundError
from bisheng.common.services import telemetry_service
from bisheng.core.database import get_sync_db_session
from bisheng.core.logger import trace_id_var
from bisheng.core.storage.minio.minio_manager import get_minio_storage
from bisheng.database.models.assistant import AssistantDao
from bisheng.database.models.flow import Flow, FlowCreate, FlowDao, FlowRead, FlowType, FlowUpdate, \
FlowStatus
from bisheng.database.models.flow_version import FlowVersionDao
from bisheng.database.models.role_access import AccessType
from bisheng.share_link.api.dependencies import header_share_token_parser
from bisheng.share_link.domain.models.share_link import ShareLink
from bisheng.utils import generate_uuid
from bisheng_langchain.utils.requests import Requests
router = APIRouter(prefix='/workflow', tags=['Workflow'])
@router.get("/write/auth")
async def check_app_write_auth(
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
flow_id: str = Query(..., description="ApplicationsID"),
flow_type: int = Query(..., description="Apply type")
):
""" Check if the user has administrative rights to the app """
check_auth_type = AccessType.FLOW_WRITE
if flow_type == FlowType.ASSISTANT.value:
check_auth_type = AccessType.ASSISTANT_WRITE
flow_info = await AssistantDao.aget_one_assistant(flow_id)
else:
flow_info = await FlowDao.aget_flow_by_id(flow_id)
if flow_info and flow_info.flow_type == FlowType.WORKFLOW.value:
check_auth_type = AccessType.WORKFLOW_WRITE
if not flow_info:
raise NotFoundError.http_exception()
owner_id = flow_info.user_id
if await login_user.async_access_check(owner_id, flow_id, check_auth_type):
return resp_200()
return AppWriteAuthError.return_resp()
@router.get("/report/file")
async def get_report_file(
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
version_key: str = Query("", description="minioright of privacyobject_name"),
workflow_id: str = Query(..., description="The WorkflowID")
):
""" DapatkanreportTemplate file for the node """
# Check if the user has read access to the app
flow_info = await FlowDao.aget_flow_by_id(workflow_id)
if not flow_info:
raise NotFoundError.http_exception()
if not await login_user.async_access_check(flow_info.user_id, workflow_id, AccessType.WORKFLOW):
return UnAuthorizedError.return_resp()
if not version_key:
# Regenerate aversion_key
version_key = generate_uuid()
else:
version_key = version_key.split('_', 1)[0]
file_url = ""
object_name = f"workflow/report/{version_key}.docx"
minio_client = await get_minio_storage()
if await minio_client.object_exists(minio_client.bucket, object_name):
file_url = await minio_client.get_share_link(object_name, clear_host=False)
return resp_200(data={
'url': file_url,
'version_key': f'{version_key}_{int(time.time() * 1000)}',
})
@router.post('/report/copy', status_code=200)
async def copy_report_file(
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
version_key: str = Body(..., embed=True, description="minioright of privacyobject_name")):
""" SalinreportTemplate file for the node """
version_key = version_key.split('_', 1)[0]
new_version_key = generate_uuid()
object_name = f"workflow/report/{version_key}.docx"
new_object_name = f"workflow/report/{new_version_key}.docx"
minio_client = await get_minio_storage()
if await minio_client.object_exists(minio_client.bucket, object_name):
await minio_client.copy_object(source_object=object_name, dest_object=new_object_name,
source_bucket=minio_client.bucket, dest_bucket=minio_client.bucket)
return resp_200(data={
'version_key': f'{new_version_key}',
})
@router.post('/report/callback', status_code=200)
async def upload_report_file(
request: Request,
data: dict = Body(...)):
""" office Callback interface save reportTemplate file for the node """
status = data.get('status')
file_url = data.get('url')
key = data.get('key')
logger.debug(f'callback={data}')
if status not in {2, 6}:
# Non-saved callbacks are not processed
return {'error': 0}
logger.info(f'office_callback url={file_url}')
file = Requests().get(url=file_url)
version_key = key.split('_', 1)[0]
minio_client = await get_minio_storage()
object_name = f"workflow/report/{version_key}.docx"
await minio_client.put_object(
object_name=object_name, file=file._content, bucket_name=minio_client.bucket,
content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document')
return {'error': 0}
@router.post('/run_once', status_code=200)
def run_once(request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user),
node_input: Optional[dict] = None, # Input parameters of the node
node_data: dict = None,
workflow_id: str = Body(..., description='The WorkflowID')):
""" Single node operation """
result = WorkFlowService.run_once(login_user, node_input, node_data, workflow_id)
return resp_200(data=result)
@router.websocket('/chat/{workflow_id}')
async def workflow_ws(*,
workflow_id: str,
websocket: WebSocket,
chat_id: Optional[str] = None,
login_user: UserPayload = Depends(UserPayload.get_login_user_from_ws)):
try:
await chat_manager.dispatch_client(websocket, workflow_id, chat_id, login_user, WorkType.WORKFLOW, websocket)
except WebSocketException as exc:
logger.error(f'Websocket exception: {str(exc)}')
await websocket.close(code=http_status.WS_1011_INTERNAL_ERROR, reason=str(exc))
@router.post('/create', status_code=201)
def create_flow(*, request: Request, flow: FlowCreate, login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""Create a new flow."""
# Determine if the user repeats the skill name
with get_sync_db_session() as session:
if session.exec(
select(Flow).where(Flow.name == flow.name, Flow.flow_type == FlowType.WORKFLOW.value,
Flow.user_id == login_user.user_id)).first():
raise WorkflowNameExistsError.http_exception()
flow.user_id = login_user.user_id
db_flow = Flow.model_validate(flow)
db_flow.create_time = None
db_flow.update_time = None
db_flow.flow_type = FlowType.WORKFLOW.value
# Create New Skill
db_flow = FlowDao.create_flow(db_flow, FlowType.WORKFLOW.value)
current_version = FlowVersionDao.get_version_by_flow(db_flow.id)
ret = FlowRead.model_validate(db_flow)
ret.version_id = current_version.id
FlowService.create_flow_hook(request, login_user, db_flow, ret.version_id, FlowType.WORKFLOW.value)
return resp_200(data=ret)
@router.get('/versions', status_code=200)
def get_versions(*, flow_id: str, login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Get a list of versions for your skill
"""
return FlowService.get_version_list_by_flow(login_user, flow_id)
@router.post('/versions', status_code=200)
async def create_versions(*,
flow_id: str,
flow_version: FlowVersionCreate,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Create New Skill Version
"""
flow_version.flow_type = FlowType.WORKFLOW.value
return await FlowService.create_new_version(login_user, flow_id, flow_version)
@router.put('/versions/{version_id}', status_code=200)
async def update_versions(*,
request: Request,
version_id: int,
flow_version: FlowVersionCreate,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Update to version
"""
return await FlowService.update_version_info(request, login_user, version_id, flow_version)
@router.delete('/versions/{version_id}', status_code=200)
def delete_versions(*, version_id: int, login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Remove Version
"""
return FlowService.delete_version(login_user, version_id)
@router.get('/versions/{version_id}', status_code=200)
def get_version_info(*, version_id: int, login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Get Version Info
"""
return FlowService.get_version_info(login_user, version_id)
@router.post('/change_version', status_code=200)
def change_version(*,
request: Request,
flow_id: str = Query(default=None, description='Skill UniqueID'),
version_id: int = Query(default=None, description='Current version that needs to be setID'),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Modify Current Version
"""
return FlowService.change_current_version(request, login_user, flow_id, version_id)
@router.get('/get_one_flow/{flow_id}')
async def read_flow(*, flow_id: str, login_user: UserPayload = Depends(UserPayload.get_login_user),
share_link: Union['ShareLink', None] = Depends(header_share_token_parser)):
"""Read a flow."""
return await FlowService.get_one_flow(login_user, flow_id, share_link)
@router.patch('/update/{flow_id}')
async def update_flow(*,
request: Request,
flow_id: str,
flow: FlowUpdate,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""online offline"""
db_flow = await FlowDao.aget_flow_by_id(flow_id)
if not db_flow:
raise NotFoundError()
if not await login_user.async_access_check(db_flow.user_id, flow_id, AccessType.WORKFLOW_WRITE):
return UnAuthorizedError.return_resp()
flow_data = flow.model_dump(exclude_unset=True)
if db_flow.status == FlowStatus.ONLINE.value and (
'status' not in flow_data or flow_data['status'] != FlowStatus.OFFLINE.value):
raise WorkFlowOnlineEditError.http_exception()
for key, value in flow_data.items():
if key in ['data', 'create_time', 'update_time']:
continue
if key == "logo" and not value:
continue
setattr(db_flow, key, value)
db_flow = await FlowDao.aupdate_flow(db_flow)
await telemetry_service.log_event(
user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.EDIT_APPLICATION,
trace_id=trace_id_var.get()
)
await FlowService.update_flow_hook(request, login_user, db_flow)
return resp_200(db_flow)
@router.patch('/status')
async def update_flow_status(request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user),
flow_id: str = Body(..., description='SkillID'),
version_id: int = Body(..., description='VersionID'),
status: int = Body(..., description='Status')):
await WorkFlowService.update_flow_status(login_user, flow_id, version_id, status)
return resp_200()
@router.get('/list', status_code=200)
def read_flows(*,
login_user: UserPayload = Depends(UserPayload.get_login_user),
name: str = Query(default=None, description='accordingnameFind databases with fuzzy searches for descriptions'),
tag_id: int = Query(default=None, description='labelID'),
flow_type: int = Query(default=None, description='Type 1 flow 5 assitant 10 workflow '),
page_size: int = Query(default=10, description='Items per page'),
page_num: int = Query(default=1, description='Page'),
status: int = None,
managed: bool = Query(default=False, description='Whether to query the list of apps with administrative permissions')):
"""Read all flows."""
data, total = WorkFlowService.get_all_flows(login_user, name, status, tag_id, flow_type, page_num, page_size,
managed)
return resp_200(data={
'data': data,
'total': total
})
================================================
FILE: src/backend/bisheng/api/v1/workstation.py
================================================
import asyncio
import base64
import json
import time
from datetime import datetime
from pathlib import Path
from typing import Optional, Union, List, Type, Tuple
from urllib.parse import unquote
from uuid import uuid4
import aiofiles
from fastapi import APIRouter, BackgroundTasks, Body, Depends, File, Request, UploadFile
from fastapi.responses import StreamingResponse
from langchain_core.documents import Document
from langchain_core.messages import HumanMessage, SystemMessage
from loguru import logger
from sse_starlette import EventSourceResponse
from bisheng.api.services import knowledge_imp
from bisheng.api.services.audit_log import AuditLogService
from bisheng.api.services.knowledge import KnowledgeService
from bisheng.api.services.workflow import WorkFlowService
from bisheng.api.services.workstation import (WorkstationConversation,
WorkstationMessage, WorkStationService)
from bisheng.api.v1.schema.chat_schema import APIChatCompletion, SSEResponse, delta
from bisheng.api.v1.schemas import FrequentlyUsedChat
from bisheng.api.v1.schemas import WorkstationConfig, resp_200, ExcelRule, UnifiedResponseModel
from bisheng.chat.utils import SourceType, process_source_document
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum, ApplicationTypeEnum
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode import BaseErrorCode
from bisheng.common.errcode.http_error import ServerError, UnAuthorizedError
from bisheng.common.errcode.workstation import WebSearchToolNotFoundError, ConversationNotFoundError, \
AgentAlreadyExistsError
from bisheng.common.schemas.telemetry.event_data_schema import NewMessageSessionEventData, ApplicationAliveEventData, \
ApplicationProcessEventData
from bisheng.common.services import telemetry_service
from bisheng.common.services.config_service import settings as bisheng_settings
from bisheng.core.cache.redis_manager import get_redis_client
from bisheng.core.cache.utils import save_download_file, save_uploaded_file, async_file_download
from bisheng.core.logger import trace_id_var
from bisheng.core.prompts.manager import get_prompt_manager
from bisheng.database.models.flow import FlowType
from bisheng.database.models.message import ChatMessage, ChatMessageDao
from bisheng.database.models.session import MessageSession, MessageSessionDao
from bisheng.llm.domain import LLMService
from bisheng.llm.domain.llm import BishengLLM
from bisheng.share_link.api.dependencies import header_share_token_parser
from bisheng.share_link.domain.models.share_link import ShareLink
from bisheng.tool.domain.models.gpts_tools import GptsToolsDao
from bisheng.tool.domain.services.executor import ToolExecutor
from bisheng.utils import get_request_ip
router = APIRouter(prefix='/workstation', tags=['WorkStation'])
titleInstruction = 'a concise, 5-word-or-less title for the conversation, using its same language, with no punctuation. Apply title case conventions appropriate for the language. Never directly mention the language name or the word "title"' # noqa
promptSearch = '用户的问题是:%s \
判断用户的问题是否需要联网搜索,如果需要返回数字1,如果不需要返回数字0。只返回1或0,不要返回其他信息。\
如果问题涉及到实时信息、最新事件或特定数据库查询等超出你知识截止日期(2024年7月)的内容,就需要进行联网搜索来获取最新信息。'
visual_model_file_types = ['png', 'jpg', 'jpeg', 'webp', 'gif']
# Customizable JSON Serializer
def custom_json_serializer(obj):
if isinstance(obj, datetime):
return obj.isoformat() # Convert To ISO 8601 Format String
raise TypeError(f'Type {type(obj)} not serializable')
def user_message(msgId, conversationId, sender, text):
msg = json.dumps({
'message': {
'messageId': msgId,
'conversationId': conversationId,
'sender': sender,
'text': text
},
'created': True
})
return f'event: message\ndata: {msg}\n\n'
def step_message(stepId, runId, index, msgId):
msg = json.dumps({
'event': 'on_run_step',
'data': {
'id': stepId,
'runId': runId,
'type': 'message_creation',
'index': index,
'stepDetails': {
'type': 'message_creation',
'message_creation': {
'message_id': msgId
}
}
}
})
return f'event: message\ndata: {msg}\n\n'
async def final_message(conversation: MessageSession, title: str, requestMessage: ChatMessage, text: str,
error: bool, modelName: str, source_document: List[Document] = None):
responseMessage = await ChatMessageDao.ainsert_one(
ChatMessage(
user_id=conversation.user_id,
chat_id=conversation.chat_id,
flow_id='',
type='assistant',
is_bot=True,
message=text,
category='answer',
sender=modelName,
extra=json.dumps({
'parentMessageId': requestMessage.id,
'error': error
}),
source=SourceType.FILE.value if source_document else SourceType.NOT_SUPPORT.value
))
if source_document:
# Asynchronous processing traceability information storage
asyncio.create_task(process_source_document(source_document=source_document,
chat_id=conversation.chat_id,
message_id=responseMessage.id,
answer=text))
# Last message time to update session
msg = json.dumps(
{
'final': True,
'conversation': WorkstationConversation.from_chat_session(conversation).model_dump(),
'title': title,
'requestMessage': (await WorkstationMessage.from_chat_message(requestMessage)).model_dump(),
'responseMessage': (await WorkstationMessage.from_chat_message(responseMessage)).model_dump(),
},
default=custom_json_serializer)
return f'event: message\ndata: {msg}\n\n'
@router.get('/config', summary='Get workbench configuration', response_model=UnifiedResponseModel)
def get_config(
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Get model configurations related to reviews """
ret = WorkStationService.get_config()
etl_for_lm_url = bisheng_settings.get_knowledge().etl4lm.url
ret = ret.model_dump() if ret else {}
ret['enable_etl4lm'] = bool(etl_for_lm_url)
linsight_invitation_code = bisheng_settings.get_all_config().get('linsight_invitation_code', None)
ret['linsight_invitation_code'] = linsight_invitation_code if linsight_invitation_code else False
ret['linsight_cache_dir'] = "./"
ret['waiting_list_url'] = bisheng_settings.get_linsight_conf().waiting_list_url
return resp_200(data=ret)
@router.post('/config', summary='Update workbench configuration', response_model=UnifiedResponseModel)
def update_config(
request: Request,
login_user: UserPayload = Depends(UserPayload.get_admin_user),
data: WorkstationConfig = Body(..., description='Default Model Configuration'),
):
""" Update model configurations related to reviews """
ret = WorkStationService.update_config(request, login_user, data)
return resp_200(data=ret)
@router.post('/knowledgeUpload')
def knowledgeUpload(request: Request,
background_tasks: BackgroundTasks,
file: UploadFile = File(...),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
try:
file_path = save_download_file(file.file, 'bisheng', file.filename)
res = WorkStationService.uploadPersonalKnowledge(request,
login_user,
file_path=file_path,
background_tasks=background_tasks)
return resp_200(data=res[0])
except Exception as e:
raise ServerError(msg=f'Knowledge base upload failed: {str(e)}', exception=e)
finally:
file.file.close()
@router.get('/queryKnowledge')
def queryKnoledgeList(request: Request,
page: int,
size: int,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
# Check if there is a personal knowledge base
res, total = WorkStationService.queryKnowledgeList(request, login_user, page, size)
return resp_200(data={'list': res, 'total': total})
@router.delete('/deleteKnowledge')
def deleteKnowledge(request: Request,
file_id: int,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
res = KnowledgeService.delete_knowledge_file(request, login_user, [file_id])
return resp_200(data=res)
@router.post('/files')
async def upload_file(
request: Request,
file: UploadFile = File(...),
file_id: str = Body(..., description='Doc.ID'),
login_user: UserPayload = Depends(UserPayload.get_login_user),
):
"""
Upload file
"""
try:
# Read file contents
# Save file
file_path = await save_uploaded_file(file, 'bisheng', unquote(file.filename))
# Return to file path
return resp_200(
data={
'filepath': file_path,
'filename': unquote(file.filename),
'type': file.content_type,
'user': login_user.user_id,
'_id': uuid4().hex,
'createdAt': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'updatedAt': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'temp_file_id': file_id,
'file_id': uuid4().hex,
'message': 'File uploaded successfully',
'context': 'message_attachment',
})
except Exception as e:
raise ServerError(msg=f'File upload failed: {str(e)}', exception=e)
finally:
await file.close()
@router.post('/gen_title')
async def gen_title(conversationId: str = Body(..., description='', embed=True),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Generate Title
"""
# Get session messages
redis_key = f'workstation_title_{conversationId}'
redis_client = await get_redis_client()
title = await redis_client.aget(redis_key)
if not title:
await asyncio.sleep(5)
# If the title already exists, go straight back to
title = await redis_client.aget(redis_key)
if title:
# If the title already exists, go straight back to
await redis_client.adelete(redis_key)
return resp_200({'title': title})
else:
return resp_200({'title': 'New Chat'})
@router.get('/messages/{conversationId}')
async def get_chat_history(conversationId: str,
login_user: UserPayload = Depends(UserPayload.get_login_user),
share_link: Union['ShareLink', None] = Depends(header_share_token_parser)
):
messages = await ChatMessageDao.aget_messages_by_chat_id(chat_id=conversationId, limit=1000)
if messages:
if login_user.user_id != messages[0].user_id:
# Verify sharing link permissions
if not share_link or share_link.resource_id != conversationId:
return UnAuthorizedError.return_resp()
return resp_200([await WorkstationMessage.from_chat_message(message) for message in messages])
else:
return resp_200([])
async def genTitle(human: str, assistant: str, llm: BishengLLM, conversationId: str, login_user: UserPayload,
request: Request):
"""
Generate Title
"""
convo = f'||>User:\n"{human}"\n ||>Response:\n"{assistant}"'
prompt = f'Please generate {titleInstruction} \n{convo} \n||>Title:'
logger.info(f'convo: {convo}')
res = await llm.ainvoke(prompt)
title = res.content
redis_client = await get_redis_client()
await redis_client.aset(f'workstation_title_{conversationId}', title)
session = await MessageSessionDao.async_get_one(conversationId)
if session:
session.flow_name = title[:200]
session = await MessageSessionDao.async_insert_one(session)
# Audit log
await AuditLogService.create_chat_message(user=login_user, ip_address=get_request_ip(request), message=session)
async def webSearch(query: str, user_id: int):
"""
Internet search
"""
web_search_info = GptsToolsDao.get_tool_by_tool_key("web_search")
if not web_search_info:
raise WebSearchToolNotFoundError(exception=Exception("No web_search tool found in database"))
web_search_tool = await ToolExecutor.init_by_tool_id(web_search_info.id,
app_id=ApplicationTypeEnum.DAILY_CHAT.value,
app_name=ApplicationTypeEnum.DAILY_CHAT.value,
app_type=ApplicationTypeEnum.DAILY_CHAT,
user_id=user_id)
if not web_search_tool:
raise WebSearchToolNotFoundError(exception=Exception("No web_search tool found in gpts tools"))
search_list = await web_search_tool.ainvoke(input={"query": query})
search_list = json.loads(search_list)
search_res = ""
for index, one in enumerate(search_list):
search_res += f'[webpage ${index} begin]\n${one.get("snippet")}\n[webpage ${index} end]\n\n'
return search_res, search_list
async def getFileContent(filepath_local: str, file_name, invoke_user_id: int):
"""
Get file contents
"""
raw_texts, _, _, _ = await knowledge_imp.async_read_chunk_text(
invoke_user_id,
filepath_local,
file_name,
['\n\n', '\n'],
['after', 'after'],
1000,
0,
excel_rule=ExcelRule(),
no_summary=True
)
return knowledge_imp.KnowledgeUtils.chunk2promt(''.join(raw_texts), {'source': file_name})
async def _initialize_chat(data: APIChatCompletion, login_user: UserPayload):
"""Initializes chat session, message, and LLM."""
wsConfig = await WorkStationService.aget_config()
model_info = next((m for m in wsConfig.models if m.id == data.model), None)
if not model_info:
raise ValueError(f"Model with id '{data.model}' not found.")
conversationId = data.conversationId
is_new_conversation = False
if not conversationId:
is_new_conversation = True
conversationId = uuid4().hex
await MessageSessionDao.async_insert_one(
MessageSession(
chat_id=conversationId,
flow_id='',
flow_name='New Chat',
flow_type=FlowType.WORKSTATION.value,
user_id=login_user.user_id,
))
# Telemetry for new session
await telemetry_service.log_event(
user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.NEW_MESSAGE_SESSION,
trace_id=trace_id_var.get(),
event_data=NewMessageSessionEventData(
session_id=conversationId,
app_id=ApplicationTypeEnum.DAILY_CHAT.value,
source="platform",
app_name=ApplicationTypeEnum.DAILY_CHAT.value,
app_type=ApplicationTypeEnum.DAILY_CHAT
))
conversation = await MessageSessionDao.async_get_one(conversationId)
if conversation is None:
raise ConversationNotFoundError()
if data.overrideParentMessageId:
message = await ChatMessageDao.aget_message_by_id(int(data.overrideParentMessageId))
else:
message = await ChatMessageDao.ainsert_one(
ChatMessage(
user_id=login_user.user_id,
chat_id=conversationId,
flow_id='',
type='human',
is_bot=False,
sender='User',
files=json.dumps(data.files) if data.files else None,
extra=json.dumps({'parentMessageId': data.parentMessageId}),
message=data.text,
category='question',
source=0,
))
bishengllm = await LLMService.get_bisheng_llm(
model_id=data.model,
app_id=ApplicationTypeEnum.DAILY_CHAT.value,
app_name=ApplicationTypeEnum.DAILY_CHAT.value,
app_type=ApplicationTypeEnum.DAILY_CHAT,
user_id=login_user.user_id)
return wsConfig, conversation, message, bishengllm, model_info, is_new_conversation
async def _log_telemetry_events(user_id: str, conversation_id: str, start_time: float):
"""Logs telemetry events for application alive and process."""
end_time = time.time()
duration_ms = int((end_time - start_time) * 1000)
common_data = {
"app_id": ApplicationTypeEnum.DAILY_CHAT.value,
"app_name": ApplicationTypeEnum.DAILY_CHAT.value,
"app_type": ApplicationTypeEnum.DAILY_CHAT,
"chat_id": conversation_id,
"start_time": int(start_time),
"end_time": int(end_time),
}
await telemetry_service.log_event(
user_id=user_id,
event_type=BaseTelemetryTypeEnum.APPLICATION_ALIVE,
trace_id=trace_id_var.get(),
event_data=ApplicationAliveEventData(**common_data)
)
await telemetry_service.log_event(
user_id=user_id,
event_type=BaseTelemetryTypeEnum.APPLICATION_PROCESS,
trace_id=trace_id_var.get(),
event_data=ApplicationProcessEventData(**common_data, process_time=duration_ms)
)
@router.post('/chat/completions')
async def chat_completions(
request: Request,
data: APIChatCompletion,
login_user: UserPayload = Depends(UserPayload.get_login_user),
):
start_time = time.time()
try:
wsConfig, conversation, message, bishengllm, model_info, is_new_conv = await _initialize_chat(data, login_user)
conversationId = conversation.chat_id
conversation_id_for_telemetry = conversationId
except (BaseErrorCode, ValueError) as e:
error_response = e if isinstance(e, BaseErrorCode) else ServerError(message=str(e))
return EventSourceResponse(iter([error_response.to_sse_event_instance()]))
except Exception as e:
logger.exception(f'Error in chat completions setup: {e}')
return EventSourceResponse(iter([ServerError(exception=e).to_sse_event_instance()]))
def _build_final_content_for_db(final_res, reasoning_res, web_list):
if reasoning_res:
final_res = ''':::thinking\n''' + reasoning_res + '''\n:::''' + final_res
if web_list:
final_res = ''':::web\n''' + json.dumps(web_list, ensure_ascii=False) + '''\n:::''' + final_res
return final_res
async def event_stream():
yield user_message(message.id, conversationId, 'User', data.text)
prompt = data.text
web_list = []
error = False
final_res = '' # Accumulates the final response for the user
reasoning_res = '' # Accumulates the reasoning process
max_token = wsConfig.maxTokens
runId = uuid4().hex
index = 0
stepId = None
source_document = None
image_bases64 = []
try:
# Prepare prompt based on different modes (search, knowledge base, files)
if data.search_enabled:
stepId = f'step_${uuid4().hex}'
yield step_message(stepId, runId, index, f'msg_{uuid4().hex}')
index += 1
search_decision_prompt = promptSearch % data.text
searchRes = await bishengllm.ainvoke(search_decision_prompt)
if searchRes.content == '1':
logger.info(f'Web search needed for prompt: {data.text}')
search_res, web_list = await webSearch(data.text, user_id=login_user.user_id)
content = {'content': [{'type': 'search_result', 'search_result': web_list}]}
yield SSEResponse(event='on_search_result',
data=delta(id=stepId, delta=content)).toString()
prompt = wsConfig.webSearch.prompt.format(
search_results=search_res[:max_token],
cur_date=datetime.now().strftime('%Y-%m-%d'),
question=data.text)
elif data.use_knowledge_base and (data.use_knowledge_base.personal_knowledge_enabled or len(
data.use_knowledge_base.organization_knowledge_ids) > 0):
logger.info(f'Using knowledge base for prompt: {data.text}')
chunks, source_document = await WorkStationService.queryChunksFromDB(data.text,
use_knowledge_param=data.use_knowledge_base,
max_token=max_token,
login_user=login_user)
context_str = '\n'.join(chunks)
if wsConfig.knowledgeBase.prompt:
prompt = wsConfig.knowledgeBase.prompt.format(retrieved_file_content=context_str,
question=data.text)
else:
prompt_service = await get_prompt_manager()
prompt = prompt_service.render_prompt('workstation', 'personal_knowledge',
retrieved_file_content=context_str,
question=data.text).prompt
logger.debug(f'Knowledge prompt: {prompt}')
elif data.files:
logger.info(f'Using file content for prompt.')
download_tasks = [async_file_download(file.get('filepath')) for file in data.files]
downloaded_files = await asyncio.gather(*download_tasks)
visual_tasks = []
doc_tasks = []
# image to base64
async def _read_image_sync(filepath: str, filename: str) -> str:
async with aiofiles.open(filepath, mode='rb') as f:
image_data = await f.read()
ext = filename.split('.')[-1].lower()
mime_type = 'jpeg' if ext == 'jpg' else ext
return f"data:image/{mime_type};base64," + base64.b64encode(image_data).decode('utf-8')
for filepath, filename in downloaded_files:
file_ext = filename.split('.')[-1].lower()
# Determine task type based on file extension and model capabilities
if model_info.visual and file_ext in visual_model_file_types:
# Image processing task
visual_tasks.append(_read_image_sync(filepath=filepath, filename=filename))
else:
# Document processing task
doc_tasks.append(
getFileContent(filepath_local=filepath,
file_name=filename,
invoke_user_id=login_user.user_id)
)
# Execute all tasks concurrently
results = await asyncio.gather(
asyncio.gather(*visual_tasks),
asyncio.gather(*doc_tasks)
)
# results[0] is image base64 list
# results[1] is document content list
image_bases64.extend(results[0])
file_contents = results[1]
file_context = '\n'.join(file_contents)[:max_token]
prompt = wsConfig.fileUpload.prompt.format(file_content=file_context, question=data.text)
# Update message with the generated prompt if it changed
if prompt != data.text:
extra = json.loads(message.extra) if message.extra else {}
extra['prompt'] = prompt
message.extra = json.dumps(extra, ensure_ascii=False)
await ChatMessageDao.ainsert_one(message)
# Prepare message history and call LLM
history_messages = (await WorkStationService.get_chat_history(conversationId, 8))[:-1]
content = [
{'type': 'text', 'text': prompt},
]
for img_base64 in image_bases64:
content.append({'type': 'image_url', 'image_url': {
'url': img_base64
}})
inputs = [*history_messages, HumanMessage(content=content)]
if wsConfig.systemPrompt:
system_content = wsConfig.systemPrompt.format(cur_date=datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
inputs.insert(0, SystemMessage(content=system_content))
if not stepId:
stepId = 'step_' + uuid4().hex
yield step_message(stepId, runId, index, f'msg_{uuid4().hex}')
index += 1
# Stream LLM response
async for chunk in bishengllm.astream(inputs):
content = chunk.content
reasoning_content = chunk.additional_kwargs.get('reasoning_content', '')
if content:
final_res += content
yield SSEResponse(event='on_message_delta',
data=delta(id=stepId,
delta={'content': [{'type': 'text', 'text': content}]})).toString()
if reasoning_content:
reasoning_res += reasoning_content
yield SSEResponse(event='on_reasoning_delta',
data=delta(id=stepId, delta={
'content': [{'type': 'think', 'think': reasoning_content}]})).toString()
final_content_for_db = _build_final_content_for_db(final_res, reasoning_res, web_list)
except BaseErrorCode as e:
error = True
final_content_for_db = json.dumps(e.to_dict())
yield e.to_sse_event_instance_str()
except Exception as e:
error = True
server_error = ServerError(exception=e)
logger.exception(f'Error in processing the prompt')
final_content_for_db = json.dumps(server_error.to_dict())
yield server_error.to_sse_event_instance_str()
# Send final message and generate title if needed
yield await final_message(conversation, conversation.flow_name, message, final_content_for_db,
error, model_info.displayName, source_document)
if is_new_conv:
asyncio.create_task(
genTitle(data.text, final_content_for_db, bishengllm, conversationId, login_user, request))
try:
return StreamingResponse(event_stream(), media_type='text/event-stream')
finally:
await _log_telemetry_events(login_user.user_id, conversation_id_for_telemetry, start_time)
@router.get('/app/frequently_used')
def frequently_used_chat(login_user: UserPayload = Depends(UserPayload.get_login_user),
user_link_type: Optional[str] = 'app',
page: Optional[int] = 1,
limit: Optional[int] = 8
):
data, _ = WorkFlowService.get_frequently_used_flows(login_user, user_link_type, page, limit)
return resp_200(data=data)
@router.post('/app/frequently_used')
def frequently_used_chat(login_user: UserPayload = Depends(UserPayload.get_login_user),
data: FrequentlyUsedChat = Body(..., description='Add your favorite apps')
):
is_new = WorkFlowService.add_frequently_used_flows(login_user, data.user_link_type, data.type_detail)
if is_new:
return resp_200(message='Added')
else:
return AgentAlreadyExistsError.return_resp()
@router.delete('/app/frequently_used')
def frequently_used_chat(login_user: UserPayload = Depends(UserPayload.get_login_user),
user_link_type: Optional[str] = None,
type_detail: Optional[str] = None
):
WorkFlowService.delete_frequently_used_flows(login_user, user_link_type, type_detail)
return resp_200(message='Delete successful')
@router.get('/app/uncategorized')
def get_uncategorized_chat(login_user: UserPayload = Depends(UserPayload.get_login_user),
page: Optional[int] = 1,
limit: Optional[int] = 8):
data, _ = WorkFlowService.get_uncategorized_flows(login_user, page, limit)
return resp_200(data=data)
================================================
FILE: src/backend/bisheng/chat/__init__.py
================================================
================================================
FILE: src/backend/bisheng/chat/client.py
================================================
import json
import time
from queue import Queue
from typing import Dict, Callable, List
from fastapi import WebSocket, Request
from langchain_core.messages import AIMessage, HumanMessage, BaseMessage, ToolMessage
from loguru import logger
from bisheng.api.services.assistant_agent import AssistantAgent
from bisheng.api.services.audit_log import AuditLogService
from bisheng.api.v1.callback import AsyncGptsDebugCallbackHandler
from bisheng.api.v1.schemas import ChatMessage, ChatResponse
from bisheng.chat.types import WorkType
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum, ApplicationTypeEnum
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode import BaseErrorCode
from bisheng.common.errcode.assistant import (AssistantDeletedError, AssistantNotOnlineError,
AssistantOtherError)
from bisheng.common.schemas.telemetry.event_data_schema import NewMessageSessionEventData, ApplicationProcessEventData
from bisheng.common.services import telemetry_service
from bisheng.common.services.config_service import settings
from bisheng.core.logger import trace_id_var
from bisheng.database.models.assistant import AssistantDao, AssistantStatus
from bisheng.database.models.flow import FlowType
from bisheng.database.models.message import ChatMessageDao, ChatMessage as ChatMessageModel
from bisheng.database.models.session import MessageSession, MessageSessionDao
from bisheng.utils import get_request_ip
from bisheng.utils.threadpool import thread_pool
from bisheng_langchain.gpts.message_types import LiberalToolMessage
class ChatClient:
def __init__(self, request: Request, client_key: str, client_id: str, chat_id: str, user_id: int,
login_user: UserPayload, work_type: WorkType, websocket: WebSocket, **kwargs):
self.request = request
self.client_key = client_key
self.client_id = client_id
self.chat_id = chat_id
self.user_id = user_id
self.login_user = login_user
self.work_type = work_type
self.websocket = websocket
self.kwargs = kwargs
# Business Custom Parameters
self.db_assistant = None
self.gpts_agent: AssistantAgent | None = None
self.gpts_async_callback = None
self.chat_history = []
# Incoming when talking to the model Full Historical Dialogue Round Count
self.latest_history_num = 10
self.gpts_conf = settings.get_from_db('gpts')
# Asynchronous Task List
self.task_ids = []
# A queue of streaming outputs to accept the content of the streaming output, processing newquestionEmpty at all times
self.stream_queue = Queue()
async def close(self):
pass
async def send_message(self, message: str):
await self.websocket.send_text(message)
async def send_json(self, message: ChatMessage):
await self.websocket.send_json(message.dict())
async def handle_message(self, message: Dict[any, any]):
logger.info(f'client_id={self.client_key} handle_message start, message: {message}')
trace_id = trace_id_var.get()
# Handling messages from clients, Submit to Thread Pool for Execution
if self.work_type == WorkType.GPTS:
thread_pool.submit(trace_id,
self.wrapper_task,
trace_id,
self.handle_gpts_message,
message,
trace_id=trace_id)
# await self.handle_gpts_message(message)
async def wrapper_task(self, task_id: str, fn: Callable, *args, **kwargs):
# The wrapper handler function is an asynchronous task
self.task_ids.append(task_id)
start_time = time.time()
try:
# Execute Handling Functions
await fn(*args, **kwargs)
except Exception as e:
logger.exception("handle message error")
finally:
# When the execution is complete, the task will beidRemove from list
self.task_ids.remove(task_id)
end_time = time.time()
await telemetry_service.log_event(user_id=self.user_id,
event_type=BaseTelemetryTypeEnum.APPLICATION_PROCESS,
trace_id=trace_id_var.get(),
event_data=ApplicationProcessEventData(
app_id=self.client_id,
app_name=self.db_assistant.name if self.db_assistant else "",
app_type=ApplicationTypeEnum.ASSISTANT,
chat_id=self.chat_id,
start_time=int(start_time),
end_time=int(end_time),
process_time=int((end_time - start_time) * 1000)
))
async def add_message(self, msg_type: str, message: str, category: str, remark: str = ''):
self.chat_history.append({
'category': category,
'message': message,
'remark': remark
})
if not self.chat_id:
# debugMode does not need to save history
return
is_bot = 0 if msg_type == 'human' else 1
msg = ChatMessageDao.insert_one(ChatMessageModel(
is_bot=is_bot,
source=0,
message=message,
category=category,
type=msg_type,
extra=json.dumps({'client_key': self.client_key}, ensure_ascii=False),
flow_id=self.client_id,
chat_id=self.chat_id,
user_id=self.user_id,
remark=remark,
))
# Log Audit Logs, Is New Session
if len(self.chat_history) <= 1:
MessageSessionDao.insert_one(MessageSession(
chat_id=self.chat_id,
flow_id=self.client_id,
flow_name=self.db_assistant.name,
flow_type=FlowType.ASSISTANT.value,
user_id=self.user_id,
))
# RecordTelemetryJournal
await telemetry_service.log_event(user_id=self.user_id,
event_type=BaseTelemetryTypeEnum.NEW_MESSAGE_SESSION,
trace_id=trace_id_var.get(),
event_data=NewMessageSessionEventData(
session_id=self.chat_id,
app_id=self.client_id,
source="platform",
app_name=self.db_assistant.name,
app_type=ApplicationTypeEnum.ASSISTANT
)
)
AuditLogService.create_chat_assistant(self.login_user, get_request_ip(self.request), self.client_id)
return msg
async def send_response(self, category: str, msg_type: str, message: str, intermediate_steps: str = '',
message_id: int = None):
is_bot = 0 if msg_type == 'human' else 1
await self.send_json(ChatResponse(
message_id=message_id,
category=category,
type=msg_type,
is_bot=is_bot,
message=message,
user_id=self.user_id,
flow_id=self.client_id,
chat_id=self.chat_id,
extra=json.dumps({'client_key': self.client_key}, ensure_ascii=False),
intermediate_steps=intermediate_steps,
))
async def init_gpts_agent(self):
await self.init_chat_history()
await self.init_gpts_callback()
try:
# Processing Intelligent Assistant Business
if self.chat_id and self.gpts_agent is None:
# Conversation businessagentFixed generation from database data,Don't change every time
assistant = AssistantDao.get_one_assistant(self.client_id)
if not assistant:
raise AssistantDeletedError()
# Under JudgmentagentOnline or not
if assistant.status != AssistantStatus.ONLINE.value:
raise AssistantNotOnlineError()
elif not self.chat_id:
# The debug interface is regenerated without testing
assistant = AssistantDao.get_one_assistant(self.client_id)
if not assistant:
raise AssistantDeletedError()
# await self.websocket.close(code=status.WS_1008_POLICY_VIOLATION, reason=str(e))
# raise IgnoreException(f'get assistant info error: {str(e)}')
if self.chat_id and self.gpts_agent is None:
self.db_assistant = assistant
# Conversation businessagentFixed generation from database data,Don't change every time
self.gpts_agent = AssistantAgent(assistant, self.chat_id, invoke_user_id=self.user_id)
await self.gpts_agent.init_assistant(self.gpts_async_callback)
elif not self.chat_id:
self.db_assistant = assistant
# The debugging interface is regenerated every time
self.gpts_agent = AssistantAgent(assistant, self.chat_id, invoke_user_id=self.user_id)
await self.gpts_agent.init_assistant(self.gpts_async_callback)
except BaseErrorCode as e:
logger.exception("get assistant info error")
raise e
except Exception as e:
logger.exception("get assistant info error")
raise AssistantOtherError(exception=e)
async def init_chat_history(self):
# Initialization history, not empty or no reinitialization
if len(self.chat_history) > 0:
return
# Load Historical Sessions from Database
if self.chat_id:
res = ChatMessageDao.get_messages_by_chat_id(self.chat_id,
['question', 'answer', 'tool_call', 'tool_result'],
self.latest_history_num * 4)
for one in res:
self.chat_history.append({
'message': one.message,
'category': one.category,
'remark': one.remark
})
async def get_latest_history(self) -> List[BaseMessage]:
# Invalid historical messages need to be culled and only complete Q&A sessions are included
tmp = []
find_i = 0
is_answer = True
# Get from Chat History
for i in range(len(self.chat_history) - 1, -1, -1):
one_item = self.chat_history[i]
if find_i >= self.latest_history_num:
break
# Answers without interruptions
if one_item['category'] == 'answer' and one_item.get('remark') != 'break_answer' and is_answer:
tmp.insert(0, AIMessage(content=one_item['message']))
is_answer = False
elif one_item['category'] == 'question' and not is_answer:
tmp.insert(0, HumanMessage(content=json.loads(one_item['message'])['input']))
is_answer = True
find_i += 1
elif one_item['category'] == 'tool_call':
tmp.insert(0, AIMessage(**json.loads(one_item['message'])))
elif one_item['category'] == 'tool_result':
tmp.insert(0, LiberalToolMessage(**json.loads(one_item['message'])))
return tmp
async def init_gpts_callback(self):
if self.gpts_async_callback is not None:
return
async_callbacks = [AsyncGptsDebugCallbackHandler(**{
'websocket': self.websocket,
'flow_id': self.client_id,
'chat_id': self.chat_id,
'user_id': self.user_id,
'stream_queue': self.stream_queue,
})]
self.gpts_async_callback = async_callbacks
async def stop_handle_message(self, message: Dict[any, any]):
# Abort Streaming Output, Because the latest taskidis to abort the task.id, you can't cancel yourself
logger.info(f'need stop agent, client_key: {self.client_key}, message: {message}')
# Processing function before abort
thread_pool.cancel_task(self.task_ids[:-1])
# Write streaming output to database
answer = ''
reasoning_answer = ''
while not self.stream_queue.empty():
msg = self.stream_queue.get()
if msg.get('type') == 'answer':
answer += msg.get('content', '')
elif msg.get('type') == 'reasoning':
reasoning_answer += msg.get('content', '')
# If there is streaming output, record the streaming output to the database
if reasoning_answer.split():
res = await self.add_message('bot', answer, 'reasoning_answer', 'break_answer')
await self.send_response('reasoning_answer', 'end', '', message_id=res.id if res else None)
if answer.strip():
res = await self.add_message('bot', answer, 'answer', 'break_answer')
await self.send_response('answer', 'end', '', message_id=res.id if res else None)
await self.send_response('processing', 'close', '')
async def clear_stream_queue(self):
while not self.stream_queue.empty():
self.stream_queue.get()
async def handle_gpts_message(self, message: Dict[any, any]):
if not message:
return
logger.debug(f'receive client message, client_key: {self.client_key} message: {message}')
if message.get('action') == 'stop':
await self.stop_handle_message(message)
return
try:
await self.send_response('processing', 'begin', '')
# Empty the streaming queue to prevent contamination of the previous answer
await self.clear_stream_queue()
inputs = message.get('inputs', {})
input_msg = inputs.get('input')
if not input_msg:
# Session needs to be switched
logger.debug(f'need switch agent, client_key: {self.client_key} inputs: {inputs}')
self.client_id = inputs.get('data').get('id')
self.chat_id = inputs.get('data').get('chatId')
self.gpts_agent = None
self.gpts_async_callback = None
self.chat_history = []
await self.init_gpts_agent()
return
# Inisialisasiagent
await self.init_gpts_agent()
# Write user issue to database
await self.add_message('human', json.dumps(inputs, ensure_ascii=False), 'question')
# Get callback history
chat_history = await self.get_latest_history()
# RecallagentGet Results
result = await self.gpts_agent.run(input_msg, chat_history, self.gpts_async_callback)
logger.debug(f'gpts agent {self.client_key} result: {result}')
answer = result[-1].content
# Record contains
new_history = result[len(chat_history):-1]
for one in new_history:
if isinstance(one, AIMessage):
_ = await self.add_message('bot', one.json(), 'tool_call')
elif isinstance(one, LiberalToolMessage) or isinstance(one, ToolMessage):
_ = await self.add_message('bot', one.json(), 'tool_result')
else:
logger.warning("unexpected message type")
answer_end_type = 'end'
# If it's streaming,llmthen useend_coverEnd, Overwrite previous streamed output
if getattr(self.gpts_agent.llm, 'streaming', False):
answer_end_type = 'end_cover'
# Get from Queuereasoning content
reasoning_content = ''
while not self.stream_queue.empty():
msg = self.stream_queue.get()
if msg.get('type') == 'reasoning':
reasoning_content += msg.get('content')
res = await self.add_message('bot', reasoning_content, 'reasoning_answer')
res = await self.add_message('bot', answer, 'answer')
await self.send_response('answer', 'start', '')
await self.send_response('answer', answer_end_type, answer, message_id=res.id if res else None)
logger.info(f'gptsAgentOver assistant_id:{self.client_id} chat_id:{self.chat_id} question:{input_msg}')
logger.info(f'gptsAgentOver assistant_id:{self.client_id} chat_id:{self.chat_id} answer:{answer}')
except BaseErrorCode as e:
logger.exception('handle gpts message error: ')
await self.send_response('system', 'start', '')
await e.websocket_close_message(websocket=self.websocket, close_ws=False)
except Exception as e:
e = AssistantOtherError(exception=e)
logger.exception('handle gpts message error: ')
await self.send_response('system', 'start', '')
await e.websocket_close_message(websocket=self.websocket, close_ws=False)
finally:
await self.send_response('processing', 'close', '')
================================================
FILE: src/backend/bisheng/chat/clients/__init__.py
================================================
================================================
FILE: src/backend/bisheng/chat/clients/base.py
================================================
import json
from abc import abstractmethod, ABC
from typing import Dict, Callable
from fastapi import WebSocket, Request
from loguru import logger
from bisheng.api.v1.schemas import ChatMessage, ChatResponse
from bisheng.chat.types import WorkType
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.core.logger import trace_id_var
from bisheng.database.models.message import ChatMessage as ChatMessageModel
from bisheng.database.models.message import ChatMessageDao
from bisheng.utils import generate_uuid
from bisheng.utils.threadpool import thread_pool
class BaseClient(ABC):
def __init__(self, request: Request, client_key: str, client_id: str, chat_id: str, user_id: int,
login_user: UserPayload, work_type: WorkType, websocket: WebSocket, **kwargs):
self.request = request
self.client_key = client_key # Client Unique Identity
self.client_id = client_id # Unique identification of the business, such as assistants or skillsID
self.chat_id = chat_id
self.user_id = user_id
self.login_user = login_user
self.work_type = work_type
self.websocket = websocket
self.kwargs = kwargs
# Asynchronous Task List
self.task_ids = []
# wsMessage Queues, Used to store thewebsocketMessages sent by the client
async def close(self):
pass
async def send_message(self, message: str):
await self.websocket.send_text(message)
async def send_json(self, message: ChatMessage | dict):
if isinstance(message, dict):
await self.websocket.send_json(message)
return
await self.websocket.send_json(message.model_dump())
async def handle_message(self, message: Dict[any, any]):
""" Handling messages from clients, Submit to Thread Pool for Execution """
trace_id = trace_id_var.get()
logger.info(f'client_id={self.client_key} trace_id={trace_id} message={message}')
if message.get('action') == 'stop':
await self._handle_message(message)
return
thread_pool.submit(trace_id,
self.wrapper_task,
trace_id,
self._handle_message,
message,
trace_id=trace_id)
@abstractmethod
async def _handle_message(self, message: Dict[any, any]):
raise Exception('handle_message must be implemented')
async def wrapper_task(self, task_id: str, fn: Callable, *args, **kwargs):
logger.debug("wrapper_task task_id=%s", task_id)
# The wrapper handler function is an asynchronous task
self.task_ids.append(task_id)
try:
# Execute Handling Functions
await fn(*args, **kwargs)
except Exception as e:
logger.exception("handle message error")
finally:
# When the execution is complete, the task will beidRemove from list
self.task_ids.remove(task_id)
async def add_message(self, msg_type: str, message: str, category: str, remark: str = ''):
""" Save Historical Messages to Database """
if not self.chat_id:
# debugMode does not need to save history
return
is_bot = 0 if msg_type == 'human' else 1
msg = ChatMessageDao.insert_one(ChatMessageModel(
is_bot=is_bot,
source=0,
message=message,
category=category,
type=msg_type,
extra=json.dumps({'client_key': self.client_key}, ensure_ascii=False),
flow_id=self.client_id,
chat_id=self.chat_id,
user_id=self.user_id,
remark=remark,
))
return msg
async def send_response(self, category: str, msg_type: str, message: str | dict, intermediate_steps: str = '',
message_id: int = None):
""" Send a response message to the client """
is_bot = 0 if msg_type == 'human' else 1
await self.send_json(ChatResponse(
message_id=message_id,
category=category,
type=msg_type,
is_bot=is_bot,
message=message,
user_id=self.user_id,
flow_id=self.client_id,
chat_id=self.chat_id,
extra=json.dumps({'client_key': self.client_key}, ensure_ascii=False),
intermediate_steps=intermediate_steps,
))
async def stop_handle_message(self, message: Dict[any, any]):
# Abort message processing logic
logger.info(f'need stop agent, client_key: {self.client_key}, task_ids: {self.task_ids}')
# Processing function before abort Because the latest taskidis to abort the task.id, you can't cancel yourself
thread_pool.cancel_task(self.task_ids)
logger.info(f'need stop over, client_key: {self.client_key}, task_ids: {self.task_ids}')
await self.send_response('processing', 'close', '')
================================================
FILE: src/backend/bisheng/chat/clients/workflow_client.py
================================================
import asyncio
import json
from typing import Dict, Optional
from fastapi import Request, WebSocket
from loguru import logger
from bisheng.api.services.audit_log import AuditLogService
from bisheng.api.v1.schema.workflow import WorkflowEventType
from bisheng.chat.clients.base import BaseClient
from bisheng.chat.types import WorkType
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.chat import WorkflowOfflineError
from bisheng.database.models.flow import FlowDao, FlowStatus
from bisheng.database.models.message import ChatMessageDao, ChatMessage
from bisheng.utils import generate_uuid
from bisheng.utils import get_request_ip
from bisheng.worker.workflow.redis_callback import RedisCallback
from bisheng.worker.workflow.tasks import execute_workflow, continue_workflow, workflow_stateful_worker
from bisheng.workflow.common.workflow import WorkflowStatus
class WorkflowClient(BaseClient):
def __init__(self, request: Request, client_key: str, client_id: str, chat_id: str,
user_id: int, login_user: UserPayload, work_type: WorkType, websocket: WebSocket,
**kwargs):
super().__init__(request, client_key, client_id, chat_id, user_id, login_user, work_type,
websocket, **kwargs)
self.workflow: Optional[RedisCallback] = None
self.latest_history: Optional[ChatMessage] = None
self.hash_key = None
self.ws_closed = False
self.run_lock = asyncio.Lock()
async def close(self, force_stop=False):
# If the user is not actively stopping, setwsTurn the flag off, but there is no need to abortworkflowExecution
if not force_stop:
self.ws_closed = True
# Non-Session Mode OffworkflowImplementation, Session mode determines if the user took the initiative to close
if self.workflow:
if force_stop or not self.chat_id:
await self.workflow.async_set_workflow_stop()
workflow_over = await self.workflow_run()
while not workflow_over:
if self.ws_closed:
break
workflow_over = await self.workflow_run()
await asyncio.sleep(0.5)
else:
await self.send_response('processing', 'close', '')
await super().close()
async def _handle_message(self, message: Dict[any, any]):
logger.debug('----------------------------- start handle message -----------------------')
if message.get('action') == 'init_data':
# InisialisasiworkflowDATA
await self.init_workflow(message)
elif message.get('action') == 'check_status':
await self.check_status(message)
elif message.get('action') == 'input':
await self.handle_user_input(message.get('data'))
elif message.get('action') == 'stop':
await self.close(force_stop=True)
# await self.stop_handle_message(message)
else:
logger.warning('not support action: %s', message.get('action'))
async def init_history(self):
if not self.chat_id:
return
self.latest_history = await ChatMessageDao.aget_latest_message_by_chatid(self.chat_id)
if not self.latest_history:
# The user clicks New Session to log the audit
AuditLogService.create_chat_workflow(self.login_user, get_request_ip(self.request), self.client_id)
async def check_status(self, message: dict, is_init: bool = False) -> (bool, str):
"""
bool: Indicates if re-execution is requiredworkflow
"""
# chat ws connection first handle
workflow_id = message.get('flow_id', self.client_id)
self.chat_id = message.get('chat_id', '')
unique_id = generate_uuid()
if self.chat_id:
await self.init_history()
unique_id = f'{self.chat_id}_async_task_id'
logger.debug(f'init workflow with unique_id: {unique_id}, workflow_id: {workflow_id}, chat_id: {self.chat_id}')
self.workflow = RedisCallback(unique_id, workflow_id, self.chat_id, self.user_id)
# JudgingworkflowWhether it is online, if it is not online, close the currentwebsocketLinks
workflow_db = FlowDao.get_flow_by_id(workflow_id)
if workflow_db.status != FlowStatus.ONLINE.value and self.chat_id:
self.workflow.set_workflow_stop()
try:
await WorkflowOfflineError().websocket_close_message(websocket=self.websocket, close_ws=False)
await self.send_response('processing', 'close', '')
except:
logger.warning('websocket is closed')
pass
self.workflow.clear_workflow_status()
self.workflow = None
logger.debug('workflow is offline not support with chat')
return False, unique_id
status_info = self.workflow.get_workflow_status()
if not status_info:
# Indicates that the last run was completed
self.workflow = None
if self.latest_history and not is_init:
# Let the front-end terminate the last run
await self.send_response('processing', 'close', '')
return True, unique_id
# Indicates that the session is still running
if status_info['status'] == WorkflowStatus.INPUT.value and self.latest_history:
# If it is a state waiting for user input, you need to resend the last input message to the front-end
if self.latest_history.category in [WorkflowEventType.UserInput.value,
WorkflowEventType.OutputWithInput.value,
WorkflowEventType.OutputWithChoose.value]:
send_message = self.latest_history.model_dump()
send_message['message'] = json.loads(send_message['message'])
send_message['message_id'] = send_message.pop('id')
await self.send_json(send_message)
await self.send_response('processing', 'begin', '')
logger.debug('init workflow over, continue run workflow')
await self.workflow_run()
return False, unique_id
async def get_execute_worker(self) -> Optional[str]:
if not self.hash_key:
self.hash_key = self.chat_id if self.chat_id else generate_uuid()
return await workflow_stateful_worker.find_task_node(self.hash_key)
async def init_workflow(self, message: dict):
if self.workflow is not None:
return
try:
workflow_data = message.get('data')
workflow_id = message.get('flow_id', self.client_id)
flag, unique_id = await self.check_status(message, is_init=True)
# Description workflow In operation or offline
if not flag:
return
# Start a new workflow
self.workflow = RedisCallback(unique_id, workflow_id, self.chat_id, self.user_id)
await self.workflow.async_set_workflow_data(workflow_data)
await self.workflow.async_set_workflow_status(WorkflowStatus.WAITING.value)
# Start asynchronous task
execute_workflow.apply_async([unique_id, workflow_id, self.chat_id, self.user_id],
queue=await self.get_execute_worker())
await self.send_response('processing', 'begin', '')
await self.workflow_run()
except Exception as e:
logger.exception('init_workflow_error')
self.workflow = None
await self.send_response('error', 'over', {'status_code': 500, 'message': str(e)})
return
async def workflow_run(self):
async with self.run_lock:
return await self._workflow_run()
async def _workflow_run(self):
logger.debug('start workflow run')
if not self.workflow:
logger.warning('workflow is over by other task')
return True
# Needs to constantly evolve fromredisGet inworkflowReturned Message
async for event in self.workflow.get_response_until_break():
await self.send_json(event)
status_info = await self.workflow.async_get_workflow_status()
if not status_info or status_info['status'] in [WorkflowStatus.FAILED.value, WorkflowStatus.SUCCESS.value]:
await self.send_response('processing', 'close', '')
logger.debug(f"workflow is {status_info}, clear workflow object")
await self.workflow.async_clear_workflow_status()
self.workflow = None
return True
# Description runs to the state to be entered
elif status_info['status'] != WorkflowStatus.INPUT.value:
logger.warning(f'workflow status is unknown: {status_info}')
return False
async def handle_user_input(self, data: dict):
logger.info(f'get user input: {data}')
if not self.workflow:
logger.warning('workflow is over')
return
status_info = await self.workflow.async_get_workflow_status()
if status_info['status'] != WorkflowStatus.INPUT.value:
logger.warning(f'workflow is not input status: {status_info}')
else:
user_input = {}
message_id = None
new_message = None
# Currently one input node is supported
for node_id, node_info in data.items():
user_input[node_id] = node_info['data']
message_id = node_info.get('message_id')
new_message = node_info.get('message')
break
await self.workflow.async_set_user_input(user_input, message_id=message_id, message_content=new_message)
await self.workflow.async_set_workflow_status(WorkflowStatus.INPUT_OVER.value)
continue_workflow.apply_async([self.workflow.unique_id, self.workflow.workflow_id, self.workflow.chat_id,
self.workflow.user_id], queue=await self.get_execute_worker())
await self.workflow_run()
# await self.workflow_run()
================================================
FILE: src/backend/bisheng/chat/config.py
================================================
class ChatConfig:
streaming: bool = True
================================================
FILE: src/backend/bisheng/chat/handlers.py
================================================
import ast
import json
import time
from queue import Queue
from typing import Dict
from langchain.chains.llm import LLMChain
from langchain_core.prompts.prompt import PromptTemplate
from loguru import logger
from sqlmodel import select
from bisheng.api.utils import build_input_keys_response
from bisheng.api.v1.schemas import ChatMessage, ChatResponse
from bisheng.chat.manager import ChatManager
from bisheng.chat.utils import judge_source, process_graph, process_source_document
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum, ApplicationTypeEnum
from bisheng.common.schemas.telemetry.event_data_schema import ApplicationProcessEventData
from bisheng.common.services import telemetry_service
from bisheng.common.services.config_service import settings
from bisheng.core.database import get_sync_db_session
from bisheng.core.logger import trace_id_var
from bisheng.core.storage.minio.minio_manager import get_minio_storage
from bisheng.database.models.message import ChatMessage as ChatMessageDB, ChatMessageDao
from bisheng.database.models.report import Report
from bisheng.interface.importing.utils import import_by_type
from bisheng.interface.initialize.loading import instantiate_llm
from bisheng.utils.docx_temp import test_replace_string
from bisheng.utils.threadpool import thread_pool
from bisheng.utils.util import get_cache_key
from bisheng_langchain.chains.autogen.auto_gen import AutoGenChain
class Handler:
def __init__(self, stream_queue: Queue) -> None:
self.handler_dict = {
'default': self.process_message,
'autogen': self.process_autogen,
'auto_file': self.process_file,
'report': self.process_report,
'stop': self.process_stop
}
# Record Streaming Output
self.stream_queue = stream_queue
async def dispatch_task(self, session: ChatManager, client_id: str, chat_id: str, action: str,
payload: dict, user_id):
logger.info(f'dispatch_task payload={payload.get("inputs")}')
start_time = time.time()
with session.cache_manager.set_client_id(client_id, chat_id):
if not action:
action = 'default'
if action not in self.handler_dict:
raise Exception(f'unknown action {action}')
if action != 'stop':
# Empty the streaming output queue to prevent the previous answer from contaminating this answer
while not self.stream_queue.empty():
self.stream_queue.get()
try:
await self.handler_dict[action](session, client_id, chat_id, payload, user_id)
logger.info(f'dispatch_task done timecost={time.time() - start_time}')
finally:
end_time = time.time()
await telemetry_service.log_event(user_id=user_id,
event_type=BaseTelemetryTypeEnum.APPLICATION_PROCESS,
trace_id=trace_id_var.get(),
event_data=ApplicationProcessEventData(
app_id=ApplicationTypeEnum.SKILL.value,
app_name=ApplicationTypeEnum.SKILL.value,
app_type=ApplicationTypeEnum.SKILL,
chat_id=chat_id,
start_time=int(start_time),
end_time=int(end_time),
process_time=int((end_time - start_time) * 1000)
))
return client_id, chat_id
async def process_stop(self, session: ChatManager, client_id: str, chat_id: str, payload: Dict,
user_id):
key = get_cache_key(client_id, chat_id)
langchain_object = session.in_memory_cache.get(key)
action = payload.get('action')
if isinstance(langchain_object, AutoGenChain):
if hasattr(langchain_object, 'stop'):
logger.info('reciever_human_interactive langchain_objct')
await langchain_object.stop()
else:
logger.error(f'act=auto_gen act={action}')
else:
# Write streaming output to database
answer = ''
reasoning_answer = ''
while not self.stream_queue.empty():
msg = self.stream_queue.get()
if msg.get('type') == 'answer':
answer += msg.get('content', '')
elif msg.get('type') == 'reasoning':
reasoning_answer += msg.get('content', '')
if reasoning_answer.strip():
chat_message = ChatMessageDB(flow_id=client_id, chat_id=chat_id,
message=reasoning_answer,
category='answer',
type='end',
user_id=user_id,
remark='break_answer',
is_bot=True)
if chat_id:
db_message = ChatMessageDao.insert_one(chat_message)
await session.send_json(client_id, chat_id,
ChatMessage(**db_message.model_dump(), message_id=db_message.id), add=False)
if answer.strip():
chat_message = ChatMessageDB(flow_id=client_id, chat_id=chat_id,
message=answer,
category='answer',
type='end',
user_id=user_id,
remark='break_answer',
is_bot=True)
if chat_id:
db_message = ChatMessageDao.insert_one(chat_message)
await session.send_json(client_id, chat_id,
ChatMessage(**db_message.model_dump(), message_id=db_message.id), add=False)
# General Skills'stop
res = thread_pool.cancel_task([key]) # Proceed with the task in progresscancel
if res[0]:
# message = payload.get('inputs') or 'Hand Stop'
res = ChatResponse(type='end', user_id=user_id, message='')
close = ChatResponse(type='close')
await session.send_json(client_id, chat_id, res, add=False)
await session.send_json(client_id, chat_id, close, add=False)
logger.info('process_stop done')
async def process_report(self,
session: ChatManager,
client_id: str,
chat_id: str,
payload: Dict,
user_id=None):
chat_inputs = payload.pop('inputs', {})
chat_inputs.pop('data', '')
chat_inputs.pop('id', '')
key = get_cache_key(client_id, chat_id)
artifacts = session.in_memory_cache.get(key + '_artifacts')
if artifacts:
for k, value in artifacts.items():
if k in chat_inputs:
chat_inputs[k] = value
chat_message = ChatMessage(message=chat_inputs,
category='question',
type='bot',
user_id=user_id)
session.chat_history.add_message(client_id, chat_id, chat_message)
# process message
langchain_object = session.in_memory_cache.get(key)
chat_inputs = {'inputs': chat_inputs, 'is_begin': False}
result = await self.process_message(session, client_id, chat_id, chat_inputs, user_id)
# judge end type
start_resp = ChatResponse(type='start', user_id=user_id)
await session.send_json(client_id, chat_id, start_resp)
if langchain_object.stop_status():
start_resp.category = 'divider'
response = ChatResponse(message='Dropout',
type='end',
category='divider',
user_id=user_id)
await session.send_json(client_id, chat_id, response)
# build report
with get_sync_db_session() as db_session:
template = db_session.exec(
select(Report).where(Report.flow_id == client_id).order_by(
Report.id.desc())).first()
if not template:
logger.error('template not support')
return
minio_client = await get_minio_storage()
template_muban = await minio_client.get_share_link(template.object_name, clear_host=False)
report_name = langchain_object.report_name
report_name = report_name if report_name.endswith('.docx') else f'{report_name}.docx'
test_replace_string(template_muban, result, report_name)
file = await minio_client.get_share_link(report_name, clear_host=False)
response = ChatResponse(type='end',
files=[{
'file_url': file,
'file_name': report_name
}],
user_id=user_id)
await session.send_json(client_id, chat_id, response)
close_resp = ChatResponse(type='close', category='system', user_id=user_id)
await session.send_json(client_id, chat_id, close_resp)
def recommend_question(self, langchain_obj, chat_history: list):
prompt = """Given the following historical chat messages:
{history}
Summarize what the refining user might ask next3Questions, output questions directly, separate questions with line breaks, and do not add any modifier text or prefixes.
"""
if hasattr(langchain_obj, 'llm'):
llm_chain = LLMChain(llm=langchain_obj.llm,
prompt=PromptTemplate.from_template(prompt))
else:
keyword_conf = settings.get_default_llm() or {}
if keyword_conf:
node_type = keyword_conf.pop('type', 'HostQwenChat') # Compatible with legacy configurations
class_object = import_by_type(_type='llms', name=node_type)
llm = instantiate_llm(node_type, class_object, keyword_conf)
llm_chain = LLMChain(llm=llm, prompt=PromptTemplate.from_template(prompt))
if llm_chain:
questions = llm_chain.predict(history=chat_history)
return questions.split('\n')
else:
logger.info('llm_chain is None recommend_over')
return []
async def process_message(self,
session: ChatManager,
client_id: str,
chat_id: str,
payload: Dict,
user_id=None):
# Process the graph data and chat message
chat_inputs = payload.pop('inputs', {})
chat_inputs.pop('id', '')
is_begin = payload.get('is_begin', True)
key = get_cache_key(client_id, chat_id)
artifacts = session.in_memory_cache.get(key + '_artifacts')
if artifacts:
for k, value in artifacts.items():
if k in chat_inputs and value:
chat_inputs[k] = value
chat_inputs = ChatMessage(
message=chat_inputs,
category='question',
is_bot=not is_begin,
type='bot',
user_id=user_id,
)
if is_begin:
# FROMfile auto trigger process_message, the question already saved
session.chat_history.add_message(client_id, chat_id, chat_inputs)
start_resp = ChatResponse(type='start', user_id=user_id)
await session.send_json(client_id, chat_id, start_resp)
# is_first_message = len(self.chat_history.get_history(client_id=client_id)) <= 1
# Generate result and thought
try:
logger.debug(f'Generating result and thought key={key}')
langchain_object = session.in_memory_cache.get(key)
result, intermediate_steps, source_doucment = await process_graph(
langchain_object=langchain_object,
chat_inputs=chat_inputs,
websocket=session.active_connections[get_cache_key(client_id, chat_id)],
flow_id=client_id,
chat_id=chat_id,
stream_queue=self.stream_queue,
)
# questions = []
# if is_begin and langchain_object.memory and langchain_object.memory.buffer:
# questions = self.recommend_question(langchain_object,
# langchain_object.memory.buffer)
except Exception as e:
# Log stack trace
logger.exception(e)
end_resp = ChatResponse(type='end',
intermediate_steps=f'Analysis error.{str(e)}',
user_id=user_id)
await session.send_json(client_id, chat_id, end_resp)
close_resp = ChatResponse(type='close', user_id=user_id)
if not chat_id:
# Skills orchestration page, Unable to displayintermediate
await session.send_json(client_id, chat_id, start_resp)
end_resp.message = end_resp.intermediate_steps
end_resp.intermediate_steps = None
await session.send_json(client_id, chat_id, end_resp)
await session.send_json(client_id, chat_id, close_resp)
return
# Send a response back to the frontend, if needed
intermediate_steps = intermediate_steps or ''
# history = self.chat_history.get_history(client_id, chat_id, filter_messages=False)
await self.intermediate_logs(session, client_id, chat_id, user_id, intermediate_steps)
extra = {}
source, result = await judge_source(result, source_doucment, chat_id, extra)
# Final Result
if isinstance(langchain_object, AutoGenChain):
# Group chat, the last message is repeated, do not go back
start_resp.category = 'divider'
await session.send_json(client_id, chat_id, start_resp)
response = ChatResponse(message='End of the current round',
type='end',
category='divider',
user_id=user_id)
await session.send_json(client_id, chat_id, response)
else:
# Normal
if is_begin:
start_resp.category = 'answer'
await session.send_json(client_id, chat_id, start_resp)
response = ChatResponse(message=result,
extra=json.dumps(extra),
type='end',
category='answer',
user_id=user_id,
source=int(source))
await session.send_json(client_id, chat_id, response)
# loop end
if is_begin:
close_resp = ChatResponse(type='close', user_id=user_id)
await session.send_json(client_id, chat_id, close_resp)
if source:
# Handling recallschunk
await process_source_document(
source_doucment,
chat_id,
response.message_id,
result,
)
return result
async def process_file(self, session: ChatManager, client_id: str, chat_id: str, payload: dict,
user_id: int):
file_name = payload['inputs']
batch_question = payload['inputs']['questions']
# Automatically close purchase order afterL3
file = ChatMessage(is_bot=False, message=file_name, type='end', user_id=user_id)
session.chat_history.add_message(client_id, chat_id, file)
start_resp = ChatResponse(type='start', category='system', user_id=user_id)
key = get_cache_key(client_id, chat_id)
langchain_object = session.in_memory_cache.get(key)
if batch_question and len(langchain_object.input_keys) == 0:
# prompt There is no place to enter the question
await session.send_json(client_id, chat_id, start_resp)
log_resp = start_resp.copy()
log_resp.intermediate_steps = 'Saat IniPromptSettings have no user input,PresetQuestion Inactive'
log_resp.type = 'end'
await session.send_json(client_id, chat_id, log_resp)
input_key = 'input'
input_dict = {}
else:
input_key = list(build_input_keys_response(langchain_object,
{})['input_keys'].keys())[0]
input_dict = {k: '' for k in langchain_object.input_keys}
batch_question = ['start'] if not batch_question else batch_question # Ensure click OK, will executeLLM
report = ''
logger.info(f'process_file batch_question={batch_question} input_key={input_key}')
for question in batch_question:
if not question:
continue
input_dict[input_key] = question
payload = {'inputs': input_dict, 'is_begin': False}
start_resp.category == 'question'
await session.send_json(client_id, chat_id, start_resp)
step_resp = ChatResponse(type='end',
intermediate_steps=question,
category='question',
user_id=user_id)
await session.send_json(client_id, chat_id, step_resp)
result = await self.process_message(session, client_id, chat_id, payload, user_id)
response_step = ChatResponse(intermediate_steps=result,
type='start',
category='answer',
user_id=user_id)
response_step.type = 'end'
await session.send_json(client_id, chat_id, response_step)
report = f"""{report}### {question} \n {result} \n """
if len(batch_question) > 1:
start_resp.category = 'report'
await session.send_json(client_id, chat_id, start_resp)
response = ChatResponse(type='end',
intermediate_steps=report,
category='report',
user_id=user_id)
await session.send_json(client_id, chat_id, response)
close_resp = ChatResponse(type='close', category='system', user_id=user_id)
await session.send_json(client_id, chat_id, close_resp)
async def process_autogen(self, session: ChatManager, client_id: str, chat_id: str,
payload: dict, user_id: int):
key = get_cache_key(client_id, chat_id)
langchain_object = session.in_memory_cache.get(key)
logger.info(f'reciever_human_interactive langchain={langchain_object}')
action = payload.get('action')
if action.lower() == 'continue':
# autgen_user At the time of the dialogue, the process wait() Needs a new one
if hasattr(langchain_object, 'input'):
await langchain_object.input(payload.get('inputs'))
# A new conversation begins,
start_resp = ChatResponse(type='start')
await session.send_json(client_id, chat_id, start_resp)
else:
logger.error(f'act=auto_gen act={action}')
async def intermediate_logs(self, session: ChatManager, client_id, chat_id, user_id,
intermediate_steps):
end_resp = ChatResponse(type='end', user_id=user_id)
if not intermediate_steps:
return await session.send_json(client_id, chat_id, end_resp, add=False)
# Store the final analysis process in the database
steps = []
if isinstance(intermediate_steps, list):
# autogen produce multi dialog
for message in intermediate_steps:
# autogen produce message object
if isinstance(message, str):
log = message
is_bot = True
category = 'processing'
content = sender = receiver = None
else:
content = message.get('message')
log = message.get('log', '')
sender = message.get('sender')
receiver = message.get('receiver')
is_bot = False if receiver and receiver.get('is_bot') else True
category = message.get('category', 'processing')
msg = ChatResponse(message=content,
intermediate_steps=log,
sender=sender,
receiver=receiver,
type='end',
user_id=user_id,
is_bot=is_bot,
category=category)
steps.append(msg)
else:
# agent model will produce the steps log
from langchain.schema import Document # noqa
if chat_id and intermediate_steps.strip():
finally_log = ''
for s in intermediate_steps.split('\n'):
# Clean up some redundant logs in recall logs
if 'source_documents' in s:
answer = ast.literal_eval(s.split(':', 1)[1])
if 'result' in answer:
finally_log += 'Answer: ' + answer.get('result') + '\n\n'
else:
finally_log += s + '\n\n'
msg = ChatResponse(intermediate_steps=finally_log, type='end', user_id=user_id)
steps.append(msg)
else:
# onlyL3The user gives a detailedlog
end_resp.intermediate_steps = intermediate_steps
await session.send_json(client_id, chat_id, end_resp, add=False)
for step in steps:
# save chate message
session.chat_history.add_message(client_id, chat_id, step)
================================================
FILE: src/backend/bisheng/chat/manager.py
================================================
import asyncio
import concurrent.futures
import json
import time
from collections import defaultdict
from queue import Queue
from typing import Any, Dict, List
from fastapi import Request, WebSocket, WebSocketDisconnect, status
from loguru import logger
from bisheng.api.services.assistant import AssistantService
from bisheng.api.services.audit_log import AuditLogService
from bisheng.api.services.workflow import WorkFlowService
from bisheng.api.utils import build_flow_no_yield
from bisheng.api.v1.schemas import ChatMessage, ChatResponse, FileResponse
from bisheng.chat.client import ChatClient
from bisheng.chat.clients.workflow_client import WorkflowClient
from bisheng.chat.types import IgnoreException, WorkType
from bisheng.chat.utils import process_node_data
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum, ApplicationTypeEnum
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.base import BaseErrorCode
from bisheng.common.errcode.chat import (DocumentParseError, InputDataParseError,
LLMExecutionError, SkillDeletedError,
SkillNotOnlineError)
from bisheng.common.schemas.telemetry.event_data_schema import NewMessageSessionEventData, ApplicationAliveEventData
from bisheng.common.services import telemetry_service
from bisheng.core.cache.flow import InMemoryCache
from bisheng.core.cache.manager import Subject, cache_manager
from bisheng.core.database import get_sync_db_session
from bisheng.core.logger import trace_id_var
from bisheng.database.models.flow import Flow, FlowType, FlowDao
from bisheng.database.models.session import MessageSession, MessageSessionDao
from bisheng.graph.utils import find_next_node
from bisheng.processing.process import process_tweaks
from bisheng.user.domain.models.user import User, UserDao
from bisheng.utils import generate_uuid
from bisheng.utils import get_request_ip
from bisheng.utils.threadpool import ThreadPoolManager, thread_pool
from bisheng.utils.util import get_cache_key
from bisheng_langchain.input_output.output import Report
class ChatHistory(Subject):
def __init__(self):
super().__init__()
self.history: Dict[str, List[ChatMessage]] = defaultdict(list)
def add_message(
self,
client_id: str,
chat_id: str,
message: ChatMessage,
):
"""Add a message to the chat history."""
t1 = time.time()
from bisheng.database.models.message import ChatMessage
message.flow_id = client_id
message.chat_id = chat_id
db_message = None
if chat_id and (message.message or message.intermediate_steps
or message.files) and message.type != 'stream':
msg = message.copy()
msg.message = json.dumps(msg.message, ensure_ascii=False) if isinstance(msg.message, dict) else msg.message
files = json.dumps(msg.files) if msg.files else ''
msg.__dict__.pop('files')
db_message = ChatMessage(files=files, **msg.__dict__)
logger.info(f'chat={db_message} time={time.time() - t1}')
with get_sync_db_session() as seesion:
seesion.add(db_message)
seesion.commit()
seesion.refresh(db_message)
message.message_id = db_message.id
if not isinstance(message, FileResponse):
self.notify()
return db_message
def empty_history(self, client_id: str, chat_id: str):
"""Empty the chat history for a client."""
self.history[get_cache_key(client_id, chat_id)] = []
class ChatManager:
def __init__(self):
self.active_connections: Dict[str, WebSocket] = {}
self.chat_history = ChatHistory()
self.cache_manager = cache_manager
self.cache_manager.attach(self.update)
self.in_memory_cache = InMemoryCache()
self.task_manager: List[asyncio.Task] = []
# Connected clients
self.active_clients: Dict[str, ChatClient] = {}
# Record Streaming Output Results
self.stream_queue: Dict[str, Queue] = {}
def update(self):
if self.cache_manager.current_client_id in self.active_connections:
self.last_cached_object_dict = self.cache_manager.get_last()
# Add a new ChatResponse with the data
chat_response = FileResponse(
message=None,
type='file',
data=self.last_cached_object_dict['obj'],
data_type=self.last_cached_object_dict['type'],
)
self.chat_history.add_message(self.cache_manager.current_client_id,
self.cache_manager.current_chat_id, chat_response)
async def connect(self, client_id: str, chat_id: str, websocket: WebSocket):
await websocket.accept()
self.active_connections[get_cache_key(client_id, chat_id)] = websocket
self.stream_queue[get_cache_key(client_id, chat_id)] = Queue()
def reuse_connect(self, client_id: str, chat_id: str, websocket: WebSocket):
self.active_connections[get_cache_key(client_id, chat_id)] = websocket
self.stream_queue[get_cache_key(client_id, chat_id)] = Queue()
def disconnect(self, client_id: str, chat_id: str, key: str = None):
if key:
logger.debug('disconnect_ws key={}', key)
self.active_connections.pop(key, None)
else:
logger.info('disconnect_ws key={}', get_cache_key(client_id, chat_id))
self.active_connections.pop(get_cache_key(client_id, chat_id), None)
async def send_message(self, client_id: str, chat_id: str, message: str):
websocket = self.active_connections[get_cache_key(client_id, chat_id)]
await websocket.send_text(message)
async def send_json(self, client_id: str, chat_id: str, message: ChatMessage, add=True):
message.flow_id = client_id
message.chat_id = chat_id
websocket = self.active_connections[get_cache_key(client_id, chat_id)]
# Add message thread
if add:
self.chat_history.add_message(client_id, chat_id, message)
await websocket.send_json(message.dict())
async def close_connection(self,
flow_id: str,
chat_id: str,
code: int,
reason: str,
key_list: List[str] = None):
"""close and clean ws"""
if websocket := self.active_connections.get(get_cache_key(flow_id, chat_id)):
try:
await websocket.close(code=code, reason=reason)
self.disconnect(flow_id, chat_id)
if key_list:
for key in key_list:
self.disconnect(flow_id, chat_id, key)
except RuntimeError as exc:
# This is to catch the following error:
# Unexpected ASGI message 'websocket.close', after sending 'websocket.close'
if 'after sending' in str(exc):
logger.error(exc)
async def ping(self, client_id: str, chat_id: str):
ping_pong = ChatMessage(
is_bot=True,
message='pong',
intermediate_steps='',
)
await self.send_json(client_id, chat_id, ping_pong, False)
def set_cache(self, client_id: str, langchain_object: Any) -> bool:
"""
Set the cache for a client.
"""
self.in_memory_cache.set(client_id, langchain_object)
return client_id in self.in_memory_cache
async def accept_client(self, client_key: str, chat_client: ChatClient, websocket: WebSocket):
await websocket.accept()
self.active_clients[client_key] = chat_client
def clear_client(self, client_key: str):
if client_key not in self.active_clients:
logger.warning('close_client client_key={} not in active_clients', client_key)
return
logger.info('close_client client_key={}', client_key)
self.active_clients.pop(client_key, None)
async def close_client(self, client_key: str, code: int, reason: str):
if chat_client := self.active_clients.get(client_key):
try:
self.clear_client(client_key)
await chat_client.close()
await chat_client.websocket.close(code=code, reason=reason)
except RuntimeError as exc:
# This is to catch the following error:
# Unexpected ASGI message 'websocket.close', after sending 'websocket.close'
if 'after sending' in str(exc):
logger.error(exc)
async def dispatch_client(
self,
request: Request | WebSocket, # Raw request body
client_id: str,
chat_id: str,
login_user: UserPayload,
work_type: WorkType,
websocket: WebSocket,
graph_data: dict = None):
start_time = time.time()
client_key = generate_uuid()
if work_type == WorkType.GPTS:
chat_client = ChatClient(request,
client_key,
client_id,
chat_id,
login_user.user_id,
login_user,
work_type,
websocket,
graph_data=graph_data)
else:
chat_client = WorkflowClient(request,
client_key,
client_id,
chat_id,
login_user.user_id,
login_user,
work_type,
websocket)
await self.accept_client(client_key, chat_client, websocket)
logger.debug(
f'act=accept_client client_key={client_key} client_id={client_id} chat_id={chat_id}')
try:
while True:
try:
json_payload_receive = await asyncio.wait_for(websocket.receive_json(),
timeout=2.0)
except asyncio.TimeoutError:
continue
try:
payload = json.loads(json_payload_receive) if json_payload_receive else {}
except TypeError:
payload = json_payload_receive
# clientHandle your own business logic internally
# TODO zgq: Here you can increase the thread pool to prevent blocking
await chat_client.handle_message(payload)
except WebSocketDisconnect as e:
logger.info('act=rcv_client_disconnect {}', str(e))
except IgnoreException:
# client Inside closed on its ownwsLink, no abnormalities
pass
except Exception as e:
# Handle any exceptions that might occur
logger.exception(str(e))
await self.close_client(client_key,
code=status.WS_1011_INTERNAL_ERROR,
reason='Backend Unknown Error Type')
finally:
try:
await self.close_client(client_key,
code=status.WS_1000_NORMAL_CLOSURE,
reason='Client disconnected')
except Exception as e:
logger.exception(e)
self.clear_client(client_key)
if work_type == WorkType.GPTS:
app_info = await AssistantService.get_one_assistant(client_id)
app_type = ApplicationTypeEnum.ASSISTANT
else:
app_info = await WorkFlowService.get_one_workflow_simple_info(client_id)
app_type = ApplicationTypeEnum.WORKFLOW
app_name = app_info.name if app_info else 'unknown'
await telemetry_service.log_event(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.APPLICATION_ALIVE,
trace_id=trace_id_var.get(),
event_data=ApplicationAliveEventData(
app_id=client_id,
app_name=app_name,
app_type=app_type,
chat_id=chat_id,
start_time=int(start_time),
end_time=int(time.time()),
))
async def handle_websocket(
self,
flow_id: str,
chat_id: str,
websocket: WebSocket,
user_id: int,
gragh_data: dict = None,
source: str = "platform"
):
start_time = time.time()
# Establish connections and store mappings for compatibility without reusews scenario
key_list = set([get_cache_key(flow_id, chat_id)])
await self.connect(flow_id, chat_id, websocket)
logger.info("act=ws_connected flow_id={} chat_id={} user_id={}", flow_id, chat_id, user_id)
context_dict = {
get_cache_key(flow_id, chat_id): {
'status': 'init',
'has_file': False,
'flow_id': flow_id,
'chat_id': chat_id
}
}
payload = {}
base_param = {
'user_id': user_id,
'flow_id': flow_id,
'chat_id': chat_id,
'type': 'end',
'category': 'system'
}
try:
while True:
try:
json_payload_receive = await asyncio.wait_for(websocket.receive_json(),
timeout=2.0)
except asyncio.TimeoutError:
json_payload_receive = ''
try:
payload = json.loads(json_payload_receive) if json_payload_receive else {}
except TypeError:
payload = json_payload_receive
# websocket multi use
if payload and 'flow_id' in payload:
chat_id = payload.get('chat_id')
flow_id = payload.get('flow_id')
key = get_cache_key(flow_id, chat_id)
if key not in key_list:
gragh_data, message = self.preper_reuse_connection(
flow_id, chat_id, websocket)
context_dict.update({
key: {
'status': 'init',
'has_file': False,
'flow_id': flow_id,
'chat_id': chat_id
}
})
if message:
logger.info('act=new_chat message={}', str(message))
erro_resp = ChatResponse(intermediate_steps=str(message), **base_param)
erro_resp.category = 'error'
await message.websocket_close_message(websocket=websocket)
break
logger.info('act=new_chat_init_success key={}', key)
key_list.add(key)
if not payload.get('inputs'):
continue
# Determine if the current is an empty loop
process_param = {
'autogen_pool': thread_pool,
'user_id': user_id,
'payload': payload,
'graph_data': gragh_data,
'context_dict': context_dict,
'source': source
}
if payload:
await self._process_when_payload(flow_id, chat_id, **process_param)
else:
for v in context_dict.values():
if v['status'] != 'init':
await self._process_when_payload(v['flow_id'], v['chat_id'],
**process_param)
# Processing Task Status
complete_normal = await thread_pool.as_completed(key_list)
complete = complete_normal
# if async_task and async_task.done():
# logger.debug(f'async_task_complete result={async_task.result}')
if complete:
for future_key, future in complete:
try:
future.result()
logger.debug('task_complete key={}', future_key)
except asyncio.exceptions.CancelledError:
continue
except Exception as e:
if isinstance(e, concurrent.futures.CancelledError):
continue
logger.exception('feature_key={} {}', future_key, e)
erro_resp = ChatResponse(**base_param)
context = context_dict.get(future_key)
if context.get('status') == 'init':
raise LLMExecutionError(exception=e, error=str(e))
elif context.get('has_file'):
raise DocumentParseError(exception=e, error=str(e))
else:
raise InputDataParseError(exception=e, error=str(e))
context['status'] = 'init'
await self.send_json(context.get('flow_id'), context.get('chat_id'),
erro_resp)
erro_resp.type = 'close'
await self.send_json(context.get('flow_id'), context.get('chat_id'),
erro_resp)
except WebSocketDisconnect as e:
logger.info(f'act=rcv_client_disconnect {str(e)}')
except BaseErrorCode as e:
# Business exception.
logger.error(str(e))
erro_resp = ChatResponse(intermediate_steps=str(e), **base_param, message=json.dumps(e.to_dict()))
erro_resp.category = 'error'
await self.send_json(flow_id, chat_id, erro_resp)
erro_resp.type = 'close'
await self.send_json(flow_id, chat_id, erro_resp)
except Exception as e:
# Handle any exceptions that might occur
logger.exception(str(e))
await self.close_connection(flow_id=flow_id,
chat_id=chat_id,
code=status.WS_1011_INTERNAL_ERROR,
reason='Backend Unknown Error Type',
key_list=key_list)
finally:
thread_pool.cancel_task(key_list) # Proceed with the task in progresscancel
try:
await self.close_connection(flow_id=flow_id,
chat_id=chat_id,
code=status.WS_1000_NORMAL_CLOSURE,
reason='Client disconnected',
key_list=key_list)
except Exception as e:
logger.exception(e)
self.disconnect(flow_id, chat_id)
flow_info = await WorkFlowService.get_one_workflow_simple_info(flow_id)
await telemetry_service.log_event(user_id=user_id, event_type=BaseTelemetryTypeEnum.APPLICATION_ALIVE,
trace_id=trace_id_var.get(),
event_data=ApplicationAliveEventData(
app_id=flow_id,
app_name=flow_info.name if flow_info else 'unknown',
app_type=ApplicationTypeEnum.SKILL,
chat_id=chat_id,
start_time=int(start_time),
end_time=int(time.time()),
))
async def _process_when_payload(self, flow_id: str, chat_id: str,
autogen_pool: ThreadPoolManager, **kwargs):
"""
Process the incoming message and send the response.
"""
# set start
user_id = kwargs.get('user_id')
graph_data = kwargs.get('graph_data')
payload = kwargs.get('payload')
key = get_cache_key(flow_id, chat_id)
context = kwargs.get('context_dict').get(key)
source = kwargs.get('source', 'platform')
status_ = context.get('status')
if payload and status_ != 'init':
logger.error('act=input_before_complete payload={} status={}', payload, status_)
if not payload:
payload = context.get('payload')
context['payload'] = payload
is_begin = bool(status_ == 'init' and 'action' not in payload)
base_param = {'user_id': user_id, 'flow_id': flow_id, 'chat_id': chat_id}
start_resp = ChatResponse(type='begin', category='system', **base_param)
if is_begin:
await self.send_json(flow_id, chat_id, start_resp)
# Determine if the session was created for the first time
if chat_id:
exist_session = MessageSessionDao.get_one(chat_id=chat_id)
if not exist_session: # Description is to create a new session
websocket = self.active_connections[key]
login_user = await UserPayload.init_login_user(**{
'user_id': user_id,
'user_name': UserDao.get_user(user_id).user_name,
})
flow_info = FlowDao.get_flow_by_id(flow_id)
message_session = await MessageSessionDao.async_insert_one(MessageSession(
chat_id=chat_id,
flow_id=flow_id,
flow_name=flow_info.name,
flow_type=FlowType.FLOW.value,
user_id=user_id,
))
# RecordTelemetryJournal
await telemetry_service.log_event(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.NEW_MESSAGE_SESSION,
trace_id=trace_id_var.get(),
event_data=NewMessageSessionEventData(
session_id=message_session.chat_id,
app_id=flow_id,
source=source, # type: ignore
app_name=flow_info.name,
app_type=ApplicationTypeEnum.SKILL
)
)
AuditLogService.create_chat_flow(login_user, get_request_ip(websocket),
flow_id, flow_info)
start_resp.type = 'start'
# should input data
step_resp = ChatResponse(type='end', category='system', **base_param)
langchain_obj_key = get_cache_key(flow_id, chat_id)
if status_ == 'init':
has_file, graph_data = await self.preper_payload(payload, graph_data,
langchain_obj_key, flow_id, chat_id,
start_resp, step_resp)
status_ = 'init_object'
context.update({'status': status_})
context.update({'has_file': has_file})
# build in thread
if not self.in_memory_cache.get(langchain_obj_key) and status_ == 'init_object':
thread_pool.submit(key,
self.init_langchain_object_task,
flow_id,
chat_id,
user_id,
graph_data,
trace_id=chat_id)
status_ = 'waiting_object'
context.update({'status': status_})
# run in thread
if payload and self.in_memory_cache.get(langchain_obj_key):
action, over = await self.preper_action(flow_id, chat_id, langchain_obj_key, payload,
start_resp, step_resp)
logger.debug(
f"processing_message message={payload.get('inputs')} action={action} over={over}")
if not over:
# task_service: 'TaskService' = get_task_service()
# async_task = asyncio.create_task(
# task_service.launch_task(Handler().dispatch_task, self, client_id,
# chat_id, action, payload, user_id))
from bisheng_langchain.chains.autogen.auto_gen import AutoGenChain
from bisheng.chat.handlers import Handler
params = {
'session': self,
'client_id': flow_id,
'chat_id': chat_id,
'action': action,
'payload': payload,
'user_id': user_id,
'trace_id': chat_id
}
if isinstance(self.in_memory_cache.get(langchain_obj_key), AutoGenChain):
# autogen chain
logger.info(f'autogen_submit {langchain_obj_key}')
autogen_pool.submit(key,
Handler(stream_queue=self.stream_queue[key]).dispatch_task,
**params)
else:
thread_pool.submit(key,
Handler(stream_queue=self.stream_queue[key]).dispatch_task,
**params)
status_ = 'init'
context.update({'status': status_})
context.update({'payload': {}}) # clean message
def preper_reuse_connection(self, flow_id: str, chat_id: str, websocket: WebSocket):
# Set multiplexed mapping relationship
message = None
with get_sync_db_session() as session:
gragh_data = session.get(Flow, flow_id)
if not gragh_data:
message = SkillDeletedError()
if gragh_data.status != 2:
message = SkillNotOnlineError()
gragh_data = gragh_data.data
self.reuse_connect(flow_id, chat_id, websocket)
return gragh_data, message
async def preper_payload(self, payload, graph_data, langchain_obj_key, client_id, chat_id,
start_resp: ChatResponse, step_resp: ChatResponse):
has_file = False
has_variable = False
if 'inputs' in payload and ('data' in payload['inputs']
or 'file_path' in payload['inputs']):
node_data = payload['inputs'].get('data', '') or [payload['inputs']]
graph_data = self.refresh_graph_data(graph_data, node_data)
# Upload the file againbuild, it's a bit bold, Change to onlydocument loader Membutuhkan
node_loader = False
for nod in node_data:
if any('Loader' in x['id'] for x in find_next_node(graph_data, nod['id'])):
node_loader = True
break
if node_loader:
self.set_cache(langchain_obj_key, None) # rebuild object
has_file = any(['InputFile' in nd.get('id', '') for nd in node_data])
has_variable = any(['VariableNode' in nd.get('id', '') for nd in node_data])
if has_file:
step_resp.intermediate_steps = 'File upload complete, start parsing'
await self.send_json(client_id, chat_id, start_resp)
await self.send_json(client_id, chat_id, step_resp, add=False)
await self.send_json(client_id, chat_id, start_resp)
logger.info('input_file start_log')
await asyncio.sleep(-1) # Quick Skip
elif has_variable:
await self.send_json(client_id, chat_id, start_resp)
logger.info('input_variable start_log')
await asyncio.sleep(-1) # Quick Skip
return has_file, graph_data
async def preper_action(self, client_id, chat_id, langchain_obj_key, payload,
start_resp: ChatResponse, step_resp: ChatResponse):
langchain_obj = self.in_memory_cache.get(langchain_obj_key)
batch_question = []
action = ''
over = False
if isinstance(langchain_obj, Report):
action = 'report'
step_resp.intermediate_steps = 'File parsing complete, start generating report'
await self.send_json(client_id, chat_id, step_resp)
elif payload.get('action') == 'stop':
action = 'stop'
elif 'action' in payload:
action = 'autogen'
elif 'clear_history' in payload and payload['clear_history']:
self.chat_history.empty_history(client_id, chat_id)
action = 'clear_history'
over = True
elif 'data' in payload['inputs'] or 'file_path' in payload['inputs']:
action = 'auto_file'
batch_question = self.in_memory_cache.get(langchain_obj_key + '_question')
payload['inputs']['questions'] = batch_question
if not batch_question:
# no question
file_msg = payload['inputs']
file_msg.pop('id', '')
file_msg.pop('data', '')
file = ChatMessage(flow_id=client_id,
chat_id=chat_id,
is_bot=False,
message=file_msg,
type='end',
user_id=step_resp.user_id)
self.chat_history.add_message(client_id, chat_id, file)
step_resp.message = ''
step_resp.intermediate_steps = 'File analysis complete'
await self.send_json(client_id, chat_id, step_resp)
start_resp.type = 'close'
await self.send_json(client_id, chat_id, start_resp)
over = True
else:
step_resp.intermediate_steps = 'File parsing complete, start execution'
await self.send_json(client_id, chat_id, step_resp, add=False)
await asyncio.sleep(-1) # Quick Skip
return action, over
# async def init_langchain_object(self, flow_id, chat_id, user_id, graph_data):
# session_id = chat_id
# session_service = get_session_service()
# if session_id is None:
# session_id = session_service.generate_key(session_id=session_id, data_graph=graph_data)
# # Load the graph using SessionService
# session = await session_service.load_session(session_id, graph_data)
# graph, artifacts = session if session else (None, None)
# if not graph:
# raise ValueError('Graph not found in the session')
# built_object = await graph.abuild()
# key_node = get_cache_key(flow_id, chat_id)
# logger.info(f'init_langchain key={key_node}')
# question = []
# for node in graph.nodes:
# if node.vertex_type == 'InputNode':
# question.extend(node.build)
# self.set_cache(key_node + '_question', question)
# self.set_cache(key_node, built_object)
# self.set_cache(key_node + '_artifacts', artifacts)
# return built_object
async def init_langchain_object_task(self, flow_id, chat_id, user_id, graph_data):
key_node = get_cache_key(flow_id, chat_id)
logger.info(f'init_langchain build_begin key={key_node}')
with get_sync_db_session() as session:
db_user = session.get(User, user_id) # Used to support nodes to determine user permissions
artifacts = {}
start_time = time.time()
graph = await build_flow_no_yield(graph_data=graph_data,
artifacts=artifacts,
process_file=True,
flow_id=flow_id,
chat_id=chat_id,
user_name=db_user.user_name)
await graph.abuild()
logger.info(f'init_langchain build_end timecost={time.time() - start_time}')
question = []
for node in graph.vertices:
if node.vertex_type in {'InputNode', 'AudioInputNode', 'FileInputNode'}:
question_parse = await node.get_result()
if isinstance(question_parse, list):
question.extend(question_parse)
else:
question.append(question_parse)
self.set_cache(key_node + '_question', question)
input_nodes = graph.get_input_nodes()
for node in input_nodes:
# Store onlychain
if node.base_type == 'inputOutput' and node.vertex_type != 'Report':
continue
self.set_cache(key_node, await node.get_result())
self.set_cache(key_node + '_artifacts', artifacts)
return flow_id, chat_id
def refresh_graph_data(self, graph_data: dict, node_data: List[dict]):
tweak = process_node_data(node_data)
"""upload file to make flow work"""
return process_tweaks(graph_data, tweaks=tweak)
================================================
FILE: src/backend/bisheng/chat/types.py
================================================
from enum import Enum
# clientBusiness Type
class WorkType(Enum):
# Skills Conversation Business
FLOW = 'flow'
# Assistant Conversation Business
GPTS = 'assistant'
# workflow in terms of business,
WORKFLOW = 'workflow'
class IgnoreException(Exception):
""" dont`t need print traceback stack """
def __init__(self, message):
self.message = message
super().__init__(self.message)
def __str__(self):
return self.message
================================================
FILE: src/backend/bisheng/chat/utils.py
================================================
import ast
import json
import re
from enum import Enum
from typing import Dict, List
from urllib.parse import unquote, urlparse
from fastapi import WebSocket
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.schema.document import Document
from loguru import logger
from bisheng.api.v1.schemas import ChatMessage
from bisheng.core.database import get_sync_db_session, get_async_db_session
from bisheng.database.models.message import ChatMessageDao
from bisheng.database.models.recall_chunk import RecallChunk
from bisheng.interface.utils import try_setting_streaming_options
from bisheng.llm.domain.services import LLMService
from bisheng.processing.base import get_result_and_steps
class SourceType(Enum):
"""
source type
"""
NOT_SUPPORT = 0 # Traceability is not supported
FILE = 1 # Trace back to the source file to supportbboxin that form.
NO_PERMISSION = 2 # No permission to access traceability information
LINK = 3 # LinkedchunkContents
QA = 4 # HitsQAThe knowledge base upon
async def process_graph(langchain_object,
chat_inputs: ChatMessage,
websocket: WebSocket,
flow_id: str = None,
chat_id: str = None,
**kwargs):
langchain_object = try_setting_streaming_options(langchain_object, websocket)
logger.debug('Loaded langchain object')
if langchain_object is None:
# Raise user facing error
raise ValueError(
'There was an error loading the langchain_object. Please, check all the nodes and try again.'
)
# Generate result and thought
try:
if not chat_inputs.message:
logger.debug('No message provided')
raise ValueError('No message provided')
logger.debug('Generating result and thought')
result, intermediate_steps, source_document = await get_result_and_steps(
langchain_object,
chat_inputs.message,
websocket=websocket,
flow_id=flow_id,
chat_id=chat_id,
**kwargs)
logger.debug('Generated result and intermediate_steps')
return result, intermediate_steps, source_document
except Exception as e:
# Log stack trace
logger.exception(e)
raise e
prompt_template = '''Analyze givenQuestionEkstrakQuestionContained inKeyWords, output list format
Examples:
Question: The current ratios of Damon over the past three years are as follows:2021Year:3.74x2020Year:2.82x2019Year:2.05x
KeyWords: ['Past three years', 'Current ratio', '2021', '3.74', '2020', '2.82', '2019', '2.05']
----------------
Question: {question}'''
def extract_answer_keys(answer, llm):
"""
EkstrakanswerKeywords in
"""
llm_chain = None
if llm:
llm_chain = LLMChain(llm=llm, prompt=PromptTemplate.from_template(prompt_template))
try:
keywords_str = llm_chain.run(answer)
keywords_str = re.sub('.*', '', keywords_str, flags=re.S).strip()
keywords = ast.literal_eval(keywords_str[9:])
except Exception:
import jieba.analyse
logger.warning(f'llm extract_not_support, change to jieba')
keywords = jieba.analyse.extract_tags(answer, topK=100, withWeight=False)
return keywords
async def extract_answer_keys_async(answer, llm):
"""
EkstrakanswerKeywords in
"""
llm_chain = None
if llm:
llm_chain = LLMChain(llm=llm, prompt=PromptTemplate.from_template(prompt_template))
try:
keywords_str = await llm_chain.arun(answer)
keywords_str = re.sub('.*', '', keywords_str, flags=re.S).strip()
keywords = ast.literal_eval(keywords_str[9:])
except Exception:
import jieba.analyse
logger.warning(f'llm extract_not_support, change to jieba')
keywords = jieba.analyse.extract_tags(answer, topK=100, withWeight=False)
return keywords
def sync_judge_source(result, source_document, chat_id, extra: Dict):
source = SourceType.NOT_SUPPORT.value
if isinstance(result, Document):
# ReturnsDocument
metadata = result.metadata
question = result.page_content
result = json.loads(metadata.get('extra', '{}')).get('answer')
if result:
source = SourceType.QA.value
extra.update({
'qa': question,
'url': json.loads(metadata.get('extra', '{}')).get('url')
})
return source, result
source_document = [source_document]
if source_document and chat_id:
if any(not doc.metadata.get('right', True) for doc in source_document):
source = SourceType.NO_PERMISSION.value
elif all(
doc.metadata.get('user_metadata') and doc.metadata.get('user_metadata', {}).get('url')
for doc in source_document):
source = SourceType.LINK.value
repeat_doc = {}
doc = []
# The source document should be de-emphasized and the original order cannot be changed.
for one in source_document:
title = one.metadata.get('source') or one.metadata.get('document_name')
url = one.metadata.get('user_metadata', {}).get('url')
repeat_key = (title, url)
# Repeatedly discarded, do not return
if repeat_doc.get(repeat_key):
continue
doc.append({'title': title, 'url': url})
repeat_doc[repeat_key] = 1
extra.update({'doc': doc})
else:
source = SourceType.FILE.value
# Determine if all files are in the Knowledge Base, If one is not, traceability is not supported
for one in source_document:
# If there is no knowledge baseidand documentsiddoes not support traceability
if not one.metadata.get('knowledge_id') or not one.metadata.get('document_id'):
source = SourceType.NOT_SUPPORT.value
break
# Knowledge Base Under Judgmentidand documentsidWhether it is in numeric format, because temporary documents uploaded by the workflow are alsoknowledge_idand documentsid
try:
int(one.metadata.get('knowledge_id'))
int(one.metadata.get('file_id') or one.metadata.get('document_id'))
except Exception:
source = SourceType.NOT_SUPPORT.value
break
return source, result
async def judge_source(result, source_document, chat_id, extra: Dict):
return sync_judge_source(result, source_document, chat_id, extra)
def sync_process_source_document(source_document: List[Document], chat_id, message_id, answer):
if not source_document or not message_id:
return
message_info = ChatMessageDao.get_message_by_id(message_id)
if not message_info:
return
# Use a large model for keyword extraction, and configure a temporary solution for the model
llm = LLMService.get_knowledge_source_llm(message_info.user_id)
answer_keywords = extract_answer_keys(answer, llm)
batch_insert = []
for doc in source_document:
if 'bbox' in doc.metadata:
# Indicates support for traceability
content = doc.page_content
recall_chunk = RecallChunk(chat_id=chat_id,
keywords=json.dumps(answer_keywords),
chunk=content,
file_id=doc.metadata.get('file_id') or doc.metadata.get('document_id'),
meta_data=json.dumps(doc.metadata),
message_id=message_id)
batch_insert.append(recall_chunk)
if batch_insert:
with get_sync_db_session() as db_session:
db_session.add_all(batch_insert)
db_session.commit()
async def process_source_document(source_document: List[Document], chat_id, message_id, answer):
if not source_document or not message_id:
return
message_info = await ChatMessageDao.aget_message_by_id(message_id)
if not message_info:
return
# Use a large model for keyword extraction, and configure a temporary solution for the model
llm = await LLMService.get_knowledge_source_llm_async(message_info.user_id)
answer_keywords = await extract_answer_keys_async(answer, llm)
batch_insert = []
for doc in source_document:
if 'bbox' in doc.metadata:
# Indicates support for traceability
content = doc.page_content
recall_chunk = RecallChunk(chat_id=chat_id,
keywords=json.dumps(answer_keywords),
chunk=content,
file_id=doc.metadata.get('file_id') or doc.metadata.get('document_id'),
meta_data=json.dumps(doc.metadata),
message_id=message_id)
batch_insert.append(recall_chunk)
if batch_insert:
async with get_async_db_session() as db_session:
db_session.add_all(batch_insert)
await db_session.commit()
# Convert node data that requires additional input totweak
def process_node_data(node_data: List[Dict]) -> Dict:
tweak = {}
for nd in node_data:
if nd.get('id') not in tweak:
tweak[nd.get('id')] = {}
if 'InputFile' in nd.get('id', ''):
file_path = nd.get('file_path')
url_path = urlparse(file_path)
if url_path.netloc:
file_name = unquote(url_path.path.split('/')[-1])
else:
file_name = file_path.split('_', 1)[1] if '_' in file_path else ''
nd['value'] = file_name
tweak[nd.get('id')] = {'file_path': file_path, 'value': file_name}
elif 'VariableNode' in nd.get('id', ''):
# general key value
variables = nd.get('name')
variable_value = nd.get('value')
# actual key varaialbes & variable_value
variables_list = tweak[nd.get('id')].get('variables', [])
if not variables_list:
tweak[nd.get('id')]['variables'] = variables_list
tweak[nd.get('id')]['variable_value'] = []
variables_list.append(variables)
# value
variables_value_list = tweak[nd.get('id')].get('variable_value', [])
variables_value_list.append(variable_value)
return tweak
================================================
FILE: src/backend/bisheng/chat_session/README.md
================================================
# 会话模块
================================================
FILE: src/backend/bisheng/chat_session/__init__.py
================================================
================================================
FILE: src/backend/bisheng/chat_session/api/__init__.py
================================================
================================================
FILE: src/backend/bisheng/chat_session/api/router.py
================================================
from typing import Optional, Literal
from fastapi import APIRouter, Depends, Body
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum, ApplicationTypeEnum
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.http_error import NotFoundError
from bisheng.common.schemas.api import resp_200
from bisheng.common.schemas.telemetry.event_data_schema import MessageFeedbackEventData
from bisheng.common.services import telemetry_service
from bisheng.core.logger import trace_id_var
from bisheng.database.models.message import ChatMessageDao
from bisheng.database.models.session import MessageSessionDao
from ..domain.chat import ChatSessionService
from ...api.services.workstation import WorkstationMessage
router = APIRouter(prefix='/session', tags=['Chat Session'])
@router.get('/chat/history')
async def get_chat_message_public(*,
chat_id: str,
flow_id: str,
id: Optional[str] = None,
page_size: Optional[int] = 20,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" api for audit module and mark qa """
history = await ChatSessionService.get_chat_history(chat_id, flow_id, id, page_size)
return resp_200(data=history)
@router.get('/chat/messages/{conversationId}')
async def get_chat_messages_by_conversation_id(*, conversationId: str,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" api for getting chat messages by conversation id """
messages = await ChatMessageDao.aget_messages_by_chat_id(chat_id=conversationId, limit=1000)
if not messages:
raise NotFoundError()
return resp_200([await WorkstationMessage.from_chat_message(message) for message in messages])
@router.post('/chat/message/telemetry')
async def post_chat_message_telemetry(*,
message_id: int = Body(...),
operation_type: Literal['like', 'dislike', 'copy'] = Body(...),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" api for telemetry user feedback """
message_info = await ChatMessageDao.aget_message_by_id(message_id)
if not message_info:
raise NotFoundError()
chat_info = await MessageSessionDao.async_get_one(message_info.chat_id)
if not chat_info:
raise NotFoundError()
await telemetry_service.log_event(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.MESSAGE_FEEDBACK,
trace_id=trace_id_var.get(),
event_data=MessageFeedbackEventData(
message_id=message_id,
app_id=chat_info.flow_id,
app_name=chat_info.flow_name,
app_type=ApplicationTypeEnum.SKILL,
operation_type=operation_type,
))
return resp_200()
================================================
FILE: src/backend/bisheng/chat_session/domain/__init__.py
================================================
================================================
FILE: src/backend/bisheng/chat_session/domain/chat.py
================================================
from typing import Optional, List
from bisheng.api.v1.schema.chat_schema import ChatMessageHistoryResponse
from bisheng.common.errcode.http_error import NotFoundError
from bisheng.database.models.message import ChatMessageDao
from bisheng.database.models.session import MessageSessionDao
from bisheng.user.domain.models.user import UserDao
class ChatSessionService:
"""Chat related services."""
@staticmethod
async def get_chat_history(chat_id: str, flow_id: str, message_id: Optional[str] = None,
page_size: Optional[int] = 20) -> List[ChatMessageHistoryResponse]:
"""Retrieve chat history for a user."""
if not chat_id or not flow_id:
raise NotFoundError()
session_info = await MessageSessionDao.async_get_one(chat_id=chat_id)
if not session_info or session_info.flow_id != flow_id:
raise NotFoundError()
history = await ChatMessageDao.afilter_message_by_chat_id(chat_id=chat_id, flow_id=flow_id,
message_id=message_id, page_size=page_size)
if history:
user_info = await UserDao.aget_user(user_id=session_info.user_id)
history = ChatMessageHistoryResponse.from_chat_message_objs(history, user_info, session_info)
# Placeholder implementation
return history
================================================
FILE: src/backend/bisheng/common/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/constants/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/constants/enums/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/constants/enums/telemetry.py
================================================
from enum import Enum
class StatusEnum(str, Enum):
SUCCESS = 'success'
FAILED = 'failed'
# Generalized application type enumeration
class ApplicationTypeEnum(str, Enum):
"""App Type Enumeration"""
# Workflow Apps
WORKFLOW = "workflow"
# Skill application
SKILL = "skill"
# Assistant App
ASSISTANT = "assistant"
# Inspiration App
LINSIGHT = "linsight"
# Daily Conversation App
DAILY_CHAT = "daily_chat"
# Knowledge Base Application
KNOWLEDGE_BASE = "knowledge_base"
# RAGBack
RAG_TRACEABILITY = "rag_traceability"
# Review Apps
EVALUATION = "evaluation"
# Model Connectivity Testing
MODEL_TEST = "model_test"
# ASR
ASR = "asr"
# TTS
TTS = "tts"
UNKNOWN = "unknown"
class BaseTelemetryTypeEnum(str, Enum):
"""Basic Telemetry Event Type Enumeration"""
# User Login Events
USER_LOGIN = "user_login"
# Tool Call Event
TOOL_INVOKE = "tool_invoke"
# Add Session Event
NEW_MESSAGE_SESSION = "new_message_session"
# File Parsing Event
FILE_PARSE = "file_parse"
# Delete Session Event
DELETE_MESSAGE_SESSION = "delete_message_session"
# New App Event
NEW_APPLICATION = "new_application"
# Edit App Event
EDIT_APPLICATION = "edit_application"
# Delete app event
DELETE_APPLICATION = "delete_application"
# Add Knowledge Base Event
NEW_KNOWLEDGE_BASE = "new_knowledge_base"
# Delete Knowledge Base Event
DELETE_KNOWLEDGE_BASE = "delete_knowledge_base"
# Knowledge Base File Upload Event
NEW_KNOWLEDGE_FILE = "new_knowledge_file"
# Knowledge Base File Delete Event
DELETE_KNOWLEDGE_FILE = "delete_knowledge_file"
# Session Message Feedback Event
MESSAGE_FEEDBACK = "message_feedback"
# Model Call Event
MODEL_INVOKE = "model_invoke"
# Number of online sessions
APPLICATION_ALIVE = "application_alive"
# Session Run Time
APPLICATION_PROCESS = "application_process"
================================================
FILE: src/backend/bisheng/common/constants/vectorstore_metadata.py
================================================
from bisheng.common.schemas.rag_schema import RagMetadataFieldSchema
KNOWLEDGE_RAG_METADATA_SCHEMA = [
RagMetadataFieldSchema(field_name="document_id", field_type="int64", kwargs={"nullable": False}),
RagMetadataFieldSchema(field_name="document_name", field_type="text",
kwargs={"nullable": True, "max_length": 65535}),
RagMetadataFieldSchema(field_name="abstract", field_type="text", kwargs={"nullable": True, "max_length": 65535}),
RagMetadataFieldSchema(field_name="chunk_index", field_type="int64", kwargs={"nullable": True}),
RagMetadataFieldSchema(field_name="bbox", field_type="text", kwargs={"nullable": True, "max_length": 65535}),
RagMetadataFieldSchema(field_name="page", field_type="int64", kwargs={"nullable": True}),
RagMetadataFieldSchema(field_name="knowledge_id", field_type="int64", kwargs={"nullable": False}),
RagMetadataFieldSchema(field_name="upload_time", field_type="int64", kwargs={"nullable": True}),
RagMetadataFieldSchema(field_name="update_time", field_type="int64", kwargs={"nullable": True}),
RagMetadataFieldSchema(field_name="uploader", field_type="text", kwargs={"nullable": True, "max_length": 65535}),
RagMetadataFieldSchema(field_name="updater", field_type="text", kwargs={"nullable": True, "max_length": 65535}),
RagMetadataFieldSchema(field_name="user_metadata", field_type="json", kwargs={"nullable": True})
]
================================================
FILE: src/backend/bisheng/common/dependencies/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/dependencies/core_deps.py
================================================
from typing import Generator, Any, AsyncGenerator
from sqlmodel.ext.asyncio.session import AsyncSession, Session
# db session
async def get_db_session() -> AsyncGenerator[AsyncSession, None]:
"""Get database session"""
from bisheng.core.database import get_database_connection
db_manager = await get_database_connection()
async with db_manager.async_session() as session:
yield session
# sync db session
def get_sync_db_session() -> Generator[Session, None, None]:
"""Get a synchronous database session"""
from bisheng.core.database.manager import sync_get_database_connection
db_manager = sync_get_database_connection()
with db_manager.create_session() as session:
yield session
================================================
FILE: src/backend/bisheng/common/dependencies/user_deps.py
================================================
from bisheng.user.domain.services.auth import LoginUser
class UserPayload(LoginUser):
pass
================================================
FILE: src/backend/bisheng/common/errcode/README.md
================================================
# Bisheng API 错误码说明文档
## 错误码结构说明
错误码前三位代表具体功能模块,后两位表示模块内部具体的报错。例如:10001
## 基础错误码 (base.py)
| 错误码 | 错误信息 | 说明 |
|-----|--------|---------|
| 403 | 暂无操作权限 | 未授权错误 |
| 404 | 资源不存在 | 资源未找到错误 |
| 500 | 服务器错误 | 服务器内部错误 |
## 模块错误码详情
### 1. 公共 - server.py
| 错误码 | 错误信息 | 说明 |
|-------|------------------------------------------------|-------------------|
| 10001 | 未找到SFT服务 | SFT服务未配置或不可用 |
| 10002 | 无效操作 | 请求的操作不被支持 |
| 10003 | 资源下载失败 | 资源文件下载出现问题 |
| 10004 | 未配置知识库embedding模型,请从工作台配置中设置 | 知识库embedding模型未配置 |
| 10005 | 知识库embedding模型不存在,请从工作台配置中设置 | embedding模型已被删除 |
| 10006 | 知识库embedding模型类型错误,请从工作台配置中设置 | embedding模型类型不匹配 |
| 10007 | 请联系管理员检查工作台向量检索模型状态 | 向量检索模型状态异常 |
| 10008 | 没有找到llm模型配置 | LLM模型配置缺失 |
| 10009 | llm模型配置已被删除,请重新配置模型 | LLM模型配置已被删除 |
| 10010 | 服务提供方配置已被删除,请重新配置llm模型 | 模型服务提供方被删除 |
| 10011 | 只支持LLM类型的模型,不支持{model_type}类型的模型 | 模型类型不支持 |
| 10012 | {server_name}下的{model_name}模型已下线,请联系管理员上线对应的模型 | 模型已下线 |
| 10013 | 初始化llm失败,请检查配置或联系管理员。错误信息:{exception} | LLM初始化失败 |
### 2. 模型训练模块 (101) - finetune.py
| 错误码 | 错误信息 | 说明 |
|-------|-------------------|-------------|
| 10100 | 创建训练任务失败 | 微调训练任务创建失败 |
| 10101 | 个人训练集和预置训练集最少选择一个 | 训练数据集未选择 |
| 10102 | 任务不存在 | 训练任务不存在 |
| 10103 | 任务状态错误 | 训练任务状态异常 |
| 10104 | 任务取消失败 | 取消训练任务失败 |
| 10105 | 任务删除失败 | 删除训练任务失败 |
| 10106 | 任务发布失败 | 训练任务发布失败 |
| 10107 | 模型名接口修改失败 | 修改模型名称失败 |
| 10108 | 取消发布失败 | 取消模型发布失败 |
| 10109 | 无效的训练参数 | 训练参数格式错误 |
| 10110 | 模型名已存在 | 模型名称重复 |
| 10120 | 训练文件不存在 | 训练数据文件丢失 |
| 10125 | 获取GPU信息失败 | GPU资源信息获取失败 |
| 10126 | 获取模型列表失败 | 模型列表查询失败 |
### 3. 模型部署模块 (102) - model_deploy.py
| 错误码 | 错误信息 | 说明 |
|-------|-------|----------|
| 10200 | 模型不存在 | 部署的模型不存在 |
### 4. 组件模块 (103) - component.py
| 错误码 | 错误信息 | 说明 |
|-------|-------|--------|
| 10300 | 组件已存在 | 组件名称重复 |
| 10301 | 组件不存在 | 组件未找到 |
### 5. 助手模块 (104) - assistant.py
| 错误码 | 错误信息 | 说明 |
|-------|----------------|--------------|
| 10400 | 助手不存在 | 助手未找到 |
| 10401 | 助手上线失败 | 助手部署失败 |
| 10402 | 助手名称重复 | 助手名称已存在 |
| 10403 | 助手已上线,不可编辑 | 上线状态的助手不允许编辑 |
| 10410 | 工具名称已存在 | 工具类型名称重复 |
| 10411 | 工具下的API不能为空 | 工具必须包含API |
| 10412 | 工具不存在 | 工具类型不存在 |
| 10413 | 预置工具类别不可删除 | 系统预置工具不允许删除 |
| 10420 | 该助手已被删除 | 助手已被删除 |
| 10421 | 当前助手未上线,无法直接对话 | 助手未上线无法对话 |
| 10422 | 助手推理模型列表为空 | 助手模型配置为空 |
| 10423 | 未配置助手推理模型 | 助手推理模型未配置 |
| 10499 | 助手服务异常 | 助手服务其他错误 |
### 6. 技能服务模块 (105) - flow.py
| 错误码 | 错误信息 | 说明 |
|-------|-----------------------|--------------|
| 10500 | 未找到技能版本信息 | 技能版本不存在 |
| 10501 | 当前正在使用版本无法删除 | 活跃版本不可删除 |
| 10502 | 版本名已存在 | 版本名称重复 |
| 10503 | 技能名重复 | 技能名称已存在 |
| 10520 | 技能不存在 | 技能未找到 |
| 10521 | 技能已上线,不可编辑 | 上线状态技能不可编辑 |
| 10525 | 工作流已上线,不可编辑 | 上线状态工作流不可编辑 |
| 10526 | 工作流初始化失败 | 工作流启动失败 |
| 10527 | 工作流等待用户输入超时 | 用户输入等待超时 |
| 10528 | 节点执行超过最大次数 | 节点重试次数超限 |
| 10529 | 工作流名称重复 | 工作流名称已存在 |
| 10530 | 模板名称已存在 | 模板名称重复 |
| 10531 | <节点名称>功能已升级,需删除后重新拖入。 | 节点版本更新需要重新配置 |
| 10532 | 工作流版本已升级,请联系创建者重新编排 | 工作流版本需要更新 |
| 10540 | 服务器线程数已满,请稍候再试 | 服务器资源不足 |
### 7. 用户模块 (106) - user.py
| 错误码 | 错误信息 | 说明 |
|-------|------------------------------------------------------|-----------|
| 10600 | 账号或密码错误 | 用户认证失败 |
| 10601 | 您的密码已过期,请及时修改 | 密码过期提醒 |
| 10602 | 用户尚未设置密码,请先联系管理员重置密码 | 用户未设置密码 |
| 10603 | 当前密码错误 | 当前密码验证失败 |
| 10604 | 您的账户已在另一设备上登录,此设备上的会话已被注销。\n如果这不是您本人的操作,请尽快修改您的账户密码。 | 账户在其他设备登录 |
| 10605 | 用户名已存在 | 用户名重复 |
| 10606 | 用户组和角色不能为空 | 用户权限配置不完整 |
| 10610 | 用户组内还有用户,不能删除 | 用户组非空无法删除 |
### 8. 标签模块 (107) - tag.py
| 错误码 | 错误信息 | 说明 |
|-------|----------|--------|
| 10700 | 标签已存在 | 标签名称重复 |
| 10701 | 未找到对应的标签 | 标签不存在 |
### 9. 模型管理模块 (108) - llm.py
| 错误码 | 错误信息 | 说明 |
|-------|---------------------|-------------|
| 10800 | 服务提供方名称重复,请修改 | 服务提供方名称已存在 |
| 10801 | 模型不可重复 | 模型名称重复 |
| 10802 | 添加服务提供方失败,模型全部初始化失败 | 服务提供方添加完全失败 |
| 10803 | 添加服务提供方失败,部分模型初始化失败 | 服务提供方添加部分失败 |
### 10. 知识库模块 (109) - knowledge.py
| 错误码 | 错误信息 | 说明 |
|-------|-------------------------------|----------------|
| 10900 | 知识库名称重复 | 知识库名称已存在 |
| 10901 | 知识库必须选择一个embedding模型 | embedding模型未选择 |
| 10910 | 当前知识库版本不支持修改分段,请创建新知识库后进行分段修改 | 知识库版本不支持分段修改 |
| 10920 | 未配置QA知识库相似问模型 | QA相似问模型未配置 |
| 10930 | 该问题已存在 | QA问题重复 |
| 10940 | 当前有文件正在解析,不可复制 | 知识库文件解析中无法复制 |
| 10950 | 不支持多个知识库的文件同时删除 | 批量删除限制 |
| 10951 | 知识库重新构建中,不允许修改embedding模型 | 知识库重构期间无法修改模型 |
### 11. 灵思模块 (110) - linsight.py
| 错误码 | 错误信息 | 说明 |
|-------|----------------------------|------------|
| 11010 | SOP文件格式不符合要求 | SOP文件格式错误 |
| 11020 | 文件上传失败 | 灵思文件上传失败 |
| 11030 | 您的灵思使用次数已用完,请使用新的邀请码激活灵思功能 | 灵思使用次数耗尽 |
| 11040 | 提交灵思用户问题失败 | 用户问题提交失败 |
| 11050 | 请联系管理员检查工作台向量检索模型状态 | 向量检索模型异常 |
| 11060 | 指导手册检索失败,向量检索与关键词检索均不可用 | 检索服务不可用 |
| 11070 | 指导手册检索失败 | 指导手册查询失败 |
| 11080 | 初始化灵思工作台工具失败 | 工作台工具初始化失败 |
| 11090 | 灵思Bisheng LLM相关错误 | LLM服务错误 |
| 11100 | 生成SOP内容失败 | SOP内容生成失败 |
| 11110 | 修改SOP内容失败 | SOP内容修改失败 |
| 11120 | 灵思会话版本已完成或正在执行,无法再次执行 | 会话版本状态冲突 |
| 11130 | 开始执行灵思任务失败 | 任务启动失败 |
| 11140 | 获取灵思队列排队状态失败 | 队列状态查询失败 |
| 11150 | 添加指导手册失败,向量存储添加数据失败 | 向量存储添加失败 |
| 11160 | 更新指导手册失败,向量存储更新数据失败 | 向量存储更新失败 |
| 11170 | 删除指导手册失败,向量存储删除数据失败 | 向量存储删除失败 |
### 12. 工作台模块 (120) - workstation.py
| 错误码 | 错误信息 | 说明 |
|-------|-----------------|------------|
| 12040 | 未找到web_search工具 | web搜索工具不存在 |
| 12041 | 会话不存在 | 会话记录不存在 |
| 12042 | 该智能体已被添加 | 智能体重复添加 |
### 13. 对话聊天模块 (130) - chat.py
| 错误码 | 错误信息 | 说明 |
|-------|------------------------------------------|-----------|
| 13001 | 该技能已被删除 | 技能已被删除 |
| 13002 | 当前技能未上线,无法直接对话 | 技能未上线无法对话 |
| 13003 | 当前技能未编译通过,无法直接对话 | 技能编译失败 |
| 13004 | 后端服务异常 | 聊天服务异常 |
| 13005 | LLM 技能执行错误. error={error} | LLM执行错误 |
| 13006 | 文档解析失败,点击输入框上传按钮重新上传\n\n{error} | 文档解析失败 |
| 13007 | Input data is parsed fail. error={error} | 输入数据解析失败 |
### 14. QA模块 (140) - qa.py
| 错误码 | 错误信息 | 说明 |
|-------|------------|-------|
| 14001 | 后台处理中,稍后再试 | 后台处理中 |
### 15. 工具模块 (150) - tool.py
| 错误码 | 错误信息 | 说明 |
|-------|--------|--------|
| 15000 | 工具名称重复 | 工具名称重复 |
### 16. 数据集模块 (160) - dataset.py
| 错误码 | 错误信息 | 说明 |
|-------|--------|---------|
| 16000 | 数据集已存在 | 数据集名称重复 |
### 17. 数据看板模块 (170) - telemetry.py
| 错误码 | 错误信息 | 说明 |
|-------|---------------|---------------|
| 17000 | 最多允许创建 20 个看板 | 最多允许创建 20 个看板 |
## 错误码使用说明
### 错误码继承关系
所有错误码类都继承自 `BaseErrorCode` 基类,提供统一的错误处理机制。
### 使用方式
1. **抛出异常**: `raise ComponentExistError()`
2. **返回响应**: `ComponentExistError.return_resp()`
3. **HTTP异常**: `ComponentExistError.http_exception()`
4. **SSE事件**: `ComponentExistError.to_sse_event()`
5. **字典格式**: `error_instance.to_dict()`
6. **WebSocket关闭**: `await error_instance.websocket_close_message(websocket)`
### 自定义错误信息
错误码支持自定义错误信息:
```python
raise ComponentExistError(msg="自定义错误信息")
```
### 错误码扩展
新增错误码时请遵循以下规范:
1. 选择合适的模块代码前缀
2. 错误码递增分配
3. 提供清晰的错误描述
4. 继承 `BaseErrorCode` 基类
### 错误码接受格式
* http_exception
```json
{
"status_code": 10012,
"status_message": "{server_name}下的{model_name}模型已下线,请联系管理员上线对应的模型 | 模型已下线",
"data": {
"exception": "堆栈错误信息,如果没有则为默认的status_message,# 这个字段必存在",
#
自定义字段
"server_name": "模型服务提供方名称",
"model_name": "模型名称"
}
}
```
* sse_event
```json
{
"event": "error",
"data": {
"status_code": 10012,
"status_message": "{server_name}下的{model_name}模型已下线,请联系管理员上线对应的模型 | 模型已下线",
"data": {
"exception": "堆栈错误信息,如果没有则为默认的status_message,# 这个字段必存在",
#
自定义字段
"server_name": "模型服务提供方名称",
"model_name": "模型名称"
}
}
}
```
================================================
FILE: src/backend/bisheng/common/errcode/__init__.py
================================================
from .base import BaseErrorCode
================================================
FILE: src/backend/bisheng/common/errcode/assistant.py
================================================
from .base import BaseErrorCode
# Component Modules Return error code, business code104
class AssistantNotExistsError(BaseErrorCode):
Code: int = 10400
Msg: str = 'Assistant does not exist'
class AssistantInitError(BaseErrorCode):
Code: int = 10401
Msg: str = 'Assistant onboarding failed: {exception}'
class AssistantNameRepeatError(BaseErrorCode):
Code: int = 10402
Msg: str = 'Duplicate assistant name'
class AssistantNotEditError(BaseErrorCode):
Code: int = 10403
Msg: str = 'Assistant is live and not editable'
# The assistant has been deleted
class AssistantDeletedError(BaseErrorCode):
Code: int = 10420
Msg: str = 'The assistant has been deleted'
# The assistant is currently not online and cannot talk directly
class AssistantNotOnlineError(BaseErrorCode):
Code: int = 10421
Msg: str = 'The assistant is currently not online and cannot talk directly'
# Assistant reasoning model list is empty
class AssistantModelEmptyError(BaseErrorCode):
Code: int = 10422
Msg: str = 'Assistant reasoning model list is empty'
# No assistant inference model configured
class AssistantModelNotConfigError(BaseErrorCode):
Code: int = 10423
Msg: str = 'No assistant inference model configured'
class AssistantAutoLLMError(BaseErrorCode):
Code: int = 10424
Msg: str = 'Assistant portrait auto-optimization model is not configured'
# Other errors
class AssistantOtherError(BaseErrorCode):
Code: int = 10499
Msg: str = 'Assistant Service Exception'
================================================
FILE: src/backend/bisheng/common/errcode/base.py
================================================
import json
from fastapi import WebSocket
from fastapi.exceptions import HTTPException
from bisheng.common.schemas.api import UnifiedResponseModel
class BaseErrorCode(Exception):
# The first three digits of the error code represent the specific function module, and the last two digits represent the specific error report inside the module. For example,10001
Code: int
Msg: str
def __init__(self, exception: Exception = None, msg: str = None, code: int = None, **kwargs):
self.exception = exception
self.message = msg or self.Msg
self.code = code or self.Code
self.kwargs = kwargs
super().__init__(exception)
def __str__(self):
return str(self.exception) if self.exception else self.message
@classmethod
def return_resp(cls, msg: str = None, data: any = None) -> UnifiedResponseModel:
return UnifiedResponseModel(status_code=cls.Code, status_message=msg or cls.Msg,
data=data)
def return_resp_instance(self, data: any = None) -> UnifiedResponseModel:
data = data if data is not None else {"exception": str(self), **self.kwargs}
return UnifiedResponseModel(status_code=self.code, status_message=self.message,
data=data)
@classmethod
def http_exception(cls, msg: str = None) -> HTTPException:
return HTTPException(status_code=cls.Code, detail=msg or cls.Msg)
@classmethod
def to_sse_event(cls, msg: str = None, data: any = None, event: str = "error", **kwargs) -> dict:
data = data if data is not None else {"exception": cls.Msg, **kwargs}
return {
"event": event,
"data": json.dumps({
"status_code": cls.Code,
"status_message": msg or cls.Msg,
"data": data
})
}
def to_sse_event_instance(self, event: str = "error", data: any = None) -> dict:
data = data if data is not None else {"exception": str(self), **self.kwargs}
return {
"event": event,
"data": json.dumps({
"status_code": self.code,
"status_message": self.message,
"data": data
})
}
def to_sse_event_instance_str(self, event: str = "error", data: any = None) -> str:
data = data if data is not None else {"exception": str(self), **self.kwargs}
msg = json.dumps({
"status_code": self.code,
"status_message": self.message,
"data": data
}, ensure_ascii=False)
return f'event: {event}\ndata: {msg}\n\n'
def to_dict(self, data: any = None) -> dict:
data = data if data is not None else {"exception": str(self), **self.kwargs}
return {
"status_code": self.code,
"status_message": self.message,
"data": data
}
def to_json_str(self, data: any = None) -> str:
data = data if data is not None else {"exception": str(self), **self.kwargs}
return json.dumps({
"status_code": self.code,
"status_message": self.message,
"data": data
}, ensure_ascii=False)
# websocket error message
async def websocket_close_message(self, websocket: WebSocket, close_ws: bool = True):
reason = {
"status_code": self.code,
"status_message": self.message,
"data": {"exception": str(self), **self.kwargs}
}
await websocket.send_json({"category": "error", "type": "end", "message": reason})
if close_ws:
await websocket.close(reason=self.message[:10])
================================================
FILE: src/backend/bisheng/common/errcode/chat.py
================================================
# Chat Related return error codes 130What/the beginning?
from .base import BaseErrorCode
# This skill has been deleted
class SkillDeletedError(BaseErrorCode):
Code = 13001
Msg = "This skill has been deleted"
# The current skill is not online and cannot be spoken to directly
class SkillNotOnlineError(BaseErrorCode):
Code = 13002
Msg = "The current skill is not online and cannot be spoken to directly"
# Current compilation failed
class SkillNotBuildError(BaseErrorCode):
Code = 13003
Msg = "The current skill has not been compiled and passed, it is not possible to talk directly"
# Backend Service Exception
class ChatServiceError(BaseErrorCode):
Code = 13004
Msg = "Backend Service Exception"
# LLM Skill execution error. error={str(e)}
class LLMExecutionError(BaseErrorCode):
Code = 13005
Msg = "LLM Skill execution error. error={error}"
# Document parsing failed, click the input upload button to upload again\n\n{str(e)}
class DocumentParseError(BaseErrorCode):
Code = 13006
Msg = "Document parsing failed, click the input upload button to upload again\n\n{error}"
# Input data is parsed fail. error={str(e)}
class InputDataParseError(BaseErrorCode):
Code = 13007
Msg = "Input data is parsed fail. error={error}"
class WorkflowOfflineError(BaseErrorCode):
Code = 13010
Msg = "The current workflow is not online and cannot be chatted directly"
================================================
FILE: src/backend/bisheng/common/errcode/component.py
================================================
from .base import BaseErrorCode
# Component Modules Return error code, business code103
class ComponentExistError(BaseErrorCode):
Code: int = 10300
Msg: str = 'Component Exists'
class ComponentNotExistError(BaseErrorCode):
Code: int = 10301
Msg: str = 'Component does not exist'
================================================
FILE: src/backend/bisheng/common/errcode/dataset.py
================================================
from bisheng.common.errcode import BaseErrorCode
class DatasetNameExistsError(BaseErrorCode):
"""Raised when a dataset with the given name already exists."""
Code: int = 16000
Msg: str = 'Dataset name already exists'
================================================
FILE: src/backend/bisheng/common/errcode/finetune.py
================================================
from .base import BaseErrorCode
# finetuneTraining Module Return error code, business code101
class CreateFinetuneError(BaseErrorCode):
Code: int = 10100
Msg: str = 'Failed to create training task'
class TrainDataNoneError(BaseErrorCode):
Code: int = 10101
Msg: str = 'Individual Training Sets and Preset Training Sets Select at least one'
class NotFoundJobError(BaseErrorCode):
Code: int = 10102
Msg: str = 'Quest does not exist'
class JobStatusError(BaseErrorCode):
Code: int = 10103
Msg: str = 'Task status error'
class CancelJobError(BaseErrorCode):
Code: int = 10104
Msg: str = 'Task cancellation failed'
class DeleteJobError(BaseErrorCode):
Code: int = 10105
Msg: str = 'Task deletion failed'
class ExportJobError(BaseErrorCode):
Code: int = 10106
Msg: str = 'Task publishing failed'
class ChangeModelNameError(BaseErrorCode):
Code: int = 10107
Msg: str = 'Model name interface modification failed'
class UnExportJobError(BaseErrorCode):
Code: int = 10108
Msg: str = 'Failed to unpublish'
class InvalidExtraParamsError(BaseErrorCode):
Code: int = 10109
Msg: str = 'Invalid training parameters'
class ModelNameExistsError(BaseErrorCode):
Code: int = 10110
Msg: str = 'Model name already exists'
class TrainFileNotExistError(BaseErrorCode):
Code: int = 10120
Msg: str = 'Training file does not exist'
class GetGPUInfoError(BaseErrorCode):
Code: int = 10125
Msg: str = 'DapatkanGPUMessage failed'
class GetModelError(BaseErrorCode):
Code: int = 10126
Msg: str = 'Access to model list failed'
================================================
FILE: src/backend/bisheng/common/errcode/flow.py
================================================
from .base import BaseErrorCode
# Skill service related return error code, function module code:105
class NotFoundVersionError(BaseErrorCode):
Code: int = 10500
Msg: str = 'Skill version information not found'
class CurVersionDelError(BaseErrorCode):
Code: int = 10501
Msg: str = 'Version currently in use cannot be deleted'
class VersionNameExistsError(BaseErrorCode):
Code: int = 10502
Msg: str = 'Version name already exists'
class FlowNameExistsError(BaseErrorCode):
Code: int = 10503
Msg: str = 'Duplicate skill name'
class NotFoundFlowError(BaseErrorCode):
Code: int = 10520
Msg: str = 'Skill does not exist.'
class FlowOnlineEditError(BaseErrorCode):
Code: int = 10521
Msg: str = 'Skills are live and cannot be edited'
class WorkFlowOnlineEditError(BaseErrorCode):
Code: int = 10525
Msg: str = 'Workflow is live and not editable'
class WorkFlowInitError(BaseErrorCode):
Code: int = 10526
Msg: str = 'Workflow initialization failed'
class WorkFlowWaitUserTimeoutError(BaseErrorCode):
Code: int = 10527
Msg: str = 'Workflow timed out waiting for user input'
class WorkFlowNodeRunMaxTimesError(BaseErrorCode):
Code: int = 10528
Msg: str = 'Node exceeds maximum number of executions'
class WorkflowNameExistsError(BaseErrorCode):
Code: int = 10529
Msg: str = 'Duplicate workflow name'
class FlowTemplateNameError(BaseErrorCode):
Code: int = 10530
Msg: str = 'Template Name Already Exists'
class WorkFlowNodeUpdateError(BaseErrorCode):
Code: int = 10531
Msg: str = 'The feature has been upgraded and needs to be deleted and dragged back in.'
class WorkFlowVersionUpdateError(BaseErrorCode):
Code: int = 10532
Msg: str = 'The workflow version has been upgraded, please contact the creator to reschedule'
class WorkFlowTaskBusyError(BaseErrorCode):
Code: int = 10540
Msg: str = 'Server thread count is full, please try again later'
# Workflow Task Other Errors
class WorkFlowTaskOtherError(BaseErrorCode):
Code: int = 10541
Msg: str = 'Workflow task execution failed'
class AppWriteAuthError(BaseErrorCode):
Code: int = 10599
Msg: str = 'No Apply Write Permission'
================================================
FILE: src/backend/bisheng/common/errcode/http_error.py
================================================
from .base import BaseErrorCode
class UnAuthorizedError(BaseErrorCode):
Code: int = 403
Msg: str = 'No permission to operate'
class NotFoundError(BaseErrorCode):
Code: int = 404
Msg: str = 'This role does not exist - '
class ServerError(BaseErrorCode):
Code: int = 500
Msg: str = 'Server error'
================================================
FILE: src/backend/bisheng/common/errcode/knowledge.py
================================================
from .base import BaseErrorCode
# Return error code related to the knowledge base module, function module code:109
class KnowledgeExistError(BaseErrorCode):
Code: int = 10900
Msg: str = 'Duplicate Knowledge Base Name'
class KnowledgeNoEmbeddingError(BaseErrorCode):
Code: int = 10901
Msg: str = 'Knowledge Base must select oneembeddingModels'
class KnowledgeLLMError(BaseErrorCode):
Code: int = 10902
Msg: str = 'Documentation Knowledge Base Summary Model is no longer valid, please go to Model Management-Configure in System Model Settings.{exception}'
class KnowledgeChunkError(BaseErrorCode):
Code: int = 10910
Msg: str = 'The current Knowledge Base version does not support modifying segments, please create a new Knowledge Base and modify segments'
class KnowledgeFileEmptyError(BaseErrorCode):
Code: int = 10911
Msg: str = 'File resolution is empty'
class KnowledgeFileChunkMaxError(BaseErrorCode):
Code: int = 10912
Msg: str = 'Segmentation results are too long, try using more splitters in your custom strategy (ex. \\n、。、\\.) for segmentation'
class KnowledgeFileDamagedError(BaseErrorCode):
Code: int = 10913
Msg: str = 'The file may be corrupted and cannot be parsed, please check and upload again'
class KnowledgeFileNotSupportedError(BaseErrorCode):
Code: int = 10914
Msg: str = 'Parsing of this type of file is not supported, please check and upload again'
class KnowledgeEtl4lmTimeoutError(BaseErrorCode):
Code: int = 10915
Msg: str = 'etl4lmService busy, please upgradeetl4lmComputing power of the service'
class KnowledgeExcelChunkMaxError(BaseErrorCode):
Code: int = 10916
Msg: str = 'Segmentation results are too long, try reducing the number of table segmentation rows in your custom strategy'
class KnowledgeSimilarError(BaseErrorCode):
Code: int = 10920
Msg: str = 'Not configuredQAKnowledge Base Similarity Question Model'
class KnowledgeQAError(BaseErrorCode):
Code: int = 10930
Msg: str = 'This issue already exists'
class KnowledgeCPError(BaseErrorCode):
Code: int = 10940
Msg: str = 'A file is currently being parsed and cannot be copied'
class KnowledgeCPEmptyError(BaseErrorCode):
Code: int = 10941
Msg: str = 'Knowledge Base content is empty and cannot be copied'
# Multiple knowledge base files are not supported for simultaneous deletion
class KnowledgeFileDeleteError(BaseErrorCode):
Code: int = 10950
Msg: str = 'Multiple knowledge base files are not supported for simultaneous deletion'
class KnowledgeRebuildingError(BaseErrorCode):
Code: int = 10951
Msg: str = 'Knowledge base is being rebuilt, modifications are not allowedembeddingModels'
class KnowledgePreviewError(BaseErrorCode):
Code: int = 10952
Msg: str = 'Document parsing failed' # Failed to parse preview file
class KnowledgeFileFailedError(BaseErrorCode):
Code: int = 10953
Msg: str = 'File parsing failed: {exception}'
# Is notQAThe knowledge base upon
class KnowledgeNotQAError(BaseErrorCode):
Code: int = 10960
Msg: str = 'Is notQAThe knowledge base upon'
class KnowledgeRecommendQuestionError(BaseErrorCode):
Code: int = 10961
Msg: str = 'The model returned an incorrect format: {message}'
# Knowledge base does not exist
class KnowledgeNotExistError(BaseErrorCode):
Code: int = 10970
Msg: str = 'Knowledge base does not exist'
# Knowledge base file does not exist
class KnowledgeFileNotExistError(BaseErrorCode):
Code: int = 10971
Msg: str = 'Knowledge base file does not exist'
# Conflicts with built-in metadata field name
class KnowledgeMetadataFieldConflictError(BaseErrorCode):
Code: int = 10980
Msg: str = '{field_name} Conflicts with built-in metadata field name'
# Metadata field already exists
class KnowledgeMetadataFieldExistError(BaseErrorCode):
Code: int = 10981
Msg: str = 'Meta data fields {field_name} already exists'
# Metadata field does not exist
class KnowledgeMetadataFieldNotExistError(BaseErrorCode):
Code: int = 10982
Msg: str = 'Meta data fields {field_name} Does not exist'
# Built-in metadata fields cannot be modified
class KnowledgeMetadataFieldImmutableError(BaseErrorCode):
Code: int = 10983
Msg: str = 'Built-in metadata fields {field_name} Cannot be modified'
# Metadata value type conversion error
class KnowledgeMetadataValueTypeConvertError(BaseErrorCode):
Code: int = 10984
Msg: str = 'Meta data fields {field_name} Value type conversion error: {error_msg}'
================================================
FILE: src/backend/bisheng/common/errcode/linsight.py
================================================
from bisheng.common.errcode.base import BaseErrorCode
class SopFileError(BaseErrorCode):
Code: int = 11010
Msg: str = 'SOPFile format does not meet requirements'
class SopShowcaseError(BaseErrorCode):
Code: int = 11011
Msg: str = 'SOPFailed to set featured case'
class FileUploadError(BaseErrorCode):
__doc__ = 'LinsightFailed to upload documents'
Code: int = 11020
Msg: str = 'Upload Failed'
# Your Idea has run out of uses, please use the new invite code to activate the Idea feature
class LinsightUseUpError(BaseErrorCode):
Code: int = 11030
Msg: str = 'Your Idea has run out of uses, please use the new invite code to activate the Idea feature'
# Failed to submit Idea User Issue
class LinsightQuestionError(BaseErrorCode):
Code: int = 11040
Msg: str = 'Failed to submit Idea User Issue'
# Please contact the administrator to check the status of the workbench vector retrieval model
class LinsightVectorModelError(BaseErrorCode):
Code: int = 11050
Msg: str = 'Please contact the administrator to check the status of the workbench vector retrieval model'
# Instruction manual retrieval failed, vector retrieval and keyword retrieval are not available
class LinsightDocSearchError(BaseErrorCode):
Code: int = 11060
Msg: str = 'Instruction manual retrieval failed, vector retrieval and keyword retrieval are not available'
# Guidebook retrieval failed
class LinsightDocNotFoundError(BaseErrorCode):
Code: int = 11070
Msg: str = 'Guidebook retrieval failed'
# Failed to initialize the Inspiration Workbench tool
class LinsightToolInitError(BaseErrorCode):
Code: int = 11080
Msg: str = 'Failed to initialize the Inspiration Workbench tool'
# InspirationBisheng LLMRelated Errors
class LinsightBishengLLMError(BaseErrorCode):
Code: int = 11090
Msg: str = 'InspirationBisheng LLMRelated Errors'
# BuatSOPContent failed
class LinsightGenerateSopError(BaseErrorCode):
Code: int = 11100
Msg: str = 'BuatSOPContent failed'
# ChangeSOPContent failed
class LinsightModifySopError(BaseErrorCode):
Code: int = 11110
Msg: str = 'ChangeSOPContent failed'
# The Inspiration session version has been completed or is being executed and cannot be executed again
class LinsightSessionVersionRunningError(BaseErrorCode):
Code: int = 11120
Msg: str = 'The Inspiration session version has been completed or is being executed and cannot be executed again'
# Failed to start the Ideas task
class LinsightStartTaskError(BaseErrorCode):
Code: int = 11130
Msg: str = 'Failed to start the Ideas task'
# Failed to get Ideas queue queue status
class LinsightQueueStatusError(BaseErrorCode):
Code: int = 11140
Msg: str = 'Failed to get Ideas queue queue status'
# Failed to add instruction manual, failed to add data for vector store
class LinsightAddSopError(BaseErrorCode):
Code: int = 11150
Msg: str = 'Failed to add instruction manual, failed to add data for vector store'
# Failed to update the instruction manual, vector store update data failed
class LinsightUpdateSopError(BaseErrorCode):
Code: int = 11160
Msg: str = 'Failed to update the instruction manual, vector store update data failed'
# Failed to delete instruction manual, failed to delete data in vector store
class LinsightDeleteSopError(BaseErrorCode):
Code: int = 11170
Msg: str = 'Failed to delete instruction manual, failed to delete data in vector store'
class SopContentOverLimitError(BaseErrorCode):
Code: int = 11171
Msg: str = '{sop_name}The content is too long'
class InviteCodeInvalidError(BaseErrorCode):
Code: int = 11180
Msg: str = 'The invite code you entered is invalid'
class InviteCodeBindError(BaseErrorCode):
Code: int = 11190
Msg: str = 'Additional invite codes bound'
================================================
FILE: src/backend/bisheng/common/errcode/llm.py
================================================
from .base import BaseErrorCode
# Model management module related return error code, function module code:108
class ServerExistError(BaseErrorCode):
Code: int = 10800
Msg: str = 'Service provider name is duplicated, please modify'
class ModelNameRepeatError(BaseErrorCode):
Code: int = 10801
Msg: str = 'Model is not repeatable'
class ServerAddAllError(BaseErrorCode):
Code: int = 10802
Msg: str = 'Failed to add service provider, failed to initialize all models'
class ServerAddError(BaseErrorCode):
Code: int = 10803
Msg: str = 'Failed to add service provider, some models failed to initialize'
================================================
FILE: src/backend/bisheng/common/errcode/model_deploy.py
================================================
from .base import BaseErrorCode
# RTModel Deployment Module Return error code, business code102
class NotFoundModelError(BaseErrorCode):
Code: int = 10200
Msg: str = 'Model does not exist'
================================================
FILE: src/backend/bisheng/common/errcode/qa.py
================================================
# QAModule-related return error codes 140 What/the beginning?
from .base import BaseErrorCode
# Processing in the background, try again later
class BackendProcessingError(BaseErrorCode):
Code = 14001
Msg = "Processing in the background, try again later"
================================================
FILE: src/backend/bisheng/common/errcode/server.py
================================================
from .base import BaseErrorCode
# RTService-related return error code, function module code:100
class NoSftServerError(BaseErrorCode):
Code: int = 10001
Msg: str = 'not foundSFTSERVICES'
# Invalid nonce
class InvalidOperationError(BaseErrorCode):
Code: int = 10002
Msg: str = 'Invalid nonce'
# Resource download failed
class ResourceDownloadError(BaseErrorCode):
Code: int = 10003
Msg: str = 'Resource download failed'
# Knowledge Base Not Configuredembeddingmodel, please set from workbench configuration
class NoEmbeddingModelError(BaseErrorCode):
Code: int = 10004
Msg: str = 'Knowledge Base Not Configuredembeddingmodel, please set from workbench configuration'
# The knowledge base uponembeddingModel does not exist, please set from workbench configuration
class EmbeddingModelNotExistError(BaseErrorCode):
Code: int = 10005
Msg: str = 'The knowledge base uponembeddingModel does not exist, please set from workbench configuration'
# The knowledge base uponembeddingWrong model type, please set from workbench configuration
class EmbeddingModelTypeError(BaseErrorCode):
Code: int = 10006
Msg: str = 'The knowledge base uponembeddingWrong model type, please set from workbench configuration'
# Please contact the administrator to check the status of the workbench vector retrieval model
class EmbeddingModelStatusError(BaseErrorCode):
Code: int = 10007
Msg: str = 'Please contact the administrator to check the status of the workbench vector retrieval model'
# No bulkpost found in Trashllmmodel config
class NoLlmModelConfigError(BaseErrorCode):
Code: int = 10008
Msg: str = 'No bulkpost found in Trashllmmodel config'
# llmModel configuration has been deleted, please reconfigure the model
class LlmModelConfigDeletedError(BaseErrorCode):
Code: int = 10009
Msg: str = 'llmModel configuration has been deleted, please reconfigure the model'
# Service provider configuration has been deleted, please reconfigurellmModels
class LlmProviderDeletedError(BaseErrorCode):
Code: int = 10010
Msg: str = 'Service provider configuration has been deleted, please reconfigurellmModels'
# Support onlyLLMModel of type, not supported{model_info.model_type}Type of model
class LlmModelTypeError(BaseErrorCode):
Code: int = 10011
Msg: str = 'Support onlyLLMModel of type, not supported{model_type}Type of model'
# {server_info.name}under{model_info.model_name}The model is offline, please contact the administrator to launch the corresponding model
class LlmModelOfflineError(BaseErrorCode):
Code: int = 10012
Msg: str = '{server_name}under{model_name}The model is offline, please contact the administrator to launch the corresponding model'
# InisialisasillmFailed, please check the configuration or contact the administrator.Error message:{e}
class InitLlmError(BaseErrorCode):
Code: int = 10013
Msg: str = 'InisialisasillmFailed, please check the configuration or contact the administrator.Error message:{exception}'
class NoAsrModelConfigError(BaseErrorCode):
Code: int = 10014
Msg: str = 'No bulkpost found in Trashasrmodel config'
class AsrModelConfigDeletedError(BaseErrorCode):
Code: int = 10015
Msg: str = 'asrModel configuration has been deleted, please reconfigure the model'
class AsrProviderDeletedError(BaseErrorCode):
Code: int = 10016
Msg: str = 'Service provider configuration has been deleted, please reconfigureasrModels'
class AsrModelTypeError(BaseErrorCode):
Code: int = 10017
Msg: str = 'Support onlyASRModel of type, not supported{model_type}Type of model'
class AsrModelOfflineError(BaseErrorCode):
Code: int = 10018
Msg: str = '{server_name}under{model_name}The model is offline, please contact the administrator to launch the corresponding model'
class InitAsrError(BaseErrorCode):
Code: int = 10019
Msg: str = 'InisialisasiasrFailed, please check the configuration or contact the administrator.Error message:{exception}'
class NoTtsModelConfigError(BaseErrorCode):
Code: int = 10020
Msg: str = 'No bulkpost found in Trashttsmodel config'
class TtsModelConfigDeletedError(BaseErrorCode):
Code: int = 10021
Msg: str = 'ttsModel configuration has been deleted, please reconfigure the model'
class TtsProviderDeletedError(BaseErrorCode):
Code: int = 10022
Msg: str = 'Service provider configuration has been deleted, please reconfigurettsModels'
class TtsModelTypeError(BaseErrorCode):
Code: int = 10023
Msg: str = 'Support onlyTTSModel of type, not supported{model_type}Type of model'
class TtsModelOfflineError(BaseErrorCode):
Code: int = 10024
Msg: str = '{server_name}under{model_name}The model is offline, please contact the administrator to launch the corresponding model'
class InitTtsError(BaseErrorCode):
Code: int = 10025
Msg: str = 'InisialisasittsFailed, please check the configuration or contact the administrator.Error message:{exception}'
class SystemConfigEmptyError(BaseErrorCode):
Code: int = 10030
Msg: str = 'System configuration cannot be empty'
class SystemConfigInvalidError(BaseErrorCode):
Code: int = 10031
Msg: str = 'The system configuration format is incorrect, please check the configuration content:{exception}'
class UploadFileEmptyError(BaseErrorCode):
Code: int = 10040
Msg: str = 'Uploaded file cannot be empty'
class UploadFileExtError(BaseErrorCode):
Code: int = 10041
Msg: str = 'The upload file format is not supported, please upload a file in the correct format'
================================================
FILE: src/backend/bisheng/common/errcode/tag.py
================================================
from .base import BaseErrorCode
# Label module related return error code, function module code:107
class TagExistError(BaseErrorCode):
Code: int = 10700
Msg: str = 'Tag already exist'
class TagNotExistError(BaseErrorCode):
Code: int = 10701
Msg: str = 'No tags found'
================================================
FILE: src/backend/bisheng/common/errcode/telemetry.py
================================================
from bisheng.common.errcode import BaseErrorCode
class DashboardMaxError(BaseErrorCode):
Code: int = 17000
Msg: str = 'Creation is allowed at most 20 kanban boards'
class DashBoardShareAuthError(BaseErrorCode):
Code: int = 17005
Msg: str = 'No Kanban sharing permissions'
class QueryDatasetNotFoundError(BaseErrorCode):
Code: int = 17010
Msg: str = 'Corresponding dataset configuration not found'
class QueryVirtualMaxError(BaseErrorCode):
Code: int = 17011
Msg: str = 'Virtual indicators can only be queried individually'
class QueryMetricNotFoundError(BaseErrorCode):
Code = 17012
Msg = 'No corresponding metric configurations found'
class QueryAggregationNotFoundError(BaseErrorCode):
Code = 17013
Msg = 'No corresponding summary method found'
class QueryDimensionNotFoundError(BaseErrorCode):
Code = 17014
Msg = 'No corresponding dimension configurations found'
class QueryOperatorNotFoundError(BaseErrorCode):
Code = 17015
Msg = 'Corresponding operator configuration not found'
================================================
FILE: src/backend/bisheng/common/errcode/tool.py
================================================
from bisheng.common.errcode import BaseErrorCode
class ToolTypeRepeatError(BaseErrorCode):
Code: int = 15000
Msg: str = 'Tool name already exists'
class ToolTypeEmptyError(BaseErrorCode):
Code: int = 15001
Msg: str = 'Under the toolAPITidak boleh kosong.'
class ToolTypeNotExistsError(BaseErrorCode):
Code: int = 15002
Msg: str = 'Tool does not exist.'
class ToolTypeNameError(BaseErrorCode):
Code: int = 15003
Msg: str = 'Name does not meet specification: at least1characters, cannot exceed1000characters'
class ToolTypeIsPresetError(BaseErrorCode):
Code: int = 15010
Msg: str = 'Preset tool category cannot be deleted'
class ToolSchemaDownloadError(BaseErrorCode):
Code: int = 15020
Msg: str = 'ToolsSchemaright of privacyurlDownload failed'
class ToolSchemaEmptyError(BaseErrorCode):
Code: int = 15021
Msg: str = 'ToolsSchemaTidak boleh kosong.'
class ToolSchemaParseError(BaseErrorCode):
Code: int = 15022
Msg: str = 'openapi schemaError parsing, please check if the content matchesjsonoryamlFormat: {exception}'
class ToolSchemaServerError(BaseErrorCode):
Code: int = 15023
Msg: str = 'serverhitting the nail on the headurlMust start withhttporhttpsWhat/the beginning?: {url}'
class ToolMcpSchemaError(BaseErrorCode):
Code: int = 15024
Msg: str = 'mcpTool configuration parsing failed, please check if the content matchesmcpConfigure Format: {exception}'
================================================
FILE: src/backend/bisheng/common/errcode/user.py
================================================
from .base import BaseErrorCode
# Return error code related to user module, function module code:106
class UserValidateError(BaseErrorCode):
Code: int = 10600
Msg: str = 'Account or password error'
class UserPasswordExpireError(BaseErrorCode):
Code: int = 10601
Msg: str = 'Your password has expired, please change it in time'
class UserNotPasswordError(BaseErrorCode):
Code: int = 10602
Msg: str = 'The user has not set a password, please contact the administrator to reset the password first'
class UserPasswordError(BaseErrorCode):
Code: int = 10603
Msg: str = 'wrong current password'
class UserLoginOfflineError(BaseErrorCode):
Code: int = 10604
Msg: str = "Your account is logged in on another device and the session on this device has been logged out.\nIf this wasn't you, please change your account password as soon as possible."
class UserNameAlreadyExistError(BaseErrorCode):
Code: int = 10605
Msg: str = 'User Name already exist'
class UserNeedGroupAndRoleError(BaseErrorCode):
Code: int = 10606
Msg: str = 'User group and role cannot be empty'
class CaptchaError(BaseErrorCode):
Code: int = 10607
Msg: str = 'Kode verifikasi salah'
class UserNameTooLongError(BaseErrorCode):
Code: int = 10608
Msg: str = 'Username length cannot exceed30characters'
class UserGroupNotDeleteError(BaseErrorCode):
Code: int = 10610
Msg: str = 'There are still users in the user group and cannot be deleted'
class UserForbiddenError(BaseErrorCode):
Code: int = 10620
Msg: str = 'The user is disabled, please contact the administrator'
class UserPasswordMaxTryError(BaseErrorCode):
Code: int = 10621
Msg: str = 'The account has been automatically disabled due to too many failed login attempts, please contact your administrator'
class UserGroupEmptyError(BaseErrorCode):
Code: int = 10630
Msg: str = 'User group cannot be empty'
class AdminUserUpdateForbiddenError(BaseErrorCode):
Code: int = 10640
Msg: str = 'Administrator user information cannot be modified'
================================================
FILE: src/backend/bisheng/common/errcode/workstation.py
================================================
from .base import BaseErrorCode
# WorkstationModule-related return error code, function module code:120
# No web_search tool found in database
class WebSearchToolNotFoundError(BaseErrorCode):
Code: int = 12040
Msg: str = 'not foundweb_searchTools'
# Session does not exist
class ConversationNotFoundError(BaseErrorCode):
Code: int = 12041
Msg: str = 'Session does not exist'
# This agent has been added
class AgentAlreadyExistsError(BaseErrorCode):
Code: int = 12042
Msg: str = 'This agent has been added'
================================================
FILE: src/backend/bisheng/common/exceptions/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/exceptions/auth.py
================================================
class AuthJWTException(Exception):
"""
Base except which all fastapi_jwt_auth errors extend
"""
pass
class JWTDecodeError(AuthJWTException):
"""
An error decoding a JWT
"""
def __init__(self, status_code: int, message: str):
self.status_code = status_code
self.message = message
================================================
FILE: src/backend/bisheng/common/init_data.py
================================================
import hashlib
import json
import os
from typing import List
from bisheng.telemetry_search.domain.init_dataset import init_dashboard_datasets
from loguru import logger
from sqlmodel import select, update
from bisheng.common.services.config_service import settings
from bisheng.core.cache.redis_manager import get_redis_client
from bisheng.core.database import get_async_db_session, get_database_connection
from bisheng.core.storage.minio.minio_manager import get_minio_storage_sync
from bisheng.database.constants import AdminRole, DefaultRole
from bisheng.database.models.component import Component
from bisheng.database.models.group import Group, DefaultGroup
from bisheng.database.models.role import Role
from bisheng.database.models.role_access import RoleAccess, AccessType, WebMenuResource
from bisheng.database.models.template import Template
from bisheng.tool.domain.models.gpts_tools import GptsTools
from bisheng.tool.domain.models.gpts_tools import GptsToolsType
from bisheng.user.domain.models.user import User
from bisheng.user.domain.models.user_role import UserRoleDao
async def init_default_data():
"""Initialize Database"""
redis_client = await get_redis_client()
if await redis_client.asetNx('init_default_data', '1'):
try:
db_manager = await get_database_connection()
await db_manager.create_db_and_tables()
async with get_async_db_session() as session:
db_role = await session.exec(select(Role).limit(1))
db_role = db_role.all()
if not db_role:
# Initialize system configuration, Admin has all permissions
db_role = Role(id=AdminRole, role_name='System Admin', remark='System highest privileges',
group_id=DefaultGroup)
session.add(db_role)
db_role_normal = Role(id=DefaultRole, role_name='Regular users', remark='Regular users',
group_id=DefaultGroup)
session.add(db_role_normal)
# Grant to Normal User View access to the Build, Knowledge, Model menu bar
session.add_all([
RoleAccess(role_id=DefaultRole, type=AccessType.WEB_MENU.value,
third_id=WebMenuResource.BUILD.value),
RoleAccess(role_id=DefaultRole, type=AccessType.WEB_MENU.value,
third_id=WebMenuResource.KNOWLEDGE.value),
RoleAccess(role_id=DefaultRole, type=AccessType.WEB_MENU.value,
third_id=WebMenuResource.MODEL.value),
RoleAccess(role_id=DefaultRole, type=AccessType.WEB_MENU.value,
third_id=WebMenuResource.BACKEND.value),
RoleAccess(role_id=DefaultRole, type=AccessType.WEB_MENU.value,
third_id=WebMenuResource.FRONTEND.value),
])
await session.commit()
# Add Default User Group
group = await session.exec(select(Group).limit(1))
group = group.all()
if not group:
group = Group(id=DefaultGroup, group_name='Default user group', create_user=1, update_user=1)
session.add(group)
await session.commit()
await session.refresh(group)
user = await session.exec(select(User).limit(1))
user = user.all()
if not user and settings.admin:
md5 = hashlib.md5()
md5.update(settings.admin.get('password').encode('utf-8'))
user = User(
user_id=1,
user_name=settings.admin.get('user_name'),
password=md5.hexdigest(),
)
session.add(user)
await session.commit()
await session.refresh(user)
await UserRoleDao.set_admin_user(user.user_id)
component_db = await session.exec(select(Component).limit(1))
component_db = component_db.all()
if not component_db:
db_components = []
json_items = json.loads(read_from_conf('../database/data/component.json'))
for item in json_items:
for k, v in item.items():
db_component = Component(name=k, user_id=1, user_name='admin', data=v)
db_components.append(db_component)
session.add_all(db_components)
await session.commit()
# Initialize Preset Skill Template
templates = await session.exec(select(Template).limit(1))
templates = templates.all()
if not templates:
json_items = json.loads(read_from_conf('../database/data/template.json'))
for item in json_items:
session.add(Template(**item))
await session.commit()
# Initialize preset tools list
preset_tools = await session.exec(select(GptsTools).limit(1))
preset_tools = preset_tools.all()
if not preset_tools:
preset_tools = []
json_items = json.loads(read_from_conf('../database/data/t_gpts_tools.json'))
for item in json_items:
preset_tool = GptsTools(**item)
preset_tools.append(preset_tool)
session.add_all(preset_tools)
await session.commit()
# Initialize Preset Tool Categories
preset_tools_type = await session.exec(select(GptsToolsType).limit(1))
preset_tools_type = preset_tools_type.all()
if not preset_tools_type:
preset_tools_type = []
json_items = json.loads(read_from_conf('../database/data/t_gpts_tools_type.json'))
for item in json_items:
preset_tool_type = GptsToolsType(**item)
preset_tools_type.append(preset_tool_type)
session.add_all(preset_tools_type)
await session.commit()
# Set the category the preset tool belongs to, needs to be consistent with the preset data, soidIs Fixed
for i in range(1, 7):
await session.exec(update(GptsTools).where(GptsTools.id == i).values(type=i))
# Tools under the category of Sky Eye Examination
tyc_types: List[int] = list(range(7, 18))
await session.exec(
update(GptsTools).where(GptsTools.id.in_(tyc_types)).values(type=7))
# Instruments belonging to the financial category
jr_types: List[int] = list(range(18, 28))
await session.exec(
update(GptsTools).where(GptsTools.id.in_(jr_types)).values(type=8))
await session.commit()
# Initialize Databaseconfig
await settings.init_config()
# init dashboard data
await init_dashboard_datasets()
except Exception as exc:
# if the exception involves tables already existing
# we can ignore it
if 'already exists' not in str(exc):
logger.exception(f'Error creating DB and tables: {exc}')
raise RuntimeError('Error creating DB and tables') from exc
finally:
await redis_client.adelete('init_default_data')
def read_from_conf(file_path: str) -> str:
# Get current path
current_path = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(current_path, file_path)
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
return content
def upload_preset_minio_file():
""" Upload preset file tominio, To work with workflow templates """
minio_client = get_minio_storage_sync()
# Upload it 「Multi-Assistant Parallelism+Serial Report Generation」 Required for workflow templatesdocxDoc.
template_data = read_from_conf('../database/data/0254d1808a5247d2a3ee0d0011819acb.docx')
minio_client.put_object_sync(bucket_name=minio_client.bucket,
object_name='workflow/report/0254d1808a5247d2a3ee0d0011819acb.docx',
file=template_data,
content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document')
================================================
FILE: src/backend/bisheng/common/models/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/models/base.py
================================================
from typing import Dict, Any
from pydantic import ConfigDict
from sqlmodel import SQLModel
class SQLModelSerializable(SQLModel):
model_config = ConfigDict(from_attributes=True)
@classmethod
def create_new(cls, **data) -> "SQLModelSerializable":
""" create a new instance """
return cls(**data)
def model_dump(self, **kwargs) -> Dict[str, Any]:
""" default return mode is json """
if 'mode' not in kwargs:
kwargs['mode'] = 'json'
return super().model_dump(**kwargs)
================================================
FILE: src/backend/bisheng/common/models/config.py
================================================
from datetime import datetime
from enum import Enum
from typing import Optional
from sqlalchemy import Column, DateTime, text, Text
from sqlmodel import Field, select
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session, get_async_db_session
class ConfigKeyEnum(Enum):
INIT_DB = 'initdb_config' # Default System Configuration
HOME_TAGS = 'home_tags' # Home LabelIDVertical
WEB_CONFIG = 'web_config' # Configuration items for front-end customization
KNOWLEDGE_LLM = 'knowledge_llm' # Knowledge Base Default Model Configuration
ASSISTANT_LLM = 'assistant_llm' # Assistant Default Model Configuration
EVALUATION_LLM = 'evaluation_llm' # Review default model configuration
WORKFLOW_LLM = 'workflow_llm' # Workflow default model configuration
WORKSTATION = 'workstation' # Workbench default model configuration
LINSIGHT_LLM = 'linsight_llm' # Ideas Default Model Configuration
class ConfigBase(SQLModelSerializable):
key: str = Field(index=True, unique=True)
value: str = Field(sa_column=Column(Text))
comment: Optional[str] = Field(default=None, index=False)
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP'), onupdate=text('CURRENT_TIMESTAMP')))
class Config(ConfigBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
__table_args__ = {
"mysql_charset": "utf8mb4",
"mysql_collate": "utf8mb4_unicode_ci"
}
class ConfigRead(ConfigBase):
id: int
class ConfigCreate(ConfigBase):
pass
class ConfigUpdate(SQLModelSerializable):
key: str
value: Optional[str] = None
comment: Optional[str] = None
class ConfigDao(ConfigBase):
@classmethod
def get_config(cls, key: ConfigKeyEnum) -> Optional[Config]:
with get_sync_db_session() as session:
statement = select(Config).where(Config.key == key.value)
config = session.exec(statement).first()
return config
@classmethod
async def aget_config(cls, key: ConfigKeyEnum) -> Optional[Config]:
async with get_async_db_session() as session:
statement = select(Config).where(Config.key == key.value)
config = await session.exec(statement)
config = config.first()
return config
@classmethod
def insert_config(cls, config: Config) -> Config:
with get_sync_db_session() as session:
session.add(config)
session.commit()
session.refresh(config)
return config
@classmethod
async def async_insert_config(cls, config: Config) -> Config:
async with get_async_db_session() as session:
session.add(config)
await session.commit()
await session.refresh(config)
return config
================================================
FILE: src/backend/bisheng/common/repositories/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/repositories/implementations/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/repositories/implementations/base_repository_impl.py
================================================
from typing import Type, TypeVar, Optional, Any, Sequence, Union, List, Coroutine
from sqlalchemy import Row, RowMapping, func
from sqlmodel import SQLModel, select, Session, col
from sqlmodel.ext.asyncio.session import AsyncSession
from bisheng.common.repositories.interfaces.base_repository import BaseRepository
T = TypeVar('T', bound=SQLModel)
ID = TypeVar('ID')
class BaseRepositoryImpl(BaseRepository[T, ID]):
"""RepositoryBasic Implementation"""
def __init__(self, session: Union[AsyncSession, Session], model_class: Type[T]):
self.session = session
self.model_class = model_class
async def save(self, entity: T) -> T:
"""Save Entity"""
self.session.add(entity)
await self.session.commit()
await self.session.refresh(entity)
return entity
async def bulk_save(self, entities: List[T]) -> List[T]:
"""Batch Save Entities"""
self.session.add_all(entities)
await self.session.commit()
for entity in entities:
await self.session.refresh(entity)
return entities
def save_sync(self, entity: T) -> T:
"""Synchronous Save Entity"""
self.session.add(entity)
self.session.commit()
self.session.refresh(entity)
return entity
def bulk_save_sync(self, entities: List[T]) -> List[T]:
"""Synchronize Batch Save Entities"""
self.session.add_all(entities)
self.session.commit()
for entity in entities:
self.session.refresh(entity)
return entities
async def find_by_id(self, entity_id: ID) -> Optional[T]:
"""accordingIDFind Entity"""
entity = await self.session.get(self.model_class, entity_id)
return entity
def find_by_id_sync(self, entity_id: ID) -> Optional[T]:
"""Sync byIDFind Entity"""
entity = self.session.get(self.model_class, entity_id)
return entity
async def find_one(self, **filters) -> Optional[T]:
"""Find a single entity"""
query = select(self.model_class)
# Apply Filter Criteria
for field, value in filters.items():
if hasattr(self.model_class, field):
query = query.where(getattr(self.model_class, field) == value)
result = await self.session.exec(query)
return result.first()
def find_one_sync(self, **filters) -> Optional[T]:
"""Synchronous lookup of a single entity"""
query = select(self.model_class)
# Apply Filter Criteria
for field, value in filters.items():
if hasattr(self.model_class, field):
query = query.where(getattr(self.model_class, field) == value)
result = self.session.exec(query)
return result.first()
async def find_by_ids(self, entity_ids: List[ID]) -> Sequence[Row[Any] | RowMapping | Any]:
"""According to multipleIDFind Entity"""
query = select(self.model_class).where(col(self.model_class.id).in_(entity_ids))
result = await self.session.exec(query)
return result.all()
def find_by_ids_sync(self, entity_ids: List[ID]) -> Sequence[Row[Any] | RowMapping | Any]:
"""Sync based on multipleIDFind Entity"""
query = select(self.model_class).where(col(self.model_class.id).in_(entity_ids))
result = self.session.exec(query)
return result.all()
async def find_all(self, **filters) -> Sequence[Row[Any] | RowMapping | Any]:
"""Find all entities"""
query = select(self.model_class)
# Apply Filter Criteria
for field, value in filters.items():
if hasattr(self.model_class, field):
query = query.where(getattr(self.model_class, field) == value)
result = await self.session.exec(query)
return result.all()
def find_all_sync(self, **filters) -> Sequence[Row[Any] | RowMapping | Any]:
"""Sync Find All Entities"""
query = select(self.model_class)
# Apply Filter Criteria
for field, value in filters.items():
if hasattr(self.model_class, field):
query = query.where(getattr(self.model_class, field) == value)
result = self.session.exec(query)
return result.all()
async def update(self, entity: T) -> T:
"""Update entities"""
merged_entity = await self.session.merge(entity)
await self.session.commit()
await self.session.refresh(merged_entity)
return merged_entity
def update_sync(self, entity: T) -> T:
"""Synchronize Update Entities"""
merged_entity = self.session.merge(entity)
self.session.commit()
self.session.refresh(merged_entity)
return merged_entity
async def delete(self, entity_id: ID) -> bool:
"""Delete entity role"""
entity = await self.find_by_id(entity_id)
if entity:
await self.session.delete(entity)
await self.session.commit()
return True
return False
def delete_sync(self, entity_id: ID) -> bool:
"""Synchronous deletion of entities"""
entity = self.find_by_id_sync(entity_id)
if entity:
self.session.delete(entity)
self.session.commit()
return True
return False
async def exists(self, entity_id: ID) -> bool:
"""Check if the entity exists"""
entity = await self.find_by_id(entity_id)
return entity is not None
def exists_sync(self, entity_id: ID) -> bool:
"""Synchronization Check Entity Existence"""
entity = self.find_by_id_sync(entity_id)
return entity is not None
async def count(self, **filters) -> int:
"""Number of statistical entities"""
query = select(self.model_class)
# Apply Filter Criteria
for field, value in filters.items():
if hasattr(self.model_class, field):
query = query.where(getattr(self.model_class, field) == value)
count_q = query.with_only_columns(func.count()).order_by(None).select_from(query.get_final_froms()[0])
result = await self.session.exec(count_q)
for count in result:
return count
return 0
def count_sync(self, **filters) -> int:
"""Number of entities synchronized"""
query = select(self.model_class)
# Apply Filter Criteria
for field, value in filters.items():
if hasattr(self.model_class, field):
query = query.where(getattr(self.model_class, field) == value)
count_q = query.with_only_columns(func.count()).order_by(None).select_from(query.get_final_froms()[0])
result = self.session.exec(count_q)
for count in result:
return count
return 0
================================================
FILE: src/backend/bisheng/common/repositories/implementations/config_repository_impl.py
================================================
from sqlmodel.ext.asyncio.session import AsyncSession
from bisheng.common.models.config import Config
from bisheng.common.repositories.implementations.base_repository_impl import BaseRepositoryImpl
from bisheng.common.repositories.interfaces.config_repository import ConfigRepository
class ConfigRepositoryImpl(BaseRepositoryImpl[Config, str], ConfigRepository):
"""Shared link repository implementation"""
def __init__(self, session: AsyncSession):
super().__init__(session, Config)
================================================
FILE: src/backend/bisheng/common/repositories/interfaces/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/repositories/interfaces/base_repository.py
================================================
from abc import ABC, abstractmethod
from typing import Generic, TypeVar, List, Optional, Dict, Any
T = TypeVar('T')
ID = TypeVar('ID')
class BaseRepository(ABC, Generic[T, ID]):
"""RepositoryBase Interface"""
@abstractmethod
async def save(self, entity: T) -> T:
"""Save Entity"""
pass
@abstractmethod
async def bulk_save(self, entities: List[T]) -> List[T]:
"""Batch Save Entities"""
pass
@abstractmethod
def save_sync(self, entity: T) -> T:
"""Synchronous Save Entity"""
pass
@abstractmethod
def bulk_save_sync(self, entities: List[T]) -> List[T]:
"""Synchronize Batch Save Entities"""
pass
@abstractmethod
async def find_by_id(self, entity_id: ID) -> Optional[T]:
"""accordingIDFind Entity"""
pass
@abstractmethod
def find_by_id_sync(self, entity_id: ID) -> Optional[T]:
"""Sync byIDFind Entity"""
pass
@abstractmethod
async def find_one(self, **filters) -> Optional[T]:
"""Find a single entity"""
pass
@abstractmethod
def find_one_sync(self, **filters) -> Optional[T]:
"""Synchronous lookup of a single entity"""
pass
@abstractmethod
async def find_by_ids(self, entity_ids: List[ID]) -> List[T]:
"""According to multipleIDFind Entity"""
pass
@abstractmethod
def find_by_ids_sync(self, entity_ids: List[ID]) -> List[T]:
"""Sync based on multipleIDFind Entity"""
pass
@abstractmethod
async def find_all(self, **filters) -> List[T]:
"""Find all entities"""
pass
@abstractmethod
def find_all_sync(self, **filters) -> List[T]:
"""Sync Find All Entities"""
pass
@abstractmethod
async def update(self, entity: T) -> T:
"""Update entities"""
pass
@abstractmethod
def update_sync(self, entity: T) -> T:
"""Synchronize Update Entities"""
pass
@abstractmethod
async def delete(self, entity_id: ID) -> bool:
"""Delete entity role"""
pass
@abstractmethod
def delete_sync(self, entity_id: ID) -> bool:
"""Synchronous deletion of entities"""
pass
@abstractmethod
async def exists(self, entity_id: ID) -> bool:
"""Check if the entity exists"""
pass
@abstractmethod
def exists_sync(self, entity_id: ID) -> bool:
"""Synchronization Check Entity Existence"""
pass
@abstractmethod
async def count(self, **filters) -> int:
"""Number of statistical entities"""
pass
@abstractmethod
def count_sync(self, **filters) -> int:
"""Number of entities synchronized"""
pass
================================================
FILE: src/backend/bisheng/common/repositories/interfaces/config_repository.py
================================================
from abc import ABC
from bisheng.common.models.config import Config
from bisheng.common.repositories.interfaces.base_repository import BaseRepository
class ConfigRepository(BaseRepository[Config, str], ABC):
"""Configure warehouse interfaces"""
pass
================================================
FILE: src/backend/bisheng/common/schemas/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/schemas/api.py
================================================
from typing import Generic, TypeVar, Union, Any, List
from pydantic import BaseModel
DataT = TypeVar('DataT')
class UnifiedResponseModel(BaseModel, Generic[DataT]):
"""Unified Response Model"""
status_code: int
status_message: str
data: DataT = None
def resp_200(data: Union[list, dict, str, Any] = None,
message: str = 'SUCCESS') -> UnifiedResponseModel:
"""Success code"""
return UnifiedResponseModel(status_code=200, status_message=message, data=data)
# return data
def resp_500(code: int = 500,
data: Union[list, dict, str, Any] = None,
message: str = 'BAD REQUEST') -> UnifiedResponseModel:
"""Wrong logical response"""
return UnifiedResponseModel(status_code=code, status_message=message, data=data)
# Obsolete paging data model, old data compatible retention
class PageList(BaseModel, Generic[DataT]):
list: List[DataT]
total: int
# Paging Data Model, Use this uniformly in the future
class PageData(BaseModel, Generic[DataT]):
data: List[DataT]
total: int
def resp_501(code: int = 501,
data: Union[list, dict, str, Any] = None,
message: str = 'BAD REQUEST') -> UnifiedResponseModel:
"""Wrong logical response"""
return UnifiedResponseModel(status_code=code, status_message=message, data=data)
def resp_502(code: int = 502,
data: Union[list, dict, str, Any] = None,
message: str = 'BAD REQUEST') -> UnifiedResponseModel:
"""Wrong logical response"""
return UnifiedResponseModel(status_code=code, status_message=message, data=data)
================================================
FILE: src/backend/bisheng/common/schemas/rag_schema.py
================================================
from typing import Literal, Optional
from pydantic import BaseModel
# Custom Extended Fieldsschema
class RagMetadataFieldSchema(BaseModel):
field_name: str
field_type: Literal['text', 'boolean', 'int8', 'int16', 'int32', 'int64', 'float', 'double', 'json']
kwargs: Optional[dict] = None
================================================
FILE: src/backend/bisheng/common/schemas/telemetry/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/schemas/telemetry/base_telemetry_schema.py
================================================
import uuid
from datetime import datetime, timezone
from typing import List, Generic, TypeVar, Optional, Any
from pydantic import BaseModel, Field, ConfigDict
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum
from bisheng.common.schemas.telemetry.event_data_schema import BaseEventData
class UserGroupInfo(BaseModel):
user_group_id: int
user_group_name: str
class UserRoleInfo(BaseModel):
role_id: int
role_name: str
group_id: int
class UserContext(BaseModel):
user_id: int = Field(..., description="Unique identifier for the user")
user_name: str = Field(..., description="Name of the user")
user_group_infos: List[UserGroupInfo] = Field(default_factory=list)
user_role_infos: List[UserRoleInfo] = Field(default_factory=list)
T_EventData = TypeVar("T_EventData", bound=BaseEventData)
class BaseTelemetryEvent(BaseModel, Generic[T_EventData]):
"""Base model for telemetry events, including common fields and event-specific data."""
model_config = ConfigDict(use_enum_values=True)
event_id: str = Field(default_factory=lambda: uuid.uuid4().hex)
event_type: BaseTelemetryTypeEnum = Field(..., description="Type of the telemetry event")
timestamp: int = Field(default_factory=lambda: int(datetime.now(tz=timezone.utc).timestamp()))
user_context: UserContext = Field(..., description="User context information")
trace_id: Optional[str] = Field(default=None, description="Trace identifier for correlating events")
event_data: Optional[T_EventData] = Field(None, description="Event-specific data payload")
def model_dump(self, *args: Any, **kwargs: Any) -> dict[str, Any]:
"""Override model_dump to exclude None values by default."""
dict_data = super().model_dump(*args, **kwargs)
if self.event_data is None:
return dict_data
event_name = self.event_data.event_name
dict_data['event_data'] = {f"{event_name}_{k}": v for k, v in dict_data['event_data'].items()}
return dict_data
================================================
FILE: src/backend/bisheng/common/schemas/telemetry/event_data_schema.py
================================================
from typing import Literal
from pydantic import BaseModel
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum, StatusEnum, ApplicationTypeEnum
class BaseEventData(BaseModel):
"""All event-specific data models should inherit from this base class for type constraints."""
@property
def event_name(self) -> BaseTelemetryTypeEnum:
return self._event_name
class UserLoginEventData(BaseEventData):
"""Data model for user login events."""
_event_name: BaseTelemetryTypeEnum = BaseTelemetryTypeEnum.USER_LOGIN
method: str
class NewMessageSessionEventData(BaseEventData):
"""Data model for new message session events."""
_event_name: BaseTelemetryTypeEnum = BaseTelemetryTypeEnum.NEW_MESSAGE_SESSION
session_id: str
# Apply type
app_type: ApplicationTypeEnum
# Application name
app_name: str
# Applicationsid
app_id: str
# Conversation Source PlatformsAPI
source: Literal["platform", "api"]
class ToolInvocationEventData(BaseEventData):
_event_name: BaseTelemetryTypeEnum = BaseTelemetryTypeEnum.TOOL_INVOKE
app_id: str
app_name: str
app_type: ApplicationTypeEnum
tool_id: int
tool_name: str
tool_type: int # What type of tools, such as:API、MCPPreset.
status: StatusEnum
class DeleteMessageSessionEventData(BaseEventData):
"""Data model for delete message session events."""
_event_name: BaseTelemetryTypeEnum = BaseTelemetryTypeEnum.DELETE_MESSAGE_SESSION
session_id: str
class NewApplicationEventData(BaseEventData):
"""Data model for new application events."""
_event_name: BaseTelemetryTypeEnum = BaseTelemetryTypeEnum.NEW_APPLICATION
app_id: str
app_name: str
app_type: ApplicationTypeEnum
class NewKnowledgeBaseEventData(BaseEventData):
"""Data model for new knowledge base events."""
_event_name: BaseTelemetryTypeEnum = BaseTelemetryTypeEnum.NEW_KNOWLEDGE_BASE
kb_id: int
kb_name: str
kb_type: int
class FileParseEventData(BaseEventData):
"""Data model for file parse events."""
_event_name: BaseTelemetryTypeEnum = BaseTelemetryTypeEnum.FILE_PARSE
parse_type: str
status: Literal['success', 'failed', 'parse_failed']
app_type: ApplicationTypeEnum
class MessageFeedbackEventData(BaseEventData):
"""Data model for message feedback events."""
_event_name: BaseTelemetryTypeEnum = BaseTelemetryTypeEnum.MESSAGE_FEEDBACK
message_id: int
operation_type: Literal['like', 'dislike', 'copy']
app_id: str
app_name: str
app_type: ApplicationTypeEnum
class ModelInvokeEventData(BaseEventData):
"""Data model for model invoke events."""
_event_name: BaseTelemetryTypeEnum = BaseTelemetryTypeEnum.MODEL_INVOKE
model_id: int
model_name: str
model_type: str
model_server_id: int
model_server_name: str
app_id: str
app_name: str
app_type: ApplicationTypeEnum
start_time: int
end_time: int
first_token_cost_time: int # ms
status: StatusEnum
is_stream: bool
input_token: int # MasukkantokenQuantity
output_token: int # OutputtokenQuantity
cache_token: int # CeacletokenQuantity
total_token: int # TotaltokenQuantity
class ApplicationAliveEventData(BaseEventData):
"""Data model for websocket alive events."""
_event_name: BaseTelemetryTypeEnum = BaseTelemetryTypeEnum.APPLICATION_ALIVE
app_id: str
app_name: str
app_type: ApplicationTypeEnum
chat_id: str | None
start_time: int
end_time: int
class ApplicationProcessEventData(BaseEventData):
"""Data model for application invoke events."""
_event_name: BaseTelemetryTypeEnum = BaseTelemetryTypeEnum.APPLICATION_PROCESS
app_id: str
app_name: str
app_type: ApplicationTypeEnum
chat_id: str | None
start_time: int
end_time: int
process_time: int
================================================
FILE: src/backend/bisheng/common/services/__init__.py
================================================
from bisheng.common.services.telemetry.telemetry_service import telemetry_service
__all__ = ["telemetry_service"]
================================================
FILE: src/backend/bisheng/common/services/config_service.py
================================================
import os
from typing import List, Dict
import yaml
from loguru import logger
from bisheng.common.models.config import ConfigKeyEnum, Config
from bisheng.common.repositories.implementations.config_repository_impl import ConfigRepositoryImpl
from bisheng.core.cache.redis_manager import get_redis_client_sync
from bisheng.core.config.settings import Settings, PasswordConf, SystemLoginMethod, \
WorkflowConf, LinsightConf, KnowledgeConf
from bisheng.core.database import get_sync_db_session, get_async_db_session
config_file = os.getenv('config', 'config.yaml')
def read_from_conf(file_path: str) -> str:
if '/' not in file_path:
# Get project main path
current_path = os.path.dirname(os.path.abspath(__file__))
# Look up the previous two levels of the catalog
current_path = os.path.dirname(os.path.dirname(current_path))
file_path = os.path.join(current_path, file_path)
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
return content
def parse_key(keys: list[str], setting_str: str = None, include_key: bool = False) -> str:
# Setujukey Back yamlConfigure invalueAll strings, including comments
if not setting_str:
setting_str = read_from_conf(config_file)
setting_lines = setting_str.split('\n')
value_of_key = [[] for _ in keys]
value_start_flag = [False for _ in keys]
prev_line = ''
for line in setting_lines:
for index, key in enumerate(keys):
if value_start_flag[index]:
if line.startswith(' ') or not line.strip() or line.startswith('#'):
value_of_key[index].append(line)
else:
value_start_flag[index] = False
continue
if line.startswith(key + ':'):
value_start_flag[index] = True
if include_key:
if prev_line.startswith('#'):
value_of_key[index].append(prev_line)
value_of_key[index].append(line)
prev_line = line
return ['\n'.join(value) for value in value_of_key]
class ConfigService(Settings):
"""Configure service classes, inherited fromSettingsto provide configuration access"""
def __init__(self, **data):
super().__init__(**data)
@staticmethod
def env_var_constructor(loader, node):
value = loader.construct_scalar(node) # PyYAML loaderFixed method for constructing a variable value from the current node
var_name = value.strip('${} ') # Subtract variable values (e.g.${PATH}) Special characters and spaces before and after
env_val = os.getenv(var_name) # Try to get the variable name in the environment variable (e.g.USER) corresponding to the value, if it is not obtained, it is empty
if env_val is None:
raise ValueError(f'Environment variable {var_name} not found')
return env_val
@classmethod
def load_settings_from_yaml(cls, file_path: str) -> 'ConfigService':
# Sign up for customYAMLConstructor to handle environment variables
yaml.SafeLoader.add_constructor('!env', cls.env_var_constructor)
# Get current path
current_path = os.path.dirname(os.path.abspath(__file__))
# Look up the previous two levels of the catalog
current_path = os.path.dirname(os.path.dirname(current_path))
# Check if a string is a valid path or a file name
if '/' not in file_path:
file_path = os.path.join(current_path, file_path)
with open(file_path, 'r', encoding='utf-8') as f:
settings_dict = yaml.safe_load(f)
with open(os.path.join(current_path, 'default_node.yaml'), 'r', encoding='utf-8') as node:
settings_dict.update(yaml.safe_load(node))
for key in settings_dict:
if key not in Settings.model_fields.keys():
raise KeyError(f'Key {key} not found in settings')
logger.debug(f'Loading {key} from {file_path}')
return ConfigService(**settings_dict)
async def init_config(self):
# Inisialisasiconfig
# First Passedyaml Get all of the profileskey
config_content = read_from_conf('initdb_config.yaml')
if not config_content:
return
async with get_async_db_session() as session:
config_repository = ConfigRepositoryImpl(session)
config = list(await config_repository.find_all())
db_keys = {conf.key: conf.value for conf in config}
all_config_key = 'initdb_config'
# There is no default configuration in the database, write the default configuration to the database
if db_keys.get(all_config_key, None) is None:
# Write profile to database
# Compatible with old configurations, old configurations and new profiles need to bemerge, Noold configDirectly combine the newconfigAdd to Database
new_config_content = self.merge_old_config(config_content, config, db_keys)
try:
db_config = Config(key=all_config_key, value=new_config_content)
session.add(db_config)
await session.commit()
except Exception as e:
logger.exception(e)
await session.rollback()
@staticmethod
def merge_old_config(new_config: str, old_db_config: List[Config], old_db_keys: Dict[str, str]):
# No old configuration, write the new configuration directly to the database
if old_db_config.__len__() == 0:
return new_config
new_content = ''
# Start with the new configuration
config_yaml = yaml.safe_load(new_config)
for one in config_yaml.keys():
if old_db_keys.get(one, None) is None: # is a new configuration, directly using the contents of the file
new_content += f'{parse_key([one], new_config, include_key=True)[0]}\n\n'
else:
new_content += f'{one}:\n{old_db_keys[one]}\n\n'
return new_content
@staticmethod
def get_all_config():
redis_key = 'config:initdb_config'
cache = get_redis_client_sync().get(redis_key)
if cache:
return yaml.safe_load(cache)
else:
with get_sync_db_session() as session:
config_repository = ConfigRepositoryImpl(session)
initdb_config = config_repository.find_one_sync(key=ConfigKeyEnum.INIT_DB.value)
if initdb_config:
get_redis_client_sync().set(redis_key, initdb_config.value, 100)
return yaml.safe_load(initdb_config.value)
else:
raise Exception('initdb_config not found, please check your system config')
@staticmethod
async def aget_all_config():
redis_key = 'config:initdb_config'
cache = await get_redis_client_sync().aget(redis_key)
if cache:
return yaml.safe_load(cache)
else:
async with get_async_db_session() as session:
config_repository = ConfigRepositoryImpl(session)
initdb_config = await config_repository.find_one(key=ConfigKeyEnum.INIT_DB.value)
if initdb_config:
await get_redis_client_sync().aset(redis_key, initdb_config.value, 100)
return yaml.safe_load(initdb_config.value)
else:
raise Exception('initdb_config not found, please check your system config')
def get_knowledge(self) -> KnowledgeConf:
# Due to distributed requirements, configurations that can be changed are stored inmysqlso each time the configuration is read from themysqlRead in
all_config = self.get_all_config()
ret = all_config.get('knowledges', {})
return KnowledgeConf(**ret)
async def async_get_knowledge(self) -> KnowledgeConf:
# Due to distributed requirements, configurations that can be changed are stored inmysqlso each time the configuration is read from themysqlRead in
all_config = await self.aget_all_config()
ret = all_config.get('knowledges', {})
return KnowledgeConf(**ret)
def get_default_llm(self):
# Due to distributed requirements, configurations that can be changed are stored inmysqlso each time the configuration is read from themysqlRead in
all_config = self.get_all_config()
return all_config.get('default_llm', {})
async def get_password_conf(self) -> PasswordConf:
# Get password-related configuration items
all_config = await self.aget_all_config()
return PasswordConf(**all_config.get('password_conf', {}))
def get_system_login_method(self) -> SystemLoginMethod:
# Get password-related configuration items
all_config = self.get_all_config()
tmp = SystemLoginMethod(**all_config.get('system_login_method', {}))
tmp.bisheng_pro = os.getenv('BISHENG_PRO') == 'true'
return tmp
async def aget_system_login_method(self) -> SystemLoginMethod:
# Get password-related configuration items
all_config = await self.aget_all_config()
tmp = SystemLoginMethod(**all_config.get('system_login_method', {}))
tmp.bisheng_pro = os.getenv('BISHENG_PRO') == 'true'
return tmp
def get_workflow_conf(self) -> WorkflowConf:
# Get password-related configuration items
all_config = self.get_all_config()
return WorkflowConf(**all_config.get('workflow', {}))
def get_linsight_conf(self) -> LinsightConf:
# Get Ideas-related configuration items
all_config = self.get_all_config()
conf = LinsightConf(debug=self.linsight_conf.debug)
linsight_conf = all_config.get('linsight', {})
for k, v in linsight_conf.items():
setattr(conf, k, v)
return conf
def get_from_db(self, key: str):
# Get all of them firstkey
all_config = self.get_all_config()
return all_config.get(key, {})
async def aget_from_db(self, key: str):
# Get all of them firstkey
all_config = await self.aget_all_config()
return all_config.get(key, {})
settings = ConfigService.load_settings_from_yaml(config_file)
================================================
FILE: src/backend/bisheng/common/services/telemetry/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/services/telemetry/telemetry_service.py
================================================
import asyncio
import logging
from asyncio import Semaphore
from concurrent.futures import ThreadPoolExecutor
from typing import Optional
from elasticsearch import AsyncElasticsearch, Elasticsearch, exceptions as es_exceptions
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum
from bisheng.common.schemas.telemetry.base_telemetry_schema import T_EventData, BaseTelemetryEvent, UserContext, \
UserGroupInfo, UserRoleInfo
from bisheng.core.database import get_async_db_session, get_sync_db_session
from bisheng.core.search.elasticsearch.manager import get_statistics_es_connection, get_statistics_es_connection_sync
from bisheng.user.domain.models.user import User
from bisheng.user.domain.repositories.implementations.user_repository_impl import UserRepositoryImpl
logger = logging.getLogger(__name__)
INDEX_MAPPING = {
"mappings": { # Defining the indexed Mapping
"properties": {
"event_id": {"type": "keyword"},
"event_type": {"type": "keyword"},
"trace_id": {"type": "keyword"},
"timestamp": {"type": "date", "format": "strict_date_optional_time||epoch_second"},
"user_context": {
"type": "object",
"properties": {
"user_id": {"type": "integer"},
"user_name": {"type": "keyword"},
"user_group_infos": {
"type": "object",
"properties": {
"user_group_id": {"type": "integer"},
"user_group_name": {"type": "keyword"}
}
},
"user_role_infos": {
"type": "object",
"properties": {
"role_id": {"type": "integer"},
"role_name": {"type": "keyword"},
"group_id": {"type": "integer"},
}
}
}
},
"event_data": {
"type": "object",
"dynamic": True
}
}
}
}
class BaseTelemetryService(object):
"""Telemetry Service for logging events to Elasticsearch"""
_index_name: str = "base_telemetry_events"
_index_initialized: bool = False
def __init__(self):
self._es_client: Optional[AsyncElasticsearch] = None
self._es_client_sync: Optional[Elasticsearch] = None
# Thread pool for synchronizing methods
self.thread_pool = ThreadPoolExecutor(max_workers=10)
# Create a semaphore to limit the number of concurrency
self._semaphore = Semaphore(10)
async def _ensure_index(self):
"""Initialize the Elasticsearch index safely"""
# Double-check locking pattern could be used here, but simple boolean check is "good enough" for loose consistency
if self._index_initialized:
return
if not self._es_client:
self._es_client = await get_statistics_es_connection()
try:
exists = await self._es_client.indices.exists(index=self._index_name)
if not exists:
# Incoming body Applications Mapping
await self._es_client.indices.create(index=self._index_name, body=INDEX_MAPPING)
except es_exceptions.RequestError as e:
# Ignore on concurrency creation "resource_already_exists_exception"
if "resource_already_exists_exception" not in str(e):
logger.error(f"Failed to create ES index: {e}")
raise e
except Exception as e:
logger.error(f"ES Index check failed: {e}")
self._index_initialized = True
def _ensure_index_sync(self):
if self._index_initialized:
return
if not self._es_client_sync:
self._es_client_sync = get_statistics_es_connection_sync()
try:
exists = self._es_client_sync.indices.exists(index=self._index_name)
if not exists:
# Incoming body
self._es_client_sync.indices.create(index=self._index_name, body=INDEX_MAPPING)
except es_exceptions.RequestError as e:
if "resource_already_exists_exception" not in str(e):
logger.error(f"Failed to create ES index sync: {e}")
self._index_initialized = True
@staticmethod
async def _init_user_context(user_id: int) -> UserContext:
async with get_async_db_session() as session:
user_repository = UserRepositoryImpl(session)
user = await user_repository.get_user_with_groups_and_roles_by_user_id(user_id)
if not user:
user = User(
user_id=user_id,
user_name=str(user_id)
)
if user.groups is None:
user.groups = []
if user.roles is None:
user.roles = []
user_context = UserContext(
user_id=user.user_id,
user_name=user.user_name,
user_group_infos=[
UserGroupInfo(
user_group_id=group.id,
user_group_name=group.group_name
) for group in user.groups
],
user_role_infos=[
UserRoleInfo(
role_id=role.id,
role_name=role.role_name,
group_id=role.group_id,
) for role in user.roles
]
)
return user_context
@staticmethod
def _init_user_context_sync(user_id: int) -> UserContext:
with get_sync_db_session() as session:
user_repository = UserRepositoryImpl(session)
user = user_repository.get_user_with_groups_and_roles_by_user_id_sync(user_id)
if not user:
user = User(
user_id=user_id,
user_name=str(user_id)
)
if user.groups is None:
user.groups = []
if user.roles is None:
user.roles = []
user_context = UserContext(
user_id=user.user_id,
user_name=user.user_name,
user_group_infos=[
UserGroupInfo(
user_group_id=group.id,
user_group_name=group.group_name
) for group in user.groups
],
user_role_infos=[
UserRoleInfo(
role_id=role.id,
role_name=role.role_name,
group_id=role.group_id,
) for role in user.roles
]
)
return user_context
@property
def index_name(self) -> str:
return self._index_name
# record event task
async def _record_event_task(self, user_id: int, event_type: BaseTelemetryTypeEnum, trace_id: str,
event_data: T_EventData = None):
# Get semaphore
async with self._semaphore:
try:
logger.debug(f"Recording telemetry event for user_id {user_id}, event_type {event_type}")
# get user info (With Exception Capture)
user_context = await self._init_user_context(user_id)
if not user_context:
# Even if the user is not found, it is recommended to keep a log, but user_context Empty or default
logger.warning(f"User context missing for user_id {user_id}, logging anonymously")
# It is possible to decide according to your needs whether or not returnor build an empty Context
# Build. Event
event_info = BaseTelemetryEvent(
event_type=event_type,
user_context=user_context, # Allow for None May need to be adjusted Schema Allow Optional
trace_id=trace_id,
event_data=event_data
)
# Send (Fire and Forget)
await self._es_client.index(index=self.index_name, document=event_info.model_dump())
except Exception as e:
logger.error(f"Error in record_event_task: {e}", exc_info=True)
async def log_event(self, user_id: int, event_type: BaseTelemetryTypeEnum, trace_id: str,
event_data: T_EventData = None):
"""Log events asynchronously to Elasticsearch (Safe Version)"""
try:
# Ensuring ES CONNECT
if not self._es_client:
self._es_client = await get_statistics_es_connection()
# Make sure the index exists (Lazy Init)
if not self._index_initialized:
await self._ensure_index()
# Log events asynchronously
asyncio.create_task(
self._record_event_task(
user_id=user_id,
event_type=event_type,
trace_id=trace_id,
event_data=event_data
)
)
except Exception as e:
# Swallow exceptions, do not let the log system crash the main business
logger.error(f"Failed to log telemetry event: {e}", exc_info=True)
# record event task thread sync
def _record_event_task_sync(self, user_id: int, event_type: BaseTelemetryTypeEnum, trace_id: str,
event_data: T_EventData = None):
try:
logger.debug(f"Recording telemetry event sync for user_id {user_id}, event_type {event_type}")
user_context = self._init_user_context_sync(user_id)
event_info = BaseTelemetryEvent(
event_type=event_type,
user_context=user_context,
trace_id=trace_id,
event_data=event_data
)
self._es_client_sync.index(index=self.index_name, document=event_info.model_dump())
except Exception as e:
logger.error(f"Failed to log telemetry event sync in thread: {e}", exc_info=True)
def log_event_sync(self, user_id: int, event_type: BaseTelemetryTypeEnum, trace_id: str,
event_data: T_EventData = None):
"""Synchronize logging events to Elasticsearch (Safe Version)"""
try:
if not self._es_client_sync:
self._es_client_sync = get_statistics_es_connection_sync()
if not self._index_initialized:
self._ensure_index_sync()
# Perform synchronization tasks using thread pools
self.thread_pool.submit(
self._record_event_task_sync,
user_id,
event_type,
trace_id,
event_data
)
except Exception as e:
logger.error(f"Failed to log telemetry event sync: {e}", exc_info=True)
telemetry_service = BaseTelemetryService()
================================================
FILE: src/backend/bisheng/common/utils/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/utils/markdown_cmpnt/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/config/default_style.py
================================================
# Parameter explanation. Note that colon or dash must be followed by a space and cannot be omitted.
#
# font:
# default: Western fonts, default [Times New Roman]
# east-asia: Chinese font, default [Song Ti]
# size: Font Size (Default) [12]Employer: pt
# color: RGBColorful 16 Metric value, must be a string, default ["000000"] pure black
# extra: Extra styles, do not add these styles by default. The following styles are supported, effective if there is, ignored if there is none
# - bold bolded
# - italic Italic
# - underline LOW LINE
# - strike Strikethrough
# first-line-indent: First line indent, default [0], unit: times
# line-spacing: Line spacing, default [1.2] Unit: times, indicates line spacing is set to 1.2 Double row height,
# space:
# before Space before paragraph, default [0] pt
# after: Space after paragraph, default [0] pt
# h1~h4Show1to4Level Title
style_conf = {
"h1":
{
"font":
{
"default": "黑体",
"east-asia": "黑体",
"size": 22
},
"line-spacing": 1.2,
"space":
{
"before": 11,
"after": 11
}
},
"h2":
{
"font":
{
"default": "黑体",
"east-asia": "黑体",
"size": 18
},
"line-spacing": 1.2,
"space":
{
"before": 11,
"after": 11
}
},
"h3":
{
"font":
{
"default": "黑体",
"east-asia": "黑体",
"size": 14
},
"line-spacing": 1.2,
"space":
{
"before": 11,
"after": 11
}
},
"h4":
{
"font":
{
"default": "Times New Roman",
"east-asia": "楷体",
"size": 12,
"extra":
[
"bold"
]
},
"line-spacing": 1.2,
"space":
{
"before": 11,
"after": 11
}
},
"normal":
{
"font":
{
"default": "Times New Roman",
"east-asia": "宋体",
"size": 12,
"color": "000000"
},
"line-spacing": 1.3,
"space":
{
"before": 7,
"after": 7
}
}
}
================================================
FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/markdocx.py
================================================
from bisheng.common.utils.markdown_cmpnt.md_to_docx.config.default_style import style_conf
from bisheng.common.utils.markdown_cmpnt.md_to_docx.parser.md_parser import md2html
from bisheng.common.utils.markdown_cmpnt.md_to_docx.provider.docx_processor import DocxProcessor
class MarkDocx:
def __init__(self):
self.docx_processor = DocxProcessor(style_conf=style_conf)
def __call__(self, md_input: str):
"""
Convert markdown file to docx file
:param md_input:
:return:
"""
html_text = md2html(md_input)
# BuatdocxDoc.
docx_file_byte, title_text = self.docx_processor.html2docx(html_text)
return docx_file_byte, title_text
================================================
FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/parser/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/parser/ext_md_syntax.py
================================================
from markdown.inlinepatterns import SimpleTagInlineProcessor
from markdown.extensions import Extension
class ExtMdSyntax(Extension):
"""
Extended Format Parsing
"""
def extendMarkdown(self, md):
# ==With Highlighted Text==
md.inlinePatterns.register(SimpleTagInlineProcessor(r'()==(.+?)==', 'highlight'), 'highlight', 175)
# ~~Strikethrough~~
md.inlinePatterns.register(SimpleTagInlineProcessor(r'()~~(.+?)~~', 'strike'), 'strike', 2)
# ^Subscript and superscript^
md.inlinePatterns.register(SimpleTagInlineProcessor(r'()\^(.+?)\^', 'sup'), 'sup', 188)
# ~Subscript~
md.inlinePatterns.register(SimpleTagInlineProcessor(r'()~(.+?)~', 'sub'), 'sub', 1)
================================================
FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/parser/md_parser.py
================================================
import markdown
from bisheng.common.utils.markdown_cmpnt.md_to_docx.parser.ext_md_syntax import ExtMdSyntax
def md2html(in_md: str):
"""
Convert markdown file to html file
:param in_md:
:return:
"""
html = markdown.markdown(in_md, extensions=[ExtMdSyntax(), 'tables', 'sane_lists', 'fenced_code'])
return f"""\n\n{html}"""
================================================
FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/provider/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/provider/docx_plus.py
================================================
import docx
from docx.shared import RGBColor
from docx.enum.dml import MSO_THEME_COLOR_INDEX
def add_hyperlink(paragraph, url, text):
"""
Reference from:https://github.com/python-openxml/python-docx/issues/384
A function that places a hyperlink within a paragraph object.
:param paragraph: The paragraph we are adding the hyperlink to.
:param url: A string containing the required url
:param text: The text displayed for the url
:return: The hyperlink object
"""
# This gets access to the document.xml.rels file and gets a new relation id value
part = paragraph.part
r_id = part.relate_to(url, docx.opc.constants.RELATIONSHIP_TYPE.HYPERLINK, is_external=True)
# Create the w:hyperlink tag and add needed values
hyperlink = docx.oxml.shared.OxmlElement('w:hyperlink')
hyperlink.set(docx.oxml.shared.qn('r:id'), r_id, )
# Create a w:r element
new_run = docx.oxml.shared.OxmlElement('w:r')
# Create a new w:rPr element
rPr = docx.oxml.shared.OxmlElement('w:rPr')
# Join all the xml elements together add add the required text to the w:r element
new_run.append(rPr)
if text:
new_run.text = text
else:
new_run.text = url
# new_run.font.color.rgb = RGBColor(0,0,255)
hyperlink.append(new_run)
paragraph._p.append(hyperlink)
# paragraph.text = text
r = paragraph.add_run()
r._r.append(hyperlink)
# A workaround for the lack of a hyperlink style (doesn't go purple after using the link)
# Delete this if using a template that has the hyperlink style in it
r.font.color.theme_color = MSO_THEME_COLOR_INDEX.HYPERLINK
r.font.color.rgb = RGBColor(0, 0, 255)
r.font.underline = True
return hyperlink
================================================
FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/provider/docx_processor.py
================================================
# noinspection PyProtectedMember
#
import io
import re
from socket import socket
from urllib.error import HTTPError, URLError
from urllib.request import urlopen
from bs4 import BeautifulSoup
from docx import Document
from docx.enum.text import *
from docx.oxml import parse_xml
from docx.oxml.ns import nsdecls
from docx.shared import Inches, RGBColor, Pt
from docx.table import Table
from docx.text.paragraph import Paragraph
from docx.text.run import Run
from bisheng.common.utils.markdown_cmpnt.md_to_docx.provider.docx_plus import add_hyperlink
from bisheng.common.utils.markdown_cmpnt.md_to_docx.provider.style_manager import StyleManager
from bisheng.common.utils.markdown_cmpnt.md_to_docx.utils.style_enum import MDX_STYLE
class DocxProcessor:
def __init__(self, style_conf: dict, debug_state: bool = False, show_image_desc: bool = True):
"""
InisialisasiDocxProcessor
:param style_conf: Style Configuration Dictionary
:param debug_state: Whether to turn on debug mode
:param show_image_desc: Whether to display the description of the picture, i.e. `` II descThe contents of the
"""
self.document = Document()
self.debug_state = debug_state
self.show_image_desc = show_image_desc
if style_conf is not None:
StyleManager(self.document, style_conf).init_styles()
def debug(self, *args):
"""Debug Output"""
if self.debug_state:
print(*args)
# h1, h2, ...
def add_heading(self, content: str, tag: str):
level: int = int(tag.__getitem__(1))
p = self.document.add_paragraph(content, style="Heading%d" % level)
# Force title not pagination
p.paragraph_format.page_break_before = False
p.paragraph_format.keep_with_next = True
return p
def add_run(self, p: Paragraph, content: str, char_style: str = "plain"):
# fixme Sentences with more than one style in a row are ignored, such as:
# **Bold and*Italic*Underline again**
self.debug("[%s]:" % char_style, content)
run = p.add_run(content)
# Standardized label name - will be HTML5 Label mapping to standard styles
style_map = {
'b': 'strong', # -> Bold
'i': 'em', # -> Italic
'del': 'strike', # -> Strikethrough
'mark': 'highlight' # -> Gao Liang
}
char_style = style_map.get(char_style, char_style)
# Should not be used in the form of run.bold = (char_style=="strong") to be
# Because there is no explicit bolding, it does not mean that the whole paragraph is not bold.
if char_style == "strong":
run.bold = True
if char_style == "em":
run.italic = True
if char_style == "u":
run.underline = True
if char_style == "strike":
run.font.strike = True
if char_style == "sub":
run.font.subscript = True
if char_style == "sup":
run.font.superscript = True
run.font.highlight_color = WD_COLOR_INDEX.YELLOW if char_style == "highlight" else None
# if char_style == "code":
# run.font.name = "Consolas"
def add_code_block(self, pre_tag):
# TODO Code-Block Styles
# TODO Set the Chinese font in the code block (table), it seems that it can only be specified by Chinese fonts are styled to get there.
code_table = self.document.add_table(0, 1, style=MDX_STYLE.TABLE)
row_cells = code_table.add_row().cells
# Security check: Make sure the code block has content
if pre_tag.contents and len(pre_tag.contents) > 0 and pre_tag.contents[0].string:
code_text = pre_tag.contents[0].string.rstrip('\n')
run = row_cells[0].paragraphs[0].add_run(code_text)
run.font.name = "Consolas"
else:
# If the code block is empty, add a blank placeholder
run = row_cells[0].paragraphs[0].add_run("")
run.font.name = "Consolas"
def add_picture(self, img_tag, parent_paragraph: Paragraph = None):
"""
Adding Images to Documents
:param img_tag: Images Tab
:param parent_paragraph: Parent paragraph. If provided,Images will be embedded in the paragraph;Otherwise create a new standalone paragraph
"""
# If no parent paragraph is provided,Create a new standalone paragraph(Appear from center)
if parent_paragraph is None:
p: Paragraph = self.document.add_paragraph()
p.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
p.paragraph_format.first_line_indent = 0
else:
# Use provided parent paragraph(Embedded Mode)
p = parent_paragraph
run: Run = p.add_run()
img_src: str
scale: float = 100 # Highest priority, unit %
width_px: int = 100
height_px: int = 100
# Set width
if img_tag.get("style"):
style_content: str = img_tag["style"]
img_attr: list = style_content.strip().split(";")
# print(img_attr)
attr: str
for attr in img_attr:
if attr.find("width") != -1:
# TODO Medical Treatment: style Medium Width and Height Properties
width_px = int(re.findall(r"\d+", attr)[0])
if attr.find("height") != -1:
height_px = int(re.findall(r"\d+", attr)[0])
if attr.find("zoom") != -1:
scale = int(re.findall(r"\d+", attr)[0])
if img_tag["src"] != "":
img_src = img_tag["src"]
# webauthn
if img_src.startswith("http://") or img_src.startswith("https://"):
print("[IMAGE] fetching:", img_src)
try:
image_bytes = urlopen(img_src, timeout=10).read()
data_stream = io.BytesIO(image_bytes)
run.add_picture(data_stream, width=Inches(5.7 * scale / 100))
except HTTPError as e:
print(f"[HTTP ERROR] {e.code}: {img_src}")
except socket.timeout:
print(f"[TIMEOUT] Image load timeout: {img_src}")
except URLError as e:
print(f"[URL ERROR] Failed to fetch image: {e.reason} - {img_src}")
except Exception as e:
print(f"[RESOURCE ERROR] {type(e).__name__}: {e} - {img_src}")
else:
# Location Image
try:
run.add_picture(img_src, width=Inches(5.7 * scale / 100))
except FileNotFoundError:
print(f"[FILE ERROR] Image not found: {img_src}")
except Exception as e:
print(f"[RESOURCE ERROR] Failed to load image: {type(e).__name__}: {e} - {img_src}")
else:
# webauthn
img_src = img_tag["title"]
print("[IMAGE] fetching:", img_src)
try:
image_bytes = urlopen(img_src, timeout=10).read()
data_stream = io.BytesIO(image_bytes)
run.add_picture(data_stream, width=Inches(5.7 * scale / 100))
except HTTPError as e:
print(f"[HTTP ERROR] {e.code}: {img_src}")
except socket.timeout:
print(f"[TIMEOUT] Image load timeout: {img_src}")
except URLError as e:
print(f"[URL ERROR] Failed to fetch image: {e.reason} - {img_src}")
except Exception as e:
print(f"[RESOURCE ERROR] {type(e).__name__}: {e} - {img_src}")
# If you choose to display an image description, the description will appear below the image
# Note: Add descriptions only in standalone paragraph mode(Avoid interrupting paragraph flow)
if parent_paragraph is None and self.show_image_desc and img_tag.get("alt"):
# TODO Display style for image description
desc: Paragraph = self.document.add_paragraph(img_tag["alt"], style=MDX_STYLE.CAPTION)
desc.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
desc.style.font.color.rgb = RGBColor(11, 11, 11)
desc.style.font.bold = False
desc.paragraph_format.first_line_indent = 0
def add_table(self, table_root):
# Number of statistical columns - Preferred From thead Fetch, otherwise from tbody Get on the first line
col_count: int = 0
has_thead = False
if table_root.thead and table_root.thead.tr:
has_thead = True
for col in table_root.thead.tr.contents:
if col.name in ['th', 'td']:
col_count += 1
elif table_root.tbody:
# FROM tbody Number of columns in the first row
first_row = table_root.tbody.find('tr')
if first_row:
for col in first_row.contents:
if col.name in ['th', 'td']:
col_count += 1
if col_count == 0:
# Fault tolerance: if the number of columns is not found, the default is1
col_count = 1
table = self.document.add_table(0, col_count, style=MDX_STYLE.TABLE) # TODO Table Style
# Table header row (if present)
if has_thead:
head_row_cells = table.add_row().cells
i = 0
for col in table_root.thead.tr.contents:
if col.name in ['th', 'td']:
cell_text = col.get_text(strip=True)
head_row_cells[i].paragraphs[0].add_run(cell_text).bold = True
i += 1
# Data Line
if table_root.tbody:
for tr in table_root.tbody:
if tr.name != 'tr':
continue
row_cells = table.add_row().cells
i = 0
for td in tr.contents:
if td.name in ['th', 'td']:
cell_text = td.get_text(strip=True)
row_cells[i].text = cell_text
i += 1
def add_number_list(self, number_list):
# print(number_list.contents, "\n")
for item in number_list.children:
if item.name != 'li': # Skip non- li label
continue
# Get direct text content(Exclude subtags)
direct_text = ''.join([str(s) for s in item.find_all(text=True, recursive=False)]).strip()
# Check if there are paragraph tags
has_paragraph_tag = item.find('p') is not None
# If there is direct text,Add your paragraph
if direct_text:
self.add_paragraph(item, p_style=MDX_STYLE.LIST_NUMBER) \
.style.paragraph_format.space_after = Pt(1) # TODO Number List Style
# If there is no direct text but there is label,Medical Treatment: label
elif has_paragraph_tag:
para_count = 0
for child in item.children:
if hasattr(child, 'name') and child.name == 'p':
if para_count == 0:
# first Use list style
self.add_paragraph(child, p_style=MDX_STYLE.LIST_NUMBER) \
.style.paragraph_format.space_after = Pt(1)
else:
# Additional Use continuation style
self.add_paragraph(child, p_style=MDX_STYLE.LIST_CONTINUE) \
.style.paragraph_format.space_after = Pt(1)
para_count += 1
# Working with Nested Ordered Lists
if hasattr(item, "ol") and item.ol is not None:
sub_num: int = 1 # Sub-Serial Number
for item2 in item.ol.children:
if item2.name != 'li':
continue
self.add_paragraph(item2, prefix="(%d). " % sub_num, p_style=MDX_STYLE.LIST_CONTINUE) \
.style.paragraph_format.first_line_indent = 0 # TODO Number List Style
sub_num += 1
# Working with Nested Unordered Lists
if hasattr(item, "ul") and item.ul is not None:
for item2 in item.ul.children:
if item2.name != 'li':
continue
self.add_paragraph(item2, prefix="• ", p_style=MDX_STYLE.LIST_CONTINUE) \
.style.paragraph_format.space_after = Pt(1)
def add_bullet_list(self, bullet_list):
# It may be. list
text = str(bullet_list.contents[1].string).strip()
if text.startswith("[ ]") or text.startswith("[x]"):
self.add_todo_list(bullet_list)
return
for item in bullet_list.children:
if item.name != 'li': # Skip non- li label
continue
# Get direct text content(Exclude subtags)
direct_text = ''.join([str(s) for s in item.find_all(text=True, recursive=False)]).strip()
# Check if there are paragraph tags
has_paragraph_tag = item.find('p') is not None
# If there is direct text,Add your paragraph
if direct_text:
self.add_paragraph(item, p_style=MDX_STYLE.LIST_BULLET) \
.style.paragraph_format.space_after = Pt(1)
# If there is no direct text but there is label,Medical Treatment: label
elif has_paragraph_tag:
para_count = 0
for child in item.children:
if hasattr(child, 'name') and child.name == 'p':
if para_count == 0:
# first Use list style
self.add_paragraph(child, p_style=MDX_STYLE.LIST_BULLET) \
.style.paragraph_format.space_after = Pt(1)
else:
# Additional Use continuation style
self.add_paragraph(child, p_style=MDX_STYLE.LIST_CONTINUE) \
.style.paragraph_format.space_after = Pt(1)
para_count += 1
# Medical Treatment: ul Above listings
if hasattr(item, "ul") and item.ul is not None:
for item2 in item.ul.children:
if item2.string == "\n" or (not item2.string):
continue
self.add_paragraph(item2, prefix="• ", p_style=MDX_STYLE.LIST_CONTINUE) \
.style.paragraph_format.space_after = Pt(1)
# Medical Treatment: ol Above listings
if hasattr(item, "ol") and item.ol is not None:
# read out start Property,If not present, defaults to1
sub_num = int(item.ol.get('start', 1))
for item2 in item.ol.children:
if item2.name != 'li':
continue
self.add_paragraph(item2, prefix=f"{sub_num}. ", p_style=MDX_STYLE.LIST_CONTINUE) \
.style.paragraph_format.space_after = Pt(1)
sub_num += 1
# falseTODO list
def add_todo_list(self, todo_list):
# list_para.style.font.name = "Consolas"
for item in todo_list.children:
if item.string == "\n" or (not item.string):
continue
text: str = item.string
list_para = self.document.add_paragraph(style=MDX_STYLE.PLAIN_LIST)
if text.startswith("[x]"):
list_para.add_run("[ √ ]").font.name = "Consolas"
list_para.add_run(text.replace("[x]", " ", 1))
elif text.startswith("[ ]"):
list_para.add_run("[ ]").font.name = "Consolas"
list_para.add_run(text.replace("[ ]", " ", 1))
# Split Lines
def add_split_line(self):
p = self.document.add_paragraph()
p.paragraph_format.space_before = Pt(6)
p.paragraph_format.space_after = Pt(6)
border_elm = parse_xml(
r''.format(nsdecls('w')))
p._p.get_or_add_pPr().append(border_elm)
# Hyperlinks
def add_link(self, p: Paragraph, text: str, href: str):
self.debug("[link]:", text, "[href]:", href)
add_hyperlink(p, href, text)
# run = p.add_run(text)
def add_paragraph(self, children, p_style: str = None, prefix: str = ""):
"""
children: list|str
An element (including an image) within a paragraph. Divided according to whether there is a style, forming a list.
There are style text such as bold, italics, images, etc.
As`I am plain _while_ he is **bold**`will be converted to:
["I am plain", "while", "he is", "bold"]
"""
p = self.document.add_paragraph(prefix, style=p_style)
if type(children) == str:
p.add_run(children)
return p
for elem in children.contents: # Traverse all elements in a paragraph
if elem.name == "a":
self.add_link(p, elem.string, elem["href"])
elif elem.name == "img":
self.add_picture(elem, parent_paragraph=p) # Pass the current paragraph
elif elem.name is not None: # Substring with character style
self.add_run(p, elem.string, elem.name)
elif not elem.string == "\n": # Substring without character style
self.add_run(p, elem)
return p
# from docx.enum.style import WD_STYLE
def add_blockquote(self, children):
# TODO Place Blockquote on1x1In the table, optimize the display effect of the reference block
# Set left indent, up and down spacing
table: Table = self.document.add_table(0, 1)
row_cells = table.add_row().cells
# Supports multiple paragraphs
para_count = 0
for child in children.contents:
# Skip line breaks
if isinstance(child, str) and child.strip() == "":
continue
# Working with paragraph tags
if hasattr(child, 'name') and child.name == 'p':
if para_count > 0:
# Add a new passage
row_cells[0].add_paragraph()
p = row_cells[0].paragraphs[para_count]
for elem in child.contents: # Traverse all elements in a paragraph
if elem.name == "a":
self.add_link(p, elem.string, elem["href"])
elif elem.name == "img":
self.add_picture(elem, parent_paragraph=p) # Pass the current paragraph
elif elem.name is not None: # Substring with character style
self.add_run(p, elem.string, elem.name)
elif elem.string and elem.string != "\n": # Substring without character style
self.add_run(p, elem.string)
para_count += 1
# Working with Direct Text Nodes
elif isinstance(child, str) and child.strip():
if para_count == 0:
p = row_cells[0].paragraphs[0]
para_count = 1
else:
p = row_cells[0].add_paragraph()
para_count += 1
p.add_run(child.strip())
shading_elm_1 = parse_xml(r''.format(nsdecls('w')))
table.rows[0].cells[0]._tc.get_or_add_tcPr().append(shading_elm_1)
def html2docx(self, html_str: str):
# OpenHTML
soup = BeautifulSoup(html_str, 'html.parser')
# Find it securely body label
body_tag = soup.find('body')
if body_tag is None:
# If no evidence of microbial body,Use entire soup
body_tag = soup
# Title
title_text = ""
# parse the labels one by one and writewordII
for root in body_tag.children:
# Skip plain text nodes and line breaks
if isinstance(root, str):
if root.strip():
# Working with Direct Text Nodes
self.document.add_paragraph(root.strip(), style=MDX_STYLE.PLAIN_TEXT)
continue
# debug("<%s>" % root.name)
if root.name == "p": # Normal paragraph
self.add_paragraph(root, p_style=MDX_STYLE.PLAIN_TEXT)
elif root.name == "blockquote": # Blockquote
self.add_blockquote(root)
elif root.name == "ol": # Numbered
self.add_number_list(root)
elif root.name == "ul": # Unordered List OR List
self.add_bullet_list(root)
elif root.name == "table": # Table Filter
self.add_table(root)
elif root.name == "hr":
self.add_split_line()
elif root.name == "pre":
self.add_code_block(root)
elif root.name in ["h1", "h2", "h3", "h4", "h5", "h6"]:
if title_text == "":
title_text = root.string or ""
self.add_heading(root.string or "", root.name)
docx_bytes = io.BytesIO()
self.document.save(docx_bytes)
docx_bytes.seek(0)
return docx_bytes.getbuffer(), title_text
================================================
FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/provider/simple_style.py
================================================
import docx
from docx.enum.style import WD_STYLE_TYPE
# Chinese Font Size Conversion pt THE METHOD
def _zihao_to_pt(chn_name: str):
chn_name = chn_name.strip()
pt_mapping = {
"No. 1": 42,
"Little Primary": 36,
"No. 1": 26,
"Little Yi": 24,
"No. 2": 22,
"Second": 18,
"Number three": 16,
"Little San": 15,
"No. 4": 14,
"Shikama": 12,
"No. 5": 10.5,
"Xiao Wu": 9,
"No. 6": 7.5,
"Little Six": 6.5,
"No. 7": 5.5,
"No. 8": 5,
}
if pt_mapping.get(chn_name):
return pt_mapping[chn_name]
else:
print("[YAML ERROR]:", chn_name,
"Not a canonical title.(In the Chinese context, the largest font size is'No. 1', the minimum is'No. 8')。")
class SimpleStyle:
style_name: str
base_style_name: str
style_type: WD_STYLE_TYPE = WD_STYLE_TYPE.PARAGRAPH
font_default: str = "Times New Roman"
font_east_asia: str = "Song Ti"
font_size: float = 14
font_color: str = "000000"
font_bold: bool = False
font_italic: bool = False
font_underline: bool = False
font_strike: bool = False
first_line_indent: int = 0
line_spacing: int = 1
space_before: int = 0
space_after: int = 0
def __init__(self,
style_name: str, # Style name
base_style_name: str, # Styles based on
conf: dict, # Specific style data fromyamlDeserialized
style_type: docx.enum.style = WD_STYLE_TYPE.PARAGRAPH # Is it a paragraph or a list or some other type
):
self.style_name = style_name
self.base_style_name = base_style_name
self.style_type = style_type
try:
self.font_default = conf["font"]["default"]
self.font_east_asia = conf["font"]["east-asia"]
if str(conf["font"]["size"]).isdigit():
self.font_size = conf["font"]["size"]
else: # If the font size is given in Chinese, convert it
self.font_size = _zihao_to_pt(conf["font"]["size"])
except KeyError:
print("[YAML ERROR]:", style_name,
"| Error occurred in setting font style. Set to:",
self.font_default, self.font_east_asia, str(self.font_size) + "pt")
# Check when color is specified, do not specify default black
if conf["font"].get("color") is not None:
try:
if type(conf["font"]["color"]) != str \
or len(conf["font"]["color"]) != 6:
raise TypeError
# Try to convert to16binary number and whether it matchesRGBsize
hex_num = int(conf["font"]["color"], 16)
if 0 <= hex_num <= 0xFFFFFF:
self.font_color = str(conf["font"]["color"])
else:
raise ValueError
except ValueError:
print("[YAML ERROR]:", style_name,
"| Value of color isn't a hex or out of [000000, FFFFFF].",
"Default to black(000000).")
except TypeError:
print("[YAML ERROR]:", style_name, "| Value of color must be string with 6 characters.",
"Default to black(000000).")
# Bold, Italic, Underline, Strikeout
if conf.get("font").get("extra"):
# print(conf["font"]["extra"])
self.font_bold = "bold" in (conf["font"]["extra"])
self.font_italic = "italic" in list(conf["font"]["extra"])
self.font_underline = "underline" in list(conf["font"]["extra"])
self.font_strike = "strike" in list(conf["font"]["extra"])
if conf.get("first-line-indent"):
self.first_line_indent = conf["first-line-indent"]
if conf.get("line-spacing"):
self.line_spacing = conf["line-spacing"]
if conf.get("space"):
if conf.get("space").get("before"):
self.space_before = conf["space"]["before"]
if conf.get("space").get("after"):
self.space_after = conf["space"]["after"]
def __str__(self) -> str:
return "".join(str(i) for i in (
self.style_name, " ",
self.font_default, " ",
self.font_east_asia, " ",
self.font_size, " ",
self.font_color, " ",
"space:(", self.space_before, " ", self.space_after, ") ",
"bold-", self.font_bold, " ",
"italic-", self.font_italic, " ",
"underline-", self.font_underline, " ",
"strike-", self.font_strike
))
================================================
FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/provider/style_manager.py
================================================
import docx
from docx import Document
from docx.oxml.ns import qn
from docx.shared import Inches, RGBColor, Pt
from docx.styles.style import _ParagraphStyle, BaseStyle
from docx.enum.style import WD_STYLE_TYPE
from docx.styles.styles import Styles
from bisheng.common.utils.markdown_cmpnt.md_to_docx.provider.simple_style import SimpleStyle
from bisheng.common.utils.markdown_cmpnt.md_to_docx.utils.style_enum import MDX_STYLE
class StyleManager:
def __init__(self, doc: Document, yaml_conf: dict):
self.styles: Styles = doc.styles
self.style_conf = yaml_conf
def init_styles(self):
# Pengaturanheading 1~4
for i in range(1, 5):
s = SimpleStyle("Heading%d" % i, "Heading %d" % i,
self.style_conf["h%d" % i])
self.set_style(s)
# TODO What other styling settings are there?
# CaptionsCaptionTable Style(?)
# s = SimpleStyle("Normal", "Normal", self.style_conf["normal"])
s = SimpleStyle(MDX_STYLE.PLAIN_TEXT, "Normal", self.style_conf["normal"])
self.set_style(s)
# General style settings
def set_style(self, _style: SimpleStyle):
new_style: _ParagraphStyle
if _style.style_name not in self.styles:
new_style: _ParagraphStyle = self.styles.add_style(_style.style_name, _style.style_type)
new_style.base_style = self.styles[_style.base_style_name]
else:
new_style = self.styles[_style.style_name]
new_style.quick_style = True
# ##### Font Related #####
# Set font, color, size
new_style.font.name = _style.font_default # Set onlynameIs Set Western Font
new_style.font.size = Pt(_style.font_size)
new_style._element.rPr.rFonts.set(qn('w:eastAsia'), _style.font_east_asia) # To set additional Chinese fonts
new_style.font.color.rgb = RGBColor.from_string(_style.font_color)
# Bold, Italic, Underline, Strikeout
new_style.font.bold = _style.font_bold
new_style.font.italic = _style.font_italic
new_style.font.underline = _style.font_underline
new_style.font.strike = _style.font_strike
# ##### Paragraph Related #####
# Set indent, before paragraph/Space after paragraph, line spacing between paragraphs
new_style.paragraph_format.first_line_indent = (Pt(_style.font_size) * int(_style.first_line_indent))
new_style.paragraph_format.space_before = Pt(_style.space_before)
new_style.paragraph_format.space_after = Pt(_style.space_after)
new_style.paragraph_format.line_spacing = _style.line_spacing
# ##### Other _________ #####
# Remove the black dot in the top left corner before the paragraph
new_style.paragraph_format.keep_together = False
# Header Style Retention keep_with_next are True, avoid separate pagination of titles
if not _style.style_name.startswith("Heading"):
new_style.paragraph_format.keep_with_next = False
# Title does not precede pagination
if _style.style_name.startswith("Heading"):
new_style.paragraph_format.page_break_before = False
# Show on shortcut style window
new_style.quick_style = True
return
================================================
FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/utils/__init__.py
================================================
================================================
FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/utils/style_enum.py
================================================
class MDX_STYLE:
PLAIN_TEXT = "Normal"
PLAIN_LIST = "List"
LIST_NUMBER = "List Number"
LIST_CONTINUE = "List Continue"
LIST_BULLET = "List Bullet"
BLOCKQUOTE = "Quote"
HEADING = "Heading"
TABLE = "Table Grid"
CAPTION = "Caption"
================================================
FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/utils/yaml_utils.py
================================================
import yaml
from yaml import FullLoader
def read_style_yaml(path: str) -> dict:
with open(path, "r", encoding="utf-8") as file:
return yaml.load(file, FullLoader)
================================================
FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_pdf.py
================================================
"""
Typora Style Markdown Transfer PDF Converter
Use Playwright (Chromium) will be HTML Render As PDF Professional Markdown Transfer PDF Exporter
Support Typora of style styles and mathematical expressions MathJax rendered
Feature:
- Pass Headless Chromium will be Markdown Convert file or string to stylized PDF
- Contains the default Typora Style CSS Styles
- Supports customization CSS Override
- MathJax Integration for LaTeX Mathematical rendering
- Configurable page formatting and margins
- Robust error handling and resource management
dependent:
pip install playwright markdown
playwright install chromium
Usage Sample:
from to_pdf import MarkdownToPdfConverter
converter = MarkdownToPdfConverter()
converter.convert_file("README.md.md", "output.pdf")
"""
import logging
import os
import tempfile
from pathlib import Path
from typing import Optional, Union
from bisheng.common.utils.markdown_cmpnt.md_to_docx.parser.ext_md_syntax import ExtMdSyntax
logger = logging.getLogger(__name__)
# Dependent Import and Error Handling
try:
import markdown
except ImportError as e:
logger.error("Required dependency is missing: %s", e)
raise ImportError("Please Install 'markdown' Package: pip install markdown") from e
try:
from playwright.sync_api import sync_playwright
PLAYWRIGHT_AVAILABLE = True
except ImportError:
PLAYWRIGHT_AVAILABLE = False
logger.warning("Playwright Not available. Please install: pip install playwright && playwright install chromium")
DEFAULT_CSS = r"""
top: 6px;
font-size: 9px;
color: var(--muted-color);
background: transparent;
}
/* Tables */
table {
width: 100%;
border-collapse: collapse;
margin: 0 0 0.9em 0;
font-size: 11pt;
}
th, td {
border: 1px solid #e6ecf0;
padding: 8px 10px;
text-align: left;
}
th { background: #fafbfc; font-weight: 600; }
/* Images */
img { max-width: 100%; height: auto; display: block; margin: 0.5em 0; }
/* Caption support (if markdown-to-html generator provides figure/figcaption) */
figure { margin: 0 0 0.9em 0; }
figcaption { font-size: 10pt; color: var(--muted-color); text-align: center; margin-top: 0.35em; }
/* Table of contents (toc) */
.toc {
margin: 0 0 1em 0;
padding-left: 0;
list-style: none;
}
.toc li { margin: 0.25em 0; }
.toc a { color: var(--accent-color); }
/* Footnotes */
.footnotes { font-size: 10pt; border-top: 1px dashed var(--hr-color); margin-top: 1em; padding-top: 0.6em; }
.footnotes li { margin: 0.4em 0; }
/* Page break helpers */
.page-break { page-break-after: always; }
.page-break-before { page-break-before: always; }
/* Fixed header/footer for printing — Chromium will include them in the page content when using print() */
.header, .footer {
display: block;
position: fixed;
left: 0; right: 0;
color: var(--muted-color);
font-size: 9pt;
padding: 6px 12mm;
}
.header { top: 0; }
.footer { bottom: 0; }
.footer .page-number::after { content: counter(page); }
/* Print-specific rules */
@media print {
body { background: white; }
/* Hide interactive elements if present */
a[href]:after { content: ""; }
/* Avoid background colors bleeding if printer doesn't support it */
* { -webkit-print-color-adjust: exact; }
}
/* Small-screen fallback (not usually needed for print) */
@media screen and (max-width: 800px) {
#content { padding: 16px; }
}
/* MathJax tweaks */
.mjx-svg-href { vertical-align: middle; }
/* Accessibility tweaks */
:focus { outline: 2px dashed rgba(3,102,214,0.35); outline-offset: 2px; }
/* Utility classes */
.center { text-align: center; }
.right { text-align: right; }
.small { font-size: 10pt; color: var(--muted-color); }
/* End of CSS */
"""
MATHJAX_SNIPPET = r"""
"""
HTML_TEMPLATE = r"""
{mathjax}
{body}
"""
class MarkdownToPdfError(Exception):
"""Markdown Transfer PDF Conversion error custom exception."""
pass
class MarkdownToPdfConverter:
"""
Has Typora The power of style rendering Markdown Transfer PDF Converter
Such provision will Markdown Convert file or string to PDF short circuit exist.
Use Playwright Render and include comprehensive error handling.
"""
SUPPORTED_PAGE_FORMATS = {'A4', 'A3', 'A5', 'Letter', 'Legal', 'Tabloid'}
DEFAULT_MARKDOWN_EXTENSIONS = [ExtMdSyntax(), 'extra', 'codehilite', 'toc', 'tables', 'sane_lists', 'fenced_code']
DEFAULT_TIMEOUT = 60000 # ms
def __init__(self,
default_css: Optional[str] = None,
enable_math: bool = False,
page_format: str = 'A4',
margin_mm: int = 20):
"""
Initializes the converter with default settings.
Args:
default_css: Used instead of built-in Typora Custom Default for Styles CSS
enable_math: enabled MathJax Math expression support
page_format: Default page format (A4, A3, A5, Letter, Legal, Tabloid)
margin_mm: Default margin (mm)
Raises:
MarkdownToPdfError: Automatically close purchase order after Playwright Unavailable or invalid parameters
"""
if not PLAYWRIGHT_AVAILABLE:
raise MarkdownToPdfError(
'Playwright Not installed. Please install: pip install playwright && playwright install chromium'
)
if page_format not in self.SUPPORTED_PAGE_FORMATS:
raise MarkdownToPdfError(
f'Unsupported page format: {page_format}Supported Formats: {self.SUPPORTED_PAGE_FORMATS}'
)
if not isinstance(margin_mm, (int, float)) or margin_mm < 0:
raise MarkdownToPdfError('Margins must be non-negative')
self.default_css = default_css or DEFAULT_CSS
self.enable_math = enable_math
self.page_format = page_format
self.margin_mm = margin_mm
logger.info("MarkdownToPdfConverter Initialized, Format=%s Margin=%dmm",
page_format, margin_mm)
def _validate_input_path(self, file_path: Union[str, Path]) -> Path:
"""Validate input file path and go back Path of research."""
path = Path(file_path)
if not path.exists():
raise MarkdownToPdfError(f'This input file does not exist.: {path}')
if not path.is_file():
raise MarkdownToPdfError(f'Input path is not a file: {path}')
if not path.suffix.lower() in {'.md', '.markdown', '.txt'}:
logger.warning("Input file not available markdown extension: %s", path.suffix)
return path
def _validate_output_path(self, file_path: Union[str, Path]) -> Path:
"""Verify the output file path and make sure the directory exists."""
path = Path(file_path)
# Make sure the parent directory exists
path.parent.mkdir(parents=True, exist_ok=True)
if path.suffix.lower() != '.pdf':
logger.warning("Output file not available .pdf extension: %s", path.suffix)
return path
def _load_css_file(self, css_path: Union[str, Path]) -> str:
"""Load from file CSS Content with error handling."""
try:
css_file = Path(css_path)
if not css_file.exists():
raise MarkdownToPdfError(f'CSS File don\'t exists: {css_file}')
with open(css_file, 'r', encoding='utf-8') as f:
css_content = f.read().strip()
if not css_content:
logger.warning("CSS File is empty: %s", css_file)
return css_content
except (OSError, UnicodeDecodeError) as e:
raise MarkdownToPdfError(f'read out CSS Doc. {css_path} Kalah: {e}') from e
def render_markdown_to_html(self,
markdown_text: str,
custom_css: Optional[str] = None,
enable_math: Optional[bool] = None) -> str:
"""
will be Markdown Convert text to with style and MathJax Supportive HTML。
Args:
markdown_text: To be converted Markdown Contents
custom_css: Optional customizations CSSfor overriding default styles
enable_math: Mathematical support for overriding instance settings
Returns:
Available for PDF Conversion Complete HTML Documentation
Raises:
MarkdownToPdfError: Automatically close purchase order after Markdown Failed to Process
"""
if not isinstance(markdown_text, str):
raise MarkdownToPdfError('Markdown Text must be a string')
if not markdown_text.strip():
logger.warning("SERVICES Markdown Konten kosong")
try:
# Using the extension will Markdown Convert To HTML
html_body = markdown.markdown(
markdown_text,
extensions=self.DEFAULT_MARKDOWN_EXTENSIONS
)
# OK CSS And MathJax Pengaturan
css_content = custom_css or self.default_css
use_math = enable_math if enable_math is not None else self.enable_math
math_snippet = MATHJAX_SNIPPET if use_math else '\n'
# Generate full HTML Documentation
html_document = HTML_TEMPLATE.format(
css=css_content,
mathjax=math_snippet,
body=html_body
)
logger.debug("Success will %d character (s) of Markdown Convert To HTML", len(markdown_text))
return html_document
except Exception as e:
raise MarkdownToPdfError(f'will be Markdown Render As HTML Kalah: {e}') from e
def convert_html_to_pdf(self,
html_content: str,
output_path: Union[str, Path],
page_format: Optional[str] = None,
margin_mm: Optional[int] = None) -> None:
"""
Use Playwright will be HTML Convert content to PDF。
Args:
html_content: To be converted HTML Contents
output_path: PDF SAVE PATH
page_format: Override default page formatting
margin_mm: Override default margin
Raises:
MarkdownToPdfError: Automatically close purchase order after PDF failed to transform
"""
if not isinstance(html_content, str) or not html_content.strip():
raise MarkdownToPdfError('HTML Content cannot be empty')
output_file = self._validate_output_path(output_path)
format_to_use = page_format or self.page_format
margin_to_use = margin_mm if margin_mm is not None else self.margin_mm
if format_to_use not in self.SUPPORTED_PAGE_FORMATS:
raise MarkdownToPdfError(f'Unsupported page format: {format_to_use}')
# Create Temporary HTML Doc.
temp_html_path = None
try:
with tempfile.NamedTemporaryFile(
mode='w',
suffix='.html',
delete=False,
encoding='utf-8'
) as temp_file:
temp_html_path = temp_file.name
temp_file.write(html_content)
logger.debug("Temporary Created HTML Doc.: %s", temp_html_path)
# Use Playwright Convert To PDF
self._render_pdf_with_playwright(temp_html_path, output_file, format_to_use, margin_to_use)
logger.info("Slider Created Successfully. PDF: %s", output_file)
except Exception as e:
raise MarkdownToPdfError(f'will be HTML Convert To PDF Kalah: {e}') from e
finally:
# Clean Up Temp Files
if temp_html_path and os.path.exists(temp_html_path):
try:
os.unlink(temp_html_path)
logger.debug("Temporary files cleaned: %s", temp_html_path)
except OSError as e:
logger.warning("Clean Up Temp Files %s Kalah: %s", temp_html_path, e)
def convert_html_to_pdf_bytes(self,
html_content: str,
page_format: Optional[str] = None,
margin_mm: Optional[int] = None) -> bytes:
"""
Use Playwright will be HTML Convert content to PDF Bytes of data.
Args:
html_content: To be converted HTML Contents
page_format: Override default page formatting
margin_mm: Override default margin
Returns:
PDF Bytes data of the file
Raises:
MarkdownToPdfError: Automatically close purchase order after PDF failed to transform
"""
if not isinstance(html_content, str) or not html_content.strip():
raise MarkdownToPdfError('HTML Content cannot be empty')
format_to_use = page_format or self.page_format
margin_to_use = margin_mm if margin_mm is not None else self.margin_mm
if format_to_use not in self.SUPPORTED_PAGE_FORMATS:
raise MarkdownToPdfError(f'Unsupported page format: {format_to_use}')
# Create Temporary HTML Doc.
temp_html_path = None
try:
with tempfile.NamedTemporaryFile(
mode='w',
suffix='.html',
delete=False,
encoding='utf-8'
) as temp_file:
temp_html_path = temp_file.name
temp_file.write(html_content)
logger.debug("Temporary Created HTML Doc.: %s", temp_html_path)
# Use Playwright Convert To PDF Bytes of data
pdf_bytes = self._render_pdf_bytes_with_playwright(temp_html_path, format_to_use, margin_to_use)
logger.debug("Successfully Generated! PDF bytes data, size: %d bytes", len(pdf_bytes))
return pdf_bytes
except Exception as e:
raise MarkdownToPdfError(f'will be HTML Convert To PDF Byte Data Failure: {e}') from e
finally:
# Clean Up Temp Files
if temp_html_path and os.path.exists(temp_html_path):
try:
os.unlink(temp_html_path)
logger.debug("Temporary files cleaned: %s", temp_html_path)
except OSError as e:
logger.warning("Clean Up Temp Files %s Kalah: %s", temp_html_path, e)
def _render_pdf_with_playwright(self,
html_file_path: str,
output_path: Path,
page_format: str,
margin_mm: int) -> None:
"""Medical Treatment: Playwright PDF The internal method of the build."""
try:
with sync_playwright() as playwright:
browser = playwright.chromium.launch()
try:
page = browser.new_page()
file_url = f'file:///{html_file_path.replace(os.sep, "/")}'
logger.debug("Load in browser HTML: %s", file_url)
page.goto(file_url, timeout=self.DEFAULT_TIMEOUT)
# If enabled MathJax, waiting for typesetting to complete
if self.enable_math:
self._wait_for_mathjax(page)
# Build with specified settings PDF
margin_config = {
'top': f'{margin_mm}mm',
'bottom': f'{margin_mm}mm',
'left': f'{margin_mm}mm',
'right': f'{margin_mm}mm'
}
page.pdf(
path=str(output_path),
format=page_format,
margin=margin_config,
print_background=True
)
finally:
browser.close()
except Exception as e:
raise MarkdownToPdfError(f'Playwright PDF Generation Failed: {e}') from e
def _render_pdf_bytes_with_playwright(self,
html_file_path: str,
page_format: str,
margin_mm: int) -> bytes:
"""Medical Treatment: Playwright PDF Internal method for byte data generation."""
try:
with sync_playwright() as playwright:
browser = playwright.chromium.launch()
try:
page = browser.new_page()
file_url = f'file:///{html_file_path.replace(os.sep, "/")}'
logger.debug("Load in browser HTML: %s", file_url)
page.goto(file_url, timeout=self.DEFAULT_TIMEOUT)
# If enabled MathJax, waiting for typesetting to complete
if self.enable_math:
self._wait_for_mathjax(page)
# Build with specified settings PDF Bytes of data
margin_config = {
'top': f'{margin_mm}mm',
'bottom': f'{margin_mm}mm',
'left': f'{margin_mm}mm',
'right': f'{margin_mm}mm'
}
pdf_bytes = page.pdf(
format=page_format,
margin=margin_config,
print_background=True
)
return pdf_bytes
finally:
browser.close()
except Exception as e:
raise MarkdownToPdfError(f'Playwright PDF Byte data generation failed: {e}') from e
def _wait_for_mathjax(self, page) -> None:
"""Menunggu MathJax Finish typography with timeout."""
try:
logger.debug("Menunggu MathJax Format...")
page.wait_for_function(
"() => window.MathJax && window.MathJax.typesetPromise",
timeout=self.DEFAULT_TIMEOUT
)
page.evaluate("() => window.MathJax && window.MathJax.typesetPromise()")
logger.debug("MathJax Typography complete")
except Exception as e:
logger.debug("MathJax Timeout or non-existent (this is normal): %s", e)
def convert_file(self,
input_path: Union[str, Path],
output_path: Union[str, Path],
css_file: Optional[Union[str, Path]] = None,
**kwargs) -> None:
"""
will be Markdown Convert file to PDF。
Args:
input_path: Masukkan Markdown FilePath
output_path: Output PDF FilePath
css_file: Optional customizations CSS FilePath
**kwargs: Add Ons (page_format, margin_mm, enable_math)
Raises:
MarkdownToPdfError: If the conversion fails
"""
input_file = self._validate_input_path(input_path)
try:
# read out Markdown Contents
with open(input_file, 'r', encoding='utf-8') as f:
markdown_content = f.read()
logger.info("FROM %s read %d characters", input_file, len(markdown_content))
# If customization is provided CSS, then load
custom_css = None
if css_file:
custom_css = self._load_css_file(css_file)
logger.info("FROM %s Customization loaded CSS", css_file)
# Convert To PDF
self.convert_string(markdown_content, output_path, custom_css, **kwargs)
except (OSError, UnicodeDecodeError) as e:
raise MarkdownToPdfError(f'Read input file {input_file} Kalah: {e}') from e
def convert_string(self,
markdown_text: str,
output_path: Union[str, Path],
custom_css: Optional[str] = None,
**kwargs) -> None:
"""
will be Markdown Convert string to PDF。
Args:
markdown_text: Markdown String content
output_path: Output PDF FilePath
custom_css: Optional customizations CSS Contents
**kwargs: Add Ons (page_format, margin_mm, enable_math)
Raises:
MarkdownToPdfError: If the conversion fails
"""
try:
# will be Markdown Render As HTML
html_content = self.render_markdown_to_html(
markdown_text,
custom_css=custom_css,
enable_math=kwargs.get('enable_math')
)
# will be HTML Convert To PDF
self.convert_html_to_pdf(
html_content,
output_path,
page_format=kwargs.get('page_format'),
margin_mm=kwargs.get('margin_mm')
)
except MarkdownToPdfError:
raise
except Exception as e:
raise MarkdownToPdfError(f'failed to transform: {e}') from e
def convert_file_to_bytes(self,
input_path: Union[str, Path],
css_file: Optional[Union[str, Path]] = None,
**kwargs) -> bytes:
"""
will be Markdown Convert file to PDF Bytes of data.
Args:
input_path: Masukkan Markdown FilePath
css_file: Optional customizations CSS FilePath
**kwargs: Add Ons (page_format, margin_mm, enable_math)
Returns:
PDF Bytes data of the file
Raises:
MarkdownToPdfError: If the conversion fails
"""
input_file = self._validate_input_path(input_path)
try:
# read out Markdown Contents
with open(input_file, 'r', encoding='utf-8') as f:
markdown_content = f.read()
logger.info("FROM %s read %d characters", input_file, len(markdown_content))
# If customization is provided CSS, then load
custom_css = None
if css_file:
custom_css = self._load_css_file(css_file)
logger.info("FROM %s Customization loaded CSS", css_file)
# Convert To PDF Bytes of data
return self.convert_string_to_bytes(markdown_content, custom_css, **kwargs)
except (OSError, UnicodeDecodeError) as e:
raise MarkdownToPdfError(f'Read input file {input_file} Kalah: {e}') from e
def convert_string_to_bytes(self,
markdown_text: str,
custom_css: Optional[str] = None,
**kwargs) -> bytes:
"""
will be Markdown Convert string to PDF Bytes of data.
Args:
markdown_text: Markdown String content
custom_css: Optional customizations CSS Contents
**kwargs: Add Ons (page_format, margin_mm, enable_math)
Returns:
PDF Bytes data of the file
Raises:
MarkdownToPdfError: If the conversion fails
"""
try:
# will be Markdown Render As HTML
html_content = self.render_markdown_to_html(
markdown_text,
custom_css=custom_css,
enable_math=kwargs.get('enable_math')
)
# will be HTML Convert To PDF Bytes of data
return self.convert_html_to_pdf_bytes(
html_content,
page_format=kwargs.get('page_format'),
margin_mm=kwargs.get('margin_mm')
)
except MarkdownToPdfError:
raise
except Exception as e:
raise MarkdownToPdfError(f'failed to transform: {e}') from e
# Backward compatibility function
def render_markdown_to_html(md_text: str, css: str = None, enable_math: bool = False) -> str:
"""Legacy functions for backward compatibility."""
converter = MarkdownToPdfConverter(enable_math=enable_math)
return converter.render_markdown_to_html(md_text, custom_css=css, enable_math=enable_math)
def html_to_pdf_with_playwright(html: str, output_path: str, format: str = 'A4', margin_mm: int = 20):
"""Legacy functions for backward compatibility."""
converter = MarkdownToPdfConverter(page_format=format, margin_mm=margin_mm)
converter.convert_html_to_pdf(html, output_path, page_format=format, margin_mm=margin_mm)
def md_to_pdf(input_md: str, output_pdf: str, css_file: str = None, is_path: bool = False,
enable_math: bool = False, page_format: str = 'A4', margin_mm: int = 20):
"""Legacy functions for backward compatibility."""
converter = MarkdownToPdfConverter(
enable_math=enable_math,
page_format=page_format,
margin_mm=margin_mm
)
if is_path:
converter.convert_file(input_md, output_pdf, css_file=css_file)
else:
custom_css = None
if css_file:
custom_css = converter._load_css_file(css_file)
converter.convert_string(input_md, output_pdf, custom_css=custom_css)
def md_to_pdf_bytes(input_md: str, css_file: str = None, is_path: bool = False,
enable_math: bool = False, page_format: str = 'A4', margin_mm: int = 20) -> bytes:
"""
will be Markdown Convert To PDF Handy function for byte data.
Args:
input_md: Markdown File path (if is_path=True or: Markdown String
css_file: Optional customizations CSS FilePath
is_path: input_md Is file path
enable_math: enabled MathJax Math expression support
page_format: Post Format (A4, A3, A5, Letter, Legal, Tabloid)
margin_mm: Margins (in mm)
Returns:
PDF Bytes data of the file
Raises:
MarkdownToPdfError: If the conversion fails
"""
converter = MarkdownToPdfConverter(
enable_math=enable_math,
page_format=page_format,
margin_mm=margin_mm
)
if is_path:
return converter.convert_file_to_bytes(input_md, css_file=css_file)
else:
custom_css = None
if css_file:
custom_css = converter._load_css_file(css_file)
return converter.convert_string_to_bytes(input_md, custom_css=custom_css)
================================================
FILE: src/backend/bisheng/common/utils/util.py
================================================
import base64
import contextvars
import functools
import hashlib
import hmac
import os
import uuid
import orjson
def orjson_dumps(v, *, default=None, sort_keys=False, indent_2=True):
option = orjson.OPT_SORT_KEYS if sort_keys else None
if indent_2:
# orjson.dumps returns bytes, to match standard json.dumps we need to decode
# option
# To modify how data is serialized, specify option. Each option is an integer constant in orjson.
# To specify multiple options, mask them together, e.g., option=orjson.OPT_STRICT_INTEGER | orjson.OPT_NAIVE_UTC
if option is None:
option = orjson.OPT_INDENT_2
else:
option |= orjson.OPT_INDENT_2
if default is None:
return orjson.dumps(v, option=option).decode()
return orjson.dumps(v, default=default, option=option).decode()
def generate_short_high_entropy_string(length=32):
"""
Generate a short string of high entropy of the specified length (default32characters.
Parameters:
length: Target Length
"""
# Calculate the required number of raw bytes based on the target length (Base64Corresponds to each character6bit
byte_length = (length * 6 + 7) // 8 # Round Up
# Generate Encryption-Level Random Keys
key = os.urandom(16) # 128Bit Key
# Generate basic random data (UUIDright of privacy128bits are sufficient as a source)
base_random = uuid.uuid4().bytes
# HMACCrypto Hybrid Enhanced Randomness
h = hmac.new(key, base_random, hashlib.sha256)
hmac_bytes = h.digest()
# Truncate bytes of desired length
combined = hmac_bytes[:byte_length]
# Convert ToURLSAFETYBase64and truncate to target length (without padding)
short_str = base64.urlsafe_b64encode(combined).decode().rstrip('=')[:length]
return short_str
# --- Define decorator ---
def transfer_trace_id(func):
"""
Decorator: Automatically convert the current context (including trace_id) into the execution environment of the decorated function.
Available for Thread OR Executor。
"""
@functools.wraps(func)
def wrapper(*args, **kwargs):
# 1. The code here is still executing in the parent thread, capturing the context
ctx = contextvars.copy_context()
# 2. Use ctx.run Run the original function in the captured context
return ctx.run(func, *args, **kwargs)
return wrapper
================================================
FILE: src/backend/bisheng/components/__init__.py
================================================
from bisheng.interface.custom.custom_component import CustomComponent
__all__ = ["CustomComponent"]
================================================
FILE: src/backend/bisheng/components/custom_components/CustomComponent.py
================================================
from bisheng import CustomComponent
from bisheng.field_typing import Data
class Component(CustomComponent):
documentation: str = 'http://docs.bisheng.org/components/custom'
def build_config(self):
return {'param': {'display_name': 'Parameter'}}
def build(self, param: Data) -> Data:
return param
================================================
FILE: src/backend/bisheng/components/custom_components/__init__.py
================================================
================================================
FILE: src/backend/bisheng/core/__init__.py
================================================
================================================
FILE: src/backend/bisheng/core/ai/__init__.py
================================================
from langchain_anthropic import ChatAnthropic
from langchain_community.chat_models import ChatTongyi, ChatZhipuAI, MiniMaxChat, MoonshotChat
from langchain_community.document_compressors import DashScopeRerank
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_deepseek import ChatDeepSeek
from langchain_ollama import OllamaEmbeddings, ChatOllama
from langchain_openai import ChatOpenAI, AzureChatOpenAI, OpenAIEmbeddings, AzureOpenAIEmbeddings
from .asr import OpenAIASRClient, AliyunASRClient, AzureOpenAIASRClient
from .base import BaseASRClient, BaseTTSClient
from .llm.chat_openai_compatible import ChatOpenAICompatible
from .rerank.common_rerank import CommonRerank
from .rerank.xinference_rerank import XinferenceRerank
from .tts import OpenAITTSClient, AliyunTTSClient, AzureOpenAITTSClient
__all__ = [
'BaseASRClient',
'BaseTTSClient',
'OpenAIASRClient',
'AliyunASRClient',
'AzureOpenAIASRClient',
'OpenAITTSClient',
'AliyunTTSClient',
'AzureOpenAITTSClient',
'ChatOllama',
'ChatOpenAI',
'AzureChatOpenAI',
'ChatTongyi',
'ChatZhipuAI',
'MiniMaxChat',
'ChatAnthropic',
'ChatDeepSeek',
'MoonshotChat',
'ChatOpenAICompatible',
'OllamaEmbeddings',
'OpenAIEmbeddings',
'AzureOpenAIEmbeddings',
'DashScopeEmbeddings',
'DashScopeRerank',
'CommonRerank',
'XinferenceRerank'
]
================================================
FILE: src/backend/bisheng/core/ai/asr/__init__.py
================================================
from .aliyun_asr_client import AliyunASRClient
from .azure_openai_asr_client import AzureOpenAIASRClient
from .openai_asr_client import OpenAIASRClient
__all__ = [
'OpenAIASRClient',
'AliyunASRClient',
'AzureOpenAIASRClient'
]
================================================
FILE: src/backend/bisheng/core/ai/asr/aliyun_asr_client.py
================================================
import asyncio
from typing import Optional
from dashscope.audio.asr import Recognition, RecognitionResult
from ..base import BaseASRClient
class AliyunASRClient(BaseASRClient):
"""Alibaba CloudASRClient"""
def __init__(self, api_key: str, model: str, **kwargs):
"""
Initialize Alibaba CloudASRClient
"""
self.api_key = api_key
self.recognition = Recognition(
model=model,
format="wav",
sample_rate=16000,
callback=None,
**kwargs
)
# Time-consuming operation, asynchronous execution
def sync_func(self, temp_file, language=None, model=None):
result: RecognitionResult = self.recognition.call(temp_file, api_key=self.api_key, language=language,
model=model)
return result
async def _transcribe(
self,
audio: str,
language: Optional[str] = None,
model: Optional[str] = None,
**kwargs
) -> str:
result: RecognitionResult = await asyncio.to_thread(self.sync_func, audio, language, model)
if result.status_code != 200:
raise RuntimeError(
f"ASR request failed with status code {result.code} and message {result.message}"
)
sentence = result.get_sentence()
if sentence and sentence[0]:
return sentence[0]["text"]
return ""
================================================
FILE: src/backend/bisheng/core/ai/asr/azure_openai_asr_client.py
================================================
from typing import Optional
import openai
from ..base import BaseASRClient
class AzureOpenAIASRClient(BaseASRClient):
"""MicrosoftAzure OpenAI ASRClient"""
def __init__(self, api_key: str, **kwargs):
self.model = kwargs.pop("model", "whisper-1")
self.client = openai.AsyncAzureOpenAI(api_key=api_key, **kwargs)
async def _transcribe(
self,
audio: str,
language: str = "auto",
model: Optional[str] = None,
**kwargs
) -> str:
"""
UseAzure OpenAI Whisper APISpeech Recognition
:param audio:
:param language:
:param model:
:return:
"""
with open(audio, "rb") as f:
response = await self.client.audio.transcriptions.create(
file=f,
model=model or self.model,
language=language if language != "auto" else None,
**kwargs
)
return response.text
================================================
FILE: src/backend/bisheng/core/ai/asr/openai_asr_client.py
================================================
from typing import Optional, Union, BinaryIO
import openai
from ..base import BaseASRClient
class OpenAIASRClient(BaseASRClient):
"""OpenAI ASRClient"""
def __init__(self, api_key: str, **kwargs):
self.model = kwargs.pop("model", "whisper-1")
self.client = openai.AsyncOpenAI(api_key=api_key, **kwargs)
async def _transcribe(
self,
audio: Union[str, bytes, BinaryIO],
language: str = "auto",
model: Optional[str] = None,
**kwargs
) -> str:
"""
UseOpenAI Whisper APISpeech Recognition
Args:
audio: Audio File Host
language: Language code, e.g. 'zh', 'en'
model: Model name, defaults to 'whisper-1'
Returns:
Recognized text content
"""
with open(audio, "rb") as f:
transcript = await self.client.audio.transcriptions.create(
model=model or self.model,
file=f,
language=language,
**kwargs
)
return transcript.text
================================================
FILE: src/backend/bisheng/core/ai/base.py
================================================
import asyncio
import os
import tempfile
import uuid
from abc import ABC, abstractmethod
from typing import Optional, Union, BinaryIO, Sequence
import aiofiles
from langchain_core.callbacks import Callbacks
from langchain_core.documents import BaseDocumentCompressor, Document
from pydantic import ConfigDict
class BaseASRClient(ABC):
"""ASR (Automatic Speech Recognition) Base Interface Class"""
async def transcribe(
self,
audio: Union[str, bytes, BinaryIO],
language: Optional[str] = None,
model: Optional[str] = None,
**kwargs
) -> str:
"""
Convert Audio to Text
Args:
audio: Audio file path, audio byte data, or file object
language: Language code, e.g. 'zh', 'en'
model: Used Model Name
Returns:
Transcribed text content
"""
if not audio:
raise ValueError("Audio input is required")
if isinstance(audio, str):
with open(audio, 'rb') as audio_file:
audio_bytes = audio_file.read()
elif isinstance(audio, bytes):
audio_bytes = audio
elif hasattr(audio, 'read'):
audio_bytes = audio.read()
else:
raise ValueError("Invalid audio input type")
tmp_dir = tempfile.gettempdir()
tmp_file_path = os.path.join(tmp_dir, uuid.uuid4().hex + '.wav')
# ffmpeg Convert To16kSampling Rate MonowavDoc.
converted_file_path = os.path.join(tmp_dir, uuid.uuid4().hex + '_16k_mono.wav')
try:
async with aiofiles.open(tmp_file_path, 'wb') as f:
await f.write(audio_bytes)
command = f'ffmpeg -y -i "{tmp_file_path}" -ar 16000 -ac 1 "{converted_file_path}"'
process = await asyncio.create_subprocess_shell(
command,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE
)
await process.communicate()
return await self._transcribe(converted_file_path, language=language, model=model, **kwargs)
finally:
if os.path.exists(tmp_file_path):
os.remove(tmp_file_path)
if os.path.exists(converted_file_path):
os.remove(converted_file_path)
@abstractmethod
async def _transcribe(self, audio: str, language: Optional[str] = None, model: Optional[str] = None,
**kwargs) -> str:
"""
Internal Method: Convert Audio to Text
Args:
audio: Audio File Host, Files are automatically deleted when processing is complete
language: Language code, e.g. 'zh', 'en'
model: Used Model Name
Returns:
Transcribed text content
"""
raise NotImplementedError
class BaseTTSClient(ABC):
"""TTS (Text To Speech) Base Interface Class"""
@abstractmethod
async def synthesize(
self,
text: str,
voice: Optional[str] = None,
language: Optional[str] = None,
format: str = "mp3"
) -> bytes:
"""
Synthesize text into speech
Args:
text: Text to compose
voice: Audio Options
language: Language code
format: Audio formats, such as 'mp3', 'wav'
Returns:
Audio Bytes Data
"""
pass
class BaseRerank(BaseDocumentCompressor):
"""Rerank base interface class"""
model_config = ConfigDict(arbitrary_types_allowed=True)
@abstractmethod
def compress_documents(
self,
documents: Sequence[Document],
query: str,
callbacks: Optional[Callbacks] = None,
) -> Sequence[Document]:
"""Compress retrieved documents given the query context.
Args:
documents: The retrieved documents.
query: The query context.
callbacks: Optional callbacks to run during compression.
Returns:
The compressed documents.
"""
@staticmethod
def sort_rerank_result(documents: Sequence[Document], results: list[dict]) -> Sequence[Document]:
"""Sort and annotate original documents based on rerank results."""
sorted_docs = []
for res in results:
index = res.get("index")
if index is not None and 0 <= index < len(documents):
doc = documents[index]
doc.metadata["relevance_score"] = res.get("relevance_score")
sorted_docs.append(doc)
return sorted_docs
================================================
FILE: src/backend/bisheng/core/ai/embeddings/__init__.py
================================================
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_ollama import OllamaEmbeddings
from langchain_openai import OpenAIEmbeddings, AzureOpenAIEmbeddings
__all__ = [
'OllamaEmbeddings',
'OpenAIEmbeddings',
'AzureOpenAIEmbeddings',
'DashScopeEmbeddings',
]
================================================
FILE: src/backend/bisheng/core/ai/llm/__init__.py
================================================
================================================
FILE: src/backend/bisheng/core/ai/llm/chat_openai_compatible.py
================================================
from typing import Optional, Any
from langchain_core.language_models import LanguageModelInput
from langchain_openai import ChatOpenAI
class ChatOpenAICompatible(ChatOpenAI):
"""
A ChatOpenAI subclass that ensures compatibility with older parameter names.
use max_tokens instead of max_completion_tokens.
"""
def _get_request_payload(
self,
input_: LanguageModelInput,
*,
stop: Optional[list[str]] = None,
**kwargs: Any,
) -> dict:
payload = super()._get_request_payload(input_, stop=stop, **kwargs)
# max_tokens was deprecated in favor of max_completion_tokens
# in September 2024 release
if "max_completion_tokens" in payload:
payload["max_tokens"] = payload.pop("max_completion_tokens")
return payload
================================================
FILE: src/backend/bisheng/core/ai/llm/custom_chat_deepseek.py
================================================
from typing import Optional, Any
from langchain_core.language_models import LanguageModelInput
from langchain_core.messages import AIMessage
from langchain_deepseek import ChatDeepSeek
class CustomChatDeepSeek(ChatDeepSeek):
def _get_request_payload(
self,
input_: LanguageModelInput,
*,
stop: Optional[list[str]] = None,
**kwargs: Any,
) -> dict:
payload = super()._get_request_payload(input_, stop=stop, **kwargs)
messages = self._convert_input(input_).to_messages()
for payload_msg, msg in zip(payload['messages'], messages):
if isinstance(msg, AIMessage):
payload_msg['reasoning_content'] = msg.additional_kwargs.get('reasoning_content', '')
return payload
================================================
FILE: src/backend/bisheng/core/ai/llm/custom_chat_tongyi.py
================================================
from typing import Any, List, Dict
from langchain_community.chat_models import ChatTongyi
from langchain_core.messages import BaseMessage
class CustomChatTongYi(ChatTongyi):
"""
Custom ChatTongYi Model to handle multi-modal input conversion.
"""
def _invocation_params(
self, messages: List[BaseMessage], stop: Any, **kwargs: Any
) -> Dict[str, Any]:
# Get basic call parameters
params = super()._invocation_params(messages, stop, **kwargs)
# Iterate through and clean the messages data
if "messages" in params:
for msg in params["messages"]:
# Only when the content is a list (multimodal) is processing required.
if "content" in msg and isinstance(msg["content"], list):
new_content = []
for item in msg["content"]:
# Check if the image_url is in OpenAI format.
if isinstance(item, dict) and item.get("type") == "image_url":
# Extract the URL string
image_url_data = item.get("image_url")
url_str = ""
if isinstance(image_url_data, dict):
url_str = image_url_data.get("url", "")
elif isinstance(image_url_data, str):
url_str = image_url_data
# Append the cleaned image data
if url_str:
new_content.append({
"type": "image",
"image": url_str
})
else:
# Non-image data is directly appended
new_content.append(item)
# Update the message content with cleaned data
msg["content"] = new_content
return params
================================================
FILE: src/backend/bisheng/core/ai/rerank/__init__.py
================================================
================================================
FILE: src/backend/bisheng/core/ai/rerank/common_rerank.py
================================================
from typing import Optional, Sequence
from httpx import Client, AsyncClient
from langchain_core.callbacks import Callbacks
from langchain_core.documents import Document
from pydantic import Field, model_validator
from typing_extensions import Self
from ..base import BaseRerank
class CommonRerank(BaseRerank):
"""Document compressor that support `/v1/rerank` router and results simial vllm."""
base_url: str = Field(..., description="server base url, example: http://localhost:9997")
rerank_endpoint: str = Field(default="/v1/rerank", description="rerank endpoint for base url")
api_key: Optional[str] = Field(default="", description="api key for rerank server")
model: str = Field(..., description="model name for rerank model")
client: Optional[Client] = Field(default=None, description="client instance")
async_client: Optional[AsyncClient] = Field(default=None, description="async client instance")
@model_validator(mode="after")
def validate_client(self) -> Self:
"""Validate that client exists in environment."""
self.base_url = self.base_url.rstrip("/") if self.base_url else self.base_url
if not self.client:
self.client = Client(base_url=self.base_url)
if not self.async_client:
self.async_client = AsyncClient(base_url=self.base_url)
return self
def get_default_headers(self):
headers = {}
if self.api_key:
headers["Authorization"] = f"Bearer {self.api_key}"
return headers
def get_default_params(self):
params = {}
if self.model:
params["model"] = self.model
return params
def get_req_data(
self,
documents: Sequence[Document],
query: str
) -> dict:
if len(documents) == 0: # to avoid empty api call
return {}
docs = [
doc.page_content if isinstance(doc, Document) else doc for doc in documents
]
req_data = self.get_default_params()
req_data["query"] = query
req_data["documents"] = docs
return req_data
def compress_documents(
self,
documents: Sequence[Document],
query: str,
callbacks: Optional[Callbacks] = None,
) -> Sequence[Document]:
"""Rerank retrieved documents given the query context.
Args:
documents: The retrieved documents.
query: The query context.
callbacks: Optional callbacks to run during compression.
Returns:
The compressed documents.
"""
req_data = self.get_req_data(documents, query)
if not req_data:
return []
resp = self.client.post(self.rerank_endpoint, json=req_data, headers=self.get_default_headers())
if resp.status_code != 200:
raise ValueError(f"Rerank request failed with status code {resp.status_code}: {resp.text}")
results = resp.json().get("results", [])
return self.sort_rerank_result(documents, results)
async def acompress_documents(
self,
documents: Sequence[Document],
query: str,
callbacks: Optional[Callbacks] = None,
) -> Sequence[Document]:
"""Async rerank retrieved documents given the query context.
Args:
documents: The retrieved documents.
query: The query context.
callbacks: Optional callbacks to run during compression.
Returns:
The compressed documents.
"""
req_data = self.get_req_data(documents, query)
if not req_data:
return []
resp = await self.async_client.post(self.rerank_endpoint, json=req_data, headers=self.get_default_headers())
if resp.status_code != 200:
raise ValueError(f"Rerank request failed with status code {resp.status_code}: {resp.text}")
results = resp.json().get("results", [])
return self.sort_rerank_result(documents, results)
================================================
FILE: src/backend/bisheng/core/ai/rerank/rrf_rerank.py
================================================
from typing import Sequence, Optional, List, Any, Dict
from langchain_core.callbacks import Callbacks
from langchain_core.documents import Document
from pydantic import model_validator
from bisheng.core.ai.base import BaseRerank
class RRFRerank(BaseRerank):
"""
Perform weighted Reciprocal Rank Fusion on multiple rank lists.
You can find more details about RRF here:
https://plg.uwaterloo.ca/~gvcormac/cormacksigir09-rrf.pdf
It uses a rank fusion.
Args:
retrievers: A list of retrievers to ensemble.
weights: A list of weights corresponding to the retrievers. Defaults to equal
weighting for all retrievers.
c: A constant added to the rank, controlling the balance between the importance
of high-ranked items and the consideration given to lower-ranked items.
Default is 60.
"""
retrievers: List[Any]
weights: List[float] = None
c: int = 60
remove_zero_score: bool = False
@model_validator(mode='before')
@classmethod
def set_weights(cls, values: Dict[str, Any]) -> Dict[str, Any]:
if not values.get("weights"):
n_retrievers = len(values["retrievers"])
values["weights"] = [1 / n_retrievers] * n_retrievers
return values
def compress_documents(
self,
documents: List[List[Document]],
query: str,
callbacks: Optional[Callbacks] = None,
) -> Sequence[Document]:
"""
Args:
documents: A list of document lists for each retriever search list[document].
query: The query to use for computing weighted reciprocal rank.
callbacks: Optional callbacks to use for computing weighted reciprocal rank.
Returns:
list: The final aggregated list of items sorted by their weighted RRF
scores in descending order. and remove duplicates document.
"""
if len(documents) != len(self.weights):
raise ValueError("Number of rank lists must be equal to the number of weights.")
# Create a union of all unique documents in the input doc_lists
all_documents = set()
for doc_list in documents:
for doc in doc_list:
all_documents.add(doc.page_content)
# Initialize the RRF score dictionary for each document
rrf_score_dic = {doc: 0.0 for doc in all_documents}
# Calculate RRF scores for each document
for doc_list, weight in zip(documents, self.weights):
for rank, doc in enumerate(doc_list, start=1):
rrf_score = weight * (1 / (rank + self.c))
rrf_score_dic[doc.page_content] += rrf_score
# Sort documents by their RRF scores in descending order
sorted_documents = sorted(rrf_score_dic.keys(), key=lambda x: rrf_score_dic[x], reverse=True)
# Map the sorted page_content back to the original document objects
page_content_to_doc_map = {doc.page_content: doc for doc_list in documents for doc in doc_list}
if self.remove_zero_score:
sorted_docs = [page_content_to_doc_map[page_content] for page_content in sorted_documents if
rrf_score_dic[page_content] > 0]
else:
sorted_docs = [page_content_to_doc_map[page_content] for page_content in sorted_documents]
return sorted_docs
================================================
FILE: src/backend/bisheng/core/ai/rerank/xinference/__init__.py
================================================
================================================
FILE: src/backend/bisheng/core/ai/rerank/xinference/_compat.py
================================================
# Copyright 2022-2024 XProbe Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from typing import Dict, Iterable, List, Literal, Optional, Union
from pydantic.version import VERSION as PYDANTIC_VERSION
PYDANTIC_V2 = PYDANTIC_VERSION.startswith("2.")
if PYDANTIC_V2:
from pydantic.v1 import ( # noqa: F401
BaseModel,
Field,
Protocol,
ValidationError,
create_model,
create_model_from_namedtuple,
create_model_from_typeddict,
parse_file_as,
validate_arguments,
validator,
)
from pydantic.v1.error_wrappers import ErrorWrapper # noqa: F401
from pydantic.v1.parse import load_str_bytes # noqa: F401
from pydantic.v1.types import StrBytes # noqa: F401
from pydantic.v1.utils import ROOT_KEY # noqa: F401
else:
from pydantic import ( # noqa: F401
BaseModel,
Field,
Protocol,
ValidationError,
create_model,
create_model_from_namedtuple,
create_model_from_typeddict,
parse_file_as,
validate_arguments,
validator,
)
from pydantic.error_wrappers import ErrorWrapper # noqa: F401
from pydantic.parse import load_str_bytes # noqa: F401
from pydantic.types import StrBytes # noqa: F401
from pydantic.utils import ROOT_KEY # noqa: F401
from openai.types.chat.chat_completion_named_tool_choice_param import (
ChatCompletionNamedToolChoiceParam,
)
from openai.types.chat.chat_completion_stream_options_param import (
ChatCompletionStreamOptionsParam,
)
from openai.types.chat.chat_completion_tool_param import ChatCompletionToolParam
from openai.types.shared_params.response_format_json_object import (
ResponseFormatJSONObject,
)
from openai.types.shared_params.response_format_text import ResponseFormatText
OpenAIChatCompletionStreamOptionsParam = create_model_from_typeddict(
ChatCompletionStreamOptionsParam
)
OpenAIChatCompletionToolParam = create_model_from_typeddict(ChatCompletionToolParam)
OpenAIChatCompletionNamedToolChoiceParam = create_model_from_typeddict(
ChatCompletionNamedToolChoiceParam
)
from openai._types import Body
class JSONSchema(BaseModel):
name: str
description: Optional[str] = None
schema_: Optional[Dict[str, object]] = Field(alias="schema", default=None)
strict: Optional[bool] = None
class ResponseFormatJSONSchema(BaseModel):
json_schema: JSONSchema
type: Literal["json_schema"]
ResponseFormat = Union[
ResponseFormatText, ResponseFormatJSONObject, ResponseFormatJSONSchema
]
class CreateChatCompletionOpenAI(BaseModel):
"""
Comes from source code: https://github.com/openai/openai-python/blob/main/src/openai/types/chat/completion_create_params.py
"""
messages: List[Dict]
model: str
frequency_penalty: Optional[float]
logit_bias: Optional[Dict[str, int]]
logprobs: Optional[bool]
max_completion_tokens: Optional[int]
max_tokens: Optional[int]
n: Optional[int]
parallel_tool_calls: Optional[bool]
presence_penalty: Optional[float]
response_format: Optional[ResponseFormat]
seed: Optional[int]
service_tier: Optional[Literal["auto", "default"]]
stop: Union[Optional[str], List[str]]
stream_options: Optional[OpenAIChatCompletionStreamOptionsParam] # type: ignore
temperature: Optional[float]
tool_choice: Optional[ # type: ignore
Union[
Literal["none", "auto", "required"],
OpenAIChatCompletionNamedToolChoiceParam,
]
]
tools: Optional[Iterable[OpenAIChatCompletionToolParam]] # type: ignore
top_logprobs: Optional[int]
top_p: Optional[float]
extra_body: Optional[Body]
user: Optional[str]
================================================
FILE: src/backend/bisheng/core/ai/rerank/xinference/client/__init__.py
================================================
# Copyright 2022-2023 XProbe Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from .restful.async_restful_client import AsyncClient
from .restful.restful_client import Client
# For compatibility
RESTfulClient = Client
AsyncRESTfulClient = AsyncClient
================================================
FILE: src/backend/bisheng/core/ai/rerank/xinference/client/common.py
================================================
# Copyright 2022-2023 XProbe Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import json
from typing import Any, AsyncIterator, Iterator, Union
def convert_float_to_int_or_str(model_size: float) -> Union[int, str]:
"""convert float to int or string
if float can be presented as int, convert it to int, otherwise convert it to string
"""
if int(model_size) == model_size:
return int(model_size)
else:
return str(model_size)
def streaming_response_iterator(
response_lines: Iterator[bytes],
) -> Iterator[Any]:
"""
Create an Iterator to handle the streaming type of generation.
Note
----------
This method is for compatible with openai. Please refer to:
https://github.com/openai/openai-python/blob/v0.28.1/openai/api_requestor.py#L99
Parameters
----------
response_lines: Iterator[bytes]
Generated lines by the Model Generator.
Returns
-------
Iterator["CompletionChunk"]
Iterator of CompletionChunks generated by models.
"""
for line in response_lines:
line = line.strip()
if line.startswith(b"data:"):
json_str = line[len(b"data:") :].strip()
if json_str == b"[DONE]":
continue
data = json.loads(json_str.decode("utf-8"))
error = data.get("error", None)
if error is not None:
raise Exception(str(error))
yield data
async def async_streaming_response_iterator(
response_lines: AsyncIterator[bytes],
) -> AsyncIterator[Any]:
"""
Create an AsyncIterator to handle the streaming type of generation.
Note
----------
This method is for compatible with openai. Please refer to:
https://github.com/openai/openai-python/blob/v0.28.1/openai/api_requestor.py#L99
Parameters
----------
response_lines: AsyncIterator[bytes]
Generated lines by the Model Generator.
Returns
-------
AsyncIterator["CompletionChunk"]
AsyncIterator of CompletionChunks generated by models.
"""
async for line in response_lines:
line = line.strip()
if line.startswith(b"data:"):
json_str = line[len(b"data:") :].strip()
if json_str == b"[DONE]":
continue
data = json.loads(json_str.decode("utf-8"))
error = data.get("error", None)
if error is not None:
raise Exception(str(error))
yield data
================================================
FILE: src/backend/bisheng/core/ai/rerank/xinference/client/handlers.py
================================================
from .restful.async_restful_client import ( # noqa: F401
AsyncRESTfulAudioModelHandle as AsyncAudioModelHandle,
)
from .restful.async_restful_client import ( # noqa: F401
AsyncRESTfulChatModelHandle as AsyncChatModelHandle,
)
from .restful.async_restful_client import ( # noqa: F401
AsyncRESTfulEmbeddingModelHandle as AsyncEmbeddingModelHandle,
)
from .restful.async_restful_client import ( # noqa: F401
AsyncRESTfulGenerateModelHandle as AsyncGenerateModelHandle,
)
from .restful.async_restful_client import ( # noqa: F401
AsyncRESTfulImageModelHandle as AsyncImageModelHandle,
)
from .restful.async_restful_client import ( # noqa: F401
AsyncRESTfulVideoModelHandle as AsyncVideoModelHandle,
)
from .restful.restful_client import ( # noqa: F401
RESTfulAudioModelHandle as AudioModelHandle,
)
from .restful.restful_client import ( # noqa: F401
RESTfulChatModelHandle as ChatModelHandle,
)
from .restful.restful_client import ( # noqa: F401
RESTfulEmbeddingModelHandle as EmbeddingModelHandle,
)
from .restful.restful_client import ( # noqa: F401
RESTfulGenerateModelHandle as GenerateModelHandle,
)
from .restful.restful_client import ( # noqa: F401
RESTfulImageModelHandle as ImageModelHandle,
)
from .restful.restful_client import ( # noqa: F401
RESTfulVideoModelHandle as VideoModelHandle,
)
================================================
FILE: src/backend/bisheng/core/ai/rerank/xinference/client/restful/__init__.py
================================================
# Copyright 2022-2023 XProbe Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
================================================
FILE: src/backend/bisheng/core/ai/rerank/xinference/client/restful/async_restful_client.py
================================================
# Copyright 2022-2023 XProbe Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import asyncio
import json
from typing import TYPE_CHECKING, Any, AsyncIterator, Dict, List, Optional, Union
import aiohttp
from ..common import async_streaming_response_iterator, convert_float_to_int_or_str
if TYPE_CHECKING:
from ...types import (
ChatCompletion,
ChatCompletionChunk,
Completion,
CompletionChunk,
Embedding,
ImageList,
PytorchGenerateConfig,
VideoList,
)
def _filter_params(params: Dict[Any, Any]) -> Dict[Any, Any]:
filtered = {}
for key, value in params.items():
if value is not None:
filtered[key] = value
return filtered
async def _get_error_string(response: aiohttp.ClientResponse) -> str:
result = None
try:
if response.content:
json_data = await response.json()
result = json_data["detail"]
except Exception:
pass
try:
response.raise_for_status()
except aiohttp.ClientError as e:
result = str(e)
if result is None:
result = "Unknown error"
await _release_response(response)
return result
async def _release_response(response: aiohttp.ClientResponse):
"""Release the aiohttp response."""
response.release()
await response.wait_for_close()
class AsyncRESTfulModelHandle:
"""
A sync model interface (for RESTful client) which provides type hints that makes it much easier to use xinference
programmatically.
"""
def __init__(self, model_uid: str, base_url: str, auth_headers: Dict):
self._model_uid = model_uid
self._base_url = base_url
self.auth_headers = auth_headers
self.timeout = aiohttp.ClientTimeout(total=1800)
self.session = aiohttp.ClientSession(
connector=aiohttp.TCPConnector(force_close=True)
)
async def close(self):
"""Close the AsyncRESTfulModelHandle session."""
if self.session:
await self.session.close()
self.session = None
def __del__(self):
if self.session:
loop = asyncio.get_event_loop()
loop.create_task(self.close())
class AsyncRESTfulEmbeddingModelHandle(AsyncRESTfulModelHandle):
async def create_embedding(
self, input: Union[str, List[str]], **kwargs
) -> "Embedding":
"""
Create an Embedding from user input via RESTful APIs.
Parameters
----------
input: Union[str, List[str]]
Input text to embed, encoded as a string or array of tokens.
To embed multiple inputs in a single request, pass an array of strings or array of token arrays.
Returns
-------
Embedding
The resulted Embedding vector that can be easily consumed by machine learning models and algorithms.
Raises
------
RuntimeError
Report the failure of embeddings and provide the error message.
"""
url = f"{self._base_url}/v1/embeddings"
request_body = {
"model": self._model_uid,
"input": input,
}
request_body.update(kwargs)
response = await self.session.post(
url, json=request_body, headers=self.auth_headers
)
if response.status != 200:
raise RuntimeError(
f"Failed to create the embeddings, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def convert_ids_to_tokens(
self, input: Union[List, List[List]], **kwargs
) -> List[str]:
"""
Convert token IDs to human readable tokens via RESTful APIs.
Parameters
----------
input: Union[List, List[List]]
Input token IDs to convert, can be a single list of token IDs or a list of token ID lists.
To convert multiple sequences in a single request, pass a list of token ID lists.
Returns
-------
list
A list of decoded tokens in human readable format.
Raises
------
RuntimeError
Report the failure of token conversion and provide the error message.
"""
url = f"{self._base_url}/v1/convert_ids_to_tokens"
request_body = {
"model": self._model_uid,
"input": input,
}
request_body.update(kwargs)
response = await self.session.post(
url, json=request_body, headers=self.auth_headers
)
if response.status != 200:
raise RuntimeError(
f"Failed to decode token ids, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
class AsyncRESTfulRerankModelHandle(AsyncRESTfulModelHandle):
async def rerank(
self,
documents: List[str],
query: str,
top_n: Optional[int] = None,
max_chunks_per_doc: Optional[int] = None,
return_documents: Optional[bool] = None,
return_len: Optional[bool] = None,
**kwargs,
):
"""
Returns an ordered list of documents ordered by their relevance to the provided query.
Parameters
----------
query: str
The search query
documents: List[str]
The documents to rerank
top_n: int
The number of results to return, defaults to returning all results
max_chunks_per_doc: int
The maximum number of chunks derived from a document
return_documents: bool
if return documents
return_len: bool
if return tokens len
Returns
-------
Scores
The scores of documents ordered by their relevance to the provided query
Raises
------
RuntimeError
Report the failure of rerank and provide the error message.
"""
url = f"{self._base_url}/v1/rerank"
request_body = {
"model": self._model_uid,
"documents": documents,
"query": query,
"top_n": top_n,
"max_chunks_per_doc": max_chunks_per_doc,
"return_documents": return_documents,
"return_len": return_len,
"kwargs": json.dumps(kwargs),
}
request_body.update(kwargs)
response = await self.session.post(
url, json=request_body, headers=self.auth_headers
)
if response.status != 200:
raise RuntimeError(
f"Failed to rerank documents, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
class AsyncRESTfulImageModelHandle(AsyncRESTfulModelHandle):
async def text_to_image(
self,
prompt: str,
n: int = 1,
size: str = "1024*1024",
response_format: str = "url",
**kwargs,
) -> "ImageList":
"""
Creates an image by the input text.
Parameters
----------
prompt: `str` or `List[str]`
The prompt or prompts to guide image generation. If not defined, you need to pass `prompt_embeds`.
n: `int`, defaults to 1
The number of images to generate per prompt. Must be between 1 and 10.
size: `str`, defaults to `1024*1024`
The width*height in pixels of the generated image. Must be one of 256x256, 512x512, or 1024x1024.
response_format: `str`, defaults to `url`
The format in which the generated images are returned. Must be one of url or b64_json.
Returns
-------
ImageList
A list of image objects.
"""
url = f"{self._base_url}/v1/images/generations"
request_body = {
"model": self._model_uid,
"prompt": prompt,
"n": n,
"size": size,
"response_format": response_format,
"kwargs": json.dumps(kwargs),
}
response = await self.session.post(
url, json=request_body, headers=self.auth_headers
)
if response.status != 200:
raise RuntimeError(
f"Failed to create the images, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def image_to_image(
self,
image: Union[str, bytes, List[Union[str, bytes]]],
prompt: str,
negative_prompt: Optional[str] = None,
n: int = 1,
size: Optional[str] = None,
response_format: str = "url",
**kwargs,
) -> "ImageList":
"""
Creates an image by the input text.
Parameters
----------
image: `Union[str, bytes, List[Union[str, bytes]]]`
The ControlNet input condition to provide guidance to the `unet` for generation. If the type is
specified as `torch.FloatTensor`, it is passed to ControlNet as is. `PIL.Image.Image` can also be
accepted as an image. The dimensions of the output image defaults to `image`'s dimensions. If height
and/or width are passed, `image` is resized accordingly. If multiple ControlNets are specified in
`init`, images must be passed as a list such that each element of the list can be correctly batched for
input to a single ControlNet.
prompt: `str` or `List[str]`
The prompt or prompts to guide image generation. If not defined, you need to pass `prompt_embeds`.
negative_prompt (`str` or `List[str]`, *optional*):
The prompt or prompts not to guide the image generation. If not defined, one has to pass
`negative_prompt_embeds` instead. Ignored when not using guidance (i.e., ignored if `guidance_scale` is
less than `1`).
n: `int`, defaults to 1
The number of images to generate per prompt. Must be between 1 and 10.
size: `str`, defaults to `1024*1024`
The width*height in pixels of the generated image. Must be one of 256x256, 512x512, or 1024x1024.
response_format: `str`, defaults to `url`
The format in which the generated images are returned. Must be one of url or b64_json.
Returns
-------
ImageList
A list of image objects.
:param prompt:
:param image:
"""
url = f"{self._base_url}/v1/images/variations"
params = {
"model": self._model_uid,
"prompt": prompt,
"negative_prompt": negative_prompt,
"n": n,
"size": size,
"response_format": response_format,
"kwargs": json.dumps(kwargs),
}
params = _filter_params(params)
files: List[Any] = []
for key, value in params.items():
files.append((key, (None, value)))
# Handle both single image and list of images
if isinstance(image, list):
if len(image) == 0:
raise ValueError("Image list cannot be empty")
elif len(image) == 1:
# Single image in list, use it directly
files.append(("image", ("image", image[0], "application/octet-stream")))
else:
# Multiple images - send all images with same field name
# FastAPI will collect them into a list
for img_data in image:
files.append(
("image", ("image", img_data, "application/octet-stream"))
)
else:
# Single image
files.append(("image", ("image", image, "application/octet-stream")))
response = await self.session.post(url, data=files, headers=self.auth_headers)
if response.status != 200:
raise RuntimeError(
f"Failed to variants the images, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def image_edit(
self,
image: Union[Union[str, bytes], List[Union[str, bytes]]],
prompt: str,
mask: Optional[Union[str, bytes]] = None,
n: int = 1,
size: Optional[str] = None,
response_format: str = "url",
**kwargs,
) -> "ImageList":
"""
Edit image(s) by the input text and optional mask.
Parameters
----------
image: `Union[Union[str, bytes], List[Union[str, bytes]]]`
The input image(s) to edit. Can be:
- Single image: file path, URL, or binary image data
- Multiple images: list of file paths, URLs, or binary image data
When multiple images are provided, the first image is used as the primary image
and subsequent images are used as reference images for better editing results.
prompt: `str`
The prompt or prompts to guide image editing. If not defined, you need to pass `prompt_embeds`.
mask: `Optional[Union[str, bytes]]`, optional
An optional mask image. White pixels in the mask are repainted while black pixels are preserved.
If provided, this will trigger inpainting mode. If not provided, this will trigger image-to-image mode.
n: `int`, defaults to 1
The number of images to generate per prompt. Must be between 1 and 10.
size: `Optional[str]`, optional
The width*height in pixels of the generated image. If not specified, uses the original image size.
response_format: `str`, defaults to `url`
The format in which the generated images are returned. Must be one of url or b64_json.
**kwargs
Additional parameters to pass to the model.
Returns
-------
ImageList
A list of edited image objects.
Raises
------
RuntimeError
If the image editing request fails.
Examples
--------
# Single image editing
result = await model.image_edit(
image="path/to/image.png",
prompt="make this image look like a painting"
)
# Multiple image editing with reference images
result = await model.image_edit(
image=["primary_image.png", "reference1.jpg", "reference2.png"],
prompt="edit the main image using the style from reference images"
)
"""
url = f"{self._base_url}/v1/images/edits"
params = {
"model": self._model_uid,
"prompt": prompt,
"n": n,
"size": size,
"response_format": response_format,
"kwargs": json.dumps(kwargs),
}
params = _filter_params(params)
files: List[Any] = []
for key, value in params.items():
files.append((key, (None, value)))
# Handle single image or multiple images
import aiohttp
data = aiohttp.FormData()
# Add all parameters as form fields
for key, value in params.items():
if value is not None:
data.add_field(key, str(value))
# Handle single image or multiple images
if isinstance(image, list):
# Validate image list is not empty
if len(image) == 0:
raise ValueError("Image list cannot be empty")
# Multiple images - send as image[] array
for i, img in enumerate(image):
if isinstance(img, str):
# File path - read file content
with open(img, "rb") as f:
content = f.read()
data.add_field(
f"image[]",
content,
filename=f"image_{i}.png",
content_type="image/png",
)
else:
# Binary data
data.add_field(
f"image[]",
img,
filename=f"image_{i}.png",
content_type="image/png",
)
else:
# Single image
if isinstance(image, str):
# File path - read file content
with open(image, "rb") as f:
content = f.read()
data.add_field(
"image", content, filename="image.png", content_type="image/png"
)
else:
# Binary data
data.add_field(
"image", image, filename="image.png", content_type="image/png"
)
if mask is not None:
if isinstance(mask, str):
# File path - read file content
with open(mask, "rb") as f:
content = f.read()
data.add_field(
"mask", content, filename="mask.png", content_type="image/png"
)
else:
# Binary data
data.add_field(
"mask", mask, filename="mask.png", content_type="image/png"
)
try:
response = await self.session.post(
url, data=data, headers=self.auth_headers
)
if response.status != 200:
raise RuntimeError(
f"Failed to edit the images, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
return response_data
finally:
await _release_response(response) if "response" in locals() else None
async def inpainting(
self,
image: Union[str, bytes],
mask_image: Union[str, bytes],
prompt: str,
negative_prompt: Optional[str] = None,
n: int = 1,
size: Optional[str] = None,
response_format: str = "url",
**kwargs,
) -> "ImageList":
"""
Inpaint an image by the input text.
Parameters
----------
image: `Union[str, bytes]`
an image batch to be inpainted (which parts of the image to
be masked out with `mask_image` and repainted according to `prompt`). For both numpy array and pytorch
tensor, the expected value range is between `[0, 1]` If it's a tensor or a list or tensors, the
expected shape should be `(B, C, H, W)` or `(C, H, W)`. If it is a numpy array or a list of arrays, the
expected shape should be `(B, H, W, C)` or `(H, W, C)` It can also accept image latents as `image`, but
if passing latents directly it is not encoded again.
mask_image: `Union[str, bytes]`
representing an image batch to mask `image`. White pixels in the mask
are repainted while black pixels are preserved. If `mask_image` is a PIL image, it is converted to a
single channel (luminance) before use. If it's a numpy array or pytorch tensor, it should contain one
color channel (L) instead of 3, so the expected shape for pytorch tensor would be `(B, 1, H, W)`, `(B,
H, W)`, `(1, H, W)`, `(H, W)`. And for numpy array would be for `(B, H, W, 1)`, `(B, H, W)`, `(H, W,
1)`, or `(H, W)`.
prompt: `str` or `List[str]`
The prompt or prompts to guide image generation. If not defined, you need to pass `prompt_embeds`.
negative_prompt (`str` or `List[str]`, *optional*):
The prompt or prompts not to guide the image generation. If not defined, one has to pass
`negative_prompt_embeds` instead. Ignored when not using guidance (i.e., ignored if `guidance_scale` is
less than `1`).
n: `int`, defaults to 1
The number of images to generate per prompt. Must be between 1 and 10.
size: `str`, defaults to None
The width*height in pixels of the generated image.
response_format: `str`, defaults to `url`
The format in which the generated images are returned. Must be one of url or b64_json.
Returns
-------
ImageList
A list of image objects.
:param prompt:
:param image:
"""
url = f"{self._base_url}/v1/images/inpainting"
params = {
"model": self._model_uid,
"prompt": prompt,
"negative_prompt": negative_prompt,
"n": n,
"size": size,
"response_format": response_format,
"kwargs": json.dumps(kwargs),
}
params = _filter_params(params)
files: List[Any] = []
for key, value in params.items():
files.append((key, (None, value)))
files.append(("image", ("image", image, "application/octet-stream")))
files.append(
(
"mask_image",
("mask_image", mask_image, "application/octet-stream"),
)
)
response = await self.session.post(url, data=files, headers=self.auth_headers)
if response.status != 200:
raise RuntimeError(
f"Failed to inpaint the images, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def ocr(self, image: Union[str, bytes], **kwargs):
url = f"{self._base_url}/v1/images/ocr"
params = {
"model": self._model_uid,
"kwargs": json.dumps(kwargs),
}
params = _filter_params(params)
files: List[Any] = []
for key, value in params.items():
files.append((key, (None, value)))
files.append(("image", ("image", image, "application/octet-stream")))
response = await self.session.post(url, data=files, headers=self.auth_headers)
if response.status != 200:
raise RuntimeError(
f"Failed to ocr the images, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
class AsyncRESTfulVideoModelHandle(AsyncRESTfulModelHandle):
async def text_to_video(
self,
prompt: str,
n: int = 1,
**kwargs,
) -> "VideoList":
"""
Creates a video by the input text.
Parameters
----------
prompt: `str` or `List[str]`
The prompt or prompts to guide video generation. If not defined, you need to pass `prompt_embeds`.
n: `int`, defaults to 1
The number of videos to generate per prompt. Must be between 1 and 10.
Returns
-------
VideoList
A list of video objects.
"""
url = f"{self._base_url}/v1/video/generations"
request_body = {
"model": self._model_uid,
"prompt": prompt,
"n": n,
"kwargs": json.dumps(kwargs),
}
response = await self.session.post(
url, json=request_body, headers=self.auth_headers
)
if response.status != 200:
raise RuntimeError(
f"Failed to create the video, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def image_to_video(
self,
image: Union[str, bytes],
prompt: str,
negative_prompt: Optional[str] = None,
n: int = 1,
**kwargs,
) -> "VideoList":
"""
Creates a video by the input image and text.
Parameters
----------
image: `Union[str, bytes]`
The input image to condition the generation on.
prompt: `str` or `List[str]`
The prompt or prompts to guide video generation. If not defined, you need to pass `prompt_embeds`.
negative_prompt (`str` or `List[str]`, *optional*):
The prompt or prompts not to guide the image generation.
n: `int`, defaults to 1
The number of videos to generate per prompt. Must be between 1 and 10.
Returns
-------
VideoList
A list of video objects.
"""
url = f"{self._base_url}/v1/video/generations/image"
params = {
"model": self._model_uid,
"prompt": prompt,
"negative_prompt": negative_prompt,
"n": n,
"kwargs": json.dumps(kwargs),
}
params = _filter_params(params)
files: List[Any] = []
for key, value in params.items():
files.append((key, (None, value)))
files.append(("image", ("image", image, "application/octet-stream")))
response = await self.session.post(url, data=files, headers=self.auth_headers)
if response.status != 200:
raise RuntimeError(
f"Failed to create the video from image, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def flf_to_video(
self,
first_frame: Union[str, bytes],
last_frame: Union[str, bytes],
prompt: str,
negative_prompt: Optional[str] = None,
n: int = 1,
**kwargs,
) -> "VideoList":
"""
Creates a video by the first frame, last frame and text.
Parameters
----------
first_frame: `Union[str, bytes]`
The first frame to condition the generation on.
last_frame: `Union[str, bytes]`
The last frame to condition the generation on.
prompt: `str` or `List[str]`
The prompt or prompts to guide video generation. If not defined, you need to pass `prompt_embeds`.
negative_prompt (`str` or `List[str]`, *optional*):
The prompt or prompts not to guide the image generation.
n: `int`, defaults to 1
The number of videos to generate per prompt. Must be between 1 and 10.
Returns
-------
VideoList
A list of video objects.
"""
url = f"{self._base_url}/v1/video/generations/flf"
params = {
"model": self._model_uid,
"prompt": prompt,
"negative_prompt": negative_prompt,
"n": n,
"kwargs": json.dumps(kwargs),
}
params = _filter_params(params)
files: List[Any] = []
for key, value in params.items():
files.append((key, (None, value)))
files.append(
("first_frame", ("image", first_frame, "application/octet-stream"))
)
files.append(("last_frame", ("image", last_frame, "application/octet-stream")))
response = await self.session.post(url, files=files, headers=self.auth_headers)
if response.status != 200:
raise RuntimeError(
f"Failed to create the video from image, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
class AsyncRESTfulGenerateModelHandle(AsyncRESTfulModelHandle):
async def generate(
self,
prompt: str,
generate_config: Optional["PytorchGenerateConfig"] = None,
) -> Union["Completion", AsyncIterator["CompletionChunk"]]:
"""
Creates a completion for the provided prompt and parameters via RESTful APIs.
Parameters
----------
prompt: str
The user's message or user's input.
generate_config: Optional["PytorchGenerateConfig"]
Additional configuration for the chat generation.
"PytorchGenerateConfig" -> Configuration for pytorch model
Returns
-------
Union["Completion", AsyncIterator["CompletionChunk"]]
Stream is a parameter in generate_config.
When stream is set to True, the function will return AsyncIterator["CompletionChunk"].
When stream is set to False, the function will return "Completion".
Raises
------
RuntimeError
Fail to generate the completion from the server. Detailed information provided in error message.
"""
url = f"{self._base_url}/v1/completions"
request_body: Dict[str, Any] = {"model": self._model_uid, "prompt": prompt}
if generate_config is not None:
for key, value in generate_config.items():
request_body[key] = value
stream = bool(generate_config and generate_config.get("stream"))
response = await self.session.post(
url, json=request_body, headers=self.auth_headers
)
if response.status != 200:
raise RuntimeError(
f"Failed to generate completion, detail: {await _get_error_string(response)}"
)
if stream:
return async_streaming_response_iterator(response.content)
response_data = await response.json()
await _release_response(response)
return response_data
class AsyncRESTfulChatModelHandle(AsyncRESTfulGenerateModelHandle):
async def chat(
self,
messages: List[Dict],
tools: Optional[List[Dict]] = None,
generate_config: Optional["PytorchGenerateConfig"] = None,
) -> Union["ChatCompletion", AsyncIterator["ChatCompletionChunk"]]:
"""
Given a list of messages comprising a conversation, the model will return a response via RESTful APIs.
Parameters
----------
messages: List[Dict]
A list of messages comprising the conversation so far.
tools: Optional[List[Dict]]
A tool list.
generate_config: Optional["PytorchGenerateConfig"]
Additional configuration for the chat generation.
"PytorchGenerateConfig" -> configuration for pytorch model
Returns
-------
Union["ChatCompletion", AsyncIterator["ChatCompletionChunk"]]
Stream is a parameter in generate_config.
When stream is set to True, the function will return AsyncIterator["ChatCompletionChunk"].
When stream is set to False, the function will return "ChatCompletion".
Raises
------
RuntimeError
Report the failure to generate the chat from the server. Detailed information provided in error message.
"""
url = f"{self._base_url}/v1/chat/completions"
request_body: Dict[str, Any] = {
"model": self._model_uid,
"messages": messages,
}
if tools is not None:
request_body["tools"] = tools
if generate_config is not None:
for key, value in generate_config.items():
request_body[key] = value
stream = bool(generate_config and generate_config.get("stream"))
response = await self.session.post(
url, json=request_body, headers=self.auth_headers
)
if response.status != 200:
raise RuntimeError(
f"Failed to generate chat completion, detail: {await _get_error_string(response)}"
)
if stream:
return async_streaming_response_iterator(response.content)
response_data = await response.json()
await _release_response(response)
return response_data
class AsyncRESTfulAudioModelHandle(AsyncRESTfulModelHandle):
async def transcriptions(
self,
audio: bytes,
language: Optional[str] = None,
prompt: Optional[str] = None,
response_format: Optional[str] = "json",
temperature: Optional[float] = 0,
timestamp_granularities: Optional[List[str]] = None,
**kwargs,
):
"""
Transcribes audio into the input language.
Parameters
----------
audio: bytes
The audio file object (not file name) to transcribe, in one of these formats: flac, mp3, mp4, mpeg,
mpga, m4a, ogg, wav, or webm.
language: Optional[str]
The language of the input audio. Supplying the input language in ISO-639-1
(https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) format will improve accuracy and latency.
prompt: Optional[str]
An optional text to guide the model's style or continue a previous audio segment.
The prompt should match the audio language.
response_format: Optional[str], defaults to json
The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.
temperature: Optional[float], defaults to 0
The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random,
while lower values like 0.2 will make it more focused and deterministic.
If set to 0, the model will use log probability to automatically increase the temperature
until certain thresholds are hit.
timestamp_granularities: Optional[List[str]], default is None.
The timestamp granularities to populate for this transcription. response_format must be set verbose_json
to use timestamp granularities. Either or both of these options are supported: word, or segment.
Note: There is no additional latency for segment timestamps, but generating word timestamps incurs
additional latency.
Returns
-------
The transcribed text.
"""
url = f"{self._base_url}/v1/audio/transcriptions"
params = {
"model": self._model_uid,
"language": language,
"prompt": prompt,
"response_format": response_format,
"temperature": temperature,
"timestamp_granularities[]": timestamp_granularities,
"kwargs": json.dumps(kwargs),
}
params = _filter_params(params)
files: List[Any] = []
files.append(("file", ("file", audio, "application/octet-stream")))
response = await self.session.post(
url, data=params, files=files, headers=self.auth_headers
)
if response.status != 200:
raise RuntimeError(
f"Failed to transcribe the audio, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def translations(
self,
audio: bytes,
language: Optional[str] = None,
prompt: Optional[str] = None,
response_format: Optional[str] = "json",
temperature: Optional[float] = 0,
timestamp_granularities: Optional[List[str]] = None,
):
"""
Translates audio into English.
Parameters
----------
audio: bytes
The audio file object (not file name) to transcribe, in one of these formats: flac, mp3, mp4, mpeg,
mpga, m4a, ogg, wav, or webm.
language: Optional[str]
The language of the input audio. Supplying the input language in ISO-639-1
(https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) format will improve accuracy and latency.
prompt: Optional[str]
An optional text to guide the model's style or continue a previous audio segment.
The prompt should match the audio language.
response_format: Optional[str], defaults to json
The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.
temperature: Optional[float], defaults to 0
The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random,
while lower values like 0.2 will make it more focused and deterministic.
If set to 0, the model will use log probability to automatically increase the temperature
until certain thresholds are hit.
timestamp_granularities: Optional[List[str]], default is None.
The timestamp granularities to populate for this transcription. response_format must be set verbose_json
to use timestamp granularities. Either or both of these options are supported: word, or segment.
Note: There is no additional latency for segment timestamps, but generating word timestamps incurs
additional latency.
Returns
-------
The translated text.
"""
url = f"{self._base_url}/v1/audio/translations"
params = {
"model": self._model_uid,
"language": language,
"prompt": prompt,
"response_format": response_format,
"temperature": temperature,
"timestamp_granularities[]": timestamp_granularities,
}
params = _filter_params(params)
files: List[Any] = []
files.append(("file", ("file", audio, "application/octet-stream")))
response = await self.session.post(
url, data=params, files=files, headers=self.auth_headers
)
if response.status != 200:
raise RuntimeError(
f"Failed to translate the audio, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def speech(
self,
input: str,
voice: str = "",
response_format: str = "mp3",
speed: float = 1.0,
stream: bool = False,
prompt_speech: Optional[bytes] = None,
prompt_latent: Optional[bytes] = None,
**kwargs,
):
"""
Generates audio from the input text.
Parameters
----------
input: str
The text to generate audio for. The maximum length is 4096 characters.
voice: str
The voice to use when generating the audio.
response_format: str
The format to audio in.
speed: str
The speed of the generated audio.
stream: bool
Use stream or not.
prompt_speech: bytes
The audio bytes to be provided to the model.
prompt_latent: bytes
The latent bytes to be provided to the model.
Returns
-------
bytes
The generated audio binary.
"""
url = f"{self._base_url}/v1/audio/speech"
params = {
"model": self._model_uid,
"input": input,
"voice": voice,
"response_format": response_format,
"speed": speed,
"stream": stream,
"kwargs": json.dumps(kwargs),
}
params = _filter_params(params)
files: List[Any] = []
if prompt_speech:
files.append(
(
"prompt_speech",
("prompt_speech", prompt_speech, "application/octet-stream"),
)
)
if prompt_latent:
files.append(
(
"prompt_latent",
("prompt_latent", prompt_latent, "application/octet-stream"),
)
)
if files:
response = await self.session.post(
url, data=params, files=files, headers=self.auth_headers
)
else:
response = await self.session.post(
url, json=params, headers=self.auth_headers
)
if response.status != 200:
raise RuntimeError(
f"Failed to speech the text, detail: {await _get_error_string(response)}"
)
if stream:
await _release_response(response)
return response.content.iter_chunked(1024)
await _release_response(response)
return response.content
class AsyncRESTfulFlexibleModelHandle(AsyncRESTfulModelHandle):
async def infer(
self,
**kwargs,
):
"""
Call flexible model.
Parameters
----------
kwargs: dict
The inference arguments.
Returns
-------
bytes
The inference result.
"""
url = f"{self._base_url}/v1/flexible/infers"
params: Dict = { # type: ignore
"model": self._model_uid,
}
params.update(kwargs)
response = await self.session.post(url, json=params, headers=self.auth_headers)
if response.status != 200:
raise RuntimeError(
f"Failed to predict, detail: {await _get_error_string(response)}"
)
await _release_response(response)
return response.content
class AsyncClient:
def __init__(self, base_url, api_key: Optional[str] = None):
self.base_url = base_url
self._headers: Dict[str, str] = {}
self._cluster_authed = False
self.timeout = aiohttp.ClientTimeout(total=1800)
self.session = aiohttp.ClientSession(
connector=aiohttp.TCPConnector(force_close=True), timeout=self.timeout
)
self._check_cluster_authenticated()
if api_key is not None and self._cluster_authed:
self._headers["Authorization"] = f"Bearer {api_key}"
async def close(self):
"""Close the AsyncClient session."""
if self.session:
await self.session.close()
self.session = None
def __del__(self):
if self.session:
loop = asyncio.get_event_loop()
loop.create_task(self.close())
def _set_token(self, token: Optional[str]):
if not self._cluster_authed or token is None:
return
self._headers["Authorization"] = f"Bearer {token}"
def _get_token(self) -> Optional[str]:
return (
str(self._headers["Authorization"]).replace("Bearer ", "")
if "Authorization" in self._headers
else None
)
def _check_cluster_authenticated(self):
import requests
session = requests.Session()
url = f"{self.base_url}/v1/cluster/auth"
response = session.get(url)
# compatible with old version of xinference
if response.status_code == 404:
self._cluster_authed = False
else:
if response.status_code != 200:
response_data = response.json()
raise RuntimeError(
f"Failed to get cluster information, detail: {response_data['detail']}"
)
response_data = response.json()
self._cluster_authed = bool(response_data["auth"])
async def vllm_models(self) -> Dict[str, Any]:
url = f"{self.base_url}/v1/models/vllm-supported"
response = await self.session.get(url, headers=self._headers)
if response.status != 200:
response_data = await response.json()
await _release_response(response)
raise RuntimeError(
f"Failed to get cluster information, detail: {response_data['detail']}"
)
try:
response_data = await response.json()
await _release_response(response)
return response_data
except Exception as e:
raise RuntimeError(f"Error parsing JSON response: {e}")
async def login(self, username: str, password: str):
if not self._cluster_authed:
return
url = f"{self.base_url}/token"
payload = {"username": username, "password": password}
response = await self.session.post(url, json=payload)
if response.status != 200:
response_data = await response.json()
await _release_response(response)
raise RuntimeError(
f"Failed to get cluster information, detail: {response_data['detail']}"
)
response_data = await response.json()
await _release_response(response)
# Only bearer token for now
access_token = response_data["access_token"]
self._headers["Authorization"] = f"Bearer {access_token}"
async def list_models(self) -> Dict[str, Dict[str, Any]]:
"""
Retrieve the model specifications from the Server.
Returns
-------
Dict[str, Dict[str, Any]]
The collection of model specifications with their names on the server.
"""
url = f"{self.base_url}/v1/models"
response = await self.session.get(url, headers=self._headers)
if response.status != 200:
raise RuntimeError(
f"Failed to list model, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
model_list = response_data["data"]
return {item["id"]: item for item in model_list}
async def launch_model(
self,
model_name: str,
model_type: str = "LLM",
model_engine: Optional[str] = None,
model_uid: Optional[str] = None,
model_size_in_billions: Optional[Union[int, str, float]] = None,
model_format: Optional[str] = None,
quantization: Optional[str] = None,
replica: int = 1,
n_worker: int = 1,
n_gpu: Optional[Union[int, str]] = "auto",
peft_model_config: Optional[Dict] = None,
request_limits: Optional[int] = None,
worker_ip: Optional[str] = None,
gpu_idx: Optional[Union[int, List[int]]] = None,
model_path: Optional[str] = None,
**kwargs,
) -> str:
"""
Launch the model based on the parameters on the server via RESTful APIs.
Parameters
----------
model_name: str
The name of model.
model_type: str
type of model.
model_engine: Optional[str]
Specify the inference engine of the model when launching LLM.
model_uid: str
UID of model, auto generate a UUID if is None.
model_size_in_billions: Optional[Union[int, str, float]]
The size (in billions) of the model.
model_format: Optional[str]
The format of the model.
quantization: Optional[str]
The quantization of model.
replica: Optional[int]
The replica of model, default is 1.
n_worker: int
Number of workers to run.
n_gpu: Optional[Union[int, str]],
The number of GPUs used by the model, default is "auto". If n_worker>1, means number of GPUs per worker.
``n_gpu=None`` means cpu only, ``n_gpu=auto`` lets the system automatically determine the best number of GPUs to use.
peft_model_config: Optional[Dict]
- "lora_list": A List of PEFT (Parameter-Efficient Fine-Tuning) model and path.
- "image_lora_load_kwargs": A Dict of lora load parameters for image model
- "image_lora_fuse_kwargs": A Dict of lora fuse parameters for image model
request_limits: Optional[int]
The number of request limits for this model, default is None.
``request_limits=None`` means no limits for this model.
worker_ip: Optional[str]
Specify the worker ip where the model is located in a distributed scenario.
gpu_idx: Optional[Union[int, List[int]]]
Specify the GPU index where the model is located.
model_path: Optional[str]
Model path, if gguf format, should be the file path, otherwise, should be directory of the model.
**kwargs:
Any other parameters been specified. e.g. multimodal_projector for multimodal inference with the llama.cpp backend.
Returns
-------
str
The unique model_uid for the launched model.
"""
url = f"{self.base_url}/v1/models"
# convert float to int or string since the RESTful API does not accept float.
if isinstance(model_size_in_billions, float):
model_size_in_billions = convert_float_to_int_or_str(model_size_in_billions)
payload = {
"model_uid": model_uid,
"model_name": model_name,
"model_engine": model_engine,
"peft_model_config": peft_model_config,
"model_type": model_type,
"model_size_in_billions": model_size_in_billions,
"model_format": model_format,
"quantization": quantization,
"replica": replica,
"n_worker": n_worker,
"n_gpu": n_gpu,
"request_limits": request_limits,
"worker_ip": worker_ip,
"gpu_idx": gpu_idx,
"model_path": model_path,
}
wait_ready = kwargs.pop("wait_ready", True)
for key, value in kwargs.items():
payload[str(key)] = value
if wait_ready:
response = await self.session.post(url, json=payload, headers=self._headers)
else:
response = await self.session.post(
url, json=payload, headers=self._headers, params={"wait_ready": False}
)
if response.status != 200:
raise RuntimeError(
f"Failed to launch model, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data["model_uid"]
async def terminate_model(self, model_uid: str):
"""
Terminate the specific model running on the server.
Parameters
----------
model_uid: str
The unique id that identify the model we want.
Raises
------
RuntimeError
Report failure to get the wanted model with given model_uid. Provide details of failure through error message.
"""
url = f"{self.base_url}/v1/models/{model_uid}"
response = await self.session.delete(url, headers=self._headers)
if response.status != 200:
raise RuntimeError(
f"Failed to terminate model, detail: {await _get_error_string(response)}"
)
await _release_response(response)
async def get_launch_model_progress(self, model_uid: str) -> dict:
"""
Get progress of the specific model.
Parameters
----------
model_uid: str
The unique id that identify the model we want.
Returns
-------
result: dict
Result that contains progress.
Raises
------
RuntimeError
Report failure to get the wanted model with given model_uid. Provide details of failure through error message.
"""
url = f"{self.base_url}/v1/models/{model_uid}/progress"
response = await self.session.get(url, headers=self._headers)
if response.status != 200:
raise RuntimeError(
f"Fail to get model launching progress, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def cancel_launch_model(self, model_uid: str):
"""
Cancel launching model.
Parameters
----------
model_uid: str
The unique id that identify the model we want.
Raises
------
RuntimeError
Report failure to get the wanted model with given model_uid. Provide details of failure through error message.
"""
url = f"{self.base_url}/v1/models/{model_uid}/cancel"
response = await self.session.post(url, headers=self._headers)
if response.status != 200:
raise RuntimeError(
f"Fail to cancel launching model, detail: {await _get_error_string(response)}"
)
await _release_response(response)
async def get_instance_info(self, model_name: str, model_uid: str):
url = f"{self.base_url}/v1/models/instances"
response = await self.session.get(
url,
headers=self._headers,
params={"model_name": model_name, "model_uid": model_uid},
)
if response.status != 200:
raise RuntimeError("Failed to get instance info")
response_data = await response.json()
await _release_response(response)
return response_data
async def _get_supervisor_internal_address(self):
url = f"{self.base_url}/v1/address"
response = await self.session.get(url, headers=self._headers)
if response.status != 200:
raise RuntimeError("Failed to get supervisor internal address")
response_data = await response.json()
await _release_response(response)
return response_data
async def get_model(self, model_uid: str) -> AsyncRESTfulModelHandle:
"""
Launch the model based on the parameters on the server via RESTful APIs.
Parameters
----------
model_uid: str
The unique id that identify the model.
Returns
-------
ModelHandle
The corresponding Model Handler based on the Model specified in the uid:
- :obj:`xinference.client.handlers.GenerateModelHandle` -> provide handle to basic generate Model. e.g. Baichuan.
- :obj:`xinference.client.handlers.ChatModelHandle` -> provide handle to chat Model. e.g. Baichuan-chat.
Raises
------
RuntimeError
Report failure to get the wanted model with given model_uid. Provide details of failure through error message.
"""
url = f"{self.base_url}/v1/models/{model_uid}"
response = await self.session.get(url, headers=self._headers)
if response.status != 200:
raise RuntimeError(
f"Failed to get the model description, detail: {await _get_error_string(response)}"
)
desc = await response.json()
await _release_response(response)
if desc["model_type"] == "LLM":
if "chat" in desc["model_ability"]:
return AsyncRESTfulChatModelHandle(
model_uid, self.base_url, auth_headers=self._headers
)
elif "generate" in desc["model_ability"]:
return AsyncRESTfulGenerateModelHandle(
model_uid, self.base_url, auth_headers=self._headers
)
else:
raise ValueError(f"Unrecognized model ability: {desc['model_ability']}")
elif desc["model_type"] == "embedding":
return AsyncRESTfulEmbeddingModelHandle(
model_uid, self.base_url, auth_headers=self._headers
)
elif desc["model_type"] == "image":
return AsyncRESTfulImageModelHandle(
model_uid, self.base_url, auth_headers=self._headers
)
elif desc["model_type"] == "rerank":
return AsyncRESTfulRerankModelHandle(
model_uid, self.base_url, auth_headers=self._headers
)
elif desc["model_type"] == "audio":
return AsyncRESTfulAudioModelHandle(
model_uid, self.base_url, auth_headers=self._headers
)
elif desc["model_type"] == "video":
return AsyncRESTfulVideoModelHandle(
model_uid, self.base_url, auth_headers=self._headers
)
elif desc["model_type"] == "flexible":
return AsyncRESTfulFlexibleModelHandle(
model_uid, self.base_url, auth_headers=self._headers
)
else:
raise ValueError(f"Unknown model type:{desc['model_type']}")
async def describe_model(self, model_uid: str):
"""
Get model information via RESTful APIs.
Parameters
----------
model_uid: str
The unique id that identify the model.
Returns
-------
dict
A dictionary containing the following keys:
- "model_type": str
the type of the model determined by its function, e.g. "LLM" (Large Language Model)
- "model_name": str
the name of the specific LLM model family
- "model_lang": List[str]
the languages supported by the LLM model
- "model_ability": List[str]
the ability or capabilities of the LLM model
- "model_description": str
a detailed description of the LLM model
- "model_format": str
the format specification of the LLM model
- "model_size_in_billions": int
the size of the LLM model in billions
- "quantization": str
the quantization applied to the model
- "revision": str
the revision number of the LLM model specification
- "context_length": int
the maximum text length the LLM model can accommodate (include all input & output)
Raises
------
RuntimeError
Report failure to get the wanted model with given model_uid. Provide details of failure through error message.
"""
url = f"{self.base_url}/v1/models/{model_uid}"
response = await self.session.get(url, headers=self._headers)
if response.status != 200:
raise RuntimeError(
f"Failed to get the model description, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def register_model(
self,
model_type: str,
model: str,
persist: bool,
worker_ip: Optional[str] = None,
):
"""
Register a custom model.
Parameters
----------
model_type: str
The type of model.
model: str
The model definition. (refer to: https://inference.readthedocs.io/en/latest/models/custom.html)
worker_ip: Optional[str]
The IP address of the worker on which the model is running.
persist: bool
Raises
------
RuntimeError
Report failure to register the custom model. Provide details of failure through error message.
"""
url = f"{self.base_url}/v1/model_registrations/{model_type}"
request_body = {"model": model, "worker_ip": worker_ip, "persist": persist}
response = await self.session.post(
url, json=request_body, headers=self._headers
)
if response.status != 200:
raise RuntimeError(
f"Failed to register model, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def unregister_model(self, model_type: str, model_name: str):
"""
Unregister a custom model.
Parameters
----------
model_type: str
The type of model.
model_name: str
The name of the model
Raises
------
RuntimeError
Report failure to unregister the custom model. Provide details of failure through error message.
"""
url = f"{self.base_url}/v1/model_registrations/{model_type}/{model_name}"
response = await self.session.delete(url, headers=self._headers)
if response.status != 200:
raise RuntimeError(
f"Failed to register model, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def list_model_registrations(self, model_type: str) -> List[Dict[str, Any]]:
"""
List models registered on the server.
Parameters
----------
model_type: str
The type of the model.
Returns
-------
List[Dict[str, Any]]
The collection of registered models on the server.
Raises
------
RuntimeError
Report failure to list model registration. Provide details of failure through error message.
"""
url = f"{self.base_url}/v1/model_registrations/{model_type}"
response = await self.session.get(url, headers=self._headers)
if response.status != 200:
raise RuntimeError(
f"Failed to list model registration, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def list_cached_models(
self, model_name: Optional[str] = None, worker_ip: Optional[str] = None
) -> List[Dict[Any, Any]]:
"""
Get a list of cached models.
Parameters
----------
model_name: Optional[str]
The name of model.
worker_ip: Optional[str]
Specify the worker ip where the model is located in a distributed scenario.
Returns
-------
List[Dict[Any, Any]]
The collection of cached models on the server.
Raises
------
RuntimeError
Raised when the request fails, including the reason for the failure.
"""
url = f"{self.base_url}/v1/cache/models"
params = {
"model_name": model_name,
"worker_ip": worker_ip,
}
params = _filter_params(params)
response = await self.session.get(url, headers=self._headers, params=params)
if response.status != 200:
raise RuntimeError(
f"Failed to list cached model, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data.get("list")
async def list_deletable_models(
self, model_version: str, worker_ip: Optional[str] = None
) -> Dict[str, Any]:
"""
Get the cached models with the model path cached on the server.
Parameters
----------
model_version: str
The version of the model.
worker_ip: Optional[str]
Specify the worker ip where the model is located in a distributed scenario.
Returns
-------
Dict[str, Dict[str,str]]]
Dictionary with keys "model_name" and values model_file_location.
"""
url = f"{self.base_url}/v1/cache/models/files"
params = {
"model_version": model_version,
"worker_ip": worker_ip,
}
params = _filter_params(params)
response = await self.session.get(url, headers=self._headers, params=params)
if response.status != 200:
raise RuntimeError(
f"Failed to get paths by model name, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def confirm_and_remove_model(
self, model_version: str, worker_ip: Optional[str] = None
) -> bool:
"""
Remove the cached models with the model name cached on the server.
Parameters
----------
model_version: str
The version of the model.
worker_ip: Optional[str]
Specify the worker ip where the model is located in a distributed scenario.
Returns
-------
str
The response of the server.
"""
url = f"{self.base_url}/v1/cache/models"
params = {
"model_version": model_version,
"worker_ip": worker_ip,
}
params = _filter_params(params)
response = await self.session.delete(url, headers=self._headers, params=params)
if response.status != 200:
raise RuntimeError(
f"Failed to remove cached models, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data.get("result", False)
async def get_model_registration(
self, model_type: str, model_name: str
) -> Dict[str, Any]:
"""
Get the model with the model type and model name registered on the server.
Parameters
----------
model_type: str
The type of the model.
model_name: str
The name of the model.
Returns
-------
List[Dict[str, Any]]
The collection of registered models on the server.
"""
url = f"{self.base_url}/v1/model_registrations/{model_type}/{model_name}"
response = await self.session.get(url, headers=self._headers)
if response.status != 200:
raise RuntimeError(
f"Failed to list model registration, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def query_engine_by_model_name(
self, model_name: str, model_type: Optional[str] = "LLM"
):
"""
Get the engine parameters with the model name registered on the server.
Parameters
----------
model_name: str
The name of the model.
model_type: str
Model type, LLM by default.
Returns
-------
Dict[str, List[Dict[str, Any]]]
The supported engine parameters of registered models on the server.
"""
if not model_type:
url = f"{self.base_url}/v1/engines/{model_name}"
else:
url = f"{self.base_url}/v1/engines/{model_type}/{model_name}"
response = await self.session.get(url, headers=self._headers)
if response.status != 200:
raise RuntimeError(
f"Failed to query engine parameters by model name, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def abort_request(
self, model_uid: str, request_id: str, block_duration: int = 30
):
"""
Abort a request.
Abort a submitted request. If the request is finished or not found, this method will be a no-op.
Currently, this interface is only supported when batching is enabled for models on transformers backend.
Parameters
----------
model_uid: str
Model uid.
request_id: str
Request id.
block_duration: int
The duration to make the request id abort. If set to 0, the abort_request will be immediate, which may
prevent it from taking effect if it arrives before the request operation.
Returns
-------
Dict
Return empty dict.
"""
url = f"{self.base_url}/v1/models/{model_uid}/requests/{request_id}/abort"
response = await self.session.post(
url, headers=self._headers, json={"block_duration": block_duration}
)
if response.status != 200:
raise RuntimeError(
f"Failed to abort request, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def get_workers_info(self):
url = f"{self.base_url}/v1/workers"
response = await self.session.get(url, headers=self._headers)
if response.status != 200:
raise RuntimeError(
f"Failed to get workers info, detail: {await _get_error_string(response)}"
)
response_data = await response.json()
await _release_response(response)
return response_data
async def get_supervisor_info(self):
url = f"{self.base_url}/v1/supervisor"
response = await self.session.get(url, headers=self._headers)
if response.status != 200:
raise RuntimeError(
f"Failed to get supervisor info, detail: {await _get_error_string(response)}"
)
response_json = await response.json()
await _release_response(response)
return response_json
async def get_progress(self, request_id: str):
url = f"{self.base_url}/v1/requests/{request_id}/progress"
response = await self.session.get(url, headers=self._headers)
if response.status != 200:
raise RuntimeError(
f"Failed to get progress, detail: {await _get_error_string(response)}"
)
response_json = await response.json()
await _release_response(response)
return response_json
async def abort_cluster(self):
url = f"{self.base_url}/v1/clusters"
response = await self.session.delete(url, headers=self._headers)
if response.status != 200:
raise RuntimeError(
f"Failed to abort cluster, detail: {await _get_error_string(response)}"
)
response_json = await response.json()
await _release_response(response)
return response_json
================================================
FILE: src/backend/bisheng/core/ai/rerank/xinference/client/restful/restful_client.py
================================================
# Copyright 2022-2023 XProbe Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import json
from typing import TYPE_CHECKING, Any, Dict, Iterator, List, Optional, Union
import requests
from ..common import convert_float_to_int_or_str, streaming_response_iterator
if TYPE_CHECKING:
from ...types import (
ChatCompletion,
ChatCompletionChunk,
Completion,
CompletionChunk,
Embedding,
ImageList,
PytorchGenerateConfig,
VideoList,
)
def _get_error_string(response: requests.Response) -> str:
try:
if response.content:
return response.json()["detail"]
except Exception:
pass
try:
response.raise_for_status()
except requests.HTTPError as e:
return str(e)
return "Unknown error"
class RESTfulModelHandle:
"""
A sync model interface (for RESTful client) which provides type hints that makes it much easier to use xinference
programmatically.
"""
def __init__(self, model_uid: str, base_url: str, auth_headers: Dict):
self._model_uid = model_uid
self._base_url = base_url
self.auth_headers = auth_headers
self.session = requests.Session()
def close(self):
"""
Close the session.
"""
if self.session:
self.session.close()
self.session = None
def __del__(self):
if self.session:
self.close()
class RESTfulEmbeddingModelHandle(RESTfulModelHandle):
def create_embedding(self, input: Union[str, List[str]], **kwargs) -> "Embedding":
"""
Create an Embedding from user input via RESTful APIs.
Parameters
----------
input: Union[str, List[str]]
Input text to embed, encoded as a string or array of tokens.
To embed multiple inputs in a single request, pass an array of strings or array of token arrays.
Returns
-------
Embedding
The resulted Embedding vector that can be easily consumed by machine learning models and algorithms.
Raises
------
RuntimeError
Report the failure of embeddings and provide the error message.
"""
url = f"{self._base_url}/v1/embeddings"
request_body = {
"model": self._model_uid,
"input": input,
}
request_body.update(kwargs)
response = self.session.post(url, json=request_body, headers=self.auth_headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to create the embeddings, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
def convert_ids_to_tokens(
self, input: Union[List, List[List]], **kwargs
) -> List[str]:
"""
Convert token IDs to human readable tokens via RESTful APIs.
Parameters
----------
input: Union[List, List[List]]
Input token IDs to convert, can be a single list of token IDs or a list of token ID lists.
To convert multiple sequences in a single request, pass a list of token ID lists.
Returns
-------
list
A list of decoded tokens in human readable format.
Raises
------
RuntimeError
Report the failure of token conversion and provide the error message.
"""
url = f"{self._base_url}/v1/convert_ids_to_tokens"
request_body = {
"model": self._model_uid,
"input": input,
}
request_body.update(kwargs)
response = self.session.post(url, json=request_body, headers=self.auth_headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to decode token ids, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
class RESTfulRerankModelHandle(RESTfulModelHandle):
def rerank(
self,
documents: List[str],
query: str,
top_n: Optional[int] = None,
max_chunks_per_doc: Optional[int] = None,
return_documents: Optional[bool] = None,
return_len: Optional[bool] = None,
**kwargs,
):
"""
Returns an ordered list of documents ordered by their relevance to the provided query.
Parameters
----------
query: str
The search query
documents: List[str]
The documents to rerank
top_n: int
The number of results to return, defaults to returning all results
max_chunks_per_doc: int
The maximum number of chunks derived from a document
return_documents: bool
if return documents
return_len: bool
if return tokens len
Returns
-------
Scores
The scores of documents ordered by their relevance to the provided query
Raises
------
RuntimeError
Report the failure of rerank and provide the error message.
"""
url = f"{self._base_url}/v1/rerank"
request_body = {
"model": self._model_uid,
"documents": documents,
"query": query,
"top_n": top_n,
"max_chunks_per_doc": max_chunks_per_doc,
"return_documents": return_documents,
"return_len": return_len,
"kwargs": json.dumps(kwargs),
}
request_body.update(kwargs)
response = self.session.post(url, json=request_body, headers=self.auth_headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to rerank documents, detail: {response.json()['detail']}"
)
response_data = response.json()
return response_data
class RESTfulImageModelHandle(RESTfulModelHandle):
def text_to_image(
self,
prompt: str,
n: int = 1,
size: str = "1024*1024",
response_format: str = "url",
**kwargs,
) -> "ImageList":
"""
Creates an image by the input text.
Parameters
----------
prompt: `str` or `List[str]`
The prompt or prompts to guide image generation. If not defined, you need to pass `prompt_embeds`.
n: `int`, defaults to 1
The number of images to generate per prompt. Must be between 1 and 10.
size: `str`, defaults to `1024*1024`
The width*height in pixels of the generated image. Must be one of 256x256, 512x512, or 1024x1024.
response_format: `str`, defaults to `url`
The format in which the generated images are returned. Must be one of url or b64_json.
Returns
-------
ImageList
A list of image objects.
"""
url = f"{self._base_url}/v1/images/generations"
request_body = {
"model": self._model_uid,
"prompt": prompt,
"n": n,
"size": size,
"response_format": response_format,
"kwargs": json.dumps(kwargs),
}
response = self.session.post(url, json=request_body, headers=self.auth_headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to create the images, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
def image_to_image(
self,
image: Union[str, bytes, List[Union[str, bytes]]],
prompt: str,
negative_prompt: Optional[str] = None,
n: int = 1,
size: Optional[str] = None,
response_format: str = "url",
**kwargs,
) -> "ImageList":
"""
Creates an image by the input text.
Parameters
----------
image: `Union[str, bytes, List[Union[str, bytes]]]`
The ControlNet input condition to provide guidance to the `unet` for generation. If the type is
specified as `torch.FloatTensor`, it is passed to ControlNet as is. `PIL.Image.Image` can also be
accepted as an image. The dimensions of the output image defaults to `image`'s dimensions. If height
and/or width are passed, `image` is resized accordingly. If multiple ControlNets are specified in
`init`, images must be passed as a list such that each element of the list can be correctly batched for
input to a single ControlNet.
prompt: `str` or `List[str]`
The prompt or prompts to guide image generation. If not defined, you need to pass `prompt_embeds`.
negative_prompt (`str` or `List[str]`, *optional*):
The prompt or prompts not to guide the image generation. If not defined, one has to pass
`negative_prompt_embeds` instead. Ignored when not using guidance (i.e., ignored if `guidance_scale` is
less than `1`).
n: `int`, defaults to 1
The number of images to generate per prompt. Must be between 1 and 10.
size: `str`, defaults to `1024*1024`
The width*height in pixels of the generated image. Must be one of 256x256, 512x512, or 1024x1024.
response_format: `str`, defaults to `url`
The format in which the generated images are returned. Must be one of url or b64_json.
Returns
-------
ImageList
A list of image objects.
:param prompt:
:param image:
"""
url = f"{self._base_url}/v1/images/variations"
params = {
"model": self._model_uid,
"prompt": prompt,
"negative_prompt": negative_prompt,
"n": n,
"size": size,
"response_format": response_format,
"kwargs": json.dumps(kwargs),
}
files: List[Any] = []
for key, value in params.items():
files.append((key, (None, value)))
# Handle both single image and list of images
if isinstance(image, list):
if len(image) == 0:
raise ValueError("Image list cannot be empty")
elif len(image) == 1:
# Single image in list, use it directly
files.append(("image", ("image", image[0], "application/octet-stream")))
else:
# Multiple images - send all images with same field name
# FastAPI will collect them into a list
for img_data in image:
files.append(
("image", ("image", img_data, "application/octet-stream"))
)
else:
# Single image
files.append(("image", ("image", image, "application/octet-stream")))
response = self.session.post(url, files=files, headers=self.auth_headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to variants the images, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
def image_edit(
self,
image: Union[Union[str, bytes], List[Union[str, bytes]]],
prompt: str,
mask: Optional[Union[str, bytes]] = None,
n: int = 1,
size: Optional[str] = None,
response_format: str = "url",
**kwargs,
) -> "ImageList":
"""
Edit image(s) by the input text and optional mask.
Parameters
----------
image: `Union[Union[str, bytes], List[Union[str, bytes]]]`
The input image(s) to edit. Can be:
- Single image: file path, URL, or binary image data
- Multiple images: list of file paths, URLs, or binary image data
When multiple images are provided, the first image is used as the primary image
and subsequent images are used as reference images for better editing results.
prompt: `str`
The prompt or prompts to guide image editing. If not defined, you need to pass `prompt_embeds`.
mask: `Optional[Union[str, bytes]]`, optional
An optional mask image. White pixels in the mask are repainted while black pixels are preserved.
If provided, this will trigger inpainting mode. If not provided, this will trigger image-to-image mode.
n: `int`, defaults to 1
The number of images to generate per prompt. Must be between 1 and 10.
size: `Optional[str]`, optional
The width*height in pixels of the generated image. If not specified, uses the original image size.
response_format: `str`, defaults to `url`
The format in which the generated images are returned. Must be one of url or b64_json.
**kwargs
Additional parameters to pass to the model.
Returns
-------
ImageList
A list of edited image objects.
Raises
------
RuntimeError
If the image editing request fails.
Examples
--------
# Single image editing
result = model.image_edit(
image="path/to/image.png",
prompt="make this image look like a painting"
)
# Multiple image editing with reference images
result = model.image_edit(
image=["primary_image.png", "reference1.jpg", "reference2.png"],
prompt="edit the main image using the style from reference images"
)
"""
url = f"{self._base_url}/v1/images/edits"
params = {
"model": self._model_uid,
"prompt": prompt,
"n": n,
"size": size,
"response_format": response_format,
"kwargs": json.dumps(kwargs),
}
files: List[Any] = []
for key, value in params.items():
if value is not None:
files.append((key, (None, value)))
# Handle single image or multiple images using requests format
if isinstance(image, list):
# Validate image list is not empty
if len(image) == 0:
raise ValueError("Image list cannot be empty")
# Multiple images - send as image[] array
for i, img in enumerate(image):
if isinstance(img, str):
# File path - open file
f = open(img, "rb")
files.append(
(f"image[]", (f"image_{i}", f, "application/octet-stream"))
)
else:
# Binary data
files.append(
(f"image[]", (f"image_{i}", img, "application/octet-stream"))
)
else:
# Single image
if isinstance(image, str):
# File path - open file
f = open(image, "rb")
files.append(("image", ("image", f, "application/octet-stream")))
else:
# Binary data
files.append(("image", ("image", image, "application/octet-stream")))
if mask is not None:
if isinstance(mask, str):
# File path - open file
f = open(mask, "rb")
files.append(("mask", ("mask", f, "application/octet-stream")))
else:
# Binary data
files.append(("mask", ("mask", mask, "application/octet-stream")))
try:
response = self.session.post(url, files=files, headers=self.auth_headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to edit the images, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
finally:
# Close all opened files
for file_item in files:
if (
len(file_item) >= 2
and hasattr(file_item[1], "__len__")
and len(file_item[1]) >= 2
):
file_obj = file_item[1][1]
if hasattr(file_obj, "close"):
file_obj.close()
def inpainting(
self,
image: Union[str, bytes],
mask_image: Union[str, bytes],
prompt: str,
negative_prompt: Optional[str] = None,
n: int = 1,
size: Optional[str] = None,
response_format: str = "url",
**kwargs,
) -> "ImageList":
"""
Inpaint an image by the input text.
Parameters
----------
image: `Union[str, bytes]`
an image batch to be inpainted (which parts of the image to
be masked out with `mask_image` and repainted according to `prompt`). For both numpy array and pytorch
tensor, the expected value range is between `[0, 1]` If it's a tensor or a list or tensors, the
expected shape should be `(B, C, H, W)` or `(C, H, W)`. If it is a numpy array or a list of arrays, the
expected shape should be `(B, H, W, C)` or `(H, W, C)` It can also accept image latents as `image`, but
if passing latents directly it is not encoded again.
mask_image: `Union[str, bytes]`
representing an image batch to mask `image`. White pixels in the mask
are repainted while black pixels are preserved. If `mask_image` is a PIL image, it is converted to a
single channel (luminance) before use. If it's a numpy array or pytorch tensor, it should contain one
color channel (L) instead of 3, so the expected shape for pytorch tensor would be `(B, 1, H, W)`, `(B,
H, W)`, `(1, H, W)`, `(H, W)`. And for numpy array would be for `(B, H, W, 1)`, `(B, H, W)`, `(H, W,
1)`, or `(H, W)`.
prompt: `str` or `List[str]`
The prompt or prompts to guide image generation. If not defined, you need to pass `prompt_embeds`.
negative_prompt (`str` or `List[str]`, *optional*):
The prompt or prompts not to guide the image generation. If not defined, one has to pass
`negative_prompt_embeds` instead. Ignored when not using guidance (i.e., ignored if `guidance_scale` is
less than `1`).
n: `int`, defaults to 1
The number of images to generate per prompt. Must be between 1 and 10.
size: `str`, defaults to None
The width*height in pixels of the generated image.
response_format: `str`, defaults to `url`
The format in which the generated images are returned. Must be one of url or b64_json.
Returns
-------
ImageList
A list of image objects.
:param prompt:
:param image:
"""
url = f"{self._base_url}/v1/images/inpainting"
params = {
"model": self._model_uid,
"prompt": prompt,
"negative_prompt": negative_prompt,
"n": n,
"size": size,
"response_format": response_format,
"kwargs": json.dumps(kwargs),
}
files: List[Any] = []
for key, value in params.items():
files.append((key, (None, value)))
files.append(("image", ("image", image, "application/octet-stream")))
files.append(
("mask_image", ("mask_image", mask_image, "application/octet-stream"))
)
response = self.session.post(url, files=files, headers=self.auth_headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to inpaint the images, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
def ocr(self, image: Union[str, bytes], **kwargs):
url = f"{self._base_url}/v1/images/ocr"
params = {
"model": self._model_uid,
"kwargs": json.dumps(kwargs),
}
files: List[Any] = []
for key, value in params.items():
files.append((key, (None, value)))
files.append(("image", ("image", image, "application/octet-stream")))
response = self.session.post(url, files=files, headers=self.auth_headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to ocr the images, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
class RESTfulVideoModelHandle(RESTfulModelHandle):
def text_to_video(
self,
prompt: str,
n: int = 1,
**kwargs,
) -> "VideoList":
"""
Creates a video by the input text.
Parameters
----------
prompt: `str` or `List[str]`
The prompt or prompts to guide video generation. If not defined, you need to pass `prompt_embeds`.
n: `int`, defaults to 1
The number of videos to generate per prompt. Must be between 1 and 10.
Returns
-------
VideoList
A list of video objects.
"""
url = f"{self._base_url}/v1/video/generations"
request_body = {
"model": self._model_uid,
"prompt": prompt,
"n": n,
"kwargs": json.dumps(kwargs),
}
response = self.session.post(url, json=request_body, headers=self.auth_headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to create the video, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
def image_to_video(
self,
image: Union[str, bytes],
prompt: str,
negative_prompt: Optional[str] = None,
n: int = 1,
**kwargs,
) -> "VideoList":
"""
Creates a video by the input image and text.
Parameters
----------
image: `Union[str, bytes]`
The input image to condition the generation on.
prompt: `str` or `List[str]`
The prompt or prompts to guide video generation. If not defined, you need to pass `prompt_embeds`.
negative_prompt (`str` or `List[str]`, *optional*):
The prompt or prompts not to guide the image generation.
n: `int`, defaults to 1
The number of videos to generate per prompt. Must be between 1 and 10.
Returns
-------
VideoList
A list of video objects.
"""
url = f"{self._base_url}/v1/video/generations/image"
params = {
"model": self._model_uid,
"prompt": prompt,
"negative_prompt": negative_prompt,
"n": n,
"kwargs": json.dumps(kwargs),
}
files: List[Any] = []
for key, value in params.items():
files.append((key, (None, value)))
files.append(("image", ("image", image, "application/octet-stream")))
response = self.session.post(url, files=files, headers=self.auth_headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to create the video from image, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
def flf_to_video(
self,
first_frame: Union[str, bytes],
last_frame: Union[str, bytes],
prompt: str,
negative_prompt: Optional[str] = None,
n: int = 1,
**kwargs,
) -> "VideoList":
"""
Creates a video by the first frame, last frame and text.
Parameters
----------
first_frame: `Union[str, bytes]`
The first frame to condition the generation on.
last_frame: `Union[str, bytes]`
The last frame to condition the generation on.
prompt: `str` or `List[str]`
The prompt or prompts to guide video generation. If not defined, you need to pass `prompt_embeds`.
negative_prompt (`str` or `List[str]`, *optional*):
The prompt or prompts not to guide the image generation.
n: `int`, defaults to 1
The number of videos to generate per prompt. Must be between 1 and 10.
Returns
-------
VideoList
A list of video objects.
"""
url = f"{self._base_url}/v1/video/generations/flf"
params = {
"model": self._model_uid,
"prompt": prompt,
"negative_prompt": negative_prompt,
"n": n,
"kwargs": json.dumps(kwargs),
}
files: List[Any] = []
for key, value in params.items():
files.append((key, (None, value)))
files.append(
("first_frame", ("image", first_frame, "application/octet-stream"))
)
files.append(("last_frame", ("image", last_frame, "application/octet-stream")))
response = self.session.post(url, files=files, headers=self.auth_headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to create the video from image, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
class RESTfulGenerateModelHandle(RESTfulModelHandle):
def generate(
self,
prompt: str,
generate_config: Optional["PytorchGenerateConfig"] = None,
) -> Union["Completion", Iterator["CompletionChunk"]]:
"""
Creates a completion for the provided prompt and parameters via RESTful APIs.
Parameters
----------
prompt: str
The user's message or user's input.
generate_config: Optional["PytorchGenerateConfig"]
Additional configuration for the chat generation.
"PytorchGenerateConfig" -> Configuration for pytorch model
Returns
-------
Union["Completion", Iterator["CompletionChunk"]]
Stream is a parameter in generate_config.
When stream is set to True, the function will return Iterator["CompletionChunk"].
When stream is set to False, the function will return "Completion".
Raises
------
RuntimeError
Fail to generate the completion from the server. Detailed information provided in error message.
"""
url = f"{self._base_url}/v1/completions"
request_body: Dict[str, Any] = {"model": self._model_uid, "prompt": prompt}
if generate_config is not None:
for key, value in generate_config.items():
request_body[key] = value
stream = bool(generate_config and generate_config.get("stream"))
response = self.session.post(
url, json=request_body, stream=stream, headers=self.auth_headers
)
if response.status_code != 200:
raise RuntimeError(
f"Failed to generate completion, detail: {_get_error_string(response)}"
)
if stream:
return streaming_response_iterator(response.iter_lines())
response_data = response.json()
return response_data
class RESTfulChatModelHandle(RESTfulGenerateModelHandle):
def chat(
self,
messages: List[Dict],
tools: Optional[List[Dict]] = None,
generate_config: Optional["PytorchGenerateConfig"] = None,
) -> Union["ChatCompletion", Iterator["ChatCompletionChunk"]]:
"""
Given a list of messages comprising a conversation, the model will return a response via RESTful APIs.
Parameters
----------
messages: List[Dict]
A list of messages comprising the conversation so far.
tools: Optional[List[Dict]]
A tool list.
generate_config: Optional["PytorchGenerateConfig"]
Additional configuration for the chat generation.
"PytorchGenerateConfig" -> configuration for pytorch model
Returns
-------
Union["ChatCompletion", Iterator["ChatCompletionChunk"]]
Stream is a parameter in generate_config.
When stream is set to True, the function will return Iterator["ChatCompletionChunk"].
When stream is set to False, the function will return "ChatCompletion".
Raises
------
RuntimeError
Report the failure to generate the chat from the server. Detailed information provided in error message.
"""
url = f"{self._base_url}/v1/chat/completions"
request_body: Dict[str, Any] = {
"model": self._model_uid,
"messages": messages,
}
if tools is not None:
request_body["tools"] = tools
if generate_config is not None:
for key, value in generate_config.items():
request_body[key] = value
stream = bool(generate_config and generate_config.get("stream"))
response = self.session.post(
url, json=request_body, stream=stream, headers=self.auth_headers
)
if response.status_code != 200:
raise RuntimeError(
f"Failed to generate chat completion, detail: {_get_error_string(response)}"
)
if stream:
return streaming_response_iterator(response.iter_lines())
response_data = response.json()
return response_data
class RESTfulAudioModelHandle(RESTfulModelHandle):
def transcriptions(
self,
audio: bytes,
language: Optional[str] = None,
prompt: Optional[str] = None,
response_format: Optional[str] = "json",
temperature: Optional[float] = 0,
timestamp_granularities: Optional[List[str]] = None,
**kwargs,
):
"""
Transcribes audio into the input language.
Parameters
----------
audio: bytes
The audio file object (not file name) to transcribe, in one of these formats: flac, mp3, mp4, mpeg,
mpga, m4a, ogg, wav, or webm.
language: Optional[str]
The language of the input audio. Supplying the input language in ISO-639-1
(https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) format will improve accuracy and latency.
prompt: Optional[str]
An optional text to guide the model's style or continue a previous audio segment.
The prompt should match the audio language.
response_format: Optional[str], defaults to json
The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.
temperature: Optional[float], defaults to 0
The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random,
while lower values like 0.2 will make it more focused and deterministic.
If set to 0, the model will use log probability to automatically increase the temperature
until certain thresholds are hit.
timestamp_granularities: Optional[List[str]], default is None.
The timestamp granularities to populate for this transcription. response_format must be set verbose_json
to use timestamp granularities. Either or both of these options are supported: word, or segment.
Note: There is no additional latency for segment timestamps, but generating word timestamps incurs
additional latency.
Returns
-------
The transcribed text.
"""
url = f"{self._base_url}/v1/audio/transcriptions"
params = {
"model": self._model_uid,
"language": language,
"prompt": prompt,
"response_format": response_format,
"temperature": temperature,
"timestamp_granularities[]": timestamp_granularities,
"kwargs": json.dumps(kwargs),
}
files: List[Any] = []
files.append(("file", ("file", audio, "application/octet-stream")))
response = self.session.post(
url, data=params, files=files, headers=self.auth_headers
)
if response.status_code != 200:
raise RuntimeError(
f"Failed to transcribe the audio, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
def translations(
self,
audio: bytes,
language: Optional[str] = None,
prompt: Optional[str] = None,
response_format: Optional[str] = "json",
temperature: Optional[float] = 0,
timestamp_granularities: Optional[List[str]] = None,
):
"""
Translates audio into English.
Parameters
----------
audio: bytes
The audio file object (not file name) to transcribe, in one of these formats: flac, mp3, mp4, mpeg,
mpga, m4a, ogg, wav, or webm.
language: Optional[str]
The language of the input audio. Supplying the input language in ISO-639-1
(https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) format will improve accuracy and latency.
prompt: Optional[str]
An optional text to guide the model's style or continue a previous audio segment.
The prompt should match the audio language.
response_format: Optional[str], defaults to json
The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.
temperature: Optional[float], defaults to 0
The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random,
while lower values like 0.2 will make it more focused and deterministic.
If set to 0, the model will use log probability to automatically increase the temperature
until certain thresholds are hit.
timestamp_granularities: Optional[List[str]], default is None.
The timestamp granularities to populate for this transcription. response_format must be set verbose_json
to use timestamp granularities. Either or both of these options are supported: word, or segment.
Note: There is no additional latency for segment timestamps, but generating word timestamps incurs
additional latency.
Returns
-------
The translated text.
"""
url = f"{self._base_url}/v1/audio/translations"
params = {
"model": self._model_uid,
"language": language,
"prompt": prompt,
"response_format": response_format,
"temperature": temperature,
"timestamp_granularities[]": timestamp_granularities,
}
files: List[Any] = []
files.append(("file", ("file", audio, "application/octet-stream")))
response = self.session.post(
url, data=params, files=files, headers=self.auth_headers
)
if response.status_code != 200:
raise RuntimeError(
f"Failed to translate the audio, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
def speech(
self,
input: str,
voice: str = "",
response_format: str = "mp3",
speed: float = 1.0,
stream: bool = False,
prompt_speech: Optional[bytes] = None,
prompt_latent: Optional[bytes] = None,
**kwargs,
):
"""
Generates audio from the input text.
Parameters
----------
input: str
The text to generate audio for. The maximum length is 4096 characters.
voice: str
The voice to use when generating the audio.
response_format: str
The format to audio in.
speed: str
The speed of the generated audio.
stream: bool
Use stream or not.
prompt_speech: bytes
The audio bytes to be provided to the model.
prompt_latent: bytes
The latent bytes to be provided to the model.
Returns
-------
bytes
The generated audio binary.
"""
url = f"{self._base_url}/v1/audio/speech"
params = {
"model": self._model_uid,
"input": input,
"voice": voice,
"response_format": response_format,
"speed": speed,
"stream": stream,
"kwargs": json.dumps(kwargs),
}
files: List[Any] = []
if prompt_speech:
files.append(
(
"prompt_speech",
("prompt_speech", prompt_speech, "application/octet-stream"),
)
)
if prompt_latent:
files.append(
(
"prompt_latent",
("prompt_latent", prompt_latent, "application/octet-stream"),
)
)
if files:
response = self.session.post(
url, data=params, files=files, headers=self.auth_headers, stream=stream
)
else:
response = self.session.post(
url, json=params, headers=self.auth_headers, stream=stream
)
if response.status_code != 200:
raise RuntimeError(
f"Failed to speech the text, detail: {_get_error_string(response)}"
)
if stream:
return response.iter_content(chunk_size=1024)
return response.content
class RESTfulFlexibleModelHandle(RESTfulModelHandle):
def infer(
self,
*args,
**kwargs,
):
"""
Call flexible model.
Parameters
----------
kwargs: dict
The inference arguments.
Returns
-------
bytes
The inference result.
"""
url = f"{self._base_url}/v1/flexible/infers"
params = {
"model": self._model_uid,
"args": args,
}
params.update(kwargs)
response = self.session.post(url, json=params, headers=self.auth_headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to predict, detail: {_get_error_string(response)}"
)
return response.json()
class Client:
def __init__(self, base_url, api_key: Optional[str] = None):
self.base_url = base_url
self._headers: Dict[str, str] = {}
self._cluster_authed = False
self.session = requests.Session()
self._check_cluster_authenticated()
if api_key is not None and self._cluster_authed:
self._headers["Authorization"] = f"Bearer {api_key}"
def close(self):
"""
Close the session.
"""
if self.session:
self.session.close()
self.session = None
def __del__(self):
if self.session:
self.close()
def _set_token(self, token: Optional[str]):
if not self._cluster_authed or token is None:
return
self._headers["Authorization"] = f"Bearer {token}"
def _get_token(self) -> Optional[str]:
return (
str(self._headers["Authorization"]).replace("Bearer ", "")
if "Authorization" in self._headers
else None
)
def _check_cluster_authenticated(self):
url = f"{self.base_url}/v1/cluster/auth"
response = self.session.get(url)
# compatible with old version of xinference
if response.status_code == 404:
self._cluster_authed = False
else:
if response.status_code != 200:
raise RuntimeError(
f"Failed to get cluster information, detail: {response.json()['detail']}"
)
response_data = response.json()
self._cluster_authed = bool(response_data["auth"])
def vllm_models(self) -> Dict[str, Any]:
url = f"{self.base_url}/v1/models/vllm-supported"
response = self.session.get(url, headers=self._headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to fetch VLLM models. detail: {response.json()['detail']}"
)
try:
return response.json()
except Exception as e:
raise RuntimeError(f"Error parsing JSON response: {e}")
def login(self, username: str, password: str):
if not self._cluster_authed:
return
url = f"{self.base_url}/token"
payload = {"username": username, "password": password}
response = self.session.post(url, json=payload)
if response.status_code != 200:
raise RuntimeError(f"Failed to login, detail: {response.json()['detail']}")
response_data = response.json()
# Only bearer token for now
access_token = response_data["access_token"]
self._headers["Authorization"] = f"Bearer {access_token}"
def list_models(self) -> Dict[str, Dict[str, Any]]:
"""
Retrieve the model specifications from the Server.
Returns
-------
Dict[str, Dict[str, Any]]
The collection of model specifications with their names on the server.
"""
url = f"{self.base_url}/v1/models"
response = self.session.get(url, headers=self._headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to list model, detail: {_get_error_string(response)}"
)
response_data = response.json()
model_list = response_data["data"]
return {item["id"]: item for item in model_list}
def launch_model(
self,
model_name: str,
model_type: str = "LLM",
model_engine: Optional[str] = None,
model_uid: Optional[str] = None,
model_size_in_billions: Optional[Union[int, str, float]] = None,
model_format: Optional[str] = None,
quantization: Optional[str] = None,
replica: int = 1,
n_worker: int = 1,
n_gpu: Optional[Union[int, str]] = "auto",
peft_model_config: Optional[Dict] = None,
request_limits: Optional[int] = None,
worker_ip: Optional[str] = None,
gpu_idx: Optional[Union[int, List[int]]] = None,
model_path: Optional[str] = None,
enable_virtual_env: Optional[bool] = None,
virtual_env_packages: Optional[List[str]] = None,
envs: Optional[Dict[str, str]] = None,
**kwargs,
) -> str:
"""
Launch the model based on the parameters on the server via RESTful APIs.
Parameters
----------
model_name: str
The name of model.
model_type: str
type of model.
model_engine: Optional[str]
Specify the inference engine of the model when launching LLM.
model_uid: str
UID of model, auto generate a UUID if is None.
model_size_in_billions: Optional[Union[int, str, float]]
The size (in billions) of the model.
model_format: Optional[str]
The format of the model.
quantization: Optional[str]
The quantization of model.
replica: Optional[int]
The replica of model, default is 1.
n_worker: int
Number of workers to run.
n_gpu: Optional[Union[int, str]],
The number of GPUs used by the model, default is "auto". If n_worker>1, means number of GPUs per worker.
``n_gpu=None`` means cpu only, ``n_gpu=auto`` lets the system automatically determine the best number of GPUs to use.
peft_model_config: Optional[Dict]
- "lora_list": A List of PEFT (Parameter-Efficient Fine-Tuning) model and path.
- "image_lora_load_kwargs": A Dict of lora load parameters for image model
- "image_lora_fuse_kwargs": A Dict of lora fuse parameters for image model
request_limits: Optional[int]
The number of request limits for this model, default is None.
``request_limits=None`` means no limits for this model.
worker_ip: Optional[str]
Specify the worker ip where the model is located in a distributed scenario.
gpu_idx: Optional[Union[int, List[int]]]
Specify the GPU index where the model is located.
model_path: Optional[str]
Model path, if gguf format, should be the file path, otherwise, should be directory of the model.
enable_virtual_env: Optional[bool]
If enable virtual env.
virtual_env_packages: Optional[List[str]]
Packages to specify in virtual env, can be used to override builtin packages in virtual env.
envs: Optional[Dict[str, str]]
Environment variables to pass when launching model.
**kwargs:
Any other parameters been specified. e.g. multimodal_projector for multimodal inference with the llama.cpp backend.
Returns
-------
str
The unique model_uid for the launched model.
"""
url = f"{self.base_url}/v1/models"
# convert float to int or string since the RESTful API does not accept float.
if isinstance(model_size_in_billions, float):
model_size_in_billions = convert_float_to_int_or_str(model_size_in_billions)
payload = {
"model_uid": model_uid,
"model_name": model_name,
"model_engine": model_engine,
"peft_model_config": peft_model_config,
"model_type": model_type,
"model_size_in_billions": model_size_in_billions,
"model_format": model_format,
"quantization": quantization,
"replica": replica,
"n_worker": n_worker,
"n_gpu": n_gpu,
"request_limits": request_limits,
"worker_ip": worker_ip,
"gpu_idx": gpu_idx,
"model_path": model_path,
"enable_virtual_env": enable_virtual_env,
"virtual_env_packages": virtual_env_packages,
"envs": envs,
}
wait_ready = kwargs.pop("wait_ready", True)
for key, value in kwargs.items():
payload[str(key)] = value
if wait_ready:
response = self.session.post(url, json=payload, headers=self._headers)
else:
response = self.session.post(
url, json=payload, headers=self._headers, params={"wait_ready": False}
)
if response.status_code != 200:
raise RuntimeError(
f"Failed to launch model, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data["model_uid"]
def terminate_model(self, model_uid: str):
"""
Terminate the specific model running on the server.
Parameters
----------
model_uid: str
The unique id that identify the model we want.
Raises
------
RuntimeError
Report failure to get the wanted model with given model_uid. Provide details of failure through error message.
"""
url = f"{self.base_url}/v1/models/{model_uid}"
response = self.session.delete(url, headers=self._headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to terminate model, detail: {_get_error_string(response)}"
)
def get_launch_model_progress(self, model_uid: str) -> dict:
"""
Get progress of the specific model.
Parameters
----------
model_uid: str
The unique id that identify the model we want.
Returns
-------
result: dict
Result that contains progress.
Raises
------
RuntimeError
Report failure to get the wanted model with given model_uid. Provide details of failure through error message.
"""
url = f"{self.base_url}/v1/models/{model_uid}/progress"
response = self.session.get(url, headers=self._headers)
if response.status_code != 200:
raise RuntimeError(
f"Fail to get model launching progress, detail: {_get_error_string(response)}"
)
return response.json()
def cancel_launch_model(self, model_uid: str):
"""
Cancel launching model.
Parameters
----------
model_uid: str
The unique id that identify the model we want.
Raises
------
RuntimeError
Report failure to get the wanted model with given model_uid. Provide details of failure through error message.
"""
url = f"{self.base_url}/v1/models/{model_uid}/cancel"
response = self.session.post(url, headers=self._headers)
if response.status_code != 200:
raise RuntimeError(
f"Fail to cancel launching model, detail: {_get_error_string(response)}"
)
def get_instance_info(self, model_name: str, model_uid: str):
url = f"{self.base_url}/v1/models/instances"
response = self.session.get(
url,
headers=self._headers,
params={"model_name": model_name, "model_uid": model_uid},
)
if response.status_code != 200:
raise RuntimeError("Failed to get instance info")
response_data = response.json()
return response_data
def _get_supervisor_internal_address(self):
url = f"{self.base_url}/v1/address"
response = self.session.get(url, headers=self._headers)
if response.status_code != 200:
raise RuntimeError("Failed to get supervisor internal address")
response_data = response.json()
return response_data
def get_model(self, model_uid: str) -> RESTfulModelHandle:
"""
Launch the model based on the parameters on the server via RESTful APIs.
Parameters
----------
model_uid: str
The unique id that identify the model.
Returns
-------
ModelHandle
The corresponding Model Handler based on the Model specified in the uid:
- :obj:`xinference.client.handlers.GenerateModelHandle` -> provide handle to basic generate Model. e.g. Baichuan.
- :obj:`xinference.client.handlers.ChatModelHandle` -> provide handle to chat Model. e.g. Baichuan-chat.
Raises
------
RuntimeError
Report failure to get the wanted model with given model_uid. Provide details of failure through error message.
"""
url = f"{self.base_url}/v1/models/{model_uid}"
response = self.session.get(url, headers=self._headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to get the model description, detail: {_get_error_string(response)}"
)
desc = response.json()
if desc["model_type"] == "LLM":
if "chat" in desc["model_ability"]:
return RESTfulChatModelHandle(
model_uid, self.base_url, auth_headers=self._headers
)
elif "generate" in desc["model_ability"]:
return RESTfulGenerateModelHandle(
model_uid, self.base_url, auth_headers=self._headers
)
else:
raise ValueError(f"Unrecognized model ability: {desc['model_ability']}")
elif desc["model_type"] == "embedding":
return RESTfulEmbeddingModelHandle(
model_uid, self.base_url, auth_headers=self._headers
)
elif desc["model_type"] == "image":
return RESTfulImageModelHandle(
model_uid, self.base_url, auth_headers=self._headers
)
elif desc["model_type"] == "rerank":
return RESTfulRerankModelHandle(
model_uid, self.base_url, auth_headers=self._headers
)
elif desc["model_type"] == "audio":
return RESTfulAudioModelHandle(
model_uid, self.base_url, auth_headers=self._headers
)
elif desc["model_type"] == "video":
return RESTfulVideoModelHandle(
model_uid, self.base_url, auth_headers=self._headers
)
elif desc["model_type"] == "flexible":
return RESTfulFlexibleModelHandle(
model_uid, self.base_url, auth_headers=self._headers
)
else:
raise ValueError(f"Unknown model type:{desc['model_type']}")
def describe_model(self, model_uid: str):
"""
Get model information via RESTful APIs.
Parameters
----------
model_uid: str
The unique id that identify the model.
Returns
-------
dict
A dictionary containing the following keys:
- "model_type": str
the type of the model determined by its function, e.g. "LLM" (Large Language Model)
- "model_name": str
the name of the specific LLM model family
- "model_lang": List[str]
the languages supported by the LLM model
- "model_ability": List[str]
the ability or capabilities of the LLM model
- "model_description": str
a detailed description of the LLM model
- "model_format": str
the format specification of the LLM model
- "model_size_in_billions": int
the size of the LLM model in billions
- "quantization": str
the quantization applied to the model
- "revision": str
the revision number of the LLM model specification
- "context_length": int
the maximum text length the LLM model can accommodate (include all input & output)
Raises
------
RuntimeError
Report failure to get the wanted model with given model_uid. Provide details of failure through error message.
"""
url = f"{self.base_url}/v1/models/{model_uid}"
response = self.session.get(url, headers=self._headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to get the model description, detail: {_get_error_string(response)}"
)
return response.json()
def register_model(
self,
model_type: str,
model: str,
persist: bool,
worker_ip: Optional[str] = None,
):
"""
Register a custom model.
Parameters
----------
model_type: str
The type of model.
model: str
The model definition. (refer to: https://inference.readthedocs.io/en/latest/models/custom.html)
worker_ip: Optional[str]
The IP address of the worker on which the model is running.
persist: bool
Raises
------
RuntimeError
Report failure to register the custom model. Provide details of failure through error message.
"""
url = f"{self.base_url}/v1/model_registrations/{model_type}"
request_body = {"model": model, "worker_ip": worker_ip, "persist": persist}
response = self.session.post(url, json=request_body, headers=self._headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to register model, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
def unregister_model(self, model_type: str, model_name: str):
"""
Unregister a custom model.
Parameters
----------
model_type: str
The type of model.
model_name: str
The name of the model
Raises
------
RuntimeError
Report failure to unregister the custom model. Provide details of failure through error message.
"""
url = f"{self.base_url}/v1/model_registrations/{model_type}/{model_name}"
response = self.session.delete(url, headers=self._headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to register model, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
def list_model_registrations(
self, model_type: str, detailed: bool = False
) -> List[Dict[str, Any]]:
"""
List models registered on the server.
Parameters
----------
model_type: str
The type of the model.
detailed: bool
Whether to display detailed information.
Returns
-------
List[Dict[str, Any]]
The collection of registered models on the server.
Raises
------
RuntimeError
Report failure to list model registration. Provide details of failure through error message.
"""
url = f"{self.base_url}/v1/model_registrations/{model_type}?detailed={'true' if detailed else 'false'}"
response = self.session.get(url, headers=self._headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to list model registration, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
def list_cached_models(
self, model_name: Optional[str] = None, worker_ip: Optional[str] = None
) -> List[Dict[Any, Any]]:
"""
Get a list of cached models.
Parameters
----------
model_name: Optional[str]
The name of model.
worker_ip: Optional[str]
Specify the worker ip where the model is located in a distributed scenario.
Returns
-------
List[Dict[Any, Any]]
The collection of cached models on the server.
Raises
------
RuntimeError
Raised when the request fails, including the reason for the failure.
"""
url = f"{self.base_url}/v1/cache/models"
params = {
"model_name": model_name,
"worker_ip": worker_ip,
}
response = self.session.get(url, headers=self._headers, params=params)
if response.status_code != 200:
raise RuntimeError(
f"Failed to list cached model, detail: {_get_error_string(response)}"
)
response_data = response.json()
response_data = response_data.get("list")
return response_data
def list_deletable_models(
self, model_version: str, worker_ip: Optional[str] = None
) -> Dict[str, Any]:
"""
Get the cached models with the model path cached on the server.
Parameters
----------
model_version: str
The version of the model.
worker_ip: Optional[str]
Specify the worker ip where the model is located in a distributed scenario.
Returns
-------
Dict[str, Dict[str,str]]]
Dictionary with keys "model_name" and values model_file_location.
"""
url = f"{self.base_url}/v1/cache/models/files"
params = {
"model_version": model_version,
"worker_ip": worker_ip,
}
response = self.session.get(url, headers=self._headers, params=params)
if response.status_code != 200:
raise RuntimeError(
f"Failed to get paths by model name, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
def confirm_and_remove_model(
self, model_version: str, worker_ip: Optional[str] = None
) -> bool:
"""
Remove the cached models with the model name cached on the server.
Parameters
----------
model_version: str
The version of the model.
worker_ip: Optional[str]
Specify the worker ip where the model is located in a distributed scenario.
Returns
-------
str
The response of the server.
"""
url = f"{self.base_url}/v1/cache/models"
params = {
"model_version": model_version,
"worker_ip": worker_ip,
}
response = self.session.delete(url, headers=self._headers, params=params)
if response.status_code != 200:
raise RuntimeError(
f"Failed to remove cached models, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data.get("result", False)
def get_model_registration(
self, model_type: str, model_name: str
) -> Dict[str, Any]:
"""
Get the model with the model type and model name registered on the server.
Parameters
----------
model_type: str
The type of the model.
model_name: str
The name of the model.
Returns
-------
List[Dict[str, Any]]
The collection of registered models on the server.
"""
url = f"{self.base_url}/v1/model_registrations/{model_type}/{model_name}"
response = self.session.get(url, headers=self._headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to list model registration, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
def query_engine_by_model_name(
self, model_name: str, model_type: Optional[str] = "LLM"
):
"""
Get the engine parameters with the model name registered on the server.
Parameters
----------
model_name: str
The name of the model.
model_type: str
Model type, LLM by default.
Returns
-------
Dict[str, List[Dict[str, Any]]]
The supported engine parameters of registered models on the server.
"""
if not model_type:
url = f"{self.base_url}/v1/engines/{model_name}"
else:
url = f"{self.base_url}/v1/engines/{model_type}/{model_name}"
response = self.session.get(url, headers=self._headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to query engine parameters by model name, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
def abort_request(self, model_uid: str, request_id: str, block_duration: int = 30):
"""
Abort a request.
Abort a submitted request. If the request is finished or not found, this method will be a no-op.
Currently, this interface is only supported when batching is enabled for models on transformers backend.
Parameters
----------
model_uid: str
Model uid.
request_id: str
Request id.
block_duration: int
The duration to make the request id abort. If set to 0, the abort_request will be immediate, which may
prevent it from taking effect if it arrives before the request operation.
Returns
-------
Dict
Return empty dict.
"""
url = f"{self.base_url}/v1/models/{model_uid}/requests/{request_id}/abort"
response = self.session.post(
url, headers=self._headers, json={"block_duration": block_duration}
)
if response.status_code != 200:
raise RuntimeError(
f"Failed to abort request, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
def get_workers_info(self):
url = f"{self.base_url}/v1/workers"
response = self.session.get(url, headers=self._headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to get workers info, detail: {_get_error_string(response)}"
)
response_data = response.json()
return response_data
def get_supervisor_info(self):
url = f"{self.base_url}/v1/supervisor"
response = self.session.get(url, headers=self._headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to get supervisor info, detail: {_get_error_string(response)}"
)
response_json = response.json()
return response_json
def get_progress(self, request_id: str):
url = f"{self.base_url}/v1/requests/{request_id}/progress"
response = self.session.get(url, headers=self._headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to get progress, detail: {_get_error_string(response)}"
)
response_json = response.json()
return response_json
def abort_cluster(self):
url = f"{self.base_url}/v1/clusters"
response = self.session.delete(url, headers=self._headers)
if response.status_code != 200:
raise RuntimeError(
f"Failed to abort cluster, detail: {_get_error_string(response)}"
)
response_json = response.json()
return response_json
================================================
FILE: src/backend/bisheng/core/ai/rerank/xinference/fields.py
================================================
# Copyright 2022-2023 XProbe Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from ._compat import Field
none_field = Field(None)
stream_interval_field = Field(default=2)
echo_field = Field(
default=False,
description="Whether to echo the prompt in the generated text. Useful for chatbots.",
)
logprobs_field = Field(
default=None,
ge=0,
description="The number of logprobs to generate. If None, no logprobs are generated.",
)
# Note: changed from 1024 to None to let the model output maximum content which has better user experience
max_tokens_field = Field(
default=None,
ge=1,
description="The maximum number of tokens to generate.",
)
temperature_field = Field(
default=0.8,
ge=0.0,
le=2.0,
description="Adjust the randomness of the generated text.\n\n"
"Temperature is a hyperparameter that controls the randomness of the generated text. "
"It affects the probability distribution of the model's output tokens. "
"A higher temperature (e.g., 1.5) makes the output more random and creative, "
"while a lower temperature (e.g., 0.5) makes the output more focused, deterministic, and conservative. "
"The default value is 0.8, which provides a balance between randomness and determinism. "
"At the extreme, a temperature of 0 will always pick the most likely next token, "
"leading to identical outputs in each run.",
)
top_p_field = Field(
default=0.95,
ge=0.0,
le=1.0,
description="Limit the next token selection to a subset of tokens with "
"a cumulative probability above a threshold P.\n\n"
"Top-p sampling, also known as nucleus sampling, "
"is another text generation method that selects the next token from a subset of tokens "
"that together have a cumulative probability of at least p. "
"This method provides a balance between diversity and quality by considering "
"both the probabilities of tokens and the number of tokens to sample from. "
"A higher value for top_p (e.g., 0.95) will lead to more diverse text, "
"while a lower value (e.g., 0.5) will generate more focused and conservative text.",
)
stop_field = Field(
default=[],
description="A list of tokens at which to stop generation. If None, no stop tokens are used.",
)
stream_field = Field(
default=False,
description="Whether to stream the results as they are generated. Useful for chatbots.",
)
stream_option_field = Field(
default={
"include_usage": False,
},
description="If set, an additional chunk will be streamed before the `data: [DONE]` message.",
)
top_k_field = Field(
default=40,
ge=0,
description="Limit the next token selection to the K most probable tokens.\n\n"
"Top-k sampling is a text generation method that selects the next token "
"only from the top k most likely tokens predicted by the model. "
"It helps reduce the risk of generating low-probability or nonsensical tokens, "
"but it may also limit the diversity of the output. "
"A higher value for top_k (e.g., 100) will consider more tokens and lead to more diverse text, "
"while a lower value (e.g., 10) will focus on the most probable tokens and "
"generate more conservative text.",
)
repeat_penalty_field = Field(
default=1.1,
ge=0.0,
description="A penalty applied to each token that is already generated. "
"This helps prevent the model from repeating itself.\n\n"
"Repeat penalty is a hyperparameter used to penalize the repetition of token sequences "
"during text generation. "
"It helps prevent the model from generating repetitive or monotonous text. "
"A higher value (e.g., 1.5) will penalize repetitions more strongly, "
"while a lower value (e.g., 0.9) will be more lenient.",
)
presence_penalty_field = Field(
default=0.0,
ge=-2.0,
le=2.0,
description="Positive values penalize new tokens based on whether they appear in the text so far, "
"increasing the model's likelihood to talk about new topics.",
)
frequency_penalty_field = Field(
default=0.0,
ge=-2.0,
le=2.0,
description="Positive values penalize new tokens based on their existing frequency in the text so far, "
"decreasing the model's likelihood to repeat the same line verbatim.",
)
mirostat_mode_field = Field(
default=0,
ge=0,
le=2,
description="Enable Mirostat constant-perplexity algorithm of the specified version (1 or 2; 0 = disabled)",
)
mirostat_tau_field = Field(
default=5.0,
ge=0.0,
le=10.0,
description="Mirostat target entropy, i.e. the target perplexity - lower values produce focused and coherent text, "
"larger values produce more diverse and less coherent text",
)
mirostat_eta_field = Field(
default=0.1, ge=0.001, le=1.0, description="Mirostat learning rate"
)
================================================
FILE: src/backend/bisheng/core/ai/rerank/xinference/types.py
================================================
# Copyright 2022-2023 XProbe Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from typing import Any, Callable, Dict, ForwardRef, Iterable, List, Optional, Union
from typing_extensions import Literal, NotRequired, TypedDict
from ._compat import (
BaseModel,
create_model,
create_model_from_typeddict,
validate_arguments,
)
from .fields import (
echo_field,
max_tokens_field,
none_field,
repeat_penalty_field,
stop_field,
stream_field,
stream_interval_field,
stream_option_field,
temperature_field,
top_k_field,
top_p_field,
)
class Image(TypedDict):
url: Optional[str]
b64_json: Optional[str]
class ImageList(TypedDict):
created: int
data: List[Image]
class ImageEditRequest(TypedDict, total=False):
image: Union[Union[str, bytes], List[Union[str, bytes]]]
mask: Optional[Union[str, bytes]]
prompt: str
n: int
size: Optional[str]
response_format: str
class SDAPIResult(TypedDict):
images: List[str]
parameters: dict
info: dict
class Video(TypedDict):
url: Optional[str]
b64_json: Optional[str]
class VideoList(TypedDict):
created: int
data: List[Video]
class EmbeddingUsage(TypedDict):
prompt_tokens: int
total_tokens: int
class EmbeddingData(TypedDict):
index: int
object: str
# support sparse embedding
embedding: Union[List[float], Dict[str, float]]
class Embedding(TypedDict):
object: Literal["list"]
model: str
model_replica: str
data: List[EmbeddingData]
usage: EmbeddingUsage
class Document(TypedDict):
text: str
class DocumentObj(TypedDict):
index: int
relevance_score: float
document: Optional[Document]
# Cohere API compatibility
class ApiVersion(TypedDict):
version: str
is_deprecated: bool
is_experimental: bool
# Cohere API compatibility
class BilledUnit(TypedDict):
input_tokens: int
output_tokens: int
search_units: int
classifications: int
class RerankTokens(TypedDict):
input_tokens: int
output_tokens: int
class Meta(TypedDict):
api_version: Optional[ApiVersion]
billed_units: Optional[BilledUnit]
tokens: RerankTokens
warnings: Optional[List[str]]
class Rerank(TypedDict):
id: str
results: List[DocumentObj]
meta: Meta
class CompletionLogprobs(TypedDict):
text_offset: List[int]
token_logprobs: List[Optional[float]]
tokens: List[str]
top_logprobs: List[Optional[Dict[str, float]]]
class ToolCallFunction(TypedDict):
name: str
arguments: str
class ToolCalls(TypedDict):
id: str
type: Literal["function"]
function: ToolCallFunction
class CompletionChoice(TypedDict):
text: NotRequired[str]
index: int
logprobs: Optional[CompletionLogprobs]
finish_reason: Optional[str]
tool_calls: NotRequired[List[ToolCalls]]
class CompletionUsage(TypedDict):
prompt_tokens: int
completion_tokens: int
total_tokens: int
class CompletionChunk(TypedDict):
id: str
object: Literal["text_completion"]
created: int
model: str
choices: List[CompletionChoice]
usage: NotRequired[CompletionUsage]
class Completion(TypedDict):
id: str
object: Literal["text_completion"]
created: int
model: str
choices: List[CompletionChoice]
usage: CompletionUsage
class ChatCompletionAudio(TypedDict):
id: str
data: str
expires_at: int
transcript: str
class ChatCompletionMessage(TypedDict):
role: str
reasoning_content: NotRequired[str]
content: Optional[str]
audio: NotRequired[ChatCompletionAudio]
user: NotRequired[str]
tool_calls: NotRequired[List]
class ChatCompletionChoice(TypedDict):
index: int
message: ChatCompletionMessage
finish_reason: Optional[str]
class ChatCompletion(TypedDict):
id: str
object: Literal["chat.completion"]
created: int
model: str
choices: List[ChatCompletionChoice]
usage: CompletionUsage
class ChatCompletionChunkDelta(TypedDict):
role: NotRequired[str]
reasoning_content: NotRequired[Union[str, None]]
content: NotRequired[Union[str, None]]
tool_calls: NotRequired[List[ToolCalls]]
class ChatCompletionChunkChoice(TypedDict):
index: int
delta: ChatCompletionChunkDelta
finish_reason: Optional[str]
class ChatCompletionChunk(TypedDict):
id: str
model: str
object: Literal["chat.completion.chunk"]
created: int
choices: List[ChatCompletionChunkChoice]
usage: NotRequired[CompletionUsage]
StoppingCriteria = Callable[[List[int], List[float]], bool]
class StoppingCriteriaList(List[StoppingCriteria]):
def __call__(self, input_ids: List[int], logits: List[float]) -> bool:
return any([stopping_criteria(input_ids, logits) for stopping_criteria in self])
LogitsProcessor = Callable[[List[int], List[float]], List[float]]
class LogitsProcessorList(List[LogitsProcessor]):
def __call__(self, input_ids: List[int], scores: List[float]) -> List[float]:
for processor in self:
scores = processor(input_ids, scores)
return scores
class PytorchGenerateConfig(TypedDict, total=False):
temperature: float
repetition_penalty: float
top_p: float
top_k: int
stream: bool
max_tokens: int
echo: bool
stop: Optional[Union[str, List[str]]]
stop_token_ids: Optional[Union[int, List[int]]]
stream_interval: int
model: Optional[str]
tools: Optional[List[Dict]]
lora_name: Optional[str]
stream_options: Optional[Union[dict, None]]
request_id: Optional[str]
class CogagentGenerateConfig(PytorchGenerateConfig, total=False):
platform: Optional[Literal["Mac", "WIN", "Mobile"]]
format: Optional[
Literal[
"(Answer in Action-Operation-Sensitive format.)",
"(Answer in Status-Plan-Action-Operation format.)",
"(Answer in Status-Action-Operation-Sensitive format.)",
"(Answer in Status-Action-Operation format.)",
"(Answer in Action-Operation format.)",
]
]
class PytorchModelConfig(TypedDict, total=False):
revision: Optional[str]
device: str
gpus: Optional[str]
num_gpus: int
max_gpu_memory: str
gptq_ckpt: Optional[str]
gptq_wbits: int
gptq_groupsize: int
gptq_act_order: bool
trust_remote_code: bool
max_num_seqs: int
enable_tensorizer: Optional[bool]
reasoning_content: bool
min_pixels: NotRequired[int]
max_pixels: NotRequired[int]
quantization_config: NotRequired[Dict]
context_length: NotRequired[int]
torch_dtype: NotRequired[str]
enable_flash_attn: NotRequired[bool]
def get_pydantic_model_from_method(
meth,
exclude_fields: Optional[Iterable[str]] = None,
include_fields: Optional[Dict[str, Any]] = None,
) -> BaseModel:
# The validate_arguments set Config.extra = "forbid" by default.
f = validate_arguments(meth, config={"arbitrary_types_allowed": True})
model = f.model
model.Config.extra = "ignore"
model.__fields__.pop("self", None)
model.__fields__.pop("args", None)
model.__fields__.pop("kwargs", None)
pydantic_private_keys = [
key for key in model.__fields__.keys() if key.startswith("v__")
]
for key in pydantic_private_keys:
model.__fields__.pop(key)
if exclude_fields is not None:
for key in exclude_fields:
model.__fields__.pop(key, None)
if include_fields is not None:
dummy_model = create_model("DummyModel", **include_fields)
model.__fields__.update(dummy_model.__fields__)
return model
def fix_forward_ref(model):
"""
pydantic in Python 3.8 generates ForwardRef field, we replace them
by the Optional[Any]
"""
exclude_fields = []
include_fields = {}
for key, field in model.__fields__.items():
if isinstance(field.annotation, ForwardRef):
exclude_fields.append(key)
include_fields[key] = (Optional[Any], None)
if exclude_fields:
for key in exclude_fields:
model.__fields__.pop(key, None)
if include_fields:
dummy_model = create_model("DummyModel", **include_fields)
model.__fields__.update(dummy_model.__fields__)
return model
class ModelAndPrompt(BaseModel):
model: str
prompt: str
class ModelAndMessages(BaseModel):
model: str
messages: List[Dict[str, Any]]
class CreateCompletionTorch(BaseModel):
echo: bool = echo_field
max_tokens: Optional[int] = max_tokens_field
repetition_penalty: float = repeat_penalty_field
stop: Optional[Union[str, List[str]]] = stop_field
stop_token_ids: Optional[Union[int, List[int]]] = none_field
stream: bool = stream_field
stream_options: Optional[Union[dict, None]] = stream_option_field
stream_interval: int = stream_interval_field
temperature: float = temperature_field
top_p: float = top_p_field
top_k: int = top_k_field
lora_name: Optional[str]
request_id: Optional[str]
chat_template_kwargs: Optional[Union[str, Dict[str, Any]]]
# This type is for openai API compatibility
CreateCompletionOpenAI: BaseModel
from openai.types.completion_create_params import CompletionCreateParamsNonStreaming
CreateCompletionOpenAI = create_model_from_typeddict(
CompletionCreateParamsNonStreaming,
)
CreateCompletionOpenAI = fix_forward_ref(CreateCompletionOpenAI)
class CreateCompletion(
ModelAndPrompt,
CreateCompletionTorch,
CreateCompletionOpenAI,
):
pass
class CreateChatModel(BaseModel):
model: str
# Currently, chat calls generates, so the params share the same one.
CreateChatCompletionTorch = CreateCompletionTorch
from ._compat import CreateChatCompletionOpenAI
class CreateChatCompletion( # type: ignore
CreateChatModel,
CreateChatCompletionTorch,
CreateChatCompletionOpenAI,
):
pass
class LoRA:
def __init__(self, lora_name: str, local_path: str):
self.lora_name = lora_name
self.local_path = local_path
def to_dict(self):
return {
"lora_name": self.lora_name,
"local_path": self.local_path,
}
@classmethod
def from_dict(cls, data: Dict):
return cls(
lora_name=data["lora_name"],
local_path=data["local_path"],
)
class PeftModelConfig:
def __init__(
self,
peft_model: Optional[List[LoRA]] = None,
image_lora_load_kwargs: Optional[Dict] = None,
image_lora_fuse_kwargs: Optional[Dict] = None,
):
self.peft_model = peft_model
self.image_lora_load_kwargs = image_lora_load_kwargs
self.image_lora_fuse_kwargs = image_lora_fuse_kwargs
def to_dict(self):
return {
"lora_list": (
[lora.to_dict() for lora in self.peft_model]
if self.peft_model
else None
),
"image_lora_load_kwargs": self.image_lora_load_kwargs,
"image_lora_fuse_kwargs": self.image_lora_fuse_kwargs,
}
@classmethod
def from_dict(cls, data: Dict):
peft_model_list = data.get("lora_list", None)
peft_model = (
[LoRA.from_dict(lora_dict) for lora_dict in peft_model_list]
if peft_model_list is not None
else None
)
return cls(
peft_model=peft_model,
image_lora_load_kwargs=data.get("image_lora_load_kwargs"),
image_lora_fuse_kwargs=data.get("image_lora_fuse_kwargs"),
)
# This type is for Anthropic API compatibility
ANTHROPIC_AVAILABLE = False
try:
from anthropic.types import ContentBlock, Usage
ANTHROPIC_AVAILABLE = True
except ImportError:
ContentBlock = None
Usage = None
# Use TYPE_CHECKING to avoid runtime issues with mypy
from typing import TYPE_CHECKING
if TYPE_CHECKING:
# For type checking, define the types as if Anthropic is available
from anthropic.types import ContentBlock as ContentBlock_
from anthropic.types import Usage as Usage_
class AnthropicMessage(TypedDict):
id: str
type: str
role: str
content: List[ContentBlock_]
model: str
stop_reason: str
stop_sequence: str
usage: Usage_
container: Dict[str, Any]
class MessageCreateParams(TypedDict):
model: str
messages: List[Dict[str, Any]]
max_tokens: int
stream: NotRequired[bool]
temperature: NotRequired[float]
top_p: NotRequired[float]
top_k: NotRequired[int]
stop_sequences: NotRequired[List[str]]
metadata: NotRequired[Dict[str, Any]]
tools: NotRequired[List[Dict[str, Any]]]
tool_choice: NotRequired[Union[str, Dict[str, Any]]]
CreateMessageAnthropic: BaseModel
class CreateMessage(
ModelAndMessages,
):
pass
else:
# Runtime definitions
if ANTHROPIC_AVAILABLE:
class AnthropicMessage(TypedDict):
id: str
type: str
role: str
content: List[ContentBlock]
model: str
stop_reason: str
stop_sequence: str
usage: Usage
container: Dict[str, Any]
class MessageCreateParams(TypedDict):
model: str
messages: List[Dict[str, Any]]
max_tokens: int
stream: NotRequired[bool]
temperature: NotRequired[float]
top_p: NotRequired[float]
top_k: NotRequired[int]
stop_sequences: NotRequired[List[str]]
metadata: NotRequired[Dict[str, Any]]
tools: NotRequired[List[Dict[str, Any]]]
tool_choice: NotRequired[Union[str, Dict[str, Any]]]
CreateMessageAnthropic: BaseModel = create_model_from_typeddict(
MessageCreateParams,
)
CreateMessageAnthropic = fix_forward_ref(CreateMessageAnthropic)
class CreateMessage(CreateMessageAnthropic):
pass
else:
# Define dummy types when Anthropic is not available
class AnthropicMessage:
pass
class MessageCreateParams:
pass
CreateMessageAnthropic = None
class CreateMessage:
pass
================================================
FILE: src/backend/bisheng/core/ai/rerank/xinference_rerank.py
================================================
from typing import Sequence, Optional
from langchain_core.callbacks import Callbacks
from langchain_core.documents import Document
from pydantic import Field, model_validator
from typing_extensions import Self
from .xinference.client import Client
from ..base import BaseRerank
class XinferenceRerank(BaseRerank):
"""Document compressor that uses `Xinference Rerank API`."""
base_url: str = Field(..., description="xinference server base url, example: http://localhost:9997")
api_key: Optional[str] = Field(default="", description="api key for xinference server")
model_uid: str = Field(..., description="model uid for xinference rerank model")
client: Optional[Client] = Field(default=None, description="xinference client instance")
@model_validator(mode="after")
def validate_client(self) -> Self:
"""Validate that client exists in environment."""
if self.base_url.endswith(("/v1", "/v1/")):
self.base_url = self.base_url.rsplit("/v1", 1)[0]
if not self.client:
self.client = Client(base_url=self.base_url, api_key=self.api_key)
return self
def compress_documents(
self,
documents: Sequence[Document],
query: str,
callbacks: Optional[Callbacks] = None,
) -> Sequence[Document]:
if len(documents) == 0: # to avoid empty api call
return []
docs = [
doc.page_content if isinstance(doc, Document) else doc for doc in documents
]
model = self.client.get_model(self.model_uid) # ensure model exists
result = model.rerank(docs, query)
results = result.get("results", [])
return self.sort_rerank_result(documents, results)
================================================
FILE: src/backend/bisheng/core/ai/test/__init__.py
================================================
================================================
FILE: src/backend/bisheng/core/ai/test/test.py
================================================
import asyncio
import os
import pytest
from bisheng.core.ai import AzureOpenAIASRClient
@pytest.mark.asyncio
async def test_aliyun_asr():
from ..asr import AliyunASRClient
# api_key = os.environ.get('ALIYUN_API_KEY')
api_key = "sk-b4c85ea486a04aab8041dc9f36d20617"
client = AliyunASRClient(api_key=api_key, model="paraformer-realtime-v2")
with open("../asr/tmpm103lam_.wav", "rb") as f:
audio = f.read()
text = await client.transcribe(audio)
print(text)
# assert text == "Hello word, This is Alibaba Voice Lab."
@pytest.mark.asyncio
async def test_aliyun_tts():
from ..tts import AliyunTTSClient
api_key = os.environ.get('ALIYUN_API_KEY')
client = AliyunTTSClient(api_key=api_key)
audio_bytes = await client.synthesize("Hello World!")
with open("./data/aliyun_result.mp3", "wb") as f:
f.write(audio_bytes)
assert os.path.exists("./data/aliyun_result.mp3")
@pytest.mark.asyncio
async def test_azure_openai_asr():
api_key = os.environ.get('AZURE_OPENAI_API_KEY')
api_version = os.environ.get('AZURE_OPENAI_API_VERSION')
azure_endpoint = os.environ.get('AZURE_OPENAI_ENDPOINT')
client = AzureOpenAIASRClient(api_key=api_key, model="gpt-4o-transcribe", azure_endpoint=azure_endpoint,
api_version=api_version)
text = await client.transcribe("./data/asr_example.wav")
assert text == "Hello word, This is Alibaba Voice Lab."
@pytest.mark.asyncio
async def test_azure_openai_tts():
from ..tts import AzureOpenAITTSClient
api_key = os.environ.get('AZURE_OPENAI_API_KEY')
api_version = os.environ.get('AZURE_OPENAI_API_VERSION')
azure_endpoint = os.environ.get('AZURE_OPENAI_ENDPOINT')
client = AzureOpenAITTSClient(api_key=api_key, model="gpt-4o-transcribe", azure_endpoint=azure_endpoint,
api_version=api_version)
audio_bytes = await client.synthesize("Hello, world!")
with open("./data/azure_openai_result.mp3", "wb") as f:
f.write(audio_bytes)
assert os.path.exists("./data/azure_openai_result.mp3")
def test_xinference_rerank():
from ..rerank.xinference_rerank import XinferenceRerank
api_key = os.environ.get('XINFERENCE_API_KEY')
base_url = os.environ.get('XINFERENCE_BASE_URL')
model_uid = os.environ.get('XINFERENCE_RERANK_MODEL_UID')
reranker = XinferenceRerank(base_url=base_url, api_key=api_key, model_uid=model_uid)
async def main():
await test_aliyun_asr()
# await test_aliyun_tts()
if __name__ == "__main__":
asyncio.run(main())
================================================
FILE: src/backend/bisheng/core/ai/tts/__init__.py
================================================
from .aliyun_tts_client import AliyunTTSClient
from .azure_openai_tts_client import AzureOpenAITTSClient
from .openai_tts_client import OpenAITTSClient
__all__ = [
'OpenAITTSClient',
'AliyunTTSClient',
'AzureOpenAITTSClient'
]
================================================
FILE: src/backend/bisheng/core/ai/tts/aliyun_tts_client.py
================================================
import asyncio
from typing import Optional
from dashscope.audio.tts_v2 import SpeechSynthesizer
from ..base import BaseTTSClient
class AliyunTTSClient(BaseTTSClient):
"""Alibaba CloudTTSClient"""
def __init__(self, api_key: str, **kwargs):
"""
Initialize Alibaba CloudTTSClient
"""
self.model = kwargs.get("model", "cosyvoice-v2")
self.voice = kwargs.get("voice", "longxiaochun_v2")
self.app_key = api_key
self.synthesizer = SpeechSynthesizer(model=self.model, voice=self.voice)
self.synthesizer.request.apikey = self.app_key
def sync_func(self, text: str):
audio = self.synthesizer.call(text=text)
return audio
async def synthesize(
self,
text: str,
voice: Optional[str] = None,
language: Optional[str] = None,
format: str = "mp3"
) -> bytes:
"""
Convert text to audio
:param text:
:param voice:
:param language:
:param format:
:return:
"""
audio = await asyncio.to_thread(self.sync_func, text=text)
if audio is None:
raise ValueError("TTS synthesis failed, no audio data returned.")
return audio
================================================
FILE: src/backend/bisheng/core/ai/tts/azure_openai_tts_client.py
================================================
import openai
from typing import Optional, Literal
from ..base import BaseTTSClient
class AzureOpenAITTSClient(BaseTTSClient):
"""OpenAI TTSClient"""
def __init__(self, api_key: str, **kwargs):
"""
InisialisasiOpenAI TTSClient
:param api_key:
:param kwargs:
"""
self.model = kwargs.pop("model", "tts-1")
self.voice = kwargs.pop("voice", "alloy")
self.client = openai.AsyncAzureOpenAI(api_key=api_key, **kwargs)
async def synthesize(
self,
text: str,
voice: Optional[str] = None,
language: Optional[str] = None,
format: Literal["mp3", "opus", "aac", "flac", "wav", "pcm"] = "mp3"
) -> bytes:
"""
UseOpenAI TTS APIText-to-speech synthesis
:param text:
:param voice:
:param language:
:param format:
:return:
"""
response = await self.client.audio.speech.create(
model=self.model,
voice=voice or self.voice,
input=text,
response_format=format
)
if response.response.status_code != 200:
raise Exception(
f"OpenAI TTS APIRequest failed, status code:{response.response.status_code}Error Msg{response.response.text}")
return response.content
================================================
FILE: src/backend/bisheng/core/ai/tts/openai_tts_client.py
================================================
from typing import Optional, Literal
import openai
from ..base import BaseTTSClient
class OpenAITTSClient(BaseTTSClient):
"""OpenAI TTSClient"""
def __init__(self, api_key: str, **kwargs):
"""
InisialisasiOpenAI TTSClient
:param api_key:
:param kwargs:
"""
self.model = kwargs.pop("model", "tts-1")
self.voice = kwargs.pop("voice", "alloy")
self.client = openai.AsyncOpenAI(api_key=api_key, **kwargs)
async def synthesize(
self,
text: str,
voice: Optional[str] = None,
language: Optional[str] = None,
format: Literal["mp3", "opus", "aac", "flac", "wav", "pcm"] = "mp3"
) -> bytes:
"""
UseOpenAI TTS APIText-to-speech synthesis
:param text:
:param voice:
:param language:
:param format:
:return:
"""
response = await self.client.audio.speech.create(
model=self.model,
voice=voice or self.voice,
input=text,
response_format=format
)
if response.response.status_code != 200:
raise Exception(
f"OpenAI TTS API ERROR,Code:{response.response.status_code},Message:{response.response.text}")
return response.content
================================================
FILE: src/backend/bisheng/core/cache/__init__.py
================================================
from bisheng.core.cache.flow import InMemoryCache
from bisheng.core.cache.manager import cache_manager
__all__ = [
'cache_manager',
'InMemoryCache',
]
================================================
FILE: src/backend/bisheng/core/cache/base.py
================================================
import abc
class BaseCache(abc.ABC):
"""
Abstract base class for a cache.
"""
@abc.abstractmethod
def get(self, key):
"""
Retrieve an item from the cache.
Args:
key: The key of the item to retrieve.
Returns:
The value associated with the key, or None if the key is not found.
"""
@abc.abstractmethod
def set(self, key, value):
"""
Add an item to the cache.
Args:
key: The key of the item.
value: The value to cache.
"""
@abc.abstractmethod
def delete(self, key):
"""
Remove an item from the cache.
Args:
key: The key of the item to remove.
"""
@abc.abstractmethod
def clear(self):
"""
Clear all items from the cache.
"""
@abc.abstractmethod
def __contains__(self, key):
"""
Check if the key is in the cache.
Args:
key: The key of the item to check.
Returns:
True if the key is in the cache, False otherwise.
"""
@abc.abstractmethod
def __getitem__(self, key):
"""
Retrieve an item from the cache using the square bracket notation.
Args:
key: The key of the item to retrieve.
"""
@abc.abstractmethod
def __setitem__(self, key, value):
"""
Add an item to the cache using the square bracket notation.
Args:
key: The key of the item.
value: The value to cache.
"""
@abc.abstractmethod
def __delitem__(self, key):
"""
Remove an item from the cache using the square bracket notation.
Args:
key: The key of the item to remove.
"""
================================================
FILE: src/backend/bisheng/core/cache/flow.py
================================================
import threading
import time
from collections import OrderedDict
from bisheng.core.cache.base import BaseCache
class InMemoryCache(BaseCache):
"""
A simple in-memory cache using an OrderedDict.
This cache supports setting a maximum size and expiration time for cached items.
When the cache is full, it uses a Least Recently Used (LRU) eviction policy.
Thread-safe using a threading Lock.
Attributes:
max_size (int, optional): Maximum number of items to store in the cache.
expiration_time (int, optional): Time in seconds after which a cached item expires. Default is 1 hour.
Example:
cache = InMemoryCache(max_size=3, expiration_time=5)
# setting cache values
cache.set("a", 1)
cache.set("b", 2)
cache["c"] = 3
# getting cache values
a = cache.get("a")
b = cache["b"]
"""
def __init__(self, max_size=None, expiration_time=60 * 60):
"""
Initialize a new InMemoryCache instance.
Args:
max_size (int, optional): Maximum number of items to store in the cache.
expiration_time (int, optional): Time in seconds after which a cached item expires. Default is 1 hour.
"""
self._cache = OrderedDict()
self._lock = threading.Lock()
self.max_size = max_size
self.expiration_time = expiration_time
def get(self, key):
"""
Retrieve an item from the cache.
Args:
key: The key of the item to retrieve.
Returns:
The value associated with the key, or None if the key is not found or the item has expired.
"""
with self._lock:
if key in self._cache:
item = self._cache.pop(key)
if (
self.expiration_time is None
or time.time() - item['time'] < self.expiration_time
):
# Move the key to the end to make it recently used
self._cache[key] = item
return item['value']
else:
self.delete(key)
return None
def set(self, key, value):
"""
Add an item to the cache.
If the cache is full, the least recently used item is evicted.
Args:
key: The key of the item.
value: The value to cache.
"""
with self._lock:
if key in self._cache:
# Remove existing key before re-inserting to update order
self.delete(key)
elif self.max_size and len(self._cache) >= self.max_size:
# Remove least recently used item
self._cache.popitem(last=False)
self._cache[key] = {'value': value, 'time': time.time()}
def get_or_set(self, key, value):
"""
Retrieve an item from the cache. If the item does not exist, set it with the provided value.
Args:
key: The key of the item.
value: The value to cache if the item doesn't exist.
Returns:
The cached value associated with the key.
"""
with self._lock:
if key in self._cache:
return self.get(key)
self.set(key, value)
return value
def delete(self, key):
"""
Remove an item from the cache.
Args:
key: The key of the item to remove.
"""
# with self._lock:
self._cache.pop(key, None)
def clear(self):
"""
Clear all items from the cache.
"""
with self._lock:
self._cache.clear()
def __contains__(self, key):
"""Check if the key is in the cache."""
return key in self._cache
def __getitem__(self, key):
"""Retrieve an item from the cache using the square bracket notation."""
return self.get(key)
def __setitem__(self, key, value):
"""Add an item to the cache using the square bracket notation."""
self.set(key, value)
def __delitem__(self, key):
"""Remove an item from the cache using the square bracket notation."""
self.delete(key)
def __len__(self):
"""Return the number of items in the cache."""
return len(self._cache)
def __repr__(self):
"""Return a string representation of the InMemoryCache instance."""
return f'InMemoryCache(max_size={self.max_size}, expiration_time={self.expiration_time})'
================================================
FILE: src/backend/bisheng/core/cache/manager.py
================================================
from contextlib import contextmanager
from typing import Any, Awaitable, Callable, List, Optional
import pandas as pd
from bisheng.utils.util import get_cache_key
from PIL import Image
class Subject:
"""Base class for implementing the observer pattern."""
def __init__(self):
self.observers: List[Callable[[], None]] = []
def attach(self, observer: Callable[[], None]):
"""Attach an observer to the subject."""
self.observers.append(observer)
def detach(self, observer: Callable[[], None]):
"""Detach an observer from the subject."""
self.observers.remove(observer)
def notify(self):
"""Notify all observers about an event."""
for observer in self.observers:
if observer is None:
continue
observer()
class AsyncSubject:
"""Base class for implementing the async observer pattern."""
def __init__(self):
self.observers: List[Callable[[], Awaitable]] = []
def attach(self, observer: Callable[[], Awaitable]):
"""Attach an observer to the subject."""
self.observers.append(observer)
def detach(self, observer: Callable[[], Awaitable]):
"""Detach an observer from the subject."""
self.observers.remove(observer)
async def notify(self):
"""Notify all observers about an event."""
for observer in self.observers:
if observer is None:
continue
await observer()
class CacheManager(Subject):
"""Manages cache for different clients and notifies observers on changes."""
def __init__(self):
super().__init__()
self._cache = {}
self.current_client_id = None
self.current_chat_id = None
self.current_cache = {}
@contextmanager
def set_client_id(self, client_id: str, chat_id: str):
"""
Context manager to set the current client_id and associated cache.
Args:
client_id (str): The client identifier.
"""
previous_client_id = self.current_client_id
previous_chat_id = self.current_chat_id
self.current_client_id = client_id
self.current_chat_id = chat_id
self.current_cache = self._cache.setdefault(get_cache_key(client_id, chat_id), {})
try:
yield
finally:
self.current_client_id = previous_client_id
self.current_chat_id = previous_chat_id
self.current_cache = self._cache.get(get_cache_key(self.current_client_id, self.current_chat_id), {})
def add(self, name: str, obj: Any, obj_type: str, extension: Optional[str] = None):
"""
Add an object to the current client's cache.
Args:
name (str): The cache key.
obj (Any): The object to cache.
obj_type (str): The type of the object.
"""
object_extensions = {
'image': 'png',
'pandas': 'csv',
}
if obj_type in object_extensions:
_extension = object_extensions[obj_type]
else:
_extension = type(obj).__name__.lower()
self.current_cache[name] = {
'obj': obj,
'type': obj_type,
'extension': extension or _extension,
}
self.notify()
def add_pandas(self, name: str, obj: Any):
"""
Add a pandas DataFrame or Series to the current client's cache.
Args:
name (str): The cache key.
obj (Any): The pandas DataFrame or Series object.
"""
if isinstance(obj, (pd.DataFrame, pd.Series)):
self.add(name, obj.to_csv(), 'pandas', extension='csv')
else:
raise ValueError('Object is not a pandas DataFrame or Series')
def add_image(self, name: str, obj: Any, extension: str = 'png'):
"""
Add a PIL Image to the current client's cache.
Args:
name (str): The cache key.
obj (Any): The PIL Image object.
"""
if isinstance(obj, Image.Image):
self.add(name, obj, 'image', extension=extension)
else:
raise ValueError('Object is not a PIL Image')
def get(self, name: str):
"""
Get an object from the current client's cache.
Args:
name (str): The cache key.
Returns:
The cached object associated with the given cache key.
"""
return self.current_cache[name]
def get_last(self):
"""
Get the last added item in the current client's cache.
Returns:
The last added item in the cache.
"""
return list(self.current_cache.values())[-1]
cache_manager = CacheManager()
================================================
FILE: src/backend/bisheng/core/cache/redis_conn.py
================================================
import pickle
import typing
from typing import Dict, Optional
import redis
from loguru import logger
from redis import ConnectionPool, RedisCluster
from redis.asyncio import Redis as AsyncRedis
from redis.asyncio.client import Pipeline
from redis.asyncio.cluster import RedisCluster as AsyncRedisCluster
from redis.asyncio.sentinel import Sentinel as AsyncSentinel
from redis.backoff import ExponentialBackoff
from redis.cluster import ClusterNode
from redis.retry import Retry
from redis.sentinel import Sentinel
class RedisClient:
def __init__(self, redis_url, max_connections=100):
# # Sentry Mode
if isinstance(redis_url, Dict):
redis_conf = dict(redis_url)
mode = redis_conf.pop('mode', 'sentinel')
if mode == 'cluster':
# Cluster Mode
cluster_url = ''
if 'startup_nodes' in redis_conf:
first_node = redis_conf['startup_nodes'][0]
cluster_url = f'redis://{first_node["host"]}:{first_node["port"]}'
redis_conf['startup_nodes'] = [
ClusterNode(node.get('host'), node.get('port'))
for node in redis_conf['startup_nodes']
]
self.connection = RedisCluster.from_url(cluster_url, **redis_conf,
retry=Retry(ExponentialBackoff(), 6),
cluster_error_retry_attempts=1)
self.async_connection: typing.Union[AsyncRedisCluster, AsyncRedis] = AsyncRedisCluster.from_url(
cluster_url, **redis_conf, retry=Retry(ExponentialBackoff(), 6), cluster_error_retry_attempts=1)
return
hosts = [eval(x) for x in redis_conf.pop('sentinel_hosts')]
password = redis_conf.pop('sentinel_password', None)
master = redis_conf.pop('sentinel_master')
sentinel = Sentinel(sentinels=hosts, socket_timeout=0.1, sentinel_kwargs={'password': password})
async_sentinel = AsyncSentinel(sentinels=hosts, socket_timeout=0.1, sentinel_kwargs={'password': password})
# Get the connection of the master node
self.connection = sentinel.master_for(master, socket_timeout=0.1, **redis_conf)
self.async_connection: AsyncRedis = async_sentinel.master_for(master, socket_timeout=0.1, **redis_conf)
else:
# Singleplayer Mode
self.pool = ConnectionPool.from_url(redis_url, max_connections=max_connections)
self.async_pool = redis.asyncio.ConnectionPool.from_url(redis_url, max_connections=max_connections)
self.connection = redis.StrictRedis(connection_pool=self.pool)
self.async_connection: AsyncRedis = redis.asyncio.Redis.from_pool(self.async_pool)
def set(self, key, value, expiration=3600, enx=None):
try:
if pickled := pickle.dumps(value):
self.cluster_nodes(key)
if expiration:
result = self.connection.setex(key, expiration, pickled)
else:
result = self.connection.set(key, pickled)
if not result:
raise ValueError('RedisCache could not set the value.')
else:
logger.error(f'pickle error, value={value}')
except TypeError as exc:
raise TypeError('RedisCache only accepts values that can be pickled. ') from exc
async def aset(self, key, value, expiration=3600):
try:
if pickled := pickle.dumps(value):
await self.acluster_nodes(key)
if expiration:
result = await self.async_connection.setex(name=key, value=pickled, time=expiration)
else:
result = await self.async_connection.set(key, pickled)
if not result:
raise ValueError('RedisCache could not set the value.')
else:
logger.error(f'pickle error, value={value}')
except TypeError as exc:
raise TypeError('RedisCache only accepts values that can be pickled. ') from exc
def setNx(self, key, value, expiration=3600):
try:
if pickled := pickle.dumps(value):
self.cluster_nodes(key)
result = self.connection.setnx(key, pickled)
self.connection.expire(key, expiration)
if not result:
return False
return True
except TypeError as exc:
raise TypeError('RedisCache only accepts values that can be pickled. ') from exc
async def asetNx(self, key, value, expiration=3600):
try:
if pickled := pickle.dumps(value):
await self.acluster_nodes(key)
result = await self.async_connection.setnx(key, pickled)
await self.async_connection.expire(key, expiration)
if not result:
return False
return True
except TypeError as exc:
raise TypeError('RedisCache only accepts values that can be pickled. ') from exc
def setex(self, key, value, expiration=3600):
try:
if pickled := pickle.dumps(value):
self.cluster_nodes(key)
result = self.connection.setex(key, expiration, pickled)
if not result:
raise ValueError('RedisCache could not set the value.')
else:
logger.error(f'pickle error, value={value}')
except TypeError as exc:
raise TypeError('RedisCache only accepts values that can be pickled. ') from exc
async def asetex(self, key, value, expiration=3600):
try:
if pickled := pickle.dumps(value):
await self.acluster_nodes(key)
result = await self.async_connection.setex(key, expiration, pickled)
if not result:
raise ValueError('RedisCache could not set the value.')
else:
logger.error(f'pickle error, value={value}')
except TypeError as exc:
raise TypeError('RedisCache only accepts values that can be pickled. ') from exc
def mset(self, mapping: Dict[str, typing.Any], expiration: int = None) -> bool | None:
"""Bulk Settings"""
try:
if not mapping:
return True
serialized_mapping = {k: pickle.dumps(v) for k, v in mapping.items() if v is not None}
result = self.connection.mset(serialized_mapping)
if expiration:
# UsepipelineBatch Set Expiration Time
pipe = self.connection.pipeline()
for key in mapping.keys():
pipe.expire(key, expiration)
pipe.execute()
return bool(result)
except TypeError as exc:
raise TypeError('RedisCache only accepts values that can be pickled. ') from exc
async def amset(self, mapping: Dict[str, typing.Any], expiration: int = None) -> bool | None:
"""Asynchronous Batch Setup"""
try:
if not mapping:
return True
serialized_mapping = {k: pickle.dumps(v) for k, v in mapping.items() if v is not None}
result = await self.async_connection.mset(serialized_mapping)
if expiration:
# UsepipelineBatch Set Expiration Time
pipe: Pipeline = self.async_connection.pipeline()
for key in mapping.keys():
await pipe.expire(key, expiration)
await pipe.execute()
return bool(result)
except TypeError as exc:
raise TypeError('RedisCache only accepts values that can be pickled. ') from exc
def mget(self, keys: typing.List[str]) -> typing.List[typing.Any] | None:
"""Get in bulk"""
try:
if not keys:
return []
values = self.connection.mget(keys)
return [pickle.loads(v) for v in values if v is not None]
except TypeError as exc:
raise TypeError('RedisCache only accepts values that can be pickled. ') from exc
async def amget(self, keys: typing.List[str]) -> typing.List[typing.Any] | None:
"""Asynchronous Batch Acquisition"""
try:
if not keys:
return []
values = await self.async_connection.mget(keys)
return [pickle.loads(v) for v in values if v is not None]
except TypeError as exc:
raise TypeError('RedisCache only accepts values that can be pickled. ') from exc
async def akeys(self, pattern: str) -> typing.List[str]:
"""Get all keys matching patterns asynchronously"""
try:
await self.acluster_nodes(pattern)
keys = await self.async_connection.keys(pattern)
return [key.decode('utf-8') for key in keys]
except Exception as e:
raise e
def hsetkey(self, name, key, value, expiration=3600):
try:
self.cluster_nodes(key)
r = self.connection.hset(name, key, value)
if expiration:
self.connection.expire(name, expiration)
return r
except Exception as e:
raise e
async def ahsetkey(self, name, key, value, expiration=3600):
try:
await self.acluster_nodes(key)
r = await self.async_connection.hset(name, key, value)
if expiration:
await self.async_connection.expire(name, expiration)
return r
except Exception as e:
raise e
def hset(self, name,
key: Optional[str] = None,
value: Optional[str] = None,
mapping: Optional[dict] = None,
items: Optional[list] = None,
expiration: int = 3600):
try:
self.cluster_nodes(name)
r = self.connection.hset(name, key, value, mapping, items)
if expiration:
self.connection.expire(name, expiration)
return r
except Exception as e:
raise e
async def ahset(self, name,
key: Optional[str] = None,
value: Optional[str] = None,
mapping: Optional[dict] = None,
items: Optional[list] = None,
expiration: int = 3600):
try:
await self.acluster_nodes(name)
r = await self.async_connection.hset(name, key, value, mapping, items)
if expiration:
await self.async_connection.expire(name, expiration)
return r
except Exception as e:
raise e
def hget(self, name, key):
try:
self.cluster_nodes(name)
return self.connection.hget(name, key)
except Exception as e:
raise e
async def ahget(self, name, key):
try:
await self.acluster_nodes(name)
return await self.async_connection.hget(name, key)
except Exception as e:
raise e
def hgetall(self, name):
try:
self.cluster_nodes(name)
return self.connection.hgetall(name)
except Exception as e:
raise e
async def ahgetall(self, name):
try:
await self.acluster_nodes(name)
return await self.async_connection.hgetall(name)
except Exception as e:
raise e
def hdel(self, name, *keys):
try:
self.cluster_nodes(name)
return self.connection.hdel(name, *keys)
except Exception as e:
raise e
async def ahdel(self, name, *keys):
try:
await self.acluster_nodes(name)
return await self.async_connection.hdel(name, *keys)
except Exception as e:
raise e
def get(self, key):
try:
self.cluster_nodes(key)
value = self.connection.get(key)
return pickle.loads(value) if value else None
except Exception as e:
raise e
async def aget(self, key):
try:
await self.acluster_nodes(key)
value = await self.async_connection.get(key)
return pickle.loads(value) if value else None
except Exception as e:
# Handle the case where the value is None or not picklable
raise e
def incr(self, key, expiration=3600) -> int:
try:
self.cluster_nodes(key)
value = self.connection.incr(key)
if expiration:
self.connection.expire(key, expiration)
return value
except Exception as e:
raise e
async def aincr(self, key, expiration=3600) -> int:
try:
await self.acluster_nodes(key)
value = await self.async_connection.incr(key)
if expiration:
await self.async_connection.expire(key, expiration)
return value
except Exception as e:
raise e
def expire_key(self, key, expiration: int):
try:
self.cluster_nodes(key)
self.connection.expire(key, expiration)
except Exception as e:
raise e
async def aexpire_key(self, key, expiration: int):
try:
await self.acluster_nodes(key)
await self.async_connection.expire(key, expiration)
except Exception as e:
raise e
def delete(self, key):
try:
self.cluster_nodes(key)
return self.connection.delete(key)
except Exception as e:
raise e
async def adelete(self, key):
try:
await self.acluster_nodes(key)
return await self.async_connection.delete(key)
except Exception as e:
raise e
async def alpush(self, key, value, expiration=3600):
try:
await self.acluster_nodes(key)
ret = await self.async_connection.lpush(key, value)
if expiration:
await self.aexpire_key(key, expiration)
return ret
except Exception as e:
raise e
async def ablpop(self, key, timeout=0):
try:
await self.acluster_nodes(key)
value = await self.async_connection.blpop(key, timeout)
return pickle.loads(value[1]) if value and value[1] else None
except Exception as e:
raise e
async def alrange(self, key, start=0, end=-1):
try:
await self.acluster_nodes(key)
values = await self.async_connection.lrange(key, start, end)
return [pickle.loads(v) for v in values if v is not None]
except Exception as e:
raise e
async def alrem(self, key, value):
try:
await self.acluster_nodes(key)
value = pickle.dumps(value) if not isinstance(value, bytes) else value
return await self.async_connection.lrem(key, 0, value)
except Exception as e:
raise e
def rpush(self, key, value, expiration=3600):
try:
self.cluster_nodes(key)
ret = self.connection.rpush(key, value)
if expiration:
self.expire_key(key, expiration)
return ret
except Exception as e:
raise e
async def arpush(self, key, value, expiration=3600):
try:
await self.acluster_nodes(key)
value = pickle.dumps(value) if not isinstance(value, bytes) else value
ret = await self.async_connection.rpush(key, value)
if expiration:
await self.aexpire_key(key, expiration)
return ret
except Exception as e:
raise e
def lpop(self, key, count: int = None):
try:
self.cluster_nodes(key)
return self.connection.lpop(key, count)
except Exception as e:
raise e
async def alpop(self, key, count: int = None):
try:
await self.acluster_nodes(key)
return await self.async_connection.lpop(key, count)
except Exception as e:
raise e
def publish(self, key, value):
try:
self.cluster_nodes(key)
return self.connection.publish(key, value)
except Exception as e:
raise e
async def apublish(self, key, value):
try:
await self.acluster_nodes(key)
return await self.async_connection.publish(key, value)
except Exception as e:
raise e
def exists(self, key):
try:
self.cluster_nodes(key)
return self.connection.exists(key)
except Exception as e:
raise e
async def aexists(self, key):
try:
await self.acluster_nodes(key)
return await self.async_connection.exists(key)
except Exception as e:
raise e
def close(self):
self.connection.close()
async def aclose(self):
"""Asynchronous close method for the Redis connection."""
if hasattr(self, 'async_connection') and self.async_connection:
await self.async_connection.close()
else:
logger.warning("No async connection to close.")
# ==================== PipelineSupport ====================
def pipeline(self, transaction: bool = True) -> redis.client.Pipeline:
"""DapatkanpipelineObjects"""
return self.connection.pipeline(transaction=transaction)
def async_pipeline(self, transaction: bool = True) -> Pipeline:
"""Get AsynchronouspipelineObjects"""
return self.async_connection.pipeline(transaction=transaction)
async def allen(self, key: str) -> int:
"""Check if the key is in the cache using the 'in' operator."""
await self.acluster_nodes(key)
return await self.async_connection.llen(key)
def __contains__(self, key):
"""Check if the key is in the cache."""
self.cluster_nodes(key)
return False if key is None else self.connection.exists(key)
def __getitem__(self, key):
"""Retrieve an item from the cache using the square bracket notation."""
self.cluster_nodes(key)
return self.connection.get(key)
def __setitem__(self, key, value):
"""Add an item to the cache using the square bracket notation."""
self.cluster_nodes(key)
self.connection.set(key, value)
def __delitem__(self, key):
"""Remove an item from the cache using the square bracket notation."""
self.cluster_nodes(key)
self.connection.delete(key)
def cluster_nodes(self, key):
if isinstance(self.connection,
RedisCluster) and self.connection.get_default_node() is None:
target = self.connection.get_node_from_key(key)
self.connection.set_default_node(target)
async def acluster_nodes(self, key):
if isinstance(self.async_connection,
AsyncRedisCluster) and self.async_connection.get_default_node() is None:
target = self.async_connection.get_node_from_key(key)
self.async_connection.set_default_node(target)
================================================
FILE: src/backend/bisheng/core/cache/redis_manager.py
================================================
import logging
from typing import Optional, Union, Dict
from bisheng.core.context import BaseContextManager
from bisheng.core.cache.redis_conn import RedisClient
logger = logging.getLogger(__name__)
class RedisManager(BaseContextManager[RedisClient]):
"""Redis Global Manager
Responsible for management Redis Global lifecycle of connectivity, providing a unified access interface
Supports connection pool monitoring, health checks, and easy operations management
"""
name: str = "redis"
def __init__(
self,
redis_url: Optional[Union[str, Dict]] = None,
**kwargs
):
super().__init__(self.name, **kwargs)
self.redis_url = redis_url
if not self.redis_url:
raise ValueError("Redis URL is required. Please provide via parameter.")
async def _async_initialize(self) -> RedisClient:
"""Inisialisasi Redis Connection Manager"""
return RedisClient(self.redis_url)
def _sync_initialize(self) -> RedisClient:
"""Synchronization Initialization"""
return RedisClient(self.redis_url)
def _sync_cleanup(self) -> None:
"""Synchronous Cleanup Redis reasourse"""
if self._instance:
self._instance.close()
async def _async_cleanup(self) -> None:
"""Cleaned Redis reasourse"""
if self._instance:
await self._instance.aclose()
async def get_redis_client() -> RedisClient:
"""Dapatkan Redis Client Instance"""
from bisheng.core.context.manager import app_context
try:
return await app_context.async_get_instance(RedisManager.name)
except KeyError:
logger.warning(f"RedisManager not found in app_context. Registering a new instance.")
try:
from bisheng.common.services.config_service import settings
app_context.register_context(RedisManager(
redis_url=settings.redis_url
))
return await app_context.async_get_instance(RedisManager.name)
except Exception as e:
logger.error(f"Failed to register RedisManager: {e}")
raise
def get_redis_client_sync() -> RedisClient:
"""Synchronous fetch Redis Client Instance"""
from bisheng.core.context.manager import app_context
try:
return app_context.sync_get_instance(RedisManager.name)
except KeyError:
logger.warning(f"RedisManager not found in app_context. Registering a new instance.")
try:
from bisheng.common.services.config_service import settings
app_context.register_context(RedisManager(
redis_url=settings.redis_url
))
return app_context.sync_get_instance(RedisManager.name)
except Exception as e:
logger.error(f"Failed to register RedisManager: {e}")
raise
================================================
FILE: src/backend/bisheng/core/cache/utils.py
================================================
import asyncio
import base64
import contextlib
import functools
import hashlib
import json
import os
import shutil
import tempfile
from collections import OrderedDict
from io import BytesIO
from pathlib import Path
from typing import Any, Dict, Union, BinaryIO
from urllib.parse import unquote, urlparse
from uuid import uuid4
import aiofiles
import cchardet
import requests
from appdirs import user_cache_dir
from fastapi import UploadFile
from urllib3.util import parse_url
from bisheng.core.external.http_client.http_client_manager import get_http_client
from bisheng.core.storage.minio.minio_manager import get_minio_storage, get_minio_storage_sync
CACHE: Dict[str, Any] = {}
CACHE_DIR = user_cache_dir('bisheng', 'bisheng')
def create_cache_folder(func):
def wrapper(*args, **kwargs):
# Get the destination folder
cache_path = Path(CACHE_DIR) / PREFIX
# Create the destination folder if it doesn't exist
os.makedirs(cache_path, exist_ok=True)
return func(*args, **kwargs)
return wrapper
def create_cache_folder_async(func):
async def wrapper(*args, **kwargs):
# Get the destination folder
cache_path = Path(CACHE_DIR) / PREFIX
# Create the destination folder if it doesn't exist
os.makedirs(cache_path, exist_ok=True)
return await func(*args, **kwargs)
return wrapper
def memoize_dict(maxsize=128):
cache = OrderedDict()
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
hashed = compute_dict_hash(args[0])
key = (func.__name__, hashed, frozenset(kwargs.items()))
if key not in cache:
result = func(*args, **kwargs)
cache[key] = result
if len(cache) > maxsize:
cache.popitem(last=False)
else:
result = cache[key]
return result
def clear_cache():
cache.clear()
wrapper.clear_cache = clear_cache # type: ignore
wrapper.cache = cache # type: ignore
return wrapper
return decorator
PREFIX = 'bisheng_cache'
@create_cache_folder
def clear_old_cache_files(max_cache_size: int = 3):
cache_dir = Path(tempfile.gettempdir()) / PREFIX
cache_files = list(cache_dir.glob('*.dill'))
if len(cache_files) > max_cache_size:
cache_files_sorted_by_mtime = sorted(cache_files,
key=lambda x: x.stat().st_mtime,
reverse=True)
for cache_file in cache_files_sorted_by_mtime[max_cache_size:]:
with contextlib.suppress(OSError):
os.remove(cache_file)
def compute_dict_hash(graph_data):
graph_data = filter_json(graph_data)
cleaned_graph_json = json.dumps(graph_data, sort_keys=True)
return hashlib.sha256(cleaned_graph_json.encode('utf-8')).hexdigest()
def filter_json(json_data):
filtered_data = json_data.copy()
# Remove 'viewport' and 'chatHistory' keys
if 'viewport' in filtered_data:
del filtered_data['viewport']
if 'chatHistory' in filtered_data:
del filtered_data['chatHistory']
# Filter nodes
if 'nodes' in filtered_data:
for node in filtered_data['nodes']:
if 'position' in node:
del node['position']
if 'positionAbsolute' in node:
del node['positionAbsolute']
if 'selected' in node:
del node['selected']
if 'dragging' in node:
del node['dragging']
return filtered_data
@create_cache_folder
def save_binary_file(content: str, file_name: str, accepted_types: list[str]) -> str:
"""
Save a binary file to the specified folder.
Args:
content: The content of the file as a bytes object.
file_name: The name of the file, including its extension.
Returns:
The path to the saved file.
"""
if not any(file_name.endswith(suffix) for suffix in accepted_types):
raise ValueError(f'File {file_name} is not accepted')
# Get the destination folder
cache_path = Path(CACHE_DIR) / PREFIX
if not content:
raise ValueError('Please, reload the file in the loader.')
data = content.split(',')[1]
decoded_bytes = base64.b64decode(data)
# Create the full file path
file_path = os.path.join(cache_path, file_name)
# Save the binary content to the file
with open(file_path, 'wb') as file:
file.write(decoded_bytes)
return file_path
def detect_encoding_cchardet(file_bytes: bytes, num_bytes=1024):
"""UsecchardetEncoding of the test file"""
result = cchardet.detect(file_bytes)
encoding = result['encoding']
confidence = result['confidence']
return encoding, confidence
def convert_encoding_cchardet(content: bytes, target_encoding='utf-8') -> BytesIO:
"""
Convert file encoding to target_encoding using cchardet for detection.
Args:
content:
target_encoding:
Returns:
BytesIO:
"""
source_encoding, confidence = detect_encoding_cchardet(content)
if confidence is None or confidence < 0.5 or source_encoding.lower() == target_encoding:
return BytesIO(content)
try:
# decode using detected encoding
text = content.decode(source_encoding)
except (UnicodeDecodeError, LookupError):
# If decoding fails, replace errors
text = content.decode(target_encoding, errors='replace')
# encode to target encoding
return BytesIO(text.encode(target_encoding))
async def upload_file_to_minio(file: UploadFile, object_name, bucket_name: str) -> str:
minio_client = await get_minio_storage()
await minio_client.put_object(bucket_name=bucket_name, object_name=object_name, file=file.file)
return await minio_client.get_share_link(object_name, bucket_name)
@create_cache_folder_async
async def save_file_to_folder(file: UploadFile, folder_name: str, file_name: str) -> str:
"""
Save uploaded file tofolder_nameFolders
:param file:
:param folder_name:
:param file_name:
:return:
"""
cache_path = Path(CACHE_DIR)
folder_path = cache_path / folder_name
# Create the folder if it doesn't exist
os.makedirs(folder_path, exist_ok=True)
# Save the file to the specified folder
file_path = folder_path / file_name
async with aiofiles.open(file_path, 'wb') as out_file:
while content := await file.read(8192):
await out_file.write(content)
return str(file_path)
@create_cache_folder
async def save_uploaded_file(file: UploadFile, folder_name, file_name, bucket_name: str = None):
"""
Save an uploaded file to the specified folder with a hash of its content as the file name.
Args:
file: The uploaded file object.
folder_name: The name of the folder to save the file in.
file_name: The name of the file, including its extension.
bucket_name: The name of the bucket_name
Returns:
The path to the saved file.
"""
minio_client = await get_minio_storage()
if bucket_name is None:
bucket_name = minio_client.tmp_bucket
cache_path = Path(CACHE_DIR)
folder_path = cache_path / folder_name
# Create the folder if it doesn't exist
if not folder_path.exists():
folder_path.mkdir(parents=True, exist_ok=True)
file_ext = file_name.split('.')[-1].lower()
file_data_to_upload = None
is_converted_text = False
try:
if file_ext in ('txt', 'md', 'csv'):
raw_content = await file.read()
file_data_to_upload = await asyncio.to_thread(
convert_encoding_cchardet,
content=raw_content,
target_encoding='utf-8'
)
is_converted_text = True
else:
# For other file types, use the original uploaded file
file_data_to_upload = file.file
# Reset file pointer to the beginning
file_data_to_upload.seek(0)
is_converted_text = False
await minio_client.put_object_tmp(object_name=file_name, file=file_data_to_upload)
finally:
if is_converted_text and file_data_to_upload:
file_data_to_upload.close()
file_path = await minio_client.get_share_link(file_name, bucket_name, clear_host=False)
return file_path
@create_cache_folder
def save_download_file(file_input: Union[bytes, BinaryIO], folder_name: str, filename: str) -> str:
"""
Synchronous I/O intensive tasks:
Write data stream to a temporary file
Simultaneously calculate SHA256
Rename a file based on the hash
"""
# Convert to stream objects
if isinstance(file_input, bytes):
src_stream = BytesIO(file_input)
else:
src_stream = file_input
# Make sure the pointer is at the beginning
if hasattr(src_stream, 'seek'):
src_stream.seek(0)
# Prepare a temporary file (write a temporary random filename first to avoid not being able to determine the filename before the hash calculation is finished).
cache_path = Path(CACHE_DIR)
folder_path = cache_path / folder_name
# Create the folder if it doesn't exist
if not folder_path.exists():
folder_path.mkdir(exist_ok=True)
temp_filename = f"tmp_{uuid4().hex}"
temp_file_path = folder_path / temp_filename
sha256_hash = hashlib.sha256()
try:
# Write to temporary file and calculate SHA256 simultaneously
with open(temp_file_path, 'wb') as dst_file:
chunk_size = 65536 # 64KB
while True:
chunk = src_stream.read(chunk_size)
if not chunk:
break
sha256_hash.update(chunk)
dst_file.write(chunk)
# calculate final hash
file_hash = sha256_hash.hexdigest()
# Logic for handling filename length limits
safe_filename = filename
if len(filename) > 60:
safe_filename = filename[-60:]
final_file_name = f'{file_hash}_{safe_filename}'
final_file_path = folder_path / final_file_name
# Rename (Move) Temporary File to Final Path
# If the file already exists, decide whether to overwrite or skip it based on your needs. This example demonstrates overwriting.
if final_file_path.exists():
os.remove(temp_file_path)
return str(final_file_path)
shutil.move(str(temp_file_path), str(final_file_path))
return str(final_file_path)
except Exception as e:
# Clean up temporary file in case of error
if temp_file_path.exists():
os.remove(temp_file_path)
raise e
finally:
if isinstance(file_input, bytes):
src_stream.close()
def file_download(file_path: str):
"""download file and return path"""
# Try processing as a local file first (extracted URL Parameters)
# If the system mounts a storage volume, remove ? The signature parameters behind it are read directly
local_candidate = file_path.split('?')[0]
if os.path.isfile(local_candidate):
file_name = os.path.basename(local_candidate)
# Compatible with legacy logic: handles what might be included in the filename md5 Prefix
file_name = file_name.split('_', 1)[-1] if '_' in file_name else file_name
return local_candidate, file_name
# Legacy Logic: Check if it is standard URL (Bawa http/https)
if _is_valid_url(file_path):
minio_client = get_minio_storage_sync()
minio_share_host = minio_client.get_minio_share_host()
url_obj = urlparse(file_path)
filename = unquote(url_obj.path.split('/')[-1])
if file_path.startswith(minio_share_host):
# download file from minio sdk
bucket_name, object_name = url_obj.path.replace(minio_share_host, "", 1).lstrip("/").split('/', 1)
object_name = unquote(object_name)
file_content = minio_client.get_object_sync(bucket_name, object_name)
else:
# download file from http url
r = requests.get(file_path, verify=False)
if r.status_code != 200:
raise ValueError('Check the url of your file; returned status code %s' % r.status_code)
# OthersContent-Dispositionheader to find the filename
content_disposition = r.headers.get('Content-Disposition')
if content_disposition:
filename = unquote(content_disposition).split('filename=')[-1].strip("\"'")
file_content = r.content
file_path = save_download_file(file_content, 'bisheng', filename)
return file_path, filename
# Medical Treatment: MinIO Relative path (In / Starts with a signature parameter)
# For Input: /bisheng/original/82324.docx?X-Amz-Algorithm=...
# No in this case host, cannot be accessed _is_valid_url Branch
elif file_path.startswith('/') and 'X-Amz-Algorithm' in file_path:
try:
minio_client = get_minio_storage_sync()
# Use urlparse parsing, it automatically separates path And query
url_obj = urlparse(file_path)
# path similar to /bisheng/original/82324.docx
# Remove the beginning /, and then split the first / Get bucket And object
path_parts = url_obj.path.lstrip("/").split('/', 1)
if len(path_parts) == 2:
bucket_name, object_name = path_parts
# Call Synchronized minio Method download
object_name = unquote(object_name)
file_content = minio_client.get_object_sync(bucket_name, object_name)
filename = unquote(object_name.split('/')[-1])
file_path = save_download_file(file_content, 'bisheng', filename)
return file_path, filename
except Exception as e:
# If the parsing fails, print the log and let the program continue to throw down ValueError
print(f"Error handling relative MinIO path: {e}")
elif not os.path.isfile(file_path):
raise ValueError('File path %s is not a valid file or url' % file_path)
# This is the one that handles purely local file paths (the one with no parameters) and is usually handled by the topmost logic 1 Interception
file_name = os.path.basename(file_path)
file_name = file_name.split('_', 1)[-1] if '_' in file_name else file_name
return file_path, file_name
async def async_file_download(file_path: str):
"""download file and return path"""
# Try processing as a local file first (extracted URL Parameters)
# If the system mounts the storage volume, this will solve the problem directly
local_candidate = file_path.split('?')[0]
if os.path.isfile(local_candidate):
file_name = os.path.basename(local_candidate)
# Is it included under processing?md5Logic of (Keep original logic)
file_name = file_name.split('_', 1)[-1] if '_' in file_name else file_name
return local_candidate, file_name
# Check if it is standard URL
if _is_valid_url(file_path):
http_client = await get_http_client()
minio_client = await get_minio_storage()
minio_share_host = minio_client.get_minio_share_host()
url_obj = parse_url(file_path)
filename = unquote(url_obj.path.split('/')[-1])
if file_path.startswith(minio_share_host):
# download file from minio sdk
bucket_name, object_name = url_obj.path.replace(minio_share_host, "", 1).lstrip("/").split('/', 1)
object_name = unquote(object_name)
file_content = await minio_client.get_object(bucket_name, object_name)
else:
r = await http_client.get(url=file_path, data_type="binary")
if r.status_code != 200:
raise ValueError('Check the url of your file; returned status code %s' % r.status_code)
content_disposition = r.headers.get('Content-Disposition') if r.headers else None
if content_disposition:
filename = unquote(content_disposition).split('filename=')[-1].strip("\"'")
file_content = r.body
file_path = save_download_file(file_content, 'bisheng', filename)
return file_path, filename
# Medical Treatment: MinIO Relative path (In / Starts with a signature parameter)
# For Input: /bisheng/original/82324.docx?X-Amz-Algorithm=...
elif file_path.startswith("/") and "X-Amz-Algorithm" in file_path:
try:
minio_client = await get_minio_storage()
# Resolve Path /bucket/object_key
url_obj = urlparse(file_path)
# path turned into /bisheng/original/82324.docx, remove the opening / and split the first one /
path_parts = url_obj.path.lstrip("/").split('/', 1)
if len(path_parts) == 2:
bucket_name, object_name = path_parts
object_name = unquote(object_name)
# Directly usable after finished products leave the factory minio client Download without http Request
file_content = await minio_client.get_object(bucket_name, object_name)
filename = unquote(object_name.split('/')[-1])
file_path = save_download_file(file_content, 'bisheng', filename)
return file_path, filename
except Exception as e:
# If parsing or downloading fails, log or drop it below ValueError
print(f"Error handling relative MinIO path: {e}")
raise ValueError('File path %s is not a valid file or url' % file_path)
def _is_valid_url(url: str):
"""Check if the url is valid."""
parsed = urlparse(url)
return bool(parsed.netloc) and bool(parsed.scheme)
================================================
FILE: src/backend/bisheng/core/config/__init__.py
================================================
================================================
FILE: src/backend/bisheng/core/config/settings.py
================================================
import ast
import json
import os
import re
from typing import Dict, List, Optional, Union
from celery.schedules import crontab
from cryptography.fernet import Fernet
from loguru import logger
from pydantic import ConfigDict, BaseModel, Field, field_validator, model_validator
secret_key = 'TI31VYJ-ldAq-FXo5QNPKV_lqGTFfp-MIdbK2Hm5F1E='
def encrypt_token(token: str):
return Fernet(secret_key).encrypt(token.encode())
def decrypt_token(token: str):
return Fernet(secret_key).decrypt(token).decode()
class LoggerConf(BaseModel):
"""Looger Config"""
level: str = 'DEBUG'
format: str = '[{level.name} process-{process.id}-{thread.id} {name}:{line}] - trace={extra[trace_id]} {message}' # noqa
handlers: List[Dict] = Field(default_factory=list, description='Log Processor')
@classmethod
def parse_logger_sink(cls, sink: str) -> str:
match = re.search(r'\{(.+?)\}', sink)
if not match:
return sink
env_keys = {}
for one in match.groups():
env_keys[one] = os.getenv(one, '')
return sink.format(**env_keys)
@field_validator('handlers')
@classmethod
def set_handlers(cls, value):
if value is None:
value = []
for one in value:
one['sink'] = cls.parse_logger_sink(one['sink'])
if one.get('filter'):
one['filter'] = eval(one['filter'])
return value
class PasswordConf(BaseModel):
""" Password Config """
password_valid_period: Optional[int] = Field(default=0, description='Password overXDays must be modified, Login prompt to change password again')
login_error_time_window: Optional[int] = Field(default=0, description='Login error time window,minutes unit')
max_error_times: Optional[int] = Field(default=0, description='Maximum number of errors, after which the user will be banned')
class SystemLoginMethod(BaseModel):
""" System Login Method Config """
bisheng_pro: bool = Field(default=False, description='Whether it is a commercial version, Verify Configuredlicense')
admin_username: Optional[str] = Field(default=None, description='Admin username registered via web')
allow_multi_login: bool = Field(default=True, description='Whether to allow multi-sign-on')
class MilvusConf(BaseModel):
""" milvus Configure """
connection_args: Optional[dict] = Field(default=None, description='milvus Configure')
is_partition: Optional[bool] = Field(default=True, description='Is itpartitionMode',
deprecated="Not in SupportpartitionMode")
partition_suffix: Optional[str] = Field(default='1', description='partitionSuffix',
deprecated="Not in SupportpartitionMode")
@field_validator('connection_args', mode='before')
@classmethod
def convert_connection_args(cls, value):
if isinstance(value, str):
return json.loads(value)
return value
class ElasticsearchConf(BaseModel):
""" elasticsearch Configure """
elasticsearch_url: Optional[str] = Field(default=None, alias='url',
description='elasticsearchAccesses address')
ssl_verify: Optional[str | dict] = Field(default='{}', description='Additional Arguments')
@model_validator(mode='after')
def validate(self):
if isinstance(self.ssl_verify, str):
self.ssl_verify = ast.literal_eval(self.ssl_verify)
return self
class VectorStores(BaseModel):
""" Vector Storage Configuration """
milvus: MilvusConf = Field(default_factory=MilvusConf, description='milvus Configure')
elasticsearch: ElasticsearchConf = Field(default_factory=ElasticsearchConf, description='elasticsearch Configure')
class MinioConf(BaseModel):
""" minio Configure """
secure: Optional[bool] = Field(default=False, description="Apakah ingin digunakan?https", alias="schema")
cert_check: Optional[bool] = Field(default=False, description="Whether to calibrate the certificate")
endpoint: Optional[str] = Field(default="127.0.0.1:9000", description="minio Service address")
sharepoint: Optional[str] = Field(default="127.0.0.1:9000", description="minio Public access address")
share_schema: Optional[bool] = Field(default=False, description="minio Whether the public access address is usedhttps")
share_cert_check: Optional[bool] = Field(default=False, description="minio Whether the public access address verifies the certificate")
access_key: Optional[str] = Field(default="minioadmin", description="minio Username")
secret_key: Optional[str] = Field(default="minioadmin", description="minio Passwords")
public_bucket: Optional[str] = Field(default="bisheng",
description="Store permanent files by defaultbucket. Files can be permanently accessed by anonymous users")
tmp_bucket: Optional[str] = Field(default="tmp-dir", description="Ad hocbucket, stored files will have an expiration date")
class ObjectStore(BaseModel):
""" Object Storage Configuration """
type: str = Field(default='minio', description="Object Storage Type")
minio: Optional[MinioConf] = Field(default_factory=MinioConf, description="minio Configure")
class WorkflowConf(BaseModel):
""" Workflow Configuration """
max_steps: int = Field(default=50, description="Maximum number of steps a node can run")
timeout: int = Field(default=720, description="Node timeout (min)")
class CeleryConf(BaseModel):
""" Celery Configure """
task_routers: Optional[Dict] = Field(default_factory=dict, description='Task Routing Configuration')
beat_schedule: Optional[Dict] = Field(default_factory=dict, description='Timed Task Configuration')
@model_validator(mode='after')
def validate(self):
if not self.task_routers:
self.task_routers = {
"bisheng.worker.knowledge.*": {"queue": "knowledge_celery"}, # Knowledge Base Related Tasks
"bisheng.worker.workflow.*": {"queue": "workflow_celery"}, # Workflow Execution Related Tasks
}
if 'telemetry_mid_user_increment' not in self.beat_schedule:
self.beat_schedule['telemetry_mid_user_increment'] = {
'task': 'bisheng.worker.telemetry.mid_table.sync_mid_user_increment',
'schedule': crontab('*/30 0 * * *'), # 00:30 exec every day
}
if 'telemetry_mid_knowledge_increment' not in self.beat_schedule:
self.beat_schedule['telemetry_mid_knowledge_increment'] = {
'task': 'bisheng.worker.telemetry.mid_table.sync_mid_knowledge_increment',
'schedule': crontab('*/30 0 * * *'), # 00:30 exec every day
}
if 'telemetry_sync_mid_app_increment' not in self.beat_schedule:
self.beat_schedule['telemetry_sync_mid_app_increment'] = {
'task': 'bisheng.worker.telemetry.mid_table.sync_mid_app_increment',
'schedule': crontab('*/30 0 * * *'), # 00:30 exec every day
}
if 'telemetry_sync_mid_user_interact_dtl' not in self.beat_schedule:
self.beat_schedule['telemetry_sync_mid_user_interact_dtl'] = {
'task': 'bisheng.worker.telemetry.mid_table.sync_mid_user_interact_dtl',
'schedule': crontab('*/30 0 * * *'), # 00:30 exec every day
}
# convert str to crontab
for key, task_info in self.beat_schedule.items():
if isinstance(task_info['schedule'], str):
self.beat_schedule[key]['schedule'] = crontab(task_info['schedule'])
return self
class LinsightConf(BaseModel):
""" Inspiration Configuration """
debug: bool = Field(default=False, description='Whether to opendebugMode')
tool_buffer: int = Field(default=100000, description='Maximum Tool Execution Historytoken, you need to summarize your history after')
max_steps: int = Field(default=200, description='Maximum number of steps per task to prevent infinite loops')
retry_num: int = Field(default=3, description='Number of times the model call was retried during the execution of the Ideas task')
retry_sleep: int = Field(default=5, description='Interval between retries of model calls during execution of Invisible Tasks (seconds)')
max_file_num: int = Field(default=5, description='BuatSOPJampromptThe number of user-uploaded file information placed in the')
max_knowledge_num: int = Field(default=20, description='BuatSOPJampromptThe amount of knowledge base information placed in the')
waiting_list_url: str = Field(default=None, description='waiting list Jump link')
default_temperature: float = Field(default=0, description='Default Temperature at Model Request')
retry_temperature: float = Field(default=1, description='reactModejsonModel temperature when retrying after parsing failure')
file_content_length: int = Field(default=5000, description='The number of characters to read the contents of the file when splitting subtasks, which will be truncated when exceeded')
max_file_content_num: int = Field(default=3, description='Number of files to read when subtasking, in reverse order by modification time')
class CookieConf(BaseModel):
""" Cookie Configure """
max_age: Optional[int] = Field(default=None, description="Cookie Maximum survival time in seconds")
path: str = Field(default='/', description="Cookie Path Properties for")
domain: Optional[str] = Field(default=None, description="Cookie Domain Properties for")
secure: bool = Field(default=False, description="enabled secure Property")
httponly: bool = Field(default=True, description="enabled HttpOnly Property")
samesite: str = Field(default=None, description="SameSite property, optional value is 'lax', 'strict', 'none'")
jwt_token_expire_time: int = Field(default=86400, description="JwtTokenExpiration time in seconds")
jwt_iss: str = Field(default='bisheng', description="JwtTokenIssuer of")
class Etl4lmConf(BaseModel):
""" Etl4lm Configure """
url: str = Field(default='', description='etl4lmService Address')
timeout: int = Field(default=600, description='etl4lmService Request Timeout (sec)')
ocr_sdk_url: str = Field(default='', description='etl4lm ocr sdkService Address')
class KnowledgeConf(BaseModel):
""" Knowledge Configure """
etl4lm: Etl4lmConf
class Settings(BaseModel):
""" Application Settings """
model_config = ConfigDict(validate_assignment=True, arbitrary_types_allowed=True, extra='ignore')
chains: dict = {}
agents: dict = {}
prompts: dict = {}
llms: dict = {}
tools: dict = {}
memories: dict = {}
embeddings: dict = {}
knowledges: dict = {}
vectorstores: dict = {}
documentloaders: dict = {}
wrappers: dict = {}
retrievers: dict = {}
toolkits: dict = {}
textsplitters: dict = {}
utilities: dict = {}
input_output: dict = {}
output_parsers: dict = {}
autogen_roles: dict = {}
dev: bool = False
environment: Union[dict, str] = 'dev'
# ↑↑↑ before config for langchain flow, will be deprecated
debug: bool = False
database_url: Optional[str] = None
redis_url: Optional[Union[str, Dict]] = None
celery_redis_url: Optional[Union[str, Dict]] = None
redis: Optional[dict] = None
admin: dict = {}
cache: str = 'InMemoryCache'
remove_api_keys: bool = False
bisheng_rt: dict = {}
default_llm: dict = {}
jwt_secret: str = 'secret'
gpts: dict = {}
openai_conf: dict = {}
minio_conf: dict = {}
linsight_conf: LinsightConf = LinsightConf()
logger_conf: LoggerConf = LoggerConf()
password_conf: PasswordConf = PasswordConf()
system_login_method: SystemLoginMethod = SystemLoginMethod()
vector_stores: VectorStores = VectorStores()
object_storage: ObjectStore = ObjectStore()
workflow_conf: WorkflowConf = WorkflowConf()
celery_task: CeleryConf = CeleryConf()
cookie_conf: CookieConf = CookieConf()
telemetry_elasticsearch: ElasticsearchConf = ElasticsearchConf()
license_str: Optional[str] = None # license Contents
@field_validator('database_url')
@classmethod
def set_database_url(cls, value):
if not value:
logger.debug('No database_url provided, trying bisheng_DATABASE_URL env variable')
if bisheng_database_url := os.getenv('bisheng_DATABASE_URL'):
value = bisheng_database_url
else:
logger.debug('No DATABASE_URL env variable, using sqlite database')
value = 'sqlite:///./bisheng.db'
else:
# Encrypt password
import re
pattern = r'(?<=:)[^:]+(?=@)' # Match colon after to@Any character before the symbol
match = re.search(pattern, value)
if match:
password = match.group(0)
new_password = decrypt_token(password)
new_mysql_url = re.sub(pattern, f'{new_password}', value)
value = new_mysql_url
return value
@model_validator(mode='before')
@classmethod
def set_redis_url(cls, values):
if 'redis_url' in values:
if isinstance(values['redis_url'], dict):
for k, v in values['redis_url'].items():
if isinstance(v, str) and v.startswith('encrypt(') and v.endswith(')'):
v = v[8:-1]
values['redis_url'][k] = decrypt_token(v)
else:
import re
pattern = r'(?<=:)[^:]+(?=@)' # Match colon after to@Any character before the symbol
match = re.search(pattern, values['redis_url'])
if match:
password = match.group(0)
new_password = decrypt_token(password)
new_redis_url = re.sub(pattern, f'{new_password}', values['redis_url'])
values['redis_url'] = new_redis_url
return values
@model_validator(mode='before')
@classmethod
def set_celery_redis_url(cls, values):
if 'celery_redis_url' in values:
if isinstance(values['celery_redis_url'], dict):
for k, v in values['celery_redis_url'].items():
if isinstance(v, str) and v.startswith('encrypt(') and v.endswith(')'):
v = v[8:-1]
values['celery_redis_url'][k] = decrypt_token(v)
else:
import re
pattern = r'(?<=:)[^:]+(?=@)' # Match colon after to@Any character before the symbol
match = re.search(pattern, values['celery_redis_url'])
if match:
password = match.group(0)
new_password = decrypt_token(password)
new_redis_url = re.sub(pattern, f'{new_password}', values['celery_redis_url'])
values['celery_redis_url'] = new_redis_url
return values
@model_validator(mode='before')
@classmethod
def validate_lists(cls, values):
for key, value in values.items():
if key != 'dev' and not value:
values[key] = []
return values
def get_minio_conf(self) -> MinioConf:
return self.object_storage.minio
def get_vectors_conf(self) -> VectorStores:
return self.vector_stores
def get_search_conf(self) -> ElasticsearchConf:
return self.vector_stores.elasticsearch
def get_telemetry_conf(self) -> ElasticsearchConf:
if not self.telemetry_elasticsearch.elasticsearch_url:
return self.vector_stores.elasticsearch
return self.telemetry_elasticsearch
================================================
FILE: src/backend/bisheng/core/context/__init__.py
================================================
"""Application Context Management Module
Provide a common context management framework, including:
- Thread-safe lazy loading mechanism
- Automatic Caching and Instance Lifecycle Management
- Dependency injection and initialization sequence control
- Retry mechanism and timeout handling
- Health check and monitoring functions
- Convenient context manager support
Usage examples:
# basic use
from bisheng.core.context import initialize_app_context, get_context
await initialize_app_context()
db = await get_context('database').async_get_instance()
# Using the Context Manager
async with get_context('database').async_context() as db:
# Use db
pass
"""
from .base import (
# Core classes and statuses
BaseContextManager,
FunctionContextManager,
ContextRegistry,
ContextState,
# Exception Class
ContextError,
ContextInitializationError,
ContextTimeoutError,
ContextStateError,
)
from .manager import (
# APP MANAGER
ApplicationContextManager,
app_context,
# Initialization and Lifecycle Management
initialize_app_context,
close_app_context,
# Context Access and Management
get_context,
async_get_instance,
sync_get_instance,
register_context,
# Monitoring and Diagnostics
health_check,
)
__all__ = [
# Core Base Classes and States
'BaseContextManager',
'FunctionContextManager',
'ContextRegistry',
'ContextState',
# Exception Class
'ContextError',
'ContextInitializationError',
'ContextTimeoutError',
'ContextStateError',
# APP MANAGER
'ApplicationContextManager',
'app_context',
# PRODUCT LIFECYCLE MANAGEMENT
'initialize_app_context',
'close_app_context',
# Context Access and Management
'get_context',
'async_get_instance',
'sync_get_instance',
'register_context',
# Monitoring and Diagnostics
'health_check',
]
================================================
FILE: src/backend/bisheng/core/context/base.py
================================================
import asyncio
import time
from abc import ABC, abstractmethod
from contextlib import asynccontextmanager, contextmanager
from enum import Enum
from threading import Lock, Event
from typing import Any, Dict, Optional, TypeVar, Generic, Callable, Awaitable, Union
from loguru import logger
T = TypeVar('T')
class ContextState(Enum):
"""Context State Enumeration"""
UNINITIALIZED = "uninitialized" # Not Initialized
INITIALIZING = "initializing" # Initializing
READY = "ready" # Working on it...
ERROR = "error" # Error State
CLOSING = "closing" # closing
CLOSED = "closed" # Closed
class ContextError(Exception):
"""Context-dependent exception base class"""
pass
class ContextInitializationError(ContextError):
"""Context initialization exception"""
pass
class ContextTimeoutError(ContextError):
"""Context operation timeout exception"""
pass
class ContextStateError(ContextError):
"""Context status exception"""
pass
class BaseContextManager(ABC, Generic[T]):
"""Underlying Manager Abstract Class
Defines the interfaces that all context managers must implement
Provides thread-safe lazy loading, caching, and lifecycle management
"""
name: str
_default_timeout: float = 30.0 # Timeout default
_default_retry_count: int = 3 # Default number of retries
def __init__(self, name: str = None, timeout: float = None, retry_count: int = None, **kwargs):
self.name = name or getattr(self.__class__, 'name', self.__class__.__name__.lower())
self.timeout = timeout or self._default_timeout
self.retry_count = retry_count or self._default_retry_count
self.state = ContextState.UNINITIALIZED
self._instance: Optional[T] = None
self._error: Optional[Exception] = None
# Synchronous and asynchronous locks
self._sync_lock = Lock()
self._async_lock = asyncio.Lock()
# Synchronization Waiting Event
self._sync_ready_event = Event()
self._async_ready_event = asyncio.Event()
@abstractmethod
async def _async_initialize(self) -> T:
"""Asynchronous initialization resources (abstract methods)"""
pass
@abstractmethod
def _sync_initialize(self) -> T:
"""Synchronous initialization resources (abstract methods)"""
pass
@abstractmethod
async def _async_cleanup(self) -> None:
"""Asynchronous Cleanup Resource (Abstract Method)"""
pass
@abstractmethod
def _sync_cleanup(self) -> None:
"""Synchronous Cleanup Resource (Abstract Method)"""
pass
def _validate_state_for_access(self) -> None:
"""Verify that the status allows access to the instance"""
if self.state == ContextState.ERROR:
error_msg = f"Context '{self.name}' is in error state"
if self._error:
error_msg += f": {self._error}"
raise ContextStateError(error_msg)
if self.state == ContextState.CLOSED:
raise ContextStateError(f"Context '{self.name}' is closed and cannot be accessed")
async def _wait_for_initialization_async(self) -> None:
"""Asynchronous waiting for initialization to complete"""
try:
await asyncio.wait_for(self._async_ready_event.wait(), timeout=self.timeout)
except asyncio.TimeoutError:
raise ContextTimeoutError(f"Context '{self.name}' initialization timeout after {self.timeout}s")
def _wait_for_initialization_sync(self) -> None:
"""Sync waiting for initialization to complete"""
if not self._sync_ready_event.wait(timeout=self.timeout):
raise ContextTimeoutError(f"Context '{self.name}' initialization timeout after {self.timeout}s")
async def async_get_instance(self) -> T:
"""Asynchronous Get Context Instance
Returns:
T: Contextual instance after initialization
Raises:
ContextStateError: Context is in error state or closed
ContextTimeoutError: Initialization timeout
ContextInitializationError: Initialization failed
"""
# Quick Path: Instance Ready
if self.state == ContextState.READY and self._instance is not None:
return self._instance
self._validate_state_for_access()
async with self._async_lock:
# Dual Lock Check Mode
if self.state == ContextState.READY and self._instance is not None:
return self._instance
# If initializing, wait for completion
if self.state == ContextState.INITIALIZING:
await self._wait_for_initialization_async()
self._validate_state_for_access()
if self.state == ContextState.READY and self._instance is not None:
return self._instance
# Start Initialization
return await self._perform_initialization_async()
async def _perform_initialization_async(self) -> T:
"""Execute asynchronous initialization logic"""
self.state = ContextState.INITIALIZING
self._async_ready_event.clear()
last_error = None
for attempt in range(self.retry_count):
try:
logger.debug(f"Initializing context '{self.name}' (attempt {attempt + 1}/{self.retry_count})")
self._instance = await self._async_initialize()
self.state = ContextState.READY
self._async_ready_event.set()
self._sync_ready_event.set()
logger.debug(f"Context '{self.name}' initialized successfully")
return self._instance
except Exception as e:
last_error = e
if attempt < self.retry_count - 1:
wait_time = 2 ** attempt # Exponential withdrawal
logger.warning(
f"Context '{self.name}' init attempt {attempt + 1} failed: {e}, retrying in {wait_time}s")
await asyncio.sleep(wait_time)
else:
logger.error(f"Context '{self.name}' initialization failed after {self.retry_count} attempts: {e}")
# All retries failed
self.state = ContextState.ERROR
self._error = last_error
self._async_ready_event.set() # Failed to notify waiter
self._sync_ready_event.set()
raise ContextInitializationError(f"Failed to initialize context '{self.name}': {last_error}") from last_error
def sync_get_instance(self) -> T:
"""Synchronize Get Context Instance
Returns:
T: Contextual instance after initialization
Raises:
ContextStateError: Context is in error state, closed or initialization timed out
ContextInitializationError: Initialization failed
"""
# Quick Path: Instance Ready
if self.state == ContextState.READY and self._instance is not None:
return self._instance
self._validate_state_for_access()
with self._sync_lock:
# Dual Lock Check Mode
if self.state == ContextState.READY and self._instance is not None:
return self._instance
# If initializing, wait for completion
if self.state == ContextState.INITIALIZING:
self._wait_for_initialization_sync()
self._validate_state_for_access()
if self.state == ContextState.READY and self._instance is not None:
return self._instance
# Start Initialization
return self._perform_initialization_sync()
def _perform_initialization_sync(self) -> T:
"""Execute Synchronization Initialization Logic"""
self.state = ContextState.INITIALIZING
self._sync_ready_event.clear()
self._async_ready_event.clear()
last_error = None
for attempt in range(self.retry_count):
try:
logger.debug(f"Initializing context '{self.name}' (attempt {attempt + 1}/{self.retry_count})")
self._instance = self._sync_initialize()
self.state = ContextState.READY
self._sync_ready_event.set()
self._async_ready_event.set()
logger.debug(f"Context '{self.name}' initialized successfully")
return self._instance
except Exception as e:
last_error = e
if attempt < self.retry_count - 1:
wait_time = 2 ** attempt # Exponential withdrawal
logger.warning(
f"Context '{self.name}' init attempt {attempt + 1} failed: {e}, retrying in {wait_time}s")
time.sleep(wait_time)
else:
logger.error(f"Context '{self.name}' initialization failed after {self.retry_count} attempts: {e}")
# All retries failed
self.state = ContextState.ERROR
self._error = last_error
self._sync_ready_event.set() # Failed to notify waiter
self._async_ready_event.set()
raise ContextInitializationError(f"Failed to initialize context '{self.name}': {last_error}") from last_error
async def async_close(self) -> None:
"""Shutdown context manager asynchronously
Safely release resources and set status to off
"""
if self.state in [ContextState.CLOSING, ContextState.CLOSED]:
return
async with self._async_lock:
if self.state in [ContextState.CLOSING, ContextState.CLOSED]:
return
self.state = ContextState.CLOSING
try:
if self._instance is not None:
logger.debug(f"Closing context '{self.name}'")
await self._async_cleanup()
self._instance = None
logger.debug(f"Context '{self.name}' closed successfully")
except Exception as e:
logger.error(f"Error closing context '{self.name}': {e}")
# Mark as closed to avoid resource leakage even if cleanup fails
finally:
self.state = ContextState.CLOSED
self._error = None
# Ensure events are set to prevent unlimited wait time for waiters
self._async_ready_event.set()
self._sync_ready_event.set()
def sync_close(self) -> None:
"""Sync Close Context Manager
Safely release resources and set status to off
"""
if self.state in [ContextState.CLOSING, ContextState.CLOSED]:
return
with self._sync_lock:
if self.state in [ContextState.CLOSING, ContextState.CLOSED]:
return
self.state = ContextState.CLOSING
try:
if self._instance is not None:
logger.debug(f"Closing context '{self.name}'")
self._sync_cleanup()
self._instance = None
logger.debug(f"Context '{self.name}' closed successfully")
except Exception as e:
logger.error(f"Error closing context '{self.name}': {e}")
# Mark as closed to avoid resource leakage even if cleanup fails
finally:
self.state = ContextState.CLOSED
self._error = None
# Ensure events are set to prevent unlimited wait time for waiters
self._async_ready_event.set()
self._sync_ready_event.set()
async def async_reset(self) -> None:
"""Reset Context Manager
Close the current instance and reset it to the uninitialized state, it will be reinitialized on the next visit
"""
await self.async_close()
async with self._async_lock:
self.state = ContextState.UNINITIALIZED
self._error = None
self._async_ready_event.clear()
self._sync_ready_event.clear()
def sync_reset(self) -> None:
"""Reset Context Manager
Close the current instance and reset it to the uninitialized state, it will be reinitialized on the next visit
"""
self.sync_close()
with self._sync_lock:
self.state = ContextState.UNINITIALIZED
self._error = None
self._async_ready_event.clear()
self._sync_ready_event.clear()
def is_ready(self) -> bool:
"""Check to see if it's ready
Returns:
bool: True If the context is initialized and available,False Otherwise,
"""
return self.state == ContextState.READY and self._instance is not None
def get_state(self) -> ContextState:
"""Fetch the current status
Returns:
ContextState: Current Context State
"""
return self.state
def get_error(self) -> Optional[Exception]:
"""Get the last error message
Returns:
Optional[Exception]: If in error state, return error message, otherwise return None
"""
return self._error
def get_info(self) -> Dict[str, Any]:
"""Get Context Information
Returns:
Dict[str, Any]: Dictionary with contextual details
"""
return {
'name': self.name,
'state': self.state.value,
'is_ready': self.is_ready(),
'timeout': self.timeout,
'retry_count': self.retry_count,
'error': str(self._error) if self._error else None,
'has_instance': self._instance is not None
}
@contextmanager
def sync_context(self):
"""Synchronization Context Manager
Use with Statements automatically fetch and free resources
Example:
with my_context.sync_context() as instance:
# Use instance
pass
"""
instance = self.sync_get_instance()
try:
yield instance
finally:
# Note: This does not close automatically as it may be used elsewhere
pass
@asynccontextmanager
async def async_context(self):
"""Asynchronous Context Manager
Use async with Statements automatically fetch and free resources
Example:
async with my_context.async_context() as instance:
# Use instance
pass
"""
instance = await self.async_get_instance()
try:
yield instance
finally:
# Note: This does not close automatically as it may be used elsewhere
pass
def __repr__(self) -> str:
return f"<{self.__class__.__name__}(name='{self.name}', state='{self.state.value}')>"
class FunctionContextManager(BaseContextManager[T]):
"""Function-based context manager
Allows initialization and cleanup logic to be defined via functions
"""
def __init__(
self,
name: str,
init_func: Union[Callable[[], Awaitable[T]], Callable[[], T]],
cleanup_func: Optional[Union[Callable[[T], Awaitable[None]], Callable[[T], None]]] = None,
**kwargs
):
super().__init__(name, **kwargs)
self.init_func = init_func
self.cleanup_func = cleanup_func
self._is_async = asyncio.iscoroutinefunction(init_func)
async def _async_initialize(self) -> T:
"""Initialize the instance using the initialization function"""
if not self._is_async:
# Execute in thread pool if initialization function is not asynchronous
loop = asyncio.get_event_loop()
return await loop.run_in_executor(None, self.init_func)
return await self.init_func()
def _sync_initialize(self) -> T:
"""Synchronization Initialization"""
if self._is_async:
raise TypeError(f"Cannot call async init_func '{self.init_func.__name__}' in sync context")
return self.init_func()
async def _async_cleanup(self) -> None:
"""Clean up instances using the cleanup function"""
if self.cleanup_func and self._instance:
if asyncio.iscoroutinefunction(self.cleanup_func):
await self.cleanup_func(self._instance)
else:
loop = asyncio.get_event_loop()
await loop.run_in_executor(None, self.cleanup_func, self._instance)
def _sync_cleanup(self) -> None:
"""Synchronous Cleanup"""
if self.cleanup_func and self._instance:
if asyncio.iscoroutinefunction(self.cleanup_func):
raise TypeError(f"Cannot call async cleanup_func '{self.cleanup_func.__name__}' in sync context")
self.cleanup_func(self._instance)
class ContextRegistry:
"""Context Registry
Manage Enrollment and Lifecycle for Multiple Context Managers
"""
def __init__(self):
self._contexts: Dict[str, BaseContextManager] = {}
self._lock = Lock()
def register(self, context_manager: BaseContextManager) -> None:
"""Register Context Manager
Args:
context_manager: Context manager to register
Raises:
ValueError: If a context with the same name already exists
"""
with self._lock:
if context_manager.name in self._contexts:
logger.warning(f"Context '{context_manager.name}' is already registered")
return
self._contexts[context_manager.name] = context_manager
logger.debug(f"Registered context: '{context_manager.name}'")
def unregister(self, name: str) -> None:
"""Log out of the context manager
Args:
name: Context name to be logged out
"""
with self._lock:
if name in self._contexts:
context = self._contexts[name]
# Close context before deleting
try:
context.sync_close()
except Exception as e:
logger.warning(f"Error closing context '{name}' during unregister: {e}")
del self._contexts[name]
logger.debug(f"Unregistered context: '{name}'")
def get_context(self, name: str) -> BaseContextManager:
"""Get Context Manager
Args:
name: Context Name
Returns:
BaseContextManager: Corresponding context manager
Raises:
KeyError: If the context does not exist
"""
if name not in self._contexts:
raise KeyError(f"Context '{name}' not found. Available contexts: {list(self._contexts.keys())}")
return self._contexts[name]
def has_context(self, name: str) -> bool:
"""Check if there is a context with the specified name
Args:
name: Context Name
Returns:
bool: Return if present True, otherwise go back to False
"""
return name in self._contexts
async def async_get_instance(self, name: str) -> Any:
"""Asynchronous Get Context Instance"""
context = self.get_context(name)
return await context.async_get_instance()
def sync_get_instance(self, name: str) -> Any:
"""Synchronize Get Context Instance"""
context = self.get_context(name)
return context.sync_get_instance()
async def async_close_all(self) -> None:
"""Shut down all context managers asynchronously"""
contexts = list(self._contexts.values())
# Shut down all contexts in parallel to improve performance
close_tasks = [context.async_close() for context in contexts]
results = await asyncio.gather(*close_tasks, return_exceptions=True)
# Log errors during shutdown
for context, result in zip(contexts, results):
if isinstance(result, Exception):
logger.error(f"Error closing context '{context.name}': {result}")
def sync_close_all(self) -> None:
"""Synchronously close all context managers"""
for context in self._contexts.values():
try:
context.sync_close()
except Exception as e:
logger.error(f"Error closing context '{context.name}': {e}")
def get_all_contexts(self) -> Dict[str, BaseContextManager]:
"""Get a copy of all context managers
Returns:
Dict[str, BaseContextManager]: Contains a dictionary copy of all context managers
"""
return self._contexts.copy()
def get_ready_contexts(self) -> Dict[str, BaseContextManager]:
"""Get all ready context managers
Returns:
Dict[str, BaseContextManager]: Dictionary with all ready context managers
"""
return {
name: context
for name, context in self._contexts.items()
if context.is_ready()
}
def get_context_states(self) -> Dict[str, ContextState]:
"""Get the status of all contexts
Returns:
Dict[str, ContextState]: Context name to state mapping
"""
return {
name: context.get_state()
for name, context in self._contexts.items()
}
async def health_check(self) -> Dict[str, bool]:
"""Perform health checks for all contexts
Returns:
Dict[str, bool]: Context name to health state mapping
"""
results = {}
for name, context in self._contexts.items():
try:
# Prefer to use if there is a custom health check method in context
if hasattr(context, 'health_check') and callable(getattr(context, 'health_check')):
health_check_func = getattr(context, 'health_check')
if asyncio.iscoroutinefunction(health_check_func):
results[name] = await health_check_func()
else:
results[name] = health_check_func()
else:
# Otherwise use basic readiness checks
results[name] = context.is_ready()
except Exception as e:
logger.error(f"Health check failed for context '{name}': {e}")
results[name] = False
return results
def clear(self) -> None:
"""Clear all contexts (close before deleting)"""
with self._lock:
# Close all contexts first
self.sync_close_all()
# Empty registry
self._contexts.clear()
logger.debug("All contexts cleared from registry")
def __len__(self) -> int:
"""Returns the number of registered contexts"""
return len(self._contexts)
def __contains__(self, name: str) -> bool:
"""Support 'name' in registry Grammar"""
return name in self._contexts
def __iter__(self):
"""Support for iterative context names"""
return iter(self._contexts.keys())
def __repr__(self) -> str:
return f""
================================================
FILE: src/backend/bisheng/core/context/examples.py
================================================
"""
Context Manager Usage Example
Demonstrates the various usage scenarios and features of the optimized Context Manager
"""
import asyncio
from typing import Any, Dict
from bisheng.core.context import (
# Primary
BaseContextManager,
FunctionContextManager,
ContextState,
# Application Management
initialize_app_context,
get_context,
async_get_instance,
sync_get_instance,
register_context,
health_check,
close_app_context,
# Exception Class
ContextError,
ContextInitializationError,
)
# 1. Examples of basic use
async def basic_usage_example():
"""Examples of basic use"""
print("=== Examples of basic use ===")
# Initialize app context
config = {
'database': {
'url': 'sqlite:///example.db',
'engine_config': {'pool_size': 10}
}
}
await initialize_app_context(config)
# Get Database Instance
database_context = get_context('database')
db_instance = await database_context.async_get_instance()
print(f"Database instance: {db_instance}")
# Check context status
print(f"Database state: {database_context.get_state()}")
print(f"Database info: {database_context.get_info()}")
# 2. Context Manager Usage Example
async def context_manager_example():
"""Context Manager Usage Example"""
print("\n=== Context manager example ===")
# Using the Asynchronous Context Manager
database_context = get_context('database')
async with database_context.async_context() as db:
print(f"Using database: {type(db)}")
# Database instances are safe to use here
# Using the Synchronization Context Manager
with database_context.sync_context() as db:
print(f"Using database (sync): {type(db)}")
# 3. Example of a custom context manager
class CacheManager(BaseContextManager[Dict[str, Any]]):
"""Example: Cache Manager"""
name = "cache"
def __init__(self, max_size: int = 1000, **kwargs):
super().__init__(**kwargs)
self.max_size = max_size
async def _async_initialize(self) -> Dict[str, Any]:
"""Initialize Cache"""
cache = {}
print(f"Cache initialized with max_size: {self.max_size}")
return cache
def _sync_initialize(self) -> Dict[str, Any]:
"""Synchronous Initialization Cache"""
cache = {}
print(f"Cache initialized (sync) with max_size: {self.max_size}")
return cache
async def _async_cleanup(self) -> None:
"""Clear cache"""
if self._instance:
self._instance.clear()
print("Cache cleared")
def _sync_cleanup(self) -> None:
"""Synchronous Cleanup Cache"""
if self._instance:
self._instance.clear()
print("Cache cleared (sync)")
async def health_check(self) -> bool:
"""Cache Health Check"""
try:
instance = await self.async_get_instance()
return isinstance(instance, dict)
except Exception:
return False
# 4. Functional context manager example
async def init_redis_connection():
"""impersonation Redis Connection Initialization"""
print("Connecting to Redis...")
await asyncio.sleep(0.1) # Analog network latency
return {"connection": "redis://localhost:6379", "status": "connected"}
async def cleanup_redis_connection(connection):
"""impersonation Redis Connection cleanup"""
print("Closing Redis connection...")
connection["status"] = "closed"
# 5. Complete usage examples
async def complete_example():
"""Complete usage examples"""
print("\n=== Full Usage Example ===")
try:
# 1. Register Custom Context Manager
cache_manager = CacheManager(max_size=500, timeout=10.0, retry_count=2)
register_context(
cache_manager,
dependencies=['database'], # Dependent database
initialize_order=20 # Initialize after database
)
# 2. Register Functional Context Manager
redis_manager = FunctionContextManager(
name="redis",
init_func=init_redis_connection,
cleanup_func=cleanup_redis_connection,
timeout=5.0
)
register_context(redis_manager, initialize_order=30)
# 3. Reinitialize to ensure that the context of the new registration is initialized
await initialize_app_context()
# 4. Get all contextual instances
contexts = {
'database': await async_get_instance('database'),
'cache': await async_get_instance('cache'),
'redis': await async_get_instance('redis')
}
print("All contexts initialized:")
for name, instance in contexts.items():
print(f" {name}: {type(instance)}")
# 5. Perform a health check
health_results = await health_check(include_details=True)
print("\nHealth check results:")
for name, result in health_results.items():
if isinstance(result, dict):
print(f" {name}: healthy={result.get('healthy')}, state={result.get('state')}")
else:
print(f" {name}: {result}")
# 6. Demonstrate error handling
try:
# Attempt to get non-existent context
await async_get_instance('nonexistent')
except KeyError as e:
print(f"\nExpected error: {e}")
# 7. Demo Reset Function
cache_context = get_context('cache')
print(f"\nCache state before reset: {cache_context.get_state()}")
await cache_context.async_reset()
print(f"Cache state after reset: {cache_context.get_state()}")
# Re-fetching will trigger a reinitialization
cache_instance = await cache_context.async_get_instance()
print(f"Cache state after re-init: {cache_context.get_state()}")
except ContextError as e:
print(f"Context error: {e}")
except Exception as e:
print(f"Unexpected error: {e}")
finally:
# Clean up resources
await close_app_context()
print("\nApplication context closed")
# 6. Examples of performance and concurrent testing
async def concurrency_example():
"""Example of concurrent access"""
print("\n=== Example of concurrent access ===")
await initialize_app_context()
async def worker(worker_id: int):
"""Work corridor"""
try:
# Get the same context instance concurrently
db = await async_get_instance('database')
print(f"Worker {worker_id} got database: {id(db)}")
# Simulate some work
await asyncio.sleep(0.1)
return f"Worker {worker_id} completed"
except Exception as e:
return f"Worker {worker_id} failed: {e}"
# Create multiple concurrent workflows
workers = [worker(i) for i in range(10)]
results = await asyncio.gather(*workers)
print("Concurrent access results:")
for result in results:
print(f" {result}")
await close_app_context()
# 7. Examples of monitoring and diagnostics
async def monitoring_example():
"""Examples of monitoring and diagnostics"""
print("\n=== Examples of monitoring and diagnostics ===")
await initialize_app_context()
# Register some test contexts
register_context(CacheManager(name="cache1"))
register_context(CacheManager(name="cache2"))
# Get app context
from bisheng.core.context.manager import app_context
context_info = app_context.get_context_info()
print("Application context info:")
print(f" Initialized: {context_info['initialized']}")
print(f" Context count: {context_info['context_count']}")
print(f" Initialization order: {context_info['initialization_order']}")
print(f" Dependencies: {context_info['dependencies']}")
# Get the status of each context
states = context_info['context_states']
print("\nContext states:")
for name, state in states.items():
print(f" {name}: {state.value if hasattr(state, 'value') else state}")
# Perform detailed health checks
detailed_health = await health_check(include_details=True)
print("\nDetailed health check:")
for name, details in detailed_health.items():
if isinstance(details, dict):
print(f" {name}:")
print(f" Healthy: {details.get('healthy')}")
print(f" State: {details.get('state')}")
print(f" Error: {details.get('error', 'None')}")
else:
print(f" {name}: {details}")
await close_app_context()
# The main function.
async def main():
"""Run all examples"""
print("Post Context Manager Optimization Demo\n")
await basic_usage_example()
await context_manager_example()
await complete_example()
await concurrency_example()
await monitoring_example()
print("\n=== All sample runs completed ===")
if __name__ == "__main__":
asyncio.run(main())
================================================
FILE: src/backend/bisheng/core/context/manager.py
================================================
"""App Context Manager
Global context manager with integrated lazy loading and caching
Provides easy dependency injection and lifecycle management
"""
import asyncio
from contextlib import asynccontextmanager, contextmanager
from typing import Optional, Dict, Any, TypeVar, List, Union
from loguru import logger
from bisheng.core.config.settings import Settings
from bisheng.core.context.base import (
ContextRegistry,
BaseContextManager,
ContextState,
ContextError
)
T = TypeVar('T')
class ApplicationContextManager:
"""App Context Manager
Responsible for managing the entire application infrastructure service lifecycle and providing a unified access interface
Supports dependency injection, bulk operations, and health checks
"""
def __init__(self):
self._registry = ContextRegistry()
self._initialized = False
self._initialization_lock = asyncio.Lock()
self._initialization_order: List[str] = []
self._dependencies: Dict[str, List[str]] = {}
async def initialize(self, config: Settings) -> None:
"""Initialize app context
Args:
config: Optional configuration dictionary for passing to individual context managers
Raises:
ContextError: Thrown on initialization failure
"""
async with self._initialization_lock:
if self._initialized:
logger.debug("Application context already initialized")
return
try:
# Register default context manager
self._register_default_contexts(config or {})
# Initialize all contexts in dependency order
await self._initialize_contexts_in_order()
self._initialized = True
logger.info("Application context initialized successfully")
except Exception as e:
logger.exception(f"Failed to initialize application context: {e}")
# Clean Up Initialized Resources
await self.async_close()
raise ContextError(f"Application context initialization failed: {e}") from e
def _register_default_contexts(self, config: Settings) -> None:
"""Register default context manager"""
try:
from bisheng.core.database.manager import DatabaseManager
self.register_context(DatabaseManager(database_url=config.database_url))
from bisheng.core.cache.redis_manager import RedisManager
self.register_context(RedisManager(redis_url=config.redis_url))
from bisheng.core.storage.minio.minio_manager import MinioManager
self.register_context(MinioManager(minio_config=config.object_storage.minio))
from bisheng.core.search.elasticsearch.manager import EsConnManager, statistics_es_name
self.register_context(EsConnManager(es_hosts=config.get_search_conf().elasticsearch_url,
**config.get_search_conf().ssl_verify))
self.register_context(EsConnManager(es_hosts=config.get_telemetry_conf().elasticsearch_url,
name=statistics_es_name,
**config.get_telemetry_conf().ssl_verify))
from bisheng.core.external.http_client.http_client_manager import HttpClientManager
self.register_context(HttpClientManager())
from bisheng.core.prompts.manager import PromptManager
self.register_context(PromptManager())
logger.debug("Default contexts registered")
except ImportError as e:
logger.warning(f"Failed to import default context managers: {e}")
except Exception as e:
logger.error(f"Failed to register default contexts: {e}")
raise
async def _initialize_contexts_in_order(self) -> None:
"""Initialize context in dependency order"""
# If no initialization order is defined, initialize in registration order
if not self._initialization_order:
self._initialization_order = list(self._registry.get_all_contexts().keys())
initialized = set()
for context_name in self._initialization_order:
if context_name not in initialized:
await self._initialize_context_with_dependencies(context_name, initialized)
async def _initialize_context_with_dependencies(self, context_name: str, initialized: set) -> None:
"""Recursive initialization context and its dependencies"""
if context_name in initialized:
return
# Initialize dependencies first
dependencies = self._dependencies.get(context_name, [])
for dep_name in dependencies:
if dep_name not in initialized:
await self._initialize_context_with_dependencies(dep_name, initialized)
# Then initialize the current context
try:
context = self._registry.get_context(context_name)
await context.async_get_instance() # This will trigger initialization
initialized.add(context_name)
logger.debug(f"Initialized context: '{context_name}'")
except Exception as e:
logger.error(f"Failed to initialize context '{context_name}': {e}")
raise
async def async_get_instance(self, name: str) -> T:
"""Gets the context instance of the specified name asynchronously"""
context = self.get_context(name)
return await context.async_get_instance()
def sync_get_instance(self, name: str) -> T:
"""Synchronously get a contextual instance of the specified name"""
context = self.get_context(name)
return context.sync_get_instance()
def get_context(self, name: str) -> BaseContextManager:
"""Gets the context instance of the specified name"""
return self._registry.get_context(name)
def register_context(
self,
context: BaseContextManager,
dependencies: Optional[List[str]] = None,
initialize_order: Optional[int] = None
) -> None:
"""Register a new context manager
Args:
context: Context manager to register
dependencies: A list of other context names that the context depends on
initialize_order: Initialization order (smaller numbers initialize earlier)
Raises:
ValueError: If the context name already exists
"""
self._registry.register(context)
# Record dependencies
if dependencies:
self._dependencies[context.name] = dependencies
# Update initialization order
if initialize_order is not None:
# Insert to Specified Location
if context.name in self._initialization_order:
self._initialization_order.remove(context.name)
insert_pos = 0
for i, existing_name in enumerate(self._initialization_order):
existing_context = self._registry.get_context(existing_name)
if getattr(existing_context, '_initialize_order', float('inf')) > initialize_order:
insert_pos = i
break
insert_pos = i + 1
self._initialization_order.insert(insert_pos, context.name)
context._initialize_order = initialize_order
elif context.name not in self._initialization_order:
self._initialization_order.append(context.name)
logger.debug(f"Registered context '{context.name}' with dependencies: {dependencies or []}")
def unregister_context(self, name: str) -> None:
"""Log out of the context manager"""
self._registry.unregister(name)
async def health_check(self, include_details: bool = False) -> Union[Dict[str, bool], Dict[str, Dict[str, Any]]]:
"""Perform a health check
Args:
include_details: Does it contain detailed health check information?
Returns:
Union[Dict[str, bool], Dict[str, Dict[str, Any]]]: Health Check Results
"""
results = await self._registry.health_check()
if not include_details:
return results
# Include details
detailed_results = {}
for name, is_healthy in results.items():
try:
context = self._registry.get_context(name)
detailed_results[name] = {
'healthy': is_healthy,
'state': context.get_state().value,
'error': str(context.get_error()) if context.get_error() else None,
'info': context.get_info() if hasattr(context, 'get_info') else {}
}
except Exception as e:
detailed_results[name] = {
'healthy': False,
'error': f"Failed to get context info: {e}"
}
return detailed_results
async def async_close(self) -> None:
"""Close app context
Close all contexts in reverse order from initialization
"""
if not self._initialized:
return
try:
# Close context in reverse order to ensure dependencies are handled correctly
await self._close_contexts_in_reverse_order()
# Cleanup status
self._initialized = False
self._initialization_order.clear()
self._dependencies.clear()
logger.info("Application context closed successfully")
except Exception as e:
logger.error(f"Error closing application context: {e}")
raise
async def _close_contexts_in_reverse_order(self) -> None:
"""Close all contexts in reverse order"""
close_order = list(reversed(self._initialization_order))
for context_name in close_order:
try:
if self._registry.has_context(context_name):
context = self._registry.get_context(context_name)
await context.async_close()
logger.debug(f"Closed context: '{context_name}'")
except Exception as e:
logger.error(f"Error closing context '{context_name}': {e}")
# Ensure all contexts are closed
await self._registry.async_close_all()
def is_initialized(self) -> bool:
"""Check if initialized"""
return self._initialized
def get_registry(self) -> ContextRegistry:
"""Get Context Registry
Returns:
ContextRegistry: Context Registry Instance
"""
return self._registry
def get_context_info(self) -> Dict[str, Any]:
"""Get app context details
Returns:
Dict[str, Any]: Dictionary with app context details
"""
return {
'initialized': self._initialized,
'context_count': len(self._registry),
'initialization_order': self._initialization_order.copy(),
'dependencies': self._dependencies.copy(),
'context_states': self._registry.get_context_states()
}
@contextmanager
def sync_context(self, *context_names: str):
"""Synchronize context manager for batch fetching multiple contexts
Args:
*context_names: List of context names to get
Example:
with app_context.sync_context('database', 'cache') as (db, cache):
# Use db And cache
pass
"""
instances = []
try:
for name in context_names:
instance = self.sync_get_instance(name)
instances.append(instance)
if len(instances) == 1:
yield instances[0]
else:
yield tuple(instances)
finally:
# Note: This does not close automatically as it may be used elsewhere
pass
@asynccontextmanager
async def async_context(self, *context_names: str):
"""Asynchronous context manager for batch fetching multiple contexts
Args:
*context_names: List of context names to get
Example:
async with app_context.async_context('database', 'cache') as (db, cache):
# Use db And cache
pass
"""
instances = []
try:
for name in context_names:
instance = await self.async_get_instance(name)
instances.append(instance)
if len(instances) == 1:
yield instances[0]
else:
yield tuple(instances)
finally:
# Note: This does not close automatically as it may be used elsewhere
pass
async def reset_context(self, context_name: str) -> None:
"""Reset Specified Context
Args:
context_name: Context name to reset
Raises:
KeyError: If the context does not exist
"""
context = self._registry.get_context(context_name)
await context.async_reset()
logger.info(f"Context '{context_name}' reset successfully")
async def restart_context(self, context_name: str) -> None:
"""Restart the specified context (initialize immediately after reset)
Args:
context_name: Context name to restart
Raises:
KeyError: If the context does not exist
"""
await self.reset_context(context_name)
await self.async_get_instance(context_name) # Trigger reinitialization
logger.info(f"Context '{context_name}' restarted successfully")
def list_contexts(self, state_filter: Optional[ContextState] = None) -> List[str]:
"""List all context names
Args:
state_filter: Optional status filter that returns only the context of the specified status
Returns:
List[str]: Context Name List
"""
if state_filter is None:
return list(self._registry.get_all_contexts().keys())
return [
name for name, context in self._registry.get_all_contexts().items()
if context.get_state() == state_filter
]
# Global App Context Instance
app_context = ApplicationContextManager()
async def initialize_app_context(config: Settings) -> None:
"""
Initialize global app context
:param config:
:return:
"""
await app_context.initialize(config)
def get_context(name: str) -> BaseContextManager:
"""Convenient way to get context
Args:
name: Context Name
Returns:
BaseContextManager: Corresponding context manager
Raises:
KeyError: If the context does not exist
"""
return app_context.get_context(name)
async def async_get_instance(name: str) -> Any:
"""Convenient way to get contextual instances asynchronously
Args:
name: Context Name
Returns:
Any: Contextual instances
Raises:
KeyError: If the context does not exist
ContextError: If initialization fails
"""
return await app_context.async_get_instance(name)
def sync_get_instance(name: str) -> Any:
"""Convenient way to get contextual instances synchronously
Args:
name: Context Name
Returns:
Any: Contextual instances
Raises:
KeyError: If the context does not exist
ContextError: If initialization fails
"""
return app_context.sync_get_instance(name)
async def close_app_context() -> None:
"""Convenient way to turn off global app context"""
await app_context.async_close()
def register_context(
context: BaseContextManager,
dependencies: Optional[List[str]] = None,
initialize_order: Optional[int] = None
) -> None:
"""Convenient way to register a context
Args:
context: Context manager to register
dependencies: A list of other context names that the context depends on
initialize_order: Initialization order (smaller numbers initialize earlier)
Example:
# Register a cache context that depends on the database
register_context(cache_manager, dependencies=['database'], initialize_order=10)
"""
app_context.register_context(context, dependencies, initialize_order)
async def health_check(include_details: bool = False) -> Union[Dict[str, bool], Dict[str, Dict[str, Any]]]:
"""Convenient way to perform a health check
Args:
include_details: Does it contain detailed health check information?
Returns:
Union[Dict[str, bool], Dict[str, Dict[str, Any]]]: Health Check Results
"""
return await app_context.health_check(include_details)
================================================
FILE: src/backend/bisheng/core/database/__init__.py
================================================
"""Database Infrastructure Module
Provides database connection management, session management, transaction management, and context management capabilities
"""
from .connection import DatabaseConnectionManager # noqa: F401
from .manager import (
get_database_connection,
sync_get_database_connection,
get_async_db_session,
get_sync_db_session
)
__all__ = [
'DatabaseConnectionManager',
'get_database_connection',
'sync_get_database_connection',
'get_async_db_session',
'get_sync_db_session'
]
================================================
FILE: src/backend/bisheng/core/database/alembic/README.md
================================================
Generic single-database configuration.
* 创建迁移脚本
```bash
alembic revision -m "描述信息"
```
* 自动生成迁移脚本,基于模型和数据库的差异,差异较大时建议先手动创建迁移脚本再修改
```bash
alembic revision --autogenerate -m "描述信息"
```
* 应用所有未应用的迁移脚本
```bash
alembic upgrade head
```
* 应用到指定版本
```bash
alembic upgrade <版本号>
```
* 回滚到上一个版本
```bash
alembic downgrade -1
```
* 回滚到指定版本
```bash
alembic downgrade <版本号>
```
* 查看当前数据库版本
```bash
alembic current
```
* 查看迁移历史
```bash
alembic history
```
* 查看未应用的迁移脚本
```bash
alembic heads
```
* 生成迁移脚本的SQL文件,而不是直接应用到数据库
```bash
alembic upgrade head --sql > upgrade.sql
```
* 配置文件及目录说明
* alembic.ini: 主配置文件,包含数据库连接字符串等全局配置
* bisheng/core/database/alembic/env.py: 环境配置文件,定义了如何连接数据库和加载模型
* bisheng/core/database/alembic/versions/: 存放迁移脚本的目录
* bisheng/core/database/alembic/script.py.mako: 迁移脚本模板文件
* bisheng/core/database/alembic/README.md: 本说明文件
================================================
FILE: src/backend/bisheng/core/database/alembic/__init__.py
================================================
================================================
FILE: src/backend/bisheng/core/database/alembic/env.py
================================================
from logging.config import fileConfig
from alembic import context
from bisheng.common.models.base import SQLModelSerializable
# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
config = context.config
# Interpret the config file for Python logging.
# This line sets up loggers basically.
if config.config_file_name is not None:
fileConfig(config.config_file_name)
# add your model's MetaData object here
# for 'autogenerate' support
# from myapp import mymodel
# target_metadata = mymodel.Base.metadata
target_metadata = SQLModelSerializable.metadata
# other values from the config, defined by the needs of env.py,
# can be acquired:
# my_important_option = config.get_main_option("my_important_option")
# ... etc.
def run_migrations_online() -> None:
"""Run migrations in 'online' mode.
In this scenario we need to create an Engine
and associate a connection with the context.
"""
from bisheng.core.database.manager import sync_get_database_connection
database_conn_manager = sync_get_database_connection()
with database_conn_manager.engine.connect() as connection:
context.configure(
connection=connection, target_metadata=target_metadata
)
with context.begin_transaction():
context.run_migrations()
run_migrations_online()
================================================
FILE: src/backend/bisheng/core/database/alembic/script.py.mako
================================================
"""${message}
Revision ID: ${up_revision}
Revises: ${down_revision | comma,n}
Create Date: ${create_date}
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
${imports if imports else ""}
# revision identifiers, used by Alembic.
revision: str = ${repr(up_revision)}
down_revision: Union[str, Sequence[str], None] = ${repr(down_revision)}
branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)}
depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)}
def upgrade() -> None:
"""Upgrade schema."""
${upgrades if upgrades else "pass"}
def downgrade() -> None:
"""Downgrade schema."""
${downgrades if downgrades else "pass"}
================================================
FILE: src/backend/bisheng/core/database/alembic/versions/v2_3_0_beta1_9ba42685e830.py
================================================
"""Add a metadata_fields field to the knowledge table.
Revision ID: 9ba42685e830
Revises:
Create Date: 2025-11-11 16:00:42.582363
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = '9ba42685e830'
down_revision: Union[str, Sequence[str], None] = None
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
"""Upgrade schema."""
op.add_column('knowledge', sa.Column('metadata_fields', sa.JSON, nullable=True, comment='Metadata Field Configuration for Knowledge Base'))
# knowledgefile OF TABLE)extra_meta to user_metadata Data field
op.add_column('knowledgefile', sa.Column('user_metadata', sa.JSON, nullable=True, comment='User-defined metadata'))
# Taking the original extra_meta Data migration of fields to user_metadata Data field
op.execute('UPDATE knowledgefile SET user_metadata = extra_meta')
op.drop_column('knowledgefile', 'extra_meta')
op.add_column('knowledgefile',sa.Column('updater_id', sa.INT, nullable=True, comment='Updated ByID'))
def downgrade() -> None:
"""Downgrade schema."""
op.drop_column('knowledge', 'metadata_fields')
# Recovery knowledgefile OF TABLE) extra_meta Data field
op.add_column('knowledgefile',
sa.Column('extra_meta', sa.VARCHAR(255), nullable=True, comment='User-defined metadata'))
op.execute('UPDATE knowledgefile SET extra_meta = user_metadata')
op.drop_column('knowledgefile', 'user_metadata')
op.drop_column('knowledgefile', 'updater_id')
================================================
FILE: src/backend/bisheng/core/database/connection.py
================================================
"""Database Connection Management Module"""
import logging
from typing import Optional, Dict, Any, Generator
from contextlib import asynccontextmanager, contextmanager
from sqlalchemy import create_engine, Engine
from sqlalchemy.exc import OperationalError
from sqlalchemy.ext.asyncio import create_async_engine, AsyncEngine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import StaticPool
from sqlmodel import Session, SQLModel
from sqlmodel.ext.asyncio.session import AsyncSession
from sqlalchemy.ext.asyncio import async_sessionmaker
logger = logging.getLogger(__name__)
class DatabaseConnectionManager:
"""Database Connection Manager
Responsible for managing database engine creation, connection pool configuration and lifecycle management
"""
def __init__(self, database_url: str, **engine_kwargs):
self.database_url = database_url
self.async_database_url = self._convert_to_async_url(database_url)
self.engine_kwargs = engine_kwargs
self._engine: Optional[Engine] = None
self._async_engine: Optional[AsyncEngine] = None
self._async_session_maker: Optional[async_sessionmaker] = None
def _convert_to_async_url(self, url: str) -> str:
"""Database will be synchronizedURLConvert to AsynchronousURL"""
if "pymysql" in url:
return url.replace("pymysql", "aiomysql")
elif "psycopg2" in url:
return url.replace("psycopg2", "asyncpg")
return url
def _get_default_engine_config(self) -> Dict[str, Any]:
"""Get default engine configuration"""
config = {
'pool_size': 100,
'max_overflow': 20,
'pool_timeout': 30,
'pool_pre_ping': True,
'pool_recycle': 3600, # 1 hour
}
# SQLiteSPECIAL CONFIGURATION
if self.database_url.startswith("sqlite"):
config.update({
'connect_args': {'check_same_thread': False},
'poolclass': StaticPool,
'pool_size': 1,
'max_overflow': 0,
})
# MySQLSPECIAL CONFIGURATION
elif "mysql" in self.database_url:
if 'connect_args' not in config:
config['connect_args'] = {}
config['connect_args']['charset'] = 'utf8mb4'
return config
@property
def engine(self) -> Engine:
"""Get Synchronization Database Engine"""
if self._engine is None:
config = self._get_default_engine_config()
config.update(self.engine_kwargs)
self._engine = create_engine(
self.database_url,
**config
)
logger.debug(f"Created sync database engine for {self.database_url}")
return self._engine
@property
def async_engine(self) -> AsyncEngine:
"""Get Asynchronous Database Engine"""
if self._async_engine is None:
config = self._get_default_engine_config()
config.update(self.engine_kwargs)
# Remove Synchronization Engine Specific Configuration
config.pop('poolclass', None)
self._async_engine = create_async_engine(
self.async_database_url,
**config
)
logger.debug(f"Created async database engine for {self.async_database_url}")
return self._async_engine
@contextmanager
def create_session(self) -> Generator[Session, Any, None]:
"""Create a sync session"""
session_maker = sessionmaker(
bind=self.engine,
class_=Session,
expire_on_commit=False,
autoflush=True,
autocommit=False
)
with session_maker() as session:
try:
yield session
except Exception as e:
session.rollback()
logger.error(f"Database session rolled back due to error: {e}")
raise
finally:
session.close()
@asynccontextmanager
async def async_session(self):
"""Asynchronous Session Context Manager"""
session_maker = async_sessionmaker(
bind=self.async_engine,
class_=AsyncSession,
expire_on_commit=False,
autoflush=True,
autocommit=False
)
async with session_maker() as session:
try:
yield session
except Exception as e:
await session.rollback()
logger.error(f"Database session rolled back due to error: {e}")
raise
finally:
await session.close()
async def create_db_and_tables(self) -> None:
"""Creation of databases and tables"""
async with self.async_engine.begin() as conn:
try:
await conn.run_sync(SQLModel.metadata.create_all)
except OperationalError as oe:
logger.warning(f"Table creation skipped due to OperationalError: {oe}")
except Exception as exc:
logger.error(f"Error creating tables: {exc}")
raise RuntimeError("Error creating tables") from exc
logger.info('Database and tables created successfully')
async def close(self):
"""Close database connection"""
if self._async_engine:
await self._async_engine.dispose()
logger.debug("Async database engine disposed")
def close_sync(self):
"""Synchronously close database connections"""
if self._engine:
self._engine.dispose()
logger.debug("Sync database engine disposed")
def __del__(self):
"""Destructor ensures release of resources"""
if self._engine:
try:
self._engine.dispose()
except Exception:
pass
================================================
FILE: src/backend/bisheng/core/database/manager.py
================================================
"""Database Global Manager
Provides global management and easy access to database context
Supports health checks, connection pool monitoring, and transaction management
"""
import logging
from typing import Dict, Any, Optional, AsyncGenerator
from contextlib import asynccontextmanager, contextmanager
from sqlalchemy import text
from sqlmodel.ext.asyncio.session import AsyncSession
from bisheng.core.context import BaseContextManager
from bisheng.core.database import DatabaseConnectionManager
logger = logging.getLogger(__name__)
class DatabaseManager(BaseContextManager[DatabaseConnectionManager]):
"""Database Global Manager
Responsible for managing the global lifecycle of database connections and providing a unified access interface
Supports connection pool monitoring, health checks, and easy session management
"""
name: str = "database"
def __init__(
self,
database_url: Optional[str] = None,
engine_config: Optional[Dict[str, Any]] = None,
**kwargs
):
super().__init__(self.name, **kwargs)
self.database_url = database_url
if not self.database_url:
raise ValueError("Database URL is required. Please provide via parameter or settings.database_url")
self.engine_config = engine_config or {}
async def _async_initialize(self) -> DatabaseConnectionManager:
"""Initialize Database Connection Manager"""
return DatabaseConnectionManager(
self.database_url,
**self.engine_config
)
def _sync_initialize(self) -> DatabaseConnectionManager:
"""Synchronization Initialization"""
return DatabaseConnectionManager(
self.database_url,
**self.engine_config
)
async def _async_cleanup(self) -> None:
"""Clean up database resources"""
if self._instance:
await self._instance.close()
def _sync_cleanup(self) -> None:
"""Synchronously clean up database resources"""
if self._instance:
self._instance.close_sync()
async def health_check(self) -> bool:
"""Database Health Check
Returns:
bool: True If the database connection is normal,False Otherwise,
"""
try:
database_instance = await self.async_get_instance()
# Perform simple queries using asynchronous sessions
async with database_instance.async_session() as session:
await session.exec(text("SELECT 1"))
logger.debug("Database health check passed")
return True
except Exception as e:
logger.error(f"Database health check failed: {e}")
return False
async def create_tables_if_not_exists(self) -> None:
"""Create a database table (if it does not exist)
This is a convenient method for initializing the database structure
"""
try:
database_instance = await self.async_get_instance()
await database_instance.create_db_and_tables()
logger.info("Database tables created or verified successfully")
except Exception as e:
logger.error(f"Failed to create database tables: {e}")
raise
async def get_database_connection() -> DatabaseConnectionManager:
"""Get Global Database Connection Manager Instance
Returns:
DatabaseConnectionManager: Database Connection Manager Instance
Raises:
ContextError: If the database context is not registered or initialization fails
"""
from bisheng.core.context.manager import app_context
try:
return await app_context.async_get_instance(DatabaseManager.name)
except KeyError:
logger.warning(f"Database context not found, registering default instance")
try:
from bisheng.common.services.config_service import settings
app_context.register_context(DatabaseManager(settings.database_url))
return await app_context.async_get_instance(DatabaseManager.name)
except Exception as e:
logger.error(f"Failed to register and initialize database context: {e}")
raise
def sync_get_database_connection() -> DatabaseConnectionManager:
"""Get global database connection manager instance synchronously
Returns:
DatabaseConnectionManager: Database Connection Manager Instance
Raises:
ContextError: If the database context is not registered or initialization fails
"""
from bisheng.core.context.manager import app_context
try:
return app_context.sync_get_instance(DatabaseManager.name)
except KeyError:
logger.warning(f"Database context not found, registering default instance")
try:
from bisheng.common.services.config_service import settings
app_context.register_context(DatabaseManager(settings.database_url))
return app_context.sync_get_instance(DatabaseManager.name)
except Exception as e:
logger.error(f"Failed to register and initialize database context: {e}")
raise
@asynccontextmanager
async def get_async_db_session() -> AsyncGenerator[AsyncSession, None]:
"""A convenient way to get asynchronous database sessions
Example:
async with get_async_db_session() as session:
result = await session.execute("SELECT * FROM users")
Yields:
AsyncSession: Asynchronous database session
"""
db_manager = await get_database_connection()
async with db_manager.async_session() as session:
yield session
@contextmanager
def get_sync_db_session():
"""Convenient way to get synchronized database sessions
Example:
with get_sync_db_session() as session:
result = session.execute("SELECT * FROM users")
Yields:
Session: Synchronize database sessions
"""
db_manager = sync_get_database_connection()
with db_manager.create_session() as session:
yield session
================================================
FILE: src/backend/bisheng/core/external/__init__.py
================================================
================================================
FILE: src/backend/bisheng/core/external/http_client/__init__.py
================================================
================================================
FILE: src/backend/bisheng/core/external/http_client/client.py
================================================
import logging
from typing import Dict, Optional, Union, Any, AsyncGenerator, Literal
import aiohttp
from aiohttp import ClientSession, ClientTimeout, TCPConnector
from pydantic import BaseModel
logger = logging.getLogger(__name__)
class ResponseData(BaseModel):
status_code: int
body: Optional[Union[Dict[str, Any], str, bytes]] = None
error: Optional[str] = None
headers: Optional[Dict[str, str]] = None
class AsyncHttpClient(object):
def __init__(self, timeout: int = 120, keep_alive: bool = True, limit_per_host: int = 100,
headers: Dict[str, str] = None, loop=None):
"""
Asynchronous HTTP client using aiohttp.
:param timeout: Timeout in seconds for the requests.
:param max_retries: Maximum number of retries for failed requests.
:param keep_alive: Whether to keep the connection alive.
:param limit_per_host: Maximum number of connections per host.
:param headers:
:param loop:
"""
self.headers = headers or self._get_default_headers()
self.timeout = timeout
self.keep_alive = keep_alive
self.limit_per_host = limit_per_host
self.loop = loop
self._aiohttp_client: Optional[ClientSession] = None
@staticmethod
def _get_default_headers() -> Dict[str, str]:
return {
"Accept": "application/json",
"Content-Type": "application/json",
"User-Agent": "aiohttp-client",
}
def add_custom_header(self, key: str, value: str) -> None:
self.headers[key] = value
def clear_custom_headers(self) -> None:
self.headers = self._get_default_headers()
async def get_aiohttp_client(self, loop=None) -> ClientSession:
loop = loop or self.loop
if self._aiohttp_client is None:
timeout = ClientTimeout(total=self.timeout)
connector = TCPConnector(keepalive_timeout=self.timeout, limit_per_host=self.limit_per_host, loop=loop)
self._aiohttp_client = ClientSession(timeout=timeout, connector=connector,
headers=self.headers, loop=loop)
return self._aiohttp_client
async def close_aiohttp_client(self) -> None:
if self._aiohttp_client:
await self._aiohttp_client.close()
self._aiohttp_client = None
async def _execute_request(
self,
method: str,
url: str,
headers: Dict[str, str],
params: Optional[Dict[str, Union[str, int]]] = None,
body: Optional[Union[Dict[str, Any], str, bytes, Any]] = None,
data_type: Literal["json", "text", "binary"] = "json",
destroy_session: bool = False,
clear_headers: bool = False,
**kwargs,
) -> ResponseData:
"""
Execute an HTTP request.
:param method: HTTP method (GET, POST, PUT, DELETE, etc.)
:param url: URL for the request.
:param headers: Headers for the request.
:param params: Query parameters for the request.
:param body: Body of the request.
:param data_type: Type of data to return (json, text, binary).
:param destroy_session: Whether to close the session after the request.
:param clear_headers: Whether to clear custom headers after the request.
:return: Response as a dictionary with status_code, body, and error.
"""
client = await self.get_aiohttp_client()
response: ResponseData = ResponseData(status_code=0)
headers = headers or self.headers
try:
async with client.request(
method=method,
url=url,
headers=headers,
params=params,
json=body if isinstance(body, dict) else None,
data=body if isinstance(body, str) or isinstance(body, bytes) else None,
**kwargs,
) as http_response:
response.status_code = http_response.status
response.headers = dict(http_response.headers)
if data_type == "json":
response.body = await http_response.json()
elif data_type == "text":
response.body = await http_response.text()
elif data_type == "binary":
response.body = await http_response.read()
http_response.raise_for_status()
except aiohttp.ClientResponseError as cre:
logger.error(f"Client response error during {method} request to {url}: {cre}")
response.error = str(cre)
response.status_code = cre.status
except Exception as error:
logger.error(f"Error during {method} request to {url}: {error}")
response.error = str(error)
response.status_code = 500
finally:
if destroy_session:
await self.close_aiohttp_client()
if clear_headers:
self.clear_custom_headers()
return response
async def get(self, url: str, params: Optional[Dict[str, Union[str, int]]] = None,
data_type: Literal["json", "text", "binary"] = "json", destroy_session: bool = False,
headers: Dict = None, clear_headers: bool = False, **kwargs) -> ResponseData:
return await self._execute_request("GET", url=url, headers=headers, params=params, data_type=data_type,
destroy_session=destroy_session, clear_headers=clear_headers, **kwargs)
async def post(self, url: str, body: Optional[Union[Dict[str, Any], str, bytes, Any]] = None,
data_type: Literal["json", "text", "binary"] = "json", destroy_session: bool = False,
headers: Dict = None, clear_headers: bool = False, **kwargs) -> ResponseData:
return await self._execute_request("POST", url=url, headers=headers, body=body, data_type=data_type,
destroy_session=destroy_session, clear_headers=clear_headers, **kwargs)
async def put(self, url: str, body: Optional[Union[Dict[str, Any], str, bytes, Any]] = None,
data_type: Literal["json", "text", "binary"] = "json", destroy_session: bool = False,
headers: Dict = None, clear_headers: bool = False, **kwargs) -> ResponseData:
return await self._execute_request("PUT", url=url, headers=headers, body=body, data_type=data_type,
destroy_session=destroy_session, clear_headers=clear_headers, **kwargs)
async def patch(self, url: str, body: Optional[Union[Dict[str, Any], str, bytes, Any]] = None,
data_type: Literal["json", "text", "binary"] = "json", destroy_session: bool = False,
headers: Dict = None, clear_headers: bool = False, **kwargs) -> ResponseData:
return await self._execute_request("PATCH", url=url, headers=headers, body=body, data_type=data_type,
destroy_session=destroy_session, clear_headers=clear_headers, **kwargs)
async def delete(self, url: str, params: Optional[Dict[str, Union[str, int]]] = None,
data_type: Literal["json", "text", "binary"] = "json", destroy_session: bool = False,
headers: Dict = None, clear_headers: bool = False, **kwargs) -> ResponseData:
return await self._execute_request("DELETE", url=url, headers=headers, params=params, data_type=data_type,
destroy_session=destroy_session, clear_headers=clear_headers, **kwargs)
async def stream(
self, method: Literal["GET", "POST", "PUT", "PATCH"],
url: str,
headers: Dict[str, str] = None,
params: Optional[Dict[str, Union[str, int]]] = None,
body: Optional[Union[Dict[str, Any], str]] = None, chunk_size: int = 1024 * 1024 * 10,
destroy_session: bool = False,
clear_headers: bool = False,
**kwargs
) -> AsyncGenerator[bytes, None]:
"""
Streaming requests
"""
client = await self.get_aiohttp_client()
try:
async with client.request(method=method,
url=url,
headers=headers or self.headers,
params=params,
json=body if isinstance(body, dict) else None,
data=body if isinstance(body, str) else None, **kwargs) as response:
response.raise_for_status()
async for chunk in response.content.iter_chunked(chunk_size):
yield chunk
except Exception as error:
logger.error(f"Error during streaming from {url}: {error}")
raise error
finally:
if destroy_session:
await self.close_aiohttp_client()
if clear_headers:
self.clear_custom_headers()
================================================
FILE: src/backend/bisheng/core/external/http_client/http_client_manager.py
================================================
import logging
from bisheng.core.context import BaseContextManager
from bisheng.core.context.base import T
from bisheng.core.external.http_client.client import AsyncHttpClient
logger = logging.getLogger(__name__)
class HttpClientManager(BaseContextManager[AsyncHttpClient]):
"""HTTP Client Manager
Inherited From BaseContextManagerProvided by HTTP Client lifecycle management
Supports lazy loading and caching
"""
name = 'http_client'
def __init__(self):
super().__init__()
async def _async_initialize(self) -> AsyncHttpClient:
"""Async Initialization HTTP Client"""
http_client = AsyncHttpClient()
await http_client.get_aiohttp_client()
return http_client
def _sync_initialize(self) -> T:
pass
async def _async_cleanup(self) -> None:
"""Asynchronous Cleanup HTTP Client"""
if self._instance:
await self._instance.close_aiohttp_client()
def _sync_cleanup(self) -> None:
"""Synchronous Cleanup HTTP Client"""
pass
async def get_http_client() -> AsyncHttpClient:
"""Dapatkan HTTP Client Instance"""
from bisheng.core.context.manager import app_context
try:
return await app_context.async_get_instance(HttpClientManager.name)
except KeyError:
logger.warning(f"HttpClientManager not found in context, registering new instance.")
try:
from bisheng.common.services.config_service import settings
app_context.register_context(HttpClientManager())
return await app_context.async_get_instance(HttpClientManager.name)
except Exception as e:
logger.error(f"Failed to register HttpClientManager: {e}")
raise
================================================
FILE: src/backend/bisheng/core/logger.py
================================================
import logging
import sys
import uuid
from contextvars import ContextVar
from pathlib import Path
from typing import Optional
from loguru import logger
from bisheng.core.config.settings import LoggerConf
trace_id_var: ContextVar[Optional[str]] = ContextVar("trace_id", default=None)
def trace_id_generator() -> str:
return str(uuid.uuid4().hex)
class TraceIdFilter:
def __init__(self, filter_func=None):
self.filter_func = filter_func
def __call__(self, record):
if record["extra"].get("trace_id") is None:
record["extra"]["trace_id"] = trace_id_var.get()
if self.filter_func is not None:
return self.filter_func(record)
return True
class InterceptHandler(logging.Handler):
"""Interception Criteria logging logs, transferring to Loguru Medical Treatment:"""
def emit(self, record):
# Dapatkan loguru counterpart's level
try:
level = logger.level(record.levelname).name
except ValueError:
level = record.levelno
# Get call stack depth
frame, depth = logging.currentframe(), 2
while frame and frame.f_code.co_filename == logging.__file__:
frame = frame.f_back
depth += 1
# Forward to loguru
logger.opt(depth=depth, exception=record.exc_info).log(level, record.getMessage())
def set_logger_config(logger_config: LoggerConf):
"""
Configuration Logs
:param logger_config:
:return:
"""
logger.remove()
# Configure Root Logger
logging.root.handlers = [InterceptHandler()]
logging.root.setLevel(logger_config.level)
# Set specific loggers to INFO level to reduce verbosity
logging.getLogger("uvicorn.access").setLevel(logging.INFO)
logging.getLogger("elastic_transport").setLevel(logging.INFO)
logging.getLogger("elasticsearch").setLevel(logging.INFO)
logging.getLogger("urllib3").setLevel(logging.INFO)
logging.getLogger("python_multipart").setLevel(logging.INFO)
logging.getLogger("aiohttp_retry").setLevel(logging.INFO)
# Block all existing loggers
for name in logging.root.manager.loggerDict.keys():
logging_logger = logging.getLogger(name)
logging_logger.handlers = [InterceptHandler()]
logging_logger.propagate = False
# Add Default Console Log Processor
logger.add(
sys.stdout,
format=logger_config.format,
level=logger_config.level,
filter=TraceIdFilter(),
enqueue=True,
backtrace=True,
diagnose=False
)
# Add additional log processors
for handler in logger_config.handlers:
log_file = Path(handler['sink'])
log_file.parent.mkdir(parents=True, exist_ok=True)
filter_func = handler.pop('filter', None)
logger.add(**handler, filter=TraceIdFilter(filter_func))
logger.debug(f'Logger set up with log level: {logger_config.level}')
================================================
FILE: src/backend/bisheng/core/middleware/__init__.py
================================================
================================================
FILE: src/backend/bisheng/core/prompts/__init__.py
================================================
================================================
FILE: src/backend/bisheng/core/prompts/manager.py
================================================
import logging
from abc import ABC
from bisheng.core.context import BaseContextManager
from bisheng.core.prompts.prompt_loader import PromptLoader
logger = logging.getLogger(__name__)
class PromptManager(BaseContextManager[PromptLoader]):
"""Prompt Manager
Responsible for loading, caching, and managing prompts
"""
name = 'prompts'
def __init__(self, **kwargs):
super().__init__(**kwargs)
async def _async_initialize(self) -> PromptLoader:
"""Asynchronous initialization prompt word loader"""
logger.info("Initializing PromptLoader...")
prompt_loader = PromptLoader()
logger.info("PromptLoader initialized.")
return prompt_loader
def _sync_initialize(self) -> PromptLoader:
"""Synchronous Initialization Prompt Loader"""
logger.info("Initializing PromptLoader...")
prompt_loader = PromptLoader()
logger.info("PromptLoader initialized.")
return prompt_loader
async def _async_cleanup(self) -> None:
"""Clean up database resources"""
pass
def _sync_cleanup(self) -> None:
"""Synchronously clean up database resources"""
pass
async def get_prompt_manager() -> PromptLoader:
"""Get a prompt word manager instance (asynchronous)"""
from bisheng.core.context.manager import app_context
try:
return await app_context.async_get_instance(PromptManager.name)
except KeyError:
logger.warning(f"PromptManager not found in context. Registering...")
try:
from bisheng.common.services.config_service import settings
app_context.register_context(PromptManager())
return await app_context.async_get_instance(PromptManager.name)
except Exception as e:
logger.error(f"Failed to register PromptManager: {e}")
raise
def get_prompt_manager_sync() -> PromptLoader:
"""Get a prompt word manager instance (sync method)"""
from bisheng.core.context.manager import app_context
try:
return app_context.sync_get_instance(PromptManager.name)
except KeyError:
logger.warning(f"PromptManager not found in context. Registering...")
try:
from bisheng.common.services.config_service import settings
app_context.register_context(PromptManager())
return app_context.sync_get_instance(PromptManager.name)
except Exception as e:
logger.error(f"Failed to register PromptManager: {e}")
raise
================================================
FILE: src/backend/bisheng/core/prompts/prompt_loader.py
================================================
import copy
import logging
import os
from enum import Enum
from string import Template
from typing import Union, Dict
import yaml
from pydantic import BaseModel, Field
logger = logging.getLogger(__name__)
class PromptTypeEnum(str, Enum):
"""
PromptType Enumeration
"""
PROMPT = "prompt"
CHATPROMPT = "chat_prompt"
class ChatPromptSchema(BaseModel):
system: str = Field(default='', description='SystemPromptContents')
user: str = Field(default='', description='UsersPromptContents')
# StandardPrompt Schema
class PromptSchema(BaseModel):
"""
StandardPrompt Schema
"""
description: str = Field(default='', description='PromptDescription')
type: PromptTypeEnum = Field(default=PromptTypeEnum.PROMPT, description='PromptType')
prompt: Union[str, ChatPromptSchema] = Field(..., description='PromptContents')
# embeddedPromptLoader..
class PromptLoader(object):
def __init__(self):
"""
InisialisasiPromptLoader..
"""
self.prompt_yaml_dir = os.path.join(os.path.dirname(__file__), 'yaml')
self.prompts_storage = {}
self._load_all()
# analyzingprompts
@staticmethod
def _parse_prompt(prompts_data: dict) -> Dict[str, PromptSchema]:
"""
analyzingPromptDATA
:param prompts_data: PromptDATA
:return: After parsingPromptObjects
"""
parsed_prompts = {}
for prompt_name, prompt_data in prompts_data.items():
if not isinstance(prompt_data, dict):
raise ValueError(f"Invalid prompt format for {prompt_name}: Expected a dictionary.")
prompt_schema = PromptSchema(**prompt_data)
parsed_prompts[prompt_name] = prompt_schema
return parsed_prompts
def _load_all(self):
for root, _, files in os.walk(self.prompt_yaml_dir):
for file in files:
if not file.endswith('.yaml') and not file.endswith('.yml'):
continue
file_path = os.path.join(root, file)
namespace = os.path.splitext(file)[0]
with open(file_path, 'r', encoding='utf-8') as f:
try:
prompt_data = yaml.safe_load(f)
if isinstance(prompt_data, dict):
self.prompts_storage[namespace] = self._parse_prompt(prompt_data.get('prompts', {}))
else:
raise ValueError(f"Invalid YAML format in {file_path}: Expected a dictionary.")
except yaml.YAMLError as e:
logger.error(f"Error parsing YAML file {file_path}: {e}")
continue
# Get the specifiedPrompt
def get_prompt(self, namespace: str, prompt_name: str) -> PromptSchema:
"""
Get the specifiedPrompt
:param namespace: namespace
:param prompt_name: PromptPart Name
:return: PromptObjects
"""
if namespace in self.prompts_storage:
return copy.deepcopy(self.prompts_storage[namespace].get(prompt_name, None))
else:
raise KeyError(f"Namespace '{namespace}' not found in prompts storage.")
def render_prompt(self, namespace: str, prompt_name: str, **kwargs) -> PromptSchema:
"""
Render specifiedPrompt
:param namespace: namespace
:param prompt_name: PromptPart Name
:param kwargs: Rendering parameters
:return: RenderedPromptString
"""
prompt_obj = self.get_prompt(namespace, prompt_name)
if prompt_obj.type == PromptTypeEnum.PROMPT:
prompt_obj.prompt = Template(prompt_obj.prompt).safe_substitute(**kwargs)
elif prompt_obj.type == PromptTypeEnum.CHATPROMPT:
prompt_obj.prompt.system = Template(prompt_obj.prompt.system).safe_substitute(**kwargs)
prompt_obj.prompt.user = Template(prompt_obj.prompt.user).safe_substitute(**kwargs)
else:
raise ValueError(f"Unsupported prompt type: {prompt_obj.type}")
return prompt_obj
================================================
FILE: src/backend/bisheng/core/prompts/yaml/gen_title.yaml
================================================
version: v1
description: 标题生成
prompts:
linsight:
description: "Linsight任务标题生成"
type: chat_prompt
prompt:
system: |
# 任务
你是一位资深信息架构师,请根据下面用户在会话中提供的「用户目标」,生成一个用于会话列表展示的对话标题(≤10 个汉字或英文单词)。
# 约束
仅输出标题内容,不要解释、不要添加多余文本或 Markdown。
user: |
用户目标:
${USER_GOAL}
call_reason_summary:
description: "人工介入原因总结"
type: chat_prompt
prompt:
system: |
# 任务
你是一位资深信息架构师,请根据下面用户在会话中提供的「问题原因」,生成摘要信息(≤10 个汉字或英文单词)。
# 约束
仅输出标题内容,不要解释、不要添加多余文本或 Markdown。
user: |
问题原因:
${USER_GOAL}
================================================
FILE: src/backend/bisheng/core/prompts/yaml/qa.yaml
================================================
version: v1
description: 标准问答(QA)生成器
prompts:
simple_qa_chat:
description: "生成简单的问答"
type: chat_prompt
prompt:
system: |
你是一个问答生成器,基于用户提供的上下文信息,生成简洁明了的问答对。
user: |
基于以下上下文信息,生成一个问答对:
上下文信息:${context}
请回答以下问题:${question}
simple_qa:
description: "生成标准的问答"
type: prompt
prompt: |
你是一个问答生成器,基于用户提供的上下文信息,生成简洁明了的问答对。
上下文信息:
${context}
请回答以下问题:
${question}
================================================
FILE: src/backend/bisheng/core/prompts/yaml/sop.yaml
================================================
version: v1
description: SOP
prompts:
gen_sop_summary:
description: "根据SOP详情生成摘要信息"
type: chat_prompt
prompt:
system: |
# 任务
1. 你是一位资深信息架构师,请根据下面用户提供的 SOP 详细内容,生成用于在表格中展示的 SOP 描述字段,控制在 50 字以内。
2. 生成结果请严格使用 JSON 格式表示。
# JSON 格式模板
```json
{
"sop_description": "生成结果"
}
```
user: |
SOP 详细内容:
${sop_detail}
================================================
FILE: src/backend/bisheng/core/prompts/yaml/workstation.yaml
================================================
version: v1
description: 工作台个人知识库
prompts:
personal_knowledge:
description: "个人知识库提示词"
type: prompt
prompt: |
# task
你是一个知识库问答助手:
1.按照用户使用的语言回答问题,并且答案要严谨专业。
2.你需要依据以下【参考文本】中的内容来回答,当【参考文本】中有明确与用户问题相关的内容时才进行回答,不可根据自己的知识来回答。若相关内容中包含图片内容的,请直接输出图片源文件,若占位符(例如:),回答时请保留这些占位符,不要修改或删除。
4. 如果文档中包含表格,请不要做任何修改,或返回表格格式的markdown
3.由于【参考文本】可能包含多个来自不同信息源的信息,所以根据这些不同的信息源可能得出有差异甚至冲突的答案,当发现这种情况时,这些答案都列举出来;如果没有冲突或差异,则只需要给出一个最终结果。
4.若【参考文本】中内容与用户问题不相关则回复“没有找到相关内容”。
# 参考文本
```
${retrieved_file_content}
```
# 用户问题
```
${question}
```
================================================
FILE: src/backend/bisheng/core/search/__init__.py
================================================
================================================
FILE: src/backend/bisheng/core/search/elasticsearch/__init__.py
================================================
================================================
FILE: src/backend/bisheng/core/search/elasticsearch/es_connection.py
================================================
from typing import Optional
from elasticsearch import Elasticsearch, AsyncElasticsearch
class ESConnection:
def __init__(self, es_hosts: str, **kwargs):
self.es_hosts = es_hosts
self.es_kwargs = kwargs
self._sync_es_connection: Optional[Elasticsearch] = None
self._es_connection: Optional[AsyncElasticsearch] = None
def _create_es_connection(self) -> 'AsyncElasticsearch':
return AsyncElasticsearch(
hosts=self.es_hosts,
**self.es_kwargs
)
def _create_sync_es_connection(self) -> 'Elasticsearch':
return Elasticsearch(
hosts=self.es_hosts,
**self.es_kwargs
)
@property
def es_connection(self) -> 'AsyncElasticsearch':
if self._es_connection is None:
self._es_connection = self._create_es_connection()
return self._es_connection
@property
def sync_es_connection(self) -> 'Elasticsearch':
if self._sync_es_connection is None:
self._sync_es_connection = self._create_sync_es_connection()
return self._sync_es_connection
async def close(self):
if self._es_connection is not None:
await self._es_connection.close()
self._es_connection = None
def sync_close(self):
if self._sync_es_connection is not None:
self._sync_es_connection.close()
self._sync_es_connection = None
================================================
FILE: src/backend/bisheng/core/search/elasticsearch/manager.py
================================================
import logging
from elasticsearch import AsyncElasticsearch, Elasticsearch
from bisheng.core.context import BaseContextManager
from bisheng.core.search.elasticsearch.es_connection import ESConnection
logger = logging.getLogger(__name__)
statistics_es_name = "statistics_elasticsearch"
class EsConnManager((BaseContextManager[ESConnection])):
name: str = "elasticsearch"
def __init__(self, es_hosts: str, name: str = None, **kwargs):
if name:
self.name = name
super().__init__(self.name, **kwargs)
self.es_hosts = es_hosts
self.kwargs = kwargs
async def _async_initialize(self) -> ESConnection:
"""Inisialisasi Elasticsearch Connection Manager"""
return ESConnection(self.es_hosts, **self.kwargs)
def _sync_initialize(self) -> ESConnection:
"""Synchronization Initialization"""
return ESConnection(self.es_hosts, **self.kwargs)
async def _async_cleanup(self) -> None:
"""Cleaned Elasticsearch reasourse"""
if self._instance:
await self._instance.close()
def _sync_cleanup(self) -> None:
"""Synchronous Cleanup Elasticsearch reasourse"""
if self._instance:
self._instance.sync_close()
async def get_es_connection() -> AsyncElasticsearch:
"""Dapatkan Elasticsearch Connection Instance"""
from bisheng.core.context.manager import app_context
try:
return (await app_context.async_get_instance(EsConnManager.name)).es_connection
except KeyError:
logger.warning(f"EsConnManager not found in app_context. Registering a new instance.")
try:
from bisheng.common.services.config_service import settings
app_context.register_context(
EsConnManager(es_hosts=settings.get_telemetry_conf().elasticsearch_url,
**settings.get_telemetry_conf().ssl_verify
))
return (await app_context.async_get_instance(EsConnManager.name)).es_connection
except Exception as e:
logger.error(f"Failed to register EsConnManager: {e}")
raise KeyError(f"EsConnManager not found in app_context and failed to register a new instance.") from e
async def get_statistics_es_connection() -> AsyncElasticsearch:
"""Get statistics Elasticsearch Connection Instance"""
from bisheng.core.context.manager import app_context
try:
return (await app_context.async_get_instance(statistics_es_name)).es_connection
except KeyError:
logger.warning(f"Statistics EsConnManager not found in app_context. Registering a new instance.")
try:
from bisheng.common.services.config_service import settings
app_context.register_context(
EsConnManager(es_hosts=settings.get_telemetry_conf().elasticsearch_url,
name=statistics_es_name,
**settings.get_telemetry_conf().statistics_ssl_verify))
return (await app_context.async_get_instance(statistics_es_name)).es_connection
except Exception as e:
logger.error(f"Failed to register Statistics EsConnManager: {e}")
raise KeyError(
f"Statistics EsConnManager not found in app_context and failed to register a new instance.") from e
def get_es_connection_sync() -> Elasticsearch:
"""Synchronous fetch Elasticsearch Connection Instance"""
from bisheng.core.context.manager import app_context
try:
return app_context.sync_get_instance(EsConnManager.name).sync_es_connection
except KeyError:
logger.warning(f"EsConnManager not found in app_context. Registering a new instance.")
try:
from bisheng.common.services.config_service import settings
app_context.register_context(
EsConnManager(es_hosts=settings.get_telemetry_conf().elasticsearch_url,
**settings.get_telemetry_conf().ssl_verify
))
return app_context.sync_get_instance(EsConnManager.name).sync_es_connection
except Exception as e:
logger.error(f"Failed to register EsConnManager: {e}")
raise KeyError(f"EsConnManager not found in app_context and failed to register a new instance.") from e
def get_statistics_es_connection_sync() -> Elasticsearch:
"""Sync Fetch Stats Elasticsearch Connection Instance"""
from bisheng.core.context.manager import app_context
try:
return app_context.sync_get_instance(statistics_es_name).sync_es_connection
except KeyError:
logger.warning(f"Statistics EsConnManager not found in app_context. Registering a new instance.")
try:
from bisheng.common.services.config_service import settings
app_context.register_context(
EsConnManager(es_hosts=settings.get_telemetry_conf().elasticsearch_url,
name=statistics_es_name,
**settings.get_telemetry_conf().ssl_verify))
return app_context.sync_get_instance(statistics_es_name).sync_es_connection
except Exception as e:
logger.error(f"Failed to register Statistics EsConnManager: {e}")
raise KeyError(
f"Statistics EsConnManager not found in app_context and failed to register a new instance.") from e
================================================
FILE: src/backend/bisheng/core/storage/__init__.py
================================================
================================================
FILE: src/backend/bisheng/core/storage/base.py
================================================
from abc import ABC, abstractmethod
from pathlib import Path
from typing import Union, BinaryIO
class BaseStorage(ABC):
"""Base class for storage backends."""
@abstractmethod
async def create_bucket(self, bucket_name: str) -> None:
"""Create a new storage bucket."""
pass
@abstractmethod
def create_bucket_sync(self, bucket_name: str) -> None:
"""Create a new storage bucket (synchronous)."""
pass
@abstractmethod
async def check_bucket_exists(self, bucket_name: str) -> bool:
"""Check if a storage bucket exists."""
pass
@abstractmethod
def check_bucket_exists_sync(self, bucket_name: str) -> bool:
"""Check if a storage bucket exists (synchronous)."""
pass
@abstractmethod
async def get_all_buckets(self) -> list:
"""Get a list of all storage buckets."""
pass
@abstractmethod
def get_all_buckets_sync(self) -> list:
"""Get a list of all storage buckets (synchronous)."""
pass
@abstractmethod
async def remove_bucket(self, bucket_name: str) -> None:
"""Remove a storage bucket."""
pass
@abstractmethod
def remove_bucket_sync(self, bucket_name: str) -> None:
"""Remove a storage bucket (synchronous)."""
pass
@abstractmethod
async def put_object(self, bucket_name: str, object_name: str, file: Union[bytes, BinaryIO, Path, str],
content_type: str = None, **kwargs) -> None:
"""Upload an object to a storage bucket."""
pass
@abstractmethod
def put_object_sync(self, bucket_name: str, object_name: str, file: Union[bytes, BinaryIO, Path, str],
content_type: str = None, **kwargs) -> None:
"""Upload an object to a storage bucket (synchronous)."""
pass
@abstractmethod
async def get_object(self, bucket_name: str, object_name: str) -> bytes:
"""Download an object from a storage bucket."""
pass
@abstractmethod
def get_object_sync(self, bucket_name: str, object_name: str) -> bytes:
"""Download an object from a storage bucket (synchronous)."""
pass
@abstractmethod
async def object_exists(self, bucket_name: str, object_name: str) -> bool:
"""Check if an object exists in a storage bucket."""
pass
def object_exists_sync(self, bucket_name: str, object_name: str) -> bool:
"""Check if an object exists in a storage bucket (synchronous)."""
pass
@abstractmethod
async def copy_object(self, source_bucket: str, source_object: str,
dest_bucket: str, dest_object: str) -> None:
"""Copy an object from one storage bucket to another."""
pass
@abstractmethod
def copy_object_sync(self, source_bucket: str, source_object: str,
dest_bucket: str, dest_object: str) -> None:
"""Copy an object from one storage bucket to another (synchronous)."""
pass
@abstractmethod
async def remove_object(self, bucket_name: str, object_name: str) -> None:
"""Remove an object from a storage bucket."""
pass
@abstractmethod
def remove_object_sync(self, bucket_name: str, object_name: str) -> None:
"""Remove an object from a storage bucket (synchronous)."""
pass
================================================
FILE: src/backend/bisheng/core/storage/minio/__init__.py
================================================
================================================
FILE: src/backend/bisheng/core/storage/minio/minio_manager.py
================================================
import logging
from abc import ABC
from typing import Union
from bisheng.core.config.settings import MinioConf
from bisheng.core.context import BaseContextManager
from bisheng.core.storage.minio.minio_storage import MinioStorage
logger = logging.getLogger(__name__)
class MinioManager(BaseContextManager[MinioStorage]):
"""Minio Global Manager
Responsible for management Minio Global lifecycle of storage, providing a unified access interface
Supports connection pool monitoring, health checks, and easy storage management
"""
name: str = "minio"
def __init__(
self,
minio_config: Union[MinioConf, dict],
**kwargs
):
super().__init__(self.name, **kwargs)
self.minio_config = minio_config
if isinstance(self.minio_config, dict):
self.minio_config = MinioConf(**self.minio_config)
async def _async_initialize(self) -> MinioStorage:
"""Inisialisasi Minio Storage Manager"""
return MinioStorage(
self.minio_config
)
def _sync_initialize(self) -> MinioStorage:
"""Synchronization Initialization"""
return MinioStorage(
self.minio_config
)
def _sync_cleanup(self) -> None:
"""Synchronous Cleanup Minio reasourse"""
if self._instance:
self._instance.close_sync()
async def _async_cleanup(self) -> None:
"""Cleaned Minio reasourse"""
if self._instance:
await self._instance.close()
async def get_minio_storage() -> MinioStorage:
"""Dapatkan Minio Storage Instance"""
from bisheng.core.context.manager import app_context
try:
return await app_context.async_get_instance(MinioManager.name)
except KeyError:
logger.warning(f"MinioManager not found in app_context. Registering a new instance.")
try:
from bisheng.common.services.config_service import settings
app_context.register_context(MinioManager(
minio_config=settings.object_storage.minio
))
return await app_context.async_get_instance(MinioManager.name)
except Exception as e:
logger.error(f"Failed to register MinioManager: {e}")
raise
def get_minio_storage_sync() -> MinioStorage:
"""Synchronous fetch Minio Storage Instance"""
from bisheng.core.context.manager import app_context
try:
return app_context.sync_get_instance(MinioManager.name)
except KeyError:
logger.warning(f"MinioManager not found in app_context. Registering a new instance.")
try:
from bisheng.common.services.config_service import settings
app_context.register_context(MinioManager(
minio_config=settings.object_storage.minio
))
return app_context.sync_get_instance(MinioManager.name)
except Exception as e:
logger.error(f"Failed to register MinioManager: {e}")
raise
================================================
FILE: src/backend/bisheng/core/storage/minio/minio_storage.py
================================================
import json
import os
from abc import ABC
from datetime import timedelta
from io import BytesIO
from pathlib import Path
from typing import BinaryIO, Union, Optional
import minio
import miniopy_async
import miniopy_async.commonconfig as miniopy_async_commonconfig
from loguru import logger
from minio.commonconfig import Filter
from minio.lifecycleconfig import LifecycleConfig, Rule, Expiration
from bisheng.core.config.settings import MinioConf
from bisheng.core.storage.base import BaseStorage
class MinioStorage(BaseStorage, ABC):
"""MinIO storage backend implementation."""
def __init__(self, minio_config: MinioConf):
self.minio_config = minio_config
self.bucket = minio_config.public_bucket
self.tmp_bucket = minio_config.tmp_bucket
self.minio_client_sync = minio.Minio(
endpoint=minio_config.endpoint,
access_key=minio_config.access_key,
secret_key=minio_config.secret_key,
secure=minio_config.secure,
cert_check=minio_config.cert_check
)
self.minio_client = miniopy_async.Minio(
endpoint=minio_config.endpoint,
access_key=minio_config.access_key,
secret_key=minio_config.secret_key,
secure=minio_config.secure,
cert_check=minio_config.cert_check
)
self._init_bucket_conf()
def _init_bucket_conf(self):
# create need bucket
self.create_bucket_sync(bucket_name=self.bucket)
self.create_bucket_sync(bucket_name=self.tmp_bucket)
# set knowledge chunk images anonymous read policy
anonymous_read_policy = {
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"AWS": ["*"]
},
"Action": ["s3:GetObject"],
"Resource": [f"arn:aws:s3:::{self.bucket}/knowledge/images/*",
f"arn:aws:s3:::{self.bucket}/tmp/images/*"]
}]
}
try:
policy = self.minio_client_sync.get_bucket_policy(self.bucket)
except Exception as e:
if str(e).find('NoSuchBucketPolicy') == -1:
raise e
self.minio_client_sync.set_bucket_policy(self.bucket, json.dumps(anonymous_read_policy))
# set tmp bucket lifecycle
if not self.minio_client_sync.get_bucket_lifecycle(self.tmp_bucket):
lifecycle_conf = LifecycleConfig([
Rule(
'Enabled',
rule_filter=Filter(prefix='*'),
rule_id='rule1',
expiration=Expiration(days=3),
),
], )
self.minio_client_sync.set_bucket_lifecycle(self.tmp_bucket, lifecycle_conf)
async def create_bucket(self, bucket_name: str) -> None:
if not await self.minio_client.bucket_exists(bucket_name):
await self.minio_client.make_bucket(bucket_name)
def create_bucket_sync(self, bucket_name: str) -> None:
if not self.minio_client_sync.bucket_exists(bucket_name):
self.minio_client_sync.make_bucket(bucket_name)
async def check_bucket_exists(self, bucket_name: str) -> bool:
return await self.minio_client.bucket_exists(bucket_name)
def check_bucket_exists_sync(self, bucket_name: str) -> bool:
return self.minio_client_sync.bucket_exists(bucket_name)
async def get_all_buckets(self) -> list:
return await self.minio_client.list_buckets()
def get_all_buckets_sync(self) -> list:
return self.minio_client_sync.list_buckets()
async def remove_bucket(self, bucket_name: str) -> None:
if await self.minio_client.bucket_exists(bucket_name):
await self.minio_client.remove_bucket(bucket_name)
def remove_bucket_sync(self, bucket_name: str) -> None:
if self.minio_client_sync.bucket_exists(bucket_name):
self.minio_client_sync.remove_bucket(bucket_name)
async def put_object(self, *, bucket_name: Optional[str] = None, object_name: str,
file: Union[bytes, BinaryIO, Path, str],
content_type: str = "application/octet-stream", **kwargs) -> None:
if bucket_name is None:
bucket_name = self.bucket
#
if isinstance(file, (Path, str)):
file_path = str(file)
await self.minio_client.fput_object(
bucket_name=bucket_name,
object_name=object_name,
file_path=file_path,
content_type=content_type,
**kwargs
)
return
data_stream = file
if isinstance(file, bytes):
data_stream = BytesIO(file)
if 'length' not in kwargs:
try:
if hasattr(data_stream, "getbuffer"):
kwargs['length'] = data_stream.getbuffer().nbytes
elif hasattr(data_stream, "fileno"):
kwargs['length'] = os.fstat(data_stream.fileno()).st_size
else:
data_stream.seek(0, 2)
kwargs['length'] = data_stream.tell()
data_stream.seek(0)
except Exception as e:
raise ValueError(f"Could not determine file length for upload: {str(e)}")
if hasattr(data_stream, "seek") and callable(data_stream.seek):
data_stream.seek(0)
await self.minio_client.put_object(
bucket_name=bucket_name,
object_name=object_name,
data=data_stream,
content_type=content_type,
**kwargs
)
def put_object_sync(self, *, bucket_name: Optional[str] = None, object_name: str,
file: Union[bytes, BinaryIO, Path, str],
content_type: str = "application/octet-stream", **kwargs) -> None:
if bucket_name is None:
bucket_name = self.bucket
if isinstance(file, (Path, str)):
file_path = str(file)
self.minio_client_sync.fput_object(
bucket_name=bucket_name,
object_name=object_name,
file_path=file_path,
content_type=content_type,
**kwargs
)
return
data_stream = file
if isinstance(file, bytes):
data_stream = BytesIO(file)
if 'length' not in kwargs:
try:
if hasattr(data_stream, "getbuffer"):
kwargs['length'] = data_stream.getbuffer().nbytes
elif hasattr(data_stream, "fileno"):
try:
kwargs['length'] = os.fstat(data_stream.fileno()).st_size
except Exception:
data_stream.seek(0, 2)
kwargs['length'] = data_stream.tell()
data_stream.seek(0)
else:
data_stream.seek(0, 2)
kwargs['length'] = data_stream.tell()
data_stream.seek(0)
except Exception as e:
raise ValueError(f"Could not determine file length for upload: {str(e)}")
if hasattr(data_stream, "seek") and callable(data_stream.seek):
data_stream.seek(0)
self.minio_client_sync.put_object(
bucket_name=bucket_name,
object_name=object_name,
data=data_stream,
content_type=content_type,
**kwargs
)
async def put_object_tmp(self, object_name: str, file: Union[bytes, BinaryIO, Path, str],
content_type: str = "application/octet-stream", **kwargs) -> None:
await self.put_object(
bucket_name=self.tmp_bucket,
object_name=object_name,
file=file,
content_type=content_type,
**kwargs
)
def put_object_tmp_sync(self, object_name: str, file: Union[bytes, BinaryIO, Path, str],
content_type: str = "application/octet-stream", **kwargs) -> None:
self.put_object_sync(
bucket_name=self.tmp_bucket,
object_name=object_name,
file=file,
content_type=content_type,
**kwargs
)
async def get_object(self, bucket_name: Optional[str] = None, object_name: str = None) -> bytes | None:
if bucket_name is None:
bucket_name = self.bucket
if object_name is None:
raise ValueError("get_object: object_name must be provided")
response = await self.minio_client.get_object(bucket_name, object_name)
try:
data = await response.read()
return data
except Exception:
raise
finally:
response.close()
def get_object_sync(self, bucket_name: Optional[str] = None, object_name: str = None) -> bytes | None:
if bucket_name is None:
bucket_name = self.bucket
if object_name is None:
raise ValueError("get_object_sync: object_name must be provided")
response = self.minio_client_sync.get_object(bucket_name, object_name)
try:
data = response.read()
return data
except Exception:
raise
finally:
response.close()
response.release_conn()
async def object_exists(self, bucket_name: Optional[str] = None, object_name: str = None) -> bool:
if not bucket_name:
bucket_name = self.bucket
if not object_name:
logger.warning("object_exists_sync: object_name must be provided")
return False
try:
await self.minio_client.stat_object(bucket_name, object_name)
return True
except Exception as e:
if 'code: NoSuchKey' in str(e):
return False
raise e
def object_exists_sync(self, bucket_name: Optional[str] = None, object_name: str = None) -> bool:
if not bucket_name:
bucket_name = self.bucket
if not object_name:
logger.warning("object_exists_sync: object_name must be provided")
return False
try:
self.minio_client_sync.stat_object(bucket_name, object_name)
return True
except Exception as e:
if 'code: NoSuchKey' in str(e):
return False
raise e
async def copy_object(self, source_bucket: str = None, source_object: str = None,
dest_bucket: str = None, dest_object: str = None) -> None:
if source_bucket is None:
source_bucket = self.tmp_bucket
if dest_bucket is None:
dest_bucket = self.bucket
source = miniopy_async_commonconfig.CopySource(
bucket_name=source_bucket,
object_name=source_object
)
await self.minio_client.copy_object(
bucket_name=dest_bucket,
object_name=dest_object,
source=source
)
def copy_object_sync(self, source_bucket: str = None, source_object: str = None,
dest_bucket: str = None, dest_object: str = None) -> None:
if source_bucket is None:
source_bucket = self.tmp_bucket
if dest_bucket is None:
dest_bucket = self.bucket
source = minio.commonconfig.CopySource(
bucket_name=source_bucket,
object_name=source_object
)
self.minio_client_sync.copy_object(
bucket_name=dest_bucket,
object_name=dest_object,
source=source
)
async def remove_object(self, bucket_name: Optional[str] = None, object_name: str = None) -> None:
if bucket_name is None:
bucket_name = self.bucket
if object_name is None:
raise ValueError("remove_object: object_name must be provided")
await self.minio_client.remove_object(bucket_name, object_name)
def remove_object_sync(self, bucket_name: Optional[str] = None, object_name: str = None) -> None:
if bucket_name is None:
bucket_name = self.bucket
if object_name is None:
raise ValueError("remove_object_sync: object_name must be provided")
self.minio_client_sync.remove_object(bucket_name, object_name)
async def get_share_link(self, object_name, bucket=None, clear_host: bool = True, expire_days: int = 7) -> str:
"""
DapatkanminioFile sharing link
:param object_name:
:param bucket:
:param clear_host: Do you want to removehostAddress: urlVia FrontendnginxProxy Access
:param expire_days: Link expiration time, days
:return:
"""
if bucket is None:
bucket = self.bucket
# filepath "/" There will be at the beginningnginxQuestions
if object_name[0] == '/':
object_name = object_name[1:]
share_link = await self.minio_client.presigned_get_object(bucket, object_name,
expires=timedelta(days=expire_days))
if clear_host:
share_link = self.clear_minio_share_host(share_link)
return share_link
def get_share_link_sync(self, object_name, bucket=None, clear_host: bool = True, expire_days: int = 7) -> str:
"""
Synchronous fetchminioFile sharing link, Default RemovalhostAddress: urlwill go through the front endnginxProxy Access
:param object_name:
:param bucket:
:param clear_host: Do you want to removehostAddress: urlVia FrontendnginxProxy Access
:param expire_days: Link expiration time, days
:return:
"""
if bucket is None:
bucket = self.bucket
# filepath "/" There will be at the beginningnginxQuestions
if object_name[0] == '/':
object_name = object_name[1:]
share_link = self.minio_client_sync.presigned_get_object(bucket, object_name,
expires=timedelta(days=expire_days))
if clear_host:
share_link = self.clear_minio_share_host(share_link)
return share_link
def get_minio_share_host(self) -> str:
"""
Dapatkanminio share host
"""
minio_share = self.minio_config.sharepoint
if self.minio_config.share_schema:
return f'https://{minio_share}'
return f'http://{minio_share}'
def clear_minio_share_host(self, file_url: str):
"""
TODO The logical solution is to deploy ahttpsright of privacyminioUse with front-end
to be erasedurlhitting the nail on the headminio shareAddress: Let the front end throughnginxProxy to access resources
"""
share_host = self.get_minio_share_host()
return file_url.replace(share_host, '')
async def close(self) -> None:
"""Close Minio Client link"""
await self.minio_client.close_session()
def close_sync(self) -> None:
"""Sync off Minio Client link"""
del self.minio_client_sync
================================================
FILE: src/backend/bisheng/core/vectorstore/__init__.py
================================================
from langchain_elasticsearch import ElasticsearchStore, AsyncElasticsearchStore
from langchain_elasticsearch.vectorstores import BM25Strategy, AsyncBM25Strategy
from langchain_milvus import Milvus
__all__ = [
'Milvus',
'ElasticsearchStore',
'AsyncElasticsearchStore',
'BM25Strategy',
'AsyncBM25Strategy'
]
================================================
FILE: src/backend/bisheng/core/vectorstore/ensemble_retriever.py
================================================
import asyncio
from typing import List, Dict, Any, Sequence, Coroutine, Optional
from pydantic import Field, BaseModel, PrivateAttr, ConfigDict
from langchain_core.retrievers import BaseRetriever
from langchain_core.vectorstores import VectorStore
from langchain_core.documents import Document
from langchain_core.callbacks import (
CallbackManagerForRetrieverRun,
AsyncCallbackManagerForRetrieverRun
)
from langchain_core.runnables import RunnableConfig
from bisheng.core.ai.rerank.rrf_rerank import RRFRerank
# Input Retriever Parameter Model
class VectorRetrieverParams(BaseModel):
model_config = ConfigDict(arbitrary_types_allowed=True)
vector_store: VectorStore = Field(..., description="Vector Library Instance")
search_kwargs: Dict = Field(default_factory=dict, description="Retrieve Parameters")
weight: float = Field(default=1.0, description="Retriever Weight")
class RRFMultiVectorRetriever(BaseRetriever):
"""
predicated upon RRF (Reciprocal Rank Fusion) Multiple vector retriever.
Sync enabled/Asynchronous calls that support character-length-based context truncation.
"""
vector_store_params: List[VectorRetrieverParams] = Field(
..., description="Multiple vector libraries and their retrieval parameters and weights"
)
top_k: int = Field(default=5, description="The final number of documents returned. Note: Recommended settings >0 Value of")
rrf_c: int = Field(default=60, description="RRF constant c, smooth ranking weights")
remove_zero_score: bool = Field(default=True, description="Remove or not RRF Score is 0 Documents")
max_context_length: int = Field(default=0, description="Returns the maximum total character length of a document,0Indicates unlimited")
_rrf_rerank: RRFRerank = PrivateAttr()
_retrievers: List[BaseRetriever] = PrivateAttr(default_factory=list)
def __init__(self, **data: Any):
super().__init__(**data)
weights = []
self._retrievers = []
for param in self.vector_store_params:
weights.append(param.weight)
# Convert To retriever
self._retrievers.append(
param.vector_store.as_retriever(search_kwargs=param.search_kwargs)
)
# Inisialisasi RRF Reorder
self._rrf_rerank = RRFRerank(
retrievers=self._retrievers,
weights=weights,
c=self.rrf_c,
remove_zero_score=self.remove_zero_score
)
def _get_relevant_documents(
self, query: str, *, run_manager: CallbackManagerForRetrieverRun, **kwargs
) -> Sequence[Document]:
docs_lists = []
# Pass-through callback configuration
run_config: RunnableConfig = {"callbacks": run_manager.get_child()}
for retriever in self._retrievers:
try:
tmp_docs = retriever.invoke(query, config=run_config, **kwargs)
docs_lists.append(tmp_docs)
except Exception as e:
# Log exceptions but continue to execute other retrievers
run_manager.on_text(f"Retriever {retriever} failed with error: {e}", end="\n")
docs_lists.append([])
# Recall RRF Reorder
reranked_docs = self._rrf_rerank.compress_documents(query=query, documents=docs_lists)
return self._post_process_documents(reranked_docs)
async def _aget_relevant_documents(
self, query: str, *, run_manager: AsyncCallbackManagerForRetrieverRun, **kwargs
) -> Sequence[Document]:
tasks: List[Coroutine] = []
run_config: RunnableConfig = {"callbacks": run_manager.get_child()}
for retriever in self._retrievers:
tasks.append(
retriever.ainvoke(query, config=run_config, **kwargs)
)
# Concurrent execution
results = await asyncio.gather(*tasks, return_exceptions=True)
docs_lists = []
for idx, result in enumerate(results):
if isinstance(result, Exception):
# Log exceptions but continue to execute other retrievers
await run_manager.on_text(f"Retriever {self._retrievers[idx]} failed with error: {result}", end="\n")
docs_lists.append([])
else:
docs_lists.append(result)
# RRF Rearrangements
reranked_docs = self._rrf_rerank.compress_documents(query=query, documents=docs_lists)
return self._post_process_documents(reranked_docs)
def _post_process_documents(self, documents: Sequence[Document]) -> List[Document]:
"""cut off TopK And Length filtering"""
# Top K cut off
if self.top_k > 0:
documents = documents[:self.top_k]
# Length filtering
return self._filter_by_context_length(list(documents))
def _filter_by_context_length(self, documents: List[Document]) -> List[Document]:
"""according max_context_length Filter Documents List"""
if self.max_context_length <= 0:
return documents
curr_size = 0
filtered_docs = []
for doc in documents:
doc_size = len(doc.page_content)
# Determine if the limit has been exceeded after joining the document
if curr_size + doc_size <= self.max_context_length:
filtered_docs.append(doc)
curr_size += doc_size
else:
break
return filtered_docs
================================================
FILE: src/backend/bisheng/core/vectorstore/multi_retriever.py
================================================
import asyncio
from typing import List, Dict
from langchain_core.callbacks import CallbackManagerForRetrieverRun
from langchain_core.documents import Document
from langchain_core.retrievers import BaseRetriever
from langchain_core.vectorstores import VectorStore
class MultiRetriever(BaseRetriever):
""" A retriever that combines multiple retrievers. """
vectors: List[VectorStore]
search_kwargs: List[Dict]
finally_k: int = 0
def _get_relevant_documents(
self, query: str, *, run_manager: CallbackManagerForRetrieverRun, **kwargs
) -> list[Document]:
docs: List[tuple[Document, float]] = []
for index, vector in enumerate(self.vectors):
kwargs_ = self.search_kwargs[index] | kwargs
tmp_docs = vector.similarity_search_with_score(query, **kwargs_)
docs.extend(tmp_docs)
return self.parse_doc_with_score(docs)
async def _aget_relevant_documents(
self, query: str, *, run_manager: CallbackManagerForRetrieverRun, **kwargs
) -> list[Document]:
tasks = []
for index, vector in enumerate(self.vectors):
kwargs_ = self.search_kwargs[index] | kwargs
tasks.append(vector.asimilarity_search_with_score(query, **kwargs_))
results = await asyncio.gather(*tasks)
docs: List[tuple[Document, float]] = []
for tmp_docs in results:
docs.extend(tmp_docs)
return self.parse_doc_with_score(docs)
def parse_doc_with_score(self, docs_with_score: List[tuple[Document, float]]) -> List[Document]:
""" parse documents with score to documents only """
docs_with_score.sort(key=lambda x: x[1])
if self.finally_k > 0:
docs_with_score = docs_with_score[:self.finally_k]
return [doc for doc, _ in docs_with_score]
================================================
FILE: src/backend/bisheng/custom/__init__.py
================================================
================================================
FILE: src/backend/bisheng/custom/customs.py
================================================
from bisheng.template import frontend_node
# These should always be instantiated
CUSTOM_NODES = {
# "prompts": {
# "ZeroShotPrompt": frontend_node.prompts.ZeroShotPromptNode(),
# },
'tools': {
'PythonFunctionTool': frontend_node.tools.PythonFunctionToolNode(),
'PythonFunction': frontend_node.tools.PythonFunctionNode(),
'Tool': frontend_node.tools.ToolNode(),
},
'agents': {
'JsonAgent': frontend_node.agents.JsonAgentNode(),
# "CSVAgent": frontend_node.agents.CSVAgentNode(),
'AgentInitializer': frontend_node.agents.InitializeAgentNode(),
'VectorStoreAgent': frontend_node.agents.VectorStoreAgentNode(),
'VectorStoreRouterAgent': frontend_node.agents.VectorStoreRouterAgentNode(),
# "SQLAgent": frontend_node.agents.SQLAgentNode(),
},
'utilities': {
'SQLDatabase': frontend_node.agents.SQLDatabaseNode(),
},
'memories': {
'PostgresChatMessageHistory':
frontend_node.memories.PostgresChatMessageHistoryFrontendNode(),
'MongoDBChatMessageHistory':
frontend_node.memories.MongoDBChatMessageHistoryFrontendNode(),
},
'chains': {
'SeriesCharacterChain': frontend_node.chains.SeriesCharacterChainNode(),
'TimeTravelGuideChain': frontend_node.chains.TimeTravelGuideChainNode(),
'MidJourneyPromptChain': frontend_node.chains.MidJourneyPromptChainNode(),
'load_qa_chain': frontend_node.chains.CombineDocsChainNode(),
'load_summarize_chain': frontend_node.chains.SummarizeDocsChain(),
},
'embeddings': {
'OpenAIProxyEmbedding': frontend_node.embeddings.OpenAIProxyEmbedding(),
},
'input_output': {
'InputNode': frontend_node.input_output.InputNode(),
'OutputNode': frontend_node.input_output.OutputNode(),
'InputFileNode': frontend_node.input_output.InputFileNode(),
},
# 'output_parsers': {
# 'RouterOutputParser': frontend_node.output_parsers.RouterOutputParserFrontendNode(),
# }
}
def get_custom_nodes(node_type: str):
"""Get custom nodes."""
return CUSTOM_NODES.get(node_type, {})
================================================
FILE: src/backend/bisheng/database/__init__.py
================================================
================================================
FILE: src/backend/bisheng/database/base.py
================================================
import uuid
from sqlalchemy import func, Select
from sqlmodel.ext.asyncio.session import AsyncSession
from sqlmodel import Session
def get_count(session: Session, q: Select) -> int:
"""
Number of fetch query results
:param session:
:param q:
:return:
"""
count_q = q.with_only_columns(func.count()).order_by(None).select_from(q.get_final_froms()[0])
iterator = session.exec(count_q)
for count in iterator:
return count
return 0
async def async_get_count(session: AsyncSession, q: Select) -> int:
"""
Get the number of asynchronous query results
:param session:
:param q:
:return:
"""
count_q = q.with_only_columns(func.count()).order_by(None).select_from(q.get_final_froms()[0])
iterator = await session.exec(count_q)
for count in iterator:
return count
return 0
def uuid_hex() -> str:
"""
Generate oneUUIDhexadecimal string
:return: UUIDhexadecimal string
"""
return uuid.uuid4().hex
================================================
FILE: src/backend/bisheng/database/constants.py
================================================
from enum import Enum
# Default Normal User Role'sID
DefaultRole = 2
# Super Admin RoleID
AdminRole = 1
# Some of the basiccategoryType
class MessageCategory(Enum):
QUESTION = 'question' # User Questions
ANSWER = 'answer' # Answers
================================================
FILE: src/backend/bisheng/database/data/component.json
================================================
[{"单文档问答":{"id":"RetrievalQA-3568b","type":"InputFileNode","node":{"output_types":[],"display_name":"单文档问答","documentation":"","base_classes":["BaseRetrievalQA","RetrievalQA","Chain","function"],"description":"Chain for question-answering against an index.","template":{"token_max_CombineDocsChain-Pud2p":{"l2":false,"info":"当前只对stuff 生效","list":false,"name":"token_max","show":true,"type":"int","value":-1,"l2_name":"token_max","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"token_max","proxy":{"id":"CombineDocsChain-Pud2p","field":"token_max"}},"chain_type_CombineDocsChain-Pud2p":{"l2":false,"info":"","list":true,"name":"chain_type","show":true,"type":"str","value":"stuff","l2_name":"chain_type","options":["stuff","map_reduce","map_rerank","refine"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"CombineDocsChain-Pud2p","field":"chain_type"},"display_name":"Chain Type"},"tags_RetrievalQA-qH6Mk":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-qH6Mk","field":"tags"},"display_name":"Tags"},"memory_RetrievalQA-qH6Mk":{"l2":false,"info":"","list":false,"name":"memory","show":true,"type":"BaseMemory","l2_name":"memory","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-qH6Mk","field":"memory"},"display_name":"Memory"},"verbose_RetrievalQA-qH6Mk":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-qH6Mk","field":"verbose"},"display_name":"Verbose"},"metadata_RetrievalQA-qH6Mk":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-qH6Mk","field":"metadata"},"display_name":"Metadata"},"callbacks_RetrievalQA-qH6Mk":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-qH6Mk","field":"callbacks"},"display_name":"Callbacks"},"input_key_RetrievalQA-qH6Mk":{"l2":false,"info":"","list":false,"name":"input_key","show":true,"type":"str","value":"query","l2_name":"input_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-qH6Mk","field":"input_key"},"display_name":"Input Key"},"input_node_RetrievalQA-qH6Mk":{"l2":false,"info":"","list":false,"name":"input_node","show":true,"type":"input","l2_name":"input_node","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Preset Question","proxy":{"id":"RetrievalQA-qH6Mk","field":"input_node"}},"output_key_RetrievalQA-qH6Mk":{"l2":false,"info":"","list":false,"name":"output_key","show":true,"type":"str","value":"result","l2_name":"output_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-qH6Mk","field":"output_key"},"display_name":"Output Key"},"return_source_documents_RetrievalQA-qH6Mk":{"l2":false,"info":"","list":false,"name":"return_source_documents","show":true,"type":"bool","value":true,"l2_name":"return_source_documents","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-qH6Mk","field":"return_source_documents"},"display_name":"Return Source Documents"},"proxy_url_OpenAIProxyEmbedding-yvld7":{"l2":false,"info":"","list":false,"name":"proxy_url","show":false,"type":"str","value":"","l2_name":"proxy_url","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"http://43.133.35.137:8080","proxy":{"id":"OpenAIProxyEmbedding-yvld7","field":"proxy_url"},"display_name":"Proxy Url"},"file_path_InputFileNode-jdLkB":{"l2":false,"info":"","list":false,"name":"file_path","show":true,"type":"file","value":"","l2_name":"file_path","advanced":true,"password":false,"required":false,"suffixes":[".html",".md",".txt",".jpg",".png",".jpeg",".csv",".doc",".docx",".pdf",".ppt",".pptx",".xlsx",".tiff"],"fileTypes":["html","md","txt","jpg","png","jpeg","csv","doc","docx","pdf","ppt","pptx","tiff","xlsx"],"file_path":null,"multiline":false,"placeholder":"","display_name":"输入内容","proxy":{"id":"InputFileNode-jdLkB","field":"file_path"}},"n_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":false,"name":"n","show":false,"type":"int","value":1,"l2_name":"n","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"n"},"display_name":"N"},"tags_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"tags"},"display_name":"Tags"},"cache_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":false,"name":"cache","show":false,"type":"bool","l2_name":"cache","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"cache"},"display_name":"Cache"},"top_p_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":false,"name":"top_p","show":true,"type":"float","value":0.9,"l2_name":"top_p","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"top_p"},"display_name":"Top P"},"client_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":false,"name":"client","show":false,"type":"Any","l2_name":"client","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"client"},"display_name":"Client"},"headers_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":false,"name":"headers","show":false,"type":"code","value":"","l2_name":"headers","advanced":true,"password":false,"required":false,"multiline":true,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"headers"},"display_name":"Headers"},"verbose_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"verbose"},"display_name":"Verbose"},"metadata_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"metadata"},"display_name":"Metadata"},"callbacks_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"callbacks"},"display_name":"Callbacks"},"streaming_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":false,"name":"streaming","show":false,"type":"bool","value":false,"l2_name":"streaming","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"streaming"},"display_name":"Streaming"},"max_tokens_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":false,"name":"max_tokens","show":true,"type":"int","value":"","l2_name":"max_tokens","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"max_tokens"},"display_name":"Max Tokens"},"model_name_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":false,"name":"model_name","show":true,"type":"str","value":"gpt-3.5-turbo-16k-0613","l2_name":"model_name","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"model_name"},"display_name":"Model Name"},"max_retries_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":false,"name":"max_retries","show":false,"type":"int","value":6,"l2_name":"max_retries","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"max_retries"},"display_name":"Max Retries"},"temperature_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":false,"name":"temperature","show":true,"type":"float","value":0.7,"l2_name":"temperature","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"temperature"},"display_name":"Temperature"},"model_kwargs_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":false,"name":"model_kwargs","show":false,"type":"code","l2_name":"model_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"model_kwargs"},"display_name":"Model Kwargs"},"elemai_api_key_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":false,"name":"elemai_api_key","show":true,"type":"str","value":"","l2_name":"elemai_api_key","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"elemai_api_key"},"display_name":"Elemai Api Key"},"elemai_base_url_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":false,"name":"elemai_base_url","show":true,"type":"str","value":"http://192.168.106.12:6001/v1/chatcompletion","l2_name":"elemai_base_url","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"elemai_base_url"},"display_name":"Elemai Base Url"},"request_timeout_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":false,"name":"request_timeout","show":false,"type":"float","l2_name":"request_timeout","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"request_timeout"},"display_name":"Request Timeout"},"tiktoken_model_name_ProxyChatLLM-rnE4s":{"l2":false,"info":"","list":false,"name":"tiktoken_model_name","show":false,"type":"str","l2_name":"tiktoken_model_name","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-rnE4s","field":"tiktoken_model_name"},"display_name":"Tiktoken Model Name"},"drop_old_Milvus-T3kRH":{"l2":false,"info":"","list":false,"name":"drop_old","show":false,"type":"bool","value":false,"l2_name":"drop_old","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-T3kRH","field":"drop_old"},"display_name":"Drop Old"},"metadatas_Milvus-T3kRH":{"l2":false,"info":"","list":true,"name":"metadatas","show":false,"type":"code","l2_name":"metadatas","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-T3kRH","field":"metadatas"},"display_name":"Metadatas"},"index_params_Milvus-T3kRH":{"l2":false,"info":"","list":false,"name":"index_params","show":false,"type":"code","l2_name":"index_params","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-T3kRH","field":"index_params"},"display_name":"Index Params"},"search_kwargs_Milvus-T3kRH":{"l2":false,"info":"","list":false,"name":"search_kwargs","show":false,"type":"code","value":"{}","l2_name":"search_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-T3kRH","field":"search_kwargs"},"display_name":"Search Kwargs"},"search_params_Milvus-T3kRH":{"l2":false,"info":"","list":false,"name":"search_params","show":false,"type":"code","l2_name":"search_params","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-T3kRH","field":"search_params"},"display_name":"Search Params"},"collection_name_Milvus-T3kRH":{"l2":false,"info":"","list":false,"name":"collection_name","show":true,"type":"str","value":"","l2_name":"collection_name","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","collection_id":"","proxy":{"id":"Milvus-T3kRH","field":"collection_name"},"display_name":"Collection Name"},"connection_args_Milvus-T3kRH":{"l2":false,"info":"","list":false,"name":"connection_args","show":false,"type":"code","value":"","l2_name":"connection_args","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-T3kRH","field":"connection_args"},"display_name":"Connection Args"},"consistency_level_Milvus-T3kRH":{"l2":false,"info":"","list":false,"name":"consistency_level","show":false,"type":"str","value":"Session","l2_name":"consistency_level","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-T3kRH","field":"consistency_level"},"display_name":"Consistency Level"},"metadata_ElemUnstructuredLoaderV0-LAGXM":{"info":"","list":false,"name":"metadata","show":false,"type":"code","value":"{}","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Metadata","proxy":{"id":"ElemUnstructuredLoaderV0-LAGXM","field":"metadata"}},"unstructured_api_url_ElemUnstructuredLoaderV0-LAGXM":{"info":"","list":false,"name":"unstructured_api_url","show":true,"type":"str","value":"","advanced":false,"password":true,"required":true,"multiline":false,"placeholder":"","display_name":"unstructured_api_url","proxy":{"id":"ElemUnstructuredLoaderV0-LAGXM","field":"unstructured_api_url"}},"chunk_size_RecursiveCharacterTextSplitter-a7fc9":{"info":"","list":false,"name":"chunk_size","show":true,"type":"int","value":1000,"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Chunk Size","proxy":{"id":"RecursiveCharacterTextSplitter-a7fc9","field":"chunk_size"}},"separators_RecursiveCharacterTextSplitter-a7fc9":{"info":"","list":false,"name":"separators","show":true,"type":"str","value":"\\n\\n","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Separator","proxy":{"id":"RecursiveCharacterTextSplitter-a7fc9","field":"separators"}},"chunk_overlap_RecursiveCharacterTextSplitter-a7fc9":{"info":"","list":false,"name":"chunk_overlap","show":true,"type":"int","value":200,"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Chunk Overlap","proxy":{"id":"RecursiveCharacterTextSplitter-a7fc9","field":"chunk_overlap"}},"separator_type_RecursiveCharacterTextSplitter-a7fc9":{"info":"","list":true,"name":"separator_type","show":true,"type":"str","value":"Text","options":["Text","cobol","cpp","csharp","go","html","java","js","kotlin","latex","markdown","php","proto","python","rst","ruby","rust","scala","sol","swift","ts"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Separator Type","proxy":{"id":"RecursiveCharacterTextSplitter-a7fc9","field":"separator_type"}}},"flow":{"data":{"nodes":[{"width":384,"height":376,"id":"CombineDocsChain-Pud2p","type":"genericNode","position":{"x":1222.7195691813163,"y":-12.131560981144517},"data":{"id":"CombineDocsChain-Pud2p","node":{"template":{"llm":{"l2":false,"info":"","list":false,"name":"llm","show":true,"type":"BaseLanguageModel","l2_name":"llm","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"LLM"},"_type":"load_qa_chain","token_max":{"l2":false,"info":"当前只对stuff 生效","list":false,"name":"token_max","show":true,"type":"int","value":-1,"l2_name":"token_max","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"token_max"},"chain_type":{"l2":false,"info":"","list":true,"name":"chain_type","show":true,"type":"str","value":"stuff","l2_name":"chain_type","options":["stuff","map_reduce","map_rerank","refine"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""}},"description":"Load question answering chain.","base_classes":["BaseCombineDocumentsChain","function"],"display_name":"CombineDocsChain","output_types":[],"custom_fields":{},"documentation":""},"type":"CombineDocsChain","value":null},"selected":true,"positionAbsolute":{"x":1222.7195691813163,"y":-12.131560981144517}},{"width":384,"height":316,"id":"RetrievalQA-qH6Mk","type":"genericNode","position":{"x":1898.9908793385102,"y":150.74108594665665},"data":{"id":"RetrievalQA-qH6Mk","node":{"template":{"tags":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"_type":"RetrievalQA","memory":{"l2":false,"info":"","list":false,"name":"memory","show":true,"type":"BaseMemory","l2_name":"memory","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"verbose":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"metadata":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"callbacks":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"input_key":{"l2":false,"info":"","list":false,"name":"input_key","show":true,"type":"str","value":"query","l2_name":"input_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":""},"retriever":{"l2":false,"info":"","list":false,"name":"retriever","show":true,"type":"BaseRetriever","l2_name":"retriever","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"input_node":{"l2":false,"info":"","list":false,"name":"input_node","show":true,"type":"input","l2_name":"input_node","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Preset Question"},"output_key":{"l2":false,"info":"","list":false,"name":"output_key","show":true,"type":"str","value":"result","l2_name":"output_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":""},"combine_documents_chain":{"l2":false,"info":"","list":false,"name":"combine_documents_chain","show":true,"type":"BaseCombineDocumentsChain","l2_name":"combine_documents_chain","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"return_source_documents":{"l2":false,"info":"","list":false,"name":"return_source_documents","show":true,"type":"bool","value":true,"l2_name":"return_source_documents","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Chain for question-answering against an index.","base_classes":["BaseRetrievalQA","RetrievalQA","Chain","function"],"display_name":"RetrievalQA","output_types":[],"custom_fields":{},"documentation":"https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"},"type":"RetrievalQA","value":null},"selected":true,"positionAbsolute":{"x":1898.9908793385102,"y":150.74108594665665}},{"width":384,"height":172,"id":"OpenAIProxyEmbedding-yvld7","type":"genericNode","position":{"x":585.3522336200281,"y":1118.8504631949986},"data":{"id":"OpenAIProxyEmbedding-yvld7","node":{"template":{"_type":"proxy_embedding","proxy_url":{"l2":false,"info":"","list":false,"name":"proxy_url","show":false,"type":"str","value":"","l2_name":"proxy_url","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"http://43.133.35.137:8080"}},"description":" 使用自建的embedding服务使用openai进行embed ","base_classes":["Embeddings"],"display_name":"OpenAIProxyEmbedding","output_types":[],"custom_fields":{},"documentation":""},"type":"OpenAIProxyEmbedding","value":null},"selected":true,"positionAbsolute":{"x":585.3522336200281,"y":1118.8504631949986}},{"width":384,"height":254,"id":"InputFileNode-jdLkB","type":"genericNode","position":{"x":-67.64298275986698,"y":405.6605420525051},"data":{"id":"InputFileNode-jdLkB","node":{"template":{"_type":"InputFileNode","file_path":{"l2":false,"info":"","list":false,"name":"file_path","show":true,"type":"file","value":"","l2_name":"file_path","advanced":false,"password":false,"required":false,"suffixes":[".html",".md",".txt",".jpg",".png",".jpeg",".csv",".doc",".docx",".pdf",".ppt",".pptx",".xlsx",".tiff"],"fileTypes":["html","md","txt","jpg","png","jpeg","csv","doc","docx","pdf","ppt","pptx","tiff","xlsx"],"file_path":null,"multiline":false,"placeholder":"","display_name":"输入内容"}},"description":"输入节点,用来自动对接输入","base_classes":["fileNode"],"display_name":"InputFileNode","output_types":[],"custom_fields":{},"documentation":""},"type":"InputFileNode","value":null},"selected":true,"positionAbsolute":{"x":-67.64298275986698,"y":405.6605420525051}},{"width":384,"height":500,"id":"ProxyChatLLM-rnE4s","type":"genericNode","position":{"x":598.1704660724836,"y":-139.8508856646713},"data":{"id":"ProxyChatLLM-rnE4s","node":{"template":{"n":{"l2":false,"info":"","list":false,"name":"n","show":false,"type":"int","value":1,"l2_name":"n","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"tags":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"_type":"ProxyChatLLM","cache":{"l2":false,"info":"","list":false,"name":"cache","show":false,"type":"bool","l2_name":"cache","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"top_p":{"l2":false,"info":"","list":false,"name":"top_p","show":true,"type":"float","value":0.9,"l2_name":"top_p","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"client":{"l2":false,"info":"","list":false,"name":"client","show":false,"type":"Any","l2_name":"client","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"headers":{"l2":false,"info":"","list":false,"name":"headers","show":false,"type":"code","value":"","l2_name":"headers","advanced":false,"password":false,"required":false,"multiline":true,"placeholder":""},"verbose":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"l2_name":"verbose","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"metadata":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"callbacks":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"streaming":{"l2":false,"info":"","list":false,"name":"streaming","show":false,"type":"bool","value":false,"l2_name":"streaming","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"max_tokens":{"l2":false,"info":"","list":false,"name":"max_tokens","show":true,"type":"int","value":"","l2_name":"max_tokens","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":""},"model_name":{"l2":false,"info":"","list":false,"name":"model_name","show":true,"type":"str","value":"gpt-3.5-turbo-16k-0613","l2_name":"model_name","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"max_retries":{"l2":false,"info":"","list":false,"name":"max_retries","show":false,"type":"int","value":6,"l2_name":"max_retries","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"temperature":{"l2":false,"info":"","list":false,"name":"temperature","show":true,"type":"float","value":0.7,"l2_name":"temperature","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"model_kwargs":{"l2":false,"info":"","list":false,"name":"model_kwargs","show":true,"type":"code","l2_name":"model_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"elemai_api_key":{"l2":false,"info":"","list":false,"name":"elemai_api_key","show":true,"type":"str","value":"","l2_name":"elemai_api_key","advanced":false,"password":true,"required":false,"multiline":false,"placeholder":""},"elemai_base_url":{"l2":false,"info":"","list":false,"name":"elemai_base_url","show":true,"type":"str","value":"http://192.168.106.12:6001/v1/chatcompletion","l2_name":"elemai_base_url","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"request_timeout":{"l2":false,"info":"","list":false,"name":"request_timeout","show":false,"type":"float","l2_name":"request_timeout","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"tiktoken_model_name":{"l2":false,"info":"","list":false,"name":"tiktoken_model_name","show":false,"type":"str","l2_name":"tiktoken_model_name","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Wrapper around proxy Chat large language models.","base_classes":["BaseLanguageModel","ProxyChatLLM","BaseChatModel","BaseLLM"],"display_name":"ProxyChatLLM","output_types":[],"custom_fields":{},"documentation":""},"type":"ProxyChatLLM","value":null},"selected":true,"positionAbsolute":{"x":598.1704660724836,"y":-139.8508856646713}},{"width":384,"height":346,"id":"Milvus-T3kRH","type":"genericNode","position":{"x":1356.1418476973313,"y":809.6096821830637},"data":{"id":"Milvus-T3kRH","node":{"template":{"_type":"Milvus","drop_old":{"l2":false,"info":"","list":false,"name":"drop_old","show":false,"type":"bool","value":false,"l2_name":"drop_old","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"documents":{"l2":false,"info":"","list":true,"name":"documents","show":true,"type":"Document","l2_name":"documents","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Documents"},"embedding":{"l2":false,"info":"","list":false,"name":"embedding","show":true,"type":"Embeddings","l2_name":"embedding","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Embedding"},"metadatas":{"l2":false,"info":"","list":true,"name":"metadatas","show":false,"type":"code","l2_name":"metadatas","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"index_params":{"l2":false,"info":"","list":false,"name":"index_params","show":false,"type":"code","l2_name":"index_params","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"search_kwargs":{"l2":false,"info":"","list":false,"name":"search_kwargs","show":true,"type":"code","value":"{}","l2_name":"search_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"search_params":{"l2":false,"info":"","list":false,"name":"search_params","show":false,"type":"code","l2_name":"search_params","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"collection_name":{"l2":false,"info":"","list":false,"name":"collection_name","show":true,"type":"str","value":"","l2_name":"collection_name","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","collection_id":""},"connection_args":{"l2":false,"info":"","list":false,"name":"connection_args","show":true,"type":"code","value":"","l2_name":"connection_args","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"consistency_level":{"l2":false,"info":"","list":false,"name":"consistency_level","show":false,"type":"str","value":"Session","l2_name":"consistency_level","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Create a Milvus collection, indexes it with HNSW, and insert data.","base_classes":["VectorStore","Milvus","BaseRetriever","VectorStoreRetriever"],"display_name":"Milvus","output_types":[],"custom_fields":{},"documentation":"http://192.168.106.116:8030"},"type":"Milvus","value":null},"selected":true,"positionAbsolute":{"x":1356.1418476973313,"y":809.6096821830637}},{"width":384,"height":392,"id":"ElemUnstructuredLoaderV0-LAGXM","type":"genericNode","position":{"x":370.3915867302851,"y":393.863205643299},"data":{"id":"ElemUnstructuredLoaderV0-LAGXM","node":{"template":{"_type":"ElemUnstructuredLoaderV0","metadata":{"info":"","list":false,"name":"metadata","show":true,"type":"code","value":"{}","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Metadata"},"file_path":{"info":"","list":false,"name":"file_path","show":true,"type":"fileNode","value":"","advanced":false,"password":false,"required":false,"suffixes":[".html",".md",".txt",".jpg",".png",".jpeg",".csv",".doc",".docx",".pdf",".ppt",".pptx",".xlsx",".tiff"],"fileTypes":["html","md","txt","jpg","png","jpeg","csv","doc","docx","pdf","ppt","pptx","tiff","xlsx"],"multiline":false,"placeholder":""},"unstructured_api_url":{"info":"","list":false,"name":"unstructured_api_url","show":true,"type":"str","value":"","advanced":false,"password":true,"required":true,"multiline":false,"placeholder":"","display_name":"unstructured_api_url"}},"description":"Loads a PDF with pypdf and chunks at character level. dummy version","base_classes":["Document"],"display_name":"ElemUnstructuredLoaderV0","output_types":["Document"],"custom_fields":{},"documentation":""},"type":"ElemUnstructuredLoaderV0","value":null},"selected":true,"positionAbsolute":{"x":370.3915867302851,"y":393.863205643299}},{"width":384,"height":540,"id":"RecursiveCharacterTextSplitter-a7fc9","type":"genericNode","position":{"x":840.0634079971517,"y":439.4498034537745},"data":{"id":"RecursiveCharacterTextSplitter-a7fc9","node":{"template":{"_type":"RecursiveCharacterTextSplitter","documents":{"info":"","list":false,"name":"documents","show":true,"type":"Document","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"chunk_size":{"info":"","list":false,"name":"chunk_size","show":true,"type":"int","value":1000,"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Chunk Size"},"separators":{"info":"","list":false,"name":"separators","show":true,"type":"str","value":"\\n\\n","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Separator"},"chunk_overlap":{"info":"","list":false,"name":"chunk_overlap","show":true,"type":"int","value":200,"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Chunk Overlap"},"separator_type":{"info":"","list":true,"name":"separator_type","show":true,"type":"str","value":"Text","options":["Text","cobol","cpp","csharp","go","html","java","js","kotlin","latex","markdown","php","proto","python","rst","ruby","rust","scala","sol","swift","ts"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Separator Type"}},"description":"Splitting text by recursively look at characters.","base_classes":["Document"],"display_name":"RecursiveCharacterTextSplitter","output_types":["Document"],"custom_fields":{},"documentation":"https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/recursive_text_splitter"},"type":"RecursiveCharacterTextSplitter","value":null},"selected":true,"positionAbsolute":{"x":840.0634079971517,"y":439.4498034537745}}],"edges":[{"source":"CombineDocsChain-Pud2p","target":"RetrievalQA-qH6Mk","sourceHandle":"CombineDocsChain|CombineDocsChain-Pud2p|BaseCombineDocumentsChain|function","targetHandle":"BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-qH6Mk","id":"reactflow__edge-CombineDocsChain-Pud2pCombineDocsChain|CombineDocsChain-Pud2p|BaseCombineDocumentsChain|function-RetrievalQA-qH6MkBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-qH6Mk","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"ProxyChatLLM-rnE4s","target":"CombineDocsChain-Pud2p","sourceHandle":"ProxyChatLLM|ProxyChatLLM-rnE4s|BaseLanguageModel|ProxyChatLLM|BaseChatModel|BaseLLM","targetHandle":"BaseLanguageModel|llm|CombineDocsChain-Pud2p","id":"reactflow__edge-ProxyChatLLM-rnE4sProxyChatLLM|ProxyChatLLM-rnE4s|BaseLanguageModel|ProxyChatLLM|BaseChatModel|BaseLLM-CombineDocsChain-Pud2pBaseLanguageModel|llm|CombineDocsChain-Pud2p","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"Milvus-T3kRH","target":"RetrievalQA-qH6Mk","sourceHandle":"Milvus|Milvus-T3kRH|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever","targetHandle":"BaseRetriever|retriever|RetrievalQA-qH6Mk","id":"reactflow__edge-Milvus-T3kRHMilvus|Milvus-T3kRH|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever-RetrievalQA-qH6MkBaseRetriever|retriever|RetrievalQA-qH6Mk","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"OpenAIProxyEmbedding-yvld7","target":"Milvus-T3kRH","sourceHandle":"OpenAIProxyEmbedding|OpenAIProxyEmbedding-yvld7|Embeddings","targetHandle":"Embeddings|embedding|Milvus-T3kRH","id":"reactflow__edge-OpenAIProxyEmbedding-yvld7OpenAIProxyEmbedding|OpenAIProxyEmbedding-yvld7|Embeddings-Milvus-T3kRHEmbeddings|embedding|Milvus-T3kRH","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"InputFileNode-jdLkB","target":"ElemUnstructuredLoaderV0-LAGXM","sourceHandle":"InputFileNode|InputFileNode-jdLkB|fileNode","targetHandle":"fileNode|file_path|ElemUnstructuredLoaderV0-LAGXM","id":"reactflow__edge-InputFileNode-jdLkBInputFileNode|InputFileNode-jdLkB|fileNode-ElemUnstructuredLoaderV0-LAGXMfileNode|file_path|ElemUnstructuredLoaderV0-LAGXM","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"ElemUnstructuredLoaderV0-LAGXM","target":"RecursiveCharacterTextSplitter-a7fc9","sourceHandle":"ElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-LAGXM|Document","targetHandle":"Document|documents|RecursiveCharacterTextSplitter-a7fc9","id":"reactflow__edge-ElemUnstructuredLoaderV0-LAGXMElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-LAGXM|Document-RecursiveCharacterTextSplitter-a7fc9Document|documents|RecursiveCharacterTextSplitter-a7fc9","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"RecursiveCharacterTextSplitter-a7fc9","target":"Milvus-T3kRH","sourceHandle":"RecursiveCharacterTextSplitter|RecursiveCharacterTextSplitter-a7fc9|Document","targetHandle":"Document|documents|Milvus-T3kRH","id":"reactflow__edge-RecursiveCharacterTextSplitter-a7fc9RecursiveCharacterTextSplitter|RecursiveCharacterTextSplitter-a7fc9|Document-Milvus-T3kRHDocument|documents|Milvus-T3kRH","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true}],"viewport":{"zoom":1,"x":0,"y":0}},"is_component":false,"name":"","description":"","id":"2bec4","status":0,"write":false,"guide_word":""}}}},{"知识库问答_严谨版":{"id":"RetrievalQA-011e4","type":"RetrievalQA","node":{"output_types":[],"display_name":"知识库问答_严谨版","documentation":"","base_classes":["RetrievalQA","BaseRetrievalQA","Chain","function"],"description":"Chain for question-answering against an index.","template":{"n_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"n","show":false,"type":"int","value":1,"l2_name":"n","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"n"},"display_name":"N"},"tags_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"tags"},"display_name":"Tags"},"cache_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"cache","show":false,"type":"bool","l2_name":"cache","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"cache"},"display_name":"Cache"},"top_p_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"top_p","show":true,"type":"float","value":0.9,"l2_name":"top_p","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"top_p"},"display_name":"Top P"},"client_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"client","show":false,"type":"Any","l2_name":"client","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"client"},"display_name":"Client"},"headers_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"headers","show":false,"type":"code","value":"","l2_name":"headers","advanced":true,"password":false,"required":false,"multiline":true,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"headers"},"display_name":"Headers"},"verbose_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"verbose"},"display_name":"Verbose"},"metadata_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"metadata"},"display_name":"Metadata"},"callbacks_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"callbacks"},"display_name":"Callbacks"},"streaming_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"streaming","show":false,"type":"bool","value":false,"l2_name":"streaming","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"streaming"},"display_name":"Streaming"},"max_tokens_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"max_tokens","show":true,"type":"int","value":"","l2_name":"max_tokens","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"max_tokens"},"display_name":"Max Tokens"},"model_name_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"model_name","show":true,"type":"str","value":"gpt-3.5-turbo-16k-0613","l2_name":"model_name","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"model_name"},"display_name":"Model Name"},"max_retries_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"max_retries","show":false,"type":"int","value":6,"l2_name":"max_retries","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"max_retries"},"display_name":"Max Retries"},"temperature_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"temperature","show":true,"type":"float","value":0.7,"l2_name":"temperature","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"temperature"},"display_name":"Temperature"},"model_kwargs_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"model_kwargs","show":false,"type":"code","l2_name":"model_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"model_kwargs"},"display_name":"Model Kwargs"},"elemai_api_key_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"elemai_api_key","show":true,"type":"str","value":"","l2_name":"elemai_api_key","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"elemai_api_key"},"display_name":"Elemai Api Key"},"elemai_base_url_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"elemai_base_url","show":true,"type":"str","value":"http://192.168.106.12:6001/v1/chatcompletion","l2_name":"elemai_base_url","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"elemai_base_url"},"display_name":"Elemai Base Url"},"request_timeout_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"request_timeout","show":false,"type":"float","l2_name":"request_timeout","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"request_timeout"},"display_name":"Request Timeout"},"tiktoken_model_name_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"tiktoken_model_name","show":false,"type":"str","l2_name":"tiktoken_model_name","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"tiktoken_model_name"},"display_name":"Tiktoken Model Name"},"tags_RetrievalQA-ypS4m":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-ypS4m","field":"tags"},"display_name":"Tags"},"memory_RetrievalQA-ypS4m":{"l2":false,"info":"","list":false,"name":"memory","show":true,"type":"BaseMemory","l2_name":"memory","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-ypS4m","field":"memory"},"display_name":"Memory"},"verbose_RetrievalQA-ypS4m":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-ypS4m","field":"verbose"},"display_name":"Verbose"},"metadata_RetrievalQA-ypS4m":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-ypS4m","field":"metadata"},"display_name":"Metadata"},"callbacks_RetrievalQA-ypS4m":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-ypS4m","field":"callbacks"},"display_name":"Callbacks"},"input_key_RetrievalQA-ypS4m":{"l2":false,"info":"","list":false,"name":"input_key","show":true,"type":"str","value":"query","l2_name":"input_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-ypS4m","field":"input_key"},"display_name":"Input Key"},"input_node_RetrievalQA-ypS4m":{"l2":false,"info":"","list":false,"name":"input_node","show":true,"type":"input","l2_name":"input_node","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Preset Question","proxy":{"id":"RetrievalQA-ypS4m","field":"input_node"}},"output_key_RetrievalQA-ypS4m":{"l2":false,"info":"","list":false,"name":"output_key","show":true,"type":"str","value":"result","l2_name":"output_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-ypS4m","field":"output_key"},"display_name":"Output Key"},"return_source_documents_RetrievalQA-ypS4m":{"l2":false,"info":"","list":false,"name":"return_source_documents","show":true,"type":"bool","value":true,"l2_name":"return_source_documents","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-ypS4m","field":"return_source_documents"},"display_name":"Return Source Documents"},"token_max_CombineDocsChain-bMaXk":{"l2":false,"info":"只对Stuff类型生效","list":false,"name":"token_max","show":true,"type":"int","value":7000,"l2_name":"token_max","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"token_max","proxy":{"id":"CombineDocsChain-bMaXk","field":"token_max"}},"chain_type_CombineDocsChain-bMaXk":{"l2":false,"info":"","list":true,"name":"chain_type","show":true,"type":"str","value":"stuff","l2_name":"chain_type","options":["stuff","map_reduce","map_rerank","refine"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"CombineDocsChain-bMaXk","field":"chain_type"},"display_name":"Chain Type"},"document_prompt_CombineDocsChain-bMaXk":{"info":"","list":false,"name":"document_prompt","type":"BasePromptTemplate","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"CombineDocsChain-bMaXk","field":"document_prompt"},"display_name":"Document Prompt"},"context_PromptTemplate-gM5zg":{"info":"","list":false,"name":"context","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser","VariableNode"],"placeholder":"","display_name":"context","proxy":{"id":"PromptTemplate-gM5zg","field":"context"}},"question_PromptTemplate-gM5zg":{"info":"","list":false,"name":"question","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser","VariableNode"],"placeholder":"","display_name":"question","proxy":{"id":"PromptTemplate-gM5zg","field":"question"}},"template_PromptTemplate-gM5zg":{"l2":false,"info":"","list":false,"name":"template","show":true,"type":"prompt","value":"参考文本:\n{context}\n\n----------------------\n# Role:客服\n\n# Background :\n- 你是一名客服人员。你的日常工作是根据【参考文本】的内容回复用户的各类咨询问题。\n\n# Goals:\n- 以上【参考文本】中是从企业知识库中查找到的相关信息,只能结合以上信息进行回答,若以上内容为空或其中没有找到能回答【用户问题】的内容时,则回复“没有找到相关内容”,不能根据你自己的知识自己发挥。\n- 特别要注意区分【用户问题】与【参考文本】中不同的日期、人名、公司名这些关键信息。\n- 用中文回答问题,并且答案要严谨、专业、清晰、可读性好。\n- 拥有排版审美, 会利用序号, 缩进, 分隔线和换行符等等来美化信息排版。\n\n----------------------\n\n用户问题: {question}\n你的回答:","l2_name":"template","advanced":false,"password":false,"required":true,"multiline":true,"placeholder":"","proxy":{"id":"PromptTemplate-gM5zg","field":"template"},"display_name":"Template"},"output_parser_PromptTemplate-gM5zg":{"l2":false,"info":"","list":false,"name":"output_parser","show":true,"type":"BaseOutputParser","l2_name":"output_parser","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-gM5zg","field":"output_parser"},"display_name":"Output Parser"},"input_variables_PromptTemplate-gM5zg":{"l2":false,"info":"","list":true,"name":"input_variables","show":false,"type":"str","value":["context","question"],"l2_name":"input_variables","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-gM5zg","field":"input_variables"},"display_name":"Input Variables"},"template_format_PromptTemplate-gM5zg":{"l2":false,"info":"","list":false,"name":"template_format","show":false,"type":"str","value":"f-string","l2_name":"template_format","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-gM5zg","field":"template_format"},"display_name":"Template Format"},"partial_variables_PromptTemplate-gM5zg":{"l2":false,"info":"","list":false,"name":"partial_variables","show":false,"type":"code","l2_name":"partial_variables","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-gM5zg","field":"partial_variables"},"display_name":"Partial Variables"},"validate_template_PromptTemplate-gM5zg":{"l2":false,"info":"","list":false,"name":"validate_template","show":false,"type":"bool","value":true,"l2_name":"validate_template","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-gM5zg","field":"validate_template"},"display_name":"Validate Template"},"ids_ElasticKeywordsSearch-dVhq9":{"l2":false,"info":"","list":true,"name":"ids","show":false,"type":"str","l2_name":"ids","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ElasticKeywordsSearch-dVhq9","field":"ids"},"display_name":"Ids"},"documents_ElasticKeywordsSearch-dVhq9":{"l2":false,"info":"","list":true,"name":"documents","show":true,"type":"Document","l2_name":"documents","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Documents","proxy":{"id":"ElasticKeywordsSearch-dVhq9","field":"documents"}},"embedding_ElasticKeywordsSearch-dVhq9":{"l2":false,"info":"","list":false,"name":"embedding","show":false,"type":"Embeddings","l2_name":"embedding","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Embedding","proxy":{"id":"ElasticKeywordsSearch-dVhq9","field":"embedding"}},"metadatas_ElasticKeywordsSearch-dVhq9":{"l2":false,"info":"","list":true,"name":"metadatas","show":false,"type":"code","l2_name":"metadatas","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ElasticKeywordsSearch-dVhq9","field":"metadatas"},"display_name":"Metadatas"},"index_name_ElasticKeywordsSearch-dVhq9":{"l2":true,"info":"","list":false,"name":"index_name","show":true,"type":"str","value":"col_1701960496_3a537dc9","l2_name":"知识库","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ElasticKeywordsSearch-dVhq9","field":"index_name"},"display_name":"Index Name"},"ssl_verify_ElasticKeywordsSearch-dVhq9":{"l2":false,"info":"","list":false,"name":"ssl_verify","show":true,"type":"str","value":"","l2_name":"ssl_verify","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"ssl_verify","proxy":{"id":"ElasticKeywordsSearch-dVhq9","field":"ssl_verify"}},"search_kwargs_ElasticKeywordsSearch-dVhq9":{"l2":false,"info":"","list":false,"name":"search_kwargs","show":false,"type":"code","value":"{\"k\":6,\"query_strategy\":\"match_phrase\",\"must_or_should\":\"must\"}","l2_name":"search_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ElasticKeywordsSearch-dVhq9","field":"search_kwargs"},"display_name":"Search Kwargs"},"refresh_indices_ElasticKeywordsSearch-dVhq9":{"l2":false,"info":"","list":false,"name":"refresh_indices","show":false,"type":"bool","value":true,"l2_name":"refresh_indices","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ElasticKeywordsSearch-dVhq9","field":"refresh_indices"},"display_name":"Refresh Indices"},"elasticsearch_url_ElasticKeywordsSearch-dVhq9":{"l2":false,"info":"","list":false,"name":"elasticsearch_url","show":true,"type":"str","value":"","l2_name":"elasticsearch_url","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"ES_connection_url","proxy":{"id":"ElasticKeywordsSearch-dVhq9","field":"elasticsearch_url"}},"question_PromptTemplate-4iBFj":{"info":"","list":false,"name":"question","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser","VariableNode"],"placeholder":"","display_name":"question","proxy":{"id":"PromptTemplate-4iBFj","field":"question"}},"template_PromptTemplate-4iBFj":{"l2":false,"info":"","list":false,"name":"template","show":true,"type":"prompt","value":"分析给定Question,提取Question中包含的KeyWords,输出列表形式\n\nExamples:\nQuestion: 数据项素2022年营收是多少?\nKeyWords: ['数据项素', '2022', '营收, '营业收入']\nQuestion: 深圳出差住宿标准是什么?\nKeyWords: ['深圳', '出差', '住宿标准', '报销标准']\n\n\n----------------\nQuestion: {question}\nKeyWords: ","l2_name":"template","advanced":false,"password":false,"required":true,"multiline":true,"placeholder":"","proxy":{"id":"PromptTemplate-4iBFj","field":"template"},"display_name":"Template"},"output_parser_PromptTemplate-4iBFj":{"l2":false,"info":"","list":false,"name":"output_parser","show":true,"type":"BaseOutputParser","l2_name":"output_parser","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-4iBFj","field":"output_parser"},"display_name":"Output Parser"},"input_variables_PromptTemplate-4iBFj":{"l2":false,"info":"","list":true,"name":"input_variables","show":false,"type":"str","value":["question"],"l2_name":"input_variables","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-4iBFj","field":"input_variables"},"display_name":"Input Variables"},"template_format_PromptTemplate-4iBFj":{"l2":false,"info":"","list":false,"name":"template_format","show":false,"type":"str","value":"f-string","l2_name":"template_format","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-4iBFj","field":"template_format"},"display_name":"Template Format"},"partial_variables_PromptTemplate-4iBFj":{"l2":false,"info":"","list":false,"name":"partial_variables","show":false,"type":"code","l2_name":"partial_variables","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-4iBFj","field":"partial_variables"},"display_name":"Partial Variables"},"validate_template_PromptTemplate-4iBFj":{"l2":false,"info":"","list":false,"name":"validate_template","show":false,"type":"bool","value":true,"l2_name":"validate_template","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-4iBFj","field":"validate_template"},"display_name":"Validate Template"}},"flow":{"data":{"nodes":[{"width":384,"height":500,"id":"ProxyChatLLM-UYoB4","type":"genericNode","position":{"x":-2220.2561641720736,"y":-777.5185403158035},"data":{"id":"ProxyChatLLM-UYoB4","node":{"template":{"n":{"l2":false,"info":"","list":false,"name":"n","show":false,"type":"int","value":1,"l2_name":"n","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"tags":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"_type":"ProxyChatLLM","cache":{"l2":false,"info":"","list":false,"name":"cache","show":false,"type":"bool","l2_name":"cache","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"top_p":{"l2":false,"info":"","list":false,"name":"top_p","show":true,"type":"float","value":0.9,"l2_name":"top_p","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"client":{"l2":false,"info":"","list":false,"name":"client","show":false,"type":"Any","l2_name":"client","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"headers":{"l2":false,"info":"","list":false,"name":"headers","show":false,"type":"code","value":"","l2_name":"headers","advanced":false,"password":false,"required":false,"multiline":true,"placeholder":""},"verbose":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"l2_name":"verbose","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"metadata":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"callbacks":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"streaming":{"l2":false,"info":"","list":false,"name":"streaming","show":false,"type":"bool","value":false,"l2_name":"streaming","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"max_tokens":{"l2":false,"info":"","list":false,"name":"max_tokens","show":true,"type":"int","value":"","l2_name":"max_tokens","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":""},"model_name":{"l2":false,"info":"","list":false,"name":"model_name","show":true,"type":"str","value":"gpt-3.5-turbo-16k-0613","l2_name":"model_name","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"max_retries":{"l2":false,"info":"","list":false,"name":"max_retries","show":false,"type":"int","value":6,"l2_name":"max_retries","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"temperature":{"l2":false,"info":"","list":false,"name":"temperature","show":true,"type":"float","value":0.7,"l2_name":"temperature","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"model_kwargs":{"l2":false,"info":"","list":false,"name":"model_kwargs","show":true,"type":"code","l2_name":"model_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"elemai_api_key":{"l2":false,"info":"","list":false,"name":"elemai_api_key","show":true,"type":"str","value":"","l2_name":"elemai_api_key","advanced":false,"password":true,"required":false,"multiline":false,"placeholder":""},"elemai_base_url":{"l2":false,"info":"","list":false,"name":"elemai_base_url","show":true,"type":"str","value":"http://192.168.106.12:6001/v1/chatcompletion","l2_name":"elemai_base_url","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"request_timeout":{"l2":false,"info":"","list":false,"name":"request_timeout","show":false,"type":"float","l2_name":"request_timeout","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"tiktoken_model_name":{"l2":false,"info":"","list":false,"name":"tiktoken_model_name","show":false,"type":"str","l2_name":"tiktoken_model_name","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Wrapper around proxy Chat large language models.","base_classes":["BaseChatModel","ProxyChatLLM","BaseLanguageModel","BaseLLM"],"display_name":"ProxyChatLLM","output_types":[],"custom_fields":{},"documentation":""},"type":"ProxyChatLLM","value":null},"selected":true,"positionAbsolute":{"x":-2220.2561641720736,"y":-777.5185403158035}},{"width":384,"height":316,"id":"RetrievalQA-ypS4m","type":"genericNode","position":{"x":-523.0150819181391,"y":97.4334598716227},"data":{"id":"RetrievalQA-ypS4m","node":{"template":{"tags":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"_type":"RetrievalQA","memory":{"l2":false,"info":"","list":false,"name":"memory","show":true,"type":"BaseMemory","l2_name":"memory","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"verbose":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"metadata":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"callbacks":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"input_key":{"l2":false,"info":"","list":false,"name":"input_key","show":true,"type":"str","value":"query","l2_name":"input_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":""},"retriever":{"l2":false,"info":"","list":false,"name":"retriever","show":true,"type":"BaseRetriever","l2_name":"retriever","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"input_node":{"l2":false,"info":"","list":false,"name":"input_node","show":true,"type":"input","l2_name":"input_node","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Preset Question"},"output_key":{"l2":false,"info":"","list":false,"name":"output_key","show":true,"type":"str","value":"result","l2_name":"output_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":""},"combine_documents_chain":{"l2":false,"info":"","list":false,"name":"combine_documents_chain","show":true,"type":"BaseCombineDocumentsChain","l2_name":"combine_documents_chain","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"return_source_documents":{"l2":false,"info":"","list":false,"name":"return_source_documents","show":true,"type":"bool","value":true,"l2_name":"return_source_documents","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Chain for question-answering against an index.","base_classes":["RetrievalQA","BaseRetrievalQA","Chain","function"],"display_name":"RetrievalQA","output_types":[],"custom_fields":{},"documentation":"https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"},"type":"RetrievalQA","value":null},"selected":true,"positionAbsolute":{"x":-523.0150819181391,"y":97.4334598716227}},{"width":384,"height":412,"id":"CombineDocsChain-bMaXk","type":"genericNode","position":{"x":-1130.4006392228448,"y":-400.50282859447026},"data":{"id":"CombineDocsChain-bMaXk","node":{"template":{"llm":{"l2":false,"info":"","list":false,"name":"llm","show":true,"type":"BaseLanguageModel","l2_name":"llm","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"LLM"},"_type":"load_qa_chain","prompt":{"l2":false,"info":"只对Stuff类型生效","list":false,"name":"prompt","show":true,"type":"BasePromptTemplate","l2_name":"prompt","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"prompt"},"token_max":{"l2":false,"info":"只对Stuff类型生效","list":false,"name":"token_max","show":true,"type":"int","value":7000,"l2_name":"token_max","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"token_max"},"chain_type":{"l2":false,"info":"","list":true,"name":"chain_type","show":true,"type":"str","value":"stuff","l2_name":"chain_type","options":["stuff","map_reduce","map_rerank","refine"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"document_prompt":{"info":"","list":false,"name":"document_prompt","type":"BasePromptTemplate","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Load question answering chain.","base_classes":["BaseCombineDocumentsChain","function"],"display_name":"CombineDocsChain","output_types":[],"custom_fields":{},"documentation":""},"type":"CombineDocsChain","value":null},"selected":true,"positionAbsolute":{"x":-1130.4006392228448,"y":-400.50282859447026}},{"width":384,"height":454,"id":"PromptTemplate-gM5zg","type":"genericNode","position":{"x":-1632.2039543868736,"y":-814.266749101787},"data":{"id":"PromptTemplate-gM5zg","node":{"name":"","template":{"_type":"PromptTemplate","context":{"info":"","list":false,"name":"context","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser","VariableNode"],"placeholder":"","display_name":"context"},"question":{"info":"","list":false,"name":"question","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser","VariableNode"],"placeholder":"","display_name":"question"},"template":{"l2":false,"info":"","list":false,"name":"template","show":true,"type":"prompt","value":"参考文本:\n{context}\n\n----------------------\n# Role:客服\n\n# Background :\n- 你是一名客服人员。你的日常工作是根据【参考文本】的内容回复用户的各类咨询问题。\n\n# Goals:\n- 以上【参考文本】中是从企业知识库中查找到的相关信息,只能结合以上信息进行回答,若以上内容为空或其中没有找到能回答【用户问题】的内容时,则回复“没有找到相关内容”,不能根据你自己的知识自己发挥。\n- 特别要注意区分【用户问题】与【参考文本】中不同的日期、人名、公司名这些关键信息。\n- 用中文回答问题,并且答案要严谨、专业、清晰、可读性好。\n- 拥有排版审美, 会利用序号, 缩进, 分隔线和换行符等等来美化信息排版。\n\n----------------------\n\n用户问题: {question}\n你的回答:","l2_name":"template","advanced":false,"password":false,"required":true,"multiline":true,"placeholder":""},"output_parser":{"l2":false,"info":"","list":false,"name":"output_parser","show":true,"type":"BaseOutputParser","l2_name":"output_parser","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"input_variables":{"l2":false,"info":"","list":true,"name":"input_variables","show":false,"type":"str","value":["context","question"],"l2_name":"input_variables","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"template_format":{"l2":false,"info":"","list":false,"name":"template_format","show":false,"type":"str","value":"f-string","l2_name":"template_format","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"partial_variables":{"l2":false,"info":"","list":false,"name":"partial_variables","show":false,"type":"code","l2_name":"partial_variables","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"validate_template":{"l2":false,"info":"","list":false,"name":"validate_template","show":false,"type":"bool","value":true,"l2_name":"validate_template","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Schema to represent a prompt for an LLM.","base_classes":["StringPromptTemplate","BasePromptTemplate","PromptTemplate"],"display_name":"PromptTemplate","output_types":[],"custom_fields":{"":["context","question"],"template":["context","question"]},"documentation":"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/","field_formatters":{"formatters":{"openai_api_key":{}},"base_formatters":{"dict":{},"list":{},"show":{},"union":{},"kwargs":{},"default":{},"headers":{},"optional":{},"password":{},"multiline":{},"model_fields":{"MODEL_DICT":{"OpenAI":["text-davinci-003","text-davinci-002","text-curie-001","text-babbage-001","text-ada-001"],"Anthropic":["claude-v1","claude-v1-100k","claude-instant-v1","claude-instant-v1-100k","claude-v1.3","claude-v1.3-100k","claude-v1.2","claude-v1.0","claude-instant-v1.1","claude-instant-v1.1-100k","claude-instant-v1.0"],"ChatOpenAI":["gpt-3.5-turbo-0613","gpt-3.5-turbo","gpt-3.5-turbo-16k-0613","gpt-3.5-turbo-16k","gpt-4-0613","gpt-4-32k-0613","gpt-4","gpt-4-32k"],"ChatAnthropic":["claude-v1","claude-v1-100k","claude-instant-v1","claude-instant-v1-100k","claude-v1.3","claude-v1.3-100k","claude-v1.2","claude-v1.0","claude-instant-v1.1","claude-instant-v1.1-100k","claude-instant-v1.0"]}},"dict_code_file":{}}}},"type":"PromptTemplate","value":null},"selected":true,"positionAbsolute":{"x":-1632.2039543868736,"y":-814.266749101787}},{"width":384,"height":628,"id":"ElasticKeywordsSearch-dVhq9","type":"genericNode","position":{"x":-1620.6487761012545,"y":-186.12742019985436},"data":{"id":"ElasticKeywordsSearch-dVhq9","node":{"template":{"ids":{"l2":false,"info":"","list":true,"name":"ids","show":false,"type":"str","l2_name":"ids","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"llm":{"l2":false,"info":"","list":false,"name":"llm","show":true,"type":"BaseLLM","l2_name":"llm","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"LLM"},"_type":"ElasticKeywordsSearch","prompt":{"l2":false,"info":"","list":false,"name":"prompt","show":true,"type":"BasePromptTemplate","l2_name":"prompt","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"prompt"},"documents":{"l2":false,"info":"","list":true,"name":"documents","show":true,"type":"Document","l2_name":"documents","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Documents"},"embedding":{"l2":false,"info":"","list":false,"name":"embedding","show":false,"type":"Embeddings","l2_name":"embedding","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Embedding"},"metadatas":{"l2":false,"info":"","list":true,"name":"metadatas","show":false,"type":"code","l2_name":"metadatas","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"index_name":{"l2":true,"info":"","list":false,"name":"index_name","show":true,"type":"str","value":"col_1701960496_3a537dc9","l2_name":"知识库","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"ssl_verify":{"l2":false,"info":"","list":false,"name":"ssl_verify","show":true,"type":"str","value":"","l2_name":"ssl_verify","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"ssl_verify"},"search_kwargs":{"l2":false,"info":"","list":false,"name":"search_kwargs","show":true,"type":"code","value":"{\"k\":6,\"query_strategy\":\"match_phrase\",\"must_or_should\":\"must\"}","l2_name":"search_kwargs","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"refresh_indices":{"l2":false,"info":"","list":false,"name":"refresh_indices","show":false,"type":"bool","value":true,"l2_name":"refresh_indices","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"elasticsearch_url":{"l2":false,"info":"","list":false,"name":"elasticsearch_url","show":true,"type":"str","value":"","l2_name":"elasticsearch_url","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"ES_connection_url"}},"description":"Construct ElasticKeywordsSearch wrapper from raw documents.","base_classes":["ElasticKeywordsSearch","VectorStore","BaseRetriever","VectorStoreRetriever"],"display_name":"ElasticKeywordsSearch","output_types":[],"custom_fields":{},"documentation":"http://192.168.106.116:8030"},"type":"ElasticKeywordsSearch","value":null},"selected":true,"positionAbsolute":{"x":-1620.6487761012545,"y":-186.12742019985436}},{"width":384,"height":372,"id":"PromptTemplate-4iBFj","type":"genericNode","position":{"x":-2302.5673221463094,"y":-146.52073590180217},"data":{"id":"PromptTemplate-4iBFj","node":{"name":"","template":{"_type":"PromptTemplate","question":{"info":"","list":false,"name":"question","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser","VariableNode"],"placeholder":"","display_name":"question"},"template":{"l2":false,"info":"","list":false,"name":"template","show":true,"type":"prompt","value":"分析给定Question,提取Question中包含的KeyWords,输出列表形式\n\nExamples:\nQuestion: 数据项素2022年营收是多少?\nKeyWords: ['数据项素', '2022', '营收, '营业收入']\nQuestion: 深圳出差住宿标准是什么?\nKeyWords: ['深圳', '出差', '住宿标准', '报销标准']\n\n\n----------------\nQuestion: {question}\nKeyWords: ","l2_name":"template","advanced":false,"password":false,"required":true,"multiline":true,"placeholder":""},"output_parser":{"l2":false,"info":"","list":false,"name":"output_parser","show":true,"type":"BaseOutputParser","l2_name":"output_parser","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"input_variables":{"l2":false,"info":"","list":true,"name":"input_variables","show":false,"type":"str","value":["question"],"l2_name":"input_variables","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"template_format":{"l2":false,"info":"","list":false,"name":"template_format","show":false,"type":"str","value":"f-string","l2_name":"template_format","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"partial_variables":{"l2":false,"info":"","list":false,"name":"partial_variables","show":false,"type":"code","l2_name":"partial_variables","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"validate_template":{"l2":false,"info":"","list":false,"name":"validate_template","show":false,"type":"bool","value":true,"l2_name":"validate_template","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Schema to represent a prompt for an LLM.","base_classes":["StringPromptTemplate","BasePromptTemplate","PromptTemplate"],"display_name":"PromptTemplate","output_types":[],"custom_fields":{"":["question"],"template":["question"]},"documentation":"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/","field_formatters":{"formatters":{"openai_api_key":{}},"base_formatters":{"dict":{},"list":{},"show":{},"union":{},"kwargs":{},"default":{},"headers":{},"optional":{},"password":{},"multiline":{},"model_fields":{"MODEL_DICT":{"OpenAI":["text-davinci-003","text-davinci-002","text-curie-001","text-babbage-001","text-ada-001"],"Anthropic":["claude-v1","claude-v1-100k","claude-instant-v1","claude-instant-v1-100k","claude-v1.3","claude-v1.3-100k","claude-v1.2","claude-v1.0","claude-instant-v1.1","claude-instant-v1.1-100k","claude-instant-v1.0"],"ChatOpenAI":["gpt-3.5-turbo-0613","gpt-3.5-turbo","gpt-3.5-turbo-16k-0613","gpt-3.5-turbo-16k","gpt-4-0613","gpt-4-32k-0613","gpt-4","gpt-4-32k"],"ChatAnthropic":["claude-v1","claude-v1-100k","claude-instant-v1","claude-instant-v1-100k","claude-v1.3","claude-v1.3-100k","claude-v1.2","claude-v1.0","claude-instant-v1.1","claude-instant-v1.1-100k","claude-instant-v1.0"]}},"dict_code_file":{}}}},"type":"PromptTemplate","value":null},"selected":true,"positionAbsolute":{"x":-2302.5673221463094,"y":-146.52073590180217}}],"edges":[{"source":"CombineDocsChain-bMaXk","target":"RetrievalQA-ypS4m","sourceHandle":"CombineDocsChain|CombineDocsChain-bMaXk|BaseCombineDocumentsChain|function","targetHandle":"BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-ypS4m","id":"reactflow__edge-CombineDocsChain-bMaXkCombineDocsChain|CombineDocsChain-bMaXk|BaseCombineDocumentsChain|function-RetrievalQA-ypS4mBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-ypS4m","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"PromptTemplate-gM5zg","target":"CombineDocsChain-bMaXk","sourceHandle":"PromptTemplate|PromptTemplate-gM5zg|StringPromptTemplate|BasePromptTemplate|PromptTemplate","targetHandle":"BasePromptTemplate|prompt|CombineDocsChain-bMaXk","id":"reactflow__edge-PromptTemplate-gM5zgPromptTemplate|PromptTemplate-gM5zg|StringPromptTemplate|BasePromptTemplate|PromptTemplate-CombineDocsChain-bMaXkBasePromptTemplate|prompt|CombineDocsChain-bMaXk","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"ElasticKeywordsSearch-dVhq9","target":"RetrievalQA-ypS4m","sourceHandle":"ElasticKeywordsSearch|ElasticKeywordsSearch-dVhq9|ElasticKeywordsSearch|VectorStore|BaseRetriever|VectorStoreRetriever","targetHandle":"BaseRetriever|retriever|RetrievalQA-ypS4m","id":"reactflow__edge-ElasticKeywordsSearch-dVhq9ElasticKeywordsSearch|ElasticKeywordsSearch-dVhq9|ElasticKeywordsSearch|VectorStore|BaseRetriever|VectorStoreRetriever-RetrievalQA-ypS4mBaseRetriever|retriever|RetrievalQA-ypS4m","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"PromptTemplate-4iBFj","target":"ElasticKeywordsSearch-dVhq9","sourceHandle":"PromptTemplate|PromptTemplate-4iBFj|StringPromptTemplate|BasePromptTemplate|PromptTemplate","targetHandle":"BasePromptTemplate|prompt|ElasticKeywordsSearch-dVhq9","id":"reactflow__edge-PromptTemplate-4iBFjPromptTemplate|PromptTemplate-4iBFj|StringPromptTemplate|BasePromptTemplate|PromptTemplate-ElasticKeywordsSearch-dVhq9BasePromptTemplate|prompt|ElasticKeywordsSearch-dVhq9","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"ProxyChatLLM-UYoB4","target":"CombineDocsChain-bMaXk","sourceHandle":"ProxyChatLLM|ProxyChatLLM-UYoB4|BaseChatModel|ProxyChatLLM|BaseLanguageModel|BaseLLM","targetHandle":"BaseLanguageModel|llm|CombineDocsChain-bMaXk","id":"reactflow__edge-ProxyChatLLM-UYoB4ProxyChatLLM|ProxyChatLLM-UYoB4|BaseChatModel|ProxyChatLLM|BaseLanguageModel|BaseLLM-CombineDocsChain-bMaXkBaseLanguageModel|llm|CombineDocsChain-bMaXk","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"ProxyChatLLM-UYoB4","target":"ElasticKeywordsSearch-dVhq9","sourceHandle":"ProxyChatLLM|ProxyChatLLM-UYoB4|BaseChatModel|ProxyChatLLM|BaseLanguageModel|BaseLLM","targetHandle":"BaseLLM|llm|ElasticKeywordsSearch-dVhq9","id":"reactflow__edge-ProxyChatLLM-UYoB4ProxyChatLLM|ProxyChatLLM-UYoB4|BaseChatModel|ProxyChatLLM|BaseLanguageModel|BaseLLM-ElasticKeywordsSearch-dVhq9BaseLLM|llm|ElasticKeywordsSearch-dVhq9","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true}],"viewport":{"zoom":1,"x":0,"y":0}},"is_component":false,"name":"","description":"","id":"e4a9c","status":0,"write":false,"guide_word":""}}}},{"知识库问答_增强版":{"id":"ConversationalRetrievalChain-f19da","type":"ConversationalRetrievalChain","node":{"output_types":[],"display_name":"知识库问答_增强版","documentation":"","base_classes":["BaseConversationalRetrievalChain","Chain","ConversationalRetrievalChain","function"],"description":"Convenience method to load chain from LLM and retriever.","template":{"n_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"n","show":false,"type":"int","value":1,"l2_name":"n","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"n"},"display_name":"N"},"tags_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"tags"},"display_name":"Tags"},"cache_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"cache","show":false,"type":"bool","l2_name":"cache","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"cache"},"display_name":"Cache"},"top_p_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"top_p","show":true,"type":"float","value":0.9,"l2_name":"top_p","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"top_p"},"display_name":"Top P"},"client_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"client","show":false,"type":"Any","l2_name":"client","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"client"},"display_name":"Client"},"headers_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"headers","show":false,"type":"code","value":"","l2_name":"headers","advanced":true,"password":false,"required":false,"multiline":true,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"headers"},"display_name":"Headers"},"verbose_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"verbose"},"display_name":"Verbose"},"metadata_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"metadata"},"display_name":"Metadata"},"callbacks_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"callbacks"},"display_name":"Callbacks"},"streaming_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"streaming","show":false,"type":"bool","value":false,"l2_name":"streaming","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"streaming"},"display_name":"Streaming"},"max_tokens_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"max_tokens","show":true,"type":"int","value":"","l2_name":"max_tokens","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"max_tokens"},"display_name":"Max Tokens"},"model_name_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"model_name","show":true,"type":"str","value":"gpt-3.5-turbo-16k-0613","l2_name":"model_name","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"model_name"},"display_name":"Model Name"},"max_retries_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"max_retries","show":false,"type":"int","value":6,"l2_name":"max_retries","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"max_retries"},"display_name":"Max Retries"},"temperature_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"temperature","show":true,"type":"float","value":0.7,"l2_name":"temperature","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"temperature"},"display_name":"Temperature"},"model_kwargs_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"model_kwargs","show":false,"type":"code","l2_name":"model_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"model_kwargs"},"display_name":"Model Kwargs"},"elemai_api_key_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"elemai_api_key","show":true,"type":"str","value":"","l2_name":"elemai_api_key","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"elemai_api_key"},"display_name":"Elemai Api Key"},"elemai_base_url_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"elemai_base_url","show":true,"type":"str","value":"http://192.168.106.12:6001/v1/chatcompletion","l2_name":"elemai_base_url","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"elemai_base_url"},"display_name":"Elemai Base Url"},"request_timeout_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"request_timeout","show":false,"type":"float","l2_name":"request_timeout","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"request_timeout"},"display_name":"Request Timeout"},"tiktoken_model_name_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"tiktoken_model_name","show":false,"type":"str","l2_name":"tiktoken_model_name","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"tiktoken_model_name"},"display_name":"Tiktoken Model Name"},"tags_MixEsVectorRetriever-J35CZ":{"l2":false,"info":"","list":true,"name":"tags","show":true,"type":"str","l2_name":"tags","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"MixEsVectorRetriever-J35CZ","field":"tags"},"display_name":"Tags"},"metadata_MixEsVectorRetriever-J35CZ":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"MixEsVectorRetriever-J35CZ","field":"metadata"},"display_name":"Metadata"},"combine_strategy_MixEsVectorRetriever-J35CZ":{"l2":false,"info":"","list":true,"name":"combine_strategy","show":true,"type":"str","value":"mix","l2_name":"combine_strategy","options":["keyword_front","vector_front","mix"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"MixEsVectorRetriever-J35CZ","field":"combine_strategy"},"display_name":"Combine Strategy"},"drop_old_Milvus-cyR5W":{"l2":false,"info":"","list":false,"name":"drop_old","show":false,"type":"bool","value":false,"l2_name":"drop_old","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-cyR5W","field":"drop_old"},"display_name":"Drop Old"},"documents_Milvus-cyR5W":{"l2":false,"info":"","list":true,"name":"documents","show":true,"type":"Document","l2_name":"documents","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Documents","proxy":{"id":"Milvus-cyR5W","field":"documents"}},"embedding_Milvus-cyR5W":{"l2":false,"info":"","list":false,"name":"embedding","show":false,"type":"Embeddings","l2_name":"embedding","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Embedding","proxy":{"id":"Milvus-cyR5W","field":"embedding"}},"metadatas_Milvus-cyR5W":{"l2":false,"info":"","list":true,"name":"metadatas","show":false,"type":"code","l2_name":"metadatas","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-cyR5W","field":"metadatas"},"display_name":"Metadatas"},"index_params_Milvus-cyR5W":{"l2":false,"info":"","list":false,"name":"index_params","show":false,"type":"code","l2_name":"index_params","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-cyR5W","field":"index_params"},"display_name":"Index Params"},"search_kwargs_Milvus-cyR5W":{"l2":false,"info":"","list":false,"name":"search_kwargs","show":false,"type":"code","value":"{}","l2_name":"search_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-cyR5W","field":"search_kwargs"},"display_name":"Search Kwargs"},"search_params_Milvus-cyR5W":{"l2":false,"info":"","list":false,"name":"search_params","show":false,"type":"code","l2_name":"search_params","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-cyR5W","field":"search_params"},"display_name":"Search Params"},"collection_name_Milvus-cyR5W":{"l2":true,"info":"","list":false,"name":"collection_name","show":true,"type":"str","value":"col_1700798314_e3f656ab","l2_name":"collection_name","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-cyR5W","field":"collection_name"},"display_name":"Collection Name"},"connection_args_Milvus-cyR5W":{"l2":false,"info":"","list":false,"name":"connection_args","show":false,"type":"code","value":"","l2_name":"connection_args","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-cyR5W","field":"connection_args"},"display_name":"Connection Args"},"consistency_level_Milvus-cyR5W":{"l2":false,"info":"","list":false,"name":"consistency_level","show":false,"type":"str","value":"Session","l2_name":"consistency_level","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-cyR5W","field":"consistency_level"},"display_name":"Consistency Level"},"ids_ElasticKeywordsSearch-31Et9":{"l2":false,"info":"","list":true,"name":"ids","show":false,"type":"str","l2_name":"ids","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ElasticKeywordsSearch-31Et9","field":"ids"},"display_name":"Ids"},"llm_ElasticKeywordsSearch-31Et9":{"l2":false,"info":"","list":false,"name":"llm","type":"BaseLLM","l2_name":"llm","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"LLM","proxy":{"id":"ElasticKeywordsSearch-31Et9","field":"llm"}},"prompt_ElasticKeywordsSearch-31Et9":{"l2":false,"info":"","list":false,"name":"prompt","type":"BasePromptTemplate","l2_name":"prompt","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"prompt","proxy":{"id":"ElasticKeywordsSearch-31Et9","field":"prompt"}},"documents_ElasticKeywordsSearch-31Et9":{"l2":false,"info":"","list":true,"name":"documents","show":true,"type":"Document","l2_name":"documents","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Documents","proxy":{"id":"ElasticKeywordsSearch-31Et9","field":"documents"}},"embedding_ElasticKeywordsSearch-31Et9":{"l2":false,"info":"","list":false,"name":"embedding","show":false,"type":"Embeddings","l2_name":"embedding","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Embedding","proxy":{"id":"ElasticKeywordsSearch-31Et9","field":"embedding"}},"metadatas_ElasticKeywordsSearch-31Et9":{"l2":false,"info":"","list":true,"name":"metadatas","show":false,"type":"code","l2_name":"metadatas","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ElasticKeywordsSearch-31Et9","field":"metadatas"},"display_name":"Metadatas"},"index_name_ElasticKeywordsSearch-31Et9":{"l2":true,"info":"","list":false,"name":"index_name","show":true,"type":"str","value":"col_1700798314_e3f656ab","l2_name":"index_name","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ElasticKeywordsSearch-31Et9","field":"index_name"},"display_name":"Index Name"},"ssl_verify_ElasticKeywordsSearch-31Et9":{"l2":false,"info":"","list":false,"name":"ssl_verify","show":true,"type":"str","value":"","l2_name":"ssl_verify","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"ssl_verify","proxy":{"id":"ElasticKeywordsSearch-31Et9","field":"ssl_verify"}},"search_kwargs_ElasticKeywordsSearch-31Et9":{"l2":false,"info":"","list":false,"name":"search_kwargs","show":false,"type":"code","value":"{}","l2_name":"search_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ElasticKeywordsSearch-31Et9","field":"search_kwargs"},"display_name":"Search Kwargs"},"refresh_indices_ElasticKeywordsSearch-31Et9":{"l2":false,"info":"","list":false,"name":"refresh_indices","show":false,"type":"bool","value":true,"l2_name":"refresh_indices","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ElasticKeywordsSearch-31Et9","field":"refresh_indices"},"display_name":"Refresh Indices"},"elasticsearch_url_ElasticKeywordsSearch-31Et9":{"l2":false,"info":"","list":false,"name":"elasticsearch_url","show":true,"type":"str","value":"","l2_name":"elasticsearch_url","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"ES_connection_url","proxy":{"id":"ElasticKeywordsSearch-31Et9","field":"elasticsearch_url"}},"verbose_ConversationalRetrievalChain-SmY3w":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationalRetrievalChain-SmY3w","field":"verbose"},"display_name":"Verbose"},"callbacks_ConversationalRetrievalChain-SmY3w":{"l2":false,"info":"","list":false,"name":"callbacks","show":false,"type":"Callbacks","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationalRetrievalChain-SmY3w","field":"callbacks"},"display_name":"Callbacks"},"chain_type_ConversationalRetrievalChain-SmY3w":{"l2":false,"info":"","list":true,"name":"chain_type","show":true,"type":"str","value":"stuff","l2_name":"chain_type","options":["stuff","map_reduce","map_rerank","refine"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"ConversationalRetrievalChain-SmY3w","field":"chain_type"},"display_name":"Chain Type"},"input_node_ConversationalRetrievalChain-SmY3w":{"l2":false,"info":"","list":false,"name":"input_node","show":true,"type":"input","l2_name":"input_node","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Preset Question","proxy":{"id":"ConversationalRetrievalChain-SmY3w","field":"input_node"}},"condense_question_llm_ConversationalRetrievalChain-SmY3w":{"l2":false,"info":"","list":false,"name":"condense_question_llm","show":false,"type":"BaseLanguageModel","l2_name":"condense_question_llm","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationalRetrievalChain-SmY3w","field":"condense_question_llm"},"display_name":"Condense Question LLM"},"return_source_documents_ConversationalRetrievalChain-SmY3w":{"l2":false,"info":"","list":false,"name":"return_source_documents","show":true,"type":"bool","value":true,"l2_name":"return_source_documents","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Return source documents","proxy":{"id":"ConversationalRetrievalChain-SmY3w","field":"return_source_documents"}},"condense_question_prompt_ConversationalRetrievalChain-SmY3w":{"l2":false,"info":"","list":false,"name":"condense_question_prompt","show":true,"type":"BasePromptTemplate","value":{"_type":"prompt","template":"Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language.\n\nChat History:\n{chat_history}\nFollow Up Input: {question}\nStandalone question:","output_parser":null,"input_variables":["chat_history","question"],"template_format":"f-string","partial_variables":{},"validate_template":true},"l2_name":"condense_question_prompt","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationalRetrievalChain-SmY3w","field":"condense_question_prompt"},"display_name":"Condense Question Prompt"},"ai_prefix_ConversationBufferMemory-K1tss":{"l2":false,"info":"","list":false,"name":"ai_prefix","show":false,"type":"str","value":"AI","l2_name":"ai_prefix","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationBufferMemory-K1tss","field":"ai_prefix"},"display_name":"Ai Prefix"},"input_key_ConversationBufferMemory-K1tss":{"l2":false,"info":"The variable to be used as Chat Input when more than one variable is available.","list":false,"name":"input_key","show":true,"type":"str","value":"","l2_name":"input_key","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationBufferMemory-K1tss","field":"input_key"},"display_name":"Input Key"},"memory_key_ConversationBufferMemory-K1tss":{"l2":false,"info":"","list":false,"name":"memory_key","show":true,"type":"str","value":"chat_history","l2_name":"memory_key","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationBufferMemory-K1tss","field":"memory_key"},"display_name":"Memory Key"},"output_key_ConversationBufferMemory-K1tss":{"l2":false,"info":"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)","list":false,"name":"output_key","show":true,"type":"str","value":"answer","l2_name":"output_key","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationBufferMemory-K1tss","field":"output_key"},"display_name":"Output Key"},"chat_memory_ConversationBufferMemory-K1tss":{"l2":false,"info":"","list":false,"name":"chat_memory","show":true,"type":"BaseChatMessageHistory","l2_name":"chat_memory","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationBufferMemory-K1tss","field":"chat_memory"},"display_name":"Chat Memory"},"human_prefix_ConversationBufferMemory-K1tss":{"l2":false,"info":"","list":false,"name":"human_prefix","show":false,"type":"str","value":"Human","l2_name":"human_prefix","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationBufferMemory-K1tss","field":"human_prefix"},"display_name":"Human Prefix"},"return_messages_ConversationBufferMemory-K1tss":{"l2":false,"info":"","list":false,"name":"return_messages","show":true,"type":"bool","l2_name":"return_messages","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationBufferMemory-K1tss","field":"return_messages"},"display_name":"Return Messages"},"template_PromptTemplate-bs0vj":{"l2":false,"info":"","list":false,"name":"template","show":true,"type":"prompt","value":"参考文本:\n{context}\n\n----------------------\n\n1.用中文回答用户问题,并且答案要严谨专业。\n2.你需要依据以上【参考文本】中的内容来回答,当【参考文本】中有明确与用户问题相关的内容时才进行回答,不可根据自己的知识来回答。\n3.由于【参考文本】可能包含多个来自不同信息源的信息,所以根据这些不同的信息源可能得出有差异甚至冲突的答案,当发现这种情况时,这些答案都列举出来;如果没有冲突或差异,则只需要给出一个最终结果。\n4.若【参考文本】中内容与用户问题不相关则回复“没有找到相关内容”。\n\n----------------------\n\n用户问题: {question}\n你的回答:","l2_name":"template","advanced":false,"password":false,"required":true,"multiline":true,"placeholder":"","proxy":{"id":"PromptTemplate-bs0vj","field":"template"},"display_name":"Template"},"output_parser_PromptTemplate-bs0vj":{"l2":false,"info":"","list":false,"name":"output_parser","show":true,"type":"BaseOutputParser","l2_name":"output_parser","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-bs0vj","field":"output_parser"},"display_name":"Output Parser"},"input_variables_PromptTemplate-bs0vj":{"l2":false,"info":"","list":true,"name":"input_variables","show":false,"type":"str","value":["context","question"],"l2_name":"input_variables","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-bs0vj","field":"input_variables"},"display_name":"Input Variables"},"template_format_PromptTemplate-bs0vj":{"l2":false,"info":"","list":false,"name":"template_format","show":false,"type":"str","value":"f-string","l2_name":"template_format","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-bs0vj","field":"template_format"},"display_name":"Template Format"},"partial_variables_PromptTemplate-bs0vj":{"l2":false,"info":"","list":false,"name":"partial_variables","show":false,"type":"code","l2_name":"partial_variables","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-bs0vj","field":"partial_variables"},"display_name":"Partial Variables"},"validate_template_PromptTemplate-bs0vj":{"l2":false,"info":"","list":false,"name":"validate_template","show":false,"type":"bool","value":true,"l2_name":"validate_template","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-bs0vj","field":"validate_template"},"display_name":"Validate Template"}},"flow":{"data":{"nodes":[{"width":384,"height":500,"id":"ProxyChatLLM-UYoB4","type":"genericNode","position":{"x":-3019.932873785603,"y":-759.0579388411045},"data":{"id":"ProxyChatLLM-UYoB4","node":{"template":{"n":{"l2":false,"info":"","list":false,"name":"n","show":false,"type":"int","value":1,"l2_name":"n","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"tags":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"_type":"ProxyChatLLM","cache":{"l2":false,"info":"","list":false,"name":"cache","show":false,"type":"bool","l2_name":"cache","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"top_p":{"l2":false,"info":"","list":false,"name":"top_p","show":true,"type":"float","value":0.9,"l2_name":"top_p","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"client":{"l2":false,"info":"","list":false,"name":"client","show":false,"type":"Any","l2_name":"client","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"headers":{"l2":false,"info":"","list":false,"name":"headers","show":false,"type":"code","value":"","l2_name":"headers","advanced":false,"password":false,"required":false,"multiline":true,"placeholder":""},"verbose":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"l2_name":"verbose","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"metadata":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"callbacks":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"streaming":{"l2":false,"info":"","list":false,"name":"streaming","show":false,"type":"bool","value":false,"l2_name":"streaming","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"max_tokens":{"l2":false,"info":"","list":false,"name":"max_tokens","show":true,"type":"int","value":"","l2_name":"max_tokens","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":""},"model_name":{"l2":false,"info":"","list":false,"name":"model_name","show":true,"type":"str","value":"gpt-3.5-turbo-16k-0613","l2_name":"model_name","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"max_retries":{"l2":false,"info":"","list":false,"name":"max_retries","show":false,"type":"int","value":6,"l2_name":"max_retries","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"temperature":{"l2":false,"info":"","list":false,"name":"temperature","show":true,"type":"float","value":0.7,"l2_name":"temperature","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"model_kwargs":{"l2":false,"info":"","list":false,"name":"model_kwargs","show":true,"type":"code","l2_name":"model_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"elemai_api_key":{"l2":false,"info":"","list":false,"name":"elemai_api_key","show":true,"type":"str","value":"","l2_name":"elemai_api_key","advanced":false,"password":true,"required":false,"multiline":false,"placeholder":""},"elemai_base_url":{"l2":false,"info":"","list":false,"name":"elemai_base_url","show":true,"type":"str","value":"http://192.168.106.12:6001/v1/chatcompletion","l2_name":"elemai_base_url","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"request_timeout":{"l2":false,"info":"","list":false,"name":"request_timeout","show":false,"type":"float","l2_name":"request_timeout","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"tiktoken_model_name":{"l2":false,"info":"","list":false,"name":"tiktoken_model_name","show":false,"type":"str","l2_name":"tiktoken_model_name","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Wrapper around proxy Chat large language models.","base_classes":["ProxyChatLLM","BaseLanguageModel","BaseChatModel","BaseLLM"],"display_name":"ProxyChatLLM","output_types":[],"custom_fields":{},"documentation":""},"type":"ProxyChatLLM","value":null},"selected":true,"positionAbsolute":{"x":-3019.932873785603,"y":-759.0579388411045}},{"width":384,"height":350,"id":"MixEsVectorRetriever-J35CZ","type":"genericNode","position":{"x":-2407.3760484096842,"y":-129.80633940439208},"data":{"id":"MixEsVectorRetriever-J35CZ","node":{"template":{"tags":{"l2":false,"info":"","list":true,"name":"tags","show":true,"type":"str","l2_name":"tags","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"_type":"MixEsVectorRetriever","metadata":{"l2":false,"info":"","list":false,"name":"metadata","show":true,"type":"code","l2_name":"metadata","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"combine_strategy":{"l2":false,"info":"","list":true,"name":"combine_strategy","show":true,"type":"str","value":"mix","l2_name":"combine_strategy","options":["keyword_front","vector_front","mix"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"vector_retriever":{"l2":false,"info":"","list":false,"name":"vector_retriever","show":true,"type":"BaseRetriever","l2_name":"vector_retriever","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"keyword_retriever":{"l2":false,"info":"","list":false,"name":"keyword_retriever","show":true,"type":"BaseRetriever","l2_name":"keyword_retriever","advanced":false,"password":true,"required":true,"multiline":false,"placeholder":"","value":""}},"description":"This class ensemble the results of es retriever and vector retriever.","base_classes":["BaseRetriever","MixEsVectorRetriever"],"display_name":"MixEsVectorRetriever","output_types":[],"custom_fields":{},"documentation":""},"type":"MixEsVectorRetriever","value":null},"selected":true,"positionAbsolute":{"x":-2407.3760484096842,"y":-129.80633940439208}},{"width":384,"height":392,"id":"Milvus-cyR5W","type":"genericNode","position":{"x":-3010.2766638860544,"y":280.83609057857933},"data":{"id":"Milvus-cyR5W","node":{"template":{"_type":"Milvus","drop_old":{"l2":false,"info":"","list":false,"name":"drop_old","show":false,"type":"bool","value":false,"l2_name":"drop_old","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"documents":{"l2":false,"info":"","list":true,"name":"documents","show":true,"type":"Document","l2_name":"documents","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Documents"},"embedding":{"l2":false,"info":"","list":false,"name":"embedding","show":false,"type":"Embeddings","l2_name":"embedding","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Embedding"},"metadatas":{"l2":false,"info":"","list":true,"name":"metadatas","show":false,"type":"code","l2_name":"metadatas","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"index_params":{"l2":false,"info":"","list":false,"name":"index_params","show":false,"type":"code","l2_name":"index_params","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"search_kwargs":{"l2":false,"info":"","list":false,"name":"search_kwargs","show":true,"type":"code","value":"{}","l2_name":"search_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"search_params":{"l2":false,"info":"","list":false,"name":"search_params","show":false,"type":"code","l2_name":"search_params","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"collection_name":{"l2":true,"info":"","list":false,"name":"collection_name","show":true,"type":"str","value":"col_1700798314_e3f656ab","l2_name":"collection_name","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"connection_args":{"l2":false,"info":"","list":false,"name":"connection_args","show":true,"type":"code","value":"","l2_name":"connection_args","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"consistency_level":{"l2":false,"info":"","list":false,"name":"consistency_level","show":false,"type":"str","value":"Session","l2_name":"consistency_level","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Create a Milvus collection, indexes it with HNSW, and insert data.","base_classes":["VectorStore","Milvus","BaseRetriever","VectorStoreRetriever"],"display_name":"Milvus","output_types":[],"custom_fields":{},"documentation":"http://192.168.106.116:8030"},"type":"Milvus","value":null},"selected":true,"positionAbsolute":{"x":-3010.2766638860544,"y":280.83609057857933}},{"width":384,"height":474,"id":"ElasticKeywordsSearch-31Et9","type":"genericNode","position":{"x":-3007.9415392561414,"y":-220.71638201134618},"data":{"id":"ElasticKeywordsSearch-31Et9","node":{"template":{"ids":{"l2":false,"info":"","list":true,"name":"ids","show":false,"type":"str","l2_name":"ids","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"llm":{"l2":false,"info":"","list":false,"name":"llm","type":"BaseLLM","l2_name":"llm","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"LLM"},"_type":"ElasticKeywordsSearch","prompt":{"l2":false,"info":"","list":false,"name":"prompt","type":"BasePromptTemplate","l2_name":"prompt","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"prompt"},"documents":{"l2":false,"info":"","list":true,"name":"documents","show":true,"type":"Document","l2_name":"documents","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Documents"},"embedding":{"l2":false,"info":"","list":false,"name":"embedding","show":false,"type":"Embeddings","l2_name":"embedding","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Embedding"},"metadatas":{"l2":false,"info":"","list":true,"name":"metadatas","show":false,"type":"code","l2_name":"metadatas","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"index_name":{"l2":true,"info":"","list":false,"name":"index_name","show":true,"type":"str","value":"col_1700798314_e3f656ab","l2_name":"index_name","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"ssl_verify":{"l2":false,"info":"","list":false,"name":"ssl_verify","show":true,"type":"str","value":"","l2_name":"ssl_verify","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"ssl_verify"},"search_kwargs":{"l2":false,"info":"","list":false,"name":"search_kwargs","show":true,"type":"code","value":"{}","l2_name":"search_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"refresh_indices":{"l2":false,"info":"","list":false,"name":"refresh_indices","show":false,"type":"bool","value":true,"l2_name":"refresh_indices","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"elasticsearch_url":{"l2":false,"info":"","list":false,"name":"elasticsearch_url","show":true,"type":"str","value":"","l2_name":"elasticsearch_url","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"ES_connection_url"}},"description":"Construct ElasticKeywordsSearch wrapper from raw documents.","base_classes":["VectorStore","ElasticKeywordsSearch","BaseRetriever","VectorStoreRetriever"],"display_name":"ElasticKeywordsSearch","output_types":[],"custom_fields":{},"documentation":"http://192.168.106.116:8030"},"type":"ElasticKeywordsSearch","value":null},"selected":true,"positionAbsolute":{"x":-3007.9415392561414,"y":-220.71638201134618}},{"width":384,"height":494,"id":"ConversationalRetrievalChain-SmY3w","type":"genericNode","position":{"x":-1547.0269680478611,"y":-543.0897871904267},"data":{"id":"ConversationalRetrievalChain-SmY3w","node":{"template":{"llm":{"l2":false,"info":"","list":false,"name":"llm","show":true,"type":"BaseLanguageModel","l2_name":"llm","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"_type":"ConversationalRetrievalChain","memory":{"l2":false,"info":"","list":false,"name":"memory","show":true,"type":"BaseChatMemory","l2_name":"memory","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"verbose":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"callbacks":{"l2":false,"info":"","list":false,"name":"callbacks","show":false,"type":"Callbacks","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"retriever":{"l2":false,"info":"","list":false,"name":"retriever","show":true,"type":"BaseRetriever","l2_name":"retriever","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"chain_type":{"l2":false,"info":"","list":true,"name":"chain_type","show":true,"type":"str","value":"stuff","l2_name":"chain_type","options":["stuff","map_reduce","map_rerank","refine"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"input_node":{"l2":false,"info":"","list":false,"name":"input_node","show":true,"type":"input","l2_name":"input_node","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Preset Question"},"condense_question_llm":{"l2":false,"info":"","list":false,"name":"condense_question_llm","show":false,"type":"BaseLanguageModel","l2_name":"condense_question_llm","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"return_source_documents":{"l2":false,"info":"","list":false,"name":"return_source_documents","show":true,"type":"bool","value":true,"l2_name":"return_source_documents","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Return source documents"},"condense_question_prompt":{"l2":false,"info":"","list":false,"name":"condense_question_prompt","show":true,"type":"BasePromptTemplate","value":{"_type":"prompt","template":"Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language.\n\nChat History:\n{chat_history}\nFollow Up Input: {question}\nStandalone question:","output_parser":null,"input_variables":["chat_history","question"],"template_format":"f-string","partial_variables":{},"validate_template":true},"l2_name":"condense_question_prompt","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"combine_docs_chain_kwargs":{"l2":false,"info":"","list":false,"name":"combine_docs_chain_kwargs","show":true,"type":"BasePromptTemplate","l2_name":"combine_docs_chain_kwargs","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"prompt"}},"description":"Convenience method to load chain from LLM and retriever.","base_classes":["BaseConversationalRetrievalChain","Chain","ConversationalRetrievalChain","function"],"display_name":"ConversationalRetrievalChain","output_types":[],"custom_fields":{},"documentation":"https://python.langchain.com/docs/modules/chains/popular/chat_vector_db"},"type":"ConversationalRetrievalChain","value":null},"selected":true,"positionAbsolute":{"x":-1547.0269680478611,"y":-543.0897871904267}},{"width":384,"height":526,"id":"ConversationBufferMemory-K1tss","type":"genericNode","position":{"x":-2419.6151156542605,"y":-708.8327872944353},"data":{"id":"ConversationBufferMemory-K1tss","node":{"template":{"_type":"ConversationBufferMemory","ai_prefix":{"l2":false,"info":"","list":false,"name":"ai_prefix","show":false,"type":"str","value":"AI","l2_name":"ai_prefix","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"input_key":{"l2":false,"info":"The variable to be used as Chat Input when more than one variable is available.","list":false,"name":"input_key","show":true,"type":"str","value":"","l2_name":"input_key","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"memory_key":{"l2":false,"info":"","list":false,"name":"memory_key","show":true,"type":"str","value":"chat_history","l2_name":"memory_key","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"output_key":{"l2":false,"info":"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)","list":false,"name":"output_key","show":true,"type":"str","value":"answer","l2_name":"output_key","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"chat_memory":{"l2":false,"info":"","list":false,"name":"chat_memory","show":true,"type":"BaseChatMessageHistory","l2_name":"chat_memory","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"human_prefix":{"l2":false,"info":"","list":false,"name":"human_prefix","show":false,"type":"str","value":"Human","l2_name":"human_prefix","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"return_messages":{"l2":false,"info":"","list":false,"name":"return_messages","show":true,"type":"bool","l2_name":"return_messages","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Buffer for storing conversation memory.","base_classes":["BaseMemory","ConversationBufferMemory","BaseChatMemory"],"display_name":"ConversationBufferMemory","output_types":[],"custom_fields":{},"documentation":"https://python.langchain.com/docs/modules/memory/how_to/buffer"},"type":"ConversationBufferMemory","value":null},"selected":true,"positionAbsolute":{"x":-2419.6151156542605,"y":-708.8327872944353}},{"width":384,"height":290,"id":"PromptTemplate-bs0vj","type":"genericNode","position":{"x":-2424.4899097749667,"y":-1236.9354837042674},"data":{"id":"PromptTemplate-bs0vj","node":{"name":"","template":{"_type":"PromptTemplate","template":{"l2":false,"info":"","list":false,"name":"template","show":true,"type":"prompt","value":"参考文本:\n{context}\n\n----------------------\n\n1.用中文回答用户问题,并且答案要严谨专业。\n2.你需要依据以上【参考文本】中的内容来回答,当【参考文本】中有明确与用户问题相关的内容时才进行回答,不可根据自己的知识来回答。\n3.由于【参考文本】可能包含多个来自不同信息源的信息,所以根据这些不同的信息源可能得出有差异甚至冲突的答案,当发现这种情况时,这些答案都列举出来;如果没有冲突或差异,则只需要给出一个最终结果。\n4.若【参考文本】中内容与用户问题不相关则回复“没有找到相关内容”。\n\n----------------------\n\n用户问题: {question}\n你的回答:","l2_name":"template","advanced":false,"password":false,"required":true,"multiline":true,"placeholder":""},"output_parser":{"l2":false,"info":"","list":false,"name":"output_parser","show":true,"type":"BaseOutputParser","l2_name":"output_parser","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"input_variables":{"l2":false,"info":"","list":true,"name":"input_variables","show":false,"type":"str","value":["context","question"],"l2_name":"input_variables","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"template_format":{"l2":false,"info":"","list":false,"name":"template_format","show":false,"type":"str","value":"f-string","l2_name":"template_format","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"partial_variables":{"l2":false,"info":"","list":false,"name":"partial_variables","show":false,"type":"code","l2_name":"partial_variables","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"validate_template":{"l2":false,"info":"","list":false,"name":"validate_template","show":false,"type":"bool","value":true,"l2_name":"validate_template","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Schema to represent a prompt for an LLM.","base_classes":["BasePromptTemplate","PromptTemplate","StringPromptTemplate"],"display_name":"PromptTemplate","output_types":[],"custom_fields":{"":["context","question"],"template":["context","question"]},"documentation":"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/","field_formatters":{"formatters":{"openai_api_key":{}},"base_formatters":{"dict":{},"list":{},"show":{},"union":{},"kwargs":{},"default":{},"headers":{},"optional":{},"password":{},"multiline":{},"model_fields":{"MODEL_DICT":{"OpenAI":["text-davinci-003","text-davinci-002","text-curie-001","text-babbage-001","text-ada-001"],"Anthropic":["claude-v1","claude-v1-100k","claude-instant-v1","claude-instant-v1-100k","claude-v1.3","claude-v1.3-100k","claude-v1.2","claude-v1.0","claude-instant-v1.1","claude-instant-v1.1-100k","claude-instant-v1.0"],"ChatOpenAI":["gpt-3.5-turbo-0613","gpt-3.5-turbo","gpt-3.5-turbo-16k-0613","gpt-3.5-turbo-16k","gpt-4-0613","gpt-4-32k-0613","gpt-4","gpt-4-32k"],"ChatAnthropic":["claude-v1","claude-v1-100k","claude-instant-v1","claude-instant-v1-100k","claude-v1.3","claude-v1.3-100k","claude-v1.2","claude-v1.0","claude-instant-v1.1","claude-instant-v1.1-100k","claude-instant-v1.0"]}},"dict_code_file":{}}}},"type":"PromptTemplate","value":null},"selected":true,"positionAbsolute":{"x":-2424.4899097749667,"y":-1236.9354837042674}}],"edges":[{"source":"Milvus-cyR5W","target":"MixEsVectorRetriever-J35CZ","sourceHandle":"Milvus|Milvus-cyR5W|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever","targetHandle":"BaseRetriever|vector_retriever|MixEsVectorRetriever-J35CZ","id":"reactflow__edge-Milvus-cyR5WMilvus|Milvus-cyR5W|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever-MixEsVectorRetriever-J35CZBaseRetriever|vector_retriever|MixEsVectorRetriever-J35CZ","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"ElasticKeywordsSearch-31Et9","target":"MixEsVectorRetriever-J35CZ","sourceHandle":"ElasticKeywordsSearch|ElasticKeywordsSearch-31Et9|VectorStore|ElasticKeywordsSearch|BaseRetriever|VectorStoreRetriever","targetHandle":"BaseRetriever|keyword_retriever|MixEsVectorRetriever-J35CZ","id":"reactflow__edge-ElasticKeywordsSearch-31Et9ElasticKeywordsSearch|ElasticKeywordsSearch-31Et9|VectorStore|ElasticKeywordsSearch|BaseRetriever|VectorStoreRetriever-MixEsVectorRetriever-J35CZBaseRetriever|keyword_retriever|MixEsVectorRetriever-J35CZ","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"MixEsVectorRetriever-J35CZ","target":"ConversationalRetrievalChain-SmY3w","sourceHandle":"MixEsVectorRetriever|MixEsVectorRetriever-J35CZ|BaseRetriever|MixEsVectorRetriever","targetHandle":"BaseRetriever|retriever|ConversationalRetrievalChain-SmY3w","id":"reactflow__edge-MixEsVectorRetriever-J35CZMixEsVectorRetriever|MixEsVectorRetriever-J35CZ|BaseRetriever|MixEsVectorRetriever-ConversationalRetrievalChain-SmY3wBaseRetriever|retriever|ConversationalRetrievalChain-SmY3w","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"ProxyChatLLM-UYoB4","target":"ConversationalRetrievalChain-SmY3w","sourceHandle":"ProxyChatLLM|ProxyChatLLM-UYoB4|ProxyChatLLM|BaseLanguageModel|BaseChatModel|BaseLLM","targetHandle":"BaseLanguageModel|llm|ConversationalRetrievalChain-SmY3w","id":"reactflow__edge-ProxyChatLLM-UYoB4ProxyChatLLM|ProxyChatLLM-UYoB4|ProxyChatLLM|BaseLanguageModel|BaseChatModel|BaseLLM-ConversationalRetrievalChain-SmY3wBaseLanguageModel|llm|ConversationalRetrievalChain-SmY3w","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"ConversationBufferMemory-K1tss","target":"ConversationalRetrievalChain-SmY3w","sourceHandle":"ConversationBufferMemory|ConversationBufferMemory-K1tss|BaseMemory|ConversationBufferMemory|BaseChatMemory","targetHandle":"BaseChatMemory|memory|ConversationalRetrievalChain-SmY3w","id":"reactflow__edge-ConversationBufferMemory-K1tssConversationBufferMemory|ConversationBufferMemory-K1tss|BaseMemory|ConversationBufferMemory|BaseChatMemory-ConversationalRetrievalChain-SmY3wBaseChatMemory|memory|ConversationalRetrievalChain-SmY3w","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"PromptTemplate-bs0vj","target":"ConversationalRetrievalChain-SmY3w","sourceHandle":"PromptTemplate|PromptTemplate-bs0vj|BasePromptTemplate|PromptTemplate|StringPromptTemplate","targetHandle":"BasePromptTemplate|combine_docs_chain_kwargs|ConversationalRetrievalChain-SmY3w","id":"reactflow__edge-PromptTemplate-bs0vjPromptTemplate|PromptTemplate-bs0vj|BasePromptTemplate|PromptTemplate|StringPromptTemplate-ConversationalRetrievalChain-SmY3wBasePromptTemplate|combine_docs_chain_kwargs|ConversationalRetrievalChain-SmY3w","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true}],"viewport":{"zoom":1,"x":0,"y":0}},"is_component":false,"name":"","description":"","id":"89297","status":0,"write":false,"guide_word":""}}}},{"知识库问答":{"id":"RetrievalQA-527fa","type":"RetrievalQA","node":{"output_types":[],"display_name":"知识库问答","documentation":"","base_classes":["RetrievalQA","Chain","BaseRetrievalQA","function"],"description":"Chain for question-answering against an index.","template":{"drop_old_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"drop_old","show":false,"type":"bool","value":false,"l2_name":"drop_old","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"drop_old"},"display_name":"Drop Old"},"documents_Milvus-CWpae":{"l2":false,"info":"","list":true,"name":"documents","show":true,"type":"Document","l2_name":"documents","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Documents","proxy":{"id":"Milvus-CWpae","field":"documents"}},"embedding_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"embedding","show":false,"type":"Embeddings","l2_name":"embedding","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Embedding","proxy":{"id":"Milvus-CWpae","field":"embedding"}},"metadatas_Milvus-CWpae":{"l2":false,"info":"","list":true,"name":"metadatas","show":false,"type":"code","l2_name":"metadatas","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"metadatas"},"display_name":"Metadatas"},"index_params_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"index_params","show":false,"type":"code","l2_name":"index_params","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"index_params"},"display_name":"Index Params"},"search_kwargs_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"search_kwargs","show":false,"type":"code","value":"{}","l2_name":"search_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"search_kwargs"},"display_name":"Search Kwargs"},"search_params_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"search_params","show":false,"type":"code","l2_name":"search_params","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"search_params"},"display_name":"Search Params"},"collection_name_Milvus-CWpae":{"l2":true,"info":"","list":false,"name":"collection_name","show":true,"type":"str","value":"毕昇文档20240309","l2_name":"选择知识库","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","collection_id":3520,"proxy":{"id":"Milvus-CWpae","field":"collection_name"},"display_name":"Collection Name"},"connection_args_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"connection_args","show":false,"type":"code","value":"","l2_name":"connection_args","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"connection_args"},"display_name":"Connection Args"},"consistency_level_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"consistency_level","show":false,"type":"str","value":"Session","l2_name":"consistency_level","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"consistency_level"},"display_name":"Consistency Level"},"tags_RetrievalQA-x5nap":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"tags"},"display_name":"Tags"},"memory_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"memory","show":true,"type":"BaseMemory","l2_name":"memory","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"memory"},"display_name":"Memory"},"verbose_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"verbose"},"display_name":"Verbose"},"metadata_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"metadata"},"display_name":"Metadata"},"callbacks_RetrievalQA-x5nap":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"callbacks"},"display_name":"Callbacks"},"input_key_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"input_key","show":true,"type":"str","value":"query","l2_name":"input_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"input_key"},"display_name":"Input Key"},"input_node_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"input_node","show":true,"type":"input","l2_name":"input_node","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Preset Question","proxy":{"id":"RetrievalQA-x5nap","field":"input_node"}},"output_key_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"output_key","show":true,"type":"str","value":"result","l2_name":"output_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"output_key"},"display_name":"Output Key"},"return_source_documents_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"return_source_documents","show":true,"type":"bool","value":true,"l2_name":"return_source_documents","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"return_source_documents"},"display_name":"Return Source Documents"},"n_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"n","show":false,"type":"int","value":1,"l2_name":"n","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"n"},"display_name":"N"},"tags_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"tags"},"display_name":"Tags"},"cache_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"cache","show":false,"type":"bool","l2_name":"cache","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"cache"},"display_name":"Cache"},"top_p_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"top_p","show":true,"type":"float","value":0.9,"l2_name":"top_p","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"top_p"},"display_name":"Top P"},"client_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"client","show":false,"type":"Any","l2_name":"client","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"client"},"display_name":"Client"},"headers_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"headers","show":false,"type":"code","value":"","l2_name":"headers","advanced":true,"password":false,"required":false,"multiline":true,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"headers"},"display_name":"Headers"},"verbose_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"verbose"},"display_name":"Verbose"},"metadata_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"metadata"},"display_name":"Metadata"},"callbacks_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"callbacks"},"display_name":"Callbacks"},"streaming_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"streaming","show":false,"type":"bool","value":false,"l2_name":"streaming","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"streaming"},"display_name":"Streaming"},"max_tokens_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"max_tokens","show":true,"type":"int","value":"","l2_name":"max_tokens","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"max_tokens"},"display_name":"Max Tokens"},"model_name_ProxyChatLLM-UYoB4":{"l2":true,"info":"","list":false,"name":"model_name","show":true,"type":"str","value":"gpt-3.5-turbo-16k-0613","l2_name":"填写模型名称(支持所有主流闭源模型)","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"model_name"},"display_name":"Model Name"},"max_retries_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"max_retries","show":false,"type":"int","value":6,"l2_name":"max_retries","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"max_retries"},"display_name":"Max Retries"},"temperature_ProxyChatLLM-UYoB4":{"l2":true,"info":"","list":false,"name":"temperature","show":true,"type":"float","value":0.7,"l2_name":"温度(控制输出随机性)","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"temperature"},"display_name":"Temperature"},"model_kwargs_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"model_kwargs","show":false,"type":"code","l2_name":"model_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"model_kwargs"},"display_name":"Model Kwargs"},"elemai_api_key_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"elemai_api_key","show":true,"type":"str","value":"","l2_name":"elemai_api_key","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"elemai_api_key"},"display_name":"Elemai Api Key"},"elemai_base_url_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"elemai_base_url","show":true,"type":"str","value":"http://192.168.106.12:6001/v1/chatcompletion","l2_name":"elemai_base_url","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"elemai_base_url"},"display_name":"Elemai Base Url"},"request_timeout_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"request_timeout","show":false,"type":"float","l2_name":"request_timeout","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"request_timeout"},"display_name":"Request Timeout"},"tiktoken_model_name_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"tiktoken_model_name","show":false,"type":"str","l2_name":"tiktoken_model_name","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"tiktoken_model_name"},"display_name":"Tiktoken Model Name"},"token_max_CombineDocsChain-71a85":{"info":"只对Stuff类型生效","list":false,"name":"token_max","show":true,"type":"int","value":-1,"advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"token_max","proxy":{"id":"CombineDocsChain-71a85","field":"token_max"}},"chain_type_CombineDocsChain-71a85":{"info":"","list":true,"name":"chain_type","show":true,"type":"str","value":"stuff","options":["stuff","map_reduce","map_rerank","refine"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"CombineDocsChain-71a85","field":"chain_type"},"display_name":"Chain Type"},"source_PromptTemplate-3c164":{"info":"","list":false,"name":"source","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser","VariableNode"],"placeholder":"","display_name":"source","proxy":{"id":"PromptTemplate-3c164","field":"source"}},"template_PromptTemplate-3c164":{"l2":false,"info":"","list":false,"name":"template","show":true,"type":"prompt","value":"title: {source}\n{page_content}\n----------------","l2_name":"提示词模板","advanced":false,"password":false,"required":true,"multiline":true,"placeholder":"","proxy":{"id":"PromptTemplate-3c164","field":"template"},"display_name":"Template"},"input_types_PromptTemplate-3c164":{"info":"","list":false,"name":"input_types","show":false,"type":"code","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-3c164","field":"input_types"},"display_name":"Input Types"},"page_content_PromptTemplate-3c164":{"info":"","list":false,"name":"page_content","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser","VariableNode"],"placeholder":"","display_name":"page_content","proxy":{"id":"PromptTemplate-3c164","field":"page_content"}},"output_parser_PromptTemplate-3c164":{"info":"","list":false,"name":"output_parser","show":true,"type":"BaseOutputParser","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-3c164","field":"output_parser"},"display_name":"Output Parser"},"input_variables_PromptTemplate-3c164":{"info":"","list":true,"name":"input_variables","show":false,"type":"str","value":["source","page_content"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-3c164","field":"input_variables"},"display_name":"Input Variables"},"template_format_PromptTemplate-3c164":{"info":"","list":false,"name":"template_format","show":false,"type":"Union[Literal['f-string'], Literal['jinja2']]","value":"f-string","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-3c164","field":"template_format"},"display_name":"Template Format"},"partial_variables_PromptTemplate-3c164":{"info":"","list":false,"name":"partial_variables","show":false,"type":"code","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-3c164","field":"partial_variables"},"display_name":"Partial Variables"},"validate_template_PromptTemplate-3c164":{"info":"","list":false,"name":"validate_template","show":false,"type":"bool","value":false,"advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-3c164","field":"validate_template"},"display_name":"Validate Template"},"context_PromptTemplate-ced29":{"info":"","list":false,"name":"context","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser","VariableNode"],"placeholder":"","display_name":"context","proxy":{"id":"PromptTemplate-ced29","field":"context"}},"question_PromptTemplate-ced29":{"info":"","list":false,"name":"question","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser","VariableNode"],"placeholder":"","display_name":"question","proxy":{"id":"PromptTemplate-ced29","field":"question"}},"template_PromptTemplate-ced29":{"l2":true,"info":"","list":false,"name":"template","show":true,"type":"prompt","value":"参考文本:\n{context}\n\n----------------------\n# Role:企业客服\n\n# Background :\n你是一家名叫XX公司的客服人员。你的日常工作是回复公司内用户的各类咨询问题,所以当用户提到“公司”时,指的是XX公司。\n\n# Goals:\n- 以上【参考文本】中是从企业知识库中查找到的相关信息,只能结合以上信息进行回答,若以上内容为空或其中没有找到能回答【用户问题】的内容时,则回复“没有找到相关内容”,不能根据你自己的知识自己发挥。\n- 特别要注意区分【用户问题】与【参考文本】中不同的日期、人名、公司名这些关键信息。\n- 用中文回答问题,并且答案要严谨、专业、清晰、可读性好。\n- 拥有排版审美, 会利用序号, 缩进, 分隔线和换行符等等来美化信息排版。\n\n----------------------\n\n用户问题: {question}\n你的回答:","l2_name":"提示词模板","advanced":false,"password":false,"required":true,"multiline":true,"placeholder":"","proxy":{"id":"PromptTemplate-ced29","field":"template"},"display_name":"Template"},"input_types_PromptTemplate-ced29":{"info":"","list":false,"name":"input_types","show":false,"type":"code","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-ced29","field":"input_types"},"display_name":"Input Types"},"output_parser_PromptTemplate-ced29":{"info":"","list":false,"name":"output_parser","show":true,"type":"BaseOutputParser","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-ced29","field":"output_parser"},"display_name":"Output Parser"},"input_variables_PromptTemplate-ced29":{"info":"","list":true,"name":"input_variables","show":false,"type":"str","value":["context","question"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-ced29","field":"input_variables"},"display_name":"Input Variables"},"template_format_PromptTemplate-ced29":{"info":"","list":false,"name":"template_format","show":false,"type":"Union[Literal['f-string'], Literal['jinja2']]","value":"f-string","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-ced29","field":"template_format"},"display_name":"Template Format"},"partial_variables_PromptTemplate-ced29":{"info":"","list":false,"name":"partial_variables","show":false,"type":"code","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-ced29","field":"partial_variables"},"display_name":"Partial Variables"},"validate_template_PromptTemplate-ced29":{"info":"","list":false,"name":"validate_template","show":false,"type":"bool","value":false,"advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-ced29","field":"validate_template"},"display_name":"Validate Template"}},"flow":{"data":{"nodes":[{"width":384,"height":310,"id":"Milvus-CWpae","type":"genericNode","position":{"x":-2861.8694801119937,"y":-286.57134522726807},"data":{"id":"Milvus-CWpae","node":{"l2_name":"知识库","template":{"_type":"Milvus","drop_old":{"l2":false,"info":"","list":false,"name":"drop_old","show":false,"type":"bool","value":false,"l2_name":"drop_old","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"documents":{"l2":false,"info":"","list":true,"name":"documents","show":true,"type":"Document","l2_name":"documents","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Documents"},"embedding":{"l2":false,"info":"","list":false,"name":"embedding","show":false,"type":"Embeddings","l2_name":"embedding","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Embedding"},"metadatas":{"l2":false,"info":"","list":true,"name":"metadatas","show":false,"type":"code","l2_name":"metadatas","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"index_params":{"l2":false,"info":"","list":false,"name":"index_params","show":false,"type":"code","l2_name":"index_params","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"search_kwargs":{"l2":false,"info":"","list":false,"name":"search_kwargs","show":true,"type":"code","value":"{}","l2_name":"search_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"search_params":{"l2":false,"info":"","list":false,"name":"search_params","show":false,"type":"code","l2_name":"search_params","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"collection_name":{"l2":true,"info":"","list":false,"name":"collection_name","show":true,"type":"str","value":"毕昇文档20240309","l2_name":"选择知识库","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","collection_id":3520},"connection_args":{"l2":false,"info":"","list":false,"name":"connection_args","show":true,"type":"code","value":"","l2_name":"connection_args","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"consistency_level":{"l2":false,"info":"","list":false,"name":"consistency_level","show":false,"type":"str","value":"Session","l2_name":"consistency_level","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Create a Milvus collection, indexes it with HNSW, and insert data.","base_classes":["Milvus","VectorStore","BaseRetriever","VectorStoreRetriever"],"display_name":"Milvus","output_types":[],"custom_fields":{},"documentation":"http://192.168.106.116:8030"},"type":"Milvus","value":null},"selected":true,"positionAbsolute":{"x":-2861.8694801119937,"y":-286.57134522726807}},{"width":384,"height":316,"id":"RetrievalQA-x5nap","type":"genericNode","position":{"x":-2198.289678633326,"y":-664.9918874506891},"data":{"id":"RetrievalQA-x5nap","node":{"template":{"tags":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"_type":"RetrievalQA","memory":{"l2":false,"info":"","list":false,"name":"memory","show":true,"type":"BaseMemory","l2_name":"memory","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"verbose":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"metadata":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"callbacks":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"input_key":{"l2":false,"info":"","list":false,"name":"input_key","show":true,"type":"str","value":"query","l2_name":"input_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":""},"retriever":{"l2":false,"info":"","list":false,"name":"retriever","show":true,"type":"BaseRetriever","l2_name":"retriever","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"input_node":{"l2":false,"info":"","list":false,"name":"input_node","show":true,"type":"input","l2_name":"input_node","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Preset Question"},"output_key":{"l2":false,"info":"","list":false,"name":"output_key","show":true,"type":"str","value":"result","l2_name":"output_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":""},"combine_documents_chain":{"l2":false,"info":"","list":false,"name":"combine_documents_chain","show":true,"type":"BaseCombineDocumentsChain","l2_name":"combine_documents_chain","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"return_source_documents":{"l2":false,"info":"","list":false,"name":"return_source_documents","show":true,"type":"bool","value":true,"l2_name":"return_source_documents","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Chain for question-answering against an index.","base_classes":["RetrievalQA","Chain","BaseRetrievalQA","function"],"display_name":"RetrievalQA","output_types":[],"custom_fields":{},"documentation":"https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"},"type":"RetrievalQA","value":null},"selected":true,"positionAbsolute":{"x":-2198.289678633326,"y":-664.9918874506891}},{"width":384,"height":500,"id":"ProxyChatLLM-UYoB4","type":"genericNode","position":{"x":-3490.7895099718235,"y":-440.7836760027338},"data":{"id":"ProxyChatLLM-UYoB4","node":{"l2_name":"模型配置","template":{"n":{"l2":false,"info":"","list":false,"name":"n","show":false,"type":"int","value":1,"l2_name":"n","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"tags":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"_type":"ProxyChatLLM","cache":{"l2":false,"info":"","list":false,"name":"cache","show":false,"type":"bool","l2_name":"cache","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"top_p":{"l2":false,"info":"","list":false,"name":"top_p","show":true,"type":"float","value":0.9,"l2_name":"top_p","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"client":{"l2":false,"info":"","list":false,"name":"client","show":false,"type":"Any","l2_name":"client","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"headers":{"l2":false,"info":"","list":false,"name":"headers","show":false,"type":"code","value":"","l2_name":"headers","advanced":false,"password":false,"required":false,"multiline":true,"placeholder":""},"verbose":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"l2_name":"verbose","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"metadata":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"callbacks":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"streaming":{"l2":false,"info":"","list":false,"name":"streaming","show":false,"type":"bool","value":false,"l2_name":"streaming","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"max_tokens":{"l2":false,"info":"","list":false,"name":"max_tokens","show":true,"type":"int","value":"","l2_name":"max_tokens","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":""},"model_name":{"l2":true,"info":"","list":false,"name":"model_name","show":true,"type":"str","value":"gpt-3.5-turbo-16k-0613","l2_name":"填写模型名称(支持所有主流闭源模型)","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"max_retries":{"l2":false,"info":"","list":false,"name":"max_retries","show":false,"type":"int","value":6,"l2_name":"max_retries","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"temperature":{"l2":true,"info":"","list":false,"name":"temperature","show":true,"type":"float","value":0.7,"l2_name":"温度(控制输出随机性)","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"model_kwargs":{"l2":false,"info":"","list":false,"name":"model_kwargs","show":true,"type":"code","l2_name":"model_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"elemai_api_key":{"l2":false,"info":"","list":false,"name":"elemai_api_key","show":true,"type":"str","value":"","l2_name":"elemai_api_key","advanced":false,"password":true,"required":false,"multiline":false,"placeholder":""},"elemai_base_url":{"l2":false,"info":"","list":false,"name":"elemai_base_url","show":true,"type":"str","value":"http://192.168.106.12:6001/v1/chatcompletion","l2_name":"elemai_base_url","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"request_timeout":{"l2":false,"info":"","list":false,"name":"request_timeout","show":false,"type":"float","l2_name":"request_timeout","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"tiktoken_model_name":{"l2":false,"info":"","list":false,"name":"tiktoken_model_name","show":false,"type":"str","l2_name":"tiktoken_model_name","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Wrapper around proxy Chat large language models.","base_classes":["ProxyChatLLM","BaseLanguageModel","BaseChatModel","BaseLLM"],"display_name":"ProxyChatLLM","output_types":[],"custom_fields":{},"documentation":""},"type":"ProxyChatLLM","value":null},"selected":true,"positionAbsolute":{"x":-3490.7895099718235,"y":-440.7836760027338}},{"width":384,"height":448,"id":"CombineDocsChain-71a85","type":"genericNode","position":{"x":-2872.4473624642733,"y":-941.8372718902958},"data":{"id":"CombineDocsChain-71a85","node":{"template":{"llm":{"info":"","list":false,"name":"llm","show":true,"type":"BaseLanguageModel","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"LLM"},"_type":"load_qa_chain","prompt":{"info":"只对Stuff类型生效","list":false,"name":"prompt","show":true,"type":"BasePromptTemplate","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"prompt"},"token_max":{"info":"只对Stuff类型生效","list":false,"name":"token_max","show":true,"type":"int","value":-1,"advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"token_max"},"chain_type":{"info":"","list":true,"name":"chain_type","show":true,"type":"str","value":"stuff","options":["stuff","map_reduce","map_rerank","refine"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"document_prompt":{"info":"","list":false,"name":"document_prompt","show":true,"type":"BasePromptTemplate","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Load question answering chain.","base_classes":["BaseCombineDocumentsChain","function"],"display_name":"CombineDocsChain","output_types":[],"custom_fields":{},"documentation":""},"type":"CombineDocsChain","value":null},"selected":true,"positionAbsolute":{"x":-2872.4473624642733,"y":-941.8372718902958}},{"width":384,"height":454,"id":"PromptTemplate-3c164","type":"genericNode","position":{"x":-3470.0105149154433,"y":-1425.3602052103988},"data":{"id":"PromptTemplate-3c164","node":{"name":"","l2_name":"召回段落拼接提示词","template":{"_type":"PromptTemplate","source":{"info":"","list":false,"name":"source","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser","VariableNode"],"placeholder":"","display_name":"source"},"template":{"l2":false,"info":"","list":false,"name":"template","show":true,"type":"prompt","value":"title: {source}\n{page_content}\n----------------","l2_name":"提示词模板","advanced":false,"password":false,"required":true,"multiline":true,"placeholder":""},"input_types":{"info":"","list":false,"name":"input_types","show":false,"type":"code","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"page_content":{"info":"","list":false,"name":"page_content","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser","VariableNode"],"placeholder":"","display_name":"page_content"},"output_parser":{"info":"","list":false,"name":"output_parser","show":true,"type":"BaseOutputParser","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"input_variables":{"info":"","list":true,"name":"input_variables","show":false,"type":"str","value":["source","page_content"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"template_format":{"info":"","list":false,"name":"template_format","show":false,"type":"Union[Literal['f-string'], Literal['jinja2']]","value":"f-string","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"partial_variables":{"info":"","list":false,"name":"partial_variables","show":false,"type":"code","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"validate_template":{"info":"","list":false,"name":"validate_template","show":false,"type":"bool","value":false,"advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"A prompt template for a language model.","base_classes":["Runnable","StringPromptTemplate","RunnableSerializable","PromptTemplate","Generic","BasePromptTemplate"],"display_name":"PromptTemplate","output_types":[],"custom_fields":{"":["source","page_content"]},"documentation":"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/","field_formatters":{}},"type":"PromptTemplate","value":null},"selected":true,"positionAbsolute":{"x":-3470.0105149154433,"y":-1425.3602052103988}},{"width":384,"height":454,"id":"PromptTemplate-ced29","type":"genericNode","position":{"x":-3479.600564127818,"y":-925.8998699556519},"data":{"id":"PromptTemplate-ced29","node":{"name":"","l2_name":"大模型问答提示词","template":{"_type":"PromptTemplate","context":{"info":"","list":false,"name":"context","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser","VariableNode"],"placeholder":"","display_name":"context"},"question":{"info":"","list":false,"name":"question","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser","VariableNode"],"placeholder":"","display_name":"question"},"template":{"l2":true,"info":"","list":false,"name":"template","show":true,"type":"prompt","value":"参考文本:\n{context}\n\n----------------------\n# Role:企业客服\n\n# Background :\n你是一家名叫XX公司的客服人员。你的日常工作是回复公司内用户的各类咨询问题,所以当用户提到“公司”时,指的是XX公司。\n\n# Goals:\n- 以上【参考文本】中是从企业知识库中查找到的相关信息,只能结合以上信息进行回答,若以上内容为空或其中没有找到能回答【用户问题】的内容时,则回复“没有找到相关内容”,不能根据你自己的知识自己发挥。\n- 特别要注意区分【用户问题】与【参考文本】中不同的日期、人名、公司名这些关键信息。\n- 用中文回答问题,并且答案要严谨、专业、清晰、可读性好。\n- 拥有排版审美, 会利用序号, 缩进, 分隔线和换行符等等来美化信息排版。\n\n----------------------\n\n用户问题: {question}\n你的回答:","l2_name":"提示词模板","advanced":false,"password":false,"required":true,"multiline":true,"placeholder":""},"input_types":{"info":"","list":false,"name":"input_types","show":false,"type":"code","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"output_parser":{"info":"","list":false,"name":"output_parser","show":true,"type":"BaseOutputParser","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"input_variables":{"info":"","list":true,"name":"input_variables","show":false,"type":"str","value":["context","question"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"template_format":{"info":"","list":false,"name":"template_format","show":false,"type":"Union[Literal['f-string'], Literal['jinja2']]","value":"f-string","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"partial_variables":{"info":"","list":false,"name":"partial_variables","show":false,"type":"code","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"validate_template":{"info":"","list":false,"name":"validate_template","show":false,"type":"bool","value":false,"advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"A prompt template for a language model.","base_classes":["Runnable","StringPromptTemplate","RunnableSerializable","PromptTemplate","Generic","BasePromptTemplate"],"display_name":"PromptTemplate","output_types":[],"custom_fields":{"":["context","question"]},"documentation":"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/","field_formatters":{}},"type":"PromptTemplate","value":null},"selected":true,"positionAbsolute":{"x":-3479.600564127818,"y":-925.8998699556519}}],"edges":[{"source":"Milvus-CWpae","target":"RetrievalQA-x5nap","sourceHandle":"Milvus|Milvus-CWpae|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever","targetHandle":"BaseRetriever|retriever|RetrievalQA-x5nap","id":"reactflow__edge-Milvus-CWpaeMilvus|Milvus-CWpae|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever-RetrievalQA-x5napBaseRetriever|retriever|RetrievalQA-x5nap","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"ProxyChatLLM-UYoB4","target":"CombineDocsChain-71a85","sourceHandle":"ProxyChatLLM|ProxyChatLLM-UYoB4|ProxyChatLLM|BaseLanguageModel|BaseChatModel|BaseLLM","targetHandle":"BaseLanguageModel|llm|CombineDocsChain-71a85","id":"reactflow__edge-ProxyChatLLM-UYoB4ProxyChatLLM|ProxyChatLLM-UYoB4|ProxyChatLLM|BaseLanguageModel|BaseChatModel|BaseLLM-CombineDocsChain-71a85BaseLanguageModel|llm|CombineDocsChain-71a85","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"CombineDocsChain-71a85","target":"RetrievalQA-x5nap","sourceHandle":"CombineDocsChain|CombineDocsChain-71a85|BaseCombineDocumentsChain|function","targetHandle":"BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap","id":"reactflow__edge-CombineDocsChain-71a85CombineDocsChain|CombineDocsChain-71a85|BaseCombineDocumentsChain|function-RetrievalQA-x5napBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"PromptTemplate-3c164","target":"CombineDocsChain-71a85","sourceHandle":"PromptTemplate|PromptTemplate-3c164|Runnable|StringPromptTemplate|RunnableSerializable|PromptTemplate|Generic|BasePromptTemplate","targetHandle":"BasePromptTemplate|document_prompt|CombineDocsChain-71a85","id":"reactflow__edge-PromptTemplate-3c164PromptTemplate|PromptTemplate-3c164|Runnable|StringPromptTemplate|RunnableSerializable|PromptTemplate|Generic|BasePromptTemplate-CombineDocsChain-71a85BasePromptTemplate|document_prompt|CombineDocsChain-71a85","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"PromptTemplate-ced29","target":"CombineDocsChain-71a85","sourceHandle":"PromptTemplate|PromptTemplate-ced29|Runnable|StringPromptTemplate|RunnableSerializable|PromptTemplate|Generic|BasePromptTemplate","targetHandle":"BasePromptTemplate|prompt|CombineDocsChain-71a85","id":"reactflow__edge-PromptTemplate-ced29PromptTemplate|PromptTemplate-ced29|Runnable|StringPromptTemplate|RunnableSerializable|PromptTemplate|Generic|BasePromptTemplate-CombineDocsChain-71a85BasePromptTemplate|prompt|CombineDocsChain-71a85","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true}],"viewport":{"zoom":1,"x":0,"y":0}},"is_component":false,"name":"","description":"","id":"72f43","status":0,"write":false,"guide_word":""}}}},{"表格数据问答":{"id":"RetrievalQA-c61ba","type":"InputFileNode","node":{"output_types":[],"display_name":"表格数据问答","documentation":"","base_classes":["RetrievalQA","Chain","BaseRetrievalQA","function"],"description":"Chain for question-answering against an index.","template":{"token_max_CombineDocsChain-RCPNA":{"l2":false,"info":"当前只对stuff 生效","list":false,"name":"token_max","show":true,"type":"int","value":-1,"l2_name":"token_max","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"token_max","proxy":{"id":"CombineDocsChain-RCPNA","field":"token_max"}},"chain_type_CombineDocsChain-RCPNA":{"l2":false,"info":"","list":true,"name":"chain_type","show":true,"type":"str","value":"stuff","l2_name":"chain_type","options":["stuff","map_reduce","map_rerank","refine"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"CombineDocsChain-RCPNA","field":"chain_type"},"display_name":"Chain Type"},"drop_old_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"drop_old","show":false,"type":"bool","value":false,"l2_name":"drop_old","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"drop_old"},"display_name":"Drop Old"},"metadatas_Milvus-CWpae":{"l2":false,"info":"","list":true,"name":"metadatas","show":false,"type":"code","l2_name":"metadatas","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"metadatas"},"display_name":"Metadatas"},"index_params_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"index_params","show":false,"type":"code","l2_name":"index_params","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"index_params"},"display_name":"Index Params"},"search_kwargs_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"search_kwargs","show":false,"type":"code","value":"{}","l2_name":"search_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"search_kwargs"},"display_name":"Search Kwargs"},"search_params_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"search_params","show":false,"type":"code","l2_name":"search_params","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"search_params"},"display_name":"Search Params"},"collection_name_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"collection_name","show":true,"type":"str","value":"","l2_name":"选择知识库","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","collection_id":"","proxy":{"id":"Milvus-CWpae","field":"collection_name"},"display_name":"Collection Name"},"connection_args_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"connection_args","show":false,"type":"code","value":"","l2_name":"connection_args","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"connection_args"},"display_name":"Connection Args"},"consistency_level_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"consistency_level","show":false,"type":"str","value":"Session","l2_name":"consistency_level","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"consistency_level"},"display_name":"Consistency Level"},"tags_RetrievalQA-x5nap":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"tags"},"display_name":"Tags"},"memory_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"memory","show":true,"type":"BaseMemory","l2_name":"memory","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"memory"},"display_name":"Memory"},"verbose_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"verbose"},"display_name":"Verbose"},"metadata_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"metadata"},"display_name":"Metadata"},"callbacks_RetrievalQA-x5nap":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"callbacks"},"display_name":"Callbacks"},"input_key_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"input_key","show":true,"type":"str","value":"query","l2_name":"input_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"input_key"},"display_name":"Input Key"},"input_node_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"input_node","show":true,"type":"input","l2_name":"input_node","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Preset Question","proxy":{"id":"RetrievalQA-x5nap","field":"input_node"}},"output_key_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"output_key","show":true,"type":"str","value":"result","l2_name":"output_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"output_key"},"display_name":"Output Key"},"return_source_documents_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"return_source_documents","show":true,"type":"bool","value":true,"l2_name":"return_source_documents","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"return_source_documents"},"display_name":"Return Source Documents"},"n_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"n","show":false,"type":"int","value":1,"l2_name":"n","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"n"},"display_name":"N"},"tags_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"tags"},"display_name":"Tags"},"cache_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"cache","show":false,"type":"bool","l2_name":"cache","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"cache"},"display_name":"Cache"},"top_p_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"top_p","show":true,"type":"float","value":0.9,"l2_name":"top_p","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"top_p"},"display_name":"Top P"},"client_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"client","show":false,"type":"Any","l2_name":"client","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"client"},"display_name":"Client"},"headers_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"headers","show":false,"type":"code","value":"","l2_name":"headers","advanced":true,"password":false,"required":false,"multiline":true,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"headers"},"display_name":"Headers"},"verbose_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"verbose"},"display_name":"Verbose"},"metadata_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"metadata"},"display_name":"Metadata"},"callbacks_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"callbacks"},"display_name":"Callbacks"},"streaming_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"streaming","show":false,"type":"bool","value":false,"l2_name":"streaming","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"streaming"},"display_name":"Streaming"},"max_tokens_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"max_tokens","show":true,"type":"int","value":"","l2_name":"max_tokens","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"max_tokens"},"display_name":"Max Tokens"},"model_name_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"model_name","show":true,"type":"str","value":"gpt-4","l2_name":"model_name","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"model_name"},"display_name":"Model Name"},"max_retries_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"max_retries","show":false,"type":"int","value":6,"l2_name":"max_retries","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"max_retries"},"display_name":"Max Retries"},"temperature_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"temperature","show":true,"type":"float","value":0.7,"l2_name":"temperature","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"temperature"},"display_name":"Temperature"},"model_kwargs_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"model_kwargs","show":false,"type":"code","l2_name":"model_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"model_kwargs"},"display_name":"Model Kwargs"},"elemai_api_key_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"elemai_api_key","show":true,"type":"str","value":"","l2_name":"elemai_api_key","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"elemai_api_key"},"display_name":"Elemai Api Key"},"elemai_base_url_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"elemai_base_url","show":true,"type":"str","value":"http://192.168.106.12:6001/v1/chatcompletion","l2_name":"elemai_base_url","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"elemai_base_url"},"display_name":"Elemai Base Url"},"request_timeout_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"request_timeout","show":false,"type":"float","l2_name":"request_timeout","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"request_timeout"},"display_name":"Request Timeout"},"tiktoken_model_name_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"tiktoken_model_name","show":false,"type":"str","l2_name":"tiktoken_model_name","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"tiktoken_model_name"},"display_name":"Tiktoken Model Name"},"proxy_url_OpenAIProxyEmbedding-1771b":{"info":"","list":false,"name":"proxy_url","show":false,"type":"str","value":"","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"http://43.133.35.137:8080","proxy":{"id":"OpenAIProxyEmbedding-1771b","field":"proxy_url"},"display_name":"Proxy Url"},"metadata_CSVLoader-854c0":{"info":"","list":false,"name":"metadata","show":false,"type":"code","value":"{}","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Metadata","proxy":{"id":"CSVLoader-854c0","field":"metadata"}},"file_path_InputFileNode-e4363":{"info":"","list":false,"name":"file_path","show":true,"type":"file","value":"","advanced":true,"password":false,"required":false,"suffixes":[".csv"],"fileTypes":["csv"],"file_path":null,"multiline":false,"placeholder":"","proxy":{"id":"InputFileNode-e4363","field":"file_path"},"display_name":"File Path"},"file_type_InputFileNode-e4363":{"info":"Tips for which file should upload","list":false,"name":"file_type","show":true,"type":"str","value":"CSV文件","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"提示上传文件类型","display_name":"Name","proxy":{"id":"InputFileNode-e4363","field":"file_type"}}},"flow":{"data":{"nodes":[{"width":384,"height":376,"id":"CombineDocsChain-RCPNA","type":"genericNode","position":{"x":1039.4135881298942,"y":116.97346377366182},"data":{"id":"CombineDocsChain-RCPNA","node":{"template":{"llm":{"l2":false,"info":"","list":false,"name":"llm","show":true,"type":"BaseLanguageModel","l2_name":"llm","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"LLM"},"_type":"load_qa_chain","token_max":{"l2":false,"info":"当前只对stuff 生效","list":false,"name":"token_max","show":true,"type":"int","value":-1,"l2_name":"token_max","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"token_max"},"chain_type":{"l2":false,"info":"","list":true,"name":"chain_type","show":true,"type":"str","value":"stuff","l2_name":"chain_type","options":["stuff","map_reduce","map_rerank","refine"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""}},"description":"Load question answering chain.","base_classes":["BaseCombineDocumentsChain","function"],"display_name":"CombineDocsChain","output_types":[],"custom_fields":{},"documentation":""},"type":"CombineDocsChain","value":null},"selected":true,"positionAbsolute":{"x":1039.4135881298942,"y":116.97346377366182}},{"width":384,"height":346,"id":"Milvus-CWpae","type":"genericNode","position":{"x":1052.1050968084205,"y":659.5536672641022},"data":{"id":"Milvus-CWpae","node":{"l2_name":"知识库","template":{"_type":"Milvus","drop_old":{"l2":false,"info":"","list":false,"name":"drop_old","show":false,"type":"bool","value":false,"l2_name":"drop_old","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"documents":{"l2":false,"info":"","list":true,"name":"documents","show":true,"type":"Document","l2_name":"documents","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Documents"},"embedding":{"l2":false,"info":"","list":false,"name":"embedding","show":true,"type":"Embeddings","l2_name":"embedding","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Embedding"},"metadatas":{"l2":false,"info":"","list":true,"name":"metadatas","show":false,"type":"code","l2_name":"metadatas","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"index_params":{"l2":false,"info":"","list":false,"name":"index_params","show":false,"type":"code","l2_name":"index_params","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"search_kwargs":{"l2":false,"info":"","list":false,"name":"search_kwargs","show":true,"type":"code","value":"{}","l2_name":"search_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"search_params":{"l2":false,"info":"","list":false,"name":"search_params","show":false,"type":"code","l2_name":"search_params","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"collection_name":{"l2":false,"info":"","list":false,"name":"collection_name","show":true,"type":"str","value":"","l2_name":"选择知识库","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","collection_id":""},"connection_args":{"l2":false,"info":"","list":false,"name":"connection_args","show":true,"type":"code","value":"","l2_name":"connection_args","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"consistency_level":{"l2":false,"info":"","list":false,"name":"consistency_level","show":false,"type":"str","value":"Session","l2_name":"consistency_level","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Create a Milvus collection, indexes it with HNSW, and insert data.","base_classes":["Milvus","VectorStore","BaseRetriever","VectorStoreRetriever"],"display_name":"Milvus","output_types":[],"custom_fields":{},"documentation":"http://192.168.106.116:8030"},"type":"Milvus","value":null},"selected":true,"positionAbsolute":{"x":1052.1050968084205,"y":659.5536672641022}},{"width":384,"height":316,"id":"RetrievalQA-x5nap","type":"genericNode","position":{"x":1715.6848982870883,"y":279.846110701463},"data":{"id":"RetrievalQA-x5nap","node":{"template":{"tags":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"_type":"RetrievalQA","memory":{"l2":false,"info":"","list":false,"name":"memory","show":true,"type":"BaseMemory","l2_name":"memory","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"verbose":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"metadata":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"callbacks":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"input_key":{"l2":false,"info":"","list":false,"name":"input_key","show":true,"type":"str","value":"query","l2_name":"input_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":""},"retriever":{"l2":false,"info":"","list":false,"name":"retriever","show":true,"type":"BaseRetriever","l2_name":"retriever","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"input_node":{"l2":false,"info":"","list":false,"name":"input_node","show":true,"type":"input","l2_name":"input_node","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Preset Question"},"output_key":{"l2":false,"info":"","list":false,"name":"output_key","show":true,"type":"str","value":"result","l2_name":"output_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":""},"combine_documents_chain":{"l2":false,"info":"","list":false,"name":"combine_documents_chain","show":true,"type":"BaseCombineDocumentsChain","l2_name":"combine_documents_chain","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"return_source_documents":{"l2":false,"info":"","list":false,"name":"return_source_documents","show":true,"type":"bool","value":true,"l2_name":"return_source_documents","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Chain for question-answering against an index.","base_classes":["RetrievalQA","Chain","BaseRetrievalQA","function"],"display_name":"RetrievalQA","output_types":[],"custom_fields":{},"documentation":"https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"},"type":"RetrievalQA","value":null},"selected":true,"positionAbsolute":{"x":1715.6848982870883,"y":279.846110701463}},{"width":384,"height":500,"id":"ProxyChatLLM-UYoB4","type":"genericNode","position":{"x":437.5688719308881,"y":20},"data":{"id":"ProxyChatLLM-UYoB4","node":{"template":{"n":{"l2":false,"info":"","list":false,"name":"n","show":false,"type":"int","value":1,"l2_name":"n","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"tags":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"_type":"ProxyChatLLM","cache":{"l2":false,"info":"","list":false,"name":"cache","show":false,"type":"bool","l2_name":"cache","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"top_p":{"l2":false,"info":"","list":false,"name":"top_p","show":true,"type":"float","value":0.9,"l2_name":"top_p","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"client":{"l2":false,"info":"","list":false,"name":"client","show":false,"type":"Any","l2_name":"client","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"headers":{"l2":false,"info":"","list":false,"name":"headers","show":false,"type":"code","value":"","l2_name":"headers","advanced":false,"password":false,"required":false,"multiline":true,"placeholder":""},"verbose":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"l2_name":"verbose","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"metadata":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"callbacks":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"streaming":{"l2":false,"info":"","list":false,"name":"streaming","show":false,"type":"bool","value":false,"l2_name":"streaming","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"max_tokens":{"l2":false,"info":"","list":false,"name":"max_tokens","show":true,"type":"int","value":"","l2_name":"max_tokens","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":""},"model_name":{"l2":false,"info":"","list":false,"name":"model_name","show":true,"type":"str","value":"gpt-4","l2_name":"model_name","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"max_retries":{"l2":false,"info":"","list":false,"name":"max_retries","show":false,"type":"int","value":6,"l2_name":"max_retries","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"temperature":{"l2":false,"info":"","list":false,"name":"temperature","show":true,"type":"float","value":0.7,"l2_name":"temperature","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"model_kwargs":{"l2":false,"info":"","list":false,"name":"model_kwargs","show":true,"type":"code","l2_name":"model_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"elemai_api_key":{"l2":false,"info":"","list":false,"name":"elemai_api_key","show":true,"type":"str","value":"","l2_name":"elemai_api_key","advanced":false,"password":true,"required":false,"multiline":false,"placeholder":""},"elemai_base_url":{"l2":false,"info":"","list":false,"name":"elemai_base_url","show":true,"type":"str","value":"http://192.168.106.12:6001/v1/chatcompletion","l2_name":"elemai_base_url","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"request_timeout":{"l2":false,"info":"","list":false,"name":"request_timeout","show":false,"type":"float","l2_name":"request_timeout","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"tiktoken_model_name":{"l2":false,"info":"","list":false,"name":"tiktoken_model_name","show":false,"type":"str","l2_name":"tiktoken_model_name","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Wrapper around proxy Chat large language models.","base_classes":["ProxyChatLLM","BaseLanguageModel","BaseChatModel","BaseLLM"],"display_name":"ProxyChatLLM","output_types":[],"custom_fields":{},"documentation":""},"type":"ProxyChatLLM","value":null},"selected":true,"positionAbsolute":{"x":437.5688719308881,"y":20}},{"width":384,"height":172,"id":"OpenAIProxyEmbedding-1771b","type":"genericNode","position":{"x":540.1525954325598,"y":1040.7357784004414},"data":{"id":"OpenAIProxyEmbedding-1771b","node":{"template":{"_type":"proxy_embedding","proxy_url":{"info":"","list":false,"name":"proxy_url","show":false,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"http://43.133.35.137:8080"}},"description":" 使用自建的embedding服务使用openai进行embed ","base_classes":["Embeddings"],"display_name":"OpenAIProxyEmbedding","output_types":[],"custom_fields":{},"documentation":""},"type":"OpenAIProxyEmbedding","value":null},"selected":true,"positionAbsolute":{"x":540.1525954325598,"y":1040.7357784004414}},{"width":384,"height":290,"id":"CSVLoader-854c0","type":"genericNode","position":{"x":521.107515963895,"y":664.4805878718827},"data":{"id":"CSVLoader-854c0","node":{"template":{"_type":"CSVLoader","metadata":{"info":"","list":false,"name":"metadata","show":true,"type":"code","value":"{}","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Metadata"},"file_path":{"info":"","list":false,"name":"file_path","show":true,"type":"fileNode","value":"","advanced":false,"password":false,"required":false,"suffixes":[".csv"],"fileTypes":["csv"],"multiline":false,"placeholder":""}},"description":"Load a `CSV` file into a list of Documents.","base_classes":["Document"],"display_name":"CSVLoader","output_types":["Document"],"custom_fields":{},"documentation":"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv"},"type":"CSVLoader","value":null},"selected":true,"positionAbsolute":{"x":521.107515963895,"y":664.4805878718827}},{"width":384,"height":336,"id":"InputFileNode-e4363","type":"genericNode","position":{"x":18,"y":635.9129686688856},"data":{"id":"InputFileNode-e4363","node":{"template":{"_type":"InputFileNode","file_path":{"info":"","list":false,"name":"file_path","show":true,"type":"file","value":"","advanced":false,"password":false,"required":false,"suffixes":[".csv"],"fileTypes":["csv"],"file_path":null,"multiline":false,"placeholder":""},"file_type":{"info":"Tips for which file should upload","list":false,"name":"file_type","show":true,"type":"str","value":"CSV文件","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"提示上传文件类型","display_name":"Name"}},"description":"输入节点,用来自动对接输入","base_classes":["fileNode"],"display_name":"InputFileNode","output_types":[],"custom_fields":{},"documentation":""},"type":"InputFileNode","value":null},"selected":true,"positionAbsolute":{"x":18,"y":635.9129686688856}}],"edges":[{"source":"CombineDocsChain-RCPNA","target":"RetrievalQA-x5nap","sourceHandle":"CombineDocsChain|CombineDocsChain-RCPNA|BaseCombineDocumentsChain|function","targetHandle":"BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap","id":"reactflow__edge-CombineDocsChain-RCPNACombineDocsChain|CombineDocsChain-RCPNA|BaseCombineDocumentsChain|function-RetrievalQA-x5napBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"Milvus-CWpae","target":"RetrievalQA-x5nap","sourceHandle":"Milvus|Milvus-CWpae|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever","targetHandle":"BaseRetriever|retriever|RetrievalQA-x5nap","id":"reactflow__edge-Milvus-CWpaeMilvus|Milvus-CWpae|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever-RetrievalQA-x5napBaseRetriever|retriever|RetrievalQA-x5nap","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"ProxyChatLLM-UYoB4","target":"CombineDocsChain-RCPNA","sourceHandle":"ProxyChatLLM|ProxyChatLLM-UYoB4|ProxyChatLLM|BaseLanguageModel|BaseChatModel|BaseLLM","targetHandle":"BaseLanguageModel|llm|CombineDocsChain-RCPNA","id":"reactflow__edge-ProxyChatLLM-UYoB4ProxyChatLLM|ProxyChatLLM-UYoB4|ProxyChatLLM|BaseLanguageModel|BaseChatModel|BaseLLM-CombineDocsChain-RCPNABaseLanguageModel|llm|CombineDocsChain-RCPNA","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"OpenAIProxyEmbedding-1771b","target":"Milvus-CWpae","sourceHandle":"OpenAIProxyEmbedding|OpenAIProxyEmbedding-1771b|Embeddings","targetHandle":"Embeddings|embedding|Milvus-CWpae","id":"reactflow__edge-OpenAIProxyEmbedding-1771bOpenAIProxyEmbedding|OpenAIProxyEmbedding-1771b|Embeddings-Milvus-CWpaeEmbeddings|embedding|Milvus-CWpae","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"CSVLoader-854c0","target":"Milvus-CWpae","sourceHandle":"CSVLoader|CSVLoader-854c0|Document","targetHandle":"Document|documents|Milvus-CWpae","id":"reactflow__edge-CSVLoader-854c0CSVLoader|CSVLoader-854c0|Document-Milvus-CWpaeDocument|documents|Milvus-CWpae","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"InputFileNode-e4363","target":"CSVLoader-854c0","sourceHandle":"InputFileNode|InputFileNode-e4363|fileNode","targetHandle":"fileNode|file_path|CSVLoader-854c0","id":"reactflow__edge-InputFileNode-e4363InputFileNode|InputFileNode-e4363|fileNode-CSVLoader-854c0fileNode|file_path|CSVLoader-854c0","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true}],"viewport":{"zoom":1,"x":0,"y":0}},"is_component":false,"name":"","description":"","id":"7db0b","status":0,"write":false,"guide_word":""}}}},{"输入网址进行问答":{"id":"RetrievalQA-731c5","type":"RetrievalQA","node":{"output_types":[],"display_name":"输入网址进行问答","documentation":"","base_classes":["RetrievalQA","Chain","BaseRetrievalQA","function"],"description":"Chain for question-answering against an index.","template":{"token_max_CombineDocsChain-RCPNA":{"l2":false,"info":"当前只对stuff 生效","list":false,"name":"token_max","show":true,"type":"int","value":-1,"l2_name":"token_max","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"token_max","proxy":{"id":"CombineDocsChain-RCPNA","field":"token_max"}},"chain_type_CombineDocsChain-RCPNA":{"l2":false,"info":"","list":true,"name":"chain_type","show":true,"type":"str","value":"stuff","l2_name":"chain_type","options":["stuff","map_reduce","map_rerank","refine"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"CombineDocsChain-RCPNA","field":"chain_type"},"display_name":"Chain Type"},"drop_old_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"drop_old","show":false,"type":"bool","value":false,"l2_name":"drop_old","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"drop_old"},"display_name":"Drop Old"},"metadatas_Milvus-CWpae":{"l2":false,"info":"","list":true,"name":"metadatas","show":false,"type":"code","l2_name":"metadatas","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"metadatas"},"display_name":"Metadatas"},"index_params_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"index_params","show":false,"type":"code","l2_name":"index_params","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"index_params"},"display_name":"Index Params"},"search_kwargs_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"search_kwargs","show":false,"type":"code","value":"{}","l2_name":"search_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"search_kwargs"},"display_name":"Search Kwargs"},"search_params_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"search_params","show":false,"type":"code","l2_name":"search_params","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"search_params"},"display_name":"Search Params"},"collection_name_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"collection_name","show":true,"type":"str","value":"","l2_name":"选择知识库","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","collection_id":"","proxy":{"id":"Milvus-CWpae","field":"collection_name"},"display_name":"Collection Name"},"connection_args_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"connection_args","show":false,"type":"code","value":"","l2_name":"connection_args","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"connection_args"},"display_name":"Connection Args"},"consistency_level_Milvus-CWpae":{"l2":false,"info":"","list":false,"name":"consistency_level","show":false,"type":"str","value":"Session","l2_name":"consistency_level","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"Milvus-CWpae","field":"consistency_level"},"display_name":"Consistency Level"},"tags_RetrievalQA-x5nap":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"tags"},"display_name":"Tags"},"memory_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"memory","show":true,"type":"BaseMemory","l2_name":"memory","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"memory"},"display_name":"Memory"},"verbose_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"verbose"},"display_name":"Verbose"},"metadata_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"metadata"},"display_name":"Metadata"},"callbacks_RetrievalQA-x5nap":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"callbacks"},"display_name":"Callbacks"},"input_key_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"input_key","show":true,"type":"str","value":"query","l2_name":"input_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"input_key"},"display_name":"Input Key"},"input_node_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"input_node","show":true,"type":"input","l2_name":"input_node","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Preset Question","proxy":{"id":"RetrievalQA-x5nap","field":"input_node"}},"output_key_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"output_key","show":true,"type":"str","value":"result","l2_name":"output_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"output_key"},"display_name":"Output Key"},"return_source_documents_RetrievalQA-x5nap":{"l2":false,"info":"","list":false,"name":"return_source_documents","show":true,"type":"bool","value":true,"l2_name":"return_source_documents","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"RetrievalQA-x5nap","field":"return_source_documents"},"display_name":"Return Source Documents"},"n_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"n","show":false,"type":"int","value":1,"l2_name":"n","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"n"},"display_name":"N"},"tags_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"tags"},"display_name":"Tags"},"cache_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"cache","show":false,"type":"bool","l2_name":"cache","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"cache"},"display_name":"Cache"},"top_p_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"top_p","show":true,"type":"float","value":0.9,"l2_name":"top_p","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"top_p"},"display_name":"Top P"},"client_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"client","show":false,"type":"Any","l2_name":"client","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"client"},"display_name":"Client"},"headers_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"headers","show":false,"type":"code","value":"","l2_name":"headers","advanced":true,"password":false,"required":false,"multiline":true,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"headers"},"display_name":"Headers"},"verbose_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"verbose"},"display_name":"Verbose"},"metadata_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"metadata"},"display_name":"Metadata"},"callbacks_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"callbacks"},"display_name":"Callbacks"},"streaming_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"streaming","show":false,"type":"bool","value":false,"l2_name":"streaming","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"streaming"},"display_name":"Streaming"},"max_tokens_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"max_tokens","show":true,"type":"int","value":"","l2_name":"max_tokens","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"max_tokens"},"display_name":"Max Tokens"},"model_name_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"model_name","show":true,"type":"str","value":"gpt-4","l2_name":"model_name","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"model_name"},"display_name":"Model Name"},"max_retries_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"max_retries","show":false,"type":"int","value":6,"l2_name":"max_retries","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"max_retries"},"display_name":"Max Retries"},"temperature_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"temperature","show":true,"type":"float","value":0.7,"l2_name":"temperature","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"temperature"},"display_name":"Temperature"},"model_kwargs_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"model_kwargs","show":false,"type":"code","l2_name":"model_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"model_kwargs"},"display_name":"Model Kwargs"},"elemai_api_key_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"elemai_api_key","show":true,"type":"str","value":"","l2_name":"elemai_api_key","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"elemai_api_key"},"display_name":"Elemai Api Key"},"elemai_base_url_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"elemai_base_url","show":true,"type":"str","value":"http://192.168.106.12:6001/v1/chatcompletion","l2_name":"elemai_base_url","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"elemai_base_url"},"display_name":"Elemai Base Url"},"request_timeout_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"request_timeout","show":false,"type":"float","l2_name":"request_timeout","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"request_timeout"},"display_name":"Request Timeout"},"tiktoken_model_name_ProxyChatLLM-UYoB4":{"l2":false,"info":"","list":false,"name":"tiktoken_model_name","show":false,"type":"str","l2_name":"tiktoken_model_name","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-UYoB4","field":"tiktoken_model_name"},"display_name":"Tiktoken Model Name"},"metadata_WebBaseLoader-af6db":{"info":"","list":false,"name":"metadata","show":false,"type":"code","value":"{}","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Metadata","proxy":{"id":"WebBaseLoader-af6db","field":"metadata"}},"web_path_WebBaseLoader-af6db":{"l2":true,"info":"","list":false,"name":"web_path","show":true,"type":"str","value":"https://dataelem.feishu.cn/wiki/ZxW6wZyAJicX4WkG0NqcWsbynde","l2_name":"网址","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Web Page","proxy":{"id":"WebBaseLoader-af6db","field":"web_path"}},"proxy_url_OpenAIProxyEmbedding-1771b":{"info":"","list":false,"name":"proxy_url","show":false,"type":"str","value":"","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"http://43.133.35.137:8080","proxy":{"id":"OpenAIProxyEmbedding-1771b","field":"proxy_url"},"display_name":"Proxy Url"}},"flow":{"data":{"nodes":[{"width":384,"height":376,"id":"CombineDocsChain-RCPNA","type":"genericNode","position":{"x":-1187.1604122631927,"y":-662.1420645633651},"data":{"id":"CombineDocsChain-RCPNA","node":{"template":{"llm":{"l2":false,"info":"","list":false,"name":"llm","show":true,"type":"BaseLanguageModel","l2_name":"llm","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"LLM"},"_type":"load_qa_chain","token_max":{"l2":false,"info":"当前只对stuff 生效","list":false,"name":"token_max","show":true,"type":"int","value":-1,"l2_name":"token_max","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"token_max"},"chain_type":{"l2":false,"info":"","list":true,"name":"chain_type","show":true,"type":"str","value":"stuff","l2_name":"chain_type","options":["stuff","map_reduce","map_rerank","refine"],"advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""}},"description":"Load question answering chain.","base_classes":["BaseCombineDocumentsChain","function"],"display_name":"CombineDocsChain","output_types":[],"custom_fields":{},"documentation":""},"type":"CombineDocsChain","value":null},"selected":true,"positionAbsolute":{"x":-1187.1604122631927,"y":-662.1420645633651}},{"width":384,"height":346,"id":"Milvus-CWpae","type":"genericNode","position":{"x":-1174.4689035846664,"y":-119.56186107292496},"data":{"id":"Milvus-CWpae","node":{"l2_name":"知识库","template":{"_type":"Milvus","drop_old":{"l2":false,"info":"","list":false,"name":"drop_old","show":false,"type":"bool","value":false,"l2_name":"drop_old","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"documents":{"l2":false,"info":"","list":true,"name":"documents","show":true,"type":"Document","l2_name":"documents","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Documents"},"embedding":{"l2":false,"info":"","list":false,"name":"embedding","show":true,"type":"Embeddings","l2_name":"embedding","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Embedding"},"metadatas":{"l2":false,"info":"","list":true,"name":"metadatas","show":false,"type":"code","l2_name":"metadatas","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"index_params":{"l2":false,"info":"","list":false,"name":"index_params","show":false,"type":"code","l2_name":"index_params","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"search_kwargs":{"l2":false,"info":"","list":false,"name":"search_kwargs","show":true,"type":"code","value":"{}","l2_name":"search_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"search_params":{"l2":false,"info":"","list":false,"name":"search_params","show":false,"type":"code","l2_name":"search_params","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"collection_name":{"l2":false,"info":"","list":false,"name":"collection_name","show":true,"type":"str","value":"","l2_name":"选择知识库","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","collection_id":""},"connection_args":{"l2":false,"info":"","list":false,"name":"connection_args","show":true,"type":"code","value":"","l2_name":"connection_args","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"consistency_level":{"l2":false,"info":"","list":false,"name":"consistency_level","show":false,"type":"str","value":"Session","l2_name":"consistency_level","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Create a Milvus collection, indexes it with HNSW, and insert data.","base_classes":["Milvus","VectorStore","BaseRetriever","VectorStoreRetriever"],"display_name":"Milvus","output_types":[],"custom_fields":{},"documentation":"http://192.168.106.116:8030"},"type":"Milvus","value":null},"selected":true,"positionAbsolute":{"x":-1174.4689035846664,"y":-119.56186107292496}},{"width":384,"height":316,"id":"RetrievalQA-x5nap","type":"genericNode","position":{"x":-510.8891021059987,"y":-499.2694176355641},"data":{"id":"RetrievalQA-x5nap","node":{"template":{"tags":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"_type":"RetrievalQA","memory":{"l2":false,"info":"","list":false,"name":"memory","show":true,"type":"BaseMemory","l2_name":"memory","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"verbose":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"metadata":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"callbacks":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"input_key":{"l2":false,"info":"","list":false,"name":"input_key","show":true,"type":"str","value":"query","l2_name":"input_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":""},"retriever":{"l2":false,"info":"","list":false,"name":"retriever","show":true,"type":"BaseRetriever","l2_name":"retriever","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"input_node":{"l2":false,"info":"","list":false,"name":"input_node","show":true,"type":"input","l2_name":"input_node","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Preset Question"},"output_key":{"l2":false,"info":"","list":false,"name":"output_key","show":true,"type":"str","value":"result","l2_name":"output_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":""},"combine_documents_chain":{"l2":false,"info":"","list":false,"name":"combine_documents_chain","show":true,"type":"BaseCombineDocumentsChain","l2_name":"combine_documents_chain","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"return_source_documents":{"l2":false,"info":"","list":false,"name":"return_source_documents","show":true,"type":"bool","value":true,"l2_name":"return_source_documents","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Chain for question-answering against an index.","base_classes":["RetrievalQA","Chain","BaseRetrievalQA","function"],"display_name":"RetrievalQA","output_types":[],"custom_fields":{},"documentation":"https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"},"type":"RetrievalQA","value":null},"selected":true,"positionAbsolute":{"x":-510.8891021059987,"y":-499.2694176355641}},{"width":384,"height":500,"id":"ProxyChatLLM-UYoB4","type":"genericNode","position":{"x":-1789.0051284621989,"y":-759.1155283370271},"data":{"id":"ProxyChatLLM-UYoB4","node":{"template":{"n":{"l2":false,"info":"","list":false,"name":"n","show":false,"type":"int","value":1,"l2_name":"n","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"tags":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"_type":"ProxyChatLLM","cache":{"l2":false,"info":"","list":false,"name":"cache","show":false,"type":"bool","l2_name":"cache","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"top_p":{"l2":false,"info":"","list":false,"name":"top_p","show":true,"type":"float","value":0.9,"l2_name":"top_p","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"client":{"l2":false,"info":"","list":false,"name":"client","show":false,"type":"Any","l2_name":"client","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"headers":{"l2":false,"info":"","list":false,"name":"headers","show":false,"type":"code","value":"","l2_name":"headers","advanced":false,"password":false,"required":false,"multiline":true,"placeholder":""},"verbose":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"l2_name":"verbose","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"metadata":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"callbacks":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"streaming":{"l2":false,"info":"","list":false,"name":"streaming","show":false,"type":"bool","value":false,"l2_name":"streaming","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"max_tokens":{"l2":false,"info":"","list":false,"name":"max_tokens","show":true,"type":"int","value":"","l2_name":"max_tokens","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":""},"model_name":{"l2":false,"info":"","list":false,"name":"model_name","show":true,"type":"str","value":"gpt-4","l2_name":"model_name","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"max_retries":{"l2":false,"info":"","list":false,"name":"max_retries","show":false,"type":"int","value":6,"l2_name":"max_retries","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"temperature":{"l2":false,"info":"","list":false,"name":"temperature","show":true,"type":"float","value":0.7,"l2_name":"temperature","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"model_kwargs":{"l2":false,"info":"","list":false,"name":"model_kwargs","show":true,"type":"code","l2_name":"model_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"elemai_api_key":{"l2":false,"info":"","list":false,"name":"elemai_api_key","show":true,"type":"str","value":"","l2_name":"elemai_api_key","advanced":false,"password":true,"required":false,"multiline":false,"placeholder":""},"elemai_base_url":{"l2":false,"info":"","list":false,"name":"elemai_base_url","show":true,"type":"str","value":"http://192.168.106.12:6001/v1/chatcompletion","l2_name":"elemai_base_url","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"request_timeout":{"l2":false,"info":"","list":false,"name":"request_timeout","show":false,"type":"float","l2_name":"request_timeout","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"tiktoken_model_name":{"l2":false,"info":"","list":false,"name":"tiktoken_model_name","show":false,"type":"str","l2_name":"tiktoken_model_name","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Wrapper around proxy Chat large language models.","base_classes":["ProxyChatLLM","BaseLanguageModel","BaseChatModel","BaseLLM"],"display_name":"ProxyChatLLM","output_types":[],"custom_fields":{},"documentation":""},"type":"ProxyChatLLM","value":null},"selected":true,"positionAbsolute":{"x":-1789.0051284621989,"y":-759.1155283370271}},{"width":384,"height":356,"id":"WebBaseLoader-af6db","type":"genericNode","position":{"x":-1699.1181246063038,"y":-135.15223886710186},"data":{"id":"WebBaseLoader-af6db","node":{"l2_name":"输入网址","template":{"_type":"WebBaseLoader","metadata":{"info":"","list":false,"name":"metadata","show":true,"type":"code","value":"{}","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Metadata"},"web_path":{"l2":true,"info":"","list":false,"name":"web_path","show":true,"type":"str","value":"https://dataelem.feishu.cn/wiki/ZxW6wZyAJicX4WkG0NqcWsbynde","l2_name":"网址","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","display_name":"Web Page"}},"description":"Load HTML pages using `urllib` and parse them with `BeautifulSoup'.","base_classes":["Document"],"display_name":"WebBaseLoader","output_types":["Document"],"custom_fields":{},"documentation":"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/web_base"},"type":"WebBaseLoader","value":null},"selected":true,"positionAbsolute":{"x":-1699.1181246063038,"y":-135.15223886710186}},{"width":384,"height":172,"id":"OpenAIProxyEmbedding-1771b","type":"genericNode","position":{"x":-1686.4214049605273,"y":261.6202500634144},"data":{"id":"OpenAIProxyEmbedding-1771b","node":{"template":{"_type":"proxy_embedding","proxy_url":{"info":"","list":false,"name":"proxy_url","show":false,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"http://43.133.35.137:8080"}},"description":" 使用自建的embedding服务使用openai进行embed ","base_classes":["Embeddings"],"display_name":"OpenAIProxyEmbedding","output_types":[],"custom_fields":{},"documentation":""},"type":"OpenAIProxyEmbedding","value":null},"selected":true,"positionAbsolute":{"x":-1686.4214049605273,"y":261.6202500634144}}],"edges":[{"source":"CombineDocsChain-RCPNA","target":"RetrievalQA-x5nap","sourceHandle":"CombineDocsChain|CombineDocsChain-RCPNA|BaseCombineDocumentsChain|function","targetHandle":"BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap","id":"reactflow__edge-CombineDocsChain-RCPNACombineDocsChain|CombineDocsChain-RCPNA|BaseCombineDocumentsChain|function-RetrievalQA-x5napBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"Milvus-CWpae","target":"RetrievalQA-x5nap","sourceHandle":"Milvus|Milvus-CWpae|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever","targetHandle":"BaseRetriever|retriever|RetrievalQA-x5nap","id":"reactflow__edge-Milvus-CWpaeMilvus|Milvus-CWpae|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever-RetrievalQA-x5napBaseRetriever|retriever|RetrievalQA-x5nap","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"ProxyChatLLM-UYoB4","target":"CombineDocsChain-RCPNA","sourceHandle":"ProxyChatLLM|ProxyChatLLM-UYoB4|ProxyChatLLM|BaseLanguageModel|BaseChatModel|BaseLLM","targetHandle":"BaseLanguageModel|llm|CombineDocsChain-RCPNA","id":"reactflow__edge-ProxyChatLLM-UYoB4ProxyChatLLM|ProxyChatLLM-UYoB4|ProxyChatLLM|BaseLanguageModel|BaseChatModel|BaseLLM-CombineDocsChain-RCPNABaseLanguageModel|llm|CombineDocsChain-RCPNA","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"WebBaseLoader-af6db","target":"Milvus-CWpae","sourceHandle":"WebBaseLoader|WebBaseLoader-af6db|Document","targetHandle":"Document|documents|Milvus-CWpae","id":"reactflow__edge-WebBaseLoader-af6dbWebBaseLoader|WebBaseLoader-af6db|Document-Milvus-CWpaeDocument|documents|Milvus-CWpae","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"OpenAIProxyEmbedding-1771b","target":"Milvus-CWpae","sourceHandle":"OpenAIProxyEmbedding|OpenAIProxyEmbedding-1771b|Embeddings","targetHandle":"Embeddings|embedding|Milvus-CWpae","id":"reactflow__edge-OpenAIProxyEmbedding-1771bOpenAIProxyEmbedding|OpenAIProxyEmbedding-1771b|Embeddings-Milvus-CWpaeEmbeddings|embedding|Milvus-CWpae","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true}],"viewport":{"zoom":1,"x":0,"y":0}},"is_component":false,"name":"","description":"","id":"ddc2b","status":0,"write":false,"guide_word":""}}}},{"角色扮演":{"id":"LLMChain-2dd3b","type":"LLMChain","node":{"output_types":[],"display_name":"角色扮演","documentation":"","base_classes":["Chain","LLMChain","function"],"description":"Chain to run queries against LLMs.","template":{"tags_LLMChain-wRz0c":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"LLMChain-wRz0c","field":"tags"},"display_name":"Tags"},"verbose_LLMChain-wRz0c":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"LLMChain-wRz0c","field":"verbose"},"display_name":"Verbose"},"metadata_LLMChain-wRz0c":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"LLMChain-wRz0c","field":"metadata"},"display_name":"Metadata"},"callbacks_LLMChain-wRz0c":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"LLMChain-wRz0c","field":"callbacks"},"display_name":"Callbacks"},"input_node_LLMChain-wRz0c":{"l2":false,"info":"","list":false,"name":"input_node","show":true,"type":"input","l2_name":"input_node","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Preset Question","proxy":{"id":"LLMChain-wRz0c","field":"input_node"}},"llm_kwargs_LLMChain-wRz0c":{"l2":false,"info":"","list":false,"name":"llm_kwargs","show":false,"type":"code","l2_name":"llm_kwargs","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"LLMChain-wRz0c","field":"llm_kwargs"},"display_name":"LLM Kwargs"},"output_key_LLMChain-wRz0c":{"l2":false,"info":"","list":false,"name":"output_key","show":true,"type":"str","value":"text","l2_name":"output_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"LLMChain-wRz0c","field":"output_key"},"display_name":"Output Key"},"output_parser_LLMChain-wRz0c":{"l2":false,"info":"","list":false,"name":"output_parser","show":false,"type":"BaseLLMOutputParser","l2_name":"output_parser","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"LLMChain-wRz0c","field":"output_parser"},"display_name":"Output Parser"},"return_final_only_LLMChain-wRz0c":{"l2":false,"info":"","list":false,"name":"return_final_only","show":false,"type":"bool","value":true,"l2_name":"return_final_only","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"LLMChain-wRz0c","field":"return_final_only"},"display_name":"Return Final Only"},"input_PromptTemplate-ZoUVT":{"info":"","list":false,"name":"input","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser"],"placeholder":"","display_name":"input","proxy":{"id":"PromptTemplate-ZoUVT","field":"input"}},"template_PromptTemplate-ZoUVT":{"l2":false,"info":"","list":false,"name":"template","show":true,"type":"prompt","value":"System:\n你将扮演一个科技公司的面试官,面试者是一名产品经理,提出 3 个犀利的问题。\n请注意:\n- 每次只问一个问题\n- 面试者回答问题后请简短点评一下,然后问下一个问题,不要试图纠正候选人的错误;\n- 如果你认为用户连续几次回答的都不对,就少问一点;\n- 问完最后一个问题后,你可以问这样一个问题:上一份工作为什么离职?用户回答该问题后,请表示理解与支持,并停止与面试者的对话。若面试者继续说话你可以礼貌拒绝。\n\n以下是你们的对话记录\n\n{chat_history}\n\n面试者:{input}\n\n你的回答:","l2_name":"template","advanced":false,"password":false,"required":true,"multiline":true,"placeholder":"","proxy":{"id":"PromptTemplate-ZoUVT","field":"template"},"display_name":"Template"},"chat_history_PromptTemplate-ZoUVT":{"info":"","list":false,"name":"chat_history","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser"],"placeholder":"","display_name":"chat_history","proxy":{"id":"PromptTemplate-ZoUVT","field":"chat_history"}},"output_parser_PromptTemplate-ZoUVT":{"l2":false,"info":"","list":false,"name":"output_parser","show":false,"type":"BaseOutputParser","l2_name":"output_parser","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-ZoUVT","field":"output_parser"},"display_name":"Output Parser"},"input_variables_PromptTemplate-ZoUVT":{"l2":false,"info":"","list":true,"name":"input_variables","show":false,"type":"str","value":["chat_history","input"],"l2_name":"input_variables","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-ZoUVT","field":"input_variables"},"display_name":"Input Variables"},"template_format_PromptTemplate-ZoUVT":{"l2":false,"info":"","list":false,"name":"template_format","show":false,"type":"str","value":"f-string","l2_name":"template_format","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-ZoUVT","field":"template_format"},"display_name":"Template Format"},"partial_variables_PromptTemplate-ZoUVT":{"l2":false,"info":"","list":false,"name":"partial_variables","show":false,"type":"code","l2_name":"partial_variables","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-ZoUVT","field":"partial_variables"},"display_name":"Partial Variables"},"validate_template_PromptTemplate-ZoUVT":{"l2":false,"info":"","list":false,"name":"validate_template","show":false,"type":"bool","value":true,"l2_name":"validate_template","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"PromptTemplate-ZoUVT","field":"validate_template"},"display_name":"Validate Template"},"ai_prefix_ConversationBufferMemory-lI5Pt":{"l2":false,"info":"","list":false,"name":"ai_prefix","show":false,"type":"str","value":"AI","l2_name":"ai_prefix","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationBufferMemory-lI5Pt","field":"ai_prefix"},"display_name":"Ai Prefix"},"input_key_ConversationBufferMemory-lI5Pt":{"l2":false,"info":"The variable to be used as Chat Input when more than one variable is available.","list":false,"name":"input_key","show":true,"type":"str","value":"","l2_name":"input_key","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationBufferMemory-lI5Pt","field":"input_key"},"display_name":"Input Key"},"memory_key_ConversationBufferMemory-lI5Pt":{"l2":false,"info":"","list":false,"name":"memory_key","show":true,"type":"str","value":"chat_history","l2_name":"memory_key","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationBufferMemory-lI5Pt","field":"memory_key"},"display_name":"Memory Key"},"output_key_ConversationBufferMemory-lI5Pt":{"l2":false,"info":"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)","list":false,"name":"output_key","show":true,"type":"str","value":"","l2_name":"output_key","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationBufferMemory-lI5Pt","field":"output_key"},"display_name":"Output Key"},"chat_memory_ConversationBufferMemory-lI5Pt":{"l2":false,"info":"","list":false,"name":"chat_memory","show":true,"type":"BaseChatMessageHistory","l2_name":"chat_memory","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationBufferMemory-lI5Pt","field":"chat_memory"},"display_name":"Chat Memory"},"human_prefix_ConversationBufferMemory-lI5Pt":{"l2":false,"info":"","list":false,"name":"human_prefix","show":false,"type":"str","value":"Human","l2_name":"human_prefix","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationBufferMemory-lI5Pt","field":"human_prefix"},"display_name":"Human Prefix"},"return_messages_ConversationBufferMemory-lI5Pt":{"l2":false,"info":"","list":false,"name":"return_messages","show":true,"type":"bool","l2_name":"return_messages","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ConversationBufferMemory-lI5Pt","field":"return_messages"},"display_name":"Return Messages"},"n_ProxyChatLLM-C0lLH":{"info":"","list":false,"name":"n","show":false,"type":"int","value":1,"advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"n"},"display_name":"N"},"tags_ProxyChatLLM-C0lLH":{"info":"","list":true,"name":"tags","show":false,"type":"str","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"tags"},"display_name":"Tags"},"cache_ProxyChatLLM-C0lLH":{"info":"","list":false,"name":"cache","show":false,"type":"bool","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"cache"},"display_name":"Cache"},"top_p_ProxyChatLLM-C0lLH":{"info":"","list":false,"name":"top_p","show":true,"type":"float","value":0.9,"advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"top_p"},"display_name":"Top P"},"client_ProxyChatLLM-C0lLH":{"info":"","list":false,"name":"client","show":false,"type":"Any","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"client"},"display_name":"Client"},"headers_ProxyChatLLM-C0lLH":{"info":"","list":false,"name":"headers","show":false,"type":"code","value":"","advanced":true,"password":false,"required":false,"multiline":true,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"headers"},"display_name":"Headers"},"verbose_ProxyChatLLM-C0lLH":{"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"verbose"},"display_name":"Verbose"},"metadata_ProxyChatLLM-C0lLH":{"info":"","list":false,"name":"metadata","show":false,"type":"code","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"metadata"},"display_name":"Metadata"},"callbacks_ProxyChatLLM-C0lLH":{"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"callbacks"},"display_name":"Callbacks"},"streaming_ProxyChatLLM-C0lLH":{"info":"","list":false,"name":"streaming","show":false,"type":"bool","value":false,"advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"streaming"},"display_name":"Streaming"},"max_tokens_ProxyChatLLM-C0lLH":{"info":"","list":false,"name":"max_tokens","show":true,"type":"int","value":"","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"max_tokens"},"display_name":"Max Tokens"},"model_name_ProxyChatLLM-C0lLH":{"info":"","list":false,"name":"model_name","show":true,"type":"str","value":"gpt-3.5-turbo-16k-0613","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"model_name"},"display_name":"Model Name"},"max_retries_ProxyChatLLM-C0lLH":{"info":"","list":false,"name":"max_retries","show":false,"type":"int","value":6,"advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"max_retries"},"display_name":"Max Retries"},"temperature_ProxyChatLLM-C0lLH":{"info":"","list":false,"name":"temperature","show":true,"type":"float","value":0.7,"advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"temperature"},"display_name":"Temperature"},"model_kwargs_ProxyChatLLM-C0lLH":{"info":"","list":false,"name":"model_kwargs","show":false,"type":"code","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"model_kwargs"},"display_name":"Model Kwargs"},"elemai_api_key_ProxyChatLLM-C0lLH":{"info":"","list":false,"name":"elemai_api_key","show":true,"type":"str","value":"","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"elemai_api_key"},"display_name":"Elemai Api Key"},"elemai_base_url_ProxyChatLLM-C0lLH":{"info":"","list":false,"name":"elemai_base_url","show":true,"type":"str","value":"http://192.168.106.12:6001/v1/chatcompletion","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"elemai_base_url"},"display_name":"Elemai Base Url"},"request_timeout_ProxyChatLLM-C0lLH":{"info":"","list":false,"name":"request_timeout","show":false,"type":"float","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"request_timeout"},"display_name":"Request Timeout"},"tiktoken_model_name_ProxyChatLLM-C0lLH":{"info":"","list":false,"name":"tiktoken_model_name","show":false,"type":"str","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":"","proxy":{"id":"ProxyChatLLM-C0lLH","field":"tiktoken_model_name"},"display_name":"Tiktoken Model Name"}},"flow":{"data":{"nodes":[{"width":384,"height":316,"id":"LLMChain-wRz0c","type":"genericNode","position":{"x":621.1034022791711,"y":113.49419945635839},"data":{"id":"LLMChain-wRz0c","node":{"template":{"llm":{"l2":false,"info":"","list":false,"name":"llm","show":true,"type":"BaseLanguageModel","l2_name":"llm","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"tags":{"l2":false,"info":"","list":true,"name":"tags","show":false,"type":"str","l2_name":"tags","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"_type":"LLMChain","memory":{"l2":false,"info":"","list":false,"name":"memory","show":true,"type":"BaseMemory","l2_name":"memory","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"prompt":{"l2":false,"info":"","list":false,"name":"prompt","show":true,"type":"BasePromptTemplate","l2_name":"prompt","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"verbose":{"l2":false,"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"l2_name":"verbose","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"metadata":{"l2":false,"info":"","list":false,"name":"metadata","show":false,"type":"code","l2_name":"metadata","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"callbacks":{"l2":false,"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","l2_name":"callbacks","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"input_node":{"l2":false,"info":"","list":false,"name":"input_node","show":true,"type":"input","l2_name":"input_node","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":"","display_name":"Preset Question"},"llm_kwargs":{"l2":false,"info":"","list":false,"name":"llm_kwargs","show":false,"type":"code","l2_name":"llm_kwargs","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"output_key":{"l2":false,"info":"","list":false,"name":"output_key","show":true,"type":"str","value":"text","l2_name":"output_key","advanced":true,"password":false,"required":true,"multiline":false,"placeholder":""},"output_parser":{"l2":false,"info":"","list":false,"name":"output_parser","show":false,"type":"BaseLLMOutputParser","l2_name":"output_parser","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"return_final_only":{"l2":false,"info":"","list":false,"name":"return_final_only","show":false,"type":"bool","value":true,"l2_name":"return_final_only","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Chain to run queries against LLMs.","base_classes":["Chain","LLMChain","function"],"display_name":"LLMChain","output_types":[],"custom_fields":{},"documentation":"https://python.langchain.com/docs/modules/chains/foundational/llm_chain"},"type":"LLMChain","value":null},"selected":true,"positionAbsolute":{"x":621.1034022791711,"y":113.49419945635839}},{"width":384,"height":418,"id":"PromptTemplate-ZoUVT","type":"genericNode","position":{"x":-152.59469279870132,"y":532.7389820028246},"data":{"id":"PromptTemplate-ZoUVT","node":{"name":"","template":{"_type":"PromptTemplate","input":{"info":"","list":false,"name":"input","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser"],"placeholder":"","display_name":"input"},"template":{"l2":false,"info":"","list":false,"name":"template","show":true,"type":"prompt","value":"System:\n你将扮演一个科技公司的面试官,面试者是一名产品经理,提出 3 个犀利的问题。\n请注意:\n- 每次只问一个问题\n- 面试者回答问题后请简短点评一下,然后问下一个问题,不要试图纠正候选人的错误;\n- 如果你认为用户连续几次回答的都不对,就少问一点;\n- 问完最后一个问题后,你可以问这样一个问题:上一份工作为什么离职?用户回答该问题后,请表示理解与支持,并停止与面试者的对话。若面试者继续说话你可以礼貌拒绝。\n\n以下是你们的对话记录\n\n{chat_history}\n\n面试者:{input}\n\n你的回答:","l2_name":"template","advanced":false,"password":false,"required":true,"multiline":true,"placeholder":""},"chat_history":{"info":"","list":false,"name":"chat_history","show":true,"type":"str","value":"","advanced":false,"password":false,"required":false,"multiline":true,"input_types":["Document","BaseOutputParser"],"placeholder":"","display_name":"chat_history"},"output_parser":{"l2":false,"info":"","list":false,"name":"output_parser","show":false,"type":"BaseOutputParser","l2_name":"output_parser","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"input_variables":{"l2":false,"info":"","list":true,"name":"input_variables","show":false,"type":"str","value":["chat_history","input"],"l2_name":"input_variables","advanced":false,"password":false,"required":true,"multiline":false,"placeholder":""},"template_format":{"l2":false,"info":"","list":false,"name":"template_format","show":false,"type":"str","value":"f-string","l2_name":"template_format","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"partial_variables":{"l2":false,"info":"","list":false,"name":"partial_variables","show":false,"type":"code","l2_name":"partial_variables","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"validate_template":{"l2":false,"info":"","list":false,"name":"validate_template","show":false,"type":"bool","value":true,"l2_name":"validate_template","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Schema to represent a prompt for an LLM.","base_classes":["PromptTemplate","StringPromptTemplate","BasePromptTemplate"],"display_name":"PromptTemplate","output_types":[],"custom_fields":{"template":["chat_history","input"]},"documentation":"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/","field_formatters":{"formatters":{"openai_api_key":{}},"base_formatters":{"dict":{},"list":{},"show":{},"union":{},"kwargs":{},"default":{},"headers":{},"optional":{},"password":{},"multiline":{},"model_fields":{"MODEL_DICT":{"OpenAI":["text-davinci-003","text-davinci-002","text-curie-001","text-babbage-001","text-ada-001"],"Anthropic":["claude-v1","claude-v1-100k","claude-instant-v1","claude-instant-v1-100k","claude-v1.3","claude-v1.3-100k","claude-v1.2","claude-v1.0","claude-instant-v1.1","claude-instant-v1.1-100k","claude-instant-v1.0"],"ChatOpenAI":["gpt-3.5-turbo-0613","gpt-3.5-turbo","gpt-3.5-turbo-16k-0613","gpt-3.5-turbo-16k","gpt-4-0613","gpt-4-32k-0613","gpt-4","gpt-4-32k"],"ChatAnthropic":["claude-v1","claude-v1-100k","claude-instant-v1","claude-instant-v1-100k","claude-v1.3","claude-v1.3-100k","claude-v1.2","claude-v1.0","claude-instant-v1.1","claude-instant-v1.1-100k","claude-instant-v1.0"]}},"dict_code_file":{}}}},"type":"PromptTemplate","value":null},"selected":true,"positionAbsolute":{"x":-152.59469279870132,"y":532.7389820028246}},{"width":384,"height":526,"id":"ConversationBufferMemory-lI5Pt","type":"genericNode","position":{"x":-556.5758769509117,"y":-30.001495256074236},"data":{"id":"ConversationBufferMemory-lI5Pt","node":{"template":{"_type":"ConversationBufferMemory","ai_prefix":{"l2":false,"info":"","list":false,"name":"ai_prefix","show":false,"type":"str","value":"AI","l2_name":"ai_prefix","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"input_key":{"l2":false,"info":"The variable to be used as Chat Input when more than one variable is available.","list":false,"name":"input_key","show":true,"type":"str","value":"","l2_name":"input_key","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"memory_key":{"l2":false,"info":"","list":false,"name":"memory_key","show":true,"type":"str","value":"chat_history","l2_name":"memory_key","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"output_key":{"l2":false,"info":"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)","list":false,"name":"output_key","show":true,"type":"str","value":"","l2_name":"output_key","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"chat_memory":{"l2":false,"info":"","list":false,"name":"chat_memory","show":true,"type":"BaseChatMessageHistory","l2_name":"chat_memory","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"human_prefix":{"l2":false,"info":"","list":false,"name":"human_prefix","show":false,"type":"str","value":"Human","l2_name":"human_prefix","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"return_messages":{"l2":false,"info":"","list":false,"name":"return_messages","show":true,"type":"bool","l2_name":"return_messages","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Buffer for storing conversation memory.","base_classes":["BaseChatMemory","ConversationBufferMemory","BaseMemory"],"display_name":"ConversationBufferMemory","output_types":[],"custom_fields":{},"documentation":"https://python.langchain.com/docs/modules/memory/how_to/buffer"},"type":"ConversationBufferMemory","value":null},"selected":true,"positionAbsolute":{"x":-556.5758769509117,"y":-30.001495256074236}},{"width":384,"height":500,"id":"ProxyChatLLM-C0lLH","type":"genericNode","position":{"x":-26.90943659439222,"y":-434.6186906908237},"data":{"id":"ProxyChatLLM-C0lLH","node":{"template":{"n":{"info":"","list":false,"name":"n","show":false,"type":"int","value":1,"advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"tags":{"info":"","list":true,"name":"tags","show":false,"type":"str","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"_type":"ProxyChatLLM","cache":{"info":"","list":false,"name":"cache","show":false,"type":"bool","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"top_p":{"info":"","list":false,"name":"top_p","show":true,"type":"float","value":0.9,"advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"client":{"info":"","list":false,"name":"client","show":false,"type":"Any","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"headers":{"info":"","list":false,"name":"headers","show":false,"type":"code","value":"","advanced":false,"password":false,"required":false,"multiline":true,"placeholder":""},"verbose":{"info":"","list":false,"name":"verbose","show":false,"type":"bool","value":false,"advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"metadata":{"info":"","list":false,"name":"metadata","show":false,"type":"code","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"callbacks":{"info":"","list":true,"name":"callbacks","show":false,"type":"langchain.callbacks.base.BaseCallbackHandler","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"streaming":{"info":"","list":false,"name":"streaming","show":false,"type":"bool","value":false,"advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"max_tokens":{"info":"","list":false,"name":"max_tokens","show":true,"type":"int","value":"","advanced":true,"password":true,"required":false,"multiline":false,"placeholder":""},"model_name":{"info":"","list":false,"name":"model_name","show":true,"type":"str","value":"gpt-3.5-turbo-16k-0613","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"max_retries":{"info":"","list":false,"name":"max_retries","show":false,"type":"int","value":6,"advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"temperature":{"info":"","list":false,"name":"temperature","show":true,"type":"float","value":0.7,"advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"model_kwargs":{"info":"","list":false,"name":"model_kwargs","show":true,"type":"code","advanced":true,"password":false,"required":false,"multiline":false,"placeholder":""},"elemai_api_key":{"info":"","list":false,"name":"elemai_api_key","show":true,"type":"str","value":"","advanced":false,"password":true,"required":false,"multiline":false,"placeholder":""},"elemai_base_url":{"info":"","list":false,"name":"elemai_base_url","show":true,"type":"str","value":"http://192.168.106.12:6001/v1/chatcompletion","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"request_timeout":{"info":"","list":false,"name":"request_timeout","show":false,"type":"float","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""},"tiktoken_model_name":{"info":"","list":false,"name":"tiktoken_model_name","show":false,"type":"str","advanced":false,"password":false,"required":false,"multiline":false,"placeholder":""}},"description":"Wrapper around proxy Chat large language models.","base_classes":["ProxyChatLLM","BaseLanguageModel","BaseChatModel","BaseLLM"],"display_name":"ProxyChatLLM","output_types":[],"custom_fields":{},"documentation":""},"type":"ProxyChatLLM","value":null},"selected":true,"positionAbsolute":{"x":-26.90943659439222,"y":-434.6186906908237}}],"edges":[{"source":"PromptTemplate-ZoUVT","target":"LLMChain-wRz0c","sourceHandle":"PromptTemplate|PromptTemplate-ZoUVT|PromptTemplate|StringPromptTemplate|BasePromptTemplate","targetHandle":"BasePromptTemplate|prompt|LLMChain-wRz0c","id":"reactflow__edge-PromptTemplate-ZoUVTPromptTemplate|PromptTemplate-ZoUVT|PromptTemplate|StringPromptTemplate|BasePromptTemplate-LLMChain-wRz0cBasePromptTemplate|prompt|LLMChain-wRz0c","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"ConversationBufferMemory-lI5Pt","target":"LLMChain-wRz0c","sourceHandle":"ConversationBufferMemory|ConversationBufferMemory-lI5Pt|BaseChatMemory|ConversationBufferMemory|BaseMemory","targetHandle":"BaseMemory|memory|LLMChain-wRz0c","id":"reactflow__edge-ConversationBufferMemory-lI5PtConversationBufferMemory|ConversationBufferMemory-lI5Pt|BaseChatMemory|ConversationBufferMemory|BaseMemory-LLMChain-wRz0cBaseMemory|memory|LLMChain-wRz0c","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true},{"source":"ProxyChatLLM-C0lLH","target":"LLMChain-wRz0c","sourceHandle":"ProxyChatLLM|ProxyChatLLM-C0lLH|ProxyChatLLM|BaseLanguageModel|BaseChatModel|BaseLLM","targetHandle":"BaseLanguageModel|llm|LLMChain-wRz0c","id":"reactflow__edge-ProxyChatLLM-C0lLHProxyChatLLM|ProxyChatLLM-C0lLH|ProxyChatLLM|BaseLanguageModel|BaseChatModel|BaseLLM-LLMChain-wRz0cBaseLanguageModel|llm|LLMChain-wRz0c","style":{"stroke":"#555"},"className":"stroke-gray-900 ","animated":false,"selected":true}],"viewport":{"zoom":1,"x":0,"y":0}},"is_component":false,"name":"","description":"","id":"32a69","status":0,"write":false,"guide_word":""}}}}]
================================================
FILE: src/backend/bisheng/database/data/sft_model.json
================================================
[
{
"model_name": "Baichuan2-7B-Chat"
},
{
"model_name": "Baichuan2-13B-Chat"
},
{
"model_name": "chatglm2-6b"
},
{
"model_name": "chatglm3-6b"
},
{
"model_name": "internlm-chat-7b-8k"
},
{
"model_name": "internlm-20b-chat"
},
{
"model_name": "Llama-2-7b-chat-hf"
},
{
"model_name": "Llama-2-13b-chat-hf"
},
{
"model_name": "Qwen-7B-Chat"
},
{
"model_name": "Qwen-14B-Chat"
}
]
================================================
FILE: src/backend/bisheng/database/data/t_gpts_tools.json
================================================
[
{
"name": "时间",
"logo": null,
"desc": "返回当前时间,如果未指定时区,将使用 UTC+8 时间",
"tool_key": "get_current_time",
"type": 1,
"extra": "{}",
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:36:00",
"update_time": "2024-03-29 14:36:00",
"id": 1,
"api_params": []
},
{
"name": "计算器",
"logo": null,
"desc": "使用 Python 内置工具进行数学表达式计算",
"tool_key": "calculator",
"type": 2,
"extra": "{}",
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:37:11",
"update_time": "2024-03-29 14:37:11",
"id": 2,
"api_params": []
},
{
"name": "论文获取",
"logo": null,
"desc": "从 Arxiv 网站检索论文的工具,输入为检索关键词。",
"tool_key": "arxiv",
"type": 3,
"extra": "{}",
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:39:37",
"update_time": "2024-03-29 14:39:37",
"id": 3,
"api_params": [
{
"name": "query",
"description": "search query to look up",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "Dalle3绘画",
"logo": null,
"desc": "根据提示词生成图像。",
"tool_key": "dalle_image_generator",
"type": 4,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:40:32",
"update_time": "2024-03-29 14:40:32",
"id": 4,
"api_params": [
{
"name": "query",
"description": "Description about image.",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "Bing web搜索",
"logo": null,
"desc": "使用 query 进行 Bing 搜索并返回返回结果。",
"tool_key": "bing_search",
"type": 5,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:41:16",
"update_time": "2024-03-29 14:41:16",
"id": 5,
"api_params": [
{
"name": "query",
"description": "query to look up in Bing search",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "代码执行器",
"logo": null,
"desc": "可以执行 Python 和 shell 代码,并在 600 秒内返回结果,适合处理数学、编程、图片和文件等问题场景。",
"tool_key": "bisheng_code_interpreter",
"type": 6,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:42:17",
"update_time": "2024-03-29 14:42:17",
"id": 6,
"api_params": [
{
"name": "python_code",
"description": "The pure python script to be evaluated. \\nThe contents will be in main.py. \\nIt should not be in markdown format.",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "人员所有公司",
"logo": null,
"desc": "可以通过公司名称或ID和人名获取企业人员的所有相关公司,包括其担任法人、股东、董监高的公司信息",
"tool_key": "tianyancha_all_companys_by_company",
"type": 7,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:44:34",
"update_time": "2024-03-29 14:44:34",
"id": 7,
"api_params": [
{
"name": "query",
"description": "human who you want to search",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "name",
"description": "company name which human worked",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "搜索企业",
"logo": null,
"desc": "可以通过关键词获取企业列表,企业列表包括公司名称或ID、类型、成立日期、经营状态、统一社会信用代码等字段的详细信息",
"tool_key": "tianyancha_search_company",
"type": 7,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:50:07",
"update_time": "2024-03-29 14:50:07",
"id": 9,
"api_params": [
{
"name": "query",
"description": "搜索关键字(公司名称、公司id、注册号或社会统一信用代码)",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "企业基本信息",
"logo": null,
"desc": "可以通过公司名称或ID获取企业基本信息,企业基本信息包括公司名称或ID、类型、成立日期、经营状态、注册资本、法人、工商注册号、统一社会信用代码、组织机构代码、纳税人识别号等字段信息",
"tool_key": "tianyancha_get_company_baseinfo",
"type": 7,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:51:06",
"update_time": "2024-03-29 14:51:06",
"id": 10,
"api_params": [
{
"name": "query",
"description": "搜索关键字(公司名称、公司id、注册号或社会统一信用代码)",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "企业知识产权信息",
"logo": null,
"desc": "可以通过公司名称或ID获取包含商标、专利、作品著作权、软件著作权、网站备案等维度的相关信息",
"tool_key": "tianyancha_ip_rights",
"type": 7,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:51:33",
"update_time": "2024-03-29 14:51:33",
"id": 11,
"api_params": [
{
"name": "query",
"description": "搜索关键字(公司名称、公司id、注册号或社会统一信用代码)",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "企业司法风险",
"logo": null,
"desc": "可以通过公司名称或ID获取包含法律诉讼、法院公告、开庭公告、失信人、被执行人、立案信息、送达公告等维度的相关信息",
"tool_key": "tianyancha_judicial_risk",
"type": 7,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:52:13",
"update_time": "2024-03-29 14:52:13",
"id": 12,
"api_params": [
{
"name": "query",
"description": "搜索关键字(公司名称、公司id、注册号或社会统一信用代码)",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "企业法律诉讼",
"logo": null,
"desc": "可以通过公司名称或ID获取企业法律诉讼信息,法律诉讼包括案件名称、案由、案件身份、案号等字段的详细信息",
"tool_key": "tianyancha_law_suit_case",
"type": 7,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:52:36",
"update_time": "2024-03-29 14:52:36",
"id": 13,
"api_params": [
{
"name": "query",
"description": "搜索关键字(公司名称、公司id、注册号或社会统一信用代码)",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "企业工商信息",
"logo": null,
"desc": "可以通过公司名称或ID获取包含企业基本信息、主要人员、股东信息、对外投资、分支机构等维度的相关信息",
"tool_key": "tianyancha_ic_info",
"type": 7,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:53:06",
"update_time": "2024-03-29 14:53:06",
"id": 14,
"api_params": [
{
"name": "query",
"description": "搜索关键字(公司名称、公司id、注册号或社会统一信用代码)",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "企业工商信息变更记录",
"logo": null,
"desc": "可以通过公司名称或ID获取企业变更记录,变更记录包括工商变更事项、变更前后信息等字段的详细信息",
"tool_key": "tianyancha_company_change_info",
"type": 7,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:54:02",
"update_time": "2024-03-29 14:54:02",
"id": 15,
"api_params": [
{
"name": "query",
"description": "搜索关键字(公司名称、公司id、注册号或社会统一信用代码)",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "企业股东",
"logo": null,
"desc": "可以通过公司名称或ID获取企业股东信息,股东信息包括股东名、出资比例、出资金额、股东总数等字段的详细信息",
"tool_key": "tianyancha_company_holders",
"type": 7,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:54:28",
"update_time": "2024-03-29 14:54:28",
"id": 16,
"api_params": [
{
"name": "query",
"description": "搜索关键字(公司名称、公司id、注册号或社会统一信用代码)",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "企业天眼风险",
"logo": null,
"desc": "可以通过关键字(公司名称、公司id、注册号或社会统一信用代码)获取企业相关天眼风险列表,包括企业自身/周边/预警风险信息。",
"tool_key": "tianyancha_riskinfo",
"type": 7,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:54:57",
"update_time": "2024-03-29 14:54:57",
"id": 17,
"api_params": [
{
"name": "query",
"description": "搜索关键字(公司名称、公司id、注册号或社会统一信用代码)",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "股票实时行情",
"logo": null,
"desc": "查询中国A股(沪深北交易所)股票或指数的实时行情数据,返回:现价、涨跌额、涨跌幅、成交量、成交额。",
"tool_key": "sina_realtime_info",
"type": 8,
"extra": null,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:56:15",
"update_time": "2024-03-29 14:56:15",
"id": 18,
"api_params": [
{
"name": "prefix",
"description": "前缀。如果是\"stock_symbol\"传入的为股票代码,则需要传入s_;\n如果\"stock_symbol\"传入的为指数代码,则为空。",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "stock_exchange",
"description": "交易所简写。股票上市的交易所,或者发布行情指数的交易所。可选项有\"sh\"(上海证券交易所)、\" sz\"( 深圳证券交易所)、\"bj\"( 北京证券交易所)",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "stock_symbol",
"description": "6位数字的股票或者指数代码。\\n参考信息:\\n- 如果问题中未给出,可能需要上网查询。\\n- 上交所股票通常以 6 开头,深交所股票通常以 0、3 开头,北交所股票通常以 8 开头。\\n- 上交所行情指数通常以 000 开头,深交所指数通常以 399 开头。同一个指数可能会同时在两个交易所发布,例如沪深 300 有\"sh000300\"和\"sz399300\"两个代码。",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "股票历史行情",
"logo": null,
"desc": "查询中国A股(沪深北交易所)股票或指数的的历史行情数据,返回:时间、开盘价、最高价、最低价、收盘价、成交量(股)。",
"tool_key": "sina_history_KLine",
"type": 8,
"extra": null,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:56:38",
"update_time": "2024-03-29 14:56:38",
"id": 19,
"api_params": [
{
"name": "date",
"description": "需要查询的时间,按照”2024-03-26“格式,传入日期",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "stock_exchange",
"description": "交易所简写。股票上市的交易所,或者发布行情指数的交易所。可选项有\"sh\"(上海证券交易所)、\" sz\"( 深圳证券交易所)、\"bj\"( 北京证券交易所)",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "stock_symbol",
"description": "6位数字的股票或者指数代码。\\n参考信息:\\n- 如果问题中未给出,可能需要上网查询。\\n- 上交所股票通常以 6 开头,深交所股票通常以 0、3 开头,北交所股票通常以 8 开头。\\n- 上交所行情指数通常以 000 开头,深交所指数通常以 399 开头。同一个指数可能会同时在两个交易所发布,例如沪深 300 有\"sh000300\"和\"sz399300\"两个代码。",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "社会融资规模增量",
"logo": null,
"desc": "中国社会融资规模增量月度统计数据。返回数据包括:月份,社会融资规模增量(单位:亿元),社融增量分项数据。分项数据具体包括:人民币贷款,外币贷款,委托贷款,信托贷款,未贴现银行承兑汇票,企业债券,非金融企业境内股票融资。",
"tool_key": "macro_china_shrzgm",
"type": 8,
"extra": null,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:59:06",
"update_time": "2024-03-29 14:59:06",
"id": 20,
"api_params": [
{
"name": "start_date",
"description": "开始月份, 使用YYYY-MM-DD 方式表示",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "end_date",
"description": "结束月份, 使用YYYY-MM-DD 方式表示",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "GDP",
"logo": null,
"desc": " 中国国内生产总值(GDP)季度统计数据。返回数据包括:季度,当年累计GDP 绝对值及同比增长情况,第一、二、三产业 GDP 绝对值以及同比增长情况。",
"tool_key": "macro_china_gdp_yearly",
"type": 8,
"extra": null,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 14:59:38",
"update_time": "2024-03-29 14:59:38",
"id": 21,
"api_params": [
{
"name": "start_date",
"description": "开始月份, 使用YYYY-MM-DD 方式表示",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "end_date",
"description": "结束月份, 使用YYYY-MM-DD 方式表示",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "CPI",
"logo": null,
"desc": "中国居民消费价格指数(CPI,上年同月=100)月度统计数据。返回数据包括:月份,全国当月 CPI,全国当月同比增长,全国当月环比增长,全国当年 CPI 累计值;城市当月 CPI,城市当月同比增长,城市当月环比增长,城市当年 CPI 累计值;农村当月 CPI,农村当月同比增长,农村当月环比增长,农村当年 CPI 累计值。",
"tool_key": "macro_china_cpi",
"type": 8,
"extra": null,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 15:00:00",
"update_time": "2024-03-29 15:00:00",
"id": 22,
"api_params": [
{
"name": "start_date",
"description": "开始月份, 使用YYYY-MM-DD 方式表示",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "end_date",
"description": "结束月份, 使用YYYY-MM-DD 方式表示",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "PPI",
"logo": null,
"desc": "中国工业品出厂价格指数(PPI)月度统计数据。返回数据包括:月份,当月 PPI,当月同比增长,当年 PPI 累计值。",
"tool_key": "macro_china_ppi",
"type": 8,
"extra": null,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 15:00:24",
"update_time": "2024-03-29 15:00:24",
"id": 23,
"api_params": [
{
"name": "start_date",
"description": "开始月份, 使用YYYY-MM-DD 方式表示",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "end_date",
"description": "结束月份, 使用YYYY-MM-DD 方式表示",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "货币供应量",
"logo": null,
"desc": "中国货币供应量月度统计数据。返回数据包括:月份,当月 M0、M1、M2数量以及同、环比情况。",
"tool_key": "macro_china_money_supply",
"type": 8,
"extra": null,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 15:00:54",
"update_time": "2024-03-29 15:00:54",
"id": 24,
"api_params": [
{
"name": "start_date",
"description": "开始月份, 使用YYYY-MM-DD 方式表示",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "end_date",
"description": "结束月份, 使用YYYY-MM-DD 方式表示",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "社会消费品零售总额",
"logo": null,
"desc": "中国社会消费品零售总额月度统计数据。返回数据包括:月份,当月总额以及同、环比,当年累计总额以及同比情况。",
"tool_key": "macro_china_consumer_goods_retail",
"type": 8,
"extra": null,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-03-29 15:01:47",
"update_time": "2024-03-29 15:01:47",
"id": 25,
"api_params": [
{
"name": "start_date",
"description": "开始月份, 使用YYYY-MM-DD 方式表示",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "end_date",
"description": "结束月份, 使用YYYY-MM-DD 方式表示",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "PMI",
"logo": null,
"desc": "中国 PMI (采购经理人指数)月度统计数据。返回数据包括:月份制造业 PMI,制造业 PMI 同比增长,非制造业 PMI,非制造业 PMI 同比增长。",
"tool_key": "macro_china_pmi",
"type": 8,
"extra": null,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-04-15 12:01:11",
"update_time": "2024-04-15 12:01:11",
"id": 26,
"api_params": [
{
"name": "start_date",
"description": "开始月份, 使用YYYY-MM-DD 方式表示",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "end_date",
"description": "结束月份, 使用YYYY-MM-DD 方式表示",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "中美国债收益率",
"logo": null,
"desc": "本接口返回指定时间段[start_date,end_date]内交易日的中美两国的 2 年、5 年、10 年、30 年、10 年-2 年收益率数据。start_date表示起始日期,end_date表示结束日期,日期格式例如 2024-04-07",
"tool_key": "macro_bond_zh_us_rate",
"type": 8,
"extra": null,
"is_preset": 1,
"is_delete": 0,
"user_id": null,
"create_time": "2024-04-15 12:03:27",
"update_time": "2024-04-15 12:03:27",
"id": 27,
"api_params": [
{
"name": "start_date",
"description": "开始月份, 使用YYYY-MM-DD 方式表示",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "end_date",
"description": "结束月份, 使用YYYY-MM-DD 方式表示",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
]
},
{
"name": "发送钉钉群消息",
"logo": null,
"desc": "通过钉钉群机器人,快速将消息推送到指定钉钉群组中",
"api_params": [
{
"in": "query",
"name": "url",
"schema": {
"type": "string"
},
"required": true,
"description": "自定义机器人的Wehhook地址"
},
{
"in": "query",
"name": "message",
"schema": {
"type": "string"
},
"required": true,
"description": "发送的文本消息内容"
}
],
"tool_key": "ding_send_message",
"type": 9,
"extra": null,
"is_preset": 1,
"is_delete": 0,
"user_id": 3,
"create_time": "2024-05-08 14:36:50",
"update_time": "2024-05-08 14:36:50",
"id": 28
},
{
"name": "单页面爬取|对应 Scrape 模式",
"logo": null,
"desc": "爬取并返回指定 URL 页面的内容,不会爬取子页面。",
"api_params": [
{
"in": "path",
"name": "target_url",
"schema": {
"type": "string"
},
"required": true,
"description": "要爬取的网站 url"
}
],
"tool_key": "fire_search_scrape",
"type": 10,
"extra": null,
"is_preset": 1,
"is_delete": 0,
"user_id": 3,
"create_time": "2024-05-08 14:36:50",
"update_time": "2025-02-27 19:05:31",
"id": 29
},
{
"name": "获取单网页",
"logo": null,
"desc": "爬取指定URL(支持pdf),并将其转换为适合大模型处理的markdown格式",
"api_params": [
{
"in": "path",
"name": "target_url",
"schema": {
"type": "string"
},
"required": true,
"description": "要获取的目标网页"
}
],
"tool_key": "jina_get_markdown",
"type": 11,
"is_preset": 1,
"is_delete": 0,
"user_id": 3,
"create_time": "2024-05-08 14:36:50",
"update_time": "2025-02-14 15:06:45",
"id": 30
},
{
"name": "Stable diffusion",
"logo": null,
"desc": "使用Stable Diffusion模型,根据用户提示词生成图像",
"api_params": [
{
"in": "path",
"name": "prompt",
"schema": {
"type": "string"
},
"required": true,
"description": "提示词生成图片描述词"
},
{
"in": "path",
"name": "negative_prompt",
"schema": {
"type": "string"
},
"required": false,
"description": "不希望图片包含的内容"
}
],
"tool_key": "silicon_stable_diffusion",
"type": 12,
"is_preset": 1,
"is_delete": 0,
"user_id": 3,
"create_time": "2024-05-08 14:36:50",
"update_time": "2025-02-20 11:47:25",
"id": 31
},
{
"name": "Flux",
"logo": null,
"desc": "使用Flux模型,根据用户提示词生成图像",
"api_params": [
{
"in": "path",
"name": "prompt",
"schema": {
"type": "string"
},
"required": true,
"description": "提示词生成图片描述词(建议使用英文)"
}
],
"tool_key": "silicon_flux",
"type": 12,
"is_preset": 1,
"is_delete": 0,
"user_id": 3,
"create_time": "2024-05-08 14:36:50",
"update_time": "2025-02-20 11:47:25",
"id": 32
},
{
"name": "向指定用户或者群聊发送消息",
"logo": null,
"desc": "向指定用户或者群聊发送消息",
"api_params": [
{
"in": "query",
"name": "message",
"schema": {
"type": "string"
},
"required": true,
"description": "发送的文本消息内容"
},
{
"in": "query",
"name": "receive_id",
"schema": {
"type": "string"
},
"required": true,
"description": "消息接收者的id"
},
{
"in": "query",
"name": "receive_id_type",
"schema": {
"type": "string"
},
"required": true,
"description": "用户id类型,可选值:open_id(标识一个用户在某个应用中的身份);union_id(标识一个用户在某个应用开发商下的身份);user_id(标识一个用户在某个租户内的身份);email(以用户的真实邮箱来标识用户);chat_id(以群 ID 来标识群聊)"
}
],
"tool_key": "feishu_send_message",
"type": 13,
"is_preset": 1,
"is_delete": 0,
"user_id": 3,
"create_time": "2024-05-08 14:36:50",
"update_time": "2025-02-24 14:35:04",
"id": 33
},
{
"name": "发送企业微信群消息",
"logo": null,
"desc": "通过企业微信群机器人,快速将消息推送到指定企业微信群组中",
"api_params": [
{
"in": "query",
"name": "url",
"schema": {
"type": "string"
},
"required": true,
"description": "微信机器人的webhook地址"
},
{
"in": "query",
"name": "message",
"schema": {
"type": "string"
},
"required": true,
"description": "发送的消息内容"
}
],
"tool_key": "wechat_send_message",
"type": 15,
"extra": "{}",
"is_preset": 1,
"is_delete": 0,
"user_id": 3,
"create_time": "2024-05-08 14:36:50",
"update_time": "2025-02-08 10:55:32",
"id": 34
},
{
"name": "发送邮件",
"logo": null,
"desc": "给单个或多个邮箱发送邮件(多个邮箱账号使用\",\"分隔)",
"api_params": [
{
"in": "query",
"name": "receiver",
"schema": {
"type": "string"
},
"required": true,
"description": "接受邮件的邮箱地址,确定邮件发送对象"
},
{
"in": "query",
"name": "subject",
"schema": {
"type": "string"
},
"required": false,
"description": "邮件主题"
},
{
"in": "query",
"name": "content",
"schema": {
"type": "string"
},
"required": true,
"description": "邮件的正文内容"
}
],
"tool_key": "email_send_email",
"type": 14,
"is_preset": 1,
"is_delete": 0,
"user_id": 3,
"create_time": "2024-05-08 14:36:50",
"update_time": "2025-03-03 22:10:20",
"id": 35
},
{
"name": "深度爬取|对应 Crawl 模式",
"logo": null,
"desc": "爬取并返回指定 URL 以及所有可访问子页面的内容。",
"api_params": [
{
"in": "path",
"name": "target_url",
"schema": {
"type": "string"
},
"required": true,
"description": "要爬取网站的起始 url。"
}
],
"tool_key": "fire_search_crawl",
"type": 10,
"is_preset": 1,
"is_delete": 0,
"user_id": 3,
"create_time": "2024-05-08 14:36:50",
"update_time": "2025-02-27 19:05:31",
"id": 36
},
{
"name": "获取指定单聊、群聊的历史消息",
"logo": null,
"desc": "支持在单聊或群聊中快速获取相关内容",
"api_params": [
{
"in": "query",
"name": "container_id",
"schema": {
"type": "string"
},
"required": true,
"description": "单聊或群聊的id,或话题 id"
},
{
"in": "query",
"name": "container_id_type",
"schema": {
"type": "string"
},
"required": true,
"description": "容器类型。 可选值有: chat:包含单聊(p2p)和群聊(group); thread:话题 。"
},
{
"in": "query",
"name": "start_time",
"schema": {
"type": "string"
},
"required": false,
"description": "待查询历史信息的起始时间,秒级时间戳。 注意:thread 容器类型暂不支持获取指定时间范围内的消息。"
},
{
"in": "query",
"name": "end_time",
"schema": {
"type": "string"
},
"required": false,
"description": "待查询历史信息的结束时间,秒级时间戳。注意:thread 容器类型暂不支持获取指定时间范围内的消息。"
},
{
"in": "query",
"name": "page_size",
"schema": {
"type": "string"
},
"required": false,
"description": "分页大小,单次请求所返回的数据条目数,默认值20,取值范围1~50。"
},
{
"in": "query",
"name": "sort_type",
"schema": {
"type": "string"
},
"required": false,
"description": "可选值有:ByCreateTimeAsc(按消息创建时间升序排列);ByCreateTimeDesc(按消息创建时间降序排列)"
},
{
"in": "query",
"name": "page_token",
"schema": {
"type": "string"
},
"required": false,
"description": "分页标记,第一次请求不填,表示从头开始遍历;分页查询结果还有更多项时会同时返回新的 page_token,下次遍历可采用该 page_token 获取查询结果"
}
],
"tool_key": "feishu_get_chat_messages",
"type": 13,
"is_preset": 1,
"is_delete": 0,
"user_id": 3,
"create_time": "2024-05-08 14:36:50",
"update_time": "2025-02-24 14:35:04",
"id": 37
},
{
"name": "联网搜索",
"logo": null,
"desc": "使用 query 进行联网检索并返回结果。",
"api_params": [
{
"name": "query",
"description": "Search query",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
],
"tool_key": "web_search",
"type": 16,
"is_preset": 1,
"is_delete": 0,
"user_id": 1,
"id": 38
}
]
================================================
FILE: src/backend/bisheng/database/data/t_gpts_tools_type.json
================================================
[
{
"id": 1,
"name": "时间",
"logo": null,
"description": "获取当前时间",
"auth_method": null,
"api_key": null,
"auth_type": null,
"is_preset": 1,
"user_id": null,
"is_delete": 0,
"create_time": "2024-04-30 10:25:26",
"update_time": "2024-04-30 10:25:26",
"openapi_schema": null
},
{
"id": 2,
"name": "计算器",
"logo": null,
"description": "使用 Python 内置工具进行数学表达式计算",
"auth_method": null,
"api_key": null,
"auth_type": null,
"is_preset": 1,
"user_id": null,
"is_delete": 0,
"create_time": "2024-04-30 10:28:30",
"update_time": "2024-04-30 10:28:30",
"openapi_schema": null
},
{
"id": 3,
"name": "论文获取",
"logo": null,
"description": "从 Arxiv 网站检索论文的工具,输入为检索关键词。",
"auth_method": null,
"api_key": null,
"auth_type": null,
"is_preset": 1,
"user_id": null,
"is_delete": 0,
"create_time": "2024-04-30 10:28:49",
"update_time": "2024-04-30 10:28:49",
"openapi_schema": null
},
{
"id": 4,
"name": "Dalle3绘画",
"logo": "",
"description": "OpenAI 文生图模型",
"auth_method": null,
"api_key": null,
"auth_type": null,
"is_preset": 1,
"user_id": null,
"is_delete": 0,
"create_time": "2024-04-30 10:24:30",
"update_time": "2024-04-30 10:24:30",
"openapi_schema": null
},
{
"id": 5,
"name": "Bing web搜索",
"logo": "",
"description": "BIng 搜索引擎,可联网检索互联网信息,例如天气、汇率、时事等",
"auth_method": null,
"api_key": null,
"auth_type": null,
"is_preset": 1,
"user_id": null,
"is_delete": 0,
"create_time": "2024-04-30 10:23:20",
"update_time": "2024-04-30 10:23:20",
"openapi_schema": null
},
{
"id": 6,
"name": "代码执行器",
"logo": null,
"description": "通过执行代码完成图表绘制、文件处理等编程类操作",
"auth_method": null,
"api_key": null,
"auth_type": null,
"is_preset": 1,
"user_id": null,
"is_delete": 0,
"create_time": "2024-04-30 10:26:07",
"update_time": "2024-04-30 10:26:07",
"openapi_schema": null
},
{
"id": 7,
"name": "天眼查",
"logo": null,
"description": "企业信息查询",
"auth_method": null,
"api_key": null,
"auth_type": null,
"is_preset": 1,
"user_id": null,
"is_delete": 0,
"create_time": "2024-04-30 10:26:40",
"update_time": "2024-04-30 10:26:40",
"openapi_schema": null
},
{
"id": 8,
"name": "经济金融数据",
"logo": null,
"description": "包含股票、基金、期货等行情数据和宏观经济、公司财务等基本面数据的金融大数据平台",
"auth_method": null,
"api_key": null,
"auth_type": null,
"is_preset": 1,
"user_id": null,
"is_delete": 0,
"create_time": "2024-04-30 10:27:12",
"update_time": "2024-04-30 10:27:12",
"openapi_schema": null
},
{
"id": 9,
"name": "钉钉",
"logo": "",
"description": "钉钉群机器人发送消息工具",
"server_host": "",
"auth_method": 0,
"api_key": "",
"auth_type": "basic",
"is_preset": 1,
"user_id": null,
"is_delete": 0,
"create_time": "2024-04-30 10:26:40",
"update_time": "2025-01-10 21:22:37",
"openapi_schema": null
},
{
"id": 10,
"name": "Firecrawl",
"logo": "",
"description": "指定 URL 爬取网页内容,并将其转换为 Markdown 格式",
"server_host": "",
"auth_method": 0,
"api_key": "",
"auth_type": "basic",
"is_preset": 1,
"user_id": null,
"is_delete": 0,
"create_time": "2024-04-30 10:26:40",
"update_time": "2025-02-27 19:05:31",
"openapi_schema": null
},
{
"id": 11,
"name": "Jina AI",
"logo": "",
"description": "将目标网址(支持 PDF)内容转换为大模型可处理的 Markdown 格式",
"server_host": "",
"auth_method": 0,
"api_key": "",
"auth_type": "basic",
"is_preset": 1,
"user_id": null,
"is_delete": 0,
"create_time": "2024-04-30 10:26:40",
"update_time": "2025-02-14 15:06:45",
"openapi_schema": null
},
{
"id": 12,
"name": "SiliconFlow",
"logo": "",
"description": "基于文本提示生成高质量图像,支持 Flux 和 Stable Diffusion 模型",
"server_host": "",
"auth_method": 0,
"api_key": "",
"auth_type": "basic",
"is_preset": 1,
"user_id": null,
"is_delete": 0,
"create_time": "2024-04-30 10:26:40",
"update_time": "2025-02-20 11:47:25",
"openapi_schema": null
},
{
"id": 13,
"name": "飞书消息",
"logo": "",
"description": "支持获取飞书单聊或群聊历史消息,向指定用户或者群聊发送消息",
"server_host": "",
"auth_method": 0,
"api_key": "",
"auth_type": "basic",
"is_preset": 1,
"user_id": null,
"is_delete": 0,
"create_time": "2024-04-30 10:26:40",
"update_time": "2025-02-24 14:35:04",
"openapi_schema": null
},
{
"id": 14,
"name": "发送邮件",
"logo": "",
"description": "通过smtp协议发送电子邮件",
"server_host": "",
"auth_method": 0,
"api_key": "",
"auth_type": "basic",
"is_preset": 1,
"user_id": null,
"is_delete": 0,
"create_time": "2024-04-30 10:26:40",
"update_time": "2025-03-03 22:10:20",
"openapi_schema": null
},
{
"id": 15,
"name": "企业微信",
"logo": "",
"description": "企业微信机器人发送群消息工具",
"server_host": "",
"auth_method": 0,
"api_key": "",
"auth_type": "basic",
"is_preset": 1,
"user_id": null,
"is_delete": 0,
"create_time": "2024-04-30 10:26:40",
"update_time": "2025-01-10 21:22:37",
"openapi_schema": null
},
{
"id": 16,
"name": "联网搜索",
"logo": "",
"description": "搜索互联网信息,可配置使用不同的搜索引擎,目前支持 Bing、博查、Jina 深度搜索、SerpApi、Tavily。",
"server_host": "",
"auth_method": 0,
"api_key": "",
"auth_type": "basic",
"is_preset": 1,
"user_id": null,
"is_delete": 0,
"openapi_schema": null
}
]
================================================
FILE: src/backend/bisheng/database/data/template.json
================================================
[
{
"update_time": "2024-08-20 16:27:48",
"parameters": null,
"name": "⭐️大模型对话(支持多轮)",
"description": "直接与大模型对话",
"flow_id": "544b7e31a34e4bdcaf2fc02d6bd67f4a",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-08-20 16:27:48",
"id": 171,
"data": {
"edges": [
{
"id": "reactflow__edge-BishengLLM-2839cBishengLLM|BishengLLM-2839c|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-ConversationChain-A1J5dBaseLanguageModel|llm|ConversationChain-A1J5d",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-2839c",
"target": "ConversationChain-A1J5d",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-2839c|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|ConversationChain-A1J5d"
}
],
"nodes": [
{
"id": "ConversationChain-A1J5d",
"data": {
"id": "ConversationChain-A1J5d",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "ConversationChain",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"prompt": {
"l2": false,
"info": "",
"list": false,
"name": "prompt",
"show": false,
"type": "BasePromptTemplate",
"value": {
"_type": "prompt",
"template": "The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.\n\nCurrent conversation:\n{history}\nHuman: {input}\nAI:",
"output_parser": null,
"input_variables": [
"history",
"input"
],
"template_format": "f-string",
"partial_variables": {},
"validate_template": true
},
"l2_name": "prompt",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_key": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "input",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"llm_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "llm_kwargs",
"show": false,
"type": "code",
"l2_name": "llm_kwargs",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "response",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": false,
"type": "BaseLLMOutputParser",
"value": {
"_type": "default"
},
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"return_final_only": {
"l2": false,
"info": "",
"list": false,
"name": "return_final_only",
"show": false,
"type": "bool",
"value": true,
"l2_name": "return_final_only",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Chain to have a conversation and load context from memory.",
"base_classes": [
"ConversationChain",
"LLMChain",
"Chain",
"function"
],
"display_name": "ConversationChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "ConversationChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 301,
"dragging": false,
"position": {
"x": 960.9557711159376,
"y": 247.42733841910135
},
"selected": false,
"positionAbsolute": {
"x": 960.9557711159376,
"y": 247.42733841910135
}
},
{
"id": "BishengLLM-2839c",
"data": {
"id": "BishengLLM-2839c",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 5,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BaseLanguageModel",
"BaseChatModel",
"BishengLLM",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 407,
"dragging": false,
"position": {
"x": 387.2949740637953,
"y": 154.06227685122178
},
"selected": true,
"positionAbsolute": {
"x": 387.2949740637953,
"y": 154.06227685122178
}
}
],
"viewport": {
"x": 417.19304131976264,
"y": 206.78938474334075,
"zoom": 0.598528187050664
}
},
"order_num": 6094817,
"guide_word": null
},
{
"update_time": "2024-08-20 16:32:19",
"parameters": null,
"name": "⭐️ 输入网址进行问答",
"description": "输入网址,进行问答。该技能点击上线按钮以及创建会话时,都需要等待几秒钟,因为需要先执行网址数据爬取的流程。",
"flow_id": "dc4f9e141b8d4cf390ddc2c2c51efd8e",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-08-20 16:32:19",
"id": 172,
"data": {
"edges": [
{
"id": "reactflow__edge-CombineDocsChain-RCPNACombineDocsChain|CombineDocsChain-RCPNA|BaseCombineDocumentsChain|function-RetrievalQA-x5napBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap",
"style": {
"stroke": "#555"
},
"source": "CombineDocsChain-RCPNA",
"target": "RetrievalQA-x5nap",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "CombineDocsChain|CombineDocsChain-RCPNA|BaseCombineDocumentsChain|function",
"targetHandle": "BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap"
},
{
"id": "reactflow__edge-Milvus-CWpaeMilvus|Milvus-CWpae|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever-RetrievalQA-x5napBaseRetriever|retriever|RetrievalQA-x5nap",
"style": {
"stroke": "#555"
},
"source": "Milvus-CWpae",
"target": "RetrievalQA-x5nap",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "Milvus|Milvus-CWpae|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|RetrievalQA-x5nap"
},
{
"id": "reactflow__edge-WebBaseLoader-af6dbWebBaseLoader|WebBaseLoader-af6db|Document-Milvus-CWpaeDocument|documents|Milvus-CWpae",
"style": {
"stroke": "#555"
},
"source": "WebBaseLoader-af6db",
"target": "Milvus-CWpae",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "WebBaseLoader|WebBaseLoader-af6db|Document",
"targetHandle": "Document|documents|Milvus-CWpae"
},
{
"id": "reactflow__edge-OpenAIProxyEmbedding-1771bOpenAIProxyEmbedding|OpenAIProxyEmbedding-1771b|Embeddings-Milvus-CWpaeEmbeddings|embedding|Milvus-CWpae",
"style": {
"stroke": "#555"
},
"source": "OpenAIProxyEmbedding-1771b",
"target": "Milvus-CWpae",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "OpenAIProxyEmbedding|OpenAIProxyEmbedding-1771b|Embeddings",
"targetHandle": "Embeddings|embedding|Milvus-CWpae"
},
{
"id": "reactflow__edge-BishengLLM-db49dBishengLLM|BishengLLM-db49d|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-CombineDocsChain-RCPNABaseLanguageModel|llm|CombineDocsChain-RCPNA",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-db49d",
"target": "CombineDocsChain-RCPNA",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-db49d|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|CombineDocsChain-RCPNA"
}
],
"nodes": [
{
"id": "CombineDocsChain-RCPNA",
"data": {
"id": "CombineDocsChain-RCPNA",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "load_qa_chain",
"token_max": {
"l2": false,
"info": "当前只对stuff 生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"l2_name": "token_max",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max"
},
"chain_type": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "Load question answering chain.",
"base_classes": [
"BaseCombineDocumentsChain",
"function"
],
"display_name": "CombineDocsChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "CombineDocsChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 377,
"position": {
"x": 845.0164562381523,
"y": 124.74220334881426
},
"selected": false,
"positionAbsolute": {
"x": 845.0164562381523,
"y": 124.74220334881426
}
},
{
"id": "Milvus-CWpae",
"data": {
"id": "Milvus-CWpae",
"node": {
"l2_name": "知识库",
"template": {
"_type": "Milvus",
"drop_old": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"documents": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"index_params": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_params": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"collection_name": {
"l2": false,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "选择知识库",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"collection_id": ""
},
"connection_args": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"consistency_level": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"Milvus",
"VectorStore",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 347,
"dragging": false,
"position": {
"x": 857.7079649166786,
"y": 667.3224068392545
},
"selected": false,
"positionAbsolute": {
"x": 857.7079649166786,
"y": 667.3224068392545
}
},
{
"id": "RetrievalQA-x5nap",
"data": {
"id": "RetrievalQA-x5nap",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "RetrievalQA",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_key": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"retriever": {
"l2": false,
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "retriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"combine_documents_chain": {
"l2": false,
"info": "",
"list": false,
"name": "combine_documents_chain",
"show": true,
"type": "BaseCombineDocumentsChain",
"l2_name": "combine_documents_chain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Chain for question-answering against an index.",
"base_classes": [
"RetrievalQA",
"Chain",
"BaseRetrievalQA",
"function"
],
"display_name": "RetrievalQA",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"
},
"type": "RetrievalQA",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 317,
"position": {
"x": 1521.2877663953464,
"y": 287.6148502766154
},
"selected": false,
"positionAbsolute": {
"x": 1521.2877663953464,
"y": 287.6148502766154
}
},
{
"id": "WebBaseLoader-af6db",
"data": {
"id": "WebBaseLoader-af6db",
"node": {
"l2_name": "输入网址",
"template": {
"_type": "WebBaseLoader",
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": true,
"type": "code",
"value": "{}",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Metadata"
},
"web_path": {
"l2": true,
"info": "",
"list": false,
"name": "web_path",
"show": true,
"type": "str",
"value": "https://dataelem.feishu.cn/wiki/ZxW6wZyAJicX4WkG0NqcWsbynde",
"l2_name": "网址",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Web Page"
}
},
"description": "Load HTML pages using `urllib` and parse them with `BeautifulSoup'.",
"base_classes": [
"Document"
],
"display_name": "WebBaseLoader",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/web_base"
},
"type": "WebBaseLoader",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 357,
"position": {
"x": 333.05874389504135,
"y": 651.7320290450776
},
"positionAbsolute": {
"x": 333.05874389504135,
"y": 651.7320290450776
}
},
{
"id": "OpenAIProxyEmbedding-1771b",
"data": {
"id": "OpenAIProxyEmbedding-1771b",
"node": {
"template": {
"_type": "proxy_embedding",
"proxy_url": {
"info": "",
"list": false,
"name": "proxy_url",
"show": false,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "http://43.133.35.137:8080"
}
},
"description": " 使用自建的embedding服务使用openai进行embed ",
"base_classes": [
"Embeddings"
],
"display_name": "OpenAIProxyEmbedding",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "OpenAIProxyEmbedding",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 173,
"position": {
"x": 345.75546354081786,
"y": 1048.504517975594
},
"positionAbsolute": {
"x": 345.75546354081786,
"y": 1048.504517975594
}
},
{
"id": "BishengLLM-db49d",
"data": {
"id": "BishengLLM-db49d",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 5,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BaseLanguageModel",
"BaseChatModel",
"BishengLLM",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 407,
"dragging": false,
"position": {
"x": 338.00327145994027,
"y": 66.93400331593091
},
"selected": false,
"positionAbsolute": {
"x": 338.00327145994027,
"y": 66.93400331593091
}
}
],
"viewport": {
"x": 267.90795205311633,
"y": 35.63343348513274,
"zoom": 0.6777805639494686
}
},
"order_num": 6160352,
"guide_word": null
},
{
"update_time": "2024-08-20 16:33:49",
"parameters": null,
"name": "⭐️ 表格数据问答",
"description": "上传CSV进行问答,使用CSV专用解析模块,相比通用解析模块,效果更好。\nExcel文件可以转成CSV后上传体验。",
"flow_id": "b4a7482adcae44aa819f9ea5c7617ae5",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-08-20 16:33:49",
"id": 173,
"data": {
"edges": [
{
"id": "reactflow__edge-CombineDocsChain-RCPNACombineDocsChain|CombineDocsChain-RCPNA|BaseCombineDocumentsChain|function-RetrievalQA-x5napBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap",
"style": {
"stroke": "#555"
},
"source": "CombineDocsChain-RCPNA",
"target": "RetrievalQA-x5nap",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "CombineDocsChain|CombineDocsChain-RCPNA|BaseCombineDocumentsChain|function",
"targetHandle": "BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap"
},
{
"id": "reactflow__edge-Milvus-CWpaeMilvus|Milvus-CWpae|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever-RetrievalQA-x5napBaseRetriever|retriever|RetrievalQA-x5nap",
"style": {
"stroke": "#555"
},
"source": "Milvus-CWpae",
"target": "RetrievalQA-x5nap",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "Milvus|Milvus-CWpae|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|RetrievalQA-x5nap"
},
{
"id": "reactflow__edge-OpenAIProxyEmbedding-1771bOpenAIProxyEmbedding|OpenAIProxyEmbedding-1771b|Embeddings-Milvus-CWpaeEmbeddings|embedding|Milvus-CWpae",
"style": {
"stroke": "#555"
},
"source": "OpenAIProxyEmbedding-1771b",
"target": "Milvus-CWpae",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "OpenAIProxyEmbedding|OpenAIProxyEmbedding-1771b|Embeddings",
"targetHandle": "Embeddings|embedding|Milvus-CWpae"
},
{
"id": "reactflow__edge-CSVLoader-854c0CSVLoader|CSVLoader-854c0|Document-Milvus-CWpaeDocument|documents|Milvus-CWpae",
"style": {
"stroke": "#555"
},
"source": "CSVLoader-854c0",
"target": "Milvus-CWpae",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "CSVLoader|CSVLoader-854c0|Document",
"targetHandle": "Document|documents|Milvus-CWpae"
},
{
"id": "reactflow__edge-InputFileNode-e4363InputFileNode|InputFileNode-e4363|fileNode-CSVLoader-854c0fileNode|file_path|CSVLoader-854c0",
"style": {
"stroke": "#555"
},
"source": "InputFileNode-e4363",
"target": "CSVLoader-854c0",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "InputFileNode|InputFileNode-e4363|fileNode",
"targetHandle": "fileNode|file_path|CSVLoader-854c0"
},
{
"id": "reactflow__edge-BishengLLM-83706BishengLLM|BishengLLM-83706|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-CombineDocsChain-RCPNABaseLanguageModel|llm|CombineDocsChain-RCPNA",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-83706",
"target": "CombineDocsChain-RCPNA",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-83706|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|CombineDocsChain-RCPNA"
}
],
"nodes": [
{
"id": "CombineDocsChain-RCPNA",
"data": {
"id": "CombineDocsChain-RCPNA",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "load_qa_chain",
"token_max": {
"l2": false,
"info": "当前只对stuff 生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"l2_name": "token_max",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max"
},
"chain_type": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "Load question answering chain.",
"base_classes": [
"BaseCombineDocumentsChain",
"function"
],
"display_name": "CombineDocsChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "CombineDocsChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 377,
"position": {
"x": 845.0164562381523,
"y": 124.74220334881426
},
"selected": false,
"positionAbsolute": {
"x": 845.0164562381523,
"y": 124.74220334881426
}
},
{
"id": "Milvus-CWpae",
"data": {
"id": "Milvus-CWpae",
"node": {
"l2_name": "知识库",
"template": {
"_type": "Milvus",
"drop_old": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"documents": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"index_params": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_params": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"collection_name": {
"l2": false,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "选择知识库",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"collection_id": ""
},
"connection_args": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"consistency_level": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"Milvus",
"VectorStore",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 347,
"dragging": false,
"position": {
"x": 857.7079649166786,
"y": 667.3224068392545
},
"selected": false,
"positionAbsolute": {
"x": 857.7079649166786,
"y": 667.3224068392545
}
},
{
"id": "RetrievalQA-x5nap",
"data": {
"id": "RetrievalQA-x5nap",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "RetrievalQA",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_key": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"retriever": {
"l2": false,
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "retriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"combine_documents_chain": {
"l2": false,
"info": "",
"list": false,
"name": "combine_documents_chain",
"show": true,
"type": "BaseCombineDocumentsChain",
"l2_name": "combine_documents_chain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Chain for question-answering against an index.",
"base_classes": [
"RetrievalQA",
"Chain",
"BaseRetrievalQA",
"function"
],
"display_name": "RetrievalQA",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"
},
"type": "RetrievalQA",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 317,
"position": {
"x": 1521.2877663953464,
"y": 287.6148502766154
},
"selected": false,
"positionAbsolute": {
"x": 1521.2877663953464,
"y": 287.6148502766154
}
},
{
"id": "OpenAIProxyEmbedding-1771b",
"data": {
"id": "OpenAIProxyEmbedding-1771b",
"node": {
"template": {
"_type": "proxy_embedding",
"proxy_url": {
"info": "",
"list": false,
"name": "proxy_url",
"show": false,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "http://43.133.35.137:8080"
}
},
"description": " 使用自建的embedding服务使用openai进行embed ",
"base_classes": [
"Embeddings"
],
"display_name": "OpenAIProxyEmbedding",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "OpenAIProxyEmbedding",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 173,
"dragging": false,
"position": {
"x": 345.75546354081786,
"y": 1048.504517975594
},
"selected": false,
"positionAbsolute": {
"x": 345.75546354081786,
"y": 1048.504517975594
}
},
{
"id": "CSVLoader-854c0",
"data": {
"id": "CSVLoader-854c0",
"node": {
"template": {
"_type": "CSVLoader",
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": true,
"type": "code",
"value": "{}",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Metadata"
},
"file_path": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "fileNode",
"value": "",
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".csv"
],
"fileTypes": [
"csv"
],
"multiline": false,
"placeholder": ""
}
},
"description": "Load a `CSV` file into a list of Documents.",
"base_classes": [
"Document"
],
"display_name": "CSVLoader",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv"
},
"type": "CSVLoader",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 291,
"position": {
"x": 326.7103840721531,
"y": 672.2493274470351
},
"positionAbsolute": {
"x": 326.7103840721531,
"y": 672.2493274470351
}
},
{
"id": "InputFileNode-e4363",
"data": {
"id": "InputFileNode-e4363",
"node": {
"template": {
"_type": "InputFileNode",
"file_path": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "file",
"value": "",
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".csv"
],
"fileTypes": [
"csv"
],
"file_path": null,
"multiline": false,
"placeholder": ""
},
"file_type": {
"info": "Tips for which file should upload",
"list": false,
"name": "file_type",
"show": true,
"type": "str",
"value": "CSV文件",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "提示上传文件类型",
"display_name": "Name"
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"fileNode"
],
"display_name": "InputFileNode",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "InputFileNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 337,
"dragging": false,
"position": {
"x": -176.39713189174194,
"y": 643.681708244038
},
"selected": false,
"positionAbsolute": {
"x": -176.39713189174194,
"y": 643.681708244038
}
},
{
"id": "BishengLLM-83706",
"data": {
"id": "BishengLLM-83706",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 5,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BaseLanguageModel",
"BaseChatModel",
"BishengLLM",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 407,
"dragging": false,
"position": {
"x": 318.5459219608139,
"y": 81.68804102649821
},
"selected": true,
"positionAbsolute": {
"x": 318.5459219608139,
"y": 81.68804102649821
}
}
],
"viewport": {
"x": 270.09576536959617,
"y": 21.63343348513274,
"zoom": 0.6777805639494686
}
},
"order_num": 6225887,
"guide_word": null
},
{
"update_time": "2024-08-20 16:43:27",
"parameters": null,
"name": "☘️合同审核",
"description": "上传合同文件,自动触发预设的审查问题",
"flow_id": "cfca77afb829477190d11b9caccaa9c4",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-08-20 16:43:27",
"id": 175,
"data": {
"edges": [
{
"id": "reactflow__edge-CombineDocsChain-5EyWUCombineDocsChain|CombineDocsChain-5EyWU|BaseCombineDocumentsChain|function-RetrievalQA-wKjqvBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-wKjqv",
"style": {
"stroke": "#555"
},
"source": "CombineDocsChain-5EyWU",
"target": "RetrievalQA-wKjqv",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "CombineDocsChain|CombineDocsChain-5EyWU|BaseCombineDocumentsChain|function",
"targetHandle": "BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-wKjqv"
},
{
"id": "reactflow__edge-RetrievalQA-wKjqvRetrievalQA|RetrievalQA-wKjqv|Chain|RetrievalQA|BaseRetrievalQA|function-Tool-0dIGDfunction|func|Tool-0dIGD",
"style": {
"stroke": "#555"
},
"source": "RetrievalQA-wKjqv",
"target": "Tool-0dIGD",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "RetrievalQA|RetrievalQA-wKjqv|BaseRetrievalQA|Chain|RetrievalQA|function",
"targetHandle": "function|func|Tool-0dIGD"
},
{
"id": "reactflow__edge-Milvus-hs3JXMilvus|Milvus-hs3JX|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever-RetrievalQA-wKjqvBaseRetriever|retriever|RetrievalQA-wKjqv",
"style": {
"stroke": "#555"
},
"source": "Milvus-hs3JX",
"target": "RetrievalQA-wKjqv",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "Milvus|Milvus-hs3JX|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|RetrievalQA-wKjqv"
},
{
"id": "reactflow__edge-Tool-0dIGDTool|Tool-0dIGD|Tool|BaseTool-ZeroShotAgent-Vpn4kBaseTool|tools|ZeroShotAgent-Vpn4k",
"style": {
"stroke": "#555"
},
"source": "Tool-0dIGD",
"target": "ZeroShotAgent-Vpn4k",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "Tool|Tool-0dIGD|Tool|BaseTool",
"targetHandle": "BaseTool|tools|ZeroShotAgent-Vpn4k"
},
{
"id": "reactflow__edge-OpenAIProxyEmbedding-5TAiXOpenAIProxyEmbedding|OpenAIProxyEmbedding-5TAiX|Embeddings-Milvus-hs3JXEmbeddings|embedding|Milvus-hs3JX",
"style": {
"stroke": "#555"
},
"source": "OpenAIProxyEmbedding-5TAiX",
"target": "Milvus-hs3JX",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "OpenAIProxyEmbedding|OpenAIProxyEmbedding-5TAiX|Embeddings",
"targetHandle": "Embeddings|embedding|Milvus-hs3JX"
},
{
"id": "reactflow__edge-BingSearchAPIWrapper-9285QBingSearchAPIWrapper|BingSearchAPIWrapper-9285Q|BingSearchAPIWrapper-BingSearchRun-TAJzwBingSearchAPIWrapper|api_wrapper|BingSearchRun-TAJzw",
"style": {
"stroke": "#555"
},
"source": "BingSearchAPIWrapper-9285Q",
"target": "BingSearchRun-TAJzw",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "BingSearchAPIWrapper|BingSearchAPIWrapper-9285Q|BingSearchAPIWrapper",
"targetHandle": "BingSearchAPIWrapper|api_wrapper|BingSearchRun-TAJzw"
},
{
"id": "reactflow__edge-BingSearchRun-TAJzwBingSearchRun|BingSearchRun-TAJzw|Tool|BaseTool|BaseTool|BingSearchRun-ZeroShotAgent-Vpn4kBaseTool|tools|ZeroShotAgent-Vpn4k",
"style": {
"stroke": "#555"
},
"source": "BingSearchRun-TAJzw",
"target": "ZeroShotAgent-Vpn4k",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "BingSearchRun|BingSearchRun-TAJzw|Tool|BaseTool|BingSearchRun|BaseTool",
"targetHandle": "BaseTool|tools|ZeroShotAgent-Vpn4k"
},
{
"id": "reactflow__edge-Calculator-g6AEOCalculator|Calculator-g6AEO|Tool|BaseTool-ZeroShotAgent-Vpn4kBaseTool|tools|ZeroShotAgent-Vpn4k",
"style": {
"stroke": "#555"
},
"source": "Calculator-g6AEO",
"target": "ZeroShotAgent-Vpn4k",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "Calculator|Calculator-g6AEO|Tool|BaseTool",
"targetHandle": "BaseTool|tools|ZeroShotAgent-Vpn4k"
},
{
"id": "reactflow__edge-InputNode-LENRkInputNode|InputNode-LENRk|input-ZeroShotAgent-Vpn4kinput|input_node|ZeroShotAgent-Vpn4k",
"style": {
"stroke": "#555"
},
"source": "InputNode-LENRk",
"target": "ZeroShotAgent-Vpn4k",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "InputNode|InputNode-LENRk|input",
"targetHandle": "input|input_node|ZeroShotAgent-Vpn4k"
},
{
"id": "reactflow__edge-PyPDFLoader-nVufmPyPDFLoader|PyPDFLoader-nVufm|Document-RecursiveCharacterTextSplitter-ahXPxDocument|documents|RecursiveCharacterTextSplitter-ahXPx",
"style": {
"stroke": "#555"
},
"source": "PyPDFLoader-nVufm",
"target": "RecursiveCharacterTextSplitter-ahXPx",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "PyPDFLoader|PyPDFLoader-nVufm|Document",
"targetHandle": "Document|documents|RecursiveCharacterTextSplitter-ahXPx"
},
{
"id": "reactflow__edge-RecursiveCharacterTextSplitter-ahXPxRecursiveCharacterTextSplitter|RecursiveCharacterTextSplitter-ahXPx|Document-Milvus-hs3JXDocument|documents|Milvus-hs3JX",
"style": {
"stroke": "#555"
},
"source": "RecursiveCharacterTextSplitter-ahXPx",
"target": "Milvus-hs3JX",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "RecursiveCharacterTextSplitter|RecursiveCharacterTextSplitter-ahXPx|Document",
"targetHandle": "Document|documents|Milvus-hs3JX"
},
{
"id": "reactflow__edge-BishengLLM-a591dBishengLLM|BishengLLM-a591d|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-CombineDocsChain-5EyWUBaseLanguageModel|llm|CombineDocsChain-5EyWU",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-a591d",
"target": "CombineDocsChain-5EyWU",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-a591d|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|CombineDocsChain-5EyWU"
},
{
"id": "reactflow__edge-BishengLLM-a591dBishengLLM|BishengLLM-a591d|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-ZeroShotAgent-Vpn4kBaseLanguageModel|llm|ZeroShotAgent-Vpn4k",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-a591d",
"target": "ZeroShotAgent-Vpn4k",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-a591d|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|ZeroShotAgent-Vpn4k"
},
{
"id": "reactflow__edge-BishengLLM-a591dBishengLLM|BishengLLM-a591d|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-Calculator-g6AEOBaseLanguageModel|llm|Calculator-g6AEO",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-a591d",
"target": "Calculator-g6AEO",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-a591d|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|Calculator-g6AEO"
},
{
"id": "reactflow__edge-InputFileNode-dd5fcInputFileNode|InputFileNode-dd5fc|fileNode-PyPDFLoader-nVufmfileNode|file_path|PyPDFLoader-nVufm",
"style": {
"stroke": "#555"
},
"source": "InputFileNode-dd5fc",
"target": "PyPDFLoader-nVufm",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "InputFileNode|InputFileNode-dd5fc|fileNode",
"targetHandle": "fileNode|file_path|PyPDFLoader-nVufm"
}
],
"nodes": [
{
"id": "CombineDocsChain-5EyWU",
"data": {
"id": "CombineDocsChain-5EyWU",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "load_qa_chain",
"prompt": {
"l2": false,
"info": "只对Stuff类型生效",
"list": false,
"name": "prompt",
"type": "BasePromptTemplate",
"l2_name": "prompt",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "prompt"
},
"token_max": {
"l2": false,
"info": "只对Stuff类型生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"l2_name": "token_max",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max"
},
"chain_type": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "Load question answering chain.",
"base_classes": [
"BaseCombineDocumentsChain",
"function"
],
"display_name": "CombineDocsChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "CombineDocsChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 377,
"position": {
"x": 1600.092442163245,
"y": 227.94525786055965
},
"selected": false,
"positionAbsolute": {
"x": 1600.092442163245,
"y": 227.94525786055965
}
},
{
"id": "RetrievalQA-wKjqv",
"data": {
"id": "RetrievalQA-wKjqv",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "RetrievalQA",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_key": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"retriever": {
"l2": false,
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "retriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"combine_documents_chain": {
"l2": false,
"info": "",
"list": false,
"name": "combine_documents_chain",
"show": true,
"type": "BaseCombineDocumentsChain",
"l2_name": "combine_documents_chain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": false,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Chain for question-answering against an index.",
"base_classes": [
"BaseRetrievalQA",
"Chain",
"RetrievalQA",
"function"
],
"display_name": "RetrievalQA",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"
},
"type": "RetrievalQA",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 317,
"dragging": false,
"position": {
"x": 2214.008643017949,
"y": 410.0707219409365
},
"selected": false,
"positionAbsolute": {
"x": 2214.008643017949,
"y": 410.0707219409365
}
},
{
"id": "Tool-0dIGD",
"data": {
"id": "Tool-0dIGD",
"node": {
"template": {
"func": {
"l2": false,
"info": "",
"list": false,
"name": "func",
"show": true,
"type": "function",
"l2_name": "func",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"name": {
"l2": false,
"info": "",
"list": false,
"name": "name",
"show": true,
"type": "str",
"value": "Basic_information",
"l2_name": "name",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"_type": "Tool",
"description": {
"l2": false,
"info": "",
"list": false,
"name": "description",
"show": true,
"type": "str",
"value": "如果需要知道关于这份合同的各方面信息,可以使用该工具。如:\n- 合同的价款是多少?\n- 合同的甲方和乙方分别是谁?\n- 合同关于违约金是如何约定的?\n- 合同的免责条款是什么?\n",
"l2_name": "description",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"return_direct": {
"l2": false,
"info": "",
"list": false,
"name": "return_direct",
"show": true,
"type": "bool",
"value": false,
"l2_name": "return_direct",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "Converts a chain, agent or function into a tool.",
"base_classes": [
"Tool",
"BaseTool"
],
"display_name": "Tool",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "Tool",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 445,
"position": {
"x": 2726.848698975115,
"y": 439.56467505828414
},
"selected": false,
"positionAbsolute": {
"x": 2726.848698975115,
"y": 439.56467505828414
}
},
{
"id": "Milvus-hs3JX",
"data": {
"id": "Milvus-hs3JX",
"node": {
"template": {
"_type": "Milvus",
"drop_old": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"documents": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"index_params": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_params": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"collection_name": {
"l2": false,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "collection_name",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"collection_id": ""
},
"connection_args": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"consistency_level": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"VectorStore",
"Milvus",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 347,
"dragging": false,
"position": {
"x": 1624.5397713340649,
"y": 643.8868403230642
},
"selected": false,
"positionAbsolute": {
"x": 1624.5397713340649,
"y": 643.8868403230642
}
},
{
"id": "ZeroShotAgent-Vpn4k",
"data": {
"id": "ZeroShotAgent-Vpn4k",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"_type": "ZeroShotAgent",
"tools": {
"l2": false,
"info": "",
"list": true,
"name": "tools",
"show": true,
"type": "BaseTool",
"l2_name": "tools",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"prefix": {
"l2": false,
"info": "",
"list": false,
"name": "prefix",
"show": true,
"type": "str",
"value": "Answer the following questions in Chinese as best you can. Think step by step. You have access to the following tools:",
"l2_name": "prefix",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"placeholder": ""
},
"suffix": {
"l2": false,
"info": "",
"list": false,
"name": "suffix",
"show": true,
"type": "str",
"value": "Begin!\n\nQuestion: {query}\nThought:{agent_scratchpad}",
"l2_name": "suffix",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": false,
"type": "AgentOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_variables": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": true,
"type": "str",
"value": [
"query",
"agent_scratchpad"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callback_manager": {
"l2": false,
"info": "",
"list": false,
"name": "callback_manager",
"show": false,
"type": "BaseCallbackManager",
"l2_name": "callback_manager",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"format_instructions": {
"l2": false,
"info": "",
"list": false,
"name": "format_instructions",
"show": true,
"type": "str",
"value": "- If questions are ralated to the tool [Basic_information], you should transmit related-questions on to [Basic_information] with no split.\n\n\nUse the following format:\n\nQuestion: 该合同是根据什么法律签订的?\n# the query question you must answer\nThought: 找到该合同的法律依据\n# you should always think about what to do\nAction: Basic_information\n# the action to take, should be one of [{tool_names}]\nAction Input: 该合同是根据什么法律签订的?\n# the input to the action\nObservation: \n# the result of the action\n... (this Thought/Action/Action Input/Observation can repeat N times)\nThought: I now know the final answer\nFinal Answer: \n# the final answer to the original input question",
"l2_name": "format_instructions",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"placeholder": ""
}
},
"description": "Construct an agent from an LLM and tools.",
"base_classes": [
"ZeroShotAgent",
"Agent",
"BaseSingleActionAgent",
"function"
],
"display_name": "ZeroShotAgent",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/agents/how_to/custom_mrkl_agent"
},
"type": "ZeroShotAgent",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 659,
"dragging": false,
"position": {
"x": 3738.5526393054743,
"y": 722.4823701379853
},
"selected": false,
"positionAbsolute": {
"x": 3738.5526393054743,
"y": 722.4823701379853
}
},
{
"id": "OpenAIProxyEmbedding-5TAiX",
"data": {
"id": "OpenAIProxyEmbedding-5TAiX",
"node": {
"template": {
"_type": "proxy_embedding",
"proxy_url": {
"l2": false,
"info": "",
"list": false,
"name": "proxy_url",
"show": false,
"type": "str",
"value": "",
"l2_name": "proxy_url",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "http://43.133.35.137:8080"
}
},
"description": " 使用自建的embedding服务使用openai进行embed ",
"base_classes": [
"Embeddings"
],
"display_name": "OpenAIProxyEmbedding",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "OpenAIProxyEmbedding",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 173,
"position": {
"x": 901.2922965468372,
"y": 1334.1551610865345
},
"selected": false,
"positionAbsolute": {
"x": 901.2922965468372,
"y": 1334.1551610865345
}
},
{
"id": "BingSearchRun-TAJzw",
"data": {
"id": "BingSearchRun-TAJzw",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": false,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "BingSearchRun",
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"l2": false,
"info": "",
"list": false,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"api_wrapper": {
"l2": false,
"info": "",
"list": false,
"name": "api_wrapper",
"show": true,
"type": "BingSearchAPIWrapper",
"l2_name": "api_wrapper",
"advanced": false,
"password": true,
"required": true,
"multiline": false,
"placeholder": ""
},
"args_schema": {
"l2": false,
"info": "",
"list": false,
"name": "args_schema",
"show": false,
"type": "Type[pydantic.main.BaseModel]",
"l2_name": "args_schema",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"handle_tool_error": {
"l2": false,
"info": "",
"list": false,
"name": "handle_tool_error",
"show": false,
"type": "bool",
"value": false,
"l2_name": "handle_tool_error",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "A wrapper around Bing Search. Useful for when you need to answer questions about current events. Input should be a search query.",
"base_classes": [
"Tool",
"BaseTool",
"BingSearchRun",
"BaseTool"
],
"display_name": "BingSearchRun",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "BingSearchRun",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 249,
"dragging": false,
"position": {
"x": 2740.6814356916484,
"y": 1030.8252309669626
},
"selected": false,
"positionAbsolute": {
"x": 2740.6814356916484,
"y": 1030.8252309669626
}
},
{
"id": "BingSearchAPIWrapper-9285Q",
"data": {
"id": "BingSearchAPIWrapper-9285Q",
"node": {
"template": {
"k": {
"l2": false,
"info": "",
"list": false,
"name": "k",
"show": false,
"type": "int",
"value": 10,
"l2_name": "k",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "BingSearchAPIWrapper",
"bing_search_url": {
"l2": false,
"info": "",
"list": false,
"name": "bing_search_url",
"show": true,
"type": "str",
"value": "https://api.bing.microsoft.com/v7.0/search",
"l2_name": "bing_search_url",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"bing_subscription_key": {
"l2": false,
"info": "",
"list": false,
"name": "bing_subscription_key",
"show": true,
"type": "str",
"value": "137b003c89f04966ac3b1081ee5b10bc",
"l2_name": "bing_subscription_key",
"advanced": false,
"password": true,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "Wrapper for Bing Search API.",
"base_classes": [
"BingSearchAPIWrapper"
],
"display_name": "BingSearchAPIWrapper",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "BingSearchAPIWrapper",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 337,
"dragging": false,
"position": {
"x": 2055.4764429926604,
"y": 1160.385181052582
},
"selected": false,
"positionAbsolute": {
"x": 2055.4764429926604,
"y": 1160.385181052582
}
},
{
"id": "Calculator-g6AEO",
"data": {
"id": "Calculator-g6AEO",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"_type": "Calculator"
},
"description": "Useful for when you need to answer questions about math.",
"base_classes": [
"Tool",
"BaseTool"
],
"display_name": "Calculator",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "Calculator",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 229,
"dragging": false,
"position": {
"x": 2732.119874152286,
"y": 131.7347928894963
},
"selected": false,
"positionAbsolute": {
"x": 2732.119874152286,
"y": 131.7347928894963
}
},
{
"id": "InputNode-LENRk",
"data": {
"id": "InputNode-LENRk",
"node": {
"template": {
"_type": "input",
"input": {
"l2": true,
"info": "",
"list": true,
"name": "input",
"show": true,
"type": "str",
"value": [
"这份合同中有约定价款的支付途径吗?",
"合同中是否约定了履行时间?",
"合同中约定了知识产权侵权责任吗?",
"合同中是否约定了甲方未按期支付款项的违约责任?",
"合同是否约定了解决纠纷的方法?如果是通过仲裁解决纠纷,是否有约定仲裁机构?",
"合同中提到了几次甲方名称?这几次的甲方名称都一样吗?",
"合同中提到了几次乙方名称?提到的乙方名称都一样吗?",
"合同全部费用的大写金额和小写金额是多少?这两个数字一样吗?",
"合同的发票项目是什么?搜索该发票项目对应的一般纳税人税率是多少",
"合同的违约金赔偿利率是多少?合同签订日期是哪年哪月?使用获得的答案,搜索合同签订日期当年当月的中国人民银行授权全国银行间同业拆借中心公布的一年期贷款市场报价利率(LPR)是多少?计算合同的违约金赔偿利率大于LPR的1.5倍吗?"
],
"l2_name": "审核问题",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "输入内容"
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"input"
],
"display_name": "InputNode",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "InputNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 705,
"dragging": false,
"position": {
"x": 3228.770319808037,
"y": -405.0472199949312
},
"selected": false,
"positionAbsolute": {
"x": 3228.770319808037,
"y": -405.0472199949312
}
},
{
"id": "PyPDFLoader-nVufm",
"data": {
"id": "PyPDFLoader-nVufm",
"node": {
"template": {
"_type": "PyPDFLoader",
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": true,
"type": "code",
"value": "{}",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Metadata"
},
"file_path": {
"l2": false,
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "fileNode",
"value": "",
"l2_name": "file_path",
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".pdf"
],
"fileTypes": [
"pdf"
],
"multiline": false,
"placeholder": ""
}
},
"description": "Loads a PDF with pypdf and chunks at character level.",
"base_classes": [
"Document"
],
"display_name": "PyPDFLoader",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/pdf"
},
"type": "PyPDFLoader",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 311,
"position": {
"x": 545.6794870854769,
"y": 576.4247493553407
},
"selected": false,
"positionAbsolute": {
"x": 545.6794870854769,
"y": 576.4247493553407
}
},
{
"id": "RecursiveCharacterTextSplitter-ahXPx",
"data": {
"id": "RecursiveCharacterTextSplitter-ahXPx",
"node": {
"template": {
"_type": "RecursiveCharacterTextSplitter",
"documents": {
"l2": false,
"info": "",
"list": false,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"chunk_size": {
"l2": false,
"info": "",
"list": false,
"name": "chunk_size",
"show": true,
"type": "int",
"value": 1000,
"l2_name": "chunk_size",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Chunk Size"
},
"separators": {
"l2": false,
"info": "",
"list": false,
"name": "separators",
"show": true,
"type": "str",
"value": "\\n",
"l2_name": "separators",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Separator"
},
"chunk_overlap": {
"l2": false,
"info": "",
"list": false,
"name": "chunk_overlap",
"show": true,
"type": "int",
"value": 200,
"l2_name": "chunk_overlap",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Chunk Overlap"
},
"separator_type": {
"l2": false,
"info": "",
"list": true,
"name": "separator_type",
"show": true,
"type": "str",
"value": "Text",
"l2_name": "separator_type",
"options": [
"Text",
"cpp",
"go",
"html",
"java",
"js",
"latex",
"markdown",
"php",
"proto",
"python",
"rst",
"ruby",
"rust",
"scala",
"sol",
"swift"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Separator Type"
}
},
"description": "Implementation of splitting text that looks at characters.",
"base_classes": [
"Document"
],
"display_name": "RecursiveCharacterTextSplitter",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/recursive_text_splitter"
},
"type": "RecursiveCharacterTextSplitter",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 561,
"position": {
"x": 993.2830986988388,
"y": 672.9264454371207
},
"selected": false,
"positionAbsolute": {
"x": 993.2830986988388,
"y": 672.9264454371207
}
},
{
"id": "BishengLLM-a591d",
"data": {
"id": "BishengLLM-a591d",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 5,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BaseLanguageModel",
"BaseChatModel",
"BishengLLM",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 407,
"dragging": false,
"position": {
"x": 1053.9828212208936,
"y": 59.894169470406155
},
"selected": false,
"positionAbsolute": {
"x": 1053.9828212208936,
"y": 59.894169470406155
}
},
{
"id": "InputFileNode-dd5fc",
"data": {
"id": "InputFileNode-dd5fc",
"node": {
"beta": false,
"template": {
"_type": "InputFileNode",
"file_path": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "file",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".pdf"
],
"fileTypes": [
"pdf"
],
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "File Path",
"model_config": {}
},
"file_type": {
"info": "Tips for which file should upload",
"list": false,
"name": "file_type",
"show": true,
"type": "str",
"value": "请上传文件",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "提示上传文件类型",
"display_name": "Name",
"model_config": {}
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"fileNode"
],
"display_name": "InputFileNode",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "InputFileNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 337,
"dragging": false,
"position": {
"x": 66.88900058530322,
"y": 650.6996948374481
},
"selected": false,
"positionAbsolute": {
"x": 66.88900058530322,
"y": 650.6996948374481
}
}
],
"viewport": {
"x": -20.328962469404587,
"y": -153.06745791725848,
"zoom": 0.9467769276749988
}
},
"order_num": 6291422,
"guide_word": null
},
{
"update_time": "2024-08-20 16:45:43",
"parameters": null,
"name": "⭐️角色扮演",
"description": "模板是一个面试官角色,可以更换提示词变成别的角色。",
"flow_id": "523971dc79e84d9bbe4187ab0bdb2583",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-08-20 16:45:43",
"id": 176,
"data": {
"edges": [
{
"id": "reactflow__edge-PromptTemplate-ZoUVTPromptTemplate|PromptTemplate-ZoUVT|StringPromptTemplate|PromptTemplate|BasePromptTemplate-LLMChain-wRz0cBasePromptTemplate|prompt|LLMChain-wRz0c",
"style": {
"stroke": "#555"
},
"source": "PromptTemplate-ZoUVT",
"target": "LLMChain-wRz0c",
"animated": true,
"className": "",
"sourceHandle": "PromptTemplate|PromptTemplate-ZoUVT|PromptTemplate|StringPromptTemplate|BasePromptTemplate",
"targetHandle": "BasePromptTemplate|prompt|LLMChain-wRz0c"
},
{
"id": "reactflow__edge-ConversationBufferMemory-lI5PtConversationBufferMemory|ConversationBufferMemory-lI5Pt|ConversationBufferMemory|BaseMemory|BaseChatMemory-LLMChain-wRz0cBaseMemory|memory|LLMChain-wRz0c",
"style": {
"stroke": "#555"
},
"source": "ConversationBufferMemory-lI5Pt",
"target": "LLMChain-wRz0c",
"animated": true,
"className": "",
"sourceHandle": "ConversationBufferMemory|ConversationBufferMemory-lI5Pt|BaseChatMemory|ConversationBufferMemory|BaseMemory",
"targetHandle": "BaseMemory|memory|LLMChain-wRz0c"
},
{
"id": "reactflow__edge-BishengLLM-3bb75BishengLLM|BishengLLM-3bb75|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-LLMChain-wRz0cBaseLanguageModel|llm|LLMChain-wRz0c",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-3bb75",
"target": "LLMChain-wRz0c",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-3bb75|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|LLMChain-wRz0c"
}
],
"nodes": [
{
"id": "LLMChain-wRz0c",
"data": {
"id": "LLMChain-wRz0c",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "LLMChain",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"prompt": {
"l2": false,
"info": "",
"list": false,
"name": "prompt",
"show": true,
"type": "BasePromptTemplate",
"l2_name": "prompt",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"value": false,
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"llm_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "llm_kwargs",
"show": false,
"type": "code",
"l2_name": "llm_kwargs",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "text",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": false,
"type": "BaseLLMOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"return_final_only": {
"l2": false,
"info": "",
"list": false,
"name": "return_final_only",
"show": false,
"type": "bool",
"value": true,
"l2_name": "return_final_only",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Chain to run queries against LLMs.",
"base_classes": [
"Chain",
"LLMChain",
"function"
],
"display_name": "LLMChain",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/foundational/llm_chain"
},
"type": "LLMChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 317,
"dragging": false,
"position": {
"x": 1556.1679330787729,
"y": 1103.1743625556214
},
"selected": false,
"positionAbsolute": {
"x": 1556.1679330787729,
"y": 1103.1743625556214
}
},
{
"id": "PromptTemplate-ZoUVT",
"data": {
"id": "PromptTemplate-ZoUVT",
"node": {
"name": "",
"template": {
"_type": "PromptTemplate",
"input": {
"info": "",
"list": false,
"name": "input",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser"
],
"placeholder": "",
"display_name": "input"
},
"template": {
"l2": false,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "System:\n你将扮演一个科技公司的面试官,面试者是一名产品经理,提出 3 个犀利的问题。\n请注意:\n- 每次只问一个问题\n- 面试者回答问题后请简短点评一下,然后问下一个问题,不要试图纠正候选人的错误;\n- 如果你认为用户连续几次回答的都不对,就少问一点;\n- 问完最后一个问题后,你可以问这样一个问题:上一份工作为什么离职?用户回答该问题后,请表示理解与支持,并停止与面试者的对话。若面试者继续说话你可以礼貌拒绝。\n\n以下是你们的对话记录\n\n{chat_history}\n\n面试者:{input}\n\n你的回答:",
"l2_name": "template",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"chat_history": {
"info": "",
"list": false,
"name": "chat_history",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser"
],
"placeholder": "",
"display_name": "chat_history"
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": false,
"type": "BaseOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_variables": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"chat_history",
"input"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"template_format": {
"l2": false,
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "str",
"value": "f-string",
"l2_name": "template_format",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"partial_variables": {
"l2": false,
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"l2_name": "partial_variables",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"validate_template": {
"l2": false,
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": true,
"l2_name": "validate_template",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Schema to represent a prompt for an LLM.",
"base_classes": [
"PromptTemplate",
"StringPromptTemplate",
"BasePromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"template": [
"chat_history",
"input"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {
"formatters": {
"openai_api_key": {}
},
"base_formatters": {
"dict": {},
"list": {},
"show": {},
"union": {},
"kwargs": {},
"default": {},
"headers": {},
"optional": {},
"password": {},
"multiline": {},
"model_fields": {
"MODEL_DICT": {
"OpenAI": [
"text-davinci-003",
"text-davinci-002",
"text-curie-001",
"text-babbage-001",
"text-ada-001"
],
"Anthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
],
"ChatOpenAI": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k"
],
"ChatAnthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
]
}
},
"dict_code_file": {}
}
}
},
"type": "PromptTemplate",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 419,
"dragging": false,
"position": {
"x": 782.4698380009005,
"y": 1522.4191451020877
},
"selected": false,
"positionAbsolute": {
"x": 782.4698380009005,
"y": 1522.4191451020877
}
},
{
"id": "ConversationBufferMemory-lI5Pt",
"data": {
"id": "ConversationBufferMemory-lI5Pt",
"node": {
"template": {
"_type": "ConversationBufferMemory",
"ai_prefix": {
"l2": false,
"info": "",
"list": false,
"name": "ai_prefix",
"show": false,
"type": "str",
"value": "AI",
"l2_name": "ai_prefix",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_key": {
"l2": false,
"info": "The variable to be used as Chat Input when more than one variable is available.",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "",
"l2_name": "input_key",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"memory_key": {
"l2": false,
"info": "",
"list": false,
"name": "memory_key",
"show": true,
"type": "str",
"value": "chat_history",
"l2_name": "memory_key",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"output_key": {
"l2": false,
"info": "The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "",
"l2_name": "output_key",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"chat_memory": {
"l2": false,
"info": "",
"list": false,
"name": "chat_memory",
"show": true,
"type": "BaseChatMessageHistory",
"l2_name": "chat_memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"human_prefix": {
"l2": false,
"info": "",
"list": false,
"name": "human_prefix",
"show": false,
"type": "str",
"value": "Human",
"l2_name": "human_prefix",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"return_messages": {
"l2": false,
"info": "",
"list": false,
"name": "return_messages",
"show": true,
"type": "bool",
"l2_name": "return_messages",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Buffer for storing conversation memory.",
"base_classes": [
"BaseChatMemory",
"ConversationBufferMemory",
"BaseMemory"
],
"display_name": "ConversationBufferMemory",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/memory/how_to/buffer"
},
"type": "ConversationBufferMemory",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 527,
"dragging": false,
"position": {
"x": 378.4886538486901,
"y": 959.6786678431888
},
"selected": false,
"positionAbsolute": {
"x": 378.4886538486901,
"y": 959.6786678431888
}
},
{
"id": "BishengLLM-3bb75",
"data": {
"id": "BishengLLM-3bb75",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 5,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BaseLanguageModel",
"BaseChatModel",
"BishengLLM",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 407,
"position": {
"x": 892.0260725263943,
"y": 617.6812234671859
},
"positionAbsolute": {
"x": 892.0260725263943,
"y": 617.6812234671859
}
}
],
"viewport": {
"x": 147.39902426086758,
"y": -337.0826199129119,
"zoom": 0.6112168397288411
}
},
"order_num": 6356957,
"guide_word": null
},
{
"update_time": "2024-08-20 16:51:57",
"parameters": null,
"name": "⭐️文章摘要",
"description": "上传文件自动触发文档摘要,当前支持文件格式:png, jpeg, jpg,pdf",
"flow_id": "c642e5031c1244829ddc0a59c7a5e3fd",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-08-20 16:51:57",
"id": 178,
"data": {
"edges": [
{
"id": "reactflow__edge-CombineDocsChain-RCPNACombineDocsChain|CombineDocsChain-RCPNA|BaseCombineDocumentsChain|function-RetrievalQA-x5napBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap",
"style": {
"stroke": "#555"
},
"source": "CombineDocsChain-RCPNA",
"target": "RetrievalQA-x5nap",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "CombineDocsChain|CombineDocsChain-RCPNA|BaseCombineDocumentsChain|function",
"targetHandle": "BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap"
},
{
"id": "reactflow__edge-Milvus-CWpaeMilvus|Milvus-CWpae|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever-RetrievalQA-x5napBaseRetriever|retriever|RetrievalQA-x5nap",
"style": {
"stroke": "#555"
},
"source": "Milvus-CWpae",
"target": "RetrievalQA-x5nap",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "Milvus|Milvus-CWpae|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|RetrievalQA-x5nap"
},
{
"id": "reactflow__edge-InputNode-EfneiInputNode|InputNode-Efnei|input-RetrievalQA-x5napinput|input_node|RetrievalQA-x5nap",
"style": {
"stroke": "#555"
},
"source": "InputNode-Efnei",
"target": "RetrievalQA-x5nap",
"animated": true,
"className": "",
"sourceHandle": "InputNode|InputNode-Efnei|input",
"targetHandle": "input|input_node|RetrievalQA-x5nap"
},
{
"id": "reactflow__edge-OpenAIProxyEmbedding-swx68OpenAIProxyEmbedding|OpenAIProxyEmbedding-swx68|Embeddings-Milvus-CWpaeEmbeddings|embedding|Milvus-CWpae",
"style": {
"stroke": "#555"
},
"source": "OpenAIProxyEmbedding-swx68",
"target": "Milvus-CWpae",
"animated": true,
"className": "",
"sourceHandle": "OpenAIProxyEmbedding|OpenAIProxyEmbedding-swx68|Embeddings",
"targetHandle": "Embeddings|embedding|Milvus-CWpae"
},
{
"id": "reactflow__edge-InputFileNode-rUBtAInputFileNode|InputFileNode-rUBtA|fileNode-ElemUnstructuredLoaderV0-2K7FCfileNode|file_path|ElemUnstructuredLoaderV0-2K7FC",
"style": {
"stroke": "#555"
},
"source": "InputFileNode-rUBtA",
"target": "ElemUnstructuredLoaderV0-2K7FC",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "InputFileNode|InputFileNode-rUBtA|fileNode",
"targetHandle": "fileNode|file_path|ElemUnstructuredLoaderV0-2K7FC"
},
{
"id": "reactflow__edge-ElemUnstructuredLoaderV0-2K7FCElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-2K7FC|Document-Milvus-CWpaeDocument|documents|Milvus-CWpae",
"style": {
"stroke": "#555"
},
"source": "ElemUnstructuredLoaderV0-2K7FC",
"target": "Milvus-CWpae",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "ElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-2K7FC|Document",
"targetHandle": "Document|documents|Milvus-CWpae"
},
{
"id": "reactflow__edge-BishengLLM-86c36BishengLLM|BishengLLM-86c36|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-CombineDocsChain-RCPNABaseLanguageModel|llm|CombineDocsChain-RCPNA",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-86c36",
"target": "CombineDocsChain-RCPNA",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-86c36|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|CombineDocsChain-RCPNA"
}
],
"nodes": [
{
"id": "CombineDocsChain-RCPNA",
"data": {
"id": "CombineDocsChain-RCPNA",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "load_qa_chain",
"prompt": {
"l2": false,
"info": "",
"list": false,
"name": "prompt",
"type": "BasePromptTemplate",
"l2_name": "prompt",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "prompt"
},
"token_max": {
"l2": false,
"info": "当前只对stuff 生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"l2_name": "token_max",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max"
},
"chain_type": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "Load question answering chain.",
"base_classes": [
"BaseCombineDocumentsChain",
"function"
],
"display_name": "CombineDocsChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "CombineDocsChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 377,
"dragging": false,
"position": {
"x": 845.0164562381523,
"y": 204.35580627436775
},
"selected": false,
"positionAbsolute": {
"x": 845.0164562381523,
"y": 204.35580627436775
}
},
{
"id": "Milvus-CWpae",
"data": {
"id": "Milvus-CWpae",
"node": {
"l2_name": "知识库",
"template": {
"_type": "Milvus",
"drop_old": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"documents": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"index_params": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_params": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"collection_name": {
"l2": false,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "选择知识库",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"collection_id": ""
},
"connection_args": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"consistency_level": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"Milvus",
"VectorStore",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 347,
"dragging": false,
"position": {
"x": 1084.3422855390577,
"y": 695.7475330381905
},
"selected": false,
"positionAbsolute": {
"x": 1084.3422855390577,
"y": 695.7475330381905
}
},
{
"id": "RetrievalQA-x5nap",
"data": {
"id": "RetrievalQA-x5nap",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "RetrievalQA",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_key": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"retriever": {
"l2": false,
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "retriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"combine_documents_chain": {
"l2": false,
"info": "",
"list": false,
"name": "combine_documents_chain",
"show": true,
"type": "BaseCombineDocumentsChain",
"l2_name": "combine_documents_chain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Chain for question-answering against an index.",
"base_classes": [
"BaseRetrievalQA",
"RetrievalQA",
"Chain",
"function"
],
"display_name": "RetrievalQA",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"
},
"type": "RetrievalQA",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 317,
"dragging": false,
"position": {
"x": 1516.3297428236956,
"y": 563.8820893628344
},
"selected": false,
"positionAbsolute": {
"x": 1516.3297428236956,
"y": 563.8820893628344
}
},
{
"id": "InputNode-Efnei",
"data": {
"id": "InputNode-Efnei",
"node": {
"template": {
"_type": "input",
"input": {
"l2": false,
"info": "",
"list": true,
"name": "input",
"show": true,
"type": "str",
"value": [
"这篇文章的主要内容是什么?请生成该文章的摘要"
],
"l2_name": "input",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "输入内容"
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"input"
],
"display_name": "InputNode",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "InputNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 255,
"dragging": false,
"position": {
"x": 1245.632226598747,
"y": 190.02499863969456
},
"selected": false,
"positionAbsolute": {
"x": 1245.632226598747,
"y": 190.02499863969456
}
},
{
"id": "InputFileNode-rUBtA",
"data": {
"id": "InputFileNode-rUBtA",
"node": {
"template": {
"_type": "InputFileNode",
"file_path": {
"l2": false,
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "file",
"value": "",
"l2_name": "file_path",
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".html",
".md",
".txt",
".jpg",
".png",
".jpeg",
".csv",
".doc",
".docx",
".pdf",
".ppt",
".pptx",
".xlsx",
".tiff"
],
"fileTypes": [
"html",
"md",
"txt",
"jpg",
"png",
"jpeg",
"csv",
"doc",
"docx",
"pdf",
"ppt",
"pptx",
"tiff",
"xlsx"
],
"file_path": null,
"multiline": false,
"placeholder": "",
"display_name": "输入内容"
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"fileNode"
],
"display_name": "InputFileNode",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "InputFileNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 255,
"dragging": false,
"position": {
"x": 189.1572111197503,
"y": 644.2048195861047
},
"selected": false,
"positionAbsolute": {
"x": 189.1572111197503,
"y": 644.2048195861047
}
},
{
"id": "OpenAIProxyEmbedding-swx68",
"data": {
"id": "OpenAIProxyEmbedding-swx68",
"node": {
"template": {
"_type": "proxy_embedding",
"proxy_url": {
"l2": false,
"info": "",
"list": false,
"name": "proxy_url",
"show": false,
"type": "str",
"value": "",
"l2_name": "proxy_url",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "http://43.133.35.137:8080"
}
},
"description": " 使用自建的embedding服务使用openai进行embed ",
"base_classes": [
"Embeddings"
],
"display_name": "OpenAIProxyEmbedding",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "OpenAIProxyEmbedding",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 173,
"dragging": false,
"position": {
"x": 617.8305142283027,
"y": 1050.5852539090324
},
"selected": false,
"positionAbsolute": {
"x": 617.8305142283027,
"y": 1050.5852539090324
}
},
{
"id": "ElemUnstructuredLoaderV0-2K7FC",
"data": {
"id": "ElemUnstructuredLoaderV0-2K7FC",
"node": {
"template": {
"_type": "ElemUnstructuredLoaderV0",
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": true,
"type": "code",
"value": "{}",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Metadata"
},
"file_path": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "fileNode",
"value": "",
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".html",
".md",
".txt",
".jpg",
".png",
".jpeg",
".csv",
".doc",
".docx",
".pdf",
".ppt",
".pptx",
".xlsx",
".tiff"
],
"fileTypes": [
"html",
"md",
"txt",
"jpg",
"png",
"jpeg",
"csv",
"doc",
"docx",
"pdf",
"ppt",
"pptx",
"tiff",
"xlsx"
],
"multiline": false,
"placeholder": ""
},
"unstructured_api_url": {
"info": "",
"list": false,
"name": "unstructured_api_url",
"show": true,
"type": "str",
"value": "https://bisheng.dataelem.com/api/v1/etl4llm/predict",
"advanced": false,
"password": true,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "unstructured_api_url"
}
},
"description": "Loads a PDF with pypdf and chunks at character level. dummy version",
"base_classes": [
"Document"
],
"display_name": "ElemUnstructuredLoaderV0",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": ""
},
"type": "ElemUnstructuredLoaderV0",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 393,
"dragging": false,
"position": {
"x": 619.7399756791771,
"y": 615.1613231146783
},
"selected": false,
"positionAbsolute": {
"x": 619.7399756791771,
"y": 615.1613231146783
}
},
{
"id": "BishengLLM-86c36",
"data": {
"id": "BishengLLM-86c36",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 5,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BaseLanguageModel",
"BaseChatModel",
"BishengLLM",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 407,
"dragging": false,
"position": {
"x": 321.78279586604197,
"y": 75.49875367670856
},
"selected": true,
"positionAbsolute": {
"x": 321.78279586604197,
"y": 75.49875367670856
}
}
],
"viewport": {
"x": 235.78430160378775,
"y": 22.158441172777714,
"zoom": 0.6998997500474495
}
},
"order_num": 6488027,
"guide_word": null
},
{
"update_time": "2024-08-20 16:57:42",
"parameters": null,
"name": "☘️招股书分析",
"description": "上传招股书报告,自动触发预设的分析问题",
"flow_id": "159a4536c3834406b5e134c25ab6fb4b",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-08-20 16:57:42",
"id": 179,
"data": {
"edges": [
{
"id": "reactflow__edge-CombineDocsChain-rc2FkCombineDocsChain|CombineDocsChain-rc2Fk|BaseCombineDocumentsChain|function-RetrievalQA-u9DZuBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-u9DZu",
"style": {
"stroke": "#555"
},
"source": "CombineDocsChain-rc2Fk",
"target": "RetrievalQA-u9DZu",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "CombineDocsChain|CombineDocsChain-rc2Fk|BaseCombineDocumentsChain|function",
"targetHandle": "BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-u9DZu"
},
{
"id": "reactflow__edge-RetrievalQA-u9DZuRetrievalQA|RetrievalQA-u9DZu|Chain|BaseRetrievalQA|RetrievalQA|function-Tool-FbOTwfunction|func|Tool-FbOTw",
"style": {
"stroke": "#555"
},
"source": "RetrievalQA-u9DZu",
"target": "Tool-FbOTw",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "RetrievalQA|RetrievalQA-u9DZu|Chain|BaseRetrievalQA|RetrievalQA|function",
"targetHandle": "function|func|Tool-FbOTw"
},
{
"id": "reactflow__edge-Milvus-4LcfVMilvus|Milvus-4LcfV|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever-RetrievalQA-u9DZuBaseRetriever|retriever|RetrievalQA-u9DZu",
"style": {
"stroke": "#555"
},
"source": "Milvus-4LcfV",
"target": "RetrievalQA-u9DZu",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "Milvus|Milvus-4LcfV|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|RetrievalQA-u9DZu"
},
{
"id": "reactflow__edge-Tool-FbOTwTool|Tool-FbOTw|Tool|BaseTool-ZeroShotAgent-o94zNBaseTool|tools|ZeroShotAgent-o94zN",
"style": {
"stroke": "#555"
},
"source": "Tool-FbOTw",
"target": "ZeroShotAgent-o94zN",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "Tool|Tool-FbOTw|Tool|BaseTool",
"targetHandle": "BaseTool|tools|ZeroShotAgent-o94zN"
},
{
"id": "reactflow__edge-Calculator-CfVqiCalculator|Calculator-CfVqi|Tool|BaseTool-ZeroShotAgent-o94zNBaseTool|tools|ZeroShotAgent-o94zN",
"style": {
"stroke": "#555"
},
"source": "Calculator-CfVqi",
"target": "ZeroShotAgent-o94zN",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "Calculator|Calculator-CfVqi|Tool|BaseTool",
"targetHandle": "BaseTool|tools|ZeroShotAgent-o94zN"
},
{
"id": "reactflow__edge-OpenAIProxyEmbedding-NPuMIOpenAIProxyEmbedding|OpenAIProxyEmbedding-NPuMI|Embeddings-Milvus-4LcfVEmbeddings|embedding|Milvus-4LcfV",
"style": {
"stroke": "#555"
},
"source": "OpenAIProxyEmbedding-NPuMI",
"target": "Milvus-4LcfV",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "OpenAIProxyEmbedding|OpenAIProxyEmbedding-NPuMI|Embeddings",
"targetHandle": "Embeddings|embedding|Milvus-4LcfV"
},
{
"id": "reactflow__edge-RecursiveCharacterTextSplitter-sTTDTRecursiveCharacterTextSplitter|RecursiveCharacterTextSplitter-sTTDT|Document-Milvus-4LcfVDocument|documents|Milvus-4LcfV",
"style": {
"stroke": "#555"
},
"source": "RecursiveCharacterTextSplitter-sTTDT",
"target": "Milvus-4LcfV",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "RecursiveCharacterTextSplitter|RecursiveCharacterTextSplitter-sTTDT|Document",
"targetHandle": "Document|documents|Milvus-4LcfV"
},
{
"id": "reactflow__edge-InputNode-HLAg0InputNode|InputNode-HLAg0|input-ZeroShotAgent-o94zNinput|input_node|ZeroShotAgent-o94zN",
"style": {
"stroke": "#555"
},
"source": "InputNode-HLAg0",
"target": "ZeroShotAgent-o94zN",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "InputNode|InputNode-HLAg0|input",
"targetHandle": "input|input_node|ZeroShotAgent-o94zN"
},
{
"id": "reactflow__edge-BingSearchAPIWrapper-I86u8BingSearchAPIWrapper|BingSearchAPIWrapper-I86u8|BingSearchAPIWrapper-BingSearchRun-gmZjQBingSearchAPIWrapper|api_wrapper|BingSearchRun-gmZjQ",
"style": {
"stroke": "#555"
},
"source": "BingSearchAPIWrapper-I86u8",
"target": "BingSearchRun-gmZjQ",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "BingSearchAPIWrapper|BingSearchAPIWrapper-I86u8|BingSearchAPIWrapper",
"targetHandle": "BingSearchAPIWrapper|api_wrapper|BingSearchRun-gmZjQ"
},
{
"id": "reactflow__edge-BingSearchRun-gmZjQBingSearchRun|BingSearchRun-gmZjQ|Tool|BaseTool|BaseTool|BingSearchRun-ZeroShotAgent-o94zNBaseTool|tools|ZeroShotAgent-o94zN",
"style": {
"stroke": "#555"
},
"source": "BingSearchRun-gmZjQ",
"target": "ZeroShotAgent-o94zN",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "BingSearchRun|BingSearchRun-gmZjQ|Tool|BaseTool|BaseTool|BingSearchRun",
"targetHandle": "BaseTool|tools|ZeroShotAgent-o94zN"
},
{
"id": "reactflow__edge-InputFileNode-IR0Z1InputFileNode|InputFileNode-IR0Z1|fileNode-ElemUnstructuredLoaderV0-4rq3AfileNode|file_path|ElemUnstructuredLoaderV0-4rq3A",
"style": {
"stroke": "#555"
},
"source": "InputFileNode-IR0Z1",
"target": "ElemUnstructuredLoaderV0-4rq3A",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "InputFileNode|InputFileNode-IR0Z1|fileNode",
"targetHandle": "fileNode|file_path|ElemUnstructuredLoaderV0-4rq3A"
},
{
"id": "reactflow__edge-ElemUnstructuredLoaderV0-4rq3AElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-4rq3A|Document-RecursiveCharacterTextSplitter-sTTDTDocument|documents|RecursiveCharacterTextSplitter-sTTDT",
"style": {
"stroke": "#555"
},
"source": "ElemUnstructuredLoaderV0-4rq3A",
"target": "RecursiveCharacterTextSplitter-sTTDT",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "ElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-4rq3A|Document",
"targetHandle": "Document|documents|RecursiveCharacterTextSplitter-sTTDT"
},
{
"id": "reactflow__edge-BishengLLM-6dc86BishengLLM|BishengLLM-6dc86|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-CombineDocsChain-rc2FkBaseLanguageModel|llm|CombineDocsChain-rc2Fk",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-6dc86",
"target": "CombineDocsChain-rc2Fk",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-6dc86|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|CombineDocsChain-rc2Fk"
},
{
"id": "reactflow__edge-BishengLLM-6dc86BishengLLM|BishengLLM-6dc86|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-Calculator-CfVqiBaseLanguageModel|llm|Calculator-CfVqi",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-6dc86",
"target": "Calculator-CfVqi",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-6dc86|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|Calculator-CfVqi"
},
{
"id": "reactflow__edge-BishengLLM-6dc86BishengLLM|BishengLLM-6dc86|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-ZeroShotAgent-o94zNBaseLanguageModel|llm|ZeroShotAgent-o94zN",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-6dc86",
"target": "ZeroShotAgent-o94zN",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-6dc86|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|ZeroShotAgent-o94zN"
}
],
"nodes": [
{
"id": "CombineDocsChain-rc2Fk",
"data": {
"id": "CombineDocsChain-rc2Fk",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "load_qa_chain",
"token_max": {
"l2": false,
"info": "当前只对stuff 生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"l2_name": "token_max",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max"
},
"chain_type": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "map_rerank",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "Load question answering chain.",
"base_classes": [
"BaseCombineDocumentsChain",
"function"
],
"display_name": "CombineDocsChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "CombineDocsChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 377,
"position": {
"x": 32.375529385543246,
"y": 759.3887339718593
},
"selected": false,
"positionAbsolute": {
"x": 32.375529385543246,
"y": 759.3887339718593
}
},
{
"id": "RetrievalQA-u9DZu",
"data": {
"id": "RetrievalQA-u9DZu",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "RetrievalQA",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_key": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"retriever": {
"l2": false,
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "retriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"combine_documents_chain": {
"l2": false,
"info": "",
"list": false,
"name": "combine_documents_chain",
"show": true,
"type": "BaseCombineDocumentsChain",
"l2_name": "combine_documents_chain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Chain for question-answering against an index.",
"base_classes": [
"Chain",
"BaseRetrievalQA",
"RetrievalQA",
"function"
],
"display_name": "RetrievalQA",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"
},
"type": "RetrievalQA",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 317,
"position": {
"x": 1055.9846105131896,
"y": 1319.580472587641
},
"selected": false,
"positionAbsolute": {
"x": 1055.9846105131896,
"y": 1319.580472587641
}
},
{
"id": "Tool-FbOTw",
"data": {
"id": "Tool-FbOTw",
"node": {
"template": {
"func": {
"l2": false,
"info": "",
"list": false,
"name": "func",
"show": true,
"type": "function",
"l2_name": "func",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"name": {
"l2": false,
"info": "",
"list": false,
"name": "name",
"show": true,
"type": "str",
"value": "Basic_information",
"l2_name": "name",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"_type": "Tool",
"description": {
"l2": false,
"info": "",
"list": false,
"name": "description",
"show": true,
"type": "str",
"value": "如果用户需要知道关于这家公司的各方面信息,可以使用该工具。如:\n- 某公司的盈利模式是什么\n- 某公司的保荐机构是哪家公司?\n- 某公司的审计机构是哪家公司?\n- 某公司的主要产品是什么?",
"l2_name": "如何使用用户上传的文档",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"return_direct": {
"l2": false,
"info": "",
"list": false,
"name": "return_direct",
"show": true,
"type": "bool",
"value": false,
"l2_name": "return_direct",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "Converts a chain, agent or function into a tool.",
"base_classes": [
"Tool",
"BaseTool"
],
"display_name": "Tool",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "Tool",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 445,
"position": {
"x": 1621.5305224346598,
"y": 1282.841953911718
},
"selected": false,
"positionAbsolute": {
"x": 1621.5305224346598,
"y": 1282.841953911718
}
},
{
"id": "Milvus-4LcfV",
"data": {
"id": "Milvus-4LcfV",
"node": {
"template": {
"_type": "Milvus",
"drop_old": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"documents": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"index_params": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_params": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"collection_name": {
"l2": false,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "招股书",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"collection_id": ""
},
"connection_args": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"consistency_level": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"VectorStore",
"Milvus",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 347,
"position": {
"x": 522.9361398003147,
"y": 1462.3167297901632
},
"selected": false,
"positionAbsolute": {
"x": 522.9361398003147,
"y": 1462.3167297901632
}
},
{
"id": "ZeroShotAgent-o94zN",
"data": {
"id": "ZeroShotAgent-o94zN",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"_type": "ZeroShotAgent",
"tools": {
"l2": false,
"info": "",
"list": true,
"name": "tools",
"show": true,
"type": "BaseTool",
"l2_name": "tools",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"prefix": {
"l2": false,
"info": "",
"list": false,
"name": "prefix",
"show": true,
"type": "str",
"value": "Answer the following questions as best you can. Think step by step. You have access to the following tools:",
"l2_name": "prefix",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"placeholder": ""
},
"suffix": {
"l2": false,
"info": "",
"list": false,
"name": "suffix",
"show": true,
"type": "str",
"value": "Begin!\n\nQuestion: {query}\nThought:{agent_scratchpad}",
"l2_name": "suffix",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": false,
"type": "AgentOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_variables": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": true,
"type": "str",
"value": [
"query",
"agent_scratchpad"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callback_manager": {
"l2": false,
"info": "",
"list": false,
"name": "callback_manager",
"show": false,
"type": "BaseCallbackManager",
"l2_name": "callback_manager",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"format_instructions": {
"l2": false,
"info": "",
"list": false,
"name": "format_instructions",
"show": true,
"type": "str",
"value": "Use the following format:\n\nQuestion: 该公司的保荐机构是哪家公司?\n# the query question you must answer\nThought: 我需要从文档中查询达梦股份有限公司的保荐机构\n# you should always think about what to do\nAction: Basic_information\n# the action to take, should be one of [{tool_names}]\nAction Input: 该公司的保荐机构是哪家公司?\n# the input to the action\nObservation: 我发现文章中提到达梦股份有限公司的保荐机构是招商证券\n# the result of the action\n... (this Thought/Action/Action Input/Observation can repeat N times)\nThought: I now know the final answer\nFinal Answer: #the final answer to the original input question",
"l2_name": "format_instructions",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"placeholder": ""
}
},
"description": "Construct an agent from an LLM and tools.",
"base_classes": [
"BaseSingleActionAgent",
"ZeroShotAgent",
"Agent",
"function"
],
"display_name": "ZeroShotAgent",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/agents/how_to/custom_mrkl_agent"
},
"type": "ZeroShotAgent",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 659,
"position": {
"x": 2724.755245757752,
"y": 792.4038456822296
},
"selected": false,
"positionAbsolute": {
"x": 2724.755245757752,
"y": 792.4038456822296
}
},
{
"id": "Calculator-CfVqi",
"data": {
"id": "Calculator-CfVqi",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"_type": "Calculator"
},
"description": "Useful for when you need to answer questions about math.",
"base_classes": [
"Tool",
"BaseTool"
],
"display_name": "Calculator",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "Calculator",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 229,
"position": {
"x": 1604.8480818394096,
"y": 973.4644452164116
},
"selected": false,
"positionAbsolute": {
"x": 1604.8480818394096,
"y": 973.4644452164116
}
},
{
"id": "OpenAIProxyEmbedding-NPuMI",
"data": {
"id": "OpenAIProxyEmbedding-NPuMI",
"node": {
"template": {
"_type": "proxy_embedding",
"proxy_url": {
"l2": false,
"info": "",
"list": false,
"name": "proxy_url",
"show": false,
"type": "str",
"value": "",
"l2_name": "proxy_url",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "http://43.133.35.137:8080"
}
},
"description": " 使用自建的embedding服务使用openai进行embed ",
"base_classes": [
"Embeddings"
],
"display_name": "OpenAIProxyEmbedding",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "OpenAIProxyEmbedding",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 173,
"position": {
"x": 27.86167751822711,
"y": 1796.72713464364
},
"selected": false,
"positionAbsolute": {
"x": 27.86167751822711,
"y": 1796.72713464364
}
},
{
"id": "InputFileNode-IR0Z1",
"data": {
"id": "InputFileNode-IR0Z1",
"node": {
"template": {
"_type": "InputFileNode",
"file_path": {
"l2": false,
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "file",
"value": "",
"l2_name": "file_path",
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".html",
".md",
".txt",
".jpg",
".png",
".jpeg",
".csv",
".doc",
".docx",
".pdf",
".ppt",
".pptx",
".xlsx",
".tiff"
],
"fileTypes": [
"html",
"md",
"txt",
"jpg",
"png",
"jpeg",
"csv",
"doc",
"docx",
"pdf",
"ppt",
"pptx",
"tiff",
"xlsx"
],
"file_path": null,
"multiline": false,
"placeholder": "",
"display_name": "输入内容"
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"fileNode"
],
"display_name": "InputFileNode",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "InputFileNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 255,
"position": {
"x": -932.810583795316,
"y": 1190.272406644502
},
"selected": false,
"positionAbsolute": {
"x": -932.810583795316,
"y": 1190.272406644502
}
},
{
"id": "RecursiveCharacterTextSplitter-sTTDT",
"data": {
"id": "RecursiveCharacterTextSplitter-sTTDT",
"node": {
"template": {
"_type": "RecursiveCharacterTextSplitter",
"documents": {
"l2": false,
"info": "",
"list": false,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"chunk_size": {
"l2": false,
"info": "",
"list": false,
"name": "chunk_size",
"show": true,
"type": "int",
"value": 1000,
"l2_name": "chunk_size",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Chunk Size"
},
"separators": {
"l2": false,
"info": "",
"list": false,
"name": "separators",
"show": true,
"type": "str",
"value": "\\n",
"l2_name": "separators",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Separator"
},
"chunk_overlap": {
"l2": false,
"info": "",
"list": false,
"name": "chunk_overlap",
"show": true,
"type": "int",
"value": 200,
"l2_name": "chunk_overlap",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Chunk Overlap"
},
"separator_type": {
"l2": false,
"info": "",
"list": true,
"name": "separator_type",
"show": true,
"type": "str",
"value": "Text",
"l2_name": "separator_type",
"options": [
"Text",
"cpp",
"go",
"html",
"java",
"js",
"latex",
"markdown",
"php",
"proto",
"python",
"rst",
"ruby",
"rust",
"scala",
"sol",
"swift"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Separator Type"
}
},
"description": "Implementation of splitting text that looks at characters.",
"base_classes": [
"Document"
],
"display_name": "RecursiveCharacterTextSplitter",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/recursive_text_splitter"
},
"type": "RecursiveCharacterTextSplitter",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 561,
"position": {
"x": 28.985765191920905,
"y": 1167.7466689744615
},
"selected": false,
"positionAbsolute": {
"x": 28.985765191920905,
"y": 1167.7466689744615
}
},
{
"id": "InputNode-HLAg0",
"data": {
"id": "InputNode-HLAg0",
"node": {
"template": {
"_type": "input",
"input": {
"l2": true,
"info": "",
"list": true,
"name": "input",
"show": true,
"type": "str",
"value": [
"该公司的主营业务包括哪些,请概述",
"该公司的盈利模式是什么?",
"该公司的销售模式有哪些?",
"该公司有多少专利和知识产权?",
"该公司处在哪个行业,查询一下该行业最近几年中国的市场规模分别为多少?",
"该公司的主要股东及其持股比例分别是多少",
"该公司是否面临法律诉讼或其他争议事项?如果是,请提供相关的细节和进展情况",
"该公司是否存在专利或其他知识产权方面的风险?请说明相关情况",
"该公司面临的主要市场竞争对手和他们在市场中的地位是什么?",
"该公司的主要产品或服务是什么?提供关键产品的详细描述",
"该公司的市场份额如何?是否有计划扩大市场份额?",
"该公司的盈利模式是什么?请解释公司如何获得收入",
"请详细说明公司的资金需求及其资金用途",
"该公司是否有债务或其他财务义务",
"请提供公司的人力资源情况,包括员工总数和关键管理团队成员的背景信息",
"请根据公司募集资金用途以及未来发展战略,推断公司是否计划在未来几年内进行研发和创新投资?",
"公司目标客户是谁?",
"从市场份额方面分析该公司的核心竞争力是什么?",
"从核心技术或核心产品方面分析该公司的核心竞争力是什么?",
"公司重要的合作伙伴与供应商有哪些?从他们那里能获取哪些核心资源?",
"该公司最重要的固定成本是什么?",
"结合财务报表,哪类费用占比高?这类费用主要用于哪些方面的支出?",
"公司2021年的应收账款周转率为多少,对比可比公司的情况如何?",
"公司的息税折旧摊销前利润相较于三年前增长了多少?",
"公司的息税折旧摊销前利润的增长趋势如何?",
"公司的归属于发行人股东的净利润的增长是否持续稳定?",
"公司归属于发行人股东扣除非经常性损益后的净利润有何变化?",
"公司在研发方面的投入与研发费用占营业收入的比例如何评价?",
"公司研发费用占营业收入的比例有何变化?",
"每股经营活动产生的现金流量反映了公司的经营效益如何?",
"公司在过去三年中,每股经营活动产生的现金流量有何变化?",
"公司每股净现金流量有何变化?",
"公司的流动比率水平如何评价?",
"公司的速动比率有何变化?",
"公司的资产负债率(母公司口径)有何变化?",
"公司的资产负债率(合并口径)水平如何评价?",
"公司的归属于发行人股东的每股净资产有何变化?",
""
],
"l2_name": "报告分析维度",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "输入内容"
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"input"
],
"display_name": "InputNode",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "InputNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 706,
"position": {
"x": 2176.519795047715,
"y": 1422.887731295922
},
"selected": false,
"positionAbsolute": {
"x": 2176.519795047715,
"y": 1422.887731295922
}
},
{
"id": "BingSearchAPIWrapper-I86u8",
"data": {
"id": "BingSearchAPIWrapper-I86u8",
"node": {
"template": {
"k": {
"l2": false,
"info": "",
"list": false,
"name": "k",
"show": false,
"type": "int",
"value": 10,
"l2_name": "k",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "BingSearchAPIWrapper",
"bing_search_url": {
"l2": false,
"info": "",
"list": false,
"name": "bing_search_url",
"show": true,
"type": "str",
"value": "https://api.bing.microsoft.com/v7.0/search",
"l2_name": "bing_search_url",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"bing_subscription_key": {
"l2": false,
"info": "",
"list": false,
"name": "bing_subscription_key",
"show": true,
"type": "str",
"value": "137b003c89f04966ac3b1081ee5b10bc",
"l2_name": "bing_subscription_key",
"advanced": false,
"password": true,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "Wrapper for Bing Search API.",
"base_classes": [
"BingSearchAPIWrapper"
],
"display_name": "BingSearchAPIWrapper",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "BingSearchAPIWrapper",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 337,
"position": {
"x": 1084.3965767342606,
"y": 279.87865179934
},
"selected": false,
"positionAbsolute": {
"x": 1084.3965767342606,
"y": 279.87865179934
}
},
{
"id": "BingSearchRun-gmZjQ",
"data": {
"id": "BingSearchRun-gmZjQ",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": false,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "BingSearchRun",
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"l2": false,
"info": "",
"list": false,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"api_wrapper": {
"l2": false,
"info": "",
"list": false,
"name": "api_wrapper",
"show": true,
"type": "BingSearchAPIWrapper",
"l2_name": "api_wrapper",
"advanced": false,
"password": true,
"required": true,
"multiline": false,
"placeholder": ""
},
"args_schema": {
"l2": false,
"info": "",
"list": false,
"name": "args_schema",
"show": false,
"type": "Type[pydantic.main.BaseModel]",
"l2_name": "args_schema",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"handle_tool_error": {
"l2": false,
"info": "",
"list": false,
"name": "handle_tool_error",
"show": false,
"type": "bool",
"value": false,
"l2_name": "handle_tool_error",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "A wrapper around Bing Search. Useful for when you need to answer questions about current events. Input should be a search query.",
"base_classes": [
"Tool",
"BaseTool",
"BaseTool",
"BingSearchRun"
],
"display_name": "BingSearchRun",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "BingSearchRun",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 249,
"position": {
"x": 1587.0735944565677,
"y": 564.1271785797638
},
"selected": false,
"positionAbsolute": {
"x": 1587.0735944565677,
"y": 564.1271785797638
}
},
{
"id": "ElemUnstructuredLoaderV0-4rq3A",
"data": {
"id": "ElemUnstructuredLoaderV0-4rq3A",
"node": {
"template": {
"_type": "ElemUnstructuredLoaderV0",
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": true,
"type": "code",
"value": "{}",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Metadata"
},
"file_path": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "fileNode",
"value": "",
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".html",
".md",
".txt",
".jpg",
".png",
".jpeg",
".csv",
".doc",
".docx",
".pdf",
".ppt",
".pptx",
".xlsx",
".tiff"
],
"fileTypes": [
"html",
"md",
"txt",
"jpg",
"png",
"jpeg",
"csv",
"doc",
"docx",
"pdf",
"ppt",
"pptx",
"tiff",
"xlsx"
],
"multiline": false,
"placeholder": ""
},
"unstructured_api_url": {
"info": "",
"list": false,
"name": "unstructured_api_url",
"show": true,
"type": "str",
"value": "https://bisheng.dataelem.com/api/v1/etl4llm/predict",
"advanced": false,
"password": true,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "unstructured_api_url"
}
},
"description": "Loads a PDF with pypdf and chunks at character level. dummy version",
"base_classes": [
"Document"
],
"display_name": "ElemUnstructuredLoaderV0",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": ""
},
"type": "ElemUnstructuredLoaderV0",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 393,
"dragging": false,
"position": {
"x": -468.3981411294128,
"y": 1150.9063802769972
},
"selected": false,
"positionAbsolute": {
"x": -468.3981411294128,
"y": 1150.9063802769972
}
},
{
"id": "BishengLLM-6dc86",
"data": {
"id": "BishengLLM-6dc86",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 5,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BaseLanguageModel",
"BaseChatModel",
"BishengLLM",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 407,
"dragging": false,
"position": {
"x": -966.0777669425454,
"y": 569.5274332939994
},
"selected": false,
"positionAbsolute": {
"x": -966.0777669425454,
"y": 569.5274332939994
}
}
],
"viewport": {
"x": 446.8071199372391,
"y": -15.008593660173858,
"zoom": 0.3819453782554565
}
},
"order_num": 6553562,
"guide_word": null
},
{
"update_time": "2024-10-15 18:39:27",
"parameters": null,
"name": "⭐️知识库问答",
"description": "选择知识库,进行知识库问答",
"flow_id": "0c1649f7cd774248990bf7d961e8dcff",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-08-20 17:04:03",
"id": 180,
"data": {
"edges": [
{
"id": "reactflow__edge-Milvus-CWpaeMilvus|Milvus-CWpae|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever-RetrievalQA-x5napBaseRetriever|retriever|RetrievalQA-x5nap",
"style": {
"stroke": "#555"
},
"source": "Milvus-CWpae",
"target": "RetrievalQA-x5nap",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "Milvus|Milvus-CWpae|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|RetrievalQA-x5nap"
},
{
"id": "reactflow__edge-CombineDocsChain-71a85CombineDocsChain|CombineDocsChain-71a85|BaseCombineDocumentsChain|function-RetrievalQA-x5napBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap",
"style": {
"stroke": "#555"
},
"source": "CombineDocsChain-71a85",
"target": "RetrievalQA-x5nap",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "CombineDocsChain|CombineDocsChain-71a85|BaseCombineDocumentsChain|function",
"targetHandle": "BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap"
},
{
"id": "reactflow__edge-PromptTemplate-3c164PromptTemplate|PromptTemplate-3c164|Runnable|StringPromptTemplate|RunnableSerializable|PromptTemplate|Generic|BasePromptTemplate-CombineDocsChain-71a85BasePromptTemplate|document_prompt|CombineDocsChain-71a85",
"style": {
"stroke": "#555"
},
"source": "PromptTemplate-3c164",
"target": "CombineDocsChain-71a85",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "PromptTemplate|PromptTemplate-3c164|Runnable|StringPromptTemplate|RunnableSerializable|PromptTemplate|Generic|BasePromptTemplate",
"targetHandle": "BasePromptTemplate|document_prompt|CombineDocsChain-71a85"
},
{
"id": "reactflow__edge-PromptTemplate-ced29PromptTemplate|PromptTemplate-ced29|Runnable|StringPromptTemplate|RunnableSerializable|PromptTemplate|Generic|BasePromptTemplate-CombineDocsChain-71a85BasePromptTemplate|prompt|CombineDocsChain-71a85",
"style": {
"stroke": "#555"
},
"source": "PromptTemplate-ced29",
"target": "CombineDocsChain-71a85",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "PromptTemplate|PromptTemplate-ced29|Runnable|StringPromptTemplate|RunnableSerializable|PromptTemplate|Generic|BasePromptTemplate",
"targetHandle": "BasePromptTemplate|prompt|CombineDocsChain-71a85"
},
{
"id": "reactflow__edge-BishengLLM-02d50BishengLLM|BishengLLM-02d50|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-CombineDocsChain-71a85BaseLanguageModel|llm|CombineDocsChain-71a85",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-02d50",
"target": "CombineDocsChain-71a85",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-02d50|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|CombineDocsChain-71a85"
}
],
"nodes": [
{
"id": "Milvus-CWpae",
"data": {
"id": "Milvus-CWpae",
"node": {
"l2_name": "知识库",
"template": {
"_type": "Milvus",
"drop_old": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"documents": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": false,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"index_params": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_params": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"collection_name": {
"l2": true,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "毕昇产品文档20240421",
"l2_name": "选择知识库",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"collection_id": 4597
},
"connection_args": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"consistency_level": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"Milvus",
"VectorStore",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 311,
"dragging": false,
"position": {
"x": 857.7079649166786,
"y": 666.0353925000366
},
"selected": false,
"positionAbsolute": {
"x": 857.7079649166786,
"y": 666.0353925000366
}
},
{
"id": "RetrievalQA-x5nap",
"data": {
"id": "RetrievalQA-x5nap",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "RetrievalQA",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_key": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"retriever": {
"l2": false,
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "retriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"combine_documents_chain": {
"l2": false,
"info": "",
"list": false,
"name": "combine_documents_chain",
"show": true,
"type": "BaseCombineDocumentsChain",
"l2_name": "combine_documents_chain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Chain for question-answering against an index.",
"base_classes": [
"RetrievalQA",
"Chain",
"BaseRetrievalQA",
"function"
],
"display_name": "RetrievalQA",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"
},
"type": "RetrievalQA",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 317,
"position": {
"x": 1521.2877663953464,
"y": 287.6148502766154
},
"selected": false,
"positionAbsolute": {
"x": 1521.2877663953464,
"y": 287.6148502766154
}
},
{
"id": "CombineDocsChain-71a85",
"data": {
"id": "CombineDocsChain-71a85",
"node": {
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "load_qa_chain",
"prompt": {
"info": "只对Stuff类型生效",
"list": false,
"name": "prompt",
"show": true,
"type": "BasePromptTemplate",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "prompt"
},
"token_max": {
"info": "只对Stuff类型生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max"
},
"chain_type": {
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"document_prompt": {
"info": "",
"list": false,
"name": "document_prompt",
"show": true,
"type": "BasePromptTemplate",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Load question answering chain.",
"base_classes": [
"BaseCombineDocumentsChain",
"function"
],
"display_name": "CombineDocsChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "CombineDocsChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 449,
"position": {
"x": 847.130082564399,
"y": 10.769465837008791
},
"selected": false,
"positionAbsolute": {
"x": 847.130082564399,
"y": 10.769465837008791
}
},
{
"id": "PromptTemplate-3c164",
"data": {
"id": "PromptTemplate-3c164",
"node": {
"name": "",
"l2_name": "召回段落拼接提示词",
"template": {
"_type": "PromptTemplate",
"source": {
"info": "",
"list": false,
"name": "source",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "source"
},
"template": {
"l2": false,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "title: {source}\n{page_content}\n----------------",
"l2_name": "提示词模板",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"input_types": {
"info": "",
"list": false,
"name": "input_types",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"page_content": {
"info": "",
"list": false,
"name": "page_content",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "page_content"
},
"output_parser": {
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_variables": {
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"source",
"page_content"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"template_format": {
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "Union[Literal['f-string'], Literal['jinja2']]",
"value": "f-string",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"partial_variables": {
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"validate_template": {
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": false,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "A prompt template for a language model.",
"base_classes": [
"Runnable",
"StringPromptTemplate",
"RunnableSerializable",
"PromptTemplate",
"Generic",
"BasePromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"": [
"source",
"page_content"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {}
},
"type": "PromptTemplate",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 455,
"dragging": false,
"position": {
"x": 249.5669301132289,
"y": -472.7534674830942
},
"selected": false,
"positionAbsolute": {
"x": 249.5669301132289,
"y": -472.7534674830942
}
},
{
"id": "PromptTemplate-ced29",
"data": {
"id": "PromptTemplate-ced29",
"node": {
"name": "",
"l2_name": "大模型问答提示词",
"template": {
"_type": "PromptTemplate",
"context": {
"info": "",
"list": false,
"name": "context",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "context"
},
"question": {
"info": "",
"list": false,
"name": "question",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "question"
},
"template": {
"l2": true,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "参考文本:\n{context}\n\n----------------------\n# Role:企业客服\n\n# Background :\n你是一家名叫XX公司的客服人员。你的日常工作是回复公司内用户的各类咨询问题,所以当用户提到“公司”时,指的是XX公司。\n\n# Goals:\n- 以上【参考文本】中是从企业知识库中查找到的相关信息,只能结合以上信息进行回答,若以上内容为空或其中没有找到能回答【用户问题】的内容时,则回复“没有找到相关内容”,不能根据你自己的知识自己发挥。\n- 特别要注意区分【用户问题】与【参考文本】中不同的日期、人名、公司名这些关键信息。\n- 用中文回答问题,并且答案要严谨、专业、清晰、可读性好。\n- 拥有排版审美, 会利用序号, 缩进, 分隔线和换行符等等来美化信息排版。\n\n----------------------\n\n用户问题: {question}\n你的回答:",
"l2_name": "提示词模板",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"input_types": {
"info": "",
"list": false,
"name": "input_types",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"output_parser": {
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_variables": {
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"context",
"question"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"template_format": {
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "Union[Literal['f-string'], Literal['jinja2']]",
"value": "f-string",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"partial_variables": {
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"validate_template": {
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": false,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "A prompt template for a language model.",
"base_classes": [
"Runnable",
"StringPromptTemplate",
"RunnableSerializable",
"PromptTemplate",
"Generic",
"BasePromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"": [
"context",
"question"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {}
},
"type": "PromptTemplate",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 455,
"dragging": false,
"position": {
"x": 239.9768809008542,
"y": 26.706867771652675
},
"selected": false,
"positionAbsolute": {
"x": 239.9768809008542,
"y": 26.706867771652675
}
},
{
"id": "BishengLLM-02d50",
"data": {
"id": "BishengLLM-02d50",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 5,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BaseLanguageModel",
"BaseChatModel",
"BishengLLM",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 407,
"dragging": false,
"position": {
"x": 233.388284890662,
"y": 540.5502864443121
},
"selected": true,
"positionAbsolute": {
"x": 233.388284890662,
"y": 540.5502864443121
}
}
],
"viewport": {
"x": 282.57805303810756,
"y": 294.51040071091927,
"zoom": 0.5373960694755959
}
},
"order_num": null,
"guide_word": null
},
{
"update_time": "2024-08-20 17:08:01",
"parameters": null,
"name": "⭐️ Word 格式专业报告生成【需配置】",
"description": "【word 模板默认是空的,需要自己进行配置】\n将复杂的专业报告拆分成独立的具体章节任务,然后将大模型生成内容自动填入到预设 word 模板中,从而完成专业报告的生成。",
"flow_id": "212df93d0f8445c690a9aeebe684db84",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-08-20 17:08:01",
"id": 181,
"data": {
"edges": [
{
"id": "reactflow__edge-CombineDocsChain-tv0S2CombineDocsChain|CombineDocsChain-tv0S2|BaseCombineDocumentsChain|function-RetrievalQA-F6quWBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-F6quW",
"style": {
"stroke": "#555"
},
"source": "CombineDocsChain-tv0S2",
"target": "RetrievalQA-F6quW",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "CombineDocsChain|CombineDocsChain-tv0S2|BaseCombineDocumentsChain|function",
"targetHandle": "BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-F6quW"
},
{
"id": "reactflow__edge-RetrievalQA-F6quWRetrievalQA|RetrievalQA-F6quW|BaseRetrievalQA|Chain|RetrievalQA|function-Report-PRcYLfunction|chains|Report-PRcYL",
"style": {
"stroke": "#555"
},
"source": "RetrievalQA-F6quW",
"target": "Report-PRcYL",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "RetrievalQA|RetrievalQA-F6quW|BaseRetrievalQA|Chain|RetrievalQA|function",
"targetHandle": "function|chains|Report-PRcYL"
},
{
"id": "reactflow__edge-InputNode-TdX3BInputNode|InputNode-TdX3B|input-RetrievalQA-F6quWinput|input_node|RetrievalQA-F6quW",
"style": {
"stroke": "#555"
},
"source": "InputNode-TdX3B",
"target": "RetrievalQA-F6quW",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "InputNode|InputNode-TdX3B|input",
"targetHandle": "input|input_node|RetrievalQA-F6quW"
},
{
"id": "reactflow__edge-ElemUnstructuredLoaderV0-nYygCElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-nYygC|Document-RecursiveCharacterTextSplitter-6g2FADocument|documents|RecursiveCharacterTextSplitter-6g2FA",
"style": {
"stroke": "#555"
},
"source": "ElemUnstructuredLoaderV0-nYygC",
"target": "RecursiveCharacterTextSplitter-6g2FA",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "ElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-nYygC|Document",
"targetHandle": "Document|documents|RecursiveCharacterTextSplitter-6g2FA"
},
{
"id": "reactflow__edge-VariableNode-UB934VariableNode|VariableNode-UB934|VariableNode-Report-PRcYLVariableNode|variables|Report-PRcYL",
"style": {
"stroke": "#555"
},
"source": "VariableNode-UB934",
"target": "Report-PRcYL",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "VariableNode|VariableNode-UB934|VariableNode",
"targetHandle": "VariableNode|variables|Report-PRcYL"
},
{
"id": "reactflow__edge-Milvus-fSZ8oMilvus|Milvus-fSZ8o|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever-RetrievalQA-F6quWBaseRetriever|retriever|RetrievalQA-F6quW",
"style": {
"stroke": "#555"
},
"source": "Milvus-fSZ8o",
"target": "RetrievalQA-F6quW",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "Milvus|Milvus-fSZ8o|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|RetrievalQA-F6quW"
},
{
"id": "reactflow__edge-RecursiveCharacterTextSplitter-6g2FARecursiveCharacterTextSplitter|RecursiveCharacterTextSplitter-6g2FA|Document-Milvus-fSZ8oDocument|documents|Milvus-fSZ8o",
"style": {
"stroke": "#555"
},
"source": "RecursiveCharacterTextSplitter-6g2FA",
"target": "Milvus-fSZ8o",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "RecursiveCharacterTextSplitter|RecursiveCharacterTextSplitter-6g2FA|Document",
"targetHandle": "Document|documents|Milvus-fSZ8o"
},
{
"id": "reactflow__edge-OpenAIProxyEmbedding-0OoJhOpenAIProxyEmbedding|OpenAIProxyEmbedding-0OoJh|Embeddings-Milvus-fSZ8oEmbeddings|embedding|Milvus-fSZ8o",
"style": {
"stroke": "#555"
},
"source": "OpenAIProxyEmbedding-0OoJh",
"target": "Milvus-fSZ8o",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "OpenAIProxyEmbedding|OpenAIProxyEmbedding-0OoJh|Embeddings",
"targetHandle": "Embeddings|embedding|Milvus-fSZ8o"
},
{
"id": "reactflow__edge-InputFileNode-a4516InputFileNode|InputFileNode-a4516|fileNode-ElemUnstructuredLoaderV0-nYygCfileNode|file_path|ElemUnstructuredLoaderV0-nYygC",
"style": {
"stroke": "#555"
},
"source": "InputFileNode-a4516",
"target": "ElemUnstructuredLoaderV0-nYygC",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "InputFileNode|InputFileNode-a4516|fileNode",
"targetHandle": "fileNode|file_path|ElemUnstructuredLoaderV0-nYygC"
},
{
"id": "reactflow__edge-BishengLLM-a972dBishengLLM|BishengLLM-a972d|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-CombineDocsChain-tv0S2BaseLanguageModel|llm|CombineDocsChain-tv0S2",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-a972d",
"target": "CombineDocsChain-tv0S2",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-a972d|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|CombineDocsChain-tv0S2"
}
],
"nodes": [
{
"id": "Report-PRcYL",
"data": {
"id": "Report-PRcYL",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "Report",
"chains": {
"l2": false,
"info": "",
"list": true,
"name": "chains",
"show": true,
"type": "function",
"l2_name": "chains",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "functions"
},
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": false,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"value": false,
"l2_name": "verbose",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_key": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": false,
"type": "str",
"value": "report_name",
"l2_name": "input_key",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"stop_flag": {
"l2": false,
"info": "",
"list": false,
"name": "stop_flag",
"show": false,
"type": "bool",
"value": false,
"l2_name": "stop_flag",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"variables": {
"l2": false,
"info": "",
"list": true,
"name": "variables",
"show": true,
"type": "VariableNode",
"l2_name": "variables",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": false,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": false,
"type": "str",
"value": "text",
"l2_name": "output_key",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"report_name": {
"l2": false,
"info": "the file name we generate",
"list": false,
"name": "report_name",
"show": true,
"type": "str",
"value": "尽调报告",
"l2_name": "report_name",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Report Name"
}
},
"description": "",
"base_classes": [
"Chain",
"Report"
],
"display_name": "Report",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "Report",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 359,
"dragging": false,
"position": {
"x": 2893.098387884978,
"y": 854.5001552884537
},
"selected": false,
"positionAbsolute": {
"x": 2893.098387884978,
"y": 854.5001552884537
}
},
{
"id": "InputNode-TdX3B",
"data": {
"id": "InputNode-TdX3B",
"node": {
"template": {
"_type": "input",
"input": {
"l2": false,
"info": "",
"list": true,
"name": "input",
"show": true,
"type": "str",
"value": [
"公司主营业务的市场定位是什么?",
"公司的主要供应商情况是什么?",
"公司营业成本是多少?各项成本占营业成本的比例是多少?并结合行业特点分析合理性",
"对公司进行核心竞争力、盈利模式及可持续性分析"
],
"l2_name": "input",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "输入内容"
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"input"
],
"display_name": "InputNode",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "InputNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 405,
"position": {
"x": 1882.0029133695327,
"y": 20
},
"selected": false,
"positionAbsolute": {
"x": 1882.0029133695327,
"y": 20
}
},
{
"id": "RetrievalQA-F6quW",
"data": {
"id": "RetrievalQA-F6quW",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "RetrievalQA",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_key": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"retriever": {
"l2": false,
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "retriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"combine_documents_chain": {
"l2": false,
"info": "",
"list": false,
"name": "combine_documents_chain",
"show": true,
"type": "BaseCombineDocumentsChain",
"l2_name": "combine_documents_chain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Chain for question-answering against an index.",
"base_classes": [
"BaseRetrievalQA",
"Chain",
"RetrievalQA",
"function"
],
"display_name": "RetrievalQA",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"
},
"type": "RetrievalQA",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 317,
"position": {
"x": 2365.4233944189255,
"y": 484.70381798330607
},
"selected": false,
"positionAbsolute": {
"x": 2365.4233944189255,
"y": 484.70381798330607
}
},
{
"id": "CombineDocsChain-tv0S2",
"data": {
"id": "CombineDocsChain-tv0S2",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "load_qa_chain",
"prompt": {
"l2": false,
"info": "只对Stuff类型生效",
"list": false,
"name": "prompt",
"show": true,
"type": "BasePromptTemplate",
"l2_name": "prompt",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "prompt"
},
"token_max": {
"l2": false,
"info": "只对Stuff类型生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"l2_name": "token_max",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max"
},
"chain_type": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "Load question answering chain.",
"base_classes": [
"BaseCombineDocumentsChain",
"function"
],
"display_name": "CombineDocsChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "CombineDocsChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 413,
"position": {
"x": 1430.7645538078127,
"y": 262.02647664648924
},
"selected": false,
"positionAbsolute": {
"x": 1430.7645538078127,
"y": 262.02647664648924
}
},
{
"id": "ElemUnstructuredLoaderV0-nYygC",
"data": {
"id": "ElemUnstructuredLoaderV0-nYygC",
"node": {
"template": {
"_type": "ElemUnstructuredLoaderV0",
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": true,
"type": "code",
"value": "{}",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Metadata"
},
"file_path": {
"l2": false,
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "fileNode",
"value": "",
"l2_name": "file_path",
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".html",
".md",
".txt",
".bmp",
".jpg",
".png",
".jpeg",
".doc",
".docx",
".pdf",
".ppt",
".pptx",
".xls",
".xlsx",
".tsv",
".csv",
".tiff"
],
"fileTypes": [
"html",
"md",
"txt",
"bmp",
"jpg",
"png",
"jpeg",
"doc",
"docx",
"pdf",
"ppt",
"pptx",
".xls",
"xlsx",
"tsv",
"csv",
"tiff"
],
"multiline": false,
"placeholder": ""
},
"unstructured_api_url": {
"l2": false,
"info": "",
"list": false,
"name": "unstructured_api_url",
"show": true,
"type": "str",
"value": "https://bisheng.dataelem.com/api/v1/etl4llm/predict",
"l2_name": "unstructured_api_url",
"advanced": false,
"password": true,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "unstructured_api_url"
}
},
"description": "The appropriate parser is automatically selected based on the file format and OCR is supported",
"base_classes": [
"Document"
],
"display_name": "ElemUnstructuredLoaderV0",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": ""
},
"type": "ElemUnstructuredLoaderV0",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 393,
"position": {
"x": 687.5802734859502,
"y": 887.9738676014504
},
"selected": false,
"positionAbsolute": {
"x": 687.5802734859502,
"y": 887.9738676014504
}
},
{
"id": "RecursiveCharacterTextSplitter-6g2FA",
"data": {
"id": "RecursiveCharacterTextSplitter-6g2FA",
"node": {
"template": {
"_type": "RecursiveCharacterTextSplitter",
"documents": {
"l2": false,
"info": "",
"list": false,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"chunk_size": {
"l2": false,
"info": "",
"list": false,
"name": "chunk_size",
"show": true,
"type": "int",
"value": 1000,
"l2_name": "chunk_size",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Chunk Size"
},
"separators": {
"l2": false,
"info": "",
"list": false,
"name": "separators",
"show": true,
"type": "str",
"value": "\\n",
"l2_name": "separators",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Separator"
},
"chunk_overlap": {
"l2": false,
"info": "",
"list": false,
"name": "chunk_overlap",
"show": true,
"type": "int",
"value": 200,
"l2_name": "chunk_overlap",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Chunk Overlap"
},
"separator_type": {
"l2": false,
"info": "",
"list": true,
"name": "separator_type",
"show": true,
"type": "str",
"value": "Text",
"l2_name": "separator_type",
"options": [
"Text",
"cpp",
"go",
"html",
"java",
"js",
"latex",
"markdown",
"php",
"proto",
"python",
"rst",
"ruby",
"rust",
"scala",
"sol",
"swift"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Separator Type"
}
},
"description": "Implementation of splitting text that looks at characters.",
"base_classes": [
"Document"
],
"display_name": "RecursiveCharacterTextSplitter",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/recursive_text_splitter"
},
"type": "RecursiveCharacterTextSplitter",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 561,
"position": {
"x": 1126.323112777516,
"y": 958.025245303465
},
"selected": false,
"positionAbsolute": {
"x": 1126.323112777516,
"y": 958.025245303465
}
},
{
"id": "VariableNode-UB934",
"data": {
"id": "VariableNode-UB934",
"node": {
"template": {
"_type": "VariableNode",
"variables": {
"l2": false,
"info": "",
"list": true,
"name": "variables",
"show": true,
"type": "variable",
"value": [
"客户名称",
"客户规模"
],
"l2_name": "variables",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"variable_value": {
"l2": false,
"info": "",
"list": true,
"name": "variable_value",
"show": false,
"type": "str",
"l2_name": "variable_value",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "用来设置变量",
"base_classes": [
"VariableNode"
],
"display_name": "VariableNode",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "VariableNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 233,
"dragging": false,
"position": {
"x": 2311.569198584317,
"y": 991.6304728944774
},
"selected": false,
"positionAbsolute": {
"x": 2311.569198584317,
"y": 991.6304728944774
}
},
{
"id": "Milvus-fSZ8o",
"data": {
"id": "Milvus-fSZ8o",
"node": {
"template": {
"_type": "Milvus",
"drop_old": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"documents": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"index_params": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_params": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"collection_name": {
"l2": false,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "collection_name",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"collection_id": ""
},
"connection_args": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"consistency_level": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"Milvus",
"VectorStore",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 429,
"position": {
"x": 1715.041130224926,
"y": 967.8237662817272
},
"selected": false,
"positionAbsolute": {
"x": 1715.041130224926,
"y": 967.8237662817272
}
},
{
"id": "OpenAIProxyEmbedding-0OoJh",
"data": {
"id": "OpenAIProxyEmbedding-0OoJh",
"node": {
"template": {
"_type": "proxy_embedding",
"proxy_url": {
"l2": false,
"info": "",
"list": false,
"name": "proxy_url",
"show": false,
"type": "str",
"value": "",
"l2_name": "proxy_url",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "http://43.133.35.137:8080"
}
},
"description": " 使用自建的embedding服务使用openai进行embed ",
"base_classes": [
"Embeddings"
],
"display_name": "OpenAIProxyEmbedding",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "OpenAIProxyEmbedding",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 173,
"position": {
"x": 1138.4741947789414,
"y": 704.7914052206025
},
"selected": false,
"positionAbsolute": {
"x": 1138.4741947789414,
"y": 704.7914052206025
}
},
{
"id": "InputFileNode-a4516",
"data": {
"id": "InputFileNode-a4516",
"node": {
"beta": false,
"template": {
"_type": "InputFileNode",
"file_path": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "file",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".html",
".md",
".txt",
".bmp",
".jpg",
".png",
".jpeg",
".doc",
".docx",
".pdf",
".ppt",
".pptx",
"..xls",
".xlsx",
".tsv",
".csv",
".tiff"
],
"fileTypes": [
"html",
"md",
"txt",
"bmp",
"jpg",
"png",
"jpeg",
"doc",
"docx",
"pdf",
"ppt",
"pptx",
".xls",
"xlsx",
"tsv",
"csv",
"tiff"
],
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "File Path",
"model_config": {}
},
"file_type": {
"info": "Tips for which file should upload",
"list": false,
"name": "file_type",
"show": true,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "提示上传文件类型",
"display_name": "Name",
"model_config": {}
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"fileNode"
],
"display_name": "InputFileNode",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "InputFileNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 337,
"dragging": false,
"position": {
"x": 232.94631949418465,
"y": 876.7981526493783
},
"selected": false,
"positionAbsolute": {
"x": 232.94631949418465,
"y": 876.7981526493783
}
},
{
"id": "BishengLLM-a972d",
"data": {
"id": "BishengLLM-a972d",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 5,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BaseLanguageModel",
"BaseChatModel",
"BishengLLM",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 407,
"dragging": false,
"position": {
"x": 526.6927690842307,
"y": 137.74438088815248
},
"selected": true,
"positionAbsolute": {
"x": 526.6927690842307,
"y": 137.74438088815248
}
}
],
"viewport": {
"x": -41.278753137878425,
"y": 51.57633498215188,
"zoom": 0.5112634327714005
}
},
"order_num": 6684632,
"guide_word": null
},
{
"update_time": "2024-10-15 18:39:29",
"parameters": null,
"name": "⭐️知识库问答【增强版】",
"description": "选择知识库,进行知识库问答。特点:\n1.知识多轮问答;\n2.使用关键词检索、向量检索两种方式,提高召回率;\n3.优化过的提示词,降低胡说的出现;",
"flow_id": "9c964a6cabba4d6ea76fde38e72e559d",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-08-20 17:24:17",
"id": 182,
"data": {
"edges": [
{
"id": "reactflow__edge-Milvus-cyR5WMilvus|Milvus-cyR5W|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever-MixEsVectorRetriever-J35CZBaseRetriever|vector_retriever|MixEsVectorRetriever-J35CZ",
"style": {
"stroke": "#555"
},
"source": "Milvus-cyR5W",
"target": "MixEsVectorRetriever-J35CZ",
"animated": true,
"className": "",
"sourceHandle": "Milvus|Milvus-cyR5W|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|vector_retriever|MixEsVectorRetriever-J35CZ"
},
{
"id": "reactflow__edge-MixEsVectorRetriever-J35CZMixEsVectorRetriever|MixEsVectorRetriever-J35CZ|MixEsVectorRetriever|BaseRetriever-ConversationalRetrievalChain-SmY3wBaseRetriever|retriever|ConversationalRetrievalChain-SmY3w",
"style": {
"stroke": "#555"
},
"source": "MixEsVectorRetriever-J35CZ",
"target": "ConversationalRetrievalChain-SmY3w",
"animated": true,
"className": "",
"sourceHandle": "MixEsVectorRetriever|MixEsVectorRetriever-J35CZ|BaseRetriever|MixEsVectorRetriever",
"targetHandle": "BaseRetriever|retriever|ConversationalRetrievalChain-SmY3w"
},
{
"id": "reactflow__edge-ConversationBufferMemory-K1tssConversationBufferMemory|ConversationBufferMemory-K1tss|BaseChatMemory|BaseMemory|ConversationBufferMemory-ConversationalRetrievalChain-SmY3wBaseChatMemory|memory|ConversationalRetrievalChain-SmY3w",
"style": {
"stroke": "#555"
},
"source": "ConversationBufferMemory-K1tss",
"target": "ConversationalRetrievalChain-SmY3w",
"animated": true,
"className": "",
"sourceHandle": "ConversationBufferMemory|ConversationBufferMemory-K1tss|ConversationBufferMemory|BaseChatMemory|BaseMemory",
"targetHandle": "BaseChatMemory|memory|ConversationalRetrievalChain-SmY3w"
},
{
"id": "reactflow__edge-PromptTemplate-bs0vjPromptTemplate|PromptTemplate-bs0vj|StringPromptTemplate|BasePromptTemplate|PromptTemplate-ConversationalRetrievalChain-SmY3wBasePromptTemplate|combine_docs_chain_kwargs|ConversationalRetrievalChain-SmY3w",
"style": {
"stroke": "#555"
},
"source": "PromptTemplate-bs0vj",
"target": "ConversationalRetrievalChain-SmY3w",
"animated": true,
"className": "",
"sourceHandle": "PromptTemplate|PromptTemplate-bs0vj|StringPromptTemplate|PromptTemplate|BasePromptTemplate",
"targetHandle": "BasePromptTemplate|combine_docs_chain_kwargs|ConversationalRetrievalChain-SmY3w"
},
{
"id": "reactflow__edge-BishengLLM-768acBishengLLM|BishengLLM-768ac|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-ConversationalRetrievalChain-SmY3wBaseLanguageModel|llm|ConversationalRetrievalChain-SmY3w",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-768ac",
"target": "ConversationalRetrievalChain-SmY3w",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-768ac|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|ConversationalRetrievalChain-SmY3w"
},
{
"id": "reactflow__edge-ElasticKeywordsSearch-1c80eElasticKeywordsSearch|ElasticKeywordsSearch-1c80e|VectorStore|ElasticKeywordsSearch|BaseRetriever|VectorStoreRetriever-MixEsVectorRetriever-J35CZBaseRetriever|keyword_retriever|MixEsVectorRetriever-J35CZ",
"style": {
"stroke": "#555"
},
"source": "ElasticKeywordsSearch-1c80e",
"target": "MixEsVectorRetriever-J35CZ",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "ElasticKeywordsSearch|ElasticKeywordsSearch-1c80e|VectorStore|ElasticKeywordsSearch|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|keyword_retriever|MixEsVectorRetriever-J35CZ"
}
],
"nodes": [
{
"id": "MixEsVectorRetriever-J35CZ",
"data": {
"id": "MixEsVectorRetriever-J35CZ",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": true,
"type": "str",
"l2_name": "tags",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "MixEsVectorRetriever",
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": true,
"type": "code",
"l2_name": "metadata",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"combine_strategy": {
"l2": false,
"info": "",
"list": true,
"name": "combine_strategy",
"show": true,
"type": "str",
"value": "mix",
"l2_name": "combine_strategy",
"options": [
"keyword_front",
"vector_front",
"mix"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"vector_retriever": {
"l2": false,
"info": "",
"list": false,
"name": "vector_retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "vector_retriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"keyword_retriever": {
"l2": false,
"info": "",
"list": false,
"name": "keyword_retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "keyword_retriever",
"advanced": false,
"password": true,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "This class ensemble the results of es retriever and vector retriever.",
"base_classes": [
"BaseRetriever",
"MixEsVectorRetriever"
],
"display_name": "MixEsVectorRetriever",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "MixEsVectorRetriever",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 351,
"dragging": false,
"position": {
"x": 855.7285654150652,
"y": 657.020339011865
},
"selected": false,
"positionAbsolute": {
"x": 855.7285654150652,
"y": 657.020339011865
}
},
{
"id": "Milvus-cyR5W",
"data": {
"id": "Milvus-cyR5W",
"node": {
"template": {
"_type": "Milvus",
"drop_old": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"documents": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": false,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"index_params": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_params": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"collection_name": {
"l2": true,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "毕昇产品文档20240421",
"l2_name": "collection_name",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"collection_id": 4597
},
"connection_args": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"consistency_level": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"VectorStore",
"Milvus",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 393,
"dragging": false,
"position": {
"x": 252.82794993869493,
"y": 1067.6627689948364
},
"selected": false,
"positionAbsolute": {
"x": 252.82794993869493,
"y": 1067.6627689948364
}
},
{
"id": "ConversationalRetrievalChain-SmY3w",
"data": {
"id": "ConversationalRetrievalChain-SmY3w",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"_type": "ConversationalRetrievalChain",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseChatMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"value": false,
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"l2": false,
"info": "",
"list": false,
"name": "callbacks",
"show": false,
"type": "Callbacks",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"retriever": {
"l2": false,
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "retriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"chain_type": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"condense_question_llm": {
"l2": false,
"info": "",
"list": false,
"name": "condense_question_llm",
"show": false,
"type": "BaseLanguageModel",
"l2_name": "condense_question_llm",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Return source documents"
},
"condense_question_prompt": {
"l2": false,
"info": "",
"list": false,
"name": "condense_question_prompt",
"show": true,
"type": "BasePromptTemplate",
"value": {
"_type": "prompt",
"template": "Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language.\n\nChat History:\n{chat_history}\nFollow Up Input: {question}\nStandalone question:",
"output_parser": null,
"input_variables": [
"chat_history",
"question"
],
"template_format": "f-string",
"partial_variables": {},
"validate_template": true
},
"l2_name": "condense_question_prompt",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"combine_docs_chain_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "combine_docs_chain_kwargs",
"show": true,
"type": "BasePromptTemplate",
"l2_name": "combine_docs_chain_kwargs",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "prompt"
}
},
"description": "Convenience method to load chain from LLM and retriever.",
"base_classes": [
"ConversationalRetrievalChain",
"Chain",
"BaseConversationalRetrievalChain",
"function"
],
"display_name": "ConversationalRetrievalChain",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/chat_vector_db"
},
"type": "ConversationalRetrievalChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 495,
"dragging": false,
"position": {
"x": 1716.0776457768882,
"y": 243.73689122583036
},
"selected": false,
"positionAbsolute": {
"x": 1716.0776457768882,
"y": 243.73689122583036
}
},
{
"id": "ConversationBufferMemory-K1tss",
"data": {
"id": "ConversationBufferMemory-K1tss",
"node": {
"template": {
"_type": "ConversationBufferMemory",
"ai_prefix": {
"l2": false,
"info": "",
"list": false,
"name": "ai_prefix",
"show": false,
"type": "str",
"value": "AI",
"l2_name": "ai_prefix",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_key": {
"l2": false,
"info": "The variable to be used as Chat Input when more than one variable is available.",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "",
"l2_name": "input_key",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"memory_key": {
"l2": false,
"info": "",
"list": false,
"name": "memory_key",
"show": true,
"type": "str",
"value": "chat_history",
"l2_name": "memory_key",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"output_key": {
"l2": false,
"info": "The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "answer",
"l2_name": "output_key",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"chat_memory": {
"l2": false,
"info": "",
"list": false,
"name": "chat_memory",
"show": true,
"type": "BaseChatMessageHistory",
"l2_name": "chat_memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"human_prefix": {
"l2": false,
"info": "",
"list": false,
"name": "human_prefix",
"show": false,
"type": "str",
"value": "Human",
"l2_name": "human_prefix",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"return_messages": {
"l2": false,
"info": "",
"list": false,
"name": "return_messages",
"show": true,
"type": "bool",
"l2_name": "return_messages",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Buffer for storing conversation memory.",
"base_classes": [
"ConversationBufferMemory",
"BaseChatMemory",
"BaseMemory"
],
"display_name": "ConversationBufferMemory",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/memory/how_to/buffer"
},
"type": "ConversationBufferMemory",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 527,
"dragging": false,
"position": {
"x": 843.4894981704888,
"y": 77.9938911218216
},
"selected": false,
"positionAbsolute": {
"x": 843.4894981704888,
"y": 77.9938911218216
}
},
{
"id": "PromptTemplate-bs0vj",
"data": {
"id": "PromptTemplate-bs0vj",
"node": {
"name": "",
"template": {
"_type": "PromptTemplate",
"template": {
"l2": false,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "参考文本:\n{context}\n\n----------------------\n\n1.用中文回答用户问题,并且答案要严谨专业。\n2.你需要依据以上【参考文本】中的内容来回答,当【参考文本】中有明确与用户问题相关的内容时才进行回答,不可根据自己的知识来回答。\n3.由于【参考文本】可能包含多个来自不同信息源的信息,所以根据这些不同的信息源可能得出有差异甚至冲突的答案,当发现这种情况时,这些答案都列举出来;如果没有冲突或差异,则只需要给出一个最终结果。\n4.若【参考文本】中内容与用户问题不相关则回复“没有找到相关内容”。\n\n----------------------\n\n用户问题: {question}\n你的回答:",
"l2_name": "template",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_variables": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"context",
"question"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"template_format": {
"l2": false,
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "str",
"value": "f-string",
"l2_name": "template_format",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"partial_variables": {
"l2": false,
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"l2_name": "partial_variables",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"validate_template": {
"l2": false,
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": true,
"l2_name": "validate_template",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Schema to represent a prompt for an LLM.",
"base_classes": [
"StringPromptTemplate",
"PromptTemplate",
"BasePromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"": [
"context",
"question"
],
"template": [
"context",
"question"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {
"formatters": {
"openai_api_key": {}
},
"base_formatters": {
"dict": {},
"list": {},
"show": {},
"union": {},
"kwargs": {},
"default": {},
"headers": {},
"optional": {},
"password": {},
"multiline": {},
"model_fields": {
"MODEL_DICT": {
"OpenAI": [
"text-davinci-003",
"text-davinci-002",
"text-curie-001",
"text-babbage-001",
"text-ada-001"
],
"Anthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
],
"ChatOpenAI": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k"
],
"ChatAnthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
]
}
},
"dict_code_file": {}
}
}
},
"type": "PromptTemplate",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 291,
"dragging": false,
"position": {
"x": 838.6147040497829,
"y": -450.1088052880104
},
"selected": false,
"positionAbsolute": {
"x": 838.6147040497829,
"y": -450.1088052880104
}
},
{
"id": "BishengLLM-768ac",
"data": {
"id": "BishengLLM-768ac",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 5,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BaseLanguageModel",
"BaseChatModel",
"BishengLLM",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 407,
"dragging": false,
"position": {
"x": 185.91731964952712,
"y": -45.1192362802976
},
"selected": true,
"positionAbsolute": {
"x": 185.91731964952712,
"y": -45.1192362802976
}
},
{
"id": "ElasticKeywordsSearch-1c80e",
"data": {
"id": "ElasticKeywordsSearch-1c80e",
"node": {
"beta": false,
"template": {
"ids": {
"info": "",
"list": true,
"name": "ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Ids",
"model_config": {}
},
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLLM",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "LLM",
"model_config": {}
},
"_type": "ElasticKeywordsSearch",
"prompt": {
"info": "",
"list": false,
"name": "prompt",
"show": true,
"type": "BasePromptTemplate",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "prompt",
"model_config": {}
},
"drop_old": {
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Drop Old",
"model_config": {}
},
"documents": {
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Documents",
"model_config": {}
},
"embedding": {
"info": "",
"list": false,
"name": "embedding",
"show": false,
"type": "Embeddings",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Embedding",
"model_config": {}
},
"metadatas": {
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadatas",
"model_config": {}
},
"index_name": {
"info": "",
"list": false,
"name": "index_name",
"show": true,
"type": "knowledge_one",
"value": "毕昇产品文档20240421",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Index Name",
"model_config": {},
"collection_id": 4597
},
"ssl_verify": {
"info": "",
"list": false,
"name": "ssl_verify",
"show": true,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "ssl_verify",
"model_config": {}
},
"search_type": {
"info": "",
"list": false,
"name": "search_type",
"show": true,
"type": "str",
"value": "similarity",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Search Type",
"model_config": {}
},
"search_kwargs": {
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Search Kwargs",
"model_config": {}
},
"refresh_indices": {
"info": "",
"list": false,
"name": "refresh_indices",
"show": false,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Refresh Indices",
"model_config": {}
},
"elasticsearch_url": {
"info": "",
"list": false,
"name": "elasticsearch_url",
"show": true,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "ES_connection_url",
"model_config": {}
}
},
"description": "Construct ElasticKeywordsSearch wrapper from raw documents.",
"base_classes": [
"VectorStore",
"ElasticKeywordsSearch",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "ElasticKeywordsSearch",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030",
"field_formatters": {}
},
"type": "ElasticKeywordsSearch",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 547,
"dragging": false,
"position": {
"x": 216.8898375498219,
"y": 461.0085204207429
},
"selected": false,
"positionAbsolute": {
"x": 216.8898375498219,
"y": 461.0085204207429
}
}
],
"viewport": {
"x": 365.45540726853375,
"y": 231.0471559799472,
"zoom": 0.42343675192812
}
},
"order_num": null,
"guide_word": null
},
{
"update_time": "2024-08-20 17:25:43",
"parameters": null,
"name": "⭐️SQLAgent",
"description": "通过自然语言进行数据库查询与分析。当前共享key只支持GPT3.5模型,效果可能不如4。\n\n暂不支持多轮问答。当前提供了上市公司相关的示例数据库,具体数据库表见:https://dataelem.feishu.cn/wiki/XaIzwkZNbisIoRkdPv2cuOqwnQf?sheet=d9b32d",
"flow_id": "2623add6f93f40cf9c707de670e44b59",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-08-20 17:25:43",
"id": 183,
"data": {
"edges": [
{
"id": "reactflow__edge-BishengLLM-268bdBishengLLM|BishengLLM-268bd|BishengLLM|BaseLanguageModel|BaseChatModel|BaseLLM-SQLAgent-coFffBaseLanguageModel|llm|SQLAgent-coFff",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-268bd",
"target": "SQLAgent-coFff",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-268bd|BishengLLM|BaseLanguageModel|BaseChatModel|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|SQLAgent-coFff"
}
],
"nodes": [
{
"id": "SQLAgent-coFff",
"data": {
"id": "SQLAgent-coFff",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"_type": "SQLAgent",
"top_k": {
"l2": false,
"info": "",
"list": false,
"name": "top_k",
"show": false,
"type": "int",
"value": 10,
"l2_name": "top_k",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"prefix": {
"l2": false,
"info": "",
"list": false,
"name": "prefix",
"show": true,
"type": "str",
"value": "You are an agent designed to interact with a SQL database.\nGiven an input question, create a syntactically correct {dialect} query to run, then look at the results of the query and return the answer.\nUnless the user specifies a specific number of examples they wish to obtain, always limit your query to at most {top_k} results.\nYou can order the results by a relevant column to return the most interesting examples in the database.\nNever query for all the columns from a specific table, only ask for the relevant columns given the question.\nYou have access to tools for interacting with the database.\nOnly use the below tools. Only use the information returned by the below tools to construct your final answer.\nYou MUST double check your query before executing it. If you get an error while executing a query, rewrite the query and try again.\n\nDO NOT make any DML statements (INSERT, UPDATE, DELETE, DROP etc.) to the database.\n\nIf the question does not seem related to the database, just return \"I don't know\" as the answer.\n",
"l2_name": "prefix",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"placeholder": ""
},
"suffix": {
"l2": false,
"info": "",
"list": false,
"name": "suffix",
"show": true,
"type": "str",
"value": "Begin!\n\nQuestion: {input}\nThought: I should look at the tables in the database to see what I can query. Then I should query the schema of the most relevant tables.\n{agent_scratchpad}",
"l2_name": "suffix",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"database_uri": {
"l2": true,
"info": "",
"list": false,
"name": "database_uri",
"show": true,
"type": "str",
"value": "mysql+pymysql://root:E1SkG0PaDMEPTAxY@192.168.106.116:3306/company_stock",
"l2_name": "database_uri",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_variables": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": true,
"type": "str",
"value": [
"input",
"agent_scratchpad"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"format_instructions": {
"l2": false,
"info": "",
"list": false,
"name": "format_instructions",
"show": true,
"type": "str",
"value": "Use the following format:\n\nQuestion: the input question you must answer\nThought: you should always think about what to do\nAction: the action to take, should be one of [{tool_names}]\nAction Input: the input to the action\nObservation: the result of the action\n... (this Thought/Action/Action Input/Observation can repeat N times)\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question",
"l2_name": "format_instructions",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"placeholder": ""
}
},
"description": "Construct an SQL agent from an LLM and tools.",
"base_classes": [
"CustomAgentExecutor",
"SQLAgent",
"Chain",
"AgentExecutor",
"function"
],
"display_name": "SQLAgent",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "SQLAgent",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 705,
"position": {
"x": 560.4986060286186,
"y": 43.27482866991457
},
"selected": false,
"positionAbsolute": {
"x": 560.4986060286186,
"y": 43.27482866991457
}
},
{
"id": "BishengLLM-268bd",
"data": {
"id": "BishengLLM-268bd",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 4,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BishengLLM",
"BaseLanguageModel",
"BaseChatModel",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 407,
"dragging": false,
"position": {
"x": -234.44315040341712,
"y": 160.48338217607173
},
"selected": true,
"positionAbsolute": {
"x": -234.44315040341712,
"y": 160.48338217607173
}
}
],
"viewport": {
"x": 448.55360702357893,
"y": -9.209667977077856,
"zoom": 1.147646679561573
}
},
"order_num": 6815702,
"guide_word": null
},
{
"update_time": "2024-08-20 17:30:30",
"parameters": null,
"name": "⭐️ QA生成",
"description": "上传文档自动生成QA对,上传文档后,发送“开始”触发",
"flow_id": "23966d5d7f234ef2827e6128ae6bd8bf",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-08-20 17:30:30",
"id": 185,
"data": {
"edges": [
{
"id": "reactflow__edge-ElemUnstructuredLoaderV0-fcc08ElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-fcc08|Document-QAGenerationChainV2-c3ec3Document|documents|QAGenerationChainV2-c3ec3",
"style": {
"stroke": "#555"
},
"source": "ElemUnstructuredLoaderV0-fcc08",
"target": "QAGenerationChainV2-c3ec3",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "ElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-fcc08|Document",
"targetHandle": "Document|documents|QAGenerationChainV2-c3ec3"
},
{
"id": "reactflow__edge-InputFileNode-09d8bInputFileNode|InputFileNode-09d8b|fileNode-ElemUnstructuredLoaderV0-fcc08fileNode|file_path|ElemUnstructuredLoaderV0-fcc08",
"style": {
"stroke": "#555"
},
"source": "InputFileNode-09d8b",
"target": "ElemUnstructuredLoaderV0-fcc08",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "InputFileNode|InputFileNode-09d8b|fileNode",
"targetHandle": "fileNode|file_path|ElemUnstructuredLoaderV0-fcc08"
},
{
"id": "reactflow__edge-BishengLLM-f47edBishengLLM|BishengLLM-f47ed|BishengLLM|BaseLanguageModel|BaseChatModel|BaseLLM-QAGenerationChainV2-c3ec3BaseLanguageModel|llm|QAGenerationChainV2-c3ec3",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-f47ed",
"target": "QAGenerationChainV2-c3ec3",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-f47ed|BishengLLM|BaseLanguageModel|BaseChatModel|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|QAGenerationChainV2-c3ec3"
}
],
"nodes": [
{
"id": "QAGenerationChainV2-c3ec3",
"data": {
"id": "QAGenerationChainV2-c3ec3",
"node": {
"beta": false,
"template": {
"k": {
"info": "",
"list": false,
"name": "k",
"show": true,
"type": "int",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "K",
"model_config": {}
},
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"_type": "QAGenerationChainV2",
"prompt": {
"info": "",
"list": false,
"name": "prompt",
"show": false,
"type": "ChatPromptTemplate",
"value": {
"name": null,
"tags": null,
"_type": "chat",
"messages": [
{
"prompt": {
"name": null,
"tags": null,
"_type": "prompt",
"metadata": null,
"template": "您的任务是遵循以下规则从给定的上下文中提出一个问题,规则如下:\n\n 1. 即使在没有给定上下文的情况下,问题也应该对人类有意义。\n 2. 应该可以从给定上下文中完全回答问题。\n 3. 问题应该来自包含重要信息的上下文部分。它也可以来自表格、段落、或者代码等。\n 4. 回答问题时不应包含任何链接。\n 5. 问题的难度应该是中等的。\n 6. 问题必须是合理的,并且必须能被人理解和回答。\n 7. 不要在问题中使用“提供的上下文”等短语。\n 8. 避免使用可以分解成多个问题的“和”字样来构建问题。\n 9. 如果上下文是中文,那么问题也应该是中文的。\n\nExamples:\ncontext:武汉达梦数据库股份有限公司 招股说明书 (申报稿) 1-1-226 表中作出恰当列报。 2、研发费用 2021年度、 2020年度、 2019 年度,达梦数据 研发费用金额分别 为11,786.99 万元、 9,660.26 万元、 6,255.86万元, 各年度研发费用占营 业收入的比例分别为 15.86 % 、 21.46 %、20.74 %。 由于研发投入金额及其占当期 营业收入的比例是 达梦数据 的关键 指标之一,可能存在因为核算不准 确而导致的错报风险。因此, 中天 运会计师 将研发费用的归集和核算 确定为关键审计事项。 针对研发费用的真实性与准确性,会计师执行的 重要审计程序主要包括: (1)了解与研发费用相关的关键内部控制,评价 这些控制的设计,确定其是否得到执行,并对相关内 部控制的运行有效性进行测试; (2)获取研发项目立项、审批资料,抽查重要研 发项目的过程文档,判断研发项目的真实性; (3)获取研发费用按项目、性质分类明细表,分\nquestion:达梦2021年的研发费用占营业收入的比例是多少?\n\ncontext:武汉达梦数据库股份有限公司 招股说明书 (申报稿) 1-1-329 (2)存货周转率 公司与同行业可比公司存货周转率对比情况如下: 公司简称 2021年度 2020年度 2019年度 中望软件 6.93 5.62 10.66 星环科技 3.38 3.21 2.24 金山办公 212.60 175.46 162.91 平均值 74.30 61.43 58.60 本公司 1.13 0.57 0.87 数据来源:可比公司招股说明书、定期报告。 报告期各期, 公司存货周转率显著低于同行业可比公司存货周转率平均水平, 主要是因为公司将未验收的数据及行业解决方案项目所发生的累 计成本均作为 存货核算。报告期各期末,公司存在 “湖北省司法行政数据中心项目 ”、“政法云 大数据中心基础设施服务及大数据中心软件采购 项目”等金额较大且实施周期较 长的数据及行业解决方案项目,导致年末存货金额较大。\nquestion:达梦2021年的存货周转率相较于前一年有何变化?\n",
"input_types": {},
"output_parser": null,
"input_variables": [],
"template_format": "f-string",
"partial_variables": {},
"validate_template": false
},
"additional_kwargs": {}
},
{
"prompt": {
"name": null,
"tags": null,
"_type": "prompt",
"metadata": null,
"template": "\ncontext:{context}\nquestion:\n",
"input_types": {},
"output_parser": null,
"input_variables": [
"context"
],
"template_format": "f-string",
"partial_variables": {},
"validate_template": false
},
"additional_kwargs": {}
}
],
"metadata": null,
"input_types": {},
"output_parser": null,
"input_variables": [
"context"
],
"partial_variables": {},
"validate_template": false
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Prompt",
"model_config": {}
},
"documents": {
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Documents",
"model_config": {}
},
"chunk_size": {
"info": "",
"list": false,
"name": "chunk_size",
"show": true,
"type": "int",
"value": 512,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Chunk Size",
"model_config": {}
},
"input_node": {
"info": "",
"list": false,
"name": "input_node",
"show": false,
"type": "input",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Preset Question",
"model_config": {}
}
},
"description": "Create a QAGenerationChain from a language model.",
"base_classes": [
"QAGenerationChainV2",
"Chain",
"function"
],
"display_name": "QAGenerationChainV2",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "QAGenerationChainV2",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 429,
"dragging": false,
"position": {
"x": 1052.5270781868935,
"y": 242.3629681024322
},
"selected": false,
"positionAbsolute": {
"x": 1052.5270781868935,
"y": 242.3629681024322
}
},
{
"id": "ElemUnstructuredLoaderV0-fcc08",
"data": {
"id": "ElemUnstructuredLoaderV0-fcc08",
"node": {
"beta": false,
"template": {
"_type": "ElemUnstructuredLoaderV0",
"kwargs": {
"info": "",
"list": false,
"name": "kwargs",
"show": true,
"type": "dict",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "kwargs",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": true,
"type": "code",
"value": "{}",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"file_path": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "fileNode",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"suffixes": [
".html",
".md",
".txt",
".bmp",
".jpg",
".png",
".jpeg",
".doc",
".docx",
".pdf",
".ppt",
".pptx",
".xls",
".xlsx",
".tsv",
".csv",
".tiff"
],
"fileTypes": [
"html",
"md",
"txt",
"bmp",
"jpg",
"png",
"jpeg",
"doc",
"docx",
"pdf",
"ppt",
"pptx",
".xls",
"xlsx",
"tsv",
"csv",
"tiff"
],
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "File Path",
"model_config": {}
},
"unstructured_api_url": {
"info": "",
"list": false,
"name": "unstructured_api_url",
"show": true,
"type": "str",
"value": "https://bisheng.dataelem.com/api/v1/etl4llm/predict",
"dynamic": false,
"advanced": false,
"password": true,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "unstructured_api_url",
"model_config": {}
}
},
"description": "The appropriate parser is automatically selected based on the file format and OCR is supported",
"base_classes": [
"Document"
],
"display_name": "ElemUnstructuredLoaderV0",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "ElemUnstructuredLoaderV0",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 477,
"dragging": false,
"position": {
"x": 311.70357393794484,
"y": -85.01385230407082
},
"selected": false,
"positionAbsolute": {
"x": 311.70357393794484,
"y": -85.01385230407082
}
},
{
"id": "InputFileNode-09d8b",
"data": {
"id": "InputFileNode-09d8b",
"node": {
"beta": false,
"template": {
"_type": "InputFileNode",
"file_path": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "file",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".html",
".md",
".txt",
".bmp",
".jpg",
".png",
".jpeg",
".doc",
".docx",
".pdf",
".ppt",
".pptx",
"..xls",
".xlsx",
".tsv",
".csv",
".tiff"
],
"fileTypes": [
"html",
"md",
"txt",
"bmp",
"jpg",
"png",
"jpeg",
"doc",
"docx",
"pdf",
"ppt",
"pptx",
".xls",
"xlsx",
"tsv",
"csv",
"tiff"
],
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "File Path",
"model_config": {}
},
"file_type": {
"info": "Tips for which file should upload",
"list": false,
"name": "file_type",
"show": true,
"type": "str",
"value": "请上传文件",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "提示上传文件类型",
"display_name": "Name",
"model_config": {}
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"fileNode"
],
"display_name": "InputFileNode",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "InputFileNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 337,
"dragging": false,
"position": {
"x": -353.26090599027486,
"y": -72.66649282333755
},
"selected": false,
"positionAbsolute": {
"x": -353.26090599027486,
"y": -72.66649282333755
}
},
{
"id": "BishengLLM-f47ed",
"data": {
"id": "BishengLLM-f47ed",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 5,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BishengLLM",
"BaseLanguageModel",
"BaseChatModel",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 407,
"dragging": false,
"position": {
"x": 289.08494703205145,
"y": 479.77562233501465
},
"selected": true,
"positionAbsolute": {
"x": 289.08494703205145,
"y": 479.77562233501465
}
}
],
"viewport": {
"x": 387.6997915647513,
"y": 113.95818800464951,
"zoom": 0.8646078322295284
}
},
"order_num": 6946772,
"guide_word": null
},
{
"update_time": "2024-08-20 17:39:24",
"parameters": null,
"name": "⭐️ API调用(使用APIChain)",
"description": "可以参考示例复制完整的接口文档,即可开始进行接口调用",
"flow_id": "44b8448120ba4d65b5d16e55984a583f",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-08-20 17:39:24",
"id": 186,
"data": {
"edges": [
{
"id": "reactflow__edge-Tool-OL3JiTool|Tool-OL3Ji|Tool|BaseTool-ZeroShotAgent-aFNWBBaseTool|tools|ZeroShotAgent-aFNWB",
"style": {
"stroke": "#555"
},
"source": "Tool-OL3Ji",
"target": "ZeroShotAgent-aFNWB",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "Tool|Tool-OL3Ji|Tool|BaseTool",
"targetHandle": "BaseTool|tools|ZeroShotAgent-aFNWB"
},
{
"id": "reactflow__edge-APIChain-613fcAPIChain|APIChain-613fc|APIChain|Chain|function-Tool-OL3Jifunction|func|Tool-OL3Ji",
"style": {
"stroke": "#555"
},
"source": "APIChain-613fc",
"target": "Tool-OL3Ji",
"animated": true,
"className": "",
"sourceHandle": "APIChain|APIChain-613fc|APIChain|Chain|function",
"targetHandle": "function|func|Tool-OL3Ji"
},
{
"id": "reactflow__edge-PromptTemplate-48659PromptTemplate|PromptTemplate-48659|BasePromptTemplate|StringPromptTemplate|PromptTemplate-APIChain-613fcBasePromptTemplate|api_url_prompt|APIChain-613fc",
"style": {
"stroke": "#555"
},
"source": "PromptTemplate-48659",
"target": "APIChain-613fc",
"animated": true,
"className": "",
"sourceHandle": "PromptTemplate|PromptTemplate-48659|BasePromptTemplate|StringPromptTemplate|PromptTemplate",
"targetHandle": "BasePromptTemplate|api_url_prompt|APIChain-613fc"
},
{
"id": "reactflow__edge-BishengLLM-687d0BishengLLM|BishengLLM-687d0|BishengLLM|BaseLanguageModel|BaseChatModel|BaseLLM-APIChain-613fcBaseLanguageModel|llm|APIChain-613fc",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-687d0",
"target": "APIChain-613fc",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-687d0|BishengLLM|BaseLanguageModel|BaseChatModel|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|APIChain-613fc"
},
{
"id": "reactflow__edge-BishengLLM-687d0BishengLLM|BishengLLM-687d0|BishengLLM|BaseLanguageModel|BaseChatModel|BaseLLM-ZeroShotAgent-aFNWBBaseLanguageModel|llm|ZeroShotAgent-aFNWB",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-687d0",
"target": "ZeroShotAgent-aFNWB",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-687d0|BishengLLM|BaseLanguageModel|BaseChatModel|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|ZeroShotAgent-aFNWB"
}
],
"nodes": [
{
"id": "ZeroShotAgent-aFNWB",
"data": {
"id": "ZeroShotAgent-aFNWB",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"_type": "ZeroShotAgent",
"tools": {
"l2": false,
"info": "",
"list": true,
"name": "tools",
"show": true,
"type": "BaseTool",
"l2_name": "tools",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"prefix": {
"l2": false,
"info": "",
"list": false,
"name": "prefix",
"show": true,
"type": "str",
"value": "Answer the following questions as best you can. You have access to the following tools:",
"l2_name": "prefix",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"placeholder": ""
},
"suffix": {
"l2": false,
"info": "",
"list": false,
"name": "suffix",
"show": true,
"type": "str",
"value": "Begin!\n\nQuestion: {input}\nThought:{agent_scratchpad}",
"l2_name": "suffix",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": false,
"type": "AgentOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_variables": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": true,
"type": "str",
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callback_manager": {
"l2": false,
"info": "",
"list": false,
"name": "callback_manager",
"show": false,
"type": "BaseCallbackManager",
"l2_name": "callback_manager",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"format_instructions": {
"l2": false,
"info": "",
"list": false,
"name": "format_instructions",
"show": true,
"type": "str",
"value": "Use the following format:\n\nQuestion: the input question you must answer\nThought: you should always think about what to do\nAction: the action to take, should be one of [{tool_names}]\nAction Input: the input to the action\nObservation: the result of the action\n... (this Thought/Action/Action Input/Observation can repeat N times)\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question",
"l2_name": "format_instructions",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"placeholder": ""
}
},
"description": "Construct an agent from an LLM and tools.",
"base_classes": [
"BaseSingleActionAgent",
"ZeroShotAgent",
"Agent",
"function"
],
"display_name": "ZeroShotAgent",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/agents/how_to/custom_mrkl_agent"
},
"type": "ZeroShotAgent",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 609,
"position": {
"x": 1504.8003657712438,
"y": 142.75763054618068
},
"selected": false,
"positionAbsolute": {
"x": 1504.8003657712438,
"y": 142.75763054618068
}
},
{
"id": "Tool-OL3Ji",
"data": {
"id": "Tool-OL3Ji",
"node": {
"template": {
"func": {
"l2": false,
"info": "",
"list": false,
"name": "func",
"show": true,
"type": "function",
"l2_name": "func",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"name": {
"l2": false,
"info": "",
"list": false,
"name": "name",
"show": true,
"type": "str",
"value": "天气查询",
"l2_name": "name",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"_type": "Tool",
"description": {
"l2": false,
"info": "",
"list": false,
"name": "description",
"show": true,
"type": "str",
"value": "提供地址名称,查询该地址天气信息",
"l2_name": "description",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"return_direct": {
"l2": false,
"info": "",
"list": false,
"name": "return_direct",
"show": true,
"type": "bool",
"value": false,
"l2_name": "return_direct",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "Converts a chain, agent or function into a tool.",
"base_classes": [
"Tool",
"BaseTool"
],
"display_name": "Tool",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "Tool",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 445,
"position": {
"x": 918.0602598736352,
"y": 513.6611974885975
},
"selected": false,
"positionAbsolute": {
"x": 918.0602598736352,
"y": 513.6611974885975
}
},
{
"id": "APIChain-613fc",
"data": {
"id": "APIChain-613fc",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"_type": "APIChain",
"headers": {
"info": "",
"list": false,
"name": "headers",
"show": true,
"type": "code",
"value": "{'Authorization': 'Bearer '}",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": true,
"title_case": true,
"placeholder": "",
"display_name": "Headers",
"model_config": {}
},
"api_docs": {
"info": "",
"list": false,
"name": "api_docs",
"show": true,
"type": "str",
"value": "key SGVquxtnZYK9WHJVD 接口地址 https://api.seniverse.com/v3/weather/now.json?key=your_api_key&location=beijing&language=zh-Hans&unit=c 请求参数说明 参数名称 类型 默认值 必填 备注 key String 无 是 你的 API 密钥 location Location 无 是 所查询的位置 language Language zh-Hans 否 语言 unit Unit c 否 单位 返回结果示例 JSON 复制代码 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 { \"results\": [ { \"location\": { \"id\": \"C23NB62W20TF\", \"name\": \"西雅图\", \"country\": \"US\", \"path\": \"西雅图,华盛顿州,美国\", \"timezone\": \"America/Los_Angeles\", \"timezone_offset\": \"-07:00\" }, \"now\": { \"text\": \"多云\", //天气现象文字 \"code\": \"4\", //天气现象代码 \"temperature\": \"14\", //温度,单位为c摄氏度或f华氏度 \"feels_like\": \"14\", //体感温度,单位为c摄氏度或f华氏度 \"pressure\": \"1018\", //气压,单位为mb百帕或in英寸 \"humidity\": \"76\", //相对湿度,0~100,单位为百分比 \"visibility\": \"16.09\", //能见度,单位为km公里或mi英里 \"wind_direction\": \"西北\", //风向文字 \"wind_direction_degree\": \"340\", //风向角度,范围0~360,0为正北,90为正东,180为正南,270为正西 \"wind_speed\": \"8.05\", //风速,单位为km/h公里每小时或mph英里每小时 \"wind_scale\": \"2\", //风力等级,请参考:http://baike.baidu.com/view/465076.htm \"clouds\": \"90\", //云量,单位%,范围0~100,天空被云覆盖的百分比 #目前不支持中国城市# \"dew_point\": \"-12\" //露点温度,请参考:http://baike.baidu.com/view/118348.htm #目前不支持中国城市# }, \"last_update\": \"2015-09-25T22:45:00-07:00\" //数据更新时间(该城市的本地时间) } ] }",
"dynamic": false,
"advanced": false,
"password": true,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Api Docs",
"model_config": {}
},
"input_node": {
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Preset Question",
"model_config": {}
},
"api_url_prompt": {
"info": "",
"list": false,
"name": "api_url_prompt",
"show": true,
"type": "BasePromptTemplate",
"value": {
"name": null,
"tags": null,
"_type": "prompt",
"metadata": null,
"template": "You are given the below API Documentation:\n{api_docs}\nUsing this documentation, generate the full API url to call for answering the user question.\nYou should build the API url in order to get a response that is as short as possible, while still getting the necessary information to answer the question. Pay attention to deliberately exclude any unnecessary pieces of data in the API call.\n\nQuestion:{question}\nAPI url:",
"input_types": {},
"output_parser": null,
"input_variables": [
"api_docs",
"question"
],
"template_format": "f-string",
"partial_variables": {},
"validate_template": false
},
"dynamic": false,
"advanced": false,
"password": true,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Api Url Prompt",
"model_config": {}
},
"limit_to_domains": {
"info": "",
"list": true,
"name": "limit_to_domains",
"show": true,
"type": "str",
"value": [
"https://api.seniverse.com"
],
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Limit To Domains",
"model_config": {}
},
"api_response_prompt": {
"info": "",
"list": false,
"name": "api_response_prompt",
"show": true,
"type": "BasePromptTemplate",
"value": {
"name": null,
"tags": null,
"_type": "prompt",
"metadata": null,
"template": "You are given the below API Documentation:\n{api_docs}\nUsing this documentation, generate the full API url to call for answering the user question.\nYou should build the API url in order to get a response that is as short as possible, while still getting the necessary information to answer the question. Pay attention to deliberately exclude any unnecessary pieces of data in the API call.\n\nQuestion:{question}\nAPI url: {api_url}\n\nHere is the response from the API:\n\n{api_response}\n\nSummarize this response to answer the original question.\n\nSummary:",
"input_types": {},
"output_parser": null,
"input_variables": [
"api_docs",
"api_response",
"api_url",
"question"
],
"template_format": "f-string",
"partial_variables": {},
"validate_template": false
},
"dynamic": false,
"advanced": false,
"password": true,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Api Response Prompt",
"model_config": {}
}
},
"description": "Load chain from just an LLM and the api docs.",
"base_classes": [
"APIChain",
"Chain",
"function"
],
"display_name": "APIChain",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "APIChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 563,
"dragging": false,
"position": {
"x": 477.6277694871776,
"y": 380.571320729037
},
"selected": false,
"positionAbsolute": {
"x": 477.6277694871776,
"y": 380.571320729037
}
},
{
"id": "PromptTemplate-48659",
"data": {
"id": "PromptTemplate-48659",
"node": {
"beta": false,
"icon": null,
"name": "",
"error": null,
"template": {
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "PromptTemplate",
"api_docs": {
"info": "",
"list": false,
"name": "api_docs",
"show": true,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": true,
"title_case": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "api_docs",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"question": {
"info": "",
"list": false,
"name": "question",
"show": true,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": true,
"title_case": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "question",
"model_config": {}
},
"template": {
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "You are given the below API Documentation:\n{api_docs}\n\nUsing this documentation, generate the full API url to call for answering the user question.\nYou should build the API url in order to get a response that is as short as possible, while still getting the necessary information to answer the question. \n\nPlease do not return any other words except the full API url.\n\nQuestion:{question}\nAPI url:",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": true,
"title_case": true,
"placeholder": "",
"display_name": "Template",
"model_config": {}
},
"input_types": {
"info": "",
"list": false,
"name": "input_types",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Input Types",
"model_config": {}
},
"output_parser": {
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Output Parser",
"model_config": {}
},
"input_variables": {
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"api_docs",
"question"
],
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Input Variables",
"model_config": {}
},
"template_format": {
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "Literal['f-string', 'mustache', 'jinja2']",
"value": "f-string",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Template Format",
"model_config": {}
},
"partial_variables": {
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Partial Variables",
"model_config": {}
},
"validate_template": {
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": false,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Validate Template",
"model_config": {}
}
},
"full_path": null,
"description": "Prompt template for a language model.",
"base_classes": [
"BasePromptTemplate",
"StringPromptTemplate",
"PromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"": [
"api_docs",
"question"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {}
},
"type": "PromptTemplate",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 455,
"dragging": false,
"position": {
"x": -52.092556516963214,
"y": 621.8035505128619
},
"selected": false,
"positionAbsolute": {
"x": -52.092556516963214,
"y": 621.8035505128619
}
},
{
"id": "BishengLLM-687d0",
"data": {
"id": "BishengLLM-687d0",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 4,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BishengLLM",
"BaseLanguageModel",
"BaseChatModel",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 407,
"dragging": false,
"position": {
"x": -85.44442588200178,
"y": 56.91781929370879
},
"selected": false,
"positionAbsolute": {
"x": -85.44442588200178,
"y": 56.91781929370879
}
}
],
"viewport": {
"x": 254.0096889201243,
"y": 143.6897914083358,
"zoom": 0.6555101557762626
}
},
"order_num": 7012307,
"guide_word": null
},
{
"update_time": "2024-08-20 17:41:21",
"parameters": null,
"name": "⭐️知识库问答【严谨版】",
"description": "选择知识库,进行知识库问答。通过ES搜索控制召回内容强相关(当然还有许多细节优化,详见:https://dataelem.feishu.cn/wiki/R7OYwlN9Ii8jRFkmOuKcMKtEnZc)",
"flow_id": "95c28c47291641d680a380cf8b03d104",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-08-20 17:41:21",
"id": 187,
"data": {
"edges": [
{
"id": "reactflow__edge-CombineDocsChain-bMaXkCombineDocsChain|CombineDocsChain-bMaXk|BaseCombineDocumentsChain|function-RetrievalQA-ypS4mBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-ypS4m",
"style": {
"stroke": "#555"
},
"source": "CombineDocsChain-bMaXk",
"target": "RetrievalQA-ypS4m",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "CombineDocsChain|CombineDocsChain-bMaXk|BaseCombineDocumentsChain|function",
"targetHandle": "BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-ypS4m"
},
{
"id": "reactflow__edge-PromptTemplate-gM5zgPromptTemplate|PromptTemplate-gM5zg|PromptTemplate|BasePromptTemplate|StringPromptTemplate-CombineDocsChain-bMaXkBasePromptTemplate|prompt|CombineDocsChain-bMaXk",
"style": {
"stroke": "#555"
},
"source": "PromptTemplate-gM5zg",
"target": "CombineDocsChain-bMaXk",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "PromptTemplate|PromptTemplate-gM5zg|StringPromptTemplate|BasePromptTemplate|PromptTemplate",
"targetHandle": "BasePromptTemplate|prompt|CombineDocsChain-bMaXk"
},
{
"id": "reactflow__edge-ElasticKeywordsSearch-f27a9ElasticKeywordsSearch|ElasticKeywordsSearch-f27a9|ElasticKeywordsSearch|VectorStore|BaseRetriever|VectorStoreRetriever-RetrievalQA-ypS4mBaseRetriever|retriever|RetrievalQA-ypS4m",
"style": {
"stroke": "#555"
},
"source": "ElasticKeywordsSearch-f27a9",
"target": "RetrievalQA-ypS4m",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "ElasticKeywordsSearch|ElasticKeywordsSearch-f27a9|ElasticKeywordsSearch|VectorStore|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|RetrievalQA-ypS4m"
},
{
"id": "reactflow__edge-PromptTemplate-4iBFjPromptTemplate|PromptTemplate-4iBFj|StringPromptTemplate|BasePromptTemplate|PromptTemplate-ElasticKeywordsSearch-f27a9BasePromptTemplate|prompt|ElasticKeywordsSearch-f27a9",
"style": {
"stroke": "#555"
},
"source": "PromptTemplate-4iBFj",
"target": "ElasticKeywordsSearch-f27a9",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "PromptTemplate|PromptTemplate-4iBFj|StringPromptTemplate|BasePromptTemplate|PromptTemplate",
"targetHandle": "BasePromptTemplate|prompt|ElasticKeywordsSearch-f27a9"
},
{
"id": "reactflow__edge-BishengLLM-bc77fBishengLLM|BishengLLM-bc77f|BishengLLM|BaseLanguageModel|BaseChatModel|BaseLLM-CombineDocsChain-bMaXkBaseLanguageModel|llm|CombineDocsChain-bMaXk",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-bc77f",
"target": "CombineDocsChain-bMaXk",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-bc77f|BishengLLM|BaseLanguageModel|BaseChatModel|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|CombineDocsChain-bMaXk"
},
{
"id": "reactflow__edge-BishengLLM-bc77fBishengLLM|BishengLLM-bc77f|BishengLLM|BaseLanguageModel|BaseChatModel|BaseLLM-ElasticKeywordsSearch-f27a9BaseLLM|llm|ElasticKeywordsSearch-f27a9",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-bc77f",
"target": "ElasticKeywordsSearch-f27a9",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-bc77f|BishengLLM|BaseLanguageModel|BaseChatModel|BaseLLM",
"targetHandle": "BaseLLM|llm|ElasticKeywordsSearch-f27a9"
}
],
"nodes": [
{
"id": "RetrievalQA-ypS4m",
"data": {
"id": "RetrievalQA-ypS4m",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "RetrievalQA",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_key": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"retriever": {
"l2": false,
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "retriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"combine_documents_chain": {
"l2": false,
"info": "",
"list": false,
"name": "combine_documents_chain",
"show": true,
"type": "BaseCombineDocumentsChain",
"l2_name": "combine_documents_chain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Chain for question-answering against an index.",
"base_classes": [
"RetrievalQA",
"BaseRetrievalQA",
"Chain",
"function"
],
"display_name": "RetrievalQA",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"
},
"type": "RetrievalQA",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 317,
"position": {
"x": 1941.838444212454,
"y": 902.7207397625788
},
"selected": false,
"positionAbsolute": {
"x": 1941.838444212454,
"y": 902.7207397625788
}
},
{
"id": "CombineDocsChain-bMaXk",
"data": {
"id": "CombineDocsChain-bMaXk",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "load_qa_chain",
"prompt": {
"l2": false,
"info": "只对Stuff类型生效",
"list": false,
"name": "prompt",
"show": true,
"type": "BasePromptTemplate",
"l2_name": "prompt",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "prompt"
},
"token_max": {
"l2": false,
"info": "只对Stuff类型生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": 7000,
"l2_name": "token_max",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max"
},
"chain_type": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"document_prompt": {
"info": "",
"list": false,
"name": "document_prompt",
"type": "BasePromptTemplate",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Load question answering chain.",
"base_classes": [
"BaseCombineDocumentsChain",
"function"
],
"display_name": "CombineDocsChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "CombineDocsChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 413,
"dragging": false,
"position": {
"x": 1334.4528869077485,
"y": 404.7844512964858
},
"selected": false,
"positionAbsolute": {
"x": 1334.4528869077485,
"y": 404.7844512964858
}
},
{
"id": "PromptTemplate-gM5zg",
"data": {
"id": "PromptTemplate-gM5zg",
"node": {
"name": "",
"template": {
"_type": "PromptTemplate",
"context": {
"info": "",
"list": false,
"name": "context",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "context"
},
"question": {
"info": "",
"list": false,
"name": "question",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "question"
},
"template": {
"l2": false,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "参考文本:\n{context}\n\n----------------------\n# Role:客服\n\n# Background :\n- 你是一名客服人员。你的日常工作是根据【参考文本】的内容回复用户的各类咨询问题。\n\n# Goals:\n- 以上【参考文本】中是从企业知识库中查找到的相关信息,只能结合以上信息进行回答,若以上内容为空或其中没有找到能回答【用户问题】的内容时,则回复“没有找到相关内容”,不能根据你自己的知识自己发挥。\n- 特别要注意区分【用户问题】与【参考文本】中不同的日期、人名、公司名这些关键信息。\n- 用中文回答问题,并且答案要严谨、专业、清晰、可读性好。\n- 拥有排版审美, 会利用序号, 缩进, 分隔线和换行符等等来美化信息排版。\n\n----------------------\n\n用户问题: {question}\n你的回答:",
"l2_name": "template",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_variables": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"context",
"question"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"template_format": {
"l2": false,
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "str",
"value": "f-string",
"l2_name": "template_format",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"partial_variables": {
"l2": false,
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"l2_name": "partial_variables",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"validate_template": {
"l2": false,
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": true,
"l2_name": "validate_template",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Schema to represent a prompt for an LLM.",
"base_classes": [
"StringPromptTemplate",
"BasePromptTemplate",
"PromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"": [
"context",
"question"
],
"template": [
"context",
"question"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {
"formatters": {
"openai_api_key": {}
},
"base_formatters": {
"dict": {},
"list": {},
"show": {},
"union": {},
"kwargs": {},
"default": {},
"headers": {},
"optional": {},
"password": {},
"multiline": {},
"model_fields": {
"MODEL_DICT": {
"OpenAI": [
"text-davinci-003",
"text-davinci-002",
"text-curie-001",
"text-babbage-001",
"text-ada-001"
],
"Anthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
],
"ChatOpenAI": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k"
],
"ChatAnthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
]
}
},
"dict_code_file": {}
}
}
},
"type": "PromptTemplate",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 455,
"dragging": false,
"position": {
"x": 832.6495717437198,
"y": -8.979469210830944
},
"selected": false,
"positionAbsolute": {
"x": 832.6495717437198,
"y": -8.979469210830944
}
},
{
"id": "PromptTemplate-4iBFj",
"data": {
"id": "PromptTemplate-4iBFj",
"node": {
"name": "",
"template": {
"_type": "PromptTemplate",
"question": {
"info": "",
"list": false,
"name": "question",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "question"
},
"template": {
"l2": false,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "分析给定Question,提取Question中包含的KeyWords,输出列表形式\n\nExamples:\nQuestion: 数据项素2022年营收是多少?\nKeyWords: ['数据项素', '2022', '营收, '营业收入']\nQuestion: 深圳出差住宿标准是什么?\nKeyWords: ['深圳', '出差', '住宿标准', '报销标准']\n\n\n----------------\nQuestion: {question}\nKeyWords: ",
"l2_name": "template",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_variables": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"question"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"template_format": {
"l2": false,
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "str",
"value": "f-string",
"l2_name": "template_format",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"partial_variables": {
"l2": false,
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"l2_name": "partial_variables",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"validate_template": {
"l2": false,
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": true,
"l2_name": "validate_template",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Schema to represent a prompt for an LLM.",
"base_classes": [
"StringPromptTemplate",
"BasePromptTemplate",
"PromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"": [
"question"
],
"template": [
"question"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {
"formatters": {
"openai_api_key": {}
},
"base_formatters": {
"dict": {},
"list": {},
"show": {},
"union": {},
"kwargs": {},
"default": {},
"headers": {},
"optional": {},
"password": {},
"multiline": {},
"model_fields": {
"MODEL_DICT": {
"OpenAI": [
"text-davinci-003",
"text-davinci-002",
"text-curie-001",
"text-babbage-001",
"text-ada-001"
],
"Anthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
],
"ChatOpenAI": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k"
],
"ChatAnthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
]
}
},
"dict_code_file": {}
}
}
},
"type": "PromptTemplate",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 373,
"dragging": false,
"position": {
"x": 162.28620398428382,
"y": 658.7665439891539
},
"selected": false,
"positionAbsolute": {
"x": 162.28620398428382,
"y": 658.7665439891539
}
},
{
"id": "ElasticKeywordsSearch-f27a9",
"data": {
"id": "ElasticKeywordsSearch-f27a9",
"node": {
"beta": false,
"template": {
"ids": {
"info": "",
"list": true,
"name": "ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Ids",
"model_config": {}
},
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLLM",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "LLM",
"model_config": {}
},
"_type": "ElasticKeywordsSearch",
"prompt": {
"info": "",
"list": false,
"name": "prompt",
"show": true,
"type": "BasePromptTemplate",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "prompt",
"model_config": {}
},
"drop_old": {
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Drop Old",
"model_config": {}
},
"documents": {
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Documents",
"model_config": {}
},
"embedding": {
"info": "",
"list": false,
"name": "embedding",
"show": false,
"type": "Embeddings",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Embedding",
"model_config": {}
},
"metadatas": {
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadatas",
"model_config": {}
},
"index_name": {
"info": "",
"list": false,
"name": "index_name",
"show": true,
"type": "knowledge_one",
"value": "毕昇产品文档20240421",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Index Name",
"model_config": {},
"collection_id": 4597
},
"ssl_verify": {
"info": "",
"list": false,
"name": "ssl_verify",
"show": true,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "ssl_verify",
"model_config": {}
},
"search_type": {
"info": "",
"list": false,
"name": "search_type",
"show": true,
"type": "str",
"value": "similarity",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Search Type",
"model_config": {}
},
"search_kwargs": {
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{\"k\":6}",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Search Kwargs",
"model_config": {}
},
"refresh_indices": {
"info": "",
"list": false,
"name": "refresh_indices",
"show": false,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Refresh Indices",
"model_config": {}
},
"elasticsearch_url": {
"info": "",
"list": false,
"name": "elasticsearch_url",
"show": true,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "ES_connection_url",
"model_config": {}
}
},
"description": "Construct ElasticKeywordsSearch wrapper from raw documents.",
"base_classes": [
"ElasticKeywordsSearch",
"VectorStore",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "ElasticKeywordsSearch",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030",
"field_formatters": {}
},
"type": "ElasticKeywordsSearch",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 711,
"dragging": false,
"position": {
"x": 812.1149007520644,
"y": 664.6494588266206
},
"selected": false,
"positionAbsolute": {
"x": 812.1149007520644,
"y": 664.6494588266206
}
},
{
"id": "BishengLLM-bc77f",
"data": {
"id": "BishengLLM-bc77f",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 5,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BishengLLM",
"BaseLanguageModel",
"BaseChatModel",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 407,
"dragging": false,
"position": {
"x": 121.42385839968928,
"y": 86.07764034320081
},
"selected": false,
"positionAbsolute": {
"x": 121.42385839968928,
"y": 86.07764034320081
}
}
],
"viewport": {
"x": 129.04745958386252,
"y": 45.70158800856939,
"zoom": 0.5843377187256229
}
},
"order_num": 7077842,
"guide_word": null
},
{
"update_time": "2024-08-20 18:13:33",
"parameters": null,
"name": "⭐️联网搜索对话",
"description": "支持通过搜索引擎获取信息并回答问题",
"flow_id": "8374d36f23af4c438c4ce4e6e080e6cf",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-08-20 18:13:33",
"id": 189,
"data": {
"edges": [
{
"id": "reactflow__edge-BingSearchAPIWrapper-Rikh1BingSearchAPIWrapper|BingSearchAPIWrapper-Rikh1|BingSearchAPIWrapper-BingSearchRun-S3aq7BingSearchAPIWrapper|api_wrapper|BingSearchRun-S3aq7",
"style": {
"stroke": "#555"
},
"source": "BingSearchAPIWrapper-Rikh1",
"target": "BingSearchRun-S3aq7",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "BingSearchAPIWrapper|BingSearchAPIWrapper-Rikh1|BingSearchAPIWrapper",
"targetHandle": "BingSearchAPIWrapper|api_wrapper|BingSearchRun-S3aq7"
},
{
"id": "reactflow__edge-BingSearchRun-S3aq7BingSearchRun|BingSearchRun-S3aq7|Tool|BaseTool|BingSearchRun|BaseTool-ZeroShotAgent-6vSFwBaseTool|tools|ZeroShotAgent-6vSFw",
"style": {
"stroke": "#555"
},
"source": "BingSearchRun-S3aq7",
"target": "ZeroShotAgent-6vSFw",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "BingSearchRun|BingSearchRun-S3aq7|Tool|BaseTool|BingSearchRun|BaseTool",
"targetHandle": "BaseTool|tools|ZeroShotAgent-6vSFw"
},
{
"id": "reactflow__edge-BishengLLM-bc485BishengLLM|BishengLLM-bc485|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-ZeroShotAgent-6vSFwBaseLanguageModel|llm|ZeroShotAgent-6vSFw",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-bc485",
"target": "ZeroShotAgent-6vSFw",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-bc485|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|ZeroShotAgent-6vSFw"
}
],
"nodes": [
{
"id": "BingSearchRun-S3aq7",
"data": {
"id": "BingSearchRun-S3aq7",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": false,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "BingSearchRun",
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"l2": false,
"info": "",
"list": false,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"api_wrapper": {
"l2": false,
"info": "",
"list": false,
"name": "api_wrapper",
"show": true,
"type": "BingSearchAPIWrapper",
"l2_name": "api_wrapper",
"advanced": false,
"password": true,
"required": true,
"multiline": false,
"placeholder": ""
},
"args_schema": {
"l2": false,
"info": "",
"list": false,
"name": "args_schema",
"show": false,
"type": "Type[pydantic.main.BaseModel]",
"l2_name": "args_schema",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"handle_tool_error": {
"l2": false,
"info": "",
"list": false,
"name": "handle_tool_error",
"show": false,
"type": "bool",
"value": false,
"l2_name": "handle_tool_error",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "A wrapper around Bing Search. Useful for when you need to answer questions about current events. Input should be a search query.",
"base_classes": [
"Tool",
"BaseTool",
"BingSearchRun",
"BaseTool"
],
"display_name": "BingSearchRun",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "BingSearchRun",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 249,
"dragging": false,
"position": {
"x": 430.3491112346748,
"y": 526.7220206834627
},
"selected": true,
"positionAbsolute": {
"x": 430.3491112346748,
"y": 526.7220206834627
}
},
{
"id": "BingSearchAPIWrapper-Rikh1",
"data": {
"id": "BingSearchAPIWrapper-Rikh1",
"node": {
"l2_name": "BING搜索",
"template": {
"k": {
"l2": false,
"info": "",
"list": false,
"name": "k",
"show": false,
"type": "int",
"value": 10,
"l2_name": "k",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "BingSearchAPIWrapper",
"bing_search_url": {
"l2": false,
"info": "",
"list": false,
"name": "bing_search_url",
"show": true,
"type": "str",
"value": "https://api.bing.microsoft.com/v7.0/search",
"l2_name": "bing_search_url",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"bing_subscription_key": {
"l2": true,
"info": "",
"list": false,
"name": "bing_subscription_key",
"show": true,
"type": "str",
"value": "137b003c89f04966ac3b1081ee5b10bc",
"l2_name": "bing_subscription_key",
"advanced": false,
"password": true,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "Wrapper for Bing Search API.",
"base_classes": [
"BingSearchAPIWrapper"
],
"display_name": "BingSearchAPIWrapper",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "BingSearchAPIWrapper",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 337,
"position": {
"x": -17.635040947620837,
"y": 468.8157898410929
},
"selected": false,
"positionAbsolute": {
"x": -17.635040947620837,
"y": 468.8157898410929
}
},
{
"id": "ZeroShotAgent-6vSFw",
"data": {
"id": "ZeroShotAgent-6vSFw",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"_type": "ZeroShotAgent",
"tools": {
"l2": false,
"info": "",
"list": true,
"name": "tools",
"show": true,
"type": "BaseTool",
"l2_name": "tools",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"prefix": {
"l2": false,
"info": "",
"list": false,
"name": "prefix",
"show": true,
"type": "str",
"value": "Answer the following questions as best you can. You have access to the following tools:",
"l2_name": "prefix",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"placeholder": ""
},
"suffix": {
"l2": false,
"info": "",
"list": false,
"name": "suffix",
"show": true,
"type": "str",
"value": "answer in Chinese.\nBegin!Question: {query}Thought:{agent_scratchpad}",
"l2_name": "suffix",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": false,
"type": "AgentOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_variables": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": true,
"type": "str",
"value": [
"query",
"agent_scratchpad"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callback_manager": {
"l2": false,
"info": "",
"list": false,
"name": "callback_manager",
"show": false,
"type": "BaseCallbackManager",
"l2_name": "callback_manager",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"format_instructions": {
"l2": false,
"info": "",
"list": false,
"name": "format_instructions",
"show": true,
"type": "str",
"value": "Use the following format:\n\nQuestion: the input question you must answer\nThought: you should always think about what to do\nAction: the action to take, should be one of [{tool_names}]\nAction Input: the input to the action\nObservation: the result of the action\n... (this Thought/Action/Action Input/Observation can repeat N times)\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question",
"l2_name": "format_instructions",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"placeholder": ""
}
},
"description": "Construct an agent from an LLM and tools.",
"base_classes": [
"ZeroShotAgent",
"Agent",
"BaseSingleActionAgent",
"function"
],
"display_name": "ZeroShotAgent",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/agents/how_to/custom_mrkl_agent"
},
"type": "ZeroShotAgent",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 659,
"position": {
"x": 937.4050050593946,
"y": 62.48387006449201
},
"selected": false,
"positionAbsolute": {
"x": 937.4050050593946,
"y": 62.48387006449201
}
},
{
"id": "BishengLLM-bc485",
"data": {
"id": "BishengLLM-bc485",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 4,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BaseLanguageModel",
"BaseChatModel",
"BishengLLM",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 407,
"position": {
"x": 31.941398539174173,
"y": -96.4545131206016
},
"positionAbsolute": {
"x": 31.941398539174173,
"y": -96.4545131206016
}
}
],
"viewport": {
"x": 271.43658145124573,
"y": 126.9479936490626,
"zoom": 0.8967278502185819
}
},
"order_num": 7208912,
"guide_word": null
},
{
"update_time": "2024-08-23 17:41:28",
"parameters": null,
"name": "⭐️ 通用信息提取",
"description": "上传文件,触发自动提取,提取文件中的所有keyvalue信息。",
"flow_id": "947c03db78784932a344314844e32940",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-08-23 17:41:28",
"id": 190,
"data": {
"edges": [
{
"id": "reactflow__edge-PromptTemplate-5UHOIPromptTemplate|PromptTemplate-5UHOI|StringPromptTemplate|PromptTemplate|BasePromptTemplate-LLMChain-aSC8HBasePromptTemplate|prompt|LLMChain-aSC8H",
"style": {
"stroke": "#555"
},
"source": "PromptTemplate-5UHOI",
"target": "LLMChain-aSC8H",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "PromptTemplate|PromptTemplate-5UHOI|StringPromptTemplate|PromptTemplate|BasePromptTemplate",
"targetHandle": "BasePromptTemplate|prompt|LLMChain-aSC8H"
},
{
"id": "reactflow__edge-BishengLLM-2763fBishengLLM|BishengLLM-2763f|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-LLMChain-aSC8HBaseLanguageModel|llm|LLMChain-aSC8H",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-2763f",
"target": "LLMChain-aSC8H",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-2763f|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|LLMChain-aSC8H"
},
{
"id": "reactflow__edge-ElemUnstructuredLoaderV0-293c3ElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-293c3|Document-PromptTemplate-5UHOIDocument;BaseOutputParser|context|PromptTemplate-5UHOI",
"style": {
"stroke": "#555"
},
"source": "ElemUnstructuredLoaderV0-293c3",
"target": "PromptTemplate-5UHOI",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "ElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-293c3|Document",
"targetHandle": "Document;BaseOutputParser|context|PromptTemplate-5UHOI"
},
{
"id": "reactflow__edge-InputNode-3ccbfInputNode|InputNode-3ccbf|input-LLMChain-aSC8Hinput|input_node|LLMChain-aSC8H",
"style": {
"stroke": "#555"
},
"source": "InputNode-3ccbf",
"target": "LLMChain-aSC8H",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "InputNode|InputNode-3ccbf|input",
"targetHandle": "input|input_node|LLMChain-aSC8H"
},
{
"id": "reactflow__edge-InputFileNode-fc806InputFileNode|InputFileNode-fc806|fileNode-ElemUnstructuredLoaderV0-293c3fileNode|file_path|ElemUnstructuredLoaderV0-293c3",
"style": {
"stroke": "#555"
},
"source": "InputFileNode-fc806",
"target": "ElemUnstructuredLoaderV0-293c3",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "InputFileNode|InputFileNode-fc806|fileNode",
"targetHandle": "fileNode|file_path|ElemUnstructuredLoaderV0-293c3"
}
],
"nodes": [
{
"id": "LLMChain-aSC8H",
"data": {
"id": "LLMChain-aSC8H",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "LLMChain",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"prompt": {
"l2": false,
"info": "",
"list": false,
"name": "prompt",
"show": true,
"type": "BasePromptTemplate",
"l2_name": "prompt",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"value": false,
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"llm_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "llm_kwargs",
"show": false,
"type": "code",
"l2_name": "llm_kwargs",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "text",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": false,
"type": "BaseLLMOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"return_final_only": {
"l2": false,
"info": "",
"list": false,
"name": "return_final_only",
"show": false,
"type": "bool",
"value": true,
"l2_name": "return_final_only",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Chain to run queries against LLMs.",
"base_classes": [
"Chain",
"LLMChain",
"function"
],
"display_name": "LLMChain",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/foundational/llm_chain"
},
"type": "LLMChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 315,
"position": {
"x": 1313.6980454632887,
"y": 900.921715712506
},
"selected": false,
"positionAbsolute": {
"x": 1313.6980454632887,
"y": 900.921715712506
}
},
{
"id": "PromptTemplate-5UHOI",
"data": {
"id": "PromptTemplate-5UHOI",
"node": {
"name": "",
"template": {
"_type": "PromptTemplate",
"input": {
"info": "",
"list": false,
"name": "input",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser"
],
"placeholder": "",
"display_name": "input"
},
"context": {
"info": "",
"list": false,
"name": "context",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser"
],
"placeholder": "",
"display_name": "context"
},
"template": {
"l2": false,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "提取以下文本内容中的所有keyvalue信息,符合如下格式定义:\n\nThe output should be a Markdown code snippet formatted in the following schema, including the leading and trailing \"```json\" and \"```\":\n\n```json\n\"Key1\": Value\n\"Key2\": Value\n```\n\n文本内容\n{context}\n\n{input}",
"l2_name": "template",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": false,
"type": "BaseOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_variables": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"context",
"input"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"template_format": {
"l2": false,
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "str",
"value": "f-string",
"l2_name": "template_format",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"partial_variables": {
"l2": false,
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"l2_name": "partial_variables",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"validate_template": {
"l2": false,
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": true,
"l2_name": "validate_template",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Schema to represent a prompt for an LLM.",
"base_classes": [
"StringPromptTemplate",
"PromptTemplate",
"BasePromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"": [
"context"
],
"template": [
"context",
"input"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {
"formatters": {
"openai_api_key": {}
},
"base_formatters": {
"dict": {},
"list": {},
"show": {},
"union": {},
"kwargs": {},
"default": {},
"headers": {},
"optional": {},
"password": {},
"multiline": {},
"model_fields": {
"MODEL_DICT": {
"OpenAI": [
"text-davinci-003",
"text-davinci-002",
"text-curie-001",
"text-babbage-001",
"text-ada-001"
],
"Anthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
],
"ChatOpenAI": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k"
],
"ChatAnthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
]
}
},
"dict_code_file": {}
}
}
},
"type": "PromptTemplate",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 416,
"dragging": false,
"position": {
"x": 809.51004530817,
"y": 1237.7696518068285
},
"selected": false,
"positionAbsolute": {
"x": 809.51004530817,
"y": 1237.7696518068285
}
},
{
"id": "BishengLLM-2763f",
"data": {
"id": "BishengLLM-2763f",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 5,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BaseLanguageModel",
"BaseChatModel",
"BishengLLM",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 406,
"position": {
"x": -68.63553056857684,
"y": 696.600000304993
},
"positionAbsolute": {
"x": -68.63553056857684,
"y": 696.600000304993
}
},
{
"id": "ElemUnstructuredLoaderV0-293c3",
"data": {
"id": "ElemUnstructuredLoaderV0-293c3",
"node": {
"beta": false,
"template": {
"_type": "ElemUnstructuredLoaderV0",
"kwargs": {
"info": "",
"list": false,
"name": "kwargs",
"show": true,
"type": "dict",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "kwargs",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": true,
"type": "code",
"value": "{}",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"file_path": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "fileNode",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"suffixes": [
".html",
".md",
".txt",
".bmp",
".jpg",
".png",
".jpeg",
".doc",
".docx",
".pdf",
".ppt",
".pptx",
".xls",
".xlsx",
".tsv",
".csv",
".tiff"
],
"fileTypes": [
"html",
"md",
"txt",
"bmp",
"jpg",
"png",
"jpeg",
"doc",
"docx",
"pdf",
"ppt",
"pptx",
".xls",
"xlsx",
"tsv",
"csv",
"tiff"
],
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "File Path",
"model_config": {}
},
"unstructured_api_url": {
"info": "",
"list": false,
"name": "unstructured_api_url",
"show": true,
"type": "str",
"value": "https://bisheng.dataelem.com/api/v1/etl4llm/predict",
"dynamic": false,
"advanced": false,
"password": true,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "unstructured_api_url",
"model_config": {}
}
},
"description": "The appropriate parser is automatically selected based on the file format and OCR is supported",
"base_classes": [
"Document"
],
"display_name": "ElemUnstructuredLoaderV0",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "ElemUnstructuredLoaderV0",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 475,
"position": {
"x": 237.30334166517488,
"y": 1166.7647849898744
},
"positionAbsolute": {
"x": 237.30334166517488,
"y": 1166.7647849898744
}
},
{
"id": "InputNode-3ccbf",
"data": {
"id": "InputNode-3ccbf",
"node": {
"beta": false,
"template": {
"_type": "input",
"input": {
"info": "",
"list": true,
"name": "input",
"show": true,
"type": "str",
"value": [
"开始"
],
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": true,
"title_case": true,
"placeholder": "",
"display_name": "输入内容",
"model_config": {}
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"input"
],
"display_name": "InputNode",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "InputNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 253,
"position": {
"x": 809.0064819287146,
"y": 663.3484087022575
},
"positionAbsolute": {
"x": 809.0064819287146,
"y": 663.3484087022575
}
},
{
"id": "InputFileNode-fc806",
"data": {
"id": "InputFileNode-fc806",
"node": {
"beta": false,
"template": {
"_type": "InputFileNode",
"file_path": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "file",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".html",
".md",
".txt",
".bmp",
".jpg",
".png",
".jpeg",
".doc",
".docx",
".pdf",
".ppt",
".pptx",
"..xls",
".xlsx",
".tsv",
".csv",
".tiff"
],
"fileTypes": [
"html",
"md",
"txt",
"bmp",
"jpg",
"png",
"jpeg",
"doc",
"docx",
"pdf",
"ppt",
"pptx",
".xls",
"xlsx",
"tsv",
"csv",
"tiff"
],
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "File Path",
"model_config": {}
},
"file_type": {
"info": "Tips for which file should upload",
"list": false,
"name": "file_type",
"show": true,
"type": "str",
"value": "请上传文件",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "提示上传文件类型",
"display_name": "Name",
"model_config": {}
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"fileNode"
],
"display_name": "InputFileNode",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "InputFileNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 335,
"dragging": false,
"position": {
"x": -283.58174168605024,
"y": 1208.0544562311302
},
"selected": true,
"positionAbsolute": {
"x": -283.58174168605024,
"y": 1208.0544562311302
}
}
],
"viewport": {
"x": 249.5759133596914,
"y": -408.5108685516501,
"zoom": 0.6296974332414016
}
},
"order_num": 7274447,
"guide_word": null
},
{
"update_time": "2024-09-03 21:23:10",
"parameters": null,
"name": "⭐️单文档问答",
"description": "上传文件,然后可以查询文件中相关的问题",
"flow_id": "9f59249acf76448899f8918b2aa964af",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-09-03 21:23:10",
"id": 191,
"data": {
"edges": [
{
"id": "reactflow__edge-ElemUnstructuredLoaderV0-LAGXMElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-LAGXM|Document-RecursiveCharacterTextSplitter-a7fc9Document|documents|RecursiveCharacterTextSplitter-a7fc9",
"style": {
"stroke": "#555"
},
"source": "ElemUnstructuredLoaderV0-LAGXM",
"target": "RecursiveCharacterTextSplitter-a7fc9",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "ElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-LAGXM|Document",
"targetHandle": "Document|documents|RecursiveCharacterTextSplitter-a7fc9"
},
{
"id": "reactflow__edge-RecursiveCharacterTextSplitter-a7fc9RecursiveCharacterTextSplitter|RecursiveCharacterTextSplitter-a7fc9|Document-Milvus-T3kRHDocument|documents|Milvus-T3kRH",
"style": {
"stroke": "#555"
},
"source": "RecursiveCharacterTextSplitter-a7fc9",
"target": "Milvus-T3kRH",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "RecursiveCharacterTextSplitter|RecursiveCharacterTextSplitter-a7fc9|Document",
"targetHandle": "Document|documents|Milvus-T3kRH"
},
{
"id": "reactflow__edge-Milvus-T3kRHMilvus|Milvus-T3kRH|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever-RetrievalQA-37d31BaseRetriever|retriever|RetrievalQA-37d31",
"style": {
"stroke": "#555"
},
"source": "Milvus-T3kRH",
"target": "RetrievalQA-37d31",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "Milvus|Milvus-T3kRH|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|RetrievalQA-37d31"
},
{
"id": "reactflow__edge-CombineDocsChain-Pud2pCombineDocsChain|CombineDocsChain-Pud2p|BaseCombineDocumentsChain|function-RetrievalQA-37d31BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-37d31",
"style": {
"stroke": "#555"
},
"source": "CombineDocsChain-Pud2p",
"target": "RetrievalQA-37d31",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "CombineDocsChain|CombineDocsChain-Pud2p|BaseCombineDocumentsChain|function",
"targetHandle": "BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-37d31"
},
{
"id": "reactflow__edge-InputFileNode-eda80InputFileNode|InputFileNode-eda80|fileNode-ElemUnstructuredLoaderV0-LAGXMfileNode|file_path|ElemUnstructuredLoaderV0-LAGXM",
"style": {
"stroke": "#555"
},
"source": "InputFileNode-eda80",
"target": "ElemUnstructuredLoaderV0-LAGXM",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "InputFileNode|InputFileNode-eda80|fileNode",
"targetHandle": "fileNode|file_path|ElemUnstructuredLoaderV0-LAGXM"
},
{
"id": "reactflow__edge-BishengLLM-1bcf8BishengLLM|BishengLLM-1bcf8|BishengLLM|BaseLanguageModel|BaseChatModel|BaseLLM-CombineDocsChain-Pud2pBaseLanguageModel|llm|CombineDocsChain-Pud2p",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-1bcf8",
"target": "CombineDocsChain-Pud2p",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-1bcf8|BishengLLM|BaseLanguageModel|BaseChatModel|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|CombineDocsChain-Pud2p"
},
{
"id": "reactflow__edge-BishengEmbedding-eda33BishengEmbedding|BishengEmbedding-eda33|Embeddings|BishengEmbedding-Milvus-T3kRHEmbeddings|embedding|Milvus-T3kRH",
"style": {
"stroke": "#555"
},
"source": "BishengEmbedding-eda33",
"target": "Milvus-T3kRH",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengEmbedding|BishengEmbedding-eda33|Embeddings|BishengEmbedding",
"targetHandle": "Embeddings|embedding|Milvus-T3kRH"
}
],
"nodes": [
{
"id": "CombineDocsChain-Pud2p",
"data": {
"id": "CombineDocsChain-Pud2p",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "load_qa_chain",
"token_max": {
"l2": false,
"info": "当前只对stuff 生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"l2_name": "token_max",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max"
},
"chain_type": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "Load question answering chain.",
"base_classes": [
"BaseCombineDocumentsChain",
"function"
],
"display_name": "CombineDocsChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "CombineDocsChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 377,
"position": {
"x": 762.7783327725605,
"y": 31.94438969676179
},
"selected": false,
"positionAbsolute": {
"x": 762.7783327725605,
"y": 31.94438969676179
}
},
{
"id": "Milvus-T3kRH",
"data": {
"id": "Milvus-T3kRH",
"node": {
"template": {
"_type": "Milvus",
"drop_old": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"documents": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"index_params": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_params": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"collection_name": {
"l2": false,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "collection_name",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"collection_id": ""
},
"connection_args": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"consistency_level": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"VectorStore",
"Milvus",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 347,
"dragging": false,
"position": {
"x": 885.364722441176,
"y": 638.0514447977121
},
"selected": false,
"positionAbsolute": {
"x": 885.364722441176,
"y": 638.0514447977121
}
},
{
"id": "ElemUnstructuredLoaderV0-LAGXM",
"data": {
"id": "ElemUnstructuredLoaderV0-LAGXM",
"node": {
"template": {
"_type": "ElemUnstructuredLoaderV0",
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": true,
"type": "code",
"value": "{}",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Metadata"
},
"file_path": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "fileNode",
"value": "",
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".html",
".md",
".txt",
".jpg",
".png",
".jpeg",
".csv",
".doc",
".docx",
".pdf",
".ppt",
".pptx",
".xlsx",
".tiff"
],
"fileTypes": [
"html",
"md",
"txt",
"jpg",
"png",
"jpeg",
"csv",
"doc",
"docx",
"pdf",
"ppt",
"pptx",
"tiff",
"xlsx"
],
"multiline": false,
"placeholder": ""
},
"unstructured_api_url": {
"info": "",
"list": false,
"name": "unstructured_api_url",
"show": true,
"type": "str",
"value": "https://bisheng.dataelem.com/api/v1/etl4llm/predict",
"advanced": false,
"password": true,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "unstructured_api_url"
}
},
"description": "Loads a PDF with pypdf and chunks at character level. dummy version",
"base_classes": [
"Document"
],
"display_name": "ElemUnstructuredLoaderV0",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": ""
},
"type": "ElemUnstructuredLoaderV0",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 393,
"dragging": false,
"position": {
"x": -174.48653868947127,
"y": 475.0990452635182
},
"selected": false,
"positionAbsolute": {
"x": -174.48653868947127,
"y": 475.0990452635182
}
},
{
"id": "RecursiveCharacterTextSplitter-a7fc9",
"data": {
"id": "RecursiveCharacterTextSplitter-a7fc9",
"node": {
"template": {
"_type": "RecursiveCharacterTextSplitter",
"documents": {
"info": "",
"list": false,
"name": "documents",
"show": true,
"type": "Document",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"chunk_size": {
"info": "",
"list": false,
"name": "chunk_size",
"show": true,
"type": "int",
"value": 1000,
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Chunk Size"
},
"separators": {
"info": "",
"list": false,
"name": "separators",
"show": true,
"type": "str",
"value": "\\n\\n",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Separator"
},
"chunk_overlap": {
"info": "",
"list": false,
"name": "chunk_overlap",
"show": true,
"type": "int",
"value": 200,
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Chunk Overlap"
},
"separator_type": {
"info": "",
"list": true,
"name": "separator_type",
"show": true,
"type": "str",
"value": "Text",
"options": [
"Text",
"cobol",
"cpp",
"csharp",
"go",
"html",
"java",
"js",
"kotlin",
"latex",
"markdown",
"php",
"proto",
"python",
"rst",
"ruby",
"rust",
"scala",
"sol",
"swift",
"ts"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Separator Type"
}
},
"description": "Splitting text by recursively look at characters.",
"base_classes": [
"Document"
],
"display_name": "RecursiveCharacterTextSplitter",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/recursive_text_splitter"
},
"type": "RecursiveCharacterTextSplitter",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 541,
"dragging": false,
"position": {
"x": 380.122171588396,
"y": 483.5257541316808
},
"selected": false,
"positionAbsolute": {
"x": 380.122171588396,
"y": 483.5257541316808
}
},
{
"id": "RetrievalQA-37d31",
"data": {
"id": "RetrievalQA-37d31",
"node": {
"beta": false,
"template": {
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "RetrievalQA",
"memory": {
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Memory",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"input_key": {
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Input Key",
"model_config": {}
},
"retriever": {
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Retriever",
"model_config": {}
},
"input_node": {
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Preset Question",
"model_config": {}
},
"output_key": {
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Output Key",
"model_config": {}
},
"combine_documents_chain": {
"info": "",
"list": false,
"name": "combine_documents_chain",
"show": true,
"type": "BaseCombineDocumentsChain",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Combine Documents Chain",
"model_config": {}
},
"return_source_documents": {
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Return Source Documents",
"model_config": {}
}
},
"description": "Chain for question-answering against an index.",
"base_classes": [
"Chain",
"BaseRetrievalQA",
"RetrievalQA",
"function"
],
"display_name": "RetrievalQA",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa",
"field_formatters": {}
},
"type": "RetrievalQA",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 481,
"dragging": false,
"position": {
"x": 1497.3865616690784,
"y": 525.8440613798767
},
"selected": false,
"positionAbsolute": {
"x": 1497.3865616690784,
"y": 525.8440613798767
}
},
{
"id": "InputFileNode-eda80",
"data": {
"id": "InputFileNode-eda80",
"node": {
"beta": false,
"template": {
"_type": "InputFileNode",
"file_path": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "file",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".html",
".md",
".txt",
".jpg",
".png",
".jpeg",
".csv",
".doc",
".docx",
".pdf",
".ppt",
".pptx",
".tiff",
".xlsx"
],
"fileTypes": [
"html",
"md",
"txt",
"jpg",
"png",
"jpeg",
"csv",
"doc",
"docx",
"pdf",
"ppt",
"pptx",
"tiff",
"xlsx"
],
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "File Path",
"model_config": {}
},
"file_type": {
"info": "Tips for which file should upload",
"list": false,
"name": "file_type",
"show": true,
"type": "str",
"value": "请上传文件",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "提示上传文件类型",
"display_name": "Name",
"model_config": {}
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"fileNode"
],
"display_name": "InputFileNode",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "InputFileNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 337,
"dragging": false,
"position": {
"x": -728.0965344734079,
"y": 480.2837762791313
},
"selected": false,
"positionAbsolute": {
"x": -728.0965344734079,
"y": 480.2837762791313
}
},
{
"id": "BishengLLM-1bcf8",
"data": {
"id": "BishengLLM-1bcf8",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 9,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BishengLLM",
"BaseLanguageModel",
"BaseChatModel",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 407,
"dragging": false,
"position": {
"x": 220.52841712247573,
"y": -113.58850984307922
},
"selected": false,
"positionAbsolute": {
"x": 220.52841712247573,
"y": -113.58850984307922
}
},
{
"id": "BishengEmbedding-eda33",
"data": {
"id": "BishengEmbedding-eda33",
"node": {
"beta": false,
"template": {
"_type": "BishengEmbedding",
"model": {
"info": "",
"list": false,
"name": "model",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_embedding",
"value": 1,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"embeddings": {
"info": "",
"list": false,
"name": "embeddings",
"show": true,
"type": "Embeddings",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Embeddings",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": true,
"type": "LLMModel",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"max_retries": {
"info": "",
"list": false,
"name": "max_retries",
"show": true,
"type": "int",
"value": 6,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Max Retries",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": true,
"type": "LLMServer",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"model_kwargs": {
"info": "",
"list": false,
"name": "model_kwargs",
"show": true,
"type": "code",
"value": {},
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Kwargs",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "DashScopeEmbeddings",
"vllm": "OpenAIEmbeddings",
"zhipu": "OpenAIEmbeddings",
"ollama": "OllamaEmbeddings",
"openai": "OpenAIEmbeddings",
"minimax": "OpenAIEmbeddings",
"qianfan": "QianfanEmbeddingsEndpoint",
"llamacpp": "OpenAIEmbeddings",
"bisheng_rt": "HostEmbeddings",
"xinference": "OpenAIEmbeddings",
"azure_openai": "AzureOpenAIEmbeddings"
},
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"request_timeout": {
"info": "",
"list": false,
"name": "request_timeout",
"show": true,
"type": "int",
"value": 200,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Request Timeout",
"model_config": {}
},
"embedding_ctx_length": {
"info": "",
"list": false,
"name": "embedding_ctx_length",
"show": true,
"type": "int",
"value": 8192,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Embedding Ctx Length",
"model_config": {}
}
},
"description": "Use the embedding model that has been launched in model management ",
"base_classes": [
"Embeddings",
"BishengEmbedding"
],
"display_name": "BishengEmbedding",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengEmbedding",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 273,
"dragging": false,
"position": {
"x": 390.035554735752,
"y": 1105.577580188958
},
"selected": true,
"positionAbsolute": {
"x": 390.035554735752,
"y": 1105.577580188958
}
}
],
"viewport": {
"x": 543.6795293445036,
"y": 101.93050532990264,
"zoom": 0.5416165288707682
}
},
"order_num": 7339982,
"guide_word": null
},
{
"update_time": "2024-09-20 18:40:48",
"parameters": null,
"name": "演示-券商研报生成",
"description": "生成关于某家公司的研究报告",
"flow_id": "7bbdcd64287343f98effc90a70119f0a",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-09-20 18:40:48",
"id": 192,
"data": {
"edges": [
{
"id": "reactflow__edge-CombineDocsChain-foMvuCombineDocsChain|CombineDocsChain-foMvu|BaseCombineDocumentsChain|function-RetrievalQA-1fCXFBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-1fCXF",
"style": {
"stroke": "#555"
},
"source": "CombineDocsChain-foMvu",
"target": "RetrievalQA-1fCXF",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "CombineDocsChain|CombineDocsChain-foMvu|BaseCombineDocumentsChain|function",
"targetHandle": "BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-1fCXF"
},
{
"id": "reactflow__edge-RetrievalQA-1fCXFRetrievalQA|RetrievalQA-1fCXF|Chain|BaseRetrievalQA|RetrievalQA|function-Report-fSFx4function|chains|Report-fSFx4",
"style": {
"stroke": "#555"
},
"source": "RetrievalQA-1fCXF",
"target": "Report-fSFx4",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "RetrievalQA|RetrievalQA-1fCXF|Generic|Chain|Runnable|RetrievalQA|RunnableSerializable|BaseRetrievalQA|function",
"targetHandle": "function|chains|Report-fSFx4"
},
{
"id": "reactflow__edge-Milvus-E2BnsMilvus|Milvus-E2Bns|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever-RetrievalQA-1fCXFBaseRetriever|retriever|RetrievalQA-1fCXF",
"style": {
"stroke": "#555"
},
"source": "Milvus-E2Bns",
"target": "RetrievalQA-1fCXF",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "Milvus|Milvus-E2Bns|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|RetrievalQA-1fCXF"
},
{
"id": "reactflow__edge-ProxyChatLLM-CzZfAProxyChatLLM|ProxyChatLLM-CzZfA|BaseLanguageModel|BaseChatModel|ProxyChatLLM|BaseLLM-CombineDocsChain-foMvuBaseLanguageModel|llm|CombineDocsChain-foMvu",
"style": {
"stroke": "#555"
},
"source": "ProxyChatLLM-CzZfA",
"target": "CombineDocsChain-foMvu",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "ProxyChatLLM|ProxyChatLLM-CzZfA|Generic|BaseLanguageModel|Runnable|ProxyChatLLM|RunnableSerializable|BaseChatModel|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|CombineDocsChain-foMvu"
},
{
"id": "reactflow__edge-RetrievalQA-QWfeURetrievalQA|RetrievalQA-QWfeU|Chain|BaseRetrievalQA|RetrievalQA|function-Report-fSFx4function|chains|Report-fSFx4",
"style": {
"stroke": "#555"
},
"source": "RetrievalQA-QWfeU",
"target": "Report-fSFx4",
"animated": true,
"className": "",
"sourceHandle": "RetrievalQA|RetrievalQA-QWfeU|Generic|Chain|Runnable|RetrievalQA|RunnableSerializable|BaseRetrievalQA|function",
"targetHandle": "function|chains|Report-fSFx4"
},
{
"id": "reactflow__edge-CombineDocsChain-48oi2CombineDocsChain|CombineDocsChain-48oi2|BaseCombineDocumentsChain|function-RetrievalQA-QWfeUBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-QWfeU",
"style": {
"stroke": "#555"
},
"source": "CombineDocsChain-48oi2",
"target": "RetrievalQA-QWfeU",
"animated": true,
"className": "",
"sourceHandle": "CombineDocsChain|CombineDocsChain-48oi2|BaseCombineDocumentsChain|function",
"targetHandle": "BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-QWfeU"
},
{
"id": "reactflow__edge-ProxyChatLLM-3oL2CProxyChatLLM|ProxyChatLLM-3oL2C|BaseLanguageModel|BaseChatModel|ProxyChatLLM|BaseLLM-CombineDocsChain-48oi2BaseLanguageModel|llm|CombineDocsChain-48oi2",
"style": {
"stroke": "#555"
},
"source": "ProxyChatLLM-3oL2C",
"target": "CombineDocsChain-48oi2",
"animated": true,
"className": "",
"sourceHandle": "ProxyChatLLM|ProxyChatLLM-3oL2C|Generic|BaseLanguageModel|Runnable|ProxyChatLLM|RunnableSerializable|BaseChatModel|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|CombineDocsChain-48oi2"
},
{
"id": "reactflow__edge-Milvus-YOosCMilvus|Milvus-YOosC|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever-RetrievalQA-QWfeUBaseRetriever|retriever|RetrievalQA-QWfeU",
"style": {
"stroke": "#555"
},
"source": "Milvus-YOosC",
"target": "RetrievalQA-QWfeU",
"animated": true,
"className": "",
"sourceHandle": "Milvus|Milvus-YOosC|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|RetrievalQA-QWfeU"
},
{
"id": "reactflow__edge-InputNode-IZUU3InputNode|InputNode-IZUU3|input-RetrievalQA-QWfeUinput|input_node|RetrievalQA-QWfeU",
"style": {
"stroke": "#555"
},
"source": "InputNode-IZUU3",
"target": "RetrievalQA-QWfeU",
"animated": true,
"className": "",
"sourceHandle": "InputNode|InputNode-IZUU3|input",
"targetHandle": "input|input_node|RetrievalQA-QWfeU"
},
{
"id": "reactflow__edge-InputNode-NXC32InputNode|InputNode-NXC32|input-RetrievalQA-1fCXFinput|input_node|RetrievalQA-1fCXF",
"style": {
"stroke": "#555"
},
"source": "InputNode-NXC32",
"target": "RetrievalQA-1fCXF",
"animated": true,
"className": "",
"sourceHandle": "InputNode|InputNode-NXC32|input",
"targetHandle": "input|input_node|RetrievalQA-1fCXF"
},
{
"id": "reactflow__edge-PromptTemplate-wxEKtPromptTemplate|PromptTemplate-wxEKt|BasePromptTemplate|PromptTemplate|StringPromptTemplate-CombineDocsChain-48oi2BasePromptTemplate|prompt|CombineDocsChain-48oi2",
"style": {
"stroke": "#555"
},
"source": "PromptTemplate-wxEKt",
"target": "CombineDocsChain-48oi2",
"animated": true,
"className": "",
"sourceHandle": "PromptTemplate|PromptTemplate-wxEKt|Generic|PromptTemplate|StringPromptTemplate|Runnable|RunnableSerializable|BasePromptTemplate",
"targetHandle": "BasePromptTemplate|prompt|CombineDocsChain-48oi2"
},
{
"id": "reactflow__edge-PromptTemplate-ot33yPromptTemplate|PromptTemplate-ot33y|BasePromptTemplate|PromptTemplate|StringPromptTemplate-CombineDocsChain-foMvuBasePromptTemplate|prompt|CombineDocsChain-foMvu",
"style": {
"stroke": "#555"
},
"source": "PromptTemplate-ot33y",
"target": "CombineDocsChain-foMvu",
"animated": true,
"className": "",
"sourceHandle": "PromptTemplate|PromptTemplate-ot33y|Generic|PromptTemplate|StringPromptTemplate|Runnable|RunnableSerializable|BasePromptTemplate",
"targetHandle": "BasePromptTemplate|prompt|CombineDocsChain-foMvu"
},
{
"id": "reactflow__edge-VariableNode-d14a6VariableNode|VariableNode-d14a6|VariableNode-Report-fSFx4VariableNode|variables|Report-fSFx4",
"style": {
"stroke": "#555"
},
"source": "VariableNode-d14a6",
"target": "Report-fSFx4",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "VariableNode|VariableNode-d14a6|VariableNode",
"targetHandle": "VariableNode|variables|Report-fSFx4"
}
],
"nodes": [
{
"id": "Report-fSFx4",
"data": {
"id": "Report-fSFx4",
"node": {
"template": {
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "Report",
"chains": {
"info": "",
"list": true,
"name": "chains",
"show": true,
"type": "function",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "functions"
},
"memory": {
"info": "",
"list": false,
"name": "memory",
"show": false,
"type": "BaseMemory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"value": false,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_key": {
"info": "",
"list": false,
"name": "input_key",
"show": false,
"type": "str",
"value": "report_name",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"stop_flag": {
"info": "",
"list": false,
"name": "stop_flag",
"show": false,
"type": "bool",
"value": false,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"variables": {
"info": "",
"list": true,
"name": "variables",
"show": true,
"type": "VariableNode",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_node": {
"info": "",
"list": false,
"name": "input_node",
"show": false,
"type": "input",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"info": "",
"list": false,
"name": "output_key",
"show": false,
"type": "str",
"value": "text",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"report_name": {
"info": "the file name we generate",
"list": false,
"name": "report_name",
"show": true,
"type": "str",
"value": "行业研报",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Report Name"
}
},
"description": "",
"base_classes": [
"Generic",
"Report",
"Chain",
"Runnable",
"RunnableSerializable"
],
"display_name": "Report",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "Report",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 359,
"dragging": false,
"position": {
"x": 3290.5383305655187,
"y": 409.3538527610235
},
"selected": true,
"positionAbsolute": {
"x": 3290.5383305655187,
"y": 409.3538527610235
}
},
{
"id": "InputNode-IZUU3",
"data": {
"id": "InputNode-IZUU3",
"node": {
"template": {
"_type": "input",
"input": {
"info": "",
"list": true,
"name": "input",
"show": true,
"type": "str",
"value": [
"公司的核心业务和主要产品和服务",
"公司在行业中的地位和市场份额",
"公司的核心竞争力,如专利技术、品牌影响力等",
"对公司进行核心竞争力、盈利模式及可持续性分析",
"影响公司业务的风险,包括市场风险、财务风险、法规风险",
"公司的创新能力和技术水平",
"公司未来展望和战略规划"
],
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "输入内容"
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"input"
],
"display_name": "InputNode",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "InputNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 555,
"dragging": false,
"position": {
"x": 2071.9473113130907,
"y": -480.7563001986203
},
"selected": false,
"positionAbsolute": {
"x": 2071.9473113130907,
"y": -480.7563001986203
}
},
{
"id": "RetrievalQA-1fCXF",
"data": {
"id": "RetrievalQA-1fCXF",
"node": {
"template": {
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "RetrievalQA",
"memory": {
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_key": {
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"retriever": {
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"combine_documents_chain": {
"info": "",
"list": false,
"name": "combine_documents_chain",
"show": true,
"type": "BaseCombineDocumentsChain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Chain for question-answering against an index.",
"base_classes": [
"Generic",
"Chain",
"Runnable",
"RetrievalQA",
"RunnableSerializable",
"BaseRetrievalQA",
"function"
],
"display_name": "RetrievalQA",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"
},
"type": "RetrievalQA",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 317,
"dragging": false,
"position": {
"x": 2237.06298695131,
"y": 1483.4909209372413
},
"selected": false,
"positionAbsolute": {
"x": 2237.06298695131,
"y": 1483.4909209372413
}
},
{
"id": "CombineDocsChain-foMvu",
"data": {
"id": "CombineDocsChain-foMvu",
"node": {
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "load_qa_chain",
"prompt": {
"info": "只对Stuff类型生效",
"list": false,
"name": "prompt",
"show": true,
"type": "BasePromptTemplate",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "prompt"
},
"token_max": {
"info": "只对Stuff类型生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max"
},
"chain_type": {
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"document_prompt": {
"info": "",
"list": false,
"name": "document_prompt",
"show": true,
"type": "BasePromptTemplate",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Load question answering chain.",
"base_classes": [
"BaseCombineDocumentsChain",
"function"
],
"display_name": "CombineDocsChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "CombineDocsChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 449,
"dragging": false,
"position": {
"x": 1552.0278708162225,
"y": 1323.4452741641828
},
"selected": false,
"positionAbsolute": {
"x": 1552.0278708162225,
"y": 1323.4452741641828
}
},
{
"id": "Milvus-E2Bns",
"data": {
"id": "Milvus-E2Bns",
"node": {
"template": {
"_type": "Milvus",
"drop_old": {
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"documents": {
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"info": "",
"list": false,
"name": "embedding",
"show": false,
"type": "Embeddings",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_type": {
"info": "",
"list": false,
"name": "search_type",
"show": true,
"type": "str",
"value": "similarity",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"index_params": {
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_kwargs": {
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_params": {
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"collection_name": {
"l2": true,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "AI行业研报",
"l2_name": "行业库",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"collection_id": 1855
},
"connection_args": {
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"consistency_level": {
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"Milvus",
"VectorStore",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 393,
"dragging": false,
"position": {
"x": 1559.8817737276297,
"y": 1858.4770607573223
},
"selected": false,
"positionAbsolute": {
"x": 1559.8817737276297,
"y": 1858.4770607573223
}
},
{
"id": "ProxyChatLLM-CzZfA",
"data": {
"id": "ProxyChatLLM-CzZfA",
"node": {
"template": {
"n": {
"info": "",
"list": false,
"name": "n",
"show": false,
"type": "int",
"value": 1,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "ProxyChatLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": false,
"type": "bool",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 0.9,
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"client": {
"info": "",
"list": false,
"name": "client",
"show": false,
"type": "Any",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"headers": {
"info": "",
"list": false,
"name": "headers",
"show": false,
"type": "code",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"placeholder": ""
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"value": false,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": false,
"type": "bool",
"value": false,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"max_tokens": {
"info": "",
"list": false,
"name": "max_tokens",
"show": true,
"type": "int",
"value": 2048,
"advanced": true,
"password": true,
"required": false,
"multiline": false,
"placeholder": ""
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": true,
"type": "str",
"value": "gpt-3.5-turbo-16k-0613",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"max_retries": {
"info": "",
"list": false,
"name": "max_retries",
"show": false,
"type": "int",
"value": 0,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.7,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"model_kwargs": {
"info": "",
"list": false,
"name": "model_kwargs",
"show": true,
"type": "code",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"elemai_api_key": {
"info": "",
"list": false,
"name": "elemai_api_key",
"show": true,
"type": "str",
"value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJiaXNoZW5nX29wZW42IiwiZXhwIjoxNzEzNzU0MjUyfQ.ww1l-GTBYJiHV3-U1JcacvWOqYPd-QMpuJIeuO9_OM8",
"advanced": false,
"password": true,
"required": false,
"multiline": false,
"placeholder": ""
},
"elemai_base_url": {
"info": "",
"list": false,
"name": "elemai_base_url",
"show": true,
"type": "str",
"value": "http://192.168.106.12:6001/v1/chatcompletion",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"request_timeout": {
"info": "",
"list": false,
"name": "request_timeout",
"show": false,
"type": "float",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"tiktoken_model_name": {
"info": "",
"list": false,
"name": "tiktoken_model_name",
"show": false,
"type": "str",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Wrapper around proxy Chat large language models.",
"base_classes": [
"Generic",
"BaseLanguageModel",
"Runnable",
"ProxyChatLLM",
"RunnableSerializable",
"BaseChatModel",
"BaseLLM"
],
"display_name": "ProxyChatLLM",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "ProxyChatLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 501,
"dragging": false,
"position": {
"x": 1021.6972307239736,
"y": 950.9394648638606
},
"selected": false,
"positionAbsolute": {
"x": 1021.6972307239736,
"y": 950.9394648638606
}
},
{
"id": "RetrievalQA-QWfeU",
"data": {
"id": "RetrievalQA-QWfeU",
"node": {
"template": {
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "RetrievalQA",
"memory": {
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_key": {
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"retriever": {
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"combine_documents_chain": {
"info": "",
"list": false,
"name": "combine_documents_chain",
"show": true,
"type": "BaseCombineDocumentsChain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Chain for question-answering against an index.",
"base_classes": [
"Generic",
"Chain",
"Runnable",
"RetrievalQA",
"RunnableSerializable",
"BaseRetrievalQA",
"function"
],
"display_name": "RetrievalQA",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"
},
"type": "RetrievalQA",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 317,
"dragging": false,
"position": {
"x": 2621.435785834929,
"y": 5.613751609646442
},
"selected": false,
"positionAbsolute": {
"x": 2621.435785834929,
"y": 5.613751609646442
}
},
{
"id": "CombineDocsChain-48oi2",
"data": {
"id": "CombineDocsChain-48oi2",
"node": {
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "load_qa_chain",
"prompt": {
"info": "只对Stuff类型生效",
"list": false,
"name": "prompt",
"show": true,
"type": "BasePromptTemplate",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "prompt"
},
"token_max": {
"info": "只对Stuff类型生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max"
},
"chain_type": {
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"document_prompt": {
"info": "",
"list": false,
"name": "document_prompt",
"show": true,
"type": "BasePromptTemplate",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Load question answering chain.",
"base_classes": [
"BaseCombineDocumentsChain",
"function"
],
"display_name": "CombineDocsChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "CombineDocsChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 449,
"dragging": false,
"position": {
"x": 1557.52279817175,
"y": -432.4678010752729
},
"selected": false,
"positionAbsolute": {
"x": 1557.52279817175,
"y": -432.4678010752729
}
},
{
"id": "ProxyChatLLM-3oL2C",
"data": {
"id": "ProxyChatLLM-3oL2C",
"node": {
"template": {
"n": {
"info": "",
"list": false,
"name": "n",
"show": false,
"type": "int",
"value": 1,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "ProxyChatLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": false,
"type": "bool",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 0.9,
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"client": {
"info": "",
"list": false,
"name": "client",
"show": false,
"type": "Any",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"headers": {
"info": "",
"list": false,
"name": "headers",
"show": false,
"type": "code",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"placeholder": ""
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"value": false,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": false,
"type": "bool",
"value": false,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"max_tokens": {
"info": "",
"list": false,
"name": "max_tokens",
"show": true,
"type": "int",
"value": 2048,
"advanced": true,
"password": true,
"required": false,
"multiline": false,
"placeholder": ""
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": true,
"type": "str",
"value": "gpt-3.5-turbo-16k-0613",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"max_retries": {
"info": "",
"list": false,
"name": "max_retries",
"show": false,
"type": "int",
"value": 0,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.7,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"model_kwargs": {
"info": "",
"list": false,
"name": "model_kwargs",
"show": true,
"type": "code",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"elemai_api_key": {
"info": "",
"list": false,
"name": "elemai_api_key",
"show": true,
"type": "str",
"value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJiaXNoZW5nX29wZW42IiwiZXhwIjoxNzEzNzU0MjUyfQ.ww1l-GTBYJiHV3-U1JcacvWOqYPd-QMpuJIeuO9_OM8",
"advanced": false,
"password": true,
"required": false,
"multiline": false,
"placeholder": ""
},
"elemai_base_url": {
"info": "",
"list": false,
"name": "elemai_base_url",
"show": true,
"type": "str",
"value": "http://192.168.106.12:6001/v1/chatcompletion",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"request_timeout": {
"info": "",
"list": false,
"name": "request_timeout",
"show": false,
"type": "float",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"tiktoken_model_name": {
"info": "",
"list": false,
"name": "tiktoken_model_name",
"show": false,
"type": "str",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Wrapper around proxy Chat large language models.",
"base_classes": [
"Generic",
"BaseLanguageModel",
"Runnable",
"ProxyChatLLM",
"RunnableSerializable",
"BaseChatModel",
"BaseLLM"
],
"display_name": "ProxyChatLLM",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "ProxyChatLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 501,
"dragging": false,
"position": {
"x": 1024.1163217007638,
"y": -520.5274231154001
},
"selected": false,
"positionAbsolute": {
"x": 1024.1163217007638,
"y": -520.5274231154001
}
},
{
"id": "InputNode-NXC32",
"data": {
"id": "InputNode-NXC32",
"node": {
"template": {
"_type": "input",
"input": {
"info": "",
"list": true,
"name": "input",
"show": true,
"type": "str",
"value": [
"人工智能行业的市场概况,如市场规模等",
"“AI人工智能”行业的趋势、动态和主要推动因素,例如技术创新、市场需求变化等",
"“AI人工智能”涉及哪些领域,分析各个领域的特点、规模和增长前景",
"”AI人工智能“行业的优势、劣势、机会和威胁进行评估",
"“AI人工智能”行业影响较大的法规、政策和法律环境",
"“AI人工智能”行业中的投资机会,可能影响行业表现的风险因素",
"“AI人工智能”行业未来发展趋势和预测的观点,考虑到技术发展、市场需求变化等因素",
"写一个“AI人工智能“行业的现状的总结题目,15个字以内,示例:AI+产品矩阵完善,利润端短期承压"
],
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "输入内容"
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"input"
],
"display_name": "InputNode",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "InputNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 595,
"dragging": false,
"position": {
"x": 1618.88491687723,
"y": 660.651152090995
},
"selected": false,
"positionAbsolute": {
"x": 1618.88491687723,
"y": 660.651152090995
}
},
{
"id": "Milvus-YOosC",
"data": {
"id": "Milvus-YOosC",
"node": {
"template": {
"_type": "Milvus",
"drop_old": {
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"documents": {
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"info": "",
"list": false,
"name": "embedding",
"show": false,
"type": "Embeddings",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_type": {
"info": "",
"list": false,
"name": "search_type",
"show": true,
"type": "str",
"value": "similarity",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"index_params": {
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_kwargs": {
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_params": {
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"collection_name": {
"l2": true,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "昆仑万维年报",
"l2_name": "公司库",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"collection_id": 1557
},
"connection_args": {
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"consistency_level": {
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"Milvus",
"VectorStore",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 393,
"dragging": false,
"position": {
"x": 2093.7332965707155,
"y": 167.43148034535486
},
"selected": false,
"positionAbsolute": {
"x": 2093.7332965707155,
"y": 167.43148034535486
}
},
{
"id": "PromptTemplate-wxEKt",
"data": {
"id": "PromptTemplate-wxEKt",
"node": {
"name": "",
"template": {
"_type": "PromptTemplate",
"template": {
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "参考文本:\n{context}\n\n----------------------\n# Role:行业分析师\n\n# Background :\n- 你是一名行业分析师。你的日常工作是根据【参考文本】的内容总结问题。\n\n# Goals:\n- 以上【参考文本】中是从企业知识库中查找到的相关信息,\n- 尽可能体现你的专业性,将答案尽可能详细阐述。\n- 用中文回答问题,并且答案要严谨、专业、清晰、可读性好。\n- 拥有排版审美, 会利用序号, 缩进, 分隔线和换行符等等来美化信息排版。\n- 只回复内容,在段落的开头和结尾,不要有“根据文本内容”和“希望对你有帮助”等过渡语句。\n\n\n----------------------\n\n用户问题: {question}\n你的回答:",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"input_types": {
"info": "",
"list": false,
"name": "input_types",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"output_parser": {
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_variables": {
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"context",
"question"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"template_format": {
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "Union[Literal['f-string'], Literal['jinja2']]",
"value": "f-string",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"partial_variables": {
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"validate_template": {
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": true,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "A prompt template for a language model.",
"base_classes": [
"Generic",
"PromptTemplate",
"StringPromptTemplate",
"Runnable",
"RunnableSerializable",
"BasePromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"": [
"context",
"question"
],
"template": [
"context",
"question"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {}
},
"type": "PromptTemplate",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 291,
"dragging": false,
"position": {
"x": 1023.4514262700376,
"y": 11.02496084544926
},
"selected": false,
"positionAbsolute": {
"x": 1023.4514262700376,
"y": 11.02496084544926
}
},
{
"id": "PromptTemplate-ot33y",
"data": {
"id": "PromptTemplate-ot33y",
"node": {
"name": "",
"template": {
"_type": "PromptTemplate",
"template": {
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "参考文本:\n{context}\n\n----------------------\n# Role:行业分析师\n\n# Background :\n- 你是一名行业分析师。你的日常工作是根据【参考文本】的内容总结问题。\n\n# Goals:\n- 以上【参考文本】中是从企业知识库中查找到的相关信息,\n- 尽可能体现你的专业性,将答案尽可能详细阐述。\n- 用中文回答问题,并且答案要严谨、专业、清晰、可读性好。\n- 拥有排版审美, 会利用序号, 缩进, 分隔线和换行符等等来美化信息排版。\n- 只回复内容,在段落的开头和结尾,不要有“根据文本内容”和“希望对你有帮助”等过渡语句。\n\n\n----------------------\n\n用户问题: {question}\n你的回答:",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"input_types": {
"info": "",
"list": false,
"name": "input_types",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"output_parser": {
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_variables": {
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"context",
"question"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"template_format": {
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "Union[Literal['f-string'], Literal['jinja2']]",
"value": "f-string",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"partial_variables": {
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"validate_template": {
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": true,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "A prompt template for a language model.",
"base_classes": [
"Generic",
"PromptTemplate",
"StringPromptTemplate",
"Runnable",
"RunnableSerializable",
"BasePromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"": [
"context",
"question"
],
"template": [
"context",
"question"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {}
},
"type": "PromptTemplate",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 291,
"dragging": false,
"position": {
"x": 858.2666097750891,
"y": 1523.0705323867192
},
"selected": false,
"positionAbsolute": {
"x": 858.2666097750891,
"y": 1523.0705323867192
}
},
{
"id": "VariableNode-d14a6",
"data": {
"id": "VariableNode-d14a6",
"node": {
"template": {
"_type": "VariableNode",
"variables": {
"info": "",
"list": true,
"name": "variables",
"show": true,
"type": "variable",
"value": [
"公司名称"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"variable_value": {
"info": "",
"list": true,
"name": "variable_value",
"show": false,
"type": "str",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "用来设置变量",
"base_classes": [
"VariableNode"
],
"display_name": "VariableNode",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "VariableNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 283,
"position": {
"x": 2566.3869873706526,
"y": 567.5902839403417
},
"positionAbsolute": {
"x": 2566.3869873706526,
"y": 567.5902839403417
}
}
],
"viewport": {
"x": 87.48881258369431,
"y": 160.39352066140611,
"zoom": 0.243342122449621
}
},
"order_num": 7405517,
"guide_word": null
},
{
"update_time": "2024-10-15 18:43:05",
"parameters": null,
"name": "⭐️先检索 QA 后检索文档知识库问答",
"description": "优先检索 QA 知识库,有则直接返回答案,无则继续检索文档知识库,基于 RAG 生成回复",
"flow_id": "c7fa82f69d4e495e87e4e44a6ab44f30",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-10-15 18:40:16",
"id": 194,
"data": {
"edges": [
{
"id": "reactflow__edge-PythonFunction-wBU1iPythonFunction|PythonFunction-wBU1i|function-RuleBasedRouter-apZIqfunction|rule_function|RuleBasedRouter-apZIq",
"style": {
"stroke": "#555"
},
"source": "PythonFunction-wBU1i",
"target": "RuleBasedRouter-apZIq",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "PythonFunction|PythonFunction-wBU1i|function",
"targetHandle": "function|rule_function|RuleBasedRouter-apZIq"
},
{
"id": "reactflow__edge-PythonFunction-ChvDxPythonFunction|PythonFunction-ChvDx|function-TransformChain-jBTgXfunction|transform|TransformChain-jBTgX",
"style": {
"stroke": "#555"
},
"source": "PythonFunction-ChvDx",
"target": "TransformChain-jBTgX",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "PythonFunction|PythonFunction-ChvDx|function",
"targetHandle": "function|transform|TransformChain-jBTgX"
},
{
"id": "reactflow__edge-RetrievalChain-ryEdkRetrievalChain|RetrievalChain-ryEdk|Chain|RetrievalChain|function-SequentialChain-ZcqZ1Chain|chains|SequentialChain-ZcqZ1",
"style": {
"stroke": "#555"
},
"source": "RetrievalChain-ryEdk",
"target": "SequentialChain-ZcqZ1",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "RetrievalChain|RetrievalChain-ryEdk|Chain|RetrievalChain|function",
"targetHandle": "Chain|chains|SequentialChain-ZcqZ1"
},
{
"id": "reactflow__edge-Milvus-8pyknMilvus|Milvus-8pykn|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever-RetrievalChain-ryEdkBaseRetriever|retriever|RetrievalChain-ryEdk",
"style": {
"stroke": "#555"
},
"source": "Milvus-8pykn",
"target": "RetrievalChain-ryEdk",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "Milvus|Milvus-8pykn|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|RetrievalChain-ryEdk"
},
{
"id": "reactflow__edge-ConversationBufferMemory-i1PuBConversationBufferMemory|ConversationBufferMemory-i1PuB|BaseMemory|ConversationBufferMemory|BaseChatMemory-ConversationalRetrievalChain-aS5HYBaseChatMemory|memory|ConversationalRetrievalChain-aS5HY",
"style": {
"stroke": "#555"
},
"source": "ConversationBufferMemory-i1PuB",
"target": "ConversationalRetrievalChain-aS5HY",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "ConversationBufferMemory|ConversationBufferMemory-i1PuB|BaseMemory|ConversationBufferMemory|BaseChatMemory",
"targetHandle": "BaseChatMemory|memory|ConversationalRetrievalChain-aS5HY"
},
{
"id": "reactflow__edge-Milvus-u5L3KMilvus|Milvus-u5L3K|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever-ConversationalRetrievalChain-aS5HYBaseRetriever|retriever|ConversationalRetrievalChain-aS5HY",
"style": {
"stroke": "#555"
},
"source": "Milvus-u5L3K",
"target": "ConversationalRetrievalChain-aS5HY",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "Milvus|Milvus-u5L3K|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|ConversationalRetrievalChain-aS5HY"
},
{
"id": "reactflow__edge-ConversationalRetrievalChain-aS5HYConversationalRetrievalChain|ConversationalRetrievalChain-aS5HY|BaseConversationalRetrievalChain|ConversationalRetrievalChain|Chain|function-MultiRuleChain-s5i5CChain|default_chain|MultiRuleChain-s5i5C",
"style": {
"stroke": "#555"
},
"source": "ConversationalRetrievalChain-aS5HY",
"target": "MultiRuleChain-s5i5C",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "ConversationalRetrievalChain|ConversationalRetrievalChain-aS5HY|BaseConversationalRetrievalChain|ConversationalRetrievalChain|Chain|function",
"targetHandle": "Chain|default_chain|MultiRuleChain-s5i5C"
},
{
"id": "reactflow__edge-RuleBasedRouter-apZIqRuleBasedRouter|RuleBasedRouter-apZIq|Chain|RuleBasedRouter|RouterChain|function-MultiRuleChain-s5i5CRouterChain|router_chain|MultiRuleChain-s5i5C",
"style": {
"stroke": "#555"
},
"source": "RuleBasedRouter-apZIq",
"target": "MultiRuleChain-s5i5C",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "RuleBasedRouter|RuleBasedRouter-apZIq|Chain|RuleBasedRouter|RouterChain|function",
"targetHandle": "RouterChain|router_chain|MultiRuleChain-s5i5C"
},
{
"id": "reactflow__edge-TransformChain-jBTgXTransformChain|TransformChain-jBTgX|TransformChain|Chain|function-MultiRuleChain-s5i5CChain|LLMChains|MultiRuleChain-s5i5C",
"style": {
"stroke": "#555"
},
"source": "TransformChain-jBTgX",
"target": "MultiRuleChain-s5i5C",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "TransformChain|TransformChain-jBTgX|TransformChain|Chain|function",
"targetHandle": "Chain|LLMChains|MultiRuleChain-s5i5C"
},
{
"id": "reactflow__edge-MultiRuleChain-s5i5CMultiRuleChain|MultiRuleChain-s5i5C|MultiRouteChain|Chain|MultiRuleChain|function-SequentialChain-ZcqZ1Chain|chains|SequentialChain-ZcqZ1",
"style": {
"stroke": "#555"
},
"source": "MultiRuleChain-s5i5C",
"target": "SequentialChain-ZcqZ1",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "MultiRuleChain|MultiRuleChain-s5i5C|MultiRouteChain|Chain|MultiRuleChain|function",
"targetHandle": "Chain|chains|SequentialChain-ZcqZ1"
},
{
"id": "reactflow__edge-BishengLLM-90fb5BishengLLM|BishengLLM-90fb5|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-ConversationalRetrievalChain-aS5HYBaseLanguageModel|llm|ConversationalRetrievalChain-aS5HY",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-90fb5",
"target": "ConversationalRetrievalChain-aS5HY",
"animated": false,
"selected": false,
"className": "stroke-gray-900 ",
"sourceHandle": "BishengLLM|BishengLLM-90fb5|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|ConversationalRetrievalChain-aS5HY"
}
],
"nodes": [
{
"id": "RuleBasedRouter-apZIq",
"data": {
"id": "RuleBasedRouter-apZIq",
"node": {
"template": {
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "RuleBasedRouter",
"memory": {
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_node": {
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"rule_function": {
"info": "",
"list": false,
"name": "rule_function",
"show": true,
"type": "function",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_variables": {
"info": "",
"list": true,
"name": "input_variables",
"show": true,
"type": "str",
"value": [
"result"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "",
"base_classes": [
"Chain",
"RuleBasedRouter",
"RouterChain",
"function"
],
"display_name": "RuleBasedRouter",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "RuleBasedRouter",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 343,
"position": {
"x": 1080.3103197789733,
"y": 1337.4878712865757
},
"selected": false,
"positionAbsolute": {
"x": 1080.3103197789733,
"y": 1337.4878712865757
}
},
{
"id": "PythonFunction-wBU1i",
"data": {
"id": "PythonFunction-wBU1i",
"node": {
"template": {
"code": {
"info": "",
"list": false,
"name": "code",
"show": true,
"type": "code",
"value": "def rule_fuc(inputs: dict) -> dict:\n if not len(inputs['result']):\n return {'destination': None, 'next_inputs': {\"question\": inputs['query']}}\n else:\n return {'destination': 'norm', 'next_inputs': inputs}",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"_type": "PythonFunction"
},
"description": "Python function to be executed.",
"base_classes": [
"function"
],
"display_name": "PythonFunction",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "PythonFunction",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 255,
"position": {
"x": 522.7838419708218,
"y": 1571.2197796319172
},
"selected": false,
"positionAbsolute": {
"x": 522.7838419708218,
"y": 1571.2197796319172
}
},
{
"id": "PythonFunction-ChvDx",
"data": {
"id": "PythonFunction-ChvDx",
"node": {
"template": {
"code": {
"info": "",
"list": false,
"name": "code",
"show": true,
"type": "code",
"value": "def func(inputs: dict) -> dict:\n return {'answer': inputs['result'][0], 'source_documents':''} # 仅取第一个",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"_type": "PythonFunction"
},
"description": "Python function to be executed.",
"base_classes": [
"function"
],
"display_name": "PythonFunction",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "PythonFunction",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 255,
"position": {
"x": 549.6671717852333,
"y": 187.7892888367361
},
"selected": false,
"positionAbsolute": {
"x": 549.6671717852333,
"y": 187.7892888367361
}
},
{
"id": "TransformChain-jBTgX",
"data": {
"id": "TransformChain-jBTgX",
"node": {
"template": {
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "TransformChain",
"memory": {
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"value": false,
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"transform": {
"info": "",
"list": false,
"name": "transform",
"show": true,
"type": "function",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"input_variables": {
"info": "",
"list": true,
"name": "input_variables",
"show": true,
"type": "str",
"value": [
"result"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"output_variables": {
"info": "",
"list": true,
"name": "output_variables",
"show": true,
"type": "str",
"value": [
"answer",
"source_documents"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "Chain transform chain output.",
"base_classes": [
"TransformChain",
"Chain",
"function"
],
"display_name": "TransformChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "TransformChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 495,
"position": {
"x": 1069.678074540037,
"y": 153.32667222210148
},
"selected": false,
"positionAbsolute": {
"x": 1069.678074540037,
"y": 153.32667222210148
}
},
{
"id": "SequentialChain-ZcqZ1",
"data": {
"id": "SequentialChain-ZcqZ1",
"node": {
"template": {
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "SequentialChain",
"chains": {
"info": "",
"list": true,
"name": "chains",
"show": true,
"type": "Chain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"memory": {
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"value": false,
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_node": {
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"return_all": {
"info": "",
"list": false,
"name": "return_all",
"show": false,
"type": "bool",
"value": false,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"chain_order": {
"info": "",
"list": false,
"name": "chain_order",
"show": true,
"type": "str",
"value": "[\"RetrievalChain-ryEdk\", \"MultiRuleChain-s5i5C\"]",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_variables": {
"info": "",
"list": true,
"name": "input_variables",
"show": true,
"type": "str",
"value": [
"query"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"output_variables": {
"info": "",
"list": true,
"name": "output_variables",
"show": true,
"type": "str",
"value": [
"answer",
"source_documents"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "Chain where the outputs of one chain feed directly into next.",
"base_classes": [
"SequentialChain",
"Chain",
"function"
],
"display_name": "SequentialChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "SequentialChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 597,
"position": {
"x": 2554.0955901640964,
"y": 323.87489548587064
},
"selected": false,
"positionAbsolute": {
"x": 2554.0955901640964,
"y": 323.87489548587064
}
},
{
"id": "RetrievalChain-ryEdk",
"data": {
"id": "RetrievalChain-ryEdk",
"node": {
"template": {
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "RetrievalChain",
"memory": {
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"value": false,
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_key": {
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"retriever": {
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": false,
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Chain to use to combine the documents.",
"base_classes": [
"Chain",
"RetrievalChain",
"function"
],
"display_name": "RetrievalChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "RetrievalChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 281,
"position": {
"x": 2047.2642182152017,
"y": 258.5734077753632
},
"selected": false,
"positionAbsolute": {
"x": 2047.2642182152017,
"y": 258.5734077753632
}
},
{
"id": "Milvus-u5L3K",
"data": {
"id": "Milvus-u5L3K",
"node": {
"template": {
"_type": "Milvus",
"drop_old": {
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"documents": {
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"info": "",
"list": false,
"name": "embedding",
"show": false,
"type": "Embeddings",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_type": {
"info": "",
"list": false,
"name": "search_type",
"type": "str",
"value": "similarity",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"index_params": {
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_kwargs": {
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_params": {
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"collection_name": {
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "BISHENG产品文档20240529版本",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"collection_id": 6642
},
"connection_args": {
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"consistency_level": {
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"Milvus",
"VectorStore",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 391,
"position": {
"x": 520.0097972326654,
"y": 1125.7035041561169
},
"selected": false,
"positionAbsolute": {
"x": 520.0097972326654,
"y": 1125.7035041561169
}
},
{
"id": "Milvus-8pykn",
"data": {
"id": "Milvus-8pykn",
"node": {
"template": {
"_type": "Milvus",
"drop_old": {
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"documents": {
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"info": "",
"list": false,
"name": "embedding",
"show": false,
"type": "Embeddings",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_type": {
"info": "",
"list": false,
"name": "search_type",
"show": true,
"type": "str",
"value": "similarity_score_threshold",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"index_params": {
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_kwargs": {
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{\"k\": 1, \"score_threshold\": 0.8}",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"search_params": {
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"collection_name": {
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "毕昇 QA 知识库",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"collection_id": 6938
},
"connection_args": {
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"consistency_level": {
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"Milvus",
"VectorStore",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 555,
"position": {
"x": 1570.1640482171665,
"y": 20
},
"selected": false,
"positionAbsolute": {
"x": 1570.1640482171665,
"y": 20
}
},
{
"id": "ConversationalRetrievalChain-aS5HY",
"data": {
"id": "ConversationalRetrievalChain-aS5HY",
"node": {
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"_type": "ConversationalRetrievalChain",
"memory": {
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseChatMemory",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"value": false,
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"info": "",
"list": false,
"name": "callbacks",
"show": false,
"type": "Callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"retriever": {
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"chain_type": {
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"document_prompt": {
"info": "",
"list": false,
"name": "document_prompt",
"show": true,
"type": "BasePromptTemplate",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"condense_question_llm": {
"info": "",
"list": false,
"name": "condense_question_llm",
"show": false,
"type": "BaseLanguageModel",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Return source documents"
},
"condense_question_prompt": {
"info": "",
"list": false,
"name": "condense_question_prompt",
"show": true,
"type": "BasePromptTemplate",
"value": {
"_type": "prompt",
"template": "Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language.\n\nChat History:\n{chat_history}\nFollow Up Input: {question}\nStandalone question:",
"output_parser": null,
"input_variables": [
"chat_history",
"question"
],
"template_format": "f-string",
"partial_variables": {},
"validate_template": true
},
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"combine_docs_chain_kwargs": {
"info": "",
"list": false,
"name": "combine_docs_chain_kwargs",
"show": true,
"type": "BasePromptTemplate",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "prompt"
}
},
"description": "Convenience method to load chain from LLM and retriever.",
"base_classes": [
"BaseConversationalRetrievalChain",
"ConversationalRetrievalChain",
"Chain",
"function"
],
"display_name": "ConversationalRetrievalChain",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/chat_vector_db"
},
"type": "ConversationalRetrievalChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 531,
"position": {
"x": 1076.7431790118962,
"y": 720.4023383381091
},
"selected": false,
"positionAbsolute": {
"x": 1076.7431790118962,
"y": 720.4023383381091
}
},
{
"id": "ConversationBufferMemory-i1PuB",
"data": {
"id": "ConversationBufferMemory-i1PuB",
"node": {
"template": {
"_type": "ConversationBufferMemory",
"ai_prefix": {
"info": "",
"list": false,
"name": "ai_prefix",
"show": false,
"type": "str",
"value": "AI",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_key": {
"info": "The variable to be used as Chat Input when more than one variable is available.",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"memory_key": {
"info": "",
"list": false,
"name": "memory_key",
"show": true,
"type": "str",
"value": "chat_history",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"output_key": {
"info": "The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "answer",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"chat_memory": {
"info": "",
"list": false,
"name": "chat_memory",
"show": true,
"type": "BaseChatMessageHistory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"human_prefix": {
"info": "",
"list": false,
"name": "human_prefix",
"show": false,
"type": "str",
"value": "Human",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"return_messages": {
"info": "",
"list": false,
"name": "return_messages",
"show": true,
"type": "bool",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Buffer for storing conversation memory.",
"base_classes": [
"BaseMemory",
"ConversationBufferMemory",
"BaseChatMemory"
],
"display_name": "ConversationBufferMemory",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/memory/how_to/buffer"
},
"type": "ConversationBufferMemory",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 527,
"position": {
"x": 519.6689261937935,
"y": 539.0200298494985
},
"selected": false,
"positionAbsolute": {
"x": 519.6689261937935,
"y": 539.0200298494985
}
},
{
"id": "MultiRuleChain-s5i5C",
"data": {
"id": "MultiRuleChain-s5i5C",
"node": {
"template": {
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "MultiRuleChain",
"memory": {
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"LLMChains": {
"info": "",
"list": true,
"name": "LLMChains",
"show": true,
"type": "Chain",
"value": "[]",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_node": {
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"router_chain": {
"info": "",
"list": false,
"name": "router_chain",
"show": true,
"type": "RouterChain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"default_chain": {
"info": "",
"list": false,
"name": "default_chain",
"show": true,
"type": "Chain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"silent_errors": {
"info": "",
"list": false,
"name": "silent_errors",
"show": false,
"type": "bool",
"value": false,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"output_variables": {
"info": "",
"list": true,
"name": "output_variables",
"show": true,
"type": "str",
"value": [
"source_documents",
"answer"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"destination_chains": {
"info": "",
"list": false,
"name": "destination_chains",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"destination_chain_name": {
"info": "{chain_id: name}",
"list": true,
"name": "destination_chain_name",
"show": true,
"type": "NestedDict",
"value": "{\"TransformChain-jBTgX\": \"norm\"}",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
}
},
"description": "",
"base_classes": [
"MultiRouteChain",
"Chain",
"MultiRuleChain",
"function"
],
"display_name": "MultiRuleChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "MultiRuleChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 549,
"position": {
"x": 1787.231955024217,
"y": 753.8514799486979
},
"selected": false,
"positionAbsolute": {
"x": 1787.231955024217,
"y": 753.8514799486979
}
},
{
"id": "BishengLLM-90fb5",
"data": {
"id": "BishengLLM-90fb5",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 4,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "ChatOpenAI",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "Use the llm model that has been launched in model management",
"base_classes": [
"BaseLanguageModel",
"BaseChatModel",
"BishengLLM",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 427,
"position": {
"x": 18.000000000000004,
"y": 309.62500515920107
},
"selected": false,
"positionAbsolute": {
"x": 18.000000000000004,
"y": 309.62500515920107
}
}
],
"viewport": {
"x": 194.6566973414132,
"y": 31.460215170984327,
"zoom": 0.4474437869053313
}
},
"order_num": null,
"guide_word": null
},
{
"update_time": "2024-10-17 16:44:57",
"parameters": null,
"name": "⭐️ 查询数据库并画图",
"description": "大模型根据用户请求可查询SQL数据库并画图(若用户没有要求画图则不会画图),画图是通过调用代码运行环境绘制图表并最终保存为图片存储到Minio,然后以Markdown格式返回图片地址在前端展示。\n\n我们提供了模板技能,运行该应用对模型能力有一定要求,测试Qwen2.5-72B可以运行成功,但会有一些不稳定,可以多尝试换几种问法。",
"flow_id": "387757240d3e4f3a9b5cea781bdb4d48",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-10-17 16:44:57",
"id": 196,
"data": {
"edges": [
{
"id": "reactflow__edge-BishengLLM-bc7dcBishengLLM|BishengLLM-bc7dc|BaseChatModel|BaseLanguageModel|BishengLLM|BaseLLM-SQLDatabaseChain-01203BaseLanguageModel|llm|SQLDatabaseChain-01203",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-bc7dc",
"target": "SQLDatabaseChain-01203",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "BishengLLM|BishengLLM-bc7dc|BaseChatModel|BaseLanguageModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|SQLDatabaseChain-01203"
},
{
"id": "reactflow__edge-SQLDatabase-14a1bSQLDatabase|SQLDatabase-14a1b|SQLDatabase|function-SQLDatabaseChain-01203SQLDatabase|db|SQLDatabaseChain-01203",
"style": {
"stroke": "#555"
},
"source": "SQLDatabase-14a1b",
"target": "SQLDatabaseChain-01203",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "SQLDatabase|SQLDatabase-14a1b|SQLDatabase|function",
"targetHandle": "SQLDatabase|db|SQLDatabaseChain-01203"
},
{
"id": "reactflow__edge-PromptTemplate-06f11PromptTemplate|PromptTemplate-06f11|BasePromptTemplate|StringPromptTemplate|PromptTemplate-SQLDatabaseChain-01203BasePromptTemplate|prompt|SQLDatabaseChain-01203",
"style": {
"stroke": "#555"
},
"source": "PromptTemplate-06f11",
"target": "SQLDatabaseChain-01203",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "PromptTemplate|PromptTemplate-06f11|BasePromptTemplate|StringPromptTemplate|PromptTemplate",
"targetHandle": "BasePromptTemplate|prompt|SQLDatabaseChain-01203"
},
{
"id": "reactflow__edge-BishengLLM-bc7dcBishengLLM|BishengLLM-bc7dc|BaseChatModel|BaseLanguageModel|BishengLLM|BaseLLM-ZeroShotAgent-50e40BaseLanguageModel|llm|ZeroShotAgent-50e40",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-bc7dc",
"target": "ZeroShotAgent-50e40",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "BishengLLM|BishengLLM-bc7dc|BaseChatModel|BaseLanguageModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|ZeroShotAgent-50e40"
},
{
"id": "reactflow__edge-SQLDatabaseChain-01203SQLDatabaseChain|SQLDatabaseChain-01203|SQLDatabaseChain|Chain|function-Tool-f4cb0function|func|Tool-f4cb0",
"style": {
"stroke": "#555"
},
"source": "SQLDatabaseChain-01203",
"target": "Tool-f4cb0",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "SQLDatabaseChain|SQLDatabaseChain-01203|SQLDatabaseChain|Chain|function",
"targetHandle": "function|func|Tool-f4cb0"
},
{
"id": "reactflow__edge-Tool-f4cb0Tool|Tool-f4cb0|Tool|BaseTool-ZeroShotAgent-50e40BaseTool|tools|ZeroShotAgent-50e40",
"style": {
"stroke": "#555"
},
"source": "Tool-f4cb0",
"target": "ZeroShotAgent-50e40",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "Tool|Tool-f4cb0|Tool|BaseTool",
"targetHandle": "BaseTool|tools|ZeroShotAgent-50e40"
},
{
"id": "reactflow__edge-Data-2e84bData|Data-2e84b|BaseTool|Tool-ZeroShotAgent-50e40BaseTool|tools|ZeroShotAgent-50e40",
"style": {
"stroke": "#555"
},
"source": "Data-2e84b",
"target": "ZeroShotAgent-50e40",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "Data|Data-2e84b|BaseTool|Tool",
"targetHandle": "BaseTool|tools|ZeroShotAgent-50e40"
}
],
"nodes": [
{
"id": "SQLDatabaseChain-01203",
"data": {
"id": "SQLDatabaseChain-01203",
"node": {
"beta": false,
"template": {
"db": {
"info": "",
"list": false,
"name": "db",
"show": true,
"type": "SQLDatabase",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Db",
"model_config": {}
},
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"_type": "SQLDatabaseChain",
"prompt": {
"info": "",
"list": false,
"name": "prompt",
"show": true,
"type": "BasePromptTemplate",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Prompt",
"model_config": {}
},
"input_node": {
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Preset Question",
"model_config": {}
}
},
"description": "Create a SQLDatabaseChain from an LLM and a database connection.",
"base_classes": [
"SQLDatabaseChain",
"Chain",
"function"
],
"display_name": "SQLDatabaseChain",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "SQLDatabaseChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 337,
"dragging": false,
"position": {
"x": 676.0138039780265,
"y": 556.0498254993254
},
"selected": false,
"positionAbsolute": {
"x": 676.0138039780265,
"y": 556.0498254993254
}
},
{
"id": "BishengLLM-bc7dc",
"data": {
"id": "BishengLLM-bc7dc",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": false,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 27,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "ChatOpenAI",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "Use the llm model that has been launched in model management",
"base_classes": [
"BaseChatModel",
"BaseLanguageModel",
"BishengLLM",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 427,
"position": {
"x": 18,
"y": 20
},
"selected": false,
"positionAbsolute": {
"x": 18,
"y": 20
}
},
{
"id": "SQLDatabase-14a1b",
"data": {
"id": "SQLDatabase-14a1b",
"node": {
"beta": false,
"template": {
"_type": "SQLDatabase",
"engine_args": {
"info": "",
"list": false,
"name": "engine_args",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Engine Args",
"model_config": {}
},
"database_uri": {
"info": "",
"list": false,
"name": "database_uri",
"show": true,
"type": "str",
"value": "mysql+pymysql://root:E1SkG0PaDMEPTAxY@192.168.106.116:3306/company_stock",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Database Uri",
"model_config": {}
}
},
"description": "Construct a SQLAlchemy engine from URI.",
"base_classes": [
"SQLDatabase",
"function"
],
"display_name": "SQLDatabase",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "SQLDatabase",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 255,
"position": {
"x": 18.61695520886218,
"y": 577.4905684719494
},
"selected": false,
"positionAbsolute": {
"x": 18.61695520886218,
"y": 577.4905684719494
}
},
{
"id": "PromptTemplate-06f11",
"data": {
"id": "PromptTemplate-06f11",
"node": {
"beta": false,
"icon": null,
"name": "",
"error": null,
"template": {
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "PromptTemplate",
"input": {
"info": "",
"list": false,
"name": "input",
"show": true,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": true,
"title_case": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "input",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"template": {
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "你是一个与 SQL 数据库交互的智能代理。\n\n## 规则\n1. 给定一个输入问题,输出一个语法正确的 mysql 查询来运行。\n2. 除非用户指定了希望获得的示例的具体数量,否则始终将查询限制为最多5个结果。\n3. 切勿查询特定表中的所有列,只查询问题中的相关列。\n4. 一定要严格根据查询结果来回答,如果查询结果为空,表示未找到相关记录。\n5. 请用中文回答用户的问题。\n6. 当前系统时间是2024年x月xx日。\n7. 如果SQL查询为空,不要输出错误,则回答为空。\n8. 如果出现SQL相关报错,请调整后重试。\n9. 文件链接前不需要添加额外的https或者http前缀\n\n## 供参考的信息\n`stock_price` 为股价表。字段及含义如下:\nid: 主键,自动递增。\nsotck_no: 股票代码。\nname: 股票名称。\ncomment: 千股千评,可能是指对该股票的评论或分析。\nnew_price: 最新价。\nchange_amount: 涨跌额。\namplitude: 涨跌幅。\nprev_close_price: 昨日收盘价。\nopen_price: 今日开盘价。\nhighest: 最高价。\nlowest: 最低价。\ntrade_volume: 成交量(万股)。\ntrade_money: 成交额(万元)。\n\n#####\n用户问题:\n{input}\n\n问题对应sql(注意开头不要包含”sql“标识符,直接输入sql语句即可):",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": true,
"title_case": true,
"placeholder": "",
"display_name": "Template",
"model_config": {}
},
"input_types": {
"info": "",
"list": false,
"name": "input_types",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Input Types",
"model_config": {}
},
"output_parser": {
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Output Parser",
"model_config": {}
},
"input_variables": {
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"input"
],
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Input Variables",
"model_config": {}
},
"template_format": {
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "Literal['f-string', 'mustache', 'jinja2']",
"value": "f-string",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Template Format",
"model_config": {}
},
"partial_variables": {
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Partial Variables",
"model_config": {}
},
"validate_template": {
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": false,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Validate Template",
"model_config": {}
}
},
"full_path": null,
"description": "Prompt template for a language model.",
"base_classes": [
"BasePromptTemplate",
"StringPromptTemplate",
"PromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"": [
"input"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {}
},
"type": "PromptTemplate",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 373,
"position": {
"x": 25.822320988711738,
"y": 874.460009094774
},
"selected": false,
"positionAbsolute": {
"x": 25.822320988711738,
"y": 874.460009094774
}
},
{
"id": "ZeroShotAgent-50e40",
"data": {
"id": "ZeroShotAgent-50e40",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"_type": "ZeroShotAgent",
"tools": {
"info": "",
"list": true,
"name": "tools",
"show": true,
"type": "BaseTool",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tools",
"model_config": {}
},
"prefix": {
"info": "",
"list": false,
"name": "prefix",
"show": true,
"type": "str",
"value": "Answer the following questions as best you can. \n一般来讲需要先根据用户的问题使用”数据库查询“tool来查询数据,然后使用”Python REPL Tool“tool来绘制图表,”Python REPL Tool“tool绘制完成的图片会存储到对象存储并返回存储的链接,最终请用Markdown的语法来输出链接\nYou have access to the following tools:",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": true,
"title_case": true,
"placeholder": "",
"display_name": "Prefix",
"model_config": {}
},
"suffix": {
"info": "",
"list": false,
"name": "suffix",
"show": true,
"type": "str",
"value": "Begin!\n\nQuestion: {input}\nThought:{agent_scratchpad}",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": true,
"title_case": true,
"placeholder": "",
"display_name": "Suffix",
"model_config": {}
},
"input_node": {
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Preset Question",
"model_config": {}
},
"output_parser": {
"info": "",
"list": false,
"name": "output_parser",
"show": false,
"type": "AgentOutputParser",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Output Parser",
"model_config": {}
},
"input_variables": {
"info": "",
"list": true,
"name": "input_variables",
"show": true,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Input Variables",
"model_config": {}
},
"callback_manager": {
"info": "",
"list": false,
"name": "callback_manager",
"show": false,
"type": "BaseCallbackManager",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callback Manager",
"model_config": {}
},
"format_instructions": {
"info": "",
"list": false,
"name": "format_instructions",
"show": true,
"type": "str",
"value": "Use the following format:\n\nQuestion: the input question you must answer\nThought: you should always think about what to do\nAction: the action to take, should be one of [{tool_names}]\nAction Input: the input to the action\nObservation: the result of the action\n... (this Thought/Action/Action Input/Observation can repeat N times)\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": true,
"title_case": true,
"placeholder": "",
"display_name": "Format Instructions",
"model_config": {}
}
},
"description": "Construct an agent from an LLM and tools.",
"base_classes": [
"BaseSingleActionAgent",
"Agent",
"ZeroShotAgent",
"function"
],
"display_name": "ZeroShotAgent",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/agents/how_to/custom_mrkl_agent",
"field_formatters": {}
},
"type": "ZeroShotAgent",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 609,
"position": {
"x": 1881.5603475961273,
"y": 749.2188069126355
},
"selected": false,
"positionAbsolute": {
"x": 1881.5603475961273,
"y": 749.2188069126355
}
},
{
"id": "Tool-f4cb0",
"data": {
"id": "Tool-f4cb0",
"node": {
"beta": false,
"template": {
"func": {
"info": "",
"list": false,
"name": "func",
"show": true,
"type": "function",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": true,
"title_case": true,
"placeholder": "",
"display_name": "Func",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": true,
"type": "str",
"value": "数据库查询",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": true,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"_type": "Tool",
"args_schema": {
"info": "",
"list": false,
"name": "args_schema",
"show": true,
"type": "NestedDict",
"value": "{\"arg1\": {\"type\": \"string\"}}",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": true,
"title_case": true,
"placeholder": "",
"display_name": "Args Schema",
"model_config": {}
},
"description": {
"info": "",
"list": false,
"name": "description",
"show": true,
"type": "str",
"value": "用户问题先从数据库中查询结果",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": true,
"title_case": true,
"placeholder": "",
"display_name": "Description",
"model_config": {}
},
"return_direct": {
"info": "",
"list": false,
"name": "return_direct",
"show": true,
"type": "bool",
"value": false,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Return Direct",
"model_config": {}
}
},
"description": "Converts a chain, agent or function into a tool.",
"base_classes": [
"Tool",
"BaseTool"
],
"display_name": "Tool",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "Tool",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 529,
"dragging": false,
"position": {
"x": 1207.7539633864767,
"y": 636.1580608046685
},
"selected": false,
"positionAbsolute": {
"x": 1207.7539633864767,
"y": 636.1580608046685
}
},
{
"id": "Data-2e84b",
"data": {
"id": "Data-2e84b",
"node": {
"beta": true,
"template": {
"code": {
"info": "",
"list": false,
"name": "code",
"show": true,
"type": "code",
"value": "import importlib\r\nimport time\r\nimport re\r\nfrom typing import Any\r\n\r\nfrom langchain_experimental.utilities.python import PythonREPL\r\nfrom langchain.callbacks.manager import (\r\n AsyncCallbackManagerForToolRun,\r\n CallbackManagerForToolRun,\r\n)\r\nfrom bisheng import CustomComponent\r\nfrom bisheng.utils.minio_client import MinioClient\r\nfrom langchain_core.tools import Tool\r\n\r\n\r\nclass PythonREPLToolComponent(CustomComponent):\r\n display_name = \"Python REPL Tool\"\r\n description = \"A Python shell. Use this to execute python commands. Input should be a valid python command. If you want to see the output of a value, you should print it out with `print(...)`.\"\r\n name = \"PythonREPLTool\"\r\n\r\n def build_config(self):\r\n return {\r\n \"name\": {\"display_name\": \"Name\", \"info\": \"The name of the tool.\"},\r\n \"description\": {\"display_name\": \"Description\", \"info\": \"A description of the tool.\"},\r\n \"global_imports\": {\r\n \"display_name\": \"Global Imports\",\r\n \"info\": \"A list of modules to import globally, e.g. ['math', 'numpy'].\",\r\n },\r\n }\r\n\r\n def get_globals(self, globals: list[str]) -> dict:\r\n \"\"\"\r\n Retrieves the global variables from the specified modules.\r\n\r\n Args:\r\n globals (list[str]): A list of module names.\r\n\r\n Returns:\r\n dict: A dictionary containing the global variables from the specified modules.\r\n \"\"\"\r\n global_dict = {}\r\n for module in globals:\r\n try:\r\n imported_module = importlib.import_module(module)\r\n global_dict[imported_module.__name__] = imported_module\r\n except ImportError:\r\n raise ImportError(f\"Could not import module {module}\")\r\n return global_dict\r\n\r\n def build(\r\n self,\r\n name: str = \"python_repl\",\r\n description: str = \"A Python shell. Use this to execute python commands. Input should be a valid python command. If you want to see the output of a value, you should print it out with `print(...)`.\",\r\n global_imports: list[str] = [\"math\"],\r\n ) -> Tool:\r\n \"\"\"\r\n Builds a Python REPL tool.\r\n\r\n Args:\r\n name (str, optional): The name of the tool. Defaults to \"python_repl\".\r\n description (str, optional): The description of the tool. Defaults to \"A Python shell. Use this to execute python commands. Input should be a valid python command. If you want to see the output of a value, you should print it out with `print(...)`. \".\r\n global_imports (list[str], optional): A list of global imports to be available in the Python REPL. Defaults to [\"math\"].\r\n\r\n Returns:\r\n Tool: The built Python REPL tool.\r\n \"\"\"\r\n _globals = self.get_globals(global_imports)\r\n python_repl = PythonREPL(_globals=_globals)\r\n \r\n class PersonalTool(Tool):\r\n def _run(\r\n self,\r\n query: str,\r\n run_manager: Optional[CallbackManagerForToolRun] = None,\r\n ) -> Any:\r\n \"\"\"Use the tool.\"\"\"\r\n print(\"-----start---\")\r\n \r\n minio_client = MinioClient()\r\n query = re.compile('plt.savefig(.*)').sub(\"\", query)\r\n \r\n # 把图片存到本地\r\n file_path = f\"/tmp/{int(time.time())}.png\"\r\n query = query.replace(\"plt.show()\", f\"plt.savefig('{file_path}')\")\r\n query = 'import matplotlib\\nmatplotlib.rc(\"font\", family=\"WenQuanYi Zen Hei\")\\n' + query\r\n print(f\"-----exec code: {query}\")\r\n \r\n result = super(PersonalTool, self)._run(query, run_manager=run_manager)\r\n print(\"-----code exec over-----\")\r\n # 上传文件到minio\r\n \r\n minio_client.upload_minio(file_path, file_path)\r\n file_url = minio_client.get_share_link(file_path)\r\n file_url = minio_client.clear_minio_share_host(file_url)\r\n print(f\"-----over---\", file_url)\r\n return file_url\r\n \r\n async def _arun(\r\n self,\r\n query: str,\r\n run_manager: Optional[AsyncCallbackManagerForToolRun] = None,\r\n ) -> Any:\r\n \"\"\"Use the tool asynchronously.\"\"\"\r\n print(\"-----astart---\")\r\n result = await super(PersonalTool, self)._arun(query, run_manager=run_manager)\r\n print(\"---aover---\")\r\n return result\r\n \r\n tool = PersonalTool(\r\n name=name,\r\n description=description,\r\n func=python_repl.run,\r\n )\r\n return tool\r\n\r\n",
"dynamic": true,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": true,
"title_case": true,
"placeholder": "",
"display_name": "Code",
"model_config": {}
},
"name": {
"info": "The name of the tool.",
"list": false,
"name": "name",
"show": true,
"type": "str",
"value": "python_repl",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"_type": "CustomComponent",
"description": {
"info": "A description of the tool.",
"list": false,
"name": "description",
"show": true,
"type": "str",
"value": "A Python shell. Use this to execute python commands. Input should be a valid python command. If you want to see the output of a value, you should print it out with `print(...)`.",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Description",
"model_config": {}
},
"global_imports": {
"info": "A list of modules to import globally, e.g. ['math', 'numpy'].",
"list": true,
"name": "global_imports",
"show": true,
"type": "str",
"value": [
"math"
],
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Global Imports",
"model_config": {}
}
},
"description": "A Python shell. Use this to execute python commands. Input should be a valid python command. If you want to see the output of a value, you should print it out with `print(...)`.",
"base_classes": [
"BaseTool",
"Tool"
],
"display_name": "Python REPL Tool",
"output_types": [
"Tool"
],
"custom_fields": {
"name": null,
"description": null,
"global_imports": null
},
"documentation": "",
"field_formatters": {}
},
"type": "Data",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 561,
"dragging": false,
"position": {
"x": 778.9175511051337,
"y": 1149.9902599062198
},
"selected": true,
"positionAbsolute": {
"x": 778.9175511051337,
"y": 1149.9902599062198
}
}
],
"viewport": {
"x": 339.1544304743195,
"y": 29.21939842035414,
"zoom": 0.45266644261865624
}
},
"order_num": 7471052,
"guide_word": null
},
{
"update_time": "2024-10-28 15:51:35",
"parameters": null,
"name": "⭐️ 指定Keyvalue信息提取",
"description": "上传文件,指定需要提取的Keyvalue,分号分隔,点击【开始】按钮",
"flow_id": "caae4fa4c0b6405ba3ebfda20895849e",
"api_parameters": null,
"flow_type": 1,
"create_time": "2024-10-28 15:51:35",
"id": 197,
"data": {
"edges": [
{
"id": "reactflow__edge-PromptTemplate-5UHOIPromptTemplate|PromptTemplate-5UHOI|StringPromptTemplate|PromptTemplate|BasePromptTemplate-LLMChain-aSC8HBasePromptTemplate|prompt|LLMChain-aSC8H",
"style": {
"stroke": "#555"
},
"source": "PromptTemplate-5UHOI",
"target": "LLMChain-aSC8H",
"animated": false,
"selected": false,
"className": "",
"sourceHandle": "PromptTemplate|PromptTemplate-5UHOI|StringPromptTemplate|PromptTemplate|BasePromptTemplate",
"targetHandle": "BasePromptTemplate|prompt|LLMChain-aSC8H"
},
{
"id": "reactflow__edge-BishengLLM-2763fBishengLLM|BishengLLM-2763f|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM-LLMChain-aSC8HBaseLanguageModel|llm|LLMChain-aSC8H",
"style": {
"stroke": "#555"
},
"source": "BishengLLM-2763f",
"target": "LLMChain-aSC8H",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "BishengLLM|BishengLLM-2763f|BaseLanguageModel|BaseChatModel|BishengLLM|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|LLMChain-aSC8H"
},
{
"id": "reactflow__edge-InputNode-3ccbfInputNode|InputNode-3ccbf|input-LLMChain-aSC8Hinput|input_node|LLMChain-aSC8H",
"style": {
"stroke": "#555"
},
"source": "InputNode-3ccbf",
"target": "LLMChain-aSC8H",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "InputNode|InputNode-3ccbf|input",
"targetHandle": "input|input_node|LLMChain-aSC8H"
},
{
"id": "reactflow__edge-InputFileNode-fc806InputFileNode|InputFileNode-fc806|fileNode-ElemUnstructuredLoaderV0-293c3fileNode|file_path|ElemUnstructuredLoaderV0-293c3",
"style": {
"stroke": "#555"
},
"source": "InputFileNode-fc806",
"target": "ElemUnstructuredLoaderV0-293c3",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "InputFileNode|InputFileNode-fc806|fileNode",
"targetHandle": "fileNode|file_path|ElemUnstructuredLoaderV0-293c3"
},
{
"id": "reactflow__edge-ElemUnstructuredLoaderV0-293c3ElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-293c3|Document-PromptTemplate-5UHOIDocument;BaseOutputParser;VariableNode|context|PromptTemplate-5UHOI",
"style": {
"stroke": "#555"
},
"source": "ElemUnstructuredLoaderV0-293c3",
"target": "PromptTemplate-5UHOI",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "ElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-293c3|Document",
"targetHandle": "Document;BaseOutputParser;VariableNode|context|PromptTemplate-5UHOI"
},
{
"id": "reactflow__edge-VariableNode-e314cVariableNode|VariableNode-e314c|VariableNode-PromptTemplate-5UHOIDocument;BaseOutputParser;VariableNode|keyvalue|PromptTemplate-5UHOI",
"style": {
"stroke": "#555"
},
"source": "VariableNode-e314c",
"target": "PromptTemplate-5UHOI",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "VariableNode|VariableNode-e314c|VariableNode",
"targetHandle": "Document;BaseOutputParser;VariableNode|keyvalue|PromptTemplate-5UHOI"
}
],
"nodes": [
{
"id": "LLMChain-aSC8H",
"data": {
"id": "LLMChain-aSC8H",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"_type": "LLMChain",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"prompt": {
"l2": false,
"info": "",
"list": false,
"name": "prompt",
"show": true,
"type": "BasePromptTemplate",
"l2_name": "prompt",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"value": false,
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"llm_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "llm_kwargs",
"show": false,
"type": "code",
"l2_name": "llm_kwargs",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "text",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": false,
"type": "BaseLLMOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"return_final_only": {
"l2": false,
"info": "",
"list": false,
"name": "return_final_only",
"show": false,
"type": "bool",
"value": true,
"l2_name": "return_final_only",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Chain to run queries against LLMs.",
"base_classes": [
"Chain",
"LLMChain",
"function"
],
"display_name": "LLMChain",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/foundational/llm_chain"
},
"type": "LLMChain",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 317,
"position": {
"x": 1313.6980454632887,
"y": 900.921715712506
},
"selected": false,
"positionAbsolute": {
"x": 1313.6980454632887,
"y": 900.921715712506
}
},
{
"id": "PromptTemplate-5UHOI",
"data": {
"id": "PromptTemplate-5UHOI",
"node": {
"beta": false,
"icon": null,
"name": "",
"error": null,
"template": {
"_type": "PromptTemplate",
"input": {
"info": "",
"list": false,
"name": "input",
"show": true,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": true,
"title_case": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "input",
"model_config": {}
},
"context": {
"info": "",
"list": false,
"name": "context",
"show": true,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": true,
"title_case": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "context",
"model_config": {}
},
"keyvalue": {
"info": "",
"list": false,
"name": "keyvalue",
"show": true,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": true,
"title_case": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "keyvalue",
"model_config": {}
},
"template": {
"l2": false,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "提取以下文本内容中的keyvalue信息,需要抽取的key包括:\n\n{keyvalue}\n\nThe output should be a Markdown code snippet formatted in the following schema, including the leading and trailing \"```json\" and \"```\":\n\n```json\n\"Key1\": Value\n\"Key2\": Value\n```\n\n文本内容\n{context}\n\n{input}",
"l2_name": "template",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": ""
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": false,
"type": "BaseOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"input_variables": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"keyvalue",
"context",
"input"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"template_format": {
"l2": false,
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "str",
"value": "f-string",
"l2_name": "template_format",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"partial_variables": {
"l2": false,
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"l2_name": "partial_variables",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"validate_template": {
"l2": false,
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": true,
"l2_name": "validate_template",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"full_path": null,
"description": "Schema to represent a prompt for an LLM.",
"base_classes": [
"StringPromptTemplate",
"PromptTemplate",
"BasePromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"": [
"keyvalue",
"context",
"input"
],
"template": [
"context",
"input"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {}
},
"type": "PromptTemplate",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 501,
"dragging": false,
"position": {
"x": 809.51004530817,
"y": 1237.7696518068285
},
"selected": false,
"positionAbsolute": {
"x": 809.51004530817,
"y": 1237.7696518068285
}
},
{
"id": "BishengLLM-2763f",
"data": {
"id": "BishengLLM-2763f",
"node": {
"beta": false,
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": false,
"type": "BaseChatModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "BishengLLM",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"top_p": {
"info": "",
"list": false,
"name": "top_p",
"show": true,
"type": "float",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Top P",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"model_id": {
"info": "",
"list": false,
"name": "model_id",
"show": true,
"type": "bisheng_model",
"value": 31,
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": true,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"model_info": {
"info": "",
"list": false,
"name": "model_info",
"show": false,
"type": "LLMModel",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Info",
"model_config": {}
},
"model_name": {
"info": "",
"list": false,
"name": "model_name",
"show": false,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"server_info": {
"info": "",
"list": false,
"name": "server_info",
"show": false,
"type": "LLMServer",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Server Info",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.3,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"llm_node_type": {
"info": "",
"list": false,
"name": "llm_node_type",
"show": false,
"type": "code",
"value": {
"qwen": "ChatOpenAI",
"vllm": "ChatOpenAI",
"spark": "ChatOpenAI",
"zhipu": "ChatOpenAI",
"ollama": "ChatOllama",
"openai": "ChatOpenAI",
"minimax": "MiniMaxChat",
"qianfan": "ChatWenxin",
"deepseek": "ChatOpenAI",
"llamacpp": "ChatOpenAI",
"anthropic": "ChatAnthropic",
"bisheng_rt": "HostChatGLM",
"xinference": "ChatOpenAI",
"azure_openai": "AzureChatOpenAI"
},
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Llm Node Type",
"model_config": {}
},
"custom_get_token_ids": {
"info": "",
"list": true,
"name": "custom_get_token_ids",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Custom Get Token Ids",
"model_config": {}
}
},
"description": "依赖bisheng后端服务的llm组件",
"base_classes": [
"BaseLanguageModel",
"BaseChatModel",
"BishengLLM",
"BaseLLM"
],
"display_name": "BishengLLM",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "BishengLLM",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 408,
"position": {
"x": -68.63553056857684,
"y": 696.600000304993
},
"positionAbsolute": {
"x": -68.63553056857684,
"y": 696.600000304993
}
},
{
"id": "ElemUnstructuredLoaderV0-293c3",
"data": {
"id": "ElemUnstructuredLoaderV0-293c3",
"node": {
"beta": false,
"template": {
"_type": "ElemUnstructuredLoaderV0",
"kwargs": {
"info": "",
"list": false,
"name": "kwargs",
"show": true,
"type": "dict",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "kwargs",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": true,
"type": "code",
"value": "{}",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"file_path": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "fileNode",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"suffixes": [
".html",
".md",
".txt",
".bmp",
".jpg",
".png",
".jpeg",
".doc",
".docx",
".pdf",
".ppt",
".pptx",
".xls",
".xlsx",
".tsv",
".csv",
".tiff"
],
"fileTypes": [
"html",
"md",
"txt",
"bmp",
"jpg",
"png",
"jpeg",
"doc",
"docx",
"pdf",
"ppt",
"pptx",
".xls",
"xlsx",
"tsv",
"csv",
"tiff"
],
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "File Path",
"model_config": {}
},
"unstructured_api_url": {
"info": "",
"list": false,
"name": "unstructured_api_url",
"show": true,
"type": "str",
"value": "https://bisheng.dataelem.com/api/v1/etl4llm/predict",
"dynamic": false,
"advanced": false,
"password": true,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "unstructured_api_url",
"model_config": {}
}
},
"description": "The appropriate parser is automatically selected based on the file format and OCR is supported",
"base_classes": [
"Document"
],
"display_name": "ElemUnstructuredLoaderV0",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "ElemUnstructuredLoaderV0",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 477,
"position": {
"x": 237.30334166517488,
"y": 1166.7647849898744
},
"positionAbsolute": {
"x": 237.30334166517488,
"y": 1166.7647849898744
}
},
{
"id": "InputNode-3ccbf",
"data": {
"id": "InputNode-3ccbf",
"node": {
"beta": false,
"template": {
"_type": "input",
"input": {
"info": "",
"list": true,
"name": "input",
"show": true,
"type": "str",
"value": [
"开始"
],
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": true,
"title_case": true,
"placeholder": "",
"display_name": "输入内容",
"model_config": {}
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"input"
],
"display_name": "InputNode",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "InputNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 255,
"position": {
"x": 809.0064819287146,
"y": 663.3484087022575
},
"positionAbsolute": {
"x": 809.0064819287146,
"y": 663.3484087022575
}
},
{
"id": "InputFileNode-fc806",
"data": {
"id": "InputFileNode-fc806",
"node": {
"beta": false,
"template": {
"_type": "InputFileNode",
"file_path": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "file",
"value": "",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".html",
".md",
".txt",
".bmp",
".jpg",
".png",
".jpeg",
".doc",
".docx",
".pdf",
".ppt",
".pptx",
"..xls",
".xlsx",
".tsv",
".csv",
".tiff"
],
"fileTypes": [
"html",
"md",
"txt",
"bmp",
"jpg",
"png",
"jpeg",
"doc",
"docx",
"pdf",
"ppt",
"pptx",
".xls",
"xlsx",
"tsv",
"csv",
"tiff"
],
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "File Path",
"model_config": {}
},
"file_type": {
"info": "Tips for which file should upload",
"list": false,
"name": "file_type",
"show": true,
"type": "str",
"value": "请上传文件",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "提示上传文件类型",
"display_name": "Name",
"model_config": {}
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"fileNode"
],
"display_name": "InputFileNode",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "InputFileNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 337,
"dragging": false,
"position": {
"x": -283.58174168605024,
"y": 1208.0544562311302
},
"selected": false,
"positionAbsolute": {
"x": -283.58174168605024,
"y": 1208.0544562311302
}
},
{
"id": "VariableNode-e314c",
"data": {
"id": "VariableNode-e314c",
"node": {
"beta": false,
"template": {
"_type": "VariableNode",
"variables": {
"info": "",
"list": true,
"name": "variables",
"show": true,
"type": "variable",
"value": [
"要素"
],
"dynamic": false,
"advanced": false,
"password": false,
"required": true,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Variables",
"model_config": {}
},
"variable_value": {
"info": "",
"list": true,
"name": "variable_value",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Variable Value",
"model_config": {}
}
},
"description": "用来设置变量",
"base_classes": [
"VariableNode"
],
"display_name": "VariableNode",
"output_types": [],
"custom_fields": {},
"documentation": "",
"field_formatters": {}
},
"type": "VariableNode",
"value": null
},
"type": "genericNode",
"width": 384,
"height": 283,
"position": {
"x": 191.2097358237865,
"y": 1669.692405161968
},
"positionAbsolute": {
"x": 191.2097358237865,
"y": 1669.692405161968
}
}
],
"viewport": {
"x": 186.80586866476656,
"y": -288.498161293062,
"zoom": 0.4797259326255045
}
},
"order_num": 7536587,
"guide_word": null
},
{
"update_time": "2026-02-05 19:54:04",
"parameters": null,
"name": "文档知识库问答",
"description": "功能简介:这是文档知识库问答流程,通过 “开始” 引导用户提问,“输入” 模块支持对话或表单录入文档内容,“文档知识库问答” 模块利用配置参数,基于文档知识解答用户问题 。\n使用说明:在 “开始” 填引导语与示例问题;“输入” 选录入方式,设置文档相关参数;“文档知识库问答” 配置模型、问题等参数,保存后点击 “运行” 测试,确认无误可 “上线” 使用 。",
"flow_id": "0da365f9709842e29a5b1476d94ba8d9",
"api_parameters": null,
"create_time": "2026-02-05 19:54:04",
"id": 358,
"data": {
"edges": [
{
"id": "xy-edge__start_fa9afright_handle-input_cc36cleft_handle",
"type": "customEdge",
"source": "start_fa9af",
"target": "input_cc36c",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__input_cc36cright_handle-rag_896caleft_handle",
"type": "customEdge",
"source": "input_cc36c",
"target": "rag_896ca",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__rag_896caright_handle-input_cc36cleft_handle",
"type": "customEdge",
"source": "rag_896ca",
"target": "input_cc36c",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
}
],
"nodes": [
{
"id": "start_fa9af",
"data": {
"v": 3,
"id": "start_fa9af",
"name": "开始",
"type": "start",
"description": "工作流运行的起始节点。",
"group_params": [
{
"name": "开场引导",
"params": [
{
"key": "guide_word",
"type": "textarea",
"label": "开场白",
"value": "",
"placeholder": "每次工作流开始执行时向用户发送此消息,支持 Markdown 格式,为空时不发送。"
},
{
"key": "guide_question",
"help": "为用户提供推荐问题,引导用户输入,超过3个时将随机选取3个。",
"type": "input_list",
"label": "引导问题",
"value": [
""
],
"placeholder": "请输入引导问题"
}
]
},
{
"name": "全局变量",
"params": [
{
"key": "user_info",
"type": "var",
"label": "true",
"value": "",
"global": "key"
},
{
"key": "current_time",
"type": "var",
"label": "当前时间",
"value": "",
"global": "key"
},
{
"key": "chat_history",
"type": "chat_history_num",
"value": 10,
"global": "key"
},
{
"key": "preset_question",
"help": "适合文档审核、报告生成等场景,利用提前预置的问题批量进行 RAG 问答。",
"type": "input_list",
"label": "预置问题列表",
"value": [
{
"key": "e6c745",
"value": ""
}
],
"global": "item:input_list",
"placeholder": "输入批量预置问题"
},
{
"key": "custom_variables",
"help": "true",
"type": "global_var",
"label": "true",
"value": [],
"global": "item:input_list"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 711
},
"position": {
"x": 469,
"y": 150
},
"selected": false
},
{
"id": "rag_896ca",
"data": {
"v": 3,
"id": "rag_896ca",
"name": "文档知识库问答",
"type": "rag",
"expand": true,
"description": "根据用户问题从知识库中检索相关内容,结合检索结果调用大模型生成最终结果,支持多个问题并行执行。",
"group_params": [
{
"name": "知识库检索设置",
"params": [
{
"key": "user_question",
"help": "当选择多个问题时,将会多次运行本节点,每次运行时从批量问题中取一项进行处理。",
"test": "var",
"type": "user_question",
"label": "用户问题",
"value": [
"input_cc36c.user_input"
],
"varZh": {
"input_cc36c.user_input": "输入/user_input",
"input_e1758.user_input": "输入/user_input",
"start_fa9af.current_time": "开始/current_time"
},
"global": "self=user_prompt",
"linkage": "output_user_input",
"required": true,
"placeholder": "请选择用户问题"
},
{
"key": "knowledge",
"type": "knowledge_select_multi",
"label": "检索范围",
"value": {
"type": "knowledge",
"value": [
{
"key": 1283,
"label": "毕昇文档知识库"
}
]
},
"required": true,
"placeholder": "请选择知识库"
},
{
"key": "metadata_filter",
"type": "metadata_filter",
"label": "true",
"value": {
"enabled": false
}
},
{
"key": "advanced_retrieval_switch",
"type": "search_switch",
"label": "true",
"value": {
"user_auth": false,
"rerank_flag": false,
"rerank_model": "",
"search_switch": true,
"vector_weight": 0.5,
"keyword_weight": 0.5,
"max_chunk_size": 15000
}
},
{
"key": "retrieved_result",
"type": "var",
"label": "检索结果",
"global": "self=user_prompt"
}
]
},
{
"name": "AI回复生成设置",
"params": [
{
"key": "system_prompt",
"type": "var_textarea",
"label": "系统提示词",
"value": "你是一个知识库问答助手: \n1.用中文回答用户问题,并且答案要严谨专业。\n2.你需要依据以下【参考文本】中的内容来回答,当【参考文本】中有明确与用户问题相关的内容时才进行回答,不可根据自己的知识来回答。\n3.由于【参考文本】可能包含多个来自不同信息源的信息,所以根据这些不同的信息源可能得出有差异甚至冲突的答案,当发现这种情况时,这些答案都列举出来;如果没有冲突或差异,则只需要给出一个最终结果。\n4.若【参考文本】中内容与用户问题不相关则回复“没有找到相关内容”。",
"required": true
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "用户问题:{{#rag_896ca.user_question#}}\n参考文本:{{#rag_896ca.retrieved_result#}}\n你的回答:",
"varZh": {
"rag_896ca.user_question": "user_question",
"rag_896ca.retrieved_result": "retrieved_result"
},
"required": true
},
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output_user_input",
"type": "var",
"label": "输出变量",
"value": [
{
"key": "output_user_input",
"label": "output_user_input"
}
],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 1275
},
"position": {
"x": 1338.9283536315477,
"y": 152.54665865258175
},
"selected": true
},
{
"id": "input_cc36c",
"data": {
"v": "3",
"id": "input_cc36c",
"tab": {
"value": "dialog_input",
"options": [
{
"key": "dialog_input",
"help": "true",
"label": "true"
},
{
"key": "form_input",
"help": "true",
"label": "true"
}
]
},
"name": "输入",
"type": "input",
"description": "接收用户在会话页面的输入,支持 2 种形式:对话框输入,表单输入。",
"group_params": [
{
"name": "接收文本",
"params": [
{
"key": "user_input",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
}
]
},
{
"name": "",
"params": [
{
"key": "user_input_file",
"tab": "dialog_input",
"value": true,
"groupTitle": true
},
{
"key": "file_parse_mode",
"tab": "dialog_input",
"type": "select_parsemode",
"value": "extract_text"
},
{
"key": "dialog_files_content",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_files_content_size",
"min": 0,
"tab": "dialog_input",
"type": "char_number",
"label": "true",
"value": 15000
},
{
"key": "dialog_file_accept",
"tab": "dialog_input",
"type": "select_fileaccept",
"label": "true",
"value": "all"
},
{
"key": "dialog_image_files",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_file_paths",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
}
],
"groupKey": "inputfile"
},
{
"name": "",
"params": [
{
"key": "recommended_questions_flag",
"tab": "dialog_input",
"help": "true",
"label": "true",
"value": false,
"hidden": "true",
"groupTitle": true
},
{
"key": "recommended_llm",
"tab": "dialog_input",
"type": "bisheng_model",
"label": "true",
"value": 261,
"required": true,
"placeholder": "true"
},
{
"key": "recommended_system_prompt",
"tab": "dialog_input",
"type": "var_textarea",
"label": "true",
"value": "# Role\n你是一个极具洞察力的\"对话延续预测专家\"。你的任务是根据当前的对话历史,预测用户接下来最有可能输入的 3 条短语或问题。\n\n# Context Awareness\n在生成预测前,请执行以下深度思考步骤:\n1. **意图分析**:用户当前是在寻求事实、表达情绪、请求建议,还是在尝试结束对话?\n2. **逻辑推演**:根据 AI 上一条回复的内容,用户最自然产生的联想或疑问是什么?\n3. **风格对齐**:观察用户的用词习惯(专业、随性、简短还是详细),预测结果需保持语气一致。\n\n# Goals\n- **多样性**:提供不同方向的后续(例如:一个深入探究的问题,一个相关的新话题,一个反馈性评价)。\n- **简洁性**:预测内容应短小精悍,通常不超过 15 个字,方便用户点击。\n- **前瞻性**:能够预判用户的\"痛点\",直接提供解决方案的入口。\n\n# Output Format\n请严格遵守 JSON 格式输出。\n返回一个包含单一键名 \"suggestions\" 的 JSON 对象。\n- 所有字符串必须使用**双引号**。\n- 不要输出 Markdown 代码块标记(如 ```json),直接输出 JSON 字符串。\n**示例:**\n{\"suggestions\": [\"你能举个例子吗?\", \"这个方案的成本是多少?\", \"听起来不错,怎么开始?\"]}",
"required": true
},
{
"key": "recommended_history_num",
"tab": "dialog_input",
"help": "true",
"step": 1,
"type": "slide",
"label": "true",
"scope": [
1,
10
],
"value": 2
}
],
"groupKey": "custom"
},
{
"name": "",
"params": [
{
"key": "form_input",
"tab": "form_input",
"type": "form",
"label": "true",
"value": [],
"global": "item:form_input"
}
]
}
]
},
"type": "flowNode",
"measured": {
"width": 334,
"height": 570
},
"position": {
"x": 935.6608232521362,
"y": 163.53933298957216
}
}
],
"viewport": {
"x": -365.03852145949816,
"y": -107.15501189516708,
"zoom": 0.6295427860409281
}
},
"order_num": 12238723,
"guide_word": null,
"flow_type": 10
},
{
"update_time": "2026-02-05 20:05:11",
"parameters": null,
"name": "优先知识库问答+搜索引擎兜底",
"description": "功能简介:这是 “优先知识库问答 + 搜索引擎兜底” 工作流,先借 “开始” 引导对话,“输入” 模块获取用户提问与文件,经 “文档知识库问答” 检索知识;若未匹配内容,“条件分支” 触发 “助手” 调用搜索引擎补充,最终 “输出” 回答,保障问答覆盖度。\n使用说明:“开始” 填引导语;“输入” 选录入方式,设文件参数。\n运行流程,“文档知识库问答” 优先检索知识;若output_user含 “没有找到相关内容”,触发 “助手” 用搜索引擎兜底。",
"flow_id": "2853ac0e3e3e483985a414911e409463",
"api_parameters": null,
"create_time": "2026-02-05 20:05:11",
"id": 360,
"data": {
"edges": [
{
"id": "xy-edge__condition_448edright_handle-output_2a3beleft_handle",
"type": "customEdge",
"source": "condition_448ed",
"target": "output_2a3be",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__rag_3e24bright_handle-condition_448edleft_handle",
"type": "customEdge",
"source": "rag_3e24b",
"target": "condition_448ed",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__condition_448ed78028559-agent_49ec7left_handle",
"type": "customEdge",
"source": "condition_448ed",
"target": "agent_49ec7",
"animated": true,
"sourceHandle": "78028559",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__start_9f092right_handle-input_c284fleft_handle",
"type": "customEdge",
"source": "start_9f092",
"target": "input_c284f",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__input_c284fright_handle-rag_3e24bleft_handle",
"type": "customEdge",
"source": "input_c284f",
"target": "rag_3e24b",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__output_2a3beright_handle-input_c284fleft_handle",
"type": "customEdge",
"source": "output_2a3be",
"target": "input_c284f",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__agent_49ec7right_handle-input_c284fleft_handle",
"type": "customEdge",
"source": "agent_49ec7",
"target": "input_c284f",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
}
],
"nodes": [
{
"id": "start_9f092",
"data": {
"v": 3,
"id": "start_9f092",
"name": "开始",
"type": "start",
"description": "工作流运行的起始节点。",
"group_params": [
{
"name": "开场引导",
"params": [
{
"key": "guide_word",
"type": "textarea",
"label": "开场白",
"value": "你好,我是问答助手",
"placeholder": "每次工作流开始执行时向用户发送此消息,支持 Markdown 格式,为空时不发送。"
},
{
"key": "guide_question",
"help": "为用户提供推荐问题,引导用户输入,超过3个时将随机选取3个。",
"type": "input_list",
"label": "引导问题",
"value": [
""
],
"placeholder": "请输入引导问题"
}
]
},
{
"name": "全局变量",
"params": [
{
"key": "user_info",
"type": "var",
"label": "true",
"value": "",
"global": "key"
},
{
"key": "current_time",
"type": "var",
"label": "当前时间",
"value": "",
"global": "key"
},
{
"key": "chat_history",
"type": "chat_history_num",
"value": 10,
"global": "key"
},
{
"key": "preset_question",
"help": "适合文档审核、报告生成等场景,利用提前预置的问题批量进行 RAG 问答。",
"type": "input_list",
"label": "预置问题列表",
"value": [
{
"key": "a3a02e",
"value": ""
}
],
"global": "item:input_list",
"placeholder": "输入批量预置问题"
},
{
"key": "custom_variables",
"help": "true",
"type": "global_var",
"label": "true",
"value": [],
"global": "item:input_list"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 711
},
"position": {
"x": 237.20000000000005,
"y": -161
},
"selected": false
},
{
"id": "condition_448ed",
"data": {
"id": "condition_448ed",
"name": "条件分支",
"type": "condition",
"description": "根据条件表达式执行不同的分支。",
"group_params": [
{
"params": [
{
"key": "condition",
"type": "condition",
"label": "",
"value": [
{
"id": "78028559",
"operator": "and",
"conditions": [
{
"id": "59451337",
"left_var": "rag_3e24b.output_user_input",
"left_label": "output_user_input",
"right_label": "",
"right_value": "没有找到相关内容",
"right_value_type": "input",
"comparison_operation": "contains"
}
]
}
]
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 562,
"height": 347
},
"position": {
"x": 1614.1888377214964,
"y": -254.09438817125263
},
"selected": false
},
{
"id": "output_2a3be",
"data": {
"v": 2,
"id": "output_2a3be",
"name": "输出",
"type": "output",
"description": "可向用户发送消息,并且支持进行更丰富的交互,例如请求用户批准进行某项敏感操作、允许用户在模型输出内容的基础上直接修改并提交。",
"group_params": [
{
"params": [
{
"key": "message",
"type": "var_textarea_file",
"label": "消息内容",
"value": {
"msg": "{{#rag_3e24b.output_user_input#}}",
"files": []
},
"varZh": {
"agent_140fe.output": "助手/output",
"rag_3e24b.output_user_input": "文档知识库问答/output_user_input"
},
"global": "key",
"required": true,
"placeholder": "输入需要发送给用户的消息,例如“接下来我将执行 XX 操作,请您确认”,“以下是我的初版草稿,您可以在其基础上进行修改”"
},
{
"key": "output_result",
"type": "output_form",
"label": "用户输入内容",
"value": {
"type": "",
"value": ""
},
"global": "value.type=input",
"options": [],
"required": false
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 463
},
"position": {
"x": 2260.2238409262695,
"y": 26.60625066348959
},
"selected": false
},
{
"id": "rag_3e24b",
"data": {
"v": 3,
"id": "rag_3e24b",
"name": "文档知识库问答",
"type": "rag",
"expand": false,
"description": "根据用户问题从知识库中检索相关内容,结合检索结果调用大模型生成最终结果,支持多个问题并行执行。",
"group_params": [
{
"name": "知识库检索设置",
"params": [
{
"key": "user_question",
"help": "当选择多个问题时,将会多次运行本节点,每次运行时从批量问题中取一项进行处理。",
"test": "var",
"type": "user_question",
"label": "用户问题",
"value": [
"input_c284f.user_input"
],
"varZh": {
"input_1b610.user_input": "输入/user_input",
"input_2d0d4.user_input": "输入/user_input",
"input_c284f.user_input": "输入/user_input"
},
"global": "self=user_prompt",
"linkage": "output_user_input",
"required": true,
"placeholder": "请选择用户问题"
},
{
"key": "knowledge",
"type": "knowledge_select_multi",
"label": "检索范围",
"value": {
"type": "knowledge",
"value": [
{
"key": 1301,
"label": "毕昇产品文档"
}
]
},
"required": true,
"placeholder": "请选择知识库"
},
{
"key": "metadata_filter",
"type": "metadata_filter",
"label": "true",
"value": {
"enabled": false
}
},
{
"key": "advanced_retrieval_switch",
"type": "search_switch",
"label": "true",
"value": {
"user_auth": false,
"rerank_flag": false,
"rerank_model": "",
"search_switch": true,
"vector_weight": 0.5,
"keyword_weight": 0.5,
"max_chunk_size": 15000
}
},
{
"key": "retrieved_result",
"type": "var",
"label": "检索结果",
"global": "self=user_prompt"
}
]
},
{
"name": "AI回复生成设置",
"params": [
{
"key": "system_prompt",
"type": "var_textarea",
"label": "系统提示词",
"value": "你是一个知识库问答助手: \n1.用中文回答用户问题,并且答案要严谨专业。\n2.你需要依据以上【参考文本】中的内容来回答,当【参考文本】中有明确与用户问题相关的内容时才进行回答,不可根据自己的知识来回答。\n3.由于【参考文本】可能包含多个来自不同信息源的信息,所以根据这些不同的信息源可能得出有差异甚至冲突的答案,当发现这种情况时,这些答案都列举出来;如果没有冲突或差异,则只需要给出一个最终结果。\n4.若【参考文本】中内容与用户问题不相关则回复“没有找到相关内容”。",
"required": true
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "用户问题:{{#rag_3e24b.user_question#}}\n参考文本:{{#rag_3e24b.retrieved_result#}}\n你的回答:",
"varZh": {
"rag_3e24b.user_question": "user_question",
"rag_3e24b.retrieved_result": "retrieved_result"
},
"required": true
},
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": false
},
{
"key": "output_user_input",
"type": "var",
"label": "输出变量",
"value": [
{
"key": "output_user_input",
"label": "output_user_input"
}
],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 150
},
"position": {
"x": 1145.3311585293775,
"y": -159.21938594285209
},
"selected": false
},
{
"id": "agent_49ec7",
"data": {
"v": 2,
"id": "agent_49ec7",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "助手",
"type": "agent",
"expand": false,
"description": "AI 自主进行任务规划,选择合适的知识库或工具进行调用。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "agent_model",
"label": "模型",
"value": 274,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "# role \n\n你是一个善于根据互联网搜索引擎获取信息并回答用户问题的 AI 助理# skill\n\n根据用户问题,调用 Bing Web 工具检索需要的信息,并结合检索结果回答用户问题。",
"required": true,
"placeholder": "助手画像"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "{{#input_c284f.user_input#}}",
"varZh": {
"input_c284f.user_input": "输入/user_input"
},
"required": true,
"placeholder": "用户消息内容"
},
{
"key": "chat_history_flag",
"help": "带入模型上下文的历史消息条数,为 0 时代表不包含上下文信息。",
"step": 1,
"type": "slide_switch",
"label": "历史聊天记录",
"scope": [
0,
100
],
"value": {
"flag": true,
"value": 50
}
},
{
"key": "image_prompt",
"help": "当使用多模态大模型时,可通过此功能传入图片,结合图像内容进行问答",
"type": "image_prompt",
"label": "视觉",
"value": ""
}
]
},
{
"name": "知识库",
"params": [
{
"key": "knowledge_id",
"type": "knowledge_select_multi",
"label": "检索知识库范围",
"value": {
"type": "knowledge",
"value": []
},
"placeholder": "请选择知识库"
}
]
},
{
"name": "数据库",
"params": [
{
"key": "sql_agent",
"type": "sql_config",
"value": {
"open": false,
"db_name": "",
"db_address": "",
"db_password": "",
"db_username": "",
"database_engine": "mysql"
}
}
]
},
{
"name": "工具",
"params": [
{
"key": "tool_list",
"type": "add_tool",
"label": "+ 添加工具",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 150
},
"position": {
"x": 2265.0840022667044,
"y": -456.86140838548886
},
"selected": true
},
{
"id": "input_c284f",
"data": {
"v": "3",
"id": "input_c284f",
"tab": {
"value": "dialog_input",
"options": [
{
"key": "dialog_input",
"help": "true",
"label": "true"
},
{
"key": "form_input",
"help": "true",
"label": "true"
}
]
},
"name": "输入",
"type": "input",
"description": "接收用户在会话页面的输入,支持 2 种形式:对话框输入,表单输入。",
"group_params": [
{
"name": "接收文本",
"params": [
{
"key": "user_input",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
}
]
},
{
"name": "",
"params": [
{
"key": "user_input_file",
"tab": "dialog_input",
"value": true,
"groupTitle": true
},
{
"key": "file_parse_mode",
"tab": "dialog_input",
"type": "select_parsemode",
"value": "extract_text"
},
{
"key": "dialog_files_content",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_files_content_size",
"min": 0,
"tab": "dialog_input",
"type": "char_number",
"label": "true",
"value": 15000
},
{
"key": "dialog_file_accept",
"tab": "dialog_input",
"type": "select_fileaccept",
"label": "true",
"value": "all"
},
{
"key": "dialog_image_files",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_file_paths",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
}
],
"groupKey": "inputfile"
},
{
"name": "",
"params": [
{
"key": "recommended_questions_flag",
"tab": "dialog_input",
"help": "true",
"label": "true",
"value": false,
"hidden": "true",
"groupTitle": true
},
{
"key": "recommended_llm",
"tab": "dialog_input",
"type": "bisheng_model",
"label": "true",
"value": 261,
"required": true,
"placeholder": "true"
},
{
"key": "recommended_system_prompt",
"tab": "dialog_input",
"type": "var_textarea",
"label": "true",
"value": "# Role\n你是一个极具洞察力的\"对话延续预测专家\"。你的任务是根据当前的对话历史,预测用户接下来最有可能输入的 3 条短语或问题。\n\n# Context Awareness\n在生成预测前,请执行以下深度思考步骤:\n1. **意图分析**:用户当前是在寻求事实、表达情绪、请求建议,还是在尝试结束对话?\n2. **逻辑推演**:根据 AI 上一条回复的内容,用户最自然产生的联想或疑问是什么?\n3. **风格对齐**:观察用户的用词习惯(专业、随性、简短还是详细),预测结果需保持语气一致。\n\n# Goals\n- **多样性**:提供不同方向的后续(例如:一个深入探究的问题,一个相关的新话题,一个反馈性评价)。\n- **简洁性**:预测内容应短小精悍,通常不超过 15 个字,方便用户点击。\n- **前瞻性**:能够预判用户的\"痛点\",直接提供解决方案的入口。\n\n# Output Format\n请严格遵守 JSON 格式输出。\n返回一个包含单一键名 \"suggestions\" 的 JSON 对象。\n- 所有字符串必须使用**双引号**。\n- 不要输出 Markdown 代码块标记(如 ```json),直接输出 JSON 字符串。\n**示例:**\n{\"suggestions\": [\"你能举个例子吗?\", \"这个方案的成本是多少?\", \"听起来不错,怎么开始?\"]}",
"required": true
},
{
"key": "recommended_history_num",
"tab": "dialog_input",
"help": "true",
"step": 1,
"type": "slide",
"label": "true",
"scope": [
1,
10
],
"value": 2
}
],
"groupKey": "custom"
},
{
"name": "",
"params": [
{
"key": "form_input",
"tab": "form_input",
"type": "form",
"label": "true",
"value": [],
"global": "item:form_input"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 570
},
"position": {
"x": 735.2652144940947,
"y": -165.84643370976673
},
"selected": false
}
],
"viewport": {
"x": -69.1807775874338,
"y": 311.2637313881481,
"zoom": 0.5741179493568034
}
},
"order_num": 12369793,
"guide_word": null,
"flow_type": 10
},
{
"update_time": "2026-02-05 20:11:36",
"parameters": null,
"name": "五步翻译法",
"description": "功能简介\n这是翻译工作流,通过 “输入” 环节录入文本,经 “英文要点直译”“中文意图反译” 等多轮模型处理,利用大模型分步骤优化翻译内容,最终输出高质量译文,适用于需精准翻译的场景。\n使用说明\n在 “输入” 节点填入待翻译文本,依次运行 “英文要点直译”“中文意图反译” 等后续节点,各环节依托大模型自动处理,流程结束后在 “结束” 节点查看最终翻译结果,可按需调整模型参数优化效果。",
"flow_id": "a2fb8daa1af942d58c306c164d2e7c9e",
"api_parameters": null,
"create_time": "2026-02-05 20:11:36",
"id": 361,
"data": {
"edges": [
{
"id": "xy-edge__llm_ebfb8right_handle-llm_3fa0dleft_handle",
"type": "customEdge",
"source": "llm_ebfb8",
"target": "llm_3fa0d",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_3fa0dright_handle-llm_834d3left_handle",
"type": "customEdge",
"source": "llm_3fa0d",
"target": "llm_834d3",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_834d3right_handle-llm_9ae96left_handle",
"type": "customEdge",
"source": "llm_834d3",
"target": "llm_9ae96",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_9ae96right_handle-llm_414d9left_handle",
"type": "customEdge",
"source": "llm_9ae96",
"target": "llm_414d9",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_414d9right_handle-end_6ee61left_handle",
"type": "customEdge",
"source": "llm_414d9",
"target": "end_6ee61",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__start_faec1right_handle-input_c5b73left_handle",
"type": "customEdge",
"source": "start_faec1",
"target": "input_c5b73",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__input_c5b73right_handle-llm_ebfb8left_handle",
"type": "customEdge",
"source": "input_c5b73",
"target": "llm_ebfb8",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
}
],
"nodes": [
{
"id": "start_faec1",
"data": {
"v": 3,
"id": "start_faec1",
"name": "开始",
"type": "start",
"expand": true,
"description": "工作流运行的起始节点。",
"group_params": [
{
"name": "开场引导",
"params": [
{
"key": "guide_word",
"type": "textarea",
"label": "开场白",
"value": "五步翻译法,适合论文等对于翻译质量有较高要求的场景,包含 5 个环节: 1)直译初稿 2)意译初稿 3)回译 4)编辑校对 5)意译终稿 。\n\n请发送您要翻译的英文材料:",
"placeholder": "每次工作流开始执行时向用户发送此消息,支持 Markdown 格式,为空时不发送。"
},
{
"key": "guide_question",
"help": "为用户提供推荐问题,引导用户输入,超过3个时将随机选取3个。",
"type": "input_list",
"label": "引导问题",
"value": [
""
],
"placeholder": "请输入引导问题"
}
]
},
{
"name": "全局变量",
"params": [
{
"key": "user_info",
"type": "var",
"label": "true",
"value": "",
"global": "key"
},
{
"key": "current_time",
"type": "var",
"label": "当前时间",
"value": "",
"global": "key"
},
{
"key": "chat_history",
"type": "chat_history_num",
"value": 10,
"global": "key"
},
{
"key": "preset_question",
"help": "适合文档审核、报告生成等场景,利用提前预置的问题批量进行 RAG 问答。",
"type": "input_list",
"label": "预置问题列表",
"value": [
{
"key": "63e87c",
"value": ""
}
],
"global": "item:input_list",
"placeholder": "输入批量预置问题"
},
{
"key": "custom_variables",
"help": "true",
"type": "global_var",
"label": "true",
"value": [],
"global": "item:input_list"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 711
},
"position": {
"x": 138.9223951864526,
"y": 81.99792129963708
},
"selected": false
},
{
"id": "end_6ee61",
"data": {
"id": "end_6ee61",
"name": "结束",
"type": "end",
"description": "工作流运行到此结束。",
"group_params": []
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 2946.3789207819623,
"y": 403.8501940420881
},
"selected": false
},
{
"id": "llm_ebfb8",
"data": {
"v": 2,
"id": "llm_ebfb8",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "英文教授直译",
"type": "llm",
"expand": false,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "# role \n\n你是一位资深英语教授,能精确的理解英文并用中文表达,同时也是一名熟悉神经科学、machine learning、deep learning、NLP和CV领域的教授,掌握这些领域的专业术语。 \n\n# task \n\n翻译解释一篇专业的技术文章成简体中文给本科生阅读,务必遵守原意,翻译时保持原始英文的段落结构,不要合并分段。\n\n# Rules\n\n- 翻译时要准确传达学术论文的事实和背景,同时风格上保持为通俗易懂并且严谨的科普文风格。\n\n- 保留特定的英文术语、数字或名字,并在其前后加上空格,例如:\"中 UN 文\",\"不超过 10 秒\"。\n\n- 即使意译也要保留术语,例如 token、transformer、LLM、zero-shot 等。保留公司缩写,例如 Microsoft, Amazon 等。\n\n- 保留引用的论文,例如 [20] 这样的引用;同时也要保留针对图例的引用,例如保留 Figure 1 并翻译为图 1。\n\n- 输入格式为 Markdown 格式,输出格式也必须保留原始 Markdown 格式。- 翻译时全角括号换成半角括号,并在左括号前面加半角空格,右括号后面加半角空格。\n\n"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "{{#input_c5b73.user_input#}}",
"varZh": {
"input_c5b73.user_input": "输入/user_input"
},
"required": true
},
{
"key": "image_prompt",
"help": "当使用多模态大模型时,可通过此功能传入图片,结合图像内容进行问答",
"type": "image_prompt",
"label": "视觉",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 1107.194280093113,
"y": 84.7835136533582
},
"selected": false
},
{
"id": "llm_3fa0d",
"data": {
"v": 2,
"id": "llm_3fa0d",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "中文教授意译初稿",
"type": "llm",
"expand": false,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "# role\n\n你是一位资深中文教授,擅长按照中文使用习惯,撰写通俗易懂的科普文。 \n\n# task \n\n对英语教授翻译的内容重新意译,遵守原意的前提下让内容更通俗易懂,符合中文表达习惯,但不要增加和删减内容,保持原始分段。\n\n"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "# 英文原文\n{{#input_c5b73.user_input#}}\n\n\n# 英文教授直译文 \n\n{{#llm_ebfb8.output#}}\n",
"varZh": {
"llm_ebfb8.output": "英文教授直译/output",
"input_c5b73.user_input": "输入/user_input"
},
"required": true
},
{
"key": "image_prompt",
"help": "当使用多模态大模型时,可通过此功能传入图片,结合图像内容进行问答",
"type": "image_prompt",
"label": "视觉",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 1574.4947033403798,
"y": 85.49355402754313
},
"selected": false
},
{
"id": "llm_834d3",
"data": {
"v": 2,
"id": "llm_834d3",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "英文教授回译",
"type": "llm",
"expand": false,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "# role \n\n你是一位资深英语教授,能精确的理解英文并用中文表达,同时也是一名熟悉神经科学、machine learning、deep learning、NLP和CV领域的教授,掌握这些领域的专业术语。 \n\n# task \n\n将中文教授的中文意译稿反向翻译成英文回译稿。"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "# 中文教授中文意译稿 \n{{#llm_3fa0d.output#}}\n",
"varZh": {
"llm_3fa0d.output": "中文教授意译初稿/output"
},
"required": true
},
{
"key": "image_prompt",
"help": "当使用多模态大模型时,可通过此功能传入图片,结合图像内容进行问答",
"type": "image_prompt",
"label": "视觉",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 2030.102513363393,
"y": 89.35591616008031
},
"selected": false
},
{
"id": "llm_9ae96",
"data": {
"v": 2,
"id": "llm_9ae96",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "审查编辑校对",
"type": "llm",
"expand": false,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "# role \n\n你是一位资深出版编辑,精通中文和英文,擅长校对审查。\n\n你现在手上有3份文稿:\n\n- 英文原稿。 \n\n- 中文译稿。 \n\n- 英文回译稿(原稿翻译成中文后,重新回译成英文的回译稿) \n\n# task \n\n1. 通过对比【英文原稿】和【英文回译稿】的出入,便于找到中文译稿中不恰当的地方(重复以下列表,直到列出所有有出入并且需要修改译文的内容): \n\n- 回译稿对比原文缺失或表达歧义部分[1...n]: \n\n- 原文:“{English}” \n\n- 回译文:“{English}”\n\n- 中文译文:“{译文}” \n\n- 建议:{译文修改建议} \n\n2. 指出中文翻译表达不符合中文习惯的部分(重复以下列表,直到列出所有需要修改的内容): \n\n- 修改{1...n}: \n\n- 原文:“{English}” \n\n- 译文:“{译文}” \n\n- 建议:{译文修改建议}\n\n\n\n"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "{{#input_c5b73.user_input#}}# 英文原稿\n``````\n\n# 英文回译稿 \n```{{#llm_834d3.output#}}```\n# 中文译稿```{{#llm_3fa0d.output#}}```",
"varZh": {
"llm_3fa0d.output": "中文教授意译初稿/output",
"llm_834d3.output": "英文教授回译/output",
"input_c5b73.user_input": "输入/user_input"
},
"required": true
},
{
"key": "image_prompt",
"help": "当使用多模态大模型时,可通过此功能传入图片,结合图像内容进行问答",
"type": "image_prompt",
"label": "视觉",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 2464.072445850047,
"y": 90.30383209830156
},
"selected": true
},
{
"id": "llm_414d9",
"data": {
"v": 2,
"id": "llm_414d9",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "中文教授意译终稿",
"type": "llm",
"expand": false,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "# role\n你是一位资深中文教授,擅长按照中文使用习惯,撰写通俗易懂的科普文。\n\n\n# task\n对照英文原文材料,在意译初稿的基础上,针对出版编辑的修改建议,翻译出意译终稿。\n\n\n\n\n\n\n"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "# 英文原文\n```{{#input_c5b73.user_input#}}```\n# 意译初稿\n```{{#llm_3fa0d.output#}}```\n# 出版编辑修改意见 \n```{{#llm_9ae96.output#}}```",
"varZh": {
"llm_3fa0d.output": "中文教授意译初稿/output",
"llm_9ae96.output": "审查编辑校对/output",
"input_c5b73.user_input": "输入/user_input"
},
"required": true
},
{
"key": "image_prompt",
"help": "当使用多模态大模型时,可通过此功能传入图片,结合图像内容进行问答",
"type": "image_prompt",
"label": "视觉",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 2916.394693106114,
"y": 97.6941646914677
},
"selected": false
},
{
"id": "input_c5b73",
"data": {
"v": "3",
"id": "input_c5b73",
"tab": {
"value": "dialog_input",
"options": [
{
"key": "dialog_input",
"help": "true",
"label": "true"
},
{
"key": "form_input",
"help": "true",
"label": "true"
}
]
},
"name": "输入",
"type": "input",
"expand": false,
"description": "接收用户在会话页面的输入,支持 2 种形式:对话框输入,表单输入。",
"group_params": [
{
"name": "接收文本",
"params": [
{
"key": "user_input",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
}
]
},
{
"name": "",
"params": [
{
"key": "user_input_file",
"tab": "dialog_input",
"value": true,
"groupTitle": true
},
{
"key": "file_parse_mode",
"tab": "dialog_input",
"type": "select_parsemode",
"value": "extract_text"
},
{
"key": "dialog_files_content",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_files_content_size",
"min": 0,
"tab": "dialog_input",
"type": "char_number",
"label": "true",
"value": 15000
},
{
"key": "dialog_file_accept",
"tab": "dialog_input",
"type": "select_fileaccept",
"label": "true",
"value": "all"
},
{
"key": "dialog_image_files",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_file_paths",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
}
],
"groupKey": "inputfile"
},
{
"name": "",
"params": [
{
"key": "recommended_questions_flag",
"tab": "dialog_input",
"help": "true",
"label": "true",
"value": false,
"hidden": "true",
"groupTitle": true
},
{
"key": "recommended_llm",
"tab": "dialog_input",
"type": "bisheng_model",
"label": "true",
"value": 261,
"required": true,
"placeholder": "true"
},
{
"key": "recommended_system_prompt",
"tab": "dialog_input",
"type": "var_textarea",
"label": "true",
"value": "# Role\n你是一个极具洞察力的\"对话延续预测专家\"。你的任务是根据当前的对话历史,预测用户接下来最有可能输入的 3 条短语或问题。\n\n# Context Awareness\n在生成预测前,请执行以下深度思考步骤:\n1. **意图分析**:用户当前是在寻求事实、表达情绪、请求建议,还是在尝试结束对话?\n2. **逻辑推演**:根据 AI 上一条回复的内容,用户最自然产生的联想或疑问是什么?\n3. **风格对齐**:观察用户的用词习惯(专业、随性、简短还是详细),预测结果需保持语气一致。\n\n# Goals\n- **多样性**:提供不同方向的后续(例如:一个深入探究的问题,一个相关的新话题,一个反馈性评价)。\n- **简洁性**:预测内容应短小精悍,通常不超过 15 个字,方便用户点击。\n- **前瞻性**:能够预判用户的\"痛点\",直接提供解决方案的入口。\n\n# Output Format\n请严格遵守 JSON 格式输出。\n返回一个包含单一键名 \"suggestions\" 的 JSON 对象。\n- 所有字符串必须使用**双引号**。\n- 不要输出 Markdown 代码块标记(如 ```json),直接输出 JSON 字符串。\n**示例:**\n{\"suggestions\": [\"你能举个例子吗?\", \"这个方案的成本是多少?\", \"听起来不错,怎么开始?\"]}",
"required": true
},
{
"key": "recommended_history_num",
"tab": "dialog_input",
"help": "true",
"step": 1,
"type": "slide",
"label": "true",
"scope": [
1,
10
],
"value": 2
}
],
"groupKey": "custom"
},
{
"name": "",
"params": [
{
"key": "form_input",
"tab": "form_input",
"type": "form",
"label": "true",
"value": [],
"global": "item:form_input"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 150
},
"position": {
"x": 634.423952924182,
"y": 85.4401521708546
},
"selected": false
}
],
"viewport": {
"x": -48.47172678094421,
"y": 123.7367237461774,
"zoom": 0.4280931573424512
}
},
"order_num": 12435328,
"guide_word": null,
"flow_type": 10
},
{
"update_time": "2026-02-05 20:27:30",
"parameters": null,
"name": "基于产品知识库的 AI 营销文案生成 + 人类意见迭代",
"description": "功能简介\n基于产品知识库,通过输入用户需求,经文本识别、拆分等处理,调用大模型生成营销文案,辅助高效产出贴合产品知识的推广内容 。\n使用说明\n在 “输入” 节点填用户需求,依次运行 “文本识别”“拆分” 等节点,配置各环节参数(如文本长度、模型选择),最后经大模型节点生成营销文案,在 “输出” 查看结果 。",
"flow_id": "60338b009bb44d6d80086c2edeffcad9",
"api_parameters": null,
"create_time": "2026-02-05 20:27:30",
"id": 362,
"data": {
"edges": [
{
"id": "xy-edge__output_204469212bf1c-end_ed5e5left_handle",
"type": "customEdge",
"source": "output_20446",
"target": "end_ed5e5",
"animated": true,
"sourceHandle": "9212bf1c",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__output_2044664f4c390-output_84247left_handle",
"type": "customEdge",
"source": "output_20446",
"target": "output_84247",
"animated": true,
"sourceHandle": "64f4c390",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__rag_20bedright_handle-output_7d6b6left_handle",
"type": "customEdge",
"source": "rag_20bed",
"target": "output_7d6b6",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__output_7d6b6right_handle-rag_2b974left_handle",
"type": "customEdge",
"source": "output_7d6b6",
"target": "rag_2b974",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__rag_2b974right_handle-output_20446left_handle",
"type": "customEdge",
"source": "rag_2b974",
"target": "output_20446",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__output_84247right_handle-llm_c66feleft_handle",
"type": "customEdge",
"source": "output_84247",
"target": "llm_c66fe",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_c66feright_handle-output_20446left_handle",
"type": "customEdge",
"source": "llm_c66fe",
"target": "output_20446",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__start_d602dright_handle-input_60a99left_handle",
"type": "customEdge",
"source": "start_d602d",
"target": "input_60a99",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__input_60a99right_handle-rag_20bedleft_handle",
"type": "customEdge",
"source": "input_60a99",
"target": "rag_20bed",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
}
],
"nodes": [
{
"id": "start_d602d",
"data": {
"v": 3,
"id": "start_d602d",
"name": "开始",
"type": "start",
"description": "工作流运行的起始节点。",
"group_params": [
{
"name": "开场引导",
"params": [
{
"key": "guide_word",
"type": "textarea",
"label": "开场白",
"value": "您好,我是 AI 营销文案助手,请输入您想要生成文案的主题。",
"placeholder": "每次工作流开始执行时向用户发送此消息,支持 Markdown 格式,为空时不发送。"
},
{
"key": "guide_question",
"help": "为用户提供推荐问题,引导用户输入,超过3个时将随机选取3个。",
"type": "input_list",
"label": "引导问题",
"value": [
""
],
"placeholder": "请输入引导问题"
}
]
},
{
"name": "全局变量",
"params": [
{
"key": "user_info",
"type": "var",
"label": "true",
"value": "",
"global": "key"
},
{
"key": "current_time",
"type": "var",
"label": "当前时间",
"value": "",
"global": "key"
},
{
"key": "chat_history",
"type": "chat_history_num",
"value": 10,
"global": "key"
},
{
"key": "preset_question",
"help": "适合文档审核、报告生成等场景,利用提前预置的问题批量进行 RAG 问答。",
"type": "input_list",
"label": "预置问题列表",
"value": [
{
"key": "452b35",
"value": ""
}
],
"global": "item:input_list",
"placeholder": "输入批量预置问题"
},
{
"key": "custom_variables",
"help": "true",
"type": "global_var",
"label": "true",
"value": [],
"global": "item:input_list"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 711
},
"position": {
"x": -42.66122923778269,
"y": 241.06330242522972
},
"selected": false
},
{
"id": "output_20446",
"data": {
"v": 2,
"id": "output_20446",
"name": "输出",
"type": "output",
"description": "可向用户发送消息,并且支持进行更丰富的交互,例如请求用户批准进行某项敏感操作、允许用户在模型输出内容的基础上直接修改并提交。",
"group_params": [
{
"params": [
{
"key": "message",
"type": "var_textarea_file",
"label": "消息内容",
"value": {
"msg": "是否需要对以上营销文案进一步修改润色?",
"files": []
},
"global": "key",
"required": true,
"placeholder": "输入需要发送给用户的消息,例如“接下来我将执行 XX 操作,请您确认”,“以下是我的初版草稿,您可以在其基础上进行修改”"
},
{
"key": "output_result",
"type": "output_form",
"label": "用户输入内容",
"value": {
"type": "choose",
"value": ""
},
"global": "value.type=input",
"options": [
{
"id": "64f4c390",
"label": "是",
"value": ""
},
{
"id": "9212bf1c",
"label": "否",
"value": ""
}
],
"required": false
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 622
},
"position": {
"x": 2311.53466926792,
"y": 197.65713275159808
},
"selected": false
},
{
"id": "output_7d6b6",
"data": {
"v": 2,
"id": "output_7d6b6",
"name": "输出2",
"type": "output",
"description": "可向用户发送消息,并且支持进行更丰富的交互,例如请求用户批准进行某项敏感操作、允许用户在模型输出内容的基础上直接修改并提交。",
"group_params": [
{
"params": [
{
"key": "message",
"type": "var_textarea_file",
"label": "消息内容",
"value": {
"msg": "根据产品知识库的相关信息,我总结产品功能亮点如下,你可以直接在其基础上进行修改,接下来我会根据这些亮点生成营销文案。",
"files": []
},
"global": "key",
"required": true,
"placeholder": "输入需要发送给用户的消息,例如“接下来我将执行 XX 操作,请您确认”,“以下是我的初版草稿,您可以在其基础上进行修改”"
},
{
"key": "output_result",
"type": "output_form",
"label": "用户输入内容",
"value": {
"type": "input",
"value": "{{#rag_20bed.output_user_input#}}"
},
"varZh": {
"llm_07892.output": "大模型2/output",
"rag_20bed.output_user_input": "文档知识库问答/output_user_input"
},
"global": "value.type=input",
"options": [],
"required": false
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 615
},
"position": {
"x": 1268.3128337196854,
"y": 235.8165936047889
},
"selected": false
},
{
"id": "end_ed5e5",
"data": {
"id": "end_ed5e5",
"name": "结束",
"type": "end",
"description": "工作流运行到此结束。",
"group_params": []
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 2912.857796074366,
"y": 1292.741328658892
},
"selected": false
},
{
"id": "output_84247",
"data": {
"v": 2,
"id": "output_84247",
"name": "输出3",
"type": "output",
"description": "可向用户发送消息,并且支持进行更丰富的交互,例如请求用户批准进行某项敏感操作、允许用户在模型输出内容的基础上直接修改并提交。",
"group_params": [
{
"params": [
{
"key": "message",
"type": "var_textarea_file",
"label": "消息内容",
"value": {
"msg": "请输入您的润色建议:",
"files": []
},
"global": "key",
"required": true,
"placeholder": "输入需要发送给用户的消息,例如“接下来我将执行 XX 操作,请您确认”,“以下是我的初版草稿,您可以在其基础上进行修改”"
},
{
"key": "output_result",
"type": "output_form",
"label": "用户输入内容",
"value": {
"type": "input",
"value": ""
},
"global": "value.type=input",
"options": [],
"required": false
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 615
},
"position": {
"x": 2792.23765505673,
"y": 179.75492008835002
},
"selected": false
},
{
"id": "rag_20bed",
"data": {
"v": 3,
"id": "rag_20bed",
"name": "文档知识库问答",
"type": "rag",
"expand": true,
"description": "根据用户问题从知识库中检索相关内容,结合检索结果调用大模型生成最终结果,支持多个问题并行执行。",
"group_params": [
{
"name": "知识库检索设置",
"params": [
{
"key": "user_question",
"help": "当选择多个问题时,将会多次运行本节点,每次运行时从批量问题中取一项进行处理。",
"test": "var",
"type": "user_question",
"label": "用户问题",
"value": [
"input_60a99.user_input"
],
"varZh": {
"input_1936c.user_input": "输入/user_input",
"input_60a99.user_input": "输入/user_input"
},
"global": "self=user_prompt",
"linkage": "output_user_input",
"required": true,
"placeholder": "请选择用户问题"
},
{
"key": "knowledge",
"type": "knowledge_select_multi",
"label": "检索范围",
"value": {
"type": "knowledge",
"value": [
{
"key": 1283,
"label": "毕昇文档知识库"
}
]
},
"required": true,
"placeholder": "请选择知识库"
},
{
"key": "metadata_filter",
"type": "metadata_filter",
"label": "true",
"value": {
"enabled": false
}
},
{
"key": "advanced_retrieval_switch",
"type": "search_switch",
"label": "true",
"value": {
"user_auth": false,
"rerank_flag": false,
"rerank_model": "",
"search_switch": true,
"vector_weight": 0.5,
"keyword_weight": 0.5,
"max_chunk_size": 15000
}
},
{
"key": "retrieved_result",
"type": "var",
"label": "检索结果",
"global": "self=user_prompt"
}
]
},
{
"name": "AI回复生成设置",
"params": [
{
"key": "system_prompt",
"type": "var_textarea",
"label": "系统提示词",
"value": "你是一个营销助手,专注于根据用户指令结合相关参考资料,提取关键信息和数据,帮助用户找到相关产品的功能和亮点,以便后续生成具有吸引力的营销文案。 ",
"required": true
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "# 用户需求\n{{#input_60a99.user_input#}}\n# 参考资料:\n{{#rag_20bed.retrieved_result#}}\n----\n\n产品功能亮点:",
"varZh": {
"input_60a99.user_input": "输入/user_input",
"rag_20bed.user_question": "user_question",
"rag_20bed.retrieved_result": "retrieved_result"
},
"required": true
},
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output_user_input",
"type": "var",
"label": "输出变量",
"value": [
{
"key": "output_user_input",
"label": "output_user_input"
}
],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 1275
},
"position": {
"x": 826.2000049926346,
"y": 237.0998165893505
},
"selected": true
},
{
"id": "rag_2b974",
"data": {
"v": 3,
"id": "rag_2b974",
"name": "文档知识库问答2",
"type": "rag",
"expand": false,
"description": "根据用户问题从知识库中检索相关内容,结合检索结果调用大模型生成最终结果,支持多个问题并行执行。",
"group_params": [
{
"name": "知识库检索设置",
"params": [
{
"key": "user_question",
"help": "当选择多个问题时,将会多次运行本节点,每次运行时从批量问题中取一项进行处理。",
"test": "var",
"type": "user_question",
"label": "用户问题",
"value": [
"input_60a99.user_input"
],
"varZh": {
"input_1936c.user_input": "输入/user_input",
"input_60a99.user_input": "输入/user_input"
},
"global": "self=user_prompt",
"linkage": "output_user_input",
"required": true,
"placeholder": "请选择用户问题"
},
{
"key": "knowledge",
"type": "knowledge_select_multi",
"label": "检索范围",
"value": {
"type": "knowledge",
"value": [
{
"key": 1301,
"label": "毕昇产品文档"
}
]
},
"required": true,
"placeholder": "请选择知识库"
},
{
"key": "metadata_filter",
"type": "metadata_filter",
"label": "true",
"value": {
"enabled": false
}
},
{
"key": "advanced_retrieval_switch",
"type": "search_switch",
"label": "true",
"value": {
"user_auth": false,
"rerank_flag": false,
"rerank_model": "",
"search_switch": true,
"vector_weight": 0.5,
"keyword_weight": 0.5,
"max_chunk_size": 15000
}
},
{
"key": "retrieved_result",
"type": "var",
"label": "检索结果",
"global": "self=user_prompt"
}
]
},
{
"name": "AI回复生成设置",
"params": [
{
"key": "system_prompt",
"type": "var_textarea",
"label": "系统提示词",
"value": "你是一个具有多年资深经验的产品营销大师,专注于根据用户指令,结合相关参考资料,突出产品功能和亮点,生成富有创意、情感共鸣、具有吸引力的营销文案。",
"required": true
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "# 用户需求\n{{#input_60a99.user_input#}}\n# 参考资料\n{{#rag_2b974.retrieved_result#}}\n\n# 产品功能亮点\n{{#output_7d6b6.output_result#}}\n\n\n\n\n",
"varZh": {
"input_60a99.user_input": "输入/user_input",
"rag_2b974.user_question": "user_question",
"output_7d6b6.output_result": "输出2/output_result",
"rag_2b974.retrieved_result": "文档知识库问答2/retrieved_result"
},
"required": true
},
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output_user_input",
"type": "var",
"label": "输出变量",
"value": [
{
"key": "output_user_input",
"label": "output_user_input"
}
],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 150
},
"position": {
"x": 1733.012638288989,
"y": 241.24634805976703
},
"selected": false
},
{
"id": "llm_c66fe",
"data": {
"v": 2,
"id": "llm_c66fe",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "大模型",
"type": "llm",
"expand": true,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "你是一个具有多年资深经验的产品营销大师,专注于根据用户部门修改建议,对原始营销文案进行修改润色,以帮助企业提升品牌知名度和销售业绩。 "
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "# 原文\n{{#rag_2b974.output_user_input#}}\n\n\n\n# 用户修改建议\n\n{{#output_84247.output_result#}}\n\n# 润色修改后文案\n\n\n\n\n\n\n",
"varZh": {
"output_84247.output_result": "输出3/output_result",
"rag_2b974.output_user_input": "文档知识库问答2/output_user_input"
},
"required": true
},
{
"key": "image_prompt",
"help": "当使用多模态大模型时,可通过此功能传入图片,结合图像内容进行问答",
"type": "image_prompt",
"label": "视觉",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 833
},
"position": {
"x": 3243.668406668528,
"y": 182.05670813263373
},
"selected": false
},
{
"id": "input_60a99",
"data": {
"v": "3",
"id": "input_60a99",
"tab": {
"value": "dialog_input",
"options": [
{
"key": "dialog_input",
"help": "true",
"label": "true"
},
{
"key": "form_input",
"help": "true",
"label": "true"
}
]
},
"name": "输入",
"type": "input",
"description": "接收用户在会话页面的输入,支持 2 种形式:对话框输入,表单输入。",
"group_params": [
{
"name": "接收文本",
"params": [
{
"key": "user_input",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
}
]
},
{
"name": "",
"params": [
{
"key": "user_input_file",
"tab": "dialog_input",
"value": true,
"groupTitle": true
},
{
"key": "file_parse_mode",
"tab": "dialog_input",
"type": "select_parsemode",
"value": "extract_text"
},
{
"key": "dialog_files_content",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_files_content_size",
"min": 0,
"tab": "dialog_input",
"type": "char_number",
"label": "true",
"value": 15000
},
{
"key": "dialog_file_accept",
"tab": "dialog_input",
"type": "select_fileaccept",
"label": "true",
"value": "all"
},
{
"key": "dialog_image_files",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_file_paths",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
}
],
"groupKey": "inputfile"
},
{
"name": "",
"params": [
{
"key": "recommended_questions_flag",
"tab": "dialog_input",
"help": "true",
"label": "true",
"value": false,
"hidden": "true",
"groupTitle": true
},
{
"key": "recommended_llm",
"tab": "dialog_input",
"type": "bisheng_model",
"label": "true",
"value": 261,
"required": true,
"placeholder": "true"
},
{
"key": "recommended_system_prompt",
"tab": "dialog_input",
"type": "var_textarea",
"label": "true",
"value": "# Role\n你是一个极具洞察力的\"对话延续预测专家\"。你的任务是根据当前的对话历史,预测用户接下来最有可能输入的 3 条短语或问题。\n\n# Context Awareness\n在生成预测前,请执行以下深度思考步骤:\n1. **意图分析**:用户当前是在寻求事实、表达情绪、请求建议,还是在尝试结束对话?\n2. **逻辑推演**:根据 AI 上一条回复的内容,用户最自然产生的联想或疑问是什么?\n3. **风格对齐**:观察用户的用词习惯(专业、随性、简短还是详细),预测结果需保持语气一致。\n\n# Goals\n- **多样性**:提供不同方向的后续(例如:一个深入探究的问题,一个相关的新话题,一个反馈性评价)。\n- **简洁性**:预测内容应短小精悍,通常不超过 15 个字,方便用户点击。\n- **前瞻性**:能够预判用户的\"痛点\",直接提供解决方案的入口。\n\n# Output Format\n请严格遵守 JSON 格式输出。\n返回一个包含单一键名 \"suggestions\" 的 JSON 对象。\n- 所有字符串必须使用**双引号**。\n- 不要输出 Markdown 代码块标记(如 ```json),直接输出 JSON 字符串。\n**示例:**\n{\"suggestions\": [\"你能举个例子吗?\", \"这个方案的成本是多少?\", \"听起来不错,怎么开始?\"]}",
"required": true
},
{
"key": "recommended_history_num",
"tab": "dialog_input",
"help": "true",
"step": 1,
"type": "slide",
"label": "true",
"scope": [
1,
10
],
"value": 2
}
],
"groupKey": "custom"
},
{
"name": "",
"params": [
{
"key": "form_input",
"tab": "form_input",
"type": "form",
"label": "true",
"value": [],
"global": "item:form_input"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 570
},
"position": {
"x": 411.31336047282423,
"y": 234.7627660417411
},
"selected": false
}
],
"viewport": {
"x": -933.842567126535,
"y": -504.2152476262525,
"zoom": 1.4199819732946106
}
},
"order_num": 12500863,
"guide_word": null,
"flow_type": 10
},
{
"update_time": "2026-02-05 20:45:48",
"parameters": null,
"name": "分诊场景",
"description": "该流程用于分诊场景,用户输入内容后,经大模型判断是否完整,通过条件分支决策,再由大模型生成科室,输出分诊结果,辅助高效分诊 。\n使用说明\n在 “输入” 节点填内容,选 “大模型 - 判断是否完整” 配置参数运行,根据分支结果,经 “大模型 - 推荐科室” 处理,最后在 “输出” 查看分诊结论 。",
"flow_id": "7353cc101f434234bbee3a61eb17959d",
"api_parameters": null,
"create_time": "2026-02-05 20:45:48",
"id": 364,
"data": {
"edges": [
{
"id": "xy-edge__condition_63775right_handle-output_15b82left_handle",
"type": "customEdge",
"source": "condition_63775",
"target": "output_15b82",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_8bbeeright_handle-condition_63775left_handle",
"type": "customEdge",
"source": "llm_8bbee",
"target": "condition_63775",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__condition_637750eda50f7-llm_2cf38left_handle",
"type": "customEdge",
"source": "condition_63775",
"target": "llm_2cf38",
"animated": true,
"sourceHandle": "0eda50f7",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_2cf38right_handle-end_1341eleft_handle",
"type": "customEdge",
"source": "llm_2cf38",
"target": "end_1341e",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__start_68c76right_handle-input_85ed8left_handle",
"type": "customEdge",
"source": "start_68c76",
"target": "input_85ed8",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__input_85ed8right_handle-llm_8bbeeleft_handle",
"type": "customEdge",
"source": "input_85ed8",
"target": "llm_8bbee",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__output_15b82right_handle-input_85ed8left_handle",
"type": "customEdge",
"source": "output_15b82",
"target": "input_85ed8",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
}
],
"nodes": [
{
"id": "start_68c76",
"data": {
"v": 3,
"id": "start_68c76",
"name": "开始",
"type": "start",
"description": "工作流运行的起始节点",
"group_params": [
{
"name": "开场引导",
"params": [
{
"key": "guide_word",
"type": "textarea",
"label": "开场白",
"value": "您好,请描述您的症状,并且提供您的性别、年龄信息。"
},
{
"key": "guide_question",
"help": "为用户提供推荐问题,引导用户输入,超过3个时将随机选取3个",
"type": "input_list",
"label": "引导问题",
"value": [
""
]
}
]
},
{
"name": "全局变量",
"params": [
{
"key": "user_info",
"type": "var",
"label": "true",
"value": "",
"global": "key"
},
{
"key": "current_time",
"type": "var",
"label": "当前时间",
"value": "",
"global": "key"
},
{
"key": "chat_history",
"type": "chat_history_num",
"value": 10,
"global": "key"
},
{
"key": "preset_question",
"type": "input_list",
"label": "预置问题列表",
"value": [
{
"key": "366504",
"value": ""
}
],
"global": "item:input_list"
},
{
"key": "custom_variables",
"help": "true",
"type": "global_var",
"label": "true",
"value": [],
"global": "item:input_list"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 711
},
"position": {
"x": -283.54706809376773,
"y": -86.40776212614759
},
"selected": false
},
{
"id": "condition_63775",
"data": {
"id": "condition_63775",
"name": "条件分支",
"type": "condition",
"description": "根据条件表达式执行不同的分支",
"group_params": [
{
"params": [
{
"key": "condition",
"type": "condition",
"label": "",
"value": [
{
"id": "0eda50f7",
"operator": "and",
"conditions": [
{
"id": "b78beaf9",
"left_var": "llm_8bbee.output",
"left_label": "output",
"right_label": "",
"right_value": "完整",
"right_value_type": "input",
"comparison_operation": "contains"
}
]
}
]
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 545,
"height": 347
},
"position": {
"x": 1031.063648112229,
"y": -84.34903331683131
},
"selected": false
},
{
"id": "end_1341e",
"data": {
"id": "end_1341e",
"name": "结束",
"type": "end",
"description": "工作流运行到此结束",
"group_params": []
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 2099.286704970077,
"y": -113.81885566422974
},
"selected": false
},
{
"id": "output_15b82",
"data": {
"v": 2,
"id": "output_15b82",
"name": "输出",
"type": "output",
"description": "可向用户发送消息,并且支持进行更丰富的交互,例如请求用户批准进行某项敏感操作、允许用户在模型输出内容的基础上直接修改并提交。",
"group_params": [
{
"params": [
{
"key": "message",
"type": "var_textarea_file",
"label": "消息内容",
"value": {
"msg": "{{#llm_8bbee.output#}}",
"files": []
},
"varZh": {
"llm_8bbee.output": "大模型-判断信息是否完整/output",
"llm_a46d8.output": "大模型/output"
},
"global": "key",
"required": true,
"placeholder": "输入需要发送给用户的消息,例如“接下来我将执行 XX 操作,请您确认”,“以下是我的初版草稿,您可以在其基础上进行修改”"
},
{
"key": "output_result",
"type": "output_form",
"label": "用户输入内容",
"value": {
"type": "",
"value": ""
},
"global": "value.type=input",
"options": [],
"required": false
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 463
},
"position": {
"x": 1681.5053754933697,
"y": 244.61489030268024
},
"selected": false
},
{
"id": "llm_8bbee",
"data": {
"v": 2,
"id": "llm_8bbee",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "大模型-判断信息是否完整",
"type": "llm",
"expand": true,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "您是一名分诊医生。请判断以下用户提供的信息是否完整,需要包含性别、年龄、症状三项信息。若用户提供了完整信息则回复“信息完整”,若不完整则反问用户,让对方补充相应缺失的信息。"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "你们的对话记录:\n\n```\n\n{{#start_68c76.chat_history#}}\n\n```\n\n你的回复:\n\n\n\n",
"varZh": {
"start_68c76.chat_history": "开始/chat_history"
},
"required": true
},
{
"key": "image_prompt",
"help": "当使用多模态大模型时,可通过此功能传入图片,结合图像内容进行问答",
"type": "image_prompt",
"label": "视觉",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": false
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 833
},
"position": {
"x": 622.8451256124496,
"y": -74.78472706554999
},
"selected": false
},
{
"id": "llm_2cf38",
"data": {
"v": 2,
"id": "llm_2cf38",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "大模型-推荐科室",
"type": "llm",
"expand": false,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "1. 根据提供的性别、年龄和症状,判断患者应该去医院的哪个科室就诊。\n\n2. 首先,分析患者的性别和年龄,这可能会影响某些症状的严重性和可能的科室选择。\n\n3. 然后,仔细阅读并理解患者的症状,确定这些症状可能与哪些科室相关。\n\n4. 根据常见的医疗科室和其对应的症状,匹配患者的症状到最合适的科室。\n\n5. 输出结果时,只需提供科室名称,不要包含任何XML标签。"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "完整的用户信息包含在以下聊天记录中:\n\n```\n\n{{#start_68c76.chat_history#}}\n\n```\n\n推荐科室:\n\n\n\n",
"varZh": {
"start_68c76.chat_history": "开始/chat_history"
},
"required": true
},
{
"key": "image_prompt",
"help": "当使用多模态大模型时,可通过此功能传入图片,结合图像内容进行问答",
"type": "image_prompt",
"label": "视觉",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 1686.1706694671357,
"y": -81.72638198724074
},
"selected": false
},
{
"id": "input_85ed8",
"data": {
"v": "3",
"id": "input_85ed8",
"tab": {
"value": "dialog_input",
"options": [
{
"key": "dialog_input",
"help": "true",
"label": "true"
},
{
"key": "form_input",
"help": "true",
"label": "true"
}
]
},
"name": "输入",
"type": "input",
"description": "接收用户在会话页面的输入,支持 2 种形式:对话框输入,表单输入。",
"group_params": [
{
"name": "接收文本",
"params": [
{
"key": "user_input",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
}
]
},
{
"name": "",
"params": [
{
"key": "user_input_file",
"tab": "dialog_input",
"value": true,
"groupTitle": true
},
{
"key": "file_parse_mode",
"tab": "dialog_input",
"type": "select_parsemode",
"value": "extract_text"
},
{
"key": "dialog_files_content",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_files_content_size",
"min": 0,
"tab": "dialog_input",
"type": "char_number",
"label": "true",
"value": 15000
},
{
"key": "dialog_file_accept",
"tab": "dialog_input",
"type": "select_fileaccept",
"label": "true",
"value": "all"
},
{
"key": "dialog_image_files",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_file_paths",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
}
],
"groupKey": "inputfile"
},
{
"name": "",
"params": [
{
"key": "recommended_questions_flag",
"tab": "dialog_input",
"help": "true",
"label": "true",
"value": false,
"hidden": "true",
"groupTitle": true
},
{
"key": "recommended_llm",
"tab": "dialog_input",
"type": "bisheng_model",
"label": "true",
"value": 261,
"required": true,
"placeholder": "true"
},
{
"key": "recommended_system_prompt",
"tab": "dialog_input",
"type": "var_textarea",
"label": "true",
"value": "# Role\n你是一个极具洞察力的\"对话延续预测专家\"。你的任务是根据当前的对话历史,预测用户接下来最有可能输入的 3 条短语或问题。\n\n# Context Awareness\n在生成预测前,请执行以下深度思考步骤:\n1. **意图分析**:用户当前是在寻求事实、表达情绪、请求建议,还是在尝试结束对话?\n2. **逻辑推演**:根据 AI 上一条回复的内容,用户最自然产生的联想或疑问是什么?\n3. **风格对齐**:观察用户的用词习惯(专业、随性、简短还是详细),预测结果需保持语气一致。\n\n# Goals\n- **多样性**:提供不同方向的后续(例如:一个深入探究的问题,一个相关的新话题,一个反馈性评价)。\n- **简洁性**:预测内容应短小精悍,通常不超过 15 个字,方便用户点击。\n- **前瞻性**:能够预判用户的\"痛点\",直接提供解决方案的入口。\n\n# Output Format\n请严格遵守 JSON 格式输出。\n返回一个包含单一键名 \"suggestions\" 的 JSON 对象。\n- 所有字符串必须使用**双引号**。\n- 不要输出 Markdown 代码块标记(如 ```json),直接输出 JSON 字符串。\n**示例:**\n{\"suggestions\": [\"你能举个例子吗?\", \"这个方案的成本是多少?\", \"听起来不错,怎么开始?\"]}",
"required": true
},
{
"key": "recommended_history_num",
"tab": "dialog_input",
"help": "true",
"step": 1,
"type": "slide",
"label": "true",
"scope": [
1,
10
],
"value": 2
}
],
"groupKey": "custom"
},
{
"name": "",
"params": [
{
"key": "form_input",
"tab": "form_input",
"type": "form",
"label": "true",
"value": [],
"global": "item:form_input"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 570
},
"position": {
"x": 151.22647818562317,
"y": -68.89763571499358
},
"selected": false
}
],
"viewport": {
"x": 208.5212914927622,
"y": 177.1875221661041,
"zoom": 0.499110403236339
}
},
"order_num": 12631933,
"guide_word": null,
"flow_type": 10
},
{
"update_time": "2026-02-05 20:51:03",
"parameters": null,
"name": "工具调用",
"description": "功能简介\n该流程用于内容处理,经输入、大模型处理、PMI 分析等环节,利用大模型完成任务,输出处理后的内容,支持单 / 批量运行,实现文本内容的智能化加工 。\n使用说明\n选择输入方式(对话 / 文件),配置大模型参数,设置 PMI 工具参数,确认各节点连接,点击 “运行”,流程自动执行,输出结果可查看调用大模型处理后的内容 。\n",
"flow_id": "7d820dd5dbce46b4b38502af34d8fccb",
"api_parameters": null,
"create_time": "2026-02-05 20:51:03",
"id": 366,
"data": {
"edges": [
{
"id": "xy-edge__tool_7a316right_handle-output_45121left_handle",
"type": "customEdge",
"source": "tool_7a316",
"target": "output_45121",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_0c3fbright_handle-tool_7a316left_handle",
"type": "customEdge",
"source": "llm_0c3fb",
"target": "tool_7a316",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_148e4right_handle-tool_7a316left_handle",
"type": "customEdge",
"source": "llm_148e4",
"target": "tool_7a316",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__output_45121right_handle-llm_0fa85left_handle",
"type": "customEdge",
"source": "output_45121",
"target": "llm_0fa85",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__start_3d920right_handle-input_4c88bleft_handle",
"type": "customEdge",
"source": "start_3d920",
"target": "input_4c88b",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__input_4c88bright_handle-llm_0c3fbleft_handle",
"type": "customEdge",
"source": "input_4c88b",
"target": "llm_0c3fb",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__input_4c88bright_handle-llm_148e4left_handle",
"type": "customEdge",
"source": "input_4c88b",
"target": "llm_148e4",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_0fa85right_handle-input_4c88bleft_handle",
"type": "customEdge",
"source": "llm_0fa85",
"target": "input_4c88b",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
}
],
"nodes": [
{
"id": "start_3d920",
"data": {
"v": 3,
"id": "start_3d920",
"name": "开始",
"type": "start",
"expand": false,
"description": "工作流运行的起始节点。",
"group_params": [
{
"name": "开场引导",
"params": [
{
"key": "guide_word",
"type": "textarea",
"label": "开场白",
"value": "",
"placeholder": "每次工作流开始执行时向用户发送此消息,支持 Markdown 格式,为空时不发送。"
},
{
"key": "guide_question",
"help": "为用户提供推荐问题,引导用户输入,超过3个时将随机选取3个。",
"type": "input_list",
"label": "引导问题",
"value": [
"2024年上半年PMI变化情况",
""
],
"placeholder": "请输入引导问题"
}
]
},
{
"name": "全局变量",
"params": [
{
"key": "user_info",
"type": "var",
"label": "true",
"value": "",
"global": "key"
},
{
"key": "current_time",
"type": "var",
"label": "当前时间",
"value": "",
"global": "key"
},
{
"key": "chat_history",
"type": "chat_history_num",
"value": 10,
"global": "key"
},
{
"key": "preset_question",
"help": "适合文档审核、报告生成等场景,利用提前预置的问题批量进行 RAG 问答。",
"type": "input_list",
"label": "预置问题列表",
"value": [
{
"key": "4b91bc",
"value": ""
}
],
"global": "item:input_list",
"placeholder": "输入批量预置问题"
},
{
"key": "custom_variables",
"help": "true",
"type": "global_var",
"label": "true",
"value": [],
"global": "item:input_list"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 293.65992364972067,
"y": 74.81260064793756
},
"selected": false
},
{
"id": "tool_7a316",
"data": {
"id": "tool_7a316",
"name": "PMI",
"type": "tool",
"expand": true,
"tool_key": "macro_china_pmi",
"description": "中国 PMI (采购经理人指数)月度统计数据。返回数据包括:月份制造业 PMI,制造业 PMI 同比增长,非制造业 PMI,非制造业 PMI 同比增长。",
"group_params": [
{
"name": "工具参数",
"params": [
{
"key": "start_date",
"desc": "开始月份, 使用YYYY-MM-DD 方式表示",
"test": "input",
"type": "var_textarea",
"label": "start_date",
"value": "{{#llm_0c3fb.output#}}",
"varZh": {
"llm_0c3fb.output": "大模型-提取开始时间/output"
},
"required": true
},
{
"key": "end_date",
"desc": "结束月份, 使用YYYY-MM-DD 方式表示",
"test": "input",
"type": "var_textarea",
"label": "end_date",
"value": "{{#llm_148e4.output#}}",
"varZh": {
"llm_148e4.output": "大模型-提取结束时间/output"
},
"required": true
}
]
},
{
"name": "输出",
"params": [
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": "",
"global": "key"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 602
},
"position": {
"x": 1614.4895326144945,
"y": 100
},
"selected": false
},
{
"id": "output_45121",
"data": {
"v": 2,
"id": "output_45121",
"name": "输出",
"type": "output",
"description": "可向用户发送消息,并且支持进行更丰富的交互,例如请求用户批准进行某项敏感操作、允许用户在模型输出内容的基础上直接修改并提交。",
"group_params": [
{
"params": [
{
"key": "message",
"type": "var_textarea_file",
"label": "消息内容",
"value": {
"msg": "{{#tool_7a316.output#}}",
"files": []
},
"varZh": {
"tool_7a316.output": "PMI/output",
"start_3d920.current_time": "开始/current_time"
},
"global": "key",
"required": true,
"placeholder": "输入需要发送给用户的消息,例如“接下来我将执行 XX 操作,请您确认”,“以下是我的初版草稿,您可以在其基础上进行修改”"
},
{
"key": "output_result",
"type": "output_form",
"label": "用户输入内容",
"value": {
"type": "",
"value": ""
},
"global": "value.type=input",
"options": [],
"required": false
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 463
},
"position": {
"x": 2032.2233877193396,
"y": 115.19445604716492
},
"selected": false
},
{
"id": "llm_0c3fb",
"data": {
"v": 2,
"id": "llm_0c3fb",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "大模型-提取开始时间",
"type": "llm",
"expand": false,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "从用户的输入中抽取出开始时间,格式:YYYY-MM-DD,仅输出时间,不要包含其他内容"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "{{#input_4c88b.user_input#}}",
"varZh": {
"input_4c88b.user_input": "输入/user_input"
},
"required": true
},
{
"key": "image_prompt",
"help": "true",
"type": "image_prompt",
"label": "true",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 1171.405788440929,
"y": 76.59789148675313
},
"selected": false
},
{
"id": "llm_148e4",
"data": {
"v": 2,
"id": "llm_148e4",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "大模型-提取结束时间",
"type": "llm",
"expand": false,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "从用户的输入中抽取出查询的结束时间,格式:YYYY-MM-DD,仅输出时间,不要包含其他内容"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "{{#input_4c88b.user_input#}}",
"varZh": {
"input_4c88b.user_input": "输入/user_input"
},
"required": true
},
{
"key": "image_prompt",
"help": "true",
"type": "image_prompt",
"label": "true",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 1175.5581100672648,
"y": 267.4853845047534
},
"selected": true
},
{
"id": "llm_0fa85",
"data": {
"v": 2,
"id": "llm_0fa85",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "大模型",
"type": "llm",
"expand": true,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "你是一名宏观经济学家,请点评以下经济数据。"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "{{#tool_7a316.output#}}",
"varZh": {
"tool_7a316.output": "PMI/output"
},
"required": true
},
{
"key": "image_prompt",
"help": "true",
"type": "image_prompt",
"label": "true",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 833
},
"position": {
"x": 2457.846463360472,
"y": 114.79561323887066
},
"selected": false
},
{
"id": "input_4c88b",
"data": {
"v": "3",
"id": "input_4c88b",
"tab": {
"value": "dialog_input",
"options": [
{
"key": "dialog_input",
"help": "true",
"label": "true"
},
{
"key": "form_input",
"help": "true",
"label": "true"
}
]
},
"name": "输入",
"type": "input",
"description": "接收用户在会话页面的输入,支持 2 种形式:对话框输入,表单输入。",
"group_params": [
{
"name": "接收文本",
"params": [
{
"key": "user_input",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
}
]
},
{
"name": "",
"params": [
{
"key": "user_input_file",
"tab": "dialog_input",
"value": true,
"groupTitle": true
},
{
"key": "file_parse_mode",
"tab": "dialog_input",
"type": "select_parsemode",
"value": "extract_text"
},
{
"key": "dialog_files_content",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_files_content_size",
"min": 0,
"tab": "dialog_input",
"type": "char_number",
"label": "true",
"value": 15000
},
{
"key": "dialog_file_accept",
"tab": "dialog_input",
"type": "select_fileaccept",
"label": "true",
"value": "all"
},
{
"key": "dialog_image_files",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_file_paths",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
}
],
"groupKey": "inputfile"
},
{
"name": "",
"params": [
{
"key": "recommended_questions_flag",
"tab": "dialog_input",
"help": "true",
"label": "true",
"value": false,
"hidden": "true",
"groupTitle": true
},
{
"key": "recommended_llm",
"tab": "dialog_input",
"type": "bisheng_model",
"label": "true",
"value": 261,
"required": true,
"placeholder": "true"
},
{
"key": "recommended_system_prompt",
"tab": "dialog_input",
"type": "var_textarea",
"label": "true",
"value": "# Role\n你是一个极具洞察力的\"对话延续预测专家\"。你的任务是根据当前的对话历史,预测用户接下来最有可能输入的 3 条短语或问题。\n\n# Context Awareness\n在生成预测前,请执行以下深度思考步骤:\n1. **意图分析**:用户当前是在寻求事实、表达情绪、请求建议,还是在尝试结束对话?\n2. **逻辑推演**:根据 AI 上一条回复的内容,用户最自然产生的联想或疑问是什么?\n3. **风格对齐**:观察用户的用词习惯(专业、随性、简短还是详细),预测结果需保持语气一致。\n\n# Goals\n- **多样性**:提供不同方向的后续(例如:一个深入探究的问题,一个相关的新话题,一个反馈性评价)。\n- **简洁性**:预测内容应短小精悍,通常不超过 15 个字,方便用户点击。\n- **前瞻性**:能够预判用户的\"痛点\",直接提供解决方案的入口。\n\n# Output Format\n请严格遵守 JSON 格式输出。\n返回一个包含单一键名 \"suggestions\" 的 JSON 对象。\n- 所有字符串必须使用**双引号**。\n- 不要输出 Markdown 代码块标记(如 ```json),直接输出 JSON 字符串。\n**示例:**\n{\"suggestions\": [\"你能举个例子吗?\", \"这个方案的成本是多少?\", \"听起来不错,怎么开始?\"]}",
"required": true
},
{
"key": "recommended_history_num",
"tab": "dialog_input",
"help": "true",
"step": 1,
"type": "slide",
"label": "true",
"scope": [
1,
10
],
"value": 2
}
],
"groupKey": "custom"
},
{
"name": "",
"params": [
{
"key": "form_input",
"tab": "form_input",
"type": "form",
"label": "true",
"value": [],
"global": "item:form_input"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 570
},
"position": {
"x": 754.2400379031777,
"y": 74.30568610625028
},
"selected": false
}
],
"viewport": {
"x": -111.39676647009968,
"y": -49.532665393166326,
"zoom": 0.5427937339527105
}
},
"order_num": 12763003,
"guide_word": null,
"flow_type": 10
},
{
"update_time": "2026-02-05 20:57:04",
"parameters": null,
"name": "智能简历筛选",
"description": "上传简历文件触发筛选",
"flow_id": "7576761af1ae4ea2b6f401b1e0953a57",
"api_parameters": null,
"create_time": "2026-02-05 20:57:04",
"id": 367,
"data": {
"edges": [
{
"id": "xy-edge__condition_9afcb28a37878-llm_60dfcleft_handle",
"type": "customEdge",
"source": "condition_9afcb",
"target": "llm_60dfc",
"animated": true,
"sourceHandle": "28a37878",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_60dfcright_handle-output_08e3dleft_handle",
"type": "customEdge",
"source": "llm_60dfc",
"target": "output_08e3d",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__output_08e3dright_handle-end_ed827left_handle",
"type": "customEdge",
"source": "output_08e3d",
"target": "end_ed827",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_025afright_handle-output_dc624left_handle",
"type": "customEdge",
"source": "llm_025af",
"target": "output_dc624",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__output_dc624right_handle-end_ed827left_handle",
"type": "customEdge",
"source": "output_dc624",
"target": "end_ed827",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__rag_743b7right_handle-condition_9afcbleft_handle",
"type": "customEdge",
"source": "rag_743b7",
"target": "condition_9afcb",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__condition_9afcbright_handle-rag_6c446left_handle",
"type": "customEdge",
"source": "condition_9afcb",
"target": "rag_6c446",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__rag_6c446right_handle-llm_025afleft_handle",
"type": "customEdge",
"source": "rag_6c446",
"target": "llm_025af",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__start_d0027right_handle-input_51222left_handle",
"type": "customEdge",
"source": "start_d0027",
"target": "input_51222",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__input_51222right_handle-rag_743b7left_handle",
"type": "customEdge",
"source": "input_51222",
"target": "rag_743b7",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
}
],
"nodes": [
{
"id": "start_d0027",
"data": {
"v": 3,
"id": "start_d0027",
"name": "开始",
"type": "start",
"description": "工作流运行的起始节点。",
"group_params": [
{
"name": "开场引导",
"params": [
{
"key": "guide_word",
"type": "textarea",
"label": "开场白",
"value": "",
"placeholder": "每次工作流开始执行时向用户发送此消息,支持 Markdown 格式,为空时不发送。"
},
{
"key": "guide_question",
"help": "为用户提供推荐问题,引导用户输入,超过3个时将随机选取3个。",
"type": "input_list",
"label": "引导问题",
"value": [
""
],
"placeholder": "请输入引导问题"
}
]
},
{
"name": "全局变量",
"params": [
{
"key": "user_info",
"type": "var",
"label": "true",
"value": "",
"global": "key"
},
{
"key": "current_time",
"type": "var",
"label": "当前时间",
"value": "",
"global": "key"
},
{
"key": "chat_history",
"type": "chat_history_num",
"value": 10,
"global": "key"
},
{
"key": "preset_question",
"help": "适合文档审核、报告生成等场景,利用提前预置的问题批量进行 RAG 问答。",
"type": "input_list",
"label": "预置问题列表",
"value": [
{
"key": "6e5db5",
"value": "需有AI领域从业经历或为计算机相关专业"
},
{
"key": "33572c",
"value": "该候选人总工作时长需要3年以上"
},
{
"key": "677ad0",
"value": "工作经验中不能有多段工作经历持续时长低于3个月"
},
{
"key": "622ff1",
"value": "会Python"
},
{
"key": "ce9333",
"value": "有大模型相关项目经验"
},
{
"key": "2b83e5",
"value": "30岁以下"
},
{
"key": "2a3382",
"value": ""
}
],
"global": "item:input_list",
"placeholder": "输入批量预置问题"
},
{
"key": "custom_variables",
"help": "true",
"type": "global_var",
"label": "true",
"value": [],
"global": "item:input_list"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 879
},
"position": {
"x": 183.82157147745,
"y": 152.22958521319305
},
"selected": false
},
{
"id": "condition_9afcb",
"data": {
"id": "condition_9afcb",
"name": "条件分支",
"type": "condition",
"description": "根据条件表达式执行不同的分支。",
"group_params": [
{
"params": [
{
"key": "condition",
"type": "condition",
"label": "",
"value": [
{
"id": "28a37878",
"operator": "or",
"conditions": [
{
"id": "475500db",
"left_var": "rag_743b7.output_preset_question_6e5db5",
"left_label": "判断候选人是否满足必要要求/output_需有AI领域从业经历或为计算机相关专业",
"right_label": "",
"right_value": "不满足",
"right_value_type": "input",
"comparison_operation": "contains"
},
{
"id": "65e2732f",
"left_var": "rag_743b7.output_preset_question_33572c",
"left_label": "判断候选人是否满足必要要求/output_该候选人总工作时长需要3年以上",
"right_label": "",
"right_value": "不满足",
"right_value_type": "input",
"comparison_operation": "contains"
},
{
"id": "316abb7b",
"left_var": "rag_743b7.output_preset_question_677ad0",
"left_label": "判断候选人是否满足必要要求/output_工作经验中不能有多段工作经历持续时长低于3个月",
"right_label": "",
"right_value": "不满足",
"right_value_type": "input",
"comparison_operation": "contains"
}
]
}
]
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 562,
"height": 419
},
"position": {
"x": 1488.6523613323277,
"y": 145.17597465560576
},
"selected": false
},
{
"id": "llm_60dfc",
"data": {
"v": 2,
"id": "llm_60dfc",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "总结未通过简历筛选原因",
"type": "llm",
"expand": false,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "input",
"type": "var_textarea",
"label": "系统提示词",
"value": "以下是某个候选人简历评估的结果。由于但凡有一项“不满足”则无法进入面试环节。请简要(50字以内)总结一下该候选人简历未通过筛选的原因。",
"varZh": {
"rag_49431.output_preset_question_0": "判断候选人是否满足必要条件/output_需有AI领域从业经历或为计算机相关专业"
}
},
{
"key": "user_prompt",
"test": "input",
"type": "var_textarea",
"label": "用户提示词",
"value": "要求1满足情况:{{#rag_743b7.output_preset_question_6e5db5#}}要求2满足情况:{{#rag_743b7.output_preset_question_33572c#}}\n要求3满足情况:{{#rag_743b7.output_preset_question_677ad0#}}",
"varZh": {
"rag_49431.output_preset_question_1": "判断候选人是否满足必要要求/output_需要有5年及以上工作经验",
"rag_98e0c.output_preset_question_0": "判断候选人是否满足必要条件/output_需有AI领域从业经历或为计算机相关专业",
"rag_98e0c.output_preset_question_1": "判断候选人是否满足必要条件/output_需要有5年及以上工作经验",
"rag_98e0c.output_preset_question_2": "判断候选人是否满足必要条件/output_工作经验中不能有多段工作经历持续时长低于3个月",
"rag_743b7.output_preset_question_33572c": "判断候选人是否满足必要要求/output_该候选人总工作时长需要3年以上",
"rag_743b7.output_preset_question_677ad0": "判断候选人是否满足必要要求/output_工作经验中不能有多段工作经历持续时长低于3个月",
"rag_743b7.output_preset_question_6e5db5": "判断候选人是否满足必要要求/output_需有AI领域从业经历或为计算机相关专业"
},
"required": true
},
{
"key": "image_prompt",
"help": "true",
"type": "image_prompt",
"label": "true",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": false
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 2224.0533822371517,
"y": 147.86184733909764
},
"selected": true
},
{
"id": "output_08e3d",
"data": {
"v": 2,
"id": "output_08e3d",
"name": "输出",
"type": "output",
"description": "可向用户发送消息,并且支持进行更丰富的交互,例如请求用户批准进行某项敏感操作、允许用户在模型输出内容的基础上直接修改并提交。",
"group_params": [
{
"params": [
{
"key": "message",
"type": "var_textarea_file",
"label": "消息内容",
"value": {
"msg": "简历筛选未通过。\n\n{{#llm_60dfc.output#}}",
"files": []
},
"varZh": {
"llm_60dfc.output": "总结未通过简历筛选原因/output"
},
"global": "key",
"required": true,
"placeholder": "输入需要发送给用户的消息,例如“接下来我将执行 XX 操作,请您确认”,“以下是我的初版草稿,您可以在其基础上进行修改”"
},
{
"key": "output_result",
"type": "output_form",
"label": "用户输入内容",
"value": {
"type": "",
"value": ""
},
"global": "value.type=input",
"options": [],
"required": false
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 463
},
"position": {
"x": 2625.826899106754,
"y": 151.65379821350757
},
"selected": false
},
{
"id": "end_ed827",
"data": {
"id": "end_ed827",
"name": "结束",
"type": "end",
"description": "工作流运行到此结束。",
"group_params": []
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 3462.9772003335,
"y": 159.78541998491698
},
"selected": false
},
{
"id": "llm_025af",
"data": {
"v": 2,
"id": "llm_025af",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "加分项算分",
"type": "llm",
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "input",
"type": "var_textarea",
"label": "系统提示词",
"value": "以下是某个候选人简历评估中加分项的评估结果。每个“满足”加2分,每个“不满足”扣一分,“不确定”不加不减。输出最后的分数,仅输出数字即可。"
},
{
"key": "user_prompt",
"test": "input",
"type": "var_textarea",
"label": "用户提示词",
"value": "要求1满足情况:{{#rag_6c446.output_preset_question_622ff1#}}要求2满足情况:{{#rag_6c446.output_preset_question_ce9333#}}要求3满足情况:{{#rag_6c446.output_preset_question_2b83e5#}}",
"varZh": {
"rag_882f4.output_preset_question_3": "判断加分项/output_会Python",
"rag_882f4.output_preset_question_4": "判断加分项/output_有大模型相关项目经验",
"rag_882f4.output_preset_question_5": "判断加分项/output_30岁以下",
"rag_6c446.output_preset_question_2b83e5": "判断加分情况/output_30岁以下",
"rag_6c446.output_preset_question_622ff1": "判断加分情况/output_会Python",
"rag_6c446.output_preset_question_ce9333": "判断加分情况/output_有大模型相关项目经验"
},
"required": true
},
{
"key": "image_prompt",
"help": "true",
"type": "image_prompt",
"label": "true",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": false
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 833
},
"position": {
"x": 2630.260369780459,
"y": 630.0457897653762
},
"selected": false
},
{
"id": "output_dc624",
"data": {
"v": 2,
"id": "output_dc624",
"name": "输出2",
"type": "output",
"description": "可向用户发送消息,并且支持进行更丰富的交互,例如请求用户批准进行某项敏感操作、允许用户在模型输出内容的基础上直接修改并提交。",
"group_params": [
{
"params": [
{
"key": "message",
"type": "var_textarea_file",
"label": "消息内容",
"value": {
"msg": "该候选人得分:{{#llm_025af.output#}}",
"files": []
},
"varZh": {
"llm_025af.output": "加分项算分/output"
},
"global": "key",
"required": true,
"placeholder": "输入需要发送给用户的消息,例如“接下来我将执行 XX 操作,请您确认”,“以下是我的初版草稿,您可以在其基础上进行修改”"
},
{
"key": "output_result",
"type": "output_form",
"label": "用户输入内容",
"value": {
"type": "",
"value": ""
},
"global": "value.type=input",
"options": [],
"required": false
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 463
},
"position": {
"x": 3030,
"y": 631.2632435428188
},
"selected": false
},
{
"id": "rag_743b7",
"data": {
"v": 3,
"id": "rag_743b7",
"name": "判断候选人是否满足必要要求",
"type": "rag",
"description": "根据用户问题从知识库中检索相关内容,结合检索结果调用大模型生成最终结果,支持多个问题并行执行。",
"group_params": [
{
"name": "知识库检索设置",
"params": [
{
"key": "user_question",
"help": "当选择多个问题时,将会多次运行本节点,每次运行时从批量问题中取一项进行处理。",
"test": "var",
"type": "user_question",
"label": "用户问题",
"value": [
"start_d0027.preset_question#6e5db5",
"start_d0027.preset_question#33572c",
"start_d0027.preset_question#677ad0"
],
"varZh": {
"start_d0027.preset_question#33572c": "开始/该候选人总工作时长需要3年以上",
"start_d0027.preset_question#677ad0": "开始/工作经验中不能有多段工作经历持续时长低于3个月",
"start_d0027.preset_question#6e5db5": "开始/需有AI领域从业经历或为计算机相关专业"
},
"global": "self=user_prompt",
"linkage": "output_user_input",
"required": true,
"placeholder": "请选择用户问题"
},
{
"key": "knowledge",
"type": "knowledge_select_multi",
"label": "检索范围",
"value": {
"type": "tmp",
"value": [
{
"key": "input_51222.file",
"label": "file(简历)"
}
]
},
"required": true,
"placeholder": "请选择知识库"
},
{
"key": "metadata_filter",
"type": "metadata_filter",
"label": "true",
"value": {
"enabled": false
}
},
{
"key": "advanced_retrieval_switch",
"type": "search_switch",
"label": "true",
"value": {
"user_auth": false,
"rerank_flag": false,
"rerank_model": "",
"search_switch": true,
"vector_weight": 0.5,
"keyword_weight": 0.5,
"max_chunk_size": 15000
}
},
{
"key": "retrieved_result",
"type": "var",
"label": "检索结果",
"global": "self=user_prompt"
}
]
},
{
"name": "AI回复生成设置",
"params": [
{
"key": "system_prompt",
"type": "var_textarea",
"label": "系统提示词",
"value": "你是一名HR,需要你根据审核项对简历进行审核。审核结论输出符合以下要求:1、包含“本项审核结论”、“结论依据”两项内容。2、“本项审核结论”只输出“满足”、“不满足”或“不确定”3、“结论依据”即对输出该结论的解释,解释中不要包含“满足”、“不满足”或“不确定”字眼。",
"required": true
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "审核项:{{#rag_743b7.user_question#}}\n参考文本:{{#rag_743b7.retrieved_result#}}\n审核结果:",
"varZh": {
"rag_743b7.user_question": "user_question",
"rag_743b7.retrieved_result": "retrieved_result"
},
"required": true
},
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output_user_input",
"help": "模型输出内容将会存储在该变量中。",
"type": "var",
"label": "输出变量",
"value": [
{
"key": "output_preset_question_6e5db5",
"label": "output_需有AI领域从业经历或为计算机相关专业"
},
{
"key": "output_preset_question_33572c",
"label": "output_该候选人总工作时长需要3年以上"
},
{
"key": "output_preset_question_677ad0",
"label": "output_工作经验中不能有多段工作经历持续时长低于3个月"
}
],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 1421
},
"position": {
"x": 1046.492501246415,
"y": 150.24255315187906
},
"selected": false
},
{
"id": "rag_6c446",
"data": {
"v": 3,
"id": "rag_6c446",
"name": "判断加分情况",
"type": "rag",
"description": "根据用户问题从知识库中检索相关内容,结合检索结果调用大模型生成最终结果,支持多个问题并行执行。",
"group_params": [
{
"name": "知识库检索设置",
"params": [
{
"key": "user_question",
"help": "当选择多个问题时,将会多次运行本节点,每次运行时从批量问题中取一项进行处理。",
"test": "var",
"type": "user_question",
"label": "用户问题",
"value": [
"start_d0027.preset_question#622ff1",
"start_d0027.preset_question#ce9333",
"start_d0027.preset_question#2b83e5"
],
"varZh": {
"start_d0027.preset_question#2b83e5": "开始/30岁以下",
"start_d0027.preset_question#622ff1": "开始/会Python",
"start_d0027.preset_question#ce9333": "开始/有大模型相关项目经验"
},
"global": "self=user_prompt",
"linkage": "output_user_input",
"required": true,
"placeholder": "请选择用户问题"
},
{
"key": "knowledge",
"type": "knowledge_select_multi",
"label": "检索范围",
"value": {
"type": "tmp",
"value": [
{
"key": "input_51222.file",
"label": "file(简历)"
}
]
},
"required": true,
"placeholder": "请选择知识库"
},
{
"key": "metadata_filter",
"type": "metadata_filter",
"label": "true",
"value": {
"enabled": false
}
},
{
"key": "advanced_retrieval_switch",
"type": "search_switch",
"label": "true",
"value": {
"user_auth": false,
"rerank_flag": false,
"rerank_model": "",
"search_switch": true,
"vector_weight": 0.5,
"keyword_weight": 0.5,
"max_chunk_size": 15000
}
},
{
"key": "retrieved_result",
"type": "var",
"label": "检索结果",
"global": "self=user_prompt"
}
]
},
{
"name": "AI回复生成设置",
"params": [
{
"key": "system_prompt",
"type": "var_textarea",
"label": "系统提示词",
"value": "你是一名HR,需要你根据审核项对简历进行审核。审核结论输出符合以下要求:1、包含“本项审核结论”、“结论依据”两项内容。2、“本项审核结论”只输出“满足”、“不满足”或“不确定”3、“结论依据”即对输出该结论的解释,解释中不要包含“满足”、“不满足”或“不确定”字眼。",
"required": true
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "用户问题:{{#rag_6c446.user_question#}}\n参考文本:{{#rag_6c446.retrieved_result#}}\n你的回答:",
"varZh": {
"rag_6c446.user_question": "user_question",
"rag_6c446.retrieved_result": "retrieved_result"
},
"required": true
},
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output_user_input",
"help": "模型输出内容将会存储在该变量中。",
"type": "var",
"label": "输出变量",
"value": [
{
"key": "output_preset_question_622ff1",
"label": "output_会Python"
},
{
"key": "output_preset_question_ce9333",
"label": "output_有大模型相关项目经验"
},
{
"key": "output_preset_question_2b83e5",
"label": "output_30岁以下"
}
],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 1389
},
"position": {
"x": 2212.3843046432144,
"y": 548.5147332426619
},
"selected": false
},
{
"id": "input_51222",
"data": {
"v": "3",
"id": "input_51222",
"tab": {
"value": "form_input",
"options": [
{
"key": "dialog_input",
"help": "true",
"label": "true"
},
{
"key": "form_input",
"help": "true",
"label": "true"
}
]
},
"name": "输入",
"type": "input",
"description": "接收用户在会话页面的输入,支持 2 种形式:对话框输入,表单输入。",
"group_params": [
{
"name": "接收文本",
"params": [
{
"key": "user_input",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
}
]
},
{
"name": "",
"params": [
{
"key": "user_input_file",
"tab": "dialog_input",
"value": true,
"groupTitle": true
},
{
"key": "file_parse_mode",
"tab": "dialog_input",
"type": "select_parsemode",
"value": "extract_text"
},
{
"key": "dialog_files_content",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_files_content_size",
"min": 0,
"tab": "dialog_input",
"type": "char_number",
"label": "true",
"value": 15000
},
{
"key": "dialog_file_accept",
"tab": "dialog_input",
"type": "select_fileaccept",
"label": "true",
"value": "all"
},
{
"key": "dialog_image_files",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"value": {},
"global": "key"
},
{
"key": "dialog_file_paths",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"value": {},
"global": "key"
}
],
"groupKey": "inputfile"
},
{
"name": "",
"params": [
{
"key": "recommended_questions_flag",
"tab": "dialog_input",
"help": "true",
"label": "true",
"value": false,
"hidden": "true",
"groupTitle": true
},
{
"key": "recommended_llm",
"tab": "dialog_input",
"type": "bisheng_model",
"label": "true",
"value": 261,
"required": true,
"placeholder": "true"
},
{
"key": "recommended_system_prompt",
"tab": "dialog_input",
"type": "var_textarea",
"label": "true",
"value": "# Role\n你是一个极具洞察力的\"对话延续预测专家\"。你的任务是根据当前的对话历史,预测用户接下来最有可能输入的 3 条短语或问题。\n\n# Context Awareness\n在生成预测前,请执行以下深度思考步骤:\n1. **意图分析**:用户当前是在寻求事实、表达情绪、请求建议,还是在尝试结束对话?\n2. **逻辑推演**:根据 AI 上一条回复的内容,用户最自然产生的联想或疑问是什么?\n3. **风格对齐**:观察用户的用词习惯(专业、随性、简短还是详细),预测结果需保持语气一致。\n\n# Goals\n- **多样性**:提供不同方向的后续(例如:一个深入探究的问题,一个相关的新话题,一个反馈性评价)。\n- **简洁性**:预测内容应短小精悍,通常不超过 15 个字,方便用户点击。\n- **前瞻性**:能够预判用户的\"痛点\",直接提供解决方案的入口。\n\n# Output Format\n请严格遵守 JSON 格式输出。\n返回一个包含单一键名 \"suggestions\" 的 JSON 对象。\n- 所有字符串必须使用**双引号**。\n- 不要输出 Markdown 代码块标记(如 ```json),直接输出 JSON 字符串。\n**示例:**\n{\"suggestions\": [\"你能举个例子吗?\", \"这个方案的成本是多少?\", \"听起来不错,怎么开始?\"]}",
"required": true
},
{
"key": "recommended_history_num",
"tab": "dialog_input",
"help": "true",
"step": 1,
"type": "slide",
"label": "true",
"scope": [
1,
10
],
"value": 2
}
],
"groupKey": "custom"
},
{
"name": "",
"params": [
{
"key": "form_input",
"tab": "form_input",
"type": "form",
"label": "true",
"value": [
{
"key": "file",
"type": "file",
"value": "简历",
"options": [],
"multiple": true,
"required": true,
"file_path": "",
"file_type": "all",
"image_file": "",
"file_content": "",
"file_parse_mode": "ingest_to_temp_kb",
"file_content_size": 15000
}
],
"global": "item:form_input"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 311
},
"position": {
"x": 591.9687179846699,
"y": 149.54936212710822
},
"selected": false
}
],
"viewport": {
"x": -638.4131557718965,
"y": -49.3950076425578,
"zoom": 0.5209290936198073
}
},
"order_num": 12828538,
"guide_word": null,
"flow_type": 10
},
{
"update_time": "2026-02-05 21:24:46",
"parameters": null,
"name": "文章助手",
"description": "功能简介\n这是 “文章助手” 工作流,用于文章创作优化。先通过输入明确创作需求,经条件分支判断是否需优化、是知识错误还是缺漏、哪种优化方向,调用大模型完成对应改写、纠错、补漏等操作,辅助产出高质量文章 。\n使用说明\n在 “输入” 节点填创作意图、内容方向,依次运行各节点。按条件分支逻辑,根据需求走 “改写优化”“检查错误 / 缺漏” 等分支,调用对应大模型工具,最终输出优化后的文章内容 。",
"flow_id": "b483af499e4c49498adf963fdefa692a",
"api_parameters": null,
"create_time": "2026-02-05 21:24:46",
"id": 373,
"data": {
"edges": [
{
"id": "xy-edge__condition_086c0f0af1112-condition_e4299left_handle",
"type": "customEdge",
"source": "condition_086c0",
"target": "condition_e4299",
"animated": true,
"sourceHandle": "f0af1112",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__condition_e4299172c7f82-llm_04f45left_handle",
"type": "customEdge",
"source": "condition_e4299",
"target": "llm_04f45",
"animated": true,
"sourceHandle": "172c7f82",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__condition_e4299right_handle-llm_0d11dleft_handle",
"type": "customEdge",
"source": "condition_e4299",
"target": "llm_0d11d",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__flowNode_4325b172c7f82-llm_319a5left_handle",
"type": "customEdge",
"source": "flowNode_4325b",
"target": "llm_319a5",
"animated": true,
"sourceHandle": "172c7f82",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__flowNode_4325b341a403c-llm_fcfd0left_handle",
"type": "customEdge",
"source": "flowNode_4325b",
"target": "llm_fcfd0",
"animated": true,
"sourceHandle": "341a403c",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__flowNode_4325bright_handle-llm_9b7ableft_handle",
"type": "customEdge",
"source": "flowNode_4325b",
"target": "llm_9b7ab",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_04f45right_handle-end_c54b8left_handle",
"type": "customEdge",
"source": "llm_04f45",
"target": "end_c54b8",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_0d11dright_handle-end_d3a29left_handle",
"type": "customEdge",
"source": "llm_0d11d",
"target": "end_d3a29",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_319a5right_handle-end_95a69left_handle",
"type": "customEdge",
"source": "llm_319a5",
"target": "end_95a69",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_fcfd0right_handle-end_b740cleft_handle",
"type": "customEdge",
"source": "llm_fcfd0",
"target": "end_b740c",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_9b7abright_handle-end_7a9d0left_handle",
"type": "customEdge",
"source": "llm_9b7ab",
"target": "end_7a9d0",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__input_c0564right_handle-condition_086c0left_handle",
"type": "customEdge",
"source": "input_c0564",
"target": "condition_086c0",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__start_68c76right_handle-input_c0564left_handle",
"type": "customEdge",
"source": "start_68c76",
"target": "input_c0564",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__condition_086c0right_handle-input_93a57left_handle",
"type": "customEdge",
"source": "condition_086c0",
"target": "input_93a57",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__input_93a57right_handle-flowNode_4325bleft_handle",
"type": "customEdge",
"source": "input_93a57",
"target": "flowNode_4325b",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
}
],
"nodes": [
{
"id": "start_68c76",
"data": {
"v": 3,
"id": "start_68c76",
"name": "开始",
"type": "start",
"description": "工作流运行的起始节点",
"group_params": [
{
"name": "开场引导",
"params": [
{
"key": "guide_word",
"type": "textarea",
"label": "开场白",
"value": "文章撰写助手。\n"
},
{
"key": "guide_question",
"help": "为用户提供推荐问题,引导用户输入,超过3个时将随机选取3个",
"type": "input_list",
"label": "引导问题",
"value": [
""
]
}
]
},
{
"name": "全局变量",
"params": [
{
"key": "user_info",
"type": "var",
"label": "true",
"value": "",
"global": "key"
},
{
"key": "current_time",
"type": "var",
"label": "当前时间",
"value": "",
"global": "key"
},
{
"key": "chat_history",
"type": "chat_history_num",
"value": 10,
"global": "key"
},
{
"key": "preset_question",
"type": "input_list",
"label": "预置问题列表",
"value": [
{
"key": "fdf2f6",
"value": ""
}
],
"global": "item:input_list"
},
{
"key": "custom_variables",
"help": "true",
"type": "global_var",
"label": "true",
"value": [],
"global": "item:input_list"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 711
},
"position": {
"x": -254.5074365009976,
"y": -54.95034320067019
},
"selected": false
},
{
"id": "condition_086c0",
"data": {
"id": "condition_086c0",
"name": "条件分支-是否为优化改写",
"type": "condition",
"description": "根据条件表达式执行不同的分支",
"group_params": [
{
"params": [
{
"key": "condition",
"type": "condition",
"label": "",
"value": [
{
"id": "f0af1112",
"operator": "and",
"conditions": [
{
"id": "b5744201",
"left_var": "input_c0564.category",
"left_label": "输入/category",
"right_label": "",
"right_value": "改写优化",
"right_value_type": "input",
"comparison_operation": "not_contains"
}
]
}
]
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 562,
"height": 347
},
"position": {
"x": 652.6065106681506,
"y": -56.557347234989656
},
"selected": false
},
{
"id": "condition_e4299",
"data": {
"id": "condition_e4299",
"name": "条件分支-检查错误还是起标题",
"type": "condition",
"description": "根据条件表达式执行不同的分支",
"group_params": [
{
"params": [
{
"key": "condition",
"type": "condition",
"label": "",
"value": [
{
"id": "172c7f82",
"operator": "and",
"conditions": [
{
"id": "1a0126bd",
"left_var": "input_c0564.category",
"left_label": "输入/category",
"right_label": "",
"right_value": "检查错误",
"right_value_type": "input",
"comparison_operation": "contains"
}
]
}
]
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 562,
"height": 347
},
"position": {
"x": 1403.6380617911316,
"y": -53.541044883239984
},
"selected": false
},
{
"id": "flowNode_4325b",
"data": {
"id": "flowNode_4325b",
"name": "条件分支-哪种优化",
"type": "condition",
"description": "根据条件表达式执行不同的分支",
"group_params": [
{
"params": [
{
"key": "condition",
"type": "condition",
"label": "",
"value": [
{
"id": "172c7f82",
"operator": "and",
"conditions": [
{
"id": "1a0126bd",
"left_var": "input_93a57.category2",
"left_label": "选择优化方向/category2",
"right_label": "",
"right_value": "变长",
"right_value_type": "input",
"comparison_operation": "contains"
}
]
},
{
"id": "341a403c",
"operator": "and",
"conditions": [
{
"id": "887e9105",
"left_var": "input_93a57.category2",
"left_label": "选择优化方向/category2",
"right_label": "",
"right_value": "变短",
"right_value_type": "input",
"comparison_operation": "contains"
}
]
}
]
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 562,
"height": 463
},
"position": {
"x": 1710.9835717741546,
"y": 352.22981329527255
},
"selected": false
},
{
"id": "llm_04f45",
"data": {
"v": 2,
"id": "llm_04f45",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "大模型-检查错误",
"type": "llm",
"expand": false,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "你是文章撰写专家,请检查以下文本中的错误,并一一列举出来"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "{{#input_c0564.text_input#}}",
"varZh": {
"input_c0564.a4089e": "输入/a4089e",
"input_c0564.text_input": "输入/text_input"
},
"required": true
},
{
"key": "image_prompt",
"help": "当使用多模态大模型时,可通过此功能传入图片,结合图像内容进行问答",
"type": "image_prompt",
"label": "视觉",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 2357.376350158347,
"y": -99.5882796942481
},
"selected": false
},
{
"id": "llm_0d11d",
"data": {
"v": 2,
"id": "llm_0d11d",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "大模型-起标题",
"type": "llm",
"expand": false,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "你是文章撰写专家,请基于以下文本内容起一个标题"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "{{#input_c0564.text_input#}}",
"varZh": {
"input_93a57.category2": "选择优化方向/category2",
"input_c0564.text_input": "输入/text_input"
},
"required": true
},
{
"key": "image_prompt",
"help": "当使用多模态大模型时,可通过此功能传入图片,结合图像内容进行问答",
"type": "image_prompt",
"label": "视觉",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 2366.37878639579,
"y": 135.57804927695716
},
"selected": false
},
{
"id": "llm_319a5",
"data": {
"v": 2,
"id": "llm_319a5",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "大模型-变长",
"type": "llm",
"expand": false,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "你是文章撰写专家,请将以下内容改写得更长。"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "{{#input_c0564.text_input#}}",
"varZh": {
"input_c0564.text_input": "输入/text_input"
},
"required": true
},
{
"key": "image_prompt",
"help": "当使用多模态大模型时,可通过此功能传入图片,结合图像内容进行问答",
"type": "image_prompt",
"label": "视觉",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 2364.2222119477274,
"y": 311.77105431340004
},
"selected": false
},
{
"id": "llm_fcfd0",
"data": {
"v": 2,
"id": "llm_fcfd0",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "大模型-变短",
"type": "llm",
"expand": false,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "你是文章撰写专家,请将以下内容改写得更短。"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "{{#input_c0564.text_input#}}",
"varZh": {
"input_c0564.text_input": "输入/text_input"
},
"required": true
},
{
"key": "image_prompt",
"help": "当使用多模态大模型时,可通过此功能传入图片,结合图像内容进行问答",
"type": "image_prompt",
"label": "视觉",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 2380.2587980739713,
"y": 523.9445747167125
},
"selected": false
},
{
"id": "llm_9b7ab",
"data": {
"v": 2,
"id": "llm_9b7ab",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "大模型-讽刺口吻",
"type": "llm",
"expand": false,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "你是文章撰写专家,请将以下内容用讽刺的口吻改写一遍。"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "{{#input_c0564.text_input#}}",
"varZh": {
"input_c0564.text_input": "输入/text_input"
},
"required": true
},
{
"key": "image_prompt",
"help": "当使用多模态大模型时,可通过此功能传入图片,结合图像内容进行问答",
"type": "image_prompt",
"label": "视觉",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 2382.1177403285865,
"y": 716.8035163539979
},
"selected": true
},
{
"id": "end_c54b8",
"data": {
"id": "end_c54b8",
"name": "结束",
"type": "end",
"description": "工作流运行到此结束。",
"group_params": []
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 2808.1668882050744,
"y": -42.43221090899556
},
"selected": false
},
{
"id": "end_d3a29",
"data": {
"id": "end_d3a29",
"name": "结束2",
"type": "end",
"description": "工作流运行到此结束。",
"group_params": []
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 2814.629079906689,
"y": 129.02998079261903
},
"selected": false
},
{
"id": "end_95a69",
"data": {
"id": "end_95a69",
"name": "结束3",
"type": "end",
"description": "工作流运行到此结束。",
"group_params": []
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 2807.319452039774,
"y": 319.3509041526474
},
"selected": false
},
{
"id": "end_b740c",
"data": {
"id": "end_b740c",
"name": "结束4",
"type": "end",
"description": "工作流运行到此结束。",
"group_params": []
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 2790.9481643515182,
"y": 514.5879452405269
},
"selected": false
},
{
"id": "end_7a9d0",
"data": {
"id": "end_7a9d0",
"name": "结束5",
"type": "end",
"description": "工作流运行到此结束。",
"group_params": []
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 134
},
"position": {
"x": 2805.2370410878793,
"y": 703.8147945606022
},
"selected": false
},
{
"id": "input_c0564",
"data": {
"v": "3",
"id": "input_c0564",
"tab": {
"value": "form_input",
"options": [
{
"key": "dialog_input",
"help": "true",
"label": "true"
},
{
"key": "form_input",
"help": "true",
"label": "true"
}
]
},
"name": "输入",
"type": "input",
"description": "接收用户在会话页面的输入,支持 2 种形式:对话框输入,表单输入。",
"group_params": [
{
"name": "接收文本",
"params": [
{
"key": "user_input",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
}
]
},
{
"name": "",
"params": [
{
"key": "user_input_file",
"tab": "dialog_input",
"value": true,
"groupTitle": true
},
{
"key": "file_parse_mode",
"tab": "dialog_input",
"type": "select_parsemode",
"value": "extract_text"
},
{
"key": "dialog_files_content",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_files_content_size",
"min": 0,
"tab": "dialog_input",
"type": "char_number",
"label": "true",
"value": 15000
},
{
"key": "dialog_file_accept",
"tab": "dialog_input",
"type": "select_fileaccept",
"label": "true",
"value": "all"
},
{
"key": "dialog_image_files",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_file_paths",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
}
],
"groupKey": "inputfile"
},
{
"name": "",
"params": [
{
"key": "recommended_questions_flag",
"tab": "dialog_input",
"help": "true",
"label": "true",
"value": false,
"hidden": "true",
"groupTitle": true
},
{
"key": "recommended_llm",
"tab": "dialog_input",
"type": "bisheng_model",
"label": "true",
"value": 261,
"required": true,
"placeholder": "true"
},
{
"key": "recommended_system_prompt",
"tab": "dialog_input",
"type": "var_textarea",
"label": "true",
"value": "# Role\n你是一个极具洞察力的\"对话延续预测专家\"。你的任务是根据当前的对话历史,预测用户接下来最有可能输入的 3 条短语或问题。\n\n# Context Awareness\n在生成预测前,请执行以下深度思考步骤:\n1. **意图分析**:用户当前是在寻求事实、表达情绪、请求建议,还是在尝试结束对话?\n2. **逻辑推演**:根据 AI 上一条回复的内容,用户最自然产生的联想或疑问是什么?\n3. **风格对齐**:观察用户的用词习惯(专业、随性、简短还是详细),预测结果需保持语气一致。\n\n# Goals\n- **多样性**:提供不同方向的后续(例如:一个深入探究的问题,一个相关的新话题,一个反馈性评价)。\n- **简洁性**:预测内容应短小精悍,通常不超过 15 个字,方便用户点击。\n- **前瞻性**:能够预判用户的\"痛点\",直接提供解决方案的入口。\n\n# Output Format\n请严格遵守 JSON 格式输出。\n返回一个包含单一键名 \"suggestions\" 的 JSON 对象。\n- 所有字符串必须使用**双引号**。\n- 不要输出 Markdown 代码块标记(如 ```json),直接输出 JSON 字符串。\n**示例:**\n{\"suggestions\": [\"你能举个例子吗?\", \"这个方案的成本是多少?\", \"听起来不错,怎么开始?\"]}",
"required": true
},
{
"key": "recommended_history_num",
"tab": "dialog_input",
"help": "true",
"step": 1,
"type": "slide",
"label": "true",
"scope": [
1,
10
],
"value": 2
}
],
"groupKey": "custom"
},
{
"name": "",
"params": [
{
"key": "form_input",
"tab": "form_input",
"type": "form",
"label": "true",
"value": [
{
"key": "category",
"type": "select",
"value": "帮您做什么",
"options": [
{
"id": "55078e1a",
"text": "检查错误",
"type": ""
},
{
"id": "314f10d4",
"text": "改写优化",
"type": ""
},
{
"id": "beea95fb",
"text": "起一个标题",
"type": ""
}
],
"multiple": false,
"required": true,
"file_path": "file_path",
"file_type": "all",
"image_file": "image_file",
"file_content": "file_content",
"file_parse_mode": "extract_text",
"file_content_size": 15000
},
{
"key": "text_input",
"type": "text",
"value": "需要改写的内容\n\n",
"options": [],
"multiple": false,
"required": true,
"file_path": "file_path",
"file_type": "all",
"image_file": "image_file",
"file_content": "file_content",
"file_parse_mode": "extract_text",
"file_content_size": 15000
}
],
"global": "item:form_input"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 356
},
"position": {
"x": 210.10966500379396,
"y": -57.43844277479269
},
"selected": false
},
{
"id": "input_93a57",
"data": {
"v": "3",
"id": "input_93a57",
"tab": {
"value": "form_input",
"options": [
{
"key": "dialog_input",
"help": "true",
"label": "true"
},
{
"key": "form_input",
"help": "true",
"label": "true"
}
]
},
"name": "选择优化方向",
"type": "input",
"description": "接收用户在会话页面的输入,支持 2 种形式:对话框输入,表单输入。",
"group_params": [
{
"name": "接收文本",
"params": [
{
"key": "user_input",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
}
]
},
{
"name": "",
"params": [
{
"key": "user_input_file",
"tab": "dialog_input",
"value": true,
"groupTitle": true
},
{
"key": "file_parse_mode",
"tab": "dialog_input",
"type": "select_parsemode",
"value": "extract_text"
},
{
"key": "dialog_files_content",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_files_content_size",
"min": 0,
"tab": "dialog_input",
"type": "char_number",
"label": "true",
"value": 15000
},
{
"key": "dialog_file_accept",
"tab": "dialog_input",
"type": "select_fileaccept",
"label": "true",
"value": "all"
},
{
"key": "dialog_image_files",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_file_paths",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
}
],
"groupKey": "inputfile"
},
{
"name": "",
"params": [
{
"key": "recommended_questions_flag",
"tab": "dialog_input",
"help": "true",
"label": "true",
"value": false,
"hidden": "true",
"groupTitle": true
},
{
"key": "recommended_llm",
"tab": "dialog_input",
"type": "bisheng_model",
"label": "true",
"value": 261,
"required": true,
"placeholder": "true"
},
{
"key": "recommended_system_prompt",
"tab": "dialog_input",
"type": "var_textarea",
"label": "true",
"value": "# Role\n你是一个极具洞察力的\"对话延续预测专家\"。你的任务是根据当前的对话历史,预测用户接下来最有可能输入的 3 条短语或问题。\n\n# Context Awareness\n在生成预测前,请执行以下深度思考步骤:\n1. **意图分析**:用户当前是在寻求事实、表达情绪、请求建议,还是在尝试结束对话?\n2. **逻辑推演**:根据 AI 上一条回复的内容,用户最自然产生的联想或疑问是什么?\n3. **风格对齐**:观察用户的用词习惯(专业、随性、简短还是详细),预测结果需保持语气一致。\n\n# Goals\n- **多样性**:提供不同方向的后续(例如:一个深入探究的问题,一个相关的新话题,一个反馈性评价)。\n- **简洁性**:预测内容应短小精悍,通常不超过 15 个字,方便用户点击。\n- **前瞻性**:能够预判用户的\"痛点\",直接提供解决方案的入口。\n\n# Output Format\n请严格遵守 JSON 格式输出。\n返回一个包含单一键名 \"suggestions\" 的 JSON 对象。\n- 所有字符串必须使用**双引号**。\n- 不要输出 Markdown 代码块标记(如 ```json),直接输出 JSON 字符串。\n**示例:**\n{\"suggestions\": [\"你能举个例子吗?\", \"这个方案的成本是多少?\", \"听起来不错,怎么开始?\"]}",
"required": true
},
{
"key": "recommended_history_num",
"tab": "dialog_input",
"help": "true",
"step": 1,
"type": "slide",
"label": "true",
"scope": [
1,
10
],
"value": 2
}
],
"groupKey": "custom"
},
{
"name": "",
"params": [
{
"key": "form_input",
"tab": "form_input",
"type": "form",
"label": "true",
"value": [
{
"key": "category2",
"type": "select",
"value": "需要优化的方向",
"options": [
{
"id": "1df7e6d8",
"text": "变长",
"type": ""
},
{
"id": "e8ce5e3e",
"text": "变短",
"type": ""
},
{
"id": "723fa2e1",
"text": "改成讽刺口吻",
"type": ""
}
],
"multiple": false,
"required": true,
"file_path": "file_path",
"file_type": "all",
"image_file": "image_file",
"file_content": "file_content",
"file_parse_mode": "extract_text",
"file_content_size": 15000
}
],
"global": "item:form_input"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 311
},
"position": {
"x": 1301.034049020076,
"y": 362.6108337624355
},
"selected": false
}
],
"viewport": {
"x": 168.41000286983763,
"y": 188.33690890750776,
"zoom": 0.39845595187329674
}
},
"order_num": 13221748,
"guide_word": null,
"flow_type": 10
},
{
"update_time": "2026-02-05 21:29:08",
"parameters": null,
"name": "大模型竞技场 ",
"description": "功能简介 这是 “大模型竞技场” 工作流,支持 “对话框 / 表单” 2 种输入形式,调用 gpt40mini、混元、qwen 2.5 三个大模型并行处理任务,最后通过 “输出 2” 节点,以无交互、选择型交互或输入型交互方式,反馈模型处理结果 。\n使用说明\n在 “输入” 节点选交互形式(对话框 / 表单),填入内容、上传文件(可选),运行流程。三个大模型会同时处理输入,完成后在 “输出 2” 节点,根据需求选交互类型,查看 / 使用模型输出结果 。",
"flow_id": "fba9c65151184d629348219f05a70e27",
"api_parameters": null,
"create_time": "2026-02-05 21:29:08",
"id": 374,
"data": {
"edges": [
{
"id": "xy-edge__start_68c76right_handle-input_ac896left_handle",
"type": "customEdge",
"source": "start_68c76",
"target": "input_ac896",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__input_ac896right_handle-llm_1c15aleft_handle",
"type": "customEdge",
"source": "input_ac896",
"target": "llm_1c15a",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__input_ac896right_handle-llm_0bbf3left_handle",
"type": "customEdge",
"source": "input_ac896",
"target": "llm_0bbf3",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__input_ac896right_handle-llm_5b4ebleft_handle",
"type": "customEdge",
"source": "input_ac896",
"target": "llm_5b4eb",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_1c15aright_handle-output_074afleft_handle",
"type": "customEdge",
"source": "llm_1c15a",
"target": "output_074af",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_0bbf3right_handle-output_074afleft_handle",
"type": "customEdge",
"source": "llm_0bbf3",
"target": "output_074af",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__llm_5b4ebright_handle-output_074afleft_handle",
"type": "customEdge",
"source": "llm_5b4eb",
"target": "output_074af",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__output_074afright_handle-input_ac896left_handle",
"type": "customEdge",
"source": "output_074af",
"target": "input_ac896",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
}
],
"nodes": [
{
"id": "start_68c76",
"data": {
"v": 3,
"id": "start_68c76",
"name": "开始",
"type": "start",
"description": "工作流运行的起始节点",
"group_params": [
{
"name": "开场引导",
"params": [
{
"key": "guide_word",
"type": "textarea",
"label": "开场白",
"value": "大模型竞技场"
},
{
"key": "guide_question",
"help": "为用户提供推荐问题,引导用户输入,超过3个时将随机选取3个",
"type": "input_list",
"label": "引导问题",
"value": [
"你是谁~",
""
]
}
]
},
{
"name": "全局变量",
"params": [
{
"key": "user_info",
"type": "var",
"label": "true",
"value": "",
"global": "key"
},
{
"key": "current_time",
"type": "var",
"label": "当前时间",
"value": "",
"global": "key"
},
{
"key": "chat_history",
"type": "chat_history_num",
"value": 10,
"global": "key"
},
{
"key": "preset_question",
"type": "input_list",
"label": "预置问题列表",
"value": [
{
"key": "18b2f7",
"value": ""
}
],
"global": "item:input_list"
},
{
"key": "custom_variables",
"help": "true",
"type": "global_var",
"label": "true",
"value": [],
"global": "item:input_list"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 753
},
"position": {
"x": -182.1450323475628,
"y": -13.21802815370333
},
"selected": false
},
{
"id": "llm_1c15a",
"data": {
"v": 2,
"id": "llm_1c15a",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "大模型-gpt4omini ",
"type": "llm",
"expand": true,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "友好的助手"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "用户:{{#input_ac896.user_input#}}你的回复:",
"varZh": {
"input_ac896.user_input": "输入/user_input"
},
"required": true
},
{
"key": "image_prompt",
"help": "当使用多模态大模型时,可通过此功能传入图片,结合图像内容进行问答",
"type": "image_prompt",
"label": "视觉",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": false
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 836
},
"position": {
"x": 660.2576202218669,
"y": -7.589292442416962
},
"selected": false
},
{
"id": "llm_0bbf3",
"data": {
"v": 2,
"id": "llm_0bbf3",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "大模型-混元",
"type": "llm",
"expand": false,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "友好的助手"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "用户:{{#input_ac896.user_input#}}你的回复:",
"varZh": {
"input_ac896.user_input": "输入/user_input"
},
"required": true
},
{
"key": "image_prompt",
"help": "当使用多模态大模型时,可通过此功能传入图片,结合图像内容进行问答",
"type": "image_prompt",
"label": "视觉",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": false
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 135
},
"position": {
"x": 663.5982291778208,
"y": 160.9498553634532
},
"selected": false
},
{
"id": "llm_5b4eb",
"data": {
"v": 2,
"id": "llm_5b4eb",
"tab": {
"value": "single",
"options": [
{
"key": "single",
"label": "单次运行"
},
{
"key": "batch",
"label": "批量运行"
}
]
},
"name": "大模型-qwen 2.5",
"type": "llm",
"expand": true,
"description": "调用大模型回答用户问题或者处理任务。",
"group_params": [
{
"params": [
{
"key": "batch_variable",
"tab": "batch",
"help": "选择需要批处理的变量,将会多次运行本节点,每次运行时从选择的变量中取一项赋值给batch_variable进行处理。",
"type": "user_question",
"label": "批处理变量",
"value": [],
"global": "self",
"linkage": "output",
"required": true,
"placeholder": "请选择批处理变量"
}
]
},
{
"name": "模型设置",
"params": [
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "提示词",
"params": [
{
"key": "system_prompt",
"test": "var",
"type": "var_textarea",
"label": "系统提示词",
"value": "友好的助手"
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "用户:{{#input_ac896.user_input#}}你的回复:",
"varZh": {
"input_ac896.user_input": "输入/user_input"
},
"required": true
},
{
"key": "image_prompt",
"help": "当使用多模态大模型时,可通过此功能传入图片,结合图像内容进行问答",
"type": "image_prompt",
"label": "视觉",
"value": []
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景可开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": false
},
{
"key": "output",
"type": "var",
"label": "输出变量",
"value": [],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 836
},
"position": {
"x": 666.4815464404269,
"y": 386.324186907184
},
"selected": false
},
{
"id": "input_ac896",
"data": {
"v": "3",
"id": "input_ac896",
"tab": {
"value": "dialog_input",
"options": [
{
"key": "dialog_input",
"help": "true",
"label": "true"
},
{
"key": "form_input",
"help": "true",
"label": "true"
}
]
},
"name": "输入",
"type": "input",
"description": "接收用户在会话页面的输入,支持 2 种形式:对话框输入,表单输入。",
"group_params": [
{
"name": "接收文本",
"params": [
{
"key": "user_input",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
}
]
},
{
"name": "",
"params": [
{
"key": "user_input_file",
"tab": "dialog_input",
"value": true,
"groupTitle": true
},
{
"key": "file_parse_mode",
"tab": "dialog_input",
"type": "select_parsemode",
"value": "extract_text"
},
{
"key": "dialog_files_content",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_files_content_size",
"min": 0,
"tab": "dialog_input",
"type": "char_number",
"label": "true",
"value": 15000
},
{
"key": "dialog_file_accept",
"tab": "dialog_input",
"type": "select_fileaccept",
"label": "true",
"value": "all"
},
{
"key": "dialog_image_files",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_file_paths",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
}
],
"groupKey": "inputfile"
},
{
"name": "",
"params": [
{
"key": "recommended_questions_flag",
"tab": "dialog_input",
"help": "true",
"label": "true",
"value": false,
"hidden": "true",
"groupTitle": true
},
{
"key": "recommended_llm",
"tab": "dialog_input",
"type": "bisheng_model",
"label": "true",
"value": 261,
"required": true,
"placeholder": "true"
},
{
"key": "recommended_system_prompt",
"tab": "dialog_input",
"type": "var_textarea",
"label": "true",
"value": "# Role\n你是一个极具洞察力的\"对话延续预测专家\"。你的任务是根据当前的对话历史,预测用户接下来最有可能输入的 3 条短语或问题。\n\n# Context Awareness\n在生成预测前,请执行以下深度思考步骤:\n1. **意图分析**:用户当前是在寻求事实、表达情绪、请求建议,还是在尝试结束对话?\n2. **逻辑推演**:根据 AI 上一条回复的内容,用户最自然产生的联想或疑问是什么?\n3. **风格对齐**:观察用户的用词习惯(专业、随性、简短还是详细),预测结果需保持语气一致。\n\n# Goals\n- **多样性**:提供不同方向的后续(例如:一个深入探究的问题,一个相关的新话题,一个反馈性评价)。\n- **简洁性**:预测内容应短小精悍,通常不超过 15 个字,方便用户点击。\n- **前瞻性**:能够预判用户的\"痛点\",直接提供解决方案的入口。\n\n# Output Format\n请严格遵守 JSON 格式输出。\n返回一个包含单一键名 \"suggestions\" 的 JSON 对象。\n- 所有字符串必须使用**双引号**。\n- 不要输出 Markdown 代码块标记(如 ```json),直接输出 JSON 字符串。\n**示例:**\n{\"suggestions\": [\"你能举个例子吗?\", \"这个方案的成本是多少?\", \"听起来不错,怎么开始?\"]}",
"required": true
},
{
"key": "recommended_history_num",
"tab": "dialog_input",
"help": "true",
"step": 1,
"type": "slide",
"label": "true",
"scope": [
1,
10
],
"value": 2
}
],
"groupKey": "custom"
},
{
"name": "",
"params": [
{
"key": "form_input",
"tab": "form_input",
"type": "form",
"label": "true",
"value": [],
"global": "item:form_input"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 572
},
"position": {
"x": 241.1814647549988,
"y": -10.967656001848963
},
"selected": false
},
{
"id": "output_074af",
"data": {
"v": "2",
"id": "output_074af",
"name": "输出",
"type": "output",
"description": "可向用户发送文本和文件,并且支持进行更丰富的交互,例如请求用户批准进行某项敏感操作、允许用户在模型输出内容的基础上直接修改并提交。",
"group_params": [
{
"params": [
{
"key": "message",
"type": "var_textarea_file",
"label": "true",
"value": {
"msg": "\n# GPT-4o-mini \n{{#llm_1c15a.output#}}\n\n\n# 混元 \n{{#llm_0bbf3.output#}} \n\n\n# 千问 \n{{#llm_5b4eb.output#}} \n\n\n\n",
"files": []
},
"varZh": {
"llm_0bbf3.output": "大模型-混元/output",
"llm_1c15a.output": "大模型-gpt4omini/output",
"llm_5b4eb.output": "大模型-qwen 2.5/output"
},
"global": "key",
"required": true,
"placeholder": "true"
},
{
"key": "output_result",
"type": "output_form",
"label": "用户输入内容",
"value": {
"type": "",
"value": ""
},
"global": "value.type=input",
"options": [],
"required": false
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 465
},
"position": {
"x": 1116.4196010933445,
"y": -4.140951751970215
},
"selected": true
}
],
"viewport": {
"x": -397.1989979664372,
"y": 59.476134021867665,
"zoom": 1.0694829253528593
}
},
"order_num": 13287283,
"guide_word": null,
"flow_type": 10
},
{
"update_time": "2026-02-05 21:44:36",
"parameters": null,
"name": "先检索 QA 后检索文档知识库问答",
"description": "功能简介\n这是 “先检索 QA 后检索文档知识” 工作流,通过 “开始” 引导对话,“输入” 模块采集用户内容,先经 “QA 知识检索” 查问答库,无结果则触发 “文档知识问答” 补充回答,保障信息覆盖。\n使用说明\n在 “开始” 填引导语、示例问题;“输入” 选录入方式,设置文件参数。\n运行流程,优先用 “QA 知识检索” 查问答库;无结果自动走 “文档知识问答”。\n测试无误后点 “上线”,即可接入业务,接收用户提问并智能回答 。",
"flow_id": "6445ac25c5c0433091df2827963a762e",
"api_parameters": null,
"create_time": "2026-02-05 21:44:36",
"id": 376,
"data": {
"edges": [
{
"id": "xy-edge__condition_6c26160b32025-output_bf694left_handle",
"type": "customEdge",
"source": "condition_6c261",
"target": "output_bf694",
"animated": true,
"sourceHandle": "60b32025",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__condition_6c261right_handle-rag_01223left_handle",
"type": "customEdge",
"source": "condition_6c261",
"target": "rag_01223",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__qa_retriever_3bb15right_handle-condition_6c261left_handle",
"type": "customEdge",
"source": "qa_retriever_3bb15",
"target": "condition_6c261",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__start_d8f27right_handle-input_46939left_handle",
"type": "customEdge",
"source": "start_d8f27",
"target": "input_46939",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__input_46939right_handle-qa_retriever_3bb15left_handle",
"type": "customEdge",
"source": "input_46939",
"target": "qa_retriever_3bb15",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__output_bf694right_handle-input_46939left_handle",
"type": "customEdge",
"source": "output_bf694",
"target": "input_46939",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
},
{
"id": "xy-edge__rag_01223right_handle-input_46939left_handle",
"type": "customEdge",
"source": "rag_01223",
"target": "input_46939",
"animated": true,
"sourceHandle": "right_handle",
"targetHandle": "left_handle"
}
],
"nodes": [
{
"id": "start_d8f27",
"data": {
"v": 3,
"id": "start_d8f27",
"name": "开始",
"type": "start",
"description": "工作流运行的起始节点。",
"group_params": [
{
"name": "开场引导",
"params": [
{
"key": "guide_word",
"type": "textarea",
"label": "开场白",
"value": "先检索QA库中是否有类似问答,如果没有找到答案则进行文档知识库问答",
"placeholder": "每次工作流开始执行时向用户发送此消息,支持 Markdown 格式,为空时不发送。"
},
{
"key": "guide_question",
"help": "为用户提供推荐问题,引导用户输入,超过3个时将随机选取3个。",
"type": "input_list",
"label": "引导问题",
"value": [
"毕昇是什么?",
"大模型应用开发平台有哪些?",
""
],
"placeholder": "请输入引导问题"
}
]
},
{
"name": "全局变量",
"params": [
{
"key": "user_info",
"type": "var",
"label": "true",
"value": "",
"global": "key"
},
{
"key": "current_time",
"type": "var",
"label": "当前时间",
"value": "",
"global": "key"
},
{
"key": "chat_history",
"type": "chat_history_num",
"value": 10,
"global": "key"
},
{
"key": "preset_question",
"help": "适合文档审核、报告生成等场景,利用提前预置的问题批量进行 RAG 问答。",
"type": "input_list",
"label": "预置问题列表",
"value": [
{
"key": "0023a4",
"value": ""
}
],
"global": "item:input_list",
"placeholder": "输入批量预置问题"
},
{
"key": "custom_variables",
"help": "true",
"type": "global_var",
"label": "true",
"value": [],
"global": "item:input_list"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 793
},
"position": {
"x": -322.001475694825,
"y": -74.5314588248279
},
"selected": false
},
{
"id": "condition_6c261",
"data": {
"id": "condition_6c261",
"name": "条件分支",
"type": "condition",
"description": "根据条件表达式执行不同的分支。",
"group_params": [
{
"params": [
{
"key": "condition",
"type": "condition",
"label": "",
"value": [
{
"id": "60b32025",
"operator": "and",
"conditions": [
{
"id": "37b199ff",
"left_var": "qa_retriever_3bb15.retrieved_result",
"left_label": "retrieved_result",
"right_label": "",
"right_value": "",
"right_value_type": "input",
"comparison_operation": "is_not_empty"
}
]
}
]
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 322,
"height": 348
},
"position": {
"x": 1041.11058653272,
"y": -61.43751998557724
},
"selected": false
},
{
"id": "output_bf694",
"data": {
"v": 2,
"id": "output_bf694",
"name": "输出",
"type": "output",
"description": "可向用户发送消息,并且支持进行更丰富的交互,例如请求用户批准进行某项敏感操作、允许用户在模型输出内容的基础上直接修改并提交。",
"group_params": [
{
"params": [
{
"key": "message",
"type": "var_textarea_file",
"label": "消息内容",
"value": {
"msg": "{{#qa_retriever_3bb15.retrieved_result#}}",
"files": []
},
"varZh": {
"qa_retriever_12db4.retrieved_result": "QA知识库检索2/retrieved_result",
"qa_retriever_3bb15.retrieved_result": "QA知识库检索/retrieved_result",
"qa_retriever_913d3.retrieval_result": "QA知识库检索/retrieval_result"
},
"global": "key",
"required": true,
"placeholder": "输入需要发送给用户的消息,例如“接下来我将执行 XX 操作,请您确认”,“以下是我的初版草稿,您可以在其基础上进行修改”"
},
{
"key": "output_result",
"type": "output_form",
"label": "用户输入内容",
"value": {
"type": "",
"value": ""
},
"global": "value.type=input",
"options": [],
"required": false
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 465
},
"position": {
"x": 1615.0030925136334,
"y": -284.24496879143226
},
"selected": false
},
{
"id": "rag_01223",
"data": {
"v": 3,
"id": "rag_01223",
"name": "文档知识库问答",
"type": "rag",
"expand": true,
"description": "根据用户问题从知识库中检索相关内容,结合检索结果调用大模型生成最终结果,支持多个问题并行执行。",
"group_params": [
{
"name": "知识库检索设置",
"params": [
{
"key": "user_question",
"help": "当选择多个问题时,将会多次运行本节点,每次运行时从批量问题中取一项进行处理。",
"test": "var",
"type": "user_question",
"label": "用户问题",
"value": [
"input_46939.user_input"
],
"varZh": {
"input_46939.user_input": "输入/user_input",
"input_eb5c4.user_input": "输入/user_input"
},
"global": "self=user_prompt",
"linkage": "output_user_input",
"required": true,
"placeholder": "请选择用户问题"
},
{
"key": "knowledge",
"type": "knowledge_select_multi",
"label": "检索范围",
"value": {
"type": "knowledge",
"value": [
{
"key": 2941,
"label": "230 release知识库回归"
}
]
},
"required": true,
"placeholder": "请选择知识库"
},
{
"key": "metadata_filter",
"type": "metadata_filter",
"label": "true",
"value": {
"enabled": false
}
},
{
"key": "advanced_retrieval_switch",
"type": "search_switch",
"label": "true",
"value": {
"user_auth": false,
"rerank_flag": false,
"rerank_model": "",
"search_switch": true,
"vector_weight": 0.5,
"keyword_weight": 0.5,
"max_chunk_size": 15000
}
},
{
"key": "retrieved_result",
"type": "var",
"label": "检索结果",
"global": "self=user_prompt"
}
]
},
{
"name": "AI回复生成设置",
"params": [
{
"key": "system_prompt",
"type": "var_textarea",
"label": "系统提示词",
"value": "你是一个知识库问答助手: \n1.用中文回答用户问题,并且答案要严谨专业。\n2.你需要依据【参考文本】中的内容来回答,当【参考文本】中有明确与用户问题相关的内容时才进行回答,不可根据自己的知识来回答。\n3.由于【参考文本】可能包含多个来自不同信息源的信息,所以根据这些不同的信息源可能得出有差异甚至冲突的答案,当发现这种情况时,这些答案都列举出来;如果没有冲突或差异,则只需要给出一个最终结果。\n4.若【参考文本】中内容与用户问题不相关则回复“没有找到相关内容”。",
"required": true
},
{
"key": "user_prompt",
"test": "var",
"type": "var_textarea",
"label": "用户提示词",
"value": "用户问题:{{#rag_01223.user_question#}}\n参考文本:{{#rag_01223.retrieved_result#}}\n你的回答:",
"varZh": {
"rag_01223.user_question": "user_question",
"rag_01223.retrieved_result": "retrieved_result"
},
"required": true
},
{
"key": "model_id",
"type": "bisheng_model",
"label": "模型",
"value": 261,
"required": true,
"placeholder": "请选择模型"
},
{
"key": "temperature",
"step": 0.1,
"type": "slide",
"label": "温度",
"scope": [
0,
2
],
"value": 0.7
}
]
},
{
"name": "输出",
"params": [
{
"key": "output_user",
"help": "一般在问答等场景开启,文档审核、报告生成等场景可关闭。",
"type": "switch",
"label": "将输出结果展示在会话中",
"value": true
},
{
"key": "output_user_input",
"type": "var",
"label": "输出变量",
"value": [
{
"key": "output_user_input",
"label": "output_user_input"
}
],
"global": "code:value.map(el => ({ label: el.label, value: el.key }))"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 1278
},
"position": {
"x": 1640.164090703263,
"y": 286.0127309008938
},
"selected": false
},
{
"id": "qa_retriever_3bb15",
"data": {
"id": "qa_retriever_3bb15",
"name": "QA知识库检索",
"type": "qa_retriever",
"expand": true,
"description": "从 QA 知识库中检索问题以及对应的答案。",
"group_params": [
{
"name": "检索设置",
"params": [
{
"key": "user_question",
"test": "var",
"type": "var_select",
"label": "输入变量",
"value": "input_46939.user_input",
"varZh": {
"input_46939.user_input": "输入/user_input",
"input_eb5c4.user_input": "输入/user_input"
},
"required": true,
"placeholder": "请选择检索问题"
},
{
"key": "qa_knowledge_id",
"type": "qa_select_multi",
"label": "QA知识库",
"value": [
{
"key": 1175,
"label": "毕昇 QA 知识库"
}
],
"required": true,
"placeholder": "请选择QA知识库"
},
{
"key": "score",
"help": "低于阈值的结果将会被过滤。",
"step": 0.01,
"type": "slide",
"label": "相似度阈值",
"scope": [
0.01,
0.99
],
"value": 0.9
}
]
},
{
"name": "输出",
"params": [
{
"key": "retrieved_result",
"type": "var",
"label": "检索结果",
"value": "",
"global": "key"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 497
},
"position": {
"x": 573.66669672053,
"y": -60.24872646754291
},
"selected": false
},
{
"id": "input_46939",
"data": {
"v": "3",
"id": "input_46939",
"tab": {
"value": "dialog_input",
"options": [
{
"key": "dialog_input",
"help": "true",
"label": "true"
},
{
"key": "form_input",
"help": "true",
"label": "true"
}
]
},
"name": "输入",
"type": "input",
"description": "接收用户在会话页面的输入,支持 2 种形式:对话框输入,表单输入。",
"group_params": [
{
"name": "接收文本",
"params": [
{
"key": "user_input",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
}
]
},
{
"name": "",
"params": [
{
"key": "user_input_file",
"tab": "dialog_input",
"value": true,
"groupTitle": true
},
{
"key": "file_parse_mode",
"tab": "dialog_input",
"type": "select_parsemode",
"value": "extract_text"
},
{
"key": "dialog_files_content",
"tab": "dialog_input",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_files_content_size",
"min": 0,
"tab": "dialog_input",
"type": "char_number",
"label": "true",
"value": 15000
},
{
"key": "dialog_file_accept",
"tab": "dialog_input",
"type": "select_fileaccept",
"label": "true",
"value": "all"
},
{
"key": "dialog_image_files",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
},
{
"key": "dialog_file_paths",
"tab": "dialog_input",
"help": "true",
"type": "var",
"label": "true",
"global": "key"
}
],
"groupKey": "inputfile"
},
{
"name": "",
"params": [
{
"key": "recommended_questions_flag",
"tab": "dialog_input",
"help": "true",
"label": "true",
"value": false,
"hidden": "true",
"groupTitle": true
},
{
"key": "recommended_llm",
"tab": "dialog_input",
"type": "bisheng_model",
"label": "true",
"value": 261,
"required": true,
"placeholder": "true"
},
{
"key": "recommended_system_prompt",
"tab": "dialog_input",
"type": "var_textarea",
"label": "true",
"value": "# Role\n你是一个极具洞察力的\"对话延续预测专家\"。你的任务是根据当前的对话历史,预测用户接下来最有可能输入的 3 条短语或问题。\n\n# Context Awareness\n在生成预测前,请执行以下深度思考步骤:\n1. **意图分析**:用户当前是在寻求事实、表达情绪、请求建议,还是在尝试结束对话?\n2. **逻辑推演**:根据 AI 上一条回复的内容,用户最自然产生的联想或疑问是什么?\n3. **风格对齐**:观察用户的用词习惯(专业、随性、简短还是详细),预测结果需保持语气一致。\n\n# Goals\n- **多样性**:提供不同方向的后续(例如:一个深入探究的问题,一个相关的新话题,一个反馈性评价)。\n- **简洁性**:预测内容应短小精悍,通常不超过 15 个字,方便用户点击。\n- **前瞻性**:能够预判用户的\"痛点\",直接提供解决方案的入口。\n\n# Output Format\n请严格遵守 JSON 格式输出。\n返回一个包含单一键名 \"suggestions\" 的 JSON 对象。\n- 所有字符串必须使用**双引号**。\n- 不要输出 Markdown 代码块标记(如 ```json),直接输出 JSON 字符串。\n**示例:**\n{\"suggestions\": [\"你能举个例子吗?\", \"这个方案的成本是多少?\", \"听起来不错,怎么开始?\"]}",
"required": true
},
{
"key": "recommended_history_num",
"tab": "dialog_input",
"help": "true",
"step": 1,
"type": "slide",
"label": "true",
"scope": [
1,
10
],
"value": 2
}
],
"groupKey": "custom"
},
{
"name": "",
"params": [
{
"key": "form_input",
"tab": "form_input",
"type": "form",
"label": "true",
"value": [],
"global": "item:form_input"
}
]
}
]
},
"type": "flowNode",
"dragging": false,
"measured": {
"width": 334,
"height": 572
},
"position": {
"x": 143.54412024155707,
"y": -86.67644166492184
},
"selected": false
}
],
"viewport": {
"x": 596.1815863554245,
"y": 166.1856841363313,
"zoom": 0.4404147755670133
}
},
"order_num": 13418353,
"guide_word": null,
"flow_type": 10
}
]
================================================
FILE: src/backend/bisheng/database/models/__init__.py
================================================
================================================
FILE: src/backend/bisheng/database/models/assistant.py
================================================
from datetime import datetime
from enum import Enum
from typing import List, Optional, Tuple
from sqlalchemy import JSON, Column, DateTime, Text, and_, func, or_, text
from sqlmodel import Field, select, col
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum
from bisheng.common.models.base import SQLModelSerializable
from bisheng.common.services import telemetry_service
from bisheng.core.database import get_sync_db_session, get_async_db_session
from bisheng.core.logger import trace_id_var
from bisheng.database.models.role_access import AccessType, RoleAccess
from bisheng.utils import generate_uuid
class AssistantStatus(Enum):
OFFLINE = 1
ONLINE = 2
class AssistantBase(SQLModelSerializable):
id: Optional[str] = Field(default_factory=generate_uuid, nullable=False, primary_key=True,
description='Uniqueness quantificationID')
name: str = Field(default='', description='The assistant name.')
logo: str = Field(default='', description='logoimage URL')
desc: str = Field(default='', sa_column=Column(Text), description='Assistant description')
system_prompt: str = Field(default='', sa_column=Column(Text), description='System Prompt')
prompt: str = Field(default='', sa_column=Column(Text), description='User Visible Descriptor')
guide_word: Optional[str] = Field(default='', sa_column=Column(Text), description='Ice Breaker ')
guide_question: Optional[List] = Field(default_factory=list, sa_column=Column(JSON),
description='Facilitation Questions')
model_name: str = Field(default='', description='Corresponds to the only model in the model managementID')
temperature: float = Field(default=0.5, description='Model Temperature')
max_token: int = Field(default=32000, description='MaxtokenQuantity')
status: int = Field(default=AssistantStatus.OFFLINE.value, description='Whether the assistant is online')
user_id: int = Field(default=0, description='Create UserID')
is_delete: int = Field(default=0, description='Remove logo')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class AssistantLinkBase(SQLModelSerializable):
id: Optional[int] = Field(default=None, nullable=False, primary_key=True, description='Uniqueness quantificationID')
assistant_id: Optional[str] = Field(default=0, index=True, description='assistantID')
tool_id: Optional[int] = Field(default=0, index=True, description='ToolsID')
flow_id: Optional[str] = Field(default='', index=True, description='SkillID')
knowledge_id: Optional[int] = Field(default=0, index=True, description='The knowledge base uponID')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class Assistant(AssistantBase, table=True):
id: str = Field(default_factory=generate_uuid, primary_key=True, unique=True)
class AssistantLink(AssistantLinkBase, table=True):
pass
class AssistantDao(AssistantBase):
@classmethod
def create_assistant(cls, data: Assistant) -> Assistant:
with get_sync_db_session() as session:
session.add(data)
session.commit()
session.refresh(data)
return data
@classmethod
def update_assistant(cls, data: Assistant) -> Assistant:
with get_sync_db_session() as session:
session.add(data)
session.commit()
session.refresh(data)
return data
@classmethod
def delete_assistant(cls, data: Assistant) -> Assistant:
with get_sync_db_session() as session:
data.is_delete = 1
session.add(data)
session.commit()
session.refresh(data)
return data
@classmethod
def get_one_assistant(cls, assistant_id: str) -> Assistant:
with get_sync_db_session() as session:
statement = select(Assistant).where(Assistant.id == assistant_id)
return session.exec(statement).first()
@classmethod
async def aget_one_assistant(cls, assistant_id: str) -> Assistant:
statement = select(Assistant).where(Assistant.id == assistant_id)
async with get_async_db_session() as session:
return (await session.exec(statement)).first()
@classmethod
def get_assistants_by_ids(cls, assistant_ids: List[str]) -> List[Assistant]:
if not assistant_ids:
return []
with get_sync_db_session() as session:
statement = select(Assistant).where(Assistant.id.in_(assistant_ids))
return session.exec(statement).all()
@classmethod
async def aget_assistants_by_ids(cls, assistant_ids: List[str]) -> List[Assistant]:
if not assistant_ids:
return []
statement = select(Assistant).where(col(Assistant.id).in_(assistant_ids))
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
def get_assistant_by_name_user_id(cls, name: str, user_id: int) -> Assistant:
with get_sync_db_session() as session:
statement = select(Assistant).filter(Assistant.name == name,
Assistant.user_id == user_id,
Assistant.is_delete == 0)
return session.exec(statement).first()
@classmethod
def get_assistants(cls, user_id: int, name: str, assistant_ids_extra: List[str],
status: Optional[int], page: int, limit: int, assistant_ids: List[str] = None) -> (
List[Assistant], int):
with get_sync_db_session() as session:
count_statement = session.query(func.count(
Assistant.id)).where(Assistant.is_delete == 0)
statement = select(Assistant).where(Assistant.is_delete == 0)
if assistant_ids_extra:
# Membutuhkanor Requirements to join
statement = statement.where(
or_(Assistant.id.in_(assistant_ids_extra), Assistant.user_id == user_id))
count_statement = count_statement.where(
or_(Assistant.id.in_(assistant_ids_extra), Assistant.user_id == user_id))
else:
statement = statement.where(Assistant.user_id == user_id)
count_statement = count_statement.where(Assistant.user_id == user_id)
if assistant_ids:
statement = statement.where(Assistant.id.in_(assistant_ids))
count_statement = count_statement.where(Assistant.id.in_(assistant_ids))
if name:
statement = statement.where(or_(
Assistant.name.like(f'%{name}%'),
Assistant.desc.like(f'%{name}%')
))
count_statement = count_statement.where(or_(
Assistant.name.like(f'%{name}%'),
Assistant.desc.like(f'%{name}%')
))
if status is not None:
statement = statement.where(Assistant.status == status)
count_statement = count_statement.where(Assistant.status == status)
if limit == 0 and page == 0:
# Get all, no pagination
statement = statement.order_by(Assistant.update_time.desc())
else:
statement = statement.offset(
(page - 1) * limit).limit(limit).order_by(Assistant.update_time.desc())
return session.exec(statement).all(), session.exec(count_statement).scalar()
@classmethod
def get_all_online_assistants(cls, flow_ids: List[str]) -> List[Assistant]:
""" Get all live assistants """
statement = select(Assistant).filter(Assistant.status == AssistantStatus.ONLINE.value,
Assistant.is_delete == 0)
if flow_ids:
statement = statement.where(Assistant.flow_id.in_(flow_ids))
statement = statement.order_by(Assistant.update_time.desc())
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
def get_all_assistants(cls, name: str, page: int, limit: int, assistant_ids: List[str] = None,
status: int = None) -> (List[Assistant], int):
with get_sync_db_session() as session:
statement = select(Assistant).where(Assistant.is_delete == 0)
count_statement = session.query(func.count(
Assistant.id)).where(Assistant.is_delete == 0)
if name:
statement = statement.where(or_(
Assistant.name.like(f'%{name}%'),
Assistant.desc.like(f'%{name}%')
))
count_statement = count_statement.where(or_(
Assistant.name.like(f'%{name}%'),
Assistant.desc.like(f'%{name}%')
))
if assistant_ids:
statement = statement.where(Assistant.id.in_(assistant_ids))
count_statement = count_statement.where(Assistant.id.in_(assistant_ids))
if status is not None:
statement = statement.where(Assistant.status == status)
count_statement = count_statement.where(Assistant.status == status)
if page and limit:
statement = statement.offset(
(page - 1) * limit
).limit(limit)
statement = statement.order_by(Assistant.update_time.desc())
return session.exec(statement).all(), session.exec(count_statement).scalar()
@classmethod
def get_assistants_by_access(cls, role_id: int, name: str, page_size: int,
page_num: int) -> List[Tuple[Assistant, RoleAccess]]:
statment = select(Assistant,
RoleAccess).join(RoleAccess,
and_(RoleAccess.role_id == role_id,
RoleAccess.type == AccessType.ASSISTANT_READ.value,
RoleAccess.third_id == Assistant.id),
isouter=True).where(Assistant.is_delete == 0)
if name:
statment = statment.where(Assistant.name.like('%' + name + '%'))
if page_num and page_size and page_num != 'undefined':
page_num = int(page_num)
statment = statment.order_by(RoleAccess.type.desc()).order_by(
Assistant.update_time.desc()).offset((page_num - 1) * page_size).limit(page_size)
with get_sync_db_session() as session:
return session.exec(statment).all()
@classmethod
def get_count_by_filters(cls, filters: List) -> int:
with get_sync_db_session() as session:
count_statement = session.query(func.count(Assistant.id))
filters.append(Assistant.is_delete == 0)
return session.exec(count_statement.where(*filters)).scalar()
@classmethod
def filter_assistant_by_id(cls, assistant_ids: List[str], keywords: str = None, page: int = 0,
limit: int = 0) -> (List[Assistant], int):
"""
Based on keywords and assistantsidFilter out corresponding assistants
"""
statement = select(Assistant).where(Assistant.is_delete == 0)
count_statement = select(func.count(Assistant.id)).where(Assistant.is_delete == 0)
if assistant_ids:
statement = statement.where(Assistant.id.in_(assistant_ids))
count_statement = count_statement.where(Assistant.id.in_(assistant_ids))
if keywords:
statement = statement.where(or_(
Assistant.name.like(f'%{keywords}%'),
Assistant.desc.like(f'%{keywords}%')
))
count_statement = count_statement.where(or_(
Assistant.name.like(f'%{keywords}%'),
Assistant.desc.like(f'%{keywords}%')
))
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
statement = statement.order_by(Assistant.update_time.desc())
with get_sync_db_session() as session:
result = session.exec(statement).all()
return result, session.scalar(count_statement)
class AssistantLinkDao(AssistantLink):
@classmethod
def insert_batch(cls,
assistant_id: str,
tool_list: List[int] = None,
flow_list: List[str] = None):
if not tool_list and not flow_list:
return []
with get_sync_db_session() as session:
if tool_list:
for one in tool_list:
if one == 0:
continue
session.add(AssistantLink(assistant_id=assistant_id, tool_id=one))
if flow_list:
for one in flow_list:
if not one:
continue
session.add(AssistantLink(assistant_id=assistant_id, flow_id=one))
session.commit()
@classmethod
async def get_assistant_link(cls, assistant_id: str) -> List[AssistantLink]:
async with get_async_db_session() as session:
statement = select(AssistantLink).where(AssistantLink.assistant_id == assistant_id)
result = await session.exec(statement)
return result.all()
@classmethod
def update_assistant_tool(cls, assistant_id: str, tool_list: List[int]):
with get_sync_db_session() as session:
session.query(AssistantLink).filter(AssistantLink.assistant_id == assistant_id,
AssistantLink.tool_id != 0).delete()
for one in tool_list:
if one == 0:
continue
session.add(AssistantLink(assistant_id=assistant_id, tool_id=one))
session.commit()
@classmethod
def update_assistant_flow(cls, assistant_id: str, flow_list: List[str]):
with get_sync_db_session() as session:
session.query(AssistantLink).filter(AssistantLink.assistant_id == assistant_id,
AssistantLink.flow_id != '',
AssistantLink.knowledge_id == 0).delete()
for one in flow_list:
if not one:
continue
session.add(AssistantLink(assistant_id=assistant_id, flow_id=one))
session.commit()
@classmethod
def update_assistant_knowledge(cls, assistant_id: str, knowledge_list: List[int],
flow_id: str):
# Must have skills when saving knowledge base associationsID
with get_sync_db_session() as session:
session.query(AssistantLink).filter(AssistantLink.assistant_id == assistant_id,
AssistantLink.knowledge_id != 0).delete()
for one in knowledge_list:
if one == 0:
continue
session.add(
AssistantLink(assistant_id=assistant_id, knowledge_id=one, flow_id=flow_id))
session.commit()
================================================
FILE: src/backend/bisheng/database/models/audit_log.py
================================================
from datetime import datetime
from enum import Enum
from typing import List, Optional
from sqlmodel import Field, select, Column, DateTime, text, Text, func, or_, JSON, and_
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session, get_async_db_session
from bisheng.utils import generate_uuid
# System Module Enumeration
class SystemId(Enum):
CHAT = "chat" # Sessions
BUILD = "build" # Build.
KNOWLEDGE = "knowledge" # The knowledge base upon
SYSTEM = "system" # System
DASHBOARD = "dashboard" # KANBAN
# Action Behavior Enumeration
class EventType(Enum):
CREATE_CHAT = "create_chat" # New Session
DELETE_CHAT = "delete_chat" # Delete Thread
CREATE_BUILD = "create_build" # New App
UPDATE_BUILD = "update_build" # Edit App Page
DELETE_BUILD = "delete_build" # Delete App?
CREATE_KNOWLEDGE = "create_knowledge" # New Knowledge Base
DELETE_KNOWLEDGE = "delete_knowledge" # Delete Knowledge Base
UPLOAD_FILE = "upload_file" # Knowledge Base Upload Files
DELETE_FILE = "delete_file" # Knowledge Base Delete File
UPDATE_USER = "update_user" # Edit account
FORBID_USER = "forbid_user" # Deactivate user
RECOVER_USER = "recover_user" # Enable User
CREATE_USER_GROUP = "create_user_group" # Add Usergroup
DELETE_USER_GROUP = "delete_user_group" # Can delete existing usergroups
UPDATE_USER_GROUP = "update_user_group" # Can edit existing usergroups
CREATE_ROLE = "create_role" # Create a Role
DELETE_ROLE = "delete_role" # Delete a Role
UPDATE_ROLE = "update_role" # Edit a Role
ADD_TOOL = "add_tool" # Add Widget
UPDATE_TOOL = "update_tool"
DELETE_TOOL = "delete_tool"
USER_LOGIN = "user_login" # Login Pengguna
CREATE_DASHBOARD = "create_dashboard"
UPDATE_DASHBOARD = "update_dashboard"
DELETE_DASHBOARD = "delete_dashboard"
# Action object type enumeration
class ObjectType(Enum):
NONE = "none" # W/O
FLOW = "flow" # Skill
WORK_FLOW = "work_flow" # The Workflow
ASSISTANT = "assistant" # assistant
WORKSTATION = "workstation" # Workstation
KNOWLEDGE = "knowledge" # The knowledge base upon
FILE = "file" # Doc.
USER_CONF = "user_conf" # User Configuration
USER_GROUP_CONF = "user_group_conf" # User Group Configuration
ROLE_CONF = "role_conf" # Configuration of user roles
TOOL = "tool"
DASHBOARD = "dashboard" # KANBAN
class AuditLogBase(SQLModelSerializable):
"""
Audit Log Table
"""
operator_id: int = Field(index=True, description="Operating User'sID")
operator_name: Optional[str] = Field(description="Username")
group_ids: Optional[List[int | str]] = Field(sa_column=Column(JSON),
description="Belongs to a user groupIDVertical")
system_id: Optional[str] = Field(index=True, description="Module Item")
event_type: Optional[str] = Field(index=True, description="Operation behaviors")
object_type: Optional[str] = Field(index=True, description="Action object type")
object_id: Optional[str] = Field(index=True, description="Operation ObjectID")
object_name: Optional[str] = Field(sa_column=Column(Text), description="Action object name")
note: Optional[str] = Field(sa_column=Column(Text), description="Action notes")
ip_address: Optional[str] = Field(index=True,
description="Client's at time of operationIPAddress:")
create_time: Optional[datetime] = Field(sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')), description="operate time")
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class AuditLog(AuditLogBase, table=True):
# id = 2 Represents the default user group
id: str = Field(default_factory=generate_uuid, primary_key=True, index=True, description="primary keyuuidFormat")
class AuditLogDao(AuditLogBase):
@classmethod
async def get_audit_logs(cls, group_ids: List[int], operator_ids: List[int] = 0,
start_time: datetime = None,
end_time: datetime = None, system_id: str = None, event_type: str = None,
page: int = 0, limit: int = 0) -> (List[AuditLog], int):
"""
Filter logs by user group
"""
statement = select(AuditLog)
count_statement = select(func.count(AuditLog.id))
if group_ids:
group_filters = []
for one in group_ids:
group_filters.append(func.json_contains(AuditLog.group_ids, str(one)))
statement = statement.where(or_(*group_filters))
count_statement = count_statement.where(or_(*group_filters))
if operator_ids:
statement = statement.where(AuditLog.operator_id.in_(operator_ids))
count_statement = count_statement.where(AuditLog.operator_id.in_(operator_ids))
if start_time:
statement = statement.where(AuditLog.create_time >= start_time)
count_statement = count_statement.where(AuditLog.create_time >= start_time)
if end_time:
statement = statement.where(AuditLog.create_time <= end_time)
count_statement = count_statement.where(AuditLog.create_time <= end_time)
if system_id:
statement = statement.where(AuditLog.system_id == system_id)
count_statement = count_statement.where(AuditLog.system_id == system_id)
if event_type:
statement = statement.where(AuditLog.event_type == event_type)
count_statement = count_statement.where(AuditLog.event_type == event_type)
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit).order_by(AuditLog.create_time.desc())
with get_sync_db_session() as session:
return session.exec(statement).all(), session.scalar(count_statement)
@classmethod
def insert_audit_logs(cls, audit_logs: List[AuditLog]):
with get_sync_db_session() as session:
session.add_all(audit_logs)
session.commit()
@classmethod
async def ainsert_audit_logs(cls, audit_logs: List[AuditLog]):
async with get_async_db_session() as session:
session.add_all(audit_logs)
await session.commit()
@classmethod
def get_all_operators(cls, group_ids: List[int]):
statement = select(AuditLog.operator_id, AuditLog.operator_name).distinct()
if group_ids:
group_filters = []
for one in group_ids:
group_filters.append(func.json_contains(AuditLog.group_ids, str(one)))
statement = statement.where(or_(*group_filters))
with get_sync_db_session() as session:
return session.exec(statement).all()
================================================
FILE: src/backend/bisheng/database/models/component.py
================================================
from datetime import datetime
from typing import Any, List, Optional
from sqlmodel import JSON, Column, DateTime, Field, select, text
from bisheng.core.database import get_sync_db_session
from bisheng.common.models.base import SQLModelSerializable
from bisheng.utils import generate_uuid
class ComponentBase(SQLModelSerializable):
name: str = Field(max_length=50, index=True, description='Saved Component Name')
description: Optional[str] = Field(default='', description='DESCRIPTION')
data: Optional[Any] = Field(default=None, description='Component Data')
version: str = Field(default='', index=True, description='Component Revision')
user_id: int = Field(default=None, index=True, description='creatorID')
user_name: str = Field(default=None, description='creatorName')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class Component(ComponentBase, table=True):
id: str = Field(default_factory=generate_uuid, primary_key=True, unique=True)
data: Optional[Any] = Field(default=None, sa_column=Column(JSON))
class ComponentDao(ComponentBase):
@classmethod
def get_user_components(cls, user_id: int) -> List[Component]:
with get_sync_db_session() as session:
statement = select(Component).where(
Component.user_id == user_id
).order_by(Component.create_time.desc())
return session.exec(statement).all()
@classmethod
def get_component_by_name(cls, user_id: int, name: str) -> Component | None:
with get_sync_db_session() as session:
statement = select(Component).where(Component.user_id == user_id, Component.name == name)
return session.exec(statement).first()
@classmethod
def insert_component(cls, component: Component) -> Component:
with get_sync_db_session() as session:
session.add(component)
session.commit()
session.refresh(component)
return component
@classmethod
def update_component(cls, component: Component) -> Component:
with get_sync_db_session() as session:
session.add(component)
session.commit()
session.refresh(component)
return component
@classmethod
def delete_component(cls, component: Component) -> Component:
with get_sync_db_session() as session:
session.delete(component)
session.commit()
return component
================================================
FILE: src/backend/bisheng/database/models/dataset.py
================================================
from datetime import datetime
from typing import Any, List, Optional
from sqlalchemy import Column, DateTime, delete, text
from sqlmodel import Field, select
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session
class DatasetBase(SQLModelSerializable):
user_id: Optional[int] = Field(index=True, description='Create Userid')
name: str = Field(index=True, description='Dataset Name')
type: str = Field(index=False, default=0, description='Reserved Fields')
description: Optional[str] = Field(default=None, index=False, description='Dataset description')
object_name: Optional[str] = Field(default=None, index=False, description='data setS3Part Name')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class Dataset(DatasetBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
class DatasetCreate(DatasetBase):
pass
class DatasetRead(DatasetBase):
user_name: Optional[str]
url: Optional[str]
class DatasetUpdate(DatasetBase):
pass
class DatasetDao(DatasetBase):
@classmethod
def filter_dataset_by_ids(cls,
dataset_ids: List[int],
keyword: str = None,
page: int = 0,
limit: int = 0) -> List[Dataset]:
with get_sync_db_session() as session:
query = select(Dataset)
if dataset_ids:
query = query.where(Dataset.id.in_(dataset_ids))
if keyword:
query = query.where(Dataset.name.like(f'%{keyword}%'))
if page and limit:
query = query.order_by(Dataset.update_time.desc()).offset(
(page - 1) * limit).limit(limit)
return session.exec(query).all()
@classmethod
def get_count_by_filter(cls, filters: List[Any]) -> int:
with get_sync_db_session() as session:
return session.scalar(select(Dataset.id).where(*filters))
@classmethod
def insert(cls, dataset: DatasetCreate):
with get_sync_db_session() as session:
db_insert = Dataset.validate(dataset)
session.add(db_insert)
session.commit()
session.refresh(db_insert)
return db_insert
@classmethod
def get_dataset_by_name(cls, name: str):
with get_sync_db_session() as session:
return session.exec(select(Dataset).where(Dataset.name == name)).all()
@classmethod
def update(cls, data: Dataset):
with get_sync_db_session() as session:
session.add(data)
session.commit()
session.refresh(data)
return data
@classmethod
def delete(cls, dataset_id: int):
with get_sync_db_session() as session:
session.exec(delete(Dataset).where(Dataset.id == dataset_id))
session.commit()
================================================
FILE: src/backend/bisheng/database/models/evaluation.py
================================================
from datetime import datetime
from enum import Enum
from typing import List, Optional, Dict
from sqlalchemy import Column, DateTime, Text, text, func, and_, JSON
from sqlmodel import Field, select
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session
class ExecType(Enum):
FLOW = 'flow'
ASSISTANT = 'assistant'
WORKFLOW = 'workflow'
class EvaluationTaskStatus(Enum):
running = 1
failed = 2
success = 3
class EvaluationBase(SQLModelSerializable):
user_id: int = Field(default=None, index=True)
file_name: str = Field(default='', description='Uploaded filename')
file_path: str = Field(default='', description='Doc. minio Address:')
exec_type: str = Field(description='Execute subject categories. Assistants, Skills, Workflows, ReferenceExecTypeEnum')
unique_id: str = Field(index=True, description='Unique to the executing entityID')
version: Optional[int] = Field(default=None, description='Version of workflow or skillID')
status: int = Field(index=True, default=1, description='Task Execution Status: 1:Executing "{0}" 2: execute fail 3:execute success')
prompt: str = Field(default='', sa_column=Column(Text), description='Evaluation Instruction Text')
result_file_path: str = Field(default='', description='of the assessment results minio Address:')
result_score: Optional[Dict | str] = Field(default=None, sa_column=Column(JSON), description='Final Assessment Score')
description: str = Field(default='', sa_column=Column(Text), description='Error description information')
is_delete: int = Field(default=0, description='whether delete')
create_time: Optional[datetime] = Field(default=None,
sa_column=Column(DateTime, nullable=False,
server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class Evaluation(EvaluationBase, table=True):
id: int = Field(default=None, primary_key=True, unique=True)
class EvaluationRead(EvaluationBase):
id: int
user_name: Optional[str] = None
class EvaluationCreate(EvaluationBase):
pass
class EvaluationDao(EvaluationBase):
@classmethod
def get_my_evaluations(cls, user_id: int, page: int, limit: int) -> (List[Evaluation], int):
with get_sync_db_session() as session:
statement = select(Evaluation).where(and_(Evaluation.is_delete == 0, Evaluation.user_id == user_id))
count_statement = session.query(func.count(
Evaluation.id)).where(and_(Evaluation.is_delete == 0, Evaluation.user_id == user_id))
statement = statement.offset(
(page - 1) * limit
).limit(limit).order_by(
Evaluation.update_time.desc()
)
return session.exec(statement).all(), session.exec(count_statement).scalar()
@classmethod
def delete_evaluation(cls, data: Evaluation) -> Evaluation:
with get_sync_db_session() as session:
data.is_delete = 1
session.add(data)
session.commit()
return data
@classmethod
def get_user_one_evaluation(cls, user_id: int, evaluation_id: int) -> Evaluation:
with get_sync_db_session() as session:
statement = select(Evaluation).where(and_(Evaluation.id == evaluation_id, Evaluation.user_id == user_id))
return session.exec(statement).first()
@classmethod
def get_one_evaluation(cls, evaluation_id: int) -> Evaluation:
with get_sync_db_session() as session:
statement = select(Evaluation).where(Evaluation.id == evaluation_id)
return session.exec(statement).first()
@classmethod
def update_evaluation(cls, evaluation: Evaluation) -> Evaluation:
with get_sync_db_session() as session:
session.add(evaluation)
session.commit()
session.refresh(evaluation)
return evaluation
================================================
FILE: src/backend/bisheng/database/models/flow.py
================================================
# Path: src/backend/bisheng/database/models/flow.py
from datetime import datetime
from enum import Enum
from typing import Dict, List, Optional, Tuple, Union
from pydantic import field_validator
from sqlalchemy import Column, DateTime, String, and_, func, or_, text
from sqlmodel import JSON, Field, select, update, col
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum, ApplicationTypeEnum
from bisheng.common.models.base import SQLModelSerializable
from bisheng.common.schemas.telemetry.event_data_schema import NewApplicationEventData
from bisheng.common.services import telemetry_service
from bisheng.core.database import get_sync_db_session, get_async_db_session
from bisheng.core.logger import trace_id_var
from bisheng.database.models.assistant import Assistant
from bisheng.database.models.role_access import AccessType, RoleAccess, RoleAccessDao
from bisheng.user.domain.models.user_role import UserRoleDao
from bisheng.utils import generate_uuid
# if TYPE_CHECKING:
class FlowStatus(Enum):
OFFLINE = 1
ONLINE = 2
class FlowType(Enum):
FLOW = 1
ASSISTANT = 5
WORKFLOW = 10
WORKSTATION = 15
LINSIGHT = 20 # Inspiration Mode
class AppEnum(Enum):
Flow = 'flow'
ASSISTANT = 'assistant'
WORKFLOW = 'workflow'
class UserLinkType(Enum):
app = AppEnum
class FlowBase(SQLModelSerializable):
name: str = Field(index=True)
user_id: Optional[int] = Field(default=None, index=True)
description: Optional[str] = Field(default=None, sa_column=Column(String(length=1000)))
data: Optional[Dict] = Field(default=None)
logo: Optional[str] = Field(default=None, index=False)
status: Optional[int] = Field(index=False, default=1)
flow_type: Optional[int] = Field(index=False, default=1)
guide_word: Optional[str] = Field(default=None, sa_column=Column(String(length=1000)))
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
@field_validator('data', mode='before')
@classmethod
def validate_json(cls, v):
if not v:
return v
if not isinstance(v, dict):
raise ValueError('Flow must be a valid JSON')
# data must contain nodes and edges
if 'nodes' not in v.keys():
raise ValueError('Flow must have nodes')
if 'edges' not in v.keys():
raise ValueError('Flow must have edges')
return v
class Flow(FlowBase, table=True):
id: str = Field(default_factory=generate_uuid, primary_key=True, unique=True)
data: Optional[Dict] = Field(default=None, sa_column=Column(JSON))
class FlowCreate(FlowBase):
flow_id: Optional[str] = None
class FlowRead(FlowBase):
id: str
user_name: Optional[str] = None
version_id: Optional[int] = None
class FlowReadWithStyle(FlowRead):
# style: Optional['FlowStyleRead'] = None
total: Optional[int] = None
class FlowUpdate(SQLModelSerializable):
name: Optional[str] = None
logo: Optional[str] = None
description: Optional[str] = None
data: Optional[Dict] = None
status: Optional[int] = None
guide_word: Optional[str] = None
class FlowDao(FlowBase):
@classmethod
def create_flow(cls, flow_info: Flow, flow_type: Optional[int]) -> Flow:
from bisheng.database.models.flow_version import FlowVersion
with get_sync_db_session() as session:
session.add(flow_info)
# Create a default version
flow_version = FlowVersion(name='v0',
is_current=1,
data=flow_info.data,
flow_id=flow_info.id,
create_time=datetime.now(),
user_id=flow_info.user_id,
flow_type=flow_type)
session.add(flow_version)
session.commit()
session.refresh(flow_info)
if flow_type == FlowType.FLOW.value:
app_type = ApplicationTypeEnum.SKILL
elif flow_type == FlowType.WORKFLOW.value:
app_type = ApplicationTypeEnum.WORKFLOW
elif flow_type == FlowType.ASSISTANT.value:
app_type = ApplicationTypeEnum.ASSISTANT
elif flow_type == FlowType.LINSIGHT.value:
app_type = ApplicationTypeEnum.LINSIGHT
else:
app_type = ApplicationTypeEnum.DAILY_CHAT
# RecordTelemetryJournal
telemetry_service.log_event_sync(user_id=flow_info.user_id,
event_type=BaseTelemetryTypeEnum.NEW_APPLICATION,
trace_id=trace_id_var.get(),
event_data=NewApplicationEventData(
app_id=flow_info.id,
app_name=flow_info.name,
app_type=app_type.value
))
return flow_info
@classmethod
def delete_flow(cls, flow_info: Flow) -> Flow:
from bisheng.database.models.flow_version import FlowVersion
with get_sync_db_session() as session:
session.delete(flow_info)
# Delete the corresponding version information
update_statement = update(FlowVersion).where(
FlowVersion.flow_id == flow_info.id).values(is_delete=1)
session.exec(update_statement)
session.commit()
return flow_info
@classmethod
def get_flow_by_id(cls, flow_id: str) -> Optional[Flow]:
with get_sync_db_session() as session:
statement = select(Flow).where(Flow.id == flow_id)
return session.exec(statement).first()
@classmethod
async def aget_flow_by_id(cls, flow_id: str) -> Optional[Flow]:
async with get_async_db_session() as session:
statement = select(Flow).where(Flow.id == flow_id)
result = await session.exec(statement)
return result.first()
@classmethod
def get_flow_by_idstr(cls, flow_id: str) -> Optional[Flow]:
with get_sync_db_session() as session:
statement = select(Flow).where(Flow.id == flow_id)
return session.exec(statement).first()
@classmethod
def get_flow_by_ids(cls, flow_ids: List[str]) -> List[Flow]:
if not flow_ids:
return []
with get_sync_db_session() as session:
statement = select(Flow).where(Flow.id.in_(flow_ids))
return session.exec(statement).all()
@classmethod
async def aget_flow_by_ids(cls, flow_ids: List[str]) -> List[Flow]:
if not flow_ids:
return []
async with get_async_db_session() as session:
statement = select(Flow).where(col(Flow.id).in_(flow_ids))
result = await session.exec(statement)
return result.all()
@classmethod
def get_flow_by_user(cls, user_id: int) -> List[Flow]:
with get_sync_db_session() as session:
statement = select(Flow).where(Flow.user_id == user_id)
return session.exec(statement).all()
@classmethod
def get_flow_by_name(cls, user_id: int, name: str) -> Optional[Flow]:
with get_sync_db_session() as session:
statement = select(Flow).where(Flow.user_id == user_id, Flow.name == name)
return session.exec(statement).first()
@classmethod
def get_flow_list_by_name(cls, name: str) -> List[Flow]:
with get_sync_db_session() as session:
statement = select(Flow).where(Flow.name.like('%{}%'.format(name)))
return session.exec(statement).all()
@classmethod
def get_flow_by_access(cls, role_id: int, name: str, page_size: int,
page_num: int) -> List[Tuple[Flow, RoleAccess]]:
statment = select(Flow, RoleAccess).join(RoleAccess,
and_(RoleAccess.role_id == role_id,
RoleAccess.type == AccessType.FLOW.value,
RoleAccess.third_id == Flow.id),
isouter=True)
if name:
statment = statment.where(Flow.name.like('%' + name + '%'))
if page_num and page_size and page_num != 'undefined':
page_num = int(page_num)
statment = statment.order_by(RoleAccess.type.desc()).order_by(
Flow.update_time.desc()).offset((page_num - 1) * page_size).limit(page_size)
with get_sync_db_session() as session:
return session.exec(statment).all()
@classmethod
def get_count_by_filters(cls, filters) -> int:
with get_sync_db_session() as session:
count_statement = session.query(func.count(Flow.id))
return session.exec(count_statement.where(*filters)).scalar()
@classmethod
def get_flows(cls,
user_id: Optional[int],
extra_ids: Union[List[str], str],
name: str,
status: Optional[int] = None,
flow_ids: List[str] = None,
page: int = 0,
limit: int = 0,
flow_type: Optional[int] = None) -> List[Flow]:
with get_sync_db_session() as session:
# data The amount of data is too large, yesmysql Influential
statement = select(Flow.id, Flow.user_id, Flow.name, Flow.status, Flow.create_time,
Flow.logo, Flow.update_time, Flow.description, Flow.guide_word,
Flow.flow_type)
if extra_ids and isinstance(extra_ids, List):
statement = statement.where(or_(Flow.id.in_(extra_ids), Flow.user_id == user_id))
elif not extra_ids:
statement = statement.where(Flow.user_id == user_id)
if name:
statement = statement.where(
or_(Flow.name.like(f'%{name}%'), Flow.description.like(f'%{name}%')))
if status is not None:
statement = statement.where(Flow.status == status)
if flow_type is not None:
statement = statement.where(Flow.flow_type == flow_type)
if flow_ids:
statement = statement.where(Flow.id.in_(flow_ids))
statement = statement.order_by(Flow.update_time.desc())
if page > 0 and limit > 0:
statement = statement.offset((page - 1) * limit).limit(limit)
flows = session.exec(statement)
flows_partial = flows.mappings().all()
return [Flow.model_validate(f) for f in flows_partial]
@classmethod
def count_flows(cls,
user_id: Optional[int],
extra_ids: Union[List[str], str],
name: str,
status: Optional[int] = None,
flow_ids: List[str] = None,
flow_type: Optional[int] = None) -> int:
with get_sync_db_session() as session:
count_statement = session.query(func.count(Flow.id))
if extra_ids and isinstance(extra_ids, List):
count_statement = count_statement.filter(
or_(Flow.id.in_(extra_ids), Flow.user_id == user_id))
elif not extra_ids:
count_statement = count_statement.filter(Flow.user_id == user_id)
if name:
count_statement = count_statement.filter(
or_(Flow.name.like(f'%{name}%'), Flow.description.like(f'%{name}%')))
if flow_type is not None:
count_statement = count_statement.where(Flow.flow_type == flow_type)
if flow_ids:
count_statement = count_statement.filter(Flow.id.in_(flow_ids))
if status is not None:
count_statement = count_statement.filter(Flow.status == status)
return count_statement.scalar()
@classmethod
def get_all_online_flows(cls,
keyword: str = None,
flow_ids: List[str] = None,
flow_type: int = FlowType.FLOW.value) -> List[Flow]:
with get_sync_db_session() as session:
statement = select(Flow.id, Flow.user_id, Flow.name, Flow.status, Flow.create_time,
Flow.logo, Flow.update_time, Flow.description,
Flow.guide_word).where(Flow.status == FlowStatus.ONLINE.value)
if flow_ids:
statement = statement.where(Flow.id.in_(flow_ids))
if keyword:
statement = statement.where(
or_(Flow.name.like(f'%{keyword}%'), Flow.description.like(f'%{keyword}%')))
result = session.exec(statement).mappings().all()
return [Flow.model_validate(f) for f in result]
@classmethod
def get_user_access_online_flows(cls,
user_id: int,
page: int = 0,
limit: int = 0,
keyword: str = None,
flow_ids: List[str] = None,
flow_type: int = FlowType.FLOW.value) -> List[Flow]:
user_role = UserRoleDao.get_user_roles(user_id)
flow_id_extra = []
if user_role:
role_ids = [role.role_id for role in user_role]
if 1 in role_ids:
# admin
flow_id_extra = 'admin'
else:
role_access = RoleAccessDao.get_role_access(role_ids, AccessType.FLOW)
if role_access:
flow_id_extra = [access.third_id for access in role_access]
return FlowDao.get_flows(user_id,
flow_id_extra,
keyword,
FlowStatus.ONLINE.value,
flow_ids=flow_ids,
page=page,
limit=limit,
flow_type=flow_type)
@classmethod
def filter_flows_by_ids(cls, flow_ids: List[str], keyword: str = None,
page: int = 0, limit: int = 0, flow_type: int = FlowType.FLOW.value) \
-> (List[Flow], int):
"""
Via SkillsIDFilter the list of skills by returning only brief information and not includingdata
"""
statement = select(Flow.id, Flow.user_id, Flow.name, Flow.status, Flow.create_time,
Flow.update_time, Flow.description, Flow.guide_word)
count_statement = select(func.count(Flow.id))
if flow_ids:
statement = statement.where(Flow.id.in_(flow_ids))
count_statement = count_statement.where(Flow.id.in_(flow_ids))
if keyword:
statement = statement.where(
or_(Flow.name.like(f'%{keyword}%'), Flow.description.like(f'%{keyword}%')))
count_statement = count_statement.where(
or_(Flow.name.like(f'%{keyword}%'), Flow.description.like(f'%{keyword}%')))
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
statement = statement.where(Flow.flow_type == flow_type)
statement = statement.order_by(Flow.update_time.desc())
with get_sync_db_session() as session:
result = session.exec(statement).mappings().all()
return [Flow.model_validate(f) for f in result], session.scalar(count_statement)
@classmethod
def update_flow(cls, flow: Flow) -> Flow:
with get_sync_db_session() as session:
session.add(flow)
session.commit()
session.refresh(flow)
return flow
@classmethod
async def aupdate_flow(cls, flow: Flow) -> Flow:
async with get_async_db_session() as session:
session.add(flow)
await session.commit()
await session.refresh(flow)
return flow
@classmethod
def get_all_apps(cls,
name: str = None,
status: int = None,
id_list: list = None,
flow_type: int = None,
user_id: int = None,
id_extra: list = None,
id_list_not_in: list = None,
page: int = 0,
limit: int = 0) -> (List[Dict], int):
""" Get all apps Contains skills, assistants, workflows """
sub_query = select(
Flow.id, Flow.name, Flow.description, Flow.flow_type, Flow.logo, Flow.user_id,
Flow.status, Flow.create_time, Flow.update_time).union_all(
select(Assistant.id, Assistant.name, Assistant.desc, FlowType.ASSISTANT.value,
Assistant.logo, Assistant.user_id, Assistant.status, Assistant.create_time,
Assistant.update_time).where(Assistant.is_delete == 0)).subquery()
statement = select(sub_query.c.id, sub_query.c.name, sub_query.c.description,
sub_query.c.flow_type, sub_query.c.logo, sub_query.c.user_id,
sub_query.c.status, sub_query.c.create_time, sub_query.c.update_time)
count_statement = select(func.count(sub_query.c.id))
if name:
statement = statement.where(sub_query.c.name.like(f'%{name}%'))
count_statement = count_statement.where(sub_query.c.name.like(f'%{name}%'))
if status is not None:
statement = statement.where(sub_query.c.status == status)
count_statement = count_statement.where(sub_query.c.status == status)
if id_list:
statement = statement.where(sub_query.c.id.in_(id_list))
count_statement = count_statement.where(sub_query.c.id.in_(id_list))
if flow_type is not None:
statement = statement.where(sub_query.c.flow_type == flow_type)
count_statement = count_statement.where(sub_query.c.flow_type == flow_type)
if user_id is not None:
if id_extra:
statement = statement.where(
or_(sub_query.c.user_id == user_id, sub_query.c.id.in_(id_extra)))
count_statement = count_statement.where(
or_(sub_query.c.user_id == user_id, sub_query.c.id.in_(id_extra)))
else:
statement = statement.where(sub_query.c.user_id == user_id)
count_statement = count_statement.where(sub_query.c.user_id == user_id)
if id_list_not_in:
statement = statement.where(~sub_query.c.id.in_(id_list_not_in))
count_statement = count_statement.where(~sub_query.c.id.in_(id_list_not_in))
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
statement = statement.order_by(sub_query.c.update_time.desc())
with (get_sync_db_session() as session):
ret = session.exec(statement).all()
total = session.scalar(count_statement)
data = []
for one in ret:
data.append({
'id': one[0],
'name': one[1],
'description': one[2],
'flow_type': one[3],
'logo': one[4],
'user_id': one[5],
'status': one[6],
'create_time': one[7],
'update_time': one[8]
})
return data, total
@classmethod
async def aget_all_apps(cls,
name: str = None,
status: int = None,
id_list: list = None,
flow_type: int = None,
user_id: int = None,
id_extra: list = None,
id_list_not_in: list = None,
page: int = 0,
limit: int = 0) -> (List[Dict], int):
"""
Get all apps Contains skills, assistants, workflows
Args:
name:
status:
id_list:
flow_type:
user_id:
id_extra:
id_list_not_in:
page:
limit:
Returns:
(List[Dict], int)
"""
sub_query = select(
Flow.id, Flow.name, Flow.description, Flow.flow_type, Flow.logo, Flow.user_id,
Flow.status, Flow.create_time, Flow.update_time).union_all(
select(Assistant.id, Assistant.name, Assistant.desc, FlowType.ASSISTANT.value,
Assistant.logo, Assistant.user_id, Assistant.status, Assistant.create_time,
Assistant.update_time).where(Assistant.is_delete == 0)).subquery()
statement = select(sub_query.c.id, sub_query.c.name, sub_query.c.description,
sub_query.c.flow_type, sub_query.c.logo, sub_query.c.user_id,
sub_query.c.status, sub_query.c.create_time, sub_query.c.update_time)
count_statement = select(func.count(sub_query.c.id))
if name:
statement = statement.where(sub_query.c.name.like(f'%{name}%'))
count_statement = count_statement.where(sub_query.c.name.like(f'%{name}%'))
if status is not None:
statement = statement.where(sub_query.c.status == status)
count_statement = count_statement.where(sub_query.c.status == status)
if id_list:
statement = statement.where(sub_query.c.id.in_(id_list))
count_statement = count_statement.where(sub_query.c.id.in_(id_list))
if flow_type is not None:
statement = statement.where(sub_query.c.flow_type == flow_type)
count_statement = count_statement.where(sub_query.c.flow_type == flow_type)
if user_id is not None:
if id_extra:
statement = statement.where(
or_(sub_query.c.user_id == user_id, sub_query.c.id.in_(id_extra)))
count_statement = count_statement.where(
or_(sub_query.c.user_id == user_id, sub_query.c.id.in_(id_extra)))
else:
statement = statement.where(sub_query.c.user_id == user_id)
count_statement = count_statement.where(sub_query.c.user_id == user_id)
if id_list_not_in:
statement = statement.where(~sub_query.c.id.in_(id_list_not_in))
count_statement = count_statement.where(~sub_query.c.id.in_(id_list_not_in))
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
statement = statement.order_by(sub_query.c.update_time.desc())
async with get_async_db_session() as session:
result = await session.exec(statement)
ret = result.all()
total_result = await session.exec(count_statement)
total = total_result.first()
data = []
for one in ret:
data.append({
'id': one[0],
'name': one[1],
'description': one[2],
'flow_type': one[3],
'logo': one[4],
'user_id': one[5],
'status': one[6],
'create_time': one[7],
'update_time': one[8]
})
return data, total
@classmethod
async def get_one_flow_simple(cls, flow_id: str) -> Optional[Flow]:
""" get simple info of one flow by id. not contain data field """
statement = select(Flow.id, Flow.name, Flow.description, Flow.flow_type, Flow.logo, Flow.user_id,
Flow.status, Flow.create_time, Flow.update_time).where(Flow.id == flow_id)
async with get_async_db_session() as session:
result = await session.exec(statement)
one = result.first()
if not one:
return None
return Flow(**{
'id': one[0],
'name': one[1],
'description': one[2],
'flow_type': one[3],
'logo': one[4],
'user_id': one[5],
'status': one[6],
'create_time': one[7],
'update_time': one[8]
})
@classmethod
def get_one_flow_simple_sync(cls, flow_id: str) -> Optional[Flow]:
""" get simple info of one flow by id. not contain data field """
statement = select(Flow.id, Flow.name, Flow.description, Flow.flow_type, Flow.logo, Flow.user_id,
Flow.status, Flow.create_time, Flow.update_time).where(Flow.id == flow_id)
with get_sync_db_session() as session:
result = session.exec(statement)
one = result.first()
if not one:
return None
return Flow(**{
'id': one[0],
'name': one[1],
'description': one[2],
'flow_type': one[3],
'logo': one[4],
'user_id': one[5],
'status': one[6],
'create_time': one[7],
'update_time': one[8]
})
@classmethod
def get_all_app_by_time_range_sync(cls, start_time: datetime, end_time: datetime, page: int = 0,
page_size: int = 0):
sub_query = select(
Flow.id, Flow.name, Flow.description, Flow.flow_type, Flow.logo, Flow.user_id,
Flow.status, Flow.create_time, Flow.update_time).union_all(
select(Assistant.id, Assistant.name, Assistant.desc, FlowType.ASSISTANT.value,
Assistant.logo, Assistant.user_id, Assistant.status, Assistant.create_time,
Assistant.update_time).where(Assistant.is_delete == 0)).subquery()
statement = select(sub_query.c.id, sub_query.c.name, sub_query.c.description,
sub_query.c.flow_type, sub_query.c.logo, sub_query.c.user_id,
sub_query.c.status, sub_query.c.create_time, sub_query.c.update_time)
statement = statement.where(and_(sub_query.c.create_time >= start_time,
sub_query.c.create_time < end_time))
if page and page_size:
statement = statement.offset((page - 1) * page_size).limit(page_size)
with get_sync_db_session() as session:
result = session.exec(statement).all()
data = []
for one in result:
data.append({
'id': one[0],
'name': one[1],
'description': one[2],
'flow_type': one[3],
'logo': one[4],
'user_id': one[5],
'status': one[6],
'create_time': one[7],
'update_time': one[8]
})
return data
@classmethod
def get_first_app(cls):
sub_query = select(
Flow.id, Flow.name, Flow.description, Flow.flow_type, Flow.logo, Flow.user_id,
Flow.status, Flow.create_time, Flow.update_time).union_all(
select(Assistant.id, Assistant.name, Assistant.desc, FlowType.ASSISTANT.value,
Assistant.logo, Assistant.user_id, Assistant.status, Assistant.create_time,
Assistant.update_time).where(Assistant.is_delete == 0)).subquery()
statement = select(sub_query.c.id, sub_query.c.name, sub_query.c.description,
sub_query.c.flow_type, sub_query.c.logo, sub_query.c.user_id,
sub_query.c.status, sub_query.c.create_time, sub_query.c.update_time)
statement = statement.order_by(sub_query.c.create_time.asc()).limit(1)
with get_sync_db_session() as session:
result = session.exec(statement).all()
data = []
for one in result:
data.append({
'id': one[0],
'name': one[1],
'description': one[2],
'flow_type': one[3],
'logo': one[4],
'user_id': one[5],
'status': one[6],
'create_time': one[7],
'update_time': one[8]
})
return data[0] if data else None
================================================
FILE: src/backend/bisheng/database/models/flow_version.py
================================================
# Path: src/backend/bisheng/database/models/flow.py
from datetime import datetime
from typing import Dict, List, Optional
# if TYPE_CHECKING:
from pydantic import field_validator
from sqlalchemy import func, String
from sqlmodel import JSON, Field, select, update, text, Column, DateTime
from bisheng.core.database import get_sync_db_session, get_async_db_session
from bisheng.common.models.base import SQLModelSerializable
from bisheng.database.models.flow import Flow
class FlowVersionBase(SQLModelSerializable):
id: Optional[int] = Field(default=None, primary_key=True, unique=True)
flow_id: str = Field(index=True, max_length=32, description="Belonging SkillsID")
name: str = Field(index=True, description="Version Name")
data: Optional[Dict] = Field(default=None, description="Version Data")
description: Optional[str] = Field(default=None, sa_column=Column(String(length=1000)))
user_id: Optional[int] = Field(default=None, index=True, description="creator")
flow_type: Optional[int] = Field(default=1, description="Type of version")
is_current: Optional[int] = Field(default=0, description="Is version in use")
is_delete: Optional[int] = Field(default=0, description="whether delete")
original_version_id: Optional[int] = Field(default=None, description="Source Version ofID")
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
@field_validator('data')
@classmethod
def validate_json(cls, v):
# dict_keys(['description', 'name', 'id', 'data'])
if not v:
return v
if not isinstance(v, dict):
raise ValueError('Flow must be a valid JSON')
# data must contain nodes and edges
if 'nodes' not in v.keys():
raise ValueError('Flow must have nodes')
if 'edges' not in v.keys():
raise ValueError('Flow must have edges')
return v
class FlowVersion(FlowVersionBase, table=True):
data: Optional[Dict] = Field(default=None, sa_column=Column(JSON), description="Version Data")
class FlowVersionRead(FlowVersionBase):
pass
class FlowVersionDao(FlowVersionBase):
@classmethod
def create_version(cls, version: FlowVersion) -> FlowVersion:
"""
Create New Version
"""
with get_sync_db_session() as session:
session.add(version)
session.commit()
session.refresh(version)
return version
@classmethod
def update_version(cls, version: FlowVersion) -> FlowVersion:
"""
Update the version information while updating the Skill SheetdataDATA
"""
with get_sync_db_session() as session:
session.add(version)
session.commit()
# Update the data in the skill sheet if it is the current version
if version.is_current == 1:
# Update Skill SheetdataDATA
update_flow = update(Flow).where(Flow.id == version.flow_id).values(data=version.data)
session.exec(update_flow)
session.commit()
session.refresh(version)
return version
@classmethod
async def aupdate_version(cls, version: FlowVersion) -> FlowVersion:
"""
Update version information asynchronously while updating the Skill SheetdataDATA
"""
async with get_async_db_session() as session:
session.add(version)
await session.commit()
# Update the data in the skill sheet if it is the current version
if version.is_current == 1:
# Update Skill SheetdataDATA
update_flow = update(Flow).where(Flow.id == version.flow_id).values(data=version.data)
await session.exec(update_flow)
await session.commit()
await session.refresh(version)
return version
@classmethod
def get_version_by_name(cls, flow_id: str, name: str) -> Optional[FlowVersion]:
"""
By SkillIDand version name for version information
"""
with get_sync_db_session() as session:
statement = select(FlowVersion).where(FlowVersion.flow_id == flow_id,
FlowVersion.name == name,
FlowVersion.is_delete == 0)
return session.exec(statement).first()
@classmethod
def get_version_by_id(cls, version_id: int, include_delete: bool = False) -> Optional[FlowVersion]:
"""
According to versionIDGet information on the skill version
"""
with get_sync_db_session() as session:
statement = select(FlowVersion).where(FlowVersion.id == version_id)
if not include_delete:
statement = statement.where(FlowVersion.is_delete == 0)
return session.exec(statement).first()
@classmethod
async def aget_version_by_id(cls, version_id: int, include_delete: bool = False) -> Optional[FlowVersion]:
"""
According to versionIDGet skill version information (asynchronous)
"""
async with get_async_db_session() as session:
statement = select(FlowVersion).where(FlowVersion.id == version_id)
if not include_delete:
statement = statement.where(FlowVersion.is_delete == 0)
result = await session.exec(statement)
return result.first()
@classmethod
def get_version_by_flow(cls, flow_id: str) -> Optional[FlowVersion]:
"""
By SkillIDGet information on the current skill version
"""
with get_sync_db_session() as session:
statement = select(FlowVersion).where(FlowVersion.flow_id == flow_id,
FlowVersion.is_current == 1,
FlowVersion.is_delete == 0)
return session.exec(statement).first()
@classmethod
def get_list_by_ids(cls, ids: List[int]) -> List[FlowVersion]:
"""
accordingIDList for all version details
"""
with get_sync_db_session() as session:
statement = select(FlowVersion).where(FlowVersion.id.in_(ids))
return session.exec(statement).all()
@classmethod
def get_list_by_flow(cls, flow_id: str) -> List[FlowVersionRead]:
"""
By SkillID Get all skill versions
"""
with get_sync_db_session() as session:
statement = select(FlowVersion.id, FlowVersion.flow_id, FlowVersion.name, FlowVersion.description,
FlowVersion.is_current, FlowVersion.create_time, FlowVersion.update_time).where(
FlowVersion.flow_id == flow_id, FlowVersion.is_delete == 0).order_by(FlowVersion.id.desc())
ret = session.exec(statement).mappings().all()
return [FlowVersionRead.model_validate(f) for f in ret]
@classmethod
def count_list_by_flow(cls, flow_id: str, include_delete: bool = False) -> int:
"""
By SkillID Number of Skill Versions
"""
with get_sync_db_session() as session:
count_statement = session.query(func.count()).where(FlowVersion.flow_id == flow_id)
if not include_delete:
count_statement = count_statement.where(FlowVersion.is_delete == 0)
return count_statement.scalar()
@classmethod
def get_list_by_flow_ids(cls, flow_ids: List[str]) -> List[FlowVersionRead]:
"""
By SkillIDVertical Get all versions of all skills
"""
with get_sync_db_session() as session:
statement = select(FlowVersion.id, FlowVersion.flow_id, FlowVersion.name, FlowVersion.description,
FlowVersion.is_current, FlowVersion.create_time, FlowVersion.update_time).where(
FlowVersion.flow_id.in_(flow_ids), FlowVersion.is_delete == 0).order_by(FlowVersion.id.desc())
ret = session.exec(statement).mappings().all()
return [FlowVersionRead.model_validate(f) for f in ret]
@classmethod
def delete_flow_version(cls, version_id: int) -> None:
"""
Deleting a version, the version in use cannot be deleted
"""
with get_sync_db_session() as session:
update_statement = update(FlowVersion).where(
FlowVersion.id == version_id, FlowVersion.is_current == 0).values(is_delete=1)
session.exec(update_statement)
session.commit()
@classmethod
async def change_current_version(cls, flow_id: str, new_version_info: FlowVersion) -> bool:
"""
Modify the current version of the skill, Determine if the current version exists
Also modify the Skill SheetdataDATA
"""
async with get_async_db_session() as session:
# Set current version
set_statement = update(FlowVersion).where(
FlowVersion.flow_id == flow_id,
FlowVersion.id == new_version_info.id,
FlowVersion.is_delete == 0,
).values(is_current=1)
update_ret = await session.exec(set_statement)
if update_ret.rowcount == 0:
# If the update is not successful, the current version of the previous setting is not canceled
return False
# Update Skill SheetdataDATA
update_flow = update(Flow).where(Flow.id == flow_id).values(data=new_version_info.data)
await session.exec(update_flow)
await session.commit()
# Modify another version to not the current version
statement = update(FlowVersion).where(
FlowVersion.flow_id == flow_id,
FlowVersion.id != new_version_info.id,
FlowVersion.is_current == 1).values(
is_current=0)
await session.exec(statement)
await session.commit()
return True
================================================
FILE: src/backend/bisheng/database/models/group.py
================================================
from datetime import datetime
from typing import Dict, List, Optional
from sqlalchemy import Column, DateTime, delete, text, update
from sqlmodel import Field, select
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session, get_async_db_session
# Default User GroupID
DefaultGroup = 2
class GroupBase(SQLModelSerializable):
group_name: str = Field(index=False, description='Frontend Display Name', unique=True)
remark: Optional[str] = Field(default=None, index=False)
create_user: Optional[int] = Field(default=None, index=True, description="Creating a user'sID")
update_user: Optional[int] = Field(default=None, description="Update user'sID")
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class Group(GroupBase, table=True):
# id = 2 Represents the default user group
id: Optional[int] = Field(default=None, primary_key=True)
class GroupRead(GroupBase):
id: Optional[int] = None
group_admins: Optional[List[Dict]] = None
class GroupUpdate(GroupBase):
role_name: Optional[str] = None
remark: Optional[str] = None
class GroupCreate(GroupBase):
group_admins: Optional[List[int]] = None
class GroupDao(GroupBase):
@classmethod
def get_user_group(cls, group_id: int) -> Group | None:
with get_sync_db_session() as session:
statement = select(Group).where(Group.id == group_id)
return session.exec(statement).first()
@classmethod
def insert_group(cls, group: GroupCreate) -> Group:
with get_sync_db_session() as session:
group_add = Group.validate(group)
session.add(group_add)
session.commit()
session.refresh(group_add)
return group_add
@classmethod
def get_all_group(cls) -> list[Group]:
with get_sync_db_session() as session:
statement = select(Group).order_by(Group.update_time.desc())
return session.exec(statement).all()
@classmethod
def get_group_by_ids(cls, ids: List[int]) -> list[Group]:
if not ids:
raise ValueError('ids is empty')
with get_sync_db_session() as session:
statement = select(Group).where(Group.id.in_(ids)).order_by(Group.update_time.desc())
return session.exec(statement).all()
@classmethod
async def aget_group_by_ids(cls, ids: List[int]) -> list[Group]:
if not ids:
raise ValueError('ids is empty')
async with get_async_db_session() as session:
statement = select(Group).where(Group.id.in_(ids)).order_by(Group.update_time.desc())
result = await session.exec(statement)
return result.all()
@classmethod
def delete_group(cls, group_id: int):
with get_sync_db_session() as session:
session.exec(delete(Group).where(Group.id == group_id))
session.commit()
@classmethod
def update_group(cls, group: Group) -> Group:
with get_sync_db_session() as session:
session.add(group)
session.commit()
session.refresh(group)
return group
@classmethod
def update_group_update_user(cls, group_id: int, user_id: int):
with get_sync_db_session() as session:
statement = update(Group).where(Group.id == group_id).values(update_user=user_id,
update_time=datetime.now())
session.exec(statement)
session.commit()
================================================
FILE: src/backend/bisheng/database/models/group_resource.py
================================================
from datetime import datetime
from enum import Enum
from typing import Dict, List, Optional
from sqlalchemy import Column, DateTime, text, delete
from sqlmodel import Field, select
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session, get_async_db_session
class ResourceTypeEnum(Enum):
KNOWLEDGE = 1
FLOW = 2
ASSISTANT = 3
GPTS_TOOL = 4
WORK_FLOW = 5
DASHBOARD = 6 # KANBAN
WORKSTATION = 7 # Workstation
class GroupResourceBase(SQLModelSerializable):
group_id: str = Field(index=True)
third_id: str = Field(index=False)
type: int = Field(index=False, description='Resource Categories 1:The knowledge base upon 2:Skill 3:assistant 4:Tools 5:The Workflow')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class GroupResource(GroupResourceBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
class GroupResourceRead(GroupResourceBase):
id: Optional[int] = None
group_admins: Optional[List[Dict]] = None
class GroupResourceUpdate(GroupResourceBase):
role_name: Optional[str] = None
remark: Optional[str] = None
class GroupResourceCreate(GroupResourceBase):
pass
class GroupResourceDao(GroupResourceBase):
@classmethod
def insert_group(cls, group_resource: GroupResource) -> GroupResource:
with get_sync_db_session() as session:
session.add(group_resource)
session.commit()
session.refresh(group_resource)
return group_resource
@classmethod
def insert_group_batch(cls, group_resources: List[GroupResource]) -> List[GroupResource]:
with get_sync_db_session() as session:
session.add_all(group_resources)
session.commit()
return group_resources
@classmethod
async def ainsert_group_batch(cls, group_resources: List[GroupResource]) -> List[GroupResource]:
async with get_async_db_session() as session:
session.add_all(group_resources)
await session.commit()
return group_resources
@classmethod
def get_group_resource(cls,
group_id: int,
resource_type: ResourceTypeEnum,
name: str = None,
page_size: int = None,
page_num: int = None) -> list[GroupResource]:
with get_sync_db_session() as session:
statement = select(GroupResource).where(GroupResource.group_id == group_id,
GroupResource.type == resource_type.value)
if name:
statement = statement.where(GroupResource.third_id.like(f'%{name}%'))
if page_num and page_size:
statement = statement.offset(page_size * (page_num - 1)).limit(page_size)
return session.exec(statement).all()
@classmethod
async def aget_group_resources(cls, group_id: int, resource_type: ResourceTypeEnum) -> List[GroupResource]:
statement = select(GroupResource).where(
GroupResource.group_id == group_id,
GroupResource.type == resource_type.value
)
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
async def get_groups_resource(cls,
group_ids: List[int],
resource_types: List[ResourceTypeEnum] = None,
name: str = None,
page_size: int = None,
page_num: int = None) -> list[GroupResource]:
async with get_async_db_session() as session:
statement = select(GroupResource).where(GroupResource.group_id.in_(group_ids))
if resource_types:
statement = statement.where(GroupResource.type.in_([r.value for r in resource_types]))
if name:
statement = statement.where(GroupResource.third_id.like(f'%{name}%'))
if page_num and page_size:
statement = statement.offset(page_size * (page_num - 1)).limit(page_size)
result = await session.exec(statement)
return result.all()
@classmethod
def get_resource_group(cls, resource_type: ResourceTypeEnum, third_id: str) -> list[GroupResource]:
"""
Get the group to which the resource belongs
"""
with get_sync_db_session() as session:
statement = select(GroupResource).where(GroupResource.third_id == third_id,
GroupResource.type == resource_type.value)
return session.exec(statement).all()
@classmethod
async def aget_resource_group(cls, resource_type: ResourceTypeEnum, third_id: str) -> list[GroupResource]:
"""
Get the group to which the resource belongs
"""
async with get_async_db_session() as session:
statement = select(GroupResource).where(GroupResource.third_id == third_id,
GroupResource.type == resource_type.value)
result = await session.exec(statement)
return result.all()
@classmethod
def get_resources_group(cls, resource_type: ResourceTypeEnum | None, third_ids: List[str]) -> list[GroupResource]:
"""
Get the grouping to which the bulk resource belongs
"""
statement = select(GroupResource).where(GroupResource.third_id.in_(third_ids))
if resource_type:
statement = statement.where(GroupResource.type == resource_type.value)
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
def delete_group_resource_by_third_id(cls, third_id: str, resource_type: ResourceTypeEnum) -> None:
with (get_sync_db_session() as session):
statement = delete(GroupResource).where(
GroupResource.third_id == third_id).where(
GroupResource.type == resource_type.value)
session.exec(statement)
session.commit()
@classmethod
def delete_group_resource_by_group_id(cls, group_id: int):
with (get_sync_db_session() as session):
statement = delete(GroupResource).where(GroupResource.group_id == group_id)
session.exec(statement)
session.commit()
@classmethod
def get_group_all_resource(cls, group_id: int) -> List[GroupResource]:
"""
Get all resources under a group
"""
with get_sync_db_session() as session:
return session.exec(
select(GroupResource).where(GroupResource.group_id == group_id)).all()
@classmethod
def update_group_resource(cls, group_resources: List[GroupResource]) -> List[GroupResource]:
with (get_sync_db_session() as session):
session.add_all(group_resources)
session.commit()
return group_resources
================================================
FILE: src/backend/bisheng/database/models/invite_code.py
================================================
from datetime import datetime
from typing import Optional, List
from sqlmodel import Field, Column, text, DateTime, select, update
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_async_db_session
class InviteCodeBase(SQLModelSerializable):
"""
Invitation code model for storing invitation code information.
"""
code: str = Field(..., index=True, unique=True, description='Invitation Code')
batch_id: str = Field(..., index=True, description='BatchesID')
batch_name: str = Field(..., description='Batch')
limit: int = Field(..., description='Usage Limits')
used: Optional[int] = Field(default=0, description='Used times')
bind_user: Optional[int] = Field(default=0, index=True, description='Linked UsersID')
created_id: Optional[int] = Field(default=None, index=True, description='creatorID')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class InviteCode(InviteCodeBase, table=True):
id: Optional[int] = Field(default=None, index=True, primary_key=True, description='Uniqueness quantificationID')
class InviteCodeDao(InviteCodeBase):
"""
The invitation code data access object, which is used to manipulate the invitation code data.
"""
@classmethod
async def insert_invite_code(cls, invite_code: List[InviteCode]) -> List[InviteCode]:
async with get_async_db_session() as session:
session.add_all(invite_code)
await session.commit()
return invite_code
@classmethod
async def get_user_bind_code(cls, bind_user: int) -> list[InviteCode]:
"""
Get a valid invitation code bound by the user
"""
statement = select(InviteCode).where(InviteCode.bind_user == bind_user).where(
InviteCode.used < InviteCode.limit).order_by(InviteCode.id.asc())
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
async def get_user_all_code(cls, bind_user: int) -> list[InviteCode]:
"""
Get all invitation codes linked by a user
"""
statement = select(InviteCode).where(InviteCode.bind_user == bind_user).order_by(InviteCode.id.desc())
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
async def bind_invite_code(cls, user_id: int, code: str) -> bool:
"""
Binding Invitation Code
"""
statement = update(InviteCode).where(InviteCode.code == code).where(InviteCode.bind_user == 0).values(
bind_user=user_id
)
async with get_async_db_session() as session:
result = await session.exec(statement)
await session.commit()
if result.rowcount > 0:
return True
return False
@classmethod
async def use_invite_code(cls, user_id: int, code: str) -> bool:
statement = update(InviteCode).where(InviteCode.code == code).where(InviteCode.bind_user == user_id).values(
used=InviteCode.used + 1
).where(InviteCode.used < InviteCode.limit)
async with get_async_db_session() as session:
result = await session.exec(statement)
await session.commit()
if result.rowcount > 0:
return True
return False
@classmethod
async def revoke_invite_code_used(cls, user_id: int, code: str) -> bool:
"""
Revoke Invitation Code
"""
statement = update(InviteCode).where(InviteCode.code == code).where(InviteCode.bind_user == user_id).values(
used=InviteCode.used - 1
).where(InviteCode.used > 0)
async with get_async_db_session() as session:
result = await session.exec(statement)
await session.commit()
if result.rowcount > 0:
return True
return False
================================================
FILE: src/backend/bisheng/database/models/mark_app_user.py
================================================
from datetime import datetime
from typing import List, Optional
# if TYPE_CHECKING:
from sqlalchemy import Column, DateTime, text
from sqlmodel import Field
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session
class MarkAppUserBase(SQLModelSerializable):
app_id: str = Field(index=True)
user_id: int = Field(index=True)
task_id: int = Field(index=True)
create_id: int = Field(index=True)
status: Optional[int] = Field(index=False, default=1)
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class MarkAppUser(MarkAppUserBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
class MarkAppUserDao(MarkAppUserBase):
@classmethod
def create_task(cls, task_info: List[MarkAppUser]) -> List[MarkAppUser]:
with get_sync_db_session() as session:
session.add_all(task_info)
session.commit()
return task_info
================================================
FILE: src/backend/bisheng/database/models/mark_record.py
================================================
from datetime import datetime
from enum import Enum
from typing import List, Optional
# if TYPE_CHECKING:
from sqlalchemy import Column, DateTime, delete, text
from sqlmodel import Field, select
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session
class MarkRecordStatus(Enum):
DEFAULT = 1
DONE = 2
NO = 3
class MarkRecordBase(SQLModelSerializable):
create_user: str = Field(index=True)
flow_type: int = Field(index=True)
create_id: int = Field(index=True)
app_id: int = Field(index=True, nullable=True)
task_id: int = Field(index=True)
session_id: str = Field(index=True)
status: int = Field(index=False, default=1)
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class MarkRecord(MarkRecordBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
class MarkRecordDao(MarkRecordBase):
@classmethod
def update_record(cls, record_info: MarkRecord) -> MarkRecord:
with get_sync_db_session() as session:
session.add(record_info)
session.commit()
session.refresh(record_info)
return record_info
@classmethod
def get_prev_task(cls, user_id: int, task_id: int):
with get_sync_db_session() as session:
statement = select(MarkRecord).where(MarkRecord.create_id == user_id).where(
MarkRecord.task_id == task_id).order_by(MarkRecord.id)
return session.exec(statement).all()
@classmethod
def create_record(cls, record_info: MarkRecord) -> MarkRecord:
with get_sync_db_session() as session:
session.add(record_info)
session.commit()
session.refresh(record_info)
return record_info
@classmethod
def del_record(cls, task_id: int):
with get_sync_db_session() as session:
st = delete(MarkRecord).where(MarkRecord.task_id == task_id)
session.exec(st)
session.commit()
return
@classmethod
def del_task_chat(cls, task_id: int, session_id: str):
with get_sync_db_session() as session:
st = delete(MarkRecord).where(MarkRecord.task_id == task_id).where(MarkRecord.session_id == session_id)
session.exec(st)
session.commit()
return
@classmethod
def get_list_by_taskid(cls, task_id: int):
with get_sync_db_session() as session:
statement = select(MarkRecord).where(MarkRecord.task_id == task_id)
return session.exec(statement).all()
@classmethod
def get_count(cls, task_id: int):
with get_sync_db_session() as session:
sql = text(
"select create_user,count(*) as user_count,create_id from markrecord where task_id=:task_id group by create_id,create_user")
query = session.execute(sql, {"task_id": task_id}).fetchall()
return query
@classmethod
def get_record(cls, task_id: int, session_id: str) -> MarkRecord:
with get_sync_db_session() as session:
statement = select(MarkRecord).where(MarkRecord.task_id == task_id).where(
MarkRecord.session_id == session_id)
return session.exec(statement).first()
@classmethod
def filter_records(cls, task_id: int, chat_ids: list[str] = None, status: int = None, mark_user: int = None) -> \
List[MarkRecord]:
statement = select(MarkRecord).where(MarkRecord.task_id == task_id)
if chat_ids:
statement = statement.where(MarkRecord.session_id.in_(chat_ids))
if status is not None:
statement = statement.where(MarkRecord.status == status)
if mark_user is not None:
statement = statement.where(MarkRecord.create_user == str(mark_user))
with get_sync_db_session() as session:
return session.exec(statement).all()
================================================
FILE: src/backend/bisheng/database/models/mark_task.py
================================================
from datetime import datetime
from enum import Enum
from typing import List, Optional
# if TYPE_CHECKING:
from sqlalchemy import Column, DateTime, and_, delete, func, or_, text
from sqlmodel import Field, select, update
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session
class MarkTaskStatus(Enum):
DEFAULT = 1
DONE = 2
ING = 3
class MarkTaskBase(SQLModelSerializable):
create_user: str = Field(index=True)
create_id: int = Field(index=True)
app_id: str = Field(index=False, max_length=2048)
process_users: str = Field(index=False) # 23,2323
mark_user: Optional[str] = Field(default=None, index=True, nullable=True)
status: Optional[int] = Field(index=False, default=1)
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class MarkTask(MarkTaskBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
class MarkTaskRead(MarkTaskBase):
id: Optional[int] = None
mark_process: Optional[List[str]] = None
class MarkTaskDao(MarkTaskBase):
@classmethod
def create_task(cls, task_info: MarkTask) -> MarkTask:
with get_sync_db_session() as session:
session.add(task_info)
session.commit()
session.refresh(task_info)
return task_info
@classmethod
def delete_task(cls, task_id: int):
with get_sync_db_session() as session:
st = delete(MarkTask).where(MarkTask.id == task_id)
session.exec(st)
session.commit()
@classmethod
def get_task_byid(cls, task_id: int) -> MarkTask:
with get_sync_db_session() as session:
statement = select(MarkTask).where(MarkTask.id == task_id)
return session.exec(statement).first()
@classmethod
def get_task(cls, user_id: int) -> MarkTask:
with get_sync_db_session() as session:
statement = select(MarkTask).where(MarkTask.process_users.like('%{}%'.format(user_id)))
return session.exec(statement).first()
@classmethod
def get_task_list_byuid(cls, user_id: int, task_id: int) -> MarkTask:
with get_sync_db_session() as session:
statement = select(MarkTask).where(MarkTask.id == task_id)
return session.exec(statement).first()
@classmethod
def update_task(cls, task_id: int, status: int):
with get_sync_db_session() as session:
st = update(MarkTask).where(MarkTask.id == task_id).values(status=status)
session.exec(st)
session.commit()
@classmethod
def get_all_task(
cls,
page_size: int = 10,
page_num: int = 1,
):
with get_sync_db_session() as session:
statement = select(MarkTask)
total_count_query = select(func.count()).select_from(statement.alias('subquery'))
statement = statement.order_by(MarkTask.create_time.desc())
total_count = session.execute(total_count_query).scalar()
statement = statement.limit(page_size).offset((page_num - 1) * page_size)
return session.exec(statement).all(), total_count
@classmethod
def get_task_list(
cls,
status: int,
create_id: Optional[int],
user_id: Optional[int],
page_size: int = 10,
page_num: int = 1,
):
with get_sync_db_session() as session:
statement = select(MarkTask)
filter = []
filter_or = []
if status:
filter.append(MarkTask.status == status)
if user_id:
filter.append(func.find_in_set(user_id, MarkTask.process_users) > 0)
if create_id:
filter.append(MarkTask.create_id == create_id)
if user_id:
filter_or.append(func.find_in_set(user_id, MarkTask.process_users) > 0)
# filter_or.append(MarkTask.process_users.like('%{}%'.format(user_id)))
if status:
filter_or.append(MarkTask.status == status)
if filter and not filter_or:
statement = statement.filter(*filter)
if filter_or:
statement = statement.filter(or_(and_(*filter), and_(*filter_or)))
# Calculate total tasks
total_count_query = select(func.count()).select_from(statement.alias('subquery'))
statement = statement.order_by(MarkTask.create_time.desc())
total_count = session.execute(total_count_query).scalar()
statement = statement.limit(page_size).offset((page_num - 1) * page_size)
return session.exec(statement).all(), total_count
================================================
FILE: src/backend/bisheng/database/models/message.py
================================================
from datetime import datetime
from enum import Enum
from typing import Dict, List, Optional, Tuple
from loguru import logger
from sqlalchemy.dialects.mysql import LONGTEXT
from sqlmodel import (JSON, Column, DateTime, Field, String, Text, case, delete, func, not_, or_,
select, text, update, col)
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session, get_async_db_session
class LikedType(Enum):
UNRATED = 0 # Not assessed
LIKED = 1 # Love
DISLIKED = 2 # don't like}
class MessageBase(SQLModelSerializable):
is_bot: bool = Field(index=False, description='Chat Role')
source: Optional[int] = Field(default=None, index=False, description='Whether traceability is supported')
mark_status: Optional[int] = Field(index=False, default=1, description='Tag status')
mark_user: Optional[int] = Field(default=None, index=False, description='Flagging User')
mark_user_name: Optional[str] = Field(default=None, index=False, description='Flagging User')
message: Optional[str] = Field(default=None, sa_column=Column(LONGTEXT), description='Chat Message')
extra: Optional[str] = Field(default=None, sa_column=Column(Text), description='Connection information, etc.')
type: str = Field(index=False, description='Type of Message')
category: str = Field(index=False, max_length=32, description='Message category, questionetc.')
flow_id: str = Field(index=True, description='Corresponding Skillsid')
chat_id: Optional[str] = Field(default=None, index=True, description='chat_id, Frontend Generation')
user_id: Optional[int] = Field(default=None, index=True, description='Usersid')
liked: Optional[int] = Field(index=False, default=0, description="Whether the user likes it or 0Not assessed/1 Love/2 don't like}")
solved: Optional[int] = Field(index=False, default=0, description='Whether the user likes it or 0Not assessed/1 Solution/2 Unresolve')
copied: Optional[int] = Field(index=False, default=0, description='Is the user copying 0: Not copied 1Copied: ')
sensitive_status: Optional[int] = Field(index=False, default=1, description='Sensitive Word Status 1Pass 2violates regulation')
sender: Optional[str] = Field(index=False, default='', description='autogen Sender')
receiver: Optional[Dict] = Field(index=False, default=None, description='autogen Sender')
intermediate_steps: Optional[str] = Field(default=None, sa_column=Column(Text), description='Process Log')
files: Optional[str] = Field(default=None, sa_column=Column(String(length=4096)), description='Uploaded documents, etc.')
remark: Optional[str] = Field(default=None, sa_column=Column(String(length=4096)),
description='Note. break_answer: Interrupted response inactionhistoryPass to Model')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class ChatMessage(MessageBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
receiver: Optional[Dict] = Field(default=None, sa_column=Column(JSON))
# Key: Set table level character set to utf8mb4
__table_args__ = {
"mysql_charset": "utf8mb4",
"mysql_collate": "utf8mb4_unicode_ci"
}
class ChatMessageRead(MessageBase):
id: Optional[int] = None
class ChatMessageQuery(MessageBase):
id: Optional[int] = None
receiver: Optional[Dict] = None
class ChatMessageCreate(MessageBase):
pass
class MessageDao(MessageBase):
@classmethod
def static_msg_liked(cls, liked: int, flow_id: str, create_time_begin: datetime,
create_time_end: datetime):
base_condition = select(func.count(ChatMessage.id)).where(ChatMessage.liked == liked)
if flow_id:
base_condition = base_condition.where(ChatMessage.flow_id == flow_id)
if create_time_begin and create_time_end:
base_condition = base_condition.where(ChatMessage.create_time > create_time_begin,
ChatMessage.create_time < create_time_end)
with get_sync_db_session() as session:
return session.scalar(base_condition)
@classmethod
def app_list_group_by_chat_id(
cls,
page_size: int,
page_num: int,
flow_ids: Optional[list[str]],
user_ids: Optional[list[int]],
) -> Tuple[List[Dict], int]:
with get_sync_db_session() as session:
count_stat = select(func.count(func.distinct(ChatMessage.chat_id)))
sql = select(
ChatMessage.chat_id,
ChatMessage.user_id,
ChatMessage.flow_id,
func.max(ChatMessage.create_time).label('create_time'),
func.sum(case((ChatMessage.liked == 1, 1), else_=0)),
func.sum(case((ChatMessage.liked == 2, 1), else_=0)),
func.sum(case((ChatMessage.copied == 1, 1), else_=0)),
)
if flow_ids:
count_stat = count_stat.where(ChatMessage.flow_id.in_(flow_ids))
sql = sql.where(ChatMessage.flow_id.in_(flow_ids))
if user_ids:
count_stat = count_stat.where(
or_(
ChatMessage.mark_user.in_(user_ids),
ChatMessage.mark_status == 1,
))
sql = sql.where(
or_(ChatMessage.mark_user.in_(user_ids), ChatMessage.mark_status == 1))
sql = sql.group_by(ChatMessage.chat_id, ChatMessage.user_id,
ChatMessage.flow_id).order_by(
func.max(ChatMessage.create_time).desc()).offset(
page_size * (page_num - 1)).limit(page_size)
res_list = session.exec(sql).all()
total_count = session.scalar(count_stat)
dict_res = [{
'chat_id': chat_id,
'user_id': user_id,
'flow_id': flow_id,
'like_count': like_num,
'dislike_count': dislike_num,
'copied_count': copied_num,
'create_time': create_time
} for chat_id, user_id, flow_id, create_time, like_num, dislike_num, copied_num in
res_list]
logger.info(res_list)
return dict_res, total_count
class ChatMessageDao(MessageBase):
@classmethod
def get_latest_message_by_chatid(cls, chat_id: str):
statement = select(ChatMessage).where(ChatMessage.chat_id == chat_id).order_by(
ChatMessage.id.desc()).limit(1)
with get_sync_db_session() as session:
res = session.exec(statement).all()
if res:
return res[0]
else:
return None
@classmethod
async def aget_latest_message_by_chatid(cls, chat_id: str):
statement = select(ChatMessage).where(ChatMessage.chat_id == chat_id).order_by(
ChatMessage.id.desc()).limit(1)
async with get_async_db_session() as session:
res = await session.exec(statement)
res = res.all()
if res:
return res[0]
else:
return None
@classmethod
def get_latest_message_by_chat_ids(cls,
chat_ids: list[str],
category: str = None,
exclude_category: str = None):
"""
Get the most recent message content for each session
"""
statement = select(ChatMessage.chat_id,
func.max(ChatMessage.id)).where(ChatMessage.chat_id.in_(chat_ids))
if category:
statement = statement.where(ChatMessage.category == category)
if exclude_category:
statement = statement.where(ChatMessage.category != exclude_category)
statement = statement.group_by(ChatMessage.chat_id)
with get_sync_db_session() as session:
# Get the latestidVertical
res = session.exec(statement).all()
ids = [one[1] for one in res]
# Get the details of your message
statement = select(ChatMessage).where(ChatMessage.id.in_(ids))
return session.exec(statement).all()
@classmethod
def get_messages_by_chat_id(cls,
chat_id: str,
category_list: list = None,
limit: int = 10) -> List[ChatMessage]:
with get_sync_db_session() as session:
statement = select(ChatMessage).where(ChatMessage.chat_id == chat_id)
if category_list:
statement = statement.where(ChatMessage.category.in_(category_list))
statement = statement.limit(limit).order_by(ChatMessage.create_time.asc())
return session.exec(statement).all()
@classmethod
async def aget_messages_by_chat_id(cls,
chat_id: str,
category_list: list = None,
limit: int = 10) -> List[ChatMessage]:
async with get_async_db_session() as session:
statement = select(ChatMessage).where(ChatMessage.chat_id == chat_id)
if category_list:
statement = statement.where(ChatMessage.category.in_(category_list))
statement = statement.limit(limit).order_by(ChatMessage.create_time.asc())
result = await session.exec(statement)
return result.all()
@classmethod
def get_last_msg_by_flow_id(cls, flow_id: List[str], chat_id: List[str]):
with get_sync_db_session() as session:
statement = select(ChatMessage.chat_id,
ChatMessage.flow_id).where(ChatMessage.flow_id.in_(flow_id)).where(
not_(ChatMessage.chat_id.in_(chat_id))).group_by(
ChatMessage.chat_id, ChatMessage.flow_id)
return session.exec(statement).all()
@classmethod
def get_msg_by_chat_id(cls, chat_id: str):
with get_sync_db_session() as session:
statement = select(ChatMessage).where(ChatMessage.chat_id == chat_id)
return session.exec(statement).all()
@classmethod
def get_msg_by_flow(cls, flow_id: str):
with get_sync_db_session() as session:
# sql = text("select chat_id,count(*) as chat_count from chatmessage where flow_id=:flow_id group by chat_id") # noqa
st = select(ChatMessage.chat_id).where(ChatMessage.flow_id == flow_id).group_by(
ChatMessage.chat_id)
return session.exec(st).all()
@classmethod
def get_msg_by_flows(cls, flow_id: List[str]):
with get_sync_db_session() as session:
st = select(ChatMessage.chat_id).where(ChatMessage.flow_id.in_(flow_id)).group_by(
ChatMessage.chat_id)
return session.exec(st).all()
@classmethod
def delete_by_user_chat_id(cls, user_id: int, chat_id: str):
if user_id is None or chat_id is None:
logger.info('delete_param_error user_id={} chat_id={}', user_id, chat_id)
return False
statement = delete(ChatMessage).where(ChatMessage.chat_id == chat_id,
ChatMessage.user_id == user_id)
with get_sync_db_session() as session:
session.exec(statement)
session.commit()
return True
@classmethod
def delete_by_message_id(cls, user_id: int, message_id: str):
if user_id is None or message_id is None:
logger.info('delete_param_error user_id={} chat_id={}', user_id, message_id)
return False
statement = delete(ChatMessage).where(ChatMessage.id == message_id,
ChatMessage.user_id == user_id)
with get_sync_db_session() as session:
session.exec(statement)
session.commit()
return True
@classmethod
def insert_one(cls, message: ChatMessage) -> ChatMessage:
with get_sync_db_session() as session:
session.add(message)
session.commit()
session.refresh(message)
return message
@classmethod
async def ainsert_one(cls, message: ChatMessage) -> ChatMessage:
async with get_async_db_session() as session:
session.add(message)
await session.commit()
await session.refresh(message)
return message
@classmethod
def insert_batch(cls, messages: List[ChatMessage]):
with get_sync_db_session() as session:
session.add_all(messages)
session.commit()
ret = []
for one in messages:
session.refresh(one)
ret.append(one)
return ret
@classmethod
def get_message_by_id(cls, message_id: int) -> Optional[ChatMessage]:
with get_sync_db_session() as session:
return session.exec(select(ChatMessage).where(ChatMessage.id == message_id)).first()
@classmethod
async def aget_message_by_id(cls, message_id: int) -> Optional[ChatMessage]:
async with get_async_db_session() as session:
result = await session.exec(select(ChatMessage).where(ChatMessage.id == message_id))
return result.first()
@classmethod
def update_message(cls, message_id: int, user_id: int, message: str):
with get_sync_db_session() as session:
statement = update(ChatMessage).where(ChatMessage.id == message_id).where(
ChatMessage.user_id == user_id).values(message=message)
session.exec(statement)
session.commit()
@classmethod
def update_message_model(cls, message: ChatMessage):
with get_sync_db_session() as session:
session.add(message)
session.commit()
session.refresh(message)
return message
@classmethod
async def aupdate_message_model(cls, message: ChatMessage):
async with get_async_db_session() as session:
session.add(message)
await session.commit()
await session.refresh(message)
return message
@classmethod
def update_message_copied(cls, message_id: int, copied: int):
with get_sync_db_session() as session:
statement = update(ChatMessage).where(ChatMessage.id == message_id).values(
copied=copied)
session.exec(statement)
session.commit()
@classmethod
def update_message_mark(cls, chat_id: str, status: int):
with get_sync_db_session() as session:
statement = update(ChatMessage).where(ChatMessage.chat_id == chat_id).values(
mark_status=status)
session.exec(statement)
session.commit()
@classmethod
async def get_all_message_by_chat_ids(cls, chat_ids: List[str]) -> List[ChatMessage]:
statement = select(ChatMessage).where(ChatMessage.chat_id.in_(chat_ids)).order_by(
ChatMessage.create_time.asc())
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
async def afilter_message_by_chat_id(cls, chat_id: str, flow_id: str, message_id: int = None, page_size: int = 20) \
-> List[ChatMessage]:
statement = select(ChatMessage).where(ChatMessage.chat_id == chat_id).where(ChatMessage.flow_id == flow_id)
if message_id:
statement = statement.where(ChatMessage.id < message_id)
statement = statement.order_by(col(ChatMessage.id).desc()).limit(page_size)
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
================================================
FILE: src/backend/bisheng/database/models/recall_chunk.py
================================================
from datetime import datetime
from typing import Optional
from sqlalchemy import Column, DateTime, Text, text
from sqlmodel import Field
from bisheng.common.models.base import SQLModelSerializable
class RecallBase(SQLModelSerializable):
message_id: Optional[int] = Field(default=None, index=True, unique=False)
chat_id: str = Field(index=False)
keywords: str = Field(sa_column=Column(Text))
chunk: Optional[str] = Field(default=None, sa_column=Column(Text))
meta_data: Optional[str] = Field(default=None, sa_column=Column(Text))
file_id: Optional[int] = Field(default=None, index=False)
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class RecallChunk(RecallBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
class RecallChunkRead(RecallBase):
id: Optional[int] = None
score: Optional[int] = None
class RecallChunkQuery(SQLModelSerializable):
id: Optional[int] = None
server: Optional[str] = None
class RecallChunkCreate(RecallBase):
pass
================================================
FILE: src/backend/bisheng/database/models/report.py
================================================
from datetime import datetime
from typing import Optional
from sqlalchemy import Column, DateTime, text
from sqlmodel import Field
from bisheng.common.models.base import SQLModelSerializable
class ReportBase(SQLModelSerializable):
# ```
# Useflow_id Path to get the latest template in reverse order by update time
# Records of the final report generated by the template are stored`
flow_id: str = Field(index=False, description='Skill name')
file_name: Optional[str] = Field(default=None, index=False, description='Generate Report Name')
template_name: Optional[str] = Field(default=None, index=False, description='Report Template Data Storage Path')
version_key: Optional[str] = Field(default=None, index=True, unique=True, description='Frontend Template Uniquekey')
newversion_key: Optional[str] = Field(index=False, default=None, description='Frontend Template Nextkey')
object_name: Optional[str] = Field(default=None, index=False, description='Report Template Data Storage Path')
del_yn: Optional[int] = Field(index=False, default=0, description='Delete Status 1Show Delete')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class Report(ReportBase, table=True):
__tablename__ = 't_report'
id: Optional[int] = Field(default=None, primary_key=True)
class ReportRead(ReportBase):
id: Optional[int] = None
class RoleUpdate(ReportBase):
role_name: Optional[str] = None
remark: Optional[str] = None
class RoleCreate(ReportBase):
pass
================================================
FILE: src/backend/bisheng/database/models/role.py
================================================
from datetime import datetime
from typing import List, Optional
from sqlalchemy import Column, DateTime, text, func, delete, and_, UniqueConstraint
from sqlmodel import Field, select
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session, get_async_db_session
from bisheng.database.constants import AdminRole
from bisheng.database.models.role_access import RoleAccess
from bisheng.user.domain.models.user_role import UserRole
class RoleBase(SQLModelSerializable):
role_name: str = Field(index=False, description='Frontend Display Name')
group_id: Optional[int] = Field(default=None, index=True)
remark: Optional[str] = Field(default=None, index=False)
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class Role(RoleBase, table=True):
__table_args__ = (UniqueConstraint('group_id', 'role_name', name='group_role_name_uniq'),)
id: Optional[int] = Field(default=None, primary_key=True)
class RoleRead(RoleBase):
id: Optional[int] = None
class RoleUpdate(RoleBase):
role_name: Optional[str] = None
remark: Optional[str] = None
class RoleCreate(RoleBase):
pass
class RoleDao(RoleBase):
@classmethod
def get_role_by_groups(cls, group: List[int], keyword: str = None, page: int = 0, limit: int = 0) -> List[Role]:
"""
Get a list of roles within a user group, Does not contain the System Administrator role
params:
group: User GroupsIDVertical
page: Page
limit: Listings Per Page
return: Role List
"""
statement = select(Role).where(Role.id > AdminRole)
if group:
statement = statement.where(Role.group_id.in_(group))
if keyword:
statement = statement.filter(Role.role_name.like(f'%{keyword}%'))
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
statement = statement.order_by(Role.create_time.desc())
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
def count_role_by_groups(cls, group: List[int], keyword: str = None) -> int:
"""
Count the number of roles in the user group, the parameters are as above
"""
statement = select(func.count(Role.id)).where(Role.id > AdminRole)
if group:
statement = statement.where(Role.group_id.in_(group))
if keyword:
statement = statement.filter(Role.role_name.like(f'%{keyword}%'))
with get_sync_db_session() as session:
return session.scalar(statement)
@classmethod
def insert_role(cls, role: RoleCreate):
with get_sync_db_session() as session:
session.add(role)
session.commit()
session.refresh(role)
return role
@classmethod
def delete_role(cls, role_id: int):
with get_sync_db_session() as session:
session.exec(delete(Role).where(Role.id == role_id))
session.exec(delete(UserRole).where(UserRole.role_id == role_id))
session.exec(delete(RoleAccess).where(RoleAccess.role_id == role_id))
session.commit()
@classmethod
def get_role_by_ids(cls, role_ids: List[int]) -> List[Role]:
with get_sync_db_session() as session:
return session.query(Role).filter(Role.id.in_(role_ids)).all()
@classmethod
def get_role_by_id(cls, role_id: int) -> Role:
with get_sync_db_session() as session:
return session.query(Role).filter(Role.id == role_id).first()
@classmethod
async def aget_role_by_id(cls, role_id: int) -> Role:
async with get_async_db_session() as session:
result = await session.execute(select(Role).where(Role.id == role_id))
return result.scalars().first()
@classmethod
def delete_role_by_group_id(cls, group_id: int):
"""
Delete all roles under the grouping and clean up the corresponding roles for the user
"""
from bisheng.user.domain.models.user_role import UserRole
with get_sync_db_session() as session:
# Clean corresponding users
all_user = select(UserRole, Role).join(
Role, and_(UserRole.role_id == Role.id,
Role.group_id == group_id)).group_by(UserRole.id)
all_user = session.exec(all_user).all()
session.exec(delete(UserRole).where(UserRole.id.in_([one.UserRole.id for one in all_user])))
session.exec(delete(Role).where(Role.group_id == group_id))
session.commit()
================================================
FILE: src/backend/bisheng/database/models/role_access.py
================================================
from datetime import datetime
from enum import Enum
from typing import List, Optional, Union
from pydantic import BaseModel
from sqlalchemy import Column, DateTime, text
from sqlmodel import Field, select, delete, col
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session, get_async_db_session
class RoleAccessBase(SQLModelSerializable):
role_id: int = Field(index=True)
third_id: str = Field(index=False)
type: int = Field(index=False)
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class RoleAccess(RoleAccessBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
class RoleAccessRead(RoleAccessBase):
id: Optional[int] = None
class RoleAccessCreate(RoleAccessBase):
pass
class WebMenuResource(Enum):
"""Front-end menu bar resources"""
BUILD = 'build' # Build Menu
KNOWLEDGE = 'knowledge' # Knowledge Menu
MODEL = 'model' # Model Menu
EVALUATION = 'evaluation' # Evaluation Menu
FRONTEND = 'frontend' # Front-end permissions
BACKEND = 'backend' # Backend Access
CREATE_DASHBOARD = 'create_dashboard' # Create board permissions
class AccessType(Enum):
"""Type of the role_access"""
KNOWLEDGE = 1 # Knowledge Base Reading Permissions
FLOW = 2 # Skill Read Permissions
KNOWLEDGE_WRITE = 3 # Knowledge Base Write Permissions
FLOW_WRITE = 4 # Skill Write Permissions
ASSISTANT_READ = 5 # Assistant Read Permissions
ASSISTANT_WRITE = 6 # Assistant Write Permissions
GPTS_TOOL_READ = 7 # Tool Read Permissions
GPTS_TOOL_WRITE = 8 # Tool Write Permissions
WORKFLOW = 9 # Workflow Read Permissions
WORKFLOW_WRITE = 10 # Workflow write permissions
DASHBOARD = 11 # Kanban Reading Permissions
DASHBOARD_WRITE = 12 # Kanban writing permissions
WEB_MENU = 99 # Frontend Menu Bar Permission Restrictions
class RoleRefresh(BaseModel):
role_id: int
access_id: list[Union[str, int]]
type: int
class RoleAccessDao(RoleAccessBase):
@classmethod
def get_role_access(cls, role_ids: List[int], access_type: AccessType) -> List[RoleAccess]:
with get_sync_db_session() as session:
if access_type:
return session.exec(
select(RoleAccess).where(RoleAccess.role_id.in_(role_ids),
RoleAccess.type == access_type.value)).all()
return session.exec(select(RoleAccess).where(RoleAccess.role_id.in_(role_ids))).all()
@classmethod
async def aget_role_access(cls, role_ids: List[int], access_type: AccessType = None) -> List[RoleAccess]:
statement = select(RoleAccess).where(RoleAccess.role_id.in_(role_ids))
if access_type:
statement = statement.where(RoleAccess.type == access_type.value)
async with get_async_db_session() as session:
return (await session.exec(statement)).all()
@classmethod
def get_role_access_batch(cls, role_ids: List[int], access_type: List[AccessType]) -> List[RoleAccess]:
with get_sync_db_session() as session:
if access_type:
return session.exec(
select(RoleAccess).where(RoleAccess.role_id.in_(role_ids),
RoleAccess.type.in_([x.value for x in access_type]))).all()
@classmethod
async def aget_role_access_batch(cls, role_ids: List[int], access_type: List[AccessType]) -> List[RoleAccess]:
statement = select(RoleAccess).where(col(RoleAccess.role_id).in_(role_ids))
if access_type:
statement = statement.where(col(RoleAccess.type).in_([x.value for x in access_type]))
async with get_async_db_session() as session:
return (await session.exec(statement)).all()
@classmethod
def judge_role_access(cls, role_ids: List[int], third_id: str, access_type: AccessType) -> Optional[RoleAccess]:
with get_sync_db_session() as session:
return session.exec(select(RoleAccess).filter(
RoleAccess.role_id.in_(role_ids),
RoleAccess.type == access_type.value,
RoleAccess.third_id == third_id
)).first()
@classmethod
async def ajudge_role_access(cls, role_ids: List[int], third_id: str, access_type: AccessType) -> Optional[
RoleAccess]:
statement = select(RoleAccess).filter(
col(RoleAccess.role_id).in_(role_ids),
col(RoleAccess.type) == access_type.value,
col(RoleAccess.third_id) == third_id
)
async with get_async_db_session() as session:
return (await session.exec(statement)).first()
@classmethod
def find_role_access(cls, role_ids: List[int], third_ids: List[str], access_type: AccessType) -> List[RoleAccess]:
with get_sync_db_session() as session:
if access_type:
return session.exec(
select(RoleAccess).where(RoleAccess.role_id.in_(role_ids),
RoleAccess.third_id.in_(third_ids),
RoleAccess.type == access_type.value)).all()
return session.exec(select(RoleAccess).where(RoleAccess.role_id.in_(role_ids))).all()
@classmethod
async def afind_role_access(cls, role_ids: List[int], third_ids: List[str], access_type: AccessType) -> List[
RoleAccess]:
statement = select(RoleAccess).where(
col(RoleAccess.role_id).in_(role_ids),
col(RoleAccess.third_id).in_(third_ids)
)
if access_type:
statement = statement.where(col(RoleAccess.type) == access_type.value)
async with get_async_db_session() as session:
return (await session.exec(statement)).all()
@classmethod
async def update_role_access_all(cls, role_id: int, access_type: AccessType,
access_ids: List[Union[str, int]]) -> None:
"""
Update the role's permissions, delete it first and add it later
"""
async with get_async_db_session() as session:
# Clear all old permissions first
statement = delete(RoleAccess).where(col(RoleAccess.role_id) == str(role_id),
col(RoleAccess.type) == access_type.value)
await session.exec(statement)
# Add New Permission
for access_id in access_ids:
role_access = RoleAccess(role_id=role_id, third_id=str(access_id), type=access_type.value)
session.add(role_access)
await session.commit()
================================================
FILE: src/backend/bisheng/database/models/session.py
================================================
from datetime import datetime
from enum import Enum
from typing import Optional, List
from sqlalchemy import JSON
from sqlmodel import Field, Column, DateTime, text, select, func, update
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session, get_async_db_session
from bisheng.database.models.user_group import UserGroupDao
class SensitiveStatus(Enum):
PASS = 1 # Setuju
VIOLATIONS = 2 # violates regulation
class MessageSessionBase(SQLModelSerializable):
""" Conversation table """
chat_id: str = Field(default=None, primary_key=True, description='Session UniqueID')
flow_id: str = Field(index=True, description='Apply UniqueID')
flow_type: int = Field(description='App type. Skills, assistants, workflows')
flow_name: str = Field(index=True, description='Application name')
flow_description: Optional[str] = Field(default=None, description='App Description')
flow_logo: Optional[str] = Field(default=None, description='Applicationslogo')
user_id: int = Field(index=True, description='User who created the sessionID')
group_ids: Optional[List[int]] = Field(default=None, sa_column=Column(JSON),
description="Belongs to a user groupIDVertical")
is_delete: Optional[bool] = Field(default=False,
description='Whether the corresponding skill or the session itself was deleted')
like: Optional[int] = Field(default=0, description='Number of liked messages')
dislike: Optional[int] = Field(default=0, description='Number of messages clicked')
copied: Optional[int] = Field(default=0, description='Number of messages copied')
sensitive_status: int = Field(default=SensitiveStatus.PASS.value, description='Review Status')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class MessageSession(MessageSessionBase, table=True):
__tablename__ = 'message_session'
class MessageSessionDao(MessageSessionBase):
@classmethod
def insert_one(cls, data: MessageSession) -> MessageSession:
if not data.group_ids:
user_groups = UserGroupDao.get_user_group(data.user_id)
data.group_ids = [ug.group_id for ug in user_groups]
with get_sync_db_session() as session:
session.add(data)
session.commit()
session.refresh(data)
return data
@classmethod
async def async_insert_one(cls, data: MessageSession) -> MessageSession:
if not data.group_ids:
user_groups = await UserGroupDao.aget_user_group(data.user_id)
data.group_ids = [ug.group_id for ug in user_groups]
async with get_async_db_session() as session:
session.add(data)
await session.commit()
await session.refresh(data)
return data
@classmethod
async def delete_session(cls, chat_id: str):
statement = update(MessageSession).where(MessageSession.chat_id == chat_id).values(is_delete=True)
with get_async_db_session() as session:
await session.exec(statement)
await session.commit()
@classmethod
def get_one(cls, chat_id: str) -> MessageSession | None:
statement = select(MessageSession).where(MessageSession.chat_id == chat_id)
with get_sync_db_session() as session:
return session.exec(statement).first()
@classmethod
async def async_get_one(cls, chat_id: str) -> MessageSession | None:
statement = select(MessageSession).where(MessageSession.chat_id == chat_id)
async with get_async_db_session() as session:
return (await session.exec(statement)).first()
@classmethod
def generate_filter_session_statement(cls,
statement,
chat_ids: List[str] = None,
sensitive_status: List[SensitiveStatus] = None,
flow_ids: List[str] = None,
user_ids: List[int] = None,
feedback: str = None,
start_date: datetime = None,
end_date: datetime = None,
include_delete: bool = True,
exclude_chats: List[str] = None,
flow_type: int = None):
if chat_ids:
statement = statement.where(MessageSession.chat_id.in_(chat_ids))
if flow_ids:
statement = statement.where(MessageSession.flow_id.in_(flow_ids))
if user_ids:
statement = statement.where(MessageSession.user_id.in_(user_ids))
if feedback == 'like':
statement = statement.where(MessageSession.like > 0)
elif feedback == 'dislike':
statement = statement.where(MessageSession.dislike > 0)
elif feedback == 'copied':
statement = statement.where(MessageSession.copied > 0)
if not include_delete:
statement = statement.where(MessageSession.is_delete == False) # noqa
if exclude_chats:
statement = statement.where(MessageSession.chat_id.not_in(exclude_chats))
if start_date:
statement = statement.where(MessageSession.create_time >= start_date)
if end_date:
statement = statement.where(MessageSession.create_time <= end_date)
if sensitive_status:
statement = statement.where(
MessageSession.sensitive_status.in_([one.value for one in sensitive_status]))
if flow_type:
statement = statement.where(MessageSession.flow_type.in_(flow_type))
return statement
@classmethod
def filter_session(cls,
chat_ids: List[str] = None,
sensitive_status: List[SensitiveStatus] = None,
flow_ids: List[str] = None,
user_ids: List[int] = None,
feedback: str = None,
start_date: datetime = None,
end_date: datetime = None,
include_delete: bool = True,
exclude_chats: List[str] = None,
page: int = 0,
limit: int = 0,
flow_type: List[int] = None) -> List[MessageSession]:
statement = select(MessageSession)
statement = cls.generate_filter_session_statement(statement,
chat_ids,
sensitive_status,
flow_ids,
user_ids,
feedback,
start_date,
end_date,
include_delete,
exclude_chats,
flow_type=flow_type)
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
statement = statement.order_by(MessageSession.create_time.desc())
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
async def afilter_session(cls,
chat_ids: List[str] = None,
sensitive_status: List[SensitiveStatus] = None,
flow_ids: List[str] = None,
user_ids: List[int] = None,
feedback: str = None,
start_date: datetime = None,
end_date: datetime = None,
include_delete: bool = True,
exclude_chats: List[str] = None,
page: int = 0,
limit: int = 0,
flow_type: List[int] = None) -> List[MessageSession]:
statement = select(MessageSession)
statement = cls.generate_filter_session_statement(statement,
chat_ids,
sensitive_status,
flow_ids,
user_ids,
feedback,
start_date,
end_date,
include_delete,
exclude_chats,
flow_type=flow_type)
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
statement = statement.order_by(MessageSession.create_time.desc())
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
async def get_statement_results(cls, statement, page: int = 0, limit: int = 0) -> List[MessageSession]:
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
statement = statement.order_by(MessageSession.create_time.desc())
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
async def get_statement_count(cls, statement) -> int:
count_statement = select(func.count()).select_from(statement.subquery())
async with get_async_db_session() as session:
result = await session.exec(count_statement)
return result.first()
@classmethod
async def filter_session_count(cls,
chat_ids: List[str] = None,
sensitive_status: List[SensitiveStatus] = None,
flow_ids: List[str] = None,
user_ids: List[int] = None,
feedback: str = None,
start_date: datetime = None,
end_date: datetime = None,
include_delete: bool = True,
exclude_chats: List[str] = None,
flow_type: List[int] = None) -> int:
statement = select(func.count(MessageSession.chat_id))
statement = cls.generate_filter_session_statement(statement, chat_ids, sensitive_status,
flow_ids, user_ids, feedback, start_date,
end_date, include_delete, exclude_chats, flow_type=flow_type)
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.first()
@classmethod
def update_sensitive_status(cls, chat_id: str, sensitive_status: SensitiveStatus):
statement = update(MessageSession).where(MessageSession.chat_id == chat_id).values(
sensitive_status=sensitive_status.value)
with get_sync_db_session() as session:
session.exec(statement)
session.commit()
@classmethod
def add_like_count(cls, chat_id: str, like_count: int):
if like_count == 0:
return
statement = update(MessageSession).where(MessageSession.chat_id == chat_id).values(
like=MessageSession.like + like_count)
with get_sync_db_session() as session:
session.exec(statement)
session.commit()
@classmethod
def add_dislike_count(cls, chat_id: str, dislike_count: int):
if dislike_count == 0:
return
statement = update(MessageSession).where(MessageSession.chat_id == chat_id).values(
dislike=MessageSession.dislike + dislike_count)
with get_sync_db_session() as session:
session.exec(statement)
session.commit()
@classmethod
def add_copied_count(cls, chat_id: str, copied_count: int):
if copied_count == 0:
return
statement = update(MessageSession).where(MessageSession.chat_id == chat_id).values(
copied=MessageSession.copied + copied_count)
with get_sync_db_session() as session:
session.exec(statement)
session.commit()
@classmethod
def update_session_info_by_flow(cls, name: str, description: str, logo: str, flow_id: str, flow_type: int):
statement = update(MessageSession).where(
MessageSession.flow_id == flow_id,
MessageSession.flow_type == flow_type
).values(
flow_name=name,
flow_description=description,
flow_logo=logo
)
with get_sync_db_session() as session:
session.exec(statement)
session.commit()
================================================
FILE: src/backend/bisheng/database/models/tag.py
================================================
from datetime import datetime
from typing import Optional, List, Dict
from sqlalchemy import Column, DateTime, UniqueConstraint
from sqlmodel import Field, select, delete, and_, func, text
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session
from bisheng.database.models.group_resource import ResourceTypeEnum
class TagBase(SQLModelSerializable):
"""
Tag Form
"""
name: Optional[str] = Field(default=None, index=True, unique=True, description="Label Name")
user_id: int = Field(default=0, description='Create UserID')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')), description="Creation Time")
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class Tag(TagBase, table=True):
id: Optional[int] = Field(default=None, index=True, primary_key=True, description="Tag UniqueID")
class TagLinkBase(SQLModelSerializable):
"""
Label Association Table
"""
tag_id: int = Field(index=True, description="labelID")
resource_id: str = Field(description="Resource UniqueID")
resource_type: int = Field(description="Resource Type") # Usegroup_resource.ResourceTypeEnumEnumeration
user_id: int = Field(default=0, description='Create UserID')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')), description="Creation Time")
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class TagLink(TagLinkBase, table=True):
__table_args__ = (UniqueConstraint('resource_id', 'resource_type', 'tag_id', name='resource_tag_uniq'),)
id: Optional[int] = Field(default=None, index=True, primary_key=True, description="Tag Association UniqueID")
class TagDao(Tag):
@classmethod
def search_tags(cls, keyword: str = None, page: int = 0, limit: int = 0) -> List[Tag]:
""" Get all tags by default Paginable """
statement = select(Tag)
if keyword:
statement = statement.where(Tag.name.like(f'%{keyword}%'))
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
def count_tags(cls, keyword: str = None) -> int:
""" Count the number of tags """
statement = select(func.count(Tag.id))
if keyword:
statement = statement.where(Tag.name.like(f'%{keyword}%'))
with get_sync_db_session() as session:
return session.scalar(statement)
@classmethod
def insert_tag(cls, data: Tag) -> Tag:
""" Insert a new label data """
with get_sync_db_session() as session:
session.add(data)
session.commit()
session.refresh(data)
return data
@classmethod
def delete_tag(cls, tag_id: int) -> bool:
""" Delete a label data """
with get_sync_db_session() as session:
# Delete tag data
session.exec(delete(Tag).where(Tag.id == tag_id))
# Delete data associated with tags
session.exec(delete(TagLink).where(TagLink.tag_id == tag_id))
session.commit()
return True
@classmethod
def get_tag_by_name(cls, name: str) -> Tag:
""" Find tags by tag name """
with get_sync_db_session() as session:
statement = select(Tag).where(Tag.name == name)
return session.exec(statement).first()
@classmethod
def get_tag_by_id(cls, tag_id: int) -> Tag:
""" by TagIDFind Tags """
with get_sync_db_session() as session:
statement = select(Tag).where(Tag.id == tag_id)
return session.exec(statement).first()
@classmethod
def get_tags_by_ids(cls, tag_ids: List[int]) -> List[Tag]:
""" by TagIDFind Tags """
with get_sync_db_session() as session:
statement = select(Tag).where(Tag.id.in_(tag_ids))
return session.exec(statement).all()
@classmethod
def get_tags_by_resource(cls, resource_type: ResourceTypeEnum | None, resource_ids: list[str]) -> Dict[
str, List[Tag]]:
""" Query all tags under resources """
if resource_type is None:
statement = select(Tag.id, Tag.name, TagLink.resource_id).join(TagLink,
and_(
Tag.id == TagLink.tag_id,
TagLink.resource_id.in_(resource_ids)))
else:
statement = select(Tag.id, Tag.name, TagLink.resource_id).join(TagLink,
and_(
Tag.id == TagLink.tag_id,
TagLink.resource_id.in_(resource_ids),
TagLink.resource_type == resource_type.value))
with get_sync_db_session() as session:
result = session.exec(statement).all()
ret = {}
for one in result:
if one[2] not in ret:
ret[one[2]] = []
ret[one[2]].append(Tag(id=one[0], name=one[1]))
return ret
@classmethod
def get_tags_by_resource_batch(cls, resource_type: List[ResourceTypeEnum], resource_ids: list[str]) -> Dict[
str, List[Tag]]:
""" Query all tags under resources """
with get_sync_db_session() as session:
statement = select(Tag.id, Tag.name, TagLink.resource_id).join(TagLink,
and_(
Tag.id == TagLink.tag_id,
TagLink.resource_id.in_(resource_ids),
TagLink.resource_type.in_(
[x.value for x in resource_type])))
result = session.exec(statement).all()
ret = {}
for one in result:
if one[2] not in ret:
ret[one[2]] = []
ret[one[2]].append(Tag(id=one[0], name=one[1]))
return ret
@classmethod
def get_resources_by_tags(cls, tag_ids: List[int], resource_type: ResourceTypeEnum) -> List[TagLink]:
""" Query all resources under tags """
statement = select(TagLink).where(TagLink.tag_id.in_(tag_ids), TagLink.resource_type == resource_type.value)
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
def get_resources_by_tags_batch(cls, tag_ids: List[int], resource_type: List[ResourceTypeEnum]) -> List[TagLink]:
""" Query all resources under tags """
statement = select(TagLink).where(TagLink.tag_id.in_(tag_ids),
TagLink.resource_type.in_([x.value for x in resource_type]))
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
def insert_tag_link(cls, tag_link: TagLink) -> TagLink:
""" Insert Label Associated Data """
with get_sync_db_session() as session:
session.add(tag_link)
session.commit()
session.refresh(tag_link)
return tag_link
@classmethod
def get_tag_link(cls, tag_link_id: int) -> TagLink:
""" Associate via tagsIDFind Label Associated Data """
with get_sync_db_session() as session:
statement = select(TagLink).where(TagLink.id == tag_link_id)
return session.exec(statement).first()
@classmethod
def delete_tag_link(cls, tag_link_id: int) -> bool:
""" Delete tag association data """
with get_sync_db_session() as session:
# Delete tag association data
session.exec(delete(TagLink).where(TagLink.id == tag_link_id))
session.commit()
return True
@classmethod
def delete_resource_tag(cls, tag_id: int, resource_id: str, resource_type: ResourceTypeEnum) -> bool:
""" Delete tag association data """
statement = delete(TagLink).where(
TagLink.tag_id == tag_id,
TagLink.resource_id == resource_id,
TagLink.resource_type == resource_type.value
)
with get_sync_db_session() as session:
# Delete tag association data
session.exec(statement)
session.commit()
return True
================================================
FILE: src/backend/bisheng/database/models/template.py
================================================
from datetime import datetime
from typing import Dict, Optional
from pydantic import model_validator
from sqlalchemy import JSON, Column, DateTime, text, String
from sqlmodel import Field
from bisheng.common.models.base import SQLModelSerializable
class TemplateSkillBase(SQLModelSerializable):
name: str = Field(index=True)
description: Optional[str] = Field(default=None, sa_column=Column(String(length=1000)))
data: Optional[Dict] = Field(default=None, sa_column=Column(JSON))
order_num: Optional[int] = Field(default=True, index=True)
# 1 flow 5 assistant 10 workflow
flow_type: Optional[int] = Field(default=1)
flow_id: Optional[str] = Field(default=None, index=False)
guide_word: Optional[str] = Field(default=None, sa_column=Column(String(length=1000)))
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class Template(TemplateSkillBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
class TemplateRead(TemplateSkillBase):
id: int
name: str
class TemplateCreate(TemplateSkillBase):
# 1 flow 5 assistant 10 workflow
# flow_type: int = 1
pass
class TemplateUpdate(SQLModelSerializable):
name: Optional[str] = None
description: Optional[str] = None
data: Optional[Dict] = None
order_num: Optional[int] = None
guide_word: Optional[str] = None
@model_validator(mode="before")
@classmethod
def convert_field(cls, values: dict) -> dict:
if values.get("order_num", None):
values['order_num'] = int(float(values['order_num']))
return values
================================================
FILE: src/backend/bisheng/database/models/user_group.py
================================================
from datetime import datetime
from typing import List, Optional
from sqlalchemy import Column, DateTime, delete, text, INT
from sqlmodel import Field, select
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session, get_async_db_session
from bisheng.database.models.group import DefaultGroup
class UserGroupBase(SQLModelSerializable):
user_id: Optional[int] = Field(
default=None,
foreign_key="user.user_id",
primary_key=True,
ondelete="CASCADE"
)
group_id: Optional[int] = Field(
default=None,
foreign_key="group.id",
primary_key=True,
ondelete="CASCADE"
)
is_group_admin: bool = Field(default=False, index=False, description='Is Group Admin') # Admin does not belong to this user group
remark: Optional[str] = Field(default=None, index=False)
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class UserGroup(UserGroupBase, table=True):
id: Optional[int] = Field(default=None, sa_column=Column(INT, primary_key=True, autoincrement=True))
class UserGroupRead(UserGroupBase):
id: Optional[int] = None
class UserGroupUpdate(UserGroupBase):
user_id: Optional[int] = None
group_id: Optional[int] = None
is_group_admin: Optional[bool] = None
remark: Optional[str] = None
class UserGroupCreate(UserGroupBase):
pass
class UserGroupDao(UserGroupBase):
@classmethod
def get_user_group(cls, user_id: int) -> List[UserGroup]:
"""
Get the user group the user is in
"""
with get_sync_db_session() as session:
statement = select(UserGroup).where(UserGroup.user_id == user_id).where(UserGroup.is_group_admin == 0)
return session.exec(statement).all()
@classmethod
async def aget_user_group(cls, user_id: int) -> List[UserGroup]:
"""
Get the user group the user is in asynchronously
"""
statement = select(UserGroup).where(UserGroup.user_id == user_id).where(UserGroup.is_group_admin == 0)
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
def get_user_admin_group(cls, user_id: int) -> List[UserGroup]:
"""
Get user groups where the user is an administrator
"""
with get_sync_db_session() as session:
statement = select(UserGroup).where(UserGroup.user_id == user_id).where(UserGroup.is_group_admin == 1)
return session.exec(statement).all()
@classmethod
async def aget_user_admin_group(cls, user_id: int, group_id: int = None) -> List[UserGroup]:
"""
Get user groups where the user is an administrator, If it passes,group_idOnly the group's admin information will be retrieved
"""
statement = select(UserGroup).where(UserGroup.user_id == user_id).where(UserGroup.is_group_admin == 1)
if group_id:
statement = statement.where(UserGroup.group_id == group_id)
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
def insert_user_group(cls, user_group: UserGroupCreate) -> UserGroup:
with get_sync_db_session() as session:
user_group = UserGroup.validate(user_group)
session.add(user_group)
session.commit()
session.refresh(user_group)
return user_group
@classmethod
def insert_user_group_admin(cls, user_id: int, group_id: int) -> UserGroup:
"""
Set user as group administrator
"""
with get_sync_db_session() as session:
user_group = UserGroup(user_id=user_id, group_id=group_id, is_group_admin=True)
session.add(user_group)
session.commit()
session.refresh(user_group)
return user_group
@classmethod
def delete_user_group(cls, user_id: int, group_id: int) -> None:
with get_sync_db_session() as session:
statement = select(UserGroup).where(UserGroup.user_id == user_id,
UserGroup.group_id == group_id)
user_group = session.exec(statement).first()
session.delete(user_group)
session.commit()
@classmethod
def delete_user_groups(cls, user_id: int, group_ids: List[int]):
"""
Remove users from certain groups
"""
with get_sync_db_session() as session:
# Empty all old user groups first
statement = delete(UserGroup).where(
UserGroup.user_id == user_id).where(
UserGroup.is_group_admin == 0).where(
UserGroup.group_id.in_(group_ids)
)
session.exec(statement)
session.commit()
@classmethod
def add_user_groups(cls, user_id: int, group_ids: List[int]):
"""
Add users to some groups
"""
with get_sync_db_session() as session:
for group_id in group_ids:
user_group = UserGroup(user_id=user_id, group_id=group_id, is_group_admin=0)
session.add(user_group)
session.commit()
@classmethod
def get_group_user(cls,
group_id: int,
page_size: str = None,
page_num: str = None) -> List[UserGroup]:
"""
Get all users in a group, excluding admins
"""
with get_sync_db_session() as session:
statement = select(UserGroup).where(UserGroup.group_id == group_id).where(UserGroup.is_group_admin == 0)
if page_num and page_size:
statement = statement.offset(
(int(page_num) - 1) * int(page_size)).limit(int(page_size))
return session.exec(statement).all()
@classmethod
def get_groups_user(cls,
group_ids: List[int],
page: int = 0,
limit: int = 0) -> List[UserGroup]:
"""
Batch Get Users Under Grouping
"""
with get_sync_db_session() as session:
statement = select(UserGroup).where(UserGroup.group_id.in_(group_ids)).where(
UserGroup.is_group_admin == 0)
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
return session.exec(statement).all()
@classmethod
async def aget_group_users(cls,
group_ids: List[int],
page: int = 0,
limit: int = 0) -> List[UserGroup]:
"""
Batch Get Users Under Grouping
Args:
group_ids:
page:
limit:
Returns:
"""
statement = select(UserGroup).where(UserGroup.group_id.in_(group_ids))
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
def is_users_in_group(cls, group_id: int, user_ids: List[int]) -> List[UserGroup]:
with get_sync_db_session() as session:
statement = select(UserGroup).where(UserGroup.group_id == group_id,
UserGroup.user_id.in_(user_ids))
return session.exec(statement).all()
@classmethod
def get_groups_admins(cls, group_ids: List[int]) -> List[UserGroup]:
with get_sync_db_session() as session:
statement = select(UserGroup).where(UserGroup.group_id.in_(group_ids),
UserGroup.is_group_admin == 1)
return session.exec(statement).all()
@classmethod
def update_user_groups(cls, user_groups: List[UserGroup]) -> List[UserGroup]:
with get_sync_db_session() as session:
session.add_all(user_groups)
session.commit()
return user_groups
@classmethod
async def add_default_user_group(cls, user_id: int) -> None:
"""
Add users to the default user group
"""
async with get_async_db_session() as session:
user_group = UserGroup(user_id=user_id, group_id=DefaultGroup, is_group_admin=False)
session.add(user_group)
await session.commit()
@classmethod
def delete_group_admins(cls, group_id: int, admin_ids: List[int]) -> None:
"""
Bulk delete user groupsadmin
"""
with get_sync_db_session() as session:
statement = delete(UserGroup).where(
UserGroup.group_id == group_id).where(
UserGroup.user_id.in_(admin_ids)).where(
UserGroup.is_group_admin == 1)
session.exec(statement)
session.commit()
@classmethod
def delete_group_all_admin(cls, group_id: int) -> None:
"""
Remove all administrators under the user group
"""
with get_sync_db_session() as session:
statement = delete(UserGroup).where(
UserGroup.group_id == group_id).where(
UserGroup.is_group_admin == 1)
session.exec(statement)
session.commit()
================================================
FILE: src/backend/bisheng/database/models/user_link.py
================================================
from datetime import datetime
from typing import List
from typing import Optional
from sqlalchemy import text, and_, delete
from sqlalchemy.exc import IntegrityError
from sqlmodel import Field, Column, DateTime, select
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session
class UserLinkBase(SQLModelSerializable):
user_id: int = Field(index=True)
type: str = Field(index=True, max_length=32)
type_detail: str = Field(index=True, max_length=255, description='typeRelated Information')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class UserLink(UserLinkBase, table=True):
__tablename__ = 'user_link'
id: Optional[int] = Field(default=None, primary_key=True)
class UserLinkDao(UserLinkBase):
@classmethod
def get_user_link(cls, user_id: int, types: list) -> List[UserLink]:
with get_sync_db_session() as session:
statement = select(UserLink).where(and_(UserLink.user_id == user_id, UserLink.type.in_(types)))
statement = statement.order_by(UserLink.create_time.desc()) # Sort by creation time descending, newest added first
return session.exec(statement).all()
@classmethod
def add_user_link(cls, user_id: int, type: str, type_detail: str) -> tuple[UserLink, bool]:
"""
Add user link
Returns:
tuple[UserLink, bool]: (User Linked Objects, Whether to add for new)
"""
with get_sync_db_session() as session:
try:
# Try inserting directly, leveraging the database's unique constraints
user_link = UserLink(user_id=user_id, type=type, type_detail=type_detail, create_time=datetime.now(),
update_time=datetime.now())
session.add(user_link)
session.commit()
return user_link, True # Add New
except IntegrityError:
# Rollback and query existing records if unique constraints are violated
session.rollback()
existing = session.exec(
select(UserLink).where(
and_(
UserLink.user_id == user_id,
UserLink.type == type,
UserLink.type_detail == type_detail
)
)
).first()
return existing, False # already exists
@classmethod
def delete_user_link(cls, user_id: int, type: str, type_detail: str) -> None:
with get_sync_db_session() as session:
statement = delete(UserLink).where(
and_(UserLink.user_id == user_id, UserLink.type == type, UserLink.type_detail == type_detail))
session.exec(statement)
session.commit()
return True
================================================
FILE: src/backend/bisheng/database/models/variable_value.py
================================================
from datetime import datetime
from typing import Optional, List
# if TYPE_CHECKING:
from pydantic import field_validator
from sqlalchemy import Column, DateTime, text
from sqlmodel import Field, select
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session
class VariableBase(SQLModelSerializable):
flow_id: str = Field(index=True, description='Belonging Skills')
version_id: int = Field(description='Version of the skill to which it belongs')
node_id: str = Field(index=True, description='belong tonode')
variable_name: Optional[str] = Field(index=True, default=None, description='Variables')
value_type: int = Field(index=False, description='Variable type1=Text 2=list 3=file')
is_option: int = Field(index=False, default=1, description='Required? 1=Required 0=Price is not required')
value: str = Field(index=False, default=0, description='variable value, the length of the incoming text when the text is')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
@field_validator('variable_name')
@classmethod
def validate_length(cls, v):
# dict_keys(['description', 'name', 'id', 'data'])
if not v:
return v
if len(v) > 50:
v = v[:50]
return v
@field_validator('value')
@classmethod
def validate_value(cls, v):
# dict_keys(['description', 'name', 'id', 'data'])
if not v:
return v
# Deduplication keeps the original order
v_list = v.split(',')
res = []
for one in v_list:
if one not in res:
res.append(one)
return ','.join(res)
class Variable(VariableBase, table=True):
__tablename__ = 't_variable_value'
id: Optional[int] = Field(default=None, primary_key=True)
class VariableCreate(VariableBase):
pass
class VariableRead(VariableBase):
id: int
class VariableDao(Variable):
@classmethod
def create_variable(cls, variable: Variable) -> Variable:
"""
Create New variant
"""
with get_sync_db_session() as session:
db_variable = Variable.from_orm(variable)
session.add(db_variable)
session.commit()
session.refresh(db_variable)
return db_variable
@classmethod
def get_variables(cls, flow_id: str, node_id: str, variable_name: str, version_id: int) -> List[Variable]:
with get_sync_db_session() as session:
query = select(Variable).where(Variable.flow_id == flow_id)
if node_id:
query = query.where(Variable.node_id == node_id)
if variable_name:
query = query.where(Variable.variable_name == variable_name)
if version_id:
query = query.where(Variable.version_id == version_id)
return session.exec(query.order_by(Variable.id.asc())).all()
@classmethod
def copy_variables(cls, flow_id: str, old_version_id: int, version_id: int) -> List[Variable]:
"""
Copy the version of the form data to In the new version
"""
with get_sync_db_session() as session:
query = select(Variable).where(Variable.flow_id == flow_id, Variable.version_id == old_version_id)
old_version = session.exec(query).all()
for one in old_version:
new_version = Variable.from_orm(one)
new_version.id = None
new_version.version_id = version_id
session.add(new_version)
session.commit()
return old_version
================================================
FILE: src/backend/bisheng/default_node.yaml
================================================
autogen_roles:
AutoGenAssistant:
documentation: ""
AutoGenGroupChatManager:
documentation: ""
AutoGenUser:
documentation: ""
AutoGenCoder:
documentation: ""
AutoGenCustomRole:
documentation: ""
agents:
LLMFunctionsAgent:
documentation: ""
ZeroShotAgent:
documentation: "https://python.langchain.com/docs/modules/agents/how_to/custom_mrkl_agent"
JsonAgent:
documentation: "https://python.langchain.com/docs/modules/agents/toolkits/openapi"
CSVAgent:
documentation: "https://python.langchain.com/docs/modules/agents/toolkits/csv"
AgentInitializer:
documentation: "https://python.langchain.com/docs/modules/agents/agent_types/"
VectorStoreAgent:
documentation: ""
VectorStoreRouterAgent:
documentation: ""
SQLAgent:
documentation: ""
ChatglmFunctionsAgent:
documentation: ""
OpenAIToolsAgent:
documentation: ""
chains:
RetrievalChain:
documentation: ""
RuleBasedRouter:
documentation: ""
MultiRuleChain:
documentation: ""
MultiPromptChain:
documentation: ""
LLMRouterChain:
documentation: ""
AutoGenChain:
documentation: ""
APIChain:
documentation: ""
TransformChain:
documentation: ""
QAGenerationChainV2:
documentation: ""
SimpleSequentialChain:
documentation: ""
SequentialChain:
documentation: ""
LLMChain:
documentation: "https://python.langchain.com/docs/modules/chains/foundational/llm_chain"
LLMMathChain:
documentation: "https://python.langchain.com/docs/modules/chains/additional/llm_math"
LLMCheckerChain:
documentation: "https://python.langchain.com/docs/modules/chains/additional/llm_checker"
ConversationChain:
documentation: ""
SeriesCharacterChain:
documentation: ""
MidJourneyPromptChain:
documentation: ""
TimeTravelGuideChain:
documentation: ""
SQLDatabaseChain:
documentation: ""
RetrievalQA:
documentation: "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"
BishengRetrievalQA:
documentation: ""
RetrievalQAWithSourcesChain:
documentation: ""
ConversationalRetrievalChain:
documentation: "https://python.langchain.com/docs/modules/chains/popular/chat_vector_db"
CombineDocsChain:
documentation: ""
# SummarizeDocsChain:
# documentation: ""
LoaderOutputChain:
documentation: ""
DalleGeneratorChain:
documentation: ""
documentloaders:
FireCrawlLoader:
documentation: ""
CustomKVLoader:
documentation: ""
UniversalKVLoader:
documentation: ""
ElemUnstructuredLoaderV0:
documentation: ""
AirbyteJSONLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json"
CoNLLULoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/conll-u"
CSVLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv"
EverNoteLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/evernote"
FacebookChatLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/facebook_chat"
GutenbergLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/gutenberg"
BSHTMLLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/html"
PyPDFDirectoryLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/pdf"
PyPDFLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/pdf"
SRTLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/subtitle"
TelegramChatLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/telegram"
TextLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/"
WebBaseLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/web_base"
AZLyricsLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/azlyrics"
CollegeConfidentialLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/college_confidential"
HNLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/hacker_news"
IFixitLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/ifixit"
IMSDbLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/imsdb"
GitbookLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/gitbook"
ReadTheDocsLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/readthedocs_documentation"
SlackDirectoryLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/slack"
NotionDirectoryLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/notion"
DirectoryLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/file_directory"
GitLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/git"
PDFWithSemanticLoader:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/git"
embeddings:
BishengEmbedding:
documentation: ""
OpenAIProxyEmbedding:
documentation: ""
OpenAIEmbeddings:
documentation: "https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/openai"
HuggingFaceEmbeddings:
documentation: "https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/sentence_transformers"
CohereEmbeddings:
documentation: "https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/cohere"
WenxinEmbeddings:
documentation: ""
HostEmbeddings:
documentation: ""
CustomHostEmbedding:
documentation: ""
llms:
BishengLLM:
documentation: ""
AzureChatOpenAI:
documentation: ""
OpenAI:
documentation: "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/openai"
ChatOpenAI:
documentation: "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai"
LlamaCpp:
documentation: "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/llamacpp"
CTransformers:
documentation: "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/ctransformers"
Cohere:
documentation: "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/cohere"
Anthropic:
documentation: ""
ChatAnthropic:
documentation: "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/anthropic"
HuggingFaceHub:
documentation: "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/huggingface_hub"
VertexAI:
documentation: "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/google_vertex_ai_palm"
ProxyChatLLM:
documentation: ""
ChatMinimaxAI:
documentation: ""
ChatWenxin:
documentation: ""
ChatQWen:
documentation: ""
ChatZhipuAI:
documentation: ""
ChatXunfeiAI:
documentation: ""
HostChatGLM:
documentation: ""
HostBaichuanChat:
documentation: ""
HostLlama2Chat:
documentation: ""
HostQwenChat:
documentation: ""
HostQwen1_5Chat:
documentation: ""
CustomLLMChat:
documentation: ""
SenseChat:
documentation: ""
HostYuanChat:
documentation: ""
HostYiChat:
documentation: ""
###
# There's a bug in this component deactivating until we get it sorted: _language_models.py", line 804, in send_message
# is_blocked=safety_attributes.get("blocked", False),
# AttributeError: 'list' object has no attribute 'get'
# ChatVertexAI:
# documentation: "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/google_vertex_ai_palm"
###
memories:
# https://github.com/supabase-community/supabase-py/issues/482
# ZepChatMessageHistory:
# documentation: "https://python.langchain.com/docs/modules/memory/integrations/zep_memory"
ConversationEntityMemory:
documentation: "https://python.langchain.com/docs/modules/memory/integrations/entity_memory_with_sqlite"
# https://github.com/hwchase17/langchain/issues/6091
# SQLiteEntityStore:
# documentation: "https://python.langchain.com/docs/modules/memory/integrations/entity_memory_with_sqlite"
PostgresChatMessageHistory:
documentation: "https://python.langchain.com/docs/modules/memory/integrations/postgres_chat_message_history"
ConversationBufferMemory:
documentation: "https://python.langchain.com/docs/modules/memory/how_to/buffer"
ConversationSummaryMemory:
documentation: "https://python.langchain.com/docs/modules/memory/how_to/summary"
ConversationKGMemory:
documentation: "https://python.langchain.com/docs/modules/memory/how_to/kg"
ConversationBufferWindowMemory:
documentation: "https://python.langchain.com/docs/modules/memory/how_to/buffer_window"
VectorStoreRetrieverMemory:
documentation: "https://python.langchain.com/docs/modules/memory/how_to/vectorstore_retriever_memory"
MongoDBChatMessageHistory:
documentation: "https://python.langchain.com/docs/modules/memory/integrations/mongodb_chat_message_history"
ConversationRedisMemory:
documentation: ""
prompts:
ChatMessagePromptTemplate:
documentation: "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/msg_prompt_templates"
HumanMessagePromptTemplate:
documentation: "https://python.langchain.com/docs/modules/model_io/models/chat/how_to/prompts"
SystemMessagePromptTemplate:
documentation: "https://python.langchain.com/docs/modules/model_io/models/chat/how_to/prompts"
ChatPromptTemplate:
documentation: "https://python.langchain.com/docs/modules/model_io/models/chat/how_to/prompts"
PromptTemplate:
documentation: "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/"
MessagesPlaceholder:
documentation: ""
textsplitters:
CharacterTextSplitter:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/character_text_splitter"
RecursiveCharacterTextSplitter:
documentation: "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/recursive_text_splitter"
toolkits:
OpenAPIToolkit:
documentation: ""
JsonToolkit:
documentation: ""
VectorStoreInfo:
documentation: ""
VectorStoreRouterToolkit:
documentation: ""
VectorStoreToolkit:
documentation: ""
tools:
Search:
documentation: ""
PAL-MATH:
documentation: ""
Calculator:
documentation: ""
Serper Search:
documentation: ""
Tool:
documentation: ""
PythonFunctionTool:
documentation: ""
PythonFunction:
documentation: ""
JsonSpec:
documentation: ""
News API:
documentation: ""
TMDB API:
documentation: ""
Podcast API:
documentation: ""
QuerySQLDataBaseTool:
documentation: ""
InfoSQLDatabaseTool:
documentation: ""
ListSQLDatabaseTool:
documentation: ""
BingSearchRun:
documentation: ""
GoogleSearchRun:
documentation: ""
GoogleSearchResults:
documentation: ""
GoogleSerperRun:
documentation: ""
JsonListKeysTool:
documentation: ""
JsonGetValueTool:
documentation: ""
PythonREPLTool:
documentation: ""
PythonAstREPLTool:
documentation: ""
RequestsGetTool:
documentation: ""
RequestsPostTool:
documentation: ""
RequestsPatchTool:
documentation: ""
RequestsPutTool:
documentation: ""
RequestsDeleteTool:
documentation: ""
WikipediaQueryRun:
documentation: ""
WolframAlphaQueryRun:
documentation: ""
utilities:
BingSearchAPIWrapper:
documentation: ""
GoogleSearchAPIWrapper:
documentation: ""
GoogleSerperAPIWrapper:
documentation: ""
SearxResults:
documentation: ""
SearxSearchWrapper:
documentation: ""
SerpAPIWrapper:
documentation: ""
WikipediaAPIWrapper:
documentation: ""
WolframAlphaAPIWrapper:
documentation: ""
retrievers:
MixEsVectorRetriever:
documentation: ""
MultiQueryRetriever:
documentation: "https://python.langchain.com/docs/modules/data_connection/retrievers/how_to/MultiQueryRetriever"
# https://github.com/supabase-community/supabase-py/issues/482
# ZepRetriever:
# documentation: "https://python.langchain.com/docs/modules/data_connection/retrievers/integrations/zep_memorystore"
vectorstores:
ElasticKeywordsSearch:
documentation: "http://192.168.106.116:8030"
ElasticsearchStore:
documentation: https://python.langchain.com/docs/integrations/vectorstores/elasticsearch
Milvus:
documentation: "http://192.168.106.116:8030"
MilvusWithPermissionCheck:
documentation: "http://192.168.106.116:8030"
ElasticsearchWithPermissionCheck:
documentation: "http://192.168.106.116:8030"
Chroma:
documentation: "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/chroma"
Qdrant:
documentation: "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/qdrant"
Weaviate:
documentation: "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/weaviate"
FAISS:
documentation: "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/faiss"
Pinecone:
documentation: "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/pinecone"
SupabaseVectorStore:
documentation: "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/supabase"
MongoDBAtlasVectorSearch:
documentation: "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/mongodb_atlas"
# Requires docarray >=0.32.0 but langchain-serve requires jina 3.15.2 which doesn't support docarray >=0.32.0
# DocArrayInMemorySearch:
# documentation: "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/docarray_in_memory"
wrappers:
RequestsWrapper:
documentation: ""
SQLDatabase:
documentation: ""
output_parsers:
StructuredOutputParser:
documentation: "https://python.langchain.com/docs/modules/model_io/output_parsers/structured"
ResponseSchema:
documentation: "https://python.langchain.com/docs/modules/model_io/output_parsers/structured"
RouterOutputParser:
documentation: ""
input_output:
VariableNode:
documentation: ""
InputNode:
documentation: ""
Output:
documentation: ""
InputFileNode:
documentation: ""
================================================
FILE: src/backend/bisheng/field_typing/__init__.py
================================================
from typing import Any
from .constants import (AgentExecutor, BaseChatMemory, BaseLanguageModel, BaseLLM, BaseLoader,
BaseMemory, BaseOutputParser, BasePromptTemplate, BaseRetriever, Callable,
Chain, ChatPromptTemplate, Data, Document, Embeddings, NestedDict, Object,
Prompt, PromptTemplate, TextSplitter, Tool, VectorStore)
from .range_spec import RangeSpec
def _import_template_field():
from bisheng.template.field.base import TemplateField
return TemplateField
def __getattr__(name: str) -> Any:
# This is to avoid circular imports
if name == 'TemplateField':
return _import_template_field()
elif name == 'RangeSpec':
return RangeSpec
# The other names should work as if they were imported from constants
# Import the constants module langflow.field_typing.constants
from . import constants
return getattr(constants, name)
__all__ = [
'NestedDict',
'Data',
'Tool',
'PromptTemplate',
'Chain',
'BaseChatMemory',
'BaseLLM',
'BaseLanguageModel',
'BaseLoader',
'BaseMemory',
'BaseOutputParser',
'BaseRetriever',
'VectorStore',
'Embeddings',
'TextSplitter',
'Document',
'AgentExecutor',
'Object',
'Callable',
'BasePromptTemplate',
'ChatPromptTemplate',
'Prompt',
'RangeSpec',
'TemplateField',
]
================================================
FILE: src/backend/bisheng/field_typing/constants.py
================================================
from typing import Callable, Dict, Union
from langchain.agents.agent import AgentExecutor
from langchain.chains.base import Chain
from langchain.document_loaders.base import BaseLoader
from langchain.llms.base import BaseLLM
from langchain.memory.chat_memory import BaseChatMemory
from langchain.prompts import BasePromptTemplate, ChatPromptTemplate, PromptTemplate
from langchain.schema import BaseOutputParser, BaseRetriever, Document
from langchain.schema.embeddings import Embeddings
from langchain.schema.language_model import BaseLanguageModel
from langchain.schema.memory import BaseMemory
from langchain.text_splitter import TextSplitter
from langchain.tools import Tool
from langchain_community.vectorstores import VectorStore
# Type alias for more complex dicts
NestedDict = Dict[str, Union[str, Dict]]
class Object:
pass
class Data:
pass
class Prompt:
pass
LANGCHAIN_BASE_TYPES = {
'Chain': Chain,
'AgentExecutor': AgentExecutor,
'Tool': Tool,
'BaseLLM': BaseLLM,
'BaseLanguageModel': BaseLanguageModel,
'PromptTemplate': PromptTemplate,
'ChatPromptTemplate': ChatPromptTemplate,
'BasePromptTemplate': BasePromptTemplate,
'BaseLoader': BaseLoader,
'Document': Document,
'TextSplitter': TextSplitter,
'VectorStore': VectorStore,
'Embeddings': Embeddings,
'BaseRetriever': BaseRetriever,
'BaseOutputParser': BaseOutputParser,
'BaseMemory': BaseMemory,
'BaseChatMemory': BaseChatMemory,
}
# Langchain base types plus Python base types
CUSTOM_COMPONENT_SUPPORTED_TYPES = {
**LANGCHAIN_BASE_TYPES,
'NestedDict': NestedDict,
'Data': Data,
'Object': Object,
'Callable': Callable,
'Prompt': Prompt,
}
================================================
FILE: src/backend/bisheng/field_typing/range_spec.py
================================================
from pydantic import field_validator, BaseModel, model_validator
class RangeSpec(BaseModel):
min: float = -1.0
max: float = 1.0
step: float = 0.1
@model_validator(mode='before')
@classmethod
def max_must_be_greater_than_min(cls, values):
if 'min' in values and values['max'] <= values['min']:
raise ValueError('max must be greater than min')
return values
@field_validator('step')
@classmethod
def step_must_be_positive(cls, v):
if v <= 0:
raise ValueError('step must be positive')
return v
================================================
FILE: src/backend/bisheng/finetune/README.md
================================================
# 微调和数据集模块
================================================
FILE: src/backend/bisheng/finetune/__init__.py
================================================
================================================
FILE: src/backend/bisheng/finetune/api/__init__.py
================================================
================================================
FILE: src/backend/bisheng/finetune/api/finetune.py
================================================
import json
import tempfile
from typing import Optional
from fastapi import APIRouter, Body, Depends, File, Query, UploadFile
from loguru import logger
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.schemas.api import resp_200, PageData
from bisheng.core.cache.utils import async_file_download
from bisheng.core.storage.minio.minio_manager import get_minio_storage_sync
from bisheng.finetune.domain.models.finetune import Finetune, FinetuneChangeModelName, FinetuneList
from bisheng.finetune.domain.services.finetune import FinetuneService
from bisheng.finetune.domain.services.finetune_file import FinetuneFileService
from bisheng.knowledge.domain.models.knowledge import KnowledgeDao
from bisheng.knowledge.domain.models.knowledge_file import QAKnoweldgeDao
from ..schemas import FinetuneCreateReq
router = APIRouter(prefix='/finetune', tags=['Finetune'], dependencies=[Depends(UserPayload.get_login_user)])
# create finetune job
@router.post('/job')
async def create_job(*, finetune: FinetuneCreateReq, login_user: UserPayload = Depends(UserPayload.get_login_user)):
# get login user
finetune = Finetune(**finetune.model_dump(exclude={'method'}),
method=finetune.method.value,
user_id=login_user.user_id,
user_name=login_user.user_name)
ret = await FinetuneService.create_job(finetune)
return resp_200(ret)
# Delete training task
@router.delete('/job')
async def delete_job(*, job_id: str, login_user: UserPayload = Depends(UserPayload.get_login_user)):
# get login user
await FinetuneService.delete_job(job_id, login_user)
return resp_200(None)
# Abort training mission
@router.post('/job/cancel')
async def cancel_job(*, job_id: str, login_user: UserPayload = Depends(UserPayload.get_login_user)):
# get login user
ret = await FinetuneService.cancel_job(job_id, login_user)
return resp_200(ret)
# Publish Training Tasks
@router.post('/job/publish')
async def publish_job(*, job_id: str, login_user: UserPayload = Depends(UserPayload.get_login_user)):
# get login user
ret = await FinetuneService.publish_job(job_id, login_user)
return resp_200(ret)
@router.post('/job/publish/cancel')
async def cancel_publish_job(*, job_id: str, login_user: UserPayload = Depends(UserPayload.get_login_user)):
# get login user
ret = await FinetuneService.cancel_publish_job(job_id, login_user)
return resp_200(ret)
# Get a list of training tasks, support pagination
@router.get('/job')
async def get_job(*,
server: str = Query(default=None, description='RelatedRTService name'),
status: str = Query(
default='',
title='Multiple commas,separator',
description='the status of the training task,1: Training 2: Training failed 3: Task Aborted 4: Training Successful 5: Publication complete'),
model_name: Optional[str] = Query(default='', description='Model Name,Fuzzy search'),
page: Optional[int] = Query(default=1, description='Page'),
limit: Optional[int] = Query(default=10, description='Listings Per Page'),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
status_list = []
if status.strip():
status_list = [int(one) for one in status.strip().split(',')]
req_data = FinetuneList(server_name=server,
status=status_list,
model_name=model_name,
page=page,
limit=limit)
if not login_user.is_admin():
req_data.user_id = login_user.user_id
data, total = await FinetuneService.get_all_job(req_data)
return resp_200(data=PageData(data=data, total=total))
# Get the latest details of the task, this interface will synchronize the querySFT-backendThe side updates the task status to the latest
@router.get('/job/info')
async def get_job_info(*, job_id: str, login_user: UserPayload = Depends(UserPayload.get_login_user)):
# get login user
ret = await FinetuneService.get_job_info(job_id)
return resp_200(ret)
@router.patch('/job/model')
async def update_job(*, req_data: FinetuneChangeModelName,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
# get login user
ret = await FinetuneService.change_job_model_name(req_data)
return resp_200(ret)
@router.post('/job/file')
async def upload_file(*,
files: list[UploadFile] = File(description='Training File List'),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
try:
ret = await FinetuneFileService.upload_file(files, False, login_user)
return resp_200(ret)
except Exception as e:
logger.error(f'upload finetune file error: {e}')
raise e
finally:
if files:
for file in files:
await file.close()
@router.post('/job/file/preset')
async def upload_preset_file(*,
files: Optional[str] = Body(default=None, description='Preset Training File List'),
name: Optional[str] = Body(description='Dataset Name'),
qa_list: Optional[list[int]] = Body(default=None,
description='QAThe knowledge base upon'),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
ret = None
if files:
filepath, file_name = await async_file_download(files)
logger.info(f'dataset upload_file_name: {file_name}')
ret = await FinetuneFileService.upload_preset_file(name, 0, filepath, login_user)
elif qa_list:
# will beqaData byfinetuneFormat for file storage
qa_knowledge_db = await KnowledgeDao.aget_list_by_ids(qa_list)
qa_knowledge_db_ids = [qa_knowledge.id for qa_knowledge in qa_knowledge_db]
qa_db_list = await QAKnoweldgeDao.aget_qa_knowledge_by_knowledge_ids(qa_knowledge_db_ids)
qa_list = []
for qa in qa_db_list:
qa_list.extend([{
'instruction': question,
'input': '',
'output': json.loads(qa.answers)[0]
} for question in qa.questions])
with tempfile.NamedTemporaryFile(mode='w+', suffix='.json') as filepath:
json.dump(qa_list, filepath, ensure_ascii=False, indent=2)
filepath.seek(0)
ret = await FinetuneFileService.upload_preset_file(name, 1, filepath.name, login_user)
return resp_200(ret)
# Get a list of preset training files
@router.get('/job/file/preset')
async def get_preset_file(*,
page_size: Optional[int] = None,
page_num: Optional[int] = None,
keyword: Optional[str] = None,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
ret = await FinetuneFileService.get_preset_file(keyword, page_size, page_num)
return resp_200(ret)
@router.delete('/job/file/preset')
async def delete_preset_file(*, file_id: str, login_user: UserPayload = Depends(UserPayload.get_login_user)):
# get login user
await FinetuneFileService.delete_preset_file(file_id, login_user)
return resp_200()
@router.get('/job/file/download')
async def get_download_url(*, file_url: str, login_user: UserPayload = Depends(UserPayload.get_login_user)):
minio_client = get_minio_storage_sync()
download_url = await minio_client.get_share_link(file_url, clear_host=False)
return resp_200(data={'url': download_url})
@router.get('/server/filters')
async def get_server_filters(*, login_user: UserPayload = Depends(UserPayload.get_login_user)):
ret = await FinetuneService.get_server_filters()
return resp_200(data=ret)
@router.get('/model/list')
async def get_model_list(login_user: UserPayload = Depends(UserPayload.get_login_user),
server_id: int = Query(..., description='ftService UniqueID')):
""" DapatkanftList of all models under the service """
ret = await FinetuneService.get_model_list(server_id)
return resp_200(data=ret)
@router.get('/gpu')
async def get_gpu_info(*, login_user: UserPayload = Depends(UserPayload.get_login_user)):
# get login user
ret = await FinetuneService.get_gpu_info()
return resp_200(data=ret)
================================================
FILE: src/backend/bisheng/finetune/api/server.py
================================================
from fastapi import APIRouter, Depends
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.schemas.api import resp_200
from bisheng.finetune.domain.models.model_deploy import ModelDeployDao
from bisheng.finetune.domain.models.server import Server, ServerCreate, ServerDao
from ...common.errcode.http_error import NotFoundError
# build router
router = APIRouter(prefix='/server', tags=['server'], dependencies=[Depends(UserPayload.get_login_user)])
@router.post('/add')
async def add_server(*, server: ServerCreate):
db_server = Server.model_validate(server)
db_server = await ServerDao.insert(db_server)
return resp_200(db_server)
@router.get('/list_server')
async def list_server():
rt_server = await ServerDao.find_all_server()
rt_server = rt_server or []
return resp_200(rt_server)
@router.delete('/{server_id}', status_code=200)
async def delete_server(*, server_id: int):
await ServerDao.delete(server_id)
return resp_200(None)
@router.get('/model/{deploy_id}')
async def get_model_deploy(*, deploy_id: int):
model_deploy = await ModelDeployDao.find_model(deploy_id)
if not ModelDeployDao:
raise NotFoundError()
return resp_200(data=model_deploy)
================================================
FILE: src/backend/bisheng/finetune/domain/__init__.py
================================================
================================================
FILE: src/backend/bisheng/finetune/domain/models/__init__.py
================================================
================================================
FILE: src/backend/bisheng/finetune/domain/models/finetune.py
================================================
from datetime import datetime
from enum import Enum
from typing import Any, Dict, List, Optional
from pydantic import field_validator, BaseModel, model_validator
from sqlalchemy import Select
from sqlalchemy.dialects.mysql import LONGTEXT
from sqlmodel import JSON, Column, DateTime, Field, func, select, text, update, col
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_async_db_session
from bisheng.utils import generate_uuid
class TrainMethod(Enum):
FULL = 'full'
FREEZE = 'freeze'
LORA = 'lora'
class FinetuneStatus(Enum):
# Training
TRAINING = 1
# Training failed
FAILED = 2
# Task Aborted
CANCEL = 3
# Training Successful
SUCCESS = 4
# Publication complete
PUBLISHED = 5
class FinetuneBase(SQLModelSerializable):
id: str = Field(default=None, nullable=False, primary_key=True, description='Uniqueness quantificationID')
server: int = Field(default=0, index=True, description='RelatedRTSERVICESID')
server_name: str = Field(default='', index=True, description='RTService name')
rt_endpoint: str = Field(default='', description='RTService Address')
sft_endpoint: str = Field(default='', description='FTService Address')
base_model: int = Field(default=0, index=True, description='Foundation ModelID')
base_model_name: str = Field(max_length=50, description='Base Model Name')
root_model_name: str = Field(default='', description='Root underlying model name, which is the initial model name')
model_id: int = Field(default=0, index=True, description='Published Training ModelsID')
model_name: str = Field(index=True, max_length=50, description='Name of the training model')
method: str = Field(default=TrainMethod.FULL.value, nullable=False, max_length=20, description='Training Methods')
extra_params: Dict = Field(sa_column=Column(JSON), description='Additional parameters required for training tasks')
train_data: Optional[List[Dict]] = Field(default=None, sa_column=Column(JSON), description='Personal Training Dataset Information')
preset_data: Optional[List[Dict]] = Field(default=None, sa_column=Column(JSON), description='Preset training dataset information')
status: int = Field(default=FinetuneStatus.TRAINING.value, index=True, description='Status of the training task')
reason: Optional[str] = Field(default='', sa_column=Column(LONGTEXT), description='Task Failure Reason')
log_path: Optional[str] = Field(default='', max_length=512, description='Training log inminioPath on')
report: Optional[Dict] = Field(default=None, sa_column=Column(JSON), description='Assessment report data for training tasks')
user_id: int = Field(default=None, index=True, description='creatorID')
user_name: str = Field(default=None, description='creatorName')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
# Check training set data format
@classmethod
def validate_train(cls, v: Any):
if v is None:
return v
if v is None or not isinstance(v, list):
raise ValueError('Finetune.train_data must be a list')
for one in v:
if not (one.get('name', None) and one.get('url', None)):
raise ValueError('Finetune.train_data each item must be {name:"",url:"",num:0}')
return v
@model_validator(mode='before')
@classmethod
def validate_all(cls, values: Dict[str, Any]) -> Dict[str, Any]:
extra_params = values.get('extra_params', None)
if extra_params is None or not isinstance(extra_params, dict):
raise ValueError('Finetune.extra_params must be a valid json')
train_data = values.get('train_data', None)
cls.validate_train(train_data)
preset_data = values.get('preset_data', None)
cls.validate_train(preset_data)
return values
class Finetune(FinetuneBase, table=True):
id: str = Field(default_factory=generate_uuid, primary_key=True, unique=True)
class FinetuneList(BaseModel):
server: Optional[int] = Field(None, description='RelatedRTSERVICESID')
server_name: Optional[str] = Field(None, description='RelatedRTService name')
status: Optional[List[int]] = Field(None, description='Status list of training tasks')
model_name: Optional[str] = Field(None, description='Model Name, Fuzzy search')
page: Optional[int] = Field(default=1, description='Page')
limit: Optional[int] = Field(default=10, description='Listings Per Page')
user_id: Optional[int] = Field(None, description='UsersID')
def get_select_statement(self) -> (Select, Select):
"""Generate the select and count statements based on the filters."""
statement = select(Finetune)
count_statement = select(func.count(Finetune.id))
if self.server:
statement = statement.where(Finetune.server == self.server)
count_statement = count_statement.where(Finetune.server == self.server)
if self.server_name:
statement = statement.where(Finetune.server_name == self.server_name)
count_statement = count_statement.where(Finetune.server_name == self.server_name)
if self.status:
statement = statement.where(col(Finetune.status).in_(self.status))
count_statement = count_statement.where(col(Finetune.status).in_(self.status))
if self.model_name:
statement = statement.where(col(Finetune.model_name).like(f'%{self.model_name}%'))
count_statement = count_statement.where(col(Finetune.model_name).like(f'%{self.model_name}%'))
if self.user_id:
statement = statement.where(Finetune.user_id == self.user_id)
count_statement = count_statement.where(Finetune.user_id == self.user_id)
if self.page and self.limit:
offset = (self.page - 1) * self.limit
statement = statement.offset(offset).limit(self.limit).order_by(col(Finetune.create_time).desc())
return statement, count_statement
class FinetuneChangeModelName(BaseModel):
id: str = Field(description='Training Mission UniqueID')
model_name: str
class FinetuneExtraParams(BaseModel):
gpus: str = Field(..., description='Needs to be usedGPUCard #')
val_ratio: float = Field(0.1, ge=0, le=1, description='Proportion of validation sets')
per_device_train_batch_size: int = Field(1, description='Batch size')
learning_rate: float = Field(0.00005, ge=0, le=1, description='Learning rate ')
num_train_epochs: int = Field(3, gt=0, description='Iteration rounds')
max_seq_len: int = Field(8192, gt=0, description='Maximum List Length')
cpu_load: str = Field('false', description='Y/NcpuLoad')
@field_validator('per_device_train_batch_size', mode='before')
@classmethod
def validate_batch_size(cls, v: str):
try:
batch_size = int(v)
if batch_size != 1:
if batch_size % 2 != 0:
raise ValueError('per_device_train_batch_size must be 1 or even number')
return batch_size
except Exception as e:
raise ValueError(f'per_device_train_batch_size must be an integer {e}')
@field_validator('gpus', mode='before')
@classmethod
def validate_gpus(cls, v: str):
try:
gpu_list = v.split(',')
gpus = ''
for one in gpu_list:
if not one:
continue
if not one.isdigit():
raise ValueError('gpus number must be integer')
gpus += one + ','
gpus = gpus[:-1]
if not gpus:
raise ValueError('gpus must not be empty')
return gpus
except Exception as e:
raise ValueError(f'gpus must be an str {e}')
class FinetuneDao(FinetuneBase):
@classmethod
async def insert_one(cls, data: Finetune) -> Finetune:
async with get_async_db_session() as session:
session.add(data)
await session.commit()
await session.refresh(data)
return data
@classmethod
async def update_job(cls, finetune: Finetune) -> Finetune:
if not finetune.id:
raise ValueError('Finetune.id must not be empty when update')
async with get_async_db_session() as session:
session.add(finetune)
await session.commit()
await session.refresh(finetune)
return finetune
@classmethod
async def find_job(cls, job_id: str) -> Finetune | None:
async with get_async_db_session() as session:
statement = select(Finetune).where(Finetune.id == job_id)
return (await session.exec(statement)).first()
@classmethod
async def find_job_by_model_name(cls, model_name: str) -> Finetune | None:
async with get_async_db_session() as session:
statement = select(Finetune).where(Finetune.model_name == model_name)
return (await session.exec(statement)).first()
@classmethod
async def find_job_by_model_id(cls, model_id: int) -> Finetune | None:
async with get_async_db_session() as session:
statement = select(Finetune).where(Finetune.model_id == model_id)
return (await session.exec(statement)).first()
@classmethod
async def change_status(cls, job_id: str, old_status: int, status: int) -> bool:
update_statement = update(Finetune).where(col(Finetune.id) == job_id,
col(Finetune.status) == old_status).values(status=status)
async with get_async_db_session() as session:
update_ret = await session.exec(update_statement)
await session.commit()
return update_ret.rowcount != 0
@classmethod
async def delete_job(cls, job: Finetune) -> bool:
if not job or not job.id:
raise ValueError('Finetune job to delete must not be None, and id must not be empty')
async with get_async_db_session() as session:
await session.delete(job)
await session.commit()
return True
@classmethod
async def find_jobs(cls, finetune_list: FinetuneList) -> (List[Finetune], int):
select_statement, count_statement = finetune_list.get_select_statement()
async with get_async_db_session() as session:
return (await session.exec(select_statement)).all(), await session.scalar(count_statement)
@classmethod
async def get_server_filters(cls) -> List[str]:
async with get_async_db_session() as session:
statement = select(Finetune.server_name).distinct()
return (await session.exec(statement)).all()
================================================
FILE: src/backend/bisheng/finetune/domain/models/model_deploy.py
================================================
from datetime import datetime
from typing import Optional, List
from sqlalchemy import Column, DateTime, String, UniqueConstraint, delete, text
from sqlmodel import Field, select, col
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_async_db_session
class ModelDeployBase(SQLModelSerializable):
endpoint: str = Field(index=False, unique=False)
server: str = Field(index=True)
model: str = Field(index=False)
config: Optional[str] = Field(default=None, sa_column=Column(String(length=512)))
status: Optional[str] = Field(default=None, index=False)
remark: Optional[str] = Field(default=None, sa_column=Column(String(length=4096)))
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class ModelDeploy(ModelDeployBase, table=True):
__table_args__ = (UniqueConstraint('model', 'server', name='model_server_uniq'),)
id: Optional[int] = Field(default=None, primary_key=True)
class ModelDeployDao(ModelDeployBase):
@classmethod
async def find_model(cls, model_id: int) -> ModelDeploy | None:
async with get_async_db_session() as session:
statement = select(ModelDeploy).where(ModelDeploy.id == model_id)
return (await session.exec(statement)).first()
@classmethod
async def find_model_by_server(cls, server_id: str) -> List[ModelDeploy]:
async with get_async_db_session() as session:
statement = select(ModelDeploy).where(ModelDeploy.server == server_id)
return (await session.exec(statement)).all()
@classmethod
async def find_model_by_server_and_name(cls, server: str, model: str) -> ModelDeploy | None:
async with get_async_db_session() as session:
statement = select(ModelDeploy).where(ModelDeploy.server == server, ModelDeploy.model == model)
return (await session.exec(statement)).first()
@classmethod
async def find_model_by_name(cls, model: str) -> ModelDeploy | None:
async with get_async_db_session() as session:
statement = select(ModelDeploy).where(ModelDeploy.model == model)
return (await session.exec(statement)).first()
@classmethod
async def delete_model(cls, model: ModelDeploy) -> bool:
async with get_async_db_session() as session:
await session.delete(model)
await session.commit()
return True
@classmethod
async def delete_model_by_id(cls, model_id: int):
async with get_async_db_session() as session:
statement = delete(ModelDeploy).where(col(ModelDeploy.id) == model_id)
await session.exec(statement)
await session.commit()
@classmethod
async def insert_one(cls, model: ModelDeploy) -> ModelDeploy:
async with get_async_db_session() as session:
session.add(model)
await session.commit()
await session.refresh(model)
return model
@classmethod
async def update_model(cls, model: ModelDeploy) -> ModelDeploy:
async with get_async_db_session() as session:
session.add(model)
await session.commit()
await session.refresh(model)
return model
class ModelDeployRead(ModelDeployBase):
id: Optional[int]
class ModelDeployQuery(SQLModelSerializable):
id: Optional[int]
server: Optional[str]
class ModelDeployCreate(ModelDeployBase):
pass
class ModelDeployUpdate(SQLModelSerializable):
id: int
config: Optional[str] = None
class ModelDeployInfo(ModelDeploy):
sft_support: bool = Field(default=False, description='Whether to support fine-tuning training')
================================================
FILE: src/backend/bisheng/finetune/domain/models/preset_train.py
================================================
from datetime import datetime
from typing import List, Optional, Tuple
from sqlalchemy import func
from sqlmodel import Column, DateTime, Field, select, text, col
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_async_db_session
from bisheng.utils import generate_uuid
# FinetunePreset training set for tasks
class PresetTrainBase(SQLModelSerializable):
id: str = Field(default=None, primary_key=True, description='Preset Training Files UniqueID')
url: str = Field(default='', description='minIoFile link on')
name: str = Field(default='', index=True, description='Uploaded file name')
user_id: str = Field(default='', index=True, description='creatorID')
user_name: str = Field(default='', index=True, description='creatorName')
type: int = Field(default=0, index=True, description='0 Doc. 1 QA')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class PresetTrain(PresetTrainBase, table=True):
id: str = Field(default_factory=generate_uuid, primary_key=True, unique=True)
class PresetTrainDao(PresetTrainBase):
@classmethod
async def insert_batch(cls, models: List[PresetTrain]) -> List[PresetTrain]:
async with get_async_db_session() as session:
for one in models:
session.add(one)
await session.commit()
for one in models:
await session.refresh(one)
return models
@classmethod
async def delete_one(cls, model: PresetTrain) -> bool:
async with get_async_db_session() as session:
await session.delete(model)
await session.commit()
return True
@classmethod
async def find_one(cls, file_id: str) -> PresetTrain | None:
async with get_async_db_session() as session:
statement = select(PresetTrain).where(PresetTrain.id == file_id)
return (await session.exec(statement)).first()
@classmethod
async def find_all(cls) -> List[PresetTrain]:
async with get_async_db_session() as session:
statement = select(PresetTrain)
return (await session.exec(statement)).all()
@classmethod
async def search_name(cls,
keyword: str = None,
page_size: int = None,
page_num: int = None) -> Tuple[List[PresetTrain], int]:
async with get_async_db_session() as session:
statement = select(PresetTrain)
count = select(func.count(PresetTrain.id))
if keyword:
statement = statement.where(col(PresetTrain.name).like('%{}%'.format(keyword)))
count = count.where(col(PresetTrain.name).like('%{}%'.format(keyword)))
if page_num and page_size:
statement = statement.offset((page_num - 1) * page_size).limit(page_size)
statement = statement.order_by(col(PresetTrain.create_time).desc())
return (await session.exec(statement)).all(), await session.scalar(count)
================================================
FILE: src/backend/bisheng/finetune/domain/models/server.py
================================================
from datetime import datetime
from typing import Optional
from sqlalchemy import Column, DateTime, text, delete
from sqlmodel import Field, select, col
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_async_db_session
class ServerBase(SQLModelSerializable):
endpoint: str = Field(index=False)
sft_endpoint: str = Field(default='', index=False, description='FinetuneService Address')
server: str = Field(index=True)
remark: Optional[str] = Field(default=None, index=False)
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class Server(ServerBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
# Package business operations
class ServerDao(ServerBase):
@classmethod
async def find_server(cls, server_id: int) -> Server | None:
async with get_async_db_session() as session:
statement = select(Server).where(Server.id == server_id)
return (await session.exec(statement)).first()
@classmethod
async def find_all_server(cls):
async with get_async_db_session() as session:
statement = select(Server)
return (await session.exec(statement)).all()
@classmethod
async def insert(cls, server: Server) -> Server:
async with get_async_db_session() as session:
session.add(server)
await session.commit()
await session.refresh(server)
return server
@classmethod
async def delete(cls, server_id: int) -> None:
statement = delete(Server).where(col(Server.id) == server_id)
async with get_async_db_session() as session:
await session.exec(statement)
await session.commit()
class ServerRead(ServerBase):
id: Optional[int] = None
class ServerQuery(ServerBase):
id: Optional[int] = None
server: Optional[str] = None
class ServerCreate(ServerBase):
pass
================================================
FILE: src/backend/bisheng/finetune/domain/models/sft_model.py
================================================
from datetime import datetime
from typing import Optional
from sqlalchemy import Column, DateTime, delete, text, update
from sqlmodel import Field, select, col
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_async_db_session
# Available for trainingmodelVertical
class SftModelBase(SQLModelSerializable):
id: int = Field(default=None, nullable=False, primary_key=True, description='Uniqueness quantificationID')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class SftModel(SftModelBase, table=True):
model_name: str = Field(index=True, description='Model name that can be used for fine-tuning training')
class SftModelDao(SftModel):
@classmethod
async def get_sft_model(cls, model_name: str) -> SftModel | None:
async with get_async_db_session() as session:
statement = select(SftModel).where(SftModel.model_name == model_name)
return (await session.exec(statement)).first()
@classmethod
async def get_all_sft_model(cls):
async with get_async_db_session() as session:
statement = select(SftModel)
return (await session.exec(statement)).all()
@classmethod
async def insert_sft_model(cls, model_name: str) -> SftModel:
async with get_async_db_session() as session:
model = SftModel(model_name=model_name)
session.add(model)
await session.commit()
await session.refresh(model)
return model
@classmethod
async def delete_sft_model(cls, model_name: str) -> bool:
async with get_async_db_session() as session:
statement = delete(SftModel).where(col(SftModel.model_name) == model_name)
await session.exec(statement)
await session.commit()
return True
@classmethod
async def change_sft_model(cls, old_model_name, model_name) -> bool:
async with get_async_db_session() as session:
update_statement = update(SftModel).where(SftModel.model_name == old_model_name).values(
model_name=model_name)
update_ret = await session.exec(update_statement)
await session.commit()
return update_ret.rowcount != 0
================================================
FILE: src/backend/bisheng/finetune/domain/services/__init__.py
================================================
================================================
FILE: src/backend/bisheng/finetune/domain/services/finetune.py
================================================
import asyncio
import io
import json
from typing import Dict, List, Any
from loguru import logger
from pydantic import ValidationError
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.finetune import (CancelJobError, ChangeModelNameError, CreateFinetuneError,
DeleteJobError, ExportJobError, InvalidExtraParamsError, JobStatusError,
ModelNameExistsError, NotFoundJobError,
TrainDataNoneError, UnExportJobError, GetModelError)
from bisheng.common.errcode.model_deploy import NotFoundModelError
from bisheng.common.errcode.server import NoSftServerError
from bisheng.common.schemas.api import UnifiedResponseModel
from bisheng.core.cache import InMemoryCache
from bisheng.core.storage.minio.minio_manager import get_minio_storage_sync, get_minio_storage
from ..models.finetune import (Finetune, FinetuneChangeModelName, FinetuneDao,
FinetuneExtraParams, FinetuneList, FinetuneStatus)
from ..models.model_deploy import ModelDeploy, ModelDeployDao, ModelDeployInfo
from ..models.server import Server, ServerDao
from ..models.sft_model import SftModelDao
from ..sft_backend import SFTBackend
from ...utils import parse_gpus, parse_server_host
class FinetuneService:
ServerCache: InMemoryCache = InMemoryCache()
@classmethod
def validate_params(cls, finetune: Finetune) -> UnifiedResponseModel | None:
""" Check request parameters, returningNoneIndicates check passed """
# Individual Training Sets and Preset Training Sets Use at least one
if not finetune.train_data and not finetune.preset_data:
raise TrainDataNoneError()
try:
# Check Extra Parameter Values
FinetuneExtraParams(**finetune.extra_params.copy())
except ValidationError as e:
logger.error(f'Finetune extra_params is invalid {e}')
raise InvalidExtraParamsError()
return None
@classmethod
def parse_command_params(cls, finetune: Finetune, base_model: ModelDeploy) -> Dict:
""" Parse the request parameters and combine them into a training instructioncommandParameters """
params = finetune.extra_params.copy()
# Needs to be inSFT-backendThe service willmodel_nameAbsolute path to the model
params['model_name_or_path'] = base_model.model
params['model_template'] = finetune.root_model_name
params['finetuning_type'] = finetune.method
# Special treatedcpu_loadformat, because the transmission method is different --cpu_load means isTrue, no additional parameter values are required
if params.get('cpu_load') == 'false':
del params['cpu_load']
elif params.get('cpu_load') == 'true':
params['cpu_load'] = ''
# Stitching training set parameters
params['dataset'] = []
params['each_max_samples'] = []
cls.parse_command_train_file(finetune.train_data, params)
cls.parse_command_train_file(finetune.preset_data, params)
params['dataset'] = ','.join(params['dataset'])
params['each_max_samples'] = ','.join(params['each_max_samples'])
return params
@classmethod
def parse_command_train_file(cls, train_data: List[Dict], params: Dict):
""" DapatkanminioA public link to the file onSFT-BackendDownload training files """
if train_data is None:
return
minio_client = get_minio_storage_sync()
for i in train_data:
params['dataset'].append(minio_client.get_share_link_sync(i['url'], clear_host=False))
params['each_max_samples'].append(str(i.get('num', 0)))
@classmethod
def validate_status(cls, finetune: Finetune, new_status: int) -> None:
""" Verify that the state change is logical ReturnNoneIndicates success"""
# Training can only To Training Success, Training Failure, Task Abort
if finetune.status == FinetuneStatus.TRAINING.value:
if new_status not in [FinetuneStatus.SUCCESS.value, FinetuneStatus.FAILED.value,
FinetuneStatus.CANCEL.value]:
raise JobStatusError.http_exception(msg='In training, it can only be changed to training success, training failure, task abort')
# Training failed can only Becoming in training
elif finetune.status == FinetuneStatus.FAILED.value:
if new_status != FinetuneStatus.TRAINING.value:
raise JobStatusError.http_exception(msg='A training failure can only turn into a training')
# Task Aborted can only Becoming in training
elif finetune.status == FinetuneStatus.CANCEL.value:
if new_status != FinetuneStatus.TRAINING.value:
raise JobStatusError.http_exception(msg='Task abort can only become in training')
# Training Successful can only Change to Publish Complete
elif finetune.status == FinetuneStatus.SUCCESS.value:
if new_status != FinetuneStatus.PUBLISHED.value:
raise JobStatusError.http_exception(msg='Training success can only change to release completion')
# Publication complete can only Become Training Successful
elif finetune.status == FinetuneStatus.PUBLISHED.value:
if new_status != FinetuneStatus.SUCCESS.value:
raise JobStatusError.http_exception(msg='Release completion can only be converted into training success')
return None
@classmethod
async def get_sft_server(cls, server_id: int) -> Server | None:
server = await cls.get_server_by_cache(server_id)
if not server:
logger.warning('not found rt server data by id: %s', server_id)
return None
if not server.sft_endpoint:
logger.warning('not found sft endpoint by id: %s', server_id)
return None
return server
@classmethod
async def verify_job_model_name(cls, model_name: str) -> bool:
""" Correctionmodel_name Already exists? """
if await ModelDeployDao.find_model_by_name(model_name):
raise ModelNameExistsError()
if await FinetuneDao.find_job_by_model_name(model_name):
raise ModelNameExistsError()
return True
@classmethod
async def create_job(cls, finetune: Finetune) -> Finetune:
# Verify Extra Parameters
_ = cls.validate_params(finetune)
# CariSFTWhether the service exists
server = await cls.get_sft_server(finetune.server)
if not server:
raise NoSftServerError()
# Verify that the model name already exists
await cls.verify_job_model_name(finetune.model_name)
# Find out if the underlying model exists
base_model = await ModelDeployDao.find_model(finetune.base_model)
if not base_model:
raise NotFoundModelError()
root_model_name = base_model.model
# Can find instructions for retraining based on trained and completed models
if base_job := await FinetuneDao.find_job_by_model_name(base_model.model):
root_model_name = base_job.root_model_name
finetune.server_name = server.server
finetune.rt_endpoint = server.endpoint
finetune.sft_endpoint = server.sft_endpoint
finetune.base_model_name = base_model.model
finetune.root_model_name = root_model_name
# RecallSFT-backendright of privacyAPIAdd New
logger.info(f'start create sft job: {finetune.id}')
# Required for stitching instructionscommandParameters
command_params = cls.parse_command_params(finetune, base_model)
sft_ret = await SFTBackend.create_job(host=parse_server_host(finetune.sft_endpoint),
job_id=finetune.id, params=command_params)
if not sft_ret[0]:
logger.error(f'create sft job error: job_id: {finetune.id}, err: {sft_ret[1]}')
raise CreateFinetuneError()
# Insert into Database
finetune = await FinetuneDao.insert_one(finetune)
logger.info('create sft job success')
return finetune
@classmethod
async def cancel_job(cls, job_id: str, user: UserPayload) -> Finetune:
# ViewjobTask Information
finetune = await FinetuneDao.find_job(job_id)
if not finetune:
raise NotFoundJobError()
# Verify task status change
new_status = FinetuneStatus.CANCEL.value
cls.validate_status(finetune, new_status)
# RecallSFT-backendright of privacyAPICancel Task
logger.info(f'start cancel job_id: {job_id}, user: {user.user_name}')
sft_ret = await SFTBackend.cancel_job(host=parse_server_host(finetune.sft_endpoint), job_id=job_id)
if not sft_ret[0]:
logger.error(f'cancel sft job error: job_id: {job_id}, err: {sft_ret[1]}')
raise CancelJobError()
logger.info('change sft job status')
await FinetuneDao.change_status(job_id, finetune.status, new_status)
finetune.status = new_status
logger.info('cancel sft job success')
return finetune
@classmethod
async def delete_job(cls, job_id: str, user: UserPayload) -> Finetune:
# ViewjobTask Information
finetune = await FinetuneDao.find_job(job_id)
if not finetune:
raise NotFoundJobError()
model_name = await cls.delete_published_model(finetune)
# Call the interface to delete the training task
logger.info(f'start delete sft job: {job_id}, user: {user.user_name}')
sft_ret = await SFTBackend.delete_job(host=parse_server_host(finetune.sft_endpoint), job_id=job_id,
model_name=model_name)
if not sft_ret[0]:
logger.error(f'delete sft job error: job_id: {job_id}, err: {sft_ret[1]}')
raise DeleteJobError()
# Delete training task data
logger.info('delete sft job data')
# CleanedminioLog file on
await FinetuneDao.delete_job(finetune)
logger.info(f'delete sft job success, data: {finetune.model_dump()}')
asyncio.create_task(cls.delete_job_log(finetune))
return finetune
@classmethod
async def delete_job_log(cls, finetune: Finetune):
minio_client = await get_minio_storage()
await minio_client.remove_object(object_name=f'/finetune/log/{finetune.id}')
@classmethod
async def upload_job_log(cls, finetune: Finetune, log_data: io.BytesIO, length: int) -> str:
minio_client = await get_minio_storage()
log_path = f'finetune/log/{finetune.id}'
await minio_client.put_object(bucket_name=minio_client.bucket, object_name=log_path, file=log_data,
length=length)
return log_path
@classmethod
async def get_job_log(cls, finetune: Finetune) -> str | None:
minio_client = await get_minio_storage()
resp = await minio_client.get_object(object_name=finetune.log_path)
if resp is None:
return None
return resp.decode('utf-8')
@classmethod
async def delete_published_model(cls, finetune: Finetune) -> str | None:
"""
Offline the published model, delete the published model data, and return the published model name
param finetune: Training Tasks
"""
# Determine training task status
if finetune.status != FinetuneStatus.PUBLISHED.value:
return finetune.model_name
# View published modelsID
published_model = await ModelDeployDao.find_model(finetune.model_id)
if not published_model:
return finetune.model_name
# Delete Published Model Data
await ModelDeployDao.delete_model(published_model)
logger.info(f'delete published model: {published_model.model}, id: {published_model.id}')
return published_model.model
@classmethod
async def publish_job(cls, job_id: str, user: UserPayload) -> Finetune:
# ViewjobTask Information
finetune = await FinetuneDao.find_job(job_id)
if not finetune:
raise NotFoundJobError()
new_status = FinetuneStatus.PUBLISHED.value
cls.validate_status(finetune, new_status)
# RecallSFT-backendright of privacyAPIInterfaces
logger.info(f'start export sft job: {job_id}, user: {user.user_name}')
sft_ret = await SFTBackend.publish_job(host=parse_server_host(finetune.sft_endpoint), job_id=job_id,
model_name=finetune.model_name)
if not sft_ret[0]:
logger.error(f'export sft job error: job_id: {job_id}, err: {sft_ret[1]}')
raise ExportJobError()
# Create Published Model Data
logger.info('create published model')
published_model = ModelDeploy(model=finetune.model_name,
server=str(finetune.server),
endpoint=f'http://{finetune.rt_endpoint}/v2.1/models')
try:
published_model = await ModelDeployDao.insert_one(published_model)
except Exception as e:
logger.error(f'create published model error: {str(e)}')
published_model = await ModelDeployDao.find_model_by_server_and_name(published_model.server,
published_model.model)
# Record the name of the model that can be used for training
await SftModelDao.insert_sft_model(published_model.model)
# Update training task status
logger.info('update sft job data')
finetune.status = new_status
finetune.model_id = published_model.id
await FinetuneDao.update_job(finetune)
logger.info('export sft job success')
return finetune
@classmethod
async def cancel_publish_job(cls, job_id: str, user: UserPayload) -> Finetune:
# ViewjobTask Information
finetune = await FinetuneDao.find_job(job_id)
if not finetune:
raise NotFoundJobError()
new_status = FinetuneStatus.SUCCESS.value
cls.validate_status(finetune, new_status)
await cls.delete_published_model(finetune)
# RecallSFT-backendright of privacyAPIInterfaces
logger.info(f'start cancel export sft job: {job_id}, user: {user.user_name}')
sft_ret = await SFTBackend.cancel_publish_job(host=parse_server_host(finetune.sft_endpoint), job_id=job_id,
model_name=finetune.model_name)
if not sft_ret[0]:
logger.error(f'cancel export sft job error: job_id: {job_id}, err: {sft_ret[1]}')
raise UnExportJobError()
await SftModelDao.delete_sft_model(finetune.model_name)
# Delete published model information
logger.info(f'delete published model: {finetune.model_id}')
await ModelDeployDao.delete_model_by_id(finetune.model_id)
logger.info('update finetune status')
finetune.status = new_status
finetune.model_id = 0
await FinetuneDao.update_job(finetune)
logger.info('cancel export sft job success')
return finetune
@classmethod
async def get_server_by_cache(cls, server_id: int):
# Fetch from memory first
cache_server = cls.ServerCache.get(server_id)
if cache_server:
return cls.ServerCache.get(server_id)
# Retrieve from database
server = await ServerDao.find_server(server_id)
if server:
cls.ServerCache.set(server_id, server)
return server
@classmethod
async def get_all_job(cls, req_data: FinetuneList) -> (List[Finetune], int):
job_list, total = await FinetuneDao.find_jobs(req_data)
# Asynchronous thread update task status
asyncio.create_task(cls.sync_all_job_status(job_list))
return job_list, total
@classmethod
async def sync_all_job_status(cls, job_list: List[Finetune]) -> None:
# Asynchronous threads update the status of bulk tasks
for finetune in job_list:
await cls.sync_job_status(finetune, finetune.sft_endpoint)
@classmethod
async def get_job_info(cls, job_id: str) -> Dict[str, Any]:
""" Get real-time information on tasks in training """
# ViewjobTask Information
finetune = await FinetuneDao.find_job(job_id)
if not finetune:
raise NotFoundJobError()
# Sync Task Execution
await cls.sync_job_status(finetune, finetune.sft_endpoint)
# Get log file
log_data = None
res_data = list()
if finetune.log_path:
log_data = await cls.get_job_log(finetune)
res_data = cls.parse_log_data(log_data)
return {
'finetune': finetune,
'log': log_data if finetune.status != FinetuneStatus.FAILED.value else finetune.reason,
'loss_data': res_data, # like [{"step": 10, "loss": 0.5}, {"step": 20, "loss": 0.3}]
'report': finetune.report if finetune.report else None,
}
@classmethod
def parse_log_data(cls, log_data: str) -> List[Dict[str, str]]:
if log_data is None:
return []
res_data = []
contents = log_data.split('\n')
for elem in contents:
if elem.strip() == '':
continue
sub_data = {'step': None, 'loss': None}
elem = elem.strip()
elem_data = json.loads(elem)
if elem_data.get('loss', None) is None:
continue
sub_data['step'] = elem_data['current_steps']
sub_data['loss'] = elem_data['loss']
res_data.append(sub_data)
return res_data
@classmethod
async def sync_job_status(cls, finetune: Finetune, sft_endpoint: str) -> bool:
""" FROMSFT-backendService Synchronization Task Status """
if finetune.status != FinetuneStatus.TRAINING.value:
return True
logger.info(f'start sync job status: {finetune.id}')
sft_ret = await SFTBackend.get_job_status(host=parse_server_host(sft_endpoint), job_id=finetune.id)
if not sft_ret[0]:
logger.error(f'get sft job status error: job_id: {finetune.id}, err: {sft_ret[1]}')
return False
if sft_ret[1]['status'] == SFTBackend.JOB_FINISHED:
finetune.status = FinetuneStatus.SUCCESS.value
await FinetuneDao.change_status(finetune.id, finetune.status, FinetuneStatus.SUCCESS.value)
elif sft_ret[1]['status'] == SFTBackend.JOB_FAILED:
finetune.status = FinetuneStatus.FAILED.value
finetune.reason = sft_ret[1]['reason']
await FinetuneDao.update_job(finetune)
# Execution failed without querying logs and reports
if finetune.status == FinetuneStatus.FAILED.value:
logger.info('sft job status failed, no need exec log and report')
return False
# Query task execution logs and reports
logger.info('start query sft job log and report')
sft_ret = await SFTBackend.get_job_log(host=parse_server_host(sft_endpoint), job_id=finetune.id)
if not sft_ret[0]:
logger.error(f'get sft job log error: job_id: {finetune.id}, err: {sft_ret[1]}')
log_data = sft_ret[1]['log_data'].encode('utf-8')
# Upload log file tominioUpward
log_path = await cls.upload_job_log(finetune, io.BytesIO(log_data), len(log_data))
finetune.log_path = log_path
# Query Task Evaluation Report
logger.info('start query sft job report')
sft_ret = await SFTBackend.get_job_metrics(host=parse_server_host(sft_endpoint), job_id=finetune.id)
if not sft_ret[0]:
logger.error(f'get sft job report error: job_id: {finetune.id}, err: {sft_ret[1]}')
else:
finetune.report = sft_ret[1]['report']
# Changelog and Report Data
await FinetuneDao.update_job(finetune)
return True
@classmethod
async def change_job_model_name(cls, req: FinetuneChangeModelName) -> Finetune:
""" Modify the model name of the training task """
finetune = await FinetuneDao.find_job(req.id)
if not finetune:
raise NotFoundJobError()
# Verify that the model name already exists
await cls.verify_job_model_name(req.model_name)
# Modify Published Model Name
if not await cls.change_published_model_name(finetune, req.model_name):
raise ChangeModelNameError()
# Update training task'smodel_name
finetune.model_name = req.model_name
await FinetuneDao.update_job(finetune)
return finetune
@classmethod
async def change_published_model_name(cls, finetune: Finetune, model_name: str) -> bool:
""" Modify the model name of the training task """
# Unpublished training tasks do not require actionablemodel
if finetune.status != FinetuneStatus.PUBLISHED.value:
return True
published_model = await ModelDeployDao.find_model(finetune.model_id)
if not published_model:
logger.error(f'published model not found, job_id: {finetune.id}, model_id: {finetune.model_id}')
return False
# Call the interface to modify the name of the published model
sft_ret = await SFTBackend.change_model_name(parse_server_host(finetune.sft_endpoint), finetune.id,
published_model.model, model_name)
if not sft_ret[0]:
logger.error(f'change model name error: job_id: {finetune.id}, err: {sft_ret[1]}')
return False
# Modify pre-trained model name
await SftModelDao.change_sft_model(published_model.model, model_name)
# Updating the published model'smodel_name
published_model.model = model_name
await ModelDeployDao.update_model(published_model)
return True
@classmethod
async def get_server_filters(cls) -> List[Dict[str, Any]]:
""" DapatkanftServer Filter Criteria """
server_filters = await FinetuneDao.get_server_filters()
res = []
for one in server_filters:
res.append({
'id': one,
'server_name': one,
})
return res
@classmethod
async def get_model_list(cls, server_id: int) -> List[ModelDeploy]:
""" DapatkanftList of all models under the service """
server_info = await ServerDao.find_server(server_id)
if not server_info:
raise NoSftServerError()
flag, model_name_list = await SFTBackend.get_all_model(parse_server_host(server_info.sft_endpoint))
if not flag:
logger.error(f'get model list error: server_id: {server_id}, err: {model_name_list}')
raise GetModelError()
ret = []
db_model = await ModelDeployDao.find_model_by_server(str(server_id))
for one in db_model:
if one.model in model_name_list:
ret.append(one)
model_name_list.remove(one.model)
for one in model_name_list:
ret.append(await ModelDeployDao.insert_one(ModelDeploy(server=str(server_id),
model=one,
endpoint=f'http://{server_info.endpoint}/v2.1/models')))
res = []
for one in ret:
res.append(ModelDeployInfo(**one.dict(), sft_support=True))
return res
@classmethod
async def get_gpu_info(cls) -> List[Dict]:
""" DapatkanGPUMessage """
all_server = await ServerDao.find_all_server()
res = []
for server in all_server:
if not server.sft_endpoint:
continue
sft_ret = await SFTBackend.get_gpu_info(parse_server_host(server.sft_endpoint))
if not sft_ret[0]:
logger.error(f'get gpu info error: server_id: {server.id}, err: {sft_ret[1]}')
continue
gpu_info = parse_gpus(sft_ret[1])
for one in gpu_info:
one['server'] = server.server
res.append(one)
return res
================================================
FILE: src/backend/bisheng/finetune/domain/services/finetune_file.py
================================================
import os.path
from typing import List
from fastapi import UploadFile
from loguru import logger
from pydantic import BaseModel
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.finetune import TrainFileNotExistError
from bisheng.common.schemas.api import PageList
from bisheng.core.storage.minio.minio_manager import get_minio_storage
from bisheng.utils import generate_uuid
from ..models.preset_train import PresetTrain, PresetTrainDao
class FinetuneFileService(BaseModel):
""" Training Tasks File management """
@classmethod
async def upload_file(cls, files: List[UploadFile], is_preset: bool,
user: UserPayload) -> List[PresetTrain]:
if len(files) == 0:
raise TrainFileNotExistError()
# Upload training files tominio
file_root = cls.get_upload_file_root(is_preset)
file_list = await cls.upload_file_to_minio(files, file_root, user)
# Store preset data in database
if is_preset:
logger.info(f'save preset file : {file_list}')
file_list = await PresetTrainDao.insert_batch(file_list)
return file_list
@classmethod
async def upload_preset_file(cls, name: str, preset_type: int, file_path: str,
user: UserPayload) -> PresetTrain:
# Upload training files tominio
file_root = cls.get_upload_file_root(False)
file_id = generate_uuid()
file_ext = os.path.basename(file_path).split('.')[-1]
object_name = f'{file_root}/{file_id}.{file_ext}'
minio_client = await get_minio_storage()
await minio_client.put_object(bucket_name=minio_client.bucket, object_name=object_name, file=file_path)
# Store preset data in database
file_info = PresetTrain(id=file_id,
name=name,
url=object_name,
type=preset_type,
user_id=user.user_id,
user_name=user.user_name)
await PresetTrainDao.insert_batch([file_info])
return file_info
@classmethod
def get_upload_file_root(cls, is_preset: bool) -> str:
if is_preset:
return 'finetune/train_file/preset'
else:
return 'finetune/train_file/personal'
@classmethod
async def upload_file_to_minio(cls, files: List[UploadFile], file_root: str,
user: UserPayload) -> List[PresetTrain]:
minio_client = await get_minio_storage()
ret = []
for file in files:
file_id = generate_uuid()
file_ext = os.path.basename(file.filename).split('.')[-1]
file_info = PresetTrain(id=file_id,
name=file.filename,
url=f'{file_root}/{file_id}.{file_ext}',
user_id=user.user_id,
user_name=user.user_name)
await minio_client.put_object(bucket_name=minio_client.bucket, object_name=file_info.url,
file=file.file, content_type=file.content_type, length=file.size)
ret.append(file_info)
return ret
@classmethod
async def get_preset_file(cls,
keyword: str = None,
page_size: int = None,
page_num: int = None) -> PageList:
list_res, total_count = await PresetTrainDao.search_name(keyword, page_size, page_num)
return PageList(list=list_res, total=total_count)
@classmethod
async def delete_preset_file(cls, file_id: str, user: UserPayload) -> None:
file_data = await PresetTrainDao.find_one(file_id)
if not file_data:
raise TrainFileNotExistError()
logger.info(f'delete preset train file, user: {user}; file: {file_data.model_dump()}')
await PresetTrainDao.delete_one(file_data)
logger.info('delete preset train file success')
return None
================================================
FILE: src/backend/bisheng/finetune/domain/sft_backend.py
================================================
import json
from typing import Dict, List, Literal
from bisheng.core.external.http_client.http_client_manager import get_http_client
class SFTBackend:
""" Packaging andSFT-BackendInteraction """
# of fine-tuning training instructionsoptionsParameters Listing
CMD_OPTIONS = ['train']
# jobStatus Misi
JOB_FINISHED = 'FINISHED'
JOB_FAILED = 'FAILED'
@classmethod
async def handle_response(cls, res) -> (bool, str | None | Dict):
content = await res.content.read()
if res.status != 200:
return False, content.decode('utf-8')
result = json.loads(content)
if result.get('status_code') != 200:
return False, content.decode('utf-8')
return True, result.get('data', None)
@classmethod
async def _base_request(cls, method: Literal['get', 'post'], *args, **kwargs) -> (bool, str | Dict):
client = await get_http_client()
client = await client.get_aiohttp_client()
if method == 'get':
res = await client.get(*args, **kwargs)
else:
res = await client.post(*args, **kwargs)
return await cls.handle_response(res)
@classmethod
async def create_job(cls, host: str, job_id: str, params: Dict) -> (bool, str | Dict):
"""
host RTof servicehostAddress:
job_id is unique to the instructionid,UUIDFormat
options Is InstructionoptionsParameters
params Is InstructionalcommandParameter Parameter
"""
uri = '/v2.1/sft/job'
url = '/v2.1/models/sft_elem/infer'
return await cls._base_request('post',
f'{host}{url}',
json={'uri': uri,
'job_id': job_id,
'options': cls.CMD_OPTIONS,
'params': params})
@classmethod
async def cancel_job(cls, host: str, job_id: str) -> (bool, str | Dict):
""" Cancel training task """
uri = '/v2.1/sft/job/cancel'
url = '/v2.1/models/sft_elem/infer'
return await cls._base_request('post', f'{host}{url}', json={'uri': uri, 'job_id': job_id})
@classmethod
async def delete_job(cls, host: str, job_id: str, model_name: str) -> (bool, str | Dict):
""" Delete training task """
uri = '/v2.1/sft/job/delete'
url = '/v2.1/models/sft_elem/infer'
return await cls._base_request('post', f'{host}{url}',
json={'uri': uri, 'job_id': job_id, 'model_name': model_name})
@classmethod
async def publish_job(cls, host: str, job_id: str, model_name: str) -> (bool, str | Dict):
""" Publish Training Tasks From training path to formal path"""
uri = '/v2.1/sft/job/publish'
url = '/v2.1/models/sft_elem/infer'
return await cls._base_request('post', f'{host}{url}',
json={'uri': uri, 'job_id': job_id, 'model_name': model_name})
@classmethod
async def cancel_publish_job(cls, host: str, job_id: str, model_name: str) -> (bool, str | Dict):
""" Deactivate Training Task Published Model """
uri = '/v2.1/sft/job/publish/cancel'
url = '/v2.1/models/sft_elem/infer'
return await cls._base_request('post', f'{host}{url}',
json={'uri': uri, 'job_id': job_id, 'model_name': model_name})
@classmethod
async def get_job_status(cls, host: str, job_id: str) -> (bool, str | Dict):
"""
Get training task status
Interface return format:
{
"status": "FINISHED",
"reason": "Failure Reason"
}
"""
uri = '/v2.1/sft/job/status'
url = '/v2.1/models/sft_elem/infer'
return await cls._base_request('post', f'{host}{url}', json={'uri': uri, 'job_id': job_id})
@classmethod
async def get_job_log(cls, host: str, job_id: str) -> (bool, str | Dict):
"""
Get the training task log and use it temporarilydictFormat - Returns the contents of the
TODO zgq Subsequent AdoptionhttpStandard File Transfer Format
Data format returned by the interface
{
"log_data": Ref.bisheng-ftProduction Training Log File Contents
}
"""
uri = '/v2.1/sft/job/log'
url = '/v2.1/models/sft_elem/infer'
return await cls._base_request('post', f'{host}{url}', json={'uri': uri, 'job_id': job_id})
@classmethod
async def get_job_metrics(cls, host: str, job_id: str) -> (bool, str | Dict):
"""
Get training mission final report
Interface return data format
{
"report": {}
}
"""
uri = '/v2.1/sft/job/metrics'
url = '/v2.1/models/sft_elem/infer'
return await cls._base_request('post', f'{host}{url}', json={'uri': uri, 'job_id': job_id})
@classmethod
async def change_model_name(cls, host, job_id: str, old_model_name: str, model_name: str) -> (bool, str):
""" Modify Model Name """
uri = '/v2.1/sft/job/model_name'
url = '/v2.1/models/sft_elem/infer'
return await cls._base_request('post', f'{host}{url}',
json={'uri': uri, 'job_id': job_id, 'old_model_name': old_model_name,
'model_name': model_name})
@classmethod
async def get_all_model(cls, host) -> (bool, List[str]):
""" Get a list of all models """
url = '/v2.1/sft/model'
return await cls._base_request('get', f'{host}{url}')
@classmethod
async def get_gpu_info(cls, host) -> (bool, str):
""" DapatkanGPUMessage """
url = '/v2.1/sft/gpu'
return await cls._base_request('get', f'{host}{url}')
================================================
FILE: src/backend/bisheng/finetune/schemas.py
================================================
from typing import Dict, Optional, List
from pydantic import BaseModel, Field
from bisheng.finetune.domain.models.finetune import TrainMethod
class FinetuneCreateReq(BaseModel):
server: int = Field(description='RelatedRTSERVICESID')
base_model: int = Field(description='Foundation ModelID')
model_name: str = Field(max_length=50, description='Model Name')
method: TrainMethod = Field(description='Training Methods')
extra_params: Dict = Field(default_factory=dict, description='Additional parameters required for training tasks')
train_data: Optional[List[Dict]] = Field(default=None, description='Personal training data')
preset_data: Optional[List[Dict]] = Field(default=None, description='Preset training data')
================================================
FILE: src/backend/bisheng/finetune/utils.py
================================================
import xml.dom.minidom
from typing import List, Dict
# will be nvidia-smi -q -x 's output is parsed as visual data
def parse_gpus(gpu_str: str) -> List[Dict]:
dom_tree = xml.dom.minidom.parseString(gpu_str)
collections = dom_tree.documentElement
gpus = collections.getElementsByTagName('gpu')
res = []
for one in gpus:
fb_mem_elem = one.getElementsByTagName('fb_memory_usage')[0]
gpu_uuid_elem = one.getElementsByTagName('uuid')[0]
gpu_id_elem = one.getElementsByTagName('minor_number')[0]
gpu_total_mem = fb_mem_elem.getElementsByTagName('total')[0]
free_mem = fb_mem_elem.getElementsByTagName('free')[0]
gpu_utility_elem = one.getElementsByTagName('utilization')[0].getElementsByTagName(
'gpu_util')[0]
res.append({
'gpu_uuid':
gpu_uuid_elem.firstChild.data,
'gpu_id':
gpu_id_elem.firstChild.data,
'gpu_total_mem':
'%.2f G' % (float(gpu_total_mem.firstChild.data.split(' ')[0]) / 1024),
'gpu_used_mem':
'%.2f G' % (float(free_mem.firstChild.data.split(' ')[0]) / 1024),
'gpu_utility':
round(float(gpu_utility_elem.firstChild.data.split(' ')[0]) / 100, 2)
})
return res
def parse_server_host(endpoint: str):
""" Put the data in the databaseendpointsResolve tohttpRequestedhost """
endpoint = endpoint.replace('http://', '').split('/')[0]
return f'http://{endpoint}'
================================================
FILE: src/backend/bisheng/graph/__init__.py
================================================
from bisheng.graph.edge.base import Edge
from bisheng.graph.graph.base import Graph
from bisheng.graph.vertex.base import Vertex
from bisheng.graph.vertex.types import (AgentVertex, ChainVertex,
DocumentLoaderVertex, EmbeddingVertex,
LLMVertex, MemoryVertex, PromptVertex,
RetrieverVertex, TextSplitterVertex,
ToolkitVertex, ToolVertex,
VectorStoreVertex, WrapperVertex)
__all__ = [
'Graph',
'Vertex',
'Edge',
'AgentVertex',
'ChainVertex',
'DocumentLoaderVertex',
'EmbeddingVertex',
'LLMVertex',
'MemoryVertex',
'PromptVertex',
'TextSplitterVertex',
'ToolVertex',
'ToolkitVertex',
'VectorStoreVertex',
'WrapperVertex',
'RetrieverVertex',
]
================================================
FILE: src/backend/bisheng/graph/edge/__init__.py
================================================
================================================
FILE: src/backend/bisheng/graph/edge/base.py
================================================
from typing import TYPE_CHECKING, List, Optional
from loguru import logger
from pydantic import BaseModel, Field
if TYPE_CHECKING:
from bisheng.graph.vertex.base import Vertex
class SourceHandle(BaseModel):
baseClasses: List[str] = Field(..., description='List of base classes for the source handle.')
dataType: str = Field(..., description='Data type for the source handle.')
id: str = Field(..., description='Unique identifier for the source handle.')
class TargetHandle(BaseModel):
fieldName: str = Field(..., description='Field name for the target handle.')
id: str = Field(..., description='Unique identifier for the target handle.')
inputTypes: Optional[List[str]] = Field(
None, description='List of input types for the target handle.')
type: str = Field(..., description='Type of the target handle.')
class Edge:
def __init__(self, source: 'Vertex', target: 'Vertex', edge: dict):
self.source_id: str = source.id if source else ''
self.target_id: str = target.id if target else ''
if data := edge.get('data', {}):
self._source_handle = data.get('sourceHandle', {})
self._target_handle = data.get('targetHandle', {})
self.source_handle: SourceHandle = SourceHandle(**self._source_handle)
self.target_handle: TargetHandle = TargetHandle(**self._target_handle)
self.target_param = self.target_handle.fieldName
# validate handles
self.validate_handles(source, target)
else:
# Logging here because this is a breaking change
# logger.error('Edge data is empty')
self._source_handle = edge.get('sourceHandle', '')
self._target_handle = edge.get('targetHandle', '')
# 'BaseLoader;BaseOutputParser|documents|PromptTemplate-zmTlD'
# target_param is documents Compatible processing nestinggroup
self.target_param = self._target_handle.split('|')[1].split(f'_{self.target_id}')[0]
# 'BaseLoader;BaseOutputParser|documents|PromptTemplate-zmTlD'
# target_param is documents
self.validate_edge(source, target)
def validate_handles(self, source, target) -> None:
if self.target_handle.inputTypes is None:
self.valid_handles = self.target_handle.type in self.source_handle.baseClasses
else:
self.valid_handles = (any(baseClass in self.target_handle.inputTypes
for baseClass in self.source_handle.baseClasses)
or self.target_handle.type in self.source_handle.baseClasses)
if not self.valid_handles:
logger.debug(self.source_handle)
logger.debug(self.target_handle)
raise ValueError(f'Edge between {source.vertex_type} and {target.vertex_type} '
f'has invalid handles')
def __setstate__(self, state):
self.source_id = state['source_id']
self.target_id = state['target_id']
self.target_param = state['target_param']
self.source_handle = state.get('source_handle')
self.target_handle = state.get('target_handle')
def validate_edge(self, source, target) -> None:
# Validate that the outputs of the source node are valid inputs
# for the target node
self.source_types = source.output
self.target_reqs = target.required_inputs + target.optional_inputs
# Both lists contain strings and sometimes a string contains the value we are
# looking for e.g. comgin_out=["Chain"] and target_reqs=["LLMChain"]
# so we need to check if any of the strings in source_types is in target_reqs
self.valid = any(output in target_req for output in self.source_types
for target_req in self.target_reqs)
# Get what type of input the target node is expecting
self.matched_type = next(
(output for output in self.source_types if output in self.target_reqs),
None,
)
no_matched_type = self.matched_type is None
if no_matched_type:
logger.debug(self.source_types)
logger.debug(self.target_reqs)
if no_matched_type:
raise ValueError(f'Edge between {source.vertex_type} and {target.vertex_type} '
f'has no matched type')
def __repr__(self) -> str:
return (
f'Edge(source={self.source_id}, target={self.target_id}, target_param={self.target_param}'
f', matched_type={self.matched_type})')
def __hash__(self) -> int:
return hash(self.__repr__())
def __eq__(self, __value: object) -> bool:
return (self.__repr__() == __value.__repr__() if isinstance(__value, Edge) else False)
================================================
FILE: src/backend/bisheng/graph/graph/__init__.py
================================================
================================================
FILE: src/backend/bisheng/graph/graph/base.py
================================================
from typing import Dict, Generator, List, Type, Union
from bisheng.graph.edge.base import Edge
from bisheng.graph.graph.constants import lazy_load_vertex_dict
from bisheng.graph.utils import process_flow
from bisheng.graph.vertex.base import Vertex
from bisheng.graph.vertex.types import FileToolVertex, LLMVertex, ToolkitVertex
from bisheng.interface.tools.constants import FILE_TOOLS
from bisheng.utils import payload
from langchain.chains.base import Chain
from loguru import logger
class Graph:
"""A class representing a graph of nodes and edges."""
def __init__(
self,
nodes: List[Dict[str, Union[str, Dict[str, Union[str, List[str]]]]]],
edges: List[Dict[str, str]],
) -> None:
self._vertices = nodes
self._nodes = nodes
self._edges = edges
self.raw_graph_data = {'nodes': nodes, 'edges': edges}
self.top_level_vertices = []
for vertex in self._vertices:
if vertex_id := vertex.get('id'):
self.top_level_vertices.append(vertex_id)
self._graph_data = process_flow(self.raw_graph_data)
self._vertices = self._graph_data['nodes']
self._edges = self._graph_data['edges']
self._build_graph()
def __getstate__(self):
return self.raw_graph_data
def __setstate__(self, state):
self.__init__(**state)
def __eq__(self, other: object) -> bool:
if not isinstance(other, Graph):
return False
return self.__repr__() == other.__repr__()
@classmethod
def from_payload(cls, payload: Dict) -> 'Graph':
"""
Creates a graph from a payload.
Args:
payload (Dict): The payload to create the graph from.˜`
Returns:
Graph: The created graph.
"""
if 'data' in payload:
payload = payload['data']
try:
nodes = payload['nodes']
if len(nodes) == 0:
raise Exception("At least one node is required")
edges = payload['edges']
return cls(nodes, edges)
except KeyError as exc:
import traceback
traceback.print_exc()
raise ValueError(
f"Invalid payload. Expected keys 'nodes' and 'edges'. Found {list(payload.keys())}"
) from exc
def _build_graph(self) -> None:
"""Builds the graph from the nodes and edges."""
self.vertices = self._build_vertices()
self.vertex_map = {vertex.id: vertex for vertex in self.vertices}
self.edges = self._build_edges()
# This is a hack to make sure that the LLM node is sent to
# the toolkit node
self._build_vertex_params()
# remove invalid vertices
self._validate_vertices()
def _build_vertex_params(self) -> None:
"""Identifies and handles the LLM vertex within the graph."""
llm_vertex = None
for vertex in self.vertices:
vertex._build_params()
if isinstance(vertex, LLMVertex):
llm_vertex = vertex
if llm_vertex:
for vertex in self.vertices:
if isinstance(vertex, ToolkitVertex):
vertex.params['llm'] = llm_vertex
def _validate_vertices(self) -> None:
"""Check that all vertices have edges"""
if len(self.vertices) == 1:
return
for vertex in self.vertices:
if not self._validate_vertex(vertex):
raise ValueError(f'{vertex.vertex_type} is not connected to any other components')
def _validate_vertex(self, vertex: Vertex) -> bool:
"""Validates a vertex."""
# All vertices that do not have edges are invalid
return len(self.get_vertex_edges(vertex.id)) > 0
def get_vertex(self, vertex_id: str) -> Union[None, Vertex]:
"""Returns a vertex by id."""
return self.vertex_map.get(vertex_id)
def get_vertex_edges(self, vertex_id: str) -> List[Edge]:
"""Returns a list of edges for a given vertex."""
return [
edge for edge in self.edges
if edge.source_id == vertex_id or edge.target_id == vertex_id
]
def get_vertices_with_target(self, vertex_id: str) -> List[Vertex]:
"""Returns the vertices connected to a vertex."""
vertices: List[Vertex] = []
for edge in self.edges:
if edge.target_id == vertex_id:
vertex = self.get_vertex(edge.source_id)
if vertex is None:
continue
vertices.append(vertex)
return vertices
def get_input_nodes(self) -> List[Vertex]:
"""Builds the graph."""
# Get root node
input_node = payload.get_root_node(self)
if input_node is None:
raise ValueError('No input root node found')
return input_node
async def abuild(self) -> Chain:
"""Builds the graph."""
# Get root node
root_vertex = payload.get_root_vertex(self)
if root_vertex is None:
raise ValueError('No root node vertex found')
return await root_vertex.build()
def topological_sort(self) -> List[Vertex]:
"""
Performs a topological sort of the vertices in the graph.
Returns:
List[Vertex]: A list of vertices in topological order.
Raises:
ValueError: If the graph contains a cycle.
"""
# States: 0 = unvisited, 1 = visiting, 2 = visited
state = {node: 0 for node in self.vertices}
sorted_vertices = []
def dfs(node):
if state[node] == 1:
# We have a cycle
raise ValueError('Graph contains a cycle, cannot perform topological sort')
if state[node] == 0:
state[node] = 1
for edge in node.edges:
if edge.source_id == node.id:
dfs(self.get_vertex(edge.target_id))
state[node] = 2
sorted_vertices.append(node)
# Visit each node
for node in self.vertices:
if state[node] == 0:
dfs(node)
return list(reversed(sorted_vertices))
def generator_build(self) -> Generator:
"""Builds each vertex in the graph and yields it."""
sorted_vertices = self.topological_sort()
logger.debug('There are %s vertices in the graph', len(sorted_vertices))
yield from sorted_vertices
def get_vertex_neighbors(self, vertex: Vertex) -> Dict[Vertex, int]:
"""Returns the neighbors of a vertex."""
neighbors: Dict[Vertex, int] = {}
for edge in self.edges:
if edge.source_id == vertex.id:
neighbor = self.get_vertex(edge.target_id)
if neighbor is None:
continue
if neighbor not in neighbors:
neighbors[neighbor] = 0
neighbors[neighbor] += 1
elif edge.target_id == vertex.id:
neighbor = self.get_vertex(edge.source_id)
if neighbor is None:
continue
if neighbor not in neighbors:
neighbors[neighbor] = 0
neighbors[neighbor] += 1
return neighbors
def _build_edges(self) -> List[Edge]:
"""Builds the edges of the graph."""
# Edge takes two nodes as arguments, so we need to build the nodes first
# and then build the edges
# if we can't find a node, we raise an error
edges: List[Edge] = []
for edge in self._edges:
source = self.get_vertex(edge['source'])
target = self.get_vertex(edge['target'])
if source is None:
raise ValueError(f"Source node {edge['source']} not found")
if target is None:
raise ValueError(f"Target node {edge['target']} not found")
edges.append(Edge(source, target, edge))
return edges
def _get_vertex_class(self, node_type: str, vertex_base_type: str) -> Type[Vertex]:
"""Returns the node class based on the node type."""
if node_type in FILE_TOOLS:
return FileToolVertex
if vertex_base_type == 'CustomComponent':
return lazy_load_vertex_dict.get_custom_component_vertex_type()
if vertex_base_type in lazy_load_vertex_dict.VERTEX_TYPE_MAP:
return lazy_load_vertex_dict.VERTEX_TYPE_MAP[vertex_base_type]
return (lazy_load_vertex_dict.VERTEX_TYPE_MAP[node_type]
if node_type in lazy_load_vertex_dict.VERTEX_TYPE_MAP else Vertex)
def _build_vertices(self) -> List[Vertex]:
"""Builds the vertices of the graph."""
nodes: List[Vertex] = []
for node in self._vertices:
node_data = node['data']
node_type: str = node_data['type'] # type: ignore
vertex_base_type: str = node_data['node']['template']['_type'] # type: ignore
VertexClass = self._get_vertex_class(node_type, vertex_base_type)
vertex_instance = VertexClass(node, graph=self)
vertex_instance.set_top_level(self.top_level_vertices)
nodes.append(vertex_instance)
return nodes
def get_children_by_node_type(self, node: Vertex, node_type: str) -> List[Vertex]:
"""Returns the children of a node based on the node type."""
children = []
node_types = [node.data['type']]
if 'node' in node.data:
node_types += node.data['node']['base_classes']
if node_type in node_types:
children.append(node)
return children
def __repr__(self):
node_ids = [node.id for node in self.vertices]
edges_repr = '\n'.join([f'{edge.source_id} --> {edge.target_id}' for edge in self.edges])
return f'Graph:\nNodes: {node_ids}\nConnections:\n{edges_repr}'
================================================
FILE: src/backend/bisheng/graph/graph/constants.py
================================================
from bisheng.graph.vertex import types
from bisheng.interface.agents.base import agent_creator
from bisheng.interface.chains.base import chain_creator
from bisheng.interface.document_loaders.base import documentloader_creator
from bisheng.interface.embeddings.base import embedding_creator
from bisheng.interface.llms.base import llm_creator
from bisheng.interface.memories.base import memory_creator
from bisheng.interface.output_parsers.base import output_parser_creator
from bisheng.interface.prompts.base import prompt_creator
from bisheng.interface.retrievers.base import retriever_creator
from bisheng.interface.text_splitters.base import textsplitter_creator
from bisheng.interface.toolkits.base import toolkits_creator
from bisheng.interface.tools.base import tool_creator
from bisheng.interface.vector_store.base import vectorstore_creator
from bisheng.interface.wrappers.base import wrapper_creator
from bisheng.utils.lazy_load import LazyLoadDictBase
class VertexTypesDict(LazyLoadDictBase):
def __init__(self):
self._all_types_dict = None
@property
def VERTEX_TYPE_MAP(self):
return self.all_types_dict
def _build_dict(self):
langchain_types_dict = self.get_type_dict()
return {
**langchain_types_dict,
'Custom': ['Custom Tool', 'Python Function'],
}
def get_custom_component_vertex_type(self):
return types.CustomComponentVertex
def get_type_dict(self):
return {
**{
t: types.PromptVertex
for t in prompt_creator.to_list()
},
**{
t: types.AgentVertex
for t in agent_creator.to_list()
},
**{
t: types.ChainVertex
for t in chain_creator.to_list()
},
**{
t: types.ToolVertex
for t in tool_creator.to_list()
},
**{
t: types.ToolkitVertex
for t in toolkits_creator.to_list()
},
**{
t: types.WrapperVertex
for t in wrapper_creator.to_list()
},
**{
t: types.LLMVertex
for t in llm_creator.to_list()
},
**{
t: types.MemoryVertex
for t in memory_creator.to_list()
},
**{
t: types.EmbeddingVertex
for t in embedding_creator.to_list()
},
**{
t: types.VectorStoreVertex
for t in vectorstore_creator.to_list()
},
**{
t: types.DocumentLoaderVertex
for t in documentloader_creator.to_list()
},
**{
t: types.TextSplitterVertex
for t in textsplitter_creator.to_list()
},
**{
t: types.OutputParserVertex
for t in output_parser_creator.to_list()
},
# **{t: types.CustomComponentVertex for t in custom_component_creator.to_list()},
**{
t: types.RetrieverVertex
for t in retriever_creator.to_list()
},
}
lazy_load_vertex_dict = VertexTypesDict()
================================================
FILE: src/backend/bisheng/graph/graph/utils.py
================================================
import copy
from collections import deque
from typing import Dict, List
def find_last_node(nodes, edges):
"""
This function receives a flow and returns the last node.
"""
return next((n for n in nodes if all(e['source'] != n['id'] for e in edges)), None)
def add_parent_node_id(nodes, parent_node_id):
"""
This function receives a list of nodes and adds a parent_node_id to each node.
"""
for node in nodes:
node['parent_node_id'] = parent_node_id
def ungroup_node(group_node_data, base_flow):
template, flow = (
group_node_data['node']['template'],
group_node_data['node']['flow'],
)
parent_node_id = group_node_data['id']
g_nodes = flow['data']['nodes']
add_parent_node_id(g_nodes, parent_node_id)
g_edges = flow['data']['edges']
# Redirect edges to the correct proxy node
updated_edges = get_updated_edges(base_flow, g_nodes, g_edges, group_node_data['id'])
# Update template values
update_template(template, g_nodes)
nodes = [n for n in base_flow['nodes'] if n['id'] != group_node_data['id']] + g_nodes
edges = ([
e for e in base_flow['edges']
if e['target'] != group_node_data['id'] and e['source'] != group_node_data['id']
] + g_edges + updated_edges)
base_flow['nodes'] = nodes
base_flow['edges'] = edges
return nodes
def raw_topological_sort(nodes, edges) -> List[Dict]:
# Redefine the above function but using the nodes and self._edges
# which are dicts instead of Vertex and Edge objects
# nodes have an id, edges have a source and target keys
# return a list of node ids in topological order
# States: 0 = unvisited, 1 = visiting, 2 = visited
state = {node['id']: 0 for node in nodes}
nodes_dict = {node['id']: node for node in nodes}
sorted_vertices = []
def dfs(node):
if state[node] == 1:
# We have a cycle
raise ValueError('Graph contains a cycle, cannot perform topological sort')
if state[node] == 0:
state[node] = 1
for edge in edges:
if edge['source'] == node:
dfs(edge['target'])
state[node] = 2
sorted_vertices.append(node)
# Visit each node
for node in nodes:
if state[node['id']] == 0:
dfs(node['id'])
reverse_sorted = list(reversed(sorted_vertices))
return [nodes_dict[node_id] for node_id in reverse_sorted]
def process_flow(flow_object):
cloned_flow = copy.deepcopy(flow_object)
processed_nodes = set() # To keep track of processed nodes
def process_node(node):
node_id = node.get('id')
# If node already processed, skip
if node_id in processed_nodes:
return
if node.get('data') and node['data'].get('node') and node['data']['node'].get('flow'):
process_flow(node['data']['node']['flow']['data'])
new_nodes = ungroup_node(node['data'], cloned_flow)
# Add new nodes to the queue for future processing
nodes_to_process.extend(new_nodes)
# Mark node as processed
processed_nodes.add(node_id)
sorted_nodes_list = raw_topological_sort(cloned_flow['nodes'], cloned_flow['edges'])
nodes_to_process = deque(sorted_nodes_list)
while nodes_to_process:
node = nodes_to_process.popleft()
process_node(node)
return cloned_flow
def update_template(template, g_nodes):
"""
Updates the template of a node in a graph with the given template.
Args:
template (dict): The new template to update the node with.
g_nodes (list): The list of nodes in the graph.
Returns:
None
"""
for _, value in template.items():
if not value.get('proxy'):
continue
proxy_dict = value['proxy']
field, id_ = proxy_dict['field'], proxy_dict['id']
node_index = next((i for i, n in enumerate(g_nodes) if n['id'] == id_), -1)
if node_index != -1:
display_name = None
show = g_nodes[node_index]['data']['node']['template'][field]['show']
advanced = g_nodes[node_index]['data']['node']['template'][field]['advanced']
if 'display_name' in g_nodes[node_index]['data']['node']['template'][field]:
display_name = g_nodes[node_index]['data']['node']['template'][field][
'display_name']
else:
display_name = g_nodes[node_index]['data']['node']['template'][field]['name']
g_nodes[node_index]['data']['node']['template'][field] = value
g_nodes[node_index]['data']['node']['template'][field]['show'] = show
g_nodes[node_index]['data']['node']['template'][field]['advanced'] = advanced
g_nodes[node_index]['data']['node']['template'][field]['display_name'] = display_name
def update_target_handle(
new_edge,
g_nodes,
group_node_id,
):
"""
Updates the target handle of a given edge if it is a proxy node.
Args:
new_edge (dict): The edge to update.
g_nodes (list): The list of nodes in the graph.
group_node_id (str): The ID of the group node.
Returns:
dict: The updated edge.
"""
target_handle = new_edge['data']['targetHandle']
if target_handle.get('proxy'):
proxy_id = target_handle['proxy']['id']
if node := next((n for n in g_nodes if n['id'] == proxy_id), None):
set_new_target_handle(proxy_id, new_edge, target_handle, node)
else:
raise ValueError(
f'Group node {group_node_id} has an invalid target proxy node {proxy_id}')
return new_edge
def set_new_target_handle(proxy_id, new_edge, target_handle, node):
"""
Sets a new target handle for a given edge.
Args:
proxy_id (str): The ID of the proxy.
new_edge (dict): The new edge to be created.
target_handle (dict): The target handle of the edge.
node (dict): The node containing the edge.
Returns:
None
"""
new_edge['target'] = proxy_id
_type = target_handle.get('type')
if _type is None:
raise KeyError("The 'type' key must be present in target_handle.")
field = target_handle['proxy']['field']
new_target_handle = {
'fieldName': field,
'type': _type,
'id': proxy_id,
}
if node['data']['node'].get('flow'):
new_target_handle['proxy'] = {
'field': node['data']['node']['template'][field]['proxy']['field'],
'id': node['data']['node']['template'][field]['proxy']['id'],
}
if input_types := target_handle.get('inputTypes'):
new_target_handle['inputTypes'] = input_types
new_edge['data']['targetHandle'] = new_target_handle
def update_source_handle(new_edge, g_nodes, g_edges):
"""
Updates the source handle of a given edge to the last node in the flow data.
Args:
new_edge (dict): The edge to update.
flow_data (dict): The flow data containing the nodes and edges.
Returns:
dict: The updated edge with the new source handle.
"""
last_node = copy.deepcopy(find_last_node(g_nodes, g_edges))
new_edge['source'] = last_node['id']
new_source_handle = new_edge['data']['sourceHandle']
new_source_handle['id'] = last_node['id']
new_edge['data']['sourceHandle'] = new_source_handle
return new_edge
def get_updated_edges(base_flow, g_nodes, g_edges, group_node_id):
"""
Given a base flow, a list of graph nodes and a group node id, returns a list of updated edges.
An updated edge is an edge that has its target or source handle updated based on the group node id.
Args:
base_flow (dict): The base flow containing a list of edges.
g_nodes (list): A list of graph nodes.
group_node_id (str): The id of the group node.
Returns:
list: A list of updated edges.
"""
updated_edges = []
for edge in base_flow['edges']:
new_edge = copy.deepcopy(edge)
if new_edge['target'] == group_node_id:
new_edge = update_target_handle(new_edge, g_nodes, group_node_id)
if new_edge['source'] == group_node_id:
new_edge = update_source_handle(new_edge, g_nodes, g_edges)
if edge['target'] == group_node_id or edge['source'] == group_node_id:
updated_edges.append(new_edge)
return updated_edges
================================================
FILE: src/backend/bisheng/graph/utils.py
================================================
import copy
from collections import deque
from typing import Any, Dict, List, Union
from bisheng.interface.utils import extract_input_variables_from_prompt
class UnbuiltObject:
pass
def validate_prompt(prompt: str):
"""Validate prompt."""
if extract_input_variables_from_prompt(prompt):
return prompt
return fix_prompt(prompt)
def fix_prompt(prompt: str):
"""Fix prompt."""
return prompt + ' {input}'
def flatten_list(list_of_lists: list[Union[list, Any]]) -> list:
"""Flatten list of lists."""
new_list = []
for item in list_of_lists:
if isinstance(item, list):
new_list.extend(item)
else:
new_list.append(item)
return new_list
def find_last_node(nodes, edges):
"""
This function receives a flow and returns the last node.
"""
return next((n for n in nodes if all(e['source'] != n['id'] for e in edges)), None)
def add_parent_node_id(nodes, parent_node_id):
"""
This function receives a list of nodes and adds a parent_node_id to each node.
"""
for node in nodes:
node['parent_node_id'] = parent_node_id
def ungroup_node(group_node_data, base_flow):
template, flow = (
group_node_data['node']['template'],
group_node_data['node']['flow'],
)
parent_node_id = group_node_data['id']
g_nodes = flow['data']['nodes']
add_parent_node_id(g_nodes, parent_node_id)
g_edges = flow['data']['edges']
# Redirect edges to the correct proxy node
updated_edges = get_updated_edges(base_flow, g_nodes, g_edges, group_node_data['id'])
# Update template values
update_template(template, g_nodes)
nodes = [n for n in base_flow['nodes'] if n['id'] != group_node_data['id']] + g_nodes
edges = ([
e for e in base_flow['edges']
if e['target'] != group_node_data['id'] and e['source'] != group_node_data['id']
] + g_edges + updated_edges)
base_flow['nodes'] = nodes
base_flow['edges'] = edges
return nodes
def raw_topological_sort(nodes, edges) -> List[Dict]:
# Redefine the above function but using the nodes and self._edges
# which are dicts instead of Vertex and Edge objects
# nodes have an id, edges have a source and target keys
# return a list of node ids in topological order
# States: 0 = unvisited, 1 = visiting, 2 = visited
state = {node['id']: 0 for node in nodes}
nodes_dict = {node['id']: node for node in nodes}
sorted_vertices = []
def dfs(node):
if state[node] == 1:
# We have a cycle
raise ValueError('Graph contains a cycle, cannot perform topological sort')
if state[node] == 0:
state[node] = 1
for edge in edges:
if edge['source'] == node:
dfs(edge['target'])
state[node] = 2
sorted_vertices.append(node)
# Visit each node
for node in nodes:
if state[node['id']] == 0:
dfs(node['id'])
reverse_sorted = list(reversed(sorted_vertices))
return [nodes_dict[node_id] for node_id in reverse_sorted]
def process_flow(flow_object):
cloned_flow = copy.deepcopy(flow_object)
processed_nodes = set() # To keep track of processed nodes
def process_node(node):
node_id = node.get('id')
# If node already processed, skip
if node_id in processed_nodes:
return
if node.get('data') and node['data'].get('node') and node['data']['node'].get('flow'):
process_flow(node['data']['node']['flow']['data'])
new_nodes = ungroup_node(node['data'], cloned_flow)
# Add new nodes to the queue for future processing
nodes_to_process.extend(new_nodes)
# Mark node as processed
processed_nodes.add(node_id)
sorted_nodes_list = raw_topological_sort(cloned_flow['nodes'], cloned_flow['edges'])
nodes_to_process = deque(sorted_nodes_list)
while nodes_to_process:
node = nodes_to_process.popleft()
process_node(node)
return cloned_flow
def update_template(template, g_nodes):
"""
Updates the template of a node in a graph with the given template.
Args:
template (dict): The new template to update the node with.
g_nodes (list): The list of nodes in the graph.
Returns:
None
"""
for _, value in template.items():
if not value.get('proxy'):
continue
proxy_dict = value['proxy']
field, id_ = proxy_dict['field'], proxy_dict['id']
node_index = next((i for i, n in enumerate(g_nodes) if n['id'] == id_), -1)
if node_index != -1:
display_name = None
show = g_nodes[node_index]['data']['node']['template'][field].get('show', False)
advanced = g_nodes[node_index]['data']['node']['template'][field]['advanced']
if 'display_name' in g_nodes[node_index]['data']['node']['template'][field]:
display_name = g_nodes[node_index]['data']['node']['template'][field][
'display_name']
else:
display_name = g_nodes[node_index]['data']['node']['template'][field]['name']
g_nodes[node_index]['data']['node']['template'][field] = value
g_nodes[node_index]['data']['node']['template'][field]['show'] = show
g_nodes[node_index]['data']['node']['template'][field]['advanced'] = advanced
g_nodes[node_index]['data']['node']['template'][field]['display_name'] = display_name
def update_target_handle(
new_edge,
g_nodes,
group_node_id,
):
"""
Updates the target handle of a given edge if it is a proxy node.
Args:
new_edge (dict): The edge to update.
g_nodes (list): The list of nodes in the graph.
group_node_id (str): The ID of the group node.
Returns:
dict: The updated edge.
"""
# Compatibility Logic
for node in g_nodes:
if node['id'] in new_edge['targetHandle']:
new_edge['target'] = node['id']
break
return new_edge
def set_new_target_handle(proxy_id, new_edge, target_handle, node):
"""
Sets a new target handle for a given edge.
Args:
proxy_id (str): The ID of the proxy.
new_edge (dict): The new edge to be created.
target_handle (dict): The target handle of the edge.
node (dict): The node containing the edge.
Returns:
None
"""
new_edge['target'] = proxy_id
_type = target_handle.get('type')
if _type is None:
raise KeyError("The 'type' key must be present in target_handle.")
field = target_handle['proxy']['field']
new_target_handle = {
'fieldName': field,
'type': _type,
'id': proxy_id,
}
if node['data']['node'].get('flow'):
new_target_handle['proxy'] = {
'field': node['data']['node']['template'][field]['proxy']['field'],
'id': node['data']['node']['template'][field]['proxy']['id'],
}
if input_types := target_handle.get('inputTypes'):
new_target_handle['inputTypes'] = input_types
if not new_edge.get('data'):
new_edge['data'] = {}
new_edge['data']['targetHandle'] = new_target_handle
def update_source_handle(new_edge, g_nodes, g_edges):
"""
Updates the source handle of a given edge to the last node in the flow data.
Args:
new_edge (dict): The edge to update.
flow_data (dict): The flow data containing the nodes and edges.
Returns:
dict: The updated edge with the new source handle.
"""
last_node = copy.deepcopy(find_last_node(g_nodes, g_edges))
new_edge['sourceHandle'] = new_edge['sourceHandle'].replace(new_edge['source'],
last_node['id'])
new_edge['source'] = last_node['id']
return new_edge
def get_updated_edges(base_flow, g_nodes, g_edges, group_node_id):
"""
Given a base flow, a list of graph nodes and a group node id, returns a list of updated edges.
An updated edge is an edge that has its target or source handle updated based on the group node id.
Args:
base_flow (dict): The base flow containing a list of edges.
g_nodes (list): A list of graph nodes.
group_node_id (str): The id of the group node.
Returns:
list: A list of updated edges.
"""
updated_edges = []
for edge in base_flow['edges']:
new_edge = copy.deepcopy(edge)
if new_edge['target'] == group_node_id:
new_edge = update_target_handle(new_edge, g_nodes, group_node_id)
if new_edge['source'] == group_node_id:
new_edge = update_source_handle(new_edge, g_nodes, g_edges)
if edge['target'] == group_node_id or edge['source'] == group_node_id:
updated_edges.append(new_edge)
return updated_edges
def find_next_node(graph_data: Dict, node_id: str) -> List[Dict]:
"""
Finds the next node in the graph data based on the given node id.
"""
nodes = graph_data.get('nodes', [])
edges = graph_data.get('edges', [])
edges_ = [e['target'] for e in edges if e['source'] == node_id]
return [n for n in nodes if n['id'] in edges_]
def cut_graph_bynode(graph_data: Dict, node_id: str) -> List[Dict]:
"""
Setujunode_id Find andnodeAll dependent nodes involved.
"""
nodes = graph_data.get('nodes', [])
edges = graph_data.get('edges', [])
nodes_new_list = []
edges_new_list = []
iflast = True
for e in edges:
if e['target'] == node_id:
iflast = False
node_list, edge_list = cut_graph_bynode(graph_data, e['source'])
nodes_new_list.extend(node_list)
edges_new_list.extend(edge_list)
nodes_new_list.append([n for n in nodes if n['id'] == node_id][0])
edges_new_list.append(e)
if iflast:
for node in nodes:
if node['id'] == node_id:
return [node], []
return nodes_new_list, edges_new_list
================================================
FILE: src/backend/bisheng/graph/vertex/__init__.py
================================================
================================================
FILE: src/backend/bisheng/graph/vertex/base.py
================================================
import ast
import inspect
import json
import types
from typing import TYPE_CHECKING, Any, Coroutine, Dict, List, Optional
from bisheng.graph.utils import UnbuiltObject
from bisheng.interface.initialize import loading
from bisheng.interface.listing import lazy_load_dict
from bisheng.utils.constants import DIRECT_TYPES, NODE_ID_DICT, PRESET_QUESTION
from bisheng.utils.util import sync_to_async
from loguru import logger
if TYPE_CHECKING:
from bisheng.graph.edge.base import Edge
from bisheng.graph.graph.base import Graph
class Vertex:
def __init__(
self,
data: Dict,
graph: 'Graph',
base_type: Optional[str] = None,
is_task: bool = False,
params: Optional[Dict] = None,
) -> None:
self.graph = graph
self.id: str = data['id']
self._data = data
self.base_type: Optional[str] = base_type
self._parse_data()
self._built_object = UnbuiltObject()
self._built = False
self.artifacts: Dict[str, Any] = {}
self.task_id: Optional[str] = None
self.is_task = is_task
self.params = params or {}
self.parent_node_id: Optional[str] = self._data.get('parent_node_id')
self.parent_is_top_level = False
@property
def edges(self) -> List['Edge']:
return self.graph.get_vertex_edges(self.id)
def __getstate__(self):
return {
'_data': self._data,
'params': {},
'base_type': self.base_type,
'is_task': self.is_task,
'id': self.id,
'_built_object': UnbuiltObject(),
'_built': False,
'parent_node_id': self.parent_node_id,
'parent_is_top_level': self.parent_is_top_level,
}
def __setstate__(self, state):
self._data = state['_data']
self.params = state['params']
self.base_type = state['base_type']
self.is_task = state['is_task']
self.id = state['id']
self._parse_data()
if '_built_object' in state:
self._built_object = state['_built_object']
self._built = state['_built']
else:
self._built_object = UnbuiltObject()
self._built = False
self.artifacts: Dict[str, Any] = {}
self.task_id: Optional[str] = None
self.parent_node_id = state['parent_node_id']
self.parent_is_top_level = state['parent_is_top_level']
def set_top_level(self, top_level_vertices: List[str]) -> None:
self.parent_is_top_level = self.parent_node_id in top_level_vertices
def _parse_data(self) -> None:
self.data = self._data['data']
self.output = self.data['node']['base_classes']
template_dicts = {
key: value
for key, value in self.data['node']['template'].items() if isinstance(value, dict)
}
self.required_inputs = [
template_dicts[key]['type'] for key, value in template_dicts.items()
if value['required']
]
self.optional_inputs = [
template_dicts[key]['type'] for key, value in template_dicts.items()
if not value['required']
]
# Add the template_dicts[key]["input_types"] to the optional_inputs
self.optional_inputs.extend([
input_type for value in template_dicts.values()
for input_type in value.get('input_types', [])
])
template_dict = self.data['node']['template']
self.vertex_type = (self.data['type'] if 'Tool' not in self.output
or template_dict['_type'].islower() else template_dict['_type'])
if self.base_type is None:
for base_type, value in lazy_load_dict.ALL_TYPES_DICT.items():
if self.vertex_type in value:
self.base_type = base_type
break
def get_task(self):
# using the task_id, get the task from celery
# and return it
from celery.result import AsyncResult # type: ignore
return AsyncResult(self.task_id)
def _build_params(self):
# sourcery skip: merge-list-append, remove-redundant-if
# Some params are required, some are optional
# but most importantly, some params are python base classes
# like str and others are LangChain objects like LLMChain, BasePromptTemplate
# so we need to be able to distinguish between the two
# The dicts with "type" == "str" are the ones that are python base classes
# and most likely have a "value" key
# So for each key besides "_type" in the template dict, we have a dict
# with a "type" key. If the type is not "str", then we need to get the
# edge that connects to that node and get the Node with the required data
# and use that as the value for the param
# If the type is "str", then we need to get the value of the "value" key
# and use that as the value for the param
if self.graph is None:
raise ValueError('Graph not found')
template_dict = {
key: value
for key, value in self.data['node']['template'].items() if isinstance(value, dict)
}
params = {}
for edge in self.edges:
if not hasattr(edge, 'target_param'):
continue
param_key = edge.target_param
# If the param_key is in the template_dict and the edge.target_id is the current node
# We check this to make sure params with the same name but different target_id
# don't get overwritten
if param_key in template_dict and edge.target_id == self.id:
if template_dict[param_key]['list']:
if param_key not in params:
params[param_key] = []
params[param_key].append(self.graph.get_vertex(edge.source_id))
elif edge.target_id == self.id:
params[param_key] = self.graph.get_vertex(edge.source_id)
# for report, should get the source of source
for inner_edge in self.graph.get_vertex(edge.source_id).edges:
source_type = inner_edge.target_param
if (source_type == 'input_node' and inner_edge.source_id != self.id
and inner_edge.target_id != self.id):
if self.graph.get_vertex(inner_edge.source_id).vertex_type == 'InputNode':
# for extra params,
if PRESET_QUESTION not in params:
params[PRESET_QUESTION] = {}
params[PRESET_QUESTION].update({
inner_edge.target_id:
(inner_edge.source_id, self.graph.get_vertex(inner_edge.source_id))
})
elif (source_type == 'documents' and inner_edge.source_id != self.id
and inner_edge.target_id != self.id and self.graph.get_vertex(
inner_edge.target_id).vertex_type == 'LoaderOutputChain'):
if self.graph.get_vertex(inner_edge.source_id).vertex_type in {
'UniversalKVLoader', 'CustomKVLoader'
}:
for key, value in self.graph.get_vertex(
inner_edge.source_id).data['node']['template'].items():
if key in {'schemas', 'schema'}:
schema = value['value'].split('|')
if PRESET_QUESTION not in params:
params[PRESET_QUESTION] = {}
if inner_edge.target_id in params[PRESET_QUESTION]:
params[PRESET_QUESTION][inner_edge.target_id].append(
(inner_edge.source_id, schema))
else:
params[PRESET_QUESTION].update(
{inner_edge.target_id: [(inner_edge.source_id, schema)]})
for key, value in template_dict.items():
if key in params:
continue
if key == '_type' or (not value.get('show')
and not value.get('value')) and key != 'code':
continue
if value.get('collection_id') and 'collection_id' not in template_dict:
params['collection_id'] = value.get('collection_id')
# If the type is not transformable to a python base class
# then we need to get the edge that connects to this node
if value.get('type') == 'file':
# Load the type in value.get('suffixes') using
# what is inside value.get('content')
# value.get('value') is the file name
file_path = value.get('file_path')
params['file_name'] = value.get('value')
params[key] = file_path
elif value.get('type') in DIRECT_TYPES and params.get(key) is None:
val = value.get('value')
if value.get('type') == 'code':
try:
params[key] = ast.literal_eval(val) if val else None
except Exception as exc:
logger.debug(f'Error parsing code: {exc}')
params[key] = val
elif value.get('type') in ['dict', 'NestedDict']:
# When dict comes from the frontend it comes as a
# list of dicts, so we need to convert it to a dict
# before passing it to the build method
if isinstance(val, list):
params[key] = {
k: v
for item in value.get('value', [])
for k, v in item.items()
}
elif isinstance(val, dict):
params[key] = val
elif isinstance(val, str):
params[key] = json.loads(val) if val else {}
elif value.get('type') == 'int' and val is not None:
try:
params[key] = int(val)
except ValueError:
params[key] = val
elif value.get('type') == 'float' and val is not None:
try:
params[key] = float(val)
except ValueError:
params[key] = val
else:
params[key] = val
if not value.get('required') and params.get(key) is None:
if value.get('default'):
params[key] = value.get('default')
else:
params.pop(key, None)
# Add _type to params
self._raw_params = params
self.params = params
async def _build(self, user_id=None):
"""
Initiate the build process.
"""
logger.debug(f'Building {self.vertex_type}')
# keep node_id in params
self.params[NODE_ID_DICT] = {}
await self._build_each_node_in_params_dict(user_id)
await self._get_and_instantiate_class(user_id)
self._validate_built_object()
self._built = True
async def _build_each_node_in_params_dict(self, user_id=None):
"""
Iterates over each node in the params dictionary and builds it.
"""
for key, value in self.params.copy().items():
if self._is_node(value):
if value == self:
del self.params[key]
continue
await self._build_node_and_update_params(key, value, user_id)
elif isinstance(value, list) and self._is_list_of_nodes(value):
await self._build_list_of_nodes_and_update_params(key, value, user_id)
elif isinstance(value, dict) and self._is_dict_of_nodes(value):
await self._build_dict_of_nodes_and_update_params(key, value, user_id)
def _is_node(self, value):
"""
Checks if the provided value is an instance of Vertex.
"""
return isinstance(value, Vertex)
def _is_list_of_nodes(self, value):
"""
Checks if the provided value is a list of Vertex instances.
"""
return all(self._is_node(node) for node in value)
def _is_dict_of_nodes(self, value):
nodes = [node for node in value.values() if isinstance(node, tuple)]
if nodes:
return any(self._is_node(node[1]) for node in nodes)
else:
return False
async def get_result(self, user_id=None, timeout=None) -> Any:
# Check if the Vertex was built already
if self._built:
return self._built_object
if self.is_task and self.task_id is not None:
task = self.get_task()
result = task.get(timeout=timeout)
if isinstance(result, Coroutine):
result = await result
if result is not None: # If result is ready
self._update_built_object_and_artifacts(result)
return self._built_object
else:
# Handle the case when the result is not ready (retry, throw exception, etc.)
pass
# If there's no task_id, build the vertex locally
await self.build(user_id=user_id)
return self._built_object
async def _build_node_and_update_params(self, key, node, user_id=None):
"""
Builds a given node and updates the params dictionary accordingly.
"""
result = await node.get_result(user_id)
self._handle_func(key, result)
if isinstance(result, list):
self._extend_params_list_with_result(key, result)
self.params[key] = result
self.params[NODE_ID_DICT].update({key: node.id})
async def _build_list_of_nodes_and_update_params(self,
key,
nodes: List['Vertex'],
user_id=None):
"""
Iterates over a list of nodes, builds each and updates the params dictionary.
"""
self.params[key] = []
key_list = []
for node in nodes:
key_list.append(node.id)
built = await node.get_result(user_id)
if isinstance(built, list):
if key not in self.params:
self.params[key] = []
self.params[key].extend(built)
else:
self.params[key].append(built)
self.params[NODE_ID_DICT].update({key: key_list})
async def _build_dict_of_nodes_and_update_params(self, key, dicts, user_id=None):
self.params[key] = {}
for k, v in dicts.items():
if isinstance(v, list):
# loaderOutput
for k1, v1 in v:
if self._is_node(v1):
result = await v1.get_result(user_id)
self.params[key][k] = (k1, result)
else:
self.params[key][k] = (k1, v1)
elif self._is_node(v[1]):
result = await v[1].get_result(user_id)
self.params[key][k] = (v[0], result)
else:
self.params[key][k] = (v[0], v[1])
def _handle_func(self, key, result):
"""
Handles 'func' key by checking if the result is a function and setting it as coroutine.
"""
if key == 'func':
if not isinstance(result, types.FunctionType):
func_ = ''
if hasattr(result, 'arun'):
self.params['coroutine'] = result.arun
func_ = result.arun
if hasattr(result, 'run'):
result = result.run
func_ = func_ or result.run # type: ignore
elif hasattr(result, 'get_function'):
func_ = result.get_function() # type: ignore
elif inspect.iscoroutinefunction(result):
self.params['coroutine'] = result
else:
self.params['coroutine'] = sync_to_async(result)
return result
def _extend_params_list_with_result(self, key, result):
"""
Extends a list in the params dictionary with the given result if it exists.
"""
if isinstance(self.params[key], list):
self.params[key].extend(result)
async def _get_and_instantiate_class(self, user_id=None):
"""
Gets the class from a dictionary and instantiates it with the params.
"""
if self.base_type is None:
raise ValueError(f'Base type for node {self.vertex_type} not found')
try:
result = await loading.instantiate_class(node_type=self.vertex_type,
base_type=self.base_type,
params=self.params,
user_id=user_id)
self._update_built_object_and_artifacts(result)
except Exception as exc:
logger.exception("Error building node")
raise ValueError(f'Error building node {self.vertex_type}: {str(exc)}') from exc
def _update_built_object_and_artifacts(self, result):
"""
Updates the built object and its artifacts.
"""
if isinstance(result, tuple):
self._built_object, self.artifacts = result
else:
self._built_object = result
def _validate_built_object(self):
"""
Checks if the built object is None and raises a ValueError if so.
"""
if isinstance(self._built_object, UnbuiltObject):
raise ValueError(f'{self.vertex_type}: {self._built_object_repr()}')
elif self._built_object is None:
message = f'{self.vertex_type} returned None.'
if self.base_type == 'custom_components':
message += ' Make sure your build method returns a component.'
logger.warning(message)
raise ValueError(f'Node type {self.vertex_type} not found')
async def build(self, force: bool = False, user_id=None, *args, **kwargs) -> Any:
if not self._built or force:
await self._build(user_id, *args, **kwargs)
return self._built_object
def add_edge(self, edge: 'Edge') -> None:
if edge not in self.edges:
self.edges.append(edge)
def __repr__(self) -> str:
return f'Vertex(id={self.id}, data={self.data})'
def __eq__(self, __o: object) -> bool:
try:
return self.id == __o.id if isinstance(__o, Vertex) else False
except AttributeError:
return False
def __hash__(self) -> int:
return id(self)
def _built_object_repr(self):
# Add a message with an emoji, stars for sucess,
return f'Built successfully {self.id}' if self._built_object else f'Failed to build {self.id}'
================================================
FILE: src/backend/bisheng/graph/vertex/constants.py
================================================
================================================
FILE: src/backend/bisheng/graph/vertex/types.py
================================================
import ast
from typing import Any, Dict, List, Optional, Union
from bisheng.graph.utils import UnbuiltObject, flatten_list
from bisheng.graph.vertex.base import Vertex
from bisheng.interface.utils import extract_input_variables_from_prompt
class AgentVertex(Vertex):
def __init__(self, data: Dict, graph, params: Optional[Dict] = None):
super().__init__(data, graph=graph, base_type='agents', params=params)
self.tools: List[Union[ToolkitVertex, ToolVertex]] = []
self.chains: List[ChainVertex] = []
def __getstate__(self):
state = super().__getstate__()
state['tools'] = self.tools
state['chains'] = self.chains
return state
def __setstate__(self, state):
self.tools = state['tools']
self.chains = state['chains']
super().__setstate__(state)
def _set_tools_and_chains(self) -> None:
for edge in self.edges:
if not hasattr(edge, 'source_id'):
continue
source_node = self.graph.get_vertex(edge.source_id)
if isinstance(source_node, (ToolVertex, ToolkitVertex)):
self.tools.append(source_node)
elif isinstance(source_node, ChainVertex):
self.chains.append(source_node)
async def build(self, force: bool = False, user_id=None, *args, **kwargs) -> Any:
if not self._built or force:
self._set_tools_and_chains()
# First, build the tools
for tool_node in self.tools:
await tool_node.build(user_id=user_id)
# Next, build the chains and the rest
for chain_node in self.chains:
await chain_node.build(tools=self.tools, user_id=user_id)
await self._build(user_id=user_id)
return self._built_object
class ToolVertex(Vertex):
def __init__(
self,
data: Dict,
graph,
params: Optional[Dict] = None,
):
super().__init__(data, graph=graph, base_type='tools', params=params)
class LLMVertex(Vertex):
built_node_type = None
class_built_object = None
def __init__(self, data: Dict, graph, params: Optional[Dict] = None):
super().__init__(data, graph=graph, base_type='llms', params=params)
async def build(self, force: bool = False, user_id=None, *args, **kwargs) -> Any:
# LLM is different because some models might take up too much memory
# or time to load. So we only load them when we need them.ß
if self.vertex_type == self.built_node_type:
return self.class_built_object
if not self._built or force:
await self._build(user_id=user_id)
self.built_node_type = self.vertex_type
self.class_built_object = self._built_object
# Avoid deepcopying the LLM
# that are loaded from a file
return self._built_object
class ToolkitVertex(Vertex):
def __init__(self, data: Dict, graph, params=None):
super().__init__(data, graph=graph, base_type='toolkits', params=params)
class FileToolVertex(ToolVertex):
def __init__(self, data: Dict, graph, params=None):
super().__init__(data, graph=graph, params=params)
class WrapperVertex(Vertex):
def __init__(self, data: Dict, graph):
super().__init__(data, graph=graph, base_type='wrappers')
async def build(self, force: bool = False, user_id=None, *args, **kwargs) -> Any:
if not self._built or force:
if 'headers' in self.params:
self.params['headers'] = ast.literal_eval(self.params['headers'])
await self._build(user_id=user_id)
return self._built_object
class DocumentLoaderVertex(Vertex):
def __init__(self, data: Dict, graph, params: Optional[Dict] = None):
super().__init__(data, graph=graph, base_type='documentloaders', params=params)
def _built_object_repr(self):
# This built_object is a list of documents. Maybe we should
# show how many documents are in the list?
if self._built_object and not isinstance(self._built_object, UnbuiltObject):
avg_length = sum(
len(doc.page_content) for doc in self._built_object
if hasattr(doc, 'page_content')) / len(self._built_object)
return f"""{self.vertex_type}({len(self._built_object)} documents)
\nAvg. Document Length (characters): {int(avg_length)}
Documents: {self._built_object[:3]}..."""
return f'{self.vertex_type}()'
class EmbeddingVertex(Vertex):
def __init__(self, data: Dict, graph, params: Optional[Dict] = None):
super().__init__(data, graph=graph, base_type='embeddings', params=params)
class VectorStoreVertex(Vertex):
def __init__(self, data: Dict, graph, params=None):
super().__init__(data, graph=graph, base_type='vectorstores')
self.params = params or {}
# VectorStores may contain databse connections
# so we need to define the __reduce__ method and the __setstate__ method
# to avoid pickling errors
def remove_docs_and_texts_from_params(self):
# remove documents and texts from params
# so that we don't try to pickle a database connection
self.params.pop('documents', None)
self.params.pop('texts', None)
# def __getstate__(self):
# # We want to save the params attribute
# # and if "documents" or "texts" are in the params
# # we want to remove them because they have already
# # been processed.
# params = self.params.copy()
# params.pop("documents", None)
# params.pop("texts", None)
# return super().__getstate__()
def __setstate__(self, state):
super().__setstate__(state)
self.remove_docs_and_texts_from_params()
class MemoryVertex(Vertex):
def __init__(self, data: Dict, graph):
super().__init__(data, graph=graph, base_type='memory')
class RetrieverVertex(Vertex):
def __init__(self, data: Dict, graph):
super().__init__(data, graph=graph, base_type='retrievers')
class TextSplitterVertex(Vertex):
def __init__(self, data: Dict, graph, params: Optional[Dict] = None):
super().__init__(data, graph=graph, base_type='textsplitters', params=params)
def _built_object_repr(self):
# This built_object is a list of documents. Maybe we should
# show how many documents are in the list?
if self._built_object and not isinstance(self._built_object, UnbuiltObject):
avg_length = sum(len(doc.page_content)
for doc in self._built_object) / len(self._built_object)
return f"""{self.vertex_type}({len(self._built_object)} documents)
\nAvg. Document Length (characters): {int(avg_length)}
\nDocuments: {self._built_object[:3]}..."""
return f'{self.vertex_type}()'
class ChainVertex(Vertex):
def __init__(self, data: Dict, graph):
super().__init__(data, graph=graph, base_type='chains')
async def build(
self,
force: bool = False,
user_id=None,
*args,
**kwargs,
) -> Any:
if not self._built or force:
# Temporarily remove the code from the params
self.params.pop('code', None)
# Check if the chain requires a PromptVertex
# Temporarily remove "code" from the params
self.params.pop('code', None)
for key, value in self.params.items():
if isinstance(value, PromptVertex):
# Build the PromptVertex, passing the tools if available
tools = kwargs.get('tools', None)
self.params[key] = await value.build(tools=tools, force=force)
await self._build(user_id=user_id)
return self._built_object
class PromptVertex(Vertex):
def __init__(self, data: Dict, graph):
super().__init__(data, graph=graph, base_type='prompts')
async def build(
self,
force: bool = False,
user_id=None,
tools: Optional[List[Union[ToolkitVertex, ToolVertex]]] = None,
*args,
**kwargs,
) -> Any:
if not self._built or force:
if 'input_variables' not in self.params or self.params['input_variables'] is None:
self.params['input_variables'] = []
# Check if it is a ZeroShotPrompt and needs a tool
if 'ShotPrompt' in self.vertex_type:
tools = [await tool_node.build(user_id=user_id)
for tool_node in tools] if tools is not None else []
# flatten the list of tools if it is a list of lists
# first check if it is a list
if tools and isinstance(tools, list) and isinstance(tools[0], list):
tools = flatten_list(tools)
self.params['tools'] = tools
prompt_params = [
key for key, value in self.params.items()
if isinstance(value, str) and key != 'format_instructions'
]
else:
prompt_params = ['template']
if 'prompt' not in self.params and 'messages' not in self.params:
for param in prompt_params:
prompt_text = self.params[param]
variables = extract_input_variables_from_prompt(prompt_text)
self.params['input_variables'].extend(variables)
self.params['input_variables'] = list(set(self.params['input_variables']))
elif isinstance(self.params, dict):
self.params.pop('input_variables', None)
await self._build(user_id=user_id)
return self._built_object
def _built_object_repr(self):
if not self.artifacts or self._built_object is None or not hasattr(
self._built_object, 'format'):
return super()._built_object_repr()
# We'll build the prompt with the artifacts
# to show the user what the prompt looks like
# with the variables filled in
artifacts = self.artifacts.copy()
# Remove the handle_keys from the artifacts
# so the prompt format doesn't break
artifacts.pop('handle_keys', None)
try:
if (not hasattr(self._built_object, 'template')
and hasattr(self._built_object, 'prompt')
and not isinstance(self._built_object, UnbuiltObject)):
template = self._built_object.prompt.template
elif not isinstance(self._built_object, UnbuiltObject) and hasattr(
self._built_object, 'template'):
template = self._built_object.template
for key, value in artifacts.items():
if value:
replace_key = '{' + key + '}'
template = template.replace(replace_key, value)
return template if isinstance(template, str) else f'{self.vertex_type}({template})'
except KeyError:
return str(self._built_object)
class OutputParserVertex(Vertex):
def __init__(self, data: Dict, graph):
super().__init__(data, graph=graph, base_type='output_parsers')
class CustomComponentVertex(Vertex):
def __init__(self, data: Dict, graph):
super().__init__(data, graph=graph, base_type='custom_components', is_task=False)
def _built_object_repr(self):
if self.task_id and self.is_task:
if task := self.get_task():
return str(task.info)
else:
return f'Task {self.task_id} is not running'
if self.artifacts and 'repr' in self.artifacts:
return self.artifacts['repr'] or super()._built_object_repr()
================================================
FILE: src/backend/bisheng/initdb_config.yaml
================================================
knowledges: # 知识库相关配置
etl4lm:
# 文档解析模型服务配置,包括OCR、版式分析、表格识别、公式识别等
url: "" # http://192.168.106.12:8180/v1/etl4llm/predict
timeout: 600
# OCR SDK服务地址,默认为空则使用ETL4LM自带的轻量OCR模型(速度快,对于困难场景效果一般),若填写OCR SDK服务地址则使用高精度的OCR模型。
ocr_sdk_url: ""
llm_request:
# 控制技能 LLM 组件模型访问的超时配置, 以下是默认值
request_timeout: 600
max_retries: 1
default_operator:
# 使用免登录链接的方式需要配置,因为免登录链接相当于不知道用户信息,我们系统会自动把这些行为记录到某个用户头上,这里用来配置该用户的id
user: 1
enable_guest_access: true # 免登录链接是否可访问
# 密码安全相关配置
password_conf:
# 密码超过X天必须进行修改, 登录提示重新修改密码。大于0策略才生效
password_valid_period: 200
# 登录错误时间窗口,单位分钟。在错误时间窗口内超过最大错误次数会封禁用户,password_valid_period和login_error_time_window都大于0才生效
login_error_time_window: 5
# 最大错误次数,超过后会封禁用户,大于0时生效
max_error_times: 0
system_login_method:
# 是否允许多点登录
allow_multi_login: true
# sso系统登录配置(毕昇商业扩展套件功能,开源版无需配置)
gateway_login: false # 是否开启sso登录
admin_username: admin # 从 SSO/LDAP 注册的管理员用户名
# 登陆页面是否需要输入验证码,可设置为True或False
use_captcha: True
# 会话窗口底部提示文案
dialog_tips:
"内容由AI生成,仅供参考!"
env:
# 聊天窗口快捷搜索功能使用的搜索引擎,默认为百度,可以配置为内部文档搜索
# dialog_quick_search: http://www.baidu.com/s?wd=
# 当用户的环境前面的网关,不能在同一个端口上既有http又有socket时,需要这个配置,将两个请求区分开,默认可以不用
# websocket_url: 192.168.106.120:3003
office_url: http://IP:8701 # onlyoffice 组件地址,需要浏览器能直接访问
# 是否展示前端界面上的github和帮助链接
show_github_and_help: true
# 是否开启注册
enable_registration: true
# 前端上传文件的最大限制,单位MB
uploaded_files_maximum_size: 50
workflow:
# 节点运行最大步数
max_steps: 50
# 等待用户输入的超时时间,单位分钟
timeout: 5
# 灵思模块相关配置
linsight:
# 历史记录中工具消息的最大token,超过后需要总结下历史记录
tool_buffer: 100000
# 单个任务最大执行步骤数,防止死循环
max_steps: 200
# 灵思任务执行过程中模型调用重试次数
retry_num: 3
# 灵思任务执行过程中模型调用重试间隔时间(秒)
retry_sleep: 5
# 生成SOP时,prompt里放的用户上传文件信息的数量
max_file_num: 5
# 生成SOP时,prompt里放的组织知识库的最大数量
max_knowledge_num: 20
# 拆分二级任务时读取文件内容的字符数,超过后会截断
file_content_length: 5000
# 灵思模型默认温度
default_temperature: 0
# 模型json格式失败重试时的温度
retry_temperature: 1
================================================
FILE: src/backend/bisheng/interface/__init__.py
================================================
================================================
FILE: src/backend/bisheng/interface/agents/__init__.py
================================================
from bisheng.interface.agents.base import AgentCreator
__all__ = ['AgentCreator']
================================================
FILE: src/backend/bisheng/interface/agents/base.py
================================================
from typing import ClassVar, Dict, List, Optional
from bisheng.custom.customs import get_custom_nodes
from bisheng.interface.agents.custom import CUSTOM_AGENTS
from bisheng.interface.base import LangChainTypeCreator
from bisheng.interface.importing.utils import import_class
from bisheng.common.services.config_service import settings
from bisheng.template.frontend_node.agents import AgentFrontendNode
from loguru import logger
from bisheng.utils.util import build_template_from_class, build_template_from_method
from bisheng_langchain import agents as bisheng_agents
from langchain.agents import types
class AgentCreator(LangChainTypeCreator):
type_name: str = 'agents'
from_method_nodes: ClassVar[Dict] = {
'ZeroShotAgent': 'from_llm_and_tools',
'CSVAgent': 'from_toolkit_and_llm',
'SQLAgent': 'from_toolkit_and_llm',
'ChatglmFunctionsAgent': 'from_llm_and_tools',
'LLMFunctionsAgent': 'from_llm_and_tools',
'OpenAIToolsAgent': 'from_llm_and_tools',
}
@property
def frontend_node_class(self) -> type[AgentFrontendNode]:
return AgentFrontendNode
@property
def type_to_loader_dict(self) -> Dict:
if self.type_dict is None:
self.type_dict = types.AGENT_TO_CLASS
# Add JsonAgent to the list of agents
for name, agent in CUSTOM_AGENTS.items():
# TODO: validate AgentType
self.type_dict[name] = agent # type: ignore
bisheng = {
chain_name: import_class(f'bisheng_langchain.agents.{chain_name}')
for chain_name in bisheng_agents.__all__
}
self.type_dict.update(bisheng)
return self.type_dict
def get_signature(self, name: str) -> Optional[Dict]:
try:
if name in get_custom_nodes(self.type_name).keys():
return get_custom_nodes(self.type_name)[name]
elif name in self.from_method_nodes:
return build_template_from_method(
name,
type_to_cls_dict=self.type_to_loader_dict,
add_function=True,
method_name=self.from_method_nodes[name],
)
return build_template_from_class(name, self.type_to_loader_dict, add_function=True)
except ValueError as exc:
raise ValueError('Agent not found') from exc
except AttributeError as exc:
logger.error(f'Agent {name} not loaded: {exc}')
return None
# Now this is a generator
def to_list(self) -> List[str]:
names = []
for _, agent in self.type_to_loader_dict.items():
agent_name = (agent.function_name()
if hasattr(agent, 'function_name') else agent.__name__)
if agent_name in settings.agents or settings.dev:
names.append(agent_name)
return names
agent_creator = AgentCreator()
================================================
FILE: src/backend/bisheng/interface/agents/custom.py
================================================
from typing import Any, List, Optional, Sequence, Tuple, Union
from bisheng.interface.base import CustomAgentExecutor
from langchain.agents import (AgentExecutor, AgentType, BaseSingleActionAgent, Tool, ZeroShotAgent,
initialize_agent)
from langchain.agents.agent_toolkits.vectorstore.prompt import PREFIX as VECTORSTORE_PREFIX
from langchain.agents.agent_toolkits.vectorstore.prompt import \
ROUTER_PREFIX as VECTORSTORE_ROUTER_PREFIX
from langchain.agents.agent_toolkits.vectorstore.toolkit import (VectorStoreInfo,
VectorStoreRouterToolkit,
VectorStoreToolkit)
from langchain.agents.mrkl.prompt import FORMAT_INSTRUCTIONS
from langchain.agents.openai_functions_agent.base import OpenAIFunctionsAgent
from langchain.agents.openai_tools.base import create_openai_tools_agent
from langchain.base_language import BaseLanguageModel
from langchain.chains import LLMChain
from langchain.memory.buffer import ConversationBufferMemory
from langchain.memory.chat_memory import BaseChatMemory
from langchain_community.agent_toolkits import SQLDatabaseToolkit
from langchain_community.agent_toolkits.json.prompt import JSON_PREFIX, JSON_SUFFIX
from langchain_community.agent_toolkits.json.toolkit import JsonToolkit
from langchain_community.agent_toolkits.sql.prompt import SQL_PREFIX, SQL_SUFFIX
from langchain_community.tools.sql_database.prompt import QUERY_CHECKER
from langchain_community.utilities.sql_database import SQLDatabase
from langchain_core.agents import AgentAction, AgentFinish
from langchain_core.callbacks import BaseCallbackManager, Callbacks
from langchain_core.memory import BaseMemory
from langchain_core.messages import BaseMessage, SystemMessage
from langchain_core.prompts.chat import (BaseMessagePromptTemplate, ChatPromptTemplate,
HumanMessagePromptTemplate, MessagesPlaceholder)
from langchain_core.runnables import RunnableConfig
from langchain_core.tools import BaseTool
from langchain_experimental.agents.agent_toolkits.pandas.prompt import PREFIX as PANDAS_PREFIX
from langchain_experimental.agents.agent_toolkits.pandas.prompt import \
SUFFIX_WITH_DF as PANDAS_SUFFIX
from langchain_experimental.tools.python.tool import PythonAstREPLTool
from pydantic import Field
history_prompt = """Below is a transcript of your chats:
{history}
"""
class JsonAgent(CustomAgentExecutor):
"""Json agent"""
@staticmethod
def function_name():
return 'JsonAgent'
@classmethod
def initialize(cls, *args, **kwargs):
return cls.from_toolkit_and_llm(*args, **kwargs)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@classmethod
def from_toolkit_and_llm(cls, toolkit: JsonToolkit, llm: BaseLanguageModel):
tools = toolkit if isinstance(toolkit, list) else toolkit.get_tools()
tool_names = {tool.name for tool in tools}
prompt = ZeroShotAgent.create_prompt(
tools,
prefix=JSON_PREFIX,
suffix=JSON_SUFFIX,
format_instructions=FORMAT_INSTRUCTIONS,
input_variables=None,
)
llm_chain = LLMChain(
llm=llm,
prompt=prompt,
)
agent = ZeroShotAgent(
llm_chain=llm_chain,
allowed_tools=tool_names # type: ignore
)
return cls.from_agent_and_tools(agent=agent, tools=tools, verbose=True)
def run(self, *args, **kwargs):
return super().run(*args, **kwargs)
class CSVAgent(CustomAgentExecutor):
"""CSV agent"""
@staticmethod
def function_name():
return 'CSVAgent'
@classmethod
def initialize(cls, *args, **kwargs):
return cls.from_toolkit_and_llm(*args, **kwargs)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@classmethod
def from_toolkit_and_llm(
cls,
path: str,
llm: BaseLanguageModel,
pandas_kwargs: Optional[dict] = None,
prefix: str = PANDAS_PREFIX,
suffix: str = PANDAS_SUFFIX,
format_instructions: str = FORMAT_INSTRUCTIONS,
input_variables: Optional[List[str]] = ['df_head', 'input', 'agent_scratchpad'],
**kwargs: Any):
import pandas as pd # type: ignore
_kwargs = pandas_kwargs or {}
df = pd.read_csv(path, **_kwargs)
tools = [PythonAstREPLTool(locals={'df': df})] # type: ignore
prompt = ZeroShotAgent.create_prompt(
tools,
prefix=prefix,
suffix=suffix,
format_instructions=format_instructions,
input_variables=input_variables,
)
partial_prompt = prompt.partial(df_head=str(df.head()))
llm_chain = LLMChain(
llm=llm,
prompt=partial_prompt,
)
tool_names = {tool.name for tool in tools}
agent = ZeroShotAgent(
llm_chain=llm_chain,
allowed_tools=tool_names,
**kwargs # type: ignore
)
return cls.from_agent_and_tools(agent=agent, tools=tools, verbose=True)
def run(self, *args, **kwargs):
return super().run(*args, **kwargs)
class VectorStoreAgent(CustomAgentExecutor):
"""Vector store agent"""
@staticmethod
def function_name():
return 'VectorStoreAgent'
@classmethod
def initialize(cls, *args, **kwargs):
return cls.from_toolkit_and_llm(*args, **kwargs)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@classmethod
def from_toolkit_and_llm(cls, llm: BaseLanguageModel, vectorstoreinfo: VectorStoreInfo,
**kwargs: Any):
"""Construct a vectorstore agent from an LLM and tools."""
toolkit = VectorStoreToolkit(vectorstore_info=vectorstoreinfo, llm=llm)
tools = toolkit.get_tools()
prompt = ZeroShotAgent.create_prompt(tools, prefix=VECTORSTORE_PREFIX)
llm_chain = LLMChain(
llm=llm,
prompt=prompt,
)
tool_names = {tool.name for tool in tools}
agent = ZeroShotAgent(
llm_chain=llm_chain,
allowed_tools=tool_names,
**kwargs # type: ignore
)
return AgentExecutor.from_agent_and_tools(agent=agent,
tools=tools,
verbose=True,
handle_parsing_errors=True)
def run(self, *args, **kwargs):
return super().run(*args, **kwargs)
class SQLAgent(CustomAgentExecutor):
"""SQL agent"""
@staticmethod
def function_name():
return 'SQLAgent'
@classmethod
def initialize(cls, *args, **kwargs):
return cls.from_toolkit_and_llm(*args, **kwargs)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@classmethod
def from_toolkit_and_llm(cls,
llm: BaseLanguageModel,
database_uri: str,
top_k: int = 10,
prefix: str = SQL_PREFIX,
suffix: str = SQL_SUFFIX,
format_instructions: str = FORMAT_INSTRUCTIONS,
input_variables: Optional[List[str]] = ['input', 'agent_scratchpad'],
**kwargs: Any):
"""Construct an SQL agent from an LLM and tools."""
db = SQLDatabase.from_uri(database_uri)
toolkit = SQLDatabaseToolkit(db=db, llm=llm)
# The right code should be this, but there is a problem with tools = toolkit.get_tools()
# related to `OPENAI_API_KEY`
# return create_sql_agent(llm=llm, toolkit=toolkit, verbose=True)
from langchain.prompts import PromptTemplate
from langchain.tools.sql_database.tool import (
InfoSQLDatabaseTool,
ListSQLDatabaseTool,
QuerySQLCheckerTool,
QuerySQLDataBaseTool,
)
llmchain = LLMChain(
llm=llm,
prompt=PromptTemplate(template=QUERY_CHECKER, input_variables=['query', 'dialect']),
)
tools = [
QuerySQLDataBaseTool(db=db), # type: ignore
InfoSQLDatabaseTool(db=db), # type: ignore
ListSQLDatabaseTool(db=db), # type: ignore
QuerySQLCheckerTool(db=db, llm_chain=llmchain, llm=llm), # type: ignore
]
prefix = prefix.format(dialect=toolkit.dialect, top_k=top_k)
prompt = ZeroShotAgent.create_prompt(
tools=tools, # type: ignore
prefix=prefix,
suffix=suffix,
format_instructions=format_instructions,
input_variables=input_variables,
)
llm_chain = LLMChain(
llm=llm,
prompt=prompt,
)
tool_names = {tool.name for tool in tools} # type: ignore
agent = ZeroShotAgent(
llm_chain=llm_chain,
allowed_tools=tool_names,
**kwargs # type: ignore
)
return AgentExecutor.from_agent_and_tools(
agent=agent,
tools=tools, # type: ignore
verbose=True,
max_iterations=15,
early_stopping_method='force',
handle_parsing_errors=True,
)
def run(self, *args, **kwargs):
return super().run(*args, **kwargs)
class VectorStoreRouterAgent(CustomAgentExecutor):
"""Vector Store Router Agent"""
@staticmethod
def function_name():
return 'VectorStoreRouterAgent'
@classmethod
def initialize(cls, *args, **kwargs):
return cls.from_toolkit_and_llm(*args, **kwargs)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@classmethod
def from_toolkit_and_llm(cls, llm: BaseLanguageModel,
vectorstoreroutertoolkit: VectorStoreRouterToolkit, **kwargs: Any):
"""Construct a vector store router agent from an LLM and tools."""
tools = (vectorstoreroutertoolkit if isinstance(vectorstoreroutertoolkit, list) else
vectorstoreroutertoolkit.get_tools())
prompt = ZeroShotAgent.create_prompt(tools, prefix=VECTORSTORE_ROUTER_PREFIX)
llm_chain = LLMChain(
llm=llm,
prompt=prompt,
)
tool_names = {tool.name for tool in tools}
agent = ZeroShotAgent(
llm_chain=llm_chain,
allowed_tools=tool_names,
**kwargs # type: ignore
)
return AgentExecutor.from_agent_and_tools(agent=agent,
tools=tools,
verbose=True,
handle_parsing_errors=True)
def run(self, *args, **kwargs):
return super().run(*args, **kwargs)
class OpenAIToolsAgent(OpenAIFunctionsAgent):
"""OpenAI Tools Agent"""
memory: BaseMemory = Field(default_factory=ConversationBufferMemory)
agent: Any
@property
def input_keys(self) -> List[str]:
"""Get input keys. Input refers to user input here."""
return ['input', 'history']
def plan(
self,
intermediate_steps: List[Tuple[AgentAction, str]],
callbacks: Callbacks = None,
with_functions: bool = True,
**kwargs: Any,
) -> Union[AgentAction, AgentFinish]:
input_dict = {'intermediate_steps': intermediate_steps}
selected_inputs = {
k: kwargs[k]
for k in self.prompt.input_variables if k != 'agent_scratchpad'
}
input_dict.update(selected_inputs)
return self.agent.invoke(input_dict, config=RunnableConfig(callbacks=callbacks))
async def aplan(
self,
intermediate_steps: List[Tuple[AgentAction, str]],
callbacks: Callbacks = None,
**kwargs: Any,
) -> Union[AgentAction, AgentFinish]:
input_dict = {'intermediate_steps': intermediate_steps}
selected_inputs = {
k: kwargs[k]
for k in self.prompt.input_variables if k != 'agent_scratchpad'
}
input_dict.update(selected_inputs)
return await self.agent.ainvoke(input_dict, config=RunnableConfig(callbacks=callbacks))
@classmethod
def create_prompt(
cls,
system_message: Optional[SystemMessage] = SystemMessage(
content='You are a helpful AI assistant.'),
extra_prompt_messages: Optional[List[BaseMessagePromptTemplate]] = None,
) -> ChatPromptTemplate:
"""Create prompt for this agent.
Args:
system_message: Message to use as the system message that will be the
first in the prompt.
extra_prompt_messages: Prompt messages that will be placed between the
system message and the new human input.
Returns:
A prompt template to pass into this agent.
"""
_prompts = extra_prompt_messages or []
messages: List[Union[BaseMessagePromptTemplate, BaseMessage]]
if system_message:
messages = [system_message]
else:
messages = []
messages.extend([
*_prompts,
MessagesPlaceholder(variable_name='agent_scratchpad'),
])
return ChatPromptTemplate(messages=messages) # type: ignore[arg-type, call-arg]
@classmethod
def from_llm_and_tools(
cls,
llm: BaseLanguageModel,
tools: Sequence[BaseTool],
callback_manager: Optional[BaseCallbackManager] = None,
extra_prompt: str = history_prompt,
human_prompt: str = '{input}',
system_message: str = 'You are a helpful AI assistant.',
**kwargs: Any,
) -> BaseSingleActionAgent:
"""Construct an agent from an LLM and tools.
Args:
llm: The LLM to use as the agent.
tools: The tools to use.
callback_manager: The callback manager to use. Defaults to None.
extra_prompt_messages: Extra prompt messages to use. Defaults to None.
system_message: The system message to use.
Defaults to a default system message.
kwargs: Additional parameters to pass to the agent.
"""
system_message_prompt = SystemMessage(content=system_message)
extra_prompt_messages = [HumanMessagePromptTemplate.from_template(extra_prompt)]
extra_prompt_messages.extend([HumanMessagePromptTemplate.from_template(human_prompt)])
prompt = cls.create_prompt(system_message=system_message_prompt,
extra_prompt_messages=extra_prompt_messages)
agent = create_openai_tools_agent(llm, tools, prompt)
return cls( # type: ignore[call-arg]
llm=llm,
agent=agent,
prompt=prompt,
tools=tools,
callback_manager=callback_manager,
**kwargs,
)
@classmethod
def initialize(
cls,
llm: BaseLanguageModel,
tools: Sequence[BaseTool],
callback_manager: Optional[BaseCallbackManager] = None,
extra_prompt: str = history_prompt,
human_prompt: str = '{input}',
system_message: str = 'You are a helpful AI assistant.',
memory: Optional[BaseChatMemory] = None,
**kwargs: Any,
):
agent = cls.from_llm_and_tools(
llm,
tools,
callback_manager,
extra_prompt,
human_prompt,
system_message,
memory=memory,
**kwargs,
)
return AgentExecutor.from_agent_and_tools(
agent=agent,
tools=tools,
verbose=True,
memory=memory,
return_intermediate_steps=True,
handle_parsing_errors=True,
)
class InitializeAgent(CustomAgentExecutor):
"""Implementation of AgentInitializer function"""
@staticmethod
def function_name():
return 'AgentInitializer'
@classmethod
def initialize(
cls,
llm: BaseLanguageModel,
tools: List[Tool],
agent: str,
memory: Optional[BaseChatMemory] = None,
):
# Find which value in the AgentType enum corresponds to the string
# passed in as agent
if agent == 'openai-tools':
agent = OpenAIToolsAgent.from_llm_and_tools(
llm,
tools,
memory=memory,
return_intermediate_steps=True,
handle_parsing_errors=True,
)
return AgentExecutor.from_agent_and_tools(
agent=agent,
tools=tools,
memory=memory,
return_intermediate_steps=True,
handle_parsing_errors=True,
)
agent = AgentType(agent)
return initialize_agent(
tools=tools,
llm=llm,
# LangChain now uses Enum for agent, but we still support string
agent=agent, # type: ignore
memory=memory,
return_intermediate_steps=True,
handle_parsing_errors=True,
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def run(self, *args, **kwargs):
return super().run(*args, **kwargs)
# custom agents must initialize with initialize method
CUSTOM_AGENTS = {
'JsonAgent': JsonAgent,
'CSVAgent': CSVAgent,
'AgentInitializer': InitializeAgent,
'VectorStoreAgent': VectorStoreAgent,
'VectorStoreRouterAgent': VectorStoreRouterAgent,
'SQLAgent': SQLAgent,
'OpenAIToolsAgent': OpenAIToolsAgent,
}
================================================
FILE: src/backend/bisheng/interface/agents/prebuilt.py
================================================
from langchain.agents import AgentExecutor, ZeroShotAgent
from langchain.agents.agent_toolkits.json.prompt import JSON_PREFIX, JSON_SUFFIX
from langchain.agents.agent_toolkits.json.toolkit import JsonToolkit
from langchain.agents.mrkl.prompt import FORMAT_INSTRUCTIONS
from langchain.base_language import BaseLanguageModel
from langchain.chains import LLMChain
class MalfoyAgent(AgentExecutor):
"""Json agent"""
prefix = 'Malfoy: '
@classmethod
def initialize(cls, *args, **kwargs):
return cls.from_toolkit_and_llm(*args, **kwargs)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@classmethod
def from_toolkit_and_llm(cls, toolkit: JsonToolkit, llm: BaseLanguageModel):
tools = toolkit.get_tools()
tool_names = {tool.name for tool in tools}
prompt = ZeroShotAgent.create_prompt(
tools,
prefix=JSON_PREFIX,
suffix=JSON_SUFFIX,
format_instructions=FORMAT_INSTRUCTIONS,
input_variables=None,
)
llm_chain = LLMChain(
llm=llm,
prompt=prompt,
)
agent = ZeroShotAgent(llm_chain=llm_chain, allowed_tools=tool_names) # type: ignore
return cls.from_agent_and_tools(agent=agent, tools=tools, verbose=True)
def run(self, *args, **kwargs):
return super().run(*args, **kwargs)
PREBUILT_AGENTS = {
'MalfoyAgent': MalfoyAgent,
}
================================================
FILE: src/backend/bisheng/interface/autogenRole/__init__.py
================================================
================================================
FILE: src/backend/bisheng/interface/autogenRole/base.py
================================================
from typing import Any, Dict, List, Optional
from bisheng.interface.base import LangChainTypeCreator
from bisheng.interface.importing.utils import import_class
from bisheng.template.frontend_node.autogenrole import AutogenRoleFrontNode
from loguru import logger
from bisheng.utils.util import build_template_from_class
from bisheng_langchain import autogen_role
class AutogenRole(LangChainTypeCreator):
type_name: str = 'autogen_roles'
@property
def frontend_node_class(self) -> type[AutogenRoleFrontNode]:
return AutogenRoleFrontNode
@property
def type_to_loader_dict(self) -> Dict:
if self.type_dict is None:
self.type_dict: dict[str, Any] = {
role_name: import_class(f'bisheng_langchain.autogen_role.{role_name}')
for role_name in autogen_role.__all__
}
return self.type_dict
def get_signature(self, name: str) -> Optional[Dict]:
try:
return build_template_from_class(
name, self.type_to_loader_dict, add_function=True
)
except ValueError as exc:
raise ValueError('Agent not found') from exc
except AttributeError as exc:
logger.error(f'Agent {name} not loaded: {exc}')
return None
# Now this is a generator
def to_list(self) -> List[str]:
names = []
for _, role in self.type_to_loader_dict.items():
role_name = (role.function_name()
if hasattr(role, 'function_name') else role.__name__)
names.append(role_name)
return names
autogenrole_creator = AutogenRole()
================================================
FILE: src/backend/bisheng/interface/base.py
================================================
from abc import ABC, abstractmethod
from typing import Any, Dict, List, Optional, Type, Union
from bisheng.common.services.config_service import settings
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
from bisheng.template.template.base import Template
from loguru import logger
from langchain.agents import AgentExecutor
from langchain.chains.base import Chain
from pydantic import BaseModel
# Assuming necessary imports for Field, Template, and FrontendNode classes
skip_llm = {'CombineDocsChain'}
class LangChainTypeCreator(BaseModel, ABC):
type_name: str
type_dict: Optional[Dict] = None
name_docs_dict: Optional[Dict[str, str]] = None
@property
def frontend_node_class(self) -> Type[FrontendNode]:
"""The class type of the FrontendNode created in frontend_node."""
return FrontendNode
@property
def docs_map(self) -> Dict[str, str]:
"""A dict with the name of the component as key and the documentation link as value."""
if self.name_docs_dict is None:
try:
type_settings = getattr(settings, self.type_name)
self.name_docs_dict = {
name: value_dict['documentation']
for name, value_dict in type_settings.items()
}
except AttributeError as exc:
logger.error(exc)
self.name_docs_dict = {}
return self.name_docs_dict
@property
@abstractmethod
def type_to_loader_dict(self) -> Dict:
if self.type_dict is None:
raise NotImplementedError
return self.type_dict
@abstractmethod
def get_signature(
self, name: str
) -> Union[Optional[Dict[Any, Any]], FrontendNode]:
pass
@abstractmethod
def to_list(self) -> List[str]:
pass
def to_dict(self) -> Dict:
result: Dict = {self.type_name: {}}
for name in self.to_list():
# frontend_node.to_dict() returns a dict with the following structure:
# {name: {template: {fields}, description: str}}
# so we should update the result dict
node = self.frontend_node(name)
if node is not None:
node = node.to_dict() # type: ignore
result[self.type_name].update(node)
return result
def frontend_node(self, name) -> Union[FrontendNode, None]:
signature = self.get_signature(name)
if signature is None:
logger.error(f'Node {name} not loaded')
return signature
if not isinstance(signature, FrontendNode):
fields = [
TemplateField(
name=key,
field_type=value['type'],
required=value.get('required', False),
placeholder=value.get('placeholder', ''),
is_list=value.get('list', False),
show=value.get('show', True),
multiline=value.get('multiline', False),
value=value.get('value', None),
suffixes=value.get('suffixes', []),
file_types=value.get('fileTypes', []),
file_path=value.get('file_path', None),
) for key, value in signature['template'].items()
if key != '_type'
]
template = Template(type_name=name, fields=fields)
signature = self.frontend_node_class(
template=template,
description=signature.get('description', ''),
base_classes=signature['base_classes'],
name=name,
)
# #Determine if it containsinputKeys
if signature.name not in skip_llm:
if name in self.type_to_loader_dict:
class_tmp = self.type_to_loader_dict[name]
else:
for _, cls_ in self.type_to_loader_dict.items():
if hasattr(cls_, 'function_name') and cls_.function_name() == name:
class_tmp = cls_
elif cls_.__name__ == name:
class_tmp = cls_
if class_tmp and hasattr(class_tmp, 'input_keys'):
signature.template.add_field(
TemplateField(
field_type='input',
required=False,
show=True,
name='input_node',
display_name='Preset Question',
)
)
signature.add_extra_fields()
signature.add_extra_base_classes()
signature.set_documentation(self.docs_map.get(name, ''))
return signature
class CustomChain(Chain, ABC):
"""Custom chain"""
@staticmethod
def function_name():
return 'CustomChain'
@classmethod
def initialize(cls, *args, **kwargs):
pass
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def run(self, *args, **kwargs):
return super().run(*args, **kwargs)
class CustomAgentExecutor(AgentExecutor, ABC):
"""Custom chain"""
@staticmethod
def function_name():
return 'CustomChain'
@classmethod
def initialize(cls, *args, **kwargs):
pass
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def run(self, *args, **kwargs):
return super().run(*args, **kwargs)
================================================
FILE: src/backend/bisheng/interface/chains/__init__.py
================================================
from bisheng.interface.chains.base import ChainCreator
__all__ = ['ChainCreator']
================================================
FILE: src/backend/bisheng/interface/chains/base.py
================================================
from typing import Any, ClassVar, Dict, List, Optional, Type
from bisheng.custom.customs import get_custom_nodes
from bisheng.interface.base import LangChainTypeCreator
from bisheng.interface.importing.utils import import_class
from bisheng.common.services.config_service import settings
from bisheng.template.frontend_node.chains import ChainFrontendNode
from loguru import logger
from bisheng.utils.util import build_template_from_class, build_template_from_method
from bisheng_langchain import chains as bisheng_chains
from bisheng_langchain import sql as bisheng_sql
from bisheng_langchain.rag.bisheng_rag_chain import BishengRetrievalQA
from langchain import chains
from langchain_experimental import sql
# Assuming necessary imports for Field, Template, and FrontendNode classes
class ChainCreator(LangChainTypeCreator):
type_name: str = 'chains'
@property
def frontend_node_class(self) -> Type[ChainFrontendNode]:
return ChainFrontendNode
# We need to find a better solution for this
from_method_nodes: ClassVar[Dict] = {
'APIChain': 'from_llm_and_api_docs',
'ConversationalRetrievalChain': 'from_llm',
'LLMCheckerChain': 'from_llm',
'SQLDatabaseChain': 'from_llm',
'LLMRouterChain': 'from_llm',
'BishengRetrievalQA': 'from_llm',
'QAGenerationChain': 'from_llm',
'QAGenerationChainV2': 'from_llm',
}
@property
def type_to_loader_dict(self) -> Dict:
if self.type_dict is None:
# langchain
self.type_dict: dict[str, Any] = {
chain_name: import_class(f'langchain.chains.{chain_name}')
for chain_name in chains.__all__
}
# bisheng-langchain
bisheng = {
chain_name: import_class(f'bisheng_langchain.chains.{chain_name}')
for chain_name in bisheng_chains.__all__
}
# If configured incustom_chains, it will not start frommethodHow to initialize, resulting in an error
self.type_dict['BishengRetrievalQA'] = BishengRetrievalQA
self.type_dict.update(bisheng)
# sql community
community = {
chain_name: import_class(f'langchain_experimental.sql.{chain_name}')
for chain_name in sql.__all__
}
self.type_dict.update(community)
# sql community
bisheng_sql_add = {
chain_name: import_class(f'bisheng_langchain.sql.{chain_name}')
for chain_name in bisheng_sql.__all__
}
self.type_dict.update(bisheng_sql_add)
from bisheng.interface.chains.custom import CUSTOM_CHAINS
self.type_dict.update(CUSTOM_CHAINS)
# Filter according to settings.chains
self.type_dict = {
name: chain
for name, chain in self.type_dict.items()
if name in settings.chains or settings.dev
}
return self.type_dict
def get_signature(self, name: str) -> Optional[Dict]:
try:
if name in get_custom_nodes(self.type_name).keys():
return get_custom_nodes(self.type_name)[name]
elif name in self.from_method_nodes.keys():
return build_template_from_method(
name,
type_to_cls_dict=self.type_to_loader_dict,
method_name=self.from_method_nodes[name],
add_function=True,
)
return build_template_from_class(name, self.type_to_loader_dict, add_function=True)
except ValueError as exc:
raise ValueError(f'Chain {name} not found: {exc}') from exc
except AttributeError as exc:
logger.error(f'Chain {name} not loaded: {exc}')
return None
def to_list(self) -> List[str]:
names = []
for _, chain in self.type_to_loader_dict.items():
chain_name = (chain.function_name()
if hasattr(chain, 'function_name') else chain.__name__)
names.append(chain_name)
return names
chain_creator = ChainCreator()
================================================
FILE: src/backend/bisheng/interface/chains/custom.py
================================================
from typing import Any, Dict, List, Optional, Type, Union
from bisheng.interface.base import CustomChain
from bisheng.interface.utils import extract_input_variables_from_prompt
from bisheng_langchain.chains.question_answering import load_qa_chain
from langchain.base_language import BaseLanguageModel
from langchain.callbacks.manager import CallbackManagerForChainRun
from langchain.chains import ConversationChain, LLMChain
from langchain.chains.summarize import load_summarize_chain
from langchain.memory import ConversationBufferMemory
from langchain.prompts import PromptTemplate
from langchain.schema import BaseMemory
from langchain.schema.prompt_template import BasePromptTemplate
from langchain_community.utilities.dalle_image_generator import DallEAPIWrapper
from pydantic import Field, model_validator
DEFAULT_SUFFIX = """"
Current conversation:
{history}
Human: {input}
{ai_prefix}"""
class BaseCustomConversationChain(ConversationChain):
"""BaseCustomChain is a chain you can use to have a conversation with a custom character."""
template: Optional[str]
ai_prefix_value: Optional[str]
"""Field to use as the ai_prefix. It needs to be set and has to be in the template"""
@model_validator(mode='before')
@classmethod
def build_template(cls, values):
format_dict = {}
input_variables = extract_input_variables_from_prompt(values['template'])
if values.get('ai_prefix_value', None) is None:
values['ai_prefix_value'] = values['memory'].ai_prefix
for key in input_variables:
new_value = values.get(key, f'{{{key}}}')
format_dict[key] = new_value
if key == values.get('ai_prefix_value', None):
values['memory'].ai_prefix = new_value
values['template'] = values['template'].format(**format_dict)
values['template'] = values['template']
values['input_variables'] = extract_input_variables_from_prompt(values['template'])
values['prompt'].template = values['template']
values['prompt'].input_variables = values['input_variables']
return values
class SeriesCharacterChain(BaseCustomConversationChain):
"""SeriesCharacterChain is a chain you can use to have a conversation with a character from a series."""
character: str
series: str
template: Optional[str] = """I want you to act like {character} from {series}.
I want you to respond and answer like {character}. do not write any explanations. only answer like {character}.
You must know all of the knowledge of {character}.
Current conversation:
{history}
Human: {input}
{character}:"""
memory: BaseMemory = Field(default_factory=ConversationBufferMemory)
ai_prefix_value: Optional[str] = 'character'
"""Default memory store."""
class MidJourneyPromptChain(BaseCustomConversationChain):
"""MidJourneyPromptChain is a chain you can use to generate new MidJourney prompts."""
template: Optional[
str
] = """I want you to act as a prompt generator for Midjourney's artificial intelligence program.
Your job is to provide detailed and creative descriptions that will inspire unique and interesting images from the AI.
Keep in mind that the AI is capable of understanding a wide range of language and can interpret abstract concepts, so feel free to be as imaginative and descriptive as possible.
For example, you could describe a scene from a futuristic city, or a surreal landscape filled with strange creatures.
The more detailed and imaginative your description, the more interesting the resulting image will be. Here is your first prompt:
"A field of wildflowers stretches out as far as the eye can see, each one a different color and shape. In the distance, a massive tree towers over the landscape, its branches reaching up to the sky like tentacles.\"
Current conversation:
{history}
Human: {input}
AI:""" # noqa: E501
class TimeTravelGuideChain(BaseCustomConversationChain):
template: Optional[
str
] = """I want you to act as my time travel guide. You are helpful and creative. I will provide you with the historical period or future time I want to visit and you will suggest the best events, sights, or people to experience. Provide the suggestions and any necessary information.
Current conversation:
{history}
Human: {input}
AI:""" # noqa: E501
class CombineDocsChain(CustomChain):
"""Implementation of load_qa_chain function"""
@staticmethod
def function_name():
return 'load_qa_chain'
@classmethod
def initialize(cls,
llm: BaseLanguageModel,
chain_type: str,
prompt: BasePromptTemplate = None,
document_prompt: BasePromptTemplate = None,
token_max: str = -1):
if chain_type == 'stuff':
if document_prompt:
return load_qa_chain(llm=llm,
chain_type=chain_type,
prompt=prompt,
token_max=token_max,
document_prompt=document_prompt)
else:
return load_qa_chain(llm=llm,
chain_type=chain_type,
prompt=prompt,
token_max=token_max)
else:
return load_qa_chain(llm=llm, chain_type=chain_type)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def run(self, *args, **kwargs):
return super().run(*args, **kwargs)
class SummarizeDocsChain(CustomChain):
"""Implementation of load_sumarize_chain function"""
@staticmethod
def function_name():
return 'load_summarize_chain'
@classmethod
def initialize(cls,
llm: BaseLanguageModel,
chain_type: str,
prompt: str = None,
token_max: str = -1):
if chain_type == 'stuff':
return load_summarize_chain(llm=llm,
chain_type=chain_type,
prompt=prompt,
token_max=token_max)
else:
return load_summarize_chain(llm=llm, chain_type=chain_type)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def run(self, *args, **kwargs):
return super().run(*args, **kwargs)
prompt_default = PromptTemplate(
input_variables=['image_desc'],
template="""Generate a detailed prompt to generate an image based on the following description:
{image_desc}""")
class DalleGeneratorChain(CustomChain):
"""Implementation of dall-e generate images"""
dalle: DallEAPIWrapper
llm: Optional[BaseLanguageModel]
prompt: Optional[PromptTemplate]
input_key: str = 'image_desc'
output_key: str = 'response' #: :meta private:
@property
def input_keys(self) -> List[str]:
"""Use this since so some prompt vars come from history."""
return [self.input_key]
@property
def output_keys(self) -> List[str]:
return [self.output_key]
@staticmethod
def function_name():
return 'DalleGeneratorChain'
@classmethod
def initialize(cls, dalle: DallEAPIWrapper, **kwargs):
return DalleGeneratorChain(dalle=dalle, **kwargs)
def run(self, *args, **kwargs):
return super().run(*args, **kwargs)
def _call(self,
inputs: Dict[str, Any],
run_manager: Optional[CallbackManagerForChainRun] = None) -> Dict[str, Any]:
if self.llm:
prompt = self.prompt or prompt_default
llm_chain = LLMChain(llm=self.llm, prompt=prompt)
pic_url = self.dalle.run(llm_chain.run(inputs)).split('\n')
else:
pic_url = self.dalle.run(inputs.get(self.input_key)).split('\n')
if len(pic_url) > 0:
pic_style = []
for url in pic_url:
pic_style.append(f'')
pic_url = ' \n'.join(pic_style)
return {self.output_key: pic_url, 'type': 'image'}
else:
return {self.output_key: f'', 'type': 'image'}
CUSTOM_CHAINS: Dict[str, Type[Union[ConversationChain, CustomChain]]] = {
'CombineDocsChain': CombineDocsChain,
'SummarizeDocsChain': SummarizeDocsChain,
'SeriesCharacterChain': SeriesCharacterChain,
'MidJourneyPromptChain': MidJourneyPromptChain,
'TimeTravelGuideChain': TimeTravelGuideChain,
'DalleGeneratorChain': DalleGeneratorChain,
}
================================================
FILE: src/backend/bisheng/interface/custom/__init__.py
================================================
from bisheng.interface.custom.base import CustomComponentCreator
from bisheng.interface.custom.custom_component import CustomComponent
__all__ = ['CustomComponentCreator', 'CustomComponent']
================================================
FILE: src/backend/bisheng/interface/custom/base.py
================================================
from typing import Any, Dict, List, Optional, Type
from bisheng.interface.base import LangChainTypeCreator
# from langflow.interface.custom.custom import CustomComponent
from bisheng.interface.custom.custom_component import CustomComponent
from bisheng.template.frontend_node.custom_components import CustomComponentFrontendNode
from loguru import logger
# Assuming necessary imports for Field, Template, and FrontendNode classes
class CustomComponentCreator(LangChainTypeCreator):
type_name: str = 'custom_components'
@property
def frontend_node_class(self) -> Type[CustomComponentFrontendNode]:
return CustomComponentFrontendNode
@property
def type_to_loader_dict(self) -> Dict:
if self.type_dict is None:
self.type_dict: dict[str, Any] = {
'CustomComponent': CustomComponent,
}
return self.type_dict
def get_signature(self, name: str) -> Optional[Dict]:
from bisheng.custom.customs import get_custom_nodes
try:
if name in get_custom_nodes(self.type_name).keys():
return get_custom_nodes(self.type_name)[name]
except ValueError as exc:
raise ValueError(f'CustomComponent {name} not found: {exc}') from exc
except AttributeError as exc:
logger.error(f'CustomComponent {name} not loaded: {exc}')
return None
return None
def to_list(self) -> List[str]:
return list(self.type_to_loader_dict.keys())
custom_component_creator = CustomComponentCreator()
================================================
FILE: src/backend/bisheng/interface/custom/code_parser/__init__.py
================================================
from .code_parser import CodeParser
__all__ = ['CodeParser']
================================================
FILE: src/backend/bisheng/interface/custom/code_parser/code_parser.py
================================================
import ast
import inspect
import operator
import traceback
from typing import Any, Dict, List, Type, Union
from bisheng.interface.custom.schema import CallableCodeDetails, ClassCodeDetails
from cachetools import TTLCache, cachedmethod, keys
from fastapi import HTTPException
class CodeSyntaxError(HTTPException):
pass
def get_data_type():
from bisheng.field_typing import Data
return Data
def imports_key(*args, **kwargs):
imports = kwargs.pop('imports')
key = keys.methodkey(*args, **kwargs)
key += tuple(imports)
return key
class CodeParser:
"""
A parser for Python source code, extracting code details.
"""
def __init__(self, code: Union[str, Type]) -> None:
"""
Initializes the parser with the provided code.
"""
self.cache: TTLCache = TTLCache(maxsize=1024, ttl=60)
if isinstance(code, type):
if not inspect.isclass(code):
raise ValueError('The provided code must be a class.')
# If the code is a class, get its source code
code = inspect.getsource(code)
self.code = code
self.data: Dict[str, Any] = {
'imports': [],
'functions': [],
'classes': [],
'global_vars': [],
}
self.handlers = {
ast.Import: self.parse_imports,
ast.ImportFrom: self.parse_imports,
ast.FunctionDef: self.parse_functions,
ast.ClassDef: self.parse_classes,
ast.Assign: self.parse_global_vars,
}
def get_tree(self):
"""
Parses the provided code to validate its syntax.
It tries to parse the code into an abstract syntax tree (AST).
"""
try:
tree = ast.parse(self.code)
except SyntaxError as err:
raise CodeSyntaxError(
status_code=400,
detail={'error': err.msg, 'traceback': traceback.format_exc()},
) from err
return tree
def parse_node(self, node: Union[ast.stmt, ast.AST]) -> None:
"""
Parses an AST node and updates the data
dictionary with the relevant information.
"""
if handler := self.handlers.get(type(node)): # type: ignore
handler(node) # type: ignore
def parse_imports(self, node: Union[ast.Import, ast.ImportFrom]) -> None:
"""
Extracts "imports" from the code, including aliases.
"""
if isinstance(node, ast.Import):
for alias in node.names:
if alias.asname:
self.data['imports'].append(f'{alias.name} as {alias.asname}')
else:
self.data['imports'].append(alias.name)
elif isinstance(node, ast.ImportFrom):
for alias in node.names:
if alias.asname:
self.data['imports'].append((node.module, f'{alias.name} as {alias.asname}'))
else:
self.data['imports'].append((node.module, alias.name))
def parse_functions(self, node: ast.FunctionDef) -> None:
"""
Extracts "functions" from the code.
"""
self.data['functions'].append(self.parse_callable_details(node))
def parse_arg(self, arg, default):
"""
Parses an argument and its default value.
"""
arg_dict = {'name': arg.arg, 'default': default}
if arg.annotation:
arg_dict['type'] = ast.unparse(arg.annotation)
return arg_dict
@cachedmethod(operator.attrgetter('cache'))
def construct_eval_env(self, return_type_str: str, imports) -> dict:
"""
Constructs an evaluation environment with the necessary imports for the return type,
taking into account module aliases.
"""
eval_env: dict = {}
for import_entry in imports:
if isinstance(import_entry, tuple): # from module import name
module, name = import_entry
if name in return_type_str:
exec(f'import {module}', eval_env)
exec(f'from {module} import {name}', eval_env)
else: # import module
module = import_entry
alias = None
if ' as ' in module:
module, alias = module.split(' as ')
if module in return_type_str or (alias and alias in return_type_str):
exec(f'import {module} as {alias if alias else module}', eval_env)
return eval_env
@cachedmethod(cache=operator.attrgetter('cache'))
def parse_callable_details(self, node: ast.FunctionDef) -> Dict[str, Any]:
"""
Extracts details from a single function or method node.
"""
return_type = None
if node.returns:
return_type_str = ast.unparse(node.returns)
eval_env = self.construct_eval_env(return_type_str, tuple(self.data['imports']))
try:
return_type = eval(return_type_str, eval_env)
except NameError:
# Handle cases where the type is not found in the constructed environment
pass
func = CallableCodeDetails(
name=node.name,
doc=ast.get_docstring(node),
args=self.parse_function_args(node),
body=self.parse_function_body(node),
return_type=return_type or get_data_type(),
has_return=self.parse_return_statement(node),
)
return func.model_dump()
def parse_function_args(self, node: ast.FunctionDef) -> List[Dict[str, Any]]:
"""
Parses the arguments of a function or method node.
"""
args = []
args += self.parse_positional_args(node)
args += self.parse_varargs(node)
args += self.parse_keyword_args(node)
# Commented out because we don't want kwargs
# showing up as fields in the frontend
# args += self.parse_kwargs(node)
return args
def parse_positional_args(self, node: ast.FunctionDef) -> List[Dict[str, Any]]:
"""
Parses the positional arguments of a function or method node.
"""
num_args = len(node.args.args)
num_defaults = len(node.args.defaults)
num_missing_defaults = num_args - num_defaults
missing_defaults = [None] * num_missing_defaults
default_values = [ast.unparse(default).strip("'") if default else None for default in node.args.defaults]
# Now check all default values to see if there
# are any "None" values in the middle
default_values = [None if value == 'None' else value for value in default_values]
defaults = missing_defaults + default_values
args = [self.parse_arg(arg, default) for arg, default in zip(node.args.args, defaults)]
return args
def parse_varargs(self, node: ast.FunctionDef) -> List[Dict[str, Any]]:
"""
Parses the *args argument of a function or method node.
"""
args = []
if node.args.vararg:
args.append(self.parse_arg(node.args.vararg, None))
return args
def parse_keyword_args(self, node: ast.FunctionDef) -> List[Dict[str, Any]]:
"""
Parses the keyword-only arguments of a function or method node.
"""
kw_defaults = [None] * (len(node.args.kwonlyargs) - len(node.args.kw_defaults)) + [
ast.unparse(default) if default else None for default in node.args.kw_defaults
]
args = [self.parse_arg(arg, default) for arg, default in zip(node.args.kwonlyargs, kw_defaults)]
return args
def parse_kwargs(self, node: ast.FunctionDef) -> List[Dict[str, Any]]:
"""
Parses the **kwargs argument of a function or method node.
"""
args = []
if node.args.kwarg:
args.append(self.parse_arg(node.args.kwarg, None))
return args
def parse_function_body(self, node: ast.FunctionDef) -> List[str]:
"""
Parses the body of a function or method node.
"""
return [ast.unparse(line) for line in node.body]
def parse_return_statement(self, node: ast.FunctionDef) -> bool:
"""
Parses the return statement of a function or method node.
"""
return any(isinstance(n, ast.Return) for n in node.body)
def parse_assign(self, stmt):
"""
Parses an Assign statement and returns a dictionary
with the target's name and value.
"""
for target in stmt.targets:
if isinstance(target, ast.Name):
return {'name': target.id, 'value': ast.unparse(stmt.value)}
def parse_ann_assign(self, stmt):
"""
Parses an AnnAssign statement and returns a dictionary
with the target's name, value, and annotation.
"""
if isinstance(stmt.target, ast.Name):
return {
'name': stmt.target.id,
'value': ast.unparse(stmt.value) if stmt.value else None,
'annotation': ast.unparse(stmt.annotation),
}
def parse_function_def(self, stmt):
"""
Parses a FunctionDef statement and returns the parsed
method and a boolean indicating if it's an __init__ method.
"""
method = self.parse_callable_details(stmt)
return (method, True) if stmt.name == '__init__' else (method, False)
def parse_classes(self, node: ast.ClassDef) -> None:
"""
Extracts "classes" from the code, including inheritance and init methods.
"""
class_details = ClassCodeDetails(
name=node.name,
doc=ast.get_docstring(node),
bases=[ast.unparse(base) for base in node.bases],
attributes=[],
methods=[],
init=None,
)
for stmt in node.body:
if isinstance(stmt, ast.Assign):
if attr := self.parse_assign(stmt):
class_details.attributes.append(attr)
elif isinstance(stmt, ast.AnnAssign):
if attr := self.parse_ann_assign(stmt):
class_details.attributes.append(attr)
elif isinstance(stmt, (ast.FunctionDef, ast.AsyncFunctionDef)):
method, is_init = self.parse_function_def(stmt)
if is_init:
class_details.init = method
else:
class_details.methods.append(method)
self.data['classes'].append(class_details.model_dump())
def parse_global_vars(self, node: ast.Assign) -> None:
"""
Extracts global variables from the code.
"""
global_var = {
'targets': [t.id if hasattr(t, 'id') else ast.dump(t) for t in node.targets],
'value': ast.unparse(node.value),
}
self.data['global_vars'].append(global_var)
def parse_code(self) -> Dict[str, Any]:
"""
Runs all parsing operations and returns the resulting data.
"""
tree = self.get_tree()
for node in ast.walk(tree):
self.parse_node(node)
return self.data
================================================
FILE: src/backend/bisheng/interface/custom/code_parser/utils.py
================================================
import re
from types import GenericAlias
from typing import Any
def extract_inner_type(return_type: str) -> str:
"""
Extracts the inner type from a type hint that is a list.
"""
if match := re.match(r'list\[(.*)\]', return_type, re.IGNORECASE):
return match[1]
return return_type
def extract_inner_type_from_generic_alias(return_type: GenericAlias) -> Any:
"""
Extracts the inner type from a type hint that is a list.
"""
if return_type.__origin__ == list:
return list(return_type.__args__)
return return_type
def extract_union_types(return_type: str) -> list[str]:
"""
Extracts the inner type from a type hint that is a list.
"""
# If the return type is a Union, then we need to parse it
return_type = return_type.replace('Union', '').replace('[', '').replace(']', '')
return_types = return_type.split(',')
return [item.strip() for item in return_types]
def extract_union_types_from_generic_alias(return_type: GenericAlias) -> list:
"""
Extracts the inner type from a type hint that is a Union.
"""
return list(return_type.__args__)
================================================
FILE: src/backend/bisheng/interface/custom/custom_component/__init__.py
================================================
from .custom_component import CustomComponent
__all__ = ['CustomComponent']
================================================
FILE: src/backend/bisheng/interface/custom/custom_component/component.py
================================================
import ast
import operator
import warnings
from typing import Any, ClassVar, Optional
import emoji
from bisheng.interface.custom.code_parser import CodeParser
from bisheng.utils import validate
from cachetools import TTLCache, cachedmethod
from fastapi import HTTPException
class ComponentCodeNullError(HTTPException):
pass
class ComponentFunctionEntrypointNameNullError(HTTPException):
pass
class Component:
ERROR_CODE_NULL: ClassVar[str] = 'Python code must be provided.'
ERROR_FUNCTION_ENTRYPOINT_NAME_NULL: ClassVar[str] = 'The name of the entrypoint function must be provided.'
code: Optional[str] = None
_function_entrypoint_name: str = 'build'
field_config: dict = {}
_user_id: Optional[str]
def __init__(self, **data):
self.cache = TTLCache(maxsize=1024, ttl=60)
for key, value in data.items():
if key == 'user_id':
setattr(self, '_user_id', value)
else:
setattr(self, key, value)
# Validate the emoji at the icon field
if hasattr(self, 'icon') and self.icon:
self.icon = self.validate_icon(self.icon)
def __setattr__(self, key, value):
if key == '_user_id' and hasattr(self, '_user_id'):
warnings.warn('user_id is immutable and cannot be changed.')
super().__setattr__(key, value)
@cachedmethod(cache=operator.attrgetter('cache'))
def get_code_tree(self, code: str):
parser = CodeParser(code)
return parser.parse_code()
def get_function(self):
if not self.code:
raise ComponentCodeNullError(
status_code=400,
detail={'error': self.ERROR_CODE_NULL, 'traceback': ''},
)
if not self._function_entrypoint_name:
raise ComponentFunctionEntrypointNameNullError(
status_code=400,
detail={
'error': self.ERROR_FUNCTION_ENTRYPOINT_NAME_NULL,
'traceback': '',
},
)
return validate.create_function(self.code, self._function_entrypoint_name)
def build_template_config(self, attributes) -> dict:
template_config = {}
for item in attributes:
item_name = item.get('name')
if item_value := item.get('value'):
if 'display_name' in item_name:
template_config['display_name'] = ast.literal_eval(item_value)
elif 'description' in item_name:
template_config['description'] = ast.literal_eval(item_value)
elif 'beta' in item_name:
template_config['beta'] = ast.literal_eval(item_value)
elif 'documentation' in item_name:
template_config['documentation'] = ast.literal_eval(item_value)
elif 'icon' in item_name:
icon_str = ast.literal_eval(item_value)
template_config['icon'] = self.validate_icon(icon_str)
return template_config
def validate_icon(self, value: str):
# we are going to use the emoji library to validate the emoji
# emojis can be defined using the :emoji_name: syntax
if not value.startswith(':') or not value.endswith(':'):
warnings.warn('Invalid emoji. Please use the :emoji_name: syntax.')
return value
emoji_value = emoji.emojize(value, variant='emoji_type')
if value == emoji_value:
warnings.warn(f'Invalid emoji. {value} is not a valid emoji.')
return value
return emoji_value
def build(self, *args: Any, **kwargs: Any) -> Any:
raise NotImplementedError
================================================
FILE: src/backend/bisheng/interface/custom/custom_component/custom_component.py
================================================
import operator
from typing import Any, Callable, ClassVar, List, Optional, Union
from uuid import UUID
import yaml
from bisheng.database.models.flow import Flow, FlowDao
from bisheng.interface.custom.code_parser.utils import (extract_inner_type_from_generic_alias,
extract_union_types_from_generic_alias)
from bisheng.interface.custom.custom_component.component import Component
from bisheng.utils import validate
from cachetools import TTLCache, cachedmethod
from fastapi import HTTPException
class CustomComponent(Component):
display_name: Optional[str] = None
"""The display name of the component. Defaults to None."""
description: Optional[str] = None
"""The description of the component. Defaults to None."""
icon: Optional[str] = None
"""The icon of the component. It should be an emoji. Defaults to None."""
code: Optional[str] = None
"""The code of the component. Defaults to None."""
field_config: dict = {}
"""The field configuration of the component. Defaults to an empty dictionary."""
field_order: Optional[List[str]] = None
"""The field order of the component. Defaults to an empty list."""
code_class_base_inheritance: ClassVar[str] = 'CustomComponent'
function_entrypoint_name: ClassVar[str] = 'build'
function: Optional[Callable] = None
repr_value: Optional[Any] = ''
user_id: Optional[Union[UUID, str]] = None
status: Optional[Any] = None
"""The status of the component. This is displayed on the frontend. Defaults to None."""
_tree: Optional[dict] = None
def __init__(self, **data):
self.cache = TTLCache(maxsize=1024, ttl=60)
super().__init__(**data)
def _get_field_order(self):
return self.field_order or list(self.field_config.keys())
def custom_repr(self):
if self.repr_value == '':
self.repr_value = self.status
if isinstance(self.repr_value, dict):
return yaml.dump(self.repr_value)
if isinstance(self.repr_value, str):
return self.repr_value
return str(self.repr_value)
def build_config(self):
return self.field_config
@property
def tree(self):
return self.get_code_tree(self.code or '')
@property
def get_function_entrypoint_args(self) -> list:
build_method = self.get_build_method()
if not build_method:
return []
args = build_method['args']
for arg in args:
if arg.get('type') == 'prompt':
raise HTTPException(
status_code=400,
detail={
'error': 'Type hint Error',
'traceback': (
'Prompt type is not supported in the build method.' ' Try using PromptTemplate instead.'
),
},
)
elif not arg.get('type') and arg.get('name') != 'self':
# Set the type to Data
arg['type'] = 'Data'
return args
@cachedmethod(operator.attrgetter('cache'))
def get_build_method(self):
if not self.code:
return {}
component_classes = [cls for cls in self.tree['classes'] if self.code_class_base_inheritance in cls['bases']]
if not component_classes:
return {}
# Assume the first Component class is the one we're interested in
component_class = component_classes[0]
build_methods = [
method for method in component_class['methods'] if method['name'] == self.function_entrypoint_name
]
return build_methods[0] if build_methods else {}
@property
def get_function_entrypoint_return_type(self) -> List[Any]:
build_method = self.get_build_method()
if not build_method or not build_method.get('has_return'):
return []
return_type = build_method['return_type']
# If list or List is in the return type, then we remove it and return the inner type
if hasattr(return_type, '__origin__') and return_type.__origin__ in [list, List]:
return_type = extract_inner_type_from_generic_alias(return_type)
# If the return type is not a Union, then we just return it as a list
if not hasattr(return_type, '__origin__') or return_type.__origin__ != Union:
return return_type if isinstance(return_type, list) else [return_type]
# If the return type is a Union, then we need to parse itx
return_type = extract_union_types_from_generic_alias(return_type)
return return_type
@property
def get_main_class_name(self):
if not self.code:
return ''
base_name = self.code_class_base_inheritance
method_name = self.function_entrypoint_name
classes = []
for item in self.tree.get('classes', []):
if base_name in item['bases']:
method_names = [method['name'] for method in item['methods']]
if method_name in method_names:
classes.append(item['name'])
# Get just the first item
return next(iter(classes), '')
@property
def template_config(self):
return self.build_template_config()
def build_template_config(self):
if not self.code:
return {}
attributes = [
main_class['attributes']
for main_class in self.tree.get('classes', [])
if main_class['name'] == self.get_main_class_name
]
# Get just the first item
attributes = next(iter(attributes), [])
return super().build_template_config(attributes)
def index(self, value: int = 0):
"""Returns a function that returns the value at the given index in the iterable."""
def get_index(iterable: List[Any]):
return iterable[value] if iterable else iterable
return get_index
@property
def get_function(self):
return validate.create_function(self.code, self.function_entrypoint_name)
async def load_flow(self, flow_id: str, tweaks: Optional[dict] = None) -> Any:
from bisheng.processing.process import build_sorted_vertices, process_tweaks
flow = FlowDao.get_flow_by_id(flow_id)
graph_data = flow.data if flow else None
if not graph_data:
raise ValueError(f'Flow {flow_id} not found')
if tweaks:
graph_data = process_tweaks(graph_data=graph_data, tweaks=tweaks)
return await build_sorted_vertices(graph_data, self.user_id)
def list_flows(self) -> List[Flow]:
if not self._user_id:
raise ValueError('Session is invalid')
try:
return FlowDao.get_flow_by_user(int(self._user_id))
except Exception as e:
raise ValueError('Session is invalid') from e
async def get_flow(
self,
*,
flow_name: Optional[str] = None,
flow_id: Optional[str] = None,
tweaks: Optional[dict] = None,
) -> Flow:
if flow_id:
flow = FlowDao.get_flow_by_id(flow_id)
elif flow_name:
flow = FlowDao.get_flow_by_name(int(self._user_id), flow_name)
else:
raise ValueError('Either flow_name or flow_id must be provided')
if not flow:
raise ValueError(f'Flow {flow_name or flow_id} not found')
return await self.load_flow(flow.id, tweaks)
def build(self, *args: Any, **kwargs: Any) -> Any:
raise NotImplementedError
================================================
FILE: src/backend/bisheng/interface/custom/directory_reader/__init__.py
================================================
from .directory_reader import DirectoryReader
__all__ = ['DirectoryReader']
================================================
FILE: src/backend/bisheng/interface/custom/directory_reader/directory_reader.py
================================================
import ast
import os
import zlib
from bisheng.interface.custom.custom_component import CustomComponent
from loguru import logger
class CustomComponentPathValueError(ValueError):
pass
class StringCompressor:
def __init__(self, input_string):
"""Initialize StringCompressor with a string to compress."""
self.input_string = input_string
def compress_string(self):
"""
Compress the initial string and return the compressed data.
"""
# Convert string to bytes
byte_data = self.input_string.encode('utf-8')
# Compress the bytes
self.compressed_data = zlib.compress(byte_data)
return self.compressed_data
def decompress_string(self):
"""
Decompress the compressed data and return the original string.
"""
# Decompress the bytes
decompressed_data = zlib.decompress(self.compressed_data)
# Convert bytes back to string
return decompressed_data.decode('utf-8')
class DirectoryReader:
# Ensure the base path to read the files that contain
# the custom components from this directory.
base_path = ''
def __init__(self, directory_path, compress_code_field=False):
"""
Initialize DirectoryReader with a directory path
and a flag indicating whether to compress the code.
"""
self.directory_path = directory_path
self.compress_code_field = compress_code_field
def get_safe_path(self):
"""Check if the path is valid and return it, or None if it's not."""
return self.directory_path if self.is_valid_path() else None
def is_valid_path(self) -> bool:
"""Check if the directory path is valid by comparing it to the base path."""
fullpath = os.path.normpath(os.path.join(self.directory_path))
return fullpath.startswith(self.base_path)
def is_empty_file(self, file_content):
"""
Check if the file content is empty.
"""
return len(file_content.strip()) == 0
def filter_loaded_components(self, data: dict, with_errors: bool) -> dict:
from bisheng.interface.custom.utils import build_component
items = []
for menu in data['menu']:
components = []
for component in menu['components']:
try:
if component['error'] if with_errors else not component['error']:
component_tuple = (*build_component(component), component)
components.append(component_tuple)
except Exception as e:
logger.error(f'Error while loading component: {e}')
continue
items.append({'name': menu['name'], 'path': menu['path'], 'components': components})
filtered = [menu for menu in items if menu['components']]
logger.debug(f'Filtered components {"with errors" if with_errors else ""}: {len(filtered)}')
return {'menu': filtered}
def validate_code(self, file_content):
"""
Validate the Python code by trying to parse it with ast.parse.
"""
try:
ast.parse(file_content)
return True
except SyntaxError:
return False
def validate_build(self, file_content):
"""
Check if the file content contains a function named 'build'.
"""
return 'def build' in file_content
def read_file_content(self, file_path):
"""
Read and return the content of a file.
"""
if not os.path.isfile(file_path):
return None
with open(file_path, 'r') as file:
return file.read()
def get_files(self):
"""
Walk through the directory path and return a list of all .py files.
"""
if not (safe_path := self.get_safe_path()):
raise CustomComponentPathValueError(f"The path needs to start with '{self.base_path}'.")
file_list = []
for root, _, files in os.walk(safe_path):
file_list.extend(
os.path.join(root, filename)
for filename in files
if filename.endswith('.py') and not filename.startswith('__')
)
return file_list
def find_menu(self, response, menu_name):
"""
Find and return a menu by its name in the response.
"""
return next(
(menu for menu in response['menu'] if menu['name'] == menu_name),
None,
)
def _is_type_hint_imported(self, type_hint_name: str, code: str) -> bool:
"""
Check if a specific type hint is imported
from the typing module in the given code.
"""
module = ast.parse(code)
return any(
isinstance(node, ast.ImportFrom)
and node.module == 'typing'
and any(alias.name == type_hint_name for alias in node.names)
for node in ast.walk(module)
)
def _is_type_hint_used_in_args(self, type_hint_name: str, code: str) -> bool:
"""
Check if a specific type hint is used in the
function definitions within the given code.
"""
try:
module = ast.parse(code)
for node in ast.walk(module):
if isinstance(node, ast.FunctionDef):
for arg in node.args.args:
if self._is_type_hint_in_arg_annotation(arg.annotation, type_hint_name):
return True
except SyntaxError:
# Returns False if the code is not valid Python
return False
return False
def _is_type_hint_in_arg_annotation(self, annotation, type_hint_name: str) -> bool:
"""
Helper function to check if a type hint exists in an annotation.
"""
return (
annotation is not None
and isinstance(annotation, ast.Subscript)
and isinstance(annotation.value, ast.Name)
and annotation.value.id == type_hint_name
)
def is_type_hint_used_but_not_imported(self, type_hint_name: str, code: str) -> bool:
"""
Check if a type hint is used but not imported in the given code.
"""
try:
return self._is_type_hint_used_in_args(type_hint_name, code) and not self._is_type_hint_imported(
type_hint_name, code
)
except SyntaxError:
# Returns True if there's something wrong with the code
# TODO : Find a better way to handle this
return True
def process_file(self, file_path):
"""
Process a file by validating its content and
returning the result and content/error message.
"""
file_content = self.read_file_content(file_path)
if file_content is None:
return False, f'Could not read {file_path}'
elif self.is_empty_file(file_content):
return False, 'Empty file'
elif not self.validate_code(file_content):
return False, 'Syntax error'
elif not self.validate_build(file_content):
return False, 'Missing build function'
elif self._is_type_hint_used_in_args('Optional', file_content) and not self._is_type_hint_imported(
'Optional', file_content
):
return (
False,
"Type hint 'Optional' is used but not imported in the code.",
)
else:
if self.compress_code_field:
file_content = str(StringCompressor(file_content).compress_string())
return True, file_content
def build_component_menu_list(self, file_paths):
"""
Build a list of menus with their components
from the .py files in the directory.
"""
response = {'menu': []}
logger.debug('-------------------- Building component menu list --------------------')
for file_path in file_paths:
menu_name = os.path.basename(os.path.dirname(file_path))
logger.debug(f'Menu name: {menu_name}')
filename = os.path.basename(file_path)
validation_result, result_content = self.process_file(file_path)
logger.debug(f'Validation result: {validation_result}')
menu_result = self.find_menu(response, menu_name) or {
'name': menu_name,
'path': os.path.dirname(file_path),
'components': [],
}
component_name = filename.split('.')[0]
# This is the name of the file which will be displayed in the UI
# We need to change it from snake_case to CamelCase
# first check if it's already CamelCase
if '_' in component_name:
component_name_camelcase = ' '.join(word.title() for word in component_name.split('_'))
else:
component_name_camelcase = component_name
if validation_result:
try:
output_types = self.get_output_types_from_code(result_content)
except Exception as exc:
logger.exception(f'Error while getting output types from code: {str(exc)}')
output_types = [component_name_camelcase]
else:
output_types = [component_name_camelcase]
component_info = {
'name': 'CustomComponent',
'output_types': output_types,
'file': filename,
'code': result_content if validation_result else '',
'error': '' if validation_result else result_content,
}
menu_result['components'].append(component_info)
logger.debug(f'Component info: {component_info}')
if menu_result not in response['menu']:
response['menu'].append(menu_result)
logger.debug('-------------------- Component menu list built --------------------')
return response
@staticmethod
def get_output_types_from_code(code: str) -> list:
"""
Get the output types from the code.
"""
custom_component = CustomComponent(code=code)
types_list = custom_component.get_function_entrypoint_return_type
# Get the name of types classes
return [type_.__name__ for type_ in types_list if hasattr(type_, '__name__')]
================================================
FILE: src/backend/bisheng/interface/custom/directory_reader/utils.py
================================================
from bisheng.interface.custom.directory_reader import DirectoryReader
from bisheng.template.frontend_node.custom_components import CustomComponentFrontendNode
from loguru import logger
def merge_nested_dicts_with_renaming(dict1, dict2):
for key, value in dict2.items():
if key in dict1 and isinstance(value, dict) and isinstance(dict1.get(key), dict):
for sub_key, sub_value in value.items():
# if sub_key in dict1[key]:
# new_key = get_new_key(dict1[key], sub_key)
# dict1[key][new_key] = sub_value
# else:
dict1[key][sub_key] = sub_value
else:
dict1[key] = value
return dict1
def build_invalid_menu(invalid_components):
"""Build the invalid menu."""
if not invalid_components.get('menu'):
return {}
logger.debug('------------------- INVALID COMPONENTS -------------------')
invalid_menu = {}
for menu_item in invalid_components['menu']:
menu_name = menu_item['name']
invalid_menu[menu_name] = build_invalid_menu_items(menu_item)
return invalid_menu
def build_valid_menu(valid_components):
"""Build the valid menu."""
valid_menu = {}
logger.debug('------------------- VALID COMPONENTS -------------------')
for menu_item in valid_components['menu']:
menu_name = menu_item['name']
valid_menu[menu_name] = build_menu_items(menu_item)
return valid_menu
def build_and_validate_all_files(reader: DirectoryReader, file_list):
"""Build and validate all files"""
data = reader.build_component_menu_list(file_list)
valid_components = reader.filter_loaded_components(data=data, with_errors=False)
invalid_components = reader.filter_loaded_components(data=data, with_errors=True)
return valid_components, invalid_components
def load_files_from_path(path: str):
"""Load all files from a given path"""
reader = DirectoryReader(path, False)
return reader.get_files()
def build_custom_component_list_from_path(path: str):
"""Build a list of custom components for the langchain from a given path"""
file_list = load_files_from_path(path)
reader = DirectoryReader(path, False)
valid_components, invalid_components = build_and_validate_all_files(reader, file_list)
valid_menu = build_valid_menu(valid_components)
invalid_menu = build_invalid_menu(invalid_components)
return merge_nested_dicts_with_renaming(valid_menu, invalid_menu)
def create_invalid_component_template(component, component_name):
"""Create a template for an invalid component."""
component_code = component['code']
component_frontend_node = CustomComponentFrontendNode(
description='ERROR - Check your Python Code',
display_name=f'ERROR - {component_name}',
)
component_frontend_node.error = component.get('error', None)
field = component_frontend_node.template.get_field('code')
field.value = component_code
component_frontend_node.template.update_field('code', field)
return component_frontend_node.model_dump(by_alias=True, exclude_none=True)
def log_invalid_component_details(component):
"""Log details of an invalid component."""
logger.debug(component)
logger.debug(f"Component Path: {component.get('path', None)}")
logger.debug(f"Component Error: {component.get('error', None)}")
def build_invalid_component(component):
"""Build a single invalid component."""
component_name = component['name']
component_template = create_invalid_component_template(component, component_name)
log_invalid_component_details(component)
return component_name, component_template
def build_invalid_menu_items(menu_item):
"""Build invalid menu items for a given menu."""
menu_items = {}
for component in menu_item['components']:
try:
component_name, component_template = build_invalid_component(component)
menu_items[component_name] = component_template
logger.debug(f'Added {component_name} to invalid menu.')
except Exception as exc:
logger.exception(f'Error while creating custom component [{component_name}]: {str(exc)}')
return menu_items
def get_new_key(dictionary, original_key):
counter = 1
new_key = original_key + ' (' + str(counter) + ')'
while new_key in dictionary:
counter += 1
new_key = original_key + ' (' + str(counter) + ')'
return new_key
def determine_component_name(component):
"""Determine the name of the component."""
component_output_types = component['output_types']
if len(component_output_types) == 1:
return component_output_types[0]
else:
file_name = component.get('file').split('.')[0]
return ''.join(word.capitalize() for word in file_name.split('_')) if '_' in file_name else file_name
def build_menu_items(menu_item):
"""Build menu items for a given menu."""
menu_items = {}
for component_name, component_template, component in menu_item['components']:
try:
menu_items[component_name] = component_template
logger.debug(f'Added {component_name} to valid menu.')
except Exception as exc:
logger.error(f"Error loading Component: {component['output_types']}")
logger.exception(f"Error while building custom component {component['output_types']}: {exc}")
return menu_items
================================================
FILE: src/backend/bisheng/interface/custom/schema.py
================================================
from typing import Any, Optional
from pydantic import BaseModel, Field
class ClassCodeDetails(BaseModel):
"""
A dataclass for storing details about a class.
"""
name: str
doc: Optional[str] = None
bases: list
attributes: list
methods: list
init: Optional[dict] = Field(default_factory=dict)
class CallableCodeDetails(BaseModel):
"""
A dataclass for storing details about a callable.
"""
name: str
doc: Optional[str] = None
args: list
body: list
return_type: Optional[Any] = None
has_return: bool = False
================================================
FILE: src/backend/bisheng/interface/custom/utils.py
================================================
import ast
import contextlib
import re
import traceback
import warnings
from typing import Any, Dict, List, Optional, Union
from uuid import UUID
from bisheng.field_typing.range_spec import RangeSpec
from bisheng.interface.custom.code_parser.utils import extract_inner_type
from bisheng.interface.custom.custom_component import CustomComponent
from bisheng.interface.custom.directory_reader.utils import (build_custom_component_list_from_path,
determine_component_name,
merge_nested_dicts_with_renaming)
from bisheng.interface.importing.utils import eval_custom_component_code
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.custom_components import CustomComponentFrontendNode
from bisheng.utils.util import get_base_classes
from fastapi import HTTPException
from loguru import logger
def add_output_types(frontend_node: CustomComponentFrontendNode, return_types: List[str]):
"""Add output types to the frontend node"""
for return_type in return_types:
if return_type is None:
raise HTTPException(
status_code=400,
detail={
'error': ('Invalid return type. Please check your code and try again.'),
'traceback': traceback.format_exc(),
},
)
if hasattr(return_type, '__name__'):
return_type = return_type.__name__
elif hasattr(return_type, '__class__'):
return_type = return_type.__class__.__name__
else:
return_type = str(return_type)
frontend_node.add_output_type(return_type)
def reorder_fields(frontend_node: CustomComponentFrontendNode, field_order: List[str]):
"""Reorder fields in the frontend node based on the specified field_order."""
if not field_order:
return
# Create a dictionary for O(1) lookup time.
field_dict = {field.name: field for field in frontend_node.template.fields}
reordered_fields = [field_dict[name] for name in field_order if name in field_dict]
# Add any fields that are not in the field_order list
for field in frontend_node.template.fields:
if field.name not in field_order:
reordered_fields.append(field)
frontend_node.template.fields = reordered_fields
def add_base_classes(frontend_node: CustomComponentFrontendNode, return_types: List[str]):
"""Add base classes to the frontend node"""
for return_type_instance in return_types:
if return_type_instance is None:
raise HTTPException(
status_code=400,
detail={
'error': ('Invalid return type. Please check your code and try again.'),
'traceback': traceback.format_exc(),
},
)
base_classes = get_base_classes(return_type_instance)
for base_class in base_classes:
frontend_node.add_base_class(base_class)
def extract_type_from_optional(field_type):
"""
Extract the type from a string formatted as "Optional[]".
Parameters:
field_type (str): The string from which to extract the type.
Returns:
str: The extracted type, or an empty string if no type was found.
"""
match = re.search(r'\[(.*?)\]$', field_type)
return match[1] if match else None
def get_field_properties(extra_field):
"""Get the properties of an extra field"""
field_name = extra_field['name']
field_type = extra_field.get('type', 'str')
field_value = extra_field.get('default', '')
field_required = 'optional' not in field_type.lower()
if not field_required:
field_type = extract_type_from_optional(field_type)
if field_value is not None:
with contextlib.suppress(Exception):
field_value = ast.literal_eval(field_value)
return field_name, field_type, field_value, field_required
def process_type(field_type: str):
if field_type.startswith('list') or field_type.startswith('List'):
return extract_inner_type(field_type)
return 'prompt' if field_type == 'Prompt' else field_type
def add_new_custom_field(
frontend_node: CustomComponentFrontendNode,
field_name: str,
field_type: str,
field_value: Any,
field_required: bool,
field_config: dict,
):
# Check field_config if any of the keys are in it
# if it is, update the value
display_name = field_config.pop('display_name', None)
field_type = field_config.pop('field_type', field_type)
field_contains_list = 'list' in field_type.lower()
field_type = process_type(field_type)
field_value = field_config.pop('value', field_value)
field_advanced = field_config.pop('advanced', False)
if field_type == 'bool' and field_value is None:
field_value = False
# If options is a list, then it's a dropdown
# If options is None, then it's a list of strings
is_list = isinstance(field_config.get('options'), list)
field_config['is_list'] = is_list or field_config.get('is_list', False) or field_contains_list
if 'name' in field_config:
warnings.warn("The 'name' key in field_config is used to build the object and can't be changed.")
required = field_config.pop('required', field_required)
placeholder = field_config.pop('placeholder', '')
new_field = TemplateField(
name=field_name,
field_type=field_type,
value=field_value,
show=True,
required=required,
advanced=field_advanced,
placeholder=placeholder,
display_name=display_name,
**sanitize_field_config(field_config),
)
frontend_node.template.upsert_field(field_name, new_field)
if isinstance(frontend_node.custom_fields, dict):
frontend_node.custom_fields[field_name] = None
return frontend_node
def add_extra_fields(frontend_node, field_config, function_args):
"""Add extra fields to the frontend node"""
if not function_args:
return
for extra_field in function_args:
if 'name' not in extra_field or extra_field['name'] == 'self':
continue
field_name, field_type, field_value, field_required = get_field_properties(extra_field)
config = field_config.get(field_name, {})
frontend_node = add_new_custom_field(
frontend_node,
field_name,
field_type,
field_value,
field_required,
config,
)
def get_field_dict(field: Union[TemplateField, dict]):
"""Get the field dictionary from a TemplateField or a dict"""
if isinstance(field, TemplateField):
return field.model_dump(by_alias=True, exclude_none=True)
return field
def run_build_config(
custom_component: CustomComponent,
user_id: Optional[Union[str, UUID]] = None,
update_field=None,
):
"""Build the field configuration for a custom component"""
try:
if custom_component.code is None:
return {}
elif isinstance(custom_component.code, str):
custom_class = eval_custom_component_code(custom_component.code)
else:
raise ValueError('Invalid code type')
except Exception as exc:
logger.error(f'Error while evaluating custom component code: {str(exc)}')
raise HTTPException(
status_code=400,
detail={
'error': ('Invalid type convertion. Please check your code and try again.'),
'traceback': traceback.format_exc(),
},
) from exc
try:
custom_instance = custom_class(user_id=user_id)
build_config: Dict = custom_instance.build_config()
for field_name, field in build_config.items():
# Allow user to build TemplateField as well
# as a dict with the same keys as TemplateField
field_dict = get_field_dict(field)
if update_field is not None and field_name != update_field:
continue
try:
update_field_dict(field_dict)
build_config[field_name] = field_dict
except Exception as exc:
logger.error(f'Error while getting build_config: {str(exc)}')
return build_config, custom_instance
except Exception as exc:
logger.error(f'Error while building field config: {str(exc)}')
raise HTTPException(
status_code=400,
detail={
'error': ('Invalid type convertion. Please check your code and try again.'),
'traceback': traceback.format_exc(),
},
) from exc
def sanitize_template_config(template_config):
"""Sanitize the template config"""
attributes = {
'display_name',
'description',
'beta',
'documentation',
'output_types',
'icon',
}
for key in template_config.copy():
if key not in attributes:
template_config.pop(key, None)
return template_config
def build_frontend_node(template_config):
"""Build a frontend node for a custom component"""
try:
sanitized_template_config = sanitize_template_config(template_config)
return CustomComponentFrontendNode(**sanitized_template_config)
except Exception as exc:
logger.error(f'Error while building base frontend node: {exc}')
raise exc
def add_code_field(frontend_node: CustomComponentFrontendNode, raw_code, field_config):
code_field = TemplateField(
dynamic=True,
required=True,
placeholder='',
multiline=True,
value=raw_code,
password=False,
name='code',
advanced=field_config.pop('advanced', False),
field_type='code',
is_list=False,
)
frontend_node.template.add_field(code_field)
return frontend_node
def build_custom_component_template(
custom_component: CustomComponent,
user_id: Optional[Union[str, UUID]] = None,
update_field: Optional[str] = None,
) -> Optional[Dict[str, Any]]:
"""Build a custom component template for the langchain"""
try:
logger.debug('Building custom component template')
frontend_node = build_frontend_node(custom_component.template_config)
logger.debug('Built base frontend node')
logger.debug('Updated attributes')
field_config, custom_instance = run_build_config(custom_component, user_id=user_id, update_field=update_field)
logger.debug('Built field config')
entrypoint_args = custom_component.get_function_entrypoint_args
add_extra_fields(frontend_node, field_config, entrypoint_args)
logger.debug('Added extra fields')
frontend_node = add_code_field(frontend_node, custom_component.code, field_config.get('code', {}))
logger.debug('Added code field')
add_base_classes(frontend_node, custom_component.get_function_entrypoint_return_type)
add_output_types(frontend_node, custom_component.get_function_entrypoint_return_type)
logger.debug('Added base classes')
reorder_fields(frontend_node, custom_instance._get_field_order())
return frontend_node.to_dict(add_name=False)
except Exception as exc:
if isinstance(exc, HTTPException):
raise exc
raise HTTPException(
status_code=400,
detail={
'error': ('Invalid type convertion. Please check your code and try again.'),
'traceback': traceback.format_exc(),
},
) from exc
def create_component_template(component):
"""Create a template for a component."""
component_code = component['code']
component_output_types = component['output_types']
component_extractor = CustomComponent(code=component_code)
component_template = build_custom_component_template(component_extractor)
component_template['output_types'] = component_output_types
return component_template
def build_custom_components(components_path: List[str]):
"""Build custom components from the specified paths."""
if not components_path:
return {}
logger.info(f'Building custom components from {components_path}')
custom_components_from_file = {}
processed_paths = set()
for path in components_path:
path_str = str(path)
if path_str in processed_paths:
continue
custom_component_dict = build_custom_component_list_from_path(path_str)
if custom_component_dict:
category = next(iter(custom_component_dict))
logger.info(f'Loading {len(custom_component_dict[category])} component(s) from category {category}')
custom_components_from_file = merge_nested_dicts_with_renaming(
custom_components_from_file, custom_component_dict
)
processed_paths.add(path_str)
return custom_components_from_file
def update_field_dict(field_dict):
"""Update the field dictionary by calling options() or value() if they are callable"""
if 'options' in field_dict and callable(field_dict['options']):
field_dict['options'] = field_dict['options']()
# Also update the "refresh" key
field_dict['refresh'] = True
if 'value' in field_dict and callable(field_dict['value']):
field_dict['value'] = field_dict['value']()
field_dict['refresh'] = True
# Let's check if "range_spec" is a RangeSpec object
if 'rangeSpec' in field_dict and isinstance(field_dict['rangeSpec'], RangeSpec):
field_dict['rangeSpec'] = field_dict['rangeSpec'].model_dump()
def sanitize_field_config(field_config: Dict):
# If any of the already existing keys are in field_config, remove them
for key in [
'name',
'field_type',
'value',
'required',
'placeholder',
'display_name',
'advanced',
'show',
]:
field_config.pop(key, None)
return field_config
def build_component(component):
"""Build a single component."""
logger.debug(f"Building component: {component.get('name'), component.get('output_types')}")
component_name = determine_component_name(component)
component_template = create_component_template(component)
return component_name, component_template
================================================
FILE: src/backend/bisheng/interface/custom_lists.py
================================================
import inspect
from typing import Any
from langchain import llms, memory, text_splitter
from langchain_anthropic import ChatAnthropic
from langchain_community import agent_toolkits, document_loaders, embeddings
from langchain_community.chat_models import ChatVertexAI, MiniMaxChat, ChatTongyi, ChatZhipuAI, \
ChatHunyuan, MoonshotChat
from langchain_community.utilities import requests
from langchain_deepseek import ChatDeepSeek
from langchain_openai import AzureChatOpenAI, ChatOpenAI, OpenAIEmbeddings, AzureOpenAIEmbeddings, OpenAI
from bisheng.interface.agents.custom import CUSTOM_AGENTS
from bisheng.interface.chains.custom import CUSTOM_CHAINS
from bisheng.interface.embeddings.custom import CUSTOM_EMBEDDING
from bisheng.interface.importing.utils import import_class
from bisheng_langchain import chat_models
from bisheng_langchain import document_loaders as contribute_loader
from bisheng_langchain import embeddings as contribute_embeddings
# LLMs
llm_type_to_cls_dict = {}
for k, v in llms.get_type_to_cls_dict().items():
try:
llm_type_to_cls_dict[k] = v()
except Exception:
pass
llm_type_to_cls_dict['ChatAnthropic'] = ChatAnthropic # type: ignore
llm_type_to_cls_dict['AzureChatOpenAI'] = AzureChatOpenAI # type: ignore
llm_type_to_cls_dict['ChatOpenAI'] = ChatOpenAI # type: ignore
llm_type_to_cls_dict['ChatVertexAI'] = ChatVertexAI # type: ignore
llm_type_to_cls_dict['MiniMaxChat'] = MiniMaxChat
llm_type_to_cls_dict['ChatTongyi'] = ChatTongyi
llm_type_to_cls_dict["OpenAI"] = OpenAI
llm_type_to_cls_dict['ChatZhipuAI'] = ChatZhipuAI
llm_type_to_cls_dict['ChatDeepSeek'] = ChatDeepSeek
llm_type_to_cls_dict['ChatHunyuan'] = ChatHunyuan
llm_type_to_cls_dict['MoonshotChat'] = MoonshotChat
# llm contribute
llm_type_to_cls_dict.update({
llm_name: import_class(f'bisheng_langchain.chat_models.{llm_name}')
for llm_name in chat_models.__all__
})
# Toolkits
toolkit_type_to_loader_dict: dict[str, Any] = {
toolkit_name: import_class(f'langchain_community.agent_toolkits.{toolkit_name}')
# if toolkit_name is lower case it is a loader
for toolkit_name in agent_toolkits.__all__ if toolkit_name.islower()
}
toolkit_type_to_cls_dict: dict[str, Any] = {
toolkit_name: import_class(f'langchain_community.agent_toolkits.{toolkit_name}')
# if toolkit_name is not lower case it is a class
for toolkit_name in agent_toolkits.__all__ if not toolkit_name.islower()
}
# Memories
memory_type_to_cls_dict: dict[str, Any] = {}
for memory_name in memory.__all__:
if memory_name.find("ChatMessageHistory") != -1:
memory_type_to_cls_dict[memory_name] = import_class(f"langchain_community.chat_message_histories.{memory_name}")
elif memory_name == "ConversationKGMemory":
memory_type_to_cls_dict[memory_name] = import_class(f"langchain_community.memory.kg.{memory_name}")
elif memory_name == "MotorheadMemory":
memory_type_to_cls_dict[memory_name] = import_class(
f"langchain_community.memory.motorhead_memory.{memory_name}")
elif memory_name == "ZepMemory":
memory_type_to_cls_dict[memory_name] = import_class(f"langchain_community.memory.zep_memory.{memory_name}")
else:
memory_type_to_cls_dict[memory_name] = import_class(f'langchain.memory.{memory_name}')
# Wrappers
wrapper_type_to_cls_dict: dict[str, Any] = {
wrapper.__name__: wrapper
for wrapper in [requests.RequestsWrapper]
}
# Embeddings
embedding_type_to_cls_dict: dict[str, Any] = {
embedding_name: import_class(f'langchain_community.embeddings.{embedding_name}')
for embedding_name in embeddings.__all__
}
embedding_type_to_cls_dict.update({
embedding_name:
import_class(f'bisheng_langchain.embeddings.{embedding_name}')
for embedding_name in contribute_embeddings.__all__
})
embedding_type_to_cls_dict.update({
"OpenAIEmbeddings": OpenAIEmbeddings,
"AzureOpenAIEmbeddings": AzureOpenAIEmbeddings,
})
# Document Loaders
documentloaders_type_to_cls_dict: dict[str, Any] = {
documentloader_name:
import_class(f'langchain_community.document_loaders.{documentloader_name}')
for documentloader_name in document_loaders.__all__
}
# contribute
documentloaders_type_to_cls_dict.update({
loader:
import_class(f'bisheng_langchain.document_loaders.{loader}')
for loader in contribute_loader.__all__
})
# Text Splitters
textsplitter_type_to_cls_dict: dict[str,
Any] = dict(inspect.getmembers(text_splitter, inspect.isclass))
# merge CUSTOM_AGENTS and CUSTOM_CHAINS
CUSTOM_NODES = {
**CUSTOM_AGENTS,
**CUSTOM_CHAINS,
**CUSTOM_EMBEDDING,
} # type: ignore
================================================
FILE: src/backend/bisheng/interface/document_loaders/__init__.py
================================================
================================================
FILE: src/backend/bisheng/interface/document_loaders/base.py
================================================
from typing import Dict, List, Optional, Type
from bisheng.interface.base import LangChainTypeCreator
from bisheng.interface.custom_lists import documentloaders_type_to_cls_dict
from bisheng.common.services.config_service import settings
from bisheng.template.frontend_node.documentloaders import DocumentLoaderFrontNode
from loguru import logger
from bisheng.utils.util import build_template_from_class
class DocumentLoaderCreator(LangChainTypeCreator):
type_name: str = 'documentloaders'
@property
def frontend_node_class(self) -> Type[DocumentLoaderFrontNode]:
return DocumentLoaderFrontNode
@property
def type_to_loader_dict(self) -> Dict:
return documentloaders_type_to_cls_dict
def get_signature(self, name: str) -> Optional[Dict]:
"""Get the signature of a document loader."""
try:
return build_template_from_class(name, documentloaders_type_to_cls_dict)
except ValueError as exc:
raise ValueError(f'Documment Loader {name} not found') from exc
except AttributeError as exc:
logger.error(f'Documment Loader {name} not loaded: {exc}')
return None
def to_list(self) -> List[str]:
return [
documentloader.__name__ for documentloader in self.type_to_loader_dict.values()
if documentloader.__name__ in settings.documentloaders or settings.dev
]
documentloader_creator = DocumentLoaderCreator()
================================================
FILE: src/backend/bisheng/interface/embeddings/__init__.py
================================================
================================================
FILE: src/backend/bisheng/interface/embeddings/base.py
================================================
from typing import Dict, List, Optional, Type
from bisheng.custom.customs import get_custom_nodes
from bisheng.interface.base import LangChainTypeCreator
from bisheng.interface.custom_lists import embedding_type_to_cls_dict
from bisheng.interface.embeddings.custom import CUSTOM_EMBEDDING
from bisheng.common.services.config_service import settings
from bisheng.template.frontend_node.base import FrontendNode
from bisheng.template.frontend_node.embeddings import EmbeddingFrontendNode
from loguru import logger
from bisheng.utils.util import build_template_from_class
class EmbeddingCreator(LangChainTypeCreator):
type_name: str = 'embeddings'
@property
def type_to_loader_dict(self) -> Dict:
if self.type_dict is None:
self.type_dict = embedding_type_to_cls_dict
for name, embed in CUSTOM_EMBEDDING.items():
# TODO: validate AgentType
self.type_dict[name] = embed # type: ignore
return self.type_dict
@property
def frontend_node_class(self) -> Type[FrontendNode]:
return EmbeddingFrontendNode
def get_signature(self, name: str) -> Optional[Dict]:
"""Get the signature of an embedding."""
try:
if name in get_custom_nodes(self.type_name).keys():
return get_custom_nodes(self.type_name)[name]
else:
return build_template_from_class(name, embedding_type_to_cls_dict)
except ValueError as exc:
raise ValueError(f'Embedding {name} not found') from exc
except AttributeError as exc:
logger.error(f'Embedding {name} not loaded: {exc}')
return None
def to_list(self) -> List[str]:
names = []
for _, embed in self.type_to_loader_dict.items():
embed_name = (embed.function_name() if hasattr(embed, 'function_name') else embed.__name__)
if embed_name in settings.embeddings or settings.dev:
names.append(embed_name)
return names
embedding_creator = EmbeddingCreator()
================================================
FILE: src/backend/bisheng/interface/embeddings/custom.py
================================================
from typing import List, Optional
from langchain.embeddings.base import Embeddings
from langchain_community.embeddings.dashscope import BATCH_SIZE
from pydantic import Field
from bisheng.llm.domain.llm.embedding import BishengEmbedding
BATCH_SIZE["text-embedding-v4"] = 10 # PengaturanDashScopeThe batch size for is1
class OpenAIProxyEmbedding(Embeddings):
embeddings: Optional[Embeddings] = Field(default=None)
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
from bisheng.llm.domain.services import LLMService
self.embeddings = LLMService.get_knowledge_default_embedding(0)
def embed_documents(self, texts: List[str]) -> List[List[float]]:
"""Embed search docs."""
if not texts:
return []
return self.embeddings.embed_documents(texts)
def embed_query(self, text: str) -> List[float]:
"""Embed query text."""
return self.embeddings.embed_query(text)
class FakeEmbedding(Embeddings):
"""To ensure amilvusWait, you can continue to use it when the model is offline"""
def embed_documents(self, texts: List[str]) -> List[List[float]]:
"""embedding"""
return []
def embed_query(self, text: str) -> List[float]:
"""embedding"""
return []
CUSTOM_EMBEDDING = {
'OpenAIProxyEmbedding': OpenAIProxyEmbedding,
'BishengEmbedding': BishengEmbedding,
}
================================================
FILE: src/backend/bisheng/interface/importing/__init__.py
================================================
from bisheng.interface.importing.utils import import_by_type # noqa: F401
# This module is used to import any langchain class by name.
ALL = [
'import_by_type',
]
================================================
FILE: src/backend/bisheng/interface/importing/utils.py
================================================
# This module is used to import any langchain class by name.
import importlib
from typing import Any, ClassVar, Dict, Type
from bisheng.interface.custom import CustomComponent
from bisheng.interface.wrappers.base import wrapper_creator
from bisheng.utils import validate
from langchain.agents import Agent
from langchain.base_language import BaseLanguageModel
from langchain.chains.base import Chain
from langchain.chat_models.base import BaseChatModel
from langchain.prompts import PromptTemplate
from langchain_community.tools import BaseTool
def import_module(module_path: str) -> Any:
"""Import module from module path"""
if 'from' not in module_path:
# Import the module using the module path
return importlib.import_module(module_path)
# Split the module path into its components
_, module_path, _, object_name = module_path.split()
# Import the module using the module path
module = importlib.import_module(module_path)
return getattr(module, object_name)
def import_by_type(_type: str, name: str) -> Any:
from bisheng_langchain import chat_models
"""Import class by type and name"""
if _type is None:
raise ValueError(f'Type cannot be None. Check if {name} is in the config file.')
func_dict: ClassVar[Dict] = {
'agents': import_agent,
'prompts': import_prompt,
'llms': {
'llm': import_llm,
'chat': import_chat_llm,
'contribute': import_chain_contribute_llm
},
'tools': import_tool,
'chains': import_chain,
'toolkits': import_toolkit,
'wrappers': import_wrapper,
'memory': import_memory,
'embeddings': import_embedding,
'vectorstores': import_vectorstore,
'documentloaders': import_documentloader,
'textsplitters': import_textsplitter,
'utilities': import_utility,
'output_parsers': import_output_parser,
'retrievers': import_retriever,
'autogen_roles': import_autogenRoles,
'input_output': import_inputoutput,
'custom_components': import_custom_component,
}
if _type == 'llms':
key = 'contribute' if name in chat_models.__all__ else 'chat' if 'chat' in name.lower(
) else 'llm'
loaded_func = func_dict[_type][key] # type: ignore
else:
loaded_func = func_dict[_type]
return loaded_func(name)
def import_custom_component(custom_component: str) -> CustomComponent:
"""Import custom component from custom component name"""
return import_class('bisheng.interface.custom.custom_component.CustomComponent')
def import_inputoutput(input_output: str) -> Any:
"""Import output parser from output parser name"""
from bisheng.interface.inputoutput.base import input_output_creator
return input_output_creator.type_to_loader_dict[input_output]
def import_output_parser(output_parser: str) -> Any:
"""Import output parser from output parser name"""
from bisheng.interface.output_parsers.base import output_parser_creator
if output_parser in output_parser_creator.type_to_loader_dict:
return output_parser_creator.type_to_loader_dict[output_parser]
return import_module(f'from langchain_community.output_parsers import {output_parser}')
def import_chat_llm(llm: str) -> BaseChatModel:
"""Import chat llm from llm name"""
from bisheng.interface.llms.base import llm_creator
if llm in llm_creator.type_to_loader_dict:
return llm_creator.type_to_loader_dict[llm]
return import_class(f'bisheng_langchain.chat_models.{llm}')
def import_chain_contribute_llm(llm: str) -> BaseChatModel:
"""Import chat llm from llm name"""
from bisheng.interface.llms.base import llm_creator
if llm in llm_creator.type_to_loader_dict:
return llm_creator.type_to_loader_dict[llm]
return import_class(f'bisheng_langchain.chat_models.{llm}')
def import_retriever(retriever: str) -> Any:
"""Import retriever from retriever name"""
from bisheng.interface.retrievers.base import retriever_creator
if retriever in retriever_creator.type_to_loader_dict:
return retriever_creator.type_to_loader_dict[retriever]
return import_module(f'from langchain_community.retrievers import {retriever}')
def import_autogenRoles(autogen: str) -> Any:
return import_module(f'from bisheng_langchain.autogen_role import {autogen}')
def import_memory(memory: str) -> Any:
"""Import memory from memory name"""
from bisheng.interface.memories.base import memory_creator
if memory in memory_creator.type_to_loader_dict:
return memory_creator.type_to_loader_dict[memory]
return import_module(f'from langchain.memory import {memory}')
def import_class(class_path: str) -> Any:
"""Import class from class path"""
module_path, class_name = class_path.rsplit('.', 1)
module = import_module(module_path)
return getattr(module, class_name)
def import_prompt(prompt: str) -> Type[PromptTemplate]:
"""Import prompt from prompt name"""
from bisheng.interface.prompts.base import prompt_creator
if prompt in prompt_creator.type_to_loader_dict:
return prompt_creator.type_to_loader_dict[prompt]
return import_class(f'langchain.prompts.{prompt}')
def import_wrapper(wrapper: str) -> Any:
"""Import wrapper from wrapper name"""
if wrapper in wrapper_creator.type_to_loader_dict:
return wrapper_creator.type_to_loader_dict[wrapper]
def import_toolkit(toolkit: str) -> Any:
"""Import toolkit from toolkit name"""
from bisheng.interface.toolkits.base import toolkits_creator
return toolkits_creator.type_to_loader_dict[toolkit]
def import_agent(agent: str) -> Agent:
"""Import agent from agent name"""
# check for custom agent
from bisheng_langchain import agents
if agent in agents.__all__:
return import_class(f'bisheng_langchain.agents.{agent}')
return import_class(f'langchain.agents.{agent}')
def import_llm(llm: str) -> BaseLanguageModel:
"""Import llm from llm name"""
from bisheng.interface.llms.base import llm_creator
return next(x for x in llm_creator.type_to_loader_dict.values() if x.__name__ == llm)
def import_tool(tool: str) -> BaseTool:
"""Import tool from tool name"""
from bisheng.interface.tools.base import tool_creator
if tool in tool_creator.type_to_loader_dict:
return tool_creator.type_to_loader_dict[tool]['fcn']
return import_class(f'langchain_community.tools.{tool}')
def import_chain(chain: str) -> Type[Chain]:
"""Import chain from chain name"""
from bisheng.interface.chains.base import chain_creator
return next(x for x in chain_creator.type_to_loader_dict.values() if x.__name__ == chain)
def import_embedding(embedding: str) -> Any:
"""Import embedding from embedding name"""
from bisheng.interface.embeddings.base import embedding_creator
return next(x for x in embedding_creator.type_to_loader_dict.values()
if x.__name__ == embedding)
def import_vectorstore(vectorstore: str) -> Any:
"""Import vectorstore from vectorstore name"""
from bisheng_langchain import vectorstores
from bisheng.interface.vector_store.base import vectorstore_creator
if vectorstore_creator.type_to_loader_dict.get(vectorstore) is not None:
return vectorstore_creator.type_to_loader_dict[vectorstore]
if vectorstore in vectorstores.__all__:
return import_class(f'bisheng_langchain.vectorstores.{vectorstore}')
return import_class(f'langchain_community.vectorstores.{vectorstore}')
def import_documentloader(documentloader: str) -> Any:
"""Import documentloader from documentloader name"""
from bisheng_langchain import document_loaders
from bisheng.interface.document_loaders.base import documentloader_creator
if documentloader in document_loaders.__all__:
return import_class(f'bisheng_langchain.document_loaders.{documentloader}')
return next(x for x in documentloader_creator.type_to_loader_dict.values()
if x.__name__ == documentloader)
def import_textsplitter(textsplitter: str) -> Any:
"""Import textsplitter from textsplitter name"""
return import_class(f'langchain.text_splitter.{textsplitter}')
def import_utility(utility: str) -> Any:
"""Import utility from utility name"""
if utility == 'SQLDatabase':
return import_class(f'langchain.sql_database.{utility}')
return import_class(f'langchain_community.utilities.{utility}')
def get_function(code):
"""Get the function"""
function_name = validate.extract_function_name(code)
return validate.create_function(code, function_name)
def eval_custom_component_code(code: str) -> Type[CustomComponent]:
"""Evaluate custom component code"""
class_name = validate.extract_class_name(code)
return validate.create_class(code, class_name)
================================================
FILE: src/backend/bisheng/interface/initialize/__init__.py
================================================
================================================
FILE: src/backend/bisheng/interface/initialize/llm.py
================================================
def initialize_vertexai(class_object, params):
if credentials_path := params.get('credentials'):
from google.oauth2 import service_account # type: ignore
credentials_object = service_account.Credentials.from_service_account_file(
filename=credentials_path
)
params['credentials'] = credentials_object
return class_object(**params)
================================================
FILE: src/backend/bisheng/interface/initialize/loading.py
================================================
import inspect
import json
from typing import TYPE_CHECKING, Any, Callable, Dict, Sequence, Type
import httpx
import openai
from langchain.agents import agent as agent_module
from langchain.agents.agent import AgentExecutor
from langchain.agents.agent_toolkits.base import BaseToolkit
from langchain.agents.tools import BaseTool
from langchain.chains.base import Chain
from langchain.document_loaders.base import BaseLoader
from langchain.vectorstores.base import VectorStore
from langchain_community.utils.openai import is_openai_v1
from loguru import logger
from pydantic import SecretStr, ValidationError, create_model
from pydantic.fields import FieldInfo
from bisheng.common.constants.enums.telemetry import ApplicationTypeEnum
from bisheng.common.services.config_service import settings
from bisheng.core.cache.utils import file_download
from bisheng.interface.agents.base import agent_creator
from bisheng.interface.chains.base import chain_creator
from bisheng.interface.custom_lists import CUSTOM_NODES
from bisheng.interface.embeddings.custom import FakeEmbedding
from bisheng.interface.importing.utils import (eval_custom_component_code, get_function,
import_by_type)
from bisheng.interface.initialize.llm import initialize_vertexai
from bisheng.interface.initialize.utils import (handle_format_kwargs, handle_node_type,
handle_partial_variables, langchain_bug_openv1)
from bisheng.interface.initialize.vector_store import vecstore_initializer
from bisheng.interface.output_parsers.base import output_parser_creator
from bisheng.interface.retrievers.base import retriever_creator
from bisheng.interface.toolkits.base import toolkits_creator
from bisheng.interface.utils import load_file_into_dict
from bisheng.interface.wrappers.base import wrapper_creator
from bisheng.knowledge.domain.models.knowledge import KnowledgeDao
from bisheng.llm.domain import LLMService
from bisheng.utils import validate
from bisheng.utils.constants import NODE_ID_DICT, PRESET_QUESTION
from bisheng_langchain.vectorstores import VectorStoreFilterRetriever
if TYPE_CHECKING:
from bisheng import CustomComponent
def build_vertex_in_params(params: Dict) -> Dict:
from bisheng.graph.vertex.base import Vertex
# If any of the values in params is a Vertex, we will build it
return {
key: value.build() if isinstance(value, Vertex) else value
for key, value in params.items()
}
# from bisheng_langchain.document_loaders.elem_unstrcutured_loader import ElemUnstructuredLoaderV0
async def instantiate_class(node_type: str, base_type: str, params: Dict, user_id=None) -> Any:
"""Instantiate class from module type and key, and params"""
params = convert_params_to_sets(params)
params = convert_kwargs(params)
params_node_id_dict = params.pop(NODE_ID_DICT)
if node_type in CUSTOM_NODES:
if custom_node := CUSTOM_NODES.get(node_type):
if hasattr(custom_node, 'initialize'):
return custom_node.initialize(**params)
return custom_node(**params)
class_object = import_by_type(_type=base_type, name=node_type)
return await instantiate_based_on_type(class_object,
base_type,
node_type,
params,
params_node_id_dict,
user_id=user_id)
def convert_params_to_sets(params):
"""Convert certain params to sets"""
if 'allowed_special' in params:
params['allowed_special'] = set(params['allowed_special'])
if 'disallowed_special' in params:
params['disallowed_special'] = set(params['disallowed_special'])
if 'input_node' in params:
params.pop('input_node')
return params
def convert_kwargs(params):
# if *kwargs are passed as a string, convert to dict
# first find any key that has kwargs or config in it
kwargs_keys = [key for key in params.keys() if 'kwargs' in key or 'config' in key]
for key in kwargs_keys:
if isinstance(params[key], str):
params[key] = json.loads(params[key])
return params
async def instantiate_based_on_type(class_object,
base_type,
node_type,
params,
param_id_dict,
user_id=None):
if base_type == 'agents':
return instantiate_agent(node_type, class_object, params)
elif base_type == 'prompts':
return instantiate_prompt(node_type, class_object, params, param_id_dict)
elif base_type == 'tools':
tool = instantiate_tool(node_type, class_object, params)
if hasattr(tool, 'name') and isinstance(tool, BaseTool):
# tool name shouldn't contain spaces
tool.name = tool.name.replace(' ', '_')
return tool
elif base_type == 'toolkits':
return instantiate_toolkit(node_type, class_object, params)
elif base_type == 'embeddings':
return instantiate_embedding(class_object, params)
elif base_type == 'vectorstores':
return instantiate_vectorstore(node_type, class_object, params)
elif base_type == 'documentloaders':
return instantiate_documentloader(class_object, params)
elif base_type == 'textsplitters':
return instantiate_textsplitter(class_object, params)
elif base_type == 'utilities':
return instantiate_utility(node_type, class_object, params)
elif base_type == 'chains':
return instantiate_chains(node_type, class_object, params, param_id_dict)
elif base_type == 'output_parsers':
return instantiate_output_parser(node_type, class_object, params)
elif base_type == 'llms':
return instantiate_llm(node_type, class_object, params)
elif base_type == 'retrievers':
return instantiate_retriever(node_type, class_object, params)
elif base_type == 'memory':
return instantiate_memory(node_type, class_object, params)
elif base_type == 'custom_components':
return await instantiate_custom_component(node_type, class_object, params, user_id)
elif base_type == 'wrappers':
return instantiate_wrapper(node_type, class_object, params)
elif base_type == 'input_output':
return instantiate_input_output(node_type, class_object, params, param_id_dict)
elif base_type == 'autogen_roles':
return instantiate_autogen_roles(node_type, class_object, params)
else:
return class_object(**params)
async def instantiate_custom_component(node_type, class_object, params, user_id):
params_copy = params.copy()
class_object: 'CustomComponent' = eval_custom_component_code(params_copy.pop('code'))
custom_component = class_object(user_id=user_id)
if 'retriever' in params_copy and hasattr(params_copy['retriever'], 'as_retriever'):
params_copy['retriever'] = params_copy['retriever'].as_retriever()
# Determine if the build method is asynchronous
is_async = inspect.iscoroutinefunction(custom_component.build)
if is_async:
# Await the build method directly if it's async
built_object = await custom_component.build(**params_copy)
else:
# Call the build method directly if it's sync
built_object = custom_component.build(**params_copy)
return built_object, {'repr': custom_component.custom_repr()}
def instantiate_input_output(node_type, class_object, params, id_dict):
if node_type == 'Report':
preset_question = {}
if PRESET_QUESTION in params:
preset_question = params.pop(PRESET_QUESTION)
chains = params.get('chains', [])
chains_idlist = id_dict.get('chains', [])
# Needs to be rightchainsObjects are enriched
chain_list = []
for index, id in enumerate(chains_idlist):
chain_obj = {}
chain_obj['object'] = chains[index]
if id in preset_question:
if isinstance(preset_question[id], list):
for node_id in preset_question[id]:
chain_ = chain_obj.copy()
chain_['node_id'] = node_id[0]
chain_['input'] = {chains[index].input_keys[0]: node_id[1]}
chain_list.append(chain_)
continue
else:
chain_obj['node_id'] = preset_question[id][0]
chain_obj['input'] = {chains[index].input_keys[0]: preset_question[id][1]}
else:
# give a default input
logger.error(f'Report has no question id={id}')
chain_obj['input'] = {chains[index].input_keys[0]: 'start'}
chain_list.append(chain_obj)
params['chains'] = chain_list
# variable
variable = params.get('variables')
variable_node_id = id_dict.get('variables') or []
params['variables'] = []
for index, id in enumerate(variable_node_id):
params['variables'].append({'node_id': id, 'input': variable[index]})
return class_object(**params)
if node_type == 'InputFileNode':
file_path = class_object(**params).text()
if file_path:
file_path, file_name2 = file_download(file_path[0])
return [file_path, file_name2 if file_name2 else file_path[1]]
else:
return ''
if 'file_path' in params:
file_path = params['file_path']
if not file_path:
return ''
if isinstance(file_path, list):
params['file_path'] = file_path[0]
return class_object(**params).text()
def instantiate_autogen_roles(node_type, class_object, params):
return class_object(**params)
def instantiate_wrapper(node_type, class_object, params):
if node_type in wrapper_creator.from_method_nodes:
method = wrapper_creator.from_method_nodes[node_type]
if class_method := getattr(class_object, method, None):
return class_method(**params)
raise ValueError(f'Method {method} not found in {class_object}')
if node_type == 'DallEAPIWrapper' and is_openai_v1():
if 'openai_proxy' in params and params['openai_proxy']:
client_params = langchain_bug_openv1(params)
client_params['http_client'] = httpx.Client(proxies=params.get('openai_proxy'))
params['client'] = openai.OpenAI(**client_params).images
client_params['http_client'] = httpx.AsyncClient(proxies=params.get('openai_proxy'))
params['async_client'] = openai.AsyncOpenAI(**client_params).images
return class_object(**params)
def instantiate_output_parser(node_type, class_object, params):
if node_type in output_parser_creator.from_method_nodes:
method = output_parser_creator.from_method_nodes[node_type]
if class_method := getattr(class_object, method, None):
return class_method(**params)
raise ValueError(f'Method {method} not found in {class_object}')
return class_object(**params)
def instantiate_llm(node_type, class_object, params: Dict, user_llm_request: bool = True):
# This is a workaround so JinaChat works until streaming is implemented
# if "openai_api_base" in params and "jina" in params["openai_api_base"]:
# False if condition is True
params.pop('cache', None)
if is_openai_v1() and params.get('openai_proxy'):
params['http_client'] = httpx.Client(proxies=params.get('openai_proxy'))
params['http_async_client'] = httpx.AsyncClient(proxies=params.get('openai_proxy'))
del params['openai_proxy']
if node_type == '':
anthropic_api_key = params.pop('anthropic_api_key', None)
params['anthropic_api_key'] = SecretStr(anthropic_api_key) if anthropic_api_key else None
if node_type == 'VertexAI':
return initialize_vertexai(class_object=class_object, params=params)
# max_tokens sometimes is a string and should be an int
if 'max_tokens' in params:
if isinstance(params['max_tokens'], str) and params['max_tokens'].isdigit():
params['max_tokens'] = int(params['max_tokens'])
elif not isinstance(params.get('max_tokens'), int):
params.pop('max_tokens', None)
if node_type == 'BishengLLM':
params['app_id'] = "flow(will be deprecated)"
params['app_name'] = "flow(will be deprecated)"
params['app_type'] = ApplicationTypeEnum.SKILL
params['user_id'] = params.get('user_id', 0)
llm = class_object(**params)
llm_config = settings.get_from_db('llm_request')
# Supportrequest_timeout & max_retries
if hasattr(llm, 'request_timeout') and 'request_timeout' in llm_config:
if isinstance(llm_config.get('request_timeout'), str):
llm.request_timeout = int(llm_config.get('request_timeout'))
else:
llm.request_timeout = llm_config.get('request_timeout')
if hasattr(llm, 'max_retries') and 'max_retries' in llm_config:
llm.max_retries = llm_config.get('max_retries')
return llm
def instantiate_memory(node_type, class_object, params):
# process input_key and output_key to remove them if
# they are empty strings
if node_type == 'ConversationEntityMemory':
params.pop('memory_key', None)
for key in ['input_key', 'output_key']:
if key in params and (params[key] == '' or not params[key]):
params.pop(key)
try:
if 'retriever' in params and hasattr(params['retriever'], 'as_retriever'):
params['retriever'] = params['retriever'].as_retriever()
return class_object(**params)
# I want to catch a specific attribute error that happens
# when the object does not have a cursor attribute
except Exception as exc:
if "object has no attribute 'cursor'" in str(exc) or 'object has no field "conn"' in str(
exc):
raise AttributeError(
('Failed to build connection to database.'
f' Please check your connection string and try again. Error: {exc}')) from exc
raise exc
def instantiate_retriever(node_type, class_object, params):
for key, value in params.items():
if 'retriever' in key and hasattr(value, 'as_retriever'):
params[key] = value.as_retriever()
if node_type in retriever_creator.from_method_nodes:
method = retriever_creator.from_method_nodes[node_type]
if class_method := getattr(class_object, method, None):
return class_method(**params)
raise ValueError(f'Method {method} not found in {class_object}')
return class_object(**params)
def instantiate_chains(node_type, class_object: Type[Chain], params: Dict, id_dict: Dict):
if 'retriever' in params:
user_name = params.pop('user_name', '')
if hasattr(params['retriever'], 'as_retriever'):
if settings.get_from_db('file_access'):
# need to verify file access
access_url = settings.get_from_db('file_access') + f'?username={user_name}'
logger.info('file_access_filter url={}', access_url)
vectorstore = VectorStoreFilterRetriever(vectorstore=params['retriever'],
access_url=access_url)
else:
vectorstore = params['retriever'].as_retriever()
params['retriever'] = vectorstore
# sequence chain
if node_type == 'SequentialChain':
# Modifikasisequence Supports customizationchainSequence
params.pop('input_node', '') # sequential Adding input parameters is not supported
try:
chain_order = json.loads(params.pop('chain_order'))
except Exception:
raise Exception('chain_order Not a standard array')
chains_origin = params.get('chains')
chains_dict = {id: index for index, id in enumerate(id_dict.get('chains'))}
params['chains'] = [chains_origin[chains_dict.get(id)] for id in chain_order]
# dict Tukar
if 'headers' in params and isinstance(params['headers'], str):
params['headers'] = json.loads(params['headers'])
if node_type == 'ConversationalRetrievalChain':
params['get_chat_history'] = str
params['combine_docs_chain_kwargs'] = {
'prompt': params.pop('combine_docs_chain_kwargs', None),
'document_prompt': params.pop('document_prompt', None)
}
params['combine_docs_chain_kwargs'] = {
k: v
for k, v in params['combine_docs_chain_kwargs'].items() if v is not None
}
# Manual assemblyMultiPromptChain
if node_type in {'MultiPromptChain', 'MultiRuleChain'}:
destination_chain_name = params['destination_chain_name']
llm_chains = params['LLMChains']
destination_chain = {}
i = 0
for k, name in destination_chain_name.items():
destination_chain[name] = llm_chains[i]
i = i + 1
params.pop('LLMChains')
params.pop('destination_chain_name')
params['destination_chains'] = destination_chain
if node_type in chain_creator.from_method_nodes:
method = chain_creator.from_method_nodes[node_type]
if class_method := getattr(class_object, method, None):
return class_method(**params)
raise ValueError(f'Method {method} not found in {class_object}')
return class_object(**params)
def instantiate_agent(node_type, class_object: Type[agent_module.Agent], params: Dict):
if node_type in agent_creator.from_method_nodes:
method = agent_creator.from_method_nodes[node_type]
if class_method := getattr(class_object, method, None):
agent = class_method(**params)
tools = params.get('tools', [])
return AgentExecutor.from_agent_and_tools(agent=agent,
tools=tools,
handle_parsing_errors=True)
return load_agent_executor(class_object, params)
def instantiate_prompt(node_type, class_object, params: Dict, param_id_dict: Dict):
params, prompt = handle_node_type(node_type, class_object, params)
format_kwargs = handle_format_kwargs(prompt, params)
# Now we'll use partial_format to format the prompt
if format_kwargs:
prompt = handle_partial_variables(prompt, format_kwargs)
no_human_input = set(param_id_dict.keys())
human_input = set(prompt.input_variables).difference(no_human_input)
order_input = list(human_input) + list(set(prompt.input_variables) & no_human_input)
if len(order_input) > 1:
# if node_type == 'ChatPromptTemplate':
if hasattr(prompt, 'prompt') and hasattr(prompt.prompt, 'input_variables'):
prompt.prompt.input_variables = order_input
elif hasattr(prompt, 'input_variables'):
prompt.input_variables = order_input
return prompt, format_kwargs
def instantiate_tool(node_type, class_object: Type[BaseTool], params: Dict):
# build args_schema
args_schema = params.pop('args_schema', '')
if node_type == 'JsonSpec':
if file_dict := load_file_into_dict(params.pop('path')):
params['dict_'] = file_dict
else:
raise ValueError('Invalid file')
return class_object(**params)
elif node_type == 'PythonFunctionTool':
params['func'] = get_function(params.get('code'))
return class_object(**params)
elif node_type == 'PythonFunction':
function_string = params['code']
if isinstance(function_string, str):
return validate.eval_function(function_string)
raise ValueError('Function should be a string')
elif node_type.lower() == 'tool':
tool = class_object(**params)
tool = class_object(**params)
if args_schema and hasattr(tool, 'args_schema'):
fields = {}
for name, prop in args_schema.items():
# evalFunction to execute a string expression and return the result
import typing # noqa
if prop.get('type') == 'string':
field_type = str
else:
field_type = typing.Any
fields[name] = (field_type, FieldInfo(**prop))
tool.args_schema = create_model(name, **fields)
return tool
def instantiate_toolkit(node_type, class_object: Type[BaseToolkit], params: Dict):
loaded_toolkit = class_object(**params)
# Commenting this out for now to use toolkits as normal tools
# if toolkits_creator.has_create_function(node_type):
# return load_toolkits_executor(node_type, loaded_toolkit, params)
if isinstance(loaded_toolkit, BaseToolkit):
return loaded_toolkit.get_tools()
return loaded_toolkit
def instantiate_embedding(class_object, params: Dict):
# params.pop('model', None)
try:
if params.get('openai_proxy'):
params['http_client'] = httpx.Client(proxies=params.get('openai_proxy'))
params['http_async_client'] = httpx.AsyncClient(proxies=params.get('openai_proxy'))
del params['openai_proxy']
if class_object.__name__ == 'OpenAIEmbeddings':
params['check_embedding_ctx_length'] = False
elif class_object.__name__ == 'BishengEmbedding':
params['app_id'] = "flow(will be deprecated)"
params['app_name'] = "flow(will be deprecated)"
params['app_type'] = ApplicationTypeEnum.SKILL
params['user_id'] = params.get('user_id', 0)
return class_object(**params)
except ValidationError:
params = {key: value for key, value in params.items() if key in class_object.__fields__}
return class_object(**params)
def instantiate_vectorstore(node_type: str, class_object: Type[VectorStore], params: Dict):
user_name = params.pop('user_name', '')
search_kwargs = params.pop('search_kwargs', {})
search_type = params.pop('search_type', 'similarity')
if 'documents' not in params:
params['documents'] = []
# Filter knowledge bases for which the user does not have permission
# TODO zgq After the subsequent unified skill execution process, all business-related logic is migrated to before the initial skill object.
if node_type == 'MilvusWithPermissionCheck' or node_type == 'ElasticsearchWithPermissionCheck':
col_name = 'collection_name'
if node_type == 'ElasticsearchWithPermissionCheck':
col_name = 'index_name'
# Get execution users List of knowledge bases with permission to view
knowledge_ids = [one['key'] for one in params[col_name]]
if params.pop('_is_check_auth', True):
knowledge_list = KnowledgeDao.judge_knowledge_permission(user_name, knowledge_ids)
else:
knowledge_list = KnowledgeDao.get_list_by_ids(knowledge_ids)
logger.debug(f'{node_type} after filter, get knowledge_list: {knowledge_list}')
if not knowledge_list:
logger.warning(f'{node_type}: after filter, get zero knowledge')
# Fake if you don't have any knowledge baseembeddingand emptycollection_name
if node_type == 'MilvusWithPermissionCheck':
params[col_name] = []
params['collection_embeddings'] = []
params['partition_keys'] = []
for knowledge in knowledge_list:
params[col_name].append(knowledge.collection_name)
params['collection_embeddings'].append(
LLMService.get_bisheng_knowledge_embedding_sync(0, model_id=int(knowledge.model)))
if knowledge.collection_name.startswith('partition'):
params['partition_keys'].append(knowledge.id)
else:
params['partition_keys'].append(None)
params['embedding'] = params['collection_embeddings'][0] if params[
'collection_embeddings'] else FakeEmbedding()
else:
params[col_name] = [
knowledge.index_name or knowledge.collection_name for knowledge in knowledge_list
]
if initializer := vecstore_initializer.get(class_object.__name__):
vecstore = initializer(class_object, params, search_kwargs)
else:
if 'texts' in params:
params['documents'] = params.pop('texts')
vecstore = class_object.from_documents(**params)
# ! This might not work. Need to test
if search_kwargs and hasattr(vecstore, 'as_retriever'):
if settings.get_from_db('file_access'):
# need to verify file access / For Knowledge Base Only
access_url = settings.get_from_db('file_access') + f'?username={user_name}'
vecstore = VectorStoreFilterRetriever(vectorstore=vecstore,
search_type=search_type,
search_kwargs=search_kwargs,
access_url=access_url)
else:
vecstore = vecstore.as_retriever(search_type=search_type, search_kwargs=search_kwargs)
return vecstore
def instantiate_documentloader(class_object: Type[BaseLoader], params: Dict):
if 'file_filter' in params:
# file_filter will be a string but we need a function
# that will be used to filter the files using file_filter
# like lambda x: x.endswith(".txt") but as we don't know
# anything besides the string, we will simply check if the string is
# in x and if it is, we will return True
file_filter = params.pop('file_filter')
extensions = file_filter.split(',')
params['file_filter'] = lambda x: any(extension.strip() in x for extension in extensions)
if 'file_path' in params:
file_path = params['file_path']
if isinstance(file_path, list):
file_name = file_path[1]
params['file_path'] = file_path[0]
if class_object.__name__ == 'ElemUnstructuredLoaderV0':
params['file_name'] = file_name
metadata = params.pop('metadata', None)
if metadata and isinstance(metadata, str):
try:
metadata = json.loads(metadata)
except json.JSONDecodeError as exc:
raise ValueError('The metadata you provided is not a valid JSON string.') from exc
# make it success when file not present
if 'file_path' in params and not params['file_path']:
return []
docs = class_object(**params).load()
# Now if metadata is an empty dict, we will not add it to the documents
if metadata:
for doc in docs:
# If the document already has metadata, we will not overwrite it
if not doc.metadata:
doc.metadata = metadata
else:
doc.metadata.update(metadata)
return docs
def instantiate_textsplitter(
class_object,
params: Dict,
):
try:
documents = params.pop('documents')
if not documents:
return []
except KeyError as exc:
raise ValueError('The source you provided did not load correctly or was empty.'
'Try changing the chunk_size of the Text Splitter.') from exc
if ('separator_type' in params
and params['separator_type'] == 'Text') or 'separator_type' not in params:
params.pop('separator_type', None)
# separators might come in as an escaped string like \\n
# so we need to convert it to a string
if 'separators' in params:
params['separators'] = (params['separators'].encode().decode('unicode-escape'))
text_splitter = class_object(**params)
else:
from langchain.text_splitter import Language
language = params.pop('separator_type', None)
params['language'] = Language(language)
params.pop('separators', None)
text_splitter = class_object.from_language(**params)
return text_splitter.split_documents(documents)
def instantiate_utility(node_type, class_object, params: Dict):
if node_type == 'SQLDatabase':
return class_object.from_uri(params.pop('uri'))
return class_object(**params)
def replace_zero_shot_prompt_with_prompt_template(nodes):
"""Replace ZeroShotPrompt with PromptTemplate"""
for node in nodes:
if node['data']['type'] == 'ZeroShotPrompt':
# Build Prompt Template
tools = [
tool for tool in nodes if tool['type'] != 'chatOutputNode'
and 'Tool' in tool['data']['node']['base_classes']
]
node['data'] = build_prompt_template(prompt=node['data'], tools=tools)
break
return nodes
def load_agent_executor(agent_class: type[agent_module.Agent], params, **kwargs):
"""Load agent executor from agent class, tools and chain"""
allowed_tools: Sequence[BaseTool] = params.get('allowed_tools', [])
llm_chain = params['llm_chain']
# agent has hidden args for memory. might need to be support
# memory = params["memory"]
# if allowed_tools is not a list or set, make it a list
if not isinstance(allowed_tools, (list, set)) and isinstance(allowed_tools, BaseTool):
allowed_tools = [allowed_tools]
tool_names = [tool.name for tool in allowed_tools]
# Agent class requires an output_parser but Agent classes
# have a default output_parser.
agent = agent_class(allowed_tools=tool_names, llm_chain=llm_chain) # type: ignore
return AgentExecutor.from_agent_and_tools(
agent=agent,
tools=allowed_tools,
handle_parsing_errors=True,
# memory=memory,
**kwargs,
)
def load_toolkits_executor(node_type: str, toolkit: BaseToolkit, params: dict):
create_function: Callable = toolkits_creator.get_create_function(node_type)
if llm := params.get('llm'):
return create_function(llm=llm, toolkit=toolkit)
def build_prompt_template(prompt, tools):
"""Build PromptTemplate from ZeroShotPrompt"""
prefix = prompt['node']['template']['prefix']['value']
suffix = prompt['node']['template']['suffix']['value']
format_instructions = prompt['node']['template']['format_instructions']['value']
tool_strings = '\n'.join([
f"{tool['data']['node']['name']}: {tool['data']['node']['description']}" for tool in tools
])
tool_names = ', '.join([tool['data']['node']['name'] for tool in tools])
format_instructions = format_instructions.format(tool_names=tool_names)
value = '\n\n'.join([prefix, tool_strings, format_instructions, suffix])
prompt['type'] = 'PromptTemplate'
prompt['node'] = {
'template': {
'_type': 'prompt',
'input_variables': {
'type': 'str',
'required': True,
'placeholder': '',
'list': True,
'show': False,
'multiline': False,
},
'output_parser': {
'type': 'BaseOutputParser',
'required': False,
'placeholder': '',
'list': False,
'show': False,
'multline': False,
'value': None,
},
'template': {
'type': 'str',
'required': True,
'placeholder': '',
'list': False,
'show': True,
'multiline': True,
'value': value,
},
'template_format': {
'type': 'str',
'required': False,
'placeholder': '',
'list': False,
'show': False,
'multline': False,
'value': 'f-string',
},
'validate_template': {
'type': 'bool',
'required': False,
'placeholder': '',
'list': False,
'show': False,
'multline': False,
'value': True,
},
},
'description': 'Schema to represent a prompt for an LLM.',
'base_classes': ['BasePromptTemplate'],
}
return prompt
================================================
FILE: src/backend/bisheng/interface/initialize/utils.py
================================================
import contextlib
import json
from typing import Any, Dict, List
import orjson
from langchain.agents import ZeroShotAgent
from langchain.schema import BaseOutputParser, Document
from bisheng.common.utils.util import orjson_dumps
def langchain_bug_openv1(params):
'''Compatible openai v1'''
client_params = {
'api_key': params.get('openai_api_key') or params.get('api_key'),
'organization': params.get('openai_organization'),
'base_url': params.get('openai_api_base'),
'timeout': params.get('request_timeout', 30),
'max_retries': params.get('max_retries', 1),
'default_headers': params.get('default_headers'),
'default_query': params.get('default_query')
}
return client_params
def handle_node_type(node_type, class_object, params: Dict):
if node_type == 'ZeroShotPrompt':
params = check_tools_in_params(params)
prompt = ZeroShotAgent.create_prompt(**params)
elif 'MessagePromptTemplate' in node_type:
prompt = instantiate_from_template(class_object, params)
elif node_type == 'ChatPromptTemplate':
prompt = class_object.from_messages(**params)
elif hasattr(class_object, 'from_template') and params.get('template'):
prompt = class_object.from_template(template=params.pop('template'),
output_parser=params.get('output_parser'))
else:
prompt = class_object(**params)
return params, prompt
def check_tools_in_params(params: Dict):
if 'tools' not in params:
params['tools'] = []
return params
def instantiate_from_template(class_object, params: Dict):
from_template_params = {'template': params.pop('prompt', params.pop('template', ''))}
from_template_params.update(params)
if not from_template_params.get('template'):
raise ValueError('Prompt template is required')
if class_object.__name__ in ('HumanMessagePromptTemplate', 'SystemMessagePromptTemplate'):
from_template_params['template'] = from_template_params['template'][0].template
return class_object.from_template(**from_template_params)
def handle_format_kwargs(prompt, params: Dict):
format_kwargs: Dict[str, Any] = {}
for input_variable in prompt.input_variables:
if input_variable in params:
format_kwargs = handle_variable(params, input_variable, format_kwargs)
return format_kwargs
def handle_partial_variables(prompt, format_kwargs: Dict):
partial_variables = format_kwargs.copy()
partial_variables = {key: value for key, value in partial_variables.items() if value}
# Remove handle_keys otherwise LangChain raises an error
partial_variables.pop('handle_keys', None)
if partial_variables and hasattr(prompt, 'partial'):
return prompt.partial(**partial_variables)
return prompt
def handle_variable(params: Dict, input_variable: str, format_kwargs: Dict):
variable = params[input_variable]
if isinstance(variable, str):
format_kwargs[input_variable] = variable
elif isinstance(variable, dict):
# variable node Special treated
if len(variable) == 0:
format_kwargs[input_variable] = ''
elif len(variable) != 1:
raise ValueError(f'VariableNode contains multi-key {variable.keys()}')
else:
format_kwargs[input_variable] = list(variable.values())[0]
elif isinstance(variable, BaseOutputParser) and hasattr(variable, 'get_format_instructions'):
format_kwargs[input_variable] = variable.get_format_instructions()
elif is_instance_of_list_or_document(variable):
format_kwargs = format_document(variable, input_variable, format_kwargs)
if needs_handle_keys(variable):
format_kwargs = add_handle_keys(input_variable, format_kwargs)
return format_kwargs
def is_instance_of_list_or_document(variable):
return (isinstance(variable, List) and all(isinstance(item, Document) for item in variable)
or isinstance(variable, Document))
def format_document(variable, input_variable: str, format_kwargs: Dict):
variable = variable if isinstance(variable, List) else [variable]
content = format_content(variable)
format_kwargs[input_variable] = content
return format_kwargs
def format_content(variable):
if len(variable) > 1:
return '\n'.join([item.page_content for item in variable if item.page_content])
elif len(variable) == 1:
content = variable[0].page_content
return try_to_load_json(content)
return ''
def try_to_load_json(content):
with contextlib.suppress(json.JSONDecodeError):
content = orjson.loads(content)
if isinstance(content, list):
content = ','.join([str(item) for item in content])
else:
content = orjson_dumps(content)
return content
def needs_handle_keys(variable):
return is_instance_of_list_or_document(variable) or (isinstance(
variable, BaseOutputParser) and hasattr(variable, 'get_format_instructions'))
def add_handle_keys(input_variable: str, format_kwargs: Dict):
if 'handle_keys' not in format_kwargs:
format_kwargs['handle_keys'] = []
format_kwargs['handle_keys'].append(input_variable)
return format_kwargs
================================================
FILE: src/backend/bisheng/interface/initialize/vector_store.py
================================================
import ast
import json
import os
from typing import Any, Callable, Dict, Type
from langchain_community.vectorstores import (FAISS, Chroma, Milvus, MongoDBAtlasVectorSearch,
Pinecone, Qdrant, SupabaseVectorStore, Weaviate)
from loguru import logger
from sqlmodel import select
from bisheng.common.services.config_service import settings
from bisheng.core.database import get_sync_db_session
from bisheng.knowledge.domain.models.knowledge import Knowledge, KnowledgeDao
from bisheng.llm.domain import LLMService
from bisheng_langchain.vectorstores import ElasticKeywordsSearch
def docs_in_params(params: dict) -> bool:
"""Check if params has documents OR texts and one of them is not an empty list,
If any of them is not an empty list, return True, else return False"""
return ('documents' in params and params['documents']) or ('texts' in params
and params['texts'])
def initialize_mongodb(class_object: Type[MongoDBAtlasVectorSearch], params: dict, search: dict):
"""Initialize mongodb and return the class object"""
MONGODB_ATLAS_CLUSTER_URI = params.pop('mongodb_atlas_cluster_uri')
if not MONGODB_ATLAS_CLUSTER_URI:
raise ValueError('Mongodb atlas cluster uri must be provided in the params')
from pymongo import MongoClient
import certifi
client: MongoClient = MongoClient(MONGODB_ATLAS_CLUSTER_URI, tlsCAFile=certifi.where())
db_name = params.pop('db_name', None)
collection_name = params.pop('collection_name', None)
if not db_name or not collection_name:
raise ValueError('db_name and collection_name must be provided in the params')
index_name = params.pop('index_name', None)
if not index_name:
raise ValueError('index_name must be provided in the params')
collection = client[db_name][collection_name]
if not docs_in_params(params):
# __init__ requires collection, embedding and index_name
init_args = {
'collection': collection,
'index_name': index_name,
'embedding': params.get('embedding'),
}
return class_object(**init_args)
if 'texts' in params:
params['documents'] = params.pop('texts')
params['collection'] = collection
params['index_name'] = index_name
return class_object.from_documents(**params)
def initialize_supabase(class_object: Type[SupabaseVectorStore], params: dict, search: dict):
"""Initialize supabase and return the class object"""
from supabase.client import Client, create_client
if 'supabase_url' not in params or 'supabase_service_key' not in params:
raise ValueError('Supabase url and service key must be provided in the params')
if 'texts' in params:
params['documents'] = params.pop('texts')
client_kwargs = {
'supabase_url': params.pop('supabase_url'),
'supabase_key': params.pop('supabase_service_key'),
}
supabase: Client = create_client(**client_kwargs)
if not docs_in_params(params):
params.pop('documents', None)
params.pop('texts', None)
return class_object(client=supabase, **params)
# If there are docs in the params, create a new index
return class_object.from_documents(client=supabase, **params)
def initialize_weaviate(class_object: Type[Weaviate], params: dict, search: dict):
"""Initialize weaviate and return the class object"""
if not docs_in_params(params):
import weaviate # type: ignore
client_kwargs_json = params.get('client_kwargs', '{}')
client_kwargs = json.loads(client_kwargs_json)
client_params = {
'url': params.get('weaviate_url'),
}
client_params.update(client_kwargs)
weaviate_client = weaviate.Client(**client_params)
new_params = {
'client': weaviate_client,
'index_name': params.get('index_name'),
'text_key': params.get('text_key'),
}
return class_object(**new_params)
# If there are docs in the params, create a new index
if 'texts' in params:
params['documents'] = params.pop('texts')
return class_object.from_documents(**params)
def initialize_faiss(class_object: Type[FAISS], params: dict, search: dict):
"""Initialize faiss and return the class object"""
if not docs_in_params(params):
return class_object.load_local
save_local = params.get('save_local')
faiss_index = class_object(**params)
if save_local:
faiss_index.save_local(folder_path=save_local)
return faiss_index
def initialize_pinecone(class_object: Type[Pinecone], params: dict, search: dict):
"""Initialize pinecone and return the class object"""
import pinecone # type: ignore
pinecone_api_key = params.get('pinecone_api_key')
pinecone_env = params.get('pinecone_env')
if pinecone_api_key is None or pinecone_env is None:
if os.getenv('PINECONE_API_KEY') is not None:
pinecone_api_key = os.getenv('PINECONE_API_KEY')
if os.getenv('PINECONE_ENV') is not None:
pinecone_env = os.getenv('PINECONE_ENV')
if pinecone_api_key is None or pinecone_env is None:
raise ValueError('Pinecone API key and environment must be provided in the params')
# initialize pinecone
pinecone.init(
api_key=pinecone_api_key, # find at app.pinecone.io
environment=pinecone_env, # next to api key in console
)
# If there are no docs in the params, return an existing index
# but first remove any texts or docs keys from the params
if not docs_in_params(params):
existing_index_params = {
'embedding': params.pop('embedding'),
}
if 'index_name' in params:
existing_index_params['index_name'] = params.pop('index_name')
if 'namespace' in params:
existing_index_params['namespace'] = params.pop('namespace')
return class_object.from_existing_index(**existing_index_params)
# If there are docs in the params, create a new index
if 'texts' in params:
params['documents'] = params.pop('texts')
return class_object.from_documents(**params)
def initialize_chroma(class_object: Type[Chroma], params: dict, search: dict):
"""Initialize a ChromaDB object from the params"""
persist = params.pop('persist', False)
if not docs_in_params(params):
params.pop('documents', None)
params.pop('texts', None)
params['embedding_function'] = params.pop('embedding')
chromadb = class_object(**params)
else:
if 'texts' in params:
params['documents'] = params.pop('texts')
for doc in params['documents']:
if doc.metadata is None:
doc.metadata = {}
for key, value in doc.metadata.items():
if value is None:
doc.metadata[key] = ''
chromadb = class_object.from_documents(**params)
if persist:
chromadb.persist()
return chromadb
def initialize_qdrant(class_object: Type[Qdrant], params: dict, search: dict):
if not docs_in_params(params):
if 'location' not in params and 'api_key' not in params:
raise ValueError('Location and API key must be provided in the params')
from qdrant_client import QdrantClient
client_params = {
'location': params.pop('location'),
'api_key': params.pop('api_key'),
}
lc_params = {
'collection_name': params.pop('collection_name'),
'embeddings': params.pop('embedding'),
}
client = QdrantClient(**client_params)
return class_object(client=client, **lc_params)
return class_object.from_documents(**params)
def initial_milvus(class_object: Type[Milvus], params: dict, search_kwargs: dict):
if not params.get('connection_args') and settings.get_vectors_conf().milvus.connection_args:
params['connection_args'] = settings.get_vectors_conf().milvus.connection_args
elif isinstance(params.get('connection_args'), str):
print(f"milvus before params={params} type={type(params['connection_args'])}")
params['connection_args'] = json.loads(params.pop('connection_args'))
if 'embedding' not in params:
# Matching Knowledge Base'sembedding
col = params['collection_name']
collection_id = params.pop('collection_id', '')
with get_sync_db_session() as session:
if collection_id:
knowledge = session.get(Knowledge, collection_id)
params['collection_name'] = knowledge.collection_name
else:
knowledge = session.exec(
select(Knowledge).where(Knowledge.collection_name == col)).first()
if not knowledge:
raise ValueError(f'Unable to find knowledge basecollection={col} knowledge_id={collection_id}')
params['embedding'] = LLMService.get_bisheng_knowledge_embedding_sync(0, model_id=int(knowledge.model))
if knowledge.collection_name.startswith('partition'):
search_kwargs.update({'partition_key': knowledge.id})
params['partition_key'] = knowledge.id
logger.info('init_milvus collection_name={} partition={}', params['collection_name'],
search_kwargs)
return class_object.from_documents(**params)
def initial_elastic(class_object: Type[ElasticKeywordsSearch], params: dict, search: dict):
if not params.get('elasticsearch_url') and settings.get_vectors_conf().elasticsearch.elasticsearch_url:
params['elasticsearch_url'] = settings.get_vectors_conf().elasticsearch.elasticsearch_url
if not params.get('ssl_verify') and settings.get_vectors_conf().elasticsearch.ssl_verify:
params['ssl_verify'] = settings.get_vectors_conf().elasticsearch.ssl_verify
if isinstance(params.get('ssl_verify'), str):
params['ssl_verify'] = ast.literal_eval(params['ssl_verify'])
collection_id = params.pop('collection_id', '')
if collection_id:
with get_sync_db_session() as session:
knowledge = session.get(Knowledge, collection_id)
index_name = knowledge.index_name or knowledge.collection_name
params['index_name'] = index_name
params['embedding'] = ''
return class_object.from_documents(**params)
def initial_elastic_vector(class_object: Type[ElasticKeywordsSearch], params: dict, search: dict):
params.update(params.pop('connect_kwargs'))
collection_id = params.pop('collection_id', '')
if collection_id:
knowledge = KnowledgeDao.query_by_id(collection_id)
index_name = knowledge.index_name or knowledge.collection_name
params['index_name'] = index_name
params['embedding'] = LLMService.get_bisheng_knowledge_embedding_sync(0, model_id=int(knowledge.model))
if params['documents']:
return class_object.from_documents(**params)
else:
params.pop('documents')
return class_object(**params)
vecstore_initializer: Dict[str, Callable[[Type[Any], dict], Any]] = {
'Pinecone': initialize_pinecone,
'Chroma': initialize_chroma,
'Qdrant': initialize_qdrant,
'Weaviate': initialize_weaviate,
'FAISS': initialize_faiss,
'Milvus': initial_milvus,
'MilvusWithPermissionCheck': initial_milvus,
'ElasticsearchStore': initial_elastic_vector,
'ElasticKeywordsSearch': initial_elastic,
'ElasticsearchWithPermissionCheck': initial_elastic,
'SupabaseVectorStore': initialize_supabase,
'MongoDBAtlasVectorSearch': initialize_mongodb,
}
================================================
FILE: src/backend/bisheng/interface/inputoutput/__init__.py
================================================
================================================
FILE: src/backend/bisheng/interface/inputoutput/base.py
================================================
from typing import Dict, List, Optional, Type
from bisheng.custom.customs import get_custom_nodes
from bisheng.interface.base import LangChainTypeCreator
from bisheng.interface.importing.utils import import_class
from bisheng.template.frontend_node.base import FrontendNode
from bisheng.template.frontend_node.input_output import InputOutputNode
from loguru import logger
from bisheng.utils.util import build_template_from_class
from bisheng_langchain import input_output
class IOutputCreator(LangChainTypeCreator):
type_name: str = 'input_output'
@property
def frontend_node_class(self) -> Type[FrontendNode]:
return InputOutputNode
@property
def type_to_loader_dict(self) -> Dict:
if self.type_dict is None:
self.type_dict = {}
# bisheng-langchain
bisheng = {
node_name: import_class(f'bisheng_langchain.input_output.{node_name}')
for node_name in input_output.__all__
}
self.type_dict.update(bisheng)
return self.type_dict
def get_signature(self, name: str) -> Optional[Dict]:
"""Get the signature of an llm."""
try:
if name in get_custom_nodes(self.type_name).keys():
return get_custom_nodes(self.type_name)[name]
return build_template_from_class(
name,
type_to_cls_dict=self.type_to_loader_dict,
)
except ValueError as exc:
raise ValueError('LLM not found') from exc
except AttributeError as exc:
logger.error(f'LLM {name} not loaded: {exc}')
return None
def to_list(self) -> List[str]:
return self.type_to_loader_dict.keys()
input_output_creator = IOutputCreator()
================================================
FILE: src/backend/bisheng/interface/listing.py
================================================
from bisheng.utils.lazy_load import LazyLoadDictBase
# from bisheng.interface.agents.base import agent_creator
# from bisheng.interface.autogenRole.base import autogenrole_creator
# from bisheng.interface.chains.base import chain_creator
# from bisheng.interface.document_loaders.base import documentloader_creator
# from bisheng.interface.embeddings.base import embedding_creator
# from bisheng.interface.inputoutput.base import input_output_creator
# from bisheng.interface.llms.base import llm_creator
# from bisheng.interface.memories.base import memory_creator
# from bisheng.interface.output_parsers.base import output_parser_creator
# from bisheng.interface.prompts.base import prompt_creator
# from bisheng.interface.retrievers.base import retriever_creator
# from bisheng.interface.text_splitters.base import textsplitter_creator
# from bisheng.interface.toolkits.base import toolkits_creator
# from bisheng.interface.tools.base import tool_creator
# from bisheng.interface.utilities.base import utility_creator
# from bisheng.interface.vector_store.base import vectorstore_creator
# from bisheng.interface.wrappers.base import wrapper_creator
# def get_type_dict():
# return {
# 'agents': agent_creator.to_list(),
# 'prompts': prompt_creator.to_list(),
# 'llms': llm_creator.to_list(),
# 'tools': tool_creator.to_list(),
# 'chains': chain_creator.to_list(),
# 'memory': memory_creator.to_list(),
# 'toolkits': toolkits_creator.to_list(),
# 'wrappers': wrapper_creator.to_list(),
# 'documentLoaders': documentloader_creator.to_list(),
# 'vectorStore': vectorstore_creator.to_list(),
# 'embeddings': embedding_creator.to_list(),
# 'textSplitters': textsplitter_creator.to_list(),
# 'utilities': utility_creator.to_list(),
# 'outputParsers': output_parser_creator.to_list(),
# 'retrievers': retriever_creator.to_list(),
# 'inputOutput': input_output_creator.to_list(),
# 'autogenRoles': autogenrole_creator.to_list(),
# }
# LANGCHAIN_TYPES_DICT = get_type_dict()
# # Now we'll build a dict with Langchain types and ours
# ALL_TYPES_DICT = {
# **LANGCHAIN_TYPES_DICT,
# 'Custom': ['Custom Tool', 'Python Function'],
# }
class AllTypesDict(LazyLoadDictBase):
def __init__(self):
self._all_types_dict = None
@property
def ALL_TYPES_DICT(self):
return self.all_types_dict
def _build_dict(self):
langchain_types_dict = self.get_type_dict()
return {
**langchain_types_dict,
'Custom': ['Custom Tool', 'Python Function'],
}
def get_type_dict(self):
from bisheng.interface.types import get_all_types_dict
return get_all_types_dict()
lazy_load_dict = AllTypesDict()
================================================
FILE: src/backend/bisheng/interface/llms/__init__.py
================================================
from bisheng.interface.llms.base import LLMCreator
__all__ = ['LLMCreator']
================================================
FILE: src/backend/bisheng/interface/llms/base.py
================================================
from typing import Dict, List, Optional, Type
from bisheng.interface.base import LangChainTypeCreator
from bisheng.interface.custom_lists import llm_type_to_cls_dict
from bisheng.llm.domain.llm import BishengLLM
from bisheng.common.services.config_service import settings
from bisheng.template.frontend_node.llms import LLMFrontendNode
from loguru import logger
from bisheng.utils.util import build_template_from_class
class LLMCreator(LangChainTypeCreator):
type_name: str = 'llms'
@property
def frontend_node_class(self) -> Type[LLMFrontendNode]:
return LLMFrontendNode
@property
def type_to_loader_dict(self) -> Dict:
if self.type_dict is None:
self.type_dict = llm_type_to_cls_dict
self.type_dict.update({
'BishengLLM': BishengLLM,
})
return self.type_dict
def get_signature(self, name: str) -> Optional[Dict]:
"""Get the signature of an llm."""
try:
return build_template_from_class(name, llm_type_to_cls_dict)
except ValueError as exc:
raise ValueError('LLM not found') from exc
except AttributeError as exc:
logger.error(f'LLM {name} not loaded: {exc}')
return None
def to_list(self) -> List[str]:
return [
llm.__name__
for llm in self.type_to_loader_dict.values()
if llm.__name__ in settings.llms or settings.dev
]
llm_creator = LLMCreator()
================================================
FILE: src/backend/bisheng/interface/memories/__init__.py
================================================
from bisheng.interface.memories.base import MemoryCreator
__all__ = ['MemoryCreator']
================================================
FILE: src/backend/bisheng/interface/memories/base.py
================================================
from typing import ClassVar, Dict, List, Optional, Type
from bisheng.custom.customs import get_custom_nodes
from bisheng.interface.base import LangChainTypeCreator
from bisheng.interface.custom_lists import memory_type_to_cls_dict
from bisheng.common.services.config_service import settings
from bisheng.template.frontend_node.base import FrontendNode
from bisheng.template.frontend_node.memories import MemoryFrontendNode
from loguru import logger
from bisheng.utils.util import build_template_from_class, build_template_from_method
class MemoryCreator(LangChainTypeCreator):
type_name: str = 'memories'
from_method_nodes: ClassVar[Dict] = {
'ZepChatMessageHistory': '__init__',
'SQLiteEntityStore': '__init__',
}
@property
def frontend_node_class(self) -> Type[FrontendNode]:
"""The class type of the FrontendNode created in frontend_node."""
return MemoryFrontendNode
@property
def type_to_loader_dict(self) -> Dict:
if self.type_dict is None:
self.type_dict = memory_type_to_cls_dict
return self.type_dict
def get_signature(self, name: str) -> Optional[Dict]:
"""Get the signature of a memory."""
try:
if name in get_custom_nodes(self.type_name).keys():
return get_custom_nodes(self.type_name)[name]
elif name in self.from_method_nodes:
return build_template_from_method(
name,
type_to_cls_dict=memory_type_to_cls_dict,
method_name=self.from_method_nodes[name],
)
return build_template_from_class(name, memory_type_to_cls_dict)
except ValueError as exc:
raise ValueError('Memory not found') from exc
except AttributeError as exc:
logger.error(f'Memory {name} not loaded: {exc}')
return None
def to_list(self) -> List[str]:
return [
memory.__name__ for memory in self.type_to_loader_dict.values()
if memory.__name__ in settings.memories or settings.dev
]
memory_creator = MemoryCreator()
================================================
FILE: src/backend/bisheng/interface/output_parsers/__init__.py
================================================
================================================
FILE: src/backend/bisheng/interface/output_parsers/base.py
================================================
from typing import ClassVar, Dict, List, Optional, Type
from bisheng.interface.base import LangChainTypeCreator
from bisheng.interface.importing.utils import import_class
from bisheng.common.services.config_service import settings
from bisheng.template.frontend_node.output_parsers import OutputParserFrontendNode
from loguru import logger
from bisheng.utils.util import build_template_from_class, build_template_from_method
from langchain import output_parsers
class OutputParserCreator(LangChainTypeCreator):
type_name: str = 'output_parsers'
from_method_nodes: ClassVar[Dict] = {
'StructuredOutputParser': 'from_response_schemas',
}
@property
def frontend_node_class(self) -> Type[OutputParserFrontendNode]:
return OutputParserFrontendNode
@property
def type_to_loader_dict(self) -> Dict:
if self.type_dict is None:
self.type_dict = {}
for output_parser_name in output_parsers.__all__:
if not settings.dev and output_parser_name not in settings.output_parsers:
continue
if output_parser_name == "GuardrailsOutputParser":
self.type_dict[output_parser_name] = import_class(f'langchain_community.output_parsers.rail_parser.{output_parser_name}')
else:
self.type_dict[output_parser_name] = import_class(f'langchain.output_parsers.{output_parser_name}')
return self.type_dict
def get_signature(self, name: str) -> Optional[Dict]:
try:
if name in self.from_method_nodes:
return build_template_from_method(
name,
type_to_cls_dict=self.type_to_loader_dict,
method_name=self.from_method_nodes[name],
)
# elif name in get_custom_nodes(self.type_name).keys():
# return get_custom_nodes(self.type_name)[name]
else:
return build_template_from_class(
name,
type_to_cls_dict=self.type_to_loader_dict,
)
except ValueError as exc:
# raise ValueError("OutputParser not found") from exc
logger.error(f'OutputParser {name} not found: {exc}')
except AttributeError as exc:
logger.error(f'OutputParser {name} not loaded: {exc}')
return None
def to_list(self) -> List[str]:
return list(self.type_to_loader_dict.keys())
output_parser_creator = OutputParserCreator()
================================================
FILE: src/backend/bisheng/interface/prompts/__init__.py
================================================
from bisheng.interface.prompts.base import PromptCreator
__all__ = ['PromptCreator']
================================================
FILE: src/backend/bisheng/interface/prompts/base.py
================================================
from typing import Dict, List, Optional, Type
from bisheng.custom.customs import get_custom_nodes
from bisheng.interface.base import LangChainTypeCreator
from bisheng.interface.importing.utils import import_class
from bisheng.common.services.config_service import settings
from bisheng.template.frontend_node.prompts import PromptFrontendNode
from loguru import logger
from bisheng.utils.util import build_template_from_class
from langchain import prompts
class PromptCreator(LangChainTypeCreator):
type_name: str = 'prompts'
@property
def frontend_node_class(self) -> Type[PromptFrontendNode]:
return PromptFrontendNode
@property
def type_to_loader_dict(self) -> Dict:
if self.type_dict is None:
self.type_dict = {
prompt_name: import_class(f'langchain.prompts.{prompt_name}')
# if prompt_name is not lower case it is a class
for prompt_name in prompts.__all__
}
# Merge CUSTOM_PROMPTS into self.type_dict
from bisheng.interface.prompts.custom import CUSTOM_PROMPTS
self.type_dict.update(CUSTOM_PROMPTS)
# Now filter according to settings.prompts
self.type_dict = {
name: prompt
for name, prompt in self.type_dict.items()
if name in settings.prompts or settings.dev
}
return self.type_dict
def get_signature(self, name: str) -> Optional[Dict]:
try:
if name in get_custom_nodes(self.type_name).keys():
return get_custom_nodes(self.type_name)[name]
return build_template_from_class(name, self.type_to_loader_dict)
except ValueError as exc:
# raise ValueError("Prompt not found") from exc
logger.error(f'Prompt {name} not found: {exc}')
except AttributeError as exc:
logger.error(f'Prompt {name} not loaded: {exc}')
return None
def to_list(self) -> List[str]:
custom_prompts = get_custom_nodes('prompts')
# library_prompts = [
# prompt.__annotations__["return"].__name__
# for prompt in self.type_to_loader_dict.values()
# if prompt.__annotations__["return"].__name__ in settings.prompts
# or settings.dev
# ]
return list(self.type_to_loader_dict.keys()) + list(custom_prompts.keys())
prompt_creator = PromptCreator()
================================================
FILE: src/backend/bisheng/interface/prompts/custom.py
================================================
from typing import Dict, List, Optional, Type
from bisheng.interface.utils import extract_input_variables_from_prompt
from langchain.prompts import PromptTemplate
from pydantic import model_validator
# Steps to create a BaseCustomPrompt:
# 1. Create a prompt template that endes with:
# Current conversation:
# {history}
# Human: {input}
# {ai_prefix}:
# 2. Create a class that inherits from BaseCustomPrompt
# 3. Add the following class attributes:
# template: str = ""
# description: Optional[str]
# ai_prefix: Optional[str] = "{ai_prefix}"
# 3.1. The ai_prefix should be a value in input_variables
# SeriesCharacterPrompt is a working example
# If used in a LLMChain, with a Memory module, it will work as expected
# We should consider creating ConversationalChains that expose custom parameters
# That way it will be easier to create custom prompts
class BaseCustomPrompt(PromptTemplate):
template: str = ''
description: Optional[str]
ai_prefix: Optional[str]
@model_validator(mode='before')
@classmethod
def build_template(cls, values):
format_dict = {}
ai_prefix_format_dict = {}
for key in values.get('input_variables', []):
new_value = values.get(key, f'{{{key}}}')
format_dict[key] = new_value
if key in values['ai_prefix']:
ai_prefix_format_dict[key] = new_value
values['ai_prefix'] = values['ai_prefix'].format(**ai_prefix_format_dict)
values['template'] = values['template'].format(**format_dict)
values['template'] = values['template']
values['input_variables'] = extract_input_variables_from_prompt(
values['template']
)
return values
class SeriesCharacterPrompt(BaseCustomPrompt):
# Add a very descriptive description for the prompt generator
description: Optional[
str
] = 'A prompt that asks the AI to act like a character from a series.'
character: str
series: str
template: str = """I want you to act like {character} from {series}.
I want you to respond and answer like {character}. do not write any explanations. only answer like {character}.
You must know all of the knowledge of {character}.
Current conversation:
{history}
Human: {input}
{character}:"""
ai_prefix: str = '{character}'
input_variables: List[str] = ['character', 'series']
CUSTOM_PROMPTS: Dict[str, Type[BaseCustomPrompt]] = {
'SeriesCharacterPrompt': SeriesCharacterPrompt
}
================================================
FILE: src/backend/bisheng/interface/retrievers/__init__.py
================================================
================================================
FILE: src/backend/bisheng/interface/retrievers/base.py
================================================
from typing import Any, ClassVar, Dict, List, Optional, Type
from bisheng.interface.base import LangChainTypeCreator
from bisheng.interface.importing.utils import import_class
from bisheng.common.services.config_service import settings
from bisheng.template.frontend_node.retrievers import RetrieverFrontendNode
from loguru import logger
from bisheng.utils.util import build_template_from_class, build_template_from_method
from bisheng_langchain import retrievers as bisheng_retrievers
from langchain.retrievers import MultiQueryRetriever
from langchain_community import retrievers
class RetrieverCreator(LangChainTypeCreator):
type_name: str = 'retrievers'
from_method_nodes: ClassVar[Dict] = {
'MultiQueryRetriever': 'from_llm',
'ZepRetriever': '__init__'
}
@property
def frontend_node_class(self) -> Type[RetrieverFrontendNode]:
return RetrieverFrontendNode
@property
def type_to_loader_dict(self) -> Dict:
if self.type_dict is None:
self.type_dict: dict[str, Any] = {
retriever_name: import_class(f'langchain_community.retrievers.{retriever_name}')
for retriever_name in retrievers.__all__
}
self.type_dict.update({
retriever_name:
import_class(f'bisheng_langchain.retrievers.{retriever_name}')
for retriever_name in bisheng_retrievers.__all__
})
self.type_dict['MultiQueryRetriever'] = MultiQueryRetriever
return self.type_dict
def get_signature(self, name: str) -> Optional[Dict]:
"""Get the signature of an embedding."""
try:
if name in self.from_method_nodes:
return build_template_from_method(
name,
type_to_cls_dict=self.type_to_loader_dict,
method_name=self.from_method_nodes[name],
)
else:
return build_template_from_class(name, type_to_cls_dict=self.type_to_loader_dict)
except ValueError as exc:
raise ValueError(f'Retriever {name} not found') from exc
except AttributeError as exc:
logger.error(f'Retriever {name} not loaded: {exc}')
return None
def to_list(self) -> List[str]:
return [
retriever for retriever in self.type_to_loader_dict.keys()
if retriever in settings.retrievers or settings.dev
]
retriever_creator = RetrieverCreator()
================================================
FILE: src/backend/bisheng/interface/run.py
================================================
from typing import Dict, Optional, Tuple, Union
from uuid import UUID
from bisheng.core.cache.utils import memoize_dict
from bisheng.graph import Graph
from loguru import logger
@memoize_dict(maxsize=10)
def build_langchain_object_with_caching(data_graph):
"""
Build langchain object from data_graph.
"""
logger.debug('Building langchain object')
graph = Graph.from_payload(data_graph)
return graph.build()
@memoize_dict(maxsize=10)
def build_sorted_vertices_with_caching(data_graph):
"""
Build langchain object from data_graph.
"""
logger.debug('Building langchain object')
graph = Graph.from_payload(data_graph)
sorted_vertices = graph.topological_sort()
artifacts = {}
for vertex in sorted_vertices:
vertex.build()
if vertex.artifacts:
artifacts.update(vertex.artifacts)
root = graph.build()
langchain_object = next((node for node in root if node.base_type != 'inputOutput'), None)
return langchain_object.build(), artifacts
def build_langchain_object(data_graph):
"""
Build langchain object from data_graph.
"""
logger.debug('Building langchain object')
nodes = data_graph['nodes']
# Add input variables
# nodes = payload.extract_input_variables(nodes)
# Nodes, edges and root node
edges = data_graph['edges']
graph = Graph(nodes, edges)
return graph.build()
async def build_sorted_vertices(data_graph,
user_id: Optional[Union[str, UUID]] = None) -> Tuple[Graph, Dict]:
"""
Build langchain object from data_graph.
"""
logger.debug('Building langchain object')
graph = Graph.from_payload(data_graph)
sorted_vertices = graph.topological_sort()
artifacts = {}
for vertex in sorted_vertices:
vertex.build()
if vertex.artifacts:
artifacts.update(vertex.artifacts)
return graph, artifacts
def get_memory_key(langchain_object):
"""
Given a LangChain object, this function retrieves the current memory key from the object's memory attribute.
It then checks if the key exists in a dictionary of known memory keys and returns the corresponding key,
or None if the current key is not recognized.
"""
mem_key_dict = {
'chat_history': 'history',
'history': 'chat_history',
}
memory_key = langchain_object.memory.memory_key
return mem_key_dict.get(memory_key)
def update_memory_keys(langchain_object, possible_new_mem_key):
"""
Given a LangChain object and a possible new memory key, this function updates the input and output keys in the
object's memory attribute to exclude the current memory key and the possible new key. It then sets the memory key
to the possible new key.
"""
input_key = [
key for key in langchain_object.input_keys
if key not in [langchain_object.memory.memory_key, possible_new_mem_key]
][0]
output_key = [
key for key in langchain_object.output_keys
if key not in [langchain_object.memory.memory_key, possible_new_mem_key]
][0]
keys = [input_key, output_key, possible_new_mem_key]
attrs = ['input_key', 'output_key', 'memory_key']
for key, attr in zip(keys, attrs):
try:
setattr(langchain_object.memory, attr, key)
except ValueError as exc:
logger.debug(f'{langchain_object.memory} has no attribute {attr} ({exc})')
================================================
FILE: src/backend/bisheng/interface/text_splitters/__init__.py
================================================
from bisheng.interface.text_splitters.base import TextSplitterCreator
__all__ = ['TextSplitterCreator']
================================================
FILE: src/backend/bisheng/interface/text_splitters/base.py
================================================
from typing import Dict, List, Optional, Type
from bisheng.interface.base import LangChainTypeCreator
from bisheng.interface.custom_lists import textsplitter_type_to_cls_dict
from bisheng.common.services.config_service import settings
from bisheng.template.frontend_node.textsplitters import \
TextSplittersFrontendNode
from loguru import logger
from bisheng.utils.util import build_template_from_class
class TextSplitterCreator(LangChainTypeCreator):
type_name: str = 'textsplitters'
@property
def frontend_node_class(self) -> Type[TextSplittersFrontendNode]:
return TextSplittersFrontendNode
@property
def type_to_loader_dict(self) -> Dict:
return textsplitter_type_to_cls_dict
def get_signature(self, name: str) -> Optional[Dict]:
"""Get the signature of a text splitter."""
try:
return build_template_from_class(name, textsplitter_type_to_cls_dict)
except ValueError as exc:
raise ValueError(f'Text Splitter {name} not found') from exc
except AttributeError as exc:
logger.error(f'Text Splitter {name} not loaded: {exc}')
return None
def to_list(self) -> List[str]:
return [
textsplitter.__name__
for textsplitter in self.type_to_loader_dict.values()
if textsplitter.__name__ in settings.textsplitters or settings.dev
]
textsplitter_creator = TextSplitterCreator()
================================================
FILE: src/backend/bisheng/interface/toolkits/__init__.py
================================================
================================================
FILE: src/backend/bisheng/interface/toolkits/base.py
================================================
from typing import Callable, Dict, List, Optional
from bisheng.interface.base import LangChainTypeCreator
from bisheng.interface.importing.utils import import_class, import_module
from bisheng.common.services.config_service import settings
from loguru import logger
from bisheng.utils.util import build_template_from_class
from langchain.agents.agent_toolkits.vectorstore.toolkit import (VectorStoreInfo,
VectorStoreRouterToolkit,
VectorStoreToolkit)
from langchain_community import agent_toolkits
class ToolkitCreator(LangChainTypeCreator):
type_name: str = 'toolkits'
all_types: List[str] = agent_toolkits.__all__
create_functions: Dict = {
'JsonToolkit': [],
'SQLDatabaseToolkit': [],
'OpenAPIToolkit': ['create_openapi_agent'],
'VectorStoreToolkit': [
'create_vectorstore_agent',
'create_vectorstore_router_agent',
'VectorStoreInfo',
],
'ZapierToolkit': [],
'PandasToolkit': ['create_pandas_dataframe_agent'],
'CSVToolkit': ['create_csv_agent'],
}
@property
def type_to_loader_dict(self) -> Dict:
if self.type_dict is None:
self.type_dict = {
toolkit_name: import_class(f'langchain_community.agent_toolkits.{toolkit_name}')
# if toolkit_name is not lower case it is a class
for toolkit_name in agent_toolkits.__all__
if not toolkit_name.islower() and toolkit_name in settings.toolkits
}
self.type_dict.update({
'VectorStoreToolkit': VectorStoreToolkit,
'VectorStoreInfo': VectorStoreInfo,
'VectorStoreRouterToolkit': VectorStoreRouterToolkit
})
return self.type_dict
def get_signature(self, name: str) -> Optional[Dict]:
try:
template = build_template_from_class(name, self.type_to_loader_dict)
# add Tool to base_classes
if 'toolkit' in name.lower() and template:
template['base_classes'].append('Tool')
return template
except ValueError as exc:
raise ValueError('Toolkit not found') from exc
except AttributeError as exc:
logger.error(f'Toolkit {name} not loaded: {exc}')
return None
def to_list(self) -> List[str]:
return list(self.type_to_loader_dict.keys())
def get_create_function(self, name: str) -> Callable:
if loader_name := self.create_functions.get(name):
return import_module(
f'from langchain_community.agent_toolkits import {loader_name[0]}')
else:
raise ValueError('Toolkit not found')
def has_create_function(self, name: str) -> bool:
# check if the function list is not empty
return bool(self.create_functions.get(name, None))
toolkits_creator = ToolkitCreator()
================================================
FILE: src/backend/bisheng/interface/toolkits/custom.py
================================================
================================================
FILE: src/backend/bisheng/interface/tools/__init__.py
================================================
from bisheng.interface.tools.base import ToolCreator
__all__ = ['ToolCreator']
================================================
FILE: src/backend/bisheng/interface/tools/base.py
================================================
from typing import Dict, List, Optional
from bisheng.custom import customs
from bisheng.interface.base import LangChainTypeCreator
from bisheng.interface.tools.constants import ALL_TOOLS_NAMES, CUSTOM_TOOLS, FILE_TOOLS, OTHER_TOOLS
from bisheng.interface.tools.util import get_tool_params
from bisheng.common.services.config_service import settings
from bisheng.template.field.base import TemplateField
from bisheng.template.template.base import Template
from bisheng.utils import util
from bisheng.utils.util import build_template_from_class
from langchain_community.agent_toolkits.load_tools import _EXTRA_LLM_TOOLS, _EXTRA_OPTIONAL_TOOLS, _LLM_TOOLS
TOOL_INPUTS = {
'str':
TemplateField(
field_type='str',
required=True,
is_list=False,
show=True,
placeholder='',
value='',
),
'llm':
TemplateField(field_type='BaseLanguageModel', required=True, is_list=False, show=True),
'func':
TemplateField(
field_type='function',
required=True,
is_list=False,
show=True,
multiline=True,
),
'code':
TemplateField(
field_type='str',
required=True,
is_list=False,
show=True,
value='',
multiline=True,
),
'path':
TemplateField(
field_type='file',
required=True,
is_list=False,
show=True,
value='',
suffixes=['.json', '.yaml', '.yml'],
fileTypes=['json', 'yaml', 'yml'],
),
}
class ToolCreator(LangChainTypeCreator):
type_name: str = 'tools'
tools_dict: Optional[Dict] = None
@property
def type_to_loader_dict(self) -> Dict:
if self.tools_dict is None:
all_tools = {}
for tool, tool_fcn in ALL_TOOLS_NAMES.items():
tool_params = get_tool_params(tool_fcn)
tool_name = tool_params.get('name') or tool
if tool_name in settings.tools or settings.dev:
if tool_name == 'JsonSpec':
tool_params['path'] = tool_params.pop('dict_') # type: ignore
all_tools[tool_name] = {
'type': tool,
'params': tool_params,
'fcn': tool_fcn,
}
self.tools_dict = all_tools
return self.tools_dict
def get_signature(self, name: str) -> Optional[Dict]:
"""Get the signature of a tool."""
base_classes = ['Tool', 'BaseTool']
fields = []
params = []
tool_params = {}
# Raise error if name is not in tools
if name not in self.type_to_loader_dict.keys():
raise ValueError('Tool not found')
tool_type: str = self.type_to_loader_dict[name]['type'] # type: ignore
# if tool_type in _BASE_TOOLS.keys():
# params = []
if tool_type in _LLM_TOOLS.keys():
params = ['llm']
elif tool_type in _EXTRA_LLM_TOOLS.keys():
extra_keys = _EXTRA_LLM_TOOLS[tool_type][1]
params = ['llm'] + extra_keys
elif tool_type in _EXTRA_OPTIONAL_TOOLS.keys():
extra_keys = _EXTRA_OPTIONAL_TOOLS[tool_type][1]
params = extra_keys
# elif tool_type == "Tool":
# params = ["name", "description", "func"]
elif tool_type in CUSTOM_TOOLS:
# Get custom tool params
params = self.type_to_loader_dict[name]['params'] # type: ignore
base_classes = ['function']
if node := customs.get_custom_nodes('tools').get(tool_type):
return node
elif tool_type in FILE_TOOLS:
params = self.type_to_loader_dict[name]['params'] # type: ignore
base_classes += [name]
elif tool_type in OTHER_TOOLS:
tool_dict = build_template_from_class(tool_type, OTHER_TOOLS)
fields = tool_dict['template']
# Pop unnecessary fields and add name
fields.pop('_type') # type: ignore
fields.pop('return_direct', None) # type: ignore
fields.pop('verbose', None) # type: ignore
tool_params = {
'name': fields.pop('name')['value'], # type: ignore
'description': fields.pop('description')['value'], # type: ignore
}
fields = [
TemplateField(name=name, field_type=field['type'], **field)
for name, field in fields.items() # type: ignore
]
base_classes += tool_dict['base_classes']
# Copy the field and add the name
for param in params:
field = TOOL_INPUTS.get(param, TOOL_INPUTS['str']).copy()
field.name = param
field.advanced = False
if param == 'aiosession':
field.show = False
field.required = False
fields.append(field)
template = Template(fields=fields, type_name=tool_type)
# add describe
template.add_field(
TemplateField(
field_type='NestedDict',
required=True,
placeholder='',
show=True,
multiline=True,
value='{"arg1": {"type": "string"}}',
name='args_schema',
), )
tool_params = {**tool_params, **self.type_to_loader_dict[name]['params']}
return {
'template': util.format_dict(template.to_dict()),
**tool_params,
'base_classes': base_classes,
}
def to_list(self) -> List[str]:
"""List all load tools"""
return list(self.type_to_loader_dict.keys())
tool_creator = ToolCreator()
================================================
FILE: src/backend/bisheng/interface/tools/constants.py
================================================
from bisheng.interface.importing.utils import import_class
from bisheng.interface.tools.custom import PythonFunction, PythonFunctionTool
from langchain_community.tools import Tool
from langchain_community.agent_toolkits.load_tools import (_BASE_TOOLS, _EXTRA_LLM_TOOLS, _EXTRA_OPTIONAL_TOOLS,
_LLM_TOOLS)
from langchain_community import tools
from langchain_community.tools.json.tool import JsonSpec
from langchain_experimental import tools as python_tools
FILE_TOOLS = {'JsonSpec': JsonSpec}
CUSTOM_TOOLS = {
'Tool': Tool,
'PythonFunctionTool': PythonFunctionTool,
'PythonFunction': PythonFunction,
}
OTHER_TOOLS = {tool: import_class(f'langchain_community.tools.{tool}') for tool in tools.__all__}
PYTHON_TOOLS = {
tool: import_class(f'langchain_experimental.tools.{tool}')
for tool in python_tools.__all__
}
ALL_TOOLS_NAMES = {
**_BASE_TOOLS,
**_LLM_TOOLS, # type: ignore
**{
k: v[0]
for k, v in _EXTRA_LLM_TOOLS.items()
}, # type: ignore
**{
k: v[0]
for k, v in _EXTRA_OPTIONAL_TOOLS.items()
},
**CUSTOM_TOOLS,
**FILE_TOOLS, # type: ignore
**OTHER_TOOLS,
**PYTHON_TOOLS
}
================================================
FILE: src/backend/bisheng/interface/tools/custom.py
================================================
from typing import Callable, Optional
from bisheng.interface.importing.utils import get_function
from bisheng.utils import validate
from langchain_community.tools import Tool
from pydantic import field_validator, BaseModel
class Function(BaseModel):
code: str
function: Optional[Callable] = None
imports: Optional[str] = None
# Eval code and store the function
def __init__(self, **data):
super().__init__(**data)
# Validate the function
@field_validator('code')
@classmethod
def validate_func(cls, v):
try:
validate.eval_function(v)
except Exception as e:
raise e
return v
def get_function(self):
"""Get the function"""
function_name = validate.extract_function_name(self.code)
return validate.create_function(self.code, function_name)
class PythonFunctionTool(Tool):
"""Python function"""
name: str = 'Custom Tool'
description: str
code: str
def ___init__(self, name: str, description: str, code: str):
self.name = name
self.description = description
self.code = code
self.func = get_function(self.code)
super().__init__(name=name, description=description, func=self.func)
class PythonFunction(Function):
"""Python function"""
code: str
================================================
FILE: src/backend/bisheng/interface/tools/util.py
================================================
import ast
import inspect
import textwrap
from typing import Dict, Union
from langchain_community.tools import Tool
def get_func_tool_params(func, **kwargs) -> Union[Dict, None]:
tree = ast.parse(inspect.getsource(func))
# Iterate over the statements in the abstract syntax tree
for node in ast.walk(tree):
# Find the first return statement
if isinstance(node, ast.Return):
tool = node.value
if isinstance(tool, ast.Call):
if isinstance(tool.func, ast.Name) and tool.func.id == 'Tool':
if tool.keywords:
tool_params = {}
for keyword in tool.keywords:
if keyword.arg == 'name':
try:
tool_params['name'] = ast.literal_eval(keyword.value)
except ValueError:
break
elif keyword.arg == 'description':
try:
tool_params['description'] = ast.literal_eval(keyword.value)
except ValueError:
continue
return tool_params
return {
'name': ast.literal_eval(tool.args[0]),
'description': ast.literal_eval(tool.args[2]),
}
#
else:
# get the class object from the return statement
try:
class_obj = eval(compile(ast.Expression(tool), '', 'eval'))
except Exception:
return None
return {
'name': getattr(class_obj, 'name'),
'description': getattr(class_obj, 'description'),
}
# Return None if no return statement was found
return None
def get_class_tool_params(cls, **kwargs) -> Union[Dict, None]:
tree = ast.parse(textwrap.dedent(inspect.getsource(cls)))
tool_params = {}
# Iterate over the statements in the abstract syntax tree
for node in ast.walk(tree):
if isinstance(node, ast.ClassDef):
# Find the class definition and look for methods
for stmt in node.body:
if isinstance(stmt, ast.FunctionDef) and stmt.name == '__init__':
# There is no assignment statements in the __init__ method
# So we need to get the params from the function definition
for arg in stmt.args.args:
if arg.arg == 'name':
# It should be the name of the class
tool_params[arg.arg] = cls.__name__
elif arg.arg == 'self':
continue
# If there is not default value, set it to an empty string
else:
try:
annotation = ast.literal_eval(arg.annotation) # type: ignore
tool_params[arg.arg] = annotation
except ValueError:
tool_params[arg.arg] = ''
# Get the attribute name and the annotation
elif cls != Tool and isinstance(stmt, ast.AnnAssign):
# Get the attribute name and the annotation
tool_params[stmt.target.id] = '' # type: ignore
return tool_params
def get_tool_params(tool, **kwargs) -> Dict:
# Parse the function code into an abstract syntax tree
# Define if it is a function or a class
if inspect.isfunction(tool):
return get_func_tool_params(tool, **kwargs) or {}
elif inspect.isclass(tool):
# Get the parameters necessary to
# instantiate the class
return get_class_tool_params(tool, **kwargs) or {}
else:
raise ValueError('Tool must be a function or class.')
================================================
FILE: src/backend/bisheng/interface/types.py
================================================
from pathlib import Path
from bisheng.interface.agents.base import agent_creator
from bisheng.interface.autogenRole.base import autogenrole_creator
from bisheng.interface.chains.base import chain_creator
from bisheng.interface.custom.directory_reader.utils import merge_nested_dicts_with_renaming
from bisheng.interface.custom.utils import build_custom_components
from bisheng.interface.document_loaders.base import documentloader_creator
from bisheng.interface.embeddings.base import embedding_creator
from bisheng.interface.inputoutput.base import input_output_creator
from bisheng.interface.llms.base import llm_creator
from bisheng.interface.memories.base import memory_creator
from bisheng.interface.output_parsers.base import output_parser_creator
from bisheng.interface.prompts.base import prompt_creator
from bisheng.interface.retrievers.base import retriever_creator
from bisheng.interface.text_splitters.base import textsplitter_creator
from bisheng.interface.toolkits.base import toolkits_creator
from bisheng.interface.tools.base import tool_creator
from bisheng.interface.utilities.base import utility_creator
from bisheng.interface.vector_store.base import vectorstore_creator
from bisheng.interface.wrappers.base import wrapper_creator
from cachetools import LRUCache, cached
def get_type_list():
"""Get a list of all langchain types"""
all_types = build_langchain_types_dict()
# all_types.pop("tools")
for key, value in all_types.items():
all_types[key] = [item['template']['_type'] for item in value.values()]
return all_types
@cached(LRUCache(maxsize=1))
def build_langchain_types_dict(): # sourcery skip: dict-assign-update-to-union
"""Build a dictionary of all langchain types"""
all_types = {}
creators = [
chain_creator,
agent_creator,
prompt_creator,
llm_creator,
memory_creator,
tool_creator,
toolkits_creator,
wrapper_creator,
embedding_creator,
vectorstore_creator,
documentloader_creator,
textsplitter_creator,
utility_creator,
output_parser_creator,
retriever_creator,
input_output_creator,
autogenrole_creator,
]
all_types = {}
for creator in creators:
created_types = creator.to_dict()
if created_types[creator.type_name].values():
all_types.update(created_types)
return all_types
langchain_types_dict = build_langchain_types_dict()
def get_all_types_dict():
"""Get all types dictionary combining native and custom components."""
BASE_COMPONENTS_PATH = str(Path(__file__).parent.parent / 'components')
native_components = build_langchain_types_dict()
custom_components_from_file = build_custom_components([BASE_COMPONENTS_PATH])
return merge_nested_dicts_with_renaming(native_components, custom_components_from_file)
# return native_components
================================================
FILE: src/backend/bisheng/interface/utilities/__init__.py
================================================
================================================
FILE: src/backend/bisheng/interface/utilities/base.py
================================================
from typing import Dict, List, Optional, Type
from bisheng.custom.customs import get_custom_nodes
from bisheng.interface.base import LangChainTypeCreator
from bisheng.interface.importing.utils import import_class
from bisheng.common.services.config_service import settings
from bisheng.template.frontend_node.utilities import UtilitiesFrontendNode
from loguru import logger
from bisheng.utils.util import build_template_from_class
from langchain_community import utilities
from langchain_community.utilities.sql_database import SQLDatabase
class UtilityCreator(LangChainTypeCreator):
type_name: str = 'utilities'
@property
def frontend_node_class(self) -> Type[UtilitiesFrontendNode]:
return UtilitiesFrontendNode
@property
def type_to_loader_dict(self) -> Dict:
"""
Returns a dictionary mapping utility names to their corresponding loader classes.
If the dictionary has not been created yet, it is created by importing all utility classes
from the langchain.chains module and filtering them according to the settings.utilities list.
"""
if self.type_dict is None:
self.type_dict = {
utility_name: import_class(f'langchain_community.utilities.{utility_name}')
for utility_name in utilities.__all__
}
self.type_dict['SQLDatabase'] = SQLDatabase
# Filter according to settings.utilities
self.type_dict = {
name: utility
for name, utility in self.type_dict.items()
if name in settings.utilities or settings.dev
}
return self.type_dict
def get_signature(self, name: str) -> Optional[Dict]:
"""Get the signature of a utility."""
try:
custom_nodes = get_custom_nodes(self.type_name)
if name in custom_nodes.keys():
return custom_nodes[name]
return build_template_from_class(name, self.type_to_loader_dict)
except ValueError as exc:
raise ValueError(f'Utility {name} not found') from exc
except AttributeError as exc:
logger.error(f'Utility {name} not loaded: {exc}')
return None
def to_list(self) -> List[str]:
return list(self.type_to_loader_dict.keys())
utility_creator = UtilityCreator()
================================================
FILE: src/backend/bisheng/interface/utils.py
================================================
import base64
import json
import os
import re
from io import BytesIO
import yaml
from PIL.Image import Image
from langchain.base_language import BaseLanguageModel
from bisheng.chat.config import ChatConfig
from bisheng.common.services.config_service import settings
def load_file_into_dict(file_path: str) -> dict:
if not os.path.exists(file_path):
raise FileNotFoundError(f'File not found: {file_path}')
# Files names are UUID, so we can't find the extension
with open(file_path, 'r') as file:
try:
data = json.load(file)
except json.JSONDecodeError:
file.seek(0)
data = yaml.safe_load(file)
except ValueError as exc:
raise ValueError('Invalid file type. Expected .json or .yaml.') from exc
return data
def pil_to_base64(image: Image) -> str:
buffered = BytesIO()
image.save(buffered, format='PNG')
img_str = base64.b64encode(buffered.getvalue())
return img_str.decode('utf-8')
def try_setting_streaming_options(langchain_object, websocket):
# If the LLM type is OpenAI or ChatOpenAI,
# set streaming to True
# First we need to find the LLM
llm = None
if hasattr(langchain_object, 'llm'):
llm = langchain_object.llm
elif hasattr(langchain_object, 'llm_chain') and hasattr(langchain_object.llm_chain, 'llm'):
llm = langchain_object.llm_chain.llm
if isinstance(llm, BaseLanguageModel):
if hasattr(llm, 'streaming') and isinstance(llm.streaming, bool):
llm.streaming = settings.get_from_db('llm_request').get(
'stream') if 'stream' in settings.get_from_db(
'llm_request') else ChatConfig.streaming
elif hasattr(llm, 'stream') and isinstance(llm.stream, bool):
llm.stream = settings.get_from_db('llm_request').get(
'stream') if 'stream' in settings.get_from_db(
'llm_request') else ChatConfig.streaming
return langchain_object
def extract_input_variables_from_prompt(prompt: str) -> list[str]:
"""Extract input variables from prompt."""
return re.findall(r'{(.*?)}', prompt)
================================================
FILE: src/backend/bisheng/interface/vector_store/__init__.py
================================================
================================================
FILE: src/backend/bisheng/interface/vector_store/base.py
================================================
from typing import Any, Dict, List, Optional, Type
from bisheng.interface.base import LangChainTypeCreator
from bisheng.interface.importing.utils import import_class
from bisheng.interface.vector_store.constants import CUSTOM_VECTORSTORE
from bisheng.common.services.config_service import settings
from bisheng.template.frontend_node.vectorstores import VectorStoreFrontendNode
from loguru import logger
from bisheng.utils.util import build_template_from_method
from bisheng_langchain import vectorstores as contribute_vectorstores
from langchain_community import vectorstores
class VectorstoreCreator(LangChainTypeCreator):
type_name: str = 'vectorstores'
@property
def frontend_node_class(self) -> Type[VectorStoreFrontendNode]:
return VectorStoreFrontendNode
@property
def type_to_loader_dict(self) -> Dict:
if self.type_dict is None:
self.type_dict: dict[str, Any] = {
vectorstore_name:
import_class(f'langchain_community.vectorstores.{vectorstore_name}')
for vectorstore_name in vectorstores.__all__
if vectorstore_name != 'Milvus' # use bisheng_langchain
}
self.type_dict.update({
vectorstore_name:
import_class(f'bisheng_langchain.vectorstores.{vectorstore_name}')
for vectorstore_name in contribute_vectorstores.__all__
})
self.type_dict.update(CUSTOM_VECTORSTORE)
return self.type_dict
def get_signature(self, name: str) -> Optional[Dict]:
"""Get the signature of an embedding."""
try:
return build_template_from_method(
name,
type_to_cls_dict=self.type_to_loader_dict,
method_name='from_texts',
)
except ValueError as exc:
raise ValueError(f'Vector Store {name} not found') from exc
except AttributeError as exc:
logger.error(f'Vector Store {name} not loaded: {exc}')
return None
def to_list(self) -> List[str]:
return [
vectorstore for vectorstore in self.type_to_loader_dict.keys()
if vectorstore in settings.vectorstores or settings.dev
]
vectorstore_creator = VectorstoreCreator()
================================================
FILE: src/backend/bisheng/interface/vector_store/constants.py
================================================
from bisheng.interface.vector_store.custom import MilvusWithPermissionCheck, ElasticsearchWithPermissionCheck
CUSTOM_VECTORSTORE = {
'MilvusWithPermissionCheck': MilvusWithPermissionCheck,
'ElasticsearchWithPermissionCheck': ElasticsearchWithPermissionCheck
}
================================================
FILE: src/backend/bisheng/interface/vector_store/custom.py
================================================
from abc import ABC
from ast import literal_eval
from typing import TYPE_CHECKING, Any, Callable, Dict, Iterable, List, Optional, Tuple
import jieba
from langchain.chains.llm import LLMChain
from langchain.docstore.document import Document
from langchain.embeddings.base import Embeddings
from langchain.utils import get_from_dict_or_env
from langchain.vectorstores.base import VectorStore
from langchain_community.vectorstores.milvus import Milvus as MilvusLangchain
from langchain_core.language_models import BaseLLM
from langchain_core.prompts import PromptTemplate
from loguru import logger
from bisheng_langchain.vectorstores.elastic_keywords_search import DEFAULT_PROMPT
from bisheng_langchain.vectorstores.milvus import DEFAULT_MILVUS_CONNECTION
if TYPE_CHECKING:
from elasticsearch import Elasticsearch # noqa: F401
class MilvusWithPermissionCheck(MilvusLangchain):
"""
only support multi collection search, but all collection must have same fields
not include create collection
"""
def __init__(self,
embedding_function: Embeddings,
collection_name: list[str] = None,
collection_embeddings: list[Embeddings] = None,
connection_args: Optional[dict[str, Any]] = None,
consistency_level: str = 'Session',
index_params: Optional[dict] = None,
search_params: Optional[dict] = None,
drop_old: Optional[bool] = False,
*,
primary_field: str = 'pk',
text_field: str = 'text',
vector_field: str = 'vector',
partition_field: str = 'knowledge_id',
**kwargs: Any):
"""Initialize the Milvus vector store."""
try:
from pymilvus import Collection, utility
except ImportError:
raise ValueError('Could not import pymilvus python package. '
'Please install it with `pip install pymilvus`.')
# Default search params when one is not provided.
self.default_search_params = {
'IVF_FLAT': {
'metric_type': 'L2',
'params': {
'nprobe': 10
}
},
'IVF_SQ8': {
'metric_type': 'L2',
'params': {
'nprobe': 10
}
},
'IVF_PQ': {
'metric_type': 'L2',
'params': {
'nprobe': 10
}
},
'HNSW': {
'metric_type': 'L2',
'params': {
'ef': 100
}
},
'RHNSW_FLAT': {
'metric_type': 'L2',
'params': {
'ef': 10
}
},
'RHNSW_SQ': {
'metric_type': 'L2',
'params': {
'ef': 10
}
},
'RHNSW_PQ': {
'metric_type': 'L2',
'params': {
'ef': 10
}
},
'IVF_HNSW': {
'metric_type': 'L2',
'params': {
'nprobe': 10,
'ef': 10
}
},
'ANNOY': {
'metric_type': 'L2',
'params': {
'search_k': 10
}
},
'AUTOINDEX': {
'metric_type': 'L2',
'params': {}
},
}
self.embedding_func = embedding_function
self.collection_name = collection_name
self.index_params = index_params
self.search_params = search_params
self.consistency_level = consistency_level
self.connection_args = connection_args
# In order for a collection to be compatible, pk needs to be auto'id and int
self._primary_field = primary_field
# In order for compatiblility, the text field will need to be called "text"
self._text_field = text_field
# In order for compatibility, the vector field needs to be called "vector"
self._vector_field = vector_field
# partion key for multi-tenancy
self._partition_field = partition_field
# if collection_name is None or collection_name.__len__() == 0:
# raise ValueError('collection_name cannot be empty, please provide at least one collection name.')
self.fields: list[str] = []
# Create the connection to the server
if connection_args is None:
connection_args = DEFAULT_MILVUS_CONNECTION
self.alias = self._create_connection_alias(connection_args)
self.col: Optional[List[Collection]] = []
self.col_partition_key: Optional[List[str]] = []
self.collection_embeddings = collection_embeddings
# not used
self.drop_old = drop_old
# Grab the existing collection if it exists
try:
for index, one_collection_name in enumerate(self.collection_name):
if utility.has_collection(one_collection_name, using=self.alias):
self.col.append(Collection(
one_collection_name,
using=self.alias,
))
self.col_partition_key.append(kwargs.get('partition_keys')[index])
except Exception as e:
logger.error(f'milvus operating error={str(e)}')
self.close_connection(self.alias)
raise e
if not self.col:
logger.warning('No collection found, please confirm user have knowledge access')
# raise ValueError("No collection found, please confirm collection name correctly.")
# Initialize the vector store
self._init()
def close_connection(self, using):
logger.warning(f'forbidden close milvus connection: {using}, because alias can be reused by others threads')
def _init(
self,
embeddings: Optional[list] = None,
metadatas: Optional[list[dict]] = None,
partition_names: Optional[list] = None,
replica_number: int = 1,
timeout: Optional[float] = None,
) -> None:
self._extract_fields(col_index=0)
self._create_search_params()
self._load()
def _extract_fields(self, col_index=0) -> None:
"""Grab the existing fields from the Collection"""
from pymilvus import Collection
if not self.col:
return
if isinstance(self.col[col_index], Collection):
schema = self.col[col_index].schema
for x in schema.fields:
self.fields.append(x.name)
# Since primary field is auto-id, no need to track it
self.fields.remove(self._primary_field)
def _create_search_params(self, col_index=0) -> None:
"""Generate search params based on the current index type"""
from pymilvus import Collection
if not self.col:
return
if isinstance(self.col[col_index], Collection) and self.search_params is None:
index = self._get_index(col_index)
if index is not None:
index_type: str = index['index_param']['index_type']
metric_type: str = index['index_param']['metric_type']
self.search_params = self.default_search_params[index_type]
self.search_params['metric_type'] = metric_type
def _get_index(self, col_index=0) -> Optional[dict[str, Any]]:
"""Return the vector index information if it exists"""
from pymilvus import Collection
if not self.col:
return
if isinstance(self.col[col_index], Collection):
for x in self.col[col_index].indexes:
if x.field_name == self._vector_field:
return x.to_dict()
return None
def _load(self) -> None:
"""Load the collection if available."""
from pymilvus import Collection
# Load allcollection
for i, col in enumerate(self.col):
if isinstance(col, Collection) and self._get_index(col_index=i) is not None:
col.load()
@classmethod
def from_texts(
cls,
texts: List[str],
embedding: Embeddings,
metadatas: Optional[List[dict]] = None,
collection_name: list[str] = None,
connection_args: dict[str, Any] = DEFAULT_MILVUS_CONNECTION,
consistency_level: str = 'Session',
index_params: Optional[dict] = None,
search_params: Optional[dict] = None,
drop_old: bool = False,
no_embedding: bool = False,
**kwargs: Any,
):
"""
no insert data into milvus, only search from milvus
"""
vector_db = cls(
embedding_function=embedding,
collection_name=collection_name,
connection_args=connection_args,
consistency_level=consistency_level,
index_params=index_params,
search_params=search_params,
drop_old=drop_old,
**kwargs,
)
return vector_db
def similarity_search(
self,
query: str,
k: int = 4,
param: Optional[dict] = None,
expr: Optional[str] = None,
timeout: Optional[int] = None,
**kwargs: Any,
) -> List[Document]:
"""Perform a similarity search against the query string.
Args:
query (str): The text to search.
k (int, optional): How many results to return. Defaults to 4.
param (dict, optional): The search params for the index type.
Defaults to None.
expr (str, optional): Filtering expression. Defaults to None.
timeout (int, optional): How long to wait before timeout error.
Defaults to None.
kwargs: Collection.search() keyword arguments.
Returns:
List[Document]: Document results for search.
"""
res = self.similarity_search_with_score(query=query,
k=k,
param=param,
expr=expr,
timeout=timeout,
**kwargs)
return [doc for doc, _ in res]
def similarity_search_by_vector(
self,
embedding: List[float],
k: int = 4,
param: Optional[dict] = None,
expr: Optional[str] = None,
timeout: Optional[int] = None,
**kwargs: Any,
) -> List[Document]:
"""Perform a similarity search against the query string.
Args:
embedding (List[float]): The embedding vector to search.
k (int, optional): How many results to return. Defaults to 4.
param (dict, optional): The search params for the index type.
Defaults to None.
expr (str, optional): Filtering expression. Defaults to None.
timeout (int, optional): How long to wait before timeout error.
Defaults to None.
kwargs: Collection.search() keyword arguments.
Returns:
List[Document]: Document results for search.
"""
res = self.similarity_search_with_score_by_vector(embedding=embedding,
k=k,
param=param,
expr=expr,
timeout=timeout,
**kwargs)
return [doc for doc, _ in res]
def similarity_search_with_score(
self,
query: str,
k: int = 4,
param: Optional[dict] = None,
expr: Optional[str] = None,
timeout: Optional[int] = None,
**kwargs: Any,
) -> List[Tuple[Document, float]]:
"""Perform a search on a query string and return results with score.
For more information about the search parameters, take a look at the pymilvus
documentation found here:
https://milvus.io/api-reference/pymilvus/v2.2.6/Collection/search().md
Args:
query (str): The text being searched.
k (int, optional): The amount of results to return. Defaults to 4.
param (dict): The search params for the specified index.
Defaults to None.
expr (str, optional): Filtering expression. Defaults to None.
timeout (int, optional): How long to wait before timeout error.
Defaults to None.
kwargs: Collection.search() keyword arguments.
Returns:
List[float], List[Tuple[Document, any, any]]:
"""
if k == 0:
# pm need to control
return []
if not self.col:
logger.debug('No existing collection to search.')
return []
# Embed the query text.
embedding = self.embedding_func.embed_query(query)
res = self.similarity_search_with_score_by_vector(embedding=embedding,
k=k,
query=query,
param=param,
expr=expr,
timeout=timeout,
**kwargs)
return res
def similarity_search_with_score_by_vector(
self,
embedding: List[float],
k: int = 4,
param: Optional[dict] = None,
query: Optional[str] = None,
expr: Optional[str] = None,
timeout: Optional[int] = None,
**kwargs: Any,
) -> List[Tuple[Document, float]]:
"""Perform a search on a query string and return results with score.
For more information about the search parameters, take a look at the pymilvus
documentation found here:
https://milvus.io/api-reference/pymilvus/v2.2.6/Collection/search().md
Args:
embedding (List[float]): disabled.
k (int, optional): The amount of results to return. Defaults to 4.
param (dict): The search params for the specified index.
Defaults to None.
query (str): The search query, use collection`s embedding calc query embedding.
Defaults to None.
expr (str, optional): Filtering expression. Defaults to None.
timeout (int, optional): How long to wait before timeout error.
Defaults to None.
kwargs: Collection.search() keyword arguments.
Returns:
List[Tuple[Document, float]]: Result doc and score.
"""
if k == 0:
# pm need to control
return []
if not self.col:
logger.debug('No existing collection to search.')
return []
if param is None:
param = self.search_params
# Determine result metadata fields.
output_fields = self.fields[:]
output_fields.remove(self._vector_field)
finally_k = kwargs.pop('k', k)
ret = []
for index, one_col in enumerate(self.col):
search_expr = expr
embedding = self.collection_embeddings[index].embed_query(query)
if self.col_partition_key[index]:
# add parttion
if expr:
search_expr = f"{expr} and {self._partition_field}==\"{self.col_partition_key[index]}\""
else:
search_expr = f"{self._partition_field}==\"{self.col_partition_key[index]}\""
# Perform the search.
res = one_col.search(
data=[embedding],
anns_field=self._vector_field,
param=param,
limit=k,
expr=search_expr,
output_fields=output_fields,
timeout=timeout,
**kwargs,
)
# Organize results.
for result in res[0]:
meta = {x: result.entity.get(x) for x in output_fields}
doc = Document(page_content=meta.pop(self._text_field), metadata=meta)
pair = (doc, result.score)
ret.append(pair)
logger.debug(f'MilvusWithPermissionCheck Search {one_col.name} query: {query} results: {res[0]}')
ret.sort(key=lambda x: x[1])
logger.debug(f'MilvusWithPermissionCheck Search all results: {len(ret)}')
# milvusYes, the smaller the score, the better, so just take the first few digits directly
ret = ret[:finally_k]
logger.debug(f'MilvusWithPermissionCheck Search finally results: {len(ret)}')
return ret
@staticmethod
def _relevance_score_fn(distance: float) -> float:
"""Normalize the distance to a score on a scale [0, 1]."""
return 1 - distance / 2
def _select_relevance_score_fn(self) -> Callable[[float], float]:
return self._relevance_score_fn
class ElasticsearchWithPermissionCheck(VectorStore, ABC):
"""
only search from multi index
"""
def __init__(
self,
elasticsearch_url: str,
index_name: List[str],
drop_old: Optional[bool] = False,
*,
ssl_verify: Optional[Dict[str, Any]] = None,
llm_chain: Optional[LLMChain] = None,
):
"""Initialize with necessary components."""
try:
import elasticsearch
except ImportError:
raise ImportError('Could not import elasticsearch python package. '
'Please install it with `pip install elasticsearch`.')
self.index_name = index_name
self.llm_chain = llm_chain
self.drop_old = drop_old
_ssl_verify = ssl_verify or {}
self.elasticsearch_url = elasticsearch_url
self.ssl_verify = _ssl_verify
try:
self.client = elasticsearch.Elasticsearch(elasticsearch_url, **_ssl_verify)
except ValueError as e:
raise ValueError(f'Your elasticsearch client string is mis-formatted. Got error: {e} ')
def similarity_search(self,
query: str,
k: int = 4,
query_strategy: str = 'match_phrase',
must_or_should: str = 'should',
**kwargs: Any) -> List[Document]:
if k == 0:
# pm need to control
return []
docs_and_scores = self.similarity_search_with_score(query,
k=k,
query_strategy=query_strategy,
must_or_should=must_or_should,
**kwargs)
documents = [d[0] for d in docs_and_scores]
return documents
@staticmethod
def _relevance_score_fn(distance: float) -> float:
"""Normalize the distance to a score on a scale [0, 1]."""
# Todo: normalize the es score on a scale [0, 1]
return distance
def _select_relevance_score_fn(self) -> Callable[[float], float]:
return self._relevance_score_fn
def similarity_search_with_score(self,
query: str,
k: int = 4,
query_strategy: str = 'match_phrase',
must_or_should: str = 'should',
**kwargs: Any) -> List[Tuple[Document, float]]:
if k == 0:
# pm need to control
return []
assert must_or_should in ['must', 'should'], 'only support must and should.'
# llm or jiaba extract keywords
if self.llm_chain:
keywords_str = self.llm_chain.run(query)
logger.debug('elasticsearch llm search keywords:', keywords_str)
try:
keywords = literal_eval(keywords_str)
if not isinstance(keywords, list):
raise ValueError('Keywords extracted by llm is not list.')
except Exception:
keywords = jieba.analyse.extract_tags(query, topK=10, withWeight=False)
else:
keywords = jieba.analyse.extract_tags(query, topK=10, withWeight=False)
keywords = keywords or [query]
logger.debug(f'finally search keywords: {keywords}')
match_query = {'bool': {must_or_should: []}}
for key in keywords:
match_query['bool'][must_or_should].append({query_strategy: {'text': key}})
ret = []
for one_index_name in self.index_name:
response = self.client_search(self.client, one_index_name, match_query, size=k)
hits = [hit for hit in response['hits']['hits']]
for hit in hits:
ret.append((Document(page_content=hit['_source']['text'],
metadata=hit['_source']['metadata']), hit['_score']))
logger.debug(
f'ElasticsearchWithPermissionCheck Search {one_index_name} results: {hits}')
logger.debug(f'ElasticsearchWithPermissionCheck Search all results: {len(ret)}')
finally_k = kwargs.pop('finally_k', k)
ret.sort(key=lambda x: x[1], reverse=True)
ret = ret[:finally_k]
logger.debug(f'ElasticsearchWithPermissionCheck Search finally results: {len(ret)}')
return ret
def add_texts(
self,
texts: Iterable[str],
metadatas: Optional[List[dict]] = None,
ids: Optional[List[str]] = None,
refresh_indices: bool = True,
**kwargs: Any,
) -> List[str]:
pass
@classmethod
def from_texts(
cls,
texts: List[str],
embedding: Embeddings,
metadatas: Optional[List[dict]] = None,
ids: Optional[List[str]] = None,
index_name: Optional[List[str]] = None,
refresh_indices: bool = True,
llm: Optional[BaseLLM] = None,
prompt: Optional[PromptTemplate] = DEFAULT_PROMPT,
drop_old: Optional[bool] = False,
**kwargs: Any,
):
"""Construct ElasticKeywordsSearch wrapper from raw documents.
This is a user-friendly interface that:
1. Embeds documents.
2. Creates a new index for the embeddings in the Elasticsearch instance.
3. Adds the documents to the newly created Elasticsearch index.
This is intended to be a quick way to get started.
Example:
.. code-block:: python
from langchain import ElasticKeywordsSearch
from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
elastic_vector_search = ElasticKeywordsSearch.from_texts(
texts,
embeddings,
elasticsearch_url="http://localhost:9200"
)
"""
elasticsearch_url = get_from_dict_or_env(kwargs, 'elasticsearch_url', 'ELASTICSEARCH_URL')
if 'elasticsearch_url' in kwargs:
del kwargs['elasticsearch_url']
if llm:
llm_chain = LLMChain(llm=llm, prompt=prompt)
vectorsearch = cls(elasticsearch_url,
index_name,
llm_chain=llm_chain,
drop_old=drop_old,
**kwargs)
else:
vectorsearch = cls(elasticsearch_url, index_name, drop_old=drop_old, **kwargs)
return vectorsearch
def client_search(self, client: Any, index_name: str, script_query: Dict, size: int) -> Any:
version_num = client.info()['version']['number'][0]
version_num = int(version_num)
if version_num >= 8:
response = client.search(index=index_name, query=script_query, size=size)
else:
response = client.search(index=index_name, body={'query': script_query, 'size': size})
return response
def delete(self, **kwargs: Any) -> None:
# TODO: Check if this can be done in bulk
self.client.indices.delete(index=self.index_name)
================================================
FILE: src/backend/bisheng/interface/wrappers/__init__.py
================================================
================================================
FILE: src/backend/bisheng/interface/wrappers/base.py
================================================
from typing import ClassVar, Dict, List, Optional, Type
from bisheng.interface.base import LangChainTypeCreator
from bisheng.template.frontend_node.wrappers import WrappersFrontendNode
from loguru import logger
from bisheng.utils.util import build_template_from_class, build_template_from_method
from bisheng_langchain.utils.azure_dalle_image_generator import AzureDallEWrapper as DallEAPIWrapper
from langchain_community.utilities import requests, sql_database
from sqlmodel import true
class WrapperCreator(LangChainTypeCreator):
type_name: str = 'wrappers'
from_method_nodes: ClassVar[Dict] = {'SQLDatabase': 'from_uri'}
@property
def frontend_node_class(self) -> Type[WrappersFrontendNode]:
"""The class type of the FrontendNode created in frontend_node."""
return WrappersFrontendNode
@property
def type_to_loader_dict(self) -> Dict:
if self.type_dict is None:
self.type_dict = {
wrapper.__name__: wrapper
for wrapper in
[requests.TextRequestsWrapper, sql_database.SQLDatabase, DallEAPIWrapper]
}
return self.type_dict
def get_signature(self, name: str) -> Optional[Dict]:
try:
if name in self.from_method_nodes:
return build_template_from_method(
name,
type_to_cls_dict=self.type_to_loader_dict,
add_function=True,
method_name=self.from_method_nodes[name],
)
return build_template_from_class(name, self.type_to_loader_dict, true)
except ValueError as exc:
raise ValueError('Wrapper not found') from exc
except AttributeError as exc:
logger.error(f'Wrapper {name} not loaded: {exc}')
return None
def to_list(self) -> List[str]:
return list(self.type_to_loader_dict.keys())
wrapper_creator = WrapperCreator()
================================================
FILE: src/backend/bisheng/jcloud.yml
================================================
instance: C4
autoscale_min: 1
================================================
FILE: src/backend/bisheng/knowledge/README.md
================================================
# 知识库模块
## 迁移重构中
================================================
FILE: src/backend/bisheng/knowledge/__init__.py
================================================
================================================
FILE: src/backend/bisheng/knowledge/api/__init__.py
================================================
================================================
FILE: src/backend/bisheng/knowledge/api/dependencies.py
================================================
from fastapi import Depends
from sqlmodel.ext.asyncio.session import AsyncSession
from bisheng.common.dependencies.core_deps import get_db_session
from bisheng.knowledge.domain.repositories.implementations.knowledge_file_repository_impl import \
KnowledgeFileRepositoryImpl
from bisheng.knowledge.domain.repositories.implementations.knowledge_repository_impl import KnowledgeRepositoryImpl
from bisheng.knowledge.domain.repositories.interfaces.knowledge_file_repository import KnowledgeFileRepository
from bisheng.knowledge.domain.repositories.interfaces.knowledge_repository import KnowledgeRepository
from bisheng.knowledge.domain.services.knowledge_file_service import KnowledgeFileService
from bisheng.knowledge.domain.services.knowledge_service import KnowledgeService
async def get_knowledge_repository(
session: AsyncSession = Depends(get_db_session),
) -> KnowledgeRepository:
"""DapatkanKnowledgeRepositoryInstance Dependencies"""
return KnowledgeRepositoryImpl(session)
async def get_knowledge_file_repository(
session: AsyncSession = Depends(get_db_session),
) -> 'KnowledgeFileRepository':
"""DapatkanKnowledgeFileRepositoryInstance Dependencies"""
return KnowledgeFileRepositoryImpl(session)
async def get_knowledge_service(
knowledge_repository: KnowledgeRepository = Depends(get_knowledge_repository),
knowledge_file_repository: KnowledgeFileRepository = Depends(get_knowledge_file_repository),
) -> 'KnowledgeService':
"""DapatkanKnowledgeServiceInstance Dependencies"""
return KnowledgeService(knowledge_repository=knowledge_repository,
knowledge_file_repository=knowledge_file_repository)
async def get_knowledge_file_service(
knowledge_repository: KnowledgeRepository = Depends(get_knowledge_repository),
knowledge_file_repository: KnowledgeFileRepository = Depends(get_knowledge_file_repository),
) -> 'KnowledgeFileService':
"""DapatkanKnowledgeFileServiceInstance Dependencies"""
return KnowledgeFileService(
knowledge_repository=knowledge_repository,
knowledge_file_repository=knowledge_file_repository,
)
================================================
FILE: src/backend/bisheng/knowledge/api/endpoints/__init__.py
================================================
================================================
FILE: src/backend/bisheng/knowledge/api/endpoints/knowledge.py
================================================
import asyncio
import gc
import json
import urllib.parse
from datetime import datetime
from io import BytesIO
from typing import List, Optional, Any, Literal
import pandas as pd
from fastapi import (APIRouter, BackgroundTasks, Body, Depends, File, HTTPException, Query, Request,
UploadFile)
from fastapi.encoders import jsonable_encoder
from loguru import logger
from bisheng.api.services import knowledge_imp
from bisheng.api.services.knowledge import KnowledgeService
from bisheng.api.services.knowledge_imp import add_qa
from bisheng.api.v1.schemas import (KnowledgeFileProcess, UpdatePreviewFileChunk, UploadFileResponse,
UpdateKnowledgeReq, KnowledgeFileReProcess)
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.http_error import UnAuthorizedError, NotFoundError, ServerError
from bisheng.common.errcode.knowledge import KnowledgeCPError, KnowledgeQAError, KnowledgeRebuildingError, \
KnowledgePreviewError, KnowledgeNotQAError, KnowledgeNoEmbeddingError, KnowledgeNotExistError, KnowledgeCPEmptyError
from bisheng.common.errcode.server import NoLlmModelConfigError
from bisheng.common.schemas.api import resp_200, resp_500, UnifiedResponseModel
from bisheng.common.services import telemetry_service
from bisheng.core.cache.redis_manager import get_redis_client
from bisheng.core.cache.utils import save_uploaded_file
from bisheng.core.logger import trace_id_var
from bisheng.database.models.role_access import AccessType
from bisheng.knowledge.api.dependencies import get_knowledge_service, get_knowledge_file_service
from bisheng.knowledge.domain.models.knowledge import (KnowledgeCreate, KnowledgeDao, KnowledgeTypeEnum,
KnowledgeUpdate)
from bisheng.knowledge.domain.models.knowledge import KnowledgeState
from bisheng.knowledge.domain.models.knowledge_file import (KnowledgeFileDao, KnowledgeFileStatus,
QAKnoweldgeDao, QAKnowledgeUpsert, QAStatus)
from bisheng.knowledge.domain.schemas.knowledge_schema import AddKnowledgeMetadataFieldsReq, \
UpdateKnowledgeMetadataFieldsReq, ModifyKnowledgeFileMetaDataReq
from bisheng.llm.domain import LLMService
from bisheng.llm.domain.const import LLMModelType
from bisheng.llm.domain.models import LLMDao
from bisheng.user.domain.models.user import UserDao
from bisheng.utils import generate_uuid, calc_data_sha256
from bisheng.worker.knowledge.qa import insert_qa_celery
# build router
router = APIRouter(prefix='/knowledge', tags=['Knowledge'])
@router.post('/upload')
async def upload_file(*, file: UploadFile = File(...)):
try:
file_name = file.filename
uuid_file_name = await KnowledgeService.save_upload_file_original_name(file_name)
file_path = await save_uploaded_file(file, 'bisheng', uuid_file_name)
if not isinstance(file_path, str):
file_path = str(file_path)
return resp_200(UploadFileResponse(file_path=file_path))
except Exception as e:
logger.error(f'File upload failed: {e}')
raise ServerError(msg=f'File upload failed: {e}')
finally:
await file.close()
@router.post('/upload/{knowledge_id}')
async def upload_knowledge_file(*,
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
knowledge_id: int,
file: UploadFile = File(...)):
""" Knowledge base upload file """
try:
file_name = file.filename
# Save the uploaded file
uuid_file_name = await KnowledgeService.save_upload_file_original_name(file_name)
file_path = await save_uploaded_file(file, 'bisheng', uuid_file_name)
if not isinstance(file_path, str):
file_path = str(file_path)
await file.seek(0)
# Calculate file md5
file_md5 = await asyncio.to_thread(calc_data_sha256, file.file)
# Check for duplicate files
repeat_file = await KnowledgeFileDao.get_repeat_file(
knowledge_id=knowledge_id, file_name=file_name, md5_=file_md5
)
ret = UploadFileResponse(file_path=file_path, file_name=file_name)
if repeat_file:
ret.repeat = True
ret.repeat_update_time = repeat_file.update_time
ret.repeat_file_name = repeat_file.file_name
return resp_200(ret)
except Exception as e:
raise ServerError(msg=f'File upload failed: {e}')
finally:
await file.close()
@router.post('/preview')
async def preview_file_chunk(*,
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
background_tasks: BackgroundTasks,
req_data: KnowledgeFileProcess):
""" Get a chunked preview of a file """
preview_file_id = generate_uuid()
redis_key = f'preview_file:{preview_file_id}'
redis_client = await get_redis_client()
await redis_client.aset(redis_key, {"status": "processing"})
async def exec_task():
try:
parse_type, file_share_url, res, partitions = await KnowledgeService.get_preview_file_chunk(request,
login_user,
req_data)
await redis_client.aset(redis_key, {
"status": "completed",
"data": {
'parse_type': parse_type,
'file_url': file_share_url,
'chunks': [one.model_dump() for one in res],
'partitions': partitions
}
})
except Exception as exc:
logger.exception(f'Preview file chunk error: {exc}')
await redis_client.aset(redis_key, {
"status": "error"
})
background_tasks.add_task(exec_task)
return resp_200(data={'preview_file_id': preview_file_id})
@router.get('/preview/status')
async def get_preview_file_status(
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
preview_file_id: str = Query(..., description='Preview the file returned by the interfaceID')):
redis_key = f'preview_file:{preview_file_id}'
redis_client = await get_redis_client()
file_status = await redis_client.aget(redis_key)
if not file_status:
raise KnowledgePreviewError.http_exception()
if file_status.get('status') == 'error':
raise KnowledgePreviewError.http_exception()
if file_status.get('status') == 'completed':
await redis_client.aexpire_key(redis_key, 10)
return resp_200(data=file_status)
@router.put('/preview')
async def update_preview_file_chunk(*,
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
req_data: UpdatePreviewFileChunk):
""" Updating a chunked preview of a file """
res = await KnowledgeService.update_preview_file_chunk(request, login_user, req_data)
return resp_200(res)
@router.delete('/preview')
async def delete_preview_file_chunk(*,
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
req_data: UpdatePreviewFileChunk):
""" Delete a chunked preview of a file """
res = KnowledgeService.delete_preview_file_chunk(request, login_user, req_data)
return resp_200(res)
@router.post('/process')
def process_knowledge_file(*,
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
background_tasks: BackgroundTasks,
req_data: KnowledgeFileProcess):
""" Uploading Files to the Knowledge Base """
res = KnowledgeService.process_knowledge_file(request, login_user, background_tasks, req_data)
return resp_200(res)
# Modify Segment Reprocessing
@router.post("/process/rebuild")
async def rebuild_knowledge_file(*,
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
req_data: KnowledgeFileReProcess):
""" Reprocessing Knowledge Base Files """
res = await KnowledgeService.rebuild_knowledge_file(request, login_user, req_data)
return resp_200(res)
@router.post('/create')
def create_knowledge(*,
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
knowledge: KnowledgeCreate):
""" Create Knowledge Base. """
db_knowledge = KnowledgeService.create_knowledge(request, login_user, knowledge)
return resp_200(db_knowledge)
@router.post('/copy')
async def copy_knowledge(*,
request: Request,
background_tasks: BackgroundTasks,
login_user: UserPayload = Depends(UserPayload.get_login_user),
knowledge_id: int = Body(..., embed=True),
knowledge_name: str = Body(default=None, embed=True)):
""" Copy Knowledge Base. """
knowledge = await KnowledgeDao.aquery_by_id(knowledge_id)
if not login_user.is_admin and knowledge.user_id != login_user.user_id:
return UnAuthorizedError.return_resp()
knowledge_count = await KnowledgeFileDao.async_count_file_by_filters(
knowledge_id,
status=[KnowledgeFileStatus.PROCESSING.value, KnowledgeFileStatus.WAITING.value],
)
if knowledge.state != KnowledgeState.PUBLISHED.value or knowledge_count > 0:
return KnowledgeCPError.return_resp()
knowledge = await KnowledgeService.copy_knowledge(request, background_tasks, login_user, knowledge, knowledge_name)
return resp_200(knowledge)
@router.post("/qa/copy")
async def copy_qa_knowledge(*,
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
knowledge_id: int = Body(..., embed=True),
knowledge_name: str = Body(default=None, embed=True)):
"""
SalinQAThe knowledge base upon.
:param request:
:param login_user:
:param knowledge_id:
:param knowledge_name: new knowledge name
:return:
"""
qa_knowledge = await KnowledgeDao.aquery_by_id(knowledge_id)
if not login_user.is_admin and qa_knowledge.user_id != login_user.user_id:
return UnAuthorizedError.return_resp()
if qa_knowledge.type != KnowledgeTypeEnum.QA.value:
return KnowledgeNotQAError.return_resp()
qa_knowledge_count = await QAKnoweldgeDao.async_count_by_id(qa_id=qa_knowledge.id)
if qa_knowledge.state != KnowledgeState.PUBLISHED.value:
return KnowledgeCPError.return_resp()
if qa_knowledge_count == 0:
return KnowledgeCPEmptyError.return_resp()
knowledge = await KnowledgeService.copy_qa_knowledge(request, login_user, qa_knowledge, knowledge_name)
return resp_200(knowledge)
@router.get('', status_code=200)
async def get_knowledge(*,
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
name: str = None,
knowledge_type: int = Query(default=KnowledgeTypeEnum.NORMAL.value,
alias='type'),
sort_by: Literal['create_time', 'update_time', 'name'] = Query(default='update_time'),
page_size: Optional[int] = 10,
page_num: Optional[int] = 1):
""" Read all knowledge base information. """
knowledge_type = KnowledgeTypeEnum(knowledge_type)
res, total = await KnowledgeService.get_knowledge(request, login_user, knowledge_type, name,
sort_by,
page_num, page_size)
return resp_200(data={'data': res, 'total': total})
@router.get('/info', status_code=200)
def get_knowledge_info(*,
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
knowledge_id: List[int] = Query(...)):
""" Based on Knowledge BaseIDRead Knowledge Base Information. """
res = KnowledgeService.get_knowledge_info(request, login_user, knowledge_id)
return resp_200(data=res)
@router.put('/', status_code=200)
async def update_knowledge(*,
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
knowledge: KnowledgeUpdate):
res = KnowledgeService.update_knowledge(request, login_user, knowledge)
return resp_200(data=res)
@router.delete('/', status_code=200)
def delete_knowledge(*,
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
knowledge_id: int = Body(..., embed=True)):
""" Delete Knowledge Base Information. """
KnowledgeService.delete_knowledge(request, login_user, knowledge_id)
return resp_200(message='Delete successful')
# Personal Knowledge Base Information Acquisition
@router.get('/personal_knowledge_info', status_code=200)
def get_personal_knowledge_info(
*,
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Get personal knowledge base information. """
knowledge = KnowledgeDao.get_user_knowledge(login_user.user_id, None,
KnowledgeTypeEnum.PRIVATE)
if not knowledge:
model = LLMService.get_knowledge_llm()
knowledgeCreate = KnowledgeCreate(name='Personal Knowledge Base',
type=KnowledgeTypeEnum.PRIVATE.value,
user_id=login_user.user_id,
model=model.embedding_model_id)
knowledge = [KnowledgeService.create_knowledge(request, login_user, knowledgeCreate)]
return resp_200(data=knowledge)
@router.get('/file_list/{knowledge_id}', status_code=200)
def get_filelist(*,
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
file_name: str = None,
file_ids: List[int] = None,
knowledge_id: int = 0,
page_size: int = 10,
page_num: int = 1,
status: List[int] = Query(default=None)):
""" Get knowledge base file information. """
data, total, flag = KnowledgeService.get_knowledge_files(request, login_user, knowledge_id,
file_name, status, page_num,
page_size, file_ids)
return resp_200({
'data': data,
'total': total,
'writeable': flag,
})
@router.get('/qa/list/{qa_knowledge_id}', status_code=200)
async def get_QA_list(*,
qa_knowledge_id: int,
page_size: int = 10,
page_num: int = 1,
question: Optional[str] = None,
answer: Optional[str] = None,
keyword: Optional[str] = None,
status: Optional[int] = None,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Get knowledge base file information. """
db_knowledge = KnowledgeService.judge_qa_knowledge_write(login_user, qa_knowledge_id)
qa_list, total_count = await knowledge_imp.list_qa_by_knowledge_id(qa_knowledge_id, page_size,
page_num, question, answer,
keyword, status)
user_list = UserDao.get_user_by_ids([qa.user_id for qa in qa_list])
user_map = {user.user_id: user.user_name for user in user_list}
data = [jsonable_encoder(qa) for qa in qa_list]
for qa in data:
qa['questions'] = qa['questions'][0]
qa['answers'] = json.loads(qa['answers'])[0]
qa['user_name'] = user_map.get(qa['user_id'], qa['user_id'])
return resp_200({
'data':
data,
'total':
total_count,
'writeable':
login_user.access_check(db_knowledge.user_id, str(qa_knowledge_id),
AccessType.KNOWLEDGE_WRITE)
})
@router.post('/retry', status_code=200)
def retry(*,
request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
background_tasks: BackgroundTasks,
req_data: dict):
"""Failed Retry"""
KnowledgeService.retry_files(request, login_user, background_tasks, req_data)
return resp_200()
@router.delete('/file/{file_id}', status_code=200)
def delete_knowledge_file(*,
request: Request,
file_id: int,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Delete Knowledge File Information """
KnowledgeService.delete_knowledge_file(request, login_user, [file_id])
return resp_200(message='Delete successful')
@router.get('/chunk', status_code=200)
async def get_knowledge_chunk(request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
knowledge_id: int = Query(..., description='The knowledge base uponID'),
file_ids: List[int] = Query(default=[], description='Doc.ID'),
keyword: str = Query(default='', description='Keywords'),
page: int = Query(default=1, description='Page'),
limit: int = Query(default=10,
description='Number of bars per page Number of bars per page')):
""" Get Knowledge Base Block Content """
# In order to resolvekeywordParameters are sometimes not carried outurldecoderight of privacybug
if keyword.startswith('%'):
keyword = urllib.parse.unquote(keyword)
res, total = KnowledgeService.get_knowledge_chunks(request, login_user, knowledge_id, file_ids,
keyword, page, limit)
return resp_200(data={'data': res, 'total': total})
@router.put('/chunk', status_code=200)
async def update_knowledge_chunk(request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
knowledge_id: int = Body(..., embed=True, description='The knowledge base uponID'),
file_id: int = Body(..., embed=True, description='Doc.ID'),
chunk_index: int = Body(..., embed=True, description='Chunked index number'),
text: str = Body(..., embed=True, description='Chunked content'),
bbox: str = Body(default='', embed=True, description='Block box selection position')):
""" Update Knowledge Base Chunk Content """
KnowledgeService.update_knowledge_chunk(request, login_user, knowledge_id, file_id,
chunk_index, text, bbox)
return resp_200()
@router.delete('/chunk', status_code=200)
async def delete_knowledge_chunk(request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
knowledge_id: int = Body(..., embed=True, description='The knowledge base uponID'),
file_id: int = Body(..., embed=True, description='Doc.ID'),
chunk_index: int = Body(..., embed=True, description='Chunked index number')):
""" Delete Knowledge Base Chunk Content """
KnowledgeService.delete_knowledge_chunk(request, login_user, knowledge_id, file_id,
chunk_index)
return resp_200()
@router.get('/file_share')
async def get_file_share_url(request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
file_id: int = Query(description='File UniqueID')):
original_url, preview_url = KnowledgeService.get_file_share_url(file_id)
return resp_200(data={
'original_url': original_url,
'preview_url': preview_url
})
@router.get('/file_bbox')
async def get_file_bbox(request: Request,
login_user: UserPayload = Depends(UserPayload.get_login_user),
file_id: int = Query(description='File UniqueID')):
res = KnowledgeService.get_file_bbox(request, login_user, file_id)
return resp_200(data=res)
@router.post('/qa/add', status_code=200)
async def qa_add(*, QACreate: QAKnowledgeUpsert,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Add knowledge base information. """
QACreate.user_id = login_user.user_id
db_knowledge = KnowledgeDao.query_by_id(QACreate.knowledge_id)
if db_knowledge.type != KnowledgeTypeEnum.QA.value:
raise NotFoundError()
if not login_user.access_check(
db_knowledge.user_id, str(db_knowledge.id), AccessType.KNOWLEDGE_WRITE
):
raise UnAuthorizedError.http_exception()
db_q = QAKnoweldgeDao.get_qa_knowledge_by_name(QACreate.questions, QACreate.knowledge_id, exclude_id=QACreate.id)
# create repeat question or update
if (db_q and not QACreate.id) or (db_q and QACreate.id and db_q.id != QACreate.id):
raise KnowledgeQAError.http_exception()
add_qa(db_knowledge=db_knowledge, data=QACreate)
return resp_200()
@router.post('/qa/status_switch', status_code=200)
def qa_status_switch(*,
status: int = Body(embed=True),
id: int = Body(embed=True),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Modify Knowledge Base Information. """
qa_db = QAKnoweldgeDao.get_qa_knowledge_by_primary_id(id)
if qa_db.status == status:
return resp_200()
db_knowledge = KnowledgeDao.query_by_id(qa_db.knowledge_id)
if not login_user.access_check(
db_knowledge.user_id, str(db_knowledge.id), AccessType.KNOWLEDGE_WRITE
):
raise UnAuthorizedError.http_exception()
new_qa_db = knowledge_imp.qa_status_change(qa_db, status, db_knowledge)
if not new_qa_db:
return resp_200()
if new_qa_db.status != status:
# Description state switch failed
return resp_500(message=new_qa_db.remark)
return resp_200()
@router.get('/qa/detail', status_code=200)
def qa_detail(*, id: int, login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Add knowledge base information. """
qa_knowledge = QAKnoweldgeDao.get_qa_knowledge_by_primary_id(id)
qa_knowledge.answers = json.loads(qa_knowledge.answers)[0]
return resp_200(data=qa_knowledge)
@router.post('/qa/append', status_code=200)
def qa_append(
*,
ids: list[int] = Body(..., embed=True),
question: str = Body(..., embed=True),
login_user: UserPayload = Depends(UserPayload.get_login_user),
):
""" Add knowledge base information. """
qa_list = QAKnoweldgeDao.select_list(ids)
knowledge = KnowledgeDao.query_by_id(qa_list[0].knowledge_id)
# check knowledge access
if not login_user.access_check(
knowledge.user_id, str(knowledge.id), AccessType.KNOWLEDGE_WRITE
):
raise UnAuthorizedError.http_exception()
for q in qa_list:
if question in q.questions:
raise KnowledgeQAError.http_exception()
for qa in qa_list:
qa.questions.append(question)
knowledge_imp.add_qa(knowledge, qa)
return resp_200()
@router.delete('/qa/delete', status_code=200)
def qa_delete(*,
ids: list[int] = Body(embed=True),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Delete Knowledge File Information """
qa_list = QAKnoweldgeDao.select_list(ids)
knowledge = KnowledgeDao.query_by_id(qa_list[0].knowledge_id)
if not login_user.access_check(knowledge.user_id, str(knowledge.id),
AccessType.KNOWLEDGE_WRITE):
raise UnAuthorizedError()
if knowledge.type != KnowledgeTypeEnum.QA.value:
raise KnowledgeNotQAError()
knowledge_imp.delete_vector_data(knowledge, ids)
QAKnoweldgeDao.delete_batch(ids)
telemetry_service.log_event_sync(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.DELETE_KNOWLEDGE_FILE,
trace_id=trace_id_var.get())
return resp_200()
@router.post('/qa/auto_question')
def qa_auto_question(
*,
number: int = Body(default=3, embed=True),
ori_question: str = Body(default='', embed=True),
answer: str = Body(default='', embed=True),
login_user: UserPayload = Depends(UserPayload.get_login_user)
):
"""Automatically generate questions from large models"""
questions = knowledge_imp.recommend_question(login_user.user_id, ori_question, number=number, answer=answer)
return resp_200(data={'questions': questions})
@router.get('/qa/export/template', status_code=200)
async def get_export_url():
data = [{"Question": "", "Answer": "", "Similar question 1": "", "Similar question 2": ""}]
df = pd.DataFrame(data)
bio = BytesIO()
with pd.ExcelWriter(bio, engine="openpyxl") as writer:
df.to_excel(writer, sheet_name="Sheet1", index=False)
file_name = f"qa_export_template.xlsx"
bio.seek(0)
file = UploadFile(filename=file_name, file=bio)
file_path = await save_uploaded_file(file, 'bisheng', file_name)
await file.close()
return resp_200({"url": file_path})
@router.get('/qa/export/{qa_knowledge_id}', status_code=200)
async def get_export_url(*,
qa_knowledge_id: int,
question: Optional[str] = None,
answer: Optional[str] = None,
keyword: Optional[str] = None,
status: Optional[int] = None,
max_lines: Optional[int] = 10000,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
# Query the current knowledge base, whether there are write permissions
db_knowledge = KnowledgeService.judge_qa_knowledge_write(login_user, qa_knowledge_id)
if keyword:
question = keyword
page_num = 1
total_num = 0
page_size = max_lines
file_list = []
file_pr = datetime.now().strftime('%Y%m%d%H%M%S')
file_index = 1
while True:
qa_list, total_count = await knowledge_imp.list_qa_by_knowledge_id(qa_knowledge_id, page_size,
page_num, question, answer,
status)
data = [jsonable_encoder(qa) for qa in qa_list]
qa_dict_list = []
all_title = ["Question", "Answer"]
for qa in data:
qa_dict_list.append({
"Question": qa['questions'][0],
"Answer": json.loads(qa['answers'])[0]
})
for index, question in enumerate(qa['questions']):
if index == 0:
continue
key = f"Similar question {index}"
if key not in all_title:
all_title.append(key)
qa_dict_list[-1][key] = question
if len(qa_dict_list) != 0:
df = pd.DataFrame(qa_dict_list)
else:
df = pd.DataFrame([{"Question": "", "Answer": "", "Similar question 1": "", "Similar question 2": ""}])
df = df[all_title]
bio = BytesIO()
with pd.ExcelWriter(bio, engine="openpyxl") as writer:
df.to_excel(writer, sheet_name="Sheet1", index=False)
file_name = f"{file_pr}_{file_index}.xlsx"
file_index = file_index + 1
bio.seek(0)
file_io = UploadFile(filename=file_name, file=bio)
file_path = await save_uploaded_file(file_io, 'bisheng', file_name)
await file_io.close()
file_list.append(file_path)
total_num += len(qa_list)
if len(qa_list) < page_size or total_num >= total_count:
break
return resp_200({"file_list": file_list})
def convert_excel_value(value: Any):
if value is None or value == "":
return ''
if str(value) == 'nan' or str(value) == 'null':
return ''
return str(value)
@router.post('/qa/preview/{qa_knowledge_id}', status_code=200)
def post_import_file(*,
qa_knowledge_id: int,
file_url: str = Body(..., embed=True),
size: Optional[int] = Body(default=0, embed=True),
offset: Optional[int] = Body(default=0, embed=True),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
df = pd.read_excel(file_url)
columns = df.columns.to_list()
if 'Question' not in columns or 'Answer' not in columns:
raise HTTPException(status_code=500, detail='file must have ‘Question’ Or ‘Answer’ column')
data = df.T.to_dict().values()
insert_data = []
for dd in data:
d = QAKnowledgeUpsert(
user_id=login_user.user_id,
knowledge_id=qa_knowledge_id,
answers=[convert_excel_value(dd['Question'])],
questions=[convert_excel_value(dd['Answer'])],
source=4,
create_time=datetime.now(),
update_time=datetime.now())
for key, value in dd.items():
if key.startswith('Similar question') and convert_excel_value(value):
d.questions.append(convert_excel_value(value))
insert_data.append(d)
try:
if size > 0 and offset >= 0:
if offset >= len(insert_data):
insert_data = []
else:
insert_data = insert_data[offset:size]
except Exception as e:
raise HTTPException(status_code=500, detail=e)
return resp_200({"result": insert_data})
@router.post('/qa/import/{qa_knowledge_id}', status_code=200)
def post_import_file(*,
qa_knowledge_id: int,
file_list: list[str] = Body(..., embed=True),
background_tasks: BackgroundTasks,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
# Query the current knowledge base, whether there are write permissions
db_knowledge = KnowledgeService.judge_qa_knowledge_write(login_user, qa_knowledge_id)
insert_result = []
error_result = []
have_question = []
for file_url in file_list:
df = pd.read_excel(file_url)
columns = df.columns.to_list()
if 'Question' not in columns or 'Answer' not in columns:
insert_result.append(0)
continue
data = df.T.to_dict().values()
insert_data = []
have_data = []
all_questions = set()
for index, dd in enumerate(data):
tmp_questions = set()
dd_question = convert_excel_value(dd['Question'])
dd_answer = convert_excel_value(dd['Answer'])
QACreate = QAKnowledgeUpsert(
user_id=login_user.user_id,
knowledge_id=qa_knowledge_id,
answers=[dd_answer],
questions=[dd_question],
source=4,
status=QAStatus.PROCESSING.value)
tmp_questions.add(QACreate.questions[0])
for key, value in dd.items():
if key.startswith('Similar question'):
if tmp_value := convert_excel_value(value):
if tmp_value not in tmp_questions:
QACreate.questions.append(tmp_value)
tmp_questions.add(tmp_value)
db_q = QAKnoweldgeDao.get_qa_knowledge_by_name(QACreate.questions, QACreate.knowledge_id)
if (db_q and not QACreate.id) or len(tmp_questions & all_questions) > 0 or not dd_question or not dd_answer:
have_data.append(index)
else:
insert_data.append(QACreate)
all_questions = all_questions | tmp_questions
result = QAKnoweldgeDao.batch_insert_qa(insert_data)
telemetry_service.log_event_sync(
user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.NEW_KNOWLEDGE_FILE,
trace_id=trace_id_var.get()
)
# async task add qa into milvus and es
for one in result:
insert_qa_celery.delay(one.id)
error_result.append(have_data)
return resp_200({"errors": error_result})
@router.get('/status', status_code=200)
def get_knowledge_status(*, login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
View Knowledge Base Status Interface
Receive:
1. According UsersidFirst determine if the user has a personal knowledge base and does not return directly200
2. If you have a knowledge base, depending on the useridView the state of your knowledge base, if the state of your personal knowledge base isREBUILDING 3 or FAILED 4 Jam
Return "Personal Knowledge BaseembeddingThe model has been replaced, rebuilding the knowledge base, please try again later" State Code 502
"""
# Query a user's personal knowledge base
user_private_knowledge = KnowledgeDao.get_user_knowledge(
login_user.user_id,
None,
KnowledgeTypeEnum.PRIVATE
)
# If the user does not have a personal knowledge base, go directly back to200
if not user_private_knowledge:
return resp_200({"status": "success"})
# Get the first personal knowledge base (usually users have only one personal knowledge base)
private_knowledge = user_private_knowledge[0]
# Check Knowledge Base Status
if private_knowledge.state == KnowledgeState.REBUILDING.value:
# Return502Status codes and corresponding prompts
raise KnowledgeRebuildingError()
if private_knowledge.state == KnowledgeState.FAILED.value:
# Delay imports to avoid looping imports
from bisheng.worker.knowledge.rebuild_knowledge_worker import rebuild_knowledge_celery
rebuild_knowledge_celery.delay(private_knowledge.id, int(private_knowledge.model), login_user.user_id)
# Return502Status codes and corresponding prompts
raise KnowledgeRebuildingError()
# Knowledge base status is OK, go back200
return resp_200({"status": "success"})
@router.post('/update_knowledge', status_code=200)
def update_knowledge_model(*,
login_user: UserPayload = Depends(UserPayload.get_login_user),
req_data: UpdateKnowledgeReq):
"""
Update Knowledge Base Interface
Update embedding Rebuild Knowledge Base on Model
Receive:
1. According to the incoming from the front-endmodel_id, model_type, let's first determine ifembeddingModels
2. If not, go backresp501("Is notembeddingModels") If so, place theknowledgeAll in the tabletypeare2DatastatusChange to...3,modelChange to Incomingmodel_id
3. everyknowledge_idBoth initiate asynchronous tasks to rebuild the knowledge base
"""
# 1. Verify that isembeddingModels
model_info = LLMDao.get_model_by_id(req_data.model_id)
if not model_info:
return NoLlmModelConfigError.return_resp()
# If the front-end does not passmodel_type, using themodel_type
model_type = req_data.model_type if req_data.model_type else model_info.model_type
if model_type != LLMModelType.EMBEDDING.value:
return KnowledgeNoEmbeddingError.return_resp()
# Process the specified knowledge base
knowledge = KnowledgeDao.query_by_id(req_data.knowledge_id)
if not knowledge:
return KnowledgeNotExistError.return_resp()
if not login_user.access_check(
knowledge.user_id, str(knowledge.id), AccessType.KNOWLEDGE_WRITE
):
return UnAuthorizedError.return_resp()
old_model_id = knowledge.model
# Update Knowledge Base Status and Models
knowledge.model = str(req_data.model_id)
knowledge.name = req_data.knowledge_name
knowledge.description = req_data.description
if int(old_model_id) == int(req_data.model_id):
# If the model does not change, there is no need to rebuild
KnowledgeDao.update_one(knowledge)
return resp_200()
if knowledge.state == KnowledgeState.REBUILDING.value:
return KnowledgeRebuildingError.return_resp()
knowledge.state = KnowledgeState.REBUILDING.value
KnowledgeDao.update_one(knowledge)
# Start asynchronous task
if knowledge.type == KnowledgeTypeEnum.NORMAL.value:
# Delay imports to avoid looping imports
from bisheng.worker.knowledge.rebuild_knowledge_worker import rebuild_knowledge_celery
rebuild_knowledge_celery.delay(knowledge.id, req_data.model_id, login_user.user_id)
elif knowledge.type == KnowledgeTypeEnum.QA.value:
# Delay imports to avoid looping imports
from bisheng.worker.knowledge.qa import rebuild_qa_knowledge_celery
rebuild_qa_knowledge_celery.delay(knowledge.id, req_data.model_id, login_user.user_id)
logger.info(f"Started rebuild task for knowledge_id={knowledge.id} with model_id={req_data.model_id}")
return resp_200()
@router.get("/file/info/{file_id}", description="Get knowledge base file information",
response_model=UnifiedResponseModel)
async def get_knowledge_file_info(*,
login_user: UserPayload = Depends(UserPayload.get_login_user),
file_id: int,
knowledge_file_service=Depends(get_knowledge_file_service)):
"""
Get knowledge base file information
Args:
login_user:
file_id:
knowledge_file_service:
Returns:
"""
knowledge_file_info_res = await knowledge_file_service.get_knowledge_file_info(login_user, file_id)
return resp_200(data=knowledge_file_info_res)
# Adding Metadata Fields to the Knowledge Base
@router.post('/add_metadata_fields', description="Adding Metadata Fields to the Knowledge Base",
response_model=UnifiedResponseModel)
async def add_metadata_fields(*,
login_user: UserPayload = Depends(UserPayload.get_login_user),
req_data: AddKnowledgeMetadataFieldsReq,
knowledge_service=Depends(get_knowledge_service)):
"""
Adding Metadata Fields to the Knowledge Base
"""
knowledge_model = await knowledge_service.add_metadata_fields(login_user, req_data)
return resp_200(data=knowledge_model)
# Modify Knowledge Base Metadata Fields
@router.put('/update_metadata_fields', description="Modify Knowledge Base Metadata Fields",
response_model=UnifiedResponseModel)
async def update_metadata_fields(*,
login_user: UserPayload = Depends(UserPayload.get_login_user),
req_data: UpdateKnowledgeMetadataFieldsReq,
knowledge_service=Depends(get_knowledge_service),
background_tasks: BackgroundTasks
):
"""
Modify Knowledge Base Metadata Fields
Args:
login_user:
req_data:
knowledge_service:
background_tasks:
Returns:
UnifiedResponseModel
"""
knowledge_model = await knowledge_service.update_metadata_fields(login_user, req_data, background_tasks)
return resp_200(data=knowledge_model)
# Delete Knowledge Base Metadata Field
@router.delete('/delete_metadata_fields', description="Delete Knowledge Base Metadata Field",
response_model=UnifiedResponseModel)
async def delete_metadata_fields(*,
login_user: UserPayload = Depends(UserPayload.get_login_user),
knowledge_id: int = Body(..., embed=True, description="The knowledge base uponID"),
field_names: List[str] = Body(..., embed=True,
description="List of field names to delete"),
knowledge_service=Depends(get_knowledge_service),
background_tasks: BackgroundTasks):
"""
Delete Knowledge Base Metadata Field
Args:
login_user:
knowledge_id:
field_names:
knowledge_service:
background_tasks:
Returns:
UnifiedResponseModel
"""
knowledge_model = await knowledge_service.delete_metadata_fields(login_user, knowledge_id, field_names,
background_tasks)
return resp_200(data=knowledge_model)
# Modify Knowledge Base File User Custom Metadata
@router.put('/file/user_metadata', description="Modify Knowledge Base File User Custom Metadata",
response_model=UnifiedResponseModel)
async def modify_file_user_metadata(*,
login_user: UserPayload = Depends(UserPayload.get_login_user),
req_data: ModifyKnowledgeFileMetaDataReq,
knowledge_file_service=Depends(get_knowledge_file_service)):
"""
Modify Knowledge Base File User Custom Metadata
Args:
login_user:
req_data:
knowledge_file_service:
Returns:
UnifiedResponseModel
"""
knowledge_file_model = await knowledge_file_service.modify_file_user_metadata(login_user, req_data)
return resp_200(data=knowledge_file_model)
================================================
FILE: src/backend/bisheng/knowledge/api/endpoints/qa.py
================================================
import asyncio
import json
from typing import Annotated
from fastapi import APIRouter, Body
from sqlmodel import select
from bisheng.api.services.knowledge import KnowledgeService
from bisheng.api.v1.schemas import resp_200
from bisheng.common.errcode.qa import BackendProcessingError
from bisheng.core.database import get_sync_db_session
from bisheng.database.models.recall_chunk import RecallChunk
from bisheng.knowledge.domain.models.knowledge_file import KnowledgeFileDao
# build router
router = APIRouter(prefix='/qa', tags=['QA'])
# Some interfaces of the traceability module
@router.get('/keyword')
async def get_answer_keyword(message_id: int):
# Get Hitskey
conter = 3
while True:
with get_sync_db_session() as session:
chunks = session.exec(
select(RecallChunk).where(RecallChunk.message_id == message_id)).first()
# keywords
if chunks:
keywords = chunks.keywords
return resp_200(json.loads(keywords))
else:
# Delay Loop
if conter <= 0:
break
await asyncio.sleep(1)
conter -= 1
raise BackendProcessingError()
@router.post('/chunk', status_code=200)
def get_original_file(message_id: Annotated[int, Body(embed=True)],
keys: Annotated[str, Body(embed=True)]):
# Get Hitskey
with get_sync_db_session() as session:
chunks = session.exec(
select(RecallChunk).where(RecallChunk.message_id == message_id)).all()
if not chunks:
return resp_200(message='No bulkpost found in Trashchunks')
# chunk care of all offile
file_ids = {chunk.file_id for chunk in chunks}
db_knowledge_files = KnowledgeFileDao.get_file_by_ids(list(file_ids))
id2file = {file.id: file for file in db_knowledge_files}
# keywords
keywords = keys.split(';') if keys else []
result = []
for index, chunk in enumerate(chunks):
file = id2file.get(chunk.file_id)
chunk_res = json.loads(json.loads(chunk.meta_data).get('bbox'))
file_access = json.loads(chunk.meta_data).get('right', True)
chunk_res['right'] = file_access
if file_access and file:
# Preview filesurl
original_url, preview_url = KnowledgeService.get_file_share_url(file.id)
chunk_res['source_url'] = preview_url
chunk_res['original_url'] = original_url
chunk_res['source'] = file.file_name
else:
chunk_res['source_url'] = ''
chunk_res['original_url'] = ''
chunk_res['source'] = ''
chunk_res['score'] = round(match_score(chunk.chunk, keywords),
2) if len(keywords) > 0 else 0
chunk_res['file_id'] = chunk.file_id
chunk_res['parse_type'] = file.parse_type if file else ''
result.append(chunk_res)
# sort_and_filter_all_chunks(keywords, all_chunk)
return resp_200(result)
def find_lcsubstr(s1, s2):
m = [[0 for i in range(len(s2) + 1)] for j in range(len(s1) + 1)]
mmax = 0
p = 0
for i in range(len(s1)):
for j in range(len(s2)):
if s1[i] == s2[j]:
m[i + 1][j + 1] = m[i][j] + 1
if m[i + 1][j + 1] > mmax:
mmax = m[i + 1][j + 1]
p = i + 1
return s1[p - mmax:p], mmax
def match_score(chunk, keywords):
"""
After deduplicationkeywordsBlanketchunkWhat percentage is covered?
"""
hit_num = 0
# # Exact match
# for keyword in keywords:
# if keyword in chunk:
# hit_num += 1
# fuzzy matching, keywords2/3The above is included
for keyword in keywords:
res = find_lcsubstr(keyword, chunk)
if res[1] >= 2 / 3 * len(keyword):
hit_num += 1
return hit_num / len(keywords)
def sort_and_filter_all_chunks(keywords, all_chunks, thr=0.0):
"""
1. answerExtract and deduplicate keywords
2. Calculated keywords arechunkPercentage of coverage (=matched_key_num / all_key_num), calculate each in turnchunk
3. From high to low in terms of coverage ratio, yeschunkSort
4. Filter coverage ratio is less than thresholdThrright of privacychunkwhile retaining at least onechunk(To prevent the threshold from being too high, put all thechunkhave been filtered out)
"""
keywords = set(keywords)
chunk_match_score = []
for index, chunk in enumerate(all_chunks):
chunk_match_score.append(match_score(chunk, keywords))
sorted_res = sorted(enumerate(chunk_match_score), key=lambda x: -x[1])
remain_chunks = [all_chunks[elem[0]] for elem in sorted_res if elem[1] >= thr]
if not remain_chunks:
remain_chunks = [all_chunks[sorted_res[0][0]]]
return remain_chunks
================================================
FILE: src/backend/bisheng/knowledge/api/router.py
================================================
from .endpoints.knowledge import router as knowledge_router
from .endpoints.qa import router as qa_router
__all__ = ['knowledge_router', 'qa_router']
================================================
FILE: src/backend/bisheng/knowledge/domain/__init__.py
================================================
================================================
FILE: src/backend/bisheng/knowledge/domain/knowledge_rag.py
================================================
from typing import Dict
from langchain_core.embeddings import Embeddings
from langchain_core.vectorstores import VectorStore
from langchain_elasticsearch import AsyncElasticsearchStore, ElasticsearchStore
from langchain_milvus import Milvus
from bisheng.common.errcode.http_error import NotFoundError
from bisheng.knowledge.domain.models.knowledge import Knowledge, KnowledgeDao
from bisheng.knowledge.rag.elasticsearch_factory import ElasticsearchFactory
from bisheng.knowledge.rag.milvus_factory import MilvusFactory
from bisheng.llm.domain import LLMService
class KnowledgeRag:
""" initialize knowledge rag components """
@classmethod
async def _get_knowledge(cls, knowledge: Knowledge = None, knowledge_id: int = None) -> Knowledge:
if not knowledge:
knowledge = await KnowledgeDao.aquery_by_id(knowledge_id)
if not knowledge:
raise NotFoundError.http_exception()
return knowledge
@classmethod
def _get_knowledge_sync(cls, knowledge: Knowledge = None, knowledge_id: int = None):
if not knowledge:
knowledge = KnowledgeDao.query_by_id(knowledge_id)
if not knowledge:
raise NotFoundError.http_exception()
return knowledge
@classmethod
async def init_knowledge_milvus_vectorstore(cls, invoke_user_id: int, knowledge: Knowledge = None,
knowledge_id: int = None, **kwargs) -> Milvus:
knowledge = await cls._get_knowledge(knowledge, knowledge_id)
embedding = await LLMService.get_bisheng_knowledge_embedding(model_id=int(knowledge.model),
invoke_user_id=invoke_user_id)
return cls.init_milvus_vectorstore(knowledge.collection_name, embedding, **kwargs)
@classmethod
def init_knowledge_milvus_vectorstore_sync(cls, invoke_user_id: int, knowledge: Knowledge = None,
knowledge_id: int = None, **kwargs) -> Milvus:
knowledge = cls._get_knowledge_sync(knowledge, knowledge_id)
embedding = LLMService.get_bisheng_knowledge_embedding_sync(model_id=int(knowledge.model),
invoke_user_id=invoke_user_id)
return cls.init_milvus_vectorstore(knowledge.collection_name, embedding, **kwargs)
@classmethod
async def init_knowledge_es_vectorstore(cls, knowledge: Knowledge = None, knowledge_id: int = None,
**kwargs) -> AsyncElasticsearchStore:
knowledge = await cls._get_knowledge(knowledge, knowledge_id)
return cls.init_es_vectorstore(knowledge.index_name, **kwargs)
@classmethod
def init_knowledge_es_vectorstore_sync(cls, knowledge: Knowledge = None, knowledge_id: int = None,
**kwargs) -> ElasticsearchStore:
knowledge = cls._get_knowledge_sync(knowledge, knowledge_id)
return cls.init_es_vectorstore_sync(knowledge.index_name, **kwargs)
@classmethod
def get_multi_knowledge_vectorstore_sync(cls, invoke_user_id: int, knowledge_ids: list[int], user_name: str = None,
check_auth: bool = True, include_es: bool = True,
include_milvus: bool = True) \
-> Dict[int, Dict[str, VectorStore | Knowledge]]:
""" get multiple knowledge vectorstore, including milvus and es
return: {
knowledge_id: {
"knowledge": Knowledge
"milvus": Milvus,
"es": ElasticsearchStore,
},
}
"""
if not include_es and not include_milvus:
raise RuntimeError('at least one of include_es and include_milvus must be True')
if check_auth:
if not user_name:
raise RuntimeError('knowledge check auth user_name must be provided')
knowledge_list = KnowledgeDao.judge_knowledge_permission(user_name, knowledge_ids)
else:
knowledge_list = KnowledgeDao.get_list_by_ids(knowledge_ids)
ret = {}
for knowledge in knowledge_list:
ret[knowledge.id] = {
"knowledge": knowledge,
"milvus": None,
"es": None,
}
if include_milvus:
vectorstore = cls.init_knowledge_milvus_vectorstore_sync(invoke_user_id, knowledge)
ret[knowledge.id]["milvus"] = vectorstore
if include_es:
es_vectorstore = cls.init_knowledge_es_vectorstore_sync(knowledge)
ret[knowledge.id]["es"] = es_vectorstore
return ret
@classmethod
async def get_multi_knowledge_vectorstore(cls, invoke_user_id: int, knowledge_ids: list[int], user_name: str = None,
check_auth: bool = True, include_es: bool = True,
include_milvus: bool = True) \
-> Dict[int, Dict[str, VectorStore | Knowledge]]:
""" get multiple knowledge vectorstore, including milvus and es
return: {
knowledge_id: {
"knowledge": Knowledge
"milvus": Milvus,
"es": ElasticsearchStore,
},
}
"""
if knowledge_ids is None or len(knowledge_ids) == 0:
return {}
if not include_es and not include_milvus:
raise RuntimeError('at least one of include_es and include_milvus must be True')
if check_auth:
if not user_name:
raise RuntimeError('knowledge check auth user_name must be provided')
knowledge_list = await KnowledgeDao.ajudge_knowledge_permission(user_name, knowledge_ids)
else:
knowledge_list = await KnowledgeDao.aget_list_by_ids(knowledge_ids)
ret = {}
for knowledge in knowledge_list:
ret[knowledge.id] = {
"knowledge": knowledge,
"milvus": None,
"es": None,
}
if include_milvus:
vectorstore = await cls.init_knowledge_milvus_vectorstore(invoke_user_id, knowledge)
ret[knowledge.id]["milvus"] = vectorstore
if include_es:
es_vectorstore = await cls.init_knowledge_es_vectorstore(knowledge)
ret[knowledge.id]["es"] = es_vectorstore
return ret
@classmethod
def init_milvus_vectorstore(cls, collection_name: str, embeddings: Embeddings, **kwargs) -> Milvus:
""" init milvus vectorstore by collection name and model id """
return MilvusFactory.init_vectorstore(collection_name, embeddings, **kwargs)
@classmethod
def init_es_vectorstore(cls, index_name: str, **kwargs) -> AsyncElasticsearchStore:
""" init es vectorstore by index name """
return ElasticsearchFactory.init_vectorstore(index_name, **kwargs)
@classmethod
def init_es_vectorstore_sync(cls, index_name: str, **kwargs) -> ElasticsearchStore:
""" init es vectorstore by index name """
return ElasticsearchFactory.init_vectorstore_sync(index_name, **kwargs)
================================================
FILE: src/backend/bisheng/knowledge/domain/models/__init__.py
================================================
================================================
FILE: src/backend/bisheng/knowledge/domain/models/knowledge.py
================================================
from datetime import datetime
from enum import Enum
from typing import Any, List, Optional, Union, Dict
from pydantic import BaseModel, field_validator
from sqlalchemy import JSON
from sqlmodel import Column, DateTime, Field, delete, func, or_, select, text, update
from sqlmodel.sql.expression import Select, SelectOfScalar, col
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session, get_async_db_session
from bisheng.database.models.role_access import AccessType, RoleAccessDao
from bisheng.knowledge.domain.models.knowledge_file import KnowledgeFile, KnowledgeFileDao
from bisheng.user.domain.models.user import UserDao
from bisheng.user.domain.models.user_role import UserRoleDao
class KnowledgeTypeEnum(Enum):
QA = 1 # QAThe knowledge base upon
NORMAL = 0 # Docly Knowledge Base
PRIVATE = 2 # Workbench Personal Knowledge Base
class KnowledgeState(Enum):
UNPUBLISHED = 0
PUBLISHED = 1 # Document Knowledge Base Success Status
COPYING = 2
REBUILDING = 3 # Status in Document Knowledge Base Reconstruction
FAILED = 4 # Status of Documentation Knowledge Base Reconstruction Failure
class MetadataFieldType(str, Enum):
""" Metadata field type"""
STRING = "string"
NUMBER = "number"
TIME = "time"
# Case-insensitive enumeration matching
@classmethod
def _missing_(cls, value: Any) -> Optional["MetadataFieldType"]:
if isinstance(value, str):
for member in cls:
if member.value.lower() == value.lower():
return member
return None
class KnowledgeBase(SQLModelSerializable):
user_id: Optional[int] = Field(default=None, index=True)
name: str = Field(index=True, min_length=1, max_length=200,
description='Knowledge Base Name')
type: int = Field(index=False, default=0,
description='Knowledge Base Type, value from KnowledgeTypeEnum')
description: Optional[str] = Field(default=None, index=True)
model: Optional[str] = Field(default=None, index=False)
collection_name: Optional[str] = Field(default=None, index=False)
index_name: Optional[str] = Field(default=None, index=False)
state: Optional[int] = Field(index=False, default=KnowledgeState.PUBLISHED.value,
description='value from KnowledgeState')
metadata_fields: Optional[List[Dict]] = Field(default=None, sa_column=Column(JSON, nullable=True),
description="Metadata Field Configuration for Knowledge Base")
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
@field_validator('model', mode='before')
@classmethod
def convert_model(cls, v: Any) -> str:
if isinstance(v, int):
v = str(v)
return v
class Knowledge(KnowledgeBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
class KnowledgeRead(KnowledgeBase):
id: int
user_name: Optional[str] = None
copiable: Optional[bool] = None
class KnowledgeUpdate(BaseModel):
knowledge_id: int
name: Optional[str] = None
description: Optional[str] = None
class KnowledgeCreate(KnowledgeBase):
is_partition: Optional[bool] = None
class KnowledgeDao(KnowledgeBase):
@classmethod
def insert_one(cls, data: Knowledge) -> Knowledge:
with get_sync_db_session() as session:
session.add(data)
session.commit()
session.refresh(data)
return data
@classmethod
async def async_insert_one(cls, data: Knowledge) -> Knowledge:
async with get_async_db_session() as session:
session.add(data)
await session.commit()
await session.refresh(data)
return data
@classmethod
def update_one(cls, data: Knowledge) -> Knowledge:
with get_sync_db_session() as session:
session.add(data)
session.commit()
session.refresh(data)
return data
@classmethod
async def aupdate_one(cls, data: Knowledge) -> Knowledge:
async with get_async_db_session() as session:
session.add(data)
await session.commit()
await session.refresh(data)
return data
@classmethod
async def async_update_state(cls, knowledge_id: int, state: KnowledgeState, update_time: Optional[datetime] = None):
async with get_async_db_session() as session:
statement = update(Knowledge).where(col(Knowledge.id) == knowledge_id)
statement = statement.values(state=state.value,
update_time=update_time or datetime.now())
await session.exec(statement)
await session.commit()
@classmethod
def update_state(cls, knowledge_id: int, state: KnowledgeState, update_time: Optional[datetime] = None):
with get_sync_db_session() as session:
statement = update(Knowledge).where(col(Knowledge.id) == knowledge_id)
statement = statement.values(state=state.value,
update_time=update_time or datetime.now())
session.exec(statement)
session.commit()
@classmethod
def update_knowledge_update_time(cls, knowledge: Knowledge):
statement = update(Knowledge).where(Knowledge.id == knowledge.id).values(
update_time=text('NOW()'))
with get_sync_db_session() as session:
session.exec(statement)
session.commit()
@classmethod
def query_by_id(cls, knowledge_id: int) -> Knowledge:
with get_sync_db_session() as session:
return session.get(Knowledge, knowledge_id)
@classmethod
async def aquery_by_id(cls, knowledge_id: int) -> Knowledge:
async with get_async_db_session() as session:
return await session.get(Knowledge, knowledge_id)
@classmethod
async def async_query_by_id(cls, knowledge_id: int) -> Knowledge:
async with get_async_db_session() as session:
result = await session.execute(select(Knowledge).where(Knowledge.id == knowledge_id))
return result.scalars().first()
@classmethod
def get_list_by_ids(cls, ids: List[int]) -> List[Knowledge]:
with get_sync_db_session() as session:
return session.exec(select(Knowledge).where(Knowledge.id.in_(ids))).all()
@classmethod
async def aget_list_by_ids(cls, ids: List[int]) -> List[Knowledge]:
async with get_async_db_session() as session:
result = await session.exec(select(Knowledge).where(col(Knowledge.id).in_(ids)))
return result.all()
@classmethod
def _user_knowledge_filters(
cls,
statement: Any,
user_id: int,
knowledge_id_extra: List[int] = None,
knowledge_type: KnowledgeTypeEnum = None,
name: str = None,
page: int = 0,
limit: int = 0,
filter_knowledge: List[int] = None) -> Union[Select, SelectOfScalar]:
if knowledge_id_extra:
statement = statement.where(
or_(Knowledge.id.in_(knowledge_id_extra), Knowledge.user_id == user_id))
else:
statement = statement.where(Knowledge.user_id == user_id)
if filter_knowledge:
statement = statement.where(Knowledge.id.in_(filter_knowledge))
if knowledge_type:
statement = statement.where(Knowledge.type == knowledge_type.value)
if name:
conditions = [col(Knowledge.name).like(f'%{name}%'), col(Knowledge.description).like(f'%{name}%')]
file_knowledge_ids = KnowledgeFileDao.get_knowledge_ids_by_name(name)
if file_knowledge_ids:
conditions.append(Knowledge.id.in_(file_knowledge_ids))
if conditions:
statement = statement.where(or_(*conditions))
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
return statement
@classmethod
def get_user_knowledge(cls,
user_id: int,
knowledge_id_extra: List[int] = None,
knowledge_type: KnowledgeTypeEnum = None,
name: str = None,
page: int = 0,
limit: int = 10,
filter_knowledge: List[int] = None) -> List[Knowledge]:
statement = select(Knowledge)
statement = cls._user_knowledge_filters(statement, user_id, knowledge_id_extra,
knowledge_type, name, page, limit,
filter_knowledge)
statement = statement.order_by(Knowledge.update_time.desc())
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
async def aget_user_knowledge(cls,
user_id: int,
knowledge_id_extra: List[int] = None,
knowledge_type: KnowledgeTypeEnum = None,
name: str = None,
sort_by: str = "update_time",
page: int = 0,
limit: int = 10,
filter_knowledge: List[int] = None) -> List[Knowledge]:
statement = select(Knowledge)
statement = cls._user_knowledge_filters(statement, user_id, knowledge_id_extra,
knowledge_type, name, page, limit,
filter_knowledge)
if sort_by == "create_time":
statement = statement.order_by(Knowledge.create_time.desc())
elif sort_by == "update_time":
statement = statement.order_by(Knowledge.update_time.desc())
elif sort_by == "name":
statement = statement.order_by(text('CONVERT(name USING gbk) ASC'))
async with get_async_db_session() as session:
return (await session.exec(statement)).all()
@classmethod
def count_user_knowledge(cls,
user_id: int,
knowledge_id_extra: List[int] = None,
knowledge_type: KnowledgeTypeEnum = None,
name: str = None) -> int:
statement = select(func.count(Knowledge.id))
statement = cls._user_knowledge_filters(statement, user_id, knowledge_id_extra,
knowledge_type, name)
with get_sync_db_session() as session:
return session.scalar(statement)
@classmethod
async def acount_user_knowledge(cls,
user_id: int,
knowledge_id_extra: List[int] = None,
knowledge_type: KnowledgeTypeEnum = None,
name: str = None) -> int:
statement = select(func.count(Knowledge.id))
statement = cls._user_knowledge_filters(statement, user_id, knowledge_id_extra,
knowledge_type, name)
async with get_async_db_session() as session:
return await session.scalar(statement)
@classmethod
def count_by_filter(cls, filters: List[Any]) -> int:
with get_sync_db_session() as session:
return session.scalar(select(Knowledge.id).where(*filters))
@classmethod
def judge_knowledge_permission(cls, user_name: str,
knowledge_ids: List[int]) -> List[Knowledge]:
"""
Based on username and knowledge baseIDList to get a list of knowledge bases that the user has permission to view
:param user_name: Username
:param knowledge_ids: The knowledge base uponIDVertical
:return: Returns a list of knowledge bases that the user has permissions
"""
# get user info
user_info = UserDao.get_user_by_username(user_name)
if not user_info:
return []
# Query the role the user belongs to
role_list = UserRoleDao.get_user_roles(user_info.user_id)
if not role_list:
return []
role_id_list = []
is_admin = False
for role in role_list:
role_id_list.append(role.role_id)
if role.role_id == 1:
is_admin = True
# admin User has all knowledge base permissions
if is_admin:
return KnowledgeDao.get_list_by_ids(knowledge_ids)
# query role List of knowledge bases with permissions
role_access_list = RoleAccessDao.find_role_access(role_id_list, [str(one) for one in knowledge_ids],
AccessType.KNOWLEDGE)
user_knowledge_list = cls.get_user_knowledge(user_info.user_id,
knowledge_id_extra=[int(access.third_id) for access in
role_access_list],
filter_knowledge=knowledge_ids)
return user_knowledge_list
@classmethod
async def ajudge_knowledge_permission(cls, user_name: str,
knowledge_ids: List[int]) -> List[Knowledge]:
"""
By Username and Knowledge BaseIDlist, asynchronously get a list of knowledge bases that the user has permission to view
Args:
user_name:
knowledge_ids:
Returns:
"""
# get user info
user_info = await UserDao.aget_user_by_username(user_name)
if not user_info:
return []
# Query the role the user belongs to
role_list = await UserRoleDao.aget_user_roles(user_info.user_id)
if not role_list:
return []
role_id_list = []
is_admin = False
for role in role_list:
role_id_list.append(role.role_id)
if role.role_id == 1:
is_admin = True
# admin User has all knowledge base permissions
if is_admin:
return await cls.aget_list_by_ids(knowledge_ids)
# query role List of knowledge bases with permissions
role_access_list = await RoleAccessDao.afind_role_access(role_id_list, [str(one) for one in knowledge_ids],
AccessType.KNOWLEDGE)
# Query whether the knowledge base created by the user is included
user_knowledge_list = await cls.aget_user_knowledge(user_info.user_id,
knowledge_id_extra=[int(access.third_id) for access in
role_access_list],
filter_knowledge=knowledge_ids)
return user_knowledge_list
@classmethod
def filter_knowledge_by_ids(cls,
knowledge_ids: List[int],
keyword: str = None,
page: int = 0,
limit: int = 0) -> (List[Knowledge], int):
"""
Based on keywords and knowledge baseidFilter out the corresponding knowledge base
"""
statement = select(Knowledge)
count_statement = select(func.count(Knowledge.id))
if knowledge_ids:
statement = statement.where(Knowledge.id.in_(knowledge_ids))
count_statement = count_statement.where(Knowledge.id.in_(knowledge_ids))
if keyword:
statement = statement.where(
or_(Knowledge.name.like('%' + keyword + '%'),
Knowledge.description.like('%' + keyword + '%')))
count_statement = count_statement.where(
or_(Knowledge.name.like('%' + keyword + '%'),
Knowledge.description.like('%' + keyword + '%')))
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
statement = statement.order_by(Knowledge.update_time.desc())
with get_sync_db_session() as session:
return session.exec(statement).all(), session.scalar(count_statement)
@classmethod
def generate_all_knowledge_filter(cls,
statement,
name: str = None,
knowledge_type: KnowledgeTypeEnum = None):
if knowledge_type:
statement = statement.where(Knowledge.type == knowledge_type.value)
if name:
conditions = [col(Knowledge.name).like(f'%{name}%'), col(Knowledge.description).like(f'%{name}%')]
file_knowledge_ids = KnowledgeFileDao.get_knowledge_ids_by_name(name)
if file_knowledge_ids:
conditions.append(Knowledge.id.in_(file_knowledge_ids))
if conditions:
statement = statement.where(or_(*conditions))
return statement
@classmethod
def get_all_knowledge(cls,
name: str = None,
knowledge_type: KnowledgeTypeEnum = None,
page: int = 0,
limit: int = 0) -> List[Knowledge]:
statement = select(Knowledge)
statement = cls.generate_all_knowledge_filter(statement,
name=name,
knowledge_type=knowledge_type)
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
statement = statement.order_by(Knowledge.update_time.desc())
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
async def aget_all_knowledge(cls,
name: str = None,
knowledge_type: KnowledgeTypeEnum = None,
sort_by: str = "update_time",
page: int = 0,
limit: int = 0) -> List[Knowledge]:
statement = select(Knowledge)
statement = cls.generate_all_knowledge_filter(statement,
name=name,
knowledge_type=knowledge_type)
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
if sort_by == "create_time":
statement = statement.order_by(Knowledge.create_time.desc())
elif sort_by == "update_time":
statement = statement.order_by(Knowledge.update_time.desc())
elif sort_by == "name":
statement = statement.order_by(text('CONVERT(name USING gbk) ASC'))
async with get_async_db_session() as session:
return (await session.exec(statement)).all()
@classmethod
def count_all_knowledge(cls,
name: str = None,
knowledge_type: KnowledgeTypeEnum = None) -> int:
statement = select(func.count(Knowledge.id))
statement = cls.generate_all_knowledge_filter(statement,
name=name,
knowledge_type=knowledge_type)
with get_sync_db_session() as session:
return session.scalar(statement)
@classmethod
async def acount_all_knowledge(cls,
name: str = None,
knowledge_type: KnowledgeTypeEnum = None) -> int:
statement = select(func.count(Knowledge.id))
statement = cls.generate_all_knowledge_filter(statement,
name=name,
knowledge_type=knowledge_type)
async with get_async_db_session() as session:
return await session.scalar(statement)
@classmethod
def update_knowledge_list(cls, knowledge_list: List[Knowledge]):
with get_sync_db_session() as session:
for knowledge in knowledge_list:
session.add(knowledge)
session.commit()
@classmethod
def get_knowledge_by_name(cls, name: str, user_id: int = 0) -> Knowledge:
""" Get Knowledge Base Details by Knowledge Base Name """
statement = select(Knowledge).where(Knowledge.name == name)
if user_id:
statement = statement.where(Knowledge.user_id == user_id)
with get_sync_db_session() as session:
return session.exec(statement).first()
@classmethod
def delete_knowledge(cls, knowledge_id: int, only_clear: bool = False):
"""
Delete or empty the knowledge base
"""
# Medical Treatment:knowledge file
with get_sync_db_session() as session:
session.exec(delete(KnowledgeFile).where(KnowledgeFile.knowledge_id == knowledge_id))
# Do not delete knowledge base records when clearing the knowledge base
if not only_clear:
session.exec(delete(Knowledge).where(Knowledge.id == knowledge_id))
session.commit()
@classmethod
def get_knowledge_by_time_range(cls, start_time: datetime, end_time: datetime, page: int = 0,
page_size: int = 0) -> List[Knowledge]:
""" Get a list of knowledge bases based on the creation timeframe """
statement = select(Knowledge).where(
Knowledge.create_time >= start_time,
Knowledge.create_time < end_time
)
if page and page_size:
statement = statement.offset((page - 1) * page_size).limit(page_size)
statement = statement.order_by(col(Knowledge.id).asc())
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
def get_first_knowledge(cls) -> Optional[Knowledge]:
""" Get the first knowledge base """
statement = select(Knowledge).order_by(col(Knowledge.id).asc()).limit(1)
with get_sync_db_session() as session:
return session.exec(statement).first()
================================================
FILE: src/backend/bisheng/knowledge/domain/models/knowledge_file.py
================================================
import json
from datetime import datetime
from enum import Enum
from typing import List, Optional, Dict, Any, Literal
# if TYPE_CHECKING:
from pydantic import field_validator
from sqlalchemy import JSON, Column, DateTime, String, or_, text, Text
from sqlmodel import Field, delete, func, select, update, col
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_async_db_session, get_sync_db_session
from bisheng.database.base import async_get_count, get_count
class KnowledgeFileStatus(Enum):
PROCESSING = 1 # Sedang diproses
SUCCESS = 2 # Berhasil
FAILED = 3 # Parse Failure
REBUILDING = 4 # Rebuilding
WAITING = 5 # In queue:
TIMEOUT = 6 # Super24Hour not parsed, parsing timeout
class QAStatus(Enum):
DISABLED = 0 # User manually closedQA
ENABLED = 1 # Enabled
PROCESSING = 2 # Sedang diproses
FAILED = 3 # QAFailed to insert vector library
class ParseType(Enum):
LOCAL = 'local' # Local mode resolution
UNS = 'uns' # unsService resolution, all converted topdfDoc.
# 1.3.0After the enumeration, the previous belongs to the file parsed on the version
ETL4LM = 'etl4lm' # etl4lmService Insights, includingpdfLayout Analysis for
UN_ETL4LM = 'un_etl4lm' # Nonetl4lmService parsing, nobboxContent, only source files andmdDoc.
class KnowledgeFileBase(SQLModelSerializable):
user_id: Optional[int] = Field(default=None, index=True)
user_name: Optional[str] = Field(default=None, index=True)
knowledge_id: int = Field(index=True)
file_name: str = Field(max_length=200, index=True)
file_size: Optional[int] = Field(default=None, index=False, description='File size inbytes')
md5: Optional[str] = Field(default=None, index=False)
parse_type: Optional[str] = Field(default=ParseType.LOCAL.value,
index=False,
description='Files parsed in what mode')
split_rule: Optional[str] = Field(default=None, sa_column=Column(Text), description='Files parsed in what mode')
bbox_object_name: Optional[str] = Field(default='', description='bboxFiles inminioStored object name')
status: Optional[int] = Field(default=KnowledgeFileStatus.WAITING.value,
index=False,
description='1: Parsing;2: Resolved successfully;3: Parse Failure')
object_name: Optional[str] = Field(default=None, index=False, description='Files inminioStored object name')
user_metadata: Optional[Dict[str, Any]] = Field(default_factory=dict, sa_column=Column(JSON, nullable=True),
description='User-defined metadata')
remark: Optional[str] = Field(default='', sa_column=Column(String(length=4096)))
updater_id: Optional[int] = Field(default=None, index=True, description='Last updated by userID')
updater_name: Optional[str] = Field(default=None, index=True)
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class QAKnowledgeBase(SQLModelSerializable):
user_id: Optional[int] = Field(default=None, index=True)
knowledge_id: int = Field(index=True)
questions: List[str] = Field(index=False)
answers: str = Field(index=False)
source: Optional[int] = Field(default=0, index=False, description='0: Unknown 1: Manual2: Audit, 3: api, 4: Batch import')
status: Optional[int] = Field(default=1, index=False,
description='1: Activate0: Close, the user manually closes;2: Sedang diproses3Failed to insert')
extra_meta: Optional[str] = Field(default=None, index=False)
remark: Optional[str] = Field(default='', sa_column=Column(String(length=4096)))
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
@field_validator('questions')
@classmethod
def validate_json(cls, v):
# dict_keys(['description', 'name', 'id', 'data'])
if not v:
return v
if not isinstance(v, List):
raise ValueError('question must be a valid JSON')
return v
@field_validator('answers')
@classmethod
def validate_answer(cls, v):
# dict_keys(['description', 'name', 'id', 'data'])
if not v:
return v
if isinstance(v, List):
return json.dumps(v, ensure_ascii=False)
return v
class KnowledgeFile(KnowledgeFileBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
class QAKnowledge(QAKnowledgeBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
questions: Optional[List[str]] = Field(default=None, sa_column=Column(JSON))
answers: Optional[str] = Field(default=None, sa_column=Column(Text))
class KnowledgeFileRead(KnowledgeFileBase):
id: int
class KnowledgeFileCreate(KnowledgeFileBase):
pass
class QAKnowledgeUpsert(QAKnowledgeBase):
"""Support modification"""
id: Optional[int] = None
answers: Optional[List[str] | str] = None
class KnowledgeFileDao(KnowledgeFileBase):
@classmethod
async def query_by_id(cls, file_id: int) -> Optional[KnowledgeFile]:
async with get_async_db_session() as session:
result = await session.execute(select(KnowledgeFile).where(KnowledgeFile.id == file_id))
return result.scalars().first()
@classmethod
def query_by_id_sync(cls, file_id: int) -> Optional[KnowledgeFile]:
with get_sync_db_session() as session:
return session.exec(select(KnowledgeFile).where(KnowledgeFile.id == file_id)).first()
@classmethod
def get_file_simple_by_knowledge_id(cls, knowledge_id: int, page: int, page_size: int):
offset = (page - 1) * page_size
with get_sync_db_session() as session:
return session.query(KnowledgeFile.id, KnowledgeFile.object_name).filter(
KnowledgeFile.knowledge_id == knowledge_id).order_by(
KnowledgeFile.id.asc()).offset(offset).limit(page_size).all()
@classmethod
def count_file_by_knowledge_id(cls, knowledge_id: int):
with get_sync_db_session() as session:
return session.query(func.count(
KnowledgeFile.id)).filter(KnowledgeFile.knowledge_id == knowledge_id).scalar()
@classmethod
def delete_batch(cls, file_ids: List[int]) -> bool:
with get_sync_db_session() as session:
session.exec(delete(KnowledgeFile).where(KnowledgeFile.id.in_(file_ids)))
session.commit()
return True
@classmethod
def add_file(cls, knowledge_file: KnowledgeFile) -> KnowledgeFile:
with get_sync_db_session() as session:
session.add(knowledge_file)
session.commit()
session.refresh(knowledge_file)
return knowledge_file
@classmethod
def update(cls, knowledge_file):
with get_sync_db_session() as session:
session.add(knowledge_file)
session.commit()
session.refresh(knowledge_file)
return knowledge_file
@classmethod
async def async_update(cls, knowledge_file):
async with get_async_db_session() as session:
session.add(knowledge_file)
await session.commit()
await session.refresh(knowledge_file)
return knowledge_file
@classmethod
def update_file_status(cls, file_ids: list[int], status: KnowledgeFileStatus, reason: str = None):
""" Batch update file status """
statement = update(KnowledgeFile).where(KnowledgeFile.id.in_(file_ids)).values(status=status.value,
remark=reason)
with get_sync_db_session() as session:
session.exec(statement)
session.commit()
@classmethod
def get_file_by_condition(cls, knowledge_id: int, md5_: str = None, file_name: str = None):
with get_sync_db_session() as session:
sql = select(KnowledgeFile).where(KnowledgeFile.knowledge_id == knowledge_id)
if md5_:
sql = sql.where(KnowledgeFile.md5 == md5_)
if file_name:
sql = sql.where(KnowledgeFile.file_name == file_name)
return session.exec(sql).all()
@classmethod
async def get_repeat_file(cls, knowledge_id: int, md5_: str = None, file_name: str = None):
sql = select(KnowledgeFile).where(KnowledgeFile.knowledge_id == knowledge_id)
if md5_ and file_name:
sql = sql.where(
or_(
KnowledgeFile.md5 == md5_,
KnowledgeFile.file_name == file_name
)
)
elif md5_:
sql = sql.where(KnowledgeFile.md5 == md5_)
elif file_name:
sql = sql.where(KnowledgeFile.file_name == file_name)
async with get_async_db_session() as session:
result = await session.exec(sql)
return result.first()
@classmethod
def select_list(cls, file_ids: List[int]):
if not file_ids:
return []
with get_sync_db_session() as session:
knowledge_files = session.exec(
select(KnowledgeFile).where(KnowledgeFile.id.in_(file_ids))).all()
if not knowledge_files:
raise ValueError('Doc.IDDoes not exist')
return knowledge_files
@classmethod
def get_file_by_ids(cls, file_ids: List[int]) -> List[KnowledgeFile]:
if not file_ids:
return []
with get_sync_db_session() as session:
return session.exec(select(KnowledgeFile).where(KnowledgeFile.id.in_(file_ids))).all()
@classmethod
def get_file_by_filters(cls,
knowledge_id: int,
file_name: str = None,
status: List[int] = None,
page: int = 0,
page_size: int = 0,
file_ids: List[int] = None) -> List[KnowledgeFile]:
statement = select(KnowledgeFile).where(KnowledgeFile.knowledge_id == knowledge_id)
if file_name:
statement = statement.where(KnowledgeFile.file_name.like(f'%{file_name}%'))
if status:
statement = statement.where(KnowledgeFile.status.in_(status))
if file_ids:
statement = statement.where(KnowledgeFile.id.in_(file_ids))
if page and page_size:
statement = statement.offset((page - 1) * page_size).limit(page_size)
statement = statement.order_by(KnowledgeFile.update_time.desc())
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
def get_files_by_multiple_status(cls, knowledge_id: int, status_list: List[int]) -> List[KnowledgeFile]:
"""
Based on Knowledge BaseIDand status list query file
Args:
knowledge_id: The knowledge base uponID
status_list: List of status values
Returns:
List[KnowledgeFile]: Matching Files List
"""
statement = select(KnowledgeFile).where(
KnowledgeFile.knowledge_id == knowledge_id,
KnowledgeFile.status.in_(status_list)
)
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
def count_file_by_filters(cls,
knowledge_id: int,
file_name: str = None,
status: List[int] = None,
file_ids: List[int] = None) -> int:
statement = select(func.count(
KnowledgeFile.id)).where(KnowledgeFile.knowledge_id == knowledge_id)
if file_name:
statement = statement.where(KnowledgeFile.file_name.like(f'%{file_name}%'))
if status:
statement = statement.where(KnowledgeFile.status.in_(status))
if file_ids:
statement = statement.where(KnowledgeFile.id.in_(file_ids))
with get_sync_db_session() as session:
return session.scalar(statement)
@classmethod
async def async_count_file_by_filters(cls,
knowledge_id: int,
file_name: str = None,
status: List[int] = None,
file_ids: List[int] = None) -> int:
statement = select(func.count(
KnowledgeFile.id)).where(KnowledgeFile.knowledge_id == knowledge_id)
if file_name:
statement = statement.where(KnowledgeFile.file_name.like(f'%{file_name}%'))
if status:
statement = statement.where(KnowledgeFile.status.in_(status))
if file_ids:
statement = statement.where(KnowledgeFile.id.in_(file_ids))
async with get_async_db_session() as session:
result = await session.execute(statement)
return result.scalar_one()
@classmethod
def get_knowledge_ids_by_name(cls, file_name: str) -> List[int]:
statement = select(KnowledgeFile.knowledge_id).where(KnowledgeFile.file_name.like(f'%{file_name}%')).group_by(
KnowledgeFile.knowledge_id)
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
def update_status_bulk(cls, file_ids: List[int], status: KnowledgeFileStatus, remark: str = "") -> None:
"""
Batch update file status
Args:
file_ids: Doc.IDVertical
status: New status value
Returns:
None
"""
if not file_ids:
return
statement = (
update(KnowledgeFile)
.where(col(KnowledgeFile.id).in_(file_ids))
)
statement = statement.values(status=status.value)
if remark:
statement = statement.values(remark=remark)
with get_sync_db_session() as session:
session.exec(statement)
session.commit()
@classmethod
def filter_file_by_metadata_fields(cls, knowledge_id: int, logical: Literal["and", "or"],
metadata_filters: List[Dict[str, Dict[str, Any]]]) -> List[int]:
"""
Filter knowledge files based on user-defined metadata fields
:param knowledge_id: The knowledge base uponID
:param logical: Logical operators, supporting "AND" OR "OR"
:param metadata_filters: User-defined metadata fields and their corresponding values
[{
field_a: {
'comparison': '=',
'value': 'some_value',
'extra_filter': [
{
'comparison': '!=',
'value': 'other_value'
}
]
}
}]
:return: Eligible Knowledge FilesIDVertical
"""
statement = "select id from knowledgefile where knowledge_id = :knowledge_id and "
params = {"knowledge_id": knowledge_id}
params_index = 1
field_statement = []
for metadata_filter in metadata_filters:
for key, key_info in metadata_filter.items():
key_comparison = key_info['comparison']
key_value = key_info['value']
extra_filter = key_info.get('extra_filter')
if key_value is not None:
params_key = f"tmp_params_{params_index}"
params[params_key] = key_value
sub_statement = f"{key} {key_comparison} :{params_key}"
else:
sub_statement = f"{key} {key_comparison}"
if extra_filter:
for sub_info in extra_filter:
params_index += 1
params_key = f"tmp_params_{params_index}"
params[params_key] = sub_info['value']
sub_statement += f" AND {key} {sub_info['comparison']} :{params_key}"
sub_statement = f"({sub_statement})"
field_statement.append(sub_statement)
params_index += 1
field_statement = f" {logical} ".join(field_statement)
statement += f"({field_statement})"
with get_sync_db_session() as session:
file_ids = []
result = session.execute(text(statement), params)
for one in result:
file_ids.append(one[0])
return file_ids
@classmethod
def update_file_updater(cls, file_id: int, updater_id: int, updater_name: str) -> None:
"""
Update Knowledge File Updater Information
:param file_id: Knowledge DocumentsID
:param updater_id: User who updated ID
:param updater_name: Updated By Username
:return: None
"""
statement = update(KnowledgeFile).where(col(KnowledgeFile.id) == file_id)
statement = statement.values(updater_id=updater_id, updater_name=updater_name)
with get_sync_db_session() as session:
session.exec(statement)
session.commit()
class QAKnoweldgeDao(QAKnowledgeBase):
@classmethod
def get_qa_knowledge_by_knowledge_id(cls, knowledge_id: int, page: int, page_size: int):
offset = (page - 1) * page_size
state = select(QAKnowledge).where(
QAKnowledge.knowledge_id == knowledge_id, ).offset(offset).limit(page_size)
with get_sync_db_session() as session:
return session.exec(state).all()
@classmethod
def get_qa_knowledge_by_knowledge_ids(cls, knowledge_ids: List[int]) -> List[QAKnowledge]:
with get_sync_db_session() as session:
return session.exec(
select(QAKnowledge).where(QAKnowledge.knowledge_id.in_(knowledge_ids))).all()
@classmethod
async def aget_qa_knowledge_by_knowledge_ids(cls, knowledge_ids: List[int]) -> List[QAKnowledge]:
async with get_async_db_session() as session:
result = await session.exec(
select(QAKnowledge).where(col(QAKnowledge.knowledge_id).in_(knowledge_ids)))
return result.all()
@classmethod
def get_qa_knowledge_by_primary_id(cls, qa_id: int) -> QAKnowledge:
with get_sync_db_session() as session:
return session.exec(select(QAKnowledge).where(QAKnowledge.id == qa_id)).first()
@classmethod
def get_qa_knowledge_by_name(cls, question: List[str], knowledge_id: int, exclude_id: int = None) -> QAKnowledge:
with get_sync_db_session() as session:
group_filters = []
for one in question:
group_filters.append(func.json_contains(QAKnowledge.questions, json.dumps(one)))
statement = select(QAKnowledge).where(
or_(*group_filters)).where(QAKnowledge.knowledge_id == knowledge_id)
if exclude_id:
statement = statement.where(QAKnowledge.id != exclude_id)
return session.exec(statement).first()
@classmethod
def update(cls, qa_knowledge: QAKnowledge):
if qa_knowledge.id is None:
raise ValueError('idTidak boleh kosong.')
with get_sync_db_session() as session:
session.add(qa_knowledge)
session.commit()
session.refresh(qa_knowledge)
return qa_knowledge
@classmethod
def delete_batch(cls, qa_ids: List[int]) -> bool:
with get_sync_db_session() as session:
session.exec(delete(QAKnowledge).where(QAKnowledge.id.in_(qa_ids)))
session.commit()
return True
@classmethod
def select_list(cls, ids: List[int]) -> List[QAKnowledge]:
with get_sync_db_session() as session:
QAKnowledges = session.exec(select(QAKnowledge).where(QAKnowledge.id.in_(ids))).all()
if not QAKnowledges:
raise ValueError('Knowledge base does not exist')
return QAKnowledges
@classmethod
def insert_qa(cls, qa_knowledge: QAKnowledgeUpsert):
with get_sync_db_session() as session:
qa = QAKnowledge.model_validate(qa_knowledge)
session.add(qa)
session.commit()
session.refresh(qa)
return qa
@classmethod
def batch_insert_qa(cls, qa_knowledges: List[QAKnowledgeUpsert]) -> List[QAKnowledge]:
with get_sync_db_session() as session:
qas = []
for qa_knowledge in qa_knowledges:
qa = QAKnowledge.model_validate(qa_knowledge)
qas.append(qa)
session.add_all(qas)
session.commit()
for qa in qas:
session.refresh(qa)
return qas
@classmethod
async def total_count(cls, sql):
async with get_async_db_session() as session:
return await async_get_count(session, sql)
@classmethod
async def query_by_condition(cls, sql):
async with get_async_db_session() as session:
result = await session.exec(sql)
return result.all()
@classmethod
def query_by_condition_v1(cls, source: List[int], create_start: str, create_end: str):
with get_sync_db_session() as session:
sql = select(QAKnowledge).where(QAKnowledge.source.in_(source)).where(
QAKnowledge.create_time.between(create_start, create_end))
return session.exec(sql).all()
# accordingqa_idTotal Fetched
@classmethod
async def async_count_by_id(cls, qa_id: int) -> int:
async with get_async_db_session() as session:
statement = select(func.count(QAKnowledge.id)).where(QAKnowledge.knowledge_id == qa_id)
return await async_get_count(session, statement)
@classmethod
def count_by_id(cls, qa_id: int) -> int:
with get_sync_db_session() as session:
statement = select(func.count(QAKnowledge.id)).where(QAKnowledge.knowledge_id == qa_id)
return get_count(session, statement)
@classmethod
def batch_update_status_by_ids(cls, qa_ids: List[int],
status: QAStatus,
remark: str = "") -> None:
"""
accordingQAkey learning pointsIDBulk Update Status
:param qa_ids: QAkey learning pointsIDVertical
:param status: Status
:param remark: Remark
:return:
"""
statement = (
update(QAKnowledge).where(col(QAKnowledge.id).in_(qa_ids))
)
statement = statement.values(status=status.value).values(remark=remark)
with get_sync_db_session() as session:
session.exec(statement)
session.commit()
# according knowledge_id Update status
@classmethod
def update_status_by_knowledge_id(cls, knowledge_id: int, status: QAStatus, remark: str = "") -> None:
"""
according knowledge_id Update status
:param knowledge_id: The knowledge base uponID
:param status: Status
:param remark: Remark
:return:
"""
statement = (
update(QAKnowledge).where(col(QAKnowledge.knowledge_id) == knowledge_id)
)
statement = statement.values(status=status.value).values(remark=remark)
with get_sync_db_session() as session:
session.exec(statement)
session.commit()
================================================
FILE: src/backend/bisheng/knowledge/domain/repositories/__init__.py
================================================
================================================
FILE: src/backend/bisheng/knowledge/domain/repositories/implementations/__init__.py
================================================
================================================
FILE: src/backend/bisheng/knowledge/domain/repositories/implementations/knowledge_file_repository_impl.py
================================================
from typing import Any, Coroutine
from sqlmodel import select, col
from sqlmodel.ext.asyncio.session import AsyncSession
from bisheng.common.repositories.implementations.base_repository_impl import BaseRepositoryImpl
from bisheng.knowledge.domain.models.knowledge_file import KnowledgeFile
from bisheng.knowledge.domain.repositories.interfaces.knowledge_file_repository import KnowledgeFileRepository
class KnowledgeFileRepositoryImpl(BaseRepositoryImpl[KnowledgeFile, int], KnowledgeFileRepository):
"""Knowledge Base Repository Implementation Class"""
def __init__(self, session: AsyncSession):
super().__init__(session, KnowledgeFile)
# according knowledge_idAndknowledge_file_ids Dapatkanuser_metadata Data field
async def get_user_metadata_by_knowledge_file_ids(self, knowledge_id: int, knowledge_file_ids: list[int]) -> dict[
int | None, list[dict[str, Any]] | None]:
query = select(KnowledgeFile).where(
KnowledgeFile.knowledge_id == knowledge_id,
col(KnowledgeFile.id).in_(knowledge_file_ids)
)
result = await self.session.exec(query)
knowledge_files = result.all()
user_metadata_dict = {}
for knowledge_file in knowledge_files:
if knowledge_file.user_metadata:
# Sort by newness
sorted_user_metadata = dict(sorted(knowledge_file.user_metadata.items(), key=lambda item: item[1].get("updated_at", 0), reverse=False))
user_metadata_dict[knowledge_file.id] = sorted_user_metadata
else:
user_metadata_dict[knowledge_file.id] = {}
return user_metadata_dict
================================================
FILE: src/backend/bisheng/knowledge/domain/repositories/implementations/knowledge_repository_impl.py
================================================
from typing import Union
from sqlmodel import Session
from sqlmodel.ext.asyncio.session import AsyncSession
from bisheng.common.repositories.implementations.base_repository_impl import BaseRepositoryImpl
from bisheng.knowledge.domain.models.knowledge import Knowledge
from bisheng.knowledge.domain.repositories.interfaces.knowledge_repository import KnowledgeRepository
class KnowledgeRepositoryImpl(BaseRepositoryImpl[Knowledge, int], KnowledgeRepository):
"""Knowledge Base Repository Implementation Class"""
def __init__(self, session: Union[AsyncSession, Session]):
super().__init__(session, Knowledge)
================================================
FILE: src/backend/bisheng/knowledge/domain/repositories/interfaces/__init__.py
================================================
================================================
FILE: src/backend/bisheng/knowledge/domain/repositories/interfaces/knowledge_file_repository.py
================================================
from abc import ABC
from typing import Any
from bisheng.common.repositories.interfaces.base_repository import BaseRepository
from bisheng.knowledge.domain.models.knowledge_file import KnowledgeFile
class KnowledgeFileRepository(BaseRepository[KnowledgeFile, int], ABC):
"""Knowledge Base File Repository Interface Class"""
async def get_user_metadata_by_knowledge_file_ids(self, knowledge_id: int,
knowledge_file_ids: list[int]) ->dict[
int | None, list[dict[str, Any]] | None]:
"""according knowledge_idAndknowledge_file_ids Dapatkanuser_metadata Data field"""
pass
================================================
FILE: src/backend/bisheng/knowledge/domain/repositories/interfaces/knowledge_repository.py
================================================
from abc import ABC
from bisheng.common.repositories.interfaces.base_repository import BaseRepository
from bisheng.knowledge.domain.models.knowledge import Knowledge
class KnowledgeRepository(BaseRepository[Knowledge, int], ABC):
"""Knowledge Base Repository Interface"""
pass
================================================
FILE: src/backend/bisheng/knowledge/domain/schemas/__init__.py
================================================
================================================
FILE: src/backend/bisheng/knowledge/domain/schemas/knowledge_file_schema.py
================================================
from typing import Optional, Type, Any, Dict
from pydantic import Field
from bisheng.knowledge.domain.models.knowledge_file import KnowledgeFileRead, KnowledgeFile
class KnowledgeFileInfoRes(KnowledgeFileRead):
"""Knowledge Base File Information Response Body"""
creat_user: Optional[str] = Field(default=None, description='Create user name')
update_user: Optional[str] = Field(default=None, description='Update user name')
@classmethod
def from_orm_extra(cls, model: KnowledgeFile, extra: Dict[str, Any]) -> "KnowledgeFileInfoRes":
"""FROMORMModel and Additional Information Create Response Body Instance"""
knowledge_file_info = cls.model_validate(model)
knowledge_file_info.creat_user = extra.get('creat_user')
knowledge_file_info.update_user = extra.get('update_user')
return knowledge_file_info
================================================
FILE: src/backend/bisheng/knowledge/domain/schemas/knowledge_rag_schema.py
================================================
from typing import Optional
from pydantic import BaseModel, Field
class Metadata(BaseModel):
""" Metadata model for knowledge retrieval-augmented generation (RAG) documents."""
document_id: Optional[int] = Field(default=None, description="Document ID")
document_name: Optional[str] = Field(default=None, description="Document Name")
abstract: Optional[str] = Field(default=None, description="Abstract of the document")
chunk_index: Optional[int] = Field(default=None, description="Chunk Index")
bbox: Optional[str] = Field(default=None, description="Bounding Box information")
page: Optional[int] = Field(default=None, description="Page number")
knowledge_id: Optional[int] = Field(default=None, description="Knowledge ID")
upload_time: Optional[int] = Field(default=None, description="Upload timestamp")
update_time: Optional[int] = Field(default=None, description="Update timestamp")
uploader: Optional[str] = Field(default=None, description="Uploader's name")
updater: Optional[str] = Field(default=None, description="Updater's name")
user_metadata: Optional[dict] = Field(default=None, description="User-defined metadata")
================================================
FILE: src/backend/bisheng/knowledge/domain/schemas/knowledge_schema.py
================================================
import re
from datetime import datetime
from typing import Optional, List, Any
from pydantic import BaseModel, Field, field_validator
from bisheng.knowledge.domain.models.knowledge import MetadataFieldType
class UpdatePreviewFileChunk(BaseModel):
knowledge_id: int = Field(..., description='The knowledge base uponID')
file_path: str = Field(..., description='FilePath')
text: str = Field(..., description='Text block Content')
chunk_index: int = Field(..., description='Text block index, Insidemetadatamile')
bbox: Optional[str] = Field(default='', description='Text blocksbboxMessage')
class MetadataField(BaseModel):
"""Metadata Field Model"""
field_name: str = Field(..., max_length=255, description='Metadata field name')
field_type: MetadataFieldType = Field(..., description='Metadata field type')
updated_at: int = Field(default_factory=lambda: int(datetime.now().timestamp()),
description='Metadata field update timestamp')
@field_validator('field_name')
@classmethod
def validate_field_name(cls, v: str) -> str:
# Must consist of lowercase letters, numbers, underscores, and must begin with a lowercase letter
pattern = r'^[a-z][a-z0-9_]*$'
if not re.match(pattern, v):
raise ValueError(
'field_name must start with a lowercase letter and contain only lowercase letters, numbers, and underscores, current value: {v}')
return v
class AddKnowledgeMetadataFieldsReq(BaseModel):
"""Add Knowledge Base Metadata Field Request Body"""
knowledge_id: int = Field(..., description='The knowledge base uponID')
metadata_fields: List[MetadataField] = Field(..., description='List of metadata fields to add')
class UpdateKnowledgeMetadataFieldsReq(BaseModel):
"""Update Knowledge Base Metadata Field Request Body"""
class UpdateMetadataFieldName(BaseModel):
"""Update Metadata Field Name Model"""
old_field_name: str = Field(..., description='Old Metadata Field Name')
new_field_name: str = Field(..., max_length=255, description='New Metadata Field Name')
@field_validator('new_field_name')
@classmethod
def validate_new_field_name(cls, v: str) -> str:
# Must consist of lowercase letters, numbers, underscores, and must begin with a lowercase letter
pattern = r'^[a-z][a-z0-9_]*$'
if not re.match(pattern, v):
raise ValueError(
f"new_field_name must start with a lowercase letter and contain only lowercase letters, numbers, and underscores, current value: {v}")
return v
@field_validator('old_field_name')
@classmethod
def validate_old_field_name(cls, v: str) -> str:
# Tidak boleh kosong.
if not v:
raise ValueError("old_field_name cannot be empty")
return v
knowledge_id: int = Field(..., description='The knowledge base uponID')
metadata_fields: List[UpdateMetadataFieldName] = Field(..., description='List of metadata fields to update')
class FileUserMetaDataInfo(BaseModel):
field_name: str = Field(..., description='Metadata field name')
field_value: Optional[Any] = Field(default=None, description='Metadata field value')
updated_at: int = Field(default_factory=lambda: int(datetime.now().timestamp()),
description='Metadata field update timestamp')
class ModifyKnowledgeFileMetaDataReq(BaseModel):
"""Change Knowledge Base File Metadata Request Body"""
knowledge_file_id: int = Field(..., description='Knowledge Base FilesID')
user_metadata_list: List[FileUserMetaDataInfo] = Field(..., description='List of file metadata to add')
================================================
FILE: src/backend/bisheng/knowledge/domain/services/__init__.py
================================================
================================================
FILE: src/backend/bisheng/knowledge/domain/services/knowledge_file_service.py
================================================
import copy
from typing import List
from loguru import logger
from bisheng.common.constants.vectorstore_metadata import KNOWLEDGE_RAG_METADATA_SCHEMA
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.http_error import UnAuthorizedError
from bisheng.common.errcode.knowledge import KnowledgeFileNotExistError, KnowledgeMetadataFieldNotExistError, \
KnowledgeMetadataFieldExistError, KnowledgeMetadataValueTypeConvertError
from bisheng.database.models.role_access import AccessType
from bisheng.knowledge.domain import utils
from bisheng.knowledge.domain.knowledge_rag import KnowledgeRag
from bisheng.knowledge.domain.repositories.interfaces.knowledge_file_repository import KnowledgeFileRepository
from bisheng.knowledge.domain.repositories.interfaces.knowledge_repository import KnowledgeRepository
from bisheng.knowledge.domain.schemas.knowledge_file_schema import KnowledgeFileInfoRes
from bisheng.knowledge.domain.schemas.knowledge_schema import ModifyKnowledgeFileMetaDataReq, MetadataField
from bisheng.open_endpoints.domain.schemas.knowledge import DeleteUserMetadataReq
from bisheng.user.domain.models.user import UserDao
class KnowledgeFileService:
"""Knowledge File Service Class"""
def __init__(self, knowledge_file_repository: 'KnowledgeFileRepository',
knowledge_repository: 'KnowledgeRepository'):
self.knowledge_file_repository = knowledge_file_repository
self.knowledge_repository = knowledge_repository
async def get_knowledge_file_info(self, login_user: 'UserPayload', knowledge_file_id: int):
"""Get Knowledge File Information"""
knowledge_file_model = await self.knowledge_file_repository.find_by_id(
entity_id=knowledge_file_id)
if not knowledge_file_model:
raise KnowledgeFileNotExistError()
knowledge_model = await self.knowledge_repository.find_by_id(
entity_id=knowledge_file_model.knowledge_id)
# Permission check
if not await login_user.async_access_check(
knowledge_model.user_id, str(knowledge_file_model.knowledge_id), AccessType.KNOWLEDGE
):
raise UnAuthorizedError()
create_user = await UserDao.aget_user(user_id=knowledge_file_model.user_id)
update_user = await UserDao.aget_user(user_id=knowledge_file_model.updater_id)
knowledge_file_info_res = KnowledgeFileInfoRes.from_orm_extra(model=knowledge_file_model,
extra={
'creat_user': create_user.user_name if create_user else '',
'update_user': update_user.user_name if update_user else create_user.user_name
})
if not knowledge_file_info_res.user_metadata:
metadata_field_dict = {item['field_name']: MetadataField(**item) for item in
knowledge_model.metadata_fields or []}
for key, item in knowledge_file_info_res.user_metadata.items():
if key in metadata_field_dict:
item['field_type'] = metadata_field_dict[key].field_type
return knowledge_file_info_res
@staticmethod
async def modify_milvus_file_user_metadata(invoke_user_id: int, knowledge_model, knowledge_file_id,
user_metadata: dict):
"""Change Milvus User metadata for files in"""
vector_client = await KnowledgeRag.init_knowledge_milvus_vectorstore(invoke_user_id, knowledge=knowledge_model,
metadata_schemas=KNOWLEDGE_RAG_METADATA_SCHEMA)
# Find all the data first
search_result = await vector_client.aclient.query(collection_name=knowledge_model.collection_name,
filter=f"document_id == {knowledge_file_id}", limit=10000)
# Modify User Metadata
for item in search_result:
item["user_metadata"] = user_metadata
# Bulk Update Data
await vector_client.aclient.upsert(collection_name=vector_client.collection_name,
data=search_result)
@staticmethod
async def modify_elasticsearch_file_user_metadata(knowledge_model, knowledge_file_id, user_metadata: dict):
"""Change Elasticsearch User metadata for files in"""
es_client = await KnowledgeRag.init_knowledge_es_vectorstore(knowledge=knowledge_model,
metadata_schemas=KNOWLEDGE_RAG_METADATA_SCHEMA)
# Use update_by_query to update eligible documents
res = await es_client.client.update_by_query(
index=knowledge_model.index_name,
body={
"script": {
"source": "ctx._source.metadata.user_metadata = params.user_metadata",
"lang": "painless",
"params": {"user_metadata": user_metadata}
},
"query": {
"term": {"metadata.document_id": knowledge_file_id}
}
}
)
logger.info(f"Elasticsearch update_by_query result: {res}")
async def modify_file_user_metadata(self, login_user: 'UserPayload',
modify_file_metadata_req: 'ModifyKnowledgeFileMetaDataReq'):
"""Add Knowledge File Metadata"""
knowledge_file_model = await self.knowledge_file_repository.find_by_id(
entity_id=modify_file_metadata_req.knowledge_file_id)
if not knowledge_file_model:
raise KnowledgeFileNotExistError()
knowledge_model = await self.knowledge_repository.find_by_id(
entity_id=knowledge_file_model.knowledge_id)
# Permission check
if not await login_user.async_access_check(
knowledge_model.user_id, str(knowledge_file_model.knowledge_id), AccessType.KNOWLEDGE_WRITE
):
raise UnAuthorizedError()
metadata_field_dict = {item['field_name']: MetadataField(**item) for item in
knowledge_model.metadata_fields or []}
# Initialize metadata if it's None
if knowledge_file_model.user_metadata is None:
knowledge_file_model.user_metadata = {}
# Create a new dictionary to store updated metadata
new_current_user_metadata = {}
for item in modify_file_metadata_req.user_metadata_list:
if item.field_name in metadata_field_dict.keys():
item_dict = item.model_dump()
# Data type conversion
try:
field_type = metadata_field_dict[item.field_name].field_type
field_value = utils.metadata_value_type_convert(
value=item_dict['field_value'], target_type=field_type)
item_dict['field_value'] = field_value
except Exception as e:
logger.error(f"Metadata value type conversion error: {e}")
continue
item_dict['field_type'] = metadata_field_dict[item.field_name].field_type
item_dict.pop('field_name')
new_current_user_metadata[item.field_name] = item_dict
# Update user metadata for knowledge files
knowledge_file_model.user_metadata = new_current_user_metadata
knowledge_file_model.updater_id = login_user.user_id
knowledge_file_model = await self.knowledge_file_repository.update(knowledge_file_model)
user_metadata = {key: value.get('field_value') for key, value in knowledge_file_model.user_metadata.items()}
# Change Milvus, Elasticsearch Corresponding metadata in
await self.modify_milvus_file_user_metadata(
login_user.user_id,
knowledge_model=knowledge_model,
knowledge_file_id=knowledge_file_model.id,
user_metadata=user_metadata
)
await self.modify_elasticsearch_file_user_metadata(
knowledge_model=knowledge_model,
knowledge_file_id=knowledge_file_model.id,
user_metadata=user_metadata
)
return knowledge_file_model
async def add_file_user_metadata(self, login_user: 'UserPayload', knowledge_id: int,
add_file_metadata_req: 'List[ModifyKnowledgeFileMetaDataReq]'):
"""Add Knowledge File Metadata"""
knowledge_model = await self.knowledge_repository.find_by_id(
entity_id=knowledge_id)
if not knowledge_model:
raise KnowledgeFileNotExistError()
# Permission check
if not await login_user.async_access_check(
knowledge_model.user_id, str(knowledge_model.id), AccessType.KNOWLEDGE_WRITE
):
raise UnAuthorizedError()
metadata_field_dict = {item['field_name']: MetadataField(**item) for item in
knowledge_model.metadata_fields or []}
existing_files = await self.knowledge_file_repository.find_by_ids(
[req.knowledge_file_id for req in add_file_metadata_req])
existing_files_dict = {file.id: file for file in existing_files}
updated_knowledge_files = []
for modify_file_metadata_req in add_file_metadata_req:
knowledge_file_model = existing_files_dict.get(modify_file_metadata_req.knowledge_file_id)
# Check if knowledge file exists
if not knowledge_file_model:
raise KnowledgeFileNotExistError(
msg=f"Knowledge Base FilesID:{modify_file_metadata_req.knowledge_file_id} Does not exist")
# Initialize metadata if it's None
if knowledge_file_model.user_metadata is None:
knowledge_file_model.user_metadata = {}
current_user_metadata = copy.deepcopy(knowledge_file_model.user_metadata)
for item in modify_file_metadata_req.user_metadata_list:
if item.field_name not in metadata_field_dict.keys():
raise KnowledgeMetadataFieldNotExistError(field_name=item.field_name)
elif item.field_name in current_user_metadata.keys():
raise KnowledgeMetadataFieldExistError(
field_name=item.field_name,
msg=f"Knowledge Base FilesID:{modify_file_metadata_req.knowledge_file_id} Metadata field already exists:{item.field_name}"
)
item_dict = item.model_dump()
# Data type conversion
try:
field_type = metadata_field_dict[item.field_name].field_type
field_value = utils.metadata_value_type_convert(
value=item_dict['field_value'], target_type=field_type)
item_dict['field_value'] = field_value
except Exception as e:
raise KnowledgeMetadataValueTypeConvertError(
msg=f"Meta data fields {item.field_name} Value type conversion error: {e}")
item_dict['field_type'] = metadata_field_dict[item.field_name].field_type
item_dict.pop('field_name')
current_user_metadata[item.field_name] = item_dict
# Update user metadata for knowledge files
knowledge_file_model.user_metadata = current_user_metadata
knowledge_file_model.updater_id = login_user.user_id
updated_knowledge_files.append(knowledge_file_model)
# Bulk Update Knowledge Files
for knowledge_file_model in updated_knowledge_files:
knowledge_file_model = await self.knowledge_file_repository.update(knowledge_file_model)
user_metadata = {key: value.get('field_value') for key, value in knowledge_file_model.user_metadata.items()}
# Change Milvus, Elasticsearch Corresponding metadata in
await self.modify_milvus_file_user_metadata(
login_user.user_id,
knowledge_model=knowledge_model,
knowledge_file_id=knowledge_file_model.id,
user_metadata=user_metadata
)
await self.modify_elasticsearch_file_user_metadata(
knowledge_model=knowledge_model,
knowledge_file_id=knowledge_file_model.id,
user_metadata=user_metadata
)
return updated_knowledge_files
# Batch modify file user metadata
async def batch_modify_file_user_metadata(self, login_user: 'UserPayload',
knowledge_id: int,
modify_file_metadata_reqs: 'List[ModifyKnowledgeFileMetaDataReq]'):
"""Batch Modify Knowledge File Metadata"""
knowledge_model = await self.knowledge_repository.find_by_id(
entity_id=knowledge_id)
if not knowledge_model:
raise KnowledgeFileNotExistError()
# Permission check
if not await login_user.async_access_check(
knowledge_model.user_id, str(knowledge_model.id), AccessType.KNOWLEDGE_WRITE
):
raise UnAuthorizedError()
metadata_field_dict = {item['field_name']: MetadataField(**item) for item in
knowledge_model.metadata_fields or []}
existing_files = await self.knowledge_file_repository.find_by_ids(
[req.knowledge_file_id for req in modify_file_metadata_reqs])
existing_files_dict = {file.id: file for file in existing_files}
updated_knowledge_files = []
for modify_file_metadata_req in modify_file_metadata_reqs:
knowledge_file_model = existing_files_dict.get(modify_file_metadata_req.knowledge_file_id)
if not knowledge_file_model:
raise KnowledgeFileNotExistError(
msg=f"Knowledge Base FilesID:{modify_file_metadata_req.knowledge_file_id} Does not exist")
# Initialize metadata if it's None
if knowledge_file_model.user_metadata is None:
knowledge_file_model.user_metadata = {}
current_user_metadata = copy.deepcopy(knowledge_file_model.user_metadata)
# Update user metadata for knowledge files
for item in modify_file_metadata_req.user_metadata_list:
if item.field_name not in metadata_field_dict.keys():
raise KnowledgeMetadataFieldNotExistError(field_name=item.field_name)
if item.field_name not in current_user_metadata.keys():
raise KnowledgeMetadataFieldNotExistError(
field_name=item.field_name,
msg=f"Knowledge Base FilesID:{modify_file_metadata_req.knowledge_file_id} No metadata fields exist:{item.field_name}"
)
existing_item = current_user_metadata.get(item.field_name)
try:
# Data Type
field_type = metadata_field_dict[item.field_name].field_type
# Update values and update time for existing fields
field_value = utils.metadata_value_type_convert(
value=item.field_value, target_type=field_type)
existing_item['field_value'] = field_value
current_user_metadata[item.field_name] = existing_item
except Exception as e:
raise KnowledgeMetadataValueTypeConvertError(
msg=f"Meta data fields {item.field_name} Value type conversion error: {e}")
knowledge_file_model.user_metadata = current_user_metadata
knowledge_file_model.updater_id = login_user.user_id
updated_knowledge_files.append(knowledge_file_model)
# Bulk Update Knowledge Files
for knowledge_file_model in updated_knowledge_files:
knowledge_file_model = await self.knowledge_file_repository.update(knowledge_file_model)
user_metadata = {key: value.get('field_value') for key, value in knowledge_file_model.user_metadata.items()}
# Change Milvus, Elasticsearch Corresponding metadata in
await self.modify_milvus_file_user_metadata(
login_user.user_id,
knowledge_model=knowledge_model,
knowledge_file_id=knowledge_file_model.id,
user_metadata=user_metadata
)
await self.modify_elasticsearch_file_user_metadata(
knowledge_model=knowledge_model,
knowledge_file_id=knowledge_file_model.id,
user_metadata=user_metadata
)
return updated_knowledge_files
async def batch_delete_file_user_metadata(self, login_user: 'UserPayload',
knowledge_id: int,
delete_user_metadata_req: 'List[DeleteUserMetadataReq]'):
"""
Bulk Delete Knowledge File Metadata
Args:
login_user:
knowledge_id:
delete_user_metadata_req:
Returns:
"""
knowledge_model = await self.knowledge_repository.find_by_id(
entity_id=knowledge_id)
if not knowledge_model:
raise KnowledgeFileNotExistError()
# Permission check
if not await login_user.async_access_check(
knowledge_model.user_id, str(knowledge_model.id), AccessType.KNOWLEDGE_WRITE
):
raise UnAuthorizedError()
existing_files = await self.knowledge_file_repository.find_by_ids(
[req.knowledge_file_id for req in delete_user_metadata_req])
existing_files_dict = {file.id: file for file in existing_files}
updated_knowledge_files = []
for delete_metadata_req in delete_user_metadata_req:
knowledge_file_model = existing_files_dict.get(delete_metadata_req.knowledge_file_id)
if not knowledge_file_model:
raise KnowledgeFileNotExistError(
msg=f"Knowledge Base FilesID:{delete_metadata_req.knowledge_file_id} Does not exist")
current_user_metadata = copy.deepcopy(knowledge_file_model.user_metadata) or {}
# Delete the specified metadata field
for field_name in delete_metadata_req.field_names:
if field_name not in current_user_metadata.keys():
raise KnowledgeMetadataFieldNotExistError(
field_name=field_name,
msg=f"Knowledge Base FilesID:{delete_metadata_req.knowledge_file_id} No metadata fields exist:{field_name}"
)
current_user_metadata.pop(field_name)
knowledge_file_model.user_metadata = current_user_metadata
knowledge_file_model.updater_id = login_user.user_id
updated_knowledge_files.append(knowledge_file_model)
# Bulk Update Knowledge Files
for knowledge_file_model in updated_knowledge_files:
knowledge_file_model = await self.knowledge_file_repository.update(knowledge_file_model)
user_metadata = {key: value.get('field_value') for key, value in knowledge_file_model.user_metadata.items()}
# Change Milvus, Elasticsearch Corresponding metadata in
await self.modify_milvus_file_user_metadata(
login_user.user_id,
knowledge_model=knowledge_model,
knowledge_file_id=knowledge_file_model.id,
user_metadata=user_metadata
)
await self.modify_elasticsearch_file_user_metadata(
knowledge_model=knowledge_model,
knowledge_file_id=knowledge_file_model.id,
user_metadata=user_metadata
)
return updated_knowledge_files
async def list_knowledge_file_user_metadata(self, login_user: 'UserPayload',
knowledge_id: int,
knowledge_file_ids: List[int]):
"""
List user metadata for knowledge files
Args:
login_user:
knowledge_id:
knowledge_file_ids:
Returns:
"""
knowledge_model = await self.knowledge_repository.find_by_id(
entity_id=knowledge_id)
if not knowledge_model:
raise KnowledgeFileNotExistError()
# Permission check
if not await login_user.async_access_check(
knowledge_model.user_id, str(knowledge_model.id), AccessType.KNOWLEDGE
):
raise UnAuthorizedError()
user_metadata_dict = await self.knowledge_file_repository.get_user_metadata_by_knowledge_file_ids(
knowledge_id=knowledge_id,
knowledge_file_ids=knowledge_file_ids)
return user_metadata_dict
================================================
FILE: src/backend/bisheng/knowledge/domain/services/knowledge_service.py
================================================
import copy
from datetime import datetime
from fastapi import BackgroundTasks
from bisheng.common.constants.vectorstore_metadata import KNOWLEDGE_RAG_METADATA_SCHEMA
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.http_error import UnAuthorizedError
from bisheng.common.errcode.knowledge import KnowledgeNotExistError, KnowledgeMetadataFieldConflictError, \
KnowledgeMetadataFieldExistError, KnowledgeMetadataFieldNotExistError, KnowledgeMetadataFieldImmutableError
from bisheng.database.models.role_access import AccessType
from bisheng.knowledge.domain.knowledge_rag import KnowledgeRag
from bisheng.knowledge.domain.models.knowledge import KnowledgeDao, Knowledge
from bisheng.knowledge.domain.repositories.interfaces.knowledge_file_repository import KnowledgeFileRepository
from bisheng.knowledge.domain.repositories.interfaces.knowledge_repository import KnowledgeRepository
from bisheng.knowledge.domain.schemas.knowledge_schema import AddKnowledgeMetadataFieldsReq, \
UpdateKnowledgeMetadataFieldsReq
from bisheng.utils.util import retry_async
class KnowledgeService:
"""Service class for managing knowledge domain operations."""
def __init__(self, knowledge_repository: 'KnowledgeRepository',
knowledge_file_repository: 'KnowledgeFileRepository'):
self.knowledge_repository = knowledge_repository
self.knowledge_file_repository = knowledge_file_repository
async def add_metadata_fields(self, login_user: UserPayload, add_metadata_fields: AddKnowledgeMetadataFieldsReq):
"""Add metadata fields to a knowledge entity."""
knowledge_model = await self.knowledge_repository.find_by_id(entity_id=add_metadata_fields.knowledge_id)
if not knowledge_model:
raise KnowledgeNotExistError()
# Permission check
if not await login_user.async_access_check(
knowledge_model.user_id, str(knowledge_model.id), AccessType.KNOWLEDGE_WRITE
):
raise UnAuthorizedError()
# Initialize metadata_fields if it's None
if knowledge_model.metadata_fields is None:
knowledge_model.metadata_fields = []
existing_field_names = {field["field_name"] for field in knowledge_model.metadata_fields}
# Built field names
built_field_names = [item.field_name for item in KNOWLEDGE_RAG_METADATA_SCHEMA]
# Determine if the added field conflicts with an existing field
for field in add_metadata_fields.metadata_fields:
if field.field_name in existing_field_names:
raise KnowledgeMetadataFieldExistError(field_name=field.field_name)
elif field.field_name in built_field_names:
raise KnowledgeMetadataFieldConflictError(field_name=field.field_name)
metadata_fields = copy.deepcopy(knowledge_model.metadata_fields)
# Add new metadata fields, avoiding duplicates
for field in add_metadata_fields.metadata_fields:
if field.field_name not in existing_field_names:
metadata_fields.append(field.model_dump())
knowledge_model.metadata_fields = metadata_fields
knowledge_model = await self.knowledge_repository.update(knowledge_model)
return knowledge_model
# Update Milvus and Elasticsearch metadata field names
async def update_vectorstore_metadata_field_names(self, invoke_user_id: int, knowledge_model, field_name_map):
"""Update metadata field names in Milvus and Elasticsearch vector stores."""
# Update Milvus metadata field names
# milvus_vectorstore = KnowledgeRag.init_knowledge_milvus_vectorstore_sync(knowledge=knowledge_model)
# Implement Milvus metadata field name update logic here
# Update Elasticsearch metadata field names
# es_vectorstore = KnowledgeRag.init_knowledge_es_vectorstore_sync(knowledge=knowledge_model)
# Implement Elasticsearch metadata field name update logic here
knowledge_model_files = await self.knowledge_file_repository.find_all(knowledge_id=knowledge_model.id)
vector_client = await KnowledgeRag.init_knowledge_milvus_vectorstore(invoke_user_id, knowledge=knowledge_model,
metadata_schemas=KNOWLEDGE_RAG_METADATA_SCHEMA)
es_client = await KnowledgeRag.init_knowledge_es_vectorstore(knowledge=knowledge_model,
metadata_schemas=KNOWLEDGE_RAG_METADATA_SCHEMA)
# Requestmilvus
@retry_async(delay=3)
async def request_milvus(new_data):
# Bulk Update Data
await vector_client.aclient.upsert(collection_name=vector_client.collection_name, data=new_data)
# Requestes
@retry_async(delay=3)
async def request_es(request_body):
await es_client.client.update_by_query(
index=knowledge_model.index_name,
body=request_body
)
for knowledge_file in knowledge_model_files:
# Update Milvus metadata
# Implement Milvus metadata field name update logic for each knowledge file here
# Query all vectors in this knowledge file in Milvus.
search_result = await vector_client.aclient.query(collection_name=knowledge_model.collection_name,
filter=f"document_id == {knowledge_file.id}", limit=10000)
# Modify User Metadata Field Name
for item in search_result:
for old_field_name, new_field_name in field_name_map.items():
if old_field_name in item["user_metadata"]:
item["user_metadata"][new_field_name] = item["user_metadata"].pop(old_field_name)
# Bulk Update Data
await request_milvus(search_result)
# Update Elasticsearch metadata
# Implement Elasticsearch metadata field name update logic for each knowledge file here
# Use update_by_query to update eligible documents
script_lines = []
for old_field_name, new_field_name in field_name_map.items():
script_lines.append(
f"if (ctx._source.metadata.user_metadata.containsKey('{old_field_name}')) " +
"{ ctx._source.metadata.user_metadata['" + new_field_name + "'] = " +
"ctx._source.metadata.user_metadata.remove('" + old_field_name + "'); }"
)
script_source = " ".join(script_lines)
body = {
"script": {
"source": script_source,
"lang": "painless"
},
"query": {
"term": {"metadata.document_id": knowledge_file.id}
}
}
# Update es
await request_es(body)
# Update knowledge file's user_metadata field
user_metadata_dict = copy.deepcopy(knowledge_file.user_metadata)
for old_field_name, new_field_name in field_name_map.items():
user_metadata = user_metadata_dict.pop(old_field_name, None)
if user_metadata is not None:
user_metadata["updated_at"] = int(datetime.now().timestamp())
user_metadata[new_field_name] = user_metadata
knowledge_file.user_metadata = user_metadata_dict
await self.knowledge_file_repository.update(knowledge_file)
async def update_metadata_fields(self, login_user: UserPayload,
update_metadata_fields: UpdateKnowledgeMetadataFieldsReq,
background_tasks: BackgroundTasks):
"""Update metadata field names in a knowledge entity."""
knowledge_model = await self.knowledge_repository.find_by_id(entity_id=update_metadata_fields.knowledge_id)
if not knowledge_model:
raise KnowledgeNotExistError()
# Permission check
if not await login_user.async_access_check(
knowledge_model.user_id, str(knowledge_model.id), AccessType.KNOWLEDGE_WRITE
):
raise UnAuthorizedError()
if knowledge_model.metadata_fields is None:
return knowledge_model # No metadata fields to update
# Built field names
built_field_names = [item.field_name for item in KNOWLEDGE_RAG_METADATA_SCHEMA]
existing_field_names = {field["field_name"] for field in knowledge_model.metadata_fields}
for field in update_metadata_fields.metadata_fields:
if field.old_field_name in built_field_names:
raise KnowledgeMetadataFieldImmutableError(field_name=field.old_field_name)
elif field.new_field_name in built_field_names:
raise KnowledgeMetadataFieldConflictError(field_name=field.new_field_name)
elif field.new_field_name in existing_field_names:
raise KnowledgeMetadataFieldExistError(field_name=field.new_field_name)
elif field.old_field_name not in existing_field_names:
raise KnowledgeMetadataFieldNotExistError(field_name=field.old_field_name)
field_name_map = {
field_update.old_field_name: field_update.new_field_name
for field_update in update_metadata_fields.metadata_fields
}
# Check if all old field names exist and new field names do not exist
for old_field_name in field_name_map.keys():
if old_field_name not in existing_field_names or field_name_map[old_field_name] in existing_field_names:
return knowledge_model
metadata_fields = copy.deepcopy(knowledge_model.metadata_fields)
# Update metadata field names
for i, field in enumerate(metadata_fields):
if field["field_name"] in field_name_map:
metadata_fields[i]["field_name"] = field_name_map[field["field_name"]]
metadata_fields[i]["updated_at"] = int(datetime.now().timestamp())
knowledge_model.metadata_fields = metadata_fields
knowledge_model = await self.knowledge_repository.update(knowledge_model)
# Milvus and ES metadata field name update logic
background_tasks.add_task(
self.update_vectorstore_metadata_field_names,
login_user.user_id,
knowledge_model,
field_name_map
)
return knowledge_model
async def delete_vectorstore_metadata_fields(self, invoke_user_id: int, knowledge_model, field_names: list[str]):
"""Delete metadata fields in Milvus and Elasticsearch vector stores."""
# Delete Milvus metadata fields
# milvus_vectorstore = KnowledgeRag.init_knowledge_milvus_vectorstore_sync(knowledge=knowledge_model)
# Implement Milvus metadata field deletion logic here
# Delete Elasticsearch metadata fields
# es_vectorstore = KnowledgeRag.init_knowledge_es_vectorstore_sync(knowledge=knowledge_model)
# Implement Elasticsearch metadata field deletion logic here
knowledge_model_files = await self.knowledge_file_repository.find_all(knowledge_id=knowledge_model.id)
vector_client = await KnowledgeRag.init_knowledge_milvus_vectorstore(invoke_user_id, knowledge=knowledge_model,
metadata_schemas=KNOWLEDGE_RAG_METADATA_SCHEMA)
es_client = await KnowledgeRag.init_knowledge_es_vectorstore(knowledge=knowledge_model,
metadata_schemas=KNOWLEDGE_RAG_METADATA_SCHEMA)
# Requestmilvus
@retry_async(delay=3)
async def request_milvus(new_data):
# Bulk Update Data
await vector_client.aclient.upsert(collection_name=vector_client.collection_name, data=new_data)
# Requestes
@retry_async(delay=3)
async def request_es(request_body):
await es_client.client.update_by_query(
index=knowledge_model.index_name,
body=request_body
)
for knowledge_file in knowledge_model_files:
# Delete Milvus metadata fields
# Implement Milvus metadata field deletion logic for each knowledge file here
# Query all vectors in this knowledge file in Milvus.
search_result = await vector_client.aclient.query(collection_name=knowledge_model.collection_name,
filter=f"document_id == {knowledge_file.id}", limit=10000)
# Delete the specified metadata field
for item in search_result:
for field_name in field_names:
if field_name in item["user_metadata"]:
del item["user_metadata"][field_name]
# Bulk Update Data
await request_milvus(search_result)
# Delete Elasticsearch metadata fields
# Implement Elasticsearch metadata field deletion logic for each knowledge file here
# Use update_by_query to update eligible documents
script_lines = []
for field_name in field_names:
script_lines.append(
f"ctx._source.metadata.user_metadata.remove('{field_name}');"
)
script_source = " ".join(script_lines)
body = {
"script": {
"source": script_source,
"lang": "painless"
},
"query": {
"term": {"metadata.document_id": knowledge_file.id}
}
}
# Update es
await request_es(body)
# Update knowledge file's user_metadata field
knowledge_file.user_metadata = {
key: value for key, value in knowledge_file.user_metadata.items()
if key not in field_names
}
await self.knowledge_file_repository.update(knowledge_file)
async def delete_metadata_fields(self, login_user: UserPayload, knowledge_id: int, field_names: list[str],
background_tasks: BackgroundTasks):
"""Delete metadata fields from a knowledge entity."""
knowledge_model = await self.knowledge_repository.find_by_id(entity_id=knowledge_id)
if not knowledge_model:
raise KnowledgeNotExistError()
# Permission check
if not await login_user.async_access_check(
knowledge_model.user_id, str(knowledge_model.id), AccessType.KNOWLEDGE_WRITE
):
raise UnAuthorizedError()
# Initialize metadata_fields if it's None
if knowledge_model.metadata_fields is None:
knowledge_model.metadata_fields = []
existing_field_names = [field["field_name"] for field in knowledge_model.metadata_fields]
# Check if all field names to be deleted exist
for field_name in field_names:
if field_name not in existing_field_names:
raise KnowledgeMetadataFieldNotExistError(field_name=field_name)
# Filter out metadata fields to be deleted
metadata_fields = [
field for field in knowledge_model.metadata_fields
if field['field_name'] not in field_names
]
knowledge_model.metadata_fields = metadata_fields
knowledge_model = await self.knowledge_repository.update(knowledge_model)
# Milvus and ES metadata field deletion logic
background_tasks.add_task(
self.delete_vectorstore_metadata_fields,
login_user.user_id,
knowledge_model,
field_names
)
return knowledge_model
async def list_metadata_fields(self, default_user, knowledge_id):
"""
List metadata fields of a knowledge entity.
Args:
default_user:
knowledge_id:
Returns:
"""
knowledge_model = await self.knowledge_repository.find_by_id(entity_id=knowledge_id)
if not knowledge_model:
raise KnowledgeNotExistError()
# Permission check
if not await default_user.async_access_check(
knowledge_model.user_id, str(knowledge_model.id), AccessType.KNOWLEDGE
):
raise UnAuthorizedError()
if knowledge_model.metadata_fields is None:
knowledge_model.metadata_fields = []
# Sortmetadata_fields by updated_at desc
knowledge_model.metadata_fields.sort(key=lambda x: x.get("updated_at", 0), reverse=True)
return {
"knowledge_id": knowledge_model.id,
"metadata_fields": knowledge_model.metadata_fields or []
}
@classmethod
def get_all_knowledge_by_time_range(cls, start_data: datetime, end_data: datetime, page: int = 1,
page_size: int = 10):
"""Get all the knowledge bases created in a certain timeframe"""
return KnowledgeDao.get_knowledge_by_time_range(start_data, end_data, page, page_size)
@classmethod
def get_first_knowledge(cls) -> Knowledge | None:
return KnowledgeDao.get_first_knowledge()
================================================
FILE: src/backend/bisheng/knowledge/domain/utils.py
================================================
from datetime import datetime
from bisheng.knowledge.domain.models.knowledge import MetadataFieldType
# Convert Time String to Timestamp
def time_str_to_timestamp(time_str):
try:
return int(time_str)
except:
pass
try:
dt = datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S")
return int(dt.timestamp())
except:
pass
try:
dt = datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S")
return int(dt.timestamp())
except:
pass
try:
dt = datetime.strptime(time_str, "%Y/%m/%d %H:%M:%S")
return int(dt.timestamp())
except:
pass
try:
dt = datetime.strptime(time_str, "%Y.%m.%d %H:%M:%S")
return int(dt.timestamp())
except:
pass
try:
dt = datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S.%fZ")
return int(dt.timestamp())
except:
pass
try:
dt = datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S.%f")
return int(dt.timestamp())
except:
pass
try:
dt = datetime.strptime(time_str, "%Yyear%mMonth%dHarian %H:%M:%S")
return int(dt.timestamp())
except:
raise ValueError("Unsupported time format")
# metadata Data Format Conversion
def metadata_value_type_convert(value, target_type: MetadataFieldType):
try:
if target_type == MetadataFieldType.NUMBER:
if not value:
return 0
return int(value)
elif target_type == MetadataFieldType.STRING:
if not value:
return None
return str(value)
elif target_type == MetadataFieldType.TIME:
if not value:
return None
timestamp = time_str_to_timestamp(value)
return timestamp
else:
raise ValueError("Unsupported target type")
except Exception as e:
raise ValueError(f"Failed to convert value '{value}' to type '{target_type}': {e}")
================================================
FILE: src/backend/bisheng/knowledge/rag/__init__.py
================================================
================================================
FILE: src/backend/bisheng/knowledge/rag/elasticsearch_factory.py
================================================
from typing import Optional, List, Dict
from elasticsearch import Elasticsearch, AsyncElasticsearch
from bisheng.common.schemas.rag_schema import RagMetadataFieldSchema
from bisheng.common.services.config_service import settings
from bisheng.core.vectorstore import ElasticsearchStore, AsyncElasticsearchStore, BM25Strategy, AsyncBM25Strategy
def generate_metadata_mappings(metadata_schemas: Optional[List[RagMetadataFieldSchema]]):
"""
Generate Elasticsearch metadata mappings from RagMetadataFieldSchema list.
Args:
metadata_schemas:
Returns:
"""
metadata_mappings: Optional[Dict[str, any]] = None
for schema in metadata_schemas or []:
if metadata_mappings is None:
metadata_mappings = {}
if schema.field_type == 'text':
metadata_mappings[schema.field_name] = {'type': 'text',
'fields': {'keyword': {'type': 'keyword', 'ignore_above': 256}}}
elif schema.field_type == 'boolean':
metadata_mappings[schema.field_name] = {'type': 'boolean'}
elif schema.field_type == 'int8' or schema.field_type == 'int16':
metadata_mappings[schema.field_name] = {'type': 'short'}
elif schema.field_type == 'int32':
metadata_mappings[schema.field_name] = {'type': 'integer'}
elif schema.field_type == 'int64':
metadata_mappings[schema.field_name] = {'type': 'long'}
elif schema.field_type == 'float':
metadata_mappings[schema.field_name] = {'type': 'float'}
elif schema.field_type == 'double':
metadata_mappings[schema.field_name] = {'type': 'double'}
elif schema.field_type == 'json':
metadata_mappings[schema.field_name] = {'type': 'flattened'}
return metadata_mappings
class ElasticsearchFactory:
@staticmethod
def init_vectorstore_sync(index_name: str, **kwargs) -> ElasticsearchStore:
"""Initialize an ElasticsearchStore vectorstore for keywords."""
es_conf = settings.get_vectors_conf().elasticsearch
metadata_schemas: Optional[List[RagMetadataFieldSchema]] = kwargs.pop('metadata_schemas', None)
metadata_mappings = generate_metadata_mappings(metadata_schemas)
es_client = ElasticsearchStore(
index_name=index_name,
strategy=BM25Strategy(),
es_connection=Elasticsearch(hosts=es_conf.elasticsearch_url, **es_conf.ssl_verify),
metadata_mappings=metadata_mappings,
**kwargs
)
return es_client
@staticmethod
def init_vectorstore(index_name: str, **kwargs) -> AsyncElasticsearchStore:
"""Asynchronously initialize an ElasticsearchStore vectorstore for keywords."""
es_conf = settings.get_vectors_conf().elasticsearch
metadata_schemas: Optional[List[RagMetadataFieldSchema]] = kwargs.pop('metadata_schemas', None)
metadata_mappings = generate_metadata_mappings(metadata_schemas)
es_client = AsyncElasticsearchStore(
index_name=index_name,
strategy=AsyncBM25Strategy(),
es_connection=AsyncElasticsearch(hosts=es_conf.elasticsearch_url, **es_conf.ssl_verify),
metadata_mappings=metadata_mappings,
**kwargs
)
return es_client
================================================
FILE: src/backend/bisheng/knowledge/rag/milvus_factory.py
================================================
from typing import Optional, List, Dict
from langchain_core.embeddings import Embeddings
from pymilvus import DataType
from bisheng.common.schemas.rag_schema import RagMetadataFieldSchema
from bisheng.common.services.config_service import settings
from bisheng.core.vectorstore import Milvus
_default_index_params = {"index_type": "HNSW", "metric_type": "L2", "params": {"M": 8, "efConstruction": 64}}
class MilvusFactory:
@staticmethod
def init_vectorstore(collection_name: str, embedding_function: Embeddings, **kwargs) -> Milvus:
conf = settings.get_vectors_conf().milvus
connection_args = conf.connection_args.copy()
if connection_args.get('host') and connection_args.get('port'):
uri = f"http://{connection_args.pop('host')}:{connection_args.pop('port')}"
connection_args['uri'] = uri
metadata_schemas: Optional[List[RagMetadataFieldSchema]] = kwargs.pop('metadata_schemas', None)
milvus_metadata_schema: Optional[Dict[str, any]] = None
for schema in metadata_schemas or []:
if milvus_metadata_schema is None:
milvus_metadata_schema = {}
schema_kwargs = schema.kwargs or {}
if schema.field_type == 'text':
milvus_metadata_schema[schema.field_name] = {'dtype': DataType.VARCHAR,
"kwargs": schema_kwargs}
elif schema.field_type == 'int8':
milvus_metadata_schema[schema.field_name] = {'dtype': DataType.INT8, "kwargs": schema_kwargs}
elif schema.field_type == 'int16':
milvus_metadata_schema[schema.field_name] = {'dtype': DataType.INT16, "kwargs": schema_kwargs}
elif schema.field_type == 'int32':
milvus_metadata_schema[schema.field_name] = {'dtype': DataType.INT32, "kwargs": schema_kwargs}
elif schema.field_type == 'int64':
milvus_metadata_schema[schema.field_name] = {'dtype': DataType.INT64, "kwargs": schema_kwargs}
elif schema.field_type == 'float':
milvus_metadata_schema[schema.field_name] = {'dtype': DataType.FLOAT, "kwargs": schema_kwargs}
elif schema.field_type == 'double':
milvus_metadata_schema[schema.field_name] = {'dtype': DataType.DOUBLE, "kwargs": schema_kwargs}
elif schema.field_type == 'json':
milvus_metadata_schema[schema.field_name] = {'dtype': DataType.JSON, "kwargs": schema_kwargs}
elif schema.field_type == 'boolean':
milvus_metadata_schema[schema.field_name] = {'dtype': DataType.BOOL, "kwargs": schema_kwargs}
return Milvus(
embedding_function=embedding_function,
collection_name=collection_name,
connection_args=connection_args,
auto_id=True,
index_params=_default_index_params,
metadata_schema=milvus_metadata_schema,
**kwargs
)
================================================
FILE: src/backend/bisheng/linsight/__init__.py
================================================
================================================
FILE: src/backend/bisheng/linsight/api/__init__.py
================================================
================================================
FILE: src/backend/bisheng/linsight/api/endpoints/__init__.py
================================================
================================================
FILE: src/backend/bisheng/linsight/api/endpoints/linsight.py
================================================
import asyncio
import json
import os
import time
from datetime import datetime
from typing import List, Literal, Optional, Union
from urllib import parse
from fastapi import APIRouter, Depends, Body, Query, UploadFile, File, BackgroundTasks, Request, Form
from loguru import logger
from pydantic import BaseModel, ValidationError
from sse_starlette import EventSourceResponse
from starlette.responses import StreamingResponse
from starlette.websockets import WebSocket
from bisheng.api.services.invite_code.invite_code import InviteCodeService
from bisheng.api.services.knowledge import KnowledgeService
from bisheng.linsight.domain.services.message_stream_handle import MessageStreamHandle
from bisheng.linsight.domain.services.sop_manage import SOPManageService
from bisheng.linsight.domain.services.workbench_impl import LinsightWorkbenchImpl
from bisheng.api.v1.schema.base_schema import PageList
from bisheng.linsight.domain.schemas.inspiration_schema import SOPManagementSchema, SOPManagementUpdateSchema
from bisheng.linsight.domain.schemas.linsight_schema import LinsightQuestionSubmitSchema, DownloadFilesSchema, \
SubmitFileSchema, LinsightToolSchema, ToolChildrenSchema
from bisheng.api.v1.schemas import UnifiedResponseModel, resp_200
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum, ApplicationTypeEnum
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.http_error import UnAuthorizedError, NotFoundError
from bisheng.common.errcode.linsight import LinsightQuestionError, LinsightUseUpError, LinsightModifySopError, \
LinsightStartTaskError, LinsightSessionVersionRunningError, LinsightQueueStatusError, FileUploadError, \
SopShowcaseError
from bisheng.common.errcode.server import InvalidOperationError, ResourceDownloadError
from bisheng.common.schemas.telemetry.event_data_schema import ApplicationAliveEventData, ApplicationProcessEventData
from bisheng.common.services import telemetry_service
from bisheng.common.services.config_service import settings
from bisheng.core.cache.redis_manager import get_redis_client
from bisheng.core.logger import trace_id_var
from bisheng.core.storage.minio.minio_manager import get_minio_storage
from bisheng.linsight.domain.models.linsight_session_version import LinsightSessionVersionDao, SessionVersionStatusEnum, \
LinsightSessionVersion
from bisheng.linsight.domain.models.linsight_sop import LinsightSOPDao, LinsightSOPRecord
from bisheng.knowledge.domain.models.knowledge import KnowledgeTypeEnum, KnowledgeDao
from bisheng.linsight.domain.services.state_message_manager import LinsightStateMessageManager, MessageData, \
MessageEventType
from bisheng.share_link.api.dependencies import header_share_token_parser
from bisheng.share_link.domain.models.share_link import ShareLink
from bisheng.utils import util
router = APIRouter()
# Inspiration Upload File
@router.post("/workbench/upload-file", summary="Inspiration Upload File", response_model=UnifiedResponseModel)
async def upload_file(
background_tasks: BackgroundTasks,
file: UploadFile = File(...),
login_user: UserPayload = Depends(UserPayload.get_login_user)) -> UnifiedResponseModel:
"""
Inspiration Upload File
:param background_tasks:
:param file: files uploaded
:param login_user: Logged in user information
:return: Upload results
"""
try:
# Call the implementation class to process file uploads
upload_result = await LinsightWorkbenchImpl.upload_file(file)
background_tasks.add_task(LinsightWorkbenchImpl.parse_file, upload_result, login_user.user_id)
result = {
"file_id": upload_result.get("file_id"),
"file_name": upload_result.get("original_filename"),
"parsing_status": upload_result.get("parsing_status"),
}
except Exception as e:
logger.error(f"Upload Failed: {str(e)}")
return FileUploadError.return_resp()
finally:
await file.close()
# Back to upload results
return resp_200(data=result,
message="Key file uploaded successfully! and start parsing. Please check the resolution status later.")
# Get file resolution status
@router.post("/workbench/file-parsing-status", summary="Get file resolution status",
response_model=UnifiedResponseModel)
async def get_file_parsing_status(
file_ids: List[str] = Body(..., description="Doc.IDVertical", embed=True),
login_user: UserPayload = Depends(UserPayload.get_login_user)) -> UnifiedResponseModel:
"""
Get file resolution status
:param file_ids:
:param login_user:
:return:
"""
# Call the implementation class to get the file parsing state
key_prefix = LinsightWorkbenchImpl.FILE_INFO_REDIS_KEY_PREFIX
file_ids = [f"{key_prefix}{file_id}" for file_id in file_ids]
redis_client = await get_redis_client()
# Use Redis right of privacy amget Method Get file parsing status in batches
parsing_status = await redis_client.amget(file_ids)
return resp_200(data=parsing_status, message="File parsing status retrieved successfully")
@router.post("/workbench/file_download", summary="Inspiration File Download", response_model=UnifiedResponseModel)
async def linsight_file_download(
file_url: str = Body(..., embed=True),
session_version_id: str = Body(..., embed=True),
login_user: UserPayload = Depends(UserPayload.get_login_user),
share_link: Union['ShareLink', None] = Depends(header_share_token_parser)) -> UnifiedResponseModel:
session_version_model = await LinsightSessionVersionDao.get_by_id(session_version_id)
if not session_version_model:
raise NotFoundError()
# judge permission
if session_version_model.user_id != login_user.user_id and not login_user.is_admin():
# Access by sharing a link
if (share_link is None or
share_link.meta_data is None or
share_link.meta_data.get("versionId") != session_version_id):
raise UnAuthorizedError()
minio_client = await get_minio_storage()
file_url = file_url.lstrip("/")
if file_url.startswith(minio_client.bucket):
file_url = file_url[len(minio_client.bucket) + 1:]
file_share_url = await minio_client.get_share_link(file_url)
return resp_200(data={
"file_path": file_share_url
})
# Submit an Idea User Issue Request
@router.post("/workbench/submit", summary="Submit an Idea User Issue Request")
async def submit_linsight_workbench(
submit_obj: LinsightQuestionSubmitSchema = Body(..., description="Idea User Issue Submitter"),
login_user: UserPayload = Depends(UserPayload.get_login_user)) -> EventSourceResponse:
"""
Submit an Idea User Issue Request
:param submit_obj:
:param login_user:
:return:
"""
logger.info(f"Users {login_user.user_id} Submit an Idea Question: {submit_obj.question}")
async def event_generator():
"""
Event generator for generatingSSE events
"""
try:
system_config = await settings.aget_all_config()
# DapatkanLinsight_invitation_code
linsight_invitation_code = system_config.get("linsight_invitation_code", False)
if linsight_invitation_code:
if await InviteCodeService.use_invite_code(user_id=login_user.user_id) is False:
yield LinsightUseUpError().to_sse_event_instance()
return
message_session_model, linsight_session_version_model = await LinsightWorkbenchImpl.submit_user_question(
submit_obj,
login_user)
response_data = {
"message_session": message_session_model.model_dump(),
"linsight_session_version": linsight_session_version_model.model_dump()
}
except Exception as e:
yield LinsightQuestionError(exception=e).to_sse_event_instance()
return
yield {
"event": "linsight_workbench_submit",
"data": json.dumps(response_data)
}
# Task Title Generation
title_data = await LinsightWorkbenchImpl.task_title_generate(question=submit_obj.question,
chat_id=message_session_model.chat_id,
login_user=login_user)
linsight_session_version_model.title = title_data.get("task_title")
await LinsightSessionVersionDao.insert_one(linsight_session_version_model)
yield {
"event": "linsight_workbench_title_generate",
"data": json.dumps(title_data)
}
return EventSourceResponse(event_generator())
# workbench Generate and Reimagine IdeasSOP
@router.post("/workbench/generate-sop", summary="Generate and Reimagine IdeasSOP", response_model=UnifiedResponseModel)
async def generate_sop(
request: Request,
linsight_session_version_id: str = Body(..., description="Inspiration Conversation VersionID"),
previous_session_version_id: str = Body(None, description="Previous Invisible Conversation VersionID"),
feedback_content: str = Body(None, description="User feedback content"),
reexecute: bool = Body(False, description="Whether to rerun the buildSOP"),
sop_id: int = Body(None, description="Featured Cases'ID"),
example_session_version_id: str = Body(default=None, description="Reference Cases'linsight_version_id"),
login_user: UserPayload = Depends(UserPayload.get_login_user)) -> EventSourceResponse:
"""
Generate and Reimagine IdeasSOP
:param previous_session_version_id:
:param reexecute:
:param linsight_session_version_id:
:param feedback_content:
:param sop_id:
:param login_user:
:return:
"""
logger.info(
f"Start Generating and Redesigning IdeasSOP, Inscription Conversation VersionID: {linsight_session_version_id} ")
start_time = time.time()
session_version = await LinsightSessionVersionDao.get_by_id(linsight_session_version_id)
# Get a list of knowledge bases with permissions
if not session_version:
raise NotFoundError.http_exception()
example_sop = None
if sop_id:
sop_db = await SOPManageService.get_sop_by_id(sop_id)
example_sop = sop_db.content if sop_db else None
elif example_session_version_id:
example_session_version = await LinsightSessionVersionDao.get_by_id(example_session_version_id)
example_sop = example_session_version.sop if example_session_version else None
res = []
linsight_conf = settings.get_linsight_conf()
if session_version.org_knowledge_enabled and linsight_conf.max_knowledge_num > 0:
res, _ = await KnowledgeService.get_knowledge(request, login_user, KnowledgeTypeEnum.NORMAL, None, 1,
linsight_conf.max_knowledge_num)
if session_version.personal_knowledge_enabled:
knowledge = await KnowledgeDao.aget_user_knowledge(login_user.user_id, None,
KnowledgeTypeEnum.PRIVATE)
if knowledge:
res.extend(knowledge)
async def event_generator():
"""
Event generator for generatingSSE events
"""
# BuatSOP
sop_generate = LinsightWorkbenchImpl.generate_sop(
linsight_session_version_id=linsight_session_version_id,
previous_session_version_id=previous_session_version_id,
feedback_content=feedback_content,
reexecute=reexecute,
login_user=login_user,
knowledge_list=res,
example_sop=example_sop
)
async for event in sop_generate:
yield event
# End
yield {
"event": "sop_generate_complete",
"data": json.dumps({"message": "SOPGeneration and re-planning complete"})
}
try:
return EventSourceResponse(event_generator())
finally:
end_time = time.time()
await telemetry_service.log_event(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.APPLICATION_ALIVE,
trace_id=trace_id_var.get(),
event_data=ApplicationAliveEventData(
app_id=ApplicationTypeEnum.LINSIGHT.value,
app_name=ApplicationTypeEnum.LINSIGHT.value,
app_type=ApplicationTypeEnum.LINSIGHT,
chat_id=session_version.session_id,
start_time=int(start_time),
end_time=int(end_time)
))
await telemetry_service.log_event(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.APPLICATION_PROCESS,
trace_id=trace_id_var.get(),
event_data=ApplicationProcessEventData(
app_id=ApplicationTypeEnum.LINSIGHT.value,
app_name=ApplicationTypeEnum.LINSIGHT.value,
app_type=ApplicationTypeEnum.LINSIGHT,
chat_id=session_version.session_id,
start_time=int(start_time),
end_time=int(end_time),
process_time=int((end_time - start_time) * 1000)
))
# workbench Changesop
@router.post("/workbench/sop-modify", summary="Modify InspirationSOP", response_model=UnifiedResponseModel)
async def modify_sop(
sop_content: str = Body(..., description="SOPContents"),
linsight_session_version_id: str = Body(..., description="Inspiration Conversation VersionID"),
login_user: UserPayload = Depends(UserPayload.get_login_user)) -> UnifiedResponseModel:
"""
Modify InspirationSOP
:param sop_content:
:param linsight_session_version_id:
:param login_user:
:return:
"""
session_version_model = await LinsightSessionVersionDao.get_by_id(
linsight_session_version_id=linsight_session_version_id)
if not session_version_model:
return NotFoundError.return_resp()
if login_user.user_id != session_version_model.user_id:
return UnAuthorizedError.return_resp()
try:
modify_res = await LinsightWorkbenchImpl.modify_sop(linsight_session_version_id=linsight_session_version_id,
sop_content=sop_content)
except Exception as e:
return LinsightModifySopError.return_resp(data=str(e))
return resp_200(modify_res)
# workbench to process
@router.post("/workbench/start-execute", summary="Start Executing Reims", response_model=UnifiedResponseModel)
async def start_execute_sop(
background_tasks: BackgroundTasks,
linsight_session_version_id: str = Body(..., description="Inspiration Conversation VersionID", embed=True),
login_user: UserPayload = Depends(UserPayload.get_login_user)) -> UnifiedResponseModel:
"""
Start Executing ReimsSOP
:param linsight_session_version_id:
:param login_user:
:return:
"""
session_version_model = await LinsightSessionVersionDao.get_by_id(
linsight_session_version_id=linsight_session_version_id)
if not session_version_model:
return NotFoundError.return_resp()
if login_user.user_id != session_version_model.user_id:
return UnAuthorizedError.return_resp()
if session_version_model.status in [SessionVersionStatusEnum.COMPLETED, SessionVersionStatusEnum.TERMINATED,
SessionVersionStatusEnum.IN_PROGRESS]:
# The Inspiration session version has been completed or is being executed and cannot be executed again
return LinsightSessionVersionRunningError.return_resp()
from bisheng.linsight.worker import LinsightQueue
try:
redis_client = await get_redis_client()
queue = LinsightQueue('queue', namespace="linsight", redis=redis_client)
await queue.put(data=linsight_session_version_id)
# will besopWrite to record table
background_tasks.add_task(SOPManageService.add_sop_record, LinsightSOPRecord(
name=session_version_model.title,
description=None,
user_id=login_user.user_id,
content=session_version_model.sop,
linsight_version_id=session_version_model.id,
create_time=session_version_model.create_time,
))
except Exception as e:
logger.error(f"Failed to start the Ideas task: {str(e)}")
await InviteCodeService.revoke_invite_code(user_id=login_user.user_id)
return LinsightStartTaskError.return_resp(data=str(e))
return resp_200(data=True,
message="Ideas execution task has started, execution results will be returned via message flow")
# workbench User input
@router.post("/workbench/user-input", summary="User input Ideas", response_model=UnifiedResponseModel)
async def user_input(
session_version_id: str = Body(..., description="Inspiration Conversation VersionID"),
linsight_execute_task_id: str = Body(..., description="Inspiration Task ExecutionID"),
input_content: str = Body(..., description="User input"),
files: Optional[List[SubmitFileSchema]] = Body(None, description="User-uploaded files"),
login_user: UserPayload = Depends(UserPayload.get_login_user)) -> UnifiedResponseModel:
"""
User input
:param files:
:param session_version_id:
:param input_content:
:param linsight_execute_task_id:
:param login_user:
:return:
"""
session_version_model = await LinsightSessionVersionDao.get_by_id(
linsight_session_version_id=session_version_id)
if not session_version_model:
return NotFoundError.return_resp()
if login_user.user_id != session_version_model.user_id:
return UnAuthorizedError.return_resp()
state_message_manager = LinsightStateMessageManager(session_version_id=session_version_id)
# If there are documents Process files first
processed_files = await LinsightWorkbenchImpl.human_participate_add_file(session_version_model, files=files)
await state_message_manager.set_user_input(task_id=linsight_execute_task_id, user_input=input_content,
files=processed_files)
return resp_200(data=True, message="User input submitted")
# workbench Submitting Execution Result Feedback
@router.post("/workbench/submit-feedback", summary="Submitting Execution Result Feedback",
response_model=UnifiedResponseModel)
async def submit_feedback(
background_tasks: BackgroundTasks,
linsight_session_version_id: str = Body(..., description="Inspiration Conversation VersionID"),
feedback: str = Body(None, description="User feedback"),
score: int = Body(0, ge=0, le=5, description="Users rating1-5cent"),
is_reexecute: bool = Body(False, description="Whether to re-execute"),
cancel_feedback: bool = Body(False, description="Cancel feedback"),
login_user: UserPayload = Depends(UserPayload.get_login_user)) -> UnifiedResponseModel:
"""
Submitting Execution Result Feedback
:param background_tasks:
:param cancel_feedback:
:param linsight_session_version_id:
:param feedback:
:param score:
:param is_reexecute:
:param login_user:
:return:
"""
session_version_model = await LinsightSessionVersionDao.get_by_id(
linsight_session_version_id=linsight_session_version_id)
if not session_version_model:
return NotFoundError.return_resp()
if login_user.user_id != session_version_model.user_id:
return UnAuthorizedError.return_resp()
if score is not None and 0 < score <= 5:
session_version_model.score = score
await SOPManageService.update_sop_record_score(session_version_model.id, score)
if feedback is not None:
session_version_model.execute_feedback = feedback
else:
session_version_model.execute_feedback = "User did not provide feedback"
# If the feedback is canceled
if cancel_feedback:
session_version_model.execute_feedback = "User canceled feedback"
await LinsightSessionVersionDao.insert_one(session_version_model)
return resp_200(data=True, message="Submit successful.")
session_version_model = await LinsightSessionVersionDao.insert_one(session_version_model)
if is_reexecute:
# Re-implementing the Logic of Ideas
system_config = await settings.aget_all_config()
# DapatkanLinsight_invitation_code
linsight_invitation_code = system_config.get("linsight_invitation_code", False)
if linsight_invitation_code:
if await InviteCodeService.use_invite_code(user_id=login_user.user_id) is False:
return LinsightUseUpError.return_resp()
# Inspiration Conversation Version
linsight_session_version_model = LinsightSessionVersion(
session_id=session_version_model.session_id,
user_id=login_user.user_id,
question=session_version_model.question,
tools=session_version_model.tools,
org_knowledge_enabled=session_version_model.org_knowledge_enabled,
personal_knowledge_enabled=session_version_model.personal_knowledge_enabled,
files=session_version_model.files,
title=session_version_model.title
)
linsight_session_version_model = await LinsightSessionVersionDao.insert_one(linsight_session_version_model)
return resp_200(data=linsight_session_version_model.model_dump(),
message="The submission successfully succeeded.")
else:
if feedback is not None and feedback.strip() != "":
await SOPManageService.update_sop_record_feedback(session_version_model.id, feedback)
return resp_200(data=True, message="Submit successful.")
# workbench Termination
@router.post("/workbench/terminate-execute", summary="Termination of execution of Ideas",
response_model=UnifiedResponseModel)
async def terminate_execute(
linsight_session_version_id: str = Body(..., description="Inspiration Conversation VersionID", embed=True),
login_user: UserPayload = Depends(UserPayload.get_login_user)) -> UnifiedResponseModel:
"""
Termination of execution of Ideas
:param linsight_session_version_id:
:param login_user:
:return:
"""
# The logic of executing Spirituality is now terminated
session_version_model = await LinsightSessionVersionDao.get_by_id(
linsight_session_version_id=linsight_session_version_id)
if not session_version_model:
return NotFoundError.return_resp()
if login_user.user_id != session_version_model.user_id:
return UnAuthorizedError.return_resp()
if session_version_model.status == SessionVersionStatusEnum.COMPLETED:
# return resp_500(code=400, message="Execution cannot be terminated because the Inspiration session version has been completed")
return InvalidOperationError.return_resp()
if session_version_model.status == SessionVersionStatusEnum.TERMINATED:
# return resp_500(code=400, message="Execution terminated for Inspiration session version")
return InvalidOperationError.return_resp()
from bisheng.linsight.worker import LinsightQueue
redis_client = await get_redis_client()
queue = LinsightQueue('queue', namespace="linsight", redis=redis_client)
try:
# Remove task from queue
await queue.remove(linsight_session_version_id)
except Exception as e:
logger.error(f"Failed to delete queue task: {str(e)}")
# Update status is terminated
session_version_model.status = SessionVersionStatusEnum.TERMINATED
state_message_manager = LinsightStateMessageManager(session_version_id=linsight_session_version_id)
await state_message_manager.set_session_version_info(session_version_model)
state_message_manager = LinsightStateMessageManager(session_version_id=session_version_model.id)
# Push termination message
await state_message_manager.push_message(
MessageData(
event_type=MessageEventType.TASK_TERMINATED,
data={
"message": "Task has been actively stopped by the user",
"session_id": session_version_model.id,
"terminated_at": datetime.now().isoformat()
}
)
)
return resp_200(data=True, message="Idea Execution Terminated")
# Get all the Inspiration information for the current session
@router.get("/workbench/session-version-list", summary="Get all the Inspiration information for the current session",
response_model=UnifiedResponseModel)
async def get_linsight_session_version_list(
session_id: str = Query(..., description="SessionsID"),
login_user: UserPayload = Depends(UserPayload.get_login_user),
share_link: Union['ShareLink', None] = Depends(header_share_token_parser)
) -> UnifiedResponseModel:
"""
Get all the Inspiration information for the current session
:param share_link:
:param session_id:
:param login_user:
:return:
"""
linsight_session_version_models = await LinsightWorkbenchImpl.get_linsight_session_version_list(session_id)
if linsight_session_version_models and login_user.user_id != linsight_session_version_models[0].user_id:
# Access by sharing a link
session_version_ids = [model.id for model in linsight_session_version_models]
# Access by sharing a link
if (share_link is None or
share_link.meta_data is None or
share_link.meta_data.get("versionId") not in session_version_ids):
return UnAuthorizedError.return_resp()
# Only return to the shared version of the Inspiration session
linsight_session_version_models = [
model for model in linsight_session_version_models if model.id == share_link.meta_data.get("versionId")
]
return resp_200([model.model_dump() for model in linsight_session_version_models])
# Get task execution details
@router.get("/workbench/execute-task-detail", summary="Get task execution details", response_model=UnifiedResponseModel)
async def get_execute_task_detail(
session_version_id: str = Query(..., description="Inspiration Conversation VersionID"),
login_user: UserPayload = Depends(UserPayload.get_login_user),
share_link: Union['ShareLink', None] = Depends(header_share_token_parser)) -> UnifiedResponseModel:
"""
Get task execution details
:param share_link:
:param session_version_id:
:param login_user:
:return:
"""
execute_task_models = await LinsightWorkbenchImpl.get_execute_task_detail(session_version_id)
if not execute_task_models:
return resp_200([])
linsight_session_version_model = await LinsightSessionVersionDao.get_by_id(session_version_id)
if login_user.user_id != linsight_session_version_model.user_id:
# Access by sharing a link
if (share_link is None or
share_link.meta_data is None or
share_link.meta_data.get("versionId") != session_version_id):
return UnAuthorizedError.return_resp()
return resp_200(execute_task_models)
# Creating an Idea Task Message Flow websocket
@router.websocket("/workbench/task-message-stream", name="task_message_stream")
async def task_message_stream(
websocket: WebSocket,
session_version_id: str = Query(..., description="Inspiration Conversation VersionID"),
login_user: UserPayload = Depends(UserPayload.get_login_user_from_ws)):
"""
Creating an Idea Task Message Flow websocket
:param Authorize:
:param websocket:
:param session_version_id:
:return:
"""
start_time = time.time()
try:
message_handler = MessageStreamHandle(websocket=websocket, session_version_id=session_version_id)
await message_handler.connect()
except Exception as e:
await websocket.close(code=1000, reason=str(e))
return
finally:
end_time = time.time()
session_version_info = await LinsightSessionVersionDao.get_by_id(session_version_id)
await telemetry_service.log_event(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.APPLICATION_ALIVE,
trace_id=trace_id_var.get(),
event_data=ApplicationAliveEventData(
app_id=ApplicationTypeEnum.LINSIGHT.value,
app_name=ApplicationTypeEnum.LINSIGHT.value,
app_type=ApplicationTypeEnum.LINSIGHT,
chat_id=session_version_info.session_id if session_version_info else "",
start_time=int(start_time),
end_time=int(end_time)
))
await telemetry_service.log_event(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.APPLICATION_PROCESS,
trace_id=trace_id_var.get(),
event_data=ApplicationProcessEventData(
app_id=ApplicationTypeEnum.LINSIGHT.value,
app_name=ApplicationTypeEnum.LINSIGHT.value,
app_type=ApplicationTypeEnum.LINSIGHT,
chat_id=session_version_info.session_id if session_version_info else "",
start_time=int(start_time),
end_time=int(end_time),
process_time=int((end_time - start_time) * 1000)
))
# Batch Download Task Files
@router.post("/workbench/batch-download-files", summary="Batch Download Task Files")
async def batch_download_files(
zip_name: str = Body(..., description="Package name"),
file_info_list: List[DownloadFilesSchema] = Body(..., description="File Information List"),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
Batch Download Task Files
:param zip_name:
:param file_info_list:
:param login_user:
:return:
"""
try:
# Call to implement class processing batch download
zip_bytes = await LinsightWorkbenchImpl.batch_download_files(file_info_list)
zip_name = zip_name if os.path.splitext(zip_name)[-1] == ".zip" else f"{zip_name}.zip"
# Convert to unicode String
zip_name = parse.quote(zip_name)
return StreamingResponse(
iter([zip_bytes]),
media_type="application/zip",
headers={
"Content-Disposition": f"attachment; filename={zip_name}"
}
)
except Exception as e:
logger.error(f"Failed to download file in bulk: {str(e)}")
return ResourceDownloadError.return_resp(data=str(e))
# Get Queue Queue Status
@router.get("/workbench/queue-status", summary="Get Ideas Queue Queue Status", response_model=UnifiedResponseModel)
async def get_queue_status(
session_version_id: str = Query(..., description="Inspiration Conversation VersionID"),
login_user: UserPayload = Depends(UserPayload.get_login_user)) -> UnifiedResponseModel:
"""
Get Ideas Queue Queue Status
:param session_version_id:
:param login_user:
:return:
"""
from bisheng.linsight.worker import LinsightQueue
redis_client = await get_redis_client()
queue = LinsightQueue('queue', namespace="linsight", redis=redis_client)
try:
index = await queue.index(session_version_id)
return resp_200(data={"index": index}, message="Get Ideas queue queue status successfully")
except Exception as e:
logger.error(f"Failed to get Ideas queue queue status: {str(e)}")
return LinsightQueueStatusError.return_resp(data=str(e))
# InspirationmdTransferpdf or docx Mengunduh
@router.post("/workbench/download-md-to-pdf-or-docx", summary="InspirationmdTransferpdf or docx Mengunduh")
async def download_md_to_pdf_or_docx(
file_info: DownloadFilesSchema = Body(..., description="File information"),
to_type: Literal["pdf", "docx"] = Body(..., description="the target file type of the conversion,pdfORdocx"),
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""
InspirationmdTransferpdf or docx Mengunduh
:param file_info:
:param to_type:
:param login_user:
:return:
"""
try:
# Call the implementation class to process the file download
file_name, file_bytes = await LinsightWorkbenchImpl.download_file(file_info)
md_str = file_bytes.decode('utf-8')
# Filename Removal Extension
file_name = os.path.splitext(file_name)[0]
if to_type == "pdf":
from bisheng.common.utils.markdown_cmpnt.md_to_pdf import md_to_pdf_bytes
converted_bytes = await util.sync_func_to_async(md_to_pdf_bytes)(md_str)
file_name = f"{file_name}.pdf"
content_type = "application/pdf"
else:
from bisheng.common.utils.markdown_cmpnt.md_to_docx.markdocx import MarkDocx
mark_docx = MarkDocx()
converted_bytes, _ = await util.sync_func_to_async(mark_docx)(md_str)
file_name = f"{file_name}.docx"
content_type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
# Convert to unicode String
file_name = parse.quote(file_name)
return StreamingResponse(
iter([converted_bytes]),
media_type=content_type,
headers={
"Content-Disposition": f"attachment; filename={file_name}"
}
)
except Exception as e:
logger.error(f"This content failed to load: {str(e)}")
return ResourceDownloadError.return_resp(data=str(e))
@router.post("/sop/add", summary="Add InspirationSOP", response_model=UnifiedResponseModel)
async def add_sop(
sop_obj: SOPManagementSchema = Body(..., description="SOPObjects"),
login_user: UserPayload = Depends(UserPayload.get_login_user)) -> UnifiedResponseModel:
"""
Add InspirationSOP
:return:
"""
if not login_user.is_admin():
return UnAuthorizedError.return_resp()
return await SOPManageService.add_sop(sop_obj, user_id=login_user.user_id)
@router.post("/sop/update", summary="Update IdeasSOP", response_model=UnifiedResponseModel)
async def update_sop(
sop_obj: SOPManagementUpdateSchema = Body(..., description="SOPObjects"),
login_user: UserPayload = Depends(UserPayload.get_admin_user)) -> UnifiedResponseModel:
"""
Update IdeasSOP
:return:
"""
sop_obj.user_id = login_user.user_id
return await SOPManageService.update_sop(sop_obj, update_version_id=False)
@router.get("/sop/list", summary="Get IdeasSOPVertical", response_model=UnifiedResponseModel)
async def get_sop_list(
keywords: str = Query(None, description="Keywords Search"),
showcase: bool = Query(None, description="Get featured cases only?"),
page: int = Query(1, ge=1, description="Page"),
page_size: int = Query(10, ge=1, le=100, description="Items per page"),
sort: Literal["asc", "desc"] = Query("desc", description="Sort ByascORdesc"),
login_user: UserPayload = Depends(UserPayload.get_admin_user)) -> UnifiedResponseModel:
"""
Get IdeasSOPVertical
:return:
"""
sop_pages = await SOPManageService.get_sop_list(keywords=keywords, showcase=showcase, page=page,
page_size=page_size,
sort=sort)
return resp_200(data=sop_pages)
@router.get("/sop/record", summary="Get IdeasSOPRecord", response_model=UnifiedResponseModel)
async def get_sop_record(login_user: UserPayload = Depends(UserPayload.get_admin_user),
keyword: str = Query(None, description="Search keyword ..."),
sort: str = Query(default='desc', description="Sort ByascORdesc"),
page: int = Query(1, ge=1, description="Page"),
page_size: int = Query(10, ge=1, le=100, description="Items per page")):
res, count = await SOPManageService.get_sop_record(keyword, sort, page, page_size)
return resp_200(PageList(total=count, list=res))
@router.post("/sop/record/sync", summary="SynchronoussopRecord toSOPGallery", response_model=UnifiedResponseModel)
async def sync_sop_record(
login_user: UserPayload = Depends(UserPayload.get_admin_user),
record_ids: list[int] = Body(..., description="sopThe only one in the record sheetid"),
override: Optional[bool] = Body(default=False,
description="Force override or not"),
save_new: Optional[bool] = Body(default=False,
description="Do you want to save as newsop")) -> UnifiedResponseModel:
"""
SynchronousSOP"Log to"SOPGallery
"""
repeat_name = await SOPManageService.sync_sop_record(record_ids, override, save_new)
return resp_200(data={
"repeat_name": repeat_name,
}, message="success")
@router.post("/sop/upload", summary="Batch importSOPWarehousing", response_model=UnifiedResponseModel)
async def upload_sop_file(
file: UploadFile = File(..., description="Uploaded bySOPDoc."),
override: Optional[bool] = Body(default=False, description="Force override or not"),
save_new: Optional[bool] = Body(default=False, description="Do you want to save as newsop"),
ignore_error: Optional[bool] = Body(default=False,
description="Whether to ignore the file and find the wrong record"),
login_user: UserPayload = Depends(UserPayload.get_admin_user)) -> UnifiedResponseModel:
"""
Batch importSOPWarehousing
"""
try:
success_rows, error_rows, repeat_rows = await SOPManageService.upload_sop_file(login_user, file, ignore_error,
override, save_new)
return resp_200(data={
"success_rows": success_rows,
"error_rows": error_rows,
"repeat_rows": repeat_rows,
})
except Exception as e:
raise e
finally:
await file.close()
@router.delete("/sop/remove", summary="Delete IdeasSOP", response_model=UnifiedResponseModel)
async def remove_sop(
sop_ids: List[int] = Body(..., description="SOPUniqueness quantificationIDVertical", embed=True),
login_user: UserPayload = Depends(UserPayload.get_admin_user)) -> UnifiedResponseModel:
"""
Delete IdeasSOP
:return:
"""
return await SOPManageService.remove_sop(sop_ids, login_user)
@router.get("/sop/showcase", summary="InspirationsopLibrary's Featured Cases", response_model=UnifiedResponseModel)
async def get_sop_banner(
page: int = Query(1, ge=1, description="Page"),
page_size: int = Query(10, ge=1, le=100, description="Items per page"),
sort: Literal["asc", "desc"] = Query("desc", description="Sort ByascORdesc"),
login_user: UserPayload = Depends(UserPayload.get_login_user)) -> UnifiedResponseModel:
"""
Set or cancel IdeasSOPLibrary's Featured Cases
:return:
"""
sop_pages = await SOPManageService.get_sop_list(showcase=True, page=page, page_size=page_size, sort=sort)
return resp_200(data=sop_pages)
@router.post("/sop/showcase", summary="Set or unset a featured case for Inspirations",
response_model=UnifiedResponseModel)
async def set_sop_banner(
sop_id: int = Body(..., description="SOPUniqueness quantificationID"),
showcase: bool = Body(..., description="Set as featured case or not"),
login_user: UserPayload = Depends(UserPayload.get_admin_user)) -> UnifiedResponseModel:
"""
Set or cancel IdeasSOPLibrary's Featured Cases
:return:
"""
# CorrectionSOPpresence or does it
existing_sop = await LinsightSOPDao.get_sops_by_ids([sop_id])
if not existing_sop:
raise NotFoundError.http_exception(msg="sop not found")
if showcase:
# Setting as featured case requires checking for run results
existing_sop = existing_sop[0]
if not existing_sop.linsight_version_id:
raise SopShowcaseError.http_exception()
execute_task_models = await LinsightWorkbenchImpl.get_execute_task_detail(existing_sop.linsight_version_id)
if not execute_task_models:
raise SopShowcaseError.http_exception()
await LinsightSOPDao.set_sop_showcase(sop_id, showcase)
return resp_200()
@router.get("/sop/showcase/result", summary="Obtain the results of the execution of the selected cases of Lingsi",
response_model=UnifiedResponseModel)
async def get_sop_showcase_result(
sop_id: int = Query(None, description="SOPUniqueness quantificationID"),
linsight_version_id: str = Query(None,
description="Inspiration Conversation VersionID, use this parameter first"),
login_user: UserPayload = Depends(UserPayload.get_login_user)) -> UnifiedResponseModel:
if not linsight_version_id:
# CorrectionSOPpresence or does it
existing_sop = await LinsightSOPDao.get_sops_by_ids([sop_id])
if not existing_sop:
raise NotFoundError.http_exception(msg="sop not found")
linsight_version_id = existing_sop[0].linsight_version_id
if not linsight_version_id:
return resp_200(data={"version_info": None, "execute_tasks": []})
version_info = await LinsightSessionVersionDao.get_by_id(linsight_version_id)
# Outstanding sessions do not return execution results
if not version_info or version_info.status != SessionVersionStatusEnum.COMPLETED:
return resp_200(data={
"version_info": None,
"execute_tasks": []
})
execute_task_models = await LinsightWorkbenchImpl.get_execute_task_detail(linsight_version_id)
return resp_200(data={
"version_info": version_info,
"execute_tasks": execute_task_models
})
class IntegratedExecuteRequestBody(BaseModel):
query: Optional[str] = Body(None, description="User Submitted Questions")
sop_content: Optional[str] = Body(None, description="User SubmittedSOPContents")
tool_ids: List[int] = Body(None, description="Selected ToolsIDVertical")
org_knowledge_enabled: bool = Body(False, description="Whether to enable organization knowledge base")
personal_knowledge_enabled: bool = Body(False, description="Whether or not to enable Personal Knowledge Base")
# Generate Inspiration OnlySOPNo
only_generate_sop: bool = Body(False, description="Whether to generate onlySOPNo")
# Lingsi Integrated Execution Interface
@router.post("/integrated-execute", summary="Lingsi Integrated Execution Interface")
async def integrated_execute(
request: Request,
body_param: str = Form(..., description="Request Body Parameters,JSONString",
example='{"query": "Please write one for mePythonfunction that calculates the sum of two numbers.", "tool_ids": [1, 2], "org_knowledge_enabled": true, "personal_knowledge_enabled": false}'),
files: List[UploadFile] = File(None, description="Uploaded files list:"),
login_user: UserPayload = Depends(UserPayload.get_login_user)
) -> EventSourceResponse:
"""
Lingsi Integrated Execution Interface
:param body_param: Request Body Parameters,JSONString
:param request: Request object
:param files: Uploaded files list:
:param login_user: Logged in user information
:return: SSEEvent Flow Response
"""
# ======================== Parameter Validation ========================
try:
body_param = IntegratedExecuteRequestBody.model_validate_json(body_param)
if not body_param.query and not body_param.sop_content:
logger.error(
f"Users {login_user.user_id} Bad request body parameters: queryAndsop_contentCannot be empty at the same time")
return EventSourceResponse(iter([{
"event": "error",
"data": json.dumps({
"error": "Bad request body parameters",
"message": "queryAndsop_contentCannot be empty at the same time",
"code": "PARAM_ERROR"
})
}]))
except ValidationError as e:
logger.error(f"Users {login_user.user_id} Request body parameter parsing failed: {str(e)}")
return EventSourceResponse(iter([{
"event": "error",
"data": json.dumps({
"error": "Request body parameter parsing failed",
"message": str(e),
"code": "PARAM_VALIDATION_ERROR"
})
}]))
except Exception as e:
logger.error(f"Users {login_user.user_id} Parameter parsing exception: {str(e)}")
return EventSourceResponse(iter([{
"event": "error",
"data": json.dumps({
"error": "Parameter parsing exception",
"message": str(e),
"code": "PARAM_PARSE_ERROR"
})
}]))
logger.info(f"Users {login_user.user_id} Submit an Idea Question: {body_param.query}")
# ======================== Upload file and parse ========================
upload_file_results = []
if files:
logger.info(f"Users {login_user.user_id} Start Upload {len(files)} files")
for idx, file in enumerate(files):
try:
# File size and type validation
if file.size and file.size > 100 * 1024 * 1024: # 100MBLimit
raise ValueError(f"Doc. {file.filename} Size exceeds limit(100MB)")
if not file.filename:
raise ValueError(f"Doc. {idx + 1} The uploaded file has no filename")
logger.debug(f"Starting file upload: {file.filename}")
upload_result = await LinsightWorkbenchImpl.upload_file(file)
if not upload_result:
raise ValueError(f"Doc. {file.filename} Upload failed, return result is empty")
# Parse files asynchronously to increase timeout control
parse_result = await asyncio.wait_for(
LinsightWorkbenchImpl.parse_file(upload_result, login_user.user_id),
timeout=300 # 5Minute Timeout
)
if not parse_result:
raise ValueError(f"Doc. {file.filename} Parsing failed, returned empty result")
upload_file_results.append(parse_result)
logger.debug(f"Doc. {file.filename} Upload parsing complete")
except asyncio.TimeoutError:
error_msg = f"Doc. {file.filename} Resolve Timeout"
logger.error(f"Users {login_user.user_id} {error_msg}")
return EventSourceResponse(iter([{
"event": "error",
"data": json.dumps({
"error": "File parsing timeout",
"message": error_msg,
"code": "FILE_PARSE_TIMEOUT"
})
}]))
except Exception as e:
error_msg = f"Doc. {getattr(file, 'filename', f'{idx + 1} No filename')} Upload parsing error: {str(e)}"
logger.error(f"Users {login_user.user_id} {error_msg}")
return EventSourceResponse(iter([{
"event": "error",
"data": json.dumps({
"error": "Upload Failed",
"message": error_msg,
"code": "FILE_UPLOAD_ERROR"
})
}]))
# Check file parsing results
if upload_file_results:
failed_files = [
f.get("original_filename", "Unknown file")
for f in upload_file_results
if f.get("parsing_status") == "failed"
]
if failed_files:
error_msg = f"The following files failed to be parsed: {', '.join(failed_files)}"
logger.error(f"Users {login_user.user_id} {error_msg}")
return EventSourceResponse(iter([{
"event": "error",
"data": json.dumps({
"error": "File parsing failed",
"message": error_msg,
"code": "FILE_PARSE_FAILED",
"failed_files": failed_files
})
}]))
async def event_generator():
"""
Event generator for generatingSSE events
"""
linsight_session_version_model = None
state_message_manager = None
try:
# ======================== Submit an Idea Question ========================
try:
submit_files = []
if upload_file_results:
for f in upload_file_results:
if not f.get("file_id"):
logger.warning(f"Doc. {f.get('original_filename', 'Unknown')} missing? file_id")
continue
submit_files.append(SubmitFileSchema(
file_id=f.get("file_id"),
file_name=f.get("original_filename"),
parsing_status=f.get("parsing_status")
))
submit_tools = None
if body_param.tool_ids:
try:
submit_tools = [LinsightToolSchema(
id="1",
is_preset=1,
children=[
ToolChildrenSchema(id=int(tool_id))
for tool_id in body_param.tool_ids
]
)]
except (ValueError, TypeError) as e:
logger.error(f"Users {login_user.user_id} ToolsIDfailed to transform: {str(e)}")
yield {
"event": "error",
"data": json.dumps({
"error": "ToolsIDFormat salah.",
"message": f"ToolsIDMust be numeric: {str(e)}",
"code": "INVALID_TOOL_ID"
})
}
return
submit_obj = LinsightQuestionSubmitSchema(
question=body_param.query if body_param.query else "User did not provide a question",
org_knowledge_enabled=body_param.org_knowledge_enabled,
personal_knowledge_enabled=body_param.personal_knowledge_enabled,
files=submit_files,
tools=submit_tools
)
_, linsight_session_version_model = await LinsightWorkbenchImpl.submit_user_question(
submit_obj, login_user
)
if not linsight_session_version_model:
raise ValueError("Failed to submit the idea question, the return result is empty")
yield {
"event": "linsight_workbench_submit",
"data": linsight_session_version_model.model_dump_json()
}
except Exception as e:
error_msg = f"Failed to submit Idea Question: {str(e)}"
logger.error(f"Users {login_user.user_id} {error_msg}")
yield {
"event": "error",
"data": json.dumps({
"error": "Failed to submit question",
"message": error_msg,
"code": "SUBMIT_QUESTION_ERROR"
})
}
return
# ======================== BuatSOP ========================
if body_param.sop_content:
# User Submitted DirectlySOPcontent, skipping generationSOPStep
await LinsightSessionVersionDao.modify_sop_content(
linsight_session_version_id=linsight_session_version_model.id,
sop_content=body_param.sop_content
)
else:
try:
knowledge_res = []
linsight_conf = settings.get_linsight_conf()
# Get the organization's knowledge base
if (linsight_session_version_model.org_knowledge_enabled and
linsight_conf and linsight_conf.max_knowledge_num > 0):
try:
org_knowledge, _ = await KnowledgeService.get_knowledge(
request, login_user, KnowledgeTypeEnum.NORMAL, None, 1,
linsight_conf.max_knowledge_num
)
if org_knowledge:
knowledge_res.extend(org_knowledge)
logger.debug(f"Get {len(org_knowledge)} organization knowledge")
except Exception as e:
logger.warning(
f"Users {login_user.user_id} Failed to get organization knowledge base: {str(e)}")
# Proceed without interrupting the process
# Get your own knowledge base
if linsight_session_version_model.personal_knowledge_enabled:
try:
personal_knowledge = await KnowledgeDao.aget_user_knowledge(
login_user.user_id, None, KnowledgeTypeEnum.PRIVATE
)
if personal_knowledge:
knowledge_res.extend(personal_knowledge)
logger.debug(f"Get {len(personal_knowledge)} personal knowledge")
except Exception as e:
logger.warning(
f"Users {login_user.user_id} Failed to get personal knowledge base: {str(e)}")
# Proceed without interrupting the process
# BuatSOP
sop_generate = LinsightWorkbenchImpl.generate_sop(
linsight_session_version_id=linsight_session_version_model.id,
previous_session_version_id=None,
feedback_content=None,
reexecute=False,
login_user=login_user,
knowledge_list=knowledge_res
)
async for event in sop_generate:
if event.get("event") == "error":
yield event
return
yield event
yield {
"event": "sop_generate_complete",
"data": json.dumps({"message": "SOPBuild Complete"})
}
except Exception as e:
error_msg = f"SOPGeneration Failed: {str(e)}"
logger.error(f"Users {login_user.user_id} {error_msg}")
yield {
"event": "error",
"data": json.dumps({
"error": "SOPGeneration Failed",
"message": error_msg,
"code": "SOP_GENERATE_ERROR"
})
}
return
if body_param.only_generate_sop:
return
# ======================== to process ========================
try:
from bisheng.linsight.worker import LinsightQueue
redis_client = await get_redis_client()
queue = LinsightQueue('queue', namespace="linsight", redis=redis_client)
await queue.put(data=linsight_session_version_model.id)
yield {
"event": "linsight_execute_submitted",
"data": json.dumps({"message": "Idea Execution Task Submitted"})
}
except Exception as e:
error_msg = f"Failed to submit execution task: {str(e)}"
logger.error(f"Users {login_user.user_id} {error_msg}")
yield {
"event": "error",
"data": json.dumps({
"error": "Failed to submit execution task",
"message": error_msg,
"code": "SUBMIT_TASK_ERROR"
})
}
return
# ======================== Consumer Message Flow ========================
try:
state_message_manager = LinsightStateMessageManager(
session_version_id=linsight_session_version_model.id
)
final_result_message = None
message_count = 0
max_messages = 10000 # Prevents infinite loops
max_wait_time = 60 * 60 # Maximum Wait1Jam
start_time = time.time()
while message_count < max_messages:
# Check timeout
if time.time() - start_time > max_wait_time:
logger.warning(f"Users {login_user.user_id} Message consumption timed out")
yield {
"event": "warning",
"data": json.dumps({
"message": "The execution time is longer and may take more time to complete",
"code": "EXECUTION_TIMEOUT_WARNING"
})
}
break
try:
message = await asyncio.wait_for(
state_message_manager.pop_message(),
timeout=10.0 # 10seconds timeout
)
except asyncio.TimeoutError:
linsight_session_version_model = await state_message_manager.get_session_version_info()
if linsight_session_version_model.status in [
SessionVersionStatusEnum.COMPLETED,
SessionVersionStatusEnum.TERMINATED,
SessionVersionStatusEnum.FAILED
]:
message = MessageData(
event_type=MessageEventType.FINAL_RESULT if linsight_session_version_model.status == SessionVersionStatusEnum.COMPLETED else MessageEventType.TASK_TERMINATED,
data=linsight_session_version_model.model_dump()
)
if message.event_type == MessageEventType.FINAL_RESULT:
final_result_message = message
yield {
"event": "linsight_execute_message",
"data": message.model_dump_json()
}
logger.info(f"Users {login_user.user_id} Idea execution has ended, stop getting messages")
break
# Timeout to continue waiting
continue
except Exception as e:
logger.error(f"Users {login_user.user_id} Failed to fetch messages: {str(e)}")
break
if message:
message_count += 1
yield {
"event": "linsight_execute_message",
"data": message.model_dump_json()
}
# Save final result message
if message.event_type == MessageEventType.FINAL_RESULT:
final_result_message = message
# Check termination conditions
if message.event_type in [
MessageEventType.ERROR_MESSAGE,
MessageEventType.TASK_TERMINATED,
MessageEventType.FINAL_RESULT
]:
break
else:
await asyncio.sleep(1)
# Process final result message
final_files = []
all_from_session_files = []
if final_result_message and final_result_message.data:
try:
session_version_model = LinsightSessionVersion.model_validate(final_result_message.data)
if session_version_model.output_result:
final_files = session_version_model.output_result.get("final_files", [])
all_from_session_files = session_version_model.output_result.get("all_from_session_files",
[])
minio_client = await get_minio_storage()
# Generate file sharing link
for final_file in final_files:
if final_file.get("url"):
try:
final_file["url"] = await minio_client.get_share_link(final_file["url"],
clear_host=False)
except Exception as e:
logger.warning(f"Failed to generate final file share link: {str(e)}")
for session_file in all_from_session_files:
if session_file.get("url"):
try:
session_file["url"] = await minio_client.get_share_link(session_file["url"],
clear_host=False)
except Exception as e:
logger.warning(f"Failed to generate session file share link: {str(e)}")
except Exception as e:
logger.error(f"Users {login_user.user_id} Failed to process final result: {str(e)}")
yield {
"event": "final_result_files",
"data": json.dumps({
"final_files": final_files,
"all_from_session_files": all_from_session_files
})
}
except Exception as e:
error_msg = f"Message consumption failed: {str(e)}"
logger.error(f"Users {login_user.user_id} {error_msg}")
yield {
"event": "error",
"data": json.dumps({
"error": "Message consumption failed",
"message": error_msg,
"code": "MESSAGE_CONSUME_ERROR"
})
}
return
except Exception as e:
# Catch all unhandled exceptions
error_msg = f"Interface Execution Exception: {str(e)}"
logger.error(f"Users {login_user.user_id} {error_msg}", exc_info=True)
yield {
"event": "error",
"data": json.dumps({
"error": "System Exception",
"message": error_msg,
"code": "SYSTEM_ERROR"
})
}
finally:
pass
return EventSourceResponse(event_generator())
================================================
FILE: src/backend/bisheng/linsight/api/router.py
================================================
from fastapi import APIRouter
from .endpoints.linsight import router as linsight_router
router = APIRouter(prefix="/linsight", tags=["Inspiration"])
router.include_router(linsight_router)
__all__ = ["router"]
================================================
FILE: src/backend/bisheng/linsight/domain/__init__.py
================================================
================================================
FILE: src/backend/bisheng/linsight/domain/models/__init__.py
================================================
================================================
FILE: src/backend/bisheng/linsight/domain/models/linsight_execute_task.py
================================================
from datetime import datetime
from enum import Enum
from typing import Optional, Dict, List
from sqlalchemy import Enum as SQLEnum, Column, JSON, DateTime, text, CHAR, ForeignKey, update
from sqlmodel import Field, select, col
from bisheng.core.database import get_async_db_session
from bisheng.database.base import uuid_hex
from bisheng.common.models.base import SQLModelSerializable
class ExecuteTaskTypeEnum(str, Enum):
"""
Idea execution task type enumeration
"""
# Single Task
SINGLE = "single"
# Has subtasks
COMPOSITE = "composite"
class ExecuteTaskStatusEnum(str, Enum):
"""
Idea Execution Task Status Enumeration
"""
# Not Started
NOT_STARTED = "not_started"
# Sedang berlangsung
IN_PROGRESS = "in_progress"
# Berhasil
SUCCESS = "success"
# Waiting for user input
WAITING_FOR_USER_INPUT = "waiting_for_user_input"
# User input complete
USER_INPUT_COMPLETED = "user_input_completed"
# Kalah
FAILED = "failed"
# TERMINATION
TERMINATED = "terminated"
class LinsightExecuteTaskBase(SQLModelSerializable):
"""
Idea Execution Task Model Base Class
"""
session_version_id: str = Field(..., description='Session VersionID',
sa_column=Column(CHAR(36), ForeignKey("linsight_session_version.id"),
nullable=False))
parent_task_id: Optional[str] = Field(None, description='Parent Task:ID',
sa_column=Column(CHAR(36), ForeignKey("linsight_execute_task.id"),
nullable=True))
previous_task_id: Optional[str] = Field(None, description='Previous TaskID',
sa_column=Column(CHAR(36),
nullable=True))
next_task_id: Optional[str] = Field(None, description='[patterns/patterns_ParallelJoin.xml?ROU_NEXT_TASK] Next TaskID',
sa_column=Column(CHAR(36),
nullable=True))
task_type: ExecuteTaskTypeEnum = Field(..., description='Task type',
sa_column=Column(SQLEnum(ExecuteTaskTypeEnum), nullable=False))
task_data: Optional[dict] = Field(None, description='Task Data', sa_type=JSON, nullable=True)
# input_prompt: Optional[str] = Field(None, description='Enter a prompt', sa_type=Text, nullable=True)
# user_input: Optional[str] = Field(None, description='User input', sa_type=Text, nullable=True)
history: Optional[List[Dict]] = Field(None, description='Execute Step Record', sa_type=JSON, nullable=True)
status: ExecuteTaskStatusEnum = Field(ExecuteTaskStatusEnum.NOT_STARTED, description="Status Misi",
sa_column=Column(SQLEnum(ExecuteTaskStatusEnum), nullable=False))
result: Optional[Dict] = Field(None, description='Result of Task', sa_type=JSON, nullable=True)
class LinsightExecuteTask(LinsightExecuteTaskBase, table=True):
"""
Ideas Execution Task Model, sopThe library will also reference the data here
"""
id: str = Field(default_factory=uuid_hex, description='TaskID',
sa_column=Column(CHAR(36), unique=True, nullable=False, primary_key=True))
create_time: datetime = Field(default_factory=datetime.now, description='Creation Time',
sa_column=Column(DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=True, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
__tablename__ = "linsight_execute_task"
class LinsightExecuteTaskDao(object):
"""
Ideas Execution Task Data Access Objects
"""
@classmethod
async def get_by_id(cls, task_id: str) -> Optional[LinsightExecuteTask]:
"""
By TaskIDGet Tasks
:param task_id: TaskID
:return: Task Objects
"""
async with get_async_db_session() as session:
statement = select(LinsightExecuteTask).where(LinsightExecuteTask.id == str(task_id))
task = await session.exec(statement)
return task.first()
@classmethod
async def get_by_session_version_id(cls, session_version_id: str, is_parent_task: bool = False) -> List[
LinsightExecuteTask]:
"""
Based on session versionIDGet all tasks
:param is_parent_task:
:param session_version_id: Session VersionID
:return: Task list
"""
async with get_async_db_session() as session:
statement = select(LinsightExecuteTask).where(
LinsightExecuteTask.session_version_id == str(session_version_id))
if is_parent_task:
statement = statement.where(col(LinsightExecuteTask.parent_task_id).is_(None))
tasks = await session.exec(statement)
return tasks.all()
@classmethod
async def batch_create_tasks(cls, tasks: List[LinsightExecuteTask]) -> List[LinsightExecuteTask]:
"""
Batch Create Tasks
:param tasks: Task list
:return: Post-Created Task List
"""
async with get_async_db_session() as session:
session.add_all(tasks)
await session.commit()
return tasks
@classmethod
async def update_by_id(cls, task_id: str, **kwargs) -> Optional[LinsightExecuteTask]:
"""
By TaskIDUpdate Details
:param task_id: TaskID
:param kwargs: Update fields
:return: Updated task object
"""
async with get_async_db_session() as session:
statement = select(LinsightExecuteTask).where(LinsightExecuteTask.id == task_id)
task = await session.exec(statement)
task = task.first()
if not task:
return None
for key, value in kwargs.items():
setattr(task, key, value)
session.add(task)
await session.commit()
await session.refresh(task)
return task
# accordingsession_version_idBulk update task status
@classmethod
async def batch_update_status_by_session_version_id(cls, session_version_ids: List[str],
status: ExecuteTaskStatusEnum,
where) -> None:
"""
Based on session versionIDBulk update task status
:param session_version_ids:
:param status:
:param where:
:return:
"""
async with get_async_db_session() as session:
statement = (
update(LinsightExecuteTask)
.where(col(LinsightExecuteTask.session_version_id).in_(session_version_ids)) # Explicit Transfer str
)
if where:
statement = statement.where(*where)
statement = statement.values(status=status)
await session.exec(statement)
await session.commit()
================================================
FILE: src/backend/bisheng/linsight/domain/models/linsight_session_version.py
================================================
import logging
from datetime import datetime
from enum import Enum
from typing import List, Dict, Optional
from sqlalchemy import Column, Text, JSON, Boolean, Enum as SQLEnum, DateTime, text, ForeignKey, CHAR, func
from sqlmodel import Field, select, col, update
from bisheng.core.database import get_async_db_session
from bisheng.database.base import uuid_hex
from bisheng.common.models.base import SQLModelSerializable
logger = logging.getLogger(__name__)
class SessionVersionStatusEnum(str, Enum):
"""
Ideas Session Version Status Enumeration
"""
# not implemented
NOT_STARTED = "not_started"
# Sedang berlangsung
IN_PROGRESS = "in_progress"
# Run Completed
COMPLETED = "completed"
# has failed to run...
FAILED = "failed"
# SOP Generation Failed
SOP_GENERATION_FAILED = "sop_generation_failed"
# TERMINATION
TERMINATED = "terminated"
class LinsightSessionVersionBase(SQLModelSerializable):
"""
Inspiration Conversation Version Model Base Class
"""
session_id: str = Field(..., description='SessionsID', sa_column=Column(CHAR(36),
ForeignKey("message_session.chat_id"),
nullable=False,
index=True))
user_id: int = Field(..., description='UsersID', foreign_key="user.user_id", nullable=False)
question: str = Field(..., description='User Questions', sa_type=Text, nullable=False)
title: Optional[str] = Field(None, description='Session title', sa_type=Text, nullable=True)
tools: Optional[List[Dict]] = Field(None, description='List of available tools', sa_type=JSON, nullable=True)
# Personal Knowledge Base
personal_knowledge_enabled: bool = Field(False, description='Whether or not to enable Personal Knowledge Base', sa_type=Boolean)
# Organization Knowledge Base
org_knowledge_enabled: bool = Field(False, description='Whether to enable organization knowledge base', sa_type=Boolean)
files: Optional[List[Dict]] = Field(None, description='Uploaded files list:', sa_type=JSON, nullable=True)
sop: Optional[str] = Field(None, description='SOPContents', sa_type=Text, nullable=True)
output_result: Optional[Dict] = Field(None, description='Output Results', sa_type=JSON, nullable=True)
status: SessionVersionStatusEnum = Field(default=SessionVersionStatusEnum.NOT_STARTED, description='Session Version Status',
sa_column=Column(SQLEnum(SessionVersionStatusEnum), nullable=False))
score: Optional[int] = Field(None, description='Session Score', ge=1, le=5, nullable=True)
# Execution Result Feedback Information
execute_feedback: Optional[str] = Field(None, description='Execution Result Feedback Information', sa_type=Text, nullable=True)
# Is there a re-execution
has_reexecute: bool = Field(default=False, description='Is there a re-execution', sa_type=Boolean, nullable=False)
# Version
version: datetime = Field(default_factory=datetime.now, description='Session Version Created Time', sa_type=DateTime)
class LinsightSessionVersion(LinsightSessionVersionBase, table=True):
"""
Inspiration Conversation Version Model
"""
id: str = Field(default_factory=uuid_hex, description='Session VersionID',
sa_column=Column(CHAR(36), unique=True, nullable=False, primary_key=True))
create_time: datetime = Field(default_factory=datetime.now, description='Creation Time',
sa_column=Column(DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=True, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
__tablename__ = "linsight_session_version"
class LinsightSessionVersionDao(object):
"""
Inspiration Session Version Data Access Objects
"""
@staticmethod
async def insert_one(session_version: LinsightSessionVersion) -> LinsightSessionVersion:
"""
Insert an Invisible Sessions version record
:param session_version: Inspiration Conversation Version Object
:return: Invisible Conversation Version Object Created
"""
async with get_async_db_session() as session:
session.add(session_version)
await session.commit()
await session.refresh(session_version)
return session_version
@staticmethod
async def get_by_id(linsight_session_version_id: str) -> Optional[LinsightSessionVersion]:
"""
According to the Inspiration Conversation versionIDGet Ideas Conversation Version
:param linsight_session_version_id: Inspiration Conversation VersionID
:return: Inspiration Conversation Version Object
"""
async with get_async_db_session() as session:
statement = select(LinsightSessionVersion).where(
LinsightSessionVersion.id == str(linsight_session_version_id)) # Explicit Transfer str
result = await session.exec(statement)
return result.first()
@staticmethod
async def get_session_versions_by_session_id(session_id: str) -> List[LinsightSessionVersion]:
"""
By ConversationIDGet all Ideas Conversation versions
:param session_id: SessionsID
:return: Inspiration Session Version List
"""
async with get_async_db_session() as session:
statement = select(LinsightSessionVersion).where(
LinsightSessionVersion.session_id == str(session_id)).order_by(
col(LinsightSessionVersion.version).desc())
return (await session.exec(statement)).all()
@staticmethod
async def modify_sop_content(linsight_session_version_id: str, sop_content: str):
"""
Modify Inspiration Conversation Version ofSOPContents
:param linsight_session_version_id:
:param sop_content:
:return:
"""
async with get_async_db_session() as session:
stmt = (
update(LinsightSessionVersion)
.where(col(LinsightSessionVersion.id) == str(linsight_session_version_id)) # Explicit Transfer str
.values(sop=sop_content)
)
result = await session.exec(stmt)
if result.rowcount == 0:
logger.warning(f"No session version found with ID: {linsight_session_version_id}")
await session.commit()
@staticmethod
async def get_session_version_by_file_id(file_id: str) -> Optional[LinsightSessionVersion]:
"""
According to DOCUMENTIDGet Ideas Conversation Version
:param file_id: Doc.ID
:return: Inspiration Conversation Version Object
"""
async with get_async_db_session() as session:
statement = select(LinsightSessionVersion).where(
func.json_search(LinsightSessionVersion.files, 'all', file_id)
)
result = await session.exec(statement)
return result.first()
# Get a list of Ideas session versions based on task status
@staticmethod
async def get_session_versions_by_status(status: SessionVersionStatusEnum) -> List[LinsightSessionVersion]:
"""
Get a list of Ideas session versions based on task status
:param status: Session Version Status
:return: Inspiration Session Version List
"""
async with get_async_db_session() as session:
statement = select(LinsightSessionVersion).where(
LinsightSessionVersion.status == status
)
result = await session.exec(statement)
return result.all()
# Bulk Update Ideas Session Version Status
@staticmethod
async def batch_update_session_versions_status(session_version_ids: List[str], status: SessionVersionStatusEnum,
**kwargs) -> None:
"""
Bulk Update Ideas Session Version Status
:param session_version_ids: Session VersionIDVertical
:param status: New Session Version Status
"""
async with get_async_db_session() as session:
stmt = (
update(LinsightSessionVersion)
.where(col(LinsightSessionVersion.id).in_(session_version_ids))
.values(status=status, **kwargs) # Support for additional field updates
)
await session.exec(stmt)
await session.commit()
================================================
FILE: src/backend/bisheng/linsight/domain/models/linsight_sop.py
================================================
from datetime import datetime
from typing import Optional, Dict, Any, List, Literal
from loguru import logger
from sqlalchemy import update
from sqlalchemy.dialects.mysql import LONGTEXT
from sqlmodel import Field, select, delete, col, or_, func, Column, Text, DateTime, text, CHAR
from bisheng.linsight.domain.schemas.inspiration_schema import SOPManagementUpdateSchema
from bisheng.core.database import get_async_db_session
from bisheng.database.base import async_get_count
from bisheng.common.models.base import SQLModelSerializable
class LinsightSOPBase(SQLModelSerializable):
"""
Inspiration SOPModel Base Class
"""
name: str = Field(..., description='SOPPart Name', sa_column=Column(Text, nullable=False))
description: Optional[str] = Field(default=None, description='SOPDescription', sa_column=Column(Text))
user_id: int = Field(..., description='UsersID', foreign_key="user.user_id", nullable=False)
content: str = Field(..., description='SOPContents',
sa_column=Column(LONGTEXT, nullable=False, comment="SOPContents"))
rating: Optional[int] = Field(default=0, ge=0, le=5, description='SOPScore, Range0-5')
showcase: Optional[bool] = Field(default=False, index=True, description='Whether to display it on the homepage as a featured case')
vector_store_id: Optional[str] = Field(..., description='Vector StorageID',
sa_column=Column(CHAR(36), nullable=False, comment="Vector StorageID"))
linsight_version_id: Optional[str] = Field(default=None,
description='Inspiration Conversation VersionID, used to query the running results of a featured case',
sa_column=Column(CHAR(36), nullable=True))
create_time: datetime = Field(default_factory=datetime.now, description='Creation Time',
sa_column=Column(DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=True, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class LinsightSOP(LinsightSOPBase, table=True):
"""
Inspiration SOPModels
"""
__tablename__ = "linsight_sop"
id: Optional[int] = Field(default=None, primary_key=True, description='SOPUniqueness quantificationID')
class LinsightSOPRecord(SQLModelSerializable, table=True):
"""
InspirationSOPRun the record sheet to record the results generated during the execution of the Ideasop
"""
__tablename__ = "linsight_sop_record"
id: Optional[int] = Field(default=None, primary_key=True, description='SOPRecord UniqueID')
name: str = Field(..., description='SOPPart Name', sa_column=Column(Text, nullable=False))
description: Optional[str] = Field(default=None, description='SOPDescription', sa_column=Column(Text))
user_id: int = Field(..., description='UsersID', foreign_key="user.user_id", nullable=False)
content: str = Field(..., description='SOPContents',
sa_column=Column(LONGTEXT, nullable=False, comment="SOPContents"))
rating: Optional[int] = Field(default=0, ge=0, le=5, description='SOPScore, Range0-5')
execute_feedback: Optional[str] = Field(None, description='Execution Result Feedback Information', sa_type=Text, nullable=True)
linsight_version_id: Optional[str] = Field(default=None, description='Inspiration Conversation Versionid, sync ratings')
create_time: datetime = Field(default_factory=datetime.now, description='Creation Time',
sa_column=Column(DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=True, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class LinsightSOPDao(LinsightSOPBase):
"""
Inspiration SOPData Access Objects
"""
@classmethod
async def create_sop(cls, sop: LinsightSOP) -> LinsightSOP:
async with get_async_db_session() as session:
session.add(sop)
await session.commit()
await session.refresh(sop)
return sop
@classmethod
async def update_sop(cls, sop_obj: SOPManagementUpdateSchema) -> LinsightSOP:
async with get_async_db_session() as session:
# UseUpdateStatement UpdatesSOP
statement = select(LinsightSOP).where(LinsightSOP.id == sop_obj.id)
result = await session.exec(statement)
sop = result.first()
if not sop:
raise ValueError("SOP not found")
# will besop_objField values for were updated tosopin the example
for key, value in sop_obj.model_dump().items():
if hasattr(sop, key) and value is not None:
setattr(sop, key, value)
sop.update_time = datetime.now() # Update modification time
session.add(sop)
await session.commit()
await session.refresh(sop)
return sop
@classmethod
async def get_sop_page(cls, keywords: Optional[str] = None, showcase: bool = None,
sort: Literal["asc", "desc"] = "desc", page: int = 1,
page_size: int = 10) -> Dict[str, Any]:
"""
DapatkanSOPPagination List
"""
statement = select(LinsightSOP)
if keywords:
statement = statement.where(
LinsightSOP.name.ilike(f'%{keywords}%') |
LinsightSOP.description.ilike(f'%{keywords}%') |
LinsightSOP.content.ilike(f'%{keywords}%')
)
# according rating And create_time Sort
if sort == "asc":
statement = statement.order_by(col(LinsightSOP.rating).asc(), col(LinsightSOP.update_time).asc())
else:
statement = statement.order_by(col(LinsightSOP.rating).desc(), col(LinsightSOP.update_time).desc())
if showcase is not None:
statement = statement.where(LinsightSOP.showcase == showcase)
async with get_async_db_session() as session:
total_count = await async_get_count(session, statement)
statement = statement.offset((page - 1) * page_size).limit(page_size)
result = (await session.exec(statement)).all()
return {
"total": total_count,
"current_page": page,
"page_size": page_size,
"items": [result.model_dump() for result in result]
}
@classmethod
async def get_sops_by_ids(cls, sop_ids: List[int]) -> List[LinsightSOP]:
"""
accordingSOP IDGet listSOPObjects
"""
async with get_async_db_session() as session:
statement = select(LinsightSOP).where(col(LinsightSOP.id).in_(sop_ids))
result = await session.exec(statement)
sop_list = result.all()
return sop_list
@classmethod
async def get_sops_by_names(cls, names: list[str]) -> List[LinsightSOP]:
"""
accordingSOPGet Name ListSOPObjects
"""
statement = select(LinsightSOP).where(col(LinsightSOP.name).in_(names))
async with get_async_db_session() as session:
result = await session.exec(statement)
sop_list = result.all()
return sop_list
@classmethod
async def remove_sop(cls, sop_ids: List[int]) -> bool:
"""
DeleteSOP
"""
async with get_async_db_session() as session:
delete_statement = delete(LinsightSOP).where(col(LinsightSOP.id).in_(sop_ids))
result = await session.exec(delete_statement)
await session.commit()
logger.info(f"Deleted {result.rowcount} SOP(s) with IDs: {sop_ids}")
return True
@classmethod
async def get_sop_by_session_id(cls, session_id: str) -> Optional[LinsightSOP]:
"""
According to the Inspiration ConversationID Dapatkan OP
"""
async with get_async_db_session() as session:
statement = select(LinsightSOP).where(LinsightSOP.linsight_session_id == session_id)
result = await session.exec(statement)
sop = result.first()
return sop if sop else None
@classmethod
async def get_sop_by_vector_store_ids(cls, vector_store_ids: List[str]) -> List[LinsightSOP]:
"""
According to vector storageIDGet listSOPObjects
"""
async with get_async_db_session() as session:
statement = select(LinsightSOP).where(col(LinsightSOP.vector_store_id).in_(vector_store_ids))
result = await session.exec(statement)
sop_list = result.all()
return sop_list
@classmethod
async def get_all_sops(cls) -> List[LinsightSOP]:
"""
Fetch allSOP
"""
async with get_async_db_session() as session:
statement = select(LinsightSOP)
result = await session.exec(statement)
sop_list = result.all()
return sop_list
@classmethod
async def create_sop_record(cls, sop_record: LinsightSOPRecord) -> LinsightSOPRecord:
"""
Insert an entrySOPRecord
"""
async with get_async_db_session() as session:
session.add(sop_record)
await session.commit()
await session.refresh(sop_record)
return sop_record
@classmethod
async def _filter_sop_record_statement(cls, statement, keywords: str = None, user_ids: list[int] = None) -> select:
"""
Build.SOPRecorded Query Statements
"""
or_params = []
if keywords:
or_params.extend([
LinsightSOPRecord.name.like(f'%{keywords}%'),
LinsightSOPRecord.description.like(f'%{keywords}%'),
LinsightSOPRecord.content.like(f'%{keywords}%')
])
if user_ids:
or_params.append(LinsightSOPRecord.user_id.in_(user_ids))
if or_params:
statement = statement.where(or_(*or_params))
return statement
@classmethod
async def filter_sop_record(cls, keywords: str = None, user_ids: list[int] = None, page: int = None,
page_size: int = None, sort: str = None) -> List[LinsightSOPRecord]:
"""
Fetch allSOPRecord, Key Matchname、description、content。user_idsIs UserIDList. Between filters areorRelationship
"""
statement = select(LinsightSOPRecord)
statement = await cls._filter_sop_record_statement(statement, keywords, user_ids)
if page and page_size:
statement = statement.offset((page - 1) * page_size).limit(page_size)
if sort == "asc":
statement = statement.order_by(col(LinsightSOPRecord.create_time).asc())
else:
statement = statement.order_by(col(LinsightSOPRecord.create_time).desc())
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
async def count_sop_record(cls, keywords: str = None, user_ids: list[int] = None) -> int:
"""
StatisticsSOPNumber of Records
"""
statement = select(func.count(LinsightSOPRecord.id))
statement = await cls._filter_sop_record_statement(statement, keywords, user_ids)
async with get_async_db_session() as session:
return await session.scalar(statement)
@classmethod
async def get_sop_record_by_ids(cls, ids: list[int]) -> List[LinsightSOPRecord]:
"""
accordingSOPRecordIDGet listSOPRecord Objects
"""
statement = select(LinsightSOPRecord).where(col(LinsightSOPRecord.id).in_(ids))
async with get_async_db_session() as session:
result = await session.exec(statement)
sop_record_list = result.all()
return sop_record_list
@classmethod
async def update_sop_record_score(cls, linsight_version_id: str, rating: int) -> bool:
"""
UpdateSOPRecord Score
"""
statement = update(LinsightSOPRecord).where(
col(LinsightSOPRecord.linsight_version_id) == linsight_version_id).values(rating=rating)
async with get_async_db_session() as session:
await session.exec(statement)
await session.commit()
return True
@classmethod
async def update_sop_record_feedback(cls, linsight_version_id: str, execute_feedback: str) -> bool:
"""
UpdateSOPRecord Execution Result Feedback Information
"""
statement = update(LinsightSOPRecord).where(
col(LinsightSOPRecord.linsight_version_id) == linsight_version_id).values(execute_feedback=execute_feedback)
async with get_async_db_session() as session:
await session.exec(statement)
await session.commit()
return True
@classmethod
async def set_sop_showcase(cls, sop_id: int, showcase: bool) -> bool:
"""
PengaturanSOPWhether to display it on the homepage as a featured case
"""
statement = update(LinsightSOP).where(
col(LinsightSOP.id) == sop_id).values(showcase=showcase)
async with get_async_db_session() as session:
await session.exec(statement)
await session.commit()
return True
================================================
FILE: src/backend/bisheng/linsight/domain/schemas/__init__.py
================================================
================================================
FILE: src/backend/bisheng/linsight/domain/schemas/inspiration_schema.py
================================================
from typing import Optional
from pydantic import Field, BaseModel, field_validator
# SOPManaging Schema
class SOPManagementSchema(BaseModel):
"""SOPManaging Schema"""
name: str = Field(..., description="SOPPart Name")
description: str = Field(None, description="SOPDescription")
content: str = Field(..., description="SOPContents")
rating: int = Field(0, ge=0, le=5, description="SOPScore, Range0-5")
linsight_version_id: Optional[str] = Field(default=None, description="LinsightSession Version ofID")
@field_validator("name", mode="before")
def validate_name(cls, v):
# LimitSOPName length does not exceed500characters
return v[:500]
class SOPManagementUpdateSchema(SOPManagementSchema):
"""SOPManage updates Schema"""
id: int = Field(..., description="SOPUniqueness quantificationID")
user_id: Optional[int] = Field(None, description="UsersID")
showcase: Optional[bool] = Field(None, description="Whether to display")
================================================
FILE: src/backend/bisheng/linsight/domain/schemas/linsight_schema.py
================================================
from typing import List, Dict, Optional
from pydantic import BaseModel, Field, field_validator
from bisheng.linsight.domain.models.linsight_sop import LinsightSOPRecord
from bisheng_langchain.linsight.event import NeedUserInput
class ToolChildrenSchema(BaseModel):
id: int = Field(..., description="Toolsid")
name: Optional[str] = Field(None, description="Tool name")
tool_key: Optional[str] = Field(None, description="Toolskey")
desc: Optional[str] = Field(None, description="Tools Description")
# Opt-IntoolSchema
class LinsightToolSchema(BaseModel):
id: int = Field(..., description="Tool LevelID")
name: Optional[str] = Field(None, description="Tool name")
is_preset: int = Field(1, description="Whether or not it is a preset tool")
desc: Optional[str] = Field(None, description="Tools Description")
# childTools List
children: Optional[List[ToolChildrenSchema]] = Field(..., description="Subtools List")
class SubmitFileSchema(BaseModel):
file_id: str = Field(..., description="File UniqueID")
file_name: str = Field(..., description="File Name")
parsing_status: str = Field(..., description="File parsing status")
# Submit a problemSchema
class LinsightQuestionSubmitSchema(BaseModel):
question: str = Field(..., description="User Submitted Questions")
org_knowledge_enabled: bool = Field(False, description="Whether to enable organization knowledge base")
personal_knowledge_enabled: bool = Field(False, description="Whether or not to enable Personal Knowledge Base")
files: Optional[List[SubmitFileSchema]] = Field(None, description="Uploaded files list:")
tools: Optional[List[LinsightToolSchema]] = Field(None, description="List of available tools")
@field_validator("tools")
@classmethod
def validate_tools(cls, v: List[LinsightToolSchema]) -> List[Dict]:
if not v:
return []
# Convert tool to dictionary format
return [tool.model_dump() for tool in v]
class DownloadFilesSchema(BaseModel):
file_name: str = Field(..., description="File Name")
file_url: str = Field(..., description="File download link")
class SopRecordRead(LinsightSOPRecord, table=False):
user_name: Optional[str] = Field(default=None, description="Client Name")
class UserInputEventSchema(NeedUserInput):
files: Optional[List[Dict[str, str]]] = Field(None, description="Uploaded files list:")
user_input: Optional[str] = Field(None, description="User input")
is_completed: bool = Field(False, description="Is it completed")
================================================
FILE: src/backend/bisheng/linsight/domain/services/__init__.py
================================================
================================================
FILE: src/backend/bisheng/linsight/domain/services/message_stream_handle.py
================================================
from starlette.websockets import WebSocket
from bisheng.linsight.domain.services.state_message_manager import LinsightStateMessageManager, MessageData, MessageEventType
class MessageStreamHandle(object):
def __init__(self, websocket: 'WebSocket', session_version_id: str):
"""
Inisialisasi MessageStreamHandle
:param websocket:
"""
self._websocket = websocket
self.session_version_id = session_version_id
self._state_message_manager: LinsightStateMessageManager = LinsightStateMessageManager(
session_version_id=session_version_id)
async def send_message(self, message_data: str) -> None:
"""
Send Message To WebSocket
:param message_data: Message to send
"""
await self._websocket.send_text(message_data)
async def receive_message(self) -> str:
"""
Received from WebSocket Message
:return:
"""
return await self._websocket.receive_text()
async def send_json(self, json_data: dict) -> None:
"""
Send JSON Data to WebSocket
:param json_data: To be sent JSON DATA
"""
await self._websocket.send_json(json_data)
async def receive_json(self) -> dict:
"""
Received from WebSocket right of privacy JSON DATA
:return:
"""
return await self._websocket.receive_json()
# Medical Treatment: WebSocket Connected Lifecycle Events
async def connect(self) -> None:
"""
Connecting to devices WebSocket
"""
await self._websocket.accept()
while True:
try:
message = await self._state_message_manager.pop_message()
if message:
await self.send_json(message.model_dump())
if message.event_type in [MessageEventType.ERROR_MESSAGE, MessageEventType.TASK_TERMINATED,
MessageEventType.FINAL_RESULT]:
await self._websocket.close(code=1000, reason="Session finished or error occurred")
break
except Exception as e:
await self.send_json(
MessageData(event_type=MessageEventType.ERROR_MESSAGE, data={"error": str(e)}).model_dump())
await self._websocket.close(code=1000, reason=f"Error: {str(e)}")
break
async def disconnect(self) -> None:
"""
detach WebSocket CONNECT
"""
await self._websocket.close(code=1000, reason="Client disconnected")
================================================
FILE: src/backend/bisheng/linsight/domain/services/sop_manage.py
================================================
import io
import json
import uuid
from typing import List, Dict, Literal
import openpyxl
from fastapi import UploadFile
from langchain_core.documents import Document
from langchain_core.embeddings import Embeddings
from langchain_core.language_models import BaseChatModel
from langchain_text_splitters import RecursiveCharacterTextSplitter
from loguru import logger
from bisheng.api.services.knowledge_imp import decide_vectorstores, extract_code_blocks
from bisheng.linsight.domain.schemas.inspiration_schema import SOPManagementSchema, SOPManagementUpdateSchema
from bisheng.linsight.domain.schemas.linsight_schema import SopRecordRead
from bisheng.api.v1.schemas import UnifiedResponseModel, resp_200
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode import BaseErrorCode
from bisheng.common.errcode.http_error import NotFoundError
from bisheng.common.errcode.linsight import (
LinsightAddSopError, LinsightUpdateSopError, LinsightDeleteSopError,
LinsightVectorModelError, LinsightDocSearchError, LinsightDocNotFoundError, SopContentOverLimitError
)
from bisheng.common.errcode.server import (
NoEmbeddingModelError, EmbeddingModelNotExistError, EmbeddingModelTypeError, UploadFileEmptyError
)
from bisheng.common.services.config_service import settings
from bisheng.core.prompts.manager import get_prompt_manager
from bisheng.linsight.domain.models.linsight_sop import LinsightSOP, LinsightSOPDao, LinsightSOPRecord
from bisheng.interface.embeddings.custom import FakeEmbedding
from bisheng.llm.domain.const import LLMModelType
from bisheng.llm.domain.models import LLMDao
from bisheng.llm.domain.services import LLMService
from bisheng.user.domain.models.user import UserDao
from bisheng.utils import util
from bisheng_langchain.rag.init_retrievers import KeywordRetriever, BaselineVectorRetriever
from bisheng_langchain.retrievers import EnsembleRetriever
from bisheng_langchain.vectorstores import ElasticKeywordsSearch, Milvus
class SOPManageService:
__doc__ = "InspirationSOPManage Services"
collection_name = "col_linsight_sop"
@staticmethod
async def generate_sop_summary(invoke_user_id: int, sop_content: str, llm: BaseChatModel = None) -> Dict[str, str]:
"""BuatSOPAbstract"""
default_summary = {"sop_title": "SOP Title", "sop_description": "SOP Description"}
try:
if llm is None:
workbench_conf = await LLMService.get_workbench_llm()
linsight_conf = settings.get_linsight_conf()
llm = await LLMService.get_bisheng_linsight_llm(invoke_user_id=invoke_user_id,
model_id=workbench_conf.task_model.id,
temperature=linsight_conf.default_temperature)
prompt_service = await get_prompt_manager()
prompt_obj = prompt_service.render_prompt(
namespace="sop",
prompt_name="gen_sop_summary",
sop_detail=sop_content
)
prompt = [
("system", prompt_obj.prompt.system),
("user", prompt_obj.prompt.user)
]
response = await llm.ainvoke(prompt)
if not response.content:
return default_summary
code_ret = extract_code_blocks(response.content)
if code_ret:
return json.loads(code_ret[0])
return json.loads(response.content)
except Exception as e:
logger.exception(f"BuatSOPSummary failed: {e}")
return default_summary
@staticmethod
async def add_sop_record(sop_record: LinsightSOPRecord) -> LinsightSOPRecord:
"""
TambahSOPRecord
"""
if not sop_record.description:
sop_summary = await SOPManageService.generate_sop_summary(sop_record.user_id, sop_record.content, None)
sop_record.description = sop_summary["sop_description"]
return await LinsightSOPDao.create_sop_record(sop_record)
@staticmethod
async def get_sop_record(keyword: str = None, sort: str = None, page: int = 1, page_size: int = 10) -> \
(List[SopRecordRead], int):
"""
Query by keywordSOPRecord
"""
user_ids = []
if keyword:
# If there are keywords, get the user firstIDVertical
user_ids = await UserDao.afilter_users(user_ids=[], keyword=keyword)
user_ids = [one.user_id for one in user_ids]
res = await LinsightSOPDao.filter_sop_record(keyword, user_ids, page, page_size, sort)
count = await LinsightSOPDao.count_sop_record(keyword, user_ids)
if not res:
return [], 0
all_users = await UserDao.afilter_users(user_ids=[one.user_id for one in res])
all_users = {
one.user_id: one.user_name for one in all_users
}
result = []
for one in res:
new_one = SopRecordRead.model_validate(one)
new_one.user_name = all_users.get(one.user_id, str(one.user_id))
result.append(new_one)
return result, count
@staticmethod
async def update_sop_record_score(session_version_id: str, score: int) -> None:
await LinsightSOPDao.update_sop_record_score(session_version_id, score)
@staticmethod
async def update_sop_record_feedback(session_version_id: str, feedback: str) -> None:
await LinsightSOPDao.update_sop_record_feedback(session_version_id, feedback)
@classmethod
async def sync_sop_record(cls, record_ids: list[int], override: bool = False, save_new: bool = False) \
-> list[str] | None:
"""
SynchronousSOPRecord
:param record_ids: SOPRecordIDVertical
:param override: Do you want to overwrite the existingSOP
:param save_new: Do you want to save the newSOP
:return: If there is a duplicateSOPrecords, return a list of duplicate record names, otherwise returnNone
"""
sop_records = await LinsightSOPDao.get_sop_record_by_ids(record_ids)
return await cls._sync_sop_record(sop_records, override, save_new)
@staticmethod
async def _sync_sop_record(sop_records: list[LinsightSOPRecord], override: bool = False, save_new: bool = False) \
-> list[str] | None:
"""
If there is a duplicateSOPrecords, returning a list of duplicate record names
"""
records_name_dict = {}
repeat_names = set()
name_set = set()
sop_list = []
oversize_records = []
new_records = []
for one in sop_records:
if len(one.content) > 50000:
oversize_records.append(one.name)
continue
new_records.append(one)
if one.name not in name_set:
records_name_dict[one.name] = one
name_set.add(one.name)
sop_records = new_records
if not sop_records and oversize_records:
raise SopContentOverLimitError(data={"sop_name": "、".join(oversize_records)})
if name_set:
sop_list = await LinsightSOPDao.get_sops_by_names(list(name_set))
for one in sop_list:
repeat_names.add(one.name)
if override:
# Update existing firstsopGallery
override_name_dict = {}
for one in sop_list:
if one_record := records_name_dict.get(one.name):
await SOPManageService.update_sop(SOPManagementUpdateSchema(
id=one.id,
name=one.name,
description=one_record.description,
content=one_record.content,
rating=one_record.rating,
linsight_version_id=one_record.linsight_version_id,
showcase=False,
user_id=one_record.user_id,
))
override_name_dict[one.name] = True
# Add the restsopRecord
for one in records_name_dict.values():
if one.name in override_name_dict:
continue
await SOPManageService.add_sop(SOPManagementSchema(
name=one.name,
description=one.description,
content=one.content,
rating=one.rating,
linsight_version_id=one.linsight_version_id,
), one.user_id)
elif save_new:
for one in sop_records:
new_name = one.name
if new_name in repeat_names:
# Add suffix if there are duplicate records, Limit Length500characters
new_name = f"{one.name}Dungeon"
await SOPManageService.add_sop(SOPManagementSchema(
name=new_name,
description=one.description,
content=one.content,
rating=one.rating,
linsight_version_id=one.linsight_version_id,
), one.user_id)
else:
# Explain that there is a duplicate record, which needs to be confirmed by the user
if sop_list:
return list(repeat_names)
# Insert a record into the database
for one in sop_records:
await SOPManageService.add_sop(SOPManagementSchema(
name=one.name,
description=one.description,
content=one.content,
rating=one.rating,
linsight_version_id=one.linsight_version_id,
), one.user_id)
if oversize_records:
raise SopContentOverLimitError(data={"sop_name": "、".join(oversize_records)})
return None
@classmethod
async def parse_sop_file(cls, file: UploadFile) -> (list, list):
"""
analyzingSOPDoc.
:param file: FilePath
"""
if not file.size:
raise UploadFileEmptyError()
error_rows = []
success_rows = []
wb = None
try:
wb = openpyxl.load_workbook(io.BytesIO(file.file.read()), read_only=True, data_only=True)
sheet = wb.active
max_rows = sheet.max_row
for i in range(2, max_rows + 1):
name = sheet.cell(row=i, column=1).value
description = sheet.cell(row=i, column=2).value
content = sheet.cell(row=i, column=3).value
error_msg = []
if not name:
error_msg.append("name_empty")
if not content:
error_msg.append("description_empty")
if len(str(name)) >= 500:
error_msg.append("name_over_size")
if len(str(content)) >= 50000:
error_msg.append("content_over_size")
if description and len(str(description)) >= 1000:
error_msg.append("description_over_size")
if error_msg:
error_rows.append({
"index": i,
"error_msg": error_msg
})
else:
success_rows.append({
"name": str(name),
"description": str(description) if description is not None else "",
"content": str(content),
})
finally:
if wb:
wb.close()
return success_rows, error_rows
@classmethod
async def upload_sop_file(cls, login_user: UserPayload, file: UploadFile, ignore_error: bool, override: bool,
save_new: bool) \
-> (List[Dict], List[Dict], List[str]):
"""
Upload itSOPDoc.
:param login_user: Logged in user information
:param file: FilePath
:param ignore_error: Do you want to ignore the error
:param override: Do you want to overwrite the existingSOP
:param save_new: Do you want to save the newSOP
:return: Upload results, success_rows, error_rows, repeat_names
"""
success_rows, error_rows = await cls.parse_sop_file(file)
if (error_rows or len(success_rows) == 0) and not ignore_error:
return success_rows, error_rows
if not success_rows:
return [], [], []
records = [LinsightSOPRecord(**one, user_id=login_user.user_id) for one in success_rows]
repeat_name_list = await cls._sync_sop_record(records, override=override, save_new=save_new)
return [], [], repeat_name_list
@classmethod
async def get_sop_list(cls, keywords: str = None, sort: Literal["asc", "desc"] = "desc", showcase: bool = False,
page: int = 1, page_size: int = 10) -> dict:
"""
DapatkanSOPVertical
:param keywords: Keyword
:param sort: Sort By
:param page: Page
:param page_size: Items per page
:param showcase: Whether to show only the selected cases ofSOP
:return: SOPLists and totals
"""
sop_pages = await LinsightSOPDao.get_sop_page(keywords=keywords, showcase=showcase, page=page,
page_size=page_size,
sort=sort)
user_ids = list(set([one["user_id"] for one in sop_pages["items"]]))
user_map = UserDao.aget_user_by_ids(user_ids=user_ids)
user_map = {one.user_id: one.user_name for one in await user_map}
for one in sop_pages["items"]:
one["user_name"] = user_map.get(one["user_id"], str(one["user_id"]))
return sop_pages
@staticmethod
async def add_sop(sop_obj: SOPManagementSchema, user_id: int) -> UnifiedResponseModel | None:
"""
Add NewSOP
:param user_id:
:param sop_obj:
:return: Added bySOPObjects
"""
# Get the current global configuration ofembeddingModels
workbench_conf = await LLMService.get_workbench_llm()
try:
emb_model_id = workbench_conf.embedding_model.id
if not emb_model_id:
return NoEmbeddingModelError.return_resp()
except AttributeError:
return NoEmbeddingModelError.return_resp()
# CorrectionembeddingModels
embed_info = LLMDao.get_model_by_id(int(emb_model_id))
if not embed_info:
return EmbeddingModelNotExistError.return_resp()
if embed_info.model_type != LLMModelType.EMBEDDING.value:
return EmbeddingModelTypeError.return_resp()
vector_store_id = uuid.uuid4().hex
embeddings = await LLMService.get_bisheng_linsight_embedding(model_id=embed_info.id,
invoke_user_id=user_id)
try:
vector_client: Milvus = decide_vectorstores(
SOPManageService.collection_name, "Milvus", embeddings
)
es_client: ElasticKeywordsSearch = decide_vectorstores(
SOPManageService.collection_name, "ElasticKeywordsSearch", FakeEmbedding()
)
metadatas = [{"vector_store_id": vector_store_id}]
vector_client.add_texts([sop_obj.content[0:10000]], metadatas=metadatas)
es_client.add_texts([sop_obj.content], ids=[vector_store_id], metadatas=metadatas)
except Exception as e:
return LinsightAddSopError.return_resp(data=str(e))
sop_dict = sop_obj.model_dump(exclude_unset=True)
sop_dict["vector_store_id"] = vector_store_id # Set Vector StorageID
# Here you can add a database operation that willsop_objSave to Database
sop_model = LinsightSOP(**sop_dict)
sop_model.user_id = user_id
sop_model = await LinsightSOPDao.create_sop(sop_model)
return resp_200(data=sop_model)
@staticmethod
async def update_sop(sop_obj: SOPManagementUpdateSchema,
update_version_id: bool = True) -> UnifiedResponseModel | None:
"""
UpdateSOP
:param sop_obj:
:param update_version_id: Do you want to update the versionID
:return: Post UpdateSOPObjects
"""
# CorrectionSOPpresence or does it
existing_sop = await LinsightSOPDao.get_sops_by_ids([sop_obj.id])
if not existing_sop:
return NotFoundError.return_resp()
if not update_version_id:
sop_obj.linsight_version_id = existing_sop[0].linsight_version_id
if sop_obj.content != existing_sop[0].content:
# Get the current global configuration ofembeddingModels
workbench_conf = await LLMService.get_workbench_llm()
try:
emb_model_id = workbench_conf.embedding_model.id
if not emb_model_id:
return NoEmbeddingModelError.return_resp()
except AttributeError:
return NoEmbeddingModelError.return_resp()
vector_store_id = existing_sop[0].vector_store_id
embeddings = await LLMService.get_bisheng_linsight_embedding(invoke_user_id=sop_obj.user_id,
model_id=int(emb_model_id))
# Update Vector Store
try:
vector_client: Milvus = decide_vectorstores(
SOPManageService.collection_name, "Milvus", embeddings
)
es_client: ElasticKeywordsSearch = decide_vectorstores(
SOPManageService.collection_name, "ElasticKeywordsSearch", FakeEmbedding()
)
vector_client.delete(expr=f"vector_store_id == '{vector_store_id}'")
es_client.delete([vector_store_id])
metadatas = [{"vector_store_id": vector_store_id}]
vector_client.add_texts([sop_obj.content[0:10000]], metadatas=metadatas)
es_client.add_texts([sop_obj.content], ids=[vector_store_id], metadatas=metadatas)
except Exception as e:
return LinsightUpdateSopError.return_resp(data=str(e))
# Update databaseSOP
sop_model = await LinsightSOPDao.update_sop(sop_obj)
return resp_200(data=sop_model)
@staticmethod
async def remove_sop(sop_ids: list[int], login_user: UserPayload) -> UnifiedResponseModel | None:
"""
DeleteSOP
:param login_user:
:param sop_ids: SOPUniqueness quantificationIDVertical
:return: Remove result
"""
# CorrectionSOPpresence or does it
existing_sops = await LinsightSOPDao.get_sops_by_ids(sop_ids)
if not existing_sops:
return NotFoundError.return_resp()
# Delete data in vector store
try:
vector_store_ids = [sop.vector_store_id for sop in existing_sops]
vector_client: Milvus = decide_vectorstores(
SOPManageService.collection_name, "Milvus", FakeEmbedding()
)
es_client: ElasticKeywordsSearch = decide_vectorstores(
SOPManageService.collection_name, "ElasticKeywordsSearch", FakeEmbedding()
)
vector_client.delete(expr=f"vector_store_id in {vector_store_ids}")
es_client.delete(vector_store_ids)
except Exception as e:
return LinsightDeleteSopError.return_resp(data=str(e))
# Delete from databaseSOP
await LinsightSOPDao.remove_sop(sop_ids=sop_ids)
return resp_200(data=True)
@classmethod
async def get_sop_by_id(cls, sop_id: int) -> LinsightSOP | None:
"""
accordingIDDapatkanSOP
:param sop_id: SOPUniqueness quantificationID
:return: SOPObjects
"""
sop_models = await LinsightSOPDao.get_sops_by_ids([sop_id])
if not sop_models:
return None
return sop_models[0]
# sop Library Retrieval
@classmethod
async def search_sop(cls, invoke_user_id: int, query: str, k: int = 3) -> (List[Document], BaseErrorCode | None):
"""
CariSOP
:param k:
:param query: Keywords Search
:return: search results
"""
# Get the current global configuration ofembeddingModels
try:
vector_search = True
es_search = True
error_msg = None
workbench_conf = await LLMService.get_workbench_llm()
if workbench_conf.embedding_model is None or not workbench_conf.embedding_model.id:
vector_search = False
error_msg = LinsightVectorModelError
else:
try:
emb_model_id = workbench_conf.embedding_model.id
embeddings = await LLMService.get_bisheng_linsight_embedding(invoke_user_id=invoke_user_id,
model_id=int(emb_model_id))
await embeddings.aembed_query("test")
except Exception as e:
logger.error(f"Vector retrieval model initialization failed: {str(e)}")
vector_search = False
error_msg = LinsightVectorModelError
# Create Text Splitter
text_splitter = RecursiveCharacterTextSplitter()
retrievers = []
if vector_search and es_search:
emb_model_id = workbench_conf.embedding_model.id
embeddings = await LLMService.get_bisheng_linsight_embedding(invoke_user_id=invoke_user_id,
model_id=int(emb_model_id))
vector_client: Milvus = decide_vectorstores(
SOPManageService.collection_name, "Milvus", embeddings
)
es_client: ElasticKeywordsSearch = decide_vectorstores(
SOPManageService.collection_name, "ElasticKeywordsSearch", FakeEmbedding()
)
keyword_retriever = KeywordRetriever(keyword_store=es_client, search_kwargs={"k": 100},
text_splitter=text_splitter)
baseline_vector_retriever = BaselineVectorRetriever(vector_store=vector_client,
search_kwargs={"k": 100},
text_splitter=text_splitter)
retrievers = [keyword_retriever, baseline_vector_retriever]
elif es_search and not vector_search:
# Search with keywords only
es_client: ElasticKeywordsSearch = decide_vectorstores(
SOPManageService.collection_name, "ElasticKeywordsSearch", FakeEmbedding()
)
keyword_retriever = KeywordRetriever(keyword_store=es_client, search_kwargs={"k": 100},
text_splitter=text_splitter)
retrievers = [keyword_retriever]
elif vector_search and not es_search:
# Use vector retrieval only
emb_model_id = workbench_conf.embedding_model.id
embeddings = await LLMService.get_bisheng_linsight_embedding(invoke_user_id=invoke_user_id,
model_id=int(emb_model_id))
vector_client: Milvus = decide_vectorstores(
SOPManageService.collection_name, "Milvus", embeddings
)
baseline_vector_retriever = BaselineVectorRetriever(vector_store=vector_client,
search_kwargs={"k": 100},
text_splitter=text_splitter)
retrievers = [baseline_vector_retriever]
else:
error_msg = LinsightDocSearchError
return [], error_msg
retriever = EnsembleRetriever(retrievers=retrievers, weights=[0.5, 0.5] if len(retrievers) > 1 else [1.0])
# Perform Retrieval
results = await retriever.ainvoke(input=query)
if not results:
return [], error_msg
vector_store_ids = [doc.metadata.get("vector_store_id") for doc in results if
doc.metadata.get("vector_store_id")]
# accordingvector_store_idsQuerying repositoriessop
sop_models = await LinsightSOPDao.get_sop_by_vector_store_ids(vector_store_ids)
sop_model_vector_store_ids = [sop.vector_store_id for sop in sop_models]
# Filter results to ensure that only those that exist in the database are returnedSOP
results = [doc for doc in results if doc.metadata.get("vector_store_id") in sop_model_vector_store_ids]
# Before filtering and fetchingk result(s) found
results = results[:k]
return results, error_msg
except Exception as e:
logger.error(f"Failed to search the instruction manual: {str(e)}")
return [], LinsightDocNotFoundError
# RebuildSOP VectorStore
@classmethod
async def rebuild_sop_vector_store_task(cls, embeddings: Embeddings):
"""
RebuildSOPVector Storage
:return: Reconstruction Results
"""
try:
# Fetch allSOP
all_sops = await LinsightSOPDao.get_all_sops()
if not all_sops:
logger.info("NoSOPData needs to be reconstructed for vector storage")
return None
# Wrapper synchronization function is asynchronous function
def sync_func(sops, emb):
"""
Synchronization function for rebuildingSOPVector Storage
:param emb:
:param sops:
:return:
"""
vector_client: Milvus = decide_vectorstores(
SOPManageService.collection_name, "Milvus", emb
)
# Delete existing vector storecollection
if vector_client.col is not None:
logger.info("Delete existingSOPVector Storagecollection")
vector_client.col.drop()
vector_client.col = None
vector_client.fields = []
metadatas = [{"vector_store_id": sop.vector_store_id} for sop in sops]
contents = [sop.content for sop in sops]
batch_size = 16
for i in range(0, len(contents), batch_size):
batch_contents = contents[i:i + batch_size]
batch_metadatas = metadatas[i:i + batch_size]
# Add NewSOPData to vector storage
vector_client.add_texts(batch_contents, metadatas=batch_metadatas)
logger.info("SOPVector store rebuild completed: {}".format(len(sops)))
# Userun_asyncRun Synchronization Function
await util.sync_func_to_async(sync_func)(all_sops, embeddings)
return None
except Exception as e:
logger.exception(f"RebuildSOPVector store failed: {str(e)}")
return None
# if __name__ == '__main__':
# # test code
# results, error_msg = asyncio.run(SOPManageService.search_sop(query="Guidelines for the preparation of bidding documents", k=3))
#
# print(results)
# print(error_msg)
================================================
FILE: src/backend/bisheng/linsight/domain/services/state_message_manager.py
================================================
import asyncio
import pickle
from enum import Enum
from typing import List, Dict, Any, Optional
from loguru import logger
from pydantic import BaseModel, Field
from bisheng.linsight.domain.schemas.linsight_schema import UserInputEventSchema
from bisheng.common.errcode.http_error import ServerError
from bisheng.core.cache.redis_manager import get_redis_client_sync, get_redis_client
from bisheng.linsight.domain.models.linsight_execute_task import ExecuteTaskStatusEnum, LinsightExecuteTaskDao, \
LinsightExecuteTask
from bisheng.linsight.domain.models.linsight_session_version import LinsightSessionVersion, LinsightSessionVersionDao
from bisheng.utils.util import retry_async
from bisheng_langchain.linsight.event import BaseEvent
class MessageEventType(str, Enum):
"""
Message event type enumeration
"""
# tasks starting
TASK_START = "task_start"
# Generate Tasks
TASK_GENERATE = "task_generate"
# Task status update
TASK_STATUS_UPDATE = "task_status_update"
# User input
USER_INPUT = "user_input"
# User input complete
USER_INPUT_COMPLETED = "user_input_completed"
# Task Execution Steps
TASK_EXECUTE_STEP = "task_execute_step"
# Mission-End
TASK_END = "task_end"
# Error Message
ERROR_MESSAGE = "error_message"
# Final Result
FINAL_RESULT = "final_result"
# Mission terminated
TASK_TERMINATED = "task_terminated"
class MessageData(BaseModel):
"""Message Data Model"""
event_type: MessageEventType
data: Dict[str, Any]
timestamp: Optional[float] = Field(default_factory=lambda: asyncio.get_event_loop().time())
class LinsightStateMessageManager:
"""Idea State and Message Manager"""
# Class Constant
DEFAULT_EXPIRATION = 3600
DEFAULT_RETRY_ATTEMPTS = 3
DEFAULT_RETRY_DELAY = 1
KEY_PREFIX = "linsight_tasks:"
def __init__(self, session_version_id: str):
"""
Initializing the Inspiration State and Message Manager
Args:
session_version_id: Session VersionID
"""
self._session_version_id = session_version_id
self._redis_client = get_redis_client_sync()
self._logger = logger
# Redis keyManaging
self._key_prefix = f"{self.KEY_PREFIX}{session_version_id}:"
self._keys = {
'session_version_info': f"{self._key_prefix}session_version_info",
'messages': f"{self._key_prefix}messages",
'execution_tasks': f"{self._key_prefix}execution_tasks:"
}
async def _handle_redis_operation(self, operation, *args, **kwargs):
"""
ImpuestoRedisOperation error handling
Args:
operation: RedisAction Function
*args: Position JSON
**kwargs: Keyword Parameters
Returns:
Operating result
Raises:
Exception: RedisException thrown when operation failed
"""
try:
return await operation(*args, **kwargs)
except Exception as e:
self._logger.error(f"Redis operation failed: {e}")
raise
@retry_async(num_retries=DEFAULT_RETRY_ATTEMPTS, delay=DEFAULT_RETRY_DELAY)
async def push_message(self, message: MessageData) -> None:
"""
Push messages toRedisin the list
Args:
message: Message Model
"""
self._logger.info(f"Pushing message: {message.event_type}")
await self._handle_redis_operation(
self._redis_client.arpush,
self._keys['messages'],
message.model_dump()
)
self._logger.info(f"Message pushed: {message.event_type}")
@retry_async(num_retries=DEFAULT_RETRY_ATTEMPTS, delay=DEFAULT_RETRY_DELAY)
async def pop_message(self) -> Optional[MessageData]:
"""
FROMRedisA message pops up in the list
Returns:
Message Model orNone
"""
try:
message_data = await self._redis_client.ablpop(self._keys['messages'])
if message_data:
return MessageData.model_validate(message_data)
return None
except Exception as e:
self._logger.error(f"Failed to pop message: {e}")
raise e
@retry_async(num_retries=DEFAULT_RETRY_ATTEMPTS, delay=DEFAULT_RETRY_DELAY)
async def set_session_version_info(self, session_version_model) -> None:
"""
Set session version information
Args:
session_version_model: Session Version Model
"""
# Using Transactions to Ensure Data Consistency
async with self._redis_client.async_pipeline() as pipe:
try:
# Write database first
await LinsightSessionVersionDao.insert_one(session_version_model)
# Write AgainRedis
await pipe.set(
self._keys['session_version_info'],
pickle.dumps(session_version_model.model_dump()),
ex=self.DEFAULT_EXPIRATION
)
await pipe.execute()
self._logger.info(f"Session version info set: {self._session_version_id}")
except Exception as e:
self._logger.error(f"Failed to set session version info: {e}")
raise
@retry_async(num_retries=DEFAULT_RETRY_ATTEMPTS, delay=DEFAULT_RETRY_DELAY)
async def get_session_version_info(self) -> Optional[LinsightSessionVersion]:
"""
Get session version information
Returns:
Session Version Information Model orNone
"""
try:
info = await self._handle_redis_operation(
self._redis_client.aget,
self._keys['session_version_info']
)
if not info:
self._logger.warning(f"No session version info found for {self._session_version_id}")
session_version_model = await LinsightSessionVersionDao.get_by_id(self._session_version_id)
await self.set_session_version_info(session_version_model)
return session_version_model
return LinsightSessionVersion.model_validate(info)
except Exception as e:
self._logger.error(f"Failed to get session version info: {e}")
session_version_model = await LinsightSessionVersionDao.get_by_id(self._session_version_id)
await self.set_session_version_info(session_version_model)
return session_version_model
@retry_async(num_retries=DEFAULT_RETRY_ATTEMPTS, delay=DEFAULT_RETRY_DELAY)
async def set_execution_tasks(self, tasks: List[LinsightExecuteTask]) -> None:
"""
Set Execution Information
Args:
tasks: Execute Task List
"""
if not tasks:
self._logger.warning("No tasks provided to set_execution_tasks")
return
try:
# Batch WriteRedis
tasks_mapping = {
f"{self._keys['execution_tasks']}{task.id}": task.model_dump()
for task in tasks
}
await self._redis_client.amset(tasks_mapping, expiration=self.DEFAULT_EXPIRATION)
except Exception as e:
self._logger.error(f"Failed to set execution tasks: {e}")
raise
@retry_async(num_retries=DEFAULT_RETRY_ATTEMPTS, delay=DEFAULT_RETRY_DELAY)
async def update_execution_task_status(
self,
task_id: str,
status: ExecuteTaskStatusEnum,
**kwargs
) -> Dict[str, Any]:
"""
Update Execution Status
Args:
task_id: TaskID
status: New status
**kwargs: Other update fields
Returns:
Updated task data
"""
try:
# Update database first
task_model = await LinsightExecuteTaskDao.update_by_id(
task_id,
status=status,
**kwargs
)
# Update againRedis
task_key = f"{self._keys['execution_tasks']}{task_id}"
task_data = task_model.model_dump()
await self._redis_client.aset(
task_key,
task_data,
expiration=self.DEFAULT_EXPIRATION
)
self._logger.info(f"Updated task {task_id} status to {status}")
return task_data
except Exception as e:
self._logger.error(f"Failed to update task {task_id} status: {e}")
raise
@retry_async(num_retries=DEFAULT_RETRY_ATTEMPTS, delay=DEFAULT_RETRY_DELAY)
async def set_user_input(self, task_id: str, user_input: str, files: List[Dict[str, str]] = None) -> None:
"""
Set User Input
Args:
task_id: TaskID
user_input: User input
files: Related Documents List
"""
task_key = f"{self._keys['execution_tasks']}{task_id}"
try:
task_model = await self.get_execution_task(task_id)
if not task_model:
raise ValueError(f"Task with ID {task_id} not found in Redis or database.")
user_input_event = task_model.history[-1] if task_model.history else None
if user_input_event is None or user_input_event.get("step_type") != "call_user_input":
raise ValueError(f"Task with ID {task_id} does not support user input.")
user_input_event = UserInputEventSchema.model_validate(user_input_event)
user_input_event.user_input = user_input
user_input_event.files = files
user_input_event.is_completed = True
task_model.history[-1] = user_input_event.model_dump()
task_model.status = ExecuteTaskStatusEnum.USER_INPUT_COMPLETED
# Using Transactions to Ensure Data Consistency
async with self._redis_client.async_pipeline() as pipe:
await pipe.set(task_key, pickle.dumps(task_model.model_dump()), ex=self.DEFAULT_EXPIRATION)
await pipe.execute()
# Database updating
await LinsightExecuteTaskDao.update_by_id(
task_id,
status=ExecuteTaskStatusEnum.USER_INPUT_COMPLETED,
history=task_model.history
)
self._logger.info(f"Set user input for task {task_id}")
except Exception as e:
self._logger.error(f"Failed to set user input for task {task_id}: {e}")
raise ServerError.http_exception()
@retry_async(num_retries=DEFAULT_RETRY_ATTEMPTS, delay=DEFAULT_RETRY_DELAY)
async def get_execution_task(self, task_id: str) -> Optional[LinsightExecuteTask]:
"""
Get task execution information
Args:
task_id: TaskID
Returns:
Execute Task Model orNone
"""
task_key = f"{self._keys['execution_tasks']}{task_id}"
try:
task_data = await self._redis_client.aget(task_key)
if task_data:
return LinsightExecuteTask.model_validate(task_data)
# Automatically close purchase order afterRedisNo data in, fetching from database
task_model = await LinsightExecuteTaskDao.get_by_id(task_id)
await self.set_execution_tasks([task_model])
return task_model
except Exception as e:
self._logger.error(f"Failed to get execution task {task_id}: {e}")
return None
@retry_async(num_retries=DEFAULT_RETRY_ATTEMPTS, delay=DEFAULT_RETRY_DELAY)
async def add_execution_task_step(self, task_id: str, step: BaseEvent) -> None:
"""
Add Execute Task Step
Args:
task_id: TaskID
step: Execution Steps
"""
task_key = f"{self._keys['execution_tasks']}{task_id}"
try:
task_data = await self.get_execution_task(task_id)
if not task_data:
raise ValueError(f"Task with ID {task_id} not found in Redis.")
task_model = LinsightExecuteTask.model_validate(task_data)
# Initialization History
if task_model.history is None:
task_model.history = []
# Adding new Steps
task_model.history.append(step.model_dump())
# Update Redis and database
await self._redis_client.aset(
task_key,
task_model.model_dump(),
expiration=self.DEFAULT_EXPIRATION
)
await LinsightExecuteTaskDao.update_by_id(
task_id,
history=task_model.history
)
self._logger.info(f"Added step to task {task_id}")
except Exception as e:
self._logger.error(f"Failed to add step to task {task_id}: {e}")
raise
async def get_execution_tasks(self):
"""
Get All Execute Tasks
Returns:
Execute Task List
"""
try:
pattern = f"{self._keys['execution_tasks']}*"
task_keys = await self._redis_client.akeys(pattern)
if not task_keys:
return []
tasks_data = await self._redis_client.amget(task_keys)
tasks = [LinsightExecuteTask.model_validate(task) for task in tasks_data if task]
if not tasks:
tasks = await LinsightExecuteTaskDao.get_by_session_version_id(
session_version_id=self._session_version_id)
return tasks
except Exception as e:
self._logger.error(f"Failed to get execution tasks: {e}")
return []
async def cleanup_session_data(self) -> None:
"""
Cleanup Session RelatedRedisDATA
"""
try:
pattern = f"{self._key_prefix}*"
keys = await self._redis_client.akeys(pattern)
if keys:
await self._redis_client.adelete(*keys)
self._logger.info(f"Cleaned up {len(keys)} keys for session {self._session_version_id}")
except Exception as e:
self._logger.error(f"Failed to cleanup session data: {e}")
raise
async def get_session_stats(self) -> Dict[str, Any]:
"""
Get session statistics
Returns:
Dictionary containing session statistics
"""
try:
stats = {
'session_version_id': self._session_version_id,
'message_count': await self._redis_client.allen(self._keys['messages']),
'has_session_info': await self._redis_client.exists(self._keys['session_version_info']),
'task_count': 0
}
# Calculate number of tasks
pattern = f"{self._keys['execution_tasks']}*"
task_keys = await self._redis_client.akeys(pattern)
stats['task_count'] = len(task_keys)
return stats
except Exception as e:
self._logger.error(f"Failed to get session stats: {e}")
return {'error': str(e)}
# Clean up all session-relatedRedisDATA
@classmethod
async def cleanup_all_sessions(cls) -> None:
"""
Clean up all session-relatedRedisDATA
"""
try:
redis_client = await get_redis_client()
pattern = f"{cls.KEY_PREFIX}*"
keys = await redis_client.async_connection.keys(pattern)
if keys:
await redis_client.async_connection.delete(*keys)
logger.info(f"Cleaned up {len(keys)} keys for all sessions")
except Exception as e:
logger.error(f"Failed to cleanup all session data: {e}")
return
================================================
FILE: src/backend/bisheng/linsight/domain/services/workbench_impl.py
================================================
import asyncio
import json
import os
import uuid
from dataclasses import dataclass
from io import BytesIO
from typing import Dict, List, Optional, AsyncGenerator, Tuple, Any
from urllib.parse import unquote
from e2b.sandbox.filesystem.filesystem import WriteEntry
from fastapi import UploadFile
from langchain_core.tools import BaseTool
from loguru import logger
from bisheng.api.services.knowledge_imp import decide_vectorstores, async_read_chunk_text
from bisheng.linsight.domain.services.sop_manage import SOPManageService
from bisheng.api.services.workstation import WorkStationService
from bisheng.linsight.domain.schemas.linsight_schema import LinsightQuestionSubmitSchema, DownloadFilesSchema, \
SubmitFileSchema
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum, ApplicationTypeEnum
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode import BaseErrorCode
from bisheng.common.errcode.http_error import UnAuthorizedError
from bisheng.common.errcode.linsight import LinsightToolInitError, LinsightBishengLLMError, LinsightGenerateSopError
from bisheng.common.schemas.telemetry.event_data_schema import NewMessageSessionEventData
from bisheng.common.services import telemetry_service
from bisheng.common.services.config_service import settings
from bisheng.core.cache.redis_manager import get_redis_client
from bisheng.core.cache.utils import save_file_to_folder, CACHE_DIR
from bisheng.core.logger import trace_id_var
from bisheng.core.prompts.manager import get_prompt_manager
from bisheng.core.storage.minio.minio_manager import get_minio_storage
from bisheng.database.models.flow import FlowType
from bisheng.linsight.domain.models.linsight_execute_task import LinsightExecuteTaskDao
from bisheng.linsight.domain.models.linsight_session_version import LinsightSessionVersionDao, SessionVersionStatusEnum, \
LinsightSessionVersion
from bisheng.linsight.domain.models.linsight_sop import LinsightSOPRecord
from bisheng.database.models.session import MessageSessionDao, MessageSession
from bisheng.interface.embeddings.custom import FakeEmbedding
from bisheng.knowledge.domain.models.knowledge import KnowledgeRead, KnowledgeTypeEnum
from bisheng.llm.domain.llm import BishengLLM
from bisheng.llm.domain.services import LLMService
from bisheng.tool.domain.models.gpts_tools import GptsToolsDao
from bisheng.tool.domain.services.executor import ToolExecutor
from bisheng.tool.domain.services.tool import ToolServices
from bisheng.utils import util
from bisheng.utils.util import async_calculate_md5
from bisheng_langchain.linsight.const import ExecConfig
@dataclass
class TaskNode:
"""Task node to build the task tree"""
task: Any # LinsightExecuteTask Objects
children: List['TaskNode'] = None
def __post_init__(self):
if self.children is None:
self.children = []
def to_dict(self) -> Dict:
"""Convert task nodes to dictionary format"""
task_dict = self.task.model_dump()
task_dict['children'] = [child.to_dict() for child in self.children]
return task_dict
class LinsightWorkbenchImpl:
"""LinsightWorkbench Implementation Class"""
# Class Constant
COLLECTION_NAME_PREFIX = "col_linsight_file_"
FILE_INFO_REDIS_KEY_PREFIX = "linsight_file:"
CACHE_EXPIRATION_HOURS = 24
class LinsightError(Exception):
"""LinsightRelated Errors"""
pass
class SearchSOPError(Exception):
"""SOPRetrieve Error"""
def __init__(self, error_class: BaseErrorCode):
super().__init__(error_class.Msg)
self.error_class = error_class
class ToolsInitializationError(Exception):
"""Tool initialization error"""
class BishengLLMError(Exception):
"""Bisheng LLMRelated Errors"""
@classmethod
async def _get_llm(cls, invoke_user_id: int) -> (BishengLLM, Any):
# Get and validate the workbench configuration
workbench_conf = await cls._get_workbench_config()
# BuatLLMInstances
linsight_conf = settings.get_linsight_conf()
llm = await LLMService.get_bisheng_linsight_llm(invoke_user_id=invoke_user_id,
model_id=workbench_conf.task_model.id,
temperature=linsight_conf.default_temperature)
return llm, workbench_conf
@classmethod
async def human_participate_add_file(cls, linsight_session_version: LinsightSessionVersion,
files: List[SubmitFileSchema]) -> Optional[List]:
"""
Adding Files When Manually Involved
:param linsight_session_version:
:param files:
:return:
"""
if not files:
return None
processed_files = await cls._process_submitted_files(files, linsight_session_version.session_id)
if linsight_session_version.files:
linsight_session_version.files.extend(processed_files)
else:
linsight_session_version.files = processed_files
await LinsightSessionVersionDao.insert_one(linsight_session_version)
return processed_files
@classmethod
async def submit_user_question(cls, submit_obj: LinsightQuestionSubmitSchema,
login_user: UserPayload) -> tuple[MessageSession, LinsightSessionVersion]:
"""
Submit user issue and create session
Args:
submit_obj: Submitted Question Objects
login_user: Logged in user information
Returns:
tuple: (Message Session Model, Inspiration Conversation Version Model)
Raises:
LinsightError: When creating a session fails
"""
try:
# Generate Unique SessionsID
chat_id = uuid.uuid4().hex
# Process files (if present)
processed_files = await cls._process_submitted_files(submit_obj.files, chat_id)
# Create a message session
message_session = MessageSession(
chat_id=chat_id,
flow_id=ApplicationTypeEnum.LINSIGHT.value,
flow_name='New Chat',
flow_type=FlowType.LINSIGHT.value,
user_id=login_user.user_id
)
message_session = await MessageSessionDao.async_insert_one(message_session)
# RecordTelemetryJournal
await telemetry_service.log_event(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.NEW_MESSAGE_SESSION,
trace_id=trace_id_var.get(),
event_data=NewMessageSessionEventData(
session_id=message_session.chat_id,
app_id=ApplicationTypeEnum.LINSIGHT.value,
source="platform",
app_name=ApplicationTypeEnum.LINSIGHT.value,
app_type=ApplicationTypeEnum.LINSIGHT
)
)
# Create Ideas Conversation Version
linsight_session_version = LinsightSessionVersion(
session_id=chat_id,
user_id=login_user.user_id,
question=submit_obj.question,
tools=submit_obj.tools,
org_knowledge_enabled=submit_obj.org_knowledge_enabled,
personal_knowledge_enabled=submit_obj.personal_knowledge_enabled,
files=processed_files
)
linsight_session_version = await LinsightSessionVersionDao.insert_one(linsight_session_version)
return message_session, linsight_session_version
except Exception as e:
logger.error(f"Failed to submit user question: {str(e)}")
raise cls.LinsightError(f"Failed to submit user question: {str(e)}")
@classmethod
async def _process_submitted_files(cls, files: Optional[List[SubmitFileSchema]], chat_id: str) -> Optional[List]:
"""
Process Submitted Files
Args:
files: List of files
chat_id: SessionsID
Returns:
List of processed files
"""
if not files:
return None
file_ids = []
for file in files:
if file.parsing_status != "completed":
raise cls.LinsightError(f"file {file.file_name} status is error: {file.parsing_status}")
file_ids.append(file.file_id)
redis_keys = [f"{cls.FILE_INFO_REDIS_KEY_PREFIX}{file_id}" for file_id in file_ids]
redis_client = await get_redis_client()
processed_files = await redis_client.amget(redis_keys)
for file_info in processed_files:
if file_info:
await cls._copy_file_to_session_storage(file_info, chat_id)
return processed_files
@classmethod
async def _copy_file_to_session_storage(cls, file_info: Dict, chat_id: str) -> None:
"""
Copy file to session store
Args:
file_info: File information
chat_id: SessionsID
"""
source_object_name = file_info.get("markdown_file_path")
if source_object_name:
original_filename = file_info.get("original_filename")
markdown_filename = f"{original_filename.rsplit('.', 1)[0]}.md"
new_object_name = f"linsight/{chat_id}/{source_object_name}"
minio_client = await get_minio_storage()
await minio_client.copy_object(
source_object=source_object_name,
dest_object=new_object_name,
source_bucket=minio_client.tmp_bucket,
dest_bucket=minio_client.bucket
)
file_info["markdown_file_path"] = new_object_name
file_info["markdown_filename"] = markdown_filename
@classmethod
async def task_title_generate(cls, question: str, chat_id: str,
login_user: UserPayload) -> Dict:
"""
Generate task title
Args:
question: User Questions
chat_id: SessionsID
login_user: Logged in user information
Returns:
Dictionary with task title
"""
try:
llm, _ = await cls._get_llm(login_user.user_id)
# Buatprompt
prompt = await cls._generate_title_prompt(question)
# Generate task title
task_title = await llm.ainvoke(prompt)
if not task_title.content:
raise ValueError("Failed to generate task title, please check the model configuration or input")
# Update session title
await cls._update_session_title(chat_id, task_title.content)
return {
"task_title": task_title.content,
"chat_id": chat_id,
"error_message": None
}
except Exception as e:
logger.error(f"Failed to generate task title: {str(e)}")
return {
"task_title": "New Chat",
"chat_id": chat_id,
"error_message": str(e)
}
@classmethod
async def _get_workbench_config(cls):
"""Get and validate the workbench configuration"""
workbench_conf = await LLMService.get_workbench_llm()
if not workbench_conf or not workbench_conf.task_model:
raise cls.BishengLLMError("The task has been terminated, please contact the administrator to check the status of the Ideas task execution model")
return workbench_conf
@classmethod
async def _generate_title_prompt(cls, question: str) -> List[Tuple[str, str]]:
"""Generate Title Generateprompt"""
prompt_service = await get_prompt_manager()
prompt_obj = prompt_service.render_prompt(
namespace="gen_title",
prompt_name="linsight",
USER_GOAL=question
)
return [
("system", prompt_obj.prompt.system),
("user", prompt_obj.prompt.user)
]
@classmethod
async def _update_session_title(cls, chat_id: str, title: str) -> None:
"""Update session title"""
session = await MessageSessionDao.async_get_one(chat_id)
if session:
session.flow_name = title
await MessageSessionDao.async_insert_one(session)
@classmethod
async def get_linsight_session_version_list(cls, session_id: str) -> List[LinsightSessionVersion]:
"""
Get a list of Invisible Conversation Versions
Args:
session_id: SessionsID
Returns:
Inspiration Session Version List
"""
return await LinsightSessionVersionDao.get_session_versions_by_session_id(session_id)
@classmethod
async def modify_sop(cls, linsight_session_version_id: str, sop_content: str) -> Dict:
"""
Modify Inspiration Conversation Version ofSOPContents
Args:
linsight_session_version_id: Session VersionID
sop_content: SOPContents
Returns:
Operating result
"""
try:
await LinsightSessionVersionDao.modify_sop_content(
linsight_session_version_id=linsight_session_version_id,
sop_content=sop_content
)
return {"success": True, "message": "modify sop content successfully"}
except Exception as e:
logger.error(f"ChangeSOPContent failed: {str(e)}")
raise cls.LinsightError(str(e))
@classmethod
async def generate_sop(cls, linsight_session_version_id: str,
previous_session_version_id: Optional[str] = None,
feedback_content: Optional[str] = None,
reexecute: bool = False,
login_user: Optional[UserPayload] = None,
knowledge_list: List[KnowledgeRead] = None,
example_sop: Optional[str] = None) -> AsyncGenerator[Dict, None]:
"""
BuatSOPContents
Args:
linsight_session_version_id: Current Session VersionID
previous_session_version_id: Previous Session VersionID
feedback_content: Content of feedback
reexecute: Whether to re-execute
login_user: Logged in user information
knowledge_list: Knowledge Base Columns
example_sop: Ref.sop, incoming when doing the same modelsopContents
Yields:
Date GeneratedSOPContent Events
"""
error_message = None
try:
# Get workbench configuration and session version
session_version = await cls._get_session_version(linsight_session_version_id)
if login_user.user_id != session_version.user_id:
yield UnAuthorizedError().to_sse_event_instance()
return
try:
# BuatLLMand tools
llm, workbench_conf = await cls._get_llm(session_version.user_id)
except Exception as e:
logger.error(f"BuatSOPContent failed: session_version_id={linsight_session_version_id}, error={str(e)}")
raise cls.BishengLLMError(str(e))
tools = await cls._prepare_tools(session_version, llm)
# Preparation History Summary
history_summary = await cls._prepare_history_summary(
reexecute, previous_session_version_id
)
# Create proxy and generateSOP
agent = await cls._create_linsight_agent(session_version, llm, tools, workbench_conf)
if previous_session_version_id:
session_version = await LinsightSessionVersionDao.get_by_id(previous_session_version_id)
content = ""
async for res in cls._generate_sop_content(
agent, session_version, feedback_content, history_summary, knowledge_list, example_sop=example_sop,
login_user=login_user
):
if isinstance(res, cls.SearchSOPError):
yield res.error_class.to_sse_event(event="search_sop_error")
continue
content += res.content
yield {
"event": "generate_sop_content",
"data": res.model_dump_json()
}
# Update session version status and sop content
await LinsightSessionVersionDao.modify_sop_content(
linsight_session_version_id=linsight_session_version_id,
sop_content=content
)
logger.info(f"BuatSOPContent Success: session_version_id={linsight_session_version_id}")
except cls.ToolsInitializationError as e:
logger.exception(
f"Failed to initialize the Inspiration Workbench tool: session_version_id={linsight_session_version_id}, error={str(e)}")
error_message = LinsightToolInitError(exception=e)
except cls.BishengLLMError as e:
logger.exception(f"Bisheng LLMError-free: session_version_id={linsight_session_version_id}, error={str(e)}")
error_message = LinsightBishengLLMError(exception=e)
except Exception as e:
logger.exception(f"BuatSOPContent failed: session_version_id={linsight_session_version_id}, error={str(e)}")
error_message = LinsightGenerateSopError(exception=e)
finally:
if error_message:
session_version = await LinsightSessionVersionDao.get_by_id(linsight_session_version_id)
if session_version:
session_version.sop = f"{error_message.Msg}: {str(error_message.exception)}"
session_version.status = SessionVersionStatusEnum.SOP_GENERATION_FAILED
await LinsightSessionVersionDao.insert_one(session_version)
yield error_message.to_sse_event_instance()
@classmethod
async def _get_session_version(cls, session_version_id: str) -> LinsightSessionVersion:
"""Get session version"""
session_version = await LinsightSessionVersionDao.get_by_id(session_version_id)
if not session_version:
raise cls.LinsightError("Inspiration session version does not exist")
return session_version
@classmethod
async def _prepare_tools(cls, session_version: LinsightSessionVersion,
llm: BishengLLM) -> List[BaseTool]:
"""Preparation Tools List"""
try:
tools = await cls.init_linsight_config_tools(session_version, llm)
root_path = os.path.join(CACHE_DIR, "linsight", session_version.id)
os.makedirs(root_path, exist_ok=True)
linsight_tools = await ToolServices.init_linsight_tools(root_path=root_path)
tools.extend(linsight_tools)
return tools
except Exception as e:
raise cls.ToolsInitializationError(str(e))
@classmethod
async def prepare_file_list(cls, session_version: LinsightSessionVersion) -> List[str]:
"""Prepare File List"""
file_list = []
template_str = """@{filename}File Storage Information:{{'Files stored in a semantic repositoryid':'{file_id}','File storage address':'{markdown}'}}@"""
if not session_version.files:
return file_list
for file in session_version.files:
file_list.append(template_str.format(filename=file['original_filename'],
file_id=file['file_id'],
markdown=f"./{file['markdown_filename']}"))
return file_list
@classmethod
async def prepare_knowledge_list(cls, knowledge_list: list[KnowledgeRead]) -> List[str]:
res = []
if not knowledge_list:
return res
# Check if there is a personal knowledge base
template_str = """@{name}Stored information for:{{'The knowledge base is stored in a semantic repositoryid':'{id}'}}@"""
for one in knowledge_list:
if one.type == KnowledgeTypeEnum.PRIVATE.value:
res.append(template_str.format(name="Personal Knowledge Base", id=one.id))
else:
knowledge_str = template_str.format(name=one.name, id=one.id)
if one.description:
knowledge_str += f",{one.name}is described as{one.description}"
res.append(knowledge_str)
return res
@classmethod
async def _prepare_history_summary(cls, reexecute: bool,
previous_session_version_id: str) -> List[str]:
"""Preparation History Summary"""
history_summary = []
if reexecute and previous_session_version_id:
execute_tasks = await LinsightExecuteTaskDao.get_by_session_version_id(previous_session_version_id)
for task in execute_tasks:
if task.result:
answer = task.result.get("answer", "")
if answer:
history_summary.append(answer)
return history_summary
@classmethod
async def _create_linsight_agent(cls, session_version: LinsightSessionVersion,
llm: BishengLLM, tools: List[BaseTool],
workbench_conf):
"""BuatLinsightAgent"""
from bisheng_langchain.linsight.agent import LinsightAgent
root_path = os.path.join(CACHE_DIR, "linsight", session_version.id[:8])
linsight_conf = settings.get_linsight_conf()
exec_config = ExecConfig(**linsight_conf.model_dump(), debug_id=session_version.id)
return LinsightAgent(
file_dir=root_path,
query=session_version.question,
llm=llm,
tools=tools,
task_mode=workbench_conf.linsight_executor_mode,
exec_config=exec_config,
)
@classmethod
async def _generate_sop_content(cls, agent, session_version: LinsightSessionVersion,
feedback_content: Optional[str],
history_summary: List[str],
knowledge_list: List[KnowledgeRead] = None,
example_sop: str = None,
login_user: Optional[UserPayload] = None
) -> AsyncGenerator:
"""BuatSOPContents"""
file_list = await cls.prepare_file_list(session_version)
knowledge_list = await cls.prepare_knowledge_list(knowledge_list)
if example_sop:
async for res in agent.generate_sop(sop=example_sop, file_list=file_list, knowledge_list=knowledge_list):
yield res
elif feedback_content is None:
# RetrieveSOPTemplates
sop_template, search_sop_error = await SOPManageService.search_sop(
invoke_user_id=login_user.user_id,
query=session_version.question, k=3
)
if search_sop_error:
search_sop_error: BaseErrorCode
logger.error(f"RetrieveSOPTemplate failed: {search_sop_error.Msg}")
yield cls.SearchSOPError(error_class=search_sop_error)
sop_template = "\n\n".join([
f"Examples:\n\n{sop.page_content}"
for sop in sop_template if sop.page_content
])
async for res in agent.generate_sop(sop=sop_template, file_list=file_list, knowledge_list=knowledge_list):
yield res
else:
sop_template = session_version.sop if session_version.sop else ""
async for res in agent.feedback_sop(
sop=sop_template,
feedback=feedback_content,
history_summary=history_summary if history_summary else None,
file_list=file_list,
knowledge_list=knowledge_list
):
yield res
@classmethod
async def get_execute_task_detail(cls, session_version_id: str,
login_user: Optional[UserPayload] = None):
"""
Get task execution details
Args:
session_version_id: Inspiration Conversation VersionID
login_user: Logged in user information
Returns:
Execute Task Detail List
"""
execute_tasks = await LinsightExecuteTaskDao.get_by_session_version_id(session_version_id)
if not execute_tasks:
return []
# 1. Get Level 1 Tasks parent_task_id Yes None Task
root_tasks = [task for task in execute_tasks if task.parent_task_id is None]
# 2. accordingprevious_task_idAND:next_task_idSort first level tasks
def sort_tasks_by_chain(tasks: List[Any]) -> List[Any]:
"""
Sort task list by task chain
previous_task_idYes Noneis the first task,next_task_idYes Noneis the last task.
"""
if not tasks:
return []
# Create a task dictionary for quick lookups
task_dict = {task.id: task for task in tasks}
# Find the start node of the chain (previous_task_id are None)
start_tasks = [task for task in tasks if task.previous_task_id is None]
sorted_tasks = []
for start_task in start_tasks:
# Build task chains from each start node
current_task = start_task
chain = []
while current_task is not None:
chain.append(current_task)
# Setujunext_task_idFind next task
next_task_id = current_task.next_task_id
current_task = task_dict.get(next_task_id) if next_task_id else None
sorted_tasks.extend(chain)
# Dealing with possible orphaned tasks (neitherpreviousNothing, either!nextpointing to them)
processed_ids = {task.id for task in sorted_tasks}
orphan_tasks = [task for task in tasks if task.id not in processed_ids]
sorted_tasks.extend(orphan_tasks)
return sorted_tasks
# Sort first level tasks
sorted_root_tasks = sort_tasks_by_chain(root_tasks)
# 3. Build task tree Use parent_task_id Associate subtasks with parent tasks
def build_task_tree(parent_tasks: List[Any], all_tasks: List[Any]) -> List[TaskNode]:
"""
Build task tree
"""
# Create task mapping
task_map = {task.id: task for task in all_tasks}
# By Parent TaskIDGroup subtasks
children_map = {}
for task in all_tasks:
if task.parent_task_id:
if task.parent_task_id not in children_map:
children_map[task.parent_task_id] = []
children_map[task.parent_task_id].append(task)
def build_node(task: Any) -> TaskNode:
"""Recursively build task nodes"""
node = TaskNode(task=task)
# Get subtasks
child_tasks = children_map.get(task.id, [])
# Sort subtasks
sorted_child_tasks = sort_tasks_by_chain(child_tasks)
# Recursively build child nodes
for child_task in sorted_child_tasks:
child_node = build_node(child_task)
node.children.append(child_node)
return node
# Build Root Node List
root_nodes = []
for parent_task in parent_tasks:
root_node = build_node(parent_task)
root_nodes.append(root_node)
return root_nodes
# Build task tree
task_tree = build_task_tree(sorted_root_tasks, execute_tasks)
# 4. Returns the root node list of the task tree
result = [node.to_dict() for node in task_tree]
return result
@classmethod
async def upload_file(cls, file: UploadFile) -> Dict:
"""
Upload files to the Inspiration Workbench
Args:
file: files uploaded
Returns:
File Information Dictionary
"""
# Generate file information
file_id = uuid.uuid4().hex[:8] # Buat8Bit Unique FileID
# url Code decode The file name
original_filename = unquote(file.filename)
file_extension = original_filename.split('.')[-1] if '.' in original_filename else ''
unique_filename = f"{file_id}.{file_extension}"
# Save file
file_path = await save_file_to_folder(file, 'linsight', unique_filename)
upload_result = {
"file_id": file_id,
"filename": unique_filename,
"original_filename": original_filename,
"file_path": file_path,
"parsing_status": "running",
}
# Cache Result
await cls._cache_parse_result(file_id, upload_result)
return upload_result
@classmethod
async def parse_file(cls, upload_result: Dict, invoke_user_id: int) -> Dict:
"""
Parsing uploaded files
Args:
upload_result: Upload results
invoke_user_id: Call UserID
Returns:
Parsing results
"""
logger.info(f"Start parsing files: {upload_result}")
file_id = upload_result["file_id"]
original_filename = upload_result["original_filename"]
file_path = upload_result["file_path"]
try:
# Get workbench configuration
workbench_conf = await cls._get_workbench_config()
collection_name = f"{cls.COLLECTION_NAME_PREFIX}{workbench_conf.embedding_model.id}"
# Asynchronous execution of file parsing
parse_result = await cls._parse_file(invoke_user_id, file_id, file_path, original_filename,
collection_name, workbench_conf)
# Cache Result
await cls._cache_parse_result(file_id, parse_result)
logger.info(f"File analysis complete: {parse_result}")
except Exception as e:
logger.error(f"File parsing failed: file_id={file_id}, error={str(e)}")
parse_result = {
"file_id": file_id,
"original_filename": original_filename,
"parsing_status": "failed",
"error_message": str(e)
}
await cls._cache_parse_result(file_id, parse_result)
return parse_result
@classmethod
async def _parse_file(cls, invoke_user_id: int, file_id: str, file_path: str, original_filename: str,
collection_name: str, workbench_conf) -> Dict:
"""
Synchronize parsed files
Args:
file_id: Doc.ID
file_path: FilePath
original_filename: Original Filename
collection_name: Set Name
workbench_conf: Workbench configuration
Returns:
Parsing results
"""
# Read file contents
try:
texts, _, parse_type, _ = await async_read_chunk_text(
invoke_user_id=invoke_user_id,
input_file=file_path,
file_name=original_filename,
separator=['\n\n', '\n'],
separator_rule=['after', 'after'],
chunk_size=1000,
chunk_overlap=100,
no_summary=True
)
# BuatmarkdownContents
markdown_content = "\n".join(texts)
markdown_bytes = markdown_content.encode('utf-8')
# SAVINGmarkdownDoc.
markdown_filename = f"{file_id}.md"
minio_client = await get_minio_storage()
await minio_client.put_object_tmp(markdown_filename, markdown_bytes)
markdown_md5 = await async_calculate_md5(markdown_bytes)
# Process vector storage
await cls._process_vector_storage(invoke_user_id, texts, file_id, collection_name, workbench_conf)
return {
"file_id": file_id,
"original_filename": original_filename,
"parsing_status": "completed",
"parse_type": parse_type,
"markdown_filename": markdown_filename,
"markdown_file_path": markdown_filename,
"markdown_file_md5": markdown_md5,
"embedding_model_id": workbench_conf.embedding_model.id,
"collection_name": collection_name
}
except Exception as e:
logger.error(f"File parsing failed: file_id={file_id}, error={str(e)}")
return {
"file_id": file_id,
"original_filename": original_filename,
"parsing_status": "failed",
"error_message": str(e)
}
@classmethod
async def _process_vector_storage(cls, invoke_user_id: int, texts: List[str], file_id: str,
collection_name: str, workbench_conf) -> None:
"""Process vector storage"""
# Buatembeddings
embeddings = await LLMService.get_bisheng_linsight_embedding(model_id=workbench_conf.embedding_model.id,
invoke_user_id=invoke_user_id)
# Create Vector Store
vector_client = decide_vectorstores(collection_name, "Milvus", embeddings)
es_client = decide_vectorstores(collection_name, "ElasticKeywordsSearch", FakeEmbedding())
# Adding Text to Vector Storage
metadatas = [{"file_id": file_id} for _ in texts]
await vector_client.aadd_texts(texts, metadatas=metadatas)
await es_client.aadd_texts(texts, metadatas=metadatas)
@classmethod
async def _cache_parse_result(cls, file_id: str, parse_result: Dict) -> None:
"""Cache Result"""
redis_client = await get_redis_client()
key = f"{cls.FILE_INFO_REDIS_KEY_PREFIX}{file_id}"
await redis_client.aset(
key=key,
value=parse_result,
expiration=60 * 60 * cls.CACHE_EXPIRATION_HOURS
)
@classmethod
async def _init_bisheng_code_tool(cls, config_tool_ids: List[int], file_dir: str, user_id: int) -> List[BaseTool]:
"""
Code interpreter tool for special handling initialization Bi Lift
"""
tools = []
bisheng_code_tool = await GptsToolsDao.aget_tool_by_tool_key(tool_key='bisheng_code_interpreter')
if not bisheng_code_tool or bisheng_code_tool.id not in config_tool_ids:
return tools
# Individual initialization code interpreter tool
config_tool_ids.remove(bisheng_code_tool.id)
code_config = json.loads(bisheng_code_tool.extra) if bisheng_code_tool.extra else {}
if "config" not in code_config:
code_config["config"] = {}
if "local" not in code_config["config"]:
code_config["config"]["local"] = {}
code_config["config"]["local"]["local_sync_path"] = file_dir
if "e2b" not in code_config["config"]:
code_config["config"]["e2b"] = {}
code_config["config"]["e2b"]["local_sync_path"] = file_dir
# Default60Validity period of minutes
code_config["config"]["e2b"]["timeout"] = 3600
code_config["config"]["e2b"]["keep_sandbox"] = True
file_list = []
for root, dirs, files in os.walk(file_dir):
for file in files:
file_path = os.path.join(root, file)
file_list.append(WriteEntry(data=file_path, path=file_path.replace(file_dir, ".")))
code_config["config"]["e2b"]["file_list"] = file_list
bisheng_code_tool.extra = code_config
tools = await ToolExecutor.init_by_tool_id(tool=bisheng_code_tool, app_id=ApplicationTypeEnum.LINSIGHT.value,
app_name=ApplicationTypeEnum.LINSIGHT.value,
app_type=ApplicationTypeEnum.LINSIGHT,
user_id=user_id)
return [tools]
@classmethod
async def init_linsight_config_tools(cls, session_version: LinsightSessionVersion,
llm: BishengLLM, need_upload: bool = False, file_dir: str = None) -> List[
BaseTool]:
"""
Tools for initializing Invis configurations
Args:
session_version: Session Version Model
llm: LLMInstances
need_upload: Do I need to bind a user-uploaded file to the code interpreter?
file_dir: Root directory for user uploaded files
Returns:
Tools List
"""
tools = []
if not session_version.tools:
return tools
# &Extraction toolID
tool_ids = cls._extract_tool_ids(session_version.tools)
# Tools to get workbench configurationsID
ws_config = await WorkStationService.aget_config()
config_tool_ids = cls._extract_tool_ids(ws_config.linsightConfig.tools or [])
# todo Better tool initialization scheme
if need_upload and file_dir:
try:
bisheng_code_tool = await cls._init_bisheng_code_tool(config_tool_ids, file_dir,
user_id=session_version.user_id)
tools.extend(bisheng_code_tool)
except Exception as e:
logger.error(f"Failed to initialize BiSheng code interpreter tool: session_version_id={session_version.id}, error={str(e)}")
# Filter Effective ToolsID
valid_tool_ids = [tid for tid in tool_ids if tid in config_tool_ids]
# Initialization Tools
if valid_tool_ids:
tools.extend(await ToolExecutor.init_by_tool_ids(valid_tool_ids, app_id=ApplicationTypeEnum.LINSIGHT.value,
app_name=ApplicationTypeEnum.LINSIGHT.value,
app_type=ApplicationTypeEnum.LINSIGHT,
user_id=session_version.user_id))
return tools
@classmethod
def _extract_tool_ids(cls, tools: List[Dict]) -> List[int]:
"""
Extract Tools from Tool ConfigurationID
Args:
tools: Tool Configuration List
Returns:
ToolsIDVertical
"""
tool_ids = []
for tool in tools:
if tool.get("children"):
tool_ids.extend(int(child.get("id")) for child in tool["children"] if child.get("id"))
return tool_ids
@classmethod
async def feedback_regenerate_sop_task(cls, session_version_model: LinsightSessionVersion,
feedback: str) -> None:
"""
Regenerate from feedbackSOPTask
Args:
session_version_model: Inspiration Conversation Version Model
feedback: Content of feedback
"""
try:
file_list = await cls.prepare_file_list(session_version_model)
# BuatLLMand tools
llm, workbench_conf = await cls._get_llm(session_version_model.user_id)
tools = await cls._prepare_tools(session_version_model, llm)
# Get a summary of your history
history_summary = await cls._get_history_summary(session_version_model.id)
# Create proxy and generateSOP
agent = await cls._create_linsight_agent(session_version_model, llm, tools, workbench_conf)
sop_content = ""
sop_template = session_version_model.sop or ''
async for res in agent.feedback_sop(
sop=sop_template,
feedback=feedback,
history_summary=history_summary if history_summary else None,
file_list=file_list
):
sop_content += res.content
# sopWrite it down on the record sheet, thissopThere is no need to associate sessions because there is no need to update scores
await SOPManageService.add_sop_record(LinsightSOPRecord(
name=session_version_model.title,
description=None,
user_id=session_version_model.user_id,
content=sop_content,
))
except cls.ToolsInitializationError as e:
logger.exception(f"Failed to initialize the Inspiration Workbench tool: session_version_id={session_version_model.id}, error={str(e)}")
except Exception as e:
logger.exception(f"Feedback regenerationSOPMisi Gagal: session_version_id={session_version_model.id}, error={str(e)}")
@classmethod
async def _get_history_summary(cls, session_version_id: str) -> List[str]:
"""Get a summary of your history"""
history_summary = []
execute_tasks = await LinsightExecuteTaskDao.get_by_session_version_id(session_version_id)
for task in execute_tasks:
if task.result:
answer = task.result.get("answer", "")
if answer:
history_summary.append(answer)
return history_summary
@classmethod
async def download_file(cls, file_info: DownloadFilesSchema) -> Tuple[str, bytes]:
"""Download individual files"""
minio_client = await get_minio_storage()
object_name = file_info.file_url
object_name = object_name.replace(f"/{minio_client.bucket}/", "")
try:
bytes_io = BytesIO()
file_byte = await minio_client.get_object(bucket_name=minio_client.bucket,
object_name=object_name)
bytes_io.write(file_byte)
bytes_io.seek(0)
return file_info.file_name, bytes_io.getvalue()
except Exception as e:
logger.error(f"Download failed {object_name}: {e}")
return object_name, b''
@classmethod
async def batch_download_files(cls, file_info_list: List[DownloadFilesSchema]) -> bytes:
"""
Batch Download Files
Args:
file_info_list: File Information List
Returns:
List containing file download information
"""
# Batch Download Files
download_tasks = [cls.download_file(file_info) for file_info in file_info_list]
results = await asyncio.gather(*download_tasks)
# Filter download failed files
successful_files = [res for res in results if res[1]]
if not successful_files:
raise ValueError("File not downloaded successfully, could not be generatedZIP")
zip_bytes = util.bytes_to_zip(successful_files)
return zip_bytes
================================================
FILE: src/backend/bisheng/linsight/domain/task_exec.py
================================================
import asyncio
import os
import shutil
import traceback
from contextlib import asynccontextmanager
from datetime import datetime
from typing import Optional, List, Dict, Callable
from langchain_core.language_models import BaseChatModel
from loguru import logger
from bisheng.api.services.invite_code.invite_code import InviteCodeService
from bisheng.linsight.domain.services.workbench_impl import LinsightWorkbenchImpl
from bisheng.linsight.domain.schemas.linsight_schema import UserInputEventSchema
from bisheng.common.services.config_service import settings
from bisheng.core.cache.utils import create_cache_folder_async, CACHE_DIR
from bisheng.core.external.http_client.http_client_manager import get_http_client
from bisheng.core.logger import trace_id_var
from bisheng.core.storage.minio.minio_manager import get_minio_storage
from bisheng.linsight.domain.models.linsight_execute_task import LinsightExecuteTaskDao, ExecuteTaskStatusEnum, \
ExecuteTaskTypeEnum, LinsightExecuteTask
from bisheng.linsight.domain.models.linsight_session_version import LinsightSessionVersionDao, SessionVersionStatusEnum, \
LinsightSessionVersion
from bisheng.linsight.domain import utils as linsight_execute_utils
from bisheng.linsight.domain.services.state_message_manager import LinsightStateMessageManager, MessageData, MessageEventType
from bisheng.llm.domain.services import LLMService
from bisheng.tool.domain.services.tool import ToolServices
from bisheng_langchain.linsight.agent import LinsightAgent
from bisheng_langchain.linsight.const import TaskStatus, ExecConfig
from bisheng_langchain.linsight.event import NeedUserInput, GenerateSubTask, ExecStep, TaskStart, TaskEnd, BaseEvent
class TaskExecutionError(Exception):
"""Task Execution Exception"""
pass
class UserTerminationError(Exception):
"""User proactively terminates exceptions"""
pass
# Task already in progress Exception
class TaskAlreadyInProgressError(Exception):
"""Task already in progress Exception"""
pass
class LinsightWorkflowTask:
"""Workflow Task Executor - Responsible for managing the entire mission lifecycle"""
USER_TERMINATION_CHECK_INTERVAL = 2
def __init__(self):
self._state_manager: Optional[LinsightStateMessageManager] = None
self._is_terminated = False
self._termination_task: Optional[asyncio.Task] = None
self._final_result: Optional[TaskEnd] = None
self.file_dir: Optional[str] = None
self.session_version_id: Optional[str] = None
self.step_event_extra_files: List[Dict] = [] # File information for storing additional processing of step events
self.llm: Optional[BaseChatModel] = None # For storageLLMInstances
# ==================== Resource Management ====================
@asynccontextmanager
async def _managed_execution(self):
"""Context manager for managing execution resources"""
self._state_manager = LinsightStateMessageManager(self.session_version_id)
session_model = await self._get_session_model(self.session_version_id)
# Check session status
if await self._is_session_in_progress(session_model):
raise TaskAlreadyInProgressError("Task already in progress")
try:
# Start Termination Monitoring
await self._start_termination_monitor(session_model)
# Initialization file directory
self.file_dir = await self._init_file_directory(session_model)
yield session_model
finally:
await self._cleanup_resources()
async def _cleanup_resources(self):
"""Clean up resources"""
try:
# Stop Terminating Monitoring
await self._stop_termination_monitor()
# Clean File Directory
if self.file_dir and os.path.exists(self.file_dir):
shutil.rmtree(self.file_dir, ignore_errors=True)
except Exception as e:
logger.error(f"Resource cleanup failed: {e}")
# ==================== Core Execution Logic ====================
async def async_run(self, session_version_id: str) -> None:
"""Asynchronous Task Execution Entry"""
self.session_version_id = session_version_id
trace_id_var.set(self.session_version_id)
logger.info(f"Start the task: session_version_id={self.session_version_id}")
try:
async with self._managed_execution() as session_model:
await self._execute_workflow(session_model)
except UserTerminationError:
logger.info(f"Task was actively terminated by the user: session_version_id={self.session_version_id}")
except TaskAlreadyInProgressError:
logger.warning(f"Task already in progress: session_version_id={self.session_version_id}")
except TaskExecutionError as e:
logger.error(f"Task execution failed: : session_version_id={self.session_version_id}")
await self._handle_execution_error(e)
except Exception as e:
logger.error(f"Unknown error: session_version_id={self.session_version_id}, error={e}")
await self._handle_execution_error(e)
async def _execute_workflow(self, session_model: LinsightSessionVersion):
"""Execute the core logic of the workflow"""
# Update session status to in progress
await self._update_session_status(session_model, SessionVersionStatusEnum.IN_PROGRESS)
# Initialization Execution Component
self.llm = await self._get_llm(invoke_user_id=session_model.user_id)
tools = await self._generate_tools(session_model)
try:
# Build Tool List
linsight_tools = await ToolServices.init_linsight_tools(root_path=self.file_dir)
tools.extend(linsight_tools)
# Create agent
agent = await self._create_agent(session_model, tools)
# Check if terminated during initialization
self._check_termination()
# Generate and save tasks
task_info = await agent.generate_task(session_model.sop)
await self._save_task_info(session_model, task_info)
# Do Task
success = await self._execute_agent_tasks(agent, task_info, session_model)
finally:
# Clean the sandbox of the code interpreter
for one in tools:
if one.name == "bisheng_code_interpreter":
one.close()
break
if success:
await self._handle_task_completion(session_model)
else:
await self._handle_user_termination(session_model)
raise UserTerminationError("Task terminated by user")
# ==================== Session and State Management ====================
async def _get_session_model(self, session_version_id: str) -> LinsightSessionVersion:
"""Get session model"""
try:
return await LinsightSessionVersionDao.get_by_id(session_version_id)
except Exception as e:
raise TaskExecutionError(f"Failed to get session model: {e}")
async def _is_session_in_progress(self, session_model: LinsightSessionVersion) -> bool:
"""Check if the session is already in progress"""
if session_model.status == SessionVersionStatusEnum.IN_PROGRESS:
logger.info(f"Sessions {session_model.id} Already in progress")
return True
return False
async def _update_session_status(self, session_model: LinsightSessionVersion, status: SessionVersionStatusEnum):
"""Update session status"""
session_model.status = status
await self._state_manager.set_session_version_info(session_model)
# ==================== Component Initialization ====================
async def _get_llm(self, invoke_user_id: int) -> BaseChatModel:
"""DapatkanLLMInstances"""
try:
workbench_conf = await LLMService.get_workbench_llm()
linsight_conf = settings.get_linsight_conf()
return await LLMService.get_bisheng_linsight_llm(invoke_user_id=invoke_user_id,
model_id=workbench_conf.task_model.id,
temperature=linsight_conf.default_temperature)
except Exception as e:
raise TaskExecutionError("The task has been terminated, please contact the administrator to check the status of the Ideas task execution model")
@create_cache_folder_async
async def _init_file_directory(self, session_model: LinsightSessionVersion) -> str:
"""Initialization file directory"""
file_dir = os.path.join(CACHE_DIR, "linsight", session_model.id[:8])
file_dir = os.path.normpath(file_dir)
os.makedirs(file_dir, exist_ok=True)
if not session_model.files:
return file_dir
# Concurrent downloads
download_tasks = [
self._download_file(file_info, file_dir)
for file_info in session_model.files
]
results = await asyncio.gather(*download_tasks, return_exceptions=True)
# Record Download Failed Files
for i, result in enumerate(results):
if isinstance(result, Exception):
file_name = os.path.basename(session_model.files[i]["markdown_file_path"])
logger.error(f"This content failed to load {file_name}: {result}")
return file_dir
async def _download_file(self, file_info: dict, target_dir: str) -> str:
"""Download individual files"""
object_name = file_info["markdown_file_path"]
file_name = file_info.get("markdown_filename", os.path.basename(object_name))
file_path = os.path.join(target_dir, file_name)
minio_client = await get_minio_storage()
try:
file_url = await minio_client.get_share_link(object_name, clear_host=False)
http_client = await get_http_client()
with open(file_path, "wb") as f:
async for chunk in http_client.stream(method="GET", url=str(file_url)):
f.write(chunk)
if not os.path.exists(file_path) or os.path.getsize(file_path) == 0:
raise ValueError(f"File download failed or empty: {object_name}")
return file_path
except Exception as e:
logger.error(f"Download failed {object_name}: {e}")
raise
async def _generate_tools(self, session_model: LinsightSessionVersion) -> List:
"""Build Tool List"""
if not session_model.tools:
return []
return await LinsightWorkbenchImpl.init_linsight_config_tools(session_version=session_model, llm=self.llm,
need_upload=True, file_dir=self.file_dir)
async def _create_agent(self, session_model: LinsightSessionVersion, tools: List) -> LinsightAgent:
workbench_conf = await LLMService.get_workbench_llm()
linsight_conf = settings.get_linsight_conf()
exec_config = ExecConfig(**linsight_conf.model_dump(), debug_id=session_model.id)
"""Create agent"""
return LinsightAgent(
llm=self.llm,
query=session_model.question,
tools=tools,
file_dir=self.file_dir,
task_mode=workbench_conf.linsight_executor_mode,
exec_config=exec_config,
)
# ==================== Mission Execution ====================
async def _save_task_info(self, session_model: LinsightSessionVersion, task_info: List[dict]):
"""Save Task Information"""
try:
tasks = []
# step_idIt doesn't have to be regular.step_int, FROMagentGot ittask_infoThe order is the execution order
sorted_data = task_info
for index, task_info in enumerate(sorted_data):
previous_task_id = sorted_data[index - 1]["id"] if index > 0 else None
next_task_id = sorted_data[index + 1]["id"] if index < len(sorted_data) - 1 else None
task = LinsightExecuteTask(
id=task_info["id"],
parent_task_id=task_info.get("parent_id"),
session_version_id=session_model.id,
previous_task_id=previous_task_id,
next_task_id=next_task_id,
task_type=ExecuteTaskTypeEnum.COMPOSITE if task_info.get(
"node_loop") else ExecuteTaskTypeEnum.SINGLE,
task_data=task_info
)
tasks.append(task)
await LinsightExecuteTaskDao.batch_create_tasks(tasks)
await self._state_manager.set_execution_tasks(tasks)
# Push Generate Task Message
await self._state_manager.push_message(MessageData(
event_type=MessageEventType.TASK_GENERATE,
data={"tasks": [task.model_dump() for task in tasks]}
))
logger.info(f"Set {len(tasks)} execution tasks")
except Exception as e:
logger.error(f"Failed to save task information: {e}")
raise TaskExecutionError(f"Failed to save task information: {e}")
async def _execute_agent_tasks(self, agent, task_info: List[dict],
session_model) -> bool:
"""Perform agent tasks - Modified version supports user termination"""
async def agent_execution():
"""Agent performs a task"""
file_list = await LinsightWorkbenchImpl.prepare_file_list(session_model)
async for event in agent.ainvoke(task_info, session_model.sop, file_list=file_list):
await self._handle_event(agent, event, session_model)
return True
async def termination_monitor():
"""End monitoring task"""
while True:
await asyncio.sleep(0.5) # Qn,0.5Seconds checked once
self._check_termination()
try:
# Create two concurrent tasks
# Preparing user-uploaded files
agent_task = asyncio.create_task(agent_execution())
monitor_task = asyncio.create_task(termination_monitor())
# Waiting for any one task to be completed
done, pending = await asyncio.wait(
[agent_task, monitor_task],
return_when=asyncio.FIRST_COMPLETED
)
# Cancel Incomplete Task
for task in pending:
task.cancel()
try:
await task
except asyncio.CancelledError:
logger.debug("Successfully unsuspended task")
pass
# Review completed task results
for task in done:
if task.exception():
if isinstance(task.exception(), UserTerminationError):
logger.info("Agent task terminated by user")
return False
else:
raise task.exception()
else:
# If the agent task is completed normally
if task == agent_task:
logger.info("The agent task is completed normally")
return True
return True
except UserTerminationError:
logger.info("Agent task terminated by user")
return False
except Exception as e:
logger.error(f"task_exec_error {traceback.format_exc()}")
raise TaskExecutionError(f"Agent task execution failed: {e}")
# ==================== Event processing ====================
async def _handle_event(self, agent: LinsightAgent, event: BaseEvent, session_model: LinsightSessionVersion):
"""handle incidents"""
event_handlers: Dict[type[BaseEvent], Callable] = {
GenerateSubTask: self._handle_generate_subtask,
TaskStart: self._handle_task_start,
TaskEnd: self._handle_task_end,
NeedUserInput: self._handle_need_user_input,
ExecStep: self._handle_exec_step,
}
handler = event_handlers.get(type(event))
if handler:
await handler(agent, event, session_model)
else:
logger.warning(f"Unknown event type: {type(event)}")
async def _handle_generate_subtask(self, agent: LinsightAgent, event: GenerateSubTask,
session_model: LinsightSessionVersion):
"""Handle build subtask events"""
await self._save_task_info(session_model, event.subtask)
logger.debug(f"Generate subtasks: {event}")
async def _handle_task_start(self, agent: LinsightAgent, event: TaskStart, session_model: LinsightSessionVersion):
"""Handle task start events"""
task_data = await self._state_manager.update_execution_task_status(
task_id=event.task_id,
status=ExecuteTaskStatusEnum.IN_PROGRESS
)
await self._state_manager.push_message(
MessageData(event_type=MessageEventType.TASK_START, data=task_data)
)
async def _handle_task_end(self, agent: LinsightAgent, event: TaskEnd, session_model: LinsightSessionVersion):
"""Handle task end events"""
status = ExecuteTaskStatusEnum.SUCCESS if event.status == TaskStatus.SUCCESS.value else ExecuteTaskStatusEnum.FAILED
task_data = await self._state_manager.update_execution_task_status(
task_id=event.task_id,
status=status,
result={"answer": event.answer},
task_data=event.data
)
await self._state_manager.push_message(
MessageData(event_type=MessageEventType.TASK_END, data=task_data)
)
# Save Final Result
self._final_result = event
async def _handle_need_user_input(self, agent: LinsightAgent, event: NeedUserInput,
session_model: LinsightSessionVersion):
"""Handle events that require user input"""
asyncio.create_task(self._wait_for_user_input(agent, event))
async def _handle_exec_step(self, agent: LinsightAgent, event: ExecStep, session_model: LinsightSessionVersion):
"""Handle execution step events"""
# Additional Processing Step Events
event = await linsight_execute_utils.handle_step_event_extra(event, self)
await self._state_manager.add_execution_task_step(event.task_id, step=event)
await self._state_manager.push_message(
MessageData(event_type=MessageEventType.TASK_EXECUTE_STEP, data=event.model_dump())
)
async def _wait_for_user_input(self, agent: LinsightAgent, event: NeedUserInput):
"""Waiting for user input"""
try:
await self._state_manager.add_execution_task_step(event.task_id, step=event)
# Update status to wait for user input
await self._state_manager.update_execution_task_status(
event.task_id,
status=ExecuteTaskStatusEnum.WAITING_FOR_USER_INPUT,
)
# Push user input events
await self._state_manager.push_message(
MessageData(event_type=MessageEventType.USER_INPUT, data=event.model_dump())
)
# Wait for user input to complete
task_model = await self._wait_for_input_completion(event.task_id)
user_input_event = task_model.history[-1] if task_model.history else None
if user_input_event is None or user_input_event.get("step_type") != "call_user_input":
raise TaskExecutionError(f"Task {event.task_id} No user input events found while waiting for user input")
user_input_event = UserInputEventSchema.model_validate(user_input_event)
# Check if the user uploaded a file
if user_input_event.files:
# Concurrent downloads
download_tasks = [
self._download_file(file_info, self.file_dir)
for file_info in user_input_event.files
]
results = await asyncio.gather(*download_tasks, return_exceptions=True)
# Record Download Failed Files
for i, result in enumerate(results):
if isinstance(result, Exception):
file_name = os.path.basename(user_input_event.files[i]["markdown_file_path"])
logger.error(f"This content failed to load {file_name}: {result}")
user_input_event.user_input += f"\n\nUploaded File:\n" + \
"\n".join([f"- {file}" for file in results if
not isinstance(file, Exception)])
# Push Input Completion Event
await self._state_manager.push_message(
MessageData(event_type=MessageEventType.USER_INPUT_COMPLETED, data=task_model.model_dump())
)
# Resume Task
await agent.continue_task(event.task_id, user_input_event.user_input)
except Exception as e:
raise TaskExecutionError(f"Failed to wait for user input task_id={event.task_id}: {e}")
async def _wait_for_input_completion(self, task_id: str) -> Optional[LinsightExecuteTask]:
"""Wait for user input to complete"""
while True:
self._check_termination()
task_model = await self._state_manager.get_execution_task(task_id)
if task_model is None:
raise ValueError(f"Task {task_id} Does not exist")
if task_model.status == ExecuteTaskStatusEnum.USER_INPUT_COMPLETED:
return task_model
await asyncio.sleep(1)
# ==================== Terminate Inspection ====================
def _check_termination(self):
"""Check if terminated"""
if self._is_terminated:
logger.info("Termination signal detected, ready to terminate agent task")
raise UserTerminationError("Task terminated by user")
async def _start_termination_monitor(self, session_model: LinsightSessionVersion):
"""Start Termination Monitoring"""
async def monitor():
while not self._is_terminated:
try:
if await self._check_user_termination():
self._is_terminated = True
break
await asyncio.sleep(self.USER_TERMINATION_CHECK_INTERVAL)
except Exception as e:
logger.error(f"Terminate Monitoring Exception: {e}")
await asyncio.sleep(self.USER_TERMINATION_CHECK_INTERVAL)
self._termination_task = asyncio.create_task(monitor())
async def _stop_termination_monitor(self):
"""Stop Terminating Monitoring"""
if self._termination_task and not self._termination_task.done():
self._termination_task.cancel()
try:
await self._termination_task
except asyncio.CancelledError:
pass
async def _check_user_termination(self) -> bool:
"""Check if the user is actively terminating"""
if self._is_terminated:
return True
try:
current_session = await self._state_manager.get_session_version_info()
return (current_session and
current_session.status == SessionVersionStatusEnum.TERMINATED)
except Exception as e:
logger.error(f"Failed to check user termination status: {e}")
return False
async def _handle_user_termination(self, session_model: LinsightSessionVersion):
"""Handling user unsolicited termination"""
logger.info(f"Handling User Termination {session_model.id}")
session_model.status = SessionVersionStatusEnum.TERMINATED
session_model.output_result = {"answer": "Task has been actively stopped by the user"}
await self._state_manager.set_session_version_info(session_model)
# Set all tasks to failed
await self._set_tasks_failed()
# Push termination message
await self._state_manager.push_message(
MessageData(
event_type=MessageEventType.TASK_TERMINATED,
data={
"message": "Task has been actively stopped by the user",
"session_id": session_model.id,
"terminated_at": datetime.now().isoformat()
}
)
)
# ==================== Task Completion Processing ====================
async def _handle_task_completion(self, session_model: LinsightSessionVersion):
"""Processing Task Completion"""
if not self._final_result:
logger.error("No final task results found")
return
if self._final_result.status == TaskStatus.SUCCESS.value:
await self._handle_task_success(session_model)
else:
await self._handle_task_failure(session_model, "Task execution failed: ")
async def _handle_task_success(self, session_model: LinsightSessionVersion):
"""Processing task successful"""
try:
# Read File Directory File Details
file_details = await linsight_execute_utils.read_file_directory(self.file_dir)
logger.debug(f"Read File Directory File Details: {file_details}")
final_result_files = await linsight_execute_utils.get_final_result_file(
session_model=session_model,
file_details=file_details,
answer=self._final_result.answer
)
execution_tasks = await self._state_manager.get_execution_tasks()
all_from_session_files = await linsight_execute_utils.get_all_files_from_session(
execution_tasks=execution_tasks, file_details=file_details)
# Update session status
session_model.status = SessionVersionStatusEnum.COMPLETED
session_model.output_result = {
"answer": self._final_result.answer,
"final_files": final_result_files,
"all_from_session_files": all_from_session_files
}
# Save session information and push messages
await self._state_manager.set_session_version_info(session_model)
await self._state_manager.push_message(
MessageData(
event_type=MessageEventType.FINAL_RESULT,
data=session_model.model_dump()
)
)
logger.info(f"Task completed successfully, processed {len(final_result_files)} files")
except Exception as e:
logger.error(f"An error occurred while processing the task successfully: {e}")
raise TaskExecutionError(f"An error occurred while processing the task successfully: {e}")
# Modify All Task Failure Processing Logic
async def _set_tasks_failed(self):
"""Set all tasks to failed"""
try:
# Get All Execute Tasks
execution_tasks = await self._state_manager.get_execution_tasks()
for task in execution_tasks:
# Update each task status to Terminated
if task.status not in [ExecuteTaskStatusEnum.TERMINATED, ExecuteTaskStatusEnum.SUCCESS,
ExecuteTaskStatusEnum.FAILED]:
await self._state_manager.update_execution_task_status(task_id=task.id,
status=ExecuteTaskStatusEnum.TERMINATED)
except Exception as e:
logger.warning(f"Error setting task failed: {e}")
async def _handle_task_failure(self, session_model: LinsightSessionVersion, error_msg: str):
"""Processing task failed"""
session_model.status = SessionVersionStatusEnum.FAILED
session_model.output_result = {"error_message": error_msg}
await self._state_manager.set_session_version_info(session_model)
# Set all tasks to failed
await self._set_tasks_failed()
await self._state_manager.push_message(
MessageData(event_type=MessageEventType.ERROR_MESSAGE, data={"error": error_msg})
)
system_config = await settings.aget_all_config()
# DapatkanLinsight_invitation_code
linsight_invitation_code = system_config.get("linsight_invitation_code", False)
if linsight_invitation_code:
await InviteCodeService.revoke_invite_code(user_id=session_model.user_id)
async def _handle_execution_error(self, error: Exception):
"""Processing execution error"""
try:
session_model = await LinsightSessionVersionDao.get_by_id(self.session_version_id)
await self._handle_task_failure(session_model, str(error))
except Exception as e:
logger.error(f"Processing execution error failed: session_version_id={self.session_version_id}, error={e}")
================================================
FILE: src/backend/bisheng/linsight/domain/utils.py
================================================
import asyncio
import os
import uuid
from typing import List, Dict, Any
from loguru import logger
from bisheng.api.services.invite_code.invite_code import InviteCodeService
from bisheng.common.services.config_service import settings
from bisheng.core.cache.redis_manager import get_redis_client_sync
from bisheng.core.storage.minio.minio_manager import get_minio_storage
from bisheng.linsight.domain.models.linsight_execute_task import LinsightExecuteTaskDao, ExecuteTaskStatusEnum, \
LinsightExecuteTask
from bisheng.linsight.domain.models.linsight_session_version import LinsightSessionVersionDao, SessionVersionStatusEnum, \
LinsightSessionVersion
from bisheng.utils import util
from bisheng_langchain.linsight.event import ExecStep
# The corresponding file parameter name of the Inscription file processing tool
local_file_tool_dict = {
"add_text_to_file": "file_path",
"replace_file_lines": "file_path"
}
# Step event extra processing tool corresponding to parameter name,
step_event_extra_tool_dict = {
"add_text_to_file": "file_path",
"replace_file_lines": "file_path",
"read_text_file": "file_path"
}
# Get all manipulated files in a task
async def get_all_files_from_session(execution_tasks: List[LinsightExecuteTask], file_details: List[Dict]) -> \
list[Any] | list[Exception | BaseException | None]:
"""
Get all manipulated files in a session
:param file_details:
:param execution_tasks: Execute Task List
:return: List with file details
"""
# Process File List
all_from_session_files = file_details
# Deduplication
seen = set()
all_from_session_files = [
file for file in all_from_session_files
if (file_tuple := (file["file_name"], file["file_path"], file["file_md5"])) not in seen and not seen.add(
file_tuple)
]
if not all_from_session_files:
logger.warning("No files found that were manipulated in the session")
return []
# Upload files toMinIO
async def upload_file_to_minio(file_info: Dict) -> dict | None:
"""Upload files toMinIOand returns file information"""
try:
minio_client = await get_minio_storage()
object_name = f"linsight/session_files/{execution_tasks[0].session_version_id}/{file_info['file_name']}"
# Use async upload if available, otherwise wrap sync call
await minio_client.put_object(
bucket_name=minio_client.bucket,
object_name=object_name,
file=file_info["file_path"]
)
file_info["file_url"] = object_name
return file_info
except Exception as e:
logger.error(f"Upload files toMinIOKalah {file_info['file_name']}: {e}")
return None
# Upload files in parallel toMinIO
upload_tasks = [
upload_file_to_minio(file_info)
for file_info in all_from_session_files
]
upload_results = await asyncio.gather(*upload_tasks, return_exceptions=True)
# Filter failed uploads
all_from_session_files = [
result for result in upload_results
if result is not None and not isinstance(result, Exception)
]
# Record failed uploads
failed_uploads = [
result for result in upload_results
if isinstance(result, Exception)
]
if failed_uploads:
logger.warning(f"Some files failed to upload: {len(failed_uploads)} files")
logger.debug(
f"Number of files manipulated in the session: {len(all_from_session_files)}Document Description: {all_from_session_files}")
return all_from_session_files
# Read File Directory File Details
async def read_file_directory(file_dir: str) -> List[Dict[str, str]]:
"""Read file details in file directory"""
if not file_dir or not os.path.exists(file_dir):
return []
files = util.read_files_in_directory(file_dir)
file_details = []
for file in files:
file_md5 = await util.async_calculate_md5(file)
file_details.append({
"file_name": os.path.basename(file),
"file_path": file,
"file_md5": file_md5,
"file_id": uuid.uuid4().hex[:8] # Generate unique filesID
})
return file_details
# Get the final result file
async def get_final_result_file(session_model: LinsightSessionVersion, file_details, answer) -> List[Dict]:
"""
Get the final result file
:param file_details:
:param session_model: LinsightSessionVersion Model Instance
:param answer: Answer content
:return: List containing final result file information
"""
# Final Result File
final_result_files = []
for file_info in file_details:
file_name: str = file_info["file_name"]
# Determine if the filename isanswerIn String
if file_name in answer:
# If the file name is in the answer, add it to the answer
final_result_files.append({
"file_name": file_name,
"file_path": file_info["file_path"],
"file_md5": file_info["file_md5"],
"file_id": file_info["file_id"]
})
async def upload_file_to_minio(final_file_info: Dict) -> dict | None:
"""Upload files toMinIOand returns file information"""
try:
object_name = f"linsight/final_result/{session_model.id}/{final_file_info['file_name']}"
# Use async upload if available, otherwise wrap sync call
minio_client = await get_minio_storage()
await minio_client.put_object(
bucket_name=minio_client.bucket,
object_name=object_name,
file=final_file_info["file_path"]
)
final_file_info["file_url"] = object_name
return final_file_info
except Exception as e:
logger.error(f"Upload files toMinIOKalah {final_file_info['file_name']}: {e}")
return None
# Upload files toMinIO (Parallel Processing)
if final_result_files:
upload_tasks = [
upload_file_to_minio(final_file_info)
for final_file_info in final_result_files
]
upload_results = await asyncio.gather(*upload_tasks, return_exceptions=True)
# Filter failed uploads
final_result_files = [
result for result in upload_results
if result is not None and not isinstance(result, Exception)
]
# Record failed uploads
failed_uploads = [
result for result in upload_results
if isinstance(result, Exception)
]
if failed_uploads:
logger.warning(f"Some files failed to upload: {len(failed_uploads)} files")
return final_result_files
# Additional Handling of Step Events
async def handle_step_event_extra(event: ExecStep, task_exec_obj) -> ExecStep:
"""
Additional logic for handling step events
:param task_exec_obj:
:param event: Event Object
"""
logger.debug(
f"extra processing of step events,call_id: {event.call_id}, name: {event.name}, status: {event.status}")
try:
if event.status == "end" and event.name in step_event_extra_tool_dict.keys():
file_path = event.params.get(step_event_extra_tool_dict[event.name], "")
if not file_path:
return event
file_name = os.path.basename(file_path)
logger.debug(f"Step event extra processing, filename: {file_name}")
# File path processing
if not os.path.isabs(file_path):
# relative paths, converting to absolute paths
file_path = os.path.join(task_exec_obj.file_dir, file_path)
file_path = os.path.normpath(file_path)
logger.debug(f"Step event extra processing, converted file path: {file_path}")
if not os.path.exists(file_path):
logger.error(f"Step event extra processing, file does not exist: {file_path}")
return event
file_md5 = await util.async_calculate_md5(file_path)
# Determine if the document has already been uploaded
step_event_extra_files = task_exec_obj.step_event_extra_files
if step_event_extra_files:
existing_file = next((f for f in step_event_extra_files if f["file_md5"] == file_md5), None)
if existing_file:
logger.debug(
f"Step event extra processing, file already exists: {existing_file['file_name']}, file_md5: {file_md5}")
event.extra_info["file_info"] = {
"file_name": file_name,
"file_md5": existing_file["file_md5"],
"file_url": existing_file["file_url"]
}
return event
object_name = f"linsight/step_event/{task_exec_obj.session_version_id}/{uuid.uuid4().hex[:8]}.{file_name.split('.')[-1]}"
logger.debug(f"Extra processing of step events, uploading files toMinIO: {object_name}")
minio_client = await get_minio_storage()
# Upload files toMinIO
await minio_client.put_object(
bucket_name=minio_client.bucket,
object_name=object_name,
file=file_path
)
event.extra_info["file_info"] = {
"file_name": file_name,
"file_md5": file_md5,
"file_url": object_name
}
# Add to Step Event Extra File List
task_exec_obj.step_event_extra_files.append(event.extra_info["file_info"])
except Exception as e:
logger.error(f"Step event extra handling exception: {e}")
# When an exception occurs, return to the original event without modification
return event
# Initiateworkerwhen checking for incomplete tasks and terminating
async def check_and_terminate_incomplete_tasks(node_id: str) -> None:
"""
Check for incomplete tasks and terminate
"""
from bisheng.linsight.worker import NodeManager
redis_client = get_redis_client_sync() # Get Redis Client
node_manager = NodeManager(redis_client, node_id) # Get Node Manager Instance
try:
# Get all incomplete tasks from the database
incomplete_tasks = await LinsightSessionVersionDao.get_session_versions_by_status(
status=SessionVersionStatusEnum.IN_PROGRESS
)
if not incomplete_tasks:
return
tasks_to_terminate = []
user_ids_to_rollback = set()
for session in incomplete_tasks:
session_id = session.id
# Check task ownership in Redis
owner_key = f"linsight:task:owner:{session_id}"
owner_node_id = await redis_client.get(owner_key)
should_terminate = False
if not owner_node_id:
# No owned node, task needs to be cleaned up.
should_terminate = True
logger.warning(f"Task {session_id} has no owner in Redis. Marking as failed.")
else:
# There is an owned node, check if the node is alive
is_alive = await node_manager.is_node_alive(owner_node_id)
if not is_alive:
# Node is dead, task needs to be cleaned up.
should_terminate = True
logger.warning(f"Task {session_id} owner {owner_node_id} is dead. Marking as failed.")
else:
# Node is alive, skip cleanup
logger.info(f"Task {session_id} is running on active node {owner_node_id}. Skipping.")
if should_terminate:
tasks_to_terminate.append(session_id)
user_ids_to_rollback.add(session.user_id)
# 3. 批量执行终止操作(只针对筛选出的任务)
if tasks_to_terminate:
await LinsightSessionVersionDao.batch_update_session_versions_status(
session_version_ids=tasks_to_terminate,
status=SessionVersionStatusEnum.FAILED,
output_result={"error_message": "Worker node crash detected"}
)
# 更新 execution task 状态
await LinsightExecuteTaskDao.batch_update_status_by_session_version_id(
session_version_ids=tasks_to_terminate,
status=ExecuteTaskStatusEnum.FAILED,
where=(
LinsightExecuteTask.status != ExecuteTaskStatusEnum.SUCCESS,
LinsightExecuteTask.status != ExecuteTaskStatusEnum.FAILED
)
)
logger.warning(f"Terminated {len(tasks_to_terminate)} incomplete tasks due to worker node crash.")
system_config = await settings.aget_all_config()
# DapatkanLinsight_invitation_code
linsight_invitation_code = system_config.get("linsight_invitation_code", False)
# Rollback invite code
if linsight_invitation_code:
for user_id in user_ids_to_rollback:
try:
await InviteCodeService.revoke_invite_code(user_id=user_id)
logger.info(f"User Rolled Back {user_id} Invitation code for")
except Exception as e:
logger.error(f"Rollback user {user_id} Invitation code failed for: {e}")
else:
logger.warning(
"Not enabled in system configuration Linsight Invitation code function, skip rollback operation")
logger.info("Check and terminate incomplete task action completed")
except Exception as e:
logger.error(f"Exception occurred while checking and terminating incomplete tasks: {e}")
return
================================================
FILE: src/backend/bisheng/linsight/worker.py
================================================
import argparse
import asyncio
import logging
import socket
import uuid
from multiprocessing import Process, Manager, set_start_method
from multiprocessing.managers import ValueProxy
from typing import Optional, Union
from bisheng.core.cache.redis_conn import RedisClient
from bisheng.core.cache.redis_manager import get_redis_client_sync
from bisheng.core.logger import set_logger_config
from bisheng.common.services.config_service import settings
from bisheng.linsight.domain.task_exec import LinsightWorkflowTask
logger = logging.getLogger(__name__)
class NodeManager:
_instance = None
def __init__(self, redis_client, node_id):
# generate unique node ID
self.node_id = node_id
self.redis = redis_client
self.heartbeat_key = f"linsight:node:heartbeat:{self.node_id}"
# Heartbeat interval (seconds)
self.interval = 5
# Redis key expiration time (seconds)
self.ttl = 15
@classmethod
def get_instance(cls, node_id):
if not cls._instance:
redis_client = get_redis_client_sync()
cls._instance = cls(redis_client, node_id)
return cls._instance
async def start_heartbeat(self):
"""Start the heartbeat task to indicate node liveness"""
logger.info(f"Starting heartbeat for node: {self.node_id}")
while True:
try:
# set heartbeat key with expiration
await self.redis.aset(self.heartbeat_key, "1", expiration=self.ttl)
except Exception as e:
logger.error(f"Heartbeat failed: {e}")
await asyncio.sleep(self.interval)
async def register_task_ownership(self, session_version_id):
"""Register task ownership to this node"""
key = f"linsight:task:owner:{session_version_id}"
# Set the node ID as the owner of the task with a TTL
await self.redis.aset(key, self.node_id, expiration=86400) # 1 day expiration
async def release_task_ownership(self, session_version_id):
"""Release task ownership"""
key = f"linsight:task:owner:{session_version_id}"
await self.redis.delete(key)
async def is_node_alive(self, target_node_id):
"""Check if a target node is alive based on its heartbeat"""
if not target_node_id:
return False
key = f"linsight:node:heartbeat:{target_node_id}"
exists = await self.redis.exists(key)
return exists > 0
# LinsightQueue queue
class LinsightQueue(object):
def __init__(self, name, namespace, redis):
self.__db: RedisClient = redis
self.key = '%s:%s' % (namespace, name)
async def qsize(self):
return await self.__db.allen(self.key) # Back to queuelistNumber of inner elements
async def put(self, data, timeout=None):
await self.__db.arpush(self.key, data, expiration=timeout) # Add a new element to the far right of the queue
async def get_wait(self, timeout=None):
# Returns the first element of the queue, if empty, wait until an element is queued (the timeout threshold istimeout, if isNonehas been waiting)
item = await self.__db.ablpop(self.key, timeout=timeout)
return item
async def get_nowait(self):
# Returns the first element of the queue directly, if the queue is emptyNone
item = await self.__db.alpop(self.key)
return item
# Get the position of a task's data in the queue
async def index(self, data):
"""
Get the position of a task's data in the queue
:param data: Task Data
:return: Position in queue, starting from 1; if not found, return 0
"""
items = await self.__db.alrange(self.key)
try:
index = items.index(data)
return index + 1 # Return index from1Getting Started
except ValueError:
return 0
# Delete a task data
async def remove(self, data):
"""
Delete a task data from the queue
:param data: Task Data
:return:
"""
await self.__db.alrem(self.key, data) # Remove the specified data from the queue
class ScheduleCenterProcess(Process):
def __init__(self, max_concurrency: ValueProxy = None, node_id: ValueProxy = None):
"""
Dispatch Center Process
:param max_concurrency: Maximum number of concurrent tasks allowed per process
"""
super().__init__()
self.daemon = True
self.queue: Optional[LinsightQueue] = None
# Semaphores
self.semaphore: Optional[asyncio.Semaphore] = None
self.node_manager: Optional[NodeManager] = None
self.max_concurrency: Optional[Union[int, ValueProxy]] = max_concurrency
self.node_id: Optional[ValueProxy] = node_id
def handle_task_result(self, task: asyncio.Task):
try:
result = task.result() # If there is an exception, it will be thrown here
except Exception as e:
logger.error(f"Task failed with exception: {e}")
finally:
# Release semaphore
if self.semaphore:
logger.info("Releasing semaphore after task completion.")
self.semaphore.release()
async def async_run(self):
"""
Asynchronous Run Method for Process
:return:
"""
logger.info("ScheduleCenterProcess started...")
# node manager heartbeat
node_manager = self.node_manager or NodeManager.get_instance(self.node_id.value)
while True:
await self.semaphore.acquire() # Acquire semaphore, limit concurrency
try:
session_version_id = await self.queue.get_wait()
if session_version_id is None:
logger.info("No session_version_id found in queue, waiting...")
self.semaphore.release()
continue
# Register task ownership
await node_manager.register_task_ownership(session_version_id)
exec_task = LinsightWorkflowTask()
logger.info(f"Processing session_version_id: {session_version_id} on node {node_manager.node_id}")
task = asyncio.create_task(
exec_task.async_run(session_version_id)
)
task.add_done_callback(self.handle_task_result) # Add callback to handle task completion
except Exception as e:
logger.error(f"Error in ScheduleCenterProcess: {e}")
if self.semaphore:
if self.semaphore._value < self.max_concurrency:
logger.info("Releasing semaphore due to error.")
self.semaphore.release()
continue
def run(self):
"""
Run Process
:return:
"""
set_logger_config(settings.logger_conf)
if self.max_concurrency is not None:
self.max_concurrency = self.max_concurrency.value # Dapatkan ValueProxy Actual value
else:
self.max_concurrency = 32
logger.warning("No max_concurrency provided, using default value of 32.")
self.semaphore = asyncio.Semaphore(self.max_concurrency)
logger.info(f"Semaphore initialized with max concurrency: {self.semaphore._value}")
redis_client = get_redis_client_sync()
self.queue = LinsightQueue('queue', namespace="linsight", redis=redis_client)
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
# 启动心跳
self.node_manager = NodeManager.get_instance(self.node_id.value)
loop.create_task(self.node_manager.start_heartbeat())
# 启动主逻辑
for _ in range(10000): # 你的原始逻辑
try:
loop.run_until_complete(self.async_run())
except Exception as e:
logger.error(f"Unhandled exception in main loop: {e}")
loop.close()
def start_schedule_center_process(worker_num: int = 4, max_concurrency: ValueProxy = None, node_id: ValueProxy = None):
"""
Start Schedule Center Process Workers
:param worker_num: Number of worker processes to start
:param max_concurrency: Maximum number of concurrent tasks allowed per process
:return:
Args:
node_id:
"""
logger.info(f"Starting {worker_num} ScheduleCenterProcess workers...")
if worker_num <= 0:
logger.error("worker_num must be greater than 0")
return
processes = []
for _ in range(worker_num):
process = ScheduleCenterProcess(max_concurrency, node_id)
process.start()
logger.info(f"Started ScheduleCenterProcess with PID: {process.pid}")
processes.append(process)
logger.info(f"Started {len(processes)} ScheduleCenterProcess workers successfully.")
return processes
if __name__ == '__main__':
set_start_method("spawn", force=True) # make sure that people are using the spawn Method Starts a New Process
parser = argparse.ArgumentParser()
parser.add_argument('--worker_num', type=int, default=4, help='Number of processes, defaults to4')
# Maximum number of concurrency for a single process
parser.add_argument('--max_concurrency', type=int, default=32,
help='Maximum number of concurrency for a single process, defaults to32')
args = parser.parse_args()
process_manager = Manager()
node_id = process_manager.Value('s', f"{socket.gethostname()}-{uuid.uuid4().hex[:8]}")
max_concurrency = process_manager.Value('i', args.max_concurrency)
# Check for incomplete tasks and terminate
from bisheng.linsight.domain.utils import check_and_terminate_incomplete_tasks
asyncio.run(check_and_terminate_incomplete_tasks(node_id.value))
try:
processes = start_schedule_center_process(worker_num=args.worker_num,
max_concurrency=max_concurrency,
node_id=node_id)
if processes:
for p in processes:
p.join() # Wait for all processes to end
except KeyboardInterrupt:
logger.info("ScheduleCenterProcess interrupted by user.")
logger.info("Stopping ScheduleCenterProcess workers...")
================================================
FILE: src/backend/bisheng/llm/README.md
================================================
# 模型管理模块
================================================
FILE: src/backend/bisheng/llm/__init__.py
================================================
================================================
FILE: src/backend/bisheng/llm/api/__init__.py
================================================
================================================
FILE: src/backend/bisheng/llm/api/router.py
================================================
from fastapi import APIRouter, Request, Depends, Body, Query, BackgroundTasks, UploadFile
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.schemas.api import resp_200, UnifiedResponseModel
from ..domain import LLMService
from ..domain.schemas import KnowledgeLLMConfig, AssistantLLMConfig, EvaluationLLMConfig, LLMServerCreateReq, \
WorkbenchModelConfig
router = APIRouter(prefix='/llm', tags=['LLM'])
@router.get('')
async def get_all_llm(request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user)):
ret = await LLMService.get_all_llm()
return resp_200(data=ret)
@router.post('')
async def add_llm_server(request: Request, login_user: UserPayload = Depends(UserPayload.get_admin_user),
server: LLMServerCreateReq = Body(..., description="Service Provider All Data")):
ret = await LLMService.add_llm_server(request, login_user, server)
return resp_200(data=ret)
@router.delete('')
async def delete_llm_server(request: Request, login_user: UserPayload = Depends(UserPayload.get_admin_user),
server_id: int = Body(..., embed=True, description="Service Provider UniqueID")):
await LLMService.delete_llm_server(request, login_user, server_id)
return resp_200()
@router.put('')
async def update_llm_server(request: Request, login_user: UserPayload = Depends(UserPayload.get_admin_user),
server: LLMServerCreateReq = Body(..., description="Service Provider All Data")):
ret = await LLMService.update_llm_server(request, login_user, server)
return resp_200(data=ret)
@router.get('/info')
async def get_one_llm(request: Request, login_user: UserPayload = Depends(UserPayload.get_admin_user),
server_id: int = Query(..., description="Service Provider UniqueID")):
ret = await LLMService.get_one_llm(server_id)
return resp_200(data=ret)
@router.post('/online')
async def update_model_online(request: Request, login_user: UserPayload = Depends(UserPayload.get_admin_user),
model_id: int = Body(..., embed=True, description="Model UniqueID"),
online: bool = Body(..., embed=True, description="Online or not")):
ret = await LLMService.update_model_online(model_id, online)
return resp_200(data=ret)
@router.get('/workbench', summary="Get workbench-related model configurations", response_model=UnifiedResponseModel)
async def get_workbench_llm():
""" Get Idea-Related Model Configurations """
ret = await LLMService.get_workbench_llm()
return resp_200(data=ret)
@router.post('/workbench', summary="Update workbench related model configurations", response_model=UnifiedResponseModel)
async def update_workbench_llm(
background_tasks: BackgroundTasks,
login_user: UserPayload = Depends(UserPayload.get_admin_user),
config_obj: WorkbenchModelConfig = Body(..., description="Model Configuration Object")):
""" Update Idea-Related Model Configurations """
ret = await LLMService.update_workbench_llm(login_user.user_id, config_obj, background_tasks)
return resp_200(data=ret)
@router.post('/workbench/asr')
async def invoke_workbench_asr(request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user),
file: UploadFile = None):
""" Call the workbench'sasrModels Convert Voice to Text """
text = await LLMService.invoke_workbench_asr(login_user, file)
return resp_200(data=text)
@router.post('/workbench/tts')
async def invoke_workbench_tts(request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user),
text: str = Body(..., embed=True, description="Text that needs to be synthesized")):
""" Call the workbench'sttsModels Convert text to speech """
audio_url = await LLMService.invoke_workbench_tts(login_user, text)
return resp_200(data=audio_url)
@router.get('/knowledge')
def get_knowledge_llm(request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user)):
ret = LLMService.get_knowledge_llm()
return resp_200(data=ret)
@router.post('/knowledge')
async def update_knowledge_llm(request: Request, login_user: UserPayload = Depends(UserPayload.get_admin_user),
data: KnowledgeLLMConfig = Body(..., description="Knowledge Base Default Model Configuration")):
""" Update default model configuration for knowledge base """
ret = await LLMService.update_knowledge_llm(data)
return resp_200(data=ret)
@router.get('/assistant')
async def get_assistant_llm(request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Get assistant related model configuration """
ret = await LLMService.get_assistant_llm()
return resp_200(data=ret)
@router.post('/assistant')
async def update_assistant_llm(request: Request, login_user: UserPayload = Depends(UserPayload.get_admin_user),
data: AssistantLLMConfig = Body(..., description="Assistant Default Model Configuration")):
""" Update assistant related model configurations """
ret = await LLMService.update_assistant_llm(data)
return resp_200(data=ret)
@router.get('/evaluation')
async def get_evaluation_llm(request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Get evaluation related model configurations """
ret = await LLMService.get_evaluation_llm()
return resp_200(data=ret)
@router.post('/evaluation')
async def update_evaluation_llm(request: Request, login_user: UserPayload = Depends(UserPayload.get_admin_user),
data: EvaluationLLMConfig = Body(..., description="Evaluate default model configuration")):
""" Update review related model configurations """
ret = await LLMService.update_evaluation_llm(data)
return resp_200(data=ret)
@router.get('/workflow')
async def get_workflow_llm(request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Get workflow-related model configurations """
ret = await LLMService.get_workflow_llm()
return resp_200(data=ret)
@router.post('/workflow')
async def update_workflow_llm(request: Request, login_user: UserPayload = Depends(UserPayload.get_admin_user),
data: EvaluationLLMConfig = Body(..., description="Workflow default model configuration")):
""" Update workflow-related model configurations """
ret = await LLMService.update_workflow_llm(data)
return resp_200(data=ret)
@router.get('/assistant/llm_list')
async def get_assistant_llm_list(request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Get a list of optional models for the assistant """
ret = await LLMService.get_assistant_llm_list(request, login_user)
return resp_200(data=ret)
================================================
FILE: src/backend/bisheng/llm/domain/__init__.py
================================================
from .services.llm import LLMService
__all__ = [
'LLMService'
]
================================================
FILE: src/backend/bisheng/llm/domain/const.py
================================================
# Some constants or enums for the module
from enum import Enum
# Service Provider Enumeration
class LLMServerType(Enum):
OPENAI = 'openai'
AZURE_OPENAI = 'azure_openai'
OLLAMA = 'ollama'
XINFERENCE = 'xinference'
LLAMACPP = 'llamacpp'
VLLM = 'vllm'
QWEN = 'qwen' # Ali Tongyi Qianqian
QIAN_FAN = 'qianfan' # Baidu Qianfan
ZHIPU = 'zhipu' # Zhi Spectrum Qing Yan
MINIMAX = 'minimax'
ANTHROPIC = 'anthropic'
DEEPSEEK = 'deepseek'
SPARK = 'spark' # Xunfei Starfire Large Model
BISHENG_RT = 'bisheng_rt'
TENCENT = 'tencent' # Tencent Cloud
MOONSHOT = 'moonshot' # Dark Side of the Moonkimi
VOLCENGINE = 'volcengine' # Large model of a volcanic engine
SILICON = 'silicon' # Silicon-based flow
MIND_IE = 'MindIE' # Ascendant Inference Engine MindIE
# Model Type Enumeration
class LLMModelType(Enum):
LLM = 'llm'
EMBEDDING = 'embedding'
RERANK = 'rerank'
ASR = 'asr'
TTS = 'tts'
class LLMModelStatus(Enum):
NORMAL = 0 # Normal
ERROR = 1 # Abnormal
UNKNOWN = 2 # Unknown
================================================
FILE: src/backend/bisheng/llm/domain/llm/__init__.py
================================================
from .asr import BishengASR
from .base import BishengBase
from .embedding import BishengEmbedding
from .llm import BishengLLM
from .tts import BishengTTS
__all__ = [
'BishengBase',
'BishengEmbedding',
'BishengLLM',
'BishengTTS',
'BishengASR',
]
================================================
FILE: src/backend/bisheng/llm/domain/llm/asr.py
================================================
from typing import Union, BinaryIO
import httpx
from pydantic import Field
from typing_extensions import Self
from bisheng.common.errcode.server import NoAsrModelConfigError, AsrModelConfigDeletedError, AsrModelTypeError, \
AsrProviderDeletedError, \
AsrModelOfflineError
from bisheng.core.ai import BaseASRClient, OpenAIASRClient, AliyunASRClient, AzureOpenAIASRClient
from bisheng.llm.domain.const import LLMModelType, LLMServerType
from bisheng.llm.domain.models import LLMModel, LLMServer
from .base import BishengBase
from ..utils import wrapper_bisheng_model_limit_check_async
async def _get_openai_params(params: dict, server_info: LLMServer, model_info: LLMModel) -> dict:
new_params = {
"api_key": params.get("openai_api_key"),
"model": model_info.model_name,
}
if params.get("openai_api_base"):
new_params["base_url"] = params["openai_api_base"]
if params.get("openai_proxy"):
new_params["http_client"] = httpx.AsyncClient(proxy=params["openai_proxy"])
return new_params
async def _get_azure_openai_params(params: dict, server_info: LLMServer, model_info: LLMModel) -> dict:
new_params = {
"api_key": params.get("openai_api_key"),
"api_version": params.get("openai_api_version"),
"azure_endpoint": params.get("azure_endpoint"),
"model": model_info.model_name,
}
return new_params
async def _get_qwen_params(params: dict, server_info: LLMServer, model_info: LLMModel) -> dict:
new_params = {
"api_key": params.get("openai_api_key") or params.get("api_key"),
"model": model_info.model_name,
}
return new_params
_asr_client_type = {
LLMServerType.OPENAI.value: {
"client": OpenAIASRClient,
"params_handler": _get_openai_params
},
LLMServerType.AZURE_OPENAI.value: {
"client": AzureOpenAIASRClient,
"params_handler": _get_azure_openai_params
},
LLMServerType.QWEN.value: {
"client": AliyunASRClient,
"params_handler": _get_qwen_params
}
}
class BishengASR(BishengBase):
asr: BaseASRClient = Field(..., description="asrInstances")
@classmethod
async def get_bisheng_asr(cls, **kwargs) -> Self:
model_id = kwargs.pop('model_id', 0)
if not model_id:
raise NoAsrModelConfigError()
model_info, server_info = await cls.get_model_server_info(model_id)
# ignore_onlineParameters are used to skip model presence checks
ignore_online = kwargs.pop('ignore_online', False)
if not model_info:
raise AsrModelConfigDeletedError()
if model_info.model_type != LLMModelType.ASR.value:
raise AsrModelTypeError(model_type=model_info.model_type)
if not server_info:
raise AsrProviderDeletedError()
if not ignore_online and not model_info.online:
raise AsrModelOfflineError(server_name=server_info.name, model_name=model_info.model_name)
# InisialisasiasrClient
asr_client = await cls.init_asr_client(model_info=model_info, server_info=server_info)
return cls(model_id=model_id, asr=asr_client, model_info=model_info, server_info=server_info, **kwargs)
@classmethod
async def init_asr_client(cls, model_info: LLMModel, server_info: LLMServer) -> BaseASRClient:
params = {}
if server_info.config:
if server_info.config:
params.update(server_info.config)
if model_info.config:
params.update(model_info.config)
if server_info.type not in _asr_client_type:
raise Exception(f'asrModel not supported{server_info.type}Type of service provider')
params_handler = _asr_client_type[server_info.type]['params_handler']
new_params = await params_handler(params, server_info, model_info)
client = _asr_client_type[server_info.type]['client'](**new_params)
return client
@wrapper_bisheng_model_limit_check_async
async def ainvoke(self, audio: Union[str, bytes, BinaryIO], **kwargs) -> str:
return await self.asr.transcribe(audio=audio, **kwargs)
================================================
FILE: src/backend/bisheng/llm/domain/llm/base.py
================================================
from typing import Optional, Dict
from pydantic import BaseModel, Field, ConfigDict
from typing_extensions import Self
from bisheng.common.constants.enums.telemetry import ApplicationTypeEnum
from ..models import LLMModel, LLMServer, LLMDao
class BishengBase(BaseModel):
model_config = ConfigDict(arbitrary_types_allowed=True, validate_by_name=True, validate_by_alias=True)
model_id: int = Field(description="Saved by backend servicemodelUniqueness quantificationID")
model_name: str = Field(default='', description='model name in mysql')
# field for telemetry logging
app_id: str = Field(..., description='application id')
app_type: ApplicationTypeEnum = Field(..., description='application type')
app_name: str = Field(..., description='application name')
user_id: int = Field(..., description='invoke user id')
# bishengStrongly related business parameters
model_info: Optional[LLMModel] = Field(default=None, description="Model Configuration Information")
server_info: Optional[LLMServer] = Field(default=None, description="Service Provider Information")
@classmethod
async def get_class_instance(cls, **kwargs: Dict) -> Self:
model_id: int | None = kwargs.pop('model_id', None)
model_info, server_info = await cls.get_model_server_info(model_id)
instance = cls(
model_id=model_id,
model_name=model_info.model_name,
model_info=model_info,
server_info=server_info,
**kwargs
)
return instance
@classmethod
async def get_model_server_info(cls, model_id: int | None) -> tuple[LLMModel | None, LLMServer | None]:
model_info = None
server_info = None
if not model_id:
return model_info, server_info
model_info = await LLMDao.aget_model_by_id(model_id)
if model_info:
server_info = await LLMDao.aget_server_by_id(model_info.server_id)
return model_info, server_info
@classmethod
def get_model_server_info_sync(cls, model_id: int | None) -> tuple[LLMModel | None, LLMServer | None]:
model_info = None
server_info = None
if not model_id:
return model_info, server_info
model_info = LLMDao.get_model_by_id(model_id)
if model_info:
server_info = LLMDao.get_server_by_id(model_info.server_id)
return model_info, server_info
async def update_model_status(self, status: int, remark: str = ''):
"""Update model status"""
if self.model_info.status != status:
self.model_info.status = status
await LLMDao.aupdate_model_status(self.model_id, status, remark[-500:]) # Limit note length to500characters.
def sync_update_model_status(self, status: int, remark: str = ''):
"""Update model status"""
if self.model_info.status != status:
self.model_info.status = status
LLMDao.update_model_status(self.model_id, status, remark[-500:])
def get_server_info_config(self):
if self.server_info and self.server_info.config:
return self.server_info.config
return {}
def get_model_info_config(self):
if self.model_info and self.model_info.config:
return self.model_info.config
return {}
================================================
FILE: src/backend/bisheng/llm/domain/llm/embedding.py
================================================
import json
from typing import Optional, Dict, List
import numpy as np
from langchain_core.embeddings import Embeddings
from loguru import logger
from pydantic import Field
from typing_extensions import Self
from bisheng.core.ai import OllamaEmbeddings, OpenAIEmbeddings, AzureOpenAIEmbeddings, DashScopeEmbeddings
from bisheng.llm.domain.const import LLMServerType, LLMModelType
from .base import BishengBase
from ..models import LLMModel, LLMServer
from ..utils import wrapper_bisheng_model_limit_check
def _get_user_kwargs(model_config: dict) -> dict:
user_kwargs = model_config.get('user_kwargs', {})
if isinstance(user_kwargs, str) and user_kwargs:
return json.loads(user_kwargs)
return user_kwargs if user_kwargs else {}
def _get_ollama_params(params: dict, server_config: dict, model_config: dict) -> dict:
params['base_url'] = server_config.get('base_url', '').rstrip('/')
user_kwargs = _get_user_kwargs(model_config)
user_kwargs.update(params)
return user_kwargs
def _get_openai_params(params: dict, server_config: dict, model_config: dict) -> dict:
if server_config:
params.update({
'api_key': server_config.get('openai_api_key') or server_config.get('api_key') or 'empty',
'base_url': server_config.get('openai_api_base', '') or server_config.get('base_url', ''),
})
params['base_url'] = params['base_url'].rstrip('/')
if server_config.get('openai_proxy'):
params['openai_proxy'] = server_config.get('openai_proxy')
params["check_embedding_ctx_length"] = False
user_kwargs = _get_user_kwargs(model_config)
user_kwargs.update(params)
return user_kwargs
def _get_azure_openai_params(params: dict, server_config: dict, model_config: dict) -> dict:
params.update({
'azure_endpoint': server_config.get('azure_endpoint').rstrip('/'),
'openai_api_key': server_config.get('openai_api_key'),
'openai_api_version': server_config.get('openai_api_version'),
'azure_deployment': params.pop('model'),
})
user_kwargs = _get_user_kwargs(model_config)
user_kwargs.update(params)
return user_kwargs
def _get_qwen_params(params: dict, server_config: dict, model_config: dict) -> dict:
params['dashscope_api_key'] = server_config.get('openai_api_key', '')
user_kwargs = _get_user_kwargs(model_config)
user_kwargs.update(params)
return user_kwargs
_node_type: Dict = {
# Open source inference framework
LLMServerType.OLLAMA.value: {"client": OllamaEmbeddings, "params_handler": _get_ollama_params},
LLMServerType.XINFERENCE.value: {"client": OpenAIEmbeddings, "params_handler": _get_openai_params},
LLMServerType.LLAMACPP.value: {"client": OpenAIEmbeddings, "params_handler": _get_openai_params},
LLMServerType.VLLM.value: {"client": OpenAIEmbeddings, "params_handler": _get_openai_params},
# OfficalAPISERVICES
LLMServerType.OPENAI.value: {"client": OpenAIEmbeddings, "params_handler": _get_openai_params},
LLMServerType.AZURE_OPENAI.value: {"client": AzureOpenAIEmbeddings, "params_handler": _get_azure_openai_params},
LLMServerType.QWEN.value: {"client": DashScopeEmbeddings, "params_handler": _get_qwen_params},
LLMServerType.QIAN_FAN.value: {"client": OpenAIEmbeddings, "params_handler": _get_openai_params},
LLMServerType.MINIMAX.value: {"client": OpenAIEmbeddings, "params_handler": _get_openai_params},
LLMServerType.ZHIPU.value: {"client": OpenAIEmbeddings, "params_handler": _get_openai_params},
LLMServerType.TENCENT.value: {"client": OpenAIEmbeddings, "params_handler": _get_openai_params},
LLMServerType.VOLCENGINE.value: {"client": OpenAIEmbeddings, "params_handler": _get_openai_params},
LLMServerType.SILICON.value: {"client": OpenAIEmbeddings, "params_handler": _get_openai_params},
}
class BishengEmbedding(BishengBase, Embeddings):
""" Use the embedding model that has been launched in model management """
embedding_ctx_length: int = Field(default=8192, description='embeddingModel Context Length')
max_retries: int = Field(default=6, description='embeddingNumber of failed model call retries')
request_timeout: int = Field(default=200, description='embeddingModel Call Timeout')
model_kwargs: dict = Field(default={}, description='embeddingModel Call Parameters')
embeddings: Optional[Embeddings] = Field(default=None)
@classmethod
async def get_bisheng_embedding(cls, **kwargs) -> Self:
return await cls.get_class_instance(**kwargs)
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.model_id = kwargs.get('model_id')
if not self.model_id:
raise Exception('No bulkpost found in Trashembeddingmodel config')
if "model_info" in kwargs and "server_info" in kwargs:
self._init_client(model_info=kwargs.pop('model_info'), server_info=kwargs.pop('server_info'), **kwargs)
else:
model_info, server_info = self.get_model_server_info_sync(self.model_id)
self._init_client(model_info=model_info, server_info=server_info, **kwargs)
def _init_client(self, model_info, server_info, **kwargs):
ignore_online = kwargs.get('ignore_online', False)
if not model_info:
raise Exception('embeddingModel configuration has been deleted, please reconfigure the model')
if not server_info:
raise Exception('Service provider configuration has been deleted, please reconfigureembeddingModels')
if model_info.model_type != LLMModelType.EMBEDDING.value:
raise Exception(f'Support onlyEmbeddingModel of type, not supported{model_info.model_type}Type of model')
if not ignore_online and not model_info.online:
raise Exception(f'{server_info.name}under{model_info.model_name}The model is offline, please contact the administrator to launch the corresponding model')
logger.debug(
f'init_bisheng_embedding: server_id: {server_info.id}, model_id: {model_info.id}')
self.model_info: LLMModel = model_info
self.server_info: LLMServer = server_info
self.model_name = model_info.model_name
class_object = self._get_embedding_class(server_info.type)
params = self._get_embedding_params(server_info, **kwargs)
try:
self.embeddings = class_object(**params)
except Exception as e:
logger.exception('init_bisheng_embedding error')
raise Exception(f'Inisialisasibisheng embeddingComponent failed, please check the configuration or contact the administrator.Error message:{e}')
@staticmethod
def _get_embedding_class(server_type: str) -> type[Embeddings]:
node_type = _node_type.get(server_type)
if not node_type:
raise Exception(f'{server_type}Type of service provider is not supportedembedding')
class_object = node_type.get('client')
return class_object
def _get_default_params(self, server_config: dict, model_config: dict, **kwargs) -> dict:
params = {
"model": self.model_info.model_name,
}
return params
def _get_embedding_params(self, server_info: LLMServer, **kwargs) -> dict:
server_config = self.get_server_info_config()
model_config = self.get_model_info_config()
default_params = self._get_default_params(server_config, model_config, **kwargs)
params_handler = _node_type[server_info.type]['params_handler']
params = params_handler(default_params, server_config, model_config)
return params
@wrapper_bisheng_model_limit_check
def embed_documents(self, texts: List[str]) -> List[List[float]]:
"""embedding"""
ret = self.embeddings.embed_documents(texts)
# Whether the disc single vector is normalized
if ret:
vector = ret[0]
if np.linalg.norm(vector) != 1:
ret = [(np.array(doc) / np.linalg.norm(doc)).tolist() for doc in ret]
return ret
@wrapper_bisheng_model_limit_check
def embed_query(self, text: str) -> List[float]:
"""embedding"""
ret = self.embeddings.embed_query(text)
if np.linalg.norm(ret) != 1:
ret = (np.array(ret) / np.linalg.norm(ret)).tolist()
return ret
================================================
FILE: src/backend/bisheng/llm/domain/llm/llm.py
================================================
import json
from typing import List, Optional, Any, Sequence, Union, Dict, Type, Callable, Iterator, AsyncIterator
from langchain_core.callbacks import AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun
from langchain_core.language_models import BaseChatModel, LanguageModelInput
from langchain_core.messages import BaseMessage, ToolMessage, HumanMessage, BaseMessageChunk, AIMessage
from langchain_core.outputs import ChatResult, ChatGenerationChunk
from langchain_core.runnables import Runnable
from langchain_core.tools import BaseTool
from langchain_core.utils.function_calling import convert_to_openai_tool
from loguru import logger
from pydantic import Field
from typing_extensions import Self
from bisheng.common.errcode.server import NoLlmModelConfigError, LlmModelConfigDeletedError, LlmProviderDeletedError, \
LlmModelTypeError, LlmModelOfflineError, InitLlmError
from bisheng.core.ai import ChatOllama, ChatOpenAI, ChatOpenAICompatible, \
AzureChatOpenAI, ChatZhipuAI, MiniMaxChat, ChatAnthropic, MoonshotChat
from bisheng.core.ai.llm.custom_chat_deepseek import CustomChatDeepSeek
from bisheng.core.ai.llm.custom_chat_tongyi import CustomChatTongYi
from bisheng.llm.domain.const import LLMModelType, LLMServerType
from bisheng.llm.domain.models import LLMServer, LLMModel
from .base import BishengBase
from ..utils import wrapper_bisheng_model_limit_check, wrapper_bisheng_model_limit_check_async, \
wrapper_bisheng_model_generator, wrapper_bisheng_model_generator_async
def _get_user_kwargs(model_config: dict) -> dict:
user_kwargs = model_config.get('user_kwargs', {})
if isinstance(user_kwargs, str) and user_kwargs:
return json.loads(user_kwargs)
return user_kwargs if user_kwargs else {}
# Attention needs to be paid to the priority of the initialization parameters. Instantiation Incoming Highest -> The following configurations of the front-end interface -> Advanced parameters of the front-end interface have the lowest priority
def _get_ollama_params(params: dict, server_config: dict, model_config: dict) -> dict:
params['base_url'] = server_config.get('base_url', '').rstrip('/')
# some bugs
params['stream'] = params.pop('streaming', True)
if params.get('max_tokens'):
params['num_ctx'] = params.pop('max_tokens', None)
# User advanced custom configuration
user_kwargs = _get_user_kwargs(model_config)
user_kwargs.update(params)
return user_kwargs
def _get_xinference_params(params: dict, server_config: dict, model_config: dict) -> dict:
params = _get_openai_params(params, server_config, model_config)
if not params.get('api_key', None):
params['api_key'] = 'Empty'
user_kwargs = _get_user_kwargs(model_config)
user_kwargs.update(params)
return user_kwargs
def _get_openai_params(params: dict, server_config: dict, model_config: dict) -> dict:
if server_config:
params.update({
'api_key': server_config.get('openai_api_key') or server_config.get('api_key') or "empty",
'base_url': server_config.get('openai_api_base') or server_config.get('base_url'),
})
params['base_url'] = params['base_url'].rstrip('/')
if server_config.get('openai_proxy'):
params['openai_proxy'] = server_config.get('openai_proxy')
params['stream_usage'] = True
user_kwargs = _get_user_kwargs(model_config)
user_kwargs.update(params)
return user_kwargs
def _get_azure_openai_params(params: dict, server_config: dict, model_config: dict) -> dict:
params.update({
'azure_endpoint': server_config.get('azure_endpoint').rstrip('/'),
'openai_api_key': server_config.get('openai_api_key'),
'openai_api_version': server_config.get('openai_api_version'),
'azure_deployment': params.pop('model'),
'stream_usage': True,
})
user_kwargs = _get_user_kwargs(model_config)
user_kwargs.update(params)
return user_kwargs
def _get_qwen_params(params: dict, server_config: dict, model_config: dict) -> dict:
params['dashscope_api_key'] = server_config.get('openai_api_key', '')
params['model_kwargs'] = {
'enable_search': model_config.get('enable_web_search', False),
}
if params.get("streaming"):
params['model_kwargs']['incremental_output'] = True
if params.get('temperature'):
params['model_kwargs']['temperature'] = params.pop('temperature')
if params.get('max_tokens'):
params['model_kwargs']['max_tokens'] = params.pop('max_tokens')
user_kwargs = _get_user_kwargs(model_config)
if user_model_kwargs := user_kwargs.get('model_kwargs'):
user_model_kwargs.update(params['model_kwargs'])
params['model_kwargs'] = user_model_kwargs
user_kwargs.pop('model_kwargs', None)
user_kwargs.update(params)
return user_kwargs
def _get_minimax_params(params: dict, server_config: dict, model_config: dict) -> dict:
params['minimax_api_key'] = server_config.get('openai_api_key')
params['base_url'] = server_config.get('openai_api_base').rstrip('/')
if 'max_tokens' not in params:
params['max_tokens'] = 2048
if '/chat/completions' not in params['base_url']:
params['base_url'] = f"{params['base_url']}/chat/completions"
user_kwargs = _get_user_kwargs(model_config)
user_kwargs.update(params)
return user_kwargs
def _get_anthropic_params(params: dict, server_config: dict, model_config: dict) -> dict:
params.update(server_config)
user_kwargs = _get_user_kwargs(model_config)
user_kwargs.update(params)
return user_kwargs
def _get_zhipu_params(params: dict, server_config: dict, model_config: dict) -> dict:
params['zhipuai_api_key'] = server_config.get('openai_api_key')
params['zhipuai_api_base'] = server_config.get('openai_api_base').rstrip('/')
if 'chat/completions' not in params['zhipuai_api_base']:
params['zhipuai_api_base'] = f"{params['zhipuai_api_base'].rstrip('/')}/chat/completions"
user_kwargs = _get_user_kwargs(model_config)
user_kwargs.update(params)
return params
def _get_spark_params(params: dict, server_config: dict, model_config: dict) -> dict:
params.update({
'api_key': f'{server_config.get("api_key")}:{server_config.get("api_secret")}',
'base_url': server_config.get('openai_api_base').rstrip('/'),
})
user_kwargs = _get_user_kwargs(model_config)
user_kwargs.update(params)
return params
_llm_node_type: Dict = {
# Open source inference framework
LLMServerType.OLLAMA.value: {'client': ChatOllama, 'params_handler': _get_ollama_params},
LLMServerType.XINFERENCE.value: {'client': ChatOpenAI, 'params_handler': _get_xinference_params},
LLMServerType.LLAMACPP.value: {'client': ChatOpenAI, 'params_handler': _get_openai_params},
LLMServerType.VLLM.value: {'client': ChatOpenAICompatible, 'params_handler': _get_openai_params},
# OfficalapiSERVICES
LLMServerType.OPENAI.value: {'client': ChatOpenAICompatible, 'params_handler': _get_openai_params},
LLMServerType.AZURE_OPENAI.value: {'client': AzureChatOpenAI, 'params_handler': _get_azure_openai_params},
LLMServerType.QWEN.value: {'client': CustomChatTongYi, 'params_handler': _get_qwen_params},
LLMServerType.QIAN_FAN.value: {'client': ChatOpenAICompatible, 'params_handler': _get_openai_params},
LLMServerType.ZHIPU.value: {'client': ChatZhipuAI, 'params_handler': _get_zhipu_params},
LLMServerType.MINIMAX.value: {'client': MiniMaxChat, 'params_handler': _get_minimax_params},
LLMServerType.ANTHROPIC.value: {'client': ChatAnthropic, 'params_handler': _get_anthropic_params},
LLMServerType.DEEPSEEK.value: {'client': CustomChatDeepSeek, 'params_handler': _get_openai_params},
LLMServerType.SPARK.value: {'client': ChatOpenAICompatible, 'params_handler': _get_spark_params},
LLMServerType.TENCENT.value: {'client': ChatOpenAICompatible, 'params_handler': _get_openai_params},
LLMServerType.MOONSHOT.value: {'client': MoonshotChat, 'params_handler': _get_openai_params},
LLMServerType.VOLCENGINE.value: {'client': ChatOpenAICompatible, 'params_handler': _get_openai_params},
LLMServerType.SILICON.value: {'client': ChatOpenAICompatible, 'params_handler': _get_openai_params},
LLMServerType.MIND_IE.value: {'client': ChatOpenAICompatible, 'params_handler': _get_openai_params},
}
class BishengLLM(BishengBase, BaseChatModel):
"""
Use the llm model that has been launched in model management
"""
streaming: Optional[bool] = Field(default=None, description="Whether to use streaming output", alias="stream")
temperature: Optional[float] = Field(default=None, description="Model Generated Temperature")
llm: Optional[BaseChatModel] = Field(default=None)
@classmethod
async def get_bisheng_llm(cls, **kwargs) -> Self:
return await cls.get_class_instance(**kwargs)
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.model_id = kwargs.get('model_id')
if not self.model_id:
raise NoLlmModelConfigError()
if "model_info" in kwargs and "server_info" in kwargs:
# Description is fromclass methodInitialized No need to query the database again
self._init_client(model_info=kwargs.pop("model_info"), server_info=kwargs.pop("server_info"), **kwargs)
else:
model_info, server_info = self.get_model_server_info_sync(self.model_id)
self._init_client(model_info, server_info, **kwargs)
def _init_client(self, model_info: LLMModel, server_info: LLMServer, **kwargs):
ignore_online = kwargs.get('ignore_online', False)
self.temperature = kwargs.get('temperature', None)
self.streaming = kwargs.get('streaming', None)
if not model_info:
raise LlmModelConfigDeletedError()
if not server_info:
raise LlmProviderDeletedError()
if model_info.model_type != LLMModelType.LLM.value:
raise LlmModelTypeError(model_type=model_info.model_type)
if not ignore_online and not model_info.online:
raise LlmModelOfflineError(server_name=server_info.name, model_name=model_info.model_name)
logger.debug(f'init_bisheng_llm: server_id: {server_info.id}, model_id: {model_info.id}')
self.model_info = model_info
self.model_name = model_info.model_name
self.server_info = server_info
class_object = self._get_llm_class(server_info.type)
params = self._get_llm_params(server_info, model_info)
try:
self.llm = class_object(**params)
except Exception as e:
logger.exception('init bisheng llm error')
raise InitLlmError(exception=e)
@staticmethod
def _get_llm_class(server_type: str) -> type[BaseChatModel]:
if server_type not in _llm_node_type:
raise Exception(f'not support llm type: {server_type}')
class_type = _llm_node_type[server_type]['client']
return class_type
def _get_llm_params(self, server_info: LLMServer, model_info: LLMModel) -> dict:
server_config = self.get_server_info_config()
model_config = self.get_model_info_config()
default_params = self._get_default_params(server_config, model_config)
params_handler = _llm_node_type[server_info.type]['params_handler']
params = params_handler(default_params, server_config, model_config)
return params
def _get_default_params(self, server_config: dict, model_config: dict) -> dict:
# Highest priority parameters because they are passed in when the object is instantiated
default_params: Dict[str, Any] = {
'model': self.model_info.model_name,
}
# The highest priority is passed in the instantiation, followed by the advanced configuration. Otherwise defaults totrue
if self.streaming is not None:
default_params['streaming'] = self.streaming
else:
user_kwargs = _get_user_kwargs(model_config)
if user_kwargs.get('streaming', None) is None:
default_params['streaming'] = True
else:
default_params['streaming'] = user_kwargs.get('streaming', None)
if self.temperature is not None:
default_params['temperature'] = self.temperature
if model_config.get('max_tokens'):
default_params['max_tokens'] = model_config.get('max_tokens')
return default_params
@property
def _llm_type(self):
return self.llm._llm_type
def parse_kwargs(self, messages: List[BaseMessage], kwargs: Dict[str, Any]) -> (List[BaseMessage], Dict[str, Any]):
if self.server_info.type == LLMServerType.MINIMAX.value:
if self.get_model_info_config().get('enable_web_search'):
if 'tools' not in kwargs:
kwargs.update({
'tools': [{'type': 'web_search'}],
})
else:
tool_exists = False
for tool in kwargs['tools']:
if tool.get('type') == 'web_search':
tool_exists = True
break
if not tool_exists:
kwargs['tools'].append({
'type': 'web_search',
})
elif self.server_info.type == LLMServerType.MOONSHOT.value:
if self.get_model_info_config().get('enable_web_search'):
if 'tools' not in kwargs:
kwargs.update({
'tools': [{
"type": "builtin_function",
"function": {
"name": "$web_search",
},
}],
})
else:
tool_exists = False
for tool in kwargs['tools']:
if tool.get('type') == 'builtin_function':
tool_exists = True
break
if not tool_exists:
kwargs['tools'].append({
"type": "builtin_function",
"function": {
"name": "$web_search",
},
})
# elif self.server_info.type == LLMServerType.QWEN.value:
# # ChatTongYi The input parameters for multimodality are special and need to be converted to support
# user_message = messages[-1]
# if isinstance(user_message, HumanMessage):
# if isinstance(user_message.content, list):
# for one in user_message.content:
# if one.get('type') == 'image' and one.get('data'):
# one['type'] = 'image'
# one['image'] = f"data:{one.get('mime_type')};{one.get('source_type')},{one.get('data')}"
# elif one.get('type') == 'image_url' and one.get('image_url'):
# one['type'] = 'image'
# one['image'] = one.pop('image_url', {}).get('url')
return messages, kwargs
@wrapper_bisheng_model_limit_check
def _generate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
stream: Optional[bool] = None,
**kwargs: Any,
) -> ChatResult:
messages, kwargs = self.parse_kwargs(messages, kwargs)
if self.server_info.type == LLMServerType.MOONSHOT.value:
ret = self.moonshot_generate(messages, stop, run_manager, **kwargs)
else:
ret = self.llm._generate(messages, stop, run_manager, **kwargs)
if self.server_info.type == LLMServerType.QWEN.value:
ret.generations[0].message = self.convert_qwen_result(ret.generations[0].message)
return ret
def moonshot_generate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
result = None
finish_reason = None
while finish_reason is None or finish_reason == 'tool_calls':
result = self.llm._generate(messages, stop, run_manager, **kwargs)
result_message = result.generations[0].message
finish_reason = result.generations[0].generation_info.get('finish_reason')
for tool_call in result_message.tool_calls:
tool_call_name = tool_call['name']
if tool_call_name == "$web_search":
messages.append(result_message)
messages.append(ToolMessage(
tool_call_id=tool_call['id'],
name=tool_call_name,
content=json.dumps(tool_call['args'], ensure_ascii=False),
))
else:
break
return result
@wrapper_bisheng_model_limit_check_async
async def _agenerate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
stream: Optional[bool] = None,
**kwargs: Any,
) -> ChatResult:
messages, kwargs = self.parse_kwargs(messages, kwargs)
if self.server_info.type == LLMServerType.MOONSHOT.value:
ret = await self.moonshot_agenerate(messages, stop, run_manager, **kwargs)
else:
ret = await self.llm._agenerate(messages, stop, run_manager, **kwargs)
if self.server_info.type == LLMServerType.QWEN.value:
ret.generations[0].message = self.convert_qwen_result(ret.generations[0].message)
return ret
async def moonshot_agenerate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
result = None
finish_reason = None
while finish_reason is None or finish_reason == 'tool_calls':
result = await self.llm._agenerate(messages, stop, run_manager, **kwargs)
result_message = result.generations[0].message
finish_reason = result.generations[0].generation_info.get('finish_reason')
for tool_call in result_message.tool_calls:
tool_call_name = tool_call['name']
if tool_call_name == "$web_search":
messages.append(result_message)
messages.append(ToolMessage(
tool_call_id=tool_call['id'],
name=tool_call_name,
content=json.dumps(tool_call['args'], ensure_ascii=False),
))
else:
break
return result
def bind_tools(
self,
tools: Sequence[Union[Dict[str, Any], Type, Callable, BaseTool]],
**kwargs: Any,
) -> Runnable[LanguageModelInput, BaseMessage]:
formatted_tools = [convert_to_openai_tool(tool) for tool in tools]
return super().bind(tools=formatted_tools, **kwargs)
def convert_qwen_result(self, message: BaseMessageChunk | BaseMessage) -> BaseMessageChunk | BaseMessage:
# ChatTongYi model vl model message.content is list
if isinstance(message.content, list):
message.content = ''.join([one.get('text', '') for one in message.content])
return message
@wrapper_bisheng_model_generator
def _stream(
self,
messages: list[BaseMessage],
stop: Optional[list[str]] = None,
run_manager: Optional[CallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> Iterator[ChatGenerationChunk]:
for one in self.llm._stream(messages, stop=stop, run_manager=run_manager, **kwargs):
if self.server_info.type == LLMServerType.QWEN.value:
one.message = self.convert_qwen_result(one.message)
yield one
@wrapper_bisheng_model_generator_async
async def _astream(
self,
messages: list[BaseMessage],
stop: Optional[list[str]] = None,
run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> AsyncIterator[ChatGenerationChunk]:
async for one in self.llm._astream(messages, stop=stop, run_manager=run_manager, **kwargs):
if self.server_info.type == LLMServerType.QWEN.value:
one.message = self.convert_qwen_result(one.message)
yield one
================================================
FILE: src/backend/bisheng/llm/domain/llm/rerank.py
================================================
from typing import Dict, Optional, Sequence
import dashscope
from langchain_core.callbacks import Callbacks
from langchain_core.documents import BaseDocumentCompressor, Document
from loguru import logger
from pydantic import Field
from typing_extensions import Self
from bisheng.core.ai import XinferenceRerank, CommonRerank, DashScopeRerank
from bisheng.llm.domain.const import LLMServerType, LLMModelType
from .llm import BishengBase
from ..utils import wrapper_bisheng_model_limit_check, wrapper_bisheng_model_limit_check_async
def _get_xinference_params(params: dict, server_config: dict, model_config: dict) -> dict:
params['base_url'] = server_config.get('openai_api_base') or server_config.get('base_url')
params['api_key'] = server_config.get('openai_api_key') or server_config.get('api_key') or 'empty'
params['model_uid'] = params.pop('model', '')
return params
def _get_common_params(params: dict, server_config: dict, model_config: dict) -> dict:
params['base_url'] = server_config.get('openai_api_base') or server_config.get('base_url')
params['api_key'] = server_config.get('openai_api_key') or server_config.get('api_key') or 'empty'
params['rerank_endpoint'] = '/rerank'
return params
def _get_qwen_params(params: dict, server_config: dict, model_config: dict) -> dict:
params['dashscope_api_key'] = server_config.get('openai_api_key', '')
params['top_n'] = None # return all documents
params["client"] = dashscope.TextReRank
return params
_node_type: Dict = {
# Open source inference framework
LLMServerType.XINFERENCE.value: {'client': XinferenceRerank, 'params_handler': _get_xinference_params},
LLMServerType.LLAMACPP.value: {'client': CommonRerank, 'params_handler': _get_common_params},
LLMServerType.VLLM.value: {'client': CommonRerank, 'params_handler': _get_common_params},
# OfficalapiSERVICES
LLMServerType.QWEN.value: {'client': DashScopeRerank, 'params_handler': _get_qwen_params},
LLMServerType.QIAN_FAN.value: {'client': CommonRerank, 'params_handler': _get_common_params},
LLMServerType.SILICON.value: {'client': CommonRerank, 'params_handler': _get_common_params},
}
class BishengRerank(BishengBase, BaseDocumentCompressor):
"""Rerank LLM wrapper class"""
rerank: Optional[BaseDocumentCompressor] = Field(None, description="Rerank client instance")
@classmethod
async def get_bisheng_rerank(cls, **kwargs) -> Self:
return await cls.get_class_instance(**kwargs)
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.model_id = kwargs.get('model_id')
if not self.model_id:
raise Exception('No bulkpost found in Trashrerankmodel config')
if "model_info" in kwargs and "server_info" in kwargs:
self._init_client(model_info=kwargs.pop('model_info'), server_info=kwargs.pop('server_info'), **kwargs)
else:
model_info, server_info = self.get_model_server_info_sync(self.model_id)
self._init_client(model_info=model_info, server_info=server_info, **kwargs)
def _init_client(self, model_info, server_info, **kwargs):
ignore_online = kwargs.get('ignore_online', False)
if not model_info:
raise Exception('rerankModel configuration has been deleted, please reconfigure the model')
if not server_info:
raise Exception('Service provider configuration has been deleted, please reconfigurererankModels')
if model_info.model_type != LLMModelType.RERANK.value:
raise Exception(f'Support onlyRerankModel of type, not supported{model_info.model_type}Type of model')
if not ignore_online and not model_info.online:
raise Exception(f'{server_info.name}under{model_info.model_name}The model is offline, please contact the administrator to launch the corresponding model')
logger.debug(f'init_bisheng_rerank: server_id: {server_info.id}, model_id: {model_info.id}')
node_conf = _node_type.get(server_info.type)
if not node_conf:
raise Exception(f'Not supportedrerankService Provider:{server_info.type}')
self.model_info = model_info
self.model_name = model_info.model_name
self.server_info = server_info
params_handler = node_conf['params_handler']
client_class = node_conf['client']
params = {
"model": self.model_name,
}
params = params_handler(params, self.get_server_info_config(), self.get_model_info_config())
try:
self.rerank = client_class(**params)
except Exception as e:
logger.exception('init_bisheng_rerank error')
raise Exception(f'init bisheng rerank error,error msg:{e}')
@wrapper_bisheng_model_limit_check
def compress_documents(
self,
documents: Sequence[Document],
query: str,
callbacks: Optional[Callbacks] = None,
) -> Sequence[Document]:
return self.rerank.compress_documents(documents, query, callbacks=callbacks)
@wrapper_bisheng_model_limit_check_async
async def acompress_documents(
self,
documents: Sequence[Document],
query: str,
callbacks: Optional[Callbacks] = None,
) -> Sequence[Document]:
return await self.rerank.acompress_documents(documents, query, callbacks=callbacks)
================================================
FILE: src/backend/bisheng/llm/domain/llm/tts.py
================================================
import httpx
from pydantic import Field
from typing_extensions import Self
from bisheng.common.errcode.server import NoTtsModelConfigError, TtsModelConfigDeletedError, \
TtsModelTypeError, TtsProviderDeletedError, TtsModelOfflineError
from bisheng.core.ai import BaseTTSClient, OpenAITTSClient, \
AliyunTTSClient, AzureOpenAITTSClient
from bisheng.llm.domain.const import LLMModelType, LLMServerType
from bisheng.llm.domain.models import LLMServer, LLMModel
from .base import BishengBase
from ..utils import wrapper_bisheng_model_limit_check_async
async def _get_openai_params(params: dict, server_info: LLMServer, model_info: LLMModel) -> dict:
new_params = {
"api_key": params.get("openai_api_key"),
"model": model_info.model_name,
"base_url": params.get("openai_base_url"),
}
if params.get("openai_api_base"):
new_params["base_url"] = params["openai_api_base"]
if params.get("voice"):
new_params["voice"] = params["voice"]
if params.get("openai_proxy"):
new_params["http_client"] = httpx.AsyncClient(proxy=params["openai_proxy"])
return new_params
async def _get_azure_openai_params(params: dict, server_info: LLMServer, model_info: LLMModel) -> dict:
new_params = {
"api_key": params.get("openai_api_key"),
"api_version": params.get("openai_api_version"),
"azure_endpoint": params.get("azure_endpoint"),
"model": model_info.model_name,
}
if params.get("voice"):
new_params["voice"] = params["voice"]
return new_params
async def _get_qwen_params(params: dict, server_info: LLMServer, model_info: LLMModel) -> dict:
new_params = {
"api_key": params.get("openai_api_key") or params.get("api_key"),
"model": model_info.model_name,
}
if params.get("voice"):
new_params["voice"] = params["voice"]
return new_params
_tts_client_type = {
LLMServerType.OPENAI.value: {
"client": OpenAITTSClient,
"params_handler": _get_openai_params
},
LLMServerType.AZURE_OPENAI.value: {
"client": AzureOpenAITTSClient,
"params_handler": _get_azure_openai_params
},
LLMServerType.QWEN.value: {
"client": AliyunTTSClient,
"params_handler": _get_qwen_params
}
}
class BishengTTS(BishengBase):
tts: BaseTTSClient = Field(..., description="ttsInstances")
@classmethod
async def get_bisheng_tts(cls, **kwargs) -> Self:
model_id = kwargs.pop('model_id', 0)
if not model_id:
raise NoTtsModelConfigError()
model_info, server_info = await cls.get_model_server_info(model_id)
# ignore_onlineParameters are used to skip model presence checks
ignore_online = kwargs.get('ignore_online', False)
if not model_info:
raise TtsModelConfigDeletedError()
if model_info.model_type != LLMModelType.TTS.value:
raise TtsModelTypeError(model_type=model_info.model_type)
if not server_info:
raise TtsProviderDeletedError()
if not ignore_online and not model_info.online:
raise TtsModelOfflineError(server_name=server_info.name, model_name=model_info.model_name)
# InisialisasittsClient
tts_client = await cls.init_tts_client(model_info=model_info, server_info=server_info)
return cls(model_id=model_id, tts=tts_client, model_info=model_info, server_info=server_info, **kwargs)
@classmethod
async def init_tts_client(cls, model_info: LLMModel, server_info: LLMServer) -> BaseTTSClient:
params = {}
if server_info.config:
if server_info.config:
params.update(server_info.config)
if model_info.config:
params.update(model_info.config)
if server_info.type not in _tts_client_type:
raise Exception(f'TtsModel not supported{server_info.type}Type of service provider')
params_handler = _tts_client_type[server_info.type]['params_handler']
new_params = await params_handler(params, server_info, model_info)
client = _tts_client_type[server_info.type]['client'](**new_params)
return client
@wrapper_bisheng_model_limit_check_async
async def ainvoke(self, text: str, **kwargs) -> bytes:
return await self.tts.synthesize(text, **kwargs)
================================================
FILE: src/backend/bisheng/llm/domain/models/__init__.py
================================================
from .llm_server import LLMDao, LLMServer, LLMModel, LLMModelBase, LLMServerBase
__all__ = [
"LLMDao",
"LLMServer",
"LLMModel",
"LLMModelBase",
"LLMServerBase",
]
================================================
FILE: src/backend/bisheng/llm/domain/models/llm_server.py
================================================
from datetime import datetime
from typing import Dict, List, Optional
from sqlalchemy import CHAR, JSON, Column, DateTime, Text, UniqueConstraint, delete, text, update
from sqlmodel import Field, select, col
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session, get_async_db_session
from bisheng.llm.domain.const import LLMModelType
class LLMServerBase(SQLModelSerializable):
name: str = Field(default='', index=True, unique=True, description='Service name')
description: Optional[str] = Field(default='', sa_column=Column(Text), description='Service Description')
type: str = Field(sa_column=Column(CHAR(20)), description='Service Provider Type')
limit_flag: bool = Field(default=False, description='Whether to turn on the daily call limit')
limit: int = Field(default=0, description='Daily call limit')
config: Optional[Dict] = Field(default=None, sa_column=Column(JSON), description='Service Provider Public Configuration')
user_id: int = Field(default=0, description='creatorID')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class LLMModelBase(SQLModelSerializable):
server_id: Optional[int] = Field(default=None, nullable=False, index=True, description='SERVICESID')
name: str = Field(default='', description='Model Display Name')
description: Optional[str] = Field(default='', sa_column=Column(Text), description='Model Description')
model_name: str = Field(default='', description='Model name, parameters used when instantiating components')
model_type: str = Field(sa_column=Column(CHAR(20)), description='model type')
config: Optional[Dict] = Field(default=None, sa_column=Column(JSON), description='Service Provider Public Configuration')
status: int = Field(default=2, description='Model status.0Normal1abnormal:, 2: Unknown')
remark: Optional[str] = Field(default='', sa_column=Column(Text), description='Abnormal reason')
online: bool = Field(default=True, description='Online')
user_id: int = Field(default=0, description='creatorID')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class LLMServer(LLMServerBase, table=True):
__tablename__ = 'llm_server'
id: Optional[int] = Field(default=None, nullable=False, primary_key=True, description='Service UniqueID')
class LLMModel(LLMModelBase, table=True):
__tablename__ = 'llm_model'
__table_args__ = (UniqueConstraint('server_id', 'model_name', name='server_model_uniq'),)
id: Optional[int] = Field(default=None, nullable=False, primary_key=True, description='Model UniqueID')
class LLMDao:
@classmethod
def get_all_server(cls) -> List[LLMServer]:
""" Get all service providers """
statement = select(LLMServer).order_by(col(LLMServer.update_time).desc())
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
async def aget_all_server(cls) -> List[LLMServer]:
""" Get all providers asynchronously """
statement = select(LLMServer).order_by(col(LLMServer.update_time).desc())
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
def insert_server_with_models(cls, server: LLMServer, models: List[LLMModel]):
""" Insert Service Provider and Model """
with get_sync_db_session() as session:
session.add(server)
session.flush()
for model in models:
model.server_id = server.id
session.add_all(models)
session.commit()
session.refresh(server)
return server
@classmethod
async def ainsert_server_with_models(cls, server: LLMServer, models: List[LLMModel]):
""" Insert service providers and models asynchronously """
async with get_async_db_session() as session:
session.add(server)
await session.flush()
for model in models:
model.server_id = server.id
session.add_all(models)
await session.commit()
await session.refresh(server)
return server
@classmethod
async def update_server_with_models(cls, server: LLMServer, models: List[LLMModel]):
""" Update Service Providers and Models """
async with get_async_db_session() as session:
session.add(server)
add_models = []
update_models = []
for model in models:
if model.id:
update_models.append(model)
else:
add_models.append(model)
# Delete model
await session.exec(
delete(LLMModel).where(col(LLMModel.server_id) == server.id,
col(LLMModel.id).not_in([model.id for model in update_models])))
# Add New Model
session.add_all(add_models)
# Update data for existing models
for one in update_models:
await session.exec(
update(LLMModel).where(LLMModel.id == one.id).values(
name=one.name,
description=one.description,
model_name=one.model_name,
model_type=one.model_type,
config=one.config))
await session.commit()
await session.refresh(server)
return server
@classmethod
def get_all_model(cls) -> List[LLMModel]:
""" Get all models """
statement = select(LLMModel)
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
def get_server_by_id(cls, server_id: int) -> Optional[LLMServer]:
""" According to serviceIDGet Service Providers """
statement = select(LLMServer).where(LLMServer.id == server_id)
with get_sync_db_session() as session:
return session.exec(statement).first()
@classmethod
async def aget_server_by_id(cls, server_id: int) -> Optional[LLMServer]:
""" According to serviceIDGet Service Providers """
statement = select(LLMServer).where(LLMServer.id == server_id)
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.first()
@classmethod
def get_server_by_ids(cls, server_ids: List[int]) -> List[LLMServer]:
""" According to serviceIDGet Service Providers """
statement = select(LLMServer).where(col(LLMServer.id).in_(server_ids))
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
async def aget_server_by_ids(cls, server_ids: List[int]) -> List[LLMServer]:
""" According to serviceIDGet Service Providers """
statement = select(LLMServer).where(col(LLMServer.id).in_(server_ids))
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
def get_server_by_name(cls, server_name: str) -> Optional[LLMServer]:
""" Get Service Provider by Service Name """
statement = select(LLMServer).where(LLMServer.name == server_name)
with get_sync_db_session() as session:
return session.exec(statement).first()
@classmethod
async def aget_server_by_name(cls, server_name: str) -> Optional[LLMServer]:
""" Get Service Provider by Service Name """
statement = select(LLMServer).where(LLMServer.name == server_name)
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.first()
@classmethod
def get_model_by_id(cls, model_id: int) -> Optional[LLMModel]:
""" According to the modelIDGrabbed Objects """
statement = select(LLMModel).where(LLMModel.id == model_id)
with get_sync_db_session() as session:
return session.exec(statement).first()
@classmethod
async def aget_model_by_id(cls, model_id: int) -> Optional[LLMModel]:
""" According to the modelIDGrabbed Objects """
statement = select(LLMModel).where(LLMModel.id == model_id)
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.first()
@classmethod
def get_model_by_ids(cls, model_ids: List[int]) -> List[LLMModel]:
""" According to the modelIDGrabbed Objects """
statement = select(LLMModel).where(col(LLMModel.id).in_(model_ids))
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
async def aget_model_by_ids(cls, model_ids: List[int]) -> List[LLMModel]:
""" According to the modelIDGrabbed Objects """
statement = select(LLMModel).where(col(LLMModel.id).in_(model_ids))
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
def get_model_by_type(cls, model_type: LLMModelType) -> Optional[LLMModel]:
""" Get first created model based on model type """
statement = select(LLMModel).where(LLMModel.model_type == model_type.value).order_by(
col(LLMModel.id).asc())
with get_sync_db_session() as session:
return session.exec(statement).first()
@classmethod
async def aget_model_by_type(cls, model_type: LLMModelType) -> Optional[LLMModel]:
""" Get first created model based on model type """
statement = select(LLMModel).where(LLMModel.model_type == model_type.value).order_by(
col(LLMModel.id).asc())
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.first()
@classmethod
def get_model_by_server_ids(cls, server_ids: List[int]) -> List[LLMModel]:
""" According to serviceIDGrabbed Objects """
statement = select(LLMModel).where(col(LLMModel.server_id).in_(server_ids)).order_by(
col(LLMModel.update_time).desc())
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
async def aget_model_by_server_ids(cls, server_ids: List[int]) -> List[LLMModel]:
""" According to serviceIDGet the first model created """
statement = select(LLMModel).where(col(LLMModel.server_id).in_(server_ids)).order_by(
col(LLMModel.update_time).desc())
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
def update_model_status(cls, model_id: int, status: int, remark: str = ''):
""" Update model status """
with get_sync_db_session() as session:
session.exec(
update(LLMModel).where(col(LLMModel.id) == model_id).values(status=status,
remark=remark))
session.commit()
@classmethod
async def aupdate_model_status(cls, model_id: int, status: int, remark: str = ''):
""" Asynchronously update model status """
async with get_async_db_session() as session:
await session.exec(
update(LLMModel).where(col(LLMModel.id) == model_id).values(status=status,
remark=remark))
await session.commit()
@classmethod
def update_model_online(cls, model_id: int, online: bool):
""" Update model online status """
with get_sync_db_session() as session:
session.exec(update(LLMModel).where(col(LLMModel.id) == model_id).values(online=online))
session.commit()
@classmethod
async def aupdate_model_online(cls, model_id: int, online: bool):
""" Asynchronous update model online status """
async with get_async_db_session() as session:
await session.exec(update(LLMModel).where(col(LLMModel.id) == model_id).values(online=online))
await session.commit()
@classmethod
def delete_server_by_id(cls, server_id: int):
""" According to serviceIDDelete Service Provider """
with get_sync_db_session() as session:
session.exec(delete(LLMServer).where(col(LLMServer.id) == server_id))
session.exec(delete(LLMModel).where(col(LLMModel.server_id) == server_id))
session.commit()
@classmethod
async def adelete_server_by_id(cls, server_id: int):
""" According to serviceIDDelete Service Provider """
async with get_async_db_session() as session:
await session.exec(delete(LLMServer).where(col(LLMServer.id) == server_id))
await session.exec(delete(LLMModel).where(col(LLMModel.server_id) == server_id))
await session.commit()
@classmethod
def delete_model_by_ids(cls, model_ids: List[int]):
""" According to the modelIDDelete model """
with get_sync_db_session() as session:
session.exec(delete(LLMModel).where(col(LLMModel.id).in_(model_ids)))
session.commit()
@classmethod
async def adelete_model_by_ids(cls, model_ids: List[int]):
""" According to the modelIDDelete model """
async with get_async_db_session() as session:
await session.exec(delete(LLMModel).where(col(LLMModel.id).in_(model_ids)))
await session.commit()
================================================
FILE: src/backend/bisheng/llm/domain/schemas.py
================================================
from typing import Optional, List
from pydantic import Field, BaseModel, model_validator
from bisheng.llm.domain.models import LLMModelBase, LLMServerBase
from bisheng.utils.mask_data import JsonFieldMasker
from bisheng_langchain.linsight.const import TaskMode
class LLMModelInfo(LLMModelBase):
id: Optional[int] = None
class LLMServerInfo(LLMServerBase):
id: Optional[int] = None
models: List[LLMModelInfo] = Field(default_factory=list, description='Model List')
# Sensitive Data Desensitization
@model_validator(mode='after')
def mask_sensitive_data(self):
if not self.config:
return self
mask_maker = JsonFieldMasker()
self.config = mask_maker.mask_json(self.config)
return self
class WSModel(BaseModel):
key: Optional[str] = None
id: str
name: Optional[str] = None
displayName: Optional[str] = None
class WorkbenchModelConfig(BaseModel):
"""
Inspiration Model Configuration
"""
# Task execution model
task_model: Optional[WSModel] = Field(default=None, description='Task execution model')
# RetrieveembeddingModels
embedding_model: Optional[WSModel] = Field(default=None, description='embeddingModels')
# Inspiration Execution Mode
linsight_executor_mode: Optional[TaskMode] = Field(default=None, description='Inspiration Execution Mode')
# Speech-to-text model
asr_model: Optional[WSModel] = Field(default=None, description='Speech-to-text model')
tts_model: Optional[WSModel] = Field(default=None, description='Text-to-speech model')
class LLMModelCreateReq(BaseModel):
id: Optional[int] = Field(default=None, description='Model UniqueID, Need to pass when updating')
name: str = Field(..., description='Model Display Name')
description: Optional[str] = Field(default='', description='Model Description')
model_name: str = Field(..., description='Model Name')
model_type: str = Field(..., description='model type')
online: bool = Field(default=True, description='Online')
config: Optional[dict] = Field(default=None, description='model config')
class LLMServerCreateReq(BaseModel):
id: Optional[int] = Field(default=None, description='service providerID, Need to pass when updating')
name: str = Field(..., description='Support service provider name')
description: Optional[str] = Field(default='', description='Service Provider Description')
type: str = Field(..., description='Service Provider Type')
limit_flag: Optional[bool] = Field(default=False, description='Whether to turn on the daily call limit')
limit: Optional[int] = Field(default=0, description='Daily call limit')
config: Optional[dict] = Field(default=None, description='Service Provider Configuration')
models: Optional[List[LLMModelCreateReq]] = Field(default_factory=list, description='List of models under Service Provider')
class KnowledgeLLMConfig(BaseModel):
embedding_model_id: Optional[int] = Field(None, description="Knowledge Base DefaultembeddingModel'sID")
source_model_id: Optional[int] = Field(None, description="the Knowledge Base Traceability Model'sID")
extract_title_model_id: Optional[int] = Field(None, description="Documentation Knowledge Base Extraction Header Model'sID")
qa_similar_model_id: Optional[int] = Field(None, description="QAThe Knowledge Base Similarity Question Model'sID")
abstract_prompt: Optional[str] = Field(None, description='Summary Prompt')
class AssistantLLMItem(BaseModel):
model_id: Optional[int] = Field(None, description="Model'sID")
agent_executor_type: Optional[str] = Field(default='ReAct',
description='Execution modefunction call or ReAct')
knowledge_max_content: Optional[int] = Field(default=15000, description='Maximum number of strings for knowledge base retrieval')
knowledge_sort_index: Optional[bool] = Field(default=False, description='Whether to reschedule after knowledge base retrieval')
streaming: Optional[bool] = Field(default=True, description='Whether to turn on streaming')
default: Optional[bool] = Field(default=False, description='Is default model')
class AssistantLLMConfig(BaseModel):
llm_list: Optional[List[AssistantLLMItem]] = Field(default_factory=list, description='Assistant OptionalLLMVertical')
auto_llm: Optional[AssistantLLMItem] = Field(None, description='Assistant Portrait Automatic Optimization Model Configuration')
class EvaluationLLMConfig(BaseModel):
model_id: Optional[int] = Field(None, description='The default model of the evaluation functionID')
================================================
FILE: src/backend/bisheng/llm/domain/services/__init__.py
================================================
from .llm import LLMService
__all__ = [
'LLMService',
]
================================================
FILE: src/backend/bisheng/llm/domain/services/llm.py
================================================
import json
import os
from typing import List, Optional, Dict
from fastapi import Request, BackgroundTasks, UploadFile
from langchain_core.documents import BaseDocumentCompressor, Document
from langchain_core.embeddings import Embeddings
from langchain_core.language_models import BaseChatModel
from loguru import logger
from bisheng.common.constants.enums.telemetry import ApplicationTypeEnum
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.http_error import NotFoundError, ServerError
from bisheng.common.errcode.llm import ServerExistError, ModelNameRepeatError, ServerAddError, ServerAddAllError
from bisheng.common.errcode.server import NoAsrModelConfigError, AsrModelConfigDeletedError, NoTtsModelConfigError, \
TtsModelConfigDeletedError
from bisheng.common.models.config import ConfigDao, ConfigKeyEnum, Config
from bisheng.core.cache.redis_manager import get_redis_client
from bisheng.core.storage.minio.minio_manager import get_minio_storage
from bisheng.knowledge.domain.models.knowledge import KnowledgeDao, KnowledgeTypeEnum
from bisheng.knowledge.domain.models.knowledge import KnowledgeState
from bisheng.llm.domain.const import LLMModelType
from bisheng.llm.domain.models import LLMDao, LLMServer, LLMModel
from bisheng.llm.domain.schemas import LLMServerInfo, LLMModelInfo, KnowledgeLLMConfig, AssistantLLMConfig, \
EvaluationLLMConfig, AssistantLLMItem, LLMServerCreateReq, WorkbenchModelConfig, WSModel
from bisheng.utils import generate_uuid, md5_hash
from bisheng.utils.mask_data import JsonFieldMasker
from ..llm import BishengASR, BishengLLM, BishengTTS, BishengEmbedding
from ..llm.rerank import BishengRerank
class LLMService:
@classmethod
async def get_all_llm(cls) -> List[LLMServerInfo]:
""" Get all the model data, Exclusion:keyand other sensitive information """
llm_servers = await LLMDao.aget_all_server()
ret = []
server_ids = []
for one in llm_servers:
server_ids.append(one.id)
ret.append(LLMServerInfo(**one.model_dump(exclude={'config'})))
llm_models = await LLMDao.aget_model_by_server_ids(server_ids)
server_dicts = {}
for one in llm_models:
if one.server_id not in server_dicts:
server_dicts[one.server_id] = []
server_dicts[one.server_id].append(LLMModelInfo(**one.model_dump(exclude={'config'})))
for one in ret:
one.models = server_dicts.get(one.id, [])
return ret
@classmethod
async def get_one_llm(cls, server_id: int) -> LLMServerInfo:
""" Get a service provider's details Containskeyand other sensitive configuration information """
llm = await LLMDao.aget_server_by_id(server_id)
if not llm:
raise NotFoundError.http_exception()
models = await LLMDao.aget_model_by_server_ids([server_id])
models = [LLMModelInfo(**one.model_dump()) for one in models]
return LLMServerInfo(**llm.model_dump(), models=models)
@classmethod
async def add_llm_server(cls, request: Request, login_user: UserPayload,
server: LLMServerCreateReq) -> LLMServerInfo:
""" Add a service provider """
exist_server = await LLMDao.aget_server_by_name(server.name)
if exist_server:
raise ServerExistError.http_exception()
model_dict = {}
for one in server.models:
if one.model_name not in model_dict:
model_dict[one.model_name] = LLMModel(**one.model_dump(), user_id=login_user.user_id)
else:
raise ModelNameRepeatError.http_exception()
db_server = LLMServer(**server.model_dump(exclude={'models'}))
db_server.user_id = login_user.user_id
db_server = await LLMDao.ainsert_server_with_models(db_server, list(model_dict.values()))
ret = await cls.get_one_llm(db_server.id)
success_models = []
success_msg = ''
failed_models = []
failed_msg = ''
# Try to instantiate the corresponding model, delete it if there is an error
common_params = {
'app_id': ApplicationTypeEnum.MODEL_TEST.value,
'app_name': ApplicationTypeEnum.MODEL_TEST.value,
'app_type': ApplicationTypeEnum.MODEL_TEST,
'user_id': login_user.user_id,
}
for one in ret.models:
try:
if one.model_type == LLMModelType.LLM.value:
await cls.get_bisheng_llm(model_id=one.id, ignore_online=True, **common_params)
elif one.model_type == LLMModelType.EMBEDDING.value:
await cls.get_bisheng_embedding(model_id=one.id, ignore_online=True, **common_params)
elif one.model_type == LLMModelType.ASR.value:
await cls.get_bisheng_asr(model_id=one.id, ignore_online=True, **common_params)
elif one.model_type == LLMModelType.TTS.value:
await cls.get_bisheng_tts(model_id=one.id, ignore_online=True, **common_params)
success_msg += f'{one.model_name},'
success_models.append(one)
except Exception as e:
logger.exception("init_model_error")
# If model initialization fails, do not add to the model list
failed_msg += f'<{one.model_name}>Add failed, Reason for failure:{str(e)}\n'
failed_models.append(one)
# Description Failed to add all models
if len(success_models) == 0 and failed_msg:
await LLMDao.adelete_server_by_id(ret.id)
raise ServerAddAllError.http_exception(failed_msg)
elif len(success_models) > 0 and failed_msg:
# Some models added successfully, Delete failed model information
ret.models = success_models
await LLMDao.adelete_model_by_ids(model_ids=[one.id for one in failed_models])
await cls.add_llm_server_hook(request, login_user, ret)
raise ServerAddError.http_exception(f"<{success_msg.rstrip(',')}>Added{failed_msg}")
await cls.add_llm_server_hook(request, login_user, ret)
return ret
@classmethod
async def delete_llm_server(cls, request: Request, login_user: UserPayload, server_id: int) -> bool:
""" Delete a service provider """
await LLMDao.adelete_server_by_id(server_id)
return True
@classmethod
async def add_llm_server_hook(cls, request: Request, login_user: UserPayload, server: LLMServerInfo) -> bool:
""" Add a service provider Next Actions """
handle_types = []
for one in server.models:
# test model status
await cls.test_model_status(one, login_user)
if one.model_type in handle_types:
continue
handle_types.append(one.model_type)
model_info = await LLMDao.aget_model_by_type(LLMModelType(one.model_type))
# Determine if this is the firstllmorembeddingModels
if model_info.id == one.id:
await cls.set_default_model(model_info)
return True
@classmethod
async def test_model_status(cls, model: LLMModel | LLMModelInfo, login_user: UserPayload):
common_params = {
'app_id': ApplicationTypeEnum.MODEL_TEST.value,
'app_name': ApplicationTypeEnum.MODEL_TEST.value,
'app_type': ApplicationTypeEnum.MODEL_TEST,
'user_id': login_user.user_id,
}
try:
if model.model_type == LLMModelType.LLM.value:
bisheng_model = await cls.get_bisheng_llm(model_id=model.id, ignore_online=True, **common_params)
await bisheng_model.ainvoke('hello')
elif model.model_type == LLMModelType.EMBEDDING.value:
bisheng_embed = await cls.get_bisheng_embedding(model_id=model.id, ignore_online=True, **common_params)
await bisheng_embed.aembed_query('hello')
elif model.model_type == LLMModelType.TTS.value:
bisheng_tts = await cls.get_bisheng_tts(model_id=model.id, ignore_online=True, **common_params)
await bisheng_tts.ainvoke('hello')
elif model.model_type == LLMModelType.ASR.value:
example_file_path = os.path.join(os.path.dirname(__file__), "./asr_example.wav")
with open(example_file_path, 'rb') as f:
bisheng_asr = await cls.get_bisheng_asr(model_id=model.id, ignore_online=True, **common_params)
await bisheng_asr.ainvoke(f)
elif model.model_type == LLMModelType.RERANK.value:
bisheng_rerank = await cls.get_bisheng_rerank(model_id=model.id, ignore_online=True, **common_params)
await bisheng_rerank.acompress_documents(documents=[Document(page_content="hello world")],
query="hello")
except Exception as e:
LLMDao.update_model_status(model.id, 1, str(e))
logger.exception(f'test model status: {model.id} {model.model_name}')
@classmethod
async def set_default_model(cls, model: LLMModel | LLMModelInfo):
""" Set default model configuration """
# Set defaultllmmodel config
if model.model_type == LLMModelType.LLM.value:
# Set default model configuration for knowledge base
knowledge_llm = await cls.aget_knowledge_llm()
knowledge_change = False
if not knowledge_llm.extract_title_model_id:
knowledge_llm.extract_title_model_id = model.id
knowledge_change = True
if not knowledge_llm.source_model_id:
knowledge_llm.source_model_id = model.id
knowledge_change = True
if not knowledge_llm.qa_similar_model_id:
knowledge_llm.qa_similar_model_id = model.id
knowledge_change = True
if knowledge_change:
await cls.update_knowledge_llm(knowledge_llm)
# Set default model configuration for reviews
evaluation_llm = await cls.get_evaluation_llm()
if not evaluation_llm.model_id:
evaluation_llm.model_id = model.id
await cls.update_evaluation_llm(evaluation_llm)
# Setting the default model configuration for the assistant
assistant_llm = await cls.get_assistant_llm()
assistant_change = False
if not assistant_llm.auto_llm:
assistant_llm.auto_llm = AssistantLLMItem(model_id=model.id)
assistant_change = True
if not assistant_llm.llm_list:
assistant_change = True
assistant_llm.llm_list = [
AssistantLLMItem(model_id=model.id, default=True)
]
if assistant_change:
await cls.update_assistant_llm(assistant_llm)
elif model.model_type == LLMModelType.EMBEDDING.value:
knowledge_llm = cls.get_knowledge_llm()
if not knowledge_llm.embedding_model_id:
knowledge_llm.embedding_model_id = model.id
await cls.update_knowledge_llm(knowledge_llm)
elif model.model_type == LLMModelType.TTS.value:
workbench_llm = await cls.get_workbench_llm()
if not workbench_llm.tts_model or not workbench_llm.tts_model.id:
workbench_llm.tts_model = WSModel(id=str(model.id), name=model.model_name)
await cls.update_workbench_llm(0, workbench_llm, BackgroundTasks())
elif model.model_type == LLMModelType.ASR.value:
workbench_llm = await cls.get_workbench_llm()
if not workbench_llm.asr_model or not workbench_llm.asr_model.id:
workbench_llm.asr_model = WSModel(id=str(model.id), name=model.model_name)
await cls.update_workbench_llm(0, workbench_llm, BackgroundTasks())
@classmethod
async def update_llm_server(cls, request: Request, login_user: UserPayload,
server: LLMServerCreateReq) -> LLMServerInfo:
""" Update Service Provider Information """
exist_server = await LLMDao.aget_server_by_id(server.id)
if not exist_server:
raise NotFoundError.http_exception()
old_models = await LLMDao.aget_model_by_server_ids([exist_server.id])
old_model_dict = {
one.id: one for one in old_models
}
if exist_server.name != server.name:
# If you change your name, determine if it already exists
name_server = await LLMDao.aget_server_by_name(server.name)
if name_server and name_server.id != server.id:
raise ServerExistError.http_exception(f'<{server.name}>already exists')
model_dict = {}
for one in server.models:
if one.model_name not in model_dict:
model_dict[one.model_name] = LLMModel(**one.model_dump())
# Explanation is to add a model
if not one.id:
model_dict[one.model_name].user_id = login_user.user_id
model_dict[one.model_name].server_id = exist_server.id
else:
raise ModelNameRepeatError.http_exception()
exist_server.name = server.name
exist_server.description = server.description
exist_server.type = server.type
exist_server.limit_flag = server.limit_flag
exist_server.limit = server.limit
mask_maker = JsonFieldMasker()
exist_server.config = mask_maker.update_json_with_masked(exist_server.config, server.config)
db_server = await LLMDao.update_server_with_models(exist_server, list(model_dict.values()))
new_server_info = await cls.get_one_llm(db_server.id)
# Determine if the model status needs to be re-determined
for one in new_server_info.models:
if one.id not in old_model_dict:
await cls.set_default_model(one)
# The new model, or the model name or type has changed
if (one.id not in old_model_dict or old_model_dict[one.id].model_name != one.model_name
or old_model_dict[one.id].model_type != one.model_type):
await cls.test_model_status(one, login_user)
return new_server_info
@classmethod
async def update_model_online(cls, model_id: int, online: bool) -> LLMModelInfo:
""" Update whether the model is online """
exist_model = await LLMDao.aget_model_by_id(model_id)
if not exist_model:
raise NotFoundError.http_exception()
exist_model.online = online
await LLMDao.aupdate_model_online(exist_model.id, online)
return LLMModelInfo(**exist_model.model_dump())
@classmethod
def get_knowledge_llm(cls) -> KnowledgeLLMConfig:
""" Get the default model configuration for the knowledge base """
ret = {}
config = ConfigDao.get_config(ConfigKeyEnum.KNOWLEDGE_LLM)
if config:
ret = json.loads(config.value)
return KnowledgeLLMConfig(**ret)
@classmethod
async def aget_knowledge_llm(cls) -> KnowledgeLLMConfig:
""" Get the default model configuration for the knowledge base """
ret = {}
config = await ConfigDao.aget_config(ConfigKeyEnum.KNOWLEDGE_LLM)
if config:
ret = json.loads(config.value)
return KnowledgeLLMConfig(**ret)
@classmethod
def get_knowledge_source_llm(cls, invoke_user_id: int) -> Optional[BaseChatModel]:
""" Get the default model configuration for Knowledge Base Traceability """
knowledge_llm = cls.get_knowledge_llm()
# If no model is configured, usejieba
if not knowledge_llm.source_model_id:
return None
return cls.get_bisheng_llm_sync(model_id=knowledge_llm.source_model_id,
app_id=ApplicationTypeEnum.RAG_TRACEABILITY.value,
app_name=ApplicationTypeEnum.RAG_TRACEABILITY.value,
app_type=ApplicationTypeEnum.RAG_TRACEABILITY,
user_id=invoke_user_id)
@classmethod
async def get_knowledge_source_llm_async(cls, invoke_user_id: int) -> Optional[BaseChatModel]:
""" Get the default model configuration for Knowledge Base Traceability """
knowledge_llm = await cls.aget_knowledge_llm()
# If no model is configured, usejieba
if not knowledge_llm.source_model_id:
return None
return await cls.get_bisheng_llm(model_id=knowledge_llm.source_model_id,
app_id=ApplicationTypeEnum.RAG_TRACEABILITY.value,
app_name=ApplicationTypeEnum.RAG_TRACEABILITY.value,
app_type=ApplicationTypeEnum.RAG_TRACEABILITY,
user_id=invoke_user_id)
@classmethod
def get_knowledge_similar_llm(cls, invoke_user_id: int) -> Optional[BaseChatModel]:
""" Get the default model configuration for knowledge base similar questions """
knowledge_llm = cls.get_knowledge_llm()
# If no model is configured, usejieba
if not knowledge_llm.qa_similar_model_id:
return None
return cls.get_bisheng_llm_sync(model_id=knowledge_llm.qa_similar_model_id,
app_id=ApplicationTypeEnum.KNOWLEDGE_BASE.value,
app_name=ApplicationTypeEnum.KNOWLEDGE_BASE.value,
app_type=ApplicationTypeEnum.KNOWLEDGE_BASE,
user_id=invoke_user_id)
@classmethod
def get_knowledge_default_embedding(cls, invoke_user_id: int) -> Optional[Embeddings]:
""" Get Knowledge Base DefaultsembeddingModels """
knowledge_llm = cls.get_knowledge_llm()
if not knowledge_llm.embedding_model_id:
return None
return cls.get_bisheng_knowledge_embedding_sync(model_id=knowledge_llm.embedding_model_id,
invoke_user_id=invoke_user_id)
@classmethod
async def _base_update_llm_config(cls, data: Dict, key: ConfigKeyEnum) -> Dict:
config = await ConfigDao.aget_config(key)
if config:
config.value = json.dumps(data)
else:
config = Config(key=key.value, value=json.dumps(data, ensure_ascii=False))
await ConfigDao.async_insert_config(config)
return data
@classmethod
async def update_knowledge_llm(cls, data: KnowledgeLLMConfig) \
-> KnowledgeLLMConfig:
""" Update default model configuration for knowledge base """
await cls._base_update_llm_config(data=data.model_dump(), key=ConfigKeyEnum.KNOWLEDGE_LLM)
return data
@classmethod
async def get_assistant_llm(cls) -> AssistantLLMConfig:
""" Get the default model configuration related to the assistant """
ret = {}
config = ConfigDao.get_config(ConfigKeyEnum.ASSISTANT_LLM)
if config:
ret = json.loads(config.value)
return AssistantLLMConfig(**ret)
@classmethod
def sync_get_assistant_llm(cls) -> AssistantLLMConfig:
""" Get the default model configuration related to the assistant """
ret = {}
config = ConfigDao.get_config(ConfigKeyEnum.ASSISTANT_LLM)
if config:
ret = json.loads(config.value)
return AssistantLLMConfig(**ret)
@classmethod
async def update_assistant_llm(cls, data: AssistantLLMConfig) \
-> AssistantLLMConfig:
""" Update default model configurations related to the assistant """
await cls._base_update_llm_config(data=data.model_dump(), key=ConfigKeyEnum.ASSISTANT_LLM)
return data
@classmethod
async def get_evaluation_llm(cls) -> EvaluationLLMConfig:
""" Get the default model configuration for the evaluation feature """
ret = {}
config = await ConfigDao.aget_config(ConfigKeyEnum.EVALUATION_LLM)
if config:
ret = json.loads(config.value)
return EvaluationLLMConfig(**ret)
@classmethod
def sync_get_evaluation_llm(cls) -> EvaluationLLMConfig:
""" Get the default model configuration for the evaluation feature """
ret = {}
config = ConfigDao.get_config(ConfigKeyEnum.EVALUATION_LLM)
if config:
ret = json.loads(config.value)
return EvaluationLLMConfig(**ret)
@classmethod
async def get_evaluation_llm_object(cls, invoke_user_id: int) -> BaseChatModel:
evaluation_llm = await cls.get_evaluation_llm()
if not evaluation_llm.model_id:
raise Exception('Evaluation model is not configured')
return await cls.get_bisheng_llm(model_id=evaluation_llm.model_id,
app_id=ApplicationTypeEnum.EVALUATION.value,
app_name=ApplicationTypeEnum.EVALUATION.value,
app_type=ApplicationTypeEnum.EVALUATION,
user_id=invoke_user_id)
@classmethod
async def get_bisheng_llm(cls, **kwargs) -> BaseChatModel:
""" Initialize LiftedllmConversation Model """
return await BishengLLM.get_bisheng_llm(**kwargs)
@classmethod
def get_bisheng_llm_sync(cls, **kwargs) -> BaseChatModel:
""" Initialize LiftedllmConversation Model """
return BishengLLM(**kwargs)
@classmethod
async def get_bisheng_linsight_llm(cls, invoke_user_id: int, **kwargs) -> BaseChatModel:
return await BishengLLM.get_bisheng_llm(app_id=ApplicationTypeEnum.LINSIGHT.value,
app_name=ApplicationTypeEnum.LINSIGHT.value,
app_type=ApplicationTypeEnum.LINSIGHT,
user_id=invoke_user_id,
**kwargs)
@classmethod
async def get_bisheng_rerank(cls, **kwargs) -> BaseDocumentCompressor:
return await BishengRerank.get_bisheng_rerank(**kwargs)
@classmethod
def get_bisheng_rerank_sync(cls, **kwargs) -> BaseDocumentCompressor:
return BishengRerank(**kwargs)
@classmethod
async def get_bisheng_embedding(cls, **kwargs) -> Embeddings:
""" Initialize LiftedembeddingModels """
return await BishengEmbedding.get_bisheng_embedding(**kwargs)
@classmethod
def get_bisheng_embedding_sync(cls, **kwargs) -> Embeddings:
""" Initialize LiftedembeddingModels """
return BishengEmbedding(**kwargs)
@classmethod
async def get_bisheng_daily_embedding(cls, invoke_user_id: int, model_id: int) -> Embeddings:
""" Get dailyembeddingModels """
return await cls.get_bisheng_embedding(model_id=model_id,
app_id=ApplicationTypeEnum.DAILY_CHAT.value,
app_name=ApplicationTypeEnum.DAILY_CHAT.value,
app_type=ApplicationTypeEnum.DAILY_CHAT,
user_id=invoke_user_id)
@classmethod
async def get_bisheng_linsight_embedding(cls, invoke_user_id: int, model_id: int) -> Embeddings:
""" Get Ideas DefaultembeddingModels """
return await cls.get_bisheng_embedding(model_id=model_id,
app_id=ApplicationTypeEnum.LINSIGHT.value,
app_name=ApplicationTypeEnum.LINSIGHT.value,
app_type=ApplicationTypeEnum.LINSIGHT,
user_id=invoke_user_id)
@classmethod
async def get_bisheng_knowledge_embedding(cls, invoke_user_id: int, model_id: int) -> Embeddings:
""" Get Knowledge Base DefaultsembeddingModels """
return await cls.get_bisheng_embedding(model_id=model_id,
app_id=ApplicationTypeEnum.KNOWLEDGE_BASE.value,
app_name=ApplicationTypeEnum.KNOWLEDGE_BASE.value,
app_type=ApplicationTypeEnum.KNOWLEDGE_BASE,
user_id=invoke_user_id)
@classmethod
def get_bisheng_knowledge_embedding_sync(cls, invoke_user_id: int, model_id: int) -> Embeddings:
""" Get Knowledge Base DefaultsembeddingModels """
return cls.get_bisheng_embedding_sync(model_id=model_id,
app_id=ApplicationTypeEnum.KNOWLEDGE_BASE.value,
app_name=ApplicationTypeEnum.KNOWLEDGE_BASE.value,
app_type=ApplicationTypeEnum.KNOWLEDGE_BASE,
user_id=invoke_user_id)
@classmethod
async def get_bisheng_asr(cls, **kwargs) -> BishengASR:
""" Initialize LiftedasrModels """
return await BishengASR.get_bisheng_asr(**kwargs)
@classmethod
async def get_bisheng_tts(cls, **kwargs) -> BishengTTS:
""" Initialize LiftedttsModels """
return await BishengTTS.get_bisheng_tts(**kwargs)
@classmethod
async def update_evaluation_llm(cls, data: EvaluationLLMConfig) \
-> EvaluationLLMConfig:
""" Update default model configuration for review feature """
await cls._base_update_llm_config(data=data.model_dump(), key=ConfigKeyEnum.EVALUATION_LLM)
return data
@classmethod
async def update_workflow_llm(cls, data: EvaluationLLMConfig) -> EvaluationLLMConfig:
""" Update workflow Default Model Configuration for """
await cls._base_update_llm_config(data=data.model_dump(), key=ConfigKeyEnum.WORKFLOW_LLM)
return data
@classmethod
async def get_workflow_llm(cls) -> EvaluationLLMConfig:
""" Get the default model configuration for the evaluation feature """
ret = {}
config = await ConfigDao.aget_config(ConfigKeyEnum.WORKFLOW_LLM)
if config:
ret = json.loads(config.value)
return EvaluationLLMConfig(**ret)
@classmethod
async def get_assistant_llm_list(cls, request: Request, login_user: UserPayload) -> List[LLMServerInfo]:
""" Get a list of optional models for the assistant """
assistant_llm = await cls.get_assistant_llm()
if not assistant_llm.llm_list:
return []
model_list = await LLMDao.aget_model_by_ids([one.model_id for one in assistant_llm.llm_list])
if not model_list:
return []
default_llm = next(filter(lambda x: x.default, assistant_llm.llm_list), None)
if not default_llm:
default_llm = assistant_llm.llm_list[0]
model_dict = {}
default_server = None
for one in model_list:
if one.server_id not in model_dict:
model_dict[one.server_id] = []
if one.id == default_llm.model_id:
default_server = one.server_id
model_dict[one.server_id].insert(0, LLMModelInfo(**one.model_dump(exclude={'config'})))
continue
model_dict[one.server_id].append(LLMModelInfo(**one.model_dump(exclude={'config'})))
server_list = await LLMDao.aget_server_by_ids(list(model_dict.keys()))
ret = []
for one in server_list:
if one.id == default_server:
ret.insert(0, LLMServerInfo(**one.model_dump(exclude={'config'}), models=model_dict[one.id]))
continue
ret.append(LLMServerInfo(**one.model_dump(exclude={'config'}), models=model_dict[one.id]))
return ret
@classmethod
async def update_workbench_llm(cls, invoke_user_id: int, config_obj: WorkbenchModelConfig,
background_tasks: BackgroundTasks):
"""
Update Invisible Model Configuration
:param invoke_user_id:
:param config_obj:
:param background_tasks:
:return:
"""
# Delay imports to avoid looping imports
from bisheng.worker.knowledge.rebuild_knowledge_worker import rebuild_knowledge_celery
config = await ConfigDao.aget_config(ConfigKeyEnum.LINSIGHT_LLM)
if not config:
config = Config(key=ConfigKeyEnum.LINSIGHT_LLM.value, value='{}')
if config_obj.embedding_model:
# Determine consistency
config_old_obj = WorkbenchModelConfig(**json.loads(config.value)) if config else WorkbenchModelConfig()
if (config_obj.embedding_model.id and config_old_obj.embedding_model is None or
config_obj.embedding_model.id != config_old_obj.embedding_model.id):
embeddings = await cls.get_bisheng_embedding(model_id=config_obj.embedding_model.id,
app_id=ApplicationTypeEnum.LINSIGHT.value,
app_name=ApplicationTypeEnum.LINSIGHT.value,
app_type=ApplicationTypeEnum.LINSIGHT,
user_id=invoke_user_id)
try:
await embeddings.aembed_query("test")
except Exception as e:
raise Exception(f"EmbeddingModel initialization failed: {str(e)}")
from bisheng.linsight.domain.services.sop_manage import SOPManageService
background_tasks.add_task(SOPManageService.rebuild_sop_vector_store_task, embeddings)
# Update Personal Knowledge Base
# 1.Upgrading alltypeare2(Private Repository)right of privacyknowledgeStatus and Model
private_knowledges = await KnowledgeDao.aget_all_knowledge(
knowledge_type=KnowledgeTypeEnum.PRIVATE
)
updated_count = 0
for knowledge in private_knowledges:
# Update status is rebuilding, model is newmodel_id
knowledge.state = KnowledgeState.REBUILDING.value
knowledge.model = config_obj.embedding_model.id
await KnowledgeDao.aupdate_one(knowledge)
updated_count += 1
# 3. For eachknowledgeStart asynchronous task
rebuild_knowledge_celery.delay(knowledge.id, int(knowledge.model), invoke_user_id)
logger.info(
f"Started rebuild task for knowledge_id={knowledge.id} with model_id={knowledge.model}")
logger.info(
f"Updated {updated_count} private knowledge bases to use new embedding model {config_obj.embedding_model.id}")
config.value = json.dumps(config_obj.model_dump(), ensure_ascii=False)
await ConfigDao.async_insert_config(config)
return config_obj
@classmethod
async def get_workbench_llm(cls) -> WorkbenchModelConfig:
"""
Get Workbench Model Configuration
:return:
"""
ret = {}
config = await ConfigDao.aget_config(ConfigKeyEnum.LINSIGHT_LLM)
if config:
ret = json.loads(config.value)
return WorkbenchModelConfig(**ret)
@classmethod
async def invoke_workbench_asr(cls, login_user: UserPayload, file: UploadFile) -> str:
""" Call the workbench'sasrModels Convert Voice to Text """
if not file:
raise ServerError.http_exception("no file upload")
workbench_llm = await cls.get_workbench_llm()
if not workbench_llm.asr_model or not workbench_llm.asr_model.id:
raise NoAsrModelConfigError.http_exception()
model_info = await LLMDao.aget_model_by_id(int(workbench_llm.asr_model.id))
if not model_info:
raise AsrModelConfigDeletedError.http_exception()
asr_client = await cls.get_bisheng_asr(model_id=int(workbench_llm.asr_model.id),
app_id=ApplicationTypeEnum.ASR.value,
app_name=ApplicationTypeEnum.ASR.value,
app_type=ApplicationTypeEnum.ASR,
user_id=login_user.user_id)
return await asr_client.ainvoke(file.file)
@classmethod
async def invoke_workbench_tts(cls, login_user: UserPayload, text: str) -> str:
"""
Call the workbench'sttsModels Convert text to speech
:return: minioPath to
"""
workbench_llm = await cls.get_workbench_llm()
redis_client = await get_redis_client()
if not workbench_llm.tts_model or not workbench_llm.tts_model.id:
raise NoTtsModelConfigError.http_exception()
model_info = await LLMDao.aget_model_by_id(model_id=int(workbench_llm.tts_model.id))
if not model_info:
raise TtsModelConfigDeletedError.http_exception()
# get from cache
voice = model_info.config.get("voice", "default") if model_info.config else "default"
cache_key = f"workbench_tts:{model_info.id}:{voice}:{md5_hash(text)}"
cache_value = await redis_client.aget(cache_key)
if cache_value:
return cache_value
tts_client = await cls.get_bisheng_tts(model_id=int(workbench_llm.tts_model.id),
app_id=ApplicationTypeEnum.TTS.value,
app_name=ApplicationTypeEnum.TTS.value,
app_type=ApplicationTypeEnum.TTS,
user_id=login_user.user_id)
audio_bytes = await tts_client.ainvoke(text)
# upload to minio
object_name = f"tts/{generate_uuid()}.mp3"
minio_client = await get_minio_storage()
await minio_client.put_object(object_name=object_name, file=audio_bytes, content_type="audio/mpeg",
bucket_name=minio_client.tmp_bucket)
cache_value = await minio_client.get_share_link(object_name, bucket=minio_client.tmp_bucket)
# The tmp bucket automatically clears files older than 7 days, so set the expiration time to 6 days
await redis_client.aset(cache_key, cache_value, expiration=6 * 24 * 3600)
return cache_value
================================================
FILE: src/backend/bisheng/llm/domain/utils.py
================================================
import functools
import time
from datetime import datetime
from typing import Any, Dict, Optional, Union
from uuid import UUID
from langchain_core.callbacks import BaseCallbackHandler
from langchain_core.outputs import ChatResult, GenerationChunk, ChatGenerationChunk
from loguru import logger
from bisheng.common.constants.enums.telemetry import StatusEnum, BaseTelemetryTypeEnum
from bisheng.common.schemas.telemetry.event_data_schema import ModelInvokeEventData
from bisheng.common.services import telemetry_service
from bisheng.core.cache.redis_manager import get_redis_client, get_redis_client_sync
from bisheng.core.logger import trace_id_var
from bisheng.llm.domain.const import LLMModelStatus
async def bisheng_model_limit_check(self: 'BishengBase'):
now = datetime.now().strftime("%Y-%m-%d")
if self.server_info.limit_flag:
# Number of calls checked
cache_key = f"model_limit:{now}:{self.server_info.id}"
redis_client = await get_redis_client()
use_num = await redis_client.aincr(cache_key)
if use_num > self.server_info.limit:
raise Exception(f'{self.server_info.name}/{self.model_info.model_name} Quota used up')
def sync_bisheng_model_limit_check(self: 'BishengBase'):
now = datetime.now().strftime("%Y-%m-%d")
if self.server_info.limit_flag:
# Number of calls checked
cache_key = f"model_limit:{now}:{self.server_info.id}"
use_num = get_redis_client_sync().incr(cache_key)
if use_num > self.server_info.limit:
raise Exception(f'{self.server_info.name}/{self.model_info.model_name} Quota used up')
def get_token_from_usage(token_usage: Dict[str, Any]) -> tuple[int, int, int, int]:
"""
FROMtoken_usageGet in DictionarytokenUsage
"""
input_token = token_usage.get('input_tokens', 0) or token_usage.get('prompt_tokens', 0)
output_token = token_usage.get('output_tokens', 0) or token_usage.get('completion_tokens', 0)
cache_token = token_usage.get('cached_token', 0) or token_usage.get("prompt_tokens_details", {}).get(
'cached_tokens', 0) or token_usage.get('input_tokens_details', {}).get('cache_read', 0)
total_token = token_usage.get('total_tokens', 0)
return input_token, output_token, cache_token, total_token
def parse_token_usage(result: Any) -> tuple[int, int, int, int]:
"""
analyzingtokenUsage
"""
input_token, output_token, cache_token, total_token = 0, 0, 0, 0
if isinstance(result, ChatResult):
for generation in result.generations:
token_usage = generation.generation_info.get('token_usage', {}) or generation.message.response_metadata.get(
'token_usage', {}) or generation.message.usage_metadata
tmp1, tmp2, tmp3, tmp4 = get_token_from_usage(token_usage)
input_token += tmp1
output_token += tmp2
cache_token += tmp3
total_token += tmp4
elif isinstance(result, ChatGenerationChunk):
token_usage = result.message.response_metadata.get('token_usage', {}) or result.generation_info.get(
'token_usage', {}) or result.message.usage_metadata
input_token, output_token, cache_token, total_token = get_token_from_usage(token_usage)
else:
logger.warning(f'unknown result type: {type(result)}')
return input_token, output_token, cache_token, total_token
class TelemetryCallback(BaseCallbackHandler):
"""
Telemetry Slider Callbacks
"""
def __init__(self, start_time: float):
self.start_time = start_time
self.first_token_time: Optional[int] = 0
def on_llm_new_token(
self,
token: str,
*,
chunk: Optional[Union[GenerationChunk, ChatGenerationChunk]] = None,
run_id: UUID,
parent_run_id: Optional[UUID] = None,
**kwargs: Any,
) -> Any:
if not self.first_token_time:
self.first_token_time = int((time.time() - self.start_time) * 1000)
def upload_telemetry_log(self: 'BishengBase', start_time: float, end_time: float, first_token_cost_time: int,
status: StatusEnum, is_stream: bool = False, result: Any = None):
"""
Upload Buried Point Log
"""
try:
logger.debug("start upload model invoke telemetry log")
input_token, output_token, cache_token, total_token = 0, 0, 0, 0
if self.model_info.model_type in ['llm']:
try:
input_token, output_token, cache_token, total_token = parse_token_usage(result)
except Exception as e:
logger.warning(f"parse token usage failed: {e}")
telemetry_service.log_event_sync(user_id=self.user_id, event_type=BaseTelemetryTypeEnum.MODEL_INVOKE,
trace_id=trace_id_var.get(),
event_data=ModelInvokeEventData(
model_id=self.model_id,
model_name=self.model_name,
model_type=self.model_info.model_type,
model_server_id=self.server_info.id,
model_server_name=self.server_info.name,
app_id=self.app_id,
app_name=self.app_name,
app_type=self.app_type,
start_time=int(start_time),
end_time=int(end_time),
first_token_cost_time=first_token_cost_time,
status=status,
is_stream=is_stream,
input_token=input_token,
output_token=output_token,
cache_token=cache_token,
total_token=total_token,
))
logger.debug("end upload model invoke telemetry log")
except Exception as e:
logger.exception(f"upload telemetry log failed")
def wrapper_bisheng_model_limit_check(func):
"""
Number of calls to check the decorator
"""
@functools.wraps(func)
def wrapper(*args, **kwargs):
self = args[0]
sync_bisheng_model_limit_check(self)
status = LLMModelStatus.NORMAL.value
remark = ""
start_time = time.time()
result = None
telemetry_status = StatusEnum.SUCCESS
telemetry_callback = None
try:
if self.model_info.model_type == 'llm':
telemetry_callback = TelemetryCallback(start_time=start_time)
if kwargs.get('run_manager') is not None:
kwargs['run_manager'].handlers.append(telemetry_callback)
result = func(*args, **kwargs)
return result
except Exception as e:
status = LLMModelStatus.ERROR.value
remark = str(e)
telemetry_status = StatusEnum.FAILED
raise e
finally:
end_time = time.time()
# Avoid blocking the main thread by uploading logs asynchronously using the thread pool
first_token_cost_time = telemetry_callback.first_token_time if telemetry_callback else 0
upload_telemetry_log(self, start_time, end_time, first_token_cost_time, telemetry_status, result=result)
self.sync_update_model_status(status, remark)
return wrapper
def wrapper_bisheng_model_limit_check_async(func):
"""
Number of calls to check the decorator
"""
@functools.wraps(func)
async def wrapper(*args, **kwargs):
self = args[0]
await bisheng_model_limit_check(self)
status = LLMModelStatus.NORMAL.value
remark = ""
start_time = time.time()
telemetry_status = StatusEnum.SUCCESS
result = None
telemetry_callback = None
try:
if self.model_info.model_type == 'llm':
telemetry_callback = TelemetryCallback(start_time=start_time)
if kwargs.get('run_manager') is not None:
kwargs['run_manager'].handlers.append(telemetry_callback)
result = await func(*args, **kwargs)
return result
except Exception as e:
status = LLMModelStatus.ERROR.value
remark = str(e)
telemetry_status = StatusEnum.FAILED
raise e
finally:
end_time = time.time()
first_token_cost_time = telemetry_callback.first_token_time if telemetry_callback else 0
upload_telemetry_log(self, start_time, end_time, first_token_cost_time, telemetry_status, result=result)
await args[0].update_model_status(status, remark)
return wrapper
def wrapper_bisheng_model_generator(func):
"""
Number of calls to check the decorator Decorative Synchronization Builder Functions
"""
@functools.wraps(func)
def wrapper(*args, **kwargs):
self = args[0]
sync_bisheng_model_limit_check(self)
status = LLMModelStatus.NORMAL.value
remark = ""
start_time = time.time()
first_token_cost_time = 0
telemetry_status = StatusEnum.SUCCESS
item = None
try:
for item in func(*args, **kwargs):
yield item
if first_token_cost_time == 0:
first_token_cost_time = int((time.time() - start_time) * 1000)
except Exception as e:
status = LLMModelStatus.ERROR.value
remark = str(e)
telemetry_status = StatusEnum.FAILED
raise e
finally:
end_time = time.time()
upload_telemetry_log(self, start_time, end_time, first_token_cost_time, telemetry_status, True, result=item)
self.sync_update_model_status(status, remark)
return wrapper
def wrapper_bisheng_model_generator_async(func):
"""
Number of calls to check the decorator Decorative Asynchronous Builder Functions
"""
@functools.wraps(func)
async def wrapper(*args, **kwargs):
self = args[0]
await bisheng_model_limit_check(self)
status = LLMModelStatus.NORMAL.value
remark = ""
start_time = time.time()
first_token_cost_time = 0
telemetry_status = StatusEnum.SUCCESS
item = None
try:
async for item in func(*args, **kwargs):
yield item
if first_token_cost_time == 0:
first_token_cost_time = int((time.time() - start_time) * 1000)
except Exception as e:
status = LLMModelStatus.ERROR.value
remark = str(e)
telemetry_status = StatusEnum.FAILED
raise e
finally:
end_time = time.time()
upload_telemetry_log(self, start_time, end_time, first_token_cost_time, telemetry_status, True, result=item)
await self.update_model_status(status, remark)
return wrapper
================================================
FILE: src/backend/bisheng/main.py
================================================
from contextlib import asynccontextmanager
from fastapi import FastAPI, HTTPException, Request, status
from fastapi.exceptions import RequestValidationError
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse, ORJSONResponse
from loguru import logger
from bisheng.api import router, router_rpc
from bisheng.common.errcode import BaseErrorCode
from bisheng.common.exceptions.auth import AuthJWTException
from bisheng.common.init_data import init_default_data
from bisheng.common.services.config_service import settings
from bisheng.core.context import initialize_app_context, close_app_context
from bisheng.core.logger import set_logger_config
from bisheng.services.utils import initialize_services, teardown_services
from bisheng.utils.http_middleware import CustomMiddleware, WebSocketLoggingMiddleware
from bisheng.utils.threadpool import thread_pool
def handle_http_exception(req: Request, exc: Exception) -> ORJSONResponse:
if isinstance(exc, HTTPException):
msg = {
'status_code': exc.status_code,
'status_message': exc.detail['error'] if isinstance(exc.detail, dict) else exc.detail
}
elif isinstance(exc, BaseErrorCode):
data = {'exception': str(exc), **exc.kwargs} if exc.kwargs else {'exception': str(exc)}
msg = {'status_code': exc.code, 'status_message': exc.message,
'data': data}
else:
logger.exception('Unhandled exception')
msg = {'status_code': 500, 'status_message': str(exc)}
logger.error(f'{req.method} {req.url} {str(exc)}')
return ORJSONResponse(content=msg)
def handle_request_validation_error(req: Request, exc: RequestValidationError) -> ORJSONResponse:
msg = {'status_code': status.HTTP_422_UNPROCESSABLE_ENTITY, 'status_message': exc.errors()}
logger.error(f'{req.method} {req.url} {str(exc.errors())[:100]}')
return ORJSONResponse(content=msg)
_EXCEPTION_HANDLERS = {
HTTPException: handle_http_exception,
RequestValidationError: handle_request_validation_error,
BaseErrorCode: handle_http_exception,
Exception: handle_http_exception
}
@asynccontextmanager
async def lifespan(app: FastAPI):
await initialize_app_context(config=settings)
initialize_services()
await init_default_data()
# LangfuseInstance.update()
yield
teardown_services()
thread_pool.tear_down()
await close_app_context()
def create_app():
"""Create the FastAPI app and include the router."""
app = FastAPI(
default_response_class=ORJSONResponse,
exception_handlers=_EXCEPTION_HANDLERS,
lifespan=lifespan,
)
origins = [
'*',
]
@app.get('/health')
def get_health():
return {'status': 'OK'}
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=False,
allow_methods=['*'],
allow_headers=['*'],
)
app.add_middleware(CustomMiddleware)
app.add_middleware(WebSocketLoggingMiddleware)
@app.exception_handler(AuthJWTException)
def authjwt_exception_handler(request: Request, exc: AuthJWTException):
return JSONResponse(status_code=401, content={'detail': str(exc)})
app.include_router(router)
app.include_router(router_rpc)
if settings.debug:
import tracemalloc
tracemalloc.start()
return app
app = create_app()
if __name__ == '__main__':
import uvicorn
set_logger_config(settings.logger_conf)
uvicorn.run(app, host='0.0.0.0', port=7860, workers=1, log_config=None)
================================================
FILE: src/backend/bisheng/mcp_manage/__init__.py
================================================
================================================
FILE: src/backend/bisheng/mcp_manage/clients/__init__.py
================================================
================================================
FILE: src/backend/bisheng/mcp_manage/clients/base.py
================================================
from abc import abstractmethod, ABC
from contextlib import asynccontextmanager
from typing import Any
from mcp import ClientSession
class BaseMcpClient(ABC):
"""
Base class for MCP clients.
"""
@abstractmethod
async def get_transport(self):
raise NotImplementedError("get_mcp_client_transport() must be implemented in subclasses.")
@asynccontextmanager
async def initialize(self):
"""
Initialize the client.
"""
async with self.get_transport() as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
yield session
async def list_tools(self):
async with self.initialize() as client_session:
tools = await client_session.list_tools()
return tools.tools
async def call_tool(self, name: str, arguments: dict[str, Any] | None = None) -> str:
"""
Call a tool.
"""
async with self.initialize() as client_session:
try:
resp = await client_session.call_tool(name, arguments)
except Exception as e:
return f"Tool call failed: {str(e)}"
return resp.model_dump_json()
================================================
FILE: src/backend/bisheng/mcp_manage/clients/sse.py
================================================
from contextlib import asynccontextmanager
from mcp.client.sse import sse_client
from bisheng.mcp_manage.clients.base import BaseMcpClient
class SseClient(BaseMcpClient):
"""
SSE client for connecting to the mcp server.
"""
def __init__(self, url: str, **kwargs):
"""
Initialize the SSE client.
:param url: The URL of the SSE server.
"""
super().__init__()
self.url = url
self.kwargs = kwargs
@asynccontextmanager
async def get_transport(self):
"""
Initialize the SSE client.
"""
async with sse_client(url=self.url, **self.kwargs) as (read, write):
yield read, write
================================================
FILE: src/backend/bisheng/mcp_manage/clients/stdio.py
================================================
from contextlib import asynccontextmanager
from mcp.client.stdio import stdio_client, StdioServerParameters
from bisheng.mcp_manage.clients.base import BaseMcpClient
class StdioClient(BaseMcpClient):
"""
SSE client for connecting to the mcp server.
"""
def __init__(self, **kwargs: dict):
"""
Initialize the SSE client.
:param url: The URL of the SSE server.
"""
super().__init__()
self.server_params = StdioServerParameters(**kwargs)
@asynccontextmanager
async def get_transport(self):
"""
Initialize the SSE client.
"""
async with stdio_client(server=self.server_params) as (read, write):
yield read, write
================================================
FILE: src/backend/bisheng/mcp_manage/clients/streamable.py
================================================
from contextlib import asynccontextmanager
from mcp.client.streamable_http import streamablehttp_client
from bisheng.mcp_manage.clients.base import BaseMcpClient
class StreamableClient(BaseMcpClient):
"""
SSE client for connecting to the mcp server.
"""
def __init__(self, url: str, **kwargs):
"""
Initialize the streamable http client.
:param url: The URL of the streamable server.
"""
super().__init__()
self.url = url
self.kwargs = kwargs
@asynccontextmanager
async def get_transport(self):
"""
Initialize the SSE client.
"""
async with streamablehttp_client(url=self.url, **self.kwargs) as (read, write, _):
yield read, write
================================================
FILE: src/backend/bisheng/mcp_manage/constant.py
================================================
from enum import Enum
class McpClientType(Enum):
SSE = 'sse'
STDIO = 'stdio'
STREAMABLE = 'streamable'
================================================
FILE: src/backend/bisheng/mcp_manage/langchain/__init__.py
================================================
================================================
FILE: src/backend/bisheng/mcp_manage/langchain/tool.py
================================================
import asyncio
import concurrent
import concurrent.futures
from typing import Any
from langchain_core.tools import StructuredTool
from pydantic import BaseModel, ConfigDict
from bisheng.mcp_manage.clients.base import BaseMcpClient
from bisheng_langchain.utils.openapi import convert_openapi_field_value
class McpTool(BaseModel):
model_config = ConfigDict(arbitrary_types_allowed=True)
name: str
description: str
mcp_client: BaseMcpClient
mcp_tool_name: str
arg_schema: dict = {}
def parse_kwargs_schema(self, kwargs: dict) -> None | dict:
"""convert the kwargs field value"""
if not kwargs:
return None
for k, v in kwargs.items():
k_type = self.arg_schema.get("properties", {}).get(k, {}).get("type")
kwargs[k] = convert_openapi_field_value(v, k_type)
return kwargs
def run(self, *args, **kwargs: Any) -> Any:
# todo call async method better when using in event pool
with concurrent.futures.ThreadPoolExecutor() as pool:
future = pool.submit(asyncio.run, self.arun(*args, **kwargs))
resp = future.result()
return resp
async def arun(self, *args, **kwargs: Any) -> Any:
"""Use the tool asynchronously."""
kwargs = self.parse_kwargs_schema(kwargs)
resp = await self.mcp_client.call_tool(self.mcp_tool_name, kwargs)
return resp
@classmethod
def get_mcp_tool(cls, name: str, description: str, mcp_client: BaseMcpClient,
mcp_tool_name: str, arg_schema: Any, **kwargs) -> StructuredTool:
"""Get a tool from the class."""
c = cls(name=name, description=description, mcp_client=mcp_client,
mcp_tool_name=mcp_tool_name, arg_schema=arg_schema)
return StructuredTool(name=c.name,
description=c.description,
func=c.run,
coroutine=c.arun,
args_schema=arg_schema,
**kwargs)
================================================
FILE: src/backend/bisheng/mcp_manage/manager.py
================================================
import json
from bisheng.mcp_manage.clients.base import BaseMcpClient
from bisheng.mcp_manage.clients.sse import SseClient
from bisheng.mcp_manage.clients.stdio import StdioClient
from bisheng.mcp_manage.clients.streamable import StreamableClient
from bisheng.mcp_manage.constant import McpClientType
class ClientManager:
@classmethod
async def connect_mcp_from_json(cls, client_json: dict | str):
""" Get the under the corresponding configurationmcpCONNECT """
return cls.sync_connect_mcp_from_json(client_json)
@classmethod
def sync_connect_mcp_from_json(cls, client_json: dict | str) -> BaseMcpClient:
""" Get the under the corresponding configurationmcpCONNECT """
if isinstance(client_json, str):
client_json = json.loads(client_json)
mcp_servers = client_json['mcpServers']
client_type = McpClientType.SSE.value
client_kwargs = {}
for _, kwargs in mcp_servers.items():
if 'type' in kwargs:
client_type = kwargs.pop('type', McpClientType.SSE.value)
elif 'command' in kwargs:
client_type = McpClientType.STDIO.value
kwargs.pop('name', '')
kwargs.pop('description', '')
client_kwargs = kwargs
break
return cls.sync_connect_mcp(client_type, **client_kwargs)
@classmethod
async def connect_mcp(cls, client_type: str, **kwargs) -> BaseMcpClient:
""" Get the mappingurlright of privacymcpCONNECT """
# Initialize the correspondingclient
return cls.sync_connect_mcp(client_type, **kwargs)
@classmethod
def sync_connect_mcp(cls, client_type: str, **kwargs) -> BaseMcpClient:
# Initialize the correspondingclient
if client_type == McpClientType.SSE.value:
client = SseClient(**kwargs)
elif client_type == McpClientType.STDIO.value:
client = StdioClient(**kwargs)
elif client_type == McpClientType.STREAMABLE.value:
client = StreamableClient(**kwargs)
else:
raise ValueError(f'client_type {client_type} not supported')
return client
================================================
FILE: src/backend/bisheng/open_endpoints/__init__.py
================================================
================================================
FILE: src/backend/bisheng/open_endpoints/api/__init__.py
================================================
================================================
FILE: src/backend/bisheng/open_endpoints/api/dependencies.py
================================================
from fastapi import Depends
from sqlmodel.ext.asyncio.session import AsyncSession
from bisheng.common.dependencies.core_deps import get_db_session
from bisheng.knowledge.domain.repositories.implementations.knowledge_file_repository_impl import \
KnowledgeFileRepositoryImpl
from bisheng.knowledge.domain.repositories.implementations.knowledge_repository_impl import KnowledgeRepositoryImpl
from bisheng.knowledge.domain.repositories.interfaces.knowledge_file_repository import KnowledgeFileRepository
from bisheng.knowledge.domain.repositories.interfaces.knowledge_repository import KnowledgeRepository
from bisheng.knowledge.domain.services.knowledge_file_service import KnowledgeFileService
from bisheng.knowledge.domain.services.knowledge_service import KnowledgeService
async def get_knowledge_repository(
session: AsyncSession = Depends(get_db_session),
) -> KnowledgeRepository:
"""Dapatkan KnowledgeRepositoryInstance Dependencies"""
return KnowledgeRepositoryImpl(session)
async def get_knowledge_file_repository(
session: AsyncSession = Depends(get_db_session),
) -> 'KnowledgeFileRepository':
"""Dapatkan KnowledgeFileRepositoryInstance Dependencies"""
return KnowledgeFileRepositoryImpl(session)
async def get_knowledge_service(
knowledge_repository: KnowledgeRepository = Depends(get_knowledge_repository),
knowledge_file_repository: KnowledgeFileRepository = Depends(get_knowledge_file_repository),
) -> 'KnowledgeService':
"""Dapatkan KnowledgeServiceInstance Dependencies"""
return KnowledgeService(knowledge_repository=knowledge_repository,
knowledge_file_repository=knowledge_file_repository)
async def get_knowledge_file_service(
knowledge_repository: KnowledgeRepository = Depends(get_knowledge_repository),
knowledge_file_repository: KnowledgeFileRepository = Depends(get_knowledge_file_repository),
) -> 'KnowledgeFileService':
"""Dapatkan KnowledgeFileServiceInstance Dependencies"""
return KnowledgeFileService(
knowledge_repository=knowledge_repository,
knowledge_file_repository=knowledge_file_repository,
)
================================================
FILE: src/backend/bisheng/open_endpoints/api/endpoints/__init__.py
================================================
================================================
FILE: src/backend/bisheng/open_endpoints/api/endpoints/assistant.py
================================================
# Login-free assistant related interface
import json
import time
from typing import Optional
from uuid import UUID
from fastapi import APIRouter, HTTPException, Query, Request, WebSocket, WebSocketException
from fastapi import status as http_status
from fastapi.responses import ORJSONResponse, StreamingResponse
from langchain_core.messages import AIMessage, HumanMessage, AIMessageChunk
from loguru import logger
from bisheng.api.services.assistant import AssistantService
from bisheng.api.services.assistant_agent import AssistantAgent
from bisheng.api.v1.chat import chat_manager
from bisheng.api.v1.schemas import (OpenAIChatCompletionReq,
OpenAIChatCompletionResp, OpenAIChoice)
from bisheng.chat.types import WorkType
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum, ApplicationTypeEnum
from bisheng.common.schemas.api import resp_200, PageData
from bisheng.common.schemas.telemetry.event_data_schema import ApplicationAliveEventData, ApplicationProcessEventData
from bisheng.common.services import telemetry_service
from bisheng.common.services.config_service import settings
from bisheng.core.logger import trace_id_var
from bisheng.open_endpoints.domain.utils import get_default_operator
from bisheng.utils import generate_uuid
from bisheng.utils import get_request_ip
router = APIRouter(prefix='/assistant', tags=['OpenAPI', 'Assistant'])
@router.post('/chat/completions')
async def assistant_chat_completions(request: Request, req_data: OpenAIChatCompletionReq):
"""
Compatible openaiInterface format, all errors must return non-http200Status code
Chat with your assistant
Fulfillment needs:
1. Determine if the model invoked by the assistant supports streaming calls
2. If not, follow the original logic
3. If supported andstream=True, with real streaming calls
4. stream=False Or return to the original logic?JSON
"""
assistant_id = UUID(req_data.model).hex
logger.info(
f'act=assistant_chat_completions assistant_id={req_data.model}, stream={req_data.stream}, ip={get_request_ip(request)}'
)
try:
# Get the default user information configured in the system configuration
login_user = get_default_operator()
except Exception as e:
return ORJSONResponse(status_code=500, content=str(e), media_type='application/json')
# Find Assistant Information
try:
assistant_info = await AssistantService.get_assistant_info(assistant_id, login_user)
except Exception as e:
return ORJSONResponse(status_code=500,
content=str(e),
media_type='application/json')
start_time = time.time()
try:
# Overlay Temperature Settings
if req_data.temperature != 0:
assistant_info.temperature = req_data.temperature
chat_history = []
question = ''
# Resolve the conversation history and the user's latest questions
for one in req_data.messages:
if one['role'] == 'user':
chat_history.append(HumanMessage(content=one['content']))
question = one['content']
elif one['role'] == 'assistant':
chat_history.append(AIMessage(content=one['content']))
# Remove user issue from history
if chat_history and chat_history[-1].content == question:
chat_history = chat_history[:-1]
# Initialization Assistantagent
agent = AssistantAgent(assistant_info, '', invoke_user_id=login_user.user_id)
await agent.init_assistant()
# Determine if the model supports streaming calls
model_supports_streaming = _check_model_supports_streaming(agent)
logger.debug(
f'act=assistant_chat_completions model_supports_streaming={model_supports_streaming}, stream={req_data.stream}, llm_type={type(agent.llm)}')
# Streaming is not supported for non-streaming calls or models
if not req_data.stream or not model_supports_streaming:
answer = await agent.run(question, chat_history)
answer = answer[-1].content
openai_resp_id = generate_uuid()
# Package the results asopenaiData Format
openai_resp = OpenAIChatCompletionResp(
id=openai_resp_id,
object='chat.completion',
created=int(time.time()),
model=req_data.model,
choices=[OpenAIChoice(index=0, message={
'role': 'assistant',
'content': answer
})],
)
# Non-streaming direct return results
if not req_data.stream:
return openai_resp
# The user requests streaming but the model does not support it, use pseudo-streaming to return
openai_resp.object = 'chat.completion.chunk'
openai_resp.choices = [OpenAIChoice(index=0, delta={'content': answer})]
async def _pseudo_event_stream():
yield f'data: {openai_resp.json()}\n\n'
yield 'data: [DONE]\n\n'
return StreamingResponse(_pseudo_event_stream(), media_type='text/event-stream')
# Model supports streaming and user-requested streaming, using real streaming calls
openai_resp_id = generate_uuid()
logger.info(f'act=assistant_chat_completions_streaming openai_resp_id={openai_resp_id}')
async def _streaming_event_generator():
"""Real Streaming Event Generator"""
logger.debug(f'[APIStreamed] _streaming_event_generatorto process')
try:
# Use True Streaming Calls
chunk_counter = 0
try:
async for message_chunk in agent.astream(question, chat_history):
chunk_counter += 1
if not message_chunk:
logger.debug(f'Empty message_chunk received')
continue
# Get the latest news
latest_message = message_chunk[-1] if isinstance(message_chunk, list) else message_chunk
if not isinstance(latest_message, AIMessageChunk):
continue
reasoning_content = latest_message.additional_kwargs.get("reasoning_content", "")
content = latest_message.content
chunk_data = {
"id": openai_resp_id,
"object": "chat.completion.chunk",
"created": int(time.time()),
"model": req_data.model,
"choices": [{
"index": 0,
"delta": {"content": content, "reasoning_content": reasoning_content},
"finish_reason": None
}]
}
# Use saferJSONSerialization to avoid transmission truncation
json_str = json.dumps(chunk_data, ensure_ascii=False, separators=(',', ':'))
yield f'data: {json_str}\n\n'
except Exception as astream_error:
logger.exception('[APIStreamed] agent.astream()Error calling')
raise astream_error
logger.info(f'[APIStreamed] astreamLoop ended, total processed{chunk_counter}Pcschunk')
# Send End Signal
end_chunk = {
"id": openai_resp_id,
"object": "chat.completion.chunk",
"created": int(time.time()),
"model": req_data.model,
"choices": [{
"index": 0,
"delta": {},
"finish_reason": "stop"
}]
}
yield f'data: {json.dumps(end_chunk, ensure_ascii=False)}\n\n'
yield 'data: [DONE]\n\n'
except Exception as exc:
logger.error(f'Streaming error: {exc}')
# Send error message
error_chunk = {
"id": openai_resp_id,
"object": "chat.completion.chunk",
"created": int(time.time()),
"model": req_data.model,
"choices": [{
"index": 0,
"delta": {"content": f"Error-free: {str(exc)}"},
"finish_reason": "stop"
}]
}
yield f'data: {json.dumps(error_chunk, ensure_ascii=False)}\n\n'
yield 'data: [DONE]\n\n'
try:
logger.info(f'[APIStreamed] BuatStreamingResponse, generator function: {_streaming_event_generator}')
return StreamingResponse(_streaming_event_generator(),
media_type='text/event-stream')
except Exception as exc:
logger.error(f'StreamingResponse creation error: {exc}')
return ORJSONResponse(status_code=500, content=str(exc))
finally:
end_time = time.time()
await telemetry_service.log_event(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.APPLICATION_ALIVE,
trace_id=trace_id_var.get(),
event_data=ApplicationAliveEventData(
app_id=assistant_id,
app_name=assistant_info.name,
app_type=ApplicationTypeEnum.ASSISTANT,
chat_id='',
start_time=int(start_time),
end_time=int(end_time)))
await telemetry_service.log_event(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.APPLICATION_PROCESS,
trace_id=trace_id_var.get(),
event_data=ApplicationProcessEventData(
app_id=assistant_id,
app_name=assistant_info.name,
app_type=ApplicationTypeEnum.ASSISTANT,
chat_id='',
start_time=int(start_time),
end_time=int(end_time),
process_time=int((end_time - start_time) * 1000)
))
def _check_model_supports_streaming(agent: AssistantAgent) -> bool:
"""
Check whether the model called by the helper supports streaming calls
Args:
agent: Assistant Proxy Instance
Returns:
bool: Does it support streaming calls?
"""
try:
# Othersagentright of privacyLLMDoes it support streaming?
if hasattr(agent, 'llm') and agent.llm:
# OthersBishengLLMright of privacystreamingProperty
if hasattr(agent.llm, 'streaming'):
return agent.llm.streaming
# Check Bottom Layerllmright of privacystreamProperty
elif hasattr(agent.llm, 'llm') and hasattr(agent.llm.llm, 'streaming'):
return agent.llm.llm.streaming
# If it cannot be determined, streaming is supported by default (most modernLLMare supported)
return True
except Exception as e:
logger.warning(f'Failed to check streaming support: {e}')
# Streaming is supported by default when an error occurs
return True
@router.get('/info/{assistant_id}')
async def get_assistant_info(request: Request, assistant_id: UUID):
"""
Getting Helper Information, Use the system configuration indefault_operator.userUser information to verify permissions
"""
assistant_id = assistant_id.hex
logger.info(f'act=get_default_operator assistant_id={assistant_id}, ip={get_request_ip(request)}')
# Determine if the configuration under is turned on
if not settings.get_from_db("default_operator").get("enable_guest_access"):
raise HTTPException(status_code=403, detail="No permission to access")
login_user = get_default_operator()
res = await AssistantService.get_assistant_info(assistant_id, login_user)
return resp_200(data=res)
@router.get('/list', status_code=200)
def get_assistant_list(request: Request,
name: str = Query(default=None, description='assistant name, fuzzy matching, Fuzzy matches with description'),
tag_id: int = Query(default=None, description='labelID'),
page: Optional[int] = Query(default=1, gt=0, description='Page'),
limit: Optional[int] = Query(default=10, gt=0, description='Listings Per Page'),
status: Optional[int] = Query(default=None, description='Is online status'),
user_id: int = None):
"""
Exposed interfaces for obtaining skill information
"""
logger.info(f'public_get_list ip: {request.client.host} user_id:{user_id}')
if not settings.get_from_db("default_operator").get("enable_guest_access"):
raise HTTPException(status_code=403, detail="No permission to access")
login_user = get_default_operator()
data, total = AssistantService.get_assistant(login_user, name, status, tag_id, page, limit)
return resp_200(PageData(data=data, total=total))
@router.websocket('/chat/{assistant_id}')
async def chat(*, websocket: WebSocket, assistant_id: str, chat_id: Optional[str] = None):
"""
Assistant'swsLogin-Free Interface
"""
logger.info(f'act=assistant_chat_ws assistant_id={assistant_id}, ip={get_request_ip(websocket)}')
login_user = get_default_operator()
try:
request = websocket
await chat_manager.dispatch_client(request, assistant_id, chat_id, login_user,
WorkType.GPTS, websocket)
except WebSocketException as exc:
logger.error(f'Websocket exception: {str(exc)}')
await websocket.close(code=http_status.WS_1011_INTERNAL_ERROR, reason=str(exc))
except Exception as exc:
logger.exception(f'Error in chat websocket: {str(exc)}')
message = exc.detail if isinstance(exc, HTTPException) else str(exc)
if 'Could not validate credentials' in str(exc):
await websocket.close(code=http_status.WS_1008_POLICY_VIOLATION, reason='Unauthorized')
else:
await websocket.close(code=http_status.WS_1011_INTERNAL_ERROR, reason=message)
================================================
FILE: src/backend/bisheng/open_endpoints/api/endpoints/chat.py
================================================
import json
from typing import List, Optional
from uuid import UUID
from fastapi import APIRouter, Body, WebSocket, status
from fastapi.middleware.wsgi import WSGIMiddleware
from loguru import logger
a = WSGIMiddleware
from bisheng.api.services.chat_imp import comment_answer
from bisheng.api.services.utils import set_flow_knowledge_id
from bisheng.api.v1.schemas import ChatInput, resp_200
from bisheng.chat.manager import ChatManager
from bisheng.common.services.config_service import settings
from bisheng.core.database import get_sync_db_session
from bisheng.database.models.flow import Flow
from bisheng.database.models.message import ChatMessage, ChatMessageDao
from bisheng.open_endpoints.domain.schemas.message import SyncMessage
from bisheng.processing.process import process_tweaks
router = APIRouter(prefix='/chat', tags=['OpenAPI', 'Chat'])
chat_manager = ChatManager()
expire = 600 # reids 60s Overdue
@router.websocket('/ws/{flow_id}')
async def union_websocket(flow_id: str,
websocket: WebSocket,
chat_id: Optional[str] = None,
tweak: Optional[str] = None,
knowledge_id: Optional[int] = None):
"""Websocket endpoint forF chat."""
if chat_id:
with get_sync_db_session() as session:
db_flow = session.get(Flow, flow_id)
if not db_flow:
await websocket.accept()
message = 'This skill has been deleted'
await websocket.close(code=status.WS_1008_POLICY_VIOLATION, reason=message)
if db_flow.status != 2:
await websocket.accept()
message = 'The current skill is not online and cannot be spoken to directly'
await websocket.close(code=status.WS_1008_POLICY_VIOLATION, reason=message)
graph_data = db_flow.data
try:
if tweak:
tweak = json.loads(tweak)
graph_data = process_tweaks(graph_data, tweak)
# vectordatabase update
if knowledge_id:
set_flow_knowledge_id(graph_data, knowledge_id)
await chat_manager.handle_websocket(
flow_id,
chat_id,
websocket,
settings.get_from_db('default_operator').get('user'),
gragh_data=graph_data,
source="api"
)
except Exception as exc:
logger.exception('union_websocket error: ')
await websocket.close(code=status.WS_1011_INTERNAL_ERROR, reason=str(exc))
# @router.get('/source')
# async def query_source(message_id: int, session: Session = Depends(get_session)):
# """source of message_id"""
# db_recall = session.query(RecallChunk).where(RecallChunk.message_id == message_id).all()
@router.post('/liked', status_code=200)
def like_response(*, data: dict):
message_id = data.get('message_id')
liked = data.get('liked')
with get_sync_db_session() as session:
message = session.get(ChatMessage, message_id)
message.liked = liked
session.add(message)
session.commit()
return {'status_code': 200, 'status_message': 'success'}
@router.post('/solved', status_code=200)
def solve_response(*, data: dict):
chat_id = data.get('chat_id')
solved = data.get('solved')
with get_sync_db_session() as session:
messages = session.query(ChatMessage).where(ChatMessage.chat_id == chat_id).all()
for message in messages:
message.solved = solved
with get_sync_db_session() as session:
session.add(message)
session.commit()
return {'status_code': 200, 'status_message': 'success'}
@router.post('/comment', status_code=200)
def comment(*, data: ChatInput):
comment_answer(data.message_id, data.comment)
return resp_200()
@router.post('/sync/messages', status_code=200)
def sync_message(*,
flow_id: UUID = Body(embed=True),
chat_id: str = Body(embed=True),
message_list: List[SyncMessage] = Body(embed=True),
user_id: int = Body(default=None, embed=True)):
flow_id = flow_id.hex
user_id = user_id if user_id else settings.get_from_db('default_operator').get('user')
batch_message = [
ChatMessage(is_bot=message.is_send,
source=0,
message=message.message,
extra=json.dumps(message.extra),
type='answer',
category='answer',
flow_id=flow_id,
user_id=user_id,
chat_id=chat_id,
create_time=message.create_time) for message in message_list
]
ChatMessageDao.insert_batch(batch_message)
return resp_200()
================================================
FILE: src/backend/bisheng/open_endpoints/api/endpoints/filelib.py
================================================
import asyncio
import json
import os
from typing import Dict, List, Optional
from fastapi import (APIRouter, BackgroundTasks, Body, File, Form, HTTPException, Query, Request,
UploadFile)
from loguru import logger
from starlette.responses import FileResponse
from bisheng.api.services import knowledge_imp
from bisheng.api.services.knowledge import KnowledgeService
from bisheng.api.services.knowledge_imp import (decide_vectorstores, delete_es, delete_vector,
text_knowledge)
from bisheng.api.v1.schemas import (ChunkInput, KnowledgeFileOne, KnowledgeFileProcess,
resp_200, resp_500, ExcelRule)
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum
from bisheng.common.errcode.http_error import ServerError
from bisheng.common.services import telemetry_service
from bisheng.common.services.config_service import settings
from bisheng.core.cache.utils import file_download, save_download_file, async_file_download
from bisheng.core.logger import trace_id_var
from bisheng.database.models.message import ChatMessageDao
from bisheng.interface.embeddings.custom import FakeEmbedding
from bisheng.knowledge.domain.models.knowledge import (KnowledgeCreate, KnowledgeDao, KnowledgeTypeEnum,
KnowledgeUpdate)
from bisheng.knowledge.domain.models.knowledge_file import (QAKnoweldgeDao, QAKnowledgeUpsert)
from bisheng.open_endpoints.domain.schemas.filelib import APIAddQAParam, APIAppendQAParam, QueryQAParam
from bisheng.open_endpoints.domain.utils import get_default_operator, get_default_operator_async
from bisheng.utils.util import sync_func_to_async
# build router
router = APIRouter(prefix='/filelib', tags=['OpenAPI', 'Knowledge'])
@router.post('/', status_code=201)
def create(request: Request, knowledge: KnowledgeCreate):
"""Create Knowledge Base."""
login_user = get_default_operator()
db_knowledge = KnowledgeService.create_knowledge(request, login_user, knowledge)
return resp_200(db_knowledge)
@router.put('/', status_code=201)
def update_knowledge(*, request: Request, knowledge: KnowledgeUpdate):
""" Update Knowledge Base."""
login_user = get_default_operator()
db_knowledge = KnowledgeService.update_knowledge(request, login_user, knowledge)
return resp_200(db_knowledge)
@router.get('/', status_code=200)
async def get_knowledge(*,
request: Request,
knowledge_type: int = Query(default=KnowledgeTypeEnum.NORMAL.value,
alias='type'),
name: str = None,
page_size: Optional[int] = 10,
page_num: Optional[int] = 1):
""" Read all knowledge base information. """
knowledge_type = KnowledgeTypeEnum(knowledge_type)
login_user = get_default_operator()
res, total = await KnowledgeService.get_knowledge(request, login_user, knowledge_type, name,
page_num, page_size)
return resp_200(data={'data': res, 'total': total})
@router.delete('/{knowledge_id}', status_code=200)
def delete_knowledge_api(*, request: Request, knowledge_id: int):
""" Delete Knowledge Base Information. """
login_user = get_default_operator()
KnowledgeService.delete_knowledge(request, login_user, knowledge_id)
return resp_200(message='knowledge deleted successfully')
# Empty all Knowledge Base file contents
@router.delete('/clear/{knowledge_id}', status_code=200)
def clear_knowledge_files(*, request: Request, knowledge_id: int):
""" Empty Knowledge Base Contents. """
login_user = get_default_operator()
KnowledgeService.delete_knowledge(request, login_user, knowledge_id, only_clear=True)
return resp_200(message='knowledge clear successfully')
@router.post('/file/{knowledge_id}')
async def upload_file(
request: Request,
knowledge_id: int,
separator: Optional[List[str]] = Form(default=None,
description='Split text rule, If not passed on, it is the default'),
separator_rule: Optional[List[str]] = Form(
default=None, description='Segmentation before or after the segmentation rule;before/after'),
chunk_size: Optional[int] = Form(default=None, description='Split text length, default if not passed'),
chunk_overlap: Optional[int] = Form(default=None,
description='Split text overlap length, default if not passed'),
callback_url: Optional[str] = Form(default=None, description='Return URL'),
file_url: Optional[str] = Form(default=None, description='File URL'),
file: Optional[UploadFile] = File(default=None, description='Upload file'),
background_tasks: BackgroundTasks = None,
retain_images: Optional[int] = Form(default=1, description='Keep document image'),
force_ocr: Optional[int] = Form(default=0, description='EnableOCR'),
enable_formula: Optional[int] = Form(default=1, description='latexFormula Recognition'),
filter_page_header_footer: Optional[int] = Form(default=0, description='Filter Header Footer'),
excel_rule: Optional[ExcelRule] = Form(default={}, description="excel rule"),
):
if file:
file_name = file.filename
if not file_name:
return resp_500(message='file name must be not empty')
# Cache Local
file_path = await sync_func_to_async(save_download_file)(save_download_file, file.file, 'bisheng', file_name)
else:
file_path, file_name = await async_file_download(file_url)
loging_user = await get_default_operator_async()
req_data = KnowledgeFileProcess(knowledge_id=knowledge_id,
separator=separator,
separator_rule=separator_rule,
chunk_size=chunk_size,
chunk_overlap=chunk_overlap,
retain_images=retain_images,
force_ocr=force_ocr,
enable_formula=enable_formula,
filter_page_header_footer=filter_page_header_footer,
callback_url=callback_url,
file_list=[KnowledgeFileOne(file_path=file_path, excel_rule=excel_rule)])
res = await sync_func_to_async(KnowledgeService.process_knowledge_file)(request=request,
login_user=loging_user,
background_tasks=background_tasks,
req_data=req_data)
return resp_200(data=res[0])
@router.delete('/file/{file_id}', status_code=200)
def delete_knowledge_file(request: Request, file_id: int):
""" Delete files in the Knowledge Base """
login_user = get_default_operator()
KnowledgeService.delete_knowledge_file(request, login_user, [file_id])
return resp_200()
@router.post('/delete_file', status_code=200)
def delete_file_batch_api(request: Request, file_ids: List[int]):
""" Bulk delete knowledge file information """
login_user = get_default_operator()
KnowledgeService.delete_knowledge_file(request, login_user, file_ids)
return resp_200()
@router.get('/file/list', status_code=200)
def get_filelist(request: Request,
knowledge_id: int,
keyword: str = None,
status: List[int] = Query(default=None),
page_size: int = 10,
page_num: int = 1):
""" Get knowledge base file information. """
login_user = get_default_operator()
data, total, flag = KnowledgeService.get_knowledge_files(request, login_user, knowledge_id,
keyword, status, page_num, page_size)
return resp_200(data={'data': data, 'total': total, 'writeable': flag})
@router.post('/chunks')
async def post_chunks(request: Request,
knowledge_id: int = Form(...),
metadata: str = Form(...),
separator: Optional[List[str]] = Form(default=None),
separator_rule: Optional[List[str]] = Form(default=None),
chunk_size: Optional[int] = Form(default=None),
chunk_overlap: Optional[int] = Form(default=None),
file: UploadFile = File(...)):
""" Upload files to the knowledge base and sync the interface """
file_name = file.filename
if not file_name:
return resp_500(message='file name must be not empty')
file_path = await sync_func_to_async(save_download_file)(file.file, 'bisheng', file_name)
login_user = await get_default_operator_async()
req_data = KnowledgeFileProcess(knowledge_id=knowledge_id,
separator=separator,
separator_rule=separator_rule,
chunk_size=chunk_size,
chunk_overlap=chunk_overlap,
file_list=[KnowledgeFileOne(file_path=file_path)],
extra=metadata)
res = await sync_func_to_async(KnowledgeService.sync_process_knowledge_file)(request, login_user, req_data)
return resp_200(data=res[0])
@router.post('/chunks_string')
async def post_string_chunks(request: Request, document: ChunkInput):
""" Get knowledge base file information. """
# String saved to file
content = '\n\n'.join([doc.page_content for doc in document.documents])
content_bytes = bytes(content, encoding='utf-8')
file_name = document.documents[0].metadata.get('source')
file_path = await sync_func_to_async(save_download_file)(content_bytes, 'bisheng', file_name)
login_user = await get_default_operator_async()
req_data = KnowledgeFileProcess(knowledge_id=document.knowledge_id,
separator=['\n\n'],
separator_rule=['after'],
file_list=[KnowledgeFileOne(file_path=file_path)],
extra=json.dumps(document.documents[0].metadata,
ensure_ascii=False))
knowledge, failed_files, process_files, _ = await sync_func_to_async(KnowledgeService.save_knowledge_file)(
login_user, req_data)
if failed_files:
return resp_200(data=failed_files[0])
res = await sync_func_to_async(text_knowledge)(knowledge, process_files[0], document.documents)
return resp_200(data=res)
@router.post('/chunk_clear', status_code=200)
async def clear_tmp_chunks_data(body: Dict):
# Delete via Interfacemilvus、es DATA
flow_id = body.get('flow_id')
chat_id = body.get('chat_id')
if flow_id and not chat_id:
# Clean temporary files under the skill
flow_id = flow_id.replace('-', '')
collection_name = f'tmp_{flow_id}_1'
delete_es(collection_name)
delete_vector(collection_name, None)
if chat_id:
# Query auto-generated
message = ChatMessageDao.get_latest_message_by_chatid(chat_id)
if message:
collection_name = f'tmp_{message.flow_id}_{chat_id}'
delete_es(collection_name)
delete_vector(collection_name, None)
return resp_200()
@router.get('/dump_vector', status_code=200)
def dump_vector_knowledge(collection_name: str, expr: str = None, store: str = 'Milvus'):
# dump vector db
embedding_tmp = FakeEmbedding()
vector_store = decide_vectorstores(collection_name, store, embedding_tmp)
if vector_store and vector_store.col:
fields = [
s.name for s in vector_store.col.schema.fields
if s.name not in ['pk', 'bbox', 'vector']
]
res_list = vector_store.col.query('file_id>1', output_fields=fields)
return resp_200(res_list)
else:
return resp_500('Parameter salah')
@router.get('/download_statistic')
def download_statistic_file(file_path: str):
suffix = file_path.split('.')[-1]
if suffix != 'log':
raise ServerError.http_exception(msg='only .log file supported download')
dir_path = file_path.replace('.log', '')
if dir_path.find(".") != -1 or not dir_path.startswith("/app/data"):
raise ServerError.http_exception(msg='invalid file path, file path must not contain .')
file_name = os.path.basename(file_path)
return FileResponse(file_path, filename=file_name)
@router.post('/add_qa')
def add_qa(*,
knowledge_id: int = Body(embed=True),
data: List[APIAddQAParam] = Body(embed=True),
user_id: Optional[int] = Body(default=None, embed=True)):
user_id = user_id if user_id else settings.get_from_db('default_operator').get('user')
knowledge = KnowledgeDao.query_by_id(knowledge_id)
logger.info('add_qa_data knowledge_id={} size={}', knowledge_id, len(data))
res = []
for item in data:
qa_insert = QAKnowledgeUpsert(knowledge_id=knowledge_id,
questions=[item.question],
answers=item.answer,
user_id=user_id,
extra_meta=json.dumps(item.extra),
source=3)
res.append(knowledge_imp.add_qa(knowledge, qa_insert))
return resp_200(res)
@router.post('/add_relative_qa')
def append_qa(*,
knowledge_id: int = Body(embed=True),
data: APIAppendQAParam = Body(embed=True),
user_id: Optional[int] = Body(default=None, embed=True)):
user_id = user_id if user_id else settings.get_from_db('default_operator').get('user')
knowledge = KnowledgeDao.query_by_id(knowledge_id)
qa_db = QAKnoweldgeDao.get_qa_knowledge_by_primary_id(data.id)
if not qa_db:
return HTTPException(404, detail='qa Right, nothing found.')
t = qa_db.dict()
t['answers'] = json.loads(t['answers'])
qa_insert = QAKnowledgeUpsert.validate(t)
qa_insert.questions.extend(data.relative_questions)
return resp_200(knowledge_imp.add_qa(knowledge, qa_insert))
@router.delete('/qa/{qa_id}', status_code=200)
def delete_qa_data(*, qa_id: int, question: Optional[str] = None):
""" Deleteqa Question to Information """
qa = QAKnoweldgeDao.get_qa_knowledge_by_primary_id(qa_id)
login_user = get_default_operator()
if not qa:
raise HTTPException(status_code=404, detail='qa Does not exist')
if question:
qa.questions = [q for q in qa.questions if q != question]
QAKnoweldgeDao.update(qa)
else:
QAKnoweldgeDao.delete_batch([qa_id])
telemetry_service.log_event_sync(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.DELETE_KNOWLEDGE_FILE,
trace_id=trace_id_var.get())
try:
knowledge = KnowledgeDao.query_by_id(qa.knowledge_id)
knowledge_imp.delete_vector_data(knowledge, file_ids=[qa_id])
if question:
knowledge_imp.QA_save_knowledge(knowledge, qa)
return resp_200()
except Exception as e:
return resp_500(message=f'error e={str(e)}')
@router.post('/update_qa', status_code=200)
def update_qa(
*,
id: int = Body(embed=True),
question: Optional[str] = Body(default=None, embed=True),
original_question: Optional[str] = Body(default=None, embed=True),
answer: Optional[List[str]] = Body(default=None, embed=True),
):
""" Deleteqa Question to Information """
qa = QAKnoweldgeDao.get_qa_knowledge_by_primary_id(id)
if not qa:
raise HTTPException(status_code=404, detail='qa Does not exist')
if original_question:
qa.questions = [q if q != question else question for q in qa.questions]
else:
qa.questions = [question]
if answer:
qa.answers = json.dumps(answer, ensure_ascii=False)
QAKnoweldgeDao.update(qa)
try:
knowledge = KnowledgeDao.query_by_id(qa.knowledge_id)
if question:
knowledge_imp.delete_vector_data(knowledge, file_ids=[id])
knowledge_imp.QA_save_knowledge(knowledge, qa)
return resp_200()
except Exception as e:
return resp_500(message=f'error e={str(e)}')
@router.get('/detail_qa', status_code=200)
def detail_qa(*, id: int):
""" Get questions on information """
qa = QAKnoweldgeDao.get_qa_knowledge_by_primary_id(id)
return resp_200(qa)
@router.post('/query_qa', status_code=200)
def query_qa(QueryQAParam: QueryQAParam):
""" Deleteqa Question to Information """
sources = [1, 2] # 3 Yes apiInverted
qa_list = QAKnoweldgeDao.query_by_condition_v1(source=sources,
create_start=QueryQAParam.timeRange[0],
create_end=QueryQAParam.timeRange[1])
if qa_list:
for q in qa_list:
q.answers = json.loads(q.answers)
return resp_200(qa_list)
================================================
FILE: src/backend/bisheng/open_endpoints/api/endpoints/flow.py
================================================
from uuid import UUID
from fastapi import APIRouter, HTTPException, Query, Request
from loguru import logger
from bisheng.api.services.flow import FlowService
from bisheng.common.services.config_service import settings
from bisheng.open_endpoints.api.endpoints.assistant import get_default_operator
router = APIRouter(prefix='/flows', tags=['OpenAPI', 'FlowV2'])
@router.get('/{flow_id}', status_code=200)
async def get_flow(request: Request, flow_id: UUID):
"""
Exposed interfaces for obtaining skill information
"""
flow_id = flow_id.hex
logger.info(f'public_get_flow ip: {request.client.host} flow_id:{flow_id}')
# Determine if the configuration under is turned on
if not settings.get_from_db("default_operator").get("enable_guest_access"):
raise HTTPException(status_code=403, detail="No permission to access")
default_user = get_default_operator()
return await FlowService.get_one_flow(default_user, flow_id)
@router.get('', status_code=200)
def get_flow_list(request: Request,
name: str = Query(default=None, description='accordingnameFind databases with fuzzy searches for descriptions'),
tag_id: int = Query(default=None, description='labelID'),
page_size: int = Query(default=10, description='Items per page'),
page_num: int = Query(default=1, description='Page'),
status: int = None,
user_id: int = None):
"""
Exposed interfaces for obtaining skill information
"""
logger.info(f'public_get_flow_list ip: {request.client.host} user_id={user_id}')
login_user = get_default_operator()
try:
return FlowService.get_all_flows(login_user, name, status, tag_id, page_num, page_size)
except Exception as e:
logger.error(e)
raise HTTPException(status_code=500, detail='Failed to get skills list')
================================================
FILE: src/backend/bisheng/open_endpoints/api/endpoints/knowledge.py
================================================
from typing import List
from fastapi import APIRouter, Depends, BackgroundTasks, Body
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.schemas.api import UnifiedResponseModel, resp_200
from bisheng.knowledge.domain.schemas.knowledge_schema import AddKnowledgeMetadataFieldsReq, \
UpdateKnowledgeMetadataFieldsReq, ModifyKnowledgeFileMetaDataReq
from bisheng.knowledge.domain.services.knowledge_file_service import KnowledgeFileService
from bisheng.knowledge.domain.services.knowledge_service import KnowledgeService
from bisheng.open_endpoints.api.dependencies import get_knowledge_service, get_knowledge_file_service
from bisheng.open_endpoints.domain.schemas.knowledge import DeleteUserMetadataReq
from bisheng.open_endpoints.domain.utils import get_default_operator_async
router = APIRouter(prefix='/knowledge', tags=['OpenAPI', 'Knowledge'])
# Add Knowledge Metadata Fields Endpoint
@router.post('/add_metadata_fields', response_model=UnifiedResponseModel)
async def add_metadata_fields(*,
default_user: UserPayload = Depends(get_default_operator_async),
req_data: AddKnowledgeMetadataFieldsReq,
knowledge_service: KnowledgeService = Depends(get_knowledge_service)):
"""
Add metadata fields to a knowledge base.
Args:
default_user:
req_data:
knowledge_service:
Returns:
"""
await knowledge_service.add_metadata_fields(default_user, req_data)
return resp_200(data=True)
@router.put("/modify_metadata_fields", response_model=UnifiedResponseModel)
async def update_metadata_fields(*,
default_user: UserPayload = Depends(get_default_operator_async),
req_data: UpdateKnowledgeMetadataFieldsReq,
knowledge_service: KnowledgeService = Depends(get_knowledge_service),
background_tasks: BackgroundTasks):
"""
Update metadata fields in a knowledge base.
Args:
default_user:
req_data:
knowledge_service:
background_tasks:
Returns:
"""
await knowledge_service.update_metadata_fields(
default_user, req_data, background_tasks)
return resp_200(data=True)
@router.delete('/delete_metadata_fields', response_model=UnifiedResponseModel)
async def delete_metadata_fields(*,
default_user: UserPayload = Depends(get_default_operator_async),
knowledge_id: int = Body(..., embed=True, description="Knowledge ID"),
field_names: List[str] = Body(..., embed=True,
description="List of field names to delete"),
knowledge_service: KnowledgeService = Depends(get_knowledge_service),
background_tasks: BackgroundTasks):
"""
Delete metadata fields from a knowledge base.
Args:
default_user:
knowledge_id:
field_names:
knowledge_service:
background_tasks:
Returns:
"""
await knowledge_service.delete_metadata_fields(
default_user, knowledge_id, field_names, background_tasks)
return resp_200(data=True)
@router.get('/get_metadata_fields/{knowledge_id}', response_model=UnifiedResponseModel)
async def list_metadata_fields(*,
default_user: UserPayload = Depends(get_default_operator_async),
knowledge_id: int,
knowledge_service: KnowledgeService = Depends(get_knowledge_service)):
"""
List metadata fields of a knowledge base.
Args:
default_user:
knowledge_id:
knowledge_service:
Returns:
"""
metadata_fields = await knowledge_service.list_metadata_fields(default_user, knowledge_id)
return resp_200(data=metadata_fields)
@router.post('/file/add_user_metadata', response_model=UnifiedResponseModel)
async def add_file_user_metadata(*,
default_user: UserPayload = Depends(get_default_operator_async),
knowledge_id: int = Body(..., embed=True, description="Knowledge ID"),
add_metadata_list: List[ModifyKnowledgeFileMetaDataReq] = Body(...,
description="File User Metadata List"),
knowledge_file_service: KnowledgeFileService = Depends(get_knowledge_file_service)):
"""
Add user metadata to a knowledge file.
Args:
knowledge_id:
add_metadata_list:
default_user:
knowledge_file_service:
Returns:
"""
await knowledge_file_service.add_file_user_metadata(
default_user, knowledge_id, add_metadata_list)
return resp_200(data=True)
@router.put('/file/modify_user_metadata', response_model=UnifiedResponseModel)
async def modify_file_user_metadata(*,
default_user: UserPayload = Depends(get_default_operator_async),
knowledge_id: int = Body(..., embed=True, description="Knowledge ID"),
modify_metadata_list: List[ModifyKnowledgeFileMetaDataReq] = Body(...,
description="File User Metadata List"),
knowledge_file_service: KnowledgeFileService = Depends(
get_knowledge_file_service)):
"""
Modify user metadata of a knowledge file.
Args:
modify_metadata_list:
knowledge_id:
default_user:
knowledge_file_service:
Returns:
"""
await knowledge_file_service.batch_modify_file_user_metadata(default_user, knowledge_id,
modify_metadata_list)
return resp_200(data=True)
@router.delete('/file/delete_user_metadata', response_model=UnifiedResponseModel)
async def delete_file_user_metadata(*,
default_user: UserPayload = Depends(get_default_operator_async),
knowledge_id: int = Body(..., embed=True, description="Knowledge ID"),
delete_user_metadatas: List[DeleteUserMetadataReq] = Body(...,
description="Delete User Metadata List"),
knowledge_file_service: KnowledgeFileService = Depends(
get_knowledge_file_service)):
"""
Delete user metadata from a knowledge file.
Args:
default_user:
knowledge_id:
delete_user_metadatas:
knowledge_file_service:
Returns:
"""
await knowledge_file_service.batch_delete_file_user_metadata(
default_user, knowledge_id, delete_user_metadatas)
return resp_200(data=True)
@router.post('/file/list_user_metadata', response_model=UnifiedResponseModel)
async def list_file_user_metadata(*,
default_user: UserPayload = Depends(get_default_operator_async),
knowledge_id: int = Body(..., embed=True, description="Knowledge ID"),
knowledge_file_ids: List[int] = Body(..., description="Knowledge File IDs"),
knowledge_file_service: KnowledgeFileService = Depends(
get_knowledge_file_service)):
"""
List user metadata of knowledge files.
Args:
default_user:
knowledge_id:
knowledge_file_ids:
knowledge_file_service:
Returns:
"""
metadata_list = await knowledge_file_service.list_knowledge_file_user_metadata(
default_user, knowledge_id, knowledge_file_ids)
return resp_200(data=metadata_list)
================================================
FILE: src/backend/bisheng/open_endpoints/api/endpoints/llm.py
================================================
from fastapi import APIRouter, Request, UploadFile, Body
from bisheng.common.schemas.api import resp_200
from bisheng.llm.domain import LLMService
from bisheng.open_endpoints.domain.utils import get_default_operator
router = APIRouter(prefix='/llm', tags=['OpenAPI', 'llm'])
@router.post('/workbench/asr')
async def invoke_workbench_asr(request: Request, file: UploadFile = None):
""" Call the workbench'sasrModels Convert Voice to Text """
login_user = get_default_operator()
text = await LLMService.invoke_workbench_asr(login_user, file)
return resp_200(data=text)
@router.post('/workbench/tts')
async def invoke_workbench_tts(request: Request, text: str = Body(..., embed=True, description="Text that needs to be synthesized")):
""" Call the workbench'sttsModels Convert text to speech """
login_user = get_default_operator()
audio_url = await LLMService.invoke_workbench_tts(login_user, text)
return resp_200(data=audio_url)
================================================
FILE: src/backend/bisheng/open_endpoints/api/endpoints/workflow.py
================================================
import time
import uuid
from typing import Optional, List
from uuid import UUID
from fastapi import APIRouter, Request, Body, Path, WebSocket, WebSocketException
from fastapi import status as http_status
from fastapi.responses import ORJSONResponse
from loguru import logger
from starlette.responses import StreamingResponse
from bisheng.api.services.workflow import WorkFlowService
from bisheng.api.v1.chat import chat_manager
from bisheng.api.v1.schema.workflow import WorkflowStream, WorkflowEvent, WorkflowEventType
from bisheng.api.v1.schemas import resp_200
from bisheng.chat.types import WorkType
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum, ApplicationTypeEnum
from bisheng.common.errcode.http_error import NotFoundError, ServerError
from bisheng.common.schemas.telemetry.event_data_schema import ApplicationAliveEventData
from bisheng.common.services import telemetry_service
from bisheng.core.logger import trace_id_var
from bisheng.database.models.flow import FlowDao, FlowType
from bisheng.open_endpoints.domain.utils import get_default_operator, get_default_operator_async
from bisheng.worker.workflow.redis_callback import RedisCallback
from bisheng.worker.workflow.tasks import execute_workflow, continue_workflow, workflow_stateful_worker
from bisheng.workflow.common.workflow import WorkflowStatus
router = APIRouter(prefix='/workflow', tags=['OpenAPI', 'Workflow'])
@router.post('/invoke')
async def invoke_workflow(request: Request,
workflow_id: UUID = Body(..., description='Workflow UniqueID'),
override: Optional[dict] = Body(default=None, description='override node params'),
stream: Optional[bool] = Body(default=True, description='Whether to stream calls'),
user_input: Optional[dict] = Body(default=None, description='User input', alias='input'),
message_id: Optional[int] = Body(default=None,
description='MessageID,Once,Unique identifier of user input message'),
session_id: Optional[str] = Body(default=None,
description='会话ID,一次workflow调用的唯一标识')):
login_user = get_default_operator()
workflow_id = workflow_id.hex
# Query workflow information
workflow_info = await FlowDao.aget_flow_by_id(workflow_id)
if not workflow_info:
raise NotFoundError.http_exception()
if workflow_info.flow_type != FlowType.WORKFLOW.value:
raise NotFoundError.http_exception()
# Resolve Outchat_idAndunique_id
if not session_id:
chat_id = uuid.uuid4().hex
unique_id = f'{chat_id}_async_task_id'
session_id = unique_id
else:
chat_id = session_id.split('_', 1)[0]
unique_id = session_id
start_time = time.time()
logger.debug(f'invoke_workflow: {workflow_id}, {session_id}')
workflow = RedisCallback(unique_id, workflow_id, chat_id, login_user.user_id, source="api")
execute_worker = await workflow_stateful_worker.find_task_node(chat_id)
# Query workflow status
status_info = workflow.get_workflow_status()
if not status_info:
# Initialize workflow
workflow.set_workflow_data(workflow_info.data, override=override)
workflow.set_workflow_status(WorkflowStatus.WAITING.value)
# Start asynchronous task
execute_workflow.apply_async([unique_id, workflow_id, chat_id, login_user.user_id, "api"],
queue=execute_worker)
elif status_info['status'] == WorkflowStatus.INPUT.value:
if not user_input:
raise ServerError(msg="workflow waiting for user input, but user input not provided")
# Set user input
if not message_id:
raise ServerError(msg="message_id is required when providing user input")
await workflow.async_set_user_input(user_input, message_id, verify_input=True)
await workflow.async_set_workflow_status(WorkflowStatus.INPUT_OVER.value)
continue_workflow.apply_async([unique_id, workflow_id, chat_id, login_user.user_id, "api"],
queue=execute_worker)
logger.debug(f'waiting workflow over or input: {workflow_id}, {session_id}')
async def handle_workflow_event(event_list: List):
async for event in workflow.get_response_until_break():
if event.category == WorkflowEventType.NodeRun.value:
continue
# Non-streaming requests, filtering out streaming output events generated by nodes
if not stream and event.category == WorkflowEventType.StreamMsg.value and event.type == 'stream':
continue
workflow_stream = WorkflowStream(session_id=session_id,
data=WorkFlowService.convert_chat_response_to_workflow_event(event))
event_list.append(workflow_stream.data)
yield f'data: {workflow_stream.model_dump_json()}\n\n'
tmp_status_info = await workflow.async_get_workflow_status()
if tmp_status_info['status'] in [WorkflowStatus.SUCCESS.value, WorkflowStatus.FAILED.value]:
await workflow.async_clear_workflow_status()
if tmp_status_info['status'] == WorkflowStatus.SUCCESS.value:
workflow_stream = WorkflowStream(session_id=session_id,
data=WorkflowEvent(event=WorkflowEventType.Close.value))
event_list.append(workflow_stream.data)
yield f'data: {workflow_stream.model_dump_json()}\n\n'
res = []
# Non-streaming returns a cumulative list of events
if not stream:
async for _ in handle_workflow_event(res):
pass
end_time = time.time()
await telemetry_service.log_event(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.APPLICATION_ALIVE,
trace_id=trace_id_var.get(),
event_data=ApplicationAliveEventData(
app_id=workflow_id,
app_name=workflow_info.name,
app_type=ApplicationTypeEnum.WORKFLOW,
chat_id=session_id,
start_time=int(start_time),
end_time=int(end_time)))
return resp_200(data={
'session_id': session_id,
'events': res
})
try:
return StreamingResponse(handle_workflow_event(res), media_type='text/event-stream')
except Exception as exc:
logger.exception(f'invoke_workflow error: {str(exc)}')
return ORJSONResponse(status_code=500, content=str(exc))
finally:
end_time = time.time()
await telemetry_service.log_event(user_id=login_user.user_id,
event_type=BaseTelemetryTypeEnum.APPLICATION_ALIVE,
trace_id=trace_id_var.get(),
event_data=ApplicationAliveEventData(
app_id=workflow_id,
app_name=workflow_info.name,
app_type=ApplicationTypeEnum.WORKFLOW,
chat_id=session_id,
start_time=int(start_time),
end_time=int(end_time)))
@router.post('/stop')
async def stop_workflow(request: Request,
workflow_id: UUID = Body(..., description='Workflow UniqueID'),
session_id: str = Body(description='SessionsID,Once,workflowUnique identifier of the call')):
workflow_id = workflow_id.hex
login_user = await get_default_operator_async()
chat_id = session_id.split('_', 1)[0]
unique_id = session_id
workflow = RedisCallback(unique_id, workflow_id, chat_id, login_user.user_id, source="api")
await workflow.async_set_workflow_stop()
return resp_200()
@router.websocket('/chat/{workflow_id}')
async def workflow_ws(*,
workflow_id: UUID = Path(..., description='Workflow UniqueID'),
websocket: WebSocket,
chat_id: Optional[str] = None):
""" Use Exempt Login Link """
try:
workflow_id = workflow_id.hex
# Authorize.jwt_required(auth_from='websocket', websocket=websocket)
# payload = Authorize.get_jwt_subject()
login_user = await get_default_operator_async()
await chat_manager.dispatch_client(websocket, workflow_id, chat_id, login_user, WorkType.WORKFLOW, websocket)
except WebSocketException as exc:
logger.error(f'Websocket exception: {str(exc)}')
await websocket.close(code=http_status.WS_1011_INTERNAL_ERROR, reason=str(exc))
except Exception as e:
logger.error(f'Websocket handle error: {str(e)}')
await websocket.close(code=http_status.WS_1011_INTERNAL_ERROR, reason=str(e))
================================================
FILE: src/backend/bisheng/open_endpoints/api/router.py
================================================
from bisheng.open_endpoints.api.endpoints.assistant import router as assistant_router_rpc
from bisheng.open_endpoints.api.endpoints.chat import router as chat_router_rpc
from bisheng.open_endpoints.api.endpoints.filelib import router as filelib_router_rpc
from bisheng.open_endpoints.api.endpoints.flow import router as flow_router
from bisheng.open_endpoints.api.endpoints.workflow import router as workflow_router_rpc
from .endpoints.knowledge import router as knowledge_router_rpc
__all__ = [
'knowledge_router_rpc', 'chat_router_rpc', 'flow_router',
'assistant_router_rpc', 'workflow_router_rpc', 'filelib_router_rpc'
]
================================================
FILE: src/backend/bisheng/open_endpoints/domain/__init__.py
================================================
================================================
FILE: src/backend/bisheng/open_endpoints/domain/schemas/__init__.py
================================================
================================================
FILE: src/backend/bisheng/open_endpoints/domain/schemas/filelib.py
================================================
from typing import Dict, List, Optional
from pydantic import BaseModel
class APIAddQAParam(BaseModel):
question: str
answer: List[str]
extra: Optional[Dict] = {}
class APIAppendQAParam(BaseModel):
relative_questions: List[str] = []
id: str = None
class QueryQAParam(BaseModel):
timeRange: List[str]
================================================
FILE: src/backend/bisheng/open_endpoints/domain/schemas/knowledge.py
================================================
from pydantic import BaseModel
class DeleteUserMetadataReq(BaseModel):
knowledge_file_id: int
field_names: list[str]
================================================
FILE: src/backend/bisheng/open_endpoints/domain/schemas/message.py
================================================
from pydantic import BaseModel
class SyncMessage(BaseModel):
is_send: bool
message: str
create_time: str
extra: dict
================================================
FILE: src/backend/bisheng/open_endpoints/domain/utils.py
================================================
from fastapi.exceptions import HTTPException
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.services.config_service import settings
from bisheng.user.domain.models.user import UserDao
def get_default_operator() -> UserPayload:
user_id = settings.get_from_db('default_operator').get('user')
if not user_id:
raise HTTPException(status_code=500, detail='Not configureddefault_operatorIIuserConfigure')
# Find default user information
login_user = UserDao.get_user(user_id)
if not login_user:
raise HTTPException(status_code=500, detail='not founddefault_operatorIIuserUser Information')
login_user = UserPayload.init_login_user_sync(user_id=login_user.user_id, user_name=login_user.user_name)
return login_user
async def get_default_operator_async() -> UserPayload:
user_id = (await settings.aget_from_db('default_operator')).get('user')
if not user_id:
raise HTTPException(status_code=500, detail='Not configureddefault_operatorIIuserConfigure')
# Find default user information
login_user = await UserDao.aget_user(user_id)
if not login_user:
raise HTTPException(status_code=500, detail='not founddefault_operatorIIuserUser Information')
login_user = await UserPayload.init_login_user(user_id=login_user.user_id, user_name=login_user.user_name)
return login_user
================================================
FILE: src/backend/bisheng/patches/__init__.py
================================================
================================================
FILE: src/backend/bisheng/patches/langchain_openai.patch
================================================
--- base.py 2024-12-18 19:01:22.000000000 +0800
+++ base_modify.py 2025-02-10 11:11:47.899000000 +0800
@@ -259,6 +259,8 @@
]
except KeyError:
pass
+ if _dict.get('reasoning_content'):
+ additional_kwargs['reasoning_content'] = _dict['reasoning_content']
if role == "user" or default_class == HumanMessageChunk:
return HumanMessageChunk(content=content, id=id_)
================================================
FILE: src/backend/bisheng/pptx2md/__init__.py
================================================
# Copyright 2024 Liu Siyao
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from .entry import convert
from .types import ConversionConfig
__all__ = ['convert', 'ConversionConfig']
================================================
FILE: src/backend/bisheng/pptx2md/__main__.py
================================================
# Copyright 2024 Liu Siyao
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import argparse
import logging
from pathlib import Path
from bisheng.pptx2md.entry import convert
from bisheng.pptx2md.log import setup_logging
from bisheng.pptx2md.types import ConversionConfig
setup_logging(compat_tqdm=True)
logger = logging.getLogger(__name__)
def parse_args() -> ConversionConfig:
arg_parser = argparse.ArgumentParser(description='Convert pptx to markdown')
arg_parser.add_argument('pptx_path', type=Path, help='path to the pptx file to be converted')
arg_parser.add_argument('-t', '--title', type=Path, help='path to the custom title list file')
arg_parser.add_argument('-o', '--output', type=Path, help='path of the output file')
arg_parser.add_argument('-i', '--image-dir', type=Path, help='where to put images extracted')
arg_parser.add_argument('--image-width', type=int, help='maximum image with in px')
arg_parser.add_argument('--disable-image', action="store_true", help='disable image extraction')
arg_parser.add_argument('--disable-wmf',
action="store_true",
help='keep wmf formatted image untouched(avoid exceptions under linux)')
arg_parser.add_argument('--disable-color', action="store_true", help='do not add color HTML tags')
arg_parser.add_argument('--disable-escaping',
action="store_true",
help='do not attempt to escape special characters')
arg_parser.add_argument('--disable-notes', action="store_true", help='do not add presenter notes')
arg_parser.add_argument('--enable-slides', action="store_true", help='deliniate slides `\n---\n`')
arg_parser.add_argument('--try-multi-column', action="store_true", help='try to detect multi-column slides')
arg_parser.add_argument('--wiki', action="store_true", help='generate output as wikitext(TiddlyWiki)')
arg_parser.add_argument('--mdk', action="store_true", help='generate output as madoko markdown')
arg_parser.add_argument('--qmd', action="store_true", help='generate output as quarto markdown presentation')
arg_parser.add_argument('--min-block-size',
type=int,
default=15,
help='the minimum character number of a text block to be converted')
arg_parser.add_argument("--page", type=int, default=None, help="only convert the specified page")
arg_parser.add_argument(
"--keep-similar-titles",
action="store_true",
help="keep similar titles (allow for repeated slide titles - One or more - Add (cont.) to the title)")
args = arg_parser.parse_args()
# Determine output path if not specified
if args.output is None:
extension = '.tid' if args.wiki else '.qmd' if args.qmd else '.md'
args.output = Path(f'out{extension}')
return ConversionConfig(
pptx_path=args.pptx_path,
output_path=args.output,
image_dir=args.image_dir or args.output.parent / 'img',
title_path=args.title,
image_width=args.image_width,
disable_image=args.disable_image,
disable_wmf=args.disable_wmf,
disable_color=args.disable_color,
disable_escaping=args.disable_escaping,
disable_notes=args.disable_notes,
enable_slides=args.enable_slides,
try_multi_column=args.try_multi_column,
is_wiki=args.wiki,
is_mdk=args.mdk,
is_qmd=args.qmd,
min_block_size=args.min_block_size,
page=args.page,
keep_similar_titles=args.keep_similar_titles,
)
def main():
config = parse_args()
convert(config)
if __name__ == '__main__':
main()
================================================
FILE: src/backend/bisheng/pptx2md/entry.py
================================================
# Copyright 2024 Liu Siyao
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import logging
import bisheng.pptx2md.outputter as outputter
from bisheng.pptx2md.parser import parse
from bisheng.pptx2md.types import ConversionConfig
from bisheng.pptx2md.utils import load_pptx, prepare_titles
logger = logging.getLogger(__name__)
def convert(config: ConversionConfig):
if config.title_path:
config.custom_titles = prepare_titles(config.title_path)
prs = load_pptx(config.pptx_path)
logger.info("conversion started")
ast = parse(config, prs)
if str(config.output_path).endswith('.json'):
with open(config.output_path, 'w') as f:
f.write(ast.model_dump_json(indent=2))
logger.info(f'presentation data saved to {config.output_path}')
return
if config.is_wiki:
out = outputter.WikiFormatter(config)
elif config.is_mdk:
out = outputter.MadokoFormatter(config)
elif config.is_qmd:
out = outputter.QuartoFormatter(config)
else:
out = outputter.MarkdownFormatter(config)
out.output(ast)
logger.info(f'converted document saved to {config.output_path}')
================================================
FILE: src/backend/bisheng/pptx2md/image.py
================================================
# Copyright 2024 Liu Siyao
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# --coding:utf-8--
# author = ''
def convert_wmf_to_png(input_file, output_png_path):
"""
Convert WMF data to a PNG file.
"""
# from PIL import ImageGrab
# shape.Copy()
# image = ImageGrab.grabclipboard()
# #image.save('{}.jpg'.format(filename), 'jpeg')
# image.save(output_png_path)
# from PIL import Image
# Image.open(input_file).save(output_png_path)
from wand.image import Image
with Image(filename=input_file) as img:
img.format = 'png'
img.save(filename=output_png_path)
================================================
FILE: src/backend/bisheng/pptx2md/log.py
================================================
# Copyright 2024 Liu Siyao
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import logging
import sys
from tqdm import tqdm
class TqdmStreamHandler(logging.StreamHandler):
def emit(self, record):
try:
msg = self.format(record)
tqdm.write(msg)
self.flush()
except Exception:
self.handleError(record)
def setup_logging(compat_tqdm=True):
root_logger = logging.getLogger()
for handler in root_logger.handlers[:]:
root_logger.removeHandler(handler)
formatter = logging.Formatter(
'%(asctime)s | %(levelname)s | %(name)s | %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
)
if compat_tqdm:
stream_handler = TqdmStreamHandler(sys.stdout)
else:
stream_handler = logging.StreamHandler(sys.stdout)
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(formatter)
root_logger.setLevel(logging.INFO)
root_logger.addHandler(stream_handler)
================================================
FILE: src/backend/bisheng/pptx2md/multi_column.py
================================================
# Copyright 2024 Liu Siyao
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import logging
from operator import attrgetter
from typing import Optional
import numpy as np
import pptx
from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE_TYPE, PP_PLACEHOLDER
from pptx.util import Length
from scipy.optimize import curve_fit
from bisheng.pptx2md.types import MultiColumnSlide
logger = logging.getLogger(__name__)
def normal_pdf(x_vector, mu=0, sigma=1):
return (1 / (sigma * np.sqrt(2 * np.pi))) * np.exp(-((x_vector - mu) / sigma)**2 / 2)
def f(x_vector, theta0, theta1, sigma0, sigma1):
# sigma = 100
return 0.5 * ((1 / (sigma0 * np.sqrt(2 * np.pi))) * np.exp(-((x_vector - theta0) / sigma0)**2 / 2) +
(1 / (sigma1 * np.sqrt(2 * np.pi))) * np.exp(-((x_vector - theta1) / sigma1)**2 / 2))
def f_gauss1(x_vector, theta0, sigma0):
salida = normal_pdf(x_vector, theta0, sigma0)
return (salida)
def f_gauss2(x_vector, theta0, theta1, sigma0, sigma1):
salida = (normal_pdf(x_vector, theta0, sigma0) + normal_pdf(x_vector, theta1, sigma1)) / 2
return (salida)
def f_gauss3(x_vector, theta0, theta1, theta2, sigma0, sigma1, sigma2):
salida = (normal_pdf(x_vector, theta0, sigma0) + normal_pdf(x_vector, theta1, sigma1) +
normal_pdf(x_vector, theta2, sigma2)) / 3
return (salida)
def compute_pdf_overlap(pdf_fun1, pdf_fun2):
fun_array = np.vstack([pdf_fun1, pdf_fun2])
intersection = np.min(fun_array, axis=0)
pdf_overlap = np.sum(intersection)
return (pdf_overlap)
def fit_column_model(x_val, g_val):
q1 = np.quantile(x_val, 0.25)
q2 = np.median(x_val)
q3 = np.quantile(x_val, 0.75)
# print("Using q1: %d, q2: %d, q3: %d"%(q1, q2, q3))
try:
params1, cov1 = curve_fit(f_gauss1, x_val, g_val, [q2, q2 - q1])
except:
params1 = [q2, q2 - 1]
try:
params2, cov2 = curve_fit(f_gauss2, x_val, g_val, [q1, q3, q1, q1])
except:
params2 = [q1, q3, q1, q1]
try:
params3, cov3 = curve_fit(f_gauss3, x_val, g_val, [q1, q2, q3, q1, q2 - q1, q1])
except:
params3 = [q1, q2, q3, q1, q2 - q1, q1]
# Extract area under the curve of the intersection
auc1 = compute_pdf_overlap(f_gauss1(x_val, *params1), g_val)
auc2 = compute_pdf_overlap(f_gauss2(x_val, *params2), g_val)
auc3 = compute_pdf_overlap(f_gauss3(x_val, *params3), g_val)
print("Using auc1: %.2f, auc2: %.2f, auc3: %.2f" % (auc1, auc2, auc3))
if auc1 > 0.86:
print("Selected 1")
return (params1)
elif auc2 > 0.86:
print("Selected 2")
return (params2)
elif auc3 > 0.86:
print("Selected 3")
return (params3)
else:
idx = np.argmax([auc1, auc2, auc3])
all_params = [params1, params2, params3]
print("Selected %d" % (idx + 1))
return (all_params[idx])
def ungroup_shapes(shapes):
res = []
for shape in shapes:
try:
if shape.shape_type == MSO_SHAPE_TYPE.GROUP:
res.extend(ungroup_shapes(shape.shapes))
else:
res.append(shape)
except Exception as e:
print(f'failed to load shape {shape}, skipped. error: {e}')
return res
def is_two_column_text(slide):
if slide.slide_layout.name != "TITLE":
all_mu = list()
all_sigma = list()
for shape in sorted(ungroup_shapes(slide.shapes), key=attrgetter('top', 'left')):
if shape.shape_type == MSO_SHAPE_TYPE.PLACEHOLDER:
if shape.placeholder_format.type == PP_PLACEHOLDER.TITLE:
if shape.has_text_frame:
print('SLIDE TITLE: %s' % shape.text_frame.text)
continue
if shape.shape_type == MSO_SHAPE_TYPE.PICTURE or shape.has_text_frame:
centroid_x = shape.left + shape.width / 2
all_mu.append(Length(centroid_x).mm)
all_sigma.append(Length(shape.width / 4).mm) # Gaussiana - 2sigma
return (all_mu, all_sigma)
else:
return False
def assign_shapes(slide, params, ncols=2, slide_width_mm=1000):
shapes_dict = {"shapes_pre": list(), "shapes_l": list(), "shapes_c": list(), "shapes_r": list()}
shapes = sorted(ungroup_shapes(slide.shapes), key=attrgetter('top', 'left'))
print("Ncols is %d" % ncols)
if ncols == 1:
shapes_dict["shapes_pre"] = sorted(shapes,
key=lambda x: x.shape_type == MSO_SHAPE_TYPE.PLACEHOLDER,
reverse=True)
return (shapes_dict)
elif ncols == 2:
param_means = params[0:2]
param_sds = params[2:]
elif ncols == 3:
param_means = params[0:3]
param_sds = params[3:]
else:
raise (ValueError, "Error in the number of columns")
x_vector = np.arange(1, slide_width_mm)
for shape in slide.shapes:
if shape.shape_type == MSO_SHAPE_TYPE.PLACEHOLDER:
if shape.placeholder_format.type == PP_PLACEHOLDER.TITLE:
if shape.has_text_frame:
print('SLIDE TITLE: %s' % shape.text_frame.text)
shapes_dict["shapes_pre"].insert(0, shape)
else:
shapes_dict["shapes_pre"].append(shape)
continue
if shape.shape_type == MSO_SHAPE_TYPE.PICTURE or shape.has_text_frame:
centroid_x = shape.left + shape.width / 2
curr_mu = Length(centroid_x).mm
curr_sigma = Length(shape.width / 4).mm # Gaussian - 2sigma
area_u_c = np.zeros(ncols)
for idx, param_mu in enumerate(param_means):
area_u_c[idx] = compute_pdf_overlap(normal_pdf(x_vector, mu=param_mu, sigma=param_sds[idx]),
normal_pdf(x_vector, curr_mu, curr_sigma))
max_score_column = np.argmax(area_u_c)
if max_score_column == 0:
shapes_dict["shapes_l"].append(shape)
elif max_score_column == 1:
if ncols == 2:
shapes_dict["shapes_r"].append(shape)
elif ncols == 3:
shapes_dict["shapes_c"].append(shape)
else:
raise (ValueError, "Not allowed number of columns")
elif max_score_column == 2:
shapes_dict["shapes_r"].append(shape)
else:
raise (ValueError, "Max number of columns does not correspond to the number of columns")
return (shapes_dict)
def get_multi_column_slide_if_present(prs: Presentation, raw_slide, process_shapes) -> Optional[MultiColumnSlide]:
pdf_modelo = is_two_column_text(raw_slide)
if not pdf_modelo:
return None
slide_width_mm = pptx.util.Length(prs.slide_width)
t_vector = np.arange(1, slide_width_mm)
# Model to infer number of columns
salida = map(lambda mu, sigma: normal_pdf(t_vector, mu, sigma), pdf_modelo[0], pdf_modelo[1])
sum_of_gaussian = np.mean(list(salida), axis=0)
parameters = fit_column_model(t_vector, sum_of_gaussian)
num_cols = int(len(parameters) / 2)
if num_cols == 1:
return None
slide = MultiColumnSlide(preface=[], columns=[], notes=[])
dict_shapes = assign_shapes(raw_slide, parameters, num_cols, slide_width_mm=slide_width_mm)
slide.preface = process_shapes(dict_shapes["shapes_pre"])
if num_cols == 2:
slide.columns = [process_shapes(dict_shapes["shapes_l"]), process_shapes(dict_shapes["shapes_r"])]
elif num_cols == 3:
slide.columns = [
process_shapes(dict_shapes["shapes_l"]),
process_shapes(dict_shapes["shapes_c"]),
process_shapes(dict_shapes["shapes_r"])
]
return slide
================================================
FILE: src/backend/bisheng/pptx2md/outputter.py
================================================
# Copyright 2024 Liu Siyao
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import os
import re
import urllib.parse
from typing import List
from rapidfuzz import fuzz
from bisheng.pptx2md.types import ConversionConfig, ElementType, ParsedPresentation, SlideElement, SlideType, TextRun
from bisheng.pptx2md.utils import rgb_to_hex
class Formatter:
def __init__(self, config: ConversionConfig):
os.makedirs(config.output_path.parent, exist_ok=True)
self.ofile = open(config.output_path, 'w', encoding='utf8')
self.config = config
def output(self, presentation_data: ParsedPresentation):
self.put_header()
last_element = None
last_title = None
for slide_idx, slide in enumerate(presentation_data.slides):
all_elements = []
if slide.type == SlideType.General:
all_elements = slide.elements
elif slide.type == SlideType.MultiColumn:
all_elements = slide.preface + slide.columns
for element in all_elements:
if last_element and last_element.type == ElementType.ListItem and element.type != ElementType.ListItem:
self.put_list_footer()
match element.type:
case ElementType.Title:
element.content = element.content.strip()
if element.content:
if last_title and last_title.level == element.level and fuzz.ratio(
last_title.content, element.content, score_cutoff=92):
# skip if the title is the same as the last one
# Allow for repeated slide titles - One or more - Add (cont.) to the title
if self.config.keep_similar_titles:
self.put_title(f'{element.content} (cont.)', element.level)
else:
self.put_title(element.content, element.level)
last_title = element
case ElementType.ListItem:
if not (last_element and last_element.type == ElementType.ListItem):
self.put_list_header()
self.put_list(self.get_formatted_runs(element.content), element.level)
case ElementType.Paragraph:
self.put_para(self.get_formatted_runs(element.content))
case ElementType.Image:
self.put_image(element.path, element.width)
case ElementType.Table:
self.put_table([[self.get_formatted_runs(cell) for cell in row] for row in element.content])
last_element = element
if not self.config.disable_notes and slide.notes:
self.put_para('---')
for note in slide.notes:
self.put_para(note)
if slide_idx < len(presentation_data.slides) - 1 and self.config.enable_slides:
self.put_para("\n---\n")
self.close()
def put_header(self):
pass
def put_title(self, text, level):
pass
def put_list(self, text, level):
pass
def put_list_header(self):
self.put_para('')
def put_list_footer(self):
self.put_para('')
def get_formatted_runs(self, runs: List[TextRun]):
res = ''
for run in runs:
text = run.text
if text == '':
continue
if not self.config.disable_escaping:
text = self.get_escaped(text)
if run.style.hyperlink:
text = self.get_hyperlink(text, run.style.hyperlink)
if run.style.is_accent:
text = self.get_accent(text)
elif run.style.is_strong:
text = self.get_strong(text)
if run.style.color_rgb and not self.config.disable_color:
text = self.get_colored(text, run.style.color_rgb)
res += text
return res.strip()
def put_para(self, text):
pass
def put_image(self, path, max_width):
pass
def put_table(self, table):
pass
def get_accent(self, text):
pass
def get_strong(self, text):
pass
def get_colored(self, text, rgb):
pass
def get_hyperlink(self, text, url):
pass
def get_escaped(self, text):
pass
def write(self, text):
self.ofile.write(text)
def flush(self):
self.ofile.flush()
def close(self):
self.ofile.close()
class MarkdownFormatter(Formatter):
# write outputs to markdown
def __init__(self, config: ConversionConfig):
super().__init__(config)
self.esc_re1 = re.compile(r'([\\\*`!_\{\}\[\]\(\)#\+-\.])')
self.esc_re2 = re.compile(r'(<[^>]+>)')
def put_title(self, text, level):
self.ofile.write('#' * level + ' ' + text + '\n\n')
def put_list(self, text, level):
self.ofile.write(' ' * level + '* ' + text.strip() + '\n')
def put_para(self, text):
self.ofile.write(text + '\n\n')
def put_image(self, path, max_width=None):
if max_width is None:
self.ofile.write(f'})\n\n')
else:
self.ofile.write(f' \n\n')
def put_table(self, table):
gen_table_row = lambda row: '| ' + ' | '.join([c.replace('\n', ' ') for c in row]) + ' |'
self.ofile.write(gen_table_row(table[0]) + '\n')
self.ofile.write(gen_table_row([':-:' for _ in table[0]]) + '\n')
self.ofile.write('\n'.join([gen_table_row(row) for row in table[1:]]) + '\n\n')
def get_accent(self, text):
return ' _' + text + '_ '
def get_strong(self, text):
return ' __' + text + '__ '
def get_colored(self, text, rgb):
return ' %s ' % (rgb_to_hex(rgb), text)
def get_hyperlink(self, text, url):
return '[' + text + '](' + url + ')'
def esc_repl(self, match):
return '\\' + match.group(0)
def get_escaped(self, text):
text = re.sub(self.esc_re1, self.esc_repl, text)
text = re.sub(self.esc_re2, self.esc_repl, text)
return text
class WikiFormatter(Formatter):
# write outputs to wikitext
def __init__(self, config: ConversionConfig):
super().__init__(config)
self.esc_re = re.compile(r'<([^>]+)>')
def put_title(self, text, level):
self.ofile.write('!' * level + ' ' + text + '\n\n')
def put_list(self, text, level):
self.ofile.write('*' * (level + 1) + ' ' + text.strip() + '\n')
def put_para(self, text):
self.ofile.write(text + '\n\n')
def put_image(self, path, max_width):
if max_width is None:
self.ofile.write(f' \n\n')
else:
self.ofile.write(f' \n\n')
def get_accent(self, text):
return ' __' + text + '__ '
def get_strong(self, text):
return ' \'\'' + text + '\'\' '
def get_colored(self, text, rgb):
return ' @@color:%s; %s @@ ' % (rgb_to_hex(rgb), text)
def get_hyperlink(self, text, url):
return '[[' + text + '|' + url + ']]'
def esc_repl(self, match):
return "''''" + match.group(0)
def get_escaped(self, text):
text = re.sub(self.esc_re, self.esc_repl, text)
return text
class MadokoFormatter(Formatter):
# write outputs to madoko markdown
def __init__(self, config: ConversionConfig):
super().__init__(config)
self.ofile.write('[TOC]\n\n')
self.esc_re1 = re.compile(r'([\\\*`!_\{\}\[\]\(\)#\+-\.])')
self.esc_re2 = re.compile(r'(<[^>]+>)')
def put_title(self, text, level):
self.ofile.write('#' * level + ' ' + text + '\n\n')
def put_list(self, text, level):
self.ofile.write(' ' * level + '* ' + text.strip() + '\n')
def put_para(self, text):
self.ofile.write(text + '\n\n')
def put_image(self, path, max_width):
if max_width is None:
self.ofile.write(f' \n\n')
elif max_width < 500:
self.ofile.write(f' \n\n')
else:
self.ofile.write('~ Figure {caption: image caption}\n')
self.ofile.write('{width:%spx;}\n' % (path, max_width))
self.ofile.write('~\n\n')
def get_accent(self, text):
return ' _' + text + '_ '
def get_strong(self, text):
return ' __' + text + '__ '
def get_colored(self, text, rgb):
return ' %s ' % (rgb_to_hex(rgb), text)
def get_hyperlink(self, text, url):
return '[' + text + '](' + url + ')'
def esc_repl(self, match):
return '\\' + match.group(0)
def get_escaped(self, text):
text = re.sub(self.esc_re1, self.esc_repl, text)
text = re.sub(self.esc_re2, self.esc_repl, text)
return text
class QuartoFormatter(Formatter):
# write outputs to quarto markdown - reveal js
def __init__(self, config: ConversionConfig):
super().__init__(config)
self.esc_re1 = re.compile(r'([\\\*`!_\{\}\[\]\(\)#\+-\.])')
self.esc_re2 = re.compile(r'(<[^>]+>)')
def output(self, presentation_data: ParsedPresentation):
self.put_header()
last_title = None
def put_elements(elements: List[SlideElement]):
nonlocal last_title
last_element = None
for element in elements:
if last_element and last_element.type == ElementType.ListItem and element.type != ElementType.ListItem:
self.put_list_footer()
match element.type:
case ElementType.Title:
element.content = element.content.strip()
if element.content:
if last_title and last_title.level == element.level and fuzz.ratio(
last_title.content, element.content, score_cutoff=92):
# skip if the title is the same as the last one
# Allow for repeated slide titles - One or more - Add (cont.) to the title
if self.config.keep_similar_titles:
self.put_title(f'{element.content} (cont.)', element.level)
else:
self.put_title(element.content, element.level)
last_title = element
case ElementType.ListItem:
if not (last_element and last_element.type == ElementType.ListItem):
self.put_list_header()
self.put_list(self.get_formatted_runs(element.content), element.level)
case ElementType.Paragraph:
self.put_para(self.get_formatted_runs(element.content))
case ElementType.Image:
self.put_image(element.path, element.width)
case ElementType.Table:
self.put_table([[self.get_formatted_runs(cell) for cell in row] for row in element.content])
last_element = element
for slide_idx, slide in enumerate(presentation_data.slides):
if slide.type == SlideType.General:
put_elements(slide.elements)
elif slide.type == SlideType.MultiColumn:
put_elements(slide.preface)
if len(slide.columns) == 2:
width = '50%'
elif len(slide.columns) == 3:
width = '33%'
else:
raise ValueError(f'Unsupported number of columns: {len(slide.columns)}')
self.put_para(':::: {.columns}')
for column in slide.columns:
self.put_para(f'::: {{.column width="{width}"}}')
put_elements(column)
self.put_para(':::')
self.put_para('::::')
if not self.config.disable_notes and slide.notes:
self.put_para("::: {.notes}")
for note in slide.notes:
self.put_para(note)
self.put_para(":::")
if slide_idx < len(presentation_data.slides) - 1 and self.config.enable_slides:
self.put_para("\n---\n")
self.close()
def put_header(self):
self.ofile.write('''---
title: "Presentation Title"
author: "Author"
format:
revealjs:
slide-number: c/t
width: 1600
height: 900
logo: img/logo.png
footer: "Organization"
incremental: true
theme: [simple]
---
''')
def put_title(self, text, level):
self.ofile.write('#' * level + ' ' + text + '\n\n')
def put_list(self, text, level):
self.ofile.write(' ' * level + '* ' + text.strip() + '\n')
def put_para(self, text):
self.ofile.write(text + '\n\n')
def put_image(self, path, max_width=None):
if max_width is None:
self.ofile.write(f'})\n\n')
else:
self.ofile.write(f' \n\n')
def put_table(self, table):
gen_table_row = lambda row: '| ' + ' | '.join([c.replace('\n', ' ') for c in row]) + ' |'
self.ofile.write(gen_table_row(table[0]) + '\n')
self.ofile.write(gen_table_row([':-:' for _ in table[0]]) + '\n')
self.ofile.write('\n'.join([gen_table_row(row) for row in table[1:]]) + '\n\n')
def get_accent(self, text):
return ' _' + text + '_ '
def get_strong(self, text):
return ' __' + text + '__ '
def get_colored(self, text, rgb):
return ' %s ' % (rgb_to_hex(rgb), text)
def get_hyperlink(self, text, url):
return '[' + text + '](' + url + ')'
def esc_repl(self, match):
return '\\' + match.group(0)
def get_escaped(self, text):
text = re.sub(self.esc_re1, self.esc_repl, text)
text = re.sub(self.esc_re2, self.esc_repl, text)
return text
================================================
FILE: src/backend/bisheng/pptx2md/parser.py
================================================
# Copyright 2024 Liu Siyao
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from __future__ import print_function
import logging
import os
from functools import partial
from operator import attrgetter
from typing import List, Union
import pptx
from PIL import Image
from pptx import Presentation
from pptx.enum.dml import MSO_COLOR_TYPE, MSO_THEME_COLOR
from pptx.enum.shapes import MSO_SHAPE_TYPE, PP_PLACEHOLDER
from pptx.parts.image import Image as PPTXImage, Image
from pptx.util import lazyproperty
from rapidfuzz import process as fuze_process
from tqdm import tqdm
from bisheng.pptx2md.multi_column import get_multi_column_slide_if_present
from bisheng.pptx2md.types import (
ConversionConfig,
GeneralSlide,
ImageElement,
ListItemElement,
ParagraphElement,
ParsedPresentation,
SlideElement,
TableElement,
TextRun,
TextStyle,
TitleElement,
)
logger = logging.getLogger(__name__)
picture_count = 0
# CustomizableImageResolvepptxIssue with some image formats not supported in
class CustomImage(PPTXImage):
def __init__(self, blob: bytes, filename: str = None):
super(CustomImage, self).__init__(blob=blob, filename=filename)
@lazyproperty
def ext(self) -> str:
"""Canonical file extension for this image e.g. `'png'`.
The returned extension is all lowercase and is the canonical extension for the content type
of this image, regardless of what extension may have been used in its filename, if any.
"""
ext_map = {
"BMP": "bmp",
"GIF": "gif",
"JPEG": "jpg",
"PNG": "png",
"TIFF": "tiff",
"WMF": "wmf",
"WEBP": "webp",
}
format = self._format
if format not in ext_map:
tmpl = "unsupported image format, expected one of: %s, got '%s'"
raise ValueError(tmpl % (ext_map.keys(), format))
return ext_map[format]
def is_title(shape):
if shape.is_placeholder and (shape.placeholder_format.type == PP_PLACEHOLDER.TITLE or
shape.placeholder_format.type == PP_PLACEHOLDER.SUBTITLE or
shape.placeholder_format.type == PP_PLACEHOLDER.VERTICAL_TITLE or
shape.placeholder_format.type == PP_PLACEHOLDER.CENTER_TITLE):
return True
return False
def is_text_block(config: ConversionConfig, shape):
if shape.has_text_frame:
if shape.is_placeholder and shape.placeholder_format.type == PP_PLACEHOLDER.BODY:
return True
if len(shape.text) > config.min_block_size:
return True
return False
def is_list_block(shape) -> bool:
levels = []
for para in shape.text_frame.paragraphs:
if para.level not in levels:
levels.append(para.level)
if para.level != 0 or len(levels) > 1:
return True
return False
def is_accent(font):
if font.underline or font.italic or (
font.color.type == MSO_COLOR_TYPE.SCHEME and
(font.color.theme_color == MSO_THEME_COLOR.ACCENT_1 or font.color.theme_color == MSO_THEME_COLOR.ACCENT_2 or
font.color.theme_color == MSO_THEME_COLOR.ACCENT_3 or font.color.theme_color == MSO_THEME_COLOR.ACCENT_4 or
font.color.theme_color == MSO_THEME_COLOR.ACCENT_5 or font.color.theme_color == MSO_THEME_COLOR.ACCENT_6)):
return True
return False
def is_strong(font):
if font.bold or (font.color.type == MSO_COLOR_TYPE.SCHEME and (font.color.theme_color == MSO_THEME_COLOR.DARK_1 or
font.color.theme_color == MSO_THEME_COLOR.DARK_2)):
return True
return False
def get_text_runs(para) -> List[TextRun]:
runs = []
for run in para.runs:
result = TextRun(text=run.text, style=TextStyle())
if result.text == '':
continue
try:
if run.hyperlink.address:
result.style.hyperlink = run.hyperlink.address
except:
result.style.hyperlink = 'error:ppt-link-parsing-issue'
if is_accent(run.font):
result.style.is_accent = True
if is_strong(run.font):
result.style.is_strong = True
if run.font.color.type == MSO_COLOR_TYPE.RGB:
result.style.color_rgb = run.font.color.rgb
runs.append(result)
return runs
def process_title(config: ConversionConfig, shape, slide_idx) -> TitleElement:
text = shape.text_frame.text.strip()
if config.custom_titles:
res = fuze_process.extractOne(text, config.custom_titles.keys(), score_cutoff=92)
if not res:
return TitleElement(content=text.strip(), level=max(config.custom_titles.values()) + 1)
else:
logger.info(f'Title in slide {slide_idx} "{text}" is converted to "{res[0]}" as specified in title file.')
return TitleElement(content=res[0].strip(), level=config.custom_titles[res[0]])
else:
return TitleElement(content=text.strip(), level=1)
def process_text_blocks(config: ConversionConfig, shape, slide_idx) -> List[Union[ListItemElement, ParagraphElement]]:
results = []
if is_list_block(shape):
for para in shape.text_frame.paragraphs:
if para.text.strip() == '':
continue
text = get_text_runs(para)
results.append(ListItemElement(content=text, level=para.level))
else:
# paragraph block
for para in shape.text_frame.paragraphs:
if para.text.strip() == '':
continue
text = get_text_runs(para)
results.append(ParagraphElement(content=text))
return results
def process_picture(config: ConversionConfig, shape, slide_idx) -> Union[ImageElement, None]:
if config.disable_image:
return None
global picture_count
image = CustomImage(shape.image.blob, shape.image.filename)
file_prefix = ''.join(os.path.basename(config.pptx_path).split('.')[:-1])
pic_name = file_prefix + f'_{picture_count}'
pic_ext = image.ext
if not os.path.exists(config.image_dir):
os.makedirs(config.image_dir)
output_path = config.image_dir / f'{pic_name}.{pic_ext}'
common_path = os.path.commonpath([config.output_path, config.image_dir])
img_outputter_path = os.path.relpath(output_path, common_path).replace('\\', '/')
with open(output_path, 'wb') as f:
f.write(image.blob)
picture_count += 1
# normal images
if pic_ext != 'wmf':
return ImageElement(path=img_outputter_path, width=config.image_width)
# wmf images, try to convert, if failed, output as original
try:
try:
from PIL import Image
Image.open(output_path).save(os.path.splitext(output_path)[0] + '.png')
return ImageElement(path=os.path.splitext(img_outputter_path)[0] + '.png', width=config.image_width)
except Exception: # Image failed, try another
from wand.image import Image
with Image(filename=output_path) as img:
img.format = 'png'
img.save(filename=os.path.splitext(output_path)[0] + '.png')
logger.info(f'Image {output_path} in slide {slide_idx} converted to png.')
return ImageElement(path=os.path.splitext(img_outputter_path)[0] + '.png', width=config.image_width)
except Exception:
logger.warning(f'Cannot convert wmf image {output_path} in slide {slide_idx} to png, skipped.')
return None
def process_table(config: ConversionConfig, shape, slide_idx) -> Union[TableElement, None]:
table = [[sum([get_text_runs(p)
for p in cell.text_frame.paragraphs], [])
for cell in row.cells]
for row in shape.table.rows]
if len(table) > 0:
return TableElement(content=table)
return None
def ungroup_shapes(shapes) -> List[SlideElement]:
res = []
for shape in shapes:
try:
if shape.shape_type == MSO_SHAPE_TYPE.GROUP:
res.extend(ungroup_shapes(shape.shapes))
else:
res.append(shape)
except Exception as e:
logger.warning(f'failed to load shape {shape}, skipped. error: {e}')
return res
def process_shapes(config: ConversionConfig, current_shapes, slide_id: int) -> List[SlideElement]:
results = []
for shape in current_shapes:
if is_title(shape):
results.append(process_title(config, shape, slide_id))
elif is_text_block(config, shape):
results.extend(process_text_blocks(config, shape, slide_id))
elif shape.shape_type == MSO_SHAPE_TYPE.PICTURE:
try:
pic = process_picture(config, shape, slide_id)
if pic:
results.append(pic)
except AttributeError as e:
logger.warning(f'Failed to process picture, skipped: {e}')
elif shape.shape_type == MSO_SHAPE_TYPE.TABLE:
table = process_table(config, shape, slide_id)
if table:
results.append(table)
else:
try:
ph = shape.placeholder_format
if ph.type == PP_PLACEHOLDER.OBJECT and hasattr(shape, "image") and getattr(shape, "image"):
pic = process_picture(config, shape, slide_id)
if pic:
results.append(pic)
except:
pass
return results
def parse(config: ConversionConfig, prs: Presentation) -> ParsedPresentation:
result = ParsedPresentation(slides=[])
for idx, slide in enumerate(tqdm(prs.slides, desc='Converting slides')):
if config.page is not None and idx + 1 != config.page:
continue
shapes = []
try:
shapes = sorted(ungroup_shapes(slide.shapes), key=attrgetter('top', 'left'))
except:
logger.warning('Bad shapes encountered in this slide. Please check or remove them and try again.')
logger.warning('shapes:')
try:
for sp in slide.shapes:
logger.warning(sp.shape_type)
logger.warning(sp.top, sp.left, sp.width, sp.height)
except:
logger.warning('failed to print all bad shapes.')
if not config.try_multi_column:
result_slide = GeneralSlide(elements=process_shapes(config, shapes, idx + 1))
else:
multi_column_slide = get_multi_column_slide_if_present(
prs, slide, partial(process_shapes, config=config, slide_id=idx + 1))
if multi_column_slide:
result_slide = multi_column_slide
else:
result_slide = GeneralSlide(elements=process_shapes(config, shapes, idx + 1))
if not config.disable_notes and slide.has_notes_slide:
text = slide.notes_slide.notes_text_frame.text
if text:
result_slide.notes.append(text)
result.slides.append(result_slide)
return result
================================================
FILE: src/backend/bisheng/pptx2md/types.py
================================================
# Copyright 2024 Liu Siyao
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from __future__ import annotations
from enum import Enum
from pathlib import Path
from typing import List, Optional, Union
from pydantic import BaseModel
class ConversionConfig(BaseModel):
"""Configuration for PowerPoint to Markdown conversion."""
pptx_path: Path
"""Path to the pptx file to be converted"""
output_path: Path
"""Path of the output file"""
image_dir: Optional[Path]
"""Where to put images extracted"""
title_path: Optional[Path] = None
"""Path to the custom title list file"""
image_width: Optional[int] = None
"""Maximum image width in px"""
disable_image: bool = False
"""Disable image extraction"""
disable_wmf: bool = False
"""Keep wmf formatted image untouched (avoid exceptions under linux)"""
disable_color: bool = False
"""Do not add color HTML tags"""
disable_escaping: bool = False
"""Do not attempt to escape special characters"""
disable_notes: bool = False
"""Do not add presenter notes"""
enable_slides: bool = False
"""Deliniate slides with `\n---\n`"""
is_wiki: bool = False
"""Generate output as wikitext (TiddlyWiki)"""
is_mdk: bool = False
"""Generate output as madoko markdown"""
is_qmd: bool = False
"""Generate output as quarto markdown presentation"""
min_block_size: int = 15
"""The minimum character number of a text block to be converted"""
page: Optional[int] = None
"""Only convert the specified page"""
custom_titles: dict[str, int] = {}
"""Mapping of custom titles to their heading levels"""
try_multi_column: bool = False
"""Try to detect multi-column slides"""
keep_similar_titles: bool = False
"""Keep similar titles (allow for repeated slide titles - One or more - Add (cont.) to the title)"""
class ElementType(str, Enum):
Title = "Title"
ListItem = "ListItem"
Paragraph = "Paragraph"
Image = "Image"
Table = "Table"
class TextStyle(BaseModel):
is_accent: bool = False
is_strong: bool = False
color_rgb: Optional[tuple[int, int, int]] = None
hyperlink: Optional[str] = None
class TextRun(BaseModel):
text: str
style: TextStyle
class Position(BaseModel):
left: float
top: float
width: float
height: float
class BaseElement(BaseModel):
type: ElementType
position: Optional[Position] = None
style: Optional[TextStyle] = None
class TitleElement(BaseElement):
type: ElementType = ElementType.Title
content: str
level: int
class ListItemElement(BaseElement):
type: ElementType = ElementType.ListItem
content: List[TextRun]
level: int = 1
class ParagraphElement(BaseElement):
type: ElementType = ElementType.Paragraph
content: List[TextRun]
class ImageElement(BaseElement):
type: ElementType = ElementType.Image
path: str
width: Optional[int] = None
original_ext: str = "" # For tracking original file extension (e.g. wmf)
alt_text: str = "" # For accessibility
class TableElement(BaseElement):
type: ElementType = ElementType.Table
content: List[List[List[TextRun]]] # rows -> cols -> rich text
SlideElement = Union[TitleElement, ListItemElement, ParagraphElement, ImageElement, TableElement]
class SlideType(str, Enum):
MultiColumn = "MultiColumn"
General = "General"
class MultiColumnSlide(BaseModel):
type: SlideType = SlideType.MultiColumn
preface: List[SlideElement]
columns: List[SlideElement]
notes: List[str] = []
class GeneralSlide(BaseModel):
type: SlideType = SlideType.General
elements: List[SlideElement]
notes: List[str] = []
Slide = Union[GeneralSlide, MultiColumnSlide]
class ParsedPresentation(BaseModel):
slides: List[Slide]
================================================
FILE: src/backend/bisheng/pptx2md/utils.py
================================================
# Copyright 2024 Liu Siyao
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import logging
import os
import re
import shutil
import tempfile
import uuid
from pathlib import Path
from pptx import Presentation
logger = logging.getLogger(__name__)
def fix_null_rels(file_path):
temp_dir_name = tempfile.mkdtemp()
shutil.unpack_archive(file_path, temp_dir_name, 'zip')
rels = [
os.path.join(dp, f)
for dp, dn, filenames in os.walk(temp_dir_name)
for f in filenames
if os.path.splitext(f)[1] == '.rels'
]
pat = re.compile(r'<\S*Relationship[^>]+Target\S*=\S*"NULL"[^>]*/>', re.I)
for fn in rels:
f = open(fn, 'r+')
content = f.read()
res = pat.search(content)
if res is not None:
content = pat.sub('', content)
f.seek(0)
f.truncate()
f.write(content)
f.close()
tfn = uuid.uuid4().hex
shutil.make_archive(tfn, 'zip', temp_dir_name)
shutil.rmtree(temp_dir_name)
tgt = f'{file_path[:-5]}_purged.pptx'
shutil.move(f'{tfn}.zip', tgt)
return tgt
def load_pptx(file_path: str) -> Presentation:
if not os.path.exists(file_path):
logger.error(f'source file {file_path} not exist!')
logger.error(f'absolute path: {os.path.abspath(file_path)}')
raise FileNotFoundError(file_path)
try:
prs = Presentation(file_path)
except KeyError as err:
if len(err.args) > 0 and re.match(r'There is no item named .*NULL.* in the archive', str(err.args[0])):
logger.info('corrupted links found, trying to purge...')
try:
res_path = fix_null_rels(file_path)
logger.info(f'purged file saved to {res_path}.')
prs = Presentation(res_path)
except:
logger.error(
'failed to purge corrupted links, you can report this at https://github.com/ssine/pptx2md/issues')
raise err
else:
logger.error('unknown error, you can report this at https://github.com/ssine/pptx2md/issues')
raise err
return prs
def prepare_titles(title_path: Path) -> dict[str, int]:
titles: dict[str, int] = {}
with open(title_path, 'r', encoding='utf8') as f:
indent = -1
for line in f.readlines():
cnt = 0
while line[cnt] == ' ':
cnt += 1
if cnt == 0:
titles[line.strip()] = 1
else:
if indent == -1:
indent = cnt
titles[line.strip()] = 2
else:
titles[line.strip()] = cnt // indent + 1
return titles
def rgb_to_hex(rgb):
r, g, b = rgb
return f'#{r:02x}{g:02x}{b:02x}'
================================================
FILE: src/backend/bisheng/processing/__init__.py
================================================
================================================
FILE: src/backend/bisheng/processing/base.py
================================================
from typing import Tuple, Union
from langchain_core.runnables import RunnableConfig
from loguru import logger
from bisheng.api.v1.callback import AsyncStreamingLLMCallbackHandler
from bisheng.processing.process import fix_memory_inputs, format_actions
async def get_result_and_steps(langchain_object, inputs: Union[dict, str], **kwargs):
"""Get result and thought from extracted json"""
try:
if hasattr(langchain_object, 'verbose'):
langchain_object.verbose = True
if hasattr(langchain_object, 'return_intermediate_steps'):
# https://github.com/hwchase17/langchain/issues/2068
# Deactivating until we have a frontend solution
# to display intermediate steps
langchain_object.return_intermediate_steps = True
try:
fix_memory_inputs(langchain_object)
except Exception as exc:
logger.error(exc)
async_callbacks = [AsyncStreamingLLMCallbackHandler(**kwargs)]
output = await langchain_object.ainvoke(inputs, config=RunnableConfig(callbacks=async_callbacks))
intermediate_steps = (output.get('intermediate_steps', [])
if isinstance(output, dict) else [])
source_document = (output.get('source_documents', '') if isinstance(output, dict) else '')
# Default copywriting for cases where the return is empty
if isinstance(output, dict):
result = output.get(langchain_object.output_keys[0])
else:
result = output
try:
if intermediate_steps and isinstance(intermediate_steps[0], Tuple):
thought = format_actions(intermediate_steps)
else:
thought = intermediate_steps
except Exception as exc:
logger.exception(exc)
thought = ''
except Exception as exc:
logger.exception(exc)
raise ValueError(f'Error: {str(exc)}') from exc
return result, thought, source_document
================================================
FILE: src/backend/bisheng/processing/process.py
================================================
import asyncio
import json
from pathlib import Path
from typing import Any, Coroutine, Dict, List, Optional, Tuple, Union
from langchain.chains.base import Chain
from langchain.schema import AgentAction, Document
from langchain.vectorstores.base import VectorStore
from loguru import logger
from pydantic import BaseModel
from sqlmodel import select
from bisheng.core.database import get_sync_db_session
from bisheng.core.storage.minio.minio_manager import get_minio_storage_sync
from bisheng.database.models.message import ChatMessage
from bisheng.database.models.report import Report as ReportModel
from bisheng.interface.run import build_sorted_vertices, get_memory_key, update_memory_keys
from bisheng.services.deps import get_session_service
from bisheng.template.field.base import TemplateField
from bisheng.utils.docx_temp import test_replace_string
from bisheng_langchain.input_output import Report
def fix_memory_inputs(langchain_object):
"""
Given a LangChain object, this function checks if it has a memory attribute and if that memory key exists in the
object's input variables. If so, it does nothing. Otherwise, it gets a possible new memory key using the
get_memory_key function and updates the memory keys using the update_memory_keys function.
"""
if not hasattr(langchain_object, 'memory') or langchain_object.memory is None:
return
try:
if (hasattr(langchain_object.memory, 'memory_key')
and langchain_object.memory.memory_key in langchain_object.input_variables):
return
except AttributeError:
input_variables = (langchain_object.prompt.input_variables if hasattr(
langchain_object, 'prompt') else langchain_object.input_keys)
if langchain_object.memory.memory_key in input_variables:
return
possible_new_mem_key = get_memory_key(langchain_object)
if possible_new_mem_key is not None:
update_memory_keys(langchain_object, possible_new_mem_key)
def format_actions(actions: List[Tuple[AgentAction, str]]) -> str:
"""Format a list of (AgentAction, answer) tuples into a string."""
output = []
for action, answer in actions:
log = action.log
tool = action.tool
tool_input = action.tool_input
output.append(f'Log: {log}')
if 'Action' not in log and 'Action Input' not in log:
output.append(f'Tool: {tool}')
output.append(f'Tool Input: {tool_input}')
output.append(f'Answer: {answer}')
output.append('') # Add a blank line
return '\n'.join(output)
def get_result_and_thought(langchain_object: Any, inputs: dict):
"""Get result and thought from extracted json"""
try:
if hasattr(langchain_object, 'verbose'):
langchain_object.verbose = True
if hasattr(langchain_object, 'return_intermediate_steps'):
langchain_object.return_intermediate_steps = True
fix_memory_inputs(langchain_object)
try:
# all use chat handlers
# action = 'default'
from bisheng.api.v1 import callback
callbacks = [callback.StreamingLLMCallbackHandler(None, flow_id=None, chat_id=None)]
output = langchain_object(inputs, return_only_outputs=True, callbacks=callbacks)
except ValueError as exc:
# make the error message more informative
logger.debug(f'Error: {str(exc)}')
raise exc
except Exception as exc:
raise ValueError(f'Error: {str(exc)}') from exc
return output
def get_input_str_if_only_one_input(inputs: dict) -> Optional[str]:
"""Get input string if only one input is provided"""
return list(inputs.values())[0] if len(inputs) == 1 else None
def get_build_result(data_graph, session_id):
# If session_id is provided, load the langchain_object from the session
# using build_sorted_vertices_with_caching.get_result_by_session_id
# if it returns something different than None, return it
# otherwise, build the graph and return the result
if session_id:
logger.debug(f'Loading LangChain object from session {session_id}')
result = build_sorted_vertices(data_graph=data_graph)
if result is not None:
logger.debug('Loaded LangChain object')
return result
logger.debug('Building langchain object')
return build_sorted_vertices(data_graph)
def process_inputs(inputs: Optional[dict], artifacts: Dict[str, Any], input_key: str) -> dict:
if inputs is None:
inputs = {}
for key, value in artifacts.items():
if key == 'repr':
continue
elif key not in inputs or not inputs[key]:
inputs[key] = value
# For 7mmx7mmx10mm of blood clot,apiPengaturandefault inputto prevent the entry of changes after skill changes
if input_key not in inputs and 'default_input' in inputs:
inputs[input_key] = inputs.pop('default_input')
elif 'default_input' in inputs:
inputs.pop('default_input')
return inputs
def generate_result(langchain_object: Union[Chain, VectorStore], inputs: dict):
if isinstance(langchain_object, Chain):
if inputs is None:
raise ValueError('Inputs must be provided for a Chain')
logger.debug('Generating result and thought')
result = get_result_and_thought(langchain_object, inputs)
logger.debug('Generated result and thought')
elif isinstance(langchain_object, VectorStore):
result = langchain_object.search(**inputs)
elif isinstance(langchain_object, Document):
result = langchain_object.dict()
else:
logger.warning(f'Unknown langchain_object type: {type(langchain_object)}')
if isinstance(langchain_object, Coroutine):
result = asyncio.run(langchain_object)
result = langchain_object
return result
class Result(BaseModel):
result: Any = None
session_id: str
async def process_graph_cached(
data_graph: Dict[str, Any],
inputs: Optional[dict] = None,
clear_cache=False,
session_id=None,
flow_id=None,
history_count=10,
) -> Result:
session_service = get_session_service()
if clear_cache:
session_service.clear_session(session_id)
if session_id is None:
session_id = session_service.generate_key(session_id=session_id, data_graph=data_graph)
# Load the graph using SessionService
session = await session_service.load_session(session_id,
data_graph,
artifacts={},
process_file=True,
flow_id=flow_id,
chat_id=session_id)
graph, artifacts = session if session else (None, None)
if not graph:
raise ValueError('Graph not found in the session')
built_object = await graph.abuild()
input_key_object = built_object.input_keys[0]
# memery input
if hasattr(built_object, 'memory') and built_object.memory is not None:
fix_memory_inputs(built_object)
with get_sync_db_session() as session:
history = session.exec(
select(ChatMessage).where(
ChatMessage.chat_id == session_id,
ChatMessage.category.in_(['question', 'answer'])).order_by(
ChatMessage.id.desc()).limit(history_count)).all()
history = list(reversed(history))
next_loop = -1
for index, chat_message in enumerate(history):
if index + 1 >= len(history):
continue
if index <= next_loop:
continue
if not chat_message.is_bot and history[index + 1].is_bot:
next_loop = index + 1
if not chat_message.message or not chat_message.message.startswith('{'):
continue
inputs_hsitory = json.loads(chat_message.message)
outputs_history = {built_object.output_keys[0]: history[next_loop].message}
built_object.memory.save_context(inputs_hsitory, outputs_history)
if isinstance(built_object, Report):
processed_inputs = process_inputs(inputs, artifacts or {}, input_key_object)
result = generate_result(built_object, processed_inputs)
# build report
with get_sync_db_session() as db_session:
template = db_session.exec(
select(ReportModel).where(ReportModel.flow_id == flow_id).order_by(
ReportModel.id.desc())).first()
if not template:
logger.error('template not found flow_id={}', flow_id)
raise ValueError(f'template not found flow_id={flow_id}')
minio_client = get_minio_storage_sync()
template_muban = await minio_client.get_share_link(template.object_name, clear_host=False)
report_name = built_object.report_name
report_name = report_name if report_name.endswith('.docx') else f'{report_name}.docx'
result = (result.get(built_object.output_keys[0]) if isinstance(result, dict) else result)
test_replace_string(template_muban, result, report_name)
result = {built_object.output_keys[0]: await minio_client.get_share_link(report_name, clear_host=False)}
elif any(
(vertex.id.startswith('InputNode')
for vertex in graph.vertices)) and (not inputs
or all(len(ins) == 0 for ins in inputs.values())):
input_batch = []
for vertex in graph.vertices:
if vertex.id.startswith('InputNode'):
questions = await vertex.get_result()
for question in questions:
input_batch.append({built_object.input_keys[0]: question})
report = ''
for question in input_batch:
logger.info('produce auto question question={}', question)
processed_inputs = process_inputs(question, artifacts or {}, input_key_object)
result = generate_result(built_object, processed_inputs)
report = f"""{report}### {question} \n {result} \n """
result = report
else:
processed_inputs = process_inputs(inputs, artifacts or {}, input_key_object)
result = generate_result(built_object, processed_inputs)
# langchain_object is now updated with the new memory
# we need to update the cache with the updated langchain_object
session_service.update_session(session_id, (graph, artifacts))
return Result(result=result, session_id=session_id)
async def load_flow_from_json(flow: Union[Path, str, dict],
tweaks: Optional[dict] = None,
build=True):
"""
Load flow from a JSON file or a JSON object.
:param flow: JSON file path or JSON object
:param tweaks: Optional tweaks to be processed
:param build: If True, build the graph, otherwise return the graph object
:return: Langchain object or Graph object depending on the build parameter
"""
# If input is a file path, load JSON from the file
if isinstance(flow, (str, Path)):
with open(flow, 'r', encoding='utf-8') as f:
flow_graph = json.load(f)
# If input is a dictionary, assume it's a JSON object
elif isinstance(flow, dict):
flow_graph = flow
else:
raise TypeError('Input must be either a file path (str) or a JSON object (dict)')
graph_data = flow_graph['data']
if tweaks is not None:
graph_data = process_tweaks(graph_data, tweaks)
from bisheng.api.utils import build_flow_no_yield
graph = await build_flow_no_yield(graph_data=graph_data,
artifacts={},
process_file=True,
flow_id='tmp',
chat_id=None)
if build:
langchain_object = graph.build()
for object in langchain_object:
if hasattr(object._built_object, 'input_keys'):
langchain_object = object._built_object
break
if hasattr(langchain_object, 'verbose'):
langchain_object.verbose = True
if hasattr(langchain_object, 'return_intermediate_steps'):
# Deactivating until we have a frontend solution
# to display intermediate steps
langchain_object.return_intermediate_steps = False
fix_memory_inputs(langchain_object)
return langchain_object
return graph
def validate_input(graph_data: Dict[str, Any],
tweaks: Dict[str, Dict[str, Any]]) -> List[Dict[str, Any]]:
if not isinstance(graph_data, dict) or not isinstance(tweaks, dict):
raise ValueError('graph_data and tweaks should be dictionaries')
nodes = graph_data.get('data', {}).get('nodes') or graph_data.get('nodes')
if not isinstance(nodes, list):
raise ValueError(
"graph_data should contain a list of nodes under 'data' key or directly under 'nodes' key"
)
return nodes
def apply_tweaks(node: Dict[str, Any], node_tweaks: Dict[str, Any]) -> None:
template_data = node.get('data', {}).get('node', {}).get('template')
if not isinstance(template_data, dict):
logger.warning(f"Template data for node {node.get('id')} should be a dictionary")
return
for tweak_name, tweak_value in node_tweaks.items():
if tweak_name and tweak_value and tweak_name in template_data:
key = tweak_name if tweak_name == 'file_path' else 'value'
template_data[tweak_name][key] = tweak_value
elif tweak_name and tweak_value:
template_data[tweak_name] = TemplateField(field_type=type(tweak_value).__name__,
name=tweak_name,
value=tweak_value).to_dict()
def process_tweaks(graph_data: Dict[str, Any], tweaks: Dict[str, Dict[str,
Any]]) -> Dict[str, Any]:
"""
This function is used to tweak the graph data using the node id and the tweaks dict.
:param graph_data: The dictionary containing the graph data. It must contain a 'data' key with
'nodes' as its child or directly contain 'nodes' key. Each node should have an 'id' and 'data'.
:param tweaks: A dictionary where the key is the node id and the value is a dictionary of the tweaks.
The inner dictionary contains the name of a certain parameter as the key and the value to be tweaked.
:return: The modified graph_data dictionary.
:raises ValueError: If the input is not in the expected format.
"""
nodes = validate_input(graph_data, tweaks)
for node in nodes:
if isinstance(node, dict) and isinstance(node.get('id'), str):
node_id = node['id']
if node_tweaks := tweaks.get(node_id):
apply_tweaks(node, node_tweaks)
else:
logger.warning("Each node should be a dictionary with an 'id' key of type str")
return graph_data
================================================
FILE: src/backend/bisheng/run_celery.py
================================================
from bisheng.worker.main import bisheng_celery
if __name__ == '__main__':
bisheng_celery.start(
argv=['worker', '-l', 'info', '-c', '20', '-P', 'threads', '-Q', 'knowledge_celery,workflow_celery,celery'])
# bisheng_celery.worker_main(
# argv=["worker", "--loglevel=info", "--logfile=./logs/celery.log", '--pool=threads', '--concurrency=4',"-Q=workflow_celery"])
# worker.main(celery_app)
# celery -A run_celery.celery_app worker -l info -c 16
# celery -A run_celery.celery_app beat # Schedule cron job Rilis
# celery -A run_celery.celery_app worker -l info -P gevent # Scheduling Execution Tasks
================================================
FILE: src/backend/bisheng/run_celery_beat.py
================================================
from bisheng.worker.main import bisheng_celery
if __name__ == '__main__':
bisheng_celery.start(argv=['beat', '--loglevel=debug'])
# bisheng_celery.worker_main(
# argv=["worker", "--loglevel=info", "--logfile=./logs/celery.log", '--pool=threads', '--concurrency=4',"-Q=workflow_celery"])
# worker.main(celery_app)
# celery -A run_celery.celery_app worker -l info -c 16
# celery -A run_celery.celery_app beat # Schedule cron job Rilis
# celery -A run_celery.celery_app worker -l info -P gevent # Scheduling Execution Tasks
================================================
FILE: src/backend/bisheng/script/__init__.py
================================================
================================================
FILE: src/backend/bisheng/script/base_telemetry_events_reindex.py
================================================
from bisheng.core.search.elasticsearch.manager import get_statistics_es_connection_sync
INDEX_MAPPING = {
"mappings": { # Defining the indexed Mapping
"properties": {
"event_id": {"type": "keyword"},
"event_type": {"type": "keyword"},
"trace_id": {"type": "keyword"},
"timestamp": {"type": "date", "format": "strict_date_optional_time||epoch_second"},
"user_context": {
"type": "object",
"properties": {
"user_id": {"type": "integer"},
"user_name": {"type": "keyword"},
"user_group_infos": {
"type": "object",
"properties": {
"user_group_id": {"type": "integer"},
"user_group_name": {"type": "keyword"}
}
},
"user_role_infos": {
"type": "object",
"properties": {
"role_id": {"type": "integer"},
"role_name": {"type": "keyword"},
"group_id": {"type": "integer"},
}
}
}
},
"event_data": {
"type": "object",
"dynamic": True
}
}
}
}
import time
def wait_for_task(
es,
task_id: str,
poll_interval: int = 10,
timeout: int = 3600,
):
"""
轮询 ES task 状态,直到完成或超时
"""
start_time = time.time()
while True:
task_info = es.tasks.get(task_id=task_id)
completed = task_info.get("completed", False)
if completed:
response = task_info.get("response", {})
failures = response.get("failures", [])
total = response.get("total", 0)
created = response.get("created", 0)
updated = response.get("updated", 0)
print(
f"[REINDEX DONE] total={total}, created={created}, updated={updated}"
)
if failures:
raise RuntimeError(f"Reindex failures: {failures}")
return response
if time.time() - start_time > timeout:
raise TimeoutError(f"Reindex task timeout: {task_id}")
status = task_info.get("task", {}).get("status", {})
print(
f"[REINDEX RUNNING] "
f"total={status.get('total', 0)} "
f"created={status.get('created', 0)} "
f"updated={status.get('updated', 0)}"
)
time.sleep(poll_interval)
def count_docs(es, index):
return es.count(index=index)["count"]
if __name__ == '__main__':
es_conn = get_statistics_es_connection_sync()
temp_index_name = "base_telemetry_events_v1"
original_index_name = "base_telemetry_events"
# 1. 记录原始数据量
try:
source_count = count_docs(es_conn, original_index_name)
print(f"Original doc count: {source_count}")
except:
source_count = 0
print("Original index might not exist.")
# 创建临时索引
if not es_conn.indices.exists(index=temp_index_name):
es_conn.indices.create(index=temp_index_name, body=INDEX_MAPPING)
print(f"Created temporary index: {temp_index_name}")
# 使用Elasticsearch的_reindex API进行数据迁移
reindex_body = {
"source": {
"index": original_index_name
},
"dest": {
"index": temp_index_name
}
}
resp = es_conn.options(request_timeout=3600).reindex(
body=reindex_body,
wait_for_completion=False
)
task_id = resp["task"]
print(f"Reindex started, task_id={task_id}")
wait_for_task(
es_conn,
task_id=task_id,
poll_interval=5,
timeout=3600
)
# 删除原始索引
es_conn.indices.delete(index=original_index_name)
# 将临时索引重命名为原始索引名
es_conn.indices.put_alias(index=temp_index_name, name=original_index_name)
print(f"Reindexed data to {original_index_name} successfully.")
================================================
FILE: src/backend/bisheng/script/convert_sys_embeddings.py
================================================
from bisheng.common.services.config_service import settings
from bisheng.knowledge.domain.models.knowledge import KnowledgeDao
from bisheng.llm.domain.const import LLMServerType, LLMModelType
from bisheng.llm.domain.models import LLMServer, LLMDao, LLMModel
def parse_openai_embedding_conf(name, model_name, embedding_conf):
# Explanation isazureright of privacyapiSERVICES
if embedding_conf.get('openai_api_type') in ('azure', 'azure_ad', 'azuread'):
server = LLMServer(
name=f"AzureOpenAI",
description='System upgrade automatically added',
type=LLMServerType.AZURE_OPENAI.value,
config={
"azure_endpoint": embedding_conf.pop("azure_endpoint", ''),
"openai_api_key": embedding_conf.pop("openai_api_key", ''),
"openai_api_version": embedding_conf.pop("openai_api_version", '')
},
user_id=1,
)
model = LLMModel(
name=name,
model_name=model_name,
model_type=LLMModelType.EMBEDDING.value,
online=True,
user_id=1,
)
else:
server = LLMServer(
name=f"OpenAI",
description='System upgrade automatically added',
type=LLMServerType.OPENAI.value,
config={
"openai_api_key": embedding_conf.pop("openai_api_key", ''),
"openai_api_base": embedding_conf.pop("openai_api_base", ''),
"openai_proxy": embedding_conf.pop("openai_proxy", ''),
},
user_id=1,
)
model = LLMModel(
name=name,
model_name=model_name,
model_type=LLMModelType.EMBEDDING.value,
online=True,
user_id=1,
)
return server, model
def parse_rt_embedding_conf(name, model_name, embedding_conf):
server = LLMServer(
name=f"RT",
description='System upgrade automatically added',
type=LLMServerType.BISHENG_RT.value,
config={
"host_base_url": embedding_conf.get("host_base_url", ''),
},
user_id=1,
)
model = LLMModel(
name=name,
model_name=model_name,
model_type=LLMModelType.EMBEDDING.value,
online=True,
user_id=1,
)
return server, model
# In the system configuration,embeddingconfiguration item, to the service provider in the model management, level-up034Execute this script
def convert_sys_embeddings_to_mysql():
knowledge_conf = settings.get_knowledge()
embeddings = knowledge_conf.get('embeddings', {})
if not embeddings:
print('no found embeddings')
return
# Query if there is an existing knowledge base
all_knowledge = KnowledgeDao.get_all_knowledge()
if not all_knowledge:
return
# Warehousing all system configurations first
need_add_server = {}
need_add_server_index = {}
for name, embedding_conf in embeddings.items():
model_name = embedding_conf.get('model')
if not model_name and name == 'text-embedding-ada-002':
model_name = 'text-embedding-ada-002'
if not model_name:
print("not foundmodelFirst name, not inserted into model management")
continue
# Explanation isopenaiOfficial Services of
if name == 'text-embedding-ada-002' or embedding_conf.get('component') == 'openai':
server, model = parse_openai_embedding_conf(name, model_name, embedding_conf)
else:
# Explanation isrtDeployedembeddingModels
server, model = parse_rt_embedding_conf(name, model_name, embedding_conf)
if server.type not in need_add_server_index:
need_add_server_index[server.type] = 0
need_add_server_index[server.type] += 1
server.name = f"{server.name}_{need_add_server_index[server.type]}"
llm_server = LLMDao.insert_server_with_models(server, [model])
llm_model_list = LLMDao.get_model_by_server_ids([llm_server.id])
for one in llm_model_list:
if one.name == name:
need_add_server[name] = one
# Reset Model Configuration for Knowledge Base
update_knowledge = []
for one in all_knowledge:
if one.model in need_add_server:
print(f"Modify Knowledge Base【{one.name}】 Model Configuration for")
one.model = need_add_server[one.model].id
update_knowledge.append(one)
if update_knowledge:
KnowledgeDao.update_knowledge_list(update_knowledge)
if not need_add_server_index.get(LLMServerType.BISHENG_RT.value):
# Add a defaultRTservice provider
server = LLMServer(
name=f"RT_OLD",
description='The system upgrade is automatically added, and it is not recommended to use it in the future',
type=LLMServerType.BISHENG_RT.value,
config={
"host_base_url": 'http://xxxx:8000',
},
user_id=1,
)
llm_server = LLMDao.insert_server_with_models(server, [])
if __name__ == '__main__':
convert_sys_embeddings_to_mysql()
================================================
FILE: src/backend/bisheng/script/knowledge.sh
================================================
#!/bin/bash
export PYTHONPATH="./"
run_mode=${1:-convert_all}
knowledge_id=${2:-0}
if [ "$run_mode" = "convert_all" ]; then
echo "Converting all knowledge"
python bisheng/script/knowledge_data_convert.py --mode convert_all
elif [ "$run_mode" = "convert_one" ]; then
echo "Converting one knowledge : $knowledge_id"
python bisheng/script/knowledge_data_convert.py --mode convert_one --id ${knowledge_id}
elif [ "$run_mode" = "scan_all" ]; then
echo "Scanning all knowledge files..."
python bisheng/script/knowledge_data_fix.py --mode scan_all
elif [ "$run_mode" = "scan_one" ]; then
echo "Scanning single knowledge : $knowledge_id"
python bisheng/script/knowledge_data_fix.py --mode scan_one --id ${knowledge_id}
elif [ "$run_mode" = "fix_all" ]; then
echo "Fixing all knowledge files..."
python bisheng/script/knowledge_data_fix.py --mode fix_all
elif [ "$run_mode" = "fix_one" ]; then
echo "Fixing single knowledge : $knowledge_id"
python bisheng/script/knowledge_data_fix.py --mode fix_one --id ${knowledge_id}
else
echo "Invalid run mode. Use 'convert_all', 'convert_one', 'scan_all', 'scan_one', 'fix_all', or 'fix_one'."
exit 1
fi
================================================
FILE: src/backend/bisheng/script/knowledge_data_convert.py
================================================
import argparse
import json
import traceback
from typing import List, Dict
from bisheng.common.constants.vectorstore_metadata import KNOWLEDGE_RAG_METADATA_SCHEMA
from bisheng.knowledge.domain.knowledge_rag import KnowledgeRag
from bisheng.knowledge.domain.models.knowledge import Knowledge, KnowledgeDao, KnowledgeTypeEnum
from bisheng.knowledge.domain.models.knowledge_file import KnowledgeFile
from bisheng.llm.domain import LLMService
from bisheng.script.knowledge_data_fix import get_all_knowledge_files, _get_milvus_chunks_data, _get_es_chunks_data
user_map = {}
def get_user_name_by_id(user_id: int):
from bisheng.user.domain.models.user import UserDao
if user_id in user_map:
return user_map[user_id]
tmp_user = UserDao.get_user(user_id)
if tmp_user:
user_map[user_id] = tmp_user.user_name
return tmp_user.user_name
return f"unknown user: {user_id}"
def convert_new_metadata(old_metadata: Dict, file: KnowledgeFile, knowledge: Knowledge):
user_metadata = {}
if old_metadata.get("extra"):
try:
user_metadata = json.loads(old_metadata["extra"])
except Exception:
pass
return {
"document_id": file.id,
"document_name": file.file_name,
"abstract": old_metadata.get("title", ""),
"chunk_index": old_metadata.get("chunk_index", 0),
"bbox": old_metadata.get("bbox", ""),
"page": old_metadata.get("page", 0),
"knowledge_id": knowledge.id,
"upload_time": int(file.create_time.timestamp()),
"update_time": int(file.update_time.timestamp()),
"uploader": get_user_name_by_id(file.user_id),
"updater": get_user_name_by_id(file.user_id),
"user_metadata": user_metadata,
}
def convert_milvus_data(knowledge: Knowledge, all_file: List[KnowledgeFile], new_collection_name: str):
print(f"converting ID:{knowledge.id} right of privacyMilvusDATA...")
# convert_milvus_chunk
# New.. MilvusObjects
embedding = LLMService.get_bisheng_knowledge_embedding_sync(0, model_id=int(knowledge.model))
new_milvus = KnowledgeRag.init_milvus_vectorstore(new_collection_name, embedding,
metadata_schemas=KNOWLEDGE_RAG_METADATA_SCHEMA)
for file in all_file:
all_file_chunk = _get_milvus_chunks_data(knowledge, all_fields_expect_pk=True, file_id=file.id)
if not all_file_chunk:
print(f"The knowledge base upon ID:{knowledge.id} from here{file.id}NoMilvusdata, skipping the conversion.")
continue
if all_file_chunk[0].get("document_id"):
print(f"The knowledge base upon ID:{knowledge.id} right of privacyMilvusData is already in the new format, skipping conversion.")
return None
new_texts = []
new_metadata = []
new_embedding = []
for one in all_file_chunk:
new_texts.append(one["text"])
new_metadata.append(convert_new_metadata(one, file, knowledge))
new_embedding.append(one["vector"])
new_milvus.add_embeddings(texts=new_texts, embeddings=new_embedding, metadatas=new_metadata)
# Add conversion logic here
print(f"The knowledge base upon ID:{knowledge.id} right of privacyMilvusData conversion complete.")
return new_milvus
def convert_es_data(knowledge: Knowledge, all_file: List[KnowledgeFile], new_index_name: str):
print(f"converting ID:{knowledge.id} right of privacyElasticsearchDATA...")
# convert_es_chunk
es_vectorstore = KnowledgeRag.init_es_vectorstore_sync(new_index_name,
metadata_schemas=KNOWLEDGE_RAG_METADATA_SCHEMA)
for file in all_file:
all_file_chunk = _get_es_chunks_data(knowledge, source=True, file_id=file.id)
if not all_file_chunk:
print(f"The knowledge base upon ID:{knowledge.id} from here{file.id}Noesdata, skipping the conversion.")
continue
if all_file_chunk[0].get("document_id"):
print(f"The knowledge base upon ID:{knowledge.id} right of privacyESData is already in the new format, skipping conversion.")
return None
new_texts = []
new_metadata = []
for one in all_file_chunk:
new_texts.append(one["_source"]["text"])
new_metadata.append(convert_new_metadata(one["_source"]["metadata"], file, knowledge))
es_vectorstore.add_texts(texts=new_texts, metadatas=new_metadata)
print(f"The knowledge base upon ID:{knowledge.id} right of privacyElasticsearchData conversion complete.")
return es_vectorstore
def convert_one_knowledge_data(knowledge: Knowledge):
print(f"Start Conversion ID:{knowledge.id} {knowledge.name} Data...")
if knowledge.collection_name.startswith("partition_"):
print(f"!!! Skip partition knowledge base ID:{knowledge.id} Data conversion. Please repair the data first")
return
if knowledge.type == KnowledgeTypeEnum.QA.value:
print(f"SkipQAThe knowledge base upon ID:{knowledge.id} Data conversion.!!!")
return
all_file = get_all_knowledge_files(knowledge.id)
old_collection_name = knowledge.collection_name
old_index_name = knowledge.index_name
new_collection_name = f"{old_collection_name}_new"
new_index_name = f"{old_index_name}_new"
try:
old_milvus_vector = KnowledgeRag.init_knowledge_milvus_vectorstore_sync(0, knowledge)
old_fields = old_milvus_vector.col.schema.fields
old_fields = {field.name: field for field in old_fields}
if "document_id" in old_fields:
print(f"The knowledge base upon ID:{knowledge.id} The data is already in the new format, skipping the conversion.")
return
milvus_vector = convert_milvus_data(knowledge, all_file, new_collection_name)
es_vector = convert_es_data(knowledge, all_file, new_index_name)
if milvus_vector and es_vector:
knowledge.collection_name = new_collection_name
knowledge.index_name = new_index_name
KnowledgeDao.update_one(knowledge)
# clear old data
milvus_vector.client.drop_collection(old_collection_name)
if es_vector.client.indices.exists(index=old_index_name):
es_vector.client.indices.delete(index=old_index_name)
else:
print(f"The knowledge base upon ID:{knowledge.id} Data does not need to be updated.")
except Exception as e:
print(f"The knowledge base upon ID:{knowledge.id} Data conversion failed, error reason:{e}")
traceback.print_exc()
# Add conversion logic here
print(f"The knowledge base upon ID:{knowledge.id} Data conversion complete.")
def convert_all_knowledge_data():
all_knowledge = KnowledgeDao.get_all_knowledge()
total = len(all_knowledge)
for index, knowledge in enumerate(all_knowledge):
print(
f"convert progress: {round((index + 1) / total * 100, 2)}% knowledge id: {knowledge.id} name: {knowledge.name}")
convert_one_knowledge_data(knowledge)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--mode', type=str, default="convert_all",
help='modalities.convert_all: Convert data from all knowledge bases;convert_one: Convert data from a knowledge base')
# Maximum number of concurrency for a single process
parser.add_argument('--id', type=int, default=0, help='The knowledge base uponID, parameter is required if operating a single knowledge base')
args = parser.parse_args()
if args.mode == "convert_all":
convert_all_knowledge_data()
elif args.mode == "convert_one":
tmp_knowledge = KnowledgeDao.query_by_id(args.id)
if not tmp_knowledge:
print(f"The knowledge base upon ID:{args.id} It does not exist and cannot be converted.")
exit(0)
convert_one_knowledge_data(tmp_knowledge)
else:
print("modeParameter salah,can only be convert_all OR convert_one")
================================================
FILE: src/backend/bisheng/script/knowledge_data_fix.py
================================================
import argparse
import os
import traceback
from typing import List
import openpyxl
from pymilvus import Collection
from bisheng.api.services.knowledge_imp import decide_vectorstores, QA_save_knowledge, delete_vector_data
from bisheng.knowledge.domain.models.knowledge import KnowledgeDao, Knowledge, KnowledgeTypeEnum
from bisheng.knowledge.domain.models.knowledge_file import QAKnoweldgeDao, KnowledgeFileDao, QAKnowledge, KnowledgeFile, \
QAStatus, KnowledgeFileStatus
from bisheng.llm.domain import LLMService
from bisheng.worker.knowledge.file_worker import insert_milvus
_output_path = os.path.join(os.path.dirname(__file__), 'output')
os.makedirs(_output_path, exist_ok=True)
def get_all_knowledge() -> List[Knowledge]:
all_knowledge = []
page = 1
limit = 1000
while True:
knowledge = KnowledgeDao.get_all_knowledge(page=page, limit=limit)
if not knowledge:
break
page += 1
all_knowledge.extend(knowledge)
return all_knowledge
def get_all_qa_knowledge_files(knowledge_id: int) -> List[QAKnowledge]:
all_files = []
page = 1
limit = 1000
while True:
files = QAKnoweldgeDao.get_qa_knowledge_by_knowledge_id(knowledge_id, page=page, page_size=limit)
if not files:
break
page += 1
for file in files:
if file.status != QAStatus.ENABLED.value:
continue
all_files.append(file)
return all_files
def get_all_knowledge_files(knowledge_id: int) -> List[KnowledgeFile]:
all_files = []
page = 1
limit = 1000
while True:
files = KnowledgeFileDao.get_file_by_filters(knowledge_id, page=page, page_size=limit)
if not files:
break
page += 1
for file in files:
if file.status != KnowledgeFileStatus.SUCCESS.value:
continue
all_files.append(file)
return all_files
def _get_es_chunks_data(knowledge: Knowledge, es_obj=None, source: bool = False, file_id: int = None):
if not es_obj:
embedding = LLMService.get_bisheng_knowledge_embedding_sync(0, model_id=int(knowledge.model))
es_obj = decide_vectorstores(knowledge.index_name or knowledge.collection_name, "ElasticKeywordsSearch",
embedding)
es_client = es_obj.client
all_chunks = []
def handle_hits(hits):
for hit in hits:
all_chunks.append({
"file_id": hit['fields'].get('metadata.file_id', [''])[0],
"source": hit['fields'].get('metadata.source', [''])[0],
"extra": hit['fields'].get('metadata.extra', [''])[0],
"_id": hit['_id'],
"_source": hit['_source'] if source else None,
})
query = {"match_all": {}}
if file_id:
query = {"term": {"metadata.file_id": file_id}}
result = es_client.search(index=knowledge.index_name or knowledge.collection_name,
query=query,
size=5000,
scroll="5m",
source=source,
fields=["_id", "metadata.source", "metadata.file_id", "metadata.extra"])
handle_hits(result["hits"]["hits"])
scroll_id = result['_scroll_id']
while True:
result = es_client.scroll(scroll_id=scroll_id, scroll='1m')
tmp_hits = result['hits']['hits']
if not tmp_hits:
break
handle_hits(tmp_hits)
scroll_id = result['_scroll_id']
es_client.clear_scroll(scroll_id=scroll_id)
return all_chunks
def _get_milvus_chunks_data(knowledge: Knowledge, milvus_obj=None, all_fields_expect_pk: bool = False,
file_id: int = None):
if not milvus_obj:
embedding = LLMService.get_bisheng_knowledge_embedding_sync(0, model_id=int(knowledge.model))
milvus_obj = decide_vectorstores(knowledge.collection_name, "Milvus", embedding)
all_milvus_chunks = []
output_fields = ["file_id", "extra", "source", "pk"]
if all_fields_expect_pk:
output_fields = [s.name for s in milvus_obj.col.schema.fields if s.name != "pk"]
expr = f"knowledge_id=='{knowledge.id}'" if knowledge.collection_name.startswith("partition_") else None
if file_id:
expr = f"{expr} and file_id=={file_id}" if expr else f"file_id == {file_id}"
iterator = milvus_obj.col.query_iterator(
batch_size=1000,
expr=expr,
output_fields=output_fields,
timeout=30,
)
while True:
result = iterator.next()
if not result:
iterator.close()
break
all_milvus_chunks.extend(result)
return all_milvus_chunks
def _scan_knowledge_error_data(knowledge: Knowledge, all_file_data: List[KnowledgeFile | QAKnowledge], milvus_obj,
es_obj):
all_milvus_chunks = _get_milvus_chunks_data(knowledge, milvus_obj)
judge_qa_chunk = lambda x: not x.get("source")
if knowledge.type != KnowledgeTypeEnum.QA.value:
judge_qa_chunk = lambda x: x.get("source")
all_milvus_chunks_map = {
item["file_id"]: item for item in all_milvus_chunks if judge_qa_chunk(item) # source Absent Explanation YesQACorrect data, otherwise it is the data of the document knowledge base
}
all_es_chunks = _get_es_chunks_data(knowledge, es_obj)
all_es_chunks_map = {
item["file_id"]: item for item in all_es_chunks if judge_qa_chunk(item) # source Absent Explanation YesQACorrect data, otherwise it is the data of the document knowledge base
}
no_data = []
no_milvus_data = []
no_es_data = []
for file in all_file_data:
milvus_flag = file.id in all_milvus_chunks_map
if milvus_flag:
all_milvus_chunks_map.pop(file.id)
es_flag = file.id in all_es_chunks_map
if es_flag:
all_es_chunks_map.pop(file.id)
if not milvus_flag and not es_flag:
no_data.append(file)
elif not milvus_flag:
no_milvus_data.append(file)
elif not es_flag:
no_es_data.append(file)
return no_data, no_milvus_data, no_es_data, all_milvus_chunks_map, all_es_chunks_map
def scan_qa_knowledge_error_data(knowledge: Knowledge, milvus_obj, es_obj):
""" scan all qa knowledge data and find those that not exist in milvus """
all_qa = get_all_qa_knowledge_files(knowledge.id)
return _scan_knowledge_error_data(knowledge, all_qa, milvus_obj, es_obj)
def scan_normal_knowledge_error_data(knowledge: Knowledge, milvus_obj, es_obj):
""" scan all normal knowledge data and find those that not exist in milvus """
all_files = get_all_knowledge_files(knowledge.id)
return _scan_knowledge_error_data(knowledge, all_files, milvus_obj, es_obj)
def _file_status(file: KnowledgeFile):
if file.status == KnowledgeFileStatus.PROCESSING.value:
return "Parsing"
elif file.status == KnowledgeFileStatus.SUCCESS.value:
return "Parsing Successful"
elif file.status == KnowledgeFileStatus.FAILED.value:
return "Parse Failure"
elif file.status == KnowledgeFileStatus.REBUILDING.value:
return "Rebuilding"
elif file.status == KnowledgeFileStatus.WAITING.value:
return "In queue:"
elif file.status == KnowledgeFileStatus.TIMEOUT.value:
return "Timed out"
else:
return "Unknown Status"
def _qa_status(file: QAKnowledge):
if file.status == QAStatus.ENABLED.value:
return "Enable"
elif file.status == QAStatus.DISABLED.value:
return "Disable"
elif file.status == QAStatus.PROCESSING.value:
return "Sedang diproses"
elif file.status == QAStatus.FAILED.value:
return "Failed to Process"
else:
return "Unknown Status"
def _knowledge_common_row(knowledge: Knowledge, note: str = ""):
one_common_row = [knowledge.id, knowledge.name, knowledge.collection_name, knowledge.index_name]
if knowledge.type == KnowledgeTypeEnum.QA.value:
one_common_row.append("QAThe knowledge base upon")
elif knowledge.type == KnowledgeTypeEnum.NORMAL.value:
one_common_row.append("Docly Knowledge Base")
elif knowledge.type == KnowledgeTypeEnum.PRIVATE.value:
one_common_row.append("Personal Knowledge Base")
else:
one_common_row.append("Unknown type knowledge base")
one_common_row.append(knowledge.create_time.strftime("%Y-%m-%d %H:%M:%S"))
one_common_row.append(knowledge.update_time.strftime("%Y-%m-%d %H:%M:%S"))
one_common_row.append(note)
return one_common_row
def _file_row(knowledge: Knowledge, file: KnowledgeFile | QAKnowledge, milvus_flag: str, es_flag: str):
return [
file.id,
file.file_name if knowledge.type != KnowledgeTypeEnum.QA.value else file.questions[0],
_file_status(file) if knowledge.type != KnowledgeTypeEnum.QA.value else _qa_status(file),
file.create_time.strftime("%Y-%m-%d %H:%M:%S"),
file.update_time.strftime("%Y-%m-%d %H:%M:%S"),
milvus_flag,
es_flag,
]
def _init_knowledge_obj(knowledge: Knowledge):
try:
embedding = LLMService.get_bisheng_knowledge_embedding_sync(0, model_id=int(knowledge.model))
except Exception as e:
print(
f"!!!! skip knowledge_id: {knowledge.id}; knowledge_name: {knowledge.name} because embedding model error: {e}")
raise Exception(f"Skip this Knowledge Base, Reason:embeddingModel error: {e}")
try:
milvus_obj = decide_vectorstores(knowledge.collection_name, "Milvus", embedding)
if milvus_obj.col is None:
raise Exception("Skip this Knowledge Base, Reason:Milvus collection name not exist")
collection_info = milvus_obj.col.schema
fields = collection_info.fields
fields = {field.name: 1 for field in fields}
if "extra" not in fields or "source" not in fields or "file_id" not in fields:
raise Exception("Skip this Knowledge Base, Reason:Milvus fields not found file_id or source or extra")
except Exception as e:
print(
f"!!!! skip knowledge_id: {knowledge.id}; knowledge_name: {knowledge.name} because milvus connection error: {e}")
raise Exception(f"Skip this Knowledge Base, Reason:MilvusConnection Error: {e}")
try:
es_obj = decide_vectorstores(knowledge.index_name or knowledge.collection_name, "ElasticKeywordsSearch",
embedding)
except Exception as e:
print(
f"!!!! skip knowledge_id: {knowledge.id}; knowledge_name: {knowledge.name} because es connection error: {e}")
raise Exception(f"Skip this Knowledge Base, Reason:ESConnection Error: {e}")
return milvus_obj, es_obj
def _save_knowledge_error_data(rows: List[List[str]], file_name: str):
header_rows = [
['The knowledge base uponID', 'Library Name', 'collection_name', 'index_name', 'Knowledge Base Post Type', 'Knowledge Base Created Time', 'Knowledge Base Updated Time',
'Knowledge Base Notes', 'Doc.ID', 'File Name',
'Document Status',
'File Created Time', 'File Updated Time', 'Milvuspresence or does it', 'ESpresence or does it']
]
if not rows:
print("no error data found")
return
rows = header_rows + rows
wb = openpyxl.workbook.Workbook()
sh = wb.active
for row in rows:
sh.append(row)
file_path = os.path.join(_output_path, file_name)
wb.save(file_path)
print(f"=========== knowledge error data file saved to: {file_path}")
def scan_one_knowledge(knowledge: Knowledge = None, knowledge_id: int = None) -> List[List[str]]:
""" return error data rows for one knowledge """
if not knowledge:
knowledge = KnowledgeDao.query_by_id(knowledge_id)
if not knowledge:
print(f"knowledge_id: {knowledge_id} not exist")
return []
try:
milvus_obj, es_obj = _init_knowledge_obj(knowledge)
except Exception as e:
print(
f"!!!! skip knowledge_id: {knowledge.id}; knowledge_name: {knowledge.name} because error: {e}")
return [_knowledge_common_row(knowledge, str(e))]
if knowledge.type == KnowledgeTypeEnum.QA.value:
no_data, no_milvus_data, no_es_data, milvus_extra, es_extra = scan_qa_knowledge_error_data(knowledge,
milvus_obj,
es_obj)
else:
no_data, no_milvus_data, no_es_data, milvus_extra, es_extra = scan_normal_knowledge_error_data(knowledge,
milvus_obj,
es_obj)
if not no_data and not no_milvus_data and not no_es_data:
return []
print(f"!!!! find error data knowledge_id: {knowledge.id}; knowledge_name: {knowledge.name}")
note = ""
if milvus_extra and es_extra:
note = "Milvus And ES Redundant data present"
elif milvus_extra:
note = "Milvus Redundant data present"
elif es_extra:
note = "ES Redundant data present"
one_common_row = _knowledge_common_row(knowledge, note)
def _parse_one_row(file, milvus_flag: str, es_flag: str):
one_row = one_common_row.copy()
one_row.extend(_file_row(knowledge, file, milvus_flag, es_flag))
return one_row
rows = []
for one in no_data:
rows.append(_parse_one_row(one, "No ", "No "))
for one in no_milvus_data:
rows.append(_parse_one_row(one, "No ", "Yes "))
for one in no_es_data:
rows.append(_parse_one_row(one, "Yes ", "No "))
if not rows and note:
return [one_common_row]
return rows
def scan_knowledge_error_data():
""" scan all knowledge data and find those that not exist in milvus """
all_knowledge = get_all_knowledge()
total = len(all_knowledge)
rows = []
for index, knowledge in enumerate(all_knowledge):
print(
f"{round(index / total * 100, 2)}% ---- start scan knowledge_id: {knowledge.id}; knowledge_name: {knowledge.name}")
error_rows = scan_one_knowledge(knowledge)
if error_rows:
rows.extend(error_rows)
else:
print(f"==== no error data knowledge_id: {knowledge.id}; knowledge_name: {knowledge.name}")
_save_knowledge_error_data(rows, "all_knowledge_error_data.xlsx")
return None
def _sync_milvus_new_collection_name(knowledge: Knowledge, milvus_obj) -> bool:
""" copy knowledge data to new milvus collection name """
embedding = LLMService.get_bisheng_knowledge_embedding_sync(0, model_id=int(knowledge.model))
new_collection_name = knowledge.index_name or knowledge.collection_name
if new_collection_name == knowledge.collection_name:
return milvus_obj
# create new collection name
new_col = Collection(name=new_collection_name, schema=milvus_obj.col.schema, using=milvus_obj.alias,
consistency_level=milvus_obj.consistency_level)
new_milvus_obj = decide_vectorstores(new_collection_name, "Milvus", embedding)
output_fields = [s.name for s in milvus_obj.col.schema.fields if s.name != "pk"]
try:
# get old chunks
all_chunks = _get_milvus_chunks_data(knowledge, milvus_obj, all_fields_expect_pk=True)
insert_milvus(all_chunks, output_fields, new_milvus_obj)
knowledge.collection_name = new_collection_name
knowledge = KnowledgeDao.update_one(knowledge)
return new_milvus_obj
except Exception as e:
print(
f"!!!! copy vector data knowledge_id: {knowledge.id}; knowledge_name: {knowledge.name} error: {e}")
new_milvus_obj.col.delete()
return False
def _fix_knowledge_data(knowledge: Knowledge, milvus_obj, es_obj, all_files: List[QAKnowledge | KnowledgeFile]):
""" fix all qa knowledge data """
if knowledge.collection_name.startswith("partition_"):
print("start copy milvus data to new collection_name")
milvus_obj = _sync_milvus_new_collection_name(knowledge, milvus_obj)
if not milvus_obj:
raise Exception(f"copy milvus data to new collection_name failed")
print("finish copy milvus data to new collection_name")
all_milvus_chunk = _get_milvus_chunks_data(knowledge, milvus_obj, all_fields_expect_pk=True)
all_milvus_chunk_map = {}
all_es_chunk = _get_es_chunks_data(knowledge, es_obj, source=True)
all_es_chunk_map = {}
judge_qa_chunk = lambda x: not x.get("source")
if knowledge.type != KnowledgeTypeEnum.QA.value:
judge_qa_chunk = lambda x: x.get("source")
remove_pk = []
remove_id = []
for item in all_milvus_chunk:
# have source, is doc chunk
if not judge_qa_chunk(item):
remove_pk.append(item.get("pk"))
continue
if item["file_id"] not in all_milvus_chunk_map:
all_milvus_chunk_map[item["file_id"]] = []
all_milvus_chunk_map[item["file_id"]].append(item)
for item in all_es_chunk:
# no source, is qa chunk
if not judge_qa_chunk(item):
remove_id.append(item.get("_id"))
continue
if item["file_id"] not in all_es_chunk_map:
all_es_chunk_map[item["file_id"]] = []
all_es_chunk_map[item["file_id"]].append(item)
old_all_milvus_chunk_map = all_milvus_chunk_map.copy()
old_all_es_chunk_map = all_es_chunk_map.copy()
no_data = []
no_milvus_data = []
no_es_data = []
for file in all_files:
milvus_flag = file.id in all_milvus_chunk_map
if milvus_flag:
all_milvus_chunk_map.pop(file.id)
es_flag = file.id in all_es_chunk_map
if es_flag:
all_es_chunk_map.pop(file.id)
if not milvus_flag and not es_flag:
no_data.append(file)
elif not milvus_flag:
no_milvus_data.append(file)
elif not es_flag:
no_es_data.append(file)
if remove_pk:
print(
f"----remove extra milvus data knowledge_id: {knowledge.id}; knowledge_name: {knowledge.name} pk: {remove_pk}")
milvus_obj.col.delete(expr=f"pk in {remove_pk}")
if remove_id:
print(
f"----remove extra es data knowledge_id: {knowledge.id}; knowledge_name: {knowledge.name} _id: {remove_id}")
es_obj.client.delete_by_query(index=knowledge.index_name or knowledge.collection_name,
query={"terms": {"_id": remove_id}})
if all_milvus_chunk_map:
print(f"---- fix knowledge_id: {knowledge.id}; knowledge_name: {knowledge.name} milvus extra data found")
for file_id, chunks in all_milvus_chunk_map.items():
milvus_obj.col.delete(expr=f"file_id=={file_id}")
if all_es_chunk_map:
print(f"---- fix knowledge_id: {knowledge.id}; knowledge_name: {knowledge.name} es extra data found")
es_obj.client.delete_by_query(index=knowledge.index_name or knowledge.collection_name,
query={"terms": {"metadata.file_id": list(all_es_chunk_map.keys())}})
return no_data, no_milvus_data, no_es_data, old_all_milvus_chunk_map, old_all_es_chunk_map, milvus_obj
def fix_qa_knowledge_data(knowledge: Knowledge, milvus_obj, es_obj):
all_qa = get_all_qa_knowledge_files(knowledge.id)
no_data, no_milvus_data, no_es_data, _, _, _ = _fix_knowledge_data(knowledge, milvus_obj, es_obj, all_qa)
for qa in no_data:
print(f"try insert qa {qa.id} into vector store")
QA_save_knowledge(knowledge, qa)
for qa in no_milvus_data:
print(f"try insert qa {qa.id} into vector store")
delete_vector_data(knowledge, [qa.id])
QA_save_knowledge(knowledge, qa)
for qa in no_es_data:
print(f"try insert qa {qa.id} into vector store")
delete_vector_data(knowledge, [qa.id])
QA_save_knowledge(knowledge, qa)
def fix_normal_knowledge_data(knowledge: Knowledge, milvus_obj, es_obj):
all_file = get_all_knowledge_files(knowledge.id)
no_data, no_milvus_data, no_es_data, all_milvus, all_es, milvus_obj = _fix_knowledge_data(knowledge, milvus_obj,
es_obj,
all_file)
for file in no_data:
print(f"update file to failed status file_id: {file.id}; file_name: {file.file_name}")
KnowledgeFileDao.update_file_status([file.id], KnowledgeFileStatus.FAILED,
"The file data was found to be missing when the knowledge base data was repaired. The file status has been updated to parse failed. Please parse again.")
for file in no_milvus_data:
es_chunks = all_es.get(file.id, [])
if not es_chunks:
file.status = KnowledgeFileStatus.FAILED.value
file.remark = "The file data was found to be missing when the knowledge base data was repaired. The file status has been updated to parse failed. Please parse again."
KnowledgeFileDao.update(file)
print(f"!!!!skip file_id: {file.id}; file_name: {file.file_name} because es data not found")
continue
texts = []
metadatas = []
for chunk in es_chunks:
texts.append(chunk["_source"]["text"])
metadatas.append(chunk["_source"]["metadata"])
try:
milvus_obj.add_texts(texts=texts, metadatas=metadatas)
except Exception as e:
file.status = KnowledgeFileStatus.FAILED.value
file.remark = str(e)
KnowledgeFileDao.update(file)
for file in no_es_data:
milvus_chunks = all_milvus.get(file.id, [])
if not milvus_chunks:
print(f"!!!!skip file_id: {file.id}; file_name: {file.file_name} because milvus data not found")
file.status = KnowledgeFileStatus.FAILED.value
KnowledgeFileDao.update(file)
continue
texts = []
metadatas = []
for chunk in milvus_chunks:
texts.append(chunk.pop("text"))
chunk.pop("pk")
chunk.pop("vector")
metadatas.append(chunk)
es_obj.add_texts(texts=texts, metadatas=metadatas)
def fix_one_knowledge(knowledge: Knowledge = None, knowledge_id: int = None):
if not knowledge:
knowledge = KnowledgeDao.query_by_id(knowledge_id)
if not knowledge:
print(f"knowledge_id: {knowledge_id} not exist")
return
try:
milvus_obj, es_obj = _init_knowledge_obj(knowledge)
except Exception as e:
print(
f"!!!! skip knowledge_id: {knowledge.id}; knowledge_name: {knowledge.name} because error: {e}")
return
if not knowledge.index_name:
knowledge.index_name = knowledge.collection_name
KnowledgeDao.update_one(knowledge)
try:
print(f"---- start fix knowledge_id: {knowledge.id}; knowledge_name: {knowledge.name}")
if knowledge.type == KnowledgeTypeEnum.QA.value:
fix_qa_knowledge_data(knowledge, milvus_obj, es_obj)
else:
fix_normal_knowledge_data(knowledge, milvus_obj, es_obj)
print(f"---- finish fix knowledge_id: {knowledge.id}; knowledge_name: {knowledge.name}")
except Exception as e:
print(f"---- error fix knowledge_id: {knowledge.id}; knowledge_name: {knowledge.name}")
traceback.print_exc()
def fix_knowledge_error_data():
all_knowledge = get_all_knowledge()
total = len(all_knowledge)
for index, knowledge in enumerate(all_knowledge):
print(f"---- start fix knowledge process: {round(index / total * 100, 2)}%")
fix_one_knowledge(knowledge)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--mode', type=str, default="scan_all",
help='modalities.scan_all: Scan all Knowledge Base error data;fix_all: Fix all Knowledge Base error data;fix_one: Fixing single knowledge base error data;scan_one: Scan single KB error data')
# Maximum number of concurrency for a single process
parser.add_argument('--id', type=int, default=0, help='The knowledge base uponID, parameter is required if operating a single knowledge base')
args = parser.parse_args()
if args.mode == "scan_all":
scan_knowledge_error_data()
elif args.mode == "fix_all":
fix_knowledge_error_data()
elif args.mode == "fix_one":
fix_one_knowledge(None, args.id)
elif args.mode == "scan_one":
tmp_rows = scan_one_knowledge(None, args.id)
_save_knowledge_error_data(tmp_rows, f"{args.id}_knowledge_error_data.xlsx")
else:
print("modeParameter error, can only bescan_all、fix_all、fix_one、scan_oneOne of them,")
================================================
FILE: src/backend/bisheng/script/mid_table.sh
================================================
export PYTHONPATH="./"
python bisheng/script/sync_increment_table.py
================================================
FILE: src/backend/bisheng/script/sync_increment_table.py
================================================
from datetime import datetime
from bisheng.api.services.workflow import WorkFlowService
from bisheng.knowledge.domain.services.knowledge_service import KnowledgeService
from bisheng.user.domain.services.user import UserService
from bisheng.worker import sync_mid_user_interact_dtl
from bisheng.worker.telemetry.mid_table import sync_mid_user_increment, sync_mid_knowledge_increment, \
sync_mid_app_increment
def sync_user_increment_table_all():
"""
Sync user increment table
"""
first_user = UserService.get_first_user()
if not first_user:
print("No users found, skipping user increment table sync.")
return
start_date = first_user.create_time.isoformat()
end_date = datetime.now().isoformat()
sync_mid_user_increment(start_date, end_date)
def sync_knowledge_increment_table_all():
"""
Sync knowledge increment table
"""
first_knowledge = KnowledgeService.get_first_knowledge()
if not first_knowledge:
print("No knowledge entries found, skipping knowledge increment table sync.")
return
start_date = first_knowledge.create_time.isoformat()
end_date = datetime.now().isoformat()
sync_mid_knowledge_increment(start_date, end_date)
def sync_app_increment_table_all():
"""
Sync all increment tables
"""
first_app = WorkFlowService.get_first_app()
if not first_app:
print("No apps found, skipping app increment table sync.")
return
start_date = first_app['create_time'].isoformat()
end_date = datetime.now().isoformat()
sync_mid_app_increment(start_date, end_date)
def sync_user_interact_dtl_all():
first_date = datetime(2025, 12, 1).isoformat()
end_date = datetime.now().isoformat()
sync_mid_user_interact_dtl(first_date, end_date)
if __name__ == '__main__':
sync_user_increment_table_all()
sync_knowledge_increment_table_all()
sync_app_increment_table_all()
sync_user_interact_dtl_all()
================================================
FILE: src/backend/bisheng/script/telemetry_events_reindex.sh
================================================
#!/bin/bash
export PYTHONPATH="./"
echo "Reindexing telemetry events..."
python bisheng/script/base_telemetry_events_reindex.py
echo "Reindexing completed."
================================================
FILE: src/backend/bisheng/server.py
================================================
from gunicorn.app.base import BaseApplication # type: ignore
class BishengApplication(BaseApplication):
def __init__(self, app, options=None):
self.options = options or {}
self.application = app
super().__init__()
def load_config(self):
config = {
key: value
for key, value in self.options.items()
if key in self.cfg.settings and value is not None
}
for key, value in config.items():
self.cfg.set(key.lower(), value)
def load(self):
return self.application
================================================
FILE: src/backend/bisheng/services/__init__.py
================================================
from .manager import service_manager
from .schema import ServiceType
__all__ = ['service_manager', 'ServiceType']
================================================
FILE: src/backend/bisheng/services/auth/__init__.py
================================================
================================================
FILE: src/backend/bisheng/services/auth/factory.py
================================================
from bisheng.services.auth.service import AuthService
from bisheng.services.factory import ServiceFactory
class AuthServiceFactory(ServiceFactory):
name = 'auth_service'
def __init__(self):
super().__init__(AuthService)
def create(self, settings_service):
return AuthService(settings_service)
================================================
FILE: src/backend/bisheng/services/auth/service.py
================================================
from typing import TYPE_CHECKING
from bisheng.services.base import Service
if TYPE_CHECKING:
from bisheng.services.settings.service import SettingsService
class AuthService(Service):
name = 'auth_service'
def __init__(self, settings_service: 'SettingsService'):
self.settings_service = settings_service
================================================
FILE: src/backend/bisheng/services/auth/utils.py
================================================
from datetime import datetime, timedelta, timezone
from typing import Annotated, Coroutine, Optional, Union
from uuid import UUID
from bisheng.services.database.models.api_key.crud import check_key
from bisheng.services.database.models.api_key.model import ApiKey
from bisheng.services.database.models.user.crud import (get_user_by_id, get_user_by_username,
update_user_last_login_at)
from bisheng.services.database.models.user.model import User
from bisheng.services.deps import get_session, get_settings_service
from cryptography.fernet import Fernet
from fastapi import Depends, HTTPException, Security, status
from fastapi.security import APIKeyHeader, APIKeyQuery, OAuth2PasswordBearer
from jose import JWTError, jwt
from sqlmodel import Session
oauth2_login = OAuth2PasswordBearer(tokenUrl='api/v1/login', auto_error=False)
API_KEY_NAME = 'x-api-key'
api_key_query = APIKeyQuery(name=API_KEY_NAME, scheme_name='API key query', auto_error=False)
api_key_header = APIKeyHeader(name=API_KEY_NAME, scheme_name='API key header', auto_error=False)
# Source: https://github.com/mrtolkien/fastapi_simple_security/blob/master/fastapi_simple_security/security_api_key.py
async def api_key_security(
query_param: str = Security(api_key_query),
header_param: str = Security(api_key_header),
db: Session = Depends(get_session),
) -> Optional[User]:
settings_service = get_settings_service()
result: Optional[Union[ApiKey, User]] = None
if settings_service.auth_settings.AUTO_LOGIN:
# Get the first user
if not settings_service.auth_settings.SUPERUSER:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail='Missing first superuser credentials',
)
result = get_user_by_username(db, settings_service.auth_settings.SUPERUSER)
elif not query_param and not header_param:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail='An API key must be passed as query or header',
)
elif query_param:
result = check_key(db, query_param)
else:
result = check_key(db, header_param)
if not result:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail='Invalid or missing API key',
)
if isinstance(result, ApiKey):
return result.user
elif isinstance(result, User):
return result
async def get_current_user(
token: str = Security(oauth2_login),
query_param: str = Security(api_key_query),
header_param: str = Security(api_key_header),
db: Session = Depends(get_session),
) -> User:
if token:
return await get_current_user_by_jwt(token, db)
else:
if not query_param and not header_param:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail='An API key as query or header, or a JWT token must be passed',
)
user = await api_key_security(query_param, header_param, db)
if user:
return user
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail='Invalid or missing API key',
)
async def get_current_user_by_jwt(
token: Annotated[str, Depends(oauth2_login)],
db: Session = Depends(get_session),
) -> User:
settings_service = get_settings_service()
credentials_exception = HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail='Could not validate credentials',
headers={'WWW-Authenticate': 'Bearer'},
)
if isinstance(token, Coroutine):
token = await token
if settings_service.auth_settings.SECRET_KEY is None:
raise credentials_exception
try:
payload = jwt.decode(
token,
settings_service.auth_settings.SECRET_KEY,
algorithms=[settings_service.auth_settings.ALGORITHM],
)
user_id: UUID = payload.get('sub') # type: ignore
token_type: str = payload.get('type') # type: ignore
if expires := payload.get('exp', None):
expires_datetime = datetime.fromtimestamp(expires, timezone.utc)
# TypeError: can't compare offset-naive and offset-aware datetimes
if datetime.now(timezone.utc) > expires_datetime:
raise credentials_exception
if user_id is None or token_type:
raise credentials_exception
except JWTError as e:
raise credentials_exception from e
user = get_user_by_id(db, user_id) # type: ignore
if user is None or not user.is_active:
raise credentials_exception
return user
def get_current_active_user(current_user: Annotated[User, Depends(get_current_user)]):
if not current_user.is_active:
raise HTTPException(status_code=400, detail='Inactive user')
return current_user
def get_current_active_superuser(current_user: Annotated[User, Depends(get_current_user)]) -> User:
if not current_user.is_active:
raise HTTPException(status_code=401, detail='Inactive user')
if not current_user.is_superuser:
raise HTTPException(status_code=400, detail="The user doesn't have enough privileges")
return current_user
def verify_password(plain_password, hashed_password):
settings_service = get_settings_service()
return settings_service.auth_settings.pwd_context.verify(plain_password, hashed_password)
def get_password_hash(password):
settings_service = get_settings_service()
return settings_service.auth_settings.pwd_context.hash(password)
def create_token(data: dict, expires_delta: timedelta):
settings_service = get_settings_service()
to_encode = data.copy()
expire = datetime.now(timezone.utc) + expires_delta
to_encode['exp'] = expire
return jwt.encode(
to_encode,
settings_service.auth_settings.SECRET_KEY,
algorithm=settings_service.auth_settings.ALGORITHM,
)
def create_super_user(
username: str,
password: str,
db: Session = Depends(get_session),
) -> User:
super_user = get_user_by_username(db, username)
if not super_user:
super_user = User(
username=username,
password=get_password_hash(password),
is_superuser=True,
is_active=True,
last_login_at=None,
)
db.add(super_user)
db.commit()
db.refresh(super_user)
return super_user
def create_user_longterm_token(db: Session = Depends(get_session)) -> dict:
settings_service = get_settings_service()
username = settings_service.auth_settings.SUPERUSER
password = settings_service.auth_settings.SUPERUSER_PASSWORD
if not username or not password:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail='Missing first superuser credentials',
)
super_user = create_super_user(db=db, username=username, password=password)
access_token_expires_longterm = timedelta(days=365)
access_token = create_token(
data={'sub': str(super_user.id)},
expires_delta=access_token_expires_longterm,
)
# Update: last_login_at
update_user_last_login_at(super_user.id, db)
return {
'access_token': access_token,
'refresh_token': None,
'token_type': 'bearer',
}
def create_user_api_key(user_id: UUID) -> dict:
access_token = create_token(
data={'sub': str(user_id), 'role': 'api_key'},
expires_delta=timedelta(days=365 * 2),
)
return {'api_key': access_token}
def get_user_id_from_token(token: str) -> UUID:
try:
user_id = jwt.get_unverified_claims(token)['sub']
return UUID(user_id)
except (KeyError, JWTError, ValueError):
return UUID(int=0)
def create_user_tokens(user_id: UUID, db: Session = Depends(get_session), update_last_login: bool = False) -> dict:
settings_service = get_settings_service()
access_token_expires = timedelta(minutes=settings_service.auth_settings.ACCESS_TOKEN_EXPIRE_MINUTES)
access_token = create_token(
data={'sub': str(user_id)},
expires_delta=access_token_expires,
)
refresh_token_expires = timedelta(minutes=settings_service.auth_settings.REFRESH_TOKEN_EXPIRE_MINUTES)
refresh_token = create_token(
data={'sub': str(user_id), 'type': 'rf'},
expires_delta=refresh_token_expires,
)
# Update: last_login_at
if update_last_login:
update_user_last_login_at(user_id, db)
return {
'access_token': access_token,
'refresh_token': refresh_token,
'token_type': 'bearer',
}
def create_refresh_token(refresh_token: str, db: Session = Depends(get_session)):
settings_service = get_settings_service()
try:
payload = jwt.decode(
refresh_token,
settings_service.auth_settings.SECRET_KEY,
algorithms=[settings_service.auth_settings.ALGORITHM],
)
user_id: UUID = payload.get('sub') # type: ignore
token_type: str = payload.get('type') # type: ignore
if user_id is None or token_type is None:
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail='Invalid refresh token')
return create_user_tokens(user_id, db)
except JWTError as e:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail='Invalid refresh token',
) from e
def authenticate_user(username: str, password: str, db: Session = Depends(get_session)) -> Optional[User]:
user = get_user_by_username(db, username)
if not user:
return None
if not user.is_active:
if not user.last_login_at:
raise HTTPException(status_code=400, detail='Waiting for approval')
raise HTTPException(status_code=400, detail='Inactive user')
return user if verify_password(password, user.password) else None
def add_padding(s):
# Calculate the number of padding characters needed
padding_needed = 4 - len(s) % 4
return s + '=' * padding_needed
def get_fernet(settings_service=Depends(get_settings_service)):
SECRET_KEY = settings_service.auth_settings.SECRET_KEY
# It's important that your secret key is 32 url-safe base64-encoded bytes
padded_secret_key = add_padding(SECRET_KEY)
fernet = Fernet(padded_secret_key)
return fernet
def encrypt_api_key(api_key: str, settings_service=Depends(get_settings_service)):
fernet = get_fernet(settings_service)
# Two-way encryption
encrypted_key = fernet.encrypt(api_key.encode())
return encrypted_key
def decrypt_api_key(encrypted_api_key: str, settings_service=Depends(get_settings_service)):
fernet = get_fernet(settings_service)
# Two-way decryption
if isinstance(encrypted_api_key, str):
encoded_bytes = encrypted_api_key.encode()
else:
encoded_bytes = encrypted_api_key
decrypted_key = fernet.decrypt(encoded_bytes).decode()
return decrypted_key
================================================
FILE: src/backend/bisheng/services/base.py
================================================
from abc import ABC
class Service(ABC):
name: str
ready: bool = False
def teardown(self):
pass
def set_ready(self):
self.ready = True
================================================
FILE: src/backend/bisheng/services/cache/__init__.py
================================================
from langflow.services.cache.service import InMemoryCache
from . import factory, service
__all__ = [
'factory',
'service',
'InMemoryCache',
]
================================================
FILE: src/backend/bisheng/services/cache/base.py
================================================
import abc
from bisheng.services.base import Service
class BaseCacheService(Service):
"""
Abstract base class for a cache.
"""
name = 'cache_service'
@abc.abstractmethod
def get(self, key):
"""
Retrieve an item from the cache.
Args:
key: The key of the item to retrieve.
Returns:
The value associated with the key, or None if the key is not found.
"""
@abc.abstractmethod
def set(self, key, value):
"""
Add an item to the cache.
Args:
key: The key of the item.
value: The value to cache.
"""
@abc.abstractmethod
def upsert(self, key, value):
"""
Add an item to the cache if it doesn't exist, or update it if it does.
Args:
key: The key of the item.
value: The value to cache.
"""
@abc.abstractmethod
def delete(self, key):
"""
Remove an item from the cache.
Args:
key: The key of the item to remove.
"""
@abc.abstractmethod
def clear(self):
"""
Clear all items from the cache.
"""
@abc.abstractmethod
def __contains__(self, key):
"""
Check if the key is in the cache.
Args:
key: The key of the item to check.
Returns:
True if the key is in the cache, False otherwise.
"""
@abc.abstractmethod
def __getitem__(self, key):
"""
Retrieve an item from the cache using the square bracket notation.
Args:
key: The key of the item to retrieve.
"""
@abc.abstractmethod
def __setitem__(self, key, value):
"""
Add an item to the cache using the square bracket notation.
Args:
key: The key of the item.
value: The value to cache.
"""
@abc.abstractmethod
def __delitem__(self, key):
"""
Remove an item from the cache using the square bracket notation.
Args:
key: The key of the item to remove.
"""
================================================
FILE: src/backend/bisheng/services/cache/factory.py
================================================
from typing import TYPE_CHECKING
from bisheng.services.cache.service import BaseCacheService, InMemoryCache, RedisCache
from bisheng.services.factory import ServiceFactory
from loguru import logger
if TYPE_CHECKING:
from bisheng.services.settings.service import SettingsService
class CacheServiceFactory(ServiceFactory):
def __init__(self):
super().__init__(BaseCacheService)
def create(self, settings_service: 'SettingsService'):
# Here you would have logic to create and configure a CacheService
# based on the settings_service
if settings_service.settings.CACHE_TYPE == 'redis':
logger.debug('Creating Redis cache')
redis_cache = RedisCache(
host=settings_service.settings.REDIS_HOST,
port=settings_service.settings.REDIS_PORT,
db=settings_service.settings.REDIS_DB,
expiration_time=settings_service.settings.REDIS_CACHE_EXPIRE,
)
if redis_cache.is_connected():
logger.debug('Redis cache is connected')
return redis_cache
logger.warning('Redis cache is not connected, falling back to in-memory cache')
return InMemoryCache()
elif settings_service.settings.CACHE_TYPE == 'memory':
return InMemoryCache()
================================================
FILE: src/backend/bisheng/services/cache/service.py
================================================
import pickle
import threading
import time
from collections import OrderedDict
from bisheng.services.base import Service
from bisheng.services.cache.base import BaseCacheService
from loguru import logger
class InMemoryCache(BaseCacheService, Service):
"""
A simple in-memory cache using an OrderedDict.
This cache supports setting a maximum size and expiration time for cached items.
When the cache is full, it uses a Least Recently Used (LRU) eviction policy.
Thread-safe using a threading Lock.
Attributes:
max_size (int, optional): Maximum number of items to store in the cache.
expiration_time (int, optional): Time in seconds after which a cached item expires. Default is 1 hour.
Example:
cache = InMemoryCache(max_size=3, expiration_time=5)
# setting cache values
cache.set("a", 1)
cache.set("b", 2)
cache["c"] = 3
# getting cache values
a = cache.get("a")
b = cache["b"]
"""
def __init__(self, max_size=None, expiration_time=60 * 60):
"""
Initialize a new InMemoryCache instance.
Args:
max_size (int, optional): Maximum number of items to store in the cache.
expiration_time (int, optional): Time in seconds after which a cached item expires. Default is 1 hour.
"""
self._cache = OrderedDict()
self._lock = threading.RLock()
self.max_size = max_size
self.expiration_time = expiration_time
def get(self, key):
"""
Retrieve an item from the cache.
Args:
key: The key of the item to retrieve.
Returns:
The value associated with the key, or None if the key is not found or the item has expired.
"""
with self._lock:
return self._get_without_lock(key)
def _get_without_lock(self, key):
"""
Retrieve an item from the cache without acquiring the lock.
"""
if item := self._cache.get(key):
if self.expiration_time is None or time.time() - item['time'] < self.expiration_time:
# Move the key to the end to make it recently used
self._cache.move_to_end(key)
# Check if the value is pickled
if isinstance(item['value'], bytes):
value = pickle.loads(item['value'])
else:
value = item['value']
return value
else:
self.delete(key)
return None
def set(self, key, value, pickle=False):
"""
Add an item to the cache.
If the cache is full, the least recently used item is evicted.
Args:
key: The key of the item.
value: The value to cache.
"""
with self._lock:
if key in self._cache:
# Remove existing key before re-inserting to update order
self.delete(key)
elif self.max_size and len(self._cache) >= self.max_size:
# Remove least recently used item
self._cache.popitem(last=False)
# pickle locally to mimic Redis
if pickle:
value = pickle.dumps(value)
self._cache[key] = {'value': value, 'time': time.time()}
def upsert(self, key, value):
"""
Inserts or updates a value in the cache.
If the existing value and the new value are both dictionaries, they are merged.
Args:
key: The key of the item.
value: The value to insert or update.
"""
with self._lock:
existing_value = self._get_without_lock(key)
if existing_value is not None and isinstance(existing_value, dict) and isinstance(value, dict):
existing_value.update(value)
value = existing_value
self.set(key, value)
def get_or_set(self, key, value):
"""
Retrieve an item from the cache. If the item does not exist,
set it with the provided value.
Args:
key: The key of the item.
value: The value to cache if the item doesn't exist.
Returns:
The cached value associated with the key.
"""
with self._lock:
if key in self._cache:
return self.get(key)
self.set(key, value)
return value
def delete(self, key):
"""
Remove an item from the cache.
Args:
key: The key of the item to remove.
"""
with self._lock:
self._cache.pop(key, None)
def clear(self):
"""
Clear all items from the cache.
"""
with self._lock:
self._cache.clear()
def __contains__(self, key):
"""Check if the key is in the cache."""
return key in self._cache
def __getitem__(self, key):
"""Retrieve an item from the cache using the square bracket notation."""
return self.get(key)
def __setitem__(self, key, value):
"""Add an item to the cache using the square bracket notation."""
self.set(key, value)
def __delitem__(self, key):
"""Remove an item from the cache using the square bracket notation."""
self.delete(key)
def __len__(self):
"""Return the number of items in the cache."""
return len(self._cache)
def __repr__(self):
"""Return a string representation of the InMemoryCache instance."""
return f'InMemoryCache(max_size={self.max_size}, expiration_time={self.expiration_time})'
class RedisCache(BaseCacheService, Service):
"""
A Redis-based cache implementation.
This cache supports setting an expiration time for cached items.
Attributes:
expiration_time (int, optional): Time in seconds after which a cached item expires. Default is 1 hour.
Example:
cache = RedisCache(expiration_time=5)
# setting cache values
cache.set("a", 1)
cache.set("b", 2)
cache["c"] = 3
# getting cache values
a = cache.get("a")
b = cache["b"]
"""
def __init__(self, host='localhost', port=6379, db=0, expiration_time=60 * 60):
"""
Initialize a new RedisCache instance.
Args:
host (str, optional): Redis host.
port (int, optional): Redis port.
db (int, optional): Redis DB.
expiration_time (int, optional): Time in seconds after which a
ached item expires. Default is 1 hour.
"""
try:
import redis
except ImportError as exc:
raise ImportError(
'RedisCache requires the redis-py package.'
' Please install bisheng with the deploy extra: pip install bisheng[deploy]'
) from exc
logger.warning(
'RedisCache is an experimental feature and may not work as expected.'
' Please report any issues to our GitHub repository.'
)
self._client = redis.StrictRedis(host=host, port=port, db=db)
self.expiration_time = expiration_time
# check connection
def is_connected(self):
"""
Check if the Redis client is connected.
"""
import redis
try:
self._client.ping()
return True
except redis.exceptions.ConnectionError:
return False
def get(self, key):
"""
Retrieve an item from the cache.
Args:
key: The key of the item to retrieve.
Returns:
The value associated with the key, or None if the key is not found.
"""
value = self._client.get(key)
return pickle.loads(value) if value else None
def set(self, key, value):
"""
Add an item to the cache.
Args:
key: The key of the item.
value: The value to cache.
"""
try:
if pickled := pickle.dumps(value):
result = self._client.setex(key, self.expiration_time, pickled)
if not result:
raise ValueError('RedisCache could not set the value.')
except TypeError as exc:
raise TypeError('RedisCache only accepts values that can be pickled. ') from exc
def upsert(self, key, value):
"""
Inserts or updates a value in the cache.
If the existing value and the new value are both dictionaries, they are merged.
Args:
key: The key of the item.
value: The value to insert or update.
"""
existing_value = self.get(key)
if existing_value is not None and isinstance(existing_value, dict) and isinstance(value, dict):
existing_value.update(value)
value = existing_value
self.set(key, value)
def delete(self, key):
"""
Remove an item from the cache.
Args:
key: The key of the item to remove.
"""
self._client.delete(key)
def clear(self):
"""
Clear all items from the cache.
"""
self._client.flushdb()
def __contains__(self, key):
"""Check if the key is in the cache."""
return False if key is None else self._client.exists(key)
def __getitem__(self, key):
"""Retrieve an item from the cache using the square bracket notation."""
return self.get(key)
def __setitem__(self, key, value):
"""Add an item to the cache using the square bracket notation."""
self.set(key, value)
def __delitem__(self, key):
"""Remove an item from the cache using the square bracket notation."""
self.delete(key)
def __repr__(self):
"""Return a string representation of the RedisCache instance."""
return f'RedisCache(expiration_time={self.expiration_time})'
================================================
FILE: src/backend/bisheng/services/chat/__init__.py
================================================
================================================
FILE: src/backend/bisheng/services/chat/cache.py
================================================
from contextlib import contextmanager
from typing import Any, Awaitable, Callable, List, Optional
import pandas as pd
from bisheng.services.base import Service
from PIL import Image
class Subject:
"""Base class for implementing the observer pattern."""
def __init__(self):
self.observers: List[Callable[[], None]] = []
def attach(self, observer: Callable[[], None]):
"""Attach an observer to the subject."""
self.observers.append(observer)
def detach(self, observer: Callable[[], None]):
"""Detach an observer from the subject."""
self.observers.remove(observer)
def notify(self):
"""Notify all observers about an event."""
for observer in self.observers:
if observer is None:
continue
observer()
class AsyncSubject:
"""Base class for implementing the async observer pattern."""
def __init__(self):
self.observers: List[Callable[[], Awaitable]] = []
def attach(self, observer: Callable[[], Awaitable]):
"""Attach an observer to the subject."""
self.observers.append(observer)
def detach(self, observer: Callable[[], Awaitable]):
"""Detach an observer from the subject."""
self.observers.remove(observer)
async def notify(self):
"""Notify all observers about an event."""
for observer in self.observers:
if observer is None:
continue
await observer()
class CacheService(Subject, Service):
"""Manages cache for different clients and notifies observers on changes."""
name = 'cache_service'
def __init__(self):
super().__init__()
self._cache = {}
self.current_client_id = None
self.current_cache = {}
@contextmanager
def set_client_id(self, client_id: str):
"""
Context manager to set the current client_id and associated cache.
Args:
client_id (str): The client identifier.
"""
previous_client_id = self.current_client_id
self.current_client_id = client_id
self.current_cache = self._cache.setdefault(client_id, {})
try:
yield
finally:
self.current_client_id = previous_client_id
self.current_cache = self._cache.get(self.current_client_id, {})
def add(self, name: str, obj: Any, obj_type: str, extension: Optional[str] = None):
"""
Add an object to the current client's cache.
Args:
name (str): The cache key.
obj (Any): The object to cache.
obj_type (str): The type of the object.
"""
object_extensions = {
'image': 'png',
'pandas': 'csv',
}
if obj_type in object_extensions:
_extension = object_extensions[obj_type]
else:
_extension = type(obj).__name__.lower()
self.current_cache[name] = {
'obj': obj,
'type': obj_type,
'extension': extension or _extension,
}
self.notify()
def add_pandas(self, name: str, obj: Any):
"""
Add a pandas DataFrame or Series to the current client's cache.
Args:
name (str): The cache key.
obj (Any): The pandas DataFrame or Series object.
"""
if isinstance(obj, (pd.DataFrame, pd.Series)):
self.add(name, obj.to_csv(), 'pandas', extension='csv')
else:
raise ValueError('Object is not a pandas DataFrame or Series')
def add_image(self, name: str, obj: Any, extension: str = 'png'):
"""
Add a PIL Image to the current client's cache.
Args:
name (str): The cache key.
obj (Any): The PIL Image object.
"""
if isinstance(obj, Image.Image):
self.add(name, obj, 'image', extension=extension)
else:
raise ValueError('Object is not a PIL Image')
def get(self, name: str):
"""
Get an object from the current client's cache.
Args:
name (str): The cache key.
Returns:
The cached object associated with the given cache key.
"""
return self.current_cache[name]
def get_last(self):
"""
Get the last added item in the current client's cache.
Returns:
The last added item in the cache.
"""
return list(self.current_cache.values())[-1]
cache_service = CacheService()
================================================
FILE: src/backend/bisheng/services/chat/config.py
================================================
class ChatConfig:
streaming: bool = True
================================================
FILE: src/backend/bisheng/services/chat/factory.py
================================================
from bisheng.services.chat.service import ChatService
from bisheng.services.factory import ServiceFactory
class ChatServiceFactory(ServiceFactory):
def __init__(self):
super().__init__(ChatService)
def create(self):
# Here you would have logic to create and configure a ChatService
return ChatService()
================================================
FILE: src/backend/bisheng/services/chat/service.py
================================================
import asyncio
import uuid
from collections import defaultdict
from typing import Any, Dict, List
import orjson
from bisheng.api.v1.schemas import ChatMessage, ChatResponse, FileResponse
from bisheng.interface.utils import pil_to_base64
from bisheng.services import ServiceType, service_manager
from bisheng.services.base import Service
from bisheng.services.chat.cache import Subject
from bisheng.services.chat.utils import process_graph
from fastapi import WebSocket, status
from loguru import logger
from starlette.websockets import WebSocketState
from .cache import cache_service
class ChatHistory(Subject):
def __init__(self):
super().__init__()
self.history: Dict[str, List[ChatMessage]] = defaultdict(list)
def add_message(self, client_id: str, message: ChatMessage):
"""Add a message to the chat history."""
self.history[client_id].append(message)
if not isinstance(message, FileResponse):
self.notify()
def get_history(self, client_id: str, filter_messages=True) -> List[ChatMessage]:
"""Get the chat history for a client."""
if history := self.history.get(client_id, []):
if filter_messages:
return [msg for msg in history if msg.type not in ['start', 'stream']]
return history
else:
return []
def empty_history(self, client_id: str):
"""Empty the chat history for a client."""
self.history[client_id] = []
class ChatService(Service):
name = 'chat_service'
def __init__(self):
self.active_connections: Dict[str, WebSocket] = {}
self.connection_ids: Dict[str, str] = {}
self.chat_history = ChatHistory()
self.chat_cache = cache_service
self.chat_cache.attach(self.update)
self.cache_service = service_manager.get(ServiceType.CACHE_SERVICE)
def on_chat_history_update(self):
"""Send the last chat message to the client."""
client_id = self.chat_cache.current_client_id
if client_id in self.active_connections:
chat_response = self.chat_history.get_history(client_id, filter_messages=False)[-1]
if chat_response.is_bot:
# Process FileResponse
if isinstance(chat_response, FileResponse):
# If data_type is pandas, convert to csv
if chat_response.data_type == 'pandas':
chat_response.data = chat_response.data.to_csv()
elif chat_response.data_type == 'image':
# Base64 encode the image
chat_response.data = pil_to_base64(chat_response.data)
# get event loop
loop = asyncio.get_event_loop()
coroutine = self.send_json(client_id, chat_response)
asyncio.run_coroutine_threadsafe(coroutine, loop)
def update(self):
if self.chat_cache.current_client_id in self.active_connections:
self.last_cached_object_dict = self.chat_cache.get_last()
# Add a new ChatResponse with the data
chat_response = FileResponse(
message=None,
type='file',
data=self.last_cached_object_dict['obj'],
data_type=self.last_cached_object_dict['type'],
)
self.chat_history.add_message(self.chat_cache.current_client_id, chat_response)
async def connect(self, client_id: str, websocket: WebSocket):
self.active_connections[client_id] = websocket
# This is to avoid having multiple clients with the same id
self.connection_ids[client_id] = f'{client_id}-{uuid.uuid4()}'
def disconnect(self, client_id: str):
self.active_connections.pop(client_id, None)
self.connection_ids.pop(client_id, None)
async def send_message(self, client_id: str, message: str):
websocket = self.active_connections[client_id]
await websocket.send_text(message)
async def send_json(self, client_id: str, message: ChatMessage):
websocket = self.active_connections[client_id]
await websocket.send_json(message.model_dump())
async def close_connection(self, client_id: str, code: int, reason: str):
if websocket := self.active_connections[client_id]:
try:
await websocket.close(code=code, reason=reason)
self.disconnect(client_id)
except RuntimeError as exc:
# This is to catch the following error:
# Unexpected ASGI message 'websocket.close', after sending 'websocket.close'
if 'after sending' in str(exc):
logger.error(f'Error closing connection: {exc}')
async def process_message(self, client_id: str, payload: Dict, langchain_object: Any):
# Process the graph data and chat message
chat_inputs = payload.pop('inputs', {})
chatkey = payload.pop('chatKey', None)
chat_inputs = ChatMessage(message=chat_inputs, chatKey=chatkey)
self.chat_history.add_message(client_id, chat_inputs)
# graph_data = payload
start_resp = ChatResponse(message=None, type='start', intermediate_steps='')
await self.send_json(client_id, start_resp)
# is_first_message = len(self.chat_history.get_history(client_id=client_id)) <= 1
# Generate result and thought
try:
logger.debug('Generating result and thought')
result, intermediate_steps, raw_output = await process_graph(
langchain_object=langchain_object,
chat_inputs=chat_inputs,
client_id=client_id,
session_id=self.connection_ids[client_id],
)
self.set_cache(client_id, langchain_object)
except Exception as e:
# Log stack trace
logger.exception(e)
self.chat_history.empty_history(client_id)
raise e
# Send a response back to the frontend, if needed
intermediate_steps = intermediate_steps or ''
history = self.chat_history.get_history(client_id, filter_messages=False)
file_responses = []
if history:
# Iterate backwards through the history
for msg in reversed(history):
if isinstance(msg, FileResponse):
if msg.data_type == 'image':
# Base64 encode the image
if isinstance(msg.data, str):
continue
msg.data = pil_to_base64(msg.data)
file_responses.append(msg)
if msg.type == 'start':
break
response = ChatResponse(
message=result,
intermediate_steps=intermediate_steps.strip(),
type='end',
files=file_responses,
)
await self.send_json(client_id, response)
self.chat_history.add_message(client_id, response)
def set_cache(self, client_id: str, langchain_object: Any) -> bool:
"""
Set the cache for a client.
"""
# client_id is the flow id but that already exists in the cache
# so we need to change it to something else
result_dict = {
'result': langchain_object,
'type': type(langchain_object),
}
self.cache_service.upsert(client_id, result_dict)
return client_id in self.cache_service
async def handle_websocket(self, client_id: str, websocket: WebSocket):
await self.connect(client_id, websocket)
try:
chat_history = self.chat_history.get_history(client_id)
# iterate and make BaseModel into dict
chat_history = [chat.model_dump() for chat in chat_history]
await websocket.send_json(chat_history)
while True:
json_payload = await websocket.receive_json()
if isinstance(json_payload, str):
payload = orjson.loads(json_payload)
elif isinstance(json_payload, dict):
payload = json_payload
if 'clear_history' in payload and payload['clear_history']:
self.chat_history.history[client_id] = []
continue
with self.chat_cache.set_client_id(client_id):
if langchain_object := self.cache_service.get(client_id).get('result'):
await self.process_message(client_id, payload, langchain_object)
else:
raise RuntimeError(f'Could not find a build result for client_id {client_id}')
except Exception as exc:
# Handle any exceptions that might occur
logger.exception(f'Error handling websocket: {exc}')
if websocket.client_state == WebSocketState.CONNECTED:
await self.close_connection(
client_id=client_id,
code=status.WS_1011_INTERNAL_ERROR,
reason=str(exc),
)
elif websocket.client_state == WebSocketState.DISCONNECTED:
self.disconnect(client_id)
finally:
try:
# first check if the connection is still open
if websocket.client_state == WebSocketState.CONNECTED:
await self.close_connection(
client_id=client_id,
code=status.WS_1000_NORMAL_CLOSURE,
reason='Client disconnected',
)
except Exception as exc:
logger.error(f'Error closing connection: {exc}')
self.disconnect(client_id)
def dict_to_markdown_table(my_dict):
markdown_table = '| Key | Value |\n|---|---|\n'
for key, value in my_dict.items():
markdown_table += f'| {key} | {value} |\n'
return markdown_table
def list_of_dicts_to_markdown_table(dict_list):
if not dict_list:
return 'No data provided.'
# Extract headers from the keys of the first dictionary
headers = dict_list[0].keys()
markdown_table = '| ' + ' | '.join(headers) + ' |\n'
markdown_table += '| ' + ' | '.join('---' for _ in headers) + ' |\n'
for row_dict in dict_list:
row = [str(row_dict.get(header, '')) for header in headers]
markdown_table += '| ' + ' | '.join(row) + ' |\n'
return markdown_table
================================================
FILE: src/backend/bisheng/services/chat/utils.py
================================================
from bisheng.api.v1.schemas import ChatMessage
from bisheng.interface.utils import try_setting_streaming_options
from bisheng.processing.base import get_result_and_steps
from loguru import logger
async def process_graph(
langchain_object,
chat_inputs: ChatMessage,
client_id: str,
session_id: str,
):
langchain_object = try_setting_streaming_options(langchain_object)
logger.debug('Loaded langchain object')
if langchain_object is None:
# Raise user facing error
raise ValueError('There was an error loading the langchain_object. Please, check all the nodes and try again.')
# Generate result and thought
try:
if chat_inputs.message is None:
logger.debug('No message provided')
chat_inputs.message = {}
logger.debug('Generating result and thought')
result, intermediate_steps, raw_output = await get_result_and_steps(
langchain_object,
chat_inputs.message,
client_id=client_id,
session_id=session_id,
)
logger.debug('Generated result and intermediate_steps')
return result, intermediate_steps, raw_output
except Exception as e:
# Log stack trace
logger.exception(e)
raise e
================================================
FILE: src/backend/bisheng/services/credentials/__init__.py
================================================
================================================
FILE: src/backend/bisheng/services/credentials/factory.py
================================================
from typing import TYPE_CHECKING
from bisheng.services.credentials.service import CredentialService
from bisheng.services.factory import ServiceFactory
if TYPE_CHECKING:
from bisheng.services.settings.service import SettingsService
class CredentialServiceFactory(ServiceFactory):
def __init__(self):
super().__init__(CredentialService)
def create(self, settings_service: 'SettingsService'):
return CredentialService(settings_service)
================================================
FILE: src/backend/bisheng/services/credentials/service.py
================================================
from typing import TYPE_CHECKING, Optional, Union
from uuid import UUID
from bisheng.services.auth import utils as auth_utils
from bisheng.services.base import Service
from bisheng.services.database.models.credential.model import Credential
from bisheng.services.deps import get_session
from fastapi import Depends
from sqlmodel import Session, select
if TYPE_CHECKING:
from bisheng.services.settings.service import SettingsService
class CredentialService(Service):
name = 'credential_service'
def __init__(self, settings_service: 'SettingsService'):
self.settings_service = settings_service
def get_credential(self, user_id: Union[UUID, str], name: str, session: Session = Depends(get_session)) -> str:
# we get the credential from the database
# credential = session.query(Credential).filter(Credential.user_id == user_id, Credential.name == name).first()
credential = session.exec(
select(Credential).where(Credential.user_id == user_id, Credential.name == name)
).first()
# we decrypt the value
if not credential or not credential.value:
raise ValueError(f'{name} credential not found.')
decrypted = auth_utils.decrypt_api_key(credential.value, settings_service=self.settings_service)
return decrypted
def list_credentials(
self, user_id: Union[UUID, str], session: Session = Depends(get_session)
) -> list[Optional[str]]:
credentials = session.exec(select(Credential).where(Credential.user_id == user_id)).all()
return [credential.name for credential in credentials]
================================================
FILE: src/backend/bisheng/services/deps.py
================================================
from bisheng.services import ServiceType, service_manager
from bisheng.services.session.service import SessionService
from bisheng.services.task.service import TaskService
# from sqlmodel import Session
# def get_credential_service() -> "CredentialService":
# return service_manager.get(ServiceType.CREDENTIAL_SERVICE) # type: ignore
# def get_plugins_service() -> "PluginService":
# return service_manager.get(ServiceType.PLUGIN_SERVICE) # type: ignore
# def get_settings_service() -> "SettingsService":
# try:
# # type: ignore
# return service_manager.get(ServiceType.SETTINGS_SERVICE)
# except ValueError:
# # initialize settings service
# from langflow.services.manager import initialize_settings_service
# initialize_settings_service()
# # type: ignore
# return service_manager.get(ServiceType.SETTINGS_SERVICE)
# def get_db_service() -> "DatabaseService":
# return service_manager.get(ServiceType.DATABASE_SERVICE) # type: ignore
# def get_session() -> Generator["Session", None, None]:
# db_service = get_db_service()
# yield from db_service.get_session()
# def get_cache_service() -> "BaseCacheService":
# return service_manager.get(ServiceType.CACHE_SERVICE) # type: ignore
def get_session_service() -> SessionService:
return service_manager.get(ServiceType.SESSION_SERVICE) # type: ignore
def get_task_service() -> TaskService:
return service_manager.get(ServiceType.TASK_SERVICE) # type: ignore
# def get_chat_service() -> "ChatService":
# return service_manager.get(ServiceType.CHAT_SERVICE) # type: ignore
# def get_store_service() -> "StoreService":
# return service_manager.get(ServiceType.STORE_SERVICE) # type: ignore
================================================
FILE: src/backend/bisheng/services/factory.py
================================================
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from bisheng.services.base import Service
class ServiceFactory:
def __init__(self, service_class):
self.service_class = service_class
def create(self, *args, **kwargs) -> 'Service':
raise NotImplementedError
================================================
FILE: src/backend/bisheng/services/manager.py
================================================
from typing import TYPE_CHECKING, Dict, List, Optional
from bisheng.services.schema import ServiceType
from loguru import logger
if TYPE_CHECKING:
from bisheng.services.base import Service
from bisheng.services.factory import ServiceFactory
class ServiceManager:
"""
Manages the creation of different services.
"""
def __init__(self):
self.services: Dict[str, 'Service'] = {}
self.factories = {}
self.dependencies = {}
def register_factory(
self,
service_factory: 'ServiceFactory',
dependencies: Optional[List[ServiceType]] = None,
):
"""
Registers a new factory with dependencies.
"""
if dependencies is None:
dependencies = []
service_name = service_factory.service_class.name
self.factories[service_name] = service_factory
self.dependencies[service_name] = dependencies
def get(self, service_name: ServiceType) -> 'Service':
"""
Get (or create) a service by its name.
"""
if service_name not in self.services:
self._create_service(service_name)
return self.services[service_name]
def _create_service(self, service_name: ServiceType):
"""
Create a new service given its name, handling dependencies.
"""
logger.debug(f'Create service {service_name}')
self._validate_service_creation(service_name)
# Create dependencies first
for dependency in self.dependencies.get(service_name, []):
if dependency not in self.services:
self._create_service(dependency)
# Collect the dependent services
dependent_services = {
dep.value: self.services[dep]
for dep in self.dependencies.get(service_name, [])
}
# Create the actual service
self.services[service_name] = self.factories[service_name].create(**dependent_services)
self.services[service_name].set_ready()
def _validate_service_creation(self, service_name: ServiceType):
"""
Validate whether the service can be created.
"""
if service_name not in self.factories:
raise ValueError(f"No factory registered for the service class '{service_name.name}'")
def update(self, service_name: ServiceType):
"""
Update a service by its name.
"""
if service_name in self.services:
logger.debug(f'Update service {service_name}')
self.services.pop(service_name, None)
self.get(service_name)
def teardown(self):
"""
Teardown all the services.
"""
for service in self.services.values():
if service is None:
continue
logger.debug(f'Teardown service {service.name}')
try:
service.teardown()
except Exception as exc:
logger.exception(exc)
self.services = {}
self.factories = {}
self.dependencies = {}
service_manager = ServiceManager()
def reinitialize_services():
"""
Reinitialize all the services needed.
"""
# service_manager.update(ServiceType.SETTINGS_SERVICE)
# service_manager.update(ServiceType.DATABASE_SERVICE)
# service_manager.update(ServiceType.CACHE_SERVICE)
# service_manager.update(ServiceType.CHAT_SERVICE)
service_manager.update(ServiceType.SESSION_SERVICE)
# service_manager.update(ServiceType.AUTH_SERVICE)
service_manager.update(ServiceType.TASK_SERVICE)
# # Test cache connection
# service_manager.get(ServiceType.CACHE_SERVICE)
# # Test database connection
# service_manager.get(ServiceType.DATABASE_SERVICE)
# # Test cache connection
# service_manager.get(ServiceType.CACHE_SERVICE)
# # Test database connection
# service_manager.get(ServiceType.DATABASE_SERVICE)
# def initialize_settings_service():
# """
# Initialize the settings manager.
# """
# from bisheng.services.settings import factory as settings_factory
# service_manager.register_factory(settings_factory.SettingsServiceFactory())
def initialize_session_service():
"""
Initialize the session manager.
"""
# from bisheng.services.cache import factory as cache_factory
from bisheng.services.session import factory as session_service_factory # type: ignore
# initialize_settings_service()
# service_manager.register_factory(cache_factory.CacheServiceFactory(),
# dependencies=[ServiceType.SETTINGS_SERVICE])
service_manager.register_factory(session_service_factory.SessionServiceFactory(), []
# dependencies=[ServiceType.CACHE_SERVICE],
)
================================================
FILE: src/backend/bisheng/services/plugins/__init__.py
================================================
================================================
FILE: src/backend/bisheng/services/plugins/base.py
================================================
from typing import Any
class BasePlugin:
def initialize(self):
pass
def teardown(self):
pass
def get(self) -> Any:
pass
class CallbackPlugin(BasePlugin):
def get_callback(self, _id=None):
pass
================================================
FILE: src/backend/bisheng/services/plugins/factory.py
================================================
from typing import TYPE_CHECKING
from bisheng.services.factory import ServiceFactory
from bisheng.services.plugins.service import PluginService
if TYPE_CHECKING:
from bisheng.services.settings.service import SettingsService
class PluginServiceFactory(ServiceFactory):
def __init__(self):
super().__init__(PluginService)
def create(self, settings_service: 'SettingsService'):
service = PluginService(settings_service)
return service
================================================
FILE: src/backend/bisheng/services/plugins/langfuse_plugin.py
================================================
from typing import Optional
from bisheng.services.deps import get_settings_service
from bisheng.services.plugins.base import CallbackPlugin
from loguru import logger
class LangfuseInstance:
_instance = None
@classmethod
def get(cls):
logger.debug('Getting Langfuse instance')
if cls._instance is None:
cls.create()
return cls._instance
@classmethod
def create(cls):
try:
logger.debug('Creating Langfuse instance')
from langfuse import Langfuse # type: ignore
settings_manager = get_settings_service()
if settings_manager.settings.LANGFUSE_PUBLIC_KEY and settings_manager.settings.LANGFUSE_SECRET_KEY:
logger.debug('Langfuse credentials found')
cls._instance = Langfuse(
public_key=settings_manager.settings.LANGFUSE_PUBLIC_KEY,
secret_key=settings_manager.settings.LANGFUSE_SECRET_KEY,
host=settings_manager.settings.LANGFUSE_HOST,
)
else:
logger.debug('No Langfuse credentials found')
cls._instance = None
except ImportError:
logger.debug('Langfuse not installed')
cls._instance = None
@classmethod
def update(cls):
logger.debug('Updating Langfuse instance')
cls._instance = None
cls.create()
@classmethod
def teardown(cls):
logger.debug('Tearing down Langfuse instance')
if cls._instance is not None:
cls._instance.flush()
cls._instance = None
class LangfusePlugin(CallbackPlugin):
def initialize(self):
LangfuseInstance.create()
def teardown(self):
LangfuseInstance.teardown()
def get(self):
return LangfuseInstance.get()
def get_callback(self, _id: Optional[str] = None):
if _id is None:
_id = 'default'
from langfuse.callback import CreateTrace # type: ignore
logger.debug('Initializing langfuse callback')
try:
langfuse_instance = self.get()
if langfuse_instance is not None and hasattr(langfuse_instance, 'trace'):
trace = langfuse_instance.trace(CreateTrace(name='bisheng-' + _id, id=_id))
if trace:
return trace.getNewHandler()
except Exception as exc:
logger.error(f'Error initializing langfuse callback: {exc}')
return None
================================================
FILE: src/backend/bisheng/services/plugins/service.py
================================================
import importlib
import inspect
import os
from typing import TYPE_CHECKING, Union
from bisheng.services.base import Service
from bisheng.services.plugins.base import BasePlugin, CallbackPlugin
from loguru import logger
if TYPE_CHECKING:
from bisheng.services.settings.service import SettingsService
class PluginService(Service):
name = 'plugin_service'
def __init__(self, settings_service: 'SettingsService'):
self.plugins: dict[str, BasePlugin] = {}
# plugin_dir = settings_service.settings.PLUGIN_DIR
self.plugin_dir = os.path.dirname(__file__)
self.plugins_base_module = 'bisheng.services.plugins'
self.load_plugins()
def load_plugins(self):
base_files = ['base.py', 'service.py', 'factory.py', '__init__.py']
for module in os.listdir(self.plugin_dir):
if module.endswith('.py') and module not in base_files:
plugin_name = module[:-3]
module_path = f'{self.plugins_base_module}.{plugin_name}'
try:
mod = importlib.import_module(module_path)
for attr_name in dir(mod):
attr = getattr(mod, attr_name)
if (
inspect.isclass(attr)
and issubclass(attr, BasePlugin)
and attr not in [CallbackPlugin, BasePlugin]
):
self.register_plugin(plugin_name, attr())
except Exception as exc:
logger.error(f'Error loading plugin {plugin_name}: {exc}')
def register_plugin(self, plugin_name, plugin_instance):
self.plugins[plugin_name] = plugin_instance
plugin_instance.initialize()
def get_plugin(self, plugin_name) -> Union[BasePlugin, None]:
return self.plugins.get(plugin_name)
def get(self, plugin_name):
if plugin := self.get_plugin(plugin_name):
return plugin.get()
return None
def teardown(self):
for plugin in self.plugins.values():
plugin.teardown()
def get_callbacks(self, _id=None):
callbacks = []
for plugin in self.plugins.values():
if isinstance(plugin, CallbackPlugin):
callback = plugin.get_callback(_id=_id)
if callback:
callbacks.append(callback)
return callbacks
================================================
FILE: src/backend/bisheng/services/schema.py
================================================
from enum import Enum
class ServiceType(str, Enum):
"""
Enum for the different types of services that can be
registered with the service manager.
"""
# AUTH_SERVICE = "auth_service"
# CACHE_SERVICE = "cache_service"
# SETTINGS_SERVICE = "settings_service"
# DATABASE_SERVICE = "database_service"
# CHAT_SERVICE = "chat_service"
SESSION_SERVICE = 'session_service'
TASK_SERVICE = 'task_service'
# PLUGIN_SERVICE = "plugin_service"
# STORE_SERVICE = "store_service"
# CREDENTIAL_SERVICE = "credential_service"
================================================
FILE: src/backend/bisheng/services/session/__init__.py
================================================
================================================
FILE: src/backend/bisheng/services/session/factory.py
================================================
from bisheng.services.factory import ServiceFactory
from bisheng.services.session.service import SessionService
# if TYPE_CHECKING:
# from bisheng.services.cache.service import BaseCacheService
class SessionServiceFactory(ServiceFactory):
def __init__(self):
super().__init__(SessionService)
def create(self):
return SessionService()
================================================
FILE: src/backend/bisheng/services/session/service.py
================================================
from bisheng.api.utils import build_flow_no_yield
from bisheng.core.cache.redis_manager import get_redis_client_sync
from bisheng.services.base import Service
from bisheng.services.session.utils import compute_dict_hash, session_id_generator
# if TYPE_CHECKING:
# from bisheng.services.cache.base import BaseCacheService
class SessionService(Service):
name = 'session_service'
def __init__(self):
self.cache_service = get_redis_client_sync()
async def load_session(self, key, data_graph, **kwargs):
# Check if the data is cached
if key in self.cache_service:
return await self.cache_service.aget(key)
if key is None:
key = self.generate_key(session_id=None, data_graph=data_graph)
# If not cached, build the graph and cache it
# graph, artifacts = await build_sorted_vertices(data_graph)
# Complete with custom initialization methodsapiAlignment with Chat
artifacts = {}
graph = await build_flow_no_yield(graph_data=data_graph, **kwargs)
await self.cache_service.aset(key, (graph, artifacts))
return graph, artifacts
def build_key(self, session_id, data_graph):
json_hash = compute_dict_hash(data_graph)
return f"{session_id}{'_' if session_id else ''}{json_hash}"
def generate_key(self, session_id, data_graph):
# Hash the JSON and combine it with the session_id to create a unique key
if session_id is None:
# generate a 5 char session_id to concatenate with the json_hash
session_id = session_id_generator()
return self.build_key(session_id, data_graph=data_graph).lower()
def update_session(self, session_id, value):
self.cache_service.set(session_id, value)
def clear_session(self, session_id):
self.cache_service.delete(session_id)
================================================
FILE: src/backend/bisheng/services/session/utils.py
================================================
import hashlib
import random
import string
from bisheng.common.utils.util import orjson_dumps
from bisheng.core.cache.utils import filter_json
def session_id_generator(size=6):
return ''.join(random.SystemRandom().choices(string.ascii_uppercase + string.digits, k=size))
def compute_dict_hash(graph_data):
graph_data = filter_json(graph_data)
cleaned_graph_json = orjson_dumps(graph_data, sort_keys=True)
return hashlib.sha256(cleaned_graph_json.encode('utf-8')).hexdigest()
================================================
FILE: src/backend/bisheng/services/settings/__init__.py
================================================
from . import factory, service
__all__ = ['factory', 'service']
================================================
FILE: src/backend/bisheng/services/settings/auth.py
================================================
import secrets
from pathlib import Path
from typing import Optional
from bisheng.services.settings.constants import DEFAULT_SUPERUSER, DEFAULT_SUPERUSER_PASSWORD
from bisheng.services.settings.utils import read_secret_from_file, write_secret_to_file
from loguru import logger
from passlib.context import CryptContext
from pydantic import Field, field_validator
from pydantic_settings import SettingsConfigDict, BaseSettings
class AuthSettings(BaseSettings):
# Login settings
CONFIG_DIR: str
SECRET_KEY: str = Field(
default='',
description='Secret key for JWT. If not provided, a random one will be generated.',
frozen=False,
)
ALGORITHM: str = 'HS256'
ACCESS_TOKEN_EXPIRE_MINUTES: int = 60
REFRESH_TOKEN_EXPIRE_MINUTES: int = 60 * 12 * 7
# API Key to execute /process endpoint
API_KEY_SECRET_KEY: Optional[str] = 'b82818e0ad4ff76615c5721ee21004b07d84cd9b87ba4d9cb42374da134b841a'
API_KEY_ALGORITHM: str = 'HS256'
API_V1_STR: str = '/api/v1'
# If AUTO_LOGIN = True
# > The application does not request login and logs in automatically as a super user.
AUTO_LOGIN: bool = True
NEW_USER_IS_ACTIVE: bool = False
SUPERUSER: str = DEFAULT_SUPERUSER
SUPERUSER_PASSWORD: str = DEFAULT_SUPERUSER_PASSWORD
pwd_context: CryptContext = CryptContext(schemes=['bcrypt'], deprecated='auto')
model_config = SettingsConfigDict(validate_assignment=True, extra='ignore', env_prefix='bisheng_')
def reset_credentials(self):
self.SUPERUSER = DEFAULT_SUPERUSER
self.SUPERUSER_PASSWORD = DEFAULT_SUPERUSER_PASSWORD
@field_validator('SECRET_KEY', mode='before')
@classmethod
def get_secret_key(cls, value, values):
config_dir = values.get('CONFIG_DIR')
if not config_dir:
logger.debug('No CONFIG_DIR provided, not saving secret key')
return value or secrets.token_urlsafe(32)
secret_key_path = Path(config_dir) / 'secret_key'
if value:
logger.debug('Secret key provided')
write_secret_to_file(secret_key_path, value)
else:
logger.debug('No secret key provided, generating a random one')
if secret_key_path.exists():
value = read_secret_from_file(secret_key_path)
logger.debug('Loaded secret key')
if not value:
value = secrets.token_urlsafe(32)
write_secret_to_file(secret_key_path, value)
logger.debug('Saved secret key')
else:
value = secrets.token_urlsafe(32)
write_secret_to_file(secret_key_path, value)
logger.debug('Saved secret key')
return value
================================================
FILE: src/backend/bisheng/services/settings/base.py
================================================
import contextlib
import json
import os
from pathlib import Path
from shutil import copy2
from typing import List, Optional
import orjson
import yaml
from loguru import logger
from pydantic import field_validator, validator
from pydantic_settings import BaseSettings, SettingsConfigDict
# BASE_COMPONENTS_PATH = str(Path(__file__).parent / "components")
BASE_COMPONENTS_PATH = str(Path(__file__).parent.parent.parent / 'components')
class Settings(BaseSettings):
CHAINS: dict = {}
AGENTS: dict = {}
PROMPTS: dict = {}
LLMS: dict = {}
TOOLS: dict = {}
MEMORIES: dict = {}
EMBEDDINGS: dict = {}
VECTORSTORES: dict = {}
DOCUMENTLOADERS: dict = {}
WRAPPERS: dict = {}
RETRIEVERS: dict = {}
TOOLKITS: dict = {}
TEXTSPLITTERS: dict = {}
UTILITIES: dict = {}
OUTPUT_PARSERS: dict = {}
CUSTOM_COMPONENTS: dict = {}
# Define the default LANGFLOW_DIR
CONFIG_DIR: Optional[str] = None
DEV: bool = False
DATABASE_URL: Optional[str] = None
CACHE_TYPE: str = 'memory'
REMOVE_API_KEYS: bool = False
COMPONENTS_PATH: List[str] = []
LANGCHAIN_CACHE: str = 'InMemoryCache'
# Redis
REDIS_HOST: str = 'localhost'
REDIS_PORT: int = 6379
REDIS_DB: int = 0
REDIS_CACHE_EXPIRE: int = 3600
# PLUGIN_DIR: Optional[str] = None
LANGFUSE_SECRET_KEY: Optional[str] = None
LANGFUSE_PUBLIC_KEY: Optional[str] = None
LANGFUSE_HOST: Optional[str] = None
STORE: Optional[bool] = True
STORE_URL: Optional[str] = 'https://api.langflow.store'
DOWNLOAD_WEBHOOK_URL: Optional[
str
] = 'https://api.langflow.store/flows/trigger/ec611a61-8460-4438-b187-a4f65e5559d4'
LIKE_WEBHOOK_URL: Optional[str] = 'https://api.langflow.store/flows/trigger/64275852-ec00-45c1-984e-3bff814732da'
@field_validator('CONFIG_DIR', mode="before")
@classmethod
def set_langflow_dir(cls, value):
if not value:
from platformdirs import user_cache_dir
# Define the app name and author
app_name = 'langflow'
app_author = 'logspace'
# Get the cache directory for the application
cache_dir = user_cache_dir(app_name, app_author)
# Create a .langflow directory inside the cache directory
value = Path(cache_dir)
value.mkdir(parents=True, exist_ok=True)
if isinstance(value, str):
value = Path(value)
if not value.exists():
value.mkdir(parents=True, exist_ok=True)
return str(value)
@field_validator('DATABASE_URL', mode='before')
@classmethod
def set_database_url(cls, value, values):
if not value:
logger.debug('No database_url provided, trying LANGFLOW_DATABASE_URL env variable')
if langflow_database_url := os.getenv('LANGFLOW_DATABASE_URL'):
value = langflow_database_url
logger.debug('Using LANGFLOW_DATABASE_URL env variable.')
else:
logger.debug('No DATABASE_URL env variable, using sqlite database')
# Originally, we used sqlite:///./langflow.db
# so we need to migrate to the new format
# if there is a database in that location
if not values['CONFIG_DIR']:
raise ValueError('CONFIG_DIR not set, please set it or provide a DATABASE_URL')
new_path = f"{values['CONFIG_DIR']}/langflow.db"
if Path('./langflow.db').exists():
if Path(new_path).exists():
logger.debug(f'Database already exists at {new_path}, using it')
else:
try:
logger.debug('Copying existing database to new location')
copy2('./langflow.db', new_path)
logger.debug(f'Copied existing database to {new_path}')
except Exception:
logger.error('Failed to copy database, using default path')
new_path = './langflow.db'
value = f'sqlite:///{new_path}'
return value
@field_validator('COMPONENTS_PATH', mode='before')
@classmethod
def set_components_path(cls, value):
if os.getenv('LANGFLOW_COMPONENTS_PATH'):
logger.debug('Adding LANGFLOW_COMPONENTS_PATH to components_path')
langflow_component_path = os.getenv('LANGFLOW_COMPONENTS_PATH')
if Path(langflow_component_path).exists() and langflow_component_path not in value:
if isinstance(langflow_component_path, list):
for path in langflow_component_path:
if path not in value:
value.append(path)
logger.debug(f'Extending {langflow_component_path} to components_path')
elif langflow_component_path not in value:
value.append(langflow_component_path)
logger.debug(f'Appending {langflow_component_path} to components_path')
if not value:
value = [BASE_COMPONENTS_PATH]
logger.debug('Setting default components path to components_path')
elif BASE_COMPONENTS_PATH not in value:
value.append(BASE_COMPONENTS_PATH)
logger.debug('Adding default components path to components_path')
logger.debug(f'Components path: {value}')
return value
model_config = SettingsConfigDict(validate_assignment=True, extra='ignore', env_prefix='LANGFLOW_')
# @model_validator()
# @classmethod
# def validate_lists(cls, values):
# for key, value in values.items():
# if key != "dev" and not value:
# values[key] = []
# return values
def update_from_yaml(self, file_path: str, dev: bool = False):
new_settings = load_settings_from_yaml(file_path)
self.CHAINS = new_settings.CHAINS or {}
self.AGENTS = new_settings.AGENTS or {}
self.PROMPTS = new_settings.PROMPTS or {}
self.LLMS = new_settings.LLMS or {}
self.TOOLS = new_settings.TOOLS or {}
self.MEMORIES = new_settings.MEMORIES or {}
self.WRAPPERS = new_settings.WRAPPERS or {}
self.TOOLKITS = new_settings.TOOLKITS or {}
self.TEXTSPLITTERS = new_settings.TEXTSPLITTERS or {}
self.UTILITIES = new_settings.UTILITIES or {}
self.EMBEDDINGS = new_settings.EMBEDDINGS or {}
self.VECTORSTORES = new_settings.VECTORSTORES or {}
self.DOCUMENTLOADERS = new_settings.DOCUMENTLOADERS or {}
self.RETRIEVERS = new_settings.RETRIEVERS or {}
self.OUTPUT_PARSERS = new_settings.OUTPUT_PARSERS or {}
self.CUSTOM_COMPONENTS = new_settings.CUSTOM_COMPONENTS or {}
self.COMPONENTS_PATH = new_settings.COMPONENTS_PATH or []
self.DEV = dev
def update_settings(self, **kwargs):
logger.debug('Updating settings')
for key, value in kwargs.items():
# value may contain sensitive information, so we don't want to log it
if not hasattr(self, key):
logger.debug(f'Key {key} not found in settings')
continue
logger.debug(f'Updating {key}')
if isinstance(getattr(self, key), list):
# value might be a '[something]' string
with contextlib.suppress(json.decoder.JSONDecodeError):
value = orjson.loads(str(value))
if isinstance(value, list):
for item in value:
if isinstance(item, Path):
item = str(item)
if item not in getattr(self, key):
getattr(self, key).append(item)
logger.debug(f'Extended {key}')
else:
if isinstance(value, Path):
value = str(value)
if value not in getattr(self, key):
getattr(self, key).append(value)
logger.debug(f'Appended {key}')
else:
setattr(self, key, value)
logger.debug(f'Updated {key}')
logger.debug(f'{key}: {getattr(self, key)}')
def save_settings_to_yaml(settings: Settings, file_path: str):
with open(file_path, 'w') as f:
settings_dict = settings.model_dump()
yaml.dump(settings_dict, f)
def load_settings_from_yaml(file_path: str) -> Settings:
# Check if a string is a valid path or a file name
if '/' not in file_path:
# Get current path
current_path = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(current_path, file_path)
with open(file_path, 'r') as f:
settings_dict = yaml.safe_load(f)
settings_dict = {k.upper(): v for k, v in settings_dict.items()}
for key in settings_dict:
if key not in Settings.model_fields.keys():
raise KeyError(f'Key {key} not found in settings')
logger.debug(f'Loading {len(settings_dict[key])} {key} from {file_path}')
return Settings(**settings_dict)
================================================
FILE: src/backend/bisheng/services/settings/constants.py
================================================
DEFAULT_SUPERUSER = 'admin'
DEFAULT_SUPERUSER_PASSWORD = '1234'
================================================
FILE: src/backend/bisheng/services/settings/factory.py
================================================
from pathlib import Path
from bisheng.services.factory import ServiceFactory
from bisheng.services.settings.service import SettingsService
class SettingsServiceFactory(ServiceFactory):
def __init__(self):
super().__init__(SettingsService)
def create(self):
# Here you would have logic to create and configure a SettingsService
bisheng_dir = Path(__file__).parent.parent.parent
return SettingsService.load_settings_from_yaml(str(bisheng_dir / 'config.yaml'))
================================================
FILE: src/backend/bisheng/services/settings/service.py
================================================
import os
import yaml
from bisheng.services.base import Service
from bisheng.services.settings.auth import AuthSettings
from bisheng.services.settings.base import Settings
from loguru import logger
class SettingsService(Service):
name = 'settings_service'
def __init__(self, settings: Settings, auth_settings: AuthSettings):
super().__init__()
self.settings = settings
self.auth_settings = auth_settings
@classmethod
def load_settings_from_yaml(cls, file_path: str) -> 'SettingsService':
# Check if a string is a valid path or a file name
if '/' not in file_path:
# Get current path
current_path = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(current_path, file_path)
with open(file_path, 'r') as f:
settings_dict = yaml.safe_load(f)
settings_dict = {k.upper(): v for k, v in settings_dict.items()}
for key in settings_dict:
if key not in Settings.model_fields.keys():
raise KeyError(f'Key {key} not found in settings')
logger.debug(f'Loading {len(settings_dict[key])} {key} from {file_path}')
settings = Settings(**settings_dict)
if not settings.CONFIG_DIR:
raise ValueError('CONFIG_DIR must be set in settings')
auth_settings = AuthSettings(
CONFIG_DIR=settings.CONFIG_DIR,
)
return cls(settings, auth_settings)
================================================
FILE: src/backend/bisheng/services/settings/utils.py
================================================
import os
import platform
from pathlib import Path
from loguru import logger
def set_secure_permissions(file_path):
if platform.system() in ['Linux', 'Darwin']: # Unix/Linux/Mac
os.chmod(file_path, 0o600)
elif platform.system() == 'Windows':
import win32api
import win32con
import win32security
user, domain, _ = win32security.LookupAccountName('', win32api.GetUserName())
sd = win32security.GetFileSecurity(file_path, win32security.DACL_SECURITY_INFORMATION)
dacl = win32security.ACL()
# Set the new DACL for the file: read and write access for the owner, no access for everyone else
dacl.AddAccessAllowedAce(
win32security.ACL_REVISION,
win32con.GENERIC_READ | win32con.GENERIC_WRITE,
user,
)
sd.SetSecurityDescriptorDacl(1, dacl, 0)
win32security.SetFileSecurity(file_path, win32security.DACL_SECURITY_INFORMATION, sd)
else:
print('Unsupported OS')
def write_secret_to_file(path: Path, value: str) -> None:
with path.open('wb') as f:
f.write(value.encode('utf-8'))
try:
set_secure_permissions(path)
except Exception:
logger.error('Failed to set secure permissions on secret key')
def read_secret_from_file(path: Path) -> str:
with path.open('r') as f:
return f.read()
================================================
FILE: src/backend/bisheng/services/store/__init__.py
================================================
================================================
FILE: src/backend/bisheng/services/store/exceptions.py
================================================
class CustomException(Exception):
def __init__(self, detail, status_code):
super().__init__(detail)
self.status_code = status_code
# Define custom exceptions with status codes
class UnauthorizedError(CustomException):
def __init__(self, detail='Unauthorized access'):
super().__init__(detail, 401)
class ForbiddenError(CustomException):
def __init__(self, detail='Forbidden'):
super().__init__(detail, 403)
class APIKeyError(CustomException):
def __init__(self, detail='API key error'):
super().__init__(detail, 400) # ! Should be 401
class FilterError(CustomException):
def __init__(self, detail='Filter error'):
super().__init__(detail, 400)
================================================
FILE: src/backend/bisheng/services/store/factory.py
================================================
from typing import TYPE_CHECKING
from bisheng.services.factory import ServiceFactory
from bisheng.services.store.service import StoreService
if TYPE_CHECKING:
from bisheng.services.settings.service import SettingsService
class StoreServiceFactory(ServiceFactory):
def __init__(self):
super().__init__(StoreService)
def create(self, settings_service: 'SettingsService'):
return StoreService(settings_service)
================================================
FILE: src/backend/bisheng/services/store/schema.py
================================================
from typing import List, Optional
from uuid import UUID
from pydantic import field_validator, BaseModel
class TagResponse(BaseModel):
id: UUID
name: Optional[str] = None
class UsersLikesResponse(BaseModel):
likes_count: Optional[int] = None
liked_by_user: Optional[bool] = None
class CreateComponentResponse(BaseModel):
id: UUID
class TagsIdResponse(BaseModel):
tags_id: Optional[TagResponse] = None
class ListComponentResponse(BaseModel):
id: Optional[UUID] = None
name: Optional[str] = None
description: Optional[str] = None
liked_by_count: Optional[int] = None
liked_by_user: Optional[bool] = None
is_component: Optional[bool] = None
metadata: Optional[dict] = {}
user_created: Optional[dict] = {}
tags: Optional[List[TagResponse]] = None
downloads_count: Optional[int] = None
last_tested_version: Optional[str] = None
private: Optional[bool] = None
# tags comes as a TagsIdResponse but we want to return a list of TagResponse
@field_validator('tags', mode="before")
@classmethod
def tags_to_list(cls, v):
# Check if all values are have id and name
# if so, return v else transform to TagResponse
if not v:
return v
if all(['id' in tag and 'name' in tag for tag in v]):
return v
else:
return [TagResponse(**tag.get('tags_id')) for tag in v if tag.get('tags_id')]
class ListComponentResponseModel(BaseModel):
count: Optional[int] = 0
authorized: bool
results: Optional[List[ListComponentResponse]] = None
class DownloadComponentResponse(BaseModel):
id: UUID
name: Optional[str] = None
description: Optional[str] = None
data: Optional[dict] = None
is_component: Optional[bool] = None
metadata: Optional[dict] = {}
class StoreComponentCreate(BaseModel):
name: str
description: Optional[str] = None
data: dict
tags: Optional[List[str]] = None
parent: Optional[UUID] = None
is_component: Optional[bool] = None
last_tested_version: Optional[str] = None
private: Optional[bool] = True
================================================
FILE: src/backend/bisheng/services/store/service.py
================================================
import json
from contextlib import asynccontextmanager
from contextvars import ContextVar
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple
from uuid import UUID
import httpx
from bisheng.services.base import Service
from bisheng.services.store.exceptions import APIKeyError, FilterError, ForbiddenError
from bisheng.services.store.schema import (CreateComponentResponse, DownloadComponentResponse,
ListComponentResponse, ListComponentResponseModel,
StoreComponentCreate)
from bisheng.services.store.utils import (process_component_data, process_tags_for_post,
update_components_with_user_data)
from httpx import HTTPError, HTTPStatusError
from loguru import logger
if TYPE_CHECKING:
from bisheng.services.settings.service import SettingsService
user_data_var: ContextVar[Optional[Dict[str, Any]]] = ContextVar('user_data', default=None)
@asynccontextmanager
async def user_data_context(store_service: 'StoreService', api_key: Optional[str] = None):
# Fetch and set user data to the context variable
if api_key:
try:
user_data, _ = await store_service._get(
f'{store_service.base_url}/users/me', api_key, params={'fields': 'id'}
)
user_data_var.set(user_data[0])
except HTTPStatusError as exc:
if exc.response.status_code == 403:
raise ValueError('Invalid API key')
try:
yield
finally:
# Clear the user data from the context variable
user_data_var.set(None)
class StoreService(Service):
"""This is a service that integrates bisheng with the store which
is a Directus instance. It allows to search, get and post components to
the store."""
name = 'store_service'
def __init__(self, settings_service: 'SettingsService'):
self.settings_service = settings_service
self.base_url = self.settings_service.settings.STORE_URL
self.download_webhook_url = self.settings_service.settings.DOWNLOAD_WEBHOOK_URL
self.like_webhook_url = self.settings_service.settings.LIKE_WEBHOOK_URL
self.components_url = f'{self.base_url}/items/components'
self.default_fields = [
'id',
'name',
'description',
'user_created.username',
'is_component',
'tags.tags_id.name',
'tags.tags_id.id',
'count(liked_by)',
'count(downloads)',
'metadata',
'last_tested_version',
'private',
]
# Create a context manager that will use the api key to
# get the user data and all requests inside the context manager
# will make a property return that data
# Without making the request multiple times
async def check_api_key(self, api_key: str):
# Check if the api key is valid
# If it is, return True
# If it is not, return False
try:
user_data, _ = await self._get(f'{self.base_url}/users/me', api_key, params={'fields': 'id'})
return 'id' in user_data[0]
except HTTPStatusError as exc:
if exc.response.status_code in [403, 401]:
return False
else:
raise ValueError(f'Unexpected status code: {exc.response.status_code}')
except Exception as exc:
raise ValueError(f'Unexpected error: {exc}')
async def _get(
self, url: str, api_key: Optional[str] = None, params: Optional[Dict[str, Any]] = None
) -> Tuple[List[Dict[str, Any]], Dict[str, Any]]:
"""Utility method to perform GET requests."""
if api_key:
headers = {'Authorization': f'Bearer {api_key}'}
else:
headers = {}
async with httpx.AsyncClient() as client:
try:
response = await client.get(url, headers=headers, params=params)
response.raise_for_status()
except HTTPError as exc:
raise exc
except Exception as exc:
raise ValueError(f'GET failed: {exc}')
json_response = response.json()
result = json_response['data']
metadata = {}
if 'meta' in json_response:
metadata = json_response['meta']
if isinstance(result, dict):
return [result], metadata
return result, metadata
async def call_webhook(self, api_key: str, webhook_url: str, component_id: UUID) -> None:
# The webhook is a POST request with the data in the body
# For now we are calling it just for testing
try:
headers = {'Authorization': f'Bearer {api_key}'}
async with httpx.AsyncClient() as client:
response = await client.post(webhook_url, headers=headers, json={'component_id': str(component_id)})
response.raise_for_status()
return response.json()
except HTTPError as exc:
raise exc
except Exception as exc:
logger.debug(f'Webhook failed: {exc}')
def build_tags_filter(self, tags: List[str]):
tags_filter: Dict[str, Any] = {'tags': {'_and': []}}
for tag in tags:
tags_filter['tags']['_and'].append({'_some': {'tags_id': {'name': {'_eq': tag}}}})
return tags_filter
async def count_components(
self,
filter_conditions: List[Dict[str, Any]],
api_key: Optional[str] = None,
use_api_key: Optional[bool] = False,
) -> int:
params = {'aggregate': json.dumps({'count': '*'})}
if filter_conditions:
params['filter'] = json.dumps({'_and': filter_conditions})
api_key = api_key if use_api_key else None
results, _ = await self._get(self.components_url, api_key, params)
return int(results[0].get('count', 0))
@staticmethod
def build_search_filter_conditions(query: str):
# instead of build the param ?search=query, we will build the filter
# that will use _icontains (case insensitive)
conditions: Dict[str, Any] = {'_or': []}
conditions['_or'].append({'name': {'_icontains': query}})
conditions['_or'].append({'description': {'_icontains': query}})
conditions['_or'].append({'tags': {'tags_id': {'name': {'_icontains': query}}}})
conditions['_or'].append({'user_created': {'username': {'_icontains': query}}})
return conditions
def build_filter_conditions(
self,
component_id: Optional[str] = None,
search: Optional[str] = None,
private: Optional[bool] = None,
tags: Optional[List[str]] = None,
is_component: Optional[bool] = None,
filter_by_user: Optional[bool] = False,
liked: Optional[bool] = False,
store_api_Key: Optional[str] = None,
):
filter_conditions = []
if search is not None:
search_conditions = self.build_search_filter_conditions(search)
filter_conditions.append(search_conditions)
if private is not None:
filter_conditions.append({'private': {'_eq': private}})
if tags:
tags_filter = self.build_tags_filter(tags)
filter_conditions.append(tags_filter)
if component_id is not None:
filter_conditions.append({'id': {'_eq': component_id}})
if is_component is not None:
filter_conditions.append({'is_component': {'_eq': is_component}})
if liked and store_api_Key:
liked_filter = self.build_liked_filter()
filter_conditions.append(liked_filter)
elif liked and not store_api_Key:
raise APIKeyError('You must provide an API key to filter by likes')
if filter_by_user and store_api_Key:
user_data = user_data_var.get()
if not user_data:
raise ValueError('No user data')
filter_conditions.append({'user_created': {'_eq': user_data['id']}})
elif filter_by_user and not store_api_Key:
raise APIKeyError('You must provide an API key to filter your components')
else:
filter_conditions.append({'private': {'_eq': False}})
return filter_conditions
def build_liked_filter(self):
user_data = user_data_var.get()
# params["filter"] = json.dumps({"user_created": {"_eq": user_data["id"]}})
if not user_data:
raise ValueError('No user data')
return {'liked_by': {'directus_users_id': {'_eq': user_data['id']}}}
async def query_components(
self,
api_key: Optional[str] = None,
sort: Optional[List[str]] = None,
page: int = 1,
limit: int = 15,
fields: Optional[List[str]] = None,
filter_conditions: Optional[List[Dict[str, Any]]] = None,
use_api_key: Optional[bool] = False,
) -> Tuple[List[ListComponentResponse], Dict[str, Any]]:
params: Dict[str, Any] = {
'page': page,
'limit': limit,
'fields': ','.join(fields) if fields is not None else ','.join(self.default_fields),
'meta': 'filter_count', # !This is DEPRECATED so we should remove it ASAP
}
# ?aggregate[count]=likes
if sort:
params['sort'] = ','.join(sort)
# Only public components or the ones created by the user
# check for "public" or "Public"
if filter_conditions:
params['filter'] = json.dumps({'_and': filter_conditions})
# If not liked, this means we are getting public components
# so we don't need to risk passing an invalid api_key
# and getting 401
api_key = api_key if use_api_key else None
results, metadata = await self._get(self.components_url, api_key, params)
if isinstance(results, dict):
results = [results]
results_objects = [ListComponentResponse(**result) for result in results]
return results_objects, metadata
async def get_liked_by_user_components(self, component_ids: List[str], api_key: str) -> List[str]:
# Get fields id
# filter should be "id is in component_ids AND liked_by directus_users_id token is api_key"
# return the ids
user_data = user_data_var.get()
if not user_data:
raise ValueError('No user data')
params = {
'fields': 'id',
'filter': json.dumps(
{
'_and': [
{'id': {'_in': component_ids}},
{'liked_by': {'directus_users_id': {'_eq': user_data['id']}}},
]
}
),
}
results, _ = await self._get(self.components_url, api_key, params)
return [result['id'] for result in results]
# Which of the components is parent of the user's components
async def get_components_in_users_collection(self, component_ids: List[str], api_key: str):
user_data = user_data_var.get()
if not user_data:
raise ValueError('No user data')
params = {
'fields': 'id',
'filter': json.dumps(
{
'_and': [
{'user_created': {'_eq': user_data['id']}},
{'parent': {'_in': component_ids}},
]
}
),
}
results, _ = await self._get(self.components_url, api_key, params)
return [result['id'] for result in results]
async def download(self, api_key: str, component_id: UUID) -> DownloadComponentResponse:
url = f'{self.components_url}/{component_id}'
params = {'fields': ','.join(['id', 'name', 'description', 'data', 'is_component', 'metadata'])}
if not self.download_webhook_url:
raise ValueError('DOWNLOAD_WEBHOOK_URL is not set')
component, _ = await self._get(url, api_key, params)
await self.call_webhook(api_key, self.download_webhook_url, component_id)
if len(component) > 1:
raise ValueError('Something went wrong while downloading the component')
component_dict = component[0]
download_component = DownloadComponentResponse(**component_dict)
# Check if metadata is an empty dict
if download_component.metadata in [None, {}] and download_component.data is not None:
# If it is, we need to build the metadata
try:
download_component.metadata = process_component_data(download_component.data.get('nodes', []))
except KeyError:
raise ValueError('Invalid component data. No nodes found')
return download_component
async def upload(self, api_key: str, component_data: StoreComponentCreate) -> CreateComponentResponse:
headers = {'Authorization': f'Bearer {api_key}'}
component_dict = component_data.model_dump(exclude_unset=True)
# Parent is a UUID, but the store expects a string
response = None
if component_dict.get('parent'):
component_dict['parent'] = str(component_dict['parent'])
component_dict = process_tags_for_post(component_dict)
try:
# response = httpx.post(self.components_url, headers=headers, json=component_dict)
# response.raise_for_status()
async with httpx.AsyncClient() as client:
response = await client.post(self.components_url, headers=headers, json=component_dict)
response.raise_for_status()
component = response.json()['data']
return CreateComponentResponse(**component)
except HTTPError as exc:
if response:
try:
errors = response.json()
message = errors['errors'][0]['message']
if message == 'An unexpected error occurred.':
# This is a bug in Directus that returns this error
# when an error was thrown in the flow
message = 'You already have a component with this name. Please choose a different name.'
raise FilterError(message)
except UnboundLocalError:
pass
raise ValueError(f'Upload failed: {exc}')
async def update(
self, api_key: str, component_id: UUID, component_data: StoreComponentCreate
) -> CreateComponentResponse:
# Patch is the same as post, but we need to add the id to the url
headers = {'Authorization': f'Bearer {api_key}'}
component_dict = component_data.model_dump(exclude_unset=True)
# Parent is a UUID, but the store expects a string
response = None
if component_dict.get('parent'):
component_dict['parent'] = str(component_dict['parent'])
component_dict = process_tags_for_post(component_dict)
try:
# response = httpx.post(self.components_url, headers=headers, json=component_dict)
# response.raise_for_status()
async with httpx.AsyncClient() as client:
response = await client.patch(
self.components_url + f'/{component_id}', headers=headers, json=component_dict
)
response.raise_for_status()
component = response.json()['data']
return CreateComponentResponse(**component)
except HTTPError as exc:
if response:
try:
errors = response.json()
message = errors['errors'][0]['message']
if message == 'An unexpected error occurred.':
# This is a bug in Directus that returns this error
# when an error was thrown in the flow
message = 'You already have a component with this name. Please choose a different name.'
raise FilterError(message)
except UnboundLocalError:
pass
raise ValueError(f'Upload failed: {exc}')
async def get_tags(self) -> List[Dict[str, Any]]:
url = f'{self.base_url}/items/tags'
params = {'fields': ','.join(['id', 'name'])}
tags, _ = await self._get(url, api_key=None, params=params)
return tags
async def get_user_likes(self, api_key: str) -> List[Dict[str, Any]]:
url = f'{self.base_url}/users/me'
params = {
'fields': ','.join(['id', 'likes']),
}
likes, _ = await self._get(url, api_key, params)
return likes
async def get_component_likes_count(self, component_id: str, api_key: Optional[str] = None) -> int:
url = f'{self.components_url}/{component_id}'
params = {
'fields': ','.join(['id', 'count(liked_by)']),
}
result, _ = await self._get(url, api_key=api_key, params=params)
if len(result) == 0:
raise ValueError('Component not found')
likes = result[0]['liked_by_count']
# likes_by_count is a string
# try to convert it to int
try:
likes = int(likes)
except ValueError:
raise ValueError(f'Unexpected value for likes count: {likes}')
return likes
async def like_component(self, api_key: str, component_id: str) -> bool:
# if it returns a list with one id, it means the like was successful
# if it returns an int, it means the like was removed
if not self.like_webhook_url:
raise ValueError('LIKE_WEBHOOK_URL is not set')
headers = {'Authorization': f'Bearer {api_key}'}
# response = httpx.post(
# self.like_webhook_url,
# json={"component_id": str(component_id)},
# headers=headers,
# )
# response.raise_for_status()
async with httpx.AsyncClient() as client:
response = await client.post(
self.like_webhook_url,
json={'component_id': str(component_id)},
headers=headers,
)
response.raise_for_status()
if response.status_code == 200:
result = response.json()
if isinstance(result, list):
return True
elif isinstance(result, int):
return False
else:
raise ValueError(f'Unexpected result: {result}')
else:
raise ValueError(f'Unexpected status code: {response.status_code}')
async def get_list_component_response_model(
self,
component_id: Optional[str] = None,
search: Optional[str] = None,
private: Optional[bool] = None,
tags: Optional[List[str]] = None,
is_component: Optional[bool] = None,
fields: Optional[List[str]] = None,
filter_by_user: bool = False,
liked: bool = False,
store_api_key: Optional[str] = None,
sort: Optional[List[str]] = None,
page: int = 1,
limit: int = 15,
):
async with user_data_context(api_key=store_api_key, store_service=self):
filter_conditions: List[Dict[str, Any]] = self.build_filter_conditions(
component_id=component_id,
search=search,
private=private,
tags=tags,
is_component=is_component,
filter_by_user=filter_by_user,
liked=liked,
store_api_Key=store_api_key,
)
result: List[ListComponentResponse] = []
authorized = False
metadata: Dict = {}
comp_count = 0
try:
result, metadata = await self.query_components(
api_key=store_api_key,
page=page,
limit=limit,
sort=sort,
fields=fields,
filter_conditions=filter_conditions,
use_api_key=liked or filter_by_user,
)
if metadata:
comp_count = metadata.get('filter_count', 0)
except HTTPStatusError as exc:
if exc.response.status_code == 403:
raise ForbiddenError('You are not authorized to access this public resource') from exc
elif exc.response.status_code == 401:
raise APIKeyError(
'You are not authorized to access this resource. Please check your API key.'
) from exc
except Exception as exc:
raise ValueError(f'Unexpected error: {exc}') from exc
try:
if result and not metadata:
if len(result) >= limit:
comp_count = await self.count_components(
api_key=store_api_key,
filter_conditions=filter_conditions,
use_api_key=liked or filter_by_user,
)
else:
comp_count = len(result)
elif not metadata:
comp_count = 0
except HTTPStatusError as exc:
if exc.response.status_code == 403:
raise ForbiddenError('You are not authorized to access this public resource')
elif exc.response.status_code == 401:
raise APIKeyError('You are not authorized to access this resource. Please check your API key.')
if store_api_key:
# Now, from the result, we need to get the components
# the user likes and set the liked_by_user to True
# if any of the components does not have an id, it means
# we should not update the components
if not result or any(component.id is None for component in result):
authorized = await self.check_api_key(store_api_key)
else:
try:
updated_result = await update_components_with_user_data(
result, self, store_api_key, liked=liked
)
authorized = True
result = updated_result
except Exception:
# If we get an error here, it means the user is not authorized
authorized = False
return ListComponentResponseModel(results=result, authorized=authorized, count=comp_count)
================================================
FILE: src/backend/bisheng/services/store/utils.py
================================================
from typing import TYPE_CHECKING, List
import httpx
if TYPE_CHECKING:
from bisheng.services.store.schema import ListComponentResponse
from bisheng.services.store.service import StoreService
def process_tags_for_post(component_dict):
tags = component_dict.pop('tags', None)
if tags and all(isinstance(tag, str) for tag in tags):
component_dict['tags'] = [{'tags_id': tag} for tag in tags]
return component_dict
async def update_components_with_user_data(
components: List['ListComponentResponse'],
store_service: 'StoreService',
store_api_Key: str,
liked: bool,
):
"""
Updates the components with the user data (liked_by_user and in_users_collection)
"""
component_ids = [str(component.id) for component in components]
if liked:
# If liked is True, this means all we got were liked_by_user components
# So we can set liked_by_user to True for all components
liked_by_user_ids = component_ids
else:
liked_by_user_ids = await store_service.get_liked_by_user_components(
component_ids=component_ids,
api_key=store_api_Key,
)
# Now we need to set the liked_by_user attribute
for component in components:
component.liked_by_user = str(component.id) in liked_by_user_ids
return components
# Get the latest released version of bisheng (https://pypi.org/project/bisheng/)
def get_lf_version_from_pypi():
try:
response = httpx.get('https://pypi.org/pypi/bisheng/json')
if response.status_code != 200:
return None
return response.json()['info']['version']
except Exception:
return None
def process_component_data(nodes_list):
names = [node['id'].split('-')[0] for node in nodes_list]
metadata = {}
for name in names:
if name in metadata:
metadata[name]['count'] += 1
else:
metadata[name] = {'count': 1}
metadata['total'] = len(names)
return metadata
================================================
FILE: src/backend/bisheng/services/task/__init__.py
================================================
================================================
FILE: src/backend/bisheng/services/task/backends/__init__.py
================================================
================================================
FILE: src/backend/bisheng/services/task/backends/anyio.py
================================================
from typing import Any, Callable, Optional, Tuple
import anyio
from bisheng.services.task.backends.base import TaskBackend
from loguru import logger
class AnyIOTaskResult:
def __init__(self, scope):
self._scope = scope
self._status = 'PENDING'
self._result = None
self._exception = None
@property
def status(self) -> str:
if self._status == 'DONE':
return 'FAILURE' if self._exception is not None else 'SUCCESS'
return self._status
@property
def result(self) -> Any:
return self._result
def ready(self) -> bool:
return self._status == 'DONE'
async def run(self, func, *args, **kwargs):
try:
self._result = await func(*args, **kwargs)
except Exception as e:
self._exception = e
finally:
self._status = 'DONE'
class AnyIOBackend(TaskBackend):
name = 'anyio'
def __init__(self):
self.tasks = {}
async def launch_task(
self, task_func: Callable[..., Any], *args: Any, **kwargs: Any
) -> Tuple[Optional[str], Optional[AnyIOTaskResult]]:
"""
Launch a new task in an asynchronous manner.
Parameters:
task_func: The asynchronous function to run.
*args: Positional arguments to pass to task_func.
**kwargs: Keyword arguments to pass to task_func.
Returns:
A tuple containing a unique task ID and the task result object.
"""
async with anyio.create_task_group() as tg:
try:
task_result = AnyIOTaskResult(tg)
tg.start_soon(task_result.run, task_func, *args, **kwargs)
task_id = str(id(task_result))
self.tasks[task_id] = task_result
logger.info(f'Task {task_id} started.')
return task_id, task_result
except Exception as e:
logger.error(f'An error occurred while launching the task: {e}')
return None, None
def get_task(self, task_id: str) -> Any:
return self.tasks.get(task_id)
================================================
FILE: src/backend/bisheng/services/task/backends/base.py
================================================
from abc import ABC, abstractmethod
from typing import Any, Callable
class TaskBackend(ABC):
@abstractmethod
def launch_task(self, task_func: Callable[..., Any], *args: Any, **kwargs: Any):
pass
@abstractmethod
def get_task(self, task_id: str) -> Any:
pass
================================================
FILE: src/backend/bisheng/services/task/backends/celery.py
================================================
from typing import Any, Callable
from bisheng.services.task.backends.base import TaskBackend
from bisheng.worker import celery_app
from celery.result import AsyncResult # type: ignore
class CeleryBackend(TaskBackend):
name = 'celery'
def __init__(self):
self.celery_app = celery_app
def launch_task(self, task_func: Callable[..., Any], *args: Any, **kwargs: Any) -> tuple[str, AsyncResult]:
# I need to type the delay method to make it easier
from celery import Task # type: ignore
if not hasattr(task_func, 'delay'):
raise ValueError(f'Task function {task_func} does not have a delay method')
task: Task = task_func.delay(*args, **kwargs)
return task.id, AsyncResult(task.id, app=self.celery_app)
def get_task(self, task_id: str) -> Any:
return AsyncResult(task_id, app=self.celery_app)
================================================
FILE: src/backend/bisheng/services/task/factory.py
================================================
from bisheng.services.factory import ServiceFactory
from bisheng.services.task.service import TaskService
class TaskServiceFactory(ServiceFactory):
def __init__(self):
super().__init__(TaskService)
def create(self):
# Here you would have logic to create and configure a TaskService
return TaskService()
================================================
FILE: src/backend/bisheng/services/task/service.py
================================================
from typing import Any, Callable, Coroutine, Union
from loguru import logger
from bisheng.services.base import Service
from bisheng.services.task.backends.anyio import AnyIOBackend
from bisheng.services.task.backends.base import TaskBackend
def check_celery_availability():
try:
raise Exception("celery disabled")
except Exception as exc:
logger.debug(f'Celery not available: {exc}')
status = {'availability': None}
return status
try:
status = check_celery_availability()
USE_CELERY = status.get('availability') is not None
except ImportError:
USE_CELERY = False
class TaskService(Service):
name = 'task_service'
def __init__(self):
self.backend = self.get_backend()
self.use_celery = USE_CELERY
@property
def backend_name(self) -> str:
return self.backend.name
def get_backend(self) -> TaskBackend:
if USE_CELERY:
from bisheng.services.task.backends.celery import CeleryBackend
logger.debug('Using Celery backend')
return CeleryBackend()
logger.debug('Using AnyIO backend')
return AnyIOBackend()
# In your TaskService class
async def launch_and_await_task(
self,
task_func: Callable[..., Any],
*args: Any,
**kwargs: Any,
) -> Any:
if not self.use_celery:
return None, await task_func(*args, **kwargs)
if not hasattr(task_func, 'apply'):
raise ValueError(f'Task function {task_func} does not have an apply method')
task = task_func.apply(args=args, kwargs=kwargs)
result = task.get()
# if result is coroutine
if isinstance(result, Coroutine):
result = await result
return task.id, result
async def launch_task(self, task_func: Callable[..., Any], *args: Any, **kwargs: Any) -> Any:
logger.debug(f'Launching task {task_func} with args {args} and kwargs {kwargs}')
logger.debug(f'Using backend {self.backend}')
task = self.backend.launch_task(task_func, *args, **kwargs)
return await task if isinstance(task, Coroutine) else task
def get_task(self, task_id: Union[int, str]) -> Any:
return self.backend.get_task(task_id)
================================================
FILE: src/backend/bisheng/services/task/utils.py
================================================
import contextlib
from typing import TYPE_CHECKING
if TYPE_CHECKING:
with contextlib.suppress(ImportError):
from celery import Celery # type: ignore
def get_celery_worker_status(app: 'Celery'):
i = app.control.inspect()
availability = app.control.ping()
stats = i.stats()
registered_tasks = i.registered()
active_tasks = i.active()
scheduled_tasks = i.scheduled()
return {
'availability': availability,
'stats': stats,
'registered_tasks': registered_tasks,
'active_tasks': active_tasks,
'scheduled_tasks': scheduled_tasks,
}
================================================
FILE: src/backend/bisheng/services/utils.py
================================================
# from bisheng.services.auth.utils import create_super_user, verify_password
# from bisheng.services.database.utils import initialize_database
from bisheng.services.manager import service_manager
# from bisheng.services.settings.constants import DEFAULT_SUPERUSER, DEFAULT_SUPERUSER_PASSWORD
from loguru import logger
def get_factories_and_deps():
# from bisheng.services.auth import factory as auth_factory
# from bisheng.services.cache import factory as cache_factory
# from bisheng.services.chat import factory as chat_factory
# from bisheng.services.credentials import factory as credentials_factory
# from bisheng.services.database import factory as database_factory
# from bisheng.services.plugins import factory as plugins_factory
from bisheng.services.session import factory as session_service_factory # type: ignore
# from bisheng.services.settings import factory as settings_factory
# from bisheng.services.store import factory as store_factory
from bisheng.services.task import factory as task_factory
return [
# (settings_factory.SettingsServiceFactory(), []),
# (
# auth_factory.AuthServiceFactory(),
# [ServiceType.SETTINGS_SERVICE],
# ),
# (
# database_factory.DatabaseServiceFactory(),
# [ServiceType.SETTINGS_SERVICE],
# ),
# (
# cache_factory.CacheServiceFactory(),
# [ServiceType.SETTINGS_SERVICE],
# ),
# (chat_factory.ChatServiceFactory(), []),
(task_factory.TaskServiceFactory(), []),
(
session_service_factory.SessionServiceFactory(), []
# [ServiceType.CACHE_SERVICE],
),
# (plugins_factory.PluginServiceFactory(), [ServiceType.SETTINGS_SERVICE]),
# (store_factory.StoreServiceFactory(), [ServiceType.SETTINGS_SERVICE]),
# (credentials_factory.CredentialServiceFactory(), [ServiceType.SETTINGS_SERVICE]),
]
# def get_or_create_super_user(session: Session, username, password, is_default):
# from bisheng.services.database.models.user.model import User
# user = session.exec(select(User).where(User.username == username)).first()
# if user and user.is_superuser:
# return None # Superuser already exists
# if user and is_default:
# if user.is_superuser:
# if verify_password(password, user.password):
# return None
# else:
# # Superuser exists but password is incorrect
# # which means that the user has changed the
# # base superuser credentials.
# # This means that the user has already created
# # a superuser and changed the password in the UI
# # so we don't need to do anything.
# logger.debug(
# "Superuser exists but password is incorrect. "
# "This means that the user has changed the "
# "base superuser credentials."
# )
# return None
# else:
# logger.debug("User with superuser credentials exists but is not a superuser.")
# return None
# if user:
# if verify_password(password, user.password):
# raise ValueError("User with superuser credentials exists but is not a superuser.")
# else:
# raise ValueError("Incorrect superuser credentials")
# if is_default:
# logger.debug("Creating default superuser.")
# else:
# logger.debug("Creating superuser.")
# try:
# return create_super_user(username, password, db=session)
# except Exception as exc:
# if "UNIQUE constraint failed: user.username" in str(exc):
# # This is to deal with workers running this
# # at startup and trying to create the superuser
# # at the same time.
# logger.debug("Superuser already exists.")
# return None
# def setup_superuser(settings_service, session: Session):
# if settings_service.auth_settings.AUTO_LOGIN:
# logger.debug("AUTO_LOGIN is set to True. Creating default superuser.")
# else:
# # Remove the default superuser if it exists
# teardown_superuser(settings_service, session)
# username = settings_service.auth_settings.SUPERUSER
# password = settings_service.auth_settings.SUPERUSER_PASSWORD
# is_default = (username == DEFAULT_SUPERUSER) and (password == DEFAULT_SUPERUSER_PASSWORD)
# try:
# user = get_or_create_super_user(session=session, username=username, password=password, is_default=is_default)
# if user is not None:
# logger.debug("Superuser created successfully.")
# except Exception as exc:
# logger.exception(exc)
# raise RuntimeError("Could not create superuser. Please create a superuser manually.") from exc
# finally:
# settings_service.auth_settings.reset_credentials()
# def teardown_superuser(settings_service, session):
# """
# Teardown the superuser.
# """
# # If AUTO_LOGIN is True, we will remove the default superuser
# # from the database.
# if not settings_service.auth_settings.AUTO_LOGIN:
# try:
# logger.debug("AUTO_LOGIN is set to False. Removing default superuser if exists.")
# username = DEFAULT_SUPERUSER
# from bisheng.services.database.models.user.model import User
# user = session.exec(select(User).where(User.username == username)).first()
# if user and user.is_superuser is True:
# session.delete(user)
# session.commit()
# logger.debug("Default superuser removed successfully.")
# else:
# logger.debug("Default superuser not found.")
# except Exception as exc:
# logger.exception(exc)
# raise RuntimeError("Could not remove default superuser.") from exc
def teardown_services():
"""
Teardown all the services.
"""
# try:
# teardown_superuser(get_settings_service(), next(get_session()))
# except Exception as exc:
# logger.exception(exc)
try:
service_manager.teardown()
except Exception as exc:
logger.exception(exc)
# def initialize_settings_service():
# """
# Initialize the settings manager.
# """
# from bisheng.services.settings import factory as settings_factory
# service_manager.register_factory(settings_factory.SettingsServiceFactory())
def initialize_session_service():
"""
Initialize the session manager.
"""
# from bisheng.services.cache import factory as cache_factory
from bisheng.services.session import factory as session_service_factory # type: ignore
# initialize_settings_service()
# service_manager.register_factory(cache_factory.CacheServiceFactory(),
# dependencies=[ServiceType.SETTINGS_SERVICE])
service_manager.register_factory(session_service_factory.SessionServiceFactory(), []
# dependencies=[ServiceType.CACHE_SERVICE],
)
def initialize_services(fix_migration: bool = False):
"""
Initialize all the services needed.
"""
for factory, dependencies in get_factories_and_deps():
try:
service_manager.register_factory(factory, dependencies=dependencies)
except Exception as exc:
logger.exception(exc)
raise RuntimeError(
'Could not initialize services. Please check your settings.') from exc
# Test cache connection
# service_manager.get(ServiceType.CACHE_SERVICE)
# Setup the superuser
# try:
# initialize_database(fix_migration=fix_migration)
# except Exception as exc:
# logger.exception(exc)
# raise exc
# setup_superuser(service_manager.get(ServiceType.SETTINGS_SERVICE), next(get_session()))
# try:
# get_db_service().migrate_flows_if_auto_login()
# except Exception as exc:
# logger.error(f"Error migrating flows: {exc}")
# raise RuntimeError("Error migrating flows") from exc
================================================
FILE: src/backend/bisheng/share_link/__init__.py
================================================
================================================
FILE: src/backend/bisheng/share_link/api/__init__.py
================================================
================================================
FILE: src/backend/bisheng/share_link/api/dependencies.py
================================================
from typing import Annotated, Union
from fastapi import Depends, Header
from sqlmodel.ext.asyncio.session import AsyncSession
from bisheng.common.dependencies.core_deps import get_db_session
from bisheng.share_link.domain.models.share_link import ShareLink
from bisheng.share_link.domain.repositories.implementations.share_link_repository_impl import ShareLinkRepositoryImpl
from bisheng.share_link.domain.repositories.interfaces.share_link_repository import ShareLinkRepository
from bisheng.share_link.domain.services.share_link_service import ShareLinkService
async def get_share_link_repository(
session: AsyncSession = Depends(get_db_session),
) -> ShareLinkRepository:
"""DapatkanShareLinkRepositoryInstance Dependencies"""
return ShareLinkRepositoryImpl(session)
async def get_share_link_service(
share_link_repository: ShareLinkRepository = Depends(get_share_link_repository),
) -> 'ShareLinkService':
"""DapatkanShareLinkServiceInstance Dependencies"""
return ShareLinkService(share_link_repository=share_link_repository)
# Resolve share links in request headerstokenand return the corresponding sharing link information
async def header_share_token_parser(
share_token: Annotated[str | None, Header(alias="share-token")] = None,
share_link_service: ShareLinkService = Depends(get_share_link_service),
) -> Union['ShareLink', None]:
"""According to the request headershare-tokenGet shared link info"""
if not share_token:
return None
share_link = await share_link_service.get_share_link_by_token(share_token)
return share_link
================================================
FILE: src/backend/bisheng/share_link/api/endpoints/__init__.py
================================================
================================================
FILE: src/backend/bisheng/share_link/api/endpoints/share_link.py
================================================
from fastapi import APIRouter, Depends
from fastapi.params import Body
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.schemas.api import resp_200, UnifiedResponseModel
from bisheng.share_link.api.dependencies import get_share_link_service
from bisheng.share_link.api.schemas.share_link_schema import GenerateShareLinkRequest
router = APIRouter()
@router.post('/generate_share_link', summary='generate share link',
response_model=UnifiedResponseModel)
async def generate_share_link(
req_param: GenerateShareLinkRequest = Body(..., description="generate share link request"),
login_user: UserPayload = Depends(UserPayload.get_login_user),
share_link_service=Depends(get_share_link_service)
):
"""
Generate share link
:param login_user:
:param share_link_service:
:param req_param:
:return:
"""
share_link = await share_link_service.generate_share_link(req_param, login_user)
return resp_200(data=share_link)
@router.get('/{share_token}', summary='get share link info',
response_model=UnifiedResponseModel)
async def get_share_link_info(
share_token: str,
share_link_service=Depends(get_share_link_service)
):
"""
Get share link info by share token
:param share_token:
:param share_link_service:
:return:
"""
share_link = await share_link_service.get_share_link_by_token(share_token)
return resp_200(data=share_link)
================================================
FILE: src/backend/bisheng/share_link/api/router.py
================================================
from fastapi import APIRouter
from .endpoints.share_link import router as share_link_router
router = APIRouter(prefix='/share-link', tags=['ShareLink'])
router.include_router(share_link_router)
================================================
FILE: src/backend/bisheng/share_link/api/schemas/__init__.py
================================================
================================================
FILE: src/backend/bisheng/share_link/api/schemas/share_link_schema.py
================================================
from typing import Optional, Dict
from pydantic import BaseModel, Field
from bisheng.share_link.domain.models.share_link import ResourceTypeEnum, ShareMode
class GenerateShareLinkRequest(BaseModel):
"""Generate shared link request model"""
resource_type: ResourceTypeEnum = Field(..., description="Resource Type")
resource_id: str = Field(..., description="reasourseID")
share_mode: ShareMode = Field(default=ShareMode.READ_ONLY, description="sharing mode")
expire_time: int = Field(default=0, description="Expiration time, in seconds,0Indicates never expires")
meta_data: Optional[Dict] = Field(None, description="Metadata to store additional information")
================================================
FILE: src/backend/bisheng/share_link/domain/__init__.py
================================================
================================================
FILE: src/backend/bisheng/share_link/domain/models/__init__.py
================================================
================================================
FILE: src/backend/bisheng/share_link/domain/models/share_link.py
================================================
import uuid
from datetime import datetime
from enum import Enum
from typing import Optional, Dict
from sqlalchemy import Enum as SQLEnum, DateTime, text, JSON
from sqlalchemy import CHAR, Column
from sqlmodel import Field
from bisheng.common.models.base import SQLModelSerializable
class ResourceTypeEnum(str, Enum):
"""Resource Type Enumeration"""
# Inspirational Sessions
LINSIGHT_SESSION = "linsight_session"
# Workbench Conversation
WORKBENCH_CHAT = "workbench_chat"
# The Workflow
WORKFLOW = "workflow"
# Skill
SKILL = "skill"
# assistant
ASSISTANT = "assistant"
class ShareMode(str, Enum):
"""Shared Mode Enumeration"""
# Read-Only
READ_ONLY = "read_only"
# Can Edit
EDITABLE = "editable"
class ShareLinkStatusEnum(str, Enum):
"""Shared link status enumeration"""
# Effective
ACTIVE = "active"
# Tidak berlaku
INACTIVE = "inactive"
# Kedaluwarsa
EXPIRED = "expired"
class ShareLink(SQLModelSerializable, table=True):
"""
Shared Link Model
"""
__tablename__ = 'share_link'
id: str = Field(default_factory=lambda: uuid.uuid4().hex, description='Share linkID',
sa_column=Column(CHAR(36), unique=True, nullable=False, primary_key=True))
share_token: str = Field(sa_column=Column(CHAR(36), index=True, unique=True), description='Share linkToken')
resource_id: str = Field(sa_column=Column(CHAR(36), index=True), description='reasourseID')
resource_type: ResourceTypeEnum = Field(..., sa_column=Column(SQLEnum(ResourceTypeEnum)), description='Resource Type')
share_mode: ShareMode = Field(..., sa_column=Column(SQLEnum(ShareMode)), description='sharing mode')
status: ShareLinkStatusEnum = Field(default=ShareLinkStatusEnum.ACTIVE,
sa_column=Column(SQLEnum(ShareLinkStatusEnum)), description='Share link status')
access_count: int = Field(default=0, description='Number of visits')
meta_data: Optional[Dict] = Field(default=None, description='Shared link metadata', sa_type=JSON, nullable=True)
expire_time: int = Field(default=0, description='Expiration time, in seconds,0Indicates never expires')
create_user_id: str = Field(..., sa_column=Column(CHAR(36)), description='Create UserID')
create_time: datetime = Field(default_factory=datetime.now, description='Creation Time',
sa_column=Column(DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=True, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
================================================
FILE: src/backend/bisheng/share_link/domain/repositories/__init__.py
================================================
================================================
FILE: src/backend/bisheng/share_link/domain/repositories/implementations/__init__.py
================================================
================================================
FILE: src/backend/bisheng/share_link/domain/repositories/implementations/share_link_repository_impl.py
================================================
from sqlmodel.ext.asyncio.session import AsyncSession
from bisheng.common.repositories.implementations.base_repository_impl import BaseRepositoryImpl
from bisheng.share_link.domain.models.share_link import ShareLink
from bisheng.share_link.domain.repositories.interfaces.share_link_repository import ShareLinkRepository
class ShareLinkRepositoryImpl(BaseRepositoryImpl[ShareLink, str], ShareLinkRepository):
"""Shared link repository implementation"""
def __init__(self, session: AsyncSession):
super().__init__(session, ShareLink)
================================================
FILE: src/backend/bisheng/share_link/domain/repositories/interfaces/__init__.py
================================================
================================================
FILE: src/backend/bisheng/share_link/domain/repositories/interfaces/share_link_repository.py
================================================
from abc import ABC
from bisheng.common.repositories.interfaces.base_repository import BaseRepository
from bisheng.share_link.domain.models.share_link import ShareLink
class ShareLinkRepository(BaseRepository[ShareLink, str], ABC):
"""Shared Link Warehouse Interface"""
pass
================================================
FILE: src/backend/bisheng/share_link/domain/services/__init__.py
================================================
================================================
FILE: src/backend/bisheng/share_link/domain/services/share_link_service.py
================================================
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode.http_error import NotFoundError
from bisheng.common.utils import util as common_util
from bisheng.share_link.api.schemas.share_link_schema import GenerateShareLinkRequest
from bisheng.share_link.domain.models.share_link import ShareLink
from bisheng.share_link.domain.repositories.interfaces.share_link_repository import ShareLinkRepository
class ShareLinkService:
def __init__(self,
share_link_repository: 'ShareLinkRepository'):
self.share_link_repository = share_link_repository
async def generate_share_link(self, generate_share_link: GenerateShareLinkRequest,
login_user: UserPayload) -> ShareLink:
"""Generate sharable link"""
share_token = common_util.generate_short_high_entropy_string()
share_link = ShareLink(
share_token=share_token,
resource_id=generate_share_link.resource_id,
resource_type=generate_share_link.resource_type,
share_mode=generate_share_link.share_mode,
expire_time=generate_share_link.expire_time,
meta_data=generate_share_link.meta_data,
create_user_id=login_user.user_id
)
return await self.share_link_repository.save(share_link)
async def get_share_link_by_token(self, share_token: str) -> ShareLink:
"""
accordingshare_tokenGet shared link info
:param share_token:
:return:
"""
share_link = await self.share_link_repository.find_one(share_token=share_token)
if not share_link:
raise NotFoundError()
return share_link
================================================
FILE: src/backend/bisheng/sql.json
================================================
[
{
"知识库问答_严谨版": {
"id": "RetrievalQA-bb180",
"type": "RetrievalQA",
"node": {
"output_types": [],
"display_name": "知识库问答_严谨版",
"documentation": "",
"base_classes": [
"RetrievalQA",
"BaseRetrievalQA",
"Chain",
"function"
],
"description": "Chain for question-answering against an index.",
"template": {
"tags_RetrievalQA-ypS4m": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "tags",
"proxy": {
"id": "RetrievalQA-ypS4m",
"field": "tags"
}
},
"memory_RetrievalQA-ypS4m": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "memory",
"proxy": {
"id": "RetrievalQA-ypS4m",
"field": "memory"
}
},
"verbose_RetrievalQA-ypS4m": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "verbose",
"proxy": {
"id": "RetrievalQA-ypS4m",
"field": "verbose"
}
},
"metadata_RetrievalQA-ypS4m": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadata",
"proxy": {
"id": "RetrievalQA-ypS4m",
"field": "metadata"
}
},
"callbacks_RetrievalQA-ypS4m": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "callbacks",
"proxy": {
"id": "RetrievalQA-ypS4m",
"field": "callbacks"
}
},
"input_key_RetrievalQA-ypS4m": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_key",
"proxy": {
"id": "RetrievalQA-ypS4m",
"field": "input_key"
}
},
"input_node_RetrievalQA-ypS4m": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question",
"proxy": {
"id": "RetrievalQA-ypS4m",
"field": "input_node"
}
},
"output_key_RetrievalQA-ypS4m": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "output_key",
"proxy": {
"id": "RetrievalQA-ypS4m",
"field": "output_key"
}
},
"return_source_documents_RetrievalQA-ypS4m": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "return_source_documents",
"proxy": {
"id": "RetrievalQA-ypS4m",
"field": "return_source_documents"
}
},
"token_max_CombineDocsChain-bMaXk": {
"l2": false,
"info": "只对Stuff类型生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": 7000,
"l2_name": "token_max",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max",
"proxy": {
"id": "CombineDocsChain-bMaXk",
"field": "token_max"
}
},
"chain_type_CombineDocsChain-bMaXk": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "chain_type",
"proxy": {
"id": "CombineDocsChain-bMaXk",
"field": "chain_type"
}
},
"document_prompt_CombineDocsChain-bMaXk": {
"info": "",
"list": false,
"name": "document_prompt",
"type": "BasePromptTemplate",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "document_prompt",
"proxy": {
"id": "CombineDocsChain-bMaXk",
"field": "document_prompt"
}
},
"context_PromptTemplate-gM5zg": {
"info": "",
"list": false,
"name": "context",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "context",
"proxy": {
"id": "PromptTemplate-gM5zg",
"field": "context"
}
},
"question_PromptTemplate-gM5zg": {
"info": "",
"list": false,
"name": "question",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "question",
"proxy": {
"id": "PromptTemplate-gM5zg",
"field": "question"
}
},
"template_PromptTemplate-gM5zg": {
"l2": false,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "参考文本:\n{context}\n\n----------------------\n# Role:客服\n\n# Background :\n- 你是一名客服人员。你的日常工作是根据【参考文本】的内容回复用户的各类咨询问题。\n\n# Goals:\n- 以上【参考文本】中是从企业知识库中查找到的相关信息,只能结合以上信息进行回答,若以上内容为空或其中没有找到能回答【用户问题】的内容时,则回复“没有找到相关内容”,不能根据你自己的知识自己发挥。\n- 特别要注意区分【用户问题】与【参考文本】中不同的日期、人名、公司名这些关键信息。\n- 用中文回答问题,并且答案要严谨、专业、清晰、可读性好。\n- 拥有排版审美, 会利用序号, 缩进, 分隔线和换行符等等来美化信息排版。\n\n----------------------\n\n用户问题: {question}\n你的回答:",
"l2_name": "template",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "template",
"proxy": {
"id": "PromptTemplate-gM5zg",
"field": "template"
}
},
"output_parser_PromptTemplate-gM5zg": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_parser",
"proxy": {
"id": "PromptTemplate-gM5zg",
"field": "output_parser"
}
},
"input_variables_PromptTemplate-gM5zg": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"context",
"question"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_variables",
"proxy": {
"id": "PromptTemplate-gM5zg",
"field": "input_variables"
}
},
"template_format_PromptTemplate-gM5zg": {
"l2": false,
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "str",
"value": "f-string",
"l2_name": "template_format",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "template_format",
"proxy": {
"id": "PromptTemplate-gM5zg",
"field": "template_format"
}
},
"partial_variables_PromptTemplate-gM5zg": {
"l2": false,
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"l2_name": "partial_variables",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "partial_variables",
"proxy": {
"id": "PromptTemplate-gM5zg",
"field": "partial_variables"
}
},
"validate_template_PromptTemplate-gM5zg": {
"l2": false,
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": true,
"l2_name": "validate_template",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "validate_template",
"proxy": {
"id": "PromptTemplate-gM5zg",
"field": "validate_template"
}
},
"ids_ElasticKeywordsSearch-dVhq9": {
"l2": false,
"info": "",
"list": true,
"name": "ids",
"show": false,
"type": "str",
"l2_name": "ids",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "ids",
"proxy": {
"id": "ElasticKeywordsSearch-dVhq9",
"field": "ids"
}
},
"documents_ElasticKeywordsSearch-dVhq9": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents",
"proxy": {
"id": "ElasticKeywordsSearch-dVhq9",
"field": "documents"
}
},
"embedding_ElasticKeywordsSearch-dVhq9": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding",
"proxy": {
"id": "ElasticKeywordsSearch-dVhq9",
"field": "embedding"
}
},
"metadatas_ElasticKeywordsSearch-dVhq9": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadatas",
"proxy": {
"id": "ElasticKeywordsSearch-dVhq9",
"field": "metadatas"
}
},
"index_name_ElasticKeywordsSearch-dVhq9": {
"l2": true,
"info": "",
"list": false,
"name": "index_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "知识库",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "index_name",
"proxy": {
"id": "ElasticKeywordsSearch-dVhq9",
"field": "index_name"
}
},
"ssl_verify_ElasticKeywordsSearch-dVhq9": {
"l2": false,
"info": "",
"list": false,
"name": "ssl_verify",
"show": true,
"type": "str",
"value": "",
"l2_name": "ssl_verify",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "ssl_verify",
"proxy": {
"id": "ElasticKeywordsSearch-dVhq9",
"field": "ssl_verify"
}
},
"search_kwargs_ElasticKeywordsSearch-dVhq9": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": false,
"type": "code",
"value": "{\"k\":6,\"query_strategy\":\"match_phrase\",\"must_or_should\":\"must\"}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_kwargs",
"proxy": {
"id": "ElasticKeywordsSearch-dVhq9",
"field": "search_kwargs"
}
},
"refresh_indices_ElasticKeywordsSearch-dVhq9": {
"l2": false,
"info": "",
"list": false,
"name": "refresh_indices",
"show": false,
"type": "bool",
"value": true,
"l2_name": "refresh_indices",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "refresh_indices",
"proxy": {
"id": "ElasticKeywordsSearch-dVhq9",
"field": "refresh_indices"
}
},
"elasticsearch_url_ElasticKeywordsSearch-dVhq9": {
"l2": false,
"info": "",
"list": false,
"name": "elasticsearch_url",
"show": true,
"type": "str",
"value": "",
"l2_name": "elasticsearch_url",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "ES_connection_url",
"proxy": {
"id": "ElasticKeywordsSearch-dVhq9",
"field": "elasticsearch_url"
}
},
"question_PromptTemplate-4iBFj": {
"info": "",
"list": false,
"name": "question",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "question",
"proxy": {
"id": "PromptTemplate-4iBFj",
"field": "question"
}
},
"template_PromptTemplate-4iBFj": {
"l2": false,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "分析给定Question,提取Question中包含的KeyWords,输出列表形式\n\nExamples:\nQuestion: 数据项素2022年营收是多少?\nKeyWords: ['数据项素', '2022', '营收, '营业收入']\nQuestion: 深圳出差住宿标准是什么?\nKeyWords: ['深圳', '出差', '住宿标准', '报销标准']\n\n\n----------------\nQuestion: {question}\nKeyWords: ",
"l2_name": "template",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "template",
"proxy": {
"id": "PromptTemplate-4iBFj",
"field": "template"
}
},
"output_parser_PromptTemplate-4iBFj": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_parser",
"proxy": {
"id": "PromptTemplate-4iBFj",
"field": "output_parser"
}
},
"input_variables_PromptTemplate-4iBFj": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"question"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_variables",
"proxy": {
"id": "PromptTemplate-4iBFj",
"field": "input_variables"
}
},
"template_format_PromptTemplate-4iBFj": {
"l2": false,
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "str",
"value": "f-string",
"l2_name": "template_format",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "template_format",
"proxy": {
"id": "PromptTemplate-4iBFj",
"field": "template_format"
}
},
"partial_variables_PromptTemplate-4iBFj": {
"l2": false,
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"l2_name": "partial_variables",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "partial_variables",
"proxy": {
"id": "PromptTemplate-4iBFj",
"field": "partial_variables"
}
},
"validate_template_PromptTemplate-4iBFj": {
"l2": false,
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": true,
"l2_name": "validate_template",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "validate_template",
"proxy": {
"id": "PromptTemplate-4iBFj",
"field": "validate_template"
}
},
"callbacks_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "callbacks",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"list": true,
"file_path": "",
"display_name": "Callbacks",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "callbacks"
}
},
"async_client_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "async_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Async Client",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "async_client"
}
},
"cache_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": true,
"file_path": "",
"password": false,
"name": "cache",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"display_name": "Cache",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "cache"
}
},
"client_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Client",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "client"
}
},
"default_headers_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_headers",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Headers",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "default_headers"
}
},
"default_query_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_query",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Query",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "default_query"
}
},
"http_client_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "http_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Http Client",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "http_client"
}
},
"max_retries_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 2,
"password": false,
"name": "max_retries",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Retries",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "max_retries"
}
},
"max_tokens_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": true,
"name": "max_tokens",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Tokens",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "max_tokens"
},
"value": ""
},
"metadata_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "metadata",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Metadata",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "metadata"
}
},
"model_kwargs_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "model_kwargs",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Model Kwargs",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "model_kwargs"
}
},
"model_name_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "gpt-3.5-turbo-0613",
"password": false,
"options": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k",
"gpt-4-1106-preview"
],
"name": "model_name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Model Name",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "model_name"
}
},
"n_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 1,
"password": false,
"name": "n",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "N",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "n"
}
},
"name_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Name",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "name"
}
},
"openai_api_base_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_api_base",
"display_name": "OpenAI API Base",
"advanced": true,
"dynamic": false,
"info": "\nThe base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.\n",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "openai_api_base"
}
},
"openai_api_key_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "",
"password": true,
"name": "openai_api_key",
"display_name": "OpenAI API Key",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "openai_api_key"
}
},
"openai_organization_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "openai_organization",
"display_name": "OpenAI Organization",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "openai_organization"
}
},
"openai_proxy_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_proxy",
"display_name": "OpenAI Proxy",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "openai_proxy"
}
},
"request_timeout_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "request_timeout",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Request Timeout",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "request_timeout"
}
},
"streaming_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": false,
"password": false,
"name": "streaming",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Streaming",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "streaming"
}
},
"tags_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tags",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Tags",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "tags"
}
},
"temperature_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": 0.7,
"password": false,
"name": "temperature",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Temperature",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "temperature"
}
},
"tiktoken_model_name_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tiktoken_model_name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Tiktoken Model Name",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "tiktoken_model_name"
}
},
"verbose_ChatOpenAI-d9de6": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "verbose",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Verbose",
"proxy": {
"id": "ChatOpenAI-d9de6",
"field": "verbose"
}
}
},
"flow": {
"data": {
"nodes": [
{
"width": 384,
"height": 316,
"id": "RetrievalQA-ypS4m",
"type": "genericNode",
"position": {
"x": 1928.7731793921107,
"y": -1748.5798539597242
},
"data": {
"id": "RetrievalQA-ypS4m",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "tags"
},
"_type": "RetrievalQA",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "memory"
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "verbose"
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadata"
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "callbacks"
},
"input_key": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_key"
},
"retriever": {
"l2": false,
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "retriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "output_key"
},
"combine_documents_chain": {
"l2": false,
"info": "",
"list": false,
"name": "combine_documents_chain",
"show": true,
"type": "BaseCombineDocumentsChain",
"l2_name": "combine_documents_chain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "return_source_documents"
}
},
"description": "Chain for question-answering against an index.",
"base_classes": [
"RetrievalQA",
"BaseRetrievalQA",
"Chain",
"function"
],
"display_name": "RetrievalQA",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"
},
"type": "RetrievalQA",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 1928.7731793921107,
"y": -1748.5798539597242
},
"dragging": false
},
{
"width": 384,
"height": 412,
"id": "CombineDocsChain-bMaXk",
"type": "genericNode",
"position": {
"x": 1321.387622087405,
"y": -2246.516142425817
},
"data": {
"id": "CombineDocsChain-bMaXk",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "load_qa_chain",
"prompt": {
"l2": false,
"info": "只对Stuff类型生效",
"list": false,
"name": "prompt",
"show": true,
"type": "BasePromptTemplate",
"l2_name": "prompt",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "prompt"
},
"token_max": {
"l2": false,
"info": "只对Stuff类型生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": 7000,
"l2_name": "token_max",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max"
},
"chain_type": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "chain_type"
},
"document_prompt": {
"info": "",
"list": false,
"name": "document_prompt",
"type": "BasePromptTemplate",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "document_prompt"
}
},
"description": "Load question answering chain.",
"base_classes": [
"BaseCombineDocumentsChain",
"function"
],
"display_name": "CombineDocsChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "CombineDocsChain",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 1321.387622087405,
"y": -2246.516142425817
},
"dragging": false
},
{
"width": 384,
"height": 454,
"id": "PromptTemplate-gM5zg",
"type": "genericNode",
"position": {
"x": 819.5843069233761,
"y": -2660.280062933134
},
"data": {
"id": "PromptTemplate-gM5zg",
"node": {
"name": "",
"template": {
"_type": "PromptTemplate",
"context": {
"info": "",
"list": false,
"name": "context",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "context"
},
"question": {
"info": "",
"list": false,
"name": "question",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "question"
},
"template": {
"l2": false,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "参考文本:\n{context}\n\n----------------------\n# Role:客服\n\n# Background :\n- 你是一名客服人员。你的日常工作是根据【参考文本】的内容回复用户的各类咨询问题。\n\n# Goals:\n- 以上【参考文本】中是从企业知识库中查找到的相关信息,只能结合以上信息进行回答,若以上内容为空或其中没有找到能回答【用户问题】的内容时,则回复“没有找到相关内容”,不能根据你自己的知识自己发挥。\n- 特别要注意区分【用户问题】与【参考文本】中不同的日期、人名、公司名这些关键信息。\n- 用中文回答问题,并且答案要严谨、专业、清晰、可读性好。\n- 拥有排版审美, 会利用序号, 缩进, 分隔线和换行符等等来美化信息排版。\n\n----------------------\n\n用户问题: {question}\n你的回答:",
"l2_name": "template",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "template"
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_parser"
},
"input_variables": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"context",
"question"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_variables"
},
"template_format": {
"l2": false,
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "str",
"value": "f-string",
"l2_name": "template_format",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "template_format"
},
"partial_variables": {
"l2": false,
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"l2_name": "partial_variables",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "partial_variables"
},
"validate_template": {
"l2": false,
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": true,
"l2_name": "validate_template",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "validate_template"
}
},
"description": "Schema to represent a prompt for an LLM.",
"base_classes": [
"StringPromptTemplate",
"BasePromptTemplate",
"PromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"": [
"context",
"question"
],
"template": [
"context",
"question"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {
"formatters": {
"openai_api_key": {}
},
"base_formatters": {
"dict": {},
"list": {},
"show": {},
"union": {},
"kwargs": {},
"default": {},
"headers": {},
"optional": {},
"password": {},
"multiline": {},
"model_fields": {
"MODEL_DICT": {
"OpenAI": [
"text-davinci-003",
"text-davinci-002",
"text-curie-001",
"text-babbage-001",
"text-ada-001"
],
"Anthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
],
"ChatOpenAI": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k"
],
"ChatAnthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
]
}
},
"dict_code_file": {}
}
}
},
"type": "PromptTemplate",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 819.5843069233761,
"y": -2660.280062933134
},
"dragging": false
},
{
"width": 384,
"height": 664,
"id": "ElasticKeywordsSearch-dVhq9",
"type": "genericNode",
"position": {
"x": 831.1394852089952,
"y": -2032.1407340312012
},
"data": {
"id": "ElasticKeywordsSearch-dVhq9",
"node": {
"template": {
"ids": {
"l2": false,
"info": "",
"list": true,
"name": "ids",
"show": false,
"type": "str",
"l2_name": "ids",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "ids"
},
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLLM",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "ElasticKeywordsSearch",
"prompt": {
"l2": false,
"info": "",
"list": false,
"name": "prompt",
"show": true,
"type": "BasePromptTemplate",
"l2_name": "prompt",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "prompt"
},
"documents": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadatas"
},
"index_name": {
"l2": true,
"info": "",
"list": false,
"name": "index_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "知识库",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "index_name"
},
"ssl_verify": {
"l2": false,
"info": "",
"list": false,
"name": "ssl_verify",
"show": true,
"type": "str",
"value": "",
"l2_name": "ssl_verify",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "ssl_verify"
},
"search_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{\"k\":6,\"query_strategy\":\"match_phrase\",\"must_or_should\":\"must\"}",
"l2_name": "search_kwargs",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_kwargs"
},
"refresh_indices": {
"l2": false,
"info": "",
"list": false,
"name": "refresh_indices",
"show": false,
"type": "bool",
"value": true,
"l2_name": "refresh_indices",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "refresh_indices"
},
"elasticsearch_url": {
"l2": false,
"info": "",
"list": false,
"name": "elasticsearch_url",
"show": true,
"type": "str",
"value": "",
"l2_name": "elasticsearch_url",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "ES_connection_url"
}
},
"description": "Construct ElasticKeywordsSearch wrapper from raw documents.",
"base_classes": [
"ElasticKeywordsSearch",
"VectorStore",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "ElasticKeywordsSearch",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "ElasticKeywordsSearch",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 831.1394852089952,
"y": -2032.1407340312012
},
"dragging": false
},
{
"width": 384,
"height": 372,
"id": "PromptTemplate-4iBFj",
"type": "genericNode",
"position": {
"x": 149.22093916394033,
"y": -1992.534049733149
},
"data": {
"id": "PromptTemplate-4iBFj",
"node": {
"name": "",
"template": {
"_type": "PromptTemplate",
"question": {
"info": "",
"list": false,
"name": "question",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "question"
},
"template": {
"l2": false,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "分析给定Question,提取Question中包含的KeyWords,输出列表形式\n\nExamples:\nQuestion: 数据项素2022年营收是多少?\nKeyWords: ['数据项素', '2022', '营收, '营业收入']\nQuestion: 深圳出差住宿标准是什么?\nKeyWords: ['深圳', '出差', '住宿标准', '报销标准']\n\n\n----------------\nQuestion: {question}\nKeyWords: ",
"l2_name": "template",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "template"
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_parser"
},
"input_variables": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"question"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_variables"
},
"template_format": {
"l2": false,
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "str",
"value": "f-string",
"l2_name": "template_format",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "template_format"
},
"partial_variables": {
"l2": false,
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"l2_name": "partial_variables",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "partial_variables"
},
"validate_template": {
"l2": false,
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": true,
"l2_name": "validate_template",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "validate_template"
}
},
"description": "Schema to represent a prompt for an LLM.",
"base_classes": [
"StringPromptTemplate",
"BasePromptTemplate",
"PromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"": [
"question"
],
"template": [
"question"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {
"formatters": {
"openai_api_key": {}
},
"base_formatters": {
"dict": {},
"list": {},
"show": {},
"union": {},
"kwargs": {},
"default": {},
"headers": {},
"optional": {},
"password": {},
"multiline": {},
"model_fields": {
"MODEL_DICT": {
"OpenAI": [
"text-davinci-003",
"text-davinci-002",
"text-curie-001",
"text-babbage-001",
"text-ada-001"
],
"Anthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
],
"ChatOpenAI": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k"
],
"ChatAnthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
]
}
},
"dict_code_file": {}
}
}
},
"type": "PromptTemplate",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 149.22093916394033,
"y": -1992.534049733149
},
"dragging": false
},
{
"width": 384,
"height": 606,
"id": "ChatOpenAI-d9de6",
"type": "genericNode",
"position": {
"x": 181.27135225054826,
"y": -2719.2953758423564
},
"data": {
"type": "ChatOpenAI",
"node": {
"template": {
"callbacks": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "callbacks",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"list": true,
"file_path": "",
"display_name": "Callbacks"
},
"async_client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "async_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Async Client"
},
"cache": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": true,
"file_path": "",
"password": false,
"name": "cache",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"display_name": "Cache"
},
"client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Client"
},
"default_headers": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_headers",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Headers"
},
"default_query": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_query",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Query"
},
"http_client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "http_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Http Client"
},
"max_retries": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 2,
"password": false,
"name": "max_retries",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Retries"
},
"max_tokens": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": true,
"name": "max_tokens",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Tokens"
},
"metadata": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "metadata",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Metadata"
},
"model_kwargs": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "model_kwargs",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Model Kwargs"
},
"model_name": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "gpt-3.5-turbo-0613",
"password": false,
"options": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k",
"gpt-4-1106-preview"
],
"name": "model_name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Model Name"
},
"n": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 1,
"password": false,
"name": "n",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "N"
},
"name": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Name"
},
"openai_api_base": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_api_base",
"display_name": "OpenAI API Base",
"advanced": false,
"dynamic": false,
"info": "\nThe base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.\n",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_api_key": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "",
"password": true,
"name": "openai_api_key",
"display_name": "OpenAI API Key",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_organization": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "openai_organization",
"display_name": "OpenAI Organization",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_proxy": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_proxy",
"display_name": "OpenAI Proxy",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"request_timeout": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "request_timeout",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Request Timeout"
},
"streaming": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": false,
"password": false,
"name": "streaming",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Streaming"
},
"tags": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tags",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Tags"
},
"temperature": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": 0.7,
"password": false,
"name": "temperature",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Temperature"
},
"tiktoken_model_name": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tiktoken_model_name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Tiktoken Model Name"
},
"verbose": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "verbose",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Verbose"
},
"_type": "ChatOpenAI"
},
"description": "[*Deprecated*] `OpenAI` Chat large language models API.",
"base_classes": [
"ChatOpenAI",
"BaseLanguageModel",
"BaseChatModel",
"BaseLLM"
],
"display_name": "ChatOpenAI",
"documentation": "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai",
"custom_fields": {},
"output_types": [],
"field_formatters": {},
"beta": false,
"official": false
},
"id": "ChatOpenAI-d9de6",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 181.27135225054826,
"y": -2719.2953758423564
},
"dragging": false
}
],
"edges": [
{
"source": "CombineDocsChain-bMaXk",
"target": "RetrievalQA-ypS4m",
"sourceHandle": "CombineDocsChain|CombineDocsChain-bMaXk|BaseCombineDocumentsChain|function",
"targetHandle": "BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-ypS4m",
"id": "reactflow__edge-CombineDocsChain-bMaXkCombineDocsChain|CombineDocsChain-bMaXk|BaseCombineDocumentsChain|function-RetrievalQA-ypS4mBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-ypS4m",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "PromptTemplate-gM5zg",
"target": "CombineDocsChain-bMaXk",
"sourceHandle": "PromptTemplate|PromptTemplate-gM5zg|StringPromptTemplate|BasePromptTemplate|PromptTemplate",
"targetHandle": "BasePromptTemplate|prompt|CombineDocsChain-bMaXk",
"id": "reactflow__edge-PromptTemplate-gM5zgPromptTemplate|PromptTemplate-gM5zg|StringPromptTemplate|BasePromptTemplate|PromptTemplate-CombineDocsChain-bMaXkBasePromptTemplate|prompt|CombineDocsChain-bMaXk",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "ElasticKeywordsSearch-dVhq9",
"target": "RetrievalQA-ypS4m",
"sourceHandle": "ElasticKeywordsSearch|ElasticKeywordsSearch-dVhq9|ElasticKeywordsSearch|VectorStore|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|RetrievalQA-ypS4m",
"id": "reactflow__edge-ElasticKeywordsSearch-dVhq9ElasticKeywordsSearch|ElasticKeywordsSearch-dVhq9|ElasticKeywordsSearch|VectorStore|BaseRetriever|VectorStoreRetriever-RetrievalQA-ypS4mBaseRetriever|retriever|RetrievalQA-ypS4m",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "PromptTemplate-4iBFj",
"target": "ElasticKeywordsSearch-dVhq9",
"sourceHandle": "PromptTemplate|PromptTemplate-4iBFj|StringPromptTemplate|BasePromptTemplate|PromptTemplate",
"targetHandle": "BasePromptTemplate|prompt|ElasticKeywordsSearch-dVhq9",
"id": "reactflow__edge-PromptTemplate-4iBFjPromptTemplate|PromptTemplate-4iBFj|StringPromptTemplate|BasePromptTemplate|PromptTemplate-ElasticKeywordsSearch-dVhq9BasePromptTemplate|prompt|ElasticKeywordsSearch-dVhq9",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "ChatOpenAI-d9de6",
"sourceHandle": "ChatOpenAI|ChatOpenAI-d9de6|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM",
"target": "ElasticKeywordsSearch-dVhq9",
"targetHandle": "BaseLLM|llm|ElasticKeywordsSearch-dVhq9",
"style": {
"stroke": "#555"
},
"className": "stroke-foreground stroke-connection",
"animated": true,
"id": "reactflow__edge-ChatOpenAI-d9de6ChatOpenAI|ChatOpenAI-d9de6|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM-ElasticKeywordsSearch-dVhq9BaseLLM|llm|ElasticKeywordsSearch-dVhq9",
"selected": true
},
{
"source": "ChatOpenAI-d9de6",
"sourceHandle": "ChatOpenAI|ChatOpenAI-d9de6|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM",
"target": "CombineDocsChain-bMaXk",
"targetHandle": "BaseLanguageModel|llm|CombineDocsChain-bMaXk",
"style": {
"stroke": "#555"
},
"className": "stroke-foreground stroke-connection",
"animated": true,
"id": "reactflow__edge-ChatOpenAI-d9de6ChatOpenAI|ChatOpenAI-d9de6|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM-CombineDocsChain-bMaXkBaseLanguageModel|llm|CombineDocsChain-bMaXk",
"selected": true
}
],
"viewport": {
"zoom": 1,
"x": 0,
"y": 0
}
},
"is_component": false,
"name": "",
"description": "",
"id": "cc01e",
"status": 0,
"write": false,
"guide_word": ""
}
}
}
},
{
"知识库问答_增强版": {
"id": "ConversationalRetrievalChain-4a1a1",
"type": "ConversationalRetrievalChain",
"node": {
"output_types": [],
"display_name": "知识库问答_增强版",
"documentation": "",
"base_classes": [
"BaseConversationalRetrievalChain",
"Chain",
"ConversationalRetrievalChain",
"function"
],
"description": "Convenience method to load chain from LLM and retriever.",
"template": {
"tags_MixEsVectorRetriever-J35CZ": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": true,
"type": "str",
"l2_name": "tags",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "tags",
"proxy": {
"id": "MixEsVectorRetriever-J35CZ",
"field": "tags"
}
},
"metadata_MixEsVectorRetriever-J35CZ": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadata",
"proxy": {
"id": "MixEsVectorRetriever-J35CZ",
"field": "metadata"
}
},
"combine_strategy_MixEsVectorRetriever-J35CZ": {
"l2": false,
"info": "",
"list": true,
"name": "combine_strategy",
"show": true,
"type": "str",
"value": "mix",
"l2_name": "combine_strategy",
"options": [
"keyword_front",
"vector_front",
"mix"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "combine_strategy",
"proxy": {
"id": "MixEsVectorRetriever-J35CZ",
"field": "combine_strategy"
}
},
"drop_old_Milvus-cyR5W": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "drop_old",
"proxy": {
"id": "Milvus-cyR5W",
"field": "drop_old"
}
},
"documents_Milvus-cyR5W": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents",
"proxy": {
"id": "Milvus-cyR5W",
"field": "documents"
}
},
"embedding_Milvus-cyR5W": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding",
"proxy": {
"id": "Milvus-cyR5W",
"field": "embedding"
}
},
"metadatas_Milvus-cyR5W": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadatas",
"proxy": {
"id": "Milvus-cyR5W",
"field": "metadatas"
}
},
"index_params_Milvus-cyR5W": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "index_params",
"proxy": {
"id": "Milvus-cyR5W",
"field": "index_params"
}
},
"search_kwargs_Milvus-cyR5W": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": false,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_kwargs",
"proxy": {
"id": "Milvus-cyR5W",
"field": "search_kwargs"
}
},
"search_params_Milvus-cyR5W": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_params",
"proxy": {
"id": "Milvus-cyR5W",
"field": "search_params"
}
},
"collection_name_Milvus-cyR5W": {
"l2": true,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "collection_name",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "collection_name",
"proxy": {
"id": "Milvus-cyR5W",
"field": "collection_name"
}
},
"connection_args_Milvus-cyR5W": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": false,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "connection_args",
"proxy": {
"id": "Milvus-cyR5W",
"field": "connection_args"
}
},
"consistency_level_Milvus-cyR5W": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "consistency_level",
"proxy": {
"id": "Milvus-cyR5W",
"field": "consistency_level"
}
},
"ids_ElasticKeywordsSearch-31Et9": {
"l2": false,
"info": "",
"list": true,
"name": "ids",
"show": false,
"type": "str",
"l2_name": "ids",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "ids",
"proxy": {
"id": "ElasticKeywordsSearch-31Et9",
"field": "ids"
}
},
"llm_ElasticKeywordsSearch-31Et9": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"type": "BaseLLM",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "LLM",
"proxy": {
"id": "ElasticKeywordsSearch-31Et9",
"field": "llm"
}
},
"prompt_ElasticKeywordsSearch-31Et9": {
"l2": false,
"info": "",
"list": false,
"name": "prompt",
"type": "BasePromptTemplate",
"l2_name": "prompt",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "prompt",
"proxy": {
"id": "ElasticKeywordsSearch-31Et9",
"field": "prompt"
}
},
"documents_ElasticKeywordsSearch-31Et9": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents",
"proxy": {
"id": "ElasticKeywordsSearch-31Et9",
"field": "documents"
}
},
"embedding_ElasticKeywordsSearch-31Et9": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding",
"proxy": {
"id": "ElasticKeywordsSearch-31Et9",
"field": "embedding"
}
},
"metadatas_ElasticKeywordsSearch-31Et9": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadatas",
"proxy": {
"id": "ElasticKeywordsSearch-31Et9",
"field": "metadatas"
}
},
"index_name_ElasticKeywordsSearch-31Et9": {
"l2": true,
"info": "",
"list": false,
"name": "index_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "index_name",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "index_name",
"proxy": {
"id": "ElasticKeywordsSearch-31Et9",
"field": "index_name"
}
},
"ssl_verify_ElasticKeywordsSearch-31Et9": {
"l2": false,
"info": "",
"list": false,
"name": "ssl_verify",
"show": true,
"type": "str",
"value": "",
"l2_name": "ssl_verify",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "ssl_verify",
"proxy": {
"id": "ElasticKeywordsSearch-31Et9",
"field": "ssl_verify"
}
},
"search_kwargs_ElasticKeywordsSearch-31Et9": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": false,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_kwargs",
"proxy": {
"id": "ElasticKeywordsSearch-31Et9",
"field": "search_kwargs"
}
},
"refresh_indices_ElasticKeywordsSearch-31Et9": {
"l2": false,
"info": "",
"list": false,
"name": "refresh_indices",
"show": false,
"type": "bool",
"value": true,
"l2_name": "refresh_indices",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "refresh_indices",
"proxy": {
"id": "ElasticKeywordsSearch-31Et9",
"field": "refresh_indices"
}
},
"elasticsearch_url_ElasticKeywordsSearch-31Et9": {
"l2": false,
"info": "",
"list": false,
"name": "elasticsearch_url",
"show": true,
"type": "str",
"value": "",
"l2_name": "elasticsearch_url",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "ES_connection_url",
"proxy": {
"id": "ElasticKeywordsSearch-31Et9",
"field": "elasticsearch_url"
}
},
"verbose_ConversationalRetrievalChain-SmY3w": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"value": false,
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "verbose",
"proxy": {
"id": "ConversationalRetrievalChain-SmY3w",
"field": "verbose"
}
},
"callbacks_ConversationalRetrievalChain-SmY3w": {
"l2": false,
"info": "",
"list": false,
"name": "callbacks",
"show": false,
"type": "Callbacks",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "callbacks",
"proxy": {
"id": "ConversationalRetrievalChain-SmY3w",
"field": "callbacks"
}
},
"chain_type_ConversationalRetrievalChain-SmY3w": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "chain_type",
"proxy": {
"id": "ConversationalRetrievalChain-SmY3w",
"field": "chain_type"
}
},
"input_node_ConversationalRetrievalChain-SmY3w": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question",
"proxy": {
"id": "ConversationalRetrievalChain-SmY3w",
"field": "input_node"
}
},
"condense_question_llm_ConversationalRetrievalChain-SmY3w": {
"l2": false,
"info": "",
"list": false,
"name": "condense_question_llm",
"show": false,
"type": "BaseLanguageModel",
"l2_name": "condense_question_llm",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "condense_question_llm",
"proxy": {
"id": "ConversationalRetrievalChain-SmY3w",
"field": "condense_question_llm"
}
},
"return_source_documents_ConversationalRetrievalChain-SmY3w": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Return source documents",
"proxy": {
"id": "ConversationalRetrievalChain-SmY3w",
"field": "return_source_documents"
}
},
"condense_question_prompt_ConversationalRetrievalChain-SmY3w": {
"l2": false,
"info": "",
"list": false,
"name": "condense_question_prompt",
"show": true,
"type": "BasePromptTemplate",
"value": {
"_type": "prompt",
"template": "Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language.\n\nChat History:\n{chat_history}\nFollow Up Input: {question}\nStandalone question:",
"output_parser": null,
"input_variables": [
"chat_history",
"question"
],
"template_format": "f-string",
"partial_variables": {},
"validate_template": true
},
"l2_name": "condense_question_prompt",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "condense_question_prompt",
"proxy": {
"id": "ConversationalRetrievalChain-SmY3w",
"field": "condense_question_prompt"
}
},
"ai_prefix_ConversationBufferMemory-K1tss": {
"l2": false,
"info": "",
"list": false,
"name": "ai_prefix",
"show": false,
"type": "str",
"value": "AI",
"l2_name": "ai_prefix",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "ai_prefix",
"proxy": {
"id": "ConversationBufferMemory-K1tss",
"field": "ai_prefix"
}
},
"input_key_ConversationBufferMemory-K1tss": {
"l2": false,
"info": "The variable to be used as Chat Input when more than one variable is available.",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "input_key",
"proxy": {
"id": "ConversationBufferMemory-K1tss",
"field": "input_key"
}
},
"memory_key_ConversationBufferMemory-K1tss": {
"l2": false,
"info": "",
"list": false,
"name": "memory_key",
"show": true,
"type": "str",
"value": "chat_history",
"l2_name": "memory_key",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "memory_key",
"proxy": {
"id": "ConversationBufferMemory-K1tss",
"field": "memory_key"
}
},
"output_key_ConversationBufferMemory-K1tss": {
"l2": false,
"info": "The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "answer",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_key",
"proxy": {
"id": "ConversationBufferMemory-K1tss",
"field": "output_key"
}
},
"chat_memory_ConversationBufferMemory-K1tss": {
"l2": false,
"info": "",
"list": false,
"name": "chat_memory",
"show": true,
"type": "BaseChatMessageHistory",
"l2_name": "chat_memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "chat_memory",
"proxy": {
"id": "ConversationBufferMemory-K1tss",
"field": "chat_memory"
}
},
"human_prefix_ConversationBufferMemory-K1tss": {
"l2": false,
"info": "",
"list": false,
"name": "human_prefix",
"show": false,
"type": "str",
"value": "Human",
"l2_name": "human_prefix",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "human_prefix",
"proxy": {
"id": "ConversationBufferMemory-K1tss",
"field": "human_prefix"
}
},
"return_messages_ConversationBufferMemory-K1tss": {
"l2": false,
"info": "",
"list": false,
"name": "return_messages",
"show": true,
"type": "bool",
"l2_name": "return_messages",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "return_messages",
"proxy": {
"id": "ConversationBufferMemory-K1tss",
"field": "return_messages"
}
},
"template_PromptTemplate-bs0vj": {
"l2": false,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "参考文本:\n{context}\n\n----------------------\n\n1.用中文回答用户问题,并且答案要严谨专业。\n2.你需要依据以上【参考文本】中的内容来回答,当【参考文本】中有明确与用户问题相关的内容时才进行回答,不可根据自己的知识来回答。\n3.由于【参考文本】可能包含多个来自不同信息源的信息,所以根据这些不同的信息源可能得出有差异甚至冲突的答案,当发现这种情况时,这些答案都列举出来;如果没有冲突或差异,则只需要给出一个最终结果。\n4.若【参考文本】中内容与用户问题不相关则回复“没有找到相关内容”。\n\n----------------------\n\n用户问题: {question}\n你的回答:",
"l2_name": "template",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "template",
"proxy": {
"id": "PromptTemplate-bs0vj",
"field": "template"
}
},
"output_parser_PromptTemplate-bs0vj": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_parser",
"proxy": {
"id": "PromptTemplate-bs0vj",
"field": "output_parser"
}
},
"input_variables_PromptTemplate-bs0vj": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"context",
"question"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_variables",
"proxy": {
"id": "PromptTemplate-bs0vj",
"field": "input_variables"
}
},
"template_format_PromptTemplate-bs0vj": {
"l2": false,
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "str",
"value": "f-string",
"l2_name": "template_format",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "template_format",
"proxy": {
"id": "PromptTemplate-bs0vj",
"field": "template_format"
}
},
"partial_variables_PromptTemplate-bs0vj": {
"l2": false,
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"l2_name": "partial_variables",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "partial_variables",
"proxy": {
"id": "PromptTemplate-bs0vj",
"field": "partial_variables"
}
},
"validate_template_PromptTemplate-bs0vj": {
"l2": false,
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": true,
"l2_name": "validate_template",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "validate_template",
"proxy": {
"id": "PromptTemplate-bs0vj",
"field": "validate_template"
}
},
"callbacks_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "callbacks",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"list": true,
"file_path": "",
"display_name": "Callbacks",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "callbacks"
}
},
"async_client_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "async_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Async Client",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "async_client"
}
},
"cache_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": true,
"file_path": "",
"password": false,
"name": "cache",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"display_name": "Cache",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "cache"
}
},
"client_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Client",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "client"
}
},
"default_headers_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_headers",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Headers",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "default_headers"
}
},
"default_query_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_query",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Query",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "default_query"
}
},
"http_client_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "http_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Http Client",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "http_client"
}
},
"max_retries_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 2,
"password": false,
"name": "max_retries",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Retries",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "max_retries"
}
},
"max_tokens_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": true,
"name": "max_tokens",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Tokens",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "max_tokens"
},
"value": ""
},
"metadata_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "metadata",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Metadata",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "metadata"
}
},
"model_kwargs_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "model_kwargs",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Model Kwargs",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "model_kwargs"
}
},
"model_name_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "gpt-3.5-turbo-0613",
"password": false,
"options": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k",
"gpt-4-1106-preview"
],
"name": "model_name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Model Name",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "model_name"
}
},
"n_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 1,
"password": false,
"name": "n",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "N",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "n"
}
},
"name_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Name",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "name"
}
},
"openai_api_base_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_api_base",
"display_name": "OpenAI API Base",
"advanced": true,
"dynamic": false,
"info": "\nThe base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.\n",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "openai_api_base"
}
},
"openai_api_key_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "",
"password": true,
"name": "openai_api_key",
"display_name": "OpenAI API Key",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "openai_api_key"
}
},
"openai_organization_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "openai_organization",
"display_name": "OpenAI Organization",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "openai_organization"
}
},
"openai_proxy_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_proxy",
"display_name": "OpenAI Proxy",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "openai_proxy"
}
},
"request_timeout_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "request_timeout",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Request Timeout",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "request_timeout"
}
},
"streaming_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": false,
"password": false,
"name": "streaming",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Streaming",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "streaming"
}
},
"tags_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tags",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Tags",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "tags"
}
},
"temperature_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": 0.7,
"password": false,
"name": "temperature",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Temperature",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "temperature"
}
},
"tiktoken_model_name_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tiktoken_model_name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Tiktoken Model Name",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "tiktoken_model_name"
}
},
"verbose_ChatOpenAI-029a9": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "verbose",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Verbose",
"proxy": {
"id": "ChatOpenAI-029a9",
"field": "verbose"
}
}
},
"flow": {
"data": {
"nodes": [
{
"width": 384,
"height": 350,
"id": "MixEsVectorRetriever-J35CZ",
"type": "genericNode",
"position": {
"x": 1146.2998776479994,
"y": -505.22140452358315
},
"data": {
"id": "MixEsVectorRetriever-J35CZ",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": true,
"type": "str",
"l2_name": "tags",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "tags"
},
"_type": "MixEsVectorRetriever",
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": true,
"type": "code",
"l2_name": "metadata",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadata"
},
"combine_strategy": {
"l2": false,
"info": "",
"list": true,
"name": "combine_strategy",
"show": true,
"type": "str",
"value": "mix",
"l2_name": "combine_strategy",
"options": [
"keyword_front",
"vector_front",
"mix"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "combine_strategy"
},
"vector_retriever": {
"l2": false,
"info": "",
"list": false,
"name": "vector_retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "vector_retriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"keyword_retriever": {
"l2": false,
"info": "",
"list": false,
"name": "keyword_retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "keyword_retriever",
"advanced": false,
"password": true,
"required": true,
"multiline": false,
"placeholder": "",
"value": ""
}
},
"description": "This class ensemble the results of es retriever and vector retriever.",
"base_classes": [
"BaseRetriever",
"MixEsVectorRetriever"
],
"display_name": "MixEsVectorRetriever",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "MixEsVectorRetriever",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 1146.2998776479994,
"y": -505.22140452358315
},
"dragging": false
},
{
"width": 384,
"height": 428,
"id": "Milvus-cyR5W",
"type": "genericNode",
"position": {
"x": 543.3992621716293,
"y": -94.57897454061174
},
"data": {
"id": "Milvus-cyR5W",
"node": {
"template": {
"_type": "Milvus",
"drop_old": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "drop_old"
},
"documents": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadatas"
},
"index_params": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "index_params"
},
"search_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_kwargs"
},
"search_params": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_params"
},
"collection_name": {
"l2": true,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "collection_name",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "collection_name"
},
"connection_args": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "connection_args"
},
"consistency_level": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "consistency_level"
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"VectorStore",
"Milvus",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 543.3992621716293,
"y": -94.57897454061174
},
"dragging": false
},
{
"width": 384,
"height": 510,
"id": "ElasticKeywordsSearch-31Et9",
"type": "genericNode",
"position": {
"x": 545.7343868015423,
"y": -596.1314471305373
},
"data": {
"id": "ElasticKeywordsSearch-31Et9",
"node": {
"template": {
"ids": {
"l2": false,
"info": "",
"list": true,
"name": "ids",
"show": false,
"type": "str",
"l2_name": "ids",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "ids"
},
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"type": "BaseLLM",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "ElasticKeywordsSearch",
"prompt": {
"l2": false,
"info": "",
"list": false,
"name": "prompt",
"type": "BasePromptTemplate",
"l2_name": "prompt",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "prompt"
},
"documents": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadatas"
},
"index_name": {
"l2": true,
"info": "",
"list": false,
"name": "index_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "index_name",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "index_name"
},
"ssl_verify": {
"l2": false,
"info": "",
"list": false,
"name": "ssl_verify",
"show": true,
"type": "str",
"value": "",
"l2_name": "ssl_verify",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "ssl_verify"
},
"search_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_kwargs"
},
"refresh_indices": {
"l2": false,
"info": "",
"list": false,
"name": "refresh_indices",
"show": false,
"type": "bool",
"value": true,
"l2_name": "refresh_indices",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "refresh_indices"
},
"elasticsearch_url": {
"l2": false,
"info": "",
"list": false,
"name": "elasticsearch_url",
"show": true,
"type": "str",
"value": "",
"l2_name": "elasticsearch_url",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "ES_connection_url"
}
},
"description": "Construct ElasticKeywordsSearch wrapper from raw documents.",
"base_classes": [
"VectorStore",
"ElasticKeywordsSearch",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "ElasticKeywordsSearch",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "ElasticKeywordsSearch",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 545.7343868015423,
"y": -596.1314471305373
},
"dragging": false
},
{
"width": 384,
"height": 494,
"id": "ConversationalRetrievalChain-SmY3w",
"type": "genericNode",
"position": {
"x": 2006.6489580098225,
"y": -918.5048523096177
},
"data": {
"id": "ConversationalRetrievalChain-SmY3w",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"_type": "ConversationalRetrievalChain",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseChatMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"value": false,
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "verbose"
},
"callbacks": {
"l2": false,
"info": "",
"list": false,
"name": "callbacks",
"show": false,
"type": "Callbacks",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "callbacks"
},
"retriever": {
"l2": false,
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "retriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"chain_type": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "chain_type"
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"condense_question_llm": {
"l2": false,
"info": "",
"list": false,
"name": "condense_question_llm",
"show": false,
"type": "BaseLanguageModel",
"l2_name": "condense_question_llm",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "condense_question_llm"
},
"return_source_documents": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Return source documents"
},
"condense_question_prompt": {
"l2": false,
"info": "",
"list": false,
"name": "condense_question_prompt",
"show": true,
"type": "BasePromptTemplate",
"value": {
"_type": "prompt",
"template": "Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language.\n\nChat History:\n{chat_history}\nFollow Up Input: {question}\nStandalone question:",
"output_parser": null,
"input_variables": [
"chat_history",
"question"
],
"template_format": "f-string",
"partial_variables": {},
"validate_template": true
},
"l2_name": "condense_question_prompt",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "condense_question_prompt"
},
"combine_docs_chain_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "combine_docs_chain_kwargs",
"show": true,
"type": "BasePromptTemplate",
"l2_name": "combine_docs_chain_kwargs",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "prompt"
}
},
"description": "Convenience method to load chain from LLM and retriever.",
"base_classes": [
"BaseConversationalRetrievalChain",
"Chain",
"ConversationalRetrievalChain",
"function"
],
"display_name": "ConversationalRetrievalChain",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/chat_vector_db"
},
"type": "ConversationalRetrievalChain",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 2006.6489580098225,
"y": -918.5048523096177
},
"dragging": false
},
{
"width": 384,
"height": 526,
"id": "ConversationBufferMemory-K1tss",
"type": "genericNode",
"position": {
"x": 1134.0608104034231,
"y": -1084.2478524136263
},
"data": {
"id": "ConversationBufferMemory-K1tss",
"node": {
"template": {
"_type": "ConversationBufferMemory",
"ai_prefix": {
"l2": false,
"info": "",
"list": false,
"name": "ai_prefix",
"show": false,
"type": "str",
"value": "AI",
"l2_name": "ai_prefix",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "ai_prefix"
},
"input_key": {
"l2": false,
"info": "The variable to be used as Chat Input when more than one variable is available.",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "",
"l2_name": "input_key",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "input_key"
},
"memory_key": {
"l2": false,
"info": "",
"list": false,
"name": "memory_key",
"show": true,
"type": "str",
"value": "chat_history",
"l2_name": "memory_key",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "memory_key"
},
"output_key": {
"l2": false,
"info": "The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "answer",
"l2_name": "output_key",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_key"
},
"chat_memory": {
"l2": false,
"info": "",
"list": false,
"name": "chat_memory",
"show": true,
"type": "BaseChatMessageHistory",
"l2_name": "chat_memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "chat_memory"
},
"human_prefix": {
"l2": false,
"info": "",
"list": false,
"name": "human_prefix",
"show": false,
"type": "str",
"value": "Human",
"l2_name": "human_prefix",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "human_prefix"
},
"return_messages": {
"l2": false,
"info": "",
"list": false,
"name": "return_messages",
"show": true,
"type": "bool",
"l2_name": "return_messages",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "return_messages"
}
},
"description": "Buffer for storing conversation memory.",
"base_classes": [
"BaseMemory",
"ConversationBufferMemory",
"BaseChatMemory"
],
"display_name": "ConversationBufferMemory",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/memory/how_to/buffer"
},
"type": "ConversationBufferMemory",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 1134.0608104034231,
"y": -1084.2478524136263
},
"dragging": false
},
{
"width": 384,
"height": 290,
"id": "PromptTemplate-bs0vj",
"type": "genericNode",
"position": {
"x": 1129.186016282717,
"y": -1612.3505488234584
},
"data": {
"id": "PromptTemplate-bs0vj",
"node": {
"name": "",
"template": {
"_type": "PromptTemplate",
"template": {
"l2": false,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "参考文本:\n{context}\n\n----------------------\n\n1.用中文回答用户问题,并且答案要严谨专业。\n2.你需要依据以上【参考文本】中的内容来回答,当【参考文本】中有明确与用户问题相关的内容时才进行回答,不可根据自己的知识来回答。\n3.由于【参考文本】可能包含多个来自不同信息源的信息,所以根据这些不同的信息源可能得出有差异甚至冲突的答案,当发现这种情况时,这些答案都列举出来;如果没有冲突或差异,则只需要给出一个最终结果。\n4.若【参考文本】中内容与用户问题不相关则回复“没有找到相关内容”。\n\n----------------------\n\n用户问题: {question}\n你的回答:",
"l2_name": "template",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "template"
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_parser"
},
"input_variables": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"context",
"question"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_variables"
},
"template_format": {
"l2": false,
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "str",
"value": "f-string",
"l2_name": "template_format",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "template_format"
},
"partial_variables": {
"l2": false,
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"l2_name": "partial_variables",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "partial_variables"
},
"validate_template": {
"l2": false,
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": true,
"l2_name": "validate_template",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "validate_template"
}
},
"description": "Schema to represent a prompt for an LLM.",
"base_classes": [
"BasePromptTemplate",
"PromptTemplate",
"StringPromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"": [
"context",
"question"
],
"template": [
"context",
"question"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {
"formatters": {
"openai_api_key": {}
},
"base_formatters": {
"dict": {},
"list": {},
"show": {},
"union": {},
"kwargs": {},
"default": {},
"headers": {},
"optional": {},
"password": {},
"multiline": {},
"model_fields": {
"MODEL_DICT": {
"OpenAI": [
"text-davinci-003",
"text-davinci-002",
"text-curie-001",
"text-babbage-001",
"text-ada-001"
],
"Anthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
],
"ChatOpenAI": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k"
],
"ChatAnthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
]
}
},
"dict_code_file": {}
}
}
},
"type": "PromptTemplate",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 1129.186016282717,
"y": -1612.3505488234584
},
"dragging": false
},
{
"width": 384,
"height": 606,
"id": "ChatOpenAI-029a9",
"type": "genericNode",
"position": {
"x": 520.7277052724213,
"y": -1262.5347130150906
},
"data": {
"type": "ChatOpenAI",
"node": {
"template": {
"callbacks": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "callbacks",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"list": true,
"file_path": "",
"display_name": "Callbacks"
},
"async_client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "async_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Async Client"
},
"cache": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": true,
"file_path": "",
"password": false,
"name": "cache",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"display_name": "Cache"
},
"client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Client"
},
"default_headers": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_headers",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Headers"
},
"default_query": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_query",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Query"
},
"http_client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "http_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Http Client"
},
"max_retries": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 2,
"password": false,
"name": "max_retries",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Retries"
},
"max_tokens": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": true,
"name": "max_tokens",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Tokens"
},
"metadata": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "metadata",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Metadata"
},
"model_kwargs": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "model_kwargs",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Model Kwargs"
},
"model_name": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "gpt-3.5-turbo-0613",
"password": false,
"options": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k",
"gpt-4-1106-preview"
],
"name": "model_name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Model Name"
},
"n": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 1,
"password": false,
"name": "n",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "N"
},
"name": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Name"
},
"openai_api_base": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_api_base",
"display_name": "OpenAI API Base",
"advanced": false,
"dynamic": false,
"info": "\nThe base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.\n",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_api_key": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "",
"password": true,
"name": "openai_api_key",
"display_name": "OpenAI API Key",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_organization": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "openai_organization",
"display_name": "OpenAI Organization",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_proxy": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_proxy",
"display_name": "OpenAI Proxy",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"request_timeout": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "request_timeout",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Request Timeout"
},
"streaming": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": false,
"password": false,
"name": "streaming",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Streaming"
},
"tags": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tags",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Tags"
},
"temperature": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": 0.7,
"password": false,
"name": "temperature",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Temperature"
},
"tiktoken_model_name": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tiktoken_model_name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Tiktoken Model Name"
},
"verbose": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "verbose",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Verbose"
},
"_type": "ChatOpenAI"
},
"description": "[*Deprecated*] `OpenAI` Chat large language models API.",
"base_classes": [
"ChatOpenAI",
"BaseLanguageModel",
"BaseChatModel",
"BaseLLM"
],
"display_name": "ChatOpenAI",
"documentation": "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai",
"custom_fields": {},
"output_types": [],
"field_formatters": {},
"beta": false
},
"id": "ChatOpenAI-029a9",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 520.7277052724213,
"y": -1262.5347130150906
},
"dragging": false
}
],
"edges": [
{
"source": "Milvus-cyR5W",
"target": "MixEsVectorRetriever-J35CZ",
"sourceHandle": "Milvus|Milvus-cyR5W|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|vector_retriever|MixEsVectorRetriever-J35CZ",
"id": "reactflow__edge-Milvus-cyR5WMilvus|Milvus-cyR5W|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever-MixEsVectorRetriever-J35CZBaseRetriever|vector_retriever|MixEsVectorRetriever-J35CZ",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "ElasticKeywordsSearch-31Et9",
"target": "MixEsVectorRetriever-J35CZ",
"sourceHandle": "ElasticKeywordsSearch|ElasticKeywordsSearch-31Et9|VectorStore|ElasticKeywordsSearch|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|keyword_retriever|MixEsVectorRetriever-J35CZ",
"id": "reactflow__edge-ElasticKeywordsSearch-31Et9ElasticKeywordsSearch|ElasticKeywordsSearch-31Et9|VectorStore|ElasticKeywordsSearch|BaseRetriever|VectorStoreRetriever-MixEsVectorRetriever-J35CZBaseRetriever|keyword_retriever|MixEsVectorRetriever-J35CZ",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "MixEsVectorRetriever-J35CZ",
"target": "ConversationalRetrievalChain-SmY3w",
"sourceHandle": "MixEsVectorRetriever|MixEsVectorRetriever-J35CZ|BaseRetriever|MixEsVectorRetriever",
"targetHandle": "BaseRetriever|retriever|ConversationalRetrievalChain-SmY3w",
"id": "reactflow__edge-MixEsVectorRetriever-J35CZMixEsVectorRetriever|MixEsVectorRetriever-J35CZ|BaseRetriever|MixEsVectorRetriever-ConversationalRetrievalChain-SmY3wBaseRetriever|retriever|ConversationalRetrievalChain-SmY3w",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "ConversationBufferMemory-K1tss",
"target": "ConversationalRetrievalChain-SmY3w",
"sourceHandle": "ConversationBufferMemory|ConversationBufferMemory-K1tss|BaseMemory|ConversationBufferMemory|BaseChatMemory",
"targetHandle": "BaseChatMemory|memory|ConversationalRetrievalChain-SmY3w",
"id": "reactflow__edge-ConversationBufferMemory-K1tssConversationBufferMemory|ConversationBufferMemory-K1tss|BaseMemory|ConversationBufferMemory|BaseChatMemory-ConversationalRetrievalChain-SmY3wBaseChatMemory|memory|ConversationalRetrievalChain-SmY3w",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "PromptTemplate-bs0vj",
"target": "ConversationalRetrievalChain-SmY3w",
"sourceHandle": "PromptTemplate|PromptTemplate-bs0vj|BasePromptTemplate|PromptTemplate|StringPromptTemplate",
"targetHandle": "BasePromptTemplate|combine_docs_chain_kwargs|ConversationalRetrievalChain-SmY3w",
"id": "reactflow__edge-PromptTemplate-bs0vjPromptTemplate|PromptTemplate-bs0vj|BasePromptTemplate|PromptTemplate|StringPromptTemplate-ConversationalRetrievalChain-SmY3wBasePromptTemplate|combine_docs_chain_kwargs|ConversationalRetrievalChain-SmY3w",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "ChatOpenAI-029a9",
"sourceHandle": "ChatOpenAI|ChatOpenAI-029a9|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM",
"target": "ConversationalRetrievalChain-SmY3w",
"targetHandle": "BaseLanguageModel|llm|ConversationalRetrievalChain-SmY3w",
"style": {
"stroke": "#555"
},
"className": "stroke-foreground stroke-connection",
"animated": true,
"id": "reactflow__edge-ChatOpenAI-029a9ChatOpenAI|ChatOpenAI-029a9|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM-ConversationalRetrievalChain-SmY3wBaseLanguageModel|llm|ConversationalRetrievalChain-SmY3w",
"selected": true
}
],
"viewport": {
"zoom": 1,
"x": 0,
"y": 0
}
},
"is_component": false,
"name": "",
"description": "",
"id": "24ac8",
"status": 0,
"write": false,
"guide_word": ""
}
}
}
},
{
"知识库问答": {
"id": "RetrievalQA-517cc",
"type": "RetrievalQA",
"node": {
"output_types": [],
"display_name": "知识库问答",
"documentation": "",
"base_classes": [
"RetrievalQA",
"Chain",
"BaseRetrievalQA",
"function"
],
"description": "Chain for question-answering against an index.",
"template": {
"drop_old_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "drop_old",
"proxy": {
"id": "Milvus-CWpae",
"field": "drop_old"
}
},
"documents_Milvus-CWpae": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents",
"proxy": {
"id": "Milvus-CWpae",
"field": "documents"
}
},
"embedding_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding",
"proxy": {
"id": "Milvus-CWpae",
"field": "embedding"
}
},
"metadatas_Milvus-CWpae": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadatas",
"proxy": {
"id": "Milvus-CWpae",
"field": "metadatas"
}
},
"index_params_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "index_params",
"proxy": {
"id": "Milvus-CWpae",
"field": "index_params"
}
},
"search_kwargs_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": false,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_kwargs",
"proxy": {
"id": "Milvus-CWpae",
"field": "search_kwargs"
}
},
"search_params_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_params",
"proxy": {
"id": "Milvus-CWpae",
"field": "search_params"
}
},
"collection_name_Milvus-CWpae": {
"l2": true,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "选择知识库",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "collection_name",
"proxy": {
"id": "Milvus-CWpae",
"field": "collection_name"
}
},
"connection_args_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": false,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "connection_args",
"proxy": {
"id": "Milvus-CWpae",
"field": "connection_args"
}
},
"consistency_level_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "consistency_level",
"proxy": {
"id": "Milvus-CWpae",
"field": "consistency_level"
}
},
"tags_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "tags",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "tags"
}
},
"memory_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "memory",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "memory"
}
},
"verbose_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "verbose",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "verbose"
}
},
"metadata_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadata",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "metadata"
}
},
"callbacks_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "callbacks",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "callbacks"
}
},
"input_key_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_key",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "input_key"
}
},
"input_node_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "input_node"
}
},
"output_key_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "output_key",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "output_key"
}
},
"return_source_documents_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "return_source_documents",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "return_source_documents"
}
},
"token_max_CombineDocsChain-71a85": {
"info": "只对Stuff类型生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max",
"proxy": {
"id": "CombineDocsChain-71a85",
"field": "token_max"
}
},
"chain_type_CombineDocsChain-71a85": {
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "chain_type",
"proxy": {
"id": "CombineDocsChain-71a85",
"field": "chain_type"
}
},
"source_PromptTemplate-3c164": {
"info": "",
"list": false,
"name": "source",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "source",
"proxy": {
"id": "PromptTemplate-3c164",
"field": "source"
}
},
"template_PromptTemplate-3c164": {
"l2": false,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "title: {source}\n{page_content}\n----------------",
"l2_name": "提示词模板",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "template",
"proxy": {
"id": "PromptTemplate-3c164",
"field": "template"
}
},
"input_types_PromptTemplate-3c164": {
"info": "",
"list": false,
"name": "input_types",
"show": false,
"type": "code",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "input_types",
"proxy": {
"id": "PromptTemplate-3c164",
"field": "input_types"
}
},
"page_content_PromptTemplate-3c164": {
"info": "",
"list": false,
"name": "page_content",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "page_content",
"proxy": {
"id": "PromptTemplate-3c164",
"field": "page_content"
}
},
"output_parser_PromptTemplate-3c164": {
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_parser",
"proxy": {
"id": "PromptTemplate-3c164",
"field": "output_parser"
}
},
"input_variables_PromptTemplate-3c164": {
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"source",
"page_content"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_variables",
"proxy": {
"id": "PromptTemplate-3c164",
"field": "input_variables"
}
},
"template_format_PromptTemplate-3c164": {
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "Union[Literal['f-string'], Literal['jinja2']]",
"value": "f-string",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "template_format",
"proxy": {
"id": "PromptTemplate-3c164",
"field": "template_format"
}
},
"partial_variables_PromptTemplate-3c164": {
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "partial_variables",
"proxy": {
"id": "PromptTemplate-3c164",
"field": "partial_variables"
}
},
"validate_template_PromptTemplate-3c164": {
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": false,
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "validate_template",
"proxy": {
"id": "PromptTemplate-3c164",
"field": "validate_template"
}
},
"context_PromptTemplate-ced29": {
"info": "",
"list": false,
"name": "context",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "context",
"proxy": {
"id": "PromptTemplate-ced29",
"field": "context"
}
},
"question_PromptTemplate-ced29": {
"info": "",
"list": false,
"name": "question",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "question",
"proxy": {
"id": "PromptTemplate-ced29",
"field": "question"
}
},
"template_PromptTemplate-ced29": {
"l2": true,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "参考文本:\n{context}\n\n----------------------\n# Role:企业客服\n\n# Background :\n你是一家名叫XX公司的客服人员。你的日常工作是回复公司内用户的各类咨询问题,所以当用户提到“公司”时,指的是XX公司。\n\n# Goals:\n- 以上【参考文本】中是从企业知识库中查找到的相关信息,只能结合以上信息进行回答,若以上内容为空或其中没有找到能回答【用户问题】的内容时,则回复“没有找到相关内容”,不能根据你自己的知识自己发挥。\n- 特别要注意区分【用户问题】与【参考文本】中不同的日期、人名、公司名这些关键信息。\n- 用中文回答问题,并且答案要严谨、专业、清晰、可读性好。\n- 拥有排版审美, 会利用序号, 缩进, 分隔线和换行符等等来美化信息排版。\n\n----------------------\n\n用户问题: {question}\n你的回答:",
"l2_name": "提示词模板",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "template",
"proxy": {
"id": "PromptTemplate-ced29",
"field": "template"
}
},
"input_types_PromptTemplate-ced29": {
"info": "",
"list": false,
"name": "input_types",
"show": false,
"type": "code",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "input_types",
"proxy": {
"id": "PromptTemplate-ced29",
"field": "input_types"
}
},
"output_parser_PromptTemplate-ced29": {
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_parser",
"proxy": {
"id": "PromptTemplate-ced29",
"field": "output_parser"
}
},
"input_variables_PromptTemplate-ced29": {
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"context",
"question"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_variables",
"proxy": {
"id": "PromptTemplate-ced29",
"field": "input_variables"
}
},
"template_format_PromptTemplate-ced29": {
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "Union[Literal['f-string'], Literal['jinja2']]",
"value": "f-string",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "template_format",
"proxy": {
"id": "PromptTemplate-ced29",
"field": "template_format"
}
},
"partial_variables_PromptTemplate-ced29": {
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "partial_variables",
"proxy": {
"id": "PromptTemplate-ced29",
"field": "partial_variables"
}
},
"validate_template_PromptTemplate-ced29": {
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": false,
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "validate_template",
"proxy": {
"id": "PromptTemplate-ced29",
"field": "validate_template"
}
},
"callbacks_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "callbacks",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"list": true,
"file_path": "",
"display_name": "Callbacks",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "callbacks"
}
},
"async_client_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "async_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Async Client",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "async_client"
}
},
"cache_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": true,
"file_path": "",
"password": false,
"name": "cache",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"display_name": "Cache",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "cache"
}
},
"client_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Client",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "client"
}
},
"default_headers_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_headers",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Headers",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "default_headers"
}
},
"default_query_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_query",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Query",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "default_query"
}
},
"http_client_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "http_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Http Client",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "http_client"
}
},
"max_retries_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 2,
"password": false,
"name": "max_retries",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Retries",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "max_retries"
}
},
"max_tokens_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": true,
"name": "max_tokens",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Tokens",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "max_tokens"
},
"value": ""
},
"metadata_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "metadata",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Metadata",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "metadata"
}
},
"model_kwargs_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "model_kwargs",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Model Kwargs",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "model_kwargs"
}
},
"model_name_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "gpt-3.5-turbo-0613",
"password": false,
"options": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k",
"gpt-4-1106-preview"
],
"name": "model_name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Model Name",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "model_name"
}
},
"n_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 1,
"password": false,
"name": "n",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "N",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "n"
}
},
"name_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Name",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "name"
}
},
"openai_api_base_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_api_base",
"display_name": "OpenAI API Base",
"advanced": true,
"dynamic": false,
"info": "\nThe base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.\n",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "openai_api_base"
}
},
"openai_api_key_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "",
"password": true,
"name": "openai_api_key",
"display_name": "OpenAI API Key",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "openai_api_key"
}
},
"openai_organization_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "openai_organization",
"display_name": "OpenAI Organization",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "openai_organization"
}
},
"openai_proxy_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_proxy",
"display_name": "OpenAI Proxy",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "openai_proxy"
}
},
"request_timeout_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "request_timeout",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Request Timeout",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "request_timeout"
}
},
"streaming_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": false,
"password": false,
"name": "streaming",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Streaming",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "streaming"
}
},
"tags_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tags",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Tags",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "tags"
}
},
"temperature_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": 0.7,
"password": false,
"name": "temperature",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Temperature",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "temperature"
}
},
"tiktoken_model_name_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tiktoken_model_name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Tiktoken Model Name",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "tiktoken_model_name"
}
},
"verbose_ChatOpenAI-7a446": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "verbose",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Verbose",
"proxy": {
"id": "ChatOpenAI-7a446",
"field": "verbose"
}
}
},
"flow": {
"data": {
"nodes": [
{
"width": 384,
"height": 346,
"id": "Milvus-CWpae",
"type": "genericNode",
"position": {
"x": 1146.2686160133917,
"y": -392.08641987984464
},
"data": {
"id": "Milvus-CWpae",
"node": {
"l2_name": "知识库",
"template": {
"_type": "Milvus",
"drop_old": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "drop_old"
},
"documents": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadatas"
},
"index_params": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "index_params"
},
"search_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_kwargs"
},
"search_params": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_params"
},
"collection_name": {
"l2": true,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "选择知识库",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "collection_name"
},
"connection_args": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "connection_args"
},
"consistency_level": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "consistency_level"
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"Milvus",
"VectorStore",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 1146.2686160133917,
"y": -392.08641987984464
},
"dragging": false
},
{
"width": 384,
"height": 316,
"id": "RetrievalQA-x5nap",
"type": "genericNode",
"position": {
"x": 1809.8484174920595,
"y": -770.5069621032657
},
"data": {
"id": "RetrievalQA-x5nap",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "tags"
},
"_type": "RetrievalQA",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "memory"
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "verbose"
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadata"
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "callbacks"
},
"input_key": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_key"
},
"retriever": {
"l2": false,
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "retriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "output_key"
},
"combine_documents_chain": {
"l2": false,
"info": "",
"list": false,
"name": "combine_documents_chain",
"show": true,
"type": "BaseCombineDocumentsChain",
"l2_name": "combine_documents_chain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "return_source_documents"
}
},
"description": "Chain for question-answering against an index.",
"base_classes": [
"RetrievalQA",
"Chain",
"BaseRetrievalQA",
"function"
],
"display_name": "RetrievalQA",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"
},
"type": "RetrievalQA",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 1809.8484174920595,
"y": -770.5069621032657
}
},
{
"width": 384,
"height": 448,
"id": "CombineDocsChain-71a85",
"type": "genericNode",
"position": {
"x": 1135.690733661112,
"y": -1047.3523465428725
},
"data": {
"id": "CombineDocsChain-71a85",
"node": {
"template": {
"llm": {
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "load_qa_chain",
"prompt": {
"info": "只对Stuff类型生效",
"list": false,
"name": "prompt",
"show": true,
"type": "BasePromptTemplate",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "prompt"
},
"token_max": {
"info": "只对Stuff类型生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max"
},
"chain_type": {
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "chain_type"
},
"document_prompt": {
"info": "",
"list": false,
"name": "document_prompt",
"show": true,
"type": "BasePromptTemplate",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
}
},
"description": "Load question answering chain.",
"base_classes": [
"BaseCombineDocumentsChain",
"function"
],
"display_name": "CombineDocsChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "CombineDocsChain",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 1135.690733661112,
"y": -1047.3523465428725
}
},
{
"width": 384,
"height": 454,
"id": "PromptTemplate-3c164",
"type": "genericNode",
"position": {
"x": 538.127581209942,
"y": -1530.8752798629753
},
"data": {
"id": "PromptTemplate-3c164",
"node": {
"name": "",
"l2_name": "召回段落拼接提示词",
"template": {
"_type": "PromptTemplate",
"source": {
"info": "",
"list": false,
"name": "source",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "source"
},
"template": {
"l2": false,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "title: {source}\n{page_content}\n----------------",
"l2_name": "提示词模板",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "template"
},
"input_types": {
"info": "",
"list": false,
"name": "input_types",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "input_types"
},
"page_content": {
"info": "",
"list": false,
"name": "page_content",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "page_content"
},
"output_parser": {
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_parser"
},
"input_variables": {
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"source",
"page_content"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_variables"
},
"template_format": {
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "Union[Literal['f-string'], Literal['jinja2']]",
"value": "f-string",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "template_format"
},
"partial_variables": {
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "partial_variables"
},
"validate_template": {
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": false,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "validate_template"
}
},
"description": "A prompt template for a language model.",
"base_classes": [
"Runnable",
"StringPromptTemplate",
"RunnableSerializable",
"PromptTemplate",
"Generic",
"BasePromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"": [
"source",
"page_content"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {}
},
"type": "PromptTemplate",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 538.127581209942,
"y": -1530.8752798629753
}
},
{
"width": 384,
"height": 454,
"id": "PromptTemplate-ced29",
"type": "genericNode",
"position": {
"x": 528.5375319975674,
"y": -1031.4149446082283
},
"data": {
"id": "PromptTemplate-ced29",
"node": {
"name": "",
"l2_name": "大模型问答提示词",
"template": {
"_type": "PromptTemplate",
"context": {
"info": "",
"list": false,
"name": "context",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "context"
},
"question": {
"info": "",
"list": false,
"name": "question",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser",
"VariableNode"
],
"placeholder": "",
"display_name": "question"
},
"template": {
"l2": true,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "参考文本:\n{context}\n\n----------------------\n# Role:企业客服\n\n# Background :\n你是一家名叫XX公司的客服人员。你的日常工作是回复公司内用户的各类咨询问题,所以当用户提到“公司”时,指的是XX公司。\n\n# Goals:\n- 以上【参考文本】中是从企业知识库中查找到的相关信息,只能结合以上信息进行回答,若以上内容为空或其中没有找到能回答【用户问题】的内容时,则回复“没有找到相关内容”,不能根据你自己的知识自己发挥。\n- 特别要注意区分【用户问题】与【参考文本】中不同的日期、人名、公司名这些关键信息。\n- 用中文回答问题,并且答案要严谨、专业、清晰、可读性好。\n- 拥有排版审美, 会利用序号, 缩进, 分隔线和换行符等等来美化信息排版。\n\n----------------------\n\n用户问题: {question}\n你的回答:",
"l2_name": "提示词模板",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "template"
},
"input_types": {
"info": "",
"list": false,
"name": "input_types",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "input_types"
},
"output_parser": {
"info": "",
"list": false,
"name": "output_parser",
"show": true,
"type": "BaseOutputParser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_parser"
},
"input_variables": {
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"context",
"question"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_variables"
},
"template_format": {
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "Union[Literal['f-string'], Literal['jinja2']]",
"value": "f-string",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "template_format"
},
"partial_variables": {
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "partial_variables"
},
"validate_template": {
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": false,
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "validate_template"
}
},
"description": "A prompt template for a language model.",
"base_classes": [
"Runnable",
"StringPromptTemplate",
"RunnableSerializable",
"PromptTemplate",
"Generic",
"BasePromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"": [
"context",
"question"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {}
},
"type": "PromptTemplate",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 528.5375319975674,
"y": -1031.4149446082283
}
},
{
"width": 384,
"height": 606,
"id": "ChatOpenAI-7a446",
"type": "genericNode",
"position": {
"x": 524.9021453356706,
"y": -519.7914736349932
},
"data": {
"type": "ChatOpenAI",
"node": {
"template": {
"callbacks": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "callbacks",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"list": true,
"file_path": "",
"display_name": "Callbacks"
},
"async_client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "async_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Async Client"
},
"cache": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": true,
"file_path": "",
"password": false,
"name": "cache",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"display_name": "Cache"
},
"client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Client"
},
"default_headers": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_headers",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Headers"
},
"default_query": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_query",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Query"
},
"http_client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "http_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Http Client"
},
"max_retries": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 2,
"password": false,
"name": "max_retries",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Retries"
},
"max_tokens": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": true,
"name": "max_tokens",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Tokens"
},
"metadata": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "metadata",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Metadata"
},
"model_kwargs": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "model_kwargs",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Model Kwargs"
},
"model_name": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "gpt-3.5-turbo-0613",
"password": false,
"options": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k",
"gpt-4-1106-preview"
],
"name": "model_name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Model Name"
},
"n": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 1,
"password": false,
"name": "n",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "N"
},
"name": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Name"
},
"openai_api_base": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_api_base",
"display_name": "OpenAI API Base",
"advanced": false,
"dynamic": false,
"info": "\nThe base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.\n",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_api_key": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "",
"password": true,
"name": "openai_api_key",
"display_name": "OpenAI API Key",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_organization": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "openai_organization",
"display_name": "OpenAI Organization",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_proxy": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_proxy",
"display_name": "OpenAI Proxy",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"request_timeout": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "request_timeout",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Request Timeout"
},
"streaming": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": false,
"password": false,
"name": "streaming",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Streaming"
},
"tags": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tags",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Tags"
},
"temperature": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": 0.7,
"password": false,
"name": "temperature",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Temperature"
},
"tiktoken_model_name": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tiktoken_model_name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Tiktoken Model Name"
},
"verbose": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "verbose",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Verbose"
},
"_type": "ChatOpenAI"
},
"description": "[*Deprecated*] `OpenAI` Chat large language models API.",
"base_classes": [
"ChatOpenAI",
"BaseLanguageModel",
"BaseChatModel",
"BaseLLM"
],
"display_name": "ChatOpenAI",
"documentation": "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai",
"custom_fields": {},
"output_types": [],
"field_formatters": {},
"beta": false
},
"id": "ChatOpenAI-7a446",
"value": null
},
"selected": true,
"dragging": false,
"positionAbsolute": {
"x": 524.9021453356706,
"y": -519.7914736349932
}
}
],
"edges": [
{
"source": "Milvus-CWpae",
"target": "RetrievalQA-x5nap",
"sourceHandle": "Milvus|Milvus-CWpae|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|RetrievalQA-x5nap",
"id": "reactflow__edge-Milvus-CWpaeMilvus|Milvus-CWpae|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever-RetrievalQA-x5napBaseRetriever|retriever|RetrievalQA-x5nap",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "CombineDocsChain-71a85",
"target": "RetrievalQA-x5nap",
"sourceHandle": "CombineDocsChain|CombineDocsChain-71a85|BaseCombineDocumentsChain|function",
"targetHandle": "BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap",
"id": "reactflow__edge-CombineDocsChain-71a85CombineDocsChain|CombineDocsChain-71a85|BaseCombineDocumentsChain|function-RetrievalQA-x5napBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "PromptTemplate-3c164",
"target": "CombineDocsChain-71a85",
"sourceHandle": "PromptTemplate|PromptTemplate-3c164|Runnable|StringPromptTemplate|RunnableSerializable|PromptTemplate|Generic|BasePromptTemplate",
"targetHandle": "BasePromptTemplate|document_prompt|CombineDocsChain-71a85",
"id": "reactflow__edge-PromptTemplate-3c164PromptTemplate|PromptTemplate-3c164|Runnable|StringPromptTemplate|RunnableSerializable|PromptTemplate|Generic|BasePromptTemplate-CombineDocsChain-71a85BasePromptTemplate|document_prompt|CombineDocsChain-71a85",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "PromptTemplate-ced29",
"target": "CombineDocsChain-71a85",
"sourceHandle": "PromptTemplate|PromptTemplate-ced29|Runnable|StringPromptTemplate|RunnableSerializable|PromptTemplate|Generic|BasePromptTemplate",
"targetHandle": "BasePromptTemplate|prompt|CombineDocsChain-71a85",
"id": "reactflow__edge-PromptTemplate-ced29PromptTemplate|PromptTemplate-ced29|Runnable|StringPromptTemplate|RunnableSerializable|PromptTemplate|Generic|BasePromptTemplate-CombineDocsChain-71a85BasePromptTemplate|prompt|CombineDocsChain-71a85",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "ChatOpenAI-7a446",
"sourceHandle": "ChatOpenAI|ChatOpenAI-7a446|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM",
"target": "CombineDocsChain-71a85",
"targetHandle": "BaseLanguageModel|llm|CombineDocsChain-71a85",
"style": {
"stroke": "#555"
},
"className": "stroke-foreground stroke-connection",
"animated": true,
"id": "reactflow__edge-ChatOpenAI-7a446ChatOpenAI|ChatOpenAI-7a446|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM-CombineDocsChain-71a85BaseLanguageModel|llm|CombineDocsChain-71a85",
"selected": true
}
],
"viewport": {
"zoom": 1,
"x": 0,
"y": 0
}
},
"is_component": false,
"name": "",
"description": "",
"id": "da453",
"status": 0,
"write": false,
"guide_word": ""
}
}
}
},
{
"表格数据问答": {
"id": "RetrievalQA-0a13b",
"type": "InputFileNode",
"node": {
"output_types": [],
"display_name": "表格数据问答",
"documentation": "",
"base_classes": [
"RetrievalQA",
"Chain",
"BaseRetrievalQA",
"function"
],
"description": "Chain for question-answering against an index.",
"template": {
"token_max_CombineDocsChain-RCPNA": {
"l2": false,
"info": "当前只对stuff 生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"l2_name": "token_max",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max",
"proxy": {
"id": "CombineDocsChain-RCPNA",
"field": "token_max"
}
},
"chain_type_CombineDocsChain-RCPNA": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "chain_type",
"proxy": {
"id": "CombineDocsChain-RCPNA",
"field": "chain_type"
}
},
"drop_old_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "drop_old",
"proxy": {
"id": "Milvus-CWpae",
"field": "drop_old"
}
},
"metadatas_Milvus-CWpae": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadatas",
"proxy": {
"id": "Milvus-CWpae",
"field": "metadatas"
}
},
"index_params_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "index_params",
"proxy": {
"id": "Milvus-CWpae",
"field": "index_params"
}
},
"search_kwargs_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": false,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_kwargs",
"proxy": {
"id": "Milvus-CWpae",
"field": "search_kwargs"
}
},
"search_params_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_params",
"proxy": {
"id": "Milvus-CWpae",
"field": "search_params"
}
},
"collection_name_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "选择知识库",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"collection_id": "",
"display_name": "collection_name",
"proxy": {
"id": "Milvus-CWpae",
"field": "collection_name"
}
},
"connection_args_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": false,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "connection_args",
"proxy": {
"id": "Milvus-CWpae",
"field": "connection_args"
}
},
"consistency_level_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "consistency_level",
"proxy": {
"id": "Milvus-CWpae",
"field": "consistency_level"
}
},
"tags_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "tags",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "tags"
}
},
"memory_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "memory",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "memory"
}
},
"verbose_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "verbose",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "verbose"
}
},
"metadata_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadata",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "metadata"
}
},
"callbacks_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "callbacks",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "callbacks"
}
},
"input_key_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_key",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "input_key"
}
},
"input_node_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "input_node"
}
},
"output_key_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "output_key",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "output_key"
}
},
"return_source_documents_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "return_source_documents",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "return_source_documents"
}
},
"proxy_url_OpenAIProxyEmbedding-1771b": {
"info": "",
"list": false,
"name": "proxy_url",
"show": false,
"type": "str",
"value": "",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "http://43.133.35.137:8080",
"display_name": "proxy_url",
"proxy": {
"id": "OpenAIProxyEmbedding-1771b",
"field": "proxy_url"
}
},
"metadata_CSVLoader-854c0": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"value": "{}",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Metadata",
"proxy": {
"id": "CSVLoader-854c0",
"field": "metadata"
}
},
"file_path_InputFileNode-e4363": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "file",
"value": "",
"advanced": true,
"password": false,
"required": false,
"suffixes": [
".csv"
],
"fileTypes": [
"csv"
],
"file_path": null,
"multiline": false,
"placeholder": "",
"display_name": "file_path",
"proxy": {
"id": "InputFileNode-e4363",
"field": "file_path"
}
},
"file_type_InputFileNode-e4363": {
"info": "Tips for which file should upload",
"list": false,
"name": "file_type",
"show": true,
"type": "str",
"value": "CSV文件",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "提示上传文件类型",
"display_name": "Name",
"proxy": {
"id": "InputFileNode-e4363",
"field": "file_type"
}
},
"callbacks_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "callbacks",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"list": true,
"file_path": "",
"display_name": "Callbacks",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "callbacks"
}
},
"async_client_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "async_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Async Client",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "async_client"
}
},
"cache_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": true,
"file_path": "",
"password": false,
"name": "cache",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"display_name": "Cache",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "cache"
}
},
"client_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Client",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "client"
}
},
"default_headers_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_headers",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Headers",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "default_headers"
}
},
"default_query_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_query",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Query",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "default_query"
}
},
"http_client_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "http_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Http Client",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "http_client"
}
},
"max_retries_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 2,
"password": false,
"name": "max_retries",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Retries",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "max_retries"
}
},
"max_tokens_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": true,
"name": "max_tokens",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Tokens",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "max_tokens"
},
"value": ""
},
"metadata_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "metadata",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Metadata",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "metadata"
}
},
"model_kwargs_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "model_kwargs",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Model Kwargs",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "model_kwargs"
}
},
"model_name_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "gpt-3.5-turbo-0613",
"password": false,
"options": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k",
"gpt-4-1106-preview"
],
"name": "model_name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Model Name",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "model_name"
}
},
"n_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 1,
"password": false,
"name": "n",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "N",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "n"
}
},
"name_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Name",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "name"
}
},
"openai_api_base_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_api_base",
"display_name": "OpenAI API Base",
"advanced": true,
"dynamic": false,
"info": "\nThe base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.\n",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "openai_api_base"
}
},
"openai_api_key_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "",
"password": true,
"name": "openai_api_key",
"display_name": "OpenAI API Key",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "openai_api_key"
}
},
"openai_organization_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "openai_organization",
"display_name": "OpenAI Organization",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "openai_organization"
}
},
"openai_proxy_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_proxy",
"display_name": "OpenAI Proxy",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "openai_proxy"
}
},
"request_timeout_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "request_timeout",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Request Timeout",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "request_timeout"
}
},
"streaming_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": false,
"password": false,
"name": "streaming",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Streaming",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "streaming"
}
},
"tags_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tags",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Tags",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "tags"
}
},
"temperature_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": 0.7,
"password": false,
"name": "temperature",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Temperature",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "temperature"
}
},
"tiktoken_model_name_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tiktoken_model_name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Tiktoken Model Name",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "tiktoken_model_name"
}
},
"verbose_ChatOpenAI-c4ddb": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "verbose",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Verbose",
"proxy": {
"id": "ChatOpenAI-c4ddb",
"field": "verbose"
}
}
},
"flow": {
"data": {
"nodes": [
{
"width": 384,
"height": 376,
"id": "CombineDocsChain-RCPNA",
"type": "genericNode",
"position": {
"x": 991.5062827922865,
"y": -1765.3942107165124
},
"data": {
"id": "CombineDocsChain-RCPNA",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "load_qa_chain",
"token_max": {
"l2": false,
"info": "当前只对stuff 生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"l2_name": "token_max",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max"
},
"chain_type": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "chain_type"
}
},
"description": "Load question answering chain.",
"base_classes": [
"BaseCombineDocumentsChain",
"function"
],
"display_name": "CombineDocsChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "CombineDocsChain",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 991.5062827922865,
"y": -1765.3942107165124
},
"dragging": false
},
{
"width": 384,
"height": 346,
"id": "Milvus-CWpae",
"type": "genericNode",
"position": {
"x": 1004.1977914708131,
"y": -1222.8140072260721
},
"data": {
"id": "Milvus-CWpae",
"node": {
"l2_name": "知识库",
"template": {
"_type": "Milvus",
"drop_old": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "drop_old"
},
"documents": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadatas"
},
"index_params": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "index_params"
},
"search_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_kwargs"
},
"search_params": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_params"
},
"collection_name": {
"l2": false,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "选择知识库",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"collection_id": "",
"display_name": "collection_name"
},
"connection_args": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "connection_args"
},
"consistency_level": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "consistency_level"
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"Milvus",
"VectorStore",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 1004.1977914708131,
"y": -1222.8140072260721
},
"dragging": false
},
{
"width": 384,
"height": 316,
"id": "RetrievalQA-x5nap",
"type": "genericNode",
"position": {
"x": 1667.777592949481,
"y": -1602.5215637887113
},
"data": {
"id": "RetrievalQA-x5nap",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "tags"
},
"_type": "RetrievalQA",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "memory"
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "verbose"
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadata"
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "callbacks"
},
"input_key": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_key"
},
"retriever": {
"l2": false,
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "retriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "output_key"
},
"combine_documents_chain": {
"l2": false,
"info": "",
"list": false,
"name": "combine_documents_chain",
"show": true,
"type": "BaseCombineDocumentsChain",
"l2_name": "combine_documents_chain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "return_source_documents"
}
},
"description": "Chain for question-answering against an index.",
"base_classes": [
"RetrievalQA",
"Chain",
"BaseRetrievalQA",
"function"
],
"display_name": "RetrievalQA",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"
},
"type": "RetrievalQA",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 1667.777592949481,
"y": -1602.5215637887113
},
"dragging": false
},
{
"width": 384,
"height": 172,
"id": "OpenAIProxyEmbedding-1771b",
"type": "genericNode",
"position": {
"x": 492.2452900949522,
"y": -841.6318960897328
},
"data": {
"id": "OpenAIProxyEmbedding-1771b",
"node": {
"template": {
"_type": "proxy_embedding",
"proxy_url": {
"info": "",
"list": false,
"name": "proxy_url",
"show": false,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "http://43.133.35.137:8080",
"display_name": "proxy_url"
}
},
"description": " 使用自建的embedding服务使用openai进行embed ",
"base_classes": [
"Embeddings"
],
"display_name": "OpenAIProxyEmbedding",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "OpenAIProxyEmbedding",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 492.2452900949522,
"y": -841.6318960897328
},
"dragging": false
},
{
"width": 384,
"height": 290,
"id": "CSVLoader-854c0",
"type": "genericNode",
"position": {
"x": 473.20021062628746,
"y": -1217.8870866182915
},
"data": {
"id": "CSVLoader-854c0",
"node": {
"template": {
"_type": "CSVLoader",
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": true,
"type": "code",
"value": "{}",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Metadata"
},
"file_path": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "fileNode",
"value": "",
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".csv"
],
"fileTypes": [
"csv"
],
"multiline": false,
"placeholder": ""
}
},
"description": "Load a `CSV` file into a list of Documents.",
"base_classes": [
"Document"
],
"display_name": "CSVLoader",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv"
},
"type": "CSVLoader",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 473.20021062628746,
"y": -1217.8870866182915
},
"dragging": false
},
{
"width": 384,
"height": 336,
"id": "InputFileNode-e4363",
"type": "genericNode",
"position": {
"x": -29.907305337607568,
"y": -1246.4547058212886
},
"data": {
"id": "InputFileNode-e4363",
"node": {
"template": {
"_type": "InputFileNode",
"file_path": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "file",
"value": "",
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".csv"
],
"fileTypes": [
"csv"
],
"file_path": null,
"multiline": false,
"placeholder": "",
"display_name": "file_path"
},
"file_type": {
"info": "Tips for which file should upload",
"list": false,
"name": "file_type",
"show": true,
"type": "str",
"value": "CSV文件",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "提示上传文件类型",
"display_name": "Name"
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"fileNode"
],
"display_name": "InputFileNode",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "InputFileNode",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": -29.907305337607568,
"y": -1246.4547058212886
},
"dragging": false
},
{
"width": 384,
"height": 606,
"id": "ChatOpenAI-c4ddb",
"type": "genericNode",
"position": {
"x": 492.0105811305291,
"y": -2015.8972405291959
},
"data": {
"type": "ChatOpenAI",
"node": {
"template": {
"callbacks": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "callbacks",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"list": true,
"file_path": "",
"display_name": "Callbacks"
},
"async_client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "async_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Async Client"
},
"cache": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": true,
"file_path": "",
"password": false,
"name": "cache",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"display_name": "Cache"
},
"client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Client"
},
"default_headers": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_headers",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Headers"
},
"default_query": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_query",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Query"
},
"http_client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "http_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Http Client"
},
"max_retries": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 2,
"password": false,
"name": "max_retries",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Retries"
},
"max_tokens": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": true,
"name": "max_tokens",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Tokens"
},
"metadata": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "metadata",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Metadata"
},
"model_kwargs": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "model_kwargs",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Model Kwargs"
},
"model_name": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "gpt-3.5-turbo-0613",
"password": false,
"options": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k",
"gpt-4-1106-preview"
],
"name": "model_name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Model Name"
},
"n": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 1,
"password": false,
"name": "n",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "N"
},
"name": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Name"
},
"openai_api_base": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_api_base",
"display_name": "OpenAI API Base",
"advanced": false,
"dynamic": false,
"info": "\nThe base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.\n",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_api_key": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "",
"password": true,
"name": "openai_api_key",
"display_name": "OpenAI API Key",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_organization": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "openai_organization",
"display_name": "OpenAI Organization",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_proxy": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_proxy",
"display_name": "OpenAI Proxy",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"request_timeout": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "request_timeout",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Request Timeout"
},
"streaming": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": false,
"password": false,
"name": "streaming",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Streaming"
},
"tags": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tags",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Tags"
},
"temperature": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": 0.7,
"password": false,
"name": "temperature",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Temperature"
},
"tiktoken_model_name": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tiktoken_model_name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Tiktoken Model Name"
},
"verbose": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "verbose",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Verbose"
},
"_type": "ChatOpenAI"
},
"description": "[*Deprecated*] `OpenAI` Chat large language models API.",
"base_classes": [
"ChatOpenAI",
"BaseLanguageModel",
"BaseChatModel",
"BaseLLM"
],
"display_name": "ChatOpenAI",
"documentation": "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai",
"custom_fields": {},
"output_types": [],
"field_formatters": {},
"beta": false,
"official": false
},
"id": "ChatOpenAI-c4ddb",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 492.0105811305291,
"y": -2015.8972405291959
},
"dragging": false
}
],
"edges": [
{
"source": "CombineDocsChain-RCPNA",
"target": "RetrievalQA-x5nap",
"sourceHandle": "CombineDocsChain|CombineDocsChain-RCPNA|BaseCombineDocumentsChain|function",
"targetHandle": "BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap",
"id": "reactflow__edge-CombineDocsChain-RCPNACombineDocsChain|CombineDocsChain-RCPNA|BaseCombineDocumentsChain|function-RetrievalQA-x5napBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "Milvus-CWpae",
"target": "RetrievalQA-x5nap",
"sourceHandle": "Milvus|Milvus-CWpae|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|RetrievalQA-x5nap",
"id": "reactflow__edge-Milvus-CWpaeMilvus|Milvus-CWpae|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever-RetrievalQA-x5napBaseRetriever|retriever|RetrievalQA-x5nap",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "OpenAIProxyEmbedding-1771b",
"target": "Milvus-CWpae",
"sourceHandle": "OpenAIProxyEmbedding|OpenAIProxyEmbedding-1771b|Embeddings",
"targetHandle": "Embeddings|embedding|Milvus-CWpae",
"id": "reactflow__edge-OpenAIProxyEmbedding-1771bOpenAIProxyEmbedding|OpenAIProxyEmbedding-1771b|Embeddings-Milvus-CWpaeEmbeddings|embedding|Milvus-CWpae",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "CSVLoader-854c0",
"target": "Milvus-CWpae",
"sourceHandle": "CSVLoader|CSVLoader-854c0|Document",
"targetHandle": "Document|documents|Milvus-CWpae",
"id": "reactflow__edge-CSVLoader-854c0CSVLoader|CSVLoader-854c0|Document-Milvus-CWpaeDocument|documents|Milvus-CWpae",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "InputFileNode-e4363",
"target": "CSVLoader-854c0",
"sourceHandle": "InputFileNode|InputFileNode-e4363|fileNode",
"targetHandle": "fileNode|file_path|CSVLoader-854c0",
"id": "reactflow__edge-InputFileNode-e4363InputFileNode|InputFileNode-e4363|fileNode-CSVLoader-854c0fileNode|file_path|CSVLoader-854c0",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "ChatOpenAI-c4ddb",
"sourceHandle": "ChatOpenAI|ChatOpenAI-c4ddb|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM",
"target": "CombineDocsChain-RCPNA",
"targetHandle": "BaseLanguageModel|llm|CombineDocsChain-RCPNA",
"style": {
"stroke": "#555"
},
"className": "stroke-foreground stroke-connection",
"animated": true,
"id": "reactflow__edge-ChatOpenAI-c4ddbChatOpenAI|ChatOpenAI-c4ddb|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM-CombineDocsChain-RCPNABaseLanguageModel|llm|CombineDocsChain-RCPNA",
"selected": true
}
],
"viewport": {
"zoom": 1,
"x": 0,
"y": 0
}
},
"is_component": false,
"name": "",
"description": "",
"id": "dd09b",
"status": 0,
"write": false,
"guide_word": ""
}
}
}
},
{
"角色扮演": {
"id": "LLMChain-6df16",
"type": "LLMChain",
"node": {
"output_types": [],
"display_name": "角色扮演",
"documentation": "",
"base_classes": [
"Chain",
"LLMChain",
"function"
],
"description": "Chain to run queries against LLMs.",
"template": {
"tags_LLMChain-wRz0c": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "tags",
"proxy": {
"id": "LLMChain-wRz0c",
"field": "tags"
}
},
"verbose_LLMChain-wRz0c": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"value": false,
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "verbose",
"proxy": {
"id": "LLMChain-wRz0c",
"field": "verbose"
}
},
"metadata_LLMChain-wRz0c": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadata",
"proxy": {
"id": "LLMChain-wRz0c",
"field": "metadata"
}
},
"callbacks_LLMChain-wRz0c": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "callbacks",
"proxy": {
"id": "LLMChain-wRz0c",
"field": "callbacks"
}
},
"input_node_LLMChain-wRz0c": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question",
"proxy": {
"id": "LLMChain-wRz0c",
"field": "input_node"
}
},
"llm_kwargs_LLMChain-wRz0c": {
"l2": false,
"info": "",
"list": false,
"name": "llm_kwargs",
"show": false,
"type": "code",
"l2_name": "llm_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "llm_kwargs",
"proxy": {
"id": "LLMChain-wRz0c",
"field": "llm_kwargs"
}
},
"output_key_LLMChain-wRz0c": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "text",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "output_key",
"proxy": {
"id": "LLMChain-wRz0c",
"field": "output_key"
}
},
"output_parser_LLMChain-wRz0c": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": false,
"type": "BaseLLMOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_parser",
"proxy": {
"id": "LLMChain-wRz0c",
"field": "output_parser"
}
},
"return_final_only_LLMChain-wRz0c": {
"l2": false,
"info": "",
"list": false,
"name": "return_final_only",
"show": false,
"type": "bool",
"value": true,
"l2_name": "return_final_only",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "return_final_only",
"proxy": {
"id": "LLMChain-wRz0c",
"field": "return_final_only"
}
},
"input_PromptTemplate-ZoUVT": {
"info": "",
"list": false,
"name": "input",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser"
],
"placeholder": "",
"display_name": "input",
"proxy": {
"id": "PromptTemplate-ZoUVT",
"field": "input"
}
},
"template_PromptTemplate-ZoUVT": {
"l2": false,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "System:\n你将扮演一个科技公司的面试官,面试者是一名产品经理,提出 3 个犀利的问题。\n请注意:\n- 每次只问一个问题\n- 面试者回答问题后请简短点评一下,然后问下一个问题,不要试图纠正候选人的错误;\n- 如果你认为用户连续几次回答的都不对,就少问一点;\n- 问完最后一个问题后,你可以问这样一个问题:上一份工作为什么离职?用户回答该问题后,请表示理解与支持,并停止与面试者的对话。若面试者继续说话你可以礼貌拒绝。\n\n以下是你们的对话记录\n\n{chat_history}\n\n面试者:{input}\n\n你的回答:",
"l2_name": "template",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "template",
"proxy": {
"id": "PromptTemplate-ZoUVT",
"field": "template"
}
},
"chat_history_PromptTemplate-ZoUVT": {
"info": "",
"list": false,
"name": "chat_history",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser"
],
"placeholder": "",
"display_name": "chat_history",
"proxy": {
"id": "PromptTemplate-ZoUVT",
"field": "chat_history"
}
},
"output_parser_PromptTemplate-ZoUVT": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": false,
"type": "BaseOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_parser",
"proxy": {
"id": "PromptTemplate-ZoUVT",
"field": "output_parser"
}
},
"input_variables_PromptTemplate-ZoUVT": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"chat_history",
"input"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_variables",
"proxy": {
"id": "PromptTemplate-ZoUVT",
"field": "input_variables"
}
},
"template_format_PromptTemplate-ZoUVT": {
"l2": false,
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "str",
"value": "f-string",
"l2_name": "template_format",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "template_format",
"proxy": {
"id": "PromptTemplate-ZoUVT",
"field": "template_format"
}
},
"partial_variables_PromptTemplate-ZoUVT": {
"l2": false,
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"l2_name": "partial_variables",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "partial_variables",
"proxy": {
"id": "PromptTemplate-ZoUVT",
"field": "partial_variables"
}
},
"validate_template_PromptTemplate-ZoUVT": {
"l2": false,
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": true,
"l2_name": "validate_template",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "validate_template",
"proxy": {
"id": "PromptTemplate-ZoUVT",
"field": "validate_template"
}
},
"ai_prefix_ConversationBufferMemory-lI5Pt": {
"l2": false,
"info": "",
"list": false,
"name": "ai_prefix",
"show": false,
"type": "str",
"value": "AI",
"l2_name": "ai_prefix",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "ai_prefix",
"proxy": {
"id": "ConversationBufferMemory-lI5Pt",
"field": "ai_prefix"
}
},
"input_key_ConversationBufferMemory-lI5Pt": {
"l2": false,
"info": "The variable to be used as Chat Input when more than one variable is available.",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "input_key",
"proxy": {
"id": "ConversationBufferMemory-lI5Pt",
"field": "input_key"
}
},
"memory_key_ConversationBufferMemory-lI5Pt": {
"l2": false,
"info": "",
"list": false,
"name": "memory_key",
"show": true,
"type": "str",
"value": "chat_history",
"l2_name": "memory_key",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "memory_key",
"proxy": {
"id": "ConversationBufferMemory-lI5Pt",
"field": "memory_key"
}
},
"output_key_ConversationBufferMemory-lI5Pt": {
"l2": false,
"info": "The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_key",
"proxy": {
"id": "ConversationBufferMemory-lI5Pt",
"field": "output_key"
}
},
"chat_memory_ConversationBufferMemory-lI5Pt": {
"l2": false,
"info": "",
"list": false,
"name": "chat_memory",
"show": true,
"type": "BaseChatMessageHistory",
"l2_name": "chat_memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "chat_memory",
"proxy": {
"id": "ConversationBufferMemory-lI5Pt",
"field": "chat_memory"
}
},
"human_prefix_ConversationBufferMemory-lI5Pt": {
"l2": false,
"info": "",
"list": false,
"name": "human_prefix",
"show": false,
"type": "str",
"value": "Human",
"l2_name": "human_prefix",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "human_prefix",
"proxy": {
"id": "ConversationBufferMemory-lI5Pt",
"field": "human_prefix"
}
},
"return_messages_ConversationBufferMemory-lI5Pt": {
"l2": false,
"info": "",
"list": false,
"name": "return_messages",
"show": true,
"type": "bool",
"l2_name": "return_messages",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "return_messages",
"proxy": {
"id": "ConversationBufferMemory-lI5Pt",
"field": "return_messages"
}
},
"callbacks_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "callbacks",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"list": true,
"file_path": "",
"display_name": "Callbacks",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "callbacks"
}
},
"async_client_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "async_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Async Client",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "async_client"
}
},
"cache_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": true,
"file_path": "",
"password": false,
"name": "cache",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"display_name": "Cache",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "cache"
}
},
"client_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Client",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "client"
}
},
"default_headers_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_headers",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Headers",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "default_headers"
}
},
"default_query_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_query",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Query",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "default_query"
}
},
"http_client_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "http_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Http Client",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "http_client"
}
},
"max_retries_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 2,
"password": false,
"name": "max_retries",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Retries",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "max_retries"
}
},
"max_tokens_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": true,
"name": "max_tokens",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Tokens",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "max_tokens"
},
"value": ""
},
"metadata_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "metadata",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Metadata",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "metadata"
}
},
"model_kwargs_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "model_kwargs",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Model Kwargs",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "model_kwargs"
}
},
"model_name_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "gpt-3.5-turbo-0613",
"password": false,
"options": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k",
"gpt-4-1106-preview"
],
"name": "model_name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Model Name",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "model_name"
}
},
"n_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 1,
"password": false,
"name": "n",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "N",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "n"
}
},
"name_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Name",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "name"
}
},
"openai_api_base_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_api_base",
"display_name": "OpenAI API Base",
"advanced": true,
"dynamic": false,
"info": "\nThe base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.\n",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "openai_api_base"
}
},
"openai_api_key_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "",
"password": true,
"name": "openai_api_key",
"display_name": "OpenAI API Key",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "openai_api_key"
}
},
"openai_organization_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "openai_organization",
"display_name": "OpenAI Organization",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "openai_organization"
}
},
"openai_proxy_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_proxy",
"display_name": "OpenAI Proxy",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "openai_proxy"
}
},
"request_timeout_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "request_timeout",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Request Timeout",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "request_timeout"
}
},
"streaming_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": false,
"password": false,
"name": "streaming",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Streaming",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "streaming"
}
},
"tags_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tags",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Tags",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "tags"
}
},
"temperature_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": 0.7,
"password": false,
"name": "temperature",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Temperature",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "temperature"
}
},
"tiktoken_model_name_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tiktoken_model_name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Tiktoken Model Name",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "tiktoken_model_name"
}
},
"verbose_ChatOpenAI-1a993": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "verbose",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Verbose",
"proxy": {
"id": "ChatOpenAI-1a993",
"field": "verbose"
}
}
},
"flow": {
"data": {
"nodes": [
{
"width": 384,
"height": 316,
"id": "LLMChain-wRz0c",
"type": "genericNode",
"position": {
"x": 1452.9429776850677,
"y": -1823.729943530931
},
"data": {
"id": "LLMChain-wRz0c",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "tags"
},
"_type": "LLMChain",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": ""
},
"prompt": {
"l2": false,
"info": "",
"list": false,
"name": "prompt",
"show": true,
"type": "BasePromptTemplate",
"l2_name": "prompt",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"value": false,
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "verbose"
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadata"
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "callbacks"
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"llm_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "llm_kwargs",
"show": false,
"type": "code",
"l2_name": "llm_kwargs",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "llm_kwargs"
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "text",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "output_key"
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": false,
"type": "BaseLLMOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_parser"
},
"return_final_only": {
"l2": false,
"info": "",
"list": false,
"name": "return_final_only",
"show": false,
"type": "bool",
"value": true,
"l2_name": "return_final_only",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "return_final_only"
}
},
"description": "Chain to run queries against LLMs.",
"base_classes": [
"Chain",
"LLMChain",
"function"
],
"display_name": "LLMChain",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/foundational/llm_chain"
},
"type": "LLMChain",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 1452.9429776850677,
"y": -1823.729943530931
},
"dragging": false
},
{
"width": 384,
"height": 418,
"id": "PromptTemplate-ZoUVT",
"type": "genericNode",
"position": {
"x": 679.2448826071954,
"y": -1404.485160984465
},
"data": {
"id": "PromptTemplate-ZoUVT",
"node": {
"name": "",
"template": {
"_type": "PromptTemplate",
"input": {
"info": "",
"list": false,
"name": "input",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser"
],
"placeholder": "",
"display_name": "input"
},
"template": {
"l2": false,
"info": "",
"list": false,
"name": "template",
"show": true,
"type": "prompt",
"value": "System:\n你将扮演一个科技公司的面试官,面试者是一名产品经理,提出 3 个犀利的问题。\n请注意:\n- 每次只问一个问题\n- 面试者回答问题后请简短点评一下,然后问下一个问题,不要试图纠正候选人的错误;\n- 如果你认为用户连续几次回答的都不对,就少问一点;\n- 问完最后一个问题后,你可以问这样一个问题:上一份工作为什么离职?用户回答该问题后,请表示理解与支持,并停止与面试者的对话。若面试者继续说话你可以礼貌拒绝。\n\n以下是你们的对话记录\n\n{chat_history}\n\n面试者:{input}\n\n你的回答:",
"l2_name": "template",
"advanced": false,
"password": false,
"required": true,
"multiline": true,
"placeholder": "",
"display_name": "template"
},
"chat_history": {
"info": "",
"list": false,
"name": "chat_history",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": true,
"input_types": [
"Document",
"BaseOutputParser"
],
"placeholder": "",
"display_name": "chat_history"
},
"output_parser": {
"l2": false,
"info": "",
"list": false,
"name": "output_parser",
"show": false,
"type": "BaseOutputParser",
"l2_name": "output_parser",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_parser"
},
"input_variables": {
"l2": false,
"info": "",
"list": true,
"name": "input_variables",
"show": false,
"type": "str",
"value": [
"chat_history",
"input"
],
"l2_name": "input_variables",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_variables"
},
"template_format": {
"l2": false,
"info": "",
"list": false,
"name": "template_format",
"show": false,
"type": "str",
"value": "f-string",
"l2_name": "template_format",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "template_format"
},
"partial_variables": {
"l2": false,
"info": "",
"list": false,
"name": "partial_variables",
"show": false,
"type": "code",
"l2_name": "partial_variables",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "partial_variables"
},
"validate_template": {
"l2": false,
"info": "",
"list": false,
"name": "validate_template",
"show": false,
"type": "bool",
"value": true,
"l2_name": "validate_template",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "validate_template"
}
},
"description": "Schema to represent a prompt for an LLM.",
"base_classes": [
"PromptTemplate",
"StringPromptTemplate",
"BasePromptTemplate"
],
"display_name": "PromptTemplate",
"output_types": [],
"custom_fields": {
"template": [
"chat_history",
"input"
]
},
"documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
"field_formatters": {
"formatters": {
"openai_api_key": {}
},
"base_formatters": {
"dict": {},
"list": {},
"show": {},
"union": {},
"kwargs": {},
"default": {},
"headers": {},
"optional": {},
"password": {},
"multiline": {},
"model_fields": {
"MODEL_DICT": {
"OpenAI": [
"text-davinci-003",
"text-davinci-002",
"text-curie-001",
"text-babbage-001",
"text-ada-001"
],
"Anthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
],
"ChatOpenAI": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k"
],
"ChatAnthropic": [
"claude-v1",
"claude-v1-100k",
"claude-instant-v1",
"claude-instant-v1-100k",
"claude-v1.3",
"claude-v1.3-100k",
"claude-v1.2",
"claude-v1.0",
"claude-instant-v1.1",
"claude-instant-v1.1-100k",
"claude-instant-v1.0"
]
}
},
"dict_code_file": {}
}
}
},
"type": "PromptTemplate",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 679.2448826071954,
"y": -1404.485160984465
},
"dragging": false
},
{
"width": 384,
"height": 526,
"id": "ConversationBufferMemory-lI5Pt",
"type": "genericNode",
"position": {
"x": 275.26369845498505,
"y": -1967.2256382433638
},
"data": {
"id": "ConversationBufferMemory-lI5Pt",
"node": {
"template": {
"_type": "ConversationBufferMemory",
"ai_prefix": {
"l2": false,
"info": "",
"list": false,
"name": "ai_prefix",
"show": false,
"type": "str",
"value": "AI",
"l2_name": "ai_prefix",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "ai_prefix"
},
"input_key": {
"l2": false,
"info": "The variable to be used as Chat Input when more than one variable is available.",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "",
"l2_name": "input_key",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "input_key"
},
"memory_key": {
"l2": false,
"info": "",
"list": false,
"name": "memory_key",
"show": true,
"type": "str",
"value": "chat_history",
"l2_name": "memory_key",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "memory_key"
},
"output_key": {
"l2": false,
"info": "The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "",
"l2_name": "output_key",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "output_key"
},
"chat_memory": {
"l2": false,
"info": "",
"list": false,
"name": "chat_memory",
"show": true,
"type": "BaseChatMessageHistory",
"l2_name": "chat_memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "chat_memory"
},
"human_prefix": {
"l2": false,
"info": "",
"list": false,
"name": "human_prefix",
"show": false,
"type": "str",
"value": "Human",
"l2_name": "human_prefix",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "human_prefix"
},
"return_messages": {
"l2": false,
"info": "",
"list": false,
"name": "return_messages",
"show": true,
"type": "bool",
"l2_name": "return_messages",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "return_messages"
}
},
"description": "Buffer for storing conversation memory.",
"base_classes": [
"BaseChatMemory",
"ConversationBufferMemory",
"BaseMemory"
],
"display_name": "ConversationBufferMemory",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/memory/how_to/buffer"
},
"type": "ConversationBufferMemory",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 275.26369845498505,
"y": -1967.2256382433638
},
"dragging": false
},
{
"width": 384,
"height": 606,
"id": "ChatOpenAI-1a993",
"type": "genericNode",
"position": {
"x": 737.6920763029101,
"y": -2366.8833957378292
},
"data": {
"type": "ChatOpenAI",
"node": {
"template": {
"callbacks": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "callbacks",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"list": true,
"file_path": "",
"display_name": "Callbacks"
},
"async_client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "async_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Async Client"
},
"cache": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": true,
"file_path": "",
"password": false,
"name": "cache",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"display_name": "Cache"
},
"client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Client"
},
"default_headers": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_headers",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Headers"
},
"default_query": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_query",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Query"
},
"http_client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "http_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Http Client"
},
"max_retries": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 2,
"password": false,
"name": "max_retries",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Retries"
},
"max_tokens": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": true,
"name": "max_tokens",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Tokens"
},
"metadata": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "metadata",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Metadata"
},
"model_kwargs": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "model_kwargs",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Model Kwargs"
},
"model_name": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "gpt-3.5-turbo-0613",
"password": false,
"options": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k",
"gpt-4-1106-preview"
],
"name": "model_name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Model Name"
},
"n": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 1,
"password": false,
"name": "n",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "N"
},
"name": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Name"
},
"openai_api_base": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_api_base",
"display_name": "OpenAI API Base",
"advanced": false,
"dynamic": false,
"info": "\nThe base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.\n",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_api_key": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "",
"password": true,
"name": "openai_api_key",
"display_name": "OpenAI API Key",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_organization": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "openai_organization",
"display_name": "OpenAI Organization",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_proxy": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_proxy",
"display_name": "OpenAI Proxy",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"request_timeout": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "request_timeout",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Request Timeout"
},
"streaming": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": false,
"password": false,
"name": "streaming",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Streaming"
},
"tags": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tags",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Tags"
},
"temperature": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": 0.7,
"password": false,
"name": "temperature",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Temperature"
},
"tiktoken_model_name": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tiktoken_model_name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Tiktoken Model Name"
},
"verbose": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "verbose",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Verbose"
},
"_type": "ChatOpenAI"
},
"description": "[*Deprecated*] `OpenAI` Chat large language models API.",
"base_classes": [
"ChatOpenAI",
"BaseLanguageModel",
"BaseChatModel",
"BaseLLM"
],
"display_name": "ChatOpenAI",
"documentation": "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai",
"custom_fields": {},
"output_types": [],
"field_formatters": {},
"beta": false,
"official": false
},
"id": "ChatOpenAI-1a993",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 737.6920763029101,
"y": -2366.8833957378292
},
"dragging": false
}
],
"edges": [
{
"source": "PromptTemplate-ZoUVT",
"target": "LLMChain-wRz0c",
"sourceHandle": "PromptTemplate|PromptTemplate-ZoUVT|PromptTemplate|StringPromptTemplate|BasePromptTemplate",
"targetHandle": "BasePromptTemplate|prompt|LLMChain-wRz0c",
"id": "reactflow__edge-PromptTemplate-ZoUVTPromptTemplate|PromptTemplate-ZoUVT|PromptTemplate|StringPromptTemplate|BasePromptTemplate-LLMChain-wRz0cBasePromptTemplate|prompt|LLMChain-wRz0c",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "ConversationBufferMemory-lI5Pt",
"target": "LLMChain-wRz0c",
"sourceHandle": "ConversationBufferMemory|ConversationBufferMemory-lI5Pt|BaseChatMemory|ConversationBufferMemory|BaseMemory",
"targetHandle": "BaseMemory|memory|LLMChain-wRz0c",
"id": "reactflow__edge-ConversationBufferMemory-lI5PtConversationBufferMemory|ConversationBufferMemory-lI5Pt|BaseChatMemory|ConversationBufferMemory|BaseMemory-LLMChain-wRz0cBaseMemory|memory|LLMChain-wRz0c",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "ChatOpenAI-1a993",
"sourceHandle": "ChatOpenAI|ChatOpenAI-1a993|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM",
"target": "LLMChain-wRz0c",
"targetHandle": "BaseLanguageModel|llm|LLMChain-wRz0c",
"style": {
"stroke": "#555"
},
"className": "stroke-foreground stroke-connection",
"animated": true,
"id": "reactflow__edge-ChatOpenAI-1a993ChatOpenAI|ChatOpenAI-1a993|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM-LLMChain-wRz0cBaseLanguageModel|llm|LLMChain-wRz0c",
"selected": true
}
],
"viewport": {
"zoom": 1,
"x": 0,
"y": 0
}
},
"is_component": false,
"name": "",
"description": "",
"id": "5b80b",
"status": 0,
"write": false,
"guide_word": ""
}
}
}
},
{
"输入网址进行问答": {
"id": "RetrievalQA-222c1",
"type": "RetrievalQA",
"node": {
"output_types": [],
"display_name": "输入网址进行问答",
"documentation": "",
"base_classes": [
"RetrievalQA",
"Chain",
"BaseRetrievalQA",
"function"
],
"description": "Chain for question-answering against an index.",
"template": {
"token_max_CombineDocsChain-RCPNA": {
"l2": false,
"info": "当前只对stuff 生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"l2_name": "token_max",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max",
"proxy": {
"id": "CombineDocsChain-RCPNA",
"field": "token_max"
}
},
"chain_type_CombineDocsChain-RCPNA": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "chain_type",
"proxy": {
"id": "CombineDocsChain-RCPNA",
"field": "chain_type"
}
},
"drop_old_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "drop_old",
"proxy": {
"id": "Milvus-CWpae",
"field": "drop_old"
}
},
"metadatas_Milvus-CWpae": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadatas",
"proxy": {
"id": "Milvus-CWpae",
"field": "metadatas"
}
},
"index_params_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "index_params",
"proxy": {
"id": "Milvus-CWpae",
"field": "index_params"
}
},
"search_kwargs_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": false,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_kwargs",
"proxy": {
"id": "Milvus-CWpae",
"field": "search_kwargs"
}
},
"search_params_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_params",
"proxy": {
"id": "Milvus-CWpae",
"field": "search_params"
}
},
"collection_name_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "选择知识库",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"collection_id": "",
"display_name": "collection_name",
"proxy": {
"id": "Milvus-CWpae",
"field": "collection_name"
}
},
"connection_args_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": false,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "connection_args",
"proxy": {
"id": "Milvus-CWpae",
"field": "connection_args"
}
},
"consistency_level_Milvus-CWpae": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "consistency_level",
"proxy": {
"id": "Milvus-CWpae",
"field": "consistency_level"
}
},
"tags_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "tags",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "tags"
}
},
"memory_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "memory",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "memory"
}
},
"verbose_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "verbose",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "verbose"
}
},
"metadata_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadata",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "metadata"
}
},
"callbacks_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "callbacks",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "callbacks"
}
},
"input_key_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_key",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "input_key"
}
},
"input_node_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "input_node"
}
},
"output_key_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "output_key",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "output_key"
}
},
"return_source_documents_RetrievalQA-x5nap": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "return_source_documents",
"proxy": {
"id": "RetrievalQA-x5nap",
"field": "return_source_documents"
}
},
"metadata_WebBaseLoader-af6db": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"value": "{}",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Metadata",
"proxy": {
"id": "WebBaseLoader-af6db",
"field": "metadata"
}
},
"web_path_WebBaseLoader-af6db": {
"l2": true,
"info": "",
"list": false,
"name": "web_path",
"show": true,
"type": "str",
"value": "",
"l2_name": "网址",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Web Page",
"proxy": {
"id": "WebBaseLoader-af6db",
"field": "web_path"
}
},
"proxy_url_OpenAIProxyEmbedding-1771b": {
"info": "",
"list": false,
"name": "proxy_url",
"show": false,
"type": "str",
"value": "",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "http://43.133.35.137:8080",
"display_name": "proxy_url",
"proxy": {
"id": "OpenAIProxyEmbedding-1771b",
"field": "proxy_url"
}
},
"callbacks_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "callbacks",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"list": true,
"file_path": "",
"display_name": "Callbacks",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "callbacks"
}
},
"async_client_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "async_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Async Client",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "async_client"
}
},
"cache_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": true,
"file_path": "",
"password": false,
"name": "cache",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"display_name": "Cache",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "cache"
}
},
"client_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Client",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "client"
}
},
"default_headers_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_headers",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Headers",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "default_headers"
}
},
"default_query_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_query",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Query",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "default_query"
}
},
"http_client_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "http_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Http Client",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "http_client"
}
},
"max_retries_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 2,
"password": false,
"name": "max_retries",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Retries",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "max_retries"
}
},
"max_tokens_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": true,
"name": "max_tokens",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Tokens",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "max_tokens"
},
"value": ""
},
"metadata_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "metadata",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Metadata",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "metadata"
}
},
"model_kwargs_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "model_kwargs",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Model Kwargs",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "model_kwargs"
}
},
"model_name_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "gpt-3.5-turbo-0613",
"password": false,
"options": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k",
"gpt-4-1106-preview"
],
"name": "model_name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Model Name",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "model_name"
}
},
"n_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 1,
"password": false,
"name": "n",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "N",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "n"
}
},
"name_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Name",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "name"
}
},
"openai_api_base_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_api_base",
"display_name": "OpenAI API Base",
"advanced": true,
"dynamic": false,
"info": "\nThe base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.\n",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "openai_api_base"
}
},
"openai_api_key_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "",
"password": true,
"name": "openai_api_key",
"display_name": "OpenAI API Key",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "openai_api_key"
}
},
"openai_organization_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "openai_organization",
"display_name": "OpenAI Organization",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "openai_organization"
}
},
"openai_proxy_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_proxy",
"display_name": "OpenAI Proxy",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "openai_proxy"
}
},
"request_timeout_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "request_timeout",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Request Timeout",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "request_timeout"
}
},
"streaming_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": false,
"password": false,
"name": "streaming",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Streaming",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "streaming"
}
},
"tags_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tags",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Tags",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "tags"
}
},
"temperature_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": 0.7,
"password": false,
"name": "temperature",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Temperature",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "temperature"
}
},
"tiktoken_model_name_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tiktoken_model_name",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Tiktoken Model Name",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "tiktoken_model_name"
}
},
"verbose_ChatOpenAI-04157": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "verbose",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Verbose",
"proxy": {
"id": "ChatOpenAI-04157",
"field": "verbose"
}
}
},
"flow": {
"data": {
"nodes": [
{
"width": 384,
"height": 376,
"id": "CombineDocsChain-RCPNA",
"type": "genericNode",
"position": {
"x": 1020.2314763495577,
"y": -2443.3442844414917
},
"data": {
"id": "CombineDocsChain-RCPNA",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "load_qa_chain",
"token_max": {
"l2": false,
"info": "当前只对stuff 生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"l2_name": "token_max",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max"
},
"chain_type": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "chain_type"
}
},
"description": "Load question answering chain.",
"base_classes": [
"BaseCombineDocumentsChain",
"function"
],
"display_name": "CombineDocsChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "CombineDocsChain",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 1020.2314763495577,
"y": -2443.3442844414917
},
"dragging": false
},
{
"width": 384,
"height": 346,
"id": "Milvus-CWpae",
"type": "genericNode",
"position": {
"x": 1032.922985028084,
"y": -1900.7640809510517
},
"data": {
"id": "Milvus-CWpae",
"node": {
"l2_name": "知识库",
"template": {
"_type": "Milvus",
"drop_old": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "drop_old"
},
"documents": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadatas"
},
"index_params": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "index_params"
},
"search_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_kwargs"
},
"search_params": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_params"
},
"collection_name": {
"l2": false,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "选择知识库",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"collection_id": "",
"display_name": "collection_name"
},
"connection_args": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "connection_args"
},
"consistency_level": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "consistency_level"
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"Milvus",
"VectorStore",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 1032.922985028084,
"y": -1900.7640809510517
},
"dragging": false
},
{
"width": 384,
"height": 316,
"id": "RetrievalQA-x5nap",
"type": "genericNode",
"position": {
"x": 1696.5027865067518,
"y": -2280.471637513691
},
"data": {
"id": "RetrievalQA-x5nap",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "tags"
},
"_type": "RetrievalQA",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "memory"
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "verbose"
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadata"
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "callbacks"
},
"input_key": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_key"
},
"retriever": {
"l2": false,
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "retriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "output_key"
},
"combine_documents_chain": {
"l2": false,
"info": "",
"list": false,
"name": "combine_documents_chain",
"show": true,
"type": "BaseCombineDocumentsChain",
"l2_name": "combine_documents_chain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "return_source_documents"
}
},
"description": "Chain for question-answering against an index.",
"base_classes": [
"RetrievalQA",
"Chain",
"BaseRetrievalQA",
"function"
],
"display_name": "RetrievalQA",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"
},
"type": "RetrievalQA",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 1696.5027865067518,
"y": -2280.471637513691
},
"dragging": false
},
{
"width": 384,
"height": 356,
"id": "WebBaseLoader-af6db",
"type": "genericNode",
"position": {
"x": 508.27376400644664,
"y": -1916.3544587452286
},
"data": {
"id": "WebBaseLoader-af6db",
"node": {
"l2_name": "输入网址",
"template": {
"_type": "WebBaseLoader",
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": true,
"type": "code",
"value": "{}",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Metadata"
},
"web_path": {
"l2": true,
"info": "",
"list": false,
"name": "web_path",
"show": true,
"type": "str",
"value": "",
"l2_name": "网址",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Web Page"
}
},
"description": "Load HTML pages using `urllib` and parse them with `BeautifulSoup'.",
"base_classes": [
"Document"
],
"display_name": "WebBaseLoader",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/web_base"
},
"type": "WebBaseLoader",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 508.27376400644664,
"y": -1916.3544587452286
},
"dragging": false
},
{
"width": 384,
"height": 172,
"id": "OpenAIProxyEmbedding-1771b",
"type": "genericNode",
"position": {
"x": 520.9704836522232,
"y": -1519.5819698147122
},
"data": {
"id": "OpenAIProxyEmbedding-1771b",
"node": {
"template": {
"_type": "proxy_embedding",
"proxy_url": {
"info": "",
"list": false,
"name": "proxy_url",
"show": false,
"type": "str",
"value": "",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "http://43.133.35.137:8080",
"display_name": "proxy_url"
}
},
"description": " 使用自建的embedding服务使用openai进行embed ",
"base_classes": [
"Embeddings"
],
"display_name": "OpenAIProxyEmbedding",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "OpenAIProxyEmbedding",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 520.9704836522232,
"y": -1519.5819698147122
},
"dragging": false
},
{
"width": 384,
"height": 606,
"id": "ChatOpenAI-04157",
"type": "genericNode",
"position": {
"x": 487.6734875953049,
"y": -2569.9027779626213
},
"data": {
"type": "ChatOpenAI",
"node": {
"template": {
"callbacks": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "callbacks",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"list": true,
"file_path": "",
"display_name": "Callbacks"
},
"async_client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "async_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Async Client"
},
"cache": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": true,
"file_path": "",
"password": false,
"name": "cache",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"display_name": "Cache"
},
"client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Client"
},
"default_headers": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_headers",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Headers"
},
"default_query": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "default_query",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Default Query"
},
"http_client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "http_client",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "Any",
"list": false,
"file_path": "",
"display_name": "Http Client"
},
"max_retries": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 2,
"password": false,
"name": "max_retries",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Retries"
},
"max_tokens": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": true,
"name": "max_tokens",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "Max Tokens"
},
"metadata": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "metadata",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Metadata"
},
"model_kwargs": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "model_kwargs",
"advanced": true,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "code",
"list": false,
"file_path": "",
"display_name": "Model Kwargs"
},
"model_name": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "gpt-3.5-turbo-0613",
"password": false,
"options": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k",
"gpt-4-1106-preview"
],
"name": "model_name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Model Name"
},
"n": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 1,
"password": false,
"name": "n",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "int",
"list": false,
"file_path": "",
"display_name": "N"
},
"name": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Name"
},
"openai_api_base": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_api_base",
"display_name": "OpenAI API Base",
"advanced": false,
"dynamic": false,
"info": "\nThe base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.\n",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_api_key": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "",
"password": true,
"name": "openai_api_key",
"display_name": "OpenAI API Key",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_organization": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "openai_organization",
"display_name": "OpenAI Organization",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"openai_proxy": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "openai_proxy",
"display_name": "OpenAI Proxy",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": ""
},
"request_timeout": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "request_timeout",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Request Timeout"
},
"streaming": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": false,
"password": false,
"name": "streaming",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Streaming"
},
"tags": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tags",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": true,
"file_path": "",
"display_name": "Tags"
},
"temperature": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": 0.7,
"password": false,
"name": "temperature",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "float",
"list": false,
"file_path": "",
"display_name": "Temperature"
},
"tiktoken_model_name": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "tiktoken_model_name",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "str",
"list": false,
"file_path": "",
"display_name": "Tiktoken Model Name"
},
"verbose": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "verbose",
"advanced": false,
"dynamic": false,
"info": "",
"title_case": true,
"model_config": {},
"type": "bool",
"list": false,
"file_path": "",
"display_name": "Verbose"
},
"_type": "ChatOpenAI"
},
"description": "[*Deprecated*] `OpenAI` Chat large language models API.",
"base_classes": [
"ChatOpenAI",
"BaseLanguageModel",
"BaseChatModel",
"BaseLLM"
],
"display_name": "ChatOpenAI",
"documentation": "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai",
"custom_fields": {},
"output_types": [],
"field_formatters": {},
"beta": false,
"official": false
},
"id": "ChatOpenAI-04157",
"value": null
},
"selected": true,
"positionAbsolute": {
"x": 487.6734875953049,
"y": -2569.9027779626213
},
"dragging": false
}
],
"edges": [
{
"source": "CombineDocsChain-RCPNA",
"target": "RetrievalQA-x5nap",
"sourceHandle": "CombineDocsChain|CombineDocsChain-RCPNA|BaseCombineDocumentsChain|function",
"targetHandle": "BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap",
"id": "reactflow__edge-CombineDocsChain-RCPNACombineDocsChain|CombineDocsChain-RCPNA|BaseCombineDocumentsChain|function-RetrievalQA-x5napBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-x5nap",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "Milvus-CWpae",
"target": "RetrievalQA-x5nap",
"sourceHandle": "Milvus|Milvus-CWpae|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|RetrievalQA-x5nap",
"id": "reactflow__edge-Milvus-CWpaeMilvus|Milvus-CWpae|Milvus|VectorStore|BaseRetriever|VectorStoreRetriever-RetrievalQA-x5napBaseRetriever|retriever|RetrievalQA-x5nap",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "WebBaseLoader-af6db",
"target": "Milvus-CWpae",
"sourceHandle": "WebBaseLoader|WebBaseLoader-af6db|Document",
"targetHandle": "Document|documents|Milvus-CWpae",
"id": "reactflow__edge-WebBaseLoader-af6dbWebBaseLoader|WebBaseLoader-af6db|Document-Milvus-CWpaeDocument|documents|Milvus-CWpae",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "OpenAIProxyEmbedding-1771b",
"target": "Milvus-CWpae",
"sourceHandle": "OpenAIProxyEmbedding|OpenAIProxyEmbedding-1771b|Embeddings",
"targetHandle": "Embeddings|embedding|Milvus-CWpae",
"id": "reactflow__edge-OpenAIProxyEmbedding-1771bOpenAIProxyEmbedding|OpenAIProxyEmbedding-1771b|Embeddings-Milvus-CWpaeEmbeddings|embedding|Milvus-CWpae",
"style": {
"stroke": "#555"
},
"className": "stroke-gray-900 ",
"animated": false,
"selected": true
},
{
"source": "ChatOpenAI-04157",
"sourceHandle": "ChatOpenAI|ChatOpenAI-04157|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM",
"target": "CombineDocsChain-RCPNA",
"targetHandle": "BaseLanguageModel|llm|CombineDocsChain-RCPNA",
"style": {
"stroke": "#555"
},
"className": "stroke-foreground stroke-connection",
"animated": true,
"id": "reactflow__edge-ChatOpenAI-04157ChatOpenAI|ChatOpenAI-04157|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM-CombineDocsChain-RCPNABaseLanguageModel|llm|CombineDocsChain-RCPNA",
"selected": true
}
],
"viewport": {
"zoom": 1,
"x": 0,
"y": 0
}
},
"is_component": false,
"name": "",
"description": "",
"id": "967b1",
"status": 0,
"write": false,
"guide_word": ""
}
}
}
},
{
"单文档问答": {
"id": "RetrievalQA-6a8ad",
"type": "InputFileNode",
"node": {
"output_types": [],
"display_name": "单文档问答",
"documentation": "",
"base_classes": [
"BaseRetrievalQA",
"RetrievalQA",
"Chain",
"function"
],
"description": "Chain for question-answering against an index.",
"template": {
"token_max_CombineDocsChain-Pud2p": {
"l2": false,
"info": "当前只对stuff 生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"l2_name": "token_max",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max",
"proxy": {
"id": "CombineDocsChain-Pud2p",
"field": "token_max"
}
},
"chain_type_CombineDocsChain-Pud2p": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "chain_type",
"proxy": {
"id": "CombineDocsChain-Pud2p",
"field": "chain_type"
}
},
"tags_RetrievalQA-qH6Mk": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "tags",
"proxy": {
"id": "RetrievalQA-qH6Mk",
"field": "tags"
}
},
"memory_RetrievalQA-qH6Mk": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "memory",
"proxy": {
"id": "RetrievalQA-qH6Mk",
"field": "memory"
}
},
"verbose_RetrievalQA-qH6Mk": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "verbose",
"proxy": {
"id": "RetrievalQA-qH6Mk",
"field": "verbose"
}
},
"metadata_RetrievalQA-qH6Mk": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadata",
"proxy": {
"id": "RetrievalQA-qH6Mk",
"field": "metadata"
}
},
"callbacks_RetrievalQA-qH6Mk": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "callbacks",
"proxy": {
"id": "RetrievalQA-qH6Mk",
"field": "callbacks"
}
},
"input_key_RetrievalQA-qH6Mk": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_key",
"proxy": {
"id": "RetrievalQA-qH6Mk",
"field": "input_key"
}
},
"input_node_RetrievalQA-qH6Mk": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question",
"proxy": {
"id": "RetrievalQA-qH6Mk",
"field": "input_node"
}
},
"output_key_RetrievalQA-qH6Mk": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "output_key",
"proxy": {
"id": "RetrievalQA-qH6Mk",
"field": "output_key"
}
},
"return_source_documents_RetrievalQA-qH6Mk": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "return_source_documents",
"proxy": {
"id": "RetrievalQA-qH6Mk",
"field": "return_source_documents"
}
},
"proxy_url_OpenAIProxyEmbedding-yvld7": {
"l2": false,
"info": "",
"list": false,
"name": "proxy_url",
"show": false,
"type": "str",
"value": "",
"l2_name": "proxy_url",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "http://43.133.35.137:8080",
"display_name": "proxy_url",
"proxy": {
"id": "OpenAIProxyEmbedding-yvld7",
"field": "proxy_url"
}
},
"file_path_InputFileNode-jdLkB": {
"l2": false,
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "file",
"value": "",
"l2_name": "file_path",
"advanced": true,
"password": false,
"required": false,
"suffixes": [
".html",
".md",
".txt",
".jpg",
".png",
".jpeg",
".csv",
".doc",
".docx",
".pdf",
".ppt",
".pptx",
".xlsx",
".tiff"
],
"fileTypes": [
"html",
"md",
"txt",
"jpg",
"png",
"jpeg",
"csv",
"doc",
"docx",
"pdf",
"ppt",
"pptx",
"tiff",
"xlsx"
],
"file_path": null,
"multiline": false,
"placeholder": "",
"display_name": "输入内容",
"proxy": {
"id": "InputFileNode-jdLkB",
"field": "file_path"
}
},
"drop_old_Milvus-T3kRH": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "drop_old",
"proxy": {
"id": "Milvus-T3kRH",
"field": "drop_old"
}
},
"metadatas_Milvus-T3kRH": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadatas",
"proxy": {
"id": "Milvus-T3kRH",
"field": "metadatas"
}
},
"index_params_Milvus-T3kRH": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "index_params",
"proxy": {
"id": "Milvus-T3kRH",
"field": "index_params"
}
},
"search_kwargs_Milvus-T3kRH": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": false,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_kwargs",
"proxy": {
"id": "Milvus-T3kRH",
"field": "search_kwargs"
}
},
"search_params_Milvus-T3kRH": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_params",
"proxy": {
"id": "Milvus-T3kRH",
"field": "search_params"
}
},
"collection_name_Milvus-T3kRH": {
"l2": false,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "collection_name",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "collection_name",
"collection_id": "",
"proxy": {
"id": "Milvus-T3kRH",
"field": "collection_name"
}
},
"connection_args_Milvus-T3kRH": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": false,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "connection_args",
"proxy": {
"id": "Milvus-T3kRH",
"field": "connection_args"
}
},
"consistency_level_Milvus-T3kRH": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "consistency_level",
"proxy": {
"id": "Milvus-T3kRH",
"field": "consistency_level"
}
},
"metadata_ElemUnstructuredLoaderV0-LAGXM": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"value": "{}",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Metadata",
"proxy": {
"id": "ElemUnstructuredLoaderV0-LAGXM",
"field": "metadata"
}
},
"unstructured_api_url_ElemUnstructuredLoaderV0-LAGXM": {
"info": "",
"list": false,
"name": "unstructured_api_url",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": true,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "unstructured_api_url",
"proxy": {
"id": "ElemUnstructuredLoaderV0-LAGXM",
"field": "unstructured_api_url"
}
},
"chunk_size_RecursiveCharacterTextSplitter-a7fc9": {
"info": "",
"list": false,
"name": "chunk_size",
"show": true,
"type": "int",
"value": 1000,
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Chunk Size",
"proxy": {
"id": "RecursiveCharacterTextSplitter-a7fc9",
"field": "chunk_size"
}
},
"separators_RecursiveCharacterTextSplitter-a7fc9": {
"info": "",
"list": false,
"name": "separators",
"show": true,
"type": "str",
"value": "\\n\\n",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Separator",
"proxy": {
"id": "RecursiveCharacterTextSplitter-a7fc9",
"field": "separators"
}
},
"chunk_overlap_RecursiveCharacterTextSplitter-a7fc9": {
"info": "",
"list": false,
"name": "chunk_overlap",
"show": true,
"type": "int",
"value": 200,
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Chunk Overlap",
"proxy": {
"id": "RecursiveCharacterTextSplitter-a7fc9",
"field": "chunk_overlap"
}
},
"separator_type_RecursiveCharacterTextSplitter-a7fc9": {
"info": "",
"list": true,
"name": "separator_type",
"show": true,
"type": "str",
"value": "Text",
"options": [
"Text",
"cobol",
"cpp",
"csharp",
"go",
"html",
"java",
"js",
"kotlin",
"latex",
"markdown",
"php",
"proto",
"python",
"rst",
"ruby",
"rust",
"scala",
"sol",
"swift",
"ts"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Separator Type",
"proxy": {
"id": "RecursiveCharacterTextSplitter-a7fc9",
"field": "separator_type"
}
},
"n_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "n",
"show": false,
"type": "int",
"value": 1,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "N",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "n"
}
},
"name_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "name"
}
},
"tags_ChatOpenAI-1579b": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "tags"
}
},
"cache_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "cache",
"show": false,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "cache"
}
},
"client_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "client",
"show": false,
"type": "Any",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Client",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "client"
}
},
"verbose_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "verbose"
}
},
"metadata_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "metadata"
}
},
"callbacks_ChatOpenAI-1579b": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "callbacks"
}
},
"streaming_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "streaming",
"show": false,
"type": "bool",
"value": false,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "streaming"
}
},
"max_tokens_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "max_tokens",
"show": true,
"type": "int",
"dynamic": false,
"advanced": true,
"password": true,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Max Tokens",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "max_tokens"
},
"value": ""
},
"model_name_ChatOpenAI-1579b": {
"info": "",
"list": true,
"name": "model_name",
"show": true,
"type": "str",
"value": "gpt-3.5-turbo-0613",
"dynamic": false,
"options": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k",
"gpt-4-1106-preview"
],
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "model_name"
}
},
"http_client_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "http_client",
"show": false,
"type": "Any",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Http Client",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "http_client"
}
},
"max_retries_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "max_retries",
"show": false,
"type": "int",
"value": 2,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Max Retries",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "max_retries"
}
},
"temperature_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.7,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "temperature"
}
},
"async_client_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "async_client",
"show": false,
"type": "Any",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Async Client",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "async_client"
}
},
"model_kwargs_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "model_kwargs",
"show": false,
"type": "code",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Kwargs",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "model_kwargs"
}
},
"openai_proxy_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "openai_proxy",
"show": true,
"type": "str",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "OpenAI Proxy",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "openai_proxy"
}
},
"default_query_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "default_query",
"show": false,
"type": "code",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Default Query",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "default_query"
}
},
"openai_api_key_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "openai_api_key",
"show": true,
"type": "str",
"value": "",
"dynamic": false,
"advanced": true,
"password": true,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "OpenAI API Key",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "openai_api_key"
}
},
"default_headers_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "default_headers",
"show": false,
"type": "code",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Default Headers",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "default_headers"
}
},
"openai_api_base_ChatOpenAI-1579b": {
"info": "\nThe base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.\n",
"list": false,
"name": "openai_api_base",
"show": true,
"type": "str",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "OpenAI API Base",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "openai_api_base"
}
},
"request_timeout_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "request_timeout",
"show": false,
"type": "float",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Request Timeout",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "request_timeout"
}
},
"openai_organization_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "openai_organization",
"show": false,
"type": "str",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "OpenAI Organization",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "openai_organization"
}
},
"tiktoken_model_name_ChatOpenAI-1579b": {
"info": "",
"list": false,
"name": "tiktoken_model_name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tiktoken Model Name",
"model_config": {},
"proxy": {
"id": "ChatOpenAI-1579b",
"field": "tiktoken_model_name"
}
}
},
"flow": {
"data": {
"nodes": [
{
"width": 384,
"height": 376,
"id": "CombineDocsChain-Pud2p",
"data": {
"id": "CombineDocsChain-Pud2p",
"node": {
"template": {
"llm": {
"l2": false,
"info": "",
"list": false,
"name": "llm",
"show": true,
"type": "BaseLanguageModel",
"l2_name": "llm",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "LLM"
},
"_type": "load_qa_chain",
"token_max": {
"l2": false,
"info": "当前只对stuff 生效",
"list": false,
"name": "token_max",
"show": true,
"type": "int",
"value": -1,
"l2_name": "token_max",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "token_max"
},
"chain_type": {
"l2": false,
"info": "",
"list": true,
"name": "chain_type",
"show": true,
"type": "str",
"value": "stuff",
"l2_name": "chain_type",
"options": [
"stuff",
"map_reduce",
"map_rerank",
"refine"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "chain_type"
}
},
"description": "Load question answering chain.",
"base_classes": [
"BaseCombineDocumentsChain",
"function"
],
"display_name": "CombineDocsChain",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "CombineDocsChain",
"value": null
},
"type": "genericNode",
"dragging": false,
"position": {
"x": 1196.5168428585357,
"y": -1921.6230996659683
},
"selected": true,
"positionAbsolute": {
"x": 1196.5168428585357,
"y": -1921.6230996659683
}
},
{
"width": 384,
"height": 316,
"id": "RetrievalQA-qH6Mk",
"data": {
"id": "RetrievalQA-qH6Mk",
"node": {
"template": {
"tags": {
"l2": false,
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"l2_name": "tags",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "tags"
},
"_type": "RetrievalQA",
"memory": {
"l2": false,
"info": "",
"list": false,
"name": "memory",
"show": true,
"type": "BaseMemory",
"l2_name": "memory",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "memory"
},
"verbose": {
"l2": false,
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"l2_name": "verbose",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "verbose"
},
"metadata": {
"l2": false,
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"l2_name": "metadata",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadata"
},
"callbacks": {
"l2": false,
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain.callbacks.base.BaseCallbackHandler",
"l2_name": "callbacks",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "callbacks"
},
"input_key": {
"l2": false,
"info": "",
"list": false,
"name": "input_key",
"show": true,
"type": "str",
"value": "query",
"l2_name": "input_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "input_key"
},
"retriever": {
"l2": false,
"info": "",
"list": false,
"name": "retriever",
"show": true,
"type": "BaseRetriever",
"l2_name": "retriever",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"input_node": {
"l2": false,
"info": "",
"list": false,
"name": "input_node",
"show": true,
"type": "input",
"l2_name": "input_node",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Preset Question"
},
"output_key": {
"l2": false,
"info": "",
"list": false,
"name": "output_key",
"show": true,
"type": "str",
"value": "result",
"l2_name": "output_key",
"advanced": true,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "output_key"
},
"combine_documents_chain": {
"l2": false,
"info": "",
"list": false,
"name": "combine_documents_chain",
"show": true,
"type": "BaseCombineDocumentsChain",
"l2_name": "combine_documents_chain",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"return_source_documents": {
"l2": false,
"info": "",
"list": false,
"name": "return_source_documents",
"show": true,
"type": "bool",
"value": true,
"l2_name": "return_source_documents",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "return_source_documents"
}
},
"description": "Chain for question-answering against an index.",
"base_classes": [
"BaseRetrievalQA",
"RetrievalQA",
"Chain",
"function"
],
"display_name": "RetrievalQA",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa"
},
"type": "RetrievalQA",
"value": null
},
"type": "genericNode",
"dragging": false,
"position": {
"x": 1872.7881530157297,
"y": -1758.750452738167
},
"selected": true,
"positionAbsolute": {
"x": 1872.7881530157297,
"y": -1758.750452738167
}
},
{
"width": 384,
"height": 172,
"id": "OpenAIProxyEmbedding-yvld7",
"data": {
"id": "OpenAIProxyEmbedding-yvld7",
"node": {
"template": {
"_type": "proxy_embedding",
"proxy_url": {
"l2": false,
"info": "",
"list": false,
"name": "proxy_url",
"show": false,
"type": "str",
"value": "",
"l2_name": "proxy_url",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "http://43.133.35.137:8080",
"display_name": "proxy_url"
}
},
"description": " 使用自建的embedding服务使用openai进行embed ",
"base_classes": [
"Embeddings"
],
"display_name": "OpenAIProxyEmbedding",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "OpenAIProxyEmbedding",
"value": null
},
"type": "genericNode",
"dragging": false,
"position": {
"x": 559.1495072972474,
"y": -790.6410754898252
},
"selected": true,
"positionAbsolute": {
"x": 559.1495072972474,
"y": -790.6410754898252
}
},
{
"width": 384,
"height": 254,
"id": "InputFileNode-jdLkB",
"data": {
"id": "InputFileNode-jdLkB",
"node": {
"template": {
"_type": "InputFileNode",
"file_path": {
"l2": false,
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "file",
"value": "",
"l2_name": "file_path",
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".html",
".md",
".txt",
".jpg",
".png",
".jpeg",
".csv",
".doc",
".docx",
".pdf",
".ppt",
".pptx",
".xlsx",
".tiff"
],
"fileTypes": [
"html",
"md",
"txt",
"jpg",
"png",
"jpeg",
"csv",
"doc",
"docx",
"pdf",
"ppt",
"pptx",
"tiff",
"xlsx"
],
"file_path": null,
"multiline": false,
"placeholder": "",
"display_name": "输入内容"
}
},
"description": "输入节点,用来自动对接输入",
"base_classes": [
"fileNode"
],
"display_name": "InputFileNode",
"output_types": [],
"custom_fields": {},
"documentation": ""
},
"type": "InputFileNode",
"value": null
},
"type": "genericNode",
"dragging": false,
"position": {
"x": -93.84570908264766,
"y": -1503.8309966323186
},
"selected": true,
"positionAbsolute": {
"x": -93.84570908264766,
"y": -1503.8309966323186
}
},
{
"width": 384,
"height": 346,
"id": "Milvus-T3kRH",
"data": {
"id": "Milvus-T3kRH",
"node": {
"template": {
"_type": "Milvus",
"drop_old": {
"l2": false,
"info": "",
"list": false,
"name": "drop_old",
"show": false,
"type": "bool",
"value": false,
"l2_name": "drop_old",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "drop_old"
},
"documents": {
"l2": false,
"info": "",
"list": true,
"name": "documents",
"show": true,
"type": "Document",
"l2_name": "documents",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "Documents"
},
"embedding": {
"l2": false,
"info": "",
"list": false,
"name": "embedding",
"show": true,
"type": "Embeddings",
"l2_name": "embedding",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Embedding"
},
"metadatas": {
"l2": false,
"info": "",
"list": true,
"name": "metadatas",
"show": false,
"type": "code",
"l2_name": "metadatas",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "metadatas"
},
"index_params": {
"l2": false,
"info": "",
"list": false,
"name": "index_params",
"show": false,
"type": "code",
"l2_name": "index_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "index_params"
},
"search_kwargs": {
"l2": false,
"info": "",
"list": false,
"name": "search_kwargs",
"show": true,
"type": "code",
"value": "{}",
"l2_name": "search_kwargs",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_kwargs"
},
"search_params": {
"l2": false,
"info": "",
"list": false,
"name": "search_params",
"show": false,
"type": "code",
"l2_name": "search_params",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "search_params"
},
"collection_name": {
"l2": false,
"info": "",
"list": false,
"name": "collection_name",
"show": true,
"type": "str",
"value": "",
"l2_name": "collection_name",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "collection_name",
"collection_id": ""
},
"connection_args": {
"l2": false,
"info": "",
"list": false,
"name": "connection_args",
"show": true,
"type": "code",
"value": "",
"l2_name": "connection_args",
"advanced": true,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "connection_args"
},
"consistency_level": {
"l2": false,
"info": "",
"list": false,
"name": "consistency_level",
"show": false,
"type": "str",
"value": "Session",
"l2_name": "consistency_level",
"advanced": false,
"password": false,
"required": false,
"multiline": false,
"placeholder": "",
"display_name": "consistency_level"
}
},
"description": "Create a Milvus collection, indexes it with HNSW, and insert data.",
"base_classes": [
"VectorStore",
"Milvus",
"BaseRetriever",
"VectorStoreRetriever"
],
"display_name": "Milvus",
"output_types": [],
"custom_fields": {},
"documentation": "http://192.168.106.116:8030"
},
"type": "Milvus",
"value": null
},
"type": "genericNode",
"dragging": false,
"position": {
"x": 1329.9391213745507,
"y": -1099.88185650176
},
"selected": true,
"positionAbsolute": {
"x": 1329.9391213745507,
"y": -1099.88185650176
}
},
{
"width": 384,
"height": 392,
"id": "ElemUnstructuredLoaderV0-LAGXM",
"data": {
"id": "ElemUnstructuredLoaderV0-LAGXM",
"node": {
"template": {
"_type": "ElemUnstructuredLoaderV0",
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": true,
"type": "code",
"value": "{}",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Metadata"
},
"file_path": {
"info": "",
"list": false,
"name": "file_path",
"show": true,
"type": "fileNode",
"value": "",
"advanced": false,
"password": false,
"required": false,
"suffixes": [
".html",
".md",
".txt",
".jpg",
".png",
".jpeg",
".csv",
".doc",
".docx",
".pdf",
".ppt",
".pptx",
".xlsx",
".tiff"
],
"fileTypes": [
"html",
"md",
"txt",
"jpg",
"png",
"jpeg",
"csv",
"doc",
"docx",
"pdf",
"ppt",
"pptx",
"tiff",
"xlsx"
],
"multiline": false,
"placeholder": ""
},
"unstructured_api_url": {
"info": "",
"list": false,
"name": "unstructured_api_url",
"show": true,
"type": "str",
"value": "",
"advanced": false,
"password": true,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "unstructured_api_url"
}
},
"description": "Loads a PDF with pypdf and chunks at character level. dummy version",
"base_classes": [
"Document"
],
"display_name": "ElemUnstructuredLoaderV0",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": ""
},
"type": "ElemUnstructuredLoaderV0",
"value": null
},
"type": "genericNode",
"dragging": false,
"position": {
"x": 344.1888604075044,
"y": -1515.628333041525
},
"selected": true,
"positionAbsolute": {
"x": 344.1888604075044,
"y": -1515.628333041525
}
},
{
"width": 384,
"height": 540,
"id": "RecursiveCharacterTextSplitter-a7fc9",
"data": {
"id": "RecursiveCharacterTextSplitter-a7fc9",
"node": {
"template": {
"_type": "RecursiveCharacterTextSplitter",
"documents": {
"info": "",
"list": false,
"name": "documents",
"show": true,
"type": "Document",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": ""
},
"chunk_size": {
"info": "",
"list": false,
"name": "chunk_size",
"show": true,
"type": "int",
"value": 1000,
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Chunk Size"
},
"separators": {
"info": "",
"list": false,
"name": "separators",
"show": true,
"type": "str",
"value": "\\n\\n",
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Separator"
},
"chunk_overlap": {
"info": "",
"list": false,
"name": "chunk_overlap",
"show": true,
"type": "int",
"value": 200,
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Chunk Overlap"
},
"separator_type": {
"info": "",
"list": true,
"name": "separator_type",
"show": true,
"type": "str",
"value": "Text",
"options": [
"Text",
"cobol",
"cpp",
"csharp",
"go",
"html",
"java",
"js",
"kotlin",
"latex",
"markdown",
"php",
"proto",
"python",
"rst",
"ruby",
"rust",
"scala",
"sol",
"swift",
"ts"
],
"advanced": false,
"password": false,
"required": true,
"multiline": false,
"placeholder": "",
"display_name": "Separator Type"
}
},
"description": "Splitting text by recursively look at characters.",
"base_classes": [
"Document"
],
"display_name": "RecursiveCharacterTextSplitter",
"output_types": [
"Document"
],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/recursive_text_splitter"
},
"type": "RecursiveCharacterTextSplitter",
"value": null
},
"type": "genericNode",
"dragging": false,
"position": {
"x": 813.860681674371,
"y": -1470.0417352310492
},
"selected": true,
"positionAbsolute": {
"x": 813.860681674371,
"y": -1470.0417352310492
}
},
{
"width": 384,
"height": 606,
"id": "ChatOpenAI-1579b",
"data": {
"id": "ChatOpenAI-1579b",
"node": {
"beta": false,
"official": false,
"template": {
"n": {
"info": "",
"list": false,
"name": "n",
"show": false,
"type": "int",
"value": 1,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "N",
"model_config": {}
},
"name": {
"info": "",
"list": false,
"name": "name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Name",
"model_config": {}
},
"tags": {
"info": "",
"list": true,
"name": "tags",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tags",
"model_config": {}
},
"_type": "ChatOpenAI",
"cache": {
"info": "",
"list": false,
"name": "cache",
"show": false,
"type": "bool",
"value": true,
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Cache",
"model_config": {}
},
"client": {
"info": "",
"list": false,
"name": "client",
"show": false,
"type": "Any",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Client",
"model_config": {}
},
"verbose": {
"info": "",
"list": false,
"name": "verbose",
"show": false,
"type": "bool",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Verbose",
"model_config": {}
},
"metadata": {
"info": "",
"list": false,
"name": "metadata",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Metadata",
"model_config": {}
},
"callbacks": {
"info": "",
"list": true,
"name": "callbacks",
"show": false,
"type": "langchain_core.callbacks.base.BaseCallbackHandler",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Callbacks",
"model_config": {}
},
"streaming": {
"info": "",
"list": false,
"name": "streaming",
"show": false,
"type": "bool",
"value": false,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Streaming",
"model_config": {}
},
"max_tokens": {
"info": "",
"list": false,
"name": "max_tokens",
"show": true,
"type": "int",
"dynamic": false,
"advanced": true,
"password": true,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Max Tokens",
"model_config": {}
},
"model_name": {
"info": "",
"list": true,
"name": "model_name",
"show": true,
"type": "str",
"value": "gpt-3.5-turbo-0613",
"dynamic": false,
"options": [
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k-0613",
"gpt-3.5-turbo-16k",
"gpt-4-0613",
"gpt-4-32k-0613",
"gpt-4",
"gpt-4-32k",
"gpt-4-1106-preview"
],
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Name",
"model_config": {}
},
"http_client": {
"info": "",
"list": false,
"name": "http_client",
"show": false,
"type": "Any",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Http Client",
"model_config": {}
},
"max_retries": {
"info": "",
"list": false,
"name": "max_retries",
"show": false,
"type": "int",
"value": 2,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Max Retries",
"model_config": {}
},
"temperature": {
"info": "",
"list": false,
"name": "temperature",
"show": true,
"type": "float",
"value": 0.7,
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Temperature",
"model_config": {}
},
"async_client": {
"info": "",
"list": false,
"name": "async_client",
"show": false,
"type": "Any",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Async Client",
"model_config": {}
},
"model_kwargs": {
"info": "",
"list": false,
"name": "model_kwargs",
"show": true,
"type": "code",
"dynamic": false,
"advanced": true,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Model Kwargs",
"model_config": {}
},
"openai_proxy": {
"info": "",
"list": false,
"name": "openai_proxy",
"show": true,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "OpenAI Proxy",
"model_config": {}
},
"default_query": {
"info": "",
"list": false,
"name": "default_query",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Default Query",
"model_config": {}
},
"openai_api_key": {
"info": "",
"list": false,
"name": "openai_api_key",
"show": true,
"type": "str",
"value": "",
"dynamic": false,
"advanced": false,
"password": true,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "OpenAI API Key",
"model_config": {}
},
"default_headers": {
"info": "",
"list": false,
"name": "default_headers",
"show": false,
"type": "code",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Default Headers",
"model_config": {}
},
"openai_api_base": {
"info": "\nThe base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.\n",
"list": false,
"name": "openai_api_base",
"show": true,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "OpenAI API Base",
"model_config": {}
},
"request_timeout": {
"info": "",
"list": false,
"name": "request_timeout",
"show": false,
"type": "float",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Request Timeout",
"model_config": {}
},
"openai_organization": {
"info": "",
"list": false,
"name": "openai_organization",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "OpenAI Organization",
"model_config": {}
},
"tiktoken_model_name": {
"info": "",
"list": false,
"name": "tiktoken_model_name",
"show": false,
"type": "str",
"dynamic": false,
"advanced": false,
"password": false,
"required": false,
"file_path": "",
"multiline": false,
"title_case": true,
"placeholder": "",
"display_name": "Tiktoken Model Name",
"model_config": {}
}
},
"description": "[*Deprecated*] `OpenAI` Chat large language models API.",
"base_classes": [
"ChatOpenAI",
"BaseLanguageModel",
"BaseChatModel",
"BaseLLM"
],
"display_name": "ChatOpenAI",
"output_types": [],
"custom_fields": {},
"documentation": "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai",
"field_formatters": {}
},
"type": "ChatOpenAI",
"value": null
},
"type": "genericNode",
"dragging": false,
"position": {
"x": 611.2229342454906,
"y": -2218.8216244014975
},
"selected": true,
"positionAbsolute": {
"x": 611.2229342454906,
"y": -2218.8216244014975
}
}
],
"edges": [
{
"id": "reactflow__edge-CombineDocsChain-Pud2pCombineDocsChain|CombineDocsChain-Pud2p|BaseCombineDocumentsChain|function-RetrievalQA-qH6MkBaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-qH6Mk",
"style": {
"stroke": "#555"
},
"source": "CombineDocsChain-Pud2p",
"target": "RetrievalQA-qH6Mk",
"animated": false,
"selected": true,
"className": "stroke-gray-900 ",
"sourceHandle": "CombineDocsChain|CombineDocsChain-Pud2p|BaseCombineDocumentsChain|function",
"targetHandle": "BaseCombineDocumentsChain|combine_documents_chain|RetrievalQA-qH6Mk"
},
{
"id": "reactflow__edge-Milvus-T3kRHMilvus|Milvus-T3kRH|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever-RetrievalQA-qH6MkBaseRetriever|retriever|RetrievalQA-qH6Mk",
"style": {
"stroke": "#555"
},
"source": "Milvus-T3kRH",
"target": "RetrievalQA-qH6Mk",
"animated": false,
"selected": true,
"className": "stroke-gray-900 ",
"sourceHandle": "Milvus|Milvus-T3kRH|VectorStore|Milvus|BaseRetriever|VectorStoreRetriever",
"targetHandle": "BaseRetriever|retriever|RetrievalQA-qH6Mk"
},
{
"id": "reactflow__edge-OpenAIProxyEmbedding-yvld7OpenAIProxyEmbedding|OpenAIProxyEmbedding-yvld7|Embeddings-Milvus-T3kRHEmbeddings|embedding|Milvus-T3kRH",
"style": {
"stroke": "#555"
},
"source": "OpenAIProxyEmbedding-yvld7",
"target": "Milvus-T3kRH",
"animated": false,
"selected": true,
"className": "stroke-gray-900 ",
"sourceHandle": "OpenAIProxyEmbedding|OpenAIProxyEmbedding-yvld7|Embeddings",
"targetHandle": "Embeddings|embedding|Milvus-T3kRH"
},
{
"id": "reactflow__edge-InputFileNode-jdLkBInputFileNode|InputFileNode-jdLkB|fileNode-ElemUnstructuredLoaderV0-LAGXMfileNode|file_path|ElemUnstructuredLoaderV0-LAGXM",
"style": {
"stroke": "#555"
},
"source": "InputFileNode-jdLkB",
"target": "ElemUnstructuredLoaderV0-LAGXM",
"animated": false,
"selected": true,
"className": "stroke-gray-900 ",
"sourceHandle": "InputFileNode|InputFileNode-jdLkB|fileNode",
"targetHandle": "fileNode|file_path|ElemUnstructuredLoaderV0-LAGXM"
},
{
"id": "reactflow__edge-ElemUnstructuredLoaderV0-LAGXMElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-LAGXM|Document-RecursiveCharacterTextSplitter-a7fc9Document|documents|RecursiveCharacterTextSplitter-a7fc9",
"style": {
"stroke": "#555"
},
"source": "ElemUnstructuredLoaderV0-LAGXM",
"target": "RecursiveCharacterTextSplitter-a7fc9",
"animated": false,
"selected": true,
"className": "stroke-gray-900 ",
"sourceHandle": "ElemUnstructuredLoaderV0|ElemUnstructuredLoaderV0-LAGXM|Document",
"targetHandle": "Document|documents|RecursiveCharacterTextSplitter-a7fc9"
},
{
"id": "reactflow__edge-RecursiveCharacterTextSplitter-a7fc9RecursiveCharacterTextSplitter|RecursiveCharacterTextSplitter-a7fc9|Document-Milvus-T3kRHDocument|documents|Milvus-T3kRH",
"style": {
"stroke": "#555"
},
"source": "RecursiveCharacterTextSplitter-a7fc9",
"target": "Milvus-T3kRH",
"animated": false,
"selected": true,
"className": "stroke-gray-900 ",
"sourceHandle": "RecursiveCharacterTextSplitter|RecursiveCharacterTextSplitter-a7fc9|Document",
"targetHandle": "Document|documents|Milvus-T3kRH"
},
{
"id": "reactflow__edge-ChatOpenAI-1579bChatOpenAI|ChatOpenAI-1579b|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM-CombineDocsChain-Pud2pBaseLanguageModel|llm|CombineDocsChain-Pud2p",
"style": {
"stroke": "#555"
},
"source": "ChatOpenAI-1579b",
"target": "CombineDocsChain-Pud2p",
"animated": true,
"className": "stroke-foreground stroke-connection",
"sourceHandle": "ChatOpenAI|ChatOpenAI-1579b|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM",
"targetHandle": "BaseLanguageModel|llm|CombineDocsChain-Pud2p",
"selected": true
}
],
"viewport": {
"zoom": 1,
"x": 0,
"y": 0
}
},
"is_component": false,
"name": "",
"description": "",
"id": "4d071",
"status": 0,
"write": false,
"guide_word": ""
}
}
}
}
]
================================================
FILE: src/backend/bisheng/telemetry/README.md
================================================
# 数据看板模块
================================================
FILE: src/backend/bisheng/telemetry/__init__.py
================================================
================================================
FILE: src/backend/bisheng/telemetry/domain/__init__.py
================================================
================================================
FILE: src/backend/bisheng/telemetry/domain/mid_table/__init__.py
================================================
================================================
FILE: src/backend/bisheng/telemetry/domain/mid_table/app_increment.py
================================================
from bisheng.common.constants.enums.telemetry import ApplicationTypeEnum
from bisheng.telemetry.domain.mid_table.base import BaseMidTable, BaseRecord
class AppIncrementRecord(BaseRecord):
app_id: str
app_name: str
app_type: ApplicationTypeEnum
class AppIncrement(BaseMidTable):
_index_name = 'mid_app_increment'
_mappings = {
"app_id": {"type": "keyword", "fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}},
"app_name": {"type": "keyword", "fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}},
"app_type": {"type": "keyword", "fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}},
}
================================================
FILE: src/backend/bisheng/telemetry/domain/mid_table/base.py
================================================
from typing import Dict, Any, List, Optional
from elasticsearch import Elasticsearch, AsyncElasticsearch, exceptions as es_exceptions, helpers
from loguru import logger
from pydantic import BaseModel, Field
from bisheng.common.schemas.telemetry.base_telemetry_schema import UserContext
from bisheng.common.services import telemetry_service
from bisheng.core.search.elasticsearch.manager import get_es_connection, get_es_connection_sync
common_properties = {
"user_id": {"type": "keyword",
"fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}},
"user_name": {"type": "keyword",
"fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}},
"user_group_infos": {
"type": "nested",
"properties": {
"user_group_id": {"type": "keyword",
"fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}},
"user_group_name": {"type": "keyword",
"fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}}
}
},
"user_role_infos": {
"type": "nested",
"properties": {
"role_id": {"type": "keyword",
"fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}},
"role_name": {"type": "keyword", "fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}},
"group_id": {"type": "keyword",
"fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}},
}
},
"timestamp": {"type": "date", "format": "strict_date_optional_time||epoch_second"},
}
common_settings = {
"analysis": {
"tokenizer": {
"single_char_tokenizer": {
"type": "ngram",
"min_gram": 1,
"max_gram": 1,
"token_chars": [
"letter",
"digit",
"punctuation",
"symbol"
]
}
},
"analyzer": {
"single_char_analyzer": {
"type": "custom",
"tokenizer": "single_char_tokenizer"
}
}
}
}
class BaseRecord(UserContext):
timestamp: int
es_id: Optional[str] = Field(default=None)
class BaseMidTable(BaseModel):
_index_name: str = ""
_mappings: Dict[str, Any] = {}
_es_client: AsyncElasticsearch = None
_es_client_sync: Elasticsearch = None
def __init__(self, **kwargs: Any):
super().__init__(**kwargs)
self.ensure_index_exists_sync()
async def ensure_index_exists(self) -> None:
if not self._index_name:
return None
if not self._es_client:
self._es_client = await get_es_connection()
mappings = self._mappings | common_properties
try:
exists = await self._es_client.indices.exists(index=self._index_name)
if not exists:
# Incoming body Applications Mapping
await self._es_client.indices.create(index=self._index_name,
body={"settings": common_settings,
"mappings": {"properties": mappings}})
except es_exceptions.RequestError as e:
# Ignore on concurrency creation "resource_already_exists_exception"
if "resource_already_exists_exception" not in str(e):
logger.error(f"Failed to create ES index: {e}")
raise e
return None
def ensure_index_exists_sync(self) -> None:
if not self._index_name:
return None
if not self._es_client_sync:
self._es_client_sync = get_es_connection_sync()
mappings = self._mappings | common_properties
try:
exists = self._es_client_sync.indices.exists(index=self._index_name)
if not exists:
# Incoming body Applications Mapping
self._es_client_sync.indices.create(index=self._index_name,
body={"settings": common_settings,
"mappings": {"properties": mappings}})
except es_exceptions.RequestError as e:
# Ignore on concurrency creation "resource_already_exists_exception"
if "resource_already_exists_exception" not in str(e):
logger.error(f"Failed to create ES index: {e}")
raise e
return None
def get_latest_record_time_sync(self) -> int | None:
""" Time to fetch the last record """
query = {
"size": 1,
"sort": [{"timestamp": {"order": "desc"}}],
"_source": ["timestamp"]
}
response = self._es_client_sync.search(index=self._index_name, body=query)
hits = response.get('hits', {}).get('hits', [])
if hits:
latest_time = hits[0]['_source']['timestamp']
return latest_time
return None
def insert_records_sync(self, records: List[BaseRecord]) -> None:
""" Batch Insert Record """
actions = []
for rec in records:
action = {
"_index": self._index_name,
"_source": rec.model_dump(exclude={"es_id"}),
}
if rec.es_id is not None:
action["_id"] = rec.es_id
actions.append(action)
helpers.bulk(self._es_client_sync, actions)
def search_from_base_sync(self, **kwargs) -> List[Dict[str, Any]]:
""" Synchronize search methods """
response = self._es_client_sync.search(index=telemetry_service.index_name, **kwargs)
return response.get('hits', {}).get('hits', [])
================================================
FILE: src/backend/bisheng/telemetry/domain/mid_table/knowledge_increment.py
================================================
from bisheng.telemetry.domain.mid_table.base import BaseMidTable, BaseRecord
class KnowledgeIncrementRecord(BaseRecord):
knowledge_id: int
knowledge_name: str
knowledge_type: int
class KnowledgeIncrement(BaseMidTable):
_index_name = 'mid_knowledge_increment'
_mappings = {
"knowledge_id": {"type": "keyword", "fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}},
"knowledge_name": {"type": "keyword", "fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}},
"knowledge_type": {"type": "keyword", "fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}},
}
================================================
FILE: src/backend/bisheng/telemetry/domain/mid_table/user_increment.py
================================================
from typing import Dict, Any
from .base import BaseMidTable, BaseRecord
class UserIncrementRecord(BaseRecord):
pass
class UserIncrement(BaseMidTable):
_index_name: str = 'mid_user_increment'
_mappings: Dict[str, Any] = {}
================================================
FILE: src/backend/bisheng/telemetry/domain/mid_table/user_interact.py
================================================
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum
from bisheng.telemetry.domain.mid_table.base import BaseMidTable, BaseRecord
class UserInteractRecord(BaseRecord):
message_id: int
event_id: str
interact_type: str
app_id: str
app_name: str
class UserInteract(BaseMidTable):
_index_name = 'mid_user_interact_dtl'
_mappings = {
"message_id": {"type": "keyword", "fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}},
"event_id": {"type": "keyword", "fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}},
"interact_type": {"type": "keyword", "fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}},
"app_id": {"type": "keyword", "fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}},
"app_name": {"type": "keyword", "fields": {"text": {"type": "text", "analyzer": "single_char_analyzer"}}},
}
def get_records_by_time_range_sync(self, start_time: int, end_time: int, page: int = 1, page_size: int = 1000):
query = {
"bool": {
"filter": [
{"term": {"event_type": {"value": BaseTelemetryTypeEnum.MESSAGE_FEEDBACK.value}}},
{"range": {"timestamp": {"gte": start_time * 1000, "lt": end_time * 1000}}}
]
}
}
return self.search_from_base_sync(body={"query": query, "from": (page - 1) * page_size, "size": page_size})
================================================
FILE: src/backend/bisheng/template/__init__.py
================================================
================================================
FILE: src/backend/bisheng/template/field/__init__.py
================================================
================================================
FILE: src/backend/bisheng/template/field/base.py
================================================
from typing import Any, Callable, Optional, Union
from bisheng.field_typing.range_spec import RangeSpec
from pydantic import BaseModel, ConfigDict, Field
class TemplateField(BaseModel):
model_config = ConfigDict()
field_type: str = Field(default='str', serialization_alias='type')
"""The type of field this is. Default is a string."""
required: bool = False
"""Specifies if the field is required. Defaults to False."""
placeholder: str = ''
"""A placeholder string for the field. Default is an empty string."""
is_list: bool = Field(default=False, serialization_alias='list')
"""Defines if the field is a list. Default is False."""
show: bool = True
"""Should the field be shown. Defaults to True."""
multiline: bool = False
"""Defines if the field will allow the user to open a text editor. Default is False."""
value: Any = ''
"""The value of the field. Default is None."""
suffixes: list[str] = []
fileTypes: list[str] = []
file_types: list[str] = Field(default_factory=list, serialization_alias='fileTypes')
"""List of file types associated with the field. Default is an empty list. (duplicate)"""
file_path: Optional[str] = ''
"""The file path of the field if it is a file. Defaults to None."""
password: bool = False
"""Specifies if the field is a password. Defaults to False."""
options: Optional[Union[list[str], Callable]] = None
"""List of options for the field. Only used when is_list=True. Default is an empty list."""
name: Optional[str] = None
"""Name of the field. Default is an empty string."""
display_name: Optional[str] = None
"""Display name of the field. Defaults to None."""
advanced: bool = False
"""Specifies if the field will an advanced parameter (hidden). Defaults to False."""
input_types: Optional[list[str]] = None
"""List of input types for the handle when the field has more than one type. Default is an empty list."""
dynamic: bool = False
"""Specifies if the field is dynamic. Defaults to False."""
info: Optional[str] = ''
"""Additional information about the field to be shown in the tooltip. Defaults to an empty string."""
refresh: Optional[bool] = None
"""Specifies if the field should be refreshed. Defaults to False."""
range_spec: Optional[RangeSpec] = Field(default=None, serialization_alias='rangeSpec')
"""Range specification for the field. Defaults to None."""
title_case: bool = True
"""Specifies if the field should be displayed in title case. Defaults to True."""
def to_dict(self):
result = self.dict()
for key in list(result.keys()):
if result[key] is None or result[key] == []:
del result[key]
result['type'] = result.pop('field_type')
result['list'] = result.pop('is_list')
if result.get('field_type') == 'float' and self.range_spec is None:
self.range_spec = RangeSpec()
if result.get('file_types'):
result['fileTypes'] = result.pop('file_types')
if self.field_type == 'file':
result['file_path'] = self.file_path
else:
result['file_path'] = ''
if result.get('display_name') is None:
value = self.name.replace('_', ' ')
if self.title_case:
value = value.title()
result['display_name'] = value
return result
================================================
FILE: src/backend/bisheng/template/frontend_node/__init__.py
================================================
from bisheng.template.frontend_node import (agents, chains, documentloaders, embeddings,
input_output, llms, memories, prompts, textsplitters,
tools, vectorstores)
__all__ = [
'agents',
'chains',
'embeddings',
'memories',
'tools',
'llms',
'prompts',
'vectorstores',
'documentloaders',
'textsplitters',
'input_output',
# 'output_parsers'
]
================================================
FILE: src/backend/bisheng/template/frontend_node/agents.py
================================================
from typing import Optional
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
from bisheng.template.template.base import Template
from langchain.agents import types
NON_CHAT_AGENTS = {
agent_type: agent_class
for agent_type, agent_class in types.AGENT_TO_CLASS.items() if 'chat' not in agent_type.value
}
class AgentFrontendNode(FrontendNode):
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
if field.name in ['suffix', 'prefix', 'format_instructions', 'input_variables']:
field.show = False if name == 'ChatglmFunctionsAgent' else True
if field.name == 'Tools' and name == 'ZeroShotAgent':
field.field_type = 'BaseTool'
field.is_list = True
if 'path' == field.name and name == 'CSVAgent':
field.field_type = 'file'
field.required = True
field.show = True
field.value = ''
field.suffixes = ['.csv']
field.fileTypes = ['csv']
if name == 'OpenAIToolsAgent' and field.name in ['human_prompt', 'system_message']:
field.show = True
def add_extra_fields(self) -> None:
self.template.fields.append(
TemplateField(
field_type='BaseChatMemory',
required=False,
show=True,
name='memory',
advanced=False,
))
class SQLAgentNode(FrontendNode):
name: str = 'SQLAgent'
template: Template = Template(
type_name='sql_agent',
fields=[
TemplateField(
field_type='str',
required=True,
placeholder='',
is_list=False,
show=True,
multiline=False,
value='',
name='database_uri',
),
TemplateField(
field_type='BaseLanguageModel',
required=True,
show=True,
name='llm',
display_name='LLM',
),
],
)
description: str = """Construct an SQL agent from an LLM and tools."""
base_classes: list[str] = ['AgentExecutor', 'function']
def to_dict(self):
return super().to_dict()
class VectorStoreRouterAgentNode(FrontendNode):
name: str = 'VectorStoreRouterAgent'
template: Template = Template(
type_name='vectorstorerouter_agent',
fields=[
TemplateField(
field_type='VectorStoreRouterToolkit',
required=True,
show=True,
name='vectorstoreroutertoolkit',
display_name='Vector Store Router Toolkit',
),
TemplateField(
field_type='BaseLanguageModel',
required=True,
show=True,
name='llm',
display_name='LLM',
),
],
)
description: str = """Construct an agent from a Vector Store Router."""
base_classes: list[str] = ['AgentExecutor', 'function']
def to_dict(self):
return super().to_dict()
class VectorStoreAgentNode(FrontendNode):
name: str = 'VectorStoreAgent'
template: Template = Template(
type_name='vectorstore_agent',
fields=[
TemplateField(
field_type='VectorStoreInfo',
required=True,
show=True,
name='vectorstoreinfo',
display_name='Vector Store Info',
),
TemplateField(
field_type='BaseLanguageModel',
required=True,
show=True,
name='llm',
display_name='LLM',
),
],
)
description: str = """Construct an agent from a Vector Store."""
base_classes: list[str] = ['AgentExecutor', 'function']
def to_dict(self):
return super().to_dict()
class SQLDatabaseNode(FrontendNode):
name: str = 'SQLDatabase'
template: Template = Template(
type_name='sql_database',
fields=[
TemplateField(
field_type='str',
required=True,
is_list=False,
show=True,
multiline=False,
value='',
name='uri',
),
],
)
description: str = """SQLAlchemy wrapper around a database."""
base_classes: list[str] = ['SQLDatabase']
def to_dict(self):
return super().to_dict()
class InitializeAgentNode(FrontendNode):
name: str = 'AgentInitializer'
display_name: str = 'AgentInitializer'
template: Template = Template(
type_name='initialize_agent',
fields=[
TemplateField(
field_type='str',
required=True,
is_list=True,
show=True,
multiline=False,
options=list(NON_CHAT_AGENTS.keys()),
value=list(NON_CHAT_AGENTS.keys())[0],
name='agent',
advanced=False,
),
TemplateField(
field_type='BaseChatMemory',
required=False,
show=True,
name='memory',
advanced=False,
),
TemplateField(
field_type='Tool',
required=False,
show=True,
name='tools',
is_list=True,
advanced=False,
),
TemplateField(
field_type='BaseLanguageModel',
required=True,
show=True,
name='llm',
display_name='LLM',
advanced=False,
),
],
)
description: str = """Construct a zero shot agent from an LLM and tools."""
base_classes: list[str] = ['AgentExecutor', 'function', 'Chain']
def to_dict(self):
return super().to_dict()
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
# do nothing and don't return anything
pass
class JsonAgentNode(FrontendNode):
name: str = 'JsonAgent'
template: Template = Template(
type_name='json_agent',
fields=[
TemplateField(
field_type='BaseToolkit',
required=True,
show=True,
name='toolkit',
),
TemplateField(
field_type='BaseLanguageModel',
required=True,
show=True,
name='llm',
display_name='LLM',
),
],
)
description: str = """Construct a json agent from an LLM and tools."""
base_classes: list[str] = ['AgentExecutor', 'function']
def to_dict(self):
return super().to_dict()
================================================
FILE: src/backend/bisheng/template/frontend_node/autogenrole.py
================================================
from typing import Optional
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
class AutogenRoleFrontNode(FrontendNode):
def add_extra_base_classes(self) -> None:
self.base_classes.append('ConversableAgent')
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
FrontendNode.format_field(field, name)
field.show = True
def add_extra_fields(self) -> None:
if self.name in {
'AutoGenAssistant',
'AutoGenGroupChatManager',
}:
self.template.add_field(
TemplateField(field_type='BaseLanguageModel',
required=True,
show=True,
name='llm',
advanced=False))
if self.name == 'AutoGenGroupChatManager':
self.template.add_field(
TemplateField(
field_type='ConversableAgent',
is_list=True,
required=False,
show=True,
name='agents',
advanced=False,
))
self.template.add_field(
TemplateField(field_type='int',
required=False,
show=True,
name='max_round',
advanced=False,
value=50))
self.template.add_field(
TemplateField(field_type='str',
required=False,
show=True,
name='system_message',
advanced=False,
value='Group chat manager.'))
self.template.add_field(
TemplateField(
field_type='str',
required=True,
show=True,
name='name',
value='chat_manage',
advanced=False,
))
else:
self.template.add_field(
TemplateField(
field_type='str',
required=True,
show=True,
name='name',
value='',
advanced=False,
))
self.template.add_field(
TemplateField(
field_type='str',
required=True,
show=True,
name='system_message',
advanced=False,
))
if self.name == 'AutoGenUser':
self.template.add_field(
TemplateField(field_type='int',
required=False,
show=True,
name='max_consecutive_auto_reply',
advanced=False,
value=10))
self.template.add_field(
TemplateField(field_type='str',
required=True,
show=True,
name='human_input_mode',
advanced=False,
value='ALWAYS'))
if self.name == 'AutoGenCustomRole':
self.template.add_field(
TemplateField(
field_type='function',
required=True,
show=True,
name='func',
advanced=False,
))
================================================
FILE: src/backend/bisheng/template/frontend_node/base.py
================================================
import re
from collections import defaultdict
from typing import ClassVar, Dict, List, Optional, Union
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.constants import CLASSES_TO_REMOVE, FORCE_SHOW_FIELDS
from bisheng.template.frontend_node.formatter import field_formatters
from bisheng.template.template.base import Template
from bisheng.utils import constants
from pydantic import BaseModel, Field
class FieldFormatters(BaseModel):
formatters: ClassVar[Dict] = {
'openai_api_key': field_formatters.OpenAIAPIKeyFormatter(),
}
base_formatters: ClassVar[Dict] = {
'kwargs': field_formatters.KwargsFormatter(),
'optional': field_formatters.RemoveOptionalFormatter(),
'list': field_formatters.ListTypeFormatter(),
'dict': field_formatters.DictTypeFormatter(),
'union': field_formatters.UnionTypeFormatter(),
'multiline': field_formatters.MultilineFieldFormatter(),
'show': field_formatters.ShowFieldFormatter(),
'password': field_formatters.PasswordFieldFormatter(),
'default': field_formatters.DefaultValueFormatter(),
'headers': field_formatters.HeadersDefaultValueFormatter(),
'dict_code_file': field_formatters.DictCodeFileFormatter(),
'model_fields': field_formatters.ModelSpecificFieldFormatter(),
}
def format(self, field: TemplateField, name: Optional[str] = None) -> None:
for key, formatter in self.base_formatters.items():
formatter.format(field, name)
for key, formatter in self.formatters.items():
if key == field.name:
formatter.format(field, name)
class FrontendNode(BaseModel):
_format_template: bool = True
template: Template
description: Optional[str] = None
icon: Optional[str] = None
base_classes: List[str]
name: str = ''
display_name: Optional[str] = ''
documentation: str = ''
custom_fields: Optional[Dict] = defaultdict(list)
output_types: List[str] = []
full_path: Optional[str] = None
field_formatters: FieldFormatters = Field(default_factory=FieldFormatters)
beta: bool = False
error: Optional[str] = None
# field formatters is an instance attribute but it is not used in the class
# so we need to create a method to get it
@staticmethod
def get_field_formatters() -> FieldFormatters:
return FieldFormatters()
def set_documentation(self, documentation: str) -> None:
"""Sets the documentation of the frontend node."""
self.documentation = documentation
# @field_serializer("base_classes")
# def process_base_classes(self, base_classes: List[str]) -> List[str]:
# """Removes unwanted base classes from the list of base classes."""
#
# return [base_class for base_class in base_classes if base_class not in CLASSES_TO_REMOVE]
# @field_serializer("display_name")
# def process_display_name(self, display_name: str) -> str:
# """Sets the display name of the frontend node."""
#
# return display_name or self.name
# For backwards compatibility
def to_dict(self, add_name=True) -> dict:
"""Returns a dict representation of the frontend node."""
result = self.dict(by_alias=True, exclude_none=True)
if hasattr(self, 'template') and hasattr(self.template, 'to_dict'):
format_func = self.format_field if self._format_template else None
result['template'] = self.template.to_dict(format_func)
name = result.pop('name')
result['display_name'] = result.get('display_name') if result.get(
'display_name') else self.name
result['base_classes'] = [
base_class for base_class in result['base_classes']
if base_class not in CLASSES_TO_REMOVE
]
dump = {name: result}
if not add_name:
return dump.pop(self.name)
return dump
def add_extra_fields(self) -> None:
pass
def add_extra_base_classes(self) -> None:
pass
def add_base_class(self, base_class: Union[str, List[str]]) -> None:
"""Adds a base class to the frontend node."""
if isinstance(base_class, str):
self.base_classes.append(base_class)
elif isinstance(base_class, list):
self.base_classes.extend(base_class)
def add_output_type(self, output_type: Union[str, List[str]]) -> None:
"""Adds an output type to the frontend node."""
if isinstance(output_type, str):
self.output_types.append(output_type)
elif isinstance(output_type, list):
self.output_types.extend(output_type)
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
"""Formats a given field based on its attributes and value."""
FrontendNode.get_field_formatters().format(field, name)
@staticmethod
def remove_optional(_type: str) -> str:
"""Removes 'Optional' wrapper from the type if present."""
return re.sub(r'Optional\[(.*)\]', r'\1', _type)
@staticmethod
def check_for_list_type(_type: str) -> tuple:
"""Checks for list type and returns the modified type and a boolean indicating if it's a list."""
is_list = 'List' in _type or 'Sequence' in _type
if is_list:
_type = re.sub(r'(List|Sequence)\[(.*)\]', r'\2', _type)
return _type, is_list
@staticmethod
def replace_mapping_with_dict(_type: str) -> str:
"""Replaces 'Mapping' with 'dict'."""
return _type.replace('Mapping', 'dict')
@staticmethod
def handle_union_type(_type: str) -> str:
"""Simplifies the 'Union' type to the first type in the Union."""
if 'Union' in _type:
_type = _type.replace('Union[', '')[:-1]
_type = _type.split(',')[0]
_type = _type.replace(']', '').replace('[', '')
return _type
@staticmethod
def handle_special_field(field, key: str, _type: str, SPECIAL_FIELD_HANDLERS) -> str:
"""Handles special field by using the respective handler if present."""
handler = SPECIAL_FIELD_HANDLERS.get(key)
return handler(field) if handler else _type
@staticmethod
def handle_dict_type(field: TemplateField, _type: str) -> str:
"""Handles 'dict' type by replacing it with 'code' or 'file' based on the field name."""
if 'dict' in _type.lower() and field.name == 'dict_':
field.field_type = 'file'
field.file_types = ['.json', '.yaml', '.yml']
elif _type.startswith('Dict') or _type.startswith('Mapping') or _type.startswith('dict'):
field.field_type = 'dict'
return _type
@staticmethod
def replace_default_value(field: TemplateField, value: dict) -> None:
"""Replaces default value with actual value if 'default' is present in value."""
if 'default' in value:
field.value = value['default']
@staticmethod
def handle_specific_field_values(field: TemplateField,
key: str,
name: Optional[str] = None) -> None:
"""Handles specific field values for certain fields."""
if key == 'headers':
field.value = """{"Authorization": "Bearer "}"""
FrontendNode._handle_model_specific_field_values(field, key, name)
FrontendNode._handle_api_key_specific_field_values(field, key, name)
@staticmethod
def _handle_model_specific_field_values(field: TemplateField,
key: str,
name: Optional[str] = None) -> None:
"""Handles specific field values related to models."""
model_dict = {
'OpenAI': constants.OPENAI_MODELS,
'ChatOpenAI': constants.CHAT_OPENAI_MODELS,
'Anthropic': constants.ANTHROPIC_MODELS,
'ChatAnthropic': constants.ANTHROPIC_MODELS,
}
if name in model_dict and key == 'model_name':
field.options = model_dict[name]
field.is_list = True
@staticmethod
def _handle_api_key_specific_field_values(field: TemplateField,
key: str,
name: Optional[str] = None) -> None:
"""Handles specific field values related to API keys."""
if 'api_key' in key and 'OpenAI' in str(name):
field.display_name = 'OpenAI API Key'
field.required = False
if field.value is None:
field.value = ''
@staticmethod
def handle_kwargs_field(field: TemplateField) -> None:
"""Handles kwargs field by setting certain attributes."""
if 'kwargs' in (field.name or '').lower():
field.advanced = True
field.required = False
field.show = False
@staticmethod
def handle_api_key_field(field: TemplateField, key: str) -> None:
"""Handles api key field by setting certain attributes."""
if 'api' in key.lower() and 'key' in key.lower():
field.required = False
field.advanced = False
field.display_name = key.replace('_', ' ').title()
field.display_name = field.display_name.replace('Api', 'API')
@staticmethod
def should_show_field(key: str, required: bool) -> bool:
"""Determines whether the field should be shown."""
return ((required and key not in ['input_variables']) or key in FORCE_SHOW_FIELDS
or 'api' in key or ('key' in key and 'input' not in key and 'output' not in key))
@staticmethod
def should_be_password(key: str, show: bool) -> bool:
"""Determines whether the field should be a password field."""
return any(text in key.lower() for text in {'password', 'token', 'api', 'key'}) and show
@staticmethod
def should_be_multiline(key: str) -> bool:
"""Determines whether the field should be multiline."""
return key in {
'suffix',
'prefix',
'template',
'examples',
'code',
'headers',
'description',
}
@staticmethod
def set_field_default_value(field: TemplateField, value: dict, key: str) -> None:
"""Sets the field value with the default value if present."""
if 'default' in value:
field.value = value['default']
if key == 'headers':
field.value = """{"Authorization": "Bearer "}"""
================================================
FILE: src/backend/bisheng/template/frontend_node/chains.py
================================================
from typing import Optional
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
from bisheng.template.frontend_node.constants import QA_CHAIN_TYPES, SUMMARIZE_CHAIN_TYPES
from bisheng.template.template.base import Template
class ChainFrontendNode(FrontendNode):
def add_extra_fields(self) -> None:
if self.template.type_name == 'ConversationalRetrievalChain':
# add memory
self.template.add_field(
TemplateField(
field_type='BaseChatMemory',
required=True,
show=True,
name='memory',
advanced=False,
))
# add return_source_documents
self.template.add_field(
TemplateField(
field_type='bool',
required=False,
show=True,
name='return_source_documents',
advanced=False,
value=True,
display_name='Return source documents',
))
self.template.add_field(
TemplateField(
field_type='str',
required=True,
is_list=True,
show=True,
multiline=False,
options=QA_CHAIN_TYPES,
value=QA_CHAIN_TYPES[0],
name='chain_type',
advanced=False,
))
self.template.add_field(
TemplateField(
field_type='BasePromptTemplate',
show=True,
name='document_prompt',
advanced=False,
))
elif self.template.type_name == 'SequentialChain':
self.template.add_field(
TemplateField(field_type='str',
required=True,
show=True,
name='chain_order',
advanced=False,
value='[]'))
elif self.template.type_name in {'MultiPromptChain', 'MultiRuleChain'}:
self.template.add_field(
TemplateField(field_type='Chain',
required=True,
show=True,
is_list=True,
name='LLMChains',
advanced=False,
value='[]'))
self.template.add_field(
TemplateField(field_type='NestedDict',
required=True,
show=True,
is_list=True,
name='destination_chain_name',
advanced=False,
info='{chain_id: name}',
value='{}'))
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
FrontendNode.format_field(field, name)
if name == 'RuleBasedRouter' and field.name == 'rule_function':
field.field_type = 'function'
if name == 'RuleBasedRouter' and field.name == 'input_variables':
field.show = True
if name == 'LoaderOutputChain' and field.name == 'documents':
field.is_list = False
if name == 'RetrievalQA' and field.name == 'memory':
field.show = False
field.required = False
if name == 'APIChain' and field.name == 'limit_to_domains':
field.show = True
field.required = False
field.value = None
if name == 'BishengRetrievalQA' and field.name == 'max_content':
field.show = True
field.required = False
field.advanced = False
if 'key' in field.name and field.name != 'keyword_store': # Under special treatmentbishengRetrievalQAComponent
field.password = False
field.show = False
if field.name in ['input_key', 'output_key']:
field.required = True
field.show = True
field.advanced = False
# We should think of a way to deal with this later
# if field.field_type == "PromptTemplate":
# field.field_type = "str"
# field.multiline = True
# field.show = True
# field.advanced = False
# field.value = field.value.template
# Separated for possible future changes
if field.name == 'prompt' and field.value is None:
field.required = True
field.show = True
field.advanced = False
if field.name == 'prompt' and name == 'DalleGeneratorChain':
field.show = True
field.required = False
if field.name == 'condense_question_prompt':
field.required = False
field.show = True
if field.name in {'memory', 'document_prompt'}:
# field.required = False
field.show = True
field.advanced = False
if field.name == 'verbose':
field.required = False
field.show = False
field.advanced = True
if field.name == 'llm':
field.required = True
field.show = True
field.advanced = False
field.field_type = 'BaseLanguageModel' # temporary fix
field.is_list = False
if field.name == 'llm' and name == 'DalleGeneratorChain':
field.required = False
if field.name == 'return_source_documents':
field.required = False
field.show = True
field.advanced = True
field.value = True
if field.name == 'combine_docs_chain_kwargs':
field.show = True
field.field_type = 'BasePromptTemplate'
field.display_name = 'prompt'
if field.name == 'recipient':
field.display_name = 'AutogenRole'
if field.name == 'destination_chains':
field.show = False
if name == 'TransformChain' and field.name == 'input_variables':
field.show = True
if name == 'TransformChain' and field.name == 'transform_cb':
field.show = True
field.field_type = 'function'
field.name = 'transform'
if name == 'TransformChain' and field.name == 'atransform_cb':
field.show = True
field.field_type = 'function'
field.name = 'atransform'
if name in ['QAGenerationChain', 'QAGenerationChainV2']:
if field.name in ['k', 'chunk_size', 'question_prompt', 'answer_prompt', 'filter_lowquality_context',
'filter_lowquality_question']:
field.show = True
elif field.name == 'input_node':
field.show = False
class SeriesCharacterChainNode(FrontendNode):
name: str = 'SeriesCharacterChain'
template: Template = Template(
type_name='SeriesCharacterChain',
fields=[
TemplateField(
field_type='str',
required=True,
placeholder='',
is_list=False,
show=True,
advanced=False,
multiline=False,
name='character',
),
TemplateField(
field_type='str',
required=True,
placeholder='',
is_list=False,
show=True,
advanced=False,
multiline=False,
name='series',
),
TemplateField(
field_type='BaseLanguageModel',
required=True,
placeholder='',
is_list=False,
show=True,
advanced=False,
multiline=False,
name='llm',
display_name='LLM',
),
],
)
description: str = 'SeriesCharacterChain is a chain you can use to have a conversation with a character from a series.' # noqa
base_classes: list[str] = [
'LLMChain',
'BaseCustomChain',
'Chain',
'ConversationChain',
'SeriesCharacterChain',
'function',
]
class TimeTravelGuideChainNode(FrontendNode):
name: str = 'TimeTravelGuideChain'
template: Template = Template(
type_name='TimeTravelGuideChain',
fields=[
TemplateField(
field_type='BaseLanguageModel',
required=True,
placeholder='',
is_list=False,
show=True,
advanced=False,
multiline=False,
name='llm',
display_name='LLM',
),
TemplateField(
field_type='BaseChatMemory',
required=False,
show=True,
name='memory',
advanced=False,
),
],
)
description: str = 'Time travel guide chain.'
base_classes: list[str] = [
'LLMChain',
'BaseCustomChain',
'TimeTravelGuideChain',
'Chain',
'ConversationChain',
]
class MidJourneyPromptChainNode(FrontendNode):
name: str = 'MidJourneyPromptChain'
template: Template = Template(
type_name='MidJourneyPromptChain',
fields=[
TemplateField(
field_type='BaseLanguageModel',
required=True,
placeholder='',
is_list=False,
show=True,
advanced=False,
multiline=False,
name='llm',
display_name='LLM',
),
TemplateField(
field_type='BaseChatMemory',
required=False,
show=True,
name='memory',
advanced=False,
),
],
)
description: str = 'MidJourneyPromptChain is a chain you can use to generate new MidJourney prompts.'
base_classes: list[str] = [
'LLMChain',
'BaseCustomChain',
'Chain',
'ConversationChain',
'MidJourneyPromptChain',
]
class CombineDocsChainNode(FrontendNode):
name: str = 'CombineDocsChain'
template: Template = Template(
type_name='load_qa_chain',
fields=[
TemplateField(
field_type='str',
required=True,
is_list=True,
show=True,
multiline=False,
options=QA_CHAIN_TYPES,
value=QA_CHAIN_TYPES[0],
name='chain_type',
advanced=False,
),
TemplateField(
field_type='BaseLanguageModel',
required=True,
show=True,
name='llm',
display_name='LLM',
advanced=False,
),
TemplateField(
field_type='int',
required=False,
show=True,
name='token_max',
display_name='token_max',
advanced=False,
info='Hide Content Only ForStuffType Effective',
value=-1,
),
TemplateField(field_type='BasePromptTemplate',
required=False,
show=True,
name='prompt',
display_name='prompt',
advanced=False,
info='Hide Content Only ForStuffType Effective'),
TemplateField(
field_type='BasePromptTemplate',
required=False,
show=True,
name='document_prompt',
advanced=False,
)
],
)
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
pass
description: str = """Load question answering chain."""
base_classes: list[str] = ['BaseCombineDocumentsChain', 'function']
class SummarizeDocsChain(FrontendNode):
name: str = 'SummarizeDocsChain'
template: Template = Template(
type_name='load_summarize_chain',
fields=[
TemplateField(
field_type='str',
required=True,
is_list=True,
show=True,
multiline=False,
options=SUMMARIZE_CHAIN_TYPES,
value=SUMMARIZE_CHAIN_TYPES[0],
name='chain_type',
advanced=False,
),
TemplateField(
field_type='BaseLanguageModel',
required=True,
show=True,
name='llm',
display_name='LLM',
advanced=False,
),
TemplateField(
field_type='int',
required=False,
show=True,
name='token_max',
display_name='token_max',
advanced=False,
info='Currently only forstuff ENTRY INTO FORCE',
value=-1,
),
TemplateField(field_type='BasePromptTemplate',
required=False,
show=True,
name='prompt',
display_name='prompt',
advanced=False,
info='Hide Content Only ForStuffType Effective')
],
)
description: str = """Load summarize chain."""
base_classes: list[str] = ['BaseCombineDocumentsChain', 'function']
================================================
FILE: src/backend/bisheng/template/frontend_node/constants.py
================================================
FORCE_SHOW_FIELDS = [
'allowed_tools',
'memory',
'prefix',
'examples',
'temperature',
'model_name',
'headers',
'max_value_length',
'max_tokens',
'file_path',
'input_node',
'output_node',
]
DEFAULT_PROMPT = """
I want you to act as a naming consultant for new companies.
Here are some examples of good company names:
- search engine, Google
- social media, Facebook
- video sharing, YouTube
The name should be short, catchy and easy to remember.
What is a good name for a company that makes {product}?
"""
SYSTEM_PROMPT = """
You are a helpful assistant that talks casually about life in general.
You are a good listener and you can talk about anything.
"""
HUMAN_PROMPT = '{input}'
QA_CHAIN_TYPES = ['stuff', 'map_reduce', 'map_rerank', 'refine']
SUMMARIZE_CHAIN_TYPES = ['stuff', 'map_reduce', 'refine']
CTRANSFORMERS_DEFAULT_CONFIG = {
'top_k': 40,
'top_p': 0.95,
'temperature': 0.8,
'repetition_penalty': 1.1,
'last_n_tokens': 64,
'seed': -1,
'max_new_tokens': 256,
'stop': None,
'stream': False,
'reset': True,
'batch_size': 8,
'threads': -1,
'context_length': -1,
'gpu_layers': 0,
}
# This variable is used to tell the user
# that it can be changed to use other APIs
# like Prem and LocalAI
OPENAI_API_BASE_INFO = """
The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.
You can change this to use other APIs like JinaChat, LocalAI and Prem.
"""
INPUT_KEY_INFO = """The variable to be used as Chat Input when more than one variable is available."""
OUTPUT_KEY_INFO = """The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)"""
CLASSES_TO_REMOVE = [
'RunnableSerializable',
'Serializable',
'BaseModel',
'object',
'Runnable',
'Generic',
]
================================================
FILE: src/backend/bisheng/template/frontend_node/custom_components.py
================================================
from typing import Optional
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
from bisheng.template.template.base import Template
DEFAULT_CUSTOM_COMPONENT_CODE = """from bisheng import CustomComponent
from typing import Optional, List, Dict, Union
from bisheng.field_typing import (
AgentExecutor,
BaseChatMemory,
BaseLanguageModel,
BaseLLM,
BaseLoader,
BaseMemory,
BaseOutputParser,
BasePromptTemplate,
BaseRetriever,
Callable,
Chain,
ChatPromptTemplate,
Data,
Document,
Embeddings,
NestedDict,
Object,
PromptTemplate,
TextSplitter,
Tool,
VectorStore,
)
class Component(CustomComponent):
display_name: str = "Custom Component"
description: str = "Create any custom component you want!"
def build_config(self):
return {"param": {"display_name": "Parameter"}}
def build(self, param: Data) -> Data:
return param
"""
class CustomComponentFrontendNode(FrontendNode):
_format_template: bool = False
name: str = 'CustomComponent'
display_name: Optional[str] = 'CustomComponent'
beta: bool = True
template: Template = Template(
type_name='CustomComponent',
fields=[
TemplateField(
field_type='code',
required=True,
placeholder='',
is_list=False,
show=True,
value=DEFAULT_CUSTOM_COMPONENT_CODE,
name='code',
advanced=False,
dynamic=True,
)
],
)
description: Optional[str] = None
base_classes: list[str] = []
================================================
FILE: src/backend/bisheng/template/frontend_node/documentloaders.py
================================================
from typing import ClassVar, Dict, Optional
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
def build_file_field(suffixes: list,
fileTypes: list,
name: str = 'file_path',
fieldType='fileNode') -> TemplateField:
"""Build a template field for a document loader."""
return TemplateField(
field_type=fieldType,
required=True,
show=True,
name=name,
value='',
suffixes=suffixes,
fileTypes=fileTypes,
)
class DocumentLoaderFrontNode(FrontendNode):
def add_extra_base_classes(self) -> None:
self.base_classes = ['Document']
self.output_types = ['Document']
file_path_templates: ClassVar[Dict] = {
'ElemUnstructuredLoaderV0':
build_file_field(
suffixes=[
'.html', '.md', '.txt', '.bmp', '.jpg', '.png', '.jpeg', '.doc', '.docx', '.pdf',
'.ppt', '.pptx', '.xls', '.xlsx', '.tsv', '.csv', '.tiff'
],
fileTypes=[
'html',
'md',
'txt',
'bmp',
'jpg',
'png',
'jpeg',
'doc',
'docx',
'pdf',
'ppt',
'pptx',
'.xls',
'xlsx',
'tsv',
'csv',
'tiff',
],
),
'AirbyteJSONLoader':
build_file_field(suffixes=['.json'], fileTypes=['json']),
'CoNLLULoader':
build_file_field(suffixes=['.csv'], fileTypes=['csv']),
'CSVLoader':
build_file_field(suffixes=['.csv'], fileTypes=['csv']),
'UnstructuredEmailLoader':
build_file_field(suffixes=['.eml'], fileTypes=['eml']),
'SlackDirectoryLoader':
build_file_field(suffixes=['.zip'], fileTypes=['zip']),
'EverNoteLoader':
build_file_field(suffixes=['.xml'], fileTypes=['xml']),
'FacebookChatLoader':
build_file_field(suffixes=['.json'], fileTypes=['json']),
'BSHTMLLoader':
build_file_field(suffixes=['.html'], fileTypes=['html']),
'UnstructuredHTMLLoader':
build_file_field(suffixes=['.html'], fileTypes=['html']),
'UnstructuredImageLoader':
build_file_field(
suffixes=['.jpg', '.jpeg', '.png', '.gif', '.bmp'],
fileTypes=['jpg', 'jpeg', 'png', 'gif', 'bmp'],
),
'UnstructuredMarkdownLoader':
build_file_field(suffixes=['.md'], fileTypes=['md']),
'PyPDFLoader':
build_file_field(suffixes=['.pdf'], fileTypes=['pdf'], fieldType='fileNode'),
'UnstructuredPowerPointLoader':
build_file_field(suffixes=['.pptx', '.ppt'], fileTypes=['pptx', 'ppt']),
'SRTLoader':
build_file_field(suffixes=['.srt'], fileTypes=['srt']),
'TelegramChatLoader':
build_file_field(suffixes=['.json'], fileTypes=['json']),
'TextLoader':
build_file_field(suffixes=['.txt'], fileTypes=['txt']),
'UnstructuredWordDocumentLoader':
build_file_field(suffixes=['.docx', '.doc'], fileTypes=['docx', 'doc']),
'PDFWithSemanticLoader':
build_file_field(suffixes=['.pdf'], fileTypes=['pdf']),
'UniversalKVLoader':
build_file_field(
suffixes=['.jpg', '.png', '.jpeg', '.bmp', '.pdf'],
fileTypes=['jpg', 'png', 'jpeg', 'bmp', 'pdf'],
),
'CustomKVLoader':
build_file_field(
suffixes=[
'.jpg', '.png', '.jpeg', '.pdf', '.txt', '.docx', '.doc', '.bmp', '.tif', '.tiff',
'.xls', '.xlsx'
],
fileTypes=[
'jpg', 'png', 'jpeg', 'pdf', 'txt', 'docx', 'doc', 'bmp', 'tif', 'tiff', 'xls',
'xlsx'
],
),
}
def add_extra_fields(self) -> None:
name = None
display_name = 'Web Page'
if self.template.type_name in {'PDFWithSemanticLoader'}:
for field in build_pdf_semantic_loader_fields():
self.template.add_field(field)
if self.template.type_name in {'GitLoader'}:
# Add fields repo_path, clone_url, branch and file_filter
self.template.add_field(
TemplateField(
field_type='str',
required=True,
show=True,
name='repo_path',
value='',
display_name='Path to repository',
advanced=False,
))
self.template.add_field(
TemplateField(
field_type='str',
required=False,
show=True,
name='clone_url',
value='',
display_name='Clone URL',
advanced=False,
))
self.template.add_field(
TemplateField(
field_type='str',
required=True,
show=True,
name='branch',
value='',
display_name='Branch',
advanced=False,
))
self.template.add_field(
TemplateField(
field_type='str',
required=False,
show=True,
name='file_filter',
value='',
display_name='File extensions (comma-separated)',
advanced=False,
))
elif self.template.type_name in {'ElemUnstructuredLoaderV0'}:
self.template.add_field(
TemplateField(
field_type='str',
required=True,
show=True,
name='unstructured_api_url',
value='',
display_name='unstructured_api_url',
advanced=False,
))
self.template.add_field(
TemplateField(
field_type='dict',
required=True,
show=True,
name='kwargs',
display_name='kwargs',
advanced=False,
))
self.template.add_field(self.file_path_templates[self.template.type_name])
elif self.template.type_name in {'UniversalKVLoader'}:
self.template.add_field(
TemplateField(
field_type='str',
required=True,
show=True,
name='ellm_model_url',
value='',
display_name='ellm_model_url',
advanced=False,
))
self.template.add_field(
TemplateField(
field_type='int',
required=False,
show=True,
name='max_pages',
value=30,
display_name='max_pages',
advanced=False,
))
self.template.add_field(
TemplateField(
field_type='str',
required=True,
show=True,
name='schema',
value='',
display_name='schema',
advanced=False,
))
self.template.add_field(self.file_path_templates[self.template.type_name])
elif self.template.type_name in {'CustomKVLoader'}:
self.template.add_field(
TemplateField(
field_type='str',
required=True,
show=True,
name='schemas',
advanced=False,
))
self.template.add_field(
TemplateField(
field_type='str',
required=True,
show=True,
name='elm_api_base_url',
advanced=False,
))
self.template.add_field(
TemplateField(
field_type='str',
required=True,
show=True,
name='elm_api_key',
advanced=False,
))
self.template.add_field(
TemplateField(
field_type='str',
required=True,
show=True,
name='elem_server_id',
advanced=False,
))
self.template.add_field(
TemplateField(
field_type='str',
required=True,
show=True,
name='task_type',
advanced=False,
))
self.template.add_field(
TemplateField(field_type='int',
required=True,
show=True,
name='request_timeout',
advanced=True,
value=600))
self.template.add_field(self.file_path_templates[self.template.type_name])
elif self.template.type_name in self.file_path_templates:
self.template.add_field(self.file_path_templates[self.template.type_name])
elif self.template.type_name in {'FireCrawlLoader'}:
self.template.add_field(
TemplateField(
field_type='str',
required=True,
show=True,
name='url',
value='',
display_name='URL',
advanced=False,
))
self.template.add_field(
TemplateField(field_type='dict',
multiline=True,
required=False,
show=True,
name='params'))
self.template.add_field(
TemplateField(field_type='str',
multiline=True,
required=False,
show=True,
name='api_key'))
self.template.add_field(
TemplateField(field_type='str',
multiline=True,
required=True,
value='crawl',
options=['crawl', 'scrape'],
show=True,
name='mode'))
elif self.template.type_name in {
'WebBaseLoader',
'AZLyricsLoader',
'CollegeConfidentialLoader',
'HNLoader',
'IFixitLoader',
'IMSDbLoader',
'GutenbergLoader',
}:
name = 'web_path'
elif self.template.type_name in {'GutenbergLoader'}:
name = 'file_path'
elif self.template.type_name in {'GitbookLoader'}:
name = 'web_page'
elif self.template.type_name in {
'DirectoryLoader',
'ReadTheDocsLoader',
'NotionDirectoryLoader',
'PyPDFDirectoryLoader',
}:
name = 'path'
display_name = 'Local directory'
if self.template.type_name == 'WebBaseLoader':
self.template.add_field(
TemplateField(
field_type='code',
required=True,
show=True,
name='requests_kwargs',
value='{"timeout": 30}',
display_name='RequestsKwargs',
multiline=False,
))
if name:
if self.template.type_name in {'DirectoryLoader'}:
for field in build_directory_loader_fields():
self.template.add_field(field)
else:
self.template.add_field(
TemplateField(
field_type='str',
required=True,
show=True,
name=name,
value='',
display_name=display_name,
))
# add a metadata field of type dict
self.template.add_field(
TemplateField(
field_type='code',
required=True,
show=True,
name='metadata',
value='{}',
display_name='Metadata',
multiline=False,
))
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
FrontendNode.format_field(field, name)
if field.name == 'metadata':
field.show = True
field.advanced = False
field.show = True
if field.name == 'unstructured_api_url':
field.show = True
field.advanced = False
if name == 'CustomKVLoader' and field.name == 'task_type':
field.options = ['extraction-job', 'logic-job']
field.value = 'logic-job'
if name == 'CustomKVLoader' and field.name == 'schemas':
field.field_type = 'str'
field.info = "please use '|' seperate"
field.is_list = False
if name == 'ElemUnstructuredLoaderV0' and field.name == 'kwargs':
field.show = True
field.advanced = False
def build_pdf_semantic_loader_fields():
# file_path: str,
# password: Optional[Union[str, bytes]] = None,
# layout_api_key: str = None,
# layout_api_url: str = None,
# is_join_table: bool = True,
# with_columns: bool = False,
# support_rotate: bool = False,
# text_elem_sep: str = '\n',
# start: int = 0,
# n: int = None,
# verbose: bool = False
file_path = TemplateField(field_type='file',
required=True,
show=True,
name='file_path',
value='',
display_name='pdfDoc.')
password = TemplateField(field_type='str',
required=True,
show=True,
advanced=True,
name='password',
value=None,
display_name='password')
layout_api_key = TemplateField(field_type='str',
required=False,
show=True,
name='layout_api_key',
value=None,
display_name='layout_api_key')
layout_api_url = TemplateField(field_type='str',
required=False,
show=True,
name='layout_api_url',
value=None,
display_name='layout_api_url')
is_join_table = TemplateField(field_type='bool',
required=True,
show=True,
advanced=True,
name='is_join_table',
value='True',
display_name='is_join_table')
with_columns = TemplateField(field_type='bool',
required=True,
show=True,
advanced=True,
name='with_columns',
value='False',
display_name='with_columns')
support_rotate = TemplateField(field_type='bool',
required=True,
show=True,
advanced=True,
name='support_rotate',
value='False',
display_name='support_rotate')
text_elem_sep = TemplateField(field_type='str',
required=True,
show=True,
advanced=True,
name='text_elem_sep',
value='\\n',
display_name='text_elem_sep')
start = TemplateField(field_type='int',
required=True,
show=True,
advanced=True,
name='start',
value=0,
display_name='start')
n = TemplateField(field_type='int',
required=False,
show=True,
advanced=True,
name='n',
value=None,
display_name='n')
verbose = TemplateField(field_type='bool',
required=True,
show=True,
advanced=True,
name='verbose',
value='False',
display_name='verbose')
return (file_path, password, layout_api_key, layout_api_url, n, verbose, is_join_table,
with_columns, support_rotate, text_elem_sep, start)
def build_directory_loader_fields():
# if loader_kwargs is None:
# loader_kwargs = {}
# self.path = path
# self.glob = glob
# self.load_hidden = load_hidden
# self.loader_cls = loader_cls
# self.loader_kwargs = loader_kwargs
# self.silent_errors = silent_errors
# self.recursive = recursive
# self.show_progress = show_progress
# self.use_multithreading = use_multithreading
# self.max_concurrency = max_concurrency
# Based on the above fields, we can build the following fields:
# path, glob, load_hidden, silent_errors, recursive, show_progress, use_multithreading, max_concurrency
# path
path = TemplateField(
field_type='str',
required=True,
show=True,
name='path',
value='',
display_name='Local directory',
advanced=False,
)
# glob
glob = TemplateField(
field_type='str',
required=True,
show=True,
name='glob',
value='**/*.txt',
display_name='glob',
advanced=False,
)
# load_hidden
load_hidden = TemplateField(
field_type='bool',
required=False,
show=True,
name='load_hidden',
value='False',
display_name='Load hidden files',
advanced=True,
)
# silent_errors
silent_errors = TemplateField(
field_type='bool',
required=False,
show=True,
name='silent_errors',
value='False',
display_name='Silent errors',
advanced=True,
)
# recursive
recursive = TemplateField(
field_type='bool',
required=False,
show=True,
name='recursive',
value='True',
display_name='Recursive',
advanced=True,
)
# use_multithreading
use_multithreading = TemplateField(
field_type='bool',
required=False,
show=True,
name='use_multithreading',
value='True',
display_name='Use multithreading',
advanced=True,
)
# max_concurrency
max_concurrency = TemplateField(
field_type='int',
required=False,
show=True,
name='max_concurrency',
value=10,
display_name='Max concurrency',
advanced=True,
)
return (
path,
glob,
load_hidden,
silent_errors,
recursive,
use_multithreading,
max_concurrency,
)
================================================
FILE: src/backend/bisheng/template/frontend_node/embeddings.py
================================================
from typing import Optional
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
from bisheng.template.template.base import Template
class EmbeddingFrontendNode(FrontendNode):
@staticmethod
def format_jina_fields(field: TemplateField):
if 'jina' in field.name:
field.show = True
field.advanced = False
if 'auth' in field.name or 'token' in field.name:
field.password = True
field.show = True
field.advanced = False
if field.name == 'jina_api_url':
field.show = True
field.advanced = True
field.display_name = 'Jina API URL'
field.password = False
@staticmethod
def format_openai_fields(field: TemplateField):
if 'openai' in field.name:
field.show = True
field.advanced = True
split_name = field.name.split('_')
title_name = ' '.join([s.capitalize() for s in split_name])
field.display_name = title_name.replace('Openai', 'OpenAI').replace('Api', 'API')
if 'api_key' in field.name:
field.password = True
field.show = True
field.advanced = False
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
FrontendNode.format_field(field, name)
field.advanced = not field.required
field.show = True
if field.name == 'headers':
field.show = False
field.value = ''
if field.name == 'host_base_url':
field.show = True
field.advanced = False
if field.name == 'model':
field.show = True
field.advanced = False
if name == 'BishengEmbedding':
if field.name == 'model_id':
field.show = True
field.display_name = 'Model Name'
field.field_type = 'bisheng_embedding'
field.advanced = False
elif field.name in ['model', 'llm_node_type', "app_type", "app_id", "app_name", "user_id"]:
field.show = False
# Format Jina fields
EmbeddingFrontendNode.format_jina_fields(field)
EmbeddingFrontendNode.format_openai_fields(field)
class OpenAIProxyEmbedding(FrontendNode):
name: str = 'OpenAIProxyEmbedding'
description: str = """ Use self-builtembeddingService UsageopenaiTo be performedembed """
base_classes: list[str] = ['Embeddings']
template: Template = Template(type_name='proxy_embedding',
fields=[
TemplateField(
field_type='str',
required=False,
placeholder='http://43.133.35.137:8080',
is_list=False,
show=True,
multiline=False,
value='',
name='proxy_url',
),
])
def to_dict(self):
return super().to_dict()
================================================
FILE: src/backend/bisheng/template/frontend_node/formatter/__init__.py
================================================
================================================
FILE: src/backend/bisheng/template/frontend_node/formatter/base.py
================================================
from abc import ABC, abstractmethod
from typing import Optional
from bisheng.template.field.base import TemplateField
from pydantic import BaseModel
class FieldFormatter(BaseModel, ABC):
@abstractmethod
def format(self, field: TemplateField, name: Optional[str]) -> None:
pass
================================================
FILE: src/backend/bisheng/template/frontend_node/formatter/field_formatters.py
================================================
import re
from typing import ClassVar, Dict, Optional
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.constants import FORCE_SHOW_FIELDS
from bisheng.template.frontend_node.formatter.base import FieldFormatter
from bisheng.utils.constants import ANTHROPIC_MODELS, CHAT_OPENAI_MODELS, OPENAI_MODELS
class OpenAIAPIKeyFormatter(FieldFormatter):
def format(self, field: TemplateField, name: Optional[str] = None) -> None:
if 'api_key' in field.name and 'OpenAI' in str(name):
field.display_name = 'OpenAI API Key'
field.required = False
if field.value is None:
field.value = ''
class ModelSpecificFieldFormatter(FieldFormatter):
MODEL_DICT: ClassVar[Dict] = {
'OpenAI': OPENAI_MODELS,
'ChatOpenAI': CHAT_OPENAI_MODELS,
'Anthropic': ANTHROPIC_MODELS,
'ChatAnthropic': ANTHROPIC_MODELS,
}
def format(self, field: TemplateField, name: Optional[str] = None) -> None:
if name in self.MODEL_DICT and field.name == 'model_name':
field.options = self.MODEL_DICT[name]
field.is_list = True
class KwargsFormatter(FieldFormatter):
def format(self, field: TemplateField, name: Optional[str] = None) -> None:
if 'kwargs' in field.name.lower():
field.advanced = True
field.required = False
field.show = False
class APIKeyFormatter(FieldFormatter):
def format(self, field: TemplateField, name: Optional[str] = None) -> None:
if 'api' in field.name.lower() and 'key' in field.name.lower():
field.required = False
field.advanced = False
field.display_name = field.name.replace('_', ' ').title()
field.display_name = field.display_name.replace('Api', 'API')
class RemoveOptionalFormatter(FieldFormatter):
def format(self, field: TemplateField, name: Optional[str] = None) -> None:
_type = field.field_type
field.field_type = re.sub(r'Optional\[(.*)\]', r'\1', _type)
class ListTypeFormatter(FieldFormatter):
def format(self, field: TemplateField, name: Optional[str] = None) -> None:
_type = field.field_type
is_list = 'List' in _type or 'Sequence' in _type
if is_list:
_type = re.sub(r'(List|Sequence)\[(.*)\]', r'\2', _type)
field.is_list = True
field.field_type = _type
class DictTypeFormatter(FieldFormatter):
def format(self, field: TemplateField, name: Optional[str] = None) -> None:
_type = field.field_type
_type = _type.replace('Mapping', 'dict')
field.field_type = _type
class UnionTypeFormatter(FieldFormatter):
def format(self, field: TemplateField, name: Optional[str] = None) -> None:
_type = field.field_type
if 'Union' in _type:
_type = _type.replace('Union[', '')[:-1]
_type = _type.split(',')[0]
_type = _type.replace(']', '').replace('[', '')
field.field_type = _type
class SpecialFieldFormatter(FieldFormatter):
SPECIAL_FIELD_HANDLERS: ClassVar[Dict] = {
'allowed_tools': lambda field: 'Tool',
'max_value_length': lambda field: 'int',
}
def format(self, field: TemplateField, name: Optional[str] = None) -> None:
handler = self.SPECIAL_FIELD_HANDLERS.get(field.name)
field.field_type = handler(field) if handler else field.field_type
class ShowFieldFormatter(FieldFormatter):
def format(self, field: TemplateField, name: Optional[str] = None) -> None:
key = field.name
required = field.required
field.show = ((required and (key not in ['input_variables'] or name == 'SequentialChain'))
or key in FORCE_SHOW_FIELDS or 'api' in key
or ('key' in key and 'input' not in key and 'output' not in key))
class PasswordFieldFormatter(FieldFormatter):
def format(self, field: TemplateField, name: Optional[str] = None) -> None:
key = field.name
show = field.show
if (any(text in key.lower() for text in {'password', 'token', 'api', 'key'}) and show):
field.password = True
class MultilineFieldFormatter(FieldFormatter):
def format(self, field: TemplateField, name: Optional[str] = None) -> None:
key = field.name
if key in {
'suffix',
'prefix',
'template',
'examples',
'code',
'headers',
'description',
}:
field.multiline = True
class DefaultValueFormatter(FieldFormatter):
def format(self, field: TemplateField, name: Optional[str] = None) -> None:
value = field.to_dict()
if 'default' in value:
field.value = value['default']
class HeadersDefaultValueFormatter(FieldFormatter):
def format(self, field: TemplateField, name: Optional[str] = None) -> None:
key = field.name
if key == 'headers':
field.value = """{'Authorization': 'Bearer '}"""
class DictCodeFileFormatter(FieldFormatter):
def format(self, field: TemplateField, name: Optional[str] = None) -> None:
key = field.name
value = field.to_dict()
_type = value['type']
if 'dict' in _type.lower() and key == 'dict_':
field.field_type = 'file'
field.file_types = ['.json', '.yaml', '.yml']
elif _type.startswith('Dict') or _type.startswith('Mapping') or _type.startswith('dict'):
field.field_type = 'dict'
================================================
FILE: src/backend/bisheng/template/frontend_node/input_output.py
================================================
from typing import Optional
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
from bisheng.template.template.base import Template
def build_file_field(suffixes: list,
fileTypes: list,
name: str = 'file_path',
fieldType='fileNode') -> TemplateField:
"""Build a template field for a document loader."""
return TemplateField(
field_type=fieldType,
required=True,
show=True,
name=name,
value='',
suffixes=suffixes,
fileTypes=fileTypes,
)
class InputOutputNode(FrontendNode):
name: str = 'InputOutputNode'
base_classes: list[str] = ['input', 'output']
def add_extra_base_classes(self) -> None:
if self.name in {'AudioInputNode', 'FileInputNode'}:
self.base_classes.append('input')
def add_extra_fields(self) -> None:
pass
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
FrontendNode.format_field(field, name)
if name == 'Report':
if field.name == 'memory':
field.show = False
elif field.name == 'input_node':
field.show = False
elif field.name == 'chains':
field.show = True
field.field_type = 'function'
field.display_name = 'functions'
elif field.name == 'report_name':
field.show = True
field.display_name = 'Report Name'
field.info = 'the file name we generate'
elif field.name == 'variables':
field.show = True
field.field_type = 'VariableNode'
if name == 'VariableNode':
if field.name == 'variables':
field.show = True
field.field_type = 'variable'
field.required = True
if name == 'AudioInputNode':
if field.name == 'file_path':
field.show = True
field.field_type = 'fileNode'
field.required = True
field.suffixes = ['.mp3']
field.fileTypes = ['mp3']
elif field.name == 'openai_proxy':
field.show = True
if name == 'FileInputNode':
if field.name == 'file_path':
field.show = True
field.field_type = 'fileNode'
field.required = True
field.suffixes = ['.jpg', '.png', '.jpeg']
field.fileTypes = ['jpg', 'png', 'jpeg']
elif field.name == 'openai_proxy':
field.show = True
class InputNode(FrontendNode):
name: str = 'InputNode'
template: Template = Template(
type_name='input',
fields=[
TemplateField(
field_type='str',
is_list=True,
multiline=True,
required=True,
show=True,
name='input',
display_name='输入内容',
),
],
)
description: str = """输入节点,用来自动对接输入"""
base_classes: list[str] = ['input']
def to_dict(self):
return super().to_dict()
class InputFileNode(FrontendNode):
name: str = 'InputFileNode'
template: Template = Template(
type_name='InputFileNode',
fields=[
TemplateField(
field_type='file',
show=True,
name='file_path',
value='',
),
TemplateField(field_type='str',
show=True,
name='file_type',
placeholder='提示上传文件类型',
display_name='Name',
info='Tips for which file should upload'),
],
)
description: str = """输入节点,用来自动对接输入"""
base_classes: list[str] = ['fileNode']
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
FrontendNode.format_field(field, name)
field.show = True
def to_dict(self):
return super().to_dict()
class OutputNode(FrontendNode):
name: str = 'OutputNode'
template: Template = Template(
type_name='output',
fields=[
TemplateField(
field_type='str',
list=False,
multiline=True,
required=True,
show=True,
name='output',
display_name='展示输出内容',
),
],
)
description: str = """输出节点,用来表示输出"""
base_classes: list[str] = ['output']
def to_dict(self):
return super().to_dict()
================================================
FILE: src/backend/bisheng/template/frontend_node/llms.py
================================================
import json
from typing import Optional
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
from bisheng.template.frontend_node.constants import (CTRANSFORMERS_DEFAULT_CONFIG,
OPENAI_API_BASE_INFO)
class LLMFrontendNode(FrontendNode):
def add_extra_fields(self) -> None:
self.template.add_field(
TemplateField(field_type='bool',
required=False,
show=True,
advanced=True,
name='cache',
value=True))
if 'VertexAI' in self.template.type_name:
# Add credentials field which should of type file.
self.template.add_field(
TemplateField(
field_type='file',
required=False,
show=True,
name='credentials',
value='',
suffixes=['.json'],
fileTypes=['json'],
))
@staticmethod
def format_vertex_field(field: TemplateField, name: str):
if 'VertexAI' in name:
advanced_fields = [
'tuned_model_name',
'verbose',
'top_p',
'top_k',
'max_output_tokens',
]
if field.name in advanced_fields:
field.advanced = True
show_fields = [
'tuned_model_name',
'verbose',
'project',
'location',
'credentials',
'max_output_tokens',
'model_name',
'temperature',
'top_p',
'top_k',
]
if field.name in show_fields:
field.show = True
@staticmethod
def format_openai_field(field: TemplateField):
if 'openai' in field.name.lower():
field.display_name = (field.name.title().replace('Openai',
'OpenAI').replace('_', ' ')).replace(
'Api', 'API')
if 'key' not in field.name.lower() and 'token' not in field.name.lower():
field.password = False
if field.name == 'openai_api_base':
field.info = OPENAI_API_BASE_INFO
if field.name == 'openai_proxy':
field.show = True
def add_extra_base_classes(self) -> None:
if 'BaseLLM' not in self.base_classes:
self.base_classes.append('BaseLLM')
@staticmethod
def format_azure_field(field: TemplateField):
if field.name == 'model_name':
field.show = False # Azure uses deployment_name instead of model_name.
elif field.name == 'openai_api_base':
# openai < 1.0.0
field.show = False
elif field.name == 'openai_api_type':
field.show = False
elif field.name == 'openai_api_version':
field.show = True
field.password = False
elif field.name == 'azure_endpoint':
field.show = True
elif field.name == 'openai_api_key':
field.show = True
field.advanced = False
elif field.name == 'deployment_name':
field.show = True
field.value = 'chatgpt'
elif field.name == 'azure_ad_token_provider':
field.show = False
elif field.name == 'openai_proxy':
field.advanced = True
@staticmethod
def format_contribute_field(field: TemplateField):
advanced_fields = [
'top_p',
'top_k',
'max_tokens',
]
if field.name in advanced_fields:
field.advanced = True
if field.name == 'headers':
field.show = True
field.advanced = True
field.value = ''
show_fields = [
'model_name',
'temperature',
'top_p',
'top_k',
'max_tokens',
]
if field.name in show_fields:
field.show = True
if 'api' in field.name.lower() or 'id' in field.name.lower() or 'key' in field.name.lower(
) or 'base' in field.name.lower():
field.show = True
field.advanced = False
field.field_type = 'str'
@staticmethod
def format_llama_field(field: TemplateField):
field.show = True
field.advanced = not field.required
@staticmethod
def format_ctransformers_field(field: TemplateField):
if field.name == 'config':
field.show = True
field.advanced = True
field.value = json.dumps(CTRANSFORMERS_DEFAULT_CONFIG, indent=2)
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
display_names_dict = {
'huggingfacehub_api_token': 'HuggingFace Hub API Token',
}
FrontendNode.format_field(field, name)
LLMFrontendNode.format_openai_field(field)
LLMFrontendNode.format_ctransformers_field(field)
LLMFrontendNode.format_contribute_field(field)
if name and 'llama' in name.lower() and 'host' not in name.lower():
LLMFrontendNode.format_llama_field(field)
if name and 'vertex' in name.lower():
LLMFrontendNode.format_vertex_field(field, name)
SHOW_FIELDS = ['repo_id']
HIDDEN_FIELDS = ['custom_get_token_ids']
if field.name in SHOW_FIELDS:
field.show = True
if field.name in HIDDEN_FIELDS:
field.show = False
if 'api' in field.name and ('key' in field.name or
('token' in field.name and 'tokens' not in field.name)):
field.password = True
field.show = True
# Required should be False to support
# loading the API key from environment variables
field.required = False
field.advanced = False
if field.name == 'task':
field.required = True
field.show = True
field.is_list = True
field.options = ['text-generation', 'text2text-generation', 'summarization']
field.value = field.options[0]
field.advanced = True
if display_name := display_names_dict.get(field.name):
field.display_name = display_name
if field.name == 'model_kwargs':
field.field_type = 'code'
field.advanced = True
field.show = True
elif field.name in [
'model_name',
'temperature',
'model_file',
'model_type',
'deployment_name',
'credentials',
'openai_proxy',
]:
field.advanced = False
field.show = True
if field.name == 'credentials':
field.field_type = 'file'
if name == 'VertexAI' and field.name not in [
'callbacks',
'client',
'stop',
'tags',
'cache',
]:
field.show = True
if field.name in ['cache']:
field.show = True
if name and 'azure' in name.lower():
LLMFrontendNode.format_azure_field(field)
# Release the streaming configuration of the component and cancel the global streaming control
if field.name == 'streaming':
field.show = True
if name == 'BishengLLM':
if field.name in ["temperature", "top_p", "cache"]:
field.show = True
if field.name == 'model_id':
field.field_type = "bisheng_model"
field.display_name = "Model Name"
elif field.name in ['model_name', "app_type", "app_id", "app_name", "user_id"]:
field.show = False
================================================
FILE: src/backend/bisheng/template/frontend_node/memories.py
================================================
from typing import Optional
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
from bisheng.template.frontend_node.constants import INPUT_KEY_INFO, OUTPUT_KEY_INFO
from bisheng.template.template.base import Template
from langchain_community.chat_message_histories.mongodb import (DEFAULT_COLLECTION_NAME,
DEFAULT_DBNAME)
from langchain_community.chat_message_histories.postgres import DEFAULT_CONNECTION_STRING
class MemoryFrontendNode(FrontendNode):
# ! Needs testing
def add_extra_fields(self) -> None:
# chat history should have another way to add common field?
# prevent adding incorect field in ChatMessageHistory
base_message_classes = ['BaseEntityStore', 'BaseChatMessageHistory']
if any(base_class in self.base_classes for base_class in base_message_classes):
return
# add return_messages field
self.template.add_field(
TemplateField(
field_type='bool',
required=False,
show=True,
name='return_messages',
advanced=False,
value=False,
))
# add input_key and output_key str fields
self.template.add_field(
TemplateField(
field_type='str',
required=False,
show=True,
name='input_key',
advanced=True,
value='',
))
if self.template.type_name not in {'VectorStoreRetrieverMemory'}:
self.template.add_field(
TemplateField(
field_type='str',
required=False,
show=True,
name='output_key',
advanced=True,
value='',
))
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
FrontendNode.format_field(field, name)
if not isinstance(field.value, str):
field.value = None
if field.name == 'k':
field.required = True
field.show = True
field.field_type = 'int'
field.value = 10
field.display_name = 'Memory Size'
field.password = False
if field.name == 'return_messages':
field.required = False
field.show = True
field.advanced = False
if field.name in {'input_key', 'output_key'}:
field.required = False
field.show = True
field.advanced = False
field.value = 'answer' if field.name == 'output_key' else ''
field.info = (INPUT_KEY_INFO if field.name == 'input_key' else OUTPUT_KEY_INFO)
if field.name == 'memory_key':
field.value = 'chat_history'
if field.name == 'chat_memory':
field.show = True
field.advanced = False
field.required = False
if field.name == 'url':
field.show = True
if field.name == 'entity_store':
field.show = False
if name == 'ConversationEntityMemory' and field.name == 'memory_key':
field.show = False
field.required = False
class PostgresChatMessageHistoryFrontendNode(MemoryFrontendNode):
name: str = 'PostgresChatMessageHistory'
template: Template = Template(
type_name='PostgresChatMessageHistory',
fields=[
TemplateField(
field_type='str',
required=True,
placeholder='',
is_list=False,
show=True,
multiline=False,
name='session_id',
),
TemplateField(
field_type='str',
required=True,
show=True,
name='connection_string',
value=DEFAULT_CONNECTION_STRING,
),
TemplateField(
field_type='str',
required=True,
placeholder='',
is_list=False,
show=True,
multiline=False,
value='message_store',
name='table_name',
),
],
)
description: str = 'Memory store with Postgres'
base_classes: list[str] = ['PostgresChatMessageHistory', 'BaseChatMessageHistory']
class MongoDBChatMessageHistoryFrontendNode(MemoryFrontendNode):
name: str = 'MongoDBChatMessageHistory'
template: Template = Template(
# langchain/memory/chat_message_histories/mongodb.py
# connection_string: str,
# session_id: str,
# database_name: str = DEFAULT_DBNAME,
# collection_name: str = DEFAULT_COLLECTION_NAME,
type_name='MongoDBChatMessageHistory',
fields=[
TemplateField(
field_type='str',
required=True,
placeholder='',
is_list=False,
show=True,
multiline=False,
name='session_id',
),
TemplateField(
field_type='str',
required=True,
show=True,
name='connection_string',
value='',
info='MongoDB connection string (e.g mongodb://mongo_user:password123@mongo:27017)',
),
TemplateField(
field_type='str',
required=True,
placeholder='',
is_list=False,
show=True,
multiline=False,
value=DEFAULT_DBNAME,
name='database_name',
),
TemplateField(
field_type='str',
required=True,
placeholder='',
is_list=False,
show=True,
multiline=False,
value=DEFAULT_COLLECTION_NAME,
name='collection_name',
),
],
)
description: str = 'Memory store with MongoDB'
base_classes: list[str] = ['MongoDBChatMessageHistory', 'BaseChatMessageHistory']
================================================
FILE: src/backend/bisheng/template/frontend_node/output_parsers.py
================================================
from typing import Optional
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
class OutputParserFrontendNode(FrontendNode):
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
FrontendNode.format_field(field, name)
field.show = True
# class RouterOutputParserFrontendNode(FrontendNode):
# @staticmethod
# def format_field(field: TemplateField, name: Optional[str] = None) -> None:
# FrontendNode.format_field(field, name)
# field.show = True
================================================
FILE: src/backend/bisheng/template/frontend_node/prompts.py
================================================
from typing import Optional
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
from bisheng.template.frontend_node.constants import DEFAULT_PROMPT, HUMAN_PROMPT, SYSTEM_PROMPT
from bisheng.template.template.base import Template
from langchain.agents.mrkl import prompt
class PromptFrontendNode(FrontendNode):
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
# if field.field_type == "StringPromptTemplate"
# change it to str
PROMPT_FIELDS = [
'template',
'suffix',
'prefix',
'examples',
'format_instructions',
]
if field.field_type == 'StringPromptTemplate' and 'Message' in str(name):
field.field_type = 'prompt'
field.multiline = True
field.value = HUMAN_PROMPT if 'Human' in field.name else SYSTEM_PROMPT
if field.name == 'template' and field.value == '':
field.value = DEFAULT_PROMPT
if field.name == 'output_parser':
field.show = True
if field.name in PROMPT_FIELDS:
field.field_type = 'prompt'
field.advanced = False
if 'Union' in field.field_type:
if 'BaseMessagePromptTemplate' in field.field_type:
field.field_type = 'BaseMessagePromptTemplate'
elif 'StringPromptTemplate' in field.field_type:
field.field_type = 'StringPromptTemplate'
# All prompt fields should be password=False
field.password = False
class PromptTemplateNode(FrontendNode):
name: str = 'PromptTemplate'
template: Template
description: str
base_classes: list[str] = ['BasePromptTemplate']
def to_dict(self):
return super().to_dict()
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
FrontendNode.format_field(field, name)
if field.name == 'examples':
field.advanced = False
class BasePromptFrontendNode(FrontendNode):
name: str
template: Template
description: str
base_classes: list[str]
def to_dict(self):
return super().to_dict()
class ZeroShotPromptNode(BasePromptFrontendNode):
name: str = 'ZeroShotPrompt'
template: Template = Template(
type_name='ZeroShotPrompt',
fields=[
TemplateField(
field_type='str',
required=False,
placeholder='',
is_list=False,
show=True,
multiline=True,
value=prompt.PREFIX,
name='prefix',
),
TemplateField(
field_type='str',
required=True,
placeholder='',
is_list=False,
show=True,
multiline=True,
value=prompt.FORMAT_INSTRUCTIONS,
name='format_instructions',
),
TemplateField(
field_type='str',
required=True,
placeholder='',
is_list=False,
show=True,
multiline=True,
value=prompt.SUFFIX,
name='suffix',
),
],
)
description: str = 'Prompt template for Zero Shot Agent.'
base_classes: list[str] = ['BasePromptTemplate']
def to_dict(self):
return super().to_dict()
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
PromptFrontendNode.format_field(field, name)
================================================
FILE: src/backend/bisheng/template/frontend_node/retrievers.py
================================================
from typing import Optional
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
STRATEGY_TYPES = ['keyword_front', 'vector_front', 'mix']
class RetrieverFrontendNode(FrontendNode):
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
FrontendNode.format_field(field, name)
# Define common field attributes
field.show = True
if field.name == 'parser_key':
field.display_name = 'Parser Key'
field.password = False
field.advanced = True
field.show = False
if field.name == 'combine_strategy' and name == 'MixEsVectorRetriever':
field.field_type = 'str'
field.required = True
field.is_list = True
field.show = True
field.multiline = False
field.options = STRATEGY_TYPES
field.value = STRATEGY_TYPES[0]
field.name = 'combine_strategy'
field.advanced = False
if field.name in {'metadata', 'tags'} and name == 'MixEsVectorRetriever':
field.show = True
field.advanced = True
================================================
FILE: src/backend/bisheng/template/frontend_node/textsplitters.py
================================================
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
from langchain.text_splitter import Language
class TextSplittersFrontendNode(FrontendNode):
def add_extra_base_classes(self) -> None:
self.base_classes = ['Document']
self.output_types = ['Document']
def add_extra_fields(self) -> None:
self.template.add_field(
TemplateField(
field_type='Document',
required=True,
show=True,
name='documents',
)
)
name = 'separator'
if self.template.type_name == 'CharacterTextSplitter':
name = 'separator'
elif self.template.type_name == 'RecursiveCharacterTextSplitter':
name = 'separators'
# Add a field for type of separator
# which will have Text or any value from the
# Language enum
options = [x.value for x in Language] + ['Text']
options.sort()
self.template.add_field(
TemplateField(
field_type='str',
required=True,
show=True,
name='separator_type',
advanced=False,
is_list=True,
options=options,
value='Text',
display_name='Separator Type',
)
)
self.template.add_field(
TemplateField(
field_type='str',
required=True,
show=True,
value='\\n',
name=name,
display_name='Separator',
)
)
self.template.add_field(
TemplateField(
field_type='int',
required=True,
show=True,
value=1000,
name='chunk_size',
display_name='Chunk Size',
)
)
self.template.add_field(
TemplateField(
field_type='int',
required=True,
show=True,
value=200,
name='chunk_overlap',
display_name='Chunk Overlap',
)
)
================================================
FILE: src/backend/bisheng/template/frontend_node/tools.py
================================================
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
from bisheng.template.template.base import Template
from bisheng.utils.constants import DEFAULT_PYTHON_FUNCTION
class ToolNode(FrontendNode):
name: str = 'Tool'
template: Template = Template(
type_name='Tool',
fields=[
TemplateField(
field_type='str',
required=True,
placeholder='',
is_list=False,
show=True,
multiline=True,
value='',
name='name',
advanced=False,
),
TemplateField(
field_type='str',
required=True,
placeholder='',
is_list=False,
show=True,
multiline=True,
value='',
name='description',
advanced=False,
),
TemplateField(
name='func',
field_type='function',
required=True,
is_list=False,
show=True,
multiline=True,
advanced=False,
),
TemplateField(
field_type='bool',
required=True,
placeholder='',
is_list=False,
show=True,
multiline=False,
value=False,
name='return_direct',
),
TemplateField(
field_type='NestedDict',
required=True,
placeholder='',
show=True,
multiline=True,
value='{"arg1": {"type": "string"}}',
name='args_schema',
),
],
)
description: str = 'Converts a chain, agent or function into a tool.'
base_classes: list[str] = ['Tool', 'BaseTool']
def to_dict(self):
return super().to_dict()
class PythonFunctionToolNode(FrontendNode):
name: str = 'PythonFunctionTool'
template: Template = Template(
type_name='PythonFunctionTool',
fields=[
TemplateField(
field_type='str',
required=True,
placeholder='',
is_list=False,
show=True,
multiline=False,
value='',
name='name',
advanced=False,
),
TemplateField(
field_type='str',
required=True,
placeholder='',
is_list=False,
show=True,
multiline=False,
value='',
name='description',
advanced=False,
),
TemplateField(
field_type='code',
required=True,
placeholder='',
is_list=False,
show=True,
value=DEFAULT_PYTHON_FUNCTION,
name='code',
advanced=False,
),
TemplateField(
field_type='bool',
required=True,
placeholder='',
is_list=False,
show=True,
multiline=False,
value=False,
name='return_direct',
),
],
)
description: str = 'Python function to be executed.'
base_classes: list[str] = ['BaseTool', 'Tool']
def to_dict(self):
return super().to_dict()
class PythonFunctionNode(FrontendNode):
name: str = 'PythonFunction'
template: Template = Template(
type_name='PythonFunction',
fields=[
TemplateField(
field_type='code',
required=True,
placeholder='',
is_list=False,
show=True,
value=DEFAULT_PYTHON_FUNCTION,
name='code',
advanced=False,
)
],
)
description: str = 'Python function to be executed.'
base_classes: list[str] = ['function']
def to_dict(self):
return super().to_dict()
================================================
FILE: src/backend/bisheng/template/frontend_node/utilities.py
================================================
import ast
import json
from typing import Optional
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
class UtilitiesFrontendNode(FrontendNode):
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
FrontendNode.format_field(field, name)
# field.field_type could be "Literal['news', 'search', 'places', 'images']
# we need to convert it to a list
if 'Literal' in field.field_type:
field.options = ast.literal_eval(field.field_type.replace('Literal', ''))
field.is_list = True
field.field_type = 'str'
if isinstance(field.value, dict):
field.field_type = 'code'
field.value = json.dumps(field.value, indent=4)
================================================
FILE: src/backend/bisheng/template/frontend_node/vectorstores.py
================================================
from typing import List, Optional
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
class VectorStoreFrontendNode(FrontendNode):
def add_extra_fields(self) -> None:
extra_fields: List[TemplateField] = []
# Add search_kwargs field
extra_field = TemplateField(
name='search_kwargs',
field_type='code',
required=False,
placeholder='',
show=True,
advanced=True,
multiline=False,
value='{}',
)
extra_field2 = TemplateField(
name='search_type',
field_type='str',
required=False,
placeholder='',
value='similarity',
)
extra_fields.append(extra_field2)
extra_fields.append(extra_field)
if self.template.type_name == 'Weaviate':
extra_field = TemplateField(
name='weaviate_url',
field_type='str',
required=True,
placeholder='http://localhost:8080',
show=True,
advanced=False,
multiline=False,
value='http://localhost:8080',
)
# Add client_kwargs field
extra_field2 = TemplateField(
name='client_kwargs',
field_type='code',
required=False,
placeholder='',
show=True,
advanced=True,
multiline=False,
value='{}',
)
extra_fields.extend((extra_field, extra_field2))
elif self.template.type_name == 'Chroma':
# New bool field for persist parameter
extra_field = TemplateField(
name='persist',
field_type='bool',
required=False,
show=True,
advanced=False,
value=False,
display_name='Persist',
)
extra_fields.append(extra_field)
elif self.template.type_name == 'Pinecone':
# add pinecone_api_key and pinecone_env
extra_field = TemplateField(
name='pinecone_api_key',
field_type='str',
required=False,
placeholder='',
show=True,
advanced=True,
multiline=False,
password=True,
value='',
)
extra_field2 = TemplateField(
name='pinecone_env',
field_type='str',
required=False,
placeholder='',
show=True,
advanced=True,
multiline=False,
value='',
)
extra_fields.extend((extra_field, extra_field2))
elif self.template.type_name == 'FAISS':
extra_field = TemplateField(
name='folder_path',
field_type='str',
required=False,
placeholder='',
show=True,
advanced=True,
multiline=False,
display_name='Local Path',
value='',
)
extra_field2 = TemplateField(
name='index_name',
field_type='str',
required=False,
show=True,
advanced=False,
value='',
display_name='Index Name',
)
extra_fields.extend((extra_field, extra_field2))
elif self.template.type_name == 'SupabaseVectorStore':
self.display_name = 'Supabase'
# Add table_name and query_name
extra_field = TemplateField(
name='table_name',
field_type='str',
required=False,
placeholder='',
show=True,
advanced=True,
multiline=False,
value='',
)
extra_field2 = TemplateField(
name='query_name',
field_type='str',
required=False,
placeholder='',
show=True,
advanced=True,
multiline=False,
value='',
)
# Add supabase_url and supabase_service_key
extra_field3 = TemplateField(
name='supabase_url',
field_type='str',
required=False,
placeholder='',
show=True,
advanced=True,
multiline=False,
value='',
)
extra_field4 = TemplateField(
name='supabase_service_key',
field_type='str',
required=False,
placeholder='',
show=True,
advanced=True,
multiline=False,
password=True,
value='',
)
extra_fields.extend((extra_field, extra_field2, extra_field3, extra_field4))
elif self.template.type_name == 'MongoDBAtlasVectorSearch':
self.display_name = 'MongoDB Atlas'
extra_field = TemplateField(
name='mongodb_atlas_cluster_uri',
field_type='str',
required=False,
placeholder='',
show=True,
advanced=True,
multiline=False,
display_name='MongoDB Atlas Cluster URI',
value='',
)
extra_field2 = TemplateField(
name='collection_name',
field_type='str',
required=False,
placeholder='',
show=True,
advanced=True,
multiline=False,
display_name='Collection Name',
value='',
)
extra_field3 = TemplateField(
name='db_name',
field_type='str',
required=False,
placeholder='',
show=True,
advanced=True,
multiline=False,
display_name='Database Name',
value='',
)
extra_field4 = TemplateField(
name='index_name',
field_type='str',
required=False,
placeholder='',
show=True,
advanced=True,
multiline=False,
display_name='Index Name',
value='',
)
extra_fields.extend((extra_field, extra_field2, extra_field3, extra_field4))
elif self.template.type_name == 'ElasticKeywordsSearch':
extra_field = TemplateField(
name='elasticsearch_url',
field_type='str',
required=False,
placeholder='',
show=True,
advanced=False,
multiline=False,
display_name='ES_connection_url',
value='',
)
extra_field2 = TemplateField(
name='ssl_verify',
field_type='str',
required=False,
placeholder='',
show=True,
advanced=False,
multiline=False,
display_name='ssl_verify',
value='',
)
extra_field3 = TemplateField(
name='llm',
field_type='BaseLLM',
required=False,
show=True,
advanced=False,
display_name='LLM',
)
extra_field4 = TemplateField(
name='prompt',
field_type='BasePromptTemplate',
required=False,
show=True,
advanced=False,
display_name='prompt',
)
extra_fields.extend((extra_field, extra_field2, extra_field3, extra_field4))
elif self.template.type_name == 'ElasticsearchStore':
extra_fields.append(
TemplateField(
name='embedding',
field_type='str',
required=False,
placeholder='',
show=True,
advanced=False,
multiline=False,
value='',
))
extra_fields.append(
TemplateField(
name='connect_kwargs',
field_type='dict',
required=True,
show=True,
advanced=False,
multiline=False,
value={
'es_url': 'http://bisheng-es:9200',
'es_user': 'elastic',
'es_password': ''
},
))
extra_fields.append(
TemplateField(name='index_name',
field_type='str',
required=False,
show=True,
advanced=False,
multiline=False))
if extra_fields:
for field in extra_fields:
self.template.add_field(field)
def add_extra_base_classes(self) -> None:
self.base_classes.extend(('BaseRetriever', 'VectorStoreRetriever'))
if self.name == 'ElasticsearchWithPermissionCheck':
self.base_classes.append('ElasticKeywordsSearch')
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
FrontendNode.format_field(field, name)
# Define common field attributes
basic_fields = [
'work_dir', 'collection_name', 'api_key', 'location', 'persist_directory', 'persist',
'weaviate_url', 'index_name', 'namespace', 'folder_path', 'table_name', 'query_name',
'supabase_url', 'supabase_service_key', 'mongodb_atlas_cluster_uri', 'collection_name',
'db_name', 'ssl_verify', 'elasticsearch_url', 'llm', 'prompt', 'connect_kwargs'
]
advanced_fields = [
'n_dim', 'key', 'prefix', 'distance_func', 'content_payload_key',
'metadata_payload_key', 'timeout', 'host', 'path', 'url', 'port', 'https',
'prefer_grpc', 'grpc_port', 'pinecone_api_key', 'pinecone_env', 'client_kwargs',
'search_kwargs', 'search_type'
]
# Check and set field attributes
if field.name == 'texts':
# if field.name is "texts" it has to be replaced
# when instantiating the vectorstores
field.name = 'documents'
field.field_type = 'Document'
field.display_name = 'Documents'
field.required = False
field.show = True
field.advanced = False
if name == 'MilvusWithPermissionCheck' or name == 'ElasticsearchWithPermissionCheck':
field.show = False
field.advanced = True
elif 'embedding' in field.name:
# for backwards compatibility
field.name = 'embedding'
field.required = True
field.show = True
field.advanced = False
field.display_name = 'Embedding'
field.field_type = 'Embeddings'
if name == 'ElasticKeywordsSearch':
field.show = False
field.required = False
elif name in ['MilvusWithPermissionCheck', 'ElasticsearchWithPermissionCheck']:
field.advanced = True
field.show = False
field.required = False
elif field.name == 'collection_name':
field.show = True
field.advanced = False
field.value = ''
field.field_type = 'knowledge_one' # Knowledge base radio type, front-end rendering radio list
if name == 'MilvusWithPermissionCheck':
field.is_list = True
field.field_type = 'knowledge_list' # Knowledge base multi-select type, front-end rendering multi-select list
field.required = True
elif field.name == 'index_name':
field.show = True
field.advanced = False
field.value = ''
field.field_type = 'knowledge_one'
if name == 'ElasticsearchWithPermissionCheck':
field.is_list = True
field.field_type = 'knowledge_list' # Knowledge base multi-select type, front-end rendering multi-select list
field.required = True
elif field.name in basic_fields:
field.show = True
field.advanced = False
if field.name == 'api_key':
field.display_name = 'API Key'
field.password = True
elif field.name == 'location':
field.value = ':memory:'
field.placeholder = ':memory:'
elif field.name in advanced_fields:
field.show = True
field.advanced = True
if 'key' in field.name:
field.password = False
elif field.name == 'text_key':
field.show = False
elif field.name == 'connection_args':
field.show = True
field.advanced = False
field.value = ''
if name in ['MilvusWithPermissionCheck', 'ElasticsearchWithPermissionCheck']:
field.show = False
field.advanced = True
================================================
FILE: src/backend/bisheng/template/frontend_node/wrappers.py
================================================
from typing import Optional
from bisheng.template.field.base import TemplateField
from bisheng.template.frontend_node.base import FrontendNode
from sqlmodel import true
class WrappersFrontendNode(FrontendNode):
name: str = 'WrappersFrontendNode'
@staticmethod
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
FrontendNode.format_field(field, name)
if name == 'DallEAPIWrapper':
if field.name == 'model_name':
field.show = True
field.name = 'model'
field.value = 'dall-e-3'
elif field.name == 'openai_api_key':
field.show = true
field.name = 'api_key'
field.display_name = 'openai_api_key'
field.password = true
elif field.name == 'openai_api_base':
field.show = True
field.name = 'api_base'
field.display_name = 'openai_api_base'
elif field.name == 'openai_proxy':
field.show = True
elif field.name == 'n':
field.show = True
field.field_type = 'int'
field.value = 1
field.info = '生成图片数量,使用dalle3 只能填1'
field.advanced = True
elif field.name == 'size':
field.show = True
field.is_list = True
field.field_type = 'str'
field.options = ['256x256', '512x512', '1024x1024', '1024x1792', '1792x1024']
field.value = field.options[2]
field.advanced = True
elif field.name == 'quality':
field.show = True
field.field_type = 'str'
field.advanced = True
field.value = 'standard'
elif field.name == 'request_timeout':
field.show = True
field.name = 'timeout'
field.value = 30
================================================
FILE: src/backend/bisheng/template/template/__init__.py
================================================
================================================
FILE: src/backend/bisheng/template/template/base.py
================================================
from typing import Callable, Optional, Union
from bisheng.template.field.base import TemplateField
from bisheng.utils.constants import DIRECT_TYPES
from pydantic import BaseModel
class Template(BaseModel):
type_name: str
fields: list[TemplateField]
def process_fields(
self,
name: Optional[str] = None,
format_field_func: Union[Callable, None] = None,
):
if format_field_func:
for field in self.fields:
format_field_func(field, name)
def sort_fields(self):
# first sort alphabetically
# then sort fields so that fields that have .field_type in DIRECT_TYPES are first
self.fields.sort(key=lambda x: x.name)
self.fields.sort(key=lambda x: x.field_type in DIRECT_TYPES, reverse=False)
def to_dict(self, format_field_func=None):
self.process_fields(self.type_name, format_field_func)
self.sort_fields()
result = {field.name: field.to_dict() for field in self.fields}
result['_type'] = self.type_name # type: ignore
return result
def add_field(self, field: TemplateField) -> None:
self.fields.append(field)
def get_field(self, field_name: str) -> TemplateField:
"""Returns the field with the given name."""
field = next((field for field in self.fields if field.name == field_name), None)
if field is None:
raise ValueError(f'Field {field_name} not found in template {self.type_name}')
return field
def update_field(self, field_name: str, field: TemplateField) -> None:
"""Updates the field with the given name."""
for idx, template_field in enumerate(self.fields):
if template_field.name == field_name:
self.fields[idx] = field
return
raise ValueError(f'Field {field_name} not found in template {self.type_name}')
def upsert_field(self, field_name: str, field: TemplateField) -> None:
"""Updates the field with the given name or adds it if it doesn't exist."""
try:
self.update_field(field_name, field)
except ValueError:
self.add_field(field)
================================================
FILE: src/backend/bisheng/tool/__init__.py
================================================
================================================
FILE: src/backend/bisheng/tool/api/__init__.py
================================================
================================================
FILE: src/backend/bisheng/tool/api/tool.py
================================================
import json
from typing import Optional, Dict
from fastapi import APIRouter, Depends, Body, Request
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.schemas.api import UnifiedResponseModel, resp_200
from bisheng.mcp_manage.langchain.tool import McpTool
from bisheng.mcp_manage.manager import ClientManager
from bisheng.tool.domain.models.gpts_tools import GptsToolsTypeRead
from bisheng.tool.domain.schemas import TestToolReq
from bisheng.tool.domain.services.openapi import OpenApiSchema
from bisheng.tool.domain.services.tool import ToolServices
from bisheng_langchain.gpts.tools.api_tools.openapi import OpenApiTools
router = APIRouter(prefix='/tool', tags=['Tool'])
@router.get('')
async def get_tool_list(*,
is_preset: Optional[int] = None,
login_user: UserPayload = Depends(UserPayload.get_login_user)):
"""Query all visibletool Vertical"""
res = await ToolServices(login_user=login_user).get_tool_list(is_preset)
return resp_200(data=res)
@router.post('')
async def add_tool_type(request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user),
req: Dict = Body(default={})):
""" Add customizationtool """
req = GptsToolsTypeRead(**req)
services = ToolServices(request=request, login_user=login_user)
return resp_200(data=await services.add_tools(req))
@router.put('')
async def update_tool_type(request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user),
req: Dict = Body(default={})):
""" Custom field updated.tool """
req = GptsToolsTypeRead(**req)
services = ToolServices(request=request, login_user=login_user)
return resp_200(data=await services.update_tools(req))
@router.delete('')
async def delete_tool_type(*, request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user),
tool_type_id: int = Body(..., embed=True)):
""" Remove Customizer """
services = ToolServices(request=request, login_user=login_user)
await services.delete_tools(tool_type_id)
return resp_200()
@router.post('/config')
async def update_tool_config(*,
login_user: UserPayload = Depends(UserPayload.get_admin_user),
tool_id: int = Body(description='Tool Category UniqueID'),
extra: Dict = Body(..., description='Configuration information for the tool')):
""" Update the configuration of the tool """
data = await ToolServices(login_user=login_user).update_tool_config(tool_id, extra)
return resp_200(data=data)
@router.post('/schema')
async def get_tool_schema(request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user),
download_url: Optional[str] = Body(default=None,
description='MengunduhurlIf it is not empty, download it firsturl'),
file_content: Optional[str] = Body(default=None, description='files uploaded')):
""" Download or parseopenapi schemaThe contents of the Convert to Assistant Customizer Format """
services = ToolServices(request=request, login_user=login_user)
tool_type = await services.parse_openapi_schema(download_url, file_content)
return resp_200(data=tool_type)
@router.post('/mcp/schema')
async def get_mcp_tool_schema(request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user),
file_content: Optional[str] = Body(default=None, embed=True,
description='mcpService Configuration Content')):
""" analyzingmcpTool Profile """
services = ToolServices(request=request, login_user=login_user)
tool_type = await services.parse_mcp_schema(file_content)
return resp_200(data=tool_type)
@router.post('/test')
async def tool_run(*, login_user: UserPayload = Depends(UserPayload.get_login_user), req: TestToolReq):
""" Test custom tool """
extra = json.loads(req.extra)
extra.update({'api_location': req.api_location, 'parameter_name': req.parameter_name})
tool_params = OpenApiSchema.parse_openapi_tool_params('test', 'test', json.dumps(extra),
req.server_host, req.auth_method,
req.auth_type, req.api_key)
openapi_tool = OpenApiTools.get_api_tool('test', **tool_params)
resp = await openapi_tool.arun(req.request_params)
return resp_200(data=resp)
@router.post('/mcp/test')
async def mcp_tool_run(login_user: UserPayload = Depends(UserPayload.get_login_user),
req: TestToolReq = None):
""" TestmcpTools for Services """
# Instantiatemcpservice object, getting a list of tools
client = await ClientManager.connect_mcp_from_json(req.openapi_schema)
extra = json.loads(req.extra)
tool_name = extra.get('name')
mcp_tool = McpTool.get_mcp_tool(name=tool_name, description=extra.get("description"), mcp_client=client,
mcp_tool_name=tool_name, arg_schema=extra.get('inputSchema', {}))
resp = await mcp_tool.arun(req.request_params)
return resp_200(data=resp)
@router.post('/mcp/refresh')
async def refresh_all_mcp_tools(request: Request, login_user: UserPayload = Depends(UserPayload.get_login_user)):
""" Refresh all of the user's currentmcpTools List """
services = ToolServices(request=request, login_user=login_user)
error_name = await services.refresh_all_mcp()
return resp_200(data=error_name)
@router.get("/linsight/preset", summary="Get a list of Ideas presets", response_model=UnifiedResponseModel)
async def get_linsight_tools():
"""
Get a list of Ideas presets
"""
tools = await ToolServices.get_linsight_tools()
return resp_200(data=tools)
================================================
FILE: src/backend/bisheng/tool/domain/__init__.py
================================================
================================================
FILE: src/backend/bisheng/tool/domain/const.py
================================================
from enum import Enum
class ToolPresetType(Enum):
PRESET = 1 # Provisioning Tools
API = 0 # CustomizableAPITools
MCP = 2 # mcpTypes of Tools
class AuthMethod(Enum):
NO = 0
API_KEY = 1
class AuthType(Enum):
BASIC = "basic"
BEARER = "bearer"
CUSTOM = "custom"
================================================
FILE: src/backend/bisheng/tool/domain/langchain/__init__.py
================================================
================================================
FILE: src/backend/bisheng/tool/domain/langchain/knowledge.py
================================================
from typing import Any, Type, List, Optional
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.documents import Document, BaseDocumentCompressor
from langchain_core.language_models import BaseChatModel
from langchain_core.prompts import SystemMessagePromptTemplate, HumanMessagePromptTemplate, ChatPromptTemplate
from langchain_core.retrievers import BaseRetriever
from langchain_core.tools import BaseTool
from pydantic import BaseModel, Field
from bisheng.core.ai.rerank.rrf_rerank import RRFRerank
system_template = """# 任务
你是一位知识库问答助手,遵守以下规则回答问题:
1. 严谨、专业地回答用户的问题。
2. 回答时须严格基于【参考文本】中的内容:
- 如果【参考文本】中有明确与用户问题相关的文字内容,请依据相关内容进行回答;如果【参考文本】中没有任何与用户问题相关的内容,则直接回复:“没有找到相关内容”。
- 如果相关内容中包含 markdown 格式的图片(例如 ),必须严格保留其原始 markdown 格式,不得添加引号、代码块(`或```)或其他特殊符号,也不得修改图片路径,保证可以正常渲染 markdown 图片。
3. 当【参考文本】中的内容来源于多个不同的信息源时,若相关内容存在明显差异或冲突,请分别列出这些差异或冲突的答案;若无差异或冲突,只给出一个统一的回答即可。
# 参考文本
{context}"""
messages = [
SystemMessagePromptTemplate.from_template(system_template),
HumanMessagePromptTemplate.from_template("{question}"),
]
CHAT_PROMPT = ChatPromptTemplate.from_messages(messages)
class ToolInputSchema(BaseModel):
query: str = Field(description='question asked by the user.')
class KnowledgeRetrieverTool(BaseTool):
name: str = "knowledge_retriever_tool"
description: str = "在知识库中检索与查询相关的文档内容。"
args_schema: Type[BaseModel] = ToolInputSchema
vector_retriever: Optional[BaseRetriever] = None
elastic_retriever: Optional[BaseRetriever] = None
rerank: Optional[BaseDocumentCompressor] = None
max_content: int = Field(default=15000, description='The max length of the combined document content.')
sort_by_source_and_index: bool = Field(default=False, description='Sort by document name & chunk index.')
rrf_weights: List[float] = Field(default=None)
rrf_remove_zero_score: bool = Field(default=False)
def _run(self, query: str, **kwargs: Any) -> List[Document]:
milvus_docs, es_docs = [], []
if self.vector_retriever:
milvus_docs = self.vector_retriever.invoke(query)
if self.elastic_retriever:
es_docs = self.elastic_retriever.invoke(query)
finally_docs = self._rrf_rerank(milvus_docs, es_docs, query)
if self.rerank:
finally_docs = self.rerank.compress_documents(finally_docs, query)
return finally_docs
async def _arun(self, query: str, **kwargs: Any) -> List[Document]:
milvus_docs, es_docs = [], []
if self.vector_retriever:
milvus_docs = await self.vector_retriever.ainvoke(query)
if self.elastic_retriever:
es_docs = await self.elastic_retriever.ainvoke(query)
finally_docs = self._rrf_rerank(milvus_docs, es_docs, query)
if self.rerank:
finally_docs = await self.rerank.acompress_documents(finally_docs, query)
return finally_docs
def _rrf_rerank(self, milvus_docs: List[Document], es_docs: List[Document], query: str) -> List[Document]:
if not milvus_docs and not es_docs:
return []
rrf_rerank = RRFRerank(retrievers=[self.vector_retriever, self.elastic_retriever],
weights=self.rrf_weights,
remove_zero_score=self.rrf_remove_zero_score)
finally_docs = rrf_rerank.compress_documents(documents=[es_docs, milvus_docs], query=query)
# limit by max_chunk_size
doc_num, doc_content_sum = 0, 0
same_file_id = set()
for doc in finally_docs:
if doc_content_sum > self.max_content:
break
doc_content_sum += len(doc.page_content)
same_file_id.add((doc.metadata.get('document_id'), doc.metadata.get('document_name')))
doc_num += 1
finally_docs = finally_docs[:doc_num]
# sort by source and index if only one file
if self.sort_by_source_and_index and len(same_file_id) == 1:
finally_docs = sorted(finally_docs,
key=lambda x: (x.metadata.get('document_name', ""), x.metadata.get('chunk_index', 0)))
return finally_docs
class KnowledgeRagTool(BaseTool):
name: str
description: str
args_schema: Type[BaseModel] = ToolInputSchema
llm: BaseChatModel
chat_prompt: Optional[ChatPromptTemplate] = CHAT_PROMPT
vector_retriever: Optional[BaseRetriever] = None
elastic_retriever: Optional[BaseRetriever] = None
max_content: int = Field(default=15000, description='The max length of the combined document content.')
sort_by_source_and_index: bool = Field(default=False, description='Sort by document name & chunk index.')
rrf_weights: List[float] = Field(default=None)
rrf_remove_zero_score: bool = Field(default=False)
knowledge_retriever_tool: KnowledgeRetrieverTool = None
@classmethod
def init_knowledge_rag_tool(cls, name: str, description: str, **kwargs) -> BaseTool:
llm = kwargs.pop('llm')
chat_prompt = kwargs.pop('chat_prompt', CHAT_PROMPT)
# cancel assistant deep callback
kwargs.pop("callbacks", None)
knowledge_retriever_tool = KnowledgeRetrieverTool(**kwargs)
return cls(name=name,
description=description,
args_schema=ToolInputSchema,
llm=llm,
chat_prompt=chat_prompt,
knowledge_retriever_tool=knowledge_retriever_tool)
def _run(self, query: str) -> Any:
# 1. retrieve documents
finally_docs = self.knowledge_retriever_tool.invoke({"query": query})
llm_inputs = self._get_llm_inputs(query, finally_docs)
qa_chain = create_stuff_documents_chain(llm=self.llm, prompt=self.chat_prompt)
return qa_chain.invoke(llm_inputs)
async def _arun(self, query: str) -> Any:
finally_docs = await self.knowledge_retriever_tool.ainvoke({"query": query})
llm_inputs = self._get_llm_inputs(query, finally_docs)
qa_chain = create_stuff_documents_chain(llm=self.llm, prompt=self.chat_prompt)
return await qa_chain.ainvoke(llm_inputs)
def _get_llm_inputs(self, query: str, finally_docs: List[Document]) -> Any:
inputs = {
"context": finally_docs,
}
if "question" in self.chat_prompt.input_variables:
inputs["question"] = query
return inputs
================================================
FILE: src/backend/bisheng/tool/domain/langchain/linsight_knowledge.py
================================================
import json
from typing import Optional, Type
from langchain_core.tools import BaseTool
from pydantic import BaseModel, Field
from bisheng.api.services.knowledge_imp import decide_vectorstores
from bisheng.linsight.domain.models.linsight_session_version import LinsightSessionVersionDao
from bisheng.interface.importing.utils import import_vectorstore
from bisheng.interface.initialize.loading import instantiate_vectorstore
from bisheng.knowledge.domain.models.knowledge import KnowledgeDao
from bisheng.llm.domain import LLMService
from bisheng.llm.domain.models import LLMDao
class ToolInput(BaseModel):
query: str = Field(..., description='需要检索的关键词')
knowledge_id: str = Field(..., description='语义检索库id')
limit: int = Field(default=2, description='返回结果的最大数量')
call_reason: str = Field(default='', description='调用该工具的原因,原因中不要使用id来描述文件或知识库')
class SearchKnowledgeBase(BaseTool):
name: str = "search_knowledge_base"
description: str = """在语义检索库中搜索相关内容。
用法:在你需要在知识库中进行语义搜索时,调用此工具。
Args:
query: 需要检索的关键词
knowledge_id: 语义检索库id
limit: 返回结果的最大数量,默认为2
Returns:
包含搜索结果(chunk的列表)的字典"""
args_schema: Type[BaseModel] = ToolInput
def _run(self, query: str, knowledge_id: Optional[str] = None,
**kwargs) -> str:
"""Use the tool."""
return "not supported in sync mode, please use async version"
async def _arun(self, query: str, knowledge_id: Optional[str] = None,
**kwargs) -> str:
limit = kwargs.get('limit', None) or 2
if not query:
raise ValueError("query Parameter shall not be empty")
try:
knowledge_id = int(knowledge_id)
return await self.search_knowledge(query, knowledge_id, limit)
except ValueError:
return await self.search_linsight_file(query, knowledge_id, limit)
async def base_search(self, vector_client, query: str, k: int):
documents = await vector_client.asimilarity_search(query, k=k)
if not documents:
# "没有找到相关的知识内容"
return '{"状态": "无结果", "错误信息":"没有找到相关的知识内容"}'
result = {
"状态": "成功",
"结果": [one.page_content for one in documents]
}
result = json.dumps(result, ensure_ascii=False, indent=2)
return result
async def search_linsight_file(self, query: str, file_id: str, limit: int) -> str:
"""检索Linsight用户上传的文件"""
session_info = await LinsightSessionVersionDao.get_session_version_by_file_id(file_id=file_id)
if not session_info:
raise Exception("文件不存在或已被删除")
files = session_info.files
file_info = None
for one in files:
if one.get("file_id") == file_id:
file_info = one
break
if not file_info:
raise Exception("File does not exist or has been deleted")
class_obj = import_vectorstore('Milvus')
embeddings = await LLMService.get_bisheng_linsight_embedding(session_info.user_id,
file_info.get("embedding_model_id"))
params = {
'collection_name': file_info.get("collection_name"),
'embedding': embeddings,
'metadata_expr': f'file_id in {[file_id]}'
}
milvus_client = instantiate_vectorstore('Milvus', class_object=class_obj, params=params)
return await self.base_search(milvus_client, query, limit)
async def search_knowledge(self, query: str, knowledge_id: int, limit: int) -> str:
knowledge_info = KnowledgeDao.query_by_id(knowledge_id)
if not knowledge_info:
raise Exception("Knowledgebase does not exist or has been deleted")
if not knowledge_info.model:
# "Knowledge Base Not ConfiguredembeddingModels"
raise Exception("Knowledge Base Not ConfiguredembeddingModels")
embed_info = LLMDao.get_model_by_id(int(knowledge_info.model))
if not embed_info:
# "Configured by the Knowledge BaseembeddingModel does not exist or has been deleted"
raise Exception("Configured by the Knowledge BaseembeddingModel does not exist or has been deleted")
embeddings = await LLMService.get_bisheng_knowledge_embedding(0, model_id=int(knowledge_info.model))
milvus_client = decide_vectorstores(
knowledge_info.collection_name, "Milvus", embeddings, knowledge_id=knowledge_id
)
return await self.base_search(milvus_client, query, limit)
================================================
FILE: src/backend/bisheng/tool/domain/models/__init__.py
================================================
================================================
FILE: src/backend/bisheng/tool/domain/models/gpts_tools.py
================================================
import json
from datetime import datetime
from typing import Dict, List, Optional
from pydantic import model_validator
from sqlalchemy import JSON, Column, DateTime, String, text, func
from sqlmodel import Field, or_, select, Text, update, col
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session, get_async_db_session
from bisheng.utils import md5_hash, generate_uuid
from bisheng.utils.mask_data import JsonFieldMasker
from ..const import AuthType, ToolPresetType
class GptsToolsBase(SQLModelSerializable):
name: str = Field(sa_column=Column(String(length=125), index=True))
logo: Optional[str] = Field(default=None, sa_column=Column(String(length=512), index=False))
desc: Optional[str] = Field(default=None, sa_column=Column(String(length=2048), index=False))
tool_key: str = Field(sa_column=Column(String(length=125), index=False))
type: int = Field(default=0, description='of the category to which they belongID')
is_preset: int = Field(default=ToolPresetType.API.value, description="The category of the tool, the historical reason field is not renamed")
is_delete: int = Field(default=0, description='1 Indicates logical deletion')
api_params: Optional[List[Dict]] = Field(default=None, sa_column=Column(JSON), description='Used to storeapiParameter and other information')
user_id: Optional[int] = Field(default=None, index=True, description='Create UserID, nullIndicates system creation')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class GptsToolsTypeBase(SQLModelSerializable):
id: Optional[int] = Field(default=None, index=True, primary_key=True)
name: str = Field(default='', sa_column=Column(String(length=1024)), description="Tool Category Name")
logo: Optional[str] = Field(default='', description="of the tool categorylogoFile URL")
extra: Optional[str] = Field(default='{}', sa_column=Column(Text),
description="Configuration information for the tool category to store the configuration information required for the tool category")
description: str = Field(default='', description="Description of the tool category")
server_host: Optional[str] = Field(default='', description="The access root address of the custom tool, which must behttporhttpsWhat/the beginning?")
auth_method: Optional[int] = Field(default=0, description="Authentication method of tool category")
api_key: Optional[str] = Field(default='', description="Tool Authenticationapi_key", sa_column=Column(String(length=2048)),
max_length=1000)
auth_type: Optional[str] = Field(default=AuthType.BASIC.value, description="Authentication method of tool authentication")
is_preset: Optional[int] = Field(default=ToolPresetType.API.value, description="The category of the tool, the historical reason field is not renamed")
user_id: Optional[int] = Field(default=None, index=True, description='Create UserID, nullIndicates system creation')
is_delete: int = Field(default=0, description='1 Indicates logical deletion')
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class GptsTools(GptsToolsBase, table=True):
__tablename__ = 't_gpts_tools'
extra: Optional[str | dict] = Field(default=None, sa_column=Column(Text, index=False),
description='Used to store additional information, such as parameter requirements, including &initdb_conf_key Data field'
'Indicates that the configuration information is obtained from the system configuration,For multi-level use.with ')
id: Optional[int] = Field(default=None, primary_key=True)
class GptsToolsType(GptsToolsTypeBase, table=True):
__tablename__ = 't_gpts_tools_type'
openapi_schema: str = Field(default="", sa_column=Column(Text),
description="of the tool categoryschemaContent, complies withopenapiSpecified Data")
class GptsToolsTypeRead(GptsToolsTypeBase):
openapi_schema: Optional[str] = Field(default="", description="of the tool categoryschemaContent, complies withopenapiSpecified Data")
children: Optional[List[GptsTools]] = Field(default_factory=list, description="List of tools under the Tools category")
parameter_name: Optional[str] = Field(default="", description="Custom request header parameter name")
api_location: Optional[str] = Field(default="", description="Custom Request Header Parameter Position header or query")
write: Optional[bool] = Field(default=False, description="Do you have write access")
@model_validator(mode="after")
def validate(self):
# Needs to be populated when echoingapi_locationAndparameter_nameData field
if self.extra and not self.api_location:
result = json.loads(self.extra)
self.api_location = result.get('api_location')
self.parameter_name = result.get('parameter_name')
def mask_sensitive_data(self):
json_masker = JsonFieldMasker()
# The provisioning tool needs to be desensitizedextraData field
if self.extra and self.is_preset == ToolPresetType.PRESET.value:
extra_json = json.loads(self.extra)
extra_json = json_masker.mask_json(extra_json)
self.extra = json.dumps(extra_json, ensure_ascii=False)
return self
class GptsToolsRead(GptsToolsBase):
id: int
class GptsToolsDao(GptsToolsBase):
@classmethod
def insert(cls, obj: GptsTools):
with get_sync_db_session() as session:
session.add(obj)
session.commit()
session.refresh(obj)
return obj
@classmethod
def query_by_name(cls, name: str) -> List[GptsTools]:
with get_sync_db_session() as session:
statement = select(GptsTools).where(GptsTools.name.like(f'%{name}%'))
return session.exec(statement).all()
@classmethod
def update_tools(cls, data: GptsTools) -> GptsTools:
with get_sync_db_session() as session:
session.add(data)
session.commit()
session.refresh(data)
return data
@classmethod
def update_tool_list(cls, data: List[GptsTools]) -> List[GptsTools]:
with get_sync_db_session() as session:
for one in data:
session.add(one)
session.commit()
return data
@classmethod
def delete_tool(cls, data: GptsTools) -> GptsTools:
data.is_delete = 1
return cls.update_tools(data)
@classmethod
def delete_tool_by_ids(cls, tool_ids: List[int]) -> None:
with get_sync_db_session() as session:
statement = update(GptsTools).where(GptsTools.id.in_(tool_ids)).values(is_delete=1)
session.exec(statement)
session.commit()
@classmethod
def get_one_tool(cls, tool_id: int) -> GptsTools:
with get_sync_db_session() as session:
statement = select(GptsTools).where(GptsTools.id == tool_id)
return session.exec(statement).first()
@classmethod
async def aget_one_tool(cls, tool_id: int) -> GptsTools:
statement = select(GptsTools).where(GptsTools.id == tool_id)
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.first()
@classmethod
def get_list_by_ids(cls, tool_ids: List[int]) -> List[GptsTools]:
statement = select(GptsTools).where(col(GptsTools.id).in_(tool_ids)).where(GptsTools.is_delete == 0)
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
async def aget_list_by_ids(cls, tool_ids: List[int]) -> List[GptsTools]:
statement = select(GptsTools).where(col(GptsTools.id).in_(tool_ids)).where(GptsTools.is_delete == 0)
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
def get_list_by_user(cls, user_id: int, page: int = 0, page_size: int = 0) -> List[GptsTools]:
"""
Get all the tools available to your users
"""
with get_sync_db_session() as session:
statement = select(GptsTools).where(
or_(GptsTools.user_id == user_id,
GptsTools.is_preset == ToolPresetType.PRESET.value)).where(GptsTools.is_delete == 0)
if page and page_size:
statement = statement.offset((page - 1) * page_size).limit(page_size)
statement = statement.order_by(GptsTools.create_time.desc())
list_tools = session.exec(statement).all()
return list_tools
@classmethod
def get_list_by_type(cls, tool_type_ids: List[int]) -> List[GptsTools]:
"""
Get all the tools under the Tools category
"""
with get_sync_db_session() as session:
statement = select(GptsTools).where(
GptsTools.type.in_(tool_type_ids)).where(
GptsTools.is_delete == 0).order_by(GptsTools.create_time.desc())
return session.exec(statement).all()
@classmethod
async def aget_list_by_type(cls, tool_type_ids: List[int]) -> List[GptsTools]:
"""
Get all the tools under the Tools category asynchronously
"""
statement = select(GptsTools).where(
GptsTools.type.in_(tool_type_ids)).where(
GptsTools.is_delete == 0).order_by(GptsTools.create_time.desc())
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
def get_all_tool_type(cls, tool_type_ids: List[int]) -> List[GptsToolsType]:
"""
Get all tool categories
"""
with get_sync_db_session() as session:
statement = select(GptsToolsType).filter(
GptsToolsType.is_delete == 0,
GptsToolsType.id.in_(tool_type_ids)
)
return session.exec(statement).all()
@classmethod
async def aget_all_tool_type(cls, tool_type_ids: List[int]) -> List[GptsToolsType]:
""" get tool types by tool ids """
statement = select(GptsToolsType).filter(
col(GptsToolsType.is_delete) == 0,
col(GptsToolsType.id).in_(tool_type_ids)
)
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
def get_preset_tool_type(cls) -> List[GptsToolsType]:
"""
Get all preset tool categories
"""
with get_sync_db_session() as session:
statement = select(GptsToolsType).where(GptsToolsType.is_preset == ToolPresetType.PRESET.value,
GptsToolsType.is_delete == 0)
statement = statement.order_by(GptsToolsType.update_time.desc())
return session.exec(statement).all()
@classmethod
async def aget_preset_tool_type(cls) -> List[GptsToolsType]:
"""
Get all preset tool categories asynchronously
"""
statement = select(GptsToolsType).where(GptsToolsType.is_preset == ToolPresetType.PRESET.value,
GptsToolsType.is_delete == 0)
statement = statement.order_by(GptsToolsType.update_time.desc())
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
def _get_user_tool_type_statement(cls, user_id: int, extra_tool_type_ids: List[int] = None,
include_preset: bool = True,
is_preset: ToolPresetType = None):
"""
Get the value of all tool categories visible to the userstatement
"""
statement = select(GptsToolsType).where(GptsToolsType.is_delete == 0)
filters = []
if extra_tool_type_ids:
filters.append(or_(
GptsToolsType.id.in_(extra_tool_type_ids),
GptsToolsType.user_id == user_id
))
else:
filters.append(GptsToolsType.user_id == user_id)
if include_preset:
filters.append(GptsToolsType.is_preset == ToolPresetType.PRESET.value)
if is_preset is not None:
statement = statement.where(GptsToolsType.is_preset == is_preset.value)
statement = statement.where(or_(*filters))
statement = statement.order_by(func.field(GptsToolsType.is_preset,
ToolPresetType.PRESET.value).desc(),
GptsToolsType.update_time.desc())
return statement
@classmethod
def get_user_tool_type(cls, user_id: int, extra_tool_type_ids: List[int] = None, include_preset: bool = True,
is_preset: ToolPresetType = None) -> List[GptsToolsType]:
"""
Get all tool categories visible to the user
"""
statement = cls._get_user_tool_type_statement(user_id, extra_tool_type_ids, include_preset, is_preset)
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
async def aget_user_tool_type(cls, user_id: int, extra_tool_type_ids: List[int] = None, include_preset: bool = True,
is_preset: ToolPresetType = None) -> List[GptsToolsType]:
"""
Get all tool categories visible to the user
"""
statement = cls._get_user_tool_type_statement(user_id, extra_tool_type_ids, include_preset, is_preset)
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
def filter_tool_types_by_ids(cls, tool_type_ids: List[int], keyword: Optional[str] = None, page: int = 0,
limit: int = 0, include_preset: bool = False) -> (List[GptsToolsType], int):
"""
By Tool CategoryidFilter Category
"""
statement = select(GptsToolsType).where(GptsToolsType.is_delete == 0)
count_statement = select(func.count(GptsToolsType.id)).where(GptsToolsType.is_delete == 0)
if not include_preset:
statement = statement.where(GptsToolsType.is_preset != ToolPresetType.PRESET.value)
count_statement = count_statement.where(GptsToolsType.is_preset != ToolPresetType.PRESET.value)
if tool_type_ids:
statement = statement.where(GptsToolsType.id.in_(tool_type_ids))
count_statement = count_statement.where(GptsToolsType.id.in_(tool_type_ids))
if keyword:
statement = statement.where(or_(
GptsToolsType.name.like(f'%{keyword}%'),
GptsToolsType.description.like(f'%{keyword}%')
))
count_statement = count_statement.where(or_(
GptsToolsType.name.like(f'%{keyword}%'),
GptsToolsType.description.like(f'%{keyword}%')
))
if limit and page:
statement = statement.offset(
(page - 1) * limit
).limit(limit).order_by(GptsToolsType.update_time.desc())
with get_sync_db_session() as session:
return session.exec(statement).all(), session.scalar(count_statement)
@classmethod
def get_one_tool_type(cls, tool_type_id: int) -> GptsToolsType:
"""
Get details about a category, includingopenapiright of privacyschemaAgreement Wording
"""
with get_sync_db_session() as session:
statement = select(GptsToolsType).where(GptsToolsType.id == tool_type_id)
return session.exec(statement).first()
@classmethod
async def aget_one_tool_type(cls, tool_type_id: int) -> GptsToolsType:
"""
Get details about a category asynchronously, includingopenapiright of privacyschemaAgreement Wording
"""
statement = select(GptsToolsType).where(GptsToolsType.id == tool_type_id)
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.first()
@classmethod
async def get_one_tool_type_by_name(cls, user_id: int, tool_type_name: str) -> GptsToolsType:
"""
Get the details of a tool category asynchronously
"""
statement = select(GptsToolsType).filter(
col(GptsToolsType.name) == tool_type_name,
col(GptsToolsType.user_id) == user_id,
col(GptsToolsType.is_delete) == 0
)
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.first()
@classmethod
async def insert_tool_type(cls, data: GptsToolsTypeRead) -> GptsToolsTypeRead:
"""
Add Tool Category and the corresponding list of tools
"""
children = data.children
gpts_tool_type = GptsToolsType(**data.model_dump(exclude={'children'}))
# Insert Tool Category
async with get_async_db_session() as session:
session.add(gpts_tool_type)
await session.commit()
await session.refresh(gpts_tool_type)
if children:
# Insert Tools List
for one in children:
one.type = gpts_tool_type.id
one.tool_key = cls.get_tool_key(gpts_tool_type.id, one)
session.add_all(children)
await session.commit()
res = GptsToolsTypeRead(**gpts_tool_type.model_dump(), children=children)
return res
@classmethod
async def update_tool_type(cls, data: GptsToolsType,
del_tool_ids: List[int],
add_tool_list: List[GptsTools],
update_tool_list: List[GptsTools]):
"""
Update Tool Category Information
param data: GptsToolsType
param del_tool_ids: Tools to removeid
param add_tool_list: List of tools that need to be added
param update_tool_list: List of tools that need to be updated
"""
finally_children = []
async with get_async_db_session() as session:
# Update tool category data
session.add(data)
# Delete a list of tools that don't exist
delete_old_tools = update(GptsTools).where(GptsTools.id.in_(del_tool_ids)).values(is_delete=1)
await session.exec(delete_old_tools)
# Add Tool List
for one in add_tool_list:
one.type = data.id
one.tool_key = cls.get_tool_key(data.id, one)
session.add(one)
finally_children.append(one)
# Update Tool List
for one in update_tool_list:
session.add(one)
finally_children.append(one)
await session.commit()
await session.refresh(data)
@classmethod
async def delete_tool_type(cls, tool_type_id: int) -> None:
"""
Delete Tool Category
"""
statement = update(GptsToolsType).where(col(GptsToolsType.id) == tool_type_id,
col(GptsToolsType.is_preset) != ToolPresetType.PRESET.value).values(
is_delete=1)
tool_statement = update(GptsTools).where(col(GptsTools.type) == tool_type_id,
col(GptsTools.is_preset) != ToolPresetType.PRESET.value).values(
is_delete=1)
async with get_async_db_session() as session:
await session.exec(statement)
await session.exec(tool_statement)
await session.commit()
@classmethod
def get_tool_key(cls, tool_type_id: int, gpt_tool: GptsTools) -> str:
"""
of stitching custom toolstool_key
"""
if gpt_tool.is_preset == ToolPresetType.MCP.value:
return f"{gpt_tool.name}_{generate_uuid()[:8]}"
return f"tool_type_{tool_type_id}_{md5_hash(gpt_tool.name)}"
@classmethod
async def update_tools_extra(cls, tool_type_id: int, extra: str) -> bool:
async with get_async_db_session() as session:
statement = update(GptsToolsType).where(col(GptsToolsType.id) == tool_type_id).values(extra=extra)
await session.exec(statement)
statement = update(GptsTools).where(col(GptsTools.type) == tool_type_id).values(extra=text('NULL'))
await session.exec(statement)
await session.commit()
return True
@classmethod
def get_tool_by_tool_key(cls, tool_key: str) -> GptsTools:
with get_sync_db_session() as session:
statement = select(GptsTools).where(GptsTools.tool_key == tool_key)
return session.exec(statement).first()
@classmethod
async def aget_tool_by_tool_key(cls, tool_key: str) -> GptsTools:
statement = select(GptsTools).where(GptsTools.tool_key == tool_key)
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.first()
================================================
FILE: src/backend/bisheng/tool/domain/schemas.py
================================================
from typing import Optional, Dict
from pydantic import BaseModel, Field
from bisheng.tool.domain.const import AuthMethod, AuthType
class TestToolReq(BaseModel):
server_host: str = Field(default='', description='Root address of the service')
openapi_schema: Optional[str] = Field(default='', description='openapi schema')
extra: str = Field(default='', description='Api After the object is parsedextraData field')
auth_method: int = Field(default=AuthMethod.NO.value, description='Certification Type')
auth_type: Optional[str] = Field(default=AuthType.BASIC.value, description='Auth Type')
api_key: Optional[str] = Field(default='', description='api key')
api_location: Optional[str] = Field(default='', description='api location')
parameter_name: Optional[str] = Field(default='', description='parameter_name')
request_params: Dict = Field(default=None, description='User Filled Request Parameters')
================================================
FILE: src/backend/bisheng/tool/domain/services/__init__.py
================================================
================================================
FILE: src/backend/bisheng/tool/domain/services/executor.py
================================================
import functools
import json
from inspect import signature
from typing import Any, Annotated, Optional, Dict, List
from langchain_core.callbacks import CallbackManagerForToolRun, Callbacks
from langchain_core.runnables import RunnableConfig
from langchain_core.tools import BaseTool, ArgsSchema
from pydantic import Field, SkipValidation
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum, StatusEnum, ApplicationTypeEnum
from bisheng.common.schemas.telemetry.event_data_schema import ToolInvocationEventData
from bisheng.common.services import telemetry_service
from bisheng.common.services.config_service import settings
from bisheng.core.logger import trace_id_var
from bisheng.knowledge.domain.knowledge_rag import KnowledgeRag
from bisheng.knowledge.domain.models.knowledge import KnowledgeDao, Knowledge
from bisheng.mcp_manage.langchain.tool import McpTool
from bisheng.mcp_manage.manager import ClientManager
from bisheng.tool.domain.const import ToolPresetType
from bisheng.tool.domain.langchain.knowledge import KnowledgeRagTool
from bisheng.tool.domain.models.gpts_tools import GptsToolsDao, GptsTools, GptsToolsType
from bisheng.tool.domain.services.openapi import OpenApiSchema
from bisheng_langchain.gpts.load_tools import load_tools
from bisheng_langchain.gpts.tools.api_tools.openapi import OpenApiTools
def wrapper_tool(func):
@functools.wraps(func)
async def inner(*args, **kwargs):
# Here you can add logic to record tool usage
self: ToolExecutor = args[0]
status = StatusEnum.SUCCESS
try:
return await func(*args, **kwargs)
except Exception as e:
status = StatusEnum.FAILED
raise e
finally:
await telemetry_service.log_event(**self.get_invoke_log_data(status))
return inner
def wrapper_tool_sync(func):
@functools.wraps(func)
def inner(*args, **kwargs):
# Here you can add logic to record tool usage
self: ToolExecutor = args[0]
status = StatusEnum.SUCCESS
try:
return func(*args, **kwargs)
except Exception as e:
status = StatusEnum.FAILED
raise e
finally:
# RecordTelemetryJournal
telemetry_service.log_event_sync(**self.get_invoke_log_data(status))
return inner
class ToolExecutor(BaseTool):
# must provide fields for telemetry logging
app_id: str = Field(..., description="Application Identifier")
app_name: str = Field(..., description="Application Name")
app_type: ApplicationTypeEnum = Field(..., description="Application Type")
user_id: int = Field(..., description="Invoke User ID")
# bisheng tool fields
tool_id: int = Field(..., description="Tool ID")
tool_is_preset: int = Field(..., description="kind of the Tool, api、mcp、preset")
tool_name: str = Field(..., description="Tool Name")
# langchain tool fields
name: str = Field(..., description="Tool Name for llm")
description: str = Field(..., description="Tool Description for llm")
args_schema: Annotated[Optional[ArgsSchema], SkipValidation()] = Field(
default=None, description="The tool schema."
)
tool_instance: BaseTool = Field(..., description="Langchain Tool Instance")
@classmethod
def init_by_tool_instance(cls, base_tool: BaseTool, tool: GptsTools, *, app_id: str, app_name: str,
app_type: ApplicationTypeEnum, user_id: int) -> BaseTool:
return cls(name=base_tool.name, description=base_tool.description, args_schema=base_tool.args_schema,
tool_instance=base_tool,
app_id=app_id, app_name=app_name, app_type=app_type, user_id=user_id,
tool_id=tool.id, tool_is_preset=tool.is_preset, tool_name=tool.name)
@staticmethod
def parse_preset_tool_params(tool: GptsTools, tool_type: GptsToolsType) -> Dict:
""" parse tool init params """
# get tool config from tool.extra first
params = {}
if tool.extra:
if isinstance(tool.extra, str):
params = json.loads(tool.extra)
elif isinstance(tool.extra, dict):
params = tool.extra
elif tool_type.extra:
if isinstance(tool_type.extra, str):
params = json.loads(tool_type.extra)
elif isinstance(tool_type.extra, dict):
params = tool_type.extra
# special handling for bisheng_code_interpreter, because it needs minio config
if tool.tool_key == 'bisheng_code_interpreter':
return {'minio': settings.get_minio_conf().model_dump(), **params}
return params
@staticmethod
def parse_api_tool_params(tool: GptsTools, tool_type: GptsToolsType, **kwargs) -> Dict:
""" parse tool init params """
extra_json = json.loads(tool.extra) if tool.extra else {}
extra_json.update(json.loads(tool_type.extra) if tool_type.extra else {})
params = OpenApiSchema.parse_openapi_tool_params(tool.name, tool.desc, extra_json,
tool_type.server_host,
tool_type.auth_method,
tool_type.auth_type,
tool_type.api_key)
if "llm" in kwargs:
kwargs.pop("llm")
params.update(kwargs)
return params
@classmethod
def _init_preset_tool(cls, tool: GptsTools, tool_type: GptsToolsType, **kwargs) -> BaseTool:
tool_name_param = {
tool.tool_key: cls.parse_preset_tool_params(tool, tool_type)
}
tool_langchain = load_tools(tool_params=tool_name_param, **kwargs)
if not tool_langchain:
raise ValueError(f"Failed to load preset tool: {tool.tool_key}")
return tool_langchain[0]
@classmethod
def _init_api_tool(cls, tool: GptsTools, tool_type: GptsToolsType, callbacks: Callbacks = None,
**kwargs) -> BaseTool:
tool_params = cls.parse_api_tool_params(tool, tool_type, **kwargs)
tool = OpenApiTools.get_api_tool(tool.tool_key, **tool_params)
tool.callbacks = callbacks
return tool
@classmethod
def _init_mcp_tool(cls, tool: GptsTools, tool_type: GptsToolsType, **kwargs) -> BaseTool:
mcp_client = ClientManager.sync_connect_mcp_from_json(tool_type.openapi_schema)
input_schema = json.loads(tool.extra)
return McpTool.get_mcp_tool(name=tool.tool_key, description=tool.desc, mcp_client=mcp_client,
mcp_tool_name=tool.name, arg_schema=input_schema['inputSchema'],
**kwargs)
@classmethod
def _init_by_tool_and_type(cls, tool: GptsTools, tool_type: GptsToolsType, *, app_id: str, app_name: str,
app_type: ApplicationTypeEnum, user_id: int, **kwargs) -> BaseTool:
if tool.is_preset == ToolPresetType.PRESET.value:
tool_instance = cls._init_preset_tool(tool, tool_type, **kwargs)
elif tool.is_preset == ToolPresetType.API.value:
tool_instance = cls._init_api_tool(tool, tool_type, **kwargs)
elif tool.is_preset == ToolPresetType.MCP.value:
tool_instance = cls._init_mcp_tool(tool, tool_type, **kwargs)
else:
raise ValueError(f"Unsupported tool preset type: {tool.is_preset}")
return cls.init_by_tool_instance(base_tool=tool_instance, tool=tool, app_id=app_id,
app_name=app_name, app_type=app_type, user_id=user_id)
@classmethod
async def init_by_tool_id(cls, tool_id: int = None, tool: GptsTools = None, *, app_id: str, app_name: str,
app_type: ApplicationTypeEnum, user_id: int, **kwargs) -> BaseTool:
if not tool_id and not tool:
raise ValueError("Either tool_id or tool must be provided.")
if not tool:
tool = await GptsToolsDao.aget_one_tool(tool_id=tool_id)
if not tool:
raise ValueError(f"Tool with id {tool_id} not found.")
tool_type = await GptsToolsDao.aget_one_tool_type(tool_type_id=tool.type)
if not tool_type:
raise ValueError(f"Tool type with id {tool.type} not found.")
return cls._init_by_tool_and_type(tool=tool, tool_type=tool_type, app_id=app_id, app_name=app_name,
app_type=app_type, user_id=user_id, **kwargs)
@classmethod
def _init_tools(cls, tools: List[GptsTools], tool_types_map: Dict[int, GptsToolsType], *,
app_id: str, app_name: str, app_type: ApplicationTypeEnum,
user_id: int, **kwargs) -> List[BaseTool]:
result = []
for tool in tools:
tool_type = tool_types_map.get(tool.type)
if not tool_type:
raise ValueError(f"Tool type with id {tool.type} not found.")
result.append(
cls._init_by_tool_and_type(tool=tool, tool_type=tool_type, app_id=app_id,
app_name=app_name, app_type=app_type, user_id=user_id, **kwargs)
)
return result
@classmethod
async def init_by_tool_ids(cls, tool_ids: list[int], *, app_id: str, app_name: str, app_type: ApplicationTypeEnum,
user_id: int, **kwargs) -> List[BaseTool]:
tools = await GptsToolsDao.aget_list_by_ids(tool_ids)
tool_type_ids = [tool.type for tool in tools]
tool_types = await GptsToolsDao.aget_all_tool_type(list(set(tool_type_ids)))
tool_type_map = {tool_type.id: tool_type for tool_type in tool_types}
return cls._init_tools(tools, tool_type_map, app_id=app_id, app_name=app_name, app_type=app_type,
user_id=user_id, **kwargs)
@classmethod
def init_by_tool_ids_sync(cls, tool_ids: list[int], app_id: str, app_name: str, app_type: ApplicationTypeEnum,
user_id: int, **kwargs) -> List[BaseTool]:
tools = GptsToolsDao.get_list_by_ids(tool_ids)
tool_type_ids = [tool.type for tool in tools]
tool_types = GptsToolsDao.get_all_tool_type(list(set(tool_type_ids)))
tool_type_map = {tool_type.id: tool_type for tool_type in tool_types}
return cls._init_tools(tools, tool_type_map, app_id=app_id, app_name=app_name, app_type=app_type,
user_id=user_id, **kwargs)
@classmethod
def init_by_tool_id_sync(cls, tool_id: int, *, app_id: str, app_name: str, app_type: ApplicationTypeEnum,
user_id: int, **kwargs) -> BaseTool:
tool = GptsToolsDao.get_one_tool(tool_id=tool_id)
if not tool:
raise ValueError(f"Tool with id {tool_id} not found.")
tool_type = GptsToolsDao.get_one_tool_type(tool_type_id=tool.type)
if not tool_type:
raise ValueError(f"Tool type with id {tool.type} not found.")
return cls._init_by_tool_and_type(tool=tool, tool_type=tool_type, app_id=app_id, app_name=app_name,
app_type=app_type, user_id=user_id, **kwargs)
@classmethod
def _init_knowledge_rag_tool(cls, knowledge: Knowledge, **kwargs) -> BaseTool:
return KnowledgeRagTool.init_knowledge_rag_tool(name=f'knowledge_{knowledge.id}',
description=f'{knowledge.name}:{knowledge.description}',
**kwargs)
@classmethod
async def init_knowledge_tool(cls, invoke_user_id: int, knowledge_id: int, **kwargs) -> BaseTool:
knowledge = await KnowledgeDao.aquery_by_id(knowledge_id=knowledge_id)
if not knowledge:
raise ValueError(f"Knowledge with id {knowledge_id} not found.")
vector_client = await KnowledgeRag.init_knowledge_milvus_vectorstore(invoke_user_id, knowledge)
es_client = await KnowledgeRag.init_knowledge_es_vectorstore(knowledge)
return cls._init_knowledge_rag_tool(knowledge=knowledge, vector_retriever=vector_client.as_retriever(),
elastic_retriever=es_client.as_retriever(), **kwargs)
@classmethod
def init_knowledge_tool_sync(cls, invoke_user_id: int, knowledge_id: int, **kwargs) -> BaseTool:
knowledge = KnowledgeDao.query_by_id(knowledge_id=knowledge_id)
if not knowledge:
raise ValueError(f"Knowledge with id {knowledge_id} not found.")
vector_client = KnowledgeRag.init_knowledge_milvus_vectorstore_sync(invoke_user_id, knowledge)
es_client = KnowledgeRag.init_knowledge_es_vectorstore_sync(knowledge)
return cls._init_knowledge_rag_tool(knowledge, vector_retriever=vector_client.as_retriever(),
elastic_retriever=es_client.as_retriever(), **kwargs)
@classmethod
def init_tmp_knowledge_tool_sync(cls, **kwargs) -> BaseTool:
return KnowledgeRagTool.init_knowledge_rag_tool(**kwargs)
@wrapper_tool_sync
def _run(self,
*args: Any,
config: RunnableConfig,
run_manager: Optional[CallbackManagerForToolRun] = None,
**kwargs) -> Any:
if signature(self.tool_instance._run).parameters.get("config"):
kwargs["config"] = config
if signature(self.tool_instance._run).parameters.get("run_manager"):
kwargs["run_manager"] = run_manager
return self.tool_instance._run(*args, **kwargs)
@wrapper_tool
async def _arun(self,
*args: Any,
config: RunnableConfig,
run_manager: Optional[CallbackManagerForToolRun] = None,
**kwargs) -> Any:
if signature(self.tool_instance._run).parameters.get("config"):
kwargs["config"] = config
if signature(self.tool_instance._run).parameters.get("run_manager"):
kwargs["run_manager"] = run_manager
return await self.tool_instance._arun(*args, **kwargs)
def __getattr__(self, item):
return getattr(self.tool_instance, item)
def get_invoke_log_data(self, status: StatusEnum):
# RecordTelemetryJournal
return {
"user_id": self.user_id,
"event_type": BaseTelemetryTypeEnum.TOOL_INVOKE,
"trace_id": trace_id_var.get(),
"event_data": ToolInvocationEventData(
app_id=self.app_id,
app_name=self.app_name,
app_type=self.app_type,
tool_id=self.tool_id,
tool_name=self.tool_name,
tool_type=self.tool_is_preset,
status=status
)}
================================================
FILE: src/backend/bisheng/tool/domain/services/openapi.py
================================================
import json
from typing import Dict
from bisheng.tool.domain.const import AuthMethod, AuthType
class OpenApiSchema:
def __init__(self, contents: dict):
self.parameter_name = None
self.api_location = None
self.contents = contents
self.version = contents['openapi']
self.info = contents['info']
self.title = self.info['title']
self.auth_type = 'basic'
self.auth_method = 0
self.description = self.info.get('description', '')
self.default_server = ''
self.apis = []
def parse_server(self) -> str:
"""
get the default server url
"""
if self.contents.get('servers') is None:
raise Exception('openapi schema must have servers')
servers = self.contents['servers']
if isinstance(servers, list):
self.default_server = servers[0]['url']
else:
self.default_server = servers['url']
security_schemes = self.contents.get('components', {}).get('securitySchemes', {})
api_key_auth = security_schemes.get('ApiKeyAuth', {})
# Get certification type
auth_type = api_key_auth.get('type')
if auth_type == 'apiKey':
self.auth_type = 'custom'
elif auth_type == 'http':
self.auth_type = api_key_auth.get('schema')
else:
self.auth_type = 'basic'
# Set authentication method
self.auth_method = 1 if auth_type in ('apiKey', 'http') else 0
# Dapatkan API Location and parameter name
self.api_location = api_key_auth.get('in')
self.parameter_name = api_key_auth.get('name')
return self.default_server
def parse_paths(self) -> list[dict]:
paths = self.contents['paths']
self.apis = []
for path, path_info in paths.items():
for method, method_info in path_info.items():
one_api_info = {
'path': path,
'method': method,
'description': method_info.get('description', '')
or method_info.get('summary', ''),
'operationId': method_info['operationId'],
'parameters': [],
}
if method not in ['get', 'post', 'put', 'delete']:
continue
if 'requestBody' in method_info:
for _, content in method_info['requestBody']['content'].items():
if '$ref' in content['schema']:
schema_ref = content['schema']['$ref']
schema_name = schema_ref.split('/')[-1]
schema = self.contents['components']['schemas'][schema_name]
else:
schema = content['schema']
if 'properties' in schema:
for param_name, param_info in schema['properties'].items():
param = {
'name': param_name,
'description': param_info.get('description', ''),
'in': 'body',
'required': param_name in schema.get('required', []),
'schema': {
'type': param_info.get('type', 'string'),
'title': param_info.get('title', param_name),
'properties': param_info.get('properties', {})
},
}
one_api_info['parameters'].append(param)
else:
# no request body get parameters
one_api_info['parameters'].extend(method_info.get('parameters', []))
self.apis.append(one_api_info)
return self.apis
@staticmethod
def parse_openapi_tool_params(name: str,
description: str,
extra: str | Dict,
server_host: str,
auth_method: int,
auth_type: str = None,
api_key: str = None):
if isinstance(extra, str):
extra = json.loads(extra)
# Stitching request header
headers = {}
if auth_method == AuthMethod.API_KEY.value:
if auth_type == AuthType.CUSTOM.value:
location = extra["api_location"]
parameter_name = extra["parameter_name"]
if location == "header":
headers = {parameter_name: api_key}
elif auth_type == AuthType.BASIC.value:
headers = {'Authorization': f'Basic {api_key}'}
elif auth_type == AuthType.BEARER.value:
headers = {'Authorization': f'Bearer {api_key}'}
# Back to initialization openapiRequired input parameters
params = {
'params': extra,
'headers': headers,
'api_key': api_key,
'url': server_host,
'description': name + description if description else name
}
return params
================================================
FILE: src/backend/bisheng/tool/domain/services/tool.py
================================================
import asyncio
import json
from typing import Optional, List
import yaml
from fastapi import Request
from langchain_core.tools import BaseTool
from loguru import logger
from pydantic import BaseModel, ConfigDict
from bisheng.api.services.audit_log import AuditLogService
from bisheng.api.utils import get_url_content
from bisheng.common.dependencies.user_deps import UserPayload
from bisheng.common.errcode import BaseErrorCode
from bisheng.common.errcode.http_error import UnAuthorizedError, NotFoundError
from bisheng.common.errcode.tool import ToolTypeNotExistsError, ToolTypeRepeatError, ToolTypeNameError, \
ToolTypeIsPresetError, ToolSchemaDownloadError, ToolSchemaEmptyError, ToolSchemaParseError, ToolSchemaServerError, \
ToolMcpSchemaError
from bisheng.database.models.group_resource import GroupResourceDao, ResourceTypeEnum, GroupResource
from bisheng.database.models.role_access import AccessType
from bisheng.database.models.user_group import UserGroupDao
from bisheng.mcp_manage.manager import ClientManager
from bisheng.tool.domain.const import ToolPresetType
from bisheng.tool.domain.langchain.linsight_knowledge import SearchKnowledgeBase
from bisheng.tool.domain.models.gpts_tools import GptsToolsDao, GptsTools, GptsToolsType, GptsToolsTypeRead
from bisheng.tool.domain.services.openapi import OpenApiSchema
from bisheng.utils import md5_hash, get_request_ip
from bisheng.utils.mask_data import JsonFieldMasker
from bisheng_langchain.gpts.load_tools import load_tools
class ToolServices(BaseModel):
""" Tool service class """
model_config = ConfigDict(arbitrary_types_allowed=True)
request: Optional[Request] = None
login_user: Optional[UserPayload] = None
async def get_tool_list(self, is_preset: Optional[int] = None) -> List[GptsToolsTypeRead]:
""" Get a list of tools visible to users """
# Get Tool Categories Visible to Users
tool_type_ids_extra = []
if is_preset != ToolPresetType.PRESET.value:
# When getting a list of custom tools, you need to include a list of tools available to the user
access_resources = await self.login_user.aget_user_access_resource_ids([AccessType.GPTS_TOOL_READ])
if access_resources:
tool_type_ids_extra = [int(access) for access in access_resources]
if is_preset is None:
# Get a list of all tools visible to the user
all_tool_type = await GptsToolsDao.aget_user_tool_type(self.login_user.user_id, tool_type_ids_extra)
elif is_preset == ToolPresetType.PRESET.value:
# Get a list of preset tools
all_tool_type = await GptsToolsDao.aget_preset_tool_type()
else:
# Get a list of custom tools visible to users
all_tool_type = await GptsToolsDao.aget_user_tool_type(self.login_user.user_id, tool_type_ids_extra, False,
ToolPresetType(is_preset))
tool_type_id = [one.id for one in all_tool_type]
res: List[GptsToolsTypeRead] = []
tool_type_children = {}
for one in all_tool_type:
tool_type_id.append(one.id)
tool_type_children[one.id] = []
res.append(GptsToolsTypeRead.model_validate(one))
# Get the list of tools under the corresponding category
tool_list = await GptsToolsDao.aget_list_by_type(tool_type_id)
for one in tool_list:
tool_type_children[one.type].append(one)
# check write permission
write_tool_type = None
for one in res:
if self.login_user.is_admin() or one.user_id == self.login_user.user_id:
one.write = True
else:
if write_tool_type is None:
write_resources = await self.login_user.aget_user_access_resource_ids([AccessType.GPTS_TOOL_WRITE])
write_tool_type = {int(x): True for x in write_resources}
one.write = write_tool_type.get(one.id, False)
one.children = tool_type_children.get(one.id, [])
# Data desensitization
one.mask_sensitive_data()
return res
async def add_tools(self, req: GptsToolsTypeRead) -> GptsToolsTypeRead:
""" Add custom tool """
# Try to parse theopenapi schemaSee if it can be parsed normally, Save if not possible Do not allow to save
if req.is_preset == ToolPresetType.API.value:
await self.parse_openapi_schema('', req.openapi_schema)
elif req.is_preset == ToolPresetType.MCP.value:
await self.parse_mcp_schema(req.openapi_schema)
req.id = None
if req.name.__len__() > 1000 or req.name.__len__() == 0:
raise ToolTypeNameError()
# Determine if the category already exists
tool_type = await GptsToolsDao.get_one_tool_type_by_name(self.login_user.user_id, req.name)
if tool_type:
raise ToolTypeRepeatError()
req.user_id = self.login_user.user_id
for one in req.children:
one.id = None
one.user_id = self.login_user.user_id
one.is_delete = 0
one.is_preset = req.is_preset
tool_extra = {"api_location": req.api_location, "parameter_name": req.parameter_name}
req.extra = json.dumps(tool_extra, ensure_ascii=False)
# Add Tool Category and Corresponding Tools List
res = await GptsToolsDao.insert_tool_type(req)
self.add_gpts_tools_hook(self.request, self.login_user, res)
return res
@classmethod
def add_gpts_tools_hook(cls, request: Request, user: UserPayload, gpts_tool_type: GptsToolsTypeRead) -> bool:
""" After adding custom toolshookFunction """
# Query the user group the user belongs to under
user_group = UserGroupDao.get_user_group(user.user_id)
group_ids = []
if user_group:
# Batch Insert Custom Tools into Correlation Table
batch_resource = []
for one in user_group:
group_ids.append(one.group_id)
batch_resource.append(GroupResource(
group_id=one.group_id,
third_id=gpts_tool_type.id,
type=ResourceTypeEnum.GPTS_TOOL.value))
GroupResourceDao.insert_group_batch(batch_resource)
AuditLogService.create_tool(user, get_request_ip(request), group_ids, gpts_tool_type)
return True
async def update_tool_config(self, tool_type_id: int, extra: dict) -> bool:
# Get Tool Categories
tool_type = await GptsToolsDao.aget_one_tool_type(tool_type_id)
if not tool_type or tool_type.is_preset != ToolPresetType.PRESET.value:
raise NotFoundError()
if not await self.login_user.async_access_check(tool_type.user_id, str(tool_type.id),
AccessType.GPTS_TOOL_WRITE):
raise UnAuthorizedError()
if tool_type.extra is None:
tool_type.extra = '{}'
json_masker = JsonFieldMasker()
old_config = json.loads(tool_type.extra)
# special handle dall-e config update。 Wait until you unify this configuration with the configuration logic of other tools (the configuration parameters remain unchanged), and then delete this special processing logic
if tool_type.name == "Dalle3- painting;":
# Instructions not toggledtab. Just changed the configuration
if ("azure_endpoint" in old_config and "azure_endpoint" in extra) or (
"azure_endpoint" not in old_config and "azure_endpoint" not in extra
):
# Update the configuration of all tools under the Tools category
merge_extra = json_masker.update_json_with_masked(old_config, extra)
merge_extra = json.dumps(merge_extra, ensure_ascii=False)
elif not old_config:
# The description has not been configured before, it is now configured
merge_extra = json.dumps(extra, ensure_ascii=False)
else:
# Instructions switchedtab, you need to overwrite the previous configuration
merge_extra = json.dumps(extra, ensure_ascii=False)
else:
# Update the configuration of all tools under the Tools category
merge_extra = json_masker.update_json_with_masked(old_config, extra)
merge_extra = json.dumps(merge_extra, ensure_ascii=False)
await GptsToolsDao.update_tools_extra(tool_type_id, merge_extra)
return True
@staticmethod
async def parse_openapi_schema(download_url: str, file_content: str) -> GptsToolsTypeRead:
if download_url:
try:
file_content = await get_url_content(download_url)
except Exception as e:
logger.exception(f'file {download_url} download error')
raise ToolSchemaDownloadError(exception=e)
if not file_content:
raise ToolSchemaEmptyError()
# Depending on the content of the document, is it possible to`{`At the beginning, what analytical method is used to determine
try:
if file_content.startswith('{'):
res = json.loads(file_content)
else:
res = yaml.safe_load(file_content)
except Exception as e:
logger.exception(f'openapi schema parse error {e}')
raise ToolSchemaParseError(exception=e)
# analyzingopenapi schemaConvert to Helper Tool Format
try:
schema = OpenApiSchema(res)
schema.parse_server()
if not schema.default_server.startswith(('http', 'https')):
raise ToolSchemaServerError(data={"url": schema.default_server})
tool_type = GptsToolsTypeRead(name=schema.title,
description=schema.description,
is_preset=ToolPresetType.API.value,
server_host=schema.default_server,
openapi_schema=file_content,
api_location=schema.api_location,
parameter_name=schema.parameter_name,
auth_type=schema.auth_type,
auth_method=schema.auth_method,
children=[])
# Parsing to get all theapi
schema.parse_paths()
for one in schema.apis:
tool_type.children.append(
GptsTools(
name=one['operationId'],
desc=one['description'],
tool_key=md5_hash(one['operationId']),
is_preset=0,
is_delete=0,
api_params=one['parameters'],
extra=json.dumps(one, ensure_ascii=False),
))
return tool_type
except BaseErrorCode as e:
raise e
except Exception as e:
logger.exception(f'openapi schema parse error {e}')
raise ToolSchemaParseError(exception=e)
@staticmethod
async def parse_mcp_schema(file_content: str) -> GptsToolsTypeRead:
try:
result = json.loads(file_content)
mcp_servers = result['mcpServers']
except Exception as e:
logger.exception(f'mcp tool schema parse error {e}')
raise ToolMcpSchemaError(exception=e)
tool_type = None
for key, value in mcp_servers.items():
# analyzingmcpService Config
tool_type = GptsToolsTypeRead(name=value.get('name', ''),
server_host=value.get('url', ''),
description=value.get('description', ''),
is_preset=ToolPresetType.MCP.value,
openapi_schema=file_content,
children=[])
# Instantiatemcpservice object, getting a list of tools
client = await ClientManager.connect_mcp_from_json(result)
tools = await client.list_tools()
for one in tools:
tool_type.children.append(GptsTools(
name=one.name,
desc=one.description,
tool_key=md5_hash(one.name),
is_preset=ToolPresetType.MCP.value,
api_params=ToolServices.convert_input_schema(one.inputSchema),
extra=one.model_dump_json(),
))
break
if tool_type is None:
raise ToolMcpSchemaError()
return tool_type
@classmethod
async def _update_gpts_tools(cls, exist_tool_type: GptsToolsType, req: GptsToolsTypeRead) -> GptsToolsTypeRead:
exist_tool_type.name = req.name
exist_tool_type.logo = req.logo
exist_tool_type.description = req.description
exist_tool_type.server_host = req.server_host
exist_tool_type.auth_method = req.auth_method
exist_tool_type.api_key = req.api_key
exist_tool_type.auth_type = req.auth_type
exist_tool_type.openapi_schema = req.openapi_schema
tool_extra = {"api_location": req.api_location, "parameter_name": req.parameter_name}
exist_tool_type.extra = json.dumps(tool_extra, ensure_ascii=False)
children_map = {}
for one in req.children:
children_map[one.name] = one
# Get old under this categoryAPIVertical
old_tool_list = await GptsToolsDao.aget_list_by_type([exist_tool_type.id])
# List of tools that need to be removed
delete_tool_id_list = []
# List of tools that need to be updated
update_tool_list = []
for one in old_tool_list:
# Explain this tool Removal required
if children_map.get(one.name) is None:
delete_tool_id_list.append(one.id)
else:
# Explain that this tool needs to be updated
new_tool_info = children_map.pop(one.name)
one.name = new_tool_info.name
one.desc = new_tool_info.desc
one.extra = new_tool_info.extra
one.api_params = new_tool_info.api_params
update_tool_list.append(one)
add_children = []
for one in children_map.values():
one.id = None
one.user_id = exist_tool_type.user_id
one.is_preset = exist_tool_type.is_preset
one.is_delete = 0
add_children.append(one)
await GptsToolsDao.update_tool_type(exist_tool_type, delete_tool_id_list,
add_children, update_tool_list)
children = await GptsToolsDao.aget_list_by_type([exist_tool_type.id])
return GptsToolsTypeRead(**exist_tool_type.model_dump(), children=children)
async def update_tools(self, req: GptsToolsTypeRead) -> GptsToolsTypeRead:
"""
Updating tool categories, including updating tool category names and deletions, adding tool categoryAPI
"""
# Try to parse theopenapi schemaSee if it can be parsed normally, Save if not possible Do not allow to save
if req.is_preset == ToolPresetType.API.value:
await self.parse_openapi_schema('', req.openapi_schema)
elif req.is_preset == ToolPresetType.MCP.value:
await self.parse_mcp_schema(req.openapi_schema)
exist_tool_type = await GptsToolsDao.aget_one_tool_type(req.id)
if not exist_tool_type:
raise ToolTypeNotExistsError()
if req.name.__len__() > 1000 or req.name.__len__() == 0:
raise ToolTypeNameError()
# Determine if the tool category name is a duplicate
tool_type = await GptsToolsDao.get_one_tool_type_by_name(self.login_user.user_id, req.name)
if tool_type and tool_type.id != exist_tool_type.id:
raise ToolTypeRepeatError()
# Determine if there are update permissions
if not await self.login_user.async_access_check(exist_tool_type.user_id, str(exist_tool_type.id),
AccessType.GPTS_TOOL_WRITE):
raise UnAuthorizedError()
res = await self._update_gpts_tools(exist_tool_type, req)
await self.update_tool_hook(self.request, self.login_user, exist_tool_type)
return res
@classmethod
async def update_tool_hook(cls, request: Request, user: UserPayload, exist_tool_type):
groups = await GroupResourceDao.aget_resource_group(ResourceTypeEnum.GPTS_TOOL, exist_tool_type.id)
group_ids = [int(one.group_id) for one in groups]
await asyncio.to_thread(AuditLogService.update_tool, user, get_request_ip(request), group_ids, exist_tool_type)
async def delete_tools(self, tool_type_id: int) -> bool:
""" Delete Tool Category """
exist_tool_type = await GptsToolsDao.aget_one_tool_type(tool_type_id)
if not exist_tool_type:
return True
if exist_tool_type.is_preset == ToolPresetType.PRESET.value:
raise ToolTypeIsPresetError()
# Determine if there are update permissions
if not await self.login_user.async_access_check(exist_tool_type.user_id, str(exist_tool_type.id),
AccessType.GPTS_TOOL_WRITE):
raise UnAuthorizedError()
await GptsToolsDao.delete_tool_type(tool_type_id)
await asyncio.to_thread(self.delete_tool_hook, self.request, self.login_user, exist_tool_type)
return True
@classmethod
def delete_tool_hook(cls, request, user: UserPayload, gpts_tool_type) -> bool:
""" After deleting the customizerhookFunction """
logger.info(f"delete_gpts_tool_hook id: {gpts_tool_type.id}, user: {user.user_id}")
GroupResourceDao.delete_group_resource_by_third_id(gpts_tool_type.id, ResourceTypeEnum.GPTS_TOOL)
groups = GroupResourceDao.get_resource_group(ResourceTypeEnum.GPTS_TOOL, gpts_tool_type.id)
group_ids = [int(one.group_id) for one in groups]
AuditLogService.delete_tool(user, get_request_ip(request), group_ids, gpts_tool_type)
return True
async def refresh_all_mcp(self) -> list[str]:
""" return mcp server error msg """
# get user all mcp tool
tool_types = await GptsToolsDao.aget_user_tool_type(self.login_user.user_id, is_preset=ToolPresetType.MCP)
if not tool_types:
return []
tools = await GptsToolsDao.aget_list_by_type(tool_type_ids=[one.id for one in tool_types])
tools_map = {}
for one in tools:
if one.type not in tools_map:
tools_map[one.type] = []
tools_map[one.type].append(one)
error_name = []
for one in tool_types:
try:
await self.refresh_mcp_tools(one, tools_map.get(one.id, []))
except Exception as e:
logger.exception(f'{one.name} tool refresh failed')
error_name.append(one.name)
return error_name
async def refresh_mcp_tools(self, tool_type: GptsToolsType, old_tools: list[GptsTools]):
""" refresh mcp tools """
# 1. get all new tools
# Instantiatemcpservice object, getting a list of tools
client = await ClientManager.connect_mcp_from_json(tool_type.openapi_schema)
tools = await client.list_tools()
children = []
for one in tools:
children.append(GptsTools(
name=one.name,
desc=one.description,
is_preset=ToolPresetType.MCP.value,
api_params=self.convert_input_schema(one.inputSchema),
extra=one.model_dump_json(),
type=tool_type.id,
))
req = GptsToolsTypeRead(**tool_type.model_dump(), children=children)
await self._update_gpts_tools(tool_type, req)
@classmethod
def convert_input_schema(cls, input_schema: dict):
""" TukarmcpInput parameters for the tool Formatting for custom tools"""
required = input_schema.get('required', [])
properties = input_schema.get('properties', {})
res = []
for filed, field_info in properties.items():
res.append({
'in': "query",
'name': filed,
'description': field_info.get('description'),
'required': filed in required,
'schema': {
'type': field_info.get('type'),
}
})
return res
@classmethod
async def init_linsight_tools(cls, root_path: str) -> List[BaseTool]:
""" InisialisasiLinsight Default Tools, The special point is that the parameters initialized by the local file tool are not fixed, but are determined during rerun """
# Tools for loading local file operations
local_file_tools = load_tools({
"list_files": {"root_path": root_path},
"get_file_details": {"root_path": root_path},
"search_files": {"root_path": root_path},
# "search_text_in_file": {"root_path": root_path},
"read_text_file": {"root_path": root_path},
"add_text_to_file": {"root_path": root_path},
"replace_file_lines": {"root_path": root_path},
})
knowledge_tools = [SearchKnowledgeBase()]
return knowledge_tools + local_file_tools
@classmethod
async def get_linsight_tools(cls) -> list[GptsToolsTypeRead]:
return [
GptsToolsTypeRead(
id=100000,
name="知识库和文件内容检索",
description="检索组织知识库、个人知识库以及本地上传文件的内容",
children=[
GptsTools(
id=100001,
name="知识库和文件内容检索",
desc="检索组织知识库、个人知识库以及本地上传文件的内容。",
tool_key="search_knowledge_base",
)
]
),
GptsToolsTypeRead(
id=200000,
name="文件操作",
description="本地文件系统的浏览、搜索与编辑工具集",
children=[
GptsTools(
id=200001,
name="获取所有文件和目录",
desc="列出指定目录下的所有文件和子目录。",
tool_key="list_files"
),
GptsTools(
id=200002,
name="获取文件详细信息",
desc="获取指定文件的文件名、文件大小、文件地址、字数、行数等详细信息。",
tool_key="get_file_details"
),
GptsTools(
id=200003,
name="搜索文件",
desc="在指定目录中搜索文件和子目录。",
tool_key="search_files"
),
GptsTools(
id=200004,
name="读取文件内容",
desc="读取本地文本文件的内容。",
tool_key="read_text_file"
),
GptsTools(
id=200005,
name="写入文件内容",
desc="将文本内容追加到文本文件,如果文件不存在,则创建文件",
tool_key="add_text_to_file"
),
GptsTools(
id=200006,
name="替换文件指定行范围内容",
desc="替换文件中的指定行范围。",
tool_key="replace_file_lines"
),
]
)
]
================================================
FILE: src/backend/bisheng/user/__init__.py
================================================
================================================
FILE: src/backend/bisheng/user/api/__init__.py
================================================
================================================
FILE: src/backend/bisheng/user/api/role.py
================================================
================================================
FILE: src/backend/bisheng/user/api/user.py
================================================
import hashlib
import random
from base64 import b64encode
from datetime import datetime
from io import BytesIO
from typing import Annotated, Dict, List, Optional
import rsa
from captcha.image import ImageCaptcha
from fastapi import APIRouter, Depends, HTTPException, Query, Body, Request
from fastapi.security import OAuth2PasswordBearer
from loguru import logger
from sqlmodel import select
from bisheng.api.services.audit_log import AuditLogService
from bisheng.api.v1.schemas import resp_200, CreateUserReq
from bisheng.common.errcode.http_error import UnAuthorizedError, NotFoundError
from bisheng.common.errcode.user import (UserNotPasswordError, UserValidateError, UserPasswordError, UserForbiddenError)
from bisheng.common.services.config_service import settings
from bisheng.core.cache.redis_manager import get_redis_client, get_redis_client_sync
from bisheng.core.database import get_sync_db_session
from bisheng.database.constants import AdminRole, DefaultRole
from bisheng.database.models.group import GroupDao
from bisheng.database.models.mark_task import MarkTaskDao
from bisheng.database.models.role import Role, RoleCreate, RoleDao, RoleUpdate
from bisheng.database.models.role_access import RoleRefresh, RoleAccessDao, AccessType
from bisheng.database.models.user_group import UserGroupDao
from bisheng.utils import generate_uuid
from bisheng.utils import get_request_ip
from bisheng.utils.constants import CAPTCHA_PREFIX, RSA_KEY, USER_PASSWORD_ERROR, USER_CURRENT_SESSION
from ..domain.models.user import User, UserCreate, UserDao, UserLogin, UserRead, UserUpdate
from ..domain.models.user_role import UserRole, UserRoleCreate, UserRoleDao
from ..domain.services.auth import AuthJwt, LoginUser
from ..domain.services.user import UserService
from ...common.constants.enums.telemetry import BaseTelemetryTypeEnum
from ...common.schemas.telemetry.event_data_schema import UserLoginEventData
from ...common.services import telemetry_service
from ...core.logger import trace_id_var
# build router
router = APIRouter(prefix='', tags=['User'])
oauth2_scheme = OAuth2PasswordBearer(tokenUrl='token')
@router.post('/user/regist')
async def regist(*, user: UserCreate):
# Captcha Verification
db_user = await UserService.user_register(user)
return resp_200(db_user)
@router.post('/user/sso')
async def sso(*, request: Request, user: UserCreate, auth_jwt: AuthJwt = Depends()):
""" Login interface for closed source gateways """
if settings.get_system_login_method().bisheng_pro: # Judgingsso Open or not
account_name = user.user_name
user_exist = UserDao.get_unique_user_by_name(account_name)
if not user_exist:
# Determine if there is a user under the platform
user_all = UserDao.get_all_users(page=1, limit=1)
# Automatically create users
user_exist = User.model_validate(user)
logger.info('act=create_user account={}', account_name)
default_admin = settings.get_system_login_method().admin_username
# Insert as Super Admin if there is no user on the platform or if the username matches the configured admin username
if len(user_all) == 0 or (default_admin and default_admin == account_name):
# Create as Super Admin
user_exist = await UserDao.add_user_and_admin_role(user_exist)
else:
# Create as Normal User
user_exist = await UserDao.add_user_and_default_role(user_exist)
await UserGroupDao.add_default_user_group(user_exist.user_id)
if 1 == user_exist.delete:
raise UserForbiddenError.http_exception()
access_token = LoginUser.create_access_token(user_exist, auth_jwt=auth_jwt)
# Set the logged in user's currentcookie, .jwtValid for an additional hour
redis_client = await get_redis_client()
await redis_client.aset(USER_CURRENT_SESSION.format(user_exist.user_id), access_token,
settings.cookie_conf.jwt_token_expire_time + 3600)
# Log Audit Logs
login_user = await LoginUser.init_login_user(user_id=user_exist.user_id, user_name=user_exist.user_name)
AuditLogService.user_login(login_user, get_request_ip(request))
# RecordTelemetryJournal
await telemetry_service.log_event(user_id=login_user.user_id, event_type=BaseTelemetryTypeEnum.USER_LOGIN,
trace_id=trace_id_var.get(),
event_data=UserLoginEventData(method="oss"))
return resp_200({'access_token': access_token, 'refresh_token': access_token})
else:
raise ValueError('Interface not supported')
def get_error_password_key(username: str):
return USER_PASSWORD_ERROR.format(username)
def clear_error_password_key(username: str):
# Count of cleanup password errors
error_key = get_error_password_key(username)
get_redis_client_sync().delete(error_key)
@router.post('/user/login')
async def login(*, request: Request, user: UserLogin, auth_jwt: AuthJwt = Depends()):
return await UserService.user_login(request, user=user, auth_jwt=auth_jwt)
@router.get('/user/admin')
async def get_admins(login_user: LoginUser = Depends(LoginUser.get_login_user)):
"""
Get all Super Admin accounts
"""
# check if user already exist
if not login_user.is_admin():
raise HTTPException(status_code=500, detail="Quit that! You don't have rights to view this.")
try:
# Get all Super Admin accounts
admins = UserRoleDao.get_admins_user()
admins_ids = [admin.user_id for admin in admins]
admin_users = UserDao.get_user_by_ids(admins_ids)
res = [UserRead(**one.__dict__) for one in admin_users]
return resp_200(res)
except Exception:
raise HTTPException(status_code=500, detail='User information failed')
@router.get('/user/info')
async def get_info(login_user: LoginUser = Depends(LoginUser.get_login_user)):
user_id = login_user.user_id
db_user = await UserDao.aget_user(user_id)
if not db_user:
raise NotFoundError()
role, web_menu = await login_user.get_roles_web_menu(db_user)
admin_group = await UserGroupDao.aget_user_admin_group(user_id)
admin_group = [one.group_id for one in admin_group]
return resp_200(UserRead(role=str(role), web_menu=web_menu, admin_groups=admin_group, **db_user.__dict__))
@router.post('/user/logout', status_code=201)
async def logout(auth_jwt: AuthJwt = Depends()):
auth_jwt.unset_access_token()
return resp_200()
@router.get('/user/list', status_code=201)
async def list_user(*,
name: Optional[str] = None,
page_size: Optional[int] = 10,
page_num: Optional[int] = 1,
group_id: Annotated[List[int], Query()] = None,
role_id: Annotated[List[int], Query()] = None,
login_user: LoginUser = Depends(LoginUser.get_login_user)):
groups = group_id
roles = role_id
user_admin_groups = []
if not login_user.is_admin():
# Query if you are an administrator of another user group under
user_admin_groups = UserGroupDao.get_user_admin_group(login_user.user_id)
user_admin_groups = [one.group_id for one in user_admin_groups]
groups = user_admin_groups
# Not an administrator of any user group does not have permission to view
if not groups:
raise HTTPException(status_code=500, detail="Quit that! You don't have rights to view this.")
# Filter bygroup_idand administrator permissionsgroupsDoing Intersections
if group_id:
groups = list(set(groups) & set(group_id))
if not groups:
raise HTTPException(status_code=500, detail="Quit that! You don't have rights to view this.")
# Query roles under user groups, Intersect with the role filter to get the role that really needs to be queriedID
group_roles = RoleDao.get_role_by_groups(groups, None, 0, 0)
if role_id:
roles = list(set(role_id) & set([one.id for one in group_roles]))
# Users filtered by user groups and rolesid
user_ids = []
if groups:
# Query users under user groupsID
groups_user_ids = UserGroupDao.get_groups_user(groups)
if not groups_user_ids:
return resp_200({'data': [], 'total': 0})
user_ids = list(set([one.user_id for one in groups_user_ids]))
if roles:
roles_user_ids = UserRoleDao.get_roles_user(roles)
if not roles_user_ids:
return resp_200({'data': [], 'total': 0})
roles_user_ids = [one.user_id for one in roles_user_ids]
# Automatically close purchase order afteruser_idsis not empty, the description isgroupsDo intersection screening together, otherwise only do role screening
if user_ids:
user_ids = list(set(user_ids) & set(roles_user_ids))
if not user_ids:
return resp_200({'data': [], 'total': 0})
else:
user_ids = list(set(roles_user_ids))
users, total_count = UserDao.filter_users(user_ids, name, page_num, page_size)
res = []
role_dict = {}
group_dict = {}
for one in users:
one_data = one.model_dump()
user_roles = get_user_roles(one, role_dict)
user_groups = get_user_groups(one, group_dict)
# If not hyper-managed, data needs to be filtered, Cannot see the list of roles and user groups within a user group not managed by him
if user_admin_groups:
for i in range(len(user_roles) - 1, -1, -1):
if user_roles[i]["group_id"] not in user_admin_groups:
del user_roles[i]
for i in range(len(user_groups) - 1, -1, -1):
if user_groups[i]["id"] not in user_admin_groups:
del user_groups[i]
one_data["roles"] = user_roles
one_data["groups"] = user_groups
res.append(one_data)
return resp_200({'data': res, 'total': total_count})
def get_user_roles(user: User, role_cache: Dict) -> List[Dict]:
# Query a list of roles for a user
user_roles = UserRoleDao.get_user_roles(user.user_id)
user_role_ids: List[int] = [one_role.role_id for one_role in user_roles]
res = []
for i in range(len(user_role_ids) - 1, -1, -1):
if role_cache.get(user_role_ids[i]):
res.append(role_cache.get(user_role_ids[i]))
del user_role_ids[i]
# Query database for role information without caching
if user_role_ids:
role_list = RoleDao.get_role_by_ids(user_role_ids)
for role_info in role_list:
role_cache[role_info.id] = {
"id": role_info.id,
"group_id": role_info.group_id,
"name": role_info.role_name
}
res.append(role_cache.get(role_info.id))
return res
def get_user_groups(user: User, group_cache: Dict) -> List[Dict]:
# Query a list of roles for a user
user_groups = UserGroupDao.get_user_group(user.user_id)
user_group_ids: List[int] = [one_group.group_id for one_group in user_groups]
res = []
for i in range(len(user_group_ids) - 1, -1, -1):
if group_cache.get(user_group_ids[i]):
res.append(group_cache.get(user_group_ids[i]))
del user_group_ids[i]
# Query database for role information without caching
if user_group_ids:
group_list = GroupDao.get_group_by_ids(user_group_ids)
for group_info in group_list:
group_cache[group_info.id] = {'id': group_info.id, 'name': group_info.group_name}
res.append(group_cache.get(group_info.id))
return res
@router.post('/user/update', status_code=201)
async def update(*,
request: Request,
user: UserUpdate,
login_user: LoginUser = Depends(LoginUser.get_login_user)):
db_user = UserDao.get_user(user.user_id)
if not db_user:
raise HTTPException(status_code=500, detail='Pengguna tidak ada')
if not login_user.is_admin():
# Check if is an administrator of a user group under
user_group = UserGroupDao.get_user_group(db_user.user_id)
user_group = [one.group_id for one in user_group]
if not login_user.check_groups_admin(user_group):
raise HTTPException(status_code=500, detail="Quit that! You don't have rights to view this.")
# check if user already exist
if db_user and user.delete is not None:
# Determine if it's an admin
with get_sync_db_session() as session:
admin = session.exec(
select(UserRole).where(UserRole.role_id == 1,
UserRole.user_id == user.user_id)).first()
if admin:
raise HTTPException(status_code=500, detail='Cannot operate admin')
if user.delete == db_user.delete:
return resp_200()
db_user.delete = user.delete
if db_user.delete == 0: # Enable User
# Count of cleanup password errors
clear_error_password_key(db_user.user_name)
with get_sync_db_session() as session:
session.add(db_user)
session.commit()
session.refresh(db_user)
update_user_delete_hook(request, login_user, db_user)
return resp_200()
def update_user_delete_hook(request: Request, login_user: LoginUser, user: User) -> bool:
logger.info(f'update_user_delete_hook: {request}, user={user}')
if user.delete == 0: # Enable User
AuditLogService.recover_user(login_user, get_request_ip(request), user)
elif user.delete == 1: # Disabled User
AuditLogService.forbid_user(login_user, get_request_ip(request), user)
return True
@router.post('/role/add', status_code=201)
async def create_role(*,
request: Request,
role: RoleCreate,
login_user: LoginUser = Depends(LoginUser.get_login_user)):
if not role.group_id:
raise HTTPException(status_code=500, detail='User GroupsIDTidak boleh kosong.')
if not role.role_name:
raise HTTPException(status_code=500, detail='msg.role_name_not_be_empty')
if not login_user.check_group_admin(role.group_id):
return UnAuthorizedError.return_resp()
db_role = Role.model_validate(role)
try:
with get_sync_db_session() as session:
session.add(db_role)
session.commit()
session.refresh(db_role)
create_role_hook(request, login_user, db_role)
return resp_200(db_role)
except Exception:
logger.exception('add role error')
raise HTTPException(status_code=500, detail='Failed to add, check if it is added repeatedly')
def create_role_hook(request: Request, login_user: LoginUser, db_role: Role) -> bool:
logger.info(f'create_role_hook: {login_user.user_name}, role={db_role}')
AuditLogService.create_role(login_user, get_request_ip(request), db_role)
@router.patch('/role/{role_id}', status_code=201)
async def update_role(*,
request: Request,
role_id: int,
role: RoleUpdate,
login_user: LoginUser = Depends(LoginUser.get_login_user)):
db_role = RoleDao.get_role_by_id(role_id)
if not db_role:
raise HTTPException(status_code=404, detail='This character does not exist')
if not login_user.check_group_admin(db_role.group_id):
return UnAuthorizedError.return_resp()
try:
if role.role_name:
db_role.role_name = role.role_name
if role.remark:
db_role.remark = role.remark
with get_sync_db_session() as session:
session.add(db_role)
session.commit()
session.refresh(db_role)
update_role_hook(request, login_user, db_role)
return resp_200(db_role)
except Exception:
logger.exception(f'update_role')
raise HTTPException(status_code=500, detail='Update failed, server side exception')
def update_role_hook(request: Request, login_user: LoginUser, db_role: Role) -> bool:
logger.info(f'update_role_hook: {login_user.user_name}, role={db_role}')
AuditLogService.update_role(login_user, get_request_ip(request), db_role)
@router.get('/role/list', status_code=200)
async def get_role(*,
role_name: str = None,
page: int = 0,
limit: int = 0,
login_user: LoginUser = Depends(LoginUser.get_login_user)):
"""
Get a list of roles visible to the user, Return different data according to different user permissions
"""
# Parameter Processing
if role_name:
role_name = role_name.strip()
# Determine if it's a Super Admin
if login_user.is_admin():
# Is Super Admin Get All
group_ids = []
else:
# Query if you are an administrator of another user group under
user_groups = UserGroupDao.get_user_admin_group(login_user.user_id)
group_ids = [one.group_id for one in user_groups if one.is_group_admin]
if not group_ids:
raise HTTPException(status_code=500, detail="Quit that! You don't have rights to view this.")
# Query a list of all roles
res = RoleDao.get_role_by_groups(group_ids, role_name, page, limit)
total = RoleDao.count_role_by_groups(group_ids, role_name)
return resp_200(data={"data": res, "total": total})
@router.delete('/role/{role_id}', status_code=200)
async def delete_role(*,
request: Request,
role_id: int, login_user: LoginUser = Depends(LoginUser.get_login_user)):
db_role = RoleDao.get_role_by_id(role_id)
if not db_role:
return resp_200()
if not login_user.check_group_admin(db_role.group_id):
return UnAuthorizedError.return_resp()
if db_role.id == AdminRole or db_role.id == DefaultRole:
raise HTTPException(status_code=500, detail='Built-in roles cannot be deleted')
# DeleteroleRelated data
try:
RoleDao.delete_role(role_id)
except Exception as e:
logger.exception(e)
raise HTTPException(status_code=500, detail='Failed to delete role')
AuditLogService.delete_role(login_user, get_request_ip(request), db_role)
return resp_200()
@router.post('/user/role_add', status_code=200)
async def user_addrole(*,
request: Request,
user_role: UserRoleCreate,
login_user: LoginUser = Depends(LoginUser.get_login_user)):
"""
Resets the role of the user. The scope of the data varies depending on the permissions
"""
# Get a list of the user's previous roles
old_roles = UserRoleDao.get_user_roles(user_role.user_id)
old_roles = [one.role_id for one in old_roles]
# Determine if the role being edited is Super Admin, Super Admin does not allow editing
user_role_list = UserRoleDao.get_user_roles(user_role.user_id)
if any(one.role_id == AdminRole for one in user_role_list):
raise HTTPException(status_code=500, detail='Editing is not allowed by the system administrator')
if any(one == AdminRole for one in user_role.role_id):
raise HTTPException(status_code=500, detail='Setting as system administrator is not allowed')
if not login_user.is_admin():
# Determine which user groups you have administrative access to
admin_group = UserGroupDao.get_user_admin_group(login_user.user_id)
admin_group = [one.group_id for one in admin_group]
if not admin_group:
raise HTTPException(status_code=500, detail='No rights')
# Get a list of all roles under an admin group
admin_roles = RoleDao.get_role_by_groups(admin_group, '', 0, 0)
admin_roles = [one.id for one in admin_roles]
# Do the intersection to get the list of roles visible to the user group administrator
for i in range(len(old_roles) - 1, -1, -1):
if old_roles[i] not in admin_roles:
del old_roles[i]
# Determine if the reset role list is in Under the name of the user group administrator
for i in range(len(user_role.role_id) - 1, -1, -1):
if user_role.role_id[i] not in admin_roles:
raise HTTPException(status_code=500, detail=f'No permission to add roles{user_role.role_id[i]}')
need_add_role = []
need_delete_role = old_roles.copy()
for one in user_role.role_id:
if one not in old_roles:
# Role needs to be added
need_add_role.append(one)
else:
# All that remains is the list of roles that need to be deleted
need_delete_role.remove(one)
if need_add_role:
UserRoleDao.add_user_roles(user_role.user_id, need_add_role)
if need_delete_role:
# Delete the corresponding role list
UserRoleDao.delete_user_roles(user_role.user_id, need_delete_role)
update_user_role_hook(request, login_user, user_role.user_id, old_roles, user_role.role_id)
return resp_200()
def update_user_role_hook(request: Request, login_user: LoginUser, user_id: int,
old_roles: List[int], new_roles: List[int]):
logger.info(f'update_user_role_hook, user_id: {user_id}, old_roles: {old_roles}, new_roles: {new_roles}')
# Write Audit Log
role_info = RoleDao.get_role_by_ids(old_roles + new_roles)
group_ids = list(set([role.group_id for role in role_info]))
role_dict = {one.id: one.role_name for one in role_info}
note = "Pre-edit role:"
for one in old_roles:
note += role_dict[one] + "、"
note = note.rstrip("、")
note += "Post-edited roles:"
for one in new_roles:
note += role_dict[one] + "、"
note = note.rstrip("、")
AuditLogService.update_user(login_user, get_request_ip(request), user_id, group_ids, note)
@router.post('/role_access/refresh', status_code=200)
async def access_refresh(*, request: Request, data: RoleRefresh,
login_user: LoginUser = Depends(LoginUser.get_login_user)):
db_role = await RoleDao.aget_role_by_id(data.role_id)
if not db_role:
raise NotFoundError().http_exception()
if db_role.id == AdminRole:
raise UnAuthorizedError.http_exception()
if not await login_user.async_check_group_admin(db_role.group_id):
raise UnAuthorizedError.http_exception()
role_id = data.role_id
access_type = data.type
access_id = data.access_id
await RoleAccessDao.update_role_access_all(role_id, AccessType(access_type), access_id)
update_role_hook(request, login_user, db_role)
return resp_200()
@router.get('/role_access/list', status_code=200)
async def access_list(*, role_id: int, access_type: Optional[int] = Query(default=None, alias="type"),
login_user: LoginUser = Depends(LoginUser.get_login_user)):
db_role = await RoleDao.aget_role_by_id(role_id)
if not db_role:
raise NotFoundError().http_exception()
if not await login_user.async_check_group_admin(db_role.group_id):
return UnAuthorizedError.return_resp()
access_type = None
if access_type:
access_type = AccessType(access_type)
res = await RoleAccessDao.aget_role_access([role_id], access_type)
return resp_200({
'data': res,
'total': len(res)
})
@router.get('/user/get_captcha', status_code=200)
async def get_captcha():
# generate captcha
chr_all = "abcdefghjkmnpqrstuvwxyABCDEFGHJKMNPQRSTUVWXY3456789"
chr_4 = ''.join(random.sample(chr_all, 4))
image = ImageCaptcha().generate_image(chr_4)
# Right.image To be performedbase 64 Code
buffered = BytesIO()
image.save(buffered, format='PNG')
capthca_b64 = b64encode(buffered.getvalue()).decode()
logger.info('get_captcha captcha_char={}', chr_4)
# generate key, Generate Simple Uniqueid,
key = CAPTCHA_PREFIX + generate_uuid()[:8]
redis_client = await get_redis_client()
await redis_client.aset(key, chr_4, expiration=300)
# Add configuration, whether the verification code must be used
return resp_200({
'captcha_key': key,
'captcha': capthca_b64,
'user_capthca': settings.get_from_db('use_captcha') or False
})
@router.get('/user/public_key', status_code=200)
async def get_rsa_publish_key():
# redis Storage
key = RSA_KEY
redis_client = await get_redis_client()
# redis lock
if await redis_client.asetNx(key, 1):
# Generate a key pair
(pubkey, privkey) = rsa.newkeys(512)
# Save the keys to strings
await redis_client.aset(key, (pubkey, privkey), 3600)
else:
pubkey, privkey = await redis_client.aget(key)
pubkey_str = pubkey.save_pkcs1().decode()
return resp_200({'public_key': pubkey_str})
@router.post('/user/reset_password', status_code=200)
async def reset_password(
*,
user_id: int = Body(embed=True),
password: str = Body(embed=True),
login_user: LoginUser = Depends(LoginUser.get_login_user),
):
"""
Admin Reset User Password
"""
# Get user information to change password
user_info = UserDao.get_user(user_id)
if not user_info:
raise HTTPException(status_code=404, detail='Pengguna tidak ada')
user_payload = LoginUser(**{
'user_id': user_info.user_id,
'user_name': user_info.user_name,
'role': ''
})
# If the user being modified is a system administrator, Need to determine if it's me
if user_payload.is_admin() and login_user.user_id != user_id:
raise HTTPException(status_code=500, detail='System administrators can only reset passwords themselves')
# Query the user group the user belongs to
user_groups = UserGroupDao.get_user_group(user_info.user_id)
user_group_ids = [one.group_id for one in user_groups]
# Check if there are administrative permissions for the group
if not login_user.check_groups_admin(user_group_ids):
raise HTTPException(status_code=403, detail='No permission to reset password')
user_info.password = UserService.decrypt_md5_password(password)
user_info.password_update_time = datetime.now()
UserDao.update_user(user_info)
clear_error_password_key(user_info.user_name)
return resp_200()
@router.post('/user/change_password', status_code=200)
async def change_password(*,
password: str = Body(embed=True),
new_password: str = Body(embed=True),
login_user: LoginUser = Depends(LoginUser.get_login_user)):
"""
Login user Change my password
"""
user_info = UserDao.get_user(login_user.user_id)
if not user_info.password:
return UserNotPasswordError.return_resp()
password = UserService.decrypt_md5_password(password)
# Logged in user told it was the wrong password
if user_info.password != password:
return UserPasswordError.return_resp()
user_info.password = UserService.decrypt_md5_password(new_password)
user_info.password_update_time = datetime.now()
UserDao.update_user(user_info)
clear_error_password_key(user_info.user_name)
return resp_200()
@router.post('/user/change_password_public', status_code=200)
async def change_password_public(*,
username: str = Body(embed=True),
password: str = Body(embed=True),
new_password: str = Body(embed=True)):
"""
Not Logged-In Users Change my password
"""
user_info = UserDao.get_user_by_username(username)
if not user_info.password:
return UserValidateError.return_resp()
if user_info.password != UserService.decrypt_md5_password(password):
return UserValidateError.return_resp()
user_info.password = UserService.decrypt_md5_password(new_password)
user_info.password_update_time = datetime.now()
UserDao.update_user(user_info)
clear_error_password_key(username)
return resp_200()
@router.get('/user/mark', status_code=200)
async def has_mark_access(*, request: Request, login_user: LoginUser = Depends(LoginUser.get_login_user)):
"""
Get whether the current user has annotation permission,Determine if the current user isadmin Or a user group administrator
"""
user_groups = UserGroupDao.get_user_group(login_user.user_id)
user_group_ids = [one.group_id for one in user_groups]
has_mark_access = False
# Check if there are administrative permissions for the group
task = MarkTaskDao.get_task(login_user.user_id)
if task:
has_mark_access = True
return resp_200(data=has_mark_access)
@router.post('/user/create', status_code=200)
async def create_user(*,
request: Request,
admin_user: LoginUser = Depends(LoginUser.get_admin_user),
req: CreateUserReq):
"""
Super Admin Create User
"""
logger.info(f'create_user username={admin_user.user_name}, username={req.user_name}')
data = UserService.create_user(request, admin_user, req)
return resp_200(data=data)
def md5_hash(string):
md5 = hashlib.md5()
md5.update(string.encode('utf-8'))
return md5.hexdigest()
================================================
FILE: src/backend/bisheng/user/domain/__init__.py
================================================
================================================
FILE: src/backend/bisheng/user/domain/const.py
================================================
# Stores the number of times a user's password is incorrect.keyareusername
USER_PASSWORD_ERROR = 'user_password_error:{}'
# Store current user logged incookie, keyIs Userid
USER_CURRENT_SESSION = 'user_current_session:{}'
================================================
FILE: src/backend/bisheng/user/domain/models/__init__.py
================================================
================================================
FILE: src/backend/bisheng/user/domain/models/user.py
================================================
from datetime import datetime
from typing import List, Optional
from pydantic import field_validator
from sqlalchemy import Column, DateTime, func, text
from sqlalchemy.orm import selectinload
from sqlmodel import Field, select, Relationship, col
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session, get_async_db_session
from bisheng.database.constants import AdminRole, DefaultRole
from bisheng.database.models.group import Group
from bisheng.database.models.role import Role
from bisheng.database.models.user_group import UserGroup
from bisheng.user.domain.models.user_role import UserRole
class UserBase(SQLModelSerializable):
user_name: str = Field(index=True, unique=True)
email: Optional[str] = Field(default=None, index=True)
phone_number: Optional[str] = Field(default=None, index=True)
dept_id: Optional[str] = Field(default=None, index=True)
remark: Optional[str] = Field(default=None, index=False)
delete: int = Field(default=0, index=False)
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, index=True, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
@field_validator('user_name')
@classmethod
def validate_str(cls, v):
# dict_keys(['description', 'name', 'id', 'data'])
if not v:
raise ValueError('user_name Tidak boleh kosong.')
return v
class User(UserBase, table=True):
user_id: Optional[int] = Field(default=None, primary_key=True)
password: str = Field(index=False)
password_update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')), description='Password Last Modified')
# DefinitiongroupsAndrolesQuery Relationships for
groups: List["Group"] = Relationship(link_model=UserGroup)
roles: List["Role"] = Relationship(link_model=UserRole)
__tablename__ = "user"
class UserRead(UserBase):
user_id: Optional[int] = None
role: Optional[str] = None # admin / group_admin
access_token: Optional[str] = None
web_menu: Optional[List[str]] = None
admin_groups: Optional[List[int]] = None # Managed User GroupsIDVertical
class UserQuery(UserBase):
pass
class UserLogin(UserBase):
password: str
captcha_key: Optional[str] = None
captcha: Optional[str] = None
class UserCreate(UserBase):
password: Optional[str] = Field(default='')
captcha_key: Optional[str] = None
captcha: Optional[str] = None
class UserUpdate(SQLModelSerializable):
user_id: int
delete: Optional[int] = 0
class UserDao(UserBase):
@classmethod
def get_user(cls, user_id: int) -> User | None:
with get_sync_db_session() as session:
statement = select(User).where(User.user_id == user_id)
return session.exec(statement).first()
@classmethod
async def aget_user(cls, user_id: int) -> User | None:
async with get_async_db_session() as session:
statement = select(User).where(User.user_id == user_id)
result = await session.exec(statement)
return result.first()
@classmethod
def get_user_by_ids(cls, user_ids: List[int]) -> List[User] | None:
with get_sync_db_session() as session:
statement = select(User).where(User.user_id.in_(user_ids))
return session.exec(statement).all()
@classmethod
async def aget_user_by_ids(cls, user_ids: List[int]) -> List[User] | None:
async with get_async_db_session() as session:
statement = select(User).where(User.user_id.in_(user_ids))
result = await session.exec(statement)
return result.all()
@classmethod
def get_user_by_username(cls, username: str) -> User | None:
with get_sync_db_session() as session:
statement = select(User).where(User.user_name == username)
return session.exec(statement).first()
@classmethod
async def aget_user_by_username(cls, username: str) -> User | None:
async with get_async_db_session() as session:
statement = select(User).where(User.user_name == username)
result = await session.exec(statement)
return result.first()
@classmethod
def update_user(cls, user: User) -> User:
with get_sync_db_session() as session:
session.add(user)
session.commit()
session.refresh(user)
return user
@classmethod
async def aupdate_user(cls, user: User) -> User:
async with get_async_db_session() as session:
session.add(user)
await session.commit()
await session.refresh(user)
return user
@classmethod
def _filter_users_statement(cls,
statement,
user_ids: List[int],
keyword: str = None):
if user_ids:
statement = statement.where(User.user_id.in_(user_ids))
if keyword:
statement = statement.where(User.user_name.like(f'%{keyword}%'))
return statement.order_by(User.user_id.desc())
@classmethod
def filter_users(cls,
user_ids: List[int],
keyword: str = None,
page: int = 0,
limit: int = 0) -> (List[User], int):
statement = select(User)
statement = cls._filter_users_statement(statement, user_ids, keyword)
count_statement = select(func.count(User.user_id))
count_statement = cls._filter_users_statement(count_statement, user_ids, keyword)
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
statement = statement.order_by(User.user_id.desc())
with get_sync_db_session() as session:
return session.exec(statement).all(), session.scalar(count_statement)
@classmethod
async def afilter_users(cls,
user_ids: List[int],
keyword: str = None,
page: int = 0,
limit: int = 0) -> List[User]:
statement = select(User)
statement = cls._filter_users_statement(statement, user_ids, keyword)
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
statement = statement.order_by(User.user_id.desc())
async with get_async_db_session() as session:
result = await session.exec(statement)
return result.all()
@classmethod
def get_unique_user_by_name(cls, user_name: str) -> User | None:
with get_sync_db_session() as session:
statement = select(User).where(User.user_name == user_name)
return session.exec(statement).first()
@classmethod
def search_user_by_name(cls, user_name: str) -> List[User] | None:
with get_sync_db_session() as session:
statement = select(User).where(User.user_name.like('%{}%'.format(user_name)))
return session.exec(statement).all()
@classmethod
def create_user(cls, db_user: User) -> User:
with get_sync_db_session() as session:
session.add(db_user)
session.commit()
session.refresh(db_user)
return db_user
@classmethod
async def add_user_and_default_role(cls, user: User) -> User:
"""
Add users and add default roles
"""
async with get_async_db_session() as session:
session.add(user)
await session.commit()
await session.refresh(user)
db_user_role = UserRole(user_id=user.user_id, role_id=DefaultRole)
session.add(db_user_role)
await session.commit()
await session.refresh(user)
return user
@classmethod
async def add_user_and_admin_role(cls, user: User) -> User:
"""
Add users and add super admin roles
"""
async with get_async_db_session() as session:
session.add(user)
await session.commit()
await session.refresh(user)
db_user_role = UserRole(user_id=user.user_id, role_id=AdminRole)
session.add(db_user_role)
await session.commit()
await session.refresh(user)
return user
@classmethod
def add_user_with_groups_and_roles(cls, user: User, group_ids: List[int],
role_ids: List[int]) -> User:
with get_sync_db_session() as session:
session.add(user)
session.flush()
for group_id in group_ids:
db_user_group = UserGroup(user_id=user.user_id, group_id=group_id)
session.add(db_user_group)
for role_id in role_ids:
db_user_role = UserRole(user_id=user.user_id, role_id=role_id)
session.add(db_user_role)
session.commit()
session.refresh(user)
return user
@classmethod
def get_all_users(cls, page: int = 0, limit: int = 0) -> List[User]:
"""
Pagination Get All Users
"""
statement = select(User)
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
def get_user_with_group_role(cls, *, start_time: datetime = None, end_time: datetime = None,
user_ids: List[int] = None, page: int = 0, page_size: int = 0) -> List[User]:
statement = select(User)
if start_time and end_time:
statement = statement.where(User.create_time >= start_time, User.create_time < end_time)
if page and page_size:
statement = statement.offset((page - 1) * page_size).limit(page_size)
if user_ids:
statement = statement.where(col(User.user_id).in_(user_ids))
statement = statement.order_by(User.user_id)
statement = statement.options(
selectinload(User.groups), # type: ignore
selectinload(User.roles) # type: ignore
)
with get_sync_db_session() as session:
return session.exec(statement).all()
@classmethod
def get_first_user(cls) -> User | None:
statement = select(User).order_by(col(User.user_id).asc()).limit(1)
with get_sync_db_session() as session:
return session.exec(statement).first()
================================================
FILE: src/backend/bisheng/user/domain/models/user_role.py
================================================
from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel
from sqlalchemy import Column, DateTime, text, delete, INT
from sqlmodel import Field, select
from bisheng.common.models.base import SQLModelSerializable
from bisheng.core.database import get_sync_db_session, get_async_db_session
from bisheng.database.constants import AdminRole
class UserRoleBase(SQLModelSerializable):
user_id: Optional[int] = Field(
default=None,
foreign_key="user.user_id",
primary_key=True,
ondelete="CASCADE"
)
role_id: int = Field(
default=None,
foreign_key="role.id",
primary_key=True,
ondelete="CASCADE"
)
create_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP')))
update_time: Optional[datetime] = Field(default=None, sa_column=Column(
DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')))
class UserRole(UserRoleBase, table=True):
id: Optional[int] = Field(default=None, sa_column=Column(INT, primary_key=True, autoincrement=True))
class UserRoleRead(UserRoleBase):
id: Optional[int] = None
class UserRoleCreate(BaseModel):
user_id: int
role_id: list[int]
class UserRoleDao(UserRoleBase):
@classmethod
def get_user_roles(cls, user_id: int) -> List[UserRole]:
with get_sync_db_session() as session:
return session.exec(select(UserRole).where(UserRole.user_id == user_id)).all()
@classmethod
async def aget_user_roles(cls, user_id: int) -> List[UserRole]:
async with get_async_db_session() as session:
result = await session.exec(select(UserRole).where(UserRole.user_id == user_id))
return result.all()
@classmethod
def get_roles_user(cls, role_ids: List[int], page: int = 0, limit: int = 0) -> List[UserRole]:
"""
Get the user for the role
"""
with get_sync_db_session() as session:
statement = select(UserRole).where(UserRole.role_id.in_(role_ids))
if page and limit:
statement = statement.offset((page - 1) * limit).limit(limit)
return session.exec(statement).all()
@classmethod
def get_admins_user(cls) -> List[UserRole]:
"""
Get all super-managed accounts
"""
with get_sync_db_session() as session:
statement = select(UserRole).where(UserRole.role_id == AdminRole)
return session.exec(statement).all()
@classmethod
async def set_admin_user(cls, user_id: int) -> UserRole:
"""
Set user as Super Admin
"""
async with get_async_db_session() as session:
user_role = UserRole(user_id=user_id, role_id=AdminRole)
session.add(user_role)
await session.commit()
await session.refresh(user_role)
return user_role
@classmethod
def add_user_roles(cls, user_id: int, role_ids: List[int]) -> List[UserRole]:
"""
Add roles to users in bulk
"""
with get_sync_db_session() as session:
user_roles = [UserRole(user_id=user_id, role_id=role_id) for role_id in role_ids]
session.add_all(user_roles)
session.commit()
return user_roles
@classmethod
def delete_user_roles(cls, user_id: int, role_ids: List[int]) -> None:
"""
Remove users from certain roles
"""
with get_sync_db_session() as session:
statement = delete(UserRole).where(UserRole.user_id == user_id).where(UserRole.role_id.in_(role_ids))
session.exec(statement)
session.commit()
================================================
FILE: src/backend/bisheng/user/domain/repositories/__init__.py
================================================
================================================
FILE: src/backend/bisheng/user/domain/repositories/implementations/__init__.py
================================================
================================================
FILE: src/backend/bisheng/user/domain/repositories/implementations/user_repository_impl.py
================================================
from typing import Union
from sqlalchemy.orm import selectinload
from sqlmodel import select, Session
from sqlmodel.ext.asyncio.session import AsyncSession
from bisheng.common.repositories.implementations.base_repository_impl import BaseRepositoryImpl
from bisheng.user.domain.models.user import User
from bisheng.user.domain.repositories.interfaces.user_repository import UserRepository
class UserRepositoryImpl(BaseRepositoryImpl[User, int], UserRepository):
"""Shared link repository implementation"""
def __init__(self, session: Union[AsyncSession, Session]):
super().__init__(session, User)
# accordinguser_idget user info user、user_groups、roles
async def get_user_with_groups_and_roles_by_user_id(self, user_id: int) -> User | None:
statement = (
select(User).where(User.user_id == user_id).options(
selectinload(User.groups), # type: ignore
selectinload(User.roles) # type: ignore
)
)
result = await self.session.exec(statement)
return result.first()
def get_user_with_groups_and_roles_by_user_id_sync(self, user_id: int) -> User | None:
statement = (
select(User).where(User.user_id == user_id).options(
selectinload(User.groups), # type: ignore
selectinload(User.roles) # type: ignore
)
)
result = self.session.exec(statement)
return result.first()
================================================
FILE: src/backend/bisheng/user/domain/repositories/interfaces/__init__.py
================================================
================================================
FILE: src/backend/bisheng/user/domain/repositories/interfaces/user_repository.py
================================================
from abc import ABC
from bisheng.common.repositories.interfaces.base_repository import BaseRepository
from bisheng.user.domain.models.user import User, UserQuery
class UserRepository(BaseRepository[User, int], ABC):
"""User Repository Interface Class"""
# accordinguser_idget user info user、user_groups、roles
async def get_user_with_groups_and_roles_by_user_id(self, user_id: int) -> UserQuery:
pass
def get_user_with_groups_and_roles_by_user_id_sync(self, user_id: int) -> UserQuery:
pass
================================================
FILE: src/backend/bisheng/user/domain/services/__init__.py
================================================
================================================
FILE: src/backend/bisheng/user/domain/services/auth.py
================================================
import functools
import json
from datetime import datetime, timezone
from functools import cached_property
from typing import List, Dict, Any, Optional
import jwt
from fastapi import Request, Response, Depends
from pydantic import BaseModel, Field
from starlette.websockets import WebSocket
from typing_extensions import Self
from bisheng.common.errcode.http_error import UnAuthorizedError
from bisheng.common.exceptions.auth import JWTDecodeError
from bisheng.common.services.config_service import settings
from bisheng.database.constants import AdminRole
from bisheng.database.models.group import GroupDao
from bisheng.database.models.role_access import AccessType, RoleAccessDao, WebMenuResource
from bisheng.database.models.user_group import UserGroupDao
from ..models.user import User
from ..models.user_role import UserRoleDao
class AuthJwt:
def __init__(self, req: Request = None, res: Response = None):
self.req = req
self.res = res
self.jwt_secret = settings.jwt_secret
self.cookie_conf = settings.cookie_conf
self._access_cookie_key = "access_token_cookie"
self._encode_algorithm = "HS256"
self._decode_algorithms = [self._encode_algorithm]
def create_access_token(self, subject: dict) -> str:
""" create jwt token """
if isinstance(subject, dict):
subject = json.dumps(subject)
payload = {
'sub': subject,
'exp': int(datetime.now(timezone.utc).timestamp()) + self.cookie_conf.jwt_token_expire_time,
'iss': self.cookie_conf.jwt_iss
}
token = jwt.encode(payload, self.jwt_secret, algorithm=self._encode_algorithm)
return token
def set_access_token(self, token: str, response: Response = None, max_age: int = None) -> None:
""" set jwt token to cookie """
response = response or self.res
response.set_cookie(
self._access_cookie_key,
token,
max_age=max_age or self.cookie_conf.max_age,
path=self.cookie_conf.path,
domain=self.cookie_conf.domain,
secure=self.cookie_conf.secure,
httponly=self.cookie_conf.httponly,
samesite=self.cookie_conf.samesite
)
def unset_access_token(self) -> None:
self.res.delete_cookie(
self._access_cookie_key,
path=self.cookie_conf.path,
domain=self.cookie_conf.domain
)
def get_subject(self,
auth_from: str = "request",
token: Optional[str] = None,
websocket: Optional[WebSocket] = None) -> Dict:
""" decode jwt token """
if auth_from == "request":
if not token:
token = self.req.cookies.get(self._access_cookie_key)
elif auth_from == "websocket":
if websocket:
token = websocket.cookies.get(self._access_cookie_key)
elif auth_from == "headers":
if not token:
token = self.req.headers.get("Authorization").split(" ")[-1]
else:
raise ValueError("unsupported auth_from value")
return self.decode_jwt_token(token)
def decode_jwt_token(self, token: str) -> Dict:
""" decode jwt token """
try:
payload = jwt.decode(token, self.jwt_secret, issuer=self.cookie_conf.jwt_iss,
algorithms=self._decode_algorithms)
return json.loads(payload.get('sub'))
except Exception as e:
raise JWTDecodeError(status_code=422, message=str(e))
class LoginUser(BaseModel):
user_id: int
user_name: str = Field(default="")
user_role: List[int] = Field(default_factory=list, description="Users GroupsIDVertical")
group_cache: Dict[int, Any] = Field(default_factory=dict, description="User Group Cache")
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.user_id = kwargs.get('user_id')
self.user_name = kwargs.get('user_name')
self.user_role = kwargs.get('user_role')
self.group_cache = kwargs.get('group_cache', {})
if not self.user_role:
self.user_role = []
user_role = UserRoleDao.get_user_roles(self.user_id)
self.user_role = [user_role.role_id for user_role in user_role]
@cached_property
def _check_admin(self):
if isinstance(self.user_role, list):
for one in self.user_role:
if one == AdminRole:
return True
return False
def is_admin(self):
return self._check_admin
@staticmethod
def wrapper_access_check(func):
"""
Decorator for permissions check
ifadminThe user does not perform subsequent specific check logic
"""
@functools.wraps(func)
def wrapper(*args, **kwargs):
if args[0].is_admin():
return True
return func(*args, **kwargs)
return wrapper
@staticmethod
def async_wrapper_access_check(func):
"""
Decorator for asynchronous permission checking
ifadminThe user does not perform subsequent specific check logic
"""
@functools.wraps(func)
async def wrapper(*args, **kwargs):
if args[0].is_admin():
return True
return await func(*args, **kwargs)
return wrapper
@wrapper_access_check
def access_check(self, owner_user_id: int, target_id: str, access_type: AccessType) -> bool:
"""
Check if the user has permission to a resource
"""
# Determine if it belongs to my resource
if self.user_id == owner_user_id:
return True
# Judgment Authorization
if RoleAccessDao.judge_role_access(self.user_role, target_id, access_type):
return True
return False
@async_wrapper_access_check
async def async_access_check(self, owner_user_id: int, target_id: str, access_type: AccessType) -> bool:
if self.user_id == owner_user_id:
return True
flag = await RoleAccessDao.ajudge_role_access(self.user_role, target_id, access_type)
return True if flag else False
@wrapper_access_check
def copiable_check(self, owner_user_id: int) -> bool:
"""
Check if the user has permission to copy a resource
"""
# Determine if it belongs to my resource
if self.user_id == owner_user_id:
return True
return False
@wrapper_access_check
def check_group_admin(self, group_id: int) -> bool:
"""
Check if the user is an administrator of a group
"""
# Determine if you are an administrator of a user group
user_group = UserGroupDao.get_user_admin_group(self.user_id)
if not user_group:
return False
for one in user_group:
if one.group_id == group_id:
return True
return False
@async_wrapper_access_check
async def async_check_group_admin(self, group_id: int) -> bool:
"""
Asynchronously check if the user is an administrator of a group
"""
# Determine if you are an administrator of a user group
user_group = await UserGroupDao.aget_user_admin_group(self.user_id, group_id)
if not user_group:
return False
for one in user_group:
if one.group_id == group_id:
return True
return False
@wrapper_access_check
def check_groups_admin(self, group_ids: List[int]) -> bool:
"""
Check if the user is an administrator in the user group list, one of which istrue
"""
user_groups = UserGroupDao.get_user_admin_group(self.user_id)
for one in user_groups:
if one.is_group_admin and one.group_id in group_ids:
return True
return False
async def get_user_groups(self, user_id: int) -> List[Dict]:
""" Query a list of roles for a user """
user_groups = await UserGroupDao.aget_user_group(user_id)
user_group_ids: List[int] = [one_group.group_id for one_group in user_groups]
res = []
for i in range(len(user_group_ids) - 1, -1, -1):
if self.group_cache.get(user_group_ids[i]):
res.append(self.group_cache.get(user_group_ids[i]))
del user_group_ids[i]
# Query database for role information without caching
if user_group_ids:
group_list = await GroupDao.aget_group_by_ids(user_group_ids)
for group_info in group_list:
self.group_cache[group_info.id] = {'id': group_info.id, 'name': group_info.group_name}
res.append(self.group_cache.get(group_info.id))
return res
async def get_user_group_ids(self, user_id: int = None):
if user_id is None:
user_id = self.user_id
user_groups = await UserGroupDao.aget_user_group(user_id)
return [one_group.group_id for one_group in user_groups]
def get_user_access_resource_ids(self, access_types: List[AccessType]) -> List[str]:
""" Query resources for which the user has the corresponding permissionsIDVertical """
role_access = RoleAccessDao.get_role_access_batch(self.user_role, access_types)
return list(set([one.third_id for one in role_access]))
async def aget_user_access_resource_ids(self, access_types: List[AccessType]) -> List[str]:
""" Resources with corresponding permissions for asynchronous query usersIDVertical """
role_access = await RoleAccessDao.aget_role_access_batch(self.user_role, access_types)
return list(set([one.third_id for one in role_access]))
# some methods related to AuthJwt
@classmethod
def create_access_token(cls, user: User, auth_jwt: AuthJwt) -> str:
""" Create access for userstoken """
payload = {
'user_id': user.user_id,
'user_name': user.user_name
}
token = auth_jwt.create_access_token(subject=payload)
return token
@classmethod
def set_access_cookies(cls, token: str, auth_jwt: AuthJwt, **kwargs) -> None:
""" set access token into cookie """
auth_jwt.set_access_token(token, **kwargs)
@classmethod
def unset_access_cookies(cls, auth_jwt: AuthJwt) -> None:
auth_jwt.unset_access_token()
@classmethod
async def init_login_user(cls, user_id: int, user_name: str) -> Self:
user_roles = await UserRoleDao.aget_user_roles(user_id)
role_ids = [user_role.role_id for user_role in user_roles]
login_user = cls(user_id=user_id, user_name=user_name, user_role=role_ids)
return login_user
@classmethod
def init_login_user_sync(cls, user_id: int, user_name: str) -> Self:
user_roles = UserRoleDao.get_user_roles(user_id)
role_ids = [user_role.role_id for user_role in user_roles]
login_user = cls(user_id=user_id, user_name=user_name, user_role=role_ids)
return login_user
@classmethod
async def get_login_user(cls, auth_jwt: AuthJwt = Depends()) -> Self:
subject = auth_jwt.get_subject()
return await cls.init_login_user(user_id=subject['user_id'], user_name=subject['user_name'])
@classmethod
async def get_admin_user(cls, auth_jwt: AuthJwt = Depends()) -> Self:
login_user = await cls.get_login_user(auth_jwt)
if not login_user.is_admin():
raise UnAuthorizedError.http_exception()
return login_user
@classmethod
async def get_login_user_from_ws(cls, websocket: WebSocket, auth_jwt: AuthJwt = Depends(), t: str = None) -> Self:
subject = auth_jwt.get_subject(auth_from="websocket", websocket=websocket, token=t)
return await cls.init_login_user(user_id=subject['user_id'], user_name=subject['user_name'])
@classmethod
async def get_admin_user_from_ws(cls, websocket: WebSocket, auth_jwt: AuthJwt = Depends(), t: str = None) -> Self:
login_user = await cls.get_login_user_from_ws(websocket, auth_jwt, t)
if not login_user.is_admin():
raise UnAuthorizedError.http_exception()
return login_user
@classmethod
async def get_roles_web_menu(cls, user: User) -> (List[int] | str, List[str]):
""" get user roles and web menu """
db_user_role = await UserRoleDao.aget_user_roles(user.user_id)
role = ''
role_ids = []
for user_role in db_user_role:
if user_role.role_id == AdminRole:
role = 'admin'
else:
role_ids.append(user_role.role_id)
if role != 'admin':
# is user group admin ?
db_user_groups = await UserGroupDao.aget_user_admin_group(user.user_id)
if len(db_user_groups) > 0:
role = 'group_admin'
else:
role = role_ids
# Get a list of a user's menu bar permissions
web_menu = await RoleAccessDao.aget_role_access(role_ids, AccessType.WEB_MENU)
web_menu = list(set([one.third_id for one in web_menu]))
else:
web_menu = [one.value for one in WebMenuResource]
return role, web_menu
================================================
FILE: src/backend/bisheng/user/domain/services/captcha.py
================================================
from bisheng.core.cache.redis_manager import get_redis_client
async def verify_captcha(captcha: str, captcha_key: str):
# check captcha
redis_client = await get_redis_client()
captcha_value = await redis_client.aget(captcha_key)
if captcha_value:
await redis_client.adelete(captcha_key)
return captcha_value.lower() == captcha.lower()
else:
return False
================================================
FILE: src/backend/bisheng/user/domain/services/user.py
================================================
from base64 import b64decode
from datetime import datetime
from typing import List
import rsa
from fastapi import Request, Depends
from bisheng.api.services.audit_log import AuditLogService
from bisheng.api.v1.schemas import CreateUserReq
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum
from bisheng.common.errcode.user import (UserNameAlreadyExistError,
UserNeedGroupAndRoleError, UserForbiddenError, CaptchaError, UserValidateError,
UserPasswordMaxTryError, UserPasswordExpireError, UserNameTooLongError)
from bisheng.common.schemas.api import resp_200
from bisheng.common.schemas.telemetry.event_data_schema import UserLoginEventData
from bisheng.common.services import telemetry_service
from bisheng.common.services.config_service import settings
from bisheng.core.cache.redis_manager import get_redis_client_sync, get_redis_client
from bisheng.core.logger import trace_id_var
from bisheng.database.models.user_group import UserGroupDao
from bisheng.user.domain.models.user import User, UserDao, UserLogin, UserRead, UserCreate
from bisheng.utils import md5_hash, get_request_ip
from bisheng.utils.constants import RSA_KEY
from .auth import LoginUser, AuthJwt
from .captcha import verify_captcha
from ..const import USER_PASSWORD_ERROR, USER_CURRENT_SESSION
class UserService:
@classmethod
def decrypt_md5_password(cls, password: str):
if value := get_redis_client_sync().get(RSA_KEY):
private_key = value[1]
password = md5_hash(rsa.decrypt(b64decode(password), private_key).decode('utf-8'))
else:
password = md5_hash(password)
return password
@classmethod
def create_user(cls, request: Request, login_user: LoginUser, req_data: CreateUserReq):
"""
Create User
"""
exists_user = UserDao.get_user_by_username(req_data.user_name)
if exists_user:
# Throwing an exception?
raise UserNameAlreadyExistError.http_exception()
user = User(
user_name=req_data.user_name,
password=cls.decrypt_md5_password(req_data.password),
)
group_ids = []
role_ids = []
for one in req_data.group_roles:
group_ids.append(one.group_id)
role_ids.extend(one.role_ids)
if not group_ids or not role_ids:
raise UserNeedGroupAndRoleError.http_exception()
user = UserDao.add_user_with_groups_and_roles(user, group_ids, role_ids)
return user
@staticmethod
def get_error_password_key(username: str):
return USER_PASSWORD_ERROR.format(username)
@classmethod
async def clear_error_password_key(cls, username: str):
# Count of cleanup password errors
error_key = cls.get_error_password_key(username)
(await get_redis_client()).delete(error_key)
@classmethod
async def judge_user_password(cls, db_user: User, password: str) -> None:
redis_client = await get_redis_client()
password_conf = await settings.get_password_conf()
if not db_user.password:
raise UserValidateError()
if db_user.password == password:
# Determine if the password has not been changed for a long time
if password_conf.password_valid_period and password_conf.password_valid_period > 0:
if (datetime.now() - db_user.password_update_time).days >= password_conf.password_valid_period:
raise UserPasswordExpireError()
return
# Determine if the number of errors needs to be logged
if not password_conf.login_error_time_window or not password_conf.max_error_times:
raise UserValidateError()
# Number of errors plus1
error_key = cls.get_error_password_key(db_user.user_name)
error_num = await redis_client.aincr(error_key)
if error_num == 1:
# First time setupkeyExpiration date
await redis_client.aexpire_key(error_key, password_conf.login_error_time_window * 60)
if error_num and int(error_num) >= password_conf.max_error_times:
# Maximum number of errors reached, account banned
db_user.delete = 1
await UserDao.aupdate_user(db_user)
raise UserPasswordMaxTryError()
raise UserValidateError()
@classmethod
async def user_register(cls, user: UserCreate):
# Captcha Verification
if settings.get_from_db('use_captcha'):
if not user.captcha_key or not await verify_captcha(user.captcha, user.captcha_key):
raise CaptchaError()
db_user = User.model_validate(user)
# check if user already exist
user_exists = await UserDao.aget_user_by_username(db_user.user_name)
if user_exists:
raise UserNameAlreadyExistError()
if len(db_user.user_name) > 30:
raise UserNameTooLongError()
db_user.password = cls.decrypt_md5_password(user.password)
# Under JudgmentadminDoes the user exist
admin = await UserDao.aget_user(1)
if admin:
db_user = await UserDao.add_user_and_default_role(db_user)
else:
db_user.user_id = 1
db_user = await UserDao.add_user_and_admin_role(db_user)
# Write users to the default user group
await UserGroupDao.add_default_user_group(db_user.user_id)
return db_user
@classmethod
async def user_login(cls, request: Request, user: UserLogin, auth_jwt: AuthJwt = Depends()):
if await settings.aget_from_db('use_captcha'):
if not user.captcha_key or not await verify_captcha(user.captcha, user.captcha_key):
raise CaptchaError()
# get user info
db_user = await UserDao.aget_user_by_username(user.user_name)
# verify user exists
if not db_user:
return UserValidateError.return_resp()
if db_user.delete == 1:
raise UserForbiddenError()
# verify password
password = cls.decrypt_md5_password(user.password)
await cls.judge_user_password(db_user, password)
# gen jwt token
access_token = LoginUser.create_access_token(user=db_user, auth_jwt=auth_jwt)
# set cookies
LoginUser.set_access_cookies(access_token, auth_jwt=auth_jwt)
# Set the logged in user's currentcookie, .jwtValid for an additional hour
redis_client = await get_redis_client()
await redis_client.aset(USER_CURRENT_SESSION.format(db_user.user_id), access_token,
auth_jwt.cookie_conf.jwt_token_expire_time + 3600)
# Log Audit Logs
login_user = await LoginUser.init_login_user(db_user.user_id, db_user.user_name)
AuditLogService.user_login(login_user, get_request_ip(request))
# RecordTelemetryJournal
await telemetry_service.log_event(user_id=db_user.user_id, event_type=BaseTelemetryTypeEnum.USER_LOGIN,
trace_id=trace_id_var.get(),
event_data=UserLoginEventData(method="password"))
return resp_200(UserRead(access_token=access_token, **db_user.__dict__))
@classmethod
def get_user_all_info(cls, *, start_time: datetime = None, end_time: datetime = None, user_ids: List[int] = None,
page: int = 1, page_size: int = 100) -> List[User]:
""" Get user information, including user group and role information """
return UserDao.get_user_with_group_role(page=page, page_size=page_size, user_ids=user_ids,
start_time=start_time, end_time=end_time)
@classmethod
def get_first_user(cls) -> User | None:
""" Get the first user """
return UserDao.get_first_user()
@classmethod
async def get_user_by_id(cls, user_id: int) -> User | None:
""" Get user by username """
return await UserDao.aget_user(user_id)
================================================
FILE: src/backend/bisheng/utils/__init__.py
================================================
import hashlib
import io
import time
import uuid
from typing import BinaryIO, Union, IO
from fastapi import Request, WebSocket
def generate_uuid() -> str:
""" generate uuid4 string """
return uuid.uuid4().hex
def md5_hash(original_string: str):
""" generate md5 hash string """
md5 = hashlib.md5()
md5.update(original_string.encode('utf-8'))
return md5.hexdigest()
def get_request_ip(request: Request | WebSocket) -> str:
""" get client real ip address """
x_forwarded_for = request.headers.get('X-Forwarded-For')
if x_forwarded_for:
return x_forwarded_for.split(',')[0]
ip = request.headers.get('X-Real-IP')
if ip:
return ip
return request.client.host
def generate_knowledge_index_name() -> str:
""" generate knowledge index name """
return f"col_{int(time.time())}_{generate_uuid()[:8]}"
def calc_data_sha256(data: Union[str, bytes, IO[bytes], None]) -> Union[str, None]:
"""
calculate sha256 hash of data
:param data: str, bytes, or a file-like object (with read() method)
:return: sha256 hex digest string or None
"""
if data is None:
return None
hasher = hashlib.sha256()
# Handle str and bytes directly
if isinstance(data, (str, bytes)):
if isinstance(data, str):
data = data.encode('utf-8')
hasher.update(data)
return hasher.hexdigest()
if hasattr(data, 'read'):
# Assume it's a file-like object
try:
current_pos = data.tell()
except Exception:
current_pos = 0
data.seek(0)
chunk_size = 65536 # 64KB per chunk
while True:
chunk = data.read(chunk_size)
if not chunk:
break
hasher.update(chunk)
# Reset the file pointer to its original position
data.seek(current_pos)
return hasher.hexdigest()
return None
================================================
FILE: src/backend/bisheng/utils/consisten_hash.py
================================================
import bisect
import hashlib
from typing import Dict, List, Optional, Any
class ConsistentHash:
def __init__(self, nodes: Optional[List[str]] = None,
virtual_replicas: int = 100,
hash_fn: Optional[Any] = None):
self.virtual_replicas = virtual_replicas
self.hash_fn = hash_fn or (lambda x: int(hashlib.md5(x.encode()).hexdigest(), 16))
# save hash ring: hash_value -> node
self.ring: Dict[int, str] = {}
# save sorted hash values for find
self.sorted_hashes: List[int] = []
# save all nodes
self.nodes = set()
# init nodes
if nodes:
for node in nodes:
self.add_node(node)
def add_node(self, node: str) -> None:
if node in self.nodes:
return
self.nodes.add(node)
# create virtual nodes
for i in range(self.virtual_replicas):
# virtual node name: node#0, node#1, ...
virtual_node = f"{node}#{i}"
# calc
hash_value = self.hash_fn(virtual_node)
# Avoid hash collisions
while hash_value in self.ring:
virtual_node = f"{virtual_node}#"
hash_value = self.hash_fn(virtual_node)
# 添加到环中
self.ring[hash_value] = node
# resort hash values
self._update_sorted_hashes()
def remove_node(self, node: str) -> None:
if node not in self.nodes:
return
self.nodes.remove(node)
# Remove all virtual nodes of this node.
hashes_to_remove = [
hash_val for hash_val, n in self.ring.items()
if n == node
]
for hash_val in hashes_to_remove:
del self.ring[hash_val]
self._update_sorted_hashes()
def _update_sorted_hashes(self) -> None:
"""Update the sorted hash value list"""
self.sorted_hashes = sorted(self.ring.keys())
def find_node(self, key: str) -> Optional[str]:
"""
Retrieve the corresponding node based on the key
Args:
key: hash key
Returns:
node name or None if no nodes exist
"""
if not self.ring:
return None
key_hash = self.hash_fn(key)
# Use binary search to find the first node that is greater than or equal to key_hash.
idx = bisect.bisect_left(self.sorted_hashes, key_hash)
# If idx is out of range, return to the beginning of the ring.
if idx == len(self.sorted_hashes):
idx = 0
# return node name
return self.ring[self.sorted_hashes[idx]]
def find_nodes(self, key: str, count: int = 1) -> List[str]:
"""
Retrieves multiple nodes for a given key (in clockwise order).
Args:
key: hash key
count: Number of nodes to be returned
Returns:
Returns a list of nodes that processed the key.
"""
if not self.ring or count <= 0:
return []
if count > len(self.nodes):
count = len(self.nodes)
key_hash = self.hash_fn(key)
idx = bisect.bisect_left(self.sorted_hashes, key_hash)
if idx == len(self.sorted_hashes):
idx = 0
nodes = []
seen_nodes = set()
while len(nodes) < count:
node = self.ring[self.sorted_hashes[idx]]
if node not in seen_nodes:
seen_nodes.add(node)
nodes.append(node)
idx += 1
if idx == len(self.sorted_hashes):
idx = 0
return nodes
def get_ring_size(self) -> int:
return len(self.ring)
def get_node_count(self) -> int:
return len(self.nodes)
def get_all_nodes(self) -> List[str]:
return list(self.nodes)
if __name__ == "__main__":
# 创建一致性哈希环
ch = ConsistentHash(virtual_replicas=10)
# 测试数据分布
test_keys = ["key1", "key2", "key3", "key4", "key5", "key6", "key7", "key8", "key9", "key10"]
print("初始节点分布:")
distribution = {}
for key in test_keys:
node = ch.find_node(key)
distribution[node] = distribution.get(node, 0) + 1
print(f" {key} -> {node}")
print("\n数据分布统计:")
for node, count in distribution.items():
print(f" {node}: {count} 个键")
# 添加新节点
print("\n添加新节点 server4")
ch.add_node("server4")
# 查看添加节点后的数据分布变化
moved_keys = []
for key in test_keys:
new_node = ch.find_node(key)
# 这里简化比较,实际应该记录之前分配的节点
print(f" {key} -> {new_node}")
# 获取多个节点
print("\n获取处理 'key1' 的3个节点:")
nodes = ch.find_nodes("key1", 3)
for i, node in enumerate(nodes, 1):
print(f" 第{i}候选: {node}")
# 移除节点
print("\n移除节点 server2")
ch.remove_node("server2")
print(f"当前物理节点数: {ch.get_node_count()}")
print(f"当前虚拟节点数: {ch.get_ring_size()}")
================================================
FILE: src/backend/bisheng/utils/constants.py
================================================
from typing import Any, Dict, List
OPENAI_MODELS = [
'text-davinci-003',
'text-davinci-002',
'text-curie-001',
'text-babbage-001',
'text-ada-001',
]
CHAT_OPENAI_MODELS = [
'gpt-3.5-turbo-0613', 'gpt-3.5-turbo', 'gpt-3.5-turbo-16k-0613', 'gpt-3.5-turbo-16k',
'gpt-4-0613', 'gpt-4-32k-0613', 'gpt-4', 'gpt-4-32k', 'gpt-4-1106-preview', 'gpt-4o'
]
ANTHROPIC_MODELS = [
'claude-v1', # largest model, ideal for a wide range of more complex tasks.
'claude-v1-100k', # An enhanced version of claude-v1 with a 100,000 token (roughly 75,000 word) context window.
'claude-instant-v1', # A smaller model with far lower latency, sampling at roughly 40 words/sec!
'claude-instant-v1-100k', # Like claude-instant-v1 with a 100,000 token context window but retains its performance.
# Specific sub-versions of the above models:
'claude-v1.3', # Vs claude-v1.2: better instruction-following, code, and non-English dialogue and writing.
'claude-v1.3-100k', # An enhanced version of claude-v1.3 with a 100,000 token (roughly 75,000 word) context window.
'claude-v1.2', # Vs claude-v1.1: small adv in general helpfulness, instruction following, coding, and other tasks.
'claude-v1.0', # An earlier version of claude-v1.
'claude-instant-v1.1', # Latest version of claude-instant-v1. Better than claude-instant-v1.0 at most tasks.
'claude-instant-v1.1-100k', # Version of claude-instant-v1.1 with a 100K token context window.
'claude-instant-v1.0', # An earlier version of claude-instant-v1.
]
DEFAULT_PYTHON_FUNCTION = """
def python_function(text: str) -> str:
\"\"\"This is a default python function that returns the input text\"\"\"
return text
"""
PYTHON_BASIC_TYPES = [str, bool, int, float, tuple, list, dict, set]
DIRECT_TYPES = [
'str', 'bool', 'dict', 'int', 'float', 'Any', 'prompt', 'code', 'NestedDict', 'variable', 'knowledge_list',
'knowledge_one', 'bisheng_model', 'bisheng_embedding'
]
# Added to recordnode_id And of the relationship between objectskey
NODE_ID_DICT = 'node_id_dict'
# Used to record preset questions, dict: key is the object of the actionid
PRESET_QUESTION = 'preset_question'
# redis key
CAPTCHA_PREFIX = 'cap_'
RSA_KEY = 'rsa_'
# Stores the number of times a user's password is incorrect.keyareusername
USER_PASSWORD_ERROR = 'user_password_error:{}'
# Store current user logged incookie, keyIs Userid
USER_CURRENT_SESSION = 'user_current_session:{}'
LOADERS_INFO: List[Dict[str, Any]] = [
{
'loader': 'AirbyteJSONLoader',
'name': 'Airbyte JSON (.jsonl)',
'import': 'langchain.document_loaders.AirbyteJSONLoader',
'defaultFor': ['jsonl'],
'allowdTypes': ['jsonl'],
},
{
'loader': 'JSONLoader',
'name': 'JSON (.json)',
'import': 'langchain.document_loaders.JSONLoader',
'defaultFor': ['json'],
'allowdTypes': ['json'],
},
{
'loader': 'BSHTMLLoader',
'name': 'BeautifulSoup4 HTML (.html, .htm)',
'import': 'langchain.document_loaders.BSHTMLLoader',
'allowdTypes': ['html', 'htm'],
},
{
'loader': 'CSVLoader',
'name': 'CSV (.csv)',
'import': 'langchain.document_loaders.CSVLoader',
'defaultFor': ['csv'],
'allowdTypes': ['csv'],
},
{
'loader': 'CoNLLULoader',
'name': 'CoNLL-U (.conllu)',
'import': 'langchain.document_loaders.CoNLLULoader',
'defaultFor': ['conllu'],
'allowdTypes': ['conllu'],
},
{
'loader': 'EverNoteLoader',
'name': 'EverNote (.enex)',
'import': 'langchain.document_loaders.EverNoteLoader',
'defaultFor': ['enex'],
'allowdTypes': ['enex'],
},
{
'loader': 'FacebookChatLoader',
'name': 'Facebook Chat (.json)',
'import': 'langchain.document_loaders.FacebookChatLoader',
'allowdTypes': ['json'],
},
{
'loader': 'OutlookMessageLoader',
'name': 'Outlook Message (.msg)',
'import': 'langchain.document_loaders.OutlookMessageLoader',
'defaultFor': ['msg'],
'allowdTypes': ['msg'],
},
{
'loader': 'PyPDFLoader',
'name': 'PyPDF (.pdf)',
'import': 'langchain.document_loaders.PyPDFLoader',
'defaultFor': ['pdf'],
'allowdTypes': ['pdf'],
},
{
'loader': 'STRLoader',
'name': 'Subtitle (.str)',
'import': 'langchain.document_loaders.STRLoader',
'defaultFor': ['str'],
'allowdTypes': ['str'],
},
{
'loader': 'TextLoader',
'name': 'Text (.txt)',
'import': 'langchain.document_loaders.TextLoader',
'defaultFor': ['txt'],
'allowdTypes': ['txt'],
},
{
'loader': 'UnstructuredEmailLoader',
'name': 'Unstructured Email (.eml)',
'import': 'langchain.document_loaders.UnstructuredEmailLoader',
'defaultFor': ['eml'],
'allowdTypes': ['eml'],
},
{
'loader': 'UnstructuredHTMLLoader',
'name': 'Unstructured HTML (.html, .htm)',
'import': 'langchain.document_loaders.UnstructuredHTMLLoader',
'defaultFor': ['html', 'htm'],
'allowdTypes': ['html', 'htm'],
},
{
'loader': 'UnstructuredMarkdownLoader',
'name': 'Unstructured Markdown (.md)',
'import': 'langchain.document_loaders.UnstructuredMarkdownLoader',
'defaultFor': ['md'],
'allowdTypes': ['md'],
},
{
'loader': 'UnstructuredPowerPointLoader',
'name': 'Unstructured PowerPoint (.pptx)',
'import': 'langchain.document_loaders.UnstructuredPowerPointLoader',
'defaultFor': ['pptx'],
'allowdTypes': ['pptx'],
},
{
'loader': 'UnstructuredWordLoader',
'name': 'Unstructured Word (.docx)',
'import': 'langchain.document_loaders.UnstructuredWordLoader',
'defaultFor': ['docx'],
'allowdTypes': ['docx'],
},
]
================================================
FILE: src/backend/bisheng/utils/docx_temp.py
================================================
import os
import tempfile
from pathlib import Path
from typing import IO, Dict, List, Any, Tuple
from urllib.parse import unquote, urlparse
import pandas as pd
import requests
from docx import Document
from docx.shared import Inches
from loguru import logger
from bisheng.core.storage.minio.minio_manager import get_minio_storage_sync
from bisheng.utils.util import _is_valid_url
def find_lcs(str1, str2):
lstr1 = len(str1)
lstr2 = len(str2)
record = [[0 for i in range(lstr2 + 1)] for j in range(lstr1 + 1)] # One more person
maxNum = 0
p = 0
for i in range(lstr1):
for j in range(lstr2):
if str1[i] == str2[j]:
record[i + 1][j + 1] = record[i][j] + 1
if record[i + 1][j + 1] > maxNum:
maxNum = record[i + 1][j + 1]
p = i + 1
return str1[p - maxNum: p], maxNum
class DocxTemplateRender(object):
def __init__(self, filepath: str = None, file_content: IO[bytes] = None):
self.filepath = filepath
self.file_content = file_content
if self.filepath:
self.doc = Document(self.filepath)
else:
self.doc = Document(self.file_content)
def _insert_image(self, paragraph, image_path: str, alt_text: str = "Images"):
"""
Insert image in paragraph
Args:
paragraph: WordParagraph object
image_path: Image file path
alt_text: Set Alt Text(s)
"""
logger.debug(f"[Simple Illustration] Start Inserting Pictures: {image_path}")
try:
if os.path.exists(image_path):
# Check file size
file_size = os.path.getsize(image_path)
logger.debug(f"[Simple Illustration] Image file exists: {image_path}, size: {file_size}byte")
# Insert an image with a maximum width of6Inch
run = paragraph.runs[0] if paragraph.runs else paragraph.add_run()
logger.debug(f"[Simple Illustration] Ready atrunInsert a picture in therunQuantity: {len(paragraph.runs)}")
run.add_picture(image_path, width=Inches(6))
logger.info(f"[Simple Illustration] ✅ Successfully inserted image: {image_path}, size: {file_size}byte")
else:
# Image file does not exist, use original path
logger.error(f"[Simple Illustration] ❌ Image file does not exist: {image_path}")
if paragraph.runs:
paragraph.runs[0].text = image_path
else:
paragraph.add_run(image_path)
except Exception as e:
# Inserting image failed, show originalURL
logger.error(f"[Simple Illustration] ❌ Failed to insert image: {image_path}, Error type: {type(e).__name__}, Error-free: {str(e)}")
if paragraph.runs:
paragraph.runs[0].text = image_path
else:
paragraph.add_run(image_path)
def _replace_placeholder_with_image(self, paragraph, placeholder, image_path, alt_text):
"""
Precisely replace the placeholder in the paragraph with the picture, correctly handle the spanrunPlaceholder for
Args:
paragraph: WordParagraph object
placeholder: Placeholder to replace
image_path: Image file path
alt_text: Image Alt Text
"""
logger.debug(f"[Image Replacement] Start replacing placeholders: {placeholder} -> {image_path}")
# Get the full text of the paragraph
paragraph_text = paragraph.text
# Find the location of the placeholder
placeholder_start = paragraph_text.find(placeholder)
if placeholder_start == -1:
logger.warning(f"[Image Replacement] Placeholder not found: {placeholder}")
return # Placeholder does not exist
placeholder_end = placeholder_start + len(placeholder)
# Anchor placeholder inrunsPosition in
current_pos = 0
start_run_index = -1
start_run_pos = 0
end_run_index = -1
end_run_pos = 0
for i, run in enumerate(paragraph.runs):
run_len = len(run.text)
# Find the placeholder start position
if start_run_index == -1 and current_pos + run_len > placeholder_start:
start_run_index = i
start_run_pos = placeholder_start - current_pos
# Find the placeholder end position
if current_pos + run_len >= placeholder_end:
end_run_index = i
end_run_pos = placeholder_end - current_pos
break
current_pos += run_len
# Clear placeholder text
if start_run_index == end_run_index:
# Placeholder is the samerunand within
run = paragraph.runs[start_run_index]
run.text = run.text[:start_run_pos] + run.text[end_run_pos:]
else:
# Placeholders span multipleruns
# Clear startrunSections in
start_run = paragraph.runs[start_run_index]
start_run.text = start_run.text[:start_run_pos]
# Clear EndrunSections in
end_run = paragraph.runs[end_run_index]
end_run.text = end_run.text[end_run_pos:]
# Clear middleruns
for i in range(end_run_index - 1, start_run_index, -1):
paragraph.runs[i].text = ""
# Insert image at placeholder position
# Find a suitable insertion location (first non-empty after cleaningrunafterwards
insert_run = None
for i in range(start_run_index, len(paragraph.runs)):
if paragraph.runs[i].text or i == start_run_index:
insert_run = paragraph.runs[i]
break
if insert_run is not None:
# In therunInsert image after
logger.debug(f"[Image Replacement] InsiderunPosition Insert Picture: {image_path}")
self._insert_image_at_run(insert_run, image_path, alt_text)
logger.info(f"[Image Replacement] Placeholder replacement complete: {placeholder} -> {image_path}")
else:
# If a suitable location is not found, use the original method
logger.warning(f"[Image Replacement] No Fit Foundrunlocation, using alternate methods: {image_path}")
self._insert_image(paragraph, image_path, alt_text)
def _insert_image_at_run(self, run, image_path, alt_text):
"""
In DesignationrunPosition Insert Picture
Args:
run: Word runObjects
image_path: Image Path
alt_text: Image Alt Text
"""
try:
from docx.shared import Inches
# Checks to see if file exists.
if not os.path.exists(image_path):
logger.warning(f"[Image Rendering] Image file does not exist, use original path: {image_path}")
run.text = image_path
return
# Check file size and format
file_size = os.path.getsize(image_path)
file_ext = os.path.splitext(image_path)[1].lower()
logger.debug(f"[Image Rendering] Ready to insert image: path={image_path}, size={file_size}byte, ext={file_ext}")
# Directly in the currentrunInsert image in
run.add_picture(image_path, width=Inches(4)) # Default Width4Inch
# Emptyruntext in to avoid displaying excess text
run.text = ""
logger.info(f"[Image Rendering] InsiderunLocation Insert Picture Successful: {image_path}, size={file_size}byte")
except Exception as e:
logger.error(f"[Image Rendering] runLocation Insert Picture Failed: {image_path}, Error-free: {e}")
logger.debug(f"[Image Rendering] Error Details of error: {type(e).__name__}: {str(e)}")
try:
# Use original insertion method as backup
logger.info(f"[Image Rendering] Try alternate insertion methods: {image_path}")
# DapatkanrunParent Paragraph Object of
paragraph = run._element.getparent()
# Convert Topython-docxParagraph object
from docx.text.paragraph import Paragraph
para_obj = Paragraph(paragraph, run.part)
self._insert_image(para_obj, image_path, alt_text)
logger.info(f"[Image Rendering] Alternate method inserted successfully: {image_path}")
except Exception as backup_e:
logger.error(f"[Image Rendering] Alternate insertion methods also failed: {image_path}, Error-free: {backup_e}")
logger.error(f"[Image Rendering] Alternate Method Detail Error: {type(backup_e).__name__}: {str(backup_e)}")
# If all methods fail, use the original path
run.text = image_path
logger.warning(f"[Image Rendering] All insert methods failed, use original path text: {image_path}")
def _replace_placeholder_in_structured_paragraph(self, paragraph, placeholder: str, table_data: List[List[str]]):
"""
Simplified table replacement: insert the table directly at the placeholder without adding any structural tags
"""
# Clear placeholder text
self._clear_placeholder_from_paragraph(paragraph, placeholder)
# Insert table directly at paragraph position
self._insert_table(paragraph, table_data)
logger.info(f"Form Replacement Complete of {len(table_data)} Row")
def _clear_placeholder_from_paragraph(self, paragraph, placeholder):
"""
Precisely clear placeholders from paragraphs to handle spanningrunCONDITION....
Args:
paragraph: WordParagraph object
placeholder: Placeholders to be cleared
"""
# Get the full text of the paragraph
paragraph_text = paragraph.text
# Find the location of the placeholder
placeholder_start = paragraph_text.find(placeholder)
if placeholder_start == -1:
return # Placeholder does not exist
placeholder_end = placeholder_start + len(placeholder)
# Anchor placeholder inrunsPosition in
current_pos = 0
start_run_index = -1
start_run_pos = 0
end_run_index = -1
end_run_pos = 0
for i, run in enumerate(paragraph.runs):
run_len = len(run.text)
# Find the placeholder start position
if start_run_index == -1 and current_pos + run_len > placeholder_start:
start_run_index = i
start_run_pos = placeholder_start - current_pos
# Find the placeholder end position
if current_pos + run_len >= placeholder_end:
end_run_index = i
end_run_pos = placeholder_end - current_pos
break
current_pos += run_len
# Clear placeholder text
if start_run_index == end_run_index:
# Placeholder is the samerunand within
run = paragraph.runs[start_run_index]
run.text = run.text[:start_run_pos] + run.text[end_run_pos:]
else:
# Placeholders span multipleruns
# Clear startrunSections in
start_run = paragraph.runs[start_run_index]
start_run.text = start_run.text[:start_run_pos]
# Clear EndrunSections in
end_run = paragraph.runs[end_run_index]
end_run.text = end_run.text[end_run_pos:]
# Clear middleruns
for i in range(end_run_index - 1, start_run_index, -1):
paragraph.runs[i].text = ""
def _process_resource_placeholders(self, doc, placeholder_map):
"""
Work with hybrid placeholders in paragraphs in positional order
Args:
doc: WordDocument object
placeholder_map: Placeholder Mapping Dictionary
"""
# Work with placeholders in all paragraphs
paragraphs_to_process = list(doc.paragraphs) # Create a copy as we may modify the paragraph structure
for i, p in enumerate(paragraphs_to_process):
paragraph_text = p.text
if not paragraph_text:
continue
# Find all placeholders and their positions in the paragraph
placeholders_with_positions = []
for placeholder, resource_info in placeholder_map.items():
pos = paragraph_text.find(placeholder)
if pos != -1:
placeholders_with_positions.append({
'placeholder': placeholder,
'resource_info': resource_info,
'position': pos,
'end_position': pos + len(placeholder)
})
if not placeholders_with_positions:
continue
# Sort by location from to post-processing
placeholders_with_positions.sort(key=lambda x: x['position'])
# Split paragraph into text segments and placeholder segments
self._process_mixed_content_paragraph(doc, p, placeholders_with_positions, paragraph_text)
# Working with Placeholders in Table Cells
for table in doc.tables:
for i, row in enumerate(table.rows):
for j, cell in enumerate(row.cells):
for one in cell.paragraphs:
cell_text = one.text
if not cell_text:
continue
# Check for placeholders in cells
for placeholder, resource_info in placeholder_map.items():
if placeholder in cell_text:
if resource_info["type"] == "image":
# Insert Actual Picture in Table Cell
image_path = resource_info.get("local_path") or resource_info.get("path", "")
if image_path and os.path.exists(image_path):
try:
# Insert a picture in a cell (this will empty the cell and insert the picture)
self._insert_image_in_table_cell(cell, image_path)
logger.info(f"✅ Picture successfully inserted in table cell: {image_path}")
# Marker placeholder processed, no need to update text
cell_text = ""
except Exception as e:
logger.error(f"❌ Table Cell Insert Picture Failed: {str(e)}")
# Show file name on failure
cell_text = cell_text.replace(placeholder, os.path.basename(image_path))
else:
# Image file does not exist, display path
cell_text = cell_text.replace(placeholder,
resource_info.get("path", placeholder))
elif resource_info["type"] == "excel":
cell_text = cell_text.replace(placeholder, "[ExcelTable Filter]")
elif resource_info["type"] == "csv":
cell_text = cell_text.replace(placeholder, "[CSVTable Filter]")
elif resource_info["type"] == "markdown_table":
cell_text = cell_text.replace(placeholder, "[MarkdownTable Filter]")
logger.info(f"Process table cell placeholders: {placeholder}")
# Update cell text
if cell_text != one.text:
if one.runs:
one.runs[0].text = cell_text
for r_index in range(1, len(one.runs)):
one.runs[r_index].text = ""
else:
one.add_run(cell_text)
def _process_mixed_content_paragraph(self, doc, paragraph, placeholders_with_positions, original_text):
"""
Working with paragraphs with mixed content - Insert images and tables inline
Args:
doc: WordDocument object
paragraph: Original paragraph
placeholders_with_positions: List of placeholder information by location
original_text: Original paragraph text
"""
# Extract style information from the original paragraph for subsequent paragraph creation
original_style_info = self._extract_paragraph_style_info(paragraph)
# Split the text into fragments, keeping the original order
segments = []
last_end = 0
for item in placeholders_with_positions:
# Add text before placeholder
if item['position'] > last_end:
text_before = original_text[last_end:item['position']]
if text_before: # Keep all text, including whitespaces
segments.append({
'type': 'text',
'content': text_before
})
# Add the resource corresponding to the placeholder
segments.append({
'type': 'resource',
'placeholder': item['placeholder'],
'resource_info': item['resource_info']
})
last_end = item['end_position']
# Add last remaining text
if last_end < len(original_text):
text_after = original_text[last_end:]
if text_after:
segments.append({
'type': 'text',
'content': text_after
})
# Clear original paragraph
paragraph.clear()
# Redesign: segmentation to keep document structure consistent
current_paragraph = paragraph
i = 0
while i < len(segments):
segment = segments[i]
if segment['type'] == 'text':
# Add text content directly without any cleanup
current_paragraph.add_run(segment['content'])
elif segment['type'] == 'resource':
resource_info = segment['resource_info']
if resource_info['type'] == 'image':
# Images can be really inlined in paragraphs
self._insert_inline_image(current_paragraph, resource_info['path'],
resource_info.get('alt_text', ''))
elif resource_info['type'] in ['excel', 'csv', 'markdown_table']:
# Table Inline Processing: Insert the table at its current position, then create a new paragraph for subsequent content
if resource_info['type'] == 'markdown_table':
table_data, alignments = self._markdown_table_to_data(resource_info["content"])
else:
table_data = resource_info.get('table_data', [["Table data parsing failed"]])
alignments = None
# Insert table immediately after current paragraph
table_element = self._create_table_element(table_data)
# Get the position of the current paragraph in the document
paragraph_element = current_paragraph._element
paragraph_parent = paragraph_element.getparent()
paragraph_index = list(paragraph_parent).index(paragraph_element)
# Insert table after current paragraph
paragraph_parent.insert(paragraph_index + 1, table_element)
# Create a new paragraph for the subsequent text and update itcurrent_paragraph
if i + 1 < len(segments):
next_paragraph = self._create_new_paragraph_after_table(paragraph_parent, paragraph_index + 1,
original_style_info)
current_paragraph = next_paragraph
i += 1
def _insert_table_inline(self, current_paragraph, table_data, segments, current_index):
"""
Insert tables inline for text continuity
Args:
current_paragraph: Current paragraph
table_data: Form Data
segments: All phrases
current_index: Current Snippet Index
Returns:
int: Number of subsequent text fragments skipped
"""
# 1. Insert table paragraph after current paragraph
table_paragraph = self._create_new_paragraph_after(current_paragraph)
self._insert_table(table_paragraph, table_data)
# 2. Check if there is a subsequent text fragment and create a new one if there is one
remaining_segments = segments[current_index + 1:]
text_segments = [seg for seg in remaining_segments if seg['type'] == 'text']
if text_segments:
# Create a new paragraph for the subsequent text
next_text_paragraph = self._create_new_paragraph_after(table_paragraph)
# Add all subsequent text fragments to the new paragraph
for j, seg in enumerate(text_segments):
next_text_paragraph.add_run(seg['content'])
# Returns the number of text fragments skipped (so that the main loop no longer processes these fragments)
skipped_count = len(text_segments)
return skipped_count
else:
return 0
def _create_new_paragraph_after(self, paragraph):
"""
Create a new paragraph after the specified paragraph
Args:
paragraph: Topic Paragraph reference
Returns:
Newly created paragraph object
"""
from docx.oxml import parse_xml
from docx.text.paragraph import Paragraph
# Create a new paragraph element
new_p_xml = ''
new_p_element = parse_xml(new_p_xml)
# Insert a new paragraph after the current paragraph
paragraph._element.getparent().insert(
list(paragraph._element.getparent()).index(paragraph._element) + 1,
new_p_element
)
# Returns the wrapped paragraph object
return Paragraph(new_p_element, paragraph._parent)
def _insert_inline_image(self, paragraph, image_path: str, alt_text: str = ""):
"""
Insert an image inline in the paragraph, and the image will be in the correct position in the text stream
"""
try:
# Use an existing image insertion method, but make sure it's inline
run = paragraph.add_run()
run.add_picture(image_path, width=Inches(4.0))
logger.info(f"[Inline Image] ✅ Successfully inserted image inline: {image_path}")
except Exception as e:
logger.error(f"[Inline Image] ❌ Failed to insert image: {str(e)}")
# Insert original image path
paragraph.add_run(image_path)
def _insert_image_in_table_cell(self, cell, image_path: str):
"""
Insert a picture in a table cell
Args:
cell: Table Cell Object
image_path: Image file path
"""
try:
from docx.shared import Inches
import os
if not os.path.exists(image_path):
logger.warning(f"[Table Cell Picture] Image file does not exist: {image_path}")
return
# Empty cell contents
for paragraph in cell.paragraphs:
paragraph.clear()
# Insert image in first paragraph
first_paragraph = cell.paragraphs[0] if cell.paragraphs else cell.add_paragraph()
run = first_paragraph.add_run()
# Insert an image and set the appropriate size
run.add_picture(image_path, width=Inches(2.0)) # Use smaller dimensions in table cells
logger.info(f"[Table Cell Picture] ✅ Successfully inserted image: {image_path}")
except Exception as e:
logger.error(f"[Table Cell Picture] ❌ Failed to insert: {str(e)}")
raise e
def _csv_to_table(self, csv_path: str) -> List[List[str]]:
"""
will beCSVConvert file to table data
Args:
csv_path: CSVFilePath
Returns:
List[List[str]]: Form Data
"""
try:
# read outCSVfiles, automatically detecting encodings and delimiters
import csv
import chardet
# Test file code
with open(csv_path, "rb") as f:
raw_data = f.read()
encoding_result = chardet.detect(raw_data)
encoding = encoding_result["encoding"] if encoding_result["encoding"] else "utf-8"
table_data = []
# Try a different delimiter
delimiters = [",", ";", "\t", "|"]
for delimiter in delimiters:
try:
with open(csv_path, "r", encoding=encoding, newline="") as f:
# Read a small part first to detect the delimiter
sample = f.read(1024)
f.seek(0)
sniffer = csv.Sniffer()
try:
detected_delimiter = sniffer.sniff(sample).delimiter
except:
detected_delimiter = delimiter
reader = csv.reader(f, delimiter=detected_delimiter)
table_data = [row for row in reader]
# Delimiter is considered correct if data is read successfully and there are multiple columns
if table_data and len(table_data[0]) > 1:
break
except Exception as e:
logger.debug(f"Try Delimiter '{delimiter}' Kalah: {str(e)}")
continue
if not table_data:
# If all delimiters fail, try a simple line-by-line read
with open(csv_path, "r", encoding=encoding) as f:
lines = f.readlines()
table_data = [[line.strip()] for line in lines if line.strip()]
# Cleanup data - Fully preserve the original table structure, including empty rows
cleaned_data = []
for row in table_data:
cleaned_row = [str(cell).strip() if cell is not None else "" for cell in row]
# Removes blank row filtering, leaving the original table structure intact
cleaned_data.append(cleaned_row)
logger.info(f"Successfully parsedCSVDoc.: {csv_path}, # of Lines: {len(cleaned_data)}")
return cleaned_data
except Exception as e:
logger.error(f"analyzingCSVFile failed: {csv_path}, Error-free: {str(e)}")
return [["CSVFile parsing failed", str(e)]]
def _excel_to_table(self, excel_path: str) -> List[List[str]]:
"""
will beExcelConvert files to tabular data, preserving data formats and types
Args:
excel_path: ExcelFilePath
Returns:
List[List[str]]: Form Data
"""
try:
# read outExcelfiles, keeping more of the original formatting
df = pd.read_excel(excel_path, sheet_name=0, dtype=str, keep_default_na=False)
# Limit table size to avoid overly large table effectsWordDocumentation
max_rows = 500 # Max row count
max_cols = 20 # Maximum Columns
if len(df) > max_rows:
logger.warning(f"ExcelToo many file lines({len(df)}), before interception{max_rows}Parade")
df = df.head(max_rows)
if len(df.columns) > max_cols:
logger.warning(f"ExcelToo many file columns({len(df.columns)}), before interception{max_cols}column")
df = df.iloc[:, :max_cols]
# Convert to list format
table_data = []
# Process header, clean up column names
headers = []
for col in df.columns:
col_str = str(col).strip()
# Medical Treatment:ExcelAutomatically generated column names (e.g.Unnamed: 0)
if col_str.startswith("Unnamed:"):
col_str = "" # Empty column name
headers.append(col_str)
table_data.append(headers)
# Add data rows, smart formatting
for _, row in df.iterrows():
row_data = []
for cell in row:
cell_str = str(cell).strip()
# Handle Empty Values
if cell_str.lower() in ["nan", "none", "null", ""]:
cell_str = ""
# Handle long numbers for readability
elif cell_str.replace(".", "").replace("-", "").isdigit():
try:
# Try formatting numbers
if "." in cell_str:
# Float, keep reasonable decimal places
num = float(cell_str)
if abs(num) >= 1000:
cell_str = f"{num:,.2f}" # Range Slider Thousand Separator
else:
cell_str = f"{num:.2f}".rstrip("0").rstrip(".")
else:
# integer, adding thousands separator
num = int(cell_str)
if abs(num) >= 1000:
cell_str = f"{num:,}"
except ValueError:
pass # Keep original string
# Limit cell content length to avoid too long content affecting layout
if len(cell_str) > 100:
cell_str = cell_str[:97] + "..."
row_data.append(cell_str)
table_data.append(row_data)
# Make sure all rows have the same number of columns
if table_data:
max_cols = max(len(row) for row in table_data)
for row in table_data:
while len(row) < max_cols:
row.append("")
logger.info(f"Successfully parsedExcelDoc.: {excel_path}, size: {len(table_data)}Parade x {max_cols}column")
return table_data
except Exception as e:
logger.error(f"analyzingExcelFile failed: {excel_path}, Error-free: {str(e)}")
return [["ExcelFile parsing failed", str(e)]]
def _markdown_table_to_data(self, markdown_table: str) -> Tuple[List[List[str]], List[str]]:
"""
will beMarkdownTable to table data and parse alignment information
Args:
markdown_table: MarkdownTable Text
Returns:
tuple: (Form Data, Alignment Info List)
"""
try:
lines = [line.strip() for line in markdown_table.strip().split("\n") if line.strip()]
if len(lines) < 2:
logger.warning("MarkdownTable format is incomplete, at least table header and delimiter lines are required")
return [["Format salah.", "The form is incomplete."]], ["left"]
table_data = []
alignments = []
separator_found = False
for i, line in enumerate(lines):
# Check if it is a delimiter line
if self._is_separator_line(line):
alignments = self._parse_alignments(line)
separator_found = True
continue
# Parse Data Rows
cells = self._parse_table_row(line)
if cells:
# Clean cell contents
cleaned_cells = []
for cell in cells:
cleaned_cell = self._clean_cell_content(cell)
cleaned_cells.append(cleaned_cell)
table_data.append(cleaned_cells)
# Validate table structure
if not separator_found:
logger.warning("MarkdownTable is missing a delimiter row, use default left alignment")
alignments = ["left"] * (len(table_data[0]) if table_data else 1)
# Make sure all rows have the same number of columns
if table_data:
max_cols = max(len(row) for row in table_data)
for row in table_data:
while len(row) < max_cols:
row.append("")
# Make sure the number of aligned messages matches the number of columns
while len(alignments) < max_cols:
alignments.append("left")
alignments = alignments[:max_cols]
logger.info(f"Successfully parsedMarkdownTable, Size: {len(table_data)}Parade x {len(alignments)}column")
logger.info(f"Column alignment: {alignments}")
return table_data, alignments
except Exception as e:
logger.error(f"analyzingMarkdownTable failed: {str(e)}")
return [["MarkdownTable parsing failed", str(e)]], ["left"]
def _is_separator_line(self, line: str) -> bool:
"""
Determine if yesMarkdownTable Separator Row
Args:
line: Table Row Content
Returns:
bool: Is Separator Row
"""
# Remove leading and trailing|Symbols
content = line.strip().strip("|").strip()
if not content:
return False
# The delimiter line should mainly contain-And:characters.
cells = [cell.strip() for cell in content.split("|")]
for cell in cells:
if not cell:
continue
# Each cell should be predominantly composed of-And:Composition
clean_cell = cell.replace("-", "").replace(":", "").strip()
if clean_cell: # Not a delimiter line if there are other characters
return False
return True
def _parse_alignments(self, separator_line: str) -> List[str]:
"""
Parse column alignment from delimiter rows
Args:
separator_line: Separator Row
Returns:
List[str]: Alignment List ("left", "center", "right")
"""
alignments = []
content = separator_line.strip().strip("|").strip()
cells = [cell.strip() for cell in content.split("|")]
for cell in cells:
if not cell:
alignments.append("left")
continue
# Determine alignment
if cell.startswith(":") and cell.endswith(":"):
alignments.append("center") # :---:
elif cell.endswith(":"):
alignments.append("right") # ---:
else:
alignments.append("left") # --- OR :---
return alignments
def _parse_table_row(self, line: str) -> List[str]:
"""
Parse table rows, handle escapes and special characters
Args:
line: Table Row Content
Returns:
List[str]: Cell Contents List
"""
# Remove leading and trailing|Symbols
content = line.strip()
if content.startswith("|"):
content = content[1:]
if content.endswith("|"):
content = content[:-1]
# Split cells, but handle escapes|
cells = []
current_cell = ""
escaped = False
for char in content:
if escaped:
current_cell += char
escaped = False
elif char == "\\":
escaped = True
current_cell += char
elif char == "|":
cells.append(current_cell.strip())
current_cell = ""
else:
current_cell += char
# Add last cell
if current_cell or cells: # Process Empty Rows
cells.append(current_cell.strip())
return cells
def _clean_cell_content(self, cell: str) -> str:
"""
Clean up cell contents, processMarkdownFormat
Args:
cell: Raw Cell Contents
Returns:
str: Post-Cleanup Content
"""
if not cell:
return ""
# Remove extra spaces
cleaned = cell.strip()
# Medical Treatment:MarkdownFormatting tags (simplified processing)
# Remove bold mark
cleaned = cleaned.replace("**", "")
# Remove italic mark
cleaned = cleaned.replace("*", "")
# Remove code marker
cleaned = cleaned.replace("`", "")
# Working with link formats [text](url) -> text
import re
cleaned = re.sub(r"\[([^\]]+)\]\([^\)]+\)", r"\1", cleaned)
# Limit length
if len(cleaned) > 100:
cleaned = cleaned[:97] + "..."
return cleaned
def _insert_markdown_table(self, paragraph, table_data: List[List[str]], alignments: List[str]):
"""
Insert ExclusivelyMarkdownTable with support for alignment information
Args:
paragraph: WordParagraph object
table_data: Form Data
alignments: Alignment Info List
"""
try:
if not table_data:
paragraph.add_run("Table data is empty")
return
rows = len(table_data)
cols = len(alignments)
# Simplify processing: insert a table directly at the paragraph position
paragraph_element = paragraph._element
paragraph_parent = paragraph_element.getparent()
# Create Table
table = self.doc.add_table(rows=rows, cols=cols)
table_element = table._tbl
# Insert table directly after paragraph
paragraph_index = list(paragraph_parent).index(paragraph_element)
paragraph_parent.insert(paragraph_index + 1, table_element)
# PengaturanMarkdownTable-specific styles
try:
table.style = "Light List - Accent 1" # Refreshing list style
except Exception:
try:
table.style = "Table Grid" # Alternative style
except Exception:
pass
# Populate table data and set alignment
for i, row_data in enumerate(table_data):
for j, cell_data in enumerate(row_data):
if j < cols:
cell = table.cell(i, j)
cell.text = str(cell_data)
# accordingMarkdownAlignment Info Set Cell Alignment
cell_paragraphs = cell.paragraphs
if cell_paragraphs and j < len(alignments):
alignment = alignments[j]
if alignment == "center":
cell_paragraphs[0].alignment = 1 # Center
elif alignment == "right":
cell_paragraphs[0].alignment = 2 # Halign Right
else: # left
cell_paragraphs[0].alignment = 0 # Align left
# MarkdownTable style: The first row is usually the header
if rows > 0:
for cell in table.rows[0].cells:
# Header Style
for paragraph in cell.paragraphs:
for run in paragraph.runs:
run.bold = True
# Set header background color (light gray, better forMarkdownSTYLE #
try:
from docx.oxml import parse_xml
shading_elm = parse_xml(
r''.format(
'xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"'
)
)
cell._tc.get_or_add_tcPr().append(shading_elm)
except Exception:
pass
# Set Table Layout
try:
table.autofit = True
from docx.shared import Inches
table.width = Inches(6.5)
except Exception:
pass
# Set a more compact line height (MarkdownSTYLE #
try:
for row in table.rows:
row.height = Inches(0.25) # .ExcelForms are more compact
for cell in row.cells:
# Smaller margin
cell.margin_left = Inches(0.03)
cell.margin_right = Inches(0.03)
cell.margin_top = Inches(0.01)
cell.margin_bottom = Inches(0.01)
except Exception:
pass
logger.info(f"Succesfully insertedMarkdownTable, Size: {rows}x{cols}Align: {alignments}")
except Exception as e:
paragraph.add_run(f"Table insertion failed: {str(e)}")
logger.error(f"InsertMarkdownTable failed: {str(e)}")
def _insert_table_at_position(self, paragraph, table_data: List[List[str]]):
"""
Insert a table at the current position of the paragraph, and the table will appear before the paragraph
Args:
paragraph: WordParagraph object
table_data: Form Data
"""
try:
if not table_data:
paragraph.add_run("[Table data is empty]")
return
rows = len(table_data)
cols = max(len(row) for row in table_data) if table_data else 1
# Get the position of the paragraph in the document
paragraph_element = paragraph._element
paragraph_parent = paragraph_element.getparent()
paragraph_index = list(paragraph_parent).index(paragraph_element)
# Create Table
table = self.doc.add_table(rows=rows, cols=cols)
table_element = table._tbl
# Insert table before paragraph (so the table appears in the current content position)
paragraph_parent.insert(paragraph_index, table_element)
# Fill in the table data and style it
self._fill_and_style_table(table, table_data)
except Exception as e:
paragraph.add_run(f"[Table insertion failed: {str(e)}]")
logger.error(f"Failed to insert table: {str(e)}")
def _insert_table(self, paragraph, table_data: List[List[str]]):
"""
Insert high quality table after paragraph
Args:
paragraph: WordParagraph object
table_data: Form Data
"""
try:
if not table_data:
paragraph.add_run("[Table data is empty]")
return
# Add table after paragraph
rows = len(table_data)
cols = max(len(row) for row in table_data) if table_data else 1
# Simplify processing: insert a table directly at the paragraph position
paragraph_element = paragraph._element
paragraph_parent = paragraph_element.getparent()
# Create Table
table = self.doc.add_table(rows=rows, cols=cols)
table_element = table._tbl
# Insert table directly after paragraph
paragraph_index = list(paragraph_parent).index(paragraph_element)
paragraph_parent.insert(paragraph_index + 1, table_element)
# Fill in the table data and style it
self._fill_and_style_table(table, table_data)
except Exception as e:
paragraph.add_run(f"[Table insertion failed: {str(e)}]")
logger.error(f"Failed to insert table: {str(e)}")
def _fill_and_style_table(self, table, table_data: List[List[str]]):
"""
Fill in the table data and style it
Args:
table: WordTable Object
table_data: Form Data
"""
rows = len(table_data)
# Calculate the maximum number of columns, taking into account possible empty rows
cols = max((len(row) for row in table_data if row), default=1)
# Set a more professional table style
try:
# Try a better built-in style
table.style = "Light Shading - Accent 1" # Light Shadow Style
except Exception:
try:
table.style = "Table Grid" # Alternative style
except Exception:
pass # If the style does not exist, use the default style
# Populate table data
for i, row_data in enumerate(table_data):
# Ensure that empty lines can also be handled correctly
current_row = row_data if row_data else []
# Populate all columns of the row
for j in range(cols):
cell = table.cell(i, j)
if j < len(current_row):
cell_data = current_row[j]
else:
cell_data = "" # Empty Cells
cell.text = str(cell_data)
# Set cell alignment
cell_paragraphs = cell.paragraphs
if cell_paragraphs:
# Numbers aligned right, text aligned left
cell_text = str(cell_data).strip()
if self._is_number(cell_text):
cell_paragraphs[0].alignment = 2 # Halign Right
else:
cell_paragraphs[0].alignment = 0 # Align left
# Set header style (first line)
if rows > 0:
for cell in table.rows[0].cells:
# Align Header Centered
for paragraph in cell.paragraphs:
paragraph.alignment = 1 # Center Alignment
for run in paragraph.runs:
run.bold = True
# Try setting the header background color (if supported)
try:
from docx.oxml import parse_xml
shading_elm = parse_xml(
r''.format(
'xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"'
)
)
cell._tc.get_or_add_tcPr().append(shading_elm)
except Exception:
pass # If setting the background color fails, continue
# Auto Fit Column Width
try:
table.autofit = True
# Set table width to page width
from docx.shared import Inches
table.width = Inches(6.5) # ca.A4Width (%)
except Exception:
pass
# Set row height and cell margin
try:
for row in table.rows:
row.height = Inches(0.3) # Set Row Heights
for cell in row.cells:
# Set cell margin
cell.margin_left = Inches(0.05)
cell.margin_right = Inches(0.05)
cell.margin_top = Inches(0.02)
cell.margin_bottom = Inches(0.02)
except Exception:
pass
logger.info(f"Successfully set table style and data, size: {rows}x{cols}")
def _create_table_element(self, table_data: List[List[str]]):
"""
Create a table element
Args:
table_data: Form Data [[row1_col1, row1_col2], [row2_col1, row2_col2]]
Returns:
Form Elements
"""
try:
# Handling completely data-free scenarios: creating minimal tables
if not table_data:
logger.info("Table data isNoneor an empty list to create a minimal table:1x1")
table = self.doc.add_table(rows=1, cols=1)
table.cell(0, 0).text = "" # Empty Cells
return table._tbl
# Calculate table size: keep original structure even if all rows are empty
rows = len(table_data)
if rows == 0:
logger.info("The number of rows in the table is0, create a minimal table:1x1")
table = self.doc.add_table(rows=1, cols=1)
table.cell(0, 0).text = ""
return table._tbl
# Calculate the maximum number of columns, if all rows are empty, the default is1column
cols = max((len(row) for row in table_data if row), default=1)
logger.info(f"Create Table{rows}Parade x {cols}column")
table = self.doc.add_table(rows=rows, cols=cols)
# Fill in the table data and style it
self._fill_and_style_table(table, table_data)
return table._tbl
except Exception as e:
logger.error(f"Form element creation failed: {str(e)}", exc_info=True)
return None
def _create_new_paragraph_after_table(self, parent, table_index, style_info=None):
"""
Create new paragraph after table
Args:
parent: Parent Container
table_index: Index of the table in the parent container
style_info: Style information dictionary for applying to new paragraphs
Returns:
New Paragraph Object
"""
try:
# Create a new paragraph
new_paragraph = self.doc.add_paragraph()
# Apply style information
if style_info:
self._apply_style_info(new_paragraph, style_info)
alignment_info = f"inherit styles, aligning={style_info.get('alignment', 'None')}"
else:
# Back of pocket: set to left alignment
from docx.enum.text import WD_ALIGN_PARAGRAPH
new_paragraph.alignment = WD_ALIGN_PARAGRAPH.LEFT
alignment_info = "Default left alignment"
paragraph_element = new_paragraph._element
# Insert new paragraph after table
parent.insert(table_index + 1, paragraph_element)
return new_paragraph
except Exception as e:
logger.error(f"Failed to create new paragraph: {str(e)}", exc_info=True)
return None
def _extract_paragraph_style_info(self, paragraph):
"""
Extract full style information for paragraphs
Args:
paragraph: Paragraph object
Returns:
dict: Dictionary containing paragraph style information
"""
try:
style_info = {
'alignment': paragraph.alignment,
'paragraph_format': {},
'style_name': None
}
# Extract paragraph formatting information
if hasattr(paragraph, 'paragraph_format'):
pf = paragraph.paragraph_format
style_info['paragraph_format'] = {
'space_before': pf.space_before,
'space_after': pf.space_after,
'line_spacing': pf.line_spacing,
'left_indent': pf.left_indent,
'right_indent': pf.right_indent,
'first_line_indent': pf.first_line_indent,
}
# Extract Style Name
if hasattr(paragraph, 'style') and paragraph.style:
style_info['style_name'] = paragraph.style.name
return style_info
except Exception as e:
logger.warning(f"Failed to extract paragraph style: {str(e)}")
return {'alignment': None, 'paragraph_format': {}, 'style_name': None}
def _apply_style_info(self, paragraph, style_info):
"""
Apply style information to paragraphs
Args:
paragraph: Target Paragraph Object
style_info: Style Information Dictionary
"""
try:
# Apply alignment
if style_info.get('alignment') is not None:
paragraph.alignment = style_info['alignment']
# Apply Paragraph Formatting
paragraph_format = style_info.get('paragraph_format', {})
if paragraph_format:
pf = paragraph.paragraph_format
for attr_name, value in paragraph_format.items():
if value is not None and hasattr(pf, attr_name):
try:
setattr(pf, attr_name, value)
except Exception:
pass # Ignore formatting application failed
# Apply style name
style_name = style_info.get('style_name')
if style_name:
try:
paragraph.style = style_name
except Exception:
pass # Ignore style application failed
except Exception as e:
logger.warning(f"Failed to apply style information: {str(e)}")
def _is_number(self, text: str) -> bool:
"""
Determine if the text is a number
Args:
text: Text to judge
Returns:
bool: Is numeric
"""
if not text:
return False
# Remove thousands separator and spaces
clean_text = text.replace(",", "").replace(" ", "").replace("%", "")
try:
float(clean_text)
return True
except ValueError:
return False
def render(self, template_def, resources: Dict[str, List[Dict[str, Any]]] = None):
"""
Render templates for image and table insertion
Args:
template_def: Template Definition List
resources: A dictionary of resource information, including pictures,Exceldocumentation andMarkdownTable Filter
"""
doc = self.doc
# If no incomingresources, using an empty dictionary
if resources is None:
resources = {"images": [], "excel_files": [], "csv_files": [], "markdown_tables": []}
# Create placeholder-to-resource mapping
placeholder_map = {}
# Image placeholder mapping
for img_info in resources.get("images", []):
placeholder_map[img_info["placeholder"]] = {
"type": "image",
"path": img_info["local_path"],
"alt_text": img_info["alt_text"],
"resource_type": img_info["type"],
}
# ExcelFile placeholder mapping
for excel_info in resources.get("excel_files", []):
placeholder_map[excel_info["placeholder"]] = {
"type": "excel",
"path": excel_info["local_path"],
"resource_type": excel_info["type"],
"table_data": excel_info.get("table_data", []), # Tambahtable_dataData field
"alignments": excel_info.get("alignments", None), # TambahalignmentsData field
}
# CSVFile placeholder mapping
for csv_info in resources.get("csv_files", []):
placeholder_map[csv_info["placeholder"]] = {
"type": "csv",
"file_name": csv_info.get("file_name", "UnknownCSVDoc."),
"table_data": csv_info.get("table_data", []),
"resource_type": csv_info.get("type", "content"),
}
# MarkdownTable placeholder mapping
for table_info in resources.get("markdown_tables", []):
placeholder_map[table_info["placeholder"]] = {"type": "markdown_table", "content": table_info["content"]}
# Original Text Replacement Logic
for replace_info in template_def:
k1 = replace_info[0]
v1 = replace_info[1]
# Work with placeholders in tables
for table in doc.tables:
for i, row in enumerate(table.rows):
for j, cell in enumerate(row.cells):
if k1 in cell.text:
for one in cell.paragraphs:
if k1 in one.text:
# Checks for placeholders requiring special handling
cell_text = one.text.replace(k1, v1)
# Processing Placeholders
for placeholder, resource_info in placeholder_map.items():
if placeholder in cell_text:
if resource_info["type"] == "image":
# Insert Actual Picture in Table Cell
image_path = resource_info.get("local_path") or resource_info.get(
"path", "")
if image_path and os.path.exists(image_path):
try:
# Clear cell text
cell_text = cell_text.replace(placeholder, "")
# Insert Picture in Cell
self._insert_image_in_table_cell(cell, image_path)
logger.info(f"✅ Picture successfully inserted in table cell: {image_path}")
except Exception as e:
logger.error(f"❌ Table Cell Insert Picture Failed: {str(e)}")
# Show file name on failure
cell_text = cell_text.replace(placeholder,
os.path.basename(image_path))
else:
# Image file does not exist, display path
cell_text = cell_text.replace(placeholder, resource_info.get("path",
placeholder))
elif resource_info["type"] == "excel":
cell_text = cell_text.replace(placeholder, "[ExcelTable Filter]")
elif resource_info["type"] == "csv":
cell_text = cell_text.replace(placeholder, "[CSVTable Filter]")
elif resource_info["type"] == "markdown_table":
cell_text = cell_text.replace(placeholder, "[MarkdownTable Filter]")
one.runs[0].text = cell_text
for r_index, r in enumerate(one.runs):
if r_index == 0:
continue
r.text = ""
# Processing Placeholders in Paragraphs
for p in doc.paragraphs:
if k1 not in p.text:
continue
runs_cnt = len(p.runs)
s_e = []
i = 0
while i < runs_cnt:
new_i = i + 1
for j in range(i + 1, runs_cnt + 1):
part_text = "".join([r.text for r in p.runs[i:j]])
if k1 in part_text:
# Find the smallest range containingk1right of privacyruns
tmp_i, tmp_j = i, j
while tmp_i <= tmp_j:
tmp_part_text = "".join([r.text for r in p.runs[tmp_i:tmp_j]])
if k1 in tmp_part_text:
tmp_i += 1
continue
else:
tmp_i -= 1
break
s_e.append((tmp_i, j))
new_i = j
break
i = new_i
for one in s_e:
s, e = one
assert e > 0, [r.text for r in p.runs]
if e - s == 1:
replace_mapping = [(k1, v1)]
elif e - s == 2:
s_tgt_text = p.runs[s].text
comm_str, max_num = find_lcs(k1, s_tgt_text)
assert k1.startswith(comm_str)
p1 = comm_str
p2 = k1[max_num:]
n = len(v1)
sub_n1 = int(1.0 * len(p1) / (len(p1) + len(p2)) * n)
replace_mapping = [(p1, v1[:sub_n1]), (p2, v1[sub_n1:])]
elif e - s == 3:
m_text = p.runs[s + 1].text
head_tail = k1.split(m_text, 1)
assert len(head_tail) == 2
h_text = head_tail[0]
t_text = head_tail[1]
replace_mapping = [(h_text, ""), (m_text, v1), (t_text, "")]
else:
m_texts = [p.runs[i].text for i in range(s + 1, e - 1)]
m_text = "".join(m_texts)
head_tail = k1.split(m_text, 1)
assert len(head_tail) == 2
h_text = head_tail[0]
t_text = head_tail[1]
replace_mapping = [(h_text, "")]
replace_mapping.append((m_texts[0], v1))
for text in m_texts[1:]:
replace_mapping.append((text, ""))
replace_mapping.append((t_text, ""))
for i in range(s, e):
_k, _v = replace_mapping[i - s]
p.runs[i].text = p.runs[i].text.replace(_k, _v)
# Unify resource placeholders after all variable replacements are complete
self._process_resource_placeholders(doc, placeholder_map)
# Add Final Document Content Check
self._log_final_document_content(doc)
return doc
def _log_final_document_content(self, doc):
"""Review final document content"""
try:
# Check for unprocessedfile contentlabel
for i, paragraph in enumerate(doc.paragraphs):
paragraph_text = paragraph.text.strip()
if paragraph_text and 'file content' in paragraph_text.lower():
logger.warning(f"Unprocessed foundfile contentLabel, paragraph{i}: {paragraph_text[:200]}...")
except Exception as e:
logger.error(f"Failed to check document content: {str(e)}")
def test_replace_string(template_file, kv_dict: dict, file_name: str):
# If the file is a web path, download it to a temporary file, and use that
if not os.path.isfile(template_file) and _is_valid_url(template_file):
r = requests.get(template_file)
if r.status_code != 200:
raise ValueError("Check the url of your file; returned status code %s" % r.status_code)
temp_dir = tempfile.TemporaryDirectory()
temp_file = Path(temp_dir.name) / unquote(urlparse(template_file).path.split("/")[-1])
with open(temp_file, mode="wb") as f:
f.write(r.content)
template_file = temp_file
elif not os.path.isfile(template_file):
raise ValueError("File path %s is not a valid file or url" % template_file)
template_dict = []
for k, v in kv_dict.items():
template_dict.append(["{{" + k + "}}", v])
doc = DocxTemplateRender(str(template_file))
output = doc.render(template_dict)
temp_dir = tempfile.TemporaryDirectory()
temp_file = Path(temp_dir.name) / file_name
output.save(temp_file)
minio_client = get_minio_storage_sync()
minio_client.put_object_sync(bucket_name=minio_client.bucket, object_name=file_name, file=temp_file)
return file_name
================================================
FILE: src/backend/bisheng/utils/exceptions.py
================================================
class IgnoreException(Exception):
def __init__(self, message):
self.message = message
super().__init__(self.message)
def __str__(self):
return self.message
# For business exception throwing error message
class MessageException(Exception):
def __init__(self, message):
self.message = message
super().__init__(self.message)
def __str__(self):
return self.message
class FileParseException(Exception):
def __init__(self, message):
self.message = message
super().__init__(self.message)
def __str__(self):
return self.message
class EtlException(Exception):
def __init__(self, message):
self.message = message
super().__init__(self.message)
def __str__(self):
return self.message
================================================
FILE: src/backend/bisheng/utils/http_middleware.py
================================================
# Define a custom middleware class
from time import time
from fastapi import Request
from loguru import logger
from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint
from bisheng.core.logger import trace_id_generator, trace_id_var
from bisheng.utils import get_request_ip
class CustomMiddleware(BaseHTTPMiddleware):
"""Cutting Procedure"""
async def dispatch(self, request: Request, call_next: RequestResponseEndpoint):
# You can modify the request before passing it to the next middleware or endpoint
if request.headers.get('x-trace-id'):
trace_id = request.headers.get('x-trace-id')
else:
trace_id = trace_id_generator()
# WithNginx choose one of two Gotta see.NGINX Configuration of
ip = get_request_ip(request)
path = request.url
trace_id_var.set(trace_id)
logger.info(f"| {ip} | {request.method} {path}")
start_time = time()
response = await call_next(request)
process_time = round(time() - start_time, 4)
response.headers["X-Process-Time"] = str(process_time)
response.headers["X-Trace-ID"] = trace_id
logger.info(f"| {ip} | {request.method} {path} | process_time={process_time}s")
return response
class WebSocketLoggingMiddleware:
"""WebSocket Log middleware"""
def __init__(self, app):
self.app = app
async def __call__(self, scope, receive, send):
if scope["type"] == "websocket":
trace_id = trace_id_generator()
trace_id_var.set(trace_id)
await self.app(scope, receive, send)
================================================
FILE: src/backend/bisheng/utils/lazy_load.py
================================================
class LazyLoadDictBase:
def __init__(self):
self._all_types_dict = None
@property
def all_types_dict(self):
if self._all_types_dict is None:
self._all_types_dict = self._build_dict()
return self._all_types_dict
def _build_dict(self):
raise NotImplementedError
def get_type_dict(self):
raise NotImplementedError
================================================
FILE: src/backend/bisheng/utils/linked_list.py
================================================
# -*- coding: utf-8 -*-
from __future__ import print_function
class DoubleNode(object):
"""node_amb"""
def __init__(self, data):
# Identity Data Domain
self.data = data
# Identify the previous linked domain
self.prev = None
# Identify the next linked domain
self.next = None
class DoubleLinkList(object):
"""Double linked watch"""
def head(self):
return self.__head
def __init__(self, node=None):
# Private Attribute Header Node
self.__head = node
# is_empty() Is the linked list empty
def is_empty(self):
return self.__head is None
# length() Link List Length
def length(self):
count = 0 # Number
# Current Node
current = self.__head
while current is not None:
count += 1
# Move the current node backward
current = current.next
return count
# travel() Traverse the entire linked list
def travel(self):
# Current node accessed
current = self.__head
print('[ ', end='')
while current is not None:
print(current.data, end=' ')
current = current.next
print(']')
# add(item) Adding elements to the head of a linked list
def add(self, item):
node = DoubleNode(item)
# The next node of the new node is the head node of the old linked list
node.next = self.__head
# The header node of the new linked list is the new node
self.__head = node
# The previous node of the next node points to the newly added node
node.next.prev = node
# append(item) Add an element at the end of the linked list
def append(self, item):
node = DoubleNode(item)
if self.is_empty():
# When empty node
self.__head = node
else:
# Let the pointer point to the last node
current = self.__head
while current.next is not None:
current = current.next
# The next of the last node is the newly addednode
current.next = node
# Newly added node The previous node is the current node
node.prev = current
# search(item) Find out if the node exists
def search(self, item):
# Current Node
current = self.__head
while current is not None:
if current.data == item:
# Found it.
return True
else:
current = current.next
return False
def find(self, item):
# Current Node
current = self.__head
while current is not None:
if current.data == item:
# Found it.
return current
else:
current = current.next
return None
# insert(index, item) Specify location (from0Start) Add Element
def insert(self, index, item):
if index <= 0:
# Insert Before
self.add(item)
elif index > (self.length() - 1):
# Add at the end
self.append(item)
else:
# Create a new section
node = DoubleNode(item)
current = self.__head
# Number of traversals
count = 0
# Find the previous node of the inserted node
while count < index:
count += 1
current = current.next
# The next node of the new node points to the current node
node.next = current
# The previous node of the new node points to the previous node of the current node
node.prev = current.prev
# The next node of the previous node of the current node points to the new node
current.prev.next = node
# The previous node of the current node points to the new node
current.prev = node
# remove(item) Delete node
def remove(self, item):
current = self.__head
while current is not None:
if current.data == item:
# Locate the node element you want to delete
if current == self.__head:
# Head Node
self.__head = current.next
if current.next:
# If there is not only one node left,
current.next.prev = None
else:
# The next node of the previous node of the current node points to the next node of the current node
current.prev.next = current.next
if current.next:
# If the last element is not deleted, the previous node of the next node of the current node points to the previous node of the current node
current.next.prev = current.prev
return # Return to current node
else:
# Nothing found, move backward
current = current.next
if __name__ == '__main__':
print('test:')
double_link_list = DoubleLinkList()
for i in range(10):
double_link_list.append(str(i)+":hello")
print('--------Determine if it is empty-------')
print(double_link_list.is_empty())
node = double_link_list.find('0:hello')
t = {}
t["abc"]="abc"
t["abc1"]="abc1"
print("{}",node.next.data)
print('-----------Longitudinal------------')
print(double_link_list.length())
double_link_list.append(2)
double_link_list.append(3)
double_link_list.append(5)
print('-----------Step Through------------')
double_link_list.travel()
double_link_list.add(1)
print('-----------Step Through------------')
double_link_list.travel()
double_link_list.add(0)
print('-----------Step Through------------')
double_link_list.travel()
double_link_list.insert(4, 4)
print('-----------Step Through------------')
double_link_list.travel()
double_link_list.insert(-1, -1)
print('-----------Step Through------------')
double_link_list.travel()
print('-----------Cari------------')
print(double_link_list.search(4))
print('-----------Delete------------')
double_link_list.remove(5)
double_link_list.remove(-1)
print('-----------Step Through------------')
double_link_list.travel()
print('-----------Longitudinal------------')
print(double_link_list.length())
================================================
FILE: src/backend/bisheng/utils/mask_data.py
================================================
import json
import re
from copy import deepcopy
from typing import Dict
class JsonFieldMasker:
def __init__(self):
# Define sensitive fields and corresponding desensitization rules
self.sensitive_fields = {
'phone': self.mask_phone,
'mobile': self.mask_phone,
'phone_number': self.mask_phone,
'tel': self.mask_phone,
'id_card': self.mask_id_card,
'identity_card': self.mask_id_card,
'email': self.mask_email,
'password': self.mask_password,
'credit_card': self.mask_credit_card,
'bank_card': self.mask_bank_card,
'address': self.mask_address,
'api_key': self.mask_api_key,
'api_secret': self.mask_api_key,
'openai_api_key': self.mask_api_key,
'siliconflow_api_key': self.mask_api_key,
'email_password': self.mask_api_key,
'jina_api_key': self.mask_api_key,
'app_secret': self.mask_api_key,
}
# Record regular expressions for desensitization mode
self.mask_patterns = {
'phone': r'^\d{3}\*{4}\d{4}$',
'id_card': r'^\d{6}\*{8}\d{4}$|^\d{3}\*{4}\d{3}\*{3}$',
'email': r'^[^*@]+\*[^*@]*@',
'password': r'^\*+$',
'credit_card': r'^\d{4}\*{8,12}\d{4}$',
'bank_card': r'^\d{4}\*{8,12}\d{4}$',
'name': r'^[^*]+\*+[^*]*$',
'address': r'^[^*]+\*+[^*]*$',
'api_key': r'^\*+$',
'api_secret': r'^\*+$',
'openai_api_key': r'^\*+$',
'siliconflow_api_key': r'^\*+$',
'email_password': r'^\*+$',
'jina_api_key': r'^\*+$',
'app_secret': r'^\*+$',
}
def mask_api_key(self, api_key: str) -> str:
"""ImmunosuppressionAPIKey"""
if not api_key:
return api_key
return '********'
def mask_phone(self, phone: str) -> str:
"""Desensitized phone number"""
if not phone or len(phone) < 7:
return phone
return phone[:3] + '****' + phone[-4:]
def mask_id_card(self, id_card: str) -> str:
"""Desensitization ID number"""
if not id_card:
return id_card
if len(id_card) == 18: # 18bits ID card
return id_card[:6] + '********' + id_card[-4:]
elif len(id_card) == 15: # 15bits ID card
return id_card[:3] + '****' + id_card[7:10] + '***'
return '*' * 8
def mask_email(self, email: str) -> str:
"""Desensitization email"""
if '@' not in email:
return email
username, domain = email.split('@', 1)
if len(username) > 2:
masked_username = username[0] + '*' * 3 + username[-1]
else:
masked_username = '*' * len(username)
return f'{masked_username}@{domain}'
def mask_password(self, password: str) -> str:
"""Desensitization password"""
return '********'
def mask_credit_card(self, card: str) -> str:
"""Desensitized credit card number"""
if not card or len(card) < 8:
return card
return card[:4] + '*' * (len(card) - 8) + card[-4:]
def mask_bank_card(self, card: str) -> str:
"""Desensitized bank card number"""
if not card or len(card) < 8:
return card
return card[:4] + '*' * (len(card) - 8) + card[-4:]
def mask_name(self, name: str) -> str:
"""Desensitization Name"""
if not name:
return name
if len(name) == 2:
return name[0] + '*'
elif len(name) > 2:
return name[0] + '*' * (len(name) - 2) + name[-1]
return '*'
def mask_address(self, address: str) -> str:
"""Desensitization Address"""
if not address or len(address) <= 4:
return address
visible_length = min(4, len(address) // 3)
return address[:visible_length] + '****' + address[-visible_length:]
def is_masked_value(self, value: str, field_type: str) -> bool:
"""Determine if the value is already desensitized"""
if not isinstance(value, str):
return False
if field_type in self.mask_patterns:
pattern = self.mask_patterns[field_type]
return bool(re.match(pattern, value))
return False
def mask_json(self, data: Dict) -> Dict:
"""
ImmunosuppressionJSONDATA
Args:
data: OriginalJSONDATA
Returns:
Data after desensitization
"""
if not isinstance(data, dict):
return data
result = {}
for key, value in data.items():
if key in self.sensitive_fields:
mask_func = self.sensitive_fields[key]
if isinstance(value, str):
result[key] = mask_func(value)
elif isinstance(value, dict):
# If the value is a dictionary, recursive processing
result[key] = self.mask_json(value)
else:
# Desensitization after conversion of other types to strings
result[key] = mask_func(str(value))
elif isinstance(value, dict):
# Insensitive fields, recursive processing of nested dictionaries
result[key] = self.mask_json(value)
else:
# Non-sensitive fields, leave as is
result[key] = value
return result
def update_json_with_masked(self, original: Dict, masked: Dict) -> Dict:
"""
After desensitizationJSONUpdate originalJSON
Rule: If the field value after desensitization is still desensitized, it will not be updated;
Otherwise, update the original value with the desensitized value
Args:
original: OriginalJSONDATA
masked: After desensitizationJSONDATA
Returns:
Updated data
"""
if not isinstance(original, dict) or not isinstance(masked, dict):
return masked if isinstance(masked, dict) else original
result = deepcopy(original)
for key, masked_value in masked.items():
if key in result:
original_value = result[key]
if key in self.sensitive_fields:
# Sensitive Fields: Check for desensitization
if isinstance(masked_value, str) and isinstance(original_value, str):
if self.is_masked_value(masked_value, key):
# Still desensitized, don't update
result[key] = original_value
else:
# Restored to desensitized, updated
result[key] = masked_value
elif isinstance(masked_value, dict) and isinstance(original_value, dict):
# Nested dictionaries, recursive processing
result[key] = self.update_json_with_masked(original_value, masked_value)
else:
# Type mismatch, keep original value
result[key] = original_value
else:
# Non-Sensitive Fields
if isinstance(masked_value, dict) and isinstance(original_value, dict):
# Nested dictionaries, recursive processing
result[key] = self.update_json_with_masked(original_value, masked_value)
else:
# Non-nested fields, update directly
result[key] = masked_value
else:
# Keys that are not in the original data, add them directly
result[key] = masked_value
return result
def safe_update_json(self, original_json: str, masked_json: str) -> str:
"""
SafeJSONUpdate: InsightsJSONString, update, re-serialize
Args:
original_json: OriginalJSONString
masked_json: After desensitizationJSONString
Returns:
Post UpdateJSONString
"""
try:
original_data = json.loads(original_json)
masked_data = json.loads(masked_json)
if not isinstance(original_data, dict) or not isinstance(masked_data, dict):
raise ValueError("JSONData must be of object type")
updated_data = self.update_json_with_masked(original_data, masked_data)
return json.dumps(updated_data, ensure_ascii=False, indent=2)
except json.JSONDecodeError as e:
raise ValueError(f"InvalidJSONDATA: {e}")
# Example Use
def main():
masker = JsonFieldMasker()
# OriginalJSONDATA
original_data = {
"user": {
"id": 1,
"name": "Zhang San",
"phone": "13800138000",
"email": "zhangsan@example.com",
"id_card": "110101199001011234",
"bank_card": "6228480402564890018",
"address": "Jianguomenwai Street, Chaoyang District, Beijing1.",
"details": {
"emergency_contact": "Lisi",
"emergency_phone": "13987654321"
}
},
"password": "mysecret123",
"timestamp": "2023-10-01T12:00:00Z"
}
print("OriginalJSONDATA:")
print(json.dumps(original_data, ensure_ascii=False, indent=2))
print("\n" + "=" * 50 + "\n")
# 1. Perform desensitization
masked_data = masker.mask_json(original_data)
print("After desensitizationJSONDATA:")
print(json.dumps(masked_data, ensure_ascii=False, indent=2))
print("\n" + "=" * 50 + "\n")
# 2. Simulated modified desensitization data
modified_masked_data = deepcopy(masked_data)
# Modify some fields
modified_masked_data["user"]["name"] = "Pcs*" # Keep desensitization
modified_masked_data["user"]["phone"] = "13812345678" # Change to a new phone number
modified_masked_data["user"]["email"] = "zhang@newmail.com" # Modify email
modified_masked_data["password"] = "newpassword123" # Change the password
modified_masked_data["timestamp"] = "2023-10-02T12:00:00Z" # Revision timestamp
print("Modified desensitizationJSONDATA:")
print(json.dumps(modified_masked_data, ensure_ascii=False, indent=2))
print("\n" + "=" * 50 + "\n")
# 3. Update raw data with desensitized data
updated_data = masker.update_json_with_masked(original_data, modified_masked_data)
print("Post UpdateJSONDATA:")
print(json.dumps(updated_data, ensure_ascii=False, indent=2))
# Show updated results analysis
print("\n" + "=" * 50)
print("Field Update Situation Analysis:")
print("-" * 30)
def analyze_updates(orig, updated, path=""):
for key in sorted(set(orig.keys()) | set(updated.keys())):
current_path = f"{path}.{key}" if path else key
if key in orig and key in updated:
orig_val = orig[key]
updated_val = updated[key]
if orig_val != updated_val:
is_sensitive = key in masker.sensitive_fields
if is_sensitive:
is_masked = masker.is_masked_value(str(updated_val), key) if isinstance(updated_val,
str) else False
status = "✓ Updated" if not is_masked else "✗ Not updated (still desensitized)"
else:
status = "✓ Updated (non-sensitive field)"
print(f"{current_path}: {status}")
print(f" Original Value: {orig_val}")
print(f" New Value: {updated_val}")
elif isinstance(orig_val, dict) and isinstance(updated_val, dict):
analyze_updates(orig_val, updated_val, current_path)
elif key in updated and key not in orig:
print(f"{current_path}: ✓ Added (new field)")
print(f" New Value: {updated[key]}")
analyze_updates(original_data, updated_data)
# Test StringJSONMedical Treatment:
print("\n" + "=" * 50)
print("Test StringJSONMedical Treatment::")
print("-" * 30)
original_json_str = json.dumps(original_data, ensure_ascii=False)
masked_json_str = json.dumps(modified_masked_data, ensure_ascii=False)
try:
updated_json_str = masker.safe_update_json(original_json_str, masked_json_str)
print("Post UpdateJSONString:")
print(updated_json_str)
except ValueError as e:
print(f"Error-free: {e}")
if __name__ == "__main__":
main()
================================================
FILE: src/backend/bisheng/utils/payload.py
================================================
import contextlib
import re
from typing import Dict
def extract_input_variables(nodes):
"""
Extracts input variables from the template
and adds them to the input_variables field.
"""
for node in nodes:
with contextlib.suppress(Exception):
if 'input_variables' in node['data']['node']['template']:
if node['data']['node']['template']['_type'] == 'prompt':
variables = re.findall(
r'\{(.*?)\}',
node['data']['node']['template']['template']['value'],
)
elif node['data']['node']['template']['_type'] == 'few_shot':
variables = re.findall(
r'\{(.*?)\}',
node['data']['node']['template']['prefix']['value'] +
node['data']['node']['template']['suffix']['value'],
)
else:
variables = []
node['data']['node']['template']['input_variables']['value'] = variables
return nodes
def get_root_node(graph):
"""
Returns the root node of the template.
"""
incoming_edges = {edge.source_id for edge in graph.edges}
input_node = {
edge.source_id
for edge in graph.edges if graph.get_vertex(edge.source_id).base_type == 'inputOutput'
}
if not incoming_edges and len(graph.vertices) == 1:
return graph.vertices[0]
node = {node for node in graph.vertices if node.id not in incoming_edges}
if input_node:
if node:
input_node = input_node.union(node)
return input_node
return node
def get_root_vertex(graph):
"""
Returns the root node of the template.
"""
incoming_edges = {edge.source_id for edge in graph.edges}
if not incoming_edges and len(graph.vertices) == 1:
return graph.vertices[0]
return next((node for node in graph.vertices if node.id not in incoming_edges), None)
def build_json(root, graph) -> Dict:
if 'node' not in root.data:
# If the root node has no "node" key, then it has only one child,
# which is the target of the single outgoing edge
edge = root.edges[0]
local_nodes = [edge.target]
else:
# Otherwise, find all children whose type matches the type
# specified in the template
node_type = root.node_type
local_nodes = graph.get_nodes_with_target(root)
if len(local_nodes) == 1:
return build_json(local_nodes[0], graph)
# Build a dictionary from the template
template = root.data['node']['template']
final_dict = template.copy()
for key, value in final_dict.items():
if key == '_type':
continue
node_type = value['type']
if 'value' in value and value['value'] is not None:
# If the value is specified, use it
value = value['value']
elif 'dict' in node_type:
# If the value is a dictionary, create an empty dictionary
value = {}
else:
# Otherwise, recursively build the child nodes
children = []
for local_node in local_nodes:
node_children = graph.get_children_by_node_type(local_node, node_type)
children.extend(node_children)
if value['required'] and not children:
raise ValueError(f'No child with type {node_type} found')
values = [build_json(child, graph) for child in children]
value = (
list(values) if value['list'] else next(iter(values), None) # type: ignore
)
final_dict[key] = value
return final_dict
================================================
FILE: src/backend/bisheng/utils/threadpool.py
================================================
import asyncio
import concurrent.futures
import threading
import time
from typing import Dict, List, Set, Tuple
from loguru import logger
from bisheng.core.logger import trace_id_var
class ThreadPoolManager:
def __init__(self, max_workers, thread_name_prefix='pool'):
self.thread_group = thread_name_prefix
self.executor = concurrent.futures.ThreadPoolExecutor(
max_workers=max_workers, thread_name_prefix=thread_name_prefix)
# Design one syndication per sync thread
self.future_dict: Dict[str, List[concurrent.futures.Future]] = {}
self.async_task: Dict[str, List[concurrent.futures.Future]] = {}
self.lock = threading.Lock()
def submit(self, key: str, fn, *args, **kwargs):
with self.lock:
if key not in self.future_dict:
self.future_dict[key] = []
if key not in self.async_task:
self.async_task[key] = []
if asyncio.coroutines.iscoroutinefunction(fn):
future = asyncio.create_task(self.acontext_wrapper(fn, *args, **kwargs))
self.async_task[key].append(future)
else:
future = self.executor.submit(self.context_wrapper, fn, *args, **kwargs)
self.future_dict[key].append(future)
return future
async def acontext_wrapper(self, func, *args, **kwargs):
start_wait = time.time()
kwargs.pop('trace_id', '2')
result = await func(*args, **kwargs)
end_wait = time.time() # Time when the task actually started
logger.info(
f'aTask_waited={end_wait - start_wait:.2f} seconds and {func.__name__} executed={time.time() - end_wait:.2f} seconds',
)
return result
def context_wrapper(self, func, *args, **kwargs):
trace_id = kwargs.pop('trace_id', '2')
start_wait = time.time()
trace_id_var.set(trace_id)
result = func(*args, **kwargs)
end_wait = time.time() # Time when the task actually started
logger.info(
f'Task_waited={end_wait - start_wait:.2f} seconds and executed={time.time() - end_wait:.2f} seconds',
)
return result
async def as_completed(self,
key_list: Set[str]) -> List[Tuple[str, concurrent.futures.Future]]:
with self.lock:
completed_futures = []
for k, lf in list(self.future_dict.items()):
for f in lf:
if f.done():
if k in key_list:
completed_futures.append((k, f))
self.future_dict[k].remove(f)
if len(lf) == 0:
self.future_dict.pop(k)
pending_count = 0
for k, lf in list(self.async_task.items()):
for f in lf:
if f.done():
# Dapatkantask
if k in key_list:
completed_futures.append((k, f))
self.async_task[k].remove(f)
else:
pending_count += 1
if len(lf) == 0:
self.async_task.pop(k)
if pending_count > 0:
logger.info('async_wait_count={}', pending_count)
return completed_futures
# async def async_done_callback(self, future):
# self.async_task_result.append(future)
def cancel_task(self, key_list: List[str]):
res = [False] * len(key_list)
with self.lock:
for index, key in enumerate(key_list):
if self.async_task.get(key):
for task in self.async_task.get(key):
cancel_res = task.cancel()
logger.info('clean_pending_task key={} task={} res={}', key, task,
cancel_res)
res[index] = cancel_res
if self.future_dict.get(key):
for task in self.future_dict.get(key):
res.append(task.cancel())
return res
def tear_down(self):
key_list = list(self.async_task.keys())
self.cancel_task(key_list)
self.executor.shutdown(cancel_futures=True)
# Create a thread pool manager
thread_pool = ThreadPoolManager(5)
if __name__ == '__main__':
def wait_(name: str):
logger.info('{} enter wait {}', threading.current_thread(), name)
time.sleep(10)
logger.info('{} done {}', threading.current_thread(), name)
async def await_(name: str = 1):
logger.info('{} enter wait {}', threading.current_thread(), name)
await asyncio.sleep(10)
logger.info('{} done {}', threading.current_thread(), name)
thread_pool.submit('ABB', wait_, 'NO.1')
thread_pool.submit('AAA', await_)
# time.sleep(3)
# thread_pool.submit("AA", wait_, "~~~~~~~~~~~~")
# thread_pool.submit("AA", await_, "NO.3")
# time.sleep(2)
# thread_pool.tear_down(["AAA"])
================================================
FILE: src/backend/bisheng/utils/util.py
================================================
import asyncio
import functools
import hashlib
import importlib
import inspect
import io
import logging
import re
import time
import zipfile
from functools import wraps
from typing import Dict, Optional, Union, List, Tuple
from urllib.parse import urlparse
from bisheng.template.frontend_node.constants import FORCE_SHOW_FIELDS
from bisheng.utils import constants
from docstring_parser import parse # type: ignore
logger = logging.getLogger(__name__)
def build_template_from_function(name: str, type_to_loader_dict: Dict, add_function: bool = False):
classes = [item.__annotations__['return'].__name__ for item in type_to_loader_dict.values()]
# Raise error if name is not in chains
if name not in classes:
raise ValueError(f'{name} not found')
for _type, v in type_to_loader_dict.items():
if v.__annotations__['return'].__name__ == name:
_class = v.__annotations__['return']
# Get the docstring
docs = parse(_class.__doc__)
variables = {'_type': _type}
for class_field_items, value in _class.__fields__.items():
if class_field_items in ['callback_manager']:
continue
variables[class_field_items] = {}
for name_, value_ in value.__repr_args__():
if name_ == 'default_factory':
try:
variables[class_field_items]['default'] = get_default_factory(
module=_class.__base__.__module__, function=value_)
except Exception:
variables[class_field_items]['default'] = None
elif name_ not in ['name']:
variables[class_field_items][name_] = value_
variables[class_field_items]['placeholder'] = (
docs.params[class_field_items] if class_field_items in docs.params else '')
# Adding function to base classes to allow
# the output to be a function
base_classes = get_base_classes(_class)
if add_function:
base_classes.append('function')
return {
'template': format_dict(variables, name),
'description': docs.short_description or '',
'base_classes': base_classes,
}
def build_template_from_class(name: str, type_to_cls_dict: Dict, add_function: bool = False):
classes = [item.__name__ for item in type_to_cls_dict.values()]
# Raise error if name is not in chains
if name not in classes:
raise ValueError(f'{name} not found.')
for _type, v in type_to_cls_dict.items():
if v.__name__ == name:
_class = v
# Get the docstring
docs = parse(_class.__doc__)
variables = {'_type': _type}
if getattr(_class, 'model_fields', None):
for class_field_items, value in _class.model_fields.items():
if class_field_items in ['callback_manager']:
continue
variables[class_field_items] = {}
for name_, value_ in value.__repr_args__():
if name_ == 'default_factory':
try:
variables[class_field_items]['default'] = get_default_factory(
module=_class.__base__.__module__, function=value_)
except Exception:
variables[class_field_items]['default'] = None
elif name_ not in ['name']:
variables[class_field_items][name_] = value_
variables[class_field_items]['placeholder'] = (
docs.params[class_field_items] if class_field_items in docs.params else '')
else:
for name, param in inspect.signature(_class.__init__).parameters.items():
if name == 'self':
continue
variables[name] = {}
variables[name]['default'] = get_default_factory(module=_class.__base__.__module__,
function=str(param.annotation))
variables[name]['annotation'] = str(param.annotation)
variables[name]['required'] = False
base_classes = get_base_classes(_class)
# Adding function to base classes to allow
# the output to be a function
if add_function:
base_classes.append('function')
return {
'template': format_dict(variables, name),
'description': docs.short_description or '',
'base_classes': base_classes,
}
return None
def build_template_from_method(
class_name: str,
method_name: str,
type_to_cls_dict: Dict,
add_function: bool = False,
):
classes = [item.__name__ for item in type_to_cls_dict.values()]
# Raise error if class_name is not in classes
if class_name not in classes:
raise ValueError(f'{class_name} not found.')
for _type, v in type_to_cls_dict.items():
if v.__name__ == class_name:
_class = v
# Check if the method exists in this class
if not hasattr(_class, method_name):
raise ValueError(f'Method {method_name} not found in class {class_name}')
# Get the method
method = getattr(_class, method_name)
# Get the docstring
docs = parse(method.__doc__)
# Get the signature of the method
sig = inspect.signature(method)
# Get the parameters of the method
params = sig.parameters
# Initialize the variables dictionary with method parameters
variables = {
'_type': _type,
**{
name: {
'default': param.default if param.default != param.empty else None,
'type': param.annotation if param.annotation != param.empty else None,
'required': param.default == param.empty,
}
for name, param in params.items() if name not in ['self', 'kwargs', 'args']
},
}
base_classes = get_base_classes(_class)
# Adding function to base classes to allow the output to be a function
if add_function:
base_classes.append('function')
return {
'template': format_dict(variables, class_name),
'description': docs.short_description or '',
'base_classes': base_classes,
}
def get_base_classes(cls):
"""Get the base classes of a class.
These are used to determine the output of the nodes.
"""
if hasattr(cls, '__bases__') and cls.__bases__:
bases = cls.__bases__
result = []
for base in bases:
if any(type in base.__module__ for type in ['pydantic', 'abc']):
continue
result.append(base.__name__)
base_classes = get_base_classes(base)
# check if the base_classes are in the result
# if not, add them
for base_class in base_classes:
if base_class not in result:
result.append(base_class)
else:
result = [cls.__name__]
if not result:
result = [cls.__name__]
return list(set(result + [cls.__name__]))
def get_default_factory(module: str, function: str):
pattern = r''
if match := re.search(pattern, function):
imported_module = importlib.import_module(module)
return getattr(imported_module, match[1])()
return None
def type_to_string(tp):
if getattr(tp, '__args__', None):
args_str = ','.join(type_to_string(arg) for arg in tp.__args__
if arg is not type(None)) # noqa
return f'{tp.__name__}[{args_str}]'
else:
return tp.__name__
def format_dict(d, name: Optional[str] = None):
"""
Formats a dictionary by removing certain keys and modifying the
values of other keys.
Args:
d: the dictionary to format
name: the name of the class to format
Returns:
A new dictionary with the desired modifications applied.
"""
need_remove_key = []
# Process remaining keys
for key, value in d.items():
if key == '_type':
continue
_type = value['type'] if 'type' in value else value['annotation']
if not isinstance(_type, str):
_type = type_to_string(_type)
# Remove 'Optional' wrapper
if 'Optional' in _type:
_type = _type.replace('Optional[', '')[:-1]
value['required'] = False
# Check for list type
if 'List' in _type or 'Sequence' in _type or 'Set' in _type:
_type = (_type.replace('List[', '').replace('Sequence[', '').replace('Set[', '')[:-1])
value['list'] = True
else:
value['list'] = False
# Replace 'Mapping' with 'dict'
if 'Mapping' in _type:
_type = _type.replace('Mapping', 'dict')
# Change type from str to Tool
value['type'] = 'Tool' if key in ['allowed_tools'] else _type
value['type'] = 'int' if key in ['max_value_length'] else value['type']
# Show or not field
value['show'] = bool(
(value['required'] and (key not in ['input_variables'] or name == 'SequentialChain'))
or key in FORCE_SHOW_FIELDS or 'api_key' in key)
# Add password field
value['password'] = any(text in key.lower()
for text in ['password', 'token', 'api', 'key'])
# Add multline
value['multiline'] = key in [
'suffix',
'prefix',
'template',
'examples',
'code',
'headers',
'format_instructions',
]
# Replace dict type with str
if 'dict' in value['type'].lower():
value['type'] = 'code'
if key == 'dict_':
value['type'] = 'file'
value['suffixes'] = ['.json', '.yaml', '.yml']
value['fileTypes'] = ['json', 'yaml', 'yml']
# Replace default value with actual value
if 'default' in value:
value['value'] = value['default']
value.pop('default')
if key == 'headers':
value['value'] = """{'Authorization':
'Bearer '}"""
# Add options to openai
if name == 'OpenAI' and key == 'model_name':
value['options'] = constants.OPENAI_MODELS
value['list'] = True
value['value'] = constants.OPENAI_MODELS[0]
elif name == 'ChatOpenAI' and key == 'model_name':
value['options'] = constants.CHAT_OPENAI_MODELS
value['list'] = True
value['value'] = constants.CHAT_OPENAI_MODELS[0]
elif (name == 'Anthropic' or name == 'ChatAnthropic') and key == 'model_name':
value['options'] = constants.ANTHROPIC_MODELS
value['list'] = True
value['value'] = constants.ANTHROPIC_MODELS[0]
if 'value' in value and type(value['value']) == set:
value['value'] = list(value['value'])
if 'value' in value and inspect.isfunction(value['value']):
need_remove_key.append(key)
for one in need_remove_key:
del d[one]
return d
def update_verbose(d: dict, new_value: bool) -> dict:
"""
Recursively updates the value of the 'verbose' key in a dictionary.
Args:
d: the dictionary to update
new_value: the new value to set
Returns:
The updated dictionary.
"""
for k, v in d.items():
if isinstance(v, dict):
update_verbose(v, new_value)
elif k == 'verbose':
d[k] = new_value
return d
def sync_to_async(func):
"""
Decorator to convert a sync function to an async function.
"""
@wraps(func)
async def async_wrapper(*args, **kwargs):
return func(*args, **kwargs)
return async_wrapper
def run_async(coro, loop=None):
"""
Run asynchronous functions
:param coro:
:param loop:
:return:
"""
if loop is None:
try:
loop = asyncio.get_running_loop()
return loop.run_until_complete(coro)
except RuntimeError:
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
return loop.run_until_complete(coro)
return loop.run_until_complete(coro)
def get_cache_key(flow_id: str, chat_id: str, vertex_id: str = None):
return f'{flow_id}_{chat_id}_{vertex_id}'
def _is_valid_url(url: str) -> bool:
"""Check if the url is valid."""
parsed = urlparse(url)
return bool(parsed.netloc) and bool(parsed.scheme)
# Retry decorator Asynchronous
def retry_async(num_retries=3, delay=0.5, return_exceptions=False):
def wrapper(func):
async def wrapped(*args, **kwargs):
for i in range(num_retries):
try:
return await func(*args, **kwargs)
except Exception as e:
logger.info(
f"Retrying {func.__name__} in {delay} seconds... Attempt {i + 1} of {num_retries}... error: {e}")
if i == num_retries - 1:
if return_exceptions:
# Return Exception Parameters will bee.argsSplit into tuples
return e.args if len(e.args) > 1 else e.args[0]
logger.error(f"Failed to execute {func.__name__} after {num_retries} retries")
raise e
await asyncio.sleep(delay)
return None
return wrapped
return wrapper
# Retry decorator
def retry_sync(num_retries=3, delay=0.5, return_exceptions=False):
def wrapper(func):
def wrapped(*args, **kwargs):
for i in range(num_retries):
try:
return func(*args, **kwargs)
except Exception as e:
logger.info(
f"Retrying {func.__name__} in {delay} seconds... Attempt {i + 1} of {num_retries}... error: {e}")
if i == num_retries - 1:
if return_exceptions:
# Return Exception Parameters will bee.argsSplit into tuples
return e.args if len(e.args) > 1 else e.args[0]
logger.error(f"Failed to execute {func.__name__} after {num_retries} retries")
raise e
time.sleep(delay)
return None
return wrapped
return wrapper
def calculate_md5(file: Union[str, bytes]):
"""Calculating the Document's MD5 .
Returns:
str: of the document MD5 .
"""
md5_hash = hashlib.md5()
if isinstance(file, bytes):
md5_hash.update(file)
return md5_hash.hexdigest()
else:
# Reading Files in Binary Form
with open(file, "rb") as f:
# Read files by block to avoid large files taking up too much memory
for chunk in iter(lambda: f.read(4096), b""):
md5_hash.update(chunk)
return md5_hash.hexdigest()
async def async_calculate_md5(file: Union[str, bytes]):
"""of the asynchronous computation document MD5 .
Returns:
str: of the document MD5 .
"""
import aiofiles
md5_hash = hashlib.md5()
if isinstance(file, bytes):
md5_hash.update(file)
return md5_hash.hexdigest()
else:
# Read files asynchronously in binary form
async with aiofiles.open(file, "rb") as f:
# Read files asynchronously by block to avoid large files taking up too much memory
while True:
chunk = await f.read(4096)
if not chunk:
break
md5_hash.update(chunk)
return md5_hash.hexdigest()
# Read all files in the directory
def read_files_in_directory(path: str):
"""
Reads all files in the directory and returns a list of filenames.
Args:
path (str): Directory Path
Returns:
list: List of filenames.
"""
import os
if not os.path.exists(path):
logger.error(f"Path {path} does not exist.")
return []
files = []
for root, _, filenames in os.walk(path):
for filename in filenames:
files.append(os.path.join(root, filename))
return files
def sync_func_to_async(func, executor=None):
@functools.wraps(func)
async def wrapper(*args, **kwargs):
loop = asyncio.get_running_loop()
bound_func = functools.partial(func, *args, **kwargs)
return await loop.run_in_executor(executor, bound_func)
return wrapper
def bytes_to_zip(
files: List[Tuple[str, bytes]],
compress_level: int = 6
) -> bytes:
"""
Package byte stream data intoZIPfiles, back toZIPByte Stream for Files
Parameters:
files: Contains(The file name, Byte Stream)List of tuples
compress_level: compression level(0-9),0Indicates no compression,9Represents the highest compression rate
Return:
Date GeneratedZIPFile Byte Stream
"""
try:
# Verify compression level
if not 0 <= compress_level <= 9:
raise ValueError("The compression level must be0to9Between")
# Create in-memory byte streams for storageZIPDATA
zip_buffer = io.BytesIO()
# BuatZIPFile and add byte stream data
with zipfile.ZipFile(
zip_buffer,
'w',
zipfile.ZIP_DEFLATED,
compresslevel=compress_level
) as zipf:
for filename, data in files:
# Enter your messageZIPAdd byte stream data to the file
zipf.writestr(filename, data)
print(f"Was added: {filename} (size: {len(data) / 1024:.2f} KB)")
# will beZIPData is positioned to the starting position and returns a byte stream
zip_buffer.seek(0)
zip_data = zip_buffer.getvalue()
logger.debug(f"\nZIPFile created successfully, total size: {len(zip_data) / 1024:.2f} KB")
return zip_data
except Exception as e:
logger.error(f"Packaging process error: {str(e)}")
raise e
================================================
FILE: src/backend/bisheng/utils/validate.py
================================================
import ast
import contextlib
import importlib
from types import FunctionType
from typing import Dict, List, Optional, Union
from bisheng.field_typing.constants import CUSTOM_COMPONENT_SUPPORTED_TYPES
def add_type_ignores():
if not hasattr(ast, 'TypeIgnore'):
class TypeIgnore(ast.AST):
_fields = ()
ast.TypeIgnore = TypeIgnore
def validate_code(code):
# Initialize the errors dictionary
errors = {'imports': {'errors': []}, 'function': {'errors': []}}
# Parse the code string into an abstract syntax tree (AST)
try:
tree = ast.parse(code)
except Exception as e:
errors['function']['errors'].append(str(e))
return errors
# Add a dummy type_ignores field to the AST
add_type_ignores()
tree.type_ignores = []
# Evaluate the import statements
for node in tree.body:
if isinstance(node, ast.Import):
for alias in node.names:
try:
importlib.import_module(alias.name)
except ModuleNotFoundError as e:
errors['imports']['errors'].append(str(e))
# Evaluate the function definition
for node in tree.body:
if isinstance(node, ast.FunctionDef):
code_obj = compile(ast.Module(body=[node], type_ignores=[]), '', 'exec')
try:
exec(code_obj)
except Exception as e:
errors['function']['errors'].append(str(e))
# Return the errors dictionary
return errors
def eval_function(function_string: str):
# Create an empty dictionary to serve as a separate namespace
namespace: Dict = {}
# Execute the code string in the new namespace
exec(function_string, namespace)
function_object = next(
(
obj
for name, obj in namespace.items()
if isinstance(obj, FunctionType) and obj.__code__.co_filename == ''
),
None,
)
if function_object is None:
raise ValueError('Function string does not contain a function')
return function_object
def execute_function(code, function_name, *args, **kwargs):
add_type_ignores()
module = ast.parse(code)
exec_globals = globals().copy()
for node in module.body:
if isinstance(node, ast.Import):
for alias in node.names:
try:
exec(
f"{alias.asname or alias.name} = importlib.import_module('{alias.name}')",
exec_globals,
locals(),
)
exec_globals[alias.asname or alias.name] = importlib.import_module(alias.name)
except ModuleNotFoundError as e:
raise ModuleNotFoundError(f'Module {alias.name} not found. Please install it and try again.') from e
function_code = next(
node for node in module.body if isinstance(node, ast.FunctionDef) and node.name == function_name
)
function_code.parent = None
code_obj = compile(ast.Module(body=[function_code], type_ignores=[]), '', 'exec')
try:
exec(code_obj, exec_globals, locals())
except Exception as exc:
raise ValueError('Function string does not contain a function') from exc
# Add the function to the exec_globals dictionary
exec_globals[function_name] = locals()[function_name]
return exec_globals[function_name](*args, **kwargs)
def create_function(code, function_name):
if not hasattr(ast, 'TypeIgnore'):
class TypeIgnore(ast.AST):
_fields = ()
ast.TypeIgnore = TypeIgnore
module = ast.parse(code)
exec_globals = globals().copy()
for node in module.body:
if isinstance(node, ast.Import):
for alias in node.names:
try:
exec_globals[alias.asname or alias.name] = importlib.import_module(alias.name)
except ModuleNotFoundError as e:
raise ModuleNotFoundError(f'Module {alias.name} not found. Please install it and try again.') from e
function_code = next(
node for node in module.body if isinstance(node, ast.FunctionDef) and node.name == function_name
)
function_code.parent = None
code_obj = compile(ast.Module(body=[function_code], type_ignores=[]), '', 'exec')
with contextlib.suppress(Exception):
exec(code_obj, exec_globals, locals())
exec_globals[function_name] = locals()[function_name]
# Return a function that imports necessary modules and calls the target function
def wrapped_function(*args, **kwargs):
for module_name, module in exec_globals.items():
if isinstance(module, type(importlib)):
globals()[module_name] = module
return exec_globals[function_name](*args, **kwargs)
return wrapped_function
def create_class(code, class_name):
"""
Dynamically create a class from a string of code and a specified class name.
:param code: String containing the Python code defining the class
:param class_name: Name of the class to be created
:return: A function that, when called, returns an instance of the created class
"""
if not hasattr(ast, 'TypeIgnore'):
ast.TypeIgnore = create_type_ignore_class()
module = ast.parse(code)
exec_globals = prepare_global_scope(code, module)
class_code = extract_class_code(module, class_name)
compiled_class = compile_class_code(class_code)
return build_class_constructor(compiled_class, exec_globals, class_name)
def create_type_ignore_class():
"""
Create a TypeIgnore class for AST module if it doesn't exist.
:return: TypeIgnore class
"""
class TypeIgnore(ast.AST):
_fields = ()
return TypeIgnore
def prepare_global_scope(code, module):
"""
Prepares the global scope with necessary imports from the provided code module.
:param module: AST parsed module
:return: Dictionary representing the global scope with imported modules
"""
exec_globals = globals().copy()
exec_globals.update(get_default_imports(code))
for node in module.body:
if isinstance(node, ast.Import):
for alias in node.names:
try:
exec_globals[alias.asname or alias.name] = importlib.import_module(alias.name)
except ModuleNotFoundError as e:
raise ModuleNotFoundError(f'Module {alias.name} not found. Please install it and try again.') from e
elif isinstance(node, ast.ImportFrom) and node.module is not None:
try:
imported_module = importlib.import_module(node.module)
for alias in node.names:
exec_globals[alias.name] = getattr(imported_module, alias.name)
except ModuleNotFoundError as e:
raise ModuleNotFoundError(f'Module {node.module} not found. Please install it and try again.') from e
return exec_globals
def extract_class_code(module, class_name):
"""
Extracts the AST node for the specified class from the module.
:param module: AST parsed module
:param class_name: Name of the class to extract
:return: AST node of the specified class
"""
class_code = next(node for node in module.body if isinstance(node, ast.ClassDef) and node.name == class_name)
class_code.parent = None
return class_code
def compile_class_code(class_code):
"""
Compiles the AST node of a class into a code object.
:param class_code: AST node of the class
:return: Compiled code object of the class
"""
code_obj = compile(ast.Module(body=[class_code], type_ignores=[]), '', 'exec')
return code_obj
def build_class_constructor(compiled_class, exec_globals, class_name):
"""
Builds a constructor function for the dynamically created class.
:param compiled_class: Compiled code object of the class
:param exec_globals: Global scope with necessary imports
:param class_name: Name of the class
:return: Constructor function for the class
"""
exec(compiled_class, exec_globals, locals())
exec_globals[class_name] = locals()[class_name]
# Return a function that imports necessary modules and creates an instance of the target class
def build_custom_class(*args, **kwargs):
for module_name, module in exec_globals.items():
if isinstance(module, type(importlib)):
globals()[module_name] = module
instance = exec_globals[class_name](*args, **kwargs)
return instance
build_custom_class.__globals__.update(exec_globals)
return build_custom_class
def get_default_imports(code_string):
"""
Returns a dictionary of default imports for the dynamic class constructor.
"""
default_imports = {
'Optional': Optional,
'List': List,
'Dict': Dict,
'Union': Union,
}
langflow_imports = list(CUSTOM_COMPONENT_SUPPORTED_TYPES.keys())
necessary_imports = find_names_in_code(code_string, langflow_imports)
langflow_module = importlib.import_module('bisheng.field_typing')
default_imports.update({name: getattr(langflow_module, name) for name in necessary_imports})
return default_imports
def find_names_in_code(code, names):
"""
Finds if any of the specified names are present in the given code string.
:param code: The source code as a string.
:param names: A list of names to check for in the code.
:return: A set of names that are found in the code.
"""
found_names = {name for name in names if name in code}
return found_names
def extract_function_name(code):
module = ast.parse(code)
for node in module.body:
if isinstance(node, ast.FunctionDef):
return node.name
raise ValueError('No function definition found in the code string')
def extract_class_name(code):
module = ast.parse(code)
for node in module.body:
if isinstance(node, ast.ClassDef):
return node.name
raise ValueError('No class definition found in the code string')
================================================
FILE: src/backend/bisheng/worker/README.md
================================================
# 毕昇异步任务模块
================================================
FILE: src/backend/bisheng/worker/__init__.py
================================================
# register tasks
from bisheng.worker.knowledge.file_worker import file_copy_celery, parse_knowledge_file_celery, \
retry_knowledge_file_celery
from bisheng.worker.knowledge.rebuild_knowledge_worker import rebuild_knowledge_celery
from bisheng.worker.telemetry.mid_table import sync_mid_user_increment, sync_mid_knowledge_increment, \
sync_mid_app_increment, sync_mid_user_interact_dtl
from bisheng.worker.test.test import add
from bisheng.worker.workflow.tasks import execute_workflow, continue_workflow, stop_workflow
================================================
FILE: src/backend/bisheng/worker/config.py
================================================
from bisheng.common.services.config_service import settings
broker_url = settings.celery_redis_url
task_serializer = 'json'
result_serializer = 'json'
accept_content = ['json']
timezone = 'Asia/Shanghai'
enable_utc = False
task_routes = settings.celery_task.task_routers
# redisHealth check interval, unit sec
redis_backend_health_check_interval = 5
beat_schedule = settings.celery_task.beat_schedule
================================================
FILE: src/backend/bisheng/worker/knowledge/__init__.py
================================================
================================================
FILE: src/backend/bisheng/worker/knowledge/file_worker.py
================================================
import json
from typing import List
from loguru import logger
from pymilvus import Collection, MilvusException
from bisheng.api.services.knowledge_imp import decide_vectorstores, process_file_task, delete_knowledge_file_vectors, \
KnowledgeUtils, delete_vector_files
from bisheng.api.v1.schemas import FileProcessBase
from bisheng.common.errcode.knowledge import KnowledgeFileFailedError
from bisheng.core.logger import trace_id_var
from bisheng.core.storage.minio.minio_manager import get_minio_storage_sync
from bisheng.interface.embeddings.custom import FakeEmbedding
from bisheng.knowledge.domain.models.knowledge import Knowledge, KnowledgeDao, KnowledgeTypeEnum, KnowledgeState
from bisheng.knowledge.domain.models.knowledge_file import (
KnowledgeFile,
KnowledgeFileDao,
KnowledgeFileStatus,
)
from bisheng.utils import generate_uuid
from bisheng.worker.main import bisheng_celery
from bisheng_langchain.vectorstores import ElasticKeywordsSearch, Milvus
@bisheng_celery.task(acks_late=True)
def file_copy_celery(param: json) -> str:
"""Copy a Knowledge Base file to another Knowledge Base
1. mysqlCopy of
2. Copying Files
3. Replication of vectors
"""
source_knowledge_id = param.get("source_knowledge_id")
target_id = param.get("target_id")
login_user_id = param.get("login_user_id")
logger.info(
"file_copy_celery start source_id={} target_id={}",
source_knowledge_id,
target_id,
)
page_size = 20
page_num = 1
source_knowledge = KnowledgeDao.query_by_id(source_knowledge_id)
target_knowledge = KnowledgeDao.query_by_id(target_id)
target_list: List[KnowledgeFile] = KnowledgeFileDao.get_file_by_condition(
target_id
) # All files
if target_list:
target_list = [t.md5 for t in target_list]
while True:
if source_knowledge.type == KnowledgeTypeEnum.NORMAL.value:
files = KnowledgeFileDao.get_file_by_filters(
source_knowledge_id, page=page_num, page_size=page_size
)
if not files:
# No more documents Buatmilvus collection And es index
create_milvus_col_and_es_index(source_knowledge, target_knowledge)
break
for one in files:
if target_list and one.md5 in target_list:
# Duplicate Tasks Prevent Duplicate Writes
continue
try:
copy_normal(
one,
source_knowledge,
target_knowledge,
login_user_id,
)
except Exception as e:
logger.error(f"copy file error: {one.file_name} {e}")
page_num += 1
if not files or len(files) < page_size:
break
# Recovery status
logger.info("file_copy_celery end")
target_knowledge.state = 1
KnowledgeDao.update_state(knowledge_id=source_knowledge.id, state=KnowledgeState.PUBLISHED,
update_time=source_knowledge.update_time)
KnowledgeDao.update_one(target_knowledge)
return "copy task done"
def copy_normal(
one: KnowledgeFile,
source_knowledge: Knowledge,
target_knowledge: Knowledge,
op_user_id: int,
):
one_dict = one.model_dump()
one_dict.pop("id")
one_dict.pop("update_time")
one_dict["user_id"] = op_user_id
one_dict["knowledge_id"] = target_knowledge.id
one_dict["status"] = KnowledgeFileStatus.PROCESSING.value
source_file_pdf = one.id
source_file = one.object_name
source_file_ext = one.object_name.split('.')[-1]
bbox_file = one.bbox_object_name
knowledge_new = KnowledgeFile(**one_dict)
knowledge_new = KnowledgeFileDao.add_file(knowledge_new)
# migrate file
try:
target_source_file = KnowledgeUtils.get_knowledge_file_object_name(knowledge_new.id, knowledge_new.file_name)
minio_client = get_minio_storage_sync()
# Copy source file
if minio_client.object_exists_sync(minio_client.bucket, source_file):
minio_client.copy_object_sync(source_bucket=minio_client.bucket, source_object=source_file,
dest_object=target_source_file, dest_bucket=minio_client.bucket)
knowledge_new.object_name = target_source_file
# Copy GeneratedpdfDoc.
if minio_client.object_exists_sync(minio_client.bucket, f"{source_file_pdf}"):
minio_client.copy_object_sync(source_bucket=minio_client.bucket, source_object=f"{source_file_pdf}",
dest_object=f"{knowledge_new.id}", dest_bucket=minio_client.bucket)
# Copies:bboxDoc.
if minio_client.object_exists_sync(object_name=bbox_file):
target_bbox_file = KnowledgeUtils.get_knowledge_bbox_file_object_name(knowledge_new.id)
minio_client.copy_object_sync(source_bucket=minio_client.bucket, source_object=bbox_file,
dest_object=target_bbox_file, dest_bucket=minio_client.bucket)
knowledge_new.bbox_object_name = target_bbox_file
preview_file = None
target_preview_file = None
# Copy preview file
if source_file_ext in ['doc', 'ppt', 'pptx']:
preview_file = KnowledgeUtils.get_knowledge_preview_file_object_name(one.id, one.file_name)
target_preview_file = KnowledgeUtils.get_knowledge_preview_file_object_name(knowledge_new.id,
knowledge_new.file_name)
if preview_file and target_preview_file:
if minio_client.object_exists_sync(minio_client.bucket, preview_file):
minio_client.copy_object_sync(source_bucket=minio_client.bucket, source_object=preview_file,
dest_object=target_preview_file, dest_bucket=minio_client.bucket)
except Exception as e:
logger.exception(f"copy_file_error file_id={knowledge_new.id}")
knowledge_new.remark = KnowledgeFileFailedError(exception=e).to_json_str()
knowledge_new.status = KnowledgeFileStatus.FAILED.value
KnowledgeFileDao.update(knowledge_new)
return
# copy vector
try:
if one.status == KnowledgeFileStatus.SUCCESS.value:
copy_vector(source_knowledge, target_knowledge, one.id, knowledge_new.id)
knowledge_new.status = KnowledgeFileStatus.SUCCESS.value
else:
knowledge_new.status = one.status
KnowledgeFileDao.update(knowledge_new)
except Exception as e:
logger.exception(e)
logger.error("source={} new={} e={}", one.id, knowledge_new.id, e)
knowledge_new.remark = KnowledgeFileFailedError(exception=e).to_json_str()
knowledge_new.status = KnowledgeFileStatus.FAILED.value
KnowledgeFileDao.update(knowledge_new)
def copy_vector(
source_konwledge: Knowledge,
target_knowledge: Knowledge,
source_file_id: int,
target_file_id: int,
):
# migrate vectordb
embedding = FakeEmbedding()
source_col = source_konwledge.collection_name
source_milvus: Milvus = decide_vectorstores(source_col, "Milvus", embedding)
# Saat Inies Exclusion:vector
fields = [s.name for s in source_milvus.col.schema.fields if s.name != "pk"]
source_data = source_milvus.col.query(
expr=f"document_id=={source_file_id} && knowledge_id=={source_konwledge.id}",
output_fields=fields,
)
for data in source_data:
data["knowledge_id"] = target_knowledge.id
data["document_id"] = target_file_id
milvus_db: Milvus = decide_vectorstores(
target_knowledge.collection_name, "Milvus", embedding
)
# Create a new one for the first time collection
if milvus_db.col is None:
new_col = Collection(name=target_knowledge.collection_name, schema=source_milvus.col.schema,
using=source_milvus.alias,
consistency_level=source_milvus.consistency_level)
milvus_db: Milvus = decide_vectorstores(
target_knowledge.collection_name, "Milvus", embedding
)
if milvus_db:
insert_milvus(source_data, fields, milvus_db)
es_db = decide_vectorstores(
target_knowledge.index_name, "ElasticKeywordsSearch", embedding
)
if es_db:
insert_es(source_data, es_db)
def create_milvus_col_and_es_index(source_konwledge: Knowledge, target_knowledge: Knowledge):
embedding = FakeEmbedding()
source_col = source_konwledge.collection_name
source_milvus: Milvus = decide_vectorstores(source_col, "Milvus", embedding)
milvus_db: Milvus = decide_vectorstores(
target_knowledge.collection_name, "Milvus", embedding
)
if milvus_db.col is None and source_milvus.col is not None:
new_col = Collection(name=target_knowledge.collection_name, schema=source_milvus.col.schema,
using=source_milvus.alias,
consistency_level=source_milvus.consistency_level)
new_col.load()
# Buates index
es_db = decide_vectorstores(
target_knowledge.index_name, "ElasticKeywordsSearch", embedding
)
es_db.client.indices.create(index=target_knowledge.index_name, ignore=400)
def insert_milvus(li: List, fields: list, target: Milvus):
total_count = len(li)
batch_size = 1000
res_list = []
for i in range(0, total_count, batch_size):
# Grab end index
end = min(i + batch_size, total_count)
# Convert dict to list of lists batch for insertion
insert_list = [[data[x] for data in li[i:end]] for x in fields]
# Insert into the collection.
try:
res: Collection
res = target.col.insert(insert_list, timeout=100)
res_list.extend(res.primary_keys)
except MilvusException as e:
logger.error(
"Failed to insert batch starting at entity: %s/%s", i, total_count
)
raise e
logger.info("copy_done pk_size={}", len(res_list))
def insert_es(li: List, target: ElasticKeywordsSearch):
from elasticsearch.helpers import bulk
res_list = []
ids = [generate_uuid() for _ in li]
requests = []
for i, data in enumerate(li):
text = data.pop("text")
data.pop("vector", "") # es Exclusion:vector
metadata = data
request = {
"_op_type": "index",
"_index": target.index_name,
"text": text,
"metadata": metadata,
"_id": ids[i],
}
requests.append(request)
bulk(target.client, requests)
target.client.indices.refresh(index=target.index_name)
logger.info("copy_es_done pk_size={}", len(res_list))
@bisheng_celery.task(acks_late=True)
def parse_knowledge_file_celery(file_id: int, preview_cache_key: str = None, callback_url: str = None):
""" Asynchronously parse one incoming successful file """
trace_id_var.set(f'parse_file_{file_id}')
logger.info(
f"parse_knowledge_file_celery start preview_cache_key={preview_cache_key}, callback_url={callback_url}")
try:
# After the warehousing is successful, it is judged whether the file information still exists, and if not, it is deleted.
_, knowledge = _parse_knowledge_file(file_id, preview_cache_key, callback_url)
except Exception as e:
logger.error("parse_knowledge_file_celery error: {}", str(e))
finally:
db_file = KnowledgeFileDao.get_file_by_ids([file_id])
if not db_file:
logger.debug(f"delete_knowledge_file_celery file_id={file_id}")
# If it does not exist, it may have been deleted during the parsing process,
# and the data of the vector database needs to be deleted.
delete_vector_files([db_file[0].id], knowledge)
def _parse_knowledge_file(file_id: int, preview_cache_key: str = None, callback_url: str = None):
db_file = KnowledgeFileDao.get_file_by_ids([file_id])
if not db_file:
logger.error("file_id={} not found in db", file_id)
return
db_file = db_file[0]
if db_file.status not in [KnowledgeFileStatus.PROCESSING.value, KnowledgeFileStatus.WAITING.value]:
logger.error(
"file_id={} status={} not processing, skip parse",
file_id,
db_file.status,
)
return
db_knowledge = KnowledgeDao.query_by_id(db_file.knowledge_id)
if not db_knowledge:
logger.error("knowledge_id={} not found", db_file.knowledge_id)
return
if db_file.status == KnowledgeFileStatus.WAITING.value:
db_file.status = KnowledgeFileStatus.PROCESSING.value
KnowledgeFileDao.update_file_status([db_file.id], KnowledgeFileStatus.PROCESSING)
# Get Splitting Rules
file_rule = FileProcessBase(**json.loads(db_file.split_rule))
logger.debug("parse_knowledge_file_celery_start", file_id)
process_file_task(db_knowledge,
db_files=[db_file],
separator=file_rule.separator,
separator_rule=file_rule.separator_rule,
chunk_size=file_rule.chunk_size,
chunk_overlap=file_rule.chunk_overlap,
callback_url=callback_url,
extra_metadata=db_file.user_metadata,
preview_cache_keys=[preview_cache_key],
retain_images=file_rule.retain_images,
enable_formula=file_rule.enable_formula,
force_ocr=file_rule.force_ocr,
filter_page_header_footer=file_rule.filter_page_header_footer)
logger.debug("parse_knowledge_file_celery_over", file_id)
return db_file, db_knowledge
@bisheng_celery.task(acks_late=True)
def retry_knowledge_file_celery(file_id: int, preview_cache_key: str = None, callback_url: str = None):
""" Retry parsing a file that failed to enter the repository or has a different name """
trace_id_var.set(f'retry_knowledge_file_{file_id}')
logger.info("retry_knowledge_file_celery start file_id={}", file_id)
try:
delete_knowledge_file_vectors(
file_ids=[file_id], clear_minio=False
)
except Exception as e:
logger.exception("retry_knowledge_file_celery delete vectors error: {}", str(e))
KnowledgeFileDao.update_file_status([file_id], KnowledgeFileStatus.FAILED,
KnowledgeFileFailedError(exception=e).to_json_str())
return
try:
_parse_knowledge_file(file_id, preview_cache_key, callback_url)
except Exception as e:
logger.error("retry_knowledge_file_celery error: {}", str(e))
finally:
db_file = KnowledgeFileDao.get_file_by_ids([file_id])
if not db_file:
logger.debug(f"delete_knowledge_file_celery file_id={file_id}")
# If it does not exist, it may have been deleted during the parsing process, and the data of the vector database needs to be deleted.
delete_vector_files([db_file[0].id], knowledge)
@bisheng_celery.task()
def delete_knowledge_file_celery(file_ids: List[int], knowledge_id: int, clear_minio: bool = True):
""" Asynchronous deletion of knowledge files and their vectors """
trace_id_var.set(f'delete_knowledge_file_{file_ids}')
logger.info("delete_knowledge_file_celery start file_ids={}", file_ids)
try:
knowledge = KnowledgeDao.query_by_id(knowledge_id)
if not knowledge:
logger.warning(f"knowledge_id={knowledge_id} is deleted, skip delete file")
return
delete_vector_files(file_ids, knowledge)
except Exception as e:
logger.error("delete_knowledge_file_celery error: {}", str(e))
================================================
FILE: src/backend/bisheng/worker/knowledge/qa.py
================================================
from typing import List
from loguru import logger
from pymilvus import Collection
from bisheng.api.services.knowledge import KnowledgeService
from bisheng.api.services.knowledge_imp import QA_save_knowledge, decide_vectorstores
from bisheng.common.errcode.knowledge import KnowledgeFileFailedError
from bisheng.core.logger import trace_id_var
from bisheng.interface.embeddings.custom import FakeEmbedding
from bisheng.knowledge.domain.models.knowledge import KnowledgeDao, KnowledgeState
from bisheng.knowledge.domain.models.knowledge_file import (
QAKnoweldgeDao, QAKnowledge, QAKnowledgeUpsert, QAStatus,
)
from bisheng.llm.domain import LLMService
from bisheng.worker.main import bisheng_celery
from bisheng_langchain.vectorstores import Milvus, ElasticKeywordsSearch
@bisheng_celery.task
def insert_qa_celery(qa_id: int):
"""
Insert a QA pair into the milvus and es.
"""
trace_id_var.set(f'insert_qa_{qa_id}')
qa_info = QAKnoweldgeDao.get_qa_knowledge_by_primary_id(qa_id)
if not qa_info:
logger.error(f"QA with id {qa_id} not found.")
return
knowledge_info = KnowledgeDao.query_by_id(qa_info.knowledge_id)
if not knowledge_info:
logger.error(f"Knowledge with id {qa_info.knowledge_id} not found.")
return
QA_save_knowledge(knowledge_info, qa_info)
@bisheng_celery.task
def copy_qa_knowledge_celery(source_knowledge_id: int, target_knowledge_id: int, login_user_id: int):
"""
SalinQAkey learning points
:param login_user_id: Login userID
:param source_knowledge_id: Source Knowledge PointsID
:param target_knowledge_id: Target Knowledge PointsID
:return:
"""
trace_id_var.set(f'copy_qa_knowledge_{source_knowledge_id}_{target_knowledge_id}')
try:
source_knowledge = KnowledgeDao.query_by_id(source_knowledge_id)
target_knowledge = KnowledgeDao.query_by_id(target_knowledge_id)
qa_count = QAKnoweldgeDao.count_by_id(source_knowledge_id)
if qa_count == 0:
logger.info(f"No QA knowledge to copy from knowledge id {source_knowledge_id}.")
return
source_milvus: Milvus = decide_vectorstores(source_knowledge.collection_name, "Milvus", FakeEmbedding())
# create new collection name for target knowledge
new_col = Collection(name=target_knowledge.collection_name, schema=source_milvus.col.schema,
using=source_milvus.alias,
consistency_level=source_milvus.consistency_level)
target_milvus: Milvus = decide_vectorstores(target_knowledge.collection_name, "Milvus", FakeEmbedding())
# Batched SalinQAkey learning points Start from the first page
batch_size = 100
for page in range((qa_count + batch_size - 1) // batch_size):
page += 1
qa_list: List[QAKnowledge] = QAKnoweldgeDao.get_qa_knowledge_by_knowledge_id(
knowledge_id=source_knowledge_id,
page=page,
page_size=batch_size
)
try:
# SalinQAkey learning points Batch Insert
new_qa_list = []
for qa in qa_list:
qa_dict = qa.model_dump()
qa_dict.pop("id")
qa_dict.pop("create_time")
qa_dict.pop("update_time")
qa_dict["user_id"] = login_user_id
qa_dict["knowledge_id"] = target_knowledge_id
new_qa = QAKnowledgeUpsert(**qa_dict)
new_qa_list.append(new_qa)
result = QAKnoweldgeDao.batch_insert_qa(new_qa_list)
id_mapping = {qa_list[i].id: result[i].id for i in range(len(qa_list))}
# Copy Vector
source_ids = [int(qa.id) for qa in qa_list if qa.status == QAStatus.ENABLED.value]
fields = [s.name for s in source_milvus.col.schema.fields if s.name != "pk"]
vectors = source_milvus.col.query(
expr=f"file_id in {source_ids} && knowledge_id == '{source_knowledge_id}'",
output_fields=fields)
for vector in vectors:
vector["file_id"] = id_mapping[vector["file_id"]]
vector["knowledge_id"] = str(target_knowledge_id)
vector.pop("pk")
if vectors.__len__() != 0:
target_milvus.col.insert(vectors)
logger.info(f"Copied {len(qa_list)} QA knowledge from knowledge id {source_knowledge_id} "
f"to knowledge id {target_knowledge_id}.")
# es Salin
es_db = decide_vectorstores(
target_knowledge.index_name, "ElasticKeywordsSearch", FakeEmbedding()
)
es_texts = []
es_metadatas = []
for vector in vectors:
text = vector.pop("text")
vector.pop("vector")
es_texts.append(text)
es_metadatas.append(vector)
if es_texts.__len__() != 0:
es_db.add_texts(es_texts, es_metadatas)
logger.info(
f"Updated status to SUCCESS for copied QA knowledge in knowledge id {target_knowledge_id}.")
logger.info(f"Finished copying batch {page + 1} of QA knowledge.")
except Exception as e:
logger.error(f"Error copying batch {page + 1} of QA knowledge: {e}")
QAKnoweldgeDao.batch_update_status_by_ids(
qa_ids=[new_qa.id for new_qa in result],
status=QAStatus.FAILED,
remark=KnowledgeFileFailedError(exception=e).to_json_str()
)
# All copied Update statuses
target_knowledge.state = KnowledgeState.PUBLISHED.value
KnowledgeDao.update_state(knowledge_id=source_knowledge.id, state=KnowledgeState.PUBLISHED,
update_time=source_knowledge.update_time)
KnowledgeDao.update_one(target_knowledge)
logger.info(f"Finished copying all QA knowledge from knowledge id {source_knowledge_id} "
f"to knowledge id {target_knowledge_id}.")
except Exception as e:
logger.error(f"Error copying QA knowledge from knowledge id {source_knowledge_id} "
f"to knowledge id {target_knowledge_id}: {e}")
KnowledgeDao.update_state(knowledge_id=target_knowledge_id, state=KnowledgeState.FAILED)
KnowledgeDao.update_state(knowledge_id=source_knowledge.id, state=KnowledgeState.PUBLISHED)
@bisheng_celery.task
def rebuild_qa_knowledge_celery(knowledge_id: int, embedding_model_id: int, invoke_user_id: int):
"""
RebuildQAThe knowledge base upon,Vector Storage
:param knowledge_id:
:param embedding_model_id:
:param invoke_user_id:
:return:
"""
trace_id_var.set(f'rebuild_qa_knowledge_{knowledge_id}')
knowledge_info = KnowledgeDao.query_by_id(knowledge_id)
try:
if not knowledge_info:
logger.error(f"Knowledge with id {knowledge_id} not found.")
return
# DeletemilvusCorresponding data in
KnowledgeService.delete_knowledge_file_in_vector(knowledge=knowledge_info, del_es=False)
es_db: ElasticKeywordsSearch = decide_vectorstores(
knowledge_info.index_name, "ElasticKeywordsSearch", FakeEmbedding()
)
# InquiryesAll data in Delete
es_result = es_db.client.search(body={
"query": {
"term": {
"metadata.knowledge_id": str(knowledge_id)
}
}
}, filter_path=["hits.total.value"])
total = es_result.get("hits", {}).get("total", {}).get("value", 0)
logger.info(f"Found {total} documents in Elasticsearch for knowledge id {knowledge_id}.")
if total <= 0:
logger.info(f"No documents to delete in Elasticsearch for knowledge id {knowledge_id}.")
knowledge_info.state = KnowledgeState.PUBLISHED.value
return
embeddings = LLMService.get_bisheng_knowledge_embedding_sync(model_id=embedding_model_id,
invoke_user_id=invoke_user_id)
milvus_db: Milvus = decide_vectorstores(
knowledge_info.collection_name, "Milvus", embeddings
)
knowledge_info.state = KnowledgeState.PUBLISHED.value
# Batched RebuildQAThe knowledge base upon Start from the first page
batch_size = 100
for page in range((total + batch_size - 1) // batch_size):
page += 1
texts = []
metadatas = []
es_result = es_db.client.search(body={
"query": {
"term": {
"metadata.knowledge_id": str(knowledge_id)
}
},
"from": (page - 1) * batch_size,
"size": batch_size
}, filter_path=["hits.hits._source"])
hits = es_result.get("hits", {}).get("hits", [])
file_ids = [hit.get("_source", {}).get("metadata", {}).get("file_id") for hit in hits]
try:
QAKnoweldgeDao.batch_update_status_by_ids(
qa_ids=file_ids,
status=QAStatus.PROCESSING
)
for hit in hits:
source = hit.get("_source", {})
text = source.get("text", "")
metadata = source.get("metadata", {})
texts.append(text)
metadata.pop("vector", None)
metadatas.append(metadata)
# Insertmilvus
milvus_db.add_texts(texts, metadatas)
QAKnoweldgeDao.batch_update_status_by_ids(
qa_ids=file_ids,
status=QAStatus.ENABLED
)
logger.info(f"Rebuilt batch {page} of QA knowledge into Milvus for knowledge id {knowledge_id}.")
except Exception as e:
logger.error(f"Error rebuilding batch {page} of QA knowledge: {e}")
QAKnoweldgeDao.batch_update_status_by_ids(
qa_ids=file_ids,
status=QAStatus.FAILED,
remark=KnowledgeFileFailedError(exception=e).to_json_str()
)
knowledge_info.state = KnowledgeState.FAILED.value
logger.info(f"Finished rebuilding QA knowledge for knowledge id {knowledge_id}.")
except Exception as e:
logger.error(f"Error rebuilding QA knowledge for knowledge id {knowledge_id}: {e}")
# DeletemilvusCorresponding data in
KnowledgeService.delete_knowledge_file_in_vector(knowledge=knowledge_info, del_es=False)
knowledge_info.state = KnowledgeState.FAILED.value
QAKnoweldgeDao.update_status_by_knowledge_id(knowledge_id=knowledge_id, status=QAStatus.FAILED,
remark=KnowledgeFileFailedError(exception=e).to_json_str())
finally:
if knowledge_info:
KnowledgeDao.update_one(knowledge_info)
================================================
FILE: src/backend/bisheng/worker/knowledge/rebuild_knowledge_worker.py
================================================
from typing import List
from loguru import logger
from bisheng.api.services.knowledge import KnowledgeService
from bisheng.api.services.knowledge_imp import (
decide_vectorstores
)
from bisheng.common.errcode.knowledge import KnowledgeFileFailedError
from bisheng.core.logger import trace_id_var
from bisheng.interface.embeddings.custom import FakeEmbedding
from bisheng.knowledge.domain.models.knowledge import Knowledge, KnowledgeDao, KnowledgeState
from bisheng.knowledge.domain.models.knowledge_file import (
KnowledgeFile,
KnowledgeFileDao,
KnowledgeFileStatus
)
from bisheng.llm.domain import LLMService
from bisheng.worker.main import bisheng_celery
@bisheng_celery.task(acks_late=True)
def rebuild_knowledge_celery(knowledge_id: int, new_model_id: int, invoke_user_id: int) -> str:
"""
Asynchronous task to rebuild knowledge base
Args:
knowledge_id: The knowledge base uponID
new_model_id: New.. embeddingModelsID
invoke_user_id: Call UserID
Returns:
str: Task Execution Results
"""
trace_id_var.set(f'rebuild_knowledge_{knowledge_id}')
logger.info(f"rebuild_knowledge_celery start knowledge_id={knowledge_id} new_model_id={new_model_id}")
try:
# Get Knowledge Base Information
knowledge = KnowledgeDao.query_by_id(knowledge_id)
if not knowledge:
logger.error(f"knowledge_id={knowledge_id} not found")
return f"knowledge {knowledge_id} not found"
# 1. according knowledge_id Found knowledgefile All in the tablestatus=2Andstatus=4File, put thestatusto4
files = KnowledgeFileDao.get_files_by_multiple_status(
knowledge_id,
[KnowledgeFileStatus.SUCCESS.value, KnowledgeFileStatus.REBUILDING.value]
)
# 2. According to thecollection_namewentmilvusDelete Vector Store in
KnowledgeService.delete_knowledge_file_in_vector(knowledge=knowledge, del_es=False)
if not files:
logger.info(f"knowledge_id={knowledge_id} has no success files")
# Directly update knowledge base status to success
knowledge.state = KnowledgeState.PUBLISHED.value
KnowledgeDao.update_one(knowledge)
return f"knowledge {knowledge_id} rebuild completed (no files)"
# Updating file status to rebuild in progress
file_ids = [f.id for f in files]
KnowledgeFileDao.update_status_bulk(file_ids, KnowledgeFileStatus.REBUILDING)
logger.info(f"Updated {len(files)} files to rebuilding status")
# 3. accordingindex_nameFROMesGot it inchunkinformation, reembeddingInsertmilvus
success_files, failed_files = _rebuild_embeddings(knowledge, files, new_model_id, invoke_user_id)
# 4. Update file status
KnowledgeFileDao.update_status_bulk(success_files, KnowledgeFileStatus.SUCCESS)
for file_id in failed_files:
file = next((f for f in files if f.id == file_id), None)
if file:
file.status = KnowledgeFileStatus.FAILED.value
file.remark = KnowledgeFileFailedError(data={"exception": "rebuild error"}).to_json_str()
KnowledgeFileDao.update(file)
# 5. Update knowledge base status
if failed_files:
# DeleteesIndex andmilvusCollections to avoid data inconsistencies
_delete_es_files(knowledge, failed_files)
knowledge.state = KnowledgeState.FAILED.value
logger.error(f"knowledge_id={knowledge_id} rebuild failed, failed_files={failed_files}")
else:
knowledge.state = KnowledgeState.PUBLISHED.value
logger.info(f"knowledge_id={knowledge_id} rebuild completed successfully")
KnowledgeDao.update_one(knowledge)
return f"knowledge {knowledge_id} rebuild completed"
except Exception as e:
logger.exception(f"rebuild_knowledge_celery error: {str(e)}")
# Unexpected handles during asynchronous tasksknowledgeSet to4
try:
knowledge = KnowledgeDao.query_by_id(knowledge_id)
if knowledge:
knowledge.state = KnowledgeState.FAILED.value
KnowledgeDao.update_one(knowledge)
except Exception as e2:
logger.exception(f"Failed to update knowledge state after error: {str(e2)}")
raise e
def _delete_es_files(knowledge: Knowledge, file_ids: List[int]):
"""DeleteESFile data in"""
try:
index_name = knowledge.index_name or knowledge.collection_name
embeddings = FakeEmbedding()
es_client = decide_vectorstores(index_name, "ElasticKeywordsSearch", embeddings)
if not es_client.client.indices.exists(index=index_name):
logger.warning(f"ES index {index_name} does not exist, skipping deletion")
return
for file_id in file_ids:
delete_query = {
"query": {
"match": {
"metadata.document_id": file_id
}
}
}
response = es_client.client.delete_by_query(index=index_name, body=delete_query)
deleted = response.get("deleted", 0)
logger.info(f"Deleted {deleted} documents from ES for file_id={file_id}")
except Exception as e:
logger.exception(f"Failed to delete ES files for knowledge_id={knowledge.id}: {str(e)}")
def _rebuild_embeddings(knowledge: Knowledge, files: List[KnowledgeFile], new_model_id: int, invoke_user_id: int) -> \
tuple[List[int], List[int]]:
"""
Rebuildembeddings
Returns:
tuple: (Success FilesIDVertical, Failed FilesIDVertical)
"""
success_files = []
failed_files = []
vector_client = None
try:
# DapatkanEShitting the nail on the headchunkMessage
index_name = knowledge.index_name or knowledge.collection_name
embeddings = FakeEmbedding()
es_client = decide_vectorstores(index_name, "ElasticKeywordsSearch", embeddings)
# Get newembeddingModel and createMilvusClient
logger.info(f"[DEBUG] Begin initializing newembeddingModelsmodel_id={new_model_id}")
new_embeddings = LLMService.get_bisheng_knowledge_embedding_sync(model_id=new_model_id,
invoke_user_id=invoke_user_id)
logger.info(
f"[DEBUG] Slider Created Successfully.embeddingModel Instance: {type(new_embeddings).__name__}, model_id={getattr(new_embeddings, 'model_id', 'unknown')}")
# TestembeddingIs the model available
try:
test_result = new_embeddings.embed_query("Test text")
logger.info(
f"[DEBUG] EmbeddingModel tested successfully, dimension returned: {len(test_result) if test_result else 'None'}")
except Exception as e:
logger.error(f"[DEBUG] EmbeddingModel Test Failed: {str(e)}")
# Model test failure should terminate the entire process, not continue
raise Exception(f"EmbeddingModel not available: {str(e)}")
vector_client = decide_vectorstores(knowledge.collection_name, "Milvus", new_embeddings)
logger.info(f"[DEBUG] Slider Created Successfully.MilvusClientcollection_name={knowledge.collection_name}")
# OthersESWhether the index is present (check in advance, avoid double-checking in the loop)
if not es_client.client.indices.exists(index=index_name):
logger.error(f"ES index {index_name} does not exist")
# Index does not exist, all files failed
failed_files = [f.id for f in files]
return success_files, failed_files
# Regenerate for each fileembeddings
for file in files:
try:
success = _process_single_file(file, es_client, index_name, vector_client)
if success:
success_files.append(file.id)
logger.info(f"Successfully rebuilt embeddings for file_id={file.id}")
else:
failed_files.append(file.id)
except Exception as e:
logger.exception(f"Failed to rebuild embeddings for file_id={file.id}: {str(e)}")
failed_files.append(file.id)
except Exception as e:
logger.exception(f"Failed to rebuild embeddings: {str(e)}")
# If the entire process fails, all unsuccessful files are marked as failed
failed_files.extend([f.id for f in files if f.id not in success_files])
return success_files, failed_files
def _process_single_file(file, es_client, index_name, vector_client):
"""Processing of individual filesembeddingRebuild"""
logger.info(f"Rebuilding embeddings for file_id={file.id}")
# FROMESGet all of this file inchunks
search_query = {
"query": {
"match": {
"metadata.document_id": file.id
}
},
"size": 10000
}
logger.debug(f"ES search query: {search_query}")
response = es_client.client.search(index=index_name, body=search_query)
chunks = response.get("hits", {}).get("hits", [])
logger.info(f"Found {len(chunks)} chunks in ES for file_id={file.id}")
if not chunks:
logger.warning(f"No chunks found for file_id={file.id}")
return True # No data to process, considered a success
# Extract text and metadata
texts = []
metadatas = []
for chunk in chunks:
source = chunk["_source"]
texts.append(source["text"])
# Removepkfields, avoid insertingMilvusTime Conflict
if "pk" in source["metadata"]:
del source["metadata"]["pk"]
metadatas.append(source["metadata"])
logger.info(f"Found {len(texts)} chunks for file_id={file.id}")
# Insert data intoMilvus
logger.info(f"[DEBUG] Upcoming Callsvector_client.add_texts,textsQuantity={len(texts)}")
logger.info(f"[DEBUG] First text example: {texts[0][:100] if texts else 'No texts'}...")
try:
vector_client.add_texts(texts=texts, metadatas=metadatas)
logger.info(f"[DEBUG] vector_client.add_textsCall successful")
return True
except Exception as add_error:
logger.error(f"[DEBUG] vector_client.add_textsCall failed: {str(add_error)}")
raise add_error
================================================
FILE: src/backend/bisheng/worker/main.py
================================================
import threading
import time
from typing import List
from celery import Celery
from celery.signals import celeryd_after_setup, worker_shutting_down
from loguru import logger
from bisheng.common.services.config_service import settings
from bisheng.core.cache.redis_manager import get_redis_client_sync
from bisheng.core.logger import set_logger_config
def create_celery_app():
"""
Celery Asynchronous Tasks
:return:
"""
set_logger_config(settings.logger_conf)
# loop = app_ctx.get_event_loop()
bisheng_celery = Celery('bisheng', include=['bisheng.worker'])
bisheng_celery.config_from_object('bisheng.worker.config')
return bisheng_celery
_WORKER_START = False
_WORKER_BEAT_SLEEP = 5 # seconds
WORKER_ALIVE_KEY = "celery_worker_alive_queues"
bisheng_celery = create_celery_app()
def worker_alive_beat(all_queues: List[str]):
"""Worker heartbeat function."""
logger.debug(f"Worker heartbeat function: {all_queues}")
while _WORKER_START:
try:
# upload worker alive timestamp to redis
current_timestamp = str(int(time.time()))
redis_client = get_redis_client_sync()
redis_client.hset(WORKER_ALIVE_KEY, mapping={one: current_timestamp for one in all_queues})
time.sleep(_WORKER_BEAT_SLEEP)
except Exception as e:
logger.error(f"Error in worker alive beat: {e}")
time.sleep(_WORKER_BEAT_SLEEP * 2)
continue
logger.debug('Worker alive beat stopped.')
@celeryd_after_setup.connect
def on_worker_init(*args, **kwargs):
global _WORKER_START
"""Worker initialization signal handler."""
queues = bisheng_celery.amqp.queues
all_queues = []
for queue_name, _ in queues.items():
all_queues.append(queue_name)
_WORKER_START = True
t = threading.Thread(target=worker_alive_beat, args=(all_queues,), daemon=True)
t.start()
logger.debug("Celery worker alive beat started.")
@worker_shutting_down.connect
def on_worker_shutdown(*args, **kwargs):
logger.debug("Celery worker shutting down.")
global _WORKER_START
_WORKER_START = False
================================================
FILE: src/backend/bisheng/worker/telemetry/__init__.py
================================================
================================================
FILE: src/backend/bisheng/worker/telemetry/mid_table.py
================================================
from datetime import datetime, timedelta
from typing import List
from loguru import logger
from bisheng.api.services.workflow import WorkFlowService
from bisheng.common.constants.enums.telemetry import ApplicationTypeEnum
from bisheng.common.schemas.telemetry.base_telemetry_schema import UserGroupInfo, UserRoleInfo
from bisheng.core.logger import trace_id_var
from bisheng.database.models.flow import FlowType
from bisheng.knowledge.domain.services.knowledge_service import KnowledgeService
from bisheng.telemetry.domain.mid_table.app_increment import AppIncrement, AppIncrementRecord
from bisheng.telemetry.domain.mid_table.base import BaseMidTable
from bisheng.telemetry.domain.mid_table.knowledge_increment import KnowledgeIncrement, KnowledgeIncrementRecord
from bisheng.telemetry.domain.mid_table.user_increment import UserIncrement, UserIncrementRecord
from bisheng.telemetry.domain.mid_table.user_interact import UserInteract, UserInteractRecord
from bisheng.user.domain.services.user import UserService
from bisheng.utils import generate_uuid
from bisheng.worker.main import bisheng_celery
def get_yesterday_date_range(mid_table: BaseMidTable, start_date: str = None, end_date: str = None) -> (datetime,
datetime):
if start_date is None or end_date is None:
# default to yesterday's date
now = datetime.now()
yesterday = now - timedelta(days=1)
start_date = datetime(year=yesterday.year, month=yesterday.month, day=yesterday.day, hour=0, minute=0, second=0)
end_date = datetime(year=now.year, month=now.month, day=now.day, hour=0, minute=0, second=0)
else:
start_date = datetime.fromisoformat(start_date)
end_date = datetime.fromisoformat(end_date)
lastest_time = mid_table.get_latest_record_time_sync()
if lastest_time:
start_date = datetime.fromtimestamp(lastest_time) + timedelta(seconds=1)
if end_date < start_date:
logger.error(f"end_date {end_date} is before start_date {start_date}")
return None, None
return start_date, end_date
def convert_flow_type(flow_type: int) -> ApplicationTypeEnum:
flow_type_mapping = {
FlowType.FLOW.value: ApplicationTypeEnum.SKILL,
FlowType.ASSISTANT.value: ApplicationTypeEnum.ASSISTANT,
FlowType.WORKFLOW.value: ApplicationTypeEnum.WORKFLOW,
}
return flow_type_mapping.get(flow_type, ApplicationTypeEnum.UNKNOWN)
@bisheng_celery.task()
def sync_mid_user_increment(start_date: str = None, end_date: str = None):
trace_id_var.set(f"sync_mid_user_increment_task_{generate_uuid()}")
mid_table = UserIncrement()
start_date, end_date = get_yesterday_date_range(mid_table, start_date, end_date)
if start_date is None or end_date is None:
return
logger.info(f"Syncing mid_user_increment from {start_date} to {end_date}")
# Here would be the logic to fetch data from the source and insert into mid_user_increment
page, page_size = 1, 1000
while True:
user_list = UserService.get_user_all_info(start_time=start_date, end_time=end_date,
page=page, page_size=page_size)
page += 1
if not user_list:
break
records = []
for user in user_list:
records.append(UserIncrementRecord(
es_id=f"user_{user.user_id}",
user_id=user.user_id,
user_name=user.user_name,
user_group_infos=[UserGroupInfo(user_group_id=group.id, user_group_name=group.group_name)
for group in user.groups],
user_role_infos=[UserRoleInfo(role_id=role.id, role_name=role.role_name, group_id=role.group_id)
for role in user.roles],
timestamp=int(user.create_time.timestamp())
))
mid_table.insert_records_sync(records)
# This is a placeholder for the actual data synchronization logic
logger.info(f"Successfully synced mid_user_increment from {start_date} to {end_date}")
def get_user_from_ids_with_cache(user_ids: List[int], user_map: dict):
if user_ids:
user_list = UserService.get_user_all_info(user_ids=user_ids, page=0, page_size=0)
user_map.update({user.user_id: user for user in user_list})
return user_map
@bisheng_celery.task()
def sync_mid_app_increment(start_date: str = None, end_date: str = None):
# Placeholder for syncing mid_app_increment table
trace_id_var.set(f"sync_mid_app_increment_task_{generate_uuid()}")
logger.info("Syncing mid_app_increment table...")
mid_table = AppIncrement()
start_date, end_date = get_yesterday_date_range(mid_table, start_date, end_date)
if start_date is None or end_date is None:
return
logger.info(f"Syncing mid_app_increment from {start_date} to {end_date}")
page, page_size = 1, 1000
user_map = {}
while True:
app_list = WorkFlowService.get_all_apps_by_time_range_sync(start_time=start_date, end_time=end_date, page=page,
page_size=page_size)
page += 1
if not app_list:
break
records = []
user_ids = set()
for app in app_list:
if app['user_id'] not in user_map:
user_ids.add(app['user_id'])
user_map = get_user_from_ids_with_cache(list(user_ids), user_map)
for app in app_list:
user = user_map.get(app['user_id'], None)
records.append(AppIncrementRecord(
es_id=f"app_{app['id']}",
user_id=app['user_id'],
user_name=user.user_name if user else "",
user_group_infos=[UserGroupInfo(user_group_id=group.id, user_group_name=group.group_name)
for group in user.groups] if user else [],
user_role_infos=[UserRoleInfo(role_id=role.id, role_name=role.role_name, group_id=role.group_id)
for role in user.roles] if user else [],
app_id=app['id'],
app_name=app['name'],
app_type=convert_flow_type(app['flow_type']),
timestamp=int(app['create_time'].timestamp())
))
mid_table.insert_records_sync(records)
# Implement the actual logic here
logger.info("Successfully synced mid_app_increment table.")
@bisheng_celery.task()
def sync_mid_knowledge_increment(start_date: str = None, end_date: str = None):
# Placeholder for syncing mid_knowledge_increment table
trace_id_var.set(f"sync_mid_knowledge_increment_task_{generate_uuid()}")
logger.info("Syncing mid_knowledge_increment table...")
mid_table = KnowledgeIncrement()
start_date, end_date = get_yesterday_date_range(mid_table, start_date, end_date)
if start_date is None or end_date is None:
return
logger.info(f"Syncing mid_knowledge_increment from {start_date} to {end_date}")
page, page_size = 1, 1000
user_map = {}
while True:
knowledge_list = KnowledgeService.get_all_knowledge_by_time_range(start_date, end_date, page=page,
page_size=page_size)
page += 1
if not knowledge_list:
break
user_ids = set()
for knowledge in knowledge_list:
if knowledge.user_id not in user_map:
user_ids.add(knowledge.user_id)
user_map = get_user_from_ids_with_cache(list(user_ids), user_map)
records = []
for knowledge in knowledge_list:
user = user_map.get(knowledge.user_id, None)
records.append(KnowledgeIncrementRecord(
es_id=f"knowledge_{knowledge.id}",
user_id=knowledge.user_id,
user_name=user.user_name if user else "",
user_group_infos=[UserGroupInfo(user_group_id=group.id, user_group_name=group.group_name)
for group in user.groups] if user else [],
user_role_infos=[UserRoleInfo(role_id=role.id, role_name=role.role_name, group_id=role.group_id)
for role in user.roles] if user else [],
knowledge_id=knowledge.id,
knowledge_name=knowledge.name,
knowledge_type=knowledge.type,
timestamp=int(knowledge.create_time.timestamp())
))
mid_table.insert_records_sync(records)
# Implement the actual logic here
logger.info("Successfully synced mid_knowledge_increment table.")
@bisheng_celery.task()
def sync_mid_user_interact_dtl(start_date: str = None, end_date: str = None):
# Placeholder for syncing mid_user_interact_dtl table
trace_id_var.set(f"sync_mid_user_interact_dtl_task_{generate_uuid()}")
logger.info("Syncing mid_user_interact_dtl table...")
mid_table = UserInteract()
start_date, end_date = get_yesterday_date_range(mid_table, start_date, end_date)
if start_date is None or end_date is None:
return
page, page_size = 1, 1000
while True:
result = mid_table.get_records_by_time_range_sync(start_time=int(start_date.timestamp()),
end_time=int(end_date.timestamp()),
page=page,
page_size=page_size)
page += 1
if not result:
break
records = []
for record in result:
es_id = record['_id']
record = record['_source']
records.append(UserInteractRecord(
es_id=es_id,
user_id=record['user_context']['user_id'],
user_name=record['user_context']['user_name'],
user_group_infos=[UserGroupInfo(user_group_id=group['user_group_id'],
user_group_name=group['user_group_name'])
for group in record['user_context'].get('user_group_infos', [])],
user_role_infos=[UserRoleInfo(role_id=role['role_id'],
role_name=role['role_name'],
group_id=role.get('group_id', 0))
for role in record['user_context'].get('user_role_infos', [])],
event_id=record['event_id'],
timestamp=record['timestamp'],
message_id=record['event_data']['message_feedback_message_id'],
interact_type=record['event_data']['message_feedback_operation_type'],
app_id=record['event_data']['message_feedback_app_id'],
app_name=record['event_data']['message_feedback_app_name'],
))
mid_table.insert_records_sync(records)
# Implement the actual logic here
logger.info("Successfully synced mid_user_interact_dtl table.")
================================================
FILE: src/backend/bisheng/worker/test/__init__.py
================================================
================================================
FILE: src/backend/bisheng/worker/test/test.py
================================================
from loguru import logger
from bisheng.worker.main import bisheng_celery
@bisheng_celery.task
def add(x, y):
logger.info(f"add {x} + {y}")
return x + y
================================================
FILE: src/backend/bisheng/worker/utils/__init__.py
================================================
================================================
FILE: src/backend/bisheng/worker/utils/stateful_worker.py
================================================
import asyncio
import time
from typing import List, Dict
from httpcore._synchronization import ThreadLock
from loguru import logger
from bisheng.core.cache.redis_manager import get_redis_client, get_redis_client_sync
from bisheng.utils.consisten_hash import ConsistentHash
from bisheng.worker.main import WORKER_ALIVE_KEY
class StatefulWorker:
def __init__(self,
queue_prefix: str = "workflow_celery",
bound_nodes_prefix: str = "workflow_bound_nodes:",
**kwargs):
self.queue_prefix = queue_prefix
self.bound_nodes_prefix = bound_nodes_prefix
self.alive_times = kwargs.get("alive_time", 20) # how much seconds to consider a worker alive
self.consistent_hash = ConsistentHash(virtual_replicas=kwargs.get("virtual_replicas", 10))
self.sync_timestamp = 0
self.sync_timestamp_sleep = 5 # seconds
self.thread_lock = ThreadLock()
self.async_lock = asyncio.Lock()
def _base_update_alive_nodes(self, alive_nodes: List[str]):
consistent_nodes = self.consistent_hash.get_all_nodes()
add_nodes = set(alive_nodes) - set(consistent_nodes)
remove_nodes = set(consistent_nodes) - set(alive_nodes)
for node in add_nodes:
self.consistent_hash.add_node(node)
for node in remove_nodes:
self.consistent_hash.remove_node(node)
logger.debug(f'Worker alive nodes updated: {self.consistent_hash.get_all_nodes()}')
async def update_alive_nodes(self):
async with self.async_lock:
current_time = time.time()
if current_time - self.sync_timestamp < self.alive_times:
return
alive_nodes = await self.get_all_alive_queues()
self._base_update_alive_nodes(alive_nodes)
def update_alive_nodes_sync(self):
with self.thread_lock:
current_time = time.time()
if current_time - self.sync_timestamp < self.alive_times:
return
alive_nodes = self.get_all_alive_queues_sync()
self._base_update_alive_nodes(alive_nodes)
def _base_get_all_alive_queues(self, all_queues: Dict[bytes, bytes]) -> (List[str], List[str]):
if not all_queues:
return [], []
current_timestamp = int(time.time())
alive_queues = []
need_remove_queues = []
for queue_name, queue_timestamp in all_queues.items():
queue_name = queue_name.decode() if isinstance(queue_name, bytes) else queue_name
queue_timestamp = queue_timestamp.decode() if isinstance(queue_timestamp, bytes) else queue_timestamp
if not queue_name.startswith(self.queue_prefix):
continue
if current_timestamp - int(queue_timestamp) < self.alive_times:
alive_queues.append(queue_name)
else:
need_remove_queues.append(queue_name)
return alive_queues, need_remove_queues
async def get_all_alive_queues(self) -> List[str]:
redis_client = await get_redis_client()
all_queues = await redis_client.ahgetall(WORKER_ALIVE_KEY)
alive_nodes, remove_nodes = self._base_get_all_alive_queues(all_queues)
if remove_nodes:
await redis_client.ahdel(WORKER_ALIVE_KEY, *remove_nodes)
return alive_nodes
def get_all_alive_queues_sync(self):
redis_client = get_redis_client_sync()
all_queues = redis_client.hgetall(WORKER_ALIVE_KEY)
alive_nodes, remove_nodes = self._base_get_all_alive_queues(all_queues)
if remove_nodes:
redis_client.hdel(WORKER_ALIVE_KEY, *remove_nodes)
return alive_nodes
def is_node_alive(self, node: str) -> bool:
all_nodes = self.consistent_hash.get_all_nodes()
return node in all_nodes
async def _find_bound_node(self, hash_key: str) -> str | None:
redis_client = await get_redis_client()
return await redis_client.aget(f"{self.bound_nodes_prefix}{hash_key}")
async def _save_bound_node(self, hash_key: str, node: str) -> None:
redis_client = await get_redis_client()
return await redis_client.aset(f"{self.bound_nodes_prefix}{hash_key}", node)
def _find_bound_node_sync(self, hash_key: str) -> str | None:
redis_client = get_redis_client_sync()
return redis_client.get(f"{self.bound_nodes_prefix}{hash_key}")
def _save_bound_node_sync(self, hash_key: str, node: str) -> None:
redis_client = get_redis_client_sync()
return redis_client.set(f"{self.bound_nodes_prefix}{hash_key}", node)
async def find_task_node(self, hash_key: str) -> str | None:
await self.update_alive_nodes()
# Get the node bound to the key
bound_node = await self._find_bound_node(hash_key)
if bound_node and self.is_node_alive(bound_node):
# judge if the bound node is alive
logger.debug(f"Assigned node {bound_node} for key {hash_key}")
return bound_node
# reassign the node
assigned_node = self.consistent_hash.find_node(hash_key)
if assigned_node:
await self._save_bound_node(hash_key, assigned_node)
logger.debug(f"Assigned node {assigned_node} for key {hash_key}")
return assigned_node
def find_task_node_sync(self, hash_key: str) -> str | None:
self.update_alive_nodes()
# Get the node bound to the key
bound_node = self._find_bound_node_sync(hash_key)
if bound_node and self.is_node_alive(bound_node):
# judge if the bound node is alive
logger.debug(f"Assigned node {bound_node} for key {hash_key}")
return bound_node
# reassign the node
assigned_node = self.consistent_hash.find_node(hash_key)
if assigned_node:
self._save_bound_node_sync(hash_key, assigned_node)
logger.debug(f"Assigned node {assigned_node} for key {hash_key}")
return assigned_node
================================================
FILE: src/backend/bisheng/worker/workflow/__init__.py
================================================
================================================
FILE: src/backend/bisheng/worker/workflow/redis_callback.py
================================================
import asyncio
import json
import os
import time
import uuid
from typing import AsyncIterator, Iterator, Dict, List
from langchain_core.documents import Document
from loguru import logger
from bisheng.api.v1.schema.workflow import WorkflowEventType
from bisheng.api.v1.schemas import ChatResponse
from bisheng.chat.utils import sync_judge_source, sync_process_source_document
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum, ApplicationTypeEnum
from bisheng.common.errcode.flow import WorkFlowNodeRunMaxTimesError, WorkFlowWaitUserTimeoutError, \
WorkFlowNodeUpdateError, WorkFlowVersionUpdateError, WorkFlowTaskBusyError, WorkFlowTaskOtherError
from bisheng.common.errcode.http_error import ServerError
from bisheng.common.schemas.telemetry.event_data_schema import NewMessageSessionEventData
from bisheng.common.services import telemetry_service
from bisheng.common.services.config_service import settings
from bisheng.core.cache.redis_manager import get_redis_client_sync
from bisheng.core.logger import trace_id_var
from bisheng.database.models.flow import FlowDao, FlowType
from bisheng.database.models.message import ChatMessageDao, ChatMessage
from bisheng.database.models.session import MessageSessionDao, MessageSession
from bisheng.utils.threadpool import thread_pool
from bisheng.workflow.callback.base_callback import BaseCallback
from bisheng.workflow.callback.event import NodeStartData, NodeEndData, UserInputData, GuideWordData, GuideQuestionData, \
OutputMsgData, StreamMsgData, StreamMsgOverData, OutputMsgChooseData, OutputMsgInputData
from bisheng.workflow.common.workflow import WorkflowStatus
class RedisCallback(BaseCallback):
def __init__(self, unique_id: str, workflow_id: str, chat_id: str, user_id: int, **kwargs):
super(RedisCallback, self).__init__()
# Unique for asynchronous tasksID
self.unique_id = unique_id
self.workflow_id = workflow_id
self.chat_id = chat_id
self.user_id = user_id
self.workflow = None
self.create_session = False
self.source = kwargs.get('source', 'platform') # only platform or api
self.redis_client = get_redis_client_sync()
self.workflow_data_key = f'workflow:{unique_id}:data'
self.workflow_status_key = f'workflow:{unique_id}:status'
self.workflow_event_key = f'workflow:{unique_id}:event'
self.workflow_input_key = f'workflow:{unique_id}:input'
self.workflow_stop_key = f'workflow:{unique_id}:stop'
self.workflow_expire_time = settings.get_workflow_conf().timeout * 60 + 60
def set_workflow_data(self, data: Dict, override: Dict = None):
data = self.override_nodes_params(data, override)
self.redis_client.set(self.workflow_data_key, data, expiration=self.workflow_expire_time)
@staticmethod
def override_nodes_params(data: Dict, override: Dict = None) -> Dict:
if not override:
return data
def replace_param(one_params: List[Dict], one_node_id: str):
for param in one_params:
param_key = param.get('key')
if param_key not in override[node_id]:
continue
param['value'] = override[one_node_id][param_key]
nodes = data.get('nodes', [])
for node in nodes:
node_data = node.get('data', {})
node_id = node_data.get('id')
if node_id not in override:
continue
group_params = node_data.get('group_params', [])
for group_param in group_params:
replace_param(group_param.get('params', []), node_id)
return data
async def async_set_workflow_data(self, data: dict):
await self.redis_client.aset(self.workflow_data_key, data, expiration=self.workflow_expire_time)
def get_workflow_data(self) -> dict:
return self.redis_client.get(self.workflow_data_key)
def set_workflow_status(self, status: str, reason: str = None):
self.redis_client.set(self.workflow_status_key,
{'status': status, 'reason': reason, 'time': time.time()},
expiration=3600 * 24 * 7)
if status in [WorkflowStatus.FAILED.value, WorkflowStatus.SUCCESS.value]:
# Message Events and StatuskeyConsumption may also be required
self.redis_client.delete(self.workflow_data_key)
self.redis_client.delete(self.workflow_input_key)
async def async_set_workflow_status(self, status: str, reason: str = None):
await self.redis_client.aset(self.workflow_status_key,
{'status': status, 'reason': reason, 'time': time.time()},
expiration=3600 * 24 * 7)
if status in [WorkflowStatus.FAILED.value, WorkflowStatus.SUCCESS.value]:
# Message Events and StatuskeyConsumption may also be required
await self.redis_client.adelete(self.workflow_data_key)
await self.redis_client.adelete(self.workflow_input_key)
def get_workflow_status(self) -> dict | None:
workflow_status = self.redis_client.get(self.workflow_status_key)
return workflow_status
async def async_get_workflow_status(self) -> dict | None:
workflow_status = await self.redis_client.aget(self.workflow_status_key)
return workflow_status
def clear_workflow_status(self):
self.redis_client.delete(self.workflow_status_key)
self.redis_client.delete(self.workflow_stop_key)
self.redis_client.delete(self.workflow_data_key)
async def async_clear_workflow_status(self):
await self.redis_client.adelete(self.workflow_status_key)
await self.redis_client.adelete(self.workflow_stop_key)
await self.redis_client.adelete(self.workflow_data_key)
def insert_workflow_response(self, event: dict):
self.redis_client.rpush(self.workflow_event_key, json.dumps(event), expiration=self.workflow_expire_time)
def get_workflow_response(self) -> ChatResponse | None:
response = self.redis_client.lpop(self.workflow_event_key)
if self.get_workflow_stop():
self.redis_client.delete(self.workflow_event_key)
return None
if response:
response = ChatResponse(**json.loads(response))
return response
async def async_get_workflow_response(self) -> ChatResponse | None:
response = await self.redis_client.alpop(self.workflow_event_key)
if await self.async_get_workflow_stop():
await self.redis_client.adelete(self.workflow_event_key)
return None
if response:
response = ChatResponse(**json.loads(response))
return response
def build_chat_response(self, category, category_type, message, extra=None, files=None):
return ChatResponse(
user_id=self.user_id,
chat_id=self.chat_id,
flow_id=self.workflow_id,
type=category_type,
message=message,
category=category,
extra=extra,
files=files,
)
def parse_workflow_failed(self, status_info: dict) -> ChatResponse | None:
if status_info['reason'].find('-- has run more than the maximum number of times') != -1:
return self.build_chat_response(WorkflowEventType.Error.value, 'over',
message=WorkFlowNodeRunMaxTimesError(
exception=status_info['reason'].split('--')[0]).to_dict())
elif status_info['reason'].find('workflow wait user input timeout') != -1:
return self.build_chat_response(WorkflowEventType.Error.value, 'over',
message=WorkFlowWaitUserTimeoutError().to_dict())
elif status_info['reason'].find('-- node params is error') != -1:
return self.build_chat_response(WorkflowEventType.Error.value, 'over',
message=WorkFlowNodeUpdateError(
exception=status_info['reason'].split('--')[0]).to_dict())
elif status_info['reason'].find('-- workflow node is update') != -1:
return self.build_chat_response(WorkflowEventType.Error.value, 'over',
message=WorkFlowVersionUpdateError(
exception=status_info['reason'].split('--')[0]).to_dict())
elif status_info['reason'].find('stop by user') != -1:
return None
else:
return self.build_chat_response(WorkflowEventType.Error.value, 'over',
WorkFlowTaskOtherError(exception=status_info['reason']).to_dict())
def sync_get_response_until_break(self) -> Iterator[ChatResponse]:
while True:
# get workflow status
status_info = self.get_workflow_status()
if not status_info:
yield self.build_chat_response(WorkflowEventType.Error.value, 'over',
message=WorkFlowTaskOtherError(
exception=Exception("workflow status not found")).to_dict())
break
elif status_info['status'] in [WorkflowStatus.FAILED.value, WorkflowStatus.SUCCESS.value]:
while True:
chat_response = self.get_workflow_response()
if not chat_response:
break
yield chat_response
if status_info['status'] == WorkflowStatus.FAILED.value:
error_resp = self.parse_workflow_failed(status_info)
if error_resp:
yield error_resp
break
elif status_info['status'] == WorkflowStatus.INPUT.value:
while True:
chat_response = self.get_workflow_response()
if not chat_response:
break
yield chat_response
break
elif status_info['status'] in [WorkflowStatus.WAITING.value,
WorkflowStatus.INPUT_OVER.value] and time.time() - status_info['time'] > 10:
# 10No status update received in seconds, descriptionworkflowNot started, could becelery workerThreads full
self.set_workflow_status(WorkflowStatus.FAILED.value, 'workflow task execute busy')
yield self.build_chat_response(WorkflowEventType.Error.value, 'over',
message=WorkFlowTaskBusyError().to_dict())
break
elif time.time() - status_info['time'] > 86400:
yield self.build_chat_response(WorkflowEventType.Error.value, 'over',
WorkFlowTaskOtherError(
exception=Exception(
"workflow status not update over 1 day")).to_dict())
self.set_workflow_status(WorkflowStatus.FAILED.value, 'workflow status not update over 1 day')
self.set_workflow_stop()
break
else:
chat_response = self.get_workflow_response()
if not chat_response:
time.sleep(1)
continue
yield chat_response
async def get_response_until_break(self) -> AsyncIterator[ChatResponse]:
""" Continuous accessworkflowright of privacyresponseuntil the end of the run is encountered or pending entry """
while True:
# get workflow status
status_info = await self.async_get_workflow_status()
if not status_info:
yield self.build_chat_response(WorkflowEventType.Error.value, 'over',
message=WorkFlowTaskOtherError(
exception=Exception("workflow status not found")).to_dict())
break
elif status_info['status'] in [WorkflowStatus.FAILED.value, WorkflowStatus.SUCCESS.value]:
while True:
chat_response = await self.async_get_workflow_response()
if not chat_response:
break
yield chat_response
if status_info['status'] == WorkflowStatus.FAILED.value:
error_resp = self.parse_workflow_failed(status_info)
if error_resp:
yield error_resp
break
elif status_info['status'] == WorkflowStatus.INPUT.value:
while True:
chat_response = await self.async_get_workflow_response()
if not chat_response:
break
yield chat_response
break
elif status_info['status'] in [WorkflowStatus.WAITING.value,
WorkflowStatus.INPUT_OVER.value] and time.time() - status_info['time'] > 10:
# 10No status update received in seconds, descriptionworkflowNot started, could becelery workerThreads full
await self.async_set_workflow_status(WorkflowStatus.FAILED.value, 'workflow task execute busy')
yield self.build_chat_response(WorkflowEventType.Error.value, 'over',
message=WorkFlowTaskBusyError().to_dict())
break
elif time.time() - status_info['time'] > 86400:
yield self.build_chat_response(WorkflowEventType.Error.value, 'over',
message=WorkFlowTaskOtherError(exception=Exception(
"workflow status not update over 1 day")).to_dict())
await self.async_set_workflow_status(WorkflowStatus.FAILED.value,
'workflow status not update over 1 day')
await self.async_set_workflow_stop()
break
else:
chat_response = await self.async_get_workflow_response()
if not chat_response:
await asyncio.sleep(0.01)
continue
yield chat_response
def set_user_input(self, data: dict, message_id: int = None, message_content: str = None,
verify_input: bool = False):
if self.chat_id and message_id:
message_db = ChatMessageDao.get_message_by_id(message_id)
self.update_old_message(data, message_db, message_content, verify_input)
# Notify Asynchronous Task User Input
self.redis_client.set(self.workflow_input_key, data, expiration=self.workflow_expire_time)
return
async def async_set_user_input(self, data: dict, message_id: int = None, message_content: str = None,
verify_input: bool = False):
if self.chat_id and message_id:
message_db = await ChatMessageDao.aget_message_by_id(message_id)
await self.async_update_old_message(data, message_db, message_content, verify_input)
# Notify Asynchronous Task User Input
await self.redis_client.aset(self.workflow_input_key, data, expiration=self.workflow_expire_time)
return
@staticmethod
def _verify_input_schema(input_schema_message: Dict, user_input: Dict):
""" Verify that the user input matches the input schema """
node_id = input_schema_message['node_id']
if node_id not in user_input:
raise ServerError(msg="node_id not found in user input")
user_input = user_input[node_id]
input_schema = input_schema_message['input_schema']
if input_schema["tab"] == "form_input":
user_input_keys = {one: None for one in user_input.keys()}
for key_info in input_schema['value']:
key = key_info['key']
if key not in user_input:
raise ServerError(msg=f"key {key} not found in user input")
user_input_keys.pop(key)
if user_input_keys:
raise ServerError(msg=f"extra key {list(user_input_keys.keys())} found in user input")
else:
if input_schema["key"] not in user_input:
raise ServerError(msg=f"key {input_schema['key']} not found in user input")
@classmethod
def _update_old_message(cls, user_input: dict, message_db: ChatMessage, message_content: str,
verify_input: bool = False):
"""
if ChatResponse is not None: add new message
if ChatMessage is not None: update old message
return ChatResponse | None, ChatMessage | None
"""
if not message_db:
if verify_input:
raise ServerError(msg="message info not found by message id")
return None
# Update the input and selection of the user in the output to be entered message
old_message = json.loads(message_db.message)
if message_db.category == WorkflowEventType.OutputWithInput.value:
old_message['hisValue'] = user_input[old_message['node_id']][old_message['key']]
elif message_db.category == WorkflowEventType.OutputWithChoose.value:
old_message['hisValue'] = user_input[old_message['node_id']][old_message['key']]
elif message_db.category == WorkflowEventType.UserInput.value:
if verify_input:
cls._verify_input_schema(old_message, user_input)
user_input = user_input[old_message['node_id']]
# If the front-end passes user input, the front-end content is used.
if message_content:
user_input_message = message_content
# Instructions are form inputs
elif old_message['input_schema']['tab'] == 'form_input':
user_input_message = ''
for key_info in old_message['input_schema']['value']:
user_input_message += f"{key_info['value']}:{user_input.get(key_info['key'], '')}\n"
else:
# Description Dialog Input, Uploaded file information needs to be added, It is related to the data structure of the input node.
user_input_message = user_input[old_message['input_schema']['key']]
dialog_files_content = user_input.get('dialog_files_content', [])
for one in dialog_files_content:
user_input_message += f"\n{os.path.basename(one).split('?')[0]}"
return ChatResponse(
message=user_input_message,
category='question',
), None
message_db.message = json.dumps(old_message, ensure_ascii=False)
return None, message_db
def update_old_message(self, user_input: dict, message_db: ChatMessage, message_content: str,
verify_input: bool = False):
chat_response, message = self._update_old_message(user_input, message_db, message_content, verify_input)
if chat_response:
self.save_chat_message(chat_response)
return
if message:
ChatMessageDao.update_message_model(message)
async def async_update_old_message(self, user_input: dict, message_db: ChatMessage, message_content: str,
verify_input: bool = False):
chat_response, message = self._update_old_message(user_input, message_db, message_content, verify_input)
if chat_response:
self.save_chat_message(chat_response)
return
if message:
await ChatMessageDao.aupdate_message_model(message)
def get_user_input(self) -> dict | None:
ret = self.redis_client.get(self.workflow_input_key)
if ret:
self.redis_client.delete(self.workflow_input_key)
return ret
def set_workflow_stop(self):
from bisheng.worker.workflow.tasks import stop_workflow
self.redis_client.set(self.workflow_stop_key, 1, expiration=3600 * 24)
stop_workflow.delay(self.unique_id, self.workflow_id, self.chat_id, self.user_id)
async def async_set_workflow_stop(self):
from bisheng.worker.workflow.tasks import stop_workflow
await self.redis_client.aset(self.workflow_stop_key, 1, expiration=3600 * 24)
stop_workflow.delay(self.unique_id, self.workflow_id, self.chat_id, self.user_id)
def get_workflow_stop(self) -> bool | None:
""" In order to stop in timeworkflow, Do not cache memory """
return self.redis_client.get(self.workflow_stop_key) == 1
async def async_get_workflow_stop(self) -> bool | None:
""" In order to stop in timeworkflow, Do not cache memory """
return await self.redis_client.aget(self.workflow_stop_key) == 1
def send_chat_response(self, chat_response: ChatResponse):
""" Send a chat message """
self.insert_workflow_response(chat_response.dict())
# Determine if it needs to be stoppedworkflow, Don't judge when streaming, queries are too frequent and can't be stoppedworkflow
if chat_response.category == WorkflowEventType.StreamMsg.value:
return
if self.workflow and self.get_workflow_stop():
self.workflow.stop()
def save_chat_message(self, chat_response: ChatResponse, source_documents=None) -> int | str | None:
""" save chat message to database
return message id
"""
if not self.chat_id:
# Generate a fake messageidPrevent duplicate front-end message rendering
return uuid.uuid4().hex
# Judgment traceability
if source_documents:
result = {}
extra = {}
if isinstance(source_documents, Document):
result = source_documents
source, result = sync_judge_source(result, source_documents, self.chat_id, extra)
chat_response.source = source
chat_response.extra = json.dumps(extra, ensure_ascii=False)
message = ChatMessageDao.insert_one(ChatMessage(
user_id=self.user_id,
chat_id=self.chat_id,
flow_id=self.workflow_id,
type=chat_response.type,
is_bot=chat_response.is_bot,
source=chat_response.source,
message=chat_response.message if isinstance(chat_response.message, str) else json.dumps(
chat_response.message, ensure_ascii=False),
extra=chat_response.extra,
category=chat_response.category,
files=json.dumps(chat_response.files, ensure_ascii=False)
))
# If the document is traceable, handle the recallchunk
if chat_response.source not in [0, 4]:
thread_pool.submit(f"workflow_source_document_{self.chat_id}",
sync_process_source_document,
source_documents, self.chat_id, message.id, chat_response.message.get('msg'))
# Determine if a new session is needed
if not self.create_session and chat_response.category != WorkflowEventType.UserInput.value:
# Insert a new session without session data
if not MessageSessionDao.get_one(self.chat_id):
db_workflow = FlowDao.get_flow_by_id(self.workflow_id)
MessageSessionDao.insert_one(MessageSession(
chat_id=self.chat_id,
flow_id=self.workflow_id,
flow_name=db_workflow.name,
flow_type=FlowType.WORKFLOW.value,
user_id=self.user_id,
))
# RecordTelemetryJournal
telemetry_service.log_event_sync(user_id=self.user_id,
event_type=BaseTelemetryTypeEnum.NEW_MESSAGE_SESSION,
trace_id=trace_id_var.get(),
event_data=NewMessageSessionEventData(
session_id=self.chat_id,
app_id=self.workflow_id,
source=self.source,
app_name=db_workflow.name,
app_type=ApplicationTypeEnum.WORKFLOW
)
)
self.create_session = True
return message.id
def on_node_start(self, data: NodeStartData):
""" node start event """
logger.debug(f'node start: {data}')
self.send_chat_response(
ChatResponse(message=data.dict(),
category=WorkflowEventType.NodeRun.value,
type='start',
flow_id=self.workflow_id,
chat_id=self.chat_id))
def on_node_end(self, data: NodeEndData):
""" node end event """
logger.debug(f'node end: {data}')
self.send_chat_response(
ChatResponse(message=data.dict(),
category=WorkflowEventType.NodeRun.value,
type='end',
flow_id=self.workflow_id,
chat_id=self.chat_id))
def on_user_input(self, data: UserInputData):
""" user input event """
logger.debug(f'user input: {data}')
chat_response = ChatResponse(message=data.dict(),
category=WorkflowEventType.UserInput.value,
type='over',
flow_id=self.workflow_id,
chat_id=self.chat_id)
msg_id = self.save_chat_message(chat_response)
if msg_id:
chat_response.message_id = msg_id
self.send_chat_response(chat_response)
def on_guide_word(self, data: GuideWordData):
""" guide word event """
logger.debug(f'guide word: {data}')
self.send_chat_response(
ChatResponse(message=data.dict(),
category=WorkflowEventType.GuideWord.value,
type='over',
flow_id=self.workflow_id,
chat_id=self.chat_id))
def on_guide_question(self, data: GuideQuestionData):
""" guide question event """
logger.debug(f'guide question: {data}')
self.send_chat_response(
ChatResponse(message=data.dict(),
category=WorkflowEventType.GuideQuestion.value,
type='over',
flow_id=self.workflow_id,
chat_id=self.chat_id))
def on_output_msg(self, data: OutputMsgData):
logger.debug(f'output msg: {data}')
chat_response = ChatResponse(message=data.dict(exclude={'source_documents'}),
category=WorkflowEventType.OutputMsg.value,
extra='',
type='over',
flow_id=self.workflow_id,
chat_id=self.chat_id,
files=data.files)
msg_id = self.save_chat_message(chat_response, source_documents=data.source_documents)
if msg_id:
chat_response.message_id = msg_id
self.send_chat_response(chat_response)
def on_stream_msg(self, data: StreamMsgData):
logger.debug(f'stream msg: {data}')
self.send_chat_response(
ChatResponse(message=data.dict(),
category=WorkflowEventType.StreamMsg.value,
extra='',
type='stream',
flow_id=self.workflow_id,
chat_id=self.chat_id))
def on_stream_over(self, data: StreamMsgOverData):
logger.debug(f'stream over: {data}')
# Replaceminioright of privacysharePrefix bynginxShare ugly solve
minio_share = settings.get_minio_conf().sharepoint
data.msg = data.msg.replace(f"http://{minio_share}", "")
chat_response = ChatResponse(message=data.dict(exclude={'source_documents'}),
category=WorkflowEventType.StreamMsg.value,
extra='',
type='end',
flow_id=self.workflow_id,
chat_id=self.chat_id)
msg_id = self.save_chat_message(chat_response, source_documents=data.source_documents)
if msg_id:
chat_response.message_id = msg_id
self.send_chat_response(chat_response)
def on_output_choose(self, data: OutputMsgChooseData):
logger.debug(f'output choose: {data}')
chat_response = ChatResponse(message=data.dict(exclude={'source_documents'}),
category=WorkflowEventType.OutputWithChoose.value,
extra='',
type='over',
flow_id=self.workflow_id,
chat_id=self.chat_id,
files=data.files)
msg_id = self.save_chat_message(chat_response, source_documents=data.source_documents)
if msg_id:
chat_response.message_id = msg_id
self.send_chat_response(chat_response)
def on_output_input(self, data: OutputMsgInputData):
logger.debug(f'output input: {data}')
chat_response = ChatResponse(message=data.dict(exclude={'source_documents'}),
category=WorkflowEventType.OutputWithInput.value,
extra='',
type='over',
flow_id=self.workflow_id,
chat_id=self.chat_id,
files=data.files)
msg_id = self.save_chat_message(chat_response, source_documents=data.source_documents)
if msg_id:
chat_response.message_id = msg_id
self.send_chat_response(chat_response)
================================================
FILE: src/backend/bisheng/worker/workflow/tasks.py
================================================
import time
from loguru import logger
from bisheng.api.services.workflow import WorkFlowService
from bisheng.common.constants.enums.telemetry import BaseTelemetryTypeEnum, ApplicationTypeEnum
from bisheng.common.schemas.telemetry.event_data_schema import ApplicationProcessEventData
from bisheng.common.services import telemetry_service
from bisheng.common.services.config_service import settings
from bisheng.core.logger import trace_id_var
from bisheng.database.models.flow import FlowDao
from bisheng.utils.exceptions import IgnoreException
from bisheng.worker.main import bisheng_celery
from bisheng.worker.utils.stateful_worker import StatefulWorker
from bisheng.worker.workflow.redis_callback import RedisCallback
from bisheng.workflow.common.workflow import WorkflowStatus
from bisheng.workflow.graph.workflow import Workflow
# workflow execute stateful worker for assigning tasks to bound workers
workflow_stateful_worker = StatefulWorker(queue_prefix="workflow_celery", bound_nodes_prefix="workflow_bound_nodes:")
# Stores global workflow objects
_global_workflow: dict[str, Workflow] = {}
def _clear_workflow_obj(unique_id: str):
""" Clear Global Workflow Objects """
if unique_id in _global_workflow:
del _global_workflow[unique_id]
logger.debug(f'clear workflow object for unique_id: {unique_id}')
else:
logger.warning(f'workflow object not found for unique_id: {unique_id}')
def _judge_workflow_status(redis_callback: RedisCallback, workflow: Workflow):
status = workflow.status()
reason = workflow.reason()
if workflow.status() in [WorkflowStatus.SUCCESS.value, WorkflowStatus.FAILED.value]:
redis_callback.set_workflow_status(status, reason)
_clear_workflow_obj(redis_callback.unique_id)
return
if workflow.status() == WorkflowStatus.INPUT.value:
# If it is an input state, place the object in memory
_global_workflow[redis_callback.unique_id] = workflow
# redis_callback.save_workflow_object(workflow)
redis_callback.set_workflow_status(status, reason)
return
logger.error(f'unexpected workflow status error: {status}')
redis_callback.set_workflow_status(WorkflowStatus.FAILED.value,
f'workflow run failed, unexpected status: {status}')
_clear_workflow_obj(redis_callback.unique_id)
def _execute_workflow(unique_id: str, workflow_id: str, chat_id: str, user_id: int, source: str = "platform"):
redis_callback = RedisCallback(unique_id, workflow_id, chat_id, user_id, source=source)
try:
# update workflow status
redis_callback.set_workflow_status(WorkflowStatus.RUNNING.value)
# get workflow data
workflow_data = redis_callback.get_workflow_data()
if not workflow_data:
raise Exception('workflow data not found maybe data is expired')
# init workflow
workflow_conf = settings.get_workflow_conf()
workflow_info = FlowDao.get_flow_by_id(workflow_id)
workflow_name = workflow_info.name if workflow_info else workflow_id
workflow = Workflow(workflow_id, workflow_name,
user_id, workflow_data, False,
workflow_conf.max_steps,
workflow_conf.timeout,
redis_callback)
redis_callback.workflow = workflow
status, reason = workflow.run()
_judge_workflow_status(redis_callback, workflow)
except IgnoreException as e:
logger.warning(f'execute_workflow ignore error: {e}')
redis_callback.set_workflow_status(WorkflowStatus.FAILED.value, str(e))
_clear_workflow_obj(redis_callback.unique_id)
except Exception as e:
logger.exception('execute_workflow error')
redis_callback.set_workflow_status(WorkflowStatus.FAILED.value, str(e)[:100])
_clear_workflow_obj(redis_callback.unique_id)
@bisheng_celery.task
def execute_workflow(unique_id: str, workflow_id: str, chat_id: str, user_id: int, source: str = "platform"):
""" Implementationworkflow """
trace_id_var.set(unique_id)
start_time = time.time()
try:
_execute_workflow(unique_id, workflow_id, chat_id, user_id, source)
finally:
end_time = time.time()
workflow_info = WorkFlowService.get_one_workflow_simple_info_sync(workflow_id)
telemetry_service.log_event_sync(user_id=user_id,
event_type=BaseTelemetryTypeEnum.APPLICATION_PROCESS,
trace_id=trace_id_var.get(),
event_data=ApplicationProcessEventData(
app_id=workflow_id,
app_name=workflow_info.name if workflow_info else workflow_id,
app_type=ApplicationTypeEnum.WORKFLOW,
chat_id=chat_id,
start_time=int(start_time),
end_time=int(end_time),
process_time=int((end_time - start_time) * 1000)
))
def _continue_workflow(unique_id: str, workflow_id: str, chat_id: str, user_id: int, source: str = "platform"):
""" Resumeworkflow """
redis_callback = RedisCallback(unique_id, workflow_id, chat_id, user_id, source=source)
try:
workflow = _global_workflow.get(redis_callback.unique_id, None)
if not workflow:
raise Exception('workflow object not found maybe data is expired')
if workflow.status() not in [WorkflowStatus.INPUT.value, WorkflowStatus.INPUT_OVER.value]:
raise Exception(f'workflow status is {workflow.status()} not INPUT')
user_input = redis_callback.get_user_input()
if not user_input:
raise IgnoreException('workflow continue not found user input')
redis_callback.set_workflow_status(WorkflowStatus.RUNNING.value)
status, reason = workflow.run(user_input)
_judge_workflow_status(redis_callback, workflow)
except IgnoreException as e:
logger.warning(f'continue_workflow ignore error: {e}')
redis_callback.set_workflow_status(WorkflowStatus.FAILED.value, str(e))
_clear_workflow_obj(redis_callback.unique_id)
except Exception as e:
logger.exception('continue_workflow error')
redis_callback.set_workflow_status(WorkflowStatus.FAILED.value, str(e)[:100])
_clear_workflow_obj(redis_callback.unique_id)
@bisheng_celery.task
def continue_workflow(unique_id: str, workflow_id: str, chat_id: str, user_id: int, source: str = "platform"):
""" Resumeworkflow """
trace_id_var.set(unique_id)
start_time = time.time()
try:
_continue_workflow(unique_id, workflow_id, chat_id, user_id, source)
finally:
end_time = time.time()
workflow_info = WorkFlowService.get_one_workflow_simple_info_sync(workflow_id)
telemetry_service.log_event_sync(user_id=user_id,
event_type=BaseTelemetryTypeEnum.APPLICATION_PROCESS,
trace_id=trace_id_var.get(),
event_data=ApplicationProcessEventData(
app_id=workflow_id,
app_name=workflow_info.name if workflow_info else workflow_id,
app_type=ApplicationTypeEnum.WORKFLOW,
chat_id=chat_id,
start_time=int(start_time),
end_time=int(end_time),
process_time=int((end_time - start_time) * 1000)
))
@bisheng_celery.task
def stop_workflow(unique_id: str, workflow_id: str, chat_id: str, user_id: int):
""" Stopworkflow """
trace_id_var.set(unique_id)
redis_callback = RedisCallback(unique_id, workflow_id, chat_id, user_id)
if unique_id not in _global_workflow:
redis_callback.set_workflow_status(WorkflowStatus.FAILED.value, 'workflow stop by user')
logger.warning("stop_workflow called but workflow not found in global cache")
return
workflow = _global_workflow[unique_id]
workflow.stop()
while workflow.status() == WorkflowStatus.RUNNING.value:
time.sleep(0.3)
status, reason = workflow.status(), workflow.reason()
if status != WorkflowStatus.FAILED.value:
status = WorkflowStatus.FAILED.value
reason = 'workflow stop by user'
redis_callback.set_workflow_status(status, reason)
_clear_workflow_obj(unique_id)
logger.info(f'workflow stop by user {user_id}')
================================================
FILE: src/backend/bisheng/workflow/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/callback/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/callback/base_callback.py
================================================
from abc import ABC
from bisheng.workflow.callback.event import NodeStartData, NodeEndData, OutputMsgChooseData, OutputMsgInputData, \
UserInputData, GuideWordData, GuideQuestionData, \
OutputMsgData, StreamMsgData, StreamMsgOverData
class BaseCallback(ABC):
def __init__(self, *args, **kwargs):
pass
def on_node_start(self, data: NodeStartData):
""" node start event """
pass
def on_node_end(self, data: NodeEndData):
""" node end event """
pass
def on_user_input(self, data: UserInputData):
""" user input event """
pass
def on_guide_word(self, data: GuideWordData):
""" guide word event """
pass
def on_guide_question(self, data: GuideQuestionData):
""" guide question event """
pass
def on_stream_msg(self, data: StreamMsgData):
pass
def on_stream_over(self, data: StreamMsgOverData):
pass
def on_output_msg(self, data: OutputMsgData):
pass
def on_output_choose(self, data: OutputMsgChooseData):
pass
def on_output_input(self, data: OutputMsgInputData):
pass
================================================
FILE: src/backend/bisheng/workflow/callback/event.py
================================================
from typing import Any, List, Optional
from pydantic import BaseModel, Field
# Node start event data
class NodeStartData(BaseModel):
unique_id: str = Field(..., description='Unique execution id')
node_id: str = Field(..., description='Node unique id')
name: str = Field(..., description='Node name')
class NodeEndData(NodeStartData):
reason: Optional[str] = Field(None, description='Reason for node exec error')
log_data: Any = Field(None, description='Log data on node exec success')
input_data: Any = Field(None, description='Input variable data for node exec')
class UserInputData(BaseModel):
node_id: str = Field(..., description='Node unique id')
name: str = Field(..., description='Node name')
input_schema: Any = Field(..., description='Input schema')
class GuideWordData(BaseModel):
unique_id: Optional[str] = Field(..., description='Unique execution id')
node_id: str = Field(..., description='Node unique id')
name: str = Field(..., description='Node name')
guide_word: str = Field(..., description='Guide word')
class GuideQuestionData(BaseModel):
unique_id: Optional[str] = Field(..., description='Unique execution id')
node_id: str = Field(..., description='Node unique id')
name: str = Field(..., description='Node name')
guide_question: List[str] = Field(..., description='Guide question')
class OutputMsgData(BaseModel):
unique_id: str = Field(..., description='Unique execution id')
node_id: str = Field(..., description='Node unique id')
name: str = Field(..., description='Node name')
msg: str = Field(default='', description='Output msg')
files: List[dict] = Field(default_factory=list, description='Output files', exclude=True)
output_key: str = Field(default="", description='Whether the message is stream')
source_documents: Optional[Any] = Field(default=None, description='Source documents')
class OutputMsgInputData(OutputMsgData):
key: str = Field('', description='variable key')
unique_id: Optional[str] = Field('', description='Unique execution id')
input_msg: str = Field('', description='default input msg')
class OutputMsgChooseData(OutputMsgData):
key: str = Field('', description='variable key')
unique_id: Optional[str] = Field('', description='Unique execution id')
options: Any = Field(None, description='default msg')
class StreamMsgData(BaseModel):
unique_id: str = Field(..., description='Unique execution id')
node_id: str = Field(..., description='Node unique id')
name: str = Field(..., description='Node name')
msg: Optional[str] = Field('', description='Stream msg')
reasoning_content: Optional[str] = Field(None, description='Reasoning content')
output_key: str = Field(..., description='Whether the message is stream')
class StreamMsgOverData(StreamMsgData):
source_documents: Optional[List[Any]] = Field(default=[], description='Source documents')
================================================
FILE: src/backend/bisheng/workflow/callback/llm_callback.py
================================================
from typing import Any, Dict, Optional, List, Union
from bisheng.workflow.callback.base_callback import BaseCallback
from bisheng.workflow.callback.event import OutputMsgData, StreamMsgData, StreamMsgOverData
from langchain_core.callbacks.base import BaseCallbackHandler
from langchain_core.outputs import LLMResult
from loguru import logger
class LLMNodeCallbackHandler(BaseCallbackHandler):
"""Callback handler for streaming LLM responses."""
def __init__(
self,
callback: BaseCallback,
unique_id: str,
node_id: str,
node_name: str,
output: bool,
output_key: str,
stream: bool = True,
tool_list: Optional[List[Any]] = None,
cancel_llm_end: bool = False,
):
self.callback_manager = callback
self.unique_id = unique_id
self.node_id = node_id
self.node_name = node_name
self.output = output
self.output_len = 0
self.output_key = output_key
self.stream = stream
self.tool_list = tool_list
self.cancel_llm_end = cancel_llm_end
self.reasoning_content = ''
logger.info('on_llm_new_token {} outkey={}', self.output, self.output_key)
async def on_tool_start(self, serialized: Dict[str, Any], input_str: str,
**kwargs: Any) -> Any:
"""Run when tool starts running."""
logger.debug(
f'on_tool_start serialized={serialized} input_str={input_str} kwargs={kwargs}')
if self.tool_list is not None:
self.tool_list.append({
'type': 'start',
'run_id': kwargs.get('run_id').hex,
'name': serialized['name'],
'input': input_str,
})
if serialized['name'] == 'sql_agent':
self.output = False
async def on_tool_end(self, output: str, **kwargs: Any) -> Any:
"""Run when tool ends running."""
logger.debug(f'on_tool_end output={output} kwargs={kwargs}')
result = output if isinstance(output, str) else getattr(output, 'content', output)
if self.tool_list is not None:
self.tool_list.append({
'type': 'end',
'run_id': kwargs.get('run_id').hex,
'name': kwargs['name'],
'output': result,
})
if kwargs['name'] == 'sql_agent':
self.output = True
async def on_tool_error(self, error: Union[Exception, KeyboardInterrupt],
**kwargs: Any) -> Any:
"""Run when tool errors."""
logger.debug(f'on_tool_error error={error} kwargs={kwargs}')
if self.tool_list is not None:
self.tool_list.append({
'type': 'error',
'run_id': kwargs.get('run_id').hex,
'error': str(error),
})
if kwargs['name'] == 'sql_agent':
self.output = True
def on_llm_new_token(self, token: str, **kwargs: Any) -> None:
chunk = kwargs.get('chunk', None)
# azureOccasionally returns aNone
if token is None and chunk is None:
return
if not self.output or not self.stream:
return
self.output_len += len(token) # Determine if the streaming output has been completed
self.callback_manager.on_stream_msg(
StreamMsgData(node_id=self.node_id,
name=self.node_name,
msg=token,
reasoning_content=getattr(chunk.message, 'additional_kwargs', {}).get('reasoning_content'),
unique_id=self.unique_id,
output_key=self.output_key))
def on_llm_end(self, response: LLMResult, **kwargs: Any) -> None:
self.reasoning_content = getattr(response.generations[0][0].message, 'additional_kwargs', {}).get('reasoning_content')
if self.cancel_llm_end:
return
if not self.output:
return
msg = response.generations[0][0].message
# ChatTongYi vl model special text
if isinstance(msg.content, list):
msg = ''.join([one.get('text', '') for one in msg.content])
else:
msg = msg.content
if not msg:
logger.warning('LLM output is empty')
return
if self.stream and self.output_len > 0:
# Streaming output end needs to return a streaming end event
self.callback_manager.on_stream_over(StreamMsgOverData(node_id=self.node_id,
name=self.node_name,
msg=msg,
reasoning_content=self.reasoning_content,
unique_id=self.unique_id,
output_key=self.output_key))
return
# If the output is required, but the stream output is not performed, a supplement is made. This happens when the cache is hit. This is also the case when output is required
self.callback_manager.on_output_msg(
OutputMsgData(node_id=self.node_id,
name=self.node_name,
msg=msg,
unique_id=self.unique_id,
output_key=self.output_key))
================================================
FILE: src/backend/bisheng/workflow/common/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/common/condition.py
================================================
class ComparisonType:
EQUAL = "equals"
NOT_EQUAL = "not_equals"
GREATER_THAN = "greater_than"
LESS_THAN = "less_than"
GREATER_THAN_OR_EQUAL = "greater_than_or_equal"
LESS_THAN_OR_EQUAL = "less_than_or_equal"
CONTAINS = "contains"
NOT_CONTAINS = "not_contains"
IS_EMPTY = "is_empty"
IS_NOT_EMPTY = "is_not_empty"
STARTS_WITH = "starts_with"
ENDS_WITH = "ends_with"
REGEX = "regex"
class LogicType:
AND = "and"
OR = "or"
================================================
FILE: src/backend/bisheng/workflow/common/const.py
================================================
================================================
FILE: src/backend/bisheng/workflow/common/knowledge.py
================================================
from datetime import datetime
from typing import List, Dict, Any, Literal
from langchain_core.documents import Document
from loguru import logger
from pydantic import BaseModel, Field
from bisheng.common.constants.enums.telemetry import ApplicationTypeEnum
from bisheng.common.constants.vectorstore_metadata import KNOWLEDGE_RAG_METADATA_SCHEMA
from bisheng.core.vectorstore.multi_retriever import MultiRetriever
from bisheng.knowledge.domain.knowledge_rag import KnowledgeRag
from bisheng.knowledge.domain.models.knowledge import Knowledge, MetadataFieldType
from bisheng.knowledge.domain.models.knowledge_file import KnowledgeFileDao
from bisheng.llm.domain import LLMService
from bisheng.tool.domain.langchain.knowledge import KnowledgeRetrieverTool
from bisheng.workflow.common.condition import ComparisonType
from bisheng.workflow.nodes.base import BaseNode
class ConditionOne(BaseModel):
id: str = Field(..., description='Unique id for condition')
knowledge_id: int = Field(..., description='metadata filed belong for knowledge`s id')
metadata_field: str = Field(..., description='knowledge metadata field')
comparison_operation: str = Field(..., description='Compare type')
right_value_type: str = Field(..., description='Right value type')
right_value: str = Field(..., description='Right value')
def convert_right_value(self, field_type: str, right_value: Any, is_preset: bool) -> Any:
# no need to convert right value for is_empty and is_not_empty
if self.comparison_operation in ['is_empty', 'is_not_empty'] or is_preset:
return right_value
# only for user metadata field, need to convert right value type
if field_type in [MetadataFieldType.STRING.value]:
right_value = str(right_value)
if not right_value:
raise ValueError("Right value cannot be empty for the selected comparison operation")
elif field_type in [MetadataFieldType.NUMBER.value]:
right_value = int(right_value)
elif field_type == MetadataFieldType.TIME.value:
if isinstance(right_value, int):
# timestamp
right_value = datetime.fromtimestamp(right_value)
else:
# iso format
right_value = datetime.fromisoformat(right_value)
right_value = int(right_value.timestamp())
else:
raise ValueError(f"Unsupported metadata field type: {field_type}")
return right_value
def convert_preset_filed(self) -> (str, str):
""" convert preset field to mysql field in knowledge file table"""
if self.metadata_field == "document_id":
return "id"
elif self.metadata_field == "document_name":
return "file_name"
elif self.metadata_field == "upload_time":
return "create_time"
elif self.metadata_field == "update_time":
return "update_time"
elif self.metadata_field == "uploader":
return "user_name"
elif self.metadata_field == "updater":
return "updater_name"
else:
raise ValueError(f"Unsupported preset metadata field: {self.metadata_field}")
def get_knowledge_file_filter(self, field_info: Dict, parent_node: BaseNode, is_preset: bool) -> (str, List[Dict]):
""" get knowledge file filter field info for mysql """
right_value = self.right_value
if self.right_value_type == 'ref' and self.right_value:
right_value = parent_node.get_other_node_variable(self.right_value)
field_type = field_info.get('field_type')
right_value = self.convert_right_value(field_type, right_value, is_preset)
if is_preset:
field_key = self.convert_preset_filed()
else:
field_key = f"JSON_UNQUOTE(JSON_EXTRACT(`user_metadata`, '$.{self.metadata_field}.field_value'))"
key_info = {}
if self.comparison_operation == ComparisonType.EQUAL:
key_info['comparison'] = '='
key_info['value'] = right_value
elif self.comparison_operation == ComparisonType.NOT_EQUAL:
key_info['comparison'] = '!='
key_info['value'] = right_value
elif self.comparison_operation == ComparisonType.CONTAINS:
key_info['comparison'] = 'like'
key_info['value'] = f"%{right_value}%"
elif self.comparison_operation == ComparisonType.NOT_CONTAINS:
key_info['comparison'] = 'not like'
key_info['value'] = f"%{right_value}%"
elif self.comparison_operation == ComparisonType.STARTS_WITH:
key_info['comparison'] = 'like'
key_info['value'] = f"{right_value}%"
elif self.comparison_operation == ComparisonType.ENDS_WITH:
key_info['comparison'] = 'like'
key_info['value'] = f"%{right_value}"
elif self.comparison_operation == ComparisonType.IS_EMPTY:
key_info['comparison'] = '='
key_info['value'] = 'null'
elif self.comparison_operation == ComparisonType.IS_NOT_EMPTY:
key_info['comparison'] = '!='
key_info['value'] = 'null'
elif self.comparison_operation == ComparisonType.GREATER_THAN:
key_info['comparison'] = '>'
key_info['value'] = right_value
elif self.comparison_operation == ComparisonType.GREATER_THAN_OR_EQUAL:
key_info['comparison'] = '>='
key_info['value'] = right_value
elif self.comparison_operation == ComparisonType.LESS_THAN:
key_info['comparison'] = '<'
key_info['value'] = right_value
elif self.comparison_operation == ComparisonType.LESS_THAN_OR_EQUAL:
key_info['comparison'] = '<='
key_info['value'] = right_value
else:
raise ValueError(f"Unsupported comparison operation: {self.comparison_operation}")
if not is_preset and self.comparison_operation in [ComparisonType.GREATER_THAN,
ComparisonType.GREATER_THAN_OR_EQUAL,
ComparisonType.LESS_THAN,
ComparisonType.LESS_THAN_OR_EQUAL]:
key_info['extra_filter'] = [{
'comparison': '!=',
'value': 'null'
}]
return {field_key: key_info}
class ConditionCases(BaseModel):
id: str = Field(default=None, description='Unique id for condition case')
conditions: List[ConditionOne] = Field(default_factory=list, description='List of conditions')
operator: Literal['and', 'or'] = Field(default='and', description='Logical operator to combine conditions')
enabled: bool = Field(default=False, description='Whether the condition case is enabled')
def get_knowledge_filter(self, knowledge: Knowledge, parent_node: BaseNode) -> (str, Dict):
""" if return is None, filter file is empty, don't need to retrieve from this knowledge """
if not self.enabled or not self.conditions:
return "", {}
metadata_field_info = {}
if knowledge.metadata_fields:
metadata_field_info = {one["field_name"]: one for one in knowledge.metadata_fields}
# Built-in metadata fields
preset_field_info = {
one.field_name: one.model_dump() for one in KNOWLEDGE_RAG_METADATA_SCHEMA if
one.field_name != "user_metadata"
}
all_filter_field = []
for condition in self.conditions:
if int(condition.knowledge_id) != knowledge.id:
continue
if field_info := preset_field_info.get(condition.metadata_field):
filter_field_info = condition.get_knowledge_file_filter(field_info, parent_node, True)
elif field_info := metadata_field_info.get(condition.metadata_field):
filter_field_info = condition.get_knowledge_file_filter(field_info, parent_node, False)
else:
logger.warning(f"condition field {condition.metadata_field} not in knowledge metadata fields")
raise ValueError(f"field {condition.metadata_field} not in knowledge metadata fields")
all_filter_field.append(filter_field_info)
if not all_filter_field:
return "", {}
file_ids = KnowledgeFileDao.filter_file_by_metadata_fields(knowledge.id, self.operator, all_filter_field)
if not file_ids:
# no file match the filter condition
logger.debug(f'knowledge {knowledge.id} no file match the filter condition')
return None, None
milvus_filter = f"document_id in {file_ids}"
es_filter = {"filter": [{"terms": {"metadata.document_id": file_ids}}]}
return milvus_filter, es_filter
class RagUtils(BaseNode):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._knowledge_type = self.node_params.get('knowledge', {}).get('type', "knowledge")
self._knowledge_value = [
one['key'] for one in self.node_params.get('knowledge', {}).get('value', [])
]
self._advance_kwargs = self.node_params.get('advanced_retrieval_switch', {})
self._metadata_filter = ConditionCases(**self.node_params.get('metadata_filter', {}))
if self._advance_kwargs:
self._advance_kwargs = self.node_params.get('advanced_retrieval_switch', {})
self._knowledge_auth = self._advance_kwargs['user_auth']
self._max_chunk_size = int(self._advance_kwargs['max_chunk_size'])
self._keyword_weight = float(self._advance_kwargs['keyword_weight'])
self._vector_weight = float(self._advance_kwargs['vector_weight'])
self._rerank_flag = self._advance_kwargs['rerank_flag']
self._rerank_model_id = self._advance_kwargs['rerank_model']
else:
self._knowledge_auth = self.node_params.get('user_auth', False)
self._max_chunk_size = int(self.node_params.get('max_chunk_size', 15000))
self._keyword_weight = 0.5
self._vector_weight = 0.5
self._rerank_flag = False
self._rerank_model_id = ''
self._multi_milvus_retriever = None
self._multi_es_retriever = None
self._knowledge_vector_list = []
self._retriever_kwargs = {"k": 100, "param": {"ef": 110}}
self._rerank_model = None
self._knowledge_retriever_tool = None
def _run(self, unique_id: str) -> Dict[str, Any]:
raise NotImplementedError()
@staticmethod
def format_timestamp(timestamp: int) -> str:
try:
return datetime.fromtimestamp(timestamp).strftime('%Y-%m-%dT%H:%M:%S')
except Exception as e:
logger.error(f"Error formatting timestamp {timestamp}: {e}")
return str(timestamp)
def retrieve_question(self, question: str) -> List[Document]:
# 1: retrieve documents from multi retrievers
knowledge_retriever_tool = KnowledgeRetrieverTool(
vector_retriever=self._multi_milvus_retriever,
elastic_retriever=self._multi_es_retriever,
max_content=self._max_chunk_size,
rrf_weights=[self._vector_weight, self._keyword_weight],
rrf_remove_zero_score=True,
rerank=self._rerank_model,
sort_by_source_and_index=True
)
finally_docs = knowledge_retriever_tool.invoke(input={"query": question})
all_file_id = set([one.metadata.get("document_id") for one in finally_docs])
file_map = {}
if finally_docs:
if self._knowledge_type == 'knowledge':
file_info = KnowledgeFileDao.get_file_by_ids(list(all_file_id))
file_map = {one.id: one for one in file_info}
for one in finally_docs:
if "upload_time" in one.metadata:
one.metadata["upload_time"] = self.format_timestamp(one.metadata["upload_time"])
if "update_time" in one.metadata:
one.metadata["update_time"] = self.format_timestamp(one.metadata["update_time"])
file_id = one.metadata.get('document_id') or one.metadata.get('file_id')
if file_id and file_map.get(file_id):
for user_key, user_value in one.metadata.get('user_metadata', {}).items():
field_info = file_map[file_id].user_metadata.get(user_key)
if field_info and field_info.get('field_type') == MetadataFieldType.TIME.value:
one.metadata["user_metadata"][user_key] = self.format_timestamp(user_value)
return finally_docs
def init_user_question(self) -> List[str]:
# Convert all user questions to strings by default
ret = []
for one in self.node_params['user_question']:
ret.append(f"{self.get_other_node_variable(one)}")
return ret
def init_rerank_model(self):
if not self._rerank_flag or not self._rerank_model_id:
return
if self._rerank_model:
return
self._rerank_model = LLMService.get_bisheng_rerank_sync(model_id=self._rerank_model_id,
app_id=self.workflow_id,
app_name=self.workflow_name,
app_type=ApplicationTypeEnum.WORKFLOW,
user_id=self.user_id)
def init_multi_retriever(self):
if self._knowledge_type == "knowledge":
self.init_knowledge_retriever()
else:
self.init_file_retriever()
def init_knowledge_retriever(self):
""" retriever from knowledge base """
if not self._knowledge_vector_list:
self._knowledge_vector_list = KnowledgeRag.get_multi_knowledge_vectorstore_sync(
invoke_user_id=self.user_id,
knowledge_ids=self._knowledge_value,
user_name=self.user_info.user_name,
check_auth=self._knowledge_auth,
include_es=self._keyword_weight > 0,
include_milvus=self._vector_weight > 0,
)
all_milvus = []
all_milvus_filter = []
all_es = []
all_es_filter = []
self._multi_milvus_retriever = None
self._multi_es_retriever = None
for knowledge_id, knowledge_info in self._knowledge_vector_list.items():
knowledge = knowledge_info.get('knowledge')
milvus_vector = knowledge_info.get('milvus')
es_vector = knowledge_info.get('es')
milvus_filter, es_filter = self._metadata_filter.get_knowledge_filter(knowledge=knowledge,
parent_node=self)
if milvus_filter is None and es_filter is None:
continue
if milvus_vector:
all_milvus.append(milvus_vector)
milvus_filter = {"expr": milvus_filter} if milvus_filter else {}
logger.debug(f'retrieve milvus filter: {milvus_filter}')
all_milvus_filter.append(milvus_filter | self._retriever_kwargs)
if es_vector:
all_es.append(es_vector)
logger.debug(f'retrieve es filter: {es_filter}')
all_es_filter.append(es_filter | self._retriever_kwargs)
if all_milvus:
self._multi_milvus_retriever = MultiRetriever(
vectors=all_milvus,
search_kwargs=all_milvus_filter,
finally_k=self._retriever_kwargs["k"]
)
if all_es:
self._multi_es_retriever = MultiRetriever(
vectors=all_es,
search_kwargs=all_es_filter,
finally_k=self._retriever_kwargs["k"]
)
def init_file_retriever(self):
""" retriever from file user upload """
file_ids = []
for one in self._knowledge_value:
file_metadata = self.get_other_node_variable(one)
if not file_metadata:
# No corresponding temporary file data found, User did not upload file
continue
file_ids.append(file_metadata[0]['document_id'])
if not file_ids:
self._multi_es_retriever = None
self._multi_milvus_retriever = None
return
embeddings = LLMService.get_knowledge_default_embedding(self.user_id)
if not embeddings:
raise Exception('No knowledge base defaults configuredembeddingModels')
# vectorstore use different collection_name for different embedding model
tmp_collection_name = self.get_milvus_collection_name(getattr(embeddings, 'model_id'))
milvus_vector = KnowledgeRag.init_milvus_vectorstore(collection_name=tmp_collection_name, embeddings=embeddings)
milvus_extra = {"expr": f"document_id in {file_ids}"}
self._multi_milvus_retriever = milvus_vector.as_retriever(search_kwargs=self._retriever_kwargs | milvus_extra)
es_extra = {"filter": [{"terms": {"metadata.document_id": file_ids}}]}
es_vector = KnowledgeRag.init_es_vectorstore_sync(index_name=self.tmp_collection_name)
self._multi_es_retriever = es_vector.as_retriever(search_kwargs=self._retriever_kwargs | es_extra)
================================================
FILE: src/backend/bisheng/workflow/common/node.py
================================================
import copy
from enum import Enum
from typing import Optional, Any, List
from pydantic import BaseModel, Field, field_validator
class NodeType(Enum):
""" Node type """
START = "start"
END = "end"
INPUT = "input"
AGENT = "agent"
CODE = "code"
CONDITION = "condition"
LLM = "llm"
OUTPUT = "output"
FAKE_OUTPUT = "fake_output"
QA_RETRIEVER = "qa_retriever"
RAG = "rag"
REPORT = "report"
TOOL = "tool"
KNOWLEDGE_RETRIEVER = "knowledge_retriever"
NOTE = 'note' # Notes node Knowledge is used to display annotations, not actual execution nodes
class NodeParams(BaseModel):
key: str = Field(default="", description="Variablekey")
label: Optional[str] = Field("", description="Variable description text")
value: Optional[Any] = Field(None, description="Value of the variable")
# Variable type -> Detailed reference for data format https://dataelem.feishu.cn/wiki/IfBvwwvfFiHjuQkjFJgcxzoGnxb
type: Optional[str] = Field("", description="Variable type")
help: Optional[str] = Field("", description="Variable Help Text")
tab: Optional[str] = Field("", description="Variable belongs totab, empty to show all")
placeholder: Optional[str] = Field("", description="Variable placeholder text")
required: Optional[bool] = Field(False, description="Required?")
options: Optional[Any] = Field(None, description="Variable options")
class NodeGroupParams(BaseModel):
name: Optional[str] = Field(default="", description="Group name")
params: List[NodeParams] = Field(..., description="Group params")
description: Optional[str] = Field(default="", description="Node description")
class BaseNodeData(BaseModel):
id: str = Field(default="", description="Unique id for node")
type: str = Field(..., description="Node type")
name: Optional[str] = Field(default="", description="Node name")
description: Optional[str] = Field(default="", description="Node description")
group_params: Optional[List[NodeGroupParams]] = Field(default=None, description="Node group params")
tab: Optional[dict] = Field({}, description="tab config")
tool_key: Optional[str] = Field("", description="unique tool id, only for tool node")
v: Optional[int] = Field(default=0, description="node version")
@field_validator('v', mode='before')
@classmethod
def convert_v_to_int(cls, v: str | int | None) -> int:
if isinstance(v, str):
return int(v)
elif v is None:
return 0
return v
def get_variable_info(self, variable_key: str) -> NodeParams | None:
for group_info in self.group_params:
for one in group_info.params:
if one.key == variable_key:
return copy.deepcopy(one)
return None
================================================
FILE: src/backend/bisheng/workflow/common/workflow.py
================================================
from enum import Enum
class WorkflowStatus(Enum):
WAITING = 'WAITING' # Waiting for asynchronous task scheduling
RUNNING = 'RUNNING'
SUCCESS = 'SUCCESS'
FAILED = 'FAILED'
INPUT = 'INPUT' # Status to be entered
INPUT_OVER = 'INPUT_OVER' # Entered status
================================================
FILE: src/backend/bisheng/workflow/edges/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/edges/edges.py
================================================
from typing import Optional, List, Any
from pydantic import BaseModel, Field
class EdgeBase(BaseModel):
id: str = Field(..., description="Unique id for edge")
source: str = Field(..., description="source node id")
sourceHandle: str = Field(..., description="source node handle")
sourceType: Optional[str] = Field("", description="source node type")
target: str = Field(..., description="target node id")
targetHandle: str = Field(..., description="target node handle")
targetType: Optional[str] = Field("", description="target node type")
class EdgeManage:
def __init__(self, edges: List[Any]):
self.edges: List[EdgeBase] = [EdgeBase(**one) for one in edges]
# source: [edges]
self.source_map = {}
# target: [edges]
self.target_map = {}
for one in self.edges:
if one.source not in self.source_map:
self.source_map[one.source] = []
self.source_map[one.source].append(one)
if one.target not in self.target_map:
self.target_map[one.target] = []
self.target_map[one.target].append(one)
def get_target_node(self, source: str) -> List[str] | None:
""" get target node id by source node id"""
if source not in self.source_map:
return None
return [one.target for one in self.source_map[source]]
def get_source_node(self, target: str) -> List[str] | None:
""" get source node id by target node id"""
if target not in self.target_map:
return None
return [one.source for one in self.target_map[target]]
def get_source_edges(self, target: str) -> List[EdgeBase] | None:
""" get source edges by target node id"""
if target not in self.target_map:
return None
return self.target_map[target]
def get_target_edges(self, source: str) -> List[EdgeBase] | None:
""" get target edges by source node id"""
if source not in self.source_map:
return None
return self.source_map[source]
def get_all_edges_nodes(self, start_node_id: str, end_node_id: str) -> List[List[str]]:
""" get all branch nodes from start node to end node """
branches = []
def get_node_branch(node_id, branch: List, node_map: dict):
# The nodes that have been traversed are no longer traversed, indicating that they are looped
if node_id in node_map or node_id == end_node_id:
branch.append(node_id)
branches.append(branch)
return branch
branch.append(node_id)
node_map[node_id] = True
next_nodes = self.get_target_node(node_id)
if not next_nodes:
branches.append(branch)
return branch
for one_node in next_nodes:
tmp_node_map = node_map.copy()
tmp_branch = branch.copy()
get_node_branch(one_node, tmp_branch, tmp_node_map)
return branch
get_node_branch(start_node_id, [], {})
return branches
def get_next_nodes(self, node_id: str, exclude: Optional[List[str]] = None) -> List[str] | None:
""" get all next nodes by node id"""
# Get direct downstream nodes
output_nodes = self.get_target_node(node_id)
if not output_nodes:
return []
if not exclude:
exclude = [node_id]
# Exclude specified nodes
for one in exclude:
if one in output_nodes:
output_nodes.remove(one)
exclude.extend(output_nodes)
for one in output_nodes:
next_nodes = self.get_next_nodes(one, exclude=exclude)
if next_nodes:
output_nodes.extend(next_nodes)
return output_nodes
================================================
FILE: src/backend/bisheng/workflow/graph/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/graph/graph_engine.py
================================================
import operator
from typing import Annotated, Any, Dict
from langgraph.checkpoint.memory import MemorySaver
from langgraph.constants import END, START
from langgraph.graph import StateGraph
from loguru import logger
from typing_extensions import TypedDict
from bisheng.utils.exceptions import IgnoreException
from bisheng.workflow.callback.base_callback import BaseCallback
from bisheng.workflow.callback.event import UserInputData
from bisheng.workflow.common.node import BaseNodeData, NodeType
from bisheng.workflow.common.workflow import WorkflowStatus
from bisheng.workflow.edges.edges import EdgeManage
from bisheng.workflow.graph.graph_state import GraphState
from bisheng.workflow.nodes.base import BaseNode
from bisheng.workflow.nodes.node_manage import NodeFactory
from bisheng.workflow.nodes.output.output_fake import OutputFakeNode
class TempState(TypedDict):
# not use, only for langgraph state graph
flag: Annotated[bool, operator.and_]
class GraphEngine:
def __init__(self,
user_id: int = None,
workflow_id: str = None,
workflow_name: str = '',
workflow_data: Dict = None,
async_mode: bool = False,
max_steps: int = 0,
callback: BaseCallback = None):
self.user_id = user_id
self.workflow_id = workflow_id
self.workflow_name = workflow_name
self.workflow_data = workflow_data
self.max_steps = max_steps
self.async_mode = async_mode
# Callbacks
self.callback = callback
# node_id: NodeInstance
self.nodes_map = {}
# record how many nodes fan in this node
self.nodes_fan_in = {} # node_id: [node_ids]
# record how many nodes next to this node
self.nodes_next_nodes = {} # node_id: {node_ids}
# node_id: 1; Represents fromstartThe longest path from a node to this node
self.node_level = {}
# List of mutually exclusive nodes, containingconditionNodes andoutputNode (selective interaction)
self.condition_nodes = []
self.edges = None
self.graph_state = GraphState()
# init langgraph state graph
self.graph_builder = StateGraph(TempState)
self.graph = None
self.graph_config = {'configurable': {'thread_id': '1'}, 'recursion_limit': 50}
self.status = WorkflowStatus.RUNNING.value
self.reason = '' # Failure Reason
self.build_edges()
self.build_nodes()
def build_edges(self):
# init edges
self.edges = EdgeManage(self.workflow_data.get('edges', []))
def add_node_edge(self, node_instance: BaseNode):
""" Link edges of nodes """
if node_instance.type == NodeType.END.value or node_instance.type == NodeType.FAKE_OUTPUT.value:
return
# get target nodes
target_node_ids = self.edges.get_target_node(node_instance.id)
source_node_ids = self.edges.get_source_node(node_instance.id)
# There are no linked nodes reporting errors
if not target_node_ids and not source_node_ids:
raise Exception(
f'node {node_instance.name} {node_instance.id} must have at least one edge')
# output Node followed by afake Nodes are used to handle interrupts
if node_instance.type == NodeType.OUTPUT.value:
fake_node = self.nodes_map[f'{node_instance.id}_fake']
if self.async_mode:
self.graph_builder.add_node(fake_node.id, fake_node.arun)
else:
self.graph_builder.add_node(fake_node.id, fake_node.run)
self.graph_builder.add_edge(node_instance.id, fake_node.id)
self.graph_builder.add_conditional_edges(
fake_node.id, node_instance.route_node,
{node_id: node_id
for node_id in target_node_ids})
return
# condition And output Need to connect behind the node langgraphright of privacy edge_condition
if node_instance.type == NodeType.CONDITION.value:
self.graph_builder.add_conditional_edges(
node_instance.id, node_instance.route_node,
{node_id: node_id
for node_id in target_node_ids})
return
# Links Totargetnode_amb
for node_id in target_node_ids:
if node_id not in self.nodes_map:
raise Exception(f'target node {node_id} not found')
if self.nodes_fan_in.get(node_id) and len(self.nodes_fan_in.get(node_id)) > 1:
# need wait all fan in node exec over
continue
self.graph_builder.add_edge(node_instance.id, node_id)
def build_more_fan_in_node(self):
for node_id, source_ids in self.nodes_fan_in.items():
if not source_ids or len(source_ids) <= 1:
continue
# There are multiple fan-in nodes to determine if this node needs to wait
wait_nodes, no_wait_nodes = self.parse_fan_in_node(node_id)
logger.debug(f'node {node_id} wait nodes {wait_nodes}, no wait nodes {no_wait_nodes}')
if wait_nodes:
self.graph_builder.add_edge(wait_nodes, node_id)
if no_wait_nodes:
for one in no_wait_nodes:
self.graph_builder.add_edge(one, node_id)
def parse_fan_in_node(self, node_id: str):
source_ids = self.nodes_fan_in.get(node_id)
# Whether the hierarchy of all precursor nodes is less than or equal to this node
all_source_node_prev = True
for one in source_ids:
if self.node_level[one] > self.node_level[node_id]:
all_source_node_prev = False
break
# in the precursor node Contains The downstream node of this node does not need to wait, it needs to be excludedoutputAndconditionNode, because the two nodes are connected to this node through the conditional edge
if not all_source_node_prev:
return [], [one for one in source_ids if not one.startswith(('output_', 'condition_'))]
# Determine if there is aconditionNode oroutputNode (selective interaction) to this node Two unique paths
all_branches = []
for one in self.condition_nodes:
if node_id == one:
continue
branches = self.edges.get_all_edges_nodes(one, node_id)
for branch in branches:
if node_id not in branch:
continue
branch.remove(node_id)
branch.remove(one)
all_branches.append(branch)
def judge_not_same_branch():
# Determine if there are two unique paths in all edges
for i in range(len(all_branches)):
for j in range(i + 1, len(all_branches)):
if not (set(all_branches[i]) & set(all_branches[j])):
return True
return False
# Explain that it is a mutually exclusive ending node, there is no need to wait
if judge_not_same_branch():
return [], [one for one in source_ids if not one.startswith(('output_', 'condition_'))]
# Explain that it is not a mutually exclusive closing node, and you need to wait for all the predecessor nodes to finish executing before executing
wait_nodes = []
for one in source_ids:
if one.startswith('output_'):
one = f'{one}_fake'
wait_nodes.append(one)
return wait_nodes, []
def build_node_level(self, start_node: str):
""" Calculate hierarchy for all nodes """
# Hierarchy of marker nodes
def mark_node_level(node_id, node_map: dict, level: int):
# The nodes that have been traversed are no longer traversed, indicating that they are looped
if node_id in node_map:
return
self.node_level[node_id] = max(self.node_level.get(node_id, 0), level)
node_map[node_id] = True
next_nodes = self.edges.get_target_node(node_id)
if not next_nodes:
return
for one_node in next_nodes:
tmp_node_map = node_map.copy()
mark_node_level(one_node, tmp_node_map, level + 1)
return
mark_node_level(start_node, {}, 0)
def init_nodes(self, nodes):
""" return node id """
start_node = None
end_nodes = []
interrupt_nodes = []
for node in nodes:
node_data = BaseNodeData(**node.get('data', {}))
if not node_data.id:
raise Exception('node must have attribute id')
if node_data.type == NodeType.NOTE.value:
continue
node_instance = NodeFactory.instance_node(node_type=node_data.type,
node_data=node_data,
user_id=self.user_id,
workflow_id=self.workflow_id,
graph_state=self.graph_state,
target_edges=self.edges.get_target_edges(
node_data.id),
max_steps=self.max_steps,
callback=self.callback,
workflow_name=self.workflow_name)
if node_instance.is_condition_node():
self.condition_nodes.append(node_instance.id)
self.nodes_map[node_data.id] = node_instance
self.nodes_fan_in[node_instance.id] = self.edges.get_source_node(node_instance.id)
if node_instance.type not in [NodeType.START.value]:
self.nodes_next_nodes[node_instance.id] = self.edges.get_next_nodes(
node_instance.id)
# add node into langgraph
if self.async_mode:
self.graph_builder.add_node(node_instance.id, node_instance.arun)
else:
self.graph_builder.add_node(node_instance.id, node_instance.run)
# find special node
if node_instance.type == NodeType.START.value:
start_node = node_instance.id
elif node_instance.type == NodeType.END.value:
end_nodes.append(node_instance.id)
elif node_instance.type == NodeType.INPUT.value:
# Node that needs to abort receiving user input
interrupt_nodes.append(node_instance.id)
elif node_instance.type == NodeType.OUTPUT.value:
# Node that needs to abort receiving user input
fake_node = OutputFakeNode(id=f'{node_instance.id}_fake',
output_node=node_instance,
type=NodeType.FAKE_OUTPUT.value)
self.nodes_map[fake_node.id] = fake_node
interrupt_nodes.append(fake_node.id)
return start_node, end_nodes, interrupt_nodes
def build_nodes(self):
nodes = self.workflow_data.get('nodes', [])
if not nodes:
raise Exception('workflow must have at least one node')
start_node, end_nodes, interrupt_nodes = self.init_nodes(nodes)
if not start_node:
raise Exception('workflow must have start node')
self.graph_builder.add_edge(START, start_node)
if end_nodes:
for end_node in end_nodes:
self.graph_builder.add_edge(end_node, END)
# Calculate hierarchy of nodes
self.build_node_level(start_node)
# Link other nodes
for node_id, node_instance in self.nodes_map.items():
self.add_node_edge(node_instance)
# Handle nodes with multiple fan-in nodes
self.build_more_fan_in_node()
# compile langgraph
self.graph = self.graph_builder.compile(checkpointer=MemorySaver(),
interrupt_before=interrupt_nodes)
self.graph_config['recursion_limit'] = max(
(len(nodes) - len(end_nodes) - 1) * self.max_steps, 1) + len(end_nodes) + 1
# import datetime
# with open(f"./bisheng/data/graph/graph_{datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.png",
# 'wb') as f:
# f.write(self.graph.get_graph().draw_mermaid_png())
def _run(self, input_data: Any):
try:
self.status = WorkflowStatus.RUNNING.value
for _ in self.graph.stream(input_data, config=self.graph_config):
pass
self.judge_status()
except IgnoreException as e:
logger.warning(f'graph ignore error: {e}')
self.status = WorkflowStatus.FAILED.value
self.reason = str(e)
except Exception as e:
logger.exception('graph run error')
self.status = WorkflowStatus.FAILED.value
self.reason = str(e)
async def _arun(self, input_data: Any):
try:
self.status = WorkflowStatus.RUNNING.value
async for _ in self.graph.astream(input_data, config=self.graph_config):
pass
self.judge_status()
except IgnoreException as e:
logger.warning(f'graph ignore error: {e}')
self.status = WorkflowStatus.FAILED.value
self.reason = str(e)
except Exception as e:
logger.exception('graph arun error')
self.status = WorkflowStatus.FAILED.value
self.reason = str(e)
def run(self):
self._run({'flag': True})
async def arun(self):
await self._arun({'flag': True})
def continue_run(self, data: Any = None):
"""
Receive user input
data:{node_id: {key: value}}
"""
# After receiving user input, proceed
if data is None:
data = {}
# Assign user input to the corresponding node
for node_id, node_params in data.items():
node_instance = self.nodes_map[node_id]
node_instance.handle_input(node_params)
# Resumegraph
self._run(None)
async def acontinue_run(self, data: Any = None):
"""
Receive user input
data:{node_id: {key: value}}
"""
# After receiving user input, proceed
if data is None:
data = {}
# Assign user input to the corresponding node
for node_id, node_params in data.items():
node_instance = self.nodes_map[node_id]
node_instance.handle_input(node_params)
# Resumegraph
await self._arun(None)
def judge_status(self):
# Judgment Status
snapshot = self.graph.get_state(self.graph_config)
next_nodes = snapshot.next
# Explain that the execution has been completed
if len(next_nodes) == 0:
self.status = WorkflowStatus.SUCCESS.value
return
# Determine what needs to be donenodetype, setting the corresponding engine state
for node_id in next_nodes:
node_instance = self.nodes_map[node_id]
if node_instance.type == NodeType.INPUT.value:
input_schema = node_instance.get_input_schema()
if input_schema:
# Callback events requiring user input
self.status = WorkflowStatus.INPUT.value
self.callback.on_user_input(
UserInputData(node_id=node_id, name=node_instance.name, input_schema=input_schema))
return
elif node_instance.type == NodeType.FAKE_OUTPUT.value:
intput_schema = node_instance.get_input_schema()
if intput_schema:
# output Node requires user input
self.status = WorkflowStatus.INPUT.value
return
def stop(self):
for _, node_instance in self.nodes_map.items():
node_instance.stop()
================================================
FILE: src/backend/bisheng/workflow/graph/graph_state.py
================================================
from typing import Any, Dict, Optional, List
from langchain.memory import ConversationBufferWindowMemory
from langchain_core.messages import AIMessage, HumanMessage, get_buffer_string, BaseMessage
from pydantic import BaseModel, Field
class GraphState(BaseModel):
""" All nodes Global State Management """
# Store Chat History
history_memory: Optional[ConversationBufferWindowMemory] = None
# Global Variable Pool
variables_pool: Dict[str, Dict[str, Any]] = Field(default_factory=dict, description='Global Variable Pool: {node_id: {key: value}}')
def get_history_memory(self, count: int) -> str:
""" Get chat history
'Cause it's not.1Right.1, so rewrite buffer_as_str"""
if not count:
count = self.history_memory.k
if count == 0:
return ''
messages = self.history_memory.chat_memory.messages[-count:]
return get_buffer_string(
messages,
human_prefix=self.history_memory.human_prefix,
ai_prefix=self.history_memory.ai_prefix,
)
def get_history_list(self, count: int) -> List[BaseMessage]:
return self.history_memory.buffer_as_messages[-count:]
def save_context(self, content: str, msg_sender: str) -> None:
""" Save chat
workflow In special cases, the process will have multiple rounds of interaction, so it is not one-to-one, reworking the message structure"""
if msg_sender == 'human':
self.history_memory.chat_memory.add_messages([HumanMessage(content=content)])
elif msg_sender == 'AI':
self.history_memory.chat_memory.add_messages([AIMessage(content=content)])
def set_variable(self, node_id: str, key: str, value: Any):
""" Put the data generated by the node into a global variable """
if node_id not in self.variables_pool:
self.variables_pool[node_id] = {}
self.variables_pool[node_id][key] = value
def get_variable(self, node_id: str, key: str, count: Optional[int] = None) -> Any:
""" Get data from global variables """
if node_id not in self.variables_pool:
return None
if key == 'chat_history':
return self.get_history_memory(count=count)
return self.variables_pool[node_id].get(key)
def get_variable_by_str(self, contact_key: str, history_count: Optional[int] = None) -> Any:
"""
Get data from global variables
contact_key: node_id.key#index #indexNot necessarily
"""
tmp_list = contact_key.split('.', 1)
node_id = tmp_list[0]
var_key = tmp_list[1]
variable_val_index = None
if var_key.find('#') != -1:
var_key, variable_val_index = var_key.split('#')
variable_val = self.get_variable(node_id, var_key, history_count)
# Handling of array variables
if variable_val_index:
if isinstance(variable_val, list):
variable_val_index = int(variable_val_index)
if len(variable_val) <= variable_val_index:
raise Exception(f'variable {contact_key} index out of range')
return variable_val[variable_val_index]
elif isinstance(variable_val, dict):
return variable_val.get(variable_val_index)
else:
raise Exception(f'variable {contact_key} is not a list or dict, not support #index')
return variable_val
def set_variable_by_str(self, contact_key: str, value: Any):
tmp_list = contact_key.split('.', 1)
node_id = tmp_list[0]
var_key = tmp_list[1]
if var_key.find('#') != -1:
var_key, variable_val_index = var_key.split('#')
old_value = self.get_variable(node_id, var_key)
if not old_value:
old_value = {}
old_value[variable_val_index] = value
value = old_value
self.set_variable(node_id, var_key, value)
def get_all_variables(self) -> Dict[str, Any]:
""" Get all variables,keyarenode_id.keyformat; """
ret = {}
for node_id, node_variables in self.variables_pool.items():
for key, value in node_variables.items():
ret[f'{node_id}.{key}'] = self.get_variable(node_id, key)
# get preset_question and custom_variables all keys
if key in ['preset_question', 'custom_variables']:
for k, v in value.items():
ret[f'{node_id}.{key}#{k}'] = v
return ret
================================================
FILE: src/backend/bisheng/workflow/graph/workflow.py
================================================
import json
import time
from typing import Dict
from bisheng.workflow.callback.base_callback import BaseCallback
from bisheng.workflow.common.workflow import WorkflowStatus
from bisheng.workflow.graph.graph_engine import GraphEngine
class Workflow:
def __init__(self,
workflow_id: str,
workflow_name: str = '',
user_id: int = None,
workflow_data: Dict = None,
async_mode: bool = False,
max_steps: int = 0,
timeout: int = 0,
callback: BaseCallback = None):
# Unique identifier of the run, unique saved to the databaseID
self.workflow_id = workflow_id
self.user_id = user_id
# Timeout, how long has the user input not been received terminatedworkflowRun (in minutes)
self.timeout = timeout
self.current_time = None
self.graph_engine = GraphEngine(user_id=user_id,
async_mode=async_mode,
workflow_id=workflow_id,
workflow_name=workflow_name or workflow_id,
workflow_data=workflow_data,
max_steps=max_steps,
callback=callback)
def save_user_input_history(self, input_data: dict | None):
if not input_data:
return
user_input_str = ''
for _, msg in input_data.items():
# Under the special handling of session input,keyRemove
if len(msg) == 1 and 'user_input' in msg:
user_input_str += msg['user_input']
continue
user_input_str += '\n' + json.dumps(msg, ensure_ascii=False)
self.graph_engine.graph_state.save_context(content=user_input_str, msg_sender='human')
def run(self, input_data: dict = None) -> (str, str):
"""
params:
input_data: user input data If not empty, executecontinue
return: workflow_status, reason
"""
# Implementationworkflow
if input_data is not None:
self.graph_engine.continue_run(input_data)
else:
# First run time
self.current_time = time.time()
self.graph_engine.run()
while self.graph_engine.status == WorkflowStatus.RUNNING.value:
self.graph_engine.continue_run()
return self.graph_engine.status, self.graph_engine.reason
async def arun(self, input_data: dict = None) -> (str, str):
"""
params:
input_data: user input data If not empty, executecontinue
return: workflow_status, reason
"""
# Implementationworkflow
if input_data is not None:
await self.graph_engine.acontinue_run(input_data)
else:
# First run time
self.current_time = time.time()
await self.graph_engine.arun()
while self.graph_engine.status == WorkflowStatus.RUNNING.value:
await self.graph_engine.acontinue_run()
return self.graph_engine.status, self.graph_engine.reason
def stop(self):
self.graph_engine.stop()
def status(self):
return self.graph_engine.status
def reason(self):
return self.graph_engine.reason
================================================
FILE: src/backend/bisheng/workflow/nodes/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/nodes/agent/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/nodes/agent/agent.py
================================================
import typing
from typing import Any, Dict
from langchain_core.messages import HumanMessage
from langchain_core.retrievers import BaseRetriever
from langchain_core.runnables import RunnableConfig
from langgraph.prebuilt import create_react_agent
from loguru import logger
from pydantic import BaseModel, field_validator, Field
from bisheng.common.constants.enums.telemetry import ApplicationTypeEnum
from bisheng.knowledge.domain.knowledge_rag import KnowledgeRag
from bisheng.llm.domain.services import LLMService
from bisheng.tool.domain.services.executor import ToolExecutor
from bisheng.workflow.callback.event import StreamMsgOverData
from bisheng.workflow.callback.llm_callback import LLMNodeCallbackHandler
from bisheng.workflow.nodes.base import BaseNode
from bisheng.workflow.nodes.prompt_template import PromptTemplateParser
from bisheng_langchain.gpts.assistant import ConfigurableAssistant
from bisheng_langchain.gpts.load_tools import load_tools
agent_executor_dict = {
'ReAct': 'get_react_agent_executor',
'function call': 'get_openai_functions_agent_executor',
}
class SqlAgentParams(BaseModel):
""" SQL Agent Param Model """
database_engine: typing.Optional[str] = Field("mysql",
description="Database type, supportmysql, db2, postgres, gaussdb, oracle")
db_username: str
db_password: str
db_address: str
db_name: str
open: bool = False
@field_validator("database_engine")
@classmethod
def validate_database_engine(cls, v):
# Convert to lowercase
if v:
v = v.lower()
if v not in ['mysql', 'db2', 'postgres', 'gaussdb', 'oracle', 'postgresql']:
raise ValueError(
"Unsupported database engine. Supported engines are: MySQL, DB2, PostgreSql, GaussDB, Oracle.")
return v
class AgentNode(BaseNode):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Determine if it is a single or batch
self._tab = self.node_data.tab['value']
# analyzingprompt
self._system_prompt = PromptTemplateParser(template=self.node_params['system_prompt'])
self._system_variables = self._system_prompt.extract()
self._user_prompt = PromptTemplateParser(template=self.node_params['user_prompt'])
self._user_variables = self._user_prompt.extract()
self._image_prompt = self.node_params.get('image_prompt', [])
self._batch_variable_list = []
self._system_prompt_list = []
self._user_prompt_list = []
self._tool_invoke_list = []
self._log_reasoning_content = []
# Chat Message
self._chat_history_flag = self.node_params['chat_history_flag']['value'] > 0
self._chat_history_num = self.node_params['chat_history_flag']['value']
self._llm = LLMService.get_bisheng_llm_sync(model_id=self.node_params['model_id'],
temperature=self.node_params.get('temperature', 0.3),
app_id=self.workflow_id,
app_name=self.workflow_name,
app_type=ApplicationTypeEnum.WORKFLOW,
user_id=self.user_id)
# Whether to output the results to the user
self._output_user = self.node_params.get('output_user', False)
# tools
self._tools = self.node_params['tool_list']
# knowledge
# self._knowledge_ids = self.node_params['knowledge_id']
# Determine whether it is a knowledge base or a temporary file list
self._knowledge_type = self.node_params['knowledge_id']['type']
self._knowledge_ids = [
one['key'] for one in self.node_params['knowledge_id']['value']
]
# Supported or notnl2sql
self._sql_agent_params = self.node_params.get('sql_agent', None)
self._sql_agent = SqlAgentParams.model_validate(self.node_params['sql_agent']) if (
self._sql_agent_params and self._sql_agent_params.get("open", False)) else None
self._sql_address = ''
if self._sql_agent and self._sql_agent.open:
self._sql_address = self._init_sql_address()
# agent
self._agent_executor_type = 'React'
self._agent = None
def _init_agent(self, system_prompt: str):
# Get a list of configured helper models
assistant_llm = LLMService.sync_get_assistant_llm()
if not assistant_llm.llm_list:
raise Exception('Assistant reasoning model list is empty')
default_llm = [
one for one in assistant_llm.llm_list if one.model_id == self.node_params['model_id']
]
if not default_llm:
raise Exception('The selected inference model is not in the list of assistant inference models')
default_llm = default_llm[0]
self._agent_executor_type = default_llm.agent_executor_type
knowledge_retriever = {
'max_content': default_llm.knowledge_max_content,
'sort_by_source_and_index': default_llm.knowledge_sort_index
}
func_tools = self._init_tools()
knowledge_tools = self._init_knowledge_tools(knowledge_retriever)
sql_agent_tools = self.init_sql_agent_tool()
func_tools.extend(knowledge_tools)
func_tools.extend(sql_agent_tools)
if self._agent_executor_type == 'ReAct':
self._agent = ConfigurableAssistant(
agent_executor_type=agent_executor_dict.get(self._agent_executor_type),
tools=func_tools,
llm=self._llm,
assistant_message=system_prompt,
)
else:
self._agent = create_react_agent(self._llm, func_tools, prompt=system_prompt, checkpointer=False)
def _init_tools(self):
if self._tools:
tool_ids = [int(one['key']) for one in self._tools]
return ToolExecutor.init_by_tool_ids_sync(tool_ids, app_id=self.workflow_id, app_name=self.workflow_name,
app_type=ApplicationTypeEnum.WORKFLOW,
user_id=self.user_id)
else:
return []
def init_sql_agent_tool(self):
if not self._sql_address:
return []
tool_params = {
'sql_agent': {
'llm': self._llm,
'sql_address': self._sql_address
}
}
return load_tools(tool_params=tool_params, llm=self._llm)
def _init_knowledge_tools(self, knowledge_retriever: dict):
if not self._knowledge_ids:
return []
tools = []
for index, knowledge_id in enumerate(self._knowledge_ids):
if self._knowledge_type == 'knowledge':
knowledge_tool = ToolExecutor.init_knowledge_tool_sync(self.user_id, knowledge_id,
llm=self._llm,
**knowledge_retriever)
tools.append(knowledge_tool)
else:
file_metadata_list = self.get_other_node_variable(knowledge_id)
if not file_metadata_list:
# Do not retrieve if no file has been uploaded
continue
description = ''
for one in file_metadata_list:
description += f'<{one.get("document_name")}>:<{one.get("abstract")}>; '
tool_init_params = {
"name": f'{knowledge_id.split(".")[-1].replace("#", "")}_knowledge_{index}',
"description": description,
"vector_retriever": self.init_file_milvus(file_metadata_list[0]),
"elastic_retriever": self.init_file_es(file_metadata_list[0]),
"llm": self._llm,
**knowledge_retriever
}
tmp_file_tool = ToolExecutor.init_tmp_knowledge_tool_sync(**tool_init_params)
tools.append(tmp_file_tool)
return tools
def init_file_milvus(self, file_metadata: Dict) -> BaseRetriever:
""" Initialize the temporary file selected by the usermilvus """
embeddings = LLMService.get_knowledge_default_embedding(self.user_id)
if not embeddings:
raise Exception('No default configuredembeddingModels')
file_ids = [file_metadata['document_id']]
collection_name = self.get_milvus_collection_name(getattr(embeddings, 'model_id'))
vector_client = KnowledgeRag.init_milvus_vectorstore(collection_name=collection_name, embeddings=embeddings)
return vector_client.as_retriever(
search_kwargs={"expr": f'document_id in {file_ids}'})
def init_file_es(self, file_metadata: Dict):
es_client = KnowledgeRag.init_es_vectorstore_sync(index_name=self.tmp_collection_name)
return es_client.as_retriever(
search_kwargs={"filter": [{"term": {"metadata.document_id": file_metadata['document_id']}}]})
def _init_sql_address(self) -> str:
""" Inisialisasi SQL Database Address """
if not self._sql_agent:
return ''
if self._sql_agent.database_engine == 'mysql':
try:
pass
except ImportError:
raise ImportError('Please install pymysql and sqlalchemy to use mysql database')
return f'mysql+pymysql://{self._sql_agent.db_username}:{self._sql_agent.db_password}@{self._sql_agent.db_address}/{self._sql_agent.db_name}?charset=utf8mb4'
elif self._sql_agent.database_engine == 'db2':
try:
pass
except ImportError:
raise ImportError('Please install ibm_db and ibm_db_sa to use db2 database')
return f'db2+ibm_db://{self._sql_agent.db_username}:{self._sql_agent.db_password}@{self._sql_agent.db_address}/{self._sql_agent.db_name}'
elif self._sql_agent.database_engine in ['postgres', 'postgresql']:
try:
pass
except ImportError:
raise ImportError('Please install psycopg2 and sqlalchemy to use postgresql database')
return f'postgresql+psycopg2://{self._sql_agent.db_username}:{self._sql_agent.db_password}@{self._sql_agent.db_address}/{self._sql_agent.db_name}'
elif self._sql_agent.database_engine == 'gaussdb':
try:
pass
except ImportError:
raise ImportError('Please install psycopg2 and opengauss_sqlalchemy to use gaussdb database')
return f'opengauss+psycopg2://{self._sql_agent.db_username}:{self._sql_agent.db_password}@{self._sql_agent.db_address}/{self._sql_agent.db_name}'
elif self._sql_agent.database_engine == 'oracle':
try:
pass
except ImportError:
raise ImportError('Please install oracledb and sqlalchemy to use oracle database')
return f'oracle+oracledb://{self._sql_agent.db_username}:{self._sql_agent.db_password}@{self._sql_agent.db_address}?service_name={self._sql_agent.db_name}'
else:
raise ValueError(f'Unsupported database engine: {self._sql_agent.database_engine}')
def _run(self, unique_id: str):
ret = {}
variable_map = {}
self._batch_variable_list = []
self._system_prompt_list = []
self._user_prompt_list = []
self._tool_invoke_list = []
self._log_reasoning_content = []
for one in self._system_variables:
variable_map[one] = self.get_other_node_variable(one)
system_prompt = self._system_prompt.format(variable_map)
self._system_prompt_list.append(system_prompt)
self._init_agent(system_prompt)
if self._tab == 'single':
self._tool_invoke_list.append([])
ret['output'], reasoning_content = self._run_once(None, unique_id, 'output', self._tool_invoke_list[0])
self._log_reasoning_content.append(reasoning_content)
if self._output_user:
self.callback_manager.on_stream_over(StreamMsgOverData(node_id=self.id,
name=self.name,
msg=ret['output'],
reasoning_content=reasoning_content,
unique_id=unique_id,
output_key='output'))
else:
for index, one in enumerate(self.node_params['batch_variable']):
self._batch_variable_list.append(self.get_other_node_variable(one))
output_key = self.node_params['output'][index]['key']
self._tool_invoke_list.append([])
ret[output_key], reasoning_content = self._run_once(one, unique_id, output_key,
self._tool_invoke_list[index])
self._log_reasoning_content.append(reasoning_content)
if self._output_user:
self.callback_manager.on_stream_over(StreamMsgOverData(node_id=self.id,
name=self.name,
msg=ret[output_key],
reasoning_content=reasoning_content,
unique_id=unique_id,
output_key=output_key))
logger.debug('agent_over result={}', ret)
if self._output_user:
# Nonstream Mode, processing results
for k, v in ret.items():
answer = v
self.graph_state.save_context(content=answer, msg_sender='AI')
return ret
def parse_log(self, unique_id: str, result: dict) -> Any:
ret = []
index = 0
for k, v in result.items():
one_ret = [
{"key": "system_prompt", "value": self._system_prompt_list[0], "type": "params"},
{"key": "user_prompt", "value": self._user_prompt_list[index], "type": "params"},
]
if self._batch_variable_list:
one_ret.insert(0,
{"key": "batch_variable", "value": self._batch_variable_list[index], "type": "variable"})
# Handler Call Log
one_ret.extend(self.parse_tool_log(self._tool_invoke_list[index]))
if self._log_reasoning_content[index]:
one_ret.append(
{"key": "Thinking about content", "value": self._log_reasoning_content[index], "type": "params"})
one_ret.append({"key": f'{self.id}.{k}', "value": v, "type": "variable"})
ret.append(one_ret)
index += 1
return ret
def parse_tool_log(self, tool_invoke_list: list) -> list:
ret = []
tool_invoke_info = {}
for one in tool_invoke_list:
if one['run_id'] not in tool_invoke_info:
tool_invoke_info[one['run_id']] = {}
if one['type'] == 'start':
tool_invoke_info[one['run_id']].update({
'name': one['name'],
'input': one['input']
})
elif one['type'] == 'end':
tool_invoke_info[one['run_id']].update({
'output': one['output']
})
elif one['type'] == 'error':
tool_invoke_info[one['run_id']].update({
'output': f'Error: {one["error"]}'
})
if tool_invoke_info:
for one in tool_invoke_info.values():
# knowledge_retriever_tool belong into rag logic,not show in tool log
if one["name"] == "knowledge_retriever_tool":
continue
ret.append({
"key": one["name"],
"value": f"Tool Input:\n {one['input']}, Tool Output:\n {one['output']}",
"type": "tool"
})
return ret
def _run_once(self, input_variable: str = None, unique_id: str = None, output_key: str = None,
tool_invoke_list: list = None) -> (str, str):
"""
params:
input_variable: Input variables, if yesbatchthen you need to pass in a variablekey, otherwiseNone
unique_id: Node Execute Uniqueid
output_key: Output Variableskey
tool_invoke_list: Tool Call Log
return:
0: Output results to user
1: Process of model thinking
"""
# Description is a variable that references a batch, The value of the variable needs to be replaced with the variable selected by the user
special_variable = f'{self.id}.batch_variable'
variable_map = {}
for one in self._user_variables:
if input_variable and one == special_variable:
variable_map[one] = self.get_other_node_variable(input_variable)
continue
variable_map[one] = self.get_other_node_variable(one)
user = self._user_prompt.format(variable_map)
self._user_prompt_list.append(user)
chat_history = []
if self._chat_history_flag:
chat_history = self.graph_state.get_history_list(self._chat_history_num)
llm_callback = LLMNodeCallbackHandler(callback=self.callback_manager,
unique_id=unique_id,
node_id=self.id,
node_name=self.name,
output=self._output_user,
output_key=output_key,
tool_list=tool_invoke_list,
cancel_llm_end=True)
config = RunnableConfig(callbacks=[llm_callback])
human_message = HumanMessage(content=[{
'type': 'text',
'text': user
}])
human_message = self.contact_file_into_prompt(human_message, self._image_prompt)
chat_history.append(human_message)
logger.debug(f'agent invoke chat_history: {chat_history}')
if self._agent_executor_type == 'ReAct':
result = self._agent.invoke({
'input': chat_history[-1].content,
'chat_history': chat_history[:-1],
}, config=config)
output = result['agent_outcome'].return_values['output']
if isinstance(output, dict):
output = list(output.values())[0]
return output, llm_callback.reasoning_content
else:
result = self._agent.invoke({'messages': chat_history}, config=config)
result = result['messages']
return result[-1].content, llm_callback.reasoning_content
================================================
FILE: src/backend/bisheng/workflow/nodes/base.py
================================================
import base64
import copy
import uuid
from abc import ABC, abstractmethod
from typing import Any, Dict, List
from langchain_core.messages import HumanMessage
from bisheng.core.cache.utils import file_download
from bisheng.user.domain.models.user import UserDao
from bisheng.utils.exceptions import IgnoreException
from bisheng.workflow.callback.base_callback import BaseCallback
from bisheng.workflow.callback.event import NodeEndData, NodeStartData
from bisheng.workflow.common.node import BaseNodeData, NodeType
from bisheng.workflow.edges.edges import EdgeBase
from bisheng.workflow.graph.graph_state import GraphState
from bisheng.workflow.nodes.prompt_template import PromptTemplateParser
class BaseNode(ABC):
def __init__(self, node_data: BaseNodeData, workflow_id: str, user_id: int,
graph_state: GraphState, target_edges: List[EdgeBase], max_steps: int,
callback: BaseCallback, **kwargs: Any):
self.id = node_data.id
self.type = node_data.type
self.name = node_data.name
self.description = node_data.description
self.target_edges = target_edges
# Execute Unique Identification of User
self.user_id = user_id
# Global State Management
self.workflow_id = workflow_id
self.workflow_name = kwargs.get('workflow_name')
self.graph_state = graph_state
# Data of all nodes
self.node_data = node_data
# Parameters required for storage nodes Directly usable parameters after processing
self.node_params = {}
# The value of the other node variables required to store the node
self.other_node_variable = {}
# Used to determine if the maximum number of runs has been exceeded
self.current_step = 0
self.max_steps = max_steps
# Callbacks to handle various events during node execution
self.callback_manager = callback
# Storing Temporary Data milvus Collection Name And es Collection Name workflow_id As partition key
# samecollectionMedium vector data must be the sameembedding_modelGenerated, so the collection name needs to containembedding_model_id
self.tmp_collection_name = 'tmp_workflow_data_new'
self.stop_flag = False
self.exec_unique_id = None
self.user_info = None
# Parse Simple Parameters
self.init_data()
def init_data(self):
""" Unified parameter processing, nodes with special needs can be processed when initializing themselves """
if not self.node_data.group_params:
return
for one in self.node_data.group_params:
for param_info in one.params:
self.node_params[param_info.key] = copy.deepcopy(param_info.value)
def init_user_info(self):
if self.user_info:
return
self.user_info = UserDao.get_user(int(self.user_id))
@abstractmethod
def _run(self, unique_id: str) -> Dict[str, Any]:
"""
Run node The returned results are stored in the global variable management and can be used by other nodes
:return:
"""
raise NotImplementedError
def parse_log(self, unique_id: str, result: dict) -> Any:
"""
Returns the node operation log, the default return is empty
params:
result: Node Run Result
return: The outermost layer is the rounds, and inside are the logs for each round.
[
[
{
"key": "xxx",
"value": "xxx",
"type": "tool" # tool: Tool Type Logs, variable: Log of global variables, params: Log of node parameter type,keySHOW: keymain body
}
]
]
"""
return []
def get_other_node_variable(self, variable_key: str) -> Any:
""" Get the variable values of other nodes from the global variable """
value = self.graph_state.get_variable_by_str(variable_key)
self.other_node_variable[variable_key] = value
return value
def get_input_schema(self) -> Any:
""" Returns the form description the user needs to enter """
return None
def is_condition_node(self) -> bool:
""" Whether it is a mutually exclusive node """
return self.node_data.type == NodeType.CONDITION.value
def get_milvus_collection_name(self, embedding_model_id: str) -> str:
return f"{self.tmp_collection_name}_{embedding_model_id}"
def handle_input(self, user_input: dict) -> Any:
# Update the data entered by the user to the number of nodes
self.node_params.update(user_input)
def route_node(self, state: dict) -> str:
"""
counterpart'slanggraphright of privacycondition_edgeright of privacyfunction, only special nodes need
:return: node_ambid
"""
raise NotImplementedError
def get_next_node_id(self, source_handle: str) -> list[str]:
next_nodes = []
for one in self.target_edges:
if one.sourceHandle == source_handle:
next_nodes.append(one.target)
return next_nodes
def parse_msg_with_variables(self, msg: str) -> (str, list[str]):
"""
params:
msg: user input msg with node variables
return:
0: new msg after replaced variable
1: list of variables node_id.xxxx
"""
msg_template = PromptTemplateParser(template=msg)
variables = msg_template.extract()
if len(variables) > 0:
var_map = {}
for one in variables:
var_map[one] = self.get_other_node_variable(one)
msg = msg_template.format(var_map)
return msg, variables
@staticmethod
def get_file_base64_data(file_path: str) -> str:
if file_path.startswith(('http', "https")):
file_path, _ = file_download(file_path)
with open(file_path, "rb") as f:
file_data = f.read()
base64_data = base64.b64encode(file_data).decode('utf-8')
return base64_data
def contact_file_into_prompt(self, human_message: HumanMessage, variable_list: List[str]) -> HumanMessage:
if not variable_list:
if isinstance(human_message.content, list):
human_message.content = human_message.content[0].get('text')
return human_message
for image_variable in variable_list:
image_value = self.get_other_node_variable(image_variable)
if not image_value:
continue
for file_path in image_value:
base64_image = self.get_file_base64_data(file_path)
human_message.content.append({
"type": "image",
"source_type": "base64",
"mime_type": "image/jpeg",
"data": base64_image,
})
return human_message
def run(self, state: dict) -> Any:
"""
Run node entry
:return:
"""
if self.stop_flag:
raise IgnoreException('stop by user')
if self.current_step >= self.max_steps:
raise IgnoreException(f'{self.name} -- has run more than the maximum number of times.')
exec_id = uuid.uuid4().hex
self.exec_unique_id = exec_id
self.callback_manager.on_node_start(
data=NodeStartData(unique_id=exec_id, node_id=self.id, name=self.name))
reason = None
log_data = None
try:
result = self._run(exec_id)
log_data = self.parse_log(exec_id, result)
# Store node output in global variables
if result:
for key, value in result.items():
self.graph_state.set_variable(self.id, key, value)
self.current_step += 1
except Exception as e:
reason = str(e)
raise e
finally:
# The end log of the output node is created byfakeNode Output, Because it is necessary to wait for the user to complete the input before the log can be displayed correctly
if reason or self.type != NodeType.OUTPUT.value:
self.callback_manager.on_node_end(data=NodeEndData(
unique_id=exec_id, node_id=self.id, name=self.name, reason=reason, log_data=log_data,
input_data=self.other_node_variable))
return state
async def arun(self, state: dict) -> Any:
return self.run(state)
def stop(self):
self.stop_flag = True
================================================
FILE: src/backend/bisheng/workflow/nodes/code/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/nodes/code/code.py
================================================
from typing import Any
from bisheng.workflow.nodes.base import BaseNode
from bisheng.workflow.nodes.code.code_parse import CodeParser
class CodeNode(BaseNode):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._code_input = self.node_params['code_input']
self._code = self.node_params['code']
self._code_output = self.node_params['code_output']
self._code_parser = CodeParser(self._code)
self._parse_code()
def handle_input(self, user_input: dict) -> Any:
self.node_params.update(user_input)
self._code_input = self.node_params['code_input']
self._code_output = self.node_params['code_output']
self._code = self.node_params['code']
def _parse_code(self):
try:
self._code_parser.parse_code()
except Exception as e:
raise Exception(f"CodeNode {self.name} exec code error: " + str(e))
def _run(self, unique_id: str):
main_params = self._parse_code_input()
main_ret = self._code_parser.exec_method('main', **main_params)
main_ret = self._parse_code_output(main_ret)
return main_ret
def parse_log(self, unique_id: str, result: dict):
return [[
{"key": "code_input", "value": self._parse_code_input(), "type": "params"},
{"key": "code_output", "value": result, "type": "params"}
]]
def _parse_code_input(self) -> dict:
ret = {}
for one in self._code_input:
if one["type"] == "ref":
ret[one['key']] = self.get_other_node_variable(one['value'])
else:
ret[one['key']] = one['value']
return ret
def _parse_code_output(self, result: dict) -> dict:
if not isinstance(result, dict):
raise Exception(f"CodeNode {self.name} main function output must be dict")
ret = {}
for one in self._code_output:
if one["key"] not in result:
raise Exception(f"CodeNode {self.name} main function output must have key {one['key']}")
ret[one['key']] = result.get(one['key'])
return ret
================================================
FILE: src/backend/bisheng/workflow/nodes/code/code_parse.py
================================================
import ast
import importlib
import inspect
from typing import Union, Type, Dict, Any
class CodeParser:
"""
A parser for Python source code, extracting code details.
"""
def __init__(self, code: Union[str, Type]) -> None:
"""
Initializes the parser with the provided code.
"""
if isinstance(code, type):
if not inspect.isclass(code):
raise ValueError("The provided code must be a class.")
# If the code is a class, get its source code
code = inspect.getsource(code)
self.code = code
self.exec_globals = {}
self.exec_locals = {}
self.data: Dict[str, Any] = {
"imports": [],
}
self.handlers = {
ast.Import: self.parse_imports,
ast.ImportFrom: self.parse_imports,
ast.FunctionDef: self.parse_functions,
ast.ClassDef: self.parse_classes,
ast.Assign: self.parse_global_vars,
}
def parse_code(self) -> Dict[str, Any]:
"""
Runs all parsing operations and returns the resulting data.
"""
tree = self.get_tree()
for node in ast.walk(tree):
self.parse_node(node)
return self.data
def get_tree(self):
"""
Parses the provided code to validate its syntax.
It tries to parse the code into an abstract syntax tree (AST).
"""
return ast.parse(self.code)
def parse_node(self, node: Union[ast.stmt, ast.AST]) -> None:
"""
Parses an AST node and updates the data
dictionary with the relevant information.
"""
if handler := self.handlers.get(type(node)): # type: ignore
handler(node) # type: ignore
def parse_imports(self, node: Union[ast.Import, ast.ImportFrom]) -> None:
"""
Extracts "imports" from the code, including aliases.
"""
if isinstance(node, ast.Import):
for alias in node.names:
if alias.asname:
self.data["imports"].append(f"{alias.name} as {alias.asname}")
else:
self.data["imports"].append(alias.name)
# Actual Import Module
try:
self.exec_globals[alias.asname or alias.name] = importlib.import_module(alias.name)
except ModuleNotFoundError as e:
raise ModuleNotFoundError(f"Module {alias.name} not found. Please install it and try again.") from e
elif isinstance(node, ast.ImportFrom):
try:
imported_module = importlib.import_module(node.module)
for alias in node.names:
if alias.asname:
self.data["imports"].append((node.module, f"{alias.name} as {alias.asname}"))
else:
self.data["imports"].append((node.module, alias.name))
self.exec_globals[alias.name] = getattr(imported_module, alias.name)
except ModuleNotFoundError:
raise ModuleNotFoundError(f"Module {node.module} not found. Please install it and try again")
def parse_functions(self, node: ast.FunctionDef) -> None:
"""
Extracts "functions" from the code.
"""
compiled_func = compile(ast.Module(body=[node], type_ignores=[]), "", "exec")
exec(compiled_func, self.exec_globals, self.exec_locals)
def parse_classes(self, node: ast.ClassDef) -> None:
compiled_class = compile(ast.Module(body=[node], type_ignores=[]), "", "exec")
exec(compiled_class, self.exec_globals, self.exec_locals)
self.exec_globals[node.name] = self.exec_locals[node.name]
def parse_global_vars(self, node: ast.Assign) -> None:
"""
Extracts global variables from the code.
"""
global_var = {
"targets": [t.id if hasattr(t, "id") else ast.dump(t) for t in node.targets],
"value": ast.unparse(node.value),
}
if isinstance(node.value, ast.Constant):
for one in global_var["targets"]:
self.exec_globals[one] = global_var["value"]
def exec_method(self, method_name: str, *args, **kwargs):
"""
Executes the method with the provided arguments and keyword arguments.
"""
method = self.exec_locals.get(method_name)
if not method:
raise AttributeError(f"Method {method_name} not found.")
return method(*args, **kwargs)
def init_class(self, class_name: str, *args, **kwargs):
"""
Initializes the class with the provided arguments and keyword arguments.
"""
class_ = self.exec_globals.get(class_name)
if not class_:
raise AttributeError(f"Class {class_name} not found.")
return class_(*args, **kwargs)
================================================
FILE: src/backend/bisheng/workflow/nodes/condition/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/nodes/condition/condition.py
================================================
from typing import Any
from bisheng.workflow.nodes.base import BaseNode
from bisheng.workflow.nodes.condition.conidition_case import ConditionCases
from loguru import logger
class ConditionNode(BaseNode):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._next_node_id = None
self._condition_cases = [ConditionCases(**one) for one in self.node_params['condition']]
# Store calculated variables and values
self._variable_key_value = {}
def _run(self, unique_id: str):
self._variable_key_value = {}
next_node_ids = None
for one in self._condition_cases:
flag = one.evaluate_conditions(self)
self._variable_key_value.update(one.variable_key_value)
if flag:
next_node_ids = self.get_next_node_id(one.id)
logger.info(f'Condition node {self.id} pass condition {next_node_ids}')
break
# Guaranteed logic, using default routing
if next_node_ids is None:
self._next_node_id = self.get_next_node_id('right_handle')
else:
self._next_node_id = next_node_ids
def parse_log(self, unique_id: str, result: dict) -> Any:
return [[
{
"key": k,
"value": v,
"type": "variable"
} for k, v in self._variable_key_value.items()
]]
def route_node(self, state: dict) -> str:
return self._next_node_id
================================================
FILE: src/backend/bisheng/workflow/nodes/condition/conidition_case.py
================================================
import re
from typing import List, Optional, Dict
from loguru import logger
from pydantic import ConfigDict, BaseModel, Field
from bisheng.workflow.common.condition import ComparisonType, LogicType
from bisheng.workflow.nodes.base import BaseNode
class ConditionOne(BaseModel):
id: str = Field(..., description='Unique id for condition')
left_var: str = Field(..., description='Left variable')
comparison_operation: str = Field(..., description='Compare type')
right_value_type: str = Field(..., description='Right value type')
right_value: str = Field(..., description='Right value')
variable_key_value: Dict = Field(default={}, description='variable key value')
def evaluate(self, node_instance: BaseNode) -> bool:
left_value = node_instance.get_other_node_variable(self.left_var)
self.variable_key_value[self.left_var] = left_value
right_value = self.right_value
if self.right_value_type == 'ref' and self.right_value:
right_value = node_instance.get_other_node_variable(self.right_value)
self.variable_key_value[self.right_value] = right_value
logger.debug(f'condition evaluate ope: {self.comparison_operation},'
f' left value: {left_value}, right value: {right_value}')
return self.compare_two_value(left_value, right_value)
def compare_two_value(self, left_value: str, right_value: str) -> bool:
if self.comparison_operation == ComparisonType.EQUAL:
return left_value == right_value
elif self.comparison_operation == ComparisonType.NOT_EQUAL:
return left_value != right_value
elif self.comparison_operation == ComparisonType.CONTAINS:
return left_value.find(right_value) != -1
elif self.comparison_operation == ComparisonType.NOT_CONTAINS:
return left_value.find(right_value) == -1
elif self.comparison_operation == ComparisonType.IS_EMPTY:
return left_value == '' or left_value is None
elif self.comparison_operation == ComparisonType.IS_NOT_EMPTY:
return left_value != '' and left_value is not None
elif self.comparison_operation == ComparisonType.STARTS_WITH:
return left_value.startswith(right_value)
elif self.comparison_operation == ComparisonType.ENDS_WITH:
return left_value.endswith(right_value)
elif self.comparison_operation == ComparisonType.GREATER_THAN:
return float(left_value) > float(right_value)
elif self.comparison_operation == ComparisonType.GREATER_THAN_OR_EQUAL:
return float(left_value) >= float(right_value)
elif self.comparison_operation == ComparisonType.LESS_THAN:
return float(left_value) < float(right_value)
elif self.comparison_operation == ComparisonType.LESS_THAN_OR_EQUAL:
return float(left_value) <= float(right_value)
elif self.comparison_operation == ComparisonType.REGEX:
right = re.compile(right_value)
return right.search(left_value) is not None
else:
raise Exception('not support comparison operator: %s' % self.comparison_operation)
class ConditionCases(BaseModel):
model_config = ConfigDict(arbitrary_types_allowed=True)
id: str = Field(..., description='Unique id for case')
operator: Optional[str] = Field('and', description='Operator for case')
conditions: Optional[List[ConditionOne]] = Field(None, description='Conditions for case')
variable_key_value: Dict = Field(default={}, description='variable key value')
def evaluate_conditions(self, node_instance: BaseNode) -> bool:
# Normally onlyelseNoconditions
if not self.conditions:
return True
for condition in self.conditions:
flag = condition.evaluate(node_instance)
self.variable_key_value.update(condition.variable_key_value)
if self.operator == LogicType.AND:
if not flag:
return False
else:
if flag:
return True
return True if self.operator == LogicType.AND else False
================================================
FILE: src/backend/bisheng/workflow/nodes/end/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/nodes/end/end.py
================================================
from bisheng.workflow.nodes.base import BaseNode
class EndNode(BaseNode):
def _run(self, unique_id: str):
return None
================================================
FILE: src/backend/bisheng/workflow/nodes/input/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/nodes/input/const.py
================================================
from bisheng.common.schemas.rag_schema import RagMetadataFieldSchema
# Enter the metadata definition for the temporary upload file of the node
InputFileMetadata = [
RagMetadataFieldSchema(field_name="document_id", field_type="text", kwargs={"nullable": False, "max_length": 1024}),
RagMetadataFieldSchema(field_name="document_name", field_type="text",
kwargs={"nullable": True, "max_length": 32767}),
RagMetadataFieldSchema(field_name="abstract", field_type="text", kwargs={"nullable": True, "max_length": 65535}),
RagMetadataFieldSchema(field_name="chunk_index", field_type="int64", kwargs={"nullable": True}),
RagMetadataFieldSchema(field_name="bbox", field_type="text", kwargs={"nullable": True, "max_length": 65535}),
RagMetadataFieldSchema(field_name="page", field_type="int64", kwargs={"nullable": True}),
RagMetadataFieldSchema(field_name="knowledge_id", field_type="text",
kwargs={"nullable": False, "max_length": 1024}),
RagMetadataFieldSchema(field_name="upload_time", field_type="int64", kwargs={"nullable": True}),
RagMetadataFieldSchema(field_name="update_time", field_type="int64", kwargs={"nullable": True}),
RagMetadataFieldSchema(field_name="uploader", field_type="text", kwargs={"nullable": True, "max_length": 1024}),
RagMetadataFieldSchema(field_name="updater", field_type="text", kwargs={"nullable": True, "max_length": 1024}),
RagMetadataFieldSchema(field_name="user_metadata", field_type="json", kwargs={"nullable": True})
]
================================================
FILE: src/backend/bisheng/workflow/nodes/input/input.py
================================================
import copy
import json
import time
from enum import Enum
from typing import Any, List, Dict
from urllib.parse import urlparse, unquote
from json_repair import json_repair
from langchain_core.messages import SystemMessage, HumanMessage
from loguru import logger
from bisheng.api.services.knowledge import KnowledgeService
from bisheng.api.services.knowledge_imp import read_chunk_text
from bisheng.api.v1.schemas import FileProcessBase
from bisheng.chat.types import IgnoreException
from bisheng.common.constants.enums.telemetry import ApplicationTypeEnum
from bisheng.common.errcode.knowledge import KnowledgeFileNotSupportedError
from bisheng.core.cache.utils import file_download
from bisheng.knowledge.domain.knowledge_rag import KnowledgeRag
from bisheng.llm.domain.services import LLMService
from bisheng.utils import generate_uuid
from bisheng.workflow.callback.event import GuideQuestionData
from bisheng.workflow.nodes.base import BaseNode
from bisheng.workflow.nodes.input.const import InputFileMetadata
class ParseModeEnum(str, Enum):
KEEP_RAW = 'keep_raw'
EXTRACT_TEXT = 'extract_text'
INGEST_TO_KNOWLEDGE_BASE = 'ingest_to_temp_kb'
class InputNode(BaseNode):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Node Current Version
self._current_v = 2
# Whether the record is a conversation or a form
self._tab = self.node_data.tab['value']
# Record what type of variable this is
self._node_params_map = {}
new_node_params = {}
# The maximum length of the input file in the dialog box, more than this length will be truncated
if self.node_data.v < self._current_v:
raise IgnoreException(f'{self.name} -- workflow node is update')
self._original_node_params = copy.deepcopy(self.node_params)
# save user set file key -> file key info
self._file_key_map = {}
if self.is_dialog_input():
new_node_params['user_input'] = self.node_params['user_input']
new_node_params['dialog_files_content'] = self.node_params.get('dialog_files_content', [])
else:
for value_info in self.node_params['form_input']:
value_key = value_info['key']
# The file key needs to be re-generated to avoid parse type not ingest to knowledge base
if value_info["type"] == "file":
value_key = f"file_{generate_uuid()[:8]}"
self._file_key_map[value_info['key']] = value_info
new_node_params[value_key] = value_info['value']
self._node_params_map[value_key] = value_info
self.node_params = new_node_params
self._image_ext = ['png', 'jpg', 'jpeg', 'bmp']
self._vector_client = None
self._es_client = None
def is_dialog_input(self):
""" Whether the input is in the form of a conversation """
if self._tab == 'dialog_input':
return True
elif self._tab == 'form_input':
return False
raise IgnoreException(f'{self.name} -- workflow node is update')
def get_input_schema(self) -> Any:
if self.is_dialog_input():
try:
self.handle_recommended_questions()
except Exception as e:
logger.exception("handle recommended questions error")
user_input_info = self.node_data.get_variable_info('user_input')
user_input_info.value = [
self.node_data.get_variable_info('dialog_files_content'),
self.node_data.get_variable_info('dialog_file_accept'),
self.node_data.get_variable_info('user_input_file'),
]
return user_input_info
form_input_info = self.node_data.get_variable_info('form_input')
form_variables = copy.deepcopy(self._node_params_map)
res = []
for one_key, one in form_variables.items():
one['key'] = one_key
one['value'], _ = self.parse_msg_with_variables(one['value'])
res.append(one)
form_input_info.value = res
return form_input_info
def handle_recommended_questions(self):
recommended_questions_flag = self._original_node_params.get('recommended_questions_flag', False)
if not recommended_questions_flag:
return
recommended_llm = self._original_node_params.get('recommended_llm', 0)
recommended_system_prompt = self._original_node_params.get('recommended_system_prompt', '')
recommended_history_num = self._original_node_params.get('recommended_history_num', 3)
if not recommended_llm or not recommended_system_prompt or not recommended_history_num:
logger.debug(f"{self.name} recommended questions config incomplete")
return
chat_history = self.graph_state.get_history_memory(recommended_history_num)
if not chat_history:
logger.debug(f"{self.name} recommended questions chat history is empty")
return
recommended_system_prompt, _ = self.parse_msg_with_variables(recommended_system_prompt)
llm_obj = LLMService.get_bisheng_llm_sync(model_id=recommended_llm,
app_id=self.workflow_id,
app_name=self.workflow_name,
app_type=ApplicationTypeEnum.WORKFLOW,
user_id=self.user_id)
user_prompt = f"# Current Conversation Context\n{chat_history}"
result = llm_obj.invoke([SystemMessage(content=recommended_system_prompt), HumanMessage(content=user_prompt)])
result = result.content
try:
result = json.loads(result)
except json.decoder.JSONDecodeError:
logger.debug("received non-json response from LLM, try json repair")
try:
result = json_repair.loads(result, skip_json_loads=True)
except Exception as e:
logger.error(f"json repair failed: {e}")
return
logger.debug(f"received response from LLM, result is {result}")
if not isinstance(result, dict):
return
questions = []
for key, value in result.items():
if isinstance(value, list):
questions = value
break
if not questions:
return
self.callback_manager.on_guide_question(data=GuideQuestionData(node_id=self.id, name=self.name,
unique_id=generate_uuid(),
guide_question=questions[:3]))
def _parse_upload_file_variables(self, key_info: Dict, key_value: Dict) -> Dict:
"""
parse upload_file variables
Documented metadataData, full-text files, minio file paths, image files path
"""
# Compatible processing of historical versions of nodes
if self.node_data.v <= self._current_v:
if self.is_dialog_input():
key_value.pop("dialog_file_paths", None)
return key_value
file_parse_mode = key_info.get('file_parse_mode', ParseModeEnum.INGEST_TO_KNOWLEDGE_BASE)
ret = {}
if file_parse_mode == ParseModeEnum.KEEP_RAW:
if key_info.get("file_type") in ["image", "all"]:
ret[key_info['image_file']] = key_value.get(key_info['image_file'], [])
ret[key_info['file_path']] = key_value.get(key_info['file_path'], [])
elif file_parse_mode == ParseModeEnum.EXTRACT_TEXT:
ret[key_info['file_content']] = key_value.get(key_info['file_content'], "")
else:
ret[key_info['key']] = key_value.get(key_info['key'], [])
return ret
def _run(self, unique_id: str):
if self.is_dialog_input():
key_info = {
"key": "dialog_files",
"file_content": "dialog_files_content",
"file_path": "dialog_file_paths",
"image_file": "dialog_image_files",
"file_type": self._original_node_params.get("dialog_file_accept"),
"file_parse_mode": self._original_node_params.get("file_parse_mode", ParseModeEnum.EXTRACT_TEXT),
"file_content_size": self._original_node_params.get("dialog_files_content_size", 15000)
}
# Input in the form of a dialog
result = self.parse_upload_file("dialog_files", key_info, self.node_params.get('dialog_files_content', []))
res = {
'user_input': self.node_params['user_input'],
}
result.pop("dialog_files", None)
res.update(self._parse_upload_file_variables(key_info, result))
self.graph_state.save_context(content=f'{res.get("dialog_files_content", "")}\n{res["user_input"]}',
msg_sender='human')
return res
ret = {}
human_input = ""
# The corresponding file upload needs to be processed in the form
for key, value in self.node_params.items():
key_info = self._node_params_map[key]
label, _ = self.parse_msg_with_variables(key_info.get('value')) if key_info.get('value') else key
if key_info['type'] == 'file':
new_params = self.parse_upload_file(key, key_info, value)
ret.update(self._parse_upload_file_variables(key_info, new_params))
if new_params[key_info['key']]:
content = ""
for one in new_params[key_info['key']]:
content += f"{one.get('document_name', '')},"
human_input += f"{label}: {content.rstrip(',')}\n"
else:
ret[key] = value
human_input += f"{label}: {value}\n"
self.graph_state.save_context(content=f'{human_input}', msg_sender='human')
return ret
def parse_log(self, unique_id: str, result: dict) -> Any:
ret = []
for k, v in result.items():
if (self._node_params_map.get(k) and self._node_params_map[k]['type'] == 'file') or (
self._file_key_map.get(k) and self._file_key_map[k]['type'] == 'file'):
continue
ret.append({"key": f'{self.id}.{k}', "value": v, "type": "variable"})
return [ret]
def get_upload_file_path_content(self, file_url: str) -> (list, list):
"""
params:
file_url: upload to minio share url
return:
0: chunks list
1: metadata list
"""
filepath, file_name = file_download(file_url)
texts = []
metadatas = []
try:
file_rule = FileProcessBase(knowledge_id=0)
texts, metadatas, _, _ = read_chunk_text(self.user_id, filepath, file_name, file_rule.separator,
file_rule.separator_rule,
file_rule.chunk_size, 0, None,
file_rule.retain_images, file_rule.enable_formula,
file_rule.force_ocr,
file_rule.filter_page_header_footer, file_rule.excel_rule)
except KnowledgeFileNotSupportedError as e:
logger.warning('input node file type is not support')
pass
return texts, metadatas
def init_vector_clients(self):
if self._vector_client is None:
embedding = LLMService.get_knowledge_default_embedding(self.user_id)
if not embedding:
raise Exception('No default configured embedding Models')
milvus_collection_name = self.get_milvus_collection_name(getattr(embedding, 'model_id'))
self._vector_client = KnowledgeRag.init_milvus_vectorstore(milvus_collection_name, embedding,
metadata_schemas=InputFileMetadata)
self._es_client = KnowledgeRag.init_es_vectorstore_sync(self.tmp_collection_name,
metadata_schemas=InputFileMetadata)
def parse_upload_file(self, key: str, key_info: dict, value: List[str]) -> dict | None:
"""
parse upload_file
Documented metadataData, full-text files, minio file paths, image files path
"""
# Parsing the file. need return values
all_metadata = []
all_file_content = ''
original_file_path = []
image_files_path = []
if not value:
logger.warning(f"{self.id}.{key} value is None")
return {
key_info['key']: all_metadata,
key_info['file_content']: all_file_content,
key_info['file_path']: original_file_path,
key_info['image_file']: image_files_path
}
file_parse_mode = key_info.get('file_parse_mode', ParseModeEnum.INGEST_TO_KNOWLEDGE_BASE)
file_content_max_size = int(key_info.get('file_content_size', 15000))
file_id = generate_uuid()
file_content_length = 0
for one_file_url in value:
url_obj = urlparse(one_file_url)
file_name = unquote(url_obj.path.split('/')[-1])
# get file original name
file_name = KnowledgeService.get_upload_file_original_name(file_name)
all_metadata.append({
"document_id": file_id,
"document_name": file_name,
"knowledge_id": self.workflow_id,
"upload_time": int(time.time()),
"bbox": '', # Temporary files cannot be traced because the source files are not persisted
})
file_ext = file_name.split('.')[-1].lower()
logger.debug(f"{self.id}.{key} file_parse_mode is keep_raw")
original_file_path.append(one_file_url)
if file_ext in self._image_ext:
image_files_path.append(one_file_url)
if file_parse_mode == ParseModeEnum.KEEP_RAW:
continue
texts, metadatas = self.get_upload_file_path_content(one_file_url)
if file_content_length < file_content_max_size:
file_content = "\n".join(texts)
file_content = file_content[:file_content_max_size - file_content_length]
file_content_length += len(file_content)
all_file_content += f"[file name]: {file_name}\n[file content begin]\n{file_content}\n[file content end]\n"
if not texts:
logger.debug(f"{self.id}.{key} extract file text is empty")
continue
if file_parse_mode == ParseModeEnum.EXTRACT_TEXT:
continue
self.init_vector_clients()
new_metadata = []
# A file corresponding to the same variable, placed in a file_id mile
for one in metadatas:
metadata = one.model_dump()
metadata.update(all_metadata[-1])
new_metadata.append(metadata)
# Uploaded to milvus And es
logger.debug(f'workflow_add_vectordb file={key} file_name={file_name} file_id={file_id}')
self._vector_client.add_texts(texts=texts, metadatas=new_metadata)
logger.debug(f'workflow_add_es file={key} file_name={file_name} file_id={file_id}')
self._es_client.add_texts(texts=texts, metadatas=new_metadata)
logger.debug(f'workflow_record_file_metadata file={key} file_name={file_name}')
all_metadata[-1] = new_metadata[0]
# Documentation metadata, other nodes according to metadataData to retrieve corresponding files
return {
key_info['key']: all_metadata,
key_info['file_content']: all_file_content,
key_info['file_path']: original_file_path,
key_info['image_file']: image_files_path
}
================================================
FILE: src/backend/bisheng/workflow/nodes/knowledge_retriever/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/nodes/knowledge_retriever/knowledge_retriever.py
================================================
from typing import Any
from loguru import logger
from bisheng.workflow.common.knowledge import RagUtils
class KnowledgeRetriever(RagUtils):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._output_keys = [one.get("key") for one in self.node_params.get('retrieved_result', [])]
def _run(self, unique_id: str):
try:
self.user_questions = self.init_user_question()
self.init_user_info()
self.init_multi_retriever()
ret = {}
for index, question in enumerate(self.user_questions):
output_key = self._output_keys[index]
if question is None:
question = ""
try:
self.init_rerank_model()
question_answer = self.retrieve_question(question)
question_answer = [{
"text": one.page_content,
"metadata": {
"chunk_index": one.metadata.get('chunk_index'),
"knowledge_id": one.metadata.get('knowledge_id'),
"document_id": one.metadata.get('document_id'),
"document_name": one.metadata.get('document_name'),
"upload_time": one.metadata.get('upload_time'),
"update_time": one.metadata.get('update_time'),
"uploader": one.metadata.get('uploader'),
"updater": one.metadata.get('updater'),
"user_metadata": one.metadata.get('user_metadata'),
}
} for one in question_answer]
except Exception as e:
question_answer = str(e)
ret[output_key] = question_answer
except Exception as e:
logger.exception(f"KnowledgeRetriever node run error: {e}")
ret = {
one: str(e) for one in self._output_keys
}
return ret
def parse_log(self, unique_id: str, result: dict) -> Any:
ret = []
for index, question in enumerate(self.user_questions):
output_key = self._output_keys[index]
one_ret = [
{'key': f'{self.id}.user_question', 'value': question, "type": "variable"},
{'key': f'{self.id}.{output_key}', 'value': result[output_key], "type": "variable"},
]
ret.append(one_ret)
return ret
================================================
FILE: src/backend/bisheng/workflow/nodes/llm/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/nodes/llm/llm.py
================================================
from typing import Any
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.runnables import RunnableConfig
from loguru import logger
from bisheng.common.constants.enums.telemetry import ApplicationTypeEnum
from bisheng.llm.domain.services import LLMService
from bisheng.workflow.callback.llm_callback import LLMNodeCallbackHandler
from bisheng.workflow.nodes.base import BaseNode
from bisheng.workflow.nodes.prompt_template import PromptTemplateParser
class LLMNode(BaseNode):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Determine if it is a single or batch
self._tab = self.node_data.tab['value']
# Whether to output the results to the user
self._output_user = self.node_params.get('output_user', False)
self._image_prompt = self.node_params.get('image_prompt', [])
# Inisialisasiprompt
self._system_prompt = PromptTemplateParser(template=self.node_params['system_prompt'])
self._system_variables = self._system_prompt.extract()
self._user_prompt = PromptTemplateParser(template=self.node_params['user_prompt'])
self._user_variables = self._user_prompt.extract()
# Data required to store logs
self._system_prompt_list = []
self._user_prompt_list = []
self._batch_variable_list = []
self._log_reasoning_content = []
# InisialisasillmObjects
self._llm = LLMService.get_bisheng_llm_sync(model_id=self.node_params['model_id'],
temperature=self.node_params.get('temperature', 0.3),
app_id=self.workflow_id,
app_name=self.workflow_name,
app_type=ApplicationTypeEnum.WORKFLOW,
user_id=self.user_id)
def _run(self, unique_id: str):
self._system_prompt_list = []
self._user_prompt_list = []
self._batch_variable_list = []
self._log_reasoning_content = []
result = {}
if self._tab == 'single':
result['output'], reasoning_content = self._run_once(None, unique_id, 'output')
self._log_reasoning_content.append(reasoning_content)
else:
for index, one in enumerate(self.node_params['batch_variable']):
self._batch_variable_list.append(self.get_other_node_variable(one))
output_key = self.node_params['output'][index]['key']
result[output_key], reasoning_content = self._run_once(one, unique_id, output_key)
self._log_reasoning_content.append(reasoning_content)
if self._output_user:
for k, v in result.items():
self.graph_state.save_context(content=v, msg_sender='AI')
return result
def parse_log(self, unique_id: str, result: dict) -> Any:
ret = []
index = 0
for k, v in result.items():
one_ret = [
{"key": "system_prompt", "value": self._system_prompt_list[index], "type": "params"},
{"key": "user_prompt", "value": self._user_prompt_list[index], "type": "params"},
]
if self._log_reasoning_content[index]:
one_ret.append({"key": "Thinking about content", "value": self._log_reasoning_content[index], "type": "params"})
one_ret.append({"key": f'{self.id}.{k}', "value": v, "type": "variable"})
if self._batch_variable_list:
one_ret.insert(0, {"key": f"{self.id}.batch_variable", "value": self._batch_variable_list[index],
"type": "variable"})
index += 1
ret.append(one_ret)
return ret
def _run_once(self,
input_variable: str = None,
unique_id: str = None,
output_key: str = None) -> (str, str):
# Description is a variable that references a batch, The value of the variable needs to be replaced with the variable selected by the user
special_variable = f'{self.id}.batch_variable'
variable_map = {}
for one in self._system_variables:
if input_variable and one == special_variable:
variable_map[one] = self.get_other_node_variable(input_variable)
continue
variable_map[one] = self.get_other_node_variable(one)
system = self._system_prompt.format(variable_map)
self._system_prompt_list.append(system)
variable_map = {}
for one in self._user_variables:
if input_variable and one == special_variable:
variable_map[one] = self.get_other_node_variable(input_variable)
continue
variable_map[one] = self.get_other_node_variable(one)
user = self._user_prompt.format(variable_map)
self._user_prompt_list.append(user)
logger.debug(
f'outputkey={output_key} workflow llm node prompt: system: {system}\nuser: {user}')
llm_callback = LLMNodeCallbackHandler(callback=self.callback_manager,
unique_id=unique_id,
node_id=self.id,
node_name=self.name,
output=self._output_user,
output_key=output_key)
config = RunnableConfig(callbacks=[llm_callback])
inputs = []
if system:
inputs.append(SystemMessage(content=system))
human_message = HumanMessage(content=[{
'type': 'text',
'text': user
}])
human_message = self.contact_file_into_prompt(human_message, self._image_prompt)
inputs.append(human_message)
logger.debug(f'llm invoke chat_history: {inputs} {self._image_prompt}')
result = self._llm.invoke(inputs, config=config)
return result.content, llm_callback.reasoning_content
================================================
FILE: src/backend/bisheng/workflow/nodes/node_manage.py
================================================
from bisheng.workflow.common.node import NodeType
from bisheng.workflow.nodes.agent.agent import AgentNode
from bisheng.workflow.nodes.code.code import CodeNode
from bisheng.workflow.nodes.condition.condition import ConditionNode
from bisheng.workflow.nodes.end.end import EndNode
from bisheng.workflow.nodes.input.input import InputNode
from bisheng.workflow.nodes.knowledge_retriever.knowledge_retriever import KnowledgeRetriever
from bisheng.workflow.nodes.llm.llm import LLMNode
from bisheng.workflow.nodes.output.output import OutputNode
from bisheng.workflow.nodes.qa_retriever.qa_retriever import QARetrieverNode
from bisheng.workflow.nodes.rag.rag import RagNode
from bisheng.workflow.nodes.report.report import ReportNode
from bisheng.workflow.nodes.start.start import StartNode
from bisheng.workflow.nodes.tool.tool import ToolNode
NODE_CLASS_MAP = {
NodeType.START.value: StartNode,
NodeType.END.value: EndNode,
NodeType.INPUT.value: InputNode,
NodeType.OUTPUT.value: OutputNode,
NodeType.TOOL.value: ToolNode,
NodeType.RAG.value: RagNode,
NodeType.REPORT.value: ReportNode,
NodeType.QA_RETRIEVER.value: QARetrieverNode,
NodeType.CONDITION.value: ConditionNode,
NodeType.AGENT.value: AgentNode,
NodeType.CODE.value: CodeNode,
NodeType.LLM.value: LLMNode,
NodeType.KNOWLEDGE_RETRIEVER.value: KnowledgeRetriever,
}
class NodeFactory:
@classmethod
def get_node_class(cls, node_type: str) -> 'BaseNode':
return NODE_CLASS_MAP.get(node_type)
@classmethod
def instance_node(cls, node_type: str, **kwargs) -> 'BaseNode':
node_class = cls.get_node_class(node_type)
if node_class is None:
raise Exception(f'Unknown node type:{node_type}')
return node_class(**kwargs)
================================================
FILE: src/backend/bisheng/workflow/nodes/output/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/nodes/output/output.py
================================================
import json
from typing import Any
from bisheng.core.storage.minio.minio_manager import get_minio_storage_sync
from bisheng.workflow.callback.event import OutputMsgChooseData, OutputMsgData, OutputMsgInputData
from bisheng.workflow.nodes.base import BaseNode
from bisheng.workflow.nodes.prompt_template import PromptTemplateParser
class OutputNode(BaseNode):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# minio
self._minio_client = get_minio_storage_sync()
# Interaction Type
self._output_type = self.node_params['output_result']['type']
self._output_result = self.node_params['output_result']['value']
# Result of user processing
self._handled_output_result = self._output_result
# user input msg
if 'output_msg' in self.node_params:
_original_output_msg = self.node_params['output_msg']
else:
_original_output_msg = self.node_params['message']
self._output_msg = _original_output_msg['msg']
self._output_files = _original_output_msg['files']
# Message Content After Variable Replacement
self._parsed_output_msg = ''
self._parsed_files = []
self._source_documents = []
# Non-selective interaction, then the next node is wiredtarget. Selective interactions, which need to be judged based on user input
self._next_node_id = [one.target for one in self.target_edges]
def handle_input(self, user_input: dict) -> Any:
# Needs to be depositedstate,
self.graph_state.save_context(content=json.dumps(user_input, ensure_ascii=False), msg_sender='human')
self._handled_output_result = user_input['output_result']
self.graph_state.set_variable(self.id, 'output_result', user_input['output_result'])
def get_input_schema(self) -> Any:
# Explain that no interaction is required
if self._output_type not in ['input', 'choose']:
return None
group_params = self.node_data.dict(include={'group_params'})
return group_params['group_params']
def is_condition_node(self) -> bool:
return self._output_type == 'choose'
def route_node(self, state: dict) -> str | list[str]:
# Selective interaction requires judging the next node based on the user's input
if self._output_type == 'choose':
return self.get_next_node_id(self._handled_output_result)
return self._next_node_id
def _run(self, unique_id: str):
self._source_documents = []
self.parse_output_msg()
self.send_output_msg(unique_id)
res = {
'message': self._parsed_output_msg,
'output_result': self._handled_output_result
}
return res
def parse_log(self, unique_id: str, result: dict) -> Any:
ret = [
{
"key": "output_msg",
"value": self._parsed_output_msg,
"type": "params"
}
]
if self._output_type == 'input':
ret.append({
"key": "output_result",
"value": self._handled_output_result,
"type": "key"
})
return [ret]
def parse_output_msg(self):
""" Paddingmsgvariable in, get the file'sshareAddress: """
self._parsed_output_msg = self.parse_template_msg(self._output_msg)
if self._parsed_files:
return
for one in self._output_files:
one['path'] = self._minio_client.get_share_link_sync(one['path'])
self._parsed_files.append(one)
def send_output_msg(self, unique_id: str):
""" SendoutputNode's Message """
msg_params = {
'name': self.name,
'unique_id': unique_id,
'node_id': self.id,
'msg': self._parsed_output_msg,
'files': self._parsed_files,
'output_key': '',
'source_documents': self._source_documents
}
# where interaction is required, there isgroup_params
if self._output_type == 'input':
msg_params['key'] = 'output_result'
msg_params['input_msg'] = self.parse_template_msg(self._output_result)
self.callback_manager.on_output_input(data=OutputMsgInputData(**msg_params))
elif self._output_type == 'choose':
msg_params['key'] = 'output_result'
msg_params['options'] = self.node_data.get_variable_info('output_result').options
self.callback_manager.on_output_choose(data=OutputMsgChooseData(**msg_params))
else:
self.graph_state.save_context(content=self._parsed_output_msg,
msg_sender='AI')
self.callback_manager.on_output_msg(OutputMsgData(**msg_params))
def parse_template_msg(self, msg: str):
msg_template = PromptTemplateParser(template=msg)
variables = msg_template.extract()
if len(variables) > 0:
var_map = {}
for one in variables:
node_id = one.split('.')[0]
# CiteqaDemonstrate traceability when using the Knowledge Base node
if node_id.startswith('qa_retriever'):
self._source_documents = self.graph_state.get_variable(node_id, '$retrieved_result$')
var_map[one] = self.get_other_node_variable(one)
msg = msg_template.format(var_map)
return msg
================================================
FILE: src/backend/bisheng/workflow/nodes/output/output_fake.py
================================================
from bisheng.workflow.callback.event import NodeEndData
from pydantic import ConfigDict, BaseModel, Field
from bisheng.workflow.nodes.output.output import OutputNode
class OutputFakeNode(BaseModel):
""" Used to processoutputInterrupt to determine if user input is required """
model_config = ConfigDict(arbitrary_types_allowed=True)
id: str
output_node: OutputNode
type: str
def run(self, state: dict):
""" Do nothing, just use it to deal withoutputInterrupt to determine if user input is required """
self.output_node.callback_manager.on_node_end(data=NodeEndData(
unique_id=self.output_node.exec_unique_id,
node_id=self.output_node.id,
name=self.output_node.name,
reason=None,
log_data=self.output_node.parse_log(self.output_node.exec_unique_id, {})))
return state
async def arun(self, state: dict):
return self.run(state)
def get_input_schema(self):
return self.output_node.get_input_schema()
def stop(self):
pass
================================================
FILE: src/backend/bisheng/workflow/nodes/prompt_template.py
================================================
import re
REGEX = re.compile(r'\{\{#([#a-zA-Z_][#a-zA-Z0-9_]{0,29})#\}\}')
WITH_VARIABLE_TMPL_REGEX = re.compile(
r'\{\{#([#a-zA-Z_][a-zA-Z0-9_]{0,29}|[#a-zA-Z0-9_]{1,50}\.[#a-zA-Z0-9_\.]{1,100})#\}\}')
class PromptTemplateParser:
"""
Rules:
1. Template variables must be enclosed in `{{}}`.
2. The template variable Key can only be: letters + numbers + underscore, with a maximum length of 16 characters,
and can only start with letters and underscores.
3. The template variable Key cannot contain new lines or spaces, and must comply with rule 2.
4. In addition to the above, 3 types of special template variable Keys are accepted:
`{{#histories#}}` `{{#query#}}` `{{#context#}}`. No other `{{##}}` template variables are allowed.
"""
def __init__(self, template: str, with_variable_tmpl: bool = True):
self.template = template
self.with_variable_tmpl = with_variable_tmpl
self.regex = WITH_VARIABLE_TMPL_REGEX if with_variable_tmpl else REGEX
self.variable_keys = self.extract()
def extract(self) -> list:
# Regular expression to match the template rules
return re.findall(self.regex, self.template)
def format(self, inputs: dict, remove_template_variables: bool = True) -> str:
def replacer(match):
key = match.group(1)
value = inputs.get(key, match.group(0)) # return original matched string if key not found
if not isinstance(value, str):
value = str(value)
if remove_template_variables:
return PromptTemplateParser.remove_template_variables(
value, self.with_variable_tmpl)
return value
prompt = re.sub(self.regex, replacer, self.template)
return re.sub(r'<\|.*?\|>', '', prompt)
@classmethod
def remove_template_variables(cls, text: str, with_variable_tmpl: bool = False):
return re.sub(WITH_VARIABLE_TMPL_REGEX if with_variable_tmpl else REGEX, r'{\1}', text)
================================================
FILE: src/backend/bisheng/workflow/nodes/qa_retriever/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/nodes/qa_retriever/qa_retriever.py
================================================
import json
from typing import Any
from bisheng.interface.initialize.loading import instantiate_vectorstore
from bisheng.interface.vector_store.custom import MilvusWithPermissionCheck
from bisheng.user.domain.models.user import UserDao
from bisheng.workflow.nodes.base import BaseNode
from bisheng_langchain.chains.retrieval.retrieval_chain import RetrievalChain
class QARetrieverNode(BaseNode):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Initialize input
self._user_question = self.node_params.get('user_question', '')
self._qa_knowledge_id = self.node_params.get('qa_knowledge_id', [])
self._score = self.node_params.get('score', 0.6)
# Inisialisasiretriever, Running Initialization
self._retriever = None
def _init_retriever(self):
if self._retriever:
return
# Vector database client initialization, currently usingMilvus, more rational use of more generic factory methods
params = {}
params['search_kwargs'] = {'k': 1, 'score_threshold': self._score}
params['search_type'] = 'similarity_score_threshold'
params['collection_name'] = self._qa_knowledge_id # [{"key":"", "label":""}]
params['user_name'] = UserDao.get_user(self.user_id).user_name
params['_is_check_auth'] = False
knowledge_retriever = instantiate_vectorstore(
node_type='MilvusWithPermissionCheck',
class_object=MilvusWithPermissionCheck,
params=params,
)
self._retriever = RetrievalChain(retriever=knowledge_retriever)
def _run(self, unique_id: str):
self._init_retriever()
question = self.get_other_node_variable(self._user_question)
result = self._retriever.invoke({'query': question})
# qa have a result; turn out to bedocument
if result['result']:
# the source documents that store the retrieval results,keyLeft and right plus$As source documentkeyGo to inquiry
self.graph_state.set_variable(self.id, '$retrieved_result$', result['result'][0])
result_str = json.loads(result['result'][0].metadata['extra'])['answer']
else:
result_str = ''
self.graph_state.set_variable(self.id, '$retrieved_result$', None)
return {
'retrieved_result': result_str
}
def parse_log(self, unique_id: str, result: dict) -> Any:
return [[
{
"key": "user_question",
"value": self.get_other_node_variable(self._user_question),
"type": "params"
},
{
"key": "retrieved_result",
"value": result['retrieved_result'],
"type": "params"
}
]]
================================================
FILE: src/backend/bisheng/workflow/nodes/rag/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/nodes/rag/rag.py
================================================
import json
import time
from typing import List, Any
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.documents import Document
from langchain_core.prompts import (ChatPromptTemplate, HumanMessagePromptTemplate,
SystemMessagePromptTemplate)
from langchain_core.runnables import RunnableConfig
from loguru import logger
from bisheng.chat.types import IgnoreException
from bisheng.common.constants.enums.telemetry import ApplicationTypeEnum
from bisheng.core.storage.minio.minio_manager import get_minio_storage_sync
from bisheng.llm.domain.services import LLMService
from bisheng.workflow.callback.event import OutputMsgData, StreamMsgOverData
from bisheng.workflow.callback.llm_callback import LLMNodeCallbackHandler
from bisheng.workflow.common.knowledge import RagUtils
from bisheng.workflow.nodes.prompt_template import PromptTemplateParser
class RagNode(RagUtils):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# analyzingprompt
self._system_prompt = PromptTemplateParser(template=self.node_params['system_prompt'])
self._system_variables = self._system_prompt.extract()
self._user_prompt = PromptTemplateParser(template=self.node_params['user_prompt'])
self._user_variables = self._user_prompt.extract()
self._qa_prompt = None
self._llm = LLMService.get_bisheng_llm_sync(model_id=self.node_params['model_id'],
temperature=self.node_params.get('temperature', 0.3),
app_id=self.workflow_id,
app_name=self.workflow_name,
app_type=ApplicationTypeEnum.WORKFLOW,
user_id=self.user_id)
self._minio_client = get_minio_storage_sync()
# Whether to output the results to the user
self._output_user = self.node_params.get('output_user', False)
self._output_keys = [one.get("key") for one in self.node_params.get('output_user_input', [])]
# Run Log Data
self._log_source_documents = {}
self._log_system_prompt = []
self._log_user_prompt = []
self._log_reasoning_content = {}
self._milvus = None
self._es = None
def _run(self, unique_id: str):
ret = {}
self.init_user_info()
self._log_source_documents = {}
self._log_system_prompt = []
self._log_user_prompt = []
self._log_reasoning_content = {}
self.init_qa_prompt()
self.user_questions = self.init_user_question()
for index, question in enumerate(self.user_questions):
output_key = self._output_keys[index]
if question is None:
question = ''
question_answer = self.rag_one_question(question, output_key, unique_id)
ret[output_key] = question_answer
return ret
def rag_one_question(self, question: str, output_key: str, unique_id: str) -> str:
try:
self.init_multi_retriever()
self.init_rerank_model()
source_documents = self.retrieve_question(question)
except Exception as e:
logger.exception(f'RagNode retrieve_question error: ')
source_documents = [Document(page_content=str(e), metadata={})]
qa_chain = create_stuff_documents_chain(llm=self._llm, prompt=self._qa_prompt)
inputs = {
"context": source_documents,
}
if "question" in self._qa_prompt.input_variables:
inputs["question"] = question
# and one of the reasons thatragIt needs to be traced, so it can't be used universally.llm callbackto return the message. Need to getsource_documentReturn message content after
llm_callback = LLMNodeCallbackHandler(callback=self.callback_manager,
unique_id=unique_id,
node_id=self.id,
node_name=self.name,
output=self._output_user,
output_key=output_key,
cancel_llm_end=True)
result = qa_chain.invoke(inputs, config=RunnableConfig(callbacks=[llm_callback]))
if self._output_user:
self.graph_state.save_context(content=result, msg_sender='AI')
if llm_callback.output_len == 0:
self.callback_manager.on_output_msg(
OutputMsgData(node_id=self.id,
name=self.name,
msg=result,
unique_id=unique_id,
output_key=output_key,
source_documents=source_documents))
else:
# If there is a streaming output, the streaming end event is triggered, Because of the need tosource_documentSo do a streaming end event here
self.callback_manager.on_stream_over(StreamMsgOverData(
node_id=self.id,
name=self.name,
msg=result,
reasoning_content=llm_callback.reasoning_content,
unique_id=unique_id,
source_documents=source_documents,
output_key=output_key,
))
self._log_reasoning_content[output_key] = llm_callback.reasoning_content
self._log_source_documents[output_key] = source_documents
return result
def parse_log(self, unique_id: str, result: dict) -> Any:
ret = []
index = 0
user_question_list = self.init_user_question()
# Determine if the search results exceed a certain length, The reason iswsSending a message that exceeds a certain length will result in an error
source_documents = [[d.page_content for d in one] for one in self._log_source_documents.values()]
tmp_retrieved_type = 'variable'
tmp_retrieved_result = json.dumps(source_documents, indent=2, ensure_ascii=False)
if len(tmp_retrieved_result.encode('utf-8')) >= 50 * 1024: # Lebih dari50kbLog data storage file
tmp_retrieved_type = 'file'
tmp_object_name = f'/workflow/source_document/{time.time()}.txt'
self._minio_client.put_object_tmp_sync(tmp_object_name, tmp_retrieved_result.encode('utf-8'))
tmp_retrieved_result = self._minio_client.get_share_link_sync(tmp_object_name,
self._minio_client.tmp_bucket)
for key, val in result.items():
if tmp_retrieved_type != 'file':
tmp_retrieved_result = json.dumps([one.page_content for one in self._log_source_documents[key]],
indent=2, ensure_ascii=False)
one_ret = [
{'key': f'{self.id}.user_question', 'value': user_question_list[index], "type": "variable"},
{'key': f'{self.id}.retrieved_result', 'value': tmp_retrieved_result, "type": tmp_retrieved_type},
{'key': 'system_prompt', 'value': self._log_system_prompt[0], "type": "params"},
{'key': 'user_prompt', 'value': self._log_user_prompt[0], "type": "params"},
]
if self._log_reasoning_content[key]:
one_ret.append({'key': 'Thinking about content', 'value': self._log_reasoning_content[key], "type": "params"})
one_ret.append({'key': f'{self.id}.{key}', 'value': val, 'type': 'variable'})
index += 1
ret.append(one_ret)
return ret
def init_user_question(self) -> List[str]:
# Convert all user questions to strings by default
ret = []
for one in self.node_params['user_question']:
ret.append(f"{self.get_other_node_variable(one)}")
return ret
def init_qa_prompt(self):
variable_map = {}
for one in self._user_variables:
if one == f'{self.id}.user_question':
variable_map[one] = '$$question$$'
elif one == f'{self.id}.retrieved_result':
variable_map[one] = '$$context$$'
else:
variable_map[one] = self.get_other_node_variable(one)
if variable_map.get(f'{self.id}.retrieved_result') is None:
raise IgnoreException('User prompts must contain retrieved_result Variables')
user_prompt = self._user_prompt.format(variable_map)
log_user_prompt = user_prompt.replace('$$question$$', '{user_question}').replace('$$context$$',
'{retrieved_result}')
user_prompt = (user_prompt.replace('{', '{{').replace('}', '}}')
.replace('$$question$$', '{question}').replace('$$context$$', '{context}'))
self._log_user_prompt.append(log_user_prompt)
variable_map = {}
for one in self._system_variables:
variable_map[one] = self.get_other_node_variable(one)
system_prompt = self._system_prompt.format(variable_map)
system_prompt.replace('{', '{{').replace('}', '}}')
self._log_system_prompt.append(system_prompt)
messages_general = [
SystemMessagePromptTemplate.from_template(system_prompt),
HumanMessagePromptTemplate.from_template(user_prompt),
]
self._qa_prompt = ChatPromptTemplate.from_messages(messages_general)
================================================
FILE: src/backend/bisheng/workflow/nodes/report/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/nodes/report/docx_replace.py
================================================
import re
from io import BytesIO
from typing import List, Dict, Any, IO
from docx import Document
from docx.enum.style import WD_STYLE_TYPE
from docx.oxml import OxmlElement
from docx.shared import Pt, Inches, RGBColor
from docx.table import _Cell
from docx.text.paragraph import Paragraph
class DocxReplacer:
"""
Docx File Content Replacement Tool
Supports complex format placeholder replacement, including text, tables, images, titles, etc.
"""
def __init__(self, template_path: str | IO[bytes]):
self.template_path = template_path
self.doc = Document(template_path)
self.placeholder_pattern = re.compile(r'\{\{([^}]+)\}\}')
self._init_style()
def check_style(self, style_name: str, **kwargs):
all_style = self.doc.styles
if style_name not in all_style:
style = self.doc.styles.add_style(style_name, WD_STYLE_TYPE.PARAGRAPH)
font = style.font
for key, value in kwargs.items():
setattr(font, key, value)
else:
style = all_style[style_name]
return style
def _init_style(self):
self.check_style("Heading 1", size=304800)
self.check_style("Heading 2", size=254000)
self.check_style("Heading 3", size=203200)
self.check_style("Heading 4", size=177800)
self.check_style("Heading 5", size=152400)
self.check_style("Heading 6", bold=True)
def replace_and_save(self, variables: Dict[str, List[Dict[str, Any]]], output_path: str):
"""
Replace the placeholders and save the document.
Args:
Variables: A dictionary of variables, with the format of {"var_name": [{"type": "text", "content": "..."}]}
Output_path: The path of the output file
"""
self._process_paragraphs(self.doc.paragraphs, variables)
for table in self.doc.tables:
self._process_table(table, variables)
for section in self.doc.sections:
if section.header:
self._process_paragraphs(section.header.paragraphs, variables)
if section.footer:
self._process_paragraphs(section.footer.paragraphs, variables)
self.doc.save(output_path)
def _process_table(self, table, variables: Dict[str, List[Dict[str, Any]]]):
for row in table.rows:
for cell in row.cells:
self._process_paragraphs(cell.paragraphs, variables)
for nested_table in cell.tables:
self._process_table(nested_table, variables)
def _process_paragraphs(self, paragraphs: List[Paragraph], variables: Dict[str, List[Dict[str, Any]]]):
i = 0
while i < len(paragraphs):
paragraph = paragraphs[i]
text = paragraph.text
matches = list(self.placeholder_pattern.finditer(text))
if matches:
insert_index = self._get_paragraph_index(paragraph)
self._replace_paragraph_placeholders(paragraph, matches, variables, insert_index)
i += 1
def _get_paragraph_index(self, paragraph: Paragraph) -> int:
parent = paragraph._element.getparent()
return parent.index(paragraph._element)
def _replace_paragraph_placeholders(
self,
paragraph: Paragraph,
matches: List[re.Match],
variables: Dict[str, List[Dict[str, Any]]],
insert_index: int
):
parent = paragraph._element.getparent()
text = paragraph.text
segments = []
last_end = 0
for match in matches:
var_name = match.group(1)
start, end = match.span()
if start > last_end:
segments.append({
'type': 'text_segment',
'content': text[last_end:start],
'paragraph': paragraph
})
if var_name in variables:
segments.append({
'type': 'variable',
'content': variables[var_name],
'paragraph': paragraph
})
else:
segments.append({
'type': 'text_segment',
'content': match.group(0),
'paragraph': paragraph
})
last_end = end
if last_end < len(text):
segments.append({
'type': 'text_segment',
'content': text[last_end:],
'paragraph': paragraph
})
original_format = self._extract_paragraph_format(paragraph)
original_run_format = self._extract_run_format(paragraph.runs[0] if paragraph.runs else None)
parent.remove(paragraph._element)
current_insert_index = insert_index
current_paragraph = None
for segment in segments:
if segment['type'] == 'text_segment':
if current_paragraph is None:
current_paragraph = self._insert_paragraph_at_index(
parent, current_insert_index, original_format
)
current_insert_index += 1
run = current_paragraph.add_run(segment['content'])
self._apply_run_format(run, original_run_format)
elif segment['type'] == 'variable':
for item in segment['content']:
item_type = item.get('type')
if item_type == 'text':
if current_paragraph is None:
current_paragraph = self._insert_paragraph_at_index(
parent, current_insert_index, original_format
)
current_insert_index += 1
run = current_paragraph.add_run(item['content'])
self._apply_run_format(run, item)
elif item_type in ['table', 'image', 'heading']:
if current_paragraph is not None and current_paragraph.text.strip():
current_paragraph = None
if item_type == 'table':
self._insert_table_at_index(parent, current_insert_index, item)
elif item_type == 'image':
self._insert_image_at_index(parent, current_insert_index, item, original_format)
elif item_type == 'heading':
self._insert_heading_at_index(parent, current_insert_index, item)
current_insert_index += 1
current_paragraph = None
def _extract_paragraph_format(self, paragraph: Paragraph) -> Dict[str, Any]:
return {
'alignment': paragraph.alignment,
'left_indent': paragraph.paragraph_format.left_indent,
'right_indent': paragraph.paragraph_format.right_indent,
'first_line_indent': paragraph.paragraph_format.first_line_indent,
'space_before': paragraph.paragraph_format.space_before,
'space_after': paragraph.paragraph_format.space_after,
'line_spacing': paragraph.paragraph_format.line_spacing,
}
def _extract_run_format(self, run) -> Dict[str, Any]:
if run is None:
return {}
return {
'bold': run.bold,
'italic': run.italic,
'underline': run.underline,
'font_name': run.font.name,
'font_size': run.font.size,
'font_color': run.font.color.rgb if run.font.color.rgb else None,
}
def _insert_paragraph_at_index(self, parent, index: int, format_dict: Dict[str, Any]) -> Paragraph:
p_element = OxmlElement('w:p')
parent.insert(index, p_element)
paragraph = Paragraph(p_element, self.doc)
# 应用格式
if format_dict.get('alignment') is not None:
paragraph.alignment = format_dict['alignment']
if format_dict.get('left_indent') is not None:
paragraph.paragraph_format.left_indent = format_dict['left_indent']
if format_dict.get('right_indent') is not None:
paragraph.paragraph_format.right_indent = format_dict['right_indent']
if format_dict.get('first_line_indent') is not None:
paragraph.paragraph_format.first_line_indent = format_dict['first_line_indent']
if format_dict.get('space_before') is not None:
paragraph.paragraph_format.space_before = format_dict['space_before']
if format_dict.get('space_after') is not None:
paragraph.paragraph_format.space_after = format_dict['space_after']
if format_dict.get('line_spacing') is not None:
paragraph.paragraph_format.line_spacing = format_dict['line_spacing']
return paragraph
def _apply_run_format(self, run, format_data: Dict[str, Any]):
if format_data.get('bold'):
run.bold = True
if format_data.get('italic'):
run.italic = True
if format_data.get('underline'):
run.underline = True
if format_data.get('font_size'):
if isinstance(format_data['font_size'], int):
run.font.size = Pt(format_data['font_size'])
else:
run.font.size = format_data['font_size']
if format_data.get('font_name'):
run.font.name = format_data['font_name']
if format_data.get('color'):
if isinstance(format_data['color'], tuple) and len(format_data['color']) == 3:
run.font.color.rgb = RGBColor(*format_data['color'])
if format_data.get('font_color'):
run.font.color.rgb = format_data['font_color']
def _insert_table_at_index(self, parent, index: int, item: Dict[str, Any]):
data = item['content']
rows = len(data)
cols = len(data[0]) if rows > 0 else 0
if rows == 0 or cols == 0:
return
table = self.doc.add_table(rows=0, cols=cols)
if item.get('style'):
table.style = item['style']
for row_data in data:
row = table.add_row()
for col_idx, cell_content in enumerate(row_data):
if col_idx < len(row.cells):
cell = row.cells[col_idx]
self._fill_cell(cell, cell_content)
tbl_element = table._element
parent.remove(tbl_element)
parent.insert(index, tbl_element)
def _fill_cell(self, cell: _Cell, cell_content: Any):
"""
Filling Cell Content
Cell content format:
1. Single element (dictionary): {"type": "text", "content": "..."}
2. Composite elements (list): [{"type": "text", ...}, {"type": "image", ...}]
Args:
cell: The cell object
cell_content: The cell content, a dictionary or a list
"""
if cell.paragraphs:
default_paragraph = cell.paragraphs[0]
for run in default_paragraph.runs:
run.text = ''
else:
default_paragraph = cell.add_paragraph()
if isinstance(cell_content, dict):
if 'type' not in cell_content or 'content' not in cell_content:
raise ValueError(
f"The cell element must contain the `type` and `content` fields, but got:{cell_content}")
cell_content = [cell_content]
elif isinstance(cell_content, list):
for element in cell_content:
if not isinstance(element, dict) or 'type' not in element or 'content' not in element:
raise ValueError(
f"The cell element must contain the `type` and `content` fields, but got:{element}")
else:
raise ValueError(f"Not supported data type:{type(cell_content)}")
current_paragraph = default_paragraph
for element in cell_content:
element_type = element['type']
if element_type == 'text':
run = current_paragraph.add_run(element['content'])
self._apply_run_format(run, element)
elif element_type == 'image':
if current_paragraph.text.strip():
current_paragraph = cell.add_paragraph()
self._add_image_to_paragraph(current_paragraph, element)
current_paragraph = cell.add_paragraph()
elif element_type == 'paragraph':
current_paragraph = cell.add_paragraph()
if element.get('alignment'):
current_paragraph.alignment = element['alignment']
if isinstance(element['content'], str):
run = current_paragraph.add_run(element['content'])
self._apply_run_format(run, element)
elif isinstance(element['content'], list):
for text_item in element['content']:
if not isinstance(text_item, dict) or 'type' not in text_item:
raise ValueError(f"Paragraph content elements must include a `type` field; got:{text_item}")
if text_item['type'] == 'text':
run = current_paragraph.add_run(text_item['content'])
self._apply_run_format(run, text_item)
if element.get('alignment'):
for cell_paragraph in cell.paragraphs:
cell_paragraph.alignment = element['alignment']
def _add_image_to_paragraph(self, paragraph: Paragraph, image_data: Dict[str, Any]):
run = paragraph.add_run()
try:
width = Inches(image_data.get('width', 2))
height = Inches(image_data.get('height')) if image_data.get('height') else None
if isinstance(image_data['content'], str):
# local file path
if height:
run.add_picture(image_data['content'], width=width, height=height)
else:
run.add_picture(image_data['content'], width=width)
elif isinstance(image_data['content'], bytes):
# bytes data
image_stream = BytesIO(image_data['content'])
if height:
run.add_picture(image_stream, width=width, height=height)
else:
run.add_picture(image_stream, width=width)
except Exception as e:
paragraph.add_run(f"Image add failed: {str(e)}]")
# set alignment
if image_data.get('alignment'):
paragraph.alignment = image_data['alignment']
def _insert_image_at_index(self, parent, index: int, item: Dict[str, Any], paragraph_format: Dict[str, Any]):
paragraph = self._insert_paragraph_at_index(parent, index, paragraph_format)
self._add_image_to_paragraph(paragraph, item)
def _insert_heading_at_index(self, parent, index: int, item: Dict[str, Any]):
p_element = OxmlElement('w:p')
parent.insert(index, p_element)
paragraph = Paragraph(p_element, self.doc)
level = item.get('level', 1)
paragraph.style = f'Heading {level}'
run = paragraph.add_run(item['content'])
self._apply_run_format(run, item)
def extract_variables(self) -> List[str]:
variables = []
seen = set()
for paragraph in self.doc.paragraphs:
vars_in_paragraph = self._extract_vars_from_text(paragraph.text)
for var in vars_in_paragraph:
if var not in seen:
variables.append(var)
seen.add(var)
for table in self.doc.tables:
vars_in_table = self._extract_vars_from_table(table)
for var in vars_in_table:
if var not in seen:
variables.append(var)
seen.add(var)
for section in self.doc.sections:
if section.header:
for paragraph in section.header.paragraphs:
vars_in_paragraph = self._extract_vars_from_text(paragraph.text)
for var in vars_in_paragraph:
if var not in seen:
variables.append(var)
seen.add(var)
if section.footer:
for paragraph in section.footer.paragraphs:
vars_in_paragraph = self._extract_vars_from_text(paragraph.text)
for var in vars_in_paragraph:
if var not in seen:
variables.append(var)
seen.add(var)
return variables
def _extract_vars_from_text(self, text: str) -> List[str]:
matches = self.placeholder_pattern.findall(text)
return matches
def _extract_vars_from_table(self, table) -> List[str]:
variables = []
seen = set()
for row in table.rows:
for cell in row.cells:
for paragraph in cell.paragraphs:
vars_in_paragraph = self._extract_vars_from_text(paragraph.text)
for var in vars_in_paragraph:
if var not in seen:
variables.append(var)
seen.add(var)
for nested_table in cell.tables:
nested_vars = self._extract_vars_from_table(nested_table)
for var in nested_vars:
if var not in seen:
variables.append(var)
seen.add(var)
return variables
================================================
FILE: src/backend/bisheng/workflow/nodes/report/report.py
================================================
import io
import tempfile
from uuid import uuid4
from loguru import logger
from bisheng.core.storage.minio.minio_manager import get_minio_storage_sync
from bisheng.utils import generate_uuid
from bisheng.workflow.callback.event import OutputMsgData
from bisheng.workflow.nodes.base import BaseNode
from bisheng.workflow.nodes.report.docx_replace import DocxReplacer
from bisheng.workflow.nodes.report.text_classification import TextClassificationReport
class ReportNode(BaseNode):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._report_info = self.node_params["report_info"]
self._version_key = self._report_info["version_key"].split("_")[0]
self._object_name = f"workflow/report/{self._version_key}.docx"
self._file_name = self._report_info["file_name"] if self._report_info["file_name"] else "tmp_report.docx"
if not self._file_name.endswith(".docx"):
self._file_name += ".docx"
self._minio_client = get_minio_storage_sync()
def _run(self, unique_id: str):
"""Master Execution Process"""
with tempfile.TemporaryDirectory() as temp_dir:
logger.debug("=== Download report template ===")
template_content = self._download_template()
docx_replacer = DocxReplacer(io.BytesIO(template_content))
template_variables = docx_replacer.extract_variables()
if not template_variables:
logger.debug("=== Report template not found variables ===")
finally_document = template_content
else:
logger.debug("=== Report template found variables ===")
# Get workflow variables
logger.debug("=== Get workflow variables ===")
workflow_variables = {}
text_classification = TextClassificationReport(temp_dir)
for one_variables in template_variables:
variable_value = self.get_other_node_variable(one_variables)
if type(variable_value) != str:
variable_value = str(variable_value)
variable_value = text_classification.get_all_classified_data(variable_value)
workflow_variables[one_variables] = variable_value
logger.debug("=== replace report template variables ===")
output_docx_path = f"{temp_dir}/{generate_uuid()}.docx"
docx_replacer.replace_and_save(workflow_variables, output_docx_path)
with open(output_docx_path, "rb") as f:
finally_document = f.read()
# SAVE AND SHARE
logger.info("=== Walking Tongs7: Save and share documents ===")
share_url = self._save_and_share_document(finally_document)
# Send Output Message
self._send_output_message(unique_id, share_url)
logger.info("=== Report Generation Complete ===")
def _download_template(self) -> bytes:
"""Download sample"""
if not self._minio_client.object_exists_sync(self._minio_client.bucket, self._object_name):
raise Exception(f"Template file does not exists!: {self._object_name}")
template_content = self._minio_client.get_object_sync(self._minio_client.bucket, self._object_name)
logger.info(f"Template downloaded successfully, size: {len(template_content)} byte")
return template_content
def _save_and_share_document(self, document_content: bytes) -> str:
"""Save the document and get a share link"""
# Generate unique file path
tmp_object_name = f"workflow/report/{uuid4().hex}/{self._file_name}"
# Uploaded toMinIO
self._minio_client.put_object_tmp_sync(tmp_object_name, document_content)
# Get share link
share_url = self._minio_client.get_share_link_sync(tmp_object_name, self._minio_client.tmp_bucket)
logger.info(f"Document saved successfully: {tmp_object_name}")
logger.info(f"Share Links: {share_url}")
return share_url
def _send_output_message(self, unique_id: str, share_url: str):
"""Send Output Message"""
self.callback_manager.on_output_msg(
OutputMsgData(
unique_id=unique_id,
node_id=self.id,
name=self.name,
msg="",
files=[{"path": share_url, "name": self._file_name}],
output_key="",
)
)
================================================
FILE: src/backend/bisheng/workflow/nodes/report/text_classification.py
================================================
# Convert the string to the format required by the docx replacement tool.
import os
import re
import tempfile
from dataclasses import dataclass
from enum import Enum
from typing import List, Dict, Tuple, Any
from urllib.parse import urlparse, unquote
from uuid import uuid4
import pandas as pd
import requests
from charset_normalizer import detect
from docx.enum.text import WD_ALIGN_PARAGRAPH
from loguru import logger
from openpyxl import load_workbook
from bisheng.core.storage.minio.minio_manager import get_minio_storage_sync
from bisheng.utils import md5_hash
class ResourceType(Enum):
"""Resource Type Enumeration"""
IMAGE = "image"
TABLE = "table"
TEXT = "text"
HEADING = "heading"
BOLD_TEXT = "bold_text"
@dataclass
class MatchPattern:
"""Match Pattern Definition"""
name: str
resource_type: ResourceType
pattern: str
flags: int
handler_method: str
# priority by order in the list
Patterns = [
MatchPattern(
name="markdown_table",
resource_type=ResourceType.TABLE,
pattern=r"(\s*\|[^\r\n]*\|[^\r\n]*(?:\r?\n\s*\|[^\r\n]*\|[^\r\n]*)+)",
flags=re.MULTILINE,
handler_method="_handle_markdown_table",
),
MatchPattern(
name="http_excel_csv",
resource_type=ResourceType.TABLE,
pattern=r"(https?://[^\s\u4e00-\u9fff]*\.(?:xlsx?|csv)(?:\?[^\s\u4e00-\u9fff]*)?)",
flags=re.IGNORECASE,
handler_method="_handle_http_excel_csv",
),
MatchPattern(
name="local_excel_csv",
resource_type=ResourceType.TABLE,
pattern=r"([^\s]*[/\\][^\s]*\.(?:xlsx?|csv))",
flags=re.IGNORECASE,
handler_method="_handle_http_excel_csv",
),
MatchPattern(
name="markdown_image",
resource_type=ResourceType.IMAGE,
pattern=r"!\[([^\]]*)\]\(([^)]+\.(?:png|jpg|jpeg|bmp|gif|webp)(?:\?[^)]*)?)\)",
flags=re.IGNORECASE,
handler_method="_handle_http_image",
),
MatchPattern(
name="http_image",
resource_type=ResourceType.IMAGE,
pattern=r"""
(?: # 非捕获组开始
(?: # URL协议
https?:// # http或https
| # 或
// # 协议相对URL
| # 或
file:// # 文件协议
)? # 协议可选
)? # 整个协议部分可选
(?: # 域名或路径
(?: # 域名部分
(?:www\.)? # 可选的www
[a-z0-9][a-z0-9-]* # 域名主体
(?:\.[a-z0-9]+)+ # 域名后缀
) # 或
| # 或
(?: # 本地路径
(?:[a-z]:)? # Windows驱动器(可选)
[\\/]? # 可选的路径分隔符
(?:[^<>()\[\]"'\s]+[\\/])* # 路径部分
)
)
[^<>()\[\]"\'\s]*? # 文件名(不含扩展名)
\. # 扩展名前的点
(?:png|jpg|jpeg|gif|bmp|webp|tif) # 图片扩展名
(?: # 可选的查询字符串
\? # 问号
[^<>()\[\]"'\s]* # 查询参数
)? # 查询字符串可选
(?: # 可选的片段标识符
\# # 井号
[^<>()\[\]"'\s]* # 片段
)? # 片段可选
""",
flags=re.IGNORECASE | re.VERBOSE,
handler_method="_handle_http_image",
),
MatchPattern(
name="heading",
resource_type=ResourceType.HEADING,
pattern=r'^(#{1,6})\s+(.+?)(?:\s+#+)?\s*$',
flags=re.IGNORECASE | re.MULTILINE,
handler_method="_handle_heading",
),
MatchPattern(
name="bold_text",
resource_type=ResourceType.BOLD_TEXT,
# 严格正则表达式
# (? List[Dict]:
string_data = [{"type": "text", "content": string_data}]
for pattern in Patterns:
handle_method = pattern.handler_method
handler = getattr(self, handle_method, None)
if not handler:
logger.warning(f"Handler method {handle_method} not found.")
continue
string_data = handler(pattern, string_data)
return string_data
def _download_file(self, file_url: str) -> str:
# Set request headers to simulate browser access
file_url_md5 = md5_hash(file_url)
if self.file_cache.get(file_url_md5):
return self.file_cache.get(file_url_md5)
url_obj = urlparse(file_url)
filename = unquote(url_obj.path.split('/')[-1])
if file_url.startswith(("https", "http")):
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 = requests.get(file_url, headers=headers, timeout=30, verify=False)
response.raise_for_status()
# Get filename
# accordingContent-TypeInferred extension
content_type = response.headers.get("Content-Type", "").lower()
if "image/png" in content_type:
filename = f"{uuid4().hex}.png"
elif "image/jpeg" in content_type or "image/jpg" in content_type:
filename = f"{uuid4().hex}.jpg"
elif "image/bmp" in content_type:
filename = f"{uuid4().hex}.bmp"
else:
content_disposition = response.headers.get('Content-Disposition')
if content_disposition:
filename = unquote(content_disposition).split('filename=')[-1].strip("\"'")
file_ext = os.path.splitext(filename)[1].lower()
filename = f"{uuid4().hex}{file_ext}"
file_content = response.content
else:
# maybe minio file path
minio_client = get_minio_storage_sync()
if not file_url.lstrip("/").startswith((minio_client.bucket, minio_client.tmp_bucket)):
raise ValueError(f"Invalid minio path {file_url}")
path_parts = url_obj.path.lstrip("/").split('/', 1)
if len(path_parts) != 2:
raise ValueError(f"Invalid minio path {file_url}")
bucket_name, object_name = path_parts
# Call Synchronized minio Method download
object_name = unquote(object_name)
file_content = minio_client.get_object_sync(bucket_name, object_name)
# Creating temp file
temp_file = os.path.join(self.static_resource_path, filename)
with open(temp_file, "wb") as f:
f.write(file_content)
self.file_cache[file_url_md5] = temp_file
return temp_file
def _handle_bold_text(self, pattern: MatchPattern, string_data: List[Dict]):
return self._base_handle_string_data(pattern, string_data, self._parse_bold_text_data)
def _parse_bold_text_data(self, bold_text_str: str) -> Dict:
# Remove the ** or __ markers
content = re.sub(r'(? Dict:
heading_level, heading_text = heading_str.split(" ", 1)
level = min(len(heading_level.strip()), 6)
return {"type": "heading", "content": heading_text, "level": level}
def _handle_http_image(self, pattern: MatchPattern, string_data: List[Dict]):
# Placeholder for actual implementation
return self._base_handle_string_data(pattern, string_data, self._parse_http_image_data)
def _parse_http_image_data(self, image_str: str) -> Dict:
# image_str:  or http://example.com/image.png or /local/path/image.png
try:
if image_str.startswith("[1].rstrip(")")
local_file_path = self._download_file(new_image_str)
else:
local_file_path = self._download_file(image_str)
return {
"type": "image",
"content": local_file_path
}
except Exception as e:
logger.error(f"Failed to parse http image data: {str(e)}")
return {"type": "text", "content": image_str}
def _handle_http_excel_csv(self, pattern: MatchPattern, string_data: List[Dict]):
# Placeholder for actual implementation
return self._base_handle_string_data(pattern, string_data, self._parse_http_table_data)
def _parse_http_table_data(self, table_url: str) -> Dict:
# Placeholder for actual implementation
try:
if table_url.startswith(("http", "https")):
local_file_path = self._download_file(table_url)
else:
local_file_path = table_url
if local_file_path.endswith(".xlsx"):
table_data, table_alignment = self._parse_excel_data(local_file_path)
elif local_file_path.endswith(".csv"):
table_data, table_alignment = self._parse_csv_data(local_file_path)
else:
raise ValueError(f"Unsupported file format for table parsing: {local_file_path}")
return self._handle_table_data_to_dict(table_data, table_alignment)
except Exception as e:
logger.error(f"Failed to parse http table data: {str(e)}")
return {"type": "text", "content": table_url}
@staticmethod
def _convert_docx_alignment(alignment: str) -> Any:
if alignment == "left":
return WD_ALIGN_PARAGRAPH.LEFT
elif alignment == "center":
return WD_ALIGN_PARAGRAPH.CENTER
elif alignment == "right":
return WD_ALIGN_PARAGRAPH.RIGHT
else:
return WD_ALIGN_PARAGRAPH.LEFT
def _handle_table_data_to_dict(self, table_data: List[List[str]], table_alignment: List[str]) -> Dict:
# Convert table data and alignment into a dictionary format
content = []
for row in table_data:
one_row_data = []
for index, cell in enumerate(row):
# convert each cell to text type with image alignment
markdown_image_pattern = Patterns[3] # markdown_image pattern
http_image_pattern = Patterns[4] # http_image pattern
bold_text_pattern = Patterns[6] # bold_text pattern
cell_data = getattr(self, markdown_image_pattern.handler_method)(markdown_image_pattern,
[{"type": "text", "content": cell}])
cell_data = getattr(self, http_image_pattern.handler_method)(http_image_pattern, cell_data)
cell_data = getattr(self, bold_text_pattern.handler_method)(bold_text_pattern, cell_data)
cell_data[0]["alignment"] = self._convert_docx_alignment(
table_alignment[index] if index < len(table_alignment) else "left")
one_row_data.append(cell_data)
content.append(one_row_data)
return {"type": "table", "content": content}
@staticmethod
def _parse_excel_data(file_path: str) -> Tuple[List[List[str]], List[str]]:
# Use openpyxl read docx
workbook = load_workbook(file_path, data_only=True) # data_only=TrueGet Calculated Value
# Using the first worksheet
worksheet = workbook.active
table_data = []
max_col = 0
# Read all rows
for row in worksheet.iter_rows(values_only=True):
# Skip completely blank rows
if all(cell is None or str(cell).strip() == "" for cell in row):
continue
row_data = [str(cell) if cell is not None else "" for cell in row]
table_data.append(row_data)
max_col = max(max_col, len(row_data))
# Make sure all rows have the same number of columns
for row in table_data:
while len(row) < max_col:
row.append("")
# Generate alignment information (default left alignment)
alignments = ["left"] * max_col
logger.debug(f"ExcelFile parsed successfully: {len(table_data)}Parade x {max_col}column")
return table_data, alignments
@staticmethod
def _parse_csv_data(file_path: str) -> Tuple[List[List[str]], List[str]]:
# Auto-Detect Encoding
with open(file_path, 'rb') as f:
raw_data = f.read()
encoding_info = detect(raw_data)
encoding = encoding_info['encoding'] or 'utf-8'
# Use pandas read outCSVto better handle various formats
df = pd.read_csv(file_path, encoding=encoding)
# Convert to Tabular Data Format
table_data = []
# Add header
headers = [str(col) for col in df.columns]
table_data.append(headers)
# Add Data Row
for _, row in df.iterrows():
row_data = [str(cell) if pd.notna(cell) else "" for cell in row]
table_data.append(row_data)
# Generate alignment information (default left alignment)
alignments = ["left"] * len(headers)
logger.debug(f"CSVFile parsed successfully: {len(table_data)}Parade x {len(headers)}column")
return table_data, alignments
def _handle_markdown_table(self, pattern: MatchPattern, string_data: List[Dict]):
return self._base_handle_string_data(pattern, string_data, self._parse_table_data)
@staticmethod
def _base_handle_string_data(pattern: MatchPattern, string_data: List[Dict], parse_method) -> List[Dict]:
new_string_data = []
for one in string_data:
if one["type"] != "text" or not one["content"]:
new_string_data.append(one)
continue
content = one["content"]
match_flag = False
for one_match in re.finditer(pattern.pattern, one["content"], flags=pattern.flags):
match_flag = True
raw_text = one_match.group(0)
before, end = content.split(raw_text, 1)
new_string_data.append({
"type": "text",
"content": before
})
new_string_data.append(parse_method(raw_text))
content = end
if not match_flag:
new_string_data.append(one)
continue
if content:
new_string_data.append({
"type": "text",
"content": content
})
return new_string_data
def _parse_table_data(self, table_content: str) -> Dict:
"""Parse the table data while working with the in the table string"""
try:
# Analyze the table structure first
table_data, table_alignment = self._parse_markdown_table_from_content(table_content)
return self._handle_table_data_to_dict(table_data, table_alignment)
except Exception as e:
logger.error(f"Failed to parse table data: {str(e)}")
return {"type": "text", "content": table_content}
def _parse_markdown_table_from_content(self, table_content: str) -> Tuple[List[List[str]], List[str]]:
"""
Parsing from file contentsMarkdownTable Filter
Args:
table_content: table content in File contents
Returns:
tuple: (Table Data, Alignment Info List)
"""
# Keep all rows, including empty rows - Fully preserving the original table structure
lines = [line.strip() for line in table_content.strip().split("\n")]
table_rows = []
table_alignments = []
separator_found = False
for line in lines:
# Skip completely empty rows, but leave empty table rows with only vertical lines
if not line:
continue
# Check if it is a delimiter line
if self._is_table_separator_line(line):
table_alignments = self._parse_table_alignments(line)
separator_found = True
continue
# Parse Data Rows - Keep all table rows, including empty rows
cells = self._parse_table_row(line)
# Remove if cells Condition, leave empty table rows
table_rows.append(cells)
# Use default alignment if no separator found
if not separator_found and table_rows:
table_alignments = ["left"] * len(table_rows[0])
# Make sure all rows have the same number of columns
if table_rows:
max_cols = max(len(row) for row in table_rows)
for row in table_rows:
while len(row) < max_cols:
row.append("")
# Make sure the number of aligned messages matches the number of columns
while len(table_alignments) < max_cols:
table_alignments.append("left")
table_alignments = table_alignments[:max_cols]
logger.debug(
f"Successfully parsed table in content, size: {len(table_rows)}Parade x {len(table_alignments)}column")
return table_rows, table_alignments
@staticmethod
def _is_table_separator_line(line: str) -> bool:
"""Check if yesMarkdownTable Separator Row"""
content = line.strip().strip("|").strip()
if not content:
return False
cells = [cell.strip() for cell in content.split("|")]
# At least one cell must contain a delimiter character (-OR:)
has_separator_chars = False
for cell in cells:
if not cell:
continue
# Check for delimiter characters
if '-' in cell or ':' in cell:
has_separator_chars = True
# Check for anything else after removing the separator character
clean_cell = cell.replace("-", "").replace(":", "").strip()
if clean_cell:
return False
# Only lines containing delimiter characters can be considered delimiter lines
return has_separator_chars
@staticmethod
def _parse_table_alignments(separator_line: str) -> list:
"""Parse column alignment from delimiter rows"""
alignments = []
content = separator_line.strip().strip("|").strip()
cells = [cell.strip() for cell in content.split("|")]
for cell in cells:
if not cell:
alignments.append("left")
continue
if cell.startswith(":") and cell.endswith(":"):
alignments.append("center")
elif cell.endswith(":"):
alignments.append("right")
else:
alignments.append("left")
return alignments
@staticmethod
def _parse_table_row(line: str) -> list:
"""Parse Table Rows"""
content = line.strip()
if content.startswith("|"):
content = content[1:]
if content.endswith("|"):
content = content[:-1]
cells = []
current_cell = ""
escaped = False
for char in content:
if escaped:
current_cell += char
escaped = False
elif char == "\\":
escaped = True
current_cell += char
elif char == "|":
cells.append(current_cell.strip())
current_cell = ""
else:
current_cell += char
# Always add the last cell to ensure empty table rows are also parsed correctly
cells.append(current_cell.strip())
return cells
================================================
FILE: src/backend/bisheng/workflow/nodes/start/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/nodes/start/start.py
================================================
import datetime
import json
from typing import Any, Dict
from langchain.memory import ConversationBufferWindowMemory
from bisheng.chat.types import IgnoreException
from bisheng.database.models.group import GroupDao
from bisheng.database.models.role import RoleDao
from bisheng.database.models.user_group import UserGroupDao
from bisheng.user.domain.models.user import UserDao
from bisheng.user.domain.models.user_role import UserRoleDao
from bisheng.workflow.callback.event import GuideQuestionData, GuideWordData
from bisheng.workflow.nodes.base import BaseNode
class StartNode(BaseNode):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Initialize Current Time
self.node_params['current_time'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
# Initialize chat history
self.graph_state.history_memory = ConversationBufferWindowMemory(
k=self.node_params.get('chat_history', 10))
self._user_info = None
def _run(self, unique_id: str) -> Dict[str, Any]:
if self._user_info is None and self.user_id:
user_db = UserDao.get_user(int(self.user_id))
user_group = UserGroupDao.get_user_group(int(self.user_id))
groups = GroupDao.get_group_by_ids([group.group_id for group in user_group])
group_dict = {group.id: group.group_name for group in groups}
user_role = UserRoleDao.get_user_roles(int(self.user_id))
roles = RoleDao.get_role_by_ids([role.role_id for role in user_role])
user_roles = []
for one in roles:
if one.group_id not in group_dict.keys():
continue
user_roles.append(f"{group_dict[one.group_id]}-{one.role_name}")
if user_db:
self._user_info = json.dumps({
"user_name": user_db.user_name,
"user_group": list(group_dict.values()),
"user_role": user_roles,
}, ensure_ascii=False, indent=2)
if self.node_params['guide_word']:
self.callback_manager.on_guide_word(
data=GuideWordData(node_id=self.id, name=self.name, unique_id=unique_id,
guide_word=self.node_params['guide_word']))
if self.node_params['guide_question']:
self.callback_manager.on_guide_question(
data=GuideQuestionData(node_id=self.id, name=self.name, unique_id=unique_id,
guide_question=self.node_params['guide_question']))
if not self.node_data.v:
raise IgnoreException(f'{self.name} -- workflow node is update')
# convert preset_question to dict
new_preset_question = {}
for one in self.node_params['preset_question']:
new_preset_question[one['key']] = one['value']
# convert custom vars to dict
custom_vars = {}
for one in self.node_params.get('custom_variables', []):
custom_vars[one['key']] = one['value']
return {
'current_time': self.node_params['current_time'],
'chat_history': '',
'preset_question': new_preset_question,
'user_info': self._user_info,
'custom_variables': custom_vars
}
def parse_log(self, unique_id: str, result: dict) -> Any:
return [[
{
"key": "current_time",
"value": result['current_time'],
"type": "params"
},
{
"key": "preset_question",
"value": result['preset_question'],
"type": "params"
},
{
"key": "user_info",
"value": result['user_info'],
"type": "params"
}
]]
================================================
FILE: src/backend/bisheng/workflow/nodes/tool/__init__.py
================================================
================================================
FILE: src/backend/bisheng/workflow/nodes/tool/tool.py
================================================
from typing import Any
from bisheng.common.constants.enums.telemetry import ApplicationTypeEnum
from bisheng.tool.domain.models.gpts_tools import GptsToolsDao
from bisheng.tool.domain.services.executor import ToolExecutor
from bisheng.workflow.nodes.base import BaseNode
from bisheng.workflow.nodes.prompt_template import PromptTemplateParser
class ToolNode(BaseNode):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._tool_key = self.node_data.tool_key
self._tool_info = GptsToolsDao.get_tool_by_tool_key(tool_key=self._tool_key)
if not self._tool_info:
raise Exception(f"Tools{self._tool_key}Does not exist")
self._tool = None
def _init_tool(self):
if self._tool:
return
self._tool = ToolExecutor.init_by_tool_id_sync(tool_id=self._tool_info.id, app_id=self.workflow_id,
app_name=self.workflow_name,
app_type=ApplicationTypeEnum.WORKFLOW, user_id=self.user_id)
def _run(self, unique_id: str):
self._init_tool()
tool_input = self.parse_tool_input()
output = self._tool.invoke(input=tool_input)
return {
"output": output
}
def parse_log(self, unique_id: str, result: dict) -> Any:
tool_input = self.parse_tool_input()
ret = [
{
"key": k,
"value": v,
"type": "params"
} for k, v in tool_input.items()
]
ret.append({
"key": "output",
"value": result.get("output", ''),
"type": "params"
})
return [ret]
def parse_tool_input(self) -> dict:
ret = {}
for key, val in self.node_params.items():
if key == "output":
continue
new_val = self.parse_template_msg(val)
if new_val == '' or new_val is None:
continue
ret[key] = new_val
return ret
def parse_template_msg(self, msg: str):
msg_template = PromptTemplateParser(template=msg)
variables = msg_template.extract()
if len(variables) > 0:
var_map = {}
for one in variables:
var_map[one] = self.get_other_node_variable(one)
msg = msg_template.format(var_map)
return msg
================================================
FILE: src/backend/bisheng_langchain/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/agents/__init__.py
================================================
from bisheng_langchain.agents.chatglm_functions_agent.base import ChatglmFunctionsAgent
from bisheng_langchain.agents.llm_functions_agent.base import LLMFunctionsAgent
__all__ = ['ChatglmFunctionsAgent', 'LLMFunctionsAgent']
================================================
FILE: src/backend/bisheng_langchain/agents/chatglm_functions_agent/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/agents/chatglm_functions_agent/base.py
================================================
import json
import re
from typing import Any, Dict, List, Optional, Sequence, Tuple, Union
from pydantic import model_validator, Field
from bisheng_langchain.chat_models.host_llm import HostChatGLM
from langchain.agents.agent import Agent, AgentOutputParser, BaseSingleActionAgent
from langchain.agents.structured_chat.output_parser import StructuredChatOutputParserWithRetries
from langchain.agents.structured_chat.prompt import FORMAT_INSTRUCTIONS, PREFIX, SUFFIX
from langchain.callbacks.base import BaseCallbackManager
from langchain.callbacks.manager import Callbacks
from langchain.prompts.chat import (ChatPromptTemplate, HumanMessagePromptTemplate,
SystemMessagePromptTemplate)
from langchain.schema import AgentAction, AgentFinish, BasePromptTemplate
from langchain.schema.language_model import BaseLanguageModel
from langchain.schema.messages import ChatMessage
from langchain.tools import BaseTool, StructuredTool
HUMAN_MESSAGE_TEMPLATE = '{input}\n\n{agent_scratchpad}'
def format_tool_to_chatglm_function(tool: BaseTool):
"""Format tool into the chatglm function API."""
if isinstance(tool, StructuredTool):
schema_ = tool.args_schema.schema()
# Bug with required missing for structured tools.
required = sorted(schema_['properties']) # BUG WORKAROUND
return {
'name': tool.name,
'description': tool.description,
'parameters': {
'type': 'object',
'properties': schema_['properties'],
'required': required,
},
}
else:
if tool.args_schema:
schema_ = tool.args_schema.schema()
parameters = {
'type': 'object',
'properties': schema_['properties'],
'required': list(schema_['properties'].keys()),
}
else:
parameters = {
# This is a hack to get around the fact that some tools
# do not expose an args_schema, and expect an argument
# which is a string.
# And Open AI does not support an array type for the
# parameters.
'type': 'object',
'properties': {
'__arg1': {
'type': 'string',
'title': '__arg1'
},
},
'required': ['__arg1'],
}
return {
'name': tool.name,
'description': tool.description,
'parameters': parameters,
}
class ChatglmFunctionsAgent(BaseSingleActionAgent):
"""Chatglm Functions Agent."""
llm: BaseLanguageModel
tools: Sequence[BaseTool]
prompt: BasePromptTemplate
output_parser: AgentOutputParser = Field(default_factory=StructuredChatOutputParserWithRetries)
"""Output parser for the agent."""
has_search: bool = False
history: List = []
def get_allowed_tools(self) -> List[str]:
"""Get allowed tools."""
return list([t.name for t in self.tools])
@model_validator(mode='before')
@classmethod
def validate_llm(cls, values: dict) -> dict:
if not isinstance(values['llm'], HostChatGLM):
raise ValueError('Only supported with ChatGLM3 models.')
return values
@model_validator(mode='before')
@classmethod
def validate_prompt(cls, values: dict) -> dict:
prompt: BasePromptTemplate = values['prompt']
if 'agent_scratchpad' not in prompt.input_variables:
raise ValueError('`agent_scratchpad` should be one of the variables in the prompt, '
f'got {prompt.input_variables}')
return values
@property
def input_keys(self) -> List[str]:
"""Get input keys. Input refers to user input here."""
return ['input']
@property
def observation_prefix(self) -> str:
"""Prefix to append the observation with."""
return 'Observation: '
@property
def llm_prefix(self) -> str:
"""Prefix to append the llm call with."""
return 'Thought:'
def _construct_scratchpad(self, intermediate_steps: List[Tuple[AgentAction, str]]) -> str:
agent_scratchpad = ''
for action, observation in intermediate_steps:
agent_scratchpad += action.log
agent_scratchpad += f'\n{self.observation_prefix}{observation}\n{self.llm_prefix}'
if not isinstance(agent_scratchpad, str):
raise ValueError('agent_scratchpad should be of type string.')
if agent_scratchpad:
return (f'This was your previous work '
f"(but I haven't seen any of it! I only see what "
f'you return as final answer):\n{agent_scratchpad}')
else:
return agent_scratchpad
@classmethod
def _validate_tools(cls, tools: Sequence[BaseTool]) -> None:
pass
@classmethod
def _get_default_output_parser(cls,
llm: Optional[BaseLanguageModel] = None,
**kwargs: Any) -> AgentOutputParser:
return StructuredChatOutputParserWithRetries.from_llm(llm=llm)
@property
def _stop(self) -> List[str]:
return ['Observation:']
def _tool_history(self, prompt: str):
ans = []
tools_json = []
for i, tool in enumerate(self.tools):
tool_config = format_tool_to_chatglm_function(tool)
tools_json.append(tool_config)
ans.append({
'role': 'system',
'content':
'Answer the following questions as best as you can. You have access to the following tools:',
'tools': tools_json
})
query = f"""{prompt.split("Human: ")[-1].strip()}"""
return ans, query
def _extract_observation(self, prompt: str):
return_json = prompt.split('Observation: ')[-1].split('\nThought:')[0]
self.history.append({'role': 'observation', 'content': return_json})
return
def _extract_tool(self):
tool_names = list([t.name for t in self.tools])
if self.history[-1]['metadata'] and len(self.history[-1]['metadata']) > 0:
metadata = self.history[-1]['metadata']
content = self.history[-1]['content']
if 'tool_call' in content:
for tool in tool_names:
if tool in metadata:
input_para = content.split("='")[-1].split("'")[0]
action_json = {'action': tool, 'action_input': input_para}
self.has_search = True
return f"""
Action:
```
{json.dumps(action_json, ensure_ascii=False)}
```"""
final_answer_json = {'action': 'Final Answer', 'action_input': self.history[-1]['content']}
self.has_search = False
return f"""
Action:
```
{json.dumps(final_answer_json, ensure_ascii=False)}
```"""
def get_full_inputs(self, intermediate_steps: List[Tuple[AgentAction, str]],
**kwargs: Any) -> Dict[str, Any]:
"""Create the full inputs for the LLMChain from intermediate steps."""
thoughts = self._construct_scratchpad(intermediate_steps)
new_inputs = {'agent_scratchpad': thoughts, 'stop': self._stop}
full_inputs = {**kwargs, **new_inputs}
return full_inputs
def plan(
self,
intermediate_steps: List[Tuple[AgentAction, str]],
callbacks: Callbacks = None,
**kwargs: Any,
) -> Union[AgentAction, AgentFinish]:
"""Given input, decided what to do.
Args:
intermediate_steps: Steps the LLM has taken to date,
along with observations
callbacks: Callbacks to run.
**kwargs: User inputs.
Returns:
Action specifying what tool to use.
"""
full_inputs = self.get_full_inputs(intermediate_steps, **kwargs)
prompt = self.prompt.format_prompt(**full_inputs)
prompt = prompt.to_string()
if not self.has_search:
self.history, query = self._tool_history(prompt)
else:
self._extract_observation(prompt)
query = ''
self.history.append({'role': 'user', 'content': query})
chat_messages = []
for message in self.history:
additional_kwargs = dict()
for key in message.keys():
if key not in ['role', 'content']:
additional_kwargs[key] = message[key]
chat_messages.append(
ChatMessage(role=message['role'],
content=message['content'],
additional_kwargs=additional_kwargs))
predicted_message = self.llm.predict_messages(chat_messages, callbacks=callbacks)
self.history.append({
'role': 'assistant',
'content': predicted_message.content,
'metadata': predicted_message.additional_kwargs['metadata']
})
full_output = self._extract_tool()
return self.output_parser.parse(full_output)
async def aplan(
self,
intermediate_steps: List[Tuple[AgentAction, str]],
callbacks: Callbacks = None,
**kwargs: Any,
) -> Union[AgentAction, AgentFinish]:
"""Given input, decided what to do.
Args:
intermediate_steps: Steps the LLM has taken to date,
along with observations
callbacks: Callbacks to run.
**kwargs: User inputs.
Returns:
Action specifying what tool to use.
"""
full_inputs = self.get_full_inputs(intermediate_steps, **kwargs)
prompt = self.prompt.format_prompt(**full_inputs)
prompt = prompt.to_string()
if not self.has_search:
self.history, query = self._tool_history(prompt)
else:
self._extract_observation(prompt)
query = ''
self.history.append({'role': 'user', 'content': query})
chat_messages = []
for message in self.history:
additional_kwargs = dict()
for key in message.keys():
if key not in ['role', 'content']:
additional_kwargs[key] = message[key]
chat_messages.append(
ChatMessage(role=message['role'],
content=message['content'],
additional_kwargs=additional_kwargs))
predicted_message = await self.llm.apredict_messages(chat_messages, callbacks=callbacks)
self.history.append({
'role': 'assistant',
'content': predicted_message.content,
'metadata': predicted_message.additional_kwargs['metadata']
})
full_output = self._extract_tool()
return self.output_parser.parse(full_output)
@classmethod
def create_prompt(
cls,
tools: Sequence[BaseTool],
prefix: str = PREFIX,
suffix: str = SUFFIX,
human_message_template: str = HUMAN_MESSAGE_TEMPLATE,
format_instructions: str = FORMAT_INSTRUCTIONS,
input_variables: Optional[List[str]] = None,
memory_prompts: Optional[List[BasePromptTemplate]] = None,
) -> BasePromptTemplate:
tool_strings = []
for tool in tools:
args_schema = re.sub('}', '}}}}', re.sub('{', '{{{{', str(tool.args)))
tool_strings.append(f'{tool.name}: {tool.description}, args: {args_schema}')
formatted_tools = '\n'.join(tool_strings)
tool_names = ', '.join([tool.name for tool in tools])
format_instructions = format_instructions.format(tool_names=tool_names)
template = '\n\n'.join([prefix, formatted_tools, format_instructions, suffix])
if input_variables is None:
input_variables = ['input', 'agent_scratchpad']
_memory_prompts = memory_prompts or []
messages = [
SystemMessagePromptTemplate.from_template(template),
*_memory_prompts,
HumanMessagePromptTemplate.from_template(human_message_template),
]
return ChatPromptTemplate(input_variables=input_variables, messages=messages)
@classmethod
def from_llm_and_tools(
cls,
llm: BaseLanguageModel,
tools: Sequence[BaseTool],
callback_manager: Optional[BaseCallbackManager] = None,
output_parser: Optional[AgentOutputParser] = None,
prefix: str = PREFIX,
suffix: str = SUFFIX,
human_message_template: str = HUMAN_MESSAGE_TEMPLATE,
format_instructions: str = FORMAT_INSTRUCTIONS,
input_variables: Optional[List[str]] = None,
memory_prompts: Optional[List[BasePromptTemplate]] = None,
**kwargs: Any,
) -> Agent:
"""Construct an agent from an LLM and tools."""
cls._validate_tools(tools)
prompt = cls.create_prompt(
tools,
prefix=prefix,
suffix=suffix,
human_message_template=human_message_template,
format_instructions=format_instructions,
input_variables=input_variables,
memory_prompts=memory_prompts,
)
_output_parser = output_parser or cls._get_default_output_parser(llm=llm)
return cls(
llm=llm,
prompt=prompt,
tools=tools,
output_parser=_output_parser,
callback_manager=callback_manager,
**kwargs,
)
@property
def _agent_type(self) -> str:
raise ValueError
================================================
FILE: src/backend/bisheng_langchain/agents/chatglm_functions_agent/output_parser.py
================================================
from __future__ import annotations
import json
import logging
import re
from typing import Optional, Union
from pydantic import Field
from langchain.agents.agent import AgentOutputParser
from langchain.agents.structured_chat.prompt import FORMAT_INSTRUCTIONS
from langchain.output_parsers import OutputFixingParser
from langchain.schema import AgentAction, AgentFinish, OutputParserException
from langchain.schema.language_model import BaseLanguageModel
logger = logging.getLogger(__name__)
class StructuredChatOutputParser(AgentOutputParser):
"""Output parser for the structured chat agent."""
pattern = re.compile(r"```(?:json)?\n(.*?)```", re.DOTALL)
def get_format_instructions(self) -> str:
return FORMAT_INSTRUCTIONS
def parse(self, text: str) -> Union[AgentAction, AgentFinish]:
try:
action_match = self.pattern.search(text)
if action_match is not None:
response = json.loads(action_match.group(1).strip(), strict=False)
if isinstance(response, list):
# gpt turbo frequently ignores the directive to emit a single action
logger.warning("Got multiple action responses: %s", response)
response = response[0]
if response["action"] == "Final Answer":
return AgentFinish({"output": response["action_input"]}, text)
else:
return AgentAction(
response["action"], response.get("action_input", {}), text
)
else:
return AgentFinish({"output": text}, text)
except Exception as e:
raise OutputParserException(f"Could not parse LLM output: {text}") from e
@property
def _type(self) -> str:
return "structured_chat"
class StructuredChatOutputParserWithRetries(AgentOutputParser):
"""Output parser with retries for the structured chat agent."""
base_parser: AgentOutputParser = Field(default_factory=StructuredChatOutputParser)
"""The base parser to use."""
output_fixing_parser: Optional[OutputFixingParser] = None
"""The output fixing parser to use."""
def get_format_instructions(self) -> str:
return FORMAT_INSTRUCTIONS
def parse(self, text: str) -> Union[AgentAction, AgentFinish]:
try:
if self.output_fixing_parser is not None:
parsed_obj: Union[
AgentAction, AgentFinish
] = self.output_fixing_parser.parse(text)
else:
parsed_obj = self.base_parser.parse(text)
return parsed_obj
except Exception as e:
raise OutputParserException(f"Could not parse LLM output: {text}") from e
@classmethod
def from_llm(
cls,
llm: Optional[BaseLanguageModel] = None,
base_parser: Optional[StructuredChatOutputParser] = None,
) -> StructuredChatOutputParserWithRetries:
if llm is not None:
base_parser = base_parser or StructuredChatOutputParser()
output_fixing_parser = OutputFixingParser.from_llm(
llm=llm, parser=base_parser
)
return cls(output_fixing_parser=output_fixing_parser)
elif base_parser is not None:
return cls(base_parser=base_parser)
else:
return cls()
@property
def _type(self) -> str:
return "structured_chat_with_retries"
================================================
FILE: src/backend/bisheng_langchain/agents/chatglm_functions_agent/prompt.py
================================================
# flake8: noqa
PREFIX = """Respond to the human as helpfully and accurately as possible. You have access to the following tools:"""
FORMAT_INSTRUCTIONS = """Use a json blob to specify a tool by providing an action key (tool name) and an action_input key (tool input).
Valid "action" values: "Final Answer" or {tool_names}
Provide only ONE action per $JSON_BLOB, as shown:
```
{{{{
"action": $TOOL_NAME,
"action_input": $INPUT
}}}}
```
Follow this format:
Question: input question to answer
Thought: consider previous and subsequent steps
Action:
```
$JSON_BLOB
```
Observation: action result
... (repeat Thought/Action/Observation N times)
Thought: I know what to respond
Action:
```
{{{{
"action": "Final Answer",
"action_input": "Final response to human"
}}}}
```"""
SUFFIX = """Begin! Reminder to ALWAYS respond with a valid json blob of a single action. Use tools if necessary. Respond directly if appropriate. Format is Action:```$JSON_BLOB```then Observation:.
Thought:"""
================================================
FILE: src/backend/bisheng_langchain/agents/llm_functions_agent/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/agents/llm_functions_agent/base.py
================================================
"""Module implements an agent that uses OpenAI's APIs function enabled API."""
import json
from json import JSONDecodeError
from typing import Any, List, Optional, Sequence, Tuple, Union
from pydantic import model_validator
from bisheng_langchain.chat_models.host_llm import HostQwenChat
from bisheng_langchain.chat_models.proxy_llm import ProxyChatLLM
from langchain.agents import BaseSingleActionAgent
from langchain.callbacks.base import BaseCallbackManager
from langchain.callbacks.manager import Callbacks
from langchain.prompts.chat import (BaseMessagePromptTemplate, ChatPromptTemplate,
HumanMessagePromptTemplate, MessagesPlaceholder)
from langchain.schema import AgentAction, AgentFinish, BasePromptTemplate, OutputParserException
from langchain.schema.language_model import BaseLanguageModel
from langchain.schema.messages import AIMessage, BaseMessage, FunctionMessage, SystemMessage
from langchain.tools import BaseTool
from langchain.tools.convert_to_openai import format_tool_to_openai_function
from langchain_core.agents import AgentActionMessageLog
from langchain_openai import ChatOpenAI
def _convert_agent_action_to_messages(agent_action: AgentAction,
observation: str) -> List[BaseMessage]:
"""Convert an agent action to a message.
This code is used to reconstruct the original AI message from the agent action.
Args:
agent_action: Agent action to convert.
Returns:
AIMessage that corresponds to the original tool invocation.
"""
if isinstance(agent_action, AgentActionMessageLog):
return list(
agent_action.message_log) + [_create_function_message(agent_action, observation)]
else:
return [AIMessage(content=agent_action.log)]
def _create_function_message(agent_action: AgentAction, observation: str) -> FunctionMessage:
"""Convert agent action and observation into a function message.
Args:
agent_action: the tool invocation request from the agent
observation: the result of the tool invocation
Returns:
FunctionMessage that corresponds to the original tool invocation
"""
if not isinstance(observation, str):
try:
content = json.dumps(observation, ensure_ascii=False)
except Exception:
content = str(observation)
else:
content = observation
return FunctionMessage(
name=agent_action.tool,
content=content,
)
def _format_intermediate_steps(
intermediate_steps: List[Tuple[AgentAction, str]], ) -> List[BaseMessage]: # noqa
"""Format intermediate steps.
Args:
intermediate_steps: Steps the LLM has taken to date, along with observations
Returns:
list of messages to send to the LLM for the next prediction
"""
messages = []
for intermediate_step in intermediate_steps:
agent_action, observation = intermediate_step
messages.extend(_convert_agent_action_to_messages(agent_action, observation))
return messages
def _parse_ai_message(message: BaseMessage) -> Union[AgentAction, AgentFinish]:
"""Parse an AI message."""
if not isinstance(message, AIMessage):
raise TypeError(f'Expected an AI message got {type(message)}')
function_call = message.additional_kwargs.get('tool_calls', {})
if function_call:
function_name = function_call['name']
try:
_tool_input = json.loads(function_call['arguments'])
except JSONDecodeError:
raise OutputParserException(f'Could not parse tool input: {function_call} because '
f'the `arguments` is not valid JSON.')
# HACK HACK HACK:
# The code that encodes tool input into Open AI uses a special variable
# name called `__arg1` to handle old style tools that do not expose a
# schema and expect a single string argument as an input.
# We unpack the argument here if it exists.
# Open AI does not support passing in a JSON array as an argument.
if '__arg1' in _tool_input:
tool_input = _tool_input['__arg1']
else:
tool_input = _tool_input
content_msg = 'responded: {content}\n' if message.content else '\n'
log = f'\nInvoking: `{function_name}` with `{tool_input}`\n{content_msg}\n'
return AgentActionMessageLog(
tool=function_name,
tool_input=tool_input,
log=log,
message_log=[message],
)
return AgentFinish(return_values={'output': message.content}, log=message.content)
class LLMFunctionsAgent(BaseSingleActionAgent):
"""An Agent driven by function powered API.
Args:
llm: This should be an instance of ChatOpenAI, specifically a model
that supports using `functions`.
tools: The tools this agent has access to.
prompt: The prompt for this agent, should support agent_scratchpad as one
of the variables. For an easy way to construct this prompt, use
`OpenAIFunctionsAgent.create_prompt(...)`
"""
llm: BaseLanguageModel
tools: Sequence[BaseTool]
prompt: BasePromptTemplate
def get_allowed_tools(self) -> List[str]:
"""Get allowed tools."""
return list([t.name for t in self.tools])
@model_validator(mode='before')
@classmethod
def validate_llm(cls, values: dict) -> dict:
if ((not isinstance(values['llm'], ChatOpenAI))
and (not isinstance(values['llm'], HostQwenChat))
and (not isinstance(values['llm'], ProxyChatLLM))):
raise ValueError(
'Only supported with ChatOpenAI and HostQwenChat and ProxyChatLLM models.')
return values
@model_validator(mode='before')
@classmethod
def validate_prompt(cls, values: dict) -> dict:
prompt: BasePromptTemplate = values['prompt']
if 'agent_scratchpad' not in prompt.input_variables:
raise ValueError('`agent_scratchpad` should be one of the variables in the prompt, '
f'got {prompt.input_variables}')
return values
@property
def input_keys(self) -> List[str]:
"""Get input keys. Input refers to user input here."""
return ['input']
@property
def functions(self) -> List[dict]:
return [dict(format_tool_to_openai_function(t)) for t in self.tools]
def plan(
self,
intermediate_steps: List[Tuple[AgentAction, str]],
callbacks: Callbacks = None,
with_functions: bool = True,
**kwargs: Any,
) -> Union[AgentAction, AgentFinish]:
"""Given input, decided what to do.
Args:
intermediate_steps: Steps the LLM has taken to date, along with observations
**kwargs: User inputs.
Returns:
Action specifying what tool to use.
"""
agent_scratchpad = _format_intermediate_steps(intermediate_steps)
selected_inputs = {
k: kwargs[k]
for k in self.prompt.input_variables if k != 'agent_scratchpad'
}
full_inputs = dict(**selected_inputs, agent_scratchpad=agent_scratchpad)
prompt = self.prompt.format_prompt(**full_inputs)
messages = prompt.to_messages()
# print(messages)
if with_functions:
predicted_message = self.llm.predict_messages(
messages,
functions=self.functions,
callbacks=callbacks,
)
else:
predicted_message = self.llm.predict_messages(
messages,
callbacks=callbacks,
)
agent_decision = _parse_ai_message(predicted_message)
return agent_decision
async def aplan(
self,
intermediate_steps: List[Tuple[AgentAction, str]],
callbacks: Callbacks = None,
**kwargs: Any,
) -> Union[AgentAction, AgentFinish]:
"""Given input, decided what to do.
Args:
intermediate_steps: Steps the LLM has taken to date,
along with observations
**kwargs: User inputs.
Returns:
Action specifying what tool to use.
"""
agent_scratchpad = _format_intermediate_steps(intermediate_steps)
selected_inputs = {
k: kwargs[k]
for k in self.prompt.input_variables if k != 'agent_scratchpad'
}
full_inputs = dict(**selected_inputs, agent_scratchpad=agent_scratchpad)
prompt = self.prompt.format_prompt(**full_inputs)
messages = prompt.to_messages()
predicted_message = await self.llm.apredict_messages(messages,
functions=self.functions,
callbacks=callbacks)
agent_decision = _parse_ai_message(predicted_message)
return agent_decision
def return_stopped_response(
self,
early_stopping_method: str,
intermediate_steps: List[Tuple[AgentAction, str]],
**kwargs: Any,
) -> AgentFinish:
"""Return response when agent has been stopped due to max iterations."""
if early_stopping_method == 'force':
# `force` just returns a constant string
return AgentFinish({'output': 'Agent stopped due to iteration limit or time limit.'},
'')
elif early_stopping_method == 'generate':
# Generate does one final forward pass
agent_decision = self.plan(intermediate_steps, with_functions=False, **kwargs)
if type(agent_decision) == AgentFinish:
return agent_decision
else:
raise ValueError(f'got AgentAction with no functions provided: {agent_decision}')
else:
raise ValueError('early_stopping_method should be one of `force` or `generate`, '
f'got {early_stopping_method}')
@classmethod
def create_prompt(
cls,
system_message: Optional[SystemMessage] = SystemMessage(
content='You are a helpful AI assistant.'),
extra_prompt_messages: Optional[List[BaseMessagePromptTemplate]] = None,
) -> BasePromptTemplate:
"""Create prompt for this agent.
Args:
system_message: Message to use as the system message that will be the
first in the prompt.
extra_prompt_messages: Prompt messages that will be placed between the
system message and the new human input.
Returns:
A prompt template to pass into this agent.
"""
_prompts = extra_prompt_messages or []
messages: List[Union[BaseMessagePromptTemplate, BaseMessage]]
if system_message:
messages = [system_message]
else:
messages = []
messages.extend([
*_prompts,
HumanMessagePromptTemplate.from_template('{input}'),
MessagesPlaceholder(variable_name='agent_scratchpad'),
])
return ChatPromptTemplate(messages=messages)
@classmethod
def from_llm_and_tools(
cls,
llm: BaseLanguageModel,
tools: Sequence[BaseTool],
callback_manager: Optional[BaseCallbackManager] = None,
extra_prompt_messages: Optional[List[BaseMessagePromptTemplate]] = None,
system_message: Optional[SystemMessage] = SystemMessage(
content='You are a helpful AI assistant.'),
**kwargs: Any,
) -> BaseSingleActionAgent:
"""Construct an agent from an LLM and tools."""
if ((not isinstance(llm, ChatOpenAI)) and (not isinstance(llm, HostQwenChat))
and (not isinstance(llm, ProxyChatLLM))):
raise ValueError(
'Only supported with ChatOpenAI and HostQwenChat and ProxyChatLLM models.')
prompt = cls.create_prompt(
extra_prompt_messages=extra_prompt_messages,
system_message=system_message,
)
return cls(
llm=llm,
prompt=prompt,
tools=tools,
callback_manager=callback_manager,
**kwargs,
)
================================================
FILE: src/backend/bisheng_langchain/autogen_role/__init__.py
================================================
from bisheng_langchain.autogen_role.assistant import AutoGenAssistant
from bisheng_langchain.autogen_role.custom import AutoGenCustomRole
from bisheng_langchain.autogen_role.groupchat_manager import AutoGenGroupChatManager
from bisheng_langchain.autogen_role.user import AutoGenCoder, AutoGenUser
__all__ = ['AutoGenAssistant', 'AutoGenGroupChatManager',
'AutoGenUser', 'AutoGenCoder',
'AutoGenCustomRole']
================================================
FILE: src/backend/bisheng_langchain/autogen_role/assistant.py
================================================
"""Chain that runs an arbitrary python function."""
import logging
from typing import Callable, Dict, Optional
import httpx
from autogen import AssistantAgent
from langchain.base_language import BaseLanguageModel
logger = logging.getLogger(__name__)
class AutoGenAssistant(AssistantAgent):
"""Assistant agent, designed to solve a task with LLM.
"""
DEFAULT_SYSTEM_MESSAGE = """You are a helpful AI assistant.
Solve tasks using your coding and language skills.
In the following cases, suggest python code (in a python coding block) or shell script (in a sh coding block) for the user to execute.
1. When you need to collect info, use the code to output the info you need, for example, browse or search the web, download/read a file, print the content of a webpage or a file, get the current date/time, check the operating system. After sufficient info is printed and the task is ready to be solved based on your language skill, you can solve the task by yourself.
2. When you need to perform some task with code, use the code to perform the task and output the result. Finish the task smartly.
Solve the task step by step if you need to. If a plan is not provided, explain your plan first. Be clear which step uses code, and which step uses your language skill.
When using code, you must indicate the script type in the code block. The user cannot provide any other feedback or perform any other action beyond executing the code you suggest. The user can't modify your code. So do not suggest incomplete code which requires users to modify. Don't use a code block if it's not intended to be executed by the user.
If you want the user to save the code in a file before executing it, put # filename: inside the code block as the first line. Don't include multiple code blocks in one response. Do not ask users to copy and paste the result. Instead, use 'print' function for the output when relevant. Check the execution result returned by the user.
If the result indicates there is an error, fix the error and output the code again. Suggest the full code instead of partial code or code changes. If the error can't be fixed or if the task is not solved even after the code is executed successfully, analyze the problem, revisit your assumption, collect additional info you need, and think of a different approach to try.
When you find an answer, verify the answer carefully. Include verifiable evidence in your response if possible.
Reply "TERMINATE" in the end when everything is done.
""" # noqa
def __init__(
self,
name: str,
model_name: Optional[str] = 'gpt-4-0613', # when llm_flag=True, need to set
openai_api_key: Optional[str] = '', # when llm_flag=True, need to set
openai_api_base: Optional[str] = '', # when llm_flag=True, need to set
openai_proxy: Optional[str] = '', # when llm_flag=True, need to set
temperature: Optional[float] = 0, # when llm_flag=True, need to set
api_type: Optional[str] = None, # when llm_flag=True, need to set
api_version: Optional[str] = None, # when llm_flag=True, need to set
llm: Optional[BaseLanguageModel] = None,
system_message: Optional[
str] = DEFAULT_SYSTEM_MESSAGE, # agent system message, llm or group chat manage will use # noqa
is_termination_msg: Optional[Callable[[Dict], bool]] = None,
**kwargs,
):
is_termination_msg = (is_termination_msg if is_termination_msg is not None else
(lambda x: x.get('content') == 'TERMINATE'))
config_list = [
{
'model': model_name,
'api_key': openai_api_key,
'api_base': openai_api_base,
'api_type': api_type,
'api_version': api_version,
},
]
if openai_proxy:
config_list[0]['http_client'] = httpx.Client(proxies=openai_proxy)
config_list[0]['http_async_client'] = httpx.AsyncClient(proxies=openai_proxy)
if llm:
llm_config = llm
else:
llm_config = {
'seed': 42, # change the seed for different trials
'temperature': temperature,
'config_list': config_list,
'request_timeout': 120,
}
super().__init__(
name,
llm_config=llm_config,
system_message=system_message,
is_termination_msg=is_termination_msg,
max_consecutive_auto_reply=None,
human_input_mode='NEVER',
code_execution_config=False,
)
================================================
FILE: src/backend/bisheng_langchain/autogen_role/custom.py
================================================
from typing import Any, Awaitable, Callable, Dict, List, Optional, Union
from autogen import Agent, ConversableAgent
class AutoGenCustomRole(ConversableAgent):
"""Custom agent that can use langchain agent and chain."""
def __init__(
self,
name: str,
system_message: str,
func: Callable[..., str],
coroutine: Optional[Callable[..., Awaitable[str]]] = None,
**kwargs,
):
super().__init__(name=name,
system_message=system_message,
human_input_mode='NEVER',
code_execution_config=False,
llm_config=False,
**kwargs)
self.func = func
self.coroutine = coroutine
self.register_reply(Agent, AutoGenCustomRole.generate_custom_reply)
self.register_reply(Agent, AutoGenCustomRole.a_generate_custom_reply, is_async=True)
def generate_custom_reply(
self,
messages: Optional[List[Dict]] = None,
sender: Optional[Agent] = None,
config: Optional[Any] = None,
**kwargs,
) -> Union[str, Dict, None]:
if messages is None:
messages = self._oai_messages[sender]
message = messages[-1]
if 'content' in message:
query = message['content']
reply = self.func(query)
if isinstance(reply, dict):
reply = list(reply.values())
if reply:
reply = str(reply[0])
else:
reply = ''
return True, reply
return False, None
async def a_generate_custom_reply(
self,
messages: Optional[List[Dict]] = None,
sender: Optional[Agent] = None,
config: Optional[Any] = None,
**kwargs,
) -> Union[str, Dict, None]:
if messages is None:
messages = self._oai_messages[sender]
message = messages[-1]
if 'content' in message:
query = message['content']
if self.coroutine:
reply = await self.coroutine(query)
else:
reply = self.func(query)
if isinstance(reply, dict):
reply = list(reply.values())
if reply:
reply = str(reply[0])
else:
reply = ''
return True, reply
return False, None
================================================
FILE: src/backend/bisheng_langchain/autogen_role/groupchat_manager.py
================================================
"""Chain that runs an arbitrary python function."""
import logging
from typing import List, Optional
import httpx
from autogen import Agent, GroupChat, GroupChatManager
from langchain.base_language import BaseLanguageModel
from .user import AutoGenUser
logger = logging.getLogger(__name__)
class AutoGenGroupChatManager(GroupChatManager):
"""A chat manager agent that can manage a group chat of multiple agents.
"""
def __init__(
self,
agents: List[Agent],
max_round: int = 50,
llm: Optional[BaseLanguageModel] = None,
model_name: Optional[str] = 'gpt-4-0613',
openai_api_key: Optional[str] = '',
openai_api_base: Optional[str] = '',
openai_proxy: Optional[str] = '',
temperature: Optional[float] = 0,
api_type: Optional[str] = None, # when llm_flag=True, need to set
api_version: Optional[str] = None, # when llm_flag=True, need to set
name: Optional[str] = 'chat_manager',
system_message: Optional[str] = 'Group chat manager.',
**kwargs,
):
if not any(isinstance(agent, AutoGenUser) for agent in agents):
raise Exception('chat_manager must contains AutoGenUser')
groupchat = GroupChat(agents=agents, messages=[], max_round=max_round)
config_list = [
{
'model': model_name,
'api_key': openai_api_key,
'api_base': openai_api_base,
'api_type': api_type,
'api_version': api_version,
},
]
if openai_proxy:
config_list[0]['http_client'] = httpx.Client(proxies=openai_proxy)
config_list[0]['http_async_client'] = httpx.AsyncClient(proxies=openai_proxy)
if llm:
llm_config = llm
else:
llm_config = {
'seed': 42, # change the seed for different trials
'temperature': temperature,
'config_list': config_list,
'request_timeout': 120,
}
super().__init__(
groupchat=groupchat,
llm_config=llm_config,
name=name,
system_message=system_message,
)
================================================
FILE: src/backend/bisheng_langchain/autogen_role/user.py
================================================
"""Chain that runs an arbitrary python function."""
import logging
from typing import Callable, Dict, Optional
import httpx
from autogen import UserProxyAgent
from langchain.base_language import BaseLanguageModel
logger = logging.getLogger(__name__)
class AutoGenUserProxyAgent(UserProxyAgent):
"""A proxy agent for the user, that can execute code and provide feedback to the other agents.
"""
def __init__(
self,
name: str,
max_consecutive_auto_reply: Optional[int] = None,
human_input_mode: Optional[str] = 'ALWAYS', # hmean feedback input
code_execution_flag: Optional[bool] = True, # code execution
function_map: Optional[Dict[str, Callable]] = None, # function call
llm_flag: Optional[bool] = False, # llm call
model_name: Optional[str] = 'gpt-4-0613', # when llm_flag=True, need to set
openai_api_key: Optional[str] = '', # when llm_flag=True, need to set
openai_api_base: Optional[str] = '', # when llm_flag=True, need to set
openai_proxy: Optional[str] = '', # when llm_flag=True, need to set
temperature: Optional[float] = 0, # when llm_flag=True, need to set
api_type: Optional[str] = None, # when llm_flag=True, need to set
api_version: Optional[str] = None, # when llm_flag=True, need to set
llm: Optional[BaseLanguageModel] = None,
system_message: Optional[
str] = '', # agent system message, llm or group chat manage will use
is_termination_msg: Optional[Callable[[Dict], bool]] = None,
**kwargs,
):
is_termination_msg = (is_termination_msg if is_termination_msg is not None else
(lambda x: x.get('content') == 'TERMINATE'))
if code_execution_flag:
code_execution_config = {
'work_dir': '/tmp/autogen_coding', # code save path
'use_docker': False,
}
else:
code_execution_config = False
if llm_flag:
config_list = [
{
'model': model_name,
'api_key': openai_api_key,
'api_base': openai_api_base,
'api_type': api_type,
'api_version': api_version,
},
]
if openai_proxy:
config_list[0]['http_client'] = httpx.Client(proxies=openai_proxy)
config_list[0]['http_async_client'] = httpx.AsyncClient(proxies=openai_proxy)
if llm:
llm_config = llm
else:
llm_config = {
'seed': 42, # change the seed for different trials
'temperature': temperature,
'config_list': config_list,
'request_timeout': 120,
}
else:
llm_config = False
super().__init__(name,
is_termination_msg=is_termination_msg,
max_consecutive_auto_reply=max_consecutive_auto_reply,
human_input_mode=human_input_mode,
function_map=function_map,
code_execution_config=code_execution_config,
llm_config=llm_config,
system_message=system_message)
class AutoGenUser(UserProxyAgent):
"""A proxy agent for the user, that can provide feedback to the other agents.
"""
def __init__(
self,
name: str,
max_consecutive_auto_reply: Optional[int] = 10,
human_input_mode: Optional[str] = 'ALWAYS', # hmean feedback input
system_message: Optional[
str] = '', # agent system message, llm or group chat manage will use
is_termination_msg: Optional[Callable[[Dict], bool]] = None,
**kwargs,
):
is_termination_msg = (is_termination_msg if is_termination_msg is not None else
(lambda x: x.get('content') == 'TERMINATE'))
code_execution_config = False
llm_config = False
super().__init__(name,
is_termination_msg=is_termination_msg,
max_consecutive_auto_reply=max_consecutive_auto_reply,
human_input_mode=human_input_mode,
code_execution_config=code_execution_config,
llm_config=llm_config,
system_message=system_message)
class AutoGenCoder(UserProxyAgent):
"""A proxy agent for the coder, that can execute code to the other agents.
"""
def __init__(
self,
name: str,
function_map: Optional[Dict[str, Callable]] = None, # function call
system_message: Optional[
str] = '', # agent system message, llm or group chat manage will use
is_termination_msg: Optional[Callable[[Dict], bool]] = None,
**kwargs,
):
is_termination_msg = (is_termination_msg if is_termination_msg is not None else
(lambda x: x.get('content') == 'TERMINATE'))
code_execution_config = {
'work_dir': '/tmp/autogen_coding', # code save path
'use_docker': False,
}
llm_config = False
super().__init__(name,
is_termination_msg=is_termination_msg,
human_input_mode='NEVER',
function_map=function_map,
code_execution_config=code_execution_config,
llm_config=llm_config,
system_message=system_message)
================================================
FILE: src/backend/bisheng_langchain/chains/__init__.py
================================================
from bisheng_langchain.chains.autogen.auto_gen import AutoGenChain
from bisheng_langchain.chains.combine_documents.stuff import StuffDocumentsChain
from bisheng_langchain.chains.conversational_retrieval.base import ConversationalRetrievalChain
from bisheng_langchain.chains.retrieval.retrieval_chain import RetrievalChain
from bisheng_langchain.chains.router.multi_rule import MultiRuleChain
from bisheng_langchain.chains.router.rule_router import RuleBasedRouter
from bisheng_langchain.chains.transform import TransformChain
from bisheng_langchain.chains.qa_generation.base import QAGenerationChain
from bisheng_langchain.chains.qa_generation.base_v2 import QAGenerationChainV2
from .loader_output import LoaderOutputChain
__all__ = [
'StuffDocumentsChain', 'LoaderOutputChain', 'AutoGenChain', 'RuleBasedRouter',
'MultiRuleChain', 'RetrievalChain', 'ConversationalRetrievalChain', 'TransformChain',
'QAGenerationChain', 'QAGenerationChainV2'
]
================================================
FILE: src/backend/bisheng_langchain/chains/autogen/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/chains/autogen/auto_gen.py
================================================
"""Chain that runs an arbitrary python function."""
import functools
import json
import logging
from typing import Any, Dict, List, Optional
from autogen import ConversableAgent
from bisheng_langchain.autogen_role import AutoGenGroupChatManager, AutoGenUser
from langchain.callbacks.manager import AsyncCallbackManagerForChainRun, CallbackManagerForChainRun
from langchain.chains.base import Chain
logger = logging.getLogger(__name__)
class AutoGenChain(Chain):
"""Chain that print the loader output.
"""
user_proxy_agent: AutoGenUser
recipient: ConversableAgent
input_key: str = 'chat_topic' #: :meta private:
output_key: str = 'chat_content' #: :meta private:
@staticmethod
@functools.lru_cache
def _log_once(msg: str) -> None:
"""Log a message once.
:meta private:
"""
logger.warning(msg)
@property
def input_keys(self) -> List[str]:
"""Expect input keys.
:meta private:
"""
return [self.input_key]
@property
def output_keys(self) -> List[str]:
"""Return output keys.
:meta private:
"""
return [self.output_key]
def _call(
self,
inputs: Dict[str, str],
run_manager: Optional[CallbackManagerForChainRun] = None,
) -> Dict[str, str]:
message = inputs[self.input_key]
# io_output = io.StringIO()
# with contextlib.redirect_stdout(io_output):
global_chat_messages = []
self.user_proxy_agent.initiate_chat(self.recipient, message=message,
global_chat_messages=global_chat_messages,
run_manager=run_manager)
# chat_content = io_output.getvalue()
chat_content = json.dumps(
global_chat_messages, indent=2, ensure_ascii=False)
output = {self.output_key: chat_content}
return output
async def _acall(
self,
inputs: Dict[str, Any],
run_manager: Optional[AsyncCallbackManagerForChainRun] = None,
) -> Dict[str, Any]:
message = inputs[self.input_key]
# io_output = io.StringIO()
# with contextlib.redirect_stdout(io_output):
global_chat_messages = []
self.recipient.stop = False
await self.user_proxy_agent.a_initiate_chat(self.recipient,
message=message,
global_chat_messages=global_chat_messages,
run_manager=run_manager)
# chat_content = io_output.getvalue()
output = {self.output_key: global_chat_messages[-1].get('message'),
'intermediate_steps': global_chat_messages}
return output
async def stop(self):
self.recipient.stop = True
self.user_proxy_agent.event.set()
self.user_proxy_agent.event.clear()
async def reset(self):
if isinstance(self.recipient, AutoGenGroupChatManager):
self.recipient.reset()
async def input(self, input: str):
self.user_proxy_agent.input = input
self.user_proxy_agent.event.set()
self.user_proxy_agent.event.clear()
================================================
FILE: src/backend/bisheng_langchain/chains/combine_documents/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/chains/combine_documents/stuff.py
================================================
from typing import Any, List, Tuple
from langchain.callbacks.manager import Callbacks
from langchain.chains.combine_documents.stuff import StuffDocumentsChain as StuffDocumentsChainOld
from langchain.docstore.document import Document
class StuffDocumentsChain(StuffDocumentsChainOld):
token_max: int = -1
def combine_docs(self,
docs: List[Document],
callbacks: Callbacks = None,
**kwargs: Any) -> Tuple[str, dict]:
"""Stuff all documents into one prompt and pass to LLM.
Args:
docs: List of documents to join together into one variable
callbacks: Optional callbacks to pass along
**kwargs: additional parameters to use to get inputs to LLMChain.
Returns:
The first element returned is the single string output. The second
element returned is a dictionary of other keys to return.
"""
inputs = self._get_inputs(docs, **kwargs)
# print('inputs:', len(inputs['context']))
# print('prompt_length:', self.prompt_length(docs, **kwargs))
if self.token_max > 0:
inputs[self.document_variable_name] = inputs[
self.document_variable_name][:self.token_max]
# Call predict on the LLM.
return self.llm_chain.predict(callbacks=callbacks, **inputs), {}
async def acombine_docs(self,
docs: List[Document],
callbacks: Callbacks = None,
**kwargs: Any) -> Tuple[str, dict]:
"""Stuff all documents into one prompt and pass to LLM.
Args:
docs: List of documents to join together into one variable
callbacks: Optional callbacks to pass along
**kwargs: additional parameters to use to get inputs to LLMChain.
Returns:
The first element returned is the single string output. The second
element returned is a dictionary of other keys to return.
"""
inputs = self._get_inputs(docs, **kwargs)
if self.token_max > 0:
inputs[self.document_variable_name] = inputs[
self.document_variable_name][:self.token_max]
# Call predict on the LLM.
return await self.llm_chain.apredict(callbacks=callbacks, **inputs), {}
================================================
FILE: src/backend/bisheng_langchain/chains/conversational_retrieval/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/chains/conversational_retrieval/base.py
================================================
from __future__ import annotations
import inspect
from typing import Any, Dict, List, Optional, Tuple, Union
from langchain.callbacks.manager import AsyncCallbackManagerForChainRun, CallbackManagerForChainRun
from langchain.chains.conversational_retrieval.base import \
ConversationalRetrievalChain as BaseConversationalRetrievalChain
from langchain_core.messages import BaseMessage
# Depending on the memory type and configuration, the chat history format may differ.
# This needs to be consolidated.
CHAT_TURN_TYPE = Union[Tuple[str, str], BaseMessage]
_ROLE_MAP = {'human': 'Human: ', 'ai': 'Assistant: '}
def _get_chat_history(chat_history: List[CHAT_TURN_TYPE]) -> str:
buffer = ''
for dialogue_turn in chat_history:
if isinstance(dialogue_turn, BaseMessage):
role_prefix = _ROLE_MAP.get(dialogue_turn.type, f'{dialogue_turn.type}: ')
buffer += f'\n{role_prefix}{dialogue_turn.content}'
elif isinstance(dialogue_turn, tuple):
human = 'Human: ' + dialogue_turn[0]
ai = 'Assistant: ' + dialogue_turn[1]
buffer += '\n' + '\n'.join([human, ai])
else:
raise ValueError(f'Unsupported chat history format: {type(dialogue_turn)}.'
f' Full chat history: {chat_history} ')
return buffer
class ConversationalRetrievalChain(BaseConversationalRetrievalChain):
"""ConversationalRetrievalChain is a chain you can use to have a conversation with a character from a series."""
def _call(
self,
inputs: Dict[str, Any],
run_manager: Optional[CallbackManagerForChainRun] = None,
) -> Dict[str, Any]:
_run_manager = run_manager or CallbackManagerForChainRun.get_noop_manager()
question = inputs['question']
get_chat_history = self.get_chat_history or _get_chat_history
chat_history_str = get_chat_history(inputs['chat_history'])
if chat_history_str:
# callbacks = _run_manager.get_child()
new_question = self.question_generator.run(question=question,
chat_history=chat_history_str)
else:
new_question = question
accepts_run_manager = ('run_manager' in inspect.signature(self._get_docs).parameters)
if accepts_run_manager:
docs = self._get_docs(new_question, inputs, run_manager=_run_manager)
else:
docs = self._get_docs(new_question, inputs) # type: ignore[call-arg]
output: Dict[str, Any] = {}
if self.response_if_no_docs_found is not None and len(docs) == 0:
output[self.output_key] = self.response_if_no_docs_found
else:
new_inputs = inputs.copy()
if self.rephrase_question:
new_inputs['question'] = new_question
new_inputs['chat_history'] = chat_history_str
answer = self.combine_docs_chain.run(input_documents=docs,
callbacks=_run_manager.get_child(),
**new_inputs)
output[self.output_key] = answer
if self.return_source_documents:
output['source_documents'] = docs
if self.return_generated_question:
output['generated_question'] = new_question
return output
async def _acall(
self,
inputs: Dict[str, Any],
run_manager: Optional[AsyncCallbackManagerForChainRun] = None,
) -> Dict[str, Any]:
_run_manager = run_manager or AsyncCallbackManagerForChainRun.get_noop_manager()
question = inputs['question']
get_chat_history = self.get_chat_history or _get_chat_history
chat_history_str = get_chat_history(inputs['chat_history'])
if chat_history_str:
# callbacks = _run_manager.get_child()
new_question = await self.question_generator.arun(question=question,
chat_history=chat_history_str)
else:
new_question = question
accepts_run_manager = ('run_manager' in inspect.signature(self._aget_docs).parameters)
if accepts_run_manager:
docs = await self._aget_docs(new_question, inputs, run_manager=_run_manager)
else:
docs = await self._aget_docs(new_question, inputs) # type: ignore[call-arg]
output: Dict[str, Any] = {}
if self.response_if_no_docs_found is not None and len(docs) == 0:
output[self.output_key] = self.response_if_no_docs_found
else:
new_inputs = inputs.copy()
if self.rephrase_question:
new_inputs['question'] = new_question
new_inputs['chat_history'] = chat_history_str
answer = await self.combine_docs_chain.arun(input_documents=docs,
callbacks=_run_manager.get_child(),
**new_inputs)
output[self.output_key] = answer
if self.return_source_documents:
output['source_documents'] = docs
if self.return_generated_question:
output['generated_question'] = new_question
return output
================================================
FILE: src/backend/bisheng_langchain/chains/loader_output.py
================================================
"""Chain that runs an arbitrary python function."""
import functools
import logging
import json
from typing import Any, Awaitable, Callable, Dict, List, Optional
from langchain.callbacks.manager import (
AsyncCallbackManagerForChainRun,
CallbackManagerForChainRun,
)
from langchain.chains.base import Chain
from langchain.docstore.document import Document
logger = logging.getLogger(__name__)
class LoaderOutputChain(Chain):
"""Chain that print the loader output.
"""
documents: List[Document]
input_key: str = "begin" #: :meta private:
output_key: str = "text" #: :meta private:
@staticmethod
@functools.lru_cache
def _log_once(msg: str) -> None:
"""Log a message once.
:meta private:
"""
logger.warning(msg)
@property
def input_keys(self) -> List[str]:
"""Expect input keys.
:meta private:
"""
return [self.input_key]
@property
def output_keys(self) -> List[str]:
"""Return output keys.
:meta private:
"""
return [self.output_key]
def _call(
self,
inputs: Dict[str, str],
run_manager: Optional[CallbackManagerForChainRun] = None,
) -> Dict[str, str]:
contents = [doc.page_content for doc in self.documents]
contents = '\n\n'.join(contents)
# contents = json.dumps(contents, indent=2, ensure_ascii=False)
output = {self.output_key: contents}
return output
async def _acall(
self,
inputs: Dict[str, Any],
run_manager: Optional[AsyncCallbackManagerForChainRun] = None,
) -> Dict[str, Any]:
contents = [doc.page_content for doc in self.documents]
contents = '\n\n'.join(contents)
# contents = json.dumps(contents, indent=2, ensure_ascii=False)
output = {self.output_key: contents}
return output
================================================
FILE: src/backend/bisheng_langchain/chains/qa_generation/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/chains/qa_generation/base.py
================================================
from __future__ import annotations
import json
import re
import logging
from langchain.docstore.document import Document
from typing import Any, Dict, List, Optional
from langchain_core.callbacks import CallbackManagerForChainRun
from langchain_core.language_models import BaseLanguageModel
from langchain_core.prompts import BasePromptTemplate, ChatPromptTemplate
from pydantic import Field
from langchain_text_splitters import RecursiveCharacterTextSplitter, TextSplitter
from langchain.chains.base import Chain
from langchain.chains.llm import LLMChain
from langchain.chains.qa_generation.prompt import PROMPT_SELECTOR, CHAT_PROMPT, PROMPT
logger = logging.getLogger(__name__)
def parse_json(input_str: str) -> str:
match = re.search(r'```(json)?(.*)```', input_str, re.DOTALL)
if match is None:
out_str = input_str
else:
out_str = match.group(2)
out_str = out_str.strip()
out_str = out_str.replace('```', '')
return out_str
class QAGenerationChain(Chain):
"""Base class for question-answer generation chains."""
documents: List[Document]
llm_chain: LLMChain
"""LLM Chain that generates responses from user input and context."""
k: Optional[int] = None
"""Number of questions to generate."""
text_splitter: TextSplitter = Field(
default=RecursiveCharacterTextSplitter(
separators=["\n\n", "\n", " ", ""],
chunk_size=1000,
chunk_overlap=100,
)
)
"""Text splitter that splits the input into chunks."""
input_key: str = "begin"
"""Key of the input to the chain."""
output_key: str = "questions"
"""Key of the output of the chain."""
@classmethod
def from_llm(
cls,
documents: List[Document],
llm: BaseLanguageModel,
k: Optional[int] = None,
chunk_size: int = 512,
prompt: Optional[ChatPromptTemplate] = CHAT_PROMPT,
**kwargs: Any,
) -> QAGenerationChain:
"""
Create a QAGenerationChain from a language model.
Args:
llm: a language model
prompt: a prompt template
**kwargs: additional arguments
Returns:
a QAGenerationChain class
"""
_prompt = PROMPT_SELECTOR.get_prompt(llm) if prompt is None else prompt
chain = LLMChain(llm=llm, prompt=_prompt)
text_splitter = RecursiveCharacterTextSplitter(
separators=["\n\n", "\n", " ", ""],
chunk_size=chunk_size,
chunk_overlap=50,
)
return cls(documents=documents, llm_chain=chain, k=k, text_splitter=text_splitter, **kwargs)
@property
def _chain_type(self) -> str:
raise NotImplementedError
@property
def input_keys(self) -> List[str]:
return [self.input_key]
@property
def output_keys(self) -> List[str]:
return [self.output_key]
def _call(
self,
inputs: Dict[str, Any],
run_manager: Optional[CallbackManagerForChainRun] = None,
) -> Dict[str, List]:
contents = [doc.page_content for doc in self.documents]
contents = '\n\n'.join(contents)
docs = self.text_splitter.create_documents([contents])
# len(qa) = min(len(docs), self.k)
logger.info(f"Split {len(docs)} documents. Gen qa num: min({len(docs)}, {self.k}).")
qa = ''
qa_i = 0
for doc in docs:
try:
results = self.llm_chain.generate([{"text": doc.page_content}], run_manager=run_manager)
res = results.generations[0]
qa += res[0].text
qa_i += 1
except Exception as e:
logger.error(f"Failed to parse response Error: {e}")
continue
if self.k is not None and qa_i >= self.k:
break
return {self.output_key: qa}
async def _acall(
self,
inputs: Dict[str, Any],
run_manager: Optional[CallbackManagerForChainRun] = None,
) -> Dict[str, List]:
output = self._call(inputs, run_manager)
return output
================================================
FILE: src/backend/bisheng_langchain/chains/qa_generation/base_v2.py
================================================
from __future__ import annotations
import re
import json
import logging
import typing as t
import warnings
from typing import Any, Dict, List, Optional
from collections import defaultdict, namedtuple
from dataclasses import dataclass
from langchain_core.callbacks import CallbackManagerForChainRun
from langchain_core.language_models import BaseLanguageModel
from langchain_core.prompts import HumanMessagePromptTemplate, PromptTemplate
try:
from llama_index.core.node_parser import SimpleNodeParser
from llama_index.core.schema import Document as LlamaindexDocument
from llama_index.core.schema import BaseNode
except ImportError:
raise ImportError(
"llama_index must be installed to use this function. "
"Please, install it with `pip install llama_index`."
)
import numpy as np
import numpy.testing as npt
import pandas as pd
from langchain.prompts import ChatPromptTemplate
from langchain.docstore.document import Document
# from langchain.schema.document import Document as LangchainDocument
from langchain.chains.base import Chain
from numpy.random import default_rng
from tqdm import tqdm
from .prompt_v2 import (
SEED_QUESTION_CHAT_PROMPT,
SCORE_CONTEXT_CHAT_PROMPT,
FILTER_QUESTION_CHAT_PROMPT,
ANSWER_FORMULATE,
)
from .base import parse_json
logger = logging.getLogger(__name__)
def load_as_score(text):
"""
validate and returns given text as score
"""
pattern = r"^[\d.]+$"
if not re.match(pattern, text):
warnings.warn("Invalid score")
score = 0.0
else:
score = eval(text)
return score
def load_as_json(text):
"""
validate and return given text as json
"""
try:
return json.loads(parse_json(text))
except ValueError as e:
warnings.warn(f"Invalid json: {e}")
return {}
DEFAULT_TRAIN_DISTRIBUTION = {
"simple": 1.0,
"reasoning": 0.0,
"multi_context": 0.0,
"conditional": 0.0,
}
DataRow = namedtuple(
"DataRow",
[
"question",
"ground_truth_context",
"ground_truth",
"question_type",
"episode_done",
],
)
@dataclass
class TrainDataset:
"""
TrainDataset class
"""
train_data: t.List[DataRow]
def to_pandas(self) -> pd.DataFrame:
data_samples = []
for data in self.train_data:
data = {
"question": data.question,
"ground_truth_context": data.ground_truth_context,
"ground_truth": data.ground_truth,
"question_type": data.question_type,
"episode_done": data.episode_done,
}
data_samples.append(data)
return pd.DataFrame.from_records(data_samples)
class TrainsetGenerator:
"""
Ragas Train Set Generator
Attributes
----------
generator_llm: LangchainLLM
LLM used for all the generator operations in the TrainGeneration paradigm.
critique_llm: LangchainLLM
LLM used for all the filtering and scoring operations in TrainGeneration
paradigm.
chunk_size: int
The chunk size of nodes created from data.
train_distribution : dict
Distribution of different types of questions to be generated from given
set of documents. Defaults to {"easy":0.1, "reasoning":0.4, "conversation":0.5}
"""
def __init__(
self,
generator_llm: BaseLanguageModel,
critic_llm: BaseLanguageModel,
trainset_distribution: t.Optional[t.Dict[str, float]] = None,
chunk_size: int = 1024,
seed: int = 42,
prompt: Optional[ChatPromptTemplate] = SEED_QUESTION_CHAT_PROMPT,
filter_lowquality_context: bool = False,
filter_lowquality_question: bool = False,
answer_prompt: Optional[HumanMessagePromptTemplate] = ANSWER_FORMULATE,
) -> None:
self.generator_llm = generator_llm
self.critic_llm = critic_llm
trainset_distribution = trainset_distribution or DEFAULT_TRAIN_DISTRIBUTION
npt.assert_almost_equal(
1,
sum(trainset_distribution.values()),
err_msg="Sum of distribution should be 1",
)
probs = np.cumsum(list(trainset_distribution.values()))
types = trainset_distribution.keys()
self.trainset_distribution = dict(zip(types, probs))
self.chunk_size = chunk_size
self.threshold = 5.0
self.rng = default_rng(seed)
self.prompt = prompt
self.filter_lowquality_context = filter_lowquality_context
self.filter_lowquality_question = filter_lowquality_question
if answer_prompt is None:
answer_prompt = ANSWER_FORMULATE
self.answer_prompt = answer_prompt
@classmethod
def from_default(
cls,
llm: BaseLanguageModel,
chunk_size: int = 512,
trainset_distribution: dict = DEFAULT_TRAIN_DISTRIBUTION,
prompt: Optional[ChatPromptTemplate] = SEED_QUESTION_CHAT_PROMPT,
filter_lowquality_context: bool = False,
filter_lowquality_question: bool = False,
answer_prompt: Optional[PromptTemplate] = ANSWER_FORMULATE,
):
generator_llm = llm
critic_llm = llm
return cls(
generator_llm=generator_llm,
critic_llm=critic_llm,
chunk_size=chunk_size,
trainset_distribution=trainset_distribution,
prompt=prompt,
filter_lowquality_context=filter_lowquality_context,
filter_lowquality_question=filter_lowquality_question,
answer_prompt=answer_prompt,
)
def _get_evolve_type(self) -> str:
"""
Decides question evolution type based on probability
"""
prob = self.rng.uniform(0, 1)
return next(
(
key
for key in self.trainset_distribution.keys()
if prob <= self.trainset_distribution[key]
),
"simple",
)
def _filter_context(self, context: str) -> bool:
"""
context: str
The input context
Checks if the context is has information worthy of framing a question
"""
prompt = SCORE_CONTEXT_CHAT_PROMPT.format_prompt(context=context)
results = self.critic_llm(prompt.to_messages())
output = results.content
score = load_as_score(output)
print('context score:', score)
return score >= self.threshold
def _seed_question(self, context: str) -> str:
if self.prompt is None:
prompt = SEED_QUESTION_CHAT_PROMPT.format_prompt(context=context)
else:
prompt = self.prompt.format_prompt(context=context)
results = self.generator_llm(prompt.to_messages())
return results.content
def _filter_question(self, question: str) -> bool:
prompt = FILTER_QUESTION_CHAT_PROMPT.format_prompt(question=question)
results = self.critic_llm(prompt.to_messages())
results = results.content
json_results = load_as_json(results)
print('filter question:', question, json_results)
return json_results.get("verdict") != "No"
def _qc_template(self, prompt, question, context) -> str:
human_prompt = prompt.format(question=question, context=context)
prompt = ChatPromptTemplate.from_messages([human_prompt])
results = self.generator_llm(prompt.messages)
return results.content
def _generate_answer(self, question: str, context: t.List[str]) -> t.List[str]:
return [
self._qc_template(self.answer_prompt, qstn, context[i])
for i, qstn in enumerate(question.split("\n"))
]
def _remove_nodes(
self, available_indices: t.List[BaseNode], node_idx: t.List
) -> t.List[BaseNode]:
for idx in node_idx:
available_indices.remove(idx)
return available_indices
def _generate_doc_nodes_map(
self, document_nodes: t.List[BaseNode]
) -> t.Dict[str, t.List[BaseNode]]:
doc_nodes_map: t.Dict[str, t.List[BaseNode]] = defaultdict(list)
for node in document_nodes:
if node.ref_doc_id:
doc_nodes_map[node.ref_doc_id].append(node)
return doc_nodes_map # type: ignore
def _get_neighbour_node(
self, node: BaseNode, related_nodes: t.List[BaseNode]
) -> t.List[BaseNode]:
if len(related_nodes) < 2:
warnings.warn("No neighbors exists")
return [node]
idx = related_nodes.index(node)
ids = [idx - 1, idx] if idx == (len(related_nodes) - 1) else [idx, idx + 1]
return [related_nodes[idx] for idx in ids]
def generate(
self,
documents: t.List[LlamaindexDocument] | t.List[Document],
train_size: int,
) -> TrainDataset:
if not isinstance(documents[0], (LlamaindexDocument, Document)):
raise ValueError(
"Trainset Generatation only supports LlamaindexDocuments or Documents" # noqa
)
if isinstance(documents[0], Document):
# cast to LangchainDocument since its the only case here
documents = t.cast(t.List[Document], documents)
documents = [
LlamaindexDocument.from_langchain_format(doc) for doc in documents
]
# Convert documents into nodes
node_parser = SimpleNodeParser.from_defaults(
chunk_size=self.chunk_size, chunk_overlap=0, include_metadata=True
)
documents = t.cast(t.List[LlamaindexDocument], documents)
document_nodes: t.List[BaseNode] = node_parser.get_nodes_from_documents(
documents=documents
)
# # maximum 1 seed question per node
# if train_size > len(document_nodes):
# raise ValueError(
# """Maximum possible number of samples exceeded,
# reduce train_size or add more documents"""
# )
available_nodes = document_nodes
doc_nodes_map = self._generate_doc_nodes_map(document_nodes)
count_neighbours = sum(len(val) > 1 for _, val in doc_nodes_map.items())
if count_neighbours < len(documents) // 2:
warnings.warn("Most documents are too short")
count = 0
samples = []
pbar = tqdm(total=train_size)
while count < train_size and available_nodes != []:
print(count, train_size, len(available_nodes))
evolve_type = self._get_evolve_type()
curr_node = self.rng.choice(np.array(available_nodes), size=1)[0]
available_nodes = self._remove_nodes(available_nodes, [curr_node])
neighbor_nodes = doc_nodes_map[curr_node.source_node.node_id]
# Append multiple nodes randomly to remove chunking bias
size = self.rng.integers(1, 3)
nodes = (
self._get_neighbour_node(curr_node, neighbor_nodes)
if size > 1 and evolve_type != "multi_context"
else [curr_node]
)
text_chunk = " ".join([node.get_content() for node in nodes])
if self.filter_lowquality_context:
score = self._filter_context(text_chunk)
if not score:
continue
seed_question = self._seed_question(text_chunk)
question = seed_question
if self.filter_lowquality_question:
is_valid_question = self._filter_question(question)
else:
is_valid_question = True
if is_valid_question:
context = [text_chunk] * len(question.split("\n"))
is_conv = len(context) > 1
answer = self._generate_answer(question, context)
for i, (qstn, ctx, ans) in enumerate(
zip(question.split("\n"), context, answer)
):
episode_done = False if is_conv and i == 0 else True
samples.append(
DataRow(qstn, [ctx], [ans], evolve_type, episode_done)
)
count += 1
pbar.update(1)
return TrainDataset(train_data=samples)
class QAGenerationChainV2(Chain):
"""Base class for question-answer generation chains."""
documents: List[Document]
generator: TrainsetGenerator
"""LLM Chain that generates responses from user input and context."""
k: Optional[int] = None
"""Number of questions to generate."""
input_key: str = "begin"
"""Key of the input to the chain."""
output_key: str = "questions"
"""Key of the output of the chain."""
@classmethod
def from_llm(
cls,
documents: List[Document],
llm: BaseLanguageModel,
k: Optional[int] = None,
chunk_size: int = 512,
filter_lowquality_context: bool = False,
filter_lowquality_question: bool = False,
question_prompt: Optional[ChatPromptTemplate] = SEED_QUESTION_CHAT_PROMPT,
answer_prompt: Optional[HumanMessagePromptTemplate] = ANSWER_FORMULATE,
**kwargs: Any,
) -> QAGenerationChainV2:
"""
Create a QAGenerationChain from a language model.
Args:
llm: a language model
question_prompt: a prompt template for generate question
answer_prompt: a prompt template for generate answer
**kwargs: additional arguments
Returns:
a QAGenerationChain class
"""
generator = TrainsetGenerator.from_default(
llm,
chunk_size=chunk_size,
prompt=question_prompt,
answer_prompt=answer_prompt,
filter_lowquality_context=filter_lowquality_context,
filter_lowquality_question=filter_lowquality_question
)
return cls(documents=documents, generator=generator, k=k, **kwargs)
@property
def _chain_type(self) -> str:
raise NotImplementedError
@property
def input_keys(self) -> List[str]:
return [self.input_key]
@property
def output_keys(self) -> List[str]:
return [self.output_key]
def _call(
self,
inputs: Dict[str, Any],
run_manager: Optional[CallbackManagerForChainRun] = None,
) -> Dict[str, List]:
for doc in self.documents:
doc.metadata = {}
if self.k is None:
self.k = 1000
dataset = self.generator.generate(documents=self.documents, train_size=self.k)
df = dataset.to_pandas()
qa_pairs = df.to_dict("records")
qa = []
for pair in qa_pairs:
qa.append({
"question": pair["question"],
"answer": pair["ground_truth"][0],
"context": pair["ground_truth_context"][0],
})
qa = f'```json\n{json.dumps(qa, ensure_ascii=False, indent=4)}\n```'
return {self.output_key: qa}
async def _acall(
self,
inputs: Dict[str, Any],
run_manager: Optional[CallbackManagerForChainRun] = None,
) -> Dict[str, List]:
output = self._call(inputs, run_manager)
return output
================================================
FILE: src/backend/bisheng_langchain/chains/qa_generation/prompt.py
================================================
# flake8: noqa
from langchain.chains.prompt_selector import ConditionalPromptSelector, is_chat_model
from langchain_core.prompts.chat import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate,
)
from langchain_core.prompts.prompt import PromptTemplate
templ1 = """You are a smart assistant designed to help high school teachers come up with reading comprehension questions.
Given a piece of text, you must come up with a question and answer pair that can be used to test a student's reading comprehension abilities.
When coming up with this question/answer pair, you must respond in the following format and in same language as the text:
```
{{
"question": "$YOUR_QUESTION_HERE",
"answer": "$THE_ANSWER_HERE"
}}
```
Everything between the ``` must be valid json.
"""
templ2 = """Please come up with a question/answer pair, in the specified JSON format, for the following text:
----------------
{text}"""
CHAT_PROMPT = ChatPromptTemplate.from_messages(
[
SystemMessagePromptTemplate.from_template(templ1),
HumanMessagePromptTemplate.from_template(templ2),
]
)
templ = """You are a smart assistant designed to help high school teachers come up with reading comprehension questions.
Given a piece of text, you must come up with a question and answer pair that can be used to test a student's reading comprehension abilities.
When coming up with this question/answer pair, you must respond in the following format and in same language as the text:
```
{{
"question": "$YOUR_QUESTION_HERE",
"answer": "$THE_ANSWER_HERE"
}}
```
Everything between the ``` must be valid json.
Please come up with a question/answer pair, in the specified JSON format, for the following text:
----------------
{text}"""
PROMPT = PromptTemplate.from_template(templ)
PROMPT_SELECTOR = ConditionalPromptSelector(
default_prompt=PROMPT, conditionals=[(is_chat_model, CHAT_PROMPT)]
)
================================================
FILE: src/backend/bisheng_langchain/chains/qa_generation/prompt_v2.py
================================================
from langchain_core.prompts.chat import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate,
)
SEED_QUESTION_SYSTEM = SystemMessagePromptTemplate.from_template(
"""\
您的任务是遵循以下规则从给定的上下文中提出一个问题,规则如下:
1. 即使在没有给定上下文的情况下,问题也应该对人类有意义。
2. 应该可以从给定上下文中完全回答问题。
3. 问题应该来自包含重要信息的上下文部分。它也可以来自表格、段落、或者代码等。
4. 回答问题时不应包含任何链接。
5. 问题的难度应该是中等的。
6. 问题必须是合理的,并且必须能被人理解和回答。
7. 不要在问题中使用“提供的上下文”等短语。
8. 避免使用可以分解成多个问题的“和”字样来构建问题。
9. 如果上下文是中文,那么问题也应该是中文的。
Examples:
context:武汉达梦数据库股份有限公司 招股说明书 (申报稿) 1-1-226 表中作出恰当列报。 2、研发费用 2021年度、 2020年度、 2019 年度,达梦数据 研发费用金额分别 为11,786.99 万元、 9,660.26 万元、 6,255.86万元, 各年度研发费用占营 业收入的比例分别为 15.86 % 、 21.46 %、20.74 %。 由于研发投入金额及其占当期 营业收入的比例是 达梦数据 的关键 指标之一,可能存在因为核算不准 确而导致的错报风险。因此, 中天 运会计师 将研发费用的归集和核算 确定为关键审计事项。 针对研发费用的真实性与准确性,会计师执行的 重要审计程序主要包括: (1)了解与研发费用相关的关键内部控制,评价 这些控制的设计,确定其是否得到执行,并对相关内 部控制的运行有效性进行测试; (2)获取研发项目立项、审批资料,抽查重要研 发项目的过程文档,判断研发项目的真实性; (3)获取研发费用按项目、性质分类明细表,分
question:达梦2021年的研发费用占营业收入的比例是多少?
context:武汉达梦数据库股份有限公司 招股说明书 (申报稿) 1-1-329 (2)存货周转率 公司与同行业可比公司存货周转率对比情况如下: 公司简称 2021年度 2020年度 2019年度 中望软件 6.93 5.62 10.66 星环科技 3.38 3.21 2.24 金山办公 212.60 175.46 162.91 平均值 74.30 61.43 58.60 本公司 1.13 0.57 0.87 数据来源:可比公司招股说明书、定期报告。 报告期各期, 公司存货周转率显著低于同行业可比公司存货周转率平均水平, 主要是因为公司将未验收的数据及行业解决方案项目所发生的累 计成本均作为 存货核算。报告期各期末,公司存在 “湖北省司法行政数据中心项目 ”、“政法云 大数据中心基础设施服务及大数据中心软件采购 项目”等金额较大且实施周期较 长的数据及行业解决方案项目,导致年末存货金额较大。
question:达梦2021年的存货周转率相较于前一年有何变化?
""" # noqa: E501
)
SEED_QUESTION_HUMAN = HumanMessagePromptTemplate.from_template(
"""
context:{context}
question:
"""
)
SEED_QUESTION_CHAT_PROMPT = ChatPromptTemplate.from_messages(
[
SEED_QUESTION_SYSTEM,
SEED_QUESTION_HUMAN
]
)
SCORE_CONTEXT_SYSTEM = SystemMessagePromptTemplate.from_template(
"""Evaluate the provided context and assign a numerical score between 0 and 10 based on the following criteria:
1. Award a high score to context that thoroughly delves into and explains concepts.
2. Assign a lower score to context that contains excessive references, acknowledgments, external links, personal information, or other non-essential elements.
And you should only output the score.
Examples:
Context:
01-2022.04.30 贷方发生额共 计 2535.43 万元,户名;X 贸易有限公司;\n③根据用款企业提供的增值税纳税申报表来看,2021 年度用款企业年累计开票额为\n7826.48 万元,年累计应纳税合计 95.32 万元,年累计已纳税额 86.23 万元;截止至 2022 年 3 月,用款企业累计开票额为 1986.54 万元,累计应纳税合计19.54 万元,累计已纳税额\n20.23 万元。\n根据核算用款企业的银行流水及企业会计记账系统,剔除借款人往来转账款,估算用款 企业年营业额约在 6000 万元左右(纳税申报营业额),全部营业收入约 20000 万元左右,借 款人所在 X 贸易有限公司综合毛
利润率约为 35%,净利润约 20%左右。\n\n| 资产种类 | 坐落 | 产权人 | 建筑面积 | 现价值 | 贷款余额 | 资产净值 |\n| --- | --- | --- | --- | --- | --- | --- |\n| 房产 | HN 省 YY 市 PP 小区 5#2-101 | A | 240.20 | 365.23 万 | 165.
Score: 4
Context:
认缴出资额 200 万元 实缴出资额 200 万元 持股比例 20% |\n| 企业所属商圈 | 无 | 是否为已准入商圈 | 是□ 否 ☑ |\n(1) 企业经营历史及现状说明\nX 贸易有限公司 (下称“用款企业”) 注册成立于 2015 年 11 月,统一社会信用代码1234567890ACBDEFGH,法定代表人 A,公司注册地址位于 M 市 N 区 JF 路 20 号 NJ 大厦 18 楼1807 室,实际办公地址位于 M 市 N 区 K 广场 C 座 19 楼 1901、1906、1908、1910、1912、1914,办公面积为 880.51 ㎡,经营场所为用款企业租赁房产,租赁期限,现阶段年租金 73 万余元。\n用款企业是著名品牌“XYZ”的运营公司,是
以经营短袜、连裤袜、 内衣、家居服、配饰为主要品类的亲体织物公司,致力于为年轻消费群体提供“一站式”多品类亲体织物购物 体验。 作为织物文化的传播者和输出者,用款企业秉承一贯的高品质与原创精神,依托中国 研发团队,创领多项核心技术,不断建立并升级健康织物行业标准,目前拥有实用新型专利 6 项,发明专利 1 项,注册商标 30 余个,为品牌的商标保护构建了全面的商标防御体系。\n“XYZ”品牌创立于 2006 年,于 2009 年正式进入中国市场,在成立 10 年的时间里,在全国共有 400 余家店面,运营主要有以下三种模式:\n①直营模式:目前用款企业
管控的直营店有 100 家左右,其中在 M 地区共有 9 家直营店,分别为 Y1 店、Y2 店、Y3 店、Y4 店、Y5 店、Y6 店、Y7 店、Y8 店、Y9 店。经查看用款企业相关财务系统并截屏 ,用款企业 2021 年度 、2022 年 1-4 月直营店营业收入合计分别为7623.45 万元、1987.23 万元,M 地区 9 家直营店收入合计分别为 1238.67 万元、302.54 万元。根据数据测算直营部分毛利润率65%。
Score: 7
""" # noqa: E501
)
SCORE_CONTEXT_HUMAN = HumanMessagePromptTemplate.from_template(
"""
Context:
{context}
Score:
""" # noqa: E501
)
SCORE_CONTEXT_CHAT_PROMPT = ChatPromptTemplate.from_messages(
[
SCORE_CONTEXT_SYSTEM,
SCORE_CONTEXT_HUMAN
]
)
FILTER_QUESTION_SYSTEM = SystemMessagePromptTemplate.from_template(
"""\
Determine if the given question can be clearly understood even when presented without any additional context. Specify reason and verdict is a valid json format.
Examples:
question: What is the discovery about space?
{{
"reason":"The question is too vague and does not specify which discovery about space it is referring to."
"verdit":"No"
}}
question: What caused the Great Depression?
{{
"reason":"The question is specific and refers to a well-known historical economic event, making it clear and answerable.",
"verdict":"Yes"
}}
question: What is the keyword that best describes the paper's focus in natural language understanding tasks?
{{
"reason": "The question mentions a 'paper' in it without referring it's name which makes it unclear without it",
"verdict": "No"
}}
question: Who wrote 'Romeo and Juliet'?
{{
"reason": "The question is clear and refers to a specific work by name therefore it is clear",
"verdict": "Yes"
}}
question: What did the study mention?
{{
"reason": "The question is vague and does not specify which study it is referring to",
"verdict": "No"
}}
question: What is the focus of the REPLUG paper?
{{
"reason": "The question refers to a specific work by it's name hence can be understood",
"verdict": "Yes"
}}
""" # noqa: E501
)
FILTER_QUESTION_HUMAN = HumanMessagePromptTemplate.from_template(
"""\
question:{question}
""" # noqa: E501
)
FILTER_QUESTION_CHAT_PROMPT = ChatPromptTemplate.from_messages(
[
FILTER_QUESTION_SYSTEM,
FILTER_QUESTION_HUMAN
]
)
ANSWER_FORMULATE = HumanMessagePromptTemplate.from_template(
"""\
Answer the question using the information from the given context.
context:{context}
question:{question}
answer:
""" # noqa: E501
)
================================================
FILE: src/backend/bisheng_langchain/chains/question_answering/__init__.py
================================================
"""Load question answering chains."""
from typing import Any, Mapping, Optional, Protocol
# from langchain.chains.combine_documents.stuff import StuffDocumentsChain
from bisheng_langchain.chains.combine_documents.stuff import StuffDocumentsChain
from langchain.callbacks.base import BaseCallbackManager
from langchain.callbacks.manager import Callbacks
from langchain.chains import ReduceDocumentsChain
from langchain.chains.combine_documents.base import BaseCombineDocumentsChain
from langchain.chains.combine_documents.map_reduce import MapReduceDocumentsChain
from langchain.chains.combine_documents.map_rerank import MapRerankDocumentsChain
from langchain.chains.combine_documents.refine import RefineDocumentsChain
from langchain.chains.llm import LLMChain
from langchain.chains.question_answering import map_reduce_prompt, refine_prompts, stuff_prompt
from langchain.chains.question_answering.map_rerank_prompt import PROMPT as MAP_RERANK_PROMPT
from langchain.schema.language_model import BaseLanguageModel
from langchain.schema.prompt_template import BasePromptTemplate
class LoadingCallable(Protocol):
"""Interface for loading the combine documents chain."""
def __call__(self, llm: BaseLanguageModel, **kwargs: Any) -> BaseCombineDocumentsChain:
"""Callable to load the combine documents chain."""
def _load_map_rerank_chain(
llm: BaseLanguageModel,
prompt: BasePromptTemplate = None,
verbose: bool = False,
document_variable_name: str = 'context',
rank_key: str = 'score',
answer_key: str = 'answer',
callback_manager: Optional[BaseCallbackManager] = None,
callbacks: Callbacks = None,
**kwargs: Any,
) -> MapRerankDocumentsChain:
"""Load the map rerank documents chain."""
if hasattr(MAP_RERANK_PROMPT.output_parser, 'default_output_key'):
MAP_RERANK_PROMPT.output_parser.default_output_key = 'answer'
prompt = prompt or MAP_RERANK_PROMPT
llm_chain = LLMChain(
llm=llm,
prompt=prompt,
verbose=verbose,
callback_manager=callback_manager,
callbacks=callbacks,
)
return MapRerankDocumentsChain(
llm_chain=llm_chain,
rank_key=rank_key,
answer_key=answer_key,
document_variable_name=document_variable_name,
verbose=verbose,
callback_manager=callback_manager,
**kwargs,
)
def _load_stuff_chain(
llm: BaseLanguageModel,
prompt: Optional[BasePromptTemplate] = None,
document_variable_name: str = 'context',
verbose: Optional[bool] = None,
callback_manager: Optional[BaseCallbackManager] = None,
callbacks: Callbacks = None,
**kwargs: Any,
) -> StuffDocumentsChain:
_prompt = prompt or stuff_prompt.PROMPT_SELECTOR.get_prompt(llm)
llm_chain = LLMChain(
llm=llm,
prompt=_prompt,
verbose=verbose,
callback_manager=callback_manager,
callbacks=callbacks,
)
# TODO: document prompt
return StuffDocumentsChain(
llm_chain=llm_chain,
document_variable_name=document_variable_name,
verbose=verbose,
callback_manager=callback_manager,
**kwargs,
)
def _load_map_reduce_chain(
llm: BaseLanguageModel,
question_prompt: Optional[BasePromptTemplate] = None,
combine_prompt: Optional[BasePromptTemplate] = None,
combine_document_variable_name: str = 'summaries',
map_reduce_document_variable_name: str = 'context',
collapse_prompt: Optional[BasePromptTemplate] = None,
reduce_llm: Optional[BaseLanguageModel] = None,
collapse_llm: Optional[BaseLanguageModel] = None,
verbose: Optional[bool] = None,
callback_manager: Optional[BaseCallbackManager] = None,
callbacks: Callbacks = None,
token_max: int = 3000,
**kwargs: Any,
) -> MapReduceDocumentsChain:
_question_prompt = (question_prompt
or map_reduce_prompt.QUESTION_PROMPT_SELECTOR.get_prompt(llm))
_combine_prompt = (combine_prompt or map_reduce_prompt.COMBINE_PROMPT_SELECTOR.get_prompt(llm))
map_chain = LLMChain(
llm=llm,
prompt=_question_prompt,
verbose=verbose,
callback_manager=callback_manager,
callbacks=callbacks,
)
_reduce_llm = reduce_llm or llm
reduce_chain = LLMChain(
llm=_reduce_llm,
prompt=_combine_prompt,
verbose=verbose,
callback_manager=callback_manager,
callbacks=callbacks,
)
# TODO: document prompt
combine_documents_chain = StuffDocumentsChain(
llm_chain=reduce_chain,
document_variable_name=combine_document_variable_name,
verbose=verbose,
callback_manager=callback_manager,
callbacks=callbacks,
)
if collapse_prompt is None:
collapse_chain = None
if collapse_llm is not None:
raise ValueError('collapse_llm provided, but collapse_prompt was not: please '
'provide one or stop providing collapse_llm.')
else:
_collapse_llm = collapse_llm or llm
collapse_chain = StuffDocumentsChain(
llm_chain=LLMChain(
llm=_collapse_llm,
prompt=collapse_prompt,
verbose=verbose,
callback_manager=callback_manager,
callbacks=callbacks,
),
document_variable_name=combine_document_variable_name,
verbose=verbose,
callback_manager=callback_manager,
)
reduce_documents_chain = ReduceDocumentsChain(
combine_documents_chain=combine_documents_chain,
collapse_documents_chain=collapse_chain,
token_max=token_max,
verbose=verbose,
)
return MapReduceDocumentsChain(
llm_chain=map_chain,
document_variable_name=map_reduce_document_variable_name,
reduce_documents_chain=reduce_documents_chain,
verbose=verbose,
callback_manager=callback_manager,
callbacks=callbacks,
**kwargs,
)
def _load_refine_chain(
llm: BaseLanguageModel,
question_prompt: Optional[BasePromptTemplate] = None,
refine_prompt: Optional[BasePromptTemplate] = None,
document_variable_name: str = 'context_str',
initial_response_name: str = 'existing_answer',
refine_llm: Optional[BaseLanguageModel] = None,
verbose: Optional[bool] = None,
callback_manager: Optional[BaseCallbackManager] = None,
callbacks: Callbacks = None,
**kwargs: Any,
) -> RefineDocumentsChain:
_question_prompt = (question_prompt or refine_prompts.QUESTION_PROMPT_SELECTOR.get_prompt(llm))
_refine_prompt = refine_prompt or refine_prompts.REFINE_PROMPT_SELECTOR.get_prompt(llm)
initial_chain = LLMChain(
llm=llm,
prompt=_question_prompt,
verbose=verbose,
callback_manager=callback_manager,
callbacks=callbacks,
)
_refine_llm = refine_llm or llm
refine_chain = LLMChain(
llm=_refine_llm,
prompt=_refine_prompt,
verbose=verbose,
callback_manager=callback_manager,
callbacks=callbacks,
)
return RefineDocumentsChain(
initial_llm_chain=initial_chain,
refine_llm_chain=refine_chain,
document_variable_name=document_variable_name,
initial_response_name=initial_response_name,
verbose=verbose,
callback_manager=callback_manager,
**kwargs,
)
def load_qa_chain(
llm: BaseLanguageModel,
chain_type: str = 'stuff',
verbose: Optional[bool] = None,
callback_manager: Optional[BaseCallbackManager] = None,
**kwargs: Any,
) -> BaseCombineDocumentsChain:
"""Load question answering chain.
Args:
llm: Language Model to use in the chain.
chain_type: Type of document combining chain to use. Should be one of "stuff",
"map_reduce", "map_rerank", and "refine".
verbose: Whether chains should be run in verbose mode or not. Note that this
applies to all chains that make up the final chain.
callback_manager: Callback manager to use for the chain.
Returns:
A chain to use for question answering.
"""
loader_mapping: Mapping[str, LoadingCallable] = {
'stuff': _load_stuff_chain,
'map_reduce': _load_map_reduce_chain,
'refine': _load_refine_chain,
'map_rerank': _load_map_rerank_chain,
}
if chain_type not in loader_mapping:
raise ValueError(f'Got unsupported chain type: {chain_type}. '
f'Should be one of {loader_mapping.keys()}')
return loader_mapping[chain_type](llm,
verbose=verbose,
callback_manager=callback_manager,
**kwargs)
================================================
FILE: src/backend/bisheng_langchain/chains/retrieval/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/chains/retrieval/retrieval_chain.py
================================================
import inspect
from typing import Any, Dict, List, Optional
from langchain.callbacks.manager import (
AsyncCallbackManagerForChainRun,
CallbackManagerForChainRun,
)
from langchain.chains.base import Chain
from langchain.schema import BaseRetriever, Document
from pydantic import Field
class RetrievalChain(Chain):
"""Chain to use to combine the documents."""
input_key: str = 'query' #: :meta private:
output_key: str = 'result' #: :meta private:
retriever: BaseRetriever = Field(exclude=True)
return_source_documents: bool = False
def _get_docs(
self,
question: str,
*,
run_manager: CallbackManagerForChainRun,
) -> List[Document]:
"""Get docs."""
return self.retriever.get_relevant_documents(question, callbacks=run_manager.get_child())
async def _aget_docs(
self,
question: str,
*,
run_manager: AsyncCallbackManagerForChainRun,
) -> List[Document]:
"""Get docs."""
return await self.retriever.aget_relevant_documents(question, callbacks=run_manager.get_child())
@property
def input_keys(self) -> List[str]:
"""Return the input keys.
:meta private:
"""
return [self.input_key]
@property
def output_keys(self) -> List[str]:
"""Return the output keys.
:meta private:
"""
_output_keys = [self.output_key]
if self.return_source_documents:
_output_keys = _output_keys + ["source_documents"]
return _output_keys
def _call(
self,
inputs: Dict[str, Any],
run_manager: Optional[CallbackManagerForChainRun] = None,
) -> Dict[str, Any]:
_run_manager = run_manager or CallbackManagerForChainRun.get_noop_manager()
question = inputs[self.input_key]
accepts_run_manager = "run_manager" in inspect.signature(self._get_docs).parameters
if accepts_run_manager:
docs = self._get_docs(question, run_manager=_run_manager)
else:
docs = self._get_docs(question) # type: ignore[call-arg]
if self.return_source_documents:
return {self.output_key: docs, "source_documents": docs}
else:
return {self.output_key: docs}
async def _acall(
self,
inputs: Dict[str, Any],
run_manager: Optional[AsyncCallbackManagerForChainRun] = None,
) -> Dict[str, Any]:
_run_manager = run_manager or AsyncCallbackManagerForChainRun.get_noop_manager()
question = inputs[self.input_key]
accepts_run_manager = "run_manager" in inspect.signature(self._aget_docs).parameters
if accepts_run_manager:
docs = await self._aget_docs(question, run_manager=_run_manager)
else:
docs = await self._aget_docs(question) # type: ignore[call-arg]
if self.return_source_documents:
return {self.output_key: docs, "source_documents": docs}
else:
return {self.output_key: docs}
================================================
FILE: src/backend/bisheng_langchain/chains/router/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/chains/router/multi_rule.py
================================================
from typing import List, Mapping
from langchain.chains.router.base import Chain, MultiRouteChain, RouterChain
class MultiRuleChain(MultiRouteChain):
router_chain: RouterChain
destination_chains: Mapping[str, Chain]
default_chain: Chain
output_variables: List[str]
@property
def output_keys(self) -> List[str]:
return self.output_variables
================================================
FILE: src/backend/bisheng_langchain/chains/router/rule_router.py
================================================
import asyncio
from typing import Any, Callable, Dict, List, Union
from langchain.callbacks.manager import Callbacks
from langchain.chains.router.base import Route, RouterChain
class RuleBasedRouter(RouterChain):
rule_function: Callable[..., str]
input_variables: List[str]
@property
def input_keys(self):
return self.input_variables
def _validate_outputs(self, outputs: Dict[str, Any]) -> None:
super()._validate_outputs(outputs)
if not isinstance(outputs['next_inputs'], dict):
raise ValueError
def _call(
self,
inputs: Union[Dict[str, Any], Any],
) -> Route:
result = self.rule_function(inputs)
if not result.get('destination') or not result:
return Route(None, result['next_inputs'])
return Route(result['destination'], result['next_inputs'])
def route(
self,
inputs: Union[Dict[str, Any], Any],
callbacks: Callbacks = None,
) -> Route:
result = self.rule_function(inputs)
if not result.get('destination') or not result:
return Route(None, result['next_inputs'])
return Route(result['destination'], result['next_inputs'])
async def aroute(
self,
inputs: Union[Dict[str, Any], Any],
callbacks: Callbacks = None,
) -> Route:
"""Route the inputs to the next chain based on the rule function."""
# 如果是异步function,那么就用await
if asyncio.iscoroutinefunction(self.rule_function):
result = await self.rule_function(inputs)
else:
result = self.rule_function(inputs)
if not result.get('destination') or not result:
return Route(None, result['next_inputs'])
return Route(result['destination'], result['next_inputs'])
================================================
FILE: src/backend/bisheng_langchain/chains/transform.py
================================================
"""Chain that runs an arbitrary python function."""
import functools
import inspect
import logging
from typing import Any, Awaitable, Callable, Dict, List, Optional
from langchain.chains.base import Chain
from langchain_core.callbacks import AsyncCallbackManagerForChainRun, CallbackManagerForChainRun
from pydantic import Field
logger = logging.getLogger(__name__)
class TransformChain(Chain):
"""Chain that transforms the chain output.
Example:
.. code-block:: python
from langchain.chains import TransformChain
transform_chain = TransformChain(input_variables=["text"],
output_variables["entities"], transform=func())
"""
input_variables: List[str]
"""The keys expected by the transform's input dictionary."""
output_variables: List[str]
"""The keys returned by the transform's output dictionary."""
transform_cb: Callable[[Dict[str, str]], Dict[str, str]] = Field(alias='transform')
"""The transform function."""
atransform_cb: Optional[Callable[[Dict[str, Any]],
Awaitable[Dict[str, Any]]]] = Field(None, alias='atransform')
"""The async coroutine transform function."""
@staticmethod
@functools.lru_cache
def _log_once(msg: str) -> None:
"""Log a message once.
:meta private:
"""
logger.warning(msg)
@property
def input_keys(self) -> List[str]:
"""Expect input keys.
:meta private:
"""
return self.input_variables
@property
def output_keys(self) -> List[str]:
"""Return output keys.
:meta private:
"""
return self.output_variables
def _call(
self,
inputs: Dict[str, str],
run_manager: Optional[CallbackManagerForChainRun] = None,
) -> Dict[str, str]:
new_arg_supported = inspect.signature(self.transform_cb).parameters.get('run_manager')
if new_arg_supported:
return self.transform_cb(inputs, run_manager)
else:
return self.transform_cb(inputs)
async def _acall(
self,
inputs: Dict[str, Any],
run_manager: Optional[AsyncCallbackManagerForChainRun] = None,
) -> Dict[str, Any]:
if self.atransform_cb is not None:
new_arg_supported = inspect.signature(self.transform_cb).parameters.get('run_manager')
if new_arg_supported:
return await self.atransform_cb(inputs, run_manager)
else:
return await self.atransform_cb(inputs)
else:
self._log_once("TransformChain's atransform is not provided, falling"
' back to synchronous transform')
return self._call(inputs, run_manager)
================================================
FILE: src/backend/bisheng_langchain/chat_models/__init__.py
================================================
from .host_llm import CustomLLMChat, HostBaichuanChat, HostChatGLM, HostLlama2Chat, HostQwenChat, HostQwen1_5Chat, HostYuanChat, HostYiChat
from .minimax import ChatMinimaxAI
from .proxy_llm import ProxyChatLLM
from .qwen import ChatQWen
from .wenxin import ChatWenxin
from .xunfeiai import ChatXunfeiAI
from .sensetime import SenseChat
__all__ = [
'ProxyChatLLM', 'ChatMinimaxAI', 'ChatWenxin', 'ChatXunfeiAI', 'HostChatGLM',
'HostBaichuanChat', 'HostLlama2Chat', 'HostQwenChat', 'CustomLLMChat', 'ChatQWen', 'SenseChat',
'HostYuanChat', 'HostYiChat', 'HostQwen1_5Chat'
]
================================================
FILE: src/backend/bisheng_langchain/chat_models/host_llm.py
================================================
"""proxy llm chat wrapper."""
from __future__ import annotations
import json
import logging
import sys
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Mapping, Optional, Tuple, Union
import requests
from pydantic import ConfigDict, model_validator, Field
from bisheng_langchain.utils.requests import Requests
from langchain.callbacks.manager import AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun
from langchain.chat_models.base import BaseChatModel
from langchain.schema import ChatGeneration, ChatResult
from langchain.schema.messages import (AIMessage, BaseMessage, ChatMessage, FunctionMessage,
HumanMessage, SystemMessage)
from langchain.utils import get_from_dict_or_env
from langchain_core.language_models.llms import create_base_retry_decorator
# from requests.exceptions import HTTPError
# from .interface import MinimaxChatCompletion
# from .interface.types import ChatInput
if TYPE_CHECKING:
import tiktoken
logger = logging.getLogger(__name__)
def _import_tiktoken() -> Any:
try:
import tiktoken
except ImportError:
raise ValueError('Could not import tiktoken python package. '
'This is needed in order to calculate get_token_ids. '
'Please install it with `pip install tiktoken`.')
return tiktoken
def _create_retry_decorator(
llm: BaseHostChatLLM,
run_manager: Optional[Union[AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun]] = None,
) -> Callable[[Any], Any]:
errors = [requests.exceptions.ReadTimeout, ValueError]
return create_base_retry_decorator(error_types=errors,
max_retries=llm.max_retries,
run_manager=run_manager)
def _convert_dict_to_message(_dict: Mapping[str, Any]) -> BaseMessage:
role = _dict['role']
if role == 'user':
return HumanMessage(content=_dict['content'])
elif role == 'assistant':
content = _dict['content'] or '' # OpenAI returns None for tool invocations
additional_kwargs = {}
if _dict.get('function_call'):
additional_kwargs['function_call'] = dict(_dict['function_call'])
if 'metadata' in _dict:
additional_kwargs['metadata'] = _dict['metadata']
return AIMessage(content=content, additional_kwargs=additional_kwargs)
elif role == 'system':
return SystemMessage(content=_dict['content'])
elif role == 'function':
return FunctionMessage(content=_dict['content'], name=_dict['name'])
else:
return ChatMessage(content=_dict['content'], role=role)
def _convert_message_to_dict(message: BaseMessage) -> dict:
if isinstance(message, ChatMessage):
message_dict = {'role': message.role, 'content': message.content}
for key in message.additional_kwargs.keys():
message_dict[key] = message.additional_kwargs[key]
elif isinstance(message, HumanMessage):
message_dict = {'role': 'user', 'content': message.content}
elif isinstance(message, AIMessage):
message_dict = {'role': 'assistant', 'content': message.content}
if 'function_call' in message.additional_kwargs:
message_dict['function_call'] = message.additional_kwargs['function_call']
elif isinstance(message, SystemMessage):
message_dict = {'role': 'system', 'content': message.content}
elif isinstance(message, FunctionMessage):
message_dict = {
'role': 'function',
'content': message.content,
'name': message.name,
}
else:
raise ValueError(f'Got unknown type {message}')
if 'name' in message.additional_kwargs:
message_dict['name'] = message.additional_kwargs['name']
return message_dict
class BaseHostChatLLM(BaseChatModel):
"""Wrapper around base host Chat large language models.
"""
client: Optional[Any] #: :meta private:
"""Model name to use."""
model_name: str = Field('', alias='model')
temperature: float = 0.9
top_p: float = 0.95
do_sample: bool = False
"""Number of chat completions to generate for each prompt."""
max_tokens: int = 4096
"""What sampling temperature to use."""
model_kwargs: Optional[Dict[str, Any]] = Field(default_factory=dict)
"""Holds any model parameters valid for `create` call not explicitly specified."""
host_base_url: Optional[str] = None
is_ssl: Optional[bool] = False
headers: Optional[Dict[str, str]] = Field(default_factory=dict)
request_timeout: Optional[Union[float, Tuple[float, float]]] = 300
"""Timeout for requests to OpenAI completion API. Default is 600 seconds."""
max_retries: Optional[int] = 1
"""Maximum number of retries to make when generating."""
streaming: Optional[bool] = False
"""Whether to stream the results or not."""
n: Optional[int] = 1
"""Maximum number of tokens to generate."""
tiktoken_model_name: Optional[str] = None
"""The model name to pass to tiktoken when using this class.
Tiktoken is used to count the number of tokens in documents to constrain
them to be under a certain limit. By default, when set to None, this will
be the same as the embedding model name. However, there are some cases
where you may want to use this Embedding class with a model name not
supported by tiktoken. This can include when using Azure embeddings or
when using one of the many model providers that expose an OpenAI-like
API but with different models. In those cases, in order to avoid erroring
when tiktoken is called, you can specify a model name to use here."""
verbose: Optional[bool] = False
decoupled: Optional[bool] = False
model_config = ConfigDict(validate_by_name=True)
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
values['host_base_url'] = get_from_dict_or_env(values, 'host_base_url', 'HostBaseUrl')
model = values['model_name']
try:
if cls != CustomLLMChat:
url = values['host_base_url'].rsplit('/', 2)[0]
config_ep = f'{url}/v2/models/{model}/config'
config = requests.get(url=config_ep, json={}, timeout=5).json()
policy = config.get('model_transaction_policy', {})
values['decoupled'] = policy.get('decoupled', False)
# Host class should set below code
if values['decoupled']:
values[
'host_base_url'] = f"{values['host_base_url']}/{values['model_name']}/generate_stream"
else:
values[
'host_base_url'] = f"{values['host_base_url']}/{values['model_name']}/infer"
except Exception:
raise Exception(f'Update Decoupled status failed for model {model}')
try:
if values['headers']:
headers = values['headers']
else:
headers = {'Content-Type': 'application/json'}
if cls.is_ssl and "https" in values['host_base_url']:
import aiohttp
values['client'] = Requests(headers=headers,
aiosession=aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False)),
request_timeout=values['request_timeout'])
else:
values['client'] = Requests(headers=headers, request_timeout=values['request_timeout'])
except AttributeError:
raise ValueError('Try upgrading it with `pip install --upgrade requests`.')
return values
@property
def _default_params(self) -> Dict[str, Any]:
"""Get the default parameters for calling ChatMinimaxAI API."""
return {
'request_timeout': self.request_timeout,
'model': self.model_name,
'temperature': self.temperature,
'top_p': self.top_p,
'max_tokens': self.max_tokens,
'do_sample': self.do_sample,
**self.model_kwargs,
}
def completion_with_retry(self, **kwargs: Any) -> Any:
retry_decorator = _create_retry_decorator(self)
@retry_decorator
def _completion_with_retry(**kwargs: Any) -> Any:
self.client.headers = self.headers
messages = kwargs.get('messages')
temperature = kwargs.get('temperature')
top_p = kwargs.get('top_p')
max_tokens = kwargs.get('max_tokens')
do_sample = kwargs.get('do_sample')
params = {
'stream': False,
'messages': messages,
'model': self.model_name,
'top_p': top_p,
'temperature': temperature,
'max_tokens': max_tokens,
'do_sample': do_sample,
'function_call': kwargs.get('function_call', None),
'functions': kwargs.get('functions', [])
}
# print('messages:', messages)
# print('functions:', kwargs.get('functions', []))
if self.verbose:
logger.info('payload=%s', json.dumps(params, indent=2))
try:
resp = self.client.post(url=self.host_base_url, json=params)
if resp.text.startswith('data:'):
resp = json.loads(resp.text.replace('data:', ''))
else:
resp = resp.json()
except requests.exceptions.Timeout as exc:
raise ValueError(f'timeout in host llm infer, url=[{self.host_base_url}]') from exc
except Exception as e:
raise ValueError(f'exception in host llm infer: [{e}]') from e
if not resp.get('choices', []):
logger.info(resp)
raise ValueError(f'empty choices in llm chat result {resp}')
resp['usage'] = {}
return resp
return _completion_with_retry(**kwargs)
def _combine_llm_outputs(self, llm_outputs: List[Optional[dict]]) -> dict:
overall_token_usage: dict = {}
for output in llm_outputs:
if output is None:
# Happens in streaming
continue
token_usage = output['token_usage']
if token_usage is None:
continue
for k, v in token_usage.items():
if k in overall_token_usage:
overall_token_usage[k] += v
else:
overall_token_usage[k] = v
return {'token_usage': overall_token_usage, 'model_name': self.model_name}
def _generate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[CallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
'''用来处理同步请求'''
message_dicts, params = self._create_message_dicts(messages, stop)
params = {**params, **kwargs}
response = self.completion_with_retry(messages=message_dicts, **params)
return self._create_chat_result(response)
async def acompletion_with_retry(self, **kwargs: Any) -> Any:
"""Use tenacity to retry the async completion call."""
retry_decorator = _create_retry_decorator(self)
@retry_decorator
async def _acompletion_with_retry(**kwargs: Any) -> Any:
try:
async with self.client.apost(url=self.host_base_url, json=kwargs) as response:
if response.status != 200:
raise ValueError(f'Error: {response.status} contet: {response.text}')
async for txt in response.content.iter_any():
if b'\n' in txt:
for txt_ in txt.split(b'\n'):
yield txt_.decode('utf-8').strip()
else:
yield txt.decode('utf-8').strip()
except requests.exceptions.Timeout as exc:
raise ValueError(f'timeout in host llm infer, url=[{self.host_base_url}]') from exc
except Exception as e:
raise ValueError(f'exception in host llm infer: [{e}]') from e
text_haf = ''
async for response in _acompletion_with_retry(**kwargs):
is_error = False
if response:
if response.startswith('event:error'):
is_error = True
elif response.startswith('data:'):
text = response[len('data:'):].strip()
if text == '[DONE]':
break
try:
json.loads(text_haf + text)
yield (is_error, text_haf + text)
text_haf = ''
except Exception:
# 拆包了
if text_haf.startswith('{'):
text_haf = text
continue
logger.error(f'response_not_json response={response}')
if is_error:
break
elif response.startswith('{'):
yield (is_error, response)
else:
continue
async def _agenerate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
"""Generate chat completion with retry."""
message_dicts, params = self._create_message_dicts(messages, stop)
params = {**params, **kwargs}
if self.streaming and 'infer' not in self.host_base_url:
inner_completion = ''
role = 'assistant'
params['stream'] = True
function_call: Optional[dict] = None
async for is_error, stream_resp in self.acompletion_with_retry(messages=message_dicts,
**params):
output = json.loads(stream_resp)
if is_error:
logger.error(stream_resp)
raise ValueError(stream_resp)
choices = output.get('choices')
if choices:
for choice in choices:
role = choice['delta'].get('role', role)
token = choice['delta'].get('content', '')
inner_completion += token or ''
_function_call = choice['delta'].get('function_call')
if run_manager:
await run_manager.on_llm_new_token(token)
if _function_call:
if function_call is None:
function_call = _function_call
else:
function_call['arguments'] += _function_call['arguments']
message = _convert_dict_to_message({
'content': inner_completion,
'role': role if role is not None else 'assistant',
'function_call': function_call,
})
return ChatResult(generations=[ChatGeneration(message=message)])
else:
params['stream'] = False
response = [
response
async for _, response in self.acompletion_with_retry(messages=message_dicts,
**params)
]
response = json.loads(response[0])
return self._create_chat_result(response)
def _create_message_dicts(
self, messages: List[BaseMessage],
stop: Optional[List[str]]) -> Tuple[List[Dict[str, Any]], Dict[str, Any]]:
params = dict(self._client_params)
if stop is not None:
if 'stop' in params:
raise ValueError('`stop` found in both the input and default params.')
params['stop'] = stop
message_dicts = [_convert_message_to_dict(m) for m in messages]
return message_dicts, params
def _create_chat_result(self, response: Mapping[str, Any]) -> ChatResult:
generations = []
if 'choices' not in response:
raise Exception(f'LLM return error {response}')
for res in response['choices']:
message = _convert_dict_to_message(res['message'])
gen = ChatGeneration(message=message)
generations.append(gen)
llm_output = {'token_usage': response.get('usage'), 'model_name': self.model_name}
return ChatResult(generations=generations, llm_output=llm_output)
@property
def _identifying_params(self) -> Mapping[str, Any]:
"""Get the identifying parameters."""
return {**{'model_name': self.model_name}, **self._default_params}
@property
def _client_params(self) -> Mapping[str, Any]:
"""Get the parameters used for the client."""
minimaxai_creds: Dict[str, Any] = {
'model': self.model_name,
}
return {**minimaxai_creds, **self._default_params}
def _get_invocation_params(self,
stop: Optional[List[str]] = None,
**kwargs: Any) -> Dict[str, Any]:
"""Get the parameters used to invoke the model FOR THE CALLBACKS."""
return {
**super()._get_invocation_params(stop=stop, **kwargs),
**self._default_params,
'model': self.model_name,
'function': kwargs.get('functions'),
}
@property
def _llm_type(self) -> str:
"""Return type of chat model."""
return 'host_chat_llm'
def _get_encoding_model(self) -> Tuple[str, tiktoken.Encoding]:
tiktoken_ = _import_tiktoken()
if self.tiktoken_model_name is not None:
model = self.tiktoken_model_name
else:
model = self.model_name
# model chatglm-std, chatglm-lite
# Returns the number of tokens used by a list of messages.
try:
encoding = tiktoken_.encoding_for_model(model)
except KeyError:
logger.warning('Warning: model not found. Using cl100k_base encoding.')
model = 'cl100k_base'
encoding = tiktoken_.get_encoding(model)
return model, encoding
def get_token_ids(self, text: str) -> List[int]:
"""Get the tokens present in the text with tiktoken package."""
# tiktoken NOT supported for Python 3.7 or below
if sys.version_info[1] <= 7:
return super().get_token_ids(text)
_, encoding_model = self._get_encoding_model()
return encoding_model.encode(text)
def get_num_tokens_from_messages(self, messages: List[BaseMessage]) -> int:
"""Calculate num tokens for chatglm with tiktoken package.
todo: read chatglm document
Official documentation: https://github.com/openai/openai-cookbook/blob/
main/examples/How_to_format_inputs_to_ChatGPT_models.ipynb"""
if sys.version_info[1] <= 7:
return super().get_num_tokens_from_messages(messages)
model, encoding = self._get_encoding_model()
if model.startswith('chatglm'):
# every message follows {role/name}\n{content}\n
tokens_per_message = 4
# if there's a name, the role is omitted
tokens_per_name = -1
else:
raise NotImplementedError(
f'get_num_tokens_from_messages() is not presently implemented '
f'for model {model}.'
'See https://github.com/openai/openai-python/blob/main/chatml.md for '
'information on how messages are converted to tokens.')
num_tokens = 0
messages_dict = [_convert_message_to_dict(m) for m in messages]
for message in messages_dict:
num_tokens += tokens_per_message
for key, value in message.items():
num_tokens += len(encoding.encode(value))
if key == 'name':
num_tokens += tokens_per_name
# every reply is primed with assistant
num_tokens += 3
return num_tokens
class HostChatGLM(BaseHostChatLLM):
# chatglm2-12b, chatglm2-6b
model_name: str = Field('chatglm2-6b', alias='model')
temperature: float = 0.95
top_p: float = 0.7
max_tokens: int = 4096
@property
def _llm_type(self) -> str:
"""Return type of chat model."""
return 'chatglm'
class HostBaichuanChat(BaseHostChatLLM):
# Baichuan-7B-Chat, Baichuan-13B-Chat
model_name: str = Field('Baichuan-13B-Chat', alias='model')
temperature: float = 0.3
top_p: float = 0.85
max_tokens: int = 4096
@property
def _llm_type(self) -> str:
"""Return type of chat model."""
return 'baichuan_chat'
class HostQwenChat(BaseHostChatLLM):
# Qwen-7B-Chat
model_name: str = Field('Qwen-7B-Chat', alias='model')
temperature: float = 0
top_p: float = 1
max_tokens: int = 4096
@property
def _llm_type(self) -> str:
"""Return type of chat model."""
return 'qwen_chat'
class HostQwen1_5Chat(BaseHostChatLLM):
# Qwen-7B-Chat
model_name: str = Field('Qwen1.5-14B-Chat', alias='model')
temperature: float = 0
top_p: float = 1
max_tokens: int = 4096
@property
def _llm_type(self) -> str:
"""Return type of chat model."""
return 'qwen1.5_chat'
class HostLlama2Chat(BaseHostChatLLM):
# Llama-2-7b-chat-hf, Llama-2-13b-chat-hf, Llama-2-70b-chat-hf
model_name: str = Field('Llama-2-7b-chat-hf', alias='model')
temperature: float = 0.9
top_p: float = 0.6
max_tokens: int = 4096
@property
def _llm_type(self) -> str:
"""Return type of chat model."""
return 'llama2_chat'
class CustomLLMChat(BaseHostChatLLM):
# use custom llm chat api, api should compatiable with openai definition
model_name: str = Field('custom-llm-chat', alias='model')
temperature: float = 0.1
top_p: float = 0.1
max_tokens: int = 4096
host_base_url: str
@property
def _llm_type(self) -> str:
"""Return type of chat model."""
return 'custom_llm_chat'
class HostYuanChat(BaseHostChatLLM):
# use custom llm chat api, api should compatiable with openai definition
model_name: str = Field('Yuan2-2B-Janus-hf', alias='model')
temperature: float = 1
top_p: float = 0.9
max_tokens: int = 4096
host_base_url: str
@property
def _llm_type(self) -> str:
"""Return type of chat model."""
return 'yuan2'
class HostYiChat(BaseHostChatLLM):
# use custom llm chat api, api should compatiable with openai definition
model_name: str = Field('Yi-34B-Chat', alias='model')
temperature: float = 0.6
top_p: float = 0.8
max_tokens: int = 4096
host_base_url: str
@property
def _llm_type(self) -> str:
"""Return type of chat model."""
return 'yi_chat'
================================================
FILE: src/backend/bisheng_langchain/chat_models/interface/__init__.py
================================================
from .minimax import ChatCompletion as MinimaxChatCompletion
from .openai import ChatCompletion as OpenaiChatCompletion
from .wenxin import ChatCompletion as WenxinChatCompletion
from .xunfei import ChatCompletion as XunfeiChatCompletion
from .zhipuai import ChatCompletion as ZhipuaiChatCompletion
__all__ = [
'MinimaxChatCompletion', 'OpenaiChatCompletion', 'WenxinChatCompletion',
'XunfeiChatCompletion', 'ZhipuaiChatCompletion'
]
================================================
FILE: src/backend/bisheng_langchain/chat_models/interface/minimax.py
================================================
import json
import requests
from .types import ChatInput, ChatOutput, Choice, Message, Usage
from .utils import get_ts
class ChatCompletion(object):
def __init__(self, group_id, api_key, **kwargs):
ep_url = 'https://api.minimax.chat/v1/text/chatcompletion'
self.endpoint = f'{ep_url}?GroupId={group_id}'
self.headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
def parseChunkDelta(self, chunk):
decoded_data = chunk.decode('utf-8')
parsed_data = json.loads(decoded_data[6:])
delta_content = parsed_data['choices'][0]['delta']
return delta_content
def __call__(self, inp: ChatInput, verbose=False):
messages = inp.messages
model = inp.model
top_p = 0.95 if inp.top_p is None else inp.top_p
temperature = 0.9 if inp.temperature is None else inp.temperature
stream = False if inp.stream is None else inp.stream
max_tokens = 1024 if inp.max_tokens is None else inp.max_tokens
if abs(temperature) <= 1e-6:
temperature = 1e-6
chat_messages = messages
system_prompt = ('MM智能助理是一款由MinMax自研的,没有调用其他产品接口的大型语言'
'模型。MiniMax是一家中国科技公司,一直致力于进行大模型相关的研究。\n----\n')
if messages[0].role == 'system':
system_prompt = messages[0].content
chat_messages = messages[1:]
new_messages = []
for m in chat_messages:
role = 'USER'
if m.role == 'system' or m.role == 'assistant':
role = 'BOT'
new_messages.append({'sender_type': role, 'text': m.content})
# role_meta is given, prompt must is not empty
system_info = {}
if system_prompt:
system_info = {
'prompt': system_prompt,
'role_meta': {
'user_name': '用户',
'bot_name': 'MM智能助理'
}
}
payload = {
'model': model,
'stream': stream,
'use_standard_sse': True,
'messages': new_messages,
'temperature': temperature,
'top_p': top_p,
'tokens_to_generate': max_tokens
}
payload.update(system_info)
if verbose:
print('payload', payload)
response = requests.post(self.endpoint,
headers=self.headers,
json=payload)
req_type = 'chat.completion'
status_message = 'success'
status_code = response.status_code
created = get_ts()
choices = []
usage = Usage()
if status_code == 200:
try:
info = json.loads(response.text)
if info['base_resp']['status_code'] == 0:
created = info['created']
# reply = info['reply']
choices = []
for s in info['choices']:
index = s['index']
finish_reason = s['finish_reason']
msg = Message(role='assistant', content=s['text'])
cho = Choice(index=index,
message=msg,
finish_reason=finish_reason)
choices.append(cho)
total_tokens = info['usage']['total_tokens']
usage = Usage(total_tokens=total_tokens)
else:
status_code = info['base_resp']['status_code']
status_message = info['base_resp']['status_msg']
except Exception as e:
status_code = 401
status_message = str(e)
else:
status_code = 400
status_message = 'requests error'
if status_code != 200:
raise Exception(status_message)
return ChatOutput(status_code=status_code,
status_message=status_message,
model=model,
object=req_type,
created=created,
choices=choices,
usage=usage)
================================================
FILE: src/backend/bisheng_langchain/chat_models/interface/openai.py
================================================
# import json
import openai
from .types import ChatInput, ChatOutput, Choice, Usage
from .utils import get_ts
class ChatCompletion(object):
def __init__(self, api_key, proxy=None, **kwargs):
openai.api_key = api_key
openai.proxy = proxy
def __call__(self, inp: ChatInput, verbose=False):
messages = inp.messages
model = inp.model
top_p = 0.7 if inp.top_p is None else inp.top_p
temperature = 0.97 if inp.temperature is None else inp.temperature
# stream = False if inp.stream is None else inp.stream
max_tokens = 1024 if inp.max_tokens is None else inp.max_tokens
stop = None
if inp.stop is not None:
stop = inp.stop.split('||')
new_messages = [m.dict() for m in messages]
created = get_ts()
payload = {
'model': model,
'messages': new_messages,
'temperature': temperature,
'top_p': top_p,
'stop': stop,
'max_tokens': max_tokens,
}
if inp.functions:
payload.update({'functions': inp.functions})
if verbose:
print('payload', payload)
req_type = 'chat.completion'
status_message = 'success'
choices = []
usage = Usage()
try:
resp = openai.ChatCompletion.create(**payload)
status_code = 200
choices = []
for choice in resp['choices']:
cho = Choice(**choice)
choices.append(cho)
usage = Usage(**resp['usage'])
except Exception as e:
status_code = 400
status_message = str(e)
if status_code != 200:
raise Exception(status_message)
return ChatOutput(status_code=status_code,
status_message=status_message,
model=model,
object=req_type,
created=created,
choices=choices,
usage=usage)
================================================
FILE: src/backend/bisheng_langchain/chat_models/interface/types.py
================================================
from typing import Union, List
from pydantic import BaseModel
class Message(BaseModel):
role: str
content: str
class Function(BaseModel):
name: str
description: str
parameters: dict
class ChatInput(BaseModel):
model: str
messages: List[Message] = []
top_p: float = None
temperature: float = None
n: int = 1
stream: bool = False
stop: str = None
max_tokens: int = 256
functions: List[Function] = []
function_call: str = None
class Choice(BaseModel):
index: int
message: Message = None
finish_reason: str = 'stop'
class Usage(BaseModel):
prompt_tokens: int = 0
completion_tokens: int = 0
total_tokens: int = 0
class ChatOutput(BaseModel):
status_code: int
status_message: str = 'success'
id: str = None
object: str = None
model: str = None
created: int = None
choices: List[Choice] = []
usage: Usage = None
class CompletionsInput(BaseModel):
model: str
prompt: str
top_p: float = None
temperature: float = None
n: int = 1
stream: bool = True
stop: str = None
max_tokens: int = 256
================================================
FILE: src/backend/bisheng_langchain/chat_models/interface/utils.py
================================================
import time
def get_ts():
return round(time.time() * 1000)
================================================
FILE: src/backend/bisheng_langchain/chat_models/interface/wenxin.py
================================================
import json
import requests
from .types import ChatInput, ChatOutput, Choice, Message, Usage
from .utils import get_ts
def get_access_token(api_key, sec_key):
url = (f'https://aip.baidubce.com/oauth/2.0/token?'
f'grant_type=client_credentials'
f'&client_id={api_key}&client_secret={sec_key}')
payload = json.dumps('')
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, data=payload)
return response.json().get('access_token')
class ChatCompletion(object):
def __init__(self, api_key, sec_key, **kwargs):
self.api_key = api_key
self.sec_key = sec_key
self.ep_url = ('https://aip.baidubce.com/rpc/2.0/ai_custom/v1/'
'wenxinworkshop/chat/completions')
self.ep_url_pro = ('https://aip.baidubce.com/rpc/2.0/ai_custom/v1/'
'wenxinworkshop/chat/completions_pro')
self.ep_url_turbo = ('https://aip.baidubce.com/rpc/2.0/ai_custom/v1/'
'wenxinworkshop/chat/eb-instant')
# token = get_access_token(api_key, sec_key)
# self.endpoint = f"{self.ep_url}?access_token={token}"
self.headers = {'Content-Type': 'application/json'}
def __call__(self, inp: ChatInput, verbose=False):
messages = inp.messages
model = inp.model
top_p = 0.8 if inp.top_p is None else inp.top_p
temperature = 0.95 if inp.temperature is None else inp.temperature
stream = False if inp.stream is None else inp.stream
# max_tokens = 1024 if inp.max_tokens is None else inp.max_tokens
system_content = ''
new_messages = []
for m in messages:
role = m.role
if role == 'system':
system_content = m.content
continue
new_messages.append({'role': role, 'content': m.content})
if system_content:
new_messages[-1]['content'] = system_content + '\n' + new_messages[
-1]['content']
payload = {
'stream': stream,
'messages': new_messages,
'temperature': temperature,
'top_p': top_p
}
if verbose:
print('payload', payload)
token = get_access_token(self.api_key, self.sec_key)
endpoint = f'{self.ep_url}?access_token={token}'
if model == 'ernie-bot-turbo':
endpoint = f'{self.ep_url_turbo}?access_token={token}'
elif model == 'ernie-bot-4':
endpoint = f'{self.ep_url_pro}?access_token={token}'
response = requests.post(endpoint, headers=self.headers, json=payload)
req_type = 'chat.completion'
status_message = 'success'
status_code = response.status_code
created = get_ts()
choices = []
usage = Usage()
if status_code == 200:
try:
info = json.loads(response.text)
status_code = info.get('error_code', 200)
status_message = info.get('error_msg', status_message)
if status_code == 200:
created = info['created']
result = info['result']
finish_reason = 'default'
msg = Message(role='assistant', content=result)
choices = [
Choice(index=0,
message=msg,
finish_reason=finish_reason)
]
usage = Usage(**info['usage'])
except Exception as e:
status_code = 401
status_message = str(e)
else:
status_code = 400
status_message = 'requests error'
if status_code != 200:
raise Exception(status_message)
return ChatOutput(status_code=status_code,
status_message=status_message,
model=model,
object=req_type,
created=created,
choices=choices,
usage=usage)
================================================
FILE: src/backend/bisheng_langchain/chat_models/interface/xunfei.py
================================================
import base64
import hashlib
import hmac
import json
# import ssl
# import threading
from datetime import datetime
from time import mktime
from urllib.parse import urlencode, urlparse
from wsgiref.handlers import format_date_time
import websocket
from websocket import create_connection
import _thread as thread
from .types import ChatInput, ChatOutput, Choice, Message, Usage
from .utils import get_ts
class Ws_Param(object):
# 初始化
def __init__(self, APPID, APIKey, APISecret, gpt_url):
self.APPID = APPID
self.APIKey = APIKey
self.APISecret = APISecret
self.host = urlparse(gpt_url).netloc
self.path = urlparse(gpt_url).path
self.gpt_url = gpt_url
# 生成url
def create_url(self):
# 生成RFC1123格式的时间戳
now = datetime.now()
date = format_date_time(mktime(now.timetuple()))
# 拼接字符串
signature_origin = 'host: ' + self.host + '\n'
signature_origin += 'date: ' + date + '\n'
signature_origin += 'GET ' + self.path + ' HTTP/1.1'
# 进行hmac-sha256进行加密
signature_sha = hmac.new(
self.APISecret.encode('utf-8'),
signature_origin.encode('utf-8'),
digestmod=hashlib.sha256).digest()
signature_sha_base64 = base64.b64encode(
signature_sha).decode(encoding='utf-8')
authorization_origin = (
f'api_key="{self.APIKey}", '
f'algorithm="hmac-sha256", headers="host date request-line",'
f' signature="{signature_sha_base64}"')
authorization = base64.b64encode(
authorization_origin.encode('utf-8')).decode(encoding='utf-8')
# 将请求的鉴权参数组合为字典
v = {
'authorization': authorization,
'date': date,
'host': self.host
}
# 拼接鉴权参数,生成url
url = self.gpt_url + '?' + urlencode(v)
# 此处打印出建立连接时候的url,参考本demo的时候可取消上方打印的注释,
# 比对相同参数时生成的url与自己代码生成的url是否一致
return url
# 收到websocket错误的处理
def on_error(ws, error):
print('### error:', error)
# 收到websocket关闭的处理
def on_close(ws):
print('### closed ###')
# 收到websocket连接建立的处理
def on_open(ws):
thread.start_new_thread(run, (ws,))
def run(ws, *args):
data = json.dumps(gen_params(appid=ws.appid, question=ws.question))
ws.send(data)
# 收到websocket消息的处理
def on_message(ws, message):
print(message)
data = json.loads(message)
code = data['header']['code']
if code != 0:
print(f'请求错误: {code}, {data}')
ws.close()
else:
choices = data['payload']['choices']
status = choices['status']
content = choices['text'][0]['content']
print(content, end='')
if status == 2:
ws.close()
def gen_params(appid, question):
data = {
'header': {
'app_id': appid,
'uid': '1234'
},
'parameter': {
'chat': {
'domain': 'general',
'random_threshold': 0.5,
'max_tokens': 2048,
'auditing': 'default'
}
},
'payload': {
'message': {
'text': [
{'role': 'user', 'content': question}
]
}
}
}
return data
class ChatCompletion(object):
def __init__(self, appid, api_key, api_secret, **kwargs):
gpt_url1 = 'ws://spark-api.xf-yun.com/v1.1/chat'
gpt_url2 = 'ws://spark-api.xf-yun.com/v2.1/chat'
gpt_url3 = 'ws://spark-api.xf-yun.com/v3.1/chat'
self.wsParam1 = Ws_Param(appid, api_key, api_secret, gpt_url1)
self.wsParam2 = Ws_Param(appid, api_key, api_secret, gpt_url2)
self.wsParam3 = Ws_Param(appid, api_key, api_secret, gpt_url3)
websocket.enableTrace(False)
# todo: modify to the ws pool
# self.ws = websocket.WebSocket()
# self.ws.connect(self.wsUrl)
# self.mutex = threading.Lock()
self.header = {'app_id': appid, 'uid': 'elem'}
def __del__(self):
pass
# self.ws.close()
def __call__(self, inp: ChatInput, verbose=False):
messages = inp.messages
model = inp.model
# top_p = 0.7 if inp.top_p is None else inp.top_p
temperature = 0.5 if inp.temperature is None else inp.temperature
# stream = False if inp.stream is None else inp.stream
max_tokens = 1024 if inp.max_tokens is None else inp.max_tokens
# stop = None
# if inp.stop is not None:
# stop = inp.stop.split('||')
new_messages = []
for m in messages:
role = m.role
if role == 'system':
role = 'user'
new_messages.append({'role': role, 'content': m.content})
domain = 'general'
if model == 'spark-v2.0':
domain = 'generalv2'
elif model == 'spark-v3.0':
domain = 'generalv3'
created = get_ts()
payload = {
'header': self.header,
'payload': {'message': {'text': new_messages}},
'parameter': {
'chat': {
'domain': domain,
'temperature': temperature,
'max_tokens': max_tokens,
'auditing': 'default'
}
}
}
if verbose:
print('payload', payload)
req_type = 'chat.completion'
status_code = 200
status_message = 'success'
choices = []
usage = Usage()
texts = []
ws = None
try:
# self.mutex.acquire()
if model == 'spark-v2.0':
wsUrl = self.wsParam2.create_url()
elif model == 'spark-v3.0':
wsUrl = self.wsParam3.create_url()
else:
wsUrl = self.wsParam1.create_url()
ws = create_connection(wsUrl)
ws.send(json.dumps(payload))
texts = []
while True:
raw_data = ws.recv()
if not raw_data:
break
resp = json.loads(raw_data)
if resp['header']['code'] == 0:
texts.append(
resp['payload']['choices']['text'][0]['content'])
if resp['header']['code'] == 0 and resp['header']['status'] == 2:
usage_dict = resp['payload']['usage']['text']
usage_dict.pop('question_tokens')
usage = Usage(**usage_dict)
except Exception as e:
print('exception', e)
status_code = 401
status_message = str(e)
finally:
if ws:
ws.close()
# self.mutex.release()
if texts:
finish_reason = 'default'
msg = Message(role='assistant', content=''.join(texts))
cho = Choice(index=0, message=msg,
finish_reason=finish_reason)
choices.append(cho)
return ChatOutput(
status_code=status_code,
status_message=status_message,
model=model, object=req_type, created=created,
choices=choices, usage=usage)
================================================
FILE: src/backend/bisheng_langchain/chat_models/interface/zhipuai.py
================================================
# import json
import zhipuai
from .types import ChatInput, ChatOutput, Choice, Message, Usage
from .utils import get_ts
class ChatCompletion(object):
def __init__(self, api_key, **kwargs):
zhipuai.api_key = api_key
def __call__(self, inp: ChatInput, verbose=False):
messages = inp.messages
model = inp.model
top_p = 0.7 if inp.top_p is None else inp.top_p
temperature = 0.95 if inp.temperature is None else inp.temperature
# stream = False if inp.stream is None else inp.stream
# max_tokens = 1024 if inp.max_tokens is None else inp.max_tokens
new_messages = []
system_content = ''
for m in messages:
content = m.content
role = m.role
if role == 'system':
system_content += content
continue
new_messages.append({'role': role, 'content': content})
if system_content:
new_messages[-1]['content'] = (system_content +
new_messages[-1]['content'])
created = get_ts()
payload = {
'model': model,
'prompt': new_messages,
'temperature': temperature,
'top_p': top_p,
'request_id': str(created),
'incremental': False
}
if verbose:
print('payload', payload)
req_type = 'chat.completion'
status_message = 'success'
choices = []
usage = Usage()
try:
resp = zhipuai.model_api.invoke(**payload)
status_code = resp['code']
status_message = resp['msg']
if status_code == 200:
choices = []
for index, choice in enumerate(resp['data']['choices']):
finish_reason = 'default'
msg = Message(**choice)
cho = Choice(index=index,
message=msg,
finish_reason=finish_reason)
choices.append(cho)
usage = Usage(**resp['data']['usage'])
except Exception as e:
status_code = 400
status_message = str(e)
if status_code != 200:
raise Exception(status_message)
return ChatOutput(status_code=status_code,
status_message=status_message,
model=model,
object=req_type,
created=created,
choices=choices,
usage=usage)
================================================
FILE: src/backend/bisheng_langchain/chat_models/minimax.py
================================================
"""proxy llm chat wrapper."""
from __future__ import annotations
import logging
import sys
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Mapping, Optional, Tuple, Union
# import requests
from langchain.callbacks.manager import AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun
from langchain.chat_models.base import BaseChatModel
from langchain.schema import ChatGeneration, ChatResult
from langchain.schema.messages import (AIMessage, BaseMessage, ChatMessage, FunctionMessage,
HumanMessage, SystemMessage)
from langchain.utils import get_from_dict_or_env
from pydantic import ConfigDict, model_validator, Field
from tenacity import (before_sleep_log, retry, retry_if_exception_type, stop_after_attempt,
wait_exponential)
from .interface import MinimaxChatCompletion
from .interface.types import ChatInput
if TYPE_CHECKING:
import tiktoken
logger = logging.getLogger(__name__)
def _import_tiktoken() -> Any:
try:
import tiktoken
except ImportError:
raise ValueError('Could not import tiktoken python package. '
'This is needed in order to calculate get_token_ids. '
'Please install it with `pip install tiktoken`.')
return tiktoken
def _create_retry_decorator(llm: ChatMinimaxAI) -> Callable[[Any], Any]:
min_seconds = 1
max_seconds = 20
# Wait 2^x * 1 second between each retry starting with
# 4 seconds, then up to 10 seconds, then 10 seconds afterwards
return retry(
reraise=True,
stop=stop_after_attempt(llm.max_retries),
wait=wait_exponential(multiplier=1, min=min_seconds, max=max_seconds),
retry=(retry_if_exception_type(Exception)),
before_sleep=before_sleep_log(logger, logging.WARNING),
)
def _convert_dict_to_message(_dict: Mapping[str, Any]) -> BaseMessage:
role = _dict['role']
if role == 'user':
return HumanMessage(content=_dict['content'])
elif role == 'assistant':
content = _dict['content'] or '' # OpenAI returns None for tool invocations
if _dict.get('function_call'):
additional_kwargs = {'function_call': dict(_dict['function_call'])}
else:
additional_kwargs = {}
return AIMessage(content=content, additional_kwargs=additional_kwargs)
elif role == 'system':
return SystemMessage(content=_dict['content'])
elif role == 'function':
return FunctionMessage(content=_dict['content'], name=_dict['name'])
else:
return ChatMessage(content=_dict['content'], role=role)
def _convert_message_to_dict(message: BaseMessage) -> dict:
if isinstance(message, ChatMessage):
message_dict = {'role': message.role, 'content': message.content}
elif isinstance(message, HumanMessage):
message_dict = {'role': 'user', 'content': message.content}
elif isinstance(message, AIMessage):
message_dict = {'role': 'assistant', 'content': message.content}
if 'function_call' in message.additional_kwargs:
message_dict['function_call'] = message.additional_kwargs['function_call']
elif isinstance(message, SystemMessage):
message_dict = {'role': 'system', 'content': message.content}
elif isinstance(message, FunctionMessage):
message_dict = {
'role': 'function',
'content': message.content,
'name': message.name,
}
else:
raise ValueError(f'Got unknown type {message}')
if 'name' in message.additional_kwargs:
message_dict['name'] = message.additional_kwargs['name']
return message_dict
class ChatMinimaxAI(BaseChatModel):
"""Wrapper around proxy Chat large language models.
To use, the environment variable ``ELEMAI_API_KEY`` set with your API key.
Example:
.. code-block:: python
from bisheng_langchain.chat_models import ChatMinimaxAI
chat_miniamaxai = ChatMinimaxAI(model_name="abab5.5-chat")
"""
client: Optional[Any] #: :meta private:
"""Model name to use."""
model_name: str = Field('abab5.5-chat', alias='model')
temperature: float = 0.9
top_p: float = 0.95
"""What sampling temperature to use."""
model_kwargs: Optional[Dict[str, Any]] = Field(default_factory=dict)
"""Holds any model parameters valid for `create` call not explicitly specified."""
minimaxai_api_key: Optional[str] = None
minimaxai_group_id: Optional[str] = None
headers: Optional[Dict[str, str]] = Field(default_factory=dict)
request_timeout: Optional[Union[float, Tuple[float, float]]] = None
"""Timeout for requests to OpenAI completion API. Default is 600 seconds."""
max_retries: Optional[int] = 6
"""Maximum number of retries to make when generating."""
streaming: Optional[bool] = False
"""Whether to stream the results or not."""
n: Optional[int] = 1
"""Number of chat completions to generate for each prompt."""
max_tokens: Optional[int] = 1024
"""Maximum number of tokens to generate."""
tiktoken_model_name: Optional[str] = None
"""The model name to pass to tiktoken when using this class.
Tiktoken is used to count the number of tokens in documents to constrain
them to be under a certain limit. By default, when set to None, this will
be the same as the embedding model name. However, there are some cases
where you may want to use this Embedding class with a model name not
supported by tiktoken. This can include when using Azure embeddings or
when using one of the many model providers that expose an OpenAI-like
API but with different models. In those cases, in order to avoid erroring
when tiktoken is called, you can specify a model name to use here."""
verbose: Optional[bool] = False
model_config = ConfigDict(validate_by_name=True)
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
values['minimaxai_api_key'] = get_from_dict_or_env(values, 'minimaxai_api_key',
'MINIMAXAI_API_KEY')
values['minimaxai_group_id'] = get_from_dict_or_env(values, 'minimaxai_group_id',
'MINIMAXAI_GROUP_ID')
api_key = values['minimaxai_api_key']
group_id = values['minimaxai_group_id']
try:
values['client'] = MinimaxChatCompletion(group_id, api_key)
except AttributeError:
raise ValueError('Try upgrading it with `pip install --upgrade requests`.')
return values
@property
def _default_params(self) -> Dict[str, Any]:
"""Get the default parameters for calling ChatMinimaxAI API."""
return {
'model': self.model_name,
'temperature': self.temperature,
'top_p': self.top_p,
'max_tokens': self.max_tokens,
**self.model_kwargs,
}
def completion_with_retry(self, **kwargs: Any) -> Any:
retry_decorator = _create_retry_decorator(self)
@retry_decorator
def _completion_with_retry(**kwargs: Any) -> Any:
messages = kwargs.get('messages')
temperature = kwargs.get('temperature')
top_p = kwargs.get('top_p')
max_tokens = kwargs.get('max_tokens')
params = {
'messages': messages,
'model': self.model_name,
'top_p': top_p,
'temperature': temperature,
'max_tokens': max_tokens
}
return self.client(ChatInput.parse_obj(params), self.verbose).dict()
return _completion_with_retry(**kwargs)
def _combine_llm_outputs(self, llm_outputs: List[Optional[dict]]) -> dict:
overall_token_usage: dict = {}
for output in llm_outputs:
if output is None:
# Happens in streaming
continue
token_usage = output['token_usage']
if token_usage is None:
continue
for k, v in token_usage.items():
if k in overall_token_usage:
overall_token_usage[k] += v
else:
overall_token_usage[k] = v
return {'token_usage': overall_token_usage, 'model_name': self.model_name}
def _generate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[CallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
message_dicts, params = self._create_message_dicts(messages, stop)
params = {**params, **kwargs}
response = self.completion_with_retry(messages=message_dicts, **params)
return self._create_chat_result(response)
async def _agenerate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
return self._generate(messages, stop, run_manager, **kwargs)
def _create_message_dicts(
self, messages: List[BaseMessage],
stop: Optional[List[str]]) -> Tuple[List[Dict[str, Any]], Dict[str, Any]]:
params = dict(self._client_params)
if stop is not None:
if 'stop' in params:
raise ValueError('`stop` found in both the input and default params.')
params['stop'] = stop
message_dicts = [_convert_message_to_dict(m) for m in messages]
return message_dicts, params
def _create_chat_result(self, response: Mapping[str, Any]) -> ChatResult:
generations = []
for res in response['choices']:
message = _convert_dict_to_message(res['message'])
gen = ChatGeneration(message=message)
generations.append(gen)
llm_output = {'token_usage': response['usage'], 'model_name': self.model_name}
return ChatResult(generations=generations, llm_output=llm_output)
@property
def _identifying_params(self) -> Mapping[str, Any]:
"""Get the identifying parameters."""
return {**{'model_name': self.model_name}, **self._default_params}
@property
def _client_params(self) -> Mapping[str, Any]:
"""Get the parameters used for the client."""
minimaxai_creds: Dict[str, Any] = {
'model': self.model_name,
}
return {**minimaxai_creds, **self._default_params}
def _get_invocation_params(self,
stop: Optional[List[str]] = None,
**kwargs: Any) -> Dict[str, Any]:
"""Get the parameters used to invoke the model FOR THE CALLBACKS."""
return {
**super()._get_invocation_params(stop=stop, **kwargs),
**self._default_params,
'model': self.model_name,
'function': kwargs.get('functions'),
}
@property
def _llm_type(self) -> str:
"""Return type of chat model."""
return 'minimaxai_chat'
def _get_encoding_model(self) -> Tuple[str, tiktoken.Encoding]:
tiktoken_ = _import_tiktoken()
if self.tiktoken_model_name is not None:
model = self.tiktoken_model_name
else:
model = self.model_name
# model chatglm-std, chatglm-lite
# Returns the number of tokens used by a list of messages.
try:
encoding = tiktoken_.encoding_for_model(model)
except KeyError:
logger.warning('Warning: model not found. Using cl100k_base encoding.')
model = 'cl100k_base'
encoding = tiktoken_.get_encoding(model)
return model, encoding
def get_token_ids(self, text: str) -> List[int]:
"""Get the tokens present in the text with tiktoken package."""
# tiktoken NOT supported for Python 3.7 or below
if sys.version_info[1] <= 7:
return super().get_token_ids(text)
_, encoding_model = self._get_encoding_model()
return encoding_model.encode(text)
def get_num_tokens_from_messages(self, messages: List[BaseMessage]) -> int:
"""Calculate num tokens for chatglm with tiktoken package.
todo: read chatglm document
Official documentation: https://github.com/openai/openai-cookbook/blob/
main/examples/How_to_format_inputs_to_ChatGPT_models.ipynb"""
if sys.version_info[1] <= 7:
return super().get_num_tokens_from_messages(messages)
model, encoding = self._get_encoding_model()
if model.startswith('chatglm'):
# every message follows {role/name}\n{content}\n
tokens_per_message = 4
# if there's a name, the role is omitted
tokens_per_name = -1
else:
raise NotImplementedError(
f'get_num_tokens_from_messages() is not presently implemented '
f'for model {model}.'
'See https://github.com/openai/openai-python/blob/main/chatml.md for '
'information on how messages are converted to tokens.')
num_tokens = 0
messages_dict = [_convert_message_to_dict(m) for m in messages]
for message in messages_dict:
num_tokens += tokens_per_message
for key, value in message.items():
num_tokens += len(encoding.encode(value))
if key == 'name':
num_tokens += tokens_per_name
# every reply is primed with assistant
num_tokens += 3
return num_tokens
================================================
FILE: src/backend/bisheng_langchain/chat_models/proxy_llm.py
================================================
"""proxy llm chat wrapper."""
from __future__ import annotations
import json
import logging
import sys
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Mapping, Optional, Tuple, Union
from pydantic import ConfigDict, model_validator, Field
from bisheng_langchain.utils import requests
from langchain.callbacks.manager import AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun
from langchain.chat_models.base import BaseChatModel
from langchain.schema import ChatGeneration, ChatResult
from langchain.schema.messages import (AIMessage, BaseMessage, ChatMessage, FunctionMessage,
HumanMessage, SystemMessage)
from langchain.utils import get_from_dict_or_env
from tenacity import (before_sleep_log, retry, retry_if_exception_type, stop_after_attempt,
wait_exponential)
if TYPE_CHECKING:
import tiktoken
logger = logging.getLogger(__name__)
def _import_tiktoken() -> Any:
try:
import tiktoken
except ImportError:
raise ValueError('Could not import tiktoken python package. '
'This is needed in order to calculate get_token_ids. '
'Please install it with `pip install tiktoken`.')
return tiktoken
def _create_retry_decorator(llm: ProxyChatLLM) -> Callable[[Any], Any]:
min_seconds = 1
max_seconds = 20
# Wait 2^x * 1 second between each retry starting with
# 4 seconds, then up to 10 seconds, then 10 seconds afterwards
return retry(
reraise=True,
stop=stop_after_attempt(llm.max_retries),
wait=wait_exponential(multiplier=1, min=min_seconds, max=max_seconds),
retry=(retry_if_exception_type(Exception)),
before_sleep=before_sleep_log(logger, logging.WARNING),
)
def _convert_dict_to_message(_dict: Mapping[str, Any]) -> BaseMessage:
role = _dict['role']
if role == 'user':
return HumanMessage(content=_dict['content'])
elif role == 'assistant':
content = _dict['content'] or '' # OpenAI returns None for tool invocations
if _dict.get('function_call'):
additional_kwargs = {'function_call': dict(_dict['function_call'])}
else:
additional_kwargs = {}
return AIMessage(content=content, additional_kwargs=additional_kwargs)
elif role == 'system':
return SystemMessage(content=_dict['content'])
elif role == 'function':
return FunctionMessage(content=_dict['content'], name=_dict['name'])
else:
return ChatMessage(content=_dict['content'], role=role)
def _convert_message_to_dict(message: BaseMessage) -> dict:
if isinstance(message, ChatMessage):
message_dict = {'role': message.role, 'content': message.content}
elif isinstance(message, HumanMessage):
message_dict = {'role': 'user', 'content': message.content}
elif isinstance(message, AIMessage):
message_dict = {'role': 'assistant', 'content': message.content}
if 'function_call' in message.additional_kwargs:
message_dict['function_call'] = message.additional_kwargs['function_call']
elif isinstance(message, SystemMessage):
message_dict = {'role': 'system', 'content': message.content}
elif isinstance(message, FunctionMessage):
message_dict = {
'role': 'function',
'content': message.content,
'name': message.name,
}
else:
raise ValueError(f'Got unknown type {message}')
if 'name' in message.additional_kwargs:
message_dict['name'] = message.additional_kwargs['name']
return message_dict
class ProxyChatLLM(BaseChatModel):
"""Wrapper around proxy Chat large language models.
To use, the environment variable ``ELEMAI_API_KEY`` set with your API key.
Example:
.. code-block:: python
from bisheng_langchain.chat_models import ProxyChatLLM
proxy_chat_llm = ProxyChatLLM(model_name="chatglm_std")
"""
client: Optional[Any] #: :meta private:
"""Model name to use."""
model_name: str = Field('chatglm_std', alias='model')
temperature: float = 0.7
top_p: float = 0.9
"""What sampling temperature to use."""
model_kwargs: Optional[Dict[str, Any]] = Field(default_factory=dict)
"""Holds any model parameters valid for `create` call not explicitly specified."""
elemai_api_key: Optional[str] = None
elemai_base_url: Optional[str] = None
headers: Optional[Dict[str, str]] = Field(default_factory=dict)
request_timeout: Optional[Union[float, Tuple[float, float]]] = None
"""Timeout for requests to OpenAI completion API. Default is 600 seconds."""
max_retries: Optional[int] = 0
"""Maximum number of retries to make when generating."""
streaming: Optional[bool] = False
"""Whether to stream the results or not."""
n: Optional[int] = 1
"""Number of chat completions to generate for each prompt."""
max_tokens: Optional[int] = 2048
"""Maximum number of tokens to generate."""
tiktoken_model_name: Optional[str] = None
"""The model name to pass to tiktoken when using this class.
Tiktoken is used to count the number of tokens in documents to constrain
them to be under a certain limit. By default, when set to None, this will
be the same as the embedding model name. However, there are some cases
where you may want to use this Embedding class with a model name not
supported by tiktoken. This can include when using Azure embeddings or
when using one of the many model providers that expose an OpenAI-like
API but with different models. In those cases, in order to avoid erroring
when tiktoken is called, you can specify a model name to use here."""
model_config = ConfigDict(validate_by_name=True)
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
values['elemai_api_key'] = get_from_dict_or_env(values, 'elemai_api_key', 'ELEMAI_API_KEY')
values['elemai_base_url'] = get_from_dict_or_env(values, 'elemai_base_url',
'ELEMAI_BASE_URL')
elemai_api_key = values['elemai_api_key']
values['headers'] = {
'Authorization': f'Bearer {elemai_api_key}',
'Content-Type': 'application/json'
}
try:
values['client'] = requests.Requests(headers=values['headers'])
except AttributeError:
raise ValueError('Try upgrading it with `pip install --upgrade requests`.')
return values
@property
def _default_params(self) -> Dict[str, Any]:
"""Get the default parameters for calling ProxyChatLLM API."""
self.client.request_timeout = self.request_timeout
return {
'model': self.model_name,
'temperature': self.temperature,
'top_p': self.top_p,
'max_tokens': self.max_tokens,
**self.model_kwargs,
}
def completion_with_retry(self, **kwargs: Any) -> Any:
retry_decorator = _create_retry_decorator(self)
@retry_decorator
def _completion_with_retry(**kwargs: Any) -> Any:
messages = kwargs.get('messages')
temperature = kwargs.get('temperature')
top_p = kwargs.get('top_p')
max_tokens = kwargs.get('max_tokens')
params = {
'messages':
messages,
'model':
self.model_name,
'top_p':
top_p,
'temperature':
temperature,
'max_tokens':
max_tokens,
**({
'stop': kwargs.get('stop')
} if kwargs.get('stop', None) is not None else {}),
**({
'function_call': kwargs.get('function_call')
} if kwargs.get('function_call', None) is not None else {}),
**({
'functions': kwargs.get('functions')
} if kwargs.get('functions', None) is not None else {})
}
response = self.client.post(self.elemai_base_url, json=params)
return response.json()
rsp_dict = _completion_with_retry(**kwargs)
if 200 != rsp_dict.get('status_code', 200):
logger.error(f'proxy_llm_error resp={rsp_dict}')
raise Exception(rsp_dict)
return rsp_dict
def _combine_llm_outputs(self, llm_outputs: List[Optional[dict]]) -> dict:
overall_token_usage: dict = {}
for output in llm_outputs:
if output is None:
# Happens in streaming
continue
token_usage = output['token_usage']
for k, v in token_usage.items():
if k in overall_token_usage:
overall_token_usage[k] += v
else:
overall_token_usage[k] = v
return {'token_usage': overall_token_usage, 'model_name': self.model_name}
def _generate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[CallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
message_dicts, params = self._create_message_dicts(messages, stop)
params = {**params, **kwargs}
response = self.completion_with_retry(messages=message_dicts, **params)
return self._create_chat_result(response)
async def acompletion_with_retry(self, **kwargs: Any) -> Any:
"""Use tenacity to retry the async completion call."""
retry_decorator = _create_retry_decorator(self)
@retry_decorator
async def _acompletion_with_retry(**kwargs: Any) -> Any:
# Use OpenAI's async api https://github.com/openai/openai-python#async-api
async with self.client.apost(url=self.elemai_base_url, json=kwargs) as response:
async for txt in response.content.iter_any():
if b'\n' in txt:
for txt_ in txt.split(b'\n'):
yield txt_.decode('utf-8').strip()
else:
yield txt.decode('utf-8').strip()
async for response in _acompletion_with_retry(**kwargs):
if response:
yield json.loads(response)
async def _agenerate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
message_dicts, params = self._create_message_dicts(messages, stop)
params = {**params, **kwargs}
if self.streaming:
inner_completion = ''
role = 'assistant'
params['stream'] = True
function_call: Optional[dict] = None
async for stream_resp in self.acompletion_with_retry(messages=message_dicts, **params):
role = stream_resp['choices'][0]['delta'].get('role') or role
token = stream_resp['choices'][0]['delta'].get('content', '')
inner_completion += token or ''
_function_call = stream_resp['choices'][0]['delta'].get('function_call')
if _function_call:
if function_call is None:
function_call = _function_call
else:
function_call['arguments'] += _function_call['arguments']
if run_manager:
await run_manager.on_llm_new_token(token)
message = _convert_dict_to_message({
'content': inner_completion,
'role': role,
'function_call': function_call,
})
return ChatResult(generations=[ChatGeneration(message=message)])
else:
response = [
item
async for item in self.acompletion_with_retry(messages=message_dicts, **params)
]
return self._create_chat_result(response[0])
def _create_message_dicts(
self, messages: List[BaseMessage],
stop: Optional[List[str]]) -> Tuple[List[Dict[str, Any]], Dict[str, Any]]:
params = dict(self._client_params)
if stop is not None:
if 'stop' in params:
raise ValueError('`stop` found in both the input and default params.')
params['stop'] = stop
message_dicts = [_convert_message_to_dict(m) for m in messages]
return message_dicts, params
def _create_chat_result(self, response: Mapping[str, Any]) -> ChatResult:
generations = []
if 'choices' not in response:
raise Exception(f'LLM return error {response}')
for res in response['choices']:
message = _convert_dict_to_message(res['message'])
gen = ChatGeneration(message=message)
generations.append(gen)
llm_output = {'token_usage': response['usage'], 'model_name': self.model_name}
return ChatResult(generations=generations, llm_output=llm_output)
@property
def _identifying_params(self) -> Mapping[str, Any]:
"""Get the identifying parameters."""
return {**{'model_name': self.model_name}, **self._default_params}
@property
def _client_params(self) -> Mapping[str, Any]:
"""Get the parameters used for the elemai client."""
elemai_creds: Dict[str, Any] = {
'api_key': self.elemai_api_key,
'base_url': self.elemai_base_url,
'model': self.model_name,
}
return {**elemai_creds, **self._default_params}
def _get_invocation_params(self,
stop: Optional[List[str]] = None,
**kwargs: Any) -> Dict[str, Any]:
"""Get the parameters used to invoke the model FOR THE CALLBACKS."""
return {
**super()._get_invocation_params(stop=stop, **kwargs),
**self._default_params,
'model': self.model_name,
'function': kwargs.get('functions'),
}
@property
def _llm_type(self) -> str:
"""Return type of chat model."""
return 'proxy-chat'
def _get_encoding_model(self) -> Tuple[str, tiktoken.Encoding]:
tiktoken_ = _import_tiktoken()
if self.tiktoken_model_name is not None:
model = self.tiktoken_model_name
else:
model = self.model_name
# model chatglm-std, chatglm-lite
# Returns the number of tokens used by a list of messages.
try:
encoding = tiktoken_.encoding_for_model(model)
except KeyError:
logger.warning('Warning: model not found. Using cl100k_base encoding.')
model = 'cl100k_base'
encoding = tiktoken_.get_encoding(model)
return model, encoding
def get_token_ids(self, text: str) -> List[int]:
"""Get the tokens present in the text with tiktoken package."""
# tiktoken NOT supported for Python 3.7 or below
if sys.version_info[1] <= 7:
return super().get_token_ids(text)
_, encoding_model = self._get_encoding_model()
return encoding_model.encode(text)
def get_num_tokens_from_messages(self, messages: List[BaseMessage]) -> int:
"""Calculate num tokens for chatglm with tiktoken package.
todo: read chatglm document
Official documentation: https://github.com/openai/openai-cookbook/blob/
main/examples/How_to_format_inputs_to_ChatGPT_models.ipynb"""
if sys.version_info[1] <= 7:
return super().get_num_tokens_from_messages(messages)
model, encoding = self._get_encoding_model()
if model.startswith('chatglm'):
# every message follows {role/name}\n{content}\n
tokens_per_message = 4
# if there's a name, the role is omitted
tokens_per_name = -1
else:
raise NotImplementedError(
f'get_num_tokens_from_messages() is not presently implemented '
f'for model {model}.'
'See https://github.com/openai/openai-python/blob/main/chatml.md for '
'information on how messages are converted to tokens.')
num_tokens = 0
messages_dict = [_convert_message_to_dict(m) for m in messages]
for message in messages_dict:
num_tokens += tokens_per_message
for key, value in message.items():
num_tokens += len(encoding.encode(value))
if key == 'name':
num_tokens += tokens_per_name
# every reply is primed with assistant
num_tokens += 3
return num_tokens
================================================
FILE: src/backend/bisheng_langchain/chat_models/qwen.py
================================================
"""proxy llm chat wrapper."""
from __future__ import annotations
import copy
import json
import logging
import sys
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Mapping, Optional, Tuple, Union
from pydantic import ConfigDict, model_validator, Field
from bisheng_langchain.utils.requests import Requests
# import requests
from langchain.callbacks.manager import AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun
from langchain.chat_models.base import BaseChatModel
from langchain.schema import ChatGeneration, ChatResult
from langchain.schema.messages import (AIMessage, BaseMessage, ChatMessage, FunctionMessage,
HumanMessage, SystemMessage, ToolMessage)
from langchain.utils import get_from_dict_or_env
from tenacity import (before_sleep_log, retry, retry_if_exception_type, stop_after_attempt,
wait_exponential)
if TYPE_CHECKING:
import tiktoken
logger = logging.getLogger(__name__)
def _import_tiktoken() -> Any:
try:
import tiktoken
except ImportError:
raise ValueError('Could not import tiktoken python package. '
'This is needed in order to calculate get_token_ids. '
'Please install it with `pip install tiktoken`.')
return tiktoken
def _create_retry_decorator(llm: ChatQWen) -> Callable[[Any], Any]:
min_seconds = 1
max_seconds = 20
# Wait 2^x * 1 second between each retry starting with
# 4 seconds, then up to 10 seconds, then 10 seconds afterwards
return retry(
reraise=True,
stop=stop_after_attempt(llm.max_retries),
wait=wait_exponential(multiplier=1, min=min_seconds, max=max_seconds),
retry=(retry_if_exception_type(Exception)),
before_sleep=before_sleep_log(logger, logging.WARNING),
)
def _convert_dict_to_message(_dict: Mapping[str, Any]) -> BaseMessage:
role = _dict['role']
if role == 'user':
return HumanMessage(content=_dict['content'])
elif role == 'assistant':
content = _dict['content'] or '' # OpenAI returns None for tool invocations
if _dict.get('function_call'):
additional_kwargs = {'function_call': dict(_dict['function_call'])}
else:
additional_kwargs = {}
if _dict.get("tool_calls"):
additional_kwargs = {'tool_calls': _dict['tool_calls']}
else:
additional_kwargs = {}
return AIMessage(content=content, additional_kwargs=additional_kwargs)
elif role == 'system':
return SystemMessage(content=_dict['content'])
elif role == 'function':
return FunctionMessage(content=_dict['content'], name=_dict['name'])
elif role == "tool":
additional_kwargs = {}
if "name" in _dict:
additional_kwargs["name"] = _dict["name"]
return ToolMessage(
content=_dict.get("content", ""),
tool_call_id=_dict.get("tool_call_id"),
additional_kwargs=additional_kwargs,
)
else:
return ChatMessage(content=_dict['content'], role=role)
def _convert_message_to_dict(message: BaseMessage) -> dict:
if isinstance(message, ChatMessage):
message_dict = {'role': message.role, 'content': message.content}
elif isinstance(message, HumanMessage):
message_dict = {'role': 'user', 'content': message.content}
elif isinstance(message, AIMessage):
message_dict = {'role': 'assistant', 'content': message.content}
if 'function_call' in message.additional_kwargs:
message_dict['function_call'] = message.additional_kwargs['function_call']
if "tool_calls" in message.additional_kwargs:
message_dict["tool_calls"] = message.additional_kwargs["tool_calls"]
elif isinstance(message, SystemMessage):
message_dict = {'role': 'system', 'content': message.content}
elif isinstance(message, FunctionMessage):
message_dict = {
'role': 'function',
'content': message.content,
'name': message.name,
}
elif isinstance(message, ToolMessage):
message_dict = {
"role": "tool",
"content": message.content,
"tool_call_id": message.tool_call_id,
}
else:
raise ValueError(f'Got unknown type {message}')
if 'name' in message.additional_kwargs:
message_dict['name'] = message.additional_kwargs['name']
return message_dict
url = 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation'
class ChatQWen(BaseChatModel):
"""Wrapper around proxy Chat large language models.
To use, the environment variable ``api_key`` set with your API key.
Example:
.. code-block:: python
from bisheng_langchain.chat_models import ChatQWen
chat_qwen = ChatQWen(model_name="qwen-turbo")
"""
client: Optional[Any] #: :meta private:
"""Model name to use."""
model_name: str = Field('qwen-turbo', alias='model')
temperature: float = 0.95
top_p: float = 0.8
repetition_penalty: float = 1.1
top_k: int = None
seed: Optional[int] = 1234
"""生成时,随机数的种子,用于控制模型生成的随机性。如果使用相同的种子,每次运行生成的结果都将相同;"""
"""What sampling temperature to use."""
model_kwargs: Optional[Dict[str, Any]] = Field(default_factory=dict)
"""Holds any model parameters valid for `create` call not explicitly specified."""
api_key: Optional[str] = None
request_timeout: Optional[Union[float, Tuple[float, float]]] = None
"""Timeout for requests to OpenAI completion API. Default is 600 seconds."""
max_retries: Optional[int] = 3
"""Maximum number of retries to make when generating."""
streaming: Optional[bool] = False
"""Whether to stream the results or not."""
max_tokens: Optional[int] = 1024
"""Maximum number of tokens to generate."""
result_format: Optional[str] = 'message'
"""compatibale with openai"""
tiktoken_model_name: Optional[str] = None
"""The model name to pass to tiktoken when using this class.
Tiktoken is used to count the number of tokens in documents to constrain
them to be under a certain limit. By default, when set to None, this will
be the same as the embedding model name. However, there are some cases
where you may want to use this Embedding class with a model name not
supported by tiktoken. This can include when using Azure embeddings or
when using one of the many model providers that expose an OpenAI-like
API but with different models. In those cases, in order to avoid erroring
when tiktoken is called, you can specify a model name to use here."""
verbose: Optional[bool] = False
model_config = ConfigDict(validate_by_name=True)
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
values['api_key'] = get_from_dict_or_env(values, 'api_key', 'QWEN_API_KEY')
api_key = values['api_key']
try:
header = {'Authorization': f'Bearer {api_key}', 'Content-Type': 'application/json'}
values['client'] = Requests(headers=header, )
except AttributeError:
raise ValueError('Try upgrading it with `pip install --upgrade requests`.')
return values
@property
def _default_params(self) -> Dict[str, Any]:
"""Get the default parameters for calling ChatWenxin API."""
return {
'temperature': self.temperature,
'top_p': self.top_p,
'top_k': self.top_k,
'max_tokens': self.max_tokens,
'seed': self.seed,
'result_format': self.result_format,
'repetition_penalty': self.repetition_penalty,
**self.model_kwargs,
}
def completion_with_retry(self, **kwargs: Any) -> Any:
retry_decorator = _create_retry_decorator(self)
self.client.headers.pop('Accept', '')
@retry_decorator
def _completion_with_retry(**kwargs: Any) -> Any:
messages = kwargs.pop('messages', '')
input, params = ChatQWen._build_input_parameters(self.model_name,
messages=messages,
**kwargs)
inp = {'input': input, 'parameters': params, 'model': self.model_name}
return self.client.post(url=url, json=inp).json()
rsp_dict = _completion_with_retry(**kwargs)
if 'code' in rsp_dict and rsp_dict['code'] == 'DataInspectionFailed':
output_res = {'choices': [{'finish_reason': 'stop', 'message': {'role': 'assistant', 'content': rsp_dict['message']}}]}
usage_res = {'total_tokens': 2, 'output_tokens': 1, 'input_tokens': 1}
return output_res, usage_res
elif 'output' not in rsp_dict:
logger.error(f'proxy_llm_error resp={rsp_dict}')
message = rsp_dict['message']
raise Exception(message)
else:
return rsp_dict['output'], rsp_dict.get('usage', '')
async def acompletion_with_retry(self, **kwargs: Any) -> Any:
"""Use tenacity to retry the async completion call."""
retry_decorator = _create_retry_decorator(self)
if self.streaming:
self.client.headers.update({'Accept': 'text/event-stream'})
else:
self.client.headers.pop('Accept', '')
@retry_decorator
async def _acompletion_with_retry(**kwargs: Any) -> Any:
messages = kwargs.pop('messages', '')
input, params = ChatQWen._build_input_parameters(self.model_name,
messages=messages,
**kwargs)
inp = {'input': input, 'parameters': params, 'model': self.model_name}
# Use OpenAI's async api https://github.com/openai/openai-python#async-api
async with self.client.apost(url=url, json=inp) as response:
async for line in response.content.iter_any():
if b'\n' in line:
for txt_ in line.split(b'\n'):
yield txt_.decode('utf-8').strip()
else:
yield line.decode('utf-8').strip()
async for response in _acompletion_with_retry(**kwargs):
is_error = False
if response:
if response.startswith('event:error'):
is_error = True
elif response.startswith('data:'):
yield (is_error, response[len('data:'):])
if is_error:
break
elif response.startswith('{'):
yield (is_error, response)
else:
continue
def _combine_llm_outputs(self, llm_outputs: List[Optional[dict]]) -> dict:
overall_token_usage: dict = {}
for output in llm_outputs:
if output is None:
# Happens in streaming
continue
token_usage = output['token_usage']
for k, v in token_usage.items():
if k in overall_token_usage:
overall_token_usage[k] += v
else:
overall_token_usage[k] = v
return {'token_usage': overall_token_usage, 'model_name': self.model_name}
def _generate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[CallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
message_dicts, params = self._create_message_dicts(messages, stop)
params = {**params, **kwargs}
output, usage = self.completion_with_retry(messages=message_dicts, **params)
return self._create_chat_result(output, usage)
async def _agenerate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
message_dicts, params = self._create_message_dicts(messages, stop)
params = {**params, **kwargs}
if self.streaming:
inner_completion = ''
role = 'assistant'
params['stream'] = True
tool_calls: Optional[list[dict]] = None
async for is_error, stream_resp in self.acompletion_with_retry(messages=message_dicts,
**params):
output = None
msg = json.loads(stream_resp)
if is_error:
logger.error(stream_resp)
raise ValueError(stream_resp)
if 'output' in msg:
output = msg['output']
choices = output.get('choices')
if choices:
for choice in choices:
role = choice['message'].get('role', role)
token = choice['message'].get('content', '')
inner_completion += token or ''
_tool_calls = choice['message'].get('tool_calls')
if run_manager:
await run_manager.on_llm_new_token(token)
if _tool_calls:
if tool_calls is None:
tool_calls = _tool_calls
else:
tool_calls[0]['arguments'] += _tool_calls[0]['arguments']
message = _convert_dict_to_message({
'content': inner_completion,
'role': role,
'tool_calls': tool_calls,
})
return ChatResult(generations=[ChatGeneration(message=message)])
else:
response = [
response
async for _, response in self.acompletion_with_retry(messages=message_dicts,
**params)
]
response = json.loads(response[0])
return self._create_chat_result(response.get('output'), response.get('usage'))
def _create_message_dicts(
self, messages: List[BaseMessage],
stop: Optional[List[str]]) -> Tuple[List[Dict[str, Any]], Dict[str, Any]]:
params = dict(self._client_params)
if stop is not None:
if 'stop' in params:
raise ValueError('`stop` found in both the input and default params.')
params['stop'] = stop
message_dicts = [_convert_message_to_dict(m) for m in messages]
return message_dicts, params
def _create_chat_result(self, response: Mapping[str, Any], usage) -> ChatResult:
generations = []
for res in response['choices']:
message = _convert_dict_to_message(res['message'])
gen = ChatGeneration(message=message)
generations.append(gen)
llm_output = {'token_usage': usage, 'model_name': self.model_name}
return ChatResult(generations=generations, llm_output=llm_output)
@property
def _identifying_params(self) -> Mapping[str, Any]:
"""Get the identifying parameters."""
return {**{'model_name': self.model_name}, **self._default_params}
@property
def _client_params(self) -> Mapping[str, Any]:
"""Get the parameters used for the client."""
return {**self._default_params}
def _get_invocation_params(self,
stop: Optional[List[str]] = None,
**kwargs: Any) -> Dict[str, Any]:
"""Get the parameters used to invoke the model FOR THE CALLBACKS."""
return {
**super()._get_invocation_params(stop=stop, **kwargs),
**self._default_params,
'model': self.model_name,
'function': kwargs.get('functions'),
}
@property
def _llm_type(self) -> str:
"""Return type of chat model."""
return 'qwen'
def _get_encoding_model(self) -> Tuple[str, tiktoken.Encoding]:
tiktoken_ = _import_tiktoken()
if self.tiktoken_model_name is not None:
model = self.tiktoken_model_name
else:
model = self.model_name
# model chatglm-std, chatglm-lite
# Returns the number of tokens used by a list of messages.
try:
encoding = tiktoken_.encoding_for_model(model)
except KeyError:
logger.warning('Warning: model not found. Using cl100k_base encoding.')
model = 'cl100k_base'
encoding = tiktoken_.get_encoding(model)
return model, encoding
def get_token_ids(self, text: str) -> List[int]:
"""Get the tokens present in the text with tiktoken package."""
# tiktoken NOT supported for Python 3.7 or below
if sys.version_info[1] <= 7:
return super().get_token_ids(text)
_, encoding_model = self._get_encoding_model()
return encoding_model.encode(text)
def get_num_tokens_from_messages(self, messages: List[BaseMessage]) -> int:
"""Calculate num tokens for chatglm with tiktoken package.
todo: read chatglm document
Official documentation: https://github.com/openai/openai-cookbook/blob/
main/examples/How_to_format_inputs_to_ChatGPT_models.ipynb"""
if sys.version_info[1] <= 7:
return super().get_num_tokens_from_messages(messages)
model, encoding = self._get_encoding_model()
if model.startswith('chatglm'):
# every message follows {role/name}\n{content}\n
tokens_per_message = 4
# if there's a name, the role is omitted
tokens_per_name = -1
else:
raise NotImplementedError(
f'get_num_tokens_from_messages() is not presently implemented '
f'for model {model}.'
'See https://github.com/openai/openai-python/blob/main/chatml.md for '
'information on how messages are converted to tokens.')
num_tokens = 0
messages_dict = [_convert_message_to_dict(m) for m in messages]
for message in messages_dict:
num_tokens += tokens_per_message
for key, value in message.items():
num_tokens += len(encoding.encode(value))
if key == 'name':
num_tokens += tokens_per_name
# every reply is primed with assistant
num_tokens += 3
return num_tokens
@classmethod
def _build_input_parameters(cls, model, messages, **kwargs):
parameters = {}
input = {}
if messages is not None:
msgs = copy.deepcopy(messages)
input = {'messages': msgs}
if model.startswith('qwen'):
enable_search = kwargs.pop('enable_search', False)
if enable_search:
parameters['enable_search'] = enable_search
elif model.startswith('bailian'):
customized_model_id = kwargs.pop('customized_model_id', None)
if customized_model_id is None:
raise ValueError('customized_model_id is required for %s' % model)
input['customized_model_id'] = customized_model_id
if 'incremental_output' not in kwargs and kwargs.get('stream'):
parameters['incremental_output'] = True
return input, {**parameters, **kwargs}
================================================
FILE: src/backend/bisheng_langchain/chat_models/sensetime.py
================================================
from __future__ import annotations
import ast
import json
import logging
import time
from typing import Any, Dict, List, Mapping, Optional, Tuple, Union
import jwt
from pydantic import ConfigDict, model_validator, Field
from bisheng_langchain.utils.requests import Requests
from langchain.callbacks.manager import AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun
from langchain.chat_models.base import BaseChatModel
from langchain.schema import ChatGeneration, ChatResult
from langchain.schema.messages import (AIMessage, BaseMessage, ChatMessage, FunctionMessage,
HumanMessage, SystemMessage)
from langchain.utils import get_from_dict_or_env
from tenacity import (before_sleep_log, retry, retry_if_exception_type, stop_after_attempt,
wait_exponential)
# if TYPE_CHECKING:
# import jwt
logger = logging.getLogger(__name__)
def _import_pyjwt() -> Any:
try:
import jwt
except ImportError:
raise ValueError('Could not import jwt python package. '
'This is needed in order to calculate get_token_ids. '
'Please install it with `pip install PyJWT`.')
return jwt
def encode_jwt_token(ak, sk):
headers = {'alg': 'HS256', 'typ': 'JWT'}
payload = {
'iss': ak,
'exp': int(time.time()) + 18000, # 填写您期望的有效时间,此处示例代表当前时间+300分钟
'nbf': int(time.time()) - 500 # 填写您期望的生效时间,此处示例代表当前时间-500秒
}
token = jwt.encode(payload, sk, headers=headers)
return token
def _create_retry_decorator(llm):
min_seconds = 1
max_seconds = 20
# Wait 2^x * 1 second between each retry starting with
# 4 seconds, then up to 10 seconds, then 10 seconds afterwards
return retry(
reraise=True,
stop=stop_after_attempt(llm.max_retries),
wait=wait_exponential(multiplier=1, min=min_seconds, max=max_seconds),
retry=(retry_if_exception_type(Exception)),
before_sleep=before_sleep_log(logger, logging.WARNING),
)
def _convert_dict_to_message(_dict: Mapping[str, Any]) -> BaseMessage:
role = _dict['role']
if role == 'user':
return HumanMessage(content=_dict['content'])
elif role == 'assistant':
content = _dict['content'] or '' # OpenAI returns None for tool invocations
if _dict.get('function_call'):
additional_kwargs = {'function_call': dict(_dict['function_call'])}
else:
additional_kwargs = {}
return AIMessage(content=content, additional_kwargs=additional_kwargs)
elif role == 'system':
return SystemMessage(content=_dict['content'])
elif role == 'function':
return FunctionMessage(content=_dict['content'], name=_dict['name'])
else:
return ChatMessage(content=_dict['content'], role=role)
def _convert_message_to_dict(message: BaseMessage) -> dict:
if isinstance(message, ChatMessage):
message_dict = {'role': message.role, 'content': message.content}
elif isinstance(message, HumanMessage):
message_dict = {'role': 'user', 'content': message.content}
elif isinstance(message, AIMessage):
message_dict = {'role': 'assistant', 'content': message.content}
elif isinstance(message, SystemMessage):
message_dict = {'role': 'system', 'content': message.content}
# raise ValueError(f"not support system role {message}")
elif isinstance(message, FunctionMessage):
raise ValueError(f'not support funciton {message}')
else:
raise ValueError(f'Got unknown type {message}')
# if "name" in message.additional_kwargs:
# message_dict["name"] = message.additional_kwargs["name"]
return message_dict
def _convert_message_to_dict2(message: BaseMessage) -> List[dict]:
if isinstance(message, ChatMessage):
message_dict = {'role': message.role, 'content': message.content}
elif isinstance(message, HumanMessage):
message_dict = {'role': 'user', 'content': message.content}
elif isinstance(message, AIMessage):
message_dict = {'role': 'assistant', 'content': message.content}
elif isinstance(message, SystemMessage):
raise ValueError(f'not support system role {message}')
elif isinstance(message, FunctionMessage):
raise ValueError(f'not support funciton {message}')
else:
raise ValueError(f'Got unknown type {message}')
return [message_dict]
url = 'https://api.sensenova.cn/v1/llm/chat-completions'
class SenseChat(BaseChatModel):
client: Optional[Any] #: :meta private:
model_name: str = Field(default='SenseChat', alias='model')
"""Model name to use."""
temperature: float = 0.8
top_p: float = 0.7
"""What sampling temperature to use."""
model_kwargs: Optional[Dict[str, Any]] = Field(default_factory=dict)
"""Holds any model parameters valid for `create` call not explicitly specified."""
access_key_id: Optional[str] = None
secret_access_key: Optional[str] = None
repetition_penalty: float = 1.05
request_timeout: Optional[Union[float, Tuple[float, float]]] = None
"""Timeout for requests to OpenAI completion API. Default is 600 seconds."""
max_retries: Optional[int] = 6
"""Maximum number of retries to make when generating."""
streaming: Optional[bool] = False
"""Whether to stream the results or not."""
n: Optional[int] = 1
"""Number of chat completions to generate for each prompt."""
max_tokens: Optional[int] = 1024
"""Maximum number of tokens to generate."""
tiktoken_model_name: Optional[str] = None
"""The model name to pass to tiktoken when using this class.
Tiktoken is used to count the number of tokens in documents to constrain
them to be under a certain limit. By default, when set to None, this will
be the same as the embedding model name. However, there are some cases
where you may want to use this Embedding class with a model name not
supported by tiktoken. This can include when using Azure embeddings or
when using one of the many model providers that expose an OpenAI-like
API but with different models. In those cases, in order to avoid erroring
when tiktoken is called, you can specify a model name to use here."""
verbose: Optional[bool] = False
model_config = ConfigDict(validate_by_name=True)
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
_import_pyjwt()
values['access_key_id'] = get_from_dict_or_env(values, 'access_key_id', 'ACCESS_KEY_ID')
values['secret_access_key'] = get_from_dict_or_env(values, 'secret_access_key',
'SECRET_ACCESS_KEY')
token = encode_jwt_token(values['access_key_id'], values['secret_access_key'])
if isinstance(token, bytes):
token = token.decode('utf-8')
try:
header = {
'Authorization': 'Bearer {}'.format(token),
'Content-Type': 'application/json'
}
values['client'] = Requests(headers=header, )
except AttributeError:
raise ValueError('Try upgrading it with `pip install --upgrade requests`.')
return values
@property
def _default_params(self) -> Dict[str, Any]:
"""Get the default parameters for calling ZhipuAI API."""
return {
'model': self.model_name,
'temperature': self.temperature,
'top_p': self.top_p,
'max_tokens': self.max_tokens,
**self.model_kwargs,
}
def completion_with_retry(self, **kwargs: Any) -> Any:
retry_decorator = _create_retry_decorator(self)
@retry_decorator
def _completion_with_retry(**kwargs: Any) -> Any:
messages = kwargs.get('messages')
temperature = kwargs.get('temperature')
top_p = kwargs.get('top_p')
# messages
params = {
'messages': messages,
'model': self.model_name,
'top_p': top_p,
'temperature': temperature,
'repetition_penalty': self.repetition_penalty,
'n': self.n,
'max_new_tokens': self.max_tokens,
'stream': False # self.streaming
}
token = encode_jwt_token(self.access_key_id, self.secret_access_key)
if isinstance(token, bytes):
token = token.decode('utf-8')
self.client.headers.update({'Authorization': 'Bearer {}'.format(token)})
response = self.client.post(url=url, json=params).json()
return response
rsp_dict = _completion_with_retry(**kwargs)
if 'error' in rsp_dict:
logger.error(f'sensechat_error resp={rsp_dict}')
message = rsp_dict['error']['message']
raise Exception(message)
else:
# return rsp_dict['data'], rsp_dict.get('usage', '')
return rsp_dict, rsp_dict.get('usage', '')
async def acompletion_with_retry(self, **kwargs: Any) -> Any:
"""Use tenacity to retry the async completion call."""
retry_decorator = _create_retry_decorator(self)
if self.streaming:
self.client.headers.update({'Accept': 'text/event-stream'})
else:
self.client.headers.pop('Accept', '')
@retry_decorator
async def _acompletion_with_retry(**kwargs: Any) -> Any:
messages = kwargs.pop('messages', '')
inp = {
'messages': messages,
'model': self.model_name,
'top_p': self.top_p,
'temperature': self.temperature,
'repetition_penalty': self.repetition_penalty,
'n': self.n,
'max_new_tokens': self.max_tokens,
'stream': True
}
# Use OpenAI's async api https://github.com/openai/openai-python#async-api
async with self.client.apost(url=url, json=inp) as response:
async for line in response.content.iter_any():
if b'\n' in line:
for txt_ in line.split(b'\n'):
yield txt_.decode('utf-8').strip()
else:
yield line.decode('utf-8').strip()
async for response in _acompletion_with_retry(**kwargs):
is_error = False
if response:
if response.startswith('event:error'):
is_error = True
elif response.startswith('data:'):
yield (is_error, response[len('data:'):])
if is_error:
break
elif response.startswith('{'):
yield (is_error, response)
else:
continue
def _combine_llm_outputs(self, llm_outputs: List[Optional[dict]]) -> dict:
overall_token_usage: dict = {}
for output in llm_outputs:
if output is None:
# Happens in streaming
continue
token_usage = output['token_usage']
for k, v in token_usage.items():
if k in overall_token_usage:
overall_token_usage[k] += v
else:
overall_token_usage[k] = v
return {'token_usage': overall_token_usage, 'model_name': self.model_name}
def _generate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[CallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
message_dicts, params = self._create_message_dicts(messages, stop)
params = {**params, **kwargs}
response, usage = self.completion_with_retry(messages=message_dicts, **params)
return self._create_chat_result(response)
async def _agenerate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
message_dicts, params = self._create_message_dicts(messages, stop)
params = {**params, **kwargs}
if self.streaming:
inner_completion = ''
role = 'user'
params['stream'] = True
function_call: Optional[dict] = None
async for is_error, stream_resp in self.acompletion_with_retry(messages=message_dicts,
**params):
if str(stream_resp).startswith('[DONE]'):
continue
output = json.loads(stream_resp)
if is_error:
logger.error(stream_resp)
raise ValueError(stream_resp)
if 'data' in output:
output = output['data']
choices = None
if 'choices' in output:
choices = output.get('choices')
if choices:
for choice in choices:
token = choice['delta']
inner_completion += token or ''
_function_call = ''
if run_manager:
await run_manager.on_llm_new_token(token)
if _function_call:
if function_call is None:
function_call = _function_call
else:
function_call['arguments'] += _function_call['arguments']
message = _convert_dict_to_message({
'content': inner_completion,
'role': role,
'function_call': function_call,
})
return ChatResult(generations=[ChatGeneration(message=message)])
else:
return self._generate(messages, stop, run_manager, **kwargs)
def _create_message_dicts(
self, messages: List[BaseMessage],
stop: Optional[List[str]]) -> Tuple[List[Dict[str, Any]], Dict[str, Any]]:
params = dict(self._client_params)
if stop is not None:
if 'stop' in params:
raise ValueError('`stop` found in both the input and default params.')
params['stop'] = stop
system_content = ''
message_dicts = []
for m in messages:
if m.type == 'system':
system_content += m.content
continue
message_dicts.extend(_convert_message_to_dict2(m))
if system_content:
message_dicts[-1]['content'] = system_content + message_dicts[-1]['content']
return message_dicts, params
def _create_chat_result(self, response: Mapping[str, Any]) -> ChatResult:
generations = []
def _norm_text(text):
if text[0] == '"' and text[-1] == '"':
out = ast.literal_eval(text)
else:
out = text
return out
for res in response['data']['choices']:
res['content'] = _norm_text(res['message'])
res['role'] = 'user'
message = _convert_dict_to_message(res)
gen = ChatGeneration(message=message)
generations.append(gen)
llm_output = {'token_usage': response['data']['usage'], 'model_name': self.model_name}
return ChatResult(generations=generations, llm_output=llm_output)
@property
def _identifying_params(self) -> Mapping[str, Any]:
"""Get the identifying parameters."""
return {**{'model_name': self.model_name}, **self._default_params}
@property
def _client_params(self) -> Mapping[str, Any]:
"""Get the parameters used for the openai client."""
zhipu_creds: Dict[str, Any] = {
'access_key_id': self.access_key_id,
'secret_access_key': self.secret_access_key,
'model': self.model_name,
}
return {**zhipu_creds, **self._default_params}
def _get_invocation_params(self,
stop: Optional[List[str]] = None,
**kwargs: Any) -> Dict[str, Any]:
"""Get the parameters used to invoke the model FOR THE CALLBACKS."""
return {
**super()._get_invocation_params(stop=stop, **kwargs),
**self._default_params,
'model': self.model_name,
'function': kwargs.get('functions'),
}
@property
def _llm_type(self) -> str:
"""Return type of chat model."""
return 'sense-chat'
================================================
FILE: src/backend/bisheng_langchain/chat_models/wenxin.py
================================================
"""proxy llm chat wrapper."""
from __future__ import annotations
import logging
import sys
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Mapping, Optional, Tuple, Union
# import requests
from langchain.callbacks.manager import AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun
from langchain.chat_models.base import BaseChatModel
from langchain.schema import ChatGeneration, ChatResult
from langchain.schema.messages import (AIMessage, BaseMessage, ChatMessage, FunctionMessage,
HumanMessage, SystemMessage)
from langchain.utils import get_from_dict_or_env
from pydantic import ConfigDict, model_validator, Field
from tenacity import (before_sleep_log, retry, retry_if_exception_type, stop_after_attempt,
wait_exponential)
from .interface import WenxinChatCompletion
from .interface.types import ChatInput
if TYPE_CHECKING:
import tiktoken
logger = logging.getLogger(__name__)
def _import_tiktoken() -> Any:
try:
import tiktoken
except ImportError:
raise ValueError('Could not import tiktoken python package. '
'This is needed in order to calculate get_token_ids. '
'Please install it with `pip install tiktoken`.')
return tiktoken
def _create_retry_decorator(llm: ChatWenxin) -> Callable[[Any], Any]:
min_seconds = 1
max_seconds = 20
# Wait 2^x * 1 second between each retry starting with
# 4 seconds, then up to 10 seconds, then 10 seconds afterwards
return retry(
reraise=True,
stop=stop_after_attempt(llm.max_retries),
wait=wait_exponential(multiplier=1, min=min_seconds, max=max_seconds),
retry=(retry_if_exception_type(Exception)),
before_sleep=before_sleep_log(logger, logging.WARNING),
)
def _convert_dict_to_message(_dict: Mapping[str, Any]) -> BaseMessage:
role = _dict['role']
if role == 'user':
return HumanMessage(content=_dict['content'])
elif role == 'assistant':
content = _dict['content'] or '' # OpenAI returns None for tool invocations
if _dict.get('function_call'):
additional_kwargs = {'function_call': dict(_dict['function_call'])}
else:
additional_kwargs = {}
return AIMessage(content=content, additional_kwargs=additional_kwargs)
elif role == 'system':
return SystemMessage(content=_dict['content'])
elif role == 'function':
return FunctionMessage(content=_dict['content'], name=_dict['name'])
else:
return ChatMessage(content=_dict['content'], role=role)
def _convert_message_to_dict(message: BaseMessage) -> dict:
if isinstance(message, ChatMessage):
message_dict = {'role': message.role, 'content': message.content}
elif isinstance(message, HumanMessage):
message_dict = {'role': 'user', 'content': message.content}
elif isinstance(message, AIMessage):
message_dict = {'role': 'assistant', 'content': message.content}
if 'function_call' in message.additional_kwargs:
message_dict['function_call'] = message.additional_kwargs['function_call']
elif isinstance(message, SystemMessage):
message_dict = {'role': 'system', 'content': message.content}
elif isinstance(message, FunctionMessage):
message_dict = {
'role': 'function',
'content': message.content,
'name': message.name,
}
else:
raise ValueError(f'Got unknown type {message}')
if 'name' in message.additional_kwargs:
message_dict['name'] = message.additional_kwargs['name']
return message_dict
class ChatWenxin(BaseChatModel):
"""Wrapper around proxy Chat large language models.
To use, the environment variable ``ELEMAI_API_KEY`` set with your API key.
Example:
.. code-block:: python
from bisheng_langchain.chat_models import ChatWenxin
chat_miniamaxai = ChatWenxin(model_name="ernie-bot")
"""
client: Optional[Any] #: :meta private:
"""Model name to use."""
model_name: str = Field('ernie-bot', alias='model')
temperature: float = 0.95
top_p: float = 0.8
"""What sampling temperature to use."""
model_kwargs: Optional[Dict[str, Any]] = Field(default_factory=dict)
"""Holds any model parameters valid for `create` call not explicitly specified."""
wenxin_api_key: Optional[str] = None
wenxin_secret_key: Optional[str] = None
request_timeout: Optional[Union[float, Tuple[float, float]]] = None
"""Timeout for requests to OpenAI completion API. Default is 600 seconds."""
max_retries: Optional[int] = 6
"""Maximum number of retries to make when generating."""
streaming: Optional[bool] = False
"""Whether to stream the results or not."""
n: Optional[int] = 1
"""Number of chat completions to generate for each prompt."""
max_tokens: Optional[int] = 1024
"""Maximum number of tokens to generate."""
tiktoken_model_name: Optional[str] = None
"""The model name to pass to tiktoken when using this class.
Tiktoken is used to count the number of tokens in documents to constrain
them to be under a certain limit. By default, when set to None, this will
be the same as the embedding model name. However, there are some cases
where you may want to use this Embedding class with a model name not
supported by tiktoken. This can include when using Azure embeddings or
when using one of the many model providers that expose an OpenAI-like
API but with different models. In those cases, in order to avoid erroring
when tiktoken is called, you can specify a model name to use here."""
verbose: Optional[bool] = False
model_config = ConfigDict(validate_by_name=True)
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
values['wenxin_api_key'] = get_from_dict_or_env(values, 'wenxin_api_key', 'WENXIN_API_KEY')
values['wenxin_secret_key'] = get_from_dict_or_env(values, 'wenxin_secret_key',
'WENXIN_SECRET_KEY')
api_key = values['wenxin_api_key']
secret_key = values['wenxin_secret_key']
try:
values['client'] = WenxinChatCompletion(api_key, secret_key)
except AttributeError:
raise ValueError('Try upgrading it with `pip install --upgrade requests`.')
return values
@property
def _default_params(self) -> Dict[str, Any]:
"""Get the default parameters for calling ChatWenxin API."""
return {
'model': self.model_name,
'temperature': self.temperature,
'top_p': self.top_p,
'max_tokens': self.max_tokens,
**self.model_kwargs,
}
def completion_with_retry(self, **kwargs: Any) -> Any:
retry_decorator = _create_retry_decorator(self)
@retry_decorator
def _completion_with_retry(**kwargs: Any) -> Any:
messages = kwargs.get('messages')
temperature = kwargs.get('temperature')
top_p = kwargs.get('top_p')
max_tokens = kwargs.get('max_tokens')
params = {
'messages': messages,
'model': self.model_name,
'top_p': top_p,
'temperature': temperature,
'max_tokens': max_tokens
}
return self.client(ChatInput.parse_obj(params), self.verbose).dict()
return _completion_with_retry(**kwargs)
def _combine_llm_outputs(self, llm_outputs: List[Optional[dict]]) -> dict:
overall_token_usage: dict = {}
for output in llm_outputs:
if output is None:
# Happens in streaming
continue
token_usage = output['token_usage']
for k, v in token_usage.items():
if k in overall_token_usage:
overall_token_usage[k] += v
else:
overall_token_usage[k] = v
return {'token_usage': overall_token_usage, 'model_name': self.model_name}
def _generate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[CallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
message_dicts, params = self._create_message_dicts(messages, stop)
params = {**params, **kwargs}
response = self.completion_with_retry(messages=message_dicts, **params)
return self._create_chat_result(response)
async def _agenerate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
return self._generate(messages, stop, run_manager, **kwargs)
def _create_message_dicts(
self, messages: List[BaseMessage],
stop: Optional[List[str]]) -> Tuple[List[Dict[str, Any]], Dict[str, Any]]:
params = dict(self._client_params)
if stop is not None:
if 'stop' in params:
raise ValueError('`stop` found in both the input and default params.')
params['stop'] = stop
message_dicts = [_convert_message_to_dict(m) for m in messages]
return message_dicts, params
def _create_chat_result(self, response: Mapping[str, Any]) -> ChatResult:
generations = []
for res in response['choices']:
message = _convert_dict_to_message(res['message'])
gen = ChatGeneration(message=message)
generations.append(gen)
llm_output = {'token_usage': response['usage'], 'model_name': self.model_name}
return ChatResult(generations=generations, llm_output=llm_output)
@property
def _identifying_params(self) -> Mapping[str, Any]:
"""Get the identifying parameters."""
return {**{'model_name': self.model_name}, **self._default_params}
@property
def _client_params(self) -> Mapping[str, Any]:
"""Get the parameters used for the client."""
minimaxai_creds: Dict[str, Any] = {
'model': self.model_name,
}
return {**minimaxai_creds, **self._default_params}
def _get_invocation_params(self,
stop: Optional[List[str]] = None,
**kwargs: Any) -> Dict[str, Any]:
"""Get the parameters used to invoke the model FOR THE CALLBACKS."""
return {
**super()._get_invocation_params(stop=stop, **kwargs),
**self._default_params,
'model': self.model_name,
'function': kwargs.get('functions'),
}
@property
def _llm_type(self) -> str:
"""Return type of chat model."""
return 'ernie-bot-chat'
def _get_encoding_model(self) -> Tuple[str, tiktoken.Encoding]:
tiktoken_ = _import_tiktoken()
if self.tiktoken_model_name is not None:
model = self.tiktoken_model_name
else:
model = self.model_name
# model chatglm-std, chatglm-lite
# Returns the number of tokens used by a list of messages.
try:
encoding = tiktoken_.encoding_for_model(model)
except KeyError:
logger.warning('Warning: model not found. Using cl100k_base encoding.')
model = 'cl100k_base'
encoding = tiktoken_.get_encoding(model)
return model, encoding
def get_token_ids(self, text: str) -> List[int]:
"""Get the tokens present in the text with tiktoken package."""
# tiktoken NOT supported for Python 3.7 or below
if sys.version_info[1] <= 7:
return super().get_token_ids(text)
_, encoding_model = self._get_encoding_model()
return encoding_model.encode(text)
def get_num_tokens_from_messages(self, messages: List[BaseMessage]) -> int:
"""Calculate num tokens for chatglm with tiktoken package.
todo: read chatglm document
Official documentation: https://github.com/openai/openai-cookbook/blob/
main/examples/How_to_format_inputs_to_ChatGPT_models.ipynb"""
if sys.version_info[1] <= 7:
return super().get_num_tokens_from_messages(messages)
model, encoding = self._get_encoding_model()
if model.startswith('chatglm'):
# every message follows {role/name}\n{content}\n
tokens_per_message = 4
# if there's a name, the role is omitted
tokens_per_name = -1
else:
raise NotImplementedError(
f'get_num_tokens_from_messages() is not presently implemented '
f'for model {model}.'
'See https://github.com/openai/openai-python/blob/main/chatml.md for '
'information on how messages are converted to tokens.')
num_tokens = 0
messages_dict = [_convert_message_to_dict(m) for m in messages]
for message in messages_dict:
num_tokens += tokens_per_message
for key, value in message.items():
num_tokens += len(encoding.encode(value))
if key == 'name':
num_tokens += tokens_per_name
# every reply is primed with assistant
num_tokens += 3
return num_tokens
================================================
FILE: src/backend/bisheng_langchain/chat_models/xunfeiai.py
================================================
"""proxy llm chat wrapper."""
from __future__ import annotations
import logging
import sys
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Mapping, Optional, Tuple, Union
# import requests
from langchain.callbacks.manager import AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun
from langchain.chat_models.base import BaseChatModel
from langchain.schema import ChatGeneration, ChatResult
from langchain.schema.messages import (AIMessage, BaseMessage, ChatMessage, FunctionMessage,
HumanMessage, SystemMessage)
from langchain.utils import get_from_dict_or_env
from pydantic import ConfigDict, model_validator, Field
from tenacity import (before_sleep_log, retry, retry_if_exception_type, stop_after_attempt,
wait_exponential)
from .interface import XunfeiChatCompletion
from .interface.types import ChatInput
if TYPE_CHECKING:
import tiktoken
logger = logging.getLogger(__name__)
def _import_tiktoken() -> Any:
try:
import tiktoken
except ImportError:
raise ValueError('Could not import tiktoken python package. '
'This is needed in order to calculate get_token_ids. '
'Please install it with `pip install tiktoken`.')
return tiktoken
def _create_retry_decorator(llm: ChatXunfeiAI) -> Callable[[Any], Any]:
min_seconds = 1
max_seconds = 20
# Wait 2^x * 1 second between each retry starting with
# 4 seconds, then up to 10 seconds, then 10 seconds afterwards
return retry(
reraise=True,
stop=stop_after_attempt(llm.max_retries),
wait=wait_exponential(multiplier=1, min=min_seconds, max=max_seconds),
retry=(retry_if_exception_type(Exception)),
before_sleep=before_sleep_log(logger, logging.WARNING),
)
def _convert_dict_to_message(_dict: Mapping[str, Any]) -> BaseMessage:
role = _dict['role']
if role == 'user':
return HumanMessage(content=_dict['content'])
elif role == 'assistant':
content = _dict[
'content'] or '' # OpenAI returns None for tool invocations
if _dict.get('function_call'):
additional_kwargs = {'function_call': dict(_dict['function_call'])}
else:
additional_kwargs = {}
return AIMessage(content=content, additional_kwargs=additional_kwargs)
elif role == 'system':
return SystemMessage(content=_dict['content'])
elif role == 'function':
return FunctionMessage(content=_dict['content'], name=_dict['name'])
else:
return ChatMessage(content=_dict['content'], role=role)
def _convert_message_to_dict(message: BaseMessage) -> dict:
if isinstance(message, ChatMessage):
message_dict = {'role': message.role, 'content': message.content}
elif isinstance(message, HumanMessage):
message_dict = {'role': 'user', 'content': message.content}
elif isinstance(message, AIMessage):
message_dict = {'role': 'assistant', 'content': message.content}
if 'function_call' in message.additional_kwargs:
message_dict['function_call'] = message.additional_kwargs[
'function_call']
elif isinstance(message, SystemMessage):
message_dict = {'role': 'system', 'content': message.content}
elif isinstance(message, FunctionMessage):
message_dict = {
'role': 'function',
'content': message.content,
'name': message.name,
}
else:
raise ValueError(f'Got unknown type {message}')
if 'name' in message.additional_kwargs:
message_dict['name'] = message.additional_kwargs['name']
return message_dict
class ChatXunfeiAI(BaseChatModel):
"""Wrapper around proxy Chat large language models.
To use, the environment variable ``ELEMAI_API_KEY`` set with your API key.
Example:
.. code-block:: python
from bisheng_langchain.chat_models import ChatXunfeiAI
chat_miniamaxai = ChatXunfeiAI(model_name="spark")
"""
client: Optional[Any] #: :meta private:
"""Model name to use."""
model_name: str = Field('spark-1.5', alias='model')
temperature: float = 0.5
top_p: float = 0.7
"""What sampling temperature to use."""
model_kwargs: Optional[Dict[str, Any]] = Field(default_factory=dict)
"""Holds any model parameters valid for `create` call not explicitly specified."""
xunfeiai_appid: Optional[str] = None
xunfeiai_api_key: Optional[str] = None
xunfeiai_api_secret: Optional[str] = None
request_timeout: Optional[Union[float, Tuple[float, float]]] = None
"""Timeout for requests to OpenAI completion API. Default is 600 seconds."""
max_retries: Optional[int] = 6
"""Maximum number of retries to make when generating."""
streaming: Optional[bool] = False
"""Whether to stream the results or not."""
n: Optional[int] = 1
"""Number of chat completions to generate for each prompt."""
max_tokens: Optional[int] = 1024
"""Maximum number of tokens to generate."""
tiktoken_model_name: Optional[str] = None
"""The model name to pass to tiktoken when using this class.
Tiktoken is used to count the number of tokens in documents to constrain
them to be under a certain limit. By default, when set to None, this will
be the same as the embedding model name. However, there are some cases
where you may want to use this Embedding class with a model name not
supported by tiktoken. This can include when using Azure embeddings or
when using one of the many model providers that expose an OpenAI-like
API but with different models. In those cases, in order to avoid erroring
when tiktoken is called, you can specify a model name to use here."""
verbose: Optional[bool] = False
model_config = ConfigDict(validate_by_name=True)
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
values['xunfeiai_appid'] = get_from_dict_or_env(
values, 'xunfeiai_appid', 'XUNFEIAI_APPID')
values['xunfeiai_api_key'] = get_from_dict_or_env(
values, 'xunfeiai_api_key', 'XUNFEIAI_API_KEY')
values['xunfeiai_api_secret'] = get_from_dict_or_env(
values, 'xunfeiai_api_secret', 'XUNFEIAI_API_SECRET')
appid = values['xunfeiai_appid']
api_key = values['xunfeiai_api_key']
api_secret = values['xunfeiai_api_secret']
try:
values['client'] = XunfeiChatCompletion(appid, api_key, api_secret)
except AttributeError:
raise ValueError(
'Try upgrading it with `pip install --upgrade requests`.')
return values
@property
def _default_params(self) -> Dict[str, Any]:
"""Get the default parameters for calling ChatXunfeiAI API."""
return {
'model': self.model_name,
'temperature': self.temperature,
'top_p': self.top_p,
'max_tokens': self.max_tokens,
**self.model_kwargs,
}
def completion_with_retry(self, **kwargs: Any) -> Any:
retry_decorator = _create_retry_decorator(self)
@retry_decorator
def _completion_with_retry(**kwargs: Any) -> Any:
messages = kwargs.get('messages')
temperature = kwargs.get('temperature')
top_p = kwargs.get('top_p')
max_tokens = kwargs.get('max_tokens')
params = {
'messages': messages,
'model': self.model_name,
'top_p': top_p,
'temperature': temperature,
'max_tokens': max_tokens
}
return self.client(ChatInput.parse_obj(params),
self.verbose).dict()
return _completion_with_retry(**kwargs)
def _combine_llm_outputs(self, llm_outputs: List[Optional[dict]]) -> dict:
overall_token_usage: dict = {}
for output in llm_outputs:
if output is None:
# Happens in streaming
continue
token_usage = output['token_usage']
for k, v in token_usage.items():
if k in overall_token_usage:
overall_token_usage[k] += v
else:
overall_token_usage[k] = v
return {
'token_usage': overall_token_usage,
'model_name': self.model_name
}
def _generate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[CallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
message_dicts, params = self._create_message_dicts(messages, stop)
params = {**params, **kwargs}
response = self.completion_with_retry(messages=message_dicts, **params)
return self._create_chat_result(response)
async def _agenerate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
return self._generate(messages, stop, run_manager, **kwargs)
def _create_message_dicts(
self, messages: List[BaseMessage], stop: Optional[List[str]]
) -> Tuple[List[Dict[str, Any]], Dict[str, Any]]:
params = dict(self._client_params)
if stop is not None:
if 'stop' in params:
raise ValueError(
'`stop` found in both the input and default params.')
params['stop'] = stop
message_dicts = [_convert_message_to_dict(m) for m in messages]
return message_dicts, params
def _create_chat_result(self, response: Mapping[str, Any]) -> ChatResult:
generations = []
for res in response['choices']:
message = _convert_dict_to_message(res['message'])
gen = ChatGeneration(message=message)
generations.append(gen)
llm_output = {
'token_usage': response['usage'],
'model_name': self.model_name
}
return ChatResult(generations=generations, llm_output=llm_output)
@property
def _identifying_params(self) -> Mapping[str, Any]:
"""Get the identifying parameters."""
return {**{'model_name': self.model_name}, **self._default_params}
@property
def _client_params(self) -> Mapping[str, Any]:
"""Get the parameters used for the client."""
minimaxai_creds: Dict[str, Any] = {
'model': self.model_name,
}
return {**minimaxai_creds, **self._default_params}
def _get_invocation_params(self,
stop: Optional[List[str]] = None,
**kwargs: Any) -> Dict[str, Any]:
"""Get the parameters used to invoke the model FOR THE CALLBACKS."""
return {
**super()._get_invocation_params(stop=stop, **kwargs),
**self._default_params,
'model': self.model_name,
'function': kwargs.get('functions'),
}
@property
def _llm_type(self) -> str:
"""Return type of chat model."""
return 'xunfeiai_chat'
def _get_encoding_model(self) -> Tuple[str, tiktoken.Encoding]:
tiktoken_ = _import_tiktoken()
if self.tiktoken_model_name is not None:
model = self.tiktoken_model_name
else:
model = self.model_name
# model chatglm-std, chatglm-lite
# Returns the number of tokens used by a list of messages.
try:
encoding = tiktoken_.encoding_for_model(model)
except KeyError:
logger.warning(
'Warning: model not found. Using cl100k_base encoding.')
model = 'cl100k_base'
encoding = tiktoken_.get_encoding(model)
return model, encoding
def get_token_ids(self, text: str) -> List[int]:
"""Get the tokens present in the text with tiktoken package."""
# tiktoken NOT supported for Python 3.7 or below
if sys.version_info[1] <= 7:
return super().get_token_ids(text)
_, encoding_model = self._get_encoding_model()
return encoding_model.encode(text)
def get_num_tokens_from_messages(self, messages: List[BaseMessage]) -> int:
"""Calculate num tokens for chatglm with tiktoken package.
todo: read chatglm document
Official documentation: https://github.com/openai/openai-cookbook/blob/
main/examples/How_to_format_inputs_to_ChatGPT_models.ipynb"""
if sys.version_info[1] <= 7:
return super().get_num_tokens_from_messages(messages)
model, encoding = self._get_encoding_model()
if model.startswith('spark'):
# every message follows {role/name}\n{content}\n
tokens_per_message = 4
# if there's a name, the role is omitted
tokens_per_name = -1
else:
raise NotImplementedError(
f'get_num_tokens_from_messages() is not presently implemented '
f'for model {model}.'
'See https://github.com/openai/openai-python/blob/main/chatml.md for '
'information on how messages are converted to tokens.')
num_tokens = 0
messages_dict = [_convert_message_to_dict(m) for m in messages]
for message in messages_dict:
num_tokens += tokens_per_message
for key, value in message.items():
num_tokens += len(encoding.encode(value))
if key == 'name':
num_tokens += tokens_per_name
# every reply is primed with assistant
num_tokens += 3
return num_tokens
================================================
FILE: src/backend/bisheng_langchain/chat_models/zhipuai.py
================================================
"""ZhipuAI chat wrapper."""
from __future__ import annotations
import ast
import logging
import sys
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Mapping, Optional, Tuple, Union
from langchain.callbacks.manager import AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun
from langchain.chat_models.base import BaseChatModel
from langchain.schema import ChatGeneration, ChatResult
from langchain.schema.messages import (AIMessage, BaseMessage, ChatMessage, FunctionMessage,
HumanMessage, SystemMessage)
from langchain.utils import get_from_dict_or_env
from pydantic import ConfigDict, model_validator, Field
from tenacity import (before_sleep_log, retry, retry_if_exception_type, stop_after_attempt,
wait_exponential)
if TYPE_CHECKING:
import tiktoken
logger = logging.getLogger(__name__)
def _import_tiktoken() -> Any:
try:
import tiktoken
except ImportError:
raise ValueError('Could not import tiktoken python package. '
'This is needed in order to calculate get_token_ids. '
'Please install it with `pip install tiktoken`.')
return tiktoken
def _create_retry_decorator(llm: ChatZhipuAI) -> Callable[[Any], Any]:
min_seconds = 1
max_seconds = 20
# Wait 2^x * 1 second between each retry starting with
# 4 seconds, then up to 10 seconds, then 10 seconds afterwards
return retry(
reraise=True,
stop=stop_after_attempt(llm.max_retries),
wait=wait_exponential(multiplier=1, min=min_seconds, max=max_seconds),
retry=(retry_if_exception_type(Exception)),
before_sleep=before_sleep_log(logger, logging.WARNING),
)
def _convert_dict_to_message(_dict: Mapping[str, Any]) -> BaseMessage:
role = _dict['role']
if role == 'user':
return HumanMessage(content=_dict['content'])
elif role == 'assistant':
content = _dict['content'] or '' # OpenAI returns None for tool invocations
if _dict.get('function_call'):
additional_kwargs = {'function_call': dict(_dict['function_call'])}
else:
additional_kwargs = {}
return AIMessage(content=content, additional_kwargs=additional_kwargs)
elif role == 'system':
return SystemMessage(content=_dict['content'])
elif role == 'function':
return FunctionMessage(content=_dict['content'], name=_dict['name'])
else:
return ChatMessage(content=_dict['content'], role=role)
def _convert_message_to_dict(message: BaseMessage) -> dict:
if isinstance(message, ChatMessage):
message_dict = {'role': message.role, 'content': message.content}
elif isinstance(message, HumanMessage):
message_dict = {'role': 'user', 'content': message.content}
elif isinstance(message, AIMessage):
message_dict = {'role': 'assistant', 'content': message.content}
elif isinstance(message, SystemMessage):
message_dict = {'role': 'system', 'content': message.content}
# raise ValueError(f"not support system role {message}")
elif isinstance(message, FunctionMessage):
raise ValueError(f'not support funciton {message}')
else:
raise ValueError(f'Got unknown type {message}')
# if "name" in message.additional_kwargs:
# message_dict["name"] = message.additional_kwargs["name"]
return message_dict
def _convert_message_to_dict2(message: BaseMessage) -> List[dict]:
if isinstance(message, ChatMessage):
message_dict = {'role': message.role, 'content': message.content}
elif isinstance(message, HumanMessage):
message_dict = {'role': 'user', 'content': message.content}
elif isinstance(message, AIMessage):
message_dict = {'role': 'assistant', 'content': message.content}
elif isinstance(message, SystemMessage):
raise ValueError(f'not support system role {message}')
elif isinstance(message, FunctionMessage):
raise ValueError(f'not support funciton {message}')
else:
raise ValueError(f'Got unknown type {message}')
return [message_dict]
class ChatZhipuAI(BaseChatModel):
"""Wrapper around ZhipuAI Chat large language models.
To use, you should have the ``zhipuai`` python package installed, and the
environment variable ``ZHIPU_API_KEY`` set with your API key.
Example:
.. code-block:: python
from lib.zhipuai import ChatZhipuAI
chat_zhipu = ChatZhipu(model_name="chatglm-std")
"""
client: Optional[Any] #: :meta private:
model_name: str = Field(default='chatglm_std', alias='model')
"""Model name to use."""
temperature: float = 0.95
top_p: float = 0.7
"""What sampling temperature to use."""
model_kwargs: Optional[Dict[str, Any]] = Field(default_factory=dict)
"""Holds any model parameters valid for `create` call not explicitly specified."""
zhipuai_api_key: Optional[str] = None
request_timeout: Optional[Union[float, Tuple[float, float]]] = None
"""Timeout for requests to OpenAI completion API. Default is 600 seconds."""
max_retries: Optional[int] = 6
"""Maximum number of retries to make when generating."""
streaming: Optional[bool] = False
"""Whether to stream the results or not."""
n: Optional[int] = 1
"""Number of chat completions to generate for each prompt."""
max_tokens: Optional[int] = 1024
"""Maximum number of tokens to generate."""
tiktoken_model_name: Optional[str] = None
"""The model name to pass to tiktoken when using this class.
Tiktoken is used to count the number of tokens in documents to constrain
them to be under a certain limit. By default, when set to None, this will
be the same as the embedding model name. However, there are some cases
where you may want to use this Embedding class with a model name not
supported by tiktoken. This can include when using Azure embeddings or
when using one of the many model providers that expose an OpenAI-like
API but with different models. In those cases, in order to avoid erroring
when tiktoken is called, you can specify a model name to use here."""
verbose: Optional[bool] = False
model_config = ConfigDict(validate_by_name=True)
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
values['zhipuai_api_key'] = get_from_dict_or_env(values, 'zhipuai_api_key',
'ZHIPUAI_API_KEY')
try:
import zhipuai
zhipuai.api_key = values['zhipuai_api_key']
except ImportError:
raise ValueError('Could not import openai python package. '
'Please install it with `pip install zhipuai`.')
try:
values['client'] = zhipuai.model_api.invoke
except AttributeError:
raise ValueError('`openai` has no `ChatCompletion` attribute, this is likely '
'due to an old version of the zhipuai package. Try upgrading it '
'with `pip install --upgrade zhipuai`.')
return values
@property
def _default_params(self) -> Dict[str, Any]:
"""Get the default parameters for calling ZhipuAI API."""
return {
'model': self.model_name,
'temperature': self.temperature,
'top_p': self.top_p,
'max_tokens': self.max_tokens,
**self.model_kwargs,
}
def completion_with_retry(self, **kwargs: Any) -> Any:
retry_decorator = _create_retry_decorator(self)
@retry_decorator
def _completion_with_retry(**kwargs: Any) -> Any:
messages = kwargs.get('messages')
temperature = kwargs.get('temperature')
top_p = kwargs.get('top_p')
params = {
'prompt': messages,
'model': self.model_name,
'top_p': top_p,
'temperature': temperature,
'incremental': False
}
return self.client(**params)
return _completion_with_retry(**kwargs)
def _combine_llm_outputs(self, llm_outputs: List[Optional[dict]]) -> dict:
overall_token_usage: dict = {}
for output in llm_outputs:
if output is None:
# Happens in streaming
continue
token_usage = output['token_usage']
for k, v in token_usage.items():
if k in overall_token_usage:
overall_token_usage[k] += v
else:
overall_token_usage[k] = v
return {'token_usage': overall_token_usage, 'model_name': self.model_name}
def _generate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[CallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
message_dicts, params = self._create_message_dicts(messages, stop)
params = {**params, **kwargs}
response = self.completion_with_retry(messages=message_dicts, **params)
if response['code'] == 1301:
response = {'code': 200,
'msg': '操作成功',
'data': {'request_id': '0', 'task_id': '0', 'task_status': 'SUCCESS',
'choices': [{'role': 'assistant', 'content': '""'}],
'usage': {'prompt_tokens': 0, 'completion_tokens': 0, 'total_tokens': 0}},
'success': True}
return self._create_chat_result(response)
async def _agenerate(
self,
messages: List[BaseMessage],
stop: Optional[List[str]] = None,
run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> ChatResult:
return self._generate(messages, stop, run_manager, **kwargs)
def _create_message_dicts(
self, messages: List[BaseMessage],
stop: Optional[List[str]]) -> Tuple[List[Dict[str, Any]], Dict[str, Any]]:
params = dict(self._client_params)
if stop is not None:
if 'stop' in params:
raise ValueError('`stop` found in both the input and default params.')
params['stop'] = stop
system_content = ''
message_dicts = []
for m in messages:
if m.type == 'system':
system_content += m.content
continue
message_dicts.extend(_convert_message_to_dict2(m))
if system_content:
message_dicts[-1]['content'] = system_content + message_dicts[-1]['content']
return message_dicts, params
def _create_chat_result(self, response: Mapping[str, Any]) -> ChatResult:
generations = []
# print('response', response)
def _norm_text(text):
if text[0] == '"' and text[-1] == '"':
out = ast.literal_eval(text)
else:
out = text
return out
for res in response['data']['choices']:
res['content'] = _norm_text(res['content'])
message = _convert_dict_to_message(res)
gen = ChatGeneration(message=message)
generations.append(gen)
llm_output = {'token_usage': response['data']['usage'], 'model_name': self.model_name}
return ChatResult(generations=generations, llm_output=llm_output)
@property
def _identifying_params(self) -> Mapping[str, Any]:
"""Get the identifying parameters."""
return {**{'model_name': self.model_name}, **self._default_params}
@property
def _client_params(self) -> Mapping[str, Any]:
"""Get the parameters used for the openai client."""
zhipu_creds: Dict[str, Any] = {
'api_key': self.zhipuai_api_key,
'model': self.model_name,
}
return {**zhipu_creds, **self._default_params}
def _get_invocation_params(self,
stop: Optional[List[str]] = None,
**kwargs: Any) -> Dict[str, Any]:
"""Get the parameters used to invoke the model FOR THE CALLBACKS."""
return {
**super()._get_invocation_params(stop=stop, **kwargs),
**self._default_params,
'model': self.model_name,
'function': kwargs.get('functions'),
}
@property
def _llm_type(self) -> str:
"""Return type of chat model."""
return 'zhipu-chat'
def _get_encoding_model(self) -> Tuple[str, tiktoken.Encoding]:
tiktoken_ = _import_tiktoken()
if self.tiktoken_model_name is not None:
model = self.tiktoken_model_name
else:
model = self.model_name
# model chatglm-std, chatglm-lite
# Returns the number of tokens used by a list of messages.
try:
encoding = tiktoken_.encoding_for_model(model)
except KeyError:
logger.warning('Warning: model not found. Using cl100k_base encoding.')
model = 'cl100k_base'
encoding = tiktoken_.get_encoding(model)
return model, encoding
def get_token_ids(self, text: str) -> List[int]:
"""Get the tokens present in the text with tiktoken package."""
# tiktoken NOT supported for Python 3.7 or below
if sys.version_info[1] <= 7:
return super().get_token_ids(text)
_, encoding_model = self._get_encoding_model()
return encoding_model.encode(text)
def get_num_tokens_from_messages(self, messages: List[BaseMessage]) -> int:
"""Calculate num tokens for chatglm with tiktoken package.
todo: read chatglm document
Official documentation: https://github.com/openai/openai-cookbook/blob/
main/examples/How_to_format_inputs_to_ChatGPT_models.ipynb"""
if sys.version_info[1] <= 7:
return super().get_num_tokens_from_messages(messages)
model, encoding = self._get_encoding_model()
if model.startswith('chatglm'):
# every message follows {role/name}\n{content}\n
tokens_per_message = 4
# if there's a name, the role is omitted
tokens_per_name = -1
else:
raise NotImplementedError(
f'get_num_tokens_from_messages() is not presently implemented '
f'for model {model}.'
'See https://github.com/openai/openai-python/blob/main/chatml.md for '
'information on how messages are converted to tokens.')
num_tokens = 0
messages_dict = [_convert_message_to_dict(m) for m in messages]
for message in messages_dict:
num_tokens += tokens_per_message
for key, value in message.items():
num_tokens += len(encoding.encode(value))
if key == 'name':
num_tokens += tokens_per_name
# every reply is primed with assistant
num_tokens += 3
return num_tokens
================================================
FILE: src/backend/bisheng_langchain/document_loaders/__init__.py
================================================
from .custom_kv import CustomKVLoader
from .elem_pdf import PDFWithSemanticLoader
from .elem_unstrcutured_loader import ElemUnstructuredLoader, ElemUnstructuredLoaderV0
from .universal_kv import UniversalKVLoader
__all__ = [
'PDFWithSemanticLoader',
'ElemUnstructuredLoader',
'ElemUnstructuredLoaderV0',
'UniversalKVLoader',
'CustomKVLoader',
]
================================================
FILE: src/backend/bisheng_langchain/document_loaders/custom_kv.py
================================================
# flake8: noqa
"""Loads PDF with semantic splilter."""
import base64
import json
import logging
import os
import re
import tempfile
from pathlib import Path
from time import sleep
from typing import List, Optional, Tuple, Union
from urllib.parse import quote_plus, unquote, urlparse
import cv2
import fitz
import numpy as np
from bisheng_langchain.utils.requests import Requests
from langchain_community.docstore.document import Document
from langchain_community.document_loaders.base import BaseLoader
from PIL import Image
logger = logging.getLogger(__name__)
def convert_base64(image):
image_binary = cv2.imencode('.jpg', image)[1].tobytes()
x = base64.b64encode(image_binary)
return x.decode('ascii').replace('\n', '')
def transpdf2png(pdf_file):
pdf_bytes = open(pdf_file, 'rb').read()
pdf = fitz.Document(stream=pdf_bytes, filetype='pdf')
dpis = [72, 144, 200]
pdf_images = dict()
for page in pdf:
pix = None
for dpi in dpis:
pix = page.get_pixmap(dpi=dpi)
if min(pix.width, pix.height) >= 1600: break
mode = 'RGBA' if pix.alpha else 'RGB'
img = Image.frombytes(mode, [pix.width, pix.height], pix.samples)
# RGB to BGR
img = np.array(img)[:, :, ::-1]
img_name = 'page_{:03d}'.format(page.number)
pdf_images[img_name] = img
return pdf_images
class CustomKVLoader(BaseLoader):
"""Extract key-value from pdf or image.
"""
def __init__(self,
file_path: str,
elm_api_base_url: str,
elm_api_key: str,
schemas: str,
elem_server_id: str,
task_type: str,
request_timeout: Optional[Union[float, Tuple[float, float]]] = 30) -> None:
"""Initialize with a file path."""
self.file_path = file_path
self.elm_api_base_url = elm_api_base_url
self.elm_api_key = elm_api_key
self.elem_server_id = elem_server_id
self.task_type = task_type
self.schemas = set(schemas.split('|'))
self.headers = {'Authorization': f'Bearer {elm_api_key}'}
self.requests = Requests(headers=self.headers, request_timeout=request_timeout)
if '~' in self.file_path:
self.file_path = os.path.expanduser(self.file_path)
# If the file is a web path, download it to a temporary file, and use that
if not os.path.isfile(self.file_path) and self._is_valid_url(self.file_path):
r = self.requests.get(self.file_path)
if r.status_code != 200:
raise ValueError('Check the url of your file; returned status code %s' %
r.status_code)
self.temp_dir = tempfile.TemporaryDirectory()
temp_file = Path(self.temp_dir.name) / unquote(
urlparse(self.file_path).path.split('/')[-1])
with open(temp_file, mode='wb') as f:
f.write(r.content)
self.file_path = str(temp_file)
elif not os.path.isfile(self.file_path):
raise ValueError('File path %s is not a valid file or url' % self.file_path)
super().__init__()
@staticmethod
def _is_valid_url(url: str) -> bool:
"""Check if the url is valid."""
parsed = urlparse(url)
return bool(parsed.netloc) and bool(parsed.scheme)
def load(self) -> List[Document]:
"""Load given path as pages."""
# mime_type = filetype.guess(self.file_path).mime
# if mime_type.endswith('pdf'):
# file_type = 'pdf'
# elif mime_type.startswith('image'):
# file_type = 'img'
# else:
# raise ValueError(f'file type {file_type} is not support.')
with open(self.file_path, 'rb') as file:
file = {'file': open(self.file_path, 'rb')}
result = {}
if self.task_type == 'extraction-job':
url = self.elm_api_base_url + '/task'
# 创建task
body = {'scene_id': self.elem_server_id}
elif self.task_type == 'logic-job':
url = self.elm_api_base_url + '/logic-job'
body = {'logic_service_id': self.elem_server_id}
resp = self.requests.post(url=url, json={}, data=body, files=file)
if resp.status_code == 200:
task_id = resp.json().get('data').get('task_id')
if not task_id:
logger.error(f'task_create_fail res={resp.text}')
return
# get status
status_url = url + f'/status?task_id={task_id}'
count = 0
while True:
status = self.requests.get(status_url).json()
if 1 == status.get('data').get('status'):
count += 1
sleep(2)
elif 3 == status.get('data').get('status'):
# 失败
logger.error(f'custom_kv type={self.task_type} resp={status}')
return []
else:
break
# get result
job_id = 'job_id' if self.task_type == 'logic-job' else 'task_id'
match = re.match(r'^(?:https?:\/\/)?(?:www\.)?([^\/\n]+)', self.elm_api_base_url)
detail_url = quote_plus(match.group() + f'/logic-job-detail/{task_id}')
result_url = url + f'/result?{job_id}={task_id}&detail_url={detail_url}'
result = self.requests.get(result_url).json()
# only for independent key
document_result = {}
try:
result = self.requests.get(result_url).json()
file_reuslt = result.get('data')
for result in file_reuslt:
independent = result.get('result').get('independent_list')
for element in independent:
if element.get('element_name') in self.schemas:
document_result[element.get('element_name')] = [
el.get('words') for el in element.get('entity_list')
]
except Exception as e:
logger.error(
f'task_result_error scene_id={self.elem_server_id} res={result} except={str(e)}'
)
raise Exception('custom_kv parse_error')
else:
logger.error(f'custom_kv=create_task resp={resp.text}')
raise Exception('custom_kv create task fail')
content = json.dumps(document_result)
doc = Document(page_content=content)
return [doc]
================================================
FILE: src/backend/bisheng_langchain/document_loaders/elem_html.py
================================================
================================================
FILE: src/backend/bisheng_langchain/document_loaders/elem_image.py
================================================
================================================
FILE: src/backend/bisheng_langchain/document_loaders/elem_pdf.py
================================================
# flake8: noqa
"""Loads PDF with semantic splilter."""
import io
import json
import os
import re
import time
from collections import Counter
from copy import deepcopy
from typing import List, Optional, Union
import fitz
import numpy as np
from bisheng_langchain.document_loaders.parsers import LayoutParser
from langchain_community.docstore.document import Document
from langchain_community.document_loaders.blob_loaders import Blob
from langchain_community.document_loaders.pdf import BasePDFLoader
from shapely import Polygon
from shapely import box as Rect
RE_MULTISPACE_INCLUDING_NEWLINES = re.compile(pattern=r'\s+', flags=re.DOTALL)
def merge_rects(bboxes):
x0 = np.min(bboxes[:, 0])
y0 = np.min(bboxes[:, 1])
x1 = np.max(bboxes[:, 2])
y1 = np.max(bboxes[:, 3])
return [x0, y0, x1, y1]
def norm_rect(bbox):
x0 = np.min([bbox[0], bbox[2]])
x1 = np.max([bbox[0], bbox[2]])
y0 = np.min([bbox[1], bbox[3]])
y1 = np.max([bbox[1], bbox[3]])
return np.asarray([x0, y0, x1, y1])
def find_max_continuous_seq(arr):
n = len(arr)
max_info = (0, 1)
for i in range(n):
m = 1
for j in range(i + 1, n):
if arr[j] - arr[j - 1] == 1:
m += 1
else:
break
if m > max_info[1]:
max_info = (i, m)
max_info = (max_info[0] + arr[0], max_info[1])
return max_info
def order_by_tbyx(block_info, th=10):
"""
block_info: [(b0, b1, b2, b3, text, x, y)+]
th: threshold of the position threshold
"""
# sort using y1 first and then x1
res = sorted(block_info, key=lambda b: (b[1], b[0]))
for i in range(len(res) - 1):
for j in range(i, 0, -1):
# restore the order using the
if (abs(res[j + 1][1] - res[j][1]) < th and (res[j + 1][0] < res[j][0])):
tmp = deepcopy(res[j])
res[j] = deepcopy(res[j + 1])
res[j + 1] = deepcopy(tmp)
else:
break
return res
def join_lines(texts, is_table=False):
if is_table:
return '\n'.join(texts)
flags = []
PUNC_SET = set(['.', ',', ';', '?', '!'])
for text in texts:
flags.append(np.all([t.isalnum() for t in text.rsplit(' ', 5)]))
if np.all(flags):
t0 = texts[0]
for t in texts[1:]:
if t0[-1] == '-':
t0 = t0[:-1] + t
elif t0[-1].isalnum() and t[0].isalnum():
t0 += ' ' + t
elif t0[-1] in PUNC_SET or t[0] in PUNC_SET:
t0 += ' ' + t
else:
t0 += t
return t0
else:
return ''.join(texts)
class Segment:
def __init__(self, seg):
self.whole = seg
self.segs = []
@staticmethod
def is_align(seg0, seg1, delta=5, mode=0):
# mode=0 edge align
# mode=1, edge align or center align
res = Segment.contain(seg0, seg1)
if not res:
return False
else:
if mode == 1:
r1 = seg1[0] - seg0[0] <= delta or seg0[1] - seg1[1] <= delta
c0 = (seg0[0] + seg0[1]) / 2
c1 = (seg1[0] + seg1[1]) / 2
r2 = abs(c1 - c0) <= delta
return r1 or r2
else:
return seg1[0] - seg0[0] <= delta or seg0[1] - seg1[1] <= delta
@staticmethod
def contain(seg0, seg1):
return seg0[0] <= seg1[0] and seg0[1] >= seg1[0]
@staticmethod
def overlap(seg0, seg1):
max_x0 = max(seg0[0], seg1[0])
min_x1 = min(seg0[1], seg1[1])
return max_x0 < min_x1
def _merge(self, segs):
x0s = [s[0] for s in segs]
x1s = [s[1] for s in segs]
return (np.min(x0s), np.max(x1s))
def add(self, seg):
if not self.segs:
self.segs.append(seg)
else:
overlaps = []
non_overlaps = []
for seg0 in self.segs:
if Segment.overlap(seg0, seg):
overlaps.append(seg0)
else:
non_overlaps.append(seg0)
if not overlaps:
self.segs.append(seg)
else:
overlaps.append(seg)
new_seg = self._merge(overlaps)
non_overlaps.append(new_seg)
self.segs = non_overlaps
def get_free_segment(self, incr_margin=True, margin_threshold=10):
sorted_segs = sorted(self.segs, key=lambda x: x[0])
n = len(sorted_segs)
free_segs = []
if incr_margin:
if n > 0:
seg_1st = sorted_segs[0]
if (seg_1st[0] - self.whole[0]) > margin_threshold:
free_segs.append((self.whole[0], seg_1st[0]))
seg_last = sorted_segs[-1]
if (self.whole[1] - seg_last[1]) > margin_threshold:
free_segs.append((seg_last[1], self.whole[1]))
for i in range(n - 1):
x0 = sorted_segs[i][1]
x1 = sorted_segs[i + 1][0]
free_segs.append((x0, x1))
return free_segs
class PDFWithSemanticLoader(BasePDFLoader):
"""Loads a PDF with pypdf and chunks at character level.
Loader also stores page numbers in metadata.
"""
def __init__(self,
file_path: str,
password: Optional[Union[str, bytes]] = None,
layout_api_key: str = None,
layout_api_url: str = None,
is_join_table: bool = True,
with_columns: bool = False,
support_rotate: bool = False,
text_elem_sep: str = '\n',
start: int = 0,
n: int = None,
html_output_file: str = None,
verbose: bool = False) -> None:
"""Initialize with a file path."""
self.layout_parser = LayoutParser(api_key=layout_api_key, api_base_url=layout_api_url)
self.with_columns = with_columns
self.is_join_table = is_join_table
self.support_rotate = support_rotate
self.start = start
self.n = n
self.html_output_file = html_output_file
self.verbose = verbose
self.text_elem_sep = text_elem_sep
super().__init__(file_path)
def _get_image_blobs(self, fitz_doc, pdf_reader, n=None, start=0):
blobs = []
pages = []
if not n:
n = fitz_doc.page_count
for pg in range(start, start + n):
bytes_img = None
page = fitz_doc.load_page(pg)
pages.append(page)
mat = fitz.Matrix(1, 1)
try:
pm = page.get_pixmap(matrix=mat, alpha=False)
bytes_img = pm.getPNGData()
except Exception:
# some pdf input cannot get render image from fitz
page = pdf_reader.get_page(pg)
pil_image = page.render().to_pil()
img_byte_arr = io.BytesIO()
pil_image.save(img_byte_arr, format='PNG')
bytes_img = img_byte_arr.getvalue()
blobs.append(Blob(data=bytes_img))
return blobs, pages
def _allocate_semantic(self, page, layout):
class_name = ['印章', '图片', '标题', '段落', '表格', '页眉', '页码', '页脚']
effective_class_inds = [3, 4, 5, 999]
non_conti_class_ids = [6, 7, 8]
TEXT_ID = 4
TABLE_ID = 5
textpage = page.get_textpage()
blocks = textpage.extractBLOCKS()
if self.support_rotate:
rotation_matrix = np.asarray(page.rotation_matrix).reshape((3, 2))
c1 = (rotation_matrix[0, 0] - 1) <= 1e-6
c2 = (rotation_matrix[1, 1] - 1) <= 1e-6
is_rotated = c1 and c2
# print('c1/c2', c1, c2)
if is_rotated:
new_blocks = []
for b in blocks:
bbox = np.asarray([b[0], b[1], b[2], b[3]])
aug_bbox = bbox.reshape((-1, 2))
padding = np.ones((len(aug_bbox), 1))
aug_bbox = np.hstack([aug_bbox, padding])
bb = np.dot(aug_bbox, rotation_matrix).reshape(-1)
bb = norm_rect(bb)
info = (bb[0], bb[1], bb[2], bb[3], b[4], b[5], b[6])
new_blocks.append(info)
blocks = new_blocks
if not self.with_columns:
blocks = order_by_tbyx(blocks)
# print('---ori blocks---')
# for b in blocks:
# print(b)
IMG_BLOCK_TYPE = 1
text_ploys = []
text_rects = []
texts = []
for b in blocks:
if b[-1] != IMG_BLOCK_TYPE:
text = re.sub(RE_MULTISPACE_INCLUDING_NEWLINES, ' ', b[4] or '').strip()
if text:
texts.append(text)
text_ploys.append(Rect(b[0], b[1], b[2], b[3]))
text_rects.append([b[0], b[1], b[2], b[3]])
text_rects = np.asarray(text_rects)
texts = np.asarray(texts)
semantic_polys = []
semantic_labels = []
layout_info = json.loads(layout.page_content)
for info in layout_info:
bbs = info['bbox']
coords = ((bbs[0], bbs[1]), (bbs[2], bbs[3]), (bbs[4], bbs[5]), (bbs[6], bbs[7]))
semantic_polys.append(Polygon(coords))
semantic_labels.append(info['category_id'])
# caculate containing overlap
sem_cnt = len(semantic_polys)
texts_cnt = len(text_ploys)
contain_matrix = np.zeros((sem_cnt, texts_cnt))
for i in range(sem_cnt):
for j in range(texts_cnt):
inter = semantic_polys[i].intersection(text_ploys[j]).area
contain_matrix[i, j] = inter * 1.0 / text_ploys[j].area
# print('----------------containing matrix--------')
# for r in contain_matrix.tolist():
# print([round(r_, 2) for r_ in r])
# print('---text---')
# for t in texts:
# print(t)
# merge continuous text block by the containing matrix
CONTRAIN_THRESHOLD = 0.70
contain_info = []
for i in range(sem_cnt):
ind = np.argwhere(contain_matrix[i, :] > CONTRAIN_THRESHOLD)[:, 0]
if len(ind) == 0: continue
label = semantic_labels[i]
if label in non_conti_class_ids:
n = len(ind)
contain_info.append((None, None, n, label, ind))
else:
start, n = find_max_continuous_seq(ind)
if n >= 1:
contain_info.append((start, start + n, n, label, None))
contain_info = sorted(contain_info, key=lambda x: x[2], reverse=True)
mask = np.zeros(texts_cnt)
new_block_info = []
for info in contain_info:
start, end, n, label, ind = info
if label in non_conti_class_ids and np.all(mask[ind] == 0):
rect = merge_rects(text_rects[ind])
ori_orders = [blocks[i][-2] for i in ind]
ts = texts[ind]
rs = text_rects[ind]
ord_ind = np.min(ori_orders)
mask[ind] = 1
new_block_info.append((rect[0], rect[1], rect[2], rect[3], ts, rs, ord_ind))
elif np.all(mask[start:end] == 0):
rect = merge_rects(text_rects[start:end])
ori_orders = [blocks[i][-2] for i in range(start, end)]
arg_ind = np.argsort(ori_orders)
# print('ori_orders', ori_orders, arg_ind)
ord_ind = np.min(ori_orders)
ts = texts[start:end]
rs = text_rects[start:end]
if label == TABLE_ID:
ts = ts[arg_ind]
rs = rs[arg_ind]
mask[start:end] = 1
new_block_info.append((rect[0], rect[1], rect[2], rect[3], ts, rs, ord_ind))
for i in range(texts_cnt):
if mask[i] == 0:
b = blocks[i]
r = np.asarray([b[0], b[1], b[2], b[3]])
ord_ind = b[-2]
new_block_info.append((b[0], b[1], b[2], b[3], [texts[i]], [r], ord_ind))
if self.with_columns:
new_blocks = sorted(new_block_info, key=lambda x: x[-1])
else:
new_blocks = order_by_tbyx(new_block_info)
# print('\n\n---new blocks---')
# for idx, b in enumerate(new_blocks):
# print(idx, b)
text_ploys = []
texts = []
for b in new_blocks:
texts.append(b[4])
text_ploys.append(Rect(b[0], b[1], b[2], b[3]))
# caculate overlap
sem_cnt = len(semantic_polys)
texts_cnt = len(text_ploys)
overlap_matrix = np.zeros((sem_cnt, texts_cnt))
for i in range(sem_cnt):
for j in range(texts_cnt):
inter = semantic_polys[i].intersection(text_ploys[j]).area
union = semantic_polys[i].union(text_ploys[j]).area
overlap_matrix[i, j] = (inter * 1.0) / union
# print('---overlap_matrix---')
# for r in overlap_matrix:
# print([round(r_, 3) for r_ in r])
# allocate label
OVERLAP_THRESHOLD = 0.2
texts_labels = []
DEF_SEM_LABEL = 999
for j in range(texts_cnt):
ind = np.argwhere(overlap_matrix[:, j] > OVERLAP_THRESHOLD)[:, 0]
if len(ind) == 0:
sem_label = DEF_SEM_LABEL
else:
c = Counter([semantic_labels[i] for i in ind])
items = c.most_common()
sem_label = items[0][0]
if len(items) > 1 and TEXT_ID in dict(items):
sem_label = TEXT_ID
texts_labels.append(sem_label)
# print(texts_labels)
# filter the unused element
filtered_blocks = []
for label, b in zip(texts_labels, new_blocks):
if label in effective_class_inds:
text = join_lines(b[4], label == TABLE_ID)
filtered_blocks.append((b[0], b[1], b[2], b[3], text, b[5], label))
# print('---filtered_blocks---')
# for b in filtered_blocks:
# print(b)
return filtered_blocks
def _divide_blocks_into_groups(self, blocks):
# support only pure two columns layout, each has same width
rects = np.asarray([[b[0], b[1], b[2], b[3]] for b in blocks])
min_x0 = np.min(rects[:, 0])
max_x1 = np.max(rects[:, 2])
root_seg = (min_x0, max_x1)
root_pc = (min_x0 + max_x1) / 2
root_offset = 20
center_seg = (root_pc - root_offset, root_pc + root_offset)
segment = Segment(root_seg)
for r in rects:
segment.add((r[0], r[2]))
COLUMN_THRESHOLD = 0.90
CENTER_GAP_THRESHOLD = 0.90
free_segs = segment.get_free_segment()
columns = []
if len(free_segs) == 1 and len(segment.segs) == 2:
free_seg = free_segs[0]
seg0 = segment.segs[0]
seg1 = segment.segs[1]
cover = seg0[1] - seg0[0] + seg1[1] - seg1[0]
c0 = cover / (root_seg[1] - root_seg[0])
c1 = Segment.contain(center_seg, free_seg)
if c0 > COLUMN_THRESHOLD and c1:
# two columns
columns.extend([seg0, seg1])
groups = [blocks]
if columns:
groups = [[] for _ in columns]
for b, r in zip(blocks, rects):
column_ind = 0
cand_seg = (r[0], r[2])
for i, seg in enumerate(columns):
if Segment.contain(seg, cand_seg):
column_ind = i
break
groups[i].append(b)
return groups
def _allocate_continuous(self, groups):
g_bound = []
groups = [g for g in groups if g]
for blocks in groups:
arr = [[b[0], b[1], b[2], b[3]] for b in blocks]
bboxes = np.asarray(arr)
g_bound.append(np.asarray(merge_rects(bboxes)))
LINE_FULL_THRESHOLD = 0.80
START_THRESHOLD = 0.8
SIMI_HEIGHT_THRESHOLD = 0.3
SIMI_WIDTH_THRESHOLD = 0.3
TEXT_ID = 4
TABLE_ID = 5
def _get_elem(blocks, is_first=True):
if not blocks:
return (None, None, None, None, None)
if is_first:
b1 = blocks[0]
b1_label = b1[-1]
r1 = b1[5][0]
r1_w = r1[2] - r1[0]
r1_h = r1[3] - r1[1]
return (b1, b1_label, r1, r1_w, r1_h)
else:
b0 = blocks[-1]
b0_label = b0[-1]
r0 = b0[5][-1]
r0_w = r0[2] - r0[0]
r0_h = r0[3] - r0[1]
return (b0, b0_label, r0, r0_w, r0_h)
b0, b0_label, r0, r0_w, r0_h = _get_elem(groups[0], False)
g0 = g_bound[0]
for i in range(1, len(groups)):
b1, b1_label, r1, r1_w, r1_h = _get_elem(groups[i], True)
g1 = g_bound[i]
# print('\n_allocate_continuous:')
# print(b0, b0_label, b1, b1_label)
if b0_label and b0_label == b1_label and b0_label == TEXT_ID:
c0 = r0_w / (g0[2] - g0[0])
c1 = (r1[0] - g1[0]) / r1_h
c2 = np.abs(r0_h - r1_h) / r1_h
# print('\n\n---conti texts---')
# print(b0_label, c0, c1, c2,
# b0, b0_label, r0, r0_w, r0_h,
# b1, b1_label, r1, r1_w, r1_h)
if (c0 > LINE_FULL_THRESHOLD and c1 < START_THRESHOLD
and c2 < SIMI_HEIGHT_THRESHOLD):
new_text = join_lines([b0[4], b1[4]])
new_block = (b0[0], b0[1], b0[2], b0[3], new_text, b0[5], b0[6])
groups[i - 1][-1] = new_block
groups[i].pop(0)
elif (self.is_join_table and b0_label and b0_label == b1_label
and b0_label == TABLE_ID):
c0 = (r1_w - r0_w) / r1_h
if c0 < SIMI_WIDTH_THRESHOLD:
new_text = join_lines([b0[4], b1[4]], True)
new_block = (b0[0], b0[1], b0[2], b0[3], new_text, b0[5], b0[6])
groups[i - 1][-1] = new_block
groups[i].pop(0)
b0, b0_label, r0, r0_w, r0_h = _get_elem(groups[i], False)
return groups
def save_to_html(self, groups, output_file):
styles = ['style="background-color: #EBEBEB;"', 'style="background-color: #ABBAEA;"']
idx = 0
table_style = 'style="border:1px solid black;"'
with open(output_file, 'w') as fout:
for blocks in groups:
for b in blocks:
if b[-1] == 3:
text = f'{b[4]}'
elif b[-1] == 4:
text = f'{b[4]} '
idx += 1
elif b[-1] == 5:
rows = b[4].split('\n')
content = []
for r in rows:
content.append(f'| {r} | ')
elem_text = '\n'.join(content)
text = f''
else:
text = f'{b[4]} '
idx += 1
fout.write(text + '\n')
def _save_to_document(self, groups):
TITLE_ID = 3
TEXT_ID = 4
TABLE_ID = 5
content_page = []
is_first_elem = True
for blocks in groups:
for b in blocks:
if is_first_elem:
content_page.append(b[4])
is_first_elem = False
else:
label, text = b[-1], b[4]
if label == TITLE_ID:
content_page.append('\n\n' + text)
else:
content_page.append(self.text_elem_sep + text)
return ''.join(content_page)
def load(self) -> List[Document]:
"""Load given path as pages."""
import pypdfium2
blob = Blob.from_path(self.file_path)
start = self.start
groups = []
with blob.as_bytes_io() as file_path:
fitz_doc = fitz.open(file_path)
pdf_doc = pypdfium2.PdfDocument(file_path, autoclose=True)
max_page = fitz_doc.page_count - start
n = self.n if self.n else max_page
n = min(n, max_page)
tic = time.time()
if self.verbose:
print(f'{n} pages need be processed...')
for idx in range(start, start + n):
blobs, pages = self._get_image_blobs(fitz_doc, pdf_doc, 1, idx)
layout = self.layout_parser.parse(blobs[0])[0]
blocks = self._allocate_semantic(pages[0], layout)
if not blocks: continue
if self.with_columns:
sub_groups = self._divide_blocks_into_groups(blocks)
groups.extend(sub_groups)
else:
groups.append(blocks)
if self.verbose:
count = idx - start + 1
if count % 50 == 0:
elapse = round(time.time() - tic, 2)
tic = time.time()
print(f'process {count} pages used {elapse}sec...')
groups = self._allocate_continuous(groups)
if self.html_output_file:
self.save_to_html(groups, self.html_output_file)
return []
page_content = self._save_to_document(groups)
meta = {'source': os.path.basename(self.file_path)}
doc = Document(page_content=page_content, metadata=meta)
return [doc]
================================================
FILE: src/backend/bisheng_langchain/document_loaders/elem_unstrcutured_loader.py
================================================
# flake8: noqa
"""Loads PDF with semantic splilter."""
import base64
import logging
import os
from typing import List
import requests
from langchain_community.docstore.document import Document
from langchain_community.document_loaders.pdf import BasePDFLoader
logger = logging.getLogger(__name__)
def merge_partitions(partitions):
text_elem_sep = '\n'
doc_content = []
is_first_elem = True
last_label = ''
prev_length = 0
metadata = dict(bboxes=[], pages=[], indexes=[], types=[])
for part in partitions:
label, text = part['type'], part['text']
extra_data = part['metadata']['extra_data']
if is_first_elem:
f_text = text + '\n' if label == 'Title' else text
doc_content.append(f_text)
is_first_elem = False
else:
if last_label == 'Title' and label == 'Title':
doc_content.append('\n' + text)
elif label == 'Title':
doc_content.append('\n\n' + text)
elif label == 'Table':
doc_content.append('\n\n' + text)
else:
if last_label == 'Table':
doc_content.append(text_elem_sep * 2 + text)
else:
doc_content.append(text_elem_sep + text)
last_label = label
metadata['bboxes'].extend(list(map(lambda x: list(map(int, x)), extra_data['bboxes'])))
metadata['pages'].extend(extra_data['pages'])
metadata['types'].extend(extra_data['types'])
indexes = extra_data['indexes']
up_indexes = [[s + prev_length, e + prev_length] for (s, e) in indexes]
metadata['indexes'].extend(up_indexes)
prev_length += len(doc_content[-1])
content = ''.join(doc_content)
return content, metadata
class ElemUnstructuredLoader(BasePDFLoader):
"""Loads a PDF with pypdf and chunks at character level. dummy version
Loader also stores page numbers in metadata.
"""
def __init__(self,
file_name: str,
file_path: str,
unstructured_api_key: str = None,
unstructured_api_url: str = None,
force_ocr: bool = False,
enable_formular: bool = True,
filter_page_header_footer: bool = False,
ocr_sdk_url: str = None,
start: int = 0,
n: int = None,
verbose: bool = False,
kwargs: dict = {}) -> None:
"""Initialize with a file path."""
self.unstructured_api_url = unstructured_api_url
self.unstructured_api_key = unstructured_api_key
self.force_ocr = force_ocr
self.enable_formular = enable_formular
self.filter_page_header_footer = filter_page_header_footer
self.ocr_sdk_url = ocr_sdk_url,
self.headers = {'Content-Type': 'application/json'}
self.file_name = file_name
self.start = start
self.n = n
self.extra_kwargs = kwargs
self.partitions = None
super().__init__(file_path)
def load(self) -> List[Document]:
"""Load given path as pages."""
b64_data = base64.b64encode(open(self.file_path, 'rb').read()).decode()
parameters = {'start': self.start, 'n': self.n}
parameters.update(self.extra_kwargs)
# TODO: add filter_page_header_footer into payload when elt4llm is ready.
payload = dict(filename=os.path.basename(self.file_name),
b64_data=[b64_data],
mode='partition',
force_ocr=self.force_ocr,
enable_formula=self.enable_formular,
ocr_sdk_url=self.ocr_sdk_url,
parameters=parameters)
resp = requests.post(self.unstructured_api_url, headers=self.headers, json=payload)
if resp.status_code != 200:
raise Exception(
f'file partition {os.path.basename(self.file_name)} failed resp={resp.text}')
resp = resp.json()
if 200 != resp.get('status_code'):
logger.info(f'file partition {os.path.basename(self.file_name)} error resp={resp}')
raise Exception(f'file partition error {os.path.basename(self.file_name)} error resp={resp}')
partitions = resp['partitions']
if partitions:
logger.info(f'content_from_partitions')
self.partitions = partitions
content, metadata = merge_partitions(partitions)
elif resp.get('text'):
logger.info(f'content_from_text')
content = resp['text']
metadata = {
"bboxes": [],
"pages": [],
"indexes": [],
"types": [],
}
else:
logger.warning(f'content_is_empty resp={resp}')
content = ''
metadata = {}
logger.info(f'unstruct_return code={resp.get("status_code")}')
if resp.get('b64_pdf'):
with open(self.file_path, 'wb') as f:
f.write(base64.b64decode(resp['b64_pdf']))
metadata['source'] = self.file_name
doc = Document(page_content=content, metadata=metadata)
return [doc]
class ElemUnstructuredLoaderV0(BasePDFLoader):
"""The appropriate parser is automatically selected based on the file format and OCR is supported
"""
def __init__(self,
file_name: str,
file_path: str,
unstructured_api_key: str = None,
unstructured_api_url: str = None,
start: int = 0,
n: int = None,
verbose: bool = False,
kwargs: dict = {}) -> None:
"""Initialize with a file path."""
self.unstructured_api_url = unstructured_api_url
self.unstructured_api_key = unstructured_api_key
self.start = start
self.n = n
self.headers = {'Content-Type': 'application/json'}
self.file_name = file_name
self.extra_kwargs = kwargs
super().__init__(file_path)
def load(self) -> List[Document]:
page_content, metadata = self.get_text_metadata()
doc = Document(page_content=page_content, metadata=metadata)
return [doc]
def get_text_metadata(self):
b64_data = base64.b64encode(open(self.file_path, 'rb').read()).decode()
payload = dict(filename=os.path.basename(self.file_name), b64_data=[b64_data], mode='text')
payload.update({'start': self.start, 'n': self.n})
payload.update(self.extra_kwargs)
resp = requests.post(self.unstructured_api_url, headers=self.headers, json=payload)
# 说明文件解析成功
if resp.status_code == 200 and resp.json().get('status_code') == 200:
res = resp.json()
return res['text'], {'source': self.file_name}
# 说明文件解析失败,pdf文件直接返回报错
if self.file_name.endswith('.pdf'):
raise Exception(
f'file text {os.path.basename(self.file_name)} failed resp={resp.text}')
# 非pdf文件,先将文件转为pdf格式,让后再执行partition模式解析文档
# 把文件转为pdf
resp = requests.post(self.unstructured_api_url,
headers=self.headers,
json={
'filename': os.path.basename(self.file_name),
'b64_data': [b64_data],
'mode': 'topdf',
})
if resp.status_code != 200 or resp.json().get('status_code') != 200:
raise Exception(
f'file topdf {os.path.basename(self.file_name)} failed resp={resp.text}')
# 解析pdf文件
payload['mode'] = 'partition'
payload['b64_data'] = [resp.json()['b64_pdf']]
payload['filename'] = os.path.basename(self.file_name) + '.pdf'
resp = requests.post(self.unstructured_api_url, headers=self.headers, json=payload)
if resp.status_code != 200 or resp.json().get('status_code') != 200:
raise Exception(
f'file partition {os.path.basename(self.file_name)} failed resp={resp.text}')
res = resp.json()
partitions = res['partitions']
if not partitions:
raise Exception(
f'file partition empty {os.path.basename(self.file_name)} resp={resp.text}')
# 拼接结果为文本
content, _ = merge_partitions(partitions)
return content, {'source': self.file_name}
================================================
FILE: src/backend/bisheng_langchain/document_loaders/parsers/__init__.py
================================================
from .image import LayoutParser
from .ocr_client import OCRClient
from .ellm_client import ELLMClient
__all__ = [
'LayoutParser',
'OCRClient',
'ELLMClient'
]
================================================
FILE: src/backend/bisheng_langchain/document_loaders/parsers/ellm_client.py
================================================
# import base64
import copy
from typing import Optional
import requests
class ELLMClient(object):
def __init__(self, api_base_url: Optional[str] = None):
self.ep = api_base_url
self.client = requests.Session()
self.timeout = 10000
self.params = {
'sort_filter_boxes': True,
'enable_huarong_box_adjust': True,
'support_long_image_segment': True,
'checkbox': ['std_checkbox'],
'rotateupright': True
}
self.scene_mapping = {
'doc': {
'det': 'general_text_det_mrcnn_v1.0',
'recog': 'transformer-v2.8-gamma-faster',
'ellm': 'ELLM'
},
'form': {
'det': 'general_text_det_v2.0',
'recog': 'general_text_reg_nb_v1.0_faster',
'ellm': 'ELLM'
},
'hand': {
'det': 'mrcnn-v5.1',
'recog': 'transformer-hand-v1.16-faster',
'ellm': 'ELLM'
}
}
def predict(self, inp):
scene = inp.pop('scene', 'form')
b64_image = inp.pop('b64_image')
ellm_schema = inp.pop('keys')
params = copy.deepcopy(self.params)
params.update(self.scene_mapping[scene])
params.update({'ellm_schema': ellm_schema})
req_data = {'data': [b64_image], 'param': params}
try:
r = self.client.post(url=self.ep, json=req_data, timeout=self.timeout)
return r.json()
except Exception as e:
return {'status_code': 400, 'status_message': str(e)}
================================================
FILE: src/backend/bisheng_langchain/document_loaders/parsers/image.py
================================================
import base64
import json
# import time
from typing import List, Optional
import requests
from langchain_community.document_loaders.blob_loaders import Blob
from langchain.schema import Document
class LayoutParser(object):
"""Parse image layout structure.
"""
def __init__(self,
api_key: Optional[str] = None,
api_base_url: Optional[str] = None):
self.api_key = api_key
self.api_base_url = 'http://192.168.106.20:14569/predict'
self.class_name = ['印章', '图片', '标题', '段落', '表格', '页眉', '页码', '页脚']
def parse(self, blob: Blob) -> List[Document]:
b64_data = base64.b64encode(blob.as_bytes()).decode()
data = {'img': b64_data}
resp = requests.post('http://192.168.106.20:14569/predict', data=data)
content = resp.json()
doc = Document(page_content=json.dumps(content), metadata={})
return [doc]
================================================
FILE: src/backend/bisheng_langchain/document_loaders/parsers/ocr_client.py
================================================
# import base64
import copy
import requests
import base64
from typing import Any, Iterator, List, Mapping, Optional, Union
class OCRClient(object):
def __init__(self,
api_base_url: Optional[str] = None):
# http://192.168.106.12:36001/v2/idp/idp_app/infer
self.ep = api_base_url
self.client = requests.Session()
self.timeout = 10000
self.params = {
'sort_filter_boxes': True,
'enable_huarong_box_adjust': True,
'support_long_image_segment': True,
'rotateupright': False,
}
self.scene_mapping = {
'doc': {
'det': 'general_text_det_mrcnn_v1.0',
'recog': 'transformer-v2.8-gamma-faster'
},
'form': {
'det': 'mrcnn-v5.1',
'recog': 'transformer-v2.8-gamma-faster'
},
'hand': {
'det': 'mrcnn-v5.1',
'recog': 'transformer-hand-v1.16-faster'
}
}
def predict(self, inp):
scene = inp.pop('scene', 'form')
b64_image = inp.pop('b64_image')
params = copy.deepcopy(self.params)
params.update(self.scene_mapping[scene])
params.update(inp)
req_data = {'data': [b64_image], 'param': params}
try:
r = self.client.post(url=self.ep,
json=req_data,
timeout=self.timeout)
return r.json()
except Exception as e:
return {'status_code': 400, 'status_message': str(e)}
================================================
FILE: src/backend/bisheng_langchain/document_loaders/parsers/test_image.py
================================================
# flake8: noqa
import io
import json
import logging
import os
import random
import tempfile
import time
from abc import ABC
from copy import deepcopy
from pathlib import Path
from typing import Any, Iterator, List, Mapping, Optional, Union
from urllib.parse import urlparse
import cv2
import fitz
import numpy as np
import pypdfium2
import requests
from image import LayoutParser
from langchain.document_loaders.blob_loaders import Blob
def norm_rect(bbox):
x0 = np.min([bbox[0], bbox[2]])
x1 = np.max([bbox[0], bbox[2]])
y0 = np.min([bbox[1], bbox[3]])
y1 = np.max([bbox[1], bbox[3]])
return np.asarray([x0, y0, x1, y1])
def merge_rects(bboxes):
x0 = np.min(bboxes[:, 0])
y0 = np.min(bboxes[:, 1])
x1 = np.max(bboxes[:, 2])
y1 = np.max(bboxes[:, 3])
return [x0, y0, x1, y1]
def get_image_blobs(pages, pdf_reader, n, start=0):
blobs = []
for pg in range(start, start + n):
bytes_img = None
page = pages.load_page(pg)
mat = fitz.Matrix(1, 1)
try:
pm = page.get_pixmap(matrix=mat, alpha=False)
bytes_img = pm.getPNGData()
except Exception:
# some pdf input cannot get render image from fitz
page = pdf_reader.get_page(pg)
pil_image = page.render().to_pil()
img_byte_arr = io.BytesIO()
pil_image.save(img_byte_arr, format='PNG')
bytes_img = img_byte_arr.getvalue()
blobs.append(Blob(data=bytes_img))
return blobs
def test():
file_path = './data/达梦数据库招股说明书_test_v1.pdf'
blob = Blob.from_path(file_path)
pages = None
image_blobs = []
with blob.as_bytes_io() as file_path:
pages = fitz.open(file_path)
pdf_reader = pypdfium2.PdfDocument(file_path, autoclose=True)
image_blobs = get_image_blobs(pages, pdf_reader)
assert len(image_blobs) == pages.page_count
layout = LayoutParser()
res = layout.parse(image_blobs[0])
def draw_polygon(image, bbox, text=None, color=(255, 0, 0), thickness=1):
bbox = bbox.astype(np.int32)
is_rect = bbox.shape[0] == 4
if is_rect:
start_point = (bbox[0], bbox[1])
end_point = (bbox[2], bbox[3])
image = cv2.rectangle(image, start_point, end_point, color, thickness)
else:
polys = [bbox.astype(np.int32).reshape((-1, 1, 2))]
cv2.polylines(image, polys, True, color=color, thickness=thickness)
start_point = (polys[0][0, 0, 0], polys[0][0, 0, 1])
if text:
fontFace = cv2.FONT_HERSHEY_SIMPLEX
fontScale = 0.5
color = (0, 0, 255)
image = cv2.putText(image, text, start_point, fontFace, fontScale,
color, 1)
return image
def test_vis():
# file_path = './data/达梦数据库招股说明书_test_v1.pdf'
file_path = './data/pdf_input/《中国药典》2020年版 一部.pdf'
output_prefix = 'zhongguoyaodian_2020_v1'
start, end, n = 70, 80, 10
blob = Blob.from_path(file_path)
pages = None
image_blobs = []
with blob.as_bytes_io() as file_path:
pages = fitz.open(file_path)
pdf_reader = pypdfium2.PdfDocument(file_path, autoclose=True)
image_blobs = get_image_blobs(pages, pdf_reader, n, start)
assert len(image_blobs) == n
for i, blob in enumerate(image_blobs):
idx = i + start
# blob = image_blobs[2]
layout = LayoutParser()
out = layout.parse(blob)
res = json.loads(out[0].page_content)
bboxes = []
labels = []
for r in res:
bboxes.append(r['bbox'])
labels.append(str(r['category_id']))
bboxes = np.asarray(bboxes)
bytes_arr = np.frombuffer(blob.as_bytes(), dtype=np.uint8)
image = cv2.imdecode(bytes_arr, flags=1)
for bbox, text in zip(bboxes, labels):
image = draw_polygon(image, bbox, text)
outf = f'./data/{output_prefix}_layout_p{idx+1}_vis.png'
cv2.imwrite(outf, image)
def order_by_tbyx(block_info, th=10):
"""
block_info: [(b0, b1, b2, b3, text, x, y)+]
th: threshold of the position threshold
"""
# sort using y1 first and then x1
res = sorted(block_info, key=lambda b: (b[1], b[0]))
for i in range(len(res) - 1):
for j in range(i, 0, -1):
# restore the order using the
if (abs(res[j + 1][1] - res[j][1]) < th
and (res[j + 1][0] < res[j][0])):
tmp = deepcopy(res[j])
res[j] = deepcopy(res[j + 1])
res[j + 1] = deepcopy(tmp)
else:
break
return res
def test_vis2():
# file_path = './data/达梦数据库招股说明书_test_v1.pdf'
file_path = './data/pdf_input/达梦数据库招股说明书.pdf'
output_prefix = 'dameng_pageblock'
start = 0
end = 10
n = end - start
blob = Blob.from_path(file_path)
pages = None
image_blobs = []
with blob.as_bytes_io() as file_path:
pages = fitz.open(file_path)
pdf_reader = pypdfium2.PdfDocument(file_path, autoclose=True)
image_blobs = get_image_blobs(pages, pdf_reader, n, start)
assert len(image_blobs) == pages.page_count
for i, blob in enumerate(image_blobs):
idx = i + start
page = pages.load_page(idx)
rect = page.rect
print('rect', rect)
o = 10
b0 = np.asarray([rect.x0 + o, rect.y0 + o, rect.x1 - o, rect.y1 - o])
bytes_arr = np.frombuffer(blob.as_bytes(), dtype=np.uint8)
image = cv2.imdecode(bytes_arr, flags=1)
image = draw_polygon(image, b0, '0.0')
textpage = page.get_textpage()
blocks = textpage.extractBLOCKS()
IMG_BLOCK_TYPE = 1
# blocks = order_by_tbyx(blocks)
bboxes = []
for off, b in enumerate(blocks):
label = 'text' if b[-1] != IMG_BLOCK_TYPE else 'image'
label = f'{label}-{off}'
print('block', b, label)
bbox = np.asarray([b[0], b[1], b[2], b[3]])
bboxes.append(bbox)
image = draw_polygon(image, bbox, label)
if bboxes:
b1 = merge_rects(np.asarray(bboxes))
b1 = np.asarray(b1)
image = draw_polygon(image, b1, '0.1')
outf = f'./data/{output_prefix}_p{idx}_vis.png'
cv2.imwrite(outf, image)
def test_vis3():
file_path = './data/pdf_input/《中国药典》2020年版 一部.pdf'
start = 50
end = 60
n = end - start
output_prefix = 'zhongguoyaodian_2020_v1'
blob = Blob.from_path(file_path)
pages = None
image_blobs = []
with blob.as_bytes_io() as file_path:
pages = fitz.open(file_path)
pdf_reader = pypdfium2.PdfDocument(file_path, autoclose=True)
image_blobs = get_image_blobs(pages, pdf_reader, n, start=50)
assert len(image_blobs) == n
for i, blob in enumerate(image_blobs):
idx = i + start
page = pages.load_page(idx)
rect = page.rect
print('rect', rect)
o = 10
b0 = np.asarray([rect.x0 + o, rect.y0 + o, rect.x1 - o, rect.y1 - o])
bytes_arr = np.frombuffer(blob.as_bytes(), dtype=np.uint8)
image = cv2.imdecode(bytes_arr, flags=1)
image = draw_polygon(image, b0, '0.0')
rotation_matrix = np.asarray(page.rotation_matrix).reshape((3, 2))
c1 = (rotation_matrix[0, 0] - 1) <= 1e-6
c2 = (rotation_matrix[1, 1] - 1) <= 1e-6
is_rotated = c1 and c2
textpage = page.get_textpage()
blocks = textpage.extractBLOCKS()
IMG_BLOCK_TYPE = 1
# blocks = order_by_tbyx(blocks)
bboxes = []
for off, b in enumerate(blocks):
label = 'text' if b[-1] != IMG_BLOCK_TYPE else 'image'
label = f'{label}-{off}'
print('block', b, label)
bbox = np.asarray([b[0], b[1], b[2], b[3]])
aug_bbox = bbox.reshape((-1, 2))
padding = np.ones((len(aug_bbox), 1))
aug_bbox = np.hstack([aug_bbox, padding])
new_bbox = np.dot(aug_bbox, rotation_matrix).reshape(-1)
new_bbox = norm_rect(new_bbox)
print('new_bboxes', new_bbox)
bboxes.append(new_bbox)
image = draw_polygon(image, new_bbox, label)
print(bboxes)
if bboxes:
b1 = merge_rects(np.asarray(bboxes))
b1 = np.asarray(b1)
image = draw_polygon(image, b1, '0.1')
outf = f'./data/{output_prefix}_p{idx}_vis.png'
cv2.imwrite(outf, image)
# test_vis3()
# test_vis2()
test_vis()
# test()
================================================
FILE: src/backend/bisheng_langchain/document_loaders/universal_kv.py
================================================
# flake8: noqa
"""Loads PDF with semantic splilter."""
import base64
import json
import os
from collections import defaultdict
from typing import List
import cv2
import filetype
import fitz
import numpy as np
from bisheng_langchain.document_loaders.parsers import ELLMClient
from langchain_community.docstore.document import Document
from langchain_community.document_loaders.base import BaseLoader
from PIL import Image
def convert_base64(image):
image_binary = cv2.imencode('.jpg', image)[1].tobytes()
x = base64.b64encode(image_binary)
return x.decode('ascii').replace('\n', '')
def transpdf2png(pdf_file):
pdf_bytes = open(pdf_file, 'rb').read()
pdf = fitz.Document(stream=pdf_bytes, filetype='pdf')
dpis = [72, 144, 200]
pdf_images = dict()
for page in pdf:
pix = None
for dpi in dpis:
pix = page.get_pixmap(dpi=dpi)
if min(pix.width, pix.height) >= 1600: break
mode = 'RGBA' if pix.alpha else 'RGB'
img = Image.frombytes(mode, [pix.width, pix.height], pix.samples)
# RGB to BGR
img = np.array(img)[:, :, ::-1]
img_name = 'page_{:03d}'.format(page.number)
pdf_images[img_name] = img
return pdf_images
class UniversalKVLoader(BaseLoader):
"""Extract key-value from pdf or image.
"""
def __init__(self,
file_path: str,
ellm_model_url: str = None,
schema='',
max_pages=30,
verbose: bool = False) -> None:
"""Initialize with a file path."""
self.file_path = file_path
self.schema = schema
self.max_pages = max_pages
self.ellm_model = ELLMClient(ellm_model_url)
super().__init__()
def load(self) -> List[Document]:
"""Load given path as pages."""
mime_type = filetype.guess(self.file_path).mime
if mime_type.endswith('pdf'):
file_type = 'pdf'
elif mime_type.startswith('image'):
file_type = 'img'
else:
raise ValueError(f'file type {file_type} is not support.')
if file_type == 'img':
bytes_data = open(self.file_path, 'rb').read()
b64data = base64.b64encode(bytes_data).decode()
payload = {'b64_image': b64data, 'keys': self.schema}
resp = self.ellm_model.predict(payload)
if 'code' in resp and resp['code'] == 200:
key_values = resp['result']['ellm_result']
else:
raise ValueError(f'universal kv load failed: {resp}')
kv_results = defaultdict(list)
for key, value in key_values.items():
kv_results[key].extend([v['text'] for v in value])
content = json.dumps(kv_results, indent=2, ensure_ascii=False)
file_name = os.path.basename(self.file_path)
meta = {'source': file_name}
doc = Document(page_content=content, metadata=meta)
return [doc]
elif file_type == 'pdf':
pdf_images = transpdf2png(self.file_path)
kv_results = defaultdict(list)
for index, pdf_name in enumerate(pdf_images):
page = int(pdf_name.split('page_')[-1])
if page > self.max_pages:
continue
b64data = convert_base64(pdf_images[pdf_name])
payload = {'b64_image': b64data, 'keys': self.schema}
resp = self.ellm_model.predict(payload)
if 'code' in resp and resp['code'] == 200:
key_values = resp['result']['ellm_result']
else:
raise ValueError(f'universal kv load failed: {resp}')
for key, value in key_values.items():
kv_results[key].extend([v['text'] for v in value])
content = json.dumps(kv_results, indent=2, ensure_ascii=False)
file_name = os.path.basename(self.file_path)
meta = {'source': file_name}
doc = Document(page_content=content, metadata=meta)
return [doc]
================================================
FILE: src/backend/bisheng_langchain/embeddings/__init__.py
================================================
from .host_embedding import (BGEZhEmbedding, CustomHostEmbedding, GTEEmbedding, HostEmbeddings,
ME5Embedding, JINAEmbedding)
from .wenxin import WenxinEmbeddings
from .huggingfacemultilingual import HuggingFaceMultilingualEmbeddings
from .huggingfacegte import HuggingFaceGteEmbeddings
__all__ = [
'WenxinEmbeddings', 'ME5Embedding', 'BGEZhEmbedding', 'GTEEmbedding',
'HostEmbeddings', 'CustomHostEmbedding', 'JINAEmbedding',
'HuggingFaceMultilingualEmbeddings', 'HuggingFaceGteEmbeddings'
]
================================================
FILE: src/backend/bisheng_langchain/embeddings/host_embedding.py
================================================
from __future__ import annotations
import logging
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
import requests
from langchain.embeddings.base import Embeddings
from langchain.utils import get_from_dict_or_env
from pydantic import model_validator, BaseModel, Field
from tenacity import (before_sleep_log, retry, retry_if_exception_type, stop_after_attempt,
wait_exponential)
logger = logging.getLogger(__name__)
def _create_retry_decorator(embeddings: HostEmbeddings) -> Callable[[Any], Any]:
min_seconds = 4
max_seconds = 10
# Wait 2^x * 1 second between each retry starting with
# 4 seconds, then up to 10 seconds, then 10 seconds afterwards
return retry(
reraise=True,
stop=stop_after_attempt(embeddings.max_retries),
wait=wait_exponential(multiplier=1, min=min_seconds, max=max_seconds),
retry=(retry_if_exception_type(Exception)),
before_sleep=before_sleep_log(logger, logging.WARNING),
)
def embed_with_retry(embeddings: HostEmbeddings, **kwargs: Any) -> Any:
"""Use tenacity to retry the embedding call."""
retry_decorator = _create_retry_decorator(embeddings)
@retry_decorator
def _embed_with_retry(**kwargs: Any) -> Any:
return embeddings.embed(**kwargs)
return _embed_with_retry(**kwargs)
class HostEmbeddings(BaseModel, Embeddings):
"""host embedding models.
"""
client: Optional[Any] = None #: :meta private:
"""Model name to use."""
model: str = 'embedding-host'
host_base_url: str = None
deployment: Optional[str] = 'default'
embedding_ctx_length: Optional[int] = 6144
"""The maximum number of tokens to embed at once."""
"""Maximum number of texts to embed in each batch"""
max_retries: Optional[int] = 6
"""Maximum number of retries to make when generating."""
request_timeout: Optional[Union[float, Tuple[float, float]]] = 200
"""Timeout in seconds for the OpenAPI request."""
model_kwargs: Optional[Dict[str, Any]] = Field(default_factory=dict)
"""Holds any model parameters valid for `create` call not explicitly specified."""
verbose: Optional[bool] = False
url_ep: Optional[str] = None
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
values['host_base_url'] = get_from_dict_or_env(values, 'host_base_url', 'HostBaseUrl')
model = values['model']
try:
url = values['host_base_url']
values['url_ep'] = f'{url}/{model}/infer'
except Exception:
raise Exception(f'Failed to set url ep failed for model {model}')
try:
values['client'] = requests.post
except AttributeError:
raise ValueError('Try upgrading it with `pip install --upgrade requests`.')
return values
@property
def _invocation_params(self) -> Dict:
api_args = {
'model': self.model,
'request_timeout': self.request_timeout,
**self.model_kwargs,
}
return api_args
def embed(self, texts: List[str], **kwargs) -> List[List[float]]:
emb_type = kwargs.get('type', 'raw')
inp = {'texts': texts, 'model': self.model, 'type': emb_type}
if self.verbose:
print('payload', inp)
max_text_to_split = 200
outp = None
start_index = 0
len_text = len(texts)
while start_index < len_text:
inp_local = {
'texts': texts[start_index:min(start_index + max_text_to_split, len_text)],
'model': self.model,
'type': emb_type
}
try:
outp_single = self.client(url=self.url_ep,
json=inp_local,
timeout=self.request_timeout).json()
if outp is None:
outp = outp_single
else:
outp['embeddings'] += outp_single['embeddings']
except requests.exceptions.Timeout:
raise Exception(f'timeout in host embedding infer, url=[{self.url_ep}]')
except Exception as e:
raise Exception(f'exception in host embedding infer: [{e}]')
if outp_single['status_code'] != 200:
raise ValueError(f"API returned an error: {outp['status_message']}")
start_index += max_text_to_split
return outp['embeddings']
def embed_documents(self,
texts: List[str],
chunk_size: Optional[int] = 0) -> List[List[float]]:
if not texts:
return []
"""Embed search docs."""
texts = [text for text in texts if text]
embeddings = embed_with_retry(self, texts=texts, type='doc')
return embeddings
def embed_query(self, text: str) -> List[float]:
embeddings = embed_with_retry(self, texts=[text], type='query')
return embeddings[0]
class ME5Embedding(HostEmbeddings):
model: str = 'multi-e5'
embedding_ctx_length: int = 512
class BGEZhEmbedding(HostEmbeddings):
model: str = 'bge-zh'
embedding_ctx_length: int = 512
class GTEEmbedding(HostEmbeddings):
model: str = 'gte'
embedding_ctx_length: int = 512
class JINAEmbedding(HostEmbeddings):
model: str = 'jina'
embedding_ctx_length: int = 512
class CustomHostEmbedding(HostEmbeddings):
model: str = Field('custom-embedding', alias='model')
embedding_ctx_length: int = 512
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
values['host_base_url'] = get_from_dict_or_env(values, 'host_base_url', 'HostBaseUrl')
try:
values['url_ep'] = values['host_base_url']
except Exception:
raise Exception('Failed to set url ep for custom host embedding')
try:
values['client'] = requests.post
except AttributeError:
raise ValueError('Try upgrading it with `pip install --upgrade requests`.')
return values
================================================
FILE: src/backend/bisheng_langchain/embeddings/huggingfacegte.py
================================================
from typing import Any, Dict, List, Optional
import requests
from langchain_core.embeddings import Embeddings
from pydantic import BaseModel, Extra, Field
DEFAULT_Multilingual_MODEL = "thenlper/gte-large-zh"
class HuggingFaceGteEmbeddings(BaseModel, Embeddings):
"""HuggingFace BGE sentence_transformers embedding models.
To use, you should have the ``sentence_transformers`` python package installed.
Example:
.. code-block:: python
from langchain_community.embeddings import HuggingFaceBgeEmbeddings
model_name = "BAAI/bge-large-en"
model_kwargs = {'device': 'cpu'}
encode_kwargs = {'normalize_embeddings': True}
hf = HuggingFaceBgeEmbeddings(
model_name=model_name,
model_kwargs=model_kwargs,
encode_kwargs=encode_kwargs
)
"""
client: Any = None #: :meta private:
model_name: str = DEFAULT_Multilingual_MODEL
"""Model name to use."""
cache_folder: Optional[str] = None
"""Path to store models.
Can be also set by SENTENCE_TRANSFORMERS_HOME environment variable."""
model_kwargs: Dict[str, Any] = Field(default_factory=dict)
"""Keyword arguments to pass to the model."""
encode_kwargs: Dict[str, Any] = Field(default_factory=dict)
"""Keyword arguments to pass when calling the `encode` method of the model."""
# query_instruction: str = DEFAULT_QUERY_BGE_INSTRUCTION_EN
"""Instruction to use for embedding query."""
def __init__(self, **kwargs: Any):
"""Initialize the sentence_transformer."""
super().__init__(**kwargs)
try:
import sentence_transformers
except ImportError as exc:
raise ImportError(
"Could not import sentence_transformers python package. "
"Please install it with `pip install sentence_transformers`."
) from exc
self.client = sentence_transformers.SentenceTransformer(
self.model_name, cache_folder=self.cache_folder, **self.model_kwargs
)
# if "-zh" in self.model_name:
# self.query_instruction = DEFAULT_QUERY_BGE_INSTRUCTION_ZH
# class Config:
# """Configuration for this pydantic object."""
# extra = Extra.forbid
def embed_documents(self, texts: List[str]) -> List[List[float]]:
"""Compute doc embeddings using a HuggingFace transformer model.
Args:
texts: The list of texts to embed.
Returns:
List of embeddings, one for each text.
"""
texts = [t.replace("\n", " ") for t in texts]
embeddings = self.client.encode(texts, **self.encode_kwargs)
return embeddings.tolist()
def embed_query(self, text: str) -> List[float]:
"""Compute query embeddings using a HuggingFace transformer model.
Args:
text: The text to embed.
Returns:
Embeddings for the text.
"""
text = text.replace("\n", " ")
embedding = self.client.encode(text, **self.encode_kwargs
)
return embedding.tolist()
================================================
FILE: src/backend/bisheng_langchain/embeddings/huggingfacemultilingual.py
================================================
from typing import Any, Dict, List, Optional
import requests
from langchain_core.embeddings import Embeddings
from pydantic import BaseModel, Extra, Field
DEFAULT_Multilingual_MODEL = "intfloat/multilingual-e5-large"
class HuggingFaceMultilingualEmbeddings(BaseModel, Embeddings):
"""HuggingFace BGE sentence_transformers embedding models.
To use, you should have the ``sentence_transformers`` python package installed.
Example:
.. code-block:: python
from langchain_community.embeddings import HuggingFaceBgeEmbeddings
model_name = "BAAI/bge-large-en"
model_kwargs = {'device': 'cpu'}
encode_kwargs = {'normalize_embeddings': True}
hf = HuggingFaceBgeEmbeddings(
model_name=model_name,
model_kwargs=model_kwargs,
encode_kwargs=encode_kwargs
)
"""
client: Any = None #: :meta private:
model_name: str = DEFAULT_Multilingual_MODEL
"""Model name to use."""
cache_folder: Optional[str] = None
"""Path to store models.
Can be also set by SENTENCE_TRANSFORMERS_HOME environment variable."""
model_kwargs: Dict[str, Any] = Field(default_factory=dict)
"""Keyword arguments to pass to the model."""
encode_kwargs: Dict[str, Any] = Field(default_factory=dict)
"""Keyword arguments to pass when calling the `encode` method of the model."""
# query_instruction: str = DEFAULT_QUERY_BGE_INSTRUCTION_EN
"""Instruction to use for embedding query."""
def __init__(self, **kwargs: Any):
"""Initialize the sentence_transformer."""
super().__init__(**kwargs)
try:
import sentence_transformers
except ImportError as exc:
raise ImportError(
"Could not import sentence_transformers python package. "
"Please install it with `pip install sentence_transformers`."
) from exc
self.client = sentence_transformers.SentenceTransformer(
self.model_name, cache_folder=self.cache_folder, **self.model_kwargs
)
# if "-zh" in self.model_name:
# self.query_instruction = DEFAULT_QUERY_BGE_INSTRUCTION_ZH
# class Config:
# """Configuration for this pydantic object."""
# extra = Extra.forbid
def embed_documents(self, texts: List[str]) -> List[List[float]]:
"""Compute doc embeddings using a HuggingFace transformer model.
Args:
texts: The list of texts to embed.
Returns:
List of embeddings, one for each text.
"""
texts = [t.replace("\n", " ") for t in texts]
textschange = []
for t in texts:
textschange.append("passage: " + t)
# print(textschange)
embeddings = self.client.encode(textschange, **self.encode_kwargs)
return embeddings.tolist()
def embed_query(self, text: str) -> List[float]:
"""Compute query embeddings using a HuggingFace transformer model.
Args:
text: The text to embed.
Returns:
Embeddings for the text.
"""
text = text.replace("\n", " ")
text = "query: " + text
# print(text)
embedding = self.client.encode(text, **self.encode_kwargs
)
return embedding.tolist()
================================================
FILE: src/backend/bisheng_langchain/embeddings/interface/__init__.py
================================================
from .wenxin import EmbeddingClient as WenxinEmbeddingClient
__all__ = ['WenxinEmbeddingClient']
================================================
FILE: src/backend/bisheng_langchain/embeddings/interface/types.py
================================================
from typing import Any, Dict, List, Union
from pydantic import BaseModel
class EmbeddingInput(BaseModel):
model: str
input: Union[str, List[str]]
class Embedding(BaseModel):
object: str = 'embedding'
embedding: List[float]
index: int
class EmbeddingOutput(BaseModel):
status_code: int
status_message: str = 'success'
object: str = None
data: List[Embedding] = []
model: str = None
usage: Dict[str, Any] = None
================================================
FILE: src/backend/bisheng_langchain/embeddings/interface/wenxin.py
================================================
import json
import numpy as np
import requests
from requests.exceptions import HTTPError
def get_access_token(api_key, sec_key):
url = (f'https://aip.baidubce.com/oauth/2.0/token?'
f'grant_type=client_credentials'
f'&client_id={api_key}&client_secret={sec_key}')
payload = json.dumps('')
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, data=payload)
return response.json().get('access_token')
class EmbeddingClient(object):
def __init__(self, api_key, sec_key, **kwargs):
self.api_key = api_key
self.sec_key = sec_key
self.ep_url = ('https://aip.baidubce.com/rpc/2.0/ai_custom/v1/'
'wenxinworkshop/embeddings')
self.headers = {'Content-Type': 'application/json'}
self.max_text_tokens = 384
self.max_text_num = 16
self.drop_exceed_token = kwargs.get('drop_exceed_token', True)
def create(self, model, input, verbose=False, **kwargs):
texts = input
if isinstance(texts, str):
texts = [texts]
if self.drop_exceed_token:
texts = [t[:self.max_text_tokens] for t in texts]
cond = np.all([len(text) <= self.max_text_tokens for text in texts])
if not cond:
raise HTTPError('text exceed max token size 384')
token = get_access_token(self.api_key, self.sec_key)
endpoint = f'{self.ep_url}/{model}?access_token={token}'
def _call(sub_texts):
payload = json.dumps({'input': sub_texts})
response = requests.post(endpoint,
headers=self.headers,
data=payload)
status_message = 'success'
status_code = response.status_code
usage = {'prompt_tokens': 0, 'total_tokens': 0}
data = []
if status_code == 200:
try:
info = json.loads(response.text)
status_code = info.get('error_code', 200)
status_message = info.get('error_msg', status_message)
if status_code == 200:
data = info['data']
usage = info['usage']
else:
raise HTTPError(status_message)
except Exception as e:
raise HTTPError(str(e))
else:
raise HTTPError('requests error')
return data, usage
data = []
usage = {'prompt_tokens': 0, 'total_tokens': 0}
for i in range(0, len(texts), self.max_text_num):
sub_texts = texts[i:(i + self.max_text_num)]
sub_data, sub_usage = _call(sub_texts)
data.extend(sub_data)
usage['prompt_tokens'] += sub_usage['prompt_tokens']
usage['total_tokens'] += sub_usage['total_tokens']
outp = dict(status_code=200, model=model, data=data, usage=usage)
return outp
================================================
FILE: src/backend/bisheng_langchain/embeddings/wenxin.py
================================================
from __future__ import annotations
import logging
# import warnings
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
# import numpy as np
from langchain.embeddings.base import Embeddings
from langchain.utils import get_from_dict_or_env
from pydantic import ConfigDict, model_validator, BaseModel, Field
from requests.exceptions import HTTPError
from tenacity import (before_sleep_log, retry, retry_if_exception_type, stop_after_attempt,
wait_exponential)
logger = logging.getLogger(__name__)
def _create_retry_decorator(embeddings: WenxinEmbeddings) -> Callable[[Any], Any]:
min_seconds = 4
max_seconds = 10
# Wait 2^x * 1 second between each retry starting with
# 4 seconds, then up to 10 seconds, then 10 seconds afterwards
return retry(
reraise=True,
stop=stop_after_attempt(embeddings.max_retries),
wait=wait_exponential(multiplier=1, min=min_seconds, max=max_seconds),
retry=(retry_if_exception_type(HTTPError)),
before_sleep=before_sleep_log(logger, logging.WARNING),
)
def embed_with_retry(embeddings: WenxinEmbeddings, **kwargs: Any) -> Any:
"""Use tenacity to retry the embedding call."""
retry_decorator = _create_retry_decorator(embeddings)
@retry_decorator
def _embed_with_retry(**kwargs: Any) -> Any:
return embeddings.embed(**kwargs)
return _embed_with_retry(**kwargs)
class WenxinEmbeddings(BaseModel, Embeddings):
"""Wenxin embedding models.
To use, the environment variable ``WENXIN_API_KEY`` and ``WENXIN_SECRET_KEY``
set with your API key or pass it as a named parameter to the constructor.
Example:
.. code-block:: python
from bisheng_langchain.embeddings import WenxinEmbeddings
wenxin_embeddings = WenxinEmbeddings(
wenxin_api_key="my-api-key",
wenxin_secret_key='xxx')
"""
client: Optional[Any] = None #: :meta private:
model: str = 'embedding-v1'
deployment: Optional[str] = 'default'
wenxin_api_key: Optional[str] = None
wenxin_secret_key: Optional[str] = None
embedding_ctx_length: Optional[int] = 6144
"""The maximum number of tokens to embed at once."""
"""Maximum number of texts to embed in each batch"""
max_retries: Optional[int] = 6
"""Maximum number of retries to make when generating."""
request_timeout: Optional[Union[float, Tuple[float, float]]] = None
"""Timeout in seconds for the OpenAPI request."""
model_kwargs: Optional[Dict[str, Any]] = Field(default_factory=dict)
"""Holds any model parameters valid for `create` call not explicitly specified."""
model_config = ConfigDict(extra='forbid')
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
values['wenxin_api_key'] = get_from_dict_or_env(values, 'wenxin_api_key', 'WENXIN_API_KEY')
values['wenxin_secret_key'] = get_from_dict_or_env(
values,
'wenxin_secret_key',
'WENXIN_SECRET_KEY',
)
api_key = values['wenxin_api_key']
sec_key = values['wenxin_secret_key']
try:
from .interface import WenxinEmbeddingClient
values['client'] = WenxinEmbeddingClient(api_key=api_key, sec_key=sec_key)
except AttributeError:
raise ValueError('Try upgrading it with `pip install --upgrade requests`.')
return values
@property
def _invocation_params(self) -> Dict:
wenxin_args = {
'model': self.model,
'request_timeout': self.request_timeout,
**self.model_kwargs,
}
return wenxin_args
def embed(self, texts: List[str]) -> List[List[float]]:
inp = {'input': texts, 'model': self.model}
outp = self.client.create(**inp)
if outp['status_code'] != 200:
raise ValueError(f"Wenxin API returned an error: {outp['status_message']}")
return [e['embedding'] for e in outp['data']]
def embed_documents(self,
texts: List[str],
chunk_size: Optional[int] = 0) -> List[List[float]]:
embeddings = embed_with_retry(self, texts=texts)
return embeddings
def embed_query(self, text: str) -> List[float]:
"""Call out to OpenAI's embedding endpoint for embedding query text.
Args:
text: The text to embed.
Returns:
Embedding for the text.
"""
embeddings = embed_with_retry(self, texts=[text])
return embeddings[0]
================================================
FILE: src/backend/bisheng_langchain/gpts/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/gpts/agent_types/__init__.py
================================================
from bisheng_langchain.gpts.agent_types.llm_functions_agent import (
get_openai_functions_agent_executor,
get_qwen_local_functions_agent_executor
)
from bisheng_langchain.gpts.agent_types.llm_react_agent import get_react_agent_executor
__all__ = [
"get_openai_functions_agent_executor",
"get_qwen_local_functions_agent_executor",
"get_react_agent_executor"
]
================================================
FILE: src/backend/bisheng_langchain/gpts/agent_types/llm_functions_agent.py
================================================
import json
import re
from bisheng_langchain.gpts.message_types import LiberalFunctionMessage, LiberalToolMessage
from langchain.tools import BaseTool
from langchain.tools.render import format_tool_to_openai_tool
from langchain_core.language_models.base import LanguageModelLike
from langchain_core.messages import FunctionMessage, SystemMessage, ToolMessage
from langgraph.graph import END
from langgraph.graph.message import MessageGraph
from langgraph.prebuilt import ToolNode
from langgraph.utils.runnable import RunnableCallable
def get_openai_functions_agent_executor(tools: list[BaseTool], llm: LanguageModelLike,
system_message: str, interrupt_before_action: bool,
**kwargs):
def _get_messages(messages):
msgs = []
for m in messages:
if isinstance(m, LiberalToolMessage):
_dict = m.dict()
_dict['content'] = str(_dict['content'])
m_c = ToolMessage(**_dict)
msgs.append(m_c)
else:
msgs.append(m)
return [SystemMessage(content=system_message)] + msgs
if tools:
llm_with_tools = llm.bind(tools=[format_tool_to_openai_tool(t) for t in tools])
else:
llm_with_tools = llm
agent = _get_messages | llm_with_tools
tool_nodes = ToolNode(tools=tools)
# Define the function that determines whether to continue or not
def should_continue(messages):
last_message = messages[-1]
# If there is no function call, then we finish
if 'tool_calls' not in last_message.additional_kwargs:
if '||' in system_message:
# cohere model
pattern = r'Answer:(.+)\nGrounded answer'
match = re.search(pattern, last_message.content)
if match:
last_message.content = match.group(1)
return 'end'
# Otherwise if there is, we continue
else:
return 'continue'
# Define the function to execute tools
async def acall_tool(messages):
tool_messages = await tool_nodes.ainvoke(messages, None, store=None)
return tool_messages
def call_tool(messages):
tool_messages = tool_nodes.invoke(messages, config=None, store=None)
return tool_messages
workflow = MessageGraph()
# Define the two nodes we will cycle between
workflow.add_node('agent', agent)
workflow.add_node('action', RunnableCallable(call_tool, acall_tool))
# Set the entrypoint as `agent`
# This means that this node is the first one called
workflow.set_entry_point('agent')
# We now add a conditional edge
workflow.add_conditional_edges(
# First, we define the start node. We use `agent`.
# This means these are the edges taken after the `agent` node is called.
'agent',
# Next, we pass in the function that will determine which node is called next.
should_continue,
# Finally we pass in a mapping.
# The keys are strings, and the values are other nodes.
# END is a special node marking that the graph should finish.
# What will happen is we will call `should_continue`, and then the output of that
# will be matched against the keys in this mapping.
# Based on which one it matches, that node will then be called.
{
# If `tools`, then we call the tool node.
'continue': 'action',
# Otherwise we finish.
'end': END,
},
)
# We now add a normal edge from `tools` to `agent`.
# This means that after `tools` is called, `agent` node is called next.
workflow.add_edge('action', 'agent')
# Finally, we compile it!
# This compiles it into a LangChain Runnable,
# meaning you can use it as you would any other runnable
app = workflow.compile(checkpointer=False)
if interrupt_before_action:
app.interrupt = ['action:inbox']
return app
def get_qwen_local_functions_agent_executor(
tools: list[BaseTool],
llm: LanguageModelLike,
system_message: str,
interrupt_before_action: bool,
**kwargs,
):
async def _get_messages(messages):
msgs = []
for m in messages:
if isinstance(m, LiberalFunctionMessage):
_dict = m.dict()
_dict['content'] = str(_dict['content'])
m_c = FunctionMessage(**_dict)
msgs.append(m_c)
else:
msgs.append(m)
return [SystemMessage(content=system_message)] + msgs
if tools:
llm_with_tools = llm.bind(
functions=[format_tool_to_openai_tool(t)['function'] for t in tools])
else:
llm_with_tools = llm
agent = _get_messages | llm_with_tools
tool_nodes = ToolNode(tools=tools)
# Define the function that determines whether to continue or not
def should_continue(messages):
last_message = messages[-1]
# If there is no function call, then we finish
if 'function_call' not in last_message.additional_kwargs:
return 'end'
# Otherwise if there is, we continue
else:
return 'continue'
# Define the function to execute tools
async def call_tool(messages):
tool_messages = await tool_nodes.ainvoke(messages, config=None, store=None)
return tool_messages
workflow = MessageGraph()
# Define the two nodes we will cycle between
workflow.add_node('agent', agent)
workflow.add_node('action', call_tool)
# Set the entrypoint as `agent`
# This means that this node is the first one called
workflow.set_entry_point('agent')
# We now add a conditional edge
workflow.add_conditional_edges(
# First, we define the start node. We use `agent`.
# This means these are the edges taken after the `agent` node is called.
'agent',
# Next, we pass in the function that will determine which node is called next.
should_continue,
# Finally we pass in a mapping.
# The keys are strings, and the values are other nodes.
# END is a special node marking that the graph should finish.
# What will happen is we will call `should_continue`, and then the output of that
# will be matched against the keys in this mapping.
# Based on which one it matches, that node will then be called.
{
# If `tools`, then we call the tool node.
'continue': 'action',
# Otherwise we finish.
'end': END,
},
)
# We now add a normal edge from `tools` to `agent`.
# This means that after `tools` is called, `agent` node is called next.
workflow.add_edge('action', 'agent')
# Finally, we compile it!
# This compiles it into a LangChain Runnable,
# meaning you can use it as you would any other runnable
app = workflow.compile()
if interrupt_before_action:
app.interrupt = ['action:inbox']
return app
================================================
FILE: src/backend/bisheng_langchain/gpts/agent_types/llm_react_agent.py
================================================
import operator
from typing import Annotated, Sequence, TypedDict, Union
from bisheng_langchain.gpts.prompts.react_agent_prompt import react_agent_prompt
from langchain.agents import create_structured_chat_agent
from langchain.tools import BaseTool
from langchain_core.agents import AgentAction, AgentFinish
from langchain_core.language_models import LanguageModelLike
from langchain_core.messages import BaseMessage
from langgraph.graph import END, StateGraph
from langgraph.graph.state import CompiledStateGraph
from langgraph.prebuilt import ToolNode
from langgraph.utils.runnable import RunnableCallable
def get_react_agent_executor(tools: list[BaseTool], llm: LanguageModelLike, system_message: str,
interrupt_before_action: bool, **kwargs):
prompt = react_agent_prompt
prompt = prompt.partial(assistant_message=system_message)
agent = create_structured_chat_agent(llm, tools, prompt)
agent_executer = create_agent_executor(agent, tools)
return agent_executer
def _get_agent_state(input_schema=None):
if input_schema is None:
class AgentState(TypedDict):
# The input string
input: str
# The list of previous messages in the conversation
chat_history: Sequence[BaseMessage]
# The outcome of a given call to the agent
# Needs `None` as a valid type, since this is what this will start as
agent_outcome: Union[AgentAction, AgentFinish, None]
# List of actions and corresponding observations
# Here we annotate this with `operator.add` to indicate that operations to
# this state should be ADDED to the existing values (not overwrite it)
intermediate_steps: Annotated[list[tuple[AgentAction, str]], operator.add]
else:
class AgentState(input_schema):
# The outcome of a given call to the agent
# Needs `None` as a valid type, since this is what this will start as
agent_outcome: Union[AgentAction, AgentFinish, None]
# List of actions and corresponding observations
# Here we annotate this with `operator.add` to indicate that operations to
# this state should be ADDED to the existing values (not overwrite it)
intermediate_steps: Annotated[list[tuple[AgentAction, str]], operator.add]
return AgentState
def create_agent_executor(agent_runnable, tools, input_schema=None) -> CompiledStateGraph:
"""This is a helper function for creating a graph that works with LangChain Agents.
Args:
agent_runnable (RunnableLike): The agent runnable.
tools (list): A list of tools to be used by the agent.
input_schema (dict, optional): The input schema for the agent. Defaults to None.
Returns:
The `CompiledStateGraph` object.
"""
tool_executor = {one.name: one for one in tools}
state = _get_agent_state(input_schema)
# Define logic that will be used to determine which conditional edge to go down
def should_continue(data):
# If the agent outcome is an AgentFinish, then we return `exit` string
# This will be used when setting up the graph to define the flow
if isinstance(data['agent_outcome'], AgentFinish):
return 'end'
# Otherwise, an AgentAction is returned
# Here we return `continue` string
# This will be used when setting up the graph to define the flow
else:
return 'continue'
def run_agent(data, config):
agent_outcome = agent_runnable.invoke(data, config)
return {'agent_outcome': agent_outcome}
async def arun_agent(data, config):
agent_outcome = await agent_runnable.ainvoke(data, config)
return {'agent_outcome': agent_outcome}
# Define the function to execute tools
def execute_tools(data, config):
# Get the most recent agent_outcome - this is the key added in the `agent` above
agent_action = data['agent_outcome']
if not isinstance(agent_action, list):
agent_action = [agent_action]
output = []
for action in agent_action:
if action.tool not in tool_executor:
output.append(f"Tool {action.tool} not found in tool executor.")
continue
try:
result = tool_executor[action.tool].invoke(action.tool_input, config)
output.append(result)
except Exception as e:
output.append(f"invoke tool {action.tool} failed: {str(e)[-50:]}")
return {
'intermediate_steps': [(action, str(out)) for action, out in zip(agent_action, output)]
}
async def aexecute_tools(data, config):
# Get the most recent agent_outcome - this is the key added in the `agent` above
agent_action = data['agent_outcome']
if not isinstance(agent_action, list):
agent_action = [agent_action]
output = []
for action in agent_action:
if action.tool not in tool_executor:
output.append(f"Tool {action.tool} not found in tool executor.")
continue
try:
result = await tool_executor[action.tool].ainvoke(action.tool_input, config)
output.append(result)
except Exception as e:
output.append(f"invoke tool {action.tool} failed: {str(e)[-50:]}")
return {
'intermediate_steps': [(action, str(out)) for action, out in zip(agent_action, output)]
}
# Define a new graph
workflow = StateGraph(state)
# Define the two nodes we will cycle between
workflow.add_node('agent', RunnableCallable(run_agent, arun_agent))
workflow.add_node('tools', RunnableCallable(execute_tools, aexecute_tools))
# Set the entrypoint as `agent`
# This means that this node is the first one called
workflow.set_entry_point('agent')
# We now add a conditional edge
workflow.add_conditional_edges(
# First, we define the start node. We use `agent`.
# This means these are the edges taken after the `agent` node is called.
'agent',
# Next, we pass in the function that will determine which node is called next.
should_continue,
# Finally we pass in a mapping.
# The keys are strings, and the values are other nodes.
# END is a special node marking that the graph should finish.
# What will happen is we will call `should_continue`, and then the output of that
# will be matched against the keys in this mapping.
# Based on which one it matches, that node will then be called.
{
# If `tools`, then we call the tool node.
'continue': 'tools',
# Otherwise we finish.
'end': END,
},
)
# We now add a normal edge from `tools` to `agent`.
# This means that after `tools` is called, `agent` node is called next.
workflow.add_edge('tools', 'agent')
# Finally, we compile it!
# This compiles it into a LangChain Runnable,
# meaning you can use it as you would any other runnable
return workflow.compile(checkpointer=False)
if __name__ == '__main__':
pass
================================================
FILE: src/backend/bisheng_langchain/gpts/assistant.py
================================================
import asyncio
import logging
from typing import Any, Mapping, Optional, Sequence
import httpx
import yaml
from bisheng_langchain.gpts.load_tools import get_all_tool_names, load_tools
from bisheng_langchain.gpts.utils import import_by_type, import_class
from langchain.tools import BaseTool
from langchain_core.language_models.base import LanguageModelLike
from langchain_core.messages import AIMessage, HumanMessage
from langchain_core.runnables import RunnableBinding
logger = logging.getLogger(__name__)
class ConfigurableAssistant(RunnableBinding):
agent_executor_type: str
tools: Sequence[BaseTool]
llm: LanguageModelLike
assistant_message: str
interrupt_before_action: bool = False
recursion_limit: int = 50
def __init__(
self,
*,
agent_executor_type: str,
tools: Sequence[BaseTool],
llm: LanguageModelLike,
assistant_message: str,
interrupt_before_action: bool = False,
recursion_limit: int = 50,
kwargs: Optional[Mapping[str, Any]] = None,
config: Optional[Mapping[str, Any]] = None,
**others: Any,
) -> None:
others.pop('bound', None)
agent_executor_object = import_class(
f'bisheng_langchain.gpts.agent_types.{agent_executor_type}')
_agent_executor = agent_executor_object(tools, llm, assistant_message,
interrupt_before_action)
agent_executor = _agent_executor.with_config({'recursion_limit': recursion_limit})
super().__init__(
agent_executor_type=agent_executor_type,
tools=tools,
llm=llm,
assistant_message=assistant_message,
bound=agent_executor,
kwargs=kwargs or {},
config=config or {},
)
class BishengAssistant:
def __init__(self, yaml_path) -> None:
self.yaml_path = yaml_path
with open(self.yaml_path, 'r') as f:
self.params = yaml.safe_load(f)
self.assistant_params = self.params['assistant']
# init assistant prompt
prompt_type = self.assistant_params['prompt_type']
assistant_message = import_class(f'bisheng_langchain.gpts.prompts.{prompt_type}')
# init llm or agent
llm_params = self.assistant_params['llm']
llm_object = import_by_type(_type='llms', name=llm_params['type'])
if llm_params['type'] == 'ChatOpenAI' and llm_params['openai_proxy']:
llm_params.pop('type')
llm = llm_object(
http_client=httpx.Client(proxies=llm_params['openai_proxy']),
http_async_client=httpx.AsyncClient(proxies=llm_params['openai_proxy']),
**llm_params,
)
else:
llm_params.pop('type')
llm = llm_object(**llm_params)
# init tools
available_tools = get_all_tool_names()
tools = []
for tool in self.assistant_params['tools']:
tool_type = tool.pop('type')
tool_config = tool if tool else {}
if tool_type not in available_tools:
raise ValueError(f'Tool type {tool_type} not found in TOOLS')
_returned_tools = load_tools({tool_type: tool_config})
if isinstance(_returned_tools, list):
tools.extend(_returned_tools)
else:
tools.append(_returned_tools)
# init agent executor
agent_executor_params = self.assistant_params['agent_executor']
self.agent_executor_type = agent_executor_params.pop('type')
self.assistant = ConfigurableAssistant(agent_executor_type=self.agent_executor_type,
tools=tools,
llm=llm,
assistant_message=assistant_message,
**agent_executor_params)
def run(self, query, chat_history=[], chat_round=5):
if len(chat_history) % 2 != 0:
raise ValueError('chat history should be even')
# 限制chat_history轮数
if len(chat_history) > chat_round * 2:
chat_history = chat_history[-chat_round * 2:]
inputs = []
for i in range(0, len(chat_history), 2):
inputs.append(HumanMessage(content=chat_history[i]))
inputs.append(AIMessage(content=chat_history[i + 1]))
inputs.append(HumanMessage(content=query))
if self.agent_executor_type == 'get_react_agent_executor':
result = asyncio.run(
self.assistant.ainvoke({
'input': inputs[-1].content,
'chat_history': inputs[:-1]
}))
else:
result = asyncio.run(self.assistant.ainvoke(inputs))
return result
if __name__ == '__main__':
# set_debug(True)
# chat_history = []
# query = "分析当日市场行情"
chat_history = ['你好', '你好,有什么可以帮助你吗?', '福蓉科技股价多少?', '福蓉科技(股票代码:300049)的当前股价为48.67元。']
query = '今天是什么时候?去年这个时候的股价是多少?'
bisheng_assistant = BishengAssistant('config/base_scene.yaml')
# bisheng_assistant = BishengAssistant("config/knowledge_scene.yaml")
# bisheng_assistant = BishengAssistant("config/rag_scene.yaml")
result = bisheng_assistant.run(query, chat_history=chat_history)
print(result)
================================================
FILE: src/backend/bisheng_langchain/gpts/auto_optimization.py
================================================
import json
import os
import re
import httpx
from bisheng_langchain.gpts.prompts import (
ASSISTANT_PROMPT_OPT,
BREIF_DES_PROMPT,
OPENDIALOG_PROMPT,
)
from langchain_core.language_models.base import LanguageModelLike
from langchain_openai.chat_models import ChatOpenAI
from loguru import logger
def parse_markdown(input_str: str) -> str:
match = re.search(r'```(markdown)?(.*)```', input_str, re.DOTALL)
if match is None:
out_str = input_str
else:
out_str = match.group(2)
out_str = out_str.strip()
out_str = out_str.replace('```', '')
return out_str
def parse_json(input_str: str) -> str:
match = re.search(r'```(json)?(.*)```', input_str, re.DOTALL)
if match is None:
out_str = input_str
else:
out_str = match.group(2)
out_str = out_str.strip()
out_str = out_str.replace('```', '')
return out_str
def optimize_assistant_prompt(
llm: LanguageModelLike,
assistant_name: str,
assistant_description: str,
) -> str:
"""optimize assistant prompt
Args:
llm (LanguageModelLike):
assistant_name (str):
assistant_description (str):
Returns:
assistant_prompt(str):
"""
chain = ASSISTANT_PROMPT_OPT | llm
chain_output = chain.invoke(
{
'assistant_name': assistant_name,
'assistant_description': assistant_description,
}
)
response = chain_output.content
assistant_prompt = parse_markdown(response)
return assistant_prompt
def generate_opening_dialog(
llm: LanguageModelLike,
description: str,
) -> str:
chain = OPENDIALOG_PROMPT | llm
time = 0
while time <= 3:
try:
chain_output = chain.invoke(
{
'description': description,
}
)
output = parse_json(chain_output.content)
output = json.loads(output)
opening_lines = output[0]['开场白']
questions = output[0]['问题']
break
except Exception as e:
logger.info(f'第{time}次解析失败, 错误信息: {e}')
logger.info(f'模型输出结果为{chain_output.content}。')
time += 1
opening_lines = ''
questions = []
res = {}
res['opening_lines'] = opening_lines
res['questions'] = questions
return res
def generate_breif_description(
llm: LanguageModelLike,
description: str,
) -> str:
chain = BREIF_DES_PROMPT | llm
chain_output = chain.invoke(
{
'description': description,
}
)
breif_description = chain_output.content
breif_description = breif_description.strip()
return breif_description
if __name__ == '__main__':
from dotenv import load_dotenv
load_dotenv('/app/.env', override=True)
httpx_client = httpx.Client(proxies=os.getenv('OPENAI_PROXY'))
llm = ChatOpenAI(model='gpt-4-0125-preview', temperature=0.01, http_client=httpx_client)
# llm = ChatQWen(model="qwen1.5-72b-chat", temperature=0.01, api_key=os.getenv('QWEN_API_KEY'))
assistant_name = '金融分析助手'
assistant_description = '1. 分析上市公司最新的年报财报;2. 获取上市公司的最新新闻;'
assistant_prompt = optimize_assistant_prompt(llm, assistant_name, assistant_description)
# print(assistant_prompt)
opening_dialog = generate_opening_dialog(llm, assistant_prompt)
print(opening_dialog)
# breif_description = generate_breif_description(llm, assistant_prompt)
# print(breif_description)
================================================
FILE: src/backend/bisheng_langchain/gpts/auto_tool_selected.py
================================================
from bisheng_langchain.gpts.prompts.select_tools_prompt import HUMAN_MSG, SYS_MSG
from langchain.prompts import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate,
)
from langchain_core.language_models.base import LanguageModelLike
from pydantic import BaseModel
class ToolInfo(BaseModel):
tool_name: str
tool_description: str
class ToolSelector:
def __init__(
self,
llm: LanguageModelLike,
tools: list[ToolInfo],
system_message: str = SYS_MSG,
human_message: str = HUMAN_MSG,
) -> None:
self.llm = llm
self.tools = tools
self.system_message = system_message
self.human_message = human_message
def select(self, task_name: str, task_description: str) -> list[str]:
tool_pool = [tool.dict() for tool in self.tools]
messages = [
SystemMessagePromptTemplate.from_template(self.system_message),
HumanMessagePromptTemplate.from_template(self.human_message),
]
chain = ChatPromptTemplate.from_messages(messages) | self.llm
chain_output = chain.invoke(
{
'tool_pool': tool_pool,
'task_name': task_name,
'task_description': task_description,
}
)
try:
all_tool_name = set([tool.tool_name for tool in self.tools])
output = list(set(eval(chain_output.content)) & all_tool_name)
return output
except Exception as e:
print(e)
return []
================================================
FILE: src/backend/bisheng_langchain/gpts/config/base_assistant.yaml
================================================
assistant:
prompt_type: 'ASSISTANT_PROMPT_DEFAULT'
llm:
type: 'ChatOpenAI'
model: 'gpt-4-0125-preview'
# model: 'gpt-3.5-turbo-0125'
openai_api_key: ''
openai_proxy: 'http://118.195.232.223:39995'
temperature: 0.0
# llm:
# type: 'ChatQWen'
# model_name: 'qwen-max'
# api_key: ''
# temperature: 0.01
# llm:
# type: 'HostQwenChat'
# model_name: 'Qwen-1_8B-Chat'
# host_base_url: 'http://192.168.106.12:9001/v2.1/models'
# temperature: 0.01
tools:
- type: "arxiv"
- type: "bing_search"
bing_subscription_key: ""
bing_search_url: "https://api.bing.microsoft.com/v7.0/search"
- type: "get_current_time"
- type: "calculator"
agent_executor:
type: 'get_openai_functions_agent_executor'
# type: 'get_qwen_local_functions_agent_executor'
interrupt_before_action: False
recursion_limit: 50
================================================
FILE: src/backend/bisheng_langchain/gpts/config/base_scene.yaml
================================================
assistant:
prompt_type: 'ASSISTANT_PROMPT_DEFAULT'
llm:
type: 'ChatOpenAI'
model: 'gpt-4-0125-preview'
openai_api_key: ''
openai_proxy: 'http://118.195.232.223:39995'
temperature: 0.0
# prompt_type: 'ASSISTANT_PROMPT_COHERE'
# llm:
# type: 'ChatOpenAI'
# model: 'command-r-plus-104b'
# openai_api_base: 'http://34.87.129.78:9100/v1'
# openai_api_key: ''
# openai_proxy: ''
# temperature: 0.3
tools:
- type: "sina_realtime_info"
- type: "sina_history_KLine"
- type: "bisheng_code_interpreter"
minio:
MINIO_ENDPOINT: "110.16.193.170:50061"
MINIO_SHAREPOINT: "110.16.193.170:50061"
MINIO_ACCESS_KEY: "minioadmin"
MINIO_SECRET_KEY: "minioadmin"
SCHEMA: False
CERT_CHECK: False
- type: "bing_search"
bing_subscription_key: ""
bing_search_url: "https://api.bing.microsoft.com/v7.0/search"
- type: "get_current_time"
- type: "calculator"
- type: "dalle_image_generator"
openai_api_key: ''
openai_proxy: 'http://118.195.232.223:39995'
- type: macro_china_money_supply
- type: macro_china_shrzgm
agent_executor:
# type: 'get_openai_functions_agent_executor'
# type: 'get_qwen_local_functions_agent_executor'
type: 'get_react_agent_executor'
interrupt_before_action: False
recursion_limit: 50
================================================
FILE: src/backend/bisheng_langchain/gpts/config/knowledge_scene.yaml
================================================
assistant:
# prompt_type: 'ASSISTANT_PROMPT_DEFAULT'
# llm:
# type: 'ChatOpenAI'
# model: 'gpt-4-0125-preview'
# openai_api_key: ''
# openai_proxy: 'http://118.195.232.223:39995'
# temperature: 0.0
prompt_type: 'ASSISTANT_PROMPT_COHERE'
llm:
type: 'ChatOpenAI'
model: 'command-r-plus-104b'
openai_api_base: 'http://34.87.129.78:9100/v1'
openai_api_key: ''
openai_proxy: ''
temperature: 0.3
tools:
# 美团 2019 年的营业收入是多少?
- type: flow_knowledge_retrieve
collection_id: 699
description: "美团知识库检索工具,从美团知识库进行检索总结"
- type: flow_knowledge_retrieve
collection_id: 700
description: "永辉超市知识库检索工具,从永辉超市知识库进行检索总结"
- type: flow_knowledge_retrieve
collection_id: 808
description: "重庆水务集团股份有限公司知识库检索工具,从重庆水务集团股份有限公司知识库进行检索总结"
- type: tianyancha_get_company_baseinfo
api_key: ""
- type: tianyancha_get_company_baseinfo
api_key: ""
- type: tianyancha_law_suit_case
api_key: ""
- type: tianyancha_riskinfo
api_key: ""
agent_executor:
type: 'get_openai_functions_agent_executor'
interrupt_before_action: False
recursion_limit: 50
================================================
FILE: src/backend/bisheng_langchain/gpts/config/rag_scene.yaml
================================================
assistant:
prompt_type: 'ASSISTANT_PROMPT_DEFAULT'
llm:
type: 'ChatOpenAI'
model: 'gpt-4-0125-preview'
openai_api_key: ''
openai_proxy: ''
temperature: 0.0
tools:
# - type: bisheng_rag
# name: "bisheng_rag_jinyu"
# description: "金宇生物技术股份有限公司知识库问答"
# collection_name: "rag_finance_report_0_benchmark_caibao_1000_source_title"
# - type: bisheng_rag
# name: "bisheng_rag_jianghuawei"
# description: "江阴江化微电子材料股份有限公司知识库问答"
# collection_name: "rag_finance_report_1_benchmark_caibao_1000_source_title"
# - type: bisheng_rag
# name: "bisheng_rag_maiwei"
# description: "苏州迈为科技股份有限公司知识库问答"
# collection_name: "rag_finance_report_2_benchmark_caibao_1000_source_title"
# - type: bisheng_rag
# name: "bisheng_rag_xuelong"
# description: "雪龙集团股份有限公司知识库问答"
# collection_name: "rag_finance_report_3_benchmark_caibao_1000_source_title"
# - type: bisheng_rag
# name: "bisheng_rag_jinyu"
# description: "金宇生物技术股份有限公司知识库问答"
# collection_name: "rag_finance_report_0_benchmark_caibao_1000_source_title"
- type: bisheng_rag
name: "bisheng_rag_annual_financial_report"
description: "金融年报财报知识库问答"
collection_name: "rag_benchmark_finance_report_benchmark_caibao_1000_knowledge_source_title"
max_content: 15000
sort_by_source_and_index: True
agent_executor:
type: 'get_openai_functions_agent_executor'
interrupt_before_action: False
recursion_limit: 50
================================================
FILE: src/backend/bisheng_langchain/gpts/config/test.yaml
================================================
assistant:
# prompt_type: 'ASSISTANT_PROMPT_DEFAULT'
# llm:
# type: 'ChatOpenAI'
# model: 'gpt-4-0125-preview'
# openai_api_key: ''
# openai_proxy: 'http://118.195.232.223:39995'
# temperature: 0.0
# prompt_type: 'ASSISTANT_PROMPT_COHERE'
# llm:
# type: 'ChatOpenAI'
# model: 'command-r-plus-104b'
# openai_api_base: 'http://34.87.129.78:9100/v1'
# openai_api_key: ''
# openai_proxy: ''
# temperature: 0.3
prompt_type: 'ASSISTANT_PROMPT_DEFAULT'
llm:
type: 'ChatQWen'
model_name: 'qwen-max'
api_key: ''
temperature: 0.3
tools:
- type: "get_current_time"
agent_executor:
# type: 'get_openai_functions_agent_executor'
# type: 'get_qwen_local_functions_agent_executor'
type: 'get_react_agent_executor'
interrupt_before_action: False
recursion_limit: 50
================================================
FILE: src/backend/bisheng_langchain/gpts/config/tools.yaml
================================================
- type: arxiv
# 1. 用于访问arXiv API的工具
- type: bing_search
# 2. 用于执行Bing搜索的工具
bing_search_url: https://api.bing.microsoft.com/v7.0/search
bing_subscription_key:
- type: calculator
# 3. 用于执行计算的工具
- type: bisheng_code_interpreter
# 4. 用于执行代码的工具
minio:
MINIO_ACCESS_KEY:
MINIO_SECRET_KEY:
CERT_CHECK: false
MINIO_ENDPOINT: 192.168.106.116:9000
SCHEMA: false
- type: dalle_image_generator
# 5. 使用OpenAI的DALL-E模型生成图像的工具
openai_api_key:
openai_proxy:
- type: get_current_time
# 6. 获取当前时间的工具
- type: macro_china_consumer_goods_retail
# 7. 用于访问中国消费品零售行业的宏观经济数据的工具
- type: macro_china_cpi
# 8. 用于访问中国消费者价格指数(CPI)的宏观经济数据的工具
- type: macro_china_gdp_yearly
# 9. 用于访问中国年度国内生产总值(GDP)的宏观经济数据的工具
- type: macro_china_money_supply
# 10. 用于访问中国货币供应量的宏观经济数据的工具
- type: macro_china_ppi
# 11. 用于访问中国生产者价格指数(PPI)的宏观经济数据的工具
- type: macro_china_shrzgm
# 12. 用于访问中国社会融资规模的宏观经济数据的工具
- type: sina_history_KLine
# 13. 用于访问新浪财经的历史K线数据的工具
- type: sina_realtime_info
# 14. 用于访问新浪财经的实时股票信息的工具
- type: tianyancha_all_companys_by_company
# 15. 使用天眼查API按公司名称搜索所有公司的工具
api_key:
- type: tianyancha_all_companys_by_humanname
# 16. 使用天眼查API按人名搜索所有公司的工具
api_key:
- type: tianyancha_company_change_info
# 17. 使用天眼查API访问公司变更信息的工具
api_key:
- type: tianyancha_company_holders
# 18. 使用天眼查API访问公司股东信息的工具
api_key:
- type: tianyancha_get_company_baseinfo
# 19. 使用天眼查API访问公司基本信息的工具
api_key:
- type: tianyancha_ic_info
# 20. 使用天眼查API访问公司工商信息的工具
api_key:
- type: tianyancha_ip_rights
# 21. 使用天眼查API访问公司知识产权信息的工具
api_key:
- type: tianyancha_judicial_risk
# 22. 使用天眼查API访问公司司法风险信息的工具
api_key:
- type: tianyancha_law_suit_case
# 23. 使用天眼查API访问公司诉讼案例信息的工具
api_key:
- type: tianyancha_riskinfo
# 24. 使用天眼查API访问公司风险信息的工具
api_key:
- type: tianyancha_search_company
# 25. 使用天眼查API搜索公司的工具
api_key:
- type: flow_knowledge_retrieve
# 26. 知识库检索工具
collection_id: 699
description: "美团知识库检索工具,从美团知识库进行检索总结"
- type: macro_china_pmi
# 27. 用于访问中国采购经理人指数(PMI)的宏观经济数据的工具
- type: bond_zh_us_rate
# 28. 指定时间段内交易日的中美两国的收益率数据
================================================
FILE: src/backend/bisheng_langchain/gpts/load_tools.py
================================================
import json
import os
import warnings
from typing import Any, Callable, Dict, List, Optional, Tuple
import httpx
import pandas as pd
import pymysql
from dotenv import load_dotenv
from langchain_community.tools.arxiv.tool import ArxivQueryRun
from langchain_community.tools.bearly.tool import BearlyInterpreterTool
from langchain_community.utilities.bing_search import BingSearchAPIWrapper
from langchain_core.callbacks import BaseCallbackManager, Callbacks
from langchain_core.language_models import BaseLanguageModel
from langchain_core.tools import BaseTool, Tool
from mypy_extensions import Arg, KwArg
from bisheng_langchain.gpts.tools.api_tools import ALL_API_TOOLS
from bisheng_langchain.gpts.tools.bing_search.self_arxiv import ArxivAPIWrapperSelf
from bisheng_langchain.gpts.tools.bing_search.tool import BingSearchResults
from bisheng_langchain.gpts.tools.calculator.tool import calculator
from bisheng_langchain.gpts.tools.code_interpreter.e2b_executor import E2bCodeExecutor
from bisheng_langchain.gpts.tools.code_interpreter.local_executor import LocalExecutor
from bisheng_langchain.gpts.tools.code_interpreter.tool import CodeInterpreterTool
# from langchain_community.utilities.dalle_image_generator import DallEAPIWrapper
from bisheng_langchain.gpts.tools.dalle_image_generator.tool import (
DallEImageGenerator, ProxyDallEAPIWrapper,
)
from bisheng_langchain.gpts.tools.get_current_time.tool import get_current_time
from bisheng_langchain.gpts.tools.local_file.local_file import LocalFileTool
from bisheng_langchain.gpts.tools.sql_agent.tool import SqlAgentTool, SqlAgentAPIWrapper
from bisheng_langchain.gpts.tools.web_search.tool import WebSearchTool, SearchTool
from bisheng_langchain.rag import BishengRAGTool
from bisheng_langchain.utils.azure_dalle_image_generator import AzureDallEWrapper
def _get_current_time() -> BaseTool:
return get_current_time
def _get_calculator() -> BaseTool:
return calculator
def _get_arxiv() -> BaseTool:
return ArxivQueryRun(
api_wrapper=ArxivAPIWrapperSelf(top_k_results=5, load_max_docs=5, load_all_available_meta=True))
_BASE_TOOLS: Dict[str, Callable[[], BaseTool]] = {
'get_current_time': _get_current_time,
'calculator': _get_calculator,
'arxiv': _get_arxiv,
}
_LLM_TOOLS: Dict[str, Callable[[BaseLanguageModel], BaseTool]] = {}
_EXTRA_LLM_TOOLS: Dict[
str, Tuple[Callable[[Arg(BaseLanguageModel, 'llm'), KwArg(Any)], BaseTool], List[str]] # noqa # noqa #type: ignore
] = {}
def _get_bing_search(**kwargs: Any) -> BaseTool:
return BingSearchResults(api_wrapper=BingSearchAPIWrapper(**kwargs))
def _get_web_search(**kwargs: Any) -> BaseTool:
"""Get a web search tool."""
tool_name = kwargs.get('type', '')
tool_config = kwargs.get('config', {}).get(tool_name)
search_tool = SearchTool.init_search_tool(tool_name, **tool_config)
return WebSearchTool(api_wrapper=search_tool)
def _get_dalle_image_generator(**kwargs: Any) -> BaseTool:
# 说明是azure的openai配置
if kwargs.get("azure_endpoint"):
kwargs['api_key'] = kwargs.pop('openai_api_key')
kwargs['api_version'] = kwargs.pop('openai_api_version')
return DallEImageGenerator(
api_wrapper=AzureDallEWrapper(**kwargs)
)
if kwargs.get('openai_proxy'):
kwargs['http_async_client'] = httpx.AsyncClient(proxies=kwargs.get('openai_proxy'))
kwargs['http_client'] = httpx.Client(proxies=kwargs.get('openai_proxy'))
kwargs['api_key'] = kwargs.pop('openai_api_key')
kwargs['base_url'] = kwargs.pop('openai_api_base', None)
return DallEImageGenerator(
api_wrapper=ProxyDallEAPIWrapper(
model='dall-e-3',
**kwargs
)
)
def _get_sql_agent(**kwargs: Any) -> BaseTool:
return SqlAgentTool(api_wrapper=SqlAgentAPIWrapper(**kwargs))
def _get_bearly_code_interpreter(**kwargs: Any) -> Tool:
return BearlyInterpreterTool(**kwargs).as_tool()
def _get_native_code_interpreter(**kwargs: Any) -> BaseTool:
executor_type = kwargs.pop("type", "local")
config = kwargs.pop("config", {}).get(executor_type, {})
kwargs.update(config)
if executor_type == 'local':
executor = LocalExecutor(**kwargs)
else:
executor = E2bCodeExecutor(**kwargs)
return CodeInterpreterTool(executor=executor, description=executor.description)
# 第二个list内填必填参数,第三个list内填可选参数
_EXTRA_PARAM_TOOLS: Dict[str, Tuple[Callable[[KwArg(Any)], BaseTool], List[Optional[str]], List[Optional[str]]]] = {
# type: ignore
'dalle_image_generator': (_get_dalle_image_generator,
['openai_api_key'],
['openai_api_base', 'openai_proxy', 'azure_deployment', 'azure_endpoint',
'openai_api_version']),
'bing_search': (_get_bing_search, ['bing_subscription_key', 'bing_search_url'], []),
'bisheng_code_interpreter': (_get_native_code_interpreter, ["minio"], ['config', 'type']),
'bisheng_rag': (BishengRAGTool.get_rag_tool, ['name', 'description'],
['vector_store', 'keyword_store', 'llm', 'collection_name', 'max_content',
'sort_by_source_and_index']),
'sql_agent': (_get_sql_agent, ['llm', 'sql_address'], []),
"web_search": (_get_web_search, ['type', 'config'], []),
}
_API_TOOLS: Dict[str, Tuple[Callable[Any, BaseTool], List[str]]] = {**ALL_API_TOOLS} # type: ignore
_API_TOOLS.update({
"list_files": (LocalFileTool.get_tool_by_name, ['root_path']),
"get_file_details": (LocalFileTool.get_tool_by_name, ['root_path']),
"search_files": (LocalFileTool.get_tool_by_name, ['root_path']),
"search_text_in_file": (LocalFileTool.get_tool_by_name, ['root_path']),
"read_text_file": (LocalFileTool.get_tool_by_name, ['root_path']),
"add_text_to_file": (LocalFileTool.get_tool_by_name, ['root_path']),
"replace_file_lines": (LocalFileTool.get_tool_by_name, ['root_path']),
})
_ALL_TOOLS = {
**_BASE_TOOLS,
**_LLM_TOOLS,
**_EXTRA_LLM_TOOLS,
**_EXTRA_PARAM_TOOLS,
**_API_TOOLS,
}
def _handle_callbacks(callback_manager: Optional[BaseCallbackManager], callbacks: Callbacks) -> Callbacks:
if callback_manager is not None:
warnings.warn(
'callback_manager is deprecated. Please use callbacks instead.',
DeprecationWarning,
)
if callbacks is not None:
raise ValueError('Cannot specify both callback_manager and callbacks arguments.')
return callback_manager
return callbacks
def load_tools(
tool_params: Dict[str, Dict[str, Any]],
llm: Optional[BaseLanguageModel] = None,
callbacks: Callbacks = None,
**kwargs: Any,
) -> List[BaseTool]:
tools = []
callbacks = _handle_callbacks(callback_manager=kwargs.get('callback_manager'), callbacks=callbacks)
for name, params in tool_params.items():
if name in _BASE_TOOLS:
tools.append(_BASE_TOOLS[name]())
elif name in _LLM_TOOLS:
if llm is None:
raise ValueError(f'Tool {name} requires an LLM to be provided')
tool = _LLM_TOOLS[name](llm)
tools.append(tool)
elif name in _EXTRA_LLM_TOOLS:
if llm is None:
raise ValueError(f'Tool {name} requires an LLM to be provided')
_get_llm_tool_func, extra_keys = _EXTRA_LLM_TOOLS[name]
missing_keys = set(extra_keys).difference(params)
if missing_keys:
raise ValueError(f'Tool {name} requires some parameters that were not ' f'provided: {missing_keys}')
sub_kwargs = {k: params[k] for k in extra_keys}
tool = _get_llm_tool_func(llm=llm, **sub_kwargs)
tools.append(tool)
elif name in _EXTRA_PARAM_TOOLS:
_get_tool_func, extra_keys, optional_keys = _EXTRA_PARAM_TOOLS[name]
missing_keys = set(extra_keys).difference(params)
if missing_keys:
raise ValueError(f'Tool {name} requires some parameters that were not ' f'provided: {missing_keys}')
extra_kwargs = {k: params[k] for k in extra_keys}
optional_kwargs = {k: params[k] for k in optional_keys if k in params}
all_kwargs = {**extra_kwargs, **optional_kwargs}
tool = _get_tool_func(**all_kwargs)
tools.append(tool)
elif name in _API_TOOLS:
_get_api_tool_func, extra_keys = _API_TOOLS[name]
missing_keys = set(extra_keys).difference(params)
if missing_keys:
raise ValueError(f'Tool {name} requires some parameters that were not ' f'provided: {missing_keys}')
mini_kwargs = {k: params[k] for k in extra_keys}
tool = _get_api_tool_func(name=name, **mini_kwargs)
tools.append(tool)
else:
raise ValueError(f'Got unknown tool {name}')
if callbacks is not None:
for tool in tools:
tool.callbacks = callbacks
return tools
def get_all_tool_names() -> List[str]:
"""Get a list of all possible tool names."""
return list(_ALL_TOOLS.keys())
def get_tool_table():
load_dotenv('.sql_env', override=True)
db = pymysql.connect(
host=os.getenv('MYSQL_HOST'),
user=os.getenv('MYSQL_USER'),
password=os.getenv('MYSQL_PASSWORD'),
database=os.getenv('MYSQL_DATABASE'),
port=int(os.getenv('MYSQL_PORT')),
)
cursor = db.cursor()
cursor.execute("SELECT name, t.desc, tool_key, extra FROM t_gpts_tools as t;")
results = cursor.fetchall()
db.close()
df = pd.DataFrame(
columns=[
'前端工具名',
'前端工具描述',
'tool_key',
'tool参数配置',
'function_name',
'function_description',
'function_args',
]
)
for i, result in enumerate(results):
name, desc, tool_key, extra = result
if not extra:
extra = '{}'
tool_func = load_tools({tool_key: json.loads(extra)})[0]
df.loc[i, '前端工具名'] = name
df.loc[i, '前端工具描述'] = desc
df.loc[i, 'tool_key'] = tool_key
df.loc[i, 'tool参数配置'] = extra
df.loc[i, 'function_name'] = tool_func.name
df.loc[i, 'function_description'] = tool_func.description
df.loc[i, 'function_args'] = f"{tool_func.args_schema.schema()['properties']}"
return df
if __name__ == '__main__':
tool = load_tools({
"sina_realtime_info": {
}
})[0]
tool.invoke(input={"stock_symbol": "600519", "stock_exchange": "sh", "prefix": "s_"})
================================================
FILE: src/backend/bisheng_langchain/gpts/message_types.py
================================================
from typing import Any
from langchain_core.messages import FunctionMessage, ToolMessage
class LiberalFunctionMessage(FunctionMessage):
content: Any
class LiberalToolMessage(ToolMessage):
content: Any
================================================
FILE: src/backend/bisheng_langchain/gpts/prompts/__init__.py
================================================
from bisheng_langchain.gpts.prompts.assistant_prompt_opt import ASSISTANT_PROMPT_OPT
from bisheng_langchain.gpts.prompts.assistant_prompt_base import ASSISTANT_PROMPT_DEFAULT
from bisheng_langchain.gpts.prompts.assistant_prompt_cohere import ASSISTANT_PROMPT_COHERE
from bisheng_langchain.gpts.prompts.breif_description_prompt import BREIF_DES_PROMPT
from bisheng_langchain.gpts.prompts.opening_dialog_prompt import OPENDIALOG_PROMPT
from bisheng_langchain.gpts.prompts.select_tools_prompt import HUMAN_MSG, SYS_MSG
__all__ = [
"ASSISTANT_PROMPT_DEFAULT",
"ASSISTANT_PROMPT_COHERE",
"ASSISTANT_PROMPT_OPT",
"OPENDIALOG_PROMPT",
"BREIF_DES_PROMPT",
"SYS_MSG",
"HUMAN_MSG",
]
================================================
FILE: src/backend/bisheng_langchain/gpts/prompts/assistant_prompt_base.py
================================================
ASSISTANT_PROMPT_DEFAULT = "You are a helpful assistant."
# ASSISTANT_PROMPT_DEFAULT = """
# # role
# 你是一名股票市场研究员。
# # skill 1:股票市场行情分析
# 当用户要求分析当日市场行情时,以表格形式展示当日股市情况:
# - 行:沪深300、中证500、中证1000 以及 小计
# - 列指标:当日涨跌幅、今年累计涨跌幅、成交额(单位:亿元)、成交额占比
# - 小计 说明:对"成交额"列进行求和,其他列为空即可
# - 指标计算说明:当日涨跌幅=实时行情数据涨跌幅; 今年累计涨跌幅=(实时行情数据现价-今年第一个交易日历史行情数据开盘价)/今年第一个交易日历史行情数据开盘价*100%; 成交额 = 实时行情数据成交额; 成交额占比=该指数占所有所有指数成交额的百分比。
# 为了完成上述任务,你可以调用以下工具:
# 1. 股票实时行情工具:获取当日现价、涨跌幅、成交额
# 2. 股票历史行情工具:获取历史某日开盘价
# 附:指数代码:沪深300(000300)、中证500(000905)、中证1000(000852)
# """
================================================
FILE: src/backend/bisheng_langchain/gpts/prompts/assistant_prompt_cohere.py
================================================
preamble="""You are a helpful assistant.
"""
ASSISTANT_PROMPT_COHERE="""{preamble}||Carefully perform the following instructions, in order, starting each with a new line.
Firstly, You may need to use complex and advanced reasoning to complete your task and answer the question. Think about how you can use the provided tools to answer the question and come up with a high level plan you will execute.
Write 'Plan:' followed by an initial high level plan of how you will solve the problem including the tools and steps required.
Secondly, Carry out your plan by repeatedly using actions, reasoning over the results, and re-evaluating your plan. Perform Action, Observation, Reflection steps with the following format. Write 'Action:' followed by a json formatted action containing the "tool_name" and "parameters"
Next you will analyze the 'Observation:', this is the result of the action.
After that you should always think about what to do next. Write 'Reflection:' followed by what you've figured out so far, any changes you need to make to your plan, and what you will do next including if you know the answer to the question.
... (this Action/Observation/Reflection can repeat N times)
Thirdly, Decide which of the retrieved documents are relevant to the user's last input by writing 'Relevant Documents:' followed by comma-separated list of document numbers. If none are relevant, you should instead write 'None'.
Fourthly, Decide which of the retrieved documents contain facts that should be cited in a good answer to the user's last input by writing 'Cited Documents:' followed a comma-separated list of document numbers. If you dont want to cite any of them, you should instead write 'None'.
Fifthly, Write 'Answer:' followed by a response to the user's last input. Use the retrieved documents to help you. Do not insert any citations or grounding markup.
Finally, Write 'Grounded answer:' followed by a response to the user's last input in high quality natural english. Use the symbols and to indicate when a fact comes from a document in the search result, e.g my fact for a fact from document 4.
Additional instructions to note:
- If the user's question is in Chinese, please answer it in Chinese.
- 当问题中有涉及到时间信息时,比如最近6个月、昨天、去年等,你需要用时间工具查询时间信息。
""".format(preamble=preamble)
================================================
FILE: src/backend/bisheng_langchain/gpts/prompts/assistant_prompt_opt.py
================================================
from langchain_core.prompts import PromptTemplate
from langchain_core.prompts.chat import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate,
)
# 例如助手的身份、相关完成任务的具体方法和步骤、回答问题时的语气以及应该注意什么问题等
system_template = """你是一个prompt优化大师,你会得到一个助手的名字和简单描述,你需要根据这些信息,为助手生成一个合适的角色描述、详细的技能说明、相关约束信息,输出为markdown格式。你需要按照以下格式进行组织输出内容:
```markdown
## 角色
你是一个[助手的角色],[助手的角色描述]。
## 技能
1. [技能 1 的描述]:
- [技能 1 的具体内容]。
- [技能 1 的具体内容]。
2. [技能 2 的描述]:
- [技能 2 的具体内容]。
- [技能 2 的具体内容]。
## 限制
- [限制 1 的描述]。
- [限制 2 的描述]。
```
以下是一些例子:
示例1:
输入:
助手名字: 金融分析助手
助手描述: 1. 分析上市公司最新的年报财报;2. 获取上市公司的最新新闻;
输出:
```markdown
## 角色
你是一个金融分析师,会利用最新的信息和数据来分析公司的财务状况、市场趋势和行业动态,以帮助客户做出明智的投资决策。
## 技能
1. 分析上市公司最新的年报财报:
- 使用财务分析工具和技巧,对公司的财务报表进行详细的分析和解读。
- 评估公司的财务健康状况,包括营收、利润、资产负债表、现金流量等方面。
- 分析公司的财务指标,如利润率、偿债能力、周转率等,以评估其盈利能力和风险水平。
- 比较公司的财务表现与同行业其他公司的平均水平,以评估其相对竞争力。
2. 获取上市公司的最新新闻:
- 使用新闻来源和数据库,定期获取上市公司的最新新闻和公告。
- 分析新闻对公司股价和投资者情绪的潜在影响。
- 关注公司的重大事件,如合并收购、产品发布、管理层变动等,以及这些事件对公司未来发展的影响。
- 结合财务分析和新闻分析,提供对公司的综合评估和投资建议。
## 限制
- 只讨论与金融分析相关的内容,拒绝回答与金融分析无关的话题。
- 所有的输出内容必须按照给定的格式进行组织,不能偏离框架要求。
- 分析部分不能超过 100 字。
```
示例2:
输入:
助手名字: 前端开发助手
助手描述: 你的角色是前端开发,能帮助我把图片制作成html页面,css使用tailwind.css,ui库使用antd
输出:
```markdown
# 角色
你是一个前端开发工程师,可以使用 HTML、CSS 和 JavaScript 等技术构建网站和应用程序。
## 技能
1. 将图片制作成 HTML 页面
- 当用户需要将图片制作成 HTML 页面时,你可以根据用户提供的图片和要求,使用 HTML 和 CSS 等技术构建一个页面。
- 在构建页面时,你可以使用 Tailwind CSS 来简化 CSS 样式的编写,并使用 Antd 库来提供丰富的 UI 组件。
- 构建完成后,你可以将页面代码返回给用户,以便用户可以将其部署到服务器上或在本地查看。
2. 提供前端开发相关的建议和帮助
- 当用户需要前端开发相关的建议和帮助时,你可以根据用户的问题,提供相关的建议和帮助。
- 你可以提供关于 HTML、CSS、JavaScript 等前端技术的建议和帮助,也可以提供关于前端开发工具和流程的建议和帮助。
## 限制
- 只讨论与前端开发相关的内容,拒绝回答与前端开发无关的话题。
- 所输出的内容必须按照给定的格式进行组织,不能偏离框架要求。
```
"""
human_template = """
输入:
助手名字: {assistant_name}
助手描述: {assistant_description}
输出:
"""
messages = [
SystemMessagePromptTemplate.from_template(system_template),
HumanMessagePromptTemplate.from_template(human_template),
]
ASSISTANT_PROMPT_OPT = ChatPromptTemplate.from_messages(messages)
================================================
FILE: src/backend/bisheng_langchain/gpts/prompts/breif_description_prompt.py
================================================
from langchain_core.prompts import PromptTemplate
from langchain_core.prompts.chat import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate,
)
system_template = """
你是一个生成简要描述的助手。接下来,你会收到一段关于任务助手的文本信息,你需要根据任务助手的文本信息生成一段简要的描述,描述不超过40个字。
下面是一些示例
例子1:
输入文本:
# 角色
你是一个可以帮助用户在家赚钱的机器人,你可以提供各种赚钱的途径和方法,帮助用户实现财务自由。
## 技能
### 技能 1: 提供赚钱途径
1. 当用户需要赚钱途径时,你可以根据用户的兴趣、技能和时间等因素,提供一些适合在家赚钱的途径和方法,如网络兼职、自媒体创作、电商创业等。
2. 你需要向用户详细介绍每种途径的操作流程、注意事项和收益情况等,以便用户做出选择。
3. 你还可以根据用户的需求和情况,提供一些个性化的建议和指导,帮助用户更好地开展赚钱活动。
### 技能 2: 提供赚钱技巧
1. 当用户需要赚钱技巧时,你可以向用户提供一些实用的赚钱技巧,如如何提高工作效率、如何节省成本、如何增加收入等。
2. 你需要向用户详细介绍每种技巧的操作方法和注意事项,以便用户能够正确地运用这些技巧。
3. 你还可以根据用户的需求和情况,提供一些个性化的建议和指导,帮助用户更好地实现财务自由。
### 技能 3: 提供创业指导
1. 当用户需要创业指导时,你可以向用户提供一些创业的基本知识和方法,如如何选择创业项目、如何制定创业计划、如何筹集创业资金等。
2. 你需要向用户详细介绍每种方法的操作流程和注意事项,以便用户能够正确地开展创业活动。
3. 你还可以根据用户的需求和情况,提供一些个性化的建议和指导,帮助用户更好地实现创业目标。
## 限制
- 只讨论与赚钱有关的内容,拒绝回答与赚钱无关的话题。
- 所输出的内容必须按照给定的格式进行组织,不能偏离框架要求。
根据上述输入的文本概括生成一段简要描述:
针对用户的要求,提供赚钱途经、赚钱技巧和创业指导。
例子2:
输入文本:
# 角色:Excel全能助手
## 个人简介
- 版本:1.0
- 语言:中文
- 描述:我是一名Excel全能助手,专注于帮助用户解决Excel相关的问题和提供高效的数据处理方案。
## 功能特点
- 数据处理:熟练掌握Excel的各种数据处理功能,包括筛选、排序、合并、拆分、透视表等,能够帮助用户快速处理大量数据。
- 公式应用:精通Excel的各种常用公式和函数,能够帮助用户进行复杂的数据计算和分析,提供准确的结果。
- 数据可视化:熟悉Excel的图表功能,能够帮助用户将数据以直观的方式展示,制作出美观、清晰的图表。
- 自动化操作:了解Excel的宏和VBA编程,能够帮助用户实现自动化操作,提高工作效率。
## 使用指南
1. 数据处理:
- 使用筛选功能,快速筛选出符合条件的数据。
- 利用排序功能,对数据进行升序或降序排列。
- 使用合并和拆分功能,将多个单元格合并为一个或将一个单元格拆分为多个。
- 利用透视表功能,对大量数据进行汇总和分析。
2. 公式应用:
- 使用常用公式,如SUM、AVERAGE、MAX、MIN等,进行数据计算。
- 利用逻辑函数,如IF、AND、OR等,进行条件判断和逻辑运算。
- 使用VLOOKUP和HLOOKUP函数,进行数据查找和匹配。
- 利用COUNTIF和SUMIF函数,进行条件统计和求和。
3. 数据可视化:
- 利用图表功能,选择合适的图表类型,如柱状图、折线图、饼图等,展示数据。
- 调整图表的样式和布局,使其更加美观和易读。
- 添加数据标签和图例,增加图表的信息量和可读性。
4. 自动化操作:
- 利用宏录制功能,记录一系列操作步骤,实现自动化操作。
- 使用VBA编程,编写自定义的宏,实现更复杂的自动化操作。
- 将宏和VBA代码应用到Excel工作簿中,提高工作效率和准确性。
## 使用建议
- 熟悉Excel的快捷键和常用操作,可以提高工作效率。
- 在处理大量数据时,先备份原始数据,以防误操作导致数据丢失。
- 学习和掌握Excel的高级功能和技巧,可以更好地应对复杂的数据处理需求。
- 及时保存和备份Excel文件,以防止意外情况导致数据丢失。
根据上述输入的文本概括生成一段简要描述:
根据用户的需求,帮助用户解决Excel相关问题,包括数据处理、公式应用、数据可视化、使用建议等。
你必须使用上述格式输出结果。
"""
human_template = """
输入文本:
{description}
根据上述输入的文本概括生成一段简要描述:
"""
messages = [
SystemMessagePromptTemplate.from_template(system_template),
HumanMessagePromptTemplate.from_template(human_template),
]
BREIF_DES_PROMPT = ChatPromptTemplate.from_messages(messages)
================================================
FILE: src/backend/bisheng_langchain/gpts/prompts/opening_dialog_prompt.py
================================================
from langchain_core.prompts import PromptTemplate
from langchain_core.prompts.chat import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate,
)
system_template = """
你是一个生成开场白和预置问题的助手。接下来,你会收到一段关于任务助手的描述,你需要带入描述中的角色,以描述中的角色身份生成一段开场白,同时你还需要站在用户的角度生成几个用户可能的提问。输出格式如下:
[
{{
"开场白": "开场白内容",
"问题": ["问题1", "问题2", "问题3"]
}}
]
下面是一些示例
例子1:
输入描述:
# 角色
你是一个可以帮助用户在家赚钱的机器人,你可以提供各种赚钱的途径和方法,帮助用户实现财务自由。
## 技能
### 技能 1: 提供赚钱途径
1. 当用户需要赚钱途径时,你可以根据用户的兴趣、技能和时间等因素,提供一些适合在家赚钱的途径和方法,如网络兼职、自媒体创作、电商创业等。
2. 你需要向用户详细介绍每种途径的操作流程、注意事项和收益情况等,以便用户做出选择。
3. 你还可以根据用户的需求和情况,提供一些个性化的建议和指导,帮助用户更好地开展赚钱活动。
### 技能 2: 提供赚钱技巧
1. 当用户需要赚钱技巧时,你可以向用户提供一些实用的赚钱技巧,如如何提高工作效率、如何节省成本、如何增加收入等。
2. 你需要向用户详细介绍每种技巧的操作方法和注意事项,以便用户能够正确地运用这些技巧。
3. 你还可以根据用户的需求和情况,提供一些个性化的建议和指导,帮助用户更好地实现财务自由。
### 技能 3: 提供创业指导
1. 当用户需要创业指导时,你可以向用户提供一些创业的基本知识和方法,如如何选择创业项目、如何制定创业计划、如何筹集创业资金等。
2. 你需要向用户详细介绍每种方法的操作流程和注意事项,以便用户能够正确地开展创业活动。
3. 你还可以根据用户的需求和情况,提供一些个性化的建议和指导,帮助用户更好地实现创业目标。
## 限制
- 只讨论与赚钱有关的内容,拒绝回答与赚钱无关的话题。
- 所输出的内容必须按照给定的格式进行组织,不能偏离框架要求。
根据上述输入的描述生成开场白和预置问题:
[
{{
"开场白": "你好,我是一个可以帮助你在家赚钱的机器人,很高兴认识你。",
"问题": ["如何使用你的服务来在家赚钱?", "你能提供哪些在家赚钱的建议和技巧?", "你的服务如何帮助我实现财务自由?"]
}}
]
例子2:
输入描述:
# 角色:Excel全能助手
## 个人简介
- 版本:1.0
- 语言:中文
- 描述:我是一名Excel全能助手,专注于帮助用户解决Excel相关的问题和提供高效的数据处理方案。
## 功能特点
- 数据处理:熟练掌握Excel的各种数据处理功能,包括筛选、排序、合并、拆分、透视表等,能够帮助用户快速处理大量数据。
- 公式应用:精通Excel的各种常用公式和函数,能够帮助用户进行复杂的数据计算和分析,提供准确的结果。
- 数据可视化:熟悉Excel的图表功能,能够帮助用户将数据以直观的方式展示,制作出美观、清晰的图表。
- 自动化操作:了解Excel的宏和VBA编程,能够帮助用户实现自动化操作,提高工作效率。
## 使用指南
1. 数据处理:
- 使用筛选功能,快速筛选出符合条件的数据。
- 利用排序功能,对数据进行升序或降序排列。
- 使用合并和拆分功能,将多个单元格合并为一个或将一个单元格拆分为多个。
- 利用透视表功能,对大量数据进行汇总和分析。
2. 公式应用:
- 使用常用公式,如SUM、AVERAGE、MAX、MIN等,进行数据计算。
- 利用逻辑函数,如IF、AND、OR等,进行条件判断和逻辑运算。
- 使用VLOOKUP和HLOOKUP函数,进行数据查找和匹配。
- 利用COUNTIF和SUMIF函数,进行条件统计和求和。
3. 数据可视化:
- 利用图表功能,选择合适的图表类型,如柱状图、折线图、饼图等,展示数据。
- 调整图表的样式和布局,使其更加美观和易读。
- 添加数据标签和图例,增加图表的信息量和可读性。
4. 自动化操作:
- 利用宏录制功能,记录一系列操作步骤,实现自动化操作。
- 使用VBA编程,编写自定义的宏,实现更复杂的自动化操作。
- 将宏和VBA代码应用到Excel工作簿中,提高工作效率和准确性。
## 使用建议
- 熟悉Excel的快捷键和常用操作,可以提高工作效率。
- 在处理大量数据时,先备份原始数据,以防误操作导致数据丢失。
- 学习和掌握Excel的高级功能和技巧,可以更好地应对复杂的数据处理需求。
- 及时保存和备份Excel文件,以防止意外情况导致数据丢失。
根据上述输入的描述生成开场白和预置问题:
[
{{
"开场白": "你好,我是一名Excel全能助手,可以帮助你解决Excel相关的问题和提供高效的数据处理方案。",
"问题": ["如何快速处理大量数据?", "如何使用Excel进行复杂的数据计算和分析?", "如何将数据以直观的方式展示,制作出美观、清晰的图表?"]
}}
]
你必须使用上述格式输出结果。
"""
human_template = """
输入描述:
{description}
根据上述输入的描述生成开场白和预置问题:
"""
messages = [
SystemMessagePromptTemplate.from_template(system_template),
HumanMessagePromptTemplate.from_template(human_template),
]
OPENDIALOG_PROMPT = ChatPromptTemplate.from_messages(messages)
================================================
FILE: src/backend/bisheng_langchain/gpts/prompts/react_agent_prompt.py
================================================
from typing import List, Union
from langchain_core.prompts.chat import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate,
MessagesPlaceholder
)
from langchain_core.prompts.prompt import PromptTemplate
from langchain_core.messages import FunctionMessage, SystemMessage, ToolMessage, AIMessage, HumanMessage, ChatMessage
system_temp = """
{assistant_message}
Respond to the human as helpfully and accurately as possible. You have access to the following tools:
{tools}
Use a json blob to specify a tool by providing an action key (tool name) and an action_input key (tool input).
Valid "action" values: "Final Answer" or {tool_names}
Provide only ONE action per $JSON_BLOB, as shown:
```
{{
"action": $TOOL_NAME,
"action_input": $INPUT
}}
```
Follow this format:
Question: input question to answer
Thought: consider previous and subsequent steps
Action:
```
$JSON_BLOB
```
Observation: action result
... (repeat Thought/Action/Observation N times)
Thought: I know what to respond
Action:
```
{{
"action": "Final Answer",
"action_input": "Final response to human"
}}
Begin! Reminder to ALWAYS respond with a valid json blob of a single action. Use tools if necessary. Respond directly if appropriate. Format is Action:```$JSON_BLOB```then Observation
"""
human_temp = """Question: {input}
Thought: {agent_scratchpad}
(reminder to respond in a JSON blob no matter what)"""
react_agent_prompt = ChatPromptTemplate(
input_variables=['agent_scratchpad', 'input', 'tool_names', 'tools', 'assistant_message'],
optional_variables=['chat_history'],
input_types={'chat_history': List[Union[AIMessage, HumanMessage, ChatMessage, SystemMessage, FunctionMessage, ToolMessage]]},
messages=[
SystemMessagePromptTemplate.from_template(system_temp),
MessagesPlaceholder(variable_name='chat_history', optional=True),
HumanMessagePromptTemplate.from_template(human_temp)
]
)
================================================
FILE: src/backend/bisheng_langchain/gpts/prompts/select_tools_prompt.py
================================================
SYS_MSG = """
你是一个善于分析用户需求的专家,你非常擅长根据用户对任务的描述,从你的工具箱中选择合适的工具给用户。
你的工具箱中有以下工具,其中tool_name表示这个工具的名字,tool_description表示工具的用途:{tool_pool}。
在选择工具时,你需要遵守以下规则:
1. 你需要根据用户输入的任务描述,选择最符合用户需求的工具,不要随意选择工具给用户。
2. 只能从你的工具箱中选择工具,一定不要自己编造工具箱中不存在的工具给用户!
3. 你只需要返回工具的名称,不需要返回工具的描述以及其他额外的信息,返回的格式为:['tool1', 'tool2', 'tool3']。
4. 如果你觉得没有合适的工具,请返回:[]。
5. 当任务描述中出现“Skill”时,你可以重点关注“Skill”中的内容,这些内容可能会帮助你更好地选择工具。
6. 如果你回答对了,将会获得100块钱的奖励,如果回答错误,将会扣除50块钱。
以下是一些示例:
例子1:
任务名: 论文助手
任务描述: 帮助学生查找相关论文
建议的工具: ['arxiv', 'bing_search']
例子2:
任务名: 时间查询
任务描述: 查询当前时间
建议的工具: ['get_current_time']
"""
HUMAN_MSG = """
任务名: {task_name}
任务描述: {task_description}
建议的工具:
"""
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/api_tools/__init__.py
================================================
from typing import Any, Callable, Dict, List, Tuple
# from .eastmoney import
from bisheng_langchain.gpts.tools.api_tools.firecrawl import FireCrawl
from bisheng_langchain.gpts.tools.api_tools.jina import JinaTool
from bisheng_langchain.gpts.tools.api_tools.silicon_flow import SiliconFlow
from bisheng_langchain.gpts.tools.message.dingding import DingdingMessageTool
from bisheng_langchain.gpts.tools.message.email import EmailMessageTool
from bisheng_langchain.gpts.tools.message.feishu import FeishuMessageTool
from bisheng_langchain.gpts.tools.message.wechat import WechatMessageTool
from langchain_core.tools import BaseTool
from mypy_extensions import KwArg
from .flow import FlowTools
from .macro_data import MacroData
from .sina import StockInfo
from .tianyancha import CompanyInfo
# 筛选出类方法
tianyancha_class_methods = [
method for method in CompanyInfo.__dict__
if isinstance(CompanyInfo.__dict__[method], classmethod)
]
_TIAN_YAN_CHA_TOOLS: Dict[str, Tuple[Callable[[KwArg(Any)], BaseTool], List[str]]] = {
f'tianyancha_{name}': (CompanyInfo.get_api_tool, ['api_key', 'proxy'])
for name in tianyancha_class_methods
}
sina_class_methods = [
method for method in StockInfo.__dict__ if isinstance(StockInfo.__dict__[method], classmethod)
]
_SINA_TOOLS: Dict[str, Tuple[Callable[[KwArg(Any)], BaseTool], List[str]]] = {
f'sina_{name}': (StockInfo.get_api_tool, ['proxy'])
for name in sina_class_methods
}
macro_class_methods = [
method for method in MacroData.__dict__ if isinstance(MacroData.__dict__[method], classmethod)
]
_MACRO_TOOLS: Dict[str, Tuple[Callable[[KwArg(Any)], BaseTool], List[str]]] = {
f'macro_{name}': (MacroData.get_api_tool, [])
for name in macro_class_methods
}
_tmp_flow = ['knowledge_retrieve']
_TMP_TOOLS: Dict[str, Tuple[Callable[[KwArg(Any)], BaseTool], List[str]]] = {
f'flow_{name}': (FlowTools.get_api_tool, ['collection_id', 'description'])
for name in _tmp_flow
}
firecrawl_class_methods = [
method for method in FireCrawl.__dict__
if isinstance(FireCrawl.__dict__[method], classmethod)
]
_FIRE_TOOLS: Dict[str, Tuple[Callable[[KwArg(Any)], BaseTool], List[str]]] = {
'fire_search_crawl': (FireCrawl.get_api_tool, ['api_key', 'maxdepth', 'limit', 'timeout', 'base_url']),
'fire_search_scrape': (FireCrawl.get_api_tool, ['api_key', 'maxdepth', 'limit', 'timeout', 'base_url'])
}
jina_class_methods = [
method for method in JinaTool.__dict__
if isinstance(JinaTool.__dict__[method], classmethod)
]
_JINA_TOOLS: Dict[str, Tuple[Callable[[KwArg(Any)], BaseTool], List[str]]] = {
'jina_get_markdown': (JinaTool.get_api_tool, ['jina_api_key'])
}
silicon_class_methods = [
method for method in SiliconFlow.__dict__
if isinstance(SiliconFlow.__dict__[method], classmethod)
]
_SILICON_TOOLS: Dict[str, Tuple[Callable[[KwArg(Any)], BaseTool], List[str]]] = {
'silicon_stable_diffusion': (SiliconFlow.get_api_tool, ['siliconflow_api_key']),
'silicon_flux': (SiliconFlow.get_api_tool, ['siliconflow_api_key'])
}
dingding_class_methods = [
method for method in DingdingMessageTool.__dict__
if isinstance(DingdingMessageTool.__dict__[method], classmethod)
]
_DING_TOOLS: Dict[str, Tuple[Callable[[KwArg(Any)], BaseTool], List[str]]] = {
'ding_send_message': (DingdingMessageTool.get_api_tool, [])
}
email_class_methods = [
method for method in EmailMessageTool.__dict__
if isinstance(EmailMessageTool.__dict__[method], classmethod)
]
_EMAIL_TOOLS: Dict[str, Tuple[Callable[[KwArg(Any)], BaseTool], List[str]]] = {
'email_send_email': (EmailMessageTool.get_api_tool,
['email_account', 'email_password', 'smtp_server', 'smtp_port', 'encrypt_method']),
}
feishu_class_methods = [
method for method in FeishuMessageTool.__dict__
if isinstance(FeishuMessageTool.__dict__[method], classmethod)
]
_FEISHU_TOOLS: Dict[str, Tuple[Callable[[KwArg(Any)], BaseTool], List[str]]] = {
'feishu_send_message': (FeishuMessageTool.get_api_tool, ['app_id', 'app_secret']),
'feishu_get_chat_messages': (FeishuMessageTool.get_api_tool, ['app_id', 'app_secret']),
}
wechat_class_methods = [
method for method in WechatMessageTool.__dict__
if isinstance(WechatMessageTool.__dict__[method], classmethod)
]
_WECHAT_TOOLS: Dict[str, Tuple[Callable[[KwArg(Any)], BaseTool], List[str]]] = {
'wechat_send_message': (WechatMessageTool.get_api_tool, [])
}
ALL_API_TOOLS = {}
ALL_API_TOOLS.update(_TIAN_YAN_CHA_TOOLS)
ALL_API_TOOLS.update(_SINA_TOOLS)
ALL_API_TOOLS.update(_MACRO_TOOLS)
ALL_API_TOOLS.update(_TMP_TOOLS)
ALL_API_TOOLS.update(_FIRE_TOOLS)
ALL_API_TOOLS.update(_JINA_TOOLS)
ALL_API_TOOLS.update(_SILICON_TOOLS)
ALL_API_TOOLS.update(_DING_TOOLS)
ALL_API_TOOLS.update(_EMAIL_TOOLS)
ALL_API_TOOLS.update(_FEISHU_TOOLS)
ALL_API_TOOLS.update(_WECHAT_TOOLS)
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/api_tools/base.py
================================================
from typing import Any, Dict, Tuple, Type, Union, Optional, List
from langchain_core.tools import BaseTool, Tool
from loguru import logger
from pydantic import ConfigDict, model_validator, BaseModel, Field
from bisheng_langchain.utils.requests import Requests, RequestsWrapper
class ApiArg(BaseModel):
query: str = Field(description='query to look up in this tool')
class MultArgsSchemaTool(Tool):
def _to_args_and_kwargs(self, tool_input: Union[str, Dict], tool_call_id: Optional[str]) -> Tuple[Tuple, Dict]:
# For backwards compatibility, if run_input is a string,
# pass as a positional argument.
if isinstance(tool_input, str):
return (tool_input,), {}
else:
return (), tool_input
class APIToolBase(BaseModel):
"""Manage tianyancha company client."""
client: Any = Field(default=None, exclude=True) #: :meta private:
async_client: Any = Field(default=None, exclude=True) #: :meta private:
headers: Dict[str, Any] = {}
request_timeout: int = 30
url: str = None
params: Dict[str, Any] = {}
input_key: str = 'keyword'
proxy: Optional[str] = None
args_schema: Type[BaseModel] = ApiArg
model_config = ConfigDict(extra="forbid")
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
timeout = values.get('request_timeout', 30)
if not values.get('client'):
values['client'] = Requests(headers=values.get('headers'), request_timeout=timeout,
proxy=values.get('proxy'))
if not values.get('async_client'):
values['async_client'] = RequestsWrapper(headers=values.get('headers'),
proxy=values.get('proxy'),
request_timeout=timeout)
return values
def run(self, query: str, **kwargs) -> str:
"""Run query through api and parse result."""
if query:
self.params[self.input_key] = query
if kwargs:
self.params.update(kwargs)
if self.params:
param = '&'.join([f'{k}={v}' for k, v in self.params.items()])
url = self.url + '?' + param if '?' not in self.url else self.url + '&' + param
else:
url = self.url
logger.info('api_call url={}', url)
resp = self.client.get(url)
if resp.status_code != 200:
logger.info('api_call_fail res={}', resp.text)
return resp.text[:10000]
async def arun(self, query: str, **kwargs) -> str:
"""Run query through api and parse result."""
if query:
self.params[self.input_key] = query
if kwargs:
self.params.update(kwargs)
if self.params:
param = '&'.join([f'{k}={v}' for k, v in self.params.items()])
url = self.url + '?' + param if '?' not in self.url else self.url + '&' + param
else:
url = self.url
logger.info('api_call url={}', url)
resp = await self.async_client.aget(url)
logger.info(resp[:10000])
return resp[:10000]
@classmethod
def get_api_tool(cls, name, **kwargs: Any) -> BaseTool:
attr_name = name.split('_', 1)[-1]
class_method = getattr(cls, attr_name)
return MultArgsSchemaTool(name=name,
description=class_method.__doc__,
func=class_method(**kwargs).run,
coroutine=class_method(**kwargs).arun,
args_schema=class_method(**kwargs).args_schema)
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/api_tools/firecrawl.py
================================================
import time
from typing import Any
import requests
from pydantic import BaseModel, Field
from bisheng_langchain.gpts.tools.api_tools.base import (MultArgsSchemaTool)
class InputArgs(BaseModel):
target_url: str = Field(description="params target_url")
class FireCrawl(BaseModel):
api_key: str = Field(description="apikey")
base_url: str = Field(description="params base_url")
maxdepth: int = Field(description="params maxDepth")
limit: int = Field(description="params limit")
timeout: int = Field(description="params timeout")
def search_crawl(self, target_url: str) -> str:
"""crawl from firecrawl"""
url = "https://api.firecrawl.dev/v1/crawl"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer " + self.api_key,
}
params = {
"url": target_url,
"maxDepth": self.maxdepth,
"limit": self.limit,
"scrapeOptions": {
"formats": ["markdown"],
},
}
response = requests.post(url, json=params, headers=headers)
if response.status_code != 200:
return f"failed with status code: {response.status_code}, {response.text}"
status_url = response.json().get("url")
if not status_url:
return f"not found url from {response.text}"
start_time = time.time()
while True:
response = requests.get(status_url, headers=headers)
if response.status_code != 200:
return f"failed with status code: {response.status_code}, {response.text}"
data = response.json()
if time.time() - start_time > self.timeout:
return "timeout"
if data["status"] == "completed":
return response.text
elif data["status"] == "failed":
return "failed"
else:
time.sleep(5)
def search_scrape(self, target_url: str) -> str:
"""scrape from firecrawl"""
url = "https://api.firecrawl.dev/v1/scrape"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer " + self.api_key,
}
params = {
"url": target_url,
"formats": ["markdown"],
"timeout": self.timeout,
}
response = requests.post(url, json=params, headers=headers)
return response.text
@classmethod
def get_api_tool(cls, name: str, **kwargs: Any) -> "FireCrawl":
attr_name = name.split("_", 1)[-1]
c = FireCrawl(**kwargs)
class_method = getattr(c, attr_name)
return MultArgsSchemaTool(
name=name,
description=class_method.__doc__,
func=class_method,
args_schema=InputArgs,
)
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/api_tools/flow.py
================================================
from loguru import logger
from pydantic import BaseModel, Field
from typing import Any
from .base import APIToolBase
from .base import MultArgsSchemaTool
from langchain_core.tools import BaseTool
class FlowTools(APIToolBase):
def run(self, query: str) -> str:
"""Run query through api and parse result."""
if query:
self.params[self.input_key] = {
'question': query
}
url = self.url
logger.info('api_call url={}', url)
resp = self.client.post(url, json=self.params)
if resp.status_code != 200:
logger.info('api_call_fail res={}', resp.text)
return resp.text
async def arun(self, query: str) -> str:
"""Run query through api and parse result."""
if query:
self.params[self.input_key] = {
'question': query
}
url = self.url
logger.info('api_call url={}', url)
resp = await self.async_client.apost(url, json=self.params)
logger.info(resp)
return resp
@classmethod
def knowledge_retrieve(cls, collection_id: int = None) -> str:
flow_id = 'c7985115-a9d2-446a-9c55-40b5728ffb52'
url = 'http://192.168.106.120:3002/api/v1/process/{}'.format(flow_id)
input_key = 'inputs'
params = {
'tweaks': {
'ElasticKeywordsSearch-pFFyR': {
'collection_id': collection_id
},
'Milvus-9KIR6': {
'collection_id': collection_id
}
}
}
class InputArgs(BaseModel):
query: str = Field(description='questions to ask')
return cls(url=url, params=params, input_key=input_key, args_schema=InputArgs)
@classmethod
def get_api_tool(cls, name, **kwargs: Any) -> BaseTool:
attr_name = name.split('_', 1)[-1]
class_method = getattr(cls, attr_name)
function_description = kwargs.get('description','')
kwargs.pop('description')
return MultArgsSchemaTool(name=name + '_' +str(kwargs.get('collection_id')),
description=function_description,
func=class_method(**kwargs).run,
coroutine=class_method(**kwargs).arun,
args_schema=class_method(**kwargs).args_schema)
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/api_tools/jina.py
================================================
from typing import Any, Optional
import requests
from pydantic import BaseModel, Field
from bisheng_langchain.gpts.tools.api_tools.base import (APIToolBase,
MultArgsSchemaTool)
class InputArgs(BaseModel):
# jina_api_key: Optional[str] = Field(default=None,description="jina api key")
target_url: Optional[str] = Field(default=None,description="params target_url")
class JinaTool(BaseModel):
jina_api_key: str = Field(default=None,description="jina api key")
def get_markdown(self, target_url: str) -> Any:
"""get url from jina api"""
url = "https://r.jina.ai/" + target_url
headers = None
if self.jina_api_key and len(self.jina_api_key)>0 :
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer " + self.jina_api_key,
}
response = requests.get(url, headers=headers)
return response.text
@classmethod
def get_api_tool(cls, name: str, **kwargs: Any) -> "JinaTool":
attr_name = name.split("_", 1)[-1]
c = JinaTool(jina_api_key=kwargs.get('jina_api_key'))
class_method = getattr(c, attr_name)
return MultArgsSchemaTool(
name=name,
description=class_method.__doc__,
func=class_method,
args_schema=InputArgs,
)
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/api_tools/macro_data.py
================================================
import json
import time
from typing import Any
import httpx
import pandas as pd
import requests
from langchain_core.tools import BaseTool
from pydantic import BaseModel, Field
from .base import MultArgsSchemaTool
class QueryArg(BaseModel):
start_date: str = Field(default='', description='开始月份, 使用YYYY-MM-DD 方式表示', examples=['2023-01-01'])
end_date: str = Field(default='', description='结束月份,使用YYYY-MM-DD 方式表示', examples=['2023-05-01'])
class MacroData(BaseModel):
@classmethod
def china_shrzgm(cls, start_date: str = '', end_date: str = '') -> pd.DataFrame:
"""中国社会融资规模增量月度统计数据。\
返回月份,社会融资规模增量(单位:亿元),\
以及社融分项包括:人民币贷款,外币贷款,委托贷款,\
信托贷款,未贴现银行承兑汇票,企业债券,非金融企业境内股票融资
"""
url = 'https://data.mofcom.gov.cn/datamofcom/front/gnmy/shrzgmQuery'
r = httpx.post(url)
data_json = r.json()
temp_df = pd.DataFrame(data_json)
temp_df.columns = [
'月份',
'其中-未贴现银行承兑汇票',
'其中-委托贷款',
'其中-委托贷款外币贷款',
'其中-人民币贷款',
'其中-企业债券',
'社会融资规模增量',
'其中-非金融企业境内股票融资',
'其中-信托贷款',
]
temp_df = temp_df[
[
'月份',
'社会融资规模增量',
'其中-人民币贷款',
'其中-委托贷款外币贷款',
'其中-委托贷款',
'其中-信托贷款',
'其中-未贴现银行承兑汇票',
'其中-企业债券',
'其中-非金融企业境内股票融资',
]
]
temp_df['社会融资规模增量'] = pd.to_numeric(temp_df['社会融资规模增量'], errors='coerce')
temp_df['其中-人民币贷款'] = pd.to_numeric(temp_df['其中-人民币贷款'], errors='coerce')
temp_df['其中-委托贷款外币贷款'] = pd.to_numeric(temp_df['其中-委托贷款外币贷款'], errors='coerce')
temp_df['其中-委托贷款'] = pd.to_numeric(temp_df['其中-委托贷款'], errors='coerce')
temp_df['其中-信托贷款'] = pd.to_numeric(temp_df['其中-信托贷款'], errors='coerce')
temp_df['其中-未贴现银行承兑汇票'] = pd.to_numeric(temp_df['其中-未贴现银行承兑汇票'], errors='coerce')
temp_df['其中-企业债券'] = pd.to_numeric(temp_df['其中-企业债券'], errors='coerce')
temp_df['其中-非金融企业境内股票融资'] = pd.to_numeric(temp_df['其中-非金融企业境内股票融资'], errors='coerce')
temp_df.sort_values(['月份'], inplace=True)
if start_date and end_date:
start = start_date.split('-')[0] + start_date.split('-')[1]
end = end_date.split('-')[0] + end_date.split('-')[1]
temp_df = temp_df[(temp_df['月份'] >= start) & (temp_df['月份'] <= end)]
temp_df.reset_index(drop=True, inplace=True)
return temp_df.to_markdown()
# 金十数据中心-经济指标-中国-国民经济运行状况-经济状况-中国GDP年率报告
@classmethod
def china_gdp_yearly(cls, start_date: str = '', end_date: str = '') -> pd.DataFrame:
"""中国国内生产总值(GDP)季度统计数据。\
返回当年累计季度,GDP 绝对值(单位:亿元),同比增长(单位:%),\
第一产业 GDP 绝对值,(单位:亿元),第一产业同比增长(单位:%),\
第二产业 GDP 绝对值,(单位:亿元),第二产业同比增长(单位:%),\
第三产业 GDP 绝对值,(单位:亿元),第三产业同比增长(单位:%)
"""
JS_CHINA_GDP_YEARLY_URL = 'https://cdn.jin10.com/dc/reports/dc_chinese_gdp_yoy_all.js?v={}&_={}'
t = time.time()
r = requests.get(JS_CHINA_GDP_YEARLY_URL.format(str(int(round(t * 1000))), str(int(round(t * 1000)) + 90)))
json_data = json.loads(r.text[r.text.find('{'): r.text.rfind('}') + 1])
date_list = [item['date'] for item in json_data['list']]
value_list = [item['datas']['中国GDP年率报告'] for item in json_data['list']]
value_df = pd.DataFrame(value_list)
value_df.columns = json_data['kinds']
value_df.index = pd.to_datetime(date_list)
temp_df = value_df['今值(%)']
url = 'https://datacenter-api.jin10.com/reports/list_v2'
params = {
'max_date': '',
'category': 'ec',
'attr_id': '57',
'_': str(int(round(t * 1000))),
}
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/107.0.0.0 Safari/537.36",
"x-app-id": "rU6QIu7JHe2gOUeR",
"x-csrf-token": "x-csrf-token",
"x-version": "1.0.0",
}
r = requests.get(url, params=params, headers=headers)
temp_se = pd.DataFrame(r.json()['data']['values']).iloc[:, :2]
temp_se.index = pd.to_datetime(temp_se.iloc[:, 0])
temp_se = temp_se.iloc[:, 1]
temp_df = pd.concat([temp_df, temp_se])
temp_df.dropna(inplace=True)
temp_df.sort_index(inplace=True)
temp_df = temp_df.reset_index()
temp_df.columns = ['date', 'value']
# temp_df['date'] = pd.to_datetime(temp_df['date']).dt.date
temp_df['value'] = pd.to_numeric(temp_df['value'])
temp_df = temp_df.drop_duplicates()
if start_date and end_date:
temp_df = temp_df[(temp_df['date'] >= start_date) & (temp_df['date'] <= end_date)]
return temp_df.to_markdown()
@classmethod
def china_cpi(cls, start_date: str = '', end_date: str = '') -> pd.DataFrame:
"""中国居民消费价格指数(CPI,上年同月=100)月度统计数据。\
返回月份,全国当月 CPI,全国当月同比增长,全国当月环比增长,全国当年 CPI 累计值;\
城市当月 CPI,城市当月同比增长,城市当月环比增长,城市当年 CPI 累计值;\
农村当月 CPI,农村当月同比增长,农村当月环比增长,农村当年 CPI 累计值。
"""
url = 'https://datacenter-web.eastmoney.com/api/data/v1/get'
params = {
'columns': 'REPORT_DATE,TIME,NATIONAL_SAME,NATIONAL_BASE,NATIONAL_SEQUENTIAL,NATIONAL_ACCUMULATE,CITY_SAME,CITY_BASE,CITY_SEQUENTIAL,CITY_ACCUMULATE,RURAL_SAME,RURAL_BASE,RURAL_SEQUENTIAL,RURAL_ACCUMULATE',
# noqa
'pageNumber': '1',
'pageSize': '2000',
'sortColumns': 'REPORT_DATE',
'sortTypes': '-1',
'source': 'WEB',
'client': 'WEB',
'reportName': 'RPT_ECONOMY_CPI',
'p': '1',
'pageNo': '1',
'pageNum': '1',
'_': '1669047266881',
}
r = requests.get(url, params=params)
data_json = r.json()
temp_df = pd.DataFrame(data_json['result']['data'])
temp_df.columns = [
'-',
'月份',
'全国-同比增长',
'全国-当月',
'全国-环比增长',
'全国-累计',
'城市-同比增长',
'城市-当月',
'城市-环比增长',
'城市-累计',
'农村-同比增长',
'农村-当月',
'农村-环比增长',
'农村-累计',
]
temp_df = temp_df[
[
'月份',
'全国-当月',
'全国-同比增长',
'全国-环比增长',
'全国-累计',
'城市-当月',
'城市-同比增长',
'城市-环比增长',
'城市-累计',
'农村-当月',
'农村-同比增长',
'农村-环比增长',
'农村-累计',
]
]
temp_df['全国-当月'] = pd.to_numeric(temp_df['全国-当月'], errors='coerce')
temp_df['全国-同比增长'] = pd.to_numeric(temp_df['全国-同比增长'], errors='coerce')
temp_df['全国-环比增长'] = pd.to_numeric(temp_df['全国-环比增长'], errors='coerce')
temp_df['全国-累计'] = pd.to_numeric(temp_df['全国-累计'], errors='coerce')
temp_df['城市-当月'] = pd.to_numeric(temp_df['城市-当月'], errors='coerce')
temp_df['城市-同比增长'] = pd.to_numeric(temp_df['城市-同比增长'], errors='coerce')
temp_df['城市-环比增长'] = pd.to_numeric(temp_df['城市-环比增长'], errors='coerce')
temp_df['城市-累计'] = pd.to_numeric(temp_df['城市-累计'], errors='coerce')
temp_df['农村-当月'] = pd.to_numeric(temp_df['农村-当月'], errors='coerce')
temp_df['农村-同比增长'] = pd.to_numeric(temp_df['农村-同比增长'], errors='coerce')
temp_df['农村-环比增长'] = pd.to_numeric(temp_df['农村-环比增长'], errors='coerce')
temp_df['农村-累计'] = pd.to_numeric(temp_df['农村-累计'], errors='coerce')
if start_date and end_date:
start = start_date.split('-')[0] + '年' + start_date.split('-')[1] + '月份'
end = end_date.split('-')[0] + '年' + end_date.split('-')[1] + '月份'
temp_df = temp_df[(temp_df['月份'] >= start) & (temp_df['月份'] <= end)]
return temp_df.to_markdown()
@classmethod
def china_ppi(cls, start_date: str = '', end_date: str = '') -> pd.DataFrame:
"""中国工业品出厂价格指数(PPI)月度统计数据。返回月份,当月 PPI,当月同比增长,当年 CPI 累计值。"""
url = 'https://datacenter-web.eastmoney.com/api/data/v1/get'
params = {
'columns': 'REPORT_DATE,TIME,BASE,BASE_SAME,BASE_ACCUMULATE',
'pageNumber': '1',
'pageSize': '2000',
'sortColumns': 'REPORT_DATE',
'sortTypes': '-1',
'source': 'WEB',
'client': 'WEB',
'reportName': 'RPT_ECONOMY_PPI',
'p': '1',
'pageNo': '1',
'pageNum': '1',
'_': '1669047266881',
}
r = requests.get(url, params=params)
data_json = r.json()
temp_df = pd.DataFrame(data_json['result']['data'])
temp_df.columns = [
'-',
'月份',
'当月',
'当月同比增长',
'累计',
]
temp_df = temp_df[
[
'月份',
'当月',
'当月同比增长',
'累计',
]
]
temp_df['当月'] = pd.to_numeric(temp_df['当月'], errors='coerce')
temp_df['当月同比增长'] = pd.to_numeric(temp_df['当月同比增长'], errors='coerce')
temp_df['累计'] = pd.to_numeric(temp_df['累计'], errors='coerce')
if start_date and end_date:
start = start_date.split('-')[0] + '年' + start_date.split('-')[1] + '月份'
end = end_date.split('-')[0] + '年' + end_date.split('-')[1] + '月份'
temp_df = temp_df[(temp_df['月份'] >= start) & (temp_df['月份'] <= end)]
return temp_df.to_markdown()
@classmethod
def china_pmi(cls, start_date: str = '', end_date: str = '') -> str:
"""中国 PMI (采购经理人指数)月度统计数据。
返回数据包括:月份制造业 PMI,制造业 PMI 同比增长,非制造业 PMI,非制造业 PMI 同比增长。
"""
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
params = {
"columns": "REPORT_DATE,TIME,MAKE_INDEX,MAKE_SAME,NMAKE_INDEX,NMAKE_SAME",
"pageNumber": "1",
"pageSize": "2000",
"sortColumns": "REPORT_DATE",
"sortTypes": "-1",
"source": "WEB",
"client": "WEB",
"reportName": "RPT_ECONOMY_PMI",
"p": "1",
"pageNo": "1",
"pageNum": "1",
"_": "1669047266881",
}
r = requests.get(url, params=params)
data_json = r.json()
temp_df = pd.DataFrame(data_json["result"]["data"])
temp_df.columns = [
"-",
"月份",
"制造业-指数",
"制造业-同比增长",
"非制造业-指数",
"非制造业-同比增长",
]
temp_df = temp_df[
[
"月份",
"制造业-指数",
"制造业-同比增长",
"非制造业-指数",
"非制造业-同比增长",
]
]
temp_df["制造业-指数"] = pd.to_numeric(temp_df["制造业-指数"], errors="coerce")
temp_df["制造业-同比增长"] = pd.to_numeric(
temp_df["制造业-同比增长"], errors="coerce"
)
temp_df["非制造业-指数"] = pd.to_numeric(temp_df["非制造业-指数"], errors="coerce")
temp_df["非制造业-同比增长"] = pd.to_numeric(
temp_df["非制造业-同比增长"], errors="coerce"
)
if start_date and end_date:
start = start_date.split('-')[0] + '年' + start_date.split('-')[1] + '月份'
end = end_date.split('-')[0] + '年' + end_date.split('-')[1] + '月份'
temp_df = temp_df[(temp_df['月份'] >= start) & (temp_df['月份'] <= end)]
return temp_df.to_markdown()
@classmethod
def china_money_supply(cls, start_date: str = '', end_date: str = '') -> pd.DataFrame:
"""中国货币供应量(M2,M1,M0)月度统计数据。\
返回月份,M2 数量(单位:亿元),M2 同比(单位:%),\
M2 环比(单位:%), M1 数量(单位:亿元),\
M1 同比(单位:%),M1 环比(单位:%), \
M0数量(单位:亿元),M0 同比(单位:%),M0 环比(单位:%)
"""
url = 'https://datacenter-web.eastmoney.com/api/data/v1/get'
params = {
'columns': 'REPORT_DATE,TIME,BASIC_CURRENCY,BASIC_CURRENCY_SAME,BASIC_CURRENCY_SEQUENTIAL,CURRENCY,CURRENCY_SAME,CURRENCY_SEQUENTIAL,FREE_CASH,FREE_CASH_SAME,FREE_CASH_SEQUENTIAL',
# noqa
'pageNumber': '1',
'pageSize': '2000',
'sortColumns': 'REPORT_DATE',
'sortTypes': '-1',
'source': 'WEB',
'client': 'WEB',
'reportName': 'RPT_ECONOMY_CURRENCY_SUPPLY',
'p': '1',
'pageNo': '1',
'pageNum': '1',
'_': '1669047266881',
}
r = requests.get(url, params=params)
data_json = r.json()
temp_df = pd.DataFrame(data_json['result']['data'])
temp_df.columns = [
'-',
'月份',
'货币和准货币(M2)-数量(亿元)',
'货币和准货币(M2)-同比增长',
'货币和准货币(M2)-环比增长',
'货币(M1)-数量(亿元)',
'货币(M1)-同比增长',
'货币(M1)-环比增长',
'流通中的现金(M0)-数量(亿元)',
'流通中的现金(M0)-同比增长',
'流通中的现金(M0)-环比增长',
]
temp_df = temp_df[
[
'月份',
'货币和准货币(M2)-数量(亿元)',
'货币和准货币(M2)-同比增长',
'货币和准货币(M2)-环比增长',
'货币(M1)-数量(亿元)',
'货币(M1)-同比增长',
'货币(M1)-环比增长',
'流通中的现金(M0)-数量(亿元)',
'流通中的现金(M0)-同比增长',
'流通中的现金(M0)-环比增长',
]
]
temp_df['货币和准货币(M2)-数量(亿元)'] = pd.to_numeric(temp_df['货币和准货币(M2)-数量(亿元)'])
temp_df['货币和准货币(M2)-同比增长'] = pd.to_numeric(temp_df['货币和准货币(M2)-同比增长'])
temp_df['货币和准货币(M2)-环比增长'] = pd.to_numeric(temp_df['货币和准货币(M2)-环比增长'])
temp_df['货币(M1)-数量(亿元)'] = pd.to_numeric(temp_df['货币(M1)-数量(亿元)'])
temp_df['货币(M1)-同比增长'] = pd.to_numeric(temp_df['货币(M1)-同比增长'])
temp_df['货币(M1)-环比增长'] = pd.to_numeric(temp_df['货币(M1)-环比增长'])
temp_df['流通中的现金(M0)-数量(亿元)'] = pd.to_numeric(temp_df['流通中的现金(M0)-数量(亿元)'])
temp_df['流通中的现金(M0)-同比增长'] = pd.to_numeric(temp_df['流通中的现金(M0)-同比增长'])
temp_df['流通中的现金(M0)-环比增长'] = pd.to_numeric(temp_df['流通中的现金(M0)-环比增长'])
if start_date and end_date:
start = start_date.split('-')[0] + '年' + start_date.split('-')[1] + '月份'
end = end_date.split('-')[0] + '年' + end_date.split('-')[1] + '月份'
temp_df = temp_df[(temp_df['月份'] >= start) & (temp_df['月份'] <= end)]
return temp_df.to_markdown()
@classmethod
def china_consumer_goods_retail(cls, start_date: str = '', end_date: str = '') -> pd.DataFrame:
"""中国社会消费品零售总额月度统计数据。\
返回月份,当月总额(单位:亿元),同比增长(单位:%),\
环比增长(单位:%),当年累计(单位:亿元),累计同比增长(单位:%)
"""
url = 'https://datacenter-web.eastmoney.com/api/data/v1/get'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
# noqa
}
params = {
'columns': 'REPORT_DATE,TIME,RETAIL_TOTAL,RETAIL_TOTAL_SAME,RETAIL_TOTAL_SEQUENTIAL,RETAIL_TOTAL_ACCUMULATE,RETAIL_ACCUMULATE_SAME',
# noqa
'pageNumber': '1',
'pageSize': '1000',
'sortColumns': 'REPORT_DATE',
'sortTypes': '-1',
'source': 'WEB',
'client': 'WEB',
'reportName': 'RPT_ECONOMY_TOTAL_RETAIL',
'p': '1',
'pageNo': '1',
'pageNum': '1',
'_': '1660718498421',
}
r = requests.get(url, params=params, headers=headers)
data_json = r.json()
temp_df = pd.DataFrame(data_json['result']['data'])
temp_df.columns = [
'-',
'月份',
'当月',
'同比增长',
'环比增长',
'累计',
'累计-同比增长',
]
temp_df = temp_df[
[
'月份',
'当月',
'同比增长',
'环比增长',
'累计',
'累计-同比增长',
]
]
temp_df['当月'] = pd.to_numeric(temp_df['当月'], errors='coerce')
temp_df['同比增长'] = pd.to_numeric(temp_df['同比增长'], errors='coerce')
temp_df['环比增长'] = pd.to_numeric(temp_df['环比增长'], errors='coerce')
temp_df['累计'] = pd.to_numeric(temp_df['累计'], errors='coerce')
temp_df['累计-同比增长'] = pd.to_numeric(temp_df['累计-同比增长'], errors='coerce')
if start_date and end_date:
start = start_date.split('-')[0] + '年' + start_date.split('-')[1] + '月份'
end = end_date.split('-')[0] + '年' + end_date.split('-')[1] + '月份'
temp_df = temp_df[(temp_df['月份'] >= start) & (temp_df['月份'] <= end)]
return temp_df.to_markdown()
@classmethod
def bond_zh_us_rate(cls, start_date: str = "", end_date: str = "") -> str:
"""
本接口返回指定时间段[start_date,end_date]内交易日的中美两国的 2 年、5 年、10 年、30 年、10 年-2 年收益率数据。
start_date表示起始日期,end_date表示结束日期,日期格式例如 2024-04-07
"""
url = "https://datacenter.eastmoney.com/api/data/get"
params = {
"type": "RPTA_WEB_TREASURYYIELD",
"sty": "ALL",
"st": "SOLAR_DATE",
"sr": "-1",
"token": "894050c76af8597a853f5b408b759f5d",
"p": "1",
"ps": "500",
"pageNo": "1",
"pageNum": "1",
"_": "1615791534490",
}
r = requests.get(url, params=params)
data_json = r.json()
total_page = data_json["result"]["pages"]
big_df = pd.DataFrame()
for page in range(1, total_page + 1):
params = {
"type": "RPTA_WEB_TREASURYYIELD",
"sty": "ALL",
"st": "SOLAR_DATE",
"sr": "-1",
"token": "894050c76af8597a853f5b408b759f5d",
"p": page,
"ps": "500",
"pageNo": page,
"pageNum": page,
"_": "1615791534490",
}
r = requests.get(url, params=params)
data_json = r.json()
# 时间过滤
if start_date and end_date:
temp_data = []
for item in data_json["result"]["data"]:
if start_date <= item["SOLAR_DATE"].split(" ")[0] <= end_date:
temp_data.append(item)
elif start_date > item["SOLAR_DATE"].split(" ")[0]:
break
else:
continue
else:
temp_data = data_json["result"]["data"]
temp_df = pd.DataFrame(temp_data)
for col in temp_df.columns:
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
temp_df[col] = pd.to_numeric(temp_df[col], errors='coerce')
if big_df.empty:
big_df = temp_df
else:
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
big_df.rename(
columns={
"SOLAR_DATE": "日期",
"EMM00166462": "中国国债收益率5年",
"EMM00166466": "中国国债收益率10年",
"EMM00166469": "中国国债收益率30年",
"EMM00588704": "中国国债收益率2年",
"EMM01276014": "中国国债收益率10年-2年",
"EMG00001306": "美国国债收益率2年",
"EMG00001308": "美国国债收益率5年",
"EMG00001310": "美国国债收益率10年",
"EMG00001312": "美国国债收益率30年",
"EMG01339436": "美国国债收益率10年-2年",
"EMM00000024": "中国GDP年增率",
"EMG00159635": "美国GDP年增率",
},
inplace=True,
)
big_df = big_df[
[
"日期",
"中国国债收益率2年",
"中国国债收益率5年",
"中国国债收益率10年",
"中国国债收益率30年",
"中国国债收益率10年-2年",
"中国GDP年增率",
"美国国债收益率2年",
"美国国债收益率5年",
"美国国债收益率10年",
"美国国债收益率30年",
"美国国债收益率10年-2年",
"美国GDP年增率",
]
]
big_df = big_df.drop(["中国GDP年增率", "美国GDP年增率"], axis=1)
big_df["日期"] = pd.to_datetime(big_df["日期"], errors="coerce")
big_df["中国国债收益率2年"] = pd.to_numeric(big_df["中国国债收益率2年"], errors="coerce")
big_df["中国国债收益率5年"] = pd.to_numeric(big_df["中国国债收益率5年"], errors="coerce")
big_df["中国国债收益率10年"] = pd.to_numeric(big_df["中国国债收益率10年"], errors="coerce")
big_df["中国国债收益率30年"] = pd.to_numeric(big_df["中国国债收益率30年"], errors="coerce")
big_df["中国国债收益率10年-2年"] = pd.to_numeric(big_df["中国国债收益率10年-2年"], errors="coerce")
# big_df["中国GDP年增率"] = pd.to_numeric(big_df["中国GDP年增率"], errors="coerce")
big_df["美国国债收益率2年"] = pd.to_numeric(big_df["美国国债收益率2年"], errors="coerce")
big_df["美国国债收益率5年"] = pd.to_numeric(big_df["美国国债收益率5年"], errors="coerce")
big_df["美国国债收益率10年"] = pd.to_numeric(big_df["美国国债收益率10年"], errors="coerce")
big_df["美国国债收益率30年"] = pd.to_numeric(big_df["美国国债收益率30年"], errors="coerce")
big_df["美国国债收益率10年-2年"] = pd.to_numeric(big_df["美国国债收益率10年-2年"], errors="coerce")
# big_df["美国GDP年增率"] = pd.to_numeric(big_df["美国GDP年增率"], errors="coerce")
big_df.sort_values("日期", inplace=True)
big_df.set_index(["日期"], inplace=True)
big_df = big_df[pd.to_datetime(start_date):]
big_df.reset_index(inplace=True)
big_df["日期"] = pd.to_datetime(big_df["日期"]).dt.date
return big_df.to_markdown()
@classmethod
def get_api_tool(cls, name: str, **kwargs: Any) -> BaseTool:
attr_name = name.split('_', 1)[-1]
class_method = getattr(cls, attr_name)
return MultArgsSchemaTool(name=name, description=class_method.__doc__, func=class_method, args_schema=QueryArg)
if __name__ == '__main__':
tmp_start_date = '2024-01-01'
tmp_end_date = '2024-01-03'
# start_date = ''
# end_date = ''
# print(MacroData.china_ppi(start_date=start_date, end_date=end_date))
print(MacroData.china_shrzgm(start_date=tmp_start_date, end_date=tmp_end_date))
# print(MacroData.china_consumer_goods_retail(start_date=start_date, end_date=end_date))
# print(MacroData.china_cpi(start_date=start_date, end_date=end_date))
# print(MacroData.china_pmi(start_date=start_date, end_date=end_date))
# print(MacroData.china_money_supply(start_date=start_date, end_date=end_date))
# print(MacroData.china_gdp_yearly(start_date=start_date, end_date=end_date))
# print(MacroData.bond_zh_us_rate(start_date=tmp_start_date, end_date=tmp_end_date))
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/api_tools/openapi.py
================================================
from typing import Any, Optional
from langchain_core.tools import BaseTool
from loguru import logger
from bisheng_langchain.utils.openapi import convert_openapi_field_value
from .base import APIToolBase, MultArgsSchemaTool
class OpenApiTools(APIToolBase):
api_key: Optional[str] = None
api_location: Optional[str] = None
parameter_name: Optional[str] = None
def get_real_path(self, path_params: dict | None):
path = self.params['path']
if path_params:
path = path.format(**path_params)
return self.url + path
def get_request_method(self):
return self.params['method'].lower()
def get_params_json(self, **kwargs):
params_define = {}
for one in self.params['parameters']:
params_define[one['name']] = one
path_params = {}
params = {}
json_data = {}
for k, v in kwargs.items():
if params_define.get(k):
if params_define[k]['in'] == 'query':
field_type = params_define[k]['schema']['type']
params[k] = convert_openapi_field_value(v, field_type)
elif params_define[k]['in'] == 'path':
path_params[k] = v
else:
field_type = params_define[k]['schema']['type']
json_data[k] = convert_openapi_field_value(v, field_type)
else:
params[k] = v
# if ('api_location' in self.params and self.params['api_location'] == "query") or \
# (hasattr(self, 'api_location') and self.api_location == "query"):
# if self.parameter_name:
# params.update({self.parameter_name:self.api_key})
# elif self.params['parameter_name']:
# params.update({self.params['parameter_name']:self.api_key})
api_location = self.params.get('api_location')
if (api_location == 'query') or (hasattr(self, 'api_location')
and self.api_location == 'query'):
parameter_name = getattr(self, 'parameter_name',
None) or self.params.get('parameter_name')
if parameter_name:
params.update({parameter_name: self.api_key})
return params, json_data, path_params
def parse_args_schema(self):
args_schema = {
"type": "object",
"properties": {},
"required": []
}
params = self.params['parameters']
for one in params:
if one.get('required'):
args_schema['required'].append(one['name'])
field_type = one['schema']['type']
if field_type in ['number', 'integer', 'string', 'boolean']:
field_info = {
"type": field_type,
"description": one['description']
}
elif field_type == 'array':
field_info = {
"type": field_type,
"items": one['schema'].get('items', {}).get('type', 'string'),
"description": one['description']
}
elif field_type in {'object', 'dict'}:
field_info = {
"type": "object",
"description": one['description'],
"properties": {}
}
for param in one['schema']['properties'].keys():
field_type = one['schema']['properties'][param]['type']
if field_type in ['number', 'integer', 'string', 'boolean']:
object_field_info = {
"type": field_type,
"description": one['description']
}
elif field_type == 'array':
object_field_info = {
"type": field_type,
"items": one['schema'].get('items', {}).get('type', 'string'),
"description": one['description']
}
else:
object_field_info = {
"type": field_type,
"description": one['description']
}
field_info["properties"][param] = object_field_info
else:
raise Exception(f'schema type is not support: {field_type}')
args_schema[one['name']] = field_info
return args_schema
def run(self, **kwargs) -> str:
"""Run query through api and parse result."""
extra = {}
if 'proxy' in kwargs:
extra['proxy'] = kwargs.pop('proxy')
params, json_data, path_params = self.get_params_json(**kwargs)
path = self.get_real_path(path_params)
logger.info('api_call url={}', path)
method = self.get_request_method()
if method == 'get':
resp = self.client.get(path, params=params, **extra)
elif method == 'post':
resp = self.client.post(path, params=params, json=json_data, **extra)
elif method == 'put':
resp = self.client.put(path, params=params, json=json_data, **extra)
elif method == 'delete':
resp = self.client.delete(path, params=params, json=json_data, **extra)
else:
raise Exception(f'http method is not support: {method}')
if resp.status_code != 200:
logger.info(f'api_call_fail code={resp.status_code} res={resp.text}')
raise Exception(f'api_call_fail: {resp.status_code} {resp.text}')
return resp.text
async def arun(self, **kwargs) -> str:
"""Run query through api and parse result."""
extra = {}
if 'proxy' in kwargs:
extra['proxy'] = kwargs.pop('proxy')
params, json_data, path_params = self.get_params_json(**kwargs)
path = self.get_real_path(path_params)
logger.info('api_call url={} params={}', path, params)
method = self.get_request_method()
if method == 'get':
resp = await self.async_client.aget(path, params=params, **extra)
elif method == 'post':
resp = await self.async_client.apost(path, params=params, json=json_data, **extra)
elif method == 'put':
resp = await self.async_client.aput(path, params=params, json=json_data, **extra)
elif method == 'delete':
resp = await self.async_client.adelete(path, params=params, json=json_data, **extra)
else:
raise Exception(f'http method is not support: {method}')
return resp
@classmethod
def get_api_tool(cls, name, **kwargs: Any) -> BaseTool:
description = kwargs.pop('description', '')
obj = cls(**kwargs)
return MultArgsSchemaTool(name=name,
description=description,
func=obj.run,
coroutine=obj.arun,
args_schema=obj.parse_args_schema())
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/api_tools/silicon_flow.py
================================================
from typing import Any, Optional
import requests
from pydantic import BaseModel, Field
from bisheng_langchain.gpts.tools.api_tools.base import (APIToolBase,
MultArgsSchemaTool)
class InputArgs(BaseModel):
prompt: str = Field(description="text to image prompt ")
negative_prompt: Optional[str] = Field(default=None, description="text to image negative_prompt")
class SiliconFlow(APIToolBase):
siliconflow_api_key: str = Field(description="params api key")
def stable_diffusion(self, negative_prompt: str = "", prompt: str = "") -> str:
"""silicon stable diffusion api"""
url = "https://api.siliconflow.cn/v1/images/generations"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer " + self.siliconflow_api_key,
}
params = {
"model": "stabilityai/stable-diffusion-3-5-large",
"prompt": prompt,
"negative_prompt": negative_prompt,
}
response = requests.post(url, json=params, headers=headers)
return response.text
def flux(self, prompt: str) -> str:
"""silicon flux api"""
url = "https://api.siliconflow.cn/v1/images/generations"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer " + self.siliconflow_api_key,
}
params = {
"model": "black-forest-labs/FLUX.1-pro",
"prompt": prompt,
}
response = requests.post(url, json=params, headers=headers)
return response.text
@classmethod
def get_api_tool(cls, name: str, **kwargs: Any) -> "SiliconFlow":
attr_name = name.split("_", 1)[-1]
c = SiliconFlow(**kwargs)
class_method = getattr(c, attr_name)
return MultArgsSchemaTool(
name=name,
description=class_method.__doc__,
func=class_method,
args_schema=InputArgs,
)
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/api_tools/sina.py
================================================
"""tianyancha api"""
from __future__ import annotations
import json
import re
from datetime import datetime
from typing import List, Type, Optional
from loguru import logger
from pydantic import BaseModel, Field
from .base import APIToolBase
asciiPattern = re.compile(r'[A-Z0-9* ]')
# 实时数据Class
class Stock(BaseModel):
name: str
todayStart: float
yesterdayEnd: float
current: float
changeAmount: float
changeRate: float
vol: float
turnover: float
highest: float
lowest: float
buyPercent: float
def __init__(self,
name,
todayStart,
yesterdayEnd,
current,
highest='0',
lowest='0',
vol='0',
turnover='0'):
super().__init__(
name=name,
todayStart=float(todayStart),
yesterdayEnd=float(yesterdayEnd),
current=float(current),
highest=float(highest),
lowest=float(lowest),
changeAmount=round(float(current) - float(yesterdayEnd), 3),
changeRate=round((float(current) - float(yesterdayEnd)) / float(yesterdayEnd) * 100,
3),
vol=float(vol),
turnover=float(turnover),
buyPercent=0.0,
)
self.buyPercent = 0.0 # 买卖盘五档委比
class StockArg(BaseModel):
prefix: str = Field(
description='前缀。如果是"stock_symbol"传入的为股票代码,则需要传入s_;\
如果"stock_symbol"传入的为指数代码,则为空。',
default='',
)
stock_exchange: str = Field(
description='交易所简写。股票上市的交易所,或者发布行情指数的交易所。可选项有"sh"(上海证券交易所)、" sz"( 深圳证券交易所)、"bj"( 北京证券交易所)',
)
stock_symbol: str = Field(description="""6位数字的股票或者指数代码。
参考信息:
- 如果问题中未给出,可能需要上网查询。
- 上交所股票通常以 6 开头,深交所股票通常以 0、3 开头,北交所股票通常以 8 开头。
- 上交所行情指数通常以 000 开头,深交所指数通常以 399 开头。同一个指数可能会同时在两个交易所发布,例如沪深 300 有"sh000300"和"sz399300"两个代码。""")
stockPattern = re.compile(
r'var hq_str_s[hz]\d{6}="([^,"]+),([^,"]+),([^,"]+),([^,"]+),([^,"]+),([^,"]+),([^,"]+),([^,"]+),([^,"]+),([^,"]+),[^"]+";'
)
kLinePattern = re.compile(r'var _s[hz]\d{6}_\d+_\d+=\((\[.*?\])\)')
# 计算买卖委比
class StockInfo(APIToolBase):
'sina stock information'
args_schema: Type[BaseModel] = StockArg
def validate_stockNumber(self, stocks: List[str]):
stockList = []
for stockNumber in stocks:
if len(stockNumber) == 8:
# 8位长度的代码必须以sh或者sz开头,后面6位是数字
if (stockNumber.startswith('sh')
or stockNumber.startswith('sz')) and stockNumber[2:8].isdecimal():
stockList.append(stockNumber)
elif len(stockNumber) == 6:
# 6位长度的代码必须全是数字
if stockNumber.isdecimal():
# 0开头自动补sz,6开头补sh,3开头补sz,否则无效
if stockNumber.startswith('0'):
stockList.append('sz' + stockNumber)
elif stockNumber.startswith('6'):
stockList.append('sh' + stockNumber)
elif stockNumber.startswith('3'):
stockList.append('sz' + stockNumber)
elif stockNumber == 'sh':
stockList.append('sh000001')
elif stockNumber == 'sz':
stockList.append('sz399001')
elif stockNumber == 'zx':
stockList.append('sz399005')
elif stockNumber == 'cy':
stockList.append('sz399006')
elif stockNumber == '300':
stockList.append('sh000300')
return list(map(lambda x: f's_{x}', stockList))
def devideStock(self, content: str) -> List[Stock]:
match = stockPattern.search(content)
stock = []
if match:
while match:
stock.append(
Stock(match.group(1), match.group(2), match.group(3), match.group(4),
match.group(5), match.group(6), match.group(9), match.group(10)))
match = stockPattern.search(content, match.end())
else:
stock = [content]
return stock
def run(self, **kwargs):
prefix = 's_' if kwargs.get('prefix', '') == 's_' else ''
stock_symbol = kwargs.get('stock_symbol', '')
stock_exchange = kwargs.get('stock_exchange', '')
stock_number = ''.join([prefix, stock_exchange, stock_symbol])
if self.input_key == 'kLine':
date_format = '%Y-%m-%d'
date = kwargs.get('date')
date_obj = datetime.strptime(date, date_format)
ts = int(datetime.timestamp(date_obj) * 1000)
stock = f'{stock_number}_240_{ts}'
count = datetime.today() - date_obj
url = self.url.format(stockName=stock_number, stock=stock, count=count.days)
resp = self.client.get(url)
if resp.status_code != 200:
logger.info('api_call_fail res={}', resp.text)
k_data = resp.text
k_data = kLinePattern.search(k_data)
if not k_data:
return '{}'
data_array = json.loads(k_data.group(1))
for item in data_array:
if item.get('day') == date:
return json.dumps(item)
return '{}'
resp = super().run(query=stock_number)
stock = self.devideStock(resp)[0]
if isinstance(stock, Stock):
return json.dumps(stock.__dict__, ensure_ascii=False)
else:
return stock
async def arun(self, **kwargs) -> str:
prefix = 's_' if kwargs.get('prefix', '') == 's_' else ''
stock_symbol = kwargs.get('stock_symbol', '')
stock_exchange = kwargs.get('stock_exchange', '')
stock_number = ''.join([prefix, stock_exchange, stock_symbol])
if self.input_key == 'kLine':
date_format = '%Y-%m-%d'
date = kwargs.get('date')
date_obj = datetime.strptime(date, date_format)
ts = int(datetime.timestamp(date_obj) * 1000)
stock = f'{stock_number}_240_{ts}'
count = datetime.today() - date_obj
url = self.url.format(stockName=stock_number, stock=stock, count=count.days)
k_data = await self.async_client.aget(url)
k_data = kLinePattern.search(k_data)
if not k_data:
return '{}'
data_array = json.loads(k_data.group(1))
for item in data_array:
if item.get('day') == date:
return json.dumps(item)
return '{}'
else:
resp = await super().arun(query=stock_number)
stock = self.devideStock(resp)[0]
if isinstance(stock, Stock):
return json.dumps(stock.__dict__, ensure_ascii=False)
else:
return stock
@classmethod
def realtime_info(cls, proxy: Optional[str] = None) -> StockInfo:
"""查询中国A股(沪深北交易所)股票或指数的实时行情数据,返回收盘价、涨跌额、涨跌幅、成交量、成交额"""
url = 'https://hq.sinajs.cn'
input_key = 'list'
headers = {'Referer': 'https://finance.sina.com.cn'}
return cls(url=url, input_key=input_key, headers=headers, proxy=proxy)
@classmethod
def history_KLine(cls, proxy: Optional[str] = None, ) -> StockInfo:
"""查询中国A股(沪深北交易所)股票或指数的的历史行情数据,返回时间、开盘价、最高价、最低价、收盘价、成交量(股)"""
url = 'https://quotes.sina.cn/cn/api/jsonp_v2.php/var%20_{stock}=/CN_MarketDataService.getKLineData?symbol={stockName}&scale=240&ma=no&datalen={count}' # noqa
input_key = 'kLine'
header = {'Referer': 'https://finance.sina.com.cn'}
class stockK(BaseModel):
stock_symbol: str = Field(description="""6位数字的股票或者指数代码。
参考信息:
- 如果问题中未给出,可能需要上网查询。
- 上交所股票通常以 6 开头,深交所股票通常以 0、3 开头,北交所股票通常以 8 开头。
- 上交所行情指数通常以 000 开头,深交所指数通常以 399 开头。同一个指数可能会同时在两个交易所发布,例如沪深 300 有"sh000300"和"sz399300"两个代码。""")
stock_exchange: str = Field(
description=
'交易所简写。股票上市的交易所,或者发布行情指数的交易所。可选项有"sh"(上海证券交易所)、" sz"( 深圳证券交易所)、"bj"( 北京证券交易所)', )
date: str = Field(description='需要查询的时间,按照”2024-03-26“格式,传入日期')
return cls(url=url, input_key=input_key, headers=header, args_schema=stockK, proxy=proxy)
# @classmethod
# def history_KLine(cls, stockid: str) -> StockInfo:
# url = 'http://money.finance.sina.com.cn/quotes_service/api/json_v2.php/CN_MarketData.getKLineData'
# input_key = 'list'
# header = {'Referer': 'http://finance.sina.com.cn'}
# return cls(url=url, input_key=input_key, header=header)
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/api_tools/tianyancha.py
================================================
"""tianyancha api"""
from __future__ import annotations
from typing import Any, Dict, Type, List, Optional
from pydantic import model_validator, BaseModel, Field
from bisheng_langchain.utils.requests import Requests, RequestsWrapper
from .base import APIToolBase
class InputArgs(BaseModel):
"""args_schema"""
query: str = Field(description='搜索关键字(公司名称、公司id、注册号或社会统一信用代码)')
class CompanyInfo(APIToolBase):
"""Manage tianyancha company client."""
api_key: str = None
args_schema: Type[BaseModel] = InputArgs
@model_validator(mode='before')
@classmethod
def build_header(cls, values: Dict[str, Any]) -> Dict[str, Any]:
"""Build headers that were passed in."""
if not values.get('api_key'):
raise ValueError('Parameters api_key should be specified give.')
headers = values.get('headers', {})
headers.update({'Authorization': values['api_key']})
values['headers'] = headers
return values
@model_validator(mode='before')
@classmethod
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that api key and python package exists in environment."""
timeout = values.get('request_timeout', 30)
if not values.get('client'):
values['client'] = Requests(headers=values['headers'], request_timeout=timeout, proxy=values.get('proxy'))
if not values.get('async_client'):
values['async_client'] = RequestsWrapper(headers=values['headers'],
proxy=values.get('proxy'),
request_timeout=timeout)
return values
@classmethod
def search_company(cls, api_key: str, proxy: Optional[str] = None, pageNum: int = 1,
pageSize: int = 20) -> CompanyInfo:
"""可以通过关键词获取企业列表,企业列表包括公司名称或ID、类型、成立日期、经营状态、统一社会信用代码等字段的详细信息"""
url = 'http://open.api.tianyancha.com/services/open/search/2.0'
input_key = 'word'
params = {}
params['pageSize'] = pageSize
params['pageNum'] = pageNum
return cls(url=url, api_key=api_key, proxy=proxy, input_key=input_key, params=params)
@classmethod
def get_company_baseinfo(cls, api_key: str, proxy: Optional[str] = None) -> CompanyInfo:
"""可以通过公司名称或ID获取企业基本信息,企业基本信息包括公司名称或ID、类型、成立日期、经营状态、注册资本、法人、工商注册号、统一社会信用代码、组织机构代码、纳税人识别号等字段信息"""
url = 'http://open.api.tianyancha.com/services/open/ic/baseinfo/normal'
input_key = 'keyword'
params = {}
return cls(url=url, api_key=api_key, input_key=input_key, params=params, proxy=proxy)
@classmethod
def ip_rights(cls, api_key: str, proxy: Optional[str] = None) -> CompanyInfo:
"""可以通过公司名称或ID获取包含商标、专利、作品著作权、软件著作权、网站备案等维度的相关信息"""
url = 'http://open.api.tianyancha.com/services/open/cb/ipr/3.0'
input_key = 'keyword'
return cls(url=url, api_key=api_key, input_key=input_key, params={}, proxy=proxy)
@classmethod
def judicial_risk(cls, api_key: str, proxy: Optional[str] = None) -> CompanyInfo:
"""可以通过公司名称或ID获取包含法律诉讼、法院公告、开庭公告、失信人、被执行人、立案信息、送达公告等维度的相关信息"""
url = 'http://open.api.tianyancha.com/services/open/cb/judicial/2.0'
return cls(url=url, api_key=api_key, proxy=proxy)
@classmethod
def ic_info(cls, api_key: str, proxy: Optional[str] = None, ) -> CompanyInfo:
"""可以通过公司名称或ID获取包含企业基本信息、主要人员、股东信息、对外投资、分支机构等维度的相关信息"""
url = 'http://open.api.tianyancha.com/services/open/cb/ic/2.0'
return cls(url=url, api_key=api_key, proxy=proxy)
@classmethod
def law_suit_case(cls, api_key: str, proxy: Optional[str] = None, pageSize: int = 20,
pageNum: int = 1) -> CompanyInfo:
"""可以通过公司名称或ID获取企业法律诉讼信息,法律诉讼包括案件名称、案由、案件身份、案号等字段的详细信息"""
url = 'http://open.api.tianyancha.com/services/open/jr/lawSuit/3.0'
params = {}
params['pageSize'] = pageSize
params['pageNum'] = pageNum
return cls(url=url, api_key=api_key, params=params, proxy=proxy)
@classmethod
def company_change_info(cls,
api_key: str,
proxy: Optional[str] = None,
pageSize: int = 20,
pageNum: int = 1) -> CompanyInfo:
"""可以通过公司名称或ID获取企业变更记录,变更记录包括工商变更事项、变更前后信息等字段的详细信息"""
url = 'http://open.api.tianyancha.com/services/open/ic/changeinfo/2.0'
params = {}
params['pageSize'] = pageSize
params['pageNum'] = pageNum
return cls(url=url, api_key=api_key, params=params, proxy=proxy)
@classmethod
def company_holders(cls, api_key: str, proxy: Optional[str] = None, pageSize: int = 20,
pageNum: int = 1) -> CompanyInfo:
"""可以通过公司名称或ID获取企业股东信息,股东信息包括股东名、出资比例、出资金额、股东总数等字段的详细信息"""
url = 'http://open.api.tianyancha.com/services/open/ic/holder/2.0'
params = {}
params['pageSize'] = pageSize
params['pageNum'] = pageNum
return cls(url=url, api_key=api_key, params=params, proxy=proxy)
@classmethod
def all_companys_by_company(cls, api_key: str, proxy: Optional[str] = None, pageSize: int = 20, pageNum: int = 1):
"""可以通过公司名称和人名获取企业人员的所有相关公司,包括其担任法人、股东、董监高的公司信息"""
url = 'http://open.api.tianyancha.com/services/v4/open/allCompanys'
input_key = 'humanName'
params = {}
params['pageSize'] = pageSize
params['pageNum'] = pageNum
class InputArgs(BaseModel):
"""args_schema"""
query: str = Field(description='human who you want to search')
name: str = Field(description='company name which human worked')
return cls(url=url,
api_key=api_key,
proxy=proxy,
params=params,
input_key=input_key,
args_schema=InputArgs)
@classmethod
def riskinfo(cls, api_key: str, proxy: Optional[str] = None, ) -> CompanyInfo:
"""可以通过关键字(公司名称、公司id、注册号或社会统一信用代码)获取企业相关天眼风险列表,包括企业自身/周边/预警风险信息。"""
url = 'http://open.api.tianyancha.com/services/open/risk/riskInfo/2.0'
return cls(url=url, api_key=api_key, proxy=proxy)
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/bing_search/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/bing_search/self_arxiv.py
================================================
"""Util that calls Arxiv."""
import logging
from langchain_community.utilities.arxiv import ArxivAPIWrapper
logger = logging.getLogger(__name__)
class ArxivAPIWrapperSelf(ArxivAPIWrapper):
def run(self, query: str) -> str:
"""
Performs an arxiv search and A single string
with the publish date, title, authors, and summary
for each article separated by two newlines.
If an error occurs or no documents found, error text
is returned instead. Wrapper for
https://lukasschwab.me/arxiv.py/index.html#Search
Args:
query: a plaintext search query
"""
try:
if self.is_arxiv_identifier(query):
results = self.arxiv_search(
id_list=query.split(),
max_results=self.top_k_results,
).results()
else:
results = self.arxiv_search( # type: ignore
query[: self.ARXIV_MAX_QUERY_LENGTH], max_results=self.top_k_results
).results()
except self.arxiv_exceptions as ex:
return f"Arxiv exception: {ex}"
docs = [
f"Published: {result.updated.date()}\n"
f"Title: {result.title}\n"
f"Authors: {', '.join(a.name for a in result.authors)}\n"
f"Summary: {result.summary}\n"
f"pdf_url: {result.pdf_url}"
for result in results
]
if docs:
return "\n\n".join(docs)[: self.doc_content_chars_max]
else:
return "No good Arxiv Result was found"
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/bing_search/tool.py
================================================
"""Tool for the Bing search API."""
from typing import Optional, Type
from pydantic import BaseModel, Field
from langchain_community.utilities.bing_search import BingSearchAPIWrapper
from langchain_core.callbacks import CallbackManagerForToolRun
from langchain_core.tools import BaseTool
class BingSearchInput(BaseModel):
query: str = Field(description="query to look up in Bing search")
class BingSearchRun(BaseTool):
"""Tool that queries the Bing search API."""
name: str = "bing_search"
description: str = (
"A wrapper around Bing Search. "
"Useful for when you need to answer questions about current events. "
"Input should be a search query."
)
args_schema: Type[BaseModel] = BingSearchInput
api_wrapper: BingSearchAPIWrapper
def _run(
self,
query: str,
run_manager: Optional[CallbackManagerForToolRun] = None,
) -> str:
"""Use the tool."""
return self.api_wrapper.run(query)
class BingSearchResults(BaseTool):
"""Tool that queries the Bing Search API and gets back json."""
name: str = "bing_search"
description: str = (
"A wrapper around Bing Search. "
"Useful for when you need to answer questions about current events. "
"Input should be a search query. Output is a JSON array of the query results"
)
num_results: int = 5
args_schema: Type[BaseModel] = BingSearchInput
api_wrapper: BingSearchAPIWrapper
def _run(
self,
query: str,
run_manager: Optional[CallbackManagerForToolRun] = None,
) -> str:
"""Use the tool."""
return str(self.api_wrapper.results(query, self.num_results))
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/calculator/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/calculator/tool.py
================================================
import math
from math import *
import sympy
from pydantic import BaseModel, Field
from langchain.tools import tool
from sympy import *
class CalculatorInput(BaseModel):
expression: str = Field(
description="The input to this tool should be a mathematical expression using only Python's built-in mathematical operators.",
examples=['200*7'],
)
@tool("calculator", args_schema=CalculatorInput)
def calculator(expression):
"""Useful to perform any mathematical calculations,
like sum, minus, multiplication, division, etc
"""
try:
return eval(expression)
except SyntaxError:
return "Error: Invalid syntax in mathematical expression"
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/code_interpreter/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/code_interpreter/base_executor.py
================================================
from abc import ABC, abstractmethod
from datetime import timedelta
from typing import Any
from loguru import logger
from minio import Minio
class BaseExecutor(ABC):
def __init__(self, minio: dict, **kwargs):
self.minio = minio
# 将代码生成的文件同步到本地的路径
self.local_sync_path = kwargs.get('local_sync_path', None)
@abstractmethod
def run(self, code: str) -> Any:
raise NotImplementedError()
def upload_minio(
self,
object_name: str,
file_path,
) -> str:
# 初始化minio
if not self.minio:
return ""
minio_client = Minio(
endpoint=self.minio.get('endpoint'),
access_key=self.minio.get('access_key'),
secret_key=self.minio.get('secret_key'),
secure=self.minio.get('schema') or self.minio.get('secure'),
cert_check=self.minio.get('cert_check'),
)
minio_share = Minio(
endpoint=self.minio.get('sharepoint'),
access_key=self.minio.get('access_key'),
secret_key=self.minio.get('secret_key'),
secure=self.minio.get('share_schema', False),
cert_check=self.minio.get('share_cert_check', False),
)
bucket = self.minio.get('tmp_bucket', 'tmp-dir')
logger.debug(
'upload_file obj={} bucket={} file_path={}',
object_name,
bucket,
file_path,
)
minio_client.fput_object(
bucket_name=bucket,
object_name=object_name,
file_path=file_path,
)
return minio_share.presigned_get_object(
bucket_name=bucket,
object_name=object_name,
expires=timedelta(days=7),
)
def close(self) -> None:
pass
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/code_interpreter/e2b_executor.py
================================================
import base64
import os
import tempfile
import uuid
from typing import List
from e2b.sandbox.filesystem.filesystem import WriteEntry, EntryInfo, FileType
from e2b_code_interpreter import Sandbox, Result
from bisheng_langchain.gpts.tools.code_interpreter.base_executor import BaseExecutor
class E2bCodeExecutor(BaseExecutor):
def __init__(self, minio: dict, api_key: str, domain: str = None, timeout: int = 300,
file_list: list[WriteEntry] = None, keep_sandbox: bool = False, **kwargs):
"""
timeout: Create sandbox with and keep it running for 300 seconds
"""
super().__init__(minio, **kwargs)
self.minio = minio
self.api_key = api_key
self.domain = domain
self.timeout = timeout
self.file_list = file_list
self.keep_sandbox = keep_sandbox # 是否保持一个sandbox, 默认只有在执行的时候才创建一个沙盒
self.sandbox_file_cache = {} # 缓存已经下载过的文件,避免重复下载
if self.file_list:
new_file_list = []
for one in self.file_list:
with open(one.data, 'rb') as f:
new_file_list.append({
"path": one.path,
"data": f.read()
})
self.file_list = new_file_list
self.sandbox = None
if self.keep_sandbox:
self.init_sandbox()
@property
def description(self) -> str:
return "A code interpreter that can execute python code. Input should be a valid python code. If you have any files outputted write them to `output/` relative to the execution path."
def init_sandbox(self):
if not self.sandbox:
self.sandbox = Sandbox(domain=self.domain, api_key=self.api_key, timeout=self.timeout)
self.sandbox.files.make_dir("output") # 确保output目录存在
if self.file_list:
self.sandbox.files.write(self.file_list)
# 初始化缓存信息
files_info = self.sandbox.files.list("./")
for file in files_info:
self.sandbox_file_cache[file.path] = file
def run(self, code: str):
"""
Execute code in the E2B Code Interpreter sandbox.
:param code: The code to execute.
:return: The result of the code execution.
"""
# need to keep the sandbox, then reuse the existing one and do not close it
if self.keep_sandbox:
return self.run_code_with_one_sandbox(code)
self.init_sandbox()
try:
execution = self.sandbox.run_code(code)
results, file_list = self.parse_results(execution.results)
return {
"results": results,
"stdout": execution.logs.stdout,
"stderr": execution.logs.stderr,
"error": execution.error,
"file_list": file_list,
}
finally:
self.close()
def run_code_with_one_sandbox(self, code: str) -> dict:
"""
Execute code in the E2B Code Interpreter sandbox.
:param code: The code to execute.
:return: The result of the dict.
"""
if self.sandbox is None:
raise RuntimeError('Sandbox is destroyed.')
execution = self.sandbox.run_code(code)
results, file_list = self.parse_results(execution.results)
return {
"results": results,
"stdout": execution.logs.stdout,
"stderr": execution.logs.stderr,
"error": execution.error,
"file_list": file_list,
}
def parse_results(self, results: List[Result]):
"""
Parse the results from the E2B Code Interpreter.
:param results: The results from the code execution.
:return: Parsed results.
"""
parsed_results = []
file_list = []
for result in results:
if result.text:
parsed_results.append({"text": result.text})
if result.html:
parsed_results.append({"html": result.html})
if result.markdown:
parsed_results.append({"markdown": result.markdown})
if result.svg:
parsed_results.append({"svg": result.svg})
if result.png:
tmp_dir = tempfile.gettempdir()
file_path = os.path.join(tmp_dir, uuid.uuid4().hex + ".png")
with open(file_path, "wb") as f:
f.write(base64.b64decode(result.png))
file_list.append(self.upload_minio(f"{uuid.uuid4().hex}.png", file_path))
if result.jpeg:
tmp_dir = tempfile.gettempdir()
file_path = os.path.join(tmp_dir, uuid.uuid4().hex + ".jpeg")
with open(file_path, "wb") as f:
f.write(base64.b64decode(result.jpeg))
file_list.append(self.upload_minio(f"{uuid.uuid4().hex}.jpeg", file_path))
if result.json:
parsed_results.append({"json": result.json})
if result.data:
parsed_results.append({"data": result.data})
if self.local_sync_path and os.path.exists(self.local_sync_path) and self.sandbox:
# 将沙盒中的文件同步到本地目录
files_info = self.sandbox.files.list("./")
self.sync_files_to_local(files_info)
return parsed_results, file_list
def sync_files_to_local(self, files_info: List[EntryInfo]):
if not files_info:
return
for file in files_info:
# ignore hidden files
if file.name.startswith("."):
continue
if file.type == FileType.FILE:
if file.path not in self.sandbox_file_cache:
self.sandbox_file_cache[file.path] = file
self.download_file(file)
# only download modified files
if self.sandbox_file_cache[file.path].modified_time < file.modified_time:
self.download_file(file)
else:
new_files_info = self.sandbox.files.list(file.path)
self.sync_files_to_local(new_files_info)
def download_file(self, file_info: EntryInfo):
relative_path = file_info.path.replace("/home/user/", "")
local_path = os.path.join(self.local_sync_path, relative_path)
local_dir = os.path.dirname(local_path)
os.makedirs(local_dir, exist_ok=True)
with open(local_path, "wb") as f:
f.write(self.sandbox.files.read(file_info.path, format="bytes"))
def close(self):
if self.sandbox:
self.sandbox.kill()
self.sandbox = None
if __name__ == '__main__':
e2b_api_key = os.environ.get("E2B_API_KEY")
e2b_exec = E2bCodeExecutor(api_key=e2b_api_key, keep_sandbox=True, minio={}, local_sync_path="./e2b_output")
result = e2b_exec.run(
code="""import requests\nimport os
os.makedirs('./downloaded_wallpapers', exist_ok=True)
# 选定一个新的可靠高清风景图片链接
direct_image_url = 'https://images.unsplash.com/photo-1524758631624-e2822e304c36?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1050&q=80'
output_path = './downloaded_wallpapers/wallpaper_1.jpg'
try:
response = requests.get(direct_image_url, stream=True)
if response.status_code == 200:
with open(output_path, 'wb') as f:
for chunk in response.iter_content(1024):
f.write(chunk)
print(f'壁纸已成功下载到 {output_path}')
else:
print(f'请求失败,状态码: {response.status_code}')
except Exception as e:
print(f'发生异常: {str(e)}')""")
print(result)
print(11111)
e2b_exec.close()
# boxes = Sandbox.list(api_key=e2b_api_key)
# for box in boxes:
# Sandbox.kill(sandbox_id=box.sandbox_id, api_key=e2b_api_key)
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/code_interpreter/local_executor.py
================================================
import glob
import os
import re
import shutil
import subprocess
import sys
import tempfile
import uuid
from concurrent.futures import ThreadPoolExecutor, TimeoutError
from hashlib import md5
from os import DirEntry
from pathlib import Path
from typing import List, Tuple, Optional, Any
import matplotlib
from loguru import logger
from bisheng_langchain.gpts.tools.code_interpreter.base_executor import BaseExecutor
CODE_BLOCK_PATTERN = r"```(\w*)\n(.*?)\n```"
DEFAULT_TIMEOUT = 600
WIN32 = sys.platform == 'win32'
PATH_SEPARATOR = WIN32 and '\\' or '/'
WORKING_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'extensions')
TIMEOUT_MSG = 'Timeout'
UNKNOWN = "unknown"
LOCAL_DESCRIPTION = """Evaluates python code in native environment. \
You must send the whole script every time and print your outputs. \
Script should be pure python code that can be evaluated. \
It should be in python format NOT markdown. \
The code should NOT be wrapped in backticks. \
If you have any files outputted write them to "output/" relative to the execution \
path. Output can only be read from the directory, stdout, and stdin. \
Do not use things like plot.show() as it will \
not work instead write them out `output/`\
print() any output and results so you can capture the output.""" # noqa: T201
class LocalExecutor(BaseExecutor):
def __init__(self, minio: dict = None, **kwargs):
super().__init__(minio, **kwargs)
self.minio = minio
@property
def description(self) -> str:
return LOCAL_DESCRIPTION
@staticmethod
def infer_lang(code):
"""infer the language for the code.
TODO: make it robust.
"""
if code.startswith("python ") or code.startswith("pip") or code.startswith("python3 "):
return "sh"
# check if code is a valid python code
try:
compile(code, "test", "exec")
return "python"
except SyntaxError:
# not a valid python code
return UNKNOWN
@staticmethod
def insert_set_font_code(code: str) -> str:
"""判断python代码中是否导入了matplotlib库,如果有则插入设置字体的代码"""
split_code = code.split('\n')
cache_file = matplotlib.get_cachedir()
font_cache = glob.glob(f'{cache_file}/fontlist*')
for cache in font_cache:
os.remove(cache)
# todo: 如果生成的代码中已经有了设置字体的代码,可能会导致该段代码失效
if 'matplotlib' in code:
pattern = re.compile(r'(import matplotlib|from matplotlib)')
index = max(i for i, line in enumerate(split_code) if pattern.search(line))
split_code.insert(index + 1, 'import matplotlib\nmatplotlib.rc("font", family="WenQuanYi Zen Hei")')
return '\n'.join(split_code)
@staticmethod
def extract_code(
text: str, pattern: str = CODE_BLOCK_PATTERN, detect_single_line_code: bool = False
) -> List[Tuple[str, str]]:
"""Extract code from a text.
Args:
text (str): The text to extract code from.
pattern (str, optional): The regular expression pattern for finding the
code block. Defaults to CODE_BLOCK_PATTERN.
detect_single_line_code (bool, optional): Enable the new feature for
extracting single line code. Defaults to False.
Returns:
list: A list of tuples, each containing the language and the code.
If there is no code block in the input text, the language would be "unknown".
If there is code block but the language is not specified, the language would be "".
"""
if not detect_single_line_code:
match = re.findall(pattern, text, flags=re.DOTALL)
return match if match else [(UNKNOWN, text)]
# Extract both multi-line and single-line code block, separated by the | operator
# `{3}(\w+)?\s*([\s\S]*?)`{3}: Matches multi-line code blocks.
# The (\w+)? matches the language, where the ? indicates it is optional.
# `([^`]+)`: Matches inline code.
code_pattern = re.compile(r"`{3}(\w+)?\s*([\s\S]*?)`{3}|`([^`]+)`")
code_blocks = code_pattern.findall(text)
# Extract the individual code blocks and languages from the matched groups
extracted = []
for lang, group1, group2 in code_blocks:
if group1:
extracted.append((lang.strip(), group1.strip()))
elif group2:
extracted.append(("", group2.strip()))
return extracted
@staticmethod
def _cmd(lang):
if lang.startswith('python') or lang in ['bash', 'sh', 'powershell']:
return lang
if lang in ['shell']:
return 'sh'
if lang in ['ps1']:
return 'powershell'
raise NotImplementedError(f'{lang} not recognized in code execution')
@classmethod
def _execute_code(cls,
code: Optional[str] = None,
timeout: Optional[int] = None,
filename: Optional[str] = None,
work_dir: Optional[str] = None,
lang: Optional[str] = 'python',
file_path: Optional[str] = None):
cmd = [
sys.executable if lang.startswith('python') else cls._cmd(lang),
f'.\\{filename}' if WIN32 else filename,
]
if WIN32:
logger.warning('SIGALRM is not supported on Windows. No timeout will be enforced.')
result = subprocess.run(
cmd,
cwd=work_dir,
capture_output=True,
text=True,
)
else:
with ThreadPoolExecutor(max_workers=1) as executor:
future = executor.submit(
subprocess.run,
cmd,
cwd=work_dir,
capture_output=True,
text=True,
)
try:
result = future.result(timeout=timeout)
except TimeoutError:
return 1, TIMEOUT_MSG, ""
if result.returncode:
logs = result.stderr
if file_path is not None:
abs_path = str(Path(file_path).absolute())
logs = logs.replace(str(abs_path), '').replace(filename, '')
else:
abs_path = str(Path(work_dir).absolute()) + PATH_SEPARATOR
logs = logs.replace(str(abs_path), '')
else:
logs = result.stdout
return result.returncode, logs, ""
@classmethod
def execute_code(
cls,
code: Optional[str] = None,
timeout: Optional[int] = None,
filename: Optional[str] = None,
work_dir: Optional[str] = None,
lang: Optional[str] = 'python',
) -> Tuple[int, str, str]:
if all((code is None, filename is None)):
error_msg = f'Either {code=} or {filename=} must be provided.'
logger.error(error_msg)
raise AssertionError(error_msg)
timeout = timeout or DEFAULT_TIMEOUT
original_filename = filename
if filename is None:
code_hash = md5(code.encode()).hexdigest()
# create a file with a automatically generated name
filename = f"tmp_code_{code_hash}.{'py' if lang.startswith('python') else lang}"
if work_dir is None:
work_dir = WORKING_DIR
filepath = os.path.join(work_dir, filename)
file_dir = os.path.dirname(filepath)
os.makedirs(file_dir, exist_ok=True)
(Path(file_dir) / 'output').mkdir(exist_ok=True, parents=True)
if code is not None:
with open(filepath, 'w', encoding='utf-8') as fout:
fout.write(code)
try:
return cls._execute_code(code=code, timeout=timeout, filename=filename, work_dir=work_dir, lang=lang,
file_path=filepath)
finally:
if filepath is not None:
os.remove(filepath)
def run_with_dir(self, code: str, dir_path: str, lang: str) -> (int, str, list):
"""在指定目录下运行代码,并返回日志和生成的文件列表"""
exitcode, logs, _ = self.execute_code(
code,
work_dir=dir_path,
lang=lang,
)
logs += '\n' + logs
file_list = []
if exitcode != 0:
return exitcode, logs, file_list
# 获取文件
for root, dirs, files in os.walk(dir_path):
for name in files:
file_name = os.path.join(root, name)
file_ext = os.path.splitext(name)[-1]
file_list.append(self.upload_minio(f"{uuid.uuid4().hex}.{file_ext}", file_name))
# 同步执行结果文件到本地同步目录
if self.local_sync_path and os.path.exists(self.local_sync_path):
files_info = list(os.scandir(dir_path))
self.sync_files_to_local(files_info, dir_path)
return exitcode, logs, file_list
def run(self, code: str) -> Any:
code_blocks = self.extract_code(code)
logs_all = ''
all_file_list = []
for i, code_block in enumerate(code_blocks):
lang, code = code_block
lang = self.infer_lang(code)
code = self.insert_set_font_code(code)
if self.local_sync_path and os.path.exists(self.local_sync_path):
exit_code, logs, file_list = self.run_with_dir(code, dir_path=self.local_sync_path, lang=lang)
else:
with tempfile.TemporaryDirectory() as temp_dir:
exit_code, logs, file_list = self.run_with_dir(code, dir_path=temp_dir, lang=lang)
if exit_code != 0:
return {'exitcode': exit_code, 'log': logs_all}
logs_all += "\n" + logs
all_file_list += file_list
return {'exitcode': 0, 'log': logs_all, 'file_list': all_file_list}
def sync_files_to_local(self, files_info: List[DirEntry], root_path: str):
if not files_info:
return
for file in files_info:
# ignore hidden files
if file.name.startswith("."):
continue
if file.is_file():
self.download_file(file, root_path)
else:
new_files_info = os.scandir(file.path)
self.sync_files_to_local(list(new_files_info), root_path)
def download_file(self, file_info: DirEntry, root_path: str):
relative_path = file_info.path.replace(root_path, "").lstrip(os.sep)
local_path = os.path.join(self.local_sync_path, relative_path)
local_dir = os.path.dirname(local_path)
os.makedirs(local_dir, exist_ok=True)
shutil.move(file_info.path, local_path)
if __name__ == '__main__':
tmp_executor = LocalExecutor(minio={}, )
result = tmp_executor.run(
code="""import os\nwith open("output/test2.txt", "w") as f:\n f.write("Hello, E2222B!")\nprint("File written to output/test.txt")""")
result2 = tmp_executor.run(
code="""import os\nwith open("output/test2.txt", "r") as f:\n content = f.read()\n print(f"File read from output/test2.txt=={content}")""")
print(result)
print(result2)
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/code_interpreter/tool.py
================================================
import itertools
import os
import sys
from typing import List, Type, Any
from langchain_community.tools import Tool
from pydantic import BaseModel, Field
from langchain_core.tools import BaseTool
from bisheng_langchain.gpts.tools.code_interpreter.e2b_executor import E2bCodeExecutor
from bisheng_langchain.gpts.tools.code_interpreter.local_executor import LocalExecutor
CODE_BLOCK_PATTERN = r"```(\w*)\n(.*?)\n```"
DEFAULT_TIMEOUT = 600
WIN32 = sys.platform == 'win32'
PATH_SEPARATOR = WIN32 and '\\' or '/'
WORKING_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'extensions')
TIMEOUT_MSG = 'Timeout'
UNKNOWN = "unknown"
def infer_lang(code):
"""infer the language for the code.
TODO: make it robust.
"""
if code.startswith("python ") or code.startswith("pip") or code.startswith("python3 "):
return "sh"
# check if code is a valid python code
try:
compile(code, "test", "exec")
return "python"
except SyntaxError:
# not a valid python code
return UNKNOWN
def head_file(path: str, n: int) -> List[str]:
"""Get the first n lines of a file."""
try:
with open(path, 'r') as f:
return [str(line) for line in itertools.islice(f, n)]
except Exception:
return []
class CodeInterpreterToolArguments(BaseModel):
"""Arguments for the BearlyInterpreterTool."""
python_code: str = Field(
...,
examples=["print('Hello World')"],
description=(
'The pure python script to be evaluated. '
'The contents will be in main.py. '
'It should not be in markdown format.'
),
)
class CodeInterpreterTool(BaseTool):
"""Tool for evaluating python code in native environment."""
name: str = 'bisheng_code_interpreter'
description: str = "code interpreter"
args_schema: Type[BaseModel] = CodeInterpreterToolArguments
executor: Any = None
def _run(self, python_code: str) -> dict:
return self.executor.run(python_code)
def close(self) -> None:
self.executor.close()
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/dalle_image_generator/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/dalle_image_generator/tool.py
================================================
import logging
from typing import Optional, Type, Any
from langchain_community.utilities.dalle_image_generator import DallEAPIWrapper
from langchain_community.utils.openai import is_openai_v1
from langchain_core.callbacks import CallbackManagerForToolRun
from langchain_core.tools import BaseTool
from pydantic import BaseModel, Field, model_validator
from typing_extensions import Self
from bisheng_langchain.utils.azure_dalle_image_generator import AzureDallEWrapper
logger = logging.getLogger(__name__)
class DallEInput(BaseModel):
query: str = Field(description="Description about image.")
class ProxyDallEAPIWrapper(DallEAPIWrapper):
"""Wrapper for OpenAI's DALL-E Image Generator with proxy support."""
http_async_client: Optional[Any] = None
@model_validator(mode="after")
def validate_environment(self) -> Self:
"""Validate that api key and python package exists in environment."""
try:
import openai
except ImportError:
raise ImportError(
"Could not import openai python package. "
"Please install it with `pip install openai`."
)
if is_openai_v1():
client_params = {
"api_key": self.openai_api_key.get_secret_value()
if self.openai_api_key
else None,
"organization": self.openai_organization,
"base_url": self.openai_api_base,
"timeout": self.request_timeout,
"max_retries": self.max_retries,
"default_headers": self.default_headers,
"default_query": self.default_query,
}
if not self.client:
self.client = openai.OpenAI(**client_params,
http_client=self.http_client).images # type: ignore[arg-type, arg-type, arg-type, arg-type, arg-type, arg-type, arg-type, arg-type]
if not self.async_client:
self.async_client = openai.AsyncOpenAI(**client_params,
http_client=self.http_async_client).images # type: ignore[arg-type, arg-type, arg-type, arg-type, arg-type, arg-type, arg-type, arg-type]
elif not self.client:
self.client = openai.Image # type: ignore[attr-defined]
else:
pass
return self
class DallEImageGenerator(BaseTool):
name: str = "dalle_image_generator"
description: str = (
"A wrapper around OpenAI DALL-E API. Useful for when you need to generate images from a text description. Input should be an image description."
)
args_schema: Type[BaseModel] = DallEInput
api_wrapper: DallEAPIWrapper | AzureDallEWrapper
def _run(
self,
query: str,
run_manager: Optional[CallbackManagerForToolRun] = None,
) -> str:
"""Use the tool."""
return self.api_wrapper.run(query)
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/get_current_time/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/get_current_time/tool.py
================================================
from datetime import datetime
import pytz
from pydantic import BaseModel, Field
from langchain.tools import tool
class GetCurTimeInput(BaseModel):
timezone: str = Field(
default='Asia/Shanghai',
description="The timezone to get the current time in. Such as 'Asia/Shanghai','Pacific/Palau' or 'US/Mountain'.",
)
@tool(args_schema=GetCurTimeInput)
def get_current_time(timezone='Asia/Shanghai'):
"""
获取当前UTC时间以及主要时区的时间,可用于时间、日期等场景相关的计算。当问题涉及到时间,调用此工具来查询和时间有关的内容。
"""
tz = pytz.timezone(timezone)
current_time = datetime.now(tz)
formatted_time = current_time.strftime("%A, %B %d, %Y %I:%M %p")
return formatted_time
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/local_file/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/local_file/local_file.py
================================================
import os
import re
from typing import Tuple, List, Dict, Any, Optional
import aiofiles
from langchain_core.tools import BaseTool, StructuredTool
from pydantic import BaseModel, Field
from bisheng_langchain.linsight.utils import format_size
class FileToolInput(BaseModel):
file_path: str = Field(..., description="要查看的目录路径,默认为当前目录")
class FileDirToolInput(BaseModel):
directory_path: str = Field(..., description="文件的完整路径")
class SearchFilesInput(BaseModel):
directory_path: str = Field(..., description="要搜索的目录路径")
pattern: str = Field(default="", description="文件名匹配的正则表达式模式(可选)")
max_depth: int = Field(default=5, description="最大递归深度(可选,默认为5)")
class ReadFileInput(BaseModel):
file_path: str = Field(..., description="要读取的文件路径")
start_line: int = Field(default=1, description="起始行号(从1开始计数)")
num_lines: int = Field(default=50, description="需要读取的行数,最多250行")
class SearchTextInput(BaseModel):
file_path: str = Field(..., description="要搜索的文件路径")
keyword: str = Field(..., description="要搜索的短关键词(基于完全匹配)")
result_index: int = Field(default=0, description="要返回的匹配结果索引(从0开始计数),默认为第一个匹配")
context_lines: int = Field(default=25, description="显示匹配关键词前后的行数,默认为25行")
class WriteFileInput(BaseModel):
file_path: str = Field(..., description="目标文件路径")
content: str = Field(..., description="要写入的内容")
class ReplaceFileInput(BaseModel):
file_path: str = Field(..., description="要编辑的文件路径")
start_line: int = Field(..., description="开始替换的行号(从1开始计数,包含此行)")
end_line: int = Field(..., description="结束替换的行号(从1开始计数,不包含此行,左开右闭区间)")
replacement_text: str = Field(..., description="替换的文本内容")
class LocalFileTool(BaseModel):
"""
LocalFileTool is a tool for managing local files.
It provides methods to read, write, and delete files.
"""
root_path: str = Field(..., description="Root path for file operations permission")
def validate_file_path(self, file_path: str) -> Tuple[bool, str, str]:
"""
验证文件路径是否在允许的目录范围内
Args:
file_path: 要验证的文件路径
Returns:
Tuple[bool, str, str]: (是否有效, 规范化后的路径, 错误信息)
"""
# 如果是相对路径,则拼接到默认根目录
if not os.path.isabs(file_path):
normalized_path = os.path.join(self.root_path, file_path)
else:
normalized_path = file_path
# 获取规范化的绝对路径
normalized_path = os.path.abspath(normalized_path)
root_path = os.path.abspath(self.root_path)
# 检查路径是否在允许的根目录下
if not normalized_path.startswith(root_path):
raise Exception(f"没有权限访问 '{file_path}',路径超出允许范围")
return True, normalized_path, ""
def list_files(self, directory_path: str) -> List[str]:
"""
列出指定目录下的所有文件和子目录
Args:
directory_path: 要查看的目录路径,默认为当前目录
Returns:
目录中所有文件和子目录的列表
"""
# 验证路径权限
is_valid, normalized_path, error_msg = self.validate_file_path(directory_path)
if not is_valid:
return [f"错误: {error_msg}"]
directory_path = normalized_path
# 确保路径存在
if not os.path.exists(directory_path):
raise Exception(f"错误: 路径 '{directory_path}' 不存在")
if not os.path.isdir(directory_path):
raise Exception(f"错误: '{directory_path}' 不是一个目录")
if directory_path == ".":
directory_path = os.getcwd()
# 获取目录内容
items = os.listdir(directory_path)
# 构建结果列表,标记文件和目录
result = []
for item in items:
full_path = os.path.join(directory_path, item)
if os.path.isdir(full_path):
result.append({
"type": "directory",
"name": item,
"path": full_path
})
else:
# 获取文件大小
size = os.path.getsize(full_path)
size_str = format_size(size)
result.append({
"type": "file",
"name": item,
"size": size_str
})
if not result:
return ["目录为空"]
return result
async def get_file_details(self, file_path: str) -> Dict[str, Any]:
"""
获取指定文件的详细信息
Args:
file_path: 文件的完整路径
Returns:
包含文件详细信息的字典
"""
# 验证路径权限
is_valid, normalized_path, error_msg = self.validate_file_path(file_path)
if not is_valid:
return {"error": error_msg}
file_path = normalized_path
if not os.path.exists(file_path):
raise Exception(f"文件 '{file_path}' 不存在")
stats = os.stat(file_path)
line_num = 0
str_num = 0
async with aiofiles.open(file_path, 'r', encoding='utf-8') as f:
async for line in f:
line_num += 1
str_num += len(line)
return {
"名称": os.path.basename(file_path),
"路径": file_path,
"大小": format_size(stats.st_size),
"大小(字节)": stats.st_size,
"行数": line_num,
"字符数": str_num,
"修改时间": stats.st_mtime,
"是目录": os.path.isdir(file_path),
"是文件": os.path.isfile(file_path)
}
def search_files(self, directory_path: str, pattern: str = "", max_depth: int = 5) -> List[str]:
"""
在指定目录中搜索文件和子目录
Args:
directory_path: 要搜索的目录路径
pattern: 文件名匹配的正则表达式模式(可选)
max_depth: 最大递归深度(可选,默认为5)
Returns:
匹配的文件和目录列表
"""
results = []
# 验证路径权限
is_valid, normalized_path, error_msg = self.validate_file_path(directory_path)
if not is_valid:
return [f"错误: {error_msg}"]
directory_path = normalized_path
if not os.path.exists(directory_path) or not os.path.isdir(directory_path):
raise Exception(f"错误: '{directory_path}' 不是有效目录")
# 如果提供了pattern,则编译正则表达式
regex = None
if pattern:
try:
regex = re.compile(pattern, re.IGNORECASE)
except re.error:
raise Exception(f"错误: '{pattern}' 不是有效的正则表达式")
def search_recursive(current_path, current_depth):
if current_depth > max_depth:
return
try:
items = os.listdir(current_path)
for item in items:
full_path = os.path.join(current_path, item)
# 检查文件名是否匹配
if not pattern:
# 无模式,包含所有文件
matched = True
else:
# 使用正则表达式匹配
matched = bool(regex.search(item))
if matched:
if os.path.isdir(full_path):
results.append(f"directory: {full_path}/")
else:
size = os.path.getsize(full_path)
size_str = format_size(size)
results.append(f"file: {full_path} ({size_str})")
# 如果是目录,递归搜索
if os.path.isdir(full_path):
search_recursive(full_path, current_depth + 1)
except (PermissionError, OSError):
# 忽略无法访问的目录
pass
search_recursive(directory_path, 1)
if not results:
if pattern:
return [f"未找到匹配 '{pattern}' 的文件"]
else:
return ["未找到文件"]
return results
async def judge_file_can_read(self, file_path: str) -> (bool, Any):
# 验证路径权限
is_valid, normalized_path, error_msg = self.validate_file_path(file_path)
if not is_valid:
return False, {"error": error_msg}
file_path = normalized_path
# 检查文件是否存在
if not os.path.exists(file_path):
raise Exception(f"文件 '{file_path}' 不存在")
# 检查是否是文件
if not os.path.isfile(file_path):
raise Exception(f"'{file_path}' 不是一个文件")
# 尝试读取文件内容
try:
async with aiofiles.open(file_path, 'r', encoding='utf-8') as f:
lines = await f.readlines()
return True, lines
except UnicodeDecodeError:
# 如果UTF-8解码失败,尝试其他编码
try:
async with aiofiles.open(file_path, 'r', encoding='gbk') as f:
lines = await f.readlines()
return True, lines
except UnicodeDecodeError:
raise Exception("无法解码文件内容,可能是二进制文件")
async def read_text_file(self, file_path: str, start_line: int = 1, num_lines: int = 50) -> Dict[str, Any]:
"""
读取本地文本文件的内容
Args:
file_path: 要读取的文件路径
start_line: 起始行号(从1开始计数)
num_lines: 需要读取的行数,最多250行, 默认50行
Returns:
包含文件内容和元数据的字典
"""
if not num_lines:
num_lines = 50
flag, lines = await self.judge_file_can_read(file_path)
if not flag:
return lines
# 调整起始行(用户输入从1开始,Python从0开始)
start_idx = max(0, start_line - 1)
# 计算结束行
if num_lines > 250:
num_lines = 250
end_idx = min(start_idx + num_lines, len(lines))
# 提取指定行的内容
content = ''
for idx in range(start_idx, end_idx):
content += f"第{idx + 1}行内容: {lines[idx]}"
# 构建结果
total_lines = len(lines)
result = {
"文件名": os.path.basename(file_path),
"总行数": total_lines,
"读取范围": f"{start_line}-{end_idx + 1}",
"实际读取行数": end_idx - start_idx,
"内容": content
}
return result
async def search_text_in_file(self, file_path: str, keyword: str, result_index: int = 0,
context_lines: int = 25) -> Dict[str, Any]:
"""
这是一个在文本文件中搜索关键词的工具,并返回匹配结果的上下文。关键词需要尽可能短以满足匹配。
Args:
file_path: 要搜索的文件路径
keyword: 要搜索的短关键词(基于完全匹配)
result_index: 要返回的匹配结果索引(从0开始计数),默认为第一个匹配
context_lines: 显示匹配关键词前后的行数,默认为25行
Returns:
包含搜索结果和上下文的字典,包括匹配总数、当前匹配索引和上下文内容
"""
flag, lines = await self.judge_file_can_read(file_path)
if not flag:
return lines
# 查找所有匹配的行
matches = []
for i, line in enumerate(lines):
if keyword in line:
matches.append(i)
# 检查是否有匹配结果
total_matches = len(matches)
if total_matches == 0:
return {
"文件名": os.path.basename(file_path),
"关键词": keyword,
"匹配总数": 0,
"内容": f"未找到关键词 '{keyword}'"
}
# 检查请求的索引是否有效
if result_index < 0 or result_index >= total_matches:
raise Exception(f"请求的索引 {result_index} 超出范围 (0-{total_matches - 1})")
# 获取匹配行的索引
match_line_index = matches[result_index]
# 计算上下文范围
start_line = max(0, match_line_index - context_lines)
end_line = min(len(lines), match_line_index + context_lines + 1)
# 提取上下文内容
context = []
for i in range(start_line, end_line):
line_number = i + 1 # 用户友好的行号(从1开始)
line_content = lines[i].rstrip('\n')
# 标记匹配行
if i == match_line_index:
line_prefix = f">> {line_number}: "
else:
line_prefix = f" {line_number}: "
context.append(f"{line_prefix}{line_content}")
# 构建结果
result = {
"文件名": os.path.basename(file_path),
"关键词": keyword,
"匹配总数": total_matches,
"当前匹配索引": result_index,
"当前匹配行号": match_line_index + 1,
"总行数": len(lines),
"上下文": "\n".join(context)
}
return result
async def add_text_to_file(self, file_path: str, content: str) -> Dict[str, Any]:
"""
将文本内容追加到文本文件,如果文件不存在,则创建文件
Args:
file_path: 目标文件路径
content: 要写入的内容
Returns:
包含操作结果的字典
"""
is_valid, normalized_path, error_msg = self.validate_file_path(file_path)
if not is_valid:
return {"状态": "错误", "错误信息": error_msg}
# 确保目录存在
os.makedirs(os.path.dirname(normalized_path), exist_ok=True)
# 追加模式
async with aiofiles.open(normalized_path, "a", encoding="utf-8") as f:
await f.write(content + '\n')
lines = []
if os.path.exists(normalized_path):
async with aiofiles.open(normalized_path, "r", encoding="utf-8") as f:
lines = await f.readlines()
return {
"状态": "成功",
"文件路径": normalized_path,
"追加行数": len(content.split('\n')),
"文件行数": len(lines)
}
async def replace_file_lines(self, file_path: str, start_line: int, end_line: int, replacement_text: str) \
-> Dict[str, Any]:
"""
替换文件中的指定行范围
Args:
file_path: 要编辑的文件路径
start_line: 开始替换的行号(从1开始计数,包含此行)
end_line: 结束替换的行号(从1开始计数,不包含此行,左开右闭区间)
replacement_text: 替换的文本内容
Returns:
包含替换结果的字典
"""
is_valid, normalized_path, error_msg = self.validate_file_path(file_path)
if not is_valid:
return {"状态": "错误", "错误信息": error_msg}
flag, lines = await self.judge_file_can_read(file_path)
if not flag:
return lines
total_lines = len(lines)
# 验证行号范围
if start_line > total_lines:
raise Exception(f"起始行号 {start_line} 超出文件总行数 {total_lines}")
# 调整end_line,确保不超出文件范围
actual_end_line = min(end_line, total_lines + 1)
# 转换为0基索引
start_idx = start_line - 1
end_idx = actual_end_line - 1
# 处理替换文本,确保以换行符结尾(如果原来被替换的行有换行符)
replacement_lines = []
if replacement_text:
# 分割替换文本为行
replacement_lines = replacement_text.splitlines(True) # 保留换行符
# 如果最后一行没有换行符,且被替换的范围有内容,则添加换行符
if replacement_lines and not replacement_lines[-1].endswith('\n') and end_idx > start_idx:
replacement_lines[-1] += '\n'
# 记录被替换的内容
replaced_line_count = end_idx - start_idx
# 执行替换
new_lines = lines[:start_idx] + replacement_lines + lines[end_idx:]
# 写回文件
async with aiofiles.open(normalized_path, "w", encoding="utf-8") as f:
await f.writelines(new_lines)
# 构建结果
result = {
"状态": "成功",
"文件路径": file_path,
"替换范围": f"第{start_line}行到第{actual_end_line - 1}行(左开右闭)",
"原始行数": total_lines,
"替换后行数": len(new_lines),
"被替换的行数": replaced_line_count,
"新增的行数": len(replacement_lines)
}
return result
@classmethod
def get_tool_by_name(cls, name: str, root_path: str) -> Optional[BaseTool]:
"""
Get a specific tool by name.
:param name: The name of the tool to retrieve.
:param root_path: Path to the directory to list files from.
:return: The tool if found, otherwise None.
"""
obj = cls(root_path=root_path)
if name == "list_files":
return StructuredTool(
name=f"{cls.list_files.__name__}",
description=cls.list_files.__doc__,
args_schema=FileDirToolInput,
func=obj.list_files,
)
elif name == "get_file_details":
return StructuredTool(
name=f"{cls.get_file_details.__name__}",
description=cls.get_file_details.__doc__,
args_schema=FileToolInput,
coroutine=obj.get_file_details,
)
elif name == "search_files":
return StructuredTool(
name=f"{cls.search_files.__name__}",
description=cls.search_files.__doc__,
args_schema=SearchFilesInput,
func=obj.search_files,
)
elif name == "read_text_file":
return StructuredTool(
name=f"{cls.read_text_file.__name__}",
description=cls.read_text_file.__doc__,
args_schema=ReadFileInput,
coroutine=obj.read_text_file,
)
elif name == "search_text_in_file":
return StructuredTool(
name=f"{cls.search_text_in_file.__name__}",
description=cls.search_text_in_file.__doc__,
args_schema=SearchTextInput,
coroutine=obj.search_text_in_file,
)
elif name == "add_text_to_file":
return StructuredTool(
name=f"{cls.add_text_to_file.__name__}",
description=cls.add_text_to_file.__doc__,
args_schema=WriteFileInput,
coroutine=obj.add_text_to_file,
)
elif name == "replace_file_lines":
return StructuredTool(
name=f"{cls.replace_file_lines.__name__}",
description=cls.replace_file_lines.__doc__,
args_schema=ReplaceFileInput,
coroutine=obj.replace_file_lines,
)
# 如果没有找到对应的工具,抛出异常
raise Exception(f"LocalFile not found tool: {name}")
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/message/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/message/dingding.py
================================================
from typing import Any, Optional, Type
import requests
from pydantic import BaseModel, Field
from bisheng_langchain.gpts.tools.api_tools.base import (APIToolBase,
MultArgsSchemaTool)
class InputArgs(BaseModel):
url: str = Field(description="钉钉机器人的URL地址")
message: str = Field(description="需要发送的钉钉消息")
class DingdingMessageTool(BaseModel):
def send_message(self, message: str, url: str) -> str:
"""
发送钉钉机器人消息
Args:
webhook_url: 钉钉机器人的 webhook 地址
message: 要发送的消息内容
Returns:
dict: 钉钉接口的响应结果
"""
# 构建请求头
headers = {"Content-Type": "application/json"}
# 构建请求体
data = {"msgtype": "text", "text": {"content": message}}
try:
# 发送 POST 请求
response = requests.post(url=url, headers=headers, json=data)
# 检查响应状态
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
return f"发送消息失败: {str(e)}"
@classmethod
def get_api_tool(cls, name: str, **kwargs: Any) -> "DingdingMessageTool":
attr_name = name.split("_", 1)[-1]
c = DingdingMessageTool(**kwargs)
class_method = getattr(c, attr_name)
return MultArgsSchemaTool(
name=name,
description=class_method.__doc__,
func=class_method,
args_schema=InputArgs,
)
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/message/email.py
================================================
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from typing import Any
from pydantic import BaseModel, Field
from bisheng_langchain.gpts.tools.api_tools.base import (APIToolBase,
MultArgsSchemaTool)
class InputArgs(BaseModel):
receiver: str = Field(description="收件人)")
subject: str = Field(description="邮件主题")
content: str = Field(description="邮件正文内容")
class EmailMessageTool(BaseModel):
email_account: str = Field(description="发件人邮箱")
email_password: str = Field(description="邮箱授权码/密码")
smtp_server: str = Field(description="SMTP服务器地址")
encrypt_method: str = Field(description="encrypt_method")
smtp_port: int = Field(default=465, description=" 端口号(SSL一般465,TLS用587)")
def send_email(
self,
receiver: str = None,
subject: str = None,
content: str = None,
):
"""
发送电子邮件函数
参数:
sender : str - 发件人邮箱
password : str - 邮箱授权码/密码
receiver : str/list - 收件人(多个用逗号)
subject : str - 邮件主题
content : str - 邮件正文内容
content_type : str - 内容类型(plain/html)
attachments : list - 附件路径列表
smtp_server : str - SMTP服务器地址
port : int - 端口号(SSL一般465,TLS用587)
"""
try:
content_type = "plain"
# 创建邮件对象
msg = MIMEMultipart()
msg["From"] = self.email_account
msg["To"] = receiver
msg["Subject"] = subject
# 添加正文
body = MIMEText(content, content_type, "utf-8")
msg.attach(body)
# 添加附件
# if attachments:
# for file_path in attachments:
# with open(file_path, "rb") as f:
# part = MIMEApplication(f.read())
# part.add_header(
# "Content-Disposition",
# "attachment",
# filename=os.path.basename(file_path),
# )
# msg.attach(part)
# 创建SMTP连接
if self.smtp_port == 465:
# SSL连接
server = smtplib.SMTP_SSL(self.smtp_server, self.smtp_port)
else:
# TLS连接
server = smtplib.SMTP(self.smtp_server, self.smtp_port)
server.starttls()
# 登录邮箱
server.login(self.email_account, self.email_password)
# 发送邮件
server.sendmail(self.email_account, receiver.split(","), msg.as_string())
except Exception as e:
raise Exception(f"邮件发送失败:{e}")
return "发送成功"
@classmethod
def get_api_tool(cls, name: str, **kwargs: Any) -> "EmailMessageTool":
attr_name = name.split("_", 1)[-1]
c = EmailMessageTool(**kwargs)
class_method = getattr(c, attr_name)
return MultArgsSchemaTool(
name=name,
description=class_method.__doc__,
func=class_method,
args_schema=InputArgs,
)
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/message/feishu.py
================================================
from typing import Any, Optional, Type
import requests
from pydantic import BaseModel, Field
from bisheng_langchain.gpts.tools.api_tools.base import (APIToolBase,
MultArgsSchemaTool)
class InputArgs(BaseModel):
message: Optional[str] = Field(None, description="需要发送的钉钉消息")
receive_id: Optional[str] = Field(None, description="接收的ID")
receive_id_type: Optional[str] = Field(None, description="接收的ID类型")
container_id: Optional[str] = Field(None, description="container_id")
start_time: Optional[str] = Field(None, description="start_time")
end_time: Optional[str] = Field(None, description="end_time")
# page_token: Optional[str] = Field(description="page_token")
container_id_type: Optional[str] = Field(None, description="container_id_type")
page_size: Optional[int] = Field(default=20,description="page_size")
page_token: Optional[str] = Field(None, description="page_token")
sort_type: Optional[str] = Field(description="sort_type",default="ByCreateTimeAsc")
class FeishuMessageTool(BaseModel):
API_BASE_URL: str = "https://open.feishu.cn/open-apis"
app_id: str = Field(description="app_id")
app_secret: str = Field(description="app_secret")
def send_message(self, message: str, receive_id: str, receive_id_type: str) -> str:
"""
发送钉钉机器人消息
Args:
webhook_url: 钉钉机器人的 webhook 地址
message: 要发送的消息内容
Returns:
dict: 钉钉接口的响应结果
"""
# 构建请求头
headers = {"Content-Type": "application/json","Authorization":f"Bearer {self.get_access_token()}"}
# 构建请求体
url = f"{self.API_BASE_URL}/im/v1/messages?receive_id_type={receive_id_type}"
payload = {
"receive_id": receive_id,
"msg_type": "text",
"content": '{\"text\":\"' + message + '\"}',
# "content": message.strip('"').replace(r"\"", '"').replace(r"\\", "\\"),
}
try:
# 发送 POST 请求
response = requests.post(url=url, headers=headers, json=payload)
# 检查响应状态
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
return f"发送消息失败: {str(e)}"
def get_chat_messages(
self,
container_id: str,
container_id_type: str,
start_time: Optional[str],
end_time: Optional[str],
page_size: Optional[int] ,
page_token: Optional[str],
sort_type: Optional[str],
) -> str:
"""获取聊天记录"""
url = f"{self.API_BASE_URL}/im/v1/messages"
headers = {"Content-Type": "application/json","Authorization":f"Bearer {self.get_access_token()}"}
params={
"container_id": container_id,
"container_id_type": container_id_type,
"start_time": start_time,
"end_time": end_time,
"page_token": page_token,
}
if page_size:
params["page_size"] = page_size
if sort_type:
params["sort_type"] = sort_type
try:
response = requests.get(
url=url,
headers=headers,
params=params
)
except requests.exceptions.RequestException as e:
return f"获取消息失败: {str(e)}"
if response.json()["code"] != 0:
return f"获取消息失败: {response.json()}"
return response.json()["data"]
def get_access_token(self) -> str:
url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
params = {"app_id":self.app_id , "app_secret": self.app_secret}
response = requests.post(url,json=params)
if response.json()["code"] != 0:
raise Exception("app_id or app_secret error")
return response.json()["tenant_access_token"]
@classmethod
def get_api_tool(cls, name: str, **kwargs: Any) -> "FeishuMessageTool":
attr_name = name.split("_", 1)[-1]
c = FeishuMessageTool(**kwargs)
class_method = getattr(c, attr_name)
return MultArgsSchemaTool(
name=name,
description=class_method.__doc__,
func=class_method,
args_schema=InputArgs,
)
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/message/wechat.py
================================================
from typing import Any
import requests
from pydantic import BaseModel, Field
from bisheng_langchain.gpts.tools.api_tools.base import (APIToolBase,
MultArgsSchemaTool)
class InputArgs(BaseModel):
url: str = Field(description="企业微信机器人的webhook地址")
message: str = Field(description="需要发送的消息")
class WechatMessageTool(BaseModel):
def send_message(self, message: str, url: str) -> str:
"""
发送企业微信机器人消息
Args:
webhook_url: 机器人的 webhook 地址
message: 要发送的消息内容
Returns:
dict: 钉钉接口的响应结果
"""
# 构建请求头
headers = {"Content-Type": "application/json"}
# 构建请求体
data = {"msgtype": "text", "text": {"content": message}}
try:
# 发送 POST 请求
response = requests.post(url=url, headers=headers, json=data)
return response.json()
except requests.exceptions.RequestException as e:
return f"发送消息失败: {str(e)}"
@classmethod
def get_api_tool(cls, name: str, **kwargs: Any) -> "WechatMessageTool":
attr_name = name.split("_", 1)[-1]
c = WechatMessageTool(**kwargs)
class_method = getattr(c, attr_name)
return MultArgsSchemaTool(
name=name,
description=class_method.__doc__,
func=class_method,
args_schema=InputArgs,
)
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/sql_agent/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/sql_agent/tool.py
================================================
from typing import Type, Optional
from langchain_community.agent_toolkits import SQLDatabaseToolkit
from langchain_community.utilities import SQLDatabase
from langchain_core.callbacks import CallbackManagerForToolRun
from langchain_core.language_models import BaseLanguageModel
from langchain_core.messages import HumanMessage
from langchain_core.tools import BaseTool
from langgraph.graph.graph import CompiledGraph
from langgraph.prebuilt import create_react_agent
from pydantic import BaseModel, Field, ConfigDict
_agent_system_prompt = """You are an autonomous agent that answers user questions by querying an SQL database through the provided tools.
When a new question arrives, follow the steps *in order*:
1. ALWAYS call `sql_db_list_tables` first.
Purpose: discover what tables are available. Never skip this step.
2. Choose the table(s) that are probably relevant, then call `sql_db_schema`
once for each of those tables to obtain their schemas.
3. Write one syntactically-correct {dialect} SELECT statement.
Guidelines for this query:
- Return no more than 50 rows **unless** the user explicitly requests another limit.
- Select only the columns needed to answer the question; avoid `SELECT *`.
- If helpful, add `ORDER BY` on a meaningful column so the most interesting rows appear first.
- ABSOLUTELY NO data-modification statements (INSERT, UPDATE, DELETE, DROP, …).
- Double-check the SQL before executing.
4. Execute the query with the execution tool `sql_db_query`.
If execution fails, inspect the error, revise the SQL, and try again.
Repeat until the query runs successfully or you are certain the request
cannot be satisfied.
5. Read the resulting rows and craft a concise, direct answer for the user.
If the result set is empty, explain that no matching data was found.
6. Include the final SQL query in your answer unless the user asks you not to.
Remember:
- List tables → fetch schemas → write & verify SELECT → execute → answer.
- Never skip steps 1 or 2.
- Never perform DML.
- Keep answers focused on the user's question."""
class SqlAgentAPIWrapper(BaseModel):
model_config = ConfigDict(arbitrary_types_allowed=True)
llm: BaseLanguageModel = Field(description="llm to use for sql agent")
sql_address: str = Field(description="sql database address for SQLDatabase uri")
db: Optional[SQLDatabase] = None
agent: Optional[CompiledGraph] = None
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.llm = kwargs.get('llm')
self.sql_address = kwargs.get('sql_address')
self.db = SQLDatabase.from_uri(self.sql_address)
toolkit = SQLDatabaseToolkit(db=self.db, llm=self.llm)
tools = toolkit.get_tools()
self.agent = create_react_agent(
self.llm,
tools,
prompt=_agent_system_prompt.format(dialect=self.db.dialect),
checkpointer=False,
)
def run(self, query: str) -> str:
messages = self.agent.invoke({"messages": [HumanMessage(content=query)]})
return messages["messages"][-1].content
def arun(self, query: str) -> str:
return self.run(query)
class SqlAgentInput(BaseModel):
query: str = Field(description="用户数据查询需求(需要尽可能完整、准确)")
class SqlAgentTool(BaseTool):
name: str = "sql_agent"
description: str = "回答与 SQL 数据库有关的问题。给定用户问题,将从数据库中获取可用的表以及对应 DDL,生成 SQL 查询语句并进行执行,最终得到执行结果。"
args_schema: Type[BaseModel] = SqlAgentInput
api_wrapper: SqlAgentAPIWrapper
def _run(
self,
query: str,
run_manager: Optional[CallbackManagerForToolRun] = None,
) -> str:
"""Use the tool."""
try:
res = self.api_wrapper.run(query)
finally:
if self.api_wrapper and self.api_wrapper.db:
self.api_wrapper.db._engine.dispose()
return res
if __name__ == '__main__':
from langchain_openai import AzureChatOpenAI
llm = AzureChatOpenAI()
sql_agent_tool = SqlAgentTool(
api_wrapper=SqlAgentAPIWrapper(
llm=llm,
sql_address="sqlite:///Chinook.db",
)
)
result = sql_agent_tool.run("Which sales agent made the most in sales in 2009?")
print(result)
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/web_search/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/gpts/tools/web_search/tool.py
================================================
import json
from abc import abstractmethod, ABC
from typing import Type
import requests
from langchain_community.utilities import BingSearchAPIWrapper
from langchain_core.tools import BaseTool
from pydantic import BaseModel, Field
from urllib3.util.url import parse_url
from bisheng_langchain.gpts.tools.bing_search.tool import BingSearchResults
class SearchInput(BaseModel):
query: str = Field(description="Search query")
class SearchTool(ABC):
def __init__(self, *args, **kwargs) -> None:
self.args = args
self.kwargs = kwargs
def _requests(self, url: str, method: str, **kwargs):
"""Base requests method to handle GET and POST requests."""
if method == 'GET':
response = requests.get(url, **kwargs)
elif method == 'POST':
response = requests.post(url, **kwargs)
else:
raise ValueError("Unsupported HTTP method. Use 'GET' or 'POST'.")
if response.status_code != 200:
raise Exception(f"Request {url} failed: {response.status_code} - {response.text}")
return response.json()
# 抽象类
@abstractmethod
def _invoke(self, query: str, **kwargs) -> (str, list):
raise NotImplementedError()
def invoke(self, query: str, **kwargs) -> (str, list):
"""
Invoke the search tool with the given query.
returns
- str: The search result as a string.
- list: A list of search result link info.
"""
# Here you would implement the actual search logic
# For demonstration purposes, we'll just return a dummy response
result = self._invoke(query, **kwargs)
return json.dumps(result, ensure_ascii=False)
@classmethod
def get_host_from_url(cls, url: str) -> str:
"""Extract the host from a given URL."""
if not url:
return ""
return parse_url(url).host
@classmethod
def init_search_tool(cls, name: str, *args, **kwargs) -> "SearchTool":
"""Initialize the search tool with the given name and arguments."""
tool_class: dict = {
'bing': BingSearch,
'bocha': BoChaSearch,
'jina': JinaDeepSearch,
'serp': SerpSearch,
'tavily': TavilySearch,
'cloudsway': CloudswaySearch,
'searXNG': SearXNGSearch,
}
if name not in tool_class:
raise ValueError(f"Tool {name} not found.")
c = tool_class[name](*args, **kwargs)
return c
class WebSearchTool(BaseTool):
"""web search tools."""
name: str = "web_search"
description: str = "使用 query 进行联网检索并返回结果。"
args_schema: Type[BaseModel] = SearchInput
api_wrapper: SearchTool = Field(..., description="The search API wrapper to use for web search.")
def _run(self, query: str, **kwargs) -> str:
"""Use the tool."""
return self.api_wrapper.invoke(query, **kwargs)
class BingSearch(SearchTool):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
self.api_key = kwargs.get('api_key')
self.base_url = kwargs.get('base_url')
def _invoke(self, query: str, **kwargs) -> (str, list):
bingtool = BingSearchResults(api_wrapper=BingSearchAPIWrapper(bing_subscription_key=self.api_key,
bing_search_url=self.base_url),
num_results=10)
res = bingtool.invoke({'query': query})
if isinstance(res, str):
res = eval(res)
web_list = []
for index, result in enumerate(res):
# 处理搜索结果
snippet = result.get('snippet')
web_list.append({
'title': result.get('title'),
'url': result.get('link'),
'snippet': snippet,
'thumbnail': result.get('thumbnail'),
'site_name': self.get_host_from_url(result.get('link'))
})
return web_list
class BoChaSearch(SearchTool):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
self.api_key = kwargs.get('api_key')
self.base_url = 'https://api.bochaai.com/v1/web-search'
self.headers = {'Authorization': f'Bearer {self.api_key}'}
def _invoke(self, query: str, **kwargs) -> (str, list):
# Implement the search logic for BoCha here
# For demonstration purposes, we'll just return a dummy response
result = self._requests(self.base_url, method='POST', json={'query': query, 'summary': True},
headers=self.headers)
if result.get('code') != 200:
raise Exception(f"BoCha Error: {result}")
web_pages = result.get('data', {}).get('webPages', {}).get('value', [])
web_list = []
for index, item in enumerate(web_pages):
web_list.append({
'title': item.get('name'),
'url': item.get('url'),
'snippet': item.get('snippet'),
'thumbnail': item.get('siteIcon'),
'site_name': item.get('siteName') or self.get_host_from_url(item.get('url')),
})
return web_list
class JinaDeepSearch(SearchTool):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
self.api_key = kwargs.get('api_key')
self.base_url = 'https://deepsearch.jina.ai/v1/chat/completions'
self.headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {self.api_key}"
}
def _invoke(self, query: str, **kwargs) -> (str, list):
req_data = {
"model": "jina-deepsearch-v1",
"messages": [
{
"role": "user",
"content": query
},
],
"stream": False,
"reasoning_effort": "low",
"max_attempts": 1,
"no_direct_answer": False
}
result = self._requests(self.base_url, method='POST', json=req_data, headers=self.headers)
choices = result.get('choices', [])
web_list = []
for index, item in enumerate(choices):
item_message = item.get('message', {})
for one_web in item_message.get('annotations', []):
one_web_info = one_web.get('url_citation', {})
web_list.append({
'title': one_web_info.get('title'),
'url': one_web.get('url'),
'snippet': one_web.get('exactQuote'),
'thumbnail': None,
'site_name': self.get_host_from_url(one_web.get('url')),
})
return web_list
class SerpSearch(SearchTool):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
self.api_key = kwargs.get('api_key')
self.engine = kwargs.get('engine')
self.base_url = 'https://serpapi.com/search.json'
def _invoke(self, query: str, **kwargs) -> (str, list):
result = self._requests(self.base_url, method='GET', params={'q': query, 'api_key': self.api_key,
'engine': self.engine})
answer_result = result.get('organic_results', [])
web_list = []
for index, item in enumerate(answer_result):
web_list.append({
'title': item.get('title'),
'url': item.get('link'),
'snippet': item.get('snippet'),
'thumbnail': item.get('source_logo') or item.get('thumbnail'),
'site_name': self.get_host_from_url(item.get('link')),
})
return web_list
class TavilySearch(SearchTool):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
self.api_key = kwargs.get('api_key')
self.base_url = 'https://api.tavily.com/search'
self.headers = {'Authorization': f'Bearer {self.api_key}'}
def _invoke(self, query: str, **kwargs) -> (str, list):
result = self._requests(self.base_url, method='POST', json={'query': query}, headers=self.headers)
answers = result.get('results', [])
web_list = []
for index, item in enumerate(answers):
web_list.append({
'title': item.get('title'),
'url': item.get('url'),
'snippet': item.get('content'),
'thumbnail': item.get('favicon'),
'site_name': self.get_host_from_url(item.get('url')),
})
return web_list
class CloudswaySearch(SearchTool):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
self.api_key = kwargs.get('api_key')
self.endpoint = kwargs.get('endpoint')
self.base_url = f'https://searchapi.cloudsway.net/search/{self.endpoint}/smart'
self.headers = {'Authorization': f'Bearer {self.api_key}'}
def _invoke(self, query: str, **kwargs) -> (str, list):
result = self._requests(self.base_url, method='GET', params={'q': query}, headers=self.headers)
answers = result.get('webPages', {}).get('value', [])
# parse result
web_list = []
for index, item in enumerate(answers):
web_list.append({
'title': item.get('name'),
'url': item.get('url'),
'snippet': item.get('snippet'),
'thumbnail': item.get('thumbnailUrl'),
'site_name': item.get('siteName') or self.get_host_from_url(item.get('url')),
})
return web_list
class SearXNGSearch(SearchTool):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
self.base_url = kwargs.get('server_url').rstrip('/')
def _invoke(self, query: str, **kwargs) -> (str, list):
result = self._requests(f'{self.base_url}/search', method='GET',
params={'q': query, 'format': 'json'})
answers = result.get('results', [])
web_list = []
for index, item in enumerate(answers):
web_list.append({
'title': item.get('title'),
'url': item.get('url'),
'snippet': item.get('content'),
'thumbnail': item.get('thumbnail'),
'site_name': self.get_host_from_url(item.get('url')),
})
return web_list
================================================
FILE: src/backend/bisheng_langchain/gpts/utils.py
================================================
# This module is used to import any langchain class by name.
import importlib
from typing import Any, Type
from langchain.agents import Agent
from langchain.base_language import BaseLanguageModel
from langchain.chains.base import Chain
from langchain.chat_models.base import BaseChatModel
from langchain.prompts import PromptTemplate
from langchain.tools import BaseTool
def import_module(module_path: str) -> Any:
"""Import module from module path"""
if 'from' not in module_path:
# Import the module using the module path
return importlib.import_module(module_path)
# Split the module path into its components
_, module_path, _, object_name = module_path.split()
# Import the module using the module path
module = importlib.import_module(module_path)
return getattr(module, object_name)
def import_class(class_path: str) -> Any:
"""Import class from class path"""
module_path, class_name = class_path.rsplit('.', 1)
module = import_module(module_path)
return getattr(module, class_name)
def import_by_type(_type: str, name: str) -> Any:
from bisheng_langchain import chat_models
"""Import class by type and name"""
if _type is None:
raise ValueError(f'Type cannot be None. Check if {name} is in the config file.')
func_dict = {
'agents': import_agent,
'prompts': import_prompt,
'llms': {
'llm': import_llm,
'chat': import_chat_llm,
'contribute': import_chain_contribute_llm,
'chatopenai': import_chat_openai,
},
'tools': import_tool,
'chains': import_chain,
'toolkits': import_toolkit,
'memory': import_memory,
'embeddings': import_embedding,
'vectorstores': import_vectorstore,
'documentloaders': import_documentloader,
'textsplitters': import_textsplitter,
'utilities': import_utility,
'output_parsers': import_output_parser,
'retrievers': import_retriever,
'autogenRoles': import_autogenRoles,
'inputOutput': import_inputoutput,
}
if _type == 'llms':
if name.lower() == 'chatopenai':
key = 'chatopenai'
else:
key = 'contribute' if name in chat_models.__all__ else 'chat' if 'chat' in name.lower(
) else 'llm'
loaded_func = func_dict[_type][key] # type: ignore
else:
loaded_func = func_dict[_type]
return loaded_func(name)
def import_inputoutput(input_output: str) -> Any:
"""Import output parser from output parser name"""
return import_module(f'from bisheng_langchain.input_output import {input_output}')
def import_output_parser(output_parser: str) -> Any:
"""Import output parser from output parser name"""
return import_module(f'from langchain.output_parsers import {output_parser}')
def import_chat_llm(llm: str) -> BaseChatModel:
"""Import chat llm from llm name"""
return import_class(f'langchain.chat_models.{llm}')
def import_chain_contribute_llm(llm: str) -> BaseChatModel:
"""Import chat llm from llm name"""
return import_class(f'bisheng_langchain.chat_models.{llm}')
def import_retriever(retriever: str) -> Any:
"""Import retriever from retriever name"""
return import_module(f'from langchain.retrievers import {retriever}')
def import_autogenRoles(autogen: str) -> Any:
return import_module(f'from bisheng_langchain.autogen_role import {autogen}')
def import_memory(memory: str) -> Any:
"""Import memory from memory name"""
return import_module(f'from langchain.memory import {memory}')
def import_prompt(prompt: str) -> Type[PromptTemplate]:
"""Import prompt from prompt name"""
if prompt == 'ZeroShotPrompt':
return import_class('langchain.prompts.PromptTemplate')
return import_class(f'langchain.prompts.{prompt}')
def import_toolkit(toolkit: str) -> Any:
"""Import toolkit from toolkit name"""
from bisheng.interface.toolkits.base import toolkits_creator
return toolkits_creator[toolkit]
def import_agent(agent: str) -> Agent:
"""Import agent from agent name"""
# check for custom agent
from bisheng_langchain import agents
if agent in agents.__all__:
return import_class(f'bisheng_langchain.agents.{agent}')
return import_class(f'langchain.agents.{agent}')
def import_llm(llm: str) -> BaseLanguageModel:
"""Import llm from llm name"""
return import_class(f'langchain.llms.{llm}')
def import_chat_openai(llm: str) -> BaseLanguageModel:
"""Import llm from llm name"""
return import_class(f'langchain_openai.{llm}')
def import_tool(tool: str) -> BaseTool:
"""Import tool from tool name"""
return import_class(f'langchain.tools.{tool}')
def import_chain(chain: str) -> Type[Chain]:
"""Import chain from chain name"""
from bisheng_langchain import chains
if chain in chains.__all__:
return import_class(f'bisheng_langchain.chains.{chain}')
return import_class(f'langchain.chains.{chain}')
def import_embedding(embedding: str) -> Any:
"""Import embedding from embedding name"""
from bisheng_langchain import embeddings
if embedding in embeddings.__all__:
return import_class(f'bisheng_langchain.embeddings.{embedding}')
return import_class(f'langchain.embeddings.{embedding}')
def import_vectorstore(vectorstore: str) -> Any:
"""Import vectorstore from vectorstore name"""
from bisheng_langchain import vectorstores
if vectorstore in vectorstores.__all__:
return import_class(f'bisheng_langchain.vectorstores.{vectorstore}')
return import_class(f'langchain.vectorstores.{vectorstore}')
def import_documentloader(documentloader: str) -> Any:
"""Import documentloader from documentloader name"""
from bisheng_langchain import document_loaders
if documentloader in document_loaders.__all__:
return import_class(f'bisheng_langchain.document_loaders.{documentloader}')
return import_class(f'langchain.document_loaders.{documentloader}')
def import_textsplitter(textsplitter: str) -> Any:
"""Import textsplitter from textsplitter name"""
from bisheng_langchain import text_splitter
if textsplitter in dir(text_splitter):
return import_class(f'bisheng_langchain.text_splitter.{textsplitter}')
return import_class(f'langchain.text_splitter.{textsplitter}')
def import_utility(utility: str) -> Any:
"""Import utility from utility name"""
if utility == 'SQLDatabase':
return import_class(f'langchain.sql_database.{utility}')
return import_class(f'langchain.utilities.{utility}')
================================================
FILE: src/backend/bisheng_langchain/input_output/__init__.py
================================================
from .input import InputFileNode, InputNode, VariableNode
from .output import Report
__all__ = ['InputNode', 'InputFileNode', 'Report', 'VariableNode']
================================================
FILE: src/backend/bisheng_langchain/input_output/input.py
================================================
from typing import List, Optional
from pydantic import ConfigDict, BaseModel
class InputNode(BaseModel):
"""Input组件,用来控制输入"""
input: Optional[List[str]] = None
def text(self):
return self.input
class VariableNode(BaseModel):
"""用来设置变量"""
# key
variables: Optional[List[str]] = None
# vaulues
variable_value: Optional[List[str]] = []
model_config = ConfigDict(extra="forbid")
def text(self):
if self.variable_value:
text = {}
for index, value in enumerate(self.variable_value):
text[self.variables[index]] = value
return text
else:
return {}
class InputFileNode(BaseModel):
file_path: Optional[str] = None
file_name: Optional[str] = None
file_type: Optional[str] = None # tips for file
"""Output组件,用来控制输出"""
def text(self):
# judge if file_path is oss address
if not self.file_path:
return ''
return [self.file_path, self.file_name]
================================================
FILE: src/backend/bisheng_langchain/input_output/output.py
================================================
import json
from typing import Any, Dict, List, Optional
from venv import logger
from bisheng_langchain.chains import LoaderOutputChain
from langchain.callbacks.manager import AsyncCallbackManagerForChainRun, CallbackManagerForChainRun
from langchain.chains.base import Chain
from pydantic import ConfigDict, BaseModel
_TEXT_COLOR_MAPPING = {
'blue': '36;1',
'yellow': '33;1',
'pink': '38;5;200',
'green': '32;1',
'red': '31;1',
}
def get_color_mapping(
items: List[str], excluded_colors: Optional[List] = None
) -> Dict[str, str]:
"""Get mapping for items to a support color."""
colors = list(_TEXT_COLOR_MAPPING.keys())
if excluded_colors is not None:
colors = [c for c in colors if c not in excluded_colors]
color_mapping = {item: colors[i % len(colors)] for i, item in enumerate(items)}
return color_mapping
class Output(BaseModel):
"""Output组件,用来控制输出"""
@classmethod
def initialize(cls, file_path: str = None):
return file_path if file_path else ''
class Report(Chain):
# ```
# chain Dict:
# object: langchain_object
# node_id: object_key prefix
# input: triger query
# variables Dict:
# variable_name: name
# variable_value: value
# `
chains: Optional[List[Dict]]
variables: Optional[List[Dict]]
report_name: str
stop_flag: bool = False
input_key: str = 'report_name' #: :meta private:
output_key: str = 'text' #: :meta private:
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
@property
def input_keys(self) -> List[str]:
"""Expect input key.
:meta private:
"""
return [self.input_key]
@property
def output_keys(self) -> List[str]:
"""Return output key.
:meta private:
"""
return [self.output_key]
def validate_chains(cls, values: Dict) -> Dict:
"""Validate chains."""
if values.get('chains'):
for chain in values['chains']:
chain_output_keys = chain['object'].output_keys
if len(chain_output_keys) != 1:
raise ValueError(
'Chain used in Report should all have one output, got '
f"{chain['object']} with {len(chain_output_keys)} outputs."
)
return values
def func_call(self,
inputs: Dict[str, Any],
outputs: Dict[str, Any],
intermedia_stop: list,
chain: Chain,
node_id: str,
run_manager: Optional[CallbackManagerForChainRun] = None,):
question = list(inputs.values())[0]
_run_manager = run_manager or CallbackManagerForChainRun.get_noop_manager()
if isinstance(chain, LoaderOutputChain):
question = 'Get' + ','.join(question)
_run_manager.on_text(text='', log='', type='start', category='question')
_run_manager.on_text(text='', log=question, type='end', category='question')
_run_manager.on_text(text='', log='', type='start', category='answer')
message_reply = {'log': question, 'category': 'question'}
intermedia_stop.append(message_reply)
chain_outputs = chain(inputs, callbacks=_run_manager.get_child())
result = (chain_outputs.get(chain.output_keys[0])
if isinstance(chain_outputs, dict) else chain_outputs)
if isinstance(chain, LoaderOutputChain):
for schema in inputs.values():
result = json.loads(result)
for key in schema:
if result.get(key):
result_str = (';'.join([str(x) for x in result.get(key)])
if isinstance(result.get(key), list)
else result.get(key))
outputs.update({node_id+'_'+key: result_str})
result = json.dumps(result, ensure_ascii=False)
else:
outputs.update({node_id: result})
message_reply = {'log': result, 'category': 'answer'}
intermedia_stop.append(message_reply)
_run_manager.on_text(text='', log=result, type='end', category='answer')
async def func_acall(self,
inputs: Dict[str, Any],
outputs: Dict[str, Any],
intermedia_stop: list,
chain: Chain,
node_id: str,
run_manager: Optional[AsyncCallbackManagerForChainRun] = None,):
question = list(inputs.values())[0]
_run_manager = run_manager or AsyncCallbackManagerForChainRun.get_noop_manager()
if isinstance(chain, LoaderOutputChain):
question = 'Get' + ','.join(question)
await _run_manager.on_text(text='', log='', type='start', category='question')
await _run_manager.on_text(text='', log=question, type='end', category='question')
await _run_manager.on_text(text='', log='', type='start', category='answer')
message_reply = {'log': question, 'category': 'question'}
intermedia_stop.append(message_reply)
# process
try:
chain_outputs = await chain.arun(inputs, callbacks=_run_manager.get_child())
except Exception as e:
logger.exception(e)
await _run_manager.on_text(text='', log=str(e), type='stream', category='processing')
try:
chain_outputs = chain(inputs)
except Exception as e2:
logger.exception(e2)
await _run_manager.on_text(text='', log=str(e2), type='stream', category='processing')
chain_outputs = ''
result = (chain_outputs.get(chain.output_keys[0])
if isinstance(chain_outputs, dict) else chain_outputs)
if isinstance(chain, LoaderOutputChain):
for schema in inputs.values():
result = json.loads(result)
for key in schema:
if result.get(key):
result_str = (';'.join([str(x) for x in result.get(key)])
if isinstance(result.get(key), list)
else result.get(key))
outputs.update({node_id+'_'+key: result_str})
result = json.dumps(result, ensure_ascii=False)
else:
outputs.update({node_id: result})
message_reply = {'log': result, 'category': 'answer'}
intermedia_stop.append(message_reply)
await _run_manager.on_text(text='', log=result, type='end', category='answer')
def _call(
self,
inputs: Dict[str, Any],
run_manager: Optional[CallbackManagerForChainRun] = None,
verbose: Optional[bool] = None,
) -> Dict[str, str]:
intermedia_steps = []
outputs = {}
self.stop_flag = False
# variables
if self.variables and self.variables[0]:
for variable in self.variables:
variable_kv = variable['input']
for k, v in variable_kv.items():
outputs.update({variable['node_id']+'_'+k: v})
if self.chains:
for i, chain in enumerate(self.chains):
if 'node_id' not in chain:
logger.info(f"report_skip_nonsence_chain chain={chain['object']}")
continue
if not isinstance(chain['object'], Chain):
raise TypeError(
f"{chain['object']} not be runnable Chain object"
)
if isinstance(chain['object'], LoaderOutputChain):
# loaderchain questions use new parse
self.func_call(chain['input'], outputs, intermedia_steps,
chain['object'], chain['node_id'], run_manager)
continue
preset_question = chain['input']
for k, v in preset_question.items():
# log print
if isinstance(v, str):
self.func_call(preset_question, outputs, intermedia_steps,
chain['object'], chain['node_id']+'_'+v, run_manager)
else:
for question in v:
question_dict = {k: question}
self.func_call(question_dict, outputs, intermedia_steps,
chain['object'], chain['node_id']+'_'+question,
run_manager)
return {self.output_key: outputs, self.input_key: self.report_name,
'intermediate_steps': intermedia_steps}
async def _acall(
self,
inputs: Dict[str, Any],
run_manager: Optional[AsyncCallbackManagerForChainRun] = None,
verbose: Optional[bool] = None,
) -> Dict[str, Any]:
intermedia_steps = []
outputs = {}
await run_manager.on_text(text='', log='', type='end', category='processing') # end father start
self.stop_flag = False
# variables
if self.variables and self.variables[0]:
for variable in self.variables:
variable_kv = variable['input']
for k, v in variable_kv.items():
outputs.update({variable['node_id']+'_'+k: v})
# functions
if self.chains:
for i, chain in enumerate(self.chains):
if 'node_id' not in chain:
logger.info(f"report_skip_nonsence_chain chain={chain['object']}")
continue
if self.stop_flag:
break
if not isinstance(chain['object'], Chain):
raise TypeError(
f"{chain['object']} not be runnable Chain object"
)
if isinstance(chain['object'], LoaderOutputChain):
# loaderchain questions use new parse
await self.func_acall(chain['input'], outputs, intermedia_steps,
chain['object'], chain['node_id'], run_manager)
continue
# normal chain
preset_question = chain['input']
for k, v in preset_question.items():
if isinstance(v, str):
await self.func_acall(preset_question, outputs, intermedia_steps,
chain['object'], chain['node_id']+'_'+v, run_manager)
else:
for question in v:
question_dict = {k: question}
await self.func_acall(question_dict, outputs, intermedia_steps,
chain['object'], chain['node_id']+'_'+question,
run_manager)
# keep whole process paired
await run_manager.on_text(text='', log='', type='start', category='processing')
return {self.output_key: outputs, self.input_key: self.report_name,
'intermediate_steps': intermedia_steps}
def stop(self):
self.stop_flag = True
def stop_status(self):
return self.stop_flag
================================================
FILE: src/backend/bisheng_langchain/linsight/__init__.py
================================================
================================================
FILE: src/backend/bisheng_langchain/linsight/agent.py
================================================
import json
import time
from datetime import datetime
from typing import Optional, AsyncIterator
from langchain_core.language_models import BaseLanguageModel
from langchain_core.outputs import ChatGenerationChunk
from langchain_core.tools import BaseTool
from langchain_core.utils.function_calling import convert_to_openai_tool
from pydantic import BaseModel, Field
from bisheng_langchain.linsight.const import TaskMode, ExecConfig
from bisheng_langchain.linsight.event import BaseEvent
from bisheng_langchain.linsight.manage import TaskManage
from bisheng_langchain.linsight.prompt import SopPrompt, FeedBackSopPrompt, GenerateTaskPrompt
from bisheng_langchain.linsight.utils import record_llm_prompt, extract_json_from_markdown
class LinsightAgent(BaseModel):
"""
Agent for Linsight, a service that provides various functionalities.
"""
file_dir: Optional[str] = Field(default="", description='Directory for storing files')
query: str = Field(..., description='user question')
llm: BaseLanguageModel = Field(..., description='Language model to use for processing queries')
tools: Optional[list[BaseTool]] = Field(default_factory=list,
description='List of langchain tools to be used by the agent')
task_manager: Optional[TaskManage] = Field(default=None,
description='Task manager for handling tasks and workflows')
task_mode: str = Field(default=TaskMode.FUNCTION.value,
description="Mode of the task execute")
exec_config: ExecConfig = Field(default_factory=ExecConfig, description='执行过程中所需的配置')
async def parse_file_list_str(self, file_list: list[str]) -> str:
file_list_str = ""
if file_list:
file_list_str = "\n".join(file_list[:self.exec_config.max_file_num])
if len(file_list) > self.exec_config.max_file_num:
file_list_str += f"\n用户上传了{len(file_list)}份文件,此处只展示{self.exec_config.max_file_num}份。都储存在./目录下。"
file_list_str = f"<用户上传文件列表>\n{file_list_str}\n用户上传文件列表>"
return file_list_str
@staticmethod
async def parse_knowledge_list_str(knowledge_list: list[str]) -> str:
knowledge_list_str = ""
if knowledge_list:
knowledge_list_str = "\n".join(knowledge_list)
knowledge_list_str = f"<知识库列表>\n{knowledge_list_str}\n知识库列表>"
return knowledge_list_str
async def _parse_sop_content(self, sop_prompt: str) -> AsyncIterator[ChatGenerationChunk]:
# Add logic to process the SOP string
start_time = time.time()
one = None
sop_flag = False
sop_content = ""
answer = ""
split_tags = ["", ""]
async for one in self.llm.astream(sop_prompt):
answer += f"{one.content}"
if sop_flag:
yield one
sop_content += one.content
continue
for split_tag in split_tags:
if answer.find(split_tag) != -1:
sop_flag = True
sop_content = answer.split(split_tag)[-1].strip()
if sop_content:
one.content = sop_content
yield one
break
if not sop_content:
one.content = answer
yield one
if self.exec_config.debug and one:
record_llm_prompt(self.llm, sop_prompt, answer, one,
time.time() - start_time, self.exec_config.debug_id)
async def generate_sop(self, sop: str, file_list: list[str] = None, knowledge_list: list[str] = None) \
-> AsyncIterator[ChatGenerationChunk]:
"""
Generate a Standard Operating Procedure (SOP) based on the provided SOP string.
:param sop: The SOP string to be processed.
:param file_list: Optional list of files uploaded by the user.
:param knowledge_list: Optional list of knowledge bases to be considered.
:return: Processed SOP string.
"""
tools_str = json.dumps([convert_to_openai_tool(one) for one in self.tools], ensure_ascii=False, indent=2)
file_list_str = await self.parse_file_list_str(file_list)
knowledge_list_str = await self.parse_knowledge_list_str(knowledge_list)
sop_prompt = SopPrompt.format(query=self.query, sop=sop, tools_str=tools_str, file_list_str=file_list_str,
knowledge_list_str=knowledge_list_str)
# Add logic to process the SOP string
async for one in self._parse_sop_content(sop_prompt):
yield one
async def feedback_sop(self, sop: str, feedback: str, history_summary: list[str] = None,
file_list: list[str] = None, knowledge_list: list[str] = None) \
-> AsyncIterator[ChatGenerationChunk]:
"""
Provide feedback on the generated SOP.
:param sop: The SOP string to be reviewed.
:param feedback: Feedback string for the SOP.
:param history_summary: Optional summary of previous interactions.
:param file_list: Optional list of files uploaded by the user.
:param knowledge_list: Optional list of knowledge bases to be considered.
:return: Processed SOP with feedback applied.
"""
# Add logic to process the feedback on the SOP
if history_summary:
history_summary = "\n".join(history_summary)
else:
history_summary = ""
tools_str = json.dumps([convert_to_openai_tool(one) for one in self.tools], ensure_ascii=False, indent=2)
file_list_str = await self.parse_file_list_str(file_list)
knowledge_list_str = await self.parse_knowledge_list_str(knowledge_list)
sop_prompt = FeedBackSopPrompt.format(query=self.query, sop=sop, feedback=feedback, tools_str=tools_str,
history_summary=history_summary, file_list_str=file_list_str,
knowledge_list_str=knowledge_list_str)
async for one in self._parse_sop_content(sop_prompt):
yield one
async def generate_task(self, sop: str) -> list[dict]:
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
tools_str = json.dumps([convert_to_openai_tool(one) for one in self.tools], ensure_ascii=False, indent=2)
prompt = GenerateTaskPrompt.format(query=self.query, sop=sop, file_dir=self.file_dir,
current_time=current_time, tools_str=tools_str)
start_time = time.time()
res = await self.llm.ainvoke(prompt)
if self.exec_config.debug and res:
record_llm_prompt(self.llm, prompt, res.content, res,
time.time() - start_time, self.exec_config.debug_id)
# 解析生成的任务json数据
task = extract_json_from_markdown(res.content)
tasks = task.get('steps', [])
return TaskManage.completion_task_tree_info(tasks)
async def ainvoke(self, tasks: list[dict], sop: str, file_list: list[str] = None) -> AsyncIterator[BaseEvent]:
"""
Run the agent's main functionality.
:param tasks: List of tasks to be processed by the agent.
:param sop: Final SOP to be used in the agent's processing.
:param file_list: Optional list of files uploaded by the user.
"""
file_list_str = await self.parse_file_list_str(file_list)
# Add main functionality logic here
if not self.task_manager:
self.task_manager = TaskManage(tasks=tasks, tools=self.tools, task_mode=self.task_mode)
self.task_manager.rebuild_tasks(query=self.query, llm=self.llm, file_dir=self.file_dir, sop=sop,
exec_config=self.exec_config, file_list=file_list,
file_list_str=file_list_str)
async for one in self.task_manager.ainvoke_task():
yield one
async def continue_task(self, task_id: str, user_input: str) -> None:
"""
Continue processing a specific task by its ID.
:param task_id: The ID of the task to continue.
:param user_input: User input to be processed in the task.
"""
if not self.task_manager:
raise ValueError("Task manager is not initialized.")
if task_id not in self.task_manager.task_map:
raise ValueError(f"Task with ID {task_id} not found.")
result = self.task_manager.continue_task(task_id, user_input)
await result
async def get_all_task_info(self) -> list[dict]:
"""
Get all tasks managed by the agent.
:return: List of all tasks info.
"""
if not self.task_manager:
return []
return self.task_manager.get_all_task_info()
================================================
FILE: src/backend/bisheng_langchain/linsight/agent_test.py
================================================
import asyncio
import os
from langchain_community.chat_models import ChatTongyi
from pydantic import SecretStr
from bisheng.linsight.domain.services.workbench_impl import LinsightWorkbenchImpl
from bisheng.api.services.workstation import WorkStationService
from bisheng.common.constants.enums.telemetry import ApplicationTypeEnum
from bisheng.tool.domain.services.executor import ToolExecutor
from bisheng.tool.domain.services.tool import ToolServices
from bisheng_langchain.linsight.agent import LinsightAgent
from bisheng_langchain.linsight.const import TaskMode, ExecConfig
from bisheng_langchain.linsight.event import NeedUserInput, TaskStart, TaskEnd, ExecStep
async def get_linsight_agent():
azure_api_key = os.environ.get('azure_api_key')
qwen_api_key = os.environ.get('qwen_api_key')
root_path = "/Users/zhangguoqing/works/bisheng/src/backend/bisheng_langchain/linsight/data"
chat = ChatTongyi(api_key=SecretStr(qwen_api_key), model="qwen-max-latest", streaming=True,
model_kwargs={'incremental_output': True})
# chat = AzureChatOpenAI(azure_endpoint="https://ai-aoai05215744ai338141519445.cognitiveservices.azure.com/",
# api_key=azure_api_key,
# api_version="2024-12-01-preview",
# azure_deployment="gpt-4.1",
# max_retries=3,
# temperature=0,
# max_tokens=1000)
# 获取工作台配置的工具
ws_config = await WorkStationService.aget_config()
config_tool_ids = LinsightWorkbenchImpl._extract_tool_ids(ws_config.linsightConfig.tools or [])
tools = await ToolExecutor.init_by_tool_ids(config_tool_ids, app_id='linsight_test', app_name='linsight_test',
app_type=ApplicationTypeEnum.LINSIGHT,
user_id=0, llm=chat)
# 获取灵思预置的工具,本地文件处理和知识库检索
linsight_tools = await ToolServices.init_linsight_tools(root_path=root_path)
used_tools = linsight_tools + tools
# 获取本地文件相关工具
query = "分析该目录下的简历文件(仅限txt格式),挑选出符合要求的简历。要求包括:python代码能力强,有大模型相关项目经验,有热情、主动性高"
agent = LinsightAgent(llm=chat, query=query, tools=used_tools, file_dir=root_path,
task_mode=TaskMode.FUNCTION.value,
exec_config=ExecConfig(debug=True, debug_id="test"))
return agent
async def async_main():
agent = await get_linsight_agent()
sop_template = ""
# # 检索sop
# sop_documents, error_msg = await SOPManageService.search_sop("基于目录简历筛选大模型岗位候选人", 3)
# if not sop_documents:
# print("没有找到相关的SOP模板")
# return
# print(f"找到 {len(sop_documents)} 个相关SOP模板")
# print(f"sop_documents: {sop_documents}")
# sop_template = "\n\n".join([
# f"例子:\n\n{sop.page_content}"
# for sop in sop_documents if sop.page_content
# ])
sop = ""
async for one in agent.generate_sop(sop_template):
sop += one.content
print(f"first sop: {sop}")
# 反馈sop
feedback = "需要补充更多关于秦始皇兵马俑的历史背景信息"
feedback_sop = ""
async for one in agent.feedback_sop(sop, feedback, []):
feedback_sop += one.content
print(f"feedback sop: {feedback_sop}")
sop = feedback_sop
task_info = await agent.generate_task(sop)
print(f"task_info: {task_info}")
async for event in agent.ainvoke(task_info, sop):
if isinstance(event, NeedUserInput):
print("============ need user input ============")
user_input = input(f"需要用户输入,原因:{event.call_reason} (任务ID: {event.task_id}): ")
await agent.continue_task(event.task_id, user_input)
elif isinstance(event, TaskStart):
print(f"============ task start ============ {event}")
elif isinstance(event, TaskEnd):
print(f"============ task end ============ {event}")
elif isinstance(event, ExecStep):
print(f"============ exec step ============ {event}")
all_task_info = await agent.get_all_task_info()
print(all_task_info)
async def only_exec_task():
agent = await get_linsight_agent()
sop = """标准操作流程(SOP):
基于目录简历筛选大模型岗位候选人
---
**1. 问题概述**
本流程用于在指定目录下,从所有txt格式的简历文件中,自动筛选出满足如下岗位能力要求的候选人:
- Python代码能力强
- 有大模型相关项目经验
- 具备热情、主动性高等软素质
适用于批量简历文件筛查,输出筛选结果报告。
---
**2. 所需的工具和资源**
- @list_files:用于列出目录下所有txt文件
- @read_text_file:用于读取简历内容
- @search_text_in_file:辅助定位关键词
- @write_text_file:生成和写入筛选结果
**最佳实践:**优先批量处理文件,高效检索软硬技能,多维度关键词搜索。
---
**3. 步骤说明**
1. 使用@list_files获取指定目录下所有*.txt简历文件路径。
2. 对于每个txt简历文件:
a. 利用@read_text_file整段读取简历内容。
b. 分别搜索硬性条件关键词,例如“Python”,“编程”,“大模型”,“LLM”,“NLP”等,判断是否具备技术要求(可通过@search_text_in_file辅助确认)。
c. 搜索软性素质相关关键词如“热情”、“主动”、“自我驱动”、“积极”等。
3. 对所有满足上述三项筛选条件的简历,收集关键信息(如文件名、命中条件摘要)。
4. 结果输出:将筛选通过简历的关键信息,以Markdown格式写入到筛选报告(如筛选结果.md),便于后续查阅。
5. 最终输出“筛选结果.md”文件即为筛查结果报告。
---
**示例输出结构(Markdown)**
```markdown
# 简历筛选结果
## 满足条件的候选人列表
### 1. 文件名:resume_zhangsan.txt
- 技能:Python、NLP、大模型项目
- 软素质:热情、主动
### 2. 文件名:resume_lisi.txt
- 技能:Python、LLM开发
- 软素质:自我驱动、积极
...
```
---
**注意事项**
- 关键词匹配可适当使用同义词扩展,以防遗漏。
- 文件处理应确保不会丢失原始简历。
- 报告内容简明,利于人工后续甄别。
(本SOP适用于批量文本简历基于技术与素质条件的快速筛查任务)"""
task_info = [
{'step_id': 'step_1', 'description': '获取指定目录下所有txt格式的简历文件路径。', 'profile': '文件检索机器人',
'target': '列出/Users/zhangguoqing/works/bisheng/src/backend/bisheng_langchain/linsight/data下的所有txt格式简历文件路径',
'sop': '使用@list_files工具,检索所给目录下所有txt文件,返回完整路径列表。',
'prompt': '请使用@list_files工具列出/Users/zhangguoqing/works/bisheng/src/backend/bisheng_langchain/linsight/data目录下所有txt后缀简历文件的路径。',
'input': ['query'], 'node_loop': False, 'id': 'c984c953e8fd4c4bbee14d6090cf8718',
'next_id': ['85e43a1507b94ffabf7195f5559a9209']},
{'step_id': 'step_2', 'description': '批量读取每个简历文件内容并筛查是否符合岗位要求,收集通过的简历关键信息。',
'profile': '简历筛查机器人',
'target': '判断每份简历是否同时符合技术与软素质要求,并汇总关键信息(文件名、命中条件等)',
'sop': "对step_1返回的所有txt文件,依次读取原文,划分为:\n1. 检查是否包含Python相关技能与代码经验(如‘Python’、‘编程’、‘开发’等关键词)。\n2. 检查是否有大模型、LLM、NLP、Transformer、深度学习等相关项目或经验描述。\n3. 检查内容中是否有'热情'、'主动'、'自我驱动'、'积极'等软素质词语。\n4. 对三个条件全部满足的简历,提取文件名及命中关键词说明,组织成结构化信息。\n(检索与写作合并,避免大量细节传递)",
'prompt': '你需要读取step_1中每个txt简历,判断:\n- 是否包含Python代码能力、NLP、大模型、LLM等关键词,并描述相关项目经验;\n- 是否具备热情、主动、自我驱动等软素质(可扩展同义表达);\n对全部符合的简历,记录文件名、技能关键词、软素质关键词。\n返回一个用于报告的结构化信息列表。',
'input': ['step_1'], 'node_loop': True, 'id': '85e43a1507b94ffabf7195f5559a9209',
'next_id': ['380b4b7693c14568a45500c4a77f9413']},
{'step_id': 'step_3', 'description': '将筛查通过的简历结构化信息按Markdown格式输出为筛选结果报告。',
'profile': '报告生成机器人', 'target': '生成并写入筛查通过简历的报告文件(筛选结果.md)',
'sop': '根据step_2输出的信息,整理并生成符合指定模板的Markdown格式报告:\n1. 标题:简历筛选结果。\n2. 下设‘满足条件的候选人列表’,每个候选人包含文件名、技能命中、软素质命中。\n3. 调用@write_text_file将该内容写入‘筛选结果.md’。',
'prompt': '将step_2中收集到的通过简历关键信息,按如下Markdown格式生成报告内容,并写入筛选结果.md:\n# 简历筛选结果\n## 满足条件的候选人列表\n### 1. 文件名:xxx\n- 技能:xxx\n- 软素质:xxx\n...',
'input': ['step_2'], 'node_loop': False, 'id': '380b4b7693c14568a45500c4a77f9413'}]
async for event in agent.ainvoke(task_info, sop):
if isinstance(event, NeedUserInput):
print("============ need user input ============")
user_input = input(f"需要用户输入,原因:{event.call_reason} (任务ID: {event.task_id}): ")
await agent.continue_task(event.task_id, user_input)
elif isinstance(event, TaskStart):
print(f"============ task start ============ {event}")
elif isinstance(event, TaskEnd):
print(f"============ task end ============ {event}")
elif isinstance(event, ExecStep):
print(f"============ exec step ============ {event}")
all_task_info = await agent.get_all_task_info()
print(all_task_info)
if __name__ == '__main__':
asyncio.run(async_main())
# asyncio.run(only_exec_task())
================================================
FILE: src/backend/bisheng_langchain/linsight/const.py
================================================
from enum import Enum
from typing import Optional
from pydantic import BaseModel, Field
class ExecConfig(BaseModel):
debug: bool = Field(default=False, description="是否是调试模式。开启后会记录llm的输入和输出")
debug_id: Optional[str] = Field(default=None, description="调试记录唯一ID, 用来写唯一的文件")
tool_buffer: int = Field(default=50000, description='工具执行历史记录的最大token,超过后需要总结下历史记录')
max_steps: int = Field(default=200, description='单个任务最大执行步骤数,防止死循环')
retry_num: int = Field(default=3, description='灵思任务执行过程中模型调用重试次数')
retry_sleep: int = Field(default=5, description='灵思任务执行过程中模型调用重试间隔时间(秒)')
max_file_num: int = Field(default=5, description='生成SOP时,prompt里放的用户上传文件信息的数量')
retry_temperature: float = Field(default=1, description='重试时的模型温度')
file_content_length: int = Field(default=5000, description='拆分子任务时读取文件内容的字符数,超过后会截断')
max_file_content_num: int = Field(default=3, description='拆分子任务时读取的中间过程文件数量,按时间倒序')
CallUserInputToolName = "call_user_input"
class TaskStatus(Enum):
WAITING = 'waiting' # 待执行
PROCESSING = 'processing' # 执行中
INPUT = 'input' # 等待用户输入
INPUT_OVER = 'input_over' # 用户输入已完成
SUCCESS = 'success' # 任务成功
FAILED = 'failed' # 任务失败
# 任务执行模式
class TaskMode(str, Enum):
REACT = 'react' # React 模式
FUNCTION = 'func_call' # func call 模式
================================================
FILE: src/backend/bisheng_langchain/linsight/event.py
================================================
import time
from typing import Optional, Any
from pydantic import BaseModel, Field
class BaseEvent(BaseModel):
task_id: str = Field(..., description='触发事件的任务ID')
# 时间戳,单位秒
timestamp: int = Field(default_factory=lambda: int(time.time()), description='秒级时间戳')
# 任务步骤执行事件
class ExecStep(BaseEvent):
call_id: str = Field(..., description='执行步骤的唯一标识符')
call_reason: str = Field(..., description='执行步骤的原因')
name: str = Field(..., description='执行步骤的名称')
# params: str = Field(..., description='执行步骤的参数')
params: Optional[Any] = Field(default=None, description='执行步骤的参数')
output: Optional[str] = Field(default=None, description='工具执行的结果')
step_type: Optional[str] = Field(default="tool_call",
description='步骤类型。tool_call: 工具调用;react_step: 固定步骤或回答;')
status: str = Field(..., description='执行状态,start: 开始执行;end:执行结束')
# 额外信息
extra_info: Optional[dict] = Field(default={}, description='额外信息,包含文件上传等其他信息')
# 生成子任务的事件
class GenerateSubTask(BaseEvent):
subtask: list[dict] = Field(..., description='生成的子任务信息列表')
# 需要用户输入的事件
class NeedUserInput(BaseEvent):
call_reason: str = Field(..., description='需要用户输入的原因')
params: Optional[Any] = Field(default=None, description='执行步骤的参数')
step_type: Optional[str] = Field(default="call_user_input")
class TaskStart(BaseEvent):
name: str = Field(..., description='任务名称')
class TaskEnd(BaseEvent):
name: str = Field(..., description='任务名称')
status: str = Field(..., description='任务状态')
answer: str = Field(..., description='任务最终结果')
data: Any = Field(..., description='任务数据')
================================================
FILE: src/backend/bisheng_langchain/linsight/manage.py
================================================
import asyncio
import json
import traceback
from asyncio.queues import Queue
from functools import cached_property
from typing import Optional, AsyncIterator
from langchain_core.language_models import BaseLanguageModel
from langchain_core.tools import BaseTool
from langchain_core.utils.function_calling import convert_to_openai_tool
from pydantic import Field, BaseModel, model_validator, ConfigDict
from bisheng_langchain.linsight.const import TaskStatus, TaskMode, CallUserInputToolName, ExecConfig
from bisheng_langchain.linsight.event import BaseEvent
from bisheng_langchain.linsight.react_task import ReactTask
from bisheng_langchain.linsight.task import Task
from bisheng_langchain.linsight.utils import generate_uuid_str
class TaskManage(BaseModel):
"""
Task manager for handling tasks and workflows.
This class is responsible for managing the lifecycle of tasks,
including creation, execution, and monitoring.
"""
model_config = ConfigDict(arbitrary_types_allowed=True)
tasks: list[dict | Task] = Field(default_factory=list,
description='List of tasks managed by the task manager, not include sub task')
task_map: dict[str, Task] = Field(default_factory=dict, description='Map of task IDs to Task instances')
task_step_map: dict[str, Task] = Field(default_factory=dict, description='Map of step ID to Task instances')
tools: list[BaseTool] = Field(default_factory=list, description='List of tools managed by the tool manager')
tool_map: dict[str, BaseTool] = Field(default_factory=dict, description='Map of tool names to tool instances')
aqueue: Optional[Queue] = Field(default=None, description='Asynchronous queue for task processing')
task_mode: str = Field(default=TaskMode.FUNCTION.value,
description='Mode of the task execution, can be FUNCTION or REACT')
@model_validator(mode="after")
def validate_tasks(self) -> "TaskManage":
self.aqueue = Queue(maxsize=50)
self.tool_map = {tool.name: tool for tool in self.tools}
return self
def rebuild_tasks(self, query: str, llm: BaseLanguageModel, file_dir: str, sop: str,
exec_config: ExecConfig, file_list: list[str], file_list_str: str = '') -> None:
res = []
child_map = {} # task_id: [child_task]
first_task = True
for task in self.tasks:
if not isinstance(task, dict):
raise TypeError(f"Task must be an instance of dict, not {type(task)}")
if self.task_mode == TaskMode.FUNCTION.value:
task_instance = Task(**task,
query=query,
task_manager=self,
llm=llm,
file_dir=file_dir,
finally_sop=sop,
exec_config=exec_config,
file_list=file_list,
file_list_str=file_list_str)
else:
task_instance = ReactTask(**task,
query=query,
task_manager=self,
llm=llm,
file_dir=file_dir,
finally_sop=sop,
exec_config=exec_config,
file_list=file_list,
file_list_str=file_list_str)
task_instance.first_task = first_task
first_task = False
if task_instance.parent_id is None:
res.append(task_instance)
continue
if task_instance.parent_id not in child_map:
child_map[task_instance.parent_id] = []
child_map[task_instance.parent_id].append(task_instance)
for one in res:
if one.id in child_map:
one.children = child_map[one.id]
self.tasks = res
self.task_map = {}
self.task_step_map = {}
for task in self.tasks:
self.task_map[task.id] = task
self.task_step_map[task.step_id] = task
def get_all_task_info(self) -> list[dict]:
"""
Retrieve all tasks managed by the task manager.
:return: List of task information.
"""
res = []
sub_task = []
for one in self.tasks:
res.append(one.get_task_info())
if one.children:
for child in one.children:
sub_task.append(child.get_task_info())
# 将子任务信息也添加到结果中
res.extend(sub_task)
return res
@cached_property
def get_all_tool_schema(self) -> list[dict]:
"""
Retrieve all tools managed by the tool manager.
:return: List of tools input schema.
"""
# 所有tool的schema里增加一个`call_reason`的必填字段,让模型总结下为啥需要使用这个工具
res = []
for one in self.tools:
schema = convert_to_openai_tool(one)
if "call_reason" not in schema["function"]["parameters"]["properties"]:
# 所有的工具都加一个调用原因的字段
schema["function"]["parameters"]["properties"]["call_reason"] = {
"type": "string",
"description": "The reason for calling this tool, generated by the model."
}
if "required" not in schema["function"]["parameters"]:
schema["function"]["parameters"]["required"] = []
schema["function"]["parameters"]["required"].append("call_reason")
res.append(schema)
res.append({
"type": "function",
"function": {
"name": CallUserInputToolName,
"description": "在你需要用户帮助或需要用户补充信息或确认内容的时候调用此工具,注意询问用户的时候不能使用回答。例如解决问题的规划,执行一个比较耗时的操作,并且请说明需要人类的原因。",
"parameters": {
"type": "object",
"properties": {
"call_content": {
"type": "string",
"description": "你需要在这里总结询问的前因后果,并生成问题询问用户。"
},
"call_title": {
"type": "string",
"description": "你可以在这里简要描述你需要询问用户的标题,方便用户理解。"
}
},
},
"required": [
"call_content",
"call_title"
]
}
})
return res
@cached_property
def get_all_tool_schema_str(self) -> str:
"""
Retrieve all tools managed by the tool manager as a JSON string.
:return: JSON string of tools input schema.
"""
return json.dumps(self.get_all_tool_schema, ensure_ascii=False, indent=2)
async def ainvoke_tool(self, name: str, params: dict) -> (str, bool):
"""
Add a new tool to the tool manager.
:param name: The name of the tool to be executed.
:param params: The params of the tool to be invoked.
:return: A tuple containing the result of the tool execution and a boolean indicating success.
"""
if name not in self.tool_map:
return f"tool {name} exec error, because tool name is not found", False
if not params.get("call_reason"):
return f"tool {name} exec error, because call_reason field is required.", False
params.pop("call_reason")
try:
res = await self.tool_map[name].ainvoke(input=params)
if not isinstance(res, str):
res = str(res)
return res, True
except Exception as e:
traceback.print_exc()
return f"tool {name} exec error, something went wrong: {str(e)}", False
@classmethod
def completion_task_tree_info(cls, original_task: list[dict]) -> list[dict]:
"""
目前只支持一级任务串行!!!
将模型生成的任务列表转换为完整的任务树信息,补全下游节点的信息
"""
task_map = {}
task_step_map = {}
root_task = []
no_root_task = []
need_input_task = {} # step_id: {task}
for one in original_task:
one["id"] = generate_uuid_str()
task_map[one["id"]] = one
task_step_map[one["step_id"]] = one
# 不需要其他任务输入,或者只需要用户问题的 属于根节点
if not one.get("input") or (len(one.get("input")) == 1 and one["input"][0] == "query"):
root_task.append(one)
else:
# 需要其他任务输入的 属于非根节点。记录下需要哪些任务的输入
for input_key in one["input"]:
if input_key == "query":
continue
if input_key not in need_input_task:
need_input_task[input_key] = set()
need_input_task[input_key].add(one["id"])
# 补充下游节点的信息
for one in original_task:
if need_input_task.get(one["step_id"]):
one["next_id"] = list(need_input_task[one["step_id"]])
one['display_target'] = one.get('target')
one['sop'] = one.get('workflow', '')
return original_task
def add_tasks(self, tasks: list[Task | ReactTask]) -> None:
"""
when generate subtasks call this method.
Add a list of tasks to the task manager.
:param tasks: List of Task instances to be added.
"""
for task in tasks:
self.task_map[task.id] = task
async def get_step_answer(self, step_id: str) -> str:
""" 获取某个步骤的答案 """
if step_id not in self.task_step_map:
return f"not found step_id: {step_id}"
return await self.task_step_map[step_id].get_answer()
def get_processed_steps(self):
"""Get the steps that have been processed."""
success_steps = []
for task in self.tasks:
if task.status == TaskStatus.SUCCESS.value:
success_steps.append(task.step_id)
return "你现在已经完成了" + ",".join(success_steps) if success_steps else ''
def get_depend_step(self, step_id: str) -> str:
depend_steps = []
if step_id not in self.task_step_map:
return ""
task = self.task_step_map[step_id]
next_ids = task.next_id
while next_ids:
new_next_ids = []
for next_id in next_ids:
if next_id not in self.task_map:
continue
next_task = self.task_map[next_id]
depend_steps.append(next_task.step_id)
if next_task.next_id:
new_next_ids.extend(next_task.next_id)
next_ids = new_next_ids
return ",".join(list(set(depend_steps)))
def get_step_list(self):
res = []
for task in self.tasks:
if task.parent_id:
continue
res.append({
'step_id': task.step_id,
'target': task.target,
'description': task.description
})
return res
async def catch_task_exception(self, task: Task) -> None:
try:
await task.ainvoke()
except Exception as e:
task.status = TaskStatus.FAILED.value
task.answer.append(str(e)[:-100])
raise e
async def ainvoke_task(self) -> AsyncIterator[BaseEvent]:
for task in self.tasks:
async_task = asyncio.create_task(self.catch_task_exception(task))
while not async_task.done():
while not self.aqueue.empty():
res = await self.aqueue.get()
yield res
await asyncio.sleep(0.1)
while not self.aqueue.empty():
res = await self.aqueue.get()
yield res
if task_exception := async_task.exception():
raise task_exception
if task.status == TaskStatus.FAILED.value:
raise Exception(f"Task {task.step_id} failed with error: {task.get_finally_answer()}")
async def continue_task(self, task_id: str, user_input: str) -> None:
"""
Continue processing a specific task by its ID.
:param task_id: The ID of the task to continue.
:param user_input: User input to be processed in the task.
"""
if task_id not in self.task_map:
raise ValueError(f"Task with ID {task_id} not found.")
await self.task_map[task_id].handle_user_input(user_input)
================================================
FILE: src/backend/bisheng_langchain/linsight/prompt.py
================================================
from pydantic import BaseModel
# 生成sop的prompt模板, variables -> query: 用户问题;sop:参考sop; tools_str: 已有工具字符串;file_list_str: 用户上传的文件名列表
# knowledge_list_str: 用户有权限的知识库列表
SopPrompt = """<背景>
你需要根据用户需求创建一个指导手册(SOP),指导手册指的是通过标准步骤指导大模型解决用户的需求。
背景>
<指导手册包含内容>
1. 问题概述 - 简要描述问题和目标,需要体现本指导手册的适用范围
2. 所需的工具和资源 - 列出解决此类问题所需的工具、库或资源(需要是已有可获取的),以及使用工具的最佳实践。
3. 步骤说明 - 提供清晰的步骤指导。
3.1 由于每个步骤是不同的Agent来进行处理,不同的Agent之间可传递的信息不宜过多,通过写入中间文件然后读取的方式来传递大量信息。
指导手册包含内容>
<指导手册格式要求>
指导手册结构
- 概述
- 背景和适用场景
- 目标
- 所需工具和资源
- 步骤说明
- 步骤概述
- 本步骤目标
- 本步骤交付结果
- 依赖前序步骤
- 拆解为多个互不影响的子步骤执行
- 步骤详情(标题序号需要是(1),(2)等等)
- 注意事项
- 总结
使用@来说明使用什么工具,文件以及知识库,必须遵循以下格式:
工具的表示方法:@工具名@
用户上传文件的表示方法:@文件名的文件储存信息:{{'文件储存在语义检索库中的id':'{{id}}','文件储存地址':'{{文件路径}}'}}@
知识库的表示方法:@知识库名的储存信息:{{'知识库储存在语义检索库中的id':'{{id}}'}}@
输出文件的表示方法:文件名
指导手册格式要求>
{file_list_str}
{knowledge_list_str}
<已有工具列表>
{tools_str}
已有工具列表>
<参考指导手册>
{sop}
参考指导手册>
<用户需求>
{query}
用户需求>
输出应当是Markdown格式,便于阅读和理解。请确保指导手册是实用的,可以帮助用户解决类似问题。
你需要先一步一步的思考,然后再输出指导手册。思考需要被包含在和
思考过程:"""
# 调整sop时的反馈prompt模板, variables -> query: 用户问题;sop:参考sop;feedback:用户反馈; history_summary: 历史执行过程
# variables -> tools_str: 已有工具字符串; file_list_str: 用户上传的文件名列表; knowledge_list_str: 用户有权限的知识库列表
FeedBackSopPrompt = """基于以下信息创建一个指导手册(SOP):
{file_list_str}
{knowledge_list_str}
<已有工具列表>
{tools_str}
已有工具列表>
<用户需求>
{query}
用户需求>
<待优化指导手册>
{sop}
待优化指导手册>
用户对指导手册的反馈:
{feedback}
请基于以上内容和反馈创建一个清晰、结构化,且更好满足用户需求的指导手册:
<指导手册包含内容>
1. 问题概述 - 简要描述问题和目标,需要体现本指导手册的适用范围
2. 所需的工具和资源 - 列出解决此类问题所需的工具、库或资源(需要是已有可获取的),以及使用工具的最佳实践。
3. 步骤说明 - 提供清晰的步骤指导,最后一个步骤一定要是交付与汇报,在这个步骤里明确描述出交付物是什么。
3.1 由于每个步骤是不同的Agent来进行处理,不同的Agent之间可传递的信息不宜过多,通过写入中间文件然后读取的方式来传递大量信息。
4. 注意需要保持各层级标题的序号,并且序号格式需要和待优化指导手册中的相同(特别注意步骤概述的下级标题需要需要加上括号())。(除非用户反馈说更改序号)
指导手册包含内容>
<指导手册格式要求>
指导手册结构
- 概述
- 背景和适用场景
- 目标
- 所需工具和资源
- 步骤说明
- 步骤概述
- 本步骤目标
- 本步骤交付结果
- 依赖前序步骤
- 拆解为多个互不影响的子步骤执行
- 步骤详情(下级标题序号需要是(1),(2)等等)
- 注意事项
- 总结
工具的表示方法:@工具名@
用户上传文件的表示方法:@文件名的文件储存信息:{{'文件储存在语义检索库中的id':'{{id}}','文件储存地址':'{{文件路径}}'}}@
知识库的表示方法:@知识库名的储存信息:{{'知识库储存在语义检索库中的id':'{{id}}'}}@
输出文件的表示方法:文件名
指导手册格式要求>
输出应当是Markdown格式,便于阅读和理解。请确保指导手册是实用的,可以帮助用户解决类似问题。
你需要先一步一步的思考,然后再输出指导手册。思考需要被包含在和
思考过程:"""
# 生成一级子任务的prompt模板, variables -> current_time: 当前时间;file_dir: 用户上传的文件路径;sop: 用户SOP;query: 用户问题
GenerateTaskPrompt = """<背景资料>
你是一个任务规划专家,请根据用户的问题和指导手册,规划出完成任务需要多少个具体的步骤,每个步骤需要完成哪些任务,以及这些步骤之间是如何协同工作的。
背景资料>
<要求>
1. 根据用户的问题和指导手册,规划出粗粒度的步骤。
2. 具体哪些步骤来完成这些步骤。以及他们之间的协同工作方式。
3. 如果用户需求特别简单,例如只需要执行一个步骤,请直接返回一个步骤的Json。
4. 指导手册中提到的细节,例如使用了工具,对过程的详细描述,各种要求都一定要体现在生成的步骤中。
要求>
<已有工具列表>
{tools_str}
已有工具列表>
<步骤规划结果Json格式要求>
```json
{{
"total_thought": "思考需要拆分为几个步骤,以及为什么需要拆分成这几个步骤。",
"steps": [
{{
"thought": "思考为什么需要这个步骤,以及这个步骤的每一个字段应该有什么内容。",
"step_id": "step_1",
"profile": "step_1的profile",
"target": "step_1的target",
"workflow": "step_1的workflow,需要包含资源(工具,以及工具可能的参数,完整文件路径等等),步骤(当前的步骤)等信息",
"precautions": "step_1的注意事项",
"input_thought": "思考input需要依赖哪些前置步骤,并明确思考需要输入几个步骤的内容,分别的step_id是多少,涉及到工具使用的,需要思考应该使用这个工具的哪个参数。",
"input": [""],
"node_loop": true/false
}}
,....
]
}}
```
<字段解释>
"thought": 思考为什么需要这个步骤,以及这个步骤的每一个字段应该有什么内容,还需要思考input都需要依赖哪些前置步骤,并明确思考需要输入几个步骤的内容,分别的step_id是多少,涉及到工具使用的,需要思考应该使用这个工具的哪个参数。
"workflow": 精确描述这个步骤的执行流程,以及需要使用哪些工具,以及工具的参数。用户提供指导手册中的[步骤详情]字段专门用来描述用户期望的步骤的执行流程,你必须尽可能遵守。
"precautions": 这一步的注意事项。用户提供的[注意事项]字段专门用来描述用户期望的步骤的注意事项,你必须尽可能遵守。
"input": 本步骤的输入,必须是前置步骤的step_id或"query",可以多个。"query"代表用户的原始问题。
"node_loop": 表示本步骤是否在内部需要拆分多个步骤来处理,通常在相似需求需要重复执行的时候需要拆分多个步骤来处理,用户提供的[拆解为多个互不影响的子步骤]字段专门用来描述用户期望本步骤是否进行拆分。
字段解释>
步骤规划结果Json格式要求>
<标准信息>
当前时间:{current_time}
当前路径:{file_dir}
标准信息>
<用户提供的指导手册>
{sop}
用户提供的指导手册>
<用户问题>
{query}
用户问题>
无论如何,你都应该生成完整的步骤 List Json。
"""
# 单个agent的prompt模板
# variables -> profile:agent角色; current_time: 当前时间;file_dir: 用户上传的文件路径;sop: 用户SOP;query: 用户最终问题;
# step_list: 任务整体规划;processed_steps: 已经处理的步骤;input_str: 用户输入信息;step_id: 当前任务id
# target: 当前任务目标;single_sop: 当前任务遵循的SOP
SingleAgentPrompt = """你是一个强大的{profile},可以使用提供的工具来回答用户问题并执行任务。
在最后的回答中,需要包含接下来需要执行步骤所需的所有信息,例如本次任务的结论,文件保存的路径等等
以下是一些标准信息:
当前时间:{current_time}
当前路径:{file_dir}
用户最终问题:
"{query}"
用户提供的完整指导手册(SOP):
{sop}
这是任务整体规划:
{step_list}
{processed_steps}
{input_str}
当前任务为:{step_id},步骤目标为:
{target}
当你完成了阶段目标,应该结束执行。
当前应该遵守的指导手册(SOP):
{single_sop}
注意事项:
{precautions}
请根据阶段目标,使用适当的工具来完成任务,如果是最后一步,回答需要明确当前任务的产出内容是什么。"""
class TaskItem(BaseModel):
思考: str
标题层级类型: str
标题层级: str
当前目标: str
当前方法: str
输出方法: str
class SplitEvent(BaseModel):
总体思考: str
总体任务目标: str
总体方法: str
已经完成的内容: str
可用资源: str
任务列表: list[TaskItem]
# 并发agent拆分子任务的prompt模板
# variables -> query: 用户问题;sop: 用户SOP;step_list: 任务整体规划;
# processed_steps: 已经处理的步骤;input_str: 前置任务的输出; prompt: 当前阶段问题;file_content: 用户上传的文件内容或者中间文件内容
LoopAgentSplitPrompt = """你是一名专业的流程拆解专家,请根据用户提供的任务要求,将复杂内容拆分为清晰、完整且互不重复的并行操作任务。请按以下规则执行:
你需要先分析再拆解,分析用户的问题,并根据问题进行拆解。
你的拆解将会逐个送入接下来的流程节点中进行处理。
接下来的流程节点会根据你的拆解结果,逐个进行**并行**处理,因此,接下来的流程节点的所有上下文是独立的,需要你确保拆解结果的独立性,因此拆解的任务之间不能互相依赖。
对于有层级结构的标题,每个层级都应该有独立的任务,并且非最小层级要修改对应的“当前目标”,明确说明只需要写标题。
!!!一定不能为了节省篇幅,只输出部分示例,必须输出完整的所有的拆分任务。!!!
首先你要输出每个任务都共享的内容:
1. 总体思考。先判断任务数量,然后根据任务数量判断按照什么粒度进行拆分,分析应该拆分成几个任务。
2. 总体任务目标。
3. 总体方法。
4. 已经完成的内容。
针对每个任务,你需要输出以下内容:
1. 思考。一步一步分析以下内容应该如何填写,给出你的理由。
2. 标题层级类型。当前标题下没有更多的标题,认为是“最小层级”,否则认为是非最小层级,对于非最小层级,标题层级类型为“非最小层级”。对于最小层级,标题层级类型为“最小层级”。
3. 标题层级。如果输出方法为写入文件,则需要包含标题与标题层级(明确说明每个标题用几个#号),否则为空。
4. 当前目标。对于非最小层级,目标只需要说明写标题。对于最小层级,目标中需要包含**所有**需要完成的事情。
5. 当前方法。当前方法要参考总体方法,例如使用工具的情况不能遗漏。
6. 输出方法。例如总结回答,写入文件,生成图片路径等等,如果为写入文件,需要明确文件地址。
用户最终问题:
{query}
用户提供的完整指导手册(SOP):
{sop}
这是任务整体规划:
{step_list}
你现在已经完成了{processed_steps}
{input_str}
{file_content}
请用以下格式模板响应:
```json
{{
"总体思考": "<总体思考,先判断可能的任务数,然后判断按照什么粒度进行拆分>",
"总体任务目标": "<总体任务目标>",
"总体方法": "<总体方法>",
"已经完成的内容": "<已经完成的内容>",
"可用资源": "<可用资源,例如参考资料,文件等>",
"任务列表": [
{{
"思考": "<思考>",
"标题层级类型": "最小层级/非最小层级",
"标题层级": "<标题层级>",
"当前目标": "<当前目标>",
"当前方法": "<当前方法>",
"输出方法": "<输出类型>",
}},
{{
"思考": "<思考>",
"标题层级类型": "最小层级/非最小层级",
"标题层级": "<标题层级>",
"当前目标": "<当前目标>",
"当前方法": "<当前方法>",
"输出方法": "<输出类型>",
}}
]
}}
```
阶段问题:
{prompt}
注意事项:
{precautions}
!!!无论需求列表有多长,你都必须在输出的JSON输出完整的所有的拆分任务,不能有任何的省略。!!!
"""
# 并发执行子任务的agent的prompt模板
# variables -> profile: agent的角色;current_time: 当前时间;file_dir: 用户上传的文件路径;
# original_query: 总体任务目标;original_method: 总体方法;original_done: 已经完成的内容;last_answer: 上步骤的答案
# single_sop: 当前任务遵循的SOP;step_id: 当前任务id; target: 当前任务目标;
LoopAgentPrompt = """你是一个强大的{profile},可以使用提供的工具来回答用户问题并执行任务。
在最后的回答中,需要包含接下来需要执行步骤所需的所有信息,例如本次任务的结论,文件保存的路径等等
以下是一些标准信息:
当前时间:{current_time}
当前路径:{file_dir}
整体任务目标:
{original_query}
整体方法:
{original_method}
已经完成的内容:
{original_done}
{last_answer}
当前方法:
{single_sop}
当前任务为:{step_id},步骤目标为:
{target}
请根据用户问题,使用适当的工具来完成任务。当你完成了当前用户问题,应该明确当前任务的产出内容是什么,并结束执行。"""
# 历史记录总结的prompt模板, 在历史记录过长时使用
# 二级任务: sop: 当前方法; query: 当前目标; history_str: 历史记录字符串
# 一级任务:sop: sop; query: prompt; history_str: 历史记录字符串
SummarizeHistoryPrompt = """请基于以下对话历史记录尝试回答用户问题,并明确完成任务还需要做什么:
要求:
1. 基于已有历史记录对用户问题进行阶段性回答。
2. 要完成任务还需要做什么?
3. 输出包含以下三个部分,首先是基于历史记录对用户问题的完整答案,需要尽可能详细。然后是已经完成的内容,最后是下一步需要做的工作。
标准执行步骤:
{sop}
用户问题:
{query}
历史记录:
{history_str}
回答:"""
# 总结答案的prompt模板, 用于总结一个Agent的执行内容,提取出下一个Agent需要的信息
# variables -> history_str: 已经执行的步骤内容;step_list: 任务整体规划;step_id: 当前任务的step_id;depend_step: 依赖当前任务的step_id
SummarizeAnswerPrompt = """现在有一个多Agent系统,现在给你其中一个Agent执行的所有步骤内容,你需要总结这个Agent传递给其他Agent所必要的信息。
已经执行的步骤内容:
{history_str}
任务整体规划:
{step_list}
当前任务为:{step_id}。
依赖你输出的任务是{depend_step}。
输出内容需要放入json结构体中,json结构体如下:
如果是目录,每个目录结构需要有“输出目录层级”这个key,值为目录层级.
需要有“思考”这个字段,在json的一开始,依赖你输出的任务只依赖现在的输出作为输入,因此需要仔细思考应该输出哪些内容,输出的细节程度是什么样。
需要有“已执行步骤概述”字段,来清晰总结已经做了哪些事情。
如果写入了文件,需要给出写入文件的目录结构和层级标题。(markdown格式需要给出#)
```json
```
现在你需要总结出所有{depend_step}所需要本任务输出的内容:"""
================================================
FILE: src/backend/bisheng_langchain/linsight/react_prompt.py
================================================
# 一级任务的prompt模板
# variables -> profile: task角色; current_time: 当前时间;file_dir: 用户上传的文件路径;
# tools_json: 可用的工具列表;sop: 用户SOP;query: 用户最终问题;
# step_list: 任务整体规划;processed_steps: 已经处理的步骤;input_str: 用户输入信息;step_id: 当前任务id
# target: prompt;single_sop: 当前任务遵循的SOP; history: 已经执行的步骤; file_list_str: 用户上传的文件列表
ReactSingleAgentPrompt = """你是一个强大的{profile},可以使用以下工具来回答用户问题并执行任务。
请使用ReAct (Reasoning + Acting)方法,思考并使用工具解决问题。
每一步都要清晰地思考你需要做什么,然后采取行动。
如果出现了多次调用工具失败或错误或多次重复调用,请告诉用户,并通过把"结束"设置为True来停止执行。
以下是一些标准信息:
当前时间:{current_time}
当前路径:{file_dir}
{file_list_str}
可用工具列表:
{tools_json}
按照以下格式生成单步回答:
你可以输出两种类型的react结构体,一种是调用工具,一种是调用固定步骤。
固定步骤结构体说明:
固定步骤只有两个选择,分别是回答和生成规划。
以下内容中被<>包围的内容,需要被替换为实际的内容。
步骤名:回答
描述:生成回答。
参数:空字典
观察:<给用户的最终答案>
步骤名:生成规划
描述:生成解决问题的规划
参数:空字典
观察:<规划的具体内容和步骤>
固定步骤结构体:
```json
{{
"思考": "<你的推理过程,分析应该使用哪个工具和如何解决问题>",
"结束": "<完成了阶段目标则结束,如果结束,为True,否则为False>",
"类型": "固定步骤",
"行动": "<步骤名>",
"参数": {{}} ,
"调用原因": "<调用原因>",
"生成内容": "<生成内容>"
}}
```
工具结构体说明:
以下内容中被<>包围的内容,需要被替换为实际的内容。
工具结构体:
```json
{{
"思考": "<你的推理过程,分析应该使用哪个工具和如何解决问题>",
"结束": "<完成了阶段目标则结束,如果结束,为True,否则为False>",
"类型": "工具",
"行动": "<工具名称>",
"参数": "<工具参数的JSON格式>"
}}
```
注意,生成工具节点时,观察都为空!!
... (可重复思考-行动-观察)
用户最终问题:
"{query}"
用户提供的完整指导手册(SOP):
{sop}
这是任务整体规划:
{step_list}
{processed_steps}
{input_str}
当前任务为:{step_id},目标为:
{target}
当你完成了当前目标,应该结束执行。
当前应该遵守的指导手册(SOP):
{single_sop}
已经执行的步骤:
{history}
只生成下一步的操作,如果下一步是最后一步,回答需要明确当前任务的产出内容是什么:
你应该先一步一步思考,思考放在和之间,再输出json。
"""
# 二级子任务的prompt模板
# variables -> profile: agent的角色;current_time: 当前时间;file_dir: 用户上传的文件路径;tools_json: 可用的工具列表;
# original_query: 总体任务目标;original_method: 总体方法;original_done: 已经完成的内容;last_answer: 上步骤的答案
# single_sop: 当前任务遵循的SOP;step_id: 当前任务id; target: 当前任务目标;history: 历史记录; file_list_str: 文件列表字符串
ReactLoopAgentPrompt = """你是一个强大的{profile},可以使用以下工具来回答用户问题并执行任务。
请使用ReAct (Reasoning + Acting)方法,思考并使用工具解决问题。
每一步都要清晰地思考你需要做什么,然后采取行动。
如果出现了多次调用工具失败或错误或多次重复调用,请告诉用户,并通过把"结束"设置为True来停止执行。
以下是一些标准信息:
当前时间:{current_time}
当前路径:{file_dir}
{file_list_str}
可用工具:
{tools_json}
按照以下格式生成单步回答:
你可以输出两种类型的react结构体,一种是调用工具,一种是调用固定步骤。
固定步骤结构体说明:
固定步骤只有两个选择,分别是回答和生成规划。
以下内容中被<>包围的内容,需要被替换为实际的内容。
步骤名:回答
描述:生成回答。
参数:空字典
观察:<给用户的最终答案>
步骤名:生成规划
描述:生成解决问题的规划
参数:空字典
观察:<规划的具体内容和步骤>
固定步骤结构体:
```json
{{
"思考": "<你的推理过程,分析应该使用哪个工具和如何解决问题>",
"结束": "<完成了阶段目标则结束,如果结束,为True,否则为False>",
"类型": "固定步骤",
"行动": "<步骤名>",
"参数": {{}} ,
"调用原因": "<调用原因>",
"生成内容": "<生成内容>"
}}
```
工具结构体说明:
以下内容中被<>包围的内容,需要被替换为实际的内容。
工具结构体:
```json
{{
"思考": "<你的推理过程,分析应该使用哪个工具和如何解决问题>",
"结束": "<完成了阶段目标则结束,如果结束,为True,否则为False>",
"类型": "工具",
"行动": "<工具名称>",
"参数": "<工具参数的JSON格式>"
}}
```
注意,生成工具节点时,观察都为空!!
... (可重复思考-行动-观察)
整体任务目标:
{original_query}
整体方法:
{original_method}
已经完成的内容:
{original_done}
{last_answer}
当前方法:
{single_sop}
当前任务为:{step_id},目标为:
{target}
当你完成了当前目标,应该结束执行。
已经执行的步骤:
{history}
只生成下一步的操作,如果下一步是最后一步,回答需要明确当前任务的产出内容是什么:
你应该先一步一步思考,思考放在和之间,再输出json。
"""
================================================
FILE: src/backend/bisheng_langchain/linsight/react_task.py
================================================
import asyncio
import copy
import json
import logging
from datetime import datetime
from langchain_core.messages import ToolMessage, AIMessage, HumanMessage, BaseMessage
from bisheng_langchain.linsight.const import TaskStatus, CallUserInputToolName
from bisheng_langchain.linsight.event import NeedUserInput, ExecStep
from bisheng_langchain.linsight.react_prompt import ReactSingleAgentPrompt, ReactLoopAgentPrompt
from bisheng_langchain.linsight.task import BaseTask
from bisheng_langchain.linsight.utils import encode_str_tokens, generate_uuid_str, \
extract_json_from_markdown
class ReactTask(BaseTask):
async def get_history_str(self) -> str:
"""Get the history string for the history."""
history_str = ""
tool_messages = []
remain_messages = []
for one in self.history:
history_str += "\n" + one.content
if isinstance(one, ToolMessage) or "tool_calls" in one.additional_kwargs:
tool_messages.append(one)
else:
remain_messages.append(one)
all_tool_messages_str = json.dumps([json.loads(one.content) for one in tool_messages], ensure_ascii=False,
indent=2)
if len(encode_str_tokens(all_tool_messages_str)) > self.exec_config.tool_buffer:
messages_str = ''
for one in self.history:
messages_str += "\n" + one.content + ","
messages_str = messages_str.rstrip(",")
messages_str = f"[{messages_str}\n]"
history_summary = await self.summarize_history(messages_str)
# 将总结后的历史记录插入到system_message后面
remain_messages.append(AIMessage(content=history_summary))
self.history = remain_messages
return "\n".join([one.content for one in remain_messages])
return history_str
async def build_messages_with_history(self) -> list[BaseMessage]:
"""Build messages with history for the React task."""
# It should return a prompt that will be used in the React task.
current_time = datetime.now().strftime("%Y-%m-%d %H")
tools_json = self.task_manager.get_all_tool_schema_str
history_str = await self.get_history_str()
if self.node_loop and self.parent_id:
prompt = ReactLoopAgentPrompt.format(profile=self.profile,
current_time=current_time,
file_dir=self.file_dir,
tools_json=tools_json,
original_query=self.original_query,
original_method=self.original_method,
original_done=self.original_done,
last_answer=await self.get_input_str(),
single_sop=self.sop,
step_id=self.step_id,
target=self.target,
history=history_str,
file_list_str=self.file_list_str)
else:
prompt = ReactSingleAgentPrompt.format(profile=self.profile,
current_time=current_time,
file_dir=self.file_dir,
tools_json=tools_json,
sop=self.finally_sop,
query=self.query,
step_list=self.task_manager.get_step_list(),
processed_steps=self.task_manager.get_processed_steps(),
input_str=await self.get_input_str(),
step_id=self.step_id,
target=self.target,
single_sop=self.sop,
history=history_str,
file_list_str=self.file_list_str)
return [HumanMessage(content=prompt)]
async def parse_react_result(self, content: str) -> (BaseMessage, bool):
response_json = extract_json_from_markdown(content)
step_type = response_json.get("类型", "未知")
thinking = response_json.get("思考", "未提供思考过程")
action = response_json.get("行动", "")
params = response_json.get("参数", {})
observation = response_json.get("观察", "")
generate_content = response_json.get("生成内容", "")
is_end = response_json.get("结束", False)
if isinstance(is_end, str):
is_end = is_end.lower() == "true"
if isinstance(params, str):
try:
params = json.loads(params)
except json.decoder.JSONDecodeError:
params = {}
# 说明是工具执行, 执行工具
if action and action == "回答":
self.answer.append(str(generate_content))
if step_type == "固定步骤":
result_dict = {
"思考": thinking,
"结束": "True" if is_end else "False",
"类型": step_type,
"行动": action,
"参数": params,
"生成内容": generate_content,
}
await self.put_event(ExecStep(task_id=self.id,
call_id=generate_uuid_str(),
call_reason=response_json.get("调用原因", ""),
name=action,
params=params,
output=str(generate_content),
step_type='react_step',
status="end"))
message = AIMessage(content=json.dumps(result_dict, ensure_ascii=False, indent=2))
else:
_call_reason = params.get("call_reason", "")
# 等待用户输入的特殊工具调用
if action == CallUserInputToolName:
# 等待用户输入
self.status = TaskStatus.INPUT.value
_call_reason = params.get("call_content") or params.get("call_reason")
await self.put_event(NeedUserInput(task_id=self.id, call_reason=_call_reason, params=params.copy()))
# 等待用户输入
while self.status != TaskStatus.INPUT_OVER.value:
await asyncio.sleep(0.5)
# 用户输入结束继续执行
self.status = TaskStatus.PROCESSING.value
observation = self.user_input
self.user_input = None
else:
# 正常工具调用
call_id = generate_uuid_str()
await self.put_event(ExecStep(task_id=self.id,
call_id=call_id,
call_reason=_call_reason,
name=action,
params=params,
status="start"))
observation, flag = await self.task_manager.ainvoke_tool(action, copy.deepcopy(params))
# 说明工具调用失败
if not flag:
is_end = False
await self.put_event(ExecStep(task_id=self.id,
call_id=call_id,
call_reason=_call_reason,
name=action,
params=params,
output=observation,
status="end"))
result_dict = {
"思考": thinking,
"结束": "True" if is_end else "False",
"类型": "工具",
"行动": action,
"参数": params,
"观察": observation,
}
try:
message = ToolMessage(tool_call_id=generate_uuid_str(),
content=json.dumps(result_dict, ensure_ascii=False, indent=2))
except TypeError as e:
logging.error(f"json.dumps failed with result_dict: {result_dict}")
raise e
return message, is_end
async def _ainvoke(self) -> None:
self.status = TaskStatus.PROCESSING.value
if self.node_loop and not self.parent_id:
return await self.ainvoke_loop()
is_end = False
# json解析失败重试三次
json_decode_error = 0
for i in range(self.exec_config.max_steps):
messages = await self.build_messages_with_history()
if json_decode_error > 0:
res = await self._ainvoke_llm_without_tools(messages, temperature=self.exec_config.retry_temperature)
else:
res = await self._ainvoke_llm_without_tools(messages)
try:
message, is_end = await self.parse_react_result(res.content)
except Exception as e:
if json_decode_error >= self.exec_config.retry_num:
raise e
json_decode_error += 1
continue
self.history.append(message)
if is_end:
break
if is_end:
self.status = TaskStatus.SUCCESS.value
else:
self.status = TaskStatus.FAILED.value
self.answer.append("task exec over max steps and not generate answer")
return None
async def generate_sub_tasks(self) -> list['ReactTask']:
sub_tasks_info = await self._get_sub_tasks()
return [ReactTask(**one) for one in sub_tasks_info]
================================================
FILE: src/backend/bisheng_langchain/linsight/resource/model_tokenizer/config.json
================================================
{
"architectures": [
"Qwen3MoeForCausalLM"
],
"attention_bias": false,
"attention_dropout": 0.0,
"bos_token_id": 151643,
"decoder_sparse_step": 1,
"eos_token_id": 151645,
"head_dim": 128,
"hidden_act": "silu",
"hidden_size": 4096,
"initializer_range": 0.02,
"intermediate_size": 12288,
"max_position_embeddings": 40960,
"max_window_layers": 94,
"mlp_only_layers": [],
"model_type": "qwen3_moe",
"moe_intermediate_size": 1536,
"norm_topk_prob": true,
"num_attention_heads": 64,
"num_experts": 128,
"num_experts_per_tok": 8,
"num_hidden_layers": 94,
"num_key_value_heads": 4,
"output_router_logits": false,
"rms_norm_eps": 1e-06,
"rope_scaling": null,
"rope_theta": 1000000.0,
"router_aux_loss_coef": 0.001,
"sliding_window": null,
"tie_word_embeddings": false,
"torch_dtype": "bfloat16",
"transformers_version": "4.51.0",
"use_cache": true,
"use_sliding_window": false,
"vocab_size": 151936
}
================================================
FILE: src/backend/bisheng_langchain/linsight/resource/model_tokenizer/configuration.json
================================================
{"framework": "pytorch", "task": "others", "allow_remote": true}
================================================
FILE: src/backend/bisheng_langchain/linsight/resource/model_tokenizer/generation_config.json
================================================
{
"bos_token_id": 151643,
"do_sample": true,
"eos_token_id": [
151645,
151643
],
"pad_token_id": 151643,
"temperature": 0.6,
"top_k": 20,
"top_p": 0.95,
"transformers_version": "4.51.0"
}
================================================
FILE: src/backend/bisheng_langchain/linsight/resource/model_tokenizer/merges.txt
================================================
#version: 0.2
Ġ Ġ
ĠĠ ĠĠ
i n
Ġ t
ĠĠĠĠ ĠĠĠĠ
e r
ĠĠ Ġ
o n
Ġ a
r e
a t
s t
e n
o r
Ġt h
Ċ Ċ
Ġ c
l e
Ġ s
i t
a n
a r
a l
Ġth e
; Ċ
Ġ p
Ġ f
o u
Ġ =
i s
ĠĠĠĠ ĠĠĠ
in g
e s
Ġ w
i on
e d
i c
Ġ b
Ġ d
e t
Ġ m
Ġ o
ĉ ĉ
r o
a s
e l
c t
n d
Ġ in
Ġ h
en t
i d
Ġ n
a m
ĠĠĠĠĠĠĠĠ ĠĠĠ
Ġt o
Ġ re
- -
Ġ {
Ġo f
o m
) ;Ċ
i m
č Ċ
Ġ (
i l
/ /
Ġa nd
u r
s e
Ġ l
e x
Ġ S
a d
Ġ "
c h
u t
i f
* *
Ġ }
e m
o l
ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ
t h
) Ċ
Ġ{ Ċ
Ġ g
i g
i v
, Ċ
c e
o d
Ġ v
at e
Ġ T
a g
a y
Ġ *
o t
u s
Ġ C
Ġ st
Ġ I
u n
u l
u e
Ġ A
o w
Ġ '
e w
Ġ <
at ion
( )
Ġf or
a b
or t
u m
am e
Ġ is
p e
t r
c k
â Ģ
Ġ y
i st
-- --
. ĊĊ
h e
Ġ e
l o
Ġ M
Ġb e
er s
Ġ on
Ġc on
a p
u b
Ġ P
ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ
as s
in t
> Ċ
l y
ur n
Ġ $
; ĊĊ
a v
p ort
i r
- >
n t
ct ion
en d
Ġd e
it h
ou t
t urn
ou r
ĠĠĠĠ Ġ
l ic
re s
p t
= =
Ġth is
Ġw h
Ġ if
Ġ D
v er
ag e
Ġ B
h t
ex t
= "
Ġth at
** **
Ġ R
Ġ it
es s
Ġ F
Ġ r
o s
an d
Ġa s
e ct
k e
ro m
Ġ //
c on
Ġ L
( "
q u
l ass
Ġw ith
i z
d e
Ġ N
Ġa l
o p
u p
g et
Ġ} Ċ
i le
Ġa n
at a
o re
r i
Ġp ro
; čĊ
ĉĉ ĉĉ
t er
a in
Ġ W
Ġ E
Ġc om
Ġre turn
ar t
Ġ H
a ck
im port
ub lic
Ġ or
e st
m ent
Ġ G
ab le
Ġ -
in e
il l
in d
er e
: :
it y
Ġ +
Ġt r
el f
ig ht
( '
or m
ul t
st r
. .
" ,
Ġy ou
y pe
p l
Ġn ew
Ġ j
ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ
Ġf rom
Ġ ex
Ġ O
l d
Ġ [
o c
: Ċ
Ġs e
Ġ le
---- ----
. s
{ Ċ
' ,
an t
Ġa t
as e
. c
Ġc h
< /
av e
an g
Ġa re
Ġin t
âĢ Ļ
_ t
er t
i al
a ct
} Ċ
iv e
od e
o st
Ġc lass
Ġn ot
o g
or d
al ue
al l
f f
( );Ċ
on t
im e
a re
Ġ U
Ġp r
Ġ :
i es
iz e
u re
Ġb y
i re
Ġ} ĊĊ
. p
Ġs h
ic e
a st
pt ion
tr ing
o k
_ _
c l
# #
Ġh e
ar d
) .
Ġ @
i ew
ĉĉ ĉ
Ġw as
i p
th is
Ġ u
ĠT he
id e
a ce
i b
a c
r ou
Ġw e
j ect
Ġp ublic
a k
v e
at h
o id
Ġ= >
u st
q ue
Ġre s
) )
' s
Ġ k
an s
y st
un ction
**** ****
Ġ i
Ġ us
p p
on e
a il
== ==
n ame
Ġst r
Ġ /
Ġ &
a ch
d iv
yst em
el l
Ġh ave
er r
ou ld
ul l
p on
Ġ J
_ p
Ġ= =
ig n
S t
. Ċ
Ġp l
) ;ĊĊ
f orm
p ut
ou nt
} ĊĊ
d d
it e
Ġg et
r r
om e
Ġ âĢ
ar am
c c
Ġ* /
E R
I n
le s
_ s
on g
i e
Ġc an
Ġ V
er v
p r
Ġ un
ro w
b er
Ġd o
l l
Ġ el
Ġs elf
at ed
ar y
Ġ .
' ]
u d
Ġ en
ĠT h
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ
t e
_ c
u ct
Ġa b
or k
. get
Ġ #
a w
res s
o b
N ame
ap p
[ '
Ġal l
or y
it ion
an ce
e ar
Ġcon t
v ent
i a
Ġw ill
I N
ĠĠĠĠĠĠĠĠ Ġ
re turn
Ġ< /
d ata
) ĊĊ
R e
p le
il d
th er
Ġy our
" Ċ
( $
Ġ out
) ,
Ġh as
S tring
s o
Ġ up
a x
Ġde f
Ġb o
g e
al se
O N
p er
ic h
Ġb ut
Ġ Ċ
Ġ _
_ m
ad d
que st
od el
s elf
er y
f t
en s
// //
a ke
. C
Ġg o
Ġf unction
Ġ K
iv ate
Ġ im
Ġcon st
. t
Ġ*/ Ċ
) ;čĊ
Ġv oid
Ġs et
ĠS ystem
c ri
( )Ċ
l i
ĉ if
. m
al ly
s et
e p
âĢĻ s
b o
de f
' ,Ċ
Ġm e
Ġ !
at ch
" >
" ,Ċ
e c
ĠI n
p h
Ġ |
_ f
Ġv ar
en ce
I d
re e
in k
le ct
u g
et h
Ġel se
-------- --------
con t
Ġs o
at ic
Ġl o
p ro
t on
s s
ow n
ab el
o int
ou s
el d
S T
T he
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
R E
" :
ol or
t p
e g
ke y
u de
ĠS t
ou nd
Ġa r
" );Ċ
en er
s er
b ject
ess age
f er
Ġm ore
ation s
ent s
Ġh is
Ġthe y
. S
Ġ Y
u se
n e
is h
ol d
_ d
i o
i eld
Ġp er
C ont
ing s
## ##
Ġd ata
Ġs a
e f
f o
Ġon e
en g
Ġd is
A T
Ġn ame
Ġtr ue
v al
le d
. f
Ġn e
Ġ end
. T
c re
ar k
lo g
E x
err or
_ id
ur re
ang e
Ġn ull
rr ay
Ġm y
p an
ic t
at or
V iew
L ist
ĉ return
âĢ Ŀ
Ġp re
Ġ x
cl ude
ar g
o v
. h
Ġ >
Ġthe ir
' )
ir st
ic k
g h
L E
O R
Ġpr ivate
t em
čĊ čĊ
us er
Ġ )
c om
. A
" ;Ċ
Ġ id
re ad
Ġwh o
_ b
" >Ċ
Ġt ime
Ġm an
r y
==== ====
rou p
ro p
p ublic
v el
um ber
b le
Ġwh ich
******** ********
Ġan y
Ġf alse
w e
Ġv alue
Ġl i
" )
nd er
g r
Ġn o
p aram
f ig
.c om
Ġa pp
_ l
ion s
. D
ĠC h
Ġab out
Ġa dd
Ġs u
Ġstr ing
I D
Ġo ver
str ing
. l
our ce
_ C
] Ċ
Ġ qu
ĠS tring
c a
S E
Ġ ro
s h
u al
T ype
s on
n ew
er n
Ġa g
A R
] ;Ċ
] .
Ġ ?
ic al
Ġd es
ut h
i x
ay s
Ġt ype
' t
a ult
Ġin ter
v ar
. b
Ġp art
. d
urre nt
I T
E N
en c
( f
r a
v alue
ch o
ut ton
o se
Ġ! =
at er
à ©
re ate
ol l
p os
y le
n g
A L
us ing
am es
Ġ{ čĊ
at es
el y
Ġw ork
Ġ em
in al
Ġs p
Ġwh en
.s et
ĠĠĠĠ ĠĠ
) :Ċ
t o
qu ire
ind ow
le ment
pe ct
as h
[ i
Ġu se
. F
pe c
Ġa d
o ve
ce ption
eng th
in clude
ad er
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ
at us
T h
it le
r it
v oid
() .
( Ċ
Ġof f
Ġo ther
Ġ& &
' ;Ċ
m s
Ġbe en
Ġt e
m l
c o
n c
erv ice
Ġ %
** Ċ
an n
ad e
ĊĊ ĊĊ
lo ck
con st
pon se
Ġs up
+ +
d ate
Ġa cc
Ġh ad
Ġb u
ĠR e
Ġw ere
Ġf ile
Ġw ould
ĠâĢ ľ
v en
is s
Ġ our
c lass
r aw
Ġy ear
D ata
Ġv al
Ġs ome
f ter
y s
Ġ// /
rou nd
v iew
Ġp e
Ġth ere
Ġsa id
d u
o f
l ine
/ *
d uct
Ġh er
ĠĠĠĠĠĠĠĠ ĠĠĠĠĠ
R es
Ġc o
Ġcom m
is e
m in
ĠĠĠĠ Ċ
# include
eth od
. P
ut e
Ġas s
I nt
as k
lo c
Ġli ke
od y
Ġle t
lo ad
Ġa m
ro l
Ġg r
y p
Ġal so
ĠI t
ur l
if ic
or s
_ P
_ n
ig h
Ġth an
C om
A N
U L
at ing
ĠTh is
re f
_ S
Ġst atic
ro ll
Ġj ust
Ġres ult
i an
id th
Ġthe m
) );Ċ
d er
re ak
C on
: //
u le
.. .
ar ch
em ent
Ġ< <
us h
en se
ar r
Ġint o
c ess
am p
i ed
um ent
Ġ \
] ,
w o
al s
Ġwh at
an c
V alue
= '
ol um
Ġp os
ag es
ay er
Ġs c
u es
" )Ċ
_ T
Ġl ist
( s
Ġc ase
C h
ĉĉĉĉ ĉ
//// ////
pon ent
Ġ z
Ġk n
le t
D E
re d
Ġf e
Ġ} ,Ċ
Ġ ,
( t
Ġf irst
' );Ċ
w ord
Ġ import
Ġa ct
Ġch ar
C T
ĠT r
op le
= {
ĉ f
i ent
c ent
. j
le ction
) )Ċ
Ġon ly
Ġpr int
m er
. W
o ck
Ġ --
T ext
Ġo p
an k
Ġit s
Ġb ack
[ "
Ġne ed
Ġc l
Ġs ub
Ġl a
( (
. "
O bject
Ġst art
f ile
( self
n er
e y
Ġus er
Ġ ent
ĠC om
it s
ĠC on
ou ble
ow er
it em
ver y
ĠW e
lic k
Ġ Q
ph p
t tp
' :
ic s
Ġu nder
Ġ* Ċ
. L
) ;
ic es
Ġre g
) čĊ
ĉ public
S S
Ġth en
re at
i ous
. G
e k
ire ct
he ck
cri pt
n ing
ĠU n
Ġm ay
ĠW h
B o
I tem
str uct
. st
re am
ib le
lo at
Ġor g
u nd
s um
_ in
.. /
_ M
Ġh ow
r ite
' Ċ
T o
w w
Ġpe ople
ind ex
. n
ht tp
( m
ect or
Ġin d
Ġj av
] ,Ċ
ĠH e
_ st
f ul
o le
) {Ċ
Ġsh ould
op y
el p
i er
_ name
ers on
I ON
ot e
Ġt est
Ġb et
rr or
ul ar
ã Ģ
Ġ Ð
b s
t ing
Ġm ake
T r
Ġa fter
ar get
R O
olum n
r c
_ re
def ine
Ġr ight
r ight
d ay
Ġl ong
[ ]
( p
t d
con d
ĠP ro
Ġre m
ption s
v id
. g
Ġ ext
Ġ __
' )Ċ
p ace
m p
Ġm in
st ance
a ir
a ction
w h
t ype
ut il
a it
< ?
I C
t ext
Ġp h
Ġf l
. M
cc ess
b r
f ore
ers ion
) ,Ċ
. re
ate g
Ġl oc
in s
- s
tr ib
ĠI nt
Ġa rray
, "
P ro
( c
ess ion
> ĊĊ
Ġs he
" ]
ap h
Ġex p
ert y
ĠS e
Ġp ar
un c
E T
Ġre ad
pr int
Ġre l
Ġfor m
Ġd r
Ex ception
in put
Ġtr ans
#### ####
ord er
B y
Ġa w
it ies
u ff
pl ay
. add
ĠâĢ ĵ
Ġw ant
Ġcom p
ment s
Ġ| |
a z
b e
Ġn umber
Ġre quire
ĠE x
Ġc ol
Ġ key
em ber
Ġt wo
Ġs ize
Ġwh ere
U T
res ult
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
ou gh
or ld
o od
u ch
at ive
g er
are nt
Ġ/ *
Ġar g
Ġwh ile
( this
Ġre c
Ġd if
St ate
Ġs pec
r ide
_ F
Ġlo ok
A M
il ity
et er
âĢĻ t
ĊĊ Ċ
ay out
---------------- ----------------
ag er
Ġc ould
Ġb r
end s
u res
Ġkn ow
et s
ĠI f
ĠS h
. w
b ack
Ġs er
Ġ+ =
Ġf r
() );Ċ
Ġh and
I nd
UL L
I m
() ;ĊĊ
Ġm ost
Ġtr y
Ġn ow
rou gh
> čĊ
ack age
Ġh im
. _
if y
Ġb reak
Ġ );Ċ
re n
# define
it t
Ġa p
ĉ c
( n
ĠY ou
: ĊĊ
- m
Ġe very
ust om
li ent
oc ument
cri ption
E rror
- b
Ð ¾
] [
tr ans
Ġp oint
Ġst d
Ġf il
T ime
Ġm od
Ġ ->
Ġ error
a h
Ġt ext
roll er
lo se
q l
Ġp ol
>
Ġsh ow
U ser
as ed
Ġ{ ĊĊ
Ġf ind
Ð °
E D
s pan
en u
Ġc urrent
Ġus ed
ce pt
cl ud
Ġpl ay
Ġl og
ut ion
f l
Ġse e
indow s
Ġh elp
Ġthe se
Ġp ass
Ġd own
Ġe ven
as on
u ild
f rom
( d
Ġb l
l abel
el se
Ð µ
Ġ( !
iz ed
() ,
Ġo b
Ġit em
um p
U R
or n
Ġd on
S e
m an
am ple
t n
======== ========
H e
gr am
Ġd id
w n
_ h
iv er
Ġs m
Ġth rough
ĠA n
ch e
Ġin v
ou se
Ġ es
ĠN ew
ex port
m ary
ut o
l er
Ġl ast
Ġe vent
tr y
ï ¼
il y
ign ed
in es
oll ow
ic ense
so le
le ar
( int
Ġag ain
Ġh igh
ht ml
Ind ex
uth or
Ġ/ **Ċ
Ġl ine
E vent
_ D
Ġdo es
it ial
Ġc r
ar s
Ġt em
ca use
f ace
Ġ `
_ A
B utton
at ure
ect ed
E S
ist er
ĉ Ċ
Ġbe fore
a le
o ther
Ġbe cause
ro id
Ġ ed
i k
re g
ĠD e
Ġd ist
} ,Ċ
Ġst ate
Ġcon s
r int
at t
Ġh ere
in ed
Ġf inal
Ġ" "
K ey
L O
Ġd el
pt y
th ing
ĠA nd
Ġr un
Ġ X
y m
. app
Ġv ery
c es
_ N
are d
w ard
l ist
it ed
ol og
it ch
Bo x
if e
Ġa c
Ġm odel
Ġm on
Ġw ay
le te
Ġc all
Ġat t
Ġc al
ver t
Ġde c
le ase
ou n
Ġ} );Ċ
f r
form ation
et ail
Ġn um
a j
qu ery
Ġw ell
Ġo bject
ĠA s
Ġyear s
C olor
I S
Ġdef ault
W h
Ġin s
a int
Ġjav a
Ġs im
ĠA r
m on
t il
() ;čĊ
) :
S et
at ter
Ġv iew
Ġp res
arr ay
W e
A t
Ġb el
Ġman y
M an
end er
Ġbe ing
Ġgo od
ĉĉĉĉ ĉĉ
ation al
w are
. log
{ čĊ
Ġus ing
_ B
Ġ: =
_ w
ist s
l ish
Ġst ud
ĠA l
Ġg u
con fig
ur ing
t ime
ok en
ames pace
Ġre quest
Ġch ild
Ġ Ã
lo b
Ġp aram
Ġ} čĊ
Ġe cho
f unction
**************** ****************
p s
E lement
al k
lic ation
b y
S ize
raw ing
Ġp erson
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ
\ n
ob ject
in ce
E n
F ile
u f
ff ect
A C
Ġst yle
sum mary
Ġ que
_ r
Ġ( $
M odel
id ent
Ġm ethod
I L
ot t
les s
IN G
Ġ( )
Ġex pect
y nc
p ackage
ur s
Ġpro t
. /
p re
Ġ )Ċ
m a
Ġs ur
Ġf ound
In fo
p ar
im es
. e
ain s
Ġp ost
- d
ole an
Ġs l
P E
Ġsu ch
se lect
ain er
Ġth ink
Ġdif fer
. r
/ **Ċ
F F
o ol
pl ate
qu al
ĠF or
Ġm uch
u c
( new
od ule
Ġs om
Ġh ttp
ĠL ist
Ġc ount
Ġin st
ch ar
m it
. id
ak ing
Ġg ener
p x
v ice
_ data
ĠN ULL
} čĊ
id d
ãĢ Ĥ
Ġm ed
or g
id er
ach e
w ork
Ġc heck
we en
Ġ( (
th e
ant s
> <
. B
- c
Ġop en
Ġe st
ĠĠĠĠĠĠĠĠ Ċ
Ġn ext
I M
Ñ Ĥ
O T
à ³
Ġf ollow
cont ent
ĠĠĠĠĠĠĠĠ ĠĠĠĠ
Ġin clud
H E
ĠR es
Ġh ref
Ð ¸
Ġc ar
yp es
im age
U n
Ġbo ol
A D
Ġg ame
.F orm
row s
* /
vel op
.D rawing
Ġp ath
is ion
Ġe ach
ĠP l
_t ype
P ath
ne ction
Ġa v
' ).
Ġsup port
EN T
re m
" ).
Ġo wn
Ġc or
c ount
m iss
u ally
Ġm em
st d
i ence
se arch
" ĊĊ
F orm
Ġs ex
en ame
Ġs ign
Ġ et
ĠĠĠĠĠĠĠĠ ĠĠ
', '
ĠA pp
Ġth ose
o ff
Ġ err
Ġs ystem
Ġbe st
c ode
Ġs ame
Ġd i
us s
Ġc reate
ath er
A rray
. in
f e
S ervice
U N
at s
Ġ Z
al th
Ġm ade
tr ue
A B
Ġm ark
r id
if ied
, čĊ
y n
p ress
Ġg roup
Ġf in
ĠL icense
F ield
eg er
Ġw orld
in ess
t y
Ġpro cess
( b
Ġc re
ar n
iv es
Ġm ain
ide o
_ g
A G
val id
im g
P I
Ġc olor
Ġre port
Ġt ake
ri b
O M
Ġd ay
Re quest
Ġs k
b ers
ĉ s
.A dd
o ot
Im age
Ġcom ple
ol lection
Ġto p
Ġf ree
A S
D e
ĠO n
I G
et a
D ate
Ġa ction
O ver
it or
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
n ot
Ġind ex
h er
ic on
O n
;čĊ čĊ
iv ity
m and
.W indows
O L
Ġre al
Ġm ax
l and
.. ..
r aph
Ġbu ild
le g
ass word
? ĊĊ
âĢ ¦
o ok
u ck
Ġm essage
t est
iv ers
Ġin put
Ġar t
Ġbet ween
G et
ent er
g round
en e
à ¡
.l ength
N ode
( i
C lass
f or
ĠâĢ Ķ
t en
o in
Ġ ke
u i
ĠI N
Ġt able
s ub
ĠL e
Ġhe ad
Ġm ust
//////// ////////
. util
Cont ext
Ġor der
Ġm ov
o ver
Ġcont in
Ġs ay
st atic
.T ext
Ġclass Name
pan y
Ġt er
he ad
r g
Ġpro duct
Th is
. âĢĿ
ĠB ut
lo y
Ġd ouble
s g
Ġpl ace
. x
m essage
Ġin formation
pr ivate
Ġo per
c ed
d b
">
P aram
ic le
Ġwe ek
Ġpro p
t able
id get
pl ace
P rop
ĠA ll
el s
bo x
.ĊĊ ĊĊ
. R
ĠT o
it er
S h
ur ation
old er
_l ist
c ome
Ġs w
iz ation
ĉf or
b l
Ġpro gram
( e
a pe
che ck
.Form s
Ġu nd
ateg ory
ag s
Ġres ponse
U S
re quest
Ġstr uct
es cription
Ġc ode
_ H
uff er
Ġwith out
lob al
Man ager
il ter
P O
ĉ this
o ption
Ġs ol
Ġ= ==
ak es
Cont roller
M essage
Ġre f
e ver
ĠS o
ain ing
.app end
Ġst ill
Ġpro vid
Ġass ert
m ed
Ġc ap
us iness
Ġre p
t ings
v ed
. N
ap i
O D
Ġf ield
iv en
ot o
âĢ ľ
c ol
( x
g ht
Res ult
C ode
. is
l ink
Ġc our
A n
Ġte am
ĉ int
if t
Ġse cond
Ġgo ing
Ġr ange
_ E
n ess
Ġf am
Ġn il
ĠC ont
ail able
ut es
at ab
Ġf act
Ġv is
( &
ĠA N
A l
t itle
Ġand roid
C E
\ "
ir t
Ġw rit
Ð ½
ĉ m
ft ware
on d
Ġre t
os ition
Ġh ome
Ġle ft
arg s
mer ic
Ġd irect
oc i
P l
A s
re t
ad o
O f
ch n
ĠG et
e e
ro ss
() ;
__ __
.p h
I t
out e
Ġex per
cho ol
ww w
} ,
Ġall ow
Ġ Â
() )
s ize
is m
a i
tr act
an e
.. .ĊĊ
cont ext
Ġbe g
C H
Ġp age
h ip
n o
c ore
s p
Ġdiffer ent
i able
ĠM e
_ IN
b utton
ĠI s
erv ices
Ġc a
Ġa round
A pp
r ation
Ġre ce
Ġre ally
Ġim age
Ġt arget
Ġde p
opy right
tr a
ing le
it al
L ayout
Ġbo th
Over ride
ar m
= >
ater ial
ile d
Ġp ut
Q u
Ñ Ģ
un g
m ap
ĉĉĉĉ ĉĉĉĉ
Ġle vel
Com ponent
bo ok
cre en
_ RE
Ġcon fig
ã ģ
O r
. data
Ġd ocument
", "
trib ute
u x
L og
fer ence
p ost
_ e
Ġloc al
and om
ass ert
V al
lect ed
in a
atab ase
A dd
Ġcont ent
.p rint
s igned
r ic
." ĊĊ
Ġf a
! ĊĊ
- f
iv ed
Ġ quest
. ex
Ġf loat
Ġde velop
о Ð
M ap
ad ing
Ġpos s
U E
n amespace
_ O
ĉ b
.G et
> (
j son
etail s
Ġto o
Ġext ends
ĠN one
Ġf ore
( String
form at
Ġg reat
int er
ca le
Ñ ģ
r on
iv ing
E nt
enc y
x t
o y
Ġmon th
Ġh app
Ġsup er
b ar
def ault
_ de
ord s
l n
( {Ċ
ĠI nd
as es
Ġt itle
Ġcont ext
o h
- p
E m
Ġm et
T est
Ġl ife
_ v
ĠU S
U I
oc ation
m d
Ġ[ Ċ
Ġ ]
s w
Ġin cre
s cript
ent ial
w ays
. de
Ġs rc
Ġc atch
ĠA meric
// Ċ
ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ
Ġp ay
pl it
âĢ Ķ
Ġc oun
ob j
.ph p
Ġch ange
eth ing
' re
ast er
lo s
l ation
ĠĠ Ċ
L e
à ¤
( {
read y
ĠN o
Ġpos ition
Ġo ld
Ġbo ok
able d
b ug
H and
} ;ĊĊ
is play
av ing
Ġgo ver
Ġv ersion
S ystem
n ect
res ponse
St yle
U p
ang u
Ġth ree
in it
er o
Ġl aw
end if
Ġb ase
em ail
( l
_ V
Ġcon f
AT E
Ġd uring
t es
Ġcon sole
ĠP r
Ġs pe
v es
p ath
ial og
d ition
_t o
ard s
Ġagain st
et work
ĠP h
_ L
c ur
im it
W ith
Ġp ower
i um
' ;ĊĊ
Ġw om
le ft
our ces
at ri
ĠI m
ĠM an
or th
$ {
qu als
es e
_s ize
Ġis s
ot al
- g
i que
r ame
Ġw idth
er g
) (
itt le
T R
ĠThe y
enc es
r l
on s
Ġl abel
. y
- t
up date
an el
s c
.t o
Ġpro ject
à ¼
Ġe lement
Ġsu ccess
ĉĉ Ċ
.s h
r am
ch ed
() )Ċ
Ġ( Ċ
Ġd ate
Ġto t
_ ST
A ll
ific ation
ĉ var
Ġt ri
ch em
m y
Ġb ig
ĠA d
ĠA t
ot s
n um
A ct
Ġm ap
er a
co pe
. $
, âĢĿ
Ġp op
Ġf ew
Ġl en
u id
et ers
u les
à Ń
s ource
http s
Ġd em
Ġe ar
######## ########
Ġm atch
or ies
ac es
ĠC l
Ġn ode
ir c
loc al
un ity
} ;Ċ
Ġan other
< <
og le
Ġs it
ew ork
T E
. I
N S
olog y
ou ght
.C ont
> >
Ġc are
st ate
ĉ private
Ġe ffect
++ )
_f ile
end ing
L ine
F or
i or
ĠS c
Ġf un
.S ize
ĉ else
] )
st art
v ious
Ġ} ,
our s
Ġle g
Ġs ervice
Ġs ince
ir on
L abel
Ġn on
Ġl os
ict ion
Ġf ull
act er
bo ard
g ress
Ġt urn
ith er
.s ize
Ġb ody
res h
et urn
( _
y les
orm al
p i
Ġsom ething
! --
u int
Ġpro du
Ġst and
Ġpro ble
Ġav ailable
m t
ĠB l
Ġ ...
Ġb lock
In put
Ġke ep
C ount
op en
Ġ[ '
Ġth row
uild er
A ction
Ġth ings
Tr ue
Ġ url
ĠB o
print f
Ġre d
j s
.c reate
ĠO r
St atus
In stance
Ġcont rol
Ġcom e
Ġc ustom
loc ation
m odel
Ġ čĊ
Ġs ource
Ġe as
. out
] ĊĊ
one y
Ġaw ait
Ġpart ic
A P
ub lish
od es
_p ro
p ly
rit er
Ġpro v
Ġm ill
H T
] )Ċ
Ġch ang
Ġas k
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ
Ġout put
Ġem ail
.p ush
Ġ} čĊčĊ
in ation
atri x
T able
u ccess
] );Ċ
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
Ġdis c
( [
Ġb usiness
he ight
. html
t a
f ield
Ġrequire d
_ R
Ġgover n
} čĊčĊ
le x
. ,
ĠS et
ur ch
// /
t s
a f
Ġm ight
ist ory
S tr
Ġne ver
Res ponse
ar se
ad a
ĠH ow
Ġ* )
Ġ ;
Ġh ard
A d
Ġinter n
us ed
( data
m od
ann el
Ġn p
ug g
Ġ/ >Ċ
Ġcal led
b ody
Ġch o
( r
_s et
ir d
Ġ> =
Ġ} ;Ċ
Ġo ptions
ĠG ener
Ġhe ight
P oint
Y ou
et y
C lick
Ġsm all
Ġ ide
Ġacc ess
angu age
Ġprot ected
Ġj ob
ĠTh ere
D ef
Ġadd ress
Ġu int
N ot
o o
ap s
< div
ain ed
at ur
Ġs um
- w
ĠD ate
Ġl ittle
Ġf ri
Y PE
Ġp ort
e h
pr ing
_p ath
Ġst atus
a im
bo ol
Ġap pe
Ġo s
. name
ens ion
_ G
Ġup date
Con fig
a ff
ER R
Ġ< =
at ely
# if
u ction
ĠT e
Ġl ink
ĠU ser
.f ind
. org
m e
Ġg iven
O ut
# endif
Ġbet ter
P age
Ġfe el
en n
M L
Ġal ready
Ġinclud ing
o ogle
r u
ic ally
pro p
le an
out er
Ġal ways
ord ing
I f
or age
Ġp arent
v is
ĉĉĉĉ ĉĉĉ
Ġg ot
st and
Ġle ss
/ s
ĠA ss
ap t
ire d
ĠA dd
Ġacc ount
p loy
Ġd er
res ent
Ġl ot
Ġval id
ĉ d
Ġb it
pon ents
Ġfollow ing
_ ex
S ON
Ġs ure
oc ial
Ġp rom
ert ies
he ader
.p ro
Ġbo olean
Ġse arch
k en
Ġor ig
Ġ er
E d
E M
a ut
l ing
al ity
By Id
b ed
ĉc ase
eth er
pos it
Ġinv est
ĠO R
Ġs ays
miss ion
AM E
Ġtem p
o ad
Ġre st
in fo
Ġinter est
A rg
Ġper form
pon s
ĠV iew
Ġv er
l ib
( const
U til
List ener
ar ge
Ġm ult
Ġd ie
Ġs ite
../ ../
E L
Ġval ues
Ġ} )Ċ
p en
N o
ic ro
Ġbe h
Ġ' ./
ac y
re c
() ->
ĉ ĠĠĠ
" ))
Cont ent
_ W
ple ment
Ġw on
Ġv ideo
ad i
p oint
% %
Ġg l
erv ed
v iron
I F
ut ed
ã ĥ
' m
Ġc ert
Ġpro f
Ġc ell
ar i
Ġpl ayer
a is
Ġc ost
Ġh um
( R
Ġoff ic
k s
.t ext
at ures
Ġtot al
Ġ*/ ĊĊ
o pe
Ġst at
U M
Ġlo ad
ight s
Ġc lear
u ro
Ġte chn
up port
I R
Ġ row
Ġse em
Ġ q
Ġsh ort
ĠN ot
ip p
G roup
se ction
m ax
ir l
Ġover ride
Ġcom pany
Ġd one
" );čĊ
Ġg re
. Re
Ġbel ie
r ist
Ġhe alth
AN T
() ĊĊ
ĠB e
. value
ĠG r
ott om
Ġarg s
P T
st atus
f unc
um ents
- h
N umber
: čĊ
ĠL og
er ver
Ġ) ,Ċ
am ent
Ġob j
in c
Ġchild ren
ic y
I Z
and s
ab ly
Ġdist rib
Ġc ur
er ial
Ġd ays
re ated
re ct
- l
ir m
idd en
om b
Ġin itial
.j s
Ġ â
Qu ery
Ġon line
im al
. con
a u
U rl
cont rol
ire ction
Ġin stance
OR T
ĠF r
wh ere
Ġjav ax
Ġorg an
ap ter
Ġre ason
o ptions
ĠM ar
( a
Ġwith in
.âĢĿ ĊĊ
O DE
_ DE
ad min
end ed
Ġdes ign
ĠD ata
un e
ĠF ile
ro ot
Ġc ent
Ġa rr
_ add
l en
p age
, '
_ str
Ġb ro
ab ility
ou th
/ c
p ose
irt ual
ear ch
_ url
arg in
H ttp
Ġs chool
av a
Ġcons ider
.l abel
ĠA rray
we b
o pt
.print ln
ul ation
Ġf unc
P L
Ġ" \
ĠT ext
act ory
(f unction
n ull
Ġen g
d own
Ġin clude
ĠE n
ĠD r
Ġd b
! !
s ide
Ġin it
quire d
ĠS he
C olumn
re act
Ġan n
Ġst op
Ġl ater
ĠTh at
ent ion
d f
U G
I LE
Ġc lient
ra ft
ff er
PO ST
el per
Ġlo ve
qu ote
ou d
Ġj son
Ġab le
Ġm en
A X
ĠC opyright
à ¶
av ig
re q
C lient
} );Ċ
.C om
er c
il t
pec ial
_c om
ro om
. Name
Ġg ive
am b
i ke
Ġcon dition
cl ient
ator s
: "
Ġc opy
ut ure
ivers ity
ern al
{ {
ĠC an
ou nc
d o
Ġo cc
Ġapp ro
th ers
z e
Ġe ither
ĠF l
Ġimport ant
Ġle ad
at tr
AR T
E qual
Ġd a
et ch
ent ity
Ġfam ily
add ing
Ġo ption
Ġex ist
ic a
ĠO bject
' ve
v ers
ition al
out put
ĠTr ue
ĠO F
_t ime
Ġof fer
Ġ} );ĊĊ
H ER
eg in
" "
Ġw ater
Ġc he
ĠM y
ore d
Ġst ep
anc es
C K
A Y
à ¸
str uction
( C
ou ch
St ream
act ive
am a
Ent ity
pro duct
() {Ċ
Ġgovern ment
ĠI D
aj or
A nd
Ġdis play
Ð »
Ġt imes
Ġf our
Ġf ar
Ġpres ent
ĠN S
Ġ\ Ċ
ue st
Ġb as
e cho
ch ild
if ier
Hand ler
Ġl ib
Prop erty
trans lation
Ġro om
Ġon ce
Ġ[ ]
cent er
================ ================
Ġresult s
Ġcontin ue
Ġt alk
_ get
Ġg row
.s w
e b
ĠP ublic
O P
ec ute
ol s
Ġ **
" );ĊĊ
Ġm ass
ure d
.c lass
om ic
Ġme an
ip s
Ġa ut
);čĊ čĊ
Ġun til
Ġmark et
Ġare a
u it
Ġl ength
ĠW ith
struct or
e vent
"> <
ĠS p
I V
Ġm us
if f
Ġk ind
a uthor
ound s
m b
_ key
w idth
posit ory
Ġl ight
u k
R ow
oh n
al f
viron ment
app er
ollection s
Ġs ide
_in fo
Ġex ample
im ary
Ġw r
Ġc amp
cri be
" /
Ġm iss
w ay
Ġb ased
Ġpl an
V is
om ain
un k
Ġaw ay
U P
< T
O S
i od
ĠM on
âĢĻ re
Ġli k
à §
iv ely
. v
im er
iz er
S ub
Ġbut ton
ĠU p
Ġexper ience
C L
Ġre nder
_ value
Ġn ear
UR L
al t
Ġcoun try
ib ility
() ,Ċ
e ad
Ġa uthor
Ġspec ific
b ase
( name
on es
ĠD o
Ġal ong
y ear
Ġexp ress
. '
en v
Ġbeg in
Ġso ftware
Ġim p
Ġw in
ó n
Ġth ing
Tr ans
ĠT HE
Ġ< ?
Ġwh y
Ġdoes n
i j
g ing
ĉ g
Ġs ingle
off set
ar ning
og raph
le y
_c ount
Ġan al
cre ate
/ m
ĠR eg
un ch
= $
is k
Ġright s
( M
Ġ"" "Ċ
ap er
.m odel
Ġp o
em pty
art ment
Ġa nt
ĠWh en
Ġwom en
ĠE d
Ġse ason
Ġde st
à £
( h
Ġposs ible
Ġse ver
Ġb tn
Ġdid n
Ġs ent
Ġen c
Ġcomm and
Ġ ],Ċ
_ x
Ġre cent
ol ution
v ector
ĠB y
ĠM ay
ĠA ct
» ¿
Ġm oney
IN T
bs ite
ĉ p
. čĊ
ï »¿
s l
atter n
ĠC lass
Ġto ld
ud io
c urrent
Ġe qu
Ġa uto
ĠSt ate
d a
ms g
)) ;ĊĊ
Ġwork ing
Ġqu ery
ĠB r
Ġw indow
a uth
on ly
ĉ t
Ġle ast
ag n
Ġex pl
it ter
ar ing
Ġc olumn
ĠGener al
": "
er al
ri or
Ġrec ord
I B
E X
Ġd at
Ġm aking
u ed
ĠC ar
em p
" .
ĠM ed
Ġc lose
Ġper cent
Ġp ast
( g
: (
Ġw rite
Ġm ove
Ġp at
Cont rol
.T o
Ġv i
*/ Ċ
in ate
' ll
ag ed
N ull
Ġspec ial
IZ E
Ġc ity
/* Ċ
ĠE ng
ix ed
in ary
p y
Ġe ff
ar io
Ġt ell
av or
Ġse lect
le vel
im um
op er
B uilder
I P
') ,Ċ
es c
Ġf ont
" ;ĊĊ
ĠA m
ish ed
ill s
Int er
O W
Ġcour se
Ġl ate
idd le
Ġam ount
Ġas ync
in o
c ul
Ġ ì
and le
_ user
Ġb en
ĠC al
Ġ$ _
ĠR ep
Ġen ough
T oken
. user
( j
S c
W idth
n ow
at form
Ġlook ing
Ġh old
M odule
IT Y
v o
is on
.D ata
y c
Ġp ot
ĠTr ump
id ual
id es
r t
Ġprop erty
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ
am ework
g o
Ġl ow
Ġpar a
Ġpr ice
ur y
Ġto day
ro y
Ġ' /
Ġpol it
Ġ' '
ym b
P h
Ġad v
Ġatt ack
ĠS te
RO M
an a
Ġme ans
Ġst ory
id s
ak en
Ġme et
Ġm om
ĠâĢ ĺ
Ġ? >
Ġd en
ob ile
ch ange
ĠĠĠĠĠĠĠĠ ĠĠĠĠĊ
ic i
n a
ĠF orm
Ġs ort
Se lect
p are
Ġth ought
_ con
Ġt ask
oc us
ĠD E
ĠM in
Ġo pt
ĉb reak
um er
K E
th en
Ġd et
ĠT est
port s
Ġre view
(' /
m ove
Ġsw itch
ER T
p atch
ann ot
ã Ĥ
Ġab ove
it ive
Ġquest ion
ĠQ u
ãĢĤ ĊĊ
g le
Ġw ord
Ġprov ide
ĠR eturn
Ġre search
ã o
u str
Ġp ublish
chem a
} }
ĠC ON
- in
all back
Ġco ver
\ \
c olor
ĠI S
Ġwh ether
im ate
is c
B ar
Ġd iv
B e
our n
Ġh aving
le m
pl ayer
ab s
am era
ne y
Ġex c
get her
pl ied
a o
[ $
Ġ+ +
i pe
sh ow
/ d
[ :
ag ement
le v
_ ID
r ary
ad es
_ se
a use
Ġem ploy
Ġ*/ čĊ
Ġf re
Ġ' @
Ġcomple t
Ġl arge
r al
\ x
Ġf ac
< String
Ġcre ated
up er
.st ate
Ġh ost
ener ic
/ b
( !
wh ile
i as
B UG
Ġ );ĊĊ
Ġro le
Re g
ĠC olor
St art
Ġp orn
t op
Ġwe b
Ġde v
Ġde al
++ )Ċ
Int eger
pos ition
. on
Ġ( "
ä ¸
Ġproble m
s v
Ġp ress
AB LE
AT ION
ĠSe e
an ch
Ġth ough
le ep
Ġ< !--
Ġpoint s
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ
. J
Ġ ::
p tr
D B
++ ;Ċ
.p ng
n ode
so ft
pon d
Ġe ver
-------------------------------- --------------------------------
M enu
(' #
Ġs ervices
p g
} )Ċ
param s
Ġact ually
Ġ" /
Em pty
M ethod
Ġid ent
un ic
Ġmill ion
Ġa ff
st yle
Ġcon c
i os
ign ment
UL T
P r
" ;čĊ
Ġunder stand
u ary
Ġhapp en
Ġser ver
ĠC o
S C
Ġle s
Ġfile s
G rid
s ql
Ġof ten
Ġin fo
_ tr
s rc
on y
Ġsp ace
um b
Ġpass word
Ġst ore
, ĊĊ
ĠWh at
g ed
ĠF alse
U s
sw er
_ index
Ġform at
m ost
s m
N ew
Ġd etails
Ġpro b
ĠAN D
() čĊ
il ar
Ġ$ {
ry pt
.C ollections
$ this
ĠF ree
_ of
(f alse
d ated
Ġ> >
Ġf ace
CT ION
Ġs ave
Ġt yp
de v
(" #
AG E
cont ainer
ed it
Q L
Ġitem s
Ġs ocial
i en
ĠRe act
) .ĊĊ
Ġm ar
Ġre du
ĠR E
.p ut
Ġm ajor
C ell
n ext
Ġexpect ed
Ġy et
Ġin div
trib utes
at is
am ed
Ġf ood
S ource
( string
Ġ+ Ċ
it es
d r
Ġmem bers
Ġcom b
item s
ĠP er
T H
= True
Ġb ar
_ SE
com m
( w
)ĊĊ Ċ
Ġs end
Ġin c
un signed
F A
Ġparam s
app ing
ro s
ug in
f a
Ġcon nection
Ġ} ;ĊĊ
Ġbe come
M ode
Ġe v
Ġdif f
ĠUn ited
He ight
ful ly
im ages
Ġm akes
Ġg lobal
Ġcont act
' :Ċ
Ġab s
а Ð
f loat
Ġex cept
ĠP ol
Ch ild
t yp
Ġcert ain
i ón
O UT
Ġim pro
ile s
Ġ-- >Ċ
ĠP art
val ues
os s
/ **
il it
ĠE vent
cur ity
st er
Ġchar acter
Ġnew s
Ġ" ,
Ġde vice
c el
log in
he et
Def ault
@ "
ĉ Ġ
c lick
( value
ĠA b
Ġpre vious
ERR OR
oc al
Ġm aterial
Ġbel ow
ĠCh rist
Ġmed ia
co ver
ĠU I
Ġf ail
Ġbl ack
Ġcom ponent
ĠAmeric an
Ġadd ed
Ġbu y
st it
Ġc ame
Ġde lete
prop erty
od ing
Ġc ard
rop s
Ġhttp s
Ġro ot
Ġhand le
C C
B ack
em plate
Ġget ting
_b y
m ail
_s h
. assert
ĠD ec
( true
Ġcom put
Ġcl aim
' =>
ĠS ub
Ġa ir
op s
n av
em ents
( id
Ġent er
ang ed
E nd
Ġloc ation
Ġn ight
Ġdo ing
ĠR ed
l in
}ĊĊ Ċ
vid er
Ġp ick
Ġw atch
ess ages
Ġhum an
Ġd am
p end
d ir
Ġt ax
Ġg irl
re et
Ġbo x
Ġstr ong
( v
re l
Ġinter face
Ġm sg
f ect
_ at
Ġh ouse
Ġtr ack
' );ĊĊ
j e
ĠJ ohn
ist r
( S
ub e
Ġc e
itt ed
V ER
* )
p arent
Ġapp lication
an y
.sw ing
Ġp ack
\ u
Ġpr act
Ġse ction
ct x
Ġun signed
.P oint
ĠO ne
Ä ±
ip le
a id
Ñ ĥ
V ector
by te
Ġw ait
ĠÃ ł
à ¥
Ġto gether
Ġth rows
F O
' ))
h ost
is ing
. view
Ġter ms
fr amework
- r
Ġapp ly
Ġs ession
O ptions
ugg est
Ġo thers
w itter
Ġf und
In it
__ (
ens or
G ET
Ġsever al
i i
[ j
I O
Ġtem plate
P osition
Ġe con
ach ine
Ġ il
.s pring
m ain
el t
im ent
Re c
m m
ĠUn iversity
urs or
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ
G L
ict ure
ith ub
c er
c ast
F rom
a les
Ġsub ject
p assword
n y
Ġes c
.w rite
ï¼ Į
Wh at
. H
Ġh istory
ĠF e
Ġindiv idual
un it
Ġ-- >
Ġd u
I ST
Ġus ers
f s
f alse
un t
T itle
Ġm ot
Ġf uture
ach ed
Ġstart ed
Ġm ode
Ġ' <
_ array
Ġa x
'] ;Ċ
i res
Th ere
ug ht
t ml
pos ed
ic ult
Ġto ok
Ġg ames
Ġ} }
Ġ? >Ċ
Ġproduct s
I s
Ġb ad
ĠD es
.p ath
' ĊĊ
ĠP ost
av el
( :
Ġneed s
Ġkn own
F l
Ġex ec
Ġse en
um e
Ġb order
Ġl ive
tem p
P er
Ġvar iable
i et
ĠD ef
Ġg e
em e
_b ack
f irst
Ġprovid ed
//////////////// ////////////////
Ġfil ename
Ġh ope
ul y
a uto
f ind
_ string
b tn
it ude
At tribute
Ġyou ng
.t xt
Ġwe bsite
ĠP rop
Ġe y
> ();Ċ
ion al
AR R
iction ary
ur ther
.
AL L
Ġstud y
il i
Ġn etwork
y l
ist ance
O K
N U
re st
ĠS T
icro soft
Ġl imit
Ġc ut
() :Ċ
Ġc ou
og n
Ġsize of
iv al
Ġw ent
. z
L ink
Ġf ire
Ġac ross
Ġcomm unity
reg ion
N E
Re f
Ġoffic ial
Ġvis it
ol ve
Ġrece ived
Ġto ken
Ġmonth s
Ġan im
Ġpartic ular
st yles
ic o
Ġ ess
.Cont rol
Ġ é
b all
Ġle arn
ind ing
V ar
Ġde cl
( err
LE CT
O ne
ph a
Ġ ~
f ort
as ure
Ġm ind
ĠE nd
C heck
Ġqu ick
" ),
AN D
ut ions
B ase
____ ____
Ġcom ment
IN E
âĢĻ ve
B ut
ĠE l
ĠU s
Ġad min
m ark
ĠN ame
` Ċ
ĠT ype
am ic
p c
lo or
F T
Ġo pp
ck et
) ->
t x
Ġp ur
u el
ymb ol
u ation
ang er
Ġback ground
ec ess
ef ined
.... ....
Ġdes cription
Ġrep resent
") );Ċ
press ion
row ser
Ġser ies
ward s
($ _
a ise
Ġh ot
ac ity
ri es
action s
C reate
ad io
amp les
Ġorig inal
ens ive
f ont
st ream
 using
.spring framework
ser ver
Ġb ill
AC K
il ename
Ġfr ame
Ġ= Ċ
Ed it
adi us
Ġd raw
ank s
Ġd eter
Ġcom es
_ int
Ġfore ach
ang le
Ġe lect
pect ed
He ader
ist ration
F alse
ĠG ame
Ġfil ter
Act ivity
Ġl arg
in ition
Ġ" <
is ed
Ġrem ove
ĠTr ans
m et
se e
Form at
Com mand
ĠE X
N one
Ġfr ont
A SE
ĠR ec
ound ation
Ġv o
= \"
( *
Ch ange
.W rite
g roup
i ents
u y
******************************** ********************************
Ġd ig
h r
( -
Ġg en
n umber
ve c
uro pe
ent ry
L L
Ġst e
Val id
'] ,
_p aram
Ġse lected
Ġacc ording
ĠD is
Ġ util
B uffer
_ error
Ġass oci
_S IZE
Ġw or
Ġprint f
r ag
 ł
D D
ĠV al
Ġact iv
E ng
et ime
Ġv irtual
a ign
a ur
ĠP res
ĠEx ception
Ġany thing
ĠO ff
Ġh ours
Ġw ar
Arg s
ag ing
Ġmodel s
ĠT ime
O b
am s
j oy
Ġear ly
. read
Ġc enter
ĠIn itial
Ġl anguage
l ength
x y
Ġs n
Ġin f
P ost
Ġag o
Ġeas y
_c ode
ĠAN Y
_ ch
Ġdown load
( T
av ed
âĢ ĵ
Ġstud ents
Ġf ig
l ight
x x
Ġbu ffer
ĠD ep
ĠM ath
IT H
Ġvar i
Ġd ue
F actory
Ġp or
Ġe p
ot ype
Ġcan not
Ġwh ite
< int
ter n
Ġreg ister
Ġpre d
cl us
_d ate
Ġ/ **
Ġa uth
Ġ[ ]Ċ
Ġper iod
n own
Ġv ot
Ġs creen
' d
T ypes
Ġt mp
е Ð
ur al
Ġben ef
_ y
Ġn et
ĠSt ates
'] ['
ĠN e
ĠN OT
Ġn eg
Ġcomm on
s cope
Ġc red
g es
_T YPE
Ġs uggest
o om
.ĊĊ Ċ
Ġac cept
Ġr andom
er m
ĠV ector
w ith
T ER
( str
Ġres pons
Ġh it
.S et
gr id
ri a
Ġc lick
und le
C ase
ins ert
Util s
Ġ"" "
Ġim plement
at al
tem pt
tem plate
oc r
return s
Ġplay ers
us ers
ed ef
ĠTh ese
Ġam ong
Ġde b
h a
.get Element
Ġc irc
Ġan swer
Ġw alk
Ġt reat
ĠG e
ĠC reate
Ġa ge
Ġre q
O ST
ang ular
Ñ ı
Ġf ive
Ġdistrib uted
Ġfri end
T P
Ġc lean
ow s
.Control s
d is
Ġw ords
. io
z y
Ġhe ader
ĠC heck
âĢĻ m
j ust
h older
="
ĠG NU
ĠC ol
im est
ent ic
{ ĊĊ
Ġt re
l ast
l a
ĠY ork
L o
Ġdisc uss
ĠG od
Ġiss ue
re w
W indow
Ġl and
Ġst ream
ĠP ar
Ġqu ality
P ar
_n um
Ġs al
el ves
OR D
( user
Ġwork s
Ġh alf
ens es
v as
Ġpol ice
(" /
u a
Ġsim ple
Add ress
Ġem pty
es h
Up date
ĠC reated
(' .
). Ċ
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ
Ġag re
ĠF ROM
Ġco ok
Ġevery thing
il ities
.st atus
Ġrel ations
ext ern
Ġno thing
Ġrun ning
ĉ void
R I
_ a
_C ON
p or
.s ub
re quire
ĠC ity
ĠW est
Ġm or
st ore
E quals
od er
Ġn a
Ġ[ [
Ġ( '
ĠD on
ER S
/ p
.j son
ab or
Ġsome one
_t ext
.c ss
.T ab
ĠS ome
at o
d ouble
Ġsh are
( void
_d ir
Ġ ur
St ack
ĠW orld
. X
str act
H ow
.G eneric
ic les
Ġent ry
Ġchang es
Ġperson al
( A
Ġoff set
_p tr
Ġp ie
ĠJ an
-g roup
m odule
Item s
ĠHow ever
ver age
.F ont
Ġevent s
.m in
Ġinv ol
z a
Ġwho le
Ġneed ed
Ġlik ely
ri ef
OR M
v ersion
Ġf ight
Ġe in
F rame
g en
ĠO ut
avig ation
L ength
il led
qu ence
Ġ! ==
ĠSo ftware
Ġwrit ing
Ġr ate
'] ,Ċ
P anel
in ner
Ġ[ "
Ġt w
c d
Ġ ;Ċ
_st ate
ĠS m
ĠM ark
)) ĊĊ
pro t
ĠM r
m ethod
ustom er
I con
Ġcor rect
( object
ĠM ore
Ġf all
Ġv ol
Ġdevelop ment
ent ly
Ġs i
med i
v ing
P P
ak er
Ġin du
Ġel if
Ġpre t
Ġbelie ve
n s
om et
ĠInt ern
R ect
S o
. error
Re ad
Ġfe atures
Ġmin utes
-- -
as ing
cre t
"> čĊ
. annot
Ġcol lection
' .
Ġsim ilar
Ġt aken
(" %
Or der
'] Ċ
-m d
ĠT H
ac ed
Ġis n
/ j
Ġs on
gr aph
ĠInt eger
Ġn ecess
re en
Ġ um
Ġ\ <
Ġmom ent
Ġbr ing
Ġind ic
ys is
Le vel
ver se
urre nc
_t est
Ġent ire
D own
Ġ}ĊĊ Ċ
( result
ĠRe ad
à ¨
M od
Ġtry ing
") ,Ċ
Ġm ember
ĠC or
OD O
- control
un time
ĠS im
D ialog
pl ot
_ on
Ġph ys
} /
Ġn amespace
ĉ čĊ
ac c
Pl ayer
A RE
Ġf oot
Ġbo ard
p art
Ġs us
w ise
ĠM c
Ġp ush
AT A
Ġp lease
ri ed
we et
b it
id ed
V E
ĠS w
U B
Ġt ypes
ed ia
Ġc los
ace book
Wh en
Ġed it
ig ger
Ġen erg
Cont ainer
Ġph ot
ĠC ount
ĠE urope
.I s
ĠR uss
pe ed
ĠS tr
Ġp y
Ġc ult
Ġdef ined
cc ount
Ġob t
.L ocation
Ġth read
il le
Ġinst ead
str ong
ĠS ec
U RE
Ġide a
. se
em y
select ed
Con nection
ac ing
th read
.n ext
Ġc oll
Ġfil m
ist ic
Ġcomp et
Ġcon n
th ough
Ġcom pan
ock et
Ġte ach
= (
Ġph one
Ġact ive
de lete
tr ies
Ġm o
Ġde ath
} );ĊĊ
oc ol
W idget
Ġart icle
ro du
and id
Ñ ĭ
ĠC r
k a
() :
lo od
ĉĉĉ Ċ
Ġal most
Ġs ell
erv let
ri p
Un it
Ġapp lic
Ġcon nect
Ġfe ature
Ġv ia
' ),
Ġl im
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
ĠG u
Eng ine
Ġen s
Ġen vironment
b lock
HER E
N ULL
g y
t ag
) ).
ex p
Ġcom pl
Ġinst all
Ġcomple te
que ue
atur al
Ġgener al
th on
Ġask ed
o res
( res
Ġres erved
S P
ĠâĢ ¦
Å Ĥ
Ġsign ific
O ff
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ
ĠA g
ĠJ ust
ĠE rror
Ġin fl
ad ata
Ġ icon
ask s
' '
_ LO
? .
ac count
Ġ( *
' )ĊĊ
r ap
_ var
ĠF OR
Ġpart y
ĠY our
c at
str y
. new
bo ot
ĠN ov
Ġv ector
Ġn ormal
Ġf urther
Re pository
Ġd atabase
att le
Ġmus ic
Ġspe ed
Ġd oc
pro cess
IG HT
.p arse
Ġt aking
Ġvi ol
ce ed
ĠA fter
Ġfor ward
Ġc rit
"/ >Ċ
ro t
Ġfa iled
ef ore
Ġconc ern
o e
b a
Ġs ender
Ġter m
h as
=" #
Ġpot ential
N um
Ġpublish ed
.c lose
ĠIm age
str aint
U D
ĠO b
Ġprob ably
l im
" :Ċ
olum e
Ġcon sum
ag ue
ens ions
Ġinvest ig
- year
') ;
-s m
Ġen joy
or ig
er ing
c p
le ased
ple ments
Ġreturn s
p at
B O
ĠH ouse
.L abel
Ġwe ight
igh b
Ġcondition s
Ġex ception
d escription
Ġtr ad
- to
Ġ{ }
Ġmod ule
EN D
. ap
.p rops
Ġcon structor
av es
Ġf avor
ĠN ow
; i
ĠM ain
_ k
er ies
âĢĻ ll
trans form
imest amp
P re
Ġm er
. res
st ant
L ocation
_N AME
Ġlos s
Ġ ĊĊ
n et
Ġeng ine
B lock
Ġiss ues
Ġpar se
ĠB ar
Ġst ay
ĠJ SON
Ġd om
air s
w ner
Ġl ower
", čĊ
ĠD em
uf act
Ġp s
Ġper fect
R L
Ġed uc
l s
em ory
ARR ANT
u ge
Ġex act
. key
al led
e ch
ie f
\ /
o ke
Ġfor mer
al loc
Ġs ix
id a
Ġm argin
Ġhe art
al d
p ack
.getElement ById
ĠW ARRANT
Ġr ather
Ġbuild ing
er man
lic e
Ġquest ions
iz es
le ge
irect ory
Ġj e
Ġc as
pro ps
ut f
Ġse curity
Ġhow ever
we ight
Ġins ide
Ġpres ident
Ch ar
ĠW ITH
.m ap
Ġgr aph
Ġt ag
_st atus
Ġat tempt
op p
us es
ĉ const
Ġr ound
, $
Ġfri ends
Em ail
? >
Res ource
KE Y
os p
. query
ĠN orth
able s
ist rib
_c lass
el lo
Th at
Ð º
pecial ly
ĠPres ident
Ġcamp aign
Ġal t
are a
Ġch all
Ġop port
.C on
Ġenerg y
li ke
. string
ing ton
) *
y y
Ġprof ession
ir th
Ġse g
æ ľ
Ġh or
i ers
c an
Ġbeh ind
Pro duct
f g
ĠS k
.j pg
? :
] ;ĊĊ
Ġcall back
ĠH ttp
Ñ Į
l ong
M S
AT H
Ġr aise
Ġwant ed
row n
ut or
l t
] =
el ine
M A
Ġse par
c s
se mb
D is
bs erv
ĠW ill
Ġpol icy
Ġth ird
ph one
Ġb ed
/ g
. __
ĠIn c
iz ing
.re move
in stance
.t ype
Ġs erv
E ach
Ġh ar
ĠM essage
( key
SE LECT
P os
)) ;čĊ
Ġre comm
Ġtr aining
ĠE nt
ĠCh ar
ic ht
(f ile
Ġp rior
G ame
Ġex it
Param s
.c ore
P C
n es
anc ed
( request
P assword
} >Ċ
Ġm ag
Ġre lease
Ġsh all
ud ent
ĠS outh
and o
: '
.Tab Index
s k
ann er
is set
Ġout side
led ge
Ġ å
ĠR ob
Ġim m
! Ċ
ĠWe b
D es
B C
anc ial
R oute
D ec
fer ences
Ġp urch
ĠM odel
ct or
g n
_st art
_ un
. *
is es
Ġg round
Ġun ique
Ġbe aut
{ "
Ġp our
ĠO ct
Ġt ree
set s
_ res
') ->
_re g
(" \
Ġby te
B l
Ġd ating
Ġm atter
ĠR em
Ġ' ../
ĠA ug
ĠL a
Ġ$ (
ourn al
i am
Ġshow s
w rite
Ġb all
Ġsim ply
Ġf ast
Ġmem ory
A SS
ĠO f
ov ed
ant e
a ul
ist ry
)) );Ċ
Ġf it
< string
Ġpolit ical
anc el
_ .
c ard
.c urrent
o ch
_ image
\ t
# Ċ
( L
Ġindu stry
com ing
Ġex tra
Ġreport ed
.st art
Ġres ources
Ġim g
fl ow
_E X
(n ull
ĠP re
Ġwr ong
inter face
Param eter
n ers
á »
t ure
ers ist
oun try
Ġseem s
al ance
de st
ĉ String
Ġm aint
Ġun it
act ers
ĠT R
if ul
export s
pro ject
App lication
leg ate
Ġt akes
ter m
Ġet c
ust er
Ġappe ar
add ress
Ġf em
h s
Ġh om
, -
Ġdiff icult
Ġcom ing
O pen
Ġset tings
ĠW ar
ĠTh en
Ġaut om
ĠF oundation
Ġqu ite
D escription
Ġb log
i qu
P S
_f ield
J son
SS ION
ĠS ch
ĠL O
Ġdes cri
Ġevery one
Ġpret ty
Ġlong er
Ġm enu
Ġcurrent ly
se c
Ġrelations hip
################ ################
ĠM ap
as et
Ġparam eters
Ġcr ush
" čĊ
IL ITY
ig ration
Ġc out
t otal
Ġn ames
nd ef
") ;
ri end
yn amic
Ġeff ort
Ġact ual
Ġfield s
O UN
t ers
Ġf ix
_m odel
Ġc ases
C A
M y
Inter face
ĠS E
] ]
al le
ĠN ational
ĠArray List
in line
. V
ar a
ref ix
as c
Re ader
ĠÐ ¿
ast ic
( ()
C l
.annot ation
Ġperform ance
ail y
.to String
.n et
view s
. end
ay ers
l ate
ĠA pr
ed eral
'] )
.b ody
Ġhigh er
_f l
c r
al ert
_n ode
ĠG oogle
Ġit self
A uth
urrenc y
Ġsignific ant
app end
Ġres pect
str ap
Ġun a
riter ia
P ORT
.ap ache
Out put
Ġpro gress
Ġm id
ĠM icrosoft
Ġres ource
ab lish
Ġd im
. load
.A pp
Ġd irection
Ġadd itional
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ
Ġnum bers
Ġcompan ies
.T h
Ġs ound
user name
Ġstat ement
Ġal ert
Ġcon tract
h ome
_l ength
.Com ponent
e v
. Ex
ï¼ ļ
" ;
ĠH igh
Ġ )ĊĊ
ĠP oint
op h
Ġl ines
-> _
" )ĊĊ
o x
app lication
Ġ ]Ċ
ĊĊĊĊ ĊĊ
Ġso on
ction s
ing er
Ġj oin
ĠP e
Ġ ë
Ġl as
. E
c ss
/ or
ĠSt art
ĠT O
Ġsub s
con n
com ponents
DE BUG
qu are
F unction
end ar
. index
Ġf ill
Ä Ļ
Ġcho ose
h ow
ĠAmeric a
ass ets
-------- ----
ĠV alue
Ġoff ice
Ġv eh
Ġtrans form
ĠAr t
Ġin de
Ġf n
Ġim plements
ang o
ple te
+ "
t mp
am ily
Ġhas h
miss ions
E ST
g t
Pro vider
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ
Ġfl ag
Ġpartic ip
d en
ĠReturn s
Ġnot e
ü r
p m
ide os
Ġspec ified
ĠE N
est er
ol id
Ġup on
( std
ĉ v
Ġ' \
u z
Ġv ert
Ġv ict
ĉ self
Ġ" $
. k
Ġgroup s
g ithub
l ang
Ġm ut
T O
Ġv e
ĠP lease
;ĊĊ Ċ
ac cess
Ġ{ "
re a
Ġr isk
ick er
og gle
ĉ while
AN G
.s end
Ġwom an
Ġget s
Ġ ign
ĠI d
_ log
ON E
Ġe vid
ĠH ar
_s ub
Ġend l
Ġinclud ed
() );ĊĊ
ĠA p
ig r
Ġs em
ĠBl ack
d oc
_t able
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
- up
Ġca use
Ġ ..
Ġv an
_d ict
Ġf ocus
IN D
CE SS
.L og
Ġmult iple
id o
Ġreg ard
- M
and ler
our se
Ġde g
. U
Ġadd ition
Ġvar ious
Ġrece ive
е н
ĠH T
Ob j
D F
Ġincre ase
ĠO pen
] ;
Ġcomm it
? Ċ
ateg ories
at ory
sh ip
ĠM ich
Ġh tml
rom ise
Ġle ave
Ġstr ateg
av en
ĠCon sole
k nown
- n
_ LE
.com ponent
Ġb re
S ession
i ance
Ġal ign
typ edef
_ result
ĠW HERE
.s plit
Ġread ing
FA ULT
Ġc lo
Ġnot ice
_p r
ar ter
Ġlo ck
Ġstand ard
et ic
ell ow
Ġp adding
ĠH is
Ġst ates
_c ast
( P
a a
Ġintern al
e an
ĠP RO
ĠK ey
Ġes pecially
m ing
Ġc ross
Ġn ational
_ object
f ilter
Ġs cript
. update
_ i
ĠAss ert
/ core
%% %%
Ġproble ms
ist or
Ġ. =
Ġar ch
Ġwrit ten
Ġm ilit
M ENT
. ch
ca pe
ĠM us
_ config
ĠA PI
fo ot
Ġim ages
end l
. In
F irst
Ġpl atform
.pro t
O ption
st e
ĠT ODO
Ġfor ce
. cont
ĉ echo
ĠD av
P tr
( B
R T
ĠB ase
] ['
Ġann ounc
con sole
ĠP y
d s
. as
Ġpre vent
ap an
Ġ{ '
}
ĠS ervice
ĠS en
ad or
pro file
T op
Ġit er
p o
I ES
J SON
I E
i ant
ãĢ ģ
_ j
ĠSe pt
_m ap
b um
( context
ĠH ome
i ans
G B
Ġl iving
Ġp attern
( input
ic ient
C ore
Ġent ity
Ġint eg
Ch anged
Ġuse ful
.in fo
Ġto ol
( item
Ġo k
Ġfe ed
I X
é s
ĠNew s
rem ove
err y
ĉĉĉĉ ĉĉĉĉĉ
ip ment
a res
D o
C urrent
. content
.G roup
ustr al
Ġ Ñģ
} )
Ġpop ular
Ġst re
Ġmethod s
_ ERROR
Le ft
c al
bs p
.To String
Ġd ir
Ġallow ed
Ġimp act
") ]Ċ
. config
Ġelement s
Ġpro te
Ġtr ain
. tr
r s
ĠRep ublic
ĠT ask
ar ies
( D
( get
â̦ ĊĊ
Ġrel ated
Ġv ers
Ġs il
Ġ" ";Ċ
Ġc md
Ġtechn ology
.w idth
F loat
ĠU se
B ody
sh ould
.j oin
F ont
ll um
yc le
ĠB rit
Ġm it
Ġs cale
Ġ( _
ern el
") )Ċ
Ġsc ore
/ v
Ġstud ent
U C
.sh ow
Ġa verage
En abled
( ex
com mon
im ation
: @"
ch ie
Ġ ...ĊĊ
r iver
ĠM arch
c ategory
f in
Ġcour t
Ð ²
S erver
Ġcont ainer
- st
_f or
Ġpart s
Ġdec ision
ob s
ou b
m itted
Ġ$ ('#
Ġs aw
Ġappro ach
IC E
Ġsay ing
Ġany one
m eta
S D
Ġs ong
d isplay
O per
out es
Ġch annel
Ġchang ed
à ª
Ġfin ally
_n umber
P lease
à ¤
or ing
- re
Ġk ill
Ġdr ug
w indow
Ġcon vert
omb re
Ġw ays
H elper
ĠF irst
( __
ur ity
ĠW indows
e es
Ġm at
r apper
Ġpl us
ang es
" ].
az on
/ t
l at
ast e
Ġpro file
Ġread y
#if ndef
ro te
Ġs ense
G ener
ĠCon fig
om y
ĠJ une
Ġlate st
Ġsa f
Ġreg ion
Ġde ep
w itch
ĠP ark
} `
ĠF rom
I I
Ġc v
Ġre ach
Ġcount er
ĠW ork
ĠU RL
ĠUp date
', čĊ
Ġim medi
c lose
ad os
fer red
Ġweek s
ur g
Ġdam age
Ġl ost
an i
_ lo
Ġhim self
Ġd og
) ]Ċ
ï ¿
p ir
t t
Ġp aper
Ġthe ms
se cond
Ġst aff
ĠIn put
" +
ĠF acebook
Ġal loc
Ġs ched
AC E
Ġthems elves
ĠCom ponent
Ġdr iver
j a
(p ath
Ġc ategory
all s
p u
llum inate
ĠA ction
.b utton
ĠG L
ist ics
Ġo il
Ġst ock
> '
Ġde ad
V AL
Q UE
**************************************************************** ********
Ġch arg
R eturn
Ġf ul
d om
Ġr ules
Ġmod ify
Ġe val
h am
at ement
\ <
ul a
= False
R A
Ġcont ains
Ġst ack
m ar
Ġ{ }Ċ
Ġund efined
A ss
ĠCh ina
ve y
* Ċ
Ġplay ing
) /
act or
Ġb ottom
li er
ĠN umber
Ġcou ple
D C
ĠS O
g or
.set Text
s uccess
com mand
F ilter
ĠO ur
_ item
Ġc tx
Ġro ad
V ersion
c ase
ur t
av ior
y ch
semb ly
ĠPro duct
Ġh eld
a fe
Ġinclud es
< quote
Ġa void
ĠF in
ĠM od
Ġt ab
an o
à ±
ipp ing
- e
Ġins ert
t arget
ch an
.M odel
IM E
\ Ċ
Ġm achine
av y
ĠN O
ĠInt er
Ġoper ation
mod al
T ag
] :
Ġprodu ction
Ġare as
Ġre n
_f rom
n bsp
Ġoper ator
m en
app ed
_p er
z en
(" .
.s ave
=" {{
Ġt or
( response
Ġc andid
Ġcon v
a iled
ĠL ib
com p
ur a
ï¿ ½
ĠH ere
Ġarg ument
h ood
Ġest ablish
ograph y
Ġon Click
amb da
Ġs ch
Ġmov ie
Ġse c
Ġact ivity
Ø §
Ġs ql
_ all
inc ip
Ġprovid es
Ġs ys
ack et
Ġwas n
Ġus es
ĠF unction
.g oogle
ĠRes ult
Vis ible
ag ma
el come
ĠS y
ĠC ent
AL SE
ac ión
EX T
Ġl icense
ĠL ong
Ġacc om
Ġab ility
. height
Act ive
olog ical
ol y
)) ,
.S e
Ġparam eter
pr ite
AB ILITY
.s ervice
ĠG roup
_ query
ĠI tem
in ing
Ġj ud
im s
f ix
ind er
ag ram
Ġfunction s
Ġexper i
ĠE m
Ġro t
Ġp en
.b tn
ĠA S
#if def
Ġcho ice
ĠP age
_P RO
Q U
å ı
ant ity
 Ń
word s
Ġread only
Ġf lex
prot ected
ĠAn y
Ġchar acters
enc ed
ĠJ uly
il er
C ard
ur ance
Ġre v
.e vent
al y
Ġwon der
ĠP ort
Ġleg al
ro le
Ġt en
Ġgo es
M P
wh ite
): čĊ
)) čĊ
Ġre ference
Ġm is
ĠPro ject
ick s
> &
C ON
Ġre pl
Ġreg ular
St orage
ram ework
Ġgo al
Ġt ouch
.w idget
Ġbu ilt
d es
P art
( re
Ġw orth
h ib
g ame
ĠÐ ²
ac ion
ĠWh ite
(t ype
( `
Ġn atural
Ġin j
Ġcal cul
ĠApr il
. List
Ġassoci ated
ĉ System
~ ~
= [
Ġst orage
Ġby tes
Ġtr avel
Ġs ou
Ġpass ed
! =
as cript
. open
Ġgr id
Ġb us
Ġrec ogn
A b
Ġh on
ĠC enter
Ġpre c
b uild
HT ML
ĠS an
Ġcoun tries
a led
t oken
k t
Ġqu al
L ast
ad ow
Ġman ufact
id ad
j ango
N ext
x f
. a
Ġporn o
ĠP M
er ve
it ing
_ th
c i
= None
g s
Ġlog in
at ives
'] );Ċ
Ä ħ
Ġ ill
I A
child ren
D O
Ġlevel s
Ġ{ {
Ġlook s
Ġ" #
To String
Ġnecess ary
ĠĠĠ Ċ
c ell
En try
Ġ' #
Ġext rem
Select or
Ġplace holder
L oad
Ġre leased
O RE
En umer
ĠT V
SE T
in q
P ress
ĠDep artment
Ġprop erties
Ġres pond
S earch
a el
Ġre qu
ĠB ook
/ Ċ
( st
Ġfin ancial
ick et
_in put
Ġth reat
( in
Str ip
ì Ŀ
ç ão
Ġevid ence
)) ;
ĠB ro
Ġ[ ];Ċ
Ġ ou
b uf
S cript
d at
Ġr ule
# import
=" /
S erial
Ġstart ing
[ index
a e
Ġcon trib
s ession
_ new
ut able
o ber
Ġ" ./
Ġlog ger
Ġrecent ly
Ġreturn ed
č čĊ
)) )Ċ
ition s
Ġse ek
Ġcomm unic
Ġ" .
Ġuser name
E CT
D S
Ġother wise
ĠG erman
. aw
Ad apter
ix el
Ġsystem s
Ġd rop
Ġstruct ure
Ġ$ ("#
enc ies
ann ing
ĠL ink
ĠRes ponse
Ġst ri
Å ¼
ĠD B
æ Ĺ
and roid
sub mit
ot ion
( @
.t est
ĊĊĊĊ ĊĊĊĊ
] ;čĊ
Ġdirect ly
Ġ" %
r is
el ta
A IL
) {čĊ
m ine
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ
( k
b on
as ic
p ite
__ _
M ax
Ġerror s
ĠWh ile
Ġarg uments
Ġens ure
R ight
-b ased
We b
Ġ- =
Ġint rodu
ĠIn st
ĠW ash
ord in
j oin
D atabase
Ġgr ad
Ġus ually
IT E
Prop s
? >Ċ
ĠG o
@ Override
RE F
Ġ ip
ĠA ustral
Ġ ist
View ById
Ġser ious
Ġcustom er
.prot otype
od o
c or
Ġdo or
ĠWITH OUT
Ġpl ant
Ġbeg an
Ġdist ance
() ).
Ġch ance
Ġor d
c ame
pr agma
Ġprot ect
rag ment
ĠN ode
en ing
Ñ ĩ
Ġr oute
ĠS chool
h i
Ġne ighb
A fter
lic it
Ġcon tr
Ġpr imary
A A
.Write Line
util s
Ġb i
R ed
.L inq
. object
Ġlead ers
un ities
Ġg un
on th
ĠDe v
F ILE
Ġcom ments
_l en
ar row
am ount
R ange
s ert
Grid View
Ġup dated
ĠM o
Ġin form
oci ety
al a
A ccess
Ġh ab
Ġc reat
_ arg
ĠJan uary
ĠD ay
") čĊ
up le
d ocument
gor ith
m enu
ĠO ver
b b
.t itle
_ out
Ġle d
ur i
Ġ? >
g l
Ġb ank
ay ment
ĉ printf
M D
Ġs ample
Ġhand s
ĠV ersion
u ario
Ġoff ers
ity Engine
Ġsh ape
Ġs leep
_p oint
Set tings
Ġa chie
Ġs old
ot a
.b ind
A m
Ġsa fe
St ore
Ġsh ared
Ġpr iv
_V AL
Ġs ens
) {
Ġrem ember
sh ared
e lement
Ġsh oot
V ert
c out
Ġen v
_l abel
Ġ >Ċ
r un
Ġsc ene
( array
de vice
_t itle
ag on
] čĊ
ab y
Ġbe came
bo olean
Ġp ark
ĠC ode
up load
rid ay
ĠSept ember
F e
Ġs en
c ing
F L
C ol
ut s
_p age
in n
Ġim plied
al ing
Ġyour self
.C ount
con f
Ġa ud
_in it
. )
Ġw rote
N G
. Error
ä »
.f or
Ġe qual
ĠRe quest
Ġser ial
Ġallow s
X X
Ġm iddle
ch or
à ¸
erv al
.C olumn
read ing
Ġesc ort
ĠAug ust
Ġquick ly
Ġwe ap
ĠC G
rop ri
h o
Ġc op
( struct
ĠB ig
Ġv s
Ġfre qu
. Value
Ġaction s
Ġpro per
Ġin n
Ġobject s
Ġm atrix
av ascript
Ġon es
.g roup
Ġgre en
Ġp aint
ool s
y cl
enc ode
ol t
com ment
. api
D ir
Ġun e
iz ont
.p osition
Ġdes igned
_ val
av i
ir ing
t ab
Ġl ayer
Ġview s
Ġre ve
ra el
ĠO N
r ics
n p
Ġc ore
() );čĊ
M ain
Ġexp ert
ĉĉ čĊ
_ en
Ġ/ >
ut ter
I AL
ail s
ĠK ing
*/ ĊĊ
ĠM et
_ end
add r
or a
Ġ ir
M in
Ġsur pr
Ġre pe
Ġdirect ory
P UT
- S
Ġe lection
h aps
.p re
c m
Val ues
Ġ" Ċ
c olumn
iv il
Log in
in ue
Ġbeaut iful
Ġse cret
(e vent
Ġch at
um s
Ġorig in
Ġeffect s
Ġman agement
ill a
t k
Ġset ting
ĠC our
Ġmass age
ĉ end
Ġhapp y
Ġfin ish
Ġc amera
ĠV er
ĠDem ocr
ĠH er
( Q
con s
it a
Ġ' .
{ }
ĉ C
Ġst uff
Ġ :Ċ
ĠA R
T ask
h idden
er os
IG N
at io
ĠHe alth
ol ute
Ent er
' >
ĠT witter
ĠCount y
s cribe
Ġ= >Ċ
Ġh y
f it
Ġmilit ary
Ġsa le
re quired
n on
boot strap
h old
r im
- old
ĠD own
Ġm ention
cont act
_g roup
od ay
Ġto wn
Ġsol ution
u ate
ell ing
] ->
ot es
ent al
om en
osp ital
ĠS up
_ EN
Ġsl ow
SE SSION
Ġbl ue
ag o
Ġl ives
Ġ ^
. un
in st
en ge
Ġcustom ers
Ġc ast
ud get
ï¼ ģ
ic ens
Ġdeter min
Se lected
_ pl
ue ue
Ġd ark
// ĊĊ
s i
ther n
ĠJ apan
/ w
P U
ĠE ast
ov ie
Ġp ackage
Ġn or
Ġap i
b ot
" ];Ċ
_p ost
ul ate
Ġcl ub
') );Ċ
Ġlo op
PI O
ion e
sh ot
In itial
Ġplay ed
reg ister
rou ght
_m ax
ac ement
m atch
raph ics
A ST
Ġexist ing
Ġcomple x
D A
.C h
.com mon
m o
Ġ' ../../
it o
Ġanal ysis
Ġdel iver
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ
id x
à ł
ong o
ĠEng lish
< !--
Ġcomput er
EN SE
Ġp as
Ġr ais
H ash
Ġm obile
Ġo wner
F IG
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
th es
Ġat tr
w d
.t ime
aw n
Ġtreat ment
ĠA c
. View
im pl
m ore
p ass
Ġh a
.f rom
Ġle ading
FF FF
( error
. ui
at ar
ad ers
d ates
Ġz u
Ġfl ow
T arget
Ġinvol ved
Ġi o
par se
$ _
he st
. int
- item
as y
S p
Ġsh ift
N T
Ġt f
_T R
. web
C S
Ġ} )
Ġey es
_ z
' );čĊ
if orn
Ġ{ @
Ġn ice
.l ist
ĠĠĠĠ čĊ
Ġf loor
Ġred irect
ĠU K
( ['
Ġw ish
Ġcap t
leg al
ĠI O
Ġst age
. String
ĠA fr
ig en
ĠS H
De lete
ell s
Ġsol id
Ġmeet ing
Ġwork ed
Ġed itor
in y
Ð ¼
_ read
. Id
e ff
Off set
ch a
US ER
ĉĉ ĠĠĠ
ipp ed
Ġd ict
ĠR un
.h pp
Ġan g
x ml
im ple
Ġmed ical
_t oken
con nect
Ġh our
Ġcont roller
_m essage
U ID
G r
and ed
_C H
Ġbook s
Ġspe ak
am ing
Ġm ount
Rec ord
ĉ struct
.W eb
ond on
Ġ// Ċ
Ġf elt
.A uto
id ge
_p os
P R
Ġmod ern
C ollection
_m sg
C D
ĠL o
Ġsecond s
ib ly
.e quals
Ġintern ational
# pragma
oo th
W riter
i ate
Ġce le
ĠB it
iv o
iv ery
r d
HE CK
Ġc ache
.c ount
Ġro ll
.Re ad
RE D
Ġset up
izont al
model s
arg v
Ġconsider ed
=" ../
set tings
ĠR el
Ġgrow th
Ġm ix
ĠWash ington
Ġpl t
ĠI M
á º
Ġturn ed
ĠDate Time
ĠW ed
( url
Ġ" -
Ġlet ter
As ync
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ
ĠOct ober
_l ine
Ġatt ention
Ġcol lect
ĠH ash
Ġim ag
T ree
Ġsit uation
et te
_n o
IV E
Ġv on
.t arget
Ġknow ledge
Ġdr ive
.p ost
Ġb lood
Ġc it
pr imary
Ġconfig uration
te e
Ġph oto
is ode
Tr ace
Ġg ave
Ġsh ot
ĠA ir
Ġm other
pr ice
Ġmor ning
)) {Ċ
- x
Ġtr ade
Ġdes c
Ġ&& Ċ
Ġparent s
A pi
å Ī
t ed
w er
Ġ æ
Ġs y
ĠK e
Par ser
å ħ
anc y
Ġpie ce
iforn ia
to String
r an
id ing
PT ION
com es
/ lic
.c lient
E l
L ong
Ġprofession al
ru pt
v a
Ġcomplet ely
Ġpract ice
Ġse lection
R em
in i
Ġc am
RE E
Ġsit es
p a
AT US
Ñģ ÑĤ
arr ant
* (
_ KEY
ĠB utton
ĠF riday
se qu
Ġre ader
Ġm essages
è ¯
Ġbu f
K e
Ġn ov
H P
M sg
al ign
ar ily
Ġ' ,
_w ith
Ġd as
Ġhe ard
at omic
ri al
) [
Ġdis e
@ end
Ġg old
Ġf air
Ġsa les
. Button
str ict
s ave
Ġme asure
Ġ" +
ec ause
View Controller
ĠT able
.p aram
Ġdec ided
(( (
IN FO
Ġopport unity
T e
IC ENSE
cc ording
k i
ĠU N
Ġcont ain
Ġman ager
Ġp ain
ĠF ire
rom e
Ġpl ans
F ound
l ay
ĠDec ember
Ġinfl u
à º
ren ch
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ
az ing
b rief
c all
wo od
Ġload ed
Ġgr and
/ f
im p
_ U
ST R
âĢ ¢
Ġcred it
.C olor
or ge
QUE ST
Ġdiffer ence
ĠP C
w args
Ġp ub
und ay
Ġf ra
.m ax
Ġtri ed
ann els
s end
Ġreport s
Ġad ult
ä º
Ġcons ist
ĠSt reet
ĠPro gram
S QL
M atrix
ounc il
- A
ĉ w
Ġwho se
Ġrel ig
ĠS ex
Ġg ives
n one
.m essage
( G
.aw t
- right
ĠNov ember
ell ig
ut ive
Ä ĥ
over n
Ġeas ily
Ġide as
ĠÐ ½
/c ss
ly ing
el le
C an
_c olor
оР²
Ġp air
ng th
Ġs plit
d rop
art y
on a
Ġcap ital
Ġhe ar
Ġex ists
ĉ log
em o
R un
o i
Ġpar ser
ĠM ethod
Ġeduc ation
[ k
Ġlib rary
> ";Ċ
_ UN
ĉ std
od ed
Ġcall s
h ere
R el
Ġbr and
back ground
g a
_add ress
_param s
C ategory
ĠInd ia
_e vent
Ġ ing
R ender
.c l
ump y
Ġp et
F C
ĠA nt
Ex t
Ġchar ge
en ed
gr ad
E O
Ġdep end
Ġ .ĊĊ
fr ame
Ġd f
Ġh uge
ĠP ART
ed s
; ;
ĠA M
Ġbas ic
ĠL et
lic h
Ġar m
Ġst ar
Ġf ederal
W ork
Ġcar ry
ĠIs rael
( obj
={ {
Ġs aved
Ġs yn
Ġconst ant
V ENT
Ġpos itive
Ġcon duct
Ġsk in
Ġear lier
Ġl ayout
ĠI P
O UR
Ġt im
styles heet
_ cl
ĠC ard
++ ){Ċ
Ġtem per
ĠDav id
ĉ try
.d art
Ġwant s
Ġp icture
Ġv ideos
ĠCom m
is ions
_M AX
M apping
- content
ĠE ar
- de
Ġpre m
br uary
Ġcom ponents
Ġthrough out
Ġp ull
Ġp ages
ent e
res pond
Ġg as
cript or
Ġed ge
Ġb ound
A CT
**** **
Ġcre ating
ĠC H
Ġnull ptr
B r
+ '
.c o
> ::
Ġle arning
.L ength
_S H
Ġpat ients
A IN
Ġk ids
Ġcom fort
Ġsh own
ug ins
ĠB ack
ell a
_C L
Ġl at
Ġdis patch
Ġclass es
. at
.b egin
Ġsuccess ful
b an
Ġobt ain
ĠS l
Ġl ack
iter ator
Th read
(s ize
Ġn one
.h as
_ X
s ort
n ap
p et
b in
ĠCan ada
The y
Ġd ans
ĠM at
< td
Ġh air
Ġ' ',Ċ
Ġc u
Ġlaw s
let ed
p ed
Ġp ow
Ġk new
_C OM
_ ,
ĠM ag
id ents
( req
Ġ ),
- center
Ġw ide
ĠA uthor
st ants
Ġjob s
Ġm ath
et imes
Bo olean
Ġs cope
_ is
Ġme as
Ġkey s
el ay
Ġexact ly
'=> '
ĠP aul
m as
ĉ print
(l en
f d
Ġ) ;
. Event
q li
ir it
ield s
om an
ĠT op
Ġv ote
Ġm ask
Ġthem e
- Ċ
Ġpro ps
Ġf ine
Ġwrit er
_ offset
c ar
Ġal tern
Ġc opyright
Ġdest roy
pp er
Ġgener ate
pp ed
âĢĻ d
ĠĠĠĠĠĠ Ċ
m ake
ĠSh ow
Ġb rowser
Ġfavor ite
Ġcare er
Ġhappen ed
( char
Ġrecomm end
Ġl iter
.f ilter
gr ade
ĠÂ £
Ph one
om s
Ġn amed
- label
ip o
ĠO ther
Ġp anel
Ġro ck
S cale
ĉ assert
Ð ´
Ġtr ust
fr ont
Ġdem on
A r
N et
Ġecon omic
foot er
Ġr ace
(n ode
ĠO ption
s plit
Ġphys ical
if est
Ġrem oved
. http
)) ,Ċ
Ġlook ed
' ;
d ing
g est
atur day
/lic enses
Pr ice
Ġd ro
Ġto wards
Ġun s
ĠC L
ĉ static
Ġ rows
Ġdef ine
.re place
Ġf ather
ĠDes ign
ass ign
m ut
De vice
D id
') )Ċ
omet ry
ay load
Ġh istor
ĠP aram
ĠBo olean
Ġn ature
Ġj s
Ġn ation
i h
Ġdis cover
se m
Hand le
ĉ r
ĠTe chn
Ġw all
{ $
@ property
Ġ" ../
Ġex am
.d raw
opp ing
Ġnear ly
Ġco ol
Ġinde pend
RE S
Ġhand ler
ĠMon day
Ġs un
St yles
ous ly
Ġ ĉ
v est
D isplay
( y
atic ally
Ġpred ict
y ing
Ġsom etimes
" ]Ċ
Ġdr ink
Ġb ul
ific ations
. insert
.re g
Ġtest s
Al ignment
Ġal leg
Ġat tribute
ĠN ote
Ġmy self
art s
N ow
Ġinterest ing
li ents
Ġpop ulation
ĠCal ifornia
" I
å ¹
Ġgre ater
ues day
Ġth ous
Ġcost s
Ġla unch
\ Http
k er
b and
ĠPl ay
Ġb and
.sh ape
es ome
art icle
.r f
Ġw er
á s
em bers
us r
B A
ic an
et t
valid ate
ult i
Ġimmedi ately
z er
Ġfig ure
o es
ell er
irc le
ĠS ign
.d b
Ġr ank
By tes
Ġproject s
_re c
UL AR
A PI
ĠL ine
P ort
Ġp oll
Ġg iving
id ence
-- Ċ
Ġpl ot
ic ial
Ġw arrant
IT ION
ĠD ouble
Ġbill ion
gorith m
Ġequ ipment
D ATE
Ġ@ "
E E
Ġp le
i ation
Ġhead ers
Ġpro ced
.Component Model
ĠOb ama
Ġp a
ĠB est
im ately
.get String
. \
mp loy
Ġr aw
_b lock
und red
" },Ċ
.Group Layout
Ġb rought
NS String
th row
cre ated
.N ew
_ view
C P
ep s
O p
Ġgr atis
Ġ' "
Ġinter view
"" "Ċ
Ġpart ial
Ġa ria
b ing
A uthor
Bo ok
ĠP at
um an
Us ers
pl us
ĠD irect
ven ue
al pha
UC CESS
ĠC all
Ġ );čĊ
im ated
Ġrem ain
Ġant i
ĠL ondon
Ġsaf ety
PO SE
o les
cont roller
By te
ĠCour t
ĠPh il
ĠAss oci
en a
å IJ
_ST R
co in
resh old
Ġb atch
_C lick
entic ation
> ';Ċ
ent y
Ġbegin ning
Ġz ero
ĠCon vert
Ġt err
Ġp aid
Ġincre ased
c atch
-s ize
act ivity
e quals
Ġque ue
Ġ" '
ĠIntern ational
Ġf ür
urs day
Ġsc ient
all ow
ax is
Ġapp ropri
ed ge
Ġid x
S uccess
ent ifier
: \
x is
Ġmax imum
ark s
Ġb irth
( index
Ġmay be
.p y
file s
Ġlim ited
_ check
lo ok
pl ies
Ġmov ement
'] .
Ġbro ad
ĠB E
ĠUn ityEngine
.c pp
ĠE very
Ad min
Ġf ans
p ared
Ċ ĠĠĠĠĊ
Ġfore ign
Ġp an
Ġt our
ĠOr der
Ġmov ing
Ġa uf
C all
c b
Å Ł
vent ory
ĠS ql
Ġful ly
Click Listener
W ORD
Ġannounc ed
) čĊčĊ
Ġagre ed
ri e
Ġe arn
_l ink
. array
(t ext
Ġmaterial s
, p
ff ff
v g
ĠÂ ©
Ġun less
aj ax
LO G
Ġsex ual
Ġ\ "
- time
Ġco ach
Ġsupport ed
Ġphot os
if orm
.C reate
) ]
ri er
Ġd ialog
av er
ig e
) +
_id x
: [
_m in
ĠC ong
Ġpress ure
Ġteam s
S ign
b egin
ri an
NE SS
L S
Ġimpro ve
ĠS unday
Ġdef inition
ig er
roll ers
Ġthink ing
T emplate
- F
Ġem erg
pl ates
ĠUS A
.set State
ĠAl so
re v
Ġen able
ĠC O
PE CT
Ġcon cept
) -
ĠâĢ ¢
Ġset s
Ġmean ing
em on
ĠCon s
c mp
ed er
ann ed
icens ed
ĠS uper
Ġd aily
Ġmult i
_ u
Ġchall eng
_m ode
ĠP romise
Ġstr ict
j o
int on
( list
On ly
> {
Ġveh icle
í ķ
ĠPl ayer
ĠD el
Ġp ool
. url
nes day
();čĊ čĊ
Ġ" );Ċ
L ocal
. ");Ċ
Ġorgan ization
re nder
ĠApp lication
Ġsum mer
ex pected
N A
Ġr ap
_ obj
Ġsur face
ĠP UR
Ġ}, ĊĊ
Ġvariable s
(m essage
Ġop in
.b ack
а н
Ġwork ers
v m
C o
ught er
Ġm aster
Ġ" ",
Ġst ories
. User
Ġcele br
ines e
B S
ĠCom mand
ash board
Ġo g
k g
. image
.st yle
Ġstep s
ĠB en
( args
ĠP erson
, y
Ġofficial s
| Ċ
Ġsk ills
v c
Ġbuild er
Ġg ar
A ccount
ĠA uth
ç Ķ
'] )Ċ
ĠA T
n n
. Int
SS ERT
Ġeffect ive
LE TE
Ġto ols
AR D
Ġdig ital
D ouble
ĠF ind
R C
Ġin line
/ r
AR AM
AS K
Ġint ent
a ight
_add r
Ġrequest s
.f irst
Ġde bug
Ġsp ent
() ));Ċ
Å Ľ
Ġpr incip
Log ger
clud es
. use
Ġsur v
med ia
ĠFe bruary
ĠM ac
Ġmiss ing
Ġw ife
Ġtalk ing
ĠM ake
Ġc art
Ġloc ated
E nc
- a
ch ron
Ġc ards
Ġgu y
Ġp ers
ĠY es
ate ver
ĠA ng
ol ar
ĠE ven
Ġacc ur
ĠP ower
ĠG old
c lear
Pro cess
Ġrec ords
Ġk illed
.c lear
ĠWARRANT IES
Ġpur pose
pan el
J ECT
ÃŃ a
Ġex erc
W S
/ L
. exports
Ġ__ _
Ġs in
S ervlet
Ġd é
.de lete
ro ke
S l
ug h
ear s
Ġpoint er
Ġh op
all ery
Ġo bs
co very
ĉ char
ĉĉĉĉ ĉĉĉĉĉĉ
ĉ def
oc ity
itch en
ul ations
ĠF IT
Ġ ).
straint s
vent ion
Ġrequ ires
ĠO per
M E
OUN T
al let
Ġn orm
I RE
ex as
Ġprogram s
Ġwe ak
' .$
u ing
ĉ ĠĠĠĠĠĠĠ
Ġm il
Ġf irm
init ely
_VAL UE
ap se
atis f
Ġdem and
_m od
Ġdescri bed
Ġpl aces
V ID
Ġal one
Ġex port
Ġv ec
ĠM ax
Ġactiv ities
ict ures
g ener
Ġm a
Ĥ ¬
Ġexpress ion
C allback
_ content
ĠM ost
Ġtest ing
E C
CH ANT
Ġad just
.Th reading
( ctx
Ġag ree
ig hest
Ġu i
ĠL aw
. Y
>
Ġp od
-l g
âĢĿ ĊĊ
Ġdes cribe
ĠEurope an
- sh
ĠPUR POSE
OR Y
Ġcon vers
ĠI lluminate
ĠA v
( ch
? "
ch en
im a
D ocument
Ġoper ations
w in
ĉf unction
. Image
Ġsc en
/ h
ĠS C
Ġexp lo
: %
/** čĊ
N AME
æ Ī
( var
Ġdirect or
ON G
Ġy ield
Ġfe et
ĠS earch
ĠI l
Ġrest aur
du c
Ġint eger
Ġ' ';Ċ
Ġhigh ly
check ed
ĠPART IC
ER CHANT
ï¼ ī
Ġopt im
Q ueue
ĠL I
it ation
Ġtrans port
iss ion
f ill
us ion
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
ĉ bool
- th
u pt
Ġess ential
ant ed
Ġbenef its
ĉ S
' ;čĊ
ik i
Ġgirl s
ic ed
b uffer
] +
Ġso cket
Ġpr ices
ĠF re
Ġs at
Ġw ood
Menu Item
AR G
ĠAd min
OW N
d k
Ġres et
Ġfor ms
ĠÐ ¸
æ ĸ
ĠT uesday
ĠInitial ized
_tr ain
or ary
ateg or
Ġd t
T otal
con struct
il ies
Ġgu ys
е ÑĢ
Ġin struction
y led
Ġintern et
et adata
ad y
f aces
je ction
ĠJ ack
Ġre ct
[ -
ĠL eg
Ġdev ices
O C
Ġ* čĊ
or ation
ert ain
Ġgu ard
ost ream
Ġen um
.l ayout
Ġ" ;Ċ
vo ke
ĠO k
H ome
( tr
ET H
Ġdel ay
Ġpurch ase
d c
Ġare n
_on ce
ĉĉĉĉ Ċ
r or
d raw
.r un
(m odel
Time out
li k
ĠAr g
. en
Ġf ish
c py
_f e
ERCHANT ABILITY
( X
_ output
? ?
Ġj o
and ard
Ġd oll
error s
_b ase
ĠPARTIC ULAR
Ġle ader
Ġcomp ar
Ġd oub
ĠV is
Stack Trace
- C
ĠSt ud
stit ute
M ore
ĠD escription
W ARE
ad s
ĠÐ º
b ind
= self
em ploy
[ n
. all
- B
& &
al m
Ġcult ure
h ouse
Ġsu ffer
Ġ' %
Ġstr aight
ĠSt ar
ud o
Ġd ed
ĠC OM
Ġconf irm
ĠG ood
.s c
________ ________
D R
Config uration
Date Time
Ġad vert
Ġcould n
as ync
st ack
') čĊ
K it
Ġh ous
Ġme chan
r ate
Ġa udio
ĉc out
co res
Ġsp ot
Ġincre asing
Ġ ##
)) )
point s
Ġcomp ared
l ig
Ġbeh avior
ĠB Y
ĠAt t
c raft
head ers
et e
end region
Ġd etail
U LE
ĠCom mon
ĉ protected
st on
ĠFIT NESS
Ġf resh
"> ĊĊ
.ex ample
ber g
Ġmov ed
ĉ e
ĠS aturday
Ġpay load
Ä ĩ
) :ĊĊ
Ġbe y
ur er
< script
Ġs ymbol
Ġass um
Ġp ul
E ffect
Ġh undred
To ol
ak ed
con nection
Ġvo ice
Ġp d
Ġtrans action
Ġlink s
E rr
ĠInd ian
T C
atal og
n i
s ign
<< "
j i
y a
Ġdemon str
ul ated
. St
Ġinst it
Ġbo ost
Ġcell s
ol ic
.P ro
:
Event Listener
ify ing
ĠD i
or row
.ex ecute
Ġcol lege
Y our
Ġlarg est
.d is
Ġqu i
Ġindividual s
_b uffer
Ġn g
S A
ĠCont rol
Ġs ing
Ġsu it
ĠĠĠĠ ĉ
S G
Ġj ump
Ġsm art
om a
ĠEx p
Ġ' -
Ġass ist
Ġsuccess fully
s ys
ĠC re
_ ref
ĠTh ursday
Ġb ur
ĠÐ ´
Ġbey ond
Ġn odes
D etails
in ct
ĠJ ames
Ġa ffect
ex ception
Ġtype of
( čĊ
- se
Ġf etch
` ,
Ġcrush er
} .
ĠB O
Sh ow
Ġr ates
Ġb on
- icon
ĠMed ia
RE SS
ĠVal id
оР»
Ġf uck
ack s
Ġstud ies
M e
Ġown ers
} else
Ġgrow ing
Var iable
ĠB el
.r andom
v ement
on ym
( F
ĠF ALSE
Ġtor ch
( row
ig o
struct ure
Ġcertain ly
D ep
ĠG reen
quest ion
Ġadd ing
ĠDe velop
_ def
Ġm ach
= %
ĉĉ Ġ
cond s
Pro ject
Ġre ject
Ġ Î
Ġpo or
Ġaw are
ĠB uild
ĠBrit ish
ĠN E
Ġnum er
re es
cl aim
Ġm ock
Ġo m
Ġs cre
OL D
. pl
el er
Ġcor respond
_ HE
Ġb inary
_ order
ĠS QL
Ġadv ant
Ġpre v
. [
.assert Equal
pl ier
ar p
Ġclos ed
Ġenc our
ĠQ String
a ud
Ġdevelop ed
Ġper mission
.de bug
oper ator
Ġ' Ċ
Ġs ym
at ively
é e
-c olor
ĠG ET
k y
Ġal though
_re quest
_e lement
........ ........
_D ATA
Ġam azing
Ġs b
ĠDef ault
Event s
Ġfail ure
ac le
Prop erties
Ġd ream
Ġdist r
Ġa u
Ġgener ated
æ ķ
ĠTe am
U SE
Ġin come
Ġey e
_n ot
" ],
_ form
S upport
ord ers
.P rint
v ille
ĠWed nesday
ol ver
Ġopp os
is ation
ol a
C lose
< p
_w idth
In valid
x b
Ġstr ugg
_ action
Ġt xt
ĠP ath
al ar
ĠM ERCHANTABILITY
s ervice
ĠMich ael
able View
De bug
ok es
S he
Ġgu ess
ĠJ ava
_P ATH
Ġparticular ly
ĠI I
Ġd omain
å¹ ´
Ġredu ce
- left
re al
Ġappe ars
Ġcom o
ĠUn it
ĠG overn
al i
alle l
ĠJ ew
_ I
Ġc os
.c olor
ĠG lobal
Ġte le
b en
_ trans
Ġreason s
Ġem b
ens ity
l ines
om in
S creen
а ÑĤ
pect s
cl ip
fo o
re nt
Ġa f
Ġd anger
il ing
N ames
O ur
Ġdistrib ution
Wh ile
S L
W rite
Ġg oto
Ġcolor s
Ġpower ful
k in
Ġdep th
erc ial
ĠCong ress
ĠMark et
D b
u nder
ĠL ast
à Ł
g reg
Ġpost s
_ URL
ot os
D on
Ġm icro
Ġar rest
Ð ¿
Ġ( @
ĠH ot
ĠInd ex
; &
# !
ĠN or
ĠC ap
- (
Ġinterest ed
pe ar
Ġre nt
Ġal bum
ol icy
.l ang
. trans
. format
Ġ{ čĊčĊ
ph ere
Ġax is
ĠB usiness
ersist ence
ur r
Ġmin imum
end or
ĠS D
ĠIntern et
å ¤
Ex p
iver se
M M
Ġob vious
Ġbas is
Ġsc ience
Ġb udget
iz ations
P A
Ġfl ags
pre t
LO CK
Ġvari ety
Ġtr uth
d t
Ġg one
Ġb attle
< std
ĠS il
r f
ud a
Ġer ot
ĠC am
Ġst ation
Ġ'
chem e
ĠS un
Ġfin ished
Ġsh op
ĠK ore
Ġe ight
_RE G
N D
> ,
">
(n um
ĉ inline
Trans action
. On
Ġm ail
re y
result s
Ġn av
IM IT
_id s
M ake
å Ĭ
Mod al
ĠLO G
ĠS ur
Ġinstance of
Ġover all
ĠIn formation
Ġcon struction
_F ILE
b ut
Ġmed ic
Ġd uration
it ness
ag ent
A V
Ġse ven
ol f
Ġ} }Ċ
" ],Ċ
Ġcall ing
Ġan s
th rows
or izontal
Ġuse State
.f l
ĠSt atus
ĠOn line
R R
ĠR ich
ĠH ill
Ġbr ain
Ġfollow ed
em ic
Ġsl ight
Ġins urance
.A rray
Ġab stract
ĠS um
red irect
own er
( msg
ĠCl inton
N on
ĉ ex
Ġv olume
ĠEvent Args
- L
ĠD im
ĠM art
Ġc ursor
Ġimplement ation
urre d
Ġlarg er
);ĊĊ Ċ
' +
. transform
Ġup load
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
D raw
n el
ĉf loat
q rt
ĠN etwork
Ġt it
A xis
. android
Ġcomplet ed
Ġm ur
Ġcolumn s
x c
Ġsup ply
im inal
Ġs pr
================================ ================================
Ġun its
( u
m i
re place
[ key
à ¹
ant ic
Ġpay ment
, B
ĠApp le
g in
Re quired
# +
land s
Ġs qu
Ġfact or
de c
Ġstre ngth
Ġbo y
Ġb alance
Ġs ources
s creen
-t op
ĠAm azon
Ġh idden
е ÑĤ
_ client
Ġe at
.d isplay
ĠÂ »
Ġtr igger
an ager
Ġt ro
Ġclaim s
f ord
ĠCom pany
Ġg ift
, :
_ app
h andle
Ġprodu ce
/ lib
Ġ- *
ĉ set
'] ;
ar c
and er
ĠEng ine
Ġat tributes
t ask
< =
( N
Ġw arm
wh ich
ĠF ore
agn ost
m ys
Ġt al
ĠS al
g i
ĠP rint
ĠTR UE
ĠÐ ¾
. UI
Ġfl ash
rop erty
. location
ĠM ill
b i
con tr
.re quest
ĠS am
Ġneg ative
k it
Ġset t
.print StackTrace
ab e
ĉ i
Ġb urn
Ġs ociety
C ache
ĠSec urity
.model s
ĠWARRANT Y
_ up
ce ive
Ġc lients
.T r
Ġprovid ing
Ġr out
m aterial
Ġ|| Ċ
ĠS er
ĠOff ice
FT WARE
Ġ' $
Ġf oc
Ġexc ell
Ġc at
n ormal
Ġdeter mine
ĉ uint
P ane
Ġemploy ees
ĠT exas
Ġtr aff
ĠRe port
ant a
ĠBo x
Ġd jango
Ġpart ner
E B
L INE
Ġfeel ing
Ġc ivil
(f loat
S ql
Ġwould n
.in it
. left
- v
_ level
' }
A F
Ġlo ading
ĠOn ly
Ġcook ies
ĠG l
C O
Ġstrateg y
(' ./
Ġsh ip
pos es
Ġsign al
Ġal pha
.p op
R adius
Ġre place
_D IR
count er
bserv able
el a
We ight
h ash
bo se
f x
ĠE mail
Ġre fer
local host
_ RO
iqu es
St ep
Ġa head
( View
ĠS ervices
ĠJ son
ess or
Ġp un
Ġappropri ate
ak ers
os en
pos ing
Ġag ent
f c
Ġtrans fer
Ġin valid
ĠRes earch
Vert ex
Ġg ay
Ġj ournal
[ x
Ġ" ",Ċ
ĠW ell
.T asks
S pec
Ġo l
Ġsp end
ĠAustral ia
M atch
.j unit
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ
ĠM AX
iz able
clus ive
_ valid
Ġqu arter
y an
ĠEd it
ard en
= new
Ġfr ag
B it
z i
ain e
u dd
. Object
de bug
Ġc ash
_ IM
Ġe en
Ġcomm ercial
ĠV ideo
lo ader
Ġf ixed
Ġapplic ations
Ġ_ ,
ĠRuss ia
it ect
_ (
ĠB lock
Ġs an
ĠT om
Ġper haps
Ġs ig
lev ant
Ġcor por
at aset
ron ic
x e
Ġ eth
S ome
p op
_O K
Ġt end
. Res
_ and
Ġreview s
Ġw ild
Ġdeg ree
. O
.object s
_ args
n il
Ġdis abled
P arent
Ġnot es
Ġ" "Ċ
( state
istr ict
Ġlog ging
.I O
ĠM al
D M
Ġx ml
ĠRob ert
el en
l ayout
f ol
'] ))
, b
ĠJ er
f ilename
Ġf an
ĠC ustom
=" "
ĠD ie
B undle
.util s
Ġtri p
M B
Ġso ft
_M ODE
Ġapplic able
Ġup per
ER VER
_ al
_LO G
H ere
w p
ĠS erver
ĠC lient
Ġch em
Sc roll
Ġh ighest
ĠSe lect
Ġ" @
ĠWh y
S ec
he el
Oper ation
Ġconn ected
ir med
Ġcit iz
ĠC he
Ġfor ces
Ġw ww
R oot
AN CE
Man y
ic ip
rg an
ĠT or
ĠP ress
ĠM or
- line
u led
> \
Ġth us
ĠReg ister
h ol
ĠCh inese
Ġpost ed
Ġm agn
ab ilities
Ġdise ase
Ġrem ains
ĠPro f
- form
Ġc in
org an
ic ate
Ġst ress
] *
Ġ ----------------------------------------------------------------
_ context
or ry
Ġd ied
m at
Ġstart s
.M essage
Ġrun s
Ġgu ide
Ġwarrant y
ential s
d ict
ĠS ize
ul er
Ġrespons ible
_SE T
Ġcont aining
ĠPr ice
| |
F S
Ġem p
_b utton
( uint
Ġsu ff
p th
Ġdef initely
put e
Ġmarket ing
ĠW H
ĠS ie
+ =
OL OR
Ġcons ult
Ġs igned
Ġse quence
le e
Ġrequire ments
h y
Ex press
M T
se y
Ġ ult
å ®
ellig ence
Ġanal y
Ġd ress
eng ine
ĠG reat
ĠAnd roid
ĠA lex
m ode
D ictionary
.D ate
ä ½
V ICE
Ġfam ilies
ĠRuss ian
ĠT imes
.c all
$ (
Pro file
Ġf older
ch es
Ġleg is
_ row
un es
Ù Ħ
Ġ} ).
Ass ert
ag en
ĠH and
I ter
Ġbig gest
ore ach
Ġpol ic
Ġper missions
Ġshow ed
ĠE lement
Ġtop ic
âĢĶ âĢĶ
ro ad
ĠB ank
rec ord
Ġpart ners
ĠR ef
ess ions
Ġass ess
U ST
ĠPart y
pro du
L C
Ġ ul
. form
h ide
c opy
UT F
ĠSO FTWARE
čĊčĊ čĊ
ĠL in
un a
ug ar
Ġadmin istration
Ġopen ing
Ġsc an
Ġcontin ued
com ponent
.s p
Ġhapp ens
um my
ĠP R
.F ile
ĠDown load
Lo ading
d i
Ġwait ing
_A DD
T ab
.query Selector
Ġecon omy
ĠF rench
t xt
Ġf ant
_ ;Ċ
H older
S H
Ġn umpy
Ġst reet
Ġm ale
\ Model
ang ing
ĠB ill
Ġprevious ly
B I
ĠSec ret
Ġm ist
ĠF ield
up s
ĠPro cess
Ġke pt
ĠO T
Ġtrad itional
. i
am in
Ġhelp s
An y
orig in
ilt ers
j u
d esc
ĠA ccount
Ġ) čĊ
k top
ol ly
Ġf s
Ġ ê
Ġ ut
Ġcent ral
(t est
.A n
Ġs atisf
G R
ĠF ull
Ġhe at
ib er
Ġon to
m os
S chema
Ġfact ory
" .$
aw s
St atement
(t arget
ĉ new
.b e
Ġg uest
Ġm al
AR Y
Ġre ached
Ġm ouse
Ġchall enge
ĉd ouble
ĠT em
Ġt error
Ġex tract
_T O
Ġsepar ate
Ġm ir
h elp
Ġcap acity
ĠProp erty
k an
_c reate
ĠL ight
.p arent
Ġunderstand ing
Ġeas ier
Ġ| =
Ġen h
Ġf at
Ġprot est
am m
_ AT
- of
il s
ĠO h
Ġps ych
Ġ$ .
ind s
Ġrel ative
sh op
sh ort
ĠS and
uest ion
Ġf ear
/ ĊĊ
. context
Ġschool s
Ġser ve
z one
_d b
Ġmajor ity
ex ample
Ġl ang
ĉ ĠĠ
Reg ister
end o
Ġprocess ing
_t emplate
- user
Ġe g
C OM
ĠBl ue
i ro
Ġrem ote
ĠI T
#! /
Ġred istrib
ra z
ĠS ince
ĠT ur
Back ground
== =
Ġref lect
Ġpro s
c md
Ġwh om
Com pat
ĠA re
Id entifier
ĠTh om
_ port
g u
Ġmon itor
r m
Ġpat ient
ver ter
Ġg ain
- ui
In st
Ġd ies
A rea
_f ilter
Ġgr at
Ġreal ity
ord inate
ol ved
Cont act
Ġcompl iance
_ or
ĠV ar
d l
Ġapp end
G ER
(m ax
.re nder
Ġd ynamic
ordin ates
_ options
_c olumn
Ġb atter
s pace
L a
ĠS ource
/b in
Ġd os
ĠBo ard
ĠTh read
ĠA L
( config
ĠM er
Ġm iles
_ header
ETH OD
iz z
Ġbenef it
Ġinteg r
(c urrent
ul o
. default
ĠD iv
Ġt on
o th
erv ation
ed om
Ġb aby
ce ived
.t op
rior ity
ĠL ocal
ri age
Ġattack s
Ġh ospital
Ġfem ale
ĠLog in
ĠFl or
Ġch ain
ash ion
Text ure
S ave
Ġf arm
.cont ains
.T est
Ġknow s
Ġgener ally
ip eline
Ġme ant
enc ia
Ġn icht
Ġcont ents
P M
ched ule
( line
C G
j ob
ĠRe al
u er
f irm
Ġ Ø
et ro
" `Ċ
Ġspe ech
Ġth r
fore ach
Ġw arn
ĉ l
Ġhe avy
< li
N e
Ġinvestig ation
M ath
- title
Ġch urch
Ġdes pite
ch ain
Ġwh atever
ar ian
f n
Ġm eta
} )ĊĊ
U FF
Ġregard ing
_S UCCESS
m es
ĠInt ent
Ġres olve
pos s
ir a
for ce
o ice
à ¢
Ġp m
Ġup dates
A rr
Ġ Ñ
test ing
Ġto ward
nt ax
ë ĭ
Ġlist en
Ġgo als
Instance State
D r
Ġr are
Ġtr ail
Ke ys
C al
C ar
ĠPe ople
ĉ local
class es
Re ference
.for Each
em b
act iv
Ġpr im
red ict
Ġr ad
æķ °
.B ack
Ġsp read
Ġc lock
Ġv ir
ed itor
Ġeffort s
Ġbr anch
Ġind ust
Ġmot or
Ġam b
Ġdat etime
Ġren cont
ĠChrist ian
ĠAmeric ans
f ull
Ġf mt
.m ain
Ġca used
_ update
ĠCont ent
AT CH
Ġb ath
ĠE ach
Ġr adio
ach ment
uz z
Sub mit
Ġre strict
ab in
ĠL oad
Ġext ension
Ġess ay
Ġh at
avi our
to Be
": [
Ġoffer ed
Ġv ill
(d ouble
æĹ ¥
b c
_f ree
ĠM iss
ĠB er
Ġ è
ĠL ike
Ġhelp ed
.get Name
_ AL
Ġsp irit
ĠAp ache
w s
Ġthere fore
( params
_ img
Ġpe ace
Ġinc or
ĠEX PECT
Ġmin or
ip es
ĉ data
select or
c ity
tr ie
.b ase
_f rame
Ġopen ed
/ json
L Y
n u
.D e
t f
m argin
.P arse
Ġp i
Ġe q
b d
Field s
ĠT ree
Ġb an
ist an
Ċ ĠĠĠĠĠĠĠĠĊ
ĉg l
Ġprodu ced
s ystem
M ark
_h ash
Ġb g
Ġconst it
ĠLe ague
Ġmiss ion
_ format
([ Ċ
clus ion
! "
Ð ·
b reak
ĉs witch
Ġth er
Trans form
Ġfoot ball
- link
r oute
. auth
Ġb ag
ov ers
Ġen abled
Ġr ac
( I
C R
anc ing
Ġman aged
_ q
NG TH
Ġm ac
ĠA uto
ament e
Ġ' ',
.App end
Ġp in
. item
ack ing
Ġocc as
p erson
Ġt i
.Re g
Ġh aven
Ġg lass
Ġ"
ĠSim ple
P rint
Ġsur round
N O
ãĢĤ Ċ
ĠĠĠĠĠĠĠĠ čĊ
ĠMan y
Ġ" _
Ġweek end
Ġsom ew
.param s
sm all
AT ED
Ġpl ugin
field s
ĠInitial ize
o on
at ile
y e
Ġv ous
L AG
Ġold er
Ġg am
Ġextrem ely
Ġh et
en um
ĠS ET
x ff
Ġt imer
/ index
Ġcrit ical
Row s
_arg ument
Ġex ecute
Ġshow ing
.x ml
- list
R ole
typ ename
_m ethod
th at
ch er
Ġâ Ĩ
X T
Ġthous ands
ĉ n
Ġres p
_pr ice
ol ut
A g
ĠT wo
Ġbe comes
Ġh us
.U se
th eme
ur b
Ġ/* Ċ
erial ize
AR N
Ġlo se
L ower
Ġv el
Ġdef ense
cond ition
Ġb es
Ġd ry
Ġsc roll
.S how
I EL
о ÑĢ
ĠR est
Wh ere
ood s
ĠJ es
Ġw ire
_IN FO
Ġstr ings
g ment
Ġmatch es
Ġelect ric
Ġexcell ent
ĠC ouncil
id ade
Ġw x
p ush
_ entry
Ġtask s
Ġr ich
s a
ĠSm ith
UN CTION
Point er
pect ive
Ġw idget
ist a
Ġag ency
Ġs ich
olog ies
Ġtri al
al ysis
. check
AR K
Ġon Change
ab out
', $
( val
Ġpl aced
_N O
Ġd an
.e qual
ĉ ĠĠĠĠĠ
Ġwe ather
.g ame
Ġdest ination
_ USER
ie ce
Ġprovid er
.l ast
ple x
N ote
/ js
Ġp Ã¥
Ġpl anning
at tribute
P RO
atch es
Ġ< -
Ġsee ing
Ġcan cel
_ ind
.key s
Ġvis ual
ĠC urrent
ĠCol lege
ĠR ock
Ġagre ement
ĠSt ore
ov ing
Ġcor ner
amp ions
I SE
F in
Ġprote ction
Ġf i
Pl ay
pl ugin
) }
.f rame
- z
Ġtrans ition
ig in
Ġcandid ate
ĠUn ion
_ values
(m ap
c le
Ġtre nd
w ide
are n
L oc
UT H
ĠB ay
Ġsmall er
i us
w ell
Ġcr iminal
Ġconf lic
b ert
_IN T
Ġinvest ment
c ustom
ĠS ession
_w rite
an ia
ĠM ass
_E Q
_N OT
Ġviol ence
Arg ument
_ email
Ġbel ong
_f unction
Ġen emy
em a
ĠAdd ress
. empty
Ġin ner
ĠCont act
Lo ader
< input
ĠC A
l ot
Ġp ictures
ĠS upport
_n ames
L ayer
ĠC lick
S um
à ¦
ĠL ook
u ous
L ib
Fl ags
te am
E P
h at
over ride
aps ed
Ġlabel s
qu is
ĠSt ream
_de vice
ĠCom mit
( root
" }
.is Empty
ĉ M
Ġan gle
ĠB ecause
%%%% %%%%
Ġa im
Ġst ick
st mt
ag raph
ans wer
Ġcl in
ĠIs l
. ext
ĠIN T
Ġst yles
Ġb orn
Ġsc r
Ġexp and
Ġrais ed
Text Box
IL L
-------------------------------- ----------------
HT TP
> )
_ char
res ource
Ġep isode
Ġ' _
ĠE s
ĠEar th
Âł Âł
UP DATE
ĠS ou
u is
t ypes
Ġm as
Ġf av
Ġcon struct
_r ate
er as
Ġ| Ċ
rop erties
Ġext ernal
Ġap plied
Ġpre fix
ot ed
l ers
Ġc old
ĠS P
ĠCh urch
ĠOut put
los ed
ç ļ
ific ate
oper ation
her it
x FF
. env
_ err
os h
D irection
C ancel
ĠFr ank
Ġfind ing
. )ĊĊ
Ġr outer
ãĥ »
s es
Ġc row
== '
Ġs and
Ġr id
it ure
Ġent re
Ġo bserv
Ġv ac
ð Ł
- T
A rt
n ight
. search
Ġex change
Ġdistr ict
. os
Ġdep artment
Ġdoc uments
Ġcent ury
ĠN ext
H ost
ĠK IND
Ġsus p
- P
re nd
. em
u ite
ist ers
( json
ĠAn n
w t
at i
ĠHT ML
wh en
D irectory
Ġsh ut
< a
ed y
Ġhealth y
Ġtemper ature
ĠG en
Ġmet al
Ġsub mit
ĠD O
Ġat tract
Ġ{ };Ċ
ĠW ord
Ġl l
Ġseem ed
k o
I ED
Ġl abor
.Cont ext
Ġas set
y ou
Ġc ars
ĠC olumn
Ġr é
Ġs quare
ĠNS String
âĢĿ ,
ap es
.. .Ċ
Ġthan ks
( props
Ġt ick
Ġexper iment
Ġpr ison
t ree
- text
ĠIO Exception
-w idth
_ST ATUS
f ast
-b ody
- header
Ġgu ar
cre te
ĠT im
Ġclear ly
ĠRepublic an
Ġjust ify
и ÑĤ
ĉ ĠĠĠĠ
c ache
; //
Ġpres ence
Ġfact ors
Ġemploy ee
] ))
M ember
Ġselect or
b or
ĠM ex
çļ Ħ
ut ex
_t ag
ail ure
ĠN et
Ġre li
E G
Ġf printf
Ġte en
lo ss
Ġle aving
De legate
Ġbe at
Ġmin ute
sub scribe
Ġredistrib ute
Con stants
Ġcan cer
/ {
B L
Ġs pan
ĠCh ild
C enter
Ġear th
Y S
ĠLe vel
Ġse a
.s upport
.in ner
. Item
ill ing
ĠĠĠĠĊ ĠĠĠĠĊ
ĠL abel
ĠE st
( arg
bo Box
ĉf oreach
c os
F ailed
sw ers
Ed itor
r ont
ĠM P
ex pr
ĠL ife
Ġ? ?
ö r
Ġatt end
ĠQ ue
Ġspec ies
- D
Ġa us
Str uct
Ġadvant age
ost on
-b lock
in itial
C RE
Ġtr uly
Ġcomp are
or ney
Ġs pect
F ull
b es
Ġvis ible
Ġm ess
st ances
Ġcl oud
_v ersion
Ġf urn
ic ago
LO W
Ġtraff ic
Ġf ol
rypt o
Ġdecl ar
Ġsl ot
ĠEx t
ĠEng land
ĠU nder
Ġt a
let ter
Ġoffic er
ĠDon ald
Y es
_ json
IT ableView
ĠU SE
mploy ee
Ġopin ion
ĠA ut
b order
Ġad vice
Ġautom atically
is co
Ġm m
. vis
am l
Ġinitial ize
Ġ( {
Ġ ;ĊĊ
Ġgener ation
Ġb its
clip se
Ġun f
ut ors
pl t
Ġdel ta
est roy
is is
< br
Ġlimit ations
Ġend ed
ĠM ad
il m
Th ese
ĠMin ister
Ġch art
F ragment
Ġindepend ent
Y ear
Ġin str
Ġt ags
A VE
ĠAr ch
st op
Pro gress
Ġm i
Ġlearn ed
G e
Ġhot el
S M
T YPE
Ġc y
ERS ION
un ately
l imit
s el
Ġmov ies
Ġste el
o z
g b
ĠC amp
s ite
ĠLog ger
P LE
оР´
. right
ĠC ore
Ġm ixed
st ep
Ġput s
s uper
R outer
. Http
ly ph
ĠColor s
Ġandroid x
. str
Ġinn ov
Ġde ck
' >Ċ
ap ers
] (
cont inue
s pec
ĠR oad
AS H
ili ar
Ġcontin ues
Ġapp oint
Ġ# Ċ
ĠV ir
Ġ?> "
Ġb in
} ",
go ing
e ach
B D
ĠA ccess
D oc
ĠMan agement
B ER
ask et
.get Instance
Ġestablish ed
so cket
IN S
ĉv irtual
ĉ result
RE AD
_ height
ĠF ont
Ġ( );Ċ
_ html
Ġneighb or
l or
Ġg ather
Ġ} )ĊĊ
Ġid entity
Ġf ab
p adding
ĠR oute
Enumer able
à ´
Ġfor ced
/j query
.ĊĊ ĊĊĊĊ
res ents
_ left
.P aram
ĉ throw
ĠH am
Ġevent ually
ac er
p ub
Ġtr a
un ique
d el
ĠFlor ida
ĠC lean
x a
ĠÂ ·
Ġvalid ate
Vis ual
Ex pression
_f unc
m ember
ĉ h
tr l
ĉ G
nap shot
ĠProp Types
v in
] )ĊĊ
ow l
if ies
Ġ$ ('.
ĠCont ext
ĠTo ast
. Key
Ġoffic ers
/ n
s n
und efined
. items
ut ow
am age
Ġaccount s
ook ie
Se ction
ici ans
Ġad vis
( is
[: ,
ĠFr ance
F unc
ic ious
Ġto k
Ch annel
ĠA D
_N UM
Ġtime out
lem ma
rem e
u j
.A l
uc lear
( os
(" <
[ Ċ
f etch
Ġb al
Ġgu id
- align
ĠW rite
ĠOn ce
utow ired
OD ULE
Ġp itch
C F
by tes
ĠCom mission
Ġincre d
P ER
_ response
ĠL os
par ser
Ġass ume
. Request
ĠT oken
_p osition
Ġn om
- term
Ġrem aining
i ostream
Ġpie ces
ap y
ĠL ess
r ange
umb n
pr ise
_ option
Im pl
k wargs
Ġbusiness es
Al ert
Ġpart ies
ĠCont ainer
ĠPr ivate
ĠPl an
Ġregister ed
Ġj our
ack er
ен и
/ >
ch at
se ct
Ġcre ation
olut ely
Ġinst ant
Ġdel ivery
ick en
y es
ĠFr anc
bl ing
end a
[ (
_r ange
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ
Ġsched ule
Con n
Ġthan k
x d
Ġh ook
Ġdocument ation
Param eters
H ello
v t
Ġart icles
Ġw est
def ined
. select
ok ens
ĠV AL
.f ile
res et
Ġmy s
ĠM A
] ),
Ġc ities
rel ated
å Ľ
Ġappe ared
Ġw id
.p anel
ĠIn s
. entity
Ġde cre
ĠL ou
(t ime
ĠTh ank
.create Element
Ġmention ed
oun ce
ĠT ry
ĠW all
/ images
ĠM enu
' čĊ
ĠE r
Ġcrit ic
ĠY ear
( param
Ġf lo
N N
oot er
Ġ ];Ċ
ĠA ff
" github
room s
Ġh yp
g lobal
Ġa vec
æľ Ī
Ġcomplet ion
Ġcon d
onym ous
( temp
Ġst ars
Ġre levant
Ġcover ed
Ġel im
_t ypes
( bool
Ġt u
_ex ists
Ġsec ure
Ġst ored
] /
x F
ĠCont roller
Ġm igr
M I
ĠD en
Ġann ual
U IL
- and
Ġcr ime
b el
Ġk itchen
@ g
_p h
ourn ament
ĠS ocial
ĠS pecial
log ger
Ġt ail
Ġun known
d ed
Ġapp rec
(d b
c f
Ġass ign
- out
ĠM ont
d p
w idget
Ġst one
- primary
. grid
Result s
az z
Ġda ughter
Ġcur r
Ġl in
Ġs outh
form s
ĠO UT
let te
ak s
ig ure
ĠE U
var iable
Ġb rief
ĠSc ott
Ġcon ference
and a
_ lock
or al
Ġe ine
OR S
//////////////////////////////// ////////////////////////////////
ess o
Ġr is
Ġg ender
est ic
L icense
( out
Ġm s
Se e
Ġwill ing
az e
Ġs ports
Ġy es
l u
Ġp urs
/j avascript
- pro
nav bar
_pro duct
/ bootstrap
Ġdr iving
Ġ Ä
Ġpro pos
ult ip
up lic
. email
Ġappro x
( cl
Ġwe ar
Ġrep ly
ass et
Ġ ice
Ġt x
k r
ĠGerman y
ĠGe orge
Ġc b
ĉ err
M ove
Ġpol y
vo ice
} "
Ġan imal
A v
ĠL ocation
Ġn ative
] ["
< double
Ġm ais
, int
Ġpre par
Ġinter val
plement ation
_ ERR
Ġb ug
> "
st at
Ġ} ,čĊ
< span
Ġfa ith
Ġ rom
pre v
ĠE lect
F ind
Ġg od
ot or
// ----------------------------------------------------------------
orig inal
C pp
ĠSen ate
Ġposition s
Ġweap ons
Ġco ff
Ġpur poses
p ol
Ġim press
Ġanim als
. Entity
(n p
Ġmur der
Ġ` `
fl ag
Ġsol utions
ĠAct ive
Ġb right
.d ate
Ġsit u
ï¼ Ī
. ID
Ġs ie
), čĊ
ak t
S pace
.d at
.index Of
h an
az ine
ĠZ e
Ġcr ash
( /
> =
Ð ±
iv a
.Auto Size
ĠL at
_ ext
Initial ize
.reg ister
OP Y
Ġre verse
_d is
'] [
Ġprom pt
ont o
ĠJ ournal
r outer
Ġmys qli
# else
) "
-x s
let s
ph an
. LE
W ill
Ġaff ord
Ġsk ill
-t oggle
N C
B ind
T S
J ust
iter al
Y P
ĉ unsigned
Ġw ind
)) :Ċ
Ġw arning
ĠW ater
Ġd raft
Ġc m
Ġs am
Ġhold ing
z ip
ĠSc ience
Ġsup posed
G en
Ġdi et
< h
ĠP ass
v i
Ġhus band
� �
n ote
ĠAb out
ĠIn stitute
Ġcl imate
.Form at
Ġn ut
est ed
Ġapp arent
Ġhold s
f i
new s
C M
v ideo
': '
D ITION
p ing
Ġsen ior
w a
-- >Ċ
_ default
ĠD atabase
re p
E SS
ner gy
.F ind
_m ask
Ġr ise
Ġk ernel
:: $
. Q
Ġoffer ing
de cl
ĠC S
Ġlist ed
Ġmost ly
eng er
Ġblock s
ol o
Ġgover ning
\ F
Ġcon cent
.get Text
Ġm b
Ġocc urred
Ġchang ing
Sc ene
_C ODE
B eh
" The
Ġt ile
ĠAssoci ation
ĉ P
al ty
_ ad
od ies
i ated
Ġpre pared
poss ible
Ġm ort
TE ST
Ġign ore
Ġcal c
Ġr s
Ġassert Equals
Ġs z
ĠTH IS
. "Ċ
Ġcan vas
j ava
Ġd ut
VAL ID
.s ql
. input
Ġa ux
S up
Ġart ist
V ec
_T IME
.string ify
et ween
ĠC ategory
Ġ[ -
ĠDev Express
ĠJ ul
Ġr ing
. ed
Y Y
L et
Text Field
Ġfl at
_p rint
ĠOT HER
ad ian
Ġcheck ed
e le
Al ign
stand ing
Ġ[ ],
Ġl ab
uck y
ĠChrist mas
( image
.m odule
Ġl ots
Ġslight ly
(f inal
er ge
è ¿
ĠPol ice
ĠR ight
Ġaw ard
ĠO S
Ġ{ }ĊĊ
Ġp tr
ov es
ic ated
еР¼
Ġman age
olid ay
Am ount
ool Strip
t body
N av
w rap
B B
Ġwatch ing
ari os
Ġoption al
_ K
ĠL icensed
.M ap
T imer
ĠA P
ĠRe v
( o
, c
um in
eta iled
ĠH y
Ġbl ank
ag ger
ĠS elf
() [
.m ake
ear n
ch annel
< pre
ble m
_p assword
_s p
ic ing
e z
Ġthe ory
ĠT er
, n
log o
ĠHT TP
() ))
.h andle
> ;Ċ
W orld
Ġpy thon
Ġl if
Ġtr av
Ġcon ven
com pany
ĠCl ub
V er
B tn
Ġz one
product s
ĠE duc
Ġver ify
ĠM il
on o
] );ĊĊ
EN CE
Ġpack et
Ġc er
Ġen umer
Ġpar s
form ed
Ġocc up
t re
Ġexerc ise
D ay
_s um
Ġask ing
apt ion
Ġord ers
Ġsp ending
ĠE RR
.D is
ĠU til
âĢľ I
\ '
? )
/ >Ċ
Ġem ot
Ġinflu ence
ĠAfr ica
att ers
Ù ħ
.s ession
Ġch ief
ĉĉĉĉĉĉĉĉ ĉĉĉ
Ġto m
clud ed
ser ial
_h andler
.T ype
ap ed
Ġpolic ies
- ex
- tr
bl ank
mer ce
Ġcover age
Ġr c
_m atrix
_ box
Ġcharg es
ĠB oston
P e
Ġcirc um
Ġfil led
Ġn orth
icture Box
ĉ res
è ®
Ġter min
Ġ[ â̦
IRE CT
Ġb er
Ġ" ../../
ret ch
.c ode
_c ol
ĠGovern ment
Ġarg v
ĠL ord
as i
Ex ec
ĉ let
vert is
Ġdiscuss ion
en ance
out ube
type of
Ġs erved
ĠP ut
ĉ x
Ġs weet
B efore
ateg y
. of
ĠM aterial
S ort
ON T
ig ital
Wh y
Ġs ust
Ġ ç
ab et
Ġseg ment
Ġ[ ],Ċ
ĠMus lim
Ġfind ViewById
c ut
_T EXT
ĠM ary
Ġlo ved
Ġl ie
ĠJ O
Ġis set
mon th
Ġpr ime
t i
ĠCar ol
U se
ĠP op
ĠS ave
Int erval
ex ecute
d y
ĠI ran
_ cont
ĉ T
Ġph ase
check box
we ek
Ġh ide
Ġt il
Ġj u
C ustom
b urg
/ M
T ON
Ġqu ant
Ġr ub
ix els
Ġinst alled
Ġd ump
Ġproper ly
( List
Ġdec ide
app ly
H as
Ġkeep ing
Ġcitiz ens
Ġj oint
p ool
S ocket
_ op
Ġweap on
gn ore
ĠEx ec
ott en
ĠM S
Ġ( -
ĠRe view
Ġex amples
Ġt ight
! (
D P
ĠMessage Box
Ġphot ograph
UR I
é t
l ow
ĠGr and
.p ersistence
Ġmaint ain
Ġnum s
Ġz ip
ial s
ĠG ets
pe g
ĠB uffer
~~ ~~
ra structure
ĠP L
u en
ob by
size of
Ġp ic
Ġse ed
Ġexperi enced
Ġo dd
Ġk ick
Ġproced ure
avig ator
- on
, j
ĠAl though
Ġuser Id
ac cept
Bl ue
IC olor
l ayer
av ailable
Ġend s
.t able
Ġdat aset
b us
Ġexpl ain
( pro
ĠCommit tee
Ġnot ed
] :Ċ
D im
std io
. ",Ċ
_s ource
ĠWe ek
ĠEd ge
Ġoper ating
Ġest e
i pl
ag ination
Ġpro ceed
Ġanim ation
.Model s
ĠW atch
i at
Ġopp on
/ A
Re port
Ġs ounds
_b uf
IEL D
Ġbu nd
ĉ get
.p r
(t mp
Ġk id
>ĊĊ Ċ
Ġy ang
Not Found
Ñ Ĩ
m ath
@g mail
ĠL IMIT
red ients
Ġv ent
avig ate
L ook
Ġrelig ious
Ġr and
ri o
( GL
_ ip
u an
ici ency
ĠCh ange
> čĊčĊ
ĠEnt ity
Ġrencont re
ĠR et
pl an
é n
BO OL
ur ies
tr ain
Def inition
======== ====
z z
An imation
ĠO K
_m enu
.b l
_s core
Ġac ad
( System
Ġref resh
'=> $
.G raphics
ament o
p id
t c
Ġt ips
Ġhom es
Ġf uel
â ĸ
_h elper
ĠĠ čĊ
ĠR oom
.C lose
_ attr
ĠM ount
ĠE v
ar ser
_t op
e ah
ĠDe lete
ãĢ į
u ke
Ġus age
ar ia
_de v
Ġtext ure
Ġconvers ation
e per
Be an
d one
non atomic
ĠSe cond
Ġshoot ing
_p re
Com ponents
Ġ] ĊĊ
__ ,
stit ution
.Ch ar
> ();ĊĊ
Ġpresent ed
Ġw a
ok er
- ĊĊ
in er
Ġbe coming
Ġinc ident
At t
Ġreve aled
for c
Ġbo ot
.p age
Enumer ator
_ ->
Ph oto
Ġs pring
. ",
ĠD ictionary
B JECT
Ġloc ations
Ġs amples
Input Stream
ĠB rown
Ġst ats
qual ity
Ñ ħ
-d is
Ġhelp ing
Ġp ed
( se
ĠWh o
al ian
int ernal
Ġf t
> ().
-> {
Ġm ine
Ġs ector
Ġg ro
Ġopport unities
ĠÃ ¼
Ġm p
Ġalleg ed
Ġdoub t
M ouse
Ab out
_p art
Ġch air
Ġstop ped
lo op
ent ities
Ġapp s
ans ion
Ġm ental
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ
F R
Ġdef end
c are
Ġide al
/ api
ur face
Ġe le
ul ator
ĠR ights
angu ages
Ġfund s
Ġad apt
At tributes
Ġdep loy
opt s
Ġvalid ation
Ġconcern s
u ce
.n um
ult ure
il a
Ġc up
Ġp ure
.F ore
ĠHash Map
.value Of
as m
M O
Ġc s
Ġst ores
Ġ ************************************************************************
Ġcommunic ation
m em
.Event Handler
. Status
_ right
.set On
S heet
Ġident ify
ener ated
order ed
Ġ" [
Ġs we
Con dition
ĠA ccording
Ġpre pare
Ġro b
P ool
Ġs port
r v
ĠR outer
Ġaltern ative
( []
ĠCh icago
ip her
is che
ĠDirect or
k l
ĠW il
key s
Ġmy sql
Ġw elcome
k ing
ĠMan ager
Ġca ught
) }Ċ
S core
_P R
Ġsur vey
h ab
He aders
AD ER
Ġdec or
Ġturn s
Ġr adius
err upt
C or
Ġm el
Ġin tr
( q
ĠA C
am os
M AX
ĠG rid
ĠJes us
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ
.D E
Ġt s
Ġlink ed
f ree
ĠQ t
Ġ/** čĊ
Ġf aster
ct r
_ J
D T
.C heck
Ġcomb ination
Ġint ended
- the
- type
ect ors
am i
ut ing
Ġum a
X ML
U CT
A p
ĠR andom
Ġr an
.s ort
Ġsort ed
. Un
_P ER
it ory
Ġprior ity
ĠG al
ĠO ld
h ot
ĠD isplay
(s ub
_T H
_ Y
ĠC are
load ing
K ind
_h andle
, ,
r ase
_re place
.add EventListener
ĠR T
Ġenter ed
g ers
Ġ ich
( start
/ app
Ġbro ther
M emory
Out let
Ġ utf
pre c
Ġn avigation
OR K
Ġd st
D etail
Ġaud ience
Ġd ur
Ġcl uster
un ched
Ġ ],
Ġcomfort able
. values
ĠT otal
Ġsn ap
Ġstand ards
Ġperform ed
h and
(" @
å Ń
Ġph il
ib r
tr im
Ġfor get
Ġdo ctor
.Text Box
icon s
, s
ĠO p
S m
St op
ĉ List
ĉ u
Com ment
_V ERSION
.X tra
P erson
r b
LO B
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĊ
ĠCent ral
IC K
ra q
Ġput ting
Ġm d
ĠL ove
Pro gram
B order
o or
Ġallow ing
a fter
Ġent ries
ĠMay be
] ).
ĠSh ort
) \
.n ow
f riend
Ġpre fer
ĠG PIO
os is
ĠGame Object
Ġsk ip
Ġcompet ition
_m atch
lic ations
_CON T
.group Box
Ġal s
" We
_e q
l an
_ search
ĠMus ic
as is
Ġb ind
ĠIs land
r um
( E
Ġse at
V ideo
Ġa ck
ree k
={ ()
Ġr ating
Ġrestaur ant
DE X
(b uf
pp ing
ual ity
Ġle ague
Ġfoc used
ap on
$ data
CL UD
CLUD ING
Ġabs olute
( query
Ġtell s
A ng
Ġcomm unities
Ġhon est
ok ing
Ġap art
ar ity
/ $
_m odule
ĠE nc
. an
.Con fig
C re
Ġsh ock
ĠAr ab
I ENT
/ re
Ġre trie
ycl er
is a
ĠO rgan
. graph
Ġ í
ĠB AS
En um
Ġposs ibly
ÑĢ Ð°Ð
ĠJapan ese
Ġc raft
ĠPl ace
Ġtal ent
Ġfund ing
Ġconf irmed
Ġc ycle
/ x
G E
Ġhe aring
Ġpl ants
Ġm outh
p ages
or ia
ĠRem ove
_t otal
Ġo d
oll apse
do or
Ġb ought
Ġadd r
AR CH
_d im
dd en
Ġdec ades
RE QUEST
Ġvers ions
f ire
Ġmov es
f b
Ġcoff ee
.con nect
ĠR ow
Ġs chema
S cope
- Type
Ġfight ing
Ġret ail
Ġmod ified
T F
File s
n ie
_com mand
st one
Ġ ÑĤ
_ thread
Ġb ond
ĠDevelop ment
Ġp t
F ORM
ple t
Ġident ified
c pp
Ġc oding
ok ed
ĠM aster
ID TH
Ġres idents
red it
ĠPh oto
= -
un te
ate ur
_ST ATE
ĠS ing
Ġshe et
. val
or se
Ġh ers
Ġdetermin ed
Com mon
Ġw ed
_ queue
P H
ĠAt l
cre d
/L ICENSE
Ġm es
Ġadv anced
.j ava
.S h
G o
k ill
f p
_set tings
Ġp al
Ġtr uck
Ġcomb ined
Ġ" ${
ĠCor por
Ġjo ined
ĠJ ose
ĠC up
un s
est ival
lev ision
Ġbro ken
Ġmar riage
ĠWest ern
Ġrep resents
ĠT itle
Ġs s
.A ss
ongo ose
ient o
< >();Ċ
Ġabs olutely
Ġsm ooth
TER N
ĠUn less
W ord
Ġmer ge
ig an
ĠV ol
Ġn n
.get Id
ĠÐ ·
Ġsex y
Ġseek ing
S ingle
. this
Ġk om
b ound
; "
Ġfont Size
_d f
Ġinj ury
( H
Ġiss ued
_ END
: self
Ġp atch
Ġle aves
Ġad opt
File Name
ãĢ IJ
Ġexec utive
ĠBy te
] ))Ċ
Ġn u
out ing
clud ing
- R
. options
Ġsub stant
av ax
ĠB UT
Ġtechn ical
Ġtw ice
Ġm ás
Ġun ivers
y r
Ġdr ag
ĠD C
Ġs ed
Ġb ot
ĠP al
ĠH all
forc ement
Ġa uch
.m od
not ation
_file s
.l ine
_fl ag
[ name
Ġres olution
Ġb ott
(" [
end e
( arr
F ree
( @"
ĠD istrict
PE C
: -
P icker
ĠJ o
ĠĠĠĠĠ Ċ
ĠR iver
_ rows
Ġhelp ful
Ġmass ive
--- Ċ
Ġmeas ures
ĠR untime
Ġwor ry
ĠS pec
ĉ D
ãĢ ij
Ġ) {Ċ
Ġwor se
(f ilename
Ġl ay
Ġmag ic
ĠThe ir
ou l
st roy
ĠWh ere
Ġsu dden
Ġdef e
Ġb inding
Ġfl ight
ĠOn Init
ĠW omen
ĠPol icy
Ġdrug s
ish ing
(' ../
ĠM el
pe at
t or
Ġpro posed
Ġst ated
_RE S
Ġe ast
ĠCON DITION
_d esc
Ġwin ning
fol io
M apper
ĠP an
ĠAn ge
.s ervlet
Ġcop ies
L M
Ġv m
å į
Ġd ictionary
S eg
el ines
ĠS end
Ġ iron
ĠF ort
.d omain
Ġdeb ate
Not Null
e q
ach er
l f
ĉf mt
Ġlaw y
Ä Ł
ĠM en
Ġtr im
( NULL
Ġ! !
Ġp ad
Ġfollow s
"] ["
re qu
ĠE p
.g ithub
( img
et o
(' \
S ervices
umbn ail
_m ain
ple ted
fort unately
Ġw indows
Ġpl ane
ĠCon nection
. local
u ard
} \
== "
and on
ĠR oy
w est
ig inal
em ies
it z
') :Ċ
ĠP eter
Ġt ough
Ġredu ced
Ġcalcul ate
Ġrap id
c ustomer
Ġeff icient
Ġmed ium
Ġf ell
. ref
ĠC as
Ġfeed back
S peed
( output
aj e
Ġc ategories
Ġfe e
} ;
Ġde leted
re h
Ġpro of
D esc
B uild
Ġs ides
.Array List
- %
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ
Ø ±
.m atch
л и
Ġfe els
Ġachie ve
Ġcl im
_ ON
ĠC D
Ġteach er
_c urrent
b n
_P L
ist ing
En able
G EN
Ġt v
Ġso ck
Ġpl ays
Ġdis count
ĠK E
ĠDe bug
F ore
ĠI raq
Ġappear ance
M on
Ġst yled
ĠH uman
i ot
ĠH istory
Ġs ac
ĠC ollection
Ġrecomm ended
.Se lected
Ġorgan izations
Ġdiscover ed
co hol
ad as
ĠThom as
M ay
Ġcons erv
Ġdom in
ĠF ollow
ĠSe ction
ĠTh anks
User name
Ġrec ipe
Ġwonder ful
.s leep
_ if
ĉĊ ĉĊ
orn o
Ġr u
_t arget
." "
à ¦
Event Args
Ġinput s
Ġf if
Ġv ision
c y
ĠS eries
) (((
Ġtr ading
Ġmark er
B egin
Ġtyp ically
Ġca uses
drop down
_DE BUG
Ġdet ect
c ountry
! ");Ċ
ĉ R
app y
Ġc ref
(' <
" =>
ĠL E
read er
Ġadmin istr
à µ
uck et
Ġf ashion
. char
iz ar
Ġdis able
Ġsu c
ĠL ive
iss ue
Ġmet adata
fl ags
Ġ ðŁ
Ġcomm itted
Ġv a
Ġr ough
Ġ'' 'Ċ
Ġhigh light
_var s
V O
Ġenc oding
- Z
_s ign
$ ("#
Ġr ain
reate st
ĠEN D
Se lection
Ġcandid ates
Ġs av
. Empty
Ġdec isions
Ġcoll abor
rid ge
fe ed
ress ion
Ġperson s
V M
eg a
_B IT
A ccording
ack ed
Ġdoll ars
_lo ss
ĠC ost
} "Ċ
Not ification
Ġpro stit
Ġauthor ity
.re c
Ġsp okes
ĠT oday
ist ant
ĠHe ad
âĢĿ .
ertain ment
ce an
cul ate
Ġv en
How ever
_ arr
Ġtok ens
G raph
ĠJ ud
ĠVir gin
ĠS erial
un ning
M utable
ag ers
.c sv
Ġdevelop ing
Ġinstruction s
Ġprom ise
Ġrequest ed
_ encode
/ "
ĠI con
u ilt
- day
Ġint elligence
. IS
ĠO bservable
ĠH ard
Bo ol
ident ial
.An chor
Ġsell ing
C I
AG ES
t le
b ur
UFF ER
R Y
Ġbig ger
Ġr at
Ġfam ous
Ġtyp ename
Ġexpl ained
} }Ċ
Ġn uclear
- N
Ġcr isis
ĠEnt er
Ġan swers
/ ${
/ pl
Ġse qu
_n ext
m ask
Ġstand ing
Ġpl enty
ĠC ross
ĉ ret
d ro
ĠC ast
= true
ĠCh ris
ic io
ĠM ike
Dec imal
add Component
L en
Ġco ck
Ġ# {
UR N
< tr
Ġauthor ities
Res ources
- H
B ottom
_ qu
put er
ester day
Dis patch
s ince
Ġfam iliar
, i
V C
Ġm ent
, C
Ġfre edom
Ġr outes
ĠB uy
Ġcomm ands
Ġm esh
/ C
ĠSet tings
- style
Ġw itness
Ġc le
Ġun ion
ef ault
are t
Ġthought s
Ġ ----
_pro cess
_ us
ing ly
U ES
T ouch
ĠÐ ¼
_ open
ĠV ec
Ġre ward
.C lick
/ :
Ġn ie
Ch anges
M onth
ï¼ Ł
Ġexec ution
Ġbe ach
( Integer
ĉ a
/ '
.Font Style
Ġab ort
ĠS ingle
( isset
Ġd p
Ġ}}
ĠM a
.R ows
ĠP et
% )
r and
é Ģ
R ule
Ġh el
R ITE
Ġqu iet
Ġr atio
ĠCONDITION S
os oph
ĠI L
Ġad vent
c ap
;
ĠUS B
D river
Ġour s
ĠJohn son
. K
_de lete
. q
ĉ str
/ common
ĉ string
ĠP DF
act s
.A ction
ĠQu ery
. response
ĠG irl
Ġprocess es
< Integer
im o
Ġadd s
Ġentire ly
Ġwas h
/ ************************************************************************
Ġanim ated
Ġprof it
enc ing
/ S
ĠS ym
Ġman ual
Down load
Ġ(! $
Ġmot ion
web pack
-b ottom
Ġgrat uit
P G
(: ,
Ġ era
Ġh o
ĠJ im
qu ir
ĠBAS IS
á n
D ER
Ġexp ensive
_c o
B ounds
W ell
ĠDemocr atic
ĠâĨ Ĵ
.R em
_S Y
n ames
ĠV i
Ġis instance
\ ">
Ġ* =
ĠP S
Ġdanger ous
[ p
OM E
O ther
ĠString Builder
Point s
head ing
Ġc urrency
Ġpercent age
_A PI
Ġclass ic
the ad
ĠM O
F E
Id x
aw ait
ĠÃ ¨
Ġacc ident
Ġvari ant
Ġm yst
ĠL and
ĠB re
Ġh arm
ĠA cc
Ġcharg ed
ion es
Vis ibility
ar ry
ĠL anguage
Ġwalk ing
" .ĊĊ
if er
Ġleaders hip
.F rom
yn am
Ġt imestamp
i pt
ĠH as
REF ER
ĠIt s
Ġlist ener
UT E
_d escription
Ġexperi ences
Ġcre ates
R S
c art
bl ack
Ġcho ices
w ar
Ġ'' '
Ġorder ed
Ġeven ing
Ġp il
Ġt un
ĠB ad
( app
r andom
Ġexp licit
Ġarr ived
Ġf ly
Ġecon om
-m ail
Ġlist s
Ġarch itect
ĠP ay
Ġd s
ĠS ol
Ġveh icles
H z
- com
Ġk ing
_e qual
ĠH elp
Ġab use
-- ;Ċ
Ġex tr
Ġchem ical
ä ¿
Ġor ient
Ġbre ath
ĠS pace
(e lement
w ait
DE D
ig ma
Ġent r
Ġs ob
- name
Ġaff ected
ik a
Ġco al
_w ork
Ġhundred s
Ġpolit ics
sub ject
Ġconsum er
ANG E
Ġrepe ated
S end
Ġ# [
Ġprot ocol
Ġlead s
use um
E very
Im port
(c ount
Ġchalleng es
Ġnov el
Ġdep art
b its
.C urrent
Ġ` ${
ot ing
( \
Ġcreat ive
Ġbu ff
Ġintrodu ced
us ic
mod ules
A re
-d oc
l anguage
_c ache
Ġto d
? >
om ething
Ġh un
å º
at ers
Int ent
Ġimplement ed
ĠC ase
Child ren
Ġnot ification
Render er
W rapper
Object s
t l
.Cont ains
Pl ugin
. row
Ġfor g
Ġper mit
Ġtarget s
ĠI F
Ġt ip
se x
Ġsupport s
Ġf old
ph oto
} ,čĊ
Ġgo ogle
$ ('#
Ġsh aring
Ġgood s
v s
ĠD an
R ate
ĠMart in
Ġman ner
l ie
. The
Int ernal
ĠCON TR
M ock
R IGHT
Ġ' {
Ġcontrol s
M at
Ġm and
Ġext ended
O k
Ġem bed
Ġplan et
ĠN on
- ch
) ",
ep ar
Ġbelie ved
ĠEn vironment
ĠF riend
- res
Ġhand ling
n ic
- level
s cri
X ml
B E
ung en
Ġal ter
[ idx
P op
c am
Ġ( ((
Ġsh ipping
Ġbatter y
iddle ware
M C
Ġim pl
ot ation
ĠL ab
< form
ĉ name
ĠG ames
r ay
Ex tra
T wo
( player
ĠL es
 °
Ġchar set
Ġjour ney
et ing
æ ĺ
â Ķ
çĶ ¨
Ġd in
Ġper man
Ġsol ve
Ġla unched
Ġn ine
Ġs ending
Ġtell ing
.p assword
ĠM atrix
er ic
Ġgr ab
. u
ĠLib rary
Ġdeb t
IN K
.find ViewById
Ġfrequ ency
. ad
_T EST
Ġneg ot
ĠAfr ican
s ender
Å ¡
G lobal
Ġexpert s
++ )čĊ
Ġdep ending
gr ay
Ġjud ge
Ġsent ence
los ure
A c
Ġtr ace
Ed ge
Ġfriend ly
Ġconcern ed
b log
Ġclaim ed
} '
int eger
_t ree
ĉ continue
x i
Ġaccept ed
_ one
ĠEduc ation
ublish ed
g on
app oint
out s
Ġmin ing
Ġsong s
Ġhers elf
Ġgr anted
Ġpass ion
ĠL ake
Ġlo an
u ent
ch ant
Ġd etailed
ex cept
_c md
ĠH E
Rel ated
z t
' },Ċ
Ġspecific ally
St atic
Ġcar ried
AN S
\ ":
C reated
Ġc ul
] -
_ api
F P
Ġsit ting
Ġ" ")
ĉg oto
ĠE qu
Ġass ault
k ins
anc er
og en
Ġvot ers
ĠPro t
Des criptor
ãĥ ¼
.Ass ert
bs ites
ost er
-m enu
Ġar ms
.C lient
.back ground
av ity
Ġv ul
_M ASK
Ġhous ing
Ġbe ar
_ iter
p ired
Ġmark ets
ĠSt udent
Ġt icket
Ġmill ions
fl ater
) =
Ġre cover
ĠFor ce
ĠBo th
Ġvict im
ĠD isc
re port
Ġfour th
ĠAs sembly
/ user
Null Or
text area
Ġa th
Ġ( [
Ġch annels
ĠJust ice
cho ice
LOB AL
ex ec
em ale
Ġe lem
_ le
Ġrespons ibility
ĠT w
IC ATION
Ġelse if
Ġf o
ast s
Ġt reated
s en
ĠV ict
sum er
_B ASE
Ġa st
> {{
ĠRes ource
ĠSt andard
ĠP rem
up dated
ival ent
Ġas sets
_t emp
Ġinterest s
Ġhard ware
ĠR om
ĠSh are
Ġ' 'Ċ
Ġ* ,
ĠT ake
ĠIm ages
_C HECK
(type of
ĠJ un
\< ^
Ġli qu
Ġwor st
ymb ols
ĉĉĉ ĠĠĠ
Ġdr ivers
ĠD ocument
en o
ĠTechn ology
Ġappro ved
ump s
Ġs now
form ance
_A SSERT
u its
Ù Ĩ
Ġdiffer ences
. Visible
ĉĉĉ čĊ
ĠP s
_f etch
Ġto do
. ',Ċ
Ġs el
ur ers
in valid
Ġt weet
V EL
Ġresearch ers
Ġs printf
ĠR O
Ġp el
.Tr ans
Ġil legal
d ialog
sm arty
l g
_M IN
Ġher o
f inal
Ġp p
.L e
Ġc i
ĉ RT
Ġsuggest ed
p df
ach ing
ĠR o
ĠProp erties
ĠS i
Ġbuy ing
Ġm u
Ġl ands
if iers
ĠF ILE
RO UP
Ġh older
ĠS on
Ġsym pt
.r oute
) ?
Ġarg c
Ġfor t
Ġcas ino
_c ategory
Ġfor um
p refix
apt ure
T ube
em s
im ize
Ġn ue
a us
c ourse
AT OR
() ),
Ad vertis
ING S
Ġack now
ĠKore a
pl ing
Ġwork er
PL IED
h al
ĠRich ard
Element s
ĉĉĉ Ġ
st ar
Ġrelationship s
Ġche ap
AC H
ĠX ML
, &
ĠLou is
Ġr ide
_F AIL
Ġch unk
[ s
_O UT
Ġch osen
_ [
/ (
ĠJ eff
_s l
pr iv
ĠCan adian
Ġun able
_F LAG
Ġn os
h igh
Ġl ift
f un
() {
el ly
ycler View
_ as
_L IST
Ġr adi
.get Value
ĠAnge les
ĠS pan
_in stance
it ors
Ġm igration
A K
O h
 ®
. selected
ĠG T
Ġadv ance
ĠSt yle
.Data GridView
e ction
Ñ İ
p io
ro g
Ġsh opping
ĠR ect
I lluminate
O U
ĉ array
Ġsubstant ial
Ġpre gn
Ġprom ote
IE W
.L ayout
Ġsign s
/ .
Ġlet ters
Bo ard
ct rl
" \
ĠJ ones
Ġvert ex
Ġj a
Ġaff ili
Ġwe alth
ĉ default
Ġsignificant ly
Ġe c
Ġx s
act ual
.p er
_st ep
an vas
m ac
Ġtrans l
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
Iter ator
Ġo ch
agnost ic
ĠD uring
ĠDE FAULT
Ġt ill
Ġsign ature
Ġb ird
ĠO l
ĠI r
H S
av atar
ESS AGE
Ġe lev
Ġm t
ĠN av
Ġrel ax
Ġpl ate
IT EM
( date
.n ot
Ġgr ade
Ġ} ),Ċ
? "ĊĊ
i ences
H igh
ĠD IS
dis abled
Q UI
Ġno ise
a ux
ĠU P
os a
Ġv oc
Ġ ))
oc om
_O FF
ĠD b
L ock
.e clipse
, d
ĠD raw
Ġ" (
Ġvis ited
Ġâ Ī
Ġsuc ceed
Ġim possible
a ire
ĠT urn
Ġd ish
F G
Ġs ensor
AN N
ab a
Ġsur g
] );čĊ
Ġf p
_ an
- J
- G
ĠJ ob
Con vert
ĠKE Y
Ġauth ors
_s erver
\ r
Ġ-* -
f lex
Ġs oc
R et
Ġs alt
Ġâ̦ ĊĊ
ĠC lear
(p age
-d anger
Ġroom s
con v
# {
. op
ĠA rea
_S C
h en
Ġbeg ins
- y
Ġexc ited
Ġign ored
Ġbon us
st udent
ĠM ember
Ġrel atively
ĠL ow
ĠPro du
ate way
pos ure
Ġth ick
ani el
( view
ĠCr ush
Ext ension
I l
e ed
LO C
. im
. Items
Ġconflic t
.pre vent
Ġon Create
u v
is er
Ġw ave
M ar
ĠComm unity
ic he
ĠNo thing
[ m
ĠLe e
ri ends
è re
!! !
an z
. result
ĠS K
_P ARAM
Ġdem ocr
Back Color
.ex ists
" It
( options
ra zy
as er
\ Database
al endar
_ ass
; }Ċ
vert ex
ine craft
W arning
arg o
Ġact or
ĠInst ead
ĠUs ing
S elf
@ interface
Ġspe aking
ĠPar is
ĠL ICENSE
.n ode
ĠF ood
E IF
ĠB i
. Start
ĠI B
Ġun iversity
ĠHe ader
.pro duct
C opy
et c
r ical
Ġ> >>
book s
Ġal gorithm
Ġ' __
(j avax
Ġnumer ous
Sh are
H ave
Ġrec ru
Ġpro ve
.sub string
he alth
е л
Ġdec imal
Ġcomm ission
s cription
x C
Ġsum mary
att ed
Ġclo ser
fin ished
() ){Ċ
ĠW ood
_field s
k u
_ items
Fl ag
Ġconf idence
ĠF ederal
du x
Ġcomp at
Ġvert ical
Ð ¹
è s
; ">Ċ
_m anager
() ))Ċ
ID E
: ",
__ Ċ
ĠW ay
Ñ Ī
T emp
ĠS TR
rit ten
S ync
ĠA V
ĠC EO
ĠG uid
Ġenvironment al
Ġcorrespond ing
ĉ console
Ġjust ice
ĠJ S
Ġl ived
g ar
ĠG raph
ĠSt at
Ġi Phone
. al
ĠH D
Ġocc ur
Ġth reshold
Ġon click
RE G
.Graphics Unit
M eta
Å ¾
Ġc um
.g nu
à «
Ġobt ained
Ġcompl aint
Ġe ating
Ġt ar
_t ask
Ġopt s
( to
P ass
Ġpl astic
t ility
ĠW in
.prevent Default
p ile
ĠG ar
Ġqu antity
_l ast
Ġg reatest
D ao
_D IS
ĠUs ed
ĠH P
rit ing
S ION
bl ue
d omain
Ġs cores
N ormal
_ admin
ĠA SSERT
Th en
** *
d ist
l on
Ġh ate
sh al
Image View
d atabase
Ġp and
Ġlog ic
= false
b g
ĠConfig uration
Ġn ur
O G
Ġmar ried
: +
Ġdro pped
Ġreg istration
оР¼
ult iple
iz ers
sh ape
.c opy
Ġwe aring
ĠC ath
Ġded icated
Ġ.. .Ċ
Ġadv oc
ĠF amily
Ġstat ements
em atic
ampions hip
Ġmot iv
ĠH ave
Ġbl ow
J ob
c ert
_v ector
inst all
ĠC OPY
em bed
D IR
ĠS pring
Ġex hib
cd n
ĠCom ment
ĠOption al
. player
ĠD ark
( pos
ĠSh ould
Ġcent re
ĠGu ard
ó w
Ġtr ouble
EN ER
( unsigned
_s ervice
Ġn s
ul ing
ĠMex ico
ĠN Y
mys ql
Ġl ic
å ľ
M r
- fl
ĠC ustomer
id i
Ġ? >ĊĊ
ri ble
Ġп ÑĢ
Ġs izes
_STR ING
valid ation
ĠJ on
( Http
add Class
N odes
Ġfrag ment
Ġsp oke
Ġw aste
J oin
Ġill ustr
el i
c ient
Ġa id
Ġpro sec
') {Ċ
Ġpass ing
Ġf aces
Sh ape
_ Z
it i
Ġal le
Ġro bot
ĠĠĠĠĠĠĠ Ċ
ĠS pe
Ġrece iving
ĠD etails
Ġ" )
m g
_RE F
Ġcompar ison
* ,
ĠF ound
_s ession
( U
/ F
Ġx xx
N etwork
d ers
Ġcap ture
Ġcor re
ĠL td
ĠAd v
[ @
Ġcl ip
M ill
ĠPro file
Ġend if
Ġob lig
des cribe
.e lement
riter ion
L D
er ed
Ġfav our
s core
ĠF ilter
at tributes
Ġcheck s
In flater
ĠPl us
Ġscient ific
Ġpriv acy
He ad
Ġfe at
Ġdeg rees
ĠP ale
; ">
Ġfil ms
ĠA udio
ĠT ag
ĠE nergy
it ar
par ator
Ġf ellow
Ġev t
ĠT ri
ĠD AM
cl oud
ĠP assword
ĠDemocr ats
ĠAc ad
$ lang
Ġre b
() )ĊĊ
н Ñĭ
ĠB ur
read cr
Ġh ex
Con sole
ct l
ous el
ĠWill iam
Ġa z
_P ORT
Ġpract ices
Ġany where
ĠP osition
Ġ- >Ċ
i ams
.user name
place holder
Ġo der
ĠSecret ary
Ġi T
mon d
event s
? âĢĿ
.S ub
Ġatt ached
Ġn ão
Ġest ate
. action
Ġfig ures
Ġ} );čĊ
Ġsubs cri
.t ag
n am
. plot
no on
li ament
Char acter
.t ab
Ġw inter
ĠVar iable
Ġtre es
Ġpr oud
( V
_ load
Ġh ier
ĠE con
Ġf d
Ġvict ims
R est
ian a
Ġf ake
.Print ln
Ġstr len
Ġs ad
Ġb le
Pro t
Ġbutton s
Ġte levision
Ġlog o
ext ension
ĉ j
ste in
acion es
Ġ"" "ĊĊ
Ġsim p
Ġrecord ed
Ġbr ings
Ġprincip al
Ġfe es
(s ource
k dir
Ġutil s
Ġcorrect ly
f il
Ġw el
P air
-b utton
s cale
ver ify
[ c
Ġ-- -
Ġes cape
ik es
Lower Case
ic ian
Ġch apter
ĠT YPE
Ġsh adow
Ġaw esome
W E
el if
Ġl ambda
Ġdist inct
Ġb are
- off
Ġcol our
.append Child
ole c
ag a
.f ill
ĉs uper
Ġad j
( position
.get Item
Sh ort
Ġtot ally
V D
ĠT re
_ ep
v ements
ĠS olution
Ġfund ament
F ollow
Ġfac ility
Ġhappen ing
O F
.text Box
S pan
ĠÂ «
id en
Ġex ceed
(p arent
Ġc p
ç »
Ġhas n
Ġp ri
Ġcon sequ
n en
ĠIN TO
I gnore
ĠF uture
Ġcar bon
ĠSte el
f mt
ok ie
Ġs pl
(t itle
- info
Ġde als
Ġfix ture
e a
D iv
Ġtest ed
_ return
)ĊĊ ĊĊ
upport ed
ĠC ook
Ġpay ing
ĠI ll
Ġarrest ed
ĠPr ime
_c allback
> ,Ċ
dr iver
On ce
ab b
_by tes
ĠS ets
( Object
Ġc c
Ġsh ell
al o
); //
( log
ct ors
)
Ġneighbor hood
ail ability
v ol
Ġyou th
Ġtechn iques
ĠS chema
u h
ment e
Ġre pository
im m
Ġcook ie
J S
ov ies
: {
Com plete
S ince
Ġla ugh
_B O
en able
ĠDo es
ĠW alk
wh at
k es
Ġmult ip
im ents
e ur
Ġvict ory
Gener ator
ĠM os
ro vers
Ġcomput e
Ġprovid ers
ĠMed ic
L P
_CON FIG
Ġv eter
st ers
_w indow
umer ic
ĉĉĉĉĉ Ċ
. Response
Ġrepl aced
. root
-f ree
- container
Ġmatch ing
ĠEd itor
= ${
ĠS af
Ġs ind
(b uffer
å ĩ
.ed u
) ];Ċ
ĠN FL
ay a
Ġdog s
Ġdes ire
ĠM iddle
C art
Th eme
Ġm ob
Ġdisplay ed
ig it
Ġadult s
"" "
Ġdeliver ed
vis ible
": {Ċ
<< <
ĠG O
sc roll
x E
Ġass igned
ĠB ool
Ġw p
Ġcomb at
ĠH aw
. -
Ġsupport ing
.Cont ent
irc raft
Ġsp in
ĠC R
.m y
à ¥
t pl
Ġsp aces
? ,
ĠSy ria
Ġpattern s
- box
Ġfr amework
/ %
(l ong
Ġteach ing
ARN ING
_key s
Ġtable s
UN C
in ations
- weight
r adio
ĠP ac
.s erver
.Char Field
r ing
Ġqu ote
ann a
Ġwer den
Ġc ream
Ġmach ines
- k
Ġst im
ĠSt ock
r ick
Ġimport ance
r x
õ es
Ù Ī
Ġst roke
ag ra
Ġt aste
ĠDE BUG
Th anks
ĠRe quired
ov a
M edia
Ġsi ÄĻ
(b ase
post s
Ġfile Name
Check ed
Ġinter rupt
Ġ( )Ċ
py thon
p air
Ġcirc le
Ġinit i
_st ream
Ġcomp reh
lear n
P ublic
Ġhum ans
Ġbring ing
ograph ic
_l ayer
- like
upport Initialize
ide bar
Ġvot es
Ġdes ired
M ask
Ġrel ation
. Instance
H elp
Ġins pir
ĠMon o
View Model
omet imes
Ġbackground Color
Ġrot ation
Ġm ari
/ test
INS ERT
St ar
ph y
Id s
_G ET
Ġincre ases
_c lose
_F ORM
Ġ[â̦ ]ĊĊ
az a
TE XT
ĠÃ ¤
ĠV an
Ġl ights
ĠGu ide
Ġd ates
.Com mand
am an
Ġpath s
. edit
ĉ add
d x
Ġre action
ĠBe ach
.get Message
En vironment
inter est
Ġmin ister
Ġread ers
ĉ F
Ġdom estic
Ġfile d
C ity
Ġm apping
ĠD ES
Ġrep air
t ics
ix ture
Ġn ombre
.IS upportInitialize
z o
.Is NullOr
ĠCarol ina
ĠD er
ĠE VENT
Ġg est
Ġh ist
res ources
Ġor phan
.A re
ĠIn vest
REFER RED
.Log ger
ĠR oman
Ġcult ural
fe ature
pt s
b t
Ġd ot
Ġdi am
us pend
_ access
() {čĊ
Ġsurpr ise
ab il
Ġv irt
Ġb omb
ar on
_ IS
Ġv ast
Re al
ep end
ict ed
Ġpick ed
ĠF L
ĠRepublic ans
.z eros
Press ed
s up
.C ore
M icrosoft
s ervices
ag ic
iven ess
Ġp df
Ġro les
r as
Ġindust rial
Ġfac ilities
è ¡
Ġn i
Ġb a
Ġcl s
ĉ B
C ustomer
Ġimag ine
Ġex ports
Output Stream
Ġm ad
( de
) {ĊĊ
Ġf ro
h us
Ġcommit tee
ìĿ ´
, x
Ġdiv ision
( client
(j ava
option al
. Equal
ĠPh ys
ing u
Ġs ync
ĠN a
}}
OL UM
it é
Ġident ifier
ow ed
Ġext ent
Ġh ur
V A
cl ar
Ġed ges
C riteria
Ġinde ed
in herit
ĠN ight
Ġreport ing
Ġen counter
Ġkind s
_p red
Ġconsider ing
. (
Ġprote in
T yp
gr icult
ĠB all
@ Component
ĠE ss
ĠR ub
ul p
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ
it ud
. attr
ient e
Ġsp ell
ĠJ oe
ENT ER
_h ost
it an
Ġm atters
Ġemerg ency
u ated
ĠCh at
={ '
contr i
ark er
æĪ IJ
ip er
Ġs cheme
(std err
Ġ* (
ce iver
.c olumn
Ġmark ed
_AT TR
Ġb odies
ĠIM PLIED
G ap
ĠP OST
Ġcorpor ate
Ġdim ension
Ġcontr ast
erv iew
ĠERR OR
Ġcap able
Ġadvert ising
urch ase
ĠP A
ĠFranc isco
Ġfac ing
ãĢ Į
g it
Ġbe er
Ġsk y
down load
ĠC ur
m c
ann y
.f loor
Ġc riteria
Ġparse Int
` ,Ċ
Ġas pect
Ġbund le
C ould
Ġt ank
- id
Ġh urt
Ġbroad cast
OK EN
ow nt
null able
C ap
Ġal cohol
ĠC oll
ĠH elper
ĠA f
.m ethod
Ġpl anned
pl er
ĠS ite
Ġres c
om ent
ĠJava Script
S ERVER
Ġr hs
er es
(" ,
if i
.f ields
Ġpark ing
Ġis land
Ġs ister
_ Ċ
Con straints
ĠA ust
d im
_point s
Ġg ap
_ active
Ġvo or
ĠP O
B ag
-s cale
l ambda
.Dis pose
r ule
Ġown ed
ĠMed ical
ent ries
Ġsol ar
Ġresult ing
Ġest imated
Ġimpro ved
D uration
employ ee
$ .
Action s
L ike
, (
( Request
% s
. Open
) "Ċ
Ġp ixel
Ġad apter
Ġre venue
og ram
ĠL A
ĠM achine
Ġ ا
Ġf le
Ġb ike
In sets
Ġdis p
Ġconsist ent
a ção
g ender
ĠTh ose
per ience
.Back Color
. play
Ġr ush
Ġax ios
Ġne ck
_m em
.P REFERRED
_f irst
C B
ĠW idget
Ġse q
h ar
Ġh its
Ġâ Ĥ¬
Ġcont ained
ri ent
w ater
LO AD
ĠVirgin ia
ĠAr m
Ġ. /
 »
_ root
Ġass istance
[ ],
s ync
Ġve get
es cape
ic er
bo ost
ĠF loat
- W
*/ čĊ
* >
Ġ$ (".
.p os
Ġbo ys
Ġwed ding
Ġag ents
=" _
ĠAr my
Ġh int
v ision
Ġte ch
ĠCon nect
Ġleg end
ĠB et
.B ase
Sub ject
Ġl it
Rem ove
Ġ" :
ĠF inal
pear ance
ĠiT unes
Ġparticip ants
ĠPy thon
Ġbus y
i el
vert ices
Ġtemplate Url
ĠC lose
Im g
ĠCorpor ation
t imestamp
Ġext end
Ġwe bsites
Ġposs ibility
о ÑĤ
Ġk ö
Ġme at
Ġrepresent ation
Ġ ĉĉ
_ST ART
.app ly
ĠVal ley
ĠS uccess
H i
Ġn ob
ĠI Enumerable
_ select
ge o
. ")Ċ
Ġturn ing
Ġfab ric
(" ");Ċ
Ġpers pective
é Ĺ
ĠS n
Th ank
; j
.Param eters
ĉ ĠĠĠĠĠĠĠĠĠĠĠ
Ġfact s
Ġun t
.in stance
################################ ################################
- end
ĠJO IN
ĠH en
Ġur i
åIJ į
Ġн а
ĠIn fo
Ġconduct ed
ĠÃ ¥
OUR CE
Ġw ine
J ohn
.Error f
ĠA ge
ound ed
Ġreal ize
Ġ] ;
Ġsub sequ
, m
( User
ian o
Ġaccom pl
is p
.st d
é ĩ
ĠB ed
.set Attribute
B R
ke ep
ĠA LL
Ġis ol
am ma
P ackage
Ġoccas ion
-s uccess
еР´
ĠLIMIT ED
st rip
() ĊĊĊ
istrib ution
Color s
Ġ+ :+
Did Load
al er
Ġt id
ĠL ED
ĠLink ed
ĠC art
() )čĊ
_RE AD
Ġkill ing
ĠP HP
fe ction
Ġinst ances
c v
"/ >
Ġs f
Ġtax es
_ location
ĠBit coin
u able
r ank
ign ore
tr ack
к а
Ġshould n
ĠO P
=> {Ċ
Ġk m
Ġh elper
_ head
ĠWh ether
oc o
_b l
Ġstat istics
Ġbeaut y
Ġto g
t ip
ëĭ ¤
Ġc sv
(s ql
std lib
we ak
Ġlik es
Ä į
Ġrepe at
Ġap artment
Ġem ph
_ edit
Ġv it
ĉ type
E ven
ut en
Ġcircum stances
b ian
Ġs ugar
W indows
ì ŀ
Ġobs erved
/ data
Ġcal endar
Ġstri ke
ĠR ES
_s c
f ony
ore m
( z
p ower
et ect
ĠS at
.d escription
Ġg ang
ĠS ports
ong s
ĠB undle
.s um
on ce
Ġacc used
Ġexplo re
Ġapprox imately
Ġlos ing
thes is
ĠF und
Ġdi agn
A utowired
prop erties
Ġ_ .
Ġc nt
ced ure
Ġy y
Ġgr ant
so ck
.inner HTML
Ġ] );Ċ
ĠCON FIG
=' $
] ];Ċ
UN D
Ġg lob
Ġd ire
uff le
_M EM
Ġauth entic
> ("
Ġdec ade
ĠIm port
Ġorigin ally
Ġj Query
Ġindic ate
Ġours elves
S w
.l bl
ener ate
Ġbas ically
ĠH om
Ġ+ #+
ĠBrit ain
ĠK ar
to Equal
.st op
Ġmod al
is i
Ġsuggest s
Ġd type
Ġt ur
b f
Ġconnection s
ĠB efore
ist ed
m ouse
Ġpul led
.b uild
Ġlegis lation
Ġfor th
p ad
eg o
.N ow
Ġexc iting
}ĊĊ ĊĊ
Ġcom pr
Ġsh ares
Ġr ig
g reen
_ vec
Ġenumer ate
A uto
ic ator
ĠR ay
as se
Ġh oliday
Ġnull able
g un
_d etails
Ġwr apper
se q
ĠYou ng
ju ana
Ġ" __
lic ense
ser ve
^ (
id ers
.Rem ove
rop down
' S
p in
(t oken
.D efault
Ġreason able
amp ion
ĠS ociety
Ġbe i
erv es
r ad
ĠF ox
_ images
Ġw heel
') [
Ġc fg
( By
Con structor
Ġv ary
.sw ift
Ġpro xy
ĉ H
ĠAn other
ĠP en
Ġcheck ing
Ġj est
man ager
Or igin
ug s
o ir
>< !--
Ġexpress ed
Ġmod er
Ġag encies
Ġi h
-h idden
ious ly
ĠR od
Ġso le
M ed
.A ny
Ġp c
b al
Ex ample
ĠS ale
Ġst rip
ĠCom p
Ġpresident ial
M ost
put ation
( ref
ĠF our
_f ilename
Ġen forcement
Ø ¯
ĠGe org
we ights
/ l
Ġag gress
Ġd rawing
and y
< I
- j
ak a
h ref
Ġteach ers
_ Q
( it
ĠM B
Ġtemp orary
ire base
str a
æĹ ¶
è ´
( label
ou p
Ġtop ics
Ġport ion
id os
ĠJew ish
Ġre covery
Ġstand s
# [
Ġafter noon
ĠArt icle
_ att
Ġexpl an
ĠP ak
.setOn ClickListener
. children
Ġi k
+ (
l ag
Ġdis k
Ġcont rovers
"> &
as p
Ġw ie
ĠAustral ian
ĠYou Tube
At tr
cont ains
du ce
ĠM att
at ern
Ġvol unte
Ġnew sp
V P
olt ip
Ġde legate
_m eta
Ġaccur ate
ĠEx ample
% ,
ĠD aily
Ġc abin
ĠS W
Ġlim its
k ip
Ġar my
Ġend ing
Ġb oss
ĠD ialog
Al so
="# "
ord an
row se
- min
Ġ" &
_ loc
U X
Ġdevelop ers
Ġaccur acy
Ġmaint enance
Ġhe av
Ġfil ters
.T oolStrip
Ġn arr
ĠE mp
ORD ER
ĠM obile
.S erial
.out put
.c ol
M aterial
um a
Ġconsum ers
sh ift
Ġp ued
Ġmin i
c ollection
Ġk an
.c enter
H istory
Ġben ch
() );
itor ies
Ġcrow d
_c all
Ġpow ers
- E
Ġdis miss
Ġtalk s
ĠCh annel
for ward
_ control
/s rc
i est
**************** ********
Ġbet a
(c olor
_O BJECT
ĠA pi
Ġeffect ively
C amera
s d
uss y
D ict
ĠE ffect
ib ilities
Ġreturn ing
ĠF ar
Ġ' ')
Ġmod ules
il ation
Ġ( %
TR GL
Ġst orm
on na
ĠEX P
Ġs pons
Ġdis pl
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ
f all
å Į
ign Key
_ US
et rics
Ġhand les
T L
_ amount
ow a
br and
ĠT ool
Ġus ual
. Z
cre ment
ad ium
st ock
Ġserv ing
ĠB on
Ġline ar
ĠT arget
ĠR adio
H L
Sh ader
om atic
ag ues
in ity
d iff
_ iterator
qu ot
Ġ ,Ċ
c allback
Ġsympt oms
[ _
ĠB ul
ĠF eb
und o
_ account
Ġtyp edef
и Ñģ
tr as
User Id
ĠP enn
ĠSup reme
} >
user Id
ĠK im
Ġg a
Ġart ists
å ¸
ĠAb stract
ok emon
Ġh am
o val
Ġch a
at en
å Ĩ
F ixed
Ġvul ner
ĠParam eters
qu antity
.C lear
Servlet Request
Ġy a
Ġsou l
trans action
Ġsol o
Ġp airs
æ Ķ
ĠG re
_ word
ĠC C
Ġg i
z ie
Ġsched uled
rot ation
gy pt
ul ous
:: _
ĠE ll
< !
ĉĉ ĠĠ
l p
ah a
C opyright
Ġdr am
Ġdi agram
ĠM em
Ġg arden
Com p
Ġattempt s
uff ix
> ()
Ġphil osoph
_re l
å ¼
Ġs v
.se cond
ant o
.J son
ĠTe le
_ local
_s end
Ġas pects
ì Ĺ
IB LE
Ġr ail
Ġwid ely
ash ed
i ar
in f
up per
d jango
_result s
iss ing
Ġequ ivalent
OUN D
Ġt y
Ġpotential ly
Advertis ement
ĠRec ord
resent ation
_w idget
ound ing
Ġrelig ion
Ġcons c
ĠL im
. am
H tml
Ġ' :
P ATH
_s pec
ort ed
id ades
_sh ape
Ġkeep s
.S ave
ĠL oc
or i
ĠT EST
unic ip
Ġreg ions
Ġbelie ves
/ en
pos ite
{ '
pre pare
_ const
s ample
ĠWill iams
Ġstr t
_ Get
ĠAnd rew
. active
Ġl ayers
Visual Style
az y
ĠK n
Ġac id
ĠAs ia
Ġex cess
ĉm y
Ġkey board
ens us
Ġcre w
Ġmiss ed
m aster
ĠW ild
Ġnew ly
Ġwin ner
Ġst ub
ic ode
.m ove
D omain
ĠS ar
Ġfore st
LE D
claim er
.ex it
ĠW indow
Ġres istance
ĠC HECK
(" -
ĠR yan
Ġp ipe
Ġco ast
DE F
// !
_ off
ex it
Ġult imately
imit ive
ĠKe ep
Ġhistor ical
Ġany way
ĠJack son
ock er
ER N
ĠU INT
y ntax
ER Y
is ms
Ġc n
Ġocc urs
Ġ; ;
Text View
A E
/ img
Ġy esterday
- default
Ġt iny
Ġpro c
Ġal ive
ĠRE G
. th
ear ing
.get Logger
< link
_ login
F older
ab c
lyph icon
н о
Ġnot iced
od igo
Ġed ition
im ator
. Enabled
.parse Int
Ġy ards
ĉĉĉĉĉĉĉĉ ĉĉĉĉ
Ġver bose
л Ñı
_B Y
.log in
.* ;Ċ
ĠM id
é es
Ġg lo
Ġbuild ings
Ġz e
ĠI ter
Ġt ube
ĠP ot
\ M
< th
br idge
ĠS cript
ĠM odule
Ġv acc
Ġinstall ation
v y
VisualStyle BackColor
ĠS M
.t otal
b at
Ġfind s
Ġat mos
Sub view
iz ard
Ġrepl acement
lic ated
ap is
Ġlog ged
ĠLe ft
G ui
_ Type
t m
P ad
Ġhouse hold
Ġre le
Ġpropos al
_CL ASS
:: ::
Ġinf rastructure
In ject
/ html
Ġad s
iz za
Ġm g
ctr ine
% Ċ
< html
- image
Ġatt orney
< m
(' ,
Ġcan n
Ġprint ln
o ose
Ġy ellow
.ex p
p ayment
Ġtable View
aw ay
Ġopp osition
ĠAg ain
ĠH andle
Ġex clusive
in ar
é r
оР±
ĠC ODE
emp orary
Ġre act
pi pe
c z
. activity
Ġlarg ely
Ġdis s
ax y
es is
ĠR en
Ġc orn
.Use VisualStyleBackColor
d ays
Ġfr uit
In sert
_ enc
E st
_de c
ĠL uc
Ġü ber
param eters
P ERT
ex press
_pro file
Un known
Ġrev olution
.add ress
_re quire
Ġun iform
ĠP ack
l ar
ĠU ITableView
Ġdep ends
Valid ation
conf irm
O wner
Ġt rib
h et
ĠI de
ans as
L anguage
u et
ĠP o
ĠSte ve
Ġcont est
_DE FAULT
Ġapparent ly
RE EN
Ġfrequ ently
Ġtrad ition
ocol ate
S I
ĠArg ument
F ocus
ert e
ĠL ayout
Ġd x
Ġgener ator
ĠW ait
P olicy
l ights
.Ex ecute
P y
Ġbed room
ed a
ra id
ĉs ize
Ġan cient
Ġp ump
Ġd w
Ġ(! (
Ġspec ify
( status
ĠF BI
.ex ception
Ġrem ark
ly mp
ant ee
Up load
ern et
é ¡
in ent
ĠR ender
d m
ĠM emory
r ich
ĠT ools
Ġk ne
Ġper m
b ad
Ġd inner
.res et
Ġj Label
Fe ature
.S ervice
Ġ( {Ċ
Ġre ferred
.class List
Ġinit With
ĠText View
Ġne ither
Ġcount y
Ġ" {
ç §
Ġt ack
class Name
ĠUS ER
Ġre new
` `
get Name
Ġb rown
Err ors
ert o
Ġsust ain
S O
let es
ĠIn valid
Ġen emies
un ge
Ġexist ence
err a
Ċ ĠĠĊ
utor ial
# a
p ay
char ge
ĠI re
ate st
Ġexp los
Ġf ired
N ER
ĠT y
ic ion
U ri
Ġobvious ly
ĠC olum
Ġ' +
ĠDe vice
- related
_ ARG
Ġv or
ĠLess er
_O P
Serial izer
Ġup grade
L ight
Ġc odes
++ ;čĊ
Ġwrit es
fo od
Ġé t
@ section
Ġtrack s
Ġserious ly
ch t
(size of
Ġimmedi ate
Ġscient ists
Ġ{ $
_ ne
.Anchor Styles
Ġaccom mod
ĠHar ry
Ġs ight
ĠPale st
ersist ent
Ġ Ñĥ
- input
Ġco ordinates
 ·
W elcome
.con f
Ġgre w
Ġb old
ĠC PU
(m y
Ġperfect ly
Ġmom ents
ĠM ovie
- data
yst al
_W IDTH
ĠS creen
æ Ŀ
Ġdis ap
Ġredu ction
.Get Component
_M ODULE
Ġgener ic
Ġd y
all er
Ġc url
ĠB ody
Ġb anks
, t
av g
Ġev il
Ġmanufact urer
Ġrece iver
Column s
Ġing redients
ĉ out
qu es
.L oad
Ġslow ly
ĠT own
ĠC ell
_n ormal
_p refix
ĠAl ert
(" {
ä r
âĢľ The
ĠM D
Ġcour ses
ath an
é Ļ
oc c
ĠS ER
es ign
Add r
= ['
(" ./
] }
.f ont
ĠInst agram
ĠB order
od a
Ġh all
Ġr um
_b it
Ġs aving
_d own
R andom
_reg ister
( Context
Ġoppos ite
R oom
Y ES
ан и
Ġenjoy ed
_r un
C lear
âĢ ĺ
ĠF ord
on ic
ost en
"] )
_ auth
// čĊ
Ġsuff icient
LE S
Ġph en
Ġo h
_c sv
Ġrout ine
.Are Equal
ay lor
Ġb asket
_COM M
rypt ed
S im
ĠSh op
Ġstud io
at os
( W
[ string
ä t
og a
Ġsh r
Ġs ick
An other
Ġdo ors
_N E
ĠTH REE
. order
raz il
Ġmap s
_TR UE
trans late
Ġnear by
Ġn ach
LO AT
b atch
Ġl ux
ash es
ang ers
â̦ â̦
_E VENT
_ UP
Ġact s
in v
_M ETHOD
cc ion
Ġret ain
ut ch
ĠÐ ±
Ġknow ing
Ġrepresent ing
N OT
p ng
Con tract
Ġtr ick
ĠE dition
uplic ate
Ġcontrol led
c fg
j avascript
Ġmil k
Wh ite
Se quence
aw a
Ġdiscuss ed
ĠB ush
ĠY ES
.f actory
t ags
Ġt act
Ġs id
$ $
ĠE num
Ġfr ames
} );
Ġreg ul
'] ;čĊ
Reg ion
ff f
Ġc ro
( com
=" +
St udent
Ġdis appoint
RES ULT
Count er
Ġbut ter
ĠH a
ĠD igital
Ġb id
"> {{
ing ers
ĠC ountry
_t pl
"] )Ċ
/ k
d ating
: #
ĠD ATA
yn chron
_b ody
olly wood
Ġval or
ip ient
o ft
UB L
doc s
Ġsyn chron
Ġform ed
ru ption
Ġlist a
Request Mapping
Ġvill age
Ġkn ock
oc s
" {
_fl ags
Ġtrans actions
Ġhab it
ĠJ e
ed en
Ġa ircraft
ir k
ĠA B
Ġfair ly
. inter
.A ct
Ġinstr ument
remove Class
.com mand
Ñ ī
ĉm em
( min
Ġo t
Ġcol le
= s
time out
Ġid s
ĠM atch
ij n
z ero
Ġnetwork s
.g ov
Ġint el
Ġsection s
out ine
(c md
(d ir
ĠLI ABILITY
ĠB log
Ġbr idge
ĠC V
con vert
Ġ" )Ċ
ĠB ern
_P O
e val
( set
to ol
Ġpay ments
Beh aviour
Ġcon crete
Ġel ig
Ġacc eler
Ġh ole
_ o
TE GER
Ġgraph ics
O wn
Form atter
on der
Ġpack ages
/ a
ĠK now
Or Default
Ġdut y
W ait
н а
_rec ord
[ t
M esh
Ġon going
.be ans
Ġt an
Ġinter pret
ast ers
QU AL
Ġleg s
\ Request
- file
_m utex
ĠS aint
// #
Ġpro hib
( info
: =
lin ux
Ġb lo
ot ic
ĉf inal
_ex p
ĠSt op
ap ing
(s aved
_p ush
Ġe ase
_F R
pons ive
str cmp
: ĊĊĊĊ
ä» ¶
ol i
Ġextrem e
Ġprof essor
Im ages
.IO Exception
Ġaddress es
plement ed
Ġincor por
Ġuse Effect
_O F
ĠD a
n ombre
IR ST
Ġdisc rim
Ġcomp ens
greg ate
anc ell
ach es
ĠC riteria
$ result
D estroy
Ġsecond ary
W atch
ĠS em
ĠMc C
Ġacad emic
U pper
:: ~
ut ral
ĠD og
ad ed
Valid ator
Ġder ived
Ġset Timeout
ĠK en
Ġtyp ical
ĠB ob
Ġb ounds
ĠSe ason
Ġc razy
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ
-r outer
itt est
ĠM ir
Ġemot ional
, v
c n
/ st
å ½
on om
Ġdecl ared
> .
ail ing
Ġ/* <<<
Ġnorm ally
(M e
ev in
lik ely
Ġpoint ed
ĠSt ack
Ġw alls
. Vector
me an
] ]Ċ
Ġlist ening
ad v
Ġsw ap
IF T
Ø ª
. argv
ul s
< option
not ations
Ġemail s
ĠU kr
ast a
ĠTh us
ĠSt one
Ġappe al
. âĢĻ
Ġreg ulations
Pre ferences
ĠPh one
ul f
ĠD R
Ġtechn ologies
Ġpar agraph
Ġnecess arily
.e ach
< float
res a
Ġunder st
Ġf inger
press ed
-b y
if fer
w atch
ĠB a
A IM
Ġwe ights
ĠR on
') }}
[ self
-------- --Ċ
per iment
Ġto String
x ic
ĠC amera
! ĊĊĊĊ
aur ant
P refix
Ġinstit utions
: int
Ġex posure
p attern
ĠLin ux
.n umber
red ient
Argument Exception
ĠCh ief
" },
Ġelect ronic
r ong
er d
sp Net
ra it
/ ',
ĠOh io
Cont rollers
Ġcontin uing
ĠT emplate
ĠE th
s z
/ env
En v
% .
art ers
) ((
ĠT ABLE
ĠÃ ®
per ature
pro gress
P res
ê °
im plementation
Ġb ien
Ġstre ets
_M SG
New s
## #
: /
Ġcut ting
x B
ress ed
_EN ABLE
l ab
Ġca using
] ));Ċ
b ra
x FFFF
il ly
plet ion
w ill
_b ar
Ġstruct ures
ĠI mp
Û Į
Ġ< >
Ġ ----------------
_B UFFER
.d ir
Ġpl ain
Ġpe er
g g
oint s
Ġsomew hat
Ġw et
Ġemploy ment
Ġtick ets
ir ms
Ġt uple
s is
$ sql
r ig
Ġcon version
Ġg es
Ġconfig ure
eg r
ĠC a
Ġ__ ('
ou ston
.t oken
Bl ack
Ġmag azine
A W
. IN
os ing
Ġbro ke
ĠC ru
DE LETE
Ġdestroy ed
(M ath
Ġappro val
-d om
ĠI II
table View
Ġdesign s
Ġcrush ing
Ġcons ent
dir name
om p
Ġc rypt
? (
or ough
. o
ĉ list
ams ung
."" "Ċ
err ing
G oogle
_p air
_IN IT
rem arks
Ġg ear
F ill
l ife
} ")Ċ
Ġsuit able
Ġsurpr ised
_RE QUEST
Ġman ifest
att en
Ġfr ustr
ov ement
.c lick
Ġi i
Ġexp ansion
ig s
P arse
.Reg ular
R ob
_l ayout
ì ł
Ġtrans lation
ĠBe aut
B est
_C OLOR
< label
Ġliqu id
IT S
Ġpro d
Ġoper ate
UI Kit
Ġn atur
arg ument
_d etail
ĠCent re
Ġ" --
Ġ}} "
lo cale
.t v
_se q
Ġup coming
Ch art
ĠDiv ision
Ġclin ical
Com pany
S epar
l as
ĠH un
: s
Ġhead ing
оР³
Ġ" ");Ċ
[ id
b ia
Ġst retch
ic ide
Ġre produ
.pro ject
leg end
end ers
Ġrespons es
Ġon t
rit ical
Ġref uge
ĠL i
Ġ: ĊĊ
ĠTh ree
.cont roller
_IN DEX
_F OR
\Model s
j ax
ĉex it
Ġâ ĸ
Ġc overs
ĉ y
- .
IND OW
Ġfail s
in cludes
Ġf ault
Ġl y
ñ o
.s lice
ILE D
ĠP ur
ĠAs ian
_b atch
.M ax
v l
ĠCOPY RIGHT
Ġg iant
ĠMan ual
ĠC opy
Class Name
He alth
C ursor
IB Outlet
Ġt we
æ ³
_label s
Ġcol lected
Ġfurn iture
Ġdeal ing
Control s
ĠHot el
ck s
Ġch ose
âĶ Ģ
od d
S R
Ù Ĭ
ì Ħ
Ġacc ord
ĠM ove
ĠM ode
ĠM ock
Ġthread s
++ ++
ĠO ptions
Ref resh
ĠD id
'] ->
u cc
_ch annel
. abs
Ġ{ },Ċ
ĠW al
er ior
Ġmain ly
ĠDr iver
NotFound Exception
Ġcount s
e am
Ġ& =
Q uestion
ĠA li
Ġany more
d etail
t ail
Ġm ile
ĠF air
Ġs orry
Ġsurround ing
Ġad m
De v
Ġmari juana
ĠS ound
ĠA sh
F D
Te am
. port
Ġ[ ]ĊĊ
ub ble
Ġas c
Ġint ention
A cc
ch i
ust ers
Ġins pired
se g
CL U
Ġman ip
M etadata
Con nect
ĠB eh
Ġfind ings
Ġas sembly
w orld
Ġrem ained
Ġu id
( .
Ġm x
Lo op
ĊĊĊĊ Ċ
Ġfant astic
wh o
ak i
ĠB asic
ĠY et
ĠUs ers
ik ip
Ġhead s
ĠMich igan
_ it
ĠTor onto
Ġrec ording
Ġsub mitted
_var iable
medi ate
.graph ics
Ġst ood
Ġre ar
vel ocity
_M ESSAGE
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
ro les
ĠT our
_ year
end ment
amp s
ĠIre land
m al
Ġyoung er
Ġstrugg le
Ġc able
ĠSD L
(' -
an es
ĠNe ed
.R ow
P ol
ĠP H
_s cript
ag em
ĠB as
_s pace
. loc
: i
ad r
Ġengine ering
it en
) &
Ġu k
ĠL ittle
_C OUNT
x A
Array List
æ į
Ġ" ")Ċ
An chor
Ġh ang
t witter
Ġcompet itive
.s rc
ãģ Ĺ
Ġtrans late
ĠCre ates
ook s
ĠR oll
'' 'Ċ
/ sh
s ome
Enc oding
.res olve
Ġdesign er
ĠSt orage
Ġz a
ĠN ever
Ġsomew here
Ġbox es
.s ource
Ġpy game
Ġgrow n
.t w
() ),Ċ
', ['
Ġoppon ent
(s rc
.l ayer
AP P
ĠAct iv
Ġguest s
ĠVAL UES
};ĊĊ Ċ
.n ative
Ġamount s
. RE
Ġcl one
Ġwer en
Ġ" <<
_ ac
Ġbreak ing
Ġreli able
.P OST
ĠSk y
Ġ' &
Ġsaved InstanceState
ast ing
ill ion
com ments
ult y
.m enu
/ config
Ġ ĊĊĊ
T ODO
Ġpurch ased
_c or
ĉ auto
Compat Activity
com plete
_ graph
is odes
Ġsitu ations
ĠH or
Re ceive
âĢľ We
Ġent ities
.assert Equals
оРº
ĠS ans
v ince
rom pt
= Ċ
Ġ/ .
.Se lect
yl v
Ġb att
A udio
Ġincreasing ly
.B undle
Ġexpl ains
the ast
. offset
Ġh al
Ġtechn ique
_l imit
Ġdraw n
AY ER
Ġfeature d
yy yy
at in
ph en
ach el
! \
l ower
ĠG R
Ġp ag
ĠP arse
Ġt ou
ä¸ Ģ
D istance
Index Path
Ġh ell
s im
UT TON
Us age
elen ium
ĠF all
Ġ" .$
ĠM u
Ġcr uc
Ġs ont
REF IX
Ġinter ior
ĠO lymp
.Auto Scale
par a
Axis Alignment
Ġr iver
D to
Ġwith draw
Re act
- class
b efore
_ alloc
Cont ents
ĠW as
I CT
Ġform ula
Ġindic ates
ĠĠĠĠ ĊĊ
_st ore
it ting
ĠIt alian
_S et
_re port
Ġp id
_V ER
Ġw ins
ĠCl oud
") {Ċ
ch ester
Ġden ied
Ġw ird
ĠSte p
Ġinvest ors
b old
_d isplay
ou ver
or er
Res et
Ġsurg ery
Ġstrateg ies
/m aterial
_ unit
Ġc ouncil
.P er
ĠâĢ ŀ
Ġre form
F ramework
Ġlist ing
_b tn
Ġb is
% d
eg as
Ġsudden ly
_S ER
Ġa o
_d irectory
f as
Ġprem ium
Ġtrack ing
ĠB L
Ġm ature
Ġbath room
Ġ'/ '
ĠÄ ij
Per formed
Ġsold iers
arn ings
Ġwalk ed
- con
b ottom
Ġsurpr ising
Ġg ene
Us uario
.DE FAULT
ĠM IT
C ODE
ĠE gypt
p icker
ys ql
AT URE
d etails
ĠCon ference
In formation
ĠM ail
-d own
r aries
b ro
Ġsubject s
Ġ' *
è¯ ·
or ient
: @
ver bose
E F
Ġto ler
eng ers
Ġend point
Ġstr ange
Ġcol on
Ġpre ferred
de p
ĠE V
ARR AY
Ġw he
Ġp up
_n odes
Ġtalk ed
Ġinstit ution
db c
Ġex posed
te en
ĠFr ont
T T
_N ONE
\/ \/
pro gram
Ġencour age
. `
sh ire
ĠIsl am
e en
N I
' "
.W idth
Ġlik ed
Ġ{ ...
ĠSystem s
Ġvot re
Ġmanufact uring
Con verter
ĠIn f
ì ļ
D TO
Ġin ches
Ġ à¤
à ¹
ĠChar les
B U
")) ;ĊĊ
ĠL abor
un n
Ġest im
m obile
ĠL earn
_C ALL
â Ħ
Ġind ices
Ġt ub
ikip edia
C ost
row able
ë ¡
g age
Ġfunction ality
uzz le
em os
.l ib
Ġd ass
еРº
enn a
Ġsh ots
Ġrest ore
/ D
For Key
], [
al ias
l int
.st ream
æ ł
_FORM AT
Ġsil ver
.re pository
Ġlegis l
.B order
_fe atures
Per mission
Ġhous es
ĠW ars
_COM P
Ġinj uries
Ġconstant ly
fl utter
EN U
ĠCon f
Ġrecogn ized
Ġpract ical
Ġde cent
B J
] );
ast y
ĠAct ivity
-m ode
Ġsl ide
.IsNullOr Empty
ĠY OU
P ower
ind ices
Ġqual ified
Ġthrow n
h ello
ĠN ick
l ah
as sembly
ĠSm all
old ing
Sh ould
ĠSil ver
(saved InstanceState
Ġtog gle
.N ot
C trl
: nil
ĠCont inue
ĠB oot
æ ī
ĠM ur
d on
ĠF A
S napshot
Ġassoci ation
fo x
, a
az ione
] )čĊ
CT YPE
Ġf ade
ĠD ar
.n avigation
Ġl uck
SC RI
ĠDe ad
Ġterm inal
_LE NGTH
Ġeff iciency
Ġun w
Ġn arrow
iment o
( Color
ĠSe a
_ area
, A
_ opt
ĠHill ary
.t ask
ĠJ ac
ast ed
ĠAd am
ĠIl legal
Ġsearch ing
Instance Of
J ava
ĠForm at
Ġreal ized
ĠChild ren
Ġk il
(f rame
âĢĿ .ĊĊ
Ġscen ario
"] );Ċ
Ġincred ible
li x
IO Exception
ĠQ uest
il ty
Ġun lock
â Ĥ¬
Ġre ferences
ĠV ert
B inding
eg ative
Ġwr ap
.d atabase
( content
B uf
ĠTr ad
ĠA ud
tr ace
.m ock
Ġther apy
ĉ L
.To Int
ĠKing dom
B us
ha ust
"" "ĊĊ
( end
.draw able
[ ];Ċ
ĠH ospital
Ġph arm
---- -
ĠA G
é d
> ");Ċ
Ġw allet
at able
) $
Ġmonth ly
Ġdi agnostic
S ymbol
Ġiter ator
un finished
Ġimm igration
s r
RO W
(g ame
Ġclo thes
ĠU nt
Ġactiv ation
_C on
.h ash
Ġinitial ly
.H ash
Ġcut s
f ound
ĠSt ory
ÑĨ и
ac ao
_T YP
pro to
est r
-p age
ah r
Ġincor rect
ĠJose ph
TextBox Column
_st yle
ĠD aniel
s heet
Ġl iv
l ined
Ġr a
R untime
_ empty
sl ug
_ struct
ë Ĭ
m u
Ġper mitted
Ġreg ional
Ġsob re
ĠS uch
Ġ[ _
Ġro of
.Al ignment
t imes
.m sg
Ġche st
ĠT ab
Ġest a
ä n
Ġsubs cription
( command
s pecial
Ġme al
") :Ċ
_ ctx
Ġclos ely
et ry
- be
ad el
ĠR am
ig est
ĠSpan ish
Ġcommit ment
Ġw ake
* >(
P HP
_ {
ck er
< List
_n ull
ĠRes erved
Ġin her
.Column s
.A spNet
_IN VALID
ĠParam eter
Ġex pr
} {
Cell Style
Ġval uable
Ġfun ny
In v
Ġst able
* t
Ġp ill
pl iers
ĠC SS
ĠCon dition
ĠS peed
ublish er
Ġoff ensive
ce st
ic as
Ġsp ark
ĠPro te
set up
IF Y
ĠT ax
Wh o
F amily
- for
. uk
Ġf asc
sv g
") ).
Ġbirth day
âĸ Ī
ve h
el led
Ġimport s
ĠIsl amic
T A
ĠSt an
we ather
Ġsus pect
e ature
enn es
W M
.m inecraft
av id
è ½
.se curity
in os
G ood
Ġm arch
Ġposs ess
us uario
Con s
am ber
ched uler
Ġhor se
ç ½
(b ody
ĠTrans form
_de code
.s vg
Ġf oo
Ġd ella
ext ends
am er
Ġprocess ed
ĠH arr
ĠA I
Ġk o
CH AR
( %
Ġt ap
({ '
c roll
D OM
Ġte a
Ġre in
Ġworld wide
_f n
sh a
Ġb ir
ç ões
="# ">
Ġrepresent ed
ill er
(ex pected
Ġd ance
Ġvisit ors
.con cat
-b it
UR RE
ĠR og
v p
ip h
ĠL LC
it led
iam i
C oll
_re al
_sh ow
_f older
Ġd ar
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
Ġl atter
arch y
Ġb ow
Ġout come
ĠPost ed
Ġris ks
ĠThere fore
Ġowners hip
Ġpar allel
Ġp ending
ge ometry
Ġrecogn ize
ST EM
ĠC P
Ġimm igr
IT LE
ĠĠĠĠ ĉĉ
conn ected
Ġsm ile
(d ocument
\ Component
vert ical
Ġconsum ption
Ġsh oes
. impl
un ks
. ";Ċ
Ġfood s
_ );Ċ
.assert True
Ġp ipeline
Ġcollection s
Ġearn ed
ĠC ert
Ġpartners hip
( action
Ġc d
ĠV ery
Option al
Ġscre ens
Ġtit les
ener ator
Ġab andon
k ind
IL TER
Ġclos ing
lic a
_ inter
Ġcamp us
set ting
S prite
ãģ ¯
_re ply
To List
: \/\/
ed e
Ġfol ks
Ġbo at
( argv
Ġperman ent
Ġcarry ing
Ġconserv ative
import ant
. img
ĠIm m
Ġdim ensions
al and
s ingle
Ex it
-------- --
ari ant
tern al
Se conds
ĠIt aly
ot lin
.Res ume
=' "
) ==
cept or
Ġs ca
/m ain
Sec urity
_d at
Ġlet s
Ġa qu
Ġwhen ever
b erry
Ġact ing
ant i
p d
& gt
æ Ń
Z one
T oday
! .
To Props
ab is
it able
Ġg al
] {
iz ona
Ġin contri
N ET
/// Ċ
[ in
_s ave
Ġex em
ĠK enn
Ġev olution
var s
_st ats
- only
ĠColor ado
Ġwatch ed
b our
Ġsever e
Ġprofession als
port ion
Ġguar ante
Ð ³
Ġpush ed
ĠG i
ï ½
Ġt um
ĠA z
ĠEdge Insets
")) ;čĊ
is se
. ac
Set ting
Ġapprec iate
ĠValue Error
Ġsur ve
ĠR ole
. Inter
plot lib
j et
d am
Ġplatform s
te le
UT O
ĠInt ernal
+ :
} ;čĊ
Gener al
\ Entity
Ġlawy er
qu iv
ĠPost s
is o
Ġacc um
ob e
Ġmark s
Ġ] ;ĊĊ
ĉ text
.s uccess
cur r
as a
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ
Ġth in
_ over
are st
ĠO s
( address
Ġvel ocity
Ġ[] ;ĊĊ
=" ../../
ĠPr iv
b ow
Ġguar antee
% ĊĊ
Ġeval uate
.LE NGTH
Ġin ventory
q a
_de bug
.On ClickListener
Ġl ies
Ġassess ment
dat etime
.background Color
Ġ*/ čĊčĊ
ra f
un wrap
ĠF oot
Ġnot ify
Ġlow est
DO CTYPE
Ġl anguages
ex tra
- back
Ġein en
tem plates
_p ass
ĠM ust
Ġest á
_c ore
ĠSc ot
A I
Ġb ias
ations hip
Con stant
Ġprogram ming
In s
uspend Layout
ĠPRO VID
ant es
Ġsh irt
in ated
. OK
[ a
Ġthink s
? ĊĊĊĊ
Ġregard less
ĠMag ic
ul ating
ĉ class
add Group
RE ATE
ĠS U
Ġsim pl
c opyright
Ġb unch
Ġun iverse
ĠE rr
Ġpresent ation
c ategories
Ġatt ach
.s ign
_A C
Ġdisc ipl
Ġregular ly
Ġprim arily
ink s
[ [
.r and
.sh ould
ownt own
=" '
Ġs ans
Ġsupport ers
se quence
G O
. .ĊĊ
ĠS pr
Ġcare fully
U IColor
dest roy
Ġtod os
ĠOR DER
ott ed
Ġd ont
aud i
_ player
g re
ĠO il
< body
_st ack
.P adding
ĠProduct s
Ġpriv ile
Ġinj ured
ĠF urther
Ġal ias
.Resume Layout
_LE N
Ġs es
'] ;ĊĊ
cre ens
Ġdirect ed
.S uspendLayout
od ge
.A t
mark s
ĠUn ivers
ert s
ĠE sc
Ġnav bar
Ġutil ity
agnost ics
Ġin ject
ĠD NA
Ġ" ,"
am ar
Ġe u
Ġrestaur ants
_p ut
ut ers
Tool Strip
t w
ist ro
Ġz oom
Ġleg it
pec ific
ĠC ome
Ġlocal Storage
Ġabs or
.P anel
ĠDesign er
Ġo w
IC AL
_ uri
(f ield
Ġsup erv
Ex ists
Ġrespect ively
ĠSt and
Con f
uss ian
Ġar c
Ġ nd
uck s
Ġre str
Ġseason s
ĠCh apter
ĠSw itch
p ic
Ġh i
load ed
Ġfl uid
-b tn
Ġrun time
. it
B N
Op acity
as ant
ry ption
-n ative
Ġta ught
å ¯
ag ment
Ġm ul
Reg istry
_ grid
ĠBro ok
: Set
Ġm ongoose
AM ES
inner HTML
Ġs oci
ĠInt el
get Id
C md
Ġaccess ible
r ames
le ton
Ġ__ (
ĉ delete
ĠS quare
" ĊĊĊ
Ġbu cket
avor ite
ĠB reak
++ ]
Ġbr ush
Ġt ensor
/ http
T ile
Ġfunction al
Ġ" *
wh el
Ġt ent
ĠChar acter
Ġse es
. ST
B ig
Ġext ern
Url s
)) )),
ĠJ r
.B uilder
. ;
n l
_ Init
ĠH ER
ż e
mys qli
_ icon
v an
Ġfeel ings
Ġle an
Ġhop ing
T V
=" =
Ġcur ve
_st d
_L INE
d st
Ġmor al
em es
og y
Ġur ban
Ġas ide
Ġedit ing
AD D
Se cond
Tr ack
Ġvot ing
Ġhon or
. ',
ell en
Ch at
Ġimpro vement
'] ĊĊ
ł ģ
Ġpars ed
ĠĠĠĠĠĠĠĠĠ Ċ
Ġla zy
Ġfall ing
Serial ize
ĠP a
_ gr
Ġfore ver
. white
. Query
B ed
ĠD u
Ġres ume
Ġp apers
ĠIn it
Ġsuffer ing
âĢ ĭ
Ġdeclar ations
() -
Ġexec uted
ĠH ol
.b lock
ãĥ ³
S K
Ġst uck
ĠL ock
incip al
Null able
Ġs essions
un i
Ġcou p
app ro
gh an
_p ool
ĉ id
Ġsl ots
Ġmedic ine
Ġgl ad
ĠMono Behaviour
at re
Ġ$ ('
meric an
ag g
Ġk ann
_con nect
Ġbr ands
Ġs ke
Ġdig it
< n
Ġback up
Ġperson ally
.P roperty
.com mit
Ġc ry
_count er
Ġm alloc
Ġgr an
ĠD rop
pl atform
red entials
ink ing
ĠU IL
ub s
Ġm l
less ly
Gener ated
ere otype
Ġb at
Layout Panel
LO T
");čĊ čĊ
Ġmus cle
Ġcert ificate
AND LE
Ġhard er
Ġp ixels
) ",Ċ
. Header
Ġdevelop er
ĠL as
eg an
. <
Ġexpl ode
Ġparticip ate
P attern
(t able
ĠT EXT
const ants
x D
th ew
}, ĊĊ
ãģ ®
_d es
Ġsub str
ĠSm art
Ġsc ala
g ent
-b ar
ession al
um bs
.ex ec
' \
T K
un ist
pro of
c ial
pro c
={ "
.h ref
=$ (
Ġl unch
isc al
ĠEn try
Ġout door
sem ble
Ġessential ly
/ G
[] )
% "
st en
USE D
Ġd ust
å °
ĉ ĊĊ
Ġret ire
Ġf ib
Al though
Ġlo ves
Ġread s
yc les
ĠH el
_ uint
Ġ' .$
_in itial
N amed
Ġfundament al
AD ING
Ġto w
ĠA DD
ĠAcad emy
: String
Ġcompreh ensive
.s cal
ĠM eta
M essages
.annot ations
\ Response
Ġacknow led
ĠA RE
] ==
Ġclean ing
è ¾
Ent ities
ĠS ales
ĠW is
.ext end
all enge
Ġg aming
$ query
IC ES
ET CH
H orizontal
qu ential
B ACK
de velop
is or
(c ode
- K
_P IN
requ ency
ĠQ uestion
_ container
_mod ules
ĠJer sey
_d iff
. el
Ġ* ((
c nt
ĠS a
C PP
in ite
Ġun us
- white
et ary
Ġinvol ving
Ġ? >čĊ
b est
all as
ent ed
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĊ
_con nection
Ġrep o
en abled
аРº
Ġsh a
Ġmembers hip
Status Code
in ating
_s m
_c ustom
_ weight
Ġc ss
St at
_ env
link s
TR L
ĠH it
, r
up id
Ġop ens
Ġg ent
_v is
Ġj oy
< w
_c ost
ĠPy Object
ren ce
ĠGeorg ia
ĠBro ad
m ma
â Ĥ
p f
Ġ" \"
Ġ( &
om o
Ġliter ally
Ī ĺ
met ric
Ġb ars
z ed
(w indow
ĠIsrael i
Ġform al
ident ifier
.d ao
ĠDe ath
% ;Ċ
Ġdecl are
ar ms
RE AM
PERT Y
Ġconsequ ences
to ols
Pe ople
ĠWh ich
> ();čĊ
.de code
_A CT
Button s
.f loat
.F irst
ë ¥
ĠPol it
ĠX CT
T ags
ĠCG Float
= str
Ġle af
- check
ĠI ss
.s ystem
log out
ach t
Ang le
s in
ch art
INT ER
ĠN UM
B asic
.P roperties
ä¸ Ń
_ change
ĠB razil
Ab stract
Ġ: +:
_ use
а л
ĠL y
IB UT
Ġout er
Ġ-- >čĊ
Ġrel ief
l ap
qu er
_p arent
he ap
LO SE
Ġcomb ine
ĠR ose
ow ers
Ġproced ures
ĠS ort
an im
var iant
eh icle
Ġsign ing
Pr imary
c urrency
Ġsex e
o en
th eta
em an
Ġimpress ive
(' _
ĉ U
ĠText Style
_c nt
Ġs lice
(' :
Ġunderst ood
H is
Ġinform ed
Ġn ick
(T AG
h d
Ġelection s
est ure
ĠS anta
ĠCo ast
.p df
inc iple
.cl one
b orn
ut a
Ġl icensed
C r
Ġb read
ĠH ouston
Ġn od
Ġhop es
ĠCG Rect
Ġgu ilty
.g if
Ġro se
.Com mon
T ip
AN K
ĠF C
D uring
ĠSym fony
Ġdef ensive
k m
) >
arch ive
ĠU RI
ycl ing
- o
ĠWe bsite
AM P
ish ment
Ġdo ctors
D irect
AR I
ĠRed irect
ier en
_d ist
y o
ĠPro gress
Ġz um
Ġmem or
ĠE D
Ġj ur
æį ®
_T ABLE
Ġu uid
Ex pr
. head
(' %
point er
Ġest imate
ĠG reg
Ġlo ader
Ġi OS
Ġm ens
[ y
Ġref used
Ġprec ision
is ch
ĠA CTION
Cl oud
s With
( ret
_ADD R
_con f
(d f
Ġlock ed
Ġr ising
ãĥ» ãĥ»
ĠM s
Ġscen es
_EX T
_ raw
_ the
pe ople
Ġre con
ĠF un
Ġb less
ĠUp dated
ü n
ĠĠĠĠĠĠĠĠĠĠĠĠ čĊ
pe ction
Re lease
.log ger
ĠS Y
Ġcoun sel
ur d
_ true
Ġevery body
iv ot
Ġh ence
ĠN AS
Ġoppos ed
unk nown
ĠDES C
ĠCh air
fa iled
ĠIN CLUDING
Ġwrit ers
{ }Ċ
ÃŃ t
_c opy
} :
ĠB at
Ġconvert ed
ed ing
pl acement
ĠH ost
S ound
и м
Ġs ought
m id
Ġsal ary
og g
âĦ ¢
b ul
Ġw ir
valid ator
_ST AT
.st ore
ĠB attle
ı n
Ġ-- >ĊĊ
Tr ump
d ot
ĠCON T
.f etch
Ġcontin u
w as
Ġfra ud
_t mp
mit ter
.p ictureBox
G A
Ġt ournament
. Input
[ r
ex ion
cent age
ĠKore an
und ef
ĠAv ailable
resh ape
Ġk it
ĠStr uct
ĠS UB
An swer
_l ib
.t witter
Ġo re
ĠDr agon
.Ex t
, k
Ġexplan ation
ref s
ĠDr ive
ĠTr aining
.H as
int age
b ig
olog ist
enn is
Ù ĩ
Ġch icken
ĠĠĠĠĠĠĠĠĠĠ Ċ
ç Ľ
ãģ §
Ġpe ak
Ġdrink ing
Ġen code
ĠNE W
m alloc
ĉf printf
Ġ= ================================================================
in cluding
Ġprincip les
ĠM ah
st orage
- key
Ġkey word
% ;
Ġtr ained
.con trib
Ġk v
__ ':Ċ
ĠB oy
param eter
Ġsu ite
Ġthous and
Ġco ordinate
-g enerated
íķ ĺ
gener ated
Ġad mitted
Ġp ussy
# w
Ġsw im
un ion
N a
ĠRoy al
.ch annel
Up dated
_RO OT
Ġv ital
ra ction
ĠCrush er
Ġpre ced
Ġhor izontal
Blue print
Ġattr s
Ġsm oke
Ð Ĵ
. Equals
F B
ĠRes ources
roll ing
Ġpass es
ĠN um
rot ate
et ype
\ ",
Ġsens itive
Ġt all
? âĢĿĊĊ
Pro xy
i y
_ section
âĢĶâĢĶ âĢĶâĢĶ
br id
Ġcirc uit
at an
EN C
Ġdr iven
Ġvot ed
Ġeduc ational
Ġinter action
abet es
Ġt one
ĠInitialize Component
Ġmer ely
Ġì ŀ
co okie
_ div
ĠUIL abel
vel y
} );čĊ
_ ENT
#+ #+
art icles
ĠSou thern
Ġstrong er
ĠG iven
ĠE ric
ĠI R
ab stract
U nder
n able
Ġincre ment
ov en
Ġco in
_t imer
Ġsuffer ed
ĠF REE
'] ."
ĠQue en
st ats
Ġmeet ings
Ġenter ing
Ġalong side
(s ession
it als
Ġfound ation
ĠC redit
. div
_ ALL
pc ion
_st at
ick ing
Default s
_s rc
Ġoutput s
/ B
Ġent hus
-b l
.Fore Color
ĉ temp
F ace
Ġinter act
Ġwe ird
M ount
re ll
ud ents
Ġrequire ment
ĠS us
I ER
Ġe lected
re ference
ĠM E
Ġserv ers
.w ait
Ġsnap shot
il ton
Ġtri es
Ġt ipo
.T ime
> w
Ġmount ain
Ġp ounds
Ġ[ ...
ex ists
Ġng On
_M AP
Ġf lying
xi ety
ĉ value
_D B
un o
Ġse ats
T URN
. author
! )
or ce
Ġindic ated
.s in
Ġass ignment
im iento
ĠF rame
_g en
in ery
_ )
m essages
.set tings
ĠMe an
ĠM useum
ir q
att ach
ĠPalest in
_ QU
_t ags
Ġcas ual
em en
ASS WORD
$ s
ĠC irc
оР¹
et ric
/ P
Ġep och
< head
_C MD
Ġg it
Ġpen alty
or ph
_ users
ours es
.Date Time
atern ion
_pro ject
Ġsuper ior
ĠD am
ĠSe attle
X Y
> The
ĠA k
Ġgr ass
/* čĊ
(d is
Ġgun s
Ġt b
ĠK evin
. args
ĠA h
op ed
( J
column s
arg uments
ĠWith Events
_f ull
ĠDef ense
S imple
Ġdeath s
Ġext ensive
ĠSt ill
ĠEx pression
ĠAg ency
Ġperform ing
F X
Ġus uario
U AL
S ide
od os
apt op
Ġcred entials
_c ap
at ient
ĠDis ney
Ġa i
Ġch ip
Ġvol t
.make Text
%%%%%%%% %%%%%%%%
Ġbelie f
_LO C
ĠC ivil
N avigation
Ġreve al
Ġviol ent
ĠF il
Ġc atalog
em ed
sc an
. control
Ġconstit ution
C ountry
Separ ator
_A PP
top ic
uet ooth
M IN
Ġdes criptor
y t
ET HER
Ġdistrib ute
' }Ċ
.tr im
.L ine
Ġl bl
assert Equals
ĠD et
omb ok
( width
Ġt ort
ĠEXP RESS
ac o
Us ing
ĠBr and
w all
EM ENT
ĠComm unic
< uint
ĠG UI
EG IN
ĠR ange
/ i
ĠT aylor
c ost
Ġrespond ed
ĠTh eme
n ce
IS H
Ġfeat uring
Return s
ĠK r
Ġ .Ċ
Ġn am
_c b
Test ing
Ġ{ },
y al
.f ield
Ġ/ =
_SH ORT
m ates
Test Case
ain less
Ġeval uation
_ ITEM
ĠPac ific
ĉ k
Ġc ant
ĠR os
) s
Ġf et
STR ING
ĠDis pose
g al
ĠJ oin
ĠP orn
ĠCath olic
AR GET
cp u
ç łģ
.sc roll
IS ING
ifest yle
anc ement
Ġm erc
ĠB rowser
eter min
Ġover flow
Av ailable
Ġbott le
: UI
ific ial
Ġco ord
clar ation
Ġcon j
G LOBAL
ok u
Ġk wargs
cond itions
ul um
Ġg enu
ĠH ero
å İ
Ġun expected
ĠDAM AGES
Ġk a
ĠC ould
UP PORT
ĠPh otos
Ġconf ident
Ġdet ected
de g
rg b
Ġstrong ly
Ġ} ;čĊ
Ġ) :
Ġle ct
urs ive
RO L
ĠWe ight
Ġent ertainment
Ġ) );Ċ
Ġg onna
Ġb b
.d o
G S
Ġmist ake
D L
ĠPROVID ED
ear ning
L imit
iss ions
[ v
ä¸ į
ir ty
D el
Ġunder lying
pre ne
Ġj aw
ĠD I
pe er
Ġobject ive
Ġde posit
Ġk on
Ġes p
.set Visibility
/ login
< typename
Ġfr anch
/ e
Par allel
Ġsc ored
ĠH on
ĠV ill
ig a
Ġant icip
_ assert
ĠO pt
Ġdescri bes
w an
m ount
Ġmonitor ing
Ġt out
ëĬ Ķ
}, {
................ ................
= int
Ġc ust
---- --
Ġatmos phere
P AR
ort e
IS IBLE
ĠI ron
ĠNot ification
.log ging
ĠBO OL
-p oint
Ġaf raid
ent a
Ġtom orrow
@ implementation
Ġeng age
ĠAn th
ĠF loor
ĠU l
To ols
Ġb ab
Ġcare ful
ãģ Ħ
Ġcruc ial
Ġcalcul ated
ĠS A
Ġw y
D X
_T AG
ind ed
Ġj et
ĠEngine ering
.M AX
en z
v d
Ġpublic ation
Ġ## #
Ġfac ed
ra ham
ĠC apt
As set
ĠCon stants
Ġlo ans
_ IP
ĠF ish
Red uc
_m at
Date Format
_m e
[] []
Ġintegr ity
ĠC ourse
lob als
Ġfac ilit
Ġem br
ĠN g
.S ystem
Ġmanufact urers
Ġpro ven
.on Create
Ġal arm
ĠÂ §
Ġcomm only
ic os
æĸ °
ĠSt ation
} ).
ĠF ilm
w i
ç ī
Ġeng aged
St ats
Ġgovern ments
Ġafford able
_p roperty
Ġag es
(' --
Ġf ör
ĠProf essor
Ġhy dro
P ush
Ġorgan ized
Ac cept
é m
_c ell
Ġn b
p b
Art icle
Ġrem oval
Ġauth entication
ĠF R
l ide
Ġple asure
ap ol
Ġpart ition
ĠS ide
Ġcr imes
Ġdem o
hold ers
ĠPak istan
In struction
Ġexpect ations
.sc ene
Ġ' )
h es
ino is
_P ro
Ġm olec
and al
_sh ort
Ġdefault s
Ġn ations
in en
Ġr t
O CK
P acket
S B
ĠSH ALL
_cont ents
ise conds
vert y
á t
G uid
n om
Ġcon clusion
. Update
Ġlo vely
Ġem it
b ec
ĉĉĉĉ Ġ
Ġintel lect
Ġb rew
ec ycle
F ire
Ġad mit
Ġar bit
Ġarr ang
ĠM IN
M ail
ĠN ative
C ur
Ġcon vent
.R untime
" }Ċ
.R un
Ġprint ed
Ġconven ient
. ar
m ock
ĠAdmin istration
ãģ ¾
Ġelect ron
fl ate
Ġl ombok
Ġjava fx
n h
Ġsup plies
Ġvisit ing
ah l
Ġpow der
Ġult imate
Ġorient ation
ut as
_s cale
Con firm
ph ones
ĠOper ation
/ T
_IN TER
Ġair port
Ġmet rics
Ġphen omen
a udio
Ġm ai
( K
h u
all ing
rodu ction
ĠTrans port
ĠNOT E
æĸ ĩ
Ġfew er
_T IM
ì §
к и
A ge
F IN
Ġì Ŀ
ĠAt tribute
group s
er k
at to
. define
.AspNet Core
ategor ia
ĠS ir
( form
< User
. round
_d ay
.A ll
Servlet Response
.N o
l arge
IG H
qu ent
Ġvir us
Ġret ro
Ġim per
Bit map
Ġv ice
Ġoff ense
ist e
ĠA UTH
Ġê °
ToolStrip MenuItem
G u
Ġr ape
ĠDav is
Ġover whel
: flutter
- table
ĠCon structor
Pr ivate
e ven
ch r
Ġap plies
_at tribute
Ġcon tribute
E VER
L ines
ĠAf ghan
Vis itor
ĠS L
se ason
C U
Ġintrodu ction
Ġmat plotlib
Å ij
Ġnewsp aper
âĢĶ and
< tag
Ġin i
Ġd iverse
Ignore Case
ĠU r
Ag ent
Ġb ull
.em it
( Exception
ar Layout
Ġincred ibly
ĠTr ust
={ (
- nav
Ġe quals
Ġl ady
ĠP od
d isc
al am
ĠI V
â Ļ
iv idual
ph i
add ed
Ġdifficult y
Ġcomp act
ĠAction Result
c ers
_class es
Non Null
Ġqu it
Ġp ou
S witch
ir s
- test
ĠK ind
ĠCal endar
Ġstream ing
} ',
S W
Ġst ead
oc a
Ġprov ince
Ġcol span
Ġperson nel
ĠE mployee
Ġprodu cer
Ġevery where
od b
Ð Ł
bs olute
act ivate
Ġgr inding
ĠBuild ing
ĠSand ers
(s c
ĠOff set
//////// ////
} ;čĊčĊ
({ "
Ġscan f
ĠY Y
ĉdef er
Ġj ew
Ġrestrict ions
.m p
[ l
ä¸ ĭ
label s
red icate
aw esome
Ġw aves
Ġcon front
Ġmeas ured
Ġdat as
_ex it
ot ton
Ġshould er
ask a
+ #
ĠĠĠĠĠĠĠĠĊ ĠĠĠĠĠĠĠĠĊ
Ġtro ops
ĠU nd
_c ard
w ich
Ġn ous
Ġ"/ "
s b
Ġcommunic ations
Ex port
Ġdec ode
th s
inter pret
By Name
ĠSp irit
ed ges
O LE
ĠE M
t it
ĠTh rough
Ġb io
ĠP ackage
or ne
Ġ} .
` ;Ċ
Ġok ay
ĠZe aland
ident ity
(n ext
ĠB ang
Lib rary
Ġheav ily
il on
Ġdi pl
Ġrot ate
put s
) ',Ċ
ĠData Table
Ġmay or
.to LowerCase
Ġsome how
ĠNor thern
al c
Ġcap abilities
Ġv ibr
+ Ċ
ĠS u
ĠRes et
_m ean
Ġc ig
.cl oud
ĠB and
ĠF actory
ĠAr izona
_ io
op her
Ġconsc ious
ĠÃ ¶
\ Controllers
_s peed
ĠF ac
_C om
ĠB ible
w en
ED IT
Ġun n
ĠSt aff
ĠIn n
Ġmechan ism
ĠM embers
Ġmigration Builder
'] .'
.get Int
< void
ĉf ree
oid s
\ Support
Ġautom atic
Ġch ances
Ð ¶
Ġcomp licated
[ row
ah oo
Ġ}ĊĊ ĊĊ
Model s
W in
Ġt ape
ir us
iz on
on omy
(" _
: .
.st ereotype
( env
_re ct
(w ith
Ġassert That
Ġcon straints
put y
E mployee
T D
Ġgu itar
ĠJew s
.pro cess
Ġf iction
ĠSh ared
âĶĢ âĶĢ
Ġprop ag
.N et
Ġachie ved
ĉ Q
Ġn urs
Sh ared
_FAIL URE
Ġbeh aviour
Ġcol s
ism o
Ġfem in
Ġchalleng ing
Ġpost ing
enc il
Ġcapt ured
ĠD ou
( word
ĠTur key
pan ies
Ġre putation
ORM AL
Ġelig ible
prot ocol
id as
(f rom
Ġfin ance
- per
Ġg otten
H A
d uration
ĠP arent
Ġin vent
Ġre start
ол ÑĮ
r ition
(r s
< bool
i ert
Ġmod ification
ĠT X
readcr umb
b ank
$ /
ĠMill er
] ),Ċ
.Check ed
Ġsac r
se curity
Ġp ose
ĠBr ad
Ġfit ness
Ġannounc ement
ation Token
Ġserv es
ne ed
Ġge ometry
AR S
æ Ģ
andid ate
Ġs prite
_s plit
We ek
ad ies
> (Ċ
?> "
Ġ/// Ċ
Ġein er
Ġweek ly
ĉlog ger
_p op
_m an
Ġmigr ations
Ġask s
Ġb s
Ġfall s
.W here
- height
_fe ature
.M in
Ġhy per
Ġvol atile
Ġtw enty
Typ ography
Un able
D et
, f
-m od
Ġsett lement
Ġcontract s
n ome
B ad
ĠB rian
(user name
!! !!
Ġh ack
.F ield
H R
ĠJ ordan
iz a
ĠÂ ł
ĠSh er
. header
( other
ĠD ub
( op
ĠR ound
Ġv ie
Ġap pl
ĉ J
ĠIn sert
ĠL P
reg on
ĠM PI
Ġan chor
ac a
ø r
Ġa de
anch or
que e
ĠTree Node
Ġtarget ed
Ġla id
AB EL
v et
ĠOr igin
A nt
. ');Ċ
ex pect
ed Reader
ĠM ajor
Ġin ch
Com par
Ġpre view
Ġill ness
ĠCONTR ACT
ĠInd epend
u uid
Ġn ome
Ġt c
ĠA venue
is an
Ġph rase
_m ove
") [
Ġprov ision
Ġconcent r
_ IR
ĠU t
() +
Ġn as
! ,
ĠRob in
i ations
at itude
Ġp x
ĠWith out
/b ash
ek t
re ement
Ob server
ĠReg ion
UBL IC
Ġ{ //
K N
å ·
Game Object
å ¾
enc oding
Ġ** *
project s
Ġt k
Ġche ese
EM PL
ar o
Ġا ÙĦ
Ġcons ists
ref resh
ure au
ĠSc anner
Ġso il
Ġfl avor
Data Source
Ex ecute
ени е
Ġsh it
åĪ Ĩ
< any
Ġretrie ve
Ġbelong s
.st rip
abs olute
Ġexp anded
bo y
): -
Ġresc ue
.J Label
Ġre ly
Ġal ignment
-f amily
Ġre nd
OLUM N
Ġb orrow
Ġqu otes
ĠL ew
Ġsh ower
ĠDE LETE
_lo op
! "ĊĊ
ĉ re
Ġattempt ed
aver age
ĠP aint
quis ition
ol en
Ġliter ature
ĠRe ference
_TEXT URE
ĠS eg
ĠInd ust
ct ype
D UCT
_H OST
ĠTr ade
Ġpl ugins
Ġbre ast
ul se
Ġcreat ure
ãģ Ļ
ĠW i
Ġsup plied
c oll
! ("
Ġfuck ing
ĠCh rome
ĠU ri
ĠN ation
Ġvert ices
T HE
ĠOr iginal
on de
Ġsh arp
Ġcook ing
Ġ{ /*
ĠPs ych
ĠH ollywood
=$ _
.D ock
Ġg er
Ġb one
_con n
_se c
ys ics
Ġ= "
S al
s f
Ġdeep ly
ang les
T erm
b ell
ĠQu ick
ener ation
adio Button
åħ ¥
}čĊčĊ čĊ
Ġcapt ion
l c
ĠE L
, [
ĠĠĠĠĠĠ čĊ
ret t
(m ethod
ĠFl ash
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
W ISE
.s cale
Ġrough ly
_ child
m emory
ay ing
Ġinitial ized
in ator
а ÑĢ
Ġsc alar
ĠH o
ai res
(c olumn
.de stroy
P ACK
Ġh em
ang el
_S UB
. qu
Ġ ×
DE FAULT
pos itories
ĠL ength
ĠF ast
Ġsign als
Ġ// $
ri ers
Ġd ummy
AN Y
Ġperson ality
Ġa gricult
Pl atform
ER O
ĠT ra
Ġen orm
ĉ W
Action Result
Ġa ver
[ str
Ġ' --
.S printf
Ġdeb ut
Ġ Ñĩ
h ex
_ utils
Ġp b
U ITableView
Ġz ur
. encode
Ġv ag
.error s
о н
Ġm r
ĠA ward
Ġc pu
Ġpress ed
' est
ĠF estival
' T
Ġa k
res olve
.m e
Ġn ic
Ġgen re
Ġat trib
ĠMo on
Ġarr ive
ĠD ating
Ġt m
.Config uration
. red
Ġgl m
Ġst ations
sw itch
Ġt ied
äº º
Ġ/ >
Qu antity
quir y
_t ab
Ġal g
To ast
res ize
quest ions
s chema
L iteral
( entity
NE CTION
ch anged
_F IELD
_HE IGHT
Ġorgan ic
P RE
ĠC at
.D raw
E s
Ġl oud
ĠĠĠĠĠĠĠĠ ĉ
ĠK at
Ġhe ap
âĢľ It
et r
Ġun likely
er als
/ auth
t odo
Pl ace
Post ed
Com ments
ĠTe ch
ĠFin ally
eg ration
Ġmin imal
ĠFile s
Ġt amb
ë¡ ľ
ĠRe lease
.res ize
Ġ Ï
col lect
= p
ĠLI ABLE
Ġprodu cing
-w rapper
Ġsing les
ĠN BA
or r
er en
.add Action
Ġthe sis
d n
PT Y
.d es
Ġb acter
ĠEx press
Ġ* )Ċ
å ij
/ admin
second s
åĬ Ł
uss ion
ab eth
ĠCom puter
Ġr uling
(" ../
.G ET
ĠMed al
ition ally
com mit
f ocus
_LE VEL
ind a
F act
= np
=" ">Ċ
Ġsubsequ ent
pos able
-fl uid
Ġth orough
Ġpublic ly
apt ers
ĠWil son
_P RE
y ard
ä ¼
ĉ in
Ġre vers
Ġbul let
cri bed
nes ota
Ġ($ _
ann on
c ursor
Ġclo thing
ĠM ulti
: ',
Ġv ess
ordin ator
Ġein em
C annot
Ġar med
ĉ V
ä¸ Ĭ
.F lat
ĠS ep
ĠSub ject
_f ont
Ġcharacter istics
D one
el n
######## ####
PO S
Ġd ensity
ĠPl atform
- items
Ġo vers
Ġpush ing
ç ¤
.Con nection
_ term
Ġinitial ization
________________ ________________
ç ¬
.d ocument
les h
ĉd ocument
ĠP in
ç a
Ġdefinition s
.P ath
_W RITE
Ġ ĉĊ
? >ĊĊ
Ġter rible
be an
ick ets
ĠS V
B uy
(t ask
Ġreg ime
g oogle
Ġcr ack
.vis it
N UM
ener gy
Ġstr uck
_s ample
.p ayload
Ġre vis
ĠSc ene
Ġp g
Ġbreak fast
URRE NT
.char At
_ex ception
ĠAnt on
Ġguid elines
Ġex haust
ĠFin ancial
Ġind ent
Ġdes ktop
H idden
F ailure
Ġpr inciple
Ġ iv
Ġse ks
n etwork
Ġnumber Of
ĠAl bert
ĉ long
, .
Ġz eros
f ade
ĠT yp
ĠT erm
ĠAr ts
.App lication
Ġbeh alf
æĪ ·
Ġm ere
(` ${
Ġaware ness
elp ers
f lix
Ġwe igh
Ġestim ates
. child
/ O
ĠBit map
.b ottom
Ġ************************************************************************ **
Ex pect
ent o
ĠFor um
ver al
Ġj ail
Ġab ilities
ĠH OLD
ĠC it
Ġd ynam
Ġgr ay
ĉĉĉĉĉĉĉĉ ĉĉĉĉĉ
.next Int
ant ly
ĠAR ISING
( private
Ġreject ed
ĠN ic
Ġle ather
= {Ċ
aly tics
th etic
.T op
.P age
={ `
Ġ ;čĊ
de pth
m ann
W D
ĠS om
.R ight
Ġ) }Ċ
Ġtr ait
à Ĺ
i ac
Ġr v
S ample
.X ml
opp ed
ĠÑ Ħ
list s
Ġt ear
ivers ary
.c ollection
ĠCon stitution
ĠHttp Response
Ġbr ill
ĠP rom
h over
ĠM iami
Ġarg ue
_f loat
Ġ ãĤ
Ġn at
ĠT al
Ġinteg ration
(c ur
Ġrem oving
Ġco eff
ĠTh ough
Ġfore cast
ĠV egas
S ite
Ġtr ab
ĠHen ry
- i
Ġinvol ves
B T
Ġs lo
In voke
Ġl ucky
r at
Ġ? Ċ
Ġhand led
(f d
cont ents
ĠO FF
R F
Ġst y
ĠM otor
ter y
t ax
M AP
ĠMr s
Ġph ones
ĠUI View
")) );Ċ
( dev
ĠIr ish
Ġw s
D I
_OFF SET
ĠEvent s
Ġst ages
Ġ} //
Ġhab en
ST ANCE
ĠS in
ĠM oney
(t op
Ġappoint ment
VER SION
met adata
_com ment
Ġcolle agues
map s
â ĺ
Ċ ĉĊ
( al
_re q
Ġf ut
Ġarchitect ure
ĠWH ETHER
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
_s creen
Ġstyle Urls
Ġmon ster
. up
ph ia
Ġprocess or
ĠT err
= ',
ĠMan ufact
ĠN T
k el
ib ern
ĉf ile
A li
rient ation
Ġ// !
ap ore
ane ous
ĠC reat
f older
Ġh ay
Sup press
( left
Ġe uro
Ġdis claimer
ustr y
sh ips
_f d
ĠF a
_in sert
Ġro l
if ting
ĠCom ments
_b r
Ġloss es
ĠAdd ed
ch arg
Ġп о
_s ystem
ĠS ometimes
ĠSp ain
(g roup
ial is
Ġdoll ar
ĠAr gs
qu ires
ĠT en
.s css
Ġsurv ive
us age
Ġj un
im iter
ï¼ģ ĊĊ
Ġfif th
t oggle
Ġdecl ine
($ "
(L ong
ing e
Ġpil ot
-l ight
-r adius
Ġpod cast
Ġnatur ally
P ages
ä¸ º
ĠDes pite
Ġlight ing
Ġcr ate
ĠB inary
Ġredu cing
Ġe leg
ĠM ouse
ĠTest Bed
Ġbefore Each
_ ARRAY
Red irect
Ġf lood
Ġsh ips
Ġelectric ity
)* (
ê ¸
ĠV iet
her o
Ġd ia
ĠK ent
he art
Ġthreat s
_ acc
Ġs ymbols
is chen
_in st
C riterion
ĠT IM
. Height
Ġ âĢĻ
();ĊĊ Ċ
Product s
_S P
ĠC y
Ġdepend ent
est e
Ġdat os
d it
аР²
IGN AL
Ġless on
"> '
ĠC over
ĠH ope
ĠT imer
Ġd ad
vid ers
ĠPh ot
/ ?
rop y
om ing
as ion
Ġ\ (
ĠE T
ĠRe ading
Ġep isodes
l m
ech a
Ġne uro
Ġhar mon
Ġlib eral
- ind
D ATA
Ġevery day
Ġdiv ided
ĠActive Record
fig ure
U A
ä ¹
riend ly
te ch
.game Object
иÑĤ ÑĮ
Ġmo on
ft ime
Ġno ch
ĠT ORT
ĠV M
.in itial
( child
Ġmus ical
Ġo c
b as
ĠH ay
_l ong
Ġmem set
ile y
adel phia
S V
ro at
_t x
Ġl on
ĠngOn Init
b p
ĠGold en
AC HE
Ġwor ried
az i
E ar
T ake
(f p
bur gh
_ Data
g res
ĠO nt
p us
Ġtrans parent
Ġp ocket
Ġr am
igr ations
. čĊčĊ
Ġ[ (
Ġadopt ed
Ġreported ly
ĠD ream
Ġ} ));Ċ
los ing
Ġte eth
ĠBook s
", &
enn y
LE MENT
Ġg el
ĠPl ant
! âĢĿ
.h ost
ĠRep ly
re ngth
Ġrecogn ition
Ġ}} >Ċ
L A
Ġmir ror
Ġassist ant
( device
Ġspirit ual
b uilder
 §
Ġou tr
Ġt t
ĠP ER
Ġrad ical
Method s
Ġp ace
ud y
Ġg ut
ĠG reek
Ġnon atomic
ĠP aper
_G PIO
Ġob st
.A d
viron ments
ĠS ov
( con
ĠTrans action
. assign
ĉc atch
el ter
Ġbit coin
_G R
Ġ =
_l ang
ìĿ Ħ
B rowser
Ġconsider ation
ĠExec utive
éĹ ´
; \
ĠJSON Object
ĠB ell
Ġspokes man
~~~~ ~~~~
ock ey
ĠG ro
ĠA w
Con straint
ĠPr act
ĠE ver
pr im
: {Ċ
_ im
P N
Mill is
UM ENT
Ġb ags
Ã¥ r
ANN EL
Ġ ic
Ġtransport ation
ĠS audi
h andler
D rag
Ġh d
c ollapse
_P H
Ġ ub
AR M
ĠA PP
Ġton ight
Ġd ining
Rec ogn
Ġb c
ig t
(n umber
Bo ot
Ġelse where
Ġar row
arg a
Ġdel icious
ĠS N
W R
Valid ate
ĠQ uality
( email
Ġinter pre
ig ation
Ġch ocolate
_ edge
Ġstop s
: function
) |
Ġth ai
ĠLo ading
St ory
Tr igger
br anch
Ġt d
entic ated
Ġadvent ure
Ġblock chain
Event Handler
Ġs qrt
.P r
L ng
B ecause
Ġv iv
Ġo cean
ylv ania
а Ñģ
ĠUtil s
Ġdes per
Ġdef er
ĉ require
h l
Re quire
] \
Ġdirection s
_res ource
Ġsubs cribe
ĠÃ º
ĠHe art
est s
-s ub
ĠR h
for Each
Ġdel ight
Ġterr itory
.con current
Ġ( +
j pg
Ġprepar ation
Ġround ed
Com m
.Le ft
Ġopin ions
ĠN avigation
(f irst
", $
Ġh ire
Ġdet ection
.getElement s
Ġe ps
Ġsk learn
Ġc z
Ġ/ >čĊ
met ic
Ġtrans formation
åı ·
Ġr gb
istrib utions
Ġimp licit
/ in
dest ination
аÑĤ ÑĮ
Z ero
Ġun set
. where
.g o
Ġform ation
Ġdeclar ation
() čĊčĊ
ĠEx pl
ĉĉĉ ĠĠ
/ pro
.J SON
Ġdes k
.sub str
//---------------------------------------------------------------- ------------
ly n
p son
dis able
ĠF unc
ĉ Assert
ĠM ARK
Ġdefe at
Ġbl ind
Ġconst ants
. headers
UIL D
Ġexp enses
P ixel
Ġh r
Ġf el
ĠEast ern
_d el
ĠC ub
Ġs q
ĉc ount
ĠD irectory
Ġex clus
Ġhistor ic
Ġ ------------------------------------------------
Ġcom position
Ġdata GridView
ĠB urn
ĠB C
M aster
Ġsp awn
Ġbe aring
.Set Active
il o
Ġg allery
Ġfound ed
Ġav ailability
.s qrt
Ġp es
ĠD OM
m ate
O ct
Ġmatch ed
it ivity
Ġan xiety
.pr ice
ĠIn stant
ì Ĭ
Ġt ut
IC ollection
.sh ared
_s ql
t bl
lib rary
_de stroy
erm al
ĠNot es
ĠE in
Ġsou thern
ĠOTHER WISE
Ġmac ro
.l ower
cl s
Content View
.l ink
const ant
ĠB es
Ġsome body
n b
"> {
( local
.. ...
ĠN ull
m x
ĠÃ §
Ġp ause
-------- ---
_M O
ĠC M
Ġfor Key
ĠD VD
Ġclose st
_DE VICE
ĠSte phen
ĠB BC
ĠTr avel
P aint
ĠResult s
ĠR ule
Ġt p
Ġrat ings
c in
c sv
> /
ĠG OP
l ad
Ġ ÑĢ
Ġindex Path
m atrix
= f
ars ed
Ġ} );
ĠC os
ĠS core
Ġt ak
ĠE SP
ĠIN C
_N ULL
-f lex
"] [
int o
el and
Author ization
_F ALSE
Ġg ate
Ġv id
ist ent
T IME
Ġre write
Ġt ie
Ġarch ive
.event s
.get Parameter
ĠPer mission
Ġprogram me
Ġ é
j ud
Ġcam eras
(s ys
ĠSy rian
Ġimpro vements
Ġh ip
Ġsu icide
Ġsch olar
Ġcompat ible
rem ote
.d own
F UNCTION
Ġman aging
ĠUI Kit
. raw
>> >>
Ġdem ands
ell ite
Ġd ent
ĠM icro
åı ĸ
'] [$
ĠI E
im ension
Ġt rem
Ġg ained
.w ith
. ok
h ou
Ġb om
amp aign
Ġjoin ing
f ish
Ġadd Subview
Ġnor thern
.c or
ore t
D ie
in ish
_com p
Ġatt ended
Ġcoll apse
ĠS S
ac ent
_E QUAL
ĠDe ep
R GB
ĉ test
ol ves
us et
Un ityEngine
w riter
Res olver
, %
if ference
_re move
ond a
Ġfem me
de code
Br anch
Ġfl ush
Ġinnov ative
Test s
Ġ[' ./
Ġcover ing
. admin
ultip art
(l ambda
 namespace
ĠS port
Ġ! (
ac les
Ġde pression
ĠK ong
Ġp ert
ĠCon n
ĠOther wise
/ home
s upported
Ġp ink
Ġinv ited
ñ os
_en abled
Ġ- Ċ
F W
en ers
ĠM Y
Ġsuggest ions
Can vas
Ġf er
ĠMarket ing
@ Test
unt u
ĠV en
ĠC ou
iv als
Don ald
lim ited
ĉĉĉĉĉĉ Ċ
Ġanal yst
( entry
Ġrepresent ative
_at tributes
Ġf ur
.h ide
res p
ado res
rid es
ĠJ osh
ro bot
ĠN AT
Ġs esso
Ġintegr ated
: true
part s
Ġst upid
: event
@end section
Ġp u
.T able
ĠY ii
` ;ĊĊ
Ġcl ang
=" ">
eng an
_param eters
.int ernal
ĠMod ern
Ġmet ric
Ġsem i
={ {Ċ
.am azon
ĠB B
aint y
view port
Ġstart Activity
dis patch
**** *
Ġfl av
iffer ent
[ this
Ġst ake
Ġarg ued
vious ly
.w ork
ĠO ak
O ld
( async
not es
Ġfl ip
Ġdis ag
ĠT E
ĉ error
< '
Ġ» ĊĊ
Ġfilter ed
ĠM ach
Ġh ung
_d ump
_s amples
-dis miss
Ġr ay
Im plemented
D K
Ġj ed
Ġbreak s
Ġf its
. gr
ĠZ ero
or o
Ġequ ally
Ġ' [
Ġconcern ing
< meta
play ers
_P OS
_s im
J an
Ġyour s
ĉ N
Ġsp ir
Ġch ampion
ĠAn alysis
ap a
ĠNS Log
_l ines
ñ a
ĉĉ ĠĠĠĠĠĠĠ
.S c
Re p
etro it
ur able
M IT
com pat
own ed
_ind ices
], čĊ
Ġdis covery
ĠDie go
ob i
. Index
Ġtrend s
PL AY
.n o
Ġl ens
_c fg
Ġan no
ag an
Ġperiod s
ter ms
y z
Ġattack ed
ib ration
PEC IAL
_ grad
Ġaccord ance
.Read Line
.de vice
ri x
. container
m ay
erc ise
ĠL u
Ġr g
ĠÑģ ÑĤ
ĉĉĊ ĉĉĊ
( un
TERN AL
Ġless ons
Ġalleg ations
Ġtrans mission
.Re f
M obile
ĠT ournament
ĠN ut
ĠG a
ĠCap ital
def inition
- exp
c lean
Ġfant asy
Ġenh ance
ent ence
'] :Ċ
ack ets
Ġcelebr ate
@ ",
Serialize Field
Ġarray s
t b
ĉ st
[ assembly
( reg
.c ategory
Ġimpro ving
Ġsal ope
Byte Array
Or iginal
Ġ[ {Ċ
åĽ ŀ
ĠCl in
oen ix
ĠS amsung
Ġmaint ained
Ġag enda
f ail
Ġpres ents
Ġtim ing
.m ark
' ><
Ġprom ot
Ġin cl
_ only
ë¥ ¼
ĠAtt orney
- date
Ġlands cape
Ġf u
S Y
.p rop
ĠA rr
p ag
Parallel Group
': čĊ
Ġlog s
a unch
unc i
n ama
Table Cell
iss ues
. {
ec urity
_ex ec
old s
Ġhost s
Ġpro to
_ import
_s ort
ĠB ow
ĠN ormal
ĠF arm
.create ParallelGroup
R otation
. err
Ġp leased
it age
.W h
ĉĉ ĠĠĠĠ
M R
ĠM ORE
ĠN atural
_ transform
B ASE
ener al
ut down
.common s
W T
Ġa an
. Result
d og
Ġclick ing
), ĊĊ
# line
Oper ator
Ġc iv
Ġm erg
ob uf
ng then
Ġ[ {
Ġcan cell
tr igger
. :
W ORK
decl are
Ġdecre ase
ÅĽ ci
lo om
.N one
ĠM I
ĠJ ason
Ġhealth care
iam ond
s ylvania
* x
ĠR a
[ b
Ġprint ing
ph abet
ĠLab our
op per
Ġz ijn
-t arget
_F UNCTION
Ġo ct
ени Ñı
åľ ¨
Ġwest ern
Ġcomput ers
ĠR ET
Hash Map
[ String
get Value
_D ATE
.N ext
ĠF if
é l
ick ed
æ İ
-M M
Ġ{ ĊĊĊ
Ġcontact s
Ġdig its
Pro du
Ġunus ual
Ġrapid ly
t ures
Ġang ry
c ancel
xx xx
_p arser
id ity
_P REFIX
Ġme hr
Ġrare ly
et he
op es
Ġ% .
work s
Ġthe ta
Ġcontrib ution
ĠT ony
Ġsqu ad
аР¹
Ġî n
th ere
out ed
ĉ q
Ļ Ĥ
g ood
L I
é¡ µ
ĠL iving
iz abeth
Ġk t
ĠD allas
] ],Ċ
Ġ/ >ĊĊ
Ġrais ing
/r outer
_g ame
ĠC UR
z ens
. es
Ġfont Weight
(f unc
not ification
Ġ'../../ ../
Ġbl ame
ãĢĤ ĊĊĊĊ
an co
Id entity
f ollow
Ġart s
x s
Ġofficial ly
ĠSt udio
Ġrecommend ations
Ġloc ale
Ġam ateur
ĠEn able
Ġcap s
. End
- add
_g shared
ĠC T
For ce
Ċ ĠĠĠĠĠĠĠĠĠĠĠĠĊ
Ġor ange
Ġl p
Ġanswer ed
.G rid
Ġd ual
Ġstrateg ic
Ġnob ody
Ġf atal
_ est
( el
Ġì ł
ĠB udd
A IT
_f actor
- one
ĠH AVE
" čĊčĊ
Pro f
Ġä r
str ings
Ġdir ty
ĠF ace
ĠB egin
ĠB us
Ġw is
åŃ Ĺ
Ġspe aker
Ġcar rier
ĠO m
Ġhad n
All ow
:: __
Ġver b
ĠCom plete
ĠE asy
Ġb ills
ĠĠ ĊĊ
Vert ical
Ġpr on
ĠDef ine
Ġlook up
variable s
Ġpand as
um es
Ġinn oc
Ġset Up
ĠCh ampionship
art ist
ĠC Type
F oundation
๠Ī
ĠSet up
Ġrec ipes
ĠU IColor
ĠF ight
Ġauthor ized
_c lick
_s uccess
ang an
ĠMount ain
ĠDo ctor
Ġeg g
ĠMedic ine
c les
` .Ċ
[ int
d ashboard
ĠApp ro
-d r
Ġprodu ces
Ġrent al
Ġre load
Ġarr ival
sp ot
Ġund ert
Ġequ ipped
Ġpro ved
Ġcent ers
Ġdef ines
al so
Ġop acity
ĠUn fortunately
ĠIll inois
Ġн е
ĠTem ple
ĠTr ail
ĠK elly
Ġmeasure ment
Ġsepar ated
-c ircle
H ey
ĠRE AD
ig its
Ġ ib
ĠM OD
atter y
аР·
Ġv end
ен ÑĤ
ĠHttp Client
s afe
_A SS
ic it
ĠCon struct
ĠC lo
ĠS ix
_T OKEN
(b lock
Ġwarn ed
/* !
!
ac ades
Ġm arg
er ase
Ġdispl ays
istr ator
get s
Ġg tk
_G ENER
n ed
_ %
Ġfavour ite
ĠB ru
ĠÃ ¡
second ary
Ġm ast
Ġs oph
ĠSaf ety
h ard
ra ise
ĠEx change
Ġcont emporary
Ġdream s
Ġt el
Ġneighb ors
ĠH oly
.m ean
em it
ĠM ess
C ast
NE CT
pl ugins
Ġr b
w r
Ġh ub
ĠStud ies
Ġposs ession
$ ('.
ens itive
Ġadd Criterion
__ .
Ġexpert ise
Ar ch
Ġc ub
erv ers
Ġpartic les
u ar
Ġbound ary
) ',
aj o
Ġpre f
: `
Ġhar ass
i u
Ġreach ing
Ġme g
Ġz o
( ID
_re quired
Ġs é
ĠQ ueue
A O
Ġg em
pt on
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
ij k
( {čĊ
Ġcoll ision
ĠUkr aine
Ġ-* -Ċ
NS Integer
_B LOCK
ĠText ure
Ġdecl ined
n an
_w ait
Ġpolit icians
Ġco ins
Ġder iv
h elper
ĠPer haps
.re ct
ĠPol y
ab ling
}/ >Ċ
Ġinnov ation
_ "
Ġ );čĊčĊ
Ġsp ots
Ġcho osing
.c s
Ġflex ible
U Int
Ġscr atch
- al
Ġf estival
Ġout standing
================================ ================
M ean
ĠO regon
s ymbol
. account
d ney
'' '
! ",
Ġpart icle
à ĥ
[ MAX
IV ER
ER ENCE
NS Mutable
ĠColum bia
_ ĊĊ
.f r
Ġc ogn
V R
ĠMethod s
ĠM ade
ĠB R
ĠEl se
Ġeg gs
Ġsw ing
ĠIn v
Ġdise ases
Ġf irms
Ġle mma
}` );Ċ
l ings
Ġg ym
umin um
.T rim
M em
Ġcritic ism
ibern ate
_T X
ion i
Ġguid ance
Ġrepeated ly
Ġsup plier
Ġpaint ing
.F ragment
ed Exception
Ġw iring
Ġcour ts
W EB
æľ ī
\ .
ill ance
Ġb rows
ĠP attern
PL ICATION
ĠSum mer
Ch ain
Ġc ute
mer cial
Ġd il
ĠFrank lin
ĉg lobal
IN CLUDING
h istory
Ġl st
Q t
SD L
al ia
i ere
( ...
ĉc in
iff s
vel ope
ĠR oot
cl uster
User Name
ign e
< S
Ġf est
Ġindic ating
ke eper
Ġc ada
é g
cons in
ĠG B
Ġl b
em ony
-icon s
_d oc
Act or
e lem
.De lete
Ġin fection
ĠPriv acy
Ġgreat ly
ĠP os
ĠT reat
Fl ow
Ġattract ive
ĠMar c
s udo
tes y
- an
ab ama
ĠW ould
Ġsu ck
index Path
ĠE t
T imes
Ġclub s
_ass oc
Ġac quired
(" :
Ġint ense
.m aps
Ex pected
T oggle
Ġa y
Ġl ifestyle
-c alled
ĠS now
V olume
Ġcann abis
ĠD irection
ĠLim ited
-s pecific
Ġd owntown
/ icons
Ġre ven
L eg
= null
Key board
') ).
Ġ"" ;čĊ
Ġatt itude
.n avigate
- error
AM PLE
ĠJ ay
v r
c ow
.com pile
Ġmem ories
_m ark
ĠMin nesota
Ġk osten
Ġprob ability
w arning
Ġgen etic
F ixture
ĠHash Set
N ombre
_m onth
Æ °
- start
xy gen
ĉ ft
i agnostics
ĠMat thew
Ġconcept s
Ġcon str
. State
и н
N ov
Î ±
ĠP anel
ä¸ ª
com pare
> ()Ċ
Ġapply ing
Ġprom ised
Ġo x
nc ia
ĠValid ation
ort s
_c ur
e lect
ey e
( Data
Ġreport er
ĠB uff
Ġs r
Ġ" ;
ick y
Ġtemp or
S N
Ġres ident
pi res
ys ical
Ġend orse
ĠS ong
is Empty
le et
_ util
Ġdist ingu
ĠT alk
ĠM ot
( default
.A rg
gorith ms
_ words
im mer
_res et
f amily
W W
Ġsav ings
ĠâĢ Ŀ
_en able
side bar
Run ning
Ġal i
Ġtest im
Ġwarn ings
ĠCh em
ĠEx it
Ġfound er
pect or
Ġr m
_d ataset
ĠD as
Ġh an
Get ty
á l
Ġn y
Ġpo verty
Ġresult ed
.b y
ĠVis it
Ġobt aining
/ '.$
ĠĠĠĠĠĠĠĠĠĠĠ Ċ
sh all
_LE FT
UI Image
_ Name
h ave
ĠN ob
l r
- footer
Ġn aked
ĠG arden
\F acades
Ġgrad uate
Ġfranch ise
pl ane
Ġcontrib utions
Ġstring With
Ġc rypto
Ġmov ements
ath ers
Ġlif etime
Ġcommunic ate
j ar
ĠFr agment
_ IF
ĠN avy
ĠF igure
Ġsim ulation
_st op
Ġreport ers
Ġvers us
aj a
ĠÎ ±
Ġgovern or
List Item
Ġse aled
.Back ground
ed i
ash ing
Ġl ip
ĠI h
mer ge
Ġn ec
el ocity
ATE G
Ġse eds
Ġflo ating
_F A
w alk
ĉ user
_de pth
Ġw age
@ app
N il
( ["
( vector
Ġsecret ary
Ġj Panel
ve z
³³ ³³
d irection
ĠE P
Ġh unt
Json Property
ĠP ORT
] ",
аР¿
ĠFore ign
pan ic
Ġtri als
ĠA le
Ġr ural
- value
author ized
ĠScot land
.d rop
ĠM T
ç ±
row th
File Path
Ġrec all
if le
Ġc el
ĠSE LECT
k n
_c ase
Ġc rop
s ure
p ot
IC S
Ġst em
Ġindust ries
P ut
Ġa ber
road cast
Icon s
) ")Ċ
æĪIJ åĬŁ
g ui
Ġassum ed
Ġr x
E A
è §
EL L
Ġdo se
Ġin e
Ġde eper
l ider
Ġord inary
Ġg olf
_IM AGE
ĠN AME
(m odule
Ġat om
Ġbel t
Ġoff ices
b eta
Ġphilosoph y
( JSON
-f ield
Ġintrodu ce
Ġconven ience
opt im
> "Ċ
ath y
Ġemploy er
qu ate
Ġed ited
Arg uments
ĠN ations
__ )
Ġno se
ĠS ample
' )ĊĊĊ
Ġc ake
.get Attribute
H D
Mod ified
Ġpredict ed
Å Ħ
an ie
S orry
(d oc
w ind
ie ve
Ġprov isions
AT ER
OT E
M Y
.A utowired
ĠB ath
. Boolean
Ġback end
.M ouse
ater al
p aper
Con st
ĠV R
_ entity
_C TRL
ĠProte ction
ĠG M
ĠStud y
Ġsou p
ot ime
' use
] "
/ users
a ug
ĠH ong
_n orm
ãģ ¨
Ġse cre
(B uild
ĠCon tract
ol as
Ġsa uce
Ġaggress ive
Ġrac ial
char acter
@ @
Ġcomp ile
ĠV oid
_re m
_m emory
k k
Ġm ic
S ame
U tility
ĠH tml
ĠX ml
Read y
Ġg all
Ġalleged ly
ĉĉĉĉ ĠĠĠ
ĠMet al
ĠPerson al
Ġborder Radius
rx js
object s
Ġwant ing
Ġb owl
v endor
offset of
ĠR s
ĠR ating
Ġr ally
_N ODE
ĠM ix
Ġadvert is
Ġnarr ative
s al
Ġm c
SE rror
Ġf ingers
Ġaccom pany
Ġt ired
Ġstr ide
Ġgu i
el ist
Loc ale
Ġrele ases
ik ing
Ġan ger
)) )ĊĊ
alle st
Sum mary
( O
(f or
Ġbasket ball
Ġroad s
ĠInst all
ĠF ab
it map
Ġ) )Ċ
Ġinter section
ighb or
ĠB ry
ĠHER E
So ftware
elf are
ac s
Ġtrail er
.get Class
ch ars
Ġreg ulation
Ġref ers
Ġde struction
Ġcontin uous
ĠAust in
é ¢
ak an
.w indow
ĠTem plates
Ġabs ence
: n
Ġdis order
fl ash
Ġde let
bo ards
ĠĠ ĉ
RO P
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
Ġac qu
Ġlaws uit
ĠRe views
Ġgar age
t imer
Ġe j
ĠRect angle
Ġflow ers
il st
ĠIn stance
S uper
d et
dis posing
ĠE S
ĠI C
ver e
S k
_ch annels
put ed
/ null
nn en
ĠG allery
_g lobal
Auth entication
ĠR ank
Ġblock ed
Ġcal m
mark et
ĉ val
Ġa ug
per iod
ĠCon stant
Ġ?> ">Ċ
Ġl obby
p al
Ġs ink
ia h
Ð ¡
urn ame
Ġcon ver
Ġinvestig ate
Ch rist
H ub
ĠIN D
ĠP ed
ur as
ĉ url
ĠT ro
Ġpre ferences
Ġguarante ed
` ĊĊ
Ġport ions
Ġeval u
' >
() {ĊĊ
enc oded
z illa
.C lass
Ġ* _
_ '
Ġview ed
ĠPhil adelphia
. rows
Add ed
ĠT ouch
.de legate
quee ze
sl ide
ĠSen ior
(t ag
Ġinter views
Ġsu a
at as
@ ĊĊ
d istance
Ġse in
late st
ĠPr ince
Ġlux ury
Ġre fr
ĠK itchen
Ñ Ħ
( at
F inal
ü ck
_z ero
ĠA BC
ĠMan chester
Ġc ow
C OL
_NUM BER
ch anges
gener ate
.Print f
sh are
St ock
ĠP T
An im
ang a
Ġ ig
upload s
Ġpack ed
Ġ} ];Ċ
(s ender
ĠW ire
is ons
Ġplay off
\ E
/ R
Ġhead ed
Al pha
( order
Ġoppon ents
ack son
_m ember
T urn
ĠSov iet
ìĹ IJ
au ge
Ġin coming
Ġj ak
-g ame
ĠM ale
ĠMon th
St age
.ex e
Own Property
.set Item
Ġd c
ä½ ľ
Ġbr ut
Ġattempt ing
.l en
Ġjud gment
Ġs ab
Ġc ad
ĠItem s
com fort
el ize
/ log
Ġentre prene
Ġcomp iler
_valid ation
re view
Ġtext Box
Ġfra ction
ĠB al
> ;ĊĊ
.AutoScale Mode
Ġc ats
Ġreg istry
ul us
F I
p ayload
- search
Ġstay ing
ac ious
Dec oration
Re view
In f
Ke ep
it is
, String
Co ord
Ġper o
S ex
ĠAtl anta
uest a
Arg b
> *
} _
F ooter
Ġemploy ed
_b ound
v ide
.f unc
$ scope
Ġsp o
ĠAn al
ounc ed
ar ound
Ġrestr iction
Ġsh ops
å Ģ
ĠLat in
-c ol
Ġbare ly
ĠE uro
E r
Ġfa ire
_d istance
_un lock
Qu ote
IV ATE
Ġå Ī
Ġaim ed
ĠRet rie
. iter
Ġwr apped
Ġagre ements
str ument
( product
Ġstud ied
.set Value
Ġy e
ĠC ache
MB OL
Ġquarter back
Ġsy ntax
.getElements By
.v ersion
we bsite
Run ner
_s ingle
at iv
ĠAl tern
ĠBeaut iful
right arrow
Ġd iversity
pl ash
( co
.F ill
Ġtyp ing
Ġcl ar
H it
O O
ac co
w orth
Ġscript s
ĠMuslim s
ĠL L
erv ing
( boolean
Ġbase ball
ĠC AN
MA IL
de pend
Ġrespect ive
Ġconst expr
.* ;ĊĊ
'] ))Ċ
Ġy ard
Ġident ical
if ecycle
US H
up iter
. validate
cl i
IST ER
Ind icator
F ail
Ġdemocr acy
. var
Ġsatisf ied
------------ -
enc er
h or
Ġr ounds
DA O
o a
Ġfl ask
= c
[ ]Ċ
/d ist
Ġpart e
Ġconfirm ation
er on
aw are
>
Ġdepend encies
ĠV ideos
- row
Ġ** /Ċ
Ġn ou
Ġh over
æ ŀ
Ġn in
ĠUS D
M ac
_L oad
Ġout comes
_s ocket
Ġqu eries
w m
Ġhit ting
in ux
M ich
ud ge
AT AB
Ġvulner able
ä ¾
Ġport folio
: YES
ĉm ap
B ound
Ġiter ation
in cess
Ġact ors
ĠQ ual
_c lean
ãĢij ãĢIJ
MS G
G reen
ĠOff icer
Ġsm oking
> ',
ĠF lo
++ ;
oly gon
Ġbul k
Ġdr ama
Ġexception s
os ed
Ġ+ čĊ
Ġleg acy
C V
Ġcontrib uted
ĠTer ms
Ġb t
Ġunt uk
Ġal ien
=== Ċ
ĉ Vector
Ġl s
On line
.f acebook
num eric
ock ets
A ut
b ury
-re dux
ĠRed istributions
GLOBAL S
urrenc ies
Ġt ons
âĢĻ ,
ĠÃ ª
(c ol
ĠS ymbol
Ġstay ed
ĠM L
Ġm unicip
Ġsex o
S en
n r
Ġg ains
Ġshort ly
.M enu
à ½
KN OWN
Ġoper ators
- V
ĠPat rick
/ add
_C O
ir ation
(p ost
Post s
/ _
Ġpl ug
Ġintellect ual
Ġmet ab
Ġpregn ancy
ĠPrem ier
n m
Ġpred iction
ĠMin istry
Th ree
val uate
ĠMin i
b u
оР·
< ul
Ġd d
ol ving
ĠC ut
Ġs chem
.tr ain
it ate
Ġr ice
Ġbird s
ãģ «
m iddle
struction s
Ġn erv
a que
Ġfl u
Ġsurv ival
ĠGal axy
ĠF ant
. Order
At trib
irt s
é c
M ovie
Ġcon ce
qu arters
Ġm ood
.Add Range
Ġres olved
ãĥ Ī
Ġburn ing
ĉĉĉĉ čĊ
ĠW E
Ġhost ing
L AB
Ġman agers
Ġstre ngthen
< const
ĠFire base
on ed
ĠJ ean
'
Ġ:= Ċ
al gorithm
ĠA rc
Ġfro zen
_event s
Ġover se
g oods
Ġf ait
Ġvi agra
os es
Ġcomp iled
ĠA th
Ġsub stance
an imated
P F
pre vious
Ġro ots
(f ilter
olum es
Ġint ro
(e vt
ĠB ag
ĠDef inition
ĠFe atures
An notation
Ġav g
(s um
QUI RE
Ġrender er
ĠF ix
.dat etime
= device
S pe
get Instance
Ġext ensions
_n et
ĠPar liament
Ġcom ic
ĠP ick
ar ma
ĉm odel
Ġ --------------------------------
Ġm eng
man ual
ad apter
} -
ed back
Ġelect rical
ĠCount er
Application Context
_by te
( byte
ĠAut om
Ġterror ist
ç IJ
th rough
Ġf iscal
on ing
Ġspect rum
Ġbit map
Ġs le
pro d
Ġag ed
Ġb ene
ĠS pi
Ġbrill iant
Ġst ability
Ġdi abetes
Ġconfig ured
b one
ous es
.google apis
F ACE
Ġinspir ation
ĠD etroit
en ch
ÑĢ Ñĥ
veh icle
St ation
Ġh oles
Ġd urch
.M edia
ĠC NN
in ning
ĠPenn sylvania
Ġem otion
Sec ret
á rio
ĠR ate
Dep th
Ġmod es
(id x
Ġh es
Ġgre y
St andard
Q uest
b uy
s ur
ĠTr ack
om m
.g l
Ġ( \
t wo
_ IO
ose x
_ role
ç¤ º
r outes
Sh op
ĠA SC
Ġmem cpy
d irect
Ġ* ĊĊ
ĠB M
ĠP or
_h istory
ĠResponse Entity
.set Font
Ġeng agement
, h
ĠWord Press
fe cha
Ġentr ance
Des pite
ID ENT
Ġsan it
ĠGener ate
(" ",
_v ideo
Str ategy
_ ok
Ġt ies
Ġlog ical
ĠB ron
( File
ĠM oh
.S plit
.T ry
ĠH ind
Ġsc oring
Ġapproach es
Ġfl our
V RT
UST OM
script s
ĠEp isode
ĠA mb
_ OR
Ġfra uen
Ġun like
Ġr iding
Ġp it
Ġtrans f
art e
๠ī
ra pe
ret val
_a fter
" <<
ĠBer lin
Ġt issue
.Int ent
Ġд лÑı
Ġst unning
ĠH al
. Integer
Ġwhere as
Ġde leg
Ġuser Name
Ġform ats
Ġcompens ation
ĠH um
arr ing
Ġuns afe
P in
cl ub
key word
_th eme
Ġcall er
Ġg host
Ġent itled
ĠM as
Ġdemonstr ate
ĠHow ard
D rop
# undef
Ġinv oke
ĠB ridge
end en
ib ling
Sl ot
ATAB ASE
Ġtemper atures
ser ies
ĠRem ember
Cal endar
B F
= ?
ĠA F
( http
m akers
fin ity
prec ated
W H
olid ays
- un
ia le
\ User
re ason
', ĊĊ
OW ER
Ġpredict ions
pro b
.n n
Ġ' ;Ċ
.From Argb
_L ONG
Ġtr oub
Ġun ittest
eli hood
ĉ is
Ġcon sec
LE ASE
Ġclick ed
Ġtem plates
B Y
per m
match es
l aw
(t f
_r atio
item pty
Ġcre ator
B its
Enc oder
* .
ĠU IT
ĠM ask
c url
-g o
ĠO cc
cor rect
ĠG er
(l ayout
un ct
.dis patch
; amp
.is Required
ĉd o
m ir
Ġp thread
- auto
ĠI ce
Ġviol ation
Ġcon cluded
Ġvar s
can vas
ĠT emp
ĠPhil ipp
Ī ëĭ¤
cre ase
Ġfish ing
ab bit
Ġconcent ration
irth day
Ġg ross
Ġk i
ĠH andler
Ġimmigr ants
è Ģ
U nd
p n
r ac
ĠCons ult
f old
Ġstrugg ling
he at
G eneric
Ġrid ic
ĠCO VID
om itempty
_O PTION
ê° Ģ
Ġcreat ures
_P AGE
e i
(h ost
_H PP
ĠX XX
Ġaw k
asc ade
Ġpre g
pro vider
P al
eg en
cl one
.Reg ister
Ġatt achment
be it
the less
( Date
ĠFore st
CG Rect
Ġchild hood
am ine
ax es
'] =
N avigator
Ġre plied
_in v
, T
ĠFe ature
{ -
L ANG
Ġcon vey
ç͍ æĪ·
ĠSer if
ĠA us
lic he
Ġun used
Ġm ont
n odes
Ġse u
.class Name
n orm
_S ERVER
Ġw ing
in x
R aw
ĠJ am
Ġins ight
ĠN G
ĠInter face
Ġst mt
Ġn an
cul ator
- app
(B undle
Message Box
à ®
Ġme ets
ub y
Option Pane
it arian
Ġcollabor ation
m ovie
Ġarm or
_b its
ĠH aving
Ġn ude
ĠSet ting
Ġsu cc
D elay
.com ponents
ach uset
ĠAlex ander
 ©
Ġmet ers
Ġprepar ing
Ġin cent
å ĵ
Ġkö nnen
ĠCons erv
Ġnum ero
achuset ts
- int
Ġemph as
layout s
Ex cel
IB Action
Ġres idential
el ing
ĠN C
ĠAll en
Ġc ette
Ġmind s
.re quired
Ø ³
ĠGirl s
Ġ} ;
ĠstringWith Format
Ġaddress ed
th ey
ĠB lood
pos er
Ġj am
È Ļ
æķ° æį®
Ġstd out
ĠU TF
Class es
> ";čĊ
ĠS av
.B old
Ġen ables
ĉt mp
Ġman ually
ĠS qu
user id
.f unction
.c ache
LO PT
.S ervices
dd it
t im
< img
ĠTh ings
ĠEvery thing
Ġa pt
em and
Ġroll ing
ë ¦
. level
Ġst om
ĠW inter
Ġview ing
( values
ocom plete
v ia
up o
Ġabort ion
i ère
ï¼ ij
_B UTTON
_d omain
Ġb ra
ĠA st
in as
Ġstat ist
c od
L R
Ġdr ives
Ġfollow ers
Ġall ies
ĉc urrent
ecess ary
Ġdam aged
_ pt
and les
oun tries
Ġsim ult
e u
Ġcontrovers ial
_G ROUP
Ġr ib
. Info
: mm
.n ormal
_ADD RESS
Ġ íķ
add le
ĠD ur
. Element
W arnings
Ġcred its
Ġin hib
Ġem issions
Ġh az
.y outube
ugg ed
Ġbo ther
ĠK ansas
ĠF ixed
ĠTest s
ĠF IX
Un iform
Ġk ont
>> >
st ation
lo re
at ype
ish op
/ ****************************************************************
Com boBox
Ġvac ation
Ġiniti ative
Ġdefault Value
con cat
ĠK h
ĠW elcome
ized Name
M igration
Ġgrad ient
H ot
Ġhard ly
el o
ĠStud ents
Ġlo ose
at z
.S end
' /
Ġunivers al
Ġenter prise
Ġreg ex
Ġvis itor
ĠF ly
Se q
ภĻ
ĠVis ual
Ġlib raries
ato es
P ayment
Ġp ent
Ġgather ed
VRT X
ĠD M
S plit
Ġlet ting
Ð Ŀ
_error s
ep och
P ARAM
c u
ÑģÑĤ в
ol utions
Edit ing
font s
Ġalloc ated
ĠB ased
( Y
ĠJud ge
Ġbro thers
FILE S
ç o
w b
_P I
' ^
Ġs word
.s ervices
Ġn l
T im
ig g
ĠMo ore
Ġcrypt oc
åĩ º
_post s
ot ate
? '
... .ĊĊ
Ġk l
=" $
Ġdec oration
Ạ¡
ĠD IRECT
G UI
) =>{Ċ
Ġnews letter
Ġprec is
(p oint
ĠEqu ipment
ut y
ĠD ave
Ġparticip ation
u arios
x it
.A s
ET ER
or ous
Ġsh ield
[] >
ilit ary
. origin
Ġprom otion
U nt
Ġc t
TR A
View Holder
Ġsig ma
d elta
are house
con tract
( Vector
Ġcompet e
/ form
/ components
Ġn r
ĠInd ones
Ġо ÑĤ
ĠV olume
.f iles
(res p
/ models
Ġsur f
stand ard
/ o
ĠXCT Assert
V ICES
.C ode
SE D
Ġact ivate
D elta
Ġlimit ation
ri j
Ġpregn ant
: ^(
Ġs our
p ie
Ġexp ense
ic ation
ĠL arge
ĠÂ ±
ĠB owl
(model s
/ N
P a
.re load
Ġwonder ing
Exec ution
ĉ ĠĠĠĠĠĠ
ĠG raphics
ĠCont in
_j ob
Ġget Name
ĠM agn
ĠD WORD
m ad
Ġn h
fe atures
} ");Ċ
he ets
(tr ain
z n
Ġrecru it
.con nection
Ġbar rel
Ġste am
_set ting
Ġang ular
ane ously
Ġb il
ĠN orm
(! $
ib t
% (
Ġpos it
ĠF ather
int endo
L ive
Ġport s
Ġme j
Ġland ing
pon der
Ġc od
_HE ADER
.M argin
Ġball s
Ġdiscuss ions
Ġbl end
H ex
Ġfarm ers
Ġmaint aining
ĠĠĠ čĊ
s yn
[ T
r us
uff ers
Ġcontrib utors
_s ys
.De bug
Ġconstruct ed
om es
? id
sl ider
Ġsup pliers
scri ber
p es
Ð ŀ
": čĊ
\ Controller
)) ĊĊĊ
Ġl ua
M ulti
EN S
S rc
Ġpet ition
Ġsl ave
look ing
V ERT
ĉ vector
S pecial
h h
an ne
ĠN iger
/ views
z ing
end ant
< C
s peed
Ġ{ };ĊĊ
Begin Init
Ġf open
@ RequestMapping
End Init
Ġp unch
S ender
é Ķ
get Message
/t ypes
.P I
(' ');Ċ
oc used
( all
Ġdrop down
). __
ĠV in
.Fore ignKey
can f
ou red
ĠOrgan ization
ĠÐ °
ĠC ulture
(cl s
, _
rg ba
ìĿ ĺ
.data GridView
Ġdo zen
ĠG es
_sh ared
n ick
Ġh osp
om eter
Ġclaim ing
ib les
ri k
æĺ ¯
en ario
Ġd engan
ob b
m ont
_r ank
('/ ',
Ġap olog
P s
_p ower
ĠG ree
Ġful fill
Ġfire base
Ġf are
ĠH im
Ġbe an
â̦ .
ĠS PI
_R X
Ġper ception
rel ative
comp ile
u um
ut os
a uc
ĠAs k
Ġindic ator
/ th
.set String
ĠWis consin
.D omain
Ġart ificial
De velop
ĠSar ah
Ġl ying
( search
ĠEmp ire
urr ing
æĹ¶ éĹ´
=" ${
Ġget Id
ĠP ayment
trans ition
Ġ ].
ix in
V T
- select
Ġdemonstr ated
Ġlast Name
employ ment
.get Property
Ġf ought
file Name
ĠP ers
-c ard
a str
attr s
Ġprom inent
Des ign
anc ouver
ãģĹ ãģ
ard o
se cret
Ġr ag
Ġpo ison
-m an
, omitempty
ĉ un
it zer
ĠCas ino
ĠR oss
- foot
(result s
Pl an
Ġlas er
ê¸ °
_D R
F acebook
Ġbo ards
st a
] ],
Ġt iles
S IZE
Ġ= ~
Ġprem ier
oc ab
Ġenc oded
Ġres erve
ĠAfghan istan
ĠList Node
url s
Ġsub mission
Ġne u
Ġ# +#
_P OST
Ġmo ist
ell i
ellig ent
. alert
ó d
b re
ĠCol lect
Ġgraph ic
Ġlong itude
ĠPro vid
ĠCal culate
x ffff
c riteria
Ġw aters
ro ck
lo quent
ĠT rib
Ġbur st
Ġsuff ix
.Ext ensions
ish es
iv el
ĠLI KE
ĠGet ty
.Action Event
.s lf
ĠH AL
up al
E AR
ud i
_time out
U F
ĠSing apore
ĠAd vent
_int erval
cha ft
ĠE mer
Ġtele phone
ĠTur k
_ interface
ĠO wn
Ġencour aged
< Object
_T ext
ĠOnt ario
ĠApp ly
.f irebase
Ġant ib
P riority
ene z
D ays
c id
urre nce
; /
inn ed
Ñģ Ñı
Ġve z
f w
// $
att ack
Ġstart up
ain ers
.f ragment
op acity
( conn
he im
.n etwork
( stream
ĠN ON
t ol
ĠX box
ĠD S
Ġc ached
Ġprostit utas
ĠB alt
(' [
Ġno except
" '
Ġs d
. valid
_ ag
Ġr aces
Ġro d
itud es
< >(
.Pro duct
Form s
NE W
P ay
ĉ boolean
_ contact
ĠElect ric
sk ip
Ġw ur
Ġch ronic
_d river
ĠS ab
ĠU lt
ĠR ad
ST ATUS
ĠLew is
O B
Ġgift s
.Re c
TR UE
Ġint ensity
Mark er
.com pare
ff ic
C ookie
ĠB aby
ĠBig Decimal
ile t
ĠHOLD ERS
ĠL ady
Ġl ung
ĠAl abama
Ġd ess
` );Ċ
ĠB uilder
_reg ion
Ġne utral
Bo th
Ġh p
Ġh orn
Ġseg ments
ĠE C
"=> "
( rec
ĠP i
G M
Ġl aptop
Sc alar
is d
-d ialog
ĠAnd erson
Ġmist akes
ĠH an
j es
est ination
Ġprom ises
b id
ĠSc ient
G IN
ĠPer formance
b age
. users
le ading
Ġor al
G raphics
_P TR
h ang
Ġin ev
process ing
F actor
ĠN A
$ string
Ġground s
.Save Changes
c lock
cri pcion
ĠNew ton
g c
.in cludes
Ġbl ast
Ġ'- '
Ġpued e
.S ession
Ġgre p
_f inal
ĠG ay
ĠG ive
ir i
-st ar
ĠUI Image
_ep och
ub b
ent h
Ġel ite
Ġcampaign s
ĠP orno
_ assign
Prot ocol
ĠBe ing
ĠAir port
Ġconvent ional
ĠW at
ĠC I
ET A
ĠAnth ony
Ġtable t
( format
Ġconsist ently
ĠI owa
Ġav atar
.c ursor
! [
Ġh anging
H er
S uch
';ĊĊ Ċ
orge ous
() ==
Ġview Model
Ġ ãĥ
Ġel s
ĠAg ent
F etch
ap or
Ġc x
p read
ĠP ier
oe ff
S n
ĠV irtual
A pr
.Wh ite
_M OD
ĠPoint s
å¤ ±
Ġgen es
Ġv endor
Ġmain stream
< src
ĠEl izabeth
Dec oder
- state
ĠG lass
nc y
adi ans
_m on
ĠRem ote
Ġwire less
ĠM i
å ī
è¡ ¨
st age
ĠT ile
ll ib
V ariant
== Ċ
Ġgold en
(Q String
.put Extra
ĠD om
ĠAn imation
Ġinter active
if act
éĻ ¤
LE T
Ġfrequ ent
Ġ< >Ċ
F ilename
Ġs ne
ĠFoot ball
Ġr ival
Ġdis aster
ion ic
ĠD amage
. Resource
- en
ĠT ypes
get String
( board
Ġb ol
pl ain
z ym
ภ²
Ġsc anner
ild er
_msg s
æ ı
(int ent
Ġde struct
Ġb ust
ĠE mploy
on i
ĠUI ViewController
Ġodd s
ear er
Ge ometry
Ġy ii
_EX PORT
ĠAtt ack
Ġn iet
Ġim pression
ĠG il
_pro b
ĠC F
ĠEx perience
/pl ugins
.M ethod
Ġbelie fs
N ative
_b uild
Ġv ig
Ġr anks
cover ed
s uch
G uard
.p ack
add er
iv ia
l ng
Ġв Ñĭ
T imestamp
_n ow
Ġp oker
Ġun c
Ġsh apes
-t ypes
_per iod
p k
Ġveter an
Ġson o
Ġappoint ed
over flow
.d river
_c at
ut t
pl ant
im b
ĠAc cept
Ġconc ert
ĉ node
ĉ z
? >čĊ
Ġb anned
ĉ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
Ġto xic
Ġdisap pe
È Ľ
Ġgr ace
ate ful
Re ply
ĠCru z
Ġsc rap
Ġkey words
s imp
Ġmort gage
Ġcy ber
ĠEx ecute
Ġlat itude
if u
.C OM
d bo
Ġsort s
ĠG as
om ial
.L ocal
Cell s
.Re place
String s
.f it
ĠTh ird
% ",Ċ
Ġ{} ".
ĠS ony
Ġ[ :
Ġfall en
. ')Ċ
in h
ĠM C
Ġred is
C odes
Ġprofile s
h ook
Reduc er
_F UNC
Ġn avigate
str len
Ġh orm
á ŀ
ĠS R
. boot
Ġdig est
ĉ header
.find One
æ ģ
Db Type
n ia
_m erge
Ġdon ne
/ Getty
_CH AR
Ġb ands
. URL
art ial
Ġf req
Ġs ist
N g
Ġrender ing
\ Core
Widget s
ĠV A
Ġactiv ists
St e
= _
all a
St amp
Ġload s
Ġx x
ĠL earning
.M vc
u ir
(" $
Ġconnect ing
Read Only
ur u
ĠE ag
B IT
_DE L
å §
arr ass
ext ernal
ĠY OUR
ĠB rew
ĠF ive
Ġres ize
ig id
er ation
ĠÑ į
åĬ ł
ĠC atch
Ù ģ
ĠLe on
am il
.B ody
Cl ip
/ list
.b r
Edit Text
ĉ db
.G ame
(Build Context
back end
.R ed
face book
.url s
m r
rol led
---- ---
Ġinter vention
Ġretire ment
ĠK it
ĠP RE
Upper Case
ĠS ocket
Ġ: -
Ġstudy ing
ĠMet ro
ard ed
Ġconvers ations
C alled
Ġexam ine
ert ificate
.g z
-res ponsive
Ġref und
_n etwork
allow ed
em pt
Ġme als
C ategories
Ġtravel ing
Ġk g
Ġsh ame
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
Ġexplicit ly
Ġmath ematic
ĠS uite
ĠR GB
****** /
Ġmix ture
lear ning
.t emplate
att s
w x
ĉ ctx
.p roperties
Ġdrink s
ĠE ither
set Text
.get Data
.z ip
Ġreve als
< table
.Hash Map
ĠH ur
) ");Ċ
.f ramework
ĠST ART
feed back
Ġsaf ely
. icon
config ure
. lock
.l ayers
/> .Ċ
Ġrank ed
_ impl
ĠHand les
Ġhost ed
Ġup dating
al bum
é Ŀ
Ġsh ader
Edit ors
- round
[] {
Ġse p
ĠH i
TE M
look up
.m an
_IN PUT
Ġthreat ened
_IM PORT
Ġd rops
ru it
s id
bo th
ĠEx cel
Ġj er
ord inary
еР¹
V IEW
re ply
Ġ) :Ċ
color s
ver ified
_T r
_p arse
Ġcon gress
P romise
int s
ĠM other
.A pi
ĠD uration
Ġfirst Name
inherit doc
ĠM ars
Ġa pr
OD Y
Ġvis its
Ġhe aling
let ters
)) );čĊ
f uture
.F ramework
Ġk iss
Ġinv olve
Ġsil ent
ad ows
Ġany body
s ch
Ġsole ly
- img
Ġprop ri
Ġin struct
Ġlic enses
Ġm eth
Ġcond em
ĠD omain
ĠHarr is
Ġs Ã¥
CE PT
B atch
@ extends
ĠCONTR IBUT
.Data Frame
_p acket
rec ision
Ġfoc using
. ht
__ ":Ċ
: Get
ĠK C
Ġpass age
Seg ment
_c enter
-z A
_B L
Ġconv in
Ġclass ified
ĠNS Mutable
_ ap
t ile
Rect angle
(n ums
v ens
ĠUI Button
ĠF eder
am o
Ġout line
ĠPar ser
Ġâ ī
ĠWork s
.S chema
Ġeng ines
_com mon
_ old
Ġset ContentView
Ġ/// <
ĠB T
f m
Ġd ivers
_ weights
em ark
ĠA CT
Ġpro portion
over lay
.dir name
ĠG it
_REF ERENCE
< >
l b
_r ule
è´ ¥
ĠPut in
Ġsleep ing
() :čĊ
Ġpres erve
Ġpar liament
ĠLook ing
Ġpick ing
ĠDis patch
Ġsl ip
ë ĵ
ĠL yn
_sign al
config uration
ĠP itt
ad en
pro cedure
Ġenthus i
f ight
ĠCons ider
Ġt orn
Conn ected
.c os
_group s
ĠTh ink
Ġdel iber
Ġres id
work ing
.column s
ĠCal led
Ġes lint
> ",
_D OWN
h ist
ĠAdv anced
Ġre wards
act ors
Ġsil ence
Ġmy th
Ġne ur
Ġa uction
.Get String
ek s
( project
ĉ msg
ĉ output
Ġcomplaint s
, S
Ġt bl
Ġ, ĊĊ
ri ors
ah ren
Ġlawy ers
re dux
_s ymbol
off ee
_RES ULT
( Name
UT C
.current Time
Ġorgan is
. arg
Ġmin im
w ick
Ġrece ives
B alance
Ġspeak s
ĠD ays
ĠBel ow
t ipo
P resent
Ġres erv
h p
Ġr it
_R IGHT
-- )
Ġchair man
D IS
ĠBO OST
Ġexper iments
__ );Ċ
Ġst amp
Ġf ert
Ġf ond
T er
el ve
ure n
+ i
end ency
Ġvirt ually
... "
ï½ ŀ
- cent
_un ique
Ġpr icing
m ic
RES H
Ġ:: :
Ġan notation
ĠC ircle
ong odb
it as
Ġ% (
( component
Ġо б
( port
-h our
. obj
L BL
Ġj ury
GB T
Ġsp y
ĠProf essional
Ġ"" ;ĊĊ
Ġstri king
Ġdiscrim ination
Ġp ays
lic t
ent es
Ġthrow ing
ĠPl ugin
( def
ĠRuntime Exception
ĠM igration
Ġd ic
b ag
on ia
Ġcor ruption
( Map
Ġpr z
.d to
Ġac quire
State ToProps
Ġlo ving
оР¶
_p attern
Ġemot ions
Ġpublish er
_b e
Ġcoup les
o j
ĠCh art
Ġt rop
.t ool
Ġestablish ment
Ġd ol
Ġto wer
Ġl ane
ĠSy dney
Ġfill ing
claim ed
Ġdialog ue
Ġcon vention
book ing
pare ncy
æ ±
ĠGener ic
\ Schema
Ġr anges
/ ch
Ġpan els
Ġr uled
çĶ Ł
.t s
_s ets
Ġclean up
Pre vious
ĠAn imal
($ (
ĠA ve
oll ar
_e val
ĉ Name
(t ree
Ġ" ]
Ġdut ies
=' /
Click ed
Ġdifferent ly
ĠCl ark
Ġd it
olog ists
Ġsy nd
Ġs ends
- known
k b
ĠMod al
it ative
Ġr acing
Ġhigh lights
ĠSim on
ĠCapt ain
ä¿ ¡
ĠC B
cont in
ar an
Ġphys ics
ret ty
et al
.m d
ax ios
Ġspeak ers
Ġpre p
Ġaward ed
ì§ Ģ
ĠC orn
ĠN ature
UD IO
Ġpro j
- pre
[ u
Fe atures
Ġis Equal
B inary
s ig
Ġconf usion
ĠH at
Ġkt ó
.config ure
M ON
/ edit
_A dd
, true
Ġc li
Error Message
- loader
Dim ensions
ultip ly
Ġ{ !!
ĠSql Command
Ġsp oken
Ġp ics
Ġto y
( Key
ĠLo op
Ø ¨
E ATURE
in ction
_set up
w rapper
Ġt ong
c ular
O pt
.P l
=" ,
(l ength
um n
Ġch rom
Ġse vent
ĠIllegal ArgumentException
ĉ start
Ġbeg un
CE PTION
dat aset
ĠF ailed
col s
Ġkne e
im ore
.sp lice
sh ell
ig gers
Ġthem es
ĠD J
ĠAss istant
- $
May be
Ġorder ing
ĠInt elligence
ĠMass achusetts
Ġfail ing
el son
G reat
= i
.re st
Ġinv ite
-dis able
.Group Box
âĢĻ est
Ġtack le
g v
et ter
Ġ), čĊ
_r ules
.w arn
function s
ĠChrist ians
Ġback ed
Ġsl ider
Ġenjoy ing
n est
Ġh ij
_m s
// *
An notations
ĠVariable s
< V
( server
ĠOr acle
element s
Ġorgan isation
_point er
ĠHe aders
[ d
Ġdead line
iss a
Ġkn ife
ĠNAS A
ĠHe ight
ĠAs ync
Ġven ue
.d om
bour ne
ĠHaw ai
Ġmem o
ict ions
Ġsurve illance
om i
/ assets
Ġed u
Ä Ľ
Ġro ster
Ġh ired
ĠT ok
Ġpl acement
ur ations
Ġset State
ĠMag azine
Ġhor ror
T ry
Ġl ag
ĠEvery one
th ur
)) ;čĊčĊ
. return
Ġsy mp
âĸĪ âĸĪ
Ġn ights
work er
Ġa le
ennes see
.st ep
Ġsynchron ized
our i
Do es
. change
f on
.set Background
irc ular
+ -
ĠC IA
ĠJ ane
ĠSim ilar
- I
level and
Ġpros pect
_f ound
ĉc olor
.D iagnostics
Ġann ounce
Ġassum es
/ tr
Ġb d
ĠCar bon
Ġanal ys
.de st
n ik
ĠL ie
- index
Draw able
ĠT AG
Ġtri angle
_F LOAT
ĉĉ ĠĠĠĠĠ
.bl ack
v ue
cur acy
Ġaffect s
Ġsure ly
Sl ider
uk i
c ery
Ġun ter
.pro file
ord on
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
le ave
Ġsmart phone
g ie
Ġcons pir
Ġt utorial
ç± »
Ġc ab
ĠSum mary
* ĊĊ
ä h
" This
Ġsl ides
"
.de v
' <
ĠR ing
ÅĤ a
Ġk otlin
.d umps
Ġb ass
ì ĭ
PO INT
Ġ utter
Ġé s
.f ull
OL L
Ġcer emony
sl ot
Ġa ims
to oltip
.s core
- dd
Ġpro x
Recogn izer
d ynamic
ä nd
/ std
D U
ĠNot Implemented
(" --
RA W
Ġeth nic
ann o
Ġch ampionship
, self
Ġaccept able
ĠS prite
[ type
ü h
ĠV K
(j Panel
it r
ë ł
aur a
Ġfac ulty
av ers
ĠRec ords
.S ecurity
Ġcon straint
.B l
U int
b alance
Ġcomm e
ĠN ik
Suppress Warnings
ĠO cean
_ Id
Data Set
Ġinsert ed
" ;čĊčĊ
âĢ ³
ipp et
Ġann iversary
Ġret ired
or ch
Ġper pet
\ Form
Ġinvol vement
_user name
ale m
_SER VICE
ĠIndian a
Ġcig aret
art z
ĠR C
Ġmeasure ments
ç½ ®
Ġaffili ate
ac ional
- section
_ controller
v ard
_ el
ĠTo y
< P
M achine
ú mer
ĠY eah
" You
Ġm ol
.C l
cont rollers
Ġsusp ended
++ ;ĊĊ
AT T
Ġpro jection
P adding
.m ath
f actory
Ġgam ma
() >
c ycle
ĠB ull
path s
Ġun p
Ġview DidLoad
_M odel
Ġassert True
Ġr ated
De cl
vert ed
ĠD at
b rew
Ġpoint ing
M s
ĠPoint er
) '
_n on
ĠSE C
Ġy eah
g ency
initial ize
f ly
[ pos
, g
Te le
Ġj oke
Ġcl ause
.find ById
en es
( instance
 £
Ġs lic
_h ome
Ġ*/ }Ċ
_p ages
(s ervice
R P
ĠAm ong
.get Current
ãĤ ¹
Ġs lee
=
_p rop
fl ush
ĠM M
B el
Not es
Ġ*/ ĊĊĊ
Ġr h
Table s
ĠJ u
Ġ\ čĊ
lich en
ĠIns urance
] ĊĊĊ
Ġco oper
âĢĶ the
.m at
Ġf oi
(a uto
M argin
Ġres idence
ĠH istor
Ġ~ =
D i
Ġ' )Ċ
Ġex clude
.D rop
' ";Ċ
Ġc oc
_ upload
H ide
ĠUn known
Ġnormal ize
_re t
.' ĊĊ
.n odes
.Data Source
ble ms
Ġgent le
: $
' ));ĊĊ
.Res ources
â Ī
ĠT ai
V ED
ĠG un
le ans
ĠD oc
.V oid
ĠAm endment
ess ed
Ġrec ipient
. Node
ov o
Ġalign Items
ĠUn ity
ĠR ome
b urn
Ġvolt age
ĠSH A
ĠGO OD
help ers
/** */
Ġelim inate
w ap
_ angle
Ġrefuge es
ĉassert Equals
Ġpro be
(' ../../
y our
Ġmer ch
UB LE
ĉ response
_DE F
Ġen vironments
ous ing
Ġrestrict ed
ĠCONTRIBUT ORS
Ġcompan ion
Ạ£
p ow
urt le
b ie
.Per form
= n
red is
Ġdiv ide
Ġcollect ive
D iff
D ynamic
is Selected
ast ype
ĠL ot
ĠSt atement
icip ant
ak h
Ġserial izer
_C FG
av al
Ġview ers
ĠF O
O cc
Ġrob ust
ĠM it
_ AND
Trans ition
un ate
Ġpr ide
Ġdram atic
ĠP ages
_t uple
Ġcop ied
m n
Ġ ought
Ġequal ity
_h as
_W R
em i
Ġsur ge
il lo
() }
Ġper f
ul k
Ġinvest ments
Ġgener ations
Ġres ort
Ġtrust ed
_f req
Ġform a
ATION S
ĠH u
ĠGr ad
_c pu
Ġ" ,Ċ
res se
( **
Ġhere by
Ġl ake
_ST ACK
ĠB ureau
Ġsustain able
ĠP E
Ġde i
ĠAn swer
Pl us
/ web
Ġst er
Ġmount ed
_c lear
f ono
ian ces
_f ind
Ġconf used
_b in
DE CL
Ġinstant ly
U IT
_D O
Set up
ke e
_print f
_st mt
ĠSte am
pro f
l v
Ġsol ving
l ator
ot ypes
And roid
_ escape
Le ave
.get Time
if s
Ġc ov
ĠClass ic
-d ark
Dispatch er
- gray
ĠPalestin ian
.de ep
ĠIn ject
Ġref lection
Ġhyp o
con structor
.app lication
yst er
â ķ
s chool
ĠC ow
Ġfoot age
- ins
Ġ/** <
at om
Ġprof its
Ġbook ing
_th reshold
ĠL iver
Ġcitiz en
b x
ĠSt orm
ĠCor p
Ġw ider
")) {Ċ
_A CTION
i ors
ais es
: none
Ġc ited
" fmt
A ug
com b
Ġwh ites
Ġs ess
^ ^
igh th
Ġt ang
_C AP
Ġinter actions
Ġg ard
Ġpr ize
af ka
T ri
\E loquent
ĠD ynamic
çIJ Ĩ
g p
Ġreal m
ĠN i
ĠEd ward
Ġident ification
Ġphys ically
æľ ¬
Ġpick s
-f riendly
< i
if ice
_A P
Log ged
} ".
/ utils
Ġ ....
ENT IAL
( Action
'] );ĊĊ
Ġprotest s
ol ine
_RE TURN
Ġpop ulations
ĠR ain
d up
or ial
ĠAuthor ity
_ex pr
. us
Ġcor rupt
ĉ import
< char
ĠLE FT
Ġcabin et
Ġneighb our
ĠSql Parameter
atter ed
em ia
Ġreview ed
ĠH ello
block s
( process
Ġobserv ation
r ating
.g lobal
Ġpre ference
.pre pare
Ġdo zens
Work er
Ġcalc ulation
ĠT ower
air y
ĠIS O
Ġhuman ity
.as InstanceOf
Ġd ys
Ġp ier
ig ue
Ġassoci ate
Ġint im
not ify
({ },
ĠRep resent
ph et
se udo
ëĭ Īëĭ¤
.P osition
Ġclos ure
( class
ĉ time
ĠOr ange
_ ops
Ġpop up
ĠIm pro
_se cret
ĠE u
.set Layout
ul ly
Ġscre w
ĠS ized
ĠCOM P
Ġnot ifications
Trans fer
E mitter
( old
let ic
Ġ- ĊĊ
Ġpan ic
ĠL CD
r ules
Ġaff airs
ĠF ill
_IR Q
att achment
Ġv om
< button
Ġtext s
Ġactiv ated
. access
( reader
T em
Ġcor on
ro ph
DM IN
Ġemerg ed
Ġinfl ater
ĠIndepend ent
or ious
ĠDel hi
Ġg lyphicon
ĠCar l
S i
Ġexperiment al
.b ar
I AN
Ġsql ite
cc ión
_B ACK
, name
h ort
Ġt ens
ê ³
us ive
Ġgenu ine
Ġbu ck
/ div
. room
_NE W
est ado
ĠAr k
oc ols
.g enerate
t ouch
f ixed
Ġ' (
Ġref erring
Ġoverwhel ming
( let
Ġf ue
_EN V
w oman
F igure
an imate
ĠM ort
Ġlong est
col n
T M
: _
ri el
, N
ĠR AM
Ġjustify Content
Ġact ively
/ public
Ġë °
G iven
OT AL
失 败
Se quential
Ġsup plement
. ab
Ġc ategor
} },Ċ
ah an
' un
os ity
Ġaccompl ish
Util ities
.view s
.c n
ce il
ĠC BD
ĠR F
PE G
ĠG ift
AY S
ĠW IN
pan ied
Ġ ÅŁ
Ġob server
Ġsm ell
Ġ{ :
Link ed
> [Ċ
ol er
Ġlib ert
Ġ` Ċ
Ġw enn
l ated
Ġimm une
( Node
ĠPro blem
ĠA bs
log s
Ġ ../
ĠA DC
Ġ}} ">Ċ
> ');Ċ
= b
ĠW ind
lah oma
Ġalloc ate
or ian
Ġpres cription
- quality
ĠMay or
in ely
end foreach
ĠCom plex
k om
T Y
] ].
. Style
_m any
',' $
Ġbar rier
ĠF etch
ĠMar vel
Ġres ist
ог о
b idden
ĠRun nable
: false
Ġbuild s
ĠSt age
Ġd ub
emp o
.s ite
;ĊĊ ĊĊ
ĠDen ver
Ġre vel
Ġtrigger ed
Ġd ice
_f ail
Ġg c
ĉ X
ĠTh rowable
.r outer
ĠRev olution
ÑĢ Ð°
_N ON
Ł ¥
Ġel der
Ġab road
ĠÐ µ
ĠAd ult
bl r
g lyphicon
Ġprom oting
Ġ iz
ĠS olid
_lo ader
ear ly
.en abled
- edit
ĠU L
_ play
ĠInt errupt
Ġadvant ages
uc le
Ġmechan ical
.table LayoutPanel
ĠWork ing
Ġan onymous
R ating
ig ious
_ph one
.addAction Listener
Ġfr an
und en
Ġ*) &
_ bool
ul ative
Ġcon e
ĠM ult
Ġm ö
ĠFor ward
] ):Ċ
Ġconvin ced
act ed
ãģ ĵ
ĠConfig ure
Ġce iling
D er
Ġpass engers
Group s
Ġsoc cer
/ W
avi ors
sw ith
ĠZ one
. Options
ĠM om
ied er
Array s
Ġtreat ments
Ġprotect ing
f ac
Ġpick le
Button Item
Ġblock ing
str ar
à ²
ĠEx port
Ġth rew
ott a
ĠB ASE
.w s
.LE ADING
order By
_d elay
ĠP u
.d ll
ĠCh oose
Pol ice
ĠBE GIN
box es
Ġdiam ond
, l
Ġ ĉĉĉ
Ġcur ious
t v
Ġerot ische
ack ages
ĉ Set
T ick
.b order
static method
Ġch er
in voice
Ġcr u
Ġdef ect
_m etadata
re lation
ik an
[ N
(Q t
( Base
æģ ¯
be at
ĠEm pty
ĉ o
_sh ift
Ġreg ret
Th ose
C ent
ĠPort ug
ĠIs lands
ĠT IME
Man agement
-s p
ê me
Ġnot ion
un ifu
P K
è¡ Į
ĠCUR LOPT
\" \
U V
ç º
d ra
c ou
= `
ĠD estroy
r p
.c ancel
G G
r untime
ĠV ue
Ġprogress ive
/s ervices
Ġrun ner
_FR AME
.ToolStrip MenuItem
Ġ' ,'
d elay
= utf
Ġscreen ing
Ġpull ing
om as
Ġan th
- new
/ local
Ġi Pad
Ġt witter
Ġd ying
Ġhe aven
ĠU Int
ĠSen ator
Ġpres um
ĠWalk er
Ġover come
ete ction
Ġemb arrass
Ch ina
In clude
RO LL
Ġdata Type
D avid
ภ£
lo p
-m onth
Ġsc ar
ĠS afe
Ġ ****************************************************************
Ġaccess ories
Ġr amp
_U SE
Ġcontr ad
)) ]Ċ
Ġpre st
ĠH R
ĠR ap
Ġus ize
Ġcap ability
Ġc ort
- next
Ġbur den
_read er
Ġ@ @
reg ular
ĠK a
M AN
Ġa str
Ġ' ')Ċ
Ġf ed
Ġpars ing
ĠY ears
Ġbro ker
": {"
Ġa kt
In ventory
abe led
Ġarg parse
****** *Ċ
vers ation
Ġc ord
ĠT i
Ġhope fully
Ġa h
ver b
Ġst olen
. Entry
Ġexpect ing
O rientation
Ġpower ed
Ġp ersist
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
'] );
')) ,Ċ
ĠC ash
ĉ item
gr ades
rop ol
b asic
Ġ" );čĊ
Ġaw ards
(r ange
- all
ĠIB Outlet
ĠInd eed
---------------------------------------------------------------- ------------
Ġstom ach
Ġfl ower
Ġs ew
_t imes
av is
Q String
ĠR outes
_pro t
Ġcom edy
Ġlog out
Ġwood en
Ġpost er
p iece
.J oin
ĠP ok
cel ona
mut ex
;čĊ čĊčĊ
Ġstri kes
Load ed
) arg
es a
Un ited
E p
PE LL
ĠAtl antic
ul let
app le
Ġsett led
a con
Ġprint er
ĠG C
å® ļ
Ġrender ed
, âĢĻ
he it
s ocial
. ge
ĠR ick
ĠUt ah
g ot
on ical
ĠSc roll
ĠSc iences
Ġj ug
Ġam pl
ent i
LE FT
Ġt abs
Ġenorm ous
.get Key
loc ate
. EX
.st orage
.W e
Ġto ast
ĠAdd itionally
ĠN OW
_ UPDATE
Ġtrans ferred
th a
.D isplay
_ ui
ID EO
Ġmeaning ful
ĠMos cow
, this
ĠVict oria
æĶ ¹
ĠÐ Ł
.st ack
ĠB arn
pared Statement
: string
Ġb ij
ĠST ATE
Ġemploy ers
ĉ input
( |
Ġle x
in voke
ĉ num
++ ,
at ial
ors es
Ġfor k
_t xt
ĠAnton io
Ġ( <
aver se
Ġdev ast
ãĢ Ģ
.D ec
ĠG ard
/ ui
. %
tr i
Ġrol led
Value Pair
itt en
ĠTh er
Ġv rou
ĠFl ow
ĠFin ance
ĠCom b
H C
.set Visible
is l
Ġp k
Ġup set
( raw
ĠV ice
e atures
ĠL ang
Look ing
ĠA ST
Ġtri ps
ĠJust in
b rowser
=" '.$
. vertices
- co
}/ {
Ġ? ,
ĠD omin
ĠBel g
" <
Ġsup pose
add y
Ġwalk s
ERR U
_f ilters
Pre ferred
sc ene
е Ñģ
ĠAff airs
Ġ"# {
Ġon Submit
Ġstock s
/ view
g ree
- get
h it
J o
.get C
Initial ized
ÑĤ и
c uts
( Type
ĠAg reement
ĠViet nam
Ġ/* !
Ġp izza
- view
_ em
Ġl hs
Ġm uy
ĠId ent
ĠF riends
Ġab und
_A D
.t imestamp
- '
Ġd uplicate
Ġhun ting
Ġregul atory
ia o
am ous
ĠEnt ertainment
[ A
iat ric
_CL IENT
ĠK ids
/p kg
B reak
)) );ĊĊ
ĠSh ape
Ġrel ating
Int errupt
able Opacity
emb re
Ġmyst ery
Ġjournal ists
rit able
.L ink
Ġstop ping
CRE T
.D B
Ġpopular ity
Ġg ew
Ġim pr
set Value
FL AG
ĉm ax
Ġb ake
w y
ĠEcon omic
Ġen contr
Ġf name
/ de
R ank
Ġbug s
.s m
Ġmed ian
D OWN
ĠS ure
At Index
ĠD ick
Ġ( __
.d elta
F r
Ġsuggest ing
ĠRec yclerView
, e
ST ART
/************************************************************************ ****
xf ord
Ġrece ipt
CL AIM
read only
Ġeng aging
C a
as ma
Ġens uring
Eng lish
ĠV ancouver
hy th
Ġpurch asing
ĠP I
. word
(s p
.h ome
: def
Ġg ig
ĠV e
for um
ĠM itch
B ay
_F L
Ġs oll
_column s
Ġminor ity
b ird
Ġhand ed
SS L
ST AT
Ġnerv ous
ĥ ½
Ġfile Path
CRE ATE
A w
Ġp ens
se ed
ĠCom pute
ol k
ĠAs set
re ach
'), čĊ
n avigation
L F
/ util
ĠP ub
Ġâ Ķ
c ion
## Ċ
II I
Tag Name
Ġam id
per mission
if iable
xFFFF FFFF
н и
.B uffer
_ irq
d ark
Ġret val
.f ire
produ ction
.list en
ĠWe ather
Ġbuy ers
. ne
er p
ĠP ent
Ġw elfare
Ġpage Size
ĠSt adium
ert a
Ġle v
amp a
P ager
Ġcharg ing
ĠNet flix
| null
_r andom
.x path
Ġst ere
ĠIS IS
pons es
( loc
ey ond
ĠOff icial
ĠMary land
Data Type
_p ar
{ },
ĠEn joy
_SH IFT
ĠA wards
_ENT RY
Ġseem ingly
entic ate
Ġheart s
_ ;ĊĊ
ĠH IV
Ġindiv id
ĠFl ag
_ ctrl
ĠC allback
, z
ĠG PU
ĉ obj
ĠPh oenix
ĠB US
Ġrub ber
_A UTH
ĠSol utions
( location
Variable s
.set Enabled
_h igh
W O
G esture
Ġre try
Ġobject ForKey
allow een
Ġm os
ĠC ele
Ġik ke
(c ell
ĠM ODE
ren a
Ġdescri bing
Ġph i
Ġr d
Ġdes erve
Ġwhe els
å¸ Ĥ
Ġcrit ics
N amespace
ĠF ra
Ġ ĊĊĊĊ
Ġall a
Ġrequ iring
æľ Ł
ut ation
Ġdelay ed
Ġadministr ative
Ġb ay
.h idden
T ex
Ġbound aries
Ġ] );ĊĊ
ĠFollow ing
~ /
F i
_con v
_T ITLE
Ġdes de
ICollection View
Ali as
Ġb ite
pat ient
_COMM AND
Com pleted
ĉ elif
( <
B usiness
ĠP ool
Ġpurs ue
ĠB an
_st eps
_DE CL
um ble
Ġcom bo
ĠL ayer
.x r
Ġd up
-------- -
Ġmod ifier
ro b
re z
Ġath letes
Us ed
w ear
Ġlegit imate
Ġ" ĊĊ
Ġh v
St d
ĠH old
Ġsurv iv
ĠAll iance
ĠEar ly
Beh avior
(f ont
/lib s
Ġrect angle
Ġs inger
Ġam p
Equal To
Ġ" ."
Ġgirl friend
å ±
line ar
obs erv
Ġpi ù
Ġcomple ment
With Value
(p assword
t ake
Bl ank
ĠCom par
' ",
_p olicy
m ongoose
_FA ILED
.re port
R atio
.Perform Layout
us able
m ers
_re nder
PE ED
Ġles b
ĉ E
_t ool
Ġl adies
о Ñģ
)) ))Ċ
;; ;;
.d ot
Ġn est
pe ak
uk kit
ec a
_S W
Ġ& (
ĠOk lahoma
Ġbank ing
ĠN intendo
Ġreprodu ce
_element s
_m ac
pro xy
Ġremark able
}/ ${
Ġout s
.has Next
M ODE
Ġan ime
.con n
Un ique
D om
Ġimportant ly
itt y
Ġju ice
T w
ĠPart ners
Ġattack ing
Ġport able
am iento
.P ictureBox
.g en
Ġopt imal
Ġre cre
Ġjournal ist
ĠEx tract
ĠMore over
Ġmargin Top
.A p
Ġf iring
Na N
ĉ template
аР´
. En
Ġdef ence
ĠT el
il en
j an
= data
ĠU rl
ĠRe uters
(t otal
ĠFif th
Ġess ays
Ġinterpret ation
Ġchar ity
ĠR ules
Ġsub section
st yled
az er
l ags
L IST
Ġupload ed
Ġtr ash
Ġreg istr
Ġsell er
>' ;čĊ
Ġstart Time
ç Ļ
s y
(Http ServletRequest
Ġtr ap
G C
Ġembed ded
Ġsurround ed
im its
T X
yl inder
ĠF al
Ġsent ences
ĠJ a
IF ICATION
we apon
ov ation
Ġco at
Ġinter pol
Ġl ips
ĠK y
Ġv ectors
_ am
Ġint ake
.w orld
Ġin box
ĠM AC
_ ab
(name of
Ġent ert
Ġgather ing
ĠS IM
++ .
ny a
' }}
ĠUP DATE
Ġp ac
( html
ĠS ant
i ating
ĠIde as
Ġspr ay
ĠH art
Ġver ification
ades h
/ modules
ĠM ind
ĠSized Box
Ġsh elter
Ġher oes
att y
Ġcert ified
s j
Ġê tre
ÅĤ o
Ġpublish ing
ĠMal ays
.get User
ĠPro vider
ĠLinked List
ĠB or
RO UND
d id
t ain
p ire
ĠJ enn
t el
and e
_f ront
ĠMc G
Test Method
ภŃ
Ġoccasion ally
ĠW ales
Ġexerc ises
ĠÐ Ĵ
- plus
Ġvalid ator
Ġpr ayer
L ATED
_ author
Ġlab our
++ Ċ
-e quiv
ĠG PL
Ġface book
s imple
g ly
Process or
ip y
Ġ* >
Ġcle ared
ĠP ush
Ġpen is
Struct ure
li j
ĠM organ
Ġhand ful
" .Ċ
| \
Ġ ********************************
ĠA qu
_ IC
.load s
Ġm eter
ĠMar ine
:: {
ĠT S
ĠArray s
.T itle
GR AM
ter min
Ġco inc
El se
_st ates
-r un
m embers
ast ro
Ġon Press
Ġbe ings
Ġabandon ed
Ġtax p
own ers
.m ode
Ġdiagn osis
Ġ_ Ċ
ĠK night
ĉ A
Ġob serve
), '
! ")Ċ
ĠPar a
Ġvari ation
( False
ĠAnt i
Ġg ri
Ġhome less
? v
Ġbe z
.S erver
re lease
ĠP atri
Ġchar s
Ġrank ing
activ ation
Ġw ides
q r
.S ql
ac ular
ĠB ot
_s ync
Ġhapp iness
Ġvolunte ers
Ġs its
/ <
[ e
(file Name
Ġcap ac
ĠMar ia
f ather
Ġgr am
* i
Ġcas o
_d raw
ĠR aw
ĠIter ator
ĠP adding
P D
BO X
ĠS PECIAL
Ġfe cha
Ġv ide
ĠLe ader
ä» ¥
$ (".
Ġdiam eter
Ġm ild
Ġrock s
app ings
d irectory
.fl ush
ĠJ ess
UN IT
ĠP ear
Ġmand atory
S ur
q t
Ġstream s
Ġco operation
ĠS ac
Ġche aper
ĉ ch
an imation
f are
( height
( True
N Y
Ġw rest
Ġpoll s
Ġencounter ed
ĠMarket able
_P ASSWORD
_SE LECT
ĠArab ia
_c lock
Ġv oy
Ġи з
Ġst ir
is ible
-e ffect
.c reated
Ġto ys
ĠTrad able
Ġr ust
Ġstr cpy
_t imestamp
Ġtalent ed
, null
ĠJ obs
ĠPort land
Ġweak ness
Th row
ĠAng el
ä¿ ®
Ġun cert
ï¼ī Ċ
ĠìĿ ´
Wh ich
Ġ[- ]:
S omething
Ġconv icted
k le
ed ium
Ġbranch es
Ġb ases
ç ®
Ġcomplex ity
ĠF ig
. reshape
$ db
_CON ST
ĠT es
.r untime
Ġden y
ĠB SD
Ġk r
h att
ĠSt atic
Ġunivers ities
Re place
Ġdro ve
Ġad oles
_pl ugin
ĠL GBT
Ġt ex
du ction
ED I
ĠT ed
_ URI
Ġre ception
art en
.S ingle
r ice
sc ious
_b g
Ġw ages
ĠS ervlet
UIL ayout
Ġform atted
.M od
< class
is en
Ġrepresent atives
"] =
Ġport al
ĠHun ter
Ġh iring
__ )Ċ
ric ulum
u o
li est
Ġt ears
L at
Ġliter al
.In sert
Ġc urs
ĠCom put
Ġterror ism
Ġswe ep
Ġ[] čĊ
Ġpass enger
Ġeast ern
Ġtwe ets
Ġoper ated
w nd
ĠS yn
.t ools
ĠW M
ul ates
Ġbacter ia
( bytes
.set Data
Ġvis ibility
// ================================================================
el m
Ġgener ating
Ġm v
Ġk h
j en
/ search
Ġaccount ing
se gment
act ic
. ip
Ġdeploy ment
Ġfoot er
> ',Ċ
Ġexpand ing
ĠHam ilton
ĠCon trib
.T ables
Act iv
H H
ocom merce
_ ;
Ġamong st
ow ing
ĠC old
AP H
Ġpsych ological
_t ensor
Ġpack aging
ĠSw eden
Ġp are
Ġag gregate
Ġmoder ate
_h and
Ġdesign ated
Ġdr um
Ġget User
ĠC reek
_s cope
ĠTrans fer
ĠM arg
Ġfight ers
W nd
ĠS el
ĠLa unch
Ġemerg ing
if rame
ĠAdd itional
Ġf ears
Ġsat ellite
_ :
Ġdis posing
Get Value
Http Post
AT IVE
ul ary
View s
Ġatt ending
ĠT ennessee
ĠM ission
Ġmedic ation
ĠW y
ĠAn na
Ø ¹
ĠVert ex
.t ypes
O rgan
.DataGridView TextBoxColumn
ĠR S
Ġtemp o
( App
Version UID
.p oint
ĠD utch
H ours
L U
Ġqu oted
.b uilder
ĠPer fect
ĠAl ways
_t wo
Ġexclus ively
ĠC ra
ific ar
ĠA WS
ing ham
com plex
k ernel
Ġgr avity
Ġw i
Ġover view
ĠW ant
ĠW P
( sh
. rotation
St ates
ĠTe en
_com ponents
ì Īĺ
Re ceived
Ġly rics
rit es
ĉĉĉĉĉ Ġ
-A merican
[ num
/ python
ĠU ART
Ġapp le
ĠJon athan
Ġmoment um
ภ±
Ĥ ¹
Ġm ich
and ra
Ġbi ological
ĠM ens
Ġ% %
else a
ĠMex ican
.rand int
Ġt ale
ĠValid ate
Ġdefe ated
.ht m
Ġcop per
= /
cos ystem
Ġr ip
dec imal
.V ISIBLE
ĠT a
ĉĉĉĉĉĉĉĉ ĉĉĉĉĉĉ
Ġdownload ed
en vironment
Ġnom ine
build ing
ĠSp ot
ipher al
Ġal to
qu et
ĠF T
/ get
/m aster
W IN
åħ ĥ
W est
arg c
Ġprodu cers
ĠM uch
_st orage
cred it
CON T
Ġv et
Ġvo ices
(' ',
Ġinstr uments
ĠM SG
es se
re pository
om ics
Ġdeal er
St ill
Ġb anner
asc ii
Ġrem arks
[ js
Ġshort er
g ulp
Ġmyst er
Ġk un
ĠB ird
Ġti ene
n ut
ĠU m
Ġw ise
Y eah
INE SS
_b egin
- heading
C ourse
Ġ čĊčĊ
omb ie
grad ed
ĠG PS
Ġ że
F it
c aption
ö n
/ image
l ia
(m od
Ġle ak
en za
/ H
ĠH appy
D ist
n x
ĠGovern or
(l ast
te acher
ĠS ent
s upport
ject ory
Ġ Ùħ
Reg istration
ĠGr ay
, false
Ġadjust ed
( settings
< R
ĠM age
Ġpl aint
_ )Ċ
ĉ it
omet ric
. bootstrap
Ġcar ries
I p
Ġ! $
Ġswim ming
ĠMar io
ĠQuest ions
P ACE
æĸ ¹
e or
}} "
Ġo ven
ĠK on
Ġwis dom
Ġac quisition
ess ment
ag ine
Ġexpress ions
Sequential Group
F ront
ul pt
aw k
'] )ĊĊ
_ AR
Ġanal og
ul in
_PR INT
ĠL G
Ġb lob
ĠFurther more
_com ponent
ĠC ole
L AN
SCRI PTION
Ġl ap
icens ing
_TIME OUT
ĠF ro
Ġli ability
Ġcom posed
.create SequentialGroup
_p erson
Ġbe am
ĉ ĠĠĠĠĠĠĠĠ
ĠNot Found
. 'Ċ
ÃŃ s
.Text View
P DF
Ġk ar
__ ('
Ġ" :"
_m essages
Ġhar vest
.h istory
> 'Ċ
-f old
æ Ĭ
ĠBet ter
Ġ"\ <
sp acing
Ġfurn ished
os er
] }Ċ
Ġ$ "
p ull
.P ost
( ip
Ĺ ı
.f ront
nt e
ĠF M
g uid
Ġnegot iations
agon al
Ġtrem end
unge on
Ad v
car ousel
ÃŁ e
_DE SC
Ġham mer
ẠŃ
ĠĠĠĠĠĠĠĠ ĊĊ
-c ore
-s ervice
Ġcorn ers
ĠS F
p red
> A
ĠJ Label
Ġrom antic
Ġtestim ony
os c
ĠGener ation
as ures
_int ernal
Ġprint s
Ġ] )Ċ
ĠC leveland
re po
D isc
Ġ" >Ċ
�� ��
Ġne arest
_t b
( require
EO F
- child
Ġbu dd
.Xtra Editors
alt ies
\": \"
W ords
Ġloc ally
Ġpurch ases
Draw er
ex tract
Ġexec ut
} '.
user data
Ġfocus es
-min ute
ĠP ublish
og o
Ġmount ains
B ot
} >{
Ġt ension
ro d
m esh
Ġtransform ed
, R
() }Ċ
.l ong
Ġg orgeous
ĠS chedule
Ġol dest
Ġsub process
( IN
y ect
ĠCo oper
arn ess
ĠMon itor
.p art
ĠN BC
Ġc otton
Ġh ol
Ġrg ba
ĠB io
Cont inue
P od
Ġparticip ating
clus ions
(By Val
à ¬
ĠH OW
_set opt
Ġaccompany ing
at on
Ġ/ \
ĠAuth entication
i én
ĠBar ack
/* .
Ġe ager
ĠC ancel
< lemma
ep h
ĉ window
Ġinc idents
), (
.D es
ib e
ĠFunction s
Ġhosp itals
Ġo xygen
root Scope
Ġd rew
ĉ request
not ice
ak u
am ents
f ar
Ġprec ise
_w rapper
Ġlisten ers
A Z
.b ounds
ĠA verage
field set
_ axis
Ġexam ination
' .Ċ
mon s
++) {čĊ
ĠForm s
íķ ľ
Cpp Method
_tr ace
Ġengine er
ĠFl at
Ġrev ision
Ġhe ating
/ profile
.r u
p riority
Ġin fer
_ST REAM
Ġ* )(
> $
OLE AN
OK IE
IB ILITY
U AGE
ĠSur vey
Ġres ign
w ing
Ġsecre ts
Ġch ips
JSON Object
Des ktop
_SY MBOL
(res ource
Ġ >Ċ
Ġnew est
ul i
Ġdes ert
Ġd ip
ĠP ow
Ġequ ation
Ġposs ibilities
ĠF ed
os ph
Ġ[ %
Ġb ubble
ether lands
Ġc ement
. auto
_ AN
âĢĻ .
se lection
ĠB ond
D en
- O
.get Type
.W indow
p res
Ġsw inger
" })Ċ
Ġp ip
Ġm ice
Ġcomp ound
- plugin
ik o
Ġcent uries
ic ular
-in line
ĉ key
> \<
EN SION
Ġ[ čĊ
Ġprecis ely
Ġét é
ĠP ast
ĠCam bridge
-f ull
Ġanaly ze
ĠSte ven
Ġn em
d ue
ore n
Ġmus cles
ij ing
/ -
ĠKenn edy
R M
oss ible
Ġact ress
Ġd olor
å½ ķ
Ne ed
.t oggle
ĠR ace
w ers
.m aterial
ĠD ue
ĠP el
# print
Ġindepend ence
ex us
Sh adow
Ġenc oder
( level
ĠSw ift
.d oc
_se lection
Ġserial VersionUID
Label s
Ġperform ances
.T ag
ĠN HL
iz en
/ UIKit
_CONT ROL
Ġearn ings
ĠAl t
_H ANDLE
C tx
Ġpers u
Ġtr an
ç ¨
_CH ANNEL
Ġsatisf action
ĠG P
io x
m itt
land o
Ġp ig
inal s
ê ncia
S urface
ĠU UID
Ġbenef icial
Ġsequ ences
ĉmem set
Ġmag ical
 «
Ġw orn
AS C
pop up
COM P
_b efore
en ess
U i
L es
.re quire
.Serial izable
add Gap
Ġauthor ization
.py plot
urr ay
lat itude
fr ames
aj s
Ġcomp ass
Ġobserv ations
_s up
.en viron
Ġtri ple
ĠRub y
Ġdr ain
_F ILTER
S an
UM P
Null Exception
ĠG ab
ow e
ĠTurk ish
_se quence
ĠGr ant
uel a
Ġw o
Ġc ube
i q
Ġdis orders
Ġextra ordinary
Ġc trl
ĠSe q
ent r
Ġsan ctions
uts ch
Re ports
Ġin herit
Per iod
Ġphot ography
ĠF ramework
Ġspecial ist
Ġ? ĊĊ
_ selected
.P layer
Ġal location
( account
Ġstruct ural
v able
- offset
.App CompatActivity
аР¼
.Add WithValue
Ġicon s
Ġshut down
_l ow
ĠCom pare
ĠC e
= head
l am
.p redict
_DE C
ĠS leep
ĠGr atis
Ġsuggest ion
ĠD EL
ca ff
av irus
No thing
ŀ ĭ
Ġwides pread
Ġmechan isms
Ġtext Align
occ up
ĠR ail
: NS
Ġf iber
Ġm k
Ġv intage
-l ong
.re duce
. Entities
( record
Ġple asant
FR ING
.C ells
OT T
ĉelse if
_con firm
ĠView Group
s ym
Ġpr ay
Ġsus pected
Cont ains
Ġb orders
Ġcomponent Did
ASS ERT
Ġinf inite
- order
Ġh ello
ĠGr ade
.currentTime Millis
apol is
z h
ĉ Object
: \\
H O
val uation
Ġvoc ab
Ġcou pon
atab ases
.Get Type
L earn
] ="
ĠG ary
ot ive
Ġas h
Ġb ib
XX XX
Ġbal anced
VAL UE
ĠN at
_A d
< E
åĮ º
ĠMethod Info
L IB
Ġconsider able
ĠInd ustry
test s
.set Title
ĠBl uetooth
Ġm apped
ĠBru ce
ĠMain Window
ĉ status
Ġr az
ĠM and
Ġclass ification
Per missions
Ġ---------------------------------------------------------------- ------------
Ġcontain ers
: set
_x ml
Ġwh ilst
Th rough
Ġval ign
Ġworld s
C ORD
ED IA
ÑĢ Ð¾Ð²
Ġsp are
ĠH ad
ĠDE F
(p tr
Ġwarm ing
ठ¾
Ġcons ensus
ag ne
CT L
Ġì ķ
.M ain
web Element
Ġp ist
Fl ash
App end
.tw img
T ap
Ġveget ables
al g
.s ample
Ġcoach ing
( ind
Cell Value
Check Box
ĠH ell
RO OT
Ġst adium
Ġinvestig ating
) %
st ed
ĠW riting
Ġê ²
Ġun o
Ġ{{ --
Ġco ords
Ġun ser
organ ization
ĠCr ime
ĠDemocr at
Ġv in
/ file
- api
ĠA y
Ġfund ed
ĠBre xit
ĠG h
ent ina
c ases
Ġd ash
Ġ!! }Ċ
H I
Off ice
Ġcapt ain
Ġwor ship
\ C
Ġglo be
_ board
Ġbab ies
Ġconsec utive
Ġenh anced
ere um
ĠAd vis
Ġgr ain
Ġc raw
ancell ationToken
. alpha
_W ITH
ĠO tt
ĠC ool
.b atch
Ġver ified
(c allback
Ġreg ards
ĠInt Ptr
ouch er
Ġk in
Ġtou ched
it Ãł
ath on
Ġadj acent
Ġaccom panied
LE AR
Ġim plies
Ġh ill
ĠBalt imore
=" -
Fin ally
S am
ic opt
Ġs od
Ġm aj
ĠSh ipping
Ġget All
Ġcoach es
Ġdon ations
il ot
ĠT ar
c err
Ġbad ge
Ġmark ers
ĠR and
ais ed
iss ance
Ġexpl oring
uc ed
ĠIndones ia
Ġbene ath
Ġmagn etic
Ġm useum
match Condition
Ġdis rupt
Ġrem ind
ĠT M
Ġ/ ><
Ġf ool
Ġes k
.N ull
ĠD ies
_OUT PUT
_TYP ED
Ġpaint ed
Ġsoph istic
ĠB ear
* n
_P ACK
Ġdeliver ing
ĠC OUNT
åį ķ
Ġj eg
-c ar
f name
Ġr anging
ĠN eg
/ ******/
ĠCH AR
Ġul tra
Gr ad
= t
Ġjud ges
ĠD ise
ann ers
Ġsc al
_c al
ĠCON NECTION
_ embed
(f n
ĠC raft
ĠP as
") ->
.con vert
.res ource
ĠST ATUS
ô ng
ĠT it
Ġclass room
ĠArch itect
ĠK ings
Ġstead y
/* !Ċ
ĠG ene
) ";Ċ
ic ia
st an
ĠCon struction
um per
w c
ĠC BS
ing ing
-p arty
(d river
M ARK
Ġn ested
ew ard
Ġdepend ency
Ġm ales
ĠO NE
ĠProdu ction
][ $
ãĥ¼ ãĥ
_LO AD
ĠB ol
el ry
ł éϤ
ĠRe quire
Ġpl acing
xx x
CA LE
Ġth umb
Ch oose
Ġprot otype
VO ID
Ġles bian
Ġtra its
Sh arp
Ġconsum e
Tr uth
Ġaction Performed
ĠEnvironment al
ĠDe an
Ġest ado
s ame
Ġnumer ic
Ġtrans it
. Email
-s ide
_R UN
ĠVill age
_OP EN
è ¦
.re m
-w arning
any a
Property Changed
Ġ(! _
( check
il ia
ĠSo ft
st eps
ĠMad rid
Memory Warning
Ġhand lers
Ġexperi encing
Ġins pect
button s
Receive MemoryWarning
chem y
Link s
Ġur llib
.System Colors
ĠE igen
Ġpun ishment
:UI Control
bar a
- set
Ġ}čĊčĊ čĊ
Ġtoler ance
Ġinter faces
. redirect
ighb ors
cs rf
_back ground
. Utils
_H T
ĠInter est
im os
Ġgr ants
Ġexam ined
Ð Ķ
Ġc f
for ge
back s
ĠObject s
_s ent
. entry
ĠTH EN
ell ido
c ia
, res
/std c
. nd
( Int
ĠAuth ors
ĠApp CompatActivity
' {
Ġmed i
M usic
ig m
ce ipt
Ġa uss
Ġtarget ing
ĠKe ys
h n
: ]Ċ
Ġmin eral
à ®
.c a
om ed
Ġshe ets
Ġc amb
Ġdead ly
.in ject
( unit
ĠSe lection
.g ms
( connection
Ġ$ ("
é mon
ĠCurrent ly
pt e
_path s
le af
Ġimp lications
pos al
ä½ į
[ /
anc ia
é Ľ
m ul
c ie
Ġge ile
im als
UI View
Ġs urre
serial ize
IS O
Ġarbit rary
Ġsock addr
.f n
ĠM erc
Ġcast ing
Key Down
Ġnew Value
op ens
T odo
Ġflex ibility
ĉĉĉĉ ĠĠ
V elocity
ú n
row ing
Ġcomput ed
` )Ċ
st atement
Ġr i
_c art
L ow
trans fer
.n av
Ġgr ave
ĠDo or
ĉ alert
.sub scribe
- profile
ĉb ase
ĠâĪ Ĵ
__ ĊĊ
Ġengine ers
Ġexplos ion
Ġd ari
ĉ Log
on al
Ġisol ated
{ i
ĠM sg
F uture
Ġrac ist
-w rap
ĠV ers
b org
IS ION
Ġ ÑĢаÐ
ĠY an
init With
Ġn omin
( empty
ÃŃ n
ãĤ ¤
ĉ width
Ġch amber
/ ajax
EM P
Ġnec es
iv os
log ic
*) &
cript s
Row At
ib lings
Ġe ars
Ġcomput ing
Ġm aker
ĠNe ither
b readcrumb
Ġserial ize
ĠWith in
Ġd ell
_TR ACE
= a
Ġwish es
-in ch
ĠD or
Ġinnoc ent
ĠD ol
Ġint ens
for ced
ĠB IT
Ġphotograph s
Ġcas a
ĠL en
\F ramework
.S imple
Ġde ar
)/ (
ip pi
Ġown s
Pl ayers
Ġpropos als
.p i
us alem
D amage
Ġcal ories
ĠCreat ive
Ġ[ $
Ġ// čĊ
And View
è me
.c ustom
_f actory
command s
_lo ok
Ġstr cmp
Y N
a ired
Ġaud it
о ÑģÑĤ
ĠRe verse
ropri ate
et ics
< vector
.s elenium
. or
Ġpred icate
Ġfinish ing
Ġk le
ĠRep os
ĠK han
ĠM aking
ĠF S
Ġp ute
ĉ state
_S UPPORT
' -
orient ation
Ġexist ed
atur a
Ġexpect s
ĠSh adow
Ġorgan iz
å ŀĭ
Ġsusp ension
Ġu it
Ġsimult aneously
ĠAff ero
: ");Ċ
Ġro cket
c as
eter mine
ace ut
x l
ĠA MD
( graph
ass oci
_C R
.ar ange
(j Label
Ġbe ef
Qu ick
.c ard
] ):
- gr
.G ONE
_C LOSE
ĠNe v
ÃŃ as
Ġste pped
ĠFre edom
ĠW R
NS Array
_r x
_d ialog
Ġhot els
Ġ( \<
ĠD iamond
Ġassum ption
um i
( items
č ččĊ
æ³ ķ
Ġn el
Book s
åİ ¿
us b
ĠF IN
æ ¬
Ġcorpor ations
US A
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
.p roperty
ew ise
_ plot
"> ';Ċ
Ġpe pper
Ġsh ed
ĠMed ium
ĠC ookie
Ġoverse as
ed or
asure ment
åŃ ĺ
Ġ' .'
Ġph p
ĠPRO C
Ġexception al
( th
ĠJ et
Ġoccup ied
.set Image
ĠRel ated
uck er
M embers
PR INT
ĠG lo
_V IEW
} ",Ċ
Ġad option
[] )Ċ
ĠMiss ouri
ĠLin coln
eral d
Pop up
Ġf ate
- bootstrap
fe ctions
ĠP oll
_ARG S
in ance
-h ome
. ),
_d one
: ĊĊĊ
Ġdiscuss ing
ĠSQL Exception
Ġelect ro
ĉ req
Ġz w
Ġl ui
Ġover night
$ user
ĠW AY
Ġall erg
Ġdisappoint ed
Ġradi ation
Ġimpress ed
ific ates
Ġto b
CL ASS
Ġc uda
_d et
- post
ul u
Trans lation
-h and
.y ear
ĠM ongo
Ġun clear
. engine
WEB PACK
r ices
_AC CESS
Ġh olidays
per cent
.Id entity
ĠG ov
Ġpassion ate
!! .
ĠGree ce
plus plus
')) ;
G P
Ġexc it
.tab Page
_ cond
Ġspons or
M ODULE
_pro c
Ġ$ Ċ
Ġr ational
.T ool
Ġi hr
cc a
åĵ ģ
ĠE state
IB UTE
Action Performed
ĠS olar
¦ Ĥ
Ġequ ity
t id
Ġrec ip
.s imple
m k
ĠL uke
ĠGuard ian
Ġenc rypted
Ġdomin ant
. place
ĠN V
Ġtong ue
( Get
Ġst ainless
.P lay
Ġe b
ac i
.b uffer
readcr umbs
Ġvacc ine
p rom
Ġuser Info
Ġsl ug
Serial izedName
-w ide
Ġre actions
ĠY ang
ĠAdd s
(user Id
Ġpl ates
ĠM EM
Ġb ail
In side
et ed
Ġels if
Ġs ake
Ġc ycles
Ġì Ĺ
ĉ I
-c ollapse
ĠG MT
De claration
Ġg ros
Ġreach es
Ġcust ody
Unt il
t u
ĠCh en
Ġn x
( addr
ĠO ffer
Ġcol leg
ass ador
Ġm apper
ĠS IGNAL
ĠB loom
ĠH oll
ĠIm per
-d es
_s ite
Pro c
E qu
Ġat omic
ĠW oman
s ent
sc ar
Ġint elligent
ĠGet ting
ĠReg istration
ĠPh ill
Ġkill er
unic ode
Ċ ĉĉĊ
ĠJac ob
ĠCon st
Ġloc ate
Ġca us
ĠSch olar
Ġconstitution al
Ġinfl ation
ĠG ot
= array
end um
Ġtransl ated
Ġdiv orce
En tries
Ġs or
ĠQu ote
irl ines
U K
Ġexc el
( opt
ĠAD V
,: ,
Ġcontact ed
ĠD A
Ġr ings
ĠIndust rial
.get Context
Ġforg otten
ĠT an
Ġp ants
Ġo v
Ġdec oder
ĠPart ial
Ġv c
Ġbatt les
A rial
FRING EMENT
ir ates
, w
aint enance
ĠO d
ĠTechn ologies
åī į
ĠCar ter
.find All
N ome
B en
ĠUs age
ĠP icture
Ġbad ly
_p anel
Ġpat ent
ĠProt ocol
lot te
ĉ player
je ctions
Ġd ou
_re lease
urn iture
_t ax
ĠF ields
.d ataset
_m aster
CLU DE
ĠPh arm
b st
Ġoper ational
.c ell
Ġident ifying
Ġj wt
t uple
ĠT C
ĠC ro
ix map
- components
gener al
Ġo z
_D e
_d ouble
ĠTo o
.View Group
g ate
d ings
ph otos
Ġgrand e
ol lect
_l in
Ġaw ful
f ilters
Ġaltern ate
es p
Ġcomp ress
e o
ĠS cale
Ġind irect
Ġinv oice
ĊĊĊĊĊĊĊĊ ĊĊĊĊĊĊĊĊ
Start ing
ĠPl ayers
ie le
. then
Or d
ĠT uple
Ġb out
ĠStat istics
Pre view
Ġp uzzle
ĠW idth
ST ATE
Ġover lay
ĉ on
Ġin fr
Ġsm allest
lock ed
ÑĤ о
ss l
Ġde emed
Ġs co
re ck
Ġj Button
Ġmiss ions
ç§ °
.Selected Index
T ABLE
Se pt
Ġacknow ledge
Ġstrt otime
ĠT ell
ĠD ak
Ġal uminum
Ġf ence
ĠSt ars
CON FIG
Ġretro fit
Ġemph asis
/ header
ĠS omething
in ished
=' ".$
ĠValid ators
Ġpol ar
section s
.as px
Ġas pir
.M ock
Code Gen
Ġpe ut
Ġaccept ing
Ġback ing
P icture
/ ap
еР³
_SE C
- use
annot ation
Ġcogn itive
Ġg rip
h our
ĠLeg al
Ġep ic
.t oolStrip
.not ify
.L ast
OR IZ
M iddleware
cri ptions
l ash
_F OUND
ĠLiver pool
Ġ{} ",
Inst all
Ġn it
Ġfig ured
[ len
.W in
.pl atform
Ġgam bling
(d t
av ery
ĉ include
Wh ether
R outing
Ġther ap
Rem ote
ĠL oss
y ll
Ġappro ached
ĠV ehicle
ĠAl pha
Ġvoc ê
ans wers
NS Dictionary
cons ider
un used
ĠF an
or able
f re
ĠDIS CLAIM
ĠAct or
. ]
to Have
.user Id
Ġspeed s
ew ay
Ġrec urs
ĠÐ ³
_pr iv
! âĢĿĊĊ
Ch oice
Ġsett le
Ġplan es
' },
T om
IT ER
! "Ċ
å »
achel or
Ġsepar ation
Ġd al
ad j
Ġreg isters
r iz
ĠNot ice
Ġl u
Ġcour age
Ġax es
cell ent
.as ync
Ġcompat ibility
ç «
Ġ! ĊĊ
ĉ title
Y LE
ĉ message
U UID
OLD ER
ĠH H
ĠStyle Sheet
Ġaccess ed
. validation
t asks
Ġpoll ution
.c anvas
Ġing redient
ĠC abin
A h
old own
ĠNO I
ĠÃ Ĺ
[ f
ed uc
y alty
(n ot
_ State
am en
Ġda o
ud ad
ell ers
} &
lic ity
_W INDOW
Ġt atto
val or
.R ange
Ġrefer enced
ĠRes erve
M oney
SCRI PT
/ product
cho ices
Ġt in
ãĤ ĵ
Ġsepar ator
Ġp kg
am med
ĠM AT
! !ĊĊ
Ġr aid
Ġmotiv ation
ĠX P
ĠBack ground
ĠQu aternion
.define Property
ik er
ĉp arent
ĠOrigin ally
ant age
ĠH ans
Ġtim eline
.c ur
op ic
ĠSe qu
m ust
ĠCo al
Ġform atter
_R GB
Ġ_ ("
'} ),Ċ
Ġ= ================
ĠF UNCTION
Ġl ng
ic ates
l ive
_ engine
Ġtown s
')) ĊĊ
ĠP K
( api
ĉs canf
pack et
.ph one
á Ģ
ĠAnd y
_N AMES
PL Y
Ġmin s
im i
Ġbr ick
Ġbl ade
.std out
}` ;Ċ
Sh ift
ĉs b
ĠCheck s
Ġphenomen on
Av atar
Ġmin istry
ro se
ĉ File
Ġtit led
( LOG
Ġg an
des ign
(), čĊ
Ġb ones
st m
ÅĽ Äĩ
ĠInput Stream
Ġvol unt
ĠSerial izable
Ġfight er
ĠDr ag
T witter
Ġsubs id
ç ¼
Ġfor ums
.load ing
log ged
_ this
Ġterr ain
Ġir re
ĠIn g
ĠC N
_object s
. uid
Ġconscious ness
T INGS
ĠG all
Ġport ray
ĠDevelop er
Ġparticip ant
Ġ" ;čĊ
/ model
ĠOper ations
^ \
ĠL ater
Ġrais es
-n one
.m eta
=' .$
Fin ished
Ġrepl acing
Ġsam pling
ĠJ en
" There
RE AL
A LE
ìĬ ¤
Or ders
_param eter
ĠOlymp ic
Ġtr ès
Ġare na
i ol
; ?>
Ġimpact s
ĠW S
: get
Ġfl ights
ĠRuss ell
c amera
F n
s igma
Ġfor cing
Ġloc als
Ġdepart ure
Ġcelebr ation
ĠS ay
ï¼ Ĵ
ĠH ills
.has OwnProperty
Ġtyp ings
.A PI
Ġdon ation
Operation Exception
.Act ivity
c plusplus
ĠChar lie
Ġimport ed
Ġd ann
Ġoccas ions
Ġimplement ing
Ġpur ple
.d ialog
SQL Exception
ern o
Ġw ars
Ġpast e
Ġdecre ased
Ġhar sh
Ġel abor
input s
ĠView s
Ġerror Message
_m ul
ĉ write
ĠC op
ĠAnn ual
(b utton
Ġv ida
b ars
ĠHar vard
ĉex pect
Ġindex es
Ġdocument ary
Ġf lesh
OR LD
ĠD elta
M AND
Br ush
-c olumn
Ġdevelop ments
method Visitor
s lice
ĠP DO
Ġinvest ing
ir able
Ġxml ns
ï¼ Ľ
art a
Ġthe ories
_c ity
Ġ$ __
Cre ating
( pr
D ropdown
ism atch
ĠN ET
'] )){Ċ
ĠVal ues
ĠSE O
ĠST AT
Ġe cosystem
Ġtem pt
Ġ\ \
Ġ// {Ċ
ĠChrist opher
ĠKent ucky
ĠHttp ServletResponse
Ġhy brid
y on
Ġfeed ing
ĠEx tra
N orm
IT CH
ĠSe an
ĠUp load
m un
p ur
Ġp ersistent
ĠID C
ĠPer form
.m erge
_ room
Mean while
! ='
ĠW el
Args Constructor
.D atabase
Ġcount ing
() *
Ķ åĽŀ
ĠT OP
m ill
ĠD T
IGN ED
ĠK B
Ġcomp ly
S outh
_c ollection
Ch apter
Ġexpl aining
_ AM
_t s
c ards
Ġqu el
Ġp ole
Ġtouch down
ĠO thers
Ġpe ers
ĠType Error
Ġsix th
Ġche er
Ġdis pute
us c
) ],
th umb
Ġh iding
ĠS IG
lik es
ĠP AGE
.Ref lection
Ġhead quarters
T ING
ĠG host
M LE
$ Ċ
Ġcontr ary
ext end
'] ).
FF ECT
ĠP interest
úmer o
ric ane
ĉs ession
Ġcr ystal
- Control
overn ment
og raf
- action
v olume
ft en
Ġun con
Ġan imate
Ġle ase
sc r
Ġref use
ãĢ ĭ
ft p
in formation
Ġeval uated
Ġin jection
Ġj ack
Ġwork shop
æ³ ¨
PT H
ĠT s
off er
ĉ os
Ġking dom
M issing
Ġlaw makers
ext Field
Ġsing ing
ab i
/ client
.m edia
ATEG ORY
Sign ature
% ',Ċ
ĠF uck
][ :
Ġsens ors
/ com
ĠPr imary
.S QL
_pro gram
Ġp ills
Ġinteg ral
Ġfle et
Ġdro pping
.s l
Be en
Ġp ets
Ġadvis ed
Ġdr agon
_ EDIT
( im
F ER
ĠDr ug
(r andom
Ġcomp ression
ou st
[ %
Ġbuy er
h op
R oles
man age
Ġpain ful
ĠBr anch
-mod al
en ant
ĠM esh
/ font
ĠG raham
Ġâ ĺ
Ġn c
ĠFranc is
Ġspec ification
Ġdam ages
- config
Ġthe oret
sec ure
_m ulti
aceut ical
Ġdemand ing
en ne
IST S
() ));ĊĊ
Re ason
Re cent
ph ase
Ġps y
_M AN
Ġvolunte er
å ¿
istrib uted
li o
Ġproduct ivity
_com m
S pring
n is
. weight
ĠC ancer
Al loc
ĠT weet
Ġsepar ately
ĉ check
_p roperties
. Unit
_CL K
Ġg t
Ġ( );ĊĊ
Ġhand y
ĠThom pson
Ġunn ecessary
ĠRe ader
G N
= request
ĠU tility
.Re pository
ĠA x
hy dr
ie u
Ġth y
Ġl t
_m ail
ä¿® æĶ¹
ail and
ĠPhil ip
Ġbit ter
Ġbet ting
Ġtim ed
ock s
' a
Ġal gorithms
Ġre interpret
Ġto ss
ro gen
Ġhop ed
( selected
Ġvent ure
TE X
ĠLe ave
.Sub string
Ġgr ateful
uk a
ĠCon sumer
Ġag greg
C ircle
ภģ
_block s
Ġleg ally
Ġ" |
ãĥ ĥ
. board
.A b
Function s
rec ipe
è ĩ
ĠO xford
Ġwho les
.B uild
_ch anged
h ai
Ġdepart ments
I mp
Ġcoal ition
IN FRINGEMENT
Ġemp ower
itch es
N orth
Ġinfl amm
ON SE
Ġmiss ile
ĠR aj
ĠIss ue
Ġat oi
ca led
.Cont rollers
ĠW olf
Ġcrush ers
á» ĩ
.A uth
.add Attribute
h is
Ġbo ots
.c lean
c amp
Ġten ant
Ġt une
Ġ{} '.
Ġwork out
Re po
Ġpartial ly
MI SSION
j amin
ĠS B
Ġdetermin ation
Ġ' ');Ċ
ĠB eng
Ġv os
Ġin hab
/ lang
s burgh
Exec utor
h one
ĠCh allenge
_link s
.Le vel
Ġunder ground
-c ode
Ġoptim ization
log ging
_de st
Ġsn ake
Ġchemical s
_IMPORT ED
ado op
ĠTH AT
man aged
Ġredu ces
ĠRE AL
ĠG uy
_GENER IC
/ ********************************
. amount
Ġd ere
get Time
Ġp ant
an onymous
Ġharmon y
ĠAl an
Ġscen arios
Ġd irt
ht ags
M c
Sh ell
r in
{ čĊčĊ
.p ow
ĉ client
Ġconspir acy
Ġad mission
ĠReg ional
ĠView Controller
ĠPhilipp ines
Ġde pos
Ġp ap
ĠP ad
P aul
.Com boBox
Ġt utor
ĠRec ipe
w riting
Ġcontrib utor
OT H
Sm all
V I
Ġh acer
e qu
ĠEx amples
h uman
.m essages
ĉt yp
Ġ( čĊ
ĠS SL
LE N
ĠRom ney
( grid
ĉ min
Ġ> ĊĊ
Ġfr uits
Ġvot er
In line
pan e
ĠC ollections
char set
Ġsp am
z b
item ap
Ġsucceed ed
_C OL
Ġel apsed
im eter
Ġrecover ed
T ensor
hatt an
.set up
ist o
( head
ĠS IZE
Ġtact ics
Ġdist ur
Ġpre val
ici os
( Value
_c ols
ĠF at
Ġse al
Ġs ons
Ġens ures
Ġpress ing
= &
igen ous
Ġharass ment
_ JSON
Ġign or
yn omial
om er
_st atic
Ġsignific ance
Ġcirc les
_S ystem
Ġdiscipl ine
Ġdress ed
Ġs phere
Ġclim b
_ actions
ĠB ab
Ġ' =',
_s chema
" use
Ġund ers
Ġc ups
.s creen
/ new
Ġappe aring
T OP
vis ed
cl ang
Ġinvestig ators
Ġmyster ious
Ġprom ising
Ġqual ify
Ġc ave
Ġequ ip
= x
G T
( link
. velocity
. erase
ot er
++++ ++++
pro fit
Ġz ones
_ uid
- ser
Ġobject ives
Ġmil f
web kit
(m atch
ne h
ĠAssoci ated
ĠT odo
= d
C am
Ġv ocal
Ġs udo
( EX
Ġtr ou
AB C
.b ean
ĠG round
ĠRE ST
we ets
In g
im on
_b us
ĠC OLOR
un to
Ġf oss
ĠLink s
ä ng
/ forms
pr ises
Ġachie vement
C ALL
ел ÑĮ
ĠVer ify
_S OURCE
apt cha
ID D
_re ference
G old
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĊ
Re ceiver
Ġa j
_d irection
} ]
ĠCom pet
Ġb ang
ĠC ass
- url
te chn
ĠJer usalem
long itude
' );čĊčĊ
Ġwin ners
T asks
ĠD MA
Ġtool tip
İ ·
ĠB ra
_d uration
cur y
parent s
----
Ġpass port
W C
ĠÐ »
cess ion
ĠY ellow
Ġenc ryption
' ĊĊĊ
Ġlist ings
ĠCommunic ations
._ Ċ
Ġ""" čĊ
Ġf b
Ġstrict ly
ĠL iter
ĠEnter prise
_b ottom
A KE
k et
Ġt am
B etween
_T OP
Dis able
Ġfil ing
ĠCh ron
SE QU
Ġ& ___
Ġf al
ĠS LOT
Em bed
uth er
ĠRest aurant
Ġreal istic
! ');Ċ
ĠDE AL
ĠPer iod
.get X
Ġse hr
"] ').
ess a
ĉmem cpy
Ġacknowled ged
sen al
ĠUnivers al
Ġ' ';ĊĊ
/w iki
ien ne
ĠNS Array
Ġaccept ance
Ġl iver
Ġtoo th
Ġacc us
ĉ LOG
val u
åĢ ¼
Ġs ectors
periment al
/ class
_g o
Mich ael
ol atile
ĠPRO F
Ġcomp rom
special chars
Ġâ ľ
ĠisEqual ToString
ĠH ung
.as List
/ go
> >(
ĠK ir
Ġint ros
Ġsk etch
Ġsk illed
Ġim mer
Ġade quate
_re p
( header
_ like
Ġper ceived
ss h
Ġassum ing
Ġf f
_u uid
ul as
Ġdemocr atic
. entities
S eries
aph ore
Ġnew er
} (
SE C
ai ro
Ġcomm od
Ġprivile ge
Ġde ux
ĠH op
.' /
ct ic
. ';Ċ
=
ĠU T
et ies
_CONT ENT
.re lease
.dis miss
Ġf c
oun ge
p wd
_p rev
M gr
ĠBuffer edReader
w ritten
ĠE b
Ġ )ĊĊĊ
uit o
Ġcontrovers y
Ġdis posed
Ġf oto
List View
/ create
ĠC OL
comm unic
Ġfre ely
un al
ov id
ĉ tr
p agination
ĠCommon s
E lem
ĠR EM
Ġcorre lation
() +"
ĠH ide
and ing
( vec
it os
ĠC ult
Ġnut rition
val s
Ġdetermin ing
l ord
Ġsc andal
Ġshall ow
od ash
_s erial
ĠS lo
Ġdis pon
Pl ot
ick le
Ġ ell
Ġun employment
F M
ron s
l ı
M o
Ex ist
ID S
Ch o
ĠKey board
.p arser
.Get Object
Ġsp ells
Ġges ch
Ġmagn itude
_S L
isd iction
Ġ' );Ċ
ili ans
Ġsh ar
ĠPro b
uilt in
Ġtun nel
> C
ĠWar ren
Ġoptim izer
ĠSER VICES
_ oper
get Attribute
ĠMc K
_s elf
.r s
" )ĊĊĊ
Get Component
er ce
Ġt ous
un its
'] );čĊ
Z oom
/ E
Ġobs c
Ġfast est
on line
Ġpeace ful
ff en
Ġc argo
ĉ pr
Ġseek s
z u
Tr im
Ġw ard
Ġver d
Ġblog s
.exception s
ĠPrem ium
ĠN etherlands
S afe
Fin ish
ĠAl bum
_A CC
= this
v irtual
] >
_L ABEL
ĠN ich
_w in
ĠA aron
W P
; $
aim s
ĠImage View
Ġend less
ER A
_DIS ABLE
Ġcancel led
- us
Ġins pection
em in
ĠG rey
- open
Ġiter ations
. owner
Ġk eras
.P assword
ĠR y
ĠIN S
A ir
ĠSe veral
.Tab Stop
ING LE
ĠH air
ĠCan vas
AA AA
Ġfl aw
ced es
.Re port
í Ĭ
ĠT ips
cript ors
.trans action
.S pring
Ġview er
Ġins ights
è¾ ĵ
ord ion
U INT
se ek
ĠA uf
ìŀ IJ
Ġstr ain
To oltip
Ġd z
ign al
ad t
Ġu c
fin ite
Ġn m
.c md
ĠMy Sql
[ data
.j ackson
.t ree
Request Param
_ agent
") ]čĊ
Ġass ass
( Constants
: ss
ĠM AN
+- +-
ĠB ottom
print s
ĠS ame
@ Autowired
sw ap
ici ón
Ġprotest ers
Ġh oney
ĠV eter
(C alendar
- ad
ĠBrook lyn
L ife
_V AR
ze ch
ĠC ALL
_C AST
ĠE lection
Ġthick ness
V ery
_IN TEGER
- dev
)) ))
ap at
oo oo
d emo
Ġparse Float
ĠR ather
ST IT
m aker
[ current
chron o
Ġch rist
ãģ ª
ĠD etail
ư á»
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
Ġs ul
id ency
Q ue
Ġeleg ant
ap ons
Ġdish es
Ġinteg ers
( read
find ViewById
ĠAm ount
ĠSk ip
Ġhab its
* )(
Ġmon sters
M AC
: end
Ġfr ank
As sembly
Ġd fs
Ġne ut
_TYP ES
e qual
loy d
( uri
Ġch i
Ġdefend ant
Ġconflic ts
Ġv il
- js
ĠPe ace
Ġmut able
) sender
ĠF ocus
å» º
Ġapprec iated
s leep
ĠR ED
C ulture
Ġdesign ers
_g enerator
c odes
/ ex
.Get Value
umb led
.scal ajs
per or
Ġveter ans
Ġ} )čĊ
Ġun fortunately
_C REATE
M ass
ĠCL AIM
ĠMe et
_s upport
B ank
() .Ċ
D ark
_LO W
ĠMin ing
ĠO wner
ier a
Client e
Ġencour aging
> S
Ġboy friend
ĠH alf
ĠA CC
A ff
_ ar
-l ife
c x
.J Button
iz ado
.z ero
.open qa
ot on
.text Content
Ġto ll
at ie
Ġball ot
- number
. Exception
ĉ params
c ircle
-m ap
Ġn ap
ĠRob ot
ĠI ch
reg istration
Am azon
roll ment
( exp
Ġt anks
ĠG ordon
Ġmach inery
Ġbas eline
æ ĭ
Ø ©
ĠCon vention
ĉ config
ook ies
m ult
Rec ords
ĠE ST
Ġgar bage
Ġcon form
id al
Ġb arg
Ġsurv ived
Ġinvestig ations
.contains Key
---------------------------------------------------------------- ----------Ċ
ort ion
Ġhor r
_ http
Ġm ant
] ;čĊčĊ
b inary
em pl
Ġin quiry
ĠMean while
Ġcollect ing
.Entity Framework
", ĊĊ
ĠP ic
@ Inject
ick ness
ĠB inding
Ġcont rolling
re verse
Ġch airs
semb led
( add
Dis abled
an as
.trans late
-------- ---Ċ
Ġref lected
"] ĊĊ
Ex ternal
Ar row
Single ton
% x
Ġ Å
Ġan cest
ĠOr leans
ĉc md
Ġprohib ited
ith metic
(ch annel
_c ss
For ward
.s ocket
Ġl uc
â Ĩ
ĠFire fox
ĠM ovies
) _
. ends
( shape
Ġde alt
Ġs aves
Ġgl ory
Ġmej or
Ġbreath ing
Ġ eller
get Data
Ġang les
Ġtool bar
Ġsp acing
IP S
Ġflo ors
_ACT IVE
Ġsh uffle
/ shared
ĠE le
ed ish
Ġweb cam
.ex pect
il oc
ĠIn cludes
Ġtweet ed
Ġ: )
ĠEss ay
F ix
-b etween
_ web
.con v
Ġrac ism
Ġreflect s
um m
иÑĤ е
_f ooter
/d ocs
ĠP our
Ng Module
.initial ize
pattern s
_ In
ĠAb b
* čĊ
Ġsent iment
b uff
_count s
Ġre use
ch unk
Ġim posed
Primary Key
Fore ground
Ġconsum ed
? !
Ġd ick
Ġch ron
ĠF ern
Ġrespons ive
Ġin sect
icult y
Ġr w
Ġal ike
Ġsub set
ĠCook ies
ĠP air
Ġt ier
IF O
av our
ĠQ U
, sizeof
Ġmerg ed
m v
it ol
yl on
Ġjump ed
. role
ens aje
R ules
Ġb rowse
An imator
Ġy oga
Ġvari ants
Ġcour tesy
ur an
p bs
else if
Al t
ĠL ane
CL K
IM ARY
_PRO PERTY
ï¼ IJ
Ġch an
Ġgrad ually
Ġsh ake
Ġbl onde
... ");Ċ
-se x
Ġgame play
ac ies
.ref resh
US B
ĠPl ot
W as
iss ippi
ĠT ensor
Ġcryptoc urrency
Ġdifficult ies
De leted
With out
_ append
_ ver
")) čĊ
Ġhonest ly
Ġp ivot
Ġtem ps
_p s
ĠUn like
[: -
V S
_in f
Ġjun ior
Ġanim ations
Ġfile path
?
[ \
Ġoper ates
_ red
ĠBoot strap
le ad
e ffect
 ½
ĠS ter
ĠB uck
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
Ġde puty
Th an
Ạ¿
ON ENT
ĠHe at
ethe less
] ){Ċ
Ġkosten los
(); //
Ġdeploy ed
>{{ $
Ġun icode
pl aces
ĠC offee
.S E
ĠP AR
(t xt
ge bra
Ġf ires
Main Window
med ium
Ġ( âĢľ
Ġl g
Ġc mp
/ base
_l ayers
_ entries
Ġadmin ister
ĠSU CH
B P
ĠScott ish
ĉčĊ ĉčĊ
gu ard
ĠStr ong
In sn
ĠC AP
as ury
ĠSE E
C lock
er ie
\ models
Ġ$ $
ĠC ab
Ġwur de
Ġsold ier
Ġcl ips
Ġarrang ement
ĠW onder
ĠH orn
Ġsc ared
Ġc ure
m kdir
Ġal igned
ĠP ink
Ġland ed
Dim ension
Scroll Pane
.ch at
.W ith
ĠTr ain
] .Ċ
Ġth irty
Ġdur able
Ġl d
Ġlate init
Ġch arts
Ġins ult
.F atal
_ ct
Ġm asks
CLU DED
Pres ident
Ġcol ours
g ments
.at tributes
ĠF lex
ĠC lock
ÃŃ cul
im en
J O
ĠReg ex
_L INK
Ġc ouch
ĠIN PUT
Ġbe ating
b usiness
pre ced
. unit
ĠF el
N ever
osp el
.start swith
ĠE PA
. only
Ġprevent ing
y er
Column Name
Ġelev ation
fl u
icy cle
Ġoff line
Tool bar
Ġcompet ing
) ].
Ġm og
Ġis Valid
As k
_ av
_l at
AN C
ĠJ oh
k ers
Ġgu ards
Ġch ains
ĠSimple DateFormat
.st atic
Ġvess el
Ġm ud
Ġst abil
Ġst ret
g m
am ation
ç ľ
-w ith
Ġro s
_P A
Ġresult ado
Ġconf idential
ĠTok yo
ĉ using
ĠMath f
omb ine
ĠESP N
Ġdeal ers
Ġdismiss ed
TR Y
Ġte ens
rec ords
Ġw ings
g allery
account s
_L IB
Ġj acket
ĠNS Object
Ġst ones
ĠDel ivery
ĠD iet
/w atch
Ġto ilet
ĠG uest
.d ay
Ġint val
Vis it
Ġinvestig ated
Ġpent ru
ĠThe atre
andid ates
L ang
ĠS erv
Ġcont rollers
Ġset Title
N P
am y
fl at
( ui
_d ocument
è ĥ½
ĠC oin
ĠAd ams
pt ic
Ġproduct ive
Ġaccompl ished
čĊčĊ čĊčĊ
Ġdefer red
ient es
Ġs inc
ol ars
Right arrow
Ġvari ations
( offset
.Layout Inflater
Ġsus pend
Ġprevent ion
_pr ivate
_ js
âĺ ħ
Ġw ieder
at um
Ĵ Į
Ġappear ances
.D ocument
Ġvalid ates
cal endar
} ";Ċ
.d emo
con ut
Ġcorre ction
ĠDe al
Ġbatter ies
.d uration
, \
_m arker
m ulti
Ġh alt
Ġc ms
Ġsh aped
B ro
re duce
Ġ ####
CT OR
ĠBen ef
Ġicon ic
Ġp iano
Ġeffect iveness
| .Ċ
Ġa jax
Ġv olumes
ภ¡
Ġcl js
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ
ath s
ra its
å¤ §
Ñ ĸ
_m ult
Ġfasc inating
A verage
Ġpr é
ĠChair man
.find Element
_p in
Ġcomp aring
Ġdark ness
-F i
- server
Ġselect ing
ster dam
ĠPart s
FORM ATION
Ġnot ing
Ġp ile
og s
Ġpa lette
_d o
it ize
() (
Ġdef ining
Ġremain der
Un its
_T ASK
Http Client
S ocial
Ġfund ra
N R
ch est
C urrency
.ad apter
Ġd op
un ting
ANG UAGE
" He
ĉ index
_p ackage
.I con
Ġrep et
m ass
=" .$
ĠS ud
Ġl id
pro vince
ì ľ
G PIO
Ð ļ
ĠMy SQL
Ġdoc s
ĠG A
Ġip sum
K ernel
Ġaccept s
Ġfit ting
Ġcu ando
Ġd uplic
ĠBro ther
ĠK le
num s
Ġmor ph
Ġ ########
ĠCG Point
< unsigned
ä¾ ĭ
ĠD uke
.set Bounds
q s
or ic
j er
Ġregard ed
Http Request
Ġbond s
Ġthorough ly
enc ent
Ġhighlight ed
Ġac res
Ġwork place
ĠL ux
Ġqu ot
.in flate
Ġdocument ed
Ġadd iction
Ġmut ation
.c ity
Ġbott les
ĠRepos itory
on n
err no
ARI ABLE
åº ¦
_B EGIN
gl as
' })Ċ
ĠMass age
ĠWh it
reg ex
W A
Ġout let
- head
Ġexp ired
ĠTh ai
/ include
grad ient
scan f
Ġse am
w al
ĉb uf
B earer
Ġprec ious
if acts
co ord
Ġexpl oration
.get Y
(h andle
Top ic
ĠV ent
r hs
---- --Ċ
ĠB right
Ġg uild
m other
st orm
Ġmunicip al
Ġin k
.T YPE
w l
...
_DE V
=" ./
_ book
th y
itzer land
op les
tr action
ĠCam eron
ĠAnd re
. results
Ġch rome
Ġsec ured
Ġsur faces
) <
Ġtob acco
ĉs printf
Ġesc al
Ġstd err
ĠMel bourne
Ġdistrict s
Ġm att
oh en
ĠdataGridView CellStyle
( Model
Ġsens itivity
K A
trans port
.get Date
Ġsub tle
UG IN
.m ouse
Ġaltern atives
Ġel le
cor ation
re ation
æ Ľ
_N ORMAL
Display Name
Ġf ancy
ISE D
M OD
.Read Only
ĠU b
ĠC u
ic ol
ĠN elson
ĠC OR
an za
ĠSp ark
Ġ"\ \
-- ĊĊ
wo ocommerce
Ġremember ed
ver ity
ĠExt ension
ĠP D
Ġsearch es
.s o
ĠF ooter
Ġ= '
ĠW ARNING
- lo
ĉ table
Ġdraw er
p icture
ĠFant asy
st ory
Ġm ême
# ĊĊ
_s lice
olt age
H ar
/ y
ĠE R
d ie
ĠP OS
. actions
(M ain
ew art
ape ut
ĠS TE
idd ing
.read Line
Ġsearch ed
W ed
.f igure
ught ers
(). __
Ġor bit
sh ipping
Ġfriend ship
ĠSh ift
- or
qu o
W HERE
ĠE sp
.for ward
off ice
Ġi ç
ĠCh elsea
Item Selected
ach ers
de leted
rou s
Ġ"- "
ĠGr an
ĠðŁ ĺ
-p ower
et ta
Ġrem inder
ens ors
ĠAll ow
ÄĻ d
_t eam
Ġc rown
t icket
Ġcollection View
l ace
Ġfix es
ĠH ub
c atalog
ĠId entity
Ġexcess ive
ĠN avigator
_B R
- play
ĠCamp aign
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ
as ive
Ġw c
ĠBe ijing
/ www
Ġmake up
Ġdist ances
Ġsatisf y
CON D
Ġw ound
() ]
Ġviol ations
Ġst ays
/ #
il ine
\ Exception
ĠM otion
Ġhe al
_pl an
r ases
(m ain
App le
Ġcomple ting
Ġdetermin es
Sc an
Ġste al
ĠS oc
An alysis
Ġfavor ites
Ġcamp o
on er
ĠFl ight
.. .ĊĊĊĊ
)) )));Ċ
-c ount
Ġp w
As String
Ġsex ually
First Name
ĠEsc ort
cal c
ĠW ikipedia
Ġdo cker
ĠS weet
' id
Int o
ĠH unt
.equal To
Ġlabor atory
ĠBUS INESS
File Dialog
Tree Node
.E nc
ĠMax imum
Ġmo thers
æ µ
Ġfr act
.start sWith
Ġhard core
. ob
å§ ĭ
Ġ>
_ ro
(( *
?? ??
_ vertex
ke it
ĠH alloween
T I
ĠV a
_c ar
="{{ $
Ġrandom ly
ани е
Ġshock ed
ĠPok émon
sign al
ĠSD K
m iddleware
Ġtre ating
Ġburn ed
Dep artment
ĠS pect
Ġclient e
ĠRed dit
_ avg
Ġinstall ing
_ alpha
, data
Ġset Id
ĠList View
( property
Ġcross ing
ĠOb j
ĠW ard
ĠRedirect To
ĠP resent
Ġdraw s
ched uled
Ġlegisl ative
Ġtw ist
ĠS tra
ĠA FP
ĠCh ap
- pr
: CGRect
Ġc es
R outes
n of
Ġvis a
ĠT CP
ĠEV EN
iv ial
ĠLet ter
R AY
Ġimpl ode
.e q
=' +
Ġmotiv ated
.vis ible
.sh ort
> manual
ĠTechn ical
Ġcorpor ation
ĠH W
ank a
T AIL
ist as
Ġperform s
ĠBeh avior
.F or
_ ORDER
ĠK ick
Ġcallback s
_d r
ue go
h ub
uff icient
sk y
Ġb p
ht able
ĠON LY
ĠAUTH ORS
.Arg ument
" };Ċ
ĠTh under
ĠK om
.Sh ould
A UTH
ah u
_p ayment
Ġst arter
ìĦ ľ
ìļ ©
B log
.p atch
Ġgovern ed
ass y
-f ound
Ġthe ater
ĠFont Weight
ĠBat man
" If
.R andom
_d elta
ĠC E
Auth enticated
Ġdr one
Ġc ous
r adius
M er
( None
ĠN J
_ headers
Ġam er
py test
ĠA ctions
ĉĉĉ ĠĠĠĠ
Ġet t
Ġh oly
Ġun comfort
ĠN in
ĠDec imal
ĠM essages
.s ender
] ])Ċ
Ġembr ace
Th ough
/ sp
Ġcult ures
Ġhigh way
t ar
.f ail
_h idden
ĠcomponentDid Mount
ĠW right
Ġj ag
_ il
../../ ../
ig u
F ood
Ġa ce
Ġa ños
US D
Ġmut ual
Log ic
Ġtem ple
Ġbrief ly
ĠT rip
class method
default s
Ġch unks
,, ,,
ĠRe ason
$ id
-up s
Ġdam n
Ġtruck s
Ġun limited
Ġsc ulpt
ĠC ards
Ġaut or
ĠTest ing
Ġdies e
sh ops
ç ´
(p ayload
ĠP ATH
ĠMem orial
Ġridic ulous
eg ree
-w inning
Ġre hab
Ġsophistic ated
wp db
ĉ path
! ";Ċ
_S YS
.s peed
Ġso ap
s uffix
W rap
Ġenh ancement
à ī
ú b
Ġplay list
Ġmix ing
ant idad
=" ";Ċ
ĠRev ision
ĠBe at
.in c
-w ay
enc ias
ul ers
C at
id el
ĠSh ip
.set Color
Ġthreat ening
.mod ules
Ġafter wards
ĠD ashboard
Ċ ĠĊ
Sign al
Ġpr imer
orne ys
ici ary
Ġl igne
_p redict
Ġa est
_ https
> :
ĠL ex
Ġrencont res
eg ral
sc ala
_f amily
ÃŁ en
_s ym
Ġuncert ainty
ĠVAL UE
Ġ} ;čĊčĊ
Ġbro ader
Ġh orses
ãģ Ŀ
ĠK al
ob a
_IN ET
ĠK ill
j query
am ination
[ @"
Ġm uj
## #Ċ
First OrDefault
then Return
C he
/ footer
Ġpark s
as je
ĠG ulf
Ġmod est
. Init
ï¼Ł ĊĊ
Ġpros pects
Ġs vg
Ġå ı
.D ialog
_N ET
Ġ( ($
Ġe k
ĠW arning
ĠM K
< LM
Ġ' čĊ
i em
h etic
Ġi x
th ink
-sh adow
ĠE ld
ĠNev ada
ĠLe af
ĠG ROUP
Ġprom o
ent ine
ĉ Map
ĠModel s
ĠK rist
_k ernel
-m ade
Ġc err
As sets
ell ar
Ġinv oked
.v ue
Ġcult iv
C losed
Ġgener ates
ffff ff
thes ize
s qrt
ĠCast le
.c ar
Ġke en
und a
ĠC row
ĠSing h
y thon
Ġbe ans
l arg
æĸĩ ä»¶
Aw esome
unc ate
Path s
o ji
(c urr
CON DS
Ġm im
Ġshould ers
H ard
ast es
а еÑĤ
Ġconv ince
de cess
m ade
ĠC MD
. Im
Ġcha os
ens ively
Ġcool ing
Ġbur ied
(' @
_S e
ĉĉĉĉĉĉĉĉ ĉĉĉĉĉĉĉĉ
.com pany
.sub mit
ph ant
Ġboot strap
_h elp
à §
.d ump
Ġdif er
_m apping
Ġcirc ular
Ġescort s
Ġb ere
Ġgrad u
ĠLeg end
im edia
ĠBar celona
Ġbed s
åĪ °
ãĢ Ĭ
_v olume
Ġtremend ous
Ġsc aling
Ġp ins
en as
type param
D ashboard
render er
Ġsp i
Ġ& $
ĠSk in
alm art
Ġh ockey
Ġ'" .$
Ġerr no
Ġb ew
Follow ing
.M odule
er able
ĠM ilitary
ĠR io
_ available
ĠSur face
Ġst ab
IF IER
ĠL IST
Ġd ashboard
Ġcl usters
.pl ugin
Ġj ou
ĠDec or
F our
Ġdel le
****** /Ċ
ia z
in de
ch ing
Ġget Item
.Add ress
ment ed
A meric
Pl ain
Ġus b
ĠPract ice
_ ment
.bl ue
H int
ÑĢаР²
Ġconn ector
Ġinher ited
и в
Ġinterval s
Ġc ere
Ġu d
Ġin con
.Ex ists
ĠM ic
F K
(c ard
.Set tings
Ġexhib ition
Ġon Pressed
Ġrest ored
eng u
. def
Ġrec v
." );čĊ
enc oder
ather ine
( dest
az ed
# endregion
sem bl
, M
ob y
Ġп еÑĢ
.C all
Ġattend ance
-b order
Ġaddress ing
ê n
ĠLe v
Ġb ash
ben ch
C redentials
Sp acing
( of
_RE SET
ig uous
Ġcr uel
Ġcross ed
Ġle ur
ĠG olf
or rect
Ġpack ets
ĠData Set
Ġpart ly
SEQU ENTIAL
Ġindic ation
ĠS alt
ac ia
Ġ* );Ċ
ĉ info
ĠView Bag
on z
Ġeditor ial
ĠA rena
Ġs ir
_ Static
( socket
s u
cho ose
.m onth
.M y
é ri
; font
do es
Ġcon verter
Ġsal v
Ġl r
Ġinflu enced
(f eature
ĠQue ens
let t
_M ON
& amp
Touch ableOpacity
O FF
Ġmetab ol
( iter
Ġvit amin
ĠIND IRECT
aut om
_p ublic
Ġadjust ment
Ġspecial ized
w indows
.add All
Ġaccording ly
ĠJ OptionPane
Ġcell spacing
Ġqu ad
Ġcre ep
Ġout lets
}` )Ċ
Ġpri est
_TH READ
ĠMar x
ĠBy Val
Ġc ual
éĿ ¢
Ġtempor arily
An n
ke leton
å ¥
ĠLO C
au er
der ive
Ġbeh aviors
as ename
ĠCent ury
Ġhor rible
ME SS
_ List
we i
P at
ĠCh oice
_F ROM
ĉ line
.in voke
.B ottom
Ġnow here
." ĊĊĊĊ
_ export
Ġstrugg led
.Ap pearance
ĠJ Button
ĠJer emy
([ [
Ġkick ed
mar shal
st aff
es ity
Ġqu iz
_e ffect
Ġ} ));ĊĊ
m el
b anner
ĠP IN
Ġin vention
Ġcons olid
Ġop s
ĠB etween
j ack
ern ational
Ġsacr ifice
ag ation
ĠJ oy
Ġam endment
ĠS old
Ġprison ers
ан нÑĭ
Doc uments
) ])Ċ
ust ed
ĠLine arLayout
os o
_E M
.s elf
.M iddle
) //
Ġ\ '
Ġfuck ed
ĠM urray
Ġprof ound
_E LEMENT
ult a
il ers
port folio
J une
t cp
mod ified
ĠTr ace
ĠK el
aly zer
) =>
ĠRep air
_B E
Br and
u art
pre view
Ġiniti atives
run ning
b ang
ĉ update
ĠCo ach
R ich
Ġy outube
Ġrit ual
app a
ĠRobin son
prec ision
//////////////////////////////////////////////////////////////// ////////////
=[ ]Ċ
Ġcelebr ated
OT O
Ġin clusion
J P
' ;čĊčĊ
Ġnot able
(_ .
Man aged
Ġgu ides
& nbsp
ated Route
ĠAd just
Ġcol ored
_s cores
ĠTes la
_pro gress
.in st
[' _
.fl ags
Ġf close
_O PER
ż y
_n ote
Ġtrans gender
å ķ
RI PT
Ġabs ent
Ġam et
Ġoper and
ë ©
Ġh ood
to LowerCase
av o
ĠCirc uit
ĠL ind
-- }}Ċ
= m
Ġsup press
ĠM AP
i ang
- admin
Ġside bar
ĠB u
ĠH ex
, F
ĠSign al
Ġtrans parency
ĠFeder ation
/ V
Re q
Ġpul se
Ġt ends
Num bers
% '
Ġde port
dat as
_U INT
_ tra
ok o
Ġ" ?
comp et
sole te
und ry
Ġover lap
}` ,Ċ
. ly
_sum mary
ĠL ost
.C enter
Ġdis ability
.Serial ization
Ġge om
Ġ? :
ĠW o
Ġsh ipped
Ĥ æķ°
Ġu gly
Ġexcit ement
Ġext erior
Ġcheck out
Ġk ur
, D
ĠAl aska
Ġsyn thetic
ĠB udget
ĠSub scribe
Ġ& Ċ
ÈĻ i
ĠY u
ĉ query
} .Ċ
Ġtr aged
ass en
Ġaccommod ation
Ġphys ician
Ġren amed
Ġtid ak
z Äħ
Ġmin us
ny ch
_EX CEPTION
thread s
Ġt ire
_c reated
ens ure
Ġworth y
Ġexc use
Ġclo th
.parent Node
/pl atform
ĠU FC
ĠG tk
un ny
Ġg ibt
ke ley
h um
(t x
ĉ dev
Ġout fit
do ors
Ġf on
ic ut
vol atile
Ġhom osex
Max imum
Ġexp end
Ġ});ĊĊ Ċ
E q
ond ers
dep artment
ĠPhys ics
" });Ċ
Ġpar ad
.S tr
Ġse le
IF IED
Ġdel ivers
iv an
Ġrespons ibilities
Ġadvoc ates
è µ
ĠR ID
.param eters
M etrics
ron ics
ĠUITableView Cell
A bsolute
ip se
yl um
MLE lement
_VAL ID
< title
D lg
p aces
Ġsynd rome
be ans
_d atabase
oz illa
ĠM eg
DB G
Ġl ub
Bag Constraints
ab ad
Ġproject ed
_BY TE
.Size F
st reet
ĊĊĊĊ ĊĊĊĊĊĊ
ĠLO SS
Ġdirect ors
/ news
Ġnurs ing
ĠD one
. HTTP
dis count
ĠR ot
To Many
Ġen abling
Ġauss i
ost a
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ čĊ
è½ ½
Ġhel icopt
ĠIn side
ä¿¡ æģ¯
is per
ĠAll ah
ARCH AR
Ġroll s
Com pare
X P
Index Of
S UM
Ġass ured
ĠPhys ical
End point
.G lobal
.d etail
Ġthe ft
.j upiter
Ġhum or
.R ender
A lex
.c ap
Ġbuff ers
Ġdis pose
t ion
.p resent
z el
, P
Ġdesper ate
.get Column
Ġtw in
ì ĸ
.c an
Ġf lee
ĠIran ian
Ġstick y
ĠU TC
L T
//////////////////////////////// ////////////////
Ġl icensing
_PO INT
ĠM aps
Ġl ol
= models
-t ab
ĠN ash
_log ger
tor ch
ĠCON SEQUENTIAL
Not Empty
/ react
Ġp f
Ġassert ion
Ġsubsequ ently
_c an
Ġpand emic
og ue
"+ Ċ
_ ent
_P aram
.ĊĊ ĊĊĊĊĊĊ
Res earch
C apture
Ġbel oved
d em
Ġextract ed
Ġf ights
ER C
(a uth
position s
Ġrevers ed
(st ack
Ġ_ )
uto ff
_fl ow
ç Ĥ¹
( Game
Ġex cluded
ĠCS V
c g
ĠT itan
p ause
Ġcer ca
Ġdump ster
L ess
Ġkotlin x
aster xml
Ġpoint ers
Ġfl ows
ĠT un
ĠMain Activity
Ġdis cret
Ġcomb inations
vis it
_b ind
oot ing
d ater
_look up
.n io
Ġswe at
ĠR d
Ġscient ist
ĠP ixel
@ NgModule
Play ing
Ġunf old
Trans late
ĠLaw rence
ĠFIX ME
B ill
ĠR IGHT
Ġwhere ver
Ġo ok
vid ence
Ġ] ];
ĠSk ill
unist d
ĠðŁ ĻĤ
Ġfem ales
-- )Ċ
İ· åıĸ
ĠF red
Over all
Ù Ĥ
Ġess ence
Ġthere by
Ġw ounded
ĠD OWN
les son
text ure
R ound
Ġautom ated
ĠÐ ¡
ĠUp dates
Ġsh ade
p ublish
ĠG ear
= lambda
Ġle ver
) +"
h ill
Ġrad ar
ry ing
Ġ" ).
f illed
Ġline up
Ġd l
Ġworks pace
V o
_d t
ë ²
_ Item
NS URL
. verify
ĠHawai i
G od
M arch
Ġ[â̦ ]
Ġpel o
ur ious
ĠPitt sburgh
. It
C lean
> \<^
Ġi os
s ound
"] ;
Ġfre ed
rot tle
ĠL ower
[ count
å Ŀ
Ġp ale
ĠWay ne
ear th
_c ategories
U CK
.m etadata
Ġsum mon
H OME
олÑĮ з
Ġmanufact ured
Ġdo ck
Ġcompet itors
_MODE L
ok ia
ĠH ey
Î ¿
Ġback ward
ĠPO SS
rop a
Ġc ri
_O BJ
Trans port
-h igh
Ġerot ik
_s lot
Ġart ic
_f ramework
-ser if
ĠSql DbType
') (
+ "/
Ġw ore
S il
Ġst oring
ĠPh ase
u ant
Ġb ump
in ho
Ġd ign
Ġback s
q q
(h ash
Ġge o
Ġt ender
Log o
! )Ċ
ĠM X
ĠAr thur
esso a
_C h
Ġbed rooms
="# "><
Ġth roat
ins ic
.int eger
Ġpr imitive
Truth y
Ġfacilit ate
Ġcreat ivity
ĠD NS
Ġg ra
ue z
Ġcount less
ĠPol and
' M
ĠD ist
Ġv est
Ġcert ification
á» ij
h eld
ext ensions
( static
Ġgr ades
ĠU ber
ãģ Ł
Ġ[ ])Ċ
dat os
Ġget Data
ĠCh arg
ĠB S
.m icrosoft
.v ideo
.d irection
->{ '
l ua
ape st
Ġbo iler
ere k
Ġdec ides
.j ar
IS C
ĠW ords
(C ON
EMPL ATE
ree ze
sh ots
app s
unt ed
.set Name
:: <
-b old
ê ²
å¯ Ĩ
Long rightarrow
Ġunf air
Ġear ning
Ġsh elf
URE MENT
Ġid le
_M ENU
.C ustom
AG ER
- "
_s witch
b ecause
) view
m are
_ condition
ĠStart ing
M vc
(p re
d ump
_LO CK
at etime
.c allback
ĠC er
op ol
ib rary
Ġres ervation
ĉĉĉĉĉĉĉ Ċ
lect or
grad uate
Ġgener ous
Ġ ion
ric ao
m q
_com plete
(c ursor
ĠForm Control
: center
Ġsub stitute
ĠPl anning
Ġp ension
Ġrecommend ation
ĠT ags
Ġg ef
Ġalbum s
Ġwash ing
ro c
Ġtr ains
at ings
Ġex ponent
ack bar
- ln
á g
.Data Annotations
ĠE IF
ĠMalays ia
ĉ PORT
on us
Ġcle ver
Ġpe u
> ĊĊĊĊ
ĠArg uments
Ġdebug ging
( right
' D
com pute
Ġfin est
OR AGE
Ġspect acular
ph rase
Ġind ia
Ġlegend ary
b irth
Ġcom posite
Ġg rows
ĠT D
Ġep id
Ġlaunch ing
] ][
Min utes
ĠCh a
Ġclean ed
Ġwitness es
uk an
ĉ Type
Ġhab e
par agraph
ĠJ Panel
ĠH ann
Ġvar ied
ĠP okemon
ĠM UST
åĬ ¨
.vis ibility
op up
^ [
.exp and
Ġ" ',
.f asterxml
_ auto
ĠShe et
mark er
Par cel
ew s
ĠStr ategy
-m aking
Ġun ve
Ġtrail ing
Ġclick s
ĠGet Component
ĉ content
IG ENCE
ERN EL
NSMutable Array
Ġb reat
Ġharm ful
¶ Ī
Ġbes ides
Ġb oring
Ġbrut al
v ang
(p arse
qu ick
Ġpy test
Ġswitch ing
() ]Ċ
Ġì Ħ
L ER
ĉf ont
Ġnet t
) ]ĊĊ
(/ \
æŀ ľ
to Array
Ġbre ed
ĠC AR
ĠWe apon
A bs
t ot
Ġset Name
apt ive
Ġ: ,
Ġesc aped
ord en
ĠP ri
th umbnail
Ġdescri ptions
/ styles
ĠPC I
Ġal phabet
astic search
NOT E
Ġc ialis
ĠGr iff
Ġpor que
Ġprote ins
pl ays
Ġst ating
Ġimag ination
Ġfac ial
ĠMe chan
Ġarr anged
_ used
Ġarrang ements
ĠP ipe
host name
Ġprov inc
T it
.Flat Style
ĠS plit
ĠLo ader
.c c
Ġclin ic
---------------- ------------
Ġb aking
ĠEN T
ne ath
ãĢģ ĊĊ
AN E
.EntityFramework Core
app ers
. ic
ĠNg Module
ĠF ORM
Ġ' ;
-pro fit
h w
en emy
ĠE ye
Ġca ution
t own
Ġur ged
ĠJim my
ynchron ous
-s ized
m aking
, {
] ',
_ Object
ah oma
Ġactiv ist
IN VAL
ĠCom mercial
ĠOr lando
(t ab
ĠØ ¨
Al gorithm
Ġher itage
Get Mapping
Ġfail ures
ri os
at iva
Ġt et
Ġcar pet
( Z
th ree
Ġdisc losure
. ERROR
_c alled
Ġd ial
Ġoccas ional
.E rr
Ġfunc ion
caff old
Ġrele asing
ï¼ī ĊĊ
_ Value
ĠV ari
y ellow
Ġstrugg les
.c al
ĠDak ota
ĉc lose
Ġsand wich
Ġanaly tics
Ġ** )
& #
ĠJ os
Ġpass ive
AT TR
Th rowable
ĠM un
ĠU int
(dis posing
ar ak
ĠLe aders
Ġaffect ing
Ġitem View
Ġeconom ics
f v
๠Ģ
.r b
ĠOver all
Ġwealth y
Ġev olved
nd a
ĠH us
re strict
um en
ĠA gricult
! ĊĊĊ
Ġexp ires
Ġspokes person
int erval
ĠÃ ¢
Ġque en
(n il
ing o
He ap
Ù İ
Ġcompl ain
S ym
ĠCl one
ĠR u
ĠW ILL
ĠCr ystal
/ content
ing en
oint ment
Last Name
av icon
ĠIB M
ĠDim ension
an h
icip ants
ĠAn ne
.pro gress
Ġal go
ob il
ĠV oice
ĠF E
Ġg li
Ġv ed
Ġprevent s
\ Column
Ġfol k
ett i
Ġm n
ĠCL ASS
Ġdisplay ing
ĠK l
ĠF err
d uto
. ib
Ġd ados
' name
-s pace
Ġit alian
Ġin verse
Ġd ense
ut er
ĠI Enumerator
-s ign
Ġnation wide
Ġperson a
Ġsol ved
Ġdram atically
Log out
Ġgr av
Ġanalys es
ol lo
Ġl amp
. team
ĠE rot
= ["
Ġd ancing
Ġ?> /
Ġc ater
ff e
ĠSh a
ĠB os
ĠRE QUIRE
ĠMon ster
ĠR B
ĠI DE
Ġsu its
Ġform Data
( theta
Ġsp atial
= NULL
ĠSql Connection
Ġ à
ĠV enez
ĠMor ning
Ġpublic ations
ĠNON INFRINGEMENT
first Name
ud s
W ould
_HE AD
Ġinvest ed
st able
f red
Ġcommand er
SE S
âĢĶ a
an che
ĠM ovement
ë ³
S uite
Ġjur isdiction
ë¦ ¬
ĠB eth
j Query
ĠIs a
Ġd ental
, *
ĠL imit
ili ation
=" {
b ast
Ġt urb
is y
O OK
Ġadvoc ate
im ag
LE CTION
л ÑĮ
(c ategory
.de c
Ġun iqu
_s n
Ġattract ed
ĠÃ ī
ĠRun ning
_ edges
ĠDis able
_A S
åĽ ¾
Ġnetwork ing
_br anch
H aving
toBe Truthy
G I
Ġcamp s
se p
-p art
Ġ)ĊĊ ĊĊĊĊĊĊ
ustral ia
ĠRe ports
rit o
Ġwa ist
_pl us
ĠW W
-p erson
Apr il
Ġs ar
.t ar
Ġagricult ural
t ic
Ġt cp
Ġset Value
agent o
ĠAp pe
p iler
CA DE
Ġan che
atch er
Ġcom ics
Ġl bs
_se gment
'] =$
itt ers
ich er
G INE
Ġutil ize
ĠC ursor
_ex pression
Ġd ag
< long
Ġr hyth
æı IJ
Ġconsult ation
Y et
")) ĊĊ
_M AC
c ould
Ġ' \\
ĠV o
ĉ http
Ġg s
ph er
- grid
J ames
J ul
Ġsch on
Ġtensor flow
ĠLOG GER
am as
Ġsc ipy
Ġconv iction
. ag
Ġadministr ator
)) {čĊ
Ġn un
" group
P or
Ġnur se
ex pression
ak y
ĠHe avy
. opt
.get All
Ġover l
/ ",
_c ountry
ç İ
ĠG ENER
_r oute
ĠD al
 ´
ol oad
Ġuncomfort able
(m enu
Ġhost name
' ");Ċ
Ġcalcul ations
-c lick
Ġprotect ive
ãĤ ¯
_F orm
ung s
Act ual
m f
ĠProcess ing
ĠIn ventory
(m atrix
app ropriate
w eg
ij a
Ġch r
Ġr ifle
-w sj
k ar
Ġindepend ently
I OS
Ġconsist ency
v n
/s ystem
ĠCh anges
Ġexp ose
ici ents
Ġrel ate
ĉ next
è ¨
ud es
Ġglass es
F XML
.... ..
ĠP df
Ġappro ve
Ġ{ \
Ġexist e
)) (
ARE NT
оР¿
ĠL atest
ĠNiger ia
.Inter faces
Ġrem oves
En emy
Ġen force
vert s
ĉ pos
_text ure
W ARD
ĠINC IDENT
( container
Ġdef ending
ĠR X
ĠH ook
br is
ĠFl ask
Gr ay
. )Ċ
vis ibility
ĠRedirectTo Action
err al
_e lem
Ġres on
front end
_variable s
ater ia
Ġ+ "
ave led
RI X
Ġdef icit
_C heck
YY YY
To One
sp y
Ġun ited
end ent
Ġp ode
ãģ Į
C AT
(f mt
ĠBon us
Ġre ck
 º
Mod ules
Ġvac uum
R adio
ĠDAM AGE
P en
ĠPark er
; ;Ċ
ĠRe ally
_n eg
p ending
Ġnomine e
ĠC ategories
ĠUl tra
We apon
Ġdef ender
I ss
ĠG ender
ĠD ress
Ġimpr ison
Ġbank rupt
imension al
PH A
ĠStr ateg
ĠPROF ITS
Ġp atri
//////////////////////////////////////////////////////////////// ////////////////
de legate
Ġfor State
Ġdev oted
_m ake
Ġterror ists
ĠS nap
_n av
ĠA A
ĠI an
ĉ app
Pl acement
_h dr
< K
Ġs ang
st roke
- Q
> =
-m odel
av ana
ĠW ang
ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ
ĉ init
Ġentreprene ur
at ivo
L ove
- over
W ater
Ġmod s
g ence
Te chn
> x
.T ask
m oney
ib aba
' });Ċ
ĠSpec ific
ĠLine ar
_O PT
Hash Code
( Player
.Contains Key
Ġcoll apsed
trans parent
_R ANGE
View er
(c fg
Ġsort ing
Ġinf ected
ĠN ach
Ġaccommod ate
.element s
_P ART
ĠSex y
= get
( year
Ġx hr
: ]
ows ki
Ġsum mar
ĠÂ ¿
Ġint e
Ġwork flow
ĠTai wan
vers ions
åı ij
Ġsurprising ly
Ġopt ical
Ġpro ces
Ġdisag ree
Ġnue vo
ĠC AM
sort ed
le ases
ist le
Id ent
ĉ event
ject ed
Ch unk
V ars
.pro vider
Ġproceed ings
Ġin clusive
Ġart work
end ants
ï¼ļ Ċ
se en
Ġl ig
Ġm akers
_f un
Ġlength s
Path Variable
[ item
ภµ
De ad
FFFF FF
ĠUr ban
up les
ich en
(null ptr
.s pec
, System
UR ATION
(j ob
å¼ ı
Ġtrack er
Å Ļ
ĠM R
ĠSQL ite
Ġd to
Ġ; ;Ċ
Ġm int
ĠInt roduction
ca o
Ġquestion ed
Ġf itted
rev ision
s q
Ġm ig
_un its
_ async
Ġf lick
});ĊĊ Ċ
Ġnot re
}` ,
F ilters
Ġm undo
_d ays
Ġfr m
ut c
Ġval s
ew idth
ĠGener ator
ĠArt ist
ĠID s
ĠArt icles
re ater
ĠComponent Fixture
. =
Ġr ou
- no
.b ukkit
eg g
ĠD iff
atic s
Ñĥ Ñĩ
âĢĶ ĊĊ
ĠChar lotte
by e
Ġ} );čĊčĊ
ĠV ik
ĠB row
Ġl v
ĠG ib
-w ing
GL IGENCE
(I l
ĠEngine er
.W ait
ĠP ictures
Ġr het
Ġth ermal
Ġpr aise
< >();ĊĊ
ĠSp ider
P ause
ĠB aker
Ġsl ower
Ġ} ]Ċ
_en queue
Ġdisappe ared
ĠT icket
IN UX
_LOC AL
аÑģ Ñģ
@Inject able
comm unity
Gesture Recognizer
åĽ ½
Ġsca les
Ġ- (
/ '+
ĠS it
Ġexecut ives
ard ing
Ġad vers
Ġback wards
ĉ context
ĠH amp
ĠP F
ĠDe ck
ĠCra ig
A merican
Ġb ell
Ġpro l
uf en
Ġr ng
ar shal
ĠSim ply
first name
sh ore
J uly
Ġmort ality
ĠâĨĴ ĊĊ
Help ers
Ġbench mark
em ade
Ġorganis ations
.g son
ĠText Field
Ġciv ilians
.Array s
ĠMiss issippi
Ġinter mediate
get User
_cl uster
Rel ative
fore ign
.querySelector All
Fore ignKey
Ġreason ably
-------- -Ċ
C ards
ĠK am
ĠTh or
Ġroll er
-e lement
ĠC urrency
dd ie
ALL Y
ĠR A
Ġper met
aa aa
Ġhom ework
ĠV it
Ġm old
ĠF er
[ start
Ġstatist ical
Ġsc ary
_H OME
.B egin
Con struct
ogen ic
ĠDEAL INGS
Ġtamb ién
ix on
. ind
ac re
Ġtransform s
ĠN ap
.B lock
uss ia
pir ation
ul ent
Ġce il
Cl ause
na ire
T ES
Ġne at
ST D
ĠReg Exp
per form
: )
Ġun ions
Ġs ublic
Ġw inds
lo ating
g lich
Ġp agination
S kill
App ly
ĠOper ator
ist ogram
Ġqual ities
C ross
Ġde com
], "
ĠJ uan
.mod al
.Ch ild
ĠRog er
STIT UTE
:CGRect Make
a lette
Ġst a
as ide
Ġbl ur
ĠW a
if etime
re ed
control s
Ġb ins
Ġп ол
*/ ,Ċ
U IS
ĠR ou
ĠDem o
- awesome
ĠCh ain
Ġh asta
ĠB art
. KEY
Ġvend ors
nof ollow
ĠD est
_b uilder
Ġarg ues
_ answer
g oto
ĠRES ULT
ĠM ON
Ġp oder
o ons
_C ASE
Ġrep lic
Ġfin ancing
ĠD ATE
c ern
_tr ack
t ies
/ logo
ĠNE GLIGENCE
get Type
> T
b et
g irl
ĠINCIDENT AL
-s ite
.tr igger
ĠL isa
_input s
Ġrel atives
Logged In
Config ure
I K
. accept
Res ume
ĠD raft
Ġ* >(
ĠW A
ed ian
ern ess
ĠLayout Inflater
*/ čĊčĊ
oth y
Ġoblig ation
Sub scribe
Ġth umbnail
ex ist
Ġins isted
ĠU ICollectionView
ĠAng ular
Ġtable ts
ĠImp act
ãĢį ĊĊ
ah o
Ġcharacter istic
g d
Ġ= ================================================
our t
` .
App ro
Co ordinate
Rem ember
Ġmar ine
] =='
ĠAdmin istrator
.get Default
Ġforg ot
ĠStruct ure
V ue
ars ing
m oment
k w
_c ursor
Att ack
Ġath letic
Ġdiagn osed
Ġend e
åĪ łéϤ
H ouse
ĠP ARAM
Ġw iki
ĠO pp
Ġcons ervation
Ġs nd
_t em
sub str
ĠC ape
.s im
UT ION
an an
âĢĻ un
Ġg y
- work
Ġcomp elling
=' #
ĉs ub
Ġdirect ories
íĬ ¸
Ġtouch es
out ines
.C ollection
s chedule
.l at
ĠDo ctrine
CA A
ĠRe fer
Ġshift s
Ġlik elihood
pre ter
ĠF emale
Ġinter cept
Ġl ou
çĻ »
Ġr ug
ĠC rown
Ġ************************************************************************ ****
- product
Ġprompt ed
ung le
d ocker
ĠT u
ĠUn ique
_ Error
ul os
Ġâ Ħ
Ġ( `
Get ting
_s cal
ĠEn h
ü t
Ġsust ained
Ġp atches
Ġpros per
ĠG aza
_l ight
Ġin cons
-------- Ċ
ĉĉ ĠĠĠĠĠĠ
S F
C N
: ";Ċ
ĠColl ins
( *)
Ġcomp ilation
'] čĊ
Ġcon sequence
, ...
Ġd m
ĠB LOCK
Cl uster
Ġsk i
(arg c
T uple
Ġjo ins
ĠSher iff
W ar
ind i
Ġcomment ed
H OST
Ġinv itation
apan ese
Ġperm its
preced ented
_z one
ĠA my
_R D
Min imum
Ġinv ocation
.en able
icht en
- owned
" id
_PO INTER
F ac
Ġspecific ations
Ġnom ination
Ġg p
< (
Ġrob ots
ĠJ erry
Ġhold ers
Ġw and
c ms
Ġ} ))Ċ
.To ast
ĠI List
B ased
z oom
/ style
ĠBe ck
M en
Ġcontrib uting
Ġund o
ĠO H
Ġadd Object
Ġe igen
sign up
éĶ Ļ
Ġdist ant
PAR ATOR
ĠM ari
Ġm á
E mp
ó s
Ġì Īĺ
ev t
+ j
p ark
ĠSt ay
ĠD un
Ġso y
> %
az ines
Ġti empo
(m e
p resent
.Th is
Ġedit ors
F IELD
.W ork
ĠUn iverse
Ġdr unk
.t imer
Ġalter ed
ĠN ar
ëł ¥
.Act ive
id or
ç Ń
.delta Time
Ġawk ward
& quot
ĠSaf ari
Ġtr icks
MENT S
div ision
Ġvary ing
ĠHigh way
Ġphotograph er
ĠSt ewart
Ġlast ing
.P re
.amazon aws
ĠL uck
.D escription
ĠN az
n eg
Ġc ó
<<" \
ĠSur v
ĠU nc
Rec ipe
.Border Style
Ġmod ifications
- at
AT FORM
h dr
ak o
Ġsublic ense
ĠJ ump
Ġbe im
ĠMan hattan
. bool
_h w
ÑĤ ÑĮ
B in
Ġg ateway
" ":
ĠU IS
:" +
- def
ĠReg ular
/ testing
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
string stream
Ġdis par
Ġmob il
- read
ĠAd apter
ĠCh ampions
Ġsched uler
Ġk ills
ĠM ultiple
ir ror
Ġgod s
AD O
ak te
ĠUs uario
.c ircular
Ġre cept
ĠEx pr
Ġelder ly
Ġnic ely
Ġbest e
W ant
Ġclass ical
.s prite
obj c
ĠM ason
Ġsist ema
.Bl ack
es o
ĠZe it
Ġdiv id
Ġent ers
_sub ject
ĠPlan et
.w arning
ĠG ram
_t okens
Ġhousehold s
_c ustomer
user Name
c ross
Ġp ione
Ġass ists
_S M
ib o
Ġlo yal
Ġuse less
# elif
ĠUlt imate
C ome
g el
Ġd ich
xy z
ik el
ob ra
_s can
ĠInter ior
ĠN ice
Ġpl ac
ĉt arget
Ġvir al
ass o
() /
und e
ĠAd obe
O s
vis ited
ĠO W
ĠFe ed
ĠSe quence
Ġman ages
in son
ĠLouis iana
{ })
ĠH ab
ĠL D
Ġb ip
pr ites
(e lem
.h ibernate
él é
Ġoh ne
_trans action
Ġann unci
P ublished
ĠH onda
ĠT am
ĠP acket
_ selector
Ġchalleng ed
Process ing
-h over
Ġtr ainer
_c ancel
ĠNS Dictionary
ab ric
ĠM LS
_s ensor
Ġshr ink
ĠF X
th reshold
ĉH X
-m ark
` .`
S cheme
(f ull
_w riter
ĠS ys
Ġf led
ĠC in
-w idget
ĠPre vious
G ender
_ question
Fe ed
Ġscr ut
(p refix
ãĢĤ ãĢĤ
Ġin fections
Part s
Ġhier archy
_DE LETE
ĠPat ient
_p ay
Ġprom oted
Ġì ĭ
Ġcivil ian
Ġagricult ure
ĠP iece
Ġst ance
uts che
Ass ign
.A CTION
F ig
_r adius
ĠS ync
du cer
f ailure
ens ed
pt ime
B M
_dat etime
qu ivo
QUE UE
èĢ ħ
Ap pear
Ġsum mit
: void
Ġv ine
è® ¤
on ne
_TR ANS
.g reen
_ cc
Ġhung ry
Ġ" >
() );čĊčĊ
Ex tract
iz ens
Ġsol ver
Not ify
Ġeng lish
ĠSh opping
inter faces
RE Q
Ġil leg
ĠUI ImageView
Ġdis connect
ĠUnt il
ĠConserv ative
@ Column
Ġshift ed
Ġ: čĊ
Ġf ich
Ġd la
Ġsh oe
"), čĊ
ular ity
_RE SP
We ather
UI Application
. iterator
Ġag ing
.P arent
ow ie
(e qual
ĠCon v
/ default
Ġmeas uring
.pre v
.Is Valid
.F at
Ġs Äĥ
key words
with out
Ġso vere
Ġex changes
Ġm elt
Ġis lands
ĠInt egr
Ġjump ing
Ġg le
Ġjournal ism
Ġd ated
Local ized
ĠRef resh
Part icle
Ġa a
ĠSTR ICT
Ġb od
.Pro cess
_A UTO
ĠP ublished
e very
Ġtechn ological
ls x
Ġir rit
Add itional
Ġdel imiter
_l anguage
- area
bo ys
ĠT ube
Ġw at
Ġmechan ics
_ owner
Sp ell
ĠSt ories
.Append Line
Table View
h em
st ick
oll ower
I FF
ĠU V
oll ision
S UB
Ġcompar able
Ġdon de
s ales
ll vm
Ġ} ],Ċ
OTT OM
ĠPur pose
L ab
Ġinterview ed
o is
as il
.set Id
ĠIn struction
-- >
ĠMod ified
ation ally
ĠMe eting
è¯ ¯
# region
Ġrout ing
.f ocus
ĠYou th
< D
ĠN ag
contact s
Ġform ing
Ġm ie
',[' ../
ĠB P
Ġapp et
ĠTe acher
ĠT P
Ġann ually
outed EventArgs
ĠSpe aker
Ġre name
CF G
(" //
æİ ¥
/p ages
Ġpr és
ĠSp ell
.All ow
ĠINT ERRU
Ġ( #
âĢĻ ĊĊ
_G eneric
.im show
_t im
- face
(& (
atin um
Ġrevolution ary
ĠH ours
r ain
Ġany time
Ġab b
.j sp
Scroll View
ĠTr uth
Ġanticip ated
Ġacc ent
. checked
Ġspec ifies
Ġca f
Ġcell padding
Ġcook ed
ĠH ugh
pe ek
_R ATE
Ġd orm
/ čĊ
IV ITY
.Cont roller
(p art
.con straint
Ġinv asion
MO VE
Ġgl uc
l ename
Ġam en
eng lish
ĠSw itzerland
";ĊĊ Ċ
pe st
.col lect
N ib
ĠD ict
ĠE mb
(sub ject
Ġoutr age
Ġdec iding
Ġsent enced
F echa
" A
Ġqu er
Ġfont Family
Ġqu adr
- Y
_C ACHE
Ġanaly zed
Ġg aining
ĠAgain st
ĠSou l
ta u
Ġlight weight
ĠT F
ĠEffect s
.T ypes
.add Class
Ġv egan
é ģ
.' "
ĠExpl orer
.d etect
.sh ift
Ġoblig ations
last Name
Ġassoci ations
ĠTime Span
un ter
ĠF resh
Compat ible
P ub
id ges
. option
var i
.hash Code
Ġg eb
. section
- not
ĠSub mit
T N
reg istry
_m edia
Ġn aj
ff t
Ġm ate
-th ird
Ġp ockets
est a
Ġb ent
ĠN ord
Ġretail ers
ĠMor ris
."" "ĊĊ
W rong
Ġ ÅĽ
R ay
. ec
ĠB ind
_H AND
(n on
is Valid
Ġsimilar ly
_L IMIT
Ġdynam ics
Ġdist inction
ãģ Ĩ
< N
Ġor th
ĠToy ota
ĠK ate
ĠL S
or ie
ĠSpr ings
Ġf reak
last name
_M ULT
-st ep
" (
AD DR
Ġentert aining
_CON F
Ġdec oded
Ġst reak
Ġwait ed
Ġnot ified
rodu ced
vis ual
.Layout Params
æ °
es ian
f its
s pring
ĠBern ie
User Defaults
Ġped est
Ap pearance
ĠW iki
ĠNOT ICE
Ġs sh
Ġdur ante
ĠZ ip
ı r
ĠNAT O
Ġtw elve
Ġro yal
ï ¸
Ġmer chant
ĠF urniture
'] ),Ċ
, X
Ġfold ers
ĠG ate
ĉf unc
p ick
_us uario
ĠV erm
ment ion
ur pose
Ġalert s
x ious
_s ig
ĠF u
Ġ( :
Ġd umb
åħ ³
Ġaccur ately
éĩ į
R B
-s creen
ĠV ER
j our
Ġrom ance
uc ceed
. choice
Ġad ip
_d ims
Serial izable
ãĤ ĭ
.j ob
Ġpro g
uch ar
Ġg ently
ĠR SS
ict ured
_ENABLE D
ĉ label
aw ks
ĠEn sure
rem ember
ìł ķ
Ġtrans mit
{{ $
.Trans action
ur se
_rel ative
Ġs ized
ĠX X
ĠPr incess
ĠL arry
Ġpr ó
ĠÑģÑĤ ÑĢ
Ġs isters
estr uct
Ġcheck point
: length
ĠCar los
/ icon
_T ARGET
T okens
Ġpat ience
ĠSe lected
q ty
.show Message
Ġwild life
ĠP rops
b m
- arrow
Ġpar cel
fire base
ĠBen jamin
cess o
.t im
ĠG arc
. any
ĠHOW EVER
ĠK o
Ġgrab bed
_f rames
Ġobject AtIndex
ĠADV ISED
Ġsub ur
ĉ GL
Ġ}) }Ċ
-l ength
ìĭ ľ
ĠPot ter
_b uff
.g ui
ĠEnc oding
E lect
-m essage
Ġ �
Ġ ÈĻi
ĠArgument NullException
а ÑĨи
Ġmin imize
Ġrespond ing
$_ ['
ĠInd ividual
á c
ĠIN TER
Ġmast urb
ĠB in
(' $
ëĵ ľ
Ġopen ly
Ġ> <
Ġun to
olog ically
ĠM ul
VID IA
Ġsl im
ĠCommission er
( on
Ġunder neath
/ db
v ote
( Message
ĠP ope
Def ined
Ġsw ift
ur f
Ġadapt ed
SE L
Ġreven ues
Ġdiv ine
= y
Grad ient
_ act
Ġ/*! <
Ġpoly gon
ĠF DA
ĠC arr
at ables
(std out
Ġrefr iger
Ġco ordin
avor ites
ÑĪ Ð¸
Ġcompass ion
ĠPOSS IBILITY
- secondary
ur acy
Ġcomp romise
_A V
_ os
Ġbes ide
ĥ Ŀ
Ġl n
.pl ugins
Cap acity
al ah
.b in
ĠC RC
_b alance
Ġflex Direction
Ġam bit
Ġnick name
ĠFor ces
C LE
ĠSh ell
Ġs ail
ĠW riter
ĠA lice
d w
ĠInd ians
ĠMar shall
_S RC
Ġnormal ized
ĠJ ag
ãĤ Ĵ
ze it
r pc
ÃŃ c
.in line
Ġtrav ers
_n umeric
Ġutil ities
Ġev ac
IN PUT
ĉ register
M X
ĠCamp bell
Ġdatas ets
Ġdem anded
Ġinitial State
g an
Ġe i
Un expected
- web
tr ait
, Y
ĠT odd
Ġske leton
Ġoptim ize
ç¬ ¬
ĠU pon
ĠSt Object
Ġap lic
.'
AC C
al ous
Ġhash Code
ĠB ib
IN AL
Ġinv isible
Ġh eter
Ġsa fer
} //
. theme
.navigation Controller
_m esh
sk ill
ĠVi ol
 ²
ĠE OF
ĠK i
ym metric
Ġmax length
Å £
f riends
ĠEv ans
Ġle mon
Ġ( .
Sl ide
ĠTh ailand
ĠC ann
Ġam end
Ġc ir
Ġsil ly
es imal
_p ic
process or
Java Script
Ġevid ent
_d i
> P
v ron
. UN
Ġpaint er
izar re
Ġl av
Ġp om
p reg
= function
( serial
ific a
um ing
åľ °
ãģ Ĥ
- op
U CH
ĠH end
.prop Types
Ġy o
Ġrout ines
Ġcar ing
S em
Ġres erves
Ġprior ities
red its
IST R
Content Type
ĠSch w
/ media
Ġe str
Ġclim bing
- week
cher che
s ensor
To Array
ĠMont real
Ġcloud s
ĠInject able
ĠR ice
Ġpropag anda
_pro vider
Ġind oor
Ġin aug
Ġdipl om
Ġmess aging
_m ut
å ¦Ĥ
Ġk w
ON S
ari ans
R PC
) ]čĊ
-r ay
ĠS or
m all
Ġmarket place
Ġv tk
M a
og an
ig i
Ġspons ored
ĠD ani
.S EVER
>' .$
m ultipart
ĠW ol
Ġtable Name
ĠUser name
Background Color
Ġf right
_E MAIL
Sept ember
_val s
op ia
Ġsp otted
- Ch
Ġdata Source
/ "Ċ
ек ÑĤ
ĠRequest Method
ĠRe place
-d o
ah n
ĠPh D
] .ĊĊ
N ON
g ement
ĠTh r
Ġquiet ly
Ġtort ure
Ġte as
ĠC Y
Ġa tr
develop ment
-d etail
Ġlight er
Ġarg uing
Ġdes erves
Ġcur riculum
_CON TEXT
ÅĤ y
H ITE
ĉ ID
/ uploads
Ġt its
re o
_d rop
. UTF
Ġpick up
Ġgro cery
ĠP ure
Ġeas iest
Ph il
.f eature
(" *
Ġinvest or
t ok
Ġj ar
L os
âĢĶâĢĶâĢĶâĢĶ âĢĶâĢĶâĢĶâĢĶ
. queue
-s peed
M al
um blr
ĠCON ST
ĠH RESULT
ĠD ance
(file Path
Ġattrib uted
ॠį
ĠB und
co ins
Ġs ão
Ġp ir
person al
Ġpre lim
Ġprop ose
ĠT L
] ])
ĠSub scription
ĠK re
, len
.First OrDefault
) --
_product s
.Get Bytes
Sh ip
Ġenc rypt
ĠS G
ĠM yst
h ir
Ġiter ate
Ġint end
.mock ito
Ġch apters
( angle
ĠV lad
è® ¾
' .ĊĊ
Response Body
ĠAb d
de al
Ġbar riers
-out line
b ill
ĠF alls
_se cond
. include
. ceil
Ġoccup ation
ph ony
.move To
ĠJenn ifer
AST ER
; "><
ĠEn abled
Ġtermin ate
ĠI o
l ations
ĠTHE ORY
Ġear liest
Ġr ack
ĠSc ar
sh ake
ch ip
Ġu v
Ġall iance
п иÑģ
ĠGOOD S
z ione
ĠV I
Ġ{ -
Ġfilter ing
Ġmis con
.Dock Style
Ġb ush
Ġj unk
æ Į
ĠQ UE
Ġhook s
Ġfirm ware
Ġmiddle ware
d ic
ĠOak land
Ġarr ives
P ayload
p ixel
] |
Ġstart Date
.P RO
_a udio
Ġmid field
igid body
ĠSw iss
ĠCl ip
ĠD ump
ĠText Box
Ġg eh
y ield
od s
Ġrefer endum
Back end
ĠC ream
Ġdomin ated
ĠArch ive
Ġrid ers
.prepare Statement
Ġqu ando
Ġche f
w iki
in el
am pling
(" \\
Ġs ag
_pro xy
ãģ ķ
p do
.getElementsBy TagName
Ġdemonstr ation
ĠN PC
Ġarch ivo
end ance
Ġefficient ly
( actual
.t ableView
Ġm ush
Ġbe ars
_thread s
j as
ah un
Ġne ural
Ġdesign ing
ĠG DP
Ġlift ed
çĽ ®
ĠJ oint
ĠIn clude
ĠGi ants
Ġwithdraw al
ĠR ent
n ative
ĠSe ek
gress ion
_C PU
\ S
ĠSh ield
Ġsol ic
Ġbo om
yect o
Ġmanufact ure
ĠâĢ ĭ
Ġb box
Ġearth qu
ollect ors
:@" %
Ġlo ops
J e
alk ing
ĠWh ats
ĠBo ys
. book
ARG E
_p ixel
Ġsus pects
Î ¹
us p
ĠBM W
ie ces
(p erson
å¼ Ģ
é »
ĠPod cast
Ġb ou
( Item
à »
( Input
Http Get
Ġb urg
) ^
BO ARD
*/ ,
Ġg ulp
ĠB enn
Ġdeck s
.status Code
Ġac ute
Ġh ug
ug u
Ġp led
," %
h ape
Ġз ап
ĠMain e
.re al
Ġd alam
ĠMin or
.F loat
dis p
Ġt l
Ġen count
=> $
Ġf g
te es
ĠRec omm
ä l
Ġchem istry
Block s
O ID
Ġfore x
ĠApp end
Ġ{ *
ĠSup ply
CG Float
(b l
Ġat e
ador a
Ġg ust
Ass oci
> .Ċ
F ETCH
.s erial
widget s
ard less
ie fs
_F ULL
ernet es
ĠP red
Ø Ń
äº ĭ
ub ernetes
ĠL aura
Ġl abeled
High light
Ġanno ying
/ update
(d escription
Ġintim id
$ c
")) )Ċ
.A P
Ġ[] *
ĠEX IT
.H ost
ĠOP EN
.send Message
_c amera
_t ile
Ġth erm
onom ous
Ġdis adv
Ġna ar
index Of
ĠP P
.prot ocol
AF E
Ġtext ures
################################ ################
umb ai
.st ats
ĠG E
Ġi e
ĠST D
ĠM ann
.ref lect
K B
Ġd ive
.w av
/* ----------------------------------------------------------------
/ settings
.l ifecycle
Ġda ughters
or us
ub er
N ING
st ri
ĠT ip
Ġz n
Ġswitch ed
in et
uff y
ĠTransport ation
( conf
fr ica
ĠX L
ĠLe ad
_per cent
< Map
Ġthr ust
or b
ik k
Ġtra uma
Access or
ĠF it
ĠString Buffer
ex pl
(s creen
Ġaud iences
ĠO PTION
_ round
[ node
be h
-> __
per missions
ĠD etermine
.M an
Ġadv ances
. InputStream
Ġstrong est
Ġe Bay
Ġ# -
Ġdir name
ĠS MS
Ġmedic ations
Ġam ended
Ġchurch es
ĠImper ial
$ row
ĠMad ison
ĠIn sp
Ġaff air
Ġpsych ology
v h
Ġsever ity
âĢ IJ
Ġstri ps
A H
vert ising
Ġcon se
IM AGE
ĠSt ats
ĉs c
.C ursor
Ġfree ze
ss on
(x ml
ĠSus an
.t ile
ed ed
ĠĠĠĠ ĉĉĉ
uel le
ĠMitch ell
b ased
Oper and
½ æķ°
ĠF F
ĉstr cpy
ounc es
ild o
.execute Query
Ġapproach ing
ĠSe ven
Ġn uts
Ġr ic
ass ignment
Ġcalcul ator
ĠMur phy
ĠB ou
í Ħ
Ġbut t
Ġt icks
Project s
il ib
.text Color
m ov
_log o
( template
ĠIN IT
Ġimage View
scri ptions
OR ITY
Con sumer
Ġun precedented
Ġtour ist
Ġbr on
Ġcontract or
Ġlic ence
ĠN am
æ ¯
( transform
_AT T
P ref
ĠG am
Ġvess els
Ġh av
L ater
.To Lower
Ġurl s
Ġbreak down
Ġpen alties
Ġf oster
ĠU E
Ġcl ue
com ed
åIJį ç§°
-m ain
Ġp ts
Ġcount ed
ict s
/ post
Ġget attr
Ġp ing
ANCE L
Ġp ec
Ñħ од
ant om
ĠBlue print
ĠEvent Emitter
Ġl ä
æ ²
Ġstr aw
( comp
' une
> N
- client
es Module
-b ase
Ġret reat
_s imple
ĉĉĉĉĉĉ Ġ
fe e
') čĊčĊ
Control Item
Ġsubscri bers
ple ase
ĠE ff
Ġp ound
ĠBy tes
ĠTe a
_ activity
Ġmax im
Ġop code
B SD
. constant
; }
omb res
Ġcare ers
) .ĊĊĊĊ
Ġsp reading
-exp anded
ĠOr d
amar in
Ġmob ility
Un fortunately
ak k
N L
_ redirect
ĠP G
ĠS ensor
b ol
t ap
_MEM ORY
ĠUI Alert
plit ude
We bsite
ĠLog o
lo ve
[ ind
Ġalto gether
Ġwonder ed
Ġes per
ĠLib eral
Ġo ss
Ġel it
Ġst iff
od ox
_ment ions
ĠDou glas
_p id
ĠC K
ĠinitWith Frame
.b log
p kg
ang hai
QUI RED
u u
Ġm kdir
AT AL
Ġun h
in ces
st h
Ġhypo thesis
Ġc ata
ĠT B
ĠCl ar
Ġpre decess
Ġsitu ated
-w orld
)) /
Ġhead lines
.st at
Ġout break
sp ath
_FLAG S
ĠServlet Exception
S un
F ROM
ĠD ir
ãĥ»ãĥ» ãĥ»
_co ord
ĠOpt im
Mon itor
.b it
XX X
Ġtod as
f eld
ÑĢ Ð¸
im ir
Ġpolit ically
Ġmolec ular
Ġtrad ed
Ġ{{ $
ĠSw edish
Ġ'@ /
_RE AL
Ġw arehouse
t oday
, L
or p
< section
- br
ym e
ĠUser Service
Ġlib erty
Ġmoment o
( Image
< size
S ch
Ġj og
i ology
arent ly
Ġquant um
ĠAb u
Ġr im
Ġman a
Font Size
Build ing
st airs
AIL ABLE
Ġ& '
Ġs ect
Ġs igh
(b atch
.I Container
p oll
ĠCor ps
Î µ
ar u
ĠK ay
.r ange
_click ed
ĠRobert s
.N etwork
fin ish
- Man
Ġcolleg es
ĠF ine
")) ,Ċ
f ilm
Ġrem inded
Ġgest ure
out il
Ġthread ing
Ġobj et
Ġt ours
activ ated
.m kdir
= user
Ġre de
f ü
_SY STEM
p v
Ġcon gr
Ġmass asje
Ġpract ition
Un iversity
Ġtab index
Ð ĺ
S ets
Ġcount ies
g uest
f an
Ġword en
.d i
на Ñĩ
 ¿
ig Decimal
Ġsh ore
Ġg ö
Ġrep airs
Ġhelp ers
Ġcenter ed
OL LOW
Ġmap StateToProps
Ġc ents
< A
Ġexpect ation
Oct ober
Ġbg color
ca les
.C ON
ĠV el
Ġcry ing
-se ason
Ġfunction ing
_LOC ATION
ü ss
ber y
Par a
omin ator
- le
Ġeth ical
has htags
emp lo
Ġn úmero
( activity
.St op
.str ftime
IL D
Ġto e
ĉ Node
") čĊčĊ
ĠPu erto
Ġexec uting
ĠG UID
Ġoppos ing
al ph
Ġexhib it
_fl ash
Ġme ille
Ġjson Object
H ero
aint ed
_D OM
Ġw il
Ġslo pe
Ġm Ã¥
ĠIraq i
Ġorgan ize
ĉj Query
H UD
sh ine
. we
ĠSk ills
pons or
Ġcon clusions
Ġre forms
Ġrel uct
n amed
ĠOl iver
Ġ// }Ċ
- looking
Ġf og
ĠH O
ĠF ried
Ġinev itable
ĠData GridView
H our
il les
log ical
Ġconnect ivity
.tw ig
ĠK yle
(d st
- Sh
ĠStud ios
( Level
.j et
_PRO TO
-de coration
OT HER
Ġread ily
.Param eter
Ġmultip ly
ĠL IB
ar med
Ġsoon er
æ Ħ
_ ES
Ġfoss il
ĠA nc
âĢľ This
l odash
Py thon
Ġhist ogram
west ern
Ġinf ant
Ġco ordinator
Ġn ib
: m
Ġres pected
Ġdef init
& T
_p ad
ĠTr igger
th al
Ġimage Named
Ġbeat en
ĉ rc
ĠPal ace
Ġhaz ard
Ġisol ation
_ rc
cont re
OUT PUT
Ġre ign
ĠPl ate
AT ES
Ġfl ux
Ġpack s
.get Selected
Ġparticip ated
Ġneed le
-de pth
:::: ::
-l aw
ins pace
on itor
= no
ĠAt omic
ĠBr ain
Edit able
-s c
red ential
ĠP erry
k ie
Ġ ----------Ċ
.st roke
( Intent
Ġun ity
um lah
F urther
Ġpr ze
Ġs ø
ãĤ Ĭ
ĠPROC UREMENT
ĠH ousing
Ġatt orneys
Ġcomp ose
atter ing
" What
dra ul
Ġstraight forward
In stant
.J TextField
Ġtr ades
л а
Ġ{ !
Ġl ately
IM G
ĠA ld
ĠIN NER
Ġcart oon
.S ource
F ALSE
Ġd ough
f en
( rect
Data Table
N ick
ĠBut ter
read s
_com ments
EN V
ĠConnect icut
-F IRST
ĉĉĉ ĠĠĠĠĠ
ach i
.M sg
re ction
Ġrelax ed
Ġsha ft
Ġe f
ĠAdd ing
Ġbre ach
Ġ ï¼ļ
ram a
Ġconduct ing
Ġ( ;
(g l
ĠCA USED
ash i
ĠF LAG
ĠCom merce
ĠIN TEGER
h ours
ĠSchool s
Ġn ucle
Ag ain
pro j
Ġsevent h
EMPL ARY
(m ock
'] ,čĊ
_S PEED
> false
Ġsp a
ĠN ear
ì ķ
Ġintr ig
_m embers
w ave
Ġanalyst s
_O S
ed in
ĠF ri
Ġretrie ved
Reg ular
_ obs
EX PORT
')}} "
" class
__ ((
b ucket
Ġst ro
ĠP atch
yst ick
ful ness
ap os
D a
ĉĉĉĉĉ ĠĠĠ
Ġen rich
un ordered
h ole
C ong
< Product
ĠC urt
( the
_l ower
Ġavoid ing
Ġbu zz
Ġv iable
ub a
- is
are l
Ġact ed
-d etails
ภĩ
ĠThe ory
ĠP un
ĠAn onymous
... "Ċ
è res
åı ¯
ĠV ision
_se m
ash a
Ġcelebr ity
Ġend Date
Ġpop ulate
Ġcu is
qu ant
f loor
Ġglob ally
Ġcru ise
ĠStan ley
Ġb ikes
.get Connection
Ġpoor ly
_ other
amp ing
." );ĊĊ
od i
_A DMIN
.color s
ĠG aming
> ';ĊĊ
STR UCT
Q R
ID s
(arg uments
_a ux
( Event
_PR IVATE
ĠTre k
Ġdownload s
m utable
_STR UCT
(w x
Ġdom ains
js px
ĠVi agra
Command s
J s
.c fg
Content Pane
ĠEdit Text
à¥į à¤
Att ach
ĠAR M
posit ive
ĠGener ated
Ġse ized
= :
Ġelectron ics
ĠApp Component
/ ',Ċ
.equals IgnoreCase
Do ctrine
d isk
ĠPolit ical
CH O
< F
ĉ height
ĠB ug
. le
ik h
Ġmill iseconds
Ġconstit u
m ag
.n l
-r ange
ang gal
', [
ropol itan
ĠÃ ľ
ĠU C
.d esc
-L AST
f stream
ib il
Ġf ier
VER Y
Ġë ³
IR T
_ UI
( abs
Ġkne es
Ġro okie
ĠV ac
are na
comm end
- \
ĠSUB STITUTE
So ft
Ġpart ir
we alth
è¦ ģ
(d ataset
ĠCl imate
- show
Ġreli ability
_ch unk
ä» £
_st ock
ĠEX EMPLARY
ï¸ ı
Ġv ÃŃ
Ġsm iled
Ġdr ill
.F unction
ĠS I
Ġreg ression
- X
ĠJ ar
p ref
ĉs uccess
ĠHit ler
Ġinst inct
Ġfem mes
Ġlo ver
< Ċ
Ġmulti plier
r il
Res ize
ĠAuthor ization
ĠK an
Dispatch ToProps
Ġc rops
t okens
ec n
ential ly
ĠINTERRU PTION
f ake
Und efined
ĠA K
ĠTest Case
Ġr ab
Ġtor rent
ĠO t
B ars
Ġlect ure
Ġen jo
Ġrespond s
Ġindex ed
Of Work
_ch ain
)) ->
ĠBeaut y
Ġ` <
Ġtouch ing
Ġ| --
ĉf lag
normal ize
Ġtr apped
Ġestablish ing
/b uild
A J
f y
- react
av n
RI PTION
Ġk ut
ĠF ashion
ĠIn form
cur ities
< byte
ĠUkr ain
Ġs ug
Ġconsist ing
ood le
. ctx
.To List
Ġcomment ary
Ġtransf ers
Ġn ost
ih ad
ĠU pper
Ġconf using
miss ing
- cl
Ġbound ing
Ġcongress ional
Ġreve aling
d h
r up
Ġt res
re peat
, ĊĊĊĊ
_t ac
Ġexp ed
G irl
h orizontal
Ġ"../../ ../
( option
Ġwe iter
ĉs ql
Ġ=> {Ċ
Ġgar lic
Ġre pr
Ġrepl ies
( prop
Ġspir its
Ġins pire
Ġbas ement
.re ject
Ġhint s
Ġpoll ing
ĉ ĠĊ
_r ating
Ġc ath
av ier
Ġcomp ressed
ĠV S
] '
Ġjud icial
ĠT rend
tr aining
EST AMP
ogn ition
Ä ģ
SE NT
vent ions
Ġconsult ant
um ph
Ġuser Service
, NULL
k h
D ear
_B AD
it ations
Ġmet aph
' é
and ise
-f ont
.ch art
Ġs g
_ Controller
.j peg
ĠUL ONG
ĉg ame
( ss
ĠM aj
ĉg o
ĠS ad
ĠB erg
ĠM ine
P ack
Ġres istant
ĠR OM
Ġp eg
ĠStan ford
ĠY ahoo
Ġsca led
Ġl an
= []
"/ >
Ġpl ots
.* Ċ
Ġtr aveled
ĠO scar
V L
Ġlink ing
Ġt ires
Ġ'* '
ĠBuffer ed
er i
Ġ ****
Ġover look
.N on
Ġr és
Ġe gy
å° ı
Ġattack er
ĉĉĉĉĉĉĉĉ ĉĉĉĉĉĉĉ
.s ync
AS CADE
G round
Ġdec ay
ĠT on
Ġjew elry
Ġby pass
Ġmem br
R NA
< System
ĠMedic are
(n et
os i
H B
DE C
{ EIF
_f ill
Ġtrav elling
ob server
Ġconsult ing
RE AT
Ph ase
(i i
ĠS UM
> ččĊ
Ġs ud
ĉ background
Ġsch olars
-m uted
ar á
Ġ= ====
Ġ__ __
C reat
ene ver
/w p
ĠV PN
Error Code
) ],Ċ
(b uilder
ĠEn emy
S ensor
us a
Ġtr iggers
Ġplayoff s
_RE Q
Ġ( ~
ĠBar ry
Ġperman ently
ĠR UN
Ġb ure
.Fat alf
Ġch ick
ĉ panic
ps i
ok a
éĢ ī
> [
Ġunderstand s
ĠJun ior
ĠIN FO
= mysqli
ust ain
-s ource
s erv
ĠC REATE
. au
Ġsell s
ĠĠĊ ĠĠĊ
E urope
z w
pre h
ĠNS A
Ġx y
ภ´
ĠB eyond
Inst ead
Non Query
Ġar ise
Ġavoid ed
.em place
_model s
} ),Ċ
Ġh id
Ġ& _
.p oints
.get Width
.Ex ec
Ġ// //
ĠS essions
... \
ĠCol omb
Ġacceler ation
rest ore
Ġ ile
ob ic
< Node
ĠD X
ĠBes ides
. age
ĠCont ains
N ational
ĠIm plementation
Ġeff ic
ĠR M
H y
ĠWed ding
ok ies
Ġrec ursive
Ġprosec utors
.Se lection
ĠForm ula
Been Called
[i i
ĠFr an
Ġtraged y
_F EATURE
Ļ ¨
comp ass
ĠB h
? ĊĊĊ
.w riter
ĠH our
Db Context
io v
am on
re pr
é ĥ
ĉf i
'] ]
ĠD ry
. ro
ĠO bserv
æł ĩ
Form er
ĠB alance
ĉ json
Ġpr zy
I SS
( sock
ĠL INE
Ġde ce
Ġal ly
Ġtend ency
F un
Ġschem es
Ġinter ven
æĺ İ
Ġad verse
quote lev
Ġsacr ific
_s ide
Ġmut ex
AG IC
Ġocc urring
ĠCommunic ation
um ar
ç¼ ĸ
ĠTreat ment
.p erson
ĠL C
Ġe ch
( ("
ĠDise ase
ä d
ĠA Z
.A ccount
Ġcontinu ously
END ING
ĠRET URN
- string
.f ilename
syn thesize
Res ponder
( opts
reg s
Ġn uest
Pe er
// ------------------------------------------------
Ġg auge
ĠK in
.s chema
Ġarr ange
ĠBl ake
_Type Info
C over
ĠHamp shire
P aper
-in ner
util ity
Ġcross origin
F OR
Ġign oring
ĠD D
av an
Ġtrad itions
Ġget String
Ġeth ics
ĠMaterial s
DE SC
Ġen zym
io let
ĠCh ip
ĠMc Donald
Ġn erve
ç Ħ
") ]
æ± Ĥ
ĠS ugar
_S IM
j peg
Ġdiscret ion
ĠT N
bo ve
ĠMin imum
ĠForm Group
Ġwork force
ĠExec ution
err er
ĉ ĠĠĠĠĉ
Ġpres cribed
.Text Align
OP EN
ĠP B
im ity
ĠEx ternal
° C
ĠApplication Controller
Ġb arr
imp licit
_d ot
ĠCol on
C OLOR
.Pro ject
*
-x l
Ġo sc
(p attern
') }Ċ
success ful
al og
St udents
] string
ant on
att i
chem ical
.in f
(d r
:UIControl State
to Int
]
а ем
Ġ ž
.Action Listener
.SEVER E
ĠSal v
_TR AN
/ internal
Ġwel comed
.com ment
mut ation
ĠFA Q
. one
ĠL AB
" }}
ĠR ol
ie ved
Ġadvent ures
Ġfun eral
Ġsp ouse
( open
ĠRead y
Ġtour ism
ad in
_f ace
âĤ ģ
Ġmigr ants
ĠP urchase
c ord
ĠOUT PUT
)) čĊčĊ
Seg ue
t abs
Ġd ots
Ġn ail
bor ne
Ġdes ires
Ġprevent ed
'] ==
Ġtim ely
IC A
Sc anner
ĠLuc as
Ġg ithub
'] []
d ia
con omic
Ġdies er
und ers
. Handler
? ",
.d atab
Ġadv ise
.an imation
Ġover head
Ġobst acles
_j oin
Ġm é
Fl at
.dis pose
ĠEx pected
Ġfle w
Ġemb od
_sl ug
Ġnam ely
Ġwitness ed
s olid
. legend
Q ual
_s urface
ãĥ ©
Americ a
Ġaffili ates
ĠPro s
_ext ension
b inding
ST ALL
. ready
Ġcopy ing
ĠH ence
Ġdisc ord
_s hip
Property Name
ĉĉ ĠĠĠĠĠĠĠĠĠĠĠ
Ġachie ving
ĠB ec
Z ip
S ometimes
ãģ ĭ
Ġcon tra
Ġpun ish
Ġins ulin
Ġdisap pear
_en um
. aut
Ġhas attr
aff ected
s he
$ table
ks i
Ġlack ing
Ġdiscount s
St mt
ĠArg entina
Ġun pack
ĠR outedEventArgs
Ġ' ?
inter op
Ġso fa
Ġd yn
ĠGr ace
Ġinteg rate
Ù ĥ
Ġdel ays
ĠIm plement
Pro of
Ġapplic ants
ĠLe ather
ìĸ ´
Ġenjoy able
Sp inner
/ z
Ġfo am
ĠLabor atory
Ġresearch er
ĠChristian ity
Ġcustom ize
Ġc ipher
Ġd od
Ġs ó
@ Entity
ON LY
in ventory
Ġcon clude
Ġcu enta
ĠC ohen
-in come
mb H
ment ation
Ġver w
ud p
AM L
.com boBox
f h
j obs
File Sync
ĠBar bara
ĠSc an
creens hot
ĠOr th
.view DidLoad
ĠAR RAY
, @
/ int
Gener ate
Ġdemonstr ates
ĠZ end
åĪ Ĺ
ĉv olatile
= r
Ġf m
ĉb uffer
en ate
.C ombine
Ġm isc
chem as
Ġpure ly
Ġgl Vertex
.R est
Ġrec alled
Ġfre el
Ġs que
Tr acker
ĠPh p
ĠD istance
Ġbe ast
Com plex
Ġcons iders
ç½ ij
trib ution
Ġcompl iment
_lin eno
ĠM utable
Ġund ef
ĠG em
Ġcomp ounds
.u uid
Ġan onym
Ġst airs
ĠDb Set
w ort
ĠS ens
.B efore
Ġend foreach
ĠTo gether
at ility
Ġmoist ure
- ${
( Test
T B
m usic
Ġins ist
Ġhead line
.A nd
P ATCH
ĠPre pare
Ġswitch es
* p
ĠY e
_ abs
.h andler
Ġassign ments
Pre ference
ENT ITY
Ġp ipes
ĠAlert Dialog
ograph ical
Ġpat io
Ġweb pack
b ps
Nav Link
.N umber
ĠArm or
ĠP eters
ĠD esc
du ino
ĠI cons
.get Height
Ġtext View
ĉ NULL
alloc ate
} ${
ĠPr ize
- num
.M ove
è¾ĵ åħ¥
.c amera
Pro blem
ĉtyp edef
( store
ĠDISCLAIM ED
Ġsubstantial ly
FF F
Ġeps ilon
Ġine quality
_ children
ä¸ ĩ
rel u
P iece
an try
b abel
vet ica
Ġsurve ys
Ġdet ector
ĉ args
.Selected Value
Ġinter ference
... )Ċ
. STRING
ĠTy ler
ĠC atalog
Vert ices
ĠProject s
ĠLe ban
." )ĊĊ
.k ernel
Ġr ides
ĠM ut
an th
оÑĢ Ð¼
enn ial
.t asks
.set Property
ategor i
æľ Ģ
/ con
br ace
ĠN SError
'] ));Ċ
list ed
ĠPre view
Act ivate
Ġc ycl
- active
h ad
To o
Ġreg ist
lic al
Ġpo etry
Im ports
ï¼ģ ï¼ģ
: <
Ġchar m
ĠC oun
oll ider
Ġh w
} `Ċ
= args
ĠNe uro
it ical
ien en
ĠD ot
_ON LY
D N
ĠPlay Station
Ġste ep
Ġpract ically
Ġapplic ant
Ġa rom
an ic
ĉd isplay
Ġtermin ated
Ġcl arity
ĠMenu Item
ĠK ur
ij e
_ week
(d ict
_rec ords
ĠCost a
Ġk et
Ext ensions
Ġneu ken
ins i
_in c
Ġæ ĸ
Ġein f
ĠR isk
Ġelev ated
p ers
UD A
ĠK N
Ġl ined
ĠM orm
);ĊĊ ĊĊ
> }Ċ
pl aint
get Text
Ġindivid ually
Ġcheck box
U Y
ĠL amb
Ġdys function
ĠL ar
à °
ĠCre ating
');ĊĊ Ċ
" They
loc ations
_C ORE
Inter action
umbn ails
ĠPart ner
b rit
Ġless er
ĠSl ot
set Attribute
ĠW ave
.p o
/ store
Ġbrows ing
_p d
sum e
s ed
Cur ve
Ġpl asma
Ġsusp icious
ìĿ ¸
ĠB ah
ĠExp licit
_C C
.Client Size
\ View
Ġsub stit
lo on
ĠG AME
ĠB rid
Ľ 建
_ User
Ġsqu ares
f one
Ġsac red
ug hs
] interface
ĠTh row
ĠK irk
Ġemp ire
Ġassess ed
T ax
ĠHe aven
-b uffer
_STAT IC
én é
-b ordered
Ġpun ct
(m ode
Ġke ine
S ent
ĠCal cul
ĠE ve
Ġsty lish
Ġoil s
.Test Case
Ġtrad emark
Ġliter ary
Ġconcentr ations
ĠRel ations
( Class
Ġstd in
Ġv æ
back up
. VERSION
.AutoScale Dimensions
st arter
Transaction al
- panel
St udio
k c
ĠCh amber
ĠSpi el
Ġr ho
ا ÙĦ
! '
.At tributes
Ġmurder ed
apeut ic
Ġint imate
Ġtext Field
ĠBuff alo
d ummy
" %
ĠLib erty
ob ar
ĠT ank
ĠPop ular
erv isor
ĠIn iti
ĠM all
ĠP rior
C AP
ĠCl ay
ĠCert ificate
.L ock
-st rip
-dr iven
/ all
ĠMessageBox Buttons
_SE CRET
_p b
Ġr ats
ा à¤
Ġn t
.R outer
_top ic
Ġt ennis
ĠP UBLIC
ĠActiv atedRoute
Ġ' ,Ċ
Ġcost ume
Ġj okes
. Handle
ĉ byte
Ġflav ors
( cc
Ġperson as
ĉ image
ĠN azi
Ġgram mar
Ġú lt
Ġval ve
Ġv ic
ĠR achel
_in valid
P refs
std int
(r oute
Ġhtml specialchars
Ġpe oples
pl ine
Ġn v
ĠQu ant
opp ers
Ġcurrent User
ĠC atal
Ġrecon c
Ġconj unction
l x
amb urg
Ġinflu ential
d anger
ind ers
Ġ% @",
.config uration
os ome
. identity
Ġpick er
n ost
ĠDI Y
Aug ust
ab lo
Le af
ĠRec o
ck o
DO C
ĠH erm
: any
ĠInt erview
ĠT ex
x fe
( work
Ġle ap
He ading
Ġqu arters
\ Bundle
re b
Per haps
ĠG mbH
B irth
ĉ sum
ĠWat son
.n il
ç ¡
{ }ĊĊ
ica id
Get ter
" name
Ġ" čĊ
_n one
z m
ac ute
uest o
Ġs ous
Ġre build
Ġnewsp apers
ĠH az
Ġk its
if o
Bl ur
Ġsu ited
- In
à ¯
ĠKe ith
ĠNor way
IN IT
ire ccion
iet ies
_us age
ĠDou g
r ise
Ġtr illion
im ited
ĠR EL
al ic
Ġcritic ized
the orem
Ġce ase
Ġsid ew
ĠT erry
Ġsubs idi
Ġfirm ly
Ġaw s
Ġh ott
Ġdress ing
bad ge
ĠApp lications
è¿ ĶåĽŀ
Ġlaugh ed
Ġh obby
Ġmus icians
Ġ* .
. placeholder
Ġcount ers
ĠCap itol
SD K
Ġhel met
and box
qu it
Ġcriminal s
Ġteen ager
( update
G l
.se lection
Ġdis charge
Ġpresent ing
ufact urer
_UN KNOWN
Ġstress ed
å ύ
Pro to
_cor rect
ha us
Ġren ov
Ġfire arms
Ġtechn ically
-b rowser
Ġc andy
St roke
Ġexec utor
Ġocc urrence
ĠIP v
_INTER FACE
ĠRetrie ve
.b ad
Ex change
Nav bar
ĠK id
(get ApplicationContext
_ST OP
ĠB oss
List eners
Ġshoot er
ĠAl b
ä ch
Ġp ix
.key Code
al one
Ġabs urd
ĠC um
ĠNewton soft
ik t
Ġlaugh ing
Ġcapital ism
ree Node
T x
_QU ERY
.S leep
( login
Web Element
Ġcelebr ating
Ġde precated
Ġma ar
Ġart istic
_ASS OC
ĠBorder Radius
ĉw p
Ġsurviv ors
In ner
- red
Ġprosec ution
_ pp
("
Ġ^ =
Ġl am
ĠTr ading
fl are
Det ector
M F
ĠEmer gency
ĠEag les
qu ad
ĠIn cre
pl iance
\M igration
Ġup grades
C PU
ag gi
f printf
ig ion
Ġbeautiful ly
Ġd ried
_H IGH
Ġg pio
M SC
ĠDe puty
ĠDe cl
Ġtre asure
sg iving
_s idebar
Ġapart ments
ĠW r
Ġbo ats
Ġb or
.l anguage
ĠU i
l it
fr m
anc ies
Ġmass es
ĠAss ign
ĠP OL
Ġmap DispatchToProps
Ġbr acket
ĠP ap
ĠC i
ĠInt o
Ġteam mates
Ġfor all
ul ui
ĠC arn
_IN S
az ioni
ce p
Ġtour ists
-bl ue
ĠL ed
Ġpen et
ĠF o
Ġim aging
pr a
Ġsl aves
oler ance
Ġincorpor ated
& ,
u ably
ĠK ap
Xml Element
ĠMu eller
Change Listener
ĠH oliday
ĉ ĠĠĠĠĠĠĠĠĠ
F lex
ĉ User
"] ))
_sub mit
.b old
Ġlock s
ĠCub a
ud son
H ook
ĠWar ner
_st ar
"=> $
Ġcomm a
un checked
graph ics
r ors
G ROUND
( public
Ġcustom ized
ĠArk ansas
ĠR ew
Ġexp iration
× ķ
ĠC ul
Ġn ons
.F ilter
Ġsen ator
_def inition
ash ington
ym ph
/ J
Ġf use
ram id
ĠSup plier
Ġaut ocomplete
Ġ} ),
." ĊĊĊ
_function s
ĉ to
.e val
ĠT Object
Re ferences
Ġhe ated
H AL
Ġ)) }Ċ
} $
ĠB arr
_UN IT
+ $
Ġget Value
ip ed
ch ied
(v m
c ue
_int eger
_c ourse
th ird
Ġrevis ed
** /Ċ
_D IRECT
Out Of
(" (
ĠFe el
Ġre ass
Ġsub title
per i
n f
Ġenjo ys
Ġtreat s
) this
-t abs
anc ers
Ġcontin ent
Ġcard io
S er
. question
Ġph rases
Valid ators
Ġpop ul
Ġl ÃŃ
s ong
_IN TERNAL
Ġadvis er
Ġp uzz
Ġambit ious
ĠT ob
ĠD P
Ġpres idency
Ġsurre nder
Ġwatch es
_b inary
ĠSo on
Ġcan ada
(" ")Ċ
] ='
ĠBr andon
eps ilon
r w
.add Child
.C opy
Pr incipal
Ph otos
Ġmarg inal
Ġbas ics
e ing
M ust
_ String
Ġo le
M agento
.c ustomer
(p rev
ภ¥
Ġlo yalty
C og
Ġprot ocols
ĠCom panies
Ġtheoret ical
Ġaccess ing
ĠZ en
. ones
att ice
_w orld
z es
Ġtatto o
Ġmen os
Ġinter sect
"] ;ĊĊ
bel ie
Ġin active
.read line
-label led
.d one
lick r
ĠW ORK
Ġderiv ative
Ġd atabases
âĤ Ĥ
Ġs x
.is Array
Ġy s
Ġp ada
ĠBul let
(` /
is Active
ĠCG Size
(equal To
ĠColum bus
Ġmar ry
DE V
_l imits
ron es
I AS
Ġt au
min o
_W rite
ĠW ine
Ġ[ ['
ĠP ull
rit ers
ri ents
Ġsh ifting
up p
_TIM ER
ĠCondition s
Ạ¥
ĠOr ders
ĠSt rength
æī Ģ
Ġvalid ity
Ġf ot
et ur
Ġb olt
åĨ ħ
ĠAl ong
os hi
Ġassum ptions
Ġmag azines
_S PI
Ġp unt
_PRO DUCT
Ġrel ay
ĠJ avascript
. te
- es
Ġwidget s
(f s
< Item
_ex tra
Ġrecru iting
E t
Ġnecess ity
p w
Ġnov els
uss els
Cre ator
ĠM VP
ĠO C
th ood
cl ients
)) *
Ġcharacter ized
_SE ND
ut i
T y
.from Json
@ Service
ãĤ Ĥ
Ch ris
_ Is
ĠJohn ny
Ġclean er
ĠInitial izes
UN K
( axis
еР·
ie val
ĠWar riors
} )(
DM I
âĻ Ģ
ĠTre asury
Ġfe as
Ġsl a
_EN UM
l hs
ĠIn stit
ipp ers
Line ar
Re ading
quir ies
-c ell
ch rome
.S earch
IN A
ç±» åŀĭ
ĠĊ ĠĊ
ĠSam uel
Ġmill s
Ġdon ate
ĠGe o
( rows
Ġshe ep
Ġé l
ä½ ĵ
Ġb em
_UN USED
ĠR CC
Ġintrodu cing
att a
ĠP riority
ĠF B
ĠSer ge
> ";
atch ing
ĠKnow ledge
ĉ The
; margin
less ness
op ard
um atic
() ));čĊ
Ġf als
(c ache
Type Id
éĢ ļ
_ choice
ĠGo th
ĠS ites
M G
_b order
Ind ices
Compar er
ĠRed istribution
Ġclo set
Ġvers atile
Input s
**************** ****
Ġob esity
qu iz
gr a
(g lobal
åĬ ¡
Ġcollect or
Ġk or
ov able
AD C
ĠEvent Handler
. nc
Ġplay back
ient os
_p erm
_W ARNING
ĠOlymp ics
.n orm
ĠBroad cast
_sm all
dr ive
. iloc
Ġtyp ed
M EM
_con s
DM ETHOD
Ġl un
.d istance
(p ar
po on
Ġb ast
activ ities
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
: čĊčĊ
S ER
) &&
_l st
ĠPol ish
Ġknock ed
Ġfrustr ation
au kee
Ġph osph
iqu id
_c oeff
æŃ ¤
L atest
ĠD ust
T ipo
Ġmaint ains
Ġmar sh
inc inn
l bl
C are
Ġneighborhood s
_g pio
ĠAr senal
D em
ĠW he
_h ook
Ġl dc
ĠHar per
ĠBer keley
Ġgrad uated
Per cent
Ġarr iving
ĠAdvent ure
(s cope
(' *
qu arter
ĠMar ie
Spe aking
_code gen
Ġimm un
c aster
ãĤ Į
åķ Ĩ
ĠDim ensions
.rec ord
Ġtext o
ĠMich elle
P ending
( by
_P AR
uch t
be e
.Th read
amp ire
k now
ĠClin ical
Ġmargin Bottom
Ġdistingu ish
.F ull
. undefined
ĠSequ elize
################################################################ ############
Ġeduc ated
_O VER
åº ı
ĠÂł ĠÂł
_e ach
Ġur ge
de part
Ġdon ors
ĠA u
Ġbill ions
Ġbelong ing
_ age
_ Int
Ġsub stances
m achine
!! !ĊĊ
Ġjson ify
ib bean
ĠC ad
Ġend Time
Ġc ycling
ĠUIT extField
Ġle verage
Ġvan illa
e at
La unch
( pt
st ates
ĠControl s
ĠRes pons
ĠJ ake
Ġas leep
fort unate
.next Line
Size Mode
ìĿ ¼
Testing Module
G erman
ĠInvest ig
.re verse
ĠB ACK
( DateTime
Ġnon profit
ĠEx pect
Ġt anto
'] ),
ĉ the
M ultiple
(get Activity
_W AIT
Ġj á
de cor
lev ance
ĠGit Hub
min ation
_qu antity
.Sc anner
ĠL ion
éĶĻ è¯¯
Ġd re
Ġtan tra
Ġcontent Type
Ġf id
_ alt
NS IndexPath
- pl
åĮ ĸ
Ġantib iot
table s
ac ial
ĠReg istry
Ġol ive
ig ers
Ġsubscri ber
_p res
ĠSy ntax
Ġlo vers
. Byte
old ers
_for ward
al ways
C aption
Pr iv
ĠT ampa
is ateur
-labelled by
ĠTo String
Ġì Ĥ¬
Ġinit iated
W F
Ġinstitution al
in ject
ĠSc r
Ġdo ctrine
Ġsp acious
is ure
ĠAn a
" time
ess aging
Ġc id
ĠN an
Ġin complete
T AG
-b uild
Dec ember
Ġres idual
(P DO
ĠList en
Ġg lyph
Ġg aps
ne a
.R ect
Ġsa u
ĠPhot ograph
Ġexec utable
ĠExp ert
Cor outine
_s izes
ĠN L
.is Valid
); }Ċ
- reg
Ġc iting
c wd
ĠOtt awa
ĠB att
Ġrenew able
Ġprelim inary
Ġas ylum
Ġw rist
Ġutil iz
Ġdet ention
F ast
Ġan ge
incinn ati
Ġste ering
ĠNa N
ios ity
/ page
Ġè ¿
ster ol
Ġdis g
( DB
ĠDESC RIPTION
Ġ_ $
Ġobst acle
Ġb izarre
Ġextr action
_ex pected
Ġlos es
ĠCele br
Ġhtml For
Ġexplo it
олÑĮз ов
XY Z
Ġmagn et
amp ed
Ġat oms
S ources
pect ives
Ñģ ли
Ġ= čĊ
Ġd are
ĠWal ter
Ġbright ness
Ġan notations
ë ı
is ke
S chedule
. images
ros so
Ġ" ..
g amma
Ġin structor
Ġover write
- am
Ġdevast ating
ĠSaint s
Ġh s
Ġbon uses
$ output
ij d
(Action Event
mon itor
Ġmatt ress
Jan uary
.j p
Ġcar acter
Ġim pose
_re st
ĠSign ature
Ġcoron avirus
ãģ Ĭ
_com pare
Me asure
it ated
el ijk
ig os
es ar
Ġrush ed
met ry
_SE PARATOR
_W E
_ATTR IBUTE
Ġy aml
Ġspec s
ĠR ah
ph eric
ĠInvest ment
ä ll
Ġappe aling
Ġview port
ç ©
Ġmargin Left
Ġsub tract
ĠED IT
ĉ ArrayList
gr ading
ĠF ailure
as per
EE K
(n ow
< object
ĠAl ignment
ple ado
q tt
( ERROR
ĠIN VALID
Ġuser id
ra ises
ID I
Ġvari ance
ĠN il
/ delete
_M AIN
.T oken
.C ategory
> )Ċ
Coll ision
ĠGre ater
ĠR acing
al an
Ġmon etary
, new
ĠS orry
. Enable
ĠInstant iate
oll en
ë© ´
ĠCall ing
_h our
AD A
Ġsh y
) **
Ġ== >
Ġes pecial
Ġinterpre ted
! ="
Ġpharm acy
.s ingle
ĠC ialis
Ġpar as
.to UpperCase
ĠDem on
Pr ime
Ġrank ings
Add ing
_H ASH
ĠEx am
Ú ©
ĠVict or
Ok ay
"] ;čĊ
Ġfort une
ĠF ETCH
exp and
.Inter op
Ġb arn
æ ¶Ī
ue vo
Ġspec ulation
âĶĢâĶĢ âĶĢâĶĢ
ĠN u
ĠBl ues
(f name
Ġinhab it
Ġ\" %
C ES
ular io
_c r
Ġvalid ated
Ġmid night
ank ing
Ġincorpor ate
Ġpurs uit
EX P
pr ime
P id
- US
ĠN urs
ĠW heel
é ĺ
Ġin p
Ġsupport ive
.m ember
ĠSh ot
.Check Box
Ġaff irm
T or
Full Year
Ġconsider ably
cred entials
_ opts
R oll
( round
Ġcom ent
_U ART
Ġext ending
R G
result ado
it u
.get Session
Ġattr action
& D
$ html
ĠJess ica
ĠAssoci ate
a ñ
_ ed
ĠL ag
Ġorig ins
()) ->
add EventListener
IAL OG
åIJ ¦
.Com pare
Al bum
ĠK u
< Q
arg est
Ġpro long
Ġconfig urations
Ġaccident ally
_ph oto
Ġ'' ;čĊ
Ġver se
B ob
Ġfarm ing
del ivery
ĠM ack
Ġuse Selector
.bootstrap cdn
keep ing
en y
. upload
ĠM ETHOD
cre ator
< _
ĠE aster
. --
UI Button
ãĤ ī
om eters
Ġsh ine
Ġh ogy
\ s
Ġh arness
.C ell
Ġlif ting
Ġcomb ines
ĠOcc up
ex clude
pat ial
Ġres pir
_f it
Ġfif ty
ĠM ol
Ġtun ed
-d imensional
Ġq s
Ġto ps
> ";ĊĊ
quis ite
ch annels
/ res
ĠAn alytics
.app compat
/ to
Ġon Error
( attr
IR M
Ġrag az
- as
.Se cond
orient ed
Ġdon n
Ġlight ning
f id
ĠP le
ãģ¾ ãģĻ
t ro
.Tr ue
O bservable
× Ļ
umb ing
Ġpros pective
-f ilter
Ġpurs uant
(p oints
.B ind
Ġp alm
clear fix
ö s
ĠG onz
Ġwe aken
Dr ive
en ido
l ld
ob ox
ane an
G ot
ä¿ Ŀ
Reg ex
æ ĥ
Ġsal ad
ass is
" net
inherit Doc
ĠR V
qu ier
Ġcl azz
ı ÅŁ
oster one
Ġair line
.list dir
Ġdownload ing
ĠP alm
w aukee
& lt
.B L
_IN LINE
off s
<< (
_new s
Ġch ase
/ ><
Ġeuro s
ĠEgypt ian
ĠSt ainless
_BO OL
ĠG uild
ĠD ynam
[index Path
Ġ ï
Ġmemor able
ĠCh ampion
Resource Manager
.Log in
ĠForm er
yp ed
Ġl leg
; ",
D WORD
Ġtax i
Ġbom bs
ra h
.t ags
_test s
st ones
âĢĿ )
[ g
r type
Ġv u
Ġhost ile
Ch ars
ĠPatri ots
/ status
< B
ĠIn come
ĠD ad
Ġpat rol
_CH ANGE
Ġup graded
Ġch ina
set q
Start ed
.U ndef
Ġcheck sum
Ġfrustr ated
{ o
Ġen f
Ġwood s
ĠAny one
Enc ode
ĠQt Widgets
are as
Ġshe er
sk i
end point
_T est
S oup
~~~~~~~~ ~~~~~~~~
(f iles
ĉĉĉĉĉ čĊ
.sp ark
Ġval ued
Ġ% Ċ
.control s
ĠXCTAssert Equal
Ġf ame
ĠR ic
D OT
ĠAlbert a
ä½ ¿
os al
.Web Controls
Ġ ------------
ĠM is
ĠS YS
Non null
= item
Ġexp ire
Dec ode
_ operation
ĠValid ator
.C ENTER
uff s
* m
Ġav ant
æ¬ ¡
âĢľ You
.per mission
... )
ĠL ic
_co ords
.n ombre
c lo
.Int ernal
ĠCh o
_s w
ĉ Il
cl k
Ġcast le
(l ayer
p it
Ġgu ided
Ġâĸ Ī
Ġsuper b
Ġsup plements
_c ent
Ġpe ek
IN ARY
.Content Alignment
f alls
")) ;
W all
). čĊ
ĠD anny
irm ingham
IAL IZ
( create
" In
Service Provider
Ġpr iced
mac ro
am ac
. box
---- Ċ
ãĥ «
ĠS uit
ur st
br u
ourn als
num ero
__ ()Ċ
D as
ĠM itt
ud er
? \
f u
[ B
Ġ: )ĊĊ
(int er
br ains
Ġatt itudes
Ver ify
Ġsign atures
ack Bar
Ġg d
J ack
.c at
Ġz z
war f
FT ER
");ĊĊ Ċ
Al ive
IC LE
ĠWh atever
Ġout lined
s prite
еР²
_A B
_DE PTH
Ġcrush ed
aa a
(e v
æľ º
Ant i
IC O
is EqualTo
.s un
ic ulo
s ale
_h ex
ĠV k
apt or
Un ion
ĠDis count
list a
.Undef Or
Ġautom ation
N or
å¯ ¹
åı Ĥæķ°
Ġref lex
ĠLa ure
.showMessage Dialog
.t emp
Ġa kan
Ġ__ ____
.Is True
ARE D
ag le
E nergy
Ġquant ities
âĢĻ Ã©
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
Ġcitizens hip
m outh
Ġin appropriate
ĠOut door
White Space
An onymous
load s
webElement Properties
T en
Ġacc idents
Ġadvertis ement
ĠY emen
(c all
Ġsl avery
Ñģ п
ĠL am
_BIT S
ome ga
ĠO le
Ġkid n
_A n
ĠR aid
Cre ation
s aved
Ġpro port
W ARNING
\ P
Ġp wd
Data Reader
is cher
ade on
ĠP redict
Ġreason ing
Ġdestroy ing
H el
* d
ĠLeg isl
_P r
ĉĉĉ ĠĠĠĠĠĠĠ
Ġsymp ath
Ġch ess
Ġm am
: hover
Ġconvert s
Ġp ela
Ġprogress ion
Ġ"_ "
ĠG ill
ĉ show
Ġsupposed ly
ac curacy
el in
Ġunf olding
ĠHy per
Ġw anna
Ġup s
( #
ĠCr iminal
( Point
at Lng
act ly
Ġcontract ors
'] }
draul ic
ód igo
ĠT T
ĠW ide
ĠAR G
_ ic
FLAG S
S chool
Ġclear ing
-be ing
={ [
, const
man ent
Over lay
(' "
éĩ ı
ĠT imestamp
Ġmail ing
ĠC ake
.Th at
Ġmed itation
q p
Ġemp resa
ĠL ions
Ġw eld
ĠLinked In
Ġc ush
Ġgen ome
.Index Of
ag ain
Ġf allback
Ġcamp ing
re dd
-strip ed
Ġd v
Fe bruary
ĠPro xy
us k
Ġdies el
W RITE
RE AK
L orem
.In voke
- div
Inter ceptor
ĠD H
ia les
Ġvill ages
Ø ´
ĠEN V
S ys
.X R
Ġpo em
à Ĥ
c ade
pl ots
Ġ{ (
.g it
/s vg
nc mp
ĠÄ į
ain es
åĩ ½æķ°
Ġ( )ĊĊ
ops is
ĠRel ationship
_ aut
ĠB omb
ĉ com
* sizeof
off icial
_p ayload
ĉĉĉĉĉ ĠĠ
.m anager
ĠA round
ĉs end
ĠEx ercise
ĠB illy
iv i
Ġneed ing
_url s
_t asks
ĠH em
Ġtear Down
enc rypt
.t ie
Ġas m
IC H
ĠCGRect Make
ìĦ ±
ul ong
Ġit r
ĠG ST
Ġoffer ings
ro be
EE E
oper ators
_PRO P
ind ent
A DE
or f
ë IJ
Ġbless ed
vas cular
Ġcon oc
H appy
B ridge
ilit ation
j oint
ĠAdmin istr
- transform
Ġmeant ime
/ K
ĠBed room
Ġrig id
Ġbrows ers
EM PTY
.S erialize
_ ED
Ġst itch
Ġj an
ell t
Ġbr ace
Ġtr ails
p ublished
å¯Ĩ çłģ
} ')Ċ
Ġac ids
Ġ! !!
_d irect
> ());Ċ
aj Äħ
_O CC
Ġplan ets
æ Ł¥
ĠDub lin
Ġser ie
.print f
de ep
` )
Ġ\ $
ĠÎ ¼
_V IDEO
end ors
ĠC rypto
F ar
.Trans parent
.T R
ias m
_tr aining
Ġteach es
ĠB elt
Ġlimit ing
ĠK ath
ĠIndex Path
Ġachie vements
Ġser á
interop Require
Ġdis se
.I f
arm ing
uls ion
P o
_DE TAIL
Prot otype
ĠC AL
Ġagre es
.v o
.Execute NonQuery
ĠTop ic
Ġ' {}
Ar m
Ġe cc
M ag
Ġserial ized
ĉ conn
c ached
= tf
ĠByte Array
prot obuf
var char
ĉ ASSERT
Ġlist e
_tr igger
· ¸
Fe el
T ahoma
ĠL ik
Ġstruct ured
erg us
.In itial
_ ge
cl js
.cont act
Ġand ere
$ stmt
_C URRENT
ĠDis cover
$ res
form atter
H a
vang st
Ġem erge
ãĢĤ âĢĿ
ĠCabin et
-s quare
éĥ ¨
Ġr age
ĠA J
ĠV T
sh adow
ĠFa ith
en ames
pret ty
has il
part y
Ġvar char
Ġf otos
Ġal um
ĠBelg ium
.y label
Ġde j
_num bers
Ġh u
.set Adapter
ĠUs ually
(s ample
.Sh ared
Ġbook ed
Ġ>> =
Ġmin erals
"> =
Ġadjust ments
ĠD L
Ġvibr ant
ĠDep endency
Ġz ap
/ X
Ġfont s
tr ip
и Ñĩ
Ġtub es
cl amation
Ġë §
Ġprot agon
ou pon
ĠBr ush
(p red
our ney
'] )->
pro g
bo o
_m d
_p ack
(ex press
ut z
\ Auth
, id
ĠCh ile
act ice
Ġrecruit ment
Ġpos es
Ġvulner ability
inst anc
or um
d ess
Ġx l
%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%
( fig
Ġdelet ing
.d el
) ')Ċ
ĠWeek ly
?? ?
(str cmp
sm ith
Ġpurs uing
- so
ĠApp s
/ 'Ċ
Ġdec is
FO RE
Every one
Ġl anes
V irtual
. attach
( Log
ĠMed icaid
( Path
ĠTurn er
/ application
Ġport rait
Ġopp ose
check out
Ġfinish es
_M E
Bar rier
S ong
V AR
Ear lier
rell a
Ġh ast
az ar
Ġpull s
ng x
Ġinspir ing
Ñĥ Ñİ
-d irection
Ġexplos ive
Ġcreated At
st o
Ġwhe at
ĠB uilt
' ai
Ġtrack ed
ham mad
RowAt IndexPath
_ heap
D ue
Ġconnect s
.p ublish
em u
Ġbul lets
B AR
ol ate
Ġintern ally
Ġcatch ing
-p assword
ou ched
æĢ §
e ous
Ġx range
Q uality
v v
Man age
( ($
ac ements
ĠBro thers
ĠHE AD
ĠUn supported
s an
es i
** *Ċ
Ġadapt ation
ĠWork er
'] /
.save fig
( trans
Ø ¬
ne e
Cor rect
... ")Ċ
Ġsubmit ting
-p ath
ĉ last
iss an
.x label
ĠS epar
/ no
_b est
ĠM ills
_s ock
(f lag
Ġdest inations
em ption
ĠF AIL
å ĴĮ
Ġr p
f act
ĉ len
D AY
Ġse iz
_d st
l ip
.Line ar
ĠB asket
$ t
$ i
- brand
ĠNe il
ĠE q
Ġth ou
og ene
Ġscholar ship
æĽ ´
Ġs wo
ag inator
en i
( book
Ġbl ink
th us
Ġcancell ationToken
ĠPalestin ians
Ġprofit able
Ġback pack
ens on
< Long
Ġp ools
Ġst icks
Ġspokes woman
Be ing
ĠHer itage
ĠN ike
SH A
ĠNotImplemented Exception
$ core
ĠR ico
/ latest
ĠC zech
ner Radius
(l ines
Ġsem ester
Ġw ounds
Pro cedure
.m ail
() ):Ċ
Ġcor rid
ter ed
ĠN CAA
Ġgal axy
_k ind
il k
Ġtr as
_P OL
ĠH et
Ġrefuge e
Ġteen age
.b inding
post al
Ġiç in
ĠData Type
é ĸ
ycl erview
, value
_id entifier
< b
Ġout file
čĊ ĠĠĠĠčĊ
Ġcr é
Ġrespond ents
ĠBe ast
ce led
Ġinter f
-th eme
g if
ĠR angers
IT AL
Ġauthentic ate
Com pletion
urs ors
Ġcin ema
Ġdisc our
ĠJ aw
OCK ET
Ġpr ayers
ĠL uis
fr ag
=[ Ċ
Ġbr ave
_p ose
C ertificate
- fe
ifer ay
ĠFl ags
Container Gap
ĠC rit
Result Set
ĉc ur
Ġcorrespond s
St aff
.Http ServletRequest
Ġneur ons
ĠMain AxisAlignment
ed ar
Ġg ad
_p arts
ĠÎ ²
Ġf x
/ files
ĠB ros
hip s
Ġgluc ose
Ġfar ms
Ġment ally
rest aurant
Table Name
ĠMer cedes
. Visual
Ġan ch
inal g
_r untime
Ġpropri etary
Ġintent ions
iz i
S lice
; ">
_W ORD
\M igrations
ĠEN ABLE
_PARAM ETER
ĠB ishop
.sub ject
ill as
.m atrix
urrenc es
* y
Ġcost ly
ĠCh uck
Ġclos es
ĠM ight
- store
Ġm all
iet en
.A bs
Ġcouple d
.b asic
Ġ:: ::::::
M aker
c annot
Ġa ch
ĠE li
âĪ Ĵ
orn a
Ġc ps
Ġthere of
Ġ@ {
ĠNSMutable Array
Î ½
product ive
S quare
tempt s
Ġelim inated
< M
Ġconserv atives
ĠS urg
.p ar
ĠB uch
* b
F ort
Col our
ĠCh i
ed ic
> true
ĠNY C
Ġb ored
ĠD etect
Ġapp ar
Ġje ans
ĠT ak
I OD
ĠH orse
( FILE
( ?
ri que
optim izer
n at
lo ys
ĉ Token
oub ted
u ess
oco a
Data Member
_P OWER
class List
Push Button
ĠWi Fi
. Stream
.g uild
Ġn og
ĠPortug al
ĠUnt er
Pr imitive
b oss
ĠDe utsch
Ġerot ic
Ġstr conv
.Try Parse
Ġgr ams
.S uccess
_p k
ĠHar vey
-m inded
.c ountry
[] "
Ġang el
Ġbe ats
ĠV or
il io
.m aster
s omething
ĠP ACK
( if
Request Body
Ġant es
/w idget
Ġmod o
ĠA W
find er
Ġoptim ized
Ġmiss iles
N B
ĉint ernal
t ex
ĠS ri
Ġdam aging
ĠM ais
- Allow
ĠZ h
- alt
Ġ ));ĊĊ
è ī
Ġinflu ences
Ġc atal
_REG ISTER
ĠAPI s
-cent ury
Ġbi ology
ĠAct ual
Ġhe els
TR ACE
_D IG
D ataset
ĠM atter
Ġclass ifier
.w ikipedia
ĠRog ers
Ġdon ated
raw ler
en en
Ġcas inos
ort al
Ġpr ive
s pe
duc ers
. ep
Ġgr asp
ac ji
Ġd airy
Ġb uses
.com m
. ins
ĠI RS
ĠBe er
ad c
o ard
_M ET
Ġ' +'
r ans
Ġkind a
ĠâĶ Ĥ
ĠM aur
аР³
Ġband width
ib us
ĠD ifferent
(m at
ĠRes ume
_UN S
est ablish
Ġfon ction
Sub scription
_com pany
Ġlight ly
.con firm
.y aml
ĠBo ost
Com merce
- template
_DEL AY
ĠH I
Ġn avig
(S ender
ĠH S
_ "+
ĠRE QUEST
Ġw ifi
=" "Ċ
]) ->
Ġro pe
Ġviol ated
Ġgl ance
ĠK urd
Ġè ®
de ck
ĠIS BN
Ġin fect
ĠF oo
Ġget ter
Ġt ener
ap pe
.h h
_h ot
< AM
p oly
! ",Ċ
Ġconver ting
ĠW WE
RO S
(' {
Com mit
) L
ĠO re
Ġsp arse
Ġdis posal
Ġcan celed
åIJ İ
Ġa er
Ġvin yl
á» ĥ
rec ogn
ark ing
Ġtrick y
* s
Ġproceed s
Ġis o
Ġco conut
Ġcraft ed
IEL DS
Ġquest o
Ġcomm un
_CON NECT
Ġtraff icking
De ep
a ções
c odigo
ve au
Ġbet ray
int a
T ED
æ r
m art
_B US
/ sc
ial ly
Ġcigaret tes
è¯ ģ
(n n
Ġmodel ing
/ products
w arn
Ġmet ro
ĠI v
& )
ĠC able
Î »
Compar ison
g ary
ĠB A
P ART
Ġp v
_up dated
C redit
orth y
observ able
Ġthe atre
B LE
; }ĊĊ
la unch
_str ings
ug o
ĠR PG
- auth
Ð ł
hol m
ĠP and
U id
Ġim ply
ìľ ¼
'] ='
/ User
Ġstr cat
нÑĭ й
Data Adapter
Ġland sc
Ġdipl omatic
ï¼ ĵ
************************************************************************ ****
ĠCh icken
Ġbc rypt
.In f
[ col
ĠQu antity
- position
Ġdiet ary
Ġfil mm
Is rael
Pre v
ĠMill ion
Ġrem ed
Ġbill ing
Ġout doors
.t m
Ġn ad
F org
Z Z
Ġs sl
], '
K T
f req
= document
bl ur
¬ ¸
ĠJeff erson
C s
(s ave
Ġstr ap
Ind ia
Ġide ology
BO SE
ĠF P
( ans
Ġfe ver
ĠY am
K ing
à ²
AT ING
bo hydr
roll back
Ġnew Node
ĠN VIDIA
Ġhon our
ĠCon firm
xb d
Ġsuccess or
/ u
l iv
ourn aments
Att achment
Ġgr up
Ġtri be
Ġca res
e ft
_s ame
' label
Ġ ãĢIJ
M otor
Ġin exp
Ġ" ("
_POS ITION
Ġval ley
ĠResult Set
Ġpres erved
Ġmut ations
Ġquestion ing
mun ition
parse Int
ĠS r
ĠMet adata
âĢĿ ï¼Į
timestamp s
Ġtrans itions
í Ļ
Ñ Ĭ
i om
.D o
Ġp ine
Ġf ung
Ġtrans mitted
ct ime
ĠF am
Re vision
B as
UP ER
D estination
toHave BeenCalled
Ġun fortunate
IN ES
_pro f
Am ong
ĠCy ber
ĠB attery
gen re
ĠView Model
- =
Ġutil ized
p aint
.Integer Field
ern ity
comp iler
âĢĭ ĊĊ
ĠM asters
.To Array
Ġstrt ol
ĠUkrain ian
} ));Ċ
Ġsh emale
" That
for all
/ download
Ġrhet oric
.l atitude
ĠWH EN
Ġshock ing
IF IC
.N ormal
_F OLDER
Ġdr ift
Ġmount ing
- book
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ
ĠWire less
> ".$
Ġrel ies
( Console
Int ernational
-> {$
M id
Ġdis sert
dd s
Ġdepos its
ĉd river
# ga
pr ising
print ln
Ġpres enter
Ġmin es
C SS
ĠD ual
(! (
Ġk am
Ġis Loading
ĠProt ect
. upper
ar ium
]: ĊĊĊ
Y ii
-sh irt
ĠIM AGE
_color s
Ġur gent
.Cont ainer
! (Ċ
S aturday
Ġsoci eties
ĠTh an
ĠC od
= @
Ġattach ments
.m obile
Ġsp ite
Ġb ounce
raw l
instanc etype
ĠTr uck
Ġmanip ulation
( Config
-in st
Ġst or
it ution
Preferred Gap
Ġmain AxisAlignment
Ġlist ened
'' 'ĊĊ
ott age
- project
.AP PLICATION
ĉ root
Ġwh it
Ġb ilder
Ġk er
Ġappl iances
row ave
ìĿ Ģ
ematic s
ĠO rg
op ing
_SE ARCH
Ġch am
add ContainerGap
Ġ( ).
ĠAr row
Il legal
Current ly
Ġus a
Ġpassword s
Ġre nown
av ern
ĠEv il
Ġconc at
Ġdu o
Ġv ale
ĠBe an
Ġindic ators
cm ath
ĠP ump
Nov ember
ific ant
_DOM AIN
reg ar
ĠPort al
" $
Ġformer ly
"] :Ċ
ĠVis ibility
.getElementsBy ClassName
_RE D
Ġch ampions
à ´
Val or
_ es
* a
-re peat
B and
.st age
Ġbure auc
C nt
et en
- function
Ġm uito
P ID
_ editor
Ġcrash ed
de ad
k at
ag h
ĠEX T
ass er
-sm all
Ġreal iz
( Entity
ú s
ĠAct ually
ĠEl ite
Ġhel m
(non atomic
ash er
Comm unity
all eng
ir y
ĠG rowth
Ġs ue
Ġfrequ encies
_des criptor
.At tribute
Ġrecip ients
_N S
/ "+
ib an
Ġath lete
ĠI gn
_D MA
(d s
ĠRequire ments
AD I
ere z
\ Admin
br aska
ĠR ust
Rel ation
C OD
ĠV ERSION
em ma
)) {
.D uration
ĠC amb
- logo
Ġread able
Ġcre ators
() ];Ċ
Up Down
-h alf
.get Month
(s f
P ic
Ġhun ger
.t x
Ġexceed ed
_se ed
( ^
_s k
.per form
Ġ> ::
Ġm ongo
= float
bind Param
Sm art
if a
Ġse curities
Ġpre jud
Ġ, "
Ġcor ps
Ġv ra
amac are
it err
(M edia
uch e
Ġc ob
Ġlib er
. geometry
Loc ator
Ġsl iding
Ġsurg ical
_C UR
Ġcon sect
[ *
ĠRes ort
St ub
_DO UBLE
ĠS oph
Ġelect oral
_dis able
ĠÑģ о
ĠLight ning
Ġment ions
oc y
Ġle aked
Ġrelax ing
Pres enter
v sp
Ġgu ilt
=- =-
.re ply
ĠMir ror
C amp
Ġ+#+ #+#+
Ġ+#+#+#+ #+#+
.A uthor
Ġdirect ive
-h ook
íĦ °
}ĊĊ ĊĊĊ
@ pytest
_r and
m is
Ġcolor ful
u je
lass es
ĠClass es
.h ave
% ),
é¢ ĺ
Ġdistur bing
sub string
ĠK oh
In vest
p urchase
Ġrec ycling
ĠA RT
ier archy
Ġf ps
.check Box
íķ ´
_m aterial
duc ation
Ġf w
ud it
Ġreview ing
ĠS id
S yntax
ĠW ritten
arg ar
UM E
/ q
Class ifier
Off icial
Ġj azz
Ġom ega
Ph ysics
Ġl ugar
_access or
.command s
Ab ility
ĠB atch
R AM
Ġencount ers
. Qu
BY TE
ĠD istribution
Ġus o
ĠReco very
appro ved
Ġden ial
/sh are
Linked List
)čĊčĊ čĊ
udd y
Ġf ines
Ġr y
Un icode
ĉ render
Ġprem ises
Ġp on
ali ases
/F oundation
c uda
ĠC ock
,: )
(f older
Ġm éd
dr ag
Ġtal ents
ĠĠĠ ĊĊ
е ÑģÑĤв
m ob
.y ml
Ġa ster
Ġdis cre
go al
ĠGT X
ĠS UCCESS
ĠL ONG
(f ind
Ġsing ular
_s z
ĠEth ereum
.. Ċ
Ġir res
')) {Ċ
Ġmin isters
St eps
ivers al
ĠNever theless
- led
Ġ( %)
ç¡ ®
Ġtime zone
Ġstr anger
(re nder
Ġsh util
Ġm ph
Ġtri o
pp y
Ġpred omin
Ġend ors
ĠRuss ians
ĉ row
Ġw izard
.s erialize
Ġcompl ained
Ġs ido
Ġdelight ed
-m e
ĠR av
H uman
ad ays
rec v
Work ing
J ump
ĠÃ¥ r
ĠAut omatic
_B ase
æł ¼
aur ants
 ¯
æ ¸
(C Type
IF I
( amount
Ġbelie ving
= mysql
Ġf ir
Ġrest oration
ere co
Ð ¢
_ '+
Ġe book
Ġde bris
(input s
AY OUT
Ġscre aming
av ia
land er
Ġdist ress
Ġas sembled
ĠA void
( thread
ĠR PC
_EX IT
( queue
и ÑģÑĤ
D ll
Ġsk ull
_p ub
che z
min ate
ens en
Ġins ane
b ounds
ĠR osen
Ġcondition ing
process ed
v ideos
f our
.Con v
| ;Ċ
Person al
cer pt
:UIControlState Normal
Ġdos es
ĠKar l
ĠFre qu
.B ASE
ĠV ote
Ġcon current
ĠMessageBox Icon
ĠÃ ĸ
ĠDub ai
ĠR etail
: number
ĠOb server
ĠBig Integer
_ origin
_W ORK
F rames
Ġnot ably
. âĢľ
Ġtrop ical
Ġn iche
am ina
.s ys
(t okens
mod ify
os it
st rom
ĠCom ics
O PTION
T icket
Ġfact ories
Ġdis put
_F ile
ĠFin n
ee e
ĠDisc ord
_m oney
.t pl
_s afe
L B
Ġgl ut
J K
.fl ow
- cont
g os
Ġhor izon
ĠR ush
:: *
P ipe
ull a
bor ough
he imer
(m ove
( Text
} );čĊčĊ
w elcome
ĠCom ponents
Ġgovern ance
c losed
ĉm argin
Ġla undry
ĠTerm inal
iz ards
. âĢĶ
.rem ote
.r adius
ĠQue bec
Ġd h
T ech
ĠM ist
s eller
_l iteral
Ġgen ius
Ġbr ains
g em
ĠMe asure
Ġcata st
r ance
.Text Field
Ġconsum ing
Ġ'\ ''
oubted ly
ĠC ertain
E v
ert i
be ing
Ex perience
Ġ// [
ĠArab ic
ĠC rist
ĠAz ure
Ġhor a
l adesh
\ Blueprint
d ar
.re l
Ġsup rem
ĠRe agan
ĠAt tributes
-s idebar
Ġuse Styles
ĠA irlines
Ġh ills
/x html
v inc
_m ock
Ċ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ
ĠP ill
.Layout Style
ĠCommand er
] <
sign ature
Ġ{ }čĊ
Ġhat red
Ġë ĭ
ole sterol
Ġ ********
ancell or
c rop
T IM
ĉĉ ĊĊ
ys qli
uit ive
ĉun set
_s el
Ġmen us
t ick
Ġconstit ute
ĠElement s
ĠRed is
agg io
_f p
_de pend
em as
CA ST
or ange
j on
ĠEm ily
Ġpot atoes
Ġre ceptor
ĠElect ronic
ĠL ights
Ġcomb ining
ĠSome one
Ġ######## .
ĠT OD
/ show
X d
." '
af x
Ġtr agic
St yled
ĠMar co
G allery
d ale
.âĢĿ ĊĊĊĊ
é rie
/s ervice
äº Ĩ
Ġamb ient
_SET TINGS
.Ad apter
l ene
Ġtrav els
Not ice
Ġcle ans
ĠF em
ch air
Ñĥ н
/ my
_b ad
ĠEcon omics
IS A
_C NT
(M enu
äº İ
ĠR idge
Ġlength y
D ot
Ġjump s
Ġhe y
$ pdf
Ġw orm
Ġs ut
Ġsh er
iam o
ĠCal c
trie ve
Ġc ops
ĠCh rom
Ġreg ulated
reat ment
ĠHigh er
ok s
Ġde ze
LOC ATION
ongs To
Ġfin ite
Ġvar ies
Ġposition ed
' il
éĩ ij
Ġh ike
(d one
play list
Ġad a
Ġcoast al
ĠN ancy
.DateTime Field
Cpp CodeGen
ĠSimilar ly
re ur
ĠCon tr
ĠH idden
ĠB eta
atch ed
_inst all
. Output
Look up
ĠRich mond
qu ared
Ġm anga
-control s
ĠBern ard
L arge
Ġslic es
Ġoff ence
ĠM ega
Ġest ar
Ġjoint s
Ġsum m
_pl atform
B uff
.add Subview
Ġret ained
Let ter
.d im
Ġess ere
ĠS caffold
EX PECT
ĉ RE
.long itude
ü nd
Ġstat ue
.add Widget
ĠCar ibbean
add PreferredGap
il de
UIL abel
ĠOp port
Ġimper ial
urs ion
Ġmand ate
Ġpromot ional
Ġv k
ia ÅĤ
Ġp yl
ĠCre ation
оз д
Ġsim pler
. what
ĠRec ent
St orm
. quantity
ĠL ov
" -
ubb les
_not ification
(w orld
ur ger
* (-
: "Ċ
h m
ans hip
ĠAl most
Ġmotor cycle
_f ee
Ġabsor b
ĠVin cent
Ġsound ed
ÃŃ st
Ġpharm aceutical
ht ag
ĠKind le
ital ize
ĠEm peror
oust ic
Ġspecial ists
åħ ¬
Border Style
/ \
RE LATED
(', ',
(ex pr
Ġh t
åį Ī
_C reate
Ġspecial ly
Ġ[] ;čĊ
Ġhe el
Ġse pt
_ arch
(in itial
% .ĊĊ
\", \"
Ġdiscuss es
Ġu pt
Ġ[ &
Ġman us
.h and
ĠM AIN
ĠDen mark
Ġ], čĊ
Ġcr yst
Ġn ack
Co ords
_in ner
Ġmid st
Ġaw ake
ĠÐ ŀ
-b reak
ÃŃ vel
_P ASS
ĠParam s
Ġdet r
Ġsp ider
ĠCon cept
Ġpre nd
CH ED
.Ex it
Ġpop ulated
Ġvirt ue
_SE SSION
Ġnou vel
o auth
Ġд аннÑĭ
r ink
.Header Text
atur ated
Ġer st
Ġå ħ
ॠĩ
_vis ible
ey er
Ġli able
Ġde be
Ġb w
{- #
_W IN
df s
H over
ĠP UT
- angle
Ġnob le
Ġtr aces
enc v
Ġuser Data
_in s
ĠS uz
Ġnews letters
ĠMod i
Ġentreprene urs
Ġtrib ute
Ġrum ors
Ġr r
ĠQu arter
ê³ ł
Ġfeed s
ó g
Ġen velope
Ġle ar
Ġk ø
develop er
Sim ilar
: ")Ċ
sub scription
Mod ifier
ital ic
Ġn asty
Ġtermin ation
Ġchar ming
Ġâ Ł
ton s
.tr ace
h ots
ĠU R
M ont
Ġjust ified
ĠG ang
ine a
Ġb og
( ap
_ $
Ġcont amin
.D ot
ĉ Debug
( exports
Ġpa ired
ĠAss ignment
Ġautom obile
ĵ į
Ġph ases
v w
@ SuppressWarnings
= \
r ant
- ed
ĉ await
Ġcert ificates
'> "
Ġint act
CT RL
M ike
greg ation
AT TERN
Ġre public
_up per
ili ary
Ġcomput ation
h ire
ĠSh in
_ ANY
ĠManufact urer
ĠC arm
Ġbear ings
_c omb
c ad
ur istic
Ġwholes ale
Ġdon or
.inter faces
press o
ĠBr un
-c lose
pro ve
_S K
ĉf rame
et ros
ĠP ain
_EX P
ĠL T
_f s
.dat as
ĉ ss
vo ir
ĠA xis
M ajor
=" <
[ h
Ġprof ess
igr ate
(s core
Key word
" os
ĠĠĠĠ ĉĊ
an alysis
Ġre play
.p ass
\ d
t ls
Ġsan ct
.l ight
_m obile
ÑģÑĤ ÑĮ
ĉt otal
u ity
Ġpa used
N AS
Ġen core
lo e
Ġ-* -ĊĊ
.h igh
am pler
ĠSec ure
Ġfrag ments
_ vel
ill ary
ĠSte in
ĠD awn
Ġmax imize
ภ¢
Ġ/ ^
Ġcontin ually
Ġsh adows
ĉ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
ĠI ActionResult
Ġinform ación
C HECK
.Selected Item
b undle
ol ley
< Int
AIN ER
ĠW ing
tit les
ount ain
C Y
ĠLoc ale
form er
< context
R adioButton
_s chedule
Ġfab ulous
Rob ert
_PRO FILE
Ġg ates
IM P
ĠPent agon
g old
b ach
employ ees
R otate
Ġch amp
Ġsel bst
Al tern
Ġconvert View
/ ,
Ġ~ (
St reet
_ place
Ġpersonal ized
P ublisher
ĠSO CK
_NAMES PACE
ĠStand ards
so ever
_C ENTER
Inter est
ô t
tem perature
View port
get Resource
Ġeat en
Ġsem pre
Ġab normal
Ġc ylinder
Ġtroub les
n od
Ñĭ в
g ames
_g l
Pl ane
g rey
_t bl
.Component Placement
ĠCh ase
Log ging
man y
ì Ĩ
Ġfl ame
=" =$
ĠGroup s
- U
ÑĢ Ð°Ð½
ĊĊĊĊ ĊĊĊ
Ġv ault
om on
pro blem
Ġtrad ers
Ġper ipheral
Ġhome page
(d es
ĠSuccess fully
Ġre boot
Ġcell ular
ii i
ĠPl ans
list ing
ĉd is
ĠRef lect
ĉex cept
") (
Ġtamb ém
V ehicle
acc i
l ush
Order By
Ġimag ined
code c
Ġdate Time
M icro
Ġrem inds
Ġfrustr ating
ĠV ista
Tr ain
Ġв Ñģ
Ġmolec ules
av in
Ġdoub led
Ġbr ake
Ġcalc ium
F riday
ĠId entifier
å Ł
Ñĭ й
ĠJ ah
R en
Ġsc am
ĠD ennis
.set Int
â Ł
Ġappe als
ĠA ur
Ġspl ash
equals IgnoreCase
wh y
Ġs ap
Support ed
Ġser a
Ġ: "
ĠVerm ont
Ġre un
ĠNov a
ĠĠĠĠĠĠĠĠĠĠĠĠĊ ĠĠĠĠĠĠĠĠĠĠĠĠĊ
R ated
Ġlay ing
ĠK aren
.Des erialize
Ġcode c
Ġtaxp ayers
; ");Ċ
Ġcr ude
Ġm ole
Ġuse Context
ĉres p
Ġp kt
ĠC annot
P ipeline
åĨ Ĩ
t ical
Action Bar
a eda
ĠC ritical
ĠN ad
Ġble eding
Ġll vm
/c ustom
ĠSim pson
S y
it ably
ĠSum mit
()) ).
EL LOW
$ ',
M et
In voice
ol ist
Ġsp ine
aut iful
p aid
Ġlock er
_ arm
\ "><
Ġtra jectory
_r ing
Ġhydro gen
tr on
Ġstat ute
Ġcondition al
Ġtr ay
-s chool
(w idget
$ config
Ġrequest ing
. uint
et on
brit ies
Of Type
AD MIN
p redict
Ġg egen
ĠH app
OC UMENT
ĠA part
Ġ---- -
ro e
u ide
just ify
ĠSqu ad
Ġprof es
.b ot
_c urrency
inn en
ĠM umbai
ĠNum bers
avana ugh
agn itude
âĢľ There
= http
çī ĩ
Ġv b
+'
Ġorgan izing
an ium
In Section
. and
Ġet ernal
Ġsou ls
_ ONE
_n s
_b asic
Ġret Val
-sh aped
if def
ĠMo zilla
Ġe ig
com pleted
Not ifications
TE CT
ri en
co ordinates
Ġpret end
pons ored
.std err
Ġgam ers
Ġdef ended
Tool Tip
uit ar
Ġfran ca
ĠW oods
Ġih re
Ġp seudo
Ġcrow ds
ĠSY STEM
le c
.k eras
Ġcirc ulation
e er
.c b
uz zy
í ĺ
.read er
Ġsequ el
Se veral
.port al
---- -Ċ
istr ar
 //
P i
Ġ\ ""
Ġcustom s
Ġdisplay Name
Ġnot ices
Ġcar b
._ ĊĊ
Ġproduct o
ĠÑģ л
Ġnumer ical
Ġun int
Ġc odigo
Ord inal
String Utils
Ġdé c
ĠL an
Ġshow case
Ġar ithmetic
-s croll
_T EMPLATE
ĠRouter Module
ĠSh ader
ĠÐ Ŀ
p olicy
Per formance
ĉb order
(file path
ç© º
_ energy
_C S
The ir
.sp acing
(d p
ĠL ANGUAGE
Ġhistor ically
">{{ $
Ġin ode
s il
Ġh ace
Ġsever ely
ĠOver view
Ġspr aw
Ġbeach es
: left
· »
($ {
ĠF IRST
ĠSp a
- ass
Ġb aise
ĠN ODE
ĠP izza
P et
(se q
\ ">Ċ
CppMethod Pointer
Ġv p
Ġi a
_se conds
em et
/b lob
_TH RESH
... čĊ
D est
ĠN H
.data Source
it és
ĠJ ak
s ell
Ġwork shops
< u
Ġr ivals
ĠEX ISTS
h om
-t oken
compat ible
.J Panel
Ġphys icians
art in
Ġdes irable
Ġdistinct ive
.D ep
g id
ili ate
, max
Ġprem iere
Ġq Debug
Ġadvoc acy
Ġwh isper
P t
Ġun changed
_q ty
请 æ±Ĥ
Se ason
avel ength
ĠP ul
Ġd ÃŃa
'] ]],Ċ
al is
(" &
bor o
Ġb m
ĠR adi
w rong
ĠGo ing
ime Type
ij i
- feedback
ĠN ames
ĠB apt
Ġprob able
ĠE ther
ĠPolit ics
_prot ocol
lin ing
S at
Ġcor rel
.Pr imary
(null able
RI ORITY
Ġcolor ing
Ġutil izing
d as
Ġexport ed
Ġcar riers
Con v
. editor
i ó
(h andles
Ġapprec iation
. import
ĠAust ria
ĠStr ip
il ight
Ġappropri ately
ĠP rest
ĠW ir
ĠUI Application
al chemy
ĠM ob
ĠD etermin
ergus on
register ed
_con vert
ĠVlad imir
.Show Dialog
ref lect
Ġsh ook
Ġass ure
ĠO ften
Ġcivil ization
Ġvocab ulary
fore ground
ĠS cope
Ġunw anted
act ing
Ġ( []
Ġmark ing
. original
ĠMO VE
Ġsport ing
ception s
NS Number
S izes
Ġprovinc ial
_Tr ans
Ġproblem atic
d igit
ĠEm ma
lock s
ĠC rew
ib a
') :
ish a
Ġm amm
Ġocc ured
w cs
(r ule
Ġmerch andise
es pecially
ĠT win
Ġn aming
Ġs log
Ġimpro ves
Ġad her
: text
.h adoop
_HT TP
.to List
.dis abled
Ġl enses
.in i
ĠR are
ĠUb untu
Ġsc ram
ol ation
tit ulo
Every thing
Ġnod ded
icht ig
_const ant
z c
l ift
ĠNot ify
ond o
ĠIN F
(" +
ĠK az
Ġd read
.m apper
le ur
ĠCome y
ĠN B
ic ers
.P ush
ĠH ack
ĠBrazil ian
_pro d
Ġ// ĊĊ
Ġb icycle
Ġun available
Ġadoles cent
bl k
Ġmit ig
_bl ue
ì ĺ
fade In
ĠUtil ities
ĠM N
; k
< style
- status
ind o
Ġinn ings
Ġg j
Ġ|| =
.e u
: Number
Ġcuis ine
ĠURL s
ie k
Ġw ires
ĉ ps
ie g
.m k
so ap
Ġsom etime
Ġst ap
_s eries
.T arget
æ º
.dest ination
OUN TER
R aises
& A
Ġsmart phones
NI Env
.s dk
Ġhelicopt er
Ġim pe
ĠB irth
A U
b readcrumbs
co ords
Ġexplo red
Ġl od
ĠI p
g able
ian e
Ġart ifacts
Box Layout
ا ر
list ener
.c art
ĠH uff
ĠHind u
ĠData Types
ĠDr upal
IGN ORE
Ġoffset s
ĠR TC
- login
æ ®
ĠQ Object
Ġprosec utor
R ock
_ch at
W ay
ì ²
Ġneg lig
Ġd ude
; <
Ġdeleg ates
_f ailed
/ dev
/ work
( New
et able
() "
( Icons
Ġp ork
ĠModel AndView
ĠV IP
ĠK or
m ix
Ġox id
ĠSC REEN
ĠFour th
/ ",Ċ
Ġte e
ĠSte vens
t icks
Ġp ledge
ib bon
ĠLo an
Ġne o
n umpy
ĠShared Preferences
- oriented
ĠLogger Factory
ĠGraph QL
zen ia
" _
W omen
.c ast
Ġdeliber ately
+ b
ĠAr n
font Size
Ġm aze
Ġbl amed
.m as
} )čĊ
eler ik
Ġsc anning
ĠWork shop
Ġfind en
Ġca ut
UI Font
( return
al in
cast le
//////////////////////////////////////////////////////////////// ////////
Ġincent ive
op ath
b lob
Ġcigaret te
Ġfert il
*/ ĊĊĊ
ĠSh ar
Ċ ĠĠĠĠĠĠĊ
Ġunc ertain
ĠS ton
Oper ations
ĠSp encer
Ġdef in
ĠS olo
on est
·» åĬł
Ġu omo
G ive
Ġdent ro
; padding
ent ai
ĠC ars
Ġenthus iasm
ĠOper ating
S kip
par ation
Ġprotect s
Ġre ver
d g
ĠC incinnati
Ġconsect etur
Ġm uss
employ ed
a uses
ink le
. Values
£ ¼
lo v
_W ARN
Ġbook mark
ĠAp ollo
. axis
Ġm ét
Ġop ener
Ġtum or
d an
Ġelement ary
Ġsk ipped
ĠK er
as ia
_res p
Ġdem ol
ĠCan adians
Ġt astes
U Integer
Ġ' ${
.aw s
RO ID
ri ans
M Q
ord able
Ġcous in
Prop agation
(S ession
ph alt
UL D
ĠSc alar
Ġblo ody
Ġ à¦
.m ask
, q
ĠUn its
Ġcent res
ĠPr im
. ]ĊĊ
ĠSh aw
P rom
ĠTh ought
Check er
_output s
( chan
E INVAL
Ġb ob
_c mp
P ed
Ġmat rices
Ġvrou wen
Ġgenu inely
high light
(d isplay
) !=
Ġdel icate
ĠL uther
ĠM iles
Ġuser ID
% =
ate urs
_B UF
---- ---Ċ
imit ives
Ġsh elves
sl ow
_in formation
LE G
W r
.form s
cel and
/ un
: &
.âĢĻ ĊĊ
=" %
Ġpro st
Ġfont size
uc ión
get ic
am t
=" .
Dec or
B rit
Ġ"" ).
Ġfound ing
.File Name
ĠT ier
Ġdisc lose
á m
.s yn
.View Holder
lic ant
_st age
Mon day
Ġdes erialize
t alk
Ġtradition ally
æĢ ģ
Ø ®
LE X
Ġe h
ĉ ROM
Ġ{ })Ċ
Quest ions
nc py
Ġfix ing
к Ñĥ
_ Key
: x
ĠSTR ING
ĠÑĦ ай
ĉ left
ĠBen ch
ell ij
UR RED
ĠDi agram
} catch
/ time
ĠMiss ing
db name
Ġs ore
ĠW alt
ugg ing
rep resent
ĠG S
ne ys
ĉ page
Ġvol can
(b tn
Ġexceed s
Ġ erg
Ġpil ots
ĠS ed
ers ions
Ġpat ron
R V
/ top
. asset
_c ross
. Editor
.t b
Ġwel coming
SC REEN
) findViewById
C oder
",Ċ
_P in
ues e
Ġover rides
_ ready
Adv anced
Ġop i
-c art
("/ ",
ĠDe b
CR Y
ĠVert ical
ĠO VER
ĠCorpor ate
Ġ"" ;
Ġste pping
e j
Ġaccus ations
Ġor az
_t ail
Ġindu ced
Ġel astic
Ġbl own
, //
Ġbackground s
âĢĻ une
-s dk
Ġset Interval
Ġincent ives
Ġveget able
_ On
exp anded
p ix
_sh ader
ĠSP DX
@ example
ĠW rapper
.Z ero
Pos itive
Ġsp inner
Ġinvent ed
ĠG ates
оÑĤ оÑĢ
Ġcompar isons
è ·
.pr imary
data Provider
add itional
ĉ options
s napshot
.set Horizontal
Ġ" {}
ĠFish er
hal ten
< Type
Ġmax Length
ĠM t
Ġê° Ģ
.jet brains
Ġident ifies
Ġflow ing
ĠDisc ussion
ats by
Ġsch w
ught y
Ġr ivers
.un ique
_PH Y
ed ral
( ll
Ġcs rf
pp ers
ü l
ĠEs pecially
port ed
ĠHarr ison
****** */Ċ
Text Color
ìĬ µ
w ire
Ġstatus Code
ĠFin ish
c ence
ĠMcC ain
ĠW or
( await
Ġ) ->
ĠRegister ed
IN ED
k al
par ison
Ġobj eto
V i
mand a
Ġrenew ed
ĠS of
ess el
.nd array
Ġcr ap
ç® ¡
.ab spath
( up
Ġclear ance
ĠT W
_C OPY
ĠĠĠĠĠĠĠĠĠĠĠĠ ĉ
Ġforest s
Ġarg uably
ĠA SS
he y
am el
_f ore
ĠSou theast
Ġab used
Ġpract icing
aked irs
ä¸ »
_res ources
Ġp ond
.F ixed
Last Error
ĠPsych ology
Ġ" //
! :
Re usable
Ġmens aje
Ġro spy
Ġb our
Ġvar ieties
Ġem path
(( {
_ org
ĠM es
ĠMag ento
IST ORY
Un less
Ġh j
ĠD uty
J un
, size
Ġpaint ings
Ġdisp ens
d art
Ġbehavior al
Ġr pc
cal culate
fr uit
_m m
ĉp thread
Max Length
Ġc urrencies
_cap acity
ĠO z
Ġfire arm
Ġcoeff icient
Ġbankrupt cy
w art
Ġfat igue
AV A
Ġes pa
_p c
ĠQu otes
_L IGHT
ĠT ickets
Ġrel ates
Ġpublish ers
Ġunlock ed
Ġ// ----------------------------------------------------------------
ĠInterrupt edException
Ġout look
r n
Ġreb els
W ritten
Ġas ian
ot to
Ġ ĉĉĉĉ
_g pu
T xt
.Image View
Ġsu is
_t ables
.Rec yclerView
Ġwhat soever
è ģ
] ++;Ċ
assert True
_ verify
ĠR ivers
Ġ ][
J et
id ian
S ibling
Ġgen res
.A ccess
OP S
Ġtr ivial
ภª
al en
в ед
ĠS word
Ġscrut iny
(c b
Ġcomm erce
Ġguarante es
_ad v
ĠL ET
rec io
Ġh ilar
Ġback yard
ãĢ ı
Ġillustr ated
/v endor
. Util
Ġw ow
LO Y
ĠMar shal
"> '.$
ĠB ak
Ġmod ifiers
d ictionary
ĠSt re
m ultiple
")) ,
ĠC ort
'] ").
( admin
ĠCre ator
Int ernet
( ms
log y
DECL ARE
ĠMarc us
<< <<
ãģ ł
_m y
(in st
Ġsc iences
ND ER
. enter
Ġit u
Ġbeh ave
P an
omb ies
=' <
')) ;čĊ
ĠM ENU
ĠWork ers
.No Error
Ġbind ings
Ġdis abilities
{ \
ĠM unicip
Ġco res
ur ple
ĠN okia
us ions
ĠF itness
.handle Change
Ġjav ascript
ìļ Ķ
( dec
Ġpack ing
-de pend
Ġtrans cript
z eros
_ alert
? ",Ċ
lib s
± оÑĤ
Ġ| ĊĊ
tr ained
ĠG ent
ĠR ab
x p
_config uration
å¤ ©
_ accept
.rec yclerview
: url
ĠMu hammad
Ġprivile ges
_b ank
uk u
w allet
ĠRO OT
Ġenc uent
? family
ĉ position
Ġc g
Ġprec ip
method s
_f ast
in crement
ĠT iger
_OCC URRED
qu ip
ĠH AS
_d om
Ġw reck
b j
Ġd ern
Ġorg ans
. entries
Ġ_ ('
ram ento
ĠJam ie
Ġp unk
IP P
Ġprogram a
Ġatt ain
Ġpro ves
/s ign
Ġanswer ing
Ġl adder
************************ ****
ĠW almart
ĠCONT ENT
duct or
Ġver bal
ĠP ID
c rypto
_CALL BACK
Ġ= ================================
Ġpot ent
Ġshort s
.U ri
.un iform
; border
ĠW er
Ġhere in
ll a
ĠI hr
P ixmap
l iteral
! )ĊĊ
g eneric
r ust
_script s
ost o
it us
ĠCoal ition
Ġrem ot
de ploy
ĠEag le
ãĢģ ãĢĮ
Ġimportant e
ĉ object
Ġseason al
ne j
aid u
Bind View
ĠSi erra
-b g
Ġmake Styles
[ offset
G ames
Ġhorm one
AR IO
head s
( select
ĠStart ed
@ param
_de cl
_b log
Ġa ño
\ Api
ĠMil waukee
Pro vid
An imated
Ġcool er
ĠSe ed
. Edit
Ï Ħ
ĠT aking
Ġborder Color
-found er
.Logger Factory
Ġ"" ĊĊ
AL T
ĠL ate
EDI ATE
Ġ);ĊĊ Ċ
af a
Ġcancell ation
At om
ĠB irmingham
emp resa
HE MA
asc al
Ġup side
.V ersion
ĠF older
ĠE ight
ĠV intage
ĠApp Delegate
ĠPre vention
.se parator
ST M
( room
gener ator
Ġc attle
ĉ Z
ĠPart icle
' };Ċ
Ġneighb ours
ĠState less
Ġalt itude
Ġsa int
об ав
Ġconv inc
ĠCont ents
Ġje une
(t s
Serial ization
(c ollection
ĠJ azz
ĠD od
ĠR och
ac io
comm ended
DEF INE
.on load
Ġspecial ty
PL ACE
_MO VE
Ġaccount able
Re uters
Ġf icken
Ġde pr
W ow
V oid
.s pace
ภĹ
Ġt q
ĠP ets
< $
(C urrent
ber ries
plan ation
Ġlist Of
ĠTh u
ĠPR INT
Ġm ismo
Ġdo i
ch k
ĠUn icode
( role
Ġvir gin
< Point
_RESP ONSE
-h ouse
ĠVenez uela
EM AIL
Ġp úb
_ex ist
B all
.C L
re ferences
ĠBeautiful Soup
ĉ Expect
TH IS
Ñĥ д
b ane
Ġtemp oral
ER IC
et as
Ġrefresh ing
Ġsec ular
@ synthesize
ac cur
Ġn ella
ĠS OL
.p ipe
Ch annels
èĩ ª
Ġinsert ion
á» ĭ
el ia
Ġadjust able
Can ada
ĠI TEM
Ġcur ves
ĠChe ap
let ing
Ġoptim istic
al lo
Ġpolit ician
_down load
= edge
ORT H
Ġmodel o
art o
. rotate
Ġs elenium
æĪ ij
_al ias
Ġrenown ed
.' .
Ġc zy
Ġal les
.Com piler
ĠB ass
Conn ector
.R ole
L INK
Ġc riterion
lem etry
Success fully
/p ng
Ġey eb
asp berry
( gr
Ġd angers
Ġcorrect ed
Ġgl ow
Ġelabor ate
ĠB ears
aw ai
=" '+
Ġpromot ions
Ġmathematic al
Ġ" `
_Generic Class
ĠChe f
.S ort
table Name
R IC
Ġvolunt ary
ĠBl ade
-e lect
ĠCom bat
ĠAb ility
Ġab dom
Ġd uck
T mp
åħ ¨
Ġer ase
.P h
ĠDefault s
p artment
_US B
ê te
; '
Ġp ads
ĠOb amacare
.T otal
Ġdiv ert
Ġcr icket
Ġrecre ational
( red
ĠC le
R U
Ġmist aken
ĠMont ana
Ġstr ive
_sl ider
ĠPl astic
Ġdecor ated
ĠV P
lic o
ĉf alse
Ġpre fs
( \"
_f alse
i endo
Ġ@ $
B ucket
act ical
ĠZ hang
.c ols
.B inding
Ġw ax
_ST ORAGE
Ġlaw n
Ġr f
.Sc ene
ĠCal culator
.d esign
Ġres il
л ем
E mploy
ĠPr ices
ĠP WM
ag i
.e valuate
ĉ param
Ġbr ass
bb en
Ġinflamm ation
ull ivan
Ġan not
Ġp H
iam eter
ĠB TC
( box
Story board
Ġcl ay
.assert Raises
| string
.App ly
Ġmatch er
und ed
Ġsatisf ying
Ġìł ķ
Render ing
_app ro
ind rome
AN EL
_f ix
br ush
.M atch
Ġsm iling
on aut
S unday
Ġdelet ion
Ġencour ages
P ull
Ġreven ge
Ġqu arry
tr ade
Ġc ables
(d elta
ites pace
Ġf h
.b unifu
Ġvi el
_IN CLUDED
ĠT ail
ad ar
of s
Ġmet als
g om
_method s
Ġn j
.St d
(w in
$ ('
Ġt urtle
ur on
Ġen rolled
ĠH z
ĠBox Decoration
Ġp ont
rel ationship
B i
³ »
Ġmas cul
Ġsh ades
Ġv r
ĠLog ic
Ġa in
ĠD IST
Ġcoll ar
" profile
Generated Value
ĠP ossible
Ġe ines
ĥ ģ
.time out
ĠE c
Ġjer sey
.D ouble
Ġqual ifying
v or
CRE EN
_A pp
_rec v
Ġali ens
It s
E sc
i ator
ĠE clipse
Ġg h
V ict
ĉ html
to o
. const
Ġant erior
ĠW u
(key s
Ġul tr
_p oly
ĠT ap
ĠB ud
A WS
Ġcrash es
_t ot
Cont in
-h anded
alth ough
ภļ
ific ent
Ġde ve
ut ory
ĠW orth
_M S
Ġfloor ing
Ġsell ers
ĠThank sgiving
Ġp ng
Ġval ores
Ġslee ve
Ġfil le
Ð IJ
Ġappoint ments
Ġv im
User Info
BO OST
Ġpos ed
initial ized
.product s
ĠLeaders hip
man uel
' %
em arks
Per centage
(d ist
. avatar
(h Object
ä» Ĭ
_ iff
ic one
; )
_n il
Ġab ol
е ÑģÑĤ
Ġven ues
.Con vert
! ')Ċ
.B itmap
sk in
_C OLUMN
Re v
G RESS
g ow
Ġw ished
tract s
.assert False
Ġscreens hot
Ġfo is
Com b
Line Width
ĠGr ab
Ġint ensive
ĉ sh
+ )
.first Name
_PRO CESS
Ġt ilt
it ored
.L OG
Ġb ak
Ġintention ally
.play ers
(c anvas
)) )čĊ
.Pro vider
_P UBLIC
T alk
ĠL iv
ched ulers
Ġl c
ad ic
feature d
.res ources
Full Name
Ġmean while
B uffers
Ġres olver
ĠS AP
_T E
G NU
ĠForms Module
_ wh
ĠS we
.widget s
Ġcabin ets
Ġsus cept
ĠB ott
activ ex
av ar
ant ics
Ġ" ="
_k wargs
Ġgame Object
ĠAng le
.I ter
mar sh
ĠB irthday
ĠC MS
request s
ĠPear l
_E OL
Ġlin ux
( org
_M ouse
.con structor
Ġz d
Ġk icks
art isan
Ġe ax
K n
pon ge
ĠFin land
Ġmet res
ĠAss essment
part ner
/ pre
! ',Ċ
[ Int
Ġos lo
date picker
/ String
op lay
ĠHe brew
, double
Ġtrab al
+" \
ĉ EIF
/ text
_F IRST
ĠP ete
Ġe go
Ġextr as
P DO
Ġreg ulate
ĠQ Widget
st s
ĠSh ows
ĠN HS
.c ourse
p thread
ĠF uel
.t imes
ĠÂ °
Ġstr ides
($ ('#
( words
Ġrhyth m
Ġsp ont
Ġsens ation
Ġsp ike
C losing
页 éĿ¢
N umeric
Ġbreat he
Ġfin ale
_F ACT
in ion
Ġch ill
Ġform ally
ANG ED
Ġ' :'
ĠпÑĢ Ð¸
a q
ĠFab ric
(l at
ĠPr incipal
Ġer ro
oc ale
N om
Ġf ost
_C USTOM
.int ellij
ert ools
Ġcl asse
adi ents
Ġfundra ising
EN E
_OPTION S
_ ob
// }Ċ
Ġprote ctions
.se ed
N V
term inal
;; ;
P redicate
Ġì ¶
Ġbomb ing
G F
Ġch ew
)) ).
qual ified
] ={
list en
C ENT
d igest
E ast
Ġd iver
Ġend points
Ġe e
Ġcolle ague
Ġdissert ation
_com mit
_D AT
. rc
Ġbre asts
ĠR ug
ĠP il
Contract s
ĠBry an
Web View
Ġconcent rate
ĠIn ner
Ġ' |
std out
_S ub
> -->Ċ
V ol
ĠS SD
)) ),
. Optional
Ġnurs es
Ġor b
_ pe
);čĊ čĊčĊ
pl aced
ess er
Ġther apeutic
Ġwhites pace
Ġa ston
Success ful
Ġpr aised
ĠW es
Ġe ighth
ir al
Ġvrou w
Ġf action
_b ias
Ġw itch
Ġnp c
(s b
ĠRod rig
_b ig
Dep endency
ĠAb raham
ard i
C AR
n os
Ġabund ance
Ġnut rients
in stein
.V ert
ĠI SS
< U
Ġsum s
_h ist
Ġfar mer
ĠA br
Sh ot
ĠBad Request
Ġh ass
ĠR ails
Ġaffili ated
æĿ ¥
Ġer f
IN F
ĠView Holder
min i
ĠR oth
Ġfaith ful
ĠPhill ips
AND OM
]. [
_P AY
ĠAr ctic
f aker
D igit
M ale
std err
se ys
Ġ Å¡
_rem ote
li que
Ġin def
ĠIndust ries
it ra
_p airs
< iostream
Ġsal aries
ik en
.F rame
PL IC
_S PEC
ĠMed iterr
Ġsystem atic
Ġinter rog
Icon Button
se a
int ro
ĠIss ues
enc rypted
Ġintern ationally
Ġsn printf
Ġpast a
ĠBrad ley
_ Status
AL K
_P AD
.l aunch
< select
Ġhar dest
Ġph y
Ġ(( *
-s lide
ĠNob ody
S u
Ġas ÃŃ
close st
_initial izer
Ġsupport er
-g en
Ġt ales
Ġcor p
_f u
s at
ne ighbor
.M igrations
Ġal gun
Ġsin on
.S pec
? ,Ċ
.G L
m ale
Ġmon itors
yl an
-L icense
.m atches
ĠA BS
ĠM ast
ĠW allet
($ ("#
Dir ty
Ġco pe
Ġinterpol ation
ous ed
ĠJ ets
.F LAG
.C ancel
.Event s
ne ver
ĠM Hz
> D
Ġs ervlet
bast ian
Ġ> &
S ID
_cl k
Ġdiv isions
} ',Ċ
Ġd ildo
Ġpar ade
m ajor
Ġab oard
; ++
Ġf usion
"}, {"
ĠDialog Result
ĉ arr
- em
_n r
(h andler
.N ET
.Xtra Reports
ĠSh ah
ĠB rief
- ,
Ġprec io
ĉĉĉ ĠĠĠĠĠĠ
Ġt ant
ĠGrand e
/ xml
_IC ON
ĠR etro
un que
Ġn ag
to Fixed
X L
Ġdecl aring
ĠCon crete
ĠAm azing
ĉprint k
Ġdeb ates
D ATED
Ġaest hetic
emet ery
Routing Module
ĠNash ville
W AYS
Ġw olf
Ġobserv ers
OT A
ans on
Ġe a
Ġgreen house
ĵį ä½ľ
Ġst air
Ġimmigr ant
_app ly
pe are
ĠBloom berg
_PL AYER
Res p
æŃ £
Cho oser
ĠI Collection
P eter
Er ro
.detect Changes
Map s
Ġs queeze
ĠHom es
weg ian
Ġformat ting
Ġnegot iate
ul d
ĠN ep
ĠQ B
Ġeconom ies
Ġ*/ ,
Ġredu nd
ĠA ber
.IsNullOr WhiteSpace
yc led
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĊ
_S h
Ġske pt
Ġre created
Ġget Type
Ġmarg ins
Ġcolon ial
ch arts
// @
Ġprocess ors
è¯ ´
b atis
æĦ ı
ator io
mention ed
P atient
Ġpre y
Check box
_x path
.s kip
ĠMorm on
ĠMemory Stream
CRE MENT
Ġk u
m eld
\ Data
ĠK ernel
il tr
éĢ ģ
( profile
Car bon
RO LE
( pl
] *(
.m emory
Ġmed al
Ġadvis or
it ät
Ġh dr
ier ung
ĠProvid es
( alpha
Ġteen agers
- parser
.L atLng
] ()Ċ
Ġfel ony
ĉĉĉĊ ĉĉĉĊ
BO OK
Ġsl ash
Ġclear fix
ĠPro phet
å® ¹
right ness
-f i
.k ind
ert on
J im
Ġmanip ulate
Ġworks heet
ol in
st ars
Ġart ifact
_EM PTY
ĉm ain
-------------
/ static
IT IES
ĠCoun sel
ĠW C
ĠBL ACK
-s ystem
ĠTri ple
.b t
so ftware
] ').
In jection
_not ify
Ġfif teen
Ġamb assador
break ing
URI Component
ĠPro test
.Res et
ĠMP s
v ro
.get Status
_m ore
c up
ĠKen ya
å· ²
Ġam munition
×ķ ×
ĠD ash
Ġunder go
Ġbudd y
ÑĤ оÑĢ
et ically
_O ut
ĠBroad way
ª Į
ĠF itz
Ġstri pped
-c ache
Ġ umb
Ġan om
Ġs iblings
ocument ed
Interrupt edException
Ġp eng
l st
_AL IGN
-c ap
R D
cell s
ĠMot ors
Ġtransl ations
ust ering
é ļ
Ġle aks
file Path
Ġout going
_end point
_G L
.l iferay
ric ht
ĠOpen GL
.j pa
Ġaff ection
fl ux
Ġg ly
Ġb ud
>' ;
Ġexpress ing
ĠI Q
ĠF act
/************************************************************************ *******Ċ
_m ass
)) :
Ġcon dom
Ġcreate State
omet own
Ġir r
Ġ> (
> B
iter ation
ãĥ ª
Ġshirt s
ount y
-> $
_S IGN
ĠD ale
Ġj j
E asy
F re
ĠN y
Ġch lor
match ed
ĠG erm
- UA
ĠN athan
educ ation
-y ard
- che
h ouses
r itional
Ġprox imity
Ġdies em
áºŃ p
Ġd rought
.a udio
ĠLe o
Ġfavor able
in ch
ĠD aw
rib ly
_st udent
id able
O VE
Ġlack s
ounc ing
.b usiness
Ġre open
may be
_G LOBAL
Ġdress es
ĠEd wards
ens ible
ĠHard ware
ĠEx cellent
ĠTime Unit
CTION S
Ġsched ules
Ġseg ue
Op ens
am men
- Identifier
Ġst aring
Ġhapp ily
ĠH ob
' _
Ġ" );
ament os
et ched
Ġ/> }Ċ
. Users
Ġinterrupt ed
Contact s
Ġreg istro
in burgh
CH A
_ imp
ph is
s ay
Ġretail er
.N ODE
/ maps
_L AST
ĠCh arge
_g uard
Coll ider
ĠStateless Widget
": ["
(" ../../
iox ide
ĠS und
Ġ'' ;
un set
add Widget
л Ñİ
el les
alk er
A rc
Ġded uct
G UILayout
ĠV illa
Ġfor bidden
_ where
Ġ\ /
ĠT ib
_A X
] čĊčĊ
ĠB ir
Ġb end
ĠMA KE
ĠM ET
Ġfut ures
Ġweight ed
"" "čĊ
Ġauthor ize
(pro gram
}, {"
Ġcoeff icients
ê s
Per Page
ĠBath room
ĠPublish ing
G PL
Ġsub missions
ĠNUM BER
j Äħ
Ġaddition ally
em pre
ĠSh el
ot yp
S olution
Ġth under
_ ec
ĠĊ ĠĠĠĠĊ
ĠF ellow
Ġk ay
Ġnew State
ONT AL
Im plementation
.L ook
Ġ ents
Ġl ors
ĠB IG
f ab
Ġaver aged
ĠFe edback
ĠW ells
Ġm artial
Ġind ul
ĠComm unist
ĠFore x
ĠAgricult ure
" [
Ġqu ar
ĠK ont
ĉ view
. Bytes
des ktop
ĠM akes
akes peare
.Null able
Ġspot light
V B
ow y
(t orch
tr idge
_b ounds
Ġapolog ize
.add Item
ant d
* );Ċ
, u
(g en
ç» ĵ
re ator
ĠC ord
ou pper
.m etro
Ġ ew
ĠW ORD
.A fter
Ġdet ained
ĠHam mer
ex isting
Ġo st
Ġmon ument
-c ustom
User ID
ĠN om
Ġre jection
(d im
Ġsingle ton
ĉd ie
ari ance
re ports
] !=
eld a
Ġpreval ence
_reg s
." .
Ġfemin ist
Code c
Ġ **Ċ
(label s
_M ARK
FA ILED
Ġadminister ed
W N
ĠĠĠĠĠĠĠĠ ĉĉ
Ġn oun
w ig
Ġg otta
Ġr if
- im
ĠPaul o
ĠCommand Type
] ))ĊĊ
-z ero
Tr aining
Ġl ord
_ art
re ddit
C ert
Ġpes o
R ot
Ġend anger
.d r
user Info
un ts
n v
ĠTrail er
-f irst
(m ake
Ġbenef ici
-bl ack
i ÃŁ
Ġund oubtedly
Ġm ex
ĠAnc ient
( as
Ġdes cent
P ick
Ġrep lica
$ obj
ä hr
Ġar rows
ft y
ĠLib ya
ug a
charg ed
T ur
Ġh omic
iss en
ĠF ake
Ġbe ers
Ġsc attered
( Time
UT IL
Ġbureauc r
/pl ain
Ġstick ing
FA IL
ĠC ovid
Th ird
_p resent
ĠPier re
Ġë ª
Ġ[... ]ĊĊ
Pro b
ĠTra ffic
ica o
do ctor
Ġ), ĊĊ
T abs
al u
ï¼ļ âĢľ
Ġinher ent
_N o
rit is
ĠPro of
.b asename
ä¼ ļ
Ġch im
ĠProt ected
c rit
Ġpr one
Ġк он
ĠHero es
Ġan xious
Ġan os
Ġweek ends
Ġs ext
Ġredu cer
= UTF
h alf
ĠS aw
.m m
Ġnue va
.current Target
.l ua
_EXT ENSION
ĉ reg
ĠC trl
_ align
accept able
Ġrush ing
fr ac
Ġbo asts
F ive
 ±
ĠTem perature
> ):
Ġchar ter
RE ATED
Ġsubject ed
Ġop c
health y
使 ç͍
ĠScient ific
Ġfra u
ri ages
ภĶ
.in ventory
ation ale
M ad
min utes
>> ();Ċ
ĠEn v
Ġrecord ings
Ġsusp icion
sql ite
ĉ read
ãģ ¦
Ġwor ries
.put String
ĠSh anghai
( uid
r er
ĠvÃŃ de
") :
Ġmethod ology
Ġк оÑĤоÑĢ
cc c
av ad
Ġindu ction
ĉ Thread
, string
ạ i
neh men
u ition
Ġ* __
.em f
Ġì ľ
/th emes
ĠN ine
. One
ĠEm bed
Ġf az
u ations
Ġpriv ately
Ġl ing
[ F
ush i
Ġlaunch es
( KEY
G MT
Ġaim ing
pat ible
ĠB iden
i w
ĠD egree
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
Ġ$ ('<
á rios
to UpperCase
ìł ľ
ĠE UR
Ġovers ight
Ġtable sp
Up dates
.m akedirs
Ġhum idity
/ template
Al ways
( IS
_c ert
D ig
Ġunder way
ort on
ĠHur ricane
Ġsp ends
ĠSeg ment
Ġfl ies
ĠT oggle
ĠLyn ch
Ġs enses
ĠK os
set Enabled
ist ically
Ġtest er
Ġadministr ators
Ġtag ged
Ð ĵ
Ġshort cut
ĠRes olution
Ġsuperv ision
ĠAsh ley
Tr acking
ul atory
and el
ist en
Ġun re
(d iff
ANT S
Ġr ider
Ġs Äħ
.S eries
_ orders
ORIZ ONTAL
Ġret ention
ãĢĤ
.Test s
S yn
.parse Double
k ode
z ent
Gener ation
Ġadm its
ĠLe ak
Ġa ka
RO WS
ĠAng ela
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ
Ġno on
Ġst ark
Ġdrag ged
ãĥ¼ ãĤ
Ġrec yclerView
ĠSil icon
_s uffix
J on
co ck
ĠProb ably
Int roduction
ĠT error
( This
ĠBase ball
Ġj enter
chest ra
.n an
= g
Ġclar ify
y ii
ro ots
Ġnote book
ĠEx cept
Ġr ises
ĠBr ussels
ator ies
. USER
rosso ver
/ upload
ĠEvent ually
Cons ider
ĠB ound
. identifier
(un ittest
Ġinfer ior
Ġc rc
Ġaut ism
UI Alert
ĠK avanaugh
in ement
queue Reusable
S kin
.back end
.get State
und ing
Ġsub class
Ġref ined
Ġanno y
Ġr nd
Direct or
Ġë Ĥ
be cca
m ongodb
ĠCommon wealth
A z
ĠTh ing
Ġre com
un ing
ĉ con
ĉ ĠĠĠĠĊ
em ics
ec d
Ġhorn y
AT RIX
Ġmis leading
ĠB ew
/ node
c stdio
ภ§
Ġaddition s
r ir
_request s
Ġre cherche
st udents
_position s
ert ext
ĠEv olution
and ez
Ġdist urb
key up
ĠBut ler
.read lines
_std io
Ġbe e
ĠArch ives
Ġnever theless
UR ITY
Ġdr ones
ur ities
Ġâĺ ħ
"> čĊčĊ
Ġdi agonal
ĠC ancellationToken
_ Internal
Ġru in
.Q t
ocr atic
T el
ĠAn swers
m atic
Ġx p
at em
_j obs
_ any
Ġsen iors
Ġland mark
ĠQ List
Ġman eu
ot ify
/ ";Ċ
/ server
ĠPhil osoph
uten ant
( io
h z
Ġauthentic ated
d v
- Compatible
Origin ally
, function
ãĢĤ čĊ
ĠRepresent ative
as ily
irc uit
.d t
(m ath
.M arshal
[ ,
ĠC ities
_ turn
| )Ċ
Ġcant idad
al ter
ĉ ui
ĠNe braska
Ġsk irt
.b g
Shared Preferences
( style
Ġg rief
g ew
Ġsaf eg
ol ang
_l ists
ì Ľ
Ġgran ite
Ġhott est
.j dbc
.C ustomer
Ġâī ¤
Ġwa ar
_sc ene
+' /
ĠJ TextField
Ġse ating
Ġwe ars
Ġ` /
C ases
ĠY outube
ı m
Ġbal con
, G
Meta Data
- price
SC R
Un ity
Ġtr unk
={` ${
Ġearthqu ake
Part ial
Ġsub st
Ġelim in
=" '.
//* [@
Ġsuperv isor
vro let
_ article
Ġp ane
b io
Ġmot ors
N M
F rank
Ġon ion
- word
Item ClickListener
Ġb rit
end encies
Com puter
_r unning
( day
- he
(n amed
ĠS ach
о Ñĩ
c ampaign
.Ab stract
(w rapper
.p ay
Ġu w
Ge o
r ails
/ select
icht e
son s
E VENT
Ġal iment
Pro viders
A wait
_INTER VAL
. off
Ġgl uten
_cl oud
Ġw en
.ex tract
ĉ button
/ MM
Part y
Ġdem ographic
_err no
Ġh iking
(' ')Ċ
", @"
Ġw it
r á
olog ie
ĠSt yles
ĠBrowser Module
.Request Mapping
ic ans
P AGE
cre ation
ĠF erguson
ud ed
num bers
ĠGT K
Ġpresent ations
ĠB obby
_s pan
est yle
Ġilleg ally
abel a
Ġbattle field
cap acity
ter ror
] ");Ċ
Ġwar rior
le ader
ĠDB G
ĠRe venue
Ġvig il
Ġcounter parts
( Error
ACT ER
Ġhe eft
Ġselection s
ze ug
t om
-t wo
. ;Ċ
_st atement
ĠA id
ĠV ul
_r gb
Ġpr izes
Ġedit able
ĉ form
ın ı
.de cor
D emo
lic es
Ġen ctype
rat ulations
ĠR OS
_ch ars
ĠJ ahr
part ial
Ñĥ ÑĤ
ĠRe ceive
ĠL ands
AP TER
Ġch opped
.. "
ĠAn aly
ĠU ID
ĠR adeon
ĠB ee
Ġun m
> M
.find all
Token izer
ĠWH AT
Ġs j
D rawing
E ss
ON D
Ĭ ¶
(p acket
âĢĶ but
Inv ocation
ĠN uclear
? ;Ċ
Ġgrand es
ĠC rypt
rem ark
Ġ'../../ ../../
Ġin ability
m agic
c ats
Ġsim ulate
: ${
in flate
Ġen er
: NO
ip les
Ġmer it
ĠR ated
Ġgl ue
/b log
Ġg ren
Ġthr illed
.C H
unc an
ĠPR IMARY
Ġper sec
Ġfe ared
.M IN
ĠThe ater
é Ĵ
ategor ie
æ® µ
Ġappet ite
s quare
ĠAlex and
.User Id
_g t
_ enter
Ġgradu ates
Fragment Manager
Author ize
-N LS
(M y
Ġtri umph
ust ing
_PARAM S
Char acters
(: ,:,
_B UILD
M Hz
Ġwash ed
Ġun cle
Ste ve
ard own
${
_confirm ation
Ġtro phy
Work s
ĠElect ronics
ĠMediterr anean
_m etrics
Ġannounc ing
ĠD AY
_pro to
Ġp ear
base Url
ĉĉĉĉĉĉĉĉ Ċ
Ġcoord ination
: N
.an imate
ĠC otton
_h it
â ľ
Ġjet zt
if ter
(f ields
own load
ific acion
.c uda
ĠLi u
> equals
ĠA ce
ÑĢаР¼
ĠSuper man
ĠGarc ia
Ġarrest s
ag ar
Ġ{} )
Ġmac ros
rou pe
ê tre
Ġtw isted
str uments
_ ("
_ vertices
ĠTrans ition
и к
[ max
m ind
Ġaccess Token
Ġun le
m us
c op
ĠF actor
Ġcon ced
Ġre tr
.l inalg
-s lider
ob l
_Static Fields
Ġz ombie
s elling
Ġch ap
Ġsh aking
ĠTrans late
ĠAm sterdam
ĠE TH
_EX TERN
k d
_d isc
Ġpreced ing
Ġpri x
Object Name
_mod ified
ard ware
Ġ?> ">
ĠD W
` ${
Ġ?> ">
uy en
Ġdon na
Ġx si
Ġ$ "{
ĠD rawing
, nil
Ġon der
B G
O bserv
Ġconsider ations
bo at
ĠB anks
Ġind ict
, I
ĠBl u
(v ersion
client e
ol an
LE SS
assert Same
_ void
ĠW AS
ĉ enum
Ġmix er
E W
aff e
Ġblow job
text Field
Ġimm ense
_re po
Ġglob als
ant ages
.t oday
Th ursday
ĠBr ig
{ })Ċ
ĠIm agine
(G PIO
Ġest o
ĠPro vince
ĠM ental
_c ells
ĠJul ian
.S creen
Ġc andle
Ġmon de
Ġv erg
iter als
-l ayout
G uest
Ġv ind
ĠE cho
') }
Ġman n
_BO OLEAN
h ap
Ġnight mare
UG H
Ġnon etheless
Ġa the
ĠHoll and
ĠB orn
\ ORM
an ut
_level s
Ġpet ite
- art
_SH OW
number Of
_th umbnail
am ins
ĠDef ines
Ġ" =
.Status Code
Ġdign ity
ĠB ike
.New Line
ĠGl as
( logger
Ġcatch es
v otes
Ġexam ining
/ register
Ġspec ifying
_f ixed
Ġdraw ings
Th reshold
A x
ĠArchitect ure
(p id
W ire
( cont
l ane
List s
Ġs print
Ġgrand father
_A G
Ġsched uling
CL US
atur ity
Ġlock ing
[ size
_st yles
Ġw b
-- >ĊĊ
Ġspin ning
_p ending
Match ers
. Keys
ĠP V
en us
ant is
Ġdisc ard
Ġh aul
Ġem pir
Ġpath way
Ġo ak
м ен
-ind uced
Ġimp air
ĠCal gary
.is Hidden
d z
_ include
Ġg m
Ġ' ('
P Y
uggest ions
Ġcommod ity
c ro
/ sub
Ġget Instance
ĠLeg acy
ĠK il
B al
( short
In form
+ x
* r
ĠHope fully
or ate
Ġmach en
Ġtreat y
ĠO ri
.p ublic
-h orizontal
Ġtact ic
Ġb ord
w ares
Ġam mo
ĠL ists
Ġequ ations
/ her
ĠNS W
B ounding
_C ollections
Ġav ail
.Drop Down
è °
Ġh h
Ġl Ãł
.p b
Ġmemor ial
ĠAT TR
Ġexhaust ed
Ġt sp
ĉ redirect
Ġlik ewise
ST ER
L java
Ġcondem ned
oca ust
(str ict
Ġexem pt
Ġs ms
Ġex agger
S YS
Ġl ounge
: ^
Ġto dd
de b
ator ial
ĠPort er
Ġtu ition
Ġexem pl
Ġp aren
.line To
Ġkid ney
Ġç a
Ġc ui
ï¼Į 请
X C
Ġmo ż
Ġnomin ated
l ung
Im Gui
ĠB uzz
Ġstere o
port al
res as
Ġk lass
Ġdraft ed
Ġproject ile
/g pl
(param eters
* )Ċ
Ġassist ed
ĠNS Integer
s itemap
:n th
.View s
.Argument Parser
Ġme er
z ier
ĠD ig
=$
_per mission
ĉ Add
olog ia
Ġsc i
Ġfinancial ly
Ġscroll ing
.d ist
_H AS
ub untu
.p ages
In cre
bur se
ĠAm ateur
æº IJ
B lob
Ġch olesterol
DE S
min imum
Ġref using
unn ed
Ð ľ
ĠR D
.S ervlet
Ġ*/ ;Ċ
udd en
Ġview Box
Ġmetabol ism
Ġste aling
ĠB ever
agn etic
VERR IDE
_A UDIO
ÑĢ Ñĭ
Ġarch ives
.line ar
={ <
unc ated
Access Exception
Ġpicture Box
ĉ select
L atitude
vis or
re ib
Ġp ak
H ope
ĠIter able
.response Text
ĠQu ad
ĠBrook s
ĠT ot
O PT
el ong
Ġcoc aine
Ġan o
D an
Ġps i
ал ÑĮ
.get Child
ĠRE F
- ab
ĠTri angle
< Text
ĠColomb ia
ink y
èī ²
) }>Ċ
Ġpl ag
p ine
Ġblank et
Ġ:
ĠTrans lation
n ov
Ġper fection
ĠConf eder
.st ub
.Interop Services
. Store
Ġen rollment
Ġde er
M ovement
- from
h c
Ġev angel
ĠIll ustr
Ġtr ump
_ Start
plan es
ĠB il
Inf os
- trans
Ġr anch
ĠL inda
_m ar
RE T
/ net
L aw
N F
ĠPre vent
Ġc ried
Ġeduc ate
ast ics
y i
.Line arLayout
M ETHOD
ĠE g
m apper
æ ĻĤ
.as array
Ï ģ
i ção
Re use
_re v
ĠPRO DUCT
_C ode
ĠĠĠĠĠ čĊ
ĠSER VICE
_c over
. ,Ċ
.Execute Reader
ĠD ining
. arch
Ġot ro
ĠDis covery
ĠKey Error
ĠBenef its
_SH A
.Un marshal
HE ADER
M utex
AM A
Ġinit iate
St ay
L ittle
Ġ( ),
Ġdecent ral
Res olution
. health
ĉf close
äº ¤
Ġstake holders
Ġarch ae
D igital
les cope
_p en
ĠItem Stack
ĠCan on
ĠK end
ĠÃ ¸
_ ajax
ing redients
Del ivery
Se ctions
Ġdisappoint ing
ĠG ren
, re
Ġdec rypt
olog ic
_f mt
ĠSl ider
n ah
W ashington
z ung
ĠÑ Ĩ
yc z
ie ves
.DE BUG
ĠT I
Ġh acking
Ġcent r
fl ows
Ġdid ReceiveMemoryWarning
Ġaccount ability
C OUNT
лем енÑĤ
b lo
/ id
ĠSl ow
izz ard
.remove EventListener
Ġìŀ ħ
/ I
is ma
ĠH udson
} },
um ed
Ġreal ise
uns afe
Ġz us
Ġshort age
ol ia
_p riority
Ġflo oding
oper ations
P oly
ab an
[ cur
Ġesk orte
_DE SCRIPTION
_n at
Ġmal icious
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ
ĠPark s
Ġtaxp ayer
ĠF oster
Ġsexual ity
ç ³»
ë °
\ čĊ
.se ek
ани Ñı
/ article
è¿ ĩ
ĠU hr
Ġgrand mother
ĠB le
f urt
amb ah
not ifications
de precated
Ġuint ptr
ok i
( Array
Ġaut onomous
Ġo br
¯ ¯
Ġbas ename
Ġunve iled
s ol
ĠNotImplemented Error
Ġde press
_ '.$
ĠUN IT
% ',
-t ag
g rep
ĠM aintenance
Ġwar fare
_RES OURCE
(s pec
(c v
Ġn ada
çĶ µ
Ġcrow ded
Bel ow
ĠZ ach
Est ado
_pr ime
Ġtrab ajo
Ġinform ative
Sc ott
Ġserial izers
ĠN as
Th unk
Ġmerc y
, ...ĊĊ
Ġadd ict
. constants
Ġdata frame
_re ason
gom ery
ìĬµ ëĭĪëĭ¤
Ġneg lect
ĠL ines
Ġmem b
_EX EC
ass age
ĠY ard
{} '.
Ġlot tery
te in
_c alc
ik u
_RE CORD
W arn
Ġhealth ier
ure ment
Ġy arn
ĠCor ner
( zip
( init
ĠL it
H W
sub set
ĠM F
ET ERS
_ rot
Ġ ere
ĠOver ride
W allet
_re ward
Ġs age
set Visible
ĠJson Response
IC Y
è¯ ¢
Var Char
a at
-g reen
Ġir q
an ity
Ġwho ever
_sh are
Ġf out
roll s
Ġwilling ness
.component Instance
Ġhon ored
ur vey
B er
Ġrun ners
Ġlie u
or por
_ structure
Bar ButtonItem
ad x
ĠBenn ett
Ġdil ig
Ġfl uct
IDD EN
_Se lected
( div
Ġquick er
al ong
graph ql
ine z
Ġc ite
ĠIn structions
Ġinsert ing
.cloud flare
cou pon
ed List
ĠSt ores
_m alloc
ç¬ ¦
ĠAw esome
Ġl amb
RE ST
Ġint est
ĠNav bar
.f eatures
In crement
ĠP om
Ġins ufficient
_LOG IN
PLE MENT
ĠO Auth
. INFO
Ġex otic
ĠC ASE
ĉ ĠĠĊ
ĠG and
thes es
Ġnov o
ĠD ell
â̦â̦ â̦â̦
_s oft
Ġagree ing
c ents
lo an
' ",Ċ
ĠR an
DE L
Ġorgan ised
+ n
ĠHealth care
Ġdeter ior
Ġimplement ations
Ġcar n
Ġ, '
ĠLO AD
Ġplant ed
æľ ª
Form Control
_m atches
Ġperiod ic
_T o
ĠJo el
Ġan kle
Ġmilit ants
ĠW itch
un iform
uent a
Of Week
Ġperpet r
Ġinter ventions
(w riter
ant ine
Progress Bar
Ġle agues
com press
iz ione
ĠE A
"] ="
ĠSte phan
min us
s stream
_ led
Ġ================================================================= ========
" When
Al ready
Ġcont empl
Ġat au
ĠCongress ional
Ġrap port
ĠB our
ish i
Ġt ym
ĠAr men
ĠÑĢаР·
- format
_ Read
(column s
Ġne ue
_box es
ĠSand y
_ ,Ċ
ĠW izard
Ġor den
Ġfiles ystem
fl ight
Ġw sz
ance led
Ġd awn
ĠG son
_w arning
ĠI celand
Ġsl ut
Ġset Is
_id ent
Ġoff shore
ĠSk etch
; %
Ġtrib es
_SP ACE
Ġot ros
Comp iler
ĉ End
Ġ] ),Ċ
Gr avity
Ġt ensions
Ġsmooth ly
K now
oo thing
ĠStart up
ĠH yp
Ġam azon
ĠRe ceived
zen ie
ë ŀ
ĠCh ocolate
ĠÄ °
" No
ĠA LS
ĠProgram ming
ĠDog s
Ġgood ness
(err no
/ es
Ġremot ely
ĠH ooks
U uid
Ġover ly
Ġå IJ
Ġg pu
Ġstim ulus
(st ep
. You
Ġbi om
IN C
.b its
(m Context
Ġamer ican
Ġterr itories
ĠN D
] "Ċ
ĠM apping
Ġproceed ing
. ax
Ġsub string
B UTTON
ĠI g
- pane
ĠAn s
Ġgrad uation
Ġpers pectives
M ixin
_min us
ĉĉĉĉ ĠĠĠĠ
")) )
normal ized
.last Name
Ġcl an
As ia
(M ouse
pag inate
Ġg if
el ig
Ġpost ers
n ings
ĠÏ Ħ
Ġap ost
ĠIh re
Dll Import
ĠE qual
Ġdistingu ished
ne apolis
Ġback drop
ĠAltern atively
/ mod
Ġl end
ĠSH OW
_c odes
Ġat é
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
-c ase
ch te
Ġdon c
: add
N egative
f avorite
Ġattr actions
int Color
ĠP ir
Conn ell
Man ifest
te ams
Ġ};ĊĊ Ċ
Ġpl ural
Ġover time
ĠEu ropa
ĠBang ladesh
( an
Ġl ingu
it ime
inst on
.sh adow
ç¨ ĭ
ĠU SS
Server Error
IV ERS
ĠJ in
Ġhum ble
aut oload
are z
âĢ ²
ĠA str
icol on
.View Models
ob o
Ġsw ipe
Ġre cession
é ķ
Ġì ĺ
ner g
ing redient
mail to
ĠF ame
Print ing
P ixels
ĠB ash
post a
_J O
Ġinf amous
ĠL anc
(local Storage
.bl it
Ġyoung est
Ġfield Name
Ġcont ing
Ġw ool
ĠIm Gui
ĠN ST
.p refix
To Int
ĠSo x
Ġhabit at
(" |
=' "+
ING TON
_w rap
uck ets
ĠW RITE
Ġmedic ines
Ġmembr ane
ĠJ Text
Ġreprodu ction
_re ceive
Table Row
queueReusable Cell
h ooks
Ġre lying
Ġdr illing
_I l
(ex ception
Ġdur ability
Ġhes itate
Ġcomp art
IL ING
ĠEld er
Ġca ffe
Ġdevelop s
ish er
Ġp ly
Ġto l
_PL AY
Ġfr iction
(al ways
Ġind igenous
ĠOper a
ĠCamp us
anc ements
Ġl itter
.l imit
( Token
en is
Ġhighlight ing
ĠA ub
Ġvalid ators
-h ost
w heel
< {
)) +
ĠNews letter
_ average
Ġsod ium
ĠH il
ĠM ile
ĠAuth Service
Stat istics
ĠNut rition
Ġspons ors
oven ant
============ ==
.A bsolute
Ġf Ã¥
Hand ling
Ġ---- ---Ċ
(d irectory
"). Ċ
an ol
.b rowser
ĠGr inding
Ġc k
F requency
() ['
Ad just
cre w
af ety
Ġg n
Ġw ives
oo o
Ġprostit u
Ġo ù
if ty
Ġlit igation
ĠE z
J eff
.p k
ĠSh oes
c orn
yy vsp
Ġad ap
= u
CON F
AND ARD
Ġelev ator
b illing
Ġc and
Ġcar p
[ field
- lib
sequ ently
> -
Ġl cd
------------ ---
(" "
Ġtact ical
ĠRon ald
ex tr
ĠF est
Ġf uer
-n avigation
Ġk b
gh ost
Ġhandle Change
_cl s
() !=
Com parator
.v m
ĠCo x
_re view
/ @
_c ookie
Ġrecogn ised
ld ap
Thread s
ĠSex ual
ĠB earing
(S QL
Ġx r
Ġth igh
URL Connection
ĠSU V
Ġm Context
Ġinc idence
ĠE ste
.s up
_t e
(EX IT
C MD
/ ">
Al most
ĠU ne
Ġand eren
ĠSingle ton
Ġb ore
Th ink
Ġn arc
] initWith
_sh op
(str ategy
! ',
her its
ĠDes k
_m achine
.net ty
ı nda
= <
ĠQ R
ĠS idebar
.split Container
Ġon Success
Ġmon key
En joy
(n odes
pect rum
Ġ(* (
ĉU INT
, height
ĠNetwork s
.t ail
.l inspace
Ġ" ...
List en
Æ ¡
.Ch annel
- defined
Re peat
ad just
ER M
_ application
.assert NotNull
- stream
Ġr abbit
Ġposition ing
Ġw oke
Ġf ing
Ġmulti player
Ġregister ing
un til
Ã¥ n
( ::
uss ions
Ġpot ato
ĠE quals
.S up
/ap ache
Ġ( =
. ")
.p tr
ĠSpe ech
.cl ip
ĠGab riel
Ġmusic ian
/ issues
.sh op
ĠH ier
_RE T
_b ucket
ãĥ ¡
av s
Ġro z
fl ower
Write Barrier
ĠMil an
Ġlegisl ature
ĠD oll
Ġprov ing
.concat enate
âķ IJ
Ġg char
cdn js
b les
ĠList ing
л о
.xr Label
ĠS ak
just ice
ĠVal entine
un less
Ġp iger
(r un
Ġtest ified
AN A
ĠRem oves
)) ));Ċ
rec ated
ĠRuntime Method
Ġcon qu
ãĤ ¢
Ġt issues
ail er
ét é
- Star
Ġfl ames
.set Icon
Ġsup ern
Ġvag ina
- variable
Ġwell ness
C UR
Ġbel le
.get Request
Ġp oco
ben h
ag ens
Ġsp ill
ĠJ ur
Ġdispatch er
н ого
emon ic
(dir name
ĠÐ Ķ
Ġpas se
Ġg anz
ric ing
E U
Ġmuj eres
ess en
.at tribute
j j
ĉĉ ĠĊ
[ ^
Ġstrtol ower
lex er
ect ar
hot el
.s quare
Ġr all
Ġlower ed
hand led
Mark et
ĠUs es
iv as
.B usiness
ãģĹãģ ¦
D IV
Ġw asted
Ġav oir
ê m
_ACC OUNT
. et
ĉ SDL
k ap
Ġf ox
up pet
{ },Ċ
", '
F avorite
P END
ĠA ES
} ),
Ġded uction
Ġpol ÃŃt
Ġcomponent Will
ĠT elerik
_SE LF
Ġm use
C raft
Ġd ens
ठ¿
( tp
Ġt asty
Ġbal ances
Ġded ication
ĠWall ace
Ġun law
\"> \
Ġm um
- update
ement e
Ġs oda
Re public
as mine
é ric
( Status
ĠJson Convert
ĠD isk
.Red irect
Ġfilm ing
/m ol
R o
Ġv ille
Ġtrab aj
Ġsyn thesis
reg a
Ġr l
S cheduler
ISH ED
current User
(error s
' h
_b ot
x imo
ĠUS ART
_s uper
_DEC REF
н ой
_RO W
Ġprom otes
ĠT A
Ġhor as
ĠRep resents
Ġname of
ĠEx c
ĠGar age
Ġse ine
, #
Ġher b
/ resources
Ġple aded
.r adioButton
Ġæ ĺ
O ps
ĠN est
c string
ĠDef ence
Ġref ere
_le af
Ġrevel ation
ë §
.execute Update
_W ORLD
Ġexp ans
(" \"
j ab
Ġdoub ts
ĠGe ometry
Ġintrodu ces
Ġsen ators
Ġcan al
.h elper
ĠBi ology
_SE NS
.pre vious
-t ouch
ab it
Ġimpact ed
Ġbr ackets
.d irect
acc um
Ġtest osterone
ĉ action
ĠCh ance
Ġpe aks
CppCodeGen WriteBarrier
Ġun belie
_p ress
.R el
ang led
/ templates
-- >čĊ
l ime
Ġsufficient ly
_ nt
Exp and
.is file
Ġis Empty
Ġq t
Ġmul her
ac ob
Ge orge
å¸ ¸
Ġass im
as o
Ġcompr ised
O V
(CON FIG
ĉw riter
Ġdes p
Ġten ure
(c r
.p ool
ĠB rend
Ġc ensor
(time out
Ġple a
.W rap
Ġtight ly
ĠW ere
ĠI gnore
abe i
Ġbr idges
Ġcondem n
Ġsimp licity
Ġrout inely
Ġblack s
j b
ĠP it
U tf
Ġ/ Ċ
re load
Ġset Object
/g lobal
Ġf atty
Ġsock s
Could n
Ġerot isk
æĿ ¡
ĠPress ure
ĠM az
n pos
tol ower
ĠE Q
ute ur
ĠM oment
Ġet a
{{ --
Ġgraph s
ĠGu ar
r ine
( --
ĠHttp Status
(st udent
* np
Ġrail way
Ġas ynchronous
_v m
'] ,'
, text
mer chant
(G uid
ĠG ra
ix er
fetch All
.add Listener
fl ip
* $
> (),
Ġsun light
ass igned
Ġab c
ĠC OLUMN
ĠðŁĻĤ ĊĊ
) ...
Ġen semble
Ġnew line
_S INGLE
ied ad
Ġdark er
orm ap
Ġl ion
pl its
Ġillustr ation
ĠI EEE
Ġv ista
ous ands
****** *
ĠTom my
Ġh ue
S el
Ġa ura
ĠTher apy
Ġanim ator
.con straints
Ġv ague
(" ")
Ġvill ain
Ġbless ing
Ġstring Builder
ĠM isc
ĠD IR
f ax
- node
ĠWalk ing
ĠA U
s ess
Ġgr ill
VERT ISE
ĠF oods
Ġt ournaments
à ĵ
ĠMar sh
Ġw onders
Long itude
.Command Text
= input
_enc oder
page Size
Ġget State
> >Ċ
.g rey
p od
Ġread ings
Ġre consider
Start up
Ġexc er
.b alance
_c ycle
_T ime
LOC AL
ĠE FI
ĠRe yn
.set Foreground
by n
Ġdis connected
ACT IVE
Ġembed ding
ick ers
Ġsurround ings
* c
Ġgar ant
Ġb f
Ġw ipe
Ġ ä¸ĭ
_T RA
ado x
ç ķ
Ġsu cks
ĠS ongs
ĠAssoci ates
ĠB ald
ĠB rett
ven ile
Ġv t
Ġin ade
Ġres igned
ĠGl enn
.p attern
.Data Bind
Ñĥ м
Layout Inflater
ch et
ĠTest ament
.m s
Ġp av
ĠReact DOM
ur dy
AD ATA
M u
/ actions
ĠJ s
_ex tract
ĠBr ing
: id
str t
iv ation
Ġoutr ight
az u
loy ment
и Ñı
al do
ĠP ublisher
E ducation
Pa lette
_d rv
Ġ($ (
ĠAnd a
Ġrem edy
Ġincons istent
te ction
Ġregul ators
Ġshort est
(p air
ĠInstall ation
Ġdefend ants
Ġ( );
-l arge
M el
Ġthreat en
н Ñı
Ġfet ish
ot ine
_d ic
Ġ< $
Ġst agger
sp i
$ response
S erv
-b orn
j os
ĉ img
ĉW HERE
_l t
å½ ĵ
.c ost
ĠT ue
.label s
ĠL V
wcs store
ĠJes se
ภ«
Tr ade
Ġpredecess or
ë Ĥ
fin ally
_g eneral
ogg ler
_REG ION
n ement
Ġblog ger
ĠHar bor
ĠD ataset
[ w
Ġattend ees
. ico
max imum
.Un lock
_SY NC
ág ina
Ġdown s
ĠW ii
]) /
Ġkick ing
unic ation
ĠD AC
ĠID S
ĠR ental
Ġcurrent Time
Ġvacc ines
ĠDev il
Ġn ors
_m ouse
urre ction
(n o
Ġ> čĊ
Ġaggress ion
Ġbre eding
.s ymbol
im an
Absolute Path
ĠWH O
_fl ush
- root
arn a
& M
Ġf athers
ĠR ocket
ive au
Ġw ander
Ġcom pos
ĠWar rior
ĠSe at
ĠClin ic
_in voice
(dis patch
Product o
at uring
oss ier
ĠM AY
Ġd agger
Ġsanit ized
ĠR FC
Ġpro ph
Ġur ine
Ġgr ind
ĠExp anded
des cripcion
-f w
ĠK erry
= name
Ġch k
Ġnation ally
Ġthe e
In c
Ġ? >>
.R adioButton
.Http ServletResponse
/ Y
ĉf ield
Ġhom me
y per
Ph ysical
= v
Ġdr iv
ĠErr ors
Ġc Äĥ
De ath
ĠW INDOW
Ġpo et
ĠSh arp
ĠImm utable
ĉ create
Ġge ht
ĠRe form
ais er
ĠInitial ization
Ġimm unity
.com pose
Ġlat ency
ĠLeban on
ĠPar ad
Ġfu els
ĠEx hib
co h
% ">Ċ
ĠCL I
) initWith
-Z a
_C LEAR
reg n
Ġfin ances
.st andard
_C ATEGORY
.lib rary
Ġtravel ers
_w p
ĠE valuation
start ing
Ġ )),Ċ
ep isode
ĠV ariant
Ġda emon
ĠJul ia
ĠN R
Ġdoub les
< v
/r untime
Ġinterpre ter
ĠIN DEX
ĠHol mes
_D IM
Ġp addle
_ex ample
Ġfore ground
.r outes
Ġs owie
S UCCESS
ĠC DC
ĠB D
_ -
as ured
W riting
Ġcurrent Page
( answer
ĠASC II
à ¨
Ġsocial ly
yy y
ĠSpecial ist
(c ustomer
ist ani
ke st
ĠM ak
Ġth o
. pt
( comment
ĠCon verter
g am
b ins
. tele
ĠVeter ans
_AL LOC
олÑĮзов аÑĤ
inn amon
; width
oh l
Ġfant as
Ġs ung
ĉ K
( Json
Ġneighbour hood
Ġv ow
Ġs ins
on acci
Ġepoch s
im agen
.Ch ange
.my batis
Se ek
W ER
管 çIJĨ
Ġinter ess
_ Event
eder land
Ġterr itor
Ġci udad
uck ed
Ġsn ack
Ġtransport ed
ĠMan ifest
ĠD AT
_th eta
Ġw ont
.ĊĊ ĊĊĊĊĊĊĊĊ
Ĭ¶ æĢģ
ĠEp ic
De ck
l tra
_Z ERO
Ġ[] ;
/ scripts
Ġ---------------------------------------------------------------- ----------------
æĥ ħ
Ġwe ed
N BC
Ġrap ed
ĠG ateway
[ M
ĠTime out
ench mark
.View Model
Ġporn os
ĠY a
th ritis
ĠFly nn
Ġme ga
ac in
Ġtrib al
.app le
ĠB lo
â n
ib i
ro v
ĠL ives
^ .
get Request
ĠEst ablish
cont ainers
Ġst arring
Ġcele brities
ĠRel ative
ĠHe ights
Ġtq dm
ĠNorth west
iv ic
ĉ cl
Ġautom otive
ent ric
Ġfort unate
Ġfire place
se ud
nick name
; s
_C AL
h alt
(n s
_de leted
Develop ment
m ovies
Ġident ities
Ġprompt ly
ا ÙĨ
Ġant e
Ġ" ','
åı £
imp se
Ġy ap
Type Name
Ġb itch
Ġassoci ates
HE ME
- empty
ĠØ ª
ol vers
Ġpist ol
Sc oped
ag ner
'] =='
ĠI MP
ex c
Ġo mitted
Ġmind set
Ġ[] (
Ġor n
_C AM
A vg
Localized String
ĠN atur
Ġcom poser
ĠPlay ing
Ġover d
_ utf
.s k
ĠF ol
$ page
, Object
Ġbe es
al ary
bul let
_lib rary
O ffer
loc ated
Ġ(_ ,
âĢľ He
ĠOwn ers
) ).Ċ
Ġb ri
.Ad min
kt ion
лÑİ Ñĩ
Ġerot ici
Cancel led
Ġa gr
re views
_d ma
RI CT
Ġg fx
mp i
pp o
Ġ// @
Ġupper case
Ġcommit ting
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
User Data
Ġv ai
ĉs ort
Ġcongr at
Ġd ioxide
д а
. area
ĠJosh ua
ĠK och
_b reak
az ure
ist ical
_AL PHA
_ views
Ġelim inating
OM B
en umer
ĠHy dro
(* (
ERT ICAL
Ġinev itably
Ġst ole
-e ast
ier on
Ġl inger
/d oc
Å º
ĠAl ready
as io
Ġ-- Ċ
Ġabb rev
ĠAt om
h im
ĠINS ERT
s un
âĻ ª
CON NECT
er ator
ĠM anning
Ġ: (
g as
=> '
Ġquery set
; }čĊ
ĠPop ulation
uted String
res ident
_F ONT
ĠRes pond
Ġobsc ure
Ġo bservable
ĠContrib utors
k on
ĠMus k
ex ao
ĠT ub
Boot Application
S OR
.H orizontal
.find By
.p ower
Ġposit ively
ven ience
ĠJ ong
Ġwh istle
Ġз наÑĩ
Ġl ending
Ġdestruct ive
Ġon Delete
author ization
(); ?>
_ original
sc ience
at ra
?, ?,
ĠAs c
Ġconvinc ing
$ a
org en
_D ate
ĠPro vide
Ġlon ely
) 'Ċ
ex change
; ?>Ċ
.f ast
S amples
L ondon
'] )čĊ
ĠI onic
Ġp esso
ĠKn ights
ĠR af
_attr s
Ġrepe al
> Main
ĠOrder ed
_N ew
=" ">
url patterns
ATION AL
pe ech
ĠId aho
Ġpr incess
ĠCustom ers
aw ays
ad b
ĠBry ant
non ce
Ġad ul
Ġ`` (
Ġafter math
= dict
text Box
Ġs perm
Ġc ough
H or
âĢĻ S
.Component ResourceManager
Ġreg ulator
Ġpartnership s
/ projects
tr ys
ĠL aser
⣠©
ĠF unk
Ġuncon scious
Ġcr ust
ĠTe ams
ĠB anner
ĠH oney
le ms
Ġmax Width
Pointer Exception
fade Out
- St
Ġstr angers
_G O
W ritable
_ Info
.Non Null
annot ations
ĠG D
Ġendors ed
ĉToken Name
ĠDep ending
YN AM
ĠMet eor
ĠIn crease
.M any
== (
.U UID
_K ERNEL
Ġvid é
Ġp q
ĠQt Gui
ĠVar ious
Ġj ohn
_p atch
Ġt outes
ĠF ail
Ġsurv iving
(" ${
ĠĠĠĠĠĠĠ čĊ
Ġimage Url
.word press
s ources
ĉgl Vertex
âĢĻ a
Ġes col
R ARY
ĠSn ake
Ġqu int
Ġlast s
ĠHar mon
Ġco il
Ġexplo itation
le en
'> ";Ċ
ĠS ERVER
ĠHE ADER
_ velocity
ĠIn voke
.timestamp s
Ġs ulf
I QUE
Ġinhabit ants
ph ins
azz o
Ġmon o
Leg end
Ġnon ce
IF E
; ";Ċ
- create
" ",Ċ
per mit
ĠImm igration
Ġpath name
ffect ive
âĻĢ âĻĢ
Ġex ams
- event
ĠT ill
[m id
F IX
; color
( Order
_tra its
Ġorder By
Ġs unt
ĠNich olas
Ø ²
Ġsun ny
in ers
Ġaccess ibility
ĠH B
.com p
ĉ op
Ġminor ities
ethe us
Ġcollabor ative
pr it
H IR
Ġwr aps
ĉd raw
g od
ĠI X
.app s
ĠN M
Ġirre levant
ĠT igers
Ġdi ag
G V
ĠAccess ories
k ont
Ġsimpl ify
ĠF avorite
_t ools
([] );Ċ
Ġtow ers
B es
Ġhun ter
Ġsal on
(b uff
ĉ debug
Ġmal ware
M oving
- options
) +'
ĠLO VE
_S OCKET
_f in
ĠDel aware
Ġsher iff
-in valid
ĠF ULL
Ġп од
el as
" strings
ĠRepresent atives
s urface
res olved
ht docs
)) :čĊ
Ġpress ures
Ġnorm s
Ġpl a
Ġs urname
Ġpost al
ĠDep art
Ġsla ughter
or ida
Ġhe bben
Ġdes ar
comp act
_L ANG
åIJ Ī
op oly
_r ad
ĠST DMETHOD
L azy
ĠĠĠ ĉ
... ,
( web
ĠP ont
Ġet was
Ġup ward
_h at
Ġ], ĊĊ
Ġbase Url
Ġworry ing
-add on
(get Class
S PI
Ġcapt uring
) },Ċ
Effect s
Ġcompet ent
Ġf oul
Ġsubscri bing
ĠO BJECT
IX EL
b ucks
( edge
(p ass
ĠPet erson
Ġbo obs
ĠD elay
_s quare
el im
ot ers
_P C
% E
on click
ĠSV G
Ġto pped
Ġf ist
sm art
ĠR alph
( owner
j ours
Ġbron ze
ĠArgument Exception
( original
_S CALE
_c p
Ġrecomm ends
.set Style
S ure
L AND
Ġrepe ating
M att
. Visibility
Ġenter prises
.Set up
(sc ene
ĠRe active
ur ge
b w
.P ut
p ersist
.c ookie
ĠAud i
` s
sup plier
( Form
 ¡
_s o
Į Ģ
ĠLeg ion
t te
N d
L oss
( attrs
.sc atter
Ġg room
Ġgl impse
Ġn ails
Ġcum ulative
Ġf azer
_s ervices
.N um
ib ilit
_res olution
ĠT x
umin ium
op a
.s chedule
sm tp
ภķ
ur ry
ü k
go og
_sign ature
.int o
ĠSte ps
Ġhome owners
ĠNS URL
ĠP AC
ĠĠĠĠĠĠĠĠĠĠĠĠ ĊĊ
> ')Ċ
en h
Ġinc ap
$ MESS
Ġmo ins
ĠF i
Ġoff season
press ions
> .
ĠMark er
Ġon Close
LE VEL
Ġinterf ere
ĠCol in
ĠRes istance
Dis count
ĠWeb Element
Ġbath rooms
leg acy
ĠC apture
Ġar ising
Ġ" );ĊĊ
ÑĪи б
ĠIn finity
Advertis ements
ĠCom ing
ĠPRO JECT
_PROTO COL
Ġuse Dispatch
.ch annels
ĠCit izens
ent re
_m p
.Con stants
ĠS erialize
_IN C
(l ua
Ġcl ash
_with out
.key Set
Ġrece ivers
æĸ¹ æ³ķ
(m em
ĠH orizontal
Ġcock tail
Ġcho oses
.In ner
Ġreli ed
ount er
Ġ" ^
Ġten ants
" `
_P M
ers ed
Ġ}} ">
Ġprov inces
_R AW
\ App
Ġprostit uer
_g ain
.t encent
ffect s
(p k
sk u
Ġus able
ER VED
Ġant enna
he a
pl ist
_PL UGIN
Ñģ л
. lookup
á» ģ
Ġen larg
Ġp iss
H am
im ap
Ġin validate
Ġsil k
="# ">Ċ
ĠGr ass
ĠGo al
_p df
Hand lers
Ġstack s
.get FullYear
=[ ];Ċ
è½ ¦
, V
(s plit
Ñĥн к
Ġbake ca
Ġ~ /.
pe z
t ails
ĠG len
Ġset Image
ĠCom ic
B LOCK
ĉ This
o ader
Ġcapital ist
_ST EP
( Boolean
ĠCor rect
r ina
Ġconc aten
å® ŀ
() :ĊĊ
Ġun anim
ll i
al ars
- ne
Ġdiv or
ĠKick starter
]. _
< number
/m enu
GR APH
vis itor
Ġimpro per
_N EXT
Ġb isa
background Color
/ input
Ġmo i
Go al
li qu
Ġmiscon duct
Ġcompr ises
aw ns
ĠP ie
ra is
role um
Ġcur se
y u
_p oll
.current User
ES H
]) [
Ġstory t
)? ;Ċ
* =
ĠB urg
/ layout
_back end
; ?>
ĠWhats App
ĠMount ains
vis ions
flu ence
.create Component
ĠPs y
for get
s rv
_COMP ONENT
ĠN exus
Ġ) {
end i
IM UM
ĠG F
ç» Ħ
âĢĶ that
b k
M ozilla
Ġdefend ers
- settings
im ming
ĠO PT
ĠC W
Ġthat s
ĠOpen ing
Re leased
n pm
Ġh rs
Ġgroup ed
/ ".$
ĠHistor ical
($ "{
ov ic
(s ign
ĠPhot ography
Ġsign up
_ ARCH
.test ng
/ angular
Rest Controller
sh it
ul le
.p ause
([ ],
( question
il ogy
ĠE ug
- local
Ġk vin
Ġreserv ations
ob ia
Ġsubsidi ary
Ġaccum ulated
ĠQ Variant
ĠB JP
ĠNorm an
ĠInt egration
. Variable
( Resource
******************************** ********
Ex pose
Ġ' }
.C OLOR
ĠÑĩ иÑģ
A jax
Ġth ru
M ovies
Ġpro position
/ theme
Model Property
ĠA ws
ĠAnd rea
ĠMer ge
.f inish
(re quired
ĠP rel
e led
æ ĵįä½ľ
.T RA
M AS
Ġreal ised
roid s
ĉf n
r h
."
vid ia
Ġdep uis
ĠB V
L n
Ġl ust
As c
ĉĉĉĉĉĉĉ Ġ
is le
-c are
_IN V
ĠD rew
Ġwhat s
ĠCap acity
P arm
_mon itor
.st udent
ĠR NA
.ends with
b ih
ĠML B
/ project
Ġrest ing
se parator
y d
ert ia
Ġmon itored
"> *
.F C
ĠNE WS
ĠC alls
Ġade qu
Check ing
est imate
Ġrec alls
_f requency
Ġuse Ref
ĠGro ve
ĠX ia
ĠÃ Ń
ess enger
-c ost
.f c
ĠK umar
.F ocus
ell aneous
.Al ert
e ax
Ġor ch
.p m
Ġland lord
(p op
_ actual
ĠL B
Gr and
.render er
Ġl ob
custom ers
Ġcapt ures
W INDOW
Ġdo ch
Ġap ology
ĠJ ama
@ [
.t ake
no op
Ġl um
Ġdifferent ial
Ġeffic acy
ĉ IN
_BO X
_s d
_r t
c oder
ounc ement
has Class
Ġrisk y
ĠEst ado
- DD
ĠCar son
S uffix
Ġto da
ĠTr acker
ĠDe legate
`, `
ĠPark ing
Ġn er
az o
ĠFile InputStream
Ġrec ount
q i
ck en
Ġsocial ist
ĠIn voice
ĠпÑĢ Ð¾
% ",
enn en
Ġv ivo
Ġorganiz ational
Ġun common
ut ar
Ġh ull
T uesday
Ġassess ments
( application
Ġprem ise
Start Time
Ġd k
Ġinter fer
ĠQueens land
Ġcred ential
Ġle isure
Y Z
ĠC md
B US
us an
ĉ vec
i ological
ĠL ots
Ġen light
Ġfresh man
ĠCOM MAND
ĠAction Listener
ut m
ari us
Tw ig
Ġswe pt
-to ol
Ä IJ
ch apter
- grade
Ġcur iosity
Ġsustain ability
ĠM inecraft
w end
If Exists
ĠCult ural
ĠSac ramento
L ayers
Sub scriber
.G raph
Ġl m
est y
ad vert
$ p
ĠH ockey
ĠD ET
set Title
y ang
Ġb abe
els ius
Tr avel
Ġmes mo
(map StateToProps
_SE L
-p op
Ġem ission
âĢĻ .ĊĊ
.sw itch
ot ions
.ph oto
L V
am odel
Ġword t
IG GER
ĠTOD AY
OL S
_ID ENT
Ġcomment ing
D atos
Ġhilar ious
( any
Ġd amp
-control led
Ġ"
_bl ack
Net Bar
.set Selected
C ss
Ġqu art
Ġow ning
ĠF IELD
.re lu
Ġl is
ìļ °
.RE LATED
Ġl ok
ĠFl ip
Ġprest igious
Ġd g
ĠInputStream Reader
Ġus u
Ġg ir
Ġan a
_p y
un nel
ĉs ystem
Ġco ating
ĠGen re
er ro
ĠCL IENT
Ġstret ched
.Has Value
;;;; ;;;;
çī Ī
Ġfinal s
.get Children
Ġ-- }}Ċ
ĠCow boys
ĠEd inburgh
ĠPl aza
ab en
Art ist
UR A
ĠHugh es
obb ies
_no ise
.Object s
Express ions
Ġanth rop
')) čĊ
). "
cript ive
Ġsal mon
Ġw ast
r ho
.t ick
Ġexplo res
ĠAl gorithm
Char Array
ภĦ
_PACK ET
J E
"] ];Ċ
.n ote
Back ing
ĠH older
re ich
ĠZ ion
/ gr
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ
M otion
ĠTrib une
Ġcrit ically
ĠCR M
Ġblow ing
Ġcommission er
J oe
ĠTe levision
ĉ pre
ĠTR AN
ĠVik ings
ĠB ET
w ould
.C aption
Ġba con
h ma
mer ged
Ġsubscri ptions
occup ied
Live Data
Ġallow ance
rig esimal
dd d
.log out
ĠT ang
Ġwarm th
Model Index
ĠP ra
Ġsc ent
Ġhack ers
Ġillustr ate
I ch
Ġdi as
C ASE
ĠSc i
$ url
ĠM ODULE
ush ort
li ers
ĠDev ices
min ster
un ame
Ġun r
Ex amples
Ġris en
. ai
ch rom
_work er
Ġali ases
Mouse Event
Ġset ter
ĠPur ple
Join Column
= e
TH OOK
ĠT ow
ĠCrush ing
ĠJ edi
ĠGriff in
Ġk os
_F S
ing es
so les
(n ames
ĠB id
-power ed
M ult
am iliar
.clean ed
ĠZ immer
ĉc lear
Ġuns upported
Call able
Ġre ps
al tern
_RE PORT
.getColumn Index
_ST ORE
Ġsuch t
sub title
Ġper d
« ĺ
.N OT
} >
: d
md i
bind Value
ĠDec ision
Return Value
, index
xf c
Ġser um
get Field
Connection String
- object
.rec v
Ġunder graduate
.Inf rastructure
ĠK ab
Ġadvis ory
-t ree
Ġm ue
in form
.em bed
Ġerror Code
m icro
Ġspark ed
Ġimag ery
con c
_m issing
Ġsur plus
K S
ĉR THOOK
T ell
ri um
ĠR adius
ri ka
los ion
ĠH ern
G amma
ĠF ee
ĠN amed
ĠCan yon
ĠJSON Array
Ġz wei
ĠS SH
Ġserv ant
co al
Ġden ying
Ġspl its
In correct
Ġto x
ĠAnal yst
Ġacc red
ub le
Ġw t
ĠT rial
.ext ension
ĠCare er
Ġsec uring
ĠL il
Ġpro jections
Ġye ast
M ade
Ġfound ations
ac ific
.v olume
Ġmir rors
################################################################ ################
Ġviol ate
ars ers
Ġsoc io
Ġtk inter
ĠL INK
.get Size
ĠWh ole
)view DidLoad
ĉd one
ude au
\ ">
And rew
er b
Ġf ö
.cl uster
Ġdisc ourse
_DE FIN
Ġpued en
ĠL OW
. av
Ġpre ca
Ġqu o
Ġvel oc
,' '
Ġx yz
ĉp adding
Ġtom atoes
ĠB ent
_c urr
NS Date
Ġget Current
Ġ[ `
Wed nesday
.B ar
ĠV ous
in z
ĠQu inn
ex cel
d os
Ġout dated
OUT H
ĠM aker
epend ency
Ġd ull
ĠW inn
og e
cl ave
Ġnov a
Ġa val
C apt
ĠSpot ify
Ġj ul
) tableView
Ġfil enames
Ġesk ort
åij ¨
Ġsk ew
ter ior
Ġfin anc
Ġtab la
ĠU IB
Ġ( ):
ĠD ocker
per centage
Me et
ich i
Ġinter im
Ġ' ='
.JSON Object
(f id
Ġd ownt
Ġtrans ient
ĠSte ph
Ġignor ance
ĠC odes
=' ',
ĠI CE
Ġtran qu
ĠExt ended
Ġm und
ĠH OME
Ġkil ometers
Ġimag en
ou x
(s z
You ng
uff ed
ĠW ake
Ġa ide
PRO C
ĠR at
ĠL ith
b art
ĠArr ange
p rompt
Ð £
( ct
ĠInt erval
de pt
D aniel
Ġf ills
.t ensor
(tr im
Ġje alous
F eb
\ Common
Ġamend ments
_ operator
_custom ize
Ġ] ]
Ġb n
Ġdisappoint ment
Ġmill enn
. when
Ġob ey
Ġoff enders
W ild
Ġcell For
Ġappar atus
.a fter
ĠE PS
Ġad orable
oper and
(list ener
ve al
Ġ) (
Ġcardio vascular
uplic ates
rist ol
Ġref uses
(Q Widget
Ġelement o
Number Of
.d elay
.group s
"> '+
åĿ Ģ
ac ency
( URL
_h alf
= l
Ġlist View
( section
.to Array
+ /
ĠRodrig uez
ist ream
Ġelig ibility
:: -
.new Instance
P B
ĠAs sets
ĠCom posite
ĠL abs
ĠHam as
++ );Ċ
Ġbl k
ĠNe o
L uc
@ login
Ġun aware
.m et
_RE LEASE
( ST
AM IL
ri ke
Ġ( ){Ċ
(s printf
ĠAccount s
ĠV IEW
ĠA j
ãĤ °
Ġwh isk
Ġid i
Ġro de
Ġih n
ĠElement ary
Q ty
Ġintrig uing
Ġå ¤
J obs
ĉ offset
ĠAh med
ĠTal iban
Ġè İ·åıĸ
Ġinject ed
.Auth entication
_line ar
.Dec imal
Ġapp les
Ġshare holders
Ġb aked
.d iff
ĠE ddie
ok ers
Ġconfront ed
vo ices
Ġt us
ĠSp in
N ODE
_ Un
CT X
/g oogle
Tem perature
Ġ' ').
Ġmagn ificent
Ġstart Index
semb les
Any one
z k
eh en
ĠD ame
. strict
Ġrepl aces
Ġline back
Ġpush es
Ġche ek
ĠSh i
_BY TES
RE A
ả n
_CON NECTION
G ateway
ĠTr avis
ĠA X
ĠBas ically
ĠUp grade
à ª
th emes
erm o
k or
F emale
_att ach
ĠìĤ¬ ìļ©
Ġpo z
============ ==Ċ
(s ymbol
ĠS ector
__ )ĊĊ
_p adding
ï¼ļ "
Ġf abs
Ġr anged
set Name
Ġp error
â Ĺ
ĠFile Reader
Ġful filled
_C urrent
Ġdom inate
Ġsm ugg
Post Mapping
_for ce
Ġb loc
ĠG iant
(v ideo
ĠC U
System Service
Ġ elf
Ġkont akt
ë ª
ke es
gt k
Ġparam Int
Ġmark up
u ales
Ġaccount ed
Ġgang bang
RY PT
ĠW rong
Ġcred ited
ĠM ESSAGE
Ġfl aws
Ġbb w
Ġmetab olic
ĠO EM
/ event
(C ollectors
mont on
ap pear
Ġopt ed
Ġche at
Ġd av
ĠPro ceed
Ġê ¸
ank ed
и з
ans k
ĠH ang
ĠC ler
Ġdis gu
Ġc map
.cl js
Ġa ument
le z
ĠJo ined
_re ceived
Ġa erial
ot el
Ġgre et
" s
ĠGen esis
ĠCal if
pan ion
Ġtail ored
m apping
and Expect
.tr ack
at omy
ĠO w
ull ah
.Y es
ĠSimple Name
db h
' en
Ġnons ense
Ġphilosoph ical
(get Context
Ġis so
ĠA CE
start Date
Ġb ÄĻd
ĠAUTH OR
ĠGlo be
Ġinsect s
_A l
ush ing
è® °
/ Home
ĠLocal Date
need ed
hes ive
Ġill usion
äº Į
Ġtr at
x o
/d etail
_M ATCH
Ġbroad band
Ġw al
ĠIllegal StateException
IRE CTION
Ġnor theast
es ium
ĠClient e
ul ance
nt y
Ġt ecn
Dev ices
Ġgr ains
ĠO g
ĠS EL
ud iant
Ġ++ ;Ċ
Ġexplan ations
oc co
Ġdi ets
Ġco hort
( controller
.Iter ator
-r ich
ro cess
G D
Ġcar bohydr
Ġfri ed
ĠEmploy ment
ìŀ ¥
ĠLeon ard
_ ${
qu ares
Ġcompan ions
Ġpar is
Ġstim ulation
ĠZ oo
Ġre levance
ĠCol our
Ġspe ar
ot ional
ĠL ite
ĠK osten
ĠÃ ³
_att achment
orph ic
Ġdam it
Ġd lg
Ġthr ive
CH ANGE
ĠApp arently
Ġat ual
Ġroot ed
( images
aw i
ari at
Ġch erry
STAT IC
m nt
ĠUser Id
il let
ĠHis panic
Ġn ak
Ġcent ro
Ġdim s
_initial ize
ı k
ĠCent ers
RE N
Ġevolution ary
ĠTop ics
_d amage
em er
Ġr und
Ġpun ished
Ġcub ic
f air
[] ;ĊĊ
Ġinstant iate
Ġover see
- delete
unte er
start Time
ĠP ipeline
_G AME
ĠC ir
ĉ Null
.Format ting
uc umber
ĠR ide
Ġz oo
Ġcheck er
åIJ Į
= C
Ġg rit
"); //
_x y
ĠDe claration
Ġcall able
F oo
ĠList Item
Ġin accur
ml in
ĉ Data
Ġev olving
aw an
Ġca fe
fol k
_ID X
ĠAny thing
ĠPalest ine
ĠGrid View
Ġcol ony
ĠGerm ans
( +
.p id
.js x
ĠSuper ior
Christ ian
ĠL ect
ĉ Game
Ġinstrument al
Anim ations
д ал
ĠMos es
ĉĉčĊ ĉĉčĊ
z s
k te
ä¸ ļ
_D IST
bit map
d B
Ġp ersistence
ÑĢ Ð¾Ñģ
$ l
B ron
Ġ{ |
_ch art
ĠCon sum
Ġh emp
Ġ" ))Ċ
Ġattack ers
Ġknowledge able
Ġc et
Ġvir uses
' I
Ġpitch er
Ġsweep ing
= list
apt ops
.de pth
Ġinstruct ed
ĠR us
benh avn
Ġи н
S ports
Ġon set
æĿ ĥ
. RED
_s i
ĠP ST
.on Change
> tag
ĠR oh
_char acter
ĠLaw s
ĠB achelor
_s wap
.re activex
Ġreward ing
Med ium
- [
ĠRec ently
J oint
part ition
ĠMin utes
Ġind o
Ġabsor bed
ĠG N
_IN D
Ġsab er
Sp awn
output s
ĠJeff rey
Ġmed ieval
h ed
Gu ide
Ġpsy cho
Ġgl am
E lim
äd chen
_pl ain
ĠS au
-f our
Ġanaly zing
QU ERY
Ġtom ato
_button s
V EN
.set Status
. Url
+ ĊĊ
Ġcompl aining
deg ree
conf irmed
Ġsub t
p arsed
Ġtor que
Ġtroub led
ĠT ARGET
Ġtrad emarks
ĠCo ordinate
ĠV iv
Ġ// }ĊĊ
Ġapr ès
.get Position
(Key Code
ĠSil va
Ġmet eor
Ġendorse ment
Over view
ĠP oss
.In ject
Ġeven ly
Ġvisual ization
Ġw char
ĠH DMI
Ġfun ct
ick name
',' ','
Ġfor wards
Managed Object
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ
ĉ server
ĠOut look
ĠChron icle
Ġdub bed
Ġd ok
ĠW ear
.A L
pare n
. Interface
Inter faces
.c od
Ġd ib
.Global ization
ĠAcad emic
Ġass ms
Aut om
Ġl w
ĠN W
Ġ&& čĊ
Ġproble ma
ĠManufact uring
lim its
-m obile
Ġfil me
/ map
Ġdo it
ĠIn k
Ġsu ed
. arr
Ġunder min
ĠPro c
croll View
__ $
Ġsidew alk
( that
ภ·
[ q
gram mar
Ġt ë
qu ito
Ġspir al
ext ended
Ġf ocal
Ġdig ging
p as
ĠT all
.pro xy
it ures
TR ACT
ĠRe alm
Ġf eder
Ġorient ed
ĠAltern ative
Ġo we
Ġsour ced
ink er
.d et
S ep
ĠQ ui
ĠPal mer
(_ ,
s amples
oy er
ull an
que z
Ed ges
Ġsh out
ĠA chie
Ġha ar
_Con struct
Ġprem ature
Ġre vert
'). Ċ
Ġs chn
filter ed
null ptr
S aved
itect ure
CL A
Ġv l
st ell
ĉ Me
ĠL ip
n ational
Ġwh olly
Ġspr ings
.T imer
ĉs rc
els en
åħ ¶
Ġcommunic ating
ĠQu iz
Ġt eng
Ġge z
ĠOut side
.S ign
(c s
Ġdisput es
ĠWe iss
ann es
> No
ĠB ach
.remove All
re fer
/d ashboard
ĠA jax
Index Changed
ĠWe ak
' "Ċ
Ġs ights
access Token
ĠJ oi
(d omain
ĉc v
Ġcontin uation
Ġpl um
ad ir
.set Message
Ġ ï¼Į
Ġsw allow
ĠL amp
Ġq w
Ġu u
C oin
ub ic
ĠDe als
r ace
Ġdict ator
Ġmem e
turn ed
ĠJul ie
.grid Column
Ġpup py
Ġp am
Ġ) {čĊ
Ġinv iting
Ġf rench
v im
Ġwr apping
Ġ#- }Ċ
([ -
Ear ly
Ġsh iny
.f aces
Ġreb ell
abc def
ä lt
Ġest imation
ph ys
los ures
_RE L
Ġex clusion
ĠSk ype
we ise
-st op
no thing
ĠE gg
is ors
Rich ard
Ġcounsel ing
Ġcomm em
ĠQ MessageBox
ĠSy nd
ĠFro st
ĠCompet ition
ĠAw ake
Ġt ed
ic iones
ĠDev Components
VERTISE MENT
ott i
.run ner
Ġuniqu ely
.fl ag
ĉ rs
_g eneric
Ġ`` `Ċ
ACH INE
Ġme in
( Application
( br
Ġrat ios
: ,
ĠXCT est
ustain able
- www
it les
_T EMP
Ġs yst
umeric UpDown
ĉassert True
Ġw f
. peek
ĠBul g
Ġterr ifying
.M ODE
ĠG W
á r
Ġf ic
Ġcommit ments
- tech
ĠL iquid
ope z
z heimer
a ña
-m edia
( animated
_go al
Ġg um
yst one
.S ET
ĠW end
set CellValue
Ġmsg s
c ash
AL LOC
/ aws
Ġmic rowave
.Point er
ĉ Console
_s orted
ĠFil ip
Pro d
Ġ//! <
ing roup
Ġk s
_T RI
Ġteas poon
ĠAT T
Ġrecover ing
ĠG LOBAL
.P ar
Ġ/> ;Ċ
Ġmar ble
ul ators
ĠC ycle
Ġher bs
_m etric
) !
_C LOCK
_ Button
H arry
è¿ Ľ
Ġstr ains
ĠApp Bar
ĠCh an
/v ideo
Ġb am
.Pro gress
$ f
lem en
Ġir regular
ĠD uncan
ĠM int
-v ideo
ঠ¾
ó wn
ĠEM PTY
Ġstack ed
ĠH A
_c ut
Ġwhere in
ĠW ays
(count er
è¯ ķ
Form Group
Ġble w
c ourses
Ġproduct os
ry s
ĠRest r
Ġsty ling
> s
Ġp iv
Ġit ertools
get Repository
ĠI k
_dev ices
lay ui
Ġhalf way
Ġfran ç
Ġtun ing
O A
_N ode
ar de
Ġfier ce
lic ted
# čĊ
Ġbreak through
ĠE rik
Ġb ride
Ġ. "
cul us
ins ide
ĠIndian apolis
ĠE E
Ġy og
urre t
.f s
. grad
_c ards
_ac curacy
_ep i
qu eda
/ org
é ªĮ
Ġcom pte
)) [
Out side
G reater
ĠRender er
. actor
Account s
Id le
_h ours
ern er
Jo ined
Ġmen j
requ ires
ĠO PER
.remove Child
ĉs p
Ġes se
r ift
xF E
ĠSh akespeare
________ ____
Ġbudget s
Model State
fill able
- component
oc os
ĠBUT TON
/ io
, out
s ms
Th omas
ĠAr med
res ume
Ġrot ating
ĠV ault
Ġse us
. (*
Ġa mino
Ġ[] );ĊĊ
Ġprov oc
no x
.Get Enumerator
==== ===Ċ
æĸ Ļ
_sc roll
Ġfil med
ĠS oci
g ap
g ro
V ote
" But
_R C
An imal
 Ģ
ib ile
Ġaw aken
ore st
in ja
ĠI van
( Command
Ġ *****
Î ·
Ġkv inder
/h elpers
_c ases
t g
ìĦ ¸
Register ed
ĉp ass
_d igits
Ġcont our
Ġinf ants
Ġjust ification
ĠFort unately
Con tr
ĠonCreate View
_S AMPLE
Ġallow Null
Ġn ud
Ġfet ched
_e qu
ĠUn able
=\" "
> {Ċ
Ġcommit tees
ist ema
+ ".
ÃŃ an
m ant
Ġsou theast
ï¼Į Ċ
dialog s
PRO JECT
charg er
- port
(u uid
. export
S ix
ĠR P
P rem
Ġconsc ience
Ġmargin Right
_d istribution
y aml
res izing
D ock
ĠLoc ations
G Y
Se ed
B UFFER
oss ip
ull en
Th ings
- self
.p oll
PL AYER
Ġå ®
G ROUP
ĠA way
Ġg ospel
xf d
M ary
ĠPort able
T URE
Ġutil is
Ġse it
Ġstr and
Ġtrans c
Ġ( ^
ĠAl fred
.m em
.c ircle
Ġ~ /
for cing
Ġr iot
pro x
TH ON
iz ación
ĠN I
ro st
Ġdis pro
_in stances
ï¼Į âĢľ
ograph er
end as
ĠIsa ac
ĠP ine
/d is
Ġcolor With
iter ate
_str ide
Ġpun to
.Event Args
( center
Ġneighb oring
ĠPr ison
ĠMess enger
Ġepid emic
da o
_com plex
Ġgr avel
_D IP
é ment
ĠA ri
_bit map
.qu it
( valid
Ġp end
Ġrespir atory
Ġre bound
Default Value
ãĥ Ń
Ġcomm its
.test s
_f r
it et
.s f
Ġspace craft
c ritical
Ġde pressed
ĠAny Object
Ġun b
Ġdisc ern
(m ysql
L atin
ĠB og
ĠWild life
To File
iox id
@ RestController
Ġ"$ (
Ġ<< "
Ġdefect s
Ġdat um
h in
Ġreal izar
any ahu
ĠS ig
@ Data
ad aptive
ĠC atherine
.c r
ĠCO OKIE
Ġp ictured
ĠFight er
Query able
ĠAny way
ĠGL FW
_n amespace
_ ft
Ġ] )
Organ ization
Ġconstit utes
Ġqu and
(ch unk
"/ >čĊ
ĠL akes
main window
Car thy
sp in
(c sv
: red
-com merce
ภ¹
Ġdiscover ing
Ġe co
_f ac
inc eton
ĠGre ens
j wt
Ø µ
ĠBron cos
ĠGood s
(G TK
Ġreturn Value
Ġsi empre
Ġneut r
w ent
ĠN atal
Ġenthusi astic
á» į
F N
/d atabase
C atalog
Ġbr un
ĠK ash
_P l
isc rim
, width
Ġin mates
Ass ignment
ĠH aven
Ġplay ground
ex am
@ Controller
ul iar
.get Parent
Ġ" ;ĊĊ
: size
iss ors
Ġf is
Ġal c
ens ation
ĠN ixon
Ġmight y
- str
_s pecial
_A DC
ĠTw ig
um bling
- address
Ġher oin
Y TE
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĊ
F riend
Ġa ve
ĠP NG
ĠKurd ish
DataSet Changed
Ġbl ades
br al
St eam
Ġsig u
IRT UAL
ac os
UD P
(d atabase
he c
ĠString s
_scal ar
ĉd esc
ĠT LS
; "Ċ
ĠCor byn
Simple Name
u ell
ĠEnt re
ell ites
- place
Ġfrank ly
ĠE rf
CE L
Ġpa ÃŃs
Ġh edge
Ġlat ent
ĠIR Q
ĠH erald
ĠP rec
ë³ ´
.T EXT
Sal ary
Ġaut umn
Ġtrav ail
.S um
Ġc ared
M or
Ġint uitive
Ġj ournals
_ IT
ĠT rou
ä¼ ł
Has ColumnName
Com posite
Ġsp ice
_d isk
_CODE S
ĠInt roduced
ion a
Ġnue stra
o ct
ĠĠĠĠĊĠĠĠĠĊ ĠĠĠĠĊ
(param eter
Ġstud ios
Ġproject Id
Ġbd sm
.Sql Client
im izer
ĠC ARD
+ t
a an
.s ol
_Ad just
Ġright eous
ĠLog ging
.f ilters
_T AB
ĉs ys
roph ic
other apy
ĠB rowse
key board
R ON
+ \
ro pped
Ġext ensively
f k
Ġl ime
year s
Ex c
Ġs ph
Ġche ating
and ro
ÃŃ o
Ġpr ince
o ire
ĠD estination
ĠConvert s
Ġup stream
o led
Ġserv ants
Ġsem antic
Ġcr unch
Ġevent ual
run ner
/ error
Sp in
Ġsecret ly
Ġas semble
.P erson
end error
_ <
Ġp endant
S leep
ĠChem istry
Ġboss es
l k
)) ),Ċ
Block ly
DE VICE
Ġreflect ing
Ġam ple
Mill iseconds
ĠPresident ial
Ġus uarios
ĠN Z
ĠSal ary
ĠA manda
_n p
j ury
Ġkö n
Ġtherap ist
Ġhomosex ual
ĠDr ake
-w indow
ĠLoc ated
.D river
ĠV IDEO
Ġmerch ants
ĠC hest
- lock
/ php
Ġmil ano
_ST YLE
arg er
ide a
G UID
adv anced
me al
Options ItemSelected
=' %
ĠCh am
: data
(st at
Will Appear
Ġinform al
aj i
Ġre productive
ĠC AS
ãģ £
F UNC
ĠR uth
)+ (
CON ST
ĠF ans
Ġgroup Id
xffff ffff
Ġsam pler
Ġ}} ">
. the
Ġh ollow
W AY
ĠFac ulty
Attrib utedString
ĠLook s
ĠR ex
j k
ĠM IL
Ġb ard
.L ong
Ġliv est
Ġsk al
ic ism
MA IN
Ġmu cho
B ODY
Ġes e
ĉ use
F oot
.SQL Exception
Ġinherit ance
re ceived
Ġput as
ed is
als a
ĠError Message
Book ing
Ġtr act
ac z
ĠC ant
_reg ex
Ġide ological
Ġj ihad
h os
/s ys
col m
(p ool
Ġest án
ĠP ending
em ás
Ġktó ry
));ĊĊ Ċ
trans actions
Ġw ield
it ere
ert ure
_s s
Ġstretch ing
Ġprison er
.Read All
Ġbes ch
-- ;čĊ
Ġcr isp
_SC AN
Ġa e
Str ict
ĠMin neapolis
ĠBo eing
ar is
re k
_p ipe
Ġpri ests
(E IF
eh icles
ĠInter active
b etween
ĉNull Check
ĠBl air
ĠL t
_in line
eth yl
 ¼
_p ackages
Ġbarrel s
_ he
Ġreg exp
_ pts
_H andler
ing ular
ĠN issan
ĠR anch
Ġper ch
Un supported
Sm ith
ĠLeg ends
M i
Ġg f
st eder
Ġacqu iring
Ġsim ulator
() ,"
re ceive
Ġin place
A CTION
ĠWeb Driver
files ystem
< Order
lo pen
ĠHE IGHT
.set Border
į °
__ ["
Ġcl amp
Seg oe
b ands
to List
amb a
>' +Ċ
Ġcred ible
am at
play ing
.setImage Resource
qu el
Ġpod r
ge om
E k
ĠQ atar
Ġg eld
? ',Ċ
Ġc yl
( ax
ĠW I
ur ally
ĠBr asil
Ġsen za
ale y
on en
Ġb ah
Ġmolec ule
R ad
è¿ °
AN CH
- background
- agent
Ġprol ifer
: boolean
Ġt ide
erial izer
_ ;čĊ
F ee
** )
erg y
ĠHon or
.Log ging
ir is
Ġunder mine
ĠD y
Ġt yr
Ġde que
Ġdam er
([] )Ċ
.layout ControlItem
pe ated
C AN
rag ments
L and
) ]);Ċ
ĠS ah
ĠDE CL
With in
ĠN amespace
an other
sem bling
.des cribe
Con sum
ĠF ear
g iven
Or ange
< boolean
Ġstead ily
pa Repository
Ġresult Set
_ ENTER
_re peat
Ġt ones
ĠPRO P
n al
part icle
Ġsign aling
Ġaccess ory
ĉĉĉĉĉĉ ĠĠ
Ġvie le
ĠNo ah
- ag
Ġmur ders
Ġa ired
ĠPL AY
ĠS ullivan
_C ore
Ġul ong
Ġblog ging
> This
Ġdata Index
Ġprint able
ĠE yes
_target s
(P y
. over
Ġbr u
am pton
Ġplaint iff
< Key
b ull
Ġ⣠¨
Iss ue
.cor nerRadius
C ritical
_p hi
. angle
Ġdynam ically
! ");čĊ
> );Ċ
in vest
.* ĊĊ
Ġt élé
Ġsuper f
Ġcas cade
DT D
Ġviv id
Ġsubsid ies
ĠH ass
Ġcoll aps
Ġcer amic
{} ".
ĠLeak age
-tr ash
coll apsed
-s ocial
ĠCh ad
Ġincl ined
Ġst o
Ġstory board
.p ayment
stack overflow
ĠRaid ers
Ġ# '
olic ies
ìľ¼ ë¡ľ
em ap
Ġk j
Ġqu ota
ĠGard ens
ë² Ī
ĠAng els
Ġof t
Ġlower case
Ġi Param
Ġche apest
un ta
_p kt
ic ators
Ġle urs
Ġdecre ases
ĉ define
PRE C
amm ers
ĠPre paredStatement
(d irection
Ġcre ws
ark ed
ĠMem phis
ĠS ell
G TK
Ġm aid
: disable
éĽ Ĩ
ĠP f
Ġal beit
open h
?> ">Ċ
.get Source
(s cale
D u
ĠP IL
_ref resh
Ġbet s
(c ar
ĠV on
| --------------------------------------------------------------------------Ċ
ĠGr at
M uch
( Dialog
.stop Propagation
Ġte k
Ġex its
'], $
Ġphone Number
uc s
ec imal
------------ --
in p
.po jo
Ġcor pus
Ġpractition ers
.p ic
" testing
Ġstring By
.Not Null
Ġr ang
.D ynamic
_R ender
аÑĤ а
Wait ing
ĠW ik
Ġoverwhel med
% ">
ĠA E
}} >Ċ
u w
_t yp
Ġbuck ets
Ġgre eting
Ġla ughter
Ġant agon
uggest ion
- email
ĉt op
Ġer os
_tr i
Ġiss uing
Ġh á
Ġisol ate
Over flow
, E
Ġnut ritional
ĠAbb ott
Ġn f
.t ouch
.fetch all
_z ip
") }Ċ
Ġam at
ĠC isco
Ġn Ã¥
PLE X
Ġse i
f oto
.to Json
å¤ ļ
ĠKle in
Ġlib c
Ġmin ers
å ¢
- print
ĠP ride
T odos
Ġmask ed
Ġset Data
Ġtele fon
Ġunh appy
ĠT ables
ge b
( debug
_all owed
- access
Ġlog istics
Ġg ems
ĠM ature
Ġr sp
ĠAl le
.get Bytes
\ web
ynchron ized
Par agraph
Ġth rottle
.sql ite
cons ulta
ĠSe ah
C e
Ġsub mar
ER E
V ous
Ġre ddit
Ġsql alchemy
-m ile
oc ide
P our
}} ">Ċ
st ead
Ġ@ (
Ġ[ ])
ĠAd s
Ġover load
r idden
ĠDes ert
ĠW rap
ĠPortug uese
et z
ĉf irst
Ġmile stone
æĹ ł
Ñĥ Ñī
(s uccess
< Vector
co ol
Ġ[ ]);Ċ
erv als
Ġin vert
" io
cur so
fr agment
Ġfeas ible
.set Position
Ġel m
Ġimag in
@ Spring
Ġb ats
pu és
ga lement
ns ic
gi ene
ell ation
ĠBa iley
Sh ar
ĠT ul
ĠH K
Ġfree zing
gl m
ce ans
-c ut
_c ircle
åij ĺ
n egative
Ġind ian
s alt
Ġt ing
ĉm od
Ġs int
ak in
um l
ĠText Input
Ġpop ped
T MP
Ġpark ed
×Ļ ×
ĠF usion
Ġhe ater
ET F
ro zen
h all
ĠM ik
lev ard
- heart
ĉ order
M aking
Ġpled ged
Ġdir s
$ post
ĠH err
stant iate
, "Ċ
.get Color
ĠS AT
Ġtimed elta
ĠM ai
ĉm ethod
Ġid iot
ĠTr av
ident ified
ĠDiv ine
.get Path
D ash
Ġinf iltr
Ġhandle Submit
bro ok
.g eneric
.short cuts
................................ ................................
Ġdat ings
ĠM V
 #
} "ĊĊ
Ġimprison ment
ason ic
rou d
uc ion
æĬ ¥
Ġdia lect
Ġon Mouse
const expr
.label Control
Ġwe aker
Ġman kind
ĠRE CE
Ġd iz
Ġapp Bar
Ġqu é
f ra
_default s
Ġal iqu
_at om
: indexPath
Ġmiss es
Ġvis ually
ĠH ands
STR U
i ates
_ asset
F inder
mid t
Ġsn acks
(__ ('
. uri
ĠIn strument
ven ir
($ __
.Dot NetBar
Ġconfig s
Ġguess ed
ि à¤
Ġinitial izer
Ġ? ",
ĠVer izon
man ifest
ge ben
.d etails
G ate
pons ible
ĠEl im
, str
Ġwrit ings
ĠD erek
ĠCo ordinator
Ġpill ow
Ġnotice able
R s
Ġduplic ates
ern els
k J
.z z
oll and
ĠSE CTION
_f name
uff led
'].'
_C M
Ġy r
pl at
ob ody
nd e
( Element
ĠAtl as
Ġ ï¼Ī
Ġn ivel
Ġins ists
[ P
Ġenthusi asts
Ġìŀħ ëł¥
Ġbe verage
{} ",
: right
Ġnou veau
ĠCom ple
ĠP ag
own s
Ġrem embers
ĠPr adesh
Ġch alk
ĠLa uren
\ Service
_G EN
> ")Ċ
ĠD ollar
Ġem oji
Car ousel
- player
Ġadjust ing
Ġjug a
alleng es
g ene
(body Parser
lop edia
ĠBeh ind
Ġslee ves
Ġdrag ging
ĠChe vrolet
Ġb iz
iv ities
ĠFrequ ency
, char
.W HITE
_pre view
) ';Ċ
_ ax
ION S
.c pu
.input s
UB E
_fe ed
ĠSup plement
! ).
es us
ĠU DP
Ġmicro phone
Ġconf irms
.is NotEmpty
":" ",Ċ
_S CREEN
ĉ expected
+-+- +-+-
ĠH ait
fast call
Ġdep ict
v b
_p icture
ĉd escription
ĠW ife
uc i
Ġv icious
ä» ĸ
ue ba
Ġset User
ãģ ¡
Ġd iving
Ġoper a
user content
ar ah
) },
y un
vel t
Ġun covered
Ġh ips
Ġosc ill
Ġassert ing
ĠX i
.re store
ke a
Ġsp elling
Ġder ive
ab we
ĠD ow
.set Type
_v s
Ġco zy
.c ategories
O rg
_m gr
Ġd ungeon
collection View
ĠBl ank
ac ias
ä ä
_clean up
_ACT IVITY
Ġtri angles
.Menu Item
Ġip hone
ĠW on
] ]ĊĊ
ĠCompar ison
.D oc
Ġcan onical
ĠSud an
') {
Up Inside
b uiltin
ENC Y
x be
Ġch uck
Ġcontrad ict
Ġnuest ro
Ġarchitect ural
ĠF ib
Ġcomp ares
* k
C fg
çĦ ¡
nt en
Match es
ĠDOWN LOAD
_HAND LER
man agement
[ S
EN G
ÂĢ Â
f ang
Ġsl ipped
ĠL anka
esc aping
Ġtack les
ĠPed ro
.P rop
.' '
.G enerated
.New Guid
at rigesimal
ill on
Ġstat istic
spec ies
hold ing
Dr upal
Ġfundament ally
Ġbond age
Ġres olutions
Inline Data
\ Type
est ion
.w rap
Ġwar riors
ĠLOC AL
Arch ive
Ġembr aced
á» §
.V er
ĠAff ordable
oles ale
ĠAp plied
ĠCon version
m ega
_c am
Ġcer emon
aur us
ĠVol k
.op ens
/ about
ĠSt d
j ournal
()) {čĊ
," \
( Arrays
ĠD ense
ase ña
än ner
/ stat
user Data
Ġg erman
Ġt z
worth y
Format Exception
ph erd
Ġsm iles
ĠWh enever
( adapter
.bad logic
Ġbrief ing
.Grid Column
- char
dim ension
ĠC opper
Ġnin th
Ġ' {{
Ġr av
_T able
Ġderiv atives
ĠR aise
ĠF ut
arm or
-p adding
Ġre min
ĉ style
ĠMembers hip
Ġspread s
Ġgall eries
ĠClar ke
Ġcon ception
min ute
Ġab usive
_ad j
Ġterr ific
Ġover t
our cing
Ġentr ada
level s
Ġcrit ique
Ġrespect s
ĠM MA
i ene
Ġenc aps
ĠRay mond
Div ider
iv able
b az
Ġ@ _;Ċ
ĠCl aire
Ġur ging
CE E
Ġtransform er
disc ord
ĠJ ourney
t os
Ġcompet itions
ĠO BJ
ĠB is
Ġrelax ation
id y
_IN STANCE
ĠP ref
d ados
ici encies
ĠMedia Query
ĠC ube
ĠStr ange
g pu
(d ays
_Init Struct
Ġfinger print
em at
ĠGe cko
Ġr ails
ĠL um
str action
ig ung
(m ovie
_d ictionary
_int errupt
ĠQ C
ik ed
append Child
rec ipient
r é
V e
Ġtow el
.last IndexOf
Ġplace bo
ĠW ie
.es p
( Debug
oper ative
Ġdece ased
& id
ĉm utex
el ic
Ġb apt
ĉ čĊčĊ
Ġfar ther
H alf
.dis able
.menu Strip
le ccion
Ġresult Code
Ġc ans
-e lection
f emale
_F IX
aus ible
ĠP OWER
Ġrecon struction
Ġsc ans
.Xtra Bars
âĢĺ s
Rem oved
Ġparagraph s
_m argin
Ġl ymph
Ġb os
ling ton
ĠBapt ist
Ġadvertis ements
ĠMan age
/ yyyy
IO US
ENC ES
ĠF iction
ĉm enu
ĠFile OutputStream
ov an
ĠF eng
Ġsk ipping
get Class
ann i
Ġreb ounds
Ġpublic ity
Ġing res
use ment
Ġthought ful
.Ch art
Ġhat te
pass port
Ġhook ed
ĠL ens
Ġflag ship
Ġst ip
ĠG EN
Ġcl ues
ip v
ĠR ise
ĠG ew
tab lename
Ġfore most
_ validate
_an alysis
oll a
Ġqual ifications
Ġdistrib utions
ĠFl ower
Ġt ense
Ġthank ful
Ġcl utch
Ġun ified
ro ads
Ġsit i
Ġst all
_P RIORITY
c stdlib
_USER NAME
.by tes
? page
ermal ink
ĠVe get
/v nd
- author
.N ONE
ĠCon current
ĠC ry
Ġstart ers
ĠInter action
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ
ĠLE VEL
E ll
Ġcom boBox
ĠTh eresa
te k
_H andle
Ġab y
.g dx
, end
(L ocal
O l
kn ife
ar ial
ĠH off
Ġprostituer ade
Do ctor
Inst ances
.Set Value
ĉf rom
Ġlux urious
Ind ent
Alloc ator
_D RAW
(", ",
ĠFr ances
Ġgroup Box
(s chema
Print f
OR IES
- gradient
Ġre put
ar in
_D ONE
in cre
ig nty
Ġex ert
Ġ- .
/ App
-th rough
Ġdecl ining
Ġdess ert
Ġinc umb
Ġdesign ation
.P ORT
, strong
Ġsand box
Ġw ines
ĠP av
$ str
ask ell
Ġh ö
ĠP Y
Get Instance
Text Input
game Object
/ events
created At
Ġlocal Var
ĠWH ITE
per ed
ile ge
eff icient
, color
c ate
ĠC afe
Ġsimilar ities
Ġp umps
ĠHung ary
.User name
Ġsk ate
Ġtouchdown s
Ġacceler ate
ĠH elen
OM EM
ĠK un
_v ol
Ġfind All
ĠMens chen
a head
); "
kom men
Ġpossess ed
.arg max
.trans ition
AR P
OLUM E
(s cript
ĠÐ ĺ
ĠF inding
on ces
I o
B old
Ġrenew al
_D IALOG
Ġdis reg
INT ERN
Ġt oute
Ġelect r
ĠG ross
ĉ true
.F ields
ĠW IDTH
ĠD ent
ĠÃ ģ
NS Notification
Ġa os
Ġme lee
. Validation
ĠDE C
-depend ent
Ġsu ic
T raits
$ message
ĠD ear
ĉ FILE
l anguages
.P rot
.add r
-g eneration
IC ON
Ġtrans plant
-d escription
Ġch asing
Ġche es
Ġ} */Ċ
Tr ad
qu eries
/widget s
sub package
Ġes pec
Ġcr acked
Ġcompet itor
P urchase
- team
olec ular
or Thunk
& P
Ġrel ent
/ #{
Ġproduct Id
Ġè ¾
ĠL av
ĠAl ter
.M ode
AD IO
gr p
æ ·»åĬł
Qu it
Ġdepth s
-c ategory
ĠD ATABASE
S PELL
ĠFal con
ĠQString List
Ġ'' .
ĠIn stitution
d amage
az or
bel ongsTo
ver ages
ĠN ONE
ipp ets
, \Ċ
Ġfoot print
_ archive
n ak
.get Field
ĠRef lection
Ġ' ]
ĠH BO
_dis count
Ġin cest
ĠD odge
ĠW ade
.N O
" encoding
ĠBlock chain
Ġlaws uits
ĠM aint
ch ten
Ġét ait
Ġktó re
_ ctl
(t imer
B attle
iz o
ay ed
I OR
ĠGlas gow
Ġsyn th
_log s
.p ose
_Adjust orThunk
(( &
Ġuns ure
yst ate
íķĺ ëĬĶ
O ULD
. ng
Ġdefault dict
work space
Ġselect ive
Picker Controller
YNAM IC
.method s
Ġpath ways
ĠF ew
K G
CRY PT
follow ing
ĠD LC
ĠS ara
Ġpres et
estruct or
ĠK urt
Ġair plane
Ġo mp
ĠParent s
ĠMart inez
.com plete
Ġbroad ly
Ġsc are
ĠM é
Ġelim ination
Ġpou red
/ sw
Ġcom un
Ġm asc
ĠOrgan ic
ĠString Utils
il ateral
Ġreluct ant
- age
Ġn z
." \
Ġpast or
ale z
Ġe fect
pro v
/ init
Ġp enn
und s
Ġs size
ĠPro j
bas ename
Ġsh ells
ĠNe ck
ĠEn forcement
vid ed
st own
S phere
$ r
uss en
af il
ĠTele gram
Ġanaly tical
нÑĭ е
us ually
x n
Ġhistor ian
ĠGreg ory
ol ph
ĠUn a
Ġcon tributes
% -
anti ago
ÑĢ ÐµÐ´
.reg ion
Ġab rupt
ĠUnsupported OperationException
ĠT ASK
_f inish
Ġnot orious
ĠV s
ĠM Q
Ġsun set
Ġun acceptable
ar cer
Ġill umin
ĠOr b
Ġb h
E ste
_dis patch
Ġr ipped
Ġtou jours
ĠPar cel
_ ll
.user Name
.class es
S OURCE
( Number
ел Ñı
Ġhead phones
(s ide
const itution
ann ah
čĊ ĠĠĠĠĠĠĠĠčĊ
Ġcl iff
- ref
Ġmo strar
ĠPow ell
+ y
ĠB G
_f ragment
.P ort
Ġreal izing
param ref
Ġh ometown
@ Table
+"
om id
Ġd ug
ĉb tn
Ġsubject ive
/b rowser
Ġus hort
ĠMont gomery
-r ate
ĉ puts
let ics
orn s
âĢľ What
ee per
.In variant
Ġconce aled
_n umpy
======== =
(p s
Loc ations
. astype
ĠCH ANGE
.Order By
; height
Ġg ente
Ġgr unt
ĠPl ane
Ġsad ly
ĠLog an
_use c
.d gv
Ġsinc er
Ġp n
ĉg tk
Ġinstall er
Ġdispl acement
Ġburn s
Ñĥ Ñģ
iver ed
: ])Ċ
se at
an ing
} )ĊĊĊ
_ roles
atic an
Ġgener ators
Ġhur ts
Ġsn ippet
Ġg son
Ġseg reg
Ġdistrib utor
Ġadv ancing
post gres
Ġus r
ĠL is
.assert Is
_c d
Ġhy draulic
.count er
ĠIndepend ence
Ġdiff é
Un like
Ġto mb
v ik
post ed
w f
Ġdesc ending
d yn
ament al
ĠF ruit
ĠY o
.d ouble
ĠI A
ie v
ib rate
ĠRel igion
Many ToOne
-T a
Ġban ana
ĠAv engers
ĠHol ocaust
Ġget C
Ġcon do
ĠGoth ic
Ġprosper ity
TR ANS
Ġdoes nt
ĠCha os
IT T
ĠC URRENT
\ helpers
_S AVE
av it
com puter
_s heet
ĠBrew ing
Ġrob bery
Ġê² ½
Ġк ом
Ġn ä
.reg ex
Ġdis ruption
ĠSim ulation
ap id
Ġsup reme
Î ¼
Ġcommission ed
Ġabsor ption
ĠNew castle
ĉ constructor
Ter ms
Ġr iv
Ġrelig ions
With Tag
.H tml
link ed
Comp ound
ĠM ans
Ġl akes
izz le
.set Size
ab er
ĠNe eds
pack ages
.Tab Page
Ġref s
Ġi outil
ĠDo ing
Ġ"\ (
Ġphenomen a
.Get Int
AL TH
Ġparliament ary
Ġref usal
Ġinexp ensive
Ġ}ĊĊ ĊĊĊ
Ġsolid arity
ĉp ush
ha ul
ĠB ere
S izer
Ind ividual
Ġan ce
Ġd ile
ĠPe ak
(h r
Editing Controller
H N
_PER IOD
ET S
B anner
error Message
.C ASCADE
- ignore
ĠS IGN
ĠO B
_ dd
( DEFAULT
Ġso o
ĠVict orian
Ġcur t
Ġdis crete
ry lic
imb abwe
.to Fixed
l ä
.std in
Ġq ty
ROLL ER
medi ately
Ġpl umbing
ĠProperty Changed
arrant y
ĠBreak fast
.set Header
.py thon
com merce
op encv
> --}}Ċ
F rench
Entity Manager
ĠPl ain
//////////////////////////////////////////////////////////////// ////
 ³
( RE
c apt
Ġorgan isms
Ġj ets
ol ocation
ĠApp RoutingModule
Ġgl orious
æľ į
Ġdisc arded
ĉĉĉĉ ĠĠĠĠĠ
ĠArn old
l ug
Ġpar l
Ġhorm ones
Ġm ah
ĠSon ic
Ġorgan izers
_PL ATFORM
.in v
Ġch ord
vent ional
ĉ of
Ep isode
. Enum
unk t
ĠD h
ĠJ ared
ĠN ak
Ġint ends
End ian
Ġa ustralia
_c v
(res olve
Ġclin ics
lik ed
ASH INGTON
in ha
' *
ĠN P
_b eh
Ġh f
Ġw ür
c ategoria
$ form
Ġsub way
Ġis Active
pop ular
C our
Ġco oldown
Ġa insi
ĠGL uint
ere al
Ġarray Of
Ġh atch
======== ==
ress es
_P P
. ^
_dec ay
ĠB less
met rics
ĠCOPY ING
ĠDump ster
ĠJos é
ĠDesign s
<
Ġ" }Ċ
time zone
Ġe er
max cdn
ĠE SC
ig aret
_conn ected
_re verse
Ġquestion able
ĠUS C
Ġtut ti
Ġdrop out
ĠActiv ities
ĠW inds
')) );Ċ
Ġcon gest
ģ ı
Ġprolong ed
è¿ Ļ
ĠCross AxisAlignment
LE EP
ĠVAL ID
ĠG az
Ġdepend ence
ĠP rix
.Compiler Services
j ump
Ġstr at
c irc
ĠC USTOM
x aa
Ġb mp
Ġb ureau
Ġw aren
N X
( Window
ĠChrist ie
_F E
Ġt n
ĠOm ega
communic ations
Home Page
com pletion
Ġsupply ing
YP ES
á vel
åĪ ¶
(c lick
\ Contracts
/ questions
Ġe z
AM S
.m esh
Ġ'
j Ãł
In i
. #
ĠCard inals
pc ión
C ube
ĠPat ients
_p ref
Action Button
(b uild
ĠVis a
ov el
( ArrayList
I gn
Ġrehab ilitation
Ġpal ace
Ġspeech es
} 'Ċ
Http Response
ĉc ode
D ummy
Ġacad emy
.m ovie
Ġincorrect ly
Ġc yc
( UnityEngine
ĉc allback
ĠSat an
ĠF UNC
Ġch ant
ĠHealth y
: ',Ċ
Sh ipping
_m c
ĠD ylan
ĠProdu cer
Ġresp uesta
Ġpol ished
B roadcast
Ġbal ancing
ĠSl ide
ĠC aps
st ill
Ġhapp ier
ĠG ospel
tr an
.path name
Active Sheet
ĠCh ang
> \Ċ
Rob ot
Json Object
ĠD F
ĠProcess or
_sh ould
.prot obuf
- users
Ġemb ry
F ONT
Ġstart ups
ĠData Source
) #
uro s
_C olor
Ġstand alone
} [
j d
Ġforg ive
Ġng x
ĠGener ally
Ġconfig urable
/ order
Ġv as
') ";Ċ
ĠR R
ĠT roy
Ġcomprom ised
ĠSw an
int endent
Cent ral
_ keeper
Ġar quivo
ĠRead Only
_cur ve
k v
ent in
è ±
ĠE y
.im read
ĠP am
if fe
at ivity
xb c
Ġgr im
-f illed
names e
'] :
Ġa ur
ĠGib son
.Mouse Event
Ġl ado
avad oc
Ġfam il
ĠM oder
f ps
ãĢĢ ãĢĢ
- example
ĠAl zheimer
ĠU tf
_arg uments
Con clusion
text Content
rem aining
Ġinterrupt s
ĠBack up
ĠM ong
Ġrecept ors
h istor
.cor outines
Ġsh outed
Al arm
Ġcomb ust
Ġg rote
ult ural
( ids
---------------------------------------------------------------- ----------------
ipl inary
O pts
ĠY ale
local Storage
Ġequ ival
ĠF leet
\ b
* pi
ĠQ Label
æ ¡
Ġv x
ĠA CL
Ġsu cesso
Ġper c
ĠNot re
Ġan arch
R ing
sp b
Ġstr pos
st ores
ĠMap le
(Main Activity
(" "))
Ġview Holder
Qu ad
Ġig ual
ors che
.m argin
Ġind ie
Ġfr anc
ĠForm Builder
ĠPart icip
.fl ash
Ġstorm s
U lt
Ġf en
[ new
E ver
=" Ċ
Ġlocal ized
_f ollow
Ġn ave
Ġdomin ance
(t ile
J ournal
ĠV C
Ġpenet ration
ï¼ ķ
Ġcomp artment
Ġb ids
Form atted
****** /ĊĊ
(c ity
âĢĶ it
[ C
Ġuse Callback
a ub
) ?.
ĠV AR
ĠSe bastian
ĠM oss
Ġabund ant
G reg
ÑĤ а
_c i
Ġbib li
CR M
ĠAt tempt
ism e
d ash
ãĢ İ
_m u
.Formatting Enabled
Ind eed
-d irect
Ġsuck ing
Ġp ne
ocab ulary
ĠPack ers
.N avigation
Ġp ied
cri bing
ĠSt uart
.To Double
ĠSecond ary
S aving
ĠD ut
ĠM add
M agic
, H
.document Element
ĠB ST
Ġdiff ers
Ġmore over
_ nd
SE ARCH
п ÑĢав
æ ´
to Match
Ġdecre asing
-m ember
amp us
( boost
D aily
Data GridView
ĠHttp Context
Ġh ipp
_work ers
-l anguage
é ĵ
Ġconsist ed
ath ing
ĠMer cury
$ content
Ġpract iced
ĠMod ules
_D AY
Ġweakness es
ĠL odge
Ġn ar
ĠM ate
Ġj p
ĠHttp Headers
Ġsm o
ĠT OKEN
] )(
Ġaqu i
sw agen
Ġs rv
ĉ ans
A round
ĠMan uel
Ġfiction al
ĠIM G
Ġ. '
ĠB erry
Ġwall paper
sex ual
ier o
Ġ çļĦ
ìĨ Į
Backing Field
ĠAd rian
BASE PATH
Ġrepe ats
Ġbl ues
Ġunp redict
_c oll
st acle
ĠT umblr
ĠEl f
Ġass urance
Ġc ensus
ĠIM PORT
END ER
an os
Ġ= (
ĠEll is
" ĊĊĊĊ
.w in
ĠA bove
al on
_t ick
Ġrepresent ations
Ġæ ķ
w id
ĠAr ms
List a
_f ailure
_c m
.Flat Appearance
Ġthr one
P atch
ĠV oy
eng l
Ġnegot iating
> `
Ġshoot s
ĠF PS
.Y ear
ĠK iss
enc ión
reet ing
From File
Ġresign ation
Ø ·
Ġtw ins
ưỠ£
Ġge bru
.get Content
.T ree
ĠEmploy ees
ĠF IFA
Ġcert ainty
(C l
Ġtot als
edit able
ॠĢ
.Report ing
M as
qu iet
.r ules
ĠV O
con exion
, K
Ġalloc ator
ĠPow der
\ Repository
Be at
_t ipo
Ġ[' ',
_IN TR
Ġ<< <
< hr
") ==
ugg age
ĠC raw
Ġé galement
Ġg inger
Ġprim era
Ġprod uto
lt k
.User Name
Ġstr error
m ith
_n b
Ġdis comfort
']; ?>
Q T
Ġer upt
ĠDan ish
\ Active
_ad apter
Ġb ubbles
rol lo
org ot
нÑĭ Ñħ
VE CTOR
oc ode
ĠBull s
Ġbo il
> ");čĊ
drop IfExists
ĠB eg
_H AL
Ġcross AxisAlignment
ĠE vidence
Ġpec uliar
Ġinstit ute
ve is
Ġf ft
à ģ
Ġzo ekt
an aly
ĠHom eland
Ġpen etr
udden ly
ĉ element
ĠB ren
ĠTr udeau
ĠCub an
j am
us lim
_e v
Ġst ems
} %
Ŀ å§ĭ
Ġbrand ing
Ġcorrespond ence
.j query
¢ åįķ
ĠRead s
(Http StatusCode
ass in
(s lot
ĠGrad uate
/// <
Ġinform ations
EN ABLE
Ġp uis
Ġfind er
ĠBr is
Ġnett steder
_m id
Ġo gs
ĠSter ling
Ġar rog
str ftime
| ĊĊ
Ġvo x
ĠReg ardless
Ġes o
ĠCom fort
.Boolean Field
Ġu h
AC Y
Ġsque ez
ĠV ic
cont ro
. lo
Ġ ire
ĠCom edy
ë ¶
Ġorigin ated
Ġsh ipment
| max
_g uid
lev ation
на Ñı
( undefined
ĠD DR
Ġshoot ings
ĠLat ino
END OR
Ġaver aging
Ġgre eted
Ġthe aters
о е
Ġd B
Ġg st
Ġdef inite
. Storage
.h er
Ġa fore
ĠRe ality
ĠGod s
vers ed
Ġhands ome
Ġex cluding
( ad
Qu otes
ĠS cheme
? q
ĠT amil
T icks
Ġp est
' n
Ġporn ography
_mod al
Ġ ----------
Ġdis posable
F REE
Ġsh ark
C HE
Ġdep icted
Ġdemonstr ations
ĠK illed
ĠR ULE
Ġobs essed
Ġsimpl ified
Post al
Ġconcept ual
Ġp st
L as
_PRO JECT
ucceed ed
ol u
ÄŁ i
Ġpersonal ities
Ġres hape
Ġenc losed
ĉp tr
Ġtutor ials
Ġexpl oded
_DIRECT ORY
åĨħ 容
Ġcan on
Ġrecogn ise
P AD
ĠAppro x
ĠRest ore
ĠImport ant
Ġheav ier
.Se quential
Ear th
ĠMil k
.set Request
.t em
Ġre construct
Ġskept ical
_Pr ivate
BU F
qu a
: a
Ġse k
Ġd well
oss a
Ġreward ed
и й
(top ic
_part ition
Ġ__ ________________
Key words
ĠFr anco
L ite
Ġn aken
Ġз а
O BJECT
Ġcraft s
ĠSw ap
.X na
.Con nect
Ġbalcon y
(re al
ĠBarn es
b ir
ĠTw enty
ay an
at ars
ĠProp el
ĠIh nen
Up grade
Ġcur b
- second
Ġn eph
.p res
ìŀ ħ
.se q
Ġp added
" ?
j l
ãĥ ¬
')
Ġciv ic
g ons
> a
Co ordinates
Ġen acted
ENT S
Ġl ac
.f inal
ĠPhp Storm
c alled
Ġin quiries
.m iddleware
ĠD owntown
/ ';Ċ
Ġkil omet
ac cel
Ġqu ien
w string
set Data
Ġman era
Ġmod ular
rim p
Ġtar iffs
âĢĻ il
_TH ROW
/c olor
ĠHT MLElement
Ġcar ro
Ġpr ere
Ġplot ting
ĠPos itive
ĠMach ines
OT ES
á» Ľ
ple asant
Ġal te
Ġa inda
th ese
Ġc ors
ip ay
ĠAdvis ory
ĠRub io
j q
Ġl imestone
Ġdet ached
设 置
ten ant
ĠDep th
al ore
ĠÑģÑĤÑĢ Ð¾Ðº
ĠF ORE
ĠL ay
p resentation
) ');Ċ
.sub plots
Ï ĥ
N OW
G ar
hand les
ab ra
put ies
ĠElect rical
M iddle
rop ic
ĠJ D
ĠD yn
ĠB ristol
ĠMc Carthy
Ġstri ker
Ġenumer able
ĠEv an
.default s
qu ences
) ||
ĉt oken
â Ĺı
-d ropdown
ST ORE
ĠGraph ic
( pp
Ex pl
Ġup wards
ĠD istributed
ĠW EB
J er
is NaN
çĶŁ æĪIJ
> R
üss en
ef s
Ġun cover
Ġl ud
.cal culate
Ġint ptr
Ġmidfield er
. Headers
Ġm f
ere f
.M etro
ĠSpe aking
: b
Ġcryptoc urrencies
Ġdem ons
ĉ EXPECT
Ġw icked
y outube
: Int
ĠHind i
ĠC AT
ĠØ ¹
r ar
om ore
/ per
/lic ense
Ġre im
Ġawait ing
Ġle thal
ĠE F
round ed
ĠPl atinum
ĠвÑģ е
.co ords
.De vice
/ item
ĠW enn
compile Components
ĠK inder
.remove Item
Ġand a
bn b
Ġpr a
( transaction
Ġembarrass ing
ĉ BOOL
.content View
Ġevent data
at ore
Ġprovided In
ir ma
Ġz ona
_H W
æ Ļ
Ġst ove
Ġcounter part
_Pro duct
_MAN AGER
Ġinfr ing
ĠE RA
_p arty
Ñ ij
Ġin ici
_ Request
Ġmir acle
Ġcancel Button
S py
at ó
Ġpol ish
ĠNic ole
.display Name
\Request s
Ġuse History
Router Module
Ġst ared
ID ER
Ñĥнк ÑĨи
Ġnot a
$ arr
pec ified
Ġto pp
_DR IVER
/ ng
å ł
_t m
% timeout
< s
Ġ( *)
ĠHttp Request
_TR ACK
(n ote
ĠExp lore
_s erv
Ġç »
B inder
+ ",
. att
ĠEth i
Ġc ódigo
=' \
.l ines
( Of
å° Ĩ
miss ible
Ġv é
Ġac oustic
Ġcraft ing
n it
.b a
ĠLuc y
Ġi Pod
Ġpup ils
-m ax
_w r
(c p
ĠRE PORT
Ġd ns
ĠRe ferences
Ġundert aken
Ġkø benhavn
Ġch ai
ĠC roat
_ Log
rown ed
_m ed
ĉ date
# __
Ġcost umes
ĠRe quires
aff le
ç Ĭ¶æĢģ
-S emit
ela ide
еÑĤ од
Ġp estic
Ġd ra
DOC UMENT
Ġ... čĊ
}` }Ċ
ĠA uction
ĠD ock
xxxx xxxx
(get String
ħ į
Ġborder Width
ĠMach inery
Ġpredict able
.S H
Ġam plitude
.for Root
IN avigation
Table Model
at trib
Ġmaneu ver
Ġexc av
B ERS
Ġd apat
Ġinstall ations
.A sync
Ġr ays
= âĢĿ
; ččĊ
.c rypto
_db g
ĠEnum erable
Of Size
_epoch s
m w
M ENU
out line
ĠP apers
============ Ċ
Ġuniform s
ĠG ig
- package
ĠJen kins
ĠHome Page
.is Selected
Ġmechan ic
M K
ĠS ounds
//---------------------------------------------------------------------------- -Ċ
Ġresearch ing
Ġinf os
ograph ics
ers et
([' /
ĠTim ber
. agent
.to JSON
_command s
par ing
_ad just
.n ome
(g lm
Status Bar
file path
? âĢĻ
Ġdetect ive
Ġunser er
ĠTib et
EN DED
(se ed
Ġsne ak
Ġam or
=" //
ĠPan thers
all ax
ĠL IVE
ĉD WORD
]= -
Ġtorn ado
/ min
Ġlung s
-c urrent
ĠBook ing
åĪĹ è¡¨
Ġenjoy ment
ठ°
J A
typ ed
.B tn
f at
ug al
ĠSh ares
Ġdis gr
ĠB AR
ĠFO X
Op code
ĠS z
key down
iction aries
Ġdetail ing
} ))Ċ
Ġp ok
Ġdemonstr ating
Ġnot ation
l ayers
@ if
ĠN PR
.strict Equal
ĠRec ipes
.T ensor
Ġliqu or
Ġdeb ts
.ends With
W heel
.P os
CS V
$ arity
Ġun stable
( loss
ENS OR
Ġele ven
ĠL opez
ĠHop kins
con om
ĠS eth
Ġpo ems
Qu ant
Ġg sl
Ġsy rup
Ġs ibling
Ġc ass
-v ous
ö t
_P ATTERN
_SE CTION
est imated
up grade
.m ongodb
ĠBo at
_C TX
Ġfetch ing
ust in
pi el
M arg
Ref lection
Ġd uct
ĠMunicip al
Ġb x
.Get Current
ml ink
ĠAccount ing
ĠGene va
_P os
Ġpass er
Ġhear ings
com pan
Ġfrag ile
Initial izer
walk er
.M aterial
ĠHun ting
trys ide
Ġk at
Ġcl erk
á Ł
do ing
ĉg roup
Ġsan ction
.l b
ĠL azy
ĠCon straint
P agination
Ġpou vez
ĠInd icates
M ER
Ġcour s
Ġyear ly
Ġgros se
abb rev
ĠD ON
Ġproceed ed
ent lich
Ġproperty Name
ĠTe aching
st adt
Ġc utoff
orn ers
Ġa frica
Ġrend ers
ĠYan kees
ĠTool bar
sp aces
.fill Style
Ġseg undo
_str len
.F irebase
å¤ Ħ
Ġmention ing
\ (
ĠVal ve
Set ter
Ġsp ans
ĠAl cohol
ĠLet ters
\x e
ĠT K
_B LE
.get Result
< Player
ĠP att
Ġeas ing
Ġtur key
ĠF en
') "
Ġconf ined
Ġin clus
Sup erview
(with Identifier
enc ial
Ġstuff ed
Th eta
Ġeconom ists
} ));ĊĊ
co okies
ĠRo ose
ĠChe ese
Ġfich ier
Ġen forced
AB B
no ÅĽci
_AL LOW
Ġrecru ited
Ġexpend iture
-n ight
Ġassert NotNull
_ex ecute
ĠØ ¯
IN DEX
_F MT
Ġresc ued
ĠMonth ly
ĠCons ervation
ĠG eb
Ob ama
Ep och
ic ies
ĠOr t
Ġso it
( icon
F riends
m ol
Ġground ed
ĠC ause
ad ena
WE EN
ĠL un
IT IVE
. loop
_un til
Ġcor r
.ed ges
Ġhyp oth
ched uling
trans lator
ĠÐ ľ
R om
ãĢij ĊĊ
ĠX amarin
Ġviol ating
. anchor
--- ĊĊ
Ġtr ader
AD VERTISEMENT
Ġuns ere
ĠD AO
Ġbl ond
ĠP AT
.g lob
Ġè¾ ĵ
Ġsplit ting
Ġun subscribe
Ġatmos pheric
ĠTr im
Ġcit ation
Ġin ference
ĠF t
ĠDar win
find One
ĠG el
( Convert
Ġaccess or
; text
(s orted
Ġjud ged
); \
: p
Ġme ine
ĠS lim
.Command s
Ġper ceive
coh olic
< Data
.entry Set
Ġassert False
ĠPat rol
ense m
ÅĤ Äħ
¨ ¡
W IDTH
ĠRes cue
ĠU IF
_THRESH OLD
ĠMich el
ATER IAL
opens ource
ĠD iana
Ġinv ites
_B ODY
Ġreserv oir
Ġro i
c ust
(t c
ï¼ģ ");Ċ
Ġfest ivals
Ġperform ers
Ġclim bed
Ġj ungle
String Length
Ġunlaw ful
ier re
vertis ement
Ġst akes
Ġh ats
Mod ify
ĠLET TER
.H ide
Ġstat utory
_ white
ĠPer l
uten berg
em ple
.W orld
Ġoverlook ed
Ġcon cludes
/* ================================================================
-w ise
ĉ stream
pop ulation
Ġevent o
Ġillustr ations
ft s
Ġaut of
ĠPro cedure
Ġdes erved
-t imes
Ġg ol
N SError
cre st
ĠPak istani
any ch
get Current
Ġl ar
nt l
ĠRe becca
Ġm ateria
Ġfind By
/ ad
Callback s
ĠAl s
ĠKat ie
ĠObservable Collection
ĠDocument ation
Typ ed
ĠCulture Info
ĠTim othy
Ġlater al
" type
Ġun authorized
Ġteach ings
Ġdebug ger
[ value
Ġal ors
Ġu z
Ġsc atter
Ġdown ward
Ġmig li
status Code
Ġ( ))
ĠM W
Ġм ож
RO SS
.b uf
Ġfair y
ĠInf rastructure
=> "
t lement
$ ("
From String
ĠB ild
Ġconvent ions
_n ative
ĠIns pector
ĠP ist
ub ar
Ġreg s
ĠP ilot
Th us
>' +
Ġc ela
.new s
( Product
L iving
R ussia
Ġfac et
et ical
Ġ[' $
/ [
ĠD ire
Ġg ases
ĠIN FORMATION
ĠE at
ĠFor ums
ĠChar acters
_m et
Ġìĭ ľ
Ġk ings
ach ie
ĠL ambda
Ġtim ers
ĠLight ing
ĠCase y
add ir
and ex
. answer
ĠH ip
ĠPr incip
Start Date
Ġ ãĢĮ
t res
Ġ& #
.Max Value
ĠPro blems
Ġlat ex
Of Class
ĠLyn n
// '
Ġvoy age
Ġshut tle
ĠRoll er
ĠRuntime Error
uy a
D ic
ĉb uilder
Ġbul lying
Ġsimple st
.c alled
ĠL R
Ġmor ality
Ġst urdy
tr acking
.sw agger
_B IND
IT OR
-url encoded
ĠÑ ħ
ĠTr inity
Ġtr aps
Ġ| -
Ġset Text
Ġbarg ain
Ġbr akes
.get Code
Ġmigr ate
Ġrib bon
) return
Ġcharg er
ac om
ADI US
ĠAmb assador
-a fter
Ġann i
ĉs pin
Con cept
ĠHend erson
ĠH OST
.r ank
ĠNor theast
Ġber lin
Ġrequ is
.f eed
Ġsource Mapping
ĠRen contre
. ajax
nest js
Ġtre k
ĠN acional
Ġ& [
Ġpay able
ort ex
Ġde pt
field Name
Ġcomple tes
ĠR VA
Ġon ions
al ignment
Form ats
Ġ' {$
Hash Set
ĠB od
.Invariant Culture
Ġsettlement s
Ġhy dr
. updated
vent h
( seconds
="/ "
Ġweb page
( ĊĊ
Ġt ir
Ġto es
ĠBr ick
Ġamb ition
P ot
= max
ET IME
Ġdep ot
c alls
ĠNor wegian
` :
Ġbur ger
Ġprofess ors
ĠAl locate
-third s
-ch art
Ġfor d
* N
.k otlin
Ġpaper work
ĠDE VICE
% @",
res pect
(m p
é «ĺ
- if
Ġcush ion
ob ot
Ġpar c
SP ACE
ĠNet anyahu
Ġself ish
fe at
Ġclient es
-to ols
Ġpor ch
Ġj q
. verbose
Ġlib erals
] )ĊĊĊ
p ies
Not Blank
( term
ÈĽ i
_Param s
.normal ize
B ullet
AS IC
(h ex
_client e
+ ,
_D I
Ġforth coming
} ")]Ċ
se o
U m
> Name
Ġcomfort ably
irection al
W ITH
/ pr
ĠP oor
ĠVit amin
v ic
G H
Ġprior it
ĠN N
ĠC losed
¤ í
Ġis Open
\ Console
And Feel
.S UCCESS
_OPER ATION
pol ation
ĠT as
ps z
> '.
C URRENT
V endor
host s
ĠE rd
>tag ger
ĠsourceMapping URL
Ġmar athon
_c losed
Ġexem ption
Ġrecogn izes
ides how
' $
('/ ');Ċ
m its
war z
ĠCh erry
µ ¬
n or
port e
Ġw l
_back up
.get Boolean
.get Resource
Ġdefinit ive
. EditText
Ġs ÃŃ
.C ONT
ĠPL AYER
.c ards
ĠSh ore
('/ ')Ċ
cl uir
Web Driver
(m onth
-re lease
Ġins pector
å £
ĠN F
_cl ip
åŃ IJ
Ġinteract ing
.t mp
Ġ'' 'ĊĊ
Ġde e
Ġfro st
"] ))Ċ
ĠPl aces
Th rows
f ork
/ day
i Phone
ĠM IC
Ġfold ing
Ġcro re
ĠCh iefs
pher ical
( price
.Write String
Ġexit ing
] ',Ċ
ight ing
Ing redient
( vertex
Ġscroll View
h f
: new
SE N
se ctor
Ġsp ins
ĠS cheduler
ote chn
sem icolon
Font OfSize
ĠSpecific ally
fl amm
.Object Id
Ġcont a
_per missions
ĉF ROM
IC ODE
/ kg
ĠHot els
-m ed
ĠD in
Ġn avy
get Param
Ġm end
Ġportray ed
ĠMet ropolitan
Paint er
Ġref erral
_g ood
Ġmar vel
osa ic
> (&
. ur
Ġest os
Will iam
Ġtim ber
Ġquel ques
ĠDoc uments
.X aml
Ġbatch es
éģ ĵ
ĠRe leased
T ail
CO OKIE
he id
_st ation
ĠV ia
S ale
ĠRe peat
Ġprom in
ĠZ o
- forward
ĠI on
it ary
Ġj us
- request
Ġproud ly
ĠStream ing
(Mouse Event
ĠS print
_ rotation
Re positories
Ġt art
ĠÑģ в
Ġm appings
è ª
C u
C ycle
Ġb un
ĉl ua
ãĥ ī
Ġ(( !
Ġcollect ively
ĠCon d
Ġwsz yst
(l ib
openh agen
_s kip
.Column Header
é Ĥ
peri enced
ı è¿°
_p rops
Ġcontr ace
Ġmatch up
ab etic
.m embers
RE CT
(d at
Ġs og
ren om
_M ethod
Custom ers
full name
Z N
re try
Ġk ap
ĠNe u
è Ĭ
add Child
will Return
_p ermalink
Ġener getic
ĠW et
ĠMor r
Ġg cd
count s
, type
d ig
( Login
Ġcr acks
Ġbacter ial
ĠMe at
ĠArm strong
ĠBron ze
Ġapprox imate
_dir s
lig a
ÅĤ ad
Ġkind ness
Ġcont re
ĠE VERY
M ET
Ġannounc ements
g pio
ĠWaitFor Seconds
ĠPhotos hop
Ġdis contin
/ dd
Ġtop ology
an ical
. interface
auc oup
.Hash Set
ARI ANT
(r outes
ĠT eh
Ġh ype
] ").
Ġsl am
Ġbro th
- inter
ĠR id
-m anager
Cancel ar
ĠP agination
Ġsound track
Ġpost erior
Ġscr ub
cre ating
- *
ir teen
.d y
.s ymmetric
Ġ"" .
============ ===
Ġch assis
ĠnumberOf Rows
Develop er
_b ins
ĠO UR
ri eb
Pro s
Ġwi ÄĻ
" d
Ġasync io
ze igen
_s pi
.A LL
Ġscre ws
Ch inese
Ġapi Key
Ġun successful
ĠSeah awks
OR G
ç« ł
Ġprofession ally
ĠCou pon
åŃĹ æ®µ
Con vention
Ġpol ym
æī ĭ
Ġsalv ation
Ġengine ered
ĠW rest
ĠG CC
Ġwar mer
Layout Constraint
Ġag grav
Script s
vent ure
Ġrefriger ator
Ġinnov ations
ĠRun ner
N IC
ĠRoll ing
Control Events
Ġlo os
p ac
ĉ panel
ef e
ĠBudd ha
------------ --Ċ
åº ĵ
(for Key
Ġl umin
Ġ( ?
ĠA IDS
, user
im ientos
content Type
ant lr
é ¦
ĠW elt
Produ ction
m ight
ĠV II
", (
Ġobserv ing
Ġdeliber ate
( control
Ġwith d
Ġsem ana
ST ACK
uch en
N ice
ĠDeutsch land
ĠSpec ifies
d ma
iz io
ĠF acts
_pop up
ĠDirect ors
{ :
[ R
ĠÑį леменÑĤ
Ġpl at
Ġdirect ing
ä¸ ī
ĠGil bert
â̦ .ĊĊ
.q ml
Ġthere after
Ġdis position
d raft
Ġsurge on
ĠIns ider
Bl end
ĠT rev
tr insic
Top ics
rie ve
_FILE NAME
Ġaut res
J ose
Produ cer
er us
Ġpet it
ĠN EXT
ĠF ilters
Ġreplic ate
"] ).
Ġl enders
] ",Ċ
; charset
Cpp Object
Ġfl oral
ĠT ipo
Ġcirc uits
e asy
(& $
itt a
ery l
_COMM ON
'}} >Ċ
-back ed
(var iable
( Index
Ġvo ir
_loc ations
++) {
ĠLouis ville
Ġgrat itude
.Mock ito
ĠP owers
ie urs
Ġge ographic
ra le
Ġc ra
ĠSp urs
iph ertext
AC ION
- common
Ġvict ories
ĠFinal s
.sh uffle
-m illion
_PRO C
ass ume
Ġil s
DB C
Boot Test
Ġl avor
.test ing
. ast
"] /
m oid
Ġqual ification
ges ch
ĉ put
Ġair ports
J I
Te acher
_un iform
Ġn ama
ĠB ast
ert ype
c apture
get All
ĠReyn olds
oo led
.com ments
Ġch in
). *
Ġи ли
t gl
ud os
Ġd ÃŃas
ch ai
.pro gram
Ġps z
ĉ icon
ph il
ent ral
_WR AP
ov i
Ġnost alg
In finity
ĉy ield
Ġvit amins
Qu aternion
S ink
_g oods
Ġ ........
ĠW ings
ur idad
-st ory
"] )ĊĊ
idel ity
Type Def
G tk
Ġí Į
_M ain
Ġche z
ĠR aven
Ġpay roll
Ġfreel ance
LL U
ĠM end
ed ay
Api ModelProperty
.Form BorderStyle
Ġeconom ist
stan bul
Ġfre ight
-A gent
(m eta
Ġsym metry
Ġ' ..
.C alendar
- aut
g f
p ent
yc lopedia
Ġwish ing
ĊĊĊĊĊĊĊĊ ĊĊĊĊ
Ġgentle man
Ġê ³
= #
Ġlect ures
âĢľ In
Ġ! _
Ġh b
ĠV endor
Recent ly
_n otes
æıIJ 示
" My
Headers Height
_S O
Ġunw illing
Ġsuper hero
g io
ps y
ĠPe er
j avax
& apos
ĠCr isis
ord inal
Mem cpy
++++++++ ++++++++
- val
Ġwork book
- ap
= k
Ġmetal lic
_ peer
By PrimaryKey
_S D
u ator
_SH ADER
) Math
.Trans form
Ġc ows
Ph i
ĠC lem
(_ ("
ĠL ud
-d elay
ĠSec urities
ĠOrth odox
Sym fony
(re port
Ġent ertain
E PS
iz oph
ex ual
IR D
ä» İ
Ġl ith
Ġsanit ize
Ġfemin ine
IS BN
.auth entication
_p ipeline
/ constants
ĠCON F
Ġluc r
ric ia
.t tf
.set Content
Ġst an
ore an
ĠL loyd
.raw Value
Ġg or
ĠBrow ns
Re gression
Ġlower ing
na issance
Ġbl ows
Ġam azed
Ġun related
Re views
Ġrub y
ĠMod ifier
Ġgi ants
. thread
Ġcontain ment
ĠStart Coroutine
um at
ore lease
ĠR andy
@ endif
D igest
Ġsubur ban
=" );Ċ
Ġann once
. variable
\F oundation
Ġa cre
V an
Ġt uples
d ns
ĠStand ing
_l arge
Ġbox ing
Support ActionBar
ĠFort une
ĠR um
_m ultiple
arch ical
Ġf write
_ quote
Ġfool ish
Ġcompr ising
Ġо п
- selected
v f
ma id
N ama
(d atetime
Ġindirect ly
g art
fix tures
ch os
ĠH alo
Ġrec urring
- news
v il
ĠNurs ing
- produ
ĠH Q
\Http Foundation
enc i
au en
Ġv y
ocr acy
Ġdeleg ation
Ġas phalt
Ġset Selected
k ok
/ rest
met ics
ĠNS Date
Ġtravel led
Ġrec ib
Ġm ime
CL IENT
ĠG U
ĠH ANDLE
/ Q
[ z
Ġbother ed
ĠBB Q
ç as
_ex amples
_F IN
Ġwhite Color
Ġastr onom
-d ir
Ġsovere ign
Ġb reeze
Ġin ning
ĠEd monton
g li
.blog spot
js x
Ġvers a
ĠMoh ammed
.J ob
-t oggler
Ġп олÑĮзоваÑĤ
ard on
Ġnew born
Ġnav al
note q
Ġtum blr
Ġh entai
ĠTyp ically
Ġlo ot
.S prite
Fl ight
Ġw avelength
-s k
ĠEl le
_ exports
Ġ Ñı
ĠI H
izoph ren
Ġí ģ
_pr imary
Ġmo is
ĠB N
Ġsystem ic
Ġdifer entes
IN CT
Ġ'' ĊĊ
$ q
Widget Item
cl ide
$ file
L emma
/ table
ag rid
ĠMongo DB
int e
Ġapp rent
ÂŃ ing
.D b
ĠÃ Ĥ
ham mer
=' ';Ċ
Ġbro kers
it lement
sembl ies
E le
{ x
Ġlast name
< -
Ġfl atten
_b and
.R oot
.read FileSync
==== ==
.r x
? čĊ
Ġmetaph or
T i
con te
Ġdeb it
Ġcont empt
Cpp Type
æĶ ¯
Form Field
r atio
os opher
Ġimpl ant
P URE
Ġal ta
_man agement
Ġref ine
ĠCheck Box
ĠChar l
- version
cond itional
ven ues
Ġrif les
Ġoff spring
Ġmill ing
Ġshar ply
Ġunder water
( origin
_ Control
Ġ. $
Pl ugins
Ġdry ing
Ġillustr ates
- u
Ġveget arian
n pc
He art
; ',Ċ
com ma
te enth
as an
/s pec
_m oves
-m argin
Ġing en
³³ ³
Ġpro jet
Ġo tra
Ġbr as
. utc
Ġsle pt
= sub
ab ilit
post er
Ġs dk
ounc ill
Ġw d
Pre paredStatement
ĠDr um
( attribute
ĠEther net
ĉ DB
Cal ifornia
c ube
[ I
.C reated
ĠH M
Ġtr acing
Forms Module
- you
.c urrency
feed ing
Ġt body
L i
acc ion
n as
Ġtr ouver
N ONE
"} ,čĊ
Ġf tp
With Identifier
pol ate
File Info
Ġpurs ued
ĠĠĠĠčĊ ĠĠĠĠčĊ
DE SCRIPTION
} */Ċ
From Nib
Ġdecor ative
_S SL
(ch at
T LS
Ġsurpr ises
al culate
ĠS plash
( Configuration
ĠS EM
im son
/lib rary
< Double
. robot
³³³³ ³³³³
ĠCP F
ĠUnder standing
Ġcos metic
ĠX t
t ips
+ k
(" '
ĠP DT
W AR
.get Object
ĠTrad itional
.sl ug
ĠDi pl
=" ",
ĠFil ms
ĠAn im
.h elp
Ġemb assy
ĠBoot s
Ġb unk
-r isk
Ġp ci
Ġ/ \.
ĠI PT
Ġcrash ing
Ġip v
_ ke
ĠRES P
.Log Error
Ġinade quate
I on
ĠF ür
ric ula
Ġshould Be
al ready
']."
ĠSt uff
Dig ite
Ġtransl ator
_s prite
let al
Ġmai or
ĠSex e
th anks
ĠCom pleted
Ġgas oline
.attr s
bag ai
ĠOr ig
: ],
. locale
ĠR oma
ÃŃ f
Ġfav ored
Ġv ain
Ġsp oon
ĠJ ahren
Ġn ing
WW W
, float
_D ATABASE
Boot strap
ĠC BC
ĠCh unk
_int o
ĠK ol
Ġdef enses
ored Procedure
ball s
Text Changed
Ġsh aping
Ġ}} >
G ED
fa q
Ġoption ally
_D is
ĠSuccess ful
ĠC ensus
Ġinc arcer
_C ARD
Ġav iation
ĠG ym
Author ity
.B ean
sh ader
Not Exist
_Text Changed
ĠST OP
( team
" H
w g
Ġgr inder
Ġstri pe
Ġpres ervation
Cl aim
avers al
ware house
target s
Tr ust
Ġal lev
, www
ous se
_ch an
_S ize
system s
Ġobj ection
ĠK ane
Ġcor ros
ĠD SL
Ġu a
ĠM H
ĠStrateg ic
_t cp
Ġê° Ĵ
Ġborrow ed
ĠA ch
ĉ command
Ġg ps
le ston
iche ver
ĠU A
Ġassault ed
Ġspecial izes
ĉ search
Hot el
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ čĊ
ĠP itch
Ġ Ùģ
READ Y
Ġparent al
Ġg éné
Ġdonn ées
Ġdet ain
T ARGET
Ġprotagon ist
Ġclear Interval
ĠIcon Button
ĠGet All
Type Info
E H
âĢľ They
Ġ{ [
Ġg ag
Ġ Ú©
ĠD ropdown
.f ree
g one
im ens
Ġinst al
ĉc url
_C AN
ĠB one
ï¼ Ķ
ony ms
-g overnment
.binding Navigator
ĠD ans
ĠMc L
( en
>( _
ÐĴ Ñĭ
.* ;čĊ
= j
-c or
S on
.ToolStrip Item
- around
_X ML
end Date
Ġsl ack
Ġrot ated
Ġno qa
Ġc ottage
Ġencontr ar
_s kill
hou ette
! čĊ
. weather
Ġemphas ized
å® ¶
ĠÑģ пиÑģ
ĠComp iler
( android
ĠâĢ º
. turn
Ġsup pression
_c alls
Ġ* @
(str len
.h ex
ĠB ills
ĠR SA
Ï Ĥ
ĠEs cape
ement ia
Ġfront end
Ġp int
_ex c
zz o
[ ],Ċ
Ġ"',' "
. Environment
Ġafore mentioned
Ġend ure
prot otype
ther apy
ss i
D eg
_pl ugins
.user Info
Print er
ĠPRO GRAM
Ġru ins
Ġempir ical
Ġcraw l
ĠBo iler
- comment
.sub plot
_ et
Ġ'. ',
min or
ĠCustom s
Ġy aw
under line
ĠCom o
( ('
(m ean
Ġcha que
ĠBlock s
.r ad
ilib rium
Ġweb driver
Ġmel hor
d ana
ĠAb use
ĠSouth west
ĠP aren
PERT IES
ĉ IL
Ġscre am
v u
Ġin comes
Ġn im
Ġl ace
Ġcompens ate
Re verse
D at
_att ack
Ġn our
ach en
ce k
< Func
w ie
com pressed
-m atch
(" ")]Ċ
im ized
. orientation
.compare To
Ġmass aggi
Ġìľ Ħ
Ġel bow
Ġant ioxid
undred s
/ tools
ĠR OW
an mar
ĠW ow
_t icket
Program ming
Ġthe or
-re view
() )));Ċ
ĠRichard son
ĠP ocket
] []
am pp
_ health
ĠP OP
ĠNav al
Gu ess
Ġancest or
.Get All
.local Scale
ĠM apper
Ġaccum ulation
Ġsim ulated
ĠDr ivers
Ġd és
cur ring
Ġele phant
Ġadvert ised
Ġmail box
SH IFT
ĠMon ica
Ġan c
Ġward robe
Ing redients
Ġ|| čĊ
ipp y
Ġantibiot ics
av ings
(c x
ĠFerr ari
ĠAn imator
.d type
rem oved
order by
Ġc res
oc ê
Ġp ym
ĠCirc ular
@ index
ĠW arm
S ay
ĠAss istance
Ġcur tain
ĠMont e
IL ER
ĠC VE
ĠD uck
ĠAll ows
_f ire
ĠDer by
Ġre pos
Ġhttp Client
Ġpsych iat
Ġnow adays
Ġcaut ious
ĠComput ing
Ġcompletion Handler
ĠWel sh
ĠB EST
Ġstress ful
_P E
æĹ¥ æľŁ
ĠData Frame
ĉ Integer
_P rint
M oves
Ġtransform ing
.B atch
y ahoo
Position s
ze j
Ġno od
io res
_ *
Ġcl k
ĠF loyd
Ġh ap
font size
Ġn az
.not ification
ĠDep ression
Ġac ne
*** ĊĊ
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĊ
.cont ents
yn th
ĠStra ight
')}} ">
Ġbul b
R X
//---------------------------------------------------------------------------- --Ċ
Ġcom unic
ĠR N
-m edium
LE AN
= len
Phone Number
erv ations
Acc uracy
ĠAn notation
_key word
_h int
ĠAth ens
Ġassist ing
ĠH C
.Initial ize
')) )Ċ
up a
Ġsu iv
ĠI PC
"+
Ġtoken izer
Ġsovere ignty
ĠP ence
() ");Ċ
Ġpesso as
.G e
ĠIn cluded
Ġpag ina
Ġex posing
е ÑĪ
_SC RIPT
/$ ',
Th umbnail
× Ķ
webElement X
webElementX paths
press ure
ĠCur ry
_C P
OL UTION
ILE S
prot ect
ool a
Work space
{ };Ċ
ĠU NS
Ġsymp athy
ro ker
Ġrem odel
ĉc ell
Ġat op
.Full Name
Ġfa ut
ĠE asily
_d ynamic
Ġfr amed
Ġmot ive
è· ¯
s am
Ġmar ca
ĠText EditingController
Ġde structor
cre am
Ġr ude
ĠB old
ĠInd igenous
Ġg ens
Ġrel acion
(s ystem
ĠUIF ont
_char ge
UST ER
E V
.N amespace
Ġmer ger
Ġcal loc
g ang
Bad Request
Ġs per
-d esign
Ġâ ĩ
Ch an
Ġorgan ism
, )
= id
_pl ane
ĠC ases
elf ast
ĠLegisl ature
ĠF aker
Ġinv oking
- utils
(). '
.f ace
Ġguard ian
my Modal
Ġclip board
ĠAT M
Ġpe as
ĠS ylv
.c alc
ĠContact s
int Value
Ġmodify ing
ĠBar b
. loss
_per centage
Ask ed
(l st
ategor ical
- files
ĠRoman ia
.A c
Ġh ai
ĠF lying
Ġ ż
j p
ĠTr ainer
. arc
_de g
Ġtrace back
Or Fail
F LOW
. old
oy a
g mt
is empty
Ġvacc ination
Ġob solete
recogn ized
Ġru ined
ĠRe in
ĠTr acking
xf b
ا ÛĮ
Ġvæ re
Ġbr yster
ĠIT S
Ġdest iny
Ġsw ear
Ġred es
Ġcl f
Ġfl ipped
ĉ head
Bl uetooth
ĠOver rides
: Boolean
_ =
_l r
sp awn
: index
VAL UES
is key
? ");Ċ
.syn thetic
ĠCheck ing
struct ures
ip ing
Ġvoc als
- Up
ĠManufact urers
ĠMar riage
代 çłģ
Ġgar ner
_C lient
par allel
RI END
Ġvine gar
seg ue
J B
Ġcontact ing
ĠCar roll
Ġout reach
t ensor
_var iant
Ġthe at
lic able
{ |
t iny
_ letter
Ġp encil
HeadersHeight SizeMode
ilt ro
.auto configure
.d rag
.use State
ĠB MI
h int
Com pile
* \
en ary
Ġl vl
.C ache
+ ="
_t v
ruit ment
Ġf read
Art icles
f ila
Ġpack aged
âĺ Ĩ
AT HER
ĠPl anned
s cheme
Ġdi ary
Ġoff enses
/
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ
Progress HUD
ĠG or
.get Title
Ġmock ed
ĠT ory
Ġ") ";Ċ
# g
Ġli ed
Ġs vc
_g ui
ENT RY
Ġserv icio
mouse over
SA CTION
ãĤ ³
Ġre ife
lect ric
_c reation
Re ality
(' +
product Id
Sup plier
- Le
.re po
uck ing
_S tr
ĠRel ay
и и
Ġp erv
Ch icago
Ġmais on
Ġst icker
_p ressed
Sw ap
ĠI G
Ġsuscept ible
oc ado
Ġg in
ex e
ighbor hood
) `
Ġdiagram s
Ġinflamm atory
Ġt é
ĠPop up
Ġapp reh
ĠPort folio
Ġw ors
.en ums
ег о
/ Button
ĠPh antom
Ġ# :
Ġd ik
p ager
ft ar
Ġorgan izer
( children
ĠMun ich
Ġstr ang
ĠR W
ãĤ ¿
M ah
pt ide
Ġlearn s
Ġredu ctions
ĠRe placement
OT S
al con
(p arts
b ash
ĠCit izen
į° ìĿ´
ĠHttp Servlet
_SC HEMA
me ans
Ġhorr ific
VER IFY
ĠDC HECK
Ġ( /
.b efore
.text ure
get Mock
ĠS ense
Ins pector
Text Node
( AL
.get Node
Ġbo yc
ĠBris bane
Ġbatt ling
ĉt x
Ġlobby ing
b uilt
ĠSEE K
Ġrandom ized
gn i
_cl usters
_id entity
Ġcard iac
Ġnew User
.V ideo
du it
] init
At l
) value
Text Utils
Ġе Ñģли
Com pute
= ('
ĉĉ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
Ġar ter
ĠT WO
')) ,
ĠD IV
Ġprivile ged
ĠPartners hip
ĠHe ather
b ay
atisf ied
inst agram
_S end
ĠAS F
$ name
Ġbo o
Ġdé f
_F ield
ĠE du
c andidate
r uby
Ġaccum ulate
(Int Ptr
Ġbusiness man
Ġeconom ically
ĠR ings
ĠInput s
¹ Ħ
ac ie
ĠAl arm
ĠLog out
.se quence
ĠVi enna
op r
Ġdr ums
= config
qu i
Ġdat o
Ġpoly mer
ĠCh anged
Web Request
ĠAdv ance
Ġunder going
.Con sole
Ġcurrent Node
ĠW ool
Ġp ágina
REG ISTER
Ġs aga
ĠY ORK
aman ho
å® Į
ĠBund es
ĠDialog Interface
geo is
unc iation
? $
.Assert ions
Ġse ated
ĠSp y
P ose
" C
Ġah ora
ĠÑĦай л
Ġë³ Ģ
Ġwar p
Pro jection
ĠSing les
ĠAd vertising
L inux
ust y
Ġpen al
US IC
od ia
.net beans
ĠU g
ĠB rent
- log
/c ategory
ĠCustom ize
ire n
ï¼ļ
in ars
Ġ( ++
Go ing
EX EC
(m esh
Ġper imeter
C ls
ce iving
m ensaje
() )){Ċ
Ġpro state
_b uy
ĠRo of
.R eturn
Ġmar riages
_th umb
ç ¾
௠į
Text ures
( TEXT
short cut
Transform er
AT IC
ĠSnow den
scri bers
mark ed
ĠâĨ ij
h ora
OP ER
ĠF Y
ĠAuth entic
Ġaud i
ram er
ĠLiter ature
Ġitem Id
.A tt
(c nt
ĠK S
-l inux
ĠPart icipant
ĠCru ise
it ulo
ust rial
Ġcl ase
Ġ= $
_d ates
current Page
ix a
ex act
Ġt sl
.S o
/d ocument
h art
_ID LE
{} .
y et
I ron
ĠTh rones
s nd
\x a
Ġbe verages
_trans port
Ġfo il
Ġt asting
Ġgo ed
M emo
Ġnit rogen
.M ember
.f lat
Ġill um
min ent
.z oom
ĠP tr
oc io
ĠConsult ing
ĠC one
ĉ items
ĠL M
Ġo auth
ĠProgram me
och ond
( selector
Ġwater proof
ĠMer kel
Ġsuff ers
Ġnp m
è± ¡
ĠLand ing
ĠL AN
ĉĉĉĉĉĉ čĊ
/ is
Ġsé rie
ĠG UILayout
g ive
_C Y
B rowse
.m ultiply
=" $(
us o
-p arent
.M ath
.number Of
Ġt ienen
Ġres ent
Ġpitch ing
"] ),Ċ
. Utilities
Ġmultip lication
: type
Ġp print
ian i
åĪ Ļ
Ġlaunch er
Ġrug by
çİ °
Ċ ĉĉĉĊ
h id
Ang les
Ġgood bye
Ġinput Stream
.w atch
G oods
ĠS ays
> F
ĠSt ick
Ġc erc
ĠS lee
ĉĉ ĠĠĠĠĠĠĠĠ
< Image
Ġè® ¾
- editor
pie ces
ĠD rama
Ġ// ////////////////
ĠT asks
AR C
g ateway
.get cwd
.M etadata
Ġguess ing
åľ° åĿĢ
Ġsm arter
ĠGet Enumerator
Ġe fter
/ operators
ĠGL float
Ġf ør
Ġop aque
ä¿Ŀ åŃĺ
Sp read
SY STEM
Ġinv ersion
ĠBasket ball
Ġsim ulations
Ġden ies
Ġa vez
_list ener
Ġenh ancing
ĠMy th
ĠL akers
_M D
Nd Ex
D ATABASE
Ġt á»
ar th
[ left
Ġcontest s
st ile
(K ERN
_f c
_p m
Ġpres idents
Ġhospital ity
Ġfade In
RO PERTY
_m aps
ĠDefinition s
Ġassess ing
Ġus ar
Ġquant itative
mo z
Be autiful
[ ((
b ons
f requency
Cont ain
Ġpuzz les
ĠCast ro
Ġv illa
Ġkind ly
Font Awesome
ern a
epoch s
_dat as
ĉ ip
.p adding
ĠCont est
Ġed itions
Ġdispro portion
ĠI CO
Ġcome back
= value
ri ad
-s ort
Sub mitted
(n etwork
ĠC el
Ġinstall ment
l ashes
.List View
ĠV atican
(Media Type
IV ED
reach able
: Is
ĠC ITY
äº ¬
ĠHelp ful
Ġba ÅŁ
% čĊ
Ġpsych iatric
Ġrec ycled
FORM AT
ĠG row
b ine
G it
.s s
ĠWe apons
ĠSt y
_ arrow
* self
ire ment
Ġdeg li
App Delegate
_b anner
Ġcoordin ated
ĠWeb cam
Ġcelebr ations
. act
******************************** ****************
( show
Ġweek day
Ġconc erts
ол н
cl in
Ġcr on
ĠN im
.set Vertical
ĠEll en
س ت
ĠS AM
E ff
g z
ste am
Ġant ique
ph ysical
ĠForm Data
.set ter
ĠPO INT
B on
Ġflav our
erv ention
_ENT ITY
ĉ ĠĠĠĠĠĠĠĠĠĠĠĠ
Ġintr insic
Ġæ İ
append To
aram el
) ])
ĠRecomm end
) m
OutOf Range
Ġkn ight
Ġsat ellites
ĠTit ans
Ġweigh ed
ĠD ana
e ase
Ġs ip
S IM
ĠDevelop ers
mal ink
/ check
_P LL
n ung
Ġdry er
= A
.d w
_S QL
Ġsub plot
D ROP
Ġprot otypes
Ġhour ly
display Name
Ġas i
ĠViol ence
Ġastr onaut
Ġdat atype
Ġinformation al
Ġinvestig ative
etermin ed
ren al
; '>
ĉc ol
V G
_ boolean
re cent
Ġ* )ĊĊ
ĠRain bow
om men
Ġl ur
Ġopp ression
(", ");Ċ
ĠFac ility
DEF INED
Ġne on
Ġoff ender
AF P
ĠClean ing
[] ):
Ġund ocumented
.Re positories
ĠG uitar
аÑģÑģ ив
Sk ills
Ġtestim on
rypt ography
ĠAm ber
ĠSt alin
Ġl one
Ġap enas
Ġdies es
ĠAr duino
è½ ¬
== -
_A ct
Ġc oded
âĸ ł
amb urger
-link s
Ġarm our
.H igh
get Content
st ag
Ġhe ck
ĠìĹ Ĩ
ĠMc Connell
ĠCon cert
ĠAl loc
ä re
.replace All
Ġpart itions
rot t
ĠF le
_T REE
reason able
ĠReport ing
Ġbillion aire
s cores
min s
- eye
M ORE
ab ort
ĠSW T
Ġin verted
ĠTe achers
; n
Ġast ro
н ов
ани ÑĨ
product o
c ountries
ĠO wen
Ġcont amination
Ġv ibe
ĠEll i
.s cript
ĠOl ive
D MA
v ier
: semicolon
-m odule
gress ive
ag u
_ players
Ġresult ados
start ed
scroll Top
==== =
Ġweigh ing
Ġ[[ [
z ahl
( NS
ĠAssert ion
le ague
.setText Color
ĉ Message
Ġmom s
_A F
. wh
AL S
Ġaut re
] ĊĊĊĊ
.op acity
ĠBudd hist
Ġde af
ĠOrgan isation
(G lobal
ens ch
Ġhead ache
ĠAli en
_in ode
ĠSt ark
Ġæ ī
-l nd
ore f
_fe at
Ġpedest rian
Ġnom inal
Ġbal loon
Ġspr ites
Prototype Of
ĠA post
ĠF EATURE
O H
Ġre cess
ĠDon na
con sumer
$ GLOBALS
ĠG IF
- frame
In icio
Ġpass ages
Date String
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ
.by te
B ug
initial izer
p kt
od ium
ĠD ER
. ops
ler i
Ġgift ed
Ġdet ach
ter rain
elt ers
ãģ ı
. loader
ĠN GO
str ncmp
K h
(font Size
ro cket
Ġpreced ent
ĠAur ora
ĠEx periment
is phere
Enc oded
ĠâĢĵ ĊĊ
Ġpy ramid
ĠAnn iversary
of il
ë Ł
( plugin
C oeff
Ġcooper ate
Ġpredomin antly
IS M
Ph rase
_DEF INE
Fl ip
AMIL Y
ĠMark ets
ĠStream Reader
ĠComb ine
Ġmanus cript
z za
, tp
Wh atever
IT ICAL
ighb our
Data Provider
.Text ure
priv acy
.S DK
Ġre charge
Ġc pp
ĠC FG
(h older
(p y
m ot
Ġsav oir
ĠR osa
ĠPC s
Ġí Ļ
.her oku
Ġf ren
ĠR iley
ag ate
Ġs ond
.x lsx
Ġh acked
st ad
G i
Ġsan ity
ĠSql DataAdapter
... ",
ĠP ussy
Ġ ****************
Ġhass le
_P ARENT
ĠU AE
Ġbegin ners
( Client
Ġstatist ically
.h our
ed elta
Ġtr action
uel ve
ar at
Ġsa una
IN VALID
Ġindict ment
AL LE
Ġdiss ent
ĠTyp ography
Ġintention al
s it
ĠAn imals
Ġcoun tryside
Ġu art
} \"
Ġseam less
¾ 示
Ġaut os
Ġ"' ";Ċ
Fl ush
ANN OT
Ġal gebra
ass oc
ĠW aters
Ġprepar ations
ron ym
[, ]
S ans
Ġarm ies
ipe g
Ġcream y
. art
et re
ĠAn imated
Ġun pleasant
eme an
g reat
i Äħ
ĠEar lier
Ġch ic
Ġpres erving
(ex ec
ĠInvest igation
ĉG PIO
Ġrig orous
ij o
= num
Ġtool Strip
) set
+" &
ĠAcc eler
Ġdevelopment al
is posable
Ġflaw ed
re ne
Up dating
Ġwatch dog
Ġden ominator
Ġsubur bs
Ġ... )
Ġconv ictions
c losure
.I P
Ġtransl ates
.sw t
.Tr ace
Ġmet tre
.is Enabled
ĠEffect ive
.to Int
Ġen chant
Ġst unned
Ġpo i
/ code
ad m
.datab inding
ĠL orem
________________________________ ________________________________
Ġled ger
Ġcar a
ĠG ir
Ġwa its
Un o
Ġc wd
è¾ ij
ĠT Result
Ġre jo
Ġem itted
ĠWest minster
ä¸Ģ 个
ne k
_T is
Ġen act
ĉ with
org ia
Ġj ue
Per form
SP ATH
.top ic
ĠD aten
Ạ§
Ġsit io
_M M
" So
b ial
Ġsc oped
Re quires
ĠT OTAL
ĠCh ancellor
( contents
Ġste alth
dev ices
-p ass
ili h
ĠMal colm
ĠDep ot
Ġconfig ur
a ussian
_con straint
в еÑĤ
G RA
ĠR ates
.dataGridView TextBoxColumn
ĠNob el
it ics
Ġignor ant
ĠReport er
ĠEb ola
ĠSh ock
_re lation
ĠNin ja
) c
Ġt icker
.is Checked
ĠSup pliers
ĠRap id
Level s
âĤ¬ âĦ¢
ĉ queue
Ġch op
ĠUn ix
re ject
-c alendar
(s ort
è ne
erc icio
Ġh ect
CALL TYPE
rou pon
Ġrent als
auth ors
{ name
ĠF IFO
Ġl assen
ĠN ous
Ġsn apped
Ġfert ility
" log
click ed
Ġplant ing
Ġg b
/ output
PE AT
Ġc ategoria
Ġb ach
Prof essor
in th
"] čĊ
Rec order
ser de
ĠTrans mission
tr ad
Ġtur bo
_VER TEX
\ Event
il ver
Ġbod ily
ĠS ources
Ġkill ings
.xr TableCell
Ġfold ed
/ legal
un er
ĠR ifle
ĠM IDI
_Selected IndexChanged
.Size Type
ĠWeb Socket
Ġsele ccion
S and
ot ros
Ġenv ision
/ etc
ĠMel issa
Sp ot
но е
_ ARM
At tempt
ĠB I
ãģ Ķ
ĠD U
Ġback lash
str ide
/ classes
Ġtext Color
_st aff
ob lin
agent a
.c ollections
ill age
' čĊčĊ
fl atten
_s ales
_M ASTER
T W
_d a
P itch
ph ies
Ġz ombies
ĠV ERY
ĠPharm acy
Ġprogress Bar
Ġhas htag
S idebar
@ stop
(p c
ол ж
MA KE
ĠCor on
Ġkv inner
ĠM aid
b ob
.title Label
Ġsuccess es
ĠDemocr acy
ĠSurg ery
Ġcou gar
Ġcur so
Ġl oro
ist ency
Sen ior
æ k
ĠA AA
ĠBO OK
к о
W STR
Ġ*/ ,Ċ
oy al
.v ector
ĠS PEC
SS F
Ġcomp uls
ĠAppe als
ĠW inston
ĠMock ito
con trib
. available
entity Manager
ari as
_s ale
_r s
Ġdec oding
Ġloc ator
ol ith
Ġk ol
Ġasc ii
ĠR ut
/ interface
ĉĉĉĉĉĉ ĠĠĠ
ĠN umer
.fl ip
-d el
Ġbol ster
on omic
Ġz m
L G
Find By
Ġadapt ive
lo o
Ġv ue
(re verse
_c anvas
. roles
ific ado
ven ient
" As
ĠEn tr
al igned
Ġbere its
/// ĊĊ
.g wt
. employee
_cl i
Ġanticip ate
éĻ IJ
Ġp ik
Ġmush rooms
(t t
Ġo ma
ĠSan chez
_g oogle
. Valid
ĠFile Name
iv ative
k ed
-w ar
Ġm aturity
и д
Ġmin er
Reduc ers
ĠLat Lng
_ST D
D igits
Cal c
-up load
Ġhand ic
ี à¹Ī
egr ated
ĠST M
C lients
ĠTur bo
SY NC
Ġphotograph ers
. Out
.char acter
B UILD
.un lock
Ġar ises
ĠCommand s
(" ");čĊ
_F ORE
; ',
+" '
. Images
") {
ĠM eyer
Ġneg atively
ĠD LL
Ġex e
Ġdef iciency
Ġwild ly
-s witch
con struction
Ġexception ally
ĠL iz
/j ava
Ġtheir s
ĠCont emporary
l is
.fill Rect
ĠN FC
Ġre he
(num bers
Ġr aster
Ġfig uring
Ġshow c
ĠJ ill
Ġarc ade
ĠConstruct s
md l
(' |
Ġident ifiers
Ġst ellar
( Connection
Ġ" {{
y or
(m ysqli
Ġdo ve
Of Birth
.dis connect
_h i
Ġzw ischen
ĠGr und
i ros
_A rray
.on click
ans om
An swers
ĉ remove
F a
Ġhur ry
-in f
Ġget Class
ĠReg ulation
ĠFLAG S
m isc
K en
_ heading
G Hz
- entry
Ġbi ography
S ig
-m f
Watch er
âĢľ A
} px
Ġsp icy
_s q
L ost
(tr ack
а ли
Desc ending
< bits
qu ine
ĠAdv oc
_S N
ĠHann ah
PO P
Ġem itter
Ġc yn
ĠC AD
? ).
/ set
ĠS ister
ĠEnd point
Ġmen or
Ġinter p
r k
id le
Ġout fits
. vertex
Ġc lic
ARE N
Ġpost ure
ĠOpport unity
v x
ĠFor bes
.D irection
Ġres ide
Ġremember ing
nest y
Auto resizing
pro viders
ĠA H
Ġhur ting
ĠL ily
eval uate
lij k
p apers
ĠSm ash
ĠL AST
Ġwell s
w asher
_RO LE
ĠD anger
* ((
_re pository
ĠRes olve
ĠRoom s
_R G
ĠQ T
o op
ĠHe ap
Ġslow ing
Ġgrat uite
_c atalog
Ġpol ynomial
L y
pc s
F ox
ĠC yr
Ġdim in
/ month
S alt
Ġh ind
.P ER
For um
c en
_p ol
íĺ ¸
Ġin ser
( ~
@ test
ĠGold man
Ġupload ing
F c
Ġkom mer
Ġm itt
_log ged
Ġbu cks
-l ayer
) };Ċ
ĠO M
Ġv eg
col our
Ġоб ÑĬ
Std String
_ que
ĠT ian
Ġspecial ize
и п
Ġк л
tr ial
- edge
Ġm ars
OG LE
Ġempath y
ĠB om
Ġcoll isions
Ġcart e
ĠTe il
ĠM PL
Ġporn ô
Ġa irlines
A ws
N s
ĠSp awn
( use
é» ĺ认
Ġy acc
st or
Ġconf ess
Ġpe que
r age
? "Ċ
/dat atables
ĠSh ower
__ /
Ġcryst als
Ġbus car
ĠH aus
iz ação
_ entities
ķ Į
ļ Į
x cc
v irt
-che vron
( Result
c ake
COM E
Ġprohib it
ĠCh ess
Ġbe aucoup
ĠÑĩ ÑĤо
R UN
ĠI K
ó ÅĤ
_ Update
Ġsle ek
ĠSpec ify
_c redentials
ÅŁ t
ĠUser Name
ĉ Value
Ġarray List
Ġex changed
ips is
.re lated
ĠSe ite
_B AR
ĠL em
ĠW ATCH
ĠC lients
Ġ. *
ĠEar l
-re port
Ġforeign ers
Ġstrengthen ing
ĉ Description
(g o
.tool bar
Ġcalcul ates
ĉs ource
Ġcz as
Ġre cl
ab o
Ġlocal host
Ġ^ {Ċ
.P op
ĠDes igned
\ Abstract
H old
ĠGuid elines
ipl ine
Ġc aching
.Re ader
_ext ernal
.str ptime
ĠWeek end
-M ar
ĠBe i
Ġ{* }
ĠR ud
Ġexpl or
ĠBou levard
C ash
Ġprep ares
Ġserial ization
ew ater
Ġad c
: ĊĊĊĊĊĊ
Re fer
Ġsc anned
} }ĊĊ
ĠF ul
Ġtour ing
ãĥĥ ãĤ¯
> ((
sur vey
Ġí ĺ
... ')Ċ
ĠDiv ider
os l
_C ANCEL
_pre pare
st in
ĠHe ath
.Primary Key
ĠâĨ IJ
ĠLocal DateTime
Ġcooper ative
L earning
.en queue
Ġgo og
ĠReg ression
im ates
Ġvoy eur
ĠDr ink
pl ug
Ġl ender
man a
Ġperson nes
yp se
Ġun link
ĠRav ens
Ġhur d
Ġperiod ically
ARG S
ĠG H
char acters
... "ĊĊ
- establish
Ġd n
( condition
ĠGr avity
Ġest as
_f ocus
Creat ure
(s ite
Ġc arr
ĠR L
ĠR I
ĠM oto
AS F
ĠLuck ily
ĉ Route
Ġent ropy
(" ,"
Col lect
( contact
ĠFlo rence
Ġpremium s
Ġlif ecycle
Ġb ans
x ef
Web Kit
ĠFlo ating
Ġcos a
Spec ific
ĠLo ans
b read
Ġdes criptors
Ġ{ :.
TH READ
ĠT rent
Ġsc op
Q A
ĠAnt ar
p el
_d ifference
_ch anges
(... )
ĠR otation
ĠLG PL
ĠJ UST
(T ask
_sub set
ĠTR ANS
åĬ Ľ
ĠSc out
-p opup
Ġsm oked
_C lass
Ġturn over
br akk
ĠRock y
t as
.Regular Expressions
ĠElli ott
ĠSp inner
DU CTION
Ġlib re
Ġmol to
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ
ĠF TP
m peg
(f eatures
Ġb ald
ĠV id
Ġsh outing
L int
Ġsock ets
Ġpro w
Ġnouvel le
isc ard
ĠS ponsor
Ġconsult a
)) );
Ind ian
ĠR aspberry
Ġteam mate
ĠJ WT
ĠGh ana
Ġc akes
pr imer
form a
erg arten
_M anager
Ġpre season
G AME
| "
ĠBro ck
Ġoccup y
Ġdecor ations
á nd
Ġc ot
Ġpar an
D isk
rem ain
> ?
Str ong
Ġfr ance
ĠE ra
-c r
.Buffer edReader
ĠParad ise
ĠV AT
ĠAnd ers
Ġlim b
amp oo
Ġimper ative
UT ILITY
ĠRec ognition
Ġragaz ze
Ġpop s
yp ress
Ġemb argo
// {Ċ
Ġsy ll
P TR
åŃĺ åľ¨
Ġdid nt
Mail er
Ġacad emics
ĠFra uen
ne ider
- rel
Ġrain bow
( In
Ġslic ed
============ =Ċ
(s end
NSMutable Dictionary
v os
(p ackage
Ġord inance
view er
ĠSant os
-s elling
Ġgo v
ett le
Ġfound ers
Ġw aking
sl ashes
-p ound
re cht
ا ت
.on Click
Ġn ord
st änd
_ when
UT ERS
ic c
Ġcaps ule
ĠW id
M arc
ภ¸
ro red
UG E
LO UD
ĠAud it
ip ients
op ian
ĠS ue
Ġwur den
.H elpers
Ġf actions
[ np
-th an
Ġre co
Ġk as
Ġcmd s
/n etwork
xb f
get Color
Ġbi ased
ĠL ak
D atas
vent s
Ġë ²
_P S
. Validate
Inv oker
Ġne uen
Ġju venile
V ISION
Ġdev ote
Ġlin ha
Ġdiscount ed
\ Config
Ġworth while
Ġskin ny
ĠC ourses
le ys
ĠMort gage
K evin
Ġannounc es
]) *
res ervation
Ġæķ °
Ġprejud ice
ĠString Comparison
Ġbe ard
-w in
ĠS ão
ĉ ms
j al
ĠE arn
_ ports
ĠN ombre
_C OR
ĠB UILD
.s ound
Y ellow
Ġlineback er
Ġchar itable
j ug
_NON NULL
ĠD ental
"> ${
ĉm atch
R ussian
Ġvers ch
Ġp inned
Ġadopt ing
Options Menu
P ag
Ġpair ing
Ġt read
erc ises
ĠSp read
) i
ĠB AD
_t f
UI ImageView
pop ulate
b ab
ĠÏ ĥ
[ ++
Ġopi oid
Ġ## Ċ
d type
ĠStart s
('/ ')
Ġperson als
-mark et
Ġredund ant
ĠEss ential
Ġscrap y
Ġи м
a cl
Ġcre ar
ĠB end
Ġrel ieve
- room
w ife
Ġv Ãł
ĠQ Point
Ġqu asi
Ġmethod Name
\x c
ĠPer u
/ The
. orm
Ġv iz
/p df
Loc ated
Ġconfront ation
ĠChampionship s
Ġhyp ert
Ġd j
ĠUser Info
ĠåĪ Ľå»º
\x b
(s im
Ġ== Ċ
Ġst aging
Ġdr astically
åŃ ¦
l ords
. less
вед иÑĤе
ĠB ucket
ĠM am
. term
_p i
c zy
.p ub
prec io
ĠV irt
Ġrom an
it at
L ex
_inf os
Ä °
. other
VE LO
Ġp onder
Ġh anno
( Page
do i
Ġpol ite
Ġprogram mer
D ies
$ d
Ġrep lication
add Column
fr ican
Ġl eng
be er
o it
Ġw asting
yl im
me asure
N eg
Ġpart ie
.con sole
ĠGu inea
TE L
_f act
.ch unk
Ġl ent
Ġall er
Ġठķ
_id le
Ġad missions
JSON Array
Ġv ibration
.h elpers
å¤ ĸ
Ġh en
j ohn
Ġì ĥĿ
Ġjud gement
Ġge en
ter ra
^ {
ĠI z
Ġc â
inst ances
Ġthreat ens
Ġm üssen
Kind OfClass
Ġstoryt elling
_d emo
ri as
Priv acy
h ift
ĠY i
es or
íķ ł
ens itivity
.W riter
ภĤ
D istrict
.get JSONObject
Im pro
(get Resources
ĠS PELL
rodu ce
Ġslow ed
Ġlin ewidth
Ġhonest y
ĠCo ord
ĠF ork
ĠDispatch Queue
ĠCl iff
ĠW iring
_TIM ESTAMP
oll ah
av oid
++ ];Ċ
sem antic
-c ss
Ġv eto
ĠM err
Ġlegisl ators
CEE DED
Ġquestion naire
ĠP ills
Cal culate
(c ore
' e
Ġdis like
ĠPre ferences
_EX TERNAL
è° ĥ
Ġd odge
æľį åĬ¡
.n ames
.draw Image
_p rom
uck land
Ġ<$ >
ı z
/s ite
é¡ ¹
rop he
Ġcomp elled
Ġl aptops
Ġun i
C LOSE
Ġcasual ties
ĠUn iform
Term inal
. ","
D AT
(T reeNode
ĠGand hi
(st mt
AX B
* M
Ġumb rella
an imal
Ġgr pc
Ġwhere by
Ġfloat s
ĉ arg
Ġdb g
Ġexceed ing
Event Type
.SaveChanges Async
Ġ{ {{
Ġow ed
ahren heit
Ġì §
Ġequ ipo
ur ai
Ġid ol
] ")Ċ
_m ajor
Ġentire ty
inger print
ç os
/ account
ĉ right
urs os
ĠE DT
_INS ERT
Ġsh ining
Ġ< :
Edge Insets
Ġcolon ies
. IM
ĉĠ ĉ
RO AD
CC CC
pl acing
Ġget Activity
em acs
' %(
.click ed
ĠTh em
is ia
Bus car
.re name
Ġo ath
Ġafter ward
ĠU FO
AP S
ĠJackson ville
.s ome
Conf irmed
.s can
ig Integer
Decor ator
sh ield
ress ive
.d id
请 è¾ĵåħ¥
Ġsh utter
D am
Ġparent ing
ey ed
$ item
-de velop
Ġextract s
Ġdecentral ized
ĠEl sa
_sp in
]) +
-in itial
Ġmult itude
Ġsens ory
ĠMODE L
Ġsafeg uard
ì ¹
Ġhunt ers
ĠT iny
IN O
decor ate
ĠNo Such
H o
( Response
Ġr uler
ĉ short
Ġc aster
Ġclient Id
Ġp db
ëı Ħ
it ic
ĠGame State
Ġnew Item
)ĊĊ ĊĊĊĊ
ou is
n oc
.BL ACK
_V ECTOR
----------
Ġexam ines
ĉb lock
Ġadd on
Ġsurvey ed
ĠList ener
Ġfront ier
Ġlack ed
J UST
ĠÑį ÑĤ
Ġt int
ĠMyst ery
date Time
ĠT utorial
Ġfull Name
ĠDrag ons
_FILE S
ĠPrint Writer
Ġbe et
ĠL adies
_t ip
ĠJah re
or ama
Ġins ulation
( Environment
_ ast
ber ger
len a
ogene ous
_MON TH
-p resent
Ġframework s
Q Q
PHP Excel
Ġcount down
ĠF W
(cl uster
: c
Ġok http
ob serve
[ player
. he
ĠPan ama
A ustralia
Ġ ounces
Ġaggress ively
Ġwarn s
Ġcustom ization
_ Query
w is
Ġin val
A FF
(c amera
W ir
Ġnegot iation
ĉ O
Ġrespect ful
Ġdiamond s
' av
appro x
/d r
Ġgr abs
Ġaccom panies
con straint
Ġre z
( region
Ġb ait
termin ate
ĠBelg ian
ass ium
Ġ] čĊ
System s
oused own
.b us
Set Value
ĠPre p
Ġconvenient ly
.m id
case cmp
Num ero
d aily
ĠC oding
( destination
# $
uj Äħ
Ġemerg ence
_p ara
_IN CLUDE
# :
Ġrecogn izing
Ġf ug
"} },Ċ
Ġbuild ers
ĠTerr itory
Ġinher ently
Ġder iving
. eth
ĠD inner
.set ObjectName
Ġcelebr ates
Ġque ues
ĠMark s
AL TER
ĠD art
p oke
_CH ANGED
Ġpa ar
l ies
.v olley
ĠMean ing
ĠOFF SET
ens ing
Ġfr Ã¥n
.local Storage
Ġë ©
({ });Ċ
dec oder
Ġrou lette
Ġdis mant
I r
Ġins urg
Ġ'' :Ċ
.âĢĿ Ċ
Ġbrun ette
. assets
_NET WORK
ภĬ
n ym
_S ource
\ Tests
Es cape
c rypt
.X ML
Ġsound ing
op code
Ġclass ify
Ġembarrass ed
ĠLOG IN
Ġresid ue
ĠNE ED
.deep Equal
per c
-c al
Red is
T ra
(_ )
ask ets
grad ation
Ġenzym e
ĠStephan ie
.In valid
'] ?>
Ġdispl aced
Ġelement os
(d uration
row Count
ĠF Star
let a
/p opper
Ġstat o
Ġperform er
Ġdiscipl ines
ĠF ully
icular ly
Ġer sten
ĠPoly gon
Ġdisc iples
.is dir
Ġtest ify
_S R
prising ly
ĠGL int
Ġw iped
Ġcar ved
ĠD ish
.heroku app
st itial
ĠM ATCH
cl air
ĠDay ton
/ ')Ċ
IDD LE
Ġinf ra
Ġl ively
Ġde ps
Ġ[... ]
ĉĉĉĉĉĉĉĉ ĉĉĉĉĉĉĉĉĉ
ĠL on
Ex tras
Trans ient
в еÑĢ
/m odule
Ġend urance
_t ex
Ġ" ~/
_y label
Ġob ed
/g ame
ops y
Ġfirst name
.for ce
Ġm art
\ Client
Ġlegit im
.fl atten
" ',
osex ual
Ġj ours
M H
ex pires
Ġst yl
.int erval
K nown
Ġf ollower
Ġd alla
pir y
_s sl
ish list
ĠRe y
Ġsuper market
Ob viously
- enter
Ġprob abilities
ĠH V
ĠCin ema
Ġc types
ĠB CM
_T AC
; a
.button s
Ġretrie ving
ilar ity
Ġundert aking
ĉ stack
Ġk el
ĠX en
( phi
Ġtough er
ĠS eller
c aps
ĠEm ber
ĠCh in
Ġla ughs
Con version
.list ener
& B
Ġparad igm
Ġj unction
$/ ,Ċ
[ o
ĠConserv atives
Ï Ģ
l ates
_ Exception
Ġmeille ur
Ġstr aps
quis ites
ĉs n
Ġmass acre
ott es
_g reen
Tit les
// --------------------------------
ĠReg ulations
ar l
_short code
ĠDraw er
Ġpar ole
Ġwild erness
is son
ĠA FTER
C redential
Block ing
ĠHT C
S in
(a uthor
Ġcort ex
') {čĊ
ï¼ī ï¼Į
Ġdump ed
ĠSh ut
ĠKey Event
ĉ Player
.get Player
Ġign ores
toggle Class
ĠEx clusive
> ();
.get P
any e
Ġneur on
if old
ĠK nown
Bit coin
Any way
ay ette
Ġ' ['
Ãł nh
m gr
Ġcor related
Ġn ause
Ġment ality
has Many
ĠF G
amp ie
IT U
F s
.S p
_b etween
Dep endencies
ou g
Place holder
= text
ĠMan aging
ocal ypse
åĮ Ĺ
_m ag
f ld
â ij
C AM
ĠHelp ers
Ġd ost
/ out
Ġassass ination
.get Image
ĠKenn y
.' )ĊĊ
){ //
ĠR anger
Ġg ek
Ġsinc ere
< Value
ĠD OT
ĠVict ory
Ġleg ends
Ġpr isons
(ex pression
ĠR abbit
_s entence
Ġbit es
Ġon Failure
ĠâĪ Ī
K im
.g ender
ĠÎ »
Ġ[ .
"] );
land ing
-d igit
TE MP
ĉ entry
Ġstrt ok
Ġdesc endants
um no
Ġlean ing
Ġspecific s
q n
ĠSp art
Ġpor r
EDIATE K
Ġse per
' aut
ĠSTE P
ĠBorder Layout
Ġret ros
ĠSalv ador
ĠEN GINE
x dc
T weet
v k
Ġì ²
] <<
het ics
c oding
Re ach
.re q
gu ide
.s cope
sh irt
rog ate
SET TING
ĠProte in
Ġe ing
. EMPTY
.d f
Ġclear er
Ġc rossover
ĠTo ys
Ġco ated
.M onth
ĠAtt ach
/ run
.t abs
Ġogs Ã¥
B rown
.D ATE
Ġf os
åŃŠ符
W ood
-th ree
her ited
Ġ rop
( ac
Ġembod iment
ĠKenn eth
Ġcan non
Ġb idding
čĊ
.get Resources
Ġl ump
_const s
( ext
ĉd ir
â Ŀ
Ġpadding Top
Ġobs ession
Ġb anning
ĠApp Module
Ġpart isan
Ġcatalog ue
Ġmin ors
Ġpitch es
we ep
Ġundert ake
Ġthem ed
aud it
.scroll Top
Ġr er
Ġsympt om
Ġopen ings
.block s
open id
Ġas sh
-s ave
ĠP ig
Ġreg ain
Ġin icial
/f avicon
ĉ exp
Ġsp ices
isk a
claim s
m ak
definition s
Ġcorrespond ent
ĠCann abis
__ ,Ċ
ĠL ucky
ĠGa ussian
ĠN early
C AD
'] ]Ċ
Ġadequ ately
ĠT ITLE
constitution al
-m m
_ override
Ġbl as
.ready State
Ġremin is
Ġrein forced
ĠColl abor
Ġdecor ating
Ġb achelor
ERRU PT
Ġup right
ip ation
ĠNob le
Ġvalue ForKey
Ġset Loading
.I gnore
å ģ
G lobals
ĠM ent
AS SES
Ġlim bs
ĠH UD
inc i
. iv
ĠQ ModelIndex
F use
Ġped al
_F REQ
( verbose
Ġlong itud
ĠChar ter
ê ·¸
Ġbund les
. ignore
um bo
EM A
.... ...
s x
.C ard
Ġhe ute
Ġste er
j umlah
Ġ{ _
_Check ed
Ġf ax
ĠG ust
itch ens
Ġ ))ĊĊ
Ġremark ably
/ XML
- remove
_b t
Ġinc ub
.p ackage
.current Thread
ĠHigh lander
.s ide
s plash
Ġ ici
= D
Ġp uck
Ġball ots
Ġhug ely
co eff
Ġp Data
.C OLUMN
ĠHe aling
Ġord in
! ),
Ġ' ',čĊ
(m d
ĠS ask
< strong
Ġsurviv or
.s eries
Ġcaffe ine
Ġ` (
.TRA ILING
_ Input
(" ^
z d
& );Ċ
ĠP ing
Ġv oucher
.r ating
-sh irts
ĠRetrie ves
.al ibaba
Or acle
_MO V
Old Data
Ġ/* čĊ
Ġg boolean
Ġ=> čĊ
Ġr á
Ġbl unt
ĠImage Icon
if ik
RT C
Ġfib ers
Ġto ile
.s ent
ĠPy Qt
$ app
Ġmed io
Ġgrant ing
Ġtsl int
ĠM ö
(fig size
Ġhur ricane
Ġlif es
ĠÃ Ħ
rocess ing
_st andard
- option
')) )
Ġvac ant
å· ¥
ĠH ollow
handle Change
Ġdiv ider
ĠEngine ers
Ġsv ens
Ġcompl iant
t anggal
ĠC redits
ĠEm irates
Rule Context
Ġreal ization
Ġdistr acted
]+ =
Ġaug ment
ĠD w
ot p
or rent
Edit ar
.st ock
St udy
pe ctions
ĠGame Manager
= cut
Ġf lock
ĠRom ans
th em
-h op
Ġscreens hots
Ġ/* !Ċ
Ġconvers ions
Ġnormal ization
(config uration
Ġa eros
_se curity
! 'Ċ
B onus
ĠDR IVER
ĉ Date
t ie
ĠWy oming
St and
it re
Ġsh oppers
Ġdisadv antage
Ġlik ing
ç¬ ij
Ġunderstand able
SE E
Ġh oy
Ġnin ete
Ġcon fer
Ġnow rap
ĠV ern
, čĊčĊ
imest ep
Layout Manager
à ·
ĉw ait
PLE TED
J apan
Ġindu ce
Ġå ¯
оз в
_END POINT
.h orizontal
Ġacceler ated
rim on
IV ES
Trans actions
Le an
ĠSO UR
wh ether
y g
Ġo id
ĠEntity Manager
OUN TRY
Ġfil a
OLUM NS
IN UE
ĠAn chor
TR AN
wo o
block quote
ĠN urse
ĠCar p
Ġrede em
. try
ĠJ P
Ġtimestamp s
Ġ?> "><
ĠREM OVE
ĠStar bucks
Re ally
Ġflood ed
.C allback
Drop Down
ip ro
Ġt ended
l te
Ġproport ions
- te
ĠR ena
lic ate
for ces
.ex tra
.auth enticate
в од
¡ °
Ġfor ControlEvents
Ġsen ha
Ġke in
Ġmin ist
ĠPre ference
ĠTele graph
Ñĥ п
str pos
Ġillness es
Ġp igs
Ġget Intent
S ol
ĠÂ ¡
(c pu
[ prop
s creens
'); ?>
ĠAct s
Ġstr dup
Ġaver ages
an al
ĠCas ual
Group Box
ĠHand book
/ comments
Ġnumber ed
Ġbroadcast ing
çĽ ij
.native Element
.m u
Ġupdated At
ĠDoes n
.A C
.c oll
Ġrec order
_sh a
B g
b il
Ġbol ts
Ġç ¬
Ġim posing
ĠInformation en
_flash data
e conomic
Rem ark
uc as
ĠOff icers
ĠT ER
W alk
Ġmerc ado
_g enerate
H Y
Call ing
s nap
script Id
. operation
ĠFl ame
l iness
Ġrent ed
_t oggle
-ch anging
ĠT Y
' util
EE P
Ġgraph ql
ĠUn i
Ġimp ulse
.B asic
Ġenerg ies
M ARY
ĠMar cel
Ġmort al
Ġf res
m ens
m otion
Ġsample d
âĢľ That
id ay
qu ipment
get Int
ĠA bsolute
,' "
un ed
.sh are
Ġ} )(
mm m
ĠR ising
ä» »
Ġun employed
x fa
.f ollow
ĉĉĉĉ ĠĠĠĠĠĠ
sl t
.P hone
Ġkn ives
Ġe ve
on Click
] ))čĊ
ĠW itness
ĉ NS
ĠE OS
ĠSte fan
ĠPri est
âĢĶ which
Get String
. By
Ġup stairs
Ġdetr iment
bro ken
emb ro
Ġnic otine
il ion
Ġaston ishing
_ aff
ĠLess on
Ġaccident al
od or
Ġdec ir
Ġnew Name
+ .
çĽ ¸
igs list
ĠG ithub
Ġsuccess ive
rac ial
Ġen viron
éªĮ è¯ģ
Ġredirect ed
T OTAL
Ġgrab bing
ĠL ance
Ġfor fe
_C B
å¾ ®
El apsed
_w ay
(Dialog Interface
_me asure
x bb
D og
Dep art
-s rc
res olver
with standing
_sh ell
ĠLast Name
ĠAv iation
Ġbegin ner
("% .
(to ol
Ġн ов
: init
(A PI
ĠMorr ison
vt Color
Ġstap le
/ INFO
Ġsupern atural
Ġste ak
tim eline
zz le
" `ĊĊ
Second ary
ĠNep al
.String Utils
Ġad am
Ġ( ...
Ġsub stitution
Ġboard ing
ĠKey word
ĠAss ault
dbc Template
Ġorder Id
( engine
.assert That
ĠVen us
Ġhomic ide
ĠA val
Ġg utter
ĠSupport ed
/p art
Ġac claimed
H istor
Ġmes es
ü ber
ĠRen ew
Ġgr as
ĠE k
Ġin file
ind y
.m usic
.S croll
ĠA ges
ĠNar uto
ĠG ather
Ġconfirm ing
= ("
Ġpitch ed
ole y
Fr ance
+' "
$ total
Ġon de
Ġd itch
_s igma
Ġcontinu ity
re ward
- load
Ġproces o
Lock ed
st aw
Ġsp inal
l azy
! ==
j est
Ġd un
ĠRod gers
ĉ grid
Ġlog os
ĠBeng al
.s uper
Provid es
Ġnut rient
.T imestamp
IZ ATION
åĨ Į
Ġf ats
ĠX xx
ct ica
Target s
Ġcont ours
Ġre ordered
: Array
Ġtoler ate
V ir
Ġter ribly
Ġbr icks
(& _
h b
Port al
ĠB read
. which
ÂŃ t
as InstanceOf
Ġj object
ĉ length
_M T
; ">čĊ
_EX IST
Ġmat ernal
RE L
Ġê²½ ìļ°
he e
Ġlayout s
ĠL ap
ais y
Ġst umbled
ĠU IG
ĠS co
Ġimp aired
RES SED
Ġab uses
V F
AR B
.N AME
r ch
prim ir
_com pleted
Ġp enny
Ch rome
(b egin
ern en
- checkbox
Plain OldData
ĠL PC
r ade
sp ir
Ġcon ceived
T ips
ĠIo T
ĠG an
èģ Ķ
Ġbi ases
Ġconsult ants
ple d
_ ht
associ ated
], ĊĊ
Ġdelight ful
ĠÑĤ ек
Hel vetica
( load
-exp and
_W IDGET
to a
ĠA kt
Ġom n
Ġcl auses
Int el
*/ }Ċ
_reg istration
Ġold Value
Ġrest oring
Ġun real
O VER
ĉĊĉĊ ĉĊ
AT S
_pro be
Ġdiv isor
.update Dynamic
å¹ ³
Produ ces
st amp
.j boss
ĉt ask
! (:
Ġpsych ic
@ class
M artin
ĠPass ed
clar ations
h el
а Ñĩ
ĉc opy
-b in
z an
ig ram
া à¦
(s ig
ĠC aval
_ ##
Ġ% =
out lined
ĠAc id
Ġunpredict able
-d ashboard
Hex String
+ c
.P ublic
Ạ©
Ġconvey or
ĠE B
Ġselect s
Ġknock ing
ĠC ec
IBUT ES
owa Äĩ
g atsby
* v
ent ropy
Ġdispatch ed
Ġcam el
ĠSat urn
Ġover weight
( phone
par able
% B
_v ectors
Ġbrew ing
ĠT k
ĠDownload s
ĠS aved
.Pr ice
Ġcur ved
ĠParen thood
è ¶
.p nl
plet ely
.D ay
Ġadvertis ers
Ġej ec
Ġpr zed
ë ¯
! ';Ċ
ĠK ush
ĠT AB
Ġquest s
Ġcoinc idence
umm ies
ĠKash mir
ĠEth ics
_g rowth
Ġakt iv
Ġgroup ing
å¢ ŀ
_tr uth
åIJ ¬
t odos
is et
Tex Coord
ä tt
ĠZ ur
ro ys
_M AGIC
Ġbrew ery
( State
ĠSM ALL
ĠPl ants
it bart
each er
ĠAd elaide
L u
Ġf ick
und les
_load ed
и е
P oll
rit ic
EL Y
Ġ+ '
ĠProf ession
Ġst amps
ĠS ew
scroll View
Ġcomm unist
/pro blems
}čĊčĊ čĊčĊ
, o
Ġu dp
Ġob ese
appro ve
ancell ation
_G ame
ĠHas htable
adaptive Styles
Ġpossess es
.match er
function al
M rs
ĉs ave
ĠDb Type
Ġk en
get Context
Ġm ans
( rel
ĠBrother hood
) `Ċ
è§ £
.In formation
OutOfRange Exception
ĠS ek
C as
Ġblog gers
E ither
(" ""
Ġpin ch
Ġco arse
) p
ĠP ulse
Ġlear nt
Ġdent ist
Ġon change
Ġdirect ives
( actions
ny der
ĠSh ir
T rait
_de p
ĠP ET
ĠRE P
.App Settings
cu ador
iden av
Ġenv i
Ġsl ammed
ĠSh oot
Ġdate Format
.j oda
ve ys
Ġ) .ĊĊ
Ġcare g
ĠPar allel
_ translation
.function s
. obs
Runtime Exception
[] =
over view
ĠSch l
Ġno isy
ĠOn PropertyChanged
S ending
Ġunf amiliar
U pon
ĠPrint s
.t yp
Ġflee ing
ĉm ove
( Un
Ġq r
× ľ
_b eta
Ġsk ies
ĉm e
W ND
Ġstick ers
bl as
Ġinsert s
Ġvers es
ĠD ew
Ġtang ible
Ġhe cho
P OL
Ġte ardown
om nia
IB E
.c over
_str ategy
^ -
set Position
u ale
S igned
Ġif ace
as eline
.set Time
ĠMin eral
ĠFight ing
sk ins
Ġdiscrim in
Ġdans k
ĠPr inceton
ac ist
Ġ( ));Ċ
tr acks
imon ial
ad ecimal
EP ROM
ugg le
.Not ification
$ mail
c antidad
ĠJ ung
Ġseek ers
Ġpl ausible
t ier
еР¶
Ġr apper
ĠMan a
ĠHttp StatusCode
Ġburn t
los es
ĠF oto
ĠJson Object
Inst agram
Ġsys call
Ġreal ities
ĠMAT LAB
:^ {Ċ
TER M
ĠC bd
ĠPar agraph
Ġtrav és
Ġconstruct ing
Ġsw al
Ġp ige
LL LL
-ex isting
G ets
Ġmelt ed
Ġmitig ate
H en
Ġh m
im as
ĠA o
ĠP erez
ĠD AL
Ġëĭ ¤
Ġdiv is
Storyboard Segue
ĠMod ify
ĠÃľ ber
_O VERRIDE
.p em
unt os
Ġespa ñ
Ġ{ ?
ĠP AY
_ip v
ĠF ury
__ .__
el ow
-center ed
check s
_ Reg
-J avadoc
ĉ load
ĠLik ewise
ا Ùħ
UN E
.se m
x cb
ĠC ave
_s leep
Ġsil ently
ĠExt reme
.To Upper
ĉC HECK
Ġc ue
ĠQ ByteArray
Ġcorrupt ed
ĠD é
Ġimp ed
Get Name
Ġinaccur ate
Ġso ber
е е
Ġbar code
-- ){Ċ
ink i
Ġé p
Ġd ri
ĠAL T
>>>> >>>>
ont a
[ L
Ġinter es
ver ting
Ġdi agnostics
p dev
è ©
ĠIntegr ated
). '
_g c
$ text
.g ames
ĠT erra
' Re
.trans fer
_F IFO
get Model
Ġbl and
ĠCole man
Ġpr imes
Ġæ Ī
Ġcross es
n k
G ING
Ġ' ^
ĠB lob
Ġinter course
ĠBl vd
Ġweigh s
_reg ular
ĠPer th
Ġsepar ating
Ġb illed
.tab Control
Ġpup pet
Ġutil ization
Ġâĸ ł
Ġsucc es
Ġl amps
_pro j
E ric
Ġren ovation
ĠFam ilies
ĠB its
part ials
-M en
s olution
Ġd warf
.IN TEGER
ĠLO CK
. ct
Ġexcer pt
ĠP ix
ĠFirst Name
ANT ED
ĠAd mir
-h elp
P rior
ĠAl ign
.IN STANCE
Line Edit
('/ :
Ġin et
od us
.p kl
ĠK Y
up ert
Ġn erves
_grad ient
} ','
_un ref
Ġs aturated
ĠConn ected
ĠF N
EX IT
Ġtele port
Ġav ait
Page Route
Ġdivor ced
(l ang
f st
ĠT yr
Ġmess enger
if stream
X S
ĠBank ing
Ġinfect ious
ĠM ons
_LO OP
Ġzur ück
Ġobt ener
/re pos
V el
ac ro
Ġuser Repository
style Type
ĠS RC
VML INUX
rec ursive
/ bar
_ch ip
omin ated
ĠN it
âĢĶ to
ĠBudd h
ом еÑĢ
ĠM AG
ĠC HE
_d en
. raises
_de gree
Ġpump kin
_tem plates
_M EDIA
ĠTim eline
Ġb ots
Object Type
Ġbu ys
.post s
C AL
wait ing
ĠDani els
Ġd abei
ĠS igma
il or
ig el
, W
AD S
( panel
ì² ´
it ating
.p alette
Ġmos quito
Ġt ego
(parse Int
Ġdes pués
p romise
Ġw ij
types cript
ĠT v
_IDENT IFIER
).ĊĊ Ċ
_fl at
its u
US R
ex perience
-f it
ph inx
_th resh
Ġide ally
ĠFre eman
, DB
_r w
çŃ ī
U b
_stat istics
=" "><
Ġch ore
Ġy ork
inst alled
Add itionally
Ġp stmt
yl ko
:: Ċ
Fore st
Ġhead set
Ġgall on
ÑĢ ÐµÐ¼
Ġwithdraw n
ĠC andidate
Ġmel ting
Ġfree zer
Ġh l
_HE LP
m ime
( /*
Ġth irst
$ return
member of
еР±
ĠHttp ServletRequest
( ob
_ Result
Ġassert ed
Ġfulfill ing
Ġstret ches
par ated
-f unded
Ġå Ľ
ing les
_c a
. condition
ĠDis plays
Ġor ang
ĠC RE
Ġgl Bind
ĠSelect or
/ type
ĠAlex a
ched ules
ĠPen insula
Ġpar ity
ĉ dest
ĠDo ors
čĊ ĉčĊ
_dim ension
Ġa load
.St oredProcedure
(p aren
ĠBur ke
') ]Ċ
- engine
Ġqu ir
ĠHy brid
ĠDo e
Ġout lines
ĠTrend s
_N V
per iments
ĠH in
? ',
ĉ Text
F UL
Ġsm ells
Ġs lick
Ġmis erable
ĠArray Adapter
Ġparam String
H om
_l iterals
us uarios
Ġprompt ing
_l azy
ĠActiv ation
_ oc
We ak
Ġan ecd
ĠU CLA
= re
isse ment
ĠEsc orts
Ex cellent
ĠP ause
Ġre positories
T OR
ari ate
_is o
up dates
hal b
udi ante
ë¡ Ŀ
Ġna ive
ĠP eg
ĠL ounge
ARG IN
(b in
On ClickListener
ĠFA ILED
Ġl ite
Ġd zie
ĠL iteral
iv or
fc ntl
Ġe ats
Ġq ed
Un lock
rid ing
und ai
= M
AT TER
Configure Await
ici as
ustom ed
Ġsuccess ion
end Time
ĠJ upiter
Ġjud ging
d ration
_d ocs
.m o
Ġeduc ators
ĠV ine
Con d
[ out
q b
\ Validator
Ġmean ings
Ġpresent ly
Ġdiv iding
otten ham
asc ular
Ġtrail ers
ĠC LOSE
ам и
âĢĻ ai
ĠG ain
w or
Ġpl anner
Ġdistrib uting
v at
month s
x label
H F
V iol
.BASE LINE
еÑĤ ÑģÑı
ĠR otate
Ġtx n
: bold
Ġb loss
Forg ery
( embed
Ġjak o
s printf
the ir
Ġexhib its
- static
he cy
get ActiveSheet
.c lients
ãģ į
_h ide
[ word
C b
add Item
ax e
_r adio
al ion
mod ifier
Ġsat uration
Ġden om
_p ixels
m ess
(f l
at if
Ġse cs
Ġpro stitution
Ġgrand children
Ġparad ise
ĠF eld
_B INARY
it ous
๠Ħ
Ġflash ing
-s ided
Ġcontrad iction
/* ĊĊ
y label
ĠT et
Ġadm ire
res o
Ġlet z
ĠSE ARCH
sl ots
ĠRew ards
ĠH og
ĠNS Data
st ash
F all
ĠA mer
Line arLayout
/ photos
Ġfe ather
Ġ| čĊ
Download s
.Start sWith
Ġ// #
ine Transform
Ġaff id
V tbl
ĠRog ue
scri bed
Ġfa uc
ĠMon roe
Ġdecl ares
mod ern
re on
ay be
P ASS
f ers
_MULT I
ĠMath ematics
Ġsud ah
_ATT ACH
Ġnumber With
ĠSol omon
j in
ograf ia
ö l
_d esign
cul ated
ĠL una
ies z
Ġ=> '
Ġrevel ations
Al ong
( ed
ĠF ilename
Ġy label
Sec ure
Ġbus ca
agn osis
_RE CE
Ġoverl apping
Ext ent
Ġanticip ation
Check s
ĠALS O
or c
iling ual
it ational
Ġadv ancement
ou ro
ĠP redicate
å¾ Ĺ
er ia
ĠPier ce
or io
Ġmer its
Ġpe anut
.P ackage
ĠCon duct
_SENS OR
Ġbo iling
Ġin tra
ĠI GN
ĠF ur
.Ref resh
ĠRe ach
_dec oder
.Ex p
ĠÑĤ ак
p ill
, Q
ĠGr ill
Ġpop ping
.A g
Ġpro yecto
Ġmile age
Ġec ological
] ]);Ċ
ĠÂ Ń
sub plot
ac ad
ĠTry ing
rec ipes
$ criteria
ĠPers ian
-b ound
M ASK
ĠG esture
Ġk k
ĠP VC
Ġprohib ition
Ġcom ando
ĠLO OK
Sh opping
Ġdist ortion
< Boolean
.Get Length
um pt
\ Product
ell ery
Ġfire wall
form atted
.red is
Ġes a
ĠRh ode
S om
.n on
Ġ' ).
Ġget View
ạ n
pr us
Mat thew
Ġs ia
ĠF ors
G PU
ient ras
_IN ST
Ġol arak
Ġimport ing
T CP
/ ");Ċ
e ither
Ġfresh ly
c ascade
(char acter
ĠJe ep
ot ics
_ UTIL
.Xtra Printing
.first Child
ĠEx cell
Ġd vd
Ġt aller
Ġr as
yp ass
Ġassign s
Ġgri ev
-m ore
J D
ĠBurn s
' >čĊ
.D ependency
.Query String
.O wner
Ġexp iry
Th u
( Vec
Ġhazard ous
Ġr pm
AP ON
Ġadd Target
sv ille
p Net
ĠIm g
ĠTIM ER
.An imation
Ġbe k
Ġass ort
Ġle bih
Ġbody Parser
Ġvibr ating
ID L
Ġbutter knife
int ers
Ġpersu ade
ĠLGBT Q
è ĭ
.s oft
Ġbe ams
_s ur
.D ef
Ġl abs
ĉ plt
Ġsk ins
Ġtransf erring
Ġimag inary
_E nd
; background
Ġl aps
_COM MENT
(S DL
ond s
.Rec ord
ĠIm plements
_t icks
() ))ĊĊ
Ġa rose
] ?
ĠM p
ĠI Command
Ġsculpt ure
Ġcontract ed
< HTML
Ġcal end
at y
/ Sub
Ġkv inn
_ IGNORE
ĠSh ane
ML S
Ġstim ulate
Part ition
Ġm un
ó m
eral a
- account
.B inary
c é
Ġse ize
connection s
ĠĊ ĠĠĠĠĠĠĠĠĊ
ĠDi agnostic
V ISIBLE
ĠRun s
Ġimpress ions
s uite
ob le
~ -
ak ukan
< Person
ĠN os
ĠG ui
.wait For
RE SET
Ġpost pon
Dis cover
arr ison
sh aw
b lood
AJ OR
æĽ´ æĸ°
ĠM use
æĶ ¶
Ġret aining
ot te
Ġmos que
ĠS ne
Ġstandard ized
Ġmain land
_th ree
unge ons
get Doctrine
Ġwh ale
Ġag g
ĠP orsche
now led
lat ent
ĠRel ation
Ġ// '
Ġshut ting
ĠRem ix
_c ov
Ġs ailing
Ġv owed
Ġp ots
out u
Ġhair y
cast s
Rel oad
Ġre connect
ter a
.child Nodes
ĠR ack
Ġcurrent Index
Ġall en
Ġ ç͍æĪ·
ĠC ubs
[ X
_SE Q
_RE MOVE
.get Action
(/ ^
err ar
Ġ ether
cur ve
Ġsl ap
Ġu om
O thers
Ġen gr
Dis position
Ġst aged
E ye
ĠA ux
auth enticate
Ġ$ ?
ĠAndre as
Ġset w
.A rt
Ġforecast s
Ġa unt
-m iddle
Ġmis d
des k
Ġescort e
ĠCas a
rop ical
Ġexem ple
plan et
(U INT
Ġwh ip
ĠPC B
clide an
=" \
Ġox ide
Ġsucceed s
der ived
ĠEcon om
_co ordinates
ir as
D raft
Ġvisual ize
B rian
_ASS UME
ĠObject Id
Ġtrain ers
_FOR CE
Ġcon soles
- process
lic her
ĠSim mons
T aking
ĠCl aims
Ġdiffé rent
Activity Result
Ġsn s
éĢī æĭ
ĠCr us
Ġll am
r ab
ĠJo an
AA A
ĉf ilter
ish ops
get ting
à µ
Ġquant o
P ast
ov ich
Ġin justice
ĠF LOAT
Ġal right
\ DB
( GameObject
u ish
(b ot
Ġgall ons
ĠR é
ĠS aid
ĠSTDMETHOD CALLTYPE
ais ing
_process or
ell idos
ter dam
ĠBe am
Text Area
Ġret orno
.M ake
Ġ$ ("<
Ġlock down
Ġremed ies
Ġve el
x ee
do ctype
F il
ĠExp and
Ġemp loys
Ġsession Storage
Ph p
P ublish
Ġret al
f abs
ynam ics
Ġtoss ed
ĠnumberOfRows InSection
x path
\ modules
Ġdis astr
ĠM ULT
.M esh
-st age
Ġs df
it ung
ug es
Ġ?> ">
_index es
Ġval uation
Ġlif elong
Ġexped ition
(Y ii
Ġp ains
ĠP RI
ĠM ixed
ĠCh anging
German y
communic ation
.org an
ĠMar athon
get Path
ĠAcc uracy
ĠG lobals
') }}
ĠOW NER
â̦ âĢĿ
Ġstab bed
Ġsch izophren
ĠF n
ĠC ORE
ĠData Row
ĠL TD
Ġmy ths
Ġfam ously
| ,Ċ
ĠSe oul
S ir
ĠBer k
Reg Exp
.get Row
ĠDec ode
R N
Ġm ang
Ġemploy ing
_n ombre
'
kin son
Ġк ол
ogn itive
_ li
Ġim minent
Ġaff inity
.sign al
Ġnot ch
ĠSteel ers
max length
K K
ĠEug ene
_P WM
ro i
Ġâ Ĺı
ĠH amburg
.M ust
Ġax e
en ef
Ġamb itions
ĠSpec ies
ĠSt ress
Ġa while
Ġб Ñĥд
Ġwith stand
ĠDec oder
_in ventory
Ġ{ ččĊ
Ġt gt
Ġrail road
W ASHINGTON
Ġnegot iated
N ST
- phone
, U
Ġexerc ising
á» ¥
_P IXEL
av ors
iter ated
Ġv ampire
ad al
In grese
Ġun g
ject ive
.c ells
Ġn ano
Ġmark down
_R ULE
(event s
Ġl uggage
MESS AGE
ig keit
$ count
Attribute Name
IG INAL
_E nt
ĠB F
ĠCOM MENT
_in i
ĠEurope ans
ĠB elle
åij ½
) ['
åº Ķ
ĠUse ful
.re ference
() ",
_ grade
ĠK aw
Ġsent encing
Ġsocial ism
mon ster
_L AYER
Ġdee pest
w k
ĠNo ise
### ĊĊ
Ġpr éc
ot le
ÑĤ е
a uf
ib al
Ġcon quer
> Email
Ġamb ulance
O AD
Ġ(" %
ĠF I
.f ixture
Ġter se
ĠĠĠĠ ĉĉĉĉ
Ġsanct uary
ug i
ĠCom parator
Definition s
Ġast hma
Ġl act
Ġhard wood
.c lock
Ġattract ing
ĠM our
(d istance
ic its
Ġbon ne
ĠAC CESS
.Deserialize Object
ĠTyp ed
Ġje u
Ġapp Id
ĠCl ara
ĠH F
ĠRe ich
ipp les
//---------------------------------------------------------------- ----------------
_del ivery
erial ization
Ġplaint iffs
Sc ient
sh opping
ĠD ummy
ĠW ald
Group Name
Ġins cription
el og
:::: ::::
_ ld
Back Pressed
.R aw
ĠOn Trigger
Ġmuse ums
ĠBe en
ĠAdvent ures
Ġsl ate
Ġlet t
Ġsu nd
ĠG in
ĠMechan ical
.s hip
App Component
Ġdest ined
Ġdw elling
Prof iler
Pre pare
ze ich
Ġsil icon
(h as
Ġ# %
VID EO
Ġcollabor ate
L in
Ġsc opes
( className
(s d
and in
.h am
Service Impl
-des cribed
Ġiron y
st ial
ĠHu awei
(re po
Ġunexpected ly
ĠK ai
.inst all
\x f
Ġexhib ited
_T CP
ĠO x
_CH O
Ġprostitu erte
Ġv ä
Ġsit o
Ġconstitu ents
ĠContin ued
ĠS AVE
r ss
/ message
ub es
Ġmisd emean
Ġtax ation
Ġstory line
h air
ĠFind s
S IG
ver ification
~ =
.h p
Iter able
Ñĭ е
ator i
Ġc tr
R x
_ );ĊĊ
d ag
.p in
Ġp seud
Ġinv o
ÑģÑĤ ÑĢ
_p ix
为 空
Ġsw orn
âĢĶ or
_reg istry
Ġdis asters
ĠRO I
ĠâĢ ķ
akt u
fore st
be iten
âĢĶ I
ue va
eg t
Ġsp ikes
URE S
ĠRecomm ended
Ġexplo ited
ĠFreder ick
_COMP LETE
ĠDr ugs
!!!! !!!!
ĠR iv
ST OP
RO OM
ĠP ASSWORD
C ookies
.E l
á» Ń
ĠB ert
Ġhash ed
ic ester
Ġdecor ator
Ġquery String
: ;Ċ
Ġ" ["
oto pe
-A meric
ĠMatthew s
UR AL
âĢľ ,
Sum mer
f os
_CONT AINER
_A CK
Ġfil tr
_dis p
_ Re
Ġfac ile
а ÑĪ
Ġìķ Ĭ
Ġe ben
Ġspr ink
ĠQ uint
> V
Ġhistor ians
our met
ĠMonitor ing
led ger
c ott
Ġw are
GG LE
c ars
ĠM EDIATEK
Ġvol upt
_ View
HE L
(c opy
(st ats
Ġchrom osome
ĠCurt is
- conf
( asset
Ġhv or
File System
< >();čĊ
oc oder
ĠC annon
) x
ĠSm ooth
ĠS AS
_ ce
ĉ prev
_m ovie
E c
_w all
< Button
ĠF AST
Ġon View
ul an
ĠS UPPORT
Ġgesch ichten
ĠS ons
Im m
$ IFn
Ġfair ness
Ġd pi
ats u
J osh
Equal ity
Ġ} ()Ċ
_ less
ĠR atio
ĠC ats
ĠS tern
Mon ster
Ġmer cury
ü hr
Ġplus ieurs
.des erialize
sc opy
.F alse
) animated
ĠExp erts
Ġ"") {Ċ
.W hen
see also
.un pack
LE M
.select All
Ġperception s
ud ing
ir ling
ĠPrint ing
gram s
ĠFile Stream
erv ille
il og
ic mp
_C ount
Ġlivest ock
- ca
doc uments
Ġpo les
ĉw ant
Ġflu ores
Ġstand point
ĠH uge
Ġradi ans
ĠUIB ar
EDI UM
ĠHistor ic
_h older
ĠMar ines
Ġt ä
.L ight
quir er
ason ry
div ider
ĠFl utter
_f b
restrict ed
ĠEvery body
N ão
Ġkn ot
ĠT witch
Ġhall way
(C ollider
Input Element
? )Ċ
/ off
/ )
play ed
[ OF
Ġbat ting
_d l
Ġcom edian
Ġé v
ĠD EM
ĠEd en
: white
' ',
Con struction
acer b
Ġtask ed
.man age
Rel ationship
Ġph on
n z
_B GR
Validate AntiForgeryToken
_ air
âĢľ When
Ġgl fw
ĠCon versation
_T OTAL
, Z
Ġg raz
Ġiter able
ĠP ASS
Ġadvert ise
Ġmö glich
/ train
ĠVolk swagen
Ġcreep y
Ġ" )čĊ
QU ENCE
Ġalt ar
Ġed its
comp iled
aw ning
ĠD ungeon
Ġo sg
Navigation Bar
Ġtrend ing
ĠE co
ogg les
cd ot
| -
S ie
ec ret
ĠN egative
ĠL ing
ĠD IM
ĠC WE
ĠCar rier
Ġcar tridge
_us b
= os
ĠJack ie
Ġo tras
Ġcommod ities
ĠP resentation
)&& (
ĠMar tha
ĠCath olics
ĠM ond
об Ñĭ
_ absolute
Ġash amed
pons ors
t al
Ġsad ness
Ġpu ò
F ade
-pre view
ĠRequest s
ĠCal vin
h orn
Reuse Identifier
(pro vider
/app s
ime o
ĉ Class
S amsung
ĠW ORLD
Ġc innamon
dot env
ĠI User
ĠDE V
_C har
.ib atis
et i
/ me
s st
.s ym
ĠRug by
-m aster
aj ar
ĠY EAR
Ġo dp
ĠR oles
Ġbip artisan
ail le
Ġblock er
Ġgre ens
.SE CONDS
Ġbelie vers
ĠL ikes
F LOAT
Ġm ak
Ġg cc
âķIJ âķIJ
(" ~/
SCRIPT OR
Ġton nes
ĠS ang
Ġtrans pose
enn ai
P red
Ġsoll te
.github usercontent
( print
ĠH ole
çľ ĭ
ad get
Ġprompt s
Ġgen etically
ĠH od
Ġvert ically
_control s
ÑģÑĤ ан
") {čĊ
$ title
Ġ} ),ĊĊ
Ġstate wide
ĠCor respond
ĠAt tr
it ant
Element Type
Ġout ward
Ġfam ilia
( article
Ġbl at
Âł Ċ
Ġgl Get
ĠRe ceiver
Ġ% -
ad am
W inner
Ġtail or
_p wd
ert en
St an
ĉ all
al ive
strt otime
� s
s essions
$ conn
ass ist
Ġchat ting
ĠM ant
Ġ% @
Ġ"" );ĊĊ
Ġd gv
Ġíķ ¨
.re peat
_M essage
Ġadvis ers
/ path
Ġk es
) }
M isc
Ġb son
Ġtrim med
ĠA ck
Vertex Attrib
ç´ ¢
u ates
.m ysql
Ġdest in
Ġpro bl
( Constant
ass es
- images
_A REA
__ */
[] (
Ġsign In
Ä ij
x r
ah ir
.fire store
Ġsequ ential
ĠIde a
-b asic
_p ag
Ġinst agram
ot ron
_al ignment
\\ \\
.F actory
.r ule
.ch dir
Ġlib ro
(game Object
.ToolStrip Button
Ġdisc overs
.Arg s
d ob
Ġv n
âĨ Ĵ
Ġd ü
ĠX M
Ġalum ni
Ġh one
Ġsecure ly
_d ropdown
Dis claimer
Ġd zi
(t imestamp
') ]
Ġcultiv ation
...ĊĊ Ċ
ĠTreat y
ĠD iss
Ġconflic ting
.get Selection
Ġplay able
ĠSil k
ĠE quality
Ġm oy
Ġfl att
Ġmot ives
Per fect
.ex ist
Ġt weak
Ġo mit
ĠTw ilight
Ġk issing
Ġchrist ian
( SE
_ define
ĠP eng
Sort ed
' in
Log s
á»ĩ n
Ġn ylon
D ump
Im agine
re name
Ġbefore hand
py game
Ġb py
ĠD j
Ġtit ulo
Ġn ltk
ĠSch midt
ĠC av
( one
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ
.get Model
ĠP t
ato i
.loc als
burse ment
Pro vince
ĠAppro ved
() <<
ó ria
us ch
ĠJ enny
arr ants
ĠLib ert
L ord
ĠRem oved
_code c
.b undle
ĠGonz alez
op ers
Ŀå§ĭ åĮĸ
et ting
Ġgod dess
ri pe
Ġmus cular
ĉĉĉĉĉĉĉĉ Ġ
ĠH ugo
Ġmej ores
lo id
rit eln
g is
add on
Ġ( (((
appoint ment
res erved
ĉf riend
_ avatar
BO OLE
ah i
- END
Ġif f
ó b
ĠBr uno
rows able
ĠPo ison
(f lags
urt les
ĠAn ime
Ġmigr ant
ĉstr cat
(re ply
ĠRef uge
ĠB W
ef ul
$ value
f ed
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ
èµ Ħ
(c m
Ġvulner abilities
Ġ[ ('
Ġunbelie vable
str iction
enti eth
Ġpr aying
Cl aims
Ġka ufen
n é
Ġpoison ing
c ollections
Ġinit State
ĠSe verity
Ġcontent ion
ĠĊ ĉĊ
.cont rollers
struct ured
ict im
ĠO ber
Ġ/* #__
_ OT
ĠAmeric as
ĠAd a
Pro duto
.m ulti
Ġg rape
b eg
æŁ¥ 询
Ġqu artz
ĠRom ance
ĠMid west
Ġhous ed
Ġfurn ish
ic ont
.un shift
ot re
Ġú n
ip ple
Ġsub urb
ual i
V oice
.Is Any
, column
ĠPro sec
ID A
ĉ post
pt oms
v é
ĠIng redients
ö ff
. operator
Ġ<< =
last ic
Ġre semble
Un authorized
Ġtut to
_SW ITCH
_READ Y
} =
now ledge
Ġapp ended
ung an
âĢĻ en
ĠL oren
p ublisher
ĠM G
} ,"
ĠWal sh
Tem plates
_s ocial
Ġpar ish
ĠS pl
min ated
(F ALSE
Ġfore front
mod ity
Ġbil ateral
Ġcompet it
Ġc andles
.d p
Ġcollect s
tele fono
Ġatt ent
ĠL emon
iz ada
Ġtherap ies
Ġpar adox
Ġt as
-sub mit
ek er
INavigation Controller
Ġmet avar
Ġsew ing
ĠZ imbabwe
Ġlaw ful
Ġl ore
ĠLoad s
ĠÑģ озд
.p romise
ĠF aces
.Pl atform
.get Location
Ġtrou bling
ĠvÃŃde o
ĠFe aturing
äº §
q ed
Ġon Bind
Ġtodd ler
C lo
Div ision
-g allery
ĠG eld
spec ific
Field Name
_ex cel
\ htdocs
ĠD V
Ġ& :
Ġtw ig
ĠCon cern
Ġshot gun
Ġnick el
ĠLux ury
_KEY S
.n py
Å ¯
Ġfore head
Î ²
Ġendanger ed
/ the
p ipeline
Å ±
ne o
Exp lore
Spec Warn
Ġinter change
(p i
b irthday
Data Row
ĠS PR
Ġo ste
Ġ" ~
atisf action
N H
ord o
-f ocused
' A
ĸ ī
.b est
ĠSpec ification
/> .ĊĊ
ogen esis
ĠOPTION S
upt ools
Ġmilit ant
Ġex ited
ig ar
ĠCOM M
ĠDis posable
ay cast
Ġrow span
Ġsyn thes
Ġsond ern
ĠĊ
ĠJ acket
R ATION
.getSelected Item
- init
ĠReg isters
_se p
ĠTool kit
.d ict
Ġx label
\ Table
t oc
_com bo
ĠComp act
Ġr ugged
à¥ĩ à¤
-man agement
')}} ">Ċ
ĠSt amp
ı l
ro x
Ġlandsc apes
_NOT E
mon ary
c ab
Ġmo et
x af
rc ode
- cli
_g ate
[ event
SP ORT
g ia
ĠS UPER
/ Login
_sh utdown
int errupt
Ġpret ending
Ġfr inge
ĠRed s
ĠC UDA
ĠUN IX
v it
Ġbr ig
dr v
ĠConn ector
There fore
Ġl ia
D etection
_ actor
Ġtemp file
Ġecc entric
- role
Ġpad x
d ent
West ern
Ġê ·¸
ĠApplication Record
Ġcampaign ing
_run ner
ĠC ivic
ale igh
Ġdire kt
.s ul
ĠĠ ĉĉĉ
ant en
Ġiss uer
Ġassert ions
( orig
AT IO
Ġlean ed
ä s
.D TO
expl ode
.O bservable
Ġstagger ing
Ġkidn apped
Ġprogram mers
ĠInn ov
.param eter
Ġdom ination
Ġske ptic
Ġæĺ ¯
Ġavoid s
.Ver ify
ub by
ĠAS N
Ġformat o
ĠBeat les
_b rand
Ġin set
y outu
Ġto c
-f inal
Show ing
ĠD oub
ĠM esa
Ad j
_m edium
Cre ates
(end point
ĉ UP
bb ie
Ġst alk
.datab ind
.S can
ag ents
$ ,
ind ividual
+ )/
ĉv m
(not ification
Ġin ex
ĠClass ification
ren o
Ġo lig
-r ated
Ġform ulation
', {
Ġa cept
_un pack
_C A
.P ow
ĉ im
Ġal uminium
AN O
Ġx n
Ġcó mo
ĠIng redient
Ġseiz ures
åħ ±
ific ador
Ġsigu iente
ĠIn fragistics
Ġduplic ated
ĠDe e
Ġn ø
ĠAC CEPT
(c rate
иÑĤ елÑĮ
- less
Ġinf inity
An alyzer
-D ay
rit t
(c in
ĠG y
Ġmulti plied
uch i
ĠBald win
/ ip
Ġshort cuts
.A DD
Ġvig or
_in struction
( ;
_ eta
è¿ ŀ
utor ials
Ġboost ing
b v
Ġacknowled ges
List ening
FA Q
; b
(( -
Ġarchitect s
Ġz we
Ġpul s
Ġget Count
ver bs
ãĢ ľ
(C ollection
k re
Ġjuris dictions
_b ridge
ĠCr ack
ĠDiff iculty
K O
Res ervation
_re quires
T our
ãģĹãģ Ł
.set Current
Ġk y
ĠAlb any
Ġè §
ll er
agn a
work ers
.bl ank
ĠPr ayer
M IC
Ġresil ience
Te X
ĠL anguages
st udy
ĉc urr
Ġenzym es
Sl ug
ĠíĮ Į
str al
Ġtum ors
Ġseg unda
=' {
in struction
ĠL isp
/ info
Ġ" {$
,: ),
Ġg v
( ErrorMessage
Ġ' =
}- ${
.Doc uments
" Well
Ġreminis cent
Ġg az
iro pr
eh r
Ġsup pressed
ers h
.scroll To
Ġcad ena
Ġgame State
ÃŃ m
( conv
ĠTom orrow
ĠC CT
M ongo
ul g
.C amera
.hand lers
m ph
Ġst k
Ġgen etics
AC ING
Tr ivia
ĠB am
(m arker
.St retch
ĠSun ni
ĠBet ty
.t olist
un likely
.Rect angle
ob solete
IL ON
inner Text
emb ourg
a N
ĠV ehicles
un lock
: utf
n ob
ĠSee ing
ĠNE VER
Ġt ls
Ġfil les
Ġbenef ited
ĠCl int
*/ ),
.f old
Ġpos ible
A DED
th ouse
.D AL
ĠO dd
ro kes
ĠSun ny
ĠPartial Eq
_B uffer
ĠLe vi
long rightarrow
eld on
g ages
_w arn
.Create Table
ĠD ip
_ questions
.log ic
Ġ# "
={() =>
Ġt ep
Ġju icy
ì Ĥ¬
en ko
ia lect
Ù ī
Ġon board
Ġæ ı
ĉ rt
_ UTF
ĠQ Action
âĢ ŀ
( Component
(a udio
.h it
g te
Ġprogram med
state Params
Ġpoly ester
f ires
by ss
] =(
_ quality
Of Day
ĠFair y
Ġy elled
op l
(user Name
ĠD ifference
Ġevalu ations
iff any
Ġcycl ists
Ġc idade
Ġtext book
Ġprof iling
__ ),
de a
. activate
Ġindic ations
Ð ķ
Touch UpInside
Ġinval uable
ĠM ASK
Ġcont end
F req
Ġrecru its
(int erval
ĠUser Profile
Ġ'./ ../
ed u
_C allback
Ġanal ogy
ĠTro phy
app hire
V ideos
ĠCh er
ĠH av
â̦ "
. validator
g fx
ĠU Object
class names
tri angle
ĠEnc oder
.s py
Ġpred ators
= status
-s afe
: ",Ċ
ĠIn cluding
Ġ{} ;čĊ
* cos
Ġend ured
.sul ake
Ġnurs ery
Ġfrag rance
Ġre building
Ġn th
ĠFr aser
.set Date
ĠV ince
_RE ST
Ġvent ilation
æµ ·
cri bes
.as m
lp Vtbl
ĠA be
uis ine
, array
ĉ className
err als
Ġ' ĊĊ
Check out
Ġsol icit
A ux
_c apture
Ġrib s
rag on
vi ol
top ics
Function Flags
ĠM arty
b ike
ĠT ucker
(k ernel
ĠO ps
Close Operation
/d emo
ild a
ĠlÃŃ nea
APP ING
Ġsu ites
.visit VarInsn
ur us
ĠMin ute
(m anager
Ġbutter fly
Ġap are
Ġw olves
J WT
ĠSal on
ĉd elay
-es lint
is ations
.r pc
)| (
ĠSnap chat
/m m
M N
cer ies
.text Alignment
ĠFrank furt
Ġad o
(new Value
( access
( Expression
ĠSign In
ĠHait i
_t p
.set Parameter
Min ute
Ġmanual s
ric anes
ĠP TR
ĠOut er
Ġget line
oc ations
_C D
ĠLy on
/g ui
_l ive
id an
.ge om
Ġborder Bottom
im uth
_check point
Ġme u
ĠIr ving
Ġpeu vent
(M AX
ĠAR CH
Ġp ov
.source forge
Ġjam ais
Ġar k
ĠBaghd ad
ĠC LEAR
Menu Bar
Ġtro is
CHED ULE
Ġ# čĊ
(C all
$ order
(M aterial
Ġencontr ado
$ list
ĠMETHOD S
.begin Transaction
_M AG
Style Sheet
Ġmaj ors
Ġindef initely
clean up
Ġhom eland
(d to
D ates
P resentation
ĠD K
={` /
ĉ Key
( Block
_check box
ne eds
Ġon Complete
ric o
Ġgle ich
Ġx m
O OD
B etter
ĠSQL ITE
. Book
x ad
ĠG one
ĉd p
Ġdev otion
Ġst m
Ġobs ess
ĠBack end
Qu eries
I k
// ****************************************************************
Ġdivid ends
.parent Element
} ")ĊĊ
ĠMaterial PageRoute
: num
Ġexp lic
ĠO L
le ast
O ops
iment os
Ġins urers
Ġhero ic
ĉf ields
.img ur
.btn Cancel
ĠDetect ive
(s m
ĠMutable LiveData
.l ab
(( [
Ġha irst
ĠTrans actions
å¼Ģ å§ĭ
Ġstd Class
uent o
G IS
_c od
Instruction s
C alls
Pointer Type
ĠR w
Ġassort ment
ĠD IG
+ r
_C ERT
Ġinst ability
Ġv ib
on as
Ġro ku
ap ellido
Ġan gl
prene ur
Ġfluid s
ise ase
Ġde ed
qu ist
_CONST ANT
Ġequ ilibrium
_de legate
ĠQuant um
re i
Cap abilities
rect angle
? ><
al ien
ĠJ ug
D NA
T ickets
Occ urs
ĠHaw k
.setHorizontal Group
\ Collection
ff iti
Ġre arr
.setVertical Group
Ġc avity
Ġadult e
Fac ade
- wh
ĠL OL
Ø °
Ġgrand parents
Sw ift
ĉw x
æīĢ æľī
if en
ff set
B eyond
// }ĊĊ
Ġw ager
Ġb ury
Ġcomm ence
reg istro
sc ient
ĠPer cent
Ġд олж
( identifier
.set Model
Ġs eldom
nt on
Ġappl iance
am us
rys ler
Ġpant ies
engu ins
Ġmim ic
Ġon Changed
Ġal coholic
.reload Data
Ch arge
ĠF ax
Ġj ScrollPane
Emp resa
Ġsh attered
x ba
Font s
? s
Ġpost season
ret ain
_r ates
Ġrequest Code
.t odo
´ s
CH K
ĠKeep ing
enge ance
Ġvs code
IPP ING
Default CloseOperation
_ raise
ĠO culus
ogram s
ra j
pc i
Ġcorros ion
.handle Submit
Access ible
ĠP iano
l ittle
AC L
Äĩ e
.un wrap
ĠCon vers
ĠLe ben
ione er
ĠMer chant
ĠJ orge
Ġembr acing
Ġvent a
á st
Ġvi ene
< QString
Ġexplos ions
Ġdistur bed
." <
m emo
ĠAb original
Ġcomple to
Tex Parameter
Ġuom ini
( agent
Ñĥ ÑĢ
ĠWh olesale
/ am
ĠBook mark
dr agon
Ġglo ve
Ġ" "));Ċ
iv ariate
now rap
In Children
.B r
Ġcon exion
Ġback bone
Ġe clipse
Ġpersec ution
': ĊĊ
/ link
ĠP ero
and as
ĠT ek
. ");
-an alysis
Ġer ad
Mar shal
Ġanch ors
og er
Ġconver gence
st icky
Ġnave g
int ern
_DE SCRIPTOR
ĠConsult ant
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ
ĠA uch
Ġer re
ÅĽ li
ĠHor izon
col a
Install ation
hot mail
C NN
.C ollectors
ch s
(tr ace
ĠEnc rypt
Ġ---- --
ĠBase Controller
Ġag ua
Ġre active
id l
Ġclass Names
ĉ Session
ĠDod gers
H ad
_l v
Is Valid
ĠHEL P
ut to
ĠVer ification
Ġget env
_p a
.b mp
: f
ĠLou ise
(' ;
/ socket
Gr anted
.c alendar
( IP
ĠP X
.R oom
Ġprogram m
ens i
Ġtablesp oons
Ġle ve
Ġmo str
.t ipo
/ an
(d i
Ġb iod
Ġdb Context
ĠJS X
ĉ results
. END
ht e
l ify
P recision
èĬ Ĥ
ARS ER
)did ReceiveMemoryWarning
at tempt
IS P
& a
_P OP
ĠT ac
Ġprepared Statement
Ġзап иÑģ
Ġow ing
, start
Ġreview er
Ġr st
Ġprop Types
Ġrock y
_lo cale
ĠStrateg ies
ĠWe ber
.C ascade
_equal To
Ġcos as
ĠDe letes
ĠMax im
Ġsh rimp
re trieve
.In clude
IG IN
ĠO E
] );čĊčĊ
.en umer
Ġco ef
_N ull
R a
ty ard
ĠSh awn
keep ers
Ġq q
_s b
om ens
ĠExec utes
# "
TT Y
ĠValue Type
); */Ċ
ĠAbs olutely
ĠT ottenham
/ art
Ġbless ings
Ġswift ly
b uster
Ġa vid
COM M
, temp
Ġ} ?>Ċ
-g rowing
Ġdeep copy
A ck
egg ies
Ġ__ ("
Ġno ir
terror ism
Ġanth em
ag ency
_PACK AGE
ĠC losure
.reg istry
Ġmamm als
< L
U ICollectionView
ĠLED s
Ġvol ley
( Buffer
_N ATIVE
lib c
impl ode
Scroll Bar
ĠMar ion
.Con tracts
_A t
ĠWe instein
compare To
ĠH ose
en ity
.create Query
_r outer
Ġstim uli
Ġ++ )
ĠCh amp
ĠBay ern
ass a
.v a
Ġdistrib utors
Ġfile private
Ġdepart ed
cc cc
@ click
ĠL unch
> L
Ġbl uetooth
.De ep
- standing
ác il
Ġro oft
ĠPath s
_iter ations
Invalid ArgumentException
.s pi
ĠUIAlert Action
uy e
sign in
.p riority
ĠEss ays
=' {$
Ġè¿ ĶåĽŀ
_s igned
.p ersist
Ġred esign
To Lower
ĠNew man
= start
ĠIsrael is
asis wa
Spe ech
Ġnum eros
hand lers
ĠW ong
Ġм еÑĤод
We ights
ĠGu jar
te il
ĠNon etheless
_E FFECT
Ġv ect
ĠO sc
Ġco ats
ĠW heat
Ġge ek
ĠPRO PERTY
w orm
_const ants
ĠB oulder
ĠP arm
co le
Ġdefault Center
ĠRou ge
: A
xc f
ĠVen ice
med ian
Ġred emption
F resh
Ġcos m
Ġfig ur
Ġref urb
CO PE
.c d
Ġch ords
ĠS gt
Å į
VP N
ĠS END
ain en
_account s
Ġtent h
Ġdiss olved
< App
ĠCover age
use State
é ro
.. <
Ġì £¼
Ġdream ing
ĠFore cast
.C ursors
Ġvis as
/ script
_start ed
Ġga str
(P RO
]; //
.T ile
* sin
( Adapter
ĠSand ra
_S IG
ard ash
ĠO val
Ġdescri pcion
(s l
ĠDes criptor
Ġ` $
/f ree
ĠKey words
Ġt udo
ion ale
(f ound
.x yz
ĠGeneration Type
_DISABLE D
( area
Ġel ites
Ġh ombre
(m essages
ĠR ac
Ġext ingu
ĠEst a
op o
. vel
mouse out
Ġconv olution
ĠHand ling
Ġceil ings
T ek
ĠAre as
.writer ow
< View
ĠCorn ell
_B IN
.in valid
'' 'čĊ
ie ż
_P osition
Ġk idding
PC ODE
Ġwatch er
lo x
Ġâ Ĺ
D ave
_all ow
Ġbis exual
Ġun ordered
ĠSch we
_se gments
Ġt earing
IN LINE
Ġund es
.g oods
.c am
ĠL W
ĉ where
Cal culator
-th reat
- alert
ĠSuz uki
ĠIP A
ĠAtt achment
AC CESS
(d type
O pp
_s ymbols
Ġdans ke
l age
or get
res olution
е Ñĩ
ĠQ Color
ĠBar rett
аÑĨи Ñı
= \'
ĠNav Controller
/ ref
(c ountry
_H DR
Ġterse but
pet ition
Ġsu f
cred its
๠Į
x m
ĠDav ies
.re ddit
Ġw oven
ĠO bl
ĠK M
ĠConsider ing
ens ored
.per iod
Ġd dl
$ wp
Ġextrem ist
; \Ċ
Ġk im
al ers
Ġspan ning
Ġco herent
Ġconse gu
.text Label
.g eneral
_d ashboard
л ение
k ick
_P ID
ĠExt ensions
reg exp
ĠCl ause
_m ov
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ
ĠR eward
ĠLEG O
A k
=-=- =-=-
ĉ parser
Ġon ze
éĢ Ģ
âĢĿ ãĢĤ
_b all
(r hs
Ġch orus
< count
as urable
Ġwirk lich
ĠEr in
ĠMS NBC
Ġet ter
ĠC ron
_F LOW
Ġ, čĊ
Ġcal idad
ĠFile Writer
ĉ stmt
( Byte
_p at
Ġte lescope
Ġgre ed
ĠT ort
(w rite
\ application
ĉRT LR
ĠConfiguration Manager
Un ix
End Time
In cludes
ĠHar vest
en berg
ĠAustral ians
Ġë ĵ
Ġr n
Ġreput able
Ġbl ending
UL ATION
ĠBrend an
d ad
Ġm ø
ĠW oo
_d c
U ne
Ġr ue
with in
ang ep
Ġp ouch
\" ",
ĠS ic
âĢĿ ),
aly ze
ĠG ef
c overs
Ġd bo
replace All
ĉ Logger
Try ing
[ state
-p iece
éĸ ĵ
beh avior
all ows
l rt
_p ython
ert ura
-c ountry
ĠT G
.UI Manager
b ens
ale x
ĠBre itbart
b ac
Ġpredict s
Ġg ab
Ġcard inal
.Time Unit
ĠVis itor
ĠM ing
Ġliv re
Ġparent Id
port un
Ġdimension al
ĠV est
en ic
à ³
Ġ Ùĩ
ĠBL UE
Ġitem Count
Ġfe athers
ĉp stmt
ĠPol ar
{ //
und i
Ñĥ ж
z ar
Error Response
ì ĥģ
Rep resentation
* _
+ ]
pre pend
Ġ' >
Ġlegitim acy
Ġo o
S linky
Ġnation als
. words
; p
tr ap
oman ip
Ġc ues
Ġgradu ating
Ġsem aphore
"] );ĊĊ
ace y
RE ET
Gr ab
ĠFel ix
( Id
_ne ighbors
Ġmeaning less
(d el
Ġj eder
ĠContent Values
.abs olute
/ cl
Ġx b
dat um
Ġtort ured
Ġrub bing
S cores
ĠðŁĺ ī
Ġav ons
Ġam sterdam
E OS
H al
Ġtrust worthy
# =
.EX TRA
Ġman o
is icing
-s upport
ĉc ursor
ĠSp o
aim assage
M ission
[] {"
Ġprint ers
G REEN
Ġt eg
Ġabdom inal
! ĊĊĊĊĊĊ
.Sh ort
аз в
ĠGift s
} ")
(b inding
x ce
âĢ ij
inf os
Form Data
Ġd art
Ġele ms
(in v
Y L
t in
GEN ER
á» ¯
ĠT aken
uck le
: e
Ġspect ral
.b aidu
/ ');Ċ
Ġgre edy
es ion
,,,, ,,,,
Ġ/> ,Ċ
Internal ServerError
NSNotification Center
ĠA i
Ġsp it
Ġaug mented
Ġstandard UserDefaults
FIN ITY
R ace
: C
ĠRE CORD
ĠHigh light
Ġ' `
Ġdef icits
Ġne i
Ġresearch ed
T a
Ġc opp
.Get HashCode
): čĊčĊ
On Click
ĠWell ington
Ġrev ival
æ¯ Ķ
éĹ ®
ĠN SS
Ġfor n
Ġint é
ĠKu wait
_fl ip
_ bo
_ \
Ġocc urrences
ĠScient ists
S RC
og ens
igr ant
RE MOTE
ĠS ID
. opts
u ve
() ])Ċ
Ġlibert arian
ĠGl ide
les en
Ġform e
ow ania
Ġannoy ed
Def s
ĠExec utor
Ġcast s
.set Checked
ĠSh aring
.Serialize Object
Ġselect ors
_ OTHER
ë¯ ¸
(s uper
( OS
_VER IFY
id unt
< header
Ġ/> ';Ċ
Ġvidé o
ĠNeg ro
ĠL ords
ĠT ours
Ġsoft ly
.re ceive
ĠE RC
Ġdata Set
Bad ge
ĉ Event
Ġper l
Ġ{} \
(s entence
Or Update
Ġdim inish
P IN
(d raw
.To DateTime
.Equal To
(p in
-p encil
lu ent
ĠCall er
Ġplay ful
- '+
x ca
sw ick
){ }Ċ
}: ${
ĠM eth
.get Cell
.b reak
Ġy max
='
- json
Ġprime iro
Ġind ice
ãĤ £
ĠUN ITY
( ab
ÑĨи и
_H AVE
-year s
ĠErd ogan
-st ack
Ġdis charged
Ġbreat htaking
Ġgrass roots
ĠAs ide
h ell
Ġsn akes
/ logout
Ġmin Width
ĠH ear
ĠSton es
ĠWis dom
ĠEven ing
_bl ank
ĠProm otion
ĠM MM
ĠB ars
ãĤ ·
n j
_T I
ĠSocial ist
ĠE G
- opt
=\" $
(d ialog
Ġbeh old
Ġintr icate
Ġerect ile
Extract or
Ġs cl
Ġcl as
(h istory
ident ally
Ġpne um
R and
ĠL aptop
call er
ĠF lood
open ed
udd er
ĠGet ter
_w alk
( weight
ĠAlexand ria
Ġtable au
V ari
Ġ --------
èĩ ³
ew orthy
Spec ification
Ġthreshold s
(" ");ĊĊ
_f our
ĠSad ly
Ġ(_ )
ism atic
ĠJ ail
toHaveBeenCalled With
.m ar
Ġpre views
Ġsca ff
ind icator
Ġcode cs
Ġaut oc
(r t
.get Hours
ĠR H
ĠSur ge
iv amente
Ġcont ender
CppGeneric Class
Ġ;; ^
::* ;Ċ
- record
Ġm ama
Ġimg s
.is Loading
Ġneed les
Ġencuent ra
od ata
ĠBuffered Image
ĉ java
ĠT omb
UN ITY
Ġlinger ie
ĠJama ica
bug s
** ĊĊ
ĠM ao
.begin Path
Ġprostit ut
ĠPhilipp ine
_s f
_p ow
ĠS cho
x de
' ét
âĢĻ aut
ais on
ĠFile Info
turn stile
d ream
Ġi Var
s yntax
ill iseconds
profile s
_REG EX
Ġд о
ĠComm un
B et
ip zig
ĠM emo
.id s
Ġphotograph ed
Ġapprox imation
: variables
Ġmod ificar
_SM ALL
ĠH emp
Ġdis respect
Ġcont ested
Ġinnoc ence
ill is
S ymbols
Ġinspir ational
Ġdiscipl inary
ĠPer manent
Ġdes cr
ĠUN DER
Ñģ Ñĭ
press or
IM ER
Ġmount s
Ġmor ally
_SE COND
.file Name
ãĥ Ĺ
Ġconstruct s
ĠS UN
ES P
Fin ancial
ĠN ur
ô le
ric ular
ĠUser Manager
ibil idad
Ġon Response
Ġfilmm aker
Ġal ot
_THREAD S
Ġenvironment ally
................ ........
Ġr ash
ĠLy rics
Ġip airs
Back up
Sign up
Ġ@ {Ċ
J Unit
work flow
ĠCom pletion
Ġint uition
ð Ŀ
Ġm ia
ĠSn ackbar
ĠT in
ĉ instance
ĠMus ical
Ġwel comes
Ġred raw
_col our
_REAL TYPE
_s ince
ĠByteArray OutputStream
-d emand
are th
.p ad
se k
', ...Ċ
-f ire
. |
Ġnum b
ĠDO UBLE
AM AGE
ch mod
- il
Ġalarm ing
C op
å¤ ĩ
inv ite
_ITEM S
Ġle uk
Ġre el
Ġfulfill ment
Rest ore
_ rr
( classes
Ġp aging
ym ax
r apped
íĻ Ķ
}` }>Ċ
ĠH iro
( TRUE
as urer
Ġcu er
U ber
. Operation
Ġol an
Ġthr illing
< Response
ĠF emin
Ġtravers al
Ġp oc
Ġset Status
decl ar
std afx
Ġaddict ive
ĠB tn
Ġexplos ives
ĠCook ing
ĠPl aint
Ġaccum ulator
ĠApp ointment
, password
ĠF AR
lu et
Further more
decl spec
_Static s
.D ictionary
"> '.
ĉ valid
" ",
In strument
> J
Ġno str
ĠR ift
_P ort
Ġvec es
[ ['
Ġrall ies
- series
Ġv v
. uc
Ġr tn
State Changed
( ins
ĠCl a
------------ Ċ
c us
ĠRel oad
//---------------------------------------------------------------- --------------------------------
.se conds
_dest ination
Ġscrew ed
> c
Th ickness
Design er
Ġgr ids
n Äħ
( cookie
T rip
-M obile
Ġv oll
Ġgen ital
Ġconf isc
ĠConfeder ate
Ġweb View
Ġm ise
Ġcl er
(se lection
$ date
Ġshar pen
rag en
And Update
Ġrem ix
Ġh tons
R W
M PI
Ġretrie val
Ġric hest
.Dec ode
:init Components
ĠT Value
S aint
@ include
ĠPER SON
.se p
ĠLD AP
g ba
Ġgro ÃŁe
Ġreli ably
ĠD FS
.getItem Id
Ġprés ent
.get Token
Ġch inese
ĠMe al
Y OU
"> =$
( choice
Ġphenomen al
ĠSte ele
 ¢
ĠPackage Manager
ĠSynd rome
Direct ories
iv ar
.un subscribe
lie ÃŁ
mon o
_connection s
_pres ence
yn y
Kn ife
Ġgro ove
Ġsco op
TEM PL
as aki
.ham crest
Ġhar bor
c ov
* z
ĠX u
Ġpro posing
ĠFR AME
Ch ip
ĠE en
Ġìł Ħ
Ġsm ashed
Un signed
( ..
_f inished
Ġget Status
Ġfib re
Ax es
Ġ'/ ',
y ards
M DB
- bs
int ent
Ġboost er
.d st
.Dialog Result
ĠM ets
Ġbe asts
incre ments
.k afka
UIAlert Action
- ever
_b al
Ġh elt
Ġfre open
ĠRec ruitment
lic ts
forget table
Display ed
_V ENDOR
Col lege
ASC II
ĠS ink
ĠM aced
Ġc tor
Ġest ão
ĠWinds or
_check ed
_d etect
att end
Ġx min
Ġind ispens
/p erson
_DETAIL S
RED IT
H ay
ab olic
Ġfunct ools
ia is
FT P
_R ect
ĠInd y
- public
oh an
_man age
Com puted
ìĹIJ ìĦľ
ĠS lice
Ġg ays
Ġa lex
a its
Ġreceipt s
S PEC
ĠBE FORE
ĠP refix
_vis it
Ġsp un
LET ED
Ġd ow
Ġlegal ization
abb age
Ġcl aw
ĠT cl
x ima
Ġco vert
N i
Ġthank ed
Ġallerg ic
lo ver
ĠBre ast
.is Active
Ġgeb en
VER SE
Z ONE
ĉ Result
'). '
Ġg ee
ĠSer iously
pur ple
ĠEsp aña
if ie
-p ack
Part icles
Ġ'/ ../
Ġmult imedia
aut ocomplete
ĠTH READ
Ġrefer encing
reet ings
Ġqu oting
Ġassist ants
jen is
h appy
Ġl ays
lib ft
x da
Ġf ou
pi ar
Re commended
ĠBird s
ĠW arranty
ür lich
.IN VISIBLE
_ anchor
âĢĿ :
F ant
_def s
Ġdream ed
Ġ______ _,
pl a
ä ft
od ka
ı s
Ġd addy
s chemas
= zeros
Ġr att
ĉĉ ĠĠĠĠĉ
ie j
Ġdr ills
-
AB A
.l inks
ĠDependency Property
.l ow
he ed
_BL ACK
/ Admin
Ġam igos
ing ed
ĠMic key
.Get Axis
ĠNeed ed
ĠEnc ode
érie ur
ĠMan ila
ĠCol leg
ad astro
Ġch icas
ä½ ł
Ġones elf
xe a
du k
Ġg w
urg ical
ĠCent ro
Ġa es
fe el
Ġt rot
Ġelectron s
Ġritual s
ĠB ilder
Ġdecor ate
ĠToken Type
Ġl ure
Api Client
gr pc
ĠO rc
Context Menu
P REFIX
-th emed
_f ifo
.InputStream Reader
_spec ific
ĠD SP
=sub process
/s he
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĊ
Ġda unting
Ġclear s
ĠM oves
Ġmyst eries
-b est
ĠV u
ol ib
ĠI sh
Ġcar act
( Label
ĠDe bian
ĠEx perimental
Ġc av
.To Decimal
ĠRh odes
ĠHaw ks
Ġf ountain
_P ENDING
_S U
Ġwx String
ĠP ew
.c li
ÑĦ оÑĢм
.web kit
_C N
Ġ;; =
ĉ namespace
Ġw Param
Ġpup pies
Ġtermin ology
Ġadd icted
Ġfor ge
ĠGard ner
Ġp essoa
ĉ ResultSet
Ġatt enu
ang ement
_ inds
Ch i
ar ith
Encoding Exception
m ousedown
ĠBET WEEN
we igh
" For
. dd
it el
Y O
ĠD ice
un ix
ĠOb t
ĠC edar
Ġspec imens
p orn
Ġun official
é» ij
s ometimes
ĠBul ld
tr ust
get Result
Ġsm okers
Ġsandwich es
Ġex h
ĠF ade
_D C
Ġmasturb ation
fort awesome
TH ING
_ android
Ġded ic
-s ensitive
Ġnack t
LIB INT
Ġag on
ĠDIS ABLE
ones ia
b ies
ĠZ IP
Ġha unted
Ġc uid
/c art
k os
ĉRT LU
Ġh inder
Ġadip isicing
I ENCE
.b ank
ĠCy prus
m ixed
.c y
-s ingle
< len
Com ing
Ġfault s
Ġfore see
get line
" a
Ġbr ag
Ġdisc s
Ġr ipe
Ġn ær
ĠG G
SH OT
der abad
( edit
To Left
[] );Ċ
Ġdo Get
v ature
Need ed
ĠCh eng
cc i
EF I
Ġfe ud
Ġlun ar
.Sh ape
N obody
_TR IGGER
C y
ground Color
ĠRem oval
(b ottom
$ msg
SC II
rit z
Ġfre nte
Ġcomp ost
answer ed
ĠRod r
_HT ML
Ġsil houette
ĠQUE ST
ĠCath edral
.Com ment
ĠM n
-n etwork
.get File
.g enerator
ĠCheck out
_z oom
Ġencode URIComponent
_T C
s om
ĠSer ie
Ġbase URL
ĉ run
Ġh uh
.selected Index
ĠST AR
~- ~-
abcdef gh
.m apping
= datetime
C ool
n im
ĠDirect ive
F ederal
Ġmenu Item
ĠÐ IJ
An na
ĠRec reation
ry an
- aged
zer bai
â̦ âĢĿĊĊ
camp o
Ġmini ature
det ach
mean ing
_ emp
Pe ak
Ġb cm
ĠHung arian
ĠC ascade
Ġs acks
Ġtr uncate
ĠâĸĪ âĸĪ
Ġwh ales
Ġsort able
Ġassert s
Ġse als
ocy tes
] )))Ċ
al arm
ress ing
(s ignal
Ġem peror
ĉ ON
commit tee
Ġtr ilogy
.Transaction al
G row
_u art
Ġsw ings
Ġspect acle
âĢĻ av
ĠSent inel
Ġ ÙĦ
ĠT ou
Ġwid ow
ger ald
, uint
Ġunus ually
< Card
ĠRest art
m or
ãģĤ ãĤĬ
ixed Reality
Ġhand gun
âĶĢâĶĢâĶĢâĶĢ âĶĢâĶĢâĶĢâĶĢ
Ġlith ium
Res olve
get Bytes
/ functions
Ġtack ling
Out lined
Ġ}
ĠSex o
ĠAn k
Ġr ationale
remove Attr
Ġmunicip ality
Ġassault s
CHO OL
ĠRe e
Ġb aud
¦ ¬
Ġenh ances
ĠпÑĢ ÐµÐ´
Ġcon cess
.inst agram
.get Response
seg ments
Ġwell being
};ĊĊ ĊĊ
h ung
ãĥ Ĩ
Ġrenov ated
.ex pected
Ġrad ial
Ġcomm unal
user Manager
+ a
Ġfundament als
.T H
è Ĥ
Ġr ant
ĠStr aw
ĠOle Db
az io
Ġh amburg
Ġpaint s
Ġth umbs
ĠNull PointerException
Ġg roupe
ĠHome Component
Ġbal lo
ĠINIT IAL
_ are
ĠP es
urs es
Ġbard zo
.get Length
am oto
.notify DataSetChanged
ien es
en zie
_ emb
um ni
sm ooth
ĠD ro
p aste
ĠN arr
---- ĊĊ
Ï ī
ĠA utor
Ġout ros
ĠL ABEL
.p a
.St udent
(X ml
Ġethnic ity
ĠI vy
ãĤ Ī
_f ake
? (:
upload ed
get Manager
-Q aeda
od iac
Conn or
ih an
M AT
(m id
ĠAl ban
Ġso ir
Com bo
ĠPublic ation
op oulos
p is
Ġtemp les
ong yang
_cl ients
Ġro ds
Ġx c
ij ken
Ġre ap
Ġä¸ĭ åįĪ
ĉ connect
F ocused
, count
iet et
Ġh acia
_alloc ator
Ġtoxic ity
(se quence
Ġnuest ros
ĠPrincip les
Ġl le
alar ia
.write String
ĠA FL
if ndef
ĠD os
ÅĽ cie
ĠAg gregate
Ġsacrific es
_offset s
ld b
Ġl atch
Ġfull screen
miss ive
OPTION S
ĠTele phone
Ġar senal
je jer
ĠH osp
Ġfavour ites
r ive
.in crement
Ġb v
ĠFant astic
.s ay
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
Ġmedic inal
ĠD ROP
Ġp ity
met is
Ġw ollen
Ġbe f
_B l
Ġ> >ĊĊ
b ower
Ġsw apped
/ install
Ġs inks
etr ize
Ġdecl ines
ĉm ysql
ĠC String
ĠMotion Event
.L anguage
R oad
ÑĤ еÑĢ
asc imento
')) ->
. about
( editor
ĠR atings
in come
Å¡ e
.de queueReusableCell
ĠAust rian
Ġs ulla
ĠTrib unal
ĠDid n
ов аÑĢ
Ġins pections
B oss
Ġcock tails
Ġapolog ized
_sub plot
op al
+ =(
Ġreson ance
ib u
Ġë ¦¬
rom a
res erve
pl s
ĠT ah
ax ies
OP LE
ĠDar ren
ĠZ ombie
_M ap
Ġ] )ĊĊ
ĠQ i
ĠS ail
Ġrestrict ive
Ġeros ion
- par
WH ITE
Ġold u
Ġap erture
Ġbit coins
text o
ĠCom cast
Ġtime less
en kins
Ġfeed er
/ tmp
res den
+' _
.D estroy
Ġç ok
ĠD OCUMENT
.l ng
.tag Name
Ġk ullan
eg rate
Ġ(* .
ç¼ĸ è¾ij
Ġhand shake
s oc
_ geometry
ĠDam ascus
Min or
ĠK afka
ìĹ ¬
Fl orida
_com pute
.ex pr
Ġpar alle
ĠD iaz
c ir
[ target
Ġj oking
Ġgl or
(set q
_hand lers
H ang
Ġf err
rim inal
ĉĠĠĠĠ ĉĉ
ent ies
def ines
-t ax
json p
ĠU PS
met ro
__ ;Ċ
ĠUg anda
])) :Ċ
_t d
x ae
l w
. OS
ĠLog ged
ac id
ĠMay o
as pect
Ġvag inal
Ġinitial izing
Ġster oids
f iction
G RE
g end
Ġli abilities
ĠL ets
M ech
( nc
( change
Ġconnect ors
: k
Ġt ast
! ");ĊĊ
th ings
ro phy
luet ooth
ĠSign Up
. ctrl
Ġthere in
ord a
. escape
ig ator
Ġpet rol
Ġspec imen
Ġdeb uted
- Pro
Ġcr ises
.add View
ëı Ļ
-d oor
Ġmon et
Ġmill is
Ġv ier
Internal Enumerator
Ġadmin s
ĠL air
z in
get Query
umb les
L IMIT
ĠV ig
_s ong
< Character
:: .
_h om
_b p
ĠSup ervisor
sub mission
ab ile
Ġno i
Or Create
Ġpe el
Ġon Start
Ġsent iments
veh icles
Ġclass rooms
Ġs zer
Ġb ending
Ġlong evity
Ġa cl
ĠAle ppo
ĠU M
ĠR icht
Ġmultip rocessing
DOM AIN
"," +
_Y EAR
Ġsc rape
Ġsol itary
Ġ"] ";Ċ
/ errors
ìŀ ¬
ľ ëł¥
b etter
ĉ number
ĠL F
ĠAc ross
Pub Med
\" "
ĠExcell ence
Ġus ando
ĠU IP
Activity Indicator
_V OID
Ġbre eds
ï½ ¥
uest as
ĠTre asure
ustral ian
(f ace
ĠT ennis
ĉ Int
ĠHans en
ç µ
: I
Ġâľ Ķ
GR AY
O USE
Ġhe pat
ł í
A IR
ó ż
Ġque ued
vinc ia
ĠChrom ium
Ġcompet ence
ung al
ill i
Ġget By
ĠF inder
Ġincap able
Ġs add
Ġc ites
ĠChurch ill
S dk
More over
As pNet
( Float
$ password
ĠConn or
-s ession
_d m
* ))
Ġde utsch
ĠN X
Ġper ks
_S ORT
_TO OL
_V ISIBLE
.as p
æĪ ĸ
ĠBre ath
D etect
ĠD uel
.c mb
[ it
.Set Bool
Ġnarc iss
Ġab ide
Ġej emplo
ĠâĦ ķ
Ġm ornings
Ġcomput es
.s sl
j t
Ġmuch os
_S S
[ end
Ġbas in
Ġalgun os
ĠCroat ia
lin ewidth
(t ags
(h idden
ÃŃc io
Ġap ar
ĠÐ ¶
ä¸ İ
. food
ĠR ural
Ġbread th
å½ ±
(s ess
+ ")
ĠP aste
Ġserv idor
ĠBit Set
ĠTr an
la us
v ette
ey es
ĠCL ICK
ĠV III
ĠTurn s
ĠLe Bron
ĠM uj
ĠD eg
ĠAdult s
_s uite
process able
ĠPH Y
g hest
.F ail
ĠSl ack
ce j
\ Carbon
Ġsuper star
Ġhold ings
( forms
Ġ'# '
M ultip
("[ %
-s olid
/ url
-t ier
[ length
ĠStream Writer
ĠMarket place
get text
_T ICK
ĠFor ge
Ġblack jack
ĠDO ES
ĠM atters
w aves
Ġwhisper ed
Ġl ush
ìĺ ¤
d igital
Ġwr ink
ĠH ogan
Ġrust ic
.Apply Resources
ĠHard y
os omes
A UT
.ST ATE
Ġnarr atives
ĉ store
b ib
ĉ Scanner
ĠC ody
\ Repositories
Ġre union
and um
âĢĻ h
Ġsn iff
NS Bundle
Ġcompreh end
_US AGE
_ occ
URRE NCY
J NI
Ġspecial izing
Ġvis ions
Ġdol ore
Ġv á
ĠChe vy
ĠSt yled
imp act
all en
Ġk art
ĠTable t
st uff
re esome
аÑĤ оÑĢ
//---------------------------------------------------------------- -----------Ċ
_Ad min
Ġcell phone
Ġaut oplay
Ġcamb io
Ġmar itime
_BO OT
- quarter
Ġlat ina
ĠAJ AX
e quiv
ĠFront ier
ĠX Y
} ]Ċ
ĠR ough
.pro to
Ġcorrect ness
Ġfac il
ĠRe ached
ãģĿ ãģ®
V IS
.p s
Ġstr ncpy
Ġdiff usion
.start Activity
�� �
Ġaccom p
AMES PACE
imon ials
ĠBl ast
aby rin
Ġd ome
Ġextr av
Ġy en
Ġcul inary
P RI
ĠComm unities
n id
_oper ations
.h s
ĠMil ton
Ġno ises
Autoresizing Mask
(c id
}ĊĊ ĊĊĊĊ
] },Ċ
ĠD etection
tab la
Ġlib erties
_D YNAMIC
w get
ĠT ür
ĠP ascal
Trans parent
Delay ed
] ()
ĠHer bert
< ActionResult
ch allenge
Ġmush room
.insert Before
ĠR in
Ġhum our
Ġf ø
api Key
alloc ated
Ġconf ession
. ",čĊ
ĉassert That
ĠS ORT
ĠL ORD
Ġexport er
.set Level
p okemon
ash tra
Ġf é
ur ator
(M SG
Ġt up
ĠH ull
Ġyield ed
.Sub ject
\ Route
! ?
ĠÑĥ дал
\ Security
- ar
Ġalleg ation
( Settings
ä nder
Ġell ipse
ĠRetro fit
Ġregul ating
ĠM olly
ĠL ok
_C ustom
ĠProm o
is in
Ġres umed
Ġmet ropolitan
.error Message
: -------------
.m l
sc opic
.ref s
apt ors
ĠIn struments
Ġpropag ate
} ->
Ġpas ado
th ank
_De lete
ĠBright on
, unsigned
ä½ľ èĢħ
Ġaspir ations
-h ow
R ose
= ((
_ne eded
_pl ural
< Application
ĠW EEK
ĠUn lock
ĠT EMP
S ou
Ġschizophren ia
Ġt roll
Ġcomplement ary
ĠNET WORK
Ġbl ir
Ġprogress Dialog
" %(
ĠAttribute Set
ĉ ts
.iter items
è¯ Ŀ
Ġesc rit
v ous
_pl aces
H K
Ġseg uir
_f w
ĠR ounded
Ġdis posit
è§ Ĩ
par m
w ow
STRU CTION
. allow
ĠChar Sequence
ĉ extern
Ġprosec uted
Ġmort ar
ĠJ uda
- msg
Ġest ud
.get Description
Ġs ow
amb re
Ġrom a
En h
bon us
Ġsqu at
Ġdist ra
ed Image
Ġpe ppers
-per formance
, ĊĊĊ
, file
ĠM IME
_con cat
AB S
-f ashion
Ġunder cover
One ToMany
Ġre claim
C OPY
Ġb inds
ĠT ape
Ġg ossip
ĠEqu ity
/ Card
. activ
' am
Ġdrain age
< Scalars
ĠonBind ViewHolder
() ?.
Ġs orrow
ĠI b
up y
_U UID
ĠCh arm
ĠElection s
.on Destroy
ĠInterest ingly
ounding Box
_d etection
-h eld
_ unknown
Ġrefr ain
Ġmét odo
Ġe Book
EN OMEM
Ġd ang
Prof essional
Ġd ictionaries
/m ysql
ĠST UD
Ġmas se
s cape
Ġdre i
: name
.log o
Sign Up
Ġt ahun
( theme
ĠFem me
Ġbom ber
ĠJ ade
ĠT ay
Ġsubmar ine
_cl ause
zy ch
Ġsimult aneous
Ġcas os
. boolean
(l hs
Ġcontin ental
-s ale
ĉ env
ĠC ute
ĠFactory Girl
ab us
/ value
Ġj adx
Ġst ern
> >ĊĊ
Ġsurf aced
Ġìł Ģìŀ¥
pl atz
ĉ email
cept ors
"> (
Ġep ile
è¯ »
ĠDe bt
åij Ĭ
N OP
" https
: j
Form Item
_L ICENSE
.get Double
ĠAg enda
ĉf inally
(f ilters
( av
ç¾ İ
AP ER
Ġl ava
еÑĢ Ð¶
)) ))ĊĊ
Ġfault y
_n m
Ġtr ava
(B itmap
Ġspeed ing
> ').
Ġscreen ed
_ roll
ĠMac Book
ĠA UD
Ġdiagn ose
.G enerate
Ġ^ ^
Ġstr s
[ Test
Ġr ansom
ĠDH CP
eld en
Ġinterpret ations
() ].
flat Map
Ġline Height
_m ount
ĠW izards
Ġsl uts
eh ler
od al
Ġmilit ia
å ²
earn ed
Ġmis ery
int val
f und
Ġh ides
Ġdi arr
ĠWes ley
Ġx mm
Ġqu em
ĠAr abs
if th
ategor ized
Dis posable
P ure
_NOT IFY
sn ippet
ĠGar rett
.run ning
. weights
Ġ( --
Ġin variant
äºĭ ä»¶
ĠAll owed
dir s
Ġpass ions
Ġl ad
ĠFl ush
men us
: block
Ġcompr a
.ch omp
alloc ator
Ġcur ated
ĠKnow ing
ĠPatt erson
Ġtel ah
' ex
Ġdo omed
Ġphil anth
ott y
.st yles
Own ed
Ġallerg ies
= params
oc ese
it elist
ĠS ending
b ef
orr ar
ĠN ão
ĠF argo
ĠL ub
ĠComb ined
_g iven
ĉĉĉĉĉ ĠĠĠĠ
Ġreconc iliation
Pattern s
az ard
Ġbiom ass
ĠH ouses
resp uesta
cc o
/top ics
ĠY uk
Ġweaken ed
_c alendar
Ġmulher es
ĠMar l
Ġs ine
ĠT il
ĠSou ls
ĠDe utsche
ĠF OLLOW
Ġpip elines
ĠBever ly
_DIP SETTING
" #
ĠPro to
.b ig
ĠSav ings
ĠT anz
j un
ĠG amma
ĠS add
Ġadvis ors
Ġro ast
Ġun ters
ud ies
_l on
-point er
ĠElement Ref
\ Builder
example Input
.web driver
data Type
ĠQu ite
ĠCelt ics
u il
-def ense
b ish
ĠUI Window
ĠS uddenly
.h ot
.re ason
Ġg ör
AM D
.M ulti
auth enticated
reg ions
; (
а ÑĢам
ĠKir by
$ route
PREC ATED
ĠDur ham
ow o
ĠPer forms
Ġdisreg ard
n st
ĠP ols
Ġget P
"] :
-col ored
( Keys
ĠAl leg
_mod ify
_ loading
str ained
Ġat roc
_p hr
< Sprite
Ġsatisf actory
m anship
.p ipeline
T ony
Ġth ief
pol ator
( lock
bur st
ĠOptim ization
Ġsurf ing
" Yes
Ġdesc ended
æ Ĵ
_C lear
Ġc ries
ĠFro zen
D IRECT
- Con
ĠLe icester
å¥ ³
O OM
= db
Ġget Message
< Student
_b atches
.M ask
_ eth
\ )
Ġsom a
C atch
[ ch
Own ers
ind le
: auto
. vert
iv r
.set Location
Ġfl uent
_END IAN
ĠCar lo
cept s
add Action
.o auth
< UnityEngine
re ements
.S kip
? )ĊĊ
.default Props
Ġc abe
ĠSh en
eros is
ĠPro fit
Ġpo is
_C REATED
Ġremove From
(w s
? action
( Field
Ġerr one
.min imum
ĠRetrie ved
Ġd ado
ĠPR IVATE
-s pec
Ġg zip
p data
Ġpos Y
(l ow
Ġqual quer
/ cloud
ê² Į
( common
ĠAr beit
organ isation
Ġtid y
ĠRol and
( ph
.z one
Ġgent lemen
ượ c
å± ±
Ġenc losure
ĠMan afort
ĉ Color
St encil
N ic
Ġthe orem
ĠV G
Ġcol oured
V BoxLayout
uls ive
Drag on
c ff
et est
ens a
of day
.A zure
:UIControlEvent TouchUpInside
_up dates
Ġtrend y
ug as
weak Self
Ġr idge
ib ri
Ġì¶ Ķ
(C G
ĠMon key
.write Int
.tim edelta
ViewController Animated
ĠProvid ence
ãģ Ī
Ġbl ends
/Sub threshold
ĠAp pl
Ġat an
Ġreload Data
umb otron
st üt
O Auth
ĠG iving
ĠìĦ ¤
ĠFinn ish
check ing
. Embed
sequ elize
Ġinitial izes
ĠOs lo
Ø ¶
get Extension
_AL T
(bl ank
Ġfatal Error
Ġdem ise
**** *Ċ
ĠX S
(A F
ĠEn s
an tha
ĠP OR
Ġn ich
.N amed
Ġgig antic
ĠObserv atory
.Res olve
ĠPay ments
g uild
Ġcurrent State
============ ===Ċ
ĠS ey
p Data
Ġdead lines
Ġcentral ized
ĠScholar ship
_s upported
.ch rome
() ]);Ċ
Ġc yan
ĠC age
Auth ors
_ čĊ
/ os
k im
de e
.t ex
Ġyours elves
Ġm gr
Ġal k
-inst all
Ġdraft ing
Ġrum or
Ġstat ues
Pool ing
ol ina
AAAA AAAA
/* ----------------------------------------------------------------------------
Ġextrem ists
Cal cul
ighth ouse
In set
(IN PUT
Ġsynchron ization
iv irus
. axes
ĠG ap
- An
_T emplate
Ġgam er
ĠCr icket
Ġl int
Ġauthor itarian
NS UInteger
Ġred o
Ġadip iscing
_F ETCH
che id
ĠF ang
. indices
t one
д ел
Ġ{{-- <
bra him
Ġsal a
get Code
Ġcommunic ated
start sWith
ert z
Read able
Item Id
oref errer
cred ible
á ria
Ġcombine Reducers
** /ĊĊ
Ġbl iss
Ġad orn
dep ends
ĠRO OM
Ġfr aming
Ġ? ',
aut y
_p ot
_t abs
Ex act
, ",
Ġ'} ';Ċ
Ġarbit r
ahr ain
.getString Extra
Ġ$ \
Ġoutput Stream
Ġcomm enc
an us
ch y
< Employee
Ġhex atrigesimal
Ġn acional
(serial izers
_put char
_S AFE
ential Action
ItemSelected Listener
.Dis patch
Conf lict
_ about
os aur
Bound ary
Ġclear Color
( Location
ĠMON TH
ĠT aste
- General
ĠW AR
Ġer halten
-s aving
Ġcou pling
-tr igger
m otor
Ġy yyy
ĠPat ent
pt o
Ġmisdemean or
vas ion
ĠAdmir al
à¹ī า
_P WR
Ġdevast ated
fol ios
ITU DE
urre ct
Ġrobot ic
ĠSan ct
ĠHawai ian
.R oute
- condition
Ġr k
/**************************************************************************** Ċ
create Element
ĠK op
ign ant
. rollback
Ġsal ud
_ ',
ĠAN SI
Ex cept
ĠDraw able
.Utc Now
":[ {Ċ
Ġk ole
L ua
ĠBel ieve
Com put
Ġhall uc
ĠSign s
r st
.h u
ĠKN OW
W i
ĠBr ass
ĠR as
@ hotmail
Ġsed iment
Ġap k
Ġì ĥģ
_reg ions
Ġpod ium
< Book
ж е
Ġsix teen
ĠAli as
Ġinfr ared
ĠV ander
ĠLe ading
uc ing
,: ,:
_h or
w at
Ġdé cou
_W idget
S ounds
_n avigation
Ġschn ell
(g enerator
uc ene
Ġrem ake
IP v
Ġré al
_IN CREMENT
Ġhypoth etical
_ ang
Ġof s
Ġ! Ċ
.com pleted
Get Type
Ġkom men
ál ido
add On
Ġz ÅĤ
UL A
_ind icator
'] ĊĊĊ
ap ache
_S elect
ĠGre ene
Wh ats
_an im
Ġrepet itive
m uch
ĠTh reshold
Ġl f
(C ategory
con e
M ix
_MET ADATA
ays ia
Ne ighbors
ĉĊ ĉĉĊ
IP HER
ĠFr ag
ĠC ells
Ġnames paces
( back
ĠRest aurants
sv c
Ġл и
ote ch
-s l
¥ ¿
ĠW T
ĠRed uction
Ġd otted
ĉf ound
ĠTE AM
B orn
ĠM ush
ĠCompar able
Ġh itch
AT O
Ġmax Height
begin Transaction
ÃŃ v
_b n
Ġher d
Ġrevers al
ĠH ond
del imiter
Ġconf use
Ġh ops
Ġcent roid
Ġcourt room
.decor ators
Ġm pi
ĠImpro ved
IN NER
ĠBang alore
ĠT amb
Ġbo ast
() ))čĊ
Ġil licit
ĠMor occo
greg ator
_res ume
Ġcrack down
Ġport raits
/h igh
( \'
Ġay ud
_fe edback
Ġc ate
/ avatar
Ġhe b
Point Cloud
Ġå ĴĮ
Ġ< ![
Ġget Resources
} :{
Oper ating
ĠF og
ĉt ab
ĠResearch ers
Ġfabric ation
.datas ets
ĠCamp o
ĠKa uf
Ġd ll
lig t
] ));ĊĊ
st ellen
ACK ET
l vl
ĠGl ory
.date Time
Ġcomm ute
ĠonCreate ViewHolder
ĠX Element
ĠT okens
< thead
_p ick
ì ¤
v on
depart ure
(render er
phone Number
(P erson
gen es
ĠL ars
Ġ) {ĊĊ
ĠJson Result
Ġmet odo
VO KE
.get UserId
Acc eler
ĉ required
Ġchampionship s
Build Context
/t ask
/re leases
C ategoria
_over lay
Ġscar ce
_l im
n gr
ah len
ĠArt ificial
sp read
Ġbow ling
.an alysis
SM TP
ĉp assword
Ġbath s
] )){Ċ
current ly
ac iente
_se parator
Ġde ber
ĠDis abled
i ères
Ġâ ķ
_process ing
Ġprotest ing
ĠR OT
gr ab
Ġз ак
Ġpro active
word press
ĠSe ver
ind en
Ġw ikipedia
){ čĊčĊ
_w indows
is lation
Ġun rest
Ġdismiss al
.N UM
_F AST
iss ued
ĠF ACE
_u nder
Ġpl ugged
Ġå °
ĠbÄĻd zie
ĠI CC
Ġcombust ion
Ġkiss ed
Ġstar red
ĠW atts
Ġspi elen
-p urpose
ĠE val
arg es
, result
techn ology
Ġnational ity
ic us
ĠN ug
ĠÑĤ о
ĉĉĉĉĉĉĉ ĠĠ
col o
Ġg astro
ante ed
OL ID
.b ias
_t ele
.ins pect
Ġve il
. footer
Ġneglig ence
Ġjud gments
Room s
yn n
ĉcount er
occup ation
Ġ çĶŁ
un as
Ġ(^ )(
L ambda
f el
.Param s
Ġд обав
set Layout
Ġdeport ation
Ġlocal Object
ĠPharm aceutical
cept ive
ĠN ome
Equ ipment
F an
Un iversal
ĉ socket
Ġgr in
Ġex poses
Ġhab er
Ġsincer ely
Ġc ams
Ġm ü
en ia
E mer
C rypto
Sl ow
(x hr
! =(
-s ervices
ĠP W
Ġprend re
Ġm ädchen
em ons
озв ÑĢаÑī
.M anager
ì Ļ
Ġg raf
- ra
met rical
/ fl
Ġc emetery
g ens
Ġp ÅĻ
ĠMySql Command
- To
Ġv Ã¥
Ġa irst
oment um
Ġserv o
m illion
ĠMir anda
" She
Ġadvoc ating
-c aption
ĠAt tribution
Ġwel che
_v endor
ĉ Status
arr is
Ġprint k
"," #
Ġrel ativ
if ferences
izz es
Ġdec imals
ĠPro v
.max imum
Ar n
Ġhelicopt ers
_B OTTOM
ch ure
od ings
' (
")) );čĊ
( bean
.f d
F und
Ġhang s
app id
/k ernel
.p oi
.Min Value
- validation
L uke
c df
ĠFun eral
ĠS amples
ĉ de
Ġto astr
Ġtax able
Ġcl ustering
Ġ'\ '
Ġre straint
ec ed
ch ains
ãĢĤ ï¼Ī
_GR APH
Ġfue led
éľ Ģ
H p
å¤ į
T iles
Ġa unque
J C
Ġhost age
ĠE sk
Ġm av
Ġgest ion
Ġb anners
} {$
.int Value
.' "ĊĊ
_M ATRIX
Ġce ased
ĠG OD
_CAM ERA
.Allow User
tr acked
C ook
b airro
( company
Ġview point
.get Writer
ĠN ets
w ives
Ġ( ))Ċ
example Modal
ĉ child
Ġmyth ology
Ġ// "
_ axes
ib old
.D ark
ĠMax well
Ġg pointer
olic itud
B at
ul ner
bal anced
mail er
Ġcont empor
æīĭ æľº
(" __
Ġ" )"
re ar
ĠHu ang
] ')Ċ
× ©
FT A
ĠCalling Convention
ĠOutput s
P k
.Re ference
lect ual
Ġ) :ĊĊ
Ġbrace let
ug er
ĉ Error
S weet
("/ ");Ċ
h x
Ġun reasonable
Inter preter
Ġlo ft
_product o
Ġsoci etal
.P arser
ĠAd apt
. foo
( where
.F eature
ĠYam aha
g lass
For ge
Ġprohib its
Ġcapac ities
Ġíķ¨ ìĪĺ
Ġper mutation
Ġih m
F ld
el ial
======== ===Ċ
@ Configuration
Ġge ared
ios o
iest a
trans lations
Input Change
Pop ular
ĠPL US
Ġv f
_F ree
b box
Ġcaus al
PI LE
Ġsch ö
Ġiron ic
M ir
. @
åį Ĺ
Ġè ĩ
R ew
ul ence
fl en
Ġcan Activate
- response
Ġacc ents
ign ored
° F
.Dependency Injection
ĉ point
Ġconting ent
Ġsqu ash
Ġpar ms
ĠC emetery
Ġdelta Time
ĠD OS
Ġvan ished
аÑĢам еÑĤ
ĠD PS
t foot
ĠZ us
_IN STALL
G AN
Ġar b
Ġmunicipal ities
Into Constraints
AutoresizingMask IntoConstraints
, image
_ ignore
Ġdanger ously
quis a
pl uck
Ġhar us
up pe
Http Exception
Br acket
.' 'ĊĊ
ĠT ol
ĠView er
zb ollah
.Code Analysis
ì nh
Ġcorrect amente
.d a
ĠAl ger
× IJ
ba um
ĠPan ther
part icipant
å¿ ħ
-s up
Ġem ulator
Ġf ading
ĠW olver
cre ates
Ġbook ings
.Q uestion
§ è¡Į
Ġstress es
Ġre written
.PI PE
ed es
Ġc bd
": "/
Ġenh ancements
_s y
B IN
ĠSl ip
Ins pect
ĠW eg
Ġcon gregation
Ġ_ :
_r m
Frame buffer
Ġ'& #
ĠFall out
Is Required
ĠPear son
ĠF ACT
Ġrel ie
ĉ box
ĠShe pherd
ĠWiki Leaks
ĠCollect or
Ġres ized
method Name
Ġevent Type
ĠA then
Des criptors
Ġb ers
- oper
ĠInitial ly
å ¡
_B TN
ĠĠĠĠĠĠĠĠĠ čĊ
á b
_c ampaign
_w atch
F ord
-date picker
Ġvis c
Ġsat u
_s ms
Ġcont ador
-s vg
ĠDO I
$ args
Ġkn ob
.B OLD
Ġdeb ated
img s
sock opt
tr uth
ĠFe es
Ġh Wnd
_f ood
Ġab ras
Ġnot ions
ĠT od
: create
ĠConf lict
Us uarios
OT OS
Ġm sm
K HTML
([ (
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ
Ġ} ]
w izard
Ġm ientras
Ġdata List
Ġemerg es
Äĥ ng
.Read Int
PG A
ILL ISE
I Enumerator
(t uple
Christ mas
Look AndFeel
og enerated
Ġ# ĊĊ
control led
Ġex quisite
Ġa cest
Read Write
G ain
ãĢį ãĢĮ
Ġcopyright ed
Ġdo om
.Table LayoutPanel
ĠD ort
Ġch ili
Ġwer k
ĠEVENT S
ĠBe acon
Ġship ments
Ġse bagai
up on
ut om
.con verter
.Drop Table
={ }Ċ
f ic
~ ĊĊ
Ġlesb ians
_n a
Fore ign
ĉ then
/ ms
Ġor i
get Property
ĉsn printf
hes ion
ãģ ¤
"} ,"
Ġac rylic
P ers
@ Enable
I sl
(C ard
. Stack
L icensed
_G UID
: title
Ġh ust
Ġprincipal Table
an itize
/ embed
Ġens ured
ĠE GL
ÙĪ Ø±
ĠåĪ Ĩ
/ ,Ċ
Ġfundra iser
Key Name
Ġmarch ed
_VAL UES
ĠSc enario
Ġmet ic
_ass oci
ĠPast or
ĉĉĉĉĉĉĉĉ ĉĉĉĉĉĉĉĉĉĉ
er ate
Ġinv itations
quo ise
Ġbl aming
Ġd aring
UM MY
Ġrich er
em aker
ĠIdent ification
ĠìĿ ¸
ĠBinding Flags
ch as
Ġresil ient
_p g
Ġre leg
ĠI RA
ST E
Ġtr actor
- loading
ĠPre viously
ĠV acc
/ be
Ġn Ã¥r
Ġurl encode
ĠNor folk
.Re lease
ĠNe utral
ä¸Ń åĽ½
ĠAr lington
Ġalleg es
ĠW riters
Test er
ĠR ally
Ġc á
ĉ Print
Ġâĩ Ĵ
ĠUser Controller
ĠSeek ing
.V AL
List Node
_ ff
ĠPhill ip
FA CT
Ġc aramel
ĠM ultip
ĠCom pared
ĠSer bia
Ł ³
Ġrev ive
ĠK anye
Ġver ge
ĠBulg aria
get Body
Ġ| >
ce ph
.DateTime Picker
." ;ĊĊ
ĠT ie
, item
Ġm enn
G as
och a
_v irtual
Ġmaster piece
_se quences
L TE
ĠSub mission
Call er
$ \
S port
ag us
Constraint Maker
Ġcol oc
Ġw ig
ĠÐ £
ĉ Array
Look s
ĠGT A
.st eps
atch ewan
_r anges
ext Alignment
ĠBren nan
Ġab straction
uler Angles
.m isc
Ġantib odies
Ġexponent ial
ĠCH ANNEL
exp ense
' y
Ġdetect ives
Ġpur ported
Y STEM
Ġradio active
ĠLat ina
.Enc oding
.T AG
x in
D egree
ur acion
pr ices
ĠRefer entialAction
Ġr arity
Ġp iles
g ende
_project s
_g lobals
.start Time
Ġê µ¬
SE CTION
_p ublish
F ault
DD L
_p rior
M om
Ġth icker
Ġsequ elize
Ġessential s
str as
in tr
>( ()
.man agement
e il
éĹ Ń
A ware
.C ity
ĠAr bit
_D M
_key board
L Object
- webpack
ĠNew port
Ġprincipal Column
leg ant
Ġp allet
Ġfract ure
Ġg mail
.M eta
A bove
.Key Event
j it
_mac ro
_P USH
á» ©
/ controller
åĬł è½½
Ġsuperf icial
exter ity
Ġmens agem
W ind
ist on
.open api
и ÑĢов
ĠSerial izer
uct ive
Ġz ar
Pl aces
.St atic
B a
Ġin advert
ĠIndones ian
_IP V
(h orizontal
Ġget Title
ide press
ĠConsole Color
ip ers
$ out
Ġfest ive
Ġeven ings
.Get Data
uit ka
ĠManual s
uss ed
_M ax
.Ch at
ĠA ircraft
= com
FO UND
ap ro
Ġtre asures
_al ive
Ġgad get
ek ing
Button Down
B rowsable
.PER MISSION
P ASSWORD
ĠH ASH
f é
\ TestCase
LO SS
o thers
, J
Ġassh ole
wer k
Ġm ã
. ie
ev il
kont akte
//////////////////////////////////////////////////////////////////////////////// Ċ
= sys
ĉ lock
-- ;ĊĊ
_F UN
Fill Color
ó a
pre nd
Ġcompress or
M other
ĠAr cher
.g oto
Ġwür de
Ġbam boo
ï¼ İ
ĠT rees
Ġb umper
Ġsa usage
ĠEl asticsearch
Ġhor izontally
ĠG ul
Im mutable
Ġlos er
Ġabort ed
-d emo
ĠH atch
Ġund e
Ġprocess o
-c all
In come
å ĥ
_ returns
']." '
(s w
C BS
am ilies
ĠYour self
ĠH olt
.M ON
à§ ĩ
ÑĪ Ðµ
an on
ĠFont Awesome
produ cer
j r
Ġm au
ĉint er
Ġdish onest
Ġmagn a
ĠCollect ive
Ġvra iment
Ġcho ix
st ay
Ġweld ing
r ising
, min
ĠF ate
g lob
RGB A
Ġdet te
V en
Ġembarrass ment
.DE LETE
greg ar
-re nder
(b ucket
"> ĊĊĊ
.wait Key
Bus y
Ġdifferent iation
ĠC ST
.Con stant
Ġline Number
(m atches
Ġweb socket
Ġbar red
Ġpued es
M ono
C ORE
I ID
ĠĠĠĠ čĊčĊ
Ġpúb lico
lean ing
Ġcleans ing
Ġcr is
ĠDev ils
_SET TING
unt ary
. );Ċ
Ċ ĠĠĠĊ
[ curr
ts y
ĠAlex is
rit el
Ġpet roleum
.pre processing
m atter
For Result
- license
Ġtrav ellers
ĠDispatch er
enn ifer
Ġdigest ive
P ED
hib ition
MAS ConstraintMaker
ĠW att
Ben ef
.set View
d to
TE E
ĠPel osi
_EX TRA
Ġmed als
x hr
fore cast
Ġn argin
oun s
-f ill
_CUR SOR
Ġsuperv ised
Ġtur f
ĠEd gar
POS ITION
Ġcategory Id
â ī
_ ER
á»§ a
Sh own
. ll
_POL ICY
(), '
ĠPre v
ĠString Field
ĉG lobal
ass ed
Through out
o stringstream
.awt extra
Ġslo pes
ĠSe quential
Ġgi orn
Ġz elf
Ġvers atility
lene ck
.c gi
Ġdou bling
ĠBang kok
Ġbu urt
Ġusu ário
st udio
Ġje unes
Ġm uted
Ġ ips
_f raction
&& (
Ġst unt
'); ?>
ĠL iga
Ġqual ité
Assign able
Ġwork around
Ġsp ur
Ġsle w
_G E
ĠAgricult ural
Ġrelent less
( Query
ĠSe ctions
Ġreview ers
R ain
dl g
assert False
Ġnomine es
__ ).
.d ynamic
ĠP BS
Ch anging
Ġslight est
ĠM ang
} >čĊ
Ġev apor
b able
ĠPR ICE
Ġæ ³
lu cent
Ġv amp
ĠTechn ician
Ġuniqu eness
M es
ur ban
.param etrize
ĠRe play
S essions
em br
-Americ ans
_PRO XY
Ġp ian
Ġtri e
ĠD estructor
Game State
ĠIM F
ch in
Ġport e
ĠSw al
åŁ İ
Sub string
im ing
/L ibrary
Ġfright ened
w rites
Ġrecurs os
ar Result
_INIT IALIZ
ĠBad ge
_c rc
E ight
ĠDIST INCT
Ġth ro
@ Xml
ĠLegend ary
-t witter
_e asy
Ġ+ ++
(D ATA
.L ocale
Ġk ä
Ġn urt
Ġcr uis
_ ios
Ġsens ing
_L ine
Ċ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ
pon g
ole on
Ġwild card
ç͍æĪ· åIJį
Ġbeg ging
R od
ĠÃ İ
_C ELL
Research ers
. selector
_ ing
Ġaspir ing
Ġimm ortal
Ġy min
_ robot
Ġpl ur
B TC
ĠD ID
Ġpier cing
* u
_DEFIN ED
ĠTh i
ita ire
(m edia
- ons
Ġche fs
Ġ"* .
/ AP
Ġraz or
Ġsearch Data
Ġ= &
Ġ ãĢĤ
Ġm ourn
ting ham
Ġo li
ĠVern on
_R S
ŀ æĢ§
Ġf ácil
ang en
cel ain
Ġa il
le st
ĠQ COMPARE
g ain
ĠÎ µ
ĠK ob
ĠF ault
_config s
ç»ĵ æŀľ
. +
cal ar
(color s
M ul
_ ART
Ġexperiment ing
erm en
ĠAng lo
.Fixed Single
Se a
Ġc txt
.s lider
C ollapse
G rey
Ġf ld
-pro of
.cap acity
get Parent
ĠCom pliance
Ġburg l
- rec
Ġover written
M U
Ġrout ers
ĉ Model
Ġfantas ies
av ian
_p rec
ĠSc andin
Ġ// <
/o ct
Ġceremon ies
Month s
und y
Ġqu ed
ĠN ou
ĠV ibr
.r gb
Ġcit rus
Ġbr aces
-upper case
get Table
Ġdop o
ĠK err
_CH ILD
- cloud
ĉ Matrix
Ġgard ening
S ing
al most
Require ments
ugu ay
( Property
sub scriber
FA ST
re action
(l p
) })Ċ
` ).
.w allet
_ex change
.Max imum
ĠVer b
âĶ ģ
() <
ï¼Ľ Ċ
RO T
C ARD
ub it
{ @
_k el
ĠTool tip
My SQL
Main Activity
ar f
Ġm align
Ġse inen
ap ist
Ġ< %
Method Impl
M il
ĠM ick
.de pend
< ID
Ġpredict ive
ĠAP PLICATION
le f
dim ensions
Ġconoc er
/ conf
ĠTr acy
F oto
_rem aining
= file
Ġpage Index
ĠPar ish
Ġt exas
ĠM AGIC
ĠH ew
d ifference
Ġalt ura
c um
ĉdata Type
Ġcaracter es
avi ours
ĠV OID
è¿ ij
P UBLIC
B io
ĠstringBy Appending
Parse Exception
ĠS uff
ĠN orton
/d etails
.n ull
>> &
ĉ ok
-l ow
. usuario
n ested
X B
OUR S
.Border Color
Ġb row
ĠÐ ķ
cor r
ĠRed skins
.get Tag
.get Transaction
Ġst igma
hard t
ĠPlayer Prefs
als y
uc son
L anguages
ĠOl ivia
Ġt ac
Ġb li
Ġc aval
Ġconsolid ated
Ġper il
Ġde le
Ġform ulated
Ġhigh ways
.sp awn
== $
ĠN iet
Ġv eggies
yp o
-r ule
ĠV ie
/e pl
Ġenf ants
string Literal
Ġtou ghest
buy er
Ġcov ariance
Ġil i
ĠSoph ie
ĠB AB
Ġ" ),
ĠU k
current Index
_user data
.code c
ĠPun jab
ĠSN P
l ol
adv ance
Ġcom fy
Json Ignore
Ġfashion able
ĠI CON
Ġor a
ĠP ricing
< num
ĠI RC
ER V
ĠMe in
ĠID ictionary
AD OW
is New
ĠDev on
at l
(request Code
ĉ PreparedStatement
IM PORT
Ġmar ital
_SELECT ED
get Response
ar Down
B V
ib Name
ĠP ATCH
ä än
Ġda ar
ĠFile Mode
Ġm arty
.Spring Application
c ene
amp oline
get Size
Rest art
æķ Ī
.project s
ĠEthi opia
Ġstatus es
T ION
(b g
ĠX unit
Temp orary
ĠEng agement
Ġx f
Ġprox ies
Ġgen esis
Pager Adapter
ĠSl ave
Ġsung lasses
ĠCh loe
Ġko ji
ad em
ĉ JSONObject
Î ³
Ġh ors
* w
ó r
es ch
Ġcritic ised
z ial
ĠSale m
.Vert ical
ĠR ash
> E
ter ing
/s creens
Ġheight ened
аÑĢ ÑĤ
Author ities
_b box
ün st
.font Size
ĠBO OLEAN
div ide
ĠSlo ven
uc er
Ù Ĵ
st ub
Ġnavig ating
: animated
_N OW
_v ect
} {Ċ
@ (
Ġtele com
Ġcontract ing
ĠAss ange
Ġextract ing
Ġgr ö
c obra
.D IS
Ġcr ab
Ġtw itch
Ġvert s
Ġreject s
ĉ format
Ġreg eneration
.S ys
s olve
ĉd ialog
sh i
m eter
(b est
valid ators
Ġon wards
Ġg uru
Ġmoder ator
ow ied
ex periment
r ub
Ġm qtt
ĠCa ucas
Ġnational ism
Ġm ange
ĉ ImGui
/ Edit
Ġin h
Ġint ellig
ero kee
ĉ export
Ġdiscrim inate
sub tract
ĠM oodle
ens er
ĠGuid es
R AP
-h ot
_gr p
.p icture
X A
Ġinit View
_Com m
Ġoverd ose
Ġ+ ĊĊ
ĠSil ent
show s
Ġinterpol ate
Form ation
Ġb isc
mark ets
( SC
Z e
ĠNetwork ing
Ġad renal
ĠG uns
ete or
Decl ared
orget own
Ġk arena
/ password
_address es
ITER AL
B uzz
ĠCon way
(c ase
P WD
he iro
( act
** čĊ
());ĊĊ Ċ
Ġan v
Ġ. .ĊĊ
(Menu Item
(m ail
_section s
ĉ net
Ġpl ut
Ġw rench
/ object
ĠI st
ĠV IS
/p ub
al ten
Ġguit ars
Ġantibiot ic
ï¼ ĸ
 ¹
Ġ" +"
form ula
Ġbab es
ĠP rompt
Ġen im
/ player
ĉ ref
Ġby Äĩ
Ġconsum es
ĠH ast
ĠT ao
Ġ' ))Ċ
Ġcl am
Ġthigh s
Ġmot if
Api Operation
ĠW L
get C
ĉf lags
oint ments
Ġeconom ical
need le
x ls
pr actice
ut zer
time ofday
- output
Ġfind ById
ĠBudd y
Ðŀ ÑĤ
Se ven
ĠB ark
Ġenv oy
_al gorithm
åĪ ©
Ġball istic
ç§ »
r ades
ĉd oc
rodu cing
ĠE ating
Un mount
/data Tables
_b onus
Ġl itt
pp s
) localObject
per f
ĠHel vetica
sh utdown
/ ml
.t okens
ĠHard core
, row
/b g
Sc aler
âĢĶ as
_log its
âĢĻ int
ĉ App
Imp licit
.F printf
ET O
Ġterr a
Ġpossess ing
.r strip
, ),
= yes
ĠStr ipe
? =
ne utral
.g ood
Ġk ennen
ĠS ung
f ault
ystate change
Can adian
',' ".$
ĠM its
æ nd
ĠSTR UCT
ĠURL WithString
ĠCom pass
Ġ-- ĊĊ
ĠNS LayoutConstraint
| min
-ad just
Ġreb uilt
L IGHT
/ se
-m ount
vp n
valid ated
(Q Object
Ġign ition
ĠCharg ers
RYPT O
]initWith Frame
ĠFl uid
Ġcad re
Ġnomin ations
Ne ill
ĠH ou
Ġcurrent s
_g ene
(in p
Par is
z ÄĻ
ag gregate
Ġass oc
weet ed
err at
âĢĵ ĊĊ
Ġ'/ ',Ċ
fix ture
ĠH ighest
amb ient
Ġch mod
Ġcon te
Ġsens ual
Ġgar ment
z ers
ĠPower ed
dom ains
R eward
i omanip
Ġcock pit
out file
Ġbuilt in
Ġins isting
. vars
zip code
Ġ ����
f ails
Ġconsolid ation
_ oid
Plan et
Ġ= ",
ĉ el
UIL T
ät z
af ari
ĠMc Cl
Tim eline
Est a
Ġfr am
Y E
Ġcere bral
Of Month
ĠP regn
Ġкл аÑģÑģ
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ
ĠF res
Appro ved
.S pecial
ĠProtest ant
Ġallerg y
_p cm
ĉC opyright
Ġsuper Class
" strconv
ĠMoh amed
Ġ' //
Fore Color
Ar thur
ĠJ ungle
Ġve ins
S ad
Ġback ups
ĠOp inion
û t
Ġinter mitt
ody n
ĠChrist ina
Ġand re
Ġevac uation
pa lette
h orse
ĠRes ident
ĠHass an
.N il
Ġa isle
ĠG rowing
Ġblog info
/s ql
_io ctl
Sc aling
ĠMon ad
_c pp
ĠH utch
ĠApple WebKit
Exp ense
_J OB
Ġpoint less
From Body
ant al
Ġdepict ing
ĠC ELL
Ġref in
ĠC NC
ì¹ ĺ
_dim ensions
ĠS AN
Ġa ft
Ġfoot steps
cc oli
_PH ONE
/m ath
-k ind
ĠMe ans
ich ael
.g una
Ġinaug uration
-dr iving
( delete
Ġtotal Count
_M C
.Ext ension
Com mercial
Ġz Index
< Customer
" g
-sh are
Ġp act
ag ara
ĠS IL
_m odes
ĠM olecular
Ġsystem atically
< G
_s cr
ĠO ro
as ers
Ġb ic
Ġdest roys
PI PE
.Start Position
Ġc á»§a
ire z
.B unifu
_F unction
Ġs ü
_f uture
ĠWe alth
ĠNatur ally
æĢ »
_y es
Ġabrupt ly
String Encoding
ĠCGPoint Make
Ġz h
Ġimp erson
Ġpiv otal
ĠSom alia
Ġsegment ation
_AN AL
ĠLogin Component
Cons ult
Ġtr uncated
] ";Ċ
.get Config
Ġintern ship
B aby
ê° ľ
Ġstrengthen ed
_M I
b asket
Ġnicht s
ĠTV s
ĠSh an
ãĤ µ
rac use
.Re LU
/ interfaces
ĠgetItem Count
Ġret iring
Ġspecial s
Ġentity Manager
bel ief
Ġs older
da ughter
ij kl
Ġutil izes
.f ixed
S U
Ġdr astic
Ġh acks
gr und
ĠM U
ĠSt arter
.Com ponents
_m otor
Gold en
Ġl odge
Ġ ));
ĠCor inth
иÑĩ еÑģÑĤво
ón ico
gre SQL
ĠFl uent
Ġmar c
.Load Scene
.Group s
Ġer h
ĠAut umn
St opped
Ġitalian o
Ġmin ions
ĠAssert ions
Ġm ux
B u
Ġ---------------------------------------------------------------- --------------------------------
ĉ up
read ystatechange
_M eta
Ġcurrent Date
ĠChap man
Und o
Se an
ap r
Ġpar m
_ icons
ĠSt a
á z
Ġsub division
Ġalter ing
P NG
ponent ial
Ġpost gres
ĠB DS
-ex istent
ĠBrad ford
ĠO MX
_W HITE
_PRO GRAM
q c
Ġtypings Slinky
ĠP ics
_M ETA
IT TER
_sub scription
IRON MENT
ĠHy undai
();ĊĊ ĊĊ
ĠØ ³
Ġj ac
Ġelimin ates
) });Ċ
Ġcomp rend
ĉ insert
_f aces
"> $
Ġeb ay
Ġcapt ive
pl iant
ĠCalcul ates
ol ta
est ing
_re vision
Ġm ús
+ m
"," ","
WH AT
Ġcompassion ate
h arga
[ random
Ġmod ulo
(s n
Ġoccup ations
//// Ċ
ĉ board
ĠB alk
wi Äħ
ĠW ifi
.Pro file
:m aj
ĉm at
LOCK S
(j Button
Ġ(' $
M ur
æĮ ī
b ble
Ġf rog
-h ide
Ġbroad caster
ภŀ
ha led
Ġam using
_predict ions
_in tr
Ġe agle
аÑĤ елÑĮ
Ġget List
ps ilon
Ġcharacter ization
AR DS
Ġre location
Ġr ulers
P AY
ĠDef initely
_A ction
Ġclos ures
Ġfact ual
odyn amic
Ġpreca utions
nie j
ĠPart ies
ĠSub aru
Ġcous ins
ar beit
.m oney
gun ta
( and
get item
.Style Priority
Ġsl id
single ton
Ġg arn
ĠP AS
Ġd azz
a ż
Ġbog us
ĠM og
Ġrival ry
is ol
Ġland marks
ñ as
B ern
ĠSach s
Ġ" )ĊĊ
Ġhost ility
_m ex
m ere
M ot
p ictureBox
Def ense
Ġaffid avit
other wise
.d irectory
_ UnityEngine
-b log
.s kin
ph em
Ap ellido
er chant
[ class
Ġw art
." [
ale ur
/ back
ĠĠĠĠ ĉĠĠĠ
Ġprecip itation
Ġob struction
Ġp Obj
Ġr upt
UCK ET
ay e
æİ Ĵ
g x
Ġe cl
Ġsecre cy
/ Header
ĠLes b
Ġle i
ĠBullet in
Ġgive away
.H ome
_RO OM
" W
Ġcow ork
_ ra
ĠC ycling
ĠP aw
Ġpup il
/ arch
ĠFile Utils
é¦ ĸ
r sp
Ġfreed oms
ĠL ear
}` ).
Ġbow ls
/b lock
_log ging
Ġmeth ane
Ġhorn s
Ġwonder fully
Ġalter ations
Ġex ile
ls en
_p ause
_L ANGUAGE
ĠUS DA
_m ysql
_AM OUNT
ĠL IFE
Ġyoung sters
Ġri ots
[ E
Ġun forgettable
, },Ċ
Dis posed
ĠAss assin
UN G
ĠNew sp
User Service
: aload
+ ',
Ġsett lers
Ġscre ams
Ġincon venience
.R otate
Ġj ars
ĠP uzzle
Ġm est
ars i
ĠSh arma
| (
.d s
ĠSac red
_e vt
Ġexpress es
Ġh och
ĠD uch
.c alls
th r
ĠShe ffield
.Alert Dialog
Ġrad ically
Ġtr ous
Ġprev ailing
ĠWW II
âĢĻ n
ens ely
ĠY esterday
ĠSir ius
Ġkill ers
ĠF FT
Ġo val
') :čĊ
Ġìłķ ë³´
our age
ĠCheck box
Work book
.def er
_f loor
Ġc ouncill
Ġnors ke
mo il
ore a
Ġmarket ed
_S UR
x AA
Ġst ained
e ut
ĠM eng
Ġi eee
. extern
eg ie
Ġr app
ĠPy ongyang
' class
M ob
Ġinitial Value
_w ave
Ġj ab
Ġmascul ine
Ġampl ifier
Ġt ty
Path Component
_ xt
ĠG FP
/ sec
ĉdis patch
mark down
ĠS chn
bo le
· ·
mouse move
Ġerr Msg
Ġas ign
_m ono
To Selector
ĠZ u
(R ect
ĠError Code
lat in
ang ible
v tk
CG Size
P okemon
Ġclass mates
Ġattract s
ĠT atto
ult an
ol óg
Ġhalt ed
ठ¨
ĠK art
Ġ ue
_Init Structure
Test Class
ĠAir bnb
_ ",
Ġchar coal
Ġip c
ĠSt retch
.g lide
lates AutoresizingMaskIntoConstraints
Ġpot ion
ITT LE
Ġcount ert
_h d
pre pared
Ad s
ĠV ampire
rob ots
.Create Index
Status Label
Ġt ucked
af ür
U t
Ġswe ater
_F N
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĉ
ata ka
Ġeyeb rows
ac oes
ud en
.LinearLayout Manager
Ġsw ay
Ġmult in
() )))Ċ
ĠNS UInteger
ĠMy Base
Part ner
uts chen
ĠC ater
.setBackground Color
Ġaccompl ishment
_pro blem
.d td
Ġpage Number
Ġj ackets
Ġcro pped
u els
ĠH ep
Ġc apped
* Math
_callback s
Ġpub b
ĠBrun swick
.res pond
[" _
Ġbed ding
hyth m
O X
(s peed
Ġpestic ides
Ġ---- ---
.Bl ue
Ġnood les
ĠGo es
Ġs aver
o xy
_com pletion
ĠSw inger
Ġget Date
Ġmind ed
int egration
ĠLot us
(st op
(', ');Ċ
Ġflood s
ĠWork flow
Ġerupt ed
Mac ro
ĠSau ce
Ġevent Name
\ Input
Break ing
ĉ when
_p w
IND ER
ĠWell ness
Ġvox el
ĠM ell
ĠM EDIA
SE NS
ĠFund s
ĠM ild
< Array
- this
ump ed
/f w
ĠDb Context
W I
girl s
H OW
'); ?>Ċ
Ġtempt ing
Ġtest ament
Ġb ible
Ġconsult ed
ĠIndex Error
è¨ ĺ
Ġkey pad
izz o
( ok
Ġwhats app
ĠRemote Exception
Ġteam ed
âĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶ âĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶ
» ,
Ġget Time
di ag
iss y
Ġh ed
Ġkn ots
j om
Ġfun nel
-m ails
Ġexport ing
ĠV L
ĠK arn
ĠBuddh ism
ĠAll an
_R ADIUS
Ġw ording
ĠFor get
ĠCor ona
ip hy
Ġlim burg
ugg y
ĠUser Repository
im in
(e le
Ġlabel led
ç¤ ¾
ĠH erman
.q q
Ġ" ));Ċ
ie ber
.Trans late
ry n
Ġdes env
um d
Sim ply
ĉm ode
R pc
ĠVal encia
Ġstaff ers
Ġsel v
ĠSpi ke
Ġdel ic
Ġer u
_D T
J udge
á» ķ
ĠBas in
.m utable
" url
Ġtar iff
ĠSlee ve
Ġfl are
.drop out
Ġbr ides
)) ,čĊ
_con straints
de struct
Out line
Ġdisappe ars
_lock ed
ĠNS LocalizedString
ck e
ĉ null
ad resse
Ġto pping
ĠJ oker
b ishop
но ÑģÑĤÑĮ
and ering
_ amp
= time
_S pace
_P ULL
' =
Ġant iqu
Ġc ach
___ ĊĊ
ON ES
о Ñı
Ġun read
.p olicy
oooo oooo
ëŁ ¬
Ġu sted
ĠRe ce
Ġal lem
ãĥ¼ ãĤ¹
ĠThought s
ve illance
istr ate
_l ane
Ġfam ed
.Get Name
Ġsmo other
ĠQual ified
az ers
_ geo
F ax
ĠM inds
ĠR aises
Ġtrans cripts
Con versation
Ġremark ed
ëĤ ĺ
d ling
Ġdeploy ing
Ġshared Application
Ġk p
FontAwesome Icon
_d ummy
reib en
ĠJane iro
Direction s
.get Bean
s ass
Ġcommand ers
v ation
error Code
ĠAl loy
.local ized
Ð ij
Ġdish washer
ĠSou p
N u
_D efault
Ġune ven
Ġ/> ";Ċ
-B ased
Ġseam lessly
- null
ĠX C
Ġst ew
(d elay
AT ORS
ĠWhe eler
"
ĠCh andler
Ġretal iation
Ġbudd ies
-s izing
ĠE ins
Ġ... ,
qu ete
ĠD OC
Ġfals ely
Ġfl ats
NIC ALL
Ġlib r
Be Null
im ulation
ĉ Query
_ ut
Ġpl aque
b ild
Ġscre amed
.m vc
.W idget
Ġdiffer ing
/s upport
_V OLUME
.node Type
ĉ Write
Ġr ówn
book mark
_CON N
ĠCre ed
Ġinhib ition
ĠRe hab
uv re
Ġdump s
owe j
_ placeholder
ĠHW ND
Ġder mat
.det ach
Ġfinal ized
ger ies
id ak
_pro g
Ġupdate User
ly s
.G oogle
Ġl uego
Ġant s
æłĩ é¢ĺ
ĠDR M
л ен
-d b
err ick
_l n
.. \
ik it
ĠD ien
Ġparam etros
key press
ĠK erala
Ġdr ained
fü g
Ġcap it
_a ug
t ant
Nav Bar
Ġroll back
Ġle y
ภĪ
ĠB SP
ĠPredict or
Ġw agon
Ġ"| "
S erve
.D one
ĠD urch
Pro vide
ĉs core
_ OD
. weapon
Ġunivers ally
Ġinj unction
_SC ROLL
.M atrix
ĠMongo Client
b uffers
Ġbad ges
Ġsh arks
ĠSh ark
MODE L
. READ
ĉt ag
Ġstrt oupper
ER GY
b ias
Ġaccount Id
ĠEm manuel
Ġres orts
Ġsv n
w arnings
_ IE
L AS
Ġnull a
ĉ as
Ġdem ean
âĢľ As
Author ized
Ġtend encies
- setting
Ġpre load
Ġc nn
âĢľ No
% )ĊĊ
= T
ust o
ĠF IRE
re search
ĠÐ ĵ
ĠLess ons
.Append Format
Ġinit iation
ĠC ous
ar er
pro jection
ĠShe ets
ĠF old
Red dit
De leting
Ġz am
ĠNe ural
ĠFe cha
ĠÂ ®
Ġt asted
ĠEn emies
ĠJohn ston
Ġd ancers
Ġdis abling
Ġpet ty
ĠW eld
/ --
(s prite
IG O
arg out
Ġquarterback s
dispatch er
ĠS ustainable
en arios
ĠSk i
Ġfact o
ill in
_ext ensions
É µ
> H
e ast
. air
âĢľ But
Object Context
success fully
_l and
Ġfold s
_CO ORD
Ġsub po
.get Address
in str
Material s
Ñĥ ÑģÑĤ
de posit
-l ast
_GR AY
= find
Ġmut ant
Ġlesb ienne
let cher
RO UGH
ure ka
.c apture
Ġen n
Ġ([ [
ĠFl u
Ġtask Id
ĠHus sein
.f older
Ġa usterity
ISTR ATION
_ Impl
注 æĦı
Ġdec ree
- chat
Ġimp lication
Ġguess es
ul kan
An alytics
. plus
COM MAND
е ли
» ĊĊ
_S ITE
Ġequal To
Support FragmentManager
ĠRec ording
å®Į æĪIJ
Ġbag gage
Ġpitch ers
ĠE h
o que
ĉc nt
Ġ=> $
/ foo
IR A
ĠSat ellite
bor ah
Ġ}} "Ċ
ĠEnd s
ĠSpr ay
, param
.Ch rome
* q
th ought
ibr ated
Ġth ieves
Ġbenefici aries
Enter ed
ottes ville
Ġveter in
By ID
qu ipe
um ption
- unit
Execution Context
@ s
ĠG iov
.Tool Tip
_f riend
( attributes
Ġdump ing
ĠJ C
_D OCUMENT
ĠArm our
( insert
.Horizontal Alignment
ĠQ ed
ãģĦ ãģ¾ãģĻ
/g it
ĠY YYY
ĠCard iff
Ġap a
organ ic
ĠWhere as
Ġæ Ŀ
ĠM ia
Ġdemol ition
Ġsc ars
Ġp ai
Ġre tries
Ġr q
ĠDen is
( Utils
Ġallev iate
ĠP IC
id ue
Ġacknowled ging
Ġ// ////////////////////////////////
ç¡® å®ļ
Ä «
\ Json
.b inary
Ġx type
sign als
ĠAp pearance
& r
} s
C i
ĠI llum
por ate
h og
Ġindex Of
\ Command
_par allel
ĠSher lock
í ĥ
Ġ" ")čĊ
//////////////////////////////////////////////////////////////// ////////////////////////////////
Ġcritic ize
ĠSo ap
ĠMatch er
Ġgr illed
* T
Ġad ore
ull ing
Ġjed och
_ref s
lean up
ĠJ AXB
Ġro ses
ĠL iam
size i
Ġget char
Ġtar de
-to oltip
Ġqual ifier
ĠInter mediate
_W indow
ĠMal ta
Dis connect
ew here
Camp o
Ġirr ational
led o
ĠD N
ARG V
Ġout ro
Ġth irteen
Jose ph
M AR
/g l
J ess
ĠPsych iat
Ġpadding Bottom
- loop
/ fonts
_se en
Te ams
React DOM
(m an
(x path
.get SimpleName
>( *
ĠP vt
Ġel ders
Ġp ies
.user Agent
- region
ĠGree ks
(f ragment
st u
Ġcouncil s
Ġst amina
ĠGod dess
è ¥¿
Ġphilosoph ers
Ġpers one
ĠL ose
ĠCL R
ĠD ocs
Ġso ak
ĠHOLD ER
Ġb ells
hash Code
R ATE
_WE IGHT
in ous
end ra
oph obic
Ġpro se
Ġfin ely
/o auth
(s pace
ad ge
ĠM ama
Ġstring Buffer
Ġst int
Ġmis ma
Ġvill ains
ĠCrime a
Ġdipl oma
Ġпо Ñģл
ĠBe a
(j oin
Ġíķ ´
CH AT
per ing
ĠC ros
Ġmon keys
Ġpred s
yl a
,, ,
Ġvibr ator
ĠN U
åħ Ī
f ant
z et
Ġb ietet
un ft
sw orth
.F low
Ġpsy ched
ĠContin ental
> t
Ġqu ilt
. UP
Ġexpans ive
Dis pose
(l anguage
C aps
_Z ONE
Ġrec ycle
ĠMan aged
current Color
.b roadcast
sign In
.p rom
ll u
ue blo
Ġpunch es
Ġautom at
Ġassign ing
Ġcreate User
ĠAll ied
Ġconduct or
Ĥ ¨
Ġs addle
Ġd ni
omed ical
-W est
Positive Button
Ġit alic
? [
(tr igger
Ġele phants
":" ","
Ġcal iber
raft ed
d igits
Ġmar shal
mill iseconds
mark ers
m om
/ place
Ġhol istic
: t
# ,
Ġb oto
Ġnause a
ĠSh ooting
ite ch
Ġtext Status
< Class
ĠDes cribe
Ġbuff et
g il
Ġlog its
std call
mod s
ĠSk ull
ĠB are
h ope
ĠIn tr
F air
ĉ pt
Ġacompan h
Ġf kk
_r pc
Inst alled
_ ans
.get Minutes
â̦ "ĊĊ
- thread
Ġpres chool
AIL S
Ġdiff ic
( convert
ĠN ath
ĠDO J
Ġreg imes
Ġenthusi ast
Ġwarrant ies
Ġfasc inated
_b inding
_N ot
oft en
_R W
/m ail
Ġtitle Label
Ġvill agers
ĠJ iang
Ġsw agger
.Row Index
_img s
rap y
VER AGE
. Up
Ġno op
c io
ĉ ST
Ġdecre ment
Ġmagn esium
_ rotate
S it
Ġnieu we
Ġter med
íķ ©ëĭĪëĭ¤
Ġur g
_t ouch
Ġsw arm
Ġcl ave
th est
ĠL af
H X
ĠH ulk
Ġplaint ext
ĠSof a
get Session
L ed
Ġecosystem s
he i
ĠK ills
Ġhus bands
Ñħ ÑĢан
(d om
_t iles
Nib Name
Ġdon ating
. acc
Ġlifes pan
.b n
_RG CTX
æ ¥
ans en
Ġmod elling
Layout Params
ĠonChange Text
rs a
- location
.P e
(b us
(s ong
Ġprodu k
ĠSH OULD
ĠC J
Ġs os
ĠHome Controller
.load ed
(D ocument
.s ocial
t iles
Ġl ame
= df
.parse Long
Ġpr ac
Ġdet ox
ĠV E
Ġpunt os
Ġdo ctr
Ġan cor
CA PE
Ġc mb
çĦ ¶
*) "
:// /
Value Type
Ġmort gages
; q
ĠRock ets
s port
UG C
ct s
ãĤ ģ
ie ur
ĠAppe al
(n b
//////////////////////////////////////////////// ////////
IM ATION
ĠC res
ĠMan ip
C ause
at ypes
man ufacturer
# ----------------------------------------------------------------------------
Ġsp or
es on
Ġpun ched
Ġbook marks
ĠBul k
Complete Listener
ĠTalk ing
ĠEr nest
Ġrub bish
k ills
ĠDE FIN
Ġneighbour ing
ar lo
ĠP CA
ĉm atrix
lo k
Ġat las
ĠG ur
Ġw yn
-n egative
Ġt ul
Ġre lic
ĠV oltage
ĠPre is
ĠJ NICALL
ĠPM ID
ak et
ĉ attr
Ġet iqu
ĠM J
ĠG mail
cl r
_exec ution
éĶ ®
pos itor
. af
N r
Ge orgia
Top ology
Ġperch é
Ġmus lim
Ġepid emi
Ġsab ot
act us
Ġë ĮĢ
ĠIO Error
. est
p refs
ĠKr ish
.Read Key
NAS A
u ção
_D b
umer ator
W ide
(st atement
.end point
.... .....
Ġ[ *
stream s
m time
P x
at r
Ġt pl
R oman
Ġscen ic
.n z
ĠSe conds
sub menu
Ġìĭ ¤í
_b undle
Ġde ÄŁ
ĠS isters
pre ferences
Ġport a
Ad visor
max Length
ĠG REAT
__ (Ċ
ole st
ĠLabel s
Ġen fer
ĠĠĠĠĠĠ ĊĊ
ĠThe ft
_F ILL
ĠW ise
) application
un ami
> ())Ċ
ADD RESS
B ST
et zt
ĠQ gs
S ense
Exception Handler
ĠCh u
.get OwnProperty
Ġexerc ised
iot ic
ĠRe leases
Ġp interest
ol ie
is oft
Ġsequ encing
Ġpad re
] ));čĊ
(r adius
.m ed
aint ies
.Object Model
Ġem ple
Ġseg uro
St ars
Ġqual itative
lem n
á» ±
> ").
Ġg x
-c ert
ĠAST M
Ġfull name
Ġte lemetry
ĠCamb odia
_ ul
ĠCl are
C USTOM
Q C
ĠUn s
ĠHTTP S
ĠPark inson
ancy box
',' .
T ue
.get Last
Ġab i
Äħ d
A st
ĠEd iting
.Un ity
j mp
Ġm ats
Ġshared Preferences
Capt ain
.page Size
Ġr tl
Ġan meld
Runtime Object
Ġdemand e
(" ;
se ite
-head ed
ĠK ra
ĠF ONT
` \
Class NotFoundException
. avg
atic al
A j
Ġpermit ting
Pro j
ERR Q
Ġcre ampie
ĠBuy er
-mod ules
ĠSund ays
| `Ċ
Ġday time
Ġ+ (
Ġgl itch
ĠOper and
Ġtox ins
iny a
D NS
ĠS as
C ake
ĠNation als
.add To
Ġs inking
Ġcompreh ension
Ġsc or
ag ements
Ġt ard
Ġmarch ing
ĠM TV
Ġs ane
Create Info
Ạ¯
Ġend Index
ĉ layout
ĠåIJ į
S ITE
ĠT HERE
Ġ[ {'
opath ic
Ġtrans mitter
/ body
Ġp und
ĠC losing
Ġset attr
Ġbound ed
At las
sum ing
(t imes
par er
yn om
fe it
Ġf rem
- leg
ĠBr as
> #
Ġì¶ ľëł¥
ĠIN STANCE
ĠC ouch
_host s
lik elihood
.M arker
ĠM asks
Ġcere al
util ities
Ġelement al
Ġdist orted
in active
c ry
W L
UPPORT ED
.Th rows
/s chema
ser ie
." ',
ĠBened ict
-p icker
ig gs
ĠPir ate
åij¨ æľŁ
ĠTh ema
ĠSouth ampton
Ġarray With
ĠPaul a
Ġpredict or
- Ass
.user id
Ġper i
Ġexagger ated
ur ate
arse ille
ĠCon cent
ĠP ik
Ġ@ _;ĊĊ
Ġform ations
Ġden omin
"/> .Ċ
ended or
Ġpan cre
Ġam t
Ġon Resume
on Delete
ĠB CH
) ("
m ovement
Ġpot assium
čĊčĊ
ĠMah m
} ";ĊĊ
Ġd q
ĠPublish ers
ĠAm pl
ĠDani elle
Ġt ern
èµ ·
no ÅĽÄĩ
e in
ĠAsync Storage
un ger
rou w
Ġsc issors
/ assert
.b ucket
/ archive
_M an
Ġint oler
Ġ() =>
ĠÐĴ Ñĭ
Ġsa i
.x y
." čĊ
Ġur inary
es ub
IST ICS
ĠÎ º
Ġcompl iments
Ġtypings Japgolly
ih ar
Exp ansion
ĠS erving
_st udents
ĠX BOOLE
( il
Ġì² ĺ
Ġj ó
(t ol
( JS
ĉC G
ĠD RAW
tw ig
Ġo at
_sm ooth
ĠC SL
Ġos ob
Ġens uing
Ġbank er
ĠBack pack
_p ing
Ġwish list
= ax
ĉĠĠĠ Ċ
Dis ney
stead y
"> %
Ġproph ets
ĠZ X
Ġminimal ist
.PL AIN
Se attle
. ordinal
ĠPI PE
Ġret orna
Ġjug ador
ĠB ret
ĠâĶ ľ
Ġpl ush
UL ATOR
Sort ing
.grid y
ect omy
_ activ
r ack
Inter active
ĠAntar ctica
Ġv engeance
en so
_k nown
up plier
.Mod ules
ĠConnection State
éļ IJèĹı
@ FindBy
Ġpl acer
\ model
< ()>
.is Successful
-g ood
b z
ĠDr aco
Ass istant
-ex tra
аб лиÑĨ
Ġhyp ocrisy
Ġt st
ĠA gr
$ txt
Ġlog istic
lic ensed
ĠH of
Ġt at
( iv
Ġinto xic
post Id
_st rike
Ġhum iliation
pc odes
" sync
(rec ipe
+ N
rent e
ĉ Client
ycop g
ĠZur ich
ĠPro files
C ountries
Ġp ict
Ġroll out
requ encies
Ġpatch ed
Ġcar tridges
Ġsh ading
J ar
Ġsalv age
ĠTax es
Ġstand by
apor an
E igen
. angular
ĠN ested
äº «
Ġis Visible
ĠDw ight
_BR ANCH
.D elay
Ġk end
Ġfacilit ated
.flat Map
Ġs anta
ĉS end
/m essages
Ġof Type
ĉs wap
# plt
ĠTur ks
N ES
Ġprogress ively
ĠRes idence
ĠT REE
Ġno en
d io
Ġn elle
Ġsog ar
itt i
week ly
Ġambigu ity
_Set tings
W are
.ne o
_D ST
Ġæĸ ¹
pre p
lob by
@ email
/m ovie
Ġfun kc
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ
ÂŃ s
Ġguard ians
- pos
Ġconfig uring
ĠC PS
ĠDe us
Ġvidé os
_ empresa
Ġsl apped
< Model
Ġunders cores
U h
.access Token
SET S
ĠS parse
ĠCal d
: path
ĠS ervers
= batch
Ġkn itting
Ġx a
Ġsearch Bar
Ġsn ag
Ġinf used
.b am
le ver
Ġtax onomy
à İ
Ġatt aching
Ġh ern
_N OP
Click able
(P arse
ĠDynam o
-b uilder
Ġdere g
Ġsc attering
è¿Ľ è¡Į
an zi
ĠShe pard
"> ',Ċ
_X DECREF
ĠBuzz Feed
_M ARGIN
P LOY
.sm all
Ġm imeType
Ġh olog
ĉc amera
li as
Ġsusp ense
ody nam
b au
Ġgrave yard
_n amed
":" '
Ġ******************************** ****************
Ġgame Over
ĠLENG TH
ĉs creen
Ġdo InBackground
_depend encies
Ġr tc
/ up
_ ROM
H all
Ġdef iciencies
( te
' #
_e quiv
Ġpre order
ĠA xe
ом Ñĥ
.send File
Ġfil t
ĠLim its
ĠCaval iers
.dis count
âĨ IJ
ĠW it
QRST UV
Ġi j
Ġt egen
Ġ: ",
diff iculty
p unkt
ĠEmail s
ch lor
(f un
.U int
ĠSt all
_ verified
u D
File Type
Ġple asures
Ġjud iciary
Ġsh am
ip ur
_PL US
off ers
( foo
_G T
ĉc ore
ENT ION
ĠLib eration
Command Line
_de partment
.A r
_ne ighbor
ĠSub mitted
ĠĊ
Ġdro its
Ġhomosexual s
Ġab duction
ĉw idget
$ headers
ĠD AR
Ġfl a
th reat
Ġlou is
.Get Property
" Just
(f rames
ry o
prof ession
| i
íķ´ ìĦľ
(s v
Ġun recognized
I onic
F ashion
Screen State
ĠIn coming
Not Nil
Ġsync ing
em ie
Ġtherm o
_pro cs
Ġincons istency
rel igious
.m j
Ġperson n
Ġmoment os
or arily
Ġæ Ĭ
_ne urons
Ill ustr
im oto
il ik
ĠW oj
Tr ading
Ġapp are
Ġentre prises
ach at
ĠÂ ¬
Ġne igh
BUTTON DOWN
ĠMah er
ag han
-h ash
" f
Ġclient ele
.add Button
ĉ SP
Q i
Ġgr ated
POS ITE
: >
ĠHow ell
ĠCompar ative
ĠIS C
ÂŃ i
O cean
D avis
ĠFil me
W ins
ĠJ IT
oc cer
ĠC orm
ENCH MARK
rch ive
ica ção
Ġm ata
Ġchild birth
ĠOption ally
En s
Ġx http
Ġel ucid
_Osc InitStruct
)) ):Ċ
Ġint uit
ĠDon ate
Ġcorrel ates
> Delete
Ġequ ipe
Ġb oca
Ġinfl atable
er ah
ĠDateTime Kind
Ġcal ves
\ Lib
Ġem lrt
ĠTr ilogy
ĠP anc
ĠD uis
ĠpelÃŃcul a
WAR DS
_DE TECT
-section al
dh cp
For Row
-de struct
ĠPres enter
/s lick
, on
ĠCit adel
logged in
_sub type
Ġsig ue
Ġc uring
ĠFire wall
Ġfluores cence
ĠItal ians
иÑĤ ÑģÑı
.get Style
In Seconds
j ie
-S mith
Ġx link
Ġsub missive
он ÑĤ
arbon ate
ĠF aul
_go als
ĠCommission ers
chart Instance
_POST FIELDS
Ġmed ial
Ġman os
Ġdel t
sv m
.Ap is
ep hy
Ġasym pt
Ġapp Delegate
Ġimpro bable
ck a
sim d
/ Error
. âĢĵ
ĠP TS
de er
Ġs ina
m agnitude
ID ADE
'] }'
Ġmay ores
ĉ comment
/ console
" @
v olt
.s ell
ĠM acy
Ġmel od
Ġim ágenes
_ch g
Ġin out
ident e
) '),Ċ
d ni
.b lob
Ġtyp ography
Ġe erie
_O ID
pes an
aj an
Ġch opping
Ġbl uff
ad f
_b ases
.Form atter
Ġ\ %
ĠPage Info
Car rier
ĠCal ibration
com o
-b odied
Ġfinanc ier
ĠIN A
. ERR
Ġhood ie
ĠSan ity
gu arded
.opend aylight
ISM ATCH
High lights
ün k
ani em
anger ed
assign ments
Ġregistr ado
ĠU PPER
ampil kan
ash ire
ĠNik ola
ĠC FL
ĠH DC
Ġp oids
ĠIP s
Ġprevent ative
ips oid
if ix
.c amel
.g a
V olumes
- ste
Y ahoo
_s ibling
H ighest
opt group
Ġkvin na
âĢĿ ãĢĤĊĊ
ĠAppl iances
Ġ" ><
') ")Ċ
ht t
ĠIdent ified
Ġpenc ils
Ġmember Id
Ġappend String
.load Data
Ġmock Mvc
Ġj ub
ĠSl ut
ĠTai pei
st att
Pol it
Ġpart ager
Did Change
Incre ases
) }.
ĠB aba
_CL IP
[ unit
Ġк лÑİÑĩ
Ġalc uni
ĠL ola
Ġcl inging
@ PostMapping
(con cat
Ġss id
ĠFa uc
ok it
ĠRecord ed
á lez
($ ('<
.assertIs Not
Ġk ali
V olt
Ġwarm ly
Ġsca res
get ti
füh rt
_d oes
. EMAIL
im ations
Ġspring fox
ĠDec om
arc y
Ġgl itches
ĠM off
ĠV oll
.b etween
Ġcoord en
ĠPart icularly
GB P
Ġsem ble
East ern
_M SB
]) {čĊ
m organ
ĠE VAL
d ere
HO USE
mo ire
ist ique
_l stm
-com mit
yster ious
Ġtw ink
-th umbnails
en ÃŃ
:' ',
Ġblack out
ĠFlo ors
Ġso fas
Ġou i
lesh oot
ĠRa q
- abs
Ġk ra
M ining
sha ft
.set Columns
Cl azz
PRE TTY
.play list
éĸ ¢
-Sah aran
M ING
ĉ bl
è® ®
j f
DO CKER
hope fully
( ignore
ĠUsers Controller
ĠMitar beiter
ĠL ES
Ham ilton
-m etadata
ĠK K
ikt ig
Ġwoll te
egr ator
] bool
, current
Ġvalue Type
Ġexcav ation
ol and
Ġv erv
/file path
Auth Provider
Ġpro crast
ĉ ULONG
_MEM BERS
Ġup lift
ĠAut onomous
Ġart works
ĠOut reach
Ġp ore
Home page
Dialog Title
ĠGener ating
PAR SE
Ġsem anas
Ġhuman o
JSGlobal Scope
Ġvol te
Ġb ella
(is instance
Ġpl c
\C atalog
Ġeste emed
éĽ ·
(s uffix
Ġswe eps
ĉ ORDER
Ġdo ivent
ĠSw arm
ĠComp iled
get Page
AD R
.R ichTextBox
ĠN aming
ag ged
ĠG ANG
r asing
ode led
Ġg ala
ĠJS Name
dd f
Ġill ust
ĠLans ing
[ port
-de ath
Ġdin heiro
ĠE ighth
Ġb ian
st å
Ġvers ión
ĠLinear Gradient
ĠHard ing
. *)
ec zy
$ header
Ġv Ã¥r
Un checked
Ġko je
ĠPal adin
() )),
G iving
() })Ċ
Ġd ips
F riendly
Ġport rays
Ġhel ium
Ġinsurg ency
_ex piry
ĠstringByAppending String
Ġa antal
s lope
m ast
.get Integer
Ġ################ ########
_PIPE LINE
Ġdens ely
Ġmut ating
m idi
ĠSe it
ay ne
NOW LED
ĠDes mond
ĠF Name
ĠN airobi
\ Context
Ġcalc ular
-d en
Ġc ott
] ):čĊ
ĠRecommend ation
ĠRole x
Ġvalidation Result
.p at
Ġn Ãły
ĠRest Client
ĠG PI
ĠAshe ville
ĠO SP
ĠPER MISSION
ÐĶ Ð°ÑĤа
/ notification
K night
_W ord
ĠB ender
rank ing
Ġpart ida
_res ervation
Ì Ģ
Ġm Name
Ġget ch
Ġb orr
Ġdilig ent
Disc uss
æŃ£ åľ¨
ape ake
ion ed
-N azi
.c um
ĠK ron
=$ ('#
/s ingle
Ġerot isch
ĠV ib
Ġrat ified
Ġconcert ed
ĠREG ARD
Ġdo br
.Driver Manager
' r
Port able
ĉs uite
Ġrel aciones
ĠD op
emplo i
DO B
Ġcr umbs
Ġx ls
_App lication
(': ',
Ġ---------------------------------------------------------------- --------Ċ
m se
Ġber k
ĠReturn Value
ĠBel ly
Ġcam ar
ĠPe ek
els ing
Ġnot ifies
ĠTr istan
ĠG AR
em me
ĠElev ated
_C SV
(ch alk
Ġtw enties
ĠSearch Result
= search
ĠMix ing
ý t
Ġrecru iter
ĠIDE OGRAPH
ĠA go
( Operation
$ values
Ġworld ly
ĠRosen berg
ĠConfigure Services
>*
K ANJI
Ġchuck led
Ġstr ife
ĠBomb ay
ĠBACK GROUND
et at
enumer ator
Ġsû r
Ġ ãģ®
_p edido
/D k
Ġje an
_C olumn
Ġheat map
.P ending
Ġun successfully
ĉ ep
Ġsin ful
ĠAnt ony
_F OCUS
Text Label
_re action
ĠID irect
Ġcarn iv
Work sheet
Ġsu ede
ĉRT CT
Ġset backs
.un bind
Ġsi è
L iquid
_RENDER ER
M ate
ĠMillenn ials
Ġep oxy
izz iness
Ġb razil
оÑģÑĤ ÑĮ
& view
/g pio
Jam ie
.Gr avity
=".$ _
ĠV AN
ĠID R
ap pearance
.S elenium
Le ap
.Relative Layout
Sign als
Acceler ation
ĉH ANDLE
/ Open
Ġget Logger
S pi
-w riting
ĠвÑĭ з
-w orthy
Ġw cs
ĠQ Timer
ĠPoly mer
Ġv ant
ĉ Delete
it te
Wh ilst
Ġalg um
Ġshield ing
Ġk ms
ĉĠĠĠĠ ĉĉĉ
M eteor
Ġaggreg ator
ĠS ind
Host Exception
=' ',Ċ
ĠJS BracketAccess
ON O
_B uild
Ġstri pper
ĠL J
< Component
/s ources
Ġerg onomic
ĠAcc red
un ce
on is
ze igt
ĠSk ate
ĠRect Transform
In complete
Ġingen ious
Ġco isa
Ġcity Name
hab it
_T V
ĠAN SW
... ">Ċ
Ġsn ork
_op acity
ĠinitWith NibName
i ado
A AC
Ġ] ).
; z
_par agraph
Ġnos es
stand s
if r
_m E
I raq
.P redicate
ena ire
]] ];Ċ
Ġun idad
Ġretire es
_h ello
Ġmode le
ĠUIT ableViewController
f write
_num ero
_vis ited
Ġrece be
( Notification
Fant astic
_sub menu
ĠP EM
ĠCup ertino
approx imately
class ed
.Read String
Ġdomic ile
_P W
Ġball park
ĠK ale
con tra
_f avorite
/ of
Qu ite
ĠOT A
Ġacceler ometer
did n
| ^
ĠRohing ya
ivic rm
ann abin
обÑĭ ÑĤи
or ado
') +
Ha unted
, ID
( UIAlertAction
ur v
_b el
ĠMex icans
/ terms
ĠPaint er
Input Label
ĠV inci
ĠRos ie
\ uc
< Menu
Ġcool ant
(current User
_d ual
) "},Ċ
& p
Ġconver ged
Ġrestr ain
ĠYugosl avia
= target
Ġimp uls
ds a
Search Tree
Ġh box
ĠImp ress
§ Ãĥ
get FullYear
(d a
ĠY YS
.al ignment
.Get Text
.token ize
ĠOlymp us
Ġmur ky
ore station
Ġdiss atisfaction
ĉT Array
_ kses
.Add Singleton
ĠStart Time
Ġfan atic
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĉ
Ġentity Type
. override
Ġ -------------
ĠDat agram
f out
(with Id
Ġ# __
Ł èĥ½
ek yll
.f riends
ame leon
Ġz ach
.simple Button
ret orno
Ġkon k
/s mall
ĠQuick ly
un read
Don ate
Detail View
Ġdu a
Ġpenetr ated
OM UX
Ġn ir
_p data
"], ["
Ġlow es
Ġdop ing
Ġas ymmetric
Ġneed less
our cem
Ġup ro
ĠGu zzle
af b
Ġsext reffen
-c ollar
Ġcol ossal
Mon key
n ish
Ġhandle Message
Incre ased
* dx
ĠChatt anooga
f org
ĠOr den
Ġsh ri
ĠV and
Ġ" @"
Image Sharp
ĠWild cats
pon ible
.sc enes
Ġpaint ers
ĠPf izer
ĠZ ah
To Local
ĠFl am
Ġé taient
)) ^
ĠSand box
ĠTR ADE
Ġchrom ium
Ġac claim
Ġpac man
´ t
) reader
M ari
.Dispatch er
.A DMIN
ĠRem ed
Sw eden
Ġoverl ays
. er
Ġp ang
Ġclean ly
aven port
Toy ota
patch es
Ġv tx
ĠE is
cl ado
ĠR itch
RO LS
Ġh ade
Ġconspic uous
Ġdo cks
(j q
ĠPrem iership
ĠBe z
ĠâĦ ĸ
ĠÑĥ Ñģл
_tot als
Ġprov a
ĠC ue
Ġsa úde
ĠGame Controller
IM IZE
, port
ãĢĤ (
.C decl
Instant iationException
Ġcoll age
ĠIO C
Ġb ais
Ġon Finish
-st ars
set Size
Ġmog ul
Ġdis illusion
Ġche vy
(S chedulers
( IR
_loc s
Ġcann ons
Ġcancell ing
/b us
Ġbuf io
ĠY ours
ĠPik achu
Ġter me
r å
f ahren
Ġowner Id
Ġoblig atory
Ġcul p
Ġacid ity
-m ult
ĠBam boo
Ġ' ">
_g s
Ġcomp il
n ard
-ex c
Ġrh yme
Ġbut to
s ays
ant asy
ë ¸
Ġcitt Ãł
Ġche g
Time String
Ġpos itivity
ĠD abei
Ġw ang
Ġes cre
" c
ĉv ideo
ĠRank ed
.str ings
>> >(
Ġин ÑĤеÑĢ
Ġrest a
[: ,:
Ġrend re
Ġdes er
J os
Ġdis ruptions
Ġоп еÑĢ
s ampling
sup press
Ġcontainer View
ĠSeam less
Ġair y
Ġon load
.Window Manager
ĠPL A
br aco
.set PositiveButton
Ġp du
Ġg si
ĠC li
_gr adients
Ñı д
ĠWh isper
c stdint
Ġl äng
Ġform ulations
én om
ourn emouth
[$ _
Ġordin arily
.set Username
Ġfacult ies
MIT TED
/ values
Ġwe ir
ĠA pt
M Z
ĉc f
uck en
ĉĉĉĉĉĉĉĉ ĉĉĉĉĉĉĉĉĉĉĉĉ
def ense
[i Var
ĠBusiness Exception
Select ors
(co ordinates
ĠRes ets
ĠDr inks
ole ans
(st ypy
_IO C
.x xx
ĠSl ater
ĠBel ize
Ġ/ ************************************************************************
add in
_ep isodes
Ġis chem
legal ArgumentException
D anny
Ġp ared
.code haus
ĠAss y
ĉ Rect
â ŀ
.list a
Ġв аÑĪ
Ġv ets
HW ND
ison er
Ġx o
Ġor ally
ĠSt mt
.r nn
ĠD PI
ĠStr ikes
.setViewport View
Ġèĩª åĬ¨çĶŁæĪIJ
Y ELLOW
GL enum
part ners
ĠImp licit
Ġtak o
âĢĻ elle
Ġerm ög
total Count
G il
ĉ work
Ġpr atic
in ati
ab ies
ĠSk inner
Ġspir ited
Ġpancre atic
Ġh df
' em
Ġpsych osis
olic it
Ġ" {"
_at ual
Ġé lect
TE AM
Ġd ak
ĠSW AT
.Fragment Manager
Ġprovision ing
l ifetime
_EXTENSION S
ĠC ASCADE
Ġ! [
(K P
Ġv em
ĠInterr acial
'] },Ċ
sp acer
_k v
W arehouse
R DD
_f sm
.Stretch Image
, Yes
ĠRefuge e
ĠBr inging
Ġv álido
.inter section
Ġsp ooky
_port al
Ġmo th
ĠZ odiac
ĠSOC IAL
M imeType
'] }}
Ġres izable
äº Ľ
( phase
(mapped By
Ġmund ial
Ġcon vo
/ left
/doc uments
w ashing
ĠAm érica
_qu ota
.post er
'] ");Ċ
Ġst ellt
ĠDISCLAIM ER
[ opt
Ġed s
ĠR aces
vent as
Ġp z
ĠCap ac
ĠUser Dao
it est
Pro veedor
ĠShot gun
Ġthirst y
ĠBal anced
iqu eta
Ġhe aler
/ ")
.S dk
Ġt ert
" data
_pro vince
.A utomation
Ġfont WithName
_ ANT
çķ Į
ood les
ĠRE PRESENT
_G PS
Ġpersu asion
ĠDisc ussions
Ġf red
NE G
: border
ĉ initialize
ĉg log
-cap ital
ĠIm Vec
Ġde vis
C andidates
.anim ations
Ġragaz zi
ĠProm etheus
ĠK idd
Ġprogram ma
Cert ificates
Cont a
.es presso
ĠëIJ ĺ
Ġbe ide
éĻ Ĩ
.get Raw
ĠFull Name
Ġi am
(* )(
ma ids
B H
ĠCon spiracy
_D U
Ġblat antly
Ġ\ |
ĠW ig
ĠCon j
Rendering Context
M itch
Ġalle les
Ġ注 æĦı
Ġr ims
ĠNe ighbor
ĠK ylie
.p arty
t ors
Ġì¡° íļĮ
Ġw es
ĠCraft ing
[" .
.s ponge
Ġê ±
Isl amic
Ġprosec uting
Ġw ik
.os gi
oning en
Gram mar
' im
Ġax ial
Clean ing
.getExternal Storage
= ./
Ġchrom at
е Ñħ
ab ay
Ġb ola
.Ag gressive
'], $_
iz acao
Pre paring
: Any
. ENTER
-w indows
Ġenr aged
_d ice
Ġdet ta
ec al
_OR IGIN
Ġ---- -->
_Bl ue
Ġbot anical
Ġfr ags
Ġfamil ial
- du
Ġse izing
(block s
.r d
.check NotNull
Ġmis er
Ġmax x
ĠK nee
View Item
Inner HTML
D anger
(( __
Ġprz ypad
create Url
** ,
ĠDecor ating
ATEG Y
?> /
.Design er
hex digest
ĠEvery where
all eries
.TEXT URE
.Block s
z ell
Ġpre ço
S uddenly
input Email
(s ync
.b d
gold en
> ');
ĠDick inson
>> (Ċ
ĠQUE UE
Ġget Column
ĠS AND
.p iece
lic er
Fl utter
Ġget Version
Ġresource Id
og l
ÅĤ aw
.Br anch
ĉ web
Ġfr amerate
PP P
Ġfr ay
C NT
Ġinformat ie
'] čĊčĊ
ne as
Header Code
Ġæ ¸
Ġtr g
raw types
H onda
Ġmark eter
Ġrequest Data
ĠP g
ĉ not
Ġpage Info
Ġakt uellen
ãģķ ãĤĵ
ĠA MS
push ViewController
ĉ AL
Ġv ests
produ ce
-m ême
ĠRah man
F unny
E Z
_ Valid
Ġsquad ron
Ġl ash
Ġ irm
ias co
ĠPar an
Ġpet ites
ĠDec ay
Ġun initialized
priv ileged
Ġm bedtls
å¤ĩ 注
Ġ^ .
Ġec static
D etroit
Ġpart en
Ġsou venir
.get Login
моÑĤ ÑĢ
en ção
ĠmÃŃn imo
ĠAccess ed
ri ó
M ic
ĠV ocal
.Set String
Ġmens ajes
åĢ į
Ġattr avers
ĠA ph
Ġ' );čĊ
ünd e
Ġench anted
ĠRoot State
ĠCLOSE D
ĉĉĉĉĉĉĉĉ čĊ
Ġcal iente
or ris
Ġphysic ists
h wnd
_v i
Ġráp ido
Ġcapital ized
ed By
Ġmach ining
Ġhub by
ĠSt acy
.B us
dr ink
H ur
Ġprop ia
Unit Test
Ġmiscon ception
__ ));Ċ
/d c
ĠMay weather
_m C
.create From
ĠQ Painter
rops ych
inn itus
ay as
Ġg eg
(d w
Ġus ado
Ġtrick le
Ġann ihil
ĠP asta
Ġ++ Ċ
(Expected Conditions
.post Value
ic ap
ĠDon etsk
_s oup
-p ublish
ĠP b
ment ions
AC CEPT
.P ull
,âĢĻ âĢĻ
Ġret arded
_AT OM
ĠTermin ator
-c ourt
ĠCLLocation Coordinate
Ġrever ence
ĠS SC
ut ely
ĠW ON
ĠG SL
fre i
.get Longitude
Ġopen FileDialog
.B utter
- important
_M ANY
ĠG ong
âĢľ How
Ġg orge
= msg
ĠEz ek
create Command
: checked
Ġinf ographic
.W EST
Dir s
Ġguard a
Ġbeet le
< small
- android
Ġcred itor
ĠM éd
Ġfinal ist
Ġab l
ne v
_inter action
ĠMonter ey
j ah
Ġcand ies
ĠQu incy
èª Ń
Ġbatch Size
ak it
Ġo be
(p ara
Ġexperiment ed
Ġcouncill ors
Ġcl ashed
s qu
-st rokes
ĠG K
ĠEx pires
Ġprosec utions
ĠCreat ures
Ġy ö
x lim
_IM P
Entry Point
ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ
.Default CellStyle
Ġbre ve
ĠBrit ann
Ġsweat y
Ġle th
Ġflash back
per manent
ĠJ DK
_D etails
E uro
p pt
Ġrich TextBox
/ board
Ġtr ance
.c ycle
'); ");Ċ
Ġtox in
_de init
Ġover arching
Ġconfig parser
ĠKaw asaki
.th umb
Ġplay a
ĠJose f
+ _
Ġzero es
Ġa up
ĠH ari
comm itted
N it
.file Path
ĠDis abilities
man ufact
-al igned
.RE SET
Ġrust y
E y
Ġou sted
cos a
Struct ured
.get D
Ġs ábado
> Loading
_m A
.get Random
bl ings
Ġchees es
tt i
. âĢ¢
ĠBurg ess
ender it
. ',čĊ
(" "+
ac b
% p
index ed
_pred icate
nes ia
Ġb ied
ĠC IT
( Pos
_r adi
ä»· æł¼
B iz
ĠAdoles cent
Ġvi ên
c ycl
_C ancel
Ġcon clusive
Ġappell ate
inform atics
S J
Ġelect ive
role Id
Fetch er
ĉ Command
(" (%
Ġf art
IL A
get Block
A USE
Ġд ан
ĠAr te
Ġnot ifying
Ġge le
.s ame
ĠReg el
ĠBa ÅŁ
.c reation
ĠV N
_comm unity
Ġuns ustainable
SE X
Ġgrid Size
res cia
avers able
(', ')[
ĠPh elps
á»ķ i
ANCE LED
- IS
.run ners
ĠSt okes
.P rodu
Ġwh ipping
_ac quire
Ġinvestig ación
f ried
.copy With
ĠHard cover
- Se
áŀ¶ áŀ
inv itation
les ai
ĠD orm
ĠÑģпиÑģ ка
Ġconcaten ated
oph il
Ġthink er
/font awesome
ĠLe opard
Ġ"/ ");Ċ
Ġresidual s
ĠMic rowave
Ġconform e
th rop
Ġdis emb
ĠO MG
ĠDisc ipline
ĠAc robat
/re pository
df a
_M ED
buf io
Ġméth ode
_H OLD
ias i
_ legacy
) ččĊ
æ£ Ģ
Get ProcAddress
Ġy ay
ot ence
order id
-t w
Ġdear ly
In coming
/ il
Ġneu rop
uc z
); čččĊ
ĠInnov ative
Ġprof und
ig mat
Selection Mode
re levant
.G O
Ġbru ises
Ġs ach
ode f
Ġre imb
/d esktop
-s pot
und ance
Ent ropy
\ core
Ġsug er
ĠM vc
ĠGN OME
_ind x
ĠYY STYPE
ĠMat lab
ĠC IF
Ġ* ))
Ġproduct List
ĠAl right
ac emark
ÑĤи в
mod ification
int ernational
Ġhom ers
Ġdict s
ĠQ Font
.SQL ite
Ġtransplant ation
ĠMessageBox Button
ĠEl ves
'] ])Ċ
(Q Icon
Ġcin emas
CO ORD
- China
Ġkh ẩu
æĪij çļĦ
Ġskull s
Ġpain staking
f ce
.XR Label
Ġspec ifier
Ġpref erring
/ activity
( Photo
á lt
.l ot
' '.
ann once
.google code
-p df
ĠP oke
_A CL
Ġend owed
dis cover
.om g
Ġwood land
.M agic
Ġvol ont
Not Allowed
Ġch ave
BM W
',' =',
ĠS IX
æĪij 们
Ġkos her
Ġaspir ation
int l
_ref ptr
'+ Ċ
ment or
.cl ub
Window State
.A RR
Ġz za
Ġmessage Type
.e qu
Th or
Ġin just
Ġg ums
Ġborder Side
//// /
ĠTrans mit
Ġbuf size
Ġh ak
Ġell as
R ANDOM
ĉm c
Ġpe a
ek o
document o
Ġhyster ia
Ġaren as
Ġgun men
Ġm ike
Ġimp unity
atis ation
_Z ero
_COMP ANY
ĠG ors
Ġuse Class
( redis
ĠRUN NING
ĠB air
vel te
Ġ',' .
аÑĤÑĮ ÑģÑı
ö st
encode URIComponent
_re strict
Ġdec als
ĠPed ido
Ġalter cation
Dis plays
ĠApp licants
C US
Text area
ĠAng ola
.f uture
ĠUS HORT
Ġsuppress ing
Ġset zen
AP olynomial
Ġto ch
Ġhall mark
Ġ$ $$
ĠCHAR SET
.r pm
ĠD ich
---------------- ----
_p arm
è¿ ĺ
acc iones
h ait
WAR DED
_r outing
ĠN OM
Ġen clave
ĠLot to
ĉf r
complex Content
ĠBall ard
k ube
/w in
.getColumn Model
_RE PLACE
Header Value
Ġest udiantes
Ġap is
Ġb pm
ĠType Name
And Get
rit a
Pl ans
> Note
Ġfet isch
Ġton ed
_g oto
ons ense
Ġm olds
Ġinfiltr ation
ĠGuerr ero
ub bo
ck i
($ (".
_ activities
(ch anges
Ġof App
ĠKe pler
ĠD emp
ĠCont inent
.T icks
ĠUn signed
ĠJah res
Ġfresh men
ĠArch ived
ĠкоÑĤоÑĢ Ñĭй
Ġ' ::
T utorial
C c
Ġtable LayoutPanel
from Json
.level s
_trans ient
Ġendors ing
ĠD IC
la uf
Ġsh red
_E MIT
ific antly
AL A
/ proto
Ġnarrow ing
U tc
Fact ors
Ġsent ient
æŀ IJ
lix ir
ĠC ROSS
met eor
Ġgro in
Ġm db
ĠRot terdam
Ġcom ida
ĠOp Code
ĠDefault Value
Permissions Result
Ġheter ogeneous
Ġm oot
Ġde ceived
-in dependent
ĠObject OutputStream
Ġover power
.d up
Ġl db
Ġdomest ically
Ġbest ellen
Ġlo v
ĠContract ors
Tri angles
Ġfod der
Ġfilm es
ä¼ ģ
Ġrev olver
Startup Script
/ validation
ĠResource Type
i ÅŁ
ĠL az
f ef
Ġlst m
{ *
. attachment
.h its
ew ith
DO G
Al abama
Ġmedium s
.m Context
-c ols
åı ĭ
.not ice
Ġat tn
ĠP acking
ĠL n
_COM PLEX
/ Users
.sav etxt
ĠR ounds
?,?, ?,?,
Ġing l
ĠR OC
_f emale
ĠSt ard
]] ;
Ġwrest lers
Ġtorrent s
Ġsin h
 ĊĊ
ë³ µ
s ense
how ever
.Ph ysics
Inf rastructure
ĠSac r
F el
ĠD ISTRIBUT
é ments
ĠValid ates
################################################ ############
Ġ| /
Ġes l
Ġré seau
ĠB ip
BY TES
_W ATER
Turn ing
EL S
Ġj uxtap
Ġlesb ische
ý ch
( Unknown
Ne o
@ JsonProperty
Ġal umnos
ĠRaq qa
ime i
.get Bounds
.Mouse EventHandler
#### ###
Generic Type
/c ms
Ġturn o
Ġм ин
Ġfolk lore
ĠE vo
Ġconduct ivity
Ġle ben
Ġgear box
-v s
ĠÏ Ĩ
Ġdrink ers
Ġcon exao
ĠTe eth
Ġget Arguments
ĠR AT
ent ious
E duc
+ W
ĠInstitution al
ĠB ord
is Equal
(p wd
Ġign ited
ĠR ousse
Ġimpact ful
ĠM alk
Ġg eral
ĠP ivot
Ġa zt
Ġcsv file
ĠR ope
ĠSOL UTION
ĠArbit rary
Ġlet to
.Mouse Adapter
Ġ} }}
ĠSail or
der a
Put ting
Ġconcentr ates
Ġauth Domain
âĢĿ çļĦ
-f inals
, strlen
Mu on
ĠOrd inary
fire fox
ĠLa TeX
ĠH und
engine ering
/ blue
ed TextBox
(" ");
ĠC DDL
ke pt
ĠGet String
K ir
() ='
ĠO CD
ant ium
$ menu
ĠAppalach ian
Secret ary
ë¥ ĺ
ี ย
Sem antic
Ġ* [
est one
ung kin
Max Y
-t one
"} ;čĊ
_P art
< Member
tr am
Ġtrans istor
Ġ---------------------------------------------------------------- ----------Ċ
ĠDes de
Ġright ful
ĠCorn el
æ ij
.H OUR
Ġsidel ined
ref errer
m aze
Ġhol ster
Ġcripp led
ĠDate Formatter
oph age
_m D
Ġdes elect
ra ud
ĠPK K
row Data
Ġlock smith
.res ponses
(product Id
_ST MT
Key Type
.Th en
z ee
Ġcr t
ĠGrand ma
@ Resource
Ġbit wise
-c mpr
ãĢĤ www
zeit ig
& display
Cart Item
- No
Ġnum éro
Ġm aur
Ġinst ancia
ĉd t
_n pc
Ġskate board
âĢľ All
ĠCrow d
Ġä n
Ġb raz
ca e
yn et
/p m
/s creen
OPT ARG
ĠV Box
Ġle opard
_g reater
c pt
< dd
Ġmechan ically
osp els
) f
.l wjgl
.get Port
ĠP REF
.Add Transient
pp ard
Ġí ļĮ
Ether net
Ġsal ine
(level s
Ġservice Provider
.A ngle
alt itude
illa ume
Ġs cape
_CAL C
_ quest
ĠDiss ertation
ĠE DM
-C ds
Ġhon orary
st ops
Ġsub dir
ĠV H
ĠChe at
Ġright fully
Q E
.Write Byte
fig ures
enn ie
( DBG
Ġvoks ne
Ġexp ended
UN ICATION
il inx
ĠRec ap
_ verts
Ġtra umat
Ġget Player
Ġverb ess
Ġcultiv ating
Ġiniti ator
Th ông
find First
_per ms
Ġbu c
Ġ""" čĊčĊ
T YPES
object Manager
(Configuration Manager
Ġtim id
Ġsnap chat
Ġcon seg
ĉd istance
_right s
_D es
ĠF lesh
- ver
Ġa fl
fra uen
Ġblas ph
ĠQual ität
ma f
Monitor ing
.D iff
Ġshore line
Ġresponse Body
mem set
< decimal
Smarty HeaderCode
Ġin sets
ĠBinary Tree
amed a
Ġn ihil
ĠN ay
ym ology
ĠW G
Ġt api
ĠInst alled
m aintenance
)} "Ċ
ĠX O
-per iod
s ar
Ġning una
ORM AT
.set PrototypeOf
ĠK b
ĠHen rik
ét ique
ĠLah ore
ĉ Address
Ġmel ts
N y
_adv ance
Ġveloc idad
Ġalum no
Ġsanit izer
Ġph ishing
ĠCom et
Ġch iar
ĉs pec
trim med
(state arr
on nen
Re venue
L ens
Ġcha ired
ĠAss umes
Tr ash
_un set
\ Bridge
Point Size
ĠPol ic
Ġsex uales
ĉd fs
ĠWide String
Ġaccru ed
Y W
_S CHEDULE
Ġk ite
Ġparach ute
[ table
Ġactive ClassName
.Qu ad
Israel i
ĠÅ ĵ
Ġho og
Ġch á»ī
ew ear
Ġtire lessly
set Error
.get Amount
.set Items
ĠM anson
ĠBay esian
_F lag
AC HER
/ original
Ġimm ac
ĠLos ing
' >ĊĊ
L ic
ĠMir age
ĠAssembly FileVersion
Te V
ĠValue EventListener
-s olving
Th o
rou lette
_W P
Ġunint errupted
Ġfield Type
.T yped
Ġam our
Ġmock ery
(v ol
ĠSub committee
ĠR uf
ero x
:UIButtonType Custom
ĠBl ur
Ġwy kon
nc es
ASH BOARD
!! ");Ċ
Ġmurder ers
.d aily
ĠDI AG
j ing
Ġdol phin
Ġl òng
Ġb ö
ĠV ocabulary
.St Object
') ">
Ġz un
Ġscrim mage
tr éal
ĠL ig
[ vi
C ole
Ġfrost ing
.Pl ayers
- translate
Fe els
=\" /
.Butter Knife
Ġ?> ;Ċ
Ġav i
inn ie
.F ailure
Ġsp indle
Configuration Exception
_h op
Ġpos ição
ĠA wait
UIImage PickerController
ĉ day
Ġgen om
C ab
ĠÑĢ ÐµÐ·ÑĥлÑĮÑĤаÑĤ
OR IGINAL
Ġejac ulation
(t cp
SE COND
Ġton ic
ĠList Box
Ġ ĉĉĊ
() >Ċ
Ġqu atre
ượ ng
with Errors
.M aybe
, â̦
token Id
_UN DEF
Ġfresh ness
ĠAmend ments
.map box
.C V
(b log
_get time
. quest
s parse
Ġres ale
Ġenthusi astically
ĠProstit utas
W a
C argo
.Parcel able
SENS OR
ĠRy u
La ughs
_N ative
/ pg
yst s
Ġphot oc
ç® Ģ
ado pt
.spec ies
conc iliation
Adjust ed
.Firebase Auth
ut tle
ord ination
Ġm unch
ĠSt ake
.p ing
ank er
(QString Literal
Ġsub script
ĠĠ ĉĊ
ĠM CC
_C md
se xy
i ou
ĠM ANY
Ġn anny
TR AIN
Ġflour ishing
ĠW atches
ĠQ Map
ĠF erm
Ġwas m
ĠA bed
_ UD
ĠGlass es
+ v
Att end
.Ch ain
Ġdec ency
ĠSupplement ary
h unter
-t xt
Ġ" }";Ċ
.set WindowTitle
("
ĠnumberWith Int
Ġaf ar
ç§» åΰ
rit te
/ lists
) âĢĿ
Ġdivers as
Ġem ber
.React Node
Ġk ang
ĠStam ford
[ at
.close Path
Ġcontrace ptive
(loc ations
Ġav anz
ĠCont ainers
ĠSch olars
.ac curacy
ĠвÑĭп олн
åķ ı
=" --
ĠWrest le
ĠGu antanamo
Ġn ymph
(g uess
.set Column
_t E
.content Mode
Ġinvalid ated
ĠSh ooter
ĠM ater
.Sub mit
Ġang led
navbar Dropdown
A o
Ġæ µ
иÑģ к
ĠSC AN
ĉc m
ĠMark t
tr uck
; 'Ċ
//////////////////////////////////////////////////////////////////////////////// ĊĊ
Ġg hetto
Ġbu iten
ĠCl own
: !
Ġchim pan
' field
am mo
ĠDep end
) })
( FLAGS
ĠR CA
ĠCh oir
Login Page
ĠG ord
Comp act
-p ocket
Ġconsult ar
ĠInter cept
ÅŁt ir
uet ype
on ents
Ġstart Position
Ġpos ix
ĠWohn ung
_EX PRESSION
ĠLogin Activity
(op code
ĠT ango
ĠNumber Of
. overflow
ĠW CS
ĠOccup ation
_c g
.Top ic
ĠCare ers
AR ATION
.get Line
Ġì¢ ħ
ĠN acht
Ġto Item
in clusive
avi est
- appointed
(int ernal
CON TEXT
(d igits
={ "/
Ġplay wright
Ġdead liest
le ads
.P UT
Ġ* }ĊĊ
ĠP act
ĠDiscount s
Localized Message
ĠM änner
_ >
Ġmasc ara
( Profile
åĬŁ èĥ½
imit é
Ġwild fires
- ROM
.is On
(group Id
Re pair
accum ulate
Ġ< ",
Ġhand written
Ġach eter
ĠM GM
ĠIr ma
->{ _
ge e
cr iminal
Ġèĭ¥ è¦ģ
Ġmoment arily
") !=
_l it
Ġexpires In
." ).
éķ¿ åº¦
Ġfr ække
vl c
Ġor bs
), $
Ġvent ured
/ >\
char m
N uitka
eld ig
aton in
W itness
-l at
Ġset Hidden
Ġrelic s
Ġcons ulate
. IGNORE
" After
Ġset Address
Ġbeste ht
Ġ'' )ĊĊ
.x axis
Ġser ão
Ġmis led
_UN IFORM
ĠV IA
inc r
Ġzen ith
Ġvis cosity
Ġthin ly
.get SharedPreferences
.Error Code
"), "
ĠMillion en
Ġ/> )Ċ
Scroll Indicator
-se eking
ĠPOLIT ICO
as ca
_r l
N avig
(full file
Ġsol itude
Ġju ven
Ġhaul ing
ĠMac ros
ĠG ry
Ġexerc itation
ĠATT ACK
Tick Count
Ġr ites
Ġdo e
Particle System
Ġsl u
Window Text
ĠClass Name
Ġsl ander
ĉ Port
j ong
? a
.D ial
âĢĶ at
$obj PHPExcel
Ġso ar
EN N
appe ared
Ġquot id
em achine
Ġn ip
Ġmicro time
ĠAl ma
; !
---------------------------------------------------------------- --------------------------------
ĠPass age
Ġdump sters
ĠEx clude
Ġsuggest ive
ĠCircularProgress Indicator
_cl r
Array Type
ILL A
Elapsed Time
Dr iven
Ġresource Name
ĠG arrison
ser ir
-a head
Ġp innacle
ĠEs presso
S parse
Ġass ays
ĠGirl friend
im id
]=' \
ONGL ONG
Ġportray ing
L ane
Ġb úsqueda
Ġrein forcements
ĠSpread sheet
ĠArray Collection
, arr
light box
ic ana
< "
build ers
K id
ĠMat SnackBar
EX PR
od cast
ĠFound ations
Ġind s
=' ${
F izz
-function al
(work space
Ġstem med
_p atches
ĠJar vis
READ ING
Ġdisrespect ful
ĠQ Dom
Ġ$ {Ċ
est atus
Re ached
! .ĊĊ
IL T
ĠN DEBUG
ĠCour age
birth date
ĠT ing
Ġutil izado
án chez
Out door
Ġhand guns
Ref Count
É Ļ
rom o
Ġt ts
.S he
ĠP ane
ãĢij, ãĢIJ
ĠIO CTL
/ black
ins cription
Ġbi opsy
ĠTime Interval
.Test Check
ĠGUI Style
ĠCap ability
ĠBeit rag
don nees
T reatment
.back up
Ġsign ings
ĠB oca
dr m
.M AIN
Ġgo ede
ĠMark up
G REE
ĠBase Service
.C reator
Ġj ails
ĠK ahn
Ip Address
ACH I
Ġinhib ited
Ġ@ $_
ĠAss ass
Ġenvi ado
Hero es
ÐŁ еÑĢ
ĠM aven
.l s
Ġ ive
| RF
Ġresize Mode
Ġrum pe
_attach ments
T U
Ġtact ile
Attempt ing
Ġro bin
y aw
Ġmerc enaries
ĠHab itat
end date
Ġo xy
ĉR andom
oh on
Is Null
ĠValidation Result
ãĥ ļ
um bed
pp v
Ġar p
ich ick
_r nn
ĠT FT
Tex Image
" On
ĠSam pler
top l
Ġj ane
y ling
ĠUN ICODE
Tab Index
< {Ċ
s uspend
uv ian
, application
ол иÑĩеÑģÑĤво
y at
ez ier
ĠCH UNK
ĠAd ler
/ Add
ĠKey Value
Ġspos ób
Sam pling
ch ers
_AM D
R u
.Must Compile
N ation
Ass oc
Man aging
ĠEng l
_G B
Ġsucc inct
Ġdis liked
ĠI ke
Bullet in
_ARCH IVE
Prop osal
Ġjog ging
.C REATED
Ġch ol
è£ ħ
Į ¨
-p ush
Ġreserv a
core v
è tre
TH R
Ġincompet ence
Ġchar isma
æĦ Ł
Ġ" ==
BT N
ĠLoc ator
iv et
('. ')Ċ
Ġfor IndexPath
ô me
Ġcapac it
w aters
ĠWR ONG
ho a
ĠM IPS
Ġem iss
ĠJacqu eline
(c mp
Ġe ens
Le o
.tim ing
CLUS ION
Ġ(" -
åĵ Ī
.k ode
ĠUnd ert
Ġbew ild
ĠEss en
.h d
Ġren egot
Ġm ower
Ġl sp
Ġpen chant
Ġman oe
Ġag li
Ġrec al
ĠOPER ATION
(^ )(
ĠÎ ½
ĠSc oped
Ġ@ "Ċ
= label
[ loc
Int l
ĠN z
table t
.Column Name
Ġscreen Size
DB us
co oked
- registration
âĢľ One
-n on
ĠwiÄĻ c
Ġcost a
.add Tab
. conditions
ĠH ess
MEM ORY
ĠAval anche
() }}Ċ
Ġtri plet
Ġl abyrinth
ĠNode List
ĠNY T
Ġy eni
d ff
.Html Controls
AV IS
/ Math
Ġmem cmp
Ø§Ø ¡
оÑģ ÑĮ
c rap
(p ages
Ġl xml
ĠQ DateTime
_t cb
Ġopen id
Ġsyn aptic
ĠMD MA
(s lug
igm atic
en or
Ġcr amped
G OP
Ń IJ
.is File
ĠD ifferential
Ġ=" ";Ċ
ĉĉĉ ĠĠĠĠĉ
ĠC ooke
ĉU FUNCTION
Ġpersever ance
Relative Layout
IMPORT ANT
Ġex on
Ġо н
ib ase
(C ONT
n ovation
ä½ ķ
[ sub
Admin Controller
HTTP Header
cre ar
ĠN IR
ĠDrop DownList
Ġval ide
Ġde hydration
. ']
(W IN
Ġ... \
Ġphotos hop
ĉ Init
_c ou
Ġtime Zone
dar win
rom atic
Navigation ItemSelectedListener
br ates
] --;Ċ
Ġtraged ies
ĠPed iatrics
SM ART
-A PI
ĠMessage Lookup
ĉ vo
Ġprejud ices
Ġm A
U ps
ĠMISS ING
ĉ ad
C ream
ĠT b
ĠMon a
_ ghost
ĉt ypes
Em b
ĠDocument ary
');ĊĊ ĊĊ
Ġl up
_ Reference
ĠB ATCH
Ġintertw ined
< Cell
ĠCab r
n ation
Ġis Connected
.remove Listener
Ġcon g
_t i
ĠSil icone
Ġê²° ê³¼
ĠW AN
ĠG ibraltar
/ response
ĉp erson
ch ants
V IP
em ergency
Pixel Format
- Am
Ġsouth western
_pl l
if ers
_ON CE
ĠF ayette
.nc bi
_P anel
.Q ual
Ġpol ys
Ġcreate StackNavigator
� t
Ġlay offs
ĠBl anco
Fe at
ĠV imeo
_ch i
_l ifetime
POINT S
, private
Ġunb earable
print ing
Ġc gi
.B ACK
Ġintern s
ĠNew ly
inf eld
( IB
ĠK ata
ĠDef endants
Th r
é¢ Ħ
_V F
FFFF FFFF
Ġdavid jl
Ġbitter ly
S uggestions
.set Cancelable
FIN AL
ason s
_rw lock
_WRAP PER
Ġhapp iest
(row Index
ós ito
TOT YPE
Autom ation
Log File
Ġcons olation
ãĥ Ģ
Ġt êm
Ġpr er
rg yz
ĠG eg
ĉd to
.default Value
ĠK ami
ĠA SE
optim ized
Ġíı ¬
Ġorigin ates
err Msg
Ġespa ço
(S YS
ĠMc B
d ance
_det ected
Ġfr ü
ĉĉ ĠĠĠĠĉĉ
< Date
(com b
ĠDec ide
\ Field
ĠProp osed
R ib
Ġdis likes
ĠW ien
ĉ Document
Ġtr af
Ġst oria
ĠT ells
') ==
C ri
( VALUE
ĠBurn ett
, void
Ġdan h
Ġc cp
Block chain
:"- "`Ċ
IC lient
IS ODE
Iss uer
) }čĊ
, but
ĠU ph
( Sub
Ġtélé phone
ĠonData Change
Ġmarsh aller
-an alytics
, content
Ġdeb acle
_Value Changed
Ġfa una
Ġ# =>
Ġf oyer
'util isation
ĠMü ller
ĠFet ish
Ġdefault Manager
Ġback track
B ah
Exp licit
_A SCII
Ġm Activity
(M sg
Ġê² Į
ĠTER MS
ĠAng ie
HS V
ĠMos que
.N ames
íĬ ¼
rest e
_p arms
Ġgap ing
Ġcro pping
Data Frame
Ġrespons iveness
_ undo
_tr an
. terminate
Ġitalian e
Ġwalk through
Ġattract iveness
д е
_ST S
_ learn
Ġchocol ates
ier archical
-th inking
Ġ )))
ish ments
.Log f
ĠTM Z
ĠCan ary
fo il
ĠVacc ine
.v x
ĠSur round
Inter mediate
Ġi ov
v ais
'; ";Ċ
ï½ŀ ĊĊ
éĢģ æĸĻ
â̦ it
Se ats
Cl ar
W ars
ĠHutch inson
ĠHas an
! ')ĊĊ
ĠRich ie
che iden
($ ('
Y ork
Ġl ids
Ġal phanumeric
ĠG lock
.sh apes
Ġspark ing
_ epsilon
uplic ated
.dir ty
]) ==
ĠìľĦ ì¹ĺ
Ġsc n
Ġ/ ****************************************************************
_PRE VIEW
_H C
ield ing
f gets
ĠAdd ison
Ġproduct Service
- figure
(ret val
z ano
Ġaut ob
ĉs d
_n umer
ĠSet LastError
ĠF ior
ific ance
Unt itled
Ġin field
Ġ{} ));Ċ
Ġsp ac
Ġro okies
(des cribing
ng en
ி à®
.r df
.M utex
Ġkne eling
ĠQ E
set Max
Read Stream
Ġvent as
s ut
cm peq
.WriteAll Text
ĠEx perienced
$ __
Ġka um
ĠL IS
Ġdocument os
_HE ALTH
icont ains
Ġart isans
OWN ER
Ġblink ed
get Display
Ġto en
Ġrow Num
Ġav ril
Ġinv is
ĠK ear
toBe InTheDocument
ap ur
Ġr acked
ĠMc Master
_ATTR IB
H az
Ġfact ura
/ ts
ĠÑĢаз меÑĢ
Ġz f
Ġshort fall
.f asta
ĠCONST ANT
.man aged
g ems
Shared Pointer
Ġblur ry
b rightness
( components
Ġ... "ĊĊ
SE LL
ĠIllustr ator
.get Channel
Ġtrou vé
yst ers
Ġvo is
ĠLind en
Ġem ojis
Ġb rawl
ĠMS R
ĠE lo
ĠCroat ian
Popup Menu
L ewis
.J WT
Ġaston ished
B ush
(item Id
Ġdet achment
ĠEnc ore
å° Ķ
Ġre kl
Ġcr am
)$ /
.get Host
_re commend
- HT
_cal ibration
Auth enticate
.firebase app
UN IX
ĉC amera
ĠHE AP
I deal
. office
Ġgoof y
(S ymbol
Ġjou er
_part itions
Ġrapid ement
ĠGN UNET
id User
Ġsuperv ise
( Contact
AW N
ãģ ĺ
Ġna am
Ġa ust
åľ¨ 线
_soft max
Allow Anonymous
amm able
RO UTE
* D
Ġad en
ĠCrist ina
ĠCrist iano
Ġblood stream
sub class
_person a
CH ILD
-k now
Ġnavigation Options
ĠZuk unft
ĠPix ar
Ty ler
Ġunder world
Ġsincer ity
Ġdispens er
Ġk ter
idd ers
.add Node
- checked
Ġke yst
ĠW TO
.sign als
Ġadvent urer
ĠP ang
\ R
= pos
Ġdispens aries
ĠClo set
("{ \"
ide on
Ġnécess aire
() "Ċ
_RECE IVED
Ġrésult ats
Ġmod en
ĠIceland ic
; d
. allowed
(new User
Ġmerc iless
.Wait For
Ġday care
ĠCon veyor
ç ĸ
ð ¬
ç ĥ
ç Ĺ
ç ł
è Ħ
é ²
å ¦
çĿ Ģ
å¾ Ī
é ħ
ç ĭ
é ª
æ Ĥ
é ¥
è ħ
æĥ ³
å ¨
é ¹
ç Ĥ
å Ĵ
ç Į
è´ ¨
æ ¢
æ° Ķ
ð «
æķ Ļ
ç Ł
å Ħ
åıij å±ķ
åĪ Ľ
è ij
æ ħ
å ŀ
åģ ļ
æĪ ĺ
æ IJ
å¼ º
æ· ±
åĩ ł
ç ¿
å ©
è ŀ
å§ Ķ
åIJ Ħ
è İ
é ¸
é º
åı Ĺ
èģ Į
å ĺ
æ ½
é£ İ
èIJ ¥
åħ ļ
è ľ
éĤ £
é¢ Ĩ
ç ij
é ³
æľ ¯
ä» Ģ
æĪ ¿
ç² ¾
å ª
é Ĩ
å¤ ª
èĤ ¡
è Ľ
åħ ī
æŀ ģ
åĬ ŀ
è ĵ
ç ĺ
å ´
å Ĺ
èĬ ±
çł Ķ
å¿ «
å¸ Ī
è¶ Ĭ
è§ Ĥ
æ ¤
æ ¦
ç ŀ
èĤ ²
çĪ ±
çĻ ½
ä¸ ĸ
ä»Ģ ä¹Ī
çľ ¼
å ³
è Ĵ
æ ĵ
è¢ «
å¹ ²
çĹ ħ
å£ «
ç Ĵ
è ¸
æ ¾
å·¥ ä½ľ
è® ©
çĥ Ń
è¾ ĥ
åĦ ¿
åĬ ©
ç§ ¯
ç ³
ç ĵ
ç £
å Ĥ
è ¹
è ļ
å· ±
çĻ ¾
åĬ ¿
èµ Ľ
æ ¨
æ ¿
è ĸ
æĿ ij
å¸ ¦
å¢ ĥ
æĬ ¤
é Ń
å «
èĩª å·±
æµ İ
ä½ İ
åĮ »
éĺ ²
åĨ ľ
è Ĩ
ç Ĩ
é «
åĨ Ľ
æĪ ı
åį ĩ
æĸ ¯
ä½ ı
èIJ ½
åħ »
èĩ ´
ç Ĭ
ç ĩ
ç ħ
è Ķ
ä¼ģ ä¸ļ
åĽ ¢
æī į
æł ¡
åĩ Ĩ
å¥ ĩ
åī ¯
é ¼
æ¼ Ķ
é© ¬
èµ °
ç¥ ŀ
åħ ĭ
æľ Ľ
æ² ¹
è¾ ¹
åį ĥ
å¾ Ģ
åĪ ĩ
æ ©
ç ¶
å Ļ
éĻ ħ
çī Į
社 ä¼ļ
游 æĪı
æĸ ½
ç ħ§
æİ §
æ» ¡
è¯ Ĩ
éĩį è¦ģ
è¶ ³
çķ Ļ
ç» Ĩ
åį ı
éĢ Ĥ
æ ĩ
æ §
é Ħ
è Ŀ
å¸Ĥ åľº
ç»ı æµİ
ä¹ ł
æĸĩ åĮĸ
éļ ¾
ä¹ IJ
åĨ ³
æ¬ ¢
è§ ī
åĽ Ń
åħ ´
åħ ħ
ä¸ ¾
æī ¹
è ķ
æĬ Ĭ
æĬĢ æľ¯
ç© ¶
第 ä¸Ģ
ä¾ ¿
åĵ į
çİ ©
åĿ ļ
èŀ į
åį Ĭ
åĸ ľ
å± Ĥ
ç¦ »
ä» ħ
é Ł
åij ³
å¿ µ
åŃ £
ç´ §
ä¹ ħ
é ¤
é ŀ
è ¤
åĢ Ļ
åĨ µ
ç Ł³
åģ ¥
æĢ İ
å® Ŀ
è¡ Ģ
åŁ Ł
æĹ ©
çŁ¥ éģĵ
è´ Ł
åį ļ
å· ´
äº ²
å± ŀ
ä¸ ¥
äº ī
å¯ Ł
è º
ç °
建 设
产 ä¸ļ
åIJ ĥ
åŃ ©
æĹ ħ
æł ¹
æĿ IJ
ä¼ Ĺ
éļ ı
å® ĺ
åº ķ
å½ ©
å¯ Į
æ¸ ©
åį «
åī §
çĽ Ĭ
æĬ Ĺ
è´ ¢
çº ª
æ Ĩ
çĶŁ æ´»
çº ¢
çĶŁ 产
è¿ ľ
éĴ ±
åĶ ®
ç¾ ¤
çı Ń
æ¥ ¼
éĩ ĩ
èī º
å± ħ
åģ ĩ
è° Ī
æĻ ļ
é ¬
èĪ ª
å® ³
è Ĺ
ç į
å µ
çİ ĭ
åº ·
è İ·
ç» Ń
äº ļ
é£ Ł
åİ ĭ
æĭ Ľ
èĮ ĥ
è® ¸
åĽ ´
é ½
éĻ į
çº ³
åĵ ª
æķĻ èĤ²
å·² ç»ı
å¾ ·
æŀ Ĺ
å®ī åħ¨
é¾ Ļ
大 家
éĿ Ĵ
åº ľ
æ² ³
åı ¤
èį ¯
åĿ ĩ
æĻ º
ä¹ ¡
çķ ¥
åĨ ·
ç¦ ı
å® ¤
ç» ´
æī ¿
å± Ĭ
è¯ ī
åĪ »
è Ł
æ ª
å°± æĺ¯
è¿Ļ 个
ä¸Ń å¿ĥ
ä¸ĸ çķĮ
åŁİ å¸Ĥ
éĿŀ 常
åĪ Ĵ
åı Į
æĢİ ä¹Ī
åΰ äºĨ
æľ ĥ
åı ²
ä¾ Ĩ
å¾ ĭ
å¥ ĸ
ç» Ī
åª Ĵ
å® ģ
è¯ ¾
èģĮ ä¸ļ
åħ į
æµ ĭ
æĢ ¥
æķ ij
çĭ ¬
èŃ ¦
é¤ IJ
æĦ ¿
è´ «
çĸ ij
å ļ
å¥ ¹
åı Ī
åĽł 为
ä¸į æĺ¯
å¤ Ł
æĸ¹ éĿ¢
éķ ĩ
äº Ĵ
éħ Ĵ
è® ²
çĸ Ĺ
æĺ ¥
æ¹ ĸ
å¤ ľ
è´£ ä»»
人 æ°ij
åħ °
çŁ Ń
æķ ħ
åĩ ı
æĻ ®
äº ®
ä¾ Ŀ
åį °
éĿ Ļ
åĢ ĭ
å¾ ģ
åIJ ¸
ç¼ º
æĶ »
åĩ Ģ
åħ ¸
åĽ º
è® ¿
ç ¹
ç Ģ
æıIJ ä¾Ľ
ç» ĩ
å¾Ī å¤ļ
çłĶ ç©¶
è· Ł
主 è¦ģ
æĥħ åĨµ
çŃ ĸ
æŃ »
大 åѦ
æĶ¿ åºľ
å½± åĵį
ä¹ °
åħ Ń
éĻ ©
åħ «
æŁ IJ
è´¨ éĩı
åį ł
å· ®
æĽ´ å¤ļ
æľ ĭ
éĿ ©
å® £
çł ´
è½ »
åº §
æĺ ¾
ç¨ ³
è´ µ
èĥ Į
èī ¯
çĸ «
æ¯ Ĵ
ä¹ İ
åĢ Ł
è¿ ·
çŃ Ķ
æ¿ Ģ
åij ¼
äºĨ ä¸Ģ
è¶ £
ä¼ ´
ä¼ Ļ
è ¼
ð¬ Ń
åĽ½ å®¶
æ´» åĬ¨
çݰ åľ¨
ç§ij æĬĢ
åį ¡
ä¸į åIJĮ
个 人
è®° èĢħ
ä¸į æĸŃ
éĹ »
ä¹ Ŀ
èij Ĺ
ç» ¼
ä¸ ĥ
æł ij
æľĭ åıĭ
åį ĸ
ä¼ ¤
æ² Ļ
åĸ Ħ
å¥ Ĺ
è½ ®
ç© ¿
è¡ ¥
ä¸Ģ å®ļ
çª ģ
çĿ £
è¿ ½
å¨ ģ
åı ¦
åĽ °
æŀ ¶
ç» Ŀ
æķ £
æİ ¢
æ´ Ĺ
ä¸ ´
ä¼ ¼
è´ ¸
ä¸ °
æĺ¯ ä¸Ģ
ç« ŀ
è¿ İ
èģ ļ
è «
æį Ł
æī §
é© ¾
è¿ Ŀ
è ¥
è ł
ä»ĸ 们
æĹ¶ åĢĻ
å® ĥ
人 åijĺ
è¿Ļ æł·
å·¥ ç¨ĭ
åĪĽ æĸ°
åŃ© åŃIJ
å¸ Į
éĥ¨ åĪĨ
éĵ ¶
代 表
é¦ Ļ
å¸ ®
æİ¨ è¿Ľ
çĽ ĺ
积 æŀģ
éĥ¨ éŨ
åŁ ¹
æŃ ¦
ä¸į ä¼ļ
çŃ ij
éĢ Ļ
çİ© å®¶
æĭ ¿
åİ Ĥ
æ¯ Ľ
çģ µ
æŃ Į
ç »¿
å¦ Ī
çĽ Ľ
é¦ Ĩ
é¡ º
èĦ ¸
å° ¼
ä¸ ½
å¥ ¥
éģ ĩ
è¯ į
å° ģ
ä¸ Ŀ
好 çļĦ
æĭ ħ
èĦ ±
æģ ¶
åİ ļ
åĬ ³
çĽ Ł
æĬ ĺ
åı ¥
æĢ Ģ
æŁ ĵ
书 记
åĨ ł
é² ľ
æ ¦Ĥ
éļ IJ
å¹ ħ
èµ ŀ
å¹ ķ
æ¥ Ń
éģ Ĺ
åĪ ¤
è ĺ
å ¶
æĬķ èµĦ
è¡Į ä¸ļ
äº ij
çݯ å¢ĥ
åѦ çĶŁ
åIJĪ ä½ľ
åģ¥ åº·
é£ ŀ
ä¸Ģ æŃ¥
ä¸Ģ 缴
åıij çĶŁ
éĺ ¿
é¢Ĩ 导
åĸľ 欢
åºĶ 该
çĤ º
è® Ń
æĿ Ģ
æ¸ ¯
交 éĢļ
éĺ ¶
éĴ ¢
ä» ¤
å° ½
æ¯ į
è¡ £
ç² ī
é¡ ¶
ä¹Ł ä¸į
æĬ ĵ
èĭ ¦
å¹ ¸
ç¤ ¼
第 ä¸ī
大 çļĦ
éģ İ
çĥ Ł
éģ ¿
ä» į
åº Ĩ
æĢ ķ
è° ¢
çĽ ĸ
å° Ħ
éľ ²
æĸ Ĺ
ç Ĭ¶
åŃ ¸
æ¯ ķ
å· ¨
çŁ ¿
çļ ĩ
å¸ Ń
çĹ ĩ
æī ¬
å» ¶
ä¾ §
æ· ¡
çļĦ ä¸Ģ
ç¶ ²
æ´ ģ
ç ¸
è§ Ī
çŃ ¹
ç§ ĺ
è¯ Ĭ
çı ¾
èª ī
æ¯ «
ð ¨
åį ´
æĪIJ 为
èĥ½ åĬĽ
é» Ħ
æĹħ 游
èĪ ¬
æ¯Ķ è¾ĥ
èµ· æĿ¥
äºĨ è§£
èĩª çĦ¶
ä¸Ģ 次
åŁº æľ¬
æĽ ¾
综 åIJĪ
èı ľ
è§ī å¾Ĺ
第 äºĮ
è· ij
æ³ ¢
åĢ Ĵ
ç¡ Ģ
åħ µ
èį ī
çĶ ³
çĶ °
æĤ £
è§Ħ å®ļ
èĥ ľ
èµĦ 产
æ¢ ¦
æľ Ŀ
è¿Ļ éĩĮ
å¤ «
æĮ ¥
ä½ Ľ
å® Ī
éĽ ¶
æĸ ¼
ç¯ ĩ
å² Ľ
åĵ ¥
éŃ Ķ
ä¸į åΰ
æī ĺ
åº Ĭ
æ¬ §
èį £
æ± ĩ
æī ©
åģ ı
å¢ Ļ
è® ¯
å© ļ
æĥ ł
æ´ ĭ
å® ľ
æ¶ ¦
æħ ¢
éĢ ı
å® ½
é¡ ¾
ç´ ¯
æ± ¡
çĪ Ĩ
ç§ Ł
æĥ Ĭ
æ¶ ¨
é¥ °
éĺ µ
é¥ ®
æļ ĸ
åº Ł
æĹ Ĺ
éļ Ķ
ç¶ ĵ
åĭ Ļ
å¯ ¦
éĢ Ķ
æī «
çĥ Ī
éĽ »
åĪ ij
éĹ ľ
éĹ ª
å¥ ĭ
å Ĥ¨
ç¼ ©
ä¾ µ
å ¬
𬠶
åĽ½ éĻħ
ç»Ħ ç»ĩ
ä¸ĵ ä¸ļ
åıij çݰ
å¸Į æľĽ
ç»ı èIJ¥
åı «
æĿ¥ 说
éļ ľ
ä»» ä½ķ
交 æĺĵ
éĩį çĤ¹
çļ ®
ç» į
æ´ ¾
ç§ij åѦ
åºĶ ç͍
建 çŃij
èĤ ī
æĶ¹ éĿ©
åŁº ç¡Ģ
æ± ī
åĩº æĿ¥
è¿Ļ ä¹Ī
åĪ ļ
åĿ IJ
ä¸į ä»ħ
ä¼ļ è®®
éĿ ł
åªĴ ä½ĵ
æ° ¸
åĨ ²
èĭ ı
å¤ ®
çĪ ¶
åł Ĥ
å®ŀ éĻħ
è¡ Ĺ
ç« ¥
éĺ ħ
äºĭ æĥħ
åİŁ åĽł
éħ ¸
以 æĿ¥
å¨ ±
å® «
åĿ Ĺ
ç» ©
éĩ İ
ä¸į å¾Ĺ
ä¼ł å¥ĩ
ç¡ ¬
åİ ħ
æĹ ¢
ç» ĥ
èĦ ij
å¼ ±
æİ Į
è´ ´
æĮ Ĥ
åħ³ éĶ®
å° ļ
é¥ Ń
åº Ħ
çĻ ¼
åľ ĭ
æİ Ī
个 æľĪ
äº Ī
å¸ ģ
è· Ŀ
æ² ī
ç« Ł
åĨ ¬
æĬ ½
éĨ Ĵ
å¼ Ł
è§ ¦
èģ ĺ
è± Ĩ
æļ ´
åijĬ è¯ī
è± ª
èµ ¢
è· ¨
è³ ĩ
çĪ ¸
æĬ ±
æµ ª
éº »
ä» ª
è¡ ¡
å¥ ¶
çģ ¾
èµ ¶
èĤ ¥
å§ IJ
åĢ º
éľ ĩ
è® ¢
æ¬ Ĭ
ç ·
å» ī
ä¿ Ĺ
å¿ ĺ
å¦ ĩ
ç¼ ĵ
åŃ ķ
æ¼ «
è£ ģ
çĩ ĥ
é» ĺ
çī ¢
çĪ ·
æĬ µ
å® ¾
æľī ä¸Ģ
è¿ ¹
è¿ «
è² Į
æľī çļĦ
ð¬ ĺ
è¿ĺ æĺ¯
æīĢ ä»¥
ä¹Ł æĺ¯
è¿Ļ äºĽ
对 äºİ
åIJ §
缮 åīį
èĩªå·± çļĦ
èĥ½ å¤Ł
å¦Ĥ ä½ķ
æľº æŀĦ
åıª æĺ¯
ç½ij ç«Ļ
åħ¨ éĿ¢
为 äºĨ
å¼Ģ åıij
æĸ° éĹ»
éĩij èŀį
ç» §
客 æĪ·
ä¸Ģ èµ·
èĮ ¶
åħ³ 注
æ°´ å¹³
åİĨ åı²
å¢ŀ éķ¿
é ±
åŁº éĩij
åº Ń
åı ¶
ä¿ ĥ
éĽ ¨
æ¶Ī è´¹
èĪ ¹
çŁ¥ è¯Ĩ
æĪĺ çķ¥
ç»ı éªĮ
å³ °
æĽ ²
èĦ ļ
åĨ °
å¤ ı
å½ Ĵ
ç¬ Ķ
èĻ ij
çĶ ²
åľ Ī
è¯ Ĺ
é½ IJ
容 æĺĵ
çłĶ åıij
éª ¨
çº ¸
è· µ
æĹ §
çķ ¶
åĪ ¸
è´ ·
åı ¬
ç§ ĭ
æ¶ ²
è¡Į æĶ¿
çĮ ®
èĤ ¤
éĢ IJ
è¶Ĭ æĿ¥
è¶ĬæĿ¥ è¶Ĭ
æĦı è§ģ
èĪ ŀ
åī Ĥ
æ¶ ī
ç¨ĭ 度
åħ¬ åħ±
æ¢ °
æľ «
çº ¯
åĶ ±
æ´ ²
æĬ ¢
æ¤ į
å¿ Ļ
ä¼ °
å¼ ¹
æ³ ī
æľĢ 大
è¶ ĭ
å· §
ç¦ ģ
æī ¶
åį ±
çı ł
çĨ Ł
æĭ ľ
主 ä¹ī
æĿ Ĥ
éĻ Ħ
éģ į
æIJ Ń
æĮ ¯
å¤ļ å¹´
æķ ¬
æij Ħ
çº ·
å¼ ĥ
æ¹ ¿
å¨ ĺ
æ¡ £
é© ¶
æľ Ĺ
æ® ĸ
æ¦ ľ
åĵ ¡
ä¸Ģ ä½ĵ
æŁ¥ çľĭ
ç¹ ģ
æµ ĵ
åħ¬ å®ī
æ½ ľ
è´ ¯
éª Ĺ
æ IJľ
å· ¡
è ¬
é Ĭ
å§Ķ ä¼ļ
æĤ ł
åī ©
æı Ń
åŃ£ 度
ð «ĺ
𬠬
ä ´
ð ª
ä½Ĩ æĺ¯
éĥ½ æĺ¯
å¹³ åı°
åѦ ä¹ł
åĵģ çīĮ
ä¸ Ķ
è¿Ļ ç§į
æĶ¿ çŃĸ
æĭ ¬
认 为
ä¸Ģ èά
æłĩ åĩĨ
æĶ¯ æĮģ
模 å¼ı
åħ³ ç³»
çļĦ æĺ¯
è¿Ļ ä¸Ģ
ä¸į è¦ģ
çĶ ļ
ç²¾ ç¥ŀ
æĭ ¥
åĪ© ç͍
ä¿Ŀ æĬ¤
ä½ľ ç͍
èĭ ¥
åĽ½ åĨħ
ä»ĭ ç»į
ä¸Ģ ä¸ĭ
å·¥ ä¸ļ
缮 æłĩ
æľĢ åIJİ
ä»· å̼
å° į
éĵ ģ
è° ģ
ç»ĵ æŀĦ
éĽ ª
æĻº èĥ½
ä¼ł 绣
ä½ĵ èĤ²
çĶŁ æĢģ
æĭ į
æİ ª
åĨľ ä¸ļ
çī¹ èī²
è§Ħ 模
æĹ¶ 代
è¿ĩ ç¨ĭ
éĴ Ī
æĿ ¾
åĶ IJ
åĮ» çĸĹ
çģ ¯
åζ éĢł
æł¸ å¿ĥ
ä¸į åı¯
ç³» åĪĹ
åIJ ī
åľ £
åĢ ij
ä½ ³
æĿ¥ çľĭ
æ¯Ķ èµĽ
ä¸ĭ æĿ¥
åĩº äºĨ
å¹² éĥ¨
å¾® ä¿¡
å½ĵ åľ°
åį ·
åį« çĶŁ
ä¼ Ł
çĸ« æĥħ
è° ·
åĩł 个
éĺ ´
çĶŁ çī©
å° ¤
ä¼ Ĭ
èĤ ¯
éĿ¢ 积
åĪĽ éĢł
æı ¡
åľ Ĩ
æĻ ĵ
æĪIJ äºĨ
åĩ ¡
çĸ ¾
ç«ŀ äºī
è® ¨
主 é¢ĺ
é² ģ
è¿ ª
ä¿ Ħ
æĢ ª
ä¸ ¦
èĻ ļ
æ½ ®
çĥ §
èĢ ³
æ± ł
éĢĤ åIJĪ
æł¹ æľ¬
åĬł 缣
ç͵ è§Ĩ
æ· ·
ç¼ ĺ
çª Ĺ
çĬ ¯
æĥ ¯
æĦı ä¹ī
åĬŀ æ³ķ
ä¼ ij
æ» ij
åĭ ĩ
æķ ¢
å¯ »
è¦ Ĩ
éĢ ĥ
ç»ı çIJĨ
åĿ ı
æ³ ½
ä¹ ĺ
åĪ º
å± ı
é¡ ¿
äº ¡
éĤ Ģ
åħ ¼
åĭ ¤
æ® ĭ
æĺ ł
æ¯ķ ä¸ļ
æĪ ª
è· Į
å£ ģ
åı¦ ä¸Ģ
羣 å®ŀ
ç£ ¨
è¯ ļ
å¿ħ è¦ģ
æģ ĭ
æĩ Ĥ
å¾ Ĵ
è° ĵ
æķ ı
æ ύ
èĥ ¸
æĭ ¼
å¦ Ļ
è¯ ¸
èģ Ĭ
æĤ ī
éº ¼
åĩ Ń
èĪ Ĵ
æ¶ Ĥ
è¿ ģ
æ² ¿
å¡ ij
æĽ ¿
æ¾ ³
å¿ į
èĢ Ĺ
éľ ¸
åĩł å¹´
åĪ Ĭ
èĦ ī
èħ IJ
æ¡ Į
çº ł
æ» ļ
æĤ ²
åĨ Ĵ
å¦ ¹
çķ ħ
çº µ
æij ĩ
å¤ º
è·¯ ä¸Ĭ
å¿ ½
èĸ ª
æģ IJ
æĦı æĢĿ
å« Į
æı ´
æ° §
èĢ Ģ
éĺ »
è½ ¨
å¹ »
æį ķ
åĿ ¦
åĵĪ åĵĪ
çĭ IJ
æ» ¨
è² »
è¿ Ł
人 éĥ½
ç» ĺ
åı ¹
çµ IJ
æī °
æ» ĭ
å¥ ij
åĭ Ł
ç¢ º
ð ¦
éĽĨ åĽ¢
æĿ İ
å¼Ģ å±ķ
æıIJ åįĩ
åħ¨ åĽ½
汽 车
åѦ æł¡
æł¹ æį®
è¿Ļ æĺ¯
åĩº çݰ
éĻ Ī
ç½ Ĺ
èİ· å¾Ĺ
åĪ ĺ
éĶĢ åĶ®
æľª æĿ¥
éľĢ æ±Ĥ
å®ŀ æĸ½
åĿļ æĮģ
åħ¨ çIJĥ
éĵ¶ è¡Į
æİ§ åζ
é¡ »
åľ° åĮº
æīĵ éĢł
çļĦ è¯Ŀ
帮 åĬ©
ä½ĵ ç³»
è¾¾ åΰ
è§Ħ åĪĴ
åŁ¹ è®Ń
两 个
æĬ¥ åijĬ
åľ° æĸ¹
å®Į åħ¨
æİ ī
ç»ĵ åIJĪ
宣 ä¼ł
æ³ķ å¾ĭ
èīº æľ¯
ç͵ å½±
èª ª
ä¸Ģ çĤ¹
è¶ħ è¿ĩ
ç͵ åŃIJ
æĢĿ æĥ³
æķĻ åѦ
éĺ¶ æ®µ
åķĨ ä¸ļ
çī© æµģ
åĪĽ ä¸ļ
æĸ¹ æ¡Ī
çݰ 代
æ¡ ¥
èIJ½ å®ŀ
带 æĿ¥
产 çĶŁ
ç§ Ģ
æ³ °
ä¹ ±
åħ· ä½ĵ
åĸ Ŀ
èĵ Ŀ
å® Ĺ
åįĩ 级
æ·± åħ¥
ä¿Ŀ éĻ©
ç®Ģ åįķ
çĹ Ľ
稳 å®ļ
è¾ Ĩ
å±ŀ äºİ
å· Ŀ
ä¸į å°ij
åĴ ¨
举 西
å½¢ å¼ı
娱 ä¹IJ
æŃ£ 常
é¸ ¡
åħħ åĪĨ
å®ŀ è·µ
éĩĮ éĿ¢
è· ³
èĻ İ
æĪIJ éķ¿
æļ Ĺ
çĿ ¡
ç½ ª
çIJĨ 念
æĮ ij
èµĦ æľ¬
å¤ļ å°ij
ä¸ĭ éĿ¢
å¸ Ŀ
åħ¬ å¼Ģ
æ¸ IJ
éķ ·
å± ĭ
欢 è¿İ
å¿ĥ çIJĨ
çĤ İ
æ¹ ¾
è® ĵ
éĤ Ħ
ç³ ĸ
ä¹ Į
åĬ ±
çī Ļ
èħ ¿
å² Ĺ
ä¼ į
æĪIJ åijĺ
åŃ Ķ
å°ı ç¼ĸ
èij £
æ³ ¡
åħĪ è¿Ľ
åħ §
åĺ ´
è´ Ŀ
è »
æIJ ŀ
æ³ Ľ
é¸ Ł
ç½ ²
èĽ ĭ
主 任
缮 çļĦ
ä¹ ı
æ´ ¥
æĪ ´
严 æł¼
çħ ¤
çĮ «
åĶ ¯
å° Ĭ
çĶ ľ
åŀ ĥ
åľ ¾
æĭ Ł
çĦ ¦
é« Ķ
å® ı
æ© Ł
é© »
æĹ ģ
å½ »
éĥ½ ä¸į
æij ©
ä» ĵ
ä¹ ³
å² ¸
è° ĭ
大 å¤ļ
çģ Ń
èħ ¾
æŁ ľ
èĪ į
åħļ çļĦ
å° ĺ
åįģ å¹´
æĭ Ĵ
è£ ¡
æŁ Ķ
å¹ ¼
éĶ ģ
ä¸ĵ 项
æī İ
驾 驶
ç¢ İ
è¢ ĭ
éĶ ĭ
å£ ®
å° ĸ
ç͵ æ±ł
è¿ Ķ
æ¼ ı
å¾ ª
èı Į
èĥ ĥ
è¾ ħ
éĢ Ĵ
èĥ İ
éĻ ª
å¯ ¿
å¥ Ķ
çĮ Ľ
çº ¹
çŁ¥ åIJį
å¿ Ĩ
æ¡ ĥ
æ£ ĭ
éĢ Ĩ
çĤ ¼
ç± į
çī §
æł· çļĦ
è¾ Ľ
åł Ĩ
å®ŀ åľ¨
ä¼ ı
å® ¿
èµ ı
è£ Ĥ
åįĬ å¹´
åĢ ¾
满 æĦı
æ¢ ¯
æĦı åij³
åŃ ¤
ç¥ Ŀ
æĻ ¶
èµ Ķ
åģ ¿
èĦ Ĥ
ç½ ļ
ç¢ į
æ² ĥ
æ ĵį
å´ ĩ
æļ Ĥ
è· ĥ
æIJ ¬
å© Ĩ
é ī
éī ´
åħ´ è¶£
èIJ¥ ä¸ļ
è® Ĭ
èĦ ı
è¾ Ī
å·ŀ å¸Ĥ
è´« åĽ°
ç© ·
ä¸Ń å°ı
æ¼ Ĥ
çĻ Į
èľ ľ
ä¼Ļ ä¼´
çī µ
æĤ Ł
éĻ ·
èµĽ åŃ£
æ¨ £
åģ ¶
æĺ Ĩ
è¢ Ń
æį IJ
èī °
æ Ĥ¬
çĶ ¢
èij ¡
çĽ Ĺ
å© ´
å° İ
çº ½
åĢ ¡
æī ®
è¨ Ń
æĬ ij
ç¡ ķ
è¾ ĸ
éĥ ģ
è¾ ©
éĤ »
çݰ åĩº
è¦ ı
å½ ¹
éĺ Ķ
åī µ
è¯ ±
æĥ ij
æ· Ģ
é¢ Ī
ä¾ ¦
æģ °
æ£Ģ å¯Ł
éĨ «
çĦ¶ æĺ¯
åĭ ĥ
èĮ «
ä ĵ
𠬸
ä½ľ 为
çļĦ 人
éĤ£ ä¹Ī
ç¾İ åĽ½
è¿ĺ æľī
æıIJ é«ĺ
èĻ ½
åħ· æľī
åĮħ æĭ¬
æĪĸ èĢħ
ä¸į è¿ĩ
ä¸Ĭ æµ·
åĮ» éĻ¢
èµĦ éĩij
çĶļ èĩ³
åζ 度
è§£ åĨ³
èģĶ ç½ij
ç»§ ç»Ń
建 ç«ĭ
è¿Ľ ä¸ĢæŃ¥
æĿIJ æĸĻ
ä»Ĭ 天
å¿ħ é¡»
åIJĦ ç§į
çݰ åľº
ä»ĸ çļĦ
å¢ŀ åĬł
é¢Ĩ åŁŁ
åıĤ ä¸İ
æĮģ ç»Ń
ä¹ĭ ä¸Ģ
çī¹ åĪ«
é± ¼
åħ± åIJĮ
åĬ ª
çİ ī
人 们
åħĪ çĶŁ
ä¼ĺ åĬ¿
ä¿Ŀ æĮģ
ä½ľ åĵģ
çī Ľ
æĪIJ æľ¬
æĶ¶ åħ¥
åıĬ æĹ¶
è´Ł è´£
æİ¥ åıĹ
èį IJ
åıª è¦ģ
羣 çļĦ
导 èĩ´
æľº åζ
è¡Į åĬ¨
æĸ° çļĦ
å®Į åĸĦ
为 ä»Ģä¹Ī
ä¸Ń 央
æĪIJ ç«ĭ
æĦŁ è§ī
åıĺ åĮĸ
åıĹ åΰ
å¹¶ ä¸į
åŃ Ļ
æĸ½ å·¥
æĺİ æĺ¾
è¿ĩ åİ»
åıij æĮ¥
羣 æŃ£
åŁº åľ°
æĺİ ç¡®
èĥ ¡
许 å¤ļ
ä¸Ģ å¹´
æĸ¹ åIJij
æģ ©
缸 ä¿¡
åľ ³
详 ç»Ĩ
äºĭ ä¸ļ
çĶŁ åij½
åĴ¨ 询
æĸĩ æĺİ
çij ŀ
绿 èī²
èİ «
æĦı è¯Ĩ
æĬķ åħ¥
åĬł å¿«
æ¢ ħ
ç¿ »
å¼Ģ æĶ¾
æĻ® éĢļ
åįı ä¼ļ
æĪIJ 绩
ä» Ļ
å¯ Ĵ
è¯ģ åΏ
认 è¯Ĩ
ä¸ ¹
大 éĩı
è¿ ħ
åģļ åΰ
设 æĸ½
è´¸ æĺĵ
èĥ½ æºIJ
æĹ¶ æľŁ
ä¸Ģ 天
æ²» çIJĨ
åĺ ī
å® ĩ
丰 å¯Į
举 è¡Į
æĪIJ æŀľ
èĤ¯ å®ļ
çĭ Ĺ
åĬ¨ åĬĽ
æ£ ®
åĩł ä¹İ
åĽł ç´ł
æ°ij æĹı
æ´ ŀ
ç½ij åıĭ
åIJĪ çIJĨ
广 大
æ® Ĭ
æ´ Ľ
æĿ ¯
èĴ Ļ
ç͍ äºİ
èŀį èµĦ
ç¥ ĸ
æľº 械
举 åĬŀ
èĩª åĬ¨
åĬŀ åħ¬
é» ŀ
éĽ Ħ
å̼ å¾Ĺ
çĮ ª
以 为
æĺ Į
è·Ŀ 离
åIJ¸ å¼ķ
ç» ķ
éļ Ĩ
计 ç®Ĺ
éĺŁ ä¼į
大 ä¼ļ
å¼ķ èµ·
çī¹ çĤ¹
èĥ ¶
å¹´ è½»
æľ¬ 身
æľº åħ³
å®ĺ æĸ¹
éĥ ij
æµ Ļ
è§Ĵ èī²
èij£ äºĭ
为 主
æĹł 论
ä¹ł æĥ¯
æ¥ ļ
æĭ ĵ
绣 计
åħ Ħ
广 æ³Ľ
åį Ģ
污 æŁĵ
è« ĭ
èĬĤ 缮
ä¼ ¦
è¦Ĩ çĽĸ
èĢ IJ
æī¶ è´«
ç»ı åİĨ
éĩįè¦ģ çļĦ
èĤ¡ 举
æĭĽ èģĺ
åĽĽ 个
æĩ ī
èĥ ŀ
æij Ĩ
é«ĺ éĢŁ
éº ¦
åİŁ åĪĻ
èİ ±
æĽ´ 好
éķ ľ
åĩ Į
åŀĥ åľ¾
éĢ ²
çģ °
éĵ º
äºĭ æķħ
çĶ ĺ
空 æ°Ķ
é¾ Ħ
èı ²
çĵ ¶
æĺ ¨
æĹ¥ æĬ¥
æµ ®
åľ° åĽ¾
åij Ī
大 åĬĽ
ç» ª
å¸ ħ
æľį åĭĻ
ä¸į éĶĻ
乡 æĿij
å± ¥
å¹³ æĸ¹
éĹ ²
æī £
ç´ł è´¨
èµ ´
éģ Ń
èIJ ¨
èĩª 主
éĩij å±ŀ
èī¯ å¥½
两 年
æ³ ¥
é¢ ľ
精 彩
ä¸Ń åįİ
æĻ ĭ
ä¹ł è¿ij
ä¹łè¿ij å¹³
æĪĺ 士
åģļ çļĦ
éª ij
æ» ´
çĵ ľ
çīĪ æĿĥ
èĤ ł
æľĥ åĵ¡
çı į
ç¨ ®
ä »¿
çī© ä¸ļ
åĢĭ 人
å¦ »
ä¼ ¸
æ± Ĺ
æĹ º
çIJĨ æĥ³
æij ¸
è¿Ŀ æ³ķ
å®Į æķ´
åİ ¦
è¸ ı
æĸ ij
æ¡ Ĥ
ä½ĵ åζ
å¸ «
æĿ Ĩ
æ® ¿
æ¯ ģ
é¦ Ī
è§Ĵ 度
æ¬ £
çĥ ¦
èĤ º
éĩĩ 访
æij ĺ
æĮ ¡
æ· ĺ
åħ» èĢģ
çĤ ¸
è¿ Ī
åİ ī
åĿ Ĭ
è¾ £
åĩ Ŀ
æ³ ª
çĸ ı
æİ ĺ
åĥı æĺ¯
éĽ ķ
ç¼ Ŀ
èį ·
æį ·
åł ¡
åı¥ è¯Ŀ
çĸ ¼
æł ı
éģ µ
ç¢ ³
å·¥ åķĨ
æIJ º
åĪ ¥
ä¹ Ļ
æĹ ĭ
æĥ ľ
ä¸Ģ 大
å±Ĥ 次
èµ ĸ
æĬ ¬
æ¨ Ĥ
è¯ ŀ
åħ Ĵ
ç¯ ®
èĤ ĥ
å§ ¿
æĬ ļ
çĵ ·
ç͵ åĬ¨
æĸ° åĨł
æ¶ µ
ç¢ ij
æ· ®
æĹ ¨
è¸ ª
æ¸ Ķ
æĦ Ī
åı Ķ
åįĹ çľģ
ç¾ ©
å§Ķ 书记
è² ¸
æ¶ Į
è« ĸ
èIJ Ħ
æı ı
å¿ §
è¾ ¦
å¦ Ĩ
æī Ń
åij µ
éģ ¥
è¨ ±
ä» ĩ
åįģ ä¸ī
åī ²
èª į
èĪ °
é¢ ĩ
é¥ ±
çĭ ł
é«ĺ çļĦ
çµ ±
æħ İ
é¢ ģ
åIJĪ éĢĤ
æµ ´
èµ ĭ
æĬ ¼
å¦ ¥
éĻ¢ éķ¿
èĢ ķ
è¾ ¨
æħ °
åįģ åĽĽ
æľ µ
èĵ Ħ
æŀ ¢
å» ·
æĤ Ħ
æ¶ ¯
çŁ ©
åŃIJ éĩĮ
çĬ ¹
å±Ģ éķ¿
é IJ
å¥ ł
ä¼ļ éķ¿
æĵ ļ
ä¸į åıĬ
åįģ ä¹Ŀ
æ¬ º
èº º
éĺ IJ
çº Į
è¨ »
åĨ Ĭ
èŃ ĺ
é«ĺ çŃī
èħ º
å¤ ķ
ç» ij
åĶ ¤
èķ ´
çķ ľ
æħ ĭ
åı Ļ
åı ĥ
å³ ¡
人 大
éħ ¿
éģ ©
å¥ ¢
åı£ æ°Ķ
éĮ Ħ
é ı
åĭ ĺ
è´ ¿
éļ ª
é ĭ
éļ ¶
ð ¥
𬠣
ð £
ð« į
𬠳
ð« ĵ
ð« Ħ
ð« Ł
𨠱
ä Ĺ
以 åıĬ
æľī éĻIJ
åij ¢
åIJ Ĺ
çľĭ åΰ
计 åĪĴ
è¿Ľ åħ¥
缴 æİ¥
åĪĨ æŀIJ
åıª æľī
设 å¤ĩ
åħ¶ å®ŀ
åĬł 强
ä¸Ń çļĦ
ä¿Ŀ éļľ
èĢģ å¸Ī
人 æīį
å¾Ĺ åΰ
é£İ éĻ©
ä¸Ģ ç§į
空 éĹ´
æĪij åĽ½
ä¹ĭ åīį
ä¸ĵ å®¶
æĿ ¨
æĹ¥ æľ¬
群 ä¼Ĺ
åıĤ åĬł
æķĪ æŀľ
æľī åħ³
å®¶ åºŃ
åĮº åŁŁ
åĬª åĬĽ
éļı çĿĢ
æĹł æ³ķ
交 æµģ
è¡Į 为
æ£Ģ æŁ¥
æľŁ éĹ´
å¦Ĥ æŃ¤
èĤ¡ 份
å½ĵ æĹ¶
è£ħ å¤ĩ
åĩĨ å¤ĩ
éħĴ åºĹ
è¿IJ åĬ¨
æıIJ åĩº
å·¦ åı³
æİª æĸ½
é£Ł åĵģ
æ¶Īè´¹ èĢħ
åѦ éĻ¢
æĮĩ 导
è¿IJ èIJ¥
éĩį 大
åĨľ æĿij
éĢł æĪIJ
æĶ¿ æ²»
éĴΠ坹
æŃ£ å¼ı
åıĸ å¾Ĺ
éĤ£ 个
éĽĨ ä¸Ń
åıª èĥ½
å¿« éĢŁ
身 ä½ĵ
åħļ åijĺ
èģĶ åIJĪ
åĬĽ éĩı
éĥ½ æľī
æ ħ§
å¡ Ķ
åĪ« 人
表 çݰ
æķħ äºĭ
ä¸Ģ åĪĩ
å° ĩ
èµĦ æĸĻ
åŁ¹ åħ»
éĺħ 读
æľī 人
èIJ¥ éĶĢ
çĽij çĿ£
çݯ ä¿Ŀ
èĢĥ èĻij
æ·± åľ³
严 éĩį
èĮĥ åĽ´
å§Ķ åijĺ
çĽij 管
ä¸ī 个
è£ħ ä¿®
åħ¬ éĩĮ
åĪĨ åĪ«
çIJĨ è§£
éŁ ©
åĬł å·¥
认 羣
ä¸į 好
åİ» å¹´
éĻį ä½İ
æľº ä¼ļ
åįı è®®
符 åIJĪ
å¢ŀ 强
æĬĢ èĥ½
é¦ĸ åħĪ
ç§ ¦
ä¸ ģ
å° ¾
æľī äºĨ
åľ° 产
æ¸ ł
æĸ¹ 便
ç§» åĬ¨
éĢŁ 度
å°¤ åħ¶
éĢļ çŁ¥
åĿ Ľ
éģ¿ åħį
æģ ¢
è´ ¡
èģĮ å·¥
å®ŀ åĬĽ
æĺ¯ä¸Ģ ç§į
åIJ¯ åĬ¨
çĸ¾ çĹħ
æĿ¥ äºĨ
缸 对
çݰ å®ŀ
èŀį åIJĪ
åIJĮ æł·
åħ¬ åijĬ
çī¹ æ®Ĭ
ç´ «
ä¸ĭ åİ»
ä¼ł æĴŃ
æľĢ 好
ä¼ĺ è´¨
æ² Ĵ
æĮ º
æĹ ¦
è¯ º
ä¸Ģ åIJį
éģĵ è·¯
示 èĮĥ
è¿ĩ æĿ¥
åIJĮ åѦ
é¼ ĵ
æĿ Ń
æľ¬ 次
åIJĮ æĦı
ä¸ĸ 纪
ç¾ Ĭ
æ¬ ²
å·¥ èīº
çĵ ¦
人 士
æľī æīĢ
ä»İ äºĭ
æľī å¾Īå¤ļ
ä¸į äºĨ
å²Ĺ ä½į
åıĺ å¾Ĺ
åĬ³ åĬ¨
å¤Ħ äºİ
å¹³ åĿĩ
形 象
å¡ ŀ
åħ± 享
çĿ Ľ
åĪ© 润
æŃ£ æĺ¯
å¾Ģ å¾Ģ
缸 æ¯Ķ
æ¨ ª
åĪ ·
æµĻ æ±Ł
大 éĥ¨åĪĨ
å¤ļ 个
æĤ¨ çļĦ
ç͵ åķĨ
å¾® åįļ
å§ĭ ç»Ī
çĬ¯ 罪
æĺ¯ åľ¨
ç»Ħ åIJĪ
åİŁ æĿ¥
æ¸ħ æ¥ļ
åIJĦ åľ°
æĦŁ åıĹ
å½ĵ ä¸Ń
è¶ĭ åĬ¿
æĻ¯ åĮº
羣 æĺ¯
ä¾Ľ åºĶ
转 åŀĭ
çĭ Ĥ
èĨ ľ
èĭ Ĺ
å¿ ł
å¾Ī 大
èĤ¡ æĿĥ
ç¾İ åħĥ
æİĴ åIJį
åĬ¨ çī©
éĶ ħ
å¢ ¨
主 å¸Ń
å¾Ī 好
ç»Ŀ 对
æĿ ľ
转 载
çĴ ĥ
æĿij æ°ij
åIJ ¨
åĽŃ åĮº
é«ĺ 度
çī© è´¨
è¾ ī
æĹ¥ 常
æı Ĵ
ä¸ī å¹´
ä½ĵ çݰ
æīį æĺ¯
代 çIJĨ
ä¸į 管
æģ Ĵ
åľ° ä½į
ç² ®
èĸ Ħ
æĺİ çϽ
ä¸Ģ èĩ´
æĽ ¼
åĵ Ń
åĩ ¤
åĬ ²
æķ Į
æĪĺ æĸĹ
主 ä½ĵ
åħ¬ å¸ĥ
åıĤ èĢĥ
èĪª 空
å¯ º
åѦ ä¼ļ
åıį æĺł
ç¾İ 丽
太 éĺ³
建 æĪIJ
æħ¢ æħ¢
åIJĦ 个
éĤ ¦
ç»Ħ æĪIJ
ä¸ī 大
éĶ ¦
大å¤ļ æķ°
æ¦Ĥ 念
éŃ Ĥ
åħ¬ çĽĬ
èį Ĵ
身 份
æ·± åĪ»
åħ ©
ç»ı åħ¸
åIJĦ 项
èĻ ķ
è¿Ľ æŃ¥
åįģ äºĮ
æī§ æ³ķ
æĥ³ åΰ
æĦŁ æŁĵ
åķĨ åĬ¡
å°ı ç»Ħ
èĶ ¬
çıŃ åŃIJ
åIJĮ å¿Ĺ
éĿ¢ 临
çĤ Ĵ
å¤ļ ç§į
è§Ĥ çĤ¹
åĵª éĩĮ
å° Ŀ
å§ Ĩ
èħ ¹
åŁİ åĮº
太 å¤ļ
çĹħ æ¯Ĵ
åľ¨ äºİ
æīĢ è°ĵ
æĻ °
æŀ Ŀ
æĭ ĸ
å® ħ
æķ´ æ²»
ä½ı æĪ¿
åģ ·
çĨ Ĭ
èµ ģ
æ° Ľ
æł¼ å±Ģ
åŁºç¡Ģ ä¸Ĭ
èĥ Ĩ
åħ ½
鼶 åĶ®
åĿ ¡
女 åŃ©
æĴ ŀ
åħ¨ åĬĽ
åĴ ĸ
èĤ ©
çľ ī
èĩ³ äºİ
åħļ ç»Ħ
ä¸Ģ ä»¶
æĭ Ĩ
äºĭ å®ŀ
åĤ ³
æ¹ ĺ
ç¶² ç«Ļ
循 çݯ
åIJĮ æ¯Ķ
æĭ Ķ
åĮ» èį¯
åħ» æ®ĸ
åĽº å®ļ
å®ŀéĻħ ä¸Ĭ
è®° å¾Ĺ
åĪ© äºİ
æĤ ¦
æĭ ³
èĤ Ŀ
æķĪ çĽĬ
è© ²
æ°ij 主
çĹĩ çĬ¶
é¢ ¨
å¹¼ åĦ¿
å§ ij
æĪ Ĵ
ä¸ĭ çļĦ
æ¸ ¡
å¹´ åºķ
è®° å¿Ĩ
åIJ IJ
大 å¹ħ
å¾ ½
åħ¬ ä¼Ĺ
ä¿¡ å¿ĥ
çİ Ľ
ä¼ļ ä¸Ĭ
ä¹ Ķ
æijĦ å½±
æ£ĭ çīĮ
éĻ ķ
åºĶ æĢ¥
æĶ¶ è´¹
æİ§ èĤ¡
仪 å¼ı
çŀ ¬
æīĢ åľ¨
ç¢ °
å§ ĵ
é¡ Į
æĶ¯ éĥ¨
使 åij½
çĤ ī
å¯ Ħ
ç¿ ¼
åľ° ä¸ĭ
è¾ ŀ
ä¿ ±
主 æĮģ
è´§ å¸ģ
æģ ¨
èĤ Į
çĽ Ī
éĶ »
å¿Ĺ æĦ¿
ç±» ä¼¼
æĮ ĸ
éĢ »
ç¸ ½
纪 念
åķ ¥
å¼ ¯
åIJį åŃĹ
åģ¥ èº«
çļĦ å¿ĥ
é© ±
èĥĮ åIJİ
æ³ķ å¸Ī
ç² Ĵ
èĥ½ éĩı
è¾ °
èī ³
å½ ¼
段 æĹ¶éĹ´
åIJĪ æ³ķ
æĵ ¦
ç¾ ½
åİ ¨
æĪij 说
äºĭ åĬ¡
åĩł 天
åħ ģ
ç¼ ´
åį ĵ
两 ç§į
çĭ¬ çī¹
å¸ ¶
éĴ »
æĥ ©
é¢Ĩ åħĪ
è¶³ å¤Ł
å£ ³
æĦıåij³ çĿĢ
åĪĨ å¸ĥ
ä¹ ĥ
éģ ĭ
ä½ ©
è° ±
çģ £
èį ¡
è´¯ å½»
å¹ ¾
ç£ ģ
åħ¸ åŀĭ
åī ĩ
åĨ »
æ¬ ł
ä¸į ä¹ħ
æµ ¦
éŃ ħ
å¼Ģ äºĨ
使ç͍ èĢħ
è¿Ļ 款
å° Ī
èĦ± è´«
æĶ» åĿļ
ç®Ĺ æĺ¯
ç¨ Ģ
æĹł 人
åł µ
å¥ ı
éĥ½ å¸Ĥ
åı¯ è§ģ
ä¸į åĩº
æ ·»
äº ı
ç¾İ 好
èĥ ĸ
éŁ µ
æłĩ å¿Ĺ
èĬĤ èĥ½
æĬ «
å° º
å¯ ¸
ä¸Ģ 代
é¢ Ĺ
èĢ ¶
èĴ ¸
åĸ ®
æ »¿
çĮ ľ
æµ Ĩ
åŁ ĥ
åįĥ ä¸ĩ
èµ Į
èģ ²
ä½ľ é£İ
è³ ª
å¯ ¨
年 人
åį° è±¡
æ¡ ¶
æĴ ¤
åįģ äºĶ
æ¯ ħ
æ² ª
åĽ½ æľī
大éĩı çļĦ
å¾ ¡
å¯ ĵ
è¦ ĸ
æ¼Ĥ 亮
çľ ł
ç ĤŃ
é» İ
èĻ ¹
åĪ© äºļ
èŃ ī
æµ ı
åįģ åħ«
ä¸ ¢
è¾ ½
æľīä¸Ģ äºĽ
æħ Ī
åģľ è½¦
å® ł
è§£ æĶ¾
æľī å¤ļ
éĤ Ĭ
常 è§ģ
æĬ ¹
çº ¤
è¦ ª
æ¡ Ĩ
èİ ŀ
æ°§ åĮĸ
è¿Ļ ä»¶
åĩ °
æŁ ´
åıij ç͵
é¼ ł
转 åĮĸ
å¨ ĥ
æĮ ¤
ç½ ©
å¯Ĩ åĪĩ
æĪij ä¸į
é«ĺ æĸ°
ä¸Ģ ç¯ĩ
è¿Ľ ç¨ĭ
è¡ °
è¿ĺ ä¸į
ç ħĮ
æĸ° åįİ
èĤ ¿
æ» ©
ä¸Ģ æµģ
è¯ Ī
å®ŀ ä½ĵ
å¤ĸ åĽ½
èº ²
èµ ł
è¦ º
æ¢ Ŀ
ä¸į è§ģ
è¨ Ĭ
åĮ ¹
åį µ
çĩ ¥
æħ ķ
é½ ¿
å® ´
é¥ ¼
èij¡ èIJĦ
å°ı å¿ĥ
æģ ¼
éĻ Į
æĺ Ĥ
åĥ ¹
èĬ Ŀ
æ¯ı 个人
åīį æıIJ
ä½ĵ ä¼ļ
æ¨ Ļ
æIJľ çĭIJ
对 åħ¶
ä¸ §
èľ Ĥ
æµ ¸
èª ¿
åĿ ª
é¢ ĸ
åIJį 为
ç¬ ¼
èĪ Į
æľ¬ 书
èģ ¯
çº º
ç®Ģ 缴
éĽ ¢
ç¾İ çļĦ
éļ ¨
é«ĺ å³°
è¿Ļ å®¶
å Ĥ¬
å° ¸
ç¡ķ 士
èŃ ·
è° ¨
æĺ ı
æĶ¿ åįı
è¡ Ķ
ç¿ Ĵ
åľ Ĵ
åĽ½ æ°ij
主 è§Ĵ
è£ ķ
ä¼ ª
åº ŀ
æ°ij èIJ¥
æĥ §
ç§ĺ 书
çĹ ķ
çϾ åĪĨ
æº ¶
æĹł çĸij
çļĦ çľ¼
æĵ İ
ä¼Ł 大
å½ °
åħ¬å®ī å±Ģ
ç³ ķ
å¼ ¥
åĤ Ļ
ä¹ ¾
毫 ä¸į
注 æĺİ
åī¯ æĢ»
æĦ ī
æķ ¦
é¦ ¨
æĶ Ģ
éĢ Ŀ
åı¯ éĿł
å¤ ¸
åľ ĺ
éĿ¢ ä¸Ĭ
æĬ ĸ
èĦ Ĩ
é© °
ä¼ IJ
å¦ ¨
å®ļ äºĨ
ç³ Ĭ
æŃ ¡
éĥ¨ éķ¿
ç§ ī
èĪ Ĩ
åĪij äºĭ
åIJ µ
æ¤ Ĵ
è¡ ĵ
è± «
èı ©
åŃ µ
é¥ ²
就 好
åł ª
ä¸ī è§Ĵ
åľº æ¯ĶèµĽ
ä¸į åģľ
æĵ ħ
åħ¨ æĸĩ
æ³ ģ
åѦ ä½į
æ± °
éł ĺ
åı ł
éļ Ľ
å¸ IJ
çľĭ åĩº
åĮ ł
å±Ģ éĿ¢
æ³ Į
è° Ĭ
åIJĮ æľŁ
æĬķ æłĩ
å¥ ´
æĿ¥çľĭ çľĭ
èĦ ¾
èŀ º
æŃ ī
çĽ ¯
ç¨İ åĬ¡
å» Ĭ
æİ ©
æħ ¨
çĽ ¼
èĬ Ĵ
è® Ģ
æĮ £
èĮ ħ
æĸ ¥
æ¤ ħ
åΰ æĿ¥
èijĹ ä½ľ
çĭ ±
äºĮ æīĭ
ä»İ æĿ¥
çĸ ²
åºĬ ä¸Ĭ
æĸ° 浪
æ³ Ħ
å¢ŀ å̼
ä¸ Ľ
æļ ij
ä»İ ä¸ļ
æ· ĭ
å¤ļ æł·
æľ ´
份 é¢Ŀ
æŀ £
西 çľģ
æľ¬ è´¨
æ·± æ·±
èī ĩ
ç» µ
产 å̼
æ¼ ł
èħ »
çŃ Ľ
åİ Į
æģ Ń
å«Į çĸij
æĪ ¶
æ» ŀ
èĨ Ģ
åĬ £
座 è°Ī
常 æĢģ
çļĦ æĥħ
è¦ ½
å¯ Ĥ
åĮ Ĩ
èĩ º
é¡ ¯
çķ ı
éģ £
åį ľ
çŃī å¥ĸ
è² ¬
æº ¯
é İ
çĤ¹ 头
èĵ ¬
æ± º
éħ ¬
éģ Ĭ
è³ ¼
註 åĨĬ
æľ¬ æĬ¥
çµ ķ
æ´» æĢ§
åħ ij
éĮ ¯
åĨ ¶
åĸ »
æº ĸ
èĤ ¢
æº ĥ
æĹ ¬
åī Ĭ
çIJĨ äºĭ
å± ł
æ² §
èļ Ģ
鼻 åŃIJ
为 æŃ¢
常 å§Ķ
çµ Ĥ
éĬ ·
çĭ Ģ
ä¾ £
èĥ Ģ
èŃ °
ç͍ 车
åĻ ª
æŃ ·
åį Ķ
åĪ ¹
竣 æĺ¯
é© Ĺ
èIJ Ŀ
çĻ «
çĹ «
æŃ §
å¼ Ĭ
åª ½
çı Ĭ
è¡ ·
éľ ī
åŁº çĿ£
éļ ±
æ° ¨
ç» ¸
å°¼ æĸ¯
çĥ ĺ
æľŁ åĨħ
è° ħ
éĽ ĩ
éļ Ļ
å ĸī
åī ¥
çĹ ĺ
æĮ ½
çĵ £
æ¹ Ľ
æ¨ ±
æ¾ İ
æ¹ ĥ
åĨ¬ 奥
æ£ µ
å® °
åŀ Ĵ
æ§ ĭ
ä¾ Ī
èĮ Ħ
åĺ ¿
èı ĩ
ç ĻĤ
åĬ ĥ
é į
èĶ ½
çŀ Ń
æķ ŀ
ä¹ ĸ
éŁ §
è¾ ľ
æĩ Ī
ä½ £
çŀ »
åŁ Ķ
èĪ ħ
å®ŀ äºĭ
é ¨
å§ ¥
çµ ¡
åĺ »
çķ ¢
æ²ĥ å°Ķ
è¿ Ħ
èĤ ĩ
æħ ij
ã §
ä ı
ð ł
ð¬ ĩ
ð« Ń
ð« IJ
ã ³
© ½
ð« ł
ã Ľ
ð¬ į
é ¿
ð¬ Ĵ
ã Ļ
𬠤
ð ¬´
ð« ĸ
ð ¤
ã ¬
ä ²
ð« Ķ
ð« ļ
è¦ģ æ±Ĥ
ä¸Ģ äºĽ
å®ŀ çݰ
èĢĮ ä¸Ķ
åĽł æŃ¤
çͱ äºİ
åħ³ äºİ
çĦ¶ åIJİ
æİ¨ åĬ¨
ä¸Ģ æł·
æĮī çħ§
è¿Ļæł· çļĦ
å½¢ æĪIJ
æľī äºĽ
æĽ´ åĬł
ç»ı è¿ĩ
建 议
æ²» çĸĹ
ä½ł 们
æīį èĥ½
ä¿ĥ è¿Ľ
åijĺ å·¥
ä½ĵ éªĮ
èĪ ĩ
åģļ 好
ä¿Ŀ è¯ģ
æķ´ 个
æĺ¯ ä¸Ģ个
éĩĩ ç͍
çIJĨ 论
æ¯Ķ å¦Ĥ
ä¸Ĭ çļĦ
æİ¨ èįIJ
çͳ 请
天 空
éĥ¨ èIJ½
åįģ åĪĨ
æĿ¥ èĩª
ä¹ĭ éĹ´
è°ĥ æķ´
æ¯ı 天
è°ĥ æŁ¥
æĤ£ èĢħ
è¿ĩç¨ĭ ä¸Ń
é¦Ļ 港
广 åijĬ
éĿ¢ 对
满 足
éķ¿ æľŁ
è§Ħ èĮĥ
æķ´ ä½ĵ
æĶ¹ åıĺ
æĻº æħ§
å¦Ī å¦Ī
å¦Ĥ ä»Ĭ
åIJĪ åIJĮ
éĥ½ ä¼ļ
åĦ¿ ç«¥
åĩı å°ij
éŁ³ ä¹IJ
ç»ı 常
ä¸Ĭ å¸Ĥ
ä¼ĺ ç§Ģ
çļĦ éĩįè¦ģ
ä¸Ģ æĿ¡
æµ· å¤ĸ
åı¦ å¤ĸ
ä¸Ģ å®¶
åİĭ åĬĽ
大 åŀĭ
çľĭ çĿĢ
åĪ Ģ
幸 ç¦ı
æİ¨ 广
åIJ Ľ
å¾ IJ
æī¾ åΰ
äºİ æĺ¯
èĩª 身
ä¸Ģ ä½į
åľŁ åľ°
åĬł åħ¥
æİ¢ ç´¢
æ¢ ģ
主 åĬ¨
å°± ä¸ļ
女 æĢ§
çªģ çł´
ä¸įåIJĮ çļĦ
è¿IJ è¾ĵ
èĩª çͱ
å±ħ æ°ij
æŃ¤ 次
çļĦ æĹ¶éĹ´
å®¶ éķ¿
ä¸Ģ个 人
æ£Ģ æµĭ
åĨħ éĥ¨
广 å·ŀ
缴 æĴŃ
ä»İ èĢĮ
贷 款
åı¬ å¼Ģ
æĶ¹ éĢł
人 çĶŁ
å±ķ 示
æ¯ı å¹´
女 人
çļĦ æĸ¹å¼ı
æķĪ çİĩ
å±± 举
æ¸ł éģĵ
ä¼¼ ä¹İ
æ¡Ī ä»¶
åĪ© çĽĬ
çľĭ çľĭ
å¿ĥ éĩĮ
ç»´ æĬ¤
å®Ŀ å®Ŀ
ç½ij ä¸Ĭ
论 åĿĽ
å°± åı¯ä»¥
ä¸į è¶³
æģ¢ å¤į
å¸ĥ å±Ģ
è´¡ çĮ®
ä¸ĭ éĻį
æİĮ æı¡
çļ® èĤ¤
å·¥ åħ·
éĩį åºĨ
åĵģ è´¨
æİ¨ åĩº
çĶ· 人
æī¿ æĭħ
çªģ åĩº
èĢĮ è¨Ģ
æ² Ł
åįı è°ĥ
æĺ¯ ä»Ģä¹Ī
æ± ¤
æĴ ij
çĭ¬ ç«ĭ
çݯ èĬĤ
æī© 大
æ´ ª
æĿ °
çĽ IJ
ä» ģ
æ¶ī åıĬ
èĢģ 人
åį³ ä½¿
åįĹ äº¬
éħį åIJĪ
é¬ ¼
çζ 亲
ç½Ĺ æĸ¯
å°ı åĮº
æķĻ æİĪ
åĨ³ çŃĸ
é¢Ħ 计
æľ¬ 人
ä¼ ¯
ç« ¹
åΰ åºķ
å¸Ĥ æ°ij
åĩº åı£
éĩĩ è´Ń
æĢ» ç»ĵ
æŃ¦ æ±ī
åĬł 大
广 举
æµģ ç¨ĭ
人 åı£
å¦Ĥæŀľ ä½ł
åĩº åİ»
åĩ ī
åĨľ æ°ij
çݰ 象
åĬĽ 度
ç»Ļ äºĪ
åħļ å§Ķ
è¯Ń è¨Ģ
线 ä¸Ĭ
æĢİ æł·
åĦ¿ åŃIJ
ç¡® å®ŀ
ä¹ĭ å¤ĸ
éĥ½ åľ¨
èī ¾
çļĦ æĥħåĨµ
éĩĮ çļĦ
åĽ´ ç»ķ
æĽ´å¤ļ çļĦ
ä¾Ŀ æ³ķ
åħ¬ åĽŃ
å®¶ éĩĮ
æ¯į 亲
ä¸į åĨį
èĭ ¹
æ³ķ éĻ¢
飩 åĽ½
缸 å½ĵ
ä¸į çŁ¥
è¯Ħ ä¼°
ä¸į ç͍
顺 åĪ©
éĩį è§Ĩ
è´¢ åĬ¡
ä»ĸ åĢij
åıij è¡Į
ä¸ĵ éŨ
åħ· å¤ĩ
å¹¶ ä¸įæĺ¯
è¶³ çIJĥ
é ŀĭ
åıij 表
æ°¸ è¿ľ
èIJ¥ åħ»
éħį å¥Ĺ
æķ´ åIJĪ
è´ º
åĽŀ çŃĶ
æĶ¶ çĽĬ
ä¹Ł 许
è» Ĭ
æİ¥ 触
æĶ» åĩ»
åĽĽ å·Ŀ
æĢ§ èĥ½
åĽŀ åΰ
èħ °
ä¹Ł 没æľī
å¼ Ħ
设 ç«ĭ
éĺ² æİ§
æĬĢ å·§
éĢļ 常
è´¢ æĶ¿
éĥ¨ ç½²
åľº æĻ¯
æ±Ł èĭı
表 达
åĸ ·
女 åĦ¿
èĪ ¶
çµ ¦
ä¼ļ åijĺ
æĪĸ 许
äº ©
举 æĸ¹
天 津
è¿ij å¹´
çľĭ æĿ¥
æ¯Ķ ä¾ĭ
å² ©
éĵ ľ
çİ »
å®ŀ éªĮ
æĢĿ ç»´
æĭħ å¿ĥ
æ² Ī
身 边
æ·± åĮĸ
ç²¾ åĩĨ
ç§ģ æľį
æ¶Ī éĺ²
åİ» äºĨ
ç»Ĩ èĥŀ
çIJĥ éĺŁ
æĺİ æĺŁ
é£Ł çī©
å¾Ī å¿«
让 ä½ł
ä¿¡ ç͍
å͝ ä¸Ģ
åħ¶ å®ĥ
çŃī æĸ¹éĿ¢
å¾ĭ å¸Ī
æŃ» 亡
æ Ł³
ä¸Ģ æī¹
ä¸Ĭ 涨
æľº åľº
å½¢ åĬ¿
æĦ¿ æĦı
éĽĨ ä½ĵ
æĸ° åŀĭ
æį٠失
æĽ ¸
ä¸ĭ åįĪ
æ¯ı 次
æĪIJ å°±
åħ¬ è·¯
èĻ «
åĴ ±
西 å®ī
æľĢ ä½³
ç§ij çłĶ
å¤į æĿĤ
æľº åύ
çα æĥħ
çħ§ çīĩ
å¹´ é¾Ħ
è³ĩ æĸĻ
ç² Ĺ
åĩĨ ç¡®
åĬł ä¸Ĭ
åĩº çīĪ
è° IJ
å®¶ å±ħ
èĥĮ æĻ¯
ä¸Ģ 线
äºĭ 项
åĬ¨ ä½ľ
ç¥ ¥
æĢ» ä½ĵ
æĪ¿ åŃIJ
ä¹Ł å°±æĺ¯
大 æ¦Ĥ
é«ĺ æķĪ
åIJ ¹
æİ ĪæĿĥ
éĻĦ è¿ij
æ¡Ī ä¾ĭ
éĹ ¹
çΏ çΏ
彩 票
æĢ Ĵ
举 æĬ¥
æĻ® éģį
çķĻ ä¸ĭ
è¡£ æľį
æĹłè®º æĺ¯
åħħ 满
深 度
æ¡ ij
æĪª èĩ³
带æĿ¥ çļĦ
éĻ µ
æĦŁ æĥħ
èµ ļ
åĵª äºĽ
æķ´ æĶ¹
æĪIJ çĨŁ
å¨ ľ
é¼ »
çŁ Ľ
çĽ ¾
好 好
第 åĽĽ
åĨł åĨĽ
è´¢ å¯Į
æľĢ 好çļĦ
车 åŀĭ
éĸ Ģ
åį³ å°Ĩ
åĪĨ 为
éĿĴ å²Ľ
纷 纷
ä»Ĭ æĹ¥
å¹³ è¡¡
å¹³æĸ¹ ç±³
éĤ£ ç§į
åĩº çĶŁ
éĿĴ æĺ¥
人 群
人 工
ä¹ĭ ä¸ĭ
æ¹ĸ åĮĹ
åľ¨ æŃ¤
åįļ 士
æĹ¶ åĪ»
æ²³ åĮĹ
æĶ¾ å¼ĥ
éĢļ éģĵ
森 æŀĹ
çĸ Ĩ
æķ ¸
èĬ ³
æīĵ åĩ»
æĽ ¹
åĮĸ åѦ
æĥ³ 象
ä¸ĩ 人
è´¢ ç»ı
åħĥ ç´ł
ä¼ļ 计
åħ¨ ä½ĵ
æĦ Ľ
é«ĺ ä¸Ń
æľº éģĩ
声 éŁ³
æĹħ è¡Į
æµ ©
æŁ ±
å°ij å¹´
åĽ½ å¤ĸ
èijĹ åIJį
çĶŁ åŃĺ
å§ ľ
带 é¢Ĩ
é¢ľ èī²
ä¸Ĭ ä¸ĭ
产ä¸ļ éĵ¾
æĽ´ 好çļĦ
å² Ń
ä¼ĺ æĥł
便 æĺ¯
åħ§ 容
ä¸Ģ åıª
çIJ ´
梦 æĥ³
ç§Ł èµģ
å¼Ģ åIJ¯
è´Ń çī©
åĮħ åIJ«
åĪ© çİĩ
èµ· äºĨ
æľī åĬĽ
éĤ£ éĩĮ
审 æī¹
对 æīĭ
çݰ éĩij
天 çĦ¶
çĽ Ĵ
çĪ ½
å¿ħ çĦ¶
åĮĸ å·¥
ä¸ĵ åĪ©
åķ ¡
å¼Ģ å¿ĥ
人 ä½ĵ
éģĵ 士
æĢģ 度
空 è°ĥ
æĭĽ åķĨ
å§ »
第 äºĶ
æ£ Ĵ
ä¸Ģ ç³»åĪĹ
åį± æľº
转 åıĺ
åľº æīĢ
é¸ £
æĪ¿ éĹ´
éĢ ¼
è¯ķ çĤ¹
对 å¤ĸ
åĩº åı°
åľ¨ è¿Ļ
åİĤ å®¶
巨 大
ç®Ģ ä»ĭ
çľĭ äºĨ
åħļ 建
æĮĩ æĮ¥
çŁ³ æ²¹
ä¸į åı¯èĥ½
èİ ²
ä¸į 太
åĪĽ æĦı
第 ä¸Ģ个
è´µ å·ŀ
è¿ĩ äºĨ
æľ¬ æĿ¥
éģĵ å¾·
çŃĶ æ¡Ī
éĻ ¶
ä¸Ģ è·¯
èĤ ĸ
æ¸ħ æ´ģ
æľī æľº
åIJį åįķ
æĿ ±
åij¼ åIJ¸
ä¸ Ī
ç¦ı 建
è¯ķ éªĮ
å¼ķ åıij
ä¹Ł 没
ä¸į ä½ı
çĨŁ æĤī
èIJ ¬
ä¸į èī¯
çł ĸ
èĩ´ åĬĽ
çѾ 订
åIJ Ĭ
ä¾ ¯
çĺ ¦
å§ij å¨ĺ
æĸ ¤
妻 åŃIJ
æĺ¥ èĬĤ
çĪ ¬
æĽ Ŀ
çĥŃ æĥħ
éķ¿ æ²Ļ
èIJ¥ éĢł
éħ ·
éĵ Ŀ
åŁºæľ¬ ä¸Ĭ
åij¨ åĽ´
ä»Ģ 麼
认 åı¯
åĪĨ åŃIJ
ä¸Ģ æĸ¹éĿ¢
è½ ´
å¼ ·
马 ä¸Ĭ
éĽ ¾
èĩ £
å° ¿
çĶŁ æĦı
å®ī å¾½
ç¥ŀ ç»ı
åĩº å¸Ń
èᝠåĵģ
çIJĨ çͱ
åįı åIJĮ
æµģ åĬ¨
åıij åĬ¨
åĿļ å®ļ
表 æĺİ
åIJİ éĿ¢
ä¹ī åĬ¡
å¦ ĸ
æľī åı¯èĥ½
年轻 人
大 éĻĨ
å² ³
ä¸į èµ·
çŀ¬ éĹ´
ä¸įå¾Ĺ ä¸į
çѾ 约
åIJĪ æł¼
åħļ æĶ¯éĥ¨
æµİ åįĹ
便 åĪ©
éļı æĹ¶
å¥ ī
称 为
产 æĿĥ
åIJ ķ
çĽ Ĩ
课 åłĤ
ç· ļ
æ£ ī
线 ä¸ĭ
èĩª è¡Į
举 æİª
åݦ éŨ
èĩª ä¿¡
å½± è§Ĩ
ä» Ķ
çĶŁæ´» ä¸Ń
æĿĥ çĽĬ
çϽ èī²
å°± ä¸į
è¿Ľ å±ķ
æ¯ı æĹ¥
ä¾Ľ ç»Ļ
æĿĥ åĪ©
æĹł æķ°
çIJĨ è´¢
ä¾Ŀ æĹ§
ä¸Ĭ åįĪ
è¯Ĩ åĪ«
çĽĪ åĪ©
çł Ĥ
许 åı¯
åIJĮ äºĭ
åĺ Ľ
éģ ¸
çĿĢ åĬĽ
éŨ åı£
ä¸į å¤ļ
åħ¶ 次
ç¢ §
çī© çIJĨ
åĨħ å¿ĥ
çϾ å§ĵ
æĢ» 绣
å¹² åĩĢ
积 累
åıį é¦Ī
æłij ç«ĭ
社 交
ç§ ©
åįģ ä¸Ģ
éĤ ĵ
驱 åĬ¨
å±ķ è§Ī
èĪĴ éĢĤ
åŁº åĽł
å·® å¼Ĥ
转 让
å°ı å§IJ
æł· åŃIJ
ç¿ Ķ
é«ĺ åħ´
å½±åĵį åĬĽ
æīĭ ç»Ń
缸 åIJĮ
缸 åºĶ
æĻ Ĵ
è§ Ģ
å¸Ĥ å§Ķ
èĬ ¯
å±ķ çݰ
åľ° çIJĥ
éĤ ª
ä¸Ģå®ļ çļĦ
åħģ 许
ä¿¡ ä»»
æī ij
éĻ¢ æł¡
ç®Ģ ç§°
åģļ æ³ķ
ä¹ĭ è·¯
æĹĹ ä¸ĭ
èħ Ķ
æ¶Ī 失
ä¸ĸçķĮ ä¸Ĭ
åŁİ 乡
èĪŀ åı°
å¾Ī 大çļĦ
绣 çѹ
åħ¬ å¹³
èĤ ¾
çļĦ 好
æ± ģ
çľ¼ åīį
éĽ £
å¹ ½
åħ± 产
主 åĬŀ
å¤Ħ ç½ļ
åº Ļ
éģĵ çIJĨ
å¼ µ
æİ¥ çĿĢ
çĮ İ
çģ Į
çͱ æŃ¤
人 åĬĽ
æµģ è¡Į
ä¾ ł
åı¯ä»¥ 说
èĴ ĭ
å½¢ æĢģ
æĹ¥ åŃIJ
æ¼ Ĩ
çķĻ åѦ
缸 éĹľ
æľĢ å¤ļ
åĩŃ åĢŁ
åħ¬ 交
æĮĸ æİĺ
æĿĤ å¿Ĺ
主 人
éļľ ç¢į
æł¡ éķ¿
æĸ¹ ä½į
ä¸Ĭ çıŃ
å¤ļ åħĥ
è ĥģ
éŃħ åĬĽ
èĮ Ĥ
åħħ ç͵
强 大
çĥ ¤
å¥ĭ æĸĹ
å®ŀ ç͍
éĺ ģ
ç»Ļ äºĨ
æľ¬ ç§ij
æł ĭ
æĭ ¨
æķĻ ç»ĥ
éĥ½ çŁ¥éģĵ
æ¯ķä¸ļ çĶŁ
ç¢ Ĺ
åŀ Ĥ
è® ¼
å®ģ æ³¢
åѦ èĢħ
è°¢ è°¢
åŁİ éķĩ
æĢİä¹Ī åĬŀ
éģ Ķ
æĪIJ 交
æ½ľ åĬĽ
åį §
æĸ° å¼Ģ
éħį å¤ĩ
主 åĬĽ
åij³ éģĵ
çĥ Ĥ
é£ŀ è¡Į
å« ģ
大 大
ç»Ļ 大家
å¤ĸ éĿ¢
éĨ ī
åıij è¨Ģ
æĹ© é¤IJ
åIJĦ èĩª
å® Ļ
èᣠèªī
æĬ« éľ²
é¡ ŀ
åĨħ çļĦ
èĤ ª
è¾ IJ
æ³ µ
æĬ Ľ
æĺŁ æľŁ
ä¸Ģ 带
çĶŁ ç´ł
ç»ı éĶĢ
åĩ ¶
åľ° ä¸Ĭ
åij½ è¿IJ
åĵ ²
ä¸Ĭ åİ»
æĸĩ çī©
è¯ ij
æĮ¯ åħ´
éķ¿ æĹ¶éĹ´
ç¥ Ń
åIJĪ èĤ¥
è¿Ŀ è§Ħ
èģ ª
ä½İ äºİ
éĢĤ å½ĵ
æľī åºı
æľ¬ ç½ij
çķĻ è¨Ģ
æĥ³ æ³ķ
çѾ ç½²
å§ ļ
æĢ§ æł¼
èĴĻ åı¤
æŁ ı
åŀ «
åѦ åİĨ
ä»ħ ä»ħ
讲 è¯Ŀ
éĶ IJ
æĢ ĸ
åī ª
èĭ į
åIJ ĵ
强 çĥĪ
åģ¥ åħ¨
çĸ ¯
åı¤ 代
å¥ Ī
ä¸į çĦ¶
乡 éķĩ
æľĭåıĭ 们
åĤ ħ
èģ ½
个 æĢ§
æ³ķ è§Ħ
å°ı éķĩ
çĶ» éĿ¢
第 åħŃ
ç¶² è·¯
åīį æĻ¯
åIJ¬ 说
ä¼ł åªĴ
æĿ¡ ä¾ĭ
åĪ« çļĦ
ä¸į æĩĤ
顾 éĹ®
强 度
éĺ¿ éĩĮ
èµ° åĬ¿
å¸ ½
çļĦ ç¡®
åĮº åĪ«
éĮ ¢
主 管
ä¸Ģ çľĭ
æĸ ľ
åŃĺåľ¨ çļĦ
ä» ²
åᱠ害
éĵ Ń
游æĪı ä¸Ń
éħ ±
é¾Ļ 头
人 å¿ĥ
éĢĢ ä¼ij
æµı è§Ī
åĬ «
éĺ² æ²»
ç® Ń
å± Ī
è¾½ å®ģ
å£ ¤
è¿İ æĿ¥
éŀ į
ç͍ æĿ¥
大 åľ°
ä» °
éĢļ 讯
å¼Ģ å·¥
è£ ¤
å¦Ĥ åIJĮ
éª ¤
éĺŁ åijĺ
è½ ©
ç¾İ æľ¯
èĻ Ł
åIJĮ ä¸Ģ
åľ ĸ
书 æ³ķ
æīĵ åį°
åIJ« æľī
éĽĨ æĪIJ
éĹ ·
å¸Ĥåľº ä¸Ĭ
æĹģ è¾¹
åľ° æĿ¿
产çĶŁ çļĦ
ç² ¤
éĩį ç»Ħ
è¡Ģ æ¶²
çŃ ĭ
åĬŀ äºĭ
常è§ģ çļĦ
ä¸Ĭ åįĬå¹´
å±ı å¹ķ
åIJī æŀĹ
å· ©
åĸľ çα
ç¿ ł
ä¸ī ç§į
æ¡Ĩ æŀ¶
举 èİŀ
çĶĺ èĤĥ
èĬ ¬
åĽ¾ 书
åĩ¤ åĩ°
æ°Ķ åĢĻ
å° ´
å° ¬
两 天
è¾ħ 导
åĢŁ 款
æĹ¥ èµ·
æ´ Ĵ
ä¸Ģ 度
è¹ Ī
æ½ Ń
æī ĩ
çĻ ľ
æĸ° åħ´
åĤ ²
诸 å¤ļ
è´ ª
éĻ· åħ¥
èĪ Ł
èĤº çĤİ
ä¸Ģ æł·çļĦ
åİ ĺ
åľ° çIJĨ
æĬķ æ³¨
éļ Ĭ
åħī ä¼ı
ä¿Ŀ åģ¥
åħ Ķ
åħ¬ åĬ¡
æīĵ çł´
çĶ· åŃ©
åĬ³ åĬ¡
ä½ł ä¼ļ
ç͍ åľ°
æº ¢
åıij è¾¾
èĤ ļ
è¿ĩ äºİ
èĩ Ĥ
éĢĻ æ¨£
è½» è½»
ä¸Ń åħ±
åIJĦ åĽ½
åĶ ĩ
å®ŀ ä¹ł
èĻ ¾
æ§ ½
ä¸į ä¸Ĭ
åħį çĸ«
åįł æį®
å·¥ ä¼ļ
åĽ Ĭ
èĪª 天
åı¯ çα
æĸĹ äºī
çĺ ¤
å¦Ĥ æľī
éĽ ĸ
对 æĪij
åĩº ç§Ł
好 çľĭ
太 大
æ°´ åĪ©
åĬ¿ åĬĽ
åħ¨ æ°ij
ç½ ¢
èµ¢ å¾Ĺ
ç͵ ä¿¡
车 éĹ´
æĻĤ åĢĻ
å°ij æķ°
éĵ ¸
åħ³ èģĶ
ä¸įä»ħ ä»ħ
为 æĤ¨
åĴ ¸
æľº åĬ¨
è£ Ļ
åĵį åºĶ
éģ ł
è² ·
ç© ´
å¢ ħ
éĶ ¡
çµ Ħ
çģ« è½¦
è³ĩ è¨Ĭ
åĨ³ èµĽ
污 水
èª ŀ
å´ Ľ
ç´§ å¯Ĩ
缺 å°ij
å¤ļ 人
æĢ» 书记
éĶ Ī
èij Ľ
å¿ĺ è®°
éĻĮ çĶŁ
éķ¿ å¤§
åħĪè¿Ľ çļĦ
ç¡ ħ
åıij æĺİ
å©´ åĦ¿
æīİ å®ŀ
èĽĭ çϽ
ä¸Ģ çϾ
缮 åħī
æ ħĮ
åĬł æ²¹
åIJ ŀ
ä¸Ģ 群
ä¸Ń ä»ĭ
å¸ ĸ
å¿ Į
èģĮ èĥ½
广 æĴŃ
çĽij å¯Ł
ç§ĺ å¯Ĩ
çĭ ®
è¿Ļ æĿ¡
éĢ ¢
æĢ ¨
åįģ åħŃ
è© ¦
说 åΰ
åĩĿ èģļ
æĮĩ 示
æ° ¢
å¼ ĺ
éĺ Ģ
æĸ ©
éł ħ
ä¸Ģ å¼Ģå§ĭ
æİĴ è¡Į
åľ¨ æĪij
纪 å½ķ
æĬ Ħ
æł ª
说 æ³ķ
ä¸Ń èį¯
好 å¤ļ
åıª ä¸įè¿ĩ
çķĻ åľ¨
个 å°ıæĹ¶
认 çŁ¥
çķ «
è§ģ è¿ĩ
å°ı å¾®
ä½Ľ å±±
çľ ¾
讲 述
æ¢ ³
ç§° åı·
æĹ¥ æĻļ
è¢ ĸ
åķ ¤
æľª ç»ı
æľĢ æĹ©
æī® æ¼Ķ
è¡Ģ 管
çº ±
æĥħ èĬĤ
第 ä¸ĥ
æį §
ä» Ĺ
æ¿Ģ çĥĪ
æĹł 线
ä¸į 容æĺĵ
å¼Ģ å¹ķ
æĸ° çĶŁ
ä¸ĵ 注
èij ±
åįĹ æµ·
çĩ Ł
èµ· ä¾Ĩ
æ´¾ åĩº
åĦ Ĵ
ä¾ ¨
è¼ ĥ
åįļ è§Ī
éĢ ¾
åĮ Ģ
ç»ıæµİ åѦ
æ¸ Ĺ
ä¿Ŀ èŃ·
çī º
çī ²
çİ «
çij °
æľĢåIJİ ä¸Ģ
æĶ¿ åĬ¡
æ§ Ľ
èĻķ çIJĨ
éļIJ æĤ£
æī¿ åĮħ
æ¥ µ
æ¡ ©
çĽ ²
导 åIJij
èĩ´ å¯Į
ç¼ Ĩ
æģĭ çα
ä¸į åĬ¨
ç»Ļ 人
å· ¢
表 æĥħ
举 åįĹ
åĨħ å¤ĸ
è¾Ī åŃIJ
åı ī
åįļ ä¼ļ
åĬŁ æķĪ
æ¸ ´
å± ¬
æİĴ éϤ
éĢ Ľ
ä¸Ģ ä¼ļ
ä¸į å¼Ģ
å¼Ģ å¥ĸ
é»ij é¾Ļ
é»ijé¾Ļ æ±Ł
å¿« ä¸ī
度 åģĩ
åĿ ¤
éĤ® ä»¶
æĩ Ĵ
ä¾Ľ ç͵
å» £
好 è¯Ħ
ç§ĺ书 éķ¿
æĪĺ åľº
好 å¥ĩ
ä¾µ æĿĥ
æĨ ¾
æľĢ åĪĿ
æī¹ åıij
åİ ķ
è¼ ķ
æŀ ¯
ä¸ļ åĨħ
è´Ń æĪ¿
ä¸į åľ¨
纪 å§Ķ
æīĢ éľĢ
å¸Ĥ éķ¿
è³ ½
å¼ķ æĵİ
çģµ éŃĤ
éĬ Ģ
æ» ¤
çĿ IJ
å¤ļ 项
åĽŀ 头
èī ĺ
å¤į å·¥
éĥ¨ ä»¶
ç´§ ç´§
æŁIJ ç§į
使 åħ¶
æĸ° 人
æŀ ļ
æ³ķ å®ļ
å·´ å·´
æ¶µ çĽĸ
ç¨ »
æĭ ¾
æĻ ķ
è½ ¿
éĢļ è¡Į
åĵ Ģ
æ³ Ĭ
温 馨
éĽĨ èģļ
çĨ Ļ
åĩ ij
åįģ ä¸ĥ
æ°Ķ æģ¯
æıIJä¾Ľ çļĦ
æ³ ³
奥 è¿IJ
çģ¾ å®³
åĩĢ åĮĸ
è·¨ è¶Ĭ
åĵª æĢķ
éŁ ¿
å¢ŀ æ·»
çĦ Ĭ
æ®ĭ çĸ¾
ç¢ Į
æĤ Ķ
è§ģ è¯ģ
è¾ĸ åĮº
å¿ĥ èĦı
éļ §
åį ¸
åı¯èĥ½ æĢ§
æľī è¶£
åī¯ ä¹¦è®°
åĮĸ å¦Ĩ
ä¿ Ĥ
æ£ ļ
éĨ ĩ
带 头
éł Ī
追 究
æij Ķ
è¿Ļ éĥ¨
ä¸į 论
ç¥ ¸
å ³»
éģ ķ
çĶŁ èĤ²
å¤ ł
å¤ĸ 交
è¯Ħ 为
ä»İ å°ı
å°ı å°ı
é ¥¿
æĴ ¼
è·¨ å¢ĥ
被 åijĬ
åįĹ å®ģ
身 å¿ĥ
åĨį çĶŁ
æīĢ è¯´
æĹ¶éĹ´ åĨħ
åĪĹ åħ¥
éĿĴ æµ·
çα 好
çª Ħ
èĪ Ī
è¿ĩ 渡
æ¿ Ł
éĽ Ģ
审 议
åĽ½ èµĦ
æŃ¥ ä¼IJ
轨 éģĵ
信 念
ä¸ī åĪĨ
çĨ ¬
åѵ åĮĸ
ç¼ ł
éĥ Ĭ
èĪĴ æľį
纪 æ£Ģ
ä¸Ģä¸ĭ åŃIJ
鼻 話
è² ł
éĴ ¥
åĮ Ļ
çĹ ´
è¶ ģ
ç» £
çĪ µ
è½ °
éª Ħ
å§ ¨
æĭ ĺ
çĮ ´
è® ¶
è¿Ļ 座
çį ¨
æ·ĺ æ±°
çĹħ ä¾ĭ
æ²Ļ åıij
è§Ĩ 为
头 æĿ¡
å¿ħè¦ģ çļĦ
åı¯ è°ĵ
è¯Ŀ 说
ç¯ Ħ
æĹ© çĤ¹
æŀ¢ 纽
ç¾ ¡
çα åĽ½
çªģ åıij
éĢ Ĭ
æ½ į
èᣠèĢĢ
èŁ ¹
æ¦Ĥ çİĩ
å¾Ī ä¹ħ
æĥ ķ
è¨ ´
åľĨ 满
çļ ±
åĪĨ æ³Į
åħħ è¶³
çľĭ æ³ķ
è¾ Ł
æĭ ¦
æĭ ©
对 åºĶ
为 æł¸å¿ĥ
èħ Ĭ
å¤ļ ä¹Ī
æµ ij
å®ı è§Ĥ
èĦ ĸ
åIJĪ èµĦ
çĶŁ 涯
å®ŀ è´¨
ä¼ĺ çĤ¹
ç͍ æ°´
寿 åij½
æ² «
åIJ ģ
è© ¹
åĽ½ éĺ²
å´ ©
åĿ İ
èĨ ı
ä¸Ģ è½®
éģĹ äº§
æ¹¾ åĮº
ç» İ
åįķ 纯
æ¾ Ħ
åīį åĪĹ
身 影
é»ĺ é»ĺ
æį ī
çĴ °
èı Ĭ
æĢ ľ
åħĭ æĢĿ
æĢ» å±Ģ
çĩĥ æĸĻ
ä¸ļ æĢģ
åIJĦ æł·
åĴ ½
åĩº èī²
åĪĿ å¿ĥ
åı Ľ
çłĶ 讨
è¡ «
åİĨ ç¨ĭ
ç¦ ½
è¶³å¤Ł çļĦ
èį Ĩ
çľĭ å¾ħ
è´ ©
åĨ³ å¿ĥ
è£ ¹
å¸Ī èĮĥ
åŀ Ħ
æĿ ł
åĩ ¸
çĬ¹ 豫
çĥŃ è¡Ģ
åIJĪ ä¼Ļ
éħ µ
èIJ½ åľ¨
åįł åľ°
è¡ ¬
èĵ ī
æĦ ¤
æ¸ Ĭ
åĪĨ æķ°
ç¬ij çĿĢ
太 平
çĤ «
æİ¨ ä»ĭ
æĸ¯ åĿ¦
形 容
æĵ Ĭ
æĦŁ åħ´è¶£
åĨĽ 人
åĩĮ æĻ¨
对 çħ§
åıij çĹħ
å· ¾
èĪ ī
æª ¢
ç¬ij äºĨ
ç¡® è¯Ĭ
è´Ł åĢº
壮 大
æĪ ļ
äºĴ èģĶ
èª ²
èħ ¦
æĹ ±
åıĹ æ¬¢è¿İ
åį ī
éĻ¢ 士
æ© ¡
ä¸Ģ 对
è¾ ±
æ² Ĥ
åı² ä¸Ĭ
æIJ ı
å´ ĸ
代 谢
ç£ ·
é¡ ĺ
æµ ĩ
常 ç͍
åį ij
åĩº åĽ½
è¯ ł
稳 æŃ¥
ç»ı 纪
å¤ļ å¤ļ
æīĢ å¾Ĺ
为 主é¢ĺ
ä¸Ģ åĪĨ
æł ½
é¡ §
çº ²
åĥ ħ
å£ ĵ
åĦ ª
ç¿ °
æİ Ģ
人 为
åª ³
æ´ ½
èĿ ¶
å¤į åħ´
ä¼ļ å½±åĵį
åIJĦ çķĮ
éĤ£ ä¸Ģ
é¢ ¤
çĢ ı
çĢı 覽
å¯ ŀ
åı¯ æĢķ
åį³ æĹ¶
çķ ´
ä¸ĭ åįĬå¹´
ç¬Ķ è®°
éĻĦ åĬł
çĥŃ æ°´
å¥ ¸
ç£ ħ
æĿ ī
æ¸ħ åįİ
éĸ ±
ç° ¡
å¤Ħ å¤Ħ
åIJĪ éĩij
æ²³ æµģ
ç´ °
è´Ł éĿ¢
çļĦ 羣å®ŀ
åύ 械
èĴ IJ
西 äºļ
å· ħ
ç² ¹
åİŁ æĸĩ
æŀ ķ
è¡Ģ åİĭ
åļ ´
å¸ ĺ
åĨ Ģ
æĮ «
ç͵ è·¯
å°ı ä¼Ļä¼´
èĿ ´
æľĢ å¿«
æĭ Į
å® ª
æĸ ·
ç¿ ħ
åĴ ³
åĹ ½
ç¾ ŀ
躺 åľ¨
èµĽ 车
æ² IJ
éĻIJ 度
为 ä¸Ģä½ĵ
èĴ ľ
å¹ «
æIJ ħ
åĭ ĭ
åī ĸ
纳 ç¨İ
éķ¿ æķĪ
ç½ ķ
åī¯ æľ¬
ç© į
éĴ ©
ç¹ ¼
åĽ½ åľŁ
è¼ ī
ä¸į å¿ĺ
èѦ 示
çģ ¿
å¿ĥ å¾Ĺ
æĦ ļ
忽 çķ¥
åĽŀ äºĭ
åįł æľī
æ· Ħ
çī ¡
çĽij äºĭ
ç¿ ¡
éĴĪ对 æĢ§
çª ĥ
è£ ½
èĨ Ŀ
ç³ Ł
港 澳
太 太
æ¾ ¡
ç»Ĩ åĮĸ
åĶ® åIJİ
å®ŀåľ¨ æĺ¯
ç« £
çį ²
å̾ åIJij
å¼ķ ç͍
é¹ ħ
ç¬ij 容
ä¹IJ è¶£
æ°ij æĶ¿
éŨ æĪ·
å± ģ
迷 失
éĶ Į
å°ı 康
åĭ ī
æ³ ¼
ä¾ĭ åŃIJ
ä¸ī ä½į
å» ł
èĶ ĵ
广 éĺĶ
èĢ į
èĢģ èĻİ
åĭŁ éĽĨ
èĦļ æŃ¥
æĭ ¯
åŃĹ åı·
çĦ °
é¢ ł
èļ Ĥ
èļ ģ
é£ ¯
人 æĢ§
æĴ °
åİ ¢
å±Ģ éĻIJ
æľª æĪIJ
åĵª åĦ¿
大 åıij
ä¸į å®ļ
å¾ģ æ±Ĥ
éĥ µ
åĢº æĿĥ
çα ä½ł
èº ģ
ä»ħ ä¾Ľ
è¿ľ å¤Ħ
éĨ Ľ
åĥ µ
积æŀģ æĢ§
æİ ¡
åīį ä¸ī
äºİ ä¸Ģä½ĵ
çŀ Ħ
çĿ ģ
æ² ¸
åħ± èµ¢
éĢĢ å½¹
è´Ŀ å°Ķ
æİ ı
æĪ ²
è¡ į
éĶ Ĥ
ä¸ĩ ä½Ļ
ç§ij åĪĽ
æ¼Ķ åͱ
欧 åħĥ
æ·¡ æ·¡
éĿĴ å±±
èĹ Ŀ
ç» ½
令 çīĮ
éĽĨ 群
ä½ľ çī©
çĢ ij
å¤ ¯
ç½ij 游
åħ« 大
éª ļ
èª ĵ
ä¼ļ å±ķ
åħļ åı²
æ£Ģå¯Ł éĻ¢
åĸ ĺ
éĺ ±
èĢĮ åĩº
éĢļ 车
éĴ ĵ
æĥħ 人
æ¸ Ľ
ä¸Ń ç§ĭ
çĪ Ń
åıª åī©
æĺ Ķ
éĩİ çĶŁ
ç¡ «
èIJĿ åįľ
æĬµ æĬĹ
çĻ« çĹ«
éĻ Ģ
èĶ ļ
å¸ ľ
满 满
èı ±
éļĨ éĩį
æĺŁ çº§
æ½ ĩ
åħ¬ åħĥ
è° £
æ¯Ķ äºļ
æ¡Į åŃIJ
èµ £
è² ¼
æĦ¿ æľĽ
é¡ ½
æ´¾ éģ£
ç¥ Ľ
åª ļ
éĺ ľ
èij «
èĬ ¦
æ³ »
å¡ Į
çĭ Ń
å»ī æĶ¿
å¥ij æľº
æĹĹ èΰ
æĥ «
严 åİī
åıĭ æĥħ
å¦ Ĭ
å¨ ł
åĵª å®¶
èĨ ¨
è¶ Ł
æĮ ª
èĻ IJ
é łģ
çŀ ©
éº Ł
ç¨ £
èģĶ éĢļ
åı ®
çİĭ èĢħ
ä¸į ç¡®å®ļ
ç ijľ
è° İ
çī¢ è®°
ç¢ ¼
æĬ¤ èĤ¤
é¡ ·
çĦ ķ
åģļ 强
éļ± ç§ģ
éļ±ç§ģ æ¬Ĭ
åıĹ å®³
ä¸į çͱ
çĥ ¹
é¥ ª
é© ³
ä¼ ½
ä¸Ŀ 绸
è¥ Ħ
åįģ ä½Ļ
éº Ĺ
æ¬Ĭ åĪ©
èģ ŀ
åı¤ èĢģ
éģ ı
åIJĦ å¼ı
å°± è¡Į
åħ¥ å¢ĥ
ç ĥģ
èľ ĺ
èĽ Ľ
çº ¬
çŁ «
è» Ł
æ´Ĺ è¡£
æĦ §
é¢Ħ æ¡Ī
éľ Ĩ
æ·± åİļ
éĺ¿ æĭī
åĨĻ åŃĹ
åį ¦
éķ Ģ
模 æł·
åĤ į
æIJ į
èĸ ¯
åł ħ
åħ¬ 积
è¨ İ
ä¼ł æŁĵ
æ¯ ¯
çIJĨ å·¥
åĨ· éĵ¾
ç«ĭ æĸ¹
æ¢ Ń
åľ£ è¯ŀ
综 èīº
çİ© ç¬ij
æĥ³ ä¸įåΰ
æijĩ 头
æ· ¹
åģĩ æĹ¥
åĢ ĺ
èĢ ½
èİ ĵ
åŁ ·
èĩª è´¸
åįĬ 天
æª Ķ
æ¾İ æ¹ĥ
éķ ij
ä¸ «
éĩĮ ç¨ĭ
å¼Ģ èįĴ
èı ı
å®Ŀ è´µ
èŃ ¬
åķ Ł
æŁ ł
æª ¬
é© Ń
æ± Ľ
çĨĬ çĮ«
èķ ī
éļı ä¹ĭ
å± ij
è¾ĥ 强
èĥ ³
èĨ Ĭ
éĿĻ éĿĻ
åĴ ª
æĭĽ åij¼
代 è¨Ģ
ä¿¡ ç®±
è£ħ éħį
æĤ į
åįķ 车
èIJ İ
å¤ļ 彩
éĻ ¸
ä»İ 严
æ© Ħ
æ¦ Ħ
éĢ ®
éĩĮ æĸ¯
å§¿ æĢģ
太 æŀģ
éĩ Ŀ
æº ī
è¿ Ń
ç§ ¸
ç§ Ĩ
å·¥ å§Ķ
æ± ķ
èģ Ĩ
ä½ ¬
ç¼ ħ
çĶ ¸
åī¯ å±Ģéķ¿
éĹ º
èª ¤
è¤ IJ
ä¸į éĻIJ
èħ ķ
åij ķ
çŁ ¶
åĨľ å®¶
管 å§Ķä¼ļ
é¥ º
èĬ ľ
æ¾ Ī
è© ¢
å¨ģ å°¼æĸ¯
ä½ķ åĨµ
å°ı ä¼Ļ
奢 ä¾Ī
è¿Ļ ç¯ĩ
è¯ µ
竳 ç¨ĭ
ç´ Ģ
éIJ ĺ
éĤ ¢
ç³ Ļ
ç¼ Ģ
ä¹ Ĵ
ä¹ ĵ
çī¢ åĽº
åĿ ŀ
å¼ Ī
ä¾ĭ å¤ĸ
å» ³
è§Ħ 竳
èĬ Ļ
ç¯ ·
èº ¯
æł Ī
åĿļ å®ŀ
åŁº 建
çĿĢ çľ¼
ç· ´
èij ©
ç¼ ļ
æ¦ Ĩ
主 åĭķ
ç¥ Ģ
äºĴ éĢļ
尤 为
å® Ľ
éª ¼
æ± ²
ä¾ ĥ
æĤł ä¹ħ
æij §
æĭ ĩ
é« ĵ
éº Ĵ
éĻ Ľ
æŀ ¸
æĿ ŀ
è´ ¬
å°ı é¾Ļ
åĵ ®
èĵ¬ åĭĥ
åĮ Ī
çķľ çī§
å¨ ©
个 å¤ļ
æ² ¥
æĺ §
çĦ ļ
æĬij éĥģ
çĸ ¡
èĺ ij
éģİ ç¨ĭ
æ© ±
éĿ ĵ
大 çIJĨ
é« ¦
åĪĨ 辨
æ¸ ¤
çĸ ¤
åĬ¨ èĥ½
å¼ł å®¶
ä¸ĩ åįĥ
æ» ¥
é¥ ¥
åºŁ å¼ĥ
å¸ ³
æ¼ ³
è± IJ
ä» ij
å« ī
å¦ Ĵ
çŀ Ĵ
è¡ ħ
çĭ ¸
å¾ģ ç¨ĭ
éĤ ¯
éĥ ¸
ç¥ Ī
ç¥ ·
è¶ ´
ç»ĵæŀĦ æĢ§
è§Ĩ åIJ¬
è¬ Ŀ
çĴ Ģ
çĴ ¨
åĩº å¤Ħ
è¯ Ģ
å¾ ĺ
å¾ Ĭ
çľ ¨
åĸ ĩ
åı Ń
åĺ ²
çķ ¸
å¹² äºĭ
æļ §
æ² Ľ
åĦ Ħ
å» ĵ
åİ¿ éķ¿
èĥ ļ
çIJ ¢
çŃ ·
éĩ ĭ
ä¾ ®
åIJ ©
åĴ IJ
åĮ ¿
æĬ¬ èµ·
æ³ £
æ¶ ¤
éº ½
æĽ Ļ
åī¯ éĻ¢éķ¿
åħļ åĴĮ
æķ£ åıij
润 æ»ij
åĵ º
æĥ ¬
漫 éķ¿
ä¸į æĩĪ
åŁ ł
åĹ ĵ
èĢģ çĪ·
è® ½
æĪĺ ç»ĦåIJĪ
æ£ ł
åħ¨ åŁŁ
èł ¢
è¯ ¡
åīį çŀ»
æķ Ľ
ä¸Ģ å°ģ
å¹ Ĥ
èİ Ĩ
è¯Ŀ è¯Ń
ç»Ĩ åĪĻ
å± ¿
åµ Į
éĢ į
åĺ ±
æ¸ ²
çĥ ¯
çĿ ¹
é¦ Ĵ
èħ ¥
æĬĹ åĩ»
çĿ «
èį Ķ
éļ İ
æ³ī æ°´
è¬ Ĥ
ç Ĥ¬
åĩı æİĴ
è¸ Ĭ
è ·»
æ· Į
éľ ¾
å¥ĩ 纳
å¯ Ŀ
æ¤ İ
æŁ ¬
æĸ¯ åŁº
åħ¬ ç«ĭ
è¨ ĵ
é£ Ļ
é© ¿
åĤ µ
èĽ Ļ
ç¯ĩ 竳
åĪĨ æĶ¯
ä¸Ĭ å¹´
çŃ Ŀ
ç¼ ¤
èĢģ æĹ§
åĻ ¬
æľ ¦
èĥ §
æ¶Ī è²»
æĵ Ķ
æ¦ ´
æ¿ Ĵ
ç³ ¯
æ³ ¸
æį Ĩ
ç» ļ
èµ İ
çIJ IJ
èµ Ĥ
æħ ®
æ² Į
çĦ Ļ
æĴŃ æĬ¥
æ· ĩ
åĪĩ åħ¥
çij ķ
çĸ µ
éģ ´
ç¨ ļ
ç© ©
èŀ ĥ
æ£ ķ
æĨ §
æĨ ¬
ä¼ º
æ¯ Ĺ
æį į
æĬ ī
ç´ Ĭ
å¼ Ľ
æĭ Ń
æĹı èĩªæ²»
åĿ ·
ç« ¶
è© ³
è¿Ħ ä»Ĭ
è° ´
çŀŃ è§£
æŁ ¿
é¢ Ĭ
ç° §
çĥŁ èĬ±
ä¾ ¥
çĿ ¦
éħ Ŀ
æ° ĵ
çIJ ī
å§ Ĭ
æ² ®
æħ ·
èľ ķ
çij ļ
éĩĩ çŁ¿
åł °
åºķ èķ´
èĨ ³
è¾ ķ
éŁ Ń
åĴ Ļ
ç² ½
åī Ķ
æ² ¦
èĤ ´
éķ ¶
æĺ ¼
è¾ Ĺ
å© ª
åĮ ®
æĸ ĵ
æ± ¶
éĥ ´
éł »
çª Ĵ
è¢ ±
åĽ ±
èĢ ĺ
è ļĮ
çĭ Ļ
çĹ ¹
ç¥ ī
æı ®
æ· Ĩ
ç£ ĭ
éĺ ª
æ «
ã ¸
Ļ ¶
ã ij
𣠲
ä ¢
ã Ń
𬠨
ð¬ Ģ
𬠮
𬠯
ð¬ ľ
𪠨
ð« Ĺ
ð¬ Ĭ
𬠱
ð¬ Ł
ä İ
ð ¡
ä ĥ
ã ł
ð ©
ð© ¾
𬠺
ð¬ Ļ
ãĢ Ķ
ãĢ ķ
çļĦ æĹ¶åĢĻ
æľīéĻIJ åħ¬åı¸
ä¹ĭ åIJİ
ä¸ļ åĬ¡
åķ Ĭ
èϽ çĦ¶
æĭ¥ æľī
äºĴ èģĶç½ij
éĤ£ äºĽ
ä½ł çļĦ
åĨ³ å®ļ
éϤ äºĨ
åĽ¢ éĺŁ
åı¯ æĺ¯
以 åIJİ
社 åĮº
çļĦ éĹ®é¢ĺ
å¹¶ ä¸Ķ
æķĻ å¸Ī
å°± ä¼ļ
天空 éĥ¨èIJ½
æľĢ ç»Ī
å½ĵ çĦ¶
ä¹Ł æľī
ç¡® ä¿Ŀ
æĥ³ è¦ģ
è´Ń ä¹°
人 çļĦ
åIJ ´
çļĦ åıijå±ķ
ä¸į çŁ¥éģĵ
软 件
æĪij们 çļĦ
çζ æ¯į
åī ij
èĢĮ æĺ¯
å®ī æİĴ
åIJİ æĿ¥
çļĦ åľ°æĸ¹
èµ µ
èĢĥ è¯ķ
çªģ çĦ¶
ä¸Ģå®ļ è¦ģ
åζ ä½ľ
è¯Ħ ä»·
åħį è´¹
è´¹ ç͍
绣 ä¸Ģ
çĦ¶ èĢĮ
è¿Ļ 次
éĿĴ å¹´
人 类
äº ¦
让 人
è´Łè´£ 人
éĩĩ åıĸ
çļĦ äºĭæĥħ
ä¹Ł ä¼ļ
车 è¾Ĩ
æĽ´ æĺ¯
强 åĮĸ
æĪij åĢij
以 åīį
ä¼ĺ åĮĸ
å§Ķåijĺ ä¼ļ
åĽ° éļ¾
年 度
ä½į äºİ
æĮĩ åĩº
åĨį æ¬¡
åĬŀ çIJĨ
æ¯ı 个
对 æĸ¹
è¿Ľè¡Į äºĨ
æľĢ é«ĺ
课 ç¨ĭ
身 ä¸Ĭ
æĽ¾ ç»ı
åĮ» çĶŁ
å®ī è£ħ
æľ ±
è¿IJ è¡Į
åıĮ æĸ¹
æľĢ 大çļĦ
æŀĦ 建
è¿ŀ ç»Ń
çļĦ å°ı
她 çļĦ
çŃī çŃī
æĶ¹ åĸĦ
åIJĦ ç±»
éģĩ åΰ
æľī çĿĢ
人 çī©
æĢ» æĺ¯
è¿ħ éĢŁ
åζ å®ļ
å®ĥ 们
å®ĺ ç½ij
è¿ĺ è¦ģ
ç»Ī äºİ
æĪ¿ åľ°äº§
è¯ģ æĺİ
èĤ¡ 票
åºĶ å½ĵ
èĭ± åĽ½
è¿IJ ç͍
æľĢ æĸ°
享 åıĹ
让 æĪij
æĻļ ä¸Ĭ
å¾ ŀ
å°ı 说
å°¤åħ¶ æĺ¯
è®Ń ç»ĥ
åħ¨ å¸Ĥ
æĮij æĪĺ
æľī çĤ¹
带 çĿĢ
çļĦ ä¸ľè¥¿
é£İ æł¼
é»Ħ éĩij
å¼ķ 导
æŃ¤ å¤ĸ
æľĢ è¿ij
追 æ±Ĥ
强 è°ĥ
ä¹Ł åı¯ä»¥
æĦŁ åΰ
èĩª æĪij
çī¹åĪ« æĺ¯
æĪIJ éĥ½
éĢIJ æ¸IJ
å¿« ä¹IJ
ä¹ĭ ä¸Ń
æĬķèµĦ èĢħ
ä»ĸ们 çļĦ
æ° ı
å·¥ä½ľ 人åijĺ
äºĨ ä¸Ģ个
åķ ¦
ä¸Ģ åĢĭ
åŁº å±Ĥ
æ²Ł éĢļ
第ä¸Ģ 次
å¹¶ 没æľī
çļĦ å·¥ä½ľ
åľ¨ è¿ĻéĩĮ
æŀ ª
æĶ¯ æĴij
æĹ¶ å°ļ
æĿ¥ åΰ
æĶ¶ è´Ń
éĿ© åij½
æĺ¯ ä¸įæĺ¯
讨 论
ä¸ļ 绩
å°± èĥ½
ç«ĭ åį³
è¡Ĺ éģĵ
åľ¨ ä¸Ģèµ·
æľĪ 份
é«ĺ 端
å¾Ī éļ¾
ä¿Ħ ç½Ĺæĸ¯
æīĭ 段
åģļ åĩº
ä¼Ĺ å¤ļ
å®ŀ è¡Į
æīĵ å¼Ģ
游 客
ä¾Ŀ çĦ¶
å°± åĥı
离 å¼Ģ
说 éģĵ
æĸ° èĥ½æºIJ
æº ª
äº ķ
令 人
ä¸Ģ åľº
æĪij æĥ³
两 人
èĩ³ å°ij
çļĦ çĶŁæ´»
æĺ¯ 个
èĭ± è¯Ń
æ²Ĵ æľī
æĢĿ èĢĥ
éĻIJ åζ
åı° æ¹¾
ä¸Ģ æĹ¦
çļĦ ä¸Ģ个
é«ĺ 级
åĬŀåħ¬ 室
å¾· åĽ½
æĪij å°±
å®ļ ä½į
éĢĤ åºĶ
æĮĩ æłĩ
åħ¨ çľģ
ä¸Ĭ è¿°
å®ĥ çļĦ
åĽŀ å®¶
欧 洲
éĵģ è·¯
é¼ĵ åĬ±
çļĦ å½±åĵį
é«ĺ æł¡
天 ä¸ĭ
é«ĺ è´¨éĩı
æĿŃ å·ŀ
èµĦ 讯
æĶ¾ åľ¨
æľī ä¸Ģ个
å°± è¦ģ
ä¸Ĭ éĿ¢
è§£ éĩĬ
éĢIJ æŃ¥
尽 管
æľī ä»Ģä¹Ī
çļĦ äºĭ
çĻ» è®°
人æ°ij å¸ģ
è§Ĥ ä¼Ĺ
è§Ĥ å¯Ł
ç͵ èĦij
çļĦ åIJĮæĹ¶
ä½ľ ä¸ļ
宣 å¸ĥ
çļĦ ä½ľç͍
åĽŀ æĿ¥
éļ¾ ä»¥
æīĢæľī çļĦ
å°ı åѦ
æıIJ åīį
æ¤į çī©
åĩ ¯
ä¸Ĭ äºĨ
å°± åľ¨
åħĪ åIJİ
æīĭ æľ¯
éĥ Ń
éĿ¢ åīį
æ¯ķ 竣
äºĮ æĺ¯
红 èī²
éĺ³ åħī
èĭ¹ æŀľ
å¾Īå¤ļ 人
ç»Ļ æĪij
åĵ ¦
çľ¼ çĿĽ
éł Ń
ä¸Ģ æĺ¯
åıijå±ķ çļĦ
åıį åºĶ
æĪ¿ å±ĭ
æľŁ å¾ħ
ç§į æ¤į
æĸĩ åѦ
åį³ åı¯
é¦ĸ 次
èĭ± éĽĦ
å¤ļ 次
åĮħ è£ħ
æ²³ åįĹ
ä¹ĭéĹ´ çļĦ
ä»į çĦ¶
åIJ¬ åΰ
èij£äºĭ éķ¿
è§Ħ åĪĻ
ä¸Ģ 份
大 ä¼Ĺ
使 å¾Ĺ
è¿Ľ åı£
ä¸Ģ çīĩ
æĢ§ çļĦ
çļĦ 大
æĪij æĺ¯
äºĴ åĬ¨
æ° £
çļ Ĩ
åħ¬åı¸ çļĦ
ä¸Ģ è¾¹
åıĬ åħ¶
èī¯ å¥½çļĦ
æĭĵ å±ķ
å½ĵ å¹´
广 åľº
åģļ äºĨ
åŁº äºİ
æıIJ éĨĴ
åħĦ å¼Ł
èĢģ æĿ¿
è¿ij æĹ¥
çĬ¶ åĨµ
注 éĩį
åĪļ åĪļ
è°ĥ çłĶ
å¿ĥ ä¸Ń
æĬĬ æı¡
éļı åIJİ
ä¸į å¤Ł
åĪĽ ä½ľ
ç«Ļ åľ¨
缸 äºĴ
çĸ«æĥħ éĺ²æİ§
年 代
带 åĬ¨
伤 害
竣 çĦ¶
å¼ķ è¿Ľ
累 计
让 æĪij们
åĽŀ æĶ¶
æĬ¥ åIJį
åĬ© åĬĽ
èģĶ çĽŁ
çŃĸ çķ¥
åij¨ è¾¹
åĭ Ĵ
è¿ĺ åľ¨
æµģ éĩı
寻 æī¾
ç͵ åĬĽ
èι èζ
è¿ĺ èĥ½
æĭħ ä»»
çļĦæĥħåĨµ ä¸ĭ
çļĦ åİŁåĽł
缺 ä¹ı
çIJĥ åijĺ
å²ģ çļĦ
çĶ· åŃIJ
å·¥ èµĦ
è¿ijå¹´ æĿ¥
åij Ģ
æıIJä¾Ľ äºĨ
她 们
å®¶ åħ·
çĩ ķ
è½» æĿ¾
æł¡ åĽŃ
èĢĥ æł¸
åį± éĻ©
åħļ ç»Ħç»ĩ
æĢ» ç»ıçIJĨ
çļĦ æĸ°
çİ» çĴĥ
è¿Ļ ä½į
对 æŃ¤
家 人
çļĦ è¦ģæ±Ĥ
温 度
æĮĩ æķ°
缴 åΰ
æŃ¤ æĹ¶
æ¹ĸ åįĹ
éĥ½ è¦ģ
ä½ľ åĩº
åIJĦ ä½į
èĢĥ çĶŁ
ä¾Ŀ æį®
说 è¯Ŀ
æĪij ä¹Ł
å·¥ åİĤ
åıĺ æĪIJ
ä»ĸ 人
æĪij è§īå¾Ĺ
åIJĦ 级
ä¼łå¥ĩ ç§ģæľį
ä¸Ĭ åįĩ
好 åĥı
åĬł éĢŁ
äºĮ åįģ
è¢ ģ
è£ħ 饰
éĥ½ èĥ½
ä¸Ģ å¼ł
åĬ¨ æĢģ
å¹´ çļĦ
è¿Ļ å°±æĺ¯
ä¹Ł è¦ģ
èµĦ æł¼
æĪĺ äºī
æĦŁ è°¢
åŁ¹ èĤ²
天 æ°Ķ
女 士
åı¯èĥ½ ä¼ļ
çļĦ 产åĵģ
ä¹Ł å°±
主è¦ģ æĺ¯
åĪº æ¿Ģ
ç»Ļ ä½ł
大 æķ°æį®
åĮ» åѦ
åĪ ¤æĸŃ
ä»ĸ 说
表 æ¼Ķ
äºļ æ´²
ä¸ĵ é¢ĺ
ç«ŀäºī åĬĽ
éĤ£ æł·
å±ķ å¼Ģ
å¹³ æĹ¶
æİ¥ ä¸ĭæĿ¥
æī¿ 诺
æ³ķ åĽ½
åħ³ å¿ĥ
ä¼ļ æľī
éĤĢ è¯·
é¢Ħ éĺ²
对 æİ¥
好 äºĨ
åĴ± 们
çļĦ æĦŁè§ī
æĢĿ è·¯
éĥ½ 没æľī
çļĦ æĸ¹æ³ķ
女 åŃIJ
åı¸ æ³ķ
è¿ĺ ä¼ļ
è¶ĬæĿ¥è¶Ĭ å¤ļ
åĽł çĤº
æµ· åįĹ
人 æķ°
å°Ĩ ä¼ļ
ä¸ļ 主
é¤IJ 饮
å±ħ ä½ı
åıij åĩº
è¿ij æľŁ
å¼ķ é¢Ĩ
æľºåύ 人
åĩºæĿ¥ çļĦ
çľĭ è§ģ
ä¿ Ĭ
让 ä»ĸ
ä¸į æĥ³
å·¥ä½ľ çļĦ
è¡¥ åħħ
æµ ħ
çī¹ å¾ģ
ä¸Ĭå¸Ĥ åħ¬åı¸
ç¾İ é£Ł
广 西
æ¯ı ä¸Ģ个
èIJ½ åľ°
åĵģ ç§į
åĴĮ è°IJ
å½» åºķ
é«ĺ èĢĥ
æĺ¨ 天
åīį å¾Ģ
çĽij æµĭ
çϾ 度
åľ¨ ä¸ŃåĽ½
çļĦ éľĢæ±Ĥ
亿 ç¾İåħĥ
åѦ æľ¯
æĶ¶ åΰ
æĿ¿ åĿĹ
ä¸Ģ 段
æŀĦ æĪIJ
ä¼ģä¸ļ çļĦ
表 éĿ¢
æķ´ çIJĨ
ç»ĵ å©ļ
人 家
åģľ æŃ¢
åѦ ç§ij
æĺ¾ å¾Ĺ
ä¼ij æģ¯
é¢Ħ æľŁ
æĪĸ æĺ¯
çļĦ 主è¦ģ
åºĶ 对
èµ° äºĨ
ä¸Ń éĹ´
èµ° è¿Ľ
åijĪ çݰ
æIJŃ éħį
é¹ ı
æĺ¯ åĽłä¸º
æĥħ 绪
å®ļ æľŁ
社ä¼ļ 主ä¹ī
çŃī 级
磼 çĽ¾
é£ŀ æľº
èĩ³ ä»Ĭ
æĶ¶ éĽĨ
çļĦ æķħäºĭ
åĪĩ å®ŀ
å®ŀçݰ äºĨ
å½¢ æĪIJäºĨ
åįĹ æĸ¹
ä¸Ń åѦ
æµ· æ´ĭ
åIJ¦ åĪĻ
æĭį æijĦ
大åѦ çĶŁ
åĩºçݰ äºĨ
æĦı å¤ĸ
ä¹Ł èĥ½
çļĦ èĥ½åĬĽ
åĿIJ åľ¨
åĪĻ æĺ¯
èĢĥ å¯Ł
å°Ĭ éĩį
éĺ² æŃ¢
ç´§ å¼ł
读 书
åĩº è¡Į
å°± æľī
å±¥ è¡Į
çݰ代 åĮĸ
åĽ½ åĬ¡
åĽ½åĬ¡ éĻ¢
ç»´ ä¿®
åİŁ åĪĽ
æĺ¯ æĮĩ
ä¼ij éĹ²
çĤ ®
æĸ° æĹ¶ä»£
éĢĻ åĢĭ
ä¸į æķ¢
å®Į ç¾İ
ç»Ĩ èĬĤ
éŃ ı
èͬ èıľ
é¢Ĩ导 çıŃåŃIJ
è¶ħ 级
è¡Į æĥħ
人工 æĻºèĥ½
åį° åº¦
åŁºç¡Ģ 设æĸ½
åıĪ æĺ¯
èᝠçī©
åIJ¸ æĶ¶
åį´ æĺ¯
éĥ İ
å¥ĸ åĬ±
çļĦ æľĭåıĭ
ä¿Ŀ çķĻ
è§Ħ å¾ĭ
æĸ° çĸĨ
è¿ĺ åı¯ä»¥
æİ¥ è¿ij
æŃ¤ åīį
æī¹ åĩĨ
æĢİä¹Ī æł·
çļĦ ä½įç½®
ä¸Ģ åĿĹ
æĭĴ ç»Ŀ
顾 客
ä¹Ł åľ¨
ä¸Ģ çĶŁ
éĥ¨ éĺŁ
å¹´ åīį
æĸ¹éĿ¢ çļĦ
å°Ŀ è¯ķ
羣æŃ£ çļĦ
ç¦ģ æŃ¢
è¿ĺ 没æľī
æ°ij çĶŁ
èµ° åIJij
èĦ¸ ä¸Ĭ
å½ĵ 天
éĽĨåĽ¢ åħ¬åı¸
çļĦä¸Ģ ç§į
西 æĸ¹
åĽŀ åºĶ
ä¸Ģ 声
常 常
æıIJ åΰ
èħ¾ 讯
æľį è£ħ
为 ä½ķ
äºij åįĹ
å°± ç®Ĺ
ä¼ł æī¿
åıį èĢĮ
ä¸ĩ åIJ¨
财 产
å¦Ĥ ä¸ĭ
æĹ¥ åīį
åİŁ æľ¬
æľĢ éĩįè¦ģçļĦ
认 è¯ģ
ä¸Ģ éģĵ
ä¿¡æģ¯ åĮĸ
å¾Ĺ åΰäºĨ
é̲ è¡Į
æĪij è¦ģ
éĢļ ä¿¡
室 åĨħ
èµļ éĴ±
æĶ¶ èĹı
è§£åĨ³ æĸ¹æ¡Ī
æĪ¿ 产
çĭ ¼
æ´» åĬĽ
ç»ıæµİ åıijå±ķ
çŃī å¾ħ
ä¹Ł å¾Ī
åĿ ij
å¾Ī 好çļĦ
éļ¾ åº¦
ä¸į å¦Ĥ
人æ°ij æĶ¿åºľ
åĩº åıij
åīį æľŁ
æ¼Ķ åijĺ
女 çĶŁ
èģļ çĦ¦
审 计
é¢Ħ æµĭ
ä¾Ŀ æīĺ
äºĶ å¹´
è¡¥ è´´
æ¸ħ æĻ°
éª Ĥ
çľĭ èµ·æĿ¥
çļĦ åŃ©åŃIJ
é¢ij éģĵ
ä½ı å®ħ
éĿ¢ åIJij
æľĢ ä½İ
æĹ¢ çĦ¶
ä¸Ģ å¥Ĺ
æķ° åѦ
群 ä½ĵ
åĮĹ京 å¸Ĥ
å±ħ çĦ¶
æ°Ľ åĽ´
éĢĶ å¾Ħ
çļĦ åŁºç¡Ģä¸Ĭ
èģĮ è´£
åı¯èĥ½ æĺ¯
åĨĽ äºĭ
æĪIJ æķĪ
åŃ©åŃIJ 们
计ç®Ĺ æľº
èµ ¤
产ä¸ļ åıijå±ķ
å·¨ 大çļĦ
工 人
çĶŁ éķ¿
éĥ½ åı¯ä»¥
çļĦ æľºä¼ļ
èµĦ è´¨
çĹĽ èĭ¦
ç²ī ä¸Ŀ
å¢ ĵ
å¹³ å®ī
管 éģĵ
è·Ł çĿĢ
饮 é£Ł
åķĨ å®¶
å¤ļ å®¶
åı¸ æľº
åºĶ该 æĺ¯
éĢı éľ²
认 å®ļ
è¡Įä¸ļ çļĦ
çļĦ ä¼ģä¸ļ
æ¯ı ä¸Ģ
èĮĥåĽ´ åĨħ
è¾ĥ 大
è´ ¤
大 èµĽ
å¤ļ äºĨ
é¸ ¿
临 åºĬ
åľ¨ è¿Ļ个
çļĦ åĨħ容
éĶĢ éĩı
å¾Ī å°ij
åŃ Ł
ç»´ æĮģ
åĴĸ åķ¡
æľ¬ åľ°
èī² å½©
å¹¶ éĿŀ
èĢĮ å·²
温 æļĸ
èIJ §
æĬĵ ä½ı
èĢĮ ä¸įæĺ¯
åĸ Ĭ
çļĦ åħ³ç³»
çī© åĵģ
éĤ£ æĺ¯
åĨľ 产åĵģ
è¿Ļ æĹ¶
å©ļ å§»
æ°´ æŀľ
æĶ¶ èİ·
ä»ĺ åĩº
客æĪ· 端
æ¼Ķ åĩº
åħ¨ æĸ°
è¿Ļ ä¹Łæĺ¯
æĺ¯ çͱ
è§Ĥ 念
æľī 个
éĢł åŀĭ
èĥľ åĪ©
ä¸ī æĺ¯
è¶ħ å¸Ĥ
åħļ建 å·¥ä½ľ
æĶ¾ å¿ĥ
线 路
æĭĽ çĶŁ
åIJĥ é¥Ń
è½ ī
å°½ éĩı
è§ģ åΰ
åIJĮæ¯Ķ å¢ŀéķ¿
åįİ ä¸º
æĪij å¸Ĥ
æıIJ åĩºäºĨ
æ°ij èѦ
åįļ çī©
åįļçī© é¦Ĩ
è¯ļ ä¿¡
åīį éĿ¢
山 西
è¾ħ åĬ©
转 移
æĽ´ 为
丰å¯Į çļĦ
åį ¢
å¿« éĢĴ
æĺ¾ èijĹ
çī© èµĦ
åΰ è¾¾
æľī åĪ©äºİ
åij Ĩ
åŃ©åŃIJ çļĦ
ä¸į ä½Ĩ
çłĶç©¶ éĻ¢
çͳ æĬ¥
æļ ¨
æ°ij éĹ´
åį »
çļĦ å£°éŁ³
å¸Ĥåľº çļĦ
ä¸Ģ åı¥
çľģ 级
æĿ¥ çļĦ
åĵª 个
æīį ä¼ļ
åĪĨ éħį
èĶ ¡
ä»ĸ åľ¨
åħ± æľī
å¡ ĺ
èĴ Ĥ
éľ į
åıĤ è§Ĥ
ä¸Ī 夫
ä¾Ŀ éĿł
æľī æĹ¶
äºĨ å¾Īå¤ļ
ä¸ĸçķĮ æĿ¯
å®¶ æĹı
ä¸į éľĢè¦ģ
大 å¸Ī
èŀį åħ¥
éĿŀ æ³ķ
çĹħ 人
åIJİ æľŁ
大家 éĥ½
ç½ij åĿĢ
åİŁ æĸĻ
便 å®ľ
æ¶ Ľ
仿 ä½Ľ
å·® è·Ŀ
åı¦ä¸Ģ æĸ¹éĿ¢
产åĵģ çļĦ
èµ «
æĥħåĨµ ä¸ĭ
éĴ¢ éĵģ
æľ¬ ç«Ļ
纳 åħ¥
å·² æľī
æľī 没æľī
估 计
é£ ĺ
æľŁ è´§
åĢĭ人 è³ĩæĸĻ
ä¸ĵä¸ļ çļĦ
çĪĨ åıij
èĩ´åĬĽ äºİ
çİ°åľ¨ çļĦ
æľī åĵªäºĽ
çł´ åĿı
æķ°åŃĹ åĮĸ
åľ° éĿ¢
é»ij èī²
å¹¼åĦ¿ åĽŃ
çļĦ ç²¾ç¥ŀ
äº Ń
导 æ¼Ķ
çݰ æľī
æŃ¦ åύ
èĭı å·ŀ
çİ Ħ
æ±Ł 西
延 伸
论 æĸĩ
è¾ĥ 为
çİ© æ³ķ
é¼ İ
åIJĮ æŃ¥
éĩĬ æĶ¾
æĽĿ åħī
åĿļ åĨ³
å§Ķ æīĺ
å°Ĩ åľ¨
äºĪ 以
ä½ľ æĸĩ
èĢĮ åľ¨
ä¼ĺ åħĪ
åĽŀ åİ»
ä¿® å¤į
åĽ½åĨħ å¤ĸ
çŃĸ åĪĴ
åıij æĶ¾
å¿ĥ æĥħ
çļĦ åİĨåı²
éĿ¢ è¯ķ
举 åĮĹ
ä¿¡ åı·
ç²® é£Ł
è¯ģ 书
æŁIJ äºĽ
è¿IJ ä½ľ
åĨ² åĩ»
çĥŃ çĤ¹
æĹ¶ æĹ¶
æĹ¶æĹ¶ 彩
åľ° çĤ¹
ä¸Ģä½ĵ åĮĸ
éļ¾ é¢ĺ
æĽ °
ç«ĭ åĪ»
æĺ¯ éĿŀ常
åħ± åĴĮ
åħ±åĴĮ åĽ½
æ¿Ģ åĬ±
æľīæķĪ çļĦ
å¤Ħ ç½®
该 åħ¬åı¸
æ£Ģ éªĮ
èѦ æĸ¹
è´ ¾
äºĨä¸Ģ ä¸ĭ
ä»Ĭ åIJİ
çħ ®
ç͍ åĵģ
读 èĢħ
æĪij åľ¨
åĽŀ å¤į
ä¸Ģ 座
è¿ĺ 没
å®ļ åζ
没 æĥ³åΰ
å¤ ¹
ä¼ł éĢĴ
ä¸Ģ 款
强 大çļĦ
çļĦ è¡Į为
å¤ı 天
åıijåĬ¨ æľº
é¢ĨåŁŁ çļĦ
å®ŀéªĮ 室
ä¸Ģ æĬĬ
æĺ¯ 为äºĨ
éĻķ 西
æĭħ ä¿Ŀ
è¾¾ æĪIJ
è¦ģ æĺ¯
æĺİ å¤©
ç»Ļ ä»ĸ
建ç«ĭ äºĨ
ä¸į è¡Į
ä¸Ń æĸĩ
åľ° 说
åIJİ çļĦ
çĽij æİ§
éĢ ¸
æĢ» éĥ¨
æľ¬ æĸĩ
é¹ ¿
æĻ¯ è§Ĥ
çļĦ 缮æłĩ
èĽ ĩ
åĨ ¯
ä¸Ń åĮ»
æķĪ åºĶ
产 éĩı
åŃ Ŀ
è´¦ æĪ·
è¿Ŀ åıį
èij£äºĭ ä¼ļ
京 举
责任 ç¼ĸè¾ij
åķı é¡Į
çα å¿ĥ
èѦ å¯Ł
é¤IJ åİħ
å¸Ĥ æĶ¿åºľ
天 天
æĸ° é²ľ
éĥij å·ŀ
è¶ħ è¶Ĭ
å½ Ń
çŁ¥è¯Ĩ 产æĿĥ
åĽŀ å¿Ĩ
路 线
å»ī æ´ģ
éĿĴ å°ijå¹´
åıĸå¾Ĺ äºĨ
çľĭ åΰäºĨ
é¦ ¬
ç²¾ åĵģ
åľ° éĵģ
æĮģ æľī
ä¸ĭ äºĨ
æľī æĹ¶åĢĻ
ä¸Ģ 人
æĴ Ĵ
ä»Ķ ç»Ĩ
èĢģ åħ¬
äºĭå®ŀ ä¸Ĭ
èģĶ èµĽ
ä¾ĽåºĶ éĵ¾
é¢Ħ ç®Ĺ
åζéĢł ä¸ļ
å®īåħ¨ çĶŁäº§
俱 ä¹IJ
俱ä¹IJ éĥ¨
çļĦ æł¸å¿ĥ
æīĵ ç®Ĺ
å½± çīĩ
æIJŃ å»º
ä¹Ł ä¸įä¼ļ
æĭħ å½ĵ
å±Ĥ éĿ¢
åѦ åijĺ
临 æĹ¶
缸 ç»ĵåIJĪ
对 æ¯Ķ
ä»ĸ æĺ¯
æĸ° åĮº
è¿Ľ åİ»
çϾ å¹´
ä¿ ©
å°½ å¿«
ç͵åŃIJ åķĨåĬ¡
æĽ´ æľī
æ¸ħ çIJĨ
åı¦ ä¸Ģ个
åĤ »
ä»Ģä¹Ī æł·çļĦ
æĺ¯ æľĢ
åij¨ å¹´
å¾Ī 容æĺĵ
åĽ¢ ç»ĵ
ç´ Ħ
æĹ© å·²
çļĦ åıĺåĮĸ
éľ ŀ
æĹ¥ ä¸ĬåįĪ
失 åİ»
ä¸Ń åľĭ
çļĦä¸Ģ äºĽ
å°ı åŃ©
ä¸ĭ è·Į
éĶ» çĤ¼
é ij
éij «
å¿ĹæĦ¿ èĢħ
èĤ¡ å¸Ĥ
èµĽ äºĭ
许åı¯ è¯ģ
åı¯ æĮģç»Ń
åijĬè¯ī è®°èĢħ
éĢ» è¾ij
å¼ķ åħ¥
çļĦ è¿ĩç¨ĭä¸Ń
è§Ĩ è§ī
èĩªæ²» åĮº
è¯ģ æį®
è£ħ ç½®
第ä¸ī æĸ¹
å¹´ æĿ¥
å¹¿ä¸ľ çľģ
带æĿ¥ äºĨ
éķ¿ æ±Ł
访 éĹ®
å·® ä¸įå¤ļ
æĺ¯ æĪij
éģŃ éģĩ
æĬĵ 好
é«ĺ è¾¾
å¹¶ åľ¨
èĩª è§ī
ä¾ĽåºĶ åķĨ
æĥħ æĦŁ
ä½ı äºĨ
çļĦ èģĮä¸ļ
çļĩ å¸Ŀ
西 éĥ¨
åĴĮ å¹³
çļĦ åĬĽéĩı
æ± ª
åħħåĪĨ åıijæĮ¥
æĬķ è¯ī
èµ· åΰ
äºĴ 缸
æ¾³ éŨ
æİ¥ åΰ
æ°´ æ³¥
模 åŀĭ
ä¸Ģ åįĬ
ç§© åºı
æĪij们 åľ¨
æī¿ 认
ä¸Ģ éĥ¨åĪĨ
åįł æ¯Ķ
å¦ĩ 女
ç² ĺ
äºĨè§£ åΰ
ä¸Ģå®ļ ä¼ļ
åIJĦ 大
èµ° åĩº
为 大家
é«ĺ éĵģ
åı¯ä»¥ åľ¨
ä½Ĩ åľ¨
çĶŁæĢģ çݯå¢ĥ
èı ¯
çļĦ ä»·æł¼
麻 çĥ¦
æ¿Ģ åıij
éĤ£ å°±
çļĦ æł·åŃIJ
为 æŃ¤
天 åľ°
çļĦ 缮çļĦ
åĢº åΏ
å·² ç¶ĵ
åĽĽ 大
åIJĮæĹ¶ ä¹Ł
å½¼ æŃ¤
æĭ¿ åΰ
åIJ« éĩı
åįģ 大
éļ¾ éģĵ
å¼ Ĺ
ä¸Ģ 段æĹ¶éĹ´
çħ§ 顾
æķ°æį® æĺ¾ç¤º
æĪIJ为 äºĨ
èµ° åΰ
æľ¬ åħ¬åı¸
ç»Ī 端
ä¹Ł ä¸įæĺ¯
头 åıij
大 约
é£İ æĻ¯
æ¶Ī èĢĹ
审 æŁ¥
äºī åıĸ
æ³ķ æ²»
äºĭ çī©
ç¼ĵ è§£
æĥ ¨
缸åºĶ çļĦ
çļĦ æķĪæŀľ
åıį å¤į
åıijçĶŁ äºĨ
éĢĻ äºĽ
ç»ĥ ä¹ł
åݨ æĪ¿
å¼Ģ æĭĵ
欣 èµı
夫 妻
ä¸į ä¸Ģæł·
产 èĥ½
èĬ¯ çīĩ
è¦ģ ç´ł
åıį 对
çİĩ åħĪ
è´§ çī©
æĹ¥ ç͵
ä½ľ å®¶
æĶ¹ è¿Ľ
æĪIJ åĪĨ
åĽł èĢĮ
åĩı èĤ¥
æ½ ĺ
å±±ä¸ľ çľģ
åĬ Ŀ
åŁ ĭ
æŃ¦ è£ħ
æ±ĩ æĬ¥
ä¸Ģ个 æľĪ
çĥŃ éŨ
大 éģĵ
æ´» åĭķ
éĥ½ å¾Ī
ç͵ 梯
ç´§ æĢ¥
åĢº åĬ¡
客 æľį
ä¸Ģ éĥ¨
ä½ł æĺ¯
çݰ çĬ¶
æŃ£ç¡® çļĦ
ä¹ĭ å¤Ħ
ç¼ĸ åζ
ä½ł åı¯ä»¥
çŃī åľ°
èİ ī
对 è¯Ŀ
æ·ĺ å®Ŀ
è°ĥ èĬĤ
æİĴ æĶ¾
åºĵ åŃĺ
ç´ ļ
çļĦ ä¼ĺåĬ¿
æĿĥ å¨ģ
以ä¸ĭ ç®Ģç§°
ä¸Ģ 项
èģļ éĽĨ
ä¼łç»Ł çļĦ
æ·· åIJĪ
è¿Ļä¸Ģ çĤ¹
ä¸Ģ çľ¼
æĹł éĻIJ
èİ·å¾Ĺ äºĨ
éĢī æīĭ
åζ åĵģ
åįı ä½ľ
çĭ¬çī¹ çļĦ
ä¸Ģ 级
è¿Ļ个 éĹ®é¢ĺ
æĸ Į
æĺ¯ æĪij们
æķĮ 人
æ¸ħ æ´Ĺ
ä¸Ģ缴 åľ¨
å°ı ç±³
çļĦ è¿ĩç¨ĭ
åľ¨ åĮĹ京
ä¸Ģ æĶ¯
æĹ© ä¸Ĭ
æĸĩ èīº
ç¦ı åĪ©
é£Ł ç͍
æĦŁ åĬ¨
åħ¨ ç¨ĭ
æĶ¯ åĩº
æĸ° 建
å¸ ķ
æĺ¾ çĦ¶
羣 çļĦæĺ¯
æĸ°éĹ» ç½ij
èĥ½ åIJ¦
åįı åĬ©
亲 èĩª
å¾Ī æľī
çϼ å±ķ
æĦı 大
æĦı大 åĪ©
ç͵ ç½ij
æĹ¥ çĽĬ
çĨ ±
èĤĮ èĤ¤
çĶ· æĢ§
ç»Ħ 建
çŃī éĹ®é¢ĺ
æ¶Ī éϤ
æĬ¤ çIJĨ
å¡ij æĸĻ
ä¹Į åħĭ
ä¹Įåħĭ åħ°
åķĨ æłĩ
çIJ ³
æĸ° æīĭ
çļĦ çī¹çĤ¹
åĴ ¬
å½ĵ ä¸ĭ
设计 å¸Ī
èµĶ åģ¿
第 åįģ
æĻºèĥ½ åĮĸ
å¼Ģåıij åĮº
åı¯ä»¥ éĢļè¿ĩ
åħ±äº§ åħļ
åİī 害
çģµ æ´»
æĹ¶ åħī
éĥ¨ ä½į
人 æĸĩ
è¿Ľ æĿ¥
ä¹ĭ æīĢ以
ä¸ī åįģ
çļĦ åѦçĶŁ
éĺ² æĬ¤
åĽ½ 产
æ·±åľ³ å¸Ĥ
éĤ£ å°±æĺ¯
åΰ ä½į
çī¹ æľĹ
çľĹ æĻ®
å®ŀ æĹ¶
åı° çģ£
èĢĮ ä¸į
æĮĩ å®ļ
åĿ Ŀ
èħIJ è´¥
çī¹ å®ļ
å¢ŀ éĢŁ
æłĩ çѾ
æĪ¿ ä»·
æĦ ģ
贯彻 èIJ½å®ŀ
æĢ§ è´¨
çłĶç©¶ çĶŁ
ç¾İ 容
æī¹ è¯Ħ
究 竣
人åĬĽ èµĦæºIJ
éĸĭ å§ĭ
åĽŀ å½Ĵ
èIJ¥ åķĨ
èIJ¥åķĨ çݯå¢ĥ
ä¸ŃåĽ½ 人
çļĦ åŁºæľ¬
è¯Ŀ é¢ĺ
æłĩåĩĨ åĮĸ
西 èĹı
åĭ ¾
çļĦ 设计
ç®Ģåįķ çļĦ
å¤į åζ
æ¸IJ æ¸IJ
以 å¤ĸ
èģĶ åĬ¨
两 次
æĢ§ åĴĮ
æĽ´ 大
çļĦ åIJįåŃĹ
éŁ ¦
ä½ł è¦ģ
å¢ĥ å¤ĸ
æĹ© æľŁ
åĪĿ æŃ¥
è´¦ åı·
害 æĢķ
æĺ¨ æĹ¥
åĪļ æīį
ç¥ŀ ç§ĺ
ç²¾ å¿ĥ
æµģ éĢļ
åħ¨ æĸ¹ä½į
以 å¾Ģ
ä¹Ł å°Ĩ
æĺ¯ ä¸ŃåĽ½
åĽ½å®¶ 级
å°Ĩ åĨĽ
æij Ĭ
æľĢ 为
第ä¸Ģ æĹ¶éĹ´
æ¶Ī æ¯Ĵ
å°Ĩ äºİ
å¨ģ èĥģ
èĭ± æĸĩ
æīĭ ä¸Ń
çIJĥ è¿·
è§Ĥ çľĭ
离 å©ļ
æľ¬ åľŁ
åĪĨ æķ£
æĻ ´
è¦ģ 注æĦı
浪 费
管 æİ§
åĩº åĶ®
æĢ» è£ģ
ä¸Ģ éĺµ
å¨ ĩ
äºĶ 个
å½ĵ åĪĿ
çºł 纷
ä¸ĵ ç͍
å¤ĩ æ¡Ī
åĪĿ æľŁ
å®ĥ æĺ¯
åĮº åĿĹ
åĮºåĿĹ éĵ¾
大 è¿ŀ
è¿Ļ ç±»
åıĺ æĪIJäºĨ
éĤĦ æĺ¯
åįļ 客
çı¾ åľ¨
ä¸Ģ æĸ¹
å®ĮæĪIJ äºĨ
è¿Ļ个 æĹ¶åĢĻ
åħ¨ å¹´
ä¸Ĭ 线
ç½ IJ
ç«ŀ èµĽ
åĩºçīĪ ç¤¾
åĵ¥ åĵ¥
å¯ «
å¾Ĺ 以
èĬ± åĽŃ
äºĨ èµ·æĿ¥
èĦ±è´« æĶ»åĿļ
çļĦ åİŁåĪĻ
讲 解
æ¶Ī åĮĸ
æį٠害
æļĤ æĹ¶
å¾Ĺ çŁ¥
éĢĤ ç͍
éŨ åºĹ
解 读
æĻ® åıĬ
人æ°ij æ³ķéĻ¢
åī¯ ä¸»ä»»
å¿ĥ çģµ
è¯Ĭ æĸŃ
ç¾İ 女
æŁ ¯
å¹´ 以æĿ¥
æ´» è·ĥ
åĢŁ åĬ©
åħ± 建
è¯ī 讼
æĶ¾ æĿ¾
çªĹ åı£
ä¼ģ æ¥Ń
åĬł æĭ¿
åĬłæĭ¿ 大
ä¹° äºĨ
主 æµģ
æĩĤ å¾Ĺ
å°Ĩ åħ¶
éĢı æĺİ
å·¥ä½ľ ä¸Ń
èĤ¡ ä»·
æ¡£ æ¡Ī
没æľī ä»»ä½ķ
åijĬ çŁ¥
å¹´ åĪĿ
æĹ¥ ä¸ĭåįĪ
åİĤ åķĨ
èĬĤ å¥ı
主 导
è£ Ŀ
åħ³éĶ® è¯į
èģĬ 天
åĨĻ ä½ľ
æĶ¹éĿ© å¼ĢæĶ¾
æľī æľĽ
éĢļ æĬ¥
èIJ Į
æĢ» é¢Ŀ
çŁŃ æľŁ
ä¸Ģ çķª
çĶŁæ´» çļĦ
åĮĸ çļĦ
æĺ¥ 天
è¿Ļ åľº
æĸ°å¼Ģ ä¼łå¥ĩ
æĺ¯ è¦ģ
å°ļ æľª
åıĺ æĽ´
ä¸Ģ åij¨
客 è§Ĥ
æĹ¥ èĩ³
é¹ °
çİ ²
å°Ĩ æĿ¥
客 人
åıĺ éĿ©
说 äºĨ
åİŁ çIJĨ
èģĮ åĬ¡
åıĪ æľī
ä¸Ģ åı¥è¯Ŀ
æĦŁ åıĹåΰ
ç¬Ķ èĢħ
ç§» æ°ij
西 åįĹ
ä¹ĥ èĩ³
æŃ£ è§Ħ
åĪĿ ä¸Ń
çĬ ¬
å½ĵ äºĭ
å½ĵäºĭ 人
æĪij们 è¦ģ
åħ¥ åı£
éĤ£ æĹ¶
æľīéĻIJ 责任
å°ij 女
è¿Ļä¹Ī å¤ļ
åĪĨ åħ¬åı¸
å®ĩ å®Ļ
çļĦ éĢīæĭ©
å§IJ å§IJ
åıij èµ·
è» į
æĽ´å¥½ åľ°
éĻĨ ç»Ń
æľ¬ æľįåĭĻ
å« ©
èµ¶ ç´§
èĦĤ èĤª
第äºĮ 天
æĪij ä¼ļ
两 ä½į
æķ ²
åħ¬å®ī æľºåħ³
ç§ijæĬĢ åĪĽæĸ°
尺 寸
è¾IJ å°Ħ
å®Ĺ æķĻ
转 æį¢
åĩº çİ°åľ¨
ä¸Ģ é¢Ĺ
æľŁ éĻIJ
åIJĮåѦ 们
åĮĹ æĸ¹
ä½ł å°±
ä¸Ģ带 ä¸Ģè·¯
èĢģ å©Ĩ
游æĪı çݩ家
çļĦ ç»ĵæŀľ
è¡¥ åģ¿
å¤ĸ è´¸
对 å¾ħ
ç»´ çĶŁç´ł
ç»ıéĶĢ åķĨ
è¿ĺ å°Ĩ
åŃIJ 女
æĽ´ é«ĺ
ä¸į 大
éī´ å®ļ
让 ä»ĸ们
æīĢè°ĵ çļĦ
æŃ» äºĨ
帮 æī¶
åĵ² åѦ
以ä¸Ĭ çļĦ
çļĦ åħ³éĶ®
æĹ© å°±
æĬ¥ ä»·
éģµ å®Ī
æī© å¼ł
æĺ¯ å¾Ī
å¼Ģ éĢļ
æĸ° åĬł
æĸ°åĬł åĿ¡
ç¿» è¯ij
询 éĹ®
é¸ Ń
ä½ĵ åĨħ
两 个人
çĪ ¹
éľ ľ
乡æĿij æĮ¯åħ´
çĿ¡ è§ī
å®ĺ åijĺ
åĪĽ å§ĭ
åĪĽå§ĭ 人
ä¼Ĺ 人
åį³ ä¾¿
çĸ« èĭĹ
ä¼ģä¸ļ å®¶
æ¸ £
ç²¾ åĬĽ
å¤ĸ éĥ¨
èģª æĺİ
è¿Ļ ä¹Ł
å½ķ åıĸ
åĨ² çªģ
åħ¨ 身
åŃ£ èĬĤ
忽 çĦ¶
çļĦ æĢģ度
åĤ¨ å¤ĩ
ä¿Ŀ åħ»
çļĦ æĥ³æ³ķ
ä¸Ĭæµ· å¸Ĥ
æIJº æīĭ
çļĦ ä¿¡æģ¯
åķĨ åľº
çļĦ æĢĿæĥ³
æĿĥ åĬĽ
毫 æĹł
æĢĢ åŃķ
硬 件
åĨħ èĴĻåı¤
æİ¢ 讨
åħ» çĶŁ
çļĦ 表çݰ
空 ä¸Ń
æģIJ æĢĸ
å¾Ī é«ĺ
ç»ıæµİ 社ä¼ļ
ä¸Ĭ æĿ¥
å»¶ ç»Ń
éĩį å¤į
éĺ² èĮĥ
çļĦ å½¢å¼ı
æľĪ åºķ
èĢģ 年人
绿 åĮĸ
å±± åĮº
æĭ¿ åĩº
æĹħ 客
æĽ´ æį¢
åħ¬ 主
èĬĤ 约
åħ¨ åİ¿
åĽŀ æĬ¥
çIJĨ æĢ§
çĸ¯ çĭĤ
æ¶ī å«Į
åī§ æĥħ
åĨ¬ åŃ£
åIJİ ç»Ń
è¿Ļæĺ¯ ä¸Ģ个
æ¼Ķ 讲
ä¸Ģ å±Ĥ
æľīåħ³ éĥ¨éŨ
æĹł å¥Ī
ç§į ç±»
缸åħ³ çļĦ
æĪĸèĢħ æĺ¯
æī¶ æĮģ
å¤ļ æķ°
çļĦ ä½ľåĵģ
ä¸ĭ ä¸ĢæŃ¥
å¸Ī åĤħ
é«ĺéĢŁ åħ¬è·¯
好 åıĭ
ä¼ĺç§Ģ çļĦ
è¿Ľ äºĨ
æģIJ æĢķ
äºĨ åIJ§
大 è§Ħ模
çļĦ ä¸ĸçķĮ
æĢĢ çĸij
å· ·
åħ´ å¥ĭ
æĪ °
æĿij éĩĮ
æľĭåıĭ åľĪ
åĨ¬ 天
ä¸Ńåįİ äººæ°ij
åįı åķĨ
è¯Ħ éĢī
æĹ Ń
å¢ŀåĬł äºĨ
åıĹ ä¼¤
ä¸Ģ èĤ¡
便 æį·
ä¸ ij
é¹ ¤
å¤ĸ è§Ĥ
å·¥ç¨ĭ å¸Ī
åĴĮ åħ¶ä»ĸ
è¿Ļ å°±
ä¸Ńå°ı ä¼ģä¸ļ
西 åĮĹ
åĽ½æľī ä¼ģä¸ļ
èĭ¥ æĺ¯
åı¯ æĥľ
çĶŁ æĹ¥
åĩ ½
ä¹° åįĸ
ç¥Ŀ ç¦ı
人æ°ij 群ä¼Ĺ
åħī æĺİ
åħ¬ å¯ĵ
æĺ¯ è°ģ
æĪij çŁ¥éģĵ
è¯Ń æĸĩ
æķı æĦŁ
ä¸įéĶĻ çļĦ
æĿ¥ 讲
æ³¢ åĬ¨
çļĦ 第ä¸Ģ
åľ° éľĩ
åľ¨ åħ¨åĽ½
骨 干
å®ī ç½®
å®¶ ç͵
ä¸İ æŃ¤
ä¸İæŃ¤ åIJĮæĹ¶
åıĹ çģ¾
çĥŃ çº¿
çļĦ æĬĢæľ¯
æµĭ éĩı
ä¾Ŀ èµĸ
ä¸ŃåĽ½ çļĦ
çī¹ æĢ§
è¾ĥ é«ĺ
è¸ ©
ä¼ļ åľ¨
建 éĢł
导 èĪª
æĥ³ èµ·
åħ¨ ä¸ĸçķĮ
建 æĿIJ
ç¯ Ģ
çļĦ åŁºç¡Ģ
èĩªåĬ¨ åĮĸ
åīį åIJİ
çĿ¡ çľł
æİ¨ è¡Į
æį® äºĨè§£
ä»Ģä¹Ī æĹ¶åĢĻ
ä¸į åĸľæ¬¢
çħ¤ çĤŃ
éĤ£ä¹Ī å¤ļ
å¸Ĥåľº åĮĸ
ä¸į管 æĺ¯
ç«ĭ åľº
éĥ½ 没
课 é¢ĺ
æĪij们 å°Ĩ
è¿ĩ çļĦ
åĨį åĬłä¸Ĭ
çĪ ¾
身 æĿIJ
çĶ· 女
è¿ľ è¿ľ
çĶ· çĶŁ
èĩªèº« çļĦ
è´Ł æĭħ
çϾ ä¸ĩ
西 çıŃ
西çıŃ çīĻ
åĩĢ åĪ©æ¶¦
澳 大
澳大 åĪ©äºļ
ä¸į åİ»
æī¿ åıĹ
楼 çĽĺ
å¢ĥ åĨħ
æ·· åĩĿ
æ··åĩĿ åľŁ
æĢĿæĥ³ æĶ¿æ²»
å¸Ĥ åĮº
æĭĽ æłĩ
åĽ¢ ä½ĵ
è¿Ľ 度
åĨĽ éĺŁ
åıį å¼¹
äºĨä¸Ģ äºĽ
æİ¥ å¾ħ
çļĦ åŃ¦ä¹ł
éħį éĢģ
é£Łåĵģ å®īåħ¨
æĽ¿ 代
æĺ¯ 以
éĢļ ç͍
çłĶç©¶ æīĢ
ç¦ ħ
æī Ķ
éļĶ ç¦»
ä¸ĩ å¹³æĸ¹ç±³
çļĦ è§Ħå®ļ
ç»Ļ æĪij们
æ¿Ģ åħī
ä¼ļ åĩºçݰ
çŁŃ ä¿¡
ç©¿ çĿĢ
æ²Ī éĺ³
æķĻ æĿIJ
éĺ² çĸ«
ä¼ĺ èī¯
约 å®ļ
æĪij çľģ
åħ¬ æ°ij
éģ¸ æĵ
é쏿ĵ ĩ
å·² æĪIJ为
ä¸į å¿ħ
ç¥ĸ åĽ½
å¹¶ æľª
åľŁ 壤
å¾® ç¬ij
äºĭä¸ļ åįķä½į
çļĦ 游æĪı
åħ¬ 示
åIJĪçIJĨ çļĦ
çª Ŀ
æ°Ķ 象
å®¶ ä¸Ń
亮 缸
åį« æĺŁ
è®° è½½
è§Ĩ éĩİ
åľ°åĮº çļĦ
ä½Ĩ ä»ĸ
èĤĮ èĤī
äºı æįŁ
åĬŀ åѦ
ä¸Ģ è¡Į
è¯ŀ çĶŁ
åıijå¸ĥ çļĦ
çļĦ æľįåĬ¡
çļĦ çłĶç©¶
åij¨ æľ«
产ä¸ļ åĽŃ
é«ĺ 温
æĪIJåĬŁ çļĦ
æŃ¥ 骤
åŃĺ åĤ¨
åŃIJ åħ¬åı¸
让 她
ä¸Ń æľī
åĺī 宾
å¦ ®
æĺİ å¹´
äºĨ åIJĹ
äºī è®®
æĪ Ī
ä¸Ģ æľ¬
ç¾İ丽 çļĦ
ä½ł 说
大 人
æĶ» çķ¥
ä¸į æľĥ
å¾ħ éģĩ
ä¸Ģ è¾Ĩ
çīĪæĿĥ æīĢæľī
æ°ij ä¼Ĺ
åĬ٠夫
å±ķ ä¼ļ
大 èĦij
æ¯ı æľĪ
å°ı 麦
æµĻæ±Ł çľģ
çļĦ æīĢæľī
ä¸ĭ æ»ij
èĵĿ èī²
è¦ģ æĥ³
åѦçĶŁ çļĦ
å½ĵ ä½ł
ä½ľ æĪĺ
家 乡
å¤ļ åIJį
é«ĺ äºİ
åĿļ 强
è¿ŀ éĶģ
åIJİ æŀľ
人 äºĭ
ç´ ħ
æ¿Ģ åĬ¨
è¿Ľ æĶ»
ç© Ĩ
ä¸ ĺ
让 èĩªå·±
以 æŃ¤
夫 人
å¼Ģ 设
æ°Ķ è´¨
鸡 èĽĭ
çĦ¡ æ³ķ
åIJĥ äºĨ
åĪĨåĪ« 为
èģĶåIJĪ åĽ½
å½ĵ 代
å¦Ĥæŀľ æĺ¯
è¿ľ ç¨ĭ
åĸ Ĥ
è®° ä½ı
æ¸ħ åįķ
åIJĪä½ľ ä¼Ļä¼´
åİ» åģļ
æķħ éļľ
模 æĭŁ
å¸Ī çĶŁ
åīį æĿ¥
ç͵è§Ĩ åī§
çĥŃ çα
éľ² åĩº
é«ĺ å±Ĥ
ç͵ åύ
纪 å¾ĭ
å¼Ģåıij åķĨ
éķ¿ å®ī
è½½ ä½ĵ
çļĦ å°±æĺ¯
被 人
åıĹ çIJĨ
篮 çIJĥ
èİ İ
交 ç»Ļ
æľªæĿ¥ çļĦ
两 大
åIJķ å¸ĥ
çŃī 人
çļĦ æĹ¥åŃIJ
åIJĪä½ľ 社
æĮij éĢī
åŃĺ æ¬¾
ç³»ç»Ł çļĦ
æĬĬ å®ĥ
没æľī ä»Ģä¹Ī
ä»İ æŃ¤
ä¸Ń åįĪ
çĸ¼ çĹĽ
å·© åĽº
浪 漫
缸åħ³ éĥ¨éŨ
éķ¿ åŁİ
纤 维
ä¸Ĭ éŨ
çĪĨ çĤ¸
èµ· çĤ¹
çļĦ éĢļçŁ¥
èĢĮ æĿ¥
çļĦ èĢģ
æīĭ éĩĮ
è¯Ń éŁ³
è¾Ľ èĭ¦
æ±Łèĭı çľģ
ç͍ äºĨ
身份 è¯ģ
æľī åĬ©
æľīåĬ© äºİ
çī© èģĶç½ij
åĩº éŨ
å¼Ł åŃIJ
æĥ ¹
è¿Ļä»¶ äºĭ
æĪij们 åı¯ä»¥
çļĦ çĶŁåij½
æľīä¸Ģ ç§į
åºĹ éĵº
åıĮ æīĭ
çļĦ æ¶Īæģ¯
èĢIJ å¿ĥ
å°´ å°¬
éĤ£ 天
é¦ĸ æī¹
æĺ¯ä¸Ģ å®¶
人 æ°Ķ
åıį æŃ£
æĪij åĴĮ
å®ł çī©
ä¸į 对
寻 æ±Ĥ
缸 ä¼¼
åľ¨ ç¾İåĽ½
åı« åģļ
åĹ İ
ç«ĭ è¶³
ç͍ éĢĶ
åħ Ĩ
大 æ°Ķ
åIJij ä¸Ĭ
ä»ĸ å°±
é¡¹çĽ® 建设
èĭ¥ å¹²
æĺ¯ æľī
æ¿Ģ æĥħ
çļĦ æĦıä¹ī
æĺ Ń
严éĩį çļĦ
å¯Ĩ éĽĨ
èĪŀ è¹Ī
èᣠèİ·
èİ· æĤī
æ±Ł åįĹ
åģĩ å¦Ĥ
æĪ· å¤ĸ
线 索
ç§ģ 人
转åŀĭ åįĩ级
çļĦ ä»·å̼
åįķ çĭ¬
èĢģ çϾå§ĵ
å°į æĸ¼
åĽ½éĻħ åĮĸ
ä¼° å̼
æľįåĬ¡ ä¸ļ
èĩ Ń
æİī äºĨ
è§£åĨ³ äºĨ
ä¹Ł ä¸įèĥ½
åħ ¹
æĸ¯ çī¹
æķħ æĦı
è¿ĩ 度
èĬĤ æĹ¥
çϽ çĻľ
çϽçĻľ é£İ
ç»§ æī¿
äºĨ ä¸įå°ij
äºĮ 人
è§ģ éĿ¢
æĥ³ æĥ³
å¤į åIJĪ
康 å¤į
åİ¿ åŁİ
åľ¨ åĽ½åĨħ
åľº åľ°
é϶ çĵ·
è¿Ļ 项
çľ¼ ä¸Ń
çł ¸
æĦŁè§ī åΰ
æŀľ çĦ¶
æĶ¾ åħ¥
约 æĿŁ
æİĴ æŁ¥
车 主
çļĦ æĦıæĢĿ
æĸ° åŁİ
æĥ³ çĿĢ
éģ Ĥ
èĮ¶ åı¶
ä¹° æĪ¿
åĨľ æĪ·
é«ĺ æīĭ
çİī ç±³
æĸ°åĨł èĤºçĤİ
çħ§ æĺİ
æĮĩ åįĹ
è¸ ¢
æķij æı´
æĻ¯ çĤ¹
ç¨İ æĶ¶
çļĦ æīĭ
æŃ£ 好
è¦ģ æĬĬ
éļı æĦı
åħ¶å®ŀ æĺ¯
ç»Ļ èĩªå·±
è°Ī åΤ
æ¯ı天 éĥ½
æĢģ åĬ¿
é¢Ħ 约
åİĨåı² ä¸Ĭ
å®Ŀ è´Ŀ
åīį è¿Ľ
ä¹Łå°±æĺ¯ 说
çļĦ æĦıè§ģ
åı£ 罩
åİĺ ç±³
èĬ± è´¹
ä½ĵèĤ² æĬķæ³¨
åħ¬ä¼Ĺ åı·
èijĹåIJį çļĦ
å¼Ģ æĪ·
æĭį åįĸ
å²ģ æľĪ
åĨħ æ¶µ
å®Įæķ´ çļĦ
é«ĺ åİĭ
åħ¬åĬ¡ åijĺ
使ç͍ çļĦ
çĶŁäº§ 线
妹 妹
走 访
æĺ¯ åı¯ä»¥
åľ¨ å®¶
æļ´ åĬĽ
æ³° åĽ½
è´¨ çĸij
ä¸į éģİ
天çĦ¶ æ°Ķ
缺 çĤ¹
å°ı åŀĭ
ä¸įä»ħ æĺ¯
é»ij æļĹ
æ¢ ¨
æĸĩ æĹħ
è¦ģ æľī
ä¸Ń å±±
çļĦ æķ°æį®
å¾Ĺ å¾Ī
以 便
对 ä»ĸ
åĬł 以
çϼ çı¾
设 å®ļ
èĤļ åŃIJ
éĿ ĸ
å¥ī çĮ®
ä¸į åıĺ
åı£ ç¢ij
åľ¨ åĵªéĩĮ
ä½ IJ
è¿Ļ 两个
çļĦ æĸ¹åIJij
æŀ «
äºĮ 次
çīĩ åĮº
éł IJ
ç£ Ĭ
æĭ¿ çĿĢ
å·²ç»ı æĪIJ为
ä¹ĭ ä¸Ĭ
å®Ĺ æĹ¨
奶 奶
é«ĺæĸ° åĮº
社 æľĥ
è·Ł 踪
æľįåĬ¡ ä¸Ńå¿ĥ
æī ¯
æīĭ æĮĩ
礼 çī©
宿 èĪį
ç͍ å¿ĥ
æıIJé«ĺ äºĨ
亮 çĤ¹
ä¸į æĦ¿æĦı
æĴŃ æĶ¾
å¤ļå°ij éĴ±
没 ä»Ģä¹Ī
æķ° åįģ
æĢ» çĽij
çļĦ åŁİå¸Ĥ
æī¾ åΰäºĨ
åĨħ åľ°
åΰ çİ°åľ¨
æĪĺæĸĹ åĬĽ
åİŁ å§ĭ
åĥ §
åĢĴ æĺ¯
æľĢ åħ·
è´«åĽ° æĪ·
éĢģ åΰ
级 åĪ«
åĩº èµĦ
æĪª æŃ¢
ç§į åŃIJ
èĥ½ ä¸įèĥ½
幸 è¿IJ
èĸ ĩ
项 éĵ¾
æĮĤ çīĮ
ä¸Ģ 樣
ä¹ĺ 客
èIJ½ åIJİ
ä½Ĩ æĪij
æĹ© åľ¨
åĬ¨ 漫
å¹³ çŃī
对 ä½ł
ä¸į æĢķ
å¤ĸ çķĮ
å¤ļå¹´ æĿ¥
é¦ĸ 个
æ²³ åįĹçľģ
æĪĸ åħ¶ä»ĸ
éķľ å¤´
åįĹ æĺĮ
ä¸Ģ éĿ¢
éĢłæĪIJ çļĦ
å´ Ķ
çŃ Ĵ
æķĻèĤ² éĥ¨
åľ° åŁŁ
æĺĨ æĺİ
å·´ é»İ
æīĭ 游
ä¸Ģ æĹ¶
çł į
顶 级
åħ± 计
åİŁ æ²¹
è¾ī çħĮ
说 æĺ¯
æĸ°åįİ ç¤¾
ç»ıåİĨ äºĨ
ä¸į æŃ¢
è¦ģ ä¹Ī
èĢħ çļĦ
æĢ» æĬķèµĦ
è¡Į é©¶
ä¸Ĭ å¸Ŀ
年 纪
çIJ ¼
ä¼ł 说
ç²¾ èĭ±
æĸ¹ éĴĪ
æ±Ł æ¹ĸ
æĪIJ çĤº
æĢ» éĩı
æĬķ æĶ¾
åĬ¨ çĶ»
èĹ ¤
ç͵ æºIJ
éĴ Ļ
åIJĮ è¡Į
æĻ®éĢļ çļĦ
åĽ¾ä¹¦ é¦Ĩ
è¯Ī éªĹ
æħĪ åĸĦ
è¿Ļ 份
主æĮģ 人
å°± è¿Ļæł·
èĢĮ æĪIJ
èĩªè¡Į 车
ä¸ŃåĽ½ çī¹èī²
èĤ¿ çĺ¤
åIJ ¾
å¼Ł å¼Ł
åıĹ çĽĬ
éĢīæĭ© äºĨ
æĺİæĺ¾ çļĦ
æĬ¥ èĢĥ
ç¬ij éģĵ
éĽĸ çĦ¶
温 å·ŀ
éĿŀ æ´²
ç§į ç§į
åıĤåĬł äºĨ
è´§ è¿IJ
éļı 便
å°± 没æľī
ç¸ £
央 è§Ĩ
ç©¿ è¶Ĭ
çļĦ çݰ象
åĩł 次
çļĦ é£İéĻ©
æŃĮ æĽ²
æľ¬ å±Ĭ
å¹´ åĨħ
ä¸į è¶ħè¿ĩ
è¿ĩ å¤ļ
å¿ħé¡» è¦ģ
ç»ĵ 论
åĢŁ éī´
ç¥ŀ å¥ĩ
æľŁ æľĽ
ä¸ĵ 享
éĿŀ常 éĩįè¦ģ
æĦıè¯Ĩ åΰ
åIJĪ å¹¶
æĬĬ èĩªå·±
å¥Ĺ è£ħ
éŃĶ æ³ķ
å¤ı åŃ£
ä¸į åĥı
å¢ĥ çķĮ
æĥĬ åĸľ
æľīä¸Ģ 天
çĦ¦ çĤ¹
æĪij 认为
åħ° å·ŀ
ç͵ æ°Ķ
èģĶç³» æĪij们
ç§ij æĻ®
她 说
çļĦ æĸĩ竳
å¥ĩ æĢª
åıĭ 好
饮 æĸĻ
çļĦ æĶ¯æĮģ
çŃĶ åºĶ
éĩį éĩı
çij ¶
åĩı è½»
ç§ijåѦ å®¶
巴 西
éĩijèŀį æľºæŀĦ
åħļ å§Ķ书记
貸 款
ç²¾ èĩ´
ä»İ æľª
åį° åĪ·
åĽŀ 顾
é¦ĸ éĥ½
åıij èĤ²
éĹ® éģĵ
è¾¾ åΰäºĨ
å¿į ä¸įä½ı
æīį æľī
æįIJ èµł
ä½Ľ æķĻ
ä¸į æ¸ħ
éĺŁ éķ¿
缸 åıį
æĬ¥ èѦ
大 åħ¨
欧 缣
帮 å¿Ļ
çļĦ æĻĤåĢĻ
缮 å½ķ
足 以
èī° éļ¾
ä»ĸ ä¹Ł
å·¥ ä½ľèĢħ
头 èĦij
缺 éĻ·
æĪIJç«ĭ äºĨ
å°± å¼Ģå§ĭ
认 åIJĮ
é»Ħ èī²
çĹħ æĥħ
覺 å¾Ĺ
è¿Ļ 两
ä¿¡ ä»°
åľĭ å®¶
ä¸įä»ħä»ħ æĺ¯
çĭ¬ å®¶
èά çļĦ
æĿIJ è´¨
æµ· ä¸Ĭ
çĤº äºĨ
æľºåĬ¨ 车
缸å½ĵ äºİ
å¤ļåħĥ åĮĸ
æĽ´ 大çļĦ
èĽ ®
åģĩ æľŁ
å¼ı çļĦ
交éĢļ è¿IJè¾ĵ
çľģ å§Ķ
ä¸į ç®Ĺ
æĶ¾ ä¸ĭ
éĹ ¯
人 åľ¨
港 åı£
æĹ¨ åľ¨
åij½ 令
æŁIJ 个
平 稳
åıª 好
人 人
äº ŀ
äºĮ ç»´
äºĮç»´ çłģ
æŀģ 为
åĪ« å¢ħ
åħ¶ ä½Ļ
大 äºĭ
主管 éĥ¨éŨ
æĹł éĶ¡
éĹ µ
éģŃ åΰ
说 è¿ĩ
为 ä½ł
è§£ çŃĶ
éªĮ æĶ¶
çļĦ ç»ıéªĮ
åĮ¹ éħį
çģ« ç®Ń
豪 åįİ
æŁIJ æŁIJ
çļĦ æĹ¶ä»£
书 éĿ¢
æģĴ 大
å»¶ éķ¿
ä¸Ģ åIJĮ
æľª èĥ½
交 æį¢
çĶ¢ åĵģ
çŃī åΰ
åĪĨ 离
æīĵ ç͵è¯Ŀ
å¹² çĩ¥
è¾ĥ å¤ļ
å¤ļå¹´ çļĦ
èĥĮæĻ¯ ä¸ĭ
为 ä¾ĭ
æijĺ è¦ģ
å´Ľ èµ·
æŃ¤ åĪ»
æľī æľºä¼ļ
æĿ¡ 款
é¢Ĩ导 å°ıç»Ħ
çļĦ 身ä½ĵ
åįķ ä¸Ģ
央 è¡Į
ä¸įæĸŃ æıIJé«ĺ
ä»·å̼ è§Ĥ
èĬ ½
èIJ į
æ³ķå¾ĭ æ³ķè§Ħ
ä¸į éĶĪ
ä¸įéĶĪ éĴ¢
åĩº äºİ
èĻļ æĭŁ
æį® æĤī
çĥ¦ æģ¼
åħ¨ æĸ°çļĦ
æī« æıı
çĻ» éĻĨ
èīºæľ¯ å®¶
çļĦ é£Łçī©
çļĦ åŃĺåľ¨
客 åİħ
æĪij们 å°±
æŁ¥çľĭ æĽ´å¤ļ
è¯Ħ 审
å¸Ĥ åł´
è¬ Ľ
巨 头
ä¸ŃåĽ½ ç»ıæµİ
äºĨ èĩªå·±çļĦ
åĨ³ è®®
çĽijçĿ£ 管çIJĨ
æĬķ 票
åĨį 度
è¡Į çĤº
注 åħ¥
ä½ľä¸º ä¸Ģ个
æ¯ı个人 éĥ½
åįķ åħĥ
è¦ģ çŁ¥éģĵ
被 称为
ä¹ĭ éĻħ
è§£ éϤ
ä¸ ¸
æº «
ä¸ī æĺŁ
é²ľ æĺİ
ä¹Ł éĥ½
æĹ¶ æľº
åĩº æīĭ
æĥħ å½¢
åķĨ è´¸
éĢī 举
对 èĩªå·±
çĶŁ åĬ¨
åħĭ æľį
个 ä½ĵ
èĭ ij
ç¨ ±
大 åݦ
æĺ¯ 对
åĪ© æģ¯
è¿IJåĬ¨ åijĺ
åĮĸ è§£
åīį æ²¿
æĦŁ æģ©
æĢ» ä¹ĭ
é«ĺæĸ° æĬĢæľ¯
åĿĩ 为
åħ¨ åĮº
æ°Ķ æ°Ľ
åı¯ä»¥è¯´ æĺ¯
ä½ı 宿
åħļåijĺ å¹²éĥ¨
åĹ ¯
è·µ è¡Į
çļĦ ä¸ĵä¸ļ
èĢĥ éªĮ
èķ ¾
åħ¬ åŃIJ
çļĦ çĬ¶æĢģ
æ½® æµģ
ä¿¡ æīĺ
è´ ¼
åIJĦ æĸ¹
æķij åĬ©
éĿŀ常 çļĦ
æ¡¥ æ¢ģ
åħ¬ æĸ¤
ä¼¼ çļĦ
çľĭ 好
å±Ģ éĥ¨
å®ī éĿĻ
éħį ä»¶
常 è§Ħ
å¼Ģ 车
第äºĮ 次
ä¸Ĭ 级
åıĤ èµĽ
å®¶ å±ŀ
强 åĬ¿
åľ¨ ä»ĸ
åIJij åīį
ä¹ĭ åľ°
éĥ ¡
è¡Į ç¨ĭ
èѦ åijĬ
è§Ħå®ļ çļĦ
åķĨ åŁİ
äºĶ 大
æķĻ å®¤
åįģ è¶³
æīĢ以 åľ¨
å°Ĩ ç»§ç»Ń
çŃī æĸ¹å¼ı
å®¶ ä¼ģä¸ļ
交 ä»ĺ
çĤ¹ è¯Ħ
ç»ĵ ç®Ĺ
ä¹Ł åı¯
å¤ĸ æ±ĩ
è¿Ļç§į æĥħåĨµ
æİĪ äºĪ
å¸ĥ ç½®
æĪIJç«ĭ äºİ
é¢Ħ èѦ
管çIJĨ 人åijĺ
å©ļ 礼
ç»ĵæĿŁ åIJİ
åħ¥ éĢī
æĹł æ¯Ķ
åĴĮ åıijå±ķ
çϽ éħĴ
çİ© åħ·
ä¸ĩ ç¾İåħĥ
çļĦ æĪIJ绩
æĭį çħ§
èĢĥèĻij åΰ
ä¼ģä¸ļ åıijå±ķ
äºĨ 个
çĶŁ æ°Ķ
çļĦ 女人
äºĶ åįģ
çĪ· çĪ·
纽 约
éĥ½ 被
ä¸Ĭ 课
çĽ ¡
ä¼łç»Ł æĸĩåĮĸ
æ½ľ åľ¨
åıij å°Ħ
ä¸Ģ 身
éĺ² å®Ī
åĪ ®
é¢ĺ 缮
åľ¨ åĨħçļĦ
ç¾İ 好çļĦ
è¿ĻéĩĮ çļĦ
ä¸Ģ ä¸Ŀ
人 åĿĩ
åĢ¡ 导
身 åIJİ
æī© å±ķ
大 éŨ
就 被
该 é¡¹çĽ®
æŀ¶ æŀĦ
ä¸Ģ åı£
ä¿¡æģ¯ æĬĢæľ¯
å¼Ģ ä¸ļ
æĶ¶ åıĸ
ç½ij 页
æĶ¯ æı´
å°ģ éĹŃ
å¡ij éĢł
大 èĥĨ
å¿«éĢŁ åıijå±ķ
çľĭ ä¼¼
æ¸ Ŀ
è¿Ļæł· ä¸Ģ个
模 åĿĹ
注æĦı åΰ
çł´ è§£
èĩª ä»İ
åijµ åijµ
ä¹ĭ å¾Į
ä¹ĭ æĹħ
è·Ł æĪij
æ³ķ 人
æİĴè¡Į æ¦ľ
åĿļ å®Ī
好 å¤Ħ
çŁ³ 头
å¹¶ å°Ĩ
èĪ ±
æŃ ĩ
两 岸
å¤ļ ä¹ħ
象 å¾ģ
个æĢ§ åĮĸ
çļĦ è§Ĵ度
å¸ Ĩ
ç¦ı å·ŀ
æŁ¥ å¤Ħ
两 åĽ½
åIJ¸å¼ķ äºĨ
é¦ĸ å¸Ń
大 åĵ¥
é¤ Ĭ
涨 å¹ħ
éĢī ç͍
許 å¤ļ
èIJ½ æĪ·
åĵĪ å°Ķ
åĵĪå°Ķ 滨
åģļ ä»Ģä¹Ī
以 åħį
é¾ į
æĹł éľĢ
åΰåºķ æĺ¯
æĢ ¡
åijĬè¯ī ä½ł
éĺ² æ°´
è¿Ļ æĹ¶åĢĻ
欢 ä¹IJ
转 åIJij
è¿Ļ个 åľ°åĽ¾
åħ¥ é©»
èįī åİŁ
æĹ¶ä»£ çļĦ
åıĺ åĬ¨
åĬłå¼º 对
åģ¶ å°Ķ
å®Ī æĬ¤
æ°Ķ 温
人 éĹ´
æľĿ é²ľ
ç»ı è´¹
åĽŃ æŀĹ
å·¥ åľ°
è§Ħ æł¼
åĩł åįģ
è¯ķ åĽ¾
å¦ ĥ
éĤ£ æĹ¶åĢĻ
å¼ĺ æī¬
ä¸ļ çķĮ
çļĦ éĢŁåº¦
ä¼ļ ä¸įä¼ļ
èIJ¥ æĶ¶
å°ıå¾® ä¼ģä¸ļ
çľĭ è¿ĩ
æĬĬ ä»ĸ
éģµ å¾ª
è¿Ļ è¾¹
没æľī 人
å£ ¶
æ¹ĸ åįĹçľģ
æŀģ åħ¶
çļĦ人 çĶŁ
ä»ĸ è¿ĺ
转åĮĸ 为
èµ° è¿ĩ
æĬ± çĿĢ
çīĽ å¥¶
ä¸ĩ 亩
å¿ĥ æĢģ
æĹ¥å¸¸ çĶŁæ´»
ä½ĵ æ£Ģ
æĻ ĥ
çŃī é¢ĨåŁŁ
æĩī 該
åı¯ä»¥ çľĭåΰ
æī¾ ä¸įåΰ
èĢģ å¹´
æĬĬ æĪij
积 åĪĨ
梳 çIJĨ
ç» ³
çļĦ æĶ¿æ²»
å¸Ŀ åĽ½
éĻª ä¼´
æ´Ľ éĺ³
åħ¬ æŃ£
å¼Ģ åı£
çī¹èī² çļĦ
åĽ° å¢ĥ
ä¸Ĭ æľī
ç«ĭ ä½ĵ
æīĵ å·¥
åķ¤ éħĴ
åľ¨ éĤ£éĩĮ
éĤ£ è¾¹
个 åĪ«
ä¸Ģå®ļ æĺ¯
çļĦéĩįè¦ģ æĢ§
主 å¼ł
åĴĮ æľįåĬ¡
ä¸Ĭ ç½ij
è¡¥ åĬ©
åıª éľĢ
å¼ ¦
éģ ®
åĬĽ äºī
度 è¿ĩ
èij ¬
é¡¿ æĹ¶
éĦ ī
纺 ç»ĩ
åľ° åĿĹ
ä¿¡ç͍ åį¡
ç½ļ 款
åijĬè¯ī æĪij
éĽ Ļ
书 çĶ»
è¨Ń è¨Ī
æĢ» ä¼ļ
åΤ åĨ³
ä¿¡ èªī
个 èĤ¡
平 常
æĢİ éº¼
ä½ĵ çİ°åľ¨
é»Ħ æ²³
åĽĽå·Ŀ çľģ
羣 缸
åIJĦ项 å·¥ä½ľ
åĬ¨ åijĺ
å³° ä¼ļ
ä¸Ģ æľŁ
æľī ä¸Ģå®ļçļĦ
é«ĺ度 éĩįè§Ĩ
ç¹ģ èį£
åıijçݰ äºĨ
ç½ij 红
æīĭ æ³ķ
å®¶ åĽŃ
仪 åύ
è¾ĥ ä½İ
çļĦ å®īåħ¨
æ¡ IJ
ä»ĺ 款
æĬij åζ
åįĵ è¶Ĭ
æŃ£ éĿ¢
åĵ ij
强 åζ
ä»Ĭ天 çļĦ
æĪĺ èĥľ
楼 å¸Ĥ
æĭ¿ ä¸ĭ
é¢ľ å̼
举 éĥ¨
çłĶ åζ
çļĦ æĪĺçķ¥
åľ¨ ä¸Ģ个
ä¸ī 人
å®Į äºĨ
æĸ° æĬĢæľ¯
ç»ıæµİ æķĪçĽĬ
å¯Į æľī
æ¾³ æ´²
åĬ© çIJĨ
é¢Ĩ åıĸ
è° Ń
çĩĥ çĥ§
ç´ł åħ»
éĤĦ æľī
è¿Ľ èĢĮ
ä»Ģä¹Ī æĺ¯
çłĶç©¶ ä¸Ńå¿ĥ
éĢĤ ç͍äºİ
æİ¥ æĶ¶
失 æľĽ
äºĮ 级
éĹ´ çļĦ
åİŁ æłĩé¢ĺ
èªį çĤº
æį ¡
对 çĿĢ
对 éĿ¢
ä¸Ń åİŁ
éĵ ĥ
çĶŁäº§ çļĦ
åıijå¸ĥ ä¼ļ
士 åħµ
è¿Ļ åı¥è¯Ŀ
缴 纳
ä¸Ģ个 个
åѸ çĶŁ
çĸij éĹ®
交 èѦ
示èĮĥ åĮº
天 使
åľ¨ ä¸Ĭæµ·
åIJĮ æĻĤ
è½» æĺĵ
å͝ä¸Ģ çļĦ
çĥŃ éĹ¹
ä¹IJ è§Ĥ
çļĦ 身份
åĸĦ äºİ
大 åİħ
èĤ¯å®ļ æĺ¯
éĺ² çģ«
å¤ĸ åĩº
æį® 说
é¡¹çĽ® çļĦ
ä¸Ģ åı°
èĻļ åģĩ
ä¸Ģ ç¬Ķ
ç«ĭ æ³ķ
严 èĤĥ
æī¿ åĬŀ
åįģ åĩł
çļĦ 空éĹ´
æľ¬ ç½ijç«Ļ
åģļ å¾Ĺ
ä¿Ŀ 温
æľĪ åĪĿ
åľ¨ ç½ijä¸Ĭ
åIJĦ æĸ¹éĿ¢
ä¸ī 天
交æĺĵ æīĢ
è§£ æŀIJ
åħļ ä¸Ń央
è¿Ľ åĩºåı£
åĴĮ 社ä¼ļ
次 æķ°
ä¹ĭ å®¶
维 度
æ´¾åĩº æīĢ
产çĶŁ äºĨ
带 æľī
å¾Ī 强
æľīäºĽ 人
å¹´ åIJİ
äºĨ 许å¤ļ
å¯Ĩ 度
åѦ æľŁ
çıł æµ·
æľĢå¤ļ çļĦ
è¾¹ ç¼ĺ
容 éĩı
第äºĮ 个
ä¸Ģ缴 æĺ¯
ä¸į ç¦ģ
æŃ ²
ä»ĭç»į äºĨ
ä¼ĺ éĽħ
æ¯Ķ è¼ĥ
èģĮ ä½į
温 æŁĶ
æľī éĴ±
æľĢ é«ĺçļĦ
åįļè§Ī ä¼ļ
ä¸į æĪIJ
éĶĻ äºĨ
è¯ģ çĽij
è¯ģçĽij ä¼ļ
æĪIJ 人
åĿĩ åĮĢ
æľī åĪ©
è¶Ĭ åįĹ
æīĵ äºĨ
好 åIJĥ
ç³» çµ±
è·Ł éļı
çļĦ åľ°ä½į
æŃ£ å¦Ĥ
ç¨į å¾®
åį° åıij
åĪĽ ç«ĭ
é£İ åħī
å°Ĩ æĪIJ为
ä¸į é«ĺ
é¢ij ç¹ģ
设 æľī
ä¼ ŀ
æĭĨ éϤ
å½± åĥı
æ¸Ĺ éĢı
å¹´ å¼Ģå§ĭ
ç½ij æĺĵ
è¦ģ åģļ
ç͵åĬ¨ 车
羣 å¿ĥ
æµ· åĨĽ
ä¼ł æĿ¥
å·® åĪ«
è°¨ æħİ
çĥŁ åı°
åįĥ å¹´
è¯ģ å®ŀ
çIJ ª
çļĦ åħ·ä½ĵ
åΰ å¤Ħ
ä¸į å®ľ
èľ Ģ
èĥ½åĬĽ åĴĮ
çīº çī²
çļĦ éĴ±
大 éĺŁ
é¦ĸ è¦ģ
ä¸į æĦ¿
çİ« çij°
人æ°ij ç½ij
è¿ĺæĺ¯ è¦ģ
åĽĽ å¹´
æį٠伤
çļĦ åģļæ³ķ
éĿ Ī
è¡Ķ æİ¥
åIJĪ æĪIJ
没 人
éŨ æ§Ľ
ä¿¡ è´·
çļĦ 缸åħ³
举 é£İ
社 ä¿Ŀ
ä¸ĭ 游
åĿĹ éĴ±
è¿ĩ åIJİ
çļĦ åºĶç͍
é¥ ¶
é¢ģ åıij
ä¸Ģ å¤Ħ
åįİ å¤ı
为 ä¼ģä¸ļ
åıª ä¼ļ
侵 害
çļĦ åĬŁèĥ½
åѸ ç¿Ĵ
ä¸Ńåįİ æ°ijæĹı
åıijå¸ĥ äºĨ
è¿İ æİ¥
æĪij èĩªå·±
è¿ĺ éľĢè¦ģ
太éĺ³ èĥ½
åİ» ä¸ĸ
æĺ¯ ä½ł
åIJĪ åĬĽ
ç»ĺ çĶ»
åı° åĮĹ
çĿ£ ä¿ĥ
åĮĹ éĥ¨
æľī å¤ļå°ij
å¾Ī éĩįè¦ģ
åĪĴ åĪĨ
åı· 线
æĶ¾ 大
ä¼ļ 被
èİ· å¥ĸ
ä¹ĭ åĨħ
失 åİ»äºĨ
çݩ家 们
éĩĩ éĽĨ
å£ ¹
å®¶ ä¼Ļ
çϽ 天
åĽłä¸º ä»ĸ
社ä¼ļ æ²»çIJĨ
å¼Ģ åĪĽ
ç͵ ç¼Ĩ
æĸ° ä¸Ģ代
å¹¶ è´Ń
å°± å·²ç»ı
çļĦ 社ä¼ļ
éϤ éĿŀ
åı¯ä»¥ ç͍
å© ī
æ¯Ķè¾ĥ 好
å®ŀ ä¸ļ
åĪĽ åĬŀ
æıIJ èµ·
é» ĥ
ä½ı åľ¨
å¸Ĥ æĶ¿
éĿ¢ä¸´ çļĦ
èĥ½ åľ¨
çŁŃ çŁŃ
羣 人
æĺİ æĺİ
èµĦ åĬ©
çļĦ ä¸įåIJĮ
å°ı æľĭåıĭ
é¢ĺ æĿIJ
ç¾İ åij³
æĺŁ åº§
ä¸į ä¸Ģæł·çļĦ
çľĭ ä¸Ĭåİ»
ä¸Ģ æł¹
广 å·ŀå¸Ĥ
åıijçĶŁ çļĦ
é«ĺ ç§ijæĬĢ
ä¸Ģ è¾ĪåŃIJ
交 åıī
ä½ĵç³» 建设
åĽłä¸º æĪij
çıį æĥľ
ä¸Ĭ åѦ
æĪĺ æľ¯
æŃ¤ ç±»
交 å¾Ģ
æĮī æij©
人们 çļĦ
åħ¶ 實
åİŁ æĿIJæĸĻ
渴 æľĽ
缸 å¤Ħ
å¾® å¾®
æ® ·
ä¹ĺ åĿIJ
å¼Ģå±ķ äºĨ
é«ĺ åĵģè´¨
æĹłäºº æľº
ä¸įæĺ¯ å¾Ī
çļĦ æĬķèµĦ
èĬĤ çľģ
èĩ ī
ç²¾ éĢī
çļĦ æłĩåĩĨ
åįĹ éĥ¨
认è¯Ĩ åΰ
å¹³ éĿĻ
èĹ ¥
æī« é»ij
æī«é»ij éϤ
æī«é»ijéϤ æģ¶
éĢĻ ç¨®
建çŃij éĿ¢ç§¯
ç¡® ç«ĭ
管çIJĨ åĬŀæ³ķ
æĦı å¿Ĺ
ä¸ ¨
让 åŃ©åŃIJ
æķij çģ¾
å½ĵ ä»Ĭ
çģ« çģ¾
åIJĦ éĥ¨éŨ
ä¾µ çĬ¯
æ¯ı åij¨
æı ½
ä¸Ģ次 æĢ§
åħ¶ä»ĸ 人
éĶĻ è¿ĩ
ä¸İ åħ¶
åĭĩ æ°Ķ
çĩĥ æ°Ķ
é¦ĸ å±Ĭ
æľį 饰
ç² ¥
å®Į æ¯ķ
å°± æĬĬ
åĬŀäºĭ å¤Ħ
ä¸Ģä¼ļ åĦ¿
离 ä¸įå¼Ģ
å¦Ĥæŀľ æĤ¨
ä»ĵ åºĵ
导 å¸Ī
åIJĪéĢĤ çļĦ
毫 米
å®īåħ¨ æĢ§
ä¾Ŀ çħ§
产ä¸ļ åĮĸ
ä½ł çľĭ
羣çļĦ å¾Ī
åѤ çĭ¬
éĺ² å¾¡
å¾Ī ç®Ģåįķ
é£İ æ°´
ä½Ĩ ä¹Ł
æİ¨ åĩºäºĨ
æ°ijèIJ¥ ä¼ģä¸ļ
çłģ 头
å¤įæĿĤ çļĦ
ç»ĦæĪIJ éĥ¨åĪĨ
åħħ满 äºĨ
è¿ij åĩłå¹´
çľģ æĶ¿åºľ
æľī å¿ħè¦ģ
éĻ ³
ä¹ĭ ç±»
ä¹ĭç±» çļĦ
æĢ§ ä»·
æĢ§ä»· æ¯Ķ
åķĨ åºĹ
å¸Ĥ å̼
人æīį åŁ¹åħ»
æ·± åıĹ
管çIJĨ å±Ģ
æģIJ æĥ§
ä»ħ æľī
æĬµ è¾¾
æµ· åħ³
èµĭ äºĪ
äºĭ åĦ¿
ä»· éĴ±
æīĭ ä¸Ĭ
èĩª å¾ĭ
åħ³ çα
享 æľī
éģĹ æĨ¾
å¾Īå¿« å°±
æĽ´ å¿«
æłĩ è¯Ĩ
åºĨ ç¥Ŀ
ä¹Ł 好
ä¸į æĺĵ
æĪij å¾Ī
æĶ¹éĿ© åıijå±ķ
å¤ĸ åľ°
æĬµ æĬ¼
è¯Ĺ 人
åİķ æīĢ
æĸ° åªĴä½ĵ
èĸ Ľ
è°Ī è¯Ŀ
ä¸Ģå®ļ ç¨ĭ度
èµ° åľ¨
æľĢ 强
åĬŁ çİĩ
åħ± è¯Ĩ
大 桥
ä¸ĭ æĸ¹
å¤ĸ èµĦ
ç¢ ±
å·¡ è§Ĩ
æ¹ĸåĮĹ çľģ
个 çϾåĪĨ
个çϾåĪĨ çĤ¹
çļĦ 责任
çļĦ åĵģçīĮ
åĬ© æİ¨
åĪĽéĢł äºĨ
ä»» èģĮ
å¿« æį·
æĿij åºĦ
åİ» çľĭ
æīį èĥ½å¤Ł
å± ¤
æĪij å®¶
æĺ¯ä¸Ģ 款
ç¾ ħ
åĨ° éĽª
æŀģ 大
çģ¯ åħī
éĨ ĭ
ä¸İ åħ¶ä»ĸ
æıIJåĩº çļĦ
éĿł è¿ij
è°ĥ åĬ¨
å°½ åı¯èĥ½
åıij åĬĽ
ç»Ļ 她
éĢĤ éĩı
è·¨ åĽ½
åħĪ è¡Į
æĸ° æĿIJæĸĻ
ä½ľ äºĨ
满 äºĨ
ä¸į 满
çļĦçľ¼ çĿĽ
çľĭ å¾Ĺ
è¿Ļ ä¸Ģ次
é½IJ åħ¨
çļĦä¸Ģ éĥ¨åĪĨ
ä¸ Ļ
æ¸ħ æĸ°
說 æĺİ
身边 çļĦ
æīĢæľī 人
å½° æĺ¾
è± ¹
åį ¿
è¿IJ 转
æĮĩ å¼ķ
å¸Ĥ åħ¬å®īå±Ģ
åıĤ å±ķ
ä¹ĭ æĹ¶
éĩijèŀį æľįåĬ¡
èµĦæľ¬ å¸Ĥåľº
èĥ½ 让
å¿ĺ äºĨ
天 åłĤ
æ¯Ķå¦Ĥ 说
éĬĢ è¡Į
èĽĭ ç³ķ
çĶ ©
æł¸ å®ŀ
æĻ® 京
ä¼ĺ ç¾İ
åı£ èħĶ
漫 çĶ»
çľ¼ éĩĮ
äºĨ ä¸ĭæĿ¥
æĪij们 ä¹Ł
ä¾ į
为 ä¸Ńå¿ĥ
å¥ĩ 迹
éĿĴ çĿIJ
æĪªèĩ³ 缮åīį
åĩº ä¾Ĩ
æĢ» åħ¬åı¸
å¼¥ è¡¥
ç®Ĺ æ³ķ
å·¥ä½ľ 室
æīĢ以 æĪij
æ°´ åĪĨ
æīĢ å±ŀ
ä¸į 说
ä½Ĩæĺ¯ åľ¨
è¦ģ åİ»
åĪĽä¸ļ èĢħ
ä¸į æ¸ħæ¥ļ
åĽĽ åij¨
æĺ¯ ä»İ
çļĦ æł¹æľ¬
çģ ¶
æ¯Ľ æ³½
æ¯Ľæ³½ 举
æµ· åı£
åĽĽ åįģ
ä¹Ł 被
èģ ·
ä¸Ģ æīĭ
绩 æķĪ
çļĦ çĶ·äºº
书 ç±į
ä¸Ģ èĦ¸
大 äºİ
鼶 éĥ¨ä»¶
åħ³ æĢĢ
å¹³ ç±³
æļ´ éľ²
å¾Ĺ å¤ļ
ä¸ī 级
æľ¬ åij¨
两 èĢħ
对 ä¸ŃåĽ½
åıª è§ģ
欧 ç¾İ
å¦Ĥæŀľ æľī
å·²ç»ı æĺ¯
çľĭ å®Į
çģ« éĶħ
èµ IJ
ä¸Ģ éģį
æĦŁ åĨĴ
ç»ĵ å±Ģ
ä»ĵ åĤ¨
å®ŀ åľ°
å̻ ç»ıçIJĨ
ä¹Łä¸į çŁ¥éģĵ
碰 åΰ
åIJĪ è®¡
客æĪ· çļĦ
ç½Ĺ 马
æĦī å¿«
é£ Ľ
çĥŃ çĥĪ
伦 æķ¦
åĮ» ä¿Ŀ
éĺ¿éĩĮ å·´å·´
åĨį 说
为 åŁºç¡Ģ
çĶŁäº§ ç»ıèIJ¥
è¿ĻäºĽ 人
åĪĹ è½¦
æ²³åĮĹ çľģ
è¿Ļ 段
æ´»åĬ¨ ä¸Ń
å© ·
çĶŁ çIJĨ
ä¸ŃåĽ½ 人æ°ij
éĦ Ĥ
åIJ¬ åıĸ
å¤į ä¹ł
æľī çĽĬ
æĶ¶ æĭ¾
å¾Ī åı¯èĥ½
ç½ij绾 游æĪı
们 çļĦ
èµĭ èĥ½
éļ¾ å¾Ĺ
åĪĨ æīĭ
羣 è¯ļ
åħ¬åı¸ åľ¨
åĿĩ è¡¡
åı£ åij³
çīµ å¤´
ä¸Ģèά çļĦ
轿 车
çŃī äºİ
æ²ī é»ĺ
æĪij éĥ½
å°ı ç¨ĭåºı
ä¸Ģ åī¯
æī¿ è½½
åľ° è´¨
çķĮ éĿ¢
ç͵ æľº
çĦ¦ èĻij
éĶĢåĶ® é¢Ŀ
æĸ° 车
ä¸Ĭ 游
主 æ¼Ķ
éļIJ ç§ģ
åıijå±ķ æĪĺçķ¥
çļĦ åĬªåĬĽ
å¼Ģ åħ³
è§£åĨ³ éĹ®é¢ĺ
çĿ£ 导
对 æĬĹ
å¾Īå¤ļ 人éĥ½
æĹł æķĪ
产åĵģ è´¨éĩı
å®ī å¿ĥ
åįİ äºº
ä¸į 符åIJĪ
èĩª å®¶
éĺµ å®¹
çļĦ åIJĦç§į
çļĦ çIJĨ念
çļĦ æĸĩåĮĸ
为 èĩªå·±
å±± æ°´
游 泳
éľĩ èį¡
çĶŁæ´» æĸ¹å¼ı
è¿ľ 离
çŁ³ åĮĸ
æŃ¤ äºĭ
æĺ¯ 羣çļĦ
çļĦ æ¯Ķä¾ĭ
ç͍ ç͵
奥è¿IJ ä¼ļ
ä¿Ŀ å®ī
èĽĭçϽ è´¨
çļĦ å¿ĥçIJĨ
å· «
åı· çłģ
æ°Ķ ä½ĵ
åıij æĶ¹
åıijæĶ¹ å§Ķ
åĮ» å¸Ī
æ¶Ĥ æĸĻ
æĺ Ĭ
å¸Ĥ 级
ä¸ĸçķĮ çļĦ
åĪĨåĪ« æĺ¯
çł´ 产
ä¸Ģ æĿ¯
æĭī å¼Ģ
å¹³ åĩ¡
çļĦ åıijçĶŁ
åĬ¨ æīĭ
ä¸Ģ缴 以æĿ¥
æīĭ å·¥
éĩĮéĿ¢ çļĦ
æĹł åħ³
ä»ĭ åħ¥
èµ° ä¸Ĭ
å°±æĺ¯ è¦ģ
å¹´ éĹ´
åĩº çı¾
å½± éŁ¿
å¹ħ 度
éĽ ģ
éģĵ åħ·
缮çļĦ åľ°
åIJİ èĢħ
ä¸Ĭ æ¼Ķ
äºĨ åĩł
æ®ĭçĸ¾ 人
å¿Ļ ç¢Į
æĺ¯åIJ¦ æľī
并 对
ä¼ļ 导èĩ´
æ°´ åºĵ
ç»Ĩ èĩ´
åIJİ æĤĶ
å¿ĥ æĢĿ
åģļ äºĭ
åİĤ æĪ¿
çĿ ¿
è¿IJèIJ¥ åķĨ
头 éĥ¨
çļĦ è§Ĵèī²
æĺ¯ ä»ĸ
æĹ¢ æľī
å°ıæĹ¶ åĢĻ
强 åĬ²
主 æĴŃ
åħ¨åĽ½ åIJĦåľ°
æį ı
æįŁ åĿı
åķĨ ä¼ļ
ä¿Ŀ ç½Ĺ
çľģ å¸Ĥ
éļ§ éģĵ
æľī ä¸įå°ij
è¦ģ åľ¨
建设 é¡¹çĽ®
ç³ĸ å°¿
ç³ĸå°¿ çĹħ
æĿ¡ä»¶ ä¸ĭ
ä¼ĺè´¨ çļĦ
é¦ĸ åıij
å½ĵæĹ¶ çļĦ
丰 çͰ
大 çĽĺ
缸 继
å®ģ å¤ı
åħ¥ ä½ı
æĪij è¿ĺ
åħĭ æĸ¯
å®ļ ä»·
å¹³æĸ¹ åħ¬éĩĮ
çļĦ çŁ¥è¯Ĩ
æĪij们 ä¼ļ
åħĥ å®Ŀ
ä½ĵ éĩį
è³ £
对 æĪij们
çŁ³ å®¶
çŁ³å®¶ åºĦ
ç²¾ åįİ
å½¢ çĬ¶
åıĹ åΰäºĨ
修 订
ç¾İ åľĭ
é«ĺ æ¸ħ
çľ¼ éķľ
è§īå¾Ĺ èĩªå·±
带 ç»Ļ
åĶ® ä»·
éŨ 票
åŃķ å¦ĩ
ç͵è§Ĩ åı°
åıij ä½ľ
çļĦ åij³éģĵ
éķ¿ è¿ľ
åħ¬åħ± æľįåĬ¡
æŃ£å¸¸ çļĦ
æľī è¿ĩ
é£İ æĥħ
æ¯Ķ éĩį
åIJ »
管çIJĨ å·¥ä½ľ
综åIJĪ æĢ§
已 被
说 起
æİĴ æ°´
ä¸įæĸŃ åľ°
æĥħ æĢĢ
è¾ĵ éĢģ
è¿ĩ æķı
çļĦ åı¯èĥ½æĢ§
æľį ç͍
æľī 许å¤ļ
å§Ķ åī¯ä¹¦è®°
åĮĸå¦Ĩ åĵģ
æļĤ åģľ
æĬķèµĦ 人
çıŃ çº§
说 çĿĢ
åįĹ åĮĹ
åĪĨ è¡Į
çıł å®Ŀ
å¯ ¶
å¢ŀ å¤ļ
被 åĬ¨
ç®Ĭ çļĦ
éĹľ ä¿Ĥ
çļĦ èĦ¸
æĥ Ł
ä¸į ä¸Ģå®ļ
ç¶ Ń
çģ« çĪĨ
ç§Ł éĩij
çŀ §
éĩį 建
è· ª
ä¸Ģ 種
çļĦ åIJĪä½ľ
å®ī æħ°
ä»į æĺ¯
ä¸ĵä¸ļ åĮĸ
è°ĥ è§£
ä¸į 妨
éĢĻ æĺ¯
å¿ħ éłĪ
ä¼Ĭ æľĹ
å¾Ĺ äºĨ
æľįåĬ¡ å¹³åı°
å§ ¬
åħĪ éĶĭ
çİĭ åŃIJ
çļĦä¸Ģ åĪĩ
æĢ» çIJĨ
åĵ ¼
çª ij
çļĦå¿ĥ æĥħ
çļĦ éĩį大
çij Ł
ä¸Ģ ç¬ij
åıijå±ķ ä¸Ń
åģ¥åº· åıijå±ķ
åĵģçīĮ çļĦ
ç¦ ®
ä½Ļ 人
ä»Ĭå¹´ 以æĿ¥
æķ° çłģ
çѾ è¯ģ
åİ» æī¾
åŁºéĩij ä¼ļ
æĬ± æĢ¨
æŃ£ å½ĵ
çıŃåŃIJ æĪIJåijĺ
ä¸į åIJĪæł¼
åζ å®ļäºĨ
ç¼ĵ æħ¢
åζ 约
æłı 缮
å¸Ĥåľº ç»ıæµİ
ç»ĦæĪIJ çļĦ
严 峻
æĹ¥ 讯
ä¸ĢçĤ¹ çĤ¹
æĺ¯ æĢİä¹Ī
çļĦ çħ§çīĩ
éĺ» æŃ¢
模 ç³Ĭ
ç¼ ¸
éģķ åıį
æIJ¬ è¿ģ
éĩij éĴ±
å½ ¬
ä¸į å®ī
æĪĺçķ¥ åIJĪä½ľ
å¡« åĨĻ
讲 究
åħħåĪĨ åĪ©ç͍
èĥ½ å¤ł
èij¡èIJĦ éħĴ
éĩĩç͍ äºĨ
åľ¨ ä»Ĭå¹´
ä¸Ńå°ı åѦ
åľ¨ æĦı
çļĦ åİĭåĬĽ
ä¸į 幸
åζ èį¯
åı¯ä»¥ 让
被 è¯Ħ为
ç»Ĩ èıĮ
æĪı åī§
åįĬ 导
åįĬ导 ä½ĵ
è§Ĩ è§Ĵ
åĸľ æŃ¡
å¾ģ æĶ¶
è°ĭ åĪĴ
æŀģ 大çļĦ
çĤ¹ èµŀ
è®°èĢħ ä»İ
两 åIJį
èĩª åĬ©
èµ· æŃ¥
æĬ¤ 士
å®Ŀ 马
太 åŃIJ
å°ıå°ı çļĦ
温 æ³ī
åĩºç§Ł 车
ç§Ł æĪ¿
两 家
éľĩ æĴ¼
ç§ī æī¿
ä¸Ģä»¶ äºĭ
çĥΠ士
å®ĺ åħµ
转 身
ä¹IJ åĽŃ
çĻĮ çĹĩ
模 èĮĥ
æĦ £
è¿ĩåİ» çļĦ
代 价
çļĦ æ¦Ĥ念
åĩł çϾ
è´µ éĺ³
æĭħ å¿§
éĢĤ å®ľ
çݯå¢ĥ ä¿ĿæĬ¤
çĥ «
ä½ł æĥ³
æŃ¤ åIJİ
ä½ł ä¹Ł
çį İ
éϤ æŃ¤
éϤæŃ¤ ä¹ĭå¤ĸ
è°ĥ 度
ç§ij 缮
æīĢ说 çļĦ
åĬ ĩ
忽 è§Ĩ
ä¸ī 次
ä¸Ģ æĹ¥
åŀĤ 缴
ç«ŀ æĬĢ
éĿ¢ åĮħ
大 æĪĺ
æIJº 带
å¦Ĥæŀľ 没æľī
åħ» æĪIJ
åĩº è¡Ģ
çα好 èĢħ
æīĵ éĢļ
èµ· è¯ī
åijĪ çݰåĩº
æŃĮ æīĭ
åľ¨ å¤ĸ
é¢Ĩ导 å¹²éĥ¨
åĨ ¥
èĪĨ 论
æıIJ åıĸ
éĺ¿ å°Ķ
æľĽ çĿĢ
ä¸ī äºļ
è² ¡
åĪ ·æĸ°
æĻļ æĬ¥
è¿ĺæľī ä¸Ģ个
åĨ° ç®±
ç½ij çĤ¹
åĩº åħ·
强çĥĪ çļĦ
æĪij çĽ¸ä¿¡
å¸ĮæľĽ èĥ½
çīĻ é½¿
äºĭ å®ľ
ä¸ļåĨħ 人士
代 æĽ¿
åıĺ å½¢
éĽ ²
è°ĥ æİ§
åĪĽæĸ° åĪĽä¸ļ
æĭĨ è¿ģ
æł¸ æŁ¥
éĢ Ĺ
åħ¥ åѦ
æĦı åIJij
æı Ľ
ä¸ĭ 次
ä¼ł è¾ĵ
ä»ĸ们 åľ¨
èĢĮä¸Ķ è¿ĺ
æĹ¥ åľ¨
æķĻ è®Ń
æ´» çĿĢ
çļĦ æľīæķĪ
å¤įå·¥ å¤į
å¤įå·¥å¤į 产
æĺ¯ä¸Ģ ä»¶
çŃī çĿĢ
å¾ ©
åĭĩ æķ¢
éģŃ åıĹ
å¥Ķ é©°
讲 座
说 å®Į
ç»Ļ åĩº
è° ¦
è¯Ĭ çĸĹ
çĽ² 缮
客 è¿IJ
å°± è¿ŀ
å¼Ģ åħĥ
å¼Ģåħĥ æ£ĭçīĮ
ä¸įæĸŃ æıIJåįĩ
ç͍æĪ· çļĦ
æĴ ķ
ä¾Ľ æ°´
ç¶ĵ æ¿Ł
ä¸Ń åĮ»èį¯
èģĶ æĥ³
åħ¬äº¤ 车
èĪª çıŃ
æĬĢ è¡ĵ
å¼ķèµ· çļĦ
å° ¹
èµĦ æ·±
åĽ½èµĦ å§Ķ
èĺ Ń
é¼» åŃIJ
éĹ ½
æİĴ éĺŁ
è§Ĥ åħī
éģĹ åĿĢ
举 京
é¥Ń åºĹ
ä¸įæĸŃ çļĦ
å°±æĺ¯ ä¸Ģ个
éķ¿ ä¹ħ
çļĦ è§ĤçĤ¹
å¨ ¶
æĪij çİ°åľ¨
çķ °
å¾Ĺ åĩº
å¿ħ å®ļ
ä¸į åıĹ
åıª éľĢè¦ģ
åĽ° æī°
ç§ijåѦ æĬĢæľ¯
çīĽ èĤī
è¾ĥ é«ĺçļĦ
è·ij æŃ¥
æ² ¾
èı© èIJ¨
æľĢ å¾Į
ä¿Ŀ å¯Ĩ
æ²» å®ī
éĤ ±
常 è¯Ĩ
èĦ¸ èī²
åĮĹ å¤§
æ±ĩ èģļ
æijĨ èĦ±
é¾Ļ头 ä¼ģä¸ļ
女 åıĭ
çŃī å·¥ä½ľ
ä¸Ń ç¾İ
èģĮ åľº
èĦij è¢ĭ
åĨĻ çļĦ
饲 æĸĻ
åĬ³ åĬ¨åĬĽ
å± ¯
æĮģ èĤ¡
åĽ¾ åĥı
è¿ĩåİ» äºĨ
è² ¨
è¾ ²
éĹ® æĪij
è·Ł ä½ł
çĶŁ æŃ»
审 ç¾İ
é¢Ĺ ç²Ĵ
ä¸Ń æĸ¹
åĬł çĥŃ
æĹħè¡Į 社
çϼ çĶŁ
ä¸į åłª
åĤ ·
æ¥ ł
åĬŀ æ¡Ī
æŁ Ħ
æĹ¢ æĺ¯
å¤Ħ åĪĨ
羣å®ŀ çļĦ
æĬ¥ 纸
å¸Ī çζ
å®īå¾½ çľģ
åī¯ ä¸»å¸Ń
ä¹ĭ éģĵ
导 弹
åŃ¦æł¡ çļĦ
åŁİå¸Ĥ çļĦ
è°Ī åΰ
æ¢ Ĺ
å¹³ éĿ¢
说 ä»Ģä¹Ī
é¢ij çİĩ
éķ¿ ä¸īè§Ĵ
çļĦ åĪ©çĽĬ
é» ¨
è±Ĩ èħIJ
å®ŀéĻħ æĥħåĨµ
æŀĹ ä¸ļ
纪æ£Ģ çĽijå¯Ł
ä½ı éĻ¢
çļĦ æķ´ä½ĵ
åīį è¡Į
æĮ ¨
çħ¤ çŁ¿
å̻ è£ģ
å°ı åIJĥ
æŀģ 端
å©Ĩ å©Ĩ
çݰ è´§
è¯Ĺ æŃĮ
éĴ¥ åĮĻ
缩 çŁŃ
ä½Ĩ è¿Ļ
æĸ° åĵģ
è¿Ļ 对
çŁ¥åIJį 度
å¿ĹæĦ¿ æľįåĬ¡
大 å±Ģ
è¡¡ éĩı
ä½ĵçݰ äºĨ
æ¡ĥ èĬ±
åIJ¸å¼ķ åĬĽ
åł ¤
æĵħ éķ¿
åĴ Ĵ
缸 æľº
ä¸Ģ ç«Ļ
ä¸Ģç«Ļ å¼ı
æľĢ ç¾İ
æ°¸ ä¹ħ
çļĦ éĥ¨åĪĨ
åĪĨ å·¥
å·¥ç¨ĭ 建设
æIJŃ è½½
æ°´ ä¸Ń
èĮ ¨
çļĦ æĵįä½ľ
绣 æ²»
çķħ éĢļ
åħļçļĦ åįģ
è¼ ¸
æ¸ ¬
ç¾İ è§Ĥ
ä¸į åĪ©
åıį æĢĿ
éªĦ åĤ²
æłĩ çļĦ
æĿĢ äºº
éĺ¿ å§¨
é£Ł æĿIJ
åIJĥ çļĦ
åIJİ åĨį
çŁ £
两 侧
æ¸ħ æ°´
è¿Ľ çIJĥ
å¼Ģå§ĭ äºĨ
åIJ¬ äºĨ
çĦĬ æİ¥
çŁ ®
å¨ Ł
为 人
éĢģ ç»Ļ
åĨĴ éĻ©
æķ ·
ç»Ī æŃ¢
æīį çŁ¥éģĵ
è¿IJ æ°Ķ
éĢļ é£İ
æĥĬ è®¶
ç§ijåѦ éĻ¢
æıIJ éĹ®
太 åİŁ
缸åIJĮ çļĦ
ä» ķ
èģ ĸ
æĥħ æ³ģ
é¢Ĩ导 人
åĩºæĿ¥ äºĨ
沿 线
éĻ ½
æĦŁ è¦º
ä»į åľ¨
æ© Ļ
约 为
åĸĿ éħĴ
ç͍ èį¯
ä¸ĭ ä¸Ģ
æ³ķ å®ĺ
顺 åºı
åģļ ä¸Ģ个
åĭ ¢
æŃ ª
ç͵ ç«ŀ
ä¼´ éļıçĿĢ
ä¹ĭ åĬĽ
ä¹ĭ 人
äºij 计ç®Ĺ
åĪ«äºº çļĦ
ç§ijåѦ åıijå±ķ
第 åħ«
å¹² æī°
女 ç¥ŀ
è¿Ļæł· åģļ
å¤Ħ åľ¨
æ°´ è´¨
éķ¿ æĺ¥
å¸Ĥåľº éľĢæ±Ĥ
ç»´ æĿĥ
è̳ æľµ
æĸĩåĮĸ çļĦ
奶 ç²ī
ä¼ł è¾¾
æīĭæľº çīĪ
æĽ¾ åľ¨
äºĮ æľŁ
åİŁåĽł æĺ¯
æºIJ 头
åıĪ èĥ½
è£ ¸
æĬĢæľ¯ åĪĽæĸ°
æĸĩåĮĸ æĹħ游
åıij 票
年 级
ä½ł ä¸į
ä¹ĭ å¿ĥ
æķ° çϾ
åIJij å¾Ģ
èĢģ å®¶
åľĭ éļĽ
çļĦ é«ĺ度
æľĿ éĺ³
æ¸ħ éϤ
èĩª æľī
书 ä¸Ń
游æĪı è£ħå¤ĩ
ä¸ĩ å¤ļ
驾驶 åijĺ
ä½ł çŁ¥éģĵ
åĽ½ åºĨ
é£Ł åłĤ
æİ¥ åı£
æĢ» æķ°
åħ¶ä»ĸ çļĦ
çĶŁåij½ çļĦ
ä½ł åľ¨
çļĦ 缮åħī
è¿Ļ æĸ¹éĿ¢
éĥ½ 说
çĸĹ æ³ķ
åĭĩ 士
åľ¨ åħ¨çIJĥ
ä¿ĿéĻ© åħ¬åı¸
çĿ£ æŁ¥
åĸĦ èī¯
表 彰
è¹ ²
路 段
æľĥåĵ¡ è¦ı
æľĥåĵ¡è¦ı ç¯Ħ
æĪ· åŀĭ
ä¿ĥ 使
修 建
é«ĺ æ°´å¹³
åģļ åĩºäºĨ
主 åľº
è¡Į èµ°
空 çϽ
æľī人 说
è¿Ļ个 ä¸ĸçķĮ
åIJį ä¹ī
å®Į ç¾İçļĦ
羡 æħķ
åıĬ åħ¶ä»ĸ
åı¯ ç͍
æĭ IJ
è¾ĥ 大çļĦ
æĬĢæľ¯ åĴĮ
å°¼ äºļ
çϾ è´§
æı ī
éĢī è´Ń
éĺŁ åıĭ
ä¼ł æĦŁ
ä¼łæĦŁ åύ
åıªè¦ģ ä½ł
为ä»Ģä¹Ī è¦ģ
ä¸ĵ注 äºİ
ä½Ļ é¢Ŀ
åħ¸åŀĭ çļĦ
缮åīį å·²
欲 æľĽ
èģĶ ç»ľ
æµģ ä¼ł
çļĦ å®¶åºŃ
åı· åı¬
çıį è´µ
ä¼Ł 大çļĦ
éī´ äºİ
è·Ł ä»ĸ
产 çī©
ä¸į å·²
è¿Ŀæ³ķ è¡Į为
头 ä¸Ĭ
åĪĨ è§£
åı¯ä»¥ çľĭåĩº
æł¡ åĮº
åŃĹ ä½ĵ
ä¿® çĤ¼
çĶļèĩ³ æĺ¯
微信 åħ¬ä¼Ĺ
åıĸ 代
èIJ¥ä¸ļ æĶ¶åħ¥
æ½į åĿĬ
ä½ł èĥ½
社ä¼ļ ä¿Ŀéļľ
æ¯ĶèµĽ ä¸Ń
污水 å¤ĦçIJĨ
夫 å¦ĩ
ä¸Ģ å¹ħ
沿 海
åı£ æĦŁ
ä½Ĩ åį´
å½ĵ æĹ¥
çļĦ æľĢ大
æ¯ı ä¸Ģä½į
没 äºĭ
çī¹ åĪ¥
å¼Ģ åѦ
è·¯ éĿ¢
å¿ĥçIJĨ åѦ
æĶ¾ ç½®
éĩįåºĨ å¸Ĥ
ä½ł èĩªå·±
æ¶Īè´¹èĢħ çļĦ
ä¸Ģ æ³¢
èѦ æĥķ
å᧠室
注 å°Ħ
é£İ 鼨
沿 çĿĢ
åijĬ 訴
表 çݰåĩº
åĽĽ æĺ¯
åı¤ åħ¸
æĽ´ éĩįè¦ģçļĦ
好 äºĭ
çľ¼ 泪
æ¨ ĵ
审 åΤ
碰 æĴŀ
车 ç«Ļ
è¿Ľåħ¥ äºĨ
éĽĨ åIJĪ
æł¼ å¤ĸ
宾 é¦Ĩ
æĶ¯ä»ĺ å®Ŀ
她 æĺ¯
æĺ¯ å¦Ĥä½ķ
人 次
çļĦ æĪIJåĬŁ
æĹł åĬĽ
æµ· æĭĶ
æĺ¥ åŃ£
éĥ½ ä¸įä¼ļ
çŃī å¤ļç§į
ä¸Ģ个 å°ı
åģľè½¦ åľº
让 æĽ´å¤ļ
è¿Ļ çĤ¹
æĪIJ åĵģ
éĴ ī
éģĩ è§ģ
çıŃ ä¸»ä»»
æĦı æĦ¿
çļĦ åIJĮåѦ
游 è§Ī
åİĭ 缩
åľ¨ ä¼łå¥ĩ
å¼¹ æĢ§
æĹ¥ åĨħ
ç¦ı建 çľģ
è§Ĵ èIJ½
åĪĨ å¼Ģ
ä¼ļ 让
å¤ĸ åĽ´
çĨŁæĤī çļĦ
çĨ Ķ
ä¸ĩ è¾Ĩ
å¤ľ éĹ´
车 身
ä¸Ń æľŁ
å®ĮåĸĦ çļĦ
åĵģ ç±»
åıĭ è°Ĭ
éĢīæĭ Ķ
éªij 士
å½ ¦
çļĦ çľĭæ³ķ
åĽ½ çİĭ
è¾£ æ¤Ĵ
åıijå¸ĥ æĹ¶éĹ´
åı¤ åŁİ
éļı æľº
ç« ĸ
å¼Ģ è¾Ł
ä¼Ĺ çĶŁ
没 åĬŀæ³ķ
åįĥ éĩĮ
æĿ¥æºIJ äºİ
çļĦ æĿĥåĪ©
æ¯Ķ åĪĨ
满æĦı çļĦ
ä¿® è¡Į
åĿ ł
大 海
èİ ¹
åĩº 身
è« ĩ
åħ³ èĬĤ
åIJį 人
éľĢè¦ģ 注æĦı
æĹ© æĻ¨
å¤ĸ åįĸ
åıĪ è¦ģ
æ¶ī æ¡Ī
çĶ³è¯· 人
éĻĦè¿ij çļĦ
åĬłå¿« æİ¨è¿Ľ
æĸ° å¹´
大 è¡Ĺ
ä¸Ģ é»ŀ
èĭı å®ģ
æĤĦ æĤĦ
èĦ¾ æ°Ķ
å¸Į èħĬ
éļı åį³
æķ¢ äºİ
å®ŀè·µ ä¸Ń
æĺ¯ 没æľī
æľīè¶£ çļĦ
æĿ¥èĩª äºİ
è£ģ åΤ
女 åŃ©åŃIJ
èĩ³ åħ³
èĩ³åħ³ éĩįè¦ģ
æĻº åĬĽ
èµ° åĩºåİ»
çŁŃ æĿ¿
大 åĽ½
çļĦ 认è¯Ĩ
å¹´ å¤ľ
åĨį åΰ
åIJĮ æł·çļĦ
å¯Ĩ å°ģ
å¤ĸ交 éĥ¨
çĶŁ æķĪ
æĤ¨ åı¯ä»¥
ä½ł åĢij
è¿ĩ å¹´
å¼ ĵ
è¡Į æĿİ
æ¯Ķ èµ·
身 é«ĺ
è¿Ļ个 人
ä¸Ń å¤ĸ
éģĵ æŃī
çĽ¯ çĿĢ
亲 åŃIJ
éĹ ¸
çϽ äºij
èĦĸ åŃIJ
ä¸ĢåĪĩ éĥ½
æ· ij
è° ľ
åģ¶ çĦ¶
éĿł è°±
é«ĺ 管
ä¸ĭ åıij
æĶ¾ åΰ
ç±» åĪ«
ä¸ĭ åĪĹ
æ·· ä¹±
åIJĪæ³ķ æĿĥçĽĬ
çݯ çIJĥ
æľīæķĪ åľ°
åķĨ æĪ·
æ¹ĸ 人
海 岸
æĬķ 产
两 个æľĪ
éĥ½ éĿŀ常
å¢ŀ强 äºĨ
æĿ¥ åΰäºĨ
åī© ä½Ļ
æĤ¨çļĦ åŃ©åŃIJ
æµģ æ°´
æŃ£ ä¹ī
天 çĮ«
åģļ è¿ĩ
ä½ķ æĹ¶
æĪij åİ»
çľģ 份
å¥ĸ éĩij
该 å¦Ĥä½ķ
ä¸ĭ çıŃ
åģ¶ åĥı
æijĨ æĶ¾
æĸ° 模å¼ı
æĬķ è³ĩ
è·¯ åı£
åĨľæ°ij å·¥
大 åѸ
ä»¶ äºĭ
æł¹æľ¬ ä¸į
æµĵ 度
æµĵ åİļ
è½® èĥİ
æĪ¿ ä¼ģ
éĿŀ常 好
ä»İ ä¸Ń
人 æł¼
ç¿ ģ
æĹ¶éĹ´ åĴĮ
è¿Ļ ä¸įæĺ¯
åΏ åķĨ
æĥĬ 人
åύ å®ĺ
åĩĨ åĪĻ
æĥħ æĻ¯
æĽ´ é«ĺçļĦ
åѦ å®¶
泡 沫
åľ°æĸ¹ æĶ¿åºľ
å°± çŁ¥éģĵ
åij¼ åIJģ
ç»ı è´¸
èĬ± éĴ±
æľī ä¸Ģ次
æĦŁ æħ¨
ä¸Ģ åįĥ
å¤ľ æĻļ
詹 å§Ĩ
詹å§Ĩ æĸ¯
è¦ģ éĹ»
ç» Ĵ
æºIJ äºİ
çļĦ è´¨éĩı
注æĦı äºĭ项
æħ¢ æĢ§
稳å®ļ çļĦ
建设 åĴĮ
æĻ¯ 象
éĩı åĮĸ
çļĦ 話
è¯Ħ 级
æº ľ
红 åĮħ
éĢļ éģİ
社ä¼ļ 责任
æĸ° 产åĵģ
åĨ· éĿĻ
çľĭ ä¸įåΰ
èģĶ éĤ¦
éŃ Ħ
çļĦ åīįæıIJ
çļĦåīįæıIJ ä¸ĭ
è¾ĥ 好
çļĦ æĦŁæĥħ
客æĪ· æıIJä¾Ľ
çĭ¬ èĩª
å¢ŀ æĶ¶
æĸĩ çĮ®
æĭ¼ åij½
管çIJĨ åĴĮ
æµģåĬ¨ æĢ§
åħ¨ å®¶
ä¸Ĭ æĸ¹
æİ¨åĩº çļĦ
ä¸ī åĽ½
ä¸Ģ个 æĺ¯
æĸ° ä¸Ģè½®
æĸĩåĮĸ éģĹ产
æ® º
大 æ¹¾åĮº
éĥ½ éľĢè¦ģ
çļĦ å®ŀéĻħ
ç· Ĭ
大 å¥ĸ
åħī èĬĴ
便 äºİ
çļĦ 表æĥħ
æ¼Ķ ç»İ
红 åĨĽ
å½ĵ æĪij
æ²» æĦĪ
é¢Ŀ 度
éĿ ľ
ä»»ä½ķ 人
è¡Ĺ 头
çī¹ æĸ¯
çĸ¯ æĭī
åĮ»çĸĹ æľºæŀĦ
ç»Ļ åŃ©åŃIJ
è§Ħ 磩
è£ ľ
çļĦ 身影
ä¸ĵ æłı
æĿ¥ 临
ç«¥ å¹´
å¤į èĭı
è¨ Ĥ
åŀĭ åı·
åĽ¾ æ¡Ī
ç®Ģ åİĨ
æĭ ±
èį· åħ°
ä»» æĦı
æī¿ æİ¥
è¿Ļ æīį
客 车
æľĿ çĿĢ
éłħ 缮
åı° é£İ
çļĦ æĪ¿åŃIJ
éª ı
æĿ± 西
éģĹ ä¼ł
è¶Ĭ å¤ļ
äºĨ ä»ĸçļĦ
ä¸Ĭ åij¨
管çIJĨ åĪ¶åº¦
失 ä¸ļ
çĶ· åıĭ
æİ¥ ç§į
å¨ģ åIJį
çĴ° å¢ĥ
åıijçĶŁ åľ¨
个 åĽ½å®¶
åĪĽæĸ° åıijå±ķ
æĶ¹åıĺ äºĨ
åģ¥åº· çļĦ
å̼å¾Ĺ ä¸Ģ
å̼å¾Ĺä¸Ģ æıIJ
åĽ¢ ä¼Ļ
åģĩ 设
åı° ä¸Ĭ
è§ĦèĮĥ åĮĸ
éĻª åIJĮ
座 æ¤ħ
åı¯ æĢľ
åħĭæĢĿ 主ä¹ī
æ³ķå¾ĭ 责任
ä¸Ģ é¡¿
æĬ¬ 头
为 éĩįçĤ¹
è¿ľ æ´ĭ
éĢı è¿ĩ
åħ¨çIJĥ åĮĸ
è¶£ åij³
票 æĪ¿
æ¯ı 人
åIJĦç§į åIJĦæł·
äºĨ åĩºæĿ¥
ç»Ŀ对 æĺ¯
ä¸ĭ å±ŀ
ä¸Ģ åıĮ
è¿Ļ åĿĹ
æĬĹ çĸ«
è¦ģ çĤ¹
å½¢æĪIJ çļĦ
æĪij çľĭ
ä¸ĩ éĩĮ
èĢĥ çłĶ
为 åħ¶
æ°ij 宿
å¤ļ ä½į
大 èĩ´
ä»ĺ è´¹
åħ¥ æīĭ
å±ħ å®¶
æīĢåľ¨ åľ°
人 身
è¿ĩ å¾Ĺ
è¯ķ è¯ķ
访 è°Ī
åĬł éĩį
å°± ä¸įä¼ļ
çĶŁäº§ ä¼ģä¸ļ
åĽŀ åĽ½
åºķ 线
èµ¶ åΰ
æĶ¯ éĺŁ
æĪij们 éĥ½
éĤ® æĶ¿
缴 èĩ³
éĴ¢ çIJ´
åħ ľ
çłĶ讨 ä¼ļ
æľĪ 亮
åĿļæĮģ 以
åħ¬å®ī éĥ¨
éĴ¢ 管
å°ı çϽ
ç½® ä¸ļ
èģ ĭ
书 åĨĻ
æĿ ı
éħį æĸ¹
èĢĮ åıĪ
çijŀ 士
çķĮ çļĦ
èĢģ 大
æĪIJçĨŁ çļĦ
å¹² ä»Ģä¹Ī
ä¸ĵ项 æĸĹäºī
çŃī å¤ļ个
èĦ± 离
ä¸ī 个æľĪ
çłĶç©¶ åijĺ
æĹĭ 转
æŀģ èĩ´
åħį è´£
åħįè´£ 声æĺİ
å¾Īå¤ļ çݩ家
车 ä¸Ĭ
交 äºĴ
å·² æĺ¯
ä¸Ģ å°ı
çļĦ éĩįçĤ¹
èĬ± äºĨ
ä¸į æĺİ
æľīåħ³ è§Ħå®ļ
çĬ¹ å¦Ĥ
çľ ¸
å¯ ¡
çļĦ è¡£æľį
åĮħ 裹
身 åŃIJ
å¸ĪèĮĥ 大åѦ
äºĭ åħĪ
线 æĿ¡
æ³ķ åζ
åħ» æĬ¤
稳å®ļ æĢ§
éĤ µ
åŀĦ æĸŃ
é¡ į
èĢĥ åı¤
æĿł æĿĨ
èĭı èģĶ
æ°´ ç͵
åħ·ä½ĵ çļĦ
æ¿Ģ æ´»
æĪij æł¡
åĪļ å¼Ģå§ĭ
åĩ¸ æĺ¾
ç¦ ¾
åħ¼ èģĮ
éĢı éģİ
åľ¨ 游æĪıä¸Ń
社ä¼ļ åıijå±ķ
好 çİ©
å¹» æĥ³
ä¸į 代表
注æĦı åĬĽ
æ£ į
ç͍ æīĭ
ç¾İ 人
许å¤ļ 人
å¾Ī æĺ¯
çļĦ çłĶåıij
æīĵ åĩº
åIJĪä¼Ļ 人
ä¸Ģ å¤ľ
ç¼ĵ ç¼ĵ
ä¿® æŃ£
æĦŁ çŁ¥
ç»Ī 身
æ¿Ģ ç´ł
çݯå¢ĥ ä¸ĭ
次 ä¼ļè®®
ç»ıæµİ å¢ŀéķ¿
æī Ľ
åıij éħµ
åĪĨæŀIJ å¸Ī
åľ¨ æľªæĿ¥
主è¦ģ æľī
ä¸Ģ åŃ£åº¦
çļĦ 说æ³ķ
ä»İæĿ¥ 没æľī
货 车
缩 å°ı
太 è¿ĩ
æķĪ åĬĽ
ä¸į ä¸ĭ
æĬķ 稿
èᝠä¸ļ
ç»Ħ éķ¿
ç«Ļ çĤ¹
å¾Ī åĸľæ¬¢
éIJ µ
åĬ¿ 头
æ¼ı æ´ŀ
æĦ¤ æĢĴ
åħħ å®ŀ
åĪĽä¸ļ æĿ¿
çĪ ª
æľª å¿ħ
åºķ éĥ¨
å¾Ĺ åĪĨ
人æ°ij åĮ»éĻ¢
äºĮæīĭ æĪ¿
å·²ç»ı 被
大 楼
æĸ° æĪ¿
辦 æ³ķ
ç͍ åĬĽ
æĭĵ 宽
åĨħ åľ¨
æĴŃ åĩº
饰 æ¼Ķ
ä¹Ł 让
ä½ľ çĤº
çī©ä¸ļ 管çIJĨ
åį´ ä¸į
为 ä¸ŃåĽ½
å±Ģ åĬ¿
ä¸į èĤ¯
æľĢ æĸ°çļĦ
åı¯ä»¥ éĢīæĭ©
æĺ¾ çݰ
å°± ç®Ĺæĺ¯
åľ¨ æł¡
é¾ Ł
两 æĿ¡
çļĦ å®ŀåĬĽ
è¶Ĭ 好
她 åľ¨
å¿ł è¯ļ
ä¹Ł éľĢè¦ģ
游æĪı æĵįä½ľ
è¶ħ åĩº
å¦Ĥæŀľ ä¸į
æīĢåľ¨ çļĦ
ä½ł è¿ĺ
以 åĨħ
æľī ä¸Ģå®ļ
åı¯ è¾¾
è·ij åΰ
åī Ľ
建ç«ĭ åģ¥åħ¨
æķ´ 车
åīį æĸ¹
éĹ´ æİ¥
çѹ å¤ĩ
çĸ² åĬ³
离 å¼ĢäºĨ
æ± Ŀ
éĿ¢ éĥ¨
ä¹ĭåīį çļĦ
åıĺ 为
å¦Ĥæŀľ 说
对 ä»ĺ
åĿĩ åı¯
被åijĬ 人
ç²¾ ç¾İ
èģļ ä¼ļ
çĿĢ æĢ¥
è°· æŃĮ
ä¸Ģ åı·
红 åĪ©
ä¼łå¥ĩ 游æĪı
å» ĸ
è´ ŀ
ä¹° åΰ
éŃ ļ
ä½ĵ è´¨
å°ij äºĨ
æ³ī å·ŀ
åIJ Ł
ç»Ŀ ä¸į
é»ij æģ¶
é»ijæģ¶ åĬ¿åĬĽ
ä¸Ĭ æĺł
çļĦè¯Ŀ é¢ĺ
ä¸ĩ人 次
ä¸ĸ éĹ´
ç͍ å·¥
è´¯ ç©¿
å®Ŀ çŁ³
ä½ł 好
åĪĩ åī²
强 åĽ½
åĽŀ èIJ½
æ°´ æĻ¶
模 仿
æ´ª æ°´
éĢĻ éº¼
åįģä¸ī äºĶ
ä½ ij
éĻ Ħä»¶
çļĦ å¢ŀéķ¿
éĻĦ å±ŀ
çݰ å·²
帮 ä½ł
éĩij çīĮ
é«ĺ åİŁ
åľ¨ å®¶éĩĮ
éĺ² èħIJ
ç¡®å®ŀ æĺ¯
宣 讲
天 æīį
ç»ıèIJ¥ 管çIJĨ
éĶħ çĤī
åIJĪ ä¸Ģ
è§Ĥ èµı
éķ¿ è¾¾
主ä¹ī æĢĿæĥ³
éĤ£ 麼
é£İ äºij
为主 çļĦ
æļij åģĩ
æĮģ ä¹ħ
å¼Ĥ åľ°
å¼Ģ éŨ
模 æĿ¿
æī¹ 次
ä¸į 便
天 çĶŁ
åĩł 个æľĪ
ä¸ĵ ç§ij
åı¦ æľī
åħ¬å¸ĥ çļĦ
æĩ ·
åľº åIJĪ
çļĦå¿ĥ æĢģ
è¿ĺ 好
å®ŀ æĪĺ
èĢģå¸Ī çļĦ
åħ© åĢĭ
åı¯ åľ¨
éĤ£ ä½į
å¥ł å®ļäºĨ
ä¿ĥ éĶĢ
æı´ åĬ©
ä¸ĩ çī©
æĥħ æĬ¥
é¦ĸåħĪ è¦ģ
æĸĩåĮĸ åĴĮ
éĥ½ å·²ç»ı
ä¸Ĭ ä¸ĸ纪
åĨľ åľº
大 æī¹
æĺİçϽ äºĨ
çļĦ æĪIJéķ¿
çļĦ æ¯ĶèµĽ
失 误
åģļ æĪIJ
ä»Ĭ天 å°ıç¼ĸ
é¢Ĩ è¢ĸ
æıIJåįĩ äºĨ
å¾IJ å·ŀ
ä»į æľī
è¿ĩ 滤
å¹½ é»ĺ
çĥŃ éĩı
ä¸Ģ é¦ĸ
æ¼Ĥ亮 çļĦ
åĩł ç§į
åĢ¡ è®®
å°±åı¯ä»¥ äºĨ
æİĴ åĪĹ
éĩį éĩį
ä¼ģä¸ļ åĴĮ
ä¸ĵ å±ŀ
çħ İ
亲 æĪļ
çϾåĪĨ ä¹ĭ
稿 件
è¿ĺ å¾Ĺ
人 åĵ¡
äºī 夺
æĽ´ 容æĺĵ
大 èĩªçĦ¶
鼻 èħ¦
太 空
åľ° å¤Ħ
å¤ ¢
ä»ĸ 对
å¿ħ å°Ĩ
ä¸į å½ĵ
严 谨
åĩº åľº
å·²ç»ı æľī
é¢Ĩ åĨĽ
é«ĺ æ¡£
ä¸Ģ æīĢ
æł Ĺ
让 åѦçĶŁ
æĽ¹ æĵį
æŁIJ ä¸Ģ
伸 åĩº
èĬ± åįī
æ¸ħ éĨĴ
èģĶç³» æĸ¹å¼ı
åĪĨ å±Ģ
èħ ³
æ©¡ èĥ¶
éķ¿ å¾Ĺ
绿 åľ°
è¢ į
çļĦ èīºæľ¯
女 æľĭåıĭ
ä¸Ń è¶ħ
离 åŃIJ
å¤ļæł· åĮĸ
éĺ³ åı°
ä½İ 碳
ä¸Ģ ç±»
çŃīæĸ¹éĿ¢ çļĦ
å¾Ĺ 好
模 åħ·
ä¸ĩ 亿
çķĻ æĦı
临 æ²Ĥ
å°ij éĩı
çľĭ åIJij
ç»ıèIJ¥ èĢħ
çķĻä¸ĭ äºĨ
åĿı äºĨ
åijĬ åĪ«
羣 çIJĨ
ç¼´ è´¹
æĬĬ ä½ł
çļĦ ä»»åĬ¡
æĪij 对
ä¹° åħ¥
çĻ» ä¸Ĭ
æľī 两个
ä¸Ģ 头
æĵį æİ§
åħ¨ è¦ĨçĽĸ
çĿĢ æīĭ
å¢Ļ éĿ¢
å¤ļ æĸ¹
åı¯çα çļĦ
ä¹Ł åı¯èĥ½
æľĢ æľī
è¿ĻäºĽ éĥ½æĺ¯
æĥ ¡
å® ®
å¾Ī å°ı
éĹ®é¢ĺ æĺ¯
åĿĩ æľī
å¾ģ éĽĨ
说 åĩº
æľī æĦı
é¢ Ĥ
æī¬ å·ŀ
åķĨä¸ļ 模å¼ı
çĶŁ èĤĸ
æįIJ 款
å² Ĥ
ç¾İ æĻ¯
è¿ĺ 羣
æĭ¥ æĬ±
身ä½ĵ åģ¥åº·
æ·± å¤Ħ
çľ¼ ç¥ŀ
çļĦ 形象
ä¼ĺ è¶Ĭ
å½ĵ æĪIJ
åĮº åĪĨ
åİ» éϤ
注 å®ļ
å§IJ 妹
åĮº åĨħ
é© ļ
æļĹ ç¤º
æĺİ äº®
æħ° éĹ®
å¸Ĥåľº 份é¢Ŀ
çĮª èĤī
çļĦ èµĦéĩij
åİĨ ç»ı
å§ĭç»Ī åĿļæĮģ
çĶŁ æľº
ä¸į 顾
éĩij åĪļ
大 声
éĻķ 西çľģ
é² į
åĨľä¸ļ åĨľæĿij
æľī 害
éŨ è¯Ĭ
æ¯ı ä¸Ģ次
çļĦ åĽłç´ł
é¢Ŀ å¤ĸ
åİ¿ 级
çļĩ åIJİ
åĽ½ ä¼ģ
é¦ĸ éĢī
ç¼ĸ åĨĻ
æĭ¿ èµ·
åģ· åģ·
ä¸İ ä¸ŃåĽ½
åįĸ å®¶
ç»Ļ ä»ĸ们
ç¥ŀ è¯Ŀ
åѸ æł¡
æĪij ä¸Ģ缴
çŁ¥éģĵ äºĨ
åį Ĵ
åĴĮ åľ°åĮº
ä»Ģä¹Ī éĥ½
çĶ» å®¶
æľ¬ çĿĢ
ä½Ļ åIJį
审 çIJĨ
ä¸Ģ åIJij
åıijå±ķ è¶ĭåĬ¿
åĮº éĹ´
注åĨĮ èµĦæľ¬
çIJ ¦
ä¸į åı¯ä»¥
çļĦ åĦ¿åŃIJ
å̼ çıŃ
ä¸¥æł¼ çļĦ
å®ŀä½ĵ ç»ıæµİ
æľī æĿĥ
æĪij åıĪ
éĵ¶ æ²³
ç«ĭ 马
æĿĢ äºĨ
åĮħ 容
管 家
身 é«Ķ
éĵ ħ
å°ı åŃIJ
管çIJĨ ç³»ç»Ł
æľīçļĦ 人
é£İ ç͵
æĻºèĥ½ åζéĢł
ç²¾ ç¡®
æĭĽåķĨ å¼ķ
æĭĽåķĨå¼ķ èµĦ
äºĮæīĭ 车
åİ¿ å§Ķ
èīº äºº
å¥ ķ
è¿İ æĿ¥äºĨ
ç»ĵæĿŁ äºĨ
çļĦ ä¼łç»Ł
æĭ¼ æIJı
奥 迪
çĸij æĥij
ä¹ĭ æĹ¥èµ·
æłĩå¿Ĺ çĿĢ
åľ° åįĢ
è¯ł éĩĬ
åΰ æľŁ
åħ¨ éĥ½
çŁŃ æļĤ
æĺ¯ æĪijåĽ½
æĪij å·²ç»ı
æ»´ æ»´
天 èµĭ
对 她
åį«çĶŁ éĹ´
çĶŁäº§ åŁºåľ°
æĹ¥ è®°
çļĦ æķĻåѦ
åĵ ĩ
æ°ij äºĭ
è¿ĺ åİŁ
æīĭ ä¸ŃçļĦ
çļĦ èī¯å¥½
æ· «
ä¸Ńåħ± ä¸Ń央
åĪ ĥ
åĵ Ħ
åľ¨ ä»ĸçļĦ
å°Ī æ¥Ń
åľº éĿ¢
éĤ» å±ħ
çĹ Ĵ
å¦ Ħ
å¤ĸ ç§ij
ä¸į éĢĤ
举åĬŀ çļĦ
é Ĥ¹
åħļçļĦ 建设
çϼ 表
è·¨ çķĮ
æ²ī æ·Ģ
大 çīĩ
è¶Ĭ é«ĺ
å°Ĩ æĺ¯
è§ī éĨĴ
åĤ¨ åŃĺ
å¢ŀ 大
ä¸į 让
æķ´ å½¢
å¹³åı° ä¸Ĭ
åĩł ä½į
è¯ī æ±Ĥ
好 ä¸į好
åľ į
æĸĩ æľ¬
é̲ åħ¥
ç´ į
æł¹ æĵļ
èįī æ¡Ī
åħŃ ä¸ª
åĭ ¿
åζ æĪIJ
饮 水
æ°¸ æģĴ
èĩª æĿĢ
åı¸ 马
éļ¾ çĤ¹
为 æĪij们
å¼ §
åī© ä¸ĭçļĦ
åĩĨå¤ĩ 好
çļĦ æľĢä½³
èģĶåIJĪ ä¼ļ
æĤ£èĢħ çļĦ
æĪijä¸į çŁ¥éģĵ
ä¸ĭ ä¸Ģ个
åıijå±ķ æĸ¹åIJij
ç¬ ¨
æīĢ以 æĪij们
åĨĻ äºĨ
éĢł æĪIJäºĨ
æ²Ļ æ¼ł
çŃĽ éĢī
çģ¾ åĮº
ä¸Ĭ çľĭ
éħ ¶
æ»ļ åĬ¨
éļ¾ åħį
åIJī åĪ©
ä¸Ģ ä¸Ģ
ç²¾ å¯Ĩ
伸 æīĭ
礼 仪
åħ¨ æĺ¯
è¶Ĭ 大
ä¸Ń æłĩ
åıĸ åĨ³
åıĸåĨ³ äºİ
éĢĶ ä¸Ń
讨 åİĮ
æīĭ åĨĮ
第 ä¹Ŀ
åŃĶ åŃIJ
çĦ¶ å¾Į
ä¸Ģ åħ±
æµ· æĬ¥
款 å¼ı
æķ´ 天
è¾¹ çķĮ
è·¯ è¾¹
æĻĭ 级
åIJIJ æ§½
çļĦ åħ³æ³¨
æĪij 没æľī
å°±æĺ¯ åľ¨
缮 çļĦæĺ¯
åį³ä½¿ æĺ¯
é¡¶ å°ĸ
å·²ç»ı åľ¨
å®īåħ¨ éļIJæĤ£
æłĩ æĿĨ
åįĹ éĢļ
ä¼ļ 对
座 ä½į
èµ¢å¾Ĺ äºĨ
åİŁæĿ¥ çļĦ
身 为
书 åºĹ
è¢Ń åĩ»
ä»Ĭ æĻļ
以 èī²
以èī² åĪĹ
æĬĸ éŁ³
åį´ æ²¡æľī
丧 失
çļĦ å±ĢéĿ¢
åįģåĽĽ äºĶ
çŃī 缸åħ³
æ±ĩ æĢ»
å¤ĸ 表
为 æ°ij
éľĩ æĥĬ
å¥Ĺ è·¯
çĬ¯ç½ª å«Įçĸij
å°Ĩ 以
çİĩ é¢Ĩ
éħĴ åIJ§
è¡Įä¸ļ åıijå±ķ
å¹´ èĩ³
åύ æĿIJ
åĴĮ æĬĢæľ¯
æľĢ å°ı
è¿Ļä¸Ģ åĪĩ
èģĮ ç§°
å½ĵ ä½ľ
æİĢ èµ·
åĴ ĭ
ä¸Ń éĥ¨
æīĭ èĩĤ
ç½¢ äºĨ
媳 å¦ĩ
æ´½ è°Ī
æĹ¶ä»£ ä¸ŃåĽ½
人çĶŁ çļĦ
æŀģ éĻIJ
ç¦ Ħ
åĮº æĶ¿åºľ
æľ¬ éĴ±
礼 åĵģ
çļĦ éĤ£ä¸ª
侦 æŁ¥
太å¤ļ çļĦ
å®ŀæĸ½ æĸ¹æ¡Ī
é«ĺ æłĩåĩĨ
æĮĩæĮ¥ éĥ¨
å̾ æĸľ
çī¹èī² ç¤¾ä¼ļ
çµIJ æŀľ
éĴ» çŁ³
ç§» æ¤į
çī¹ ç§į
èĩª æĦ¿
æĭľ çĻ»
åįķ 身
åį´ åıĪ
åĪ¥ 人
åIJĪ è§Ħ
æľº ç͵
çī¹ æĦı
å½ĵåīį ä½įç½®
ä¹° å®¶
åIJĪ çº¦
èĤ© èĨĢ
为 åĩĨ
å®¶ è£ħ
çļĦ çĥŃæĥħ
éĿŀ éģĹ
çļĦ éŃħåĬĽ
åİŁ åijĬ
社ä¼ļ åIJĦçķĮ
ä¹° çļĦ
å¤ļ åIJĥ
éĽķ å¡ij
èµ· ä¹ī
åĬł åī§
éĤ£ä¸Ģ åĪ»
å°Ĩ è¿Ľä¸ĢæŃ¥
æ¡Ĥ æŀĹ
æĽ´ 强
对 ä¼ģä¸ļ
æĹł æĦı
ä¹łè¿ijå¹³ æĸ°
æµģ 失
微 软
缸 对äºİ
座è°Ī ä¼ļ
主 èIJ¥ä¸ļ
主èIJ¥ä¸ļ åĬ¡
ç§ģ åĭŁ
å±ķ示 äºĨ
常æĢģ åĮĸ
è² ´
符 åı·
å¹´è½» çļĦ
å°± éľĢè¦ģ
ä¹Ł æĽ¾
çļĦæĥħ 绪
è¾¾ æłĩ
èĩ ¨
ä½į å±ħ
ä»ħ 为
é¦ĸ å®¶
éĺ´ éĺ³
ä¸įåĨį æĺ¯
åĽłä¸º å®ĥ
ä¼ģä¸ļ åľ¨
çĺ ¾
åIJ¬ è§ģ
åİŁ æľī
åζ è£ģ
å¯Ĥ å¯ŀ
éĢļè¿ĩ 对
æ»ij éĽª
è¿Ļ å¼ł
çļĦ çIJĨè§£
æĸ° ä¸ŃåĽ½
è¿Ļ åĦ¿
ä½İ ä»·
æĥ³ è¿ĩ
çļĦ ä¿¡å¿ĥ
建çŃij çī©
çļĦ é¢ľèī²
ä¸į åºĶ该
æĹłçĸij æĺ¯
å¼ķèµ· äºĨ
åħ¨ åijĺ
æĿ° åĩº
è¿Ļæĺ¯ æĪij
èª °
èĺ ĩ
éĺµ åľ°
åħħ å̼
çŁ¿ ä¸ļ
çĿĢ ä»ĸ
信 访
ä¸ĩ è¾¾
æij© æĵ¦
å¼Ģ 端
èı² å¾ĭ
èı²å¾ĭ 宾
车 åŃIJ
æľ¬èº« çļĦ
çģ«è½¦ ç«Ļ
常 å·ŀ
为 代表
为代表 çļĦ
广 ç͵
亲 人
åı³ æīĭ
éĽĨ è£ħ
éĽĨè£ħ ç®±
çļĦ åį°è±¡
æ©Ł æľĥ
åĮĨ åĮĨ
åħī ç͵
大 æĸ¹
è¿ĺ æľª
åĪ© 好
ç»Ŀ 大å¤ļæķ°
åľ¨ è¿Ļç§į
ä¸Ģ ç»Ħ
æĸ° èĤ¡
转 åıij
æ³ķ åºŃ
æĹł æīĢ
éģĵ è·¯ä¸Ĭ
çŁ¿ å±±
èij ī
æĶ¶ åĽŀ
ç§° ä¹ĭ
ç§°ä¹ĭ 为
æıŃ éľ²
åı£ 岸
åIJ ¼
å¿ĥ æĥ³
çļĦ 梦æĥ³
éĽ ¯
ä¹ĭ åĪĿ
å¥ĸ 项
订 éĺħ
èĵĿ 天
åĿ¦ åħĭ
ç«ĭ æ¡Ī
èģĶ æīĭ
ä½Ĩæĺ¯ æĪij
帮 æĪij
ä»ħ 代表
说 æĪij
çļĦ è¶ĭåĬ¿
æ¯Ķè¾ĥ 大
èµ° å»Ĭ
éĩįçĤ¹ é¡¹çĽ®
èµĮ åľº
åIJį çīĩ
æĦŁ åı¹
åľ¨ åľ°ä¸Ĭ
åıij çĥŃ
èĮĥ çķ´
çļĦ éģĵè·¯
éĩij èī²
ä»ĸ åıĪ
ä¼ļ 产çĶŁ
æ°ij åĽ½
å®ĺæĸ¹ ç½ijç«Ļ
æĶ¶çĽĬ çİĩ
çļĦ åΰæĿ¥
çļĦ åĬŀæ³ķ
æĶ¹ åζ
ä¸ĩ ç§ij
ä¸į äºĪ
è¿ĻäºĽ éĹ®é¢ĺ
çα ä¸Ĭ
çIJĥ åľº
责 令
æİĪ è¯¾
åľ¨ é¦Ļ港
ç»Ĩ èħ»
å¤ļ ä¸ĩ
åIJĮ å¹´
大 使
æĸ ĭ
ä¹Ł 为
æĥł å·ŀ
åIJī 祥
çͰ åĽŃ
åĽ½å®¶ éĺŁ
éĩį çĶŁ
åľ¨ åħ¶
é¦Ļ åij³
è´Ł èį·
亲 åĪĩ
èĩª 豪
没 éĶĻ
åĽłä¸º åľ¨
æĺŁ æĺŁ
éĤ ij
è¿ĺæľī å¾Īå¤ļ
æij© æīĺ
æij©æīĺ 车
æŃ¥ è¡Į
管çIJĨ ä½ĵç³»
èĦļ ä¸ĭ
éģİ åİ»
æ±ī è¯Ń
对 ä¸įèµ·
çļĦ ç»ıåİĨ
åıĬ 缸åħ³
ä¸įå°ij 人
éĩį ç£ħ
åĬ³åĬ¨ èĢħ
大åĬĽ åıijå±ķ
æĢİä¹Ī åģļ
çĭĹ çĭĹ
举åįĹ äºļ
åĭĩ äºİ
åħ¬ éĸĭ
çĵ· çłĸ
åıĤ çħ§
广æĴŃ ç͵è§Ĩ
举 åĬ¨
æ±Ł 西çľģ
æķĪ èĥ½
å͝ æľī
éĿ¢ è²Į
èĩªåĬ¨ 驾驶
æ¦ľ åįķ
å½ĵ æĪij们
仲 è£ģ
æľ¨ æĿIJ
ç±³ åħ°
çϽ éĵ¶
çļĦ 人éĥ½
å°± åĥıæĺ¯
æŃ¥ åħ¥
åįł ç͍
åĩ» è´¥
让 大家
ä¼ļ è®©ä½ł
åİ¿ æĶ¿åºľ
è¦ģ ç͍
çŃī å½¢å¼ı
åįĩ é«ĺ
责任 æĦŁ
å¤ĩ ç͍
ä»ĸ 认为
æ¸ħåįİ å¤§åѦ
ä»ĸ èĩªå·±
éĸ± è®Ģ
太平 æ´ĭ
éĶģ å®ļ
çŃ Ĩ
è¿Ļ çīĩ
æī§ æĶ¿
è¿ĶåĽŀ æIJľçĭIJ
å°± æŃ¤
éģĩ åΰäºĨ
å¼Ģå¹ķ å¼ı
管çIJĨ éĥ¨éŨ
å§¿ åĬ¿
设 æĥ³
åĽĽ åŃ£
æĬĢæľ¯ 人åijĺ
å·® çĤ¹
è¾ŀ èģĮ
èĢģ 師
çļĦ æĦŁåıĹ
ä¹Ł éĿŀ常
å¹´ ä¸ĬåįĬå¹´
æĢª çī©
èĮĥ æĸĩ
æĪĺ å½¹
åIJ« ä¹ī
åħ¨ è¿ĩç¨ĭ
èĢĮ éĿŀ
éĢļ讯 åijĺ
è¿Ļæł· æīįèĥ½
æľº ç»Ħ
è£ ı
çķ¶ çĦ¶
èµĮ åįļ
åIJĦ æľī
å·¥ä½ľ æľºåζ
äºĭ åIJİ
åī§ éĻ¢
å±Ĭ æĹ¶
åĺ´ éĩĮ
主 线
ä¸Ģ åľĪ
主è¦ģ åİŁåĽł
å°¸ ä½ĵ
åĮ»çĸĹ åĻ¨æ¢°
ä½ł æĢİä¹Ī
ä½Ĩ çͱäºİ
æĹ¶ 空
çĶ· æľĭåıĭ
çĶľ èľľ
é«ĺ åľ°
æĻ ĸ
èĴIJ éĽĨ
åĩĿèģļ åĬĽ
å¤ĩ åıĹ
æĸĩ åĪĽ
马 æĿ¥
马æĿ¥ 西äºļ
æŁ´ æ²¹
使 人
æķĻ ä¼ļ
ç§ĭ 天
æĺİ çıł
åħŃ åįģ
çݯå¢ĥ ä¸Ń
æ¸ħ æĻ¨
积æŀģ åıĤä¸İ
å·ħ å³°
为 æľŁ
çѾ åŃĹ
æĦŁ æ¿Ģ
ç§ĭ åŃ£
æĿij åŃIJ
æ¢ħ 西
æļ´ 鼨
çĶŁæ´» åľ¨
çªĹ æĪ·
æģ¶ åĬ£
纯 粹
åľ¨ æİ¥åıĹ
没 èĥ½
è¡Į 人
åĭ º
æĭ¨ æīĵ
ä½ľ åĩºäºĨ
çļĦ 主é¢ĺ
æľª ä¾Ĩ
ä¸Ń æľĢ
æ¾ ľ
é«ĺ è¡Ģåİĭ
åħ´ èµ·
æŃ£ èĥ½éĩı
åŁ¹è®Ń çıŃ
æİ¥ åħ¥
çĦ¶åIJİ åĨį
åѦçĶŁ 们
é¢ĨåħĪ çļĦ
çģ« çĥŃ
ä¸ĵ èģĮ
æĪĸèĢħ 说
建 è¨Ń
é» ı
对 åħ¬åı¸
çī¹ æľīçļĦ
åħī èį£
å½ĵ åľº
éĿ¢ åŃIJ
èµĦ产 管çIJĨ
æĹ¶æľŁ çļĦ
çŀ İ
åįİ ä¸ľ
åıĪ ä¸Ģ次
èĥİ åĦ¿
å®ļ çĤ¹
头 çĹĽ
æ¶² ä½ĵ
æĺ¯ä¸Ģ ä½į
帽 åŃIJ
å¹´ èµ·
ä¸į ä½İäºİ
è¾ĥ å°ij
éĿ¢ä¸´ çĿĢ
å±Ĥ å±Ĥ
èĿ´ èĿ¶
èī° èĭ¦
éĺ¿ æł¹
éĺ¿æł¹ å»·
æ¦Ĥ æĭ¬
请 éĹ®
èµ· åºĬ
å±Ģ å±Ģéķ¿
稳 åģ¥
å¦Ĥæŀľ æĪij们
éħĴ ç²¾
æĪ· åı£
æĦŁ æĤŁ
æĪij们 éľĢè¦ģ
æĬĢ èīº
èĩª åªĴä½ĵ
è¿Ľ åĮĸ
æ¿ĢçĥĪ çļĦ
ä½ĵ 温
èļ ķ
èĩ´ è¾ŀ
宪 æ³ķ
ä¸Ģ çŃīå¥ĸ
çĵ¶ é¢Ī
æĥł æ°ij
èµ° è·¯
çݰ ä»»
åķĨ éĩı
ä¸ĭ 车
åĪ ł
責 任
èŀįåIJĪ åıijå±ķ
ç´ł æĿIJ
æ²¹ ä»·
åģļ 人
çŀ ª
æĶ¹éĿ© åĪĽæĸ°
çļĦ åĮºåĪ«
è·¨å¢ĥ ç͵åķĨ
æ¶īåıĬ åΰ
æīĺ 管
æĪij è¿ĺæĺ¯
åĿIJ æłĩ
ç½ij 讯
å½ĵåľ° çļĦ
追 溯
åľŁ è̳
åľŁè̳ åħ¶
åºķ ä¸ĭ
åĩł åįģå¹´
ç©¿ è¿ĩ
çĶŁæĢģ æĸĩæĺİ
æİ¨ èĸ
æİ¨èĸ ¦
éł Ĩ
åĴ³ åĹ½
åĪĨ æĪIJ
çĹķ 迹
æĪ· ç±į
éĥ½ ä¸įèĥ½
æĻļ ä¼ļ
åĢ ©
ä½ĵ åĬĽ
è¿Ļ个 èģĮä¸ļ
æĹł å½¢
åıª æĥ³
è¿Ľ åıĸ
æĿĢ æŃ»
èĦ Ĭ
äºij åįĹçľģ
æľª çŁ¥
ç¾İ èģĶ
ç¾İèģĶ åĤ¨
å¤ĸ å½¢
诱 æĥij
çĽ £
è¡Į 使
åłĨ 积
çĨŁ ç»ĥ
éĺIJ è¿°
æľĢ大 éĻIJ度
å·¡ æŁ¥
夺 åĨł
ä¼ģä¸ļ æĸĩåĮĸ
çĭ® åŃIJ
ä¿Ŀ å®Ī
ä¸ºæł¸å¿ĥ çļĦ
æī© æķ£
åζéĢł åķĨ
æŁĶ 软
为ä¸Ģä½ĵ çļĦ
游 çİ©
çĶŁ çĹħ
幫 åĬ©
åͱ æŃĮ
æīį åı¯ä»¥
宽 æĿ¾
è¦ģ æ¯Ķ
æĺ¯ æĢİæł·
çģ° èī²
çİĭ åĽ½
æIJħ æĭĮ
计 éĩı
åij¨åĽ´ çļĦ
æĻºèĥ½ æīĭæľº
常 åĬ¡
常åĬ¡ åī¯
é© ´
å°Ĩ è¿ij
寻 常
ä¸ŃåĽ½ å¸Ĥåľº
容 åύ
å±± ä¸Ĭ
èĥĮåIJİ çļĦ
亲 å¯Ĩ
æīĢ以 说
éİ ®
çļĦ çIJĨçͱ
大 åŁİå¸Ĥ
常 年
æĹħ游 ä¸ļ
å°±æĺ¯ è¿Ļæł·
åĨį æĿ¥
é«ĺ ä½į
åĨħ 饰
æŀĦ éĢł
ä¸Ģ èµ·æĿ¥
çͳ è«ĭ
å·²ç»ı å¼Ģå§ĭ
çļĦ åĬ¨ä½ľ
被 迫
éģį å¸ĥ
åīĸ æŀIJ
å°ı äºĭ
å¿ĥ ä¸ŃçļĦ
ä½ĵåζ æĶ¹éĿ©
çļĩ å®¶
æķĻ åłĤ
åIJĥ å®Į
åĽ½æ°ij åħļ
æĺİç¡® äºĨ
åıijå±ķ è§ĦåĪĴ
第ä¸Ģ æŃ¥
å¾Ĺ èµ·
åľ¨ åĵª
çļĦ è·¯ä¸Ĭ
é» Ķ
çķ¶ æĻĤ
大åĬĽ æĶ¯æĮģ
åıĮ éĩį
çŁ¥éģĵ èĩªå·±
åIJĪä½ľ åįıè®®
æ°Ķ åĬ¿
éķ¿æķĪ æľºåζ
ç½ķ è§ģ
åĽŀ æĿ¥äºĨ
ä»ĸ ä¼ļ
ä¸Ń æĸ°
ä¸Ńæĸ° ç½ij
çļĦ åķĨåĵģ
èµł éĢģ
決 å®ļ
å¸Ĥåľº çĽij管
çķĻ åѦçĶŁ
ç͵ åİĭ
äºļ 马
äºļ马 éĢĬ
è¿ĺæĺ¯ æ¯Ķè¾ĥ
ä¿ĥè¿Ľ äºĨ
æµģ åħ¥
æijĦ åĥı
æijĦåĥı 头
æıIJ åıĬ
åıij æİĺ
æī¾ åĩº
æ¢Ŀ ä»¶
ç¹¼ çºĮ
æĪij åĸľæ¬¢
å¥ İ
æ¦ľ æł·
å¼Ģ èĬ±
æ²ī éĩį
åŁº åĩĨ
ä»ħä»ħ æĺ¯
轨éģĵ 交éĢļ
åĶIJ å±±
çŃī ä¸Ģç³»åĪĹ
ä¸įè¿ĩ æĺ¯
åŃĺåľ¨ çĿĢ
èĬ± çĶŁ
å¤ ·
ç»Ī ç©¶
ä¹Łæĺ¯ ä¸Ģ个
åįģ åŃĹ
èĸª éħ¬
伤 å¿ĥ
æĺ¥ ç§ĭ
åĨ· åį´
ç²¾ çģµ
çļĦ åľ°åĽ¾
æ¯Ķ çī¹
æ¯Ķçī¹ å¸ģ
æĢ§ åĪ«
ä½Ļ ä¸ĩåħĥ
ä¸įå¿ĺ åĪĿå¿ĥ
å¿ĥ çĸ¼
æĽ² 线
é«ĺ ä½İ
è¦ı å®ļ
æĻ¯ èī²
è¦ģ 说
åħ¬åı¸ å°Ĩ
æ¶² åİĭ
è¿Ŀ 约
åİļ 度
åºŀ 大çļĦ
è¿ĺæĺ¯ å¾Ī
é¦ĸåħĪ æĺ¯
çµ ²
åĬ¡ å®ŀ
並 ä¸Ķ
å¢ŀ è¿Ľ
ç»Ħç»ĩ å¼Ģå±ķ
èµ·æĿ¥ äºĨ
è¾ĥ å°ı
导 游
两 åľ°
ç¿ ĺ
çģ¿ çĥĤ
é£İ éĩĩ
æĶ¯ 线
æĶ¯çº¿ ä»»åĬ¡
娱ä¹IJ åľĪ
天津 å¸Ĥ
åĮħ åĽ´
æľ¬ èµĽåŃ£
éĩįè¦ģ 讲è¯Ŀ
åıĮ åIJij
åįİ ä¸½
éĶ ¤
åĦ¿ 女
åįĸ åĩº
ä¾Ĩ 說
ä»ĭç»į ä¸Ģä¸ĭ
åIJ¦ 认
åĭ Ŀ
æĻ®éĢļ 人
çļĦ åĬ¨åĬĽ
涨 åģľ
åŁºéĩij 管çIJĨ
ä¸Ģ个 éĩįè¦ģ
è¿IJ æ²³
çħ ŀ
è´¢æĶ¿ éĥ¨
è¡Įä¸ļ åįıä¼ļ
éĥ½ å°Ĩ
è¨Ģ 论
ä¸ĭ ä¾Ĩ
墨 西
墨西 åĵ¥
åĽłä¸º ä»ĸ们
æĢİä¹Ī åĽŀäºĭ
åĬłå¤§ 对
èĬ Ń
çīĮ åŃIJ
ä¼ļ 使
妹 åŃIJ
ç«Ļ éķ¿
å¿ħ å¤ĩ
æłij æľ¨
æģ¶ æĦı
æ²³ éģĵ
å¯Į è£ķ
ç¹ģ åįİ
代表 åĽ¢
æµij 身
é¦ĸ ä½į
èĪªç©º åħ¬åı¸
鼻 å½±
ä¸ĵ è¾ij
æ°´ æºIJ
ä¸Ń æ¯Ĵ
並 ä¸į
èĢĮ åİ»
é ĥĿ
äºİ æŃ¤
æĸĩåĮĸ 建设
èĤ¯å®ļ ä¼ļ
å¸ĮæľĽ 大家
æıı åĨĻ
ä½İ è°ĥ
æĸ°åħ´ 产ä¸ļ
æ·Ħ åįļ
æĶ¾ å¼Ģ
çļĦ æĢ§æł¼
çĸ¾çĹħ çļĦ
æķ´ é¡¿
线ä¸Ĭ 线ä¸ĭ
éĢī 项
çļĦ 认åı¯
æķ´ é½IJ
çĶļ ä¹Ī
çľģ åĨħ
åı¤ 人
æ°ij ä¿Ĺ
çī¡ ä¸¹
éŨ çªĹ
éĤ£ æł·çļĦ
çĽijäºĭ ä¼ļ
ç¿¡ ç¿ł
ç¦ ¹
åįĥä¸ĩ ä¸įè¦ģ
æĶ¶ 缩
çļĦ æĸĩåŃĹ
åĴĮ å°ļ
æĮĩ 令
åħ±äº§ åħļåijĺ
çļĦ çĪ¶äº²
å®Į å·¥
åĬ¡ å·¥
马 æĭī
马æĭī æĿ¾
æµĭ è¯Ħ
å² ļ
ä¸į åģļ
ä¸ĥ å¹´
åĿĩ ä»·
主 è§Ĥ
å¾Ī ä¸įéĶĻ
èĤ¡ä¸ľ 大ä¼ļ
äºĶ ä¸Ģ
é£İ åIJ¹
å¼Ģ éĩĩ
è¿Ļä¹Ī 大
èĥ½ çľĭåΰ
èĢĥ è¯Ħ
åį³ ä¾¿æĺ¯
çݰ代 åĨľä¸ļ
æ¯Ķè¾ĥ é«ĺ
è¦ģ çľĭ
没 äºĨ
解 決
çݯ æ¯Ķ
åĨ² åĬ¨
æ·± å¤ľ
åĩł åįĥ
ä¿ ı
ç½ij æ°ij
就 没
ä»ĸ 表示
éĩı åŃIJ
æĹ©é¤IJ åĬłçĽŁ
åįĬ å²Ľ
æIJŀ ç¬ij
ä¸Ĭ æĬ¥
å¯ ©
é¢Ħ 订
èľĤ èľľ
æŁ¥ æī¾
ä¼Ĺ æīĢ
ä¼ĹæīĢ åij¨
ä¼ĹæīĢåij¨ çŁ¥
æĹ© æĹ¥
åıij æī¬
åĴĮ 个人
åĬłåħ¥ äºĨ
åĸ® ä½į
åĪĨ æĺİ
第ä¸Ģ æī¹
ç¾İ åĨĽ
æĿĢ æīĭ
éŨ å¤ĸ
åķĨ åľĪ
ä¸Ģ åĪ»
çļĦçľ¼ ç¥ŀ
éľ Ħ
äºĽ ä»Ģä¹Ī
åĬł æ·±
æ¯ı ä½į
å¸Ĥ éĿ¢ä¸Ĭ
åıĶ åıĶ
çļĦ éĤ£ç§į
粤 港澳
è´´ å¿ĥ
æĸĩåĮĸ 产ä¸ļ
红 æĹĹ
åĺī åħ´
æĶ¶ çĽĺ
å®ĮæĪIJ åIJİ
ä¼ģä¸ļ 管çIJĨ
纵 横
ä¸į ä¿¡
æĪIJ éĥ½å¸Ĥ
æ´Ĺ 澡
举è¡Į çļĦ
çĶ¢ çĶŁ
ç©¿ ä¸Ĭ
åĪļ 好
åħī 线
æīĵ æŀ¶
è¿Ļ æľ¬ä¹¦
åĶ®åIJİ æľįåĬ¡
åĩł åĪĨ
ä¸Ĭ 次
ä¸į åĪĨ
产 åIJİ
éģ¿ å¼Ģ
ç»Ī æŀģ
代表 大ä¼ļ
æ¼Ķ æĬĢ
åĽŀ è´Ń
åѦ è´¹
éĺ» ç¢į
ä¸Ģ大 æī¹
ç«£ å·¥
åĨ³ å®ļäºĨ
ä½Ĩ å¦Ĥæŀľ
ç͵ æµģ
ä¸Ŀ 毫
èĥ½å¤Ł åľ¨
éĶĢåĶ® æĶ¶åħ¥
åľ¨ åŃ¦æł¡
æ°´ åĩĨ
è§Ĩ 线
èĩª åľ¨
åķĨä¸ļ éĵ¶è¡Į
为äºĨ 让
çį² å¾Ĺ
çݩ家 æľĭåıĭ
éĿ¢ èĨľ
åĪĨ åī²
åī§ æľ¬
ç« Ń
说 å¾Ĺ
æĥ³ çŁ¥éģĵ
çļĦ人 çī©
èĮħ åı°
åIJĮ ä¸Ģ个
æķ°æį® ä¸Ńå¿ĥ
çĶ Ħ
åĸľ æĤ¦
ä¸ĭæĿ¥ çļĦ
å®ļ åIJij
æŀģ åħ·
çļĦ åľŁåľ°
éĤ£ åĢĭ
æijĦ åħ¥
äºĨ æĪijçļĦ
马 路
åħ¨ 社ä¼ļ
è®® æ¡Ī
å±ĭ åŃIJ
åIJį åı«
åĮ ª
åľ¨ å¤ĸéĿ¢
åįİ åįĹ
åıij è´§
å¯Ĵ åĨ·
é«ĺçŃī æķĻèĤ²
详ç»Ĩ çļĦ
个 é¡¹çĽ®
çĶŁäº§ åĬĽ
æĹ¶ 常
å°± æľĥ
ä¸ĩ èĤ¡
éĻĮçĶŁ 人
æıı ç»ĺ
å½ĵ çĦ¶æĺ¯
æĭī åĬ¨
éĵ¾ æĿ¡
æī£ éϤ
ä¸Ģ缴 éĥ½
å°ı åŃ©åŃIJ
伤 åı£
第äºĮ å±Ĭ
è´Ń ç½®
çļĩ 马
æĹł èģĬ
表 åĨ³
诸 å¦Ĥ
åĵį èµ·
é£İ æļ´
ä¸Ģæµģ çļĦ
ç ·¨
è§£æĶ¾ åĨĽ
室 å¤ĸ
å°± è¿Ļä¹Ī
å³ ¶
æīĢæľī 人éĥ½
æIJľç´¢ å¼ķæĵİ
çļĦ æĪIJæľ¬
åħļ æĶ¿
åıijè¡Į 人
çļĦ äºĭå®ŀ
对 该
åıĹ æįŁ
ä¿Ħ ä¹Į
é²ľ èĬ±
åĨľ èį¯
æŀģ éĢŁ
æĢ¥ æĢ§
两 ä¼ļ
ä¸Ģèά æĿ¥è¯´
æµ· é²ľ
åĨ Ī
ç͍ 人
çĶ¨äºº åįķä½į
åĢ ª
åĦª æĥł
æł¹ æºIJ
åĽ¢ è´Ń
ç¾İ æ´²
ä¸ĭ è¡Į
å¹´ æľ«
èľ ¡
è¯ģ ä»¶
åľ¨ æĪijåĽ½
ä¸į åºĶ
æĮī æĹ¶
åłª ç§°
åľº ä¸Ĭ
å¹²éĥ¨ èģĮå·¥
æľī å¾Ī大çļĦ
æķ°åŃĹ ç»ıæµİ
æ¼Ķ ç»ĥ
æį® ç»Łè®¡
å¾Ģ æĿ¥
广åijĬ æľįåĬ¡
çļĦ è·Ŀ离
æŃ ¸
è¨Ģ è¯Ń
被 èªī
被èªī 为
åĭī 强
å°Ĭ æķ¬
ä¸ĩ 亿åħĥ
ä¸ŃåĽ½ åĽ½éĻħ
å¹² é¢Ħ
年 产
èĢķ åľ°
èĮ İ
åį³ æĺ¯
æĺ¨ æĻļ
æĪIJ为 ä¸Ģ个
çºł æŃ£
åij½ åIJį
é¢ģ å¸ĥ
çĮľ æµĭ
ä¿ĿèŃ· æĶ¿çŃĸ
æĭ ¢
æ´» æ³¼
çŃī éĥ¨éŨ
åѦ åΰ
å¢ŀå̼ ç¨İ
èĪª 线
åĨ ¤
åįģ åĩłå¹´
æİ§èĤ¡ èĤ¡ä¸ľ
ä¸Ģ éŨ
个 å·¥ä½ľ
ä¸ªå·¥ä½ľ æĹ¥
æĸ° 西
æĸ°è¥¿ åħ°
论 è¯ģ
ä» Ĩ
åı¦å¤ĸ ä¸Ģ个
æĶ¹ ç¼ĸ
严 ç¦ģ
åĸľ 好
个人 ä¿¡æģ¯
满æĦı 度
åĵ ¨
å¸Ī èµĦ
æĶ¹ 为
ç«ŀäºī 对æīĭ
åĩº çĤī
åķĨ 人
大 æ£ļ
æĮĩ导 ä¸ĭ
å¦ĩ ç§ij
è¼ ª
æī ģ
åIJĮæĹ¶ è¿ĺ
å¹¶ éĢļè¿ĩ
æĪĺ éĺŁ
èĶĵ å»¶
ä¿ ŀ
éĢĤå½ĵ çļĦ
åīį è¾Ī
åĵģ åij³
湿 åľ°
æĪIJ åŀĭ
ä¸į åıªæĺ¯
æĥ© ç½ļ
åĩºåı° äºĨ
çİ© 游æĪı
æīį åıijçݰ
åºĶ èģĺ
å¤ĸ æĿ¥
åįł é¢Ĩ
å±ķ æľĽ
å« Ĥ
港 èĤ¡
æ¡Į ä¸Ĭ
æĶ¯ æŁ±
çļĦæĥħ å½¢
广éĺĶ çļĦ
æĶ¯ è¡Į
å´© æºĥ
æľĪ ä¸Ń
æľĪä¸Ń æĹ¬
ç»į åħ´
临 è¿ij
æĬ¤ æłı
æļ ®
åįķ èģĮä¸ļ
è¾¹ å¢ĥ
æĹ¥ çħ§
ä¸Ģ åłĨ
缴 å¾Ħ
åħ±åIJĮ ä½ĵ
æĸ°åįİ ç½ij
æīĵ 好
ç͵åĬ¨ 汽车
ä¸į æĺİçϽ
éĢĻ è£¡
缼 大
çİĭ æľĿ
åĨį ä¸Ģ次
åĬŀåħ¬ åİħ
è´¨ æĬ¼
åIJĪ åĩ»
人们 对
鼶 é£Ł
éĥ½ä¸į çŁ¥éģĵ
çļĦ è¯Ńè¨Ģ
åĭŁéĽĨ èµĦéĩij
åĬ¨ èĦī
å½ ¤
è¿Ļ åĩłå¹´
çŁŃ è§Ĩé¢ij
太 é«ĺ
常 å§Ķä¼ļ
åĬł çıŃ
éĩį å¿ĥ
åªĴä½ĵ æĬ¥éģĵ
没 æ³ķ
éĹ» åIJį
çĥŃ åº¦
å¹¿æ³Ľ çļĦ
åħŃ å¤§
çī© ä½ĵ
ä¸į 该
é¢ĺ 主
精彩 çļĦ
为 è¿Ľä¸ĢæŃ¥
èĻ ŀ
åĽº çĦ¶
è´µå·ŀ çľģ
çºł ç»ĵ
代çIJĨ 人
æ³ķå®ļ 代表
åı¦ä¸Ģ ç§į
ä¸į åIJ«
æĭ¯ æķij
ä¼ļ ç»Ļ
è¯Ĺ è¯į
åIJĮ ç±»
å¾Ĺ ä¸įåΰ
æĬĵ ç´§
以 åħ¶
åħ¥ åħļ
è¿ĺ åı¯
æľŁ åĪĬ
å¾Īå¤ļ æĹ¶åĢĻ
æĹ¥ åIJİ
åħ¬ 约
ä¸Ģ 举
æ¯Ķè¾ĥ å¤ļ
éĩij æ²Ļ
æį ŀ
æİĴ åĩº
æŃ¦ æľ¯
ä¸į æĸ·
ä¸Ń èĢĥ
ä¿¡ èµĸ
ä»İä¸ļ 人åijĺ
çģ« çĦ°
éĨĴ æĿ¥
ä½İ 温
é̾ æľŁ
åĬ± å¿Ĺ
éħ ¥
åı¯è°ĵ æĺ¯
è¿Ļ æĦıåij³çĿĢ
é¢ł è¦Ĩ
åĮĹ京 大åѦ
ä¸ĵ 线
åıĬ 以ä¸Ĭ
è¨ ª
èĢĮ åIJİ
çŁ¥ ä¹İ
ä¸Ģ对 ä¸Ģ
å¨ĥ å¨ĥ
çģ¾ éļ¾
åħ¨ å±Ģ
æīĢå¾Ĺ ç¨İ
å®ŀ æĥł
èļĤ èļģ
ä¹Ł çŁ¥éģĵ
温 åĴĮ
èIJ½ ä¸ĭ
åŀĭ ä¼ģä¸ļ
åĨį ä¹Ł
ä¾Ľ çĥŃ
é«ĺ æ½®
çĢı覽 åύ
çļĦ 巨大
åħΠ天
å¹´ ä¸ŃåĽ½
类似 çļĦ
çIJĨäºĭ ä¼ļ
空 éĸĵ
çģµ æĦŁ
åĬĽ æ°Ķ
带 ä¸Ĭ
ä¸į好 æĦıæĢĿ
æľī ä½ķ
å·² åľ¨
åıĸ åĩº
è¿Ŀæ³ķ çĬ¯ç½ª
åŃ¦ä¹ł 贯彻
åľ° 带
楼 梯
çŃī æĥħåĨµ
ä»İ åīį
çļĦ ä¹łæĥ¯
ç³Ł ç³ķ
å°± èĥ½å¤Ł
è© ķ
ä¸Ģ å¾ĭ
æĮ« æĬĺ
åİŁæĸĩ åľ°åĿĢ
å½ĵ å±Ģ
ä¸į éĢļ
æķ° åįĥ
éĺŁä¼į 建设
æĹ¶ èĬĤ
åģļ èµ·
çļĦ è®°å¿Ĩ
ç½ij绾 å®īåħ¨
åĩ¡ æĺ¯
æ° ¯
éĽķ åĪ»
åŁĥ åıĬ
æĪij åı¯ä»¥
çĽij çIJĨ
æĽ´ åħ·
åŁİ 管
èĭ ¯
åı¥ åŃIJ
èĭ¥ æľī
ä»İæĿ¥ ä¸į
缸åħ³ è´Łè´£
å®īåħ¨ æĦŁ
æĽ´ è¦ģ
çļĦæĥħ æĦŁ
çī¢ çī¢
è¾ĥ 好çļĦ
æ° ®
ç¬ij è¯Ŀ
车 å±ķ
ä¹ĭ ç¾İ
ç®Ģ 约
ç±»åŀĭ çļĦ
èĢģ åĮĸ
çľĭ ä½ł
è¿ĩ åĪĨ
éŨ åīį
ä¸Ģ éĹ´
æĥ³ åİ»
åª Ľ
åľŁ è±Ĩ
åıĪ ç§°
ä¸Ń ä¿¡
åŃĺ éĩı
马 äºij
èĩ´ 使
åħĪ åīį
èĢģ åŃIJ
æīĵ æī®
æ¯ķä¸ļ äºİ
æ¯ķä¸ļ åIJİ
ç¾İ好 çĶŁæ´»
å·¥ä¸ļ ä¼ģä¸ļ
就好 äºĨ
èħIJ èļĢ
çıį çıł
åΰ è¿ĻéĩĮ
æīĢéľĢ çļĦ
è¿Ļæĺ¯ åĽłä¸º
çIJĨæĥ³ çļĦ
å·®å¼Ĥ åĮĸ
é ®
é® ®
äºļ 太
æĹł ç©·
æıIJ çݰ
ä¸ĵä¸ļ æĬĢæľ¯
çĶ¢ æ¥Ń
åѦ åŃIJ
ç§ij å¹»
åįłåľ° éĿ¢ç§¯
ä¸į åĩĨ
æľªæĪIJ 年人
æĶ¶ å½ķ
è¿ĺ 款
éĴ¢ çŃĭ
æ¼ ¢
å¾Ĺ æĦı
综åIJĪ ä½ĵ
æŀģ é«ĺ
åįķ è¯į
é«ĺæķĪ çļĦ
骨 头
æī§ çĿĢ
缼 ä¸ĸ
模 çī¹
æĽ´ èĥ½
ç»Ŀ æľĽ
对åºĶ çļĦ
æ¨ Ĭ
æĸ° ä¸ī
æĸ°ä¸ī æĿ¿
æģ° æģ°
åIJį å®¶
æł¸å¿ĥ æĬĢæľ¯
个 å°ı
æĢİä¹Ī ä¼ļ
说 ä¸įå®ļ
西 çĵľ
åĵ İ
ç¢ Ł
å¿ħ ä¸įåı¯
å¿ħä¸įåı¯ å°ij
ä¹ĭ éĸĵ
åĪĨ 管
交éĢļ äºĭæķħ
å¼Ģ åĬŀ
å¾ģæ±Ĥ æĦıè§ģ
äº ¨
鼻åŃIJ éĥµ
鼻åŃIJéĥµ ä»¶
ä¿¡æģ¯ æľįåĬ¡
ä½ł è§īå¾Ĺ
缴 è§Ĥ
å·² å®ĮæĪIJ
åĪĨ ä¼ļ
åĽŀ åįĩ
éļ »
好 人
äºĨè§£ ä¸Ģä¸ĭ
åį« æµ´
æľĢ çα
åºŀ 大
客 æĪ¿
çijŀ åħ¸
éĥ½ ä¸įæĺ¯
é¤ ¨
èĹ ī
çļĦ åIJĦ项
为 缮æłĩ
çļĦ è®¤çŁ¥
å½±åĵįåĬĽ çļĦ
夸 å¼ł
佩 æĪ´
æ±ĩ çİĩ
çļĦ çαæĥħ
æĺ¥ é£İ
æĺ¯ æĪijçļĦ
æ¨ ¹
åįĬ å°ıæĹ¶
å±± åİ¿
å±± 西çľģ
èĢĮ è¿Ļ
æĽ´å¤ļ ä¿¡æģ¯
è¿ĺ æľīä¸ĢäºĽ
ç²¾ ç»ĨåĮĸ
ç¾İ åѦ
çͱ æĸ¼
ä»ħä¾Ľ åıĤèĢĥ
å¾Ī é«ĺçļĦ
åıł åĬł
è¿Ļä¹Ī 说
å±ķ åĩº
åĽĽ å¤Ħ
ä¸ĩ å®¶
æĭĽ åĭŁ
çļĦ 强大
æĤ£ æľī
å°ı äºİ
ä¹Łè®¸ æĺ¯
对 èĩªå·±çļĦ
èģĮä¸ļ æķĻèĤ²
æĿ¥ è¿Ľè¡Į
档 次
æīĵ èµ¢
éĥ½æľī çĿĢ
åº ¸
è¯Ń æ°Ķ
çͲ éĨĽ
空 åĨĽ
车 åĨħ
åĽłä¸º ä½ł
å®ŀ æķĪ
æĥħ ä¾£
åıijè¾¾ åĽ½å®¶
éķľ åŃIJ
æ¯į å©´
ä½Ĩæĺ¯ ä»ĸ
积æŀģ æİ¨è¿Ľ
大å¹ħ 度
çļĦ 女åĦ¿
é¤IJ æ¡Į
åIJ¬ å¾Ĺ
çļĦ 积æŀģæĢ§
好 åIJ§
æĹ¥ æ¶Īæģ¯
æľī ä»»ä½ķ
æ¯Ĵ åĵģ
æĹ©çĤ¹ åĬłçĽŁ
第ä¸Ģ 天
å°½ åĬĽ
æł ĸ
主 æīĵ
æĺ¯ä¸Ģ åIJį
çĪĨ æĸĻ
äºĭä¸ļ åıijå±ķ
å¾® åķĨ
äºİä¸Ģä½ĵ çļĦ
çĶŁ çĮª
èĩªçĦ¶ èµĦæºIJ
çŀĦ åĩĨ
è§Ħ模 åĮĸ
å¹¶ ä¸İ
èĤ¥ èĥĸ
å®¶ ç͍
大 çĪ·
é¢Ħ åijĬ
æĿ¥ åģļ
éĺ³ åİ¿
æŀĦ çŃij
é¢ģ å¥ĸ
åİĨåı² æĸĩåĮĸ
æľįåĭĻ æĪĸ
æĢ» åĨ³èµĽ
åıij åŀĭ
æĪij 羣çļĦ
æĽ ¦
åıĤ ä¼ļ
èĦĨ å¼±
åĩĨ åħ¥
èħ¹ éĥ¨
åı¸ 令
æĤ² åī§
天 ä¸Ĭ
åı£ ä¸Ń
ä¸ĩ 个
åѦ ä¸ļ
æıIJ åĢ¡
两 边
大 èĤ¡ä¸ľ
åı¤ éķĩ
è¡Ģ ç³ĸ
çļĦ ç¨ĭ度
æ£ī èĬ±
åIJİ åı°
å°± åĮ»
æķ´ æķ´
èĴ ²
çĽĪåĪ© èĥ½åĬĽ
ç± ½
èĦ «
çľĭ éĩį
å®¶ éķ·
èģĺ ç͍
èµĽ éģĵ
åīį èĢħ
建 èѰ
å¾ĭå¸Ī äºĭåĬ¡
èīºæľ¯ åĵģ
æľī èĩªå·±çļĦ
åIJ¦ å®ļ
社 åĽ¢
åij¨ äºĶ
带 åΰ
å·¥ä½ľ ä¼ļè®®
èĤ¡ æľ¬
å¤ĸ åĮħ
å®¶ åħ¬åı¸
çĽij çĭ±
èĪ Ĭ
åIJį æł¡
西 æ¹ĸ
è¶ħè¿ĩ äºĨ
åįĹ å±±
ç»Ħ ä»¶
å̼å¾Ĺ 注æĦı
æĮ£ æīİ
äºĭ 迹
ç¶ĵ çĩŁ
ç§ij 室
好 åIJĹ
æ¤ħ åŃIJ
åľĪ åŃIJ
ä½Ĩ 她
æµģ çķħ
åIJĦèĩª çļĦ
èģĮ åijĺ
è¡į çĶŁ
åħ¨ åľº
æĴ¤ éĶĢ
åį´ è¢«
å®ģ éĿĻ
åīį æīĢ
åīįæīĢ æľª
åīįæīĢæľª æľī
主 ä¸ļ
åĮĹ ç¾İ
è¯Ħ å®ļ
åĵģ å°Ŀ
大家 éĥ½åľ¨
主 å¸ħ
ç»Ĩ å¿ĥ
ä¿¡æģ¯ æĬ«éľ²
çļĦ ç«ŀäºī
éĢĻæ¨£ çļĦ
ç§ijåĪĽ æĿ¿
éĩĩ æijĺ
票 æį®
éĢIJ å¹´
èĭ± è¶ħ
è¡Įä¸ļ åĨħ
人 寿
åIJİ åĭ¤
å¦Ĥ æĦı
ç¬Ķ è¯ķ
æ·¡æ·¡ çļĦ
ä¸į èĪĴæľį
ä½ĵ 积
ä¹Łä¸į è¦ģ
éĿ¢ æĸĻ
æł· æľ¬
ç¥ ģ
æĮī è§Ħå®ļ
大æ¦Ĥ æĺ¯
æĥħåĨµ è¿Ľè¡Į
åIJĦ åįķä½į
çļĦ ç¬ij容
åĩºèī² çļĦ
代表 æĢ§
çļĦ ç¾İ好
éĴ ¦
å¾® çĶŁçī©
è¶Ĭ æĺ¯
æĸ¹ åı¯
å¹² èĦĨ
éģĬ æĪ²
çļĦ åħ´è¶£
éĹ® è´£
åĽłä¸º æĪij们
èĢĥ éĩı
çĶŁ çĶŁ
éĺ» åĬĽ
ä¸į åħģ许
æıIJ è®®
åĩı æĮģ
åıªæĺ¯ ä¸Ģ个
æĪij æĬĬ
åıijçݰ èĩªå·±
å¢ŀ å¹ħ
å¦ į
èĹĿ è¡ĵ
ä¸Ģå®¶ 人
åĪĨ 级
çļĦ æķ°éĩı
è½® èŀįèµĦ
çŃī åĽłç´ł
大 夫
èģĺ 请
é£İ æľº
绽 æĶ¾
ä»»ä½ķ ä¸Ģ个
éł Ĥ
éĺ¶ çº§
æĬĬ 她
è¿Ľ åĨĽ
èĥ½ åģļåΰ
åŁ¹è®Ń æľºæŀĦ
çī© æĸĻ
ç«¥ è¯Ŀ
æĮĩ导 æĦıè§ģ
éĺ ®
æ·±åħ¥ æİ¨è¿Ľ
主 æľº
æ¸Ķ ä¸ļ
ä¸į æľį
æµĵ éĥģ
è¡Ĺ ä¸Ĭ
ä¾Ŀ 次
æĹ¶ 段
æ¢ µ
çļĦ åĸľçα
å¾Ī éķ¿
åĪĿ 级
æŀľ æĸŃ
æĬ¢ æķij
é¼ĵ èĪŀ
ä¾Ľ éľĢ
æ·±åħ¥ å¼Ģå±ķ
产ä¸ļ éĽĨ群
åĻª éŁ³
åIJ¬ çĿĢ
æ·±åĪ» çļĦ
å¿į åıĹ
ç͵ ç£ģ
强 èĢħ
æ»ĭ åij³
æĽ¼ èģĶ
åı¯ä»¥ 缴æİ¥
大 米
æŃ· åı²
æĶ¿åĬ¡ æľįåĬ¡
åħ¬ å¼ı
社 群
éģĵ士 èģĮä¸ļ
ä¹ĭ æĥħ
æµ· æ°´
æ¼Ķ å¥ı
åºĹ éĩĮ
迹 象
åıijå±ķ çIJĨ念
é«ĺ 空
åij¨ åĪĬ
åĽŀ åΰäºĨ
ä¸į éĢĤåIJĪ
åłµ å¡ŀ
åĬ Ī
æ°´ ä¸Ĭ
çĢij å¸ĥ
纳ç¨İ 人
çĩĥ æ²¹
å·¥ç¨ĭ é¡¹çĽ®
峡 谷
æľī éĴĪ对æĢ§
åľĨ å½¢
æľ¬ å¸Ĥ
è¿Ļ è¯Ŀ
管çIJĨ èĢħ
ç¡®è¯Ĭ çĹħä¾ĭ
æĬĬ æīĭ
彩 èī²
ä¸Ĭ åīį
夯 å®ŀ
ç¾Ĭ èĤī
å¾Ģ å¹´
æĵħ èĩª
迷 人
èĪª æ¯į
ç²¾ ç»Ĩ
åľ¨ æĪijçļĦ
åĪĽ æĬķ
麦 åħĭ
æľĪ ç»ı
åĮĹ æµ·
ä¹ĭ æĺŁ
åı¶ åŃIJ
å¸Ĥåľº ç«ŀäºī
è¿Ļ äºĭ
åıĥ èĪĩ
产 åľ°
åĶ ī
åķĨåĵģ æĪ¿
èĪª è¿IJ
ä¼ĺ å¼Ĥ
ä»ĸ们 æĺ¯
鼨 æ°´
è¯į æ±ĩ
åĨľ çͰ
欧 éĺ³
çŁŃ 线
管 ç½ij
æł¹ åŁº
åıªæľī ä¸Ģ个
éŀĭ åŃIJ
å¸Ĥ å§Ķ书记
åĪ» æĦı
è¡Į 车
åıĪ è¢«
åı¯éĿł æĢ§
è´ ±
ä»» åij½
åºĶ åľ¨
å°± å¾Ĺ
æľįåĬ¡ ä½ĵç³»
æĶ¿ æĿĥ
åıijè¨Ģ 人
è¿ĩ å¾Ģ
两 åıª
èϽ 说
éĢģ ä¸Ĭ
ä»Ģä¹Ī äºĭ
æķ£ æĸĩ
æİĮ æİ§
èĸĦ å¼±
ä¸ĭéĿ¢ å°±
主è¦ģ åĨħ容
å¾Ī éĩįè¦ģçļĦ
就 说
çϽèī² çļĦ
éĤ£ä¸ª æĹ¶åĢĻ
ç»ı纪 人
çļĦ æ¯į亲
ç¬Ķè®° æľ¬
åºķ å±Ĥ
è¿ij 代
解 说
è²ł 責
æľĢ大 åĮĸ
åķĨ éĵº
æł¡ åıĭ
æ² ģ
ä¸į åĩºæĿ¥
éĻ· éĺ±
ç¨ ħ
åħ¬å¸ĥ äºĨ
åĩĢ å̼
çĽ¸å¯¹ è¾ĥ
ç¬ Ľ
æł¸ ç®Ĺ
åįİ ä¾¨
æĢ¥ æķij
æĮº 好
åħĴ ç«¥
äºĮ èĥİ
åĩº èĩª
åĿ Ł
æīĭ ä¸ĭ
å± ¡
åĪĽéĢł æĢ§
ä¸¥æł¼ æĮīçħ§
åĨį åİ»
举 缣
人 æµģ
äºĨä¸Ģ 声
å°ıæĹ¶ åīį
è´µ æĹı
éľ ĸ
ä¹Łæĺ¯ éĿŀ常
éĢ ±
çľĭäºĨ çľĭ
ç¹ģ æ®ĸ
èĩ³ æŃ¤
é¢Ħ å¤ĩ
å¾Ī æĺİæĺ¾
æ¼Ķ èīº
åĿIJ çĿĢ
ä¿Ħ åĨĽ
åľ¨ è¿ĩåİ»
ä¹ĭ äºĭ
æĬĵ èİ·
åĿIJ ä¸ĭ
çͱ ä¸ŃåĽ½
ä¹Ł å¼Ģå§ĭ
çŃĶ å¤į
åŀĥåľ¾ åĪĨç±»
éĴĵ é±¼
åIJĦ 種
缸 éģĩ
ä¸įåģľ çļĦ
æī¹ éĩı
éĩįè¦ģ ä½ľç͍
å§Ķ å±Ī
åħŃ å¹´
ä¸ĥ åįģ
ä¹ĭ æĪĺ
é£İéĻ© 管çIJĨ
éŁ³ æ¨Ĥ
è¡ĮæĶ¿ å¤Ħç½ļ
æľ¬ äºĭ
æĴ° åĨĻ
èģļ åIJĪ
éĢĤ æĹ¶
æIJ¬ å®¶
ç¢İ çīĩ
缼 å®´
ç®Ģ æ´ģ
åı¬ éĽĨ
ç®Ģ åĮĸ
åĮĹ京 æĹ¶éĹ´
第ä¸ī å±Ĭ
æĿ¥ åĽŀ
常ç͍ çļĦ
京 津
京津 åĨĢ
梦 幻
è¯ķ è¡Į
æľº åºĬ
åΰ æľĢåIJİ
åĬ© æīĭ
åĪĨ 彩
åĩº åĵģ
åι 车
åIJ¯ åıij
ä¾§ éĿ¢
æ¯ı å½ĵ
缸åħ³ è§Ħå®ļ
ä¸ĸ 人
è´Ń 车
å¿ĥ 缮
å¿ĥ缮 ä¸Ń
äºĶ éĩij
è¿ĺ è®°å¾Ĺ
ä¾Ŀ çĦ¶æĺ¯
æıIJ æ¡Ī
ç͵åķĨ å¹³åı°
åģļ åΰäºĨ
æĿľ ç»Ŀ
å®ī åįĵ
ä¸ĸçķĮ åIJĦåľ°
åīį éĢĶ
æ´Ĺ åĩĢ
å¥ĭ åĬĽ
åŁİå¸Ĥ 建设
å¤ļ åĬŁèĥ½
ä¼ļ éĢłæĪIJ
åıijå¸ĥ ä¼ļä¸Ĭ
ç©¶ 竣æĺ¯
åĪĨ 红
çŁ¥ èŃĺ
éĿ¢ æĿ¿
æĹł 声
æĢ¥ éľĢ
失 çľł
çΏ å¦Ī
äº Ĥ
åħ¨ æĻ¯
ç»ıåħ¸ çļĦ
åī§ ä¸Ń
é¢Ĩ导 ä¸ĭ
åħļ åĨħ
åħ¥ ä¾µ
æĭī æĸ¯
ä¸Ģ å¹ķ
åĬł ä¹ĭ
èĤ Ĩ
èĭ± æł¼
èĭ±æł¼ åħ°
å·§ åħĭ
å·§åħĭ åĬĽ
ä¸Ģ å¿ĥ
èģ Ĥ
å¾Ģå¾Ģ æĺ¯
管çIJĨ å±Ĥ
çĻ» åħ¥
建ç«ĭ èµ·
建 åĽ½
åŃIJ 宫
åºĶ ä»ĺ
æİ¢ ç©¶
第ä¸Ģ ä½į
ä½Ļ å®¶
çŃī æ´»åĬ¨
æīĢ èĩ´
è¾ĥ å¿«
æĺ¯ éĿŀ
æıIJ åIJį
äºĮ èĢħ
åıªåī© ä¸ĭ
åħ¶ä¸Ń åĮħæĭ¬
ç¼ĸ ç¨ĭ
çł´ ç¢İ
ä¸Ń 举
å·¥ä½ľ æĬ¥åijĬ
çѾ åIJį
éħĴ ä¸ļ
çŁ¥ æĻĵ
çĥŃ å¿ĥ
éĿŀ åĩ¡
èIJ¥ä¸ļ æī§
èIJ¥ä¸ļæī§ çħ§
人大 代表
ä¸Ģ个 æĸ°çļĦ
å¨ģ æµ·
éĤ£ 人
涨 价
æ¶Ī çģŃ
éļ¾ å¿ĺ
ç¶ĵ é©Ĺ
åı£ è¢ĭ
ç³» æķ°
æĸĩ ä¸Ń
好 转
æĸ° 鼶åĶ®
讲述 äºĨ
å¼Ģ çĽĺ
çķĻ ç»Ļ
æħ¢æħ¢ çļĦ
æĤ² 伤
æľ¬ æľŁ
äºĨ å¤ļå°ij
è¿Ļ 让
åIJĮ çŃī
æ¸ħ æĺİ
个 åŁİå¸Ĥ
æºĸ åĤĻ
åĩłä¹İ æĺ¯
强 åĬĽ
ä¿ ¯
水 稻
åĽºå®ļ çļĦ
æł¸ åĩĨ
说 æľį
顯 示
è¿Ļ å¥Ĺ
æĻºæħ§ åŁİå¸Ĥ
å±ĭ é¡¶
ä¸į æĿ¥
çĶŁ é²ľ
çŁ¥ æĥħ
æĬķ 身
åijĬè¯ī æĪij们
ä¸ī åĽĽ
ä¸ĩ ä¸Ģ
è¾Ĩ 车
为 ä¹ĭ
åΰ æĹ¶åĢĻ
è¿Ļ æīįæĺ¯
åIJį çīĮ
åºŁ æ°´
åݻ年 åIJĮæľŁ
å¹´ éĻIJ
éģĭ åĭķ
åıĮ çľ¼
è¦ģ ç´§
对 çŃĸ
åľº é¦Ĩ
çϾ ç§ij
è¶Ĭ éĩİ
å¯Į åIJ«
大å¤ļæķ° 人
æľĢ å°ij
åı¬ åͤ
åħ¸ èĮĥ
åĨľ æľº
æŃ£ æĸĩ
åºĶç͍ äºİ
æ·± èĢķ
ä¿ Ń
ä»Ģä¹Ī ä¸ľè¥¿
å¥Ĺ é¤IJ
å½ĵ éĢī
å·¦ æīĭ
è°ĥ çIJĨ
æĻļ é¤IJ
éļ¾ åħ³
åĩŃ è¯ģ
çα 人
æĮĩ è´£
è´£ ç¼ĸ
çļĦä¸Ģ 款
éĵ ²
åįģ 个
èĢ »
æľįåĬ¡ åķĨ
åľ° çĭ±
è¿ŀ å¿Ļ
åĽ° æĥij
çļ ĵ
ä¸į åIJĥ
çİ°åľ¨ å·²ç»ı
çĽĺ çĤ¹
ä¸įåģľ åľ°
管çIJĨ 模å¼ı
è¿Ļ 段æĹ¶éĹ´
æ¤ °
礼 åĮħ
æµģ 转
æī« çłģ
éĽĨä¸Ń åľ¨
æ±Ĥ åĬ©
åįĬ 个
å¿«éĢŁ å¢ŀéķ¿
å¾Ģ ä¸ĭ
è¯Ħ åĪĨ
å°± æĥ³
åķĨåĬ¡ éĥ¨
æľī éĹ®é¢ĺ
èİ· åĪ©
æ¯Ľ çĹħ
æĦŁ åºĶ
èī¯ æĢ§
åĪĨ æŃ§
åĨ ī
æĪij们 çİ°åľ¨
è¦ģ åĬłå¼º
å·§ å¦Ļ
èŀº æĹĭ
åĪĩ æį¢
çĭ Ħ
顺 çķħ
å°¤åħ¶ æĺ¯åľ¨
èĬĿ 麻
éļ¾ è¿ĩ
æĹĹ å¸ľ
å¤į åį°
å¤įåį° ä»¶
å¿ħ éľĢ
对å¤ĸ å¼ĢæĶ¾
éļ¾ åıĹ
åİŁæĿ¥ æĺ¯
ç®Ĺ äºĨ
é«ĺ å±±
离 èģĮ
çµĦ ç¹
çµĦç¹ Ķ
å±ģ èĤ¡
çϾ å®¶
éģĩ ä¸Ĭ
æĺĶ æĹ¥
ä¸į 容
çĽij管 éĥ¨éŨ
主 æĦı
æµģ åŁŁ
è·Į å¹ħ
èĩ³ ä¸Ĭ
åĪ« 说
æĺ¯ æ¯Ķè¾ĥ
å®ıè§Ĥ ç»ıæµİ
å¸Ĥåľº 主ä½ĵ
污æŁĵ çī©
æķij æ²»
丰 æĶ¶
åŃĺ æĶ¾
åĩ Ħ
éĩij å±±
æį¢ äºĨ
ä¸ĵ 人
éĹľ æĸ¼
æĹ¢ è¦ģ
åĽ½ è¶³
éļ ĭ
åıį åĩ»
起 身
åħĪ æĺ¯
å¸ĮæľĽ èĥ½å¤Ł
åζ 订
åºĹ éĿ¢
åĸ Ģ
æķĻ ä½ł
éĻį æ¸©
åĬĽ æ±Ĥ
ä¸ī çϾ
çī© ä»·
丢 失
å¢Ļ ä¸Ĭ
éĥ¨ 份
æł· æĿ¿
ä¹ĭ æĦı
ç½ij å°ıç¼ĸ
ä¸ĸ ä¸Ĭ
è°ĥ è¯ķ
污æŁĵ éĺ²æ²»
å½± éĻ¢
å®Įåħ¨ åı¯ä»¥
éĢļ åħ³
ä¹īåĬ¡ æķĻèĤ²
没æľī åĬŀæ³ķ
èĢ ¿
å¦ ³
æĹł æĥħ
å¾Ĺ çĽĬ
å¾ĹçĽĬ äºİ
æľŁ çĽ¼
娱ä¹IJ åľº
çͲ æĸ¹
ä¸Ģ æ±½
çĹ °
çĸij ä¼¼
æĸ°æµª å¾®åįļ
强 è¡Į
å½ĵ ä»ĸ
èĥ º
ç͍æĪ· æıIJä¾Ľ
åĮº å§Ķ
æĦ¿ æĻ¯
æĬĺ æī£
失 踪
è¿« åĪĩ
åŃĹ æ¯į
åĴ ¯
èªį èŃĺ
ä»Ģä¹Ī æĦıæĢĿ
çĽĴ åŃIJ
å½ķ éŁ³
建设 å·¥ç¨ĭ
ä¸ļ ä½Ļ
å®ŀè·µ æ´»åĬ¨
羣 空
çĤ ĸ
åľ¨ è·¯ä¸Ĭ
主è¦ģ åĮħæĭ¬
该 æĢİä¹Ī
æĢ» æľī
æĢ§ æĦŁ
æ°ij èĪª
å¼Ģ åºĹ
欺 éªĹ
çªģ åĩ»
缺 失
æī§ ä¸ļ
åľ° éģĵ
å¹¶ æĹł
æ°ij åĬŀ
ç»Ħç»ĩ çĶŁæ´»
æĪij å¦Ī
è¨ĺ èĢħ
管 åζ
æī¾ 个
èĹ »
çĤİ çĹĩ
äºĴ åĬ©
æµıè§Ī åύ
çݩ家 æĿ¥è¯´
éĻįä½İ äºĨ
è£ Ķ
æĮ£ éĴ±
åķĨ æľº
æĶ¹ è£ħ
æµģ 浪
æĶ¿ æ³ķ
èĢģ 头
çĶŁäº§ åĴĮ
ç© Ĺ
亲 çα
亲çα çļĦ
å±¥ èģĮ
åŁİ éĩĮ
ç»Ĩ åĪĨ
åĬ³åĬ¨ åIJĪåIJĮ
åľ¨ æĹ¥æľ¬
å¨ģ å°Ķ
åį« è§Ĩ
éĢ£ çµIJ
çĿĢ éĩį
æĬĺ 磨
åĽ¾ 为
çľ ·
å·¥ åºı
æĵ ģ
æĵģ æľī
ç½ijç«Ļ åľ°åĽ¾
çļĦä¸Ģ 大
ç»Ħç»ĩ å®ŀæĸ½
æĬĽ å¼ĥ
åĴĮ æĶ¯æĮģ
æ³ķ åĪĻ
浪 潮
çݰ æľīçļĦ
åĩł çİĩ
为 客æĪ·
åįģ ä¸ĩ
è ¹Ħ
çªģåĩº éĹ®é¢ĺ
åıĥ åĬł
éĥ½ä¼ļ æľī
çĽ ¤
è°ģ éĥ½
æīĭ åĬ¨
缴 è¾¾
çĤ¹ å¤ļ
éĺ¶ å±Ĥ
ä¸į ä½³
éĤ£ 段
滨 海
æĺ¯ åĽ½åĨħ
æĪij å¸ĮæľĽ
åIJĽ åŃIJ
è§Ĥ éŁ³
åģļ é¥Ń
æ±½ è»Ĭ
åħ³ ç¨İ
çľ¼åīį çļĦ
æ°´ éĿ¢
è̳ æľº
追 踪
æİ¨ éĢģ
éĴ± åĮħ
æģ¶ å¿ĥ
æµ· åŁŁ
å· į
å¼Ģ æĿ¥
表 æĢģ
仪 表
å¹³ åİŁ
åįģ å¤ļå¹´
ä¹Ł æĹłæ³ķ
åħ¼ 顾
è¡£ æŁľ
æł½ åŁ¹
æĪ¿ æºIJ
设ç«ĭ äºĨ
ä¸ĩ åIJį
æķ° é¢Ŀ
è¦ģ åĿļæĮģ
åIJīæŀĹ çľģ
请 èģĶç³»
ç»ıåİĨ è¿ĩ
çļĦ æľ¬è´¨
åħ¥ éŨ
æľ¬ æ¡Ī
çİĩ è¾¾åΰ
åı° éĺ¶
éĴ ŀ
æĪij èĥ½
èݲ èĬ±
éĴ ł
ä¸Ģ äºĭ
åİŁ æľīçļĦ
æ¯ı åĢĭ
æ¯Ķäºļ 迪
æ£ĭçīĮ 游æĪı
ä¸įä¼ļ æľī
å½Ĵ æĿ¥
äºĶ çϾ
è¿ĩ é«ĺ
鼷 è¾¾
ä¸Ģèµ· åİ»
æķĻ å¯¼
å°± è¯Ĭ
å°± å¾Ī
ä¸įåIJĮ äºİ
ä¿ º
å¸ĸ åŃIJ
æĶ¿åįı å§Ķåijĺ
çĸ«æĥħ å½±åĵį
åĪĨ è£Ĥ
为ä»Ģä¹Ī ä¼ļ
äºĶ æĺŁ
å°ij åĦ¿
æĬ¢ éĻ©
梦 è§ģ
è®°èĢħ éĩĩ访
å±± è·¯
æĪij 个人
æ²Ļ 滩
è¹ Ń
æĶ¹ è®Ĭ
æĸ°åŀĭ åĨł
æĸ°åŀĭåĨł çĬ¶
åĮ» æĬ¤
åĮ»æĬ¤ 人åijĺ
æµ· å°Ķ
åħ³äºİ æĪij们
éϤ å¤ĸ
åº ļ
宣 åijĬ
ä¸ī åįĥ
æ¦ ¨
ç§ijæĬĢ å¤§åѦ
ä¸ĥ åħ«
顺 åºĶ
çΏçΏ å¦Īå¦Ī
éĢī åıĸ
åī§ çĥĪ
乡æĿij æĹħ游
积æŀģ æİ¢ç´¢
表çݰ 为
å¾Ī æ¸ħæ¥ļ
大 åĨĽ
æĿ¥ ç͵
å¥Ĺ æĪ¿
çݰ è¡Į
享 åıĹåΰ
çľĭ çĤ¹
åĽºå®ļ èµĦ产
以 人为
以人为 æľ¬
ä¸į å®Į
éĻį 鼨
åģļçļĦ äºĭæĥħ
å¹¶ äºİ
顽 强
èĢ ¸
åĺ´ å·´
缸åħ³ ä¿¡æģ¯
æĪij 没
æĪĺçķ¥ æĢ§
æĢĿ 念
åĪĺ å¤ĩ
åĬ© æĶ»
é£İ è²Į
éĿ¢å¯¹ éĿ¢
积æŀģ å¼Ģå±ķ
çĸĹ æķĪ
çľĭ 书
缺 åı£
åĽ½æ°ij ç»ıæµİ
使ç͍ æĿĥ
éģ¥ è¿ľ
å¡« è¡¥
第ä¸ī 人
åįĬ å¤ľ
æŃ¦æ±ī å¸Ĥ
æĪij åıijçݰ
ä¼ĺæĥł æĶ¿çŃĸ
é£İ åı£
å°± ä¸įèĥ½
为 主è¦ģ
æµģ åĩº
å´ĩ æĭľ
å¹¶ ä¸įèĥ½
é«ĺ ä¸ī
ä¸ĸçķĮä¸Ĭ æľĢ
æĥ³ å¿ħ
åħ¶ æīĢ
åĢĻ éĢī
åĢĻéĢī 人
ä¸į çα
åī¯ ä½ľç͍
人æ°ij æĹ¥æĬ¥
æĪij ä¸įæĺ¯
å®ŀ çī©
ç͵ åİĤ
ä¹Ł ç®Ĺæĺ¯
æľī éĹľ
æľī èĥ½åĬĽ
æĮĤ åľ¨
çľ¼ ä¸ĭ
约 翰
å°ı åѦçĶŁ
èµ· åΰäºĨ
工 夫
åIJĮ å¿ĥ
åĿ¦ è¨Ģ
çł Į
åıijæĮ¥ äºĨ
èģĮä¸ļ éģĵå¾·
è¿ĻäºĽ å¹´
念 头
èĢģ é¼ł
åħ¨ èµĦ
åħ¨èµĦ åŃIJ
ä¸Ģ åij³
å¤ļ ä¸ĩåħĥ
æł¼ æľĥ
éķ¿ éĢĶ
带 走
èĭ± 寸
æĸĩ ä½ĵ
对 ä»ĸ们
åĵŃ äºĨ
å¡« æĬ¥
çīĪæĿĥ 声æĺİ
ç͵ 线
è´Ńçī© ä¸Ńå¿ĥ
饱 满
ä½İ 头
强 迫
ä¿Ŀ æ´ģ
欧 åĨł
缸 è¿ŀ
认 è´Ń
çģ« æĺŁ
é«ĺ å°Ķ
é«ĺå°Ķ 夫
èij« èĬ¦
æłĩ 注
çļĦ çIJĨæĥ³
æł¸ éħ¸
æł¸éħ¸ æ£Ģæµĭ
åĬ ī
ä¸Ģèά æĺ¯
æĢĿ ç´¢
轨 迹
çĥŃ å¸¦
éĻ £
åĩĨç¡® æĢ§
æĪ´ çĿĢ
åľ¨ çĶŁæ´»ä¸Ń
æīĢ èĥ½
æľ¯ åIJİ
带 ä½ł
ç¥ ł
æ®ĭ éħ·
ä¹Ł åıªæĺ¯
çͳ è´Ń
举åĬŀ äºĨ
æľī æĦıä¹ī
æĹº 缼
åľ¨ ç¶²
åľ¨ç¶² è·¯ä¸Ĭ
å¾Ī大 ç¨ĭ度
管 è¾ĸ
çĸ«æĥħ æľŁéĹ´
触 æij¸
éĺ¶æ®µ æĢ§
ä¼ļ è§īå¾Ĺ
çļĦ çĶ»éĿ¢
æİ¥åıĹ äºĨ
表达 äºĨ
éĤĵ å°ı
éĤĵå°ı å¹³
åħļ é£İ
åħļé£İ å»īæĶ¿
åķĨ åѦéĻ¢
åħij æį¢
é£Łåĵģ èį¯åĵģ
éĿŀ常 好çļĦ
çľ ¯
纳 米
åĬ¨ æijĩ
åĽŀ éģ¿
çľĭ èijĹ
款 项
åħ« å¹´
åģļ 个
æĸĩ æ¡£
éĩijèŀį ç§ijæĬĢ
åħ¶ä¸Ń æľī
äºĨä¸Ģ ç³»åĪĹ
æĹĹèΰ åºĹ
ç§° èµŀ
éĽ¢ éĸĭ
åζ åĨ·
å®¶ éŨåı£
åįģ å¤ļ
ä¼´ ä¾£
çľĭ çĹħ
æĭī çĿĢ
æī Ĵ
çĸ² æĥ«
å°ijæķ° æ°ijæĹı
åĽ¾ å½¢
è½ §
å¢ŀ éĩı
饲 åħ»
çģ« å±±
æ¯ı 个æľĪ
ä½ľä¸º ä¸ĢåIJį
è½´ æī¿
æĸĩ 书
ç¼ ķ
åħ·ä½ĵ æĥħåĨµ
çĹĽ çĤ¹
缴 éĶĢ
å¡ Ĭ
ä¹Ł æľĥ
çĥŃ æ½®
å¹³ æ°ij
æ¼Ķåͱ ä¼ļ
æķĻ çłĶ
éĢĥ éģ¿
ä¸Ģ è´¯
å°± è¶Ĭ
å®ŀ å®ŀåľ¨
å®ŀå®ŀåľ¨ åľ¨
ä¹łè¿ijå¹³ æĢ»
æº º
å¿ĥ åºķ
éķ¿ å¾ģ
媽 媽
第ä¸ī 次
åĩº æ¼Ķ
çĭĢ æ³ģ
å°Ķ æĸ¯
代çIJĨ åķĨ
çĨ ı
çļĦ 对象
ç͵ éĩı
è¡Į åĪĹ
åĽ½ 人
è·ij äºĨ
åįĶ åĬ©
èIJ¥ è¿IJ
å¸Ī åħĦ
æ¦ ®
æĥ³ åĥı
æĢ§ 强
ç§ijåѦ çłĶç©¶
å»¶ å®ī
ä¸¥æł¼ èIJ½å®ŀ
é¢Ĩ ä¼ļ
缸 å·®
路 人
çĶ «
æľī ä»·å̼
æľīä»·å̼ çļĦ
ç¾İ åĽ¢
æ°ij主 çĶŁæ´»
æĪij æīį
ç¾İåĽ½ 人
æ°Ķ åij³
åıį å°Ħ
çļĦ åĨ³å¿ĥ
大 è±Ĩ
交 代
è¿Ľ åĩº
åıį æĬĹ
æĮĩ çļĦæĺ¯
ä»· ä½į
è¿Ľ é©»
ä¸Ĭ çϾ
ä½į åĪĹ
ä¸ŃåĽ½ ä¼ģä¸ļ
çļĦ好 å¤Ħ
主 ç¼ĸ
æ±½ æ²¹
ä½Ĩ æĪij们
æĢİä¹Ī çľĭ
é»Ħ å±±
å¤ļ åªĴä½ĵ
åIJİ åį«
èİ·å¾Ĺ æĽ´å¤ļ
åĬ¡ å¿ħ
为 å¥ijæľº
é¦ĸ 饰
ä¸ĩ åįļ
è¶ĬæĿ¥è¶Ĭ 大
ä¸ĵ项 è¡ĮåĬ¨
å¥ĭ è¿Ľ
ä»į çĦ¶æĺ¯
è´¨ æĦŁ
å¦Ĥæŀľ ä¸įæĺ¯
ç«Ļ èµ·æĿ¥
ä¹¾ éļĨ
åı¯æĢķ çļĦ
å¯Į è´µ
æ¸ħ ç®Ĺ
åIJij ä¸ĭ
åĢ ļ
çļĦ çŃĶæ¡Ī
èι ä¸Ĭ
çļĦ羣å®ŀ æĢ§
çŃī åĬŁèĥ½
åĸľ åī§
å¨ģ åĬĽ
æĸ° é¢ĸ
æł¸ ç͵
æĬ¥ éĶĢ
æķħ 乡
ä¼´ éļı
éŀ Ń
å¦Ĭ å¨ł
åĪĨ åĮĸ
æľī å¾Ī大
æĢİä¹Ī 说
æĻĤ 代
产 åĩº
ä»ĭç»į 说
å¤ĦçIJĨ åύ
èĨ¨ èĥĢ
åī¯ å¸Ĥéķ¿
çļĦ 妻åŃIJ
æł· åĵģ
åIJĮæ¯Ķ ä¸ĭéĻį
åħĥ å·¦åı³
ç͍ èĩªå·±çļĦ
é«ĺ éĽĦ
æĺ¥ æĻļ
ä¹Ł æľīå¾Īå¤ļ
çľ¼ çIJĥ
æķ£ æŃ¥
ä»ĸ们 éĥ½
第ä¸Ģ å®¶
åĬŀ 好
å®ī éĺ²
ä¸Ģ ä¸ĩ
åľ¨ éĩĮéĿ¢
éŁ³ é¢ij
åı£ åı·
ä¸Ģ è¶Ł
ç¦ı çī¹
é³ ŀ
æĥĬ èī³
æĸ° å¨ĺ
绿èī² åıijå±ķ
ä¸Ń å¼ı
ä¹Ł åıªæľī
çݰ 身
åı¯ ä¾Ľ
æ¯ı ä¸Ģ个人
第ä¸ī èĢħ
åľ° å½¢
éĴ¢ ç»ĵæŀĦ
çĽijçĿ£ æ£ĢæŁ¥
åı« æĪij
èĩ´ æķ¬
æ´Ĺ æīĭ
ä¸ĭ è°ĥ
康 çĨĻ
æĪIJ交 éĩı
ä¹Ł æĪIJ为
åħī æ»ij
å®Įæķ´ æĢ§
çģ ¼
ç¶² éłģ
éķ¿ å¯¿
éģ© ç͍
çļĦä¸Ģ 项
çŀ© 缮
æĬĬ èĩªå·±çļĦ
éĵ¶è¡Į åį¡
å°± å¿ħé¡»
ç¾İ çϽ
éŀį å±±
æľ¬ é¢Ĩ
ä¸Ģ ç¢Ĺ
æīĵ æ³ķ
æĤ¨ 好
对 åŃ©åŃIJ
æĬ¥éģĵ ç§°
ä¼ł åĩº
大 èĩ£
ç¬ ĭ
çĽ ı
é¾ ļ
缴 线
æĻº åºĵ
ç§Ł 车
é£İ åij³
çľĭ ä¸Ģä¸ĭ
æİ¨ éĶĢ
éĥ¨ éĥ¨éķ¿
è´¨éĩı åĴĮ
åĪĬ çĻ»
å·¥ä¸ļ åĮĸ
çİĩ 为
鼶 件
硬 åĮĸ
ä¸Ĭ åįĥ
ç»ıéªĮ å̼
å¹³ è¡Į
声 éģĵ
æľįåĬ¡ è´¨éĩı
çĶŁ çĶ¢
æľĢ 容æĺĵ
ä¸Ģ æŀļ
å¹´ æĬ¥
åħ¬ ç½ij
åħ¬ç½ij å®ī
åħ¬ç½ijå®ī å¤ĩ
çļĦ èĥ½éĩı
å®ŀéĻħ è¡ĮåĬ¨
è¦ģ ä¸įè¦ģ
æĹ¥æľ¬ 人
è̶ 稣
ç¼ĸ åī§
æ¶ ©
åį° å°¼
ä¸Ĭä¸ĭ 游
åĩł åı¥
ä¸Ń éĵģ
ç°¡ åĸ®
èĩª 带
çĶŁ äºİ
ä¸Ģ åı£æ°Ķ
åĭ¤ å¥ĭ
éĻį ä»·
å±ķçݰ äºĨ
å¸ĥ æĭī
ä¼ļ éĢīæĭ©
çļĦ ç»ıåħ¸
好 æľĭåıĭ
车 éģĵ
æķ´ åĢĭ
åľ ĵ
éķ¿æľŁ 以æĿ¥
æĬķ å½±
çļĩ åĨł
è¿ĩ 大
åijĬè¯ī ä»ĸ
ä¼ģä¸ļ æıIJä¾Ľ
æĬ½ 象
éĢĤ 度
çļĦ 女åŃ©
èµ· ä¼ı
çļĦ åĬŁæķĪ
ä¸ĵ项 æķ´æ²»
åı¯ éĢļè¿ĩ
ä¸įåIJĮ ç¨ĭ度
å¼Ĥ è®®
åĩĢ èµĦ产
åij Ĺ
ä»Ģä¹Ī åij¢
å·¡ éĢ»
è¸ı ä¸Ĭ
ä½Ĩ å®ĥ
精 度
管 å±Ģ
第ä¸Ģ åIJį
åĨħ åŃĺ
æijĨ åľ¨
åī© ä¸ĭ
主ä½ĵ 责任
çĤ¹ åįĬ
以 èĩ³äºİ
åħ»èĢģ ä¿ĿéĻ©
æĦŁåıĹ åΰäºĨ
çŁ¥åIJį çļĦ
å¯Į 豪
妥 åĸĦ
åŃĻ åŃIJ
éĵ Ĥ
说 èĩªå·±
让 æĤ¨
æķ° æİ§
çļĦçľ¼ åħī
注 éĶĢ
çļĦ çģµéŃĤ
è¿ĺ ä¸įéĶĻ
éĹ® ä»ĸ
èĩªä¸» çłĶåıij
èĵ ĭ
ç´« èī²
åĽ½å®¶ å®īåħ¨
è¾½å®ģ çľģ
ä¹Ł æ¯Ķè¾ĥ
ç¾İ èĤ¡
ä¸įç¡®å®ļ æĢ§
å¿ĥ 头
æĪ ³
级 åĪ«çļĦ
论 述
çļĦ åĽŀçŃĶ
ä¿Ŀè¯ģ éĩij
çŃī è¡Įä¸ļ
幸ç¦ı æĦŁ
æŃ§ è§Ĩ
æľº 票
派 人
èĩ´ åij½
åĺ´ è§Ĵ
æĸ°éĹ» ä¸Ńå¿ĥ
æĶ¾å¼ĥ äºĨ
å®ľ å±ħ
åĨĻ ä¸ĭ
éĹ® çŃĶ
è¿ĻéĩĮ æĺ¯
å¤ļ åľ°
åĮºåŁŁ åĨħ
åīµ æĸ°
çľĭ ä»ĸ
æī§æ³ķ 人åijĺ
åĬ¨ æľº
éŁ³ åĵį
çļĦ åij½è¿IJ
é¡¶ éĥ¨
åĵ Ł
éĥ½ æľĥ
æīĵéĢł æĪIJ
æĦı åĽ¾
çļ ĸ
åĢĴ åħ¥
å·´ èIJ¨
åĬ© åѦ
å¤į åı¤
åIJ¯ ç͍
åĽ½éĻħ å¸Ĥåľº
åĤ¨ èĥ½
é»ijé¾Ļæ±Ł çľģ
ä¹ĺ 车
è¿IJåĬ¨ ä¼ļ
ä¿Ŀ åĪ©
çŁ³ æĿIJ
çµ ®
çĤĴ ä½ľ
çļĦ ä¿¡ä»»
å°± æĪIJäºĨ
åı¯ è§Ĥ
çļĩ ä¸Ĭ
è¿Ļ åĩłå¤©
ä¸Ģ éĶ®
åĨ· åĨ»
ä¿Ŀ åį«
æł¸ æ¡ĥ
åIJĪä½ľ åħ³ç³»
éĢģ åĩº
æĹĹ ä¸ĭçļĦ
åľ¨ ä¹İ
为 广大
åįĪ é¤IJ
ä¸ĵ 访
æĪĸ å°Ĩ
éĿĴå²Ľ å¸Ĥ
å¥Ķ è·ij
æĹ¥ æĬ¥éģĵ
å¥ij åIJĪ
æĸ° æĺ¥
ä¸į å°ıå¿ĥ
两 ä¸ī
æĦıæĢĿ æĺ¯
åĨ· èĹı
çļĦ çĹĩçĬ¶
æĢ§ åij½
è¶ħ æłĩ
å¯Ĩ 碼
ç§ijæĬĢ èĤ¡ä»½
äºĨä¸Ģ æī¹
çĿ£ å¯Ł
åªĴ ä»ĭ
å°Ħ æīĭ
ä¿® åħ»
çīĩ åĪ»
éĢĤåIJĪ èĩªå·±
åıªè¦ģ æĺ¯
åIJĥ è¿ĩ
éĩij éĵ¶
缴 å±ŀ
åѦ éĹ®
åİĭ åζ
çªĹ å¤ĸ
æĶ¶ åΰäºĨ
åħ¨åĽ½ 人大
ä½Ĩæĺ¯ 对äºİ
åľ¨ æķ´ä¸ª
çļĦ èĥĮåIJİ
åĩıå°ij äºĨ
åıį èħIJ
åıįèħIJ åĢ¡
åıįèħIJåĢ¡ å»ī
æĹ ·
åĪĨ æľŁ
åľ¨ æ·±åľ³
æīĵ çĿĢ
æī« ä¸Ģ
æī«ä¸Ģ æī«
æĶ¿åºľ éĥ¨éŨ
æİ¥ è¿ŀ
å±ŀäºİ èĩªå·±
åŃIJ å¼¹
åIJĮæł· æĺ¯
æĢ» åħ±
车 ä¼ģ
æ¢ ĵ
åħ¬ é¡·
åıij 声
éĴ Ľ
èµ°åĬ¿ åĽ¾
主 èIJ¥
åĸ Ķ
æķ°æį® åĪĨæŀIJ
ä¸į è¿ľ
æľī åIJį
æľīåIJį çļĦ
åģ¿ è¿ĺ
å¾Ī ä½İ
è®ĵ 人
èĿ ī
é«ĺ è´µ
å°ij 许
æ° Ł
å¹ ¢
亲 æĥħ
è¿Ļä»¶ äºĭæĥħ
ç͍ é¤IJ
缸åħ³ æĸ°éĹ»
å°± åºĶ该
ç»Ī çĤ¹
æĺ¯ å¤ļå°ij
çĻ» åľº
è¯ķ 管
è¯ķ管 å©´åĦ¿
åģļ 大
åģļ大 åģļ强
çļĦ ä¾ĭåŃIJ
åħ« 个
æĺİ æĹ¥
çĤ ³
èµ° åİ»
éģ º
å¢ ©
ä½ĵä¼ļ åΰ
åĴ ı
ä¸ĭ è¾¾
å¤į åıij
追 éĢIJ
æīĵ åĵį
çļĦ éļ±ç§ģæ¬Ĭ
åħ·æľī ä¸Ģå®ļ
è¿Ļä¹Ī å¤ļå¹´
æłij æŀĹ
æľĢ éķ¿
åIJĮ èĥŀ
åħī æ³½
åŁŁ åIJį
æĮĩ åIJij
åıĹ害 èĢħ
æłij èĦĤ
æľīå¤ļ 大
大 éĿ¢ç§¯
æĹł ç¼Ŀ
æĶ¹ æŃ£
æĽ´å¤ļ çļĦæĺ¯
æľŁ æľ«
æŃ ¼
ä¹ī ä¹Į
éĤ£ ä½ł
çļĦ 第ä¸Ģ个
èĮ µ
å° §
èį «
ä¸įä»ħ åı¯ä»¥
æ¶Į çݰ
æĢ» éĿ¢ç§¯
æĸ°éĹ» åıijå¸ĥ
æ°ij ç͍
就 读
æīĵ è´¥
å¤ĸ è¯Ń
æĪij们 ä¸Ģèµ·
é¢Ħ å®ļ
çĥ¹ 饪
æľĢ 主è¦ģ
æľĢ主è¦ģ çļĦ
çīĮ çħ§
åĽł åħ¶
ä½İ ä¸ĭ
ä¼ļ åIJĮ
è§ģ è§£
éĹ´ éļĶ
æķĻ ç¨ĭ
å° ī
å¸Ĥ ä¸Ńå¿ĥ
åħ³éĶ® æĺ¯
æµ· åįĹçľģ
çī¹åĪ« æĺ¯åľ¨
ä¸ŃåĽ½ 大éĻĨ
åħħè¶³ çļĦ
æĹ¢ èĥ½
åĤ³ çµ±
çijľ ä¼½
åħ¥ åĽ´
æħ¢æħ¢ åľ°
æĬ¥ éħ¬
æī¹ å¤į
å·¥ä¸ļ åĽŃåĮº
ä¸İ åıijå±ķ
èĥ¸ éĥ¨
åľ¨ ç½ij绾
åľ¨ç½ij绾 ä¸Ĭ
交 è°Ī
æĽ´ æĶ¹
åįłæľī çİĩ
ä¸Ŀ绸 ä¹ĭè·¯
è¡ Ľ
çłĶ åΤ
åĪ ª
åĪª éϤ
è¿Ļ åıª
çļĦ æ°Ķæģ¯
åĬł å·ŀ
éĴ §
çIJĨäºĭ éķ¿
ä¸ĸ å®¶
æµģè¡Į çļĦ
å¾Ī æľīåı¯èĥ½
们 éĥ½
ç»ıèIJ¥ 模å¼ı
è¡Įä¸ļ ä¸Ń
éĢļçŁ¥ 书
åij½ é¢ĺ
æľ¬ ç¶²ç«Ļ
æ²Ļ çī¹
åıij åħī
é«ĺ ä»·
å·² çĦ¶
åıĮ åįģä¸Ģ
ä¸Ĭ è¯ī
ç¿ħ èĨĢ
è¿Ļä¸Ģ å¹´
大ä¼ļ ä¸Ĭ
éĩ ī
å®Įåħ¨ æĺ¯
å¾Ĺ 太
ä¸Ģèά 人
è¿ĺ ç®Ĺ
æĬĺ åıł
æĬķ æľº
çĤ¹ çĩĥ
çݰéĩij æµģ
åħĶ åŃIJ
ç½ij æł¼
æİ¥ è¿ĩ
ä¾Ľ è´§
éĺ´ å½±
åİŁ åħĪ
æį £
å·¦ ä¾§
åħĭ æĭī
æīĵ åį¡
ç§ij æ¯Ķ
æ±ĩ éĽĨ
åľ°çIJĨ ä½įç½®
è¯Ħ å§Ķ
ç»ĵåIJĪ èµ·æĿ¥
è¿Ľåħ¥ åΰ
åı¯ è¡Į
åı¯è¡Į æĢ§
让 å®ĥ
åĪ¶åº¦ æĶ¹éĿ©
çĶĺèĤĥ çľģ
åĵ Ĺ
åģı åģı
è¡£ çī©
ç¥Ŀ è´º
æºIJ èĩª
å¹¶ä¸į 代表
åĽ½ 度
好 åĿı
æĿ ĸ
æĿŃ å·ŀå¸Ĥ
湿 度
é² ¸
åįļ 彩
æ³° å±±
æĿij èIJ½
æĸ° èģŀ
èĤ ĭ
åı¤èĢģ çļĦ
çļĦ ç§ĺå¯Ĩ
ä¸Ģ个 éĹ®é¢ĺ
éģı åζ
åįĥ 亿
è¿ĩ 硬
å°Ħ åĩ»
èĩªçĦ¶ æĺ¯
产 åĮº
çĤ¹ çĤ¹å¤´
åı¯ä»¥ 帮åĬ©
说 å®ŀ
说å®ŀ è¯Ŀ
æĪij åıªæĺ¯
ä¹ĭ ä½Ļ
åIJĮæĹ¶ ä¹Łæĺ¯
ä¸ŃåĽ½ éĺŁ
建æĪIJ åIJİ
ä¹IJ è§Ĩ
åij¨ å²ģ
èᝠåºĹ
éĩij åįİ
严éĩį å½±åĵį
è´¨ åľ°
æĹħ éģĬ
åħµ åύ
æķĻèĤ² æķĻåѦ
离 åİ»
åIJĦå¼ı åIJĦæł·
ä»ĭ ç´
ä»ĭç´ ¹
å¼Ģ 头
å°Ĩ èĩªå·±çļĦ
åIJ¬ åĬĽ
ä¿¡æģ¯ ç³»ç»Ł
ä»İ æł¹æľ¬
ä»İæł¹æľ¬ ä¸Ĭ
æİĮ 声
欢 åĸľ
å±ķ åĮº
åķ ¸
太å¤ļ äºĨ
éĹ² ç½®
èĥ¡ èIJĿåįľ
å§Ķ å®£ä¼ł
å§Ķå®£ä¼ł éĥ¨
åįĹ éĺ³
å·ŀ åĮº
ä¸İ æĹ¶
ä¸İæĹ¶ 俱
ä¸İæĹ¶ä¿± è¿Ľ
å«Įçĸij 人
èī¯ å¿ĥ
头 顶
è´¢ æĬ¥
ä½Ľ æ³ķ
å¾ µ
åİŁ ä»¶
åĭ ŀ
çĶ· 篮
å¤ĸåĽ½ 人
è¿Ŀ 纪
æī¾ äºĨ
æįķ æįī
缸 è¯Ĩ
æIJľ éĽĨ
çļĦ ä¼Łå¤§
ä¸ī ç»´
å°±è¡Į äºĨ
çĭIJ æľĪ
çĭIJæľĪ å±±
å¸ĮæľĽ éĢļè¿ĩ
èĢĮ 对äºİ
éĿ¢ å°į
åĨĽ åĽ¢
è¡Ĺ åĮº
æĤ¬ æĮĤ
便 ç§ĺ
æľīä¸Ģ çĤ¹
ä¼ļè®® ä¸Ĭ
ä¸ĭ æīĭ
廣 åijĬ
äºĶ è¡Į
çŃī åĢĻ
ç´§ç´§ åĽ´ç»ķ
æĭ¿ äºĨ
æ¡Į éĿ¢
ç¥ŀ æĥħ
éĽĦ åİļ
çŀ ³
楼 ä¸ĭ
å½ ª
äºĭ åıij
åĨį è§ģ
é¤ ĺ
é¢Ħ åĶ®
åİ» çľĭçľĭ
æĪij们 åºĶ该
ä¸ī å®¶
æµ Ĭ
ä¹IJ éĺŁ
çľĭ ä¸įè§ģ
èĦij åŃIJ
æĮģ æľīçļĦ
çϽ èıľ
éĹª çĥģ
åĸĿ æ°´
æİ§åζ ç³»ç»Ł
ä¸ĵ åĮº
æľĿ å»·
æĪij å¿ĥéĩĮ
å±ķ åİħ
èľĺ èĽĽ
åĨ» ç»ĵ
ç² ª
åº IJ
åIJij 社ä¼ļ
åĨ³çŃĸ éĥ¨ç½²
çŁŃ æľŁåĨħ
æĸ° ä¸ļæĢģ
æľ Ķ
æĹ¶ æĬ¥
使 ä¹ĭ
åĽł åŃIJ
åıĤä¸İ èĢħ
çļĦ 年轻人
æīĭ 表
å°ģ éĶģ
为ä»Ģä¹Ī ä¸į
åIJ¸ çĥŁ
æ¯Ĵ ç´ł
åĪij æ³ķ
磫 æŃ£
身 æĹģ
åİŁ è°ħ
çĽij æĬ¤
æŃ¤ å¤Ħ
éļ¨ æĻĤ
æŀľ å®ŀ
åĮ»çĸĹ æľįåĬ¡
ä¸į åIJĪçIJĨ
æIJŀ 好
çļĦ èĦļæŃ¥
å¤ĸ å¥Ĺ
ç¶ĵ éģİ
æĶ¾ ç¼ĵ
åģľ çķĻ
æĺŁ çIJĥ
çļĦä¸Ģ éĿ¢
åĩł ä½ķ
è½® åĽŀ
æ¯Ľ å·¾
ä¿® çIJĨ
ä¸įçŁ¥ ä¸į
ä¸įçŁ¥ä¸į è§ī
æķ´ 个人
æ¯ģ çģŃ
åı° å·ŀ
使ç͍ 寿åij½
é»ij çϽ
æij¸ ç´¢
é¼ł æłĩ
éĿ© æĸ°
éº µ
ä¸ĵéŨ 为
å¾Īå¤ļ æľĭåıĭ
å·¥ä½ľ ç»Ħ
åIJĪ å½±
çĤº ä»Ģ麼
æŀģ 度
çļĦ è¿ĽæŃ¥
å½ĵ ä¹ĭ
å½ĵä¹ĭ æĹł
å½ĵä¹ĭæĹł æĦ§
è´´ è¿ij
尺 度
åľ¨ çİ°åľº
éĻį 临
åħ»èĢģ éĩij
ç£ ķ
åı¯ä»¥ 使
管çIJĨ æ°´å¹³
æľ¬æĬ¥ è®°èĢħ
æ³ķ 令
åį¡ è½¦
举 æµ·
å¤ļ éĩį
åħ¶ éĹ´
ç´ Ļ
éĩį大 é¡¹çĽ®
æ±Ĺ æ°´
ç»Ħ å§Ķä¼ļ
ä¿¡æģ¯ åħ¬å¼Ģ
ä¸į论 æĺ¯
ä¸Ģ åIJ¬
èĴ¸ æ±½
æıŃ ç§ĺ
è¶ħ éģİ
触 åıij
å© ¦
åħ³èģĶ äº¤æĺĵ
å°± ç»Ļ大家
好 ä¹ħ
åĢŁ è´·
游æĪı è§Ĵèī²
å¼ĢåIJ¯ äºĨ
æİ ł
åħļçļĦ åįģä¹Ŀ
ä¸ĭ 鼨
çŁŃ æĹ¶éĹ´åĨħ
å¯ ħ
导 åħ¥
å·¥ä½ľ ç»ıéªĮ
ä¹Ł åıªèĥ½
鼷 éľĨ
è·Ł è¿Ľ
åį¡ éĢļ
é¢ĩ æľī
æľº ä½ĵ
æĪĺ士 èģĮä¸ļ
女 主
ä½ĵåζ æľºåζ
è¶³ åįı
èĪĴéĢĤ çļĦ
åĢŁ åı£
æī¹ åΤ
æķ° å̼
è« ¾
éĺ¿æĭī 伯
åĺ İ
æħ ¶
达 人
å¼Ģ æ°´
大 鼨
温 室
ä½İ è¿·
ä»į æĹ§
éªĹ åŃIJ
亲 å±ŀ
çIJĨ æĻº
æľ¬ åŁºéĩij
å¨ ħ
åĨĻåŃĹ æ¥¼
å¢Ļ å£ģ
å® µ
èϽ çĦ¶æĺ¯
顺 çĿĢ
åħ« åį¦
åķĨ ç͍
ä¸į 失
è¿· èĮ«
顺 便
æļij æľŁ
欺 è´Ł
é¢ij é¢ij
该 æł¡
æĸĻ çIJĨ
æ·± æĥħ
åīį éĶĭ
ä¿Ŀ èŃī
èģĮä¸ļ çĶŁæ¶¯
åħ¬ å¼Ģåıij
åħ¬å¼Ģåıij è¡Į
åħ¥ æĪ·
éł ĵ
å̾ åIJ¬
éŃ ģ
æĦī æĤ¦
åĽŀ åIJĪ
åħ¨åĬĽ 以
åħ¨åĬĽä»¥ èµ´
åĥ¹ å̼
èĥ½åĬĽ 强
ç»ı å¼Ģ
ç»ıå¼Ģ åĮº
è¿ľ æĸ¹
çļĦ éģĵçIJĨ
缴 åįĩ
缴åįĩ æľº
为主é¢ĺ çļĦ
ç»Ļ æĤ¨
è¿ĺ æĥ³
æ¯Ķ æĪij
åĨľ çī§
æµ· åºķ
çŃ¾è®¢ äºĨ
对äºİ æĪij们
æĹ¶ 许
éĶ® çĽĺ
å®ŀéĻħ æİ§åζ
çļĦ æ¨¡æł·
åıįæĺł äºĨ
代 åĬŀ
åĮ» ç͍
éĽĨ ç»ĵ
åıijå±ķ åīįæĻ¯
æĮĩ çĿĢ
åįİ åĮĹ
è¿Ļ åĩłä¸ª
åIJį æ°Ķ
åĤį æĻļ
èĩª åıij
æ³¢ åħ°
大åĬĽ æİ¨è¿Ľ
èĩª ç§°
èįĨ å·ŀ
æIJį 害
äºĨä¸Ģ åı¥
æľĢåĪĿ çļĦ
éĩijèŀį å᱿ľº
æĢĢ å¿µ
è¡Į åĭķ
女 æİĴ
ä¸į è§£
ä¼ł éĶĢ
转载 请
饰 åĵģ
åıª 为
ä¸İ ä¼Ĺ
ä¸İä¼Ĺ ä¸įåIJĮ
èĥ½ èĢĹ
èı© æıIJ
è¿ij 两年
è¿Ķ 乡
马ä¸Ĭ å°±
äºĮ çŃīå¥ĸ
水 管
æ³ķ åѦ
çģŃ çģ«
大 å§IJ
åij¨ 转
æľī æľŁ
æľīæľŁ å¾Ĵ
æľīæľŁå¾Ĵ åĪij
å°į æĸ¹
ç¥ŀ èī²
æ²¹ èĦĤ
ä¸ī çĤ¹
ä¸į åĪ©äºİ
äºĭä¸ļ éĥ¨
å°± è·Ł
å¼Ģ æĶ¯
å°ı 女åŃ©
åħ±åIJĮ åĬªåĬĽ
çĶļèĩ³ è¿ĺ
è¿Ļ åIJį
è¿Ļ ç¬Ķ
çݯ åį«
æľī ç§į
è§Ĩ åĬĽ
çĨŁ çŁ¥
åħ¬ç§¯ éĩij
æ¶Īéĺ² å®īåħ¨
é¢ĩ 为
大 èħ¿
éĿ ¶
çī¹ æķĪ
æľįåĬ¡ åĮº
å¼Ģ åĩº
深度 èŀįåIJĪ
æĹł å¿§
æŁ¥ éĺħ
ç»Ī ç»ĵ
ä¿Ŀ ç¨İ
è¨İ è«ĸ
å½ĵ åģļ
è·³ èĪŀ
å¯ §
女 çİĭ
è®°èĢħ åľ¨
åħ¨ 产ä¸ļéĵ¾
è´¯ éĢļ
åħ´ ä¸ļ
éĻį åΰ
å°ģ éĿ¢
åħ¨éĿ¢ æİ¨è¿Ľ
奶 èĮ¶
éĢī åĿĢ
äºĨä¸Ģ åľº
åIJĮ ä¼´
议 论
æIJ ĵ
诸 èijĽ
诸èijĽ 亮
å¹² åĺĽ
æµģ æĦŁ
ä¸ĵä¸ļ çŁ¥è¯Ĩ
ç͵ ç«Ļ
åĩı å¼±
åĩº åħ¥
åIJĦ çľģ
éĿŀ常 é«ĺ
åľ° 毯
åıij æĸĩ
çĦ ī
çĥ§ çĥ¤
å£ģ 纸
æģ¶ åĮĸ
èĬ ¸
èĥĸ åŃIJ
çĩ Ĵ
çľģ éĴ±
çϾ 强
çIJĨå·¥ 大åѦ
éĴ¢ æĿIJ
åĽ½æľī èµĦ产
æĪĺ æľº
æ³Ħ éľ²
åIJİéĿ¢ çļĦ
æ°´ èµĦæºIJ
æ¢ħ èĬ±
åĨĻ çĿĢ
ä¹ĭ 声
æĹł åı¯
æĺİ æľĿ
ç«ĭæĸ¹ ç±³
ç· £
æĶ¾ è¿ĩ
ç¦ı çͰ
å¾Ĺ ä½ı
åıĹ ä¼Ĺ
ä¸Ń 级
çĹħ åıĺ
ä¸Ģ çŀ¬éĹ´
æĿĥ éĩį
人æĢ§ åĮĸ
åĮ»çĸĹ åį«çĶŁ
ä¸įåΰ ä½į
æĻºèĥ½ å®¶å±ħ
饮 ç͍
æ¼Ķ åıĺ
é«ĺ ç´łè´¨
ä¹Ļ æĸ¹
åģľ çķĻåľ¨
èİ· æī¹
ç©¿ æ¢Ń
客 åľº
æĮ½ åĽŀ
京 åŁİ
çĶŁåij½ åĬĽ
實 éļĽ
çĩ Ī
åĨį çݰ
çݰå®ŀ ä¸Ń
æľī ä¿¡å¿ĥ
çĸı éĢļ
åĺ´ åĶĩ
鼷 éĶĭ
èıľ åįķ
éħ ¯
è¶ħ é«ĺ
å¾Ī é«ĺåħ´
çĶŁ æ®ĸ
éĢł ä»·
误 åĮº
æĨ ĭ
好 æ¶Īæģ¯
å´ Ń
以 èĩ´
å¼Ģ çİ©ç¬ij
çĽij è§Ĩ
å·¡ å¯Ł
å¾· å·ŀ
æĹ© æĹ©
éĹª ç͵
æĪª åĽ¾
åı¯ä»¥ æł¹æį®
æīĭ èīº
æİ¥ 轨
ç§į æĹı
æĢĢ éĩĮ
åİ» åĮ»éĻ¢
ä¸Ģ äºĮ
å¼Ģ éĺĶ
åĩı éĢŁ
ä½Ĩ ä»İ
éĢĻ ä¸Ģ
åĩı åħį
主é¢ĺ æķĻèĤ²
å¼Ģå·¥ 建设
è¹ ¦
æľĪ 饼
ä¸ĭ æ²ī
å°Ĭ 严
éĻ ĩ
å®ŀ æľ¨
å»ł åķĨ
声 称
èĢĥ åľº
å¸ĥ é²ģ
èĩª æĿ¥
èĩªæĿ¥ æ°´
éĴ ¾
å¹´ 以ä¸Ĭ
大 åıĶ
ä»ĸ å·²ç»ı
åħ¨ æĿij
èģĶç³» ç͵è¯Ŀ
为 导åIJij
åΤ å¤Ħ
对 éĺµ
缮 æ¨Ļ
åIJį é¢Ŀ
客 æ°Ķ
横 åIJij
çŃī åĨħ容
åĩł çĤ¹
è°Ī 论
ä¸į ä¹ı
å±ķ çݰåĩº
è¾ĥ éķ¿
éĢĨ 转
å°ı æĻĤ
æĺ¯ å¤ļä¹Ī
æľ¬ æľĪ
è¿ij è§Ĩ
æĪIJç«ĭ 以æĿ¥
代表 çĿĢ
æĬ¥ å¤į
æĪı æĽ²
è¨Ń åĤĻ
åħ¥ èĤ¡
å¾ģ æľį
é«ĺ åĩº
èĪŀåı° ä¸Ĭ
å¿ĥ åĬ¨
两 çĤ¹
缸 çķ¶
èĻ Ľ
主 页
åĩł å®¶
æĹł ä¸į
åįı å®ļ
æĸ IJ
å¯ĵ æĦı
åħ¨ 线
æįķ é±¼
åı¯ä»¥ ä»İ
æľī è¿Ļæł·çļĦ
æģ¶ éŃĶ
åĮħ åŃIJ
æģ ¤
å¼Ģå¥ĸ ç»ĵæŀľ
ä¸į æŃ»
èĹ į
弯 æĽ²
海 峡
éĶĢ æ¯ģ
çļĦ çĭ¬çī¹
示 æĦı
ä¸įèĥ½ åĨį
èĥ½ æĬĬ
éĺ² çº¿
ä¸įå°ij äºİ
æ± Ģ
çļĦ éĤ£ä¸Ģ
羣 æĥħ
åŀ ®
被 æīĵ
åĽ½ å®ī
ç¾İ å¦Ļ
è¿Ļ åĩł
åĩº éģĵ
æľįåĬ¡ äºİ
æĪIJæŀľ 转åĮĸ
æīį åįİ
天 é¹ħ
åĩł 个人
åĢĺ èĭ¥
è̽ 误
æĬĹ æĪĺ
è¡Į éĬ·
æĿ¥ è¢Ń
åĢŁ éĮ¢
èįī èİĵ
ä¸¥æł¼ æī§è¡Į
举è¡Į äºĨ
å¤ĸ ç±į
å·² è¾¾
æĿij åħļæĶ¯éĥ¨
è¡ Ŀ
éĻį èĩ³
æµ· éĩı
é¤IJ é¦Ĩ
æĢ¥ å¿Ļ
æ·± è¿ľ
å¾Ģ è¿Ķ
ç¨İåĬ¡ å±Ģ
å¹¿æ³Ľ åºĶç͍
è®® åijĺ
æĹł æķĮ
çľ¼ åħī
çĥŃè¡Ģ ä¼łå¥ĩ
æŃ IJ
äºĨ äºĽ
è¿Ŀ èĥĮ
è¿Ļ æĺ¯ä¸Ģç§į
ä¸į 稳å®ļ
大家 åĪĨ享
表 çı¾
åīį åįģ
è·¯ è¿ĩ
æĴ ©
åIJĮ æĥħ
ä¹ł ä¿Ĺ
åıij è´¢
åºĶ æľīçļĦ
æĿİ æŁIJ
èĤ Ľ
马 åħĭ
éĢļ åijĬ
巨 人
ä¸Ģ åĽ¢
éĢĻ æ¬¡
ä¸į äºĨè§£
æĸ½ è¡Į
èij¡èIJĦ çīĻ
åıĺå¾Ĺ æĽ´åĬł
æı £
åĪĽæĸ° èĥ½åĬĽ
çķħ éĶĢ
表 æī¬
æ¯Ķ åĪ©
æ¯ĶåĪ© æĹ¶
åĮ»çĸĹ ä¿ĿéĻ©
æĵį 纵
伤 亡
æµİ å®ģ
åıĺ äºĨ
æľ¬æ¬¡ æ´»åĬ¨
åľŁ 豪
æĥ³ åĬŀæ³ķ
æĺ ķ
å½ĵ æĻļ
åĩº å±Ģ
çĥŃ è®®
è°Ī è°Ī
æĻĭ åįĩ
åĬ¿ å¿ħ
çĻ» å±±
éĤ£ åĦ¿
åIJĥ åΰ
ä¹ĭ åŁİ
å¿« æĿ¥
æ¹Ľ æ±Ł
第ä¸ī 个
åħ¨éĿ¢ æıIJåįĩ
å¥ĸ åѦ
å¥ĸåѦ éĩij
æĬķåħ¥ 使ç͍
é½IJ é²ģ
åı¯ä»¥ æĬĬ
åĴĮ ä»ĸçļĦ
è´ŃæĪ¿ èĢħ
æŃ£å¼ı åIJ¯åĬ¨
åįİ æ¶¦
ä¸įæĸŃ å®ĮåĸĦ
éĴ¢ æĿ¿
累 积
满 èĦ¸
åĽĽ æĸ¹
è´¢ çī©
ä»ĸ们 ä¼ļ
å¤ı æĹ¥
éĤ£ 个人
éĿł çĿĢ
çĤ¹ äºĨ
çĤ¹äºĨ çĤ¹å¤´
æ© ĭ
åıΠ好
åıĪ好 åıĪ
åıĪ好åıĪ å¿«
éĺµ éĺµ
å°ģ 建
æľ¬ çͰ
çī©ä¸ļ æľįåĬ¡
èĩªè´¸ åĮº
åIJ ı
便åĪ© åºĹ
åĽ½å®¶ æłĩåĩĨ
éĿ¢ ç²ī
èī° è¾Ľ
æĶ» åħ³
æīĵ åĮħ
车 éĺŁ
人 éĢī
åı¯ ä¸įæĺ¯
äºĮ åįģå¹´
åIJį å¸Ī
浦 举
åħ¬ è¯ģ
è¿IJ éĢģ
æĺ¯ æľĢ好çļĦ
æŁĶ åĴĮ
çİĭ æŁIJ
çĹħ æĪ¿
åĨ¶ éĩij
ä¸Ģä»¶ äºĭæĥħ
åį ¤
åı¯ æİ§
çī Ł
æĭ Ĥ
å·² äºİ
人 éĢł
çĶŁçī© åĮ»èį¯
ä½ĵ çݰåĩº
èĤ² åĦ¿
èĢģ å®ŀ
åľĸ çīĩ
è« ¸
ç´¯ äºĨ
æĦŁåħ´è¶£ çļĦ
åĽ¾çīĩ æĿ¥æºIJ
ä¹Ł æĺ¯ä¸Ģç§į
æ¾İæ¹ĥ æĸ°éĹ»
æĹ¶ 表示
åħī è¾ī
æĬ¥ åºŁ
å²ģ æĹ¶
éħ ®
æ£Ģ ä¿®
åıĺ éĢŁ
åıĺéĢŁ ç®±
åľ¨ èģĮ
éı ¡
æį Ĥ
çĿ£ åĬŀ
æ°¸ ä¸į
åģļ ä¸ĢäºĽ
åİĨ æĹ¶
å·¥ç¨ĭ æľºæ¢°
æģ° å½ĵ
å°± åľ¨äºİ
ç§° åij¼
éĢļ常 æĺ¯
æł· å¼ı
åij¨ ä¸Ģ
èĭ± éķij
åĿĩ 线
ä¼ł éĹ»
ç͍æĪ· ä½ĵéªĮ
èµŀ åIJĮ
骨 æĬĺ
为主 ä½ĵ
æ±Ł å±±
æ¸ħ æľĿ
æĶĢ åįĩ
ä¸į çĽ¸ä¿¡
éĿ ´
æŃ¦ åĬŁ
åĭ¤ åĬ³
æĿ¥ æī¾
å°Ĩ æĮģç»Ń
丫 头
æ¨Ļ æºĸ
è£ ´
深深 çļĦ
åŃķ èĤ²
è§ĦåĪĴ 建设
æ¸ħ çν
ç²¾åĩĨ æī¶è´«
æīĵçł´ äºĨ
è¿Ļä¸Ģ 天
å·¥ä½ľ æĢ»ç»ĵ
æĹħ ç¨ĭ
举 èIJ¥
æĶ¾ å°Ħ
æľī åĩłä¸ª
éĿŀ çī©è´¨
åIJĥ å¾Ĺ
åĹ ¨
ä¼ļ åıijçĶŁ
篮 æĿ¿
å¼Ģ å°ģ
麻 å°Ĩ
èıı æ³½
ä¸į åIJĪ
ç³»åĪĹ äº§åĵģ
èѬ å¦Ĥ
ç¾İ èªī
èĩªå·± åĸľæ¬¢
交æĺĵ ä¸Ńå¿ĥ
åIJĪ åͱ
使 æĪij
åĥı ç´ł
带 éĺŁ
ä½Ĩ 对äºİ
æĬĬ è¿Ļ个
èĤĿ èĦı
åįķ纯 çļĦ
æĶ»åĿļ æĪĺ
缼 ä¼ļ
åijµ æĬ¤
æª Ģ
èµ¶ ä¸Ĭ
æ¥ Ĭ
ä¹ħ äºĨ
ç¡ Ŀ
çŃĶ é¢ĺ
ä¿ĿæĮģ çĿĢ
è§ģ è¯Ĩ
çĤ¹ åĦ¿
åįĬ 个æľĪ
æ» ĩ
浸 泡
ä¼ł éĢģ
åľ¨ å¸Ĥåľºä¸Ĭ
ä¹ĭ 乡
çī¹ éķ¿
éĽ ŀ
èª ł
身 å¤Ħ
æŁł 檬
身 穿
çľģ åħ¬å®ī
çľģåħ¬å®ī åİħ
åıĻ åĪ©äºļ
åĩł åĪĨéĴŁ
人 åĢij
åľ° 段
èĩª åѦ
ä¹Ł è¶ĬæĿ¥è¶Ĭ
èģĮ æĿĥ
æĸ §
èĩ »
å½Ĵ 纳
驾 é©Ń
éĥ¨åĪĨ åľ°åĮº
没æľī æĥ³åΰ
æĴ ĩ
ä¹Į é²ģ
ä¹Įé²ģ æľ¨
ä¹Įé²ģæľ¨ é½IJ
èĤ² 人
çļĦ æŃ¥ä¼IJ
å»¶ æľŁ
æ²¹ æ°Ķ
åģļ å®Į
åľ£ åľ°
丰 åİļ
宽 带
åı¯éĿł çļĦ
åºŃ éĻ¢
åŃ ľ
å°ı康 社ä¼ļ
å®īåħ¨ 管çIJĨ
年 第
æİĴ 污
èĥĮ åĮħ
å®¶ ä½ı
åħ¶å®ŀ å°±æĺ¯
ä¼ļ è§ģ
帮åĬ© ä¼ģä¸ļ
ç½ij è´Ń
æĺ¯ ä¸įä¼ļ
飯 åºĹ
æŃ» åİ»
åħįçĸ« åĬĽ
æľ ķ
åĸĿ äºĨ
è½» å¾®
个æľĪ åĨħ
ç»Ħ åĽ¢
åĴĮ å®ĮåĸĦ
é¸ ½
æıIJ éĢŁ
西å®ī å¸Ĥ
ä¸Ńå¿ĥ 主任
æĹ¶éĹ´ 为
æľŁ æĿĥ
è¶ ķ
ä¸įä»ħ è¦ģ
æľį ä»İ
é¡ĺ æĦı
ä¸į å°ı
ä¸įå°ı çļĦ
ç° ĩ
çª ¦
åĪĩ æĪIJ
åĵĪ åĪ©
天 羣
ä¸Ģ次 次
éĩij å¸ģ
æĢİä¹Ī èĥ½
ç½ij è´·
ä¼ļ计 å¸Ī
çŁŃ 缺
对 æłĩ
åıĺå¾Ĺ æĽ´
åīį åĩłå¤©
éĺ² æ±Ľ
彩 èϹ
åĵģ ä½į
表 æł¼
严 å¯Ĩ
æ¯Ľ åĪ©çİĩ
çļĦ åį±å®³
å½ķ åζ
æ°´ åĬ¡
èĥ½å¤Ł 让
å¹³ æĿ¿
ä¹³ æĪ¿
è¸ı å®ŀ
é¦ĸ åĪĽ
é¦Ļ èķī
æĬ¥ 表
ä¸Ģ æĬ¹
åĩºçĶŁ äºİ
è²» ç͍
åĩº 让
åIJĪæ³ķ æĢ§
å°¼ åħĭ
åĨ° åĨ·
é¦Ļ æ°Ķ
åı· ç§°
èµ· çłģ
åŁİ åİ¿
çİ© èĢį
ä¸Ĭ éĻIJ
ä¼ļè®® ç²¾ç¥ŀ
æĹģè¾¹ çļĦ
便 ä¼ļ
æıŃ æĻĵ
çİ© æĦı
éĽª å±±
åIJij çĿĢ
ä½ĵèĤ² åľ¨çº¿
说æĺİ ä¹¦
åĮĸ èĤ¥
åħļç»Ħ 书记
åĬ¨ 人
ä¹ĭ æīĢ
æľĪ èĩ³
æľĢå¿« çļĦ
èĬĤ åģĩæĹ¥
ä¸ĵ åľº
èĢĥ ä¸Ĭ
çª Ł
é²ľ è¡Ģ
è¾ĥ强 çļĦ
æĤĦ çĦ¶
å¤ļ个 åĽ½å®¶
çªĹ å¸ĺ
æŀģ å¤§åľ°
ä¸įç͍ æĭħå¿ĥ
è¿Ļä¹Ī åģļ
åĥ¹ æł¼
ç¾İ丽 乡æĿij
å°ıæĹ¶ åĨħ
ç´§ è¿«
大 çģ«
èĥ³ èĨĬ
æĵįä½ľ ç³»ç»Ł
æ®ĭ çķĻ
åĨĻ åĩº
ç¦ģ å¿Į
åĬłçĽŁ åºĹ
è¿ij çϾ
便 åı¯
æķ´æĶ¹ æİªæĸ½
éĩĩ访 æĹ¶
åĶIJ 代
æ·±åĮĸ æĶ¹éĿ©
çŁ ¢
éĥ½ åĸľæ¬¢
è¶ĬæĿ¥è¶Ĭ é«ĺ
èĬ± æľµ
头 çĸ¼
å®ī 康
å¢ŀéķ¿ çİĩ
çľ¼ çľĭ
å°±æĺ¯ 为äºĨ
èĢĮ 导èĩ´
åĬłå¿« 建设
èĬ± æł·
åĨħå¿ĥ çļĦ
æĺĨ å±±
è³ĩ æºIJ
åĽŀåΰ å®¶
èıĬ èĬ±
æ°´ éĩı
å¾ģ ä¿¡
è¡ĮæĶ¿ åĮº
ä¹ĥ æĺ¯
æĬķèµĦ é¡¹çĽ®
å«ģ ç»Ļ
ç¥ŀ åľ£
ç¨ ł
æľ¬æĿ¥ å°±
éĢIJ ä¸Ģ
èģĮä¸ļ æĬĢæľ¯
ä¸įèī¯ ä¿¡æģ¯
æīĺ è¿IJ
åIJ¯ 示
ä¹ĭ åħ§å®¹
éŁ ¶
奢 åįİ
æıŃ ç¤º
æĪIJ为 ä¸ŃåĽ½
æ¶Īè´¹ åĵģ
åħ¬ ç͍
æIJŀ å®ļ
请 ä½ł
æŁ ļ
åĨħ è¡£
ä½Ĩ ä»ĸ们
ä¿Ŀ 湿
该 åİ¿
饱 åĴĮ
æİ¨ åIJij
èµĦæĸĻ æĺ¾ç¤º
ä¸į å½±åĵį
人 人éĥ½
åıijå±ķ 壮大
åħ»èĢģ æľįåĬ¡
çĶŁæ´» æ°´å¹³
åIJĦ åİ¿
ä½ł éľĢè¦ģ
说 çļĦæĺ¯
å¤ĸ åªĴ
æŃ¤ 人
次 è¦ģ
追 赶
åºĶ该 å¦Ĥä½ķ
æĹ¥ åĩĮæĻ¨
çķ¥ æľī
éĥ½ æĥ³
游 ä¹IJ
è¿Ļ款 游æĪı
å¹³ æ·¡
æĺ¯ä¸Ģ åĢĭ
å¤ĩ èĢĥ
åζ æŃ¢
ä¸Ģå®ļ èĥ½
å¾Ĵ å¼Ł
以 çĤº
åįĥ åħĥ
äºĶ åħŃ
迪 士
迪士 尼
éĺ³ æĢ§
åĨ¬å¥¥ ä¼ļ
å°±æĺ¯ åĽłä¸º
æĮĤ éĴ©
æ¦Ĥ åĨµ
åıªè¦ģ æľī
æ²¹ çĶ»
åľ° æłĩ
ä¸Ĭ è°ĥ
产ä¸ļ åĽŃåĮº
åħ« åįģ
æ£ ±
æ¶² æĻ¶
æĿij å§Ķä¼ļ
çŃ¾çº¦ 仪å¼ı
è¿Ļ åħ¶ä¸Ń
åĨĻ éģĵ
示èĮĥ åŁºåľ°
éĩİçĶŁ åĬ¨çī©
鼻åŃIJ ä¿¡ç®±
åĽ½éĻħ è´¸æĺĵ
人 æĿĥ
ä¿Ŀ 管
èĭ¥ æĤ¨
åİĭ æĬij
é» Ľ
åľ° çľĭçĿĢ
éĻ °
ä¸Ģå¹´ å¤ļ
ä»İ 容
ä¸Ń æĸŃ
å¯Ł è§ī
移 交
éĶ ¯
æĪĸ许 æĺ¯
ç¶ ł
两 项
æľĢ åĸľæ¬¢
æľĢåĸľæ¬¢ çļĦ
å¤ľ éĩĮ
åIJĮ ä»ģ
åĪĽæĸ° 驱åĬ¨
è°ģ èĥ½
é£ ¾
åħī åѦ
åİ Ħ
èĦ± é¢ĸ
èĦ±é¢ĸ èĢĮåĩº
è¿ ¦
æĺ¯ ä¸įåı¯èĥ½
çª ¥
èĥ½ 满足
宽 度
伦 çIJĨ
åı¯ä»¥ èİ·å¾Ĺ
转 ä¼ļ
å±± æĿij
éĵº 设
åĩº åĩ»
æĸĩåĮĸ èīºæľ¯
ä¼ļè®® 室
æŃĮ 声
æ» Ķ
èIJİ ç¼©
æľįåĬ¡ åijĺ
åıij表 äºĨ
æĸ¼ æĺ¯
æĺİç¡® è§Ħå®ļ
ç»´ å¥ĩ
水 产
æĬķ ä¿Ŀ
éĺ´ éģĵ
èµ¶ å¿«
夺 å¾Ĺ
ä¸ĭ åįķ
çµģ åħ¬åı¸
çݯ ç»ķ
å½ Ī
ä½ľé£İ 建设
æĹħ游 æĻ¯åĮº
æľī æĽ´å¤ļçļĦ
丰å¯Į å¤ļ彩
çIJĨè´¢ 产åĵģ
åĩº å·®
ä»İ严 æ²»
ä»İ严治 åħļ
缸 å¹²
æ»ĭ 润
主åĬŀ æĸ¹
åī§ åľº
æ»ļ çIJĥ
æ©Ħ æ¦Ħ
èĩªä¸» åĪĽæĸ°
éĢļ å¾Ģ
æł¼ å°Ķ
çļĦ ä¼ĺçĤ¹
èĥĮ ä¸Ĭ
çª ľ
çĪĨ åĩº
å¹³ æķ´
ä¸Ģ èĦļ
åħ¨ä½ĵ åijĺå·¥
éĻIJ å®ļ
åŁİéķĩ åĮĸ
æ· ³
éĢ® æįķ
è¡ĮåĬ¨ 计åĪĴ
æīĵ å¾Ĺ
åİļ éĩį
纪å½ķ çīĩ
åĿļ ä¿¡
央 ä¼ģ
åĨį ä¹Łä¸į
天 涯
åıĤèĢĥ èµĦæĸĻ
æľī æ¯Ĵ
åIJ¸ 纳
è¶Ĭ åıij
éĩįè¦ģ æĦıä¹ī
åĽ½éĺ² éĥ¨
è¿Ļ个 è¡Įä¸ļ
æĻ® æŁ¥
å¼Ĥ æĢ§
å»¶ è¿Ł
å°ı å¹ħ
èī² æĥħ
综åIJĪ æ²»çIJĨ
æŃ£æĺ¯ åĽłä¸º
产ä¸ļ ç»ĵæŀĦ
çłĶç©¶ æĬ¥åijĬ
åģľ ä¸ĭ
éķ¿ èĢģ
éĩĿ å°į
åįĹ京 å¸Ĥ
çģĮ æºī
转 è¿IJ
欺 è¯Ī
éĢł åģĩ
åĪĨå¸ĥ å¼ı
æĦŁ è§¦
æĪij å½ĵæĹ¶
åıij è§ī
åĽ¾ 纸
æĶ¹ èī¯
çĭł çĭł
åĨ² åĪº
æĸ° 京
æĸ°äº¬ æĬ¥
ç¥ŀ åύ
秸 ç§Ĩ
çĪ º
å°Ĩ è¿İæĿ¥
å·¥ ä¿¡
工信 éĥ¨
éĻIJ éĩı
æŃ¢ æįŁ
åѦä¼ļ äºĨ
åįİ çĽĽ
åįİ缼 é¡¿
å¾Į ä¾Ĩ
ä¸ĭéĿ¢ æĺ¯
ä¸ĭéĿ¢æĺ¯ å°ı
æIJ¬ è¿IJ
ç¾İæľ¯ é¦Ĩ
æ¸ħ åĩī
å¤ļå¹´ åīį
è© ŀ
åįĥ ç±³
表 述
æ±Ł éŨ
åĬłæ²¹ ç«Ļ
æľ¬ èĥ½
导 读
åĽ´ è§Ĥ
å¹¶ åIJij
åŁºæľ¬ æĥħåĨµ
æīĵ å¼ĢäºĨ
è¿Ļ ä¸ī个
æ±ķ 头
强 æľīåĬĽ
强æľīåĬĽ çļĦ
è¿Ľ åľº
ä¹Ŀ æ±Ł
çIJĥ æĺŁ
好çľĭ çļĦ
大 æĪ·
æ¹ ¯
å¥ĩ å¦Ļ
ä¹IJ åύ
æĪijçļĦ å¿ĥ
çľī 头
åĨľä¸ļ çĶŁäº§
ç¼ĸ çłģ
åŁº ç¤
åŁºç¤ İ
天 æĸĩ
åĢĭ人 è³ĩè¨Ĭ
åİ» è¿ĩ
èģĨ åIJ¬
æĶ¾ åģĩ
ä¸į åħ·å¤ĩ
æ·Ģ ç²ī
大 佬
åħ¨ 天
åħ¨éĿ¢ 建æĪIJ
éļIJ å½¢
ç¼ħ ç͏
åIJ ³
è¡ĮæĶ¿ æī§æ³ķ
åŁİ åł¡
èİ« æĸ¯
èİ«æĸ¯ ç§ij
æīĢæľī æĿĥ
éĽĨ åľĺ
å±Ģ åī¯å±Ģéķ¿
åĩłä¹İ 没æľī
æ´ģ åĩĢ
ç͵影 èĬĤ
åŃ© ç«¥
æīĢ åģļçļĦ
æ¸ħ 代
æĸ° çīĪ
éĵĿ åIJĪéĩij
为 æĬĵ
为æĬĵ æīĭ
åΤ å®ļ
çī¹ äº§
æīĭ æ©Ł
ä¸įåı¯ æĪĸ
ä¸įåı¯æĪĸ 缺
å¸Ĥåľº è§Ħ模
åĿ ¯
åĮ» åѦéĻ¢
å¿« è¦ģ
èĮ ľ
æĬĺ èħ¾
äºĨ è¿ĩæĿ¥
æĬ¥åijĬ æľŁåĨħ
çī© ç§į
ç»Łè®¡ å±Ģ
æī© 建
æ¶ ħ
责任 人
éĺ İ
è¯Ħ è®®
å¾Ģ äºĭ
æīĢ ç¤º
æķ´ æ´ģ
éĹº èľľ
æĹħ éĢĶ
å®ŀ è®Ń
ä¹ĭ ç§°
巴 士
éĢŁåº¦ å¿«
ä¸įä»ħ å¦ĤæŃ¤
å®Ŀè´µ çļĦ
åºŁ çī©
æ²³ æ°´
æİ¥ 纳
ç²¾ æ¹Ľ
åħ¶æ¬¡ æĺ¯
顺 德
åħ¬åħ± åį«çĶŁ
è¤IJ èī²
ä¸į æĥľ
æĬĢæľ¯ æľįåĬ¡
æİ ·
æ±Ĥ èģĮ
ä¸ī 峡
æĬķåħ¥ åΰ
太 åIJİ
åIJ¯åĬ¨ 仪å¼ı
缴æİ¥ å½±åĵį
æĸ° 款
个 乡éķĩ
çϾ 亿
åº «
ä¹Ł æŃ£æĺ¯
åı¶ çīĩ
æľĢæĹ© çļĦ
æĪĺ 绩
å·¥ æľŁ
æĻļ æľŁ
è¿Ļæł· 说
è¯į è¯Ń
ä¾ Ħ
æķ£ çĥŃ
éĽĨæĪIJ çĶµè·¯
åIJį è¯į
æĻº åķĨ
æĭ¥ åłµ
çĭĤ 欢
è¿Ļ èά
浴 室
åijķ åIJIJ
æľªæĿ¥ åıijå±ķ
ä¸īä½į ä¸Ģä½ĵ
åªĴ é«Ķ
ä¸įå¾Ĺ 转载
åĽłä¸º 她
æĺ¾ç¤º å±ı
ä¾Ľ æļĸ
éĨ« éĻ¢
æľī æĦıæĢĿ
æľīæĦıæĢĿ çļĦ
娱ä¹IJ åŁİ
åįµ å·¢
åĪĽéĢł åĬĽ
竳 èĬĤ
人大 常å§Ķ
èĢĮ çİ°åľ¨
å¤ĸ å©Ĩ
å¢ŀ æĮģ
äºĶ åįĥ
èĢģå¸Ī 们
æ´Ľ æĿī
æ´ĽæĿī 磶
æİĮæı¡ äºĨ
ä¸ŃåĽ½ æĸĩåĮĸ
æĸ° æĶ¿
主è¦ģ ç͍äºİ
åıij çĥ§
类似 äºİ
åĮĹ æŀģ
æĪij们 认为
弥 漫
åħ¨çIJĥ ç»ıæµİ
é¢ IJ
ä¸Ģèµ· è£ħä¿®
æĶ Ĵ
æĭī èIJ¨
帶 ä¾Ĩ
åĨ· æ°´
ä¸ī åĨľ
æĿ¿ æĿIJ
è¿ŀ è¿ŀ
éĵ ®
ç»ıèIJ¥ çIJĨ念
å±± é¡¶
å¾Ī æĥ³
çĺ «
å§ĭç»Ī ä¿ĿæĮģ
åľ¨ 广å·ŀ
ä¸įåIJĮ æĦı
åıĺ åİĭ
åıĺåİĭ åύ
产 éĶĢ
表 éĿ¢ä¸Ĭ
æīĢ以 ä»ĸ
ç»ıéªĮ 丰å¯Į
éĥ¨ å§Ķ
åħµ åĽ¢
æīĢ è¿°
æķ¦ çħĮ
ç»ıèIJ¥ èĮĥåĽ´
åı£ è¯Ń
失 信
æ¯ı个人 çļĦ
æīĭ æĮģ
æģIJ æħĮ
åł¡ åŀĴ
é¦ ħ
éĵ¸ éĢł
æĭ¿ åĩºæĿ¥
æİ¢ æµĭ
大家 ä¸Ģèµ·
å¥ §
å®ŀè´¨ æĢ§
å°ı åĦ¿
èĩº åįĹ
èĩºåįĹ å¸Ĥ
å¼Ģåıij èĢħ
åı¯ æł¹æį®
ç®± åŃIJ
饺 åŃIJ
å¿Ļ çĿĢ
æĿ¥ ä¸įåıĬ
缸 ä¼ł
åĽ½ ç½ij
èħ¹ æ³»
è¿ĻéĩĮ æľī
é£İ æĻ¯åĮº
åıĤ ä¿Ŀ
æŃ» èĢħ
æĪ´ ä¸Ĭ
æ©Ł æ§ĭ
è¯ķéªĮ åĮº
ä¼ł æİĪ
æµ· è¾¹
泪 水
缸åħ³ åĨħ容
éĥij å·ŀå¸Ĥ
åħij çݰ
两 åij¨
èĬľ æ¹ĸ
ç͵åŃIJ ä¿¡æģ¯
红 å¤ĸ
æĹħ游 å±Ģ
å¾Ģå¾Ģ ä¼ļ
è¿ħ çĮĽ
ä¼ł 羣
æ¸ħ æ¾Ī
å°± è¿ij
微信 群
ç³»åĪĹ æ´»åĬ¨
ç»ı常 ä¼ļ
è§Ĥ æµĭ
å¿ĥå¾Ĺ ä½ĵä¼ļ
éĻĪ åĪĹ
åĮĹ æĸĹ
è« ®
è«® è©¢
è¿ĺæĺ¯ ä¼ļ
æµĭ ç®Ĺ
æĺŁ ç©º
宽 容
çī©ä¸ļ åħ¬åı¸
æĪĴ æĮĩ
å¸ħ æ°Ķ
ä¸ĢæŃ¥ æŃ¥
åħ± 鸣
åĨ³ ä¸į
æİ¥ 管
å¦ĩ èģĶ
æ¯Ķ åĸ»
é²ģ è¿ħ
æĮģ çºĮ
缸 亲
å¨ģå°¼æĸ¯ 人
ç«ĭ 项
åĪ Ŀå§ĭ
èĩª åζ
è¿Ī è¿Ľ
ä¸Ĭ æ±½
å®ı ä¼Ł
æł¹æľ¬ 没æľī
æĸ°åĨł çĹħæ¯Ĵ
åĵª ç§į
康 åħ»
è¡° èĢģ
å½ķ åĥı
é«Ķ é©Ĺ
ç»ij å®ļ
é¢Ŀ 头
äºĶ æľĪ
èĬ± å¼Ģ
ä¸Ģ线 åŁİå¸Ĥ
åΰ åľº
æĬķ éĻį
çĹĺ çĹĺ
åıĹ ä¸įäºĨ
æīİ æł¹
æĽ´ ä½ķåĨµ
æĬ½ æŁ¥
åĩº è·¯
审议 éĢļè¿ĩ
ä¸į åĥħ
èī² è°ĥ
çϾ ä½Ļ
èĤł éģĵ
æ·±åİļ çļĦ
马 åĬĽ
æĹ© æĻļ
æŃĮ èĪŀ
éĺ² æĻĴ
æľĢåIJİ ä¸Ģ个
樱 èĬ±
å°ıä¼Ļ åŃIJ
åľ¨ å½ĵåľ°
å°ıä¼Ļä¼´ 们
èµ· æºIJ
åħ¨ åªĴä½ĵ
ç° ½
éħ± æ²¹
æĹłè®º å¦Ĥä½ķ
裤 åŃIJ
åģľ äº§
ä¸įçͱ å¾Ĺ
çīµ å¼ķ
ä¼ł åĬ¨
ä¹Ŀ é¾Ļ
åĬł åĽº
ä¹Łä¸į æķ¢
æĬĢæľ¯ æĶ¯æĮģ
ä¸Ĭ å²Ĺ
ç»ıéªĮ åĴĮ
æł¼ æŀĹ
åIJ¸ éĻĦ
æľªæĪIJ å¹´
奢ä¾Ī åĵģ
追 æį§
好 ä¸į容æĺĵ
èķ´ åIJ«
ä¿Ŀ å®ļ
æĬ¥ ä¸ļ
æµ· åĨħå¤ĸ
ä½ł çİ°åľ¨
æ²¹ èĢĹ
è´¨éĩı 管çIJĨ
æ½ľ æ°´
丽 æ±Ł
转 åħ¥
è¿Ļä¹Ī ä¹ħ
æĺİ ä»£
责任 åζ
éĩį å·¥
大 巴
触 åıĬ
èµ· åĪĿ
大 å¦Ī
æĸ¯ å¡Ķ
åĨĽ å·¥
书 éĻ¢
å³ ¨
æİ¨ çIJĨ
è¿Ļç¯ĩ æĸĩ竳
è¿ģ ç§»
åľ¨ åIJĮä¸Ģ
ç»Ĩ ç»Ĩ
åīĬ å¼±
书 æĪ¿
ç¶ĵ 常
è¯ķ é¢ĺ
æĤ£ ä¸Ĭ
çĻ«çĹ« çĹħ
åĨ² æ´Ĺ
å¤ĸ æı´
åħĭ åζ
åįģ æľĪ
åģļ ä¸įåΰ
ç¾İ åĮĸ
å¦Ĥ æľŁ
è¿ĺ éľĢ
天 åºľ
å°± æĦıåij³çĿĢ
çļĦç¡® æĺ¯
éªĹ å±Ģ
å°ıç»Ħ èµĽ
è© ©
ä¹Ŀ å¹´
æĻĵ å¾Ĺ
çłĶç©¶ 人åijĺ
大 éħĴåºĹ
ç§ij åѸ
åħŃ åIJĪ
çķĮ å®ļ
车 载
å¼Ģ çĿĢ
毫 æĹłçĸij
毫æĹłçĸij éĹ®
è¿IJ ç»´
ç¦ģ åĮº
èĦ± èIJ½
讲 å¸Ī
产ä¸ļ åŁºåľ°
é«ĺ æĢ§èĥ½
åħī 彩
çݰ éĺ¶æ®µ
åĩ ¿
è¾ĥ å·®
饮 çĶ¨æ°´
éĸĭ çϼ
ç½ij åIJ§
çĮ´ åŃIJ
æŃ¦ æŀĹ
å®ī åİ¿
ä¸įåı¯ æĢĿ
ä¸įåı¯æĢĿ è®®
éĬ· åĶ®
è´« ç©·
为 åķ¥
éº ĵ
å¹¾ åĢĭ
è§Ħ模 以ä¸Ĭ
æı ļ
被 åĽ°
缺 å¸Ń
å¿« é¤IJ
æĬ¢ åįł
æĻ Ł
å¤į æ´»
æľ¬æĬ¥ 讯
åĪĽ ä¸ĭ
海 滩
éĩı 产
å¦Ĥä½ķ åİ»
车 ä½į
å¯ ĩ
äºĮ åįģåĽĽ
ç»ıæµİ æįŁå¤±
éħįå¥Ĺ 设æĸ½
åŁºæľ¬ éĿ¢
äºī 论
就好 åĥı
çłĶç©¶ æĪIJæŀľ
éĻĪ è¿°
æīĵ åĬ¨
ä¸ĭ å·´
ç§Ĵ éĴŁ
对 人ä½ĵ
æĬĢæľ¯ çłĶåıij
åİŁ åŃIJ
æĺ¯ä¸Ģ 项
äºĨä¸Ģ 份
æĮĩ çͲ
ç͍ éĩı
è¿ĺä¸į å¤Ł
æĶ¿åºľ éĩĩè´Ń
çŁ¥è¯Ĩ çĤ¹
ä¸ŃåĽ½ 梦
å¾Ī å¼Ģå¿ĥ
礼 è²Į
éĿŀ常 å¤ļ
éĿŀ常å¤ļ çļĦ
åĽ ļ
æĹħ é¦Ĩ
å°½ æĥħ
æŃĮ åͱ
æ²Ļ é¾Ļ
车 åİ¢
客 æµģ
åģı å·®
积累 äºĨ
æ¡ Ķ
çĶ» çĶ»
ä¹Ł åºĶ该
åºĶç͍ ç¨ĭåºı
èĥĥ èĤł
以 å¾Į
豪 å®ħ
æ·± åĬłå·¥
缴 è¨Ģ
åĮĸ çŁ³
åĽ½ éģĵ
ä¸ĥ 个
ä»İèĢĮ 使
èĤł èĥĥ
æĹ¥ è¶ĭ
çζ åŃIJ
ç· ©
æĭĽ çīĮ
产 å¦ĩ
çķª èĮĦ
æĪij éĻ¢
建çŃij å·¥ç¨ĭ
å±ķè§Ī ä¼ļ
å®¶éķ¿ ä»¬
åĨľ ä½ľçī©
æĹ¥ å¤ľ
æĶ» æĵĬ
è§Ħ éģ¿
èĪŁ å±±
便 æ°ij
åħ« åŃĹ
ä¸į æĽ¾
æĶ¯ éħį
çĨ¬ å¤ľ
人 é¡ŀ
ç´Ģ éĮĦ
ç»ıèIJ¥ æ´»åĬ¨
大 涨
å¸Ĥå§Ķ 常å§Ķ
åĪĨ éIJĺ
ä¸Ģ个 èģĮä¸ļ
çĹħ åĽł
è¿Ļ 对äºİ
ä¸įå¾Ĺä¸į 说
åıijç͵ æľº
æľīæīĢ å¸®åĬ©
缮æłĩ ä»»åĬ¡
åĽł åľ°
åĽłåľ° åζ
åĽłåľ°åζ å®ľ
å°Ĩ è¾¾åΰ
ç²Ĺ ç³Ļ
稳 åĽº
å« £
çİ°åľ¨ å¾Īå¤ļ
ä¸ĸçķĮ 级
å¼ł æŁIJ
çĤ¹ ç¼Ģ
èij µ
社ä¼ļ ç»Ħç»ĩ
å¾Ģ åIJİ
åĬł æģ¯
åĻª 声
æľī åħ´è¶£
为æĤ¨ æıIJä¾Ľ
æ²¹ æ¼Ĩ
ç¬¬åĽĽ å±Ĭ
çļĩ 宫
ä¹Ĵ ä¹ĵ
ä¹Ĵä¹ĵ çIJĥ
éļ¨ èijĹ
éģ© åIJĪ
åįĹ éĿŀ
æĵ ´
西 æ´ĭ
åĬł å¯Ĩ
æĪIJåĬ٠䏾åĬŀ
åı£ æ°´
æĪIJ 年人
æīĢ æıIJä¾ĽçļĦ
éļĶ å£ģ
åľ¨ 京
å½ĵåľ° æĹ¶éĹ´
çŃī åIJĦç§į
é£İ æ°Ķ
å±ĭ éĩĮ
ä¸Ģ åŃĹ
çļĦæĹ¶éĹ´ éĩĮ
åĺ¿ åĺ¿
快 讯
ä¸Ń åľº
ä¸Ģ çĵ¶
æ» ķ
é¢Ĩ è·ij
好 èݱ
好èݱ åĿŀ
没 åħ³ç³»
åĩº å¢ĥ
ä¸įæĺ¯ ä¸Ģ个
éĥ½æĺ¯ éĿŀ常
éľĩ åĬ¨
èİ· èĥľ
åįļ å¼Ī
æĬļ åħ»
对 ç«ĭ
æľįåĬ¡ æľºæŀĦ
è°£ è¨Ģ
社ä¼ļ ç§ijåѦ
åIJ¬è¯´ è¿ĩ
æī ³
æīĵ 磨
åı£ æľį
好 åĥıæĺ¯
以åıĬ åħ¶ä»ĸ
çī¹ è´¨
亲 è¿ij
ä¸Ģ ç»ı
æ¶ Ŀ
éŃĶ æľ¯
éģĵè·¯ 交éĢļ
è§Ħ模 æľĢ大
å®ŀæĸ½ æĦıè§ģ
ä¹ ŀ
ä¸Ģ ä¸ĸ
åŁ· è¡Į
è±Ĩ çĵ£
åĪĹ ä¸º
æķħ 宫
çĶŁ åij½åij¨æľŁ
ä¸īç§į èģĮä¸ļ
详ç»Ĩ ä»ĭç»į
å®Į å¤ĩ
岩 çŁ³
éļı æīĭ
é£ ²
æķĪæŀľ åĽ¾
ç§ĭ åĨ¬
åĬŁ å¾·
è§Ħ竳 åĪ¶åº¦
æĹ¥ æ¸IJ
æīĢ éľĢè¦ģ
æīĢéľĢè¦ģ çļĦ
å²Ľ ä¸Ĭ
åĩº åľŁ
åĽ¾ æĸĩ
ç§ijæĬĢ è¿ĽæŃ¥
éĢļ èĥĢ
èĢģ 太太
èĭĹ æľ¨
éĵ¶ å·Ŀ
å¸IJ 篷
éĿŀ è¦ģ
éħį ç͵
å¤Ħ å¢ĥ
èĤ¡æĿĥ æĬķèµĦ
ä¸Ģ缴 åΰ
åĿĩ çͱ
æĬĹ æĹ¥
æį® ä»ĭç»į
ä½ł åĸľæ¬¢
åĪĽæĸ° åŀĭ
åıĺ è¿ģ
è§Ĩ å¯Ł
å®Įåħ¨ 没æľī
åħĥ æĹ¦
åı¯ ä¿¡
åı¦ è¡Į
æĿij 级
åħ¥ åľº
æIJŃ æ¡£
ä¹Ł åĽłæŃ¤
æį¢ æĪIJ
ä¸į è´Ł
äºĨ 大éĩıçļĦ
éģĶ åΰ
å¸Ĥ åİ¿
å¹´ è¼ķ
å¿« æīĭ
å¸Į å°Ķ
èĩª èIJ¥
éĽª èĬ±
æIJ ģ
çľ¼ ç§ij
æŃ£ 確
çļĦ å§¿æĢģ
åĿļå®ŀ çļĦ
æĮĩ 纹
æªĶ æ¡Ī
ç½® äºİ
佩 æľį
豪 éŨ
åĵ Ĵ
æģ° 好
檢 æŁ¥
åĪĿ è¡·
大 åĶIJ
约 ä¼ļ
èĴ¸ åıij
çѹ åĪĴ
å¹´ ç»Ī
è¡Į æ¥Ń
åħ± éĿĴ
åħ±éĿĴ åĽ¢
ä¼ļ å¼ķèµ·
ä¸Ń ç§ij
ä¸Ńç§ij éĻ¢
æĮ¯ åĬ¨
åį´ åıijçݰ
ä¸įåĬ¨ 产
èĮ ¹
æĪ¿éĹ´ éĩĮ
è´§å¸ģ æĶ¿çŃĸ
æ²» çĻĤ
æħİ éĩį
å¡ŀ å°Ķ
åĽ½ ç±į
åĽł æŀľ
çŃī çī¹çĤ¹
å±± è°·
ä¸ĭ è¼ī
è®ĵ æĪij
饮 éħĴ
è¿Ļ个 游æĪı
ç»Ŀ 大éĥ¨åĪĨ
åĴ¨è¯¢ æľįåĬ¡
å¹² æ´»
è®® ä¼ļ
æ¦Ĥ è¿°
åĪĨ åĮº
æŃ» åIJİ
ç«Ļ çĿĢ
主è¦ģ é¢Ĩ导
åIJĮ åŁİ
大 æłij
对 åѦçĶŁ
社ä¼ļ ä¿ĿéĻ©
å¢ŀ èµĦ
主人 åħ¬
å®£ä¼ł æķĻèĤ²
æĸĩåĮĸ 交æµģ
客 æĪ¶
çŁ¥åIJį åĵģçīĮ
æ»ŀ åIJİ
äºĴ è¡¥
æĦŁ äºº
åī ¿
åIJİ ä»£
äºī 龸
æķĻèĤ² åŁ¹è®Ń
éĿĻ èĦī
ä¹ı åĬĽ
说 åĩºæĿ¥
çİĭèĢħ èį£èĢĢ
åĢ «
åįĩ èµ·
éķ ģ
åĩº 游
éĢļè¡Į è¯ģ
å·¥ä½ľ å²Ĺä½į
åĮł å¿ĥ
æĭ¿ æĿ¥
æ´Ĺè¡£ æľº
æĪijä¸į æĥ³
é¢Ħ è§ģ
æ¼Ķ 示
ä¸Ģ缴 没æľī
è·Ł 她
对çħ§ æ£ĢæŁ¥
ç° ¿
ä¸ĵ å¿ĥ
è®® äºĭ
åīį 端
åį¡ å°Ķ
è¨Ń å®ļ
设置 äºĨ
å©ļ 纱
åľ¨ åĽ½å¤ĸ
åı³ ä¾§
è³¼ çī©
å¥ĩ èij©
å¢ŀåĬł å̼
好 è¿IJ
åĽ½éĻħ æľºåľº
ä¸ĭ ç§°
缮åīį 为æŃ¢
ç¥ŀ ä»Ļ
å®ĥ åı¯ä»¥
æ¾Ħ æ¸ħ
èĥ½ 使
游 åĩ»
游åĩ» éĺŁ
åĩ ¹
ä¸įè¦ģ åĨį
åĨ³ èĥľ
åĨ³ æĪĺ
æĭ ½
缼 åħ¸
å¾Ī好 åľ°
æľĢ ç¾İçļĦ
åĥ ļ
å·´ åŁº
å·´åŁº æĸ¯åĿ¦
æľĢ éĢĤåIJĪ
é«ĺ èģĮ
ä¿Ŀ å§Ĩ
æİĪ æ¬Ĭ
说åΰ è¿ĻéĩĮ
æİ¨ å¼Ģ
çİĩ è¾¾
ä¸īåĪĨ ä¹ĭä¸Ģ
管çIJĨ ä¸Ńå¿ĥ
交 æ±ĩ
森æŀĹ åħ¬åĽŃ
å¾Ģ ä¸Ĭ
éªij è¡Į
æį® æŃ¤
纽 带
ç» ŀ
ä¸ī æĸ¹
æĦıä¹ī ä¸ĬçļĦ
æİ¨ è¿Ł
å¤ļæł· æĢ§
æĥ³ èµ·äºĨ
æİĴåIJį 第
å·¨ é¢Ŀ
æĿŁ ç¼ļ
å®ī å®ļ
äºĭ 實
çļĦ æĦ¿æľĽ
è£ħå¤ĩ åζéĢł
人 å±ħ
人å±ħ çݯå¢ĥ
å¿ĺè®° äºĨ
该 游æĪı
楼 ä¸Ĭ
å¼Ģ ä¼ļ
æģ ³
åıĭæĥħ éĵ¾æİ¥
ç¡ Ĵ
ç»ĻäºĪ äºĨ
åģı 好
åĵ ī
交éĢļ å®īåħ¨
éĽ Į
æ²» çĹħ
è§īå¾Ĺ å¾Ī
衬 衫
å¿ĥ æĦ¿
æ´ŀ å¯Ł
æ°ij æ£Ģå¯ŁéĻ¢
æıIJ çĤ¼
è¦ģ è¿Ľä¸ĢæŃ¥
驾 车
æĻ® æĥł
æķ ĸ
ç¦ı éŁ³
éĢģ è¾¾
è§ĦåĪĴ 设计
æīĭ å¥Ĺ
å®ī ä¿Ŀ
è¿ĺä¸į å¦Ĥ
åīį è¿°
æłĩ è®°
ç´§ æİ¥çĿĢ
æ§ IJ
深深 åľ°
满满 çļĦ
æĺ¥ è¿IJ
æĹ¥ 产
çα æĬ¤
åħ¨ æĹ¥
åħ¨æĹ¥ åζ
转 åĬ¨
ç¥Ń ç¥Ģ
ä¹° ä¸ľè¥¿
对 æľªæĿ¥
æ¶Ī失 äºĨ
åļ´ éĩį
ä¸ī æĿ¡
éħ¸ 奶
éĽĨåĽ¢ èĤ¡ä»½
西 路
åıª å¾Ĺ
éĢģ åİ»
çĭł æĬĵ
åĪ©ç͍ çİĩ
ä¸ĭ åij¨
å¥ĭ æĪĺ
æĺ¥èĬĤ æľŁéĹ´
è´Ł 责任
æĺĤ è´µ
å°¾ å·´
ç¯ĩ æĸĩ竳
åħ ®
è®Ĭ æĪIJ
å¹ ¹
çĻ» éĮĦ
ä½ Ī
å·¥ åĮł
åĵªæĢķ æĺ¯
åıį åĵį
ç§ ĥ
åĩº 轨
æĹ¥ åĨĽ
åIJį èªī
æķı éĶIJ
æľįåĬ¡ æ°´å¹³
çħ§ å°Ħ
ä¼Ĭ æĭī
ä¼Ĭæĭī åħĭ
åĨħ éĺģ
èĬĴ æŀľ
ä¸ĩ åĪĨ
éĢĢ æ¬¾
缴æĴŃ éĹ´
æĭ¿ åΰäºĨ
å°İ èĩ´
空æ°Ķ ä¸Ń
客æĪ· æľįåĬ¡
è¿IJ åĬ¿
ç»ĵ çŁ³
ä¸į å¿ħè¦ģçļĦ
èĥ¶ åĽĬ
çIJĨ ä¼ļ
æĬ½ åĩº
空æ°Ķ è´¨éĩı
æ¯ķ 竣æĺ¯
åĨ· æ¼ł
ä¸Ģ å¦Ĥ
ä¸Ģå¦Ĥ æĹ¢
ä¸Ģå¦ĤæĹ¢ å¾Ģ
æĤ£ çĹħ
åĬł æĮģ
èµŀ åĬ©
é« ®
åij½ ä¸Ń
æĦıä¹ī ä¸Ĭ
ä¸į èĪį
åģļ æ¢¦
æīĵ æī«
æĺŁ åħī
æĸŃ è£Ĥ
åħ¨ å¥Ĺ
è£ģ å®ļ
马 åħĭæĢĿ
骨 骼
ä¸Ģ è·¯ä¸Ĭ
å®ļ æĹ¶
å·¥ç¨ĭ æĬĢæľ¯
å½¼ å¾Ĺ
æ±² åıĸ
ä¸Ģ è§Ī
åIJµ æŀ¶
ä¿Ĺ ç§°
æłª æ´²
åºŁ æĹ§
è¡Į æĺŁ
åıijçĶŁ åıĺåĮĸ
é¦ĸ ä»ĺ
åįģåĪĨ éĩįè¦ģ
æĬĬ è¿ĻäºĽ
ç¥ŀ å·ŀ
æıIJä¾Ľ åķĨ
æ¥ ·
å± İ
çĬ¶ åħĥ
åŁİ å¢Ļ
çľĭ ä¸Ģçľĭ
çĶŁäº§ èĥ½åĬĽ
åŁºæľ¬ä¸Ĭ éĥ½
æīĵ æī°
åĪĿ 次
åĩº 示
åħ¶ä¸Ń ä¸Ģ个
çĶŁæĢģ ç³»ç»Ł
æīĭ æİĮ
æµİåįĹ å¸Ĥ
åľĭ åħ§
æŃ£ å̼
å¹¾ ä¹İ
æİ¨èįIJ éĺħ读
è¿Ń 代
è°ĥ ä¾ĥ
饮 åĵģ
å¢Ļ ä½ĵ
åıĺ çݰ
äºĨ 好
äºĨ好 åĩł
ä¸į çķĻ
çĪ ²
å°½ æĹ©
æŃ£åľ¨ è¿Ľè¡Į
åĩº éĻ¢
æĿĢ å®³
æıIJ 款
åıijå±ķ 空éĹ´
åīį 身
ä¸įæĸŃ å¢ŀ强
æ·± å±Ĥ次
容 纳
éĤ£ 份
å·¥ä½ľ æķĪçİĩ
æľ¬ åĽ½
失 èIJ½
æŃ£ åĽłä¸º
èĬĤ æ°´
ä¸ĭ ä¸Ģ代
çłĶåıij ä¸Ńå¿ĥ
ä¸į çIJĨ
å®Į 好
ä¿ĿæĬ¤ åĮº
ç»ĵæŀĦ è°ĥæķ´
å¥ł å®ļ
宣 称
éĺ» æĮ¡
æĴ¤ 离
ä¸į æĸ¹ä¾¿
åĴ ķ
ç¬ijäºĨ ç¬ij
çݯå¢ĥ 污æŁĵ
ä½ı æĪ·
ç»Ŀ ç¼ĺ
éϤ å°ĺ
é«ĺ å°ļ
æĢİä¹Ī åı¯èĥ½
éĿ¢ èī²
åķĨ æ¥Ń
çĸ ¹
èµĦæºIJ ä¼ĺåĬ¿
è¾ĸåĮº åĨħ
èĢĢ çľ¼
æij§ æ¯ģ
ä¸ĸçķĮ ç»ıæµİ
å¼ķ æĿ¥
ä¸Ģ åĪĻ
æĭĩ æĮĩ
æĬµ 御
éĽ į
åĩĨå¤ĩ å·¥ä½ľ
çıł ä¸īè§Ĵ
ç¨Ģ åľŁ
èİ·å¾Ĺ æĦŁ
æĪIJåĬŁ çİĩ
ç½ij 约
ç½ij约 车
èĦ IJ
æķ¬ ä¸ļ
éĩij ä»·
ç²¾ é«ĵ
买 车
åħ³ åı£
åĨį å¤ļ
æŀģ åĵģ
åIJĦ å®¶
举æĬ¥ ç͵è¯Ŀ
èļ Ĭ
æĸ¹ å½¢
ç§ijæĬĢ æĪIJæŀľ
æľĢ好 æĺ¯
éĹ® åĢĻ
红 éħĴ
åĽĽ ç§į
ç¿Ĵ æħ
ç¿Ĵæħ £
åŀ ¦
éĤ£ åıª
é¢Ĩ æĤŁ
çľ¼ éĥ¨
æ³° å®ī
ä»» æľŁ
磨 æįŁ
æĽ¿ æį¢
åħ¸ 礼
符åIJĪ æĿ¡ä»¶
è¿ĺæľī ä»Ģä¹Ī
åħ±äº« åįķ车
åı¯ åĪĨ为
åŃ£ åIJİ
åŃ£åIJİ èµĽ
举èİŀ å¸Ĥ
å¿ĥ æĦı
æīŃ æĽ²
ä½ľä¸º ä¸Ģç§į
è¿Ļ éĥ¨åĪĨ
åıĤä¸İ åΰ
ç½ij çIJĥ
實 çı¾
ç»Ħ è£ħ
åIJij å¤ĸ
å·¥ä½ľ æĸ¹æ¡Ī
åįģ æĿ¡
課 ç¨ĭ
颤 æĬĸ
åĵ ©
éĤ® å¯Ħ
äº ¢
åħį è²»
ç§ ¤
åºĶæĢ¥ 管çIJĨ
åĽĽ äºĶ
éºĴ éºŁ
å¾Ĵ æŃ¥
è¨ĺ å¾Ĺ
çĴ IJ
æĺ¯åIJ¦ ä¼ļ
æĦıè§ģ åıįé¦Ī
éļ¾ æĢª
çª į
交 æİ¥
两 åįĥ
æĩī ç͍
æľŁ éĸĵ
æIJ¬ åΰ
è®® é¢ĺ
碧 æ¡Ĥ
碧æ¡Ĥ åĽŃ
åģļ çĶŁæĦı
éĻĽ ä¸ĭ
è· ĭ
èĢģ人 å®¶
带 åĽŀ
æŀ¸ æĿŀ
è¡Į éķ¿
åĨħ容 ç®Ģä»ĭ
æ¢ ¢
æĮĩ æİ§
éĩį çĹĩ
ç½ijåıĭ 们
çı¾ 代
ç±» 产åĵģ
å¥Ķ æ³¢
æ¸ º
ç²ī ç¢İ
è¿Ļ åıªæĺ¯
æ£Ģå¯Ł æľºåħ³
é½ Ĭ
æĪ¿ ç§Ł
å¾· æĭī
å²ģ 以ä¸Ĭ
纯 åĩĢ
åĪĨå¸ĥ åľ¨
èĥ½ å¾Ĺåΰ
ä¸į å°½
ç«ŀ ä»·
çļĦ 带é¢Ĩ
çļĦ带é¢Ĩ ä¸ĭ
ä¸ŃèᝠæĿIJ
æĿij éķĩ
ä¸įåı¯ éģ¿åħį
éľ² 天
å°ı å§ijå¨ĺ
çī© ä»¶
èijĹä½ľ æĿĥ
æĭĺ çķĻ
éĥ½ è§īå¾Ĺ
æĽ² æĬĺ
æ·»åĬł åīĤ
åı¬ åĽŀ
æīİå®ŀ æİ¨è¿Ľ
æĬĦ è¢Ń
åĮĸ 身
缴 èIJ¥
ä¹Ł å¸ĮæľĽ
èį£èªī ç§°åı·
åįĸ ç»Ļ
æľī ä¸įåIJĮçļĦ
å¥ĩ çī¹
éĥ½ 认为
å¦ ŀ
æĪIJéķ¿ ä¸º
辩 æĬ¤
主 æķĻç»ĥ
æ³ķå¸Ī èģĮä¸ļ
æ¤į åħ¥
ç´¢ å°¼
åIJ¬ è¿ĩ
ä¹łæĥ¯ äºĨ
夺 åıĸ
éŁ ĵ
æľ¬è´¨ ä¸Ĭ
æİ¥ åĬĽ
äºij 端
è¦ģ åģļ好
è·¯ çģ¯
åįıåIJĮ åıijå±ķ
æľī å¾ħ
æ°´ åŁŁ
æIJľçĭIJ é¦ĸ页
è´¨éĩı å®īåħ¨
åįģäºĮ äºĶ
åĵ® åĸĺ
èĵ¬åĭĥ åıijå±ķ
åIJį 声
身 亡
çİĭ åºľ
åİŁåĪĻ ä¸Ĭ
çĥĺ å¹²
éģĹ æ¼ı
éĿ¢ 缮
åĽ½ ä¼ļ
ä¸Ģ缴 éĥ½æĺ¯
æľīä¸Ģ ä½į
éħį æľī
éĻª çĿĢ
ä¼ģ åĽ¾
æĮī ä¸ĭ
èĵĿ åĽ¾
æ© ĺ
大å¤ļ æĺ¯
辩 论
æĹĭ å¾ĭ
æĬ¥ éĢģ
æĿ¡ è§Ħå®ļ
åĬ¨ éĿĻ
åĮΠ奴
æĭľ 访
ä¸Ģ åĪĢ
ä»ĸ çŁ¥éģĵ
主 æĿĥ
ä»ĸ æĽ¾
æĴŃ ç§į
å£ģ åŀĴ
çī¢è®° 使åij½
åľ¨è¿Ļ æĸ¹éĿ¢
æīĭ èħķ
æĶ¯ æŀ¶
ä¾Ĩ èĩª
éĩį å¡ij
å¤ļ å±Ĥ次
ä»ĭ è´¨
éĿ¢ åŃĶ
潮 湿
åİ¿ åŁŁ
游æĪı å½ĵä¸Ń
å£ ŀ
åĪĹ åĩº
èµĽ åĮº
å¤ļ åįĬ
éĩįçĤ¹ å·¥ä½ľ
æĪij们 å¿ħé¡»
æŁı æŀĹ
é²ģ èĥ½
æĸ½ å±ķ
åIJĦ åĮº
åħį ç¨İ
èµĽ åIJİ
æľĢ éĩįè¦ģ
ä¸Ģ个 好çļĦ
è¿Ŀæ³ķ è¿Ŀè§Ħ
äºĨè§£ æĽ´å¤ļ
æķ¬ 请
ç¬ijçĿĢ è¯´
ä¸įæĸŃ åıijå±ķ
æijĦå½± å¸Ī
以 éĺ²
çĤ¸ å¼¹
声 åĵį
ç¤ ģ
æĩ ¿
èĪĨ æĥħ
èĩªçͱ è´¸æĺĵ
æķı æį·
ä¸ī大 éĺ¶æ®µ
èĭ Ķ
æĹº åŃ£
ä¸į 满æĦı
微信 åı·
修 为
çł´ è£Ĥ
éĢĥ 离
æ¯ı èĤ¡
è¾¾ ä¸įåΰ
æ¯ıå¹´ éĥ½
çģ¯ ç¬¼
æŃ¤ åŁºç¡Ģä¸Ĭ
åĥı 个
åĪĨ 娩
æĻ ¾
ä¸į èĩ³äºİ
红 线
误 解
举 è·¯
æ·® å®ī
产 åѦ
产åѦ çłĶ
èī¾ æ»ĭ
è»ĭ çĹħ
åīįæıIJ æĺ¯
æ¯ı ä¸Ģ天
ä¸ĥ 大
æłij åı¶
èµ° å¾Ĺ
è¿Ļ 两ç§į
æİı åĩº
æİ IJ
é¢Ĩ导 èĢħ
ä¸Ģ æľµ
个å¤ļ æľĪ
ä¸Ń åħ³
ä¸Ńåħ³ æĿij
课åłĤ æķĻåѦ
大 åĴĸ
éģĭ ç͍
è¯ļ æĦı
ç»Ħ åĽ¾
è¯ķ çĿĢ
ä¹Ķ æ²»
è¿ĺ ä¸įæĺ¯
æľī æĽ´å¥½çļĦ
åIJİ å¤ĩ
æĸ°çĶŁ åĦ¿
æ°Ķ è¡Ģ
æ²¥ éĿĴ
å±ı éļľ
æ¥Ń åĭĻ
æĪij 以为
éķ¿ çĽ¸
èĢģ çΏ
éķĩ æ±Ł
æľºæ¢° 设å¤ĩ
ä½Ĩæĺ¯ å¦Ĥæŀľ
åĿļå®ļ ä¸į
åĿļå®ļä¸į ç§»
åĨ² éĶĭ
ç®Ģ缴 æĺ¯
åĤ¨ èĵĦ
纯 ç͵åĬ¨
漫 æŃ¥
举 起
æģ¶ æĢ§
è¨ĺ éĮĦ
èģĮèĥ½ éĥ¨éŨ
åħ¨ éķ¿
鼻 è¦ĸ
ä¹³ èħº
ä½ķ å¤Ħ
æ¶Ī æŀģ
æŃ£ å¤Ħäºİ
å®ī å®ģ
æĪIJ éķ·
åıĻ è¿°
æºĥ çĸ¡
ä½Ĩ çİ°åľ¨
女 æĺŁ
å©´ å¹¼åĦ¿
æĬķ èŀįèµĦ
éĹ® éĹ®
æıŃ å¼Ģ
è¯ ı
åIJį å½ķ
èĺij èıĩ
åIJĬ é¡¶
æ¹ĸ åĮº
åįĸ åľº
建 ç¯
å»ºç¯ ī
èİ ½
åIJ¬ åIJ¬
ç«ŀäºī ä¼ĺåĬ¿
åĩº ä»»
æľī 两ç§į
橱 æŁľ
è¤ ª
è¯ķ åį·
ç»ıæµİ æĬĢæľ¯
æ·± å±Ĥ
éĩįè¦ģ åĨħ容
é£İ æİ§
çĬ¶æĢģ ä¸ĭ
éĥ¨ éĸĢ
广 汽
è§Ĥ æij©
éģĹ çķĻ
转 账
æĮģ ä»ĵ
æĢ» 计
åľĺ éļĬ
æĪ¿ 举
éĺĢ éŨ
åħ¬ åħ³
åħ³ åĪĩ
èĤ ĺ
æķ¸ æĵļ
ä¸ī åįģå¹´
è§ģè¯ģ äºĨ
å± Ĩ
çģ° å°ĺ
æ¦ľ é¦ĸ
è¦ĨçĽĸ çİĩ
ä»Ļ 女
çĶŁäº§ æĢ»
çĶŁäº§æĢ» å̼
æĪ¿ è´·
æ±Ł åĮº
åħħç͵ æ¡©
çϾ åIJĪ
確 èªį
转 ç§»åΰ
éĥ½ æĹłæ³ķ
纪念 é¦Ĩ
çŃ¾ç½² äºĨ
å¹¶ä¸į å¤ļ
æĮ ł
ä¸į太 好
ä¸ĸ 代
误 导
é«ĺå³° 论åĿĽ
åħ¼ 容
龸 æ°Ķ
æĿ¥ 访
æīĢ å¸¦æĿ¥çļĦ
æĺ¯ä¸Ģ éĥ¨
æĻļ é¥Ń
åİĨ 代
åIJ¦ åīĩ
ä¹ħ ä¹ħ
æľīæķĪ æľŁ
诱 åıij
æĢ» èµĦ产
æľ¬èº« å°±æĺ¯
çĶŁäº§ åİĤå®¶
æĹ¶ 髦
èĢIJ ç͍
ä»İå°ı å°±
æĿ¡ 约
èĭ± åĭĩ
ä¿Ĺ è¯Ŀ说
寺 åºĻ
å¿ĥçIJĨ åģ¥åº·
ä»Ģä¹Ī äºĭæĥħ
æ±ī åŃĹ
çķĻ ä½ı
åįĹ è·¯
ä¸ī 项
丢 äºĨ
æĥ³ åΰäºĨ
çѹ éĽĨ
éĻĦåĬł å̼
西 è£ħ
ä¹ĭ ä½ľ
åģļçļĦ äºĭ
çķ¶ æĤ¨
çķ¶æĤ¨ åľ¨
é¦ĸ 款
ä¸įåľ¨ ä¹İ
å·¥ç¨ĭ æĸ½å·¥
éļIJ éļIJ
åıĺ 身
沿 éĢĶ
æĤł æĤł
ä¿Ŀ æļĸ
çĶŁæ´» åŀĥåľ¾
渤 海
æŃ¦ ä¾ł
女 主è§Ĵ
举 ä¾ĭ
æ ·¨
çϽ é¢Ĩ
è£Ļ åŃIJ
è¿Ķ è¿ĺ
è¿Ī åĩº
é¾Ļ éŨ
ç»ıæµİ ä½ĵ
æĶ¶ å®ĺ
çķĮ éĻIJ
è·³ åĩº
åįĩ å̼
绵 éĺ³
çĸ¤ çĹķ
çľĭ æ¸ħ
æĭĴ çµķ
è¥Ħ éĺ³
课 å¤ĸ
åŃIJ åŃĻ
æŃĮ è¯į
æĪIJ åIJį
溶 液
åĦĴ å®¶
åķĨä¸ļ åĮĸ
辨 åĪ«
å¤ļ è¾¾
ç½ij åºĹ
ä¹Ŀ 大
ä¹Ŀ大 ç²¾ç¥ŀ
æŃ¤ 举
è¿ŀ è½½
ä¸Ģ åĢĭ人
èī² æ³½
æ¶µçĽĸ äºĨ
è¦ı åĬĥ
åĽ½ æĥħ
åį«çĶŁ åģ¥åº·
积æŀģ åĵįåºĶ
æĭ Ļ
åζ åĬ¨
æĥ³è±¡ åĬĽ
çļĦ ä¹IJè¶£
å¼łå®¶ çķĮ
å´ İ
éĩį åŀĭ
å¤ĸ å¢Ļ
æĶ¾ åѦ
è®¤çľŁ åŃ¦ä¹ł
è´¬ å̼
æ³ķ æ¡Ī
æĬ¤èĤ¤ åĵģ
éĻ·åħ¥ äºĨ
请 æĤ¨
åŀ ¢
æķĻèĤ² èµĦæºIJ
交æĺĵ å¹³åı°
æĹ¶ è£ħ
ä¼łæŁĵ çĹħ
æ¹ĸ æ³Ĭ
èµĦ 管
åݨ å¸Ī
éĹľ éį
éĹľéį µ
åĵĪåĵĪ åĵĪ
çĽĹ çªĥ
çĶľ ç¾İ
åºĦ åĽŃ
缮åīį å·²ç»ı
è¾¹ ä¸Ĭ
çģ« èĬ±
æĬ¥ è®°èĢħ
æģĭ æĥħ
ç´§ åĩij
æ°´ æµģ
è¿Ļæĺ¯ æĪij们
æ³¥ åľŁ
æĽ¾ ä»»
æĸ¹ è¨Ģ
åij¨ åħŃ
åı· 楼
ä¼ij åģĩ
误 ä¼ļ
åĽ½ åĢº
åīį å¤ķ
两 å¼ł
éĹ «
éŃĶ é¬¼
æĬĬ æĮģ
èĬĤèĥ½ çݯä¿Ŀ
æ¸ħæ´ģ èĥ½æºIJ
èĤ¥ æĸĻ
é«ĺ é¢ij
å°± æľīäºĨ
交 ä¼ļ
没 éĴ±
éĽħ æĢĿ
è¦ģ åıĬæĹ¶
åŁ¹åħ» åѦçĶŁ
欣 åĸľ
çĥŃæ°´ åύ
é¾Ļ æ¹ĸ
äºĮ 楼
æĸ°æµª è´¢ç»ı
æĸ° åĬ¨èĥ½
èµ£ å·ŀ
æĭ³ 头
æµģ åIJij
ä¹Łæĺ¯ å¾Ī
åıij åĶ®
ä¸Ń åIJ«æľī
åIJĵ å¾Ĺ
å·¨ æĺŁ
æĹł æīĢè°ĵ
æ¯Ľ åŃĶ
åħ¬åħ± 交éĢļ
çĤİ çĥŃ
èµ· èįī
åĬłçĽŁ åķĨ
说 ä¸įåĩº
大åѦ æ¯ķä¸ļ
å·¥ä¸ļ åĽŃ
éłĺ åŁŁ
åºĨ åħ¸
æµģ 产
èģ² éŁ³
ä¼¼ä¹İ æĺ¯
è´§ æºIJ
æ·± åĪĩ
æ²»çĸĹ æĸ¹æ³ķ
èµĦæºIJ éħįç½®
ç¶² åıĭ
çĶ £
äº ¥
躲 åľ¨
社 ç§ij
è»Ł é«Ķ
女 è£ħ
æŃ¡ è¿İ
综åIJĪ å®ŀåĬĽ
æł¼ å°ĩ
åħļåı² åŃ¦ä¹ł
æľĢ åŁºæľ¬
æľĢåŁºæľ¬ çļĦ
çľĭ æľĽ
åıĹ è´¿
ä¸įä»ħ èĥ½
ä½ķ å¿ħ
ä¸Ģ个 å°ıæĹ¶
ç¾ Į
æĭĽ æĶ¶
çĤĴ èĤ¡
æĿij å¹²éĥ¨
缸 çα
æ½ľ èĥ½
ä¹ į
æĹ¶ è¾°
欣 æħ°
éĵ¶ è¡Įä¸ļ
çĭŃ çªĦ
éĩįçĤ¹ é¢ĨåŁŁ
çݰå®ŀ çĶŁæ´»
éĮ¯ 誤
æĸ° è§Ħ
滥 ç͍
æĹ¶ ä¸į
æĹ¶ä¸į æĹ¶
帳 èĻŁ
ç¨Ģ 缺
åIJij 举
ä¿Ŀåģ¥ åĵģ
çıŃ éķ¿
äºĴ åĭķ
笼 罩
æ½ Ľ
æļĸ å¿ĥ
è½° çĤ¸
åºĨ 幸
è²Į ä¼¼
æĵ º
èĢIJ 磨
ä¸ĵä¸ļ 人士
ä¸Ģèά éĥ½æĺ¯
æ¼³ å·ŀ
åħ¨ èĩªåĬ¨
å½ķ ç͍
大 è·Į
æľīæķĪ æĢ§
èĩª åĭķ
ä¸ī个 æĸ¹éĿ¢
港 åĮº
信 貸
éĢļ è¯Ŀ
é«ĺ 涨
æ³Ħ æ¼ı
éħį ä¸Ĭ
åħļ å·¥å§Ķ
被 认为
被认为 æĺ¯
ä¸įä¼ļ åĨį
è°ĥ åīĤ
åıĤ èĤ¡
èĦ± åıij
å¿ł å®ŀ
åĨħ åĪĨæ³Į
ç¹ģ å¿Ļ
åıĮ åĪĽ
é©» æĿij
åĪĴ ç®Ĺ
éģİ ä¾Ĩ
åľ£ ç»ı
èıľ 鸣
æĭ¼ å¤ļå¤ļ
ä¸ŃåĽ½ 汽车
çĥŁ èįī
缴 æµģ
äºĨä¸Ģ åı£æ°Ķ
ä½İ æĪIJæľ¬
æī¾ åĽŀ
èĩª åįij
總 æĺ¯
æĸĩåĮĸ åĪĽæĦı
天 河
樱 æ¡ĥ
éªij åħµ
éĩĮéĿ¢ æľī
çİ ®
èĥ½ æī¾åΰ
éĢĥ è·ij
åĪĩ å°Ķ
åĪĩå°Ķ 西
以ä¸ĭ æĺ¯
å²³ éĺ³
çļĦ æ¦Ĥçİĩ
æĬµ åζ
å¸Ī äºĭåĬ¡
å¸ĪäºĭåĬ¡ æīĢ
åĩĨ æĹ¶
屬 æĸ¼
订 è´Ń
åįłæį® äºĨ
ä¸Ń éĢĶ
å° ĭ
é»ij 马
åİ¿ åħ¬å®īå±Ģ
ä¸ĥ æľĪ
èī² ç´ł
å¿ĥèĦı çĹħ
æĹ¶ éĻIJ
æ¯į åħ¬åı¸
å¹ķ åIJİ
ä¸Ĭ æ¦ľ
å̾åIJij äºİ
纸 ä¸Ĭ
æ¡ ĵ
éĽĨä½ĵ ç»ıæµİ
æĥħ å¢ĥ
è¦ģ åģļåΰ
ç©į 極
åıª æĢķ
æ¹ĺ 西
çļ± çº¹
åħ¨ åľĭ
çĦ¡ è«ĸ
好 æĦŁ
åįķ ä»·
è¿Ľç¨ĭ ä¸Ń
æĺĨ ä»ij
åĪĽ 客
åħħ æĸ¥
åħĪ æĬĬ
该 æĢİä¹ĪåĬŀ
åĵģ å¾·
åħ¨éĿ¢ åıijå±ķ
è¨Ī åĬĥ
æĢ» å·¥ä¼ļ
ä½Ľå±± å¸Ĥ
æĬĹ è¡¡
å¼Ģ åľº
éĴ± å¸ģ
åıĭ 们
å«ī å¦Ĵ
ç´¢ èµĶ
è®Ĭ åĮĸ
æĮ¤ åİĭ
æĮij è¡ħ
çŃī ä¸Ģæī¹
æĿ¨ 欢
ä¸ĵå®¶ åѦèĢħ
èĥ½ è¾¾åΰ
èµ° è¿ij
è´«åĽ° åľ°åĮº
éĻIJ æľŁ
ä¸į 平衡
åĽ½åĨħ å¸Ĥåľº
èµĽ åľº
éħį èµĦ
è¦ģ èĢĥèĻij
ä¸ĩ åı°
æľĪ æľ«
éĶ ¥
åŃ «
æİ¥è§¦ åΰ
åĩº 产
æķĻ åѸ
ä½ľ å¼Ĭ
çļĦ æľĢåIJİä¸Ģ
ä¿ĥ æĪIJ
åIJ¸ åıĸ
æ½ľ èīĩ
被 éªĹ
è¾ĵ äºĨ
çĭIJ çĭ¸
åįĩ éĻį
è¿ĻäºĽ ä¸ľè¥¿
æĬķèµĦ åŁºéĩij
çĶŁçī© åѦ
ç½ij绾 èIJ¥éĶĢ
åIJij è®°èĢħ
èįī åľ°
æĢ ¯
æľįåĬ¡ èĥ½åĬĽ
éĥģ éĹ·
åįķ åĵģ
å¾Ĺ 罪
æĺĵ äºİ
个å¤ļ å°ıæĹ¶
éĩį ä»»
ä¸Ĭ å®ĺ
æľ¬ éĩij
çı¾ åł´
溢 价
æĺŁ è¾°
æ´»åĬ¨ çİ°åľº
丹 麦
å¸Ŀ çİĭ
æŁ¥ æĺİ
åŃĺåľ¨ äºİ
é¦Ļ æ°´
æĬ½ æ£Ģ
å®ŀéĻħä¸Ĭ æĺ¯
æĸ° å¾ģç¨ĭ
è´¢åĬ¡ 管çIJĨ
æİ Ľ
åĨľ åİĨ
éĥ½ èĥ½å¤Ł
éĤ¯ éĥ¸
羣 實
ç» Ĭ
åĨµ ä¸Ķ
置 身
ç¥Ī 祷
çĿģ å¼Ģ
æĮĩ çĤ¹
å¼Ģ æľº
西 å®ģ
åĮĹ çº¦
积 水
åĩº åĬ¨
åıijå±ķ 模å¼ı
转 æĬĺ
èĢĥ çĤ¹
æľī ç½ijåıĭ
è´«åĽ° æĿij
æĪij们 çŁ¥éģĵ
åĪĨ éĶĢ
å±± èĦī
æ¯Ķ æĭŁ
ä¼° ç®Ĺ
æĶ¹ 建
壮 è§Ĥ
ç§ī æĮģ
æı ª
ç¦ Ģ
åĮĸåѦ åĵģ
ä¸ŃåĽ½ åζéĢł
ä¸Ģ æŀ¶
æīį è¡Į
æĭĽ å¾ħ
åıĺ æį¢
åīį 线
幸 好
è¿Ļæł· çļĦè¯Ŀ
å¿ĥ è¡Ģ管
æĢ§ çĸ¾çĹħ
åħ¨ èĥ½
åĪij 侦
ä¿¡æģ¯ åıijå¸ĥ
æĺ¾ çĦ¶æĺ¯
éĿĴ éĵľ
åIJĥ ä»Ģä¹Ī
ç͵ ä»·
æ³ķå¾ĭ è§Ħå®ļ
çħ ²
çĵ· åύ
èĤī ç±»
æıĴ åħ¥
åĹ ľ
è¿Ł è¿Ł
ä¸ĢçĤ¹ éĥ½ä¸į
è¿ĺ åĮħæĭ¬
èĪį ä¸įå¾Ĺ
æłĩå¿Ĺ æĢ§
æľĪ 以æĿ¥
ç³ĸ æŀľ
éĥ½ åºĶ该
çݯå¢ĥ åį«çĶŁ
èĪª è¡Į
éĥij éĩį
ç½ij æĬķ
åįģ ä½³
ç§ģ ä¸ĭ
æļ´ è·Į
åĬłå¿« åıijå±ķ
产åĵģ çłĶåıij
åĪĽéĢł åĩº
æĢ» è§īå¾Ĺ
åºķ çĽĺ
èķ Ĭ
åĩºå¸Ń ä¼ļè®®
主 æĿ¿
æĹ¥æĻļ éĹ´
å®ĺæĸ¹ å¾®åįļ
å¼ķç͍ æĹ¥æľŁ
åī¯ æķĻæİĪ
ç͵åŃIJ 产åĵģ
è¡° éĢĢ
çķĻ åŃĺ
çģ« åĬĽ
çĴ §
çļ Ĥ
åħ¼ åħ·
éĩį è¿Ķ
é¢Ĩ çķ¥
åĪĩ éϤ
åĨįçĶŁ èĥ½æºIJ
å®ŀåľ¨ 太
çIJĨ论 ä¸Ĭ
ä¸ī å±Ĥ
ä¸ĸçķĮ åIJĦåĽ½
å®ľ æĺĮ
è̳ è¾¹
宽 æķŀ
æ±ī æĹı
çϽ çϽ
è¿ĻéĩĮ éĿ¢
çĶŁæ´» ä¹łæĥ¯
èµŀ èµı
çĶ· 士
ä¸Ń ä¿Ħ
车 祸
åīĤ éĩı
éϤ åİ»
å·¦ è¾¹
çŃij çī¢
çīĽ å¸Ĥ
å®¶ åĬ¡
åķ ĥ
ç½® æį¢
ç´« å¤ĸ
ç´«å¤ĸ 线
å¾Ģ åīį
åĬĽ åѦ
ç´§ è·Ł
缮çļĦ åľ¨äºİ
ç» ®
ç¥ Ĥ
宣 è¨Ģ
äºĮ æ°§åĮĸ
äºĮæ°§åĮĸ 碳
æĹł ç¼ĺ
ç²¾ éĢļ
è¨ º
å¼ķåıij äºĨ
æľĢ åħĪ
æ´¾ é©»
ä¸į å¿į
æĪij çΏ
å¹´ ä¸ĭåįĬå¹´
æ·ĭ å·´
没 éĹ®é¢ĺ
åºĹ åĨħ
è·Ł æĪij说
çĶŁäº§ çĶŁæ´»
è§Ĥ æľĽ
æ¸ į
被 æī§è¡Į
被æī§è¡Į 人
èĪ ľ
æİ º
ä¸Ģ ç§Ĵ
èįī åĿª
åij¼ åĴĮ
åij¼åĴĮ 浩
åij¼åĴĮ浩 çī¹
人æ°ij éĵ¶è¡Į
çĦķ åıij
è¯ģåΏ 交æĺĵ
çķ Ķ
æľº èĥ½
å¦ ¾
æĻļ å¹´
å·¥åķĨ èģĶ
åİŁ åŀĭ
è§Ĵ度 çľĭ
æĬ¥ 社
è¯į æĿ¡
躲 éģ¿
éĩį åIJ¯
å¤ķ éĺ³
èĤ¡æĿĥ 转让
åľ¨ ä¸Ģ
åľ¨ä¸Ģ æĹģ
社ä¼ļ åĮĸ
åıijå±ķ åİĨç¨ĭ
æĭĸ æ¬ł
使 èĢħ
ä¸İ åIJ¦
æĸ° å±ĢéĿ¢
ä»Ĭ天 æĪij们
é½IJ èģļ
对 æĪij说
éĢĴ 交
æľª æĽ¾
èİ Ĭ
éĸ ī
亲 æīĭ
è§Ĵ éĢIJ
æľī é»ŀ
ç¨İ çİĩ
ä½İ 声
é»ĺ å¥ij
æĻ® æ³ķ
大 ä¸ĵ
第äºĮ 大
ä½ı åĿĢ
æĶ¾ è¿Ľ
äºĮ æĪĺ
亲 身
åĽº åĮĸ
ä¸ĭ 乡
åħ³éĶ® æĬĢæľ¯
åĽŀ æĥ³
æĬ¥ åĪĬ
æ¶Ĥ æĬ¹
èĹı çĿĢ
ç¥Ŀ æĦ¿
åįĩ 温
çĶļèĩ³ è¿ŀ
åħ¬åħĥ åīį
ç¾İ æĸ¹
è¯ļ å®ŀ
æĹł åģ¿
åīµ æ¥Ń
å°ıå¿ĥ 翼
å°ıå¿ĥ翼 翼
两 æīĭ
温馨 æıIJ示
仿 羣
æĥ ¶
èĥ¡ åŃIJ
å·¥ä½ľ ç«Ļ
硬 çĽĺ
ç« ¿
åĤ³ éĢģ
åħ¨ æł¡
é²ľ æ´»
çĴĢ çĴ¨
ç»ĵ å°¾
æį¢ æĿ¥
æĪ Ģ
ä½İ ä½į
ä¸ĩåħĥ 以ä¸Ĭ
åĬł åĪĨ
æİ¨ä»ĭ ä¼ļ
çIJĨ èµĶ
å¾· å°Ķ
æĬĹ è®®
æ´ ¼
åĸ §
åŁİ éĻħ
å¾Ī æ£Ĵ
人 æŃ»äº¡
ä¼ļå±ķ ä¸Ńå¿ĥ
äºĴèģĶ äºĴéĢļ
èĸĦ èĨľ
éĩį é»ŀ
ç¦ģ æ¯Ĵ
åĨ· ç¬ij
大家 åı¯ä»¥
é¦ĸ 缸
è¿ij è·Ŀ离
æµ® çݰ
ç§ĺ è¯Ģ
èµ· é£ŀ
æIJ ¶
羣 åģĩ
æģ ķ
å°ı åºĹ
æ°ij çľ¾
åıijå¸ĥ åħ¬åijĬ
ä¾§ éĩį
å¾ĺ å¾Ĭ
æĢ Ķ
æª IJ
æķ° 缮
åī¯ ç§ĺ书éķ¿
两 åı¥
éļIJ çŀĴ
åıĮ åıĮ
æīĭ æĦŁ
èij¡ 京
éģĹ å¿ĺ
é¬ ¥
è¿Ļ个 åľ°æĸ¹
说 çļĦè¯Ŀ
å·¡ åĽŀ
è¿Ŀ 竳
æī¾ å·¥ä½ľ
æĶ¯ çIJĥéĺŁ
裡 éĿ¢
æĺ¾ç¤º åĩº
èĩ³ å°Ĭ
两 级
åīį æ®µæĹ¶éĹ´
çĺ¦ èº«
èĤ¢ ä½ĵ
æ¯į 親
æīĭç»Ń è´¹
汽车 è¡Įä¸ļ
æİ© çĽĸ
æİ§èĤ¡ éĽĨåĽ¢
åı£ å¾Ħ
æĶ¿çŃĸ æİªæĸ½
海 绵
åħ¨ éķĩ
äºĭ åħ³
å¸Ń æī§è¡Į
å¸Ńæī§è¡Į å®ĺ
éĤ£ 次
åı¯èĥ½ åĩºçݰ
ä¸Ńå¿ĥ åŁİå¸Ĥ
翻 身
ä¹Ł ç®Ĺ
ä¾µ çķ¥
åĸĩ åıŃ
æ¯ı次 éĥ½
è§ ħ
éĻ¢ éĻ¢éķ¿
å§ĭ äºİ
èѦ åĬ¡
èᝠæĿIJ
å±ł æĿĢ
æľ¬èº« å°±
éļıæĹ¶ éļı
éļıæĹ¶éļı åľ°
åĶ® åįĸ
æĹłäºº 驾驶
é¢ ħ
åĵģ 質
åĺ² ç¬ij
è·ij åİ»
åħĭ éĩĮæĸ¯
çķ¸ å½¢
修 饰
磩 éĺµ
éŁ³ä¹IJ ä¼ļ
æŁ³ å·ŀ
é½ ¡
ä¼ļ è°Ī
æŃ£ çīĪ
ä¹Ł åIJĮæł·
æļ§ æĺ§
è¡ĮæĶ¿ éĥ¨éŨ
ä¹ĸ ä¹ĸ
èĤ¤ èī²
æĹ¶ ä»»
羣 åĪĩ
æľĪ ä¸ĭ
æľĪä¸ĭ æĹ¬
举æĸ¹ è´¢å¯Į
è£ħä¿® åħ¬åı¸
éĢĢ è¿ĺ
åĭĺ å¯Ł
åĵ¥ 伦
åĵ¥ä¼¦ æ¯Ķäºļ
çĭ¬ ä¸Ģ
çĭ¬ä¸Ģ æĹł
çĭ¬ä¸ĢæĹł äºĮ
è°ĥ åij³
åİĭ è¿«
åħ¨çIJĥ æľĢ大
åī¯ æł¡éķ¿
æĽ´ ä½İ
åĪĨéĴŁ åIJİ
åĽŀ ä¾Ĩ
åζ åīĤ
åijĬè¯ī 大家
çĤ¹ éĴŁ
åįģä¸ī å±Ĭ
åij¨ åĽĽ
è¿Ļæł· ä¸Ģ
è¿Ļæł·ä¸Ģ æĿ¥
èĭ Ł
æľĽ åİ»
æĪIJ è¯Ń
å½ĵ åį³
ç¬ij 声
ä¹ĭ åĬ¿
åĪijäºĭ æ¡Īä»¶
æĮĤ çĿĢ
ä½ķ ç§į
å°ı 游æĪı
åĽ½å®¶ æĪĺçķ¥
åĨ· åĨ·
å®ľ 宾
æIJº ç¨ĭ
è¶ĭ äºİ
åıį çľģ
常 说
ä¸ĩ æĪ·
åĥµ å°¸
åįĥä¸ĩ åĪ«
åıijçݰ éĹ®é¢ĺ
åı¯ çŁ¥
éŨæĪ· ç½ijç«Ļ
åģ¥åº· 产ä¸ļ
åı³ è¾¹
æµ· è¿IJ
è¿ij ä¹İ
åĮ» æ²»
æĢ» ç®Ĺ
ä¸Ģ åĪĨéĴŁ
æĭ §
ä¹Ł æľīä¸ĢäºĽ
ä¾Ľç͵ åħ¬åı¸
å»ī ä»·
帮 ä»ĸ
æŃ¤æ¬¡ æ´»åĬ¨
åıªèĥ½ 说
èĬ ĭ
çīĩ 段
åŃĺåľ¨ éĹ®é¢ĺ
ä½łä¼ļ åıijçݰ
è½® å»ĵ
ç½ij éĢļ
滨 æ±Ł
æİĪ ä¿¡
é»İ æĺİ
ä¸į å±ŀäºİ
约 åįł
éķ¿æ²Ļ å¸Ĥ
èĥļ èĥİ
åħĥ ä»¶
éĻĨ åĨĽ
è³¼ è²·
æĮĩ æľĽ
å®ŀä¹ł çĶŁ
çī¹çĤ¹ æĺ¯
çıł æ±Ł
çľĭ ä¸įåĩº
ä¸įè§ģ äºĨ
ç¼ ī
éĺµ èIJ¥
åĶIJ æľĿ
没 å¿ħè¦ģ
åĽ½åľŁ èµĦæºIJ
ç»ıæµİåѦ å®¶
åIJĪèĤ¥ å¸Ĥ
çIJ¢ 磨
ç¡® åĪĩ
åŁİå¸Ĥ åıijå±ķ
çŃ· åŃIJ
人æ°ij æľįåĬ¡
满 åĪĨ
è¿· ä¿¡
ä½ľèĢħ æľ¬äºº
æĸĩ竳 æĿ¥æºIJ
ç«Ļ ç«ĭ
æŀĦ æĪIJäºĨ
è¾Ľ åĭ¤
è¶ħ 强
éĶ ļ
åīįä¸ī åŃ£åº¦
å°± è§īå¾Ĺ
å´ĩ é«ĺ
è¶Ĭ ä¾Ĩ
è¶Ĭä¾Ĩ è¶Ĭ
å¸Ĥåľº èIJ¥éĶĢ
综åIJĪ ç´łè´¨
åŃ ļ
ä¾® è¾±
äºĮ åŃĹ
å·¥ä½ľ ä»»åĬ¡
åı²ä¸Ĭ æľĢ
æľĢ ä¼ĺ
åIJ© åĴIJ
表 çϽ
èİ« åIJį
èİ«åIJį åħ¶
èİ«åIJįåħ¶ å¦Ļ
å¹ £
åIJĮå¿Ĺ 们
建设 çĶ¨åľ°
åĦ Ģ
éħį åģ¶
å¼ ©
åͱ çīĩ
æīĭ èĦļ
åħ¼ ä»»
åģľ æĶ¾
æŃ£ å®Ĺ
æĸ° åĨľæĿij
åĤ¬ çĶŁ
æīĢ åŃ¦æł¡
念 ä½Ľ
åͤ éĨĴ
åħ± åĪĽ
æĭī ä¸ģ
èĥĮ çĿĢ
çĶŁæĢģ ä¿ĿæĬ¤
åı£ 头
æĸ¹åIJij çĽĺ
調 æķ´
æĭĽèģĺ ä¿¡æģ¯
åħ¶ä»ĸ åĽ½å®¶
ç®Ģ æĺĵ
åĮ¿ åIJį
è¯Ħ æµĭ
æĺ¯ä¸Ģ 座
çīµ æīĭ
足 迹
çIJĨè§£ åĴĮ
æľĢ åıĹ
å¿ĥ è·³
çζ 親
éĿŀ常 åĸľæ¬¢
èĭ¦ éļ¾
æĬĢ å¸Ī
æ°ij æĦı
æĪĺ åĽ½
æĽ¿ è¡¥
æ´¥ è´´
ä¸ŃåĽ½ ä¼łç»Ł
åIJĦ è¡Į
åIJĦè¡Į åIJĦ
åIJĦè¡ĮåIJĦ ä¸ļ
第äºĶ å±Ĭ
èį· èĬ±
æĦı èŃĺ
票 价
åĪĨ æµģ
æĿİ çϽ
æ±Ł åĮĹ
æİĴ æĸ¥
ä½ĵ éĩı
åĮħåIJ« äºĨ
åĪĺ æŁIJ
çݰ å¦Ĥä»Ĭ
å·¥èīº åĵģ
è¿Ļç§į æĸ¹æ³ķ
åĬŀåħ¬ 楼
ç͵ å·¥
çħ Ļ
åį¡ çīĩ
å¹´ å¹´åºķ
ä¸ĵ项 èµĦéĩij
åĮ» ç§ij
åĮ»ç§ij 大åѦ
åĽŀ头 çľĭ
ä¸į å±ij
èĩª 驾
没 æĶ¶
æīĵ çĮİ
èĦ¸ éĥ¨
åıĥ èĢĥ
å°Ĩ 士
è´«åĽ° 人åı£
çIJĨæĥ³ 信念
é£İ å°ļ
人æīį éĺŁä¼į
çij ¾
æĿ¥ è¿ĻéĩĮ
æ´Ĺ 涤
å¹´ èĸª
èĭį çϽ
ä¸ĩ äºĭ
课 æľ¬
åºĵ éĩĮ
çī¹ æ´¾
ç´¾ åijĺ
èµŀ ç¾İ
ç©¿ æĪ´
製 ä½ľ
èµŀ æĪIJ
ä¸Ģ ä¾§
å½ĵåľ° 人
æĭ İ
纸 质
ä½Ļ 个
éĶĤ çĶµæ±ł
æľº åŀĭ
éĻ¢ éϢ士
åģļ å·¥
å¼ł è´´
ç¥Ľ æĸij
æ®ĸ æ°ij
å¥ij 约
æ¹ĺ æ½Ń
æIJ ĸ
åŃĺ è´§
交éĢļ 大åѦ
è¶ģ çĿĢ
æĸĩçī© ä¿ĿæĬ¤
å¤ĩ æĪĺ
éĩĩ 纳
åįĬ æľĪ
æľĢ åħ³éĶ®
æľĢåħ³éĶ® çļĦ
æİ¥ éĢģ
æĶ¶ åī²
åıį åĢĴ
çĥ Ľ
æ ½Ķ
ä¼Łå¤§ å¤įåħ´
çļĦè¯Ŀ è¯Ń
容 å¿į
å®ļ éĩı
æķ Ĺ
åĵģçīĮ 形象
æīŃ è½¬
åĽ½å®¶ éĩįçĤ¹
èĨĿ çĽĸ
ä¸Ģ 楼
大 éϏ
éĤª æģ¶
åĽŀ åij³
çĮ ¿
çĿ¡ åīį
æĹł è¾ľ
çĹħæ¯Ĵ æĦŁæŁĵ
æľºæ¢° åĮĸ
çĤ¹ 亮
溶 解
åĩłä¹İ æīĢæľī
è·ij éģĵ
ç͵è§Ĩ æľº
åı ¨
æijĩ äºĨ
æijĩäºĨ æijĩ头
èĩª è´Ł
综åIJĪ åĪ©ç͍
èĩª å¦Ĥ
åİŁ ä¾Ĩ
ä¹Łä¸į æĥ³
èĬĤ 课
è¿ĩ åī©
çͲ çĬ¶
çͲçĬ¶ èħº
æĸ° ä¸ĸ纪
èĩªä¸» åĵģçīĮ
é«ĺ å±Ĥ次
ä¸Ģ è§Ĵ
è¡Į äºĭ
ç¥ĸ åħĪ
å©ļ åIJİ
éĹ´ éļĻ
ç¼Ŀ éļĻ
è¿Ļ æĶ¯
ä¸įæĸŃ åĪĽæĸ°
å¾® åŀĭ
æĽĻ åħī
享 ç͍
ä¸ŃåĽ½ ç§»åĬ¨
éĹŃ çݯ
æī§ æĦı
åıijå±ķ æł¼å±Ģ
æł¸å¿ĥ åĮº
éªļ æī°
åħļåĴĮ åĽ½å®¶
ä¸ŃåĽ½ æĶ¿åºľ
帶 èijĹ
ä¸ĩåįĥ çĵ¦
åħ© 人
äºİæĺ¯ æĪij
åĽº ä½ĵ
çªģ å¦Ĥ
çªģå¦Ĥ åħ¶
çªģå¦Ĥåħ¶ æĿ¥
éĩĮç¨ĭ ç¢ij
çα ç¾İ
æŁ¥ éªĮ
åıĮ èµ¢
éĹª åħī
楼 å®ĩ
æĻ ı
æľī è¶³å¤ŁçļĦ
æŁĶ æĢ§
ä¿¡æģ¯ å®īåħ¨
管 线
å¹¶ ä¸įä¼ļ
åύ ä»¶
ä½ł åºĶ该
çĿĢ å®ŀ
æĺİ æ¸ħ
æĬĹ çĶŁç´ł
æīĵ æŃ»
å®Įåħ¨ ä¸įåIJĮ
èĬ± æ¤Ĵ
æĶ¾ 宽
ä½İ 端
åĽĽ èĤ¢
åĮĹ京 èµĽè½¦
éĽĨ å¸Ĥ
æľª å©ļ
大å¹ħ æıIJåįĩ
建çŃij 设计
çĭ¬ æľīçļĦ
æİ¢ éĻ©
æ²³æµģ åŁŁ
æħķ 容
被 çĽĹ
åĵº ä¹³
èı ģ
æĥ¬ æĦı
è¶ĬæĿ¥è¶Ĭ 好
广大 群ä¼Ĺ
å¾· èĤ²
å¸Ĥåľº ä»·æł¼
奥 巴
奥巴 马
èĬĤ缮 ä¸Ń
两 款
ä¸ĩä½Ļ åħĥ
ç»´ å°Ķ
çĶŁçī© ç§ijæĬĢ
åIJ¬ èµ·æĿ¥
çł ļ
æĭŁ å®ļ
æ²¹ çͰ
声 èªī
建çŃij ä¸ļ
éĻIJ è´Ń
çīĩ åŃIJ
çķľ ç¦½
ç½ij é¦ĸ页
ä¼Ĺ çѹ
æĴŀ åĩ»
åīį ä¸įä¹ħ
åīį ä¸ĸ
åĽĽä¸ª æĦıè¯Ĩ
æµĭ ç»ĺ
éĺ² ç©º
漫éķ¿ çļĦ
æ²IJ æµ´
æ¯Ķè¾ĥ ç®Ģåįķ
æµĭ å®ļ
åĽŀ è°ĥ
让 人们
èĴĭ ä»ĭ
èĴĭä»ĭ çŁ³
ç»ĵ æĻ¶
å¢ŀæ·» äºĨ
æĿ¡ è¯Ħ论
åī¯ ä¼ļéķ¿
ä½ı æīĢ
ç»Ļ åĩºäºĨ
è°ĥ éħį
æ² ĸ
æľī ç͍
æľīç͍ çļĦ
ä¸ĢæĿ¡ é¾Ļ
éĩİ å¤ĸ
ç¼ĺ åĪĨ
æ°¸è¿ľ ä¸įä¼ļ
æŀľ æłij
大åıij å¿«ä¸ī
麻 éĨī
äºij éĽĨ
åİ» åĵªéĩĮ
åħ¥ å¸Ĥ
ä»» æĢ§
建 档
建档 ç«ĭ
建档ç«ĭ åį¡
ä¸Ģ 棵
社 åįĢ
缸 ä¼´
åļ ·
å¡« åħħ
ä¸Ģ æĹı
ç¾ ģ
åıĸ è¯ģ
èΰ éĺŁ
åİĤ åĮº
è¡· å¿ĥ
åıijå±ķ éĺ¶æ®µ
é«ĺ 强度
åĹĵ åŃIJ
é¢Ĩ è¡Ķ
楼 主
大 èĴľ
æŀķ 头
ç²® æ²¹
é»Ħ çĵľ
æĵ Ĵ
å°ı çĭĹ
æĶ¹éĿ© å§Ķ
åįģ åĪĨéĴŁ
é²ľ èī³
åħ³ ç¾½
çĭĢ æħĭ
å®ŀç͍ æĢ§
å°ij è§ģ
é£ŀ æī¬
çͰ éĩİ
æIJ Ĥ
è¿Ļ个 è¯į
åºĶæĢ¥ é¢Ħæ¡Ī
è§Ĵ度 æĿ¥çľĭ
æķ¬ çķı
æ³ķ å®Ŀ
åĸĦ æĦı
æīĵ æĸŃ
对 åĨ³
çµķ å°į
åĢŁ æŃ¤
å¼Ģ æºIJ
å°ı 說
ç¥ º
å²ģ 以ä¸ĭ
éĢĢå½¹ åĨĽäºº
ä¸įä¹ħ åīį
åĩº åİĤ
讽 åĪº
æĿ¥çľĭçľĭ åIJ§
éŃĶ åħ½
çķĻ ä¸ĭæĿ¥
å±ħ 室
åłħ æĮģ
çľĭ äºĨä¸Ģ
çľĭäºĨä¸Ģ çľ¼
éĽĨåĽ¢ æĹĹä¸ĭ
æĪĺ æĪĺç»ĦåIJĪ
è®¤çľŁ èIJ½å®ŀ
汽车 产ä¸ļ
çī©çIJĨ åѦ
æķ µ
éĴ Ŀ
åĽ¢ éķ¿
ä¸įæĸŃ æī©å¤§
èĤ© è´Ł
åıijå±ķ 缮æłĩ
è³ĩ éĩij
åīį ç½®
ä¸ŃåĽ½ åı¤ä»£
æŃ» åĪij
åħħåĪĨ ä½ĵçݰ
åħ³ éŨ
ç¾İ æĦŁ
æīĵ åħ¥
æĬijéĥģ çĹĩ
å°ij çĪ·
æłij æŀĿ
æ¶Īæģ¯ ç§°
æ´Ľ åħĭ
åį ¯
è¿Ī åIJij
æİ¨ åĭķ
ä»İä¸ļ èĢħ
åİ» ä¹°
欢 快
æĭ¥ æĮ¤
马 桶
æĬĬ æİ§
æĶ¿ åħļ
å¼ł æī¬
客 æłĪ
红 æĺŁ
éĢģ æĿ¥
åħ¨åŁŁ æĹħ游
èĩª ç§ģ
åįģäºĮ æĿ¡
åı¹ æģ¯
ä¸Ģ èīĺ
ä¿Ŀ è´¹
æĸ½å·¥ çİ°åľº
æľī 幸
ç»Ń èĪª
åı¯èĥ½ æľĥ
èĥĮ åıĽ
ä½£ éĩij
ä¸ī çŃīå¥ĸ
å¾Ī 满æĦı
游æĪı åľ¬
群 éĩĮ
æŀĦ ä»¶
åºı å¹ķ
太 æ¹ĸ
æľ¨ è´¨
æĻĭ æ±Ł
çµĤ æĸ¼
è·³ è·ĥ
åĢºæĿĥ 人
çŃī 诸å¤ļ
æĶ¾ åĩº
åħ³éĶ® æĹ¶åĪ»
æĦŁæŁĵ èĢħ
é£ŀè¡Į åijĺ
èĥĨ åĽº
èĥĨåĽº éĨĩ
æĬ± æŃī
åij¨ äºĮ
æĸ° æĹ¶æľŁ
åĨ·éĵ¾ çµģ
è¿Ļç§į æĸ¹å¼ı
该 æĿij
åĽŀ é¦Ī
åŁºçĿ£ æķĻ
人 åıĤ
æŀ¯ çĩ¥
æī¹åıij å¸Ĥåľº
åħħåĪĨ èĤ¯å®ļ
å¸Ĥ æĶ¿åįı
äºĭ æ¥Ń
龸 çİĭ
çĥŃ æIJľ
åįģä¹Ŀ 大
ä¼´ æľī
ç¾İåĽ½ æĢ»ç»Ł
åŁİå¸Ĥ 管çIJĨ
ä¸ĭ 令
èĥ¸ åı£
åıª çŁ¥éģĵ
åij¨ ä¸ī
ç͍ æĪ¶
éŃ ¯
å¿ĥ è¡Ģ
带头 人
åĮ» åĬ¡
åĮ»åĬ¡ 人åijĺ
æİ§åζ åύ
ä½ľåĵģ åĨħ容
æĪĺ åıĭ
åİĨ å¹´
ä¸į åħĭ
ä¸įåħĭ ä¸įåıĬ
æĹ¥ æŃ£å¼ı
è±IJ å¯Į
ç¨İ è´¹
æĹ¶ æķĪ
å±ķ ä½į
è¡¡ éĺ³
æĪ¿ 貸
çĪĨ 款
ä¹IJ æĦı
çĶ· 主
å¯ ¬
æľĥ èѰ
ä¹ĭ å¤ľ
åIJĮ 樣
ä¸įè¦ģ 太
ä¼Ĭ æĸ¯
ä¼Ĭæĸ¯ åħ°
åŁºæľ¬ åİŁåĪĻ
åİ» æİī
ä½İ ä¿Ŀ
个 交æĺĵ
个交æĺĵ æĹ¥
èģĬ èģĬ
åĽĽ ä½į
åħļç»Ħ æĪIJåijĺ
主è¦ģ ä»İäºĭ
å½± éŁ³
åĨĴ åĩº
åij¼åIJ¸ éģĵ
è¾¾ å°Ķ
æľ¨ åľ°æĿ¿
诡 å¼Ĥ
çģ¯ åħ·
çģ« çĥ§
è§£ èĦ±
æĦĪ åıij
æ¹ĸ å·ŀ
é£İ ä¿Ĺ
æĸ° å½¢åĬ¿
æĸ°å½¢åĬ¿ ä¸ĭ
è² Ŀ
èĦ ĵ
åĬ¨åĬĽ çĶµæ±ł
é£ŀ èι
飧 æĢ§
åĪ© çī©
åĪ©çī© æµ¦
ä¸į 认è¯Ĩ
ç¼ĸ ç»ĩ
ä½ľ åĿĬ
èģĮä¸ļ æĬĢèĥ½
çľĭ è¦ĭ
åĽ´ æ£ĭ
æĺı è¿·
å½Ĵ å±ŀäºİ
æĤ¬ å´ĸ
éĨ« çĻĤ
å®ĭ 代
åºĦ æĿij
èĹ ķ
çĮĽ çĦ¶
çĩĥæĸĻ çĶµæ±ł
å®ŀä½ĵ åºĹ
ä¸įè¶³ 以
æĥħ ç·
æĥħç· Ĵ
å»Ĭ åĿĬ
ç͵ åı°
åºĶ åĬĽ
ä¸Ńå°ı åѦçĶŁ
èĥ¡ åIJĮ
éī´ åĪ«
åĨħ ç½®
乱 象
æ¬Ĭ çĽĬ
å¼ĢæĶ¾ å¼ı
åįļ æĸĩ
讲 课
çŃī åİŁåĽł
穷 人
交 æĽ¿
æĬ¤ çħ§
åıijå±ķ æľºéģĩ
客 åķĨ
åıį ä¹ĭ
ç±³ é¥Ń
å¹¶ åıij
å¹¶åıij çĹĩ
æ±ī åŃIJ
æŀľ åĽŃ
对æĪij æĿ¥è¯´
åģı åIJij
æī¹ 示
读 åIJİ
读åIJİ æĦŁ
æĺİ æĻº
åĽ´ çĿĢ
åıį 转
æĿ¨ å¹Ĥ
ä¸ĵ åįĸ
ä¸ĵåįĸ åºĹ
åıĹ éĻIJ
åºŁ è¯Ŀ
æŀģ å°ij
åįĪ åIJİ
è¿Ľ ä¿®
åīĬ åĩı
æľ¬ç§ij çĶŁ
ä¼ĺ éĢī
åħī çħ§
åıĻ äºĭ
åıĸ æļĸ
åĮĹ è·¯
æ¦ ķ
èİĨ çͰ
楼 å±Ĥ
天 èĬ±
天èĬ± æĿ¿
çĤ ľ
å·²ç»ı æľīäºĨ
è¶ ¾
çͳ åįļ
ç͵ éĺ»
åĬŁ è¯¾
æŃ¥ æŃ¥
éĤ£ä¹Ī 容æĺĵ
æŃ¤ æĸĩ
ä½ °
计 è¾ĥ
çīĩ éĿ¢
ç͵影 éĻ¢
ä¸į åħ¬å¹³
ä¸ī æľŁ
æĹħ游 èµĦæºIJ
å¤ļç§į å½¢å¼ı
è£Ĥ ç¼Ŀ
åIJİ æİĴ
硬 度
åĽŀ æļĸ
éģĵ æķĻ
è´« è¡Ģ
æ¸ħ é¦Ļ
伤 çĹħ
æĦı 義
çļĦ ç¼ĺ
çļĦç¼ĺ æķħ
åºĦ 严
åıªæĺ¯ 为äºĨ
æīĵ æĬĺ
以 ä¾Ĩ
滿 足
çİĽ 丽
風 éļª
æĸĩ ç§ij
éħįå¤ĩ äºĨ
è¿Ľ é£Ł
æ¶ ¡
è·¯ ç¨ĭ
åı« 声
ä¸Ńå¿ĥ åŁİåĮº
æľīæīĢ ä¸įåIJĮ
å¼µ è²¼
é¢Ħ æĬ¥
æľīå¤ļ ä¹Ī
è¿Ľè¡Į åħ¨éĿ¢
æĽ¾ ç¶ĵ
ä¸ī 代
å®ı 大
æ¸ħ æī«
éĢī åĩº
åĵª ä¸Ģ个
主 義
ä¾Ŀ æĵļ
çļ® éĿ©
èµ¶ æĿ¥
çŃĽ æŁ¥
æ¨ Ł
ä¿Ŀ èįIJ
åIJĥ æĥĬ
æľĭåıĭ们 对
ä»ĸ æĺ¯ä¸Ģ个
åºŁ æ°Ķ
æ» ħ
è´¢ ç¨İ
æĿij æĿijæ°ij
èµĦ产 è´ŁåĢº
å®ī å¨ľ
缮åīį åĽ½åĨħ
æĦŁè§ī èĩªå·±
çµIJ åIJĪ
éͦ æłĩ
éͦæłĩ èµĽ
æĽ´ æ·±
åŁº æķ°
éħ¿ éħĴ
çī¹èī² äº§ä¸ļ
åİĭ å®ŀ
ä¾Ŀæ³ķ 追究
æ·¡ å®ļ
ç®Ģ缴 å°±æĺ¯
å£ĵ åĬĽ
æ°ij å¿ĥ
ä¸į åIJĪéĢĤ
çͱæŃ¤ åı¯è§ģ
èµŀ èªī
æ¾ ¤
åĩłå¹´ åīį
åIJī ä»ĸ
çł´ æįŁ
轻轻 åľ°
å²Ľ 屿
æĦı å¢ĥ
ä»Ģä¹Ī åı«
åģĩ è£ħ
éĢģ è´§
å¹ķ å¢Ļ
妥 åįı
åĽ½ æĹĹ
äºĨ å¾Īä¹ħ
åĪĨ辨 çİĩ
ç´ Ķ
éĺ³ åĮº
åĩŃ çĿĢ
åģľè½¦ ä½į
京 éĥ½
éĶ £
æĵ ¾
è¿Ľ éŨ
åĪĺ æµ·
åĽĽ 级
女 足
è¡ĮæĶ¿ 审æī¹
éģ¥ æİ§
ä¸į éĮ¯
å¾Ĺ å¾Ī好
为 缮çļĦ
ä»į æľª
ç²¾ è£ħ
éĢį éģ¥
尽 头
çºł ç¼ł
éłĺ å°İ
æĭħ è´Ł
æĪĸèĢħ åħ¶ä»ĸ
åıªä¸įè¿ĩ æĺ¯
åı® åĺ±
åģĩ åĨĴ
æļĸ æ°Ķ
çĽIJ åŁİ
被 è§Ĩ为
诺 è´Ŀå°Ķ
ç»ĻäºĨ æĪij
è¿ij åįĥ
éĩį åĽŀ
éĨĴ äºĨ
ç͵ è§£
忽çķ¥ äºĨ
èĥĮ éĥ¨
æĸĩæĺİ åŁİå¸Ĥ
æº ħ
è² ĵ
æĬµ æĮ¡
åĸľæ¬¢ åIJĥ
éĿĻéĿĻ åľ°
å¾Ī æ·±
åŁºç¡Ģ çŁ¥è¯Ĩ
è¿ĩ éĶĻ
çIJĨ ç§ij
交æµģ åIJĪä½ľ
èĪ Ķ
調 æŁ¥
æħĪ æĤ²
éĴ °
èĩ´ ç͵
å®£ä¼ł æ´»åĬ¨
åıĺ éĩı
çļĦ人 æĿ¥è¯´
æĹ¶ éļĶ
ä¸į管 ä½ł
缸 è¿ij
è´µ éĩijå±ŀ
ä¹Łä¸į åı¯èĥ½
ç²ī æľ«
åįĹ çĵľ
çϽ 马
åħī æºIJ
éĩij å¥ĸ
çĭ¬ è§Ĵ
çĭ¬è§Ĵ åħ½
妨 ç¢į
ç»Ļ åĬĽ
ä½Ĩ ä»į
å¼łå®¶ åı£
èIJ¬ åħĥ
渲 æŁĵ
éķ¿å¤§ äºĨ
è®°èĢħ äºĨè§£
æĢĢ çĿĢ
è¦ģ åѦä¼ļ
游æĪı 代
游æĪı代 ç»ĥ
äºĮ çϾ
æĦıè¯Ĩ å½¢æĢģ
çİ º
计åĪĴ çĶŁèĤ²
æī¾ åĩĨ
åħ° èĬ±
è¿Ļ座 åŁİå¸Ĥ
污 泥
å®ĺæĸ¹ 微信
å½Ĵ å±ŀ
æ°§ æ°Ķ
éģİç¨ĭ ä¸Ń
åį°è±¡ æ·±åĪ»
稳 妥
çµIJ æĿŁ
åŃķ æľŁ
çī¹ æĿĥ
åĿļ åĽº
顺 åĬ¿
æŀľ èͬ
éĨ« 師
åİ ®
ä¹Łæĺ¯ å¦ĤæŃ¤
é¦Ĵ 头
缸 åĬ©
干 线
ä¸Ģ æľ¬ä¹¦
ç» ¥
æĮ¯ å¥ĭ
èĤ¾ èĦı
åĭķ çī©
é£ŀ è·ĥ
èıľ åĵģ
å¤ļ ä½Ļ
å¤ļä½Ļ çļĦ
éĢĿ ä¸ĸ
æģĭ 人
å¼Ģåıij åĪ©ç͍
顺 丰
éĩİ å¿ĥ
æł¡ å¤ĸ
æģIJ é¾Ļ
éĿ¢ åħ·
éķ¿ è¾Ī
éļı å¤Ħ
éļıå¤Ħ åı¯è§ģ
紧 缺
éĩį ä¸Ń
éĩįä¸Ń ä¹ĭ
éĩįä¸Ńä¹ĭ éĩį
奥 æĸ¯
奥æĸ¯ åį¡
ä¸Ģ个 å¤ļ
ä¸Ģ个å¤ļ æľĪ
ä¸įåı¯ 缺å°ij
æĸ° æł¼å±Ģ
æıIJ æĮ¯
è¡Į è´¿
æ¼Ĥ æµģ
èģĬ åŁİ
åħ´ 建
è´¨ æ£Ģ
ç§ģæľį 游æĪı
æĽ´ éĩįè¦ģ
è´ ®
çħ ľ
转åıĺ 为
è¿Ļ 两年
ä¿Ŀ é²ľ
æī§ æķĻ
çĥ ¨
å¼Ģåıij 建设
è¿IJèIJ¥ 管çIJĨ
误 差
京 åī§
å¸IJ åı·
å·¥ä½ľ ä½ľé£İ
ä¸ĸ ä¿Ĺ
çϽ 宫
天 åĽ½
å¤©åĽ½ ç»§ç»Ń
å·´ æĸ¯
èIJ¥ åĪ©
åĵģ æł¼
æĿijæ°ij 们
æĪ¿ 车
çŃī çĹĩçĬ¶
å¦Ĥ å®ŀ
å® ¸
å±Ĥ 级
éĶĻ è¿ĩäºĨ
ç»ĵ å®ŀ
ç¬ij èĦ¸
羣å®ŀ æĢ§
éĥ½å¸Ĥ æĬ¥
é¥Ń èıľ
åºĶ 注æĦı
æĬ½ çĥŁ
伪 éĢł
åīį ä¸Ģ天
éŃĶ é¾Ļ
éŃĶé¾Ļ 令çīĮ
约 è°Ī
绣çѹ æİ¨è¿Ľ
让 ç͍æĪ·
åħ¨éĿ¢ èIJ½å®ŀ
å¼Ħ å¾Ĺ
è°Ī æģĭçα
鸣 æĪIJéķ¿
鸣æĪIJéķ¿ è®°
æ´ĭ æ´ĭ
çĸı æķ£
éĿ¢ç§¯ 约
æµĵ 缩
æĸ¯ é¡¿
çĶŁæĢģ åľĪ
æī§ 导
ç§» éĢģ
齿 轮
æł¹æľ¬ å°±ä¸į
缩 åĩı
èµ° ä¸ĭåİ»
çĿ« æ¯Ľ
ä¹Łä¸į éĶĻ
åıįæĺł åĩº
èĭ¦ æģ¼
缸åħ³ æĶ¿çŃĸ
é«ĺ 楼
ç²ī èī²
æĬķèµĦ é¢Ŀ
ä¸į ç»ı
ä¸įç»ı æĦı
å®ģ æĦ¿
èĪĮ 头
æ»ĭ çĶŁ
å®ģ åİ¿
åīįåĪĹ èħº
åĩ ³
é£Ł 欲
åıĸ èĥľ
éĻ¢ åŃIJ
ç´łè´¨ æķĻèĤ²
滨 å·ŀ
æĬ¢ æĬĵ
å¼Ĥ åij³
åĴ ļ
åĬ į
宽 éĺĶ
æļ´ 涨
æĥł åıĬ
è§Ħ ç¨ĭ
ä¾Ľ åħ»
éĢģ å¾Ģ
å±± åºĦ
举 äºļ
å±ķ é¦Ĩ
è§£ éĶģ
æĹł è§Ĩ
éĻį èIJ½
è¿ŀ äºij
è¿ŀäºij 港
åıĤ è°ĭ
çİ ĸ
ç¬ ĥ
èĢĹ è´¹
æī¿ å¾·
社ä¼ļ æķĪçĽĬ
åįĹæµ· ç½ij
åĪĽ 伤
èIJ ±
åħħ æ²Ľ
ç½ijç«Ļ 建设
大 åºĨ
åĨį éĢł
åŃĹ æł·
åħ¨æ°ij åģ¥èº«
èĮ« èĮ«
æµ® åĬ¨
åīį åı°
å¢ŀ 设
éĢĽ è¡Ĺ
åĢĴ éĹŃ
æ³ķå¾ĭ 顾éĹ®
çĸ ®
çĹħ çĹĩ
空 åīį
请 æķĻ
èĥľ ä»»
æĿĢ èıĮ
æĪĺæĸĹ æľº
ç»ĺ åζ
å¤Ħ æĸ¹
çªģ åĽ´
çĮ« åĴª
æĬ¥åijĬ æĺ¾ç¤º
ç¿ Ł
çķ¶ åľ°
æľĢ éļ¾
纪 å§Ķ书记
ä½İ åİĭ
èĻļ 空
è¿Ļéĥ¨ ç͵影
产ä¸ļ åįĩ级
è°· çα
è°·çα åĩĮ
æĬ¼ éĩij
女 æĸ¹
éĴ» çłĶ
æļĹ æļĹ
è¿· ä½ł
æīĢ è¬Ĥ
å¨ģ å»ī
å¼Ģ æľĹ
å² Ķ
çģ« çĤ¬
åIJĪçIJĨ æĢ§
åħ¬ åĬŀ
ä¼ļ ä¼ļéķ¿
éĺ´ è°ĭ
å¼Ģ å±Ģ
æĻ®éĢļ è¯Ŀ
åį¡ æĭī
å°ij åIJĥ
éĹª èĢĢ
æŀľ æ±ģ
æī§è¡Į åĬĽ
è° Ľ
æĬ¢ åĬ«
é«ĺéĢŁ åıijå±ķ
éŁ ¬
åįĹ æ²Ļ
é«ĺçŃī åŃ¦æł¡
æį¢ 个
åı¯èĥ½ åŃĺåľ¨
æĬ Ĵ
è°± åĨĻ
被 æĬĵ
æĿ¯ åŃIJ
èĬĤèĥ½ åĩıæİĴ
æ°ĶåĢĻ åıĺåĮĸ
åĪĨ åĪ¥
ä¸Ń æŀ¢
欢 åij¼
åħī 纤
è¿Ļ 群
çľ¼ çķĮ
åħ±åIJĮ åıijå±ķ
çݰ ä»Ĭ
éĹ» è¨Ģ
çī¹èī² å°ıéķĩ
æķij 人
éĻį æ°´
ä¸ĸçķĮ ä¸Ģæµģ
å°± é¤IJ
çŀ ¥
å¤į ä»ĩ
ç¾½ æ¯Ľ
ç¾½æ¯Ľ çIJĥ
è´© åįĸ
æºIJ æ³ī
æĢ»ä½ĵ è§ĦåĪĴ
åĬ¨ æĦŁ
ä¸Ģ 审
åĢŁ éĴ±
è§ģ æķĪ
èĬ± èįī
åIJĮ ä¸ļ
æŁ¥ è©¢
åĽ½éĻħ åIJĪä½ľ
ä¾Ľ åĽ¾
åģ ´
æł ĵ
缸 éĢļ
è°Ī åıĬ
è¿ĩç¨ĭ å½ĵä¸Ń
é¦Ļ èıĩ
åįģåĽĽ æĿ¡
ä¸Ģå¼Ģå§ĭ å°±
ä¸ĵ åijĺ
æĺİ é¡¯
æīĵéĢł åĩº
ä¸ĭéĿ¢ æĪij们
æľº æ²¹
åı° è¯į
åŃIJ å¼Ł
æľĢ 常è§ģçļĦ
æĪij è®°å¾Ĺ
ç» °
æĤ¬ æµ®
è¿ĺ 羣æĺ¯
æĮĤ åı·
åıĭ åĸĦ
éĩį 伤
çħ§ 亮
æŃ¦ èѦ
åĩºçݰ éĹ®é¢ĺ
è¸Ĭ è·ĥ
åľ°çIJĥ ä¸Ĭ
å¸Ĥ 人大
åıĹ害 人
å² IJ
åIJĮ åѸ
éĩijèŀį å¸Ĥåľº
æľīçļĦ çݩ家
å¸Ĥ æķĻèĤ²
å¸ĤæķĻèĤ² å±Ģ
åIJĦ å¼Ĥ
ç·ļ ä¸Ĭ
æģ º
æľī 大éĩıçļĦ
åķĨ æĬ¥
åįķ åįķ
åħ¨ é¢Ŀ
ä¾ĿæĹ§ æĺ¯
好 åĩłä¸ª
åĸ µ
éĩį æķ´
çĶŁæ´» è´¨éĩı
æİ¢ 访
åį° èĬ±
缼 è¡Į
å¾® è§Ĥ
èĪį å¾Ĺ
åºŁå¼ĥ çī©
积 èĵĦ
å®ļ å±ħ
æĤ ¼
èĮ ¸
çļĦ 帮åĬ©
çļĦ帮åĬ© ä¸ĭ
亿 åIJ¨
åŃĶ éĽĢ
è¿ĻæĿ¡ è·¯
é¥ µ
æĦĪ åĬł
éķ į
ä½ľ æ¡Ī
èįĶ æŀĿ
太 å°ij
跻 身
åħ¬çĽĬ æ´»åĬ¨
çϽ æĸij
æĬĢæľ¯ æ°´å¹³
å¸ §
æĹł çŁ¥
åºĶ该 æĢİä¹Ī
éĢĢ å¸Ĥ
æ¸ Ń
åħ» çĮª
é© ¼
群 å²Ľ
大 åį«
ä¹ĺ çĶ¨è½¦
èı² å°Ķ
è´´ åIJ§
åģľ ä¸ĭæĿ¥
æľīæľº ç»ĵåIJĪ
åĪ» èĭ¦
çļĦ åľ°
çļĦåľ° æŃ¥
è¯Ĭ æīĢ
å¼Ģ æĪĺ
èĢģ çīĮ
çѹ çłģ
åħ«å¤§ 以æĿ¥
楼 æĪ¿
åŃĻ æĤŁ
åŃĻæĤŁ ç©º
åħĴ åŃIJ
第ä¸Ģ æĿ¡
社交 åªĴä½ĵ
æĥ³ èµ·æĿ¥
大 æ´ĭ
æĭ¼ éŁ³
è¿Ľ åįļä¼ļ
è¿ĩ åħ³
æ² ¼
ç©¿ æIJŃ
éĤ£ ä¸Ģ天
çł´ éŨ
æĬķæłĩ 人
èµ¢ å®¶
èĻļ å¼±
æ¿ ĥ
å®ī æ£Ģ
客 家
çĭ¬ç«ĭ èij£äºĭ
æīĭ åĬ¿
åīµ éĢł
åľĨ满 å®ĮæĪIJ
为主 线
好å¥ĩ å¿ĥ
é¢Ĩ åľŁ
çª ĸ
åħ¸åŀĭ æ¡Īä¾ĭ
çªģåıij äºĭä»¶
åºķ æ°Ķ
头 æĻķ
å®Ľ å¦Ĥ
è§ ¸
æ¸ħ æ·¡
åļ ¼
åģľ ç͵
ç²ī å°ĺ
éĻįä½İ æĪIJæľ¬
æĶ¾ æīĭ
è®°èĢħ 表示
æĭĸ å»¶
éª ĩ
æ®ĭ å¿į
çľģ æķĻèĤ²
çľģæķĻèĤ² åİħ
é«ĺ é¢Ŀ
éĦ Ļ
æ¥ ŀ
åĨħ ç§ij
èIJ¥ä¸ļ é¢Ŀ
åŁº çŁ³
æµģ æ·Į
主 æĹ¨
éĺIJ éĩĬ
建 åįİ
æĥĬ åı¹
çī¢åĽº æłijç«ĭ
æĺ¯åIJ¦ åŃĺåľ¨
建 åĨĽ
éĽ¾ éľ¾
åħ¬ 认
åħ¬è®¤ çļĦ
æ°¨ åŁº
æ°¨åŁº éħ¸
åīį åĩłå¹´
åι éĤ£
æ±Ł 举
å·¥ æ¥Ń
ä¸ĢçĤ¹ ä¹Łä¸į
修 士
äºĨä¸Ģ éģį
åĪ ģ
æ»ļ æ»ļ
åĪĨ æł¡
羣 çα
è¡Ģ èĦī
æĢ¥ åī§
ä¸Ģ群 人
ç¾ ¯
æĪIJ é¾Ļ
ç²¾ç¥ŀ çĹħ
缸åħ³ 人åijĺ
éĿĵ 丽
ä¸ī åŃ£åº¦
åĪĴ å®ļ
ä¸ĸçķĮ 第ä¸Ģ
éĢļ ä¿Ĺ
åķĨä¸ļ åľ°äº§
åĬŁèĥ½ æĢ§
èµĦæľ¬ 主ä¹ī
详 è§ģ
æĬĵ æįķ
æĸĩ æĺĮ
å®Ŀ å®ī
è£ħéħį å¼ı
æºIJ æºIJ
æºIJæºIJ ä¸įæĸŃ
çĶŁ æĢķ
纵 åIJij
å£ ½
çľ¼ è¢ĭ
èĤī ä½ĵ
åı¤ ä»Ĭ
èŀį åªĴä½ĵ
åģ ī
æł¼ æľĥåĵ¡
çĥ ·
åĬŁ ç͍
æīŃ çŁ©
绿èī² éĢļéģĵ
åī§ ç»Ħ
å¼± åĬ¿
è´¨éĩı éĹ®é¢ĺ
éĻIJ é¢Ŀ
éª Ĩ
éģµ ä¹ī
å¯Ŀ 室
æĥ³ 念
åł± åijĬ
ä»ħ 次
ä»ħ次 äºİ
èŀį åĪĽ
æĭĽèģĺ ä¼ļ
åºĬ åŀ«
转åŀĭ åıijå±ķ
ä¸ŃåĽ½ çĶµä¿¡
åIJ¬ è¯Ŀ
è«ĭ æ±Ĥ
大éĥ¨åĪĨ 人
æ´» å¾Ĺ
åĵŃ æ³£
è¶ Ļ
åıijçĹħ çİĩ
ä¸į 符
åĨĽ å®ĺ
é¢Ī æ¤İ
æĸ°åĨł çĸ«æĥħ
æŁ¬ åŁĶ
æŁ¬åŁĶ 寨
ä»»ä½ķ å½¢å¼ı
人 éĻħ
人éĻħ åħ³ç³»
æĢ» æī¿åĮħ
å¹³åĿĩ æ¯ı
æģŃ åĸľ
åĦ ĺ
åħµ 马
è¿Ł åΰ
工 伤
çīĪæĿĥ å½Ĵ
çīĪæĿĥå½Ĵ åİŁ
æĭ¥ æĬ¤
ç³Ĭ æ¶Ĥ
å¹² æ¶ī
å°ij ä¸įäºĨ
æĥ³ æī¾
è´¹ çİĩ
该 éĻ¢
èŀį åĮĸ
è¿İ åIJĪ
è§ĨåIJ¬ èĬĤ缮
æł¼ ç¶²ç«Ļ
çľī æ¯Ľ
欢è¿İ 大家
å®¶åºŃ æķĻèĤ²
ä¾µ èļĢ
ç»Ļ ä½łä»¬
è¡Ģæ¶² 循çݯ
å¯Ħ æīĺ
å°ĸ åı«
以ä¸ĭ åĩłä¸ª
è¿ĺ 以为
åħ¶ä»ĸ çݩ家
ç¬ij ç¬ij
æīĵ åIJ¬
èĩªçĦ¶ ç§ijåѦ
åŁº ç«Ļ
ä¹Ŀ å·ŀ
ä¿Ŀ 驾
ä¿Ŀ驾 æĬ¤
ä¿Ŀ驾æĬ¤ èĪª
æĶ¾ çľ¼
çŁ¥åIJį ä¼ģä¸ļ
ç¸ ®
ç¨ ½
æļ ĩ
使ç͍ 網路
é¢Ħ çķĻ
大 象
åıijæĺİ ä¸ĵåĪ©
æĸĩ 娱
éĢł ç¦ı
湿 润
éĿ¢ æĿ¡
æ¶Īè´¹ åįĩ级
è®Ĭ å¾Ĺ
åĩł åIJį
ä» Ħ
认 æ¸ħ
è¿ľ æĻ¯
æıĴ 座
诸 侯
åıĺ æĢģ
ç¦ı 彩
è´§ æŀ¶
失 æİ§
ç§»åĬ¨ 端
ä¸Ĭ åı¸
éĢł 纸
å¸ĥ æľĹ
çĴ ĩ
åı° åįĹ
åĮĹ京 åĨ¬å¥¥
èĵĿ çīĻ
éķ¿ çŁŃ
æĬĺ å°Ħ
ç»ij æŀ¶
å¯Ĵ åģĩ
转 åŁºåĽł
æĢ¥ äºİ
æŃ£ åĵģ
åħħ 滿
大 纲
æĬĹ ä½ĵ
è¨ĵ ç·´
æĶ¶ ç´§
æ¯Ķ è³½
åħµ åĬĽ
æľ¬ æĽ¸
äºĮ 代
æĢ¥ è¯Ĭ
æĸĩ æ¡Ī
ç»ı åķĨ
æĻ¨ æĬ¥
æ£ ĺ
æĢ»ä¹¦è®° åľ¨
åıĹ éĤĢ
äºĶ åĽĽ
å²Ń åįĹ
çα åIJĥ
åŁĥ å°Ķ
å¿ĥ å¢ĥ
è¦ĨçĽĸ éĿ¢
å®ŀåľ¨æĺ¯ 太
æł¹ åºķ
纷纷 表示
åĹ ħ
éļıçĿĢ æĹ¶éĹ´
åİĨåı² æĤłä¹ħ
éħ ī
æĢ» éĺŁ
主é¢ĺ æ´»åĬ¨
éĹ® åį·
é©¿ ç«Ļ
æı¡ ä½ı
åı¯èĥ½ 导èĩ´
æ°ij éĸĵ
éĸĭ åķŁ
ä½Ĩ ä¸įéĻIJ
ä½Ĩä¸įéĻIJ äºİ
åįģ éĩĮ
å¨ ¥
æįŁ èĢĹ
çĸı 导
çݯ æ°§
ç¥ŀ éĢļ
çα å°Ķ
çαå°Ķ åħ°
æľ´ å®ŀ
å¿« æĬ¥
æĶ¶ åıĹ
æĪĸ 許
èĥĮ éĿ¢
æĸĩåĮĸ ä¼łåªĴ
ä¸ī åĢĭ
æĶ» åĬ¿
å®ī 举
å®ī举 å°¼
åĿĩ å·²
顾 èĻij
éĦ Ń
è¿Ļå®¶ åħ¬åı¸
åħ¬åijĬ ç§°
æıIJä¾Ľ ä¼ĺè´¨
稳æŃ¥ æİ¨è¿Ľ
å¤į è¯ķ
å°Ĩ é¢Ĩ
è°Ī èµ·
å¨ Ħ
è¿ŀ 线
æ©Ł éĹľ
åºĶç͍ åľºæĻ¯
çĶ» åĥı
è´¢ è¿IJ
ä¿Ŀ éļª
çĹħ çIJĨ
æ¯Ľ 主å¸Ń
ä¸Ŀ 毫ä¸į
çα å¥ĩ
çαå¥ĩ èīº
ä¸ĵå®¶ ç»Ħ
åij¼ åͤ
éĭ ¼
çģ ¸
é¢ĨåħĪ åľ°ä½į
æıIJ æĭĶ
龸 éģĵ
å±± åĿ¡
èĿ İ
沸 èħ¾
该 项
ä»Ĭ çĶŁ
ä¸Ģç¯ĩ æĸĩ竳
æĸ¹å¼ı è¿Ľè¡Į
é»ij 客
æĶ¹ åĬ¨
主 é¡Į
æķ£ å¸ĥ
ä»Ģä¹Ī åľ°æĸ¹
åĮĸ åIJĪ
åĮĸåIJĪ çī©
éĿĻ ç͵
æĢ» æĶ¶åħ¥
å§Ķ ç»Ħç»ĩ
å§Ķç»Ħç»ĩ éĥ¨
éĿĻ æĢģ
èĢģ åŃĹåı·
室 åıĭ
éĥ½ä¸į æķ¢
æŀ¶ åŃIJ
çģµ æķı
审 è§Ĩ
æĤ£ åĦ¿
山 寨
èĸª èµĦ
é©° æı´
éĥ¨åĪĨ åĨħ容
好 似
æĪIJåijĺ åĽ½
åľ¨æĪij çľĭæĿ¥
åħ³æ³¨ 度
éĻĪ æŁIJ
è¿Ļç§į äºĭæĥħ
éĢī å®ļ
ç²¾ åŃIJ
å£ģ çĶ»
æ±Ł æ·®
é«ĺ æĺĤ
æł¼ åĬĽ
è¼ ©
åѦ åłĤ
æĤ¨ åIJĮæĦı
ä¸ĢåĪĩ éĥ½æĺ¯
æ½ ¤
éĸ ĥ
å¸ĮæľĽ èĩªå·±
ä¿ ĺ
æ±Ł åİ¿
æ³ ¾
ç§ij æķĻ
æīĵ è¿Ľ
ä¸į æħİ
å¯Ĵ åĨ¬
æ¸Ķ æ°ij
鼷 æĸ¯
主 宰
æĹħ游 度åģĩ
ç͵åŃIJ éĤ®ä»¶
æ±Ĥ å©ļ
éļİ æ®µ
åģ¥èº« æĪ¿
注æĺİ åĩºå¤Ħ
äºĭæķħ åıijçĶŁ
级 以ä¸Ĭ
åŃĺ æ´»
æĸ½ èĤ¥
èľľ èľĤ
åµ ©
æĮĸæİĺ æľº
æĬĹ æĭĴ
ä¼ł 导
æĺ¯ä»Ģä¹Ī åij¢
ä¸Ĭå¹´ åIJĮæľŁ
建 åħļ
çĶŁ æħĭ
ä¿Ŀ ä½ı
款 车åŀĭ
人 èĦī
éļIJ èͽ
失 æķĪ
éģ¿ åŃķ
ç®Ģ 便
谢谢 ä½ł
å®Ī ä½ı
æĶ¾ æĺł
è¨Ī çķ«
çݰ代 çµģ
é¤IJ 廳
æķħ å±ħ
大 大å°ı
大大å°ı å°ı
çī¹åĪ« 声æĺİ
éģį åıĬ
å¿ĥçIJĨ åĴ¨è¯¢
è³ ´
çĮ® è¡Ģ
å·²ç»ı è¾¾åΰ
æīĵ æĭĽåij¼
åıĮ è¾¹
ä¸Ģæĸ¹éĿ¢ æĺ¯
å´ĩ å°ļ
éĺ¿ å¯Į
éĺ¿å¯Į æ±Ĺ
æĮģ æľī人
è± ģ
é£İ çŃĿ
åĬ¨ èį¡
äºĨä¸Ģ ä¼ļ
äºĨä¸Ģä¼ļ åĦ¿
ä¸ĩ 象
çľĭ ç͵è§Ĩ
åįģä¸ī æĿ¡
çĮĽ çĥĪ
è¦ģ ä¸įçĦ¶
太æŀģ æĭ³
å¼ķ çĪĨ
ç»ıè¿ĩ å¤ļå¹´
游æĪı éĩĮçļĦ
é¾Ļ æ³ī
æłĩ éħį
è®ĵ ä»ĸåĢij
éĢł æŀĹ
åĮºåŁŁ æĢ§
亿 ä¸ĩ
æĪĺçķ¥ å¸ĥå±Ģ
éķĩ æĶ¿åºľ
åĶ® 票
çĶŁäº§ å·¥èīº
éķĩ åħļå§Ķ
ä¸Ńå°ı åŀĭ
æľ¨ è̳
æ²³ è¾¹
èĦ¾ èĥĥ
欢è¿İ æĤ¨
åıĺ å¼Ĥ
缤 纷
åŀĥåľ¾ æ¡¶
辩 è¯ģ
车 åºĵ
æ¯Ķ çİĩ
åħ´ æĹº
详ç»Ĩ äºĨè§£
å®ī å±ħ
çħ§ æĸĻ
æĸ¹ æīį
èµ ¦
åĨ ķ
å¥Ķ èµ´
å®Ŀ 鸡
åľº åĿĩ
缮åīį æŃ£åľ¨
åIJŀ åϬ
è¿° èģĮ
æĩ µ
å¥ĩ çijŀ
ä»į å°Ĩ
èĪī 辦
å·¥åķĨ å±Ģ
å¡ij èĥ¶
åĬŀ å®ŀäºĭ
æĸ¹ æĸ¹éĿ¢
æĸ¹æĸ¹éĿ¢ éĿ¢
æĸĩåĮĸ èĬĤ
åħ¥ èģĮ
é¸ ¥
ç©¿ éĢı
以 ä¹łè¿ijå¹³
åį± éļª
æľ¦ èĥ§
åİĨåı² æĢ§
æķŀ å¼Ģ
ä¼Ļä¼´ åħ³ç³»
çŁ¿ åĮº
åĽ½éĻħ åľ¨çº¿
ä¼łå¥ĩ éĩĮéĿ¢
è¿ij äºĽ
è¿ijäºĽ å¹´
åĬ£ åĬ¿
æĶ»åĩ» åĬĽ
æĻº éĢł
ç¦ §
çİĭ åħĪçĶŁ
éĨ« çĶŁ
åĽĽ 项
å®ŀ æĻ¯
åĪĿ åĪĽ
å¿ĥ 裡
æĻ¶ ä½ĵ
交 éĻħ
让 æ¶Īè´¹èĢħ
课 æĸĩ
æİĴ æ°Ķ
å¹¶ä¸į æĦıåij³
缸 声
第ä¸Ģ å±Ĭ
åİŁ èijĹ
éĽ ľ
没æľī 太大
è¡¥ æ°´
çµģ ä¼ģä¸ļ
第äºĮ æī¹
åħ¶å®ĥ éĹ®é¢ĺ
æİĮ éŨ
责任 å¿ĥ
é¤IJ åħ·
ç¾Ĭ æ¯Ľ
没æľī å¿ħè¦ģ
ä¹IJ åĽ¢
è¿Ľ åŁİ
ä¸ĢçĤ¹ åĦ¿
身 形
çļ®èĤ¤ çĹħ
æĺ ±
å¢ŀ èĩ³
èģ² æĺİ
æıIJ è´¨
ä½ĵèĤ² åľº
çѹ 建
é¬ Ĩ
车 çīĮ
éļĶ éŁ³
è´Łè´£ åIJĮå¿Ĺ
丰 ç¡ķ
ä½Ľ éĻĢ
äºī åIJµ
åº ¶
æ·¡ æ°´
å°ı çĶ·åŃ©
ç§ģ èĩª
åĮĸ è¿Ľç¨ĭ
æĪĺ士 æĿ¥è¯´
æ²¹ èħ»
èĦ±è´« èĩ´å¯Į
æĹ¥å¸¸ å·¥ä½ľ
交 èŀį
åĨľ è´¸
åĨľè´¸ å¸Ĥåľº
åĵĪ çĻ»
ç͵ è´¹
èµ ĺ
åıĮ èħ¿
æĵĶ å¿ĥ
æĿ¥ 形容
使åij½ æĦŁ
éĤ£ä¹Ī ç®Ģåįķ
èĬĻ èĵī
åĢŁæ¬¾ 人
ç§Ģ 丽
è®ĵ ä»ĸ
严åİī æīĵåĩ»
è³ ŀ
æļ «
çħ¤ æ°Ķ
çά ä¸Ĭ
æ½ĩ æ´Ĵ
太 ä¹ħ
åij½ åIJį为
è·¯ çͱ
è·¯çͱ åύ
é© ¯
æıIJ æĹ©
æĬĹåĩ» çĸ«æĥħ
åĩ Ľ
交 åıĭ
éĶĢåĶ® æ¸łéģĵ
毫ä¸į çĬ¹è±«
èIJ¥ åľ°
çłĶç©¶ 表æĺİ
é±¼ ç±»
æį¢ å±Ĭ
æİ¡ åıĸ
çī Ĩ
缼 å¼Ģ
æ²§ æ¡ij
åºŃ 审
ç»ı æŁ¥
åĬł å¼·
缸æ¯Ķ äºİ
ä¸ĵ çıŃ
ä½ĵ åŀĭ
被 害
被害 人
æĶ¶ 款
åħ·æľī èī¯å¥½
é«ĺå³° æľŁ
åģı ä½İ
åĦ Ł
åĨľä¸ļ ç§ijæĬĢ
ç®Ĭ æĥħåĨµ
å¦Ĥæŀľ çݩ家
éķ¿ çº¦
第åħŃ å±Ĭ
åħ¬å¼Ģ æĭĽèģĺ
åĪĩ æĸŃ
迫 使
çĸĹ ç¨ĭ
第äºĮ ç§į
ä¸į åħį
å¹² èѦ
çŁ³ 榴
åĹ £
两 类
çε 士
åŁİ乡 å±ħæ°ij
æŃ¤ 项
缴 è¾ĸ
缴è¾ĸ å¸Ĥ
åij¼ åºĶ
éĴ ¯
ç¦ı å¾·
æľº 身
æĵį åľº
æ¿Ĵ 临
人群 ä¸Ń
èĤ¡ æ°ij
åŃ ½
æ³ķ åħ°
é¨ İ
糯 米
æĢ» çļĦ
æĢ»çļĦ æĿ¥è¯´
åħ¸ éĽħ
æĸ° éĻĪ
æĸ°éĻĪ ä»£è°¢
缮 çĿ¹
é¢Ħ è¨Ģ
è·Į çł´
æĸ° ç¯ĩ竳
æ¯Ĵ æĢ§
åĸĿ èĮ¶
æŁ¥ èİ·
亮 丽
çĶŁäº§ åķĨ
æĶ¹ æĪIJ
为äºĨ æĽ´å¥½
深 交
深交 æīĢ
æİ ĥ
ä¹Ļ èĤĿ
泸 å·ŀ
åħĪè¿Ľ æĬĢæľ¯
è¾ĵ ç»Ļ
æķ£ æĪ·
æĢĿç»´ æĸ¹å¼ı
åºĹ 主
è°ĭ æ±Ĥ
游æĪı æĬĢå·§
ä¸Ģå¹´ 级
çľ¼ è§Ĵ
ä¸Ńä»ĭ æľºæŀĦ
å·§ åIJĪ
éĺ² çĽĹ
导 è´Ń
æĪ Ĭ
æĽ´ éĢĤåIJĪ
åŁºæľ¬ ä¿¡æģ¯
马 ä¸ģ
åħ»æ®ĸ åľº
åıį è¿ĩæĿ¥
æİ¨ å´ĩ
å¯ĨåĪĩ åħ³æ³¨
åŁºéĩij ç»ıçIJĨ
æĮī éĶ®
åĨħéĥ¨ æİ§åζ
æĪIJåijĺ åįķä½į
æľ¯ è¯Ń
åζ æľį
åĪļ éľĢ
æ£Ģ ç´¢
大大 æıIJé«ĺ
åģ¥åº· 管çIJĨ
èĩª æŃ¤
客æĪ· éľĢæ±Ĥ
丰 èĥ¸
èµ· éĩį
èµ·éĩį æľº
æ¬ł 缺
æ¡Ī åŃIJ
æĥħ人 èĬĤ
åħļ æł¡
è¢ ľ
该 åī§
迷失 ä¼łå¥ĩ
ç»ļ 丽
åķ ª
æĹł ç§ģ
é̲ ä¸ĢæŃ¥
第ä¸Ģ 竳
åύ åħ·
åĨľ èµĦ
確 實
åºı åĪĹ
娱ä¹IJ å¹³åı°
èŀįèµĦ ç§Łèµģ
èµĦæºIJ åħ±äº«
èģ½ åΰ
æIJŀ å¾Ĺ
ç»§ç»Ń ä¿ĿæĮģ
åIJ¯ èĴĻ
çľ º
ä¸Ŀ è·¯
设æĸ½ 建设
æİ¥ åľ°
æİ¥åľ° æ°Ķ
第ä¸ī åŃ£åº¦
åŁº è°ĥ
åıij éŁ³
社ä¼ļ èµĦæľ¬
éĽĩ 主
è¿ŀ èĥľ
没 åķ¥
å» ¢
èµ¶ èµ´
æ¼Ķ åĮĸ
åı¤ æĢª
çİĭ çĪ·
é¢Ħ åħĪ
å¼Ģ åħ·
åĽŀ é¦ĸ
åľ°ä¸ĭ æ°´
å°ıç¼ĸ ä¸Ģèµ·
èµİ åĽŀ
åľ° è²Į
åĪĿ ä¸ī
åı¯ ç͍äºİ
éģĹ è¿¹
è¿Ļ æī¹
èĸª æ°´
å¿ħçĦ¶ ä¼ļ
æ² ½
éį ĭ
第ä¸Ģ éĥ¨
åĪĬ çī©
å®ŀ ä¾ĭ
æ¸ħ åĩĢ
ä¸Ĭ èµĽåŃ£
åĽ¾ 表
éĤ® è½®
åĵª 裡
缸 è§ģ
æī° ä¹±
æ¯ı æ¯ı
è¿Ļ è¾ĪåŃIJ
ç¡« éħ¸
äºī 缸
溯 æºIJ
åĩº ä¼Ĺ
çİī çŁ³
åħ± çĶŁ
æĹ¶éĹ´ 段
éĩįè¦ģ æĮĩ示
æ¶Īè´¹ éľĢæ±Ĥ
éķ¿ éķ¿
éķ¿éķ¿ çļĦ
å®ī æĬļ
å¢ŀ é«ĺ
æľ¬ è½®
亲 çľ¼
é£İ æ³¢
èĢģ å¦Ī
æĶ¶è´¹ æłĩåĩĨ
åĨħ éĻĨ
æĮ¥ åıij
åįĩ åѦ
èĥ¸ åīį
åģı è¿ľ
纯 æ´ģ
æĸ½å·¥ åįķä½į
身 价
è´¢ åĬĽ
çº ¶
è£ħ çͲ
æĺ¾ç¤º åύ
毫 åįĩ
æ·± çŁ¥
è̶ ç©
èĢ¶ç© Į
è¾ĥ éĩı
åľ¨ è¿ĩ渡
åľ¨è¿ĩ渡 æľŁ
èĮ Ĺ
ä¸Ģ个 æĺŁæľŁ
èĬ ·
è´¿ èµĤ
æ¿ ķ
æĩĤ äºĭ
ç§ §
åħħ å½ĵ
åĽ½ ç«ĭ
èĬ± çĵ£
éĤĦ è¦ģ
åħ¬ åľĴ
触 åĬ¨
æ³° å·ŀ
ä»Ģä¹Ī æł·
æ»ĭ åħ»
è¯Ħ åΤ
æĮ¥ æīĭ
èĦ Ī
å§¥ å§¥
è¿IJ è´¹
æ¯ħ åĬĽ
å¿ĥ æĻº
ä¸į æİĴéϤ
第ä¸ī 代
éĢĢ è´§
æĺŁ éĻħ
æ°¸ åĪ©
æĬ¤ åį«
çıŃ è½¦
è¨Ģ è¡Į
ç¹ ª
主åĬ¨ æĢ§
å·¥ç¨ĭ è´¨éĩı
éĥĬ åĮº
ä¸Ģ æłĭ
ä½Ĩ å®ŀéĻħä¸Ĭ
ä¸ī大 èģĮä¸ļ
åij¼ åı«
女 åħĴ
è¯ģåΏ æĬķèµĦ
èĢĥ æħ®
çĤ« èĢĢ
治 好
åĺ ¶
èĥ ¤
åħīä¼ı åıijç͵
åĩł æŃ¥
æīĢ æīĢ
æīĢæīĢ éķ¿
çħ§ æł·
åĵ¥ 们
è¯ Ľ
è¿Ļä¸Ģ åĪ»
çŁ¿ çī©è´¨
ä¸įå¾Ĺ å·²
åIJĮ 缣
ç»Ĩ å¾®
è·¯ èĻİ
çϾ èĬ±
æ·· æ²Į
ä¸Ĭæµ· è¯ģåΏ
éĢĢ ç¨İ
èµŀ åı¹
æī®æ¼Ķ 游æĪı
åIJį åĪĹ
åIJįåĪĹ åīį
åIJįåĪĹåīį èĮħ
ç±³ å°Ķ
ä»Ģä¹Ī åİŁåĽł
å®īåħ¨ ä¿Ŀéļľ
ä¸Ģåıª æīĭ
ä¹³ ä¸ļ
ä¸į çĶĺ
æĥħ åķĨ
æĮ¡ ä½ı
åİŁåĽł ä¹ĭä¸Ģ
è¿Ļ 两天
çĥĺ çĦĻ
è± ¬
ä½ł 以为
没 è§ģè¿ĩ
åĵªå®¶ 好
åīį ä»»
è¿Ľ è´§
éĢĢ åĽŀ
串 èģĶ
èĩ³ æĸ¼
åĨ° æ·ĩ
åĨ°æ·ĩ æ·ĭ
æŁ¥çľĭ 详æĥħ
çı¾ 實
æİ¨ æµĭ
æİ¥ æīĭ
éļ¶ å±ŀäºİ
åŁİå¸Ĥ 群
æĿİ åħĪçĶŁ
çŁ¿ æ³īæ°´
çī¹ ä»·
æĽ´å¤ļ 精彩
ç¨ĭ å¼ı
读 æĩĤ
å±ı èͽ
奥 æŀĹ
奥æŀĹ åĮ¹
奥æŀĹåĮ¹ åħĭ
红 èĸ¯
å¥ ®
å®Ŀ çİī
網 絡
è² §
欧 å¼ı
çϽ ç³ĸ
èĩªçĦ¶ çģ¾å®³
åijĬè¯ī 她
å» ļ
çĤ¹åĩ» æŁ¥çľĭ
é£İ 湿
èµĦ产 éĩįç»Ħ
ä¹Łä¸į ä¾ĭå¤ĸ
åįĬ 个å°ıæĹ¶
åIJ¸å¼ķ æĽ´å¤ļ
æĹ¶éĹ´ èĬĤçĤ¹
æĶ¶ 纳
åIJ¸ æ¯Ĵ
èĢģ 乡
çIJ ħ
æľĢ çµĤ
åıį æĦŁ
ç͍ 微信
çĶ¨å¾®ä¿¡ æī«
éĢŁ çİĩ
大 çĨĬçĮ«
åı¯ æĥ³
åı¯æĥ³ èĢĮ
åı¯æĥ³èĢĮ çŁ¥
åĴ §
èµ° åħ¥
碳 éħ¸
èĮĥ åĨ°
èĮĥåĨ° åĨ°
被 åΤ
积æŀģ æİ¨åĬ¨
è¶³ è¶³
ç²Ĵ åŃIJ
大 å®Ĺ
大å®Ĺ åķĨåĵģ
ç½ij绾 ç§ijæĬĢ
æĽ¼ åŁİ
å·² ä¹ħ
å·²ä¹ħ çļĦ
秦 çļĩ
秦çļĩ å²Ľ
ä»» æķĻ
å͝ ç¾İ
æ·¡ åĮĸ
æ¡Ĥ èĬ±
çŁ¥è¯Ĩ åĪĨåŃIJ
æĩĴ å¾Ĺ
主 åħ¬
设计 çIJĨ念
è³ º
æīĢ æıIJä¾Ľ
æīĢæıIJä¾Ľ ä¹ĭ
æĶ» åħĭ
åĤ ¾
è¯Ń æ³ķ
åįĥ åı¤
éĸĭ æĶ¾
第ä¸Ģ èĬĤ
éĤĦ æ²Ĵ
éĢĥ çĶŁ
æ³ Ĺ
åİ¿ å§Ķ书记
ä½ľèĢħ æīĢæľī
çħ ½
ç» ħ
æł ħ
æľ´ ç´ł
çijķ çĸµ
åĮħ åĮħ
æ°ij主 åħļ
ä¸į è¿ľå¤Ħ
å¥ĩ å¼Ĥ
åĺ» åĺ»
æī ¼
ç¿» å¼Ģ
æĢİ èĥ½
éģ´ éĢī
è§£ éĩĭ
å¹¼ ç¨ļ
è¦ģ 好好
è¶´ åľ¨
ç´¢ åıĸ
ç»Ī çĶŁ
åħ¨ æµģç¨ĭ
éģ© çķ¶
åįıè°ĥ åıijå±ķ
æĬ¥ ä»ĩ
ç§ijæĬĢ åĽŃ
ä»Ģä¹Ī éĥ½ä¸į
æľĢåIJİ ä¸Ģ次
ç»Ļ人 ä¸Ģç§į
æł¸ å®ļ
被 åĪĹåħ¥
æĦı æĥ³ä¸įåΰ
èĢĥ æŁ¥
åľ¨æŃ¤ ä¹ĭåīį
æīĵ çIJĥ
è¶ĬæĿ¥è¶Ĭ å°ij
å®ļ å¾ĭ
è¡ĮæĶ¿ æľºåħ³
ä½ıæĪ¿ åħ¬ç§¯
å°ıå§IJ å§IJ
ä¸ī èı±
ä¿® è¡¥
èŀĥ èŁ¹
西 çͲ
æĢ ł
çŃī å¤ļ项
产ä¸ļ éĽĨèģļ
ä»·æł¼ ä¸Ĭ涨
åħ¬åħ± åľºæīĢ
è¢ĭ åŃIJ
æĨ§ æĨ¬
çļĦæĸ¹å¼ı æĿ¥
åΰ è´¦
çģ ½
å·´ èı²
å·´èı² çī¹
æ¼Ķ ä¹ł
èŃ¦ç¤º æķĻèĤ²
çķı æĥ§
å¼ķ æµģ
æĶ¶ æĶ¯
å±Ĥ åĩº
å±Ĥåĩº ä¸į
å±Ĥåĩºä¸į ç©·
æijĩ æ»ļ
辦 çIJĨ
纵 è§Ĥ
æķij æµİ
å®¶ éĥ½çŁ¥éģĵ
åĮ ¯
å°ı 鸣
ä»» åĭĻ
计 åħ¥
ç«ŀ éĢī
å¼ĢèįĴ æĹ¶æľŁ
åij¨ æģ©
åij¨æģ© æĿ¥
交 ç»ĩ
çķ¢ æ¥Ń
æł¹æį® èĩªå·±
æĸ°äºº çݩ家
åѵåĮĸ åύ
éĩĩ æļĸ
å¹³åĿĩ æ°´å¹³
åħ¬å¼Ģ 课
失 åĪ©
伺 æľį
çĬ ģ
忽 æĤł
主è¦ģ éĽĨä¸Ń
æ¤į æłij
æ¯Ĺ éĤ»
èĩº çģ£
åĩºåĽ½ çķĻåѦ
æĬĹ éľĩ
æĥ© æĪĴ
å¹´åºķ åīį
åĴ¸ éĺ³
æ°ij å±ħ
大çIJĨ çŁ³
éĿ ³
éķ ĸ
æ¸ħ è¿ľ
è£ħ è½½
èĩ Ģ
å½± ä¸ļ
å¼Ł åħĦ
æĤ² è§Ĥ
çĿĢçľ¼ äºİ
æįį åį«
åī¥ å¤º
ç¯ Ĩ
å¾Ī éķ¿æĹ¶éĹ´
è¥ Ł
第ä¸Ģ çϾ
ä¸ĢåĪĨ éĴ±
æĸ°éĹ» è®°èĢħ
éķ· æľŁ
æ³ķ æĪĺç»ĦåIJĪ
è°ģ çŁ¥éģĵ
èħ° éĥ¨
æ±ī åł¡
åħ¥ çĿ¡
åįĸ æİī
æ¶Īè²» èĢħ
æĥ¯ ä¾ĭ
æĥ³ äºĨ
æĥ³äºĨ æĥ³
èĢģæĹ§ å°ıåĮº
ä¼ł è¨Ģ
åĪĨæķ° 线
æµģ 泪
ç»Ħç»ĩ é¢Ĩ导
äºļ åĨĽ
å¢ŀå̼ æľįåĬ¡
å¾ ¹
ä¼ ¶
äºĽ 许
å¸ĥ èݱ
强 æĤį
宫 廷
绿 èĮ¶
åĮ ¡
å¾Ī æŃ£å¸¸
æĺ¥ å¤ı
æ¯ Ļ
è¯Ħ æ¯Ķ
åĩ¡ äºĭ
æĬī æĭ©
åĢĴ éľī
éĩį 度
åįıä¼ļ ä¼ļéķ¿
å¿§ èĻij
ä¸ĭ ä¸Ģç¯ĩ
沪 深
æĪ İ
æīĵ ä»Ĺ
åįĪ é¥Ń
å¹´é¾Ħ 段
ä¸ŃåĽ½ è¶³çIJĥ
设计 æĸ¹æ¡Ī
åºĶç͍ æŁ¥çľĭ
é¢Ħ æĸĻ
åĹ ¡
ç¥ĸ çζ
çļĦä¸Ģ åijĺ
æ´Ĺ å¹²åĩĢ
åİĨåı² æĸ°
åİĨåı²æĸ° é«ĺ
çĭ¬ åħ·
æħĭ 度
æīĵ 交
æīĵ交 éģĵ
é»Ħ çŁ³
çĽ¼ æľĽ
çī§ åľº
转 弯
åįĩ åįİ
åĨį ä¹Łæ²¡æľī
èĭ± æīį
æĽ´ åIJį为
åĢŁ ç͍
çºł éĶĻ
ç»Ŀ对 ä¸įä¼ļ
çİĭ çīĮ
çĽĨ åľ°
失 è°ĥ
好 象
é³ ¥
ä¿Ŀ ä¿®
åĽĽä¸ª èĩªä¿¡
头 çļ®
åİŁ åīĩ
æĬ¥ æ¡Ī
奴 éļ¶
å³ Ļ
è°ĥ æĸĻ
ä¹Ł 許
èIJ½ åΰ
èIJ½åΰ å®ŀ
èIJ½åΰå®ŀ å¤Ħ
çĦļ çĥ§
çĶŁæ´» çݯå¢ĥ
åºĶ åıĬæĹ¶
è¶Ĭ è¿ĩ
æĦŁ è¬Ŀ
æĻ¯ å¾·
æĻ¯å¾· éķĩ
çĬ Ģ
身 éĤĬ
ç¨İåĬ¡ æĢ»å±Ģ
åĩĢ åľŁ
ä¾µ åįł
åĬ¨ å·¥
å¹´ ä¹ĭ
å¹´ä¹ĭ ä¹ħ
第äºĮ èĬĤ
åĬ¨çī© åĽŃ
第ä¸Ģ 书记
éħ ļ
çĶŁäº§ 设å¤ĩ
æŁIJç§į ç¨ĭ度
åľ Ń
åĩŃåĢŁ çĿĢ
éĺħ è§Ī
çϽ æ²Ļ
æ²¹ çĥŁ
çªģçł´ åı£
åıĹ å½±åĵį
åı¯ä»¥ æĽ´å¥½
å³° å̼
æĿĤ è´¨
宿 è¿ģ
çĽĺ æ´»
æ¿Ģ èµ·
åĦ¿ ç§ij
åĿIJ èIJ½åľ¨
æĮª å¨ģ
æµ· å²Ľ
绣 绣
éĻ ¨
ä¼ĺ äºİ
å°Ī å®¶
ä¸Ģ éĤĬ
èIJ Ĭ
äºĨä¸Ģ åı£
æ²ĥå°Ķ æ²ĥ
æŃ£å¸¸ 使ç͍
æĻ®éģį åŃĺåľ¨
丰 满
çĶ» åį·
åºĶ æĶ¶
åºĶæĶ¶ è´¦
åºĶæĶ¶è´¦ 款
å®Įæķ´ çĥŃ
å®Įæķ´çĥŃ æ¦ľ
注 è§Ĩ
çĨ Ħ
èº ¬
éĶĢåĶ® 人åijĺ
è¶ĭ åIJij
çĦ¦ æĢ¥
åįģå¹´ åīį
ä¼łç»Ł 产ä¸ļ
質 éĩı
åĩ¤åĩ° ç½ij
èµĦæºIJ æķ´åIJĪ
æ¶Į åħ¥
æĸĩåĮĸ ä¼łæĴŃ
çķĮ 第ä¸Ģ
æ°´ æ³µ
宫 殿
æİ¢ 寻
ä¿® åīª
æĦı è¦ĭ
ç´Ĭ ä¹±
æĽ ī
çϽ è¡£
èĻİ åį«
ç´§ æī£
å¤Ħå¤Ħ éķ¿
åĪĽå»º å·¥ä½ľ
红 æŀ£
饼 干
äºĨ åįĬ天
ä¼ļå½±åĵį åΰ
çĽ¸ä¿¡ 大家
èħ¾ é£ŀ
å°± å¦ĤåIJĮ
ä¸ĭéĿ¢ å°ıç¼ĸ
æ°ijèIJ¥ ç»ıæµİ
æĻ ¦
è£ħ æī®
é»ij å¤ľ
常 德
å·¥ä¸ļ 大åѦ
æĺİ çŁ¥
éĺŁåijĺ 们
åIJ¬ 课
æ¯ı éļĶ
羣æĺ¯ 太
åIJĪä½ľ åħ±èµ¢
çIJĨ åıij
æīį å¹²
çľĭ èµ·ä¾Ĩ
殿 ä¸ĭ
å®ī éĺ³
æīĢ äº§çĶŁçļĦ
éĽĩ ä½£
æĬ¬èµ· 头
æį® æĬ¥éģĵ
éļĨéĩį 举è¡Į
交 éĶĻ
è¶ħ é¢Ŀ
åĮĸ çĸĹ
é¡ Ĩ
纵 深
çĪ±åĽ½ 主ä¹ī
éĻ¢ åī¯éĻ¢éķ¿
è® ³
羣æŃ£ åģļåΰ
åѤ åįķ
èĩªçĦ¶ èĢĮ
èĩªçĦ¶èĢĮ çĦ¶
修 身
èĬ ¹
æģ¯ æģ¯
æģ¯æģ¯ 缸åħ³
驾 æł¡
æİ© 饰
æ³½ è¿ŀ
æ³½è¿ŀ æĸ¯åŁº
举 æŃ¢
管çIJĨ ä½ĵåζ
åħ¶ä¸Ń ä¹ĭä¸Ģ
æĿ¾ å¼Ľ
æĭ¦ æĪª
åį« åģ¥
åį«åģ¥ å§Ķ
ä»İ åݻ年
åĤ ¢
è´Ń 票
åĽ¾ æłĩ
河 西
æ°ijæĶ¿ å±Ģ
ç§ģ èIJ¥
å¤ĸåĽ½ è¯Ń
å¹² è´§
æĵ¦ æĭŃ
åľ° ä¸Ń
åľ°ä¸Ń æµ·
æµĵ æµĵ
æµĵæµĵ çļĦ
å§ĭ 建
å§ĭ建 äºİ
ç¶ĵ æŃ·
è·¯ æ¼Ķ
æļ´ é£İ
åŁº è¾ħ
æī¶è´« å·¥ä½ľ
ä¸Ģ缴 å¤Ħäºİ
æĥħ è¶£
äºĮ åŃ£åº¦
åİĮ æģ¶
顺åĪ© å®ĮæĪIJ
æŁ¥ å°ģ
顶 端
ä¸į åŃķ
ä¸Ģ大 åłĨ
被 æ·ĺæ±°
æĺ¯ ç͍æĿ¥
æľĢ åIJĪéĢĤ
亮 çľ¼
å¹¶ä¸įæĺ¯ å¾Ī
ç§ijçłĶ éĻ¢
ç§ijçłĶéĻ¢ æīĢ
ç² Ł
é¢Ī éĥ¨
é»ĺé»ĺ åľ°
é«ĺä¸Ń çĶŁ
æĹıèĩªæ²» åİ¿
æķĻåѦ è´¨éĩı
æĪĺ çģ«
åĿİ åĿ·
æIJŃ ä¹ĺ
è¯Ĺ æĦı
åĪij èѦ
åĩº æ±Ĺ
åįģåħŃ æĿ¡
请 åıĬæĹ¶
åĨľä¸ļ 大åѦ
èIJ½ åı¶
æĢ» èĢĮè¨Ģ
æĢ»èĢĮè¨Ģ ä¹ĭ
æĿľ åħ°
æĿľåħ° çī¹
éĻª ä½ł
åħ¬ æĬ¥
çķĻè¨Ģ æĿ¿
éĺħ åİĨ
ç«¶ çĪŃ
ç»Ļ åĪ«äºº
æĹ¥æĬ¥ 社
åĿIJ èIJ½
åĿIJèIJ½ äºİ
éĩij åŃĹ
éĩijåŃĹ å¡Ķ
åĽ ¤
è¯Ŀ åī§
æĮģç»Ń æİ¨è¿Ľ
æ¼ı æ°´
詳 細
æĢĢ æĬ±
åıĺ å¹»
饥 饿
éļIJ 身
个 èµĽåŃ£
åĵ¡ å·¥
æģ¢å¤į æŃ£å¸¸
äºĨ 好å¤ļ
æĺŁ å·´
æĺŁå·´ åħĭ
åħī çݯ
å¸ħ åĵ¥
çϽ éĽª
ç¨į ç¨į
计 æıIJ
æĦĽ æĥħ
éİ ĸ
ä¿¡ éĺ³
è§Ģ å¯Ł
å¦Ĥæŀľä½ł æĥ³
缸æ¯Ķ ä¹ĭä¸ĭ
è§£ å¼Ģ
æīĵåį° æľº
身 躯
ç²¾ç¥ŀ æĸĩæĺİ
èĤ¡ æĮĩ
å¾® åĪĽ
红 èĮ¶
èĩ´ çĻĮ
æģ© æĸ½
èħ¿ éĥ¨
大åŀĭ å¤ļ人
å®ī åĢį
è¾ħ导 åijĺ
èĪª éģĵ
å¸ĥ å°Ķ
åįĹå®ģ å¸Ĥ
ä¸ĬçıŃ æĹı
ä¾§ ç»ĵæŀĦæĢ§
追 éļı
å½ĵåľ° æĶ¿åºľ
èµ° åĩºæĿ¥
éĩijèŀį ä¸ļ
丼 书
é¡¹çĽ® ç»ıçIJĨ
è¿ĩ æĪ·
骨 æŀ¶
è¡ Ļ
ä»Ģ 麽
èħ ĭ
è¦ģ 害
åľ¨ åºĬä¸Ĭ
代è¨Ģ 人
並 å°ĩ
åIJĦ个 æĸ¹éĿ¢
è°´ è´£
åħ± æĮ¯
åį³å°Ĩ åΰæĿ¥
èĤº çĻĮ
ä¾Ľ éĶĢ
丼 æŀĹ
èµ ĥ
åįģä½Ļ å¹´
åĭĺ æİ¢
飵 åij³
èĭ¦ ç¬ij
æľĢ大 ç¨ĭ度
éĩįçĤ¹ åħ³æ³¨
ä¹ĭ 举
满 æĢĢ
åıĹåΰ å½±åĵį
æĭĽ æĬķæłĩ
è¡¥ é½IJ
西 红
西红 æŁ¿
é¬ §
è£ħ åį¸
éĤ» éĩĮ
èĤĩ äºĭ
æİĴ æ¯Ĵ
åѤ åĦ¿
鼶 è·Ŀ离
å®ŀ å¹²
çľĭ æŁ¥çľĭ
æĶ¶è´¹ ç«Ļ
ç» ·
åħ¬çĽĬ æĢ§
éĢĴ ç»Ļ
æĶ» æīĵ
æĺŁçº§ éħĴåºĹ
æĺİ åªļ
ç፠ç«ĭ
è¯Ŀè¯Ń æĿĥ
ä¸ĢæŃ¥ ä¸ĢæŃ¥
书æ³ķ å®¶
æľªç»ı æİĪæĿĥ
çŁ³ èĨı
åĩŃ ä»Ģä¹Ī
çļĦ æĹ¥
çļĦæĹ¥ åŃIJéĩĮ
诱 人
çϾåĪĨ çϾ
èĪĪ è¶£
å¼ł åħĪçĶŁ
èĢģçĪ· åŃIJ
æ³¢ çī¹
åŁºéĩij 份é¢Ŀ
æ²Ļåıij ä¸Ĭ
å¥ĭæĸŠ缮æłĩ
æ°¢ èĥ½
æ²ĥå°Ķ çİĽ
義 åĭĻ
éŁ³ ç®±
æ²ī 浸
æ²ī浸 åľ¨
èĭ± åľĭ
çģ¯ çģ«
è¿Ľ 项
两 端
ä¹Ķ 丹
èĦ¸ é¢Ĭ
åıijå±ķ æ½ľåĬĽ
åĭķ ä½ľ
åĵĪ ä½Ľ
å®´ ä¼ļ
æ§ į
ç«ĭ å¿Ĺ
ç¡ķ士 åѦä½į
åĭĭ 竳
è¿Ļ åľºæ¯ĶèµĽ
æĮģ å¹³
éķĢ éĶĮ
èĭ± çī¹
èĭ±çī¹ å°Ķ
æķĻ èģĮå·¥
åĬŁ åĬĽ
该 æ¡Ī
ä¸Ģ æ¢Ŀ
åĺī å¹´
åĺīå¹´ åįİ
è¿« ä¸įåıĬ
è¿«ä¸įåıĬ å¾ħ
è¿Ļ个 æĹ¶ä»£
精彩 æĴŃæĬ¥
人 èĦ¸
人èĦ¸ è¯ĨåĪ«
æ£Ģå¯Ł å®ĺ
å°ı èħ¿
éĨĴ 缮
åħļ æĢ»
åħļæĢ» æĶ¯
æĪ Ł
èĮ« çĦ¶
è±Ĩ æµĨ
主 治
éĿĴæµ· çľģ
åĪijäºĭ 责任
çł °
ä¹ĭ æ¬ĬåĪ©
äºĶ å®ĺ
è¿· æĥij
åħ¥ åºĵ
家 纺
å¼¹ ç°§
åįģäºĶ æĿ¡
ç»Ļ å®Ŀå®Ŀ
èĪªç©º èĪªå¤©
å¾Ģ å¤ĸ
å¼ķ åĬĽ
çľ¼ çļ®
æ¶ī è¶³
æĿ¥ 宾
åľ¨çº¿ è§Ĵèī²
çĥŃ éĶĢ
æµģ éĢĿ
泡 泡
éĻį å¹ħ
è´ŁéĿ¢ å½±åĵį
红 楼
红楼 梦
éļĶ çĿĢ
侥 幸
许 ä¹ħ
åĴĮ çĿ¦
èŃ ½
使ç͍èĢħ æĪĸ
ä¹° åįķ
è¿ ´
é£İ æīĩ
æķĻ å¸«
æ¡ĮåŃIJ ä¸Ĭ
å¾Ī æ¼Ĥ亮
åł± å°İ
第ä¸Ģ åŃ£åº¦
ç©© å®ļ
æĤ² åĵĢ
çĿĢåĬĽ æīĵéĢł
æĮ Ł
è·¯ æ¡¥
åij IJ
åľ£è¯ŀ èĬĤ
çļĩ åŃIJ
ä»ĩ æģ¨
éħĿ éħ¿
ä¸į éĹ´
ä¸įéĹ´ æĸŃ
æĮĩ å°ĸ
ä¸ŃåĽ½ ç½ij游
åŀ £
æĦıè§ģ 建议
æ¯ħ çĦ¶
亮 度
èģĶ è°Ĭ
å½ķ åħ¥
åĦ ²
å¨ĺ å®¶
ç§ij å°Ķ
ä¹Łæ²¡ ä»Ģä¹Ī
æł¹æį® ä¸įåIJĮ
åı¶ ä¿®
å̼ å®Ī
æľ« 端
åĪ ¨
åĤµ åĭĻ
èģ¯ åIJĪ
å¥ĩ å¹»
èĻļ æŀĦ
é»Ħ æĺı
å¹³ åĿ¦
æµģ æ°ĵ
æĸ° åŁºå»º
æĮ½ æķij
åįİ å°Ķ
åįİå°Ķ è¡Ĺ
æľĢ åıĹæ¬¢è¿İ
ç»Ń 约
å¼Ĭ 端
éŃĶ æ³ķå¸Ī
éŃĶæ³ķå¸Ī åĴĮ
åħ·ä½ĵ åĨħ容
çIJī çĴĥ
æī© 容
èĮ¶ åĽŃ
主ä¹ī èĢħ
ç«ĭ éĿ¢
æİ¥åıĹ éĩĩ访
åĩº åħ¥å¢ĥ
ç§ij åįı
éĴ ³
çµIJ æ§ĭ
ç»ĵæŀľ æĺ¾ç¤º
åı° è´¦
å°± æĿ¥çľĭçľĭ
èĩª æķij
åıį æĩī
åİ» åĵªåĦ¿
è¿Ļ é¦ĸ
è¿Ļé¦ĸ æŃĮ
åIJ¬ ä¼Ĺ
å¤ĸ 壳
ä½ĵèĤ² é¦Ĩ
實 æĸ½
èŀº ä¸Ŀ
æĭī åįĩ
çĮĽ åľ°
åħ¨åĽ½ 人æ°ij
æĤī å°¼
æĹı 群
åĽ¢ åijĺ
两个 å°ıæĹ¶
åľ¨ çݩ家
åľ¨çݩ家 ä¸Ń
çĶľ çĶľ
æĬķ è¡Į
åįĶ æľĥ
éĻ ¡
åĬłå·¥ åİĤ
æ¦Ĩ æŀĹ
æŃ» è§Ĵ
åĨħ å¹ķ
æīĢæľī æĥħèĬĤ
åĪ· åį¡
æ°´ èĤ¿
èĥĥ åı£
å«Į å¼ĥ
沮 丧
ä¸īå¹´ 级
æ¶Ĥ å±Ĥ
å¿ĥ 仪
å¿ĥ仪 çļĦ
å¤ Ń
é¦ĸ è½®
æĹłè®ºæĺ¯ åħ¶
éĢı æ°Ķ
äºĮ åįģäºĶ
ç® «
åĬŁ åĬ³
çѾ ä¸ĭ
æ²ī è¿·
æķij åij½
éĹª éĹª
åIJĥ äºı
å±ķ åĵģ
åį³æĹ¶ åıijçĶŁ
ç¶ ľ
ç¶ľ åIJĪ
æłĩ æĺİ
çľĭ ç͵影
åħ¬ 竳
éĺ¿ æ£®
éĺ¿æ£® 纳
身 åĪĽéĢł
身åĪĽéĢł çļĦ
æ¸Ľ å°ij
å̼å¾Ĺ åħ³æ³¨
鼶åĶ® åķĨ
æįĨ ç»ij
è¸ı åħ¥
èĽ Ł
æŁ´ 纳
èĢģ åħµ
绿èī² çݯä¿Ŀ
é¹ Ń
麻 æľ¨
æıŃ çīĮ
è¿Ļ款 车
ç¾İ å¾·
ç¾İå¾· åħ¬åı¸
æ¶ §
è°ģ çŁ¥
æ´ĭ èij±
æ¯į æł¡
ä¸Ģ éĹª
çĶ· 主è§Ĵ
æĹłçº¿ ç͵
å±ł å®°
æĺ¯ éŁ©åĽ½
æĺ¯éŁ©åĽ½ 娱
容 è²Į
åĿĩ 使åħ¶
太 快
å¹´ çͱ
å¹´çͱ 缼
èĭ¦ èĭ¦
åĬĽ è¿ĺæĺ¯
åĬĽè¿ĺæĺ¯ èĩª
æĨ ©
èģ¯ çµ¡
åĶ ¾
åħ·æľī æĪĺ士
追 éĹ®
åłĨ æĶ¾
åıį 驳
å®ŀäºĭ æ±Ĥ
å®ŀäºĭæ±Ĥ æĺ¯
åѸ éĻ¢
åįģ åĩłä¸ª
æķij æĬ¤
æķijæĬ¤ 车
ç½ij绾 ä¼łæĴŃ
åįģåħ« å±Ĭ
éĥ¨ åī¯
éĥ¨åī¯ éĥ¨éķ¿
çĹ´ è¿·
管çIJĨ æĿ¡ä¾ĭ
èŀį 为ä¸Ģä½ĵ
æĢ» 产å̼
è³ ĵ
ä¸ĥ æĺŁ
çıŃ ç»Ħ
绣 é¢Ĩ
请 大家
éĩij éϵ
èĪħ èĪħ
æµ· æ¹¾
æĸ½ çŃĸ
享 èªī
éº ¥
端 åįĪ
绿 åŁİ
確 ä¿Ŀ
å·´ æĭī
åĨĴ çĿĢ
æħ· æħ¨
个人 è§ĤçĤ¹
ä¹Ļ çĥ¯
ç¡ħ è°·
éĸĭ å±ķ
å°ļ 书
åĿļ 飧
åº µ
èĢģ é¾Ħ
èĢģé¾Ħ åĮĸ
羨 çľ¼
绿 水
绿水 éĿĴå±±
书 é¦Ļ
主åĬĽ åĨĽ
æīįæĺ¯ 羣æŃ£
æĬ¢ åħĪ
æĪIJå°± æĦŁ
éĩį æŀĦ
éĴ¢ åİĤ
æĪIJ 份
èĬ± 纹
ä¹ĭ äºī
å¹² ç»Ĩèĥŀ
æĹ¢ åı¯ä»¥
ç¹ģ çIJIJ
æĦļ èł¢
éĿŀ常 æĺİæĺ¾
ä½ĵ 彩
æĬĢ æ³ķ
æĿĨ èıĮ
å¹¿æ³Ľ åħ³æ³¨
åĮĹ å®ĭ
å§Ĭ 妹
åįı åĬŀ
æ·® åįĹ
çĥ ı
æ´Ĺ èĦ¸
åıĹ è®¿
åıĹ访 èĢħ
éĩįè¦ģ åĽłç´ł
å½±è§Ĩ åī§
综èīº èĬĤ缮
èľķ åıĺ
äºĮ 线
äºĮ线 åŁİå¸Ĥ
ä¼Ĭ å§ĭ
çıĬ çijļ
èĩª æŁ¥
åħ¥ åĽŃ
åĩ¶ æīĭ
åħ¬ è¯ī
éģĩ éļ¾
éĩĩçŁ¿ çŃī
èĩª çIJĨ
åĸ· æ¶Ĥ
æī© åħħ
éĢı è§Ĩ
é«ĺéĢŁ å¢ŀéķ¿
åĽ¾ çĶ»
ç¾ ¹
èĤĩ åºĨ
è¾ľ è´Ł
èµĶ ä»ĺ
è· ¡
åģ¥åº· æĪIJéķ¿
以ä¸Ĭ åѦåİĨ
åıĸå¾Ĺ 以åıĬ
æ²ī 积
åįģä¹Ŀ å±Ĭ
缸éĹľ æľįåĭĻ
æī§ åĭ¤
åī¯ åİ¿éķ¿
å¯ °
åģľ æ»ŀ
淹 没
çŁ³ çģ°
çį ¸
åĢ ¦
ç¾İ åªĴ
æķĻ æ¡Ī
åĬł çĽĸ
åħ¬å¼Ģ èµĽ
å¥ł åŁº
æĺĨ èĻ«
çŀ ħ
磷 éħ¸
äºī åĪĽ
çİĭ æĻĵ
ç¼ĵ åĨ²
åİļ åİļ
åİļåİļ çļĦ
æŀ£ åºĦ
ç²¾ çĽĬ
ç²¾çĽĬ æ±Ĥ
ç²¾çĽĬæ±Ĥ ç²¾
åĪĨæĶ¯ æľºæŀĦ
å®ŀæĸ½ ç»ĨåĪĻ
æĸ° èµĽåŃ£
總 統
éĢł è¡Ģ
é¢ĩ åħ·
é»Ħ åŁĶ
è¡Ģ èĦĤ
交éĢļ å·¥åħ·
å³ ¥
æĹıèĩªæ²» å·ŀ
寺 éĻ¢
確 å®ļ
æ¦Ĥ念 èĤ¡
æĦŁ å®ĺ
æŁľ åı°
åĶ Ķ
çŀŃè§£ 並
æĢ» ä»·
åIJ¸ åħ¥
æĢ ¼
æĻļ éĹ´
å±Ĭ æ¯ķä¸ļçĶŁ
çĶŁ å§ľ
éĺħ读 åħ¨æĸĩ
å¾Ĺåΰ æľīæķĪ
æIJľ æķij
åİĨ æĿ¥
èŃī æĺİ
åĥ »
èĨ³ é£Ł
åĦĦ åħĥ
æīĵ åİĭ
宾 客
åķ ¼
ä¸ĢçϾ å¤ļ
æ·±åħ¥ 人å¿ĥ
æ¢ħ å·ŀ
çłĶ åѦ
åħ³ ä¹İ
è¼ Ľ
亲 åıĭ
éħį æĸĻ
æĪij çĪ±ä½ł
è´¸æĺĵ æĪĺ
æľī èī²
æľīèī² éĩijå±ŀ
æįIJ åĬ©
为 é¦ĸ
为é¦ĸ çļĦ
å¯Į åĬĽ
çĶ· ç¥ŀ
é³ ³
æµĩ æ°´
åIJ ±
æĺİç¡® æıIJåĩº
åı¹ äºĨ
åı¹äºĨ åı£æ°Ķ
礼 æĭľ
è¿Ļ个 åIJįåŃĹ
ä¿¡ å¾Ĵ
å¿Ĺ 强
éĻIJ æĹ¶
æĶ¶ è²»
åĨľå®¶ ä¹IJ
å°ıé¾Ļ èϾ
èIJ½ å¹ķ
æ§ Ł
åѦ 龸
æĪĸ å¤ļ
æĪĸå¤ļ æĪĸ
æĪĸå¤ļæĪĸ å°ij
座è°Ī ä¼ļä¸Ĭ
æ¶ ¼
éŃĶ çİĭ
å² ±
é¡¶ å±Ĥ
é¡¶å±Ĥ 设计
èĦij åŃIJéĩĮ
éĻ¢ åŃIJéĩĮ
轩 è¾ķ
身å¿ĥ åģ¥åº·
èħ ij
éĹľ 注
åıĤåĬł ä¼ļè®®
ä¸Ńåįİ æĸĩåĮĸ
追 寻
å®ī çĦ¶
é£Ļ åįĩ
éŁŃ èıľ
é¸ ¦
åĤ¨ éĩı
çĶ· æĸ¹
å¤ĩ 份
æijĶ åĢĴ
润æ»ij æ²¹
é̼ è¿ij
çͳ è¯ī
鸣 类
çŁ³æ²¹ åĮĸå·¥
åĿļ æŀľ
è¿Ļå®¶ ä¼Ļ
æĭĴ ä¸į
羣 çļ®
è·Ŀ éĽ¢
è¿ĺ æĮº
éĽķ åĥı
åĪĿ æģĭ
æıIJä¾Ľ æĽ´å¤ļ
æŁ¥çľĭ åħ¨æĸĩ
æķ°åŃĹ è´§å¸ģ
åĸī åĴĻ
åı¦ä¸Ģ ä½į
åĤ¬ åĮĸ
åĤ¬åĮĸ åīĤ
ä»İæĿ¥ 没
å¯ĨåĪĩ 缸åħ³
éĥ¨ 主任
产åĵģ ç»ıçIJĨ
並 åIJĮæĦı
èIJ½ åħ¥
å±ıå¹ķ ä¸Ĭ
åħ¬åı¸ 竳ç¨ĭ
æį¢ åı¥è¯Ŀ
æį¢åı¥è¯Ŀ 说
ä½į æĸ¼
ä½ Ķ
åĩ» æĿĢ
缸 è¾ĥ
缸è¾ĥ äºİ
ç²½ åŃIJ
åįĹ æŀģ
宫 é¢Ī
è£ģ åijĺ
æĺİ ç»Ĩ
ä»·å̼ éĵ¾
åĽĽä¸ª æĸ¹éĿ¢
æĥħåĨµ æĿ¥çľĭ
æĮij åīĶ
æ® ĺ
æŀģ åĬĽ
çĸij éļ¾
æĬµæĬĹ åĬĽ
æĢ¥ éĢŁ
æĪ Į
ä½İ ä¼°
éĹª è¿ĩ
æģ ¬
èµŀ æī¬
ä»ĸ å¦Ī
æĪIJ为 ä¸ĢåIJį
æ´Ĺ 礼
é¢Ħ计 å°Ĩ
åħĪè¿Ľ åįķä½į
è¼ Ķ
éĢĥ èĦ±
çݰ åŃĺ
èĢģèĻİ æľº
åįģä¸ĥ æĿ¡
åı¦ä¸Ģ åįĬ
温 æĥħ
åī¥ ç¦»
ä¸ĸ è´¸
å®ĺ åı¸
å¾Ī å·®
éĹ´ è·Ŀ
请 注æĦı
åı² è¯Ĺ
åĪ© åύ
è¿IJ ç®Ĺ
沦 为
該 使ç͍èĢħ
èĮ ¬
éͦ 绣
åı² æĸĻ
çģµ æ´»æĢ§
èģĶ ç¤¾
æĹł åĬ©
æĬĹ æ°§åĮĸ
èıľ èĤ´
éĢł èι
æİī èIJ½
å¤į æŁ¥
åĭĥ åĭĥ
åij¼ 声
給 äºĪ
åIJĮäºĭ 们
ç½ °
è¯ķ æİ¢
åħ³éĶ® åŃĹ
æįIJ çĮ®
ç»Łè®¡ æķ°æį®
åĪĽ ä½ľèĢħ
ä¸ĭ åįĬ
ä¸ĭåįĬ åľº
æī¿æĭħ 责任
端 æŃ£
ç©¿ è¡£
ä¼ł çIJĥ
åĬ© éķ¿
åĩ ±
éķ¶ åµĮ
é£ŀ ç¿Ķ
è¾ĵ åįµ
è¾ĵåįµ ç®¡
ä¸ĩ åħ¬éĩĮ
æİ¨å¹¿ åºĶç͍
å¿« æ¨Ĥ
ç§ ½
èī° å·¨
åIJ¬ å®Į
åĿļ 硬
奥 åľ°
å¥¥åľ° åĪ©
é¢ ĵ
èĻIJ å¾ħ
ä¾Ľ æ±Ĥ
éľī ç´ł
伪 è£ħ
乡 åľŁ
åĩ¡ æľ¬ç½ij
åĩ¡æľ¬ç½ij 注
ä¼Ĭ åĪ©
è¡¡ æ°´
æĽ´ åĥıæĺ¯
åĪĨéĴŁ å·¦åı³
è¦ı 模
äºĶ åĪĨéĴŁ
åºĹ åĬłçĽŁ
åĽ° éĽ£
åħ³ åģľ
æĢĿ 绪
åĴ½ åĸī
缸 符
çĥ¦ èºģ
æĻĤ æľŁ
åijĪ çı¾
è§£ æķ£
诱 导
éļĶ çĥŃ
çĮ ¶
åįĹ å®ĭ
æ·±åħ¥ äºĨè§£
çŃĶ çĸij
æĺ¼ å¤ľ
åįĥ ä¼ı
åĬ³åĬ¡ æ´¾éģ£
红 è±Ĩ
åĿı äºĭ
çĤ¹ æ»´
å°±ä¸ļ å²Ĺä½į
约 åIJĪ
åħį éϤ
éĢĨ åĬ¿
éĩį éĩijå±ŀ
å®ĺ 宣
ä½İ å»ī
æģ¨ ä¸įå¾Ĺ
å¾Ĺ 天
å¾Ĺ天 çĭ¬
å¾Ĺ天çĭ¬ åİļ
ä¸Ģå°ģ ä¿¡
æĬ½ å¥ĸ
è¾Ĺ 转
çķĻ å®Ī
çķĻå®Ī åĦ¿ç«¥
çŃĶ åį·
å·¨ åŀĭ
æľĢ好 ä¸įè¦ģ
æµĻæ±Ł 大åѦ
æĨ ¨
æı¡ æīĭ
éĴĪ ç»ĩ
æİĴ 骨
çĤ ½
å°ģ è£ħ
åįĢ åŁŁ
空æ°Ķ åĩĢåĮĸ
åħī å½±
åĢĴ å¡Į
å§ļ æĺİ
æ¤į 被
åѦ åīį
åѦåīį æķĻèĤ²
èĬĿ åĬł
èĬĿåĬł åĵ¥
缩 水
ä½ Ł
åľ¨çº¿ åĴ¨è¯¢
èµı æŀIJ
éĿĴ èĽĻ
æĬ± ä½ı
èĮĤ åIJį
åħ¨åĬĽ æīĵéĢł
åįļ士 åѦä½į
æ²§ å·ŀ
åĻ ¢
æĿĤ çī©
åĪ» çĶ»
æį ħ
å¾® éĩı
å¾®éĩı åħĥç´ł
ä¸Ģ åĽŀäºĭ
鸡 èĤī
åĪ©æ¶¦ çİĩ
æīį ç®Ĺ
å¾® å¦Ļ
棵 æłij
贪 婪
åĩı å̼
梦 å¢ĥ
åı¯ è§Ĩ
åı¯è§Ĩ åĮĸ
广大 å¸Ĥæ°ij
ä¸ĵä¸ļ ä»İäºĭ
ç»ı 纬
ç´§ çĽ¯
çŁ¥ å·±
è¤ ļ
æĸĩåĮĸ åºķèķ´
åݦéŨ å¸Ĥ
临 港
对åħ¶ 羣å®ŀ
岸 边
è¦ĸ çĤº
æĬĹ çĻĮ
åĶIJ å®ĩ
ä¸įå¾Ĺ è¶ħè¿ĩ
å¨ģ æħij
æ¡Ĩæŀ¶ åįıè®®
èµ° ç§ģ
åĽ¢ å§Ķ
夸 大
æ¬ Ħ
ç¥ŀç»ı ç³»ç»Ł
æijĦå½± ä½ľåĵģ
èĬ ¥
å®ī åºĨ
海 滨
æŀĦ æĢĿ
çīµ æĮĤ
åı ©
éĺIJ æĺİ
éģ ģ
ç²¾ æ²¹
ç©´ ä½į
æĬ¤ 身
æĬ¤èº« 符
æĮĩ å°İ
åŃĺåľ¨ ä¸Ģå®ļ
å¯Ĥ éĿĻ
æµ·å¤ĸ å¸Ĥåľº
éĿ ¡
综åIJĪ å¾ģ
ä¿ IJ
è¨Ī ç®Ĺ
æĺİ æľĹ
äºļ è¿IJ
äºļè¿IJ ä¼ļ
åīįçŀ» æĢ§
åĮ® ä¹ı
产ä¸ļ æī¶è´«
èĦij æµ·
èĦijæµ· ä¸Ń
åħļçļĦ é¢Ĩ导
åĪĺ éĤ¦
æµģ æĺŁ
æĵ Ĥ
æĶĢ çĻ»
åĴ Ķ
ä¸Ģä¸ĭåŃIJ å°±
è¯Ĭ æ²»
使 åĬ²
åīµ ä½ľ
éĵŃ è®°
éĴ± è´¢
æĹ¥æĬ¥ è®°èĢħ
çĥŁ çģ«
èĥľ è´Ł
åįļ 主
ä¸ŃåĽ½ èģĶéĢļ
ç½ijç«Ļ é¦ĸ页
å°± å¤Ł
å°±å¤Ł äºĨ
æīij åħĭ
å±ħ å§Ķä¼ļ
è° ¬
å®īåħ¨ äºĭæķħ
åķĨ çĶ¨è½¦
循çݯ ç»ıæµİ
æ· ¤
èĢĥ è¯ģ
å®Ŀ èĹı
å®Į ç»ĵ
çłĶåıij æĬķåħ¥
å² ij
æģŃ æķ¬
离 éĢĢä¼ij
水 墨
å© ¶
è¯Ĺ åı¥
å®ģæ³¢ å¸Ĥ
å¼± çĤ¹
åģľ çīĮ
奶 油
å¥ĩ纳 æ²³
æĨ Ĥ
社ä¼ļ å®ŀè·µ
è´Ŀ 壳
çłĤ æµĨ
èι åıª
宣 æī¬
综åIJĪ æķ´æ²»
åĤ ij
æ°ijæĹı æĸĩåĮĸ
éĩį çݰ
积 æ·Ģ
åħ¬ çĦ¶
çħ ī
缸 èģļ
æ± ¾
纹 çIJĨ
çĩĥ çħ¤
æŃ¤ ç§į
ç¾İ å¦Ĩ
åįĥ çĵ¦
çIJ Ľ
驾驶 è¯ģ
éĺ¶ æ¢¯
ä¸Ŀ ä¸Ŀ
å¾Īå¤ļ äºĭæĥħ
åħī éĺ´
èijĹä½ľ æ¬Ĭ
åħ§ éĥ¨
çĽ¸å¯¹ æĿ¥è¯´
éĸ Ĵ
éľĩ æħij
說 話
æĨ ij
ç«¥ è£ħ
ä½ıæĪ¿ åĴĮ
ä½ıæĪ¿åĴĮ åŁİ
å·²ç»ı è¶ħè¿ĩ
侦 å¯Ł
çŁ¿ çī©
ä¾Ľ 大家
çī¹ éĤĢ
ç¨ĭåºı åijĺ
çķľçī§ ä¸ļ
æ° ª
çij ª
åĢĴ åľ¨
åĢĴåľ¨ åľ°
æ¯ Ģ
梯 éĺŁ
æİ¥ èijĹ
æĬĹ èıĮ
è¤ ĩ
ç¬ Ļ
æ¯Ķ ä¸Ĭå¹´
鸡 汤
åŃ¦ä¹ł æĪIJ绩
æĸij æĸĵ
åħΠ坼
åĪĹ ä¸¾
è°ĥæŁ¥ æĺ¾ç¤º
æ© «
ä¹Ŀ åįģ
è°¢ 飵
è·¨è¶Ĭ å¼ı
女æĢ§ æľĭåıĭ
èIJ¥åħ» ä»·å̼
å®ŀè·µ ç»ıéªĮ
èĭı å·ŀå¸Ĥ
çĵ¶ åŃIJ
æĸ° çļĦä¸Ģ
æĸ°çļĦä¸Ģ å¹´
æĺİ æĻ°
å®ł çα
åŃŠ第
æľĹ 诵
纳 æĸ¯
éĢĨ è¡Į
è«ĭ æĤ¨
è«ĭæĤ¨ æıIJä¾Ľ
èĥ¸ æĢĢ
第ä¸ĥ å±Ĭ
强 壮
代 åŃķ
æ±¶ å·Ŀ
å®¶ åĸ»
å®¶åĸ» æĪ·
å®¶åĸ»æĪ· æĻĵ
èħ ®
åIJ¯ 迪
æĹł éļľç¢į
èĻķçIJĨ åıĬ
æĿ¥ åİĨ
å®ŀ åĬ¡
ä¹Ł éļıä¹ĭ
æĬĢèĥ½ åŁ¹è®Ń
åѤ ç«ĭ
åī ģ
éĥ´ å·ŀ
æĶ¶ æķĽ
éł» éģĵ
èᣠ幏
èİ« è¿ĩäºİ
æŃ¤ æĻĤ
纪å§Ķ çĽij
纪å§ĶçĽij å§Ķ
缸 éĤ»
åı¦ä¸Ģ è¾¹
çªĴ æģ¯
æľīå¾Īå¤ļ ç§į
æ¯ı éĢ¢
éĹ® ä¸ĸ
ç´¯ ç´¯
éĿĴæĺ¥ æľŁ
è·¯ åĨµ
åħĭ èݱ
è¿Ħä»Ĭ 为æŃ¢
æĥĬ å¥ĩ
跨 度
éħ¿ éĢł
åĩ ĭ
è¿ij ä¸īå¹´
åĨħ 马
åĨħ马 å°Ķ
æı į
è¿Ľå±ķ æĥħåĨµ
èĮ §
æľīåºı æİ¨è¿Ľ
æĢ» åĨłåĨĽ
æĪIJ绩 åįķ
éĽ»è©± åıĬ
ç´§å¯Ĩ ç»ĵåIJĪ
åºĬ ä½į
é¹ Ĭ
æķ£åıij çĿĢ
åĭŁ èµĦ
æ°¨ éħ¸
彩 ç¥ŀ
è®Ģ åıĸ
éĩį æ¸©
ä¸Ń åŃĺåľ¨çļĦ
ç¾İ éºĹ
ä¸įæĸŃ å¢ŀåĬł
è½® æµģ
æİ¥ åIJ¬
å¹´ 产å̼
åįĥ åħĭ
æĪĺåľº ä¸Ĭ
çħ§ é¡§
å¹²éĥ¨ éĺŁä¼į
åį° ç«ł
ä¸Ģèĩ´ æĢ§
è¿ŀ å¤ľ
åħħ è£ķ
é»ij åIJįåįķ
åĩĢ æ°´
ä¸Ģ大 æĹ©
åĮħ 袱
çĬ¯ è§Ħ
çIJĨ è«ĸ
æŀģ æĺĵ
éª ¸
å¨ĺ å¨ĺ
åĽ¢ åľĨ
亿åħĥ 以ä¸Ĭ
åĪ©ç͍ æĤ¨çļĦ
带æĿ¥ æĽ´å¤ļ
ä¸Ń央 空è°ĥ
æľĪ èĸª
çĮľ æĥ³
åĪº 客
ä½ľ æģ¯
åįķ è°ĥ
äºĴ åĪ©
å¦Ĥæľī ä¾µæĿĥ
å°ı å·§
åįģ åł°
åĵĪåĵĪ åĵĪåĵĪ
è¾¹ éĻħ
æłĩ è¯Ń
åĪĩåħ¥ çĤ¹
éĢĨ è¢Ń
è¯ķ åīĤ
绿 è±Ĩ
è® ļ
åŁºçĿ£ å¾Ĵ
å£ ¬
åħ¨ æĺİæĺŁ
éĢī ç§Ģ
èĪĮ å°ĸ
ä¸įåIJĮ ç±»åŀĭ
çĥŁ åĽ±
çģµ æ°Ķ
åĮº 管å§Ķä¼ļ
åĨľ åī¯
åĨľåī¯ äº§åĵģ
èĶļ æĿ¥
沪 æĮĩ
åħ»æ®ĸ æĪ·
æĸĹ å¿Ĺ
é¦ĸ é¢Ĩ
è¡Ģ èħ¥
åĬł ç´§
ä¸Ģèĩ´ 好è¯Ħ
第ä¸ī èĬĤ
æī¬ å°ĺ
交éĢļ æŀ¢çº½
鼶 ç¢İ
é»ij æ´ŀ
çľĭ ä¸įæĩĤ
å±ŀ å®ŀ
主 åŁİåĮº
å¨ Ľ
å¨Ľ æ¨Ĥ
ç¬ij æĦı
èϹ æ¡¥
åIJĦ个 çݯèĬĤ
çķ¥ å¾®
èĢķ èĢĺ
æľ¬ åľºæ¯ĶèµĽ
æĪIJ è´¥
éĢī èĤ¡
èªŀ è¨Ģ
çŃĶ è¾©
èĩª ä¹ł
æ£ º
ä¸ĩ 欧åħĥ
åģľ å·¥
对åħ¶ è¿Ľè¡Į
积æŀģ éħįåIJĪ
ä¹¾ åĿ¤
å¦ĸ æĢª
èļĮ åŁł
èµĦ产 è¯Ħä¼°
è°ĥ çļ®
éϤ å¤ķ
åĽ´ å¢Ļ
æľį å½¹
æ·± æ¸Ĭ
é¢Ħ åζ
ç ĥ½
å®ī 稳
建 æŀĦ
çĭĻ åĩ»
主åĭķ 註åĨĬ
éĥ½æľī èĩªå·±
æİĴåIJį 第ä¸Ģ
麻 辣
çĢ ļ
çĥŁèĬ± çĪĨ
çĥŁèĬ±çĪĨ 竹
èĩªçĦ¶ ä¿ĿæĬ¤
ä»Ļ å¢ĥ
为äºĨ éģ¿åħį
åĨ· åºĵ
è§£æĶ¾ æĢĿæĥ³
åĪĿ äºĮ
ä½ĵ è´´
é¦ĸ å¯Į
迪 æĭľ
æļĤ ç¼ĵ
æĶ¯æĮģ åĬĽåº¦
侦 æİ¢
马 åĪº
åĮĹ æ±½
ç¹ ŀ
è°İ è¨Ģ
éĢ£ çºĮ
å· ³
ä»»ä½ķ æĹ¶åĢĻ
车 èģĶç½ij
åįķ 项
å¸Ń åį·
建çŃij æĿIJæĸĻ
ä¸Ńç§ĭ èĬĤ
ç¡ķ士 çłĶç©¶
ç§ģ ç«ĭ
åħļåĴĮ æĶ¿åºľ
æľ¬æ¬¡ 交æĺĵ
èººåľ¨ åºĬä¸Ĭ
ç½ijåıĭ è¯Ħ论
å¦ Ŀ
害 ç¾ŀ
åħ¬ç«ĭ åĮ»éĻ¢
ä¸ ŀ
çĶŁçī© è´¨
åºĶ éĤĢ
æĬ½ åıĸ
åĩł å¼ł
æijĺ ç¼ĸ
ç»ĺ æľ¬
详 解
强 硬
æľĢ åħĪè¿ĽçļĦ
æĭĽ èĤ¡
æĭĽèĤ¡ 书
åįĥ æĸ¹
åįĥæĸ¹ çϾ
åįĥæĸ¹çϾ 计
éħį éŁ³
驾 çħ§
å¾ģ æĪĺ
èªĵ è¨Ģ
æĭľ å¸Ī
æĭľå¸Ī åѦ
æĭľå¸ĪåѦ èīº
æĬ± åĽ¢
ç±³ ç²ī
éĿŀ常 éĢĤåIJĪ
èĪª æµ·
履 约
åįģåħ« æĿ¡
éĶ» éĢł
éĩįè¦ģ 举æİª
åıijæĮ¥ ä½ľç͍
æ· ļ
人 社
人社 å±Ģ
è¯ķçĤ¹ å·¥ä½ľ
éĺľ éĺ³
æ¡ĥ åľĴ
æ°ij ä¼ģ
æ´ģ çϽ
贵 宾
åħ¬ 社
è§ī æĤŁ
è®°å¿Ĩ åĬĽ
æľĥåĵ¡ 註åĨĬ
æŃ¤ æ¡Ī
麻 çĹ¹
çı Ģ
æĸ© èİ·
çĶ· åŃ©åŃIJ
å±ĢéĻIJ äºİ
åĭĺ æŁ¥
åIJĥ 饱
èĬ¬ åħ°
æ£ķ èī²
ç¦ı ç¥ī
çͳ èĬ±
æµ· çĽĹ
èĶ ij
æĸĩ åѸ
æ´»æĢ§ çĤŃ
缴 éĢļ车
è°¢ éĤĢ
躺 çĿĢ
åľ ĥ
æ¯ıæĹ¥ ç»ıæµİ
åħ¬åħ± æĸĩåĮĸ
讲 æķħäºĭ
å¯Ł çľĭ
æĤł éĹ²
åľ° åĿª
æ¶Į çݰåĩº
é«ĺçŃī éĻ¢æł¡
èĮĦ åŃIJ
éĺ² åį«
ä¾ĭ è¡Į
æĺ¾ éľ²
æĸ° 常æĢģ
ç»Ŀ ä½³
å¯Į æ°ij
以 人æ°ij
以人æ°ij 为
éĤ¢ åı°
å±ķ æ¼Ķ
çϼ å¸ĥ
è´Ł è½½
åģı 离
æ°¸ éģł
éĩįè¦ģ åİŁåĽł
åįıä¼ļ ä¼ļåijĺ
éļ¾ æ°ij
çĶŁäº§ 车éĹ´
çģµ åĬ¨
两年 åīį
æĸ¹ åľĨ
æ´» ä¸ĭåİ»
ä¸ĸçķĮ è§Ĥ
éªĹ åıĸ
ç¾İ è²Į
èĥ½ çľĭåĩº
çϼ æı®
è§Ĥ å½±
åī ĥ
åIJĪèµĦ åħ¬åı¸
å© §
å¹² æĹ±
åħŃ ä¸ªæľĪ
尤为 éĩįè¦ģ
èĤ ½
秦 åĽ½
æīĺ ç¦ı
建çŃij å¸Ī
åįĩ级 æĶ¹éĢł
å°ı é¢Ŀ
å°ıé¢Ŀ 贷款
两个 ç»´æĬ¤
æĭį æĭį
åı¯ çĸij
æį¢ åıĸ
æŃ¦ 士
èµĸ 以
èµĸ以 çĶŁåŃĺ
æĮ ļ
殿 åłĤ
èĩªçĦ¶ çķĮ
ç£ģ åľº
å¦Ĥä½ķ çľĭå¾ħ
ä»ĬæĹ¥ 头æĿ¡
西 åŁŁ
èİ· è¯Ħ
風 æł¼
ä¿Ħ åĽ½
æīĵ æĭ¼
å®£ä¼ł çīĩ
å¾Ī æĸ¹ä¾¿
ä¾Ľç»Ļ ä¾§
纪念 ç¢ij
毫 åħĭ
èĬ³ é¦Ļ
å·¥åķĨ éĵ¶è¡Į
请 çĤ¹åĩ»
ç¼ ª
æĹłæķ° 次
èᝠå¸Ī
èħ ¸
游 èīĩ
åĮ ¾
å·¡ èĪª
æ²»çIJĨ ä½ĵç³»
èIJ¥éĢł èī¯å¥½
æ·· æ·Ĩ
éĢļ çķħ
åĬ³ ç´¯
ä»ĵ ä½į
å¢ŀ éķ·
éļIJ 约
æĿĤå¿Ĺ 社
åħ» èĤ²
åı¯èĥ½ åıijçĶŁ
èĢĥ 試
西 侧
åĬł åĢį
主æĮģ åı¬å¼Ģ
çķ¢ ç«Ł
éĹ® 询
æµ· æ£ł
èĹ ©
注æĺİ æĿ¥æºIJ
æ£Ģ çĸ«
请 åģĩ
æĬļ æij¸
èĵĦ çĶµæ±ł
è·Ł ä¸įä¸Ĭ
çݰ代 社ä¼ļ
çѹ èµĦ
ä½ĵèĤ² 彩票
延 误
è¾Ľ è¾£
éĿ¢ 容
åį° è®°
çģŃ äº¡
ç´ł é£Ł
åħ´ èĩ´
éľĢè¦ģ ç͍
éľĢè¦ģç͍ åΰ
å®Ŀ å¦Ī
ç£ĭ åķĨ
éļ¶ å±ŀ
è´¡çĮ® åĬĽéĩı
åħ¬åħ± èµĦæºIJ
大 éĺª
åĨĽ è®Ń
æĤ¬ 念
社ä¼ļ 稳å®ļ
å¹²äºĭ åĪĽä¸ļ
æľī æĿ¡ä»¶
æľīæĿ¡ä»¶ çļĦ
ä¸Ģå¹´ ä¸Ģ度
åİ ¥
强 奸
豪 车
æİĮ æŁľ
æ°´åĪ© å·¥ç¨ĭ
å³ ª
积æŀģ ä½ľç͍
æµ· æ·Ģ
æµ·æ·Ģ åĮº
çĥŃ æĴŃ
åĿļæĮģ ä¸įæĩĪ
åıĮ èĦļ
绣 æĪĺ
ä»»ä½ķ 人éĥ½
åľ°ä¸ĭ 室
åĨ¶ çĤ¼
è°ħ è§£
æ¸Ķ èι
太éĺ³ åŁİ
被 æįķ
计ç®Ĺ åύ
西 åĮ»
èĪĴ å¿ĥ
æ¡ ¦
éģ ²
åĬ ij
è¨ Ĺ
èİ º
åĸ ¬
çĵ ¯
åĺ ĺ
åł ķ
æķ Ŀ
åij ¦
èĭ ŀ
æŃ ¹
æĵ ¬
æ£ Ħ
èĪ µ
å¥ ª
çļ ĭ
æĶ ¸
åľ ©
ç¤ Ļ
ç¢ ĺ
éı Ī
æĦ ķ
ç¹ ³
èĺ ¸
è² Ĥ
æ¼ ²
æij ¹
æĶ Ŀ
åŃ ¢
èķ Ń
é¨ °
æ½ ¼
éħ °
æĴ ¥
è¹ ¬
é¨ Ļ
è¸ ¹
éģ IJ
çĺ Ģ
èĽ ¤
æĤ ĸ
çĴ ŀ
ç£ IJ
æİ °
è¾ Ĭ
å¾ ij
æİ ĸ
éģ ŀ
éĤ ¸
éĽ ı
æĨ İ
æľ ½
çį »
ç® Ķ
è¤ ¶
æļ ¢
æĺ µ
çı Ĥ
æĤ ¸
åģ µ
åĻ ľ
å£ ¯
æĴ ®
æģ į
å© ķ
ç¯ ±
éĺ Ļ
çī ł
è£ ĺ
è³ ¢
éĩ ľ
éĵ ł
èİ ĺ
æ® Ĩ
çĻ ¸
è´ ı
ç² ±
å« ¡
åĨ ¢
è¤ Ĵ
æĩ Ĭ
éľ ĵ
å¡ µ
æĭ £
å» Ł
é£ ½
é¢ Į
åļ İ
æ· º
èĨ ł
åİ Ń
åļ ĩ
åij ĥ
çĴ ĭ
çŃ ±
æĭ ·
èį §
éĶ °
åŃ °
èĵ ĵ
èĨ ½
æŀ ī
åĸ ½
çĽ Ķ
çŃ IJ
ç¾ ļ
è ħĮ
è¾ «
æ³ ĵ
çĶ ¬
èŁ ²
åĸ ª
å¦ ĵ
è¬ Ģ
çĤ Ĭ
æĽ ľ
æ± IJ
è´ Ī
èį Ģ
æĬ ł
ç¢ ¾
æ« ĥ
éŀ ł
èij Ĩ
ç¥ ¯
å½ Ŀ
é¦ į
åĮ £
æľ Ń
åĿ Ĥ
ä¿ ij
èĵ ®
çij Ľ
æī ī
èĩ Ł
è² «
çİ ¥
æ· ¼
åİ ²
é³ Į
å³ Ń
åij Ľ
é §
é§ IJ
éģ ·
ä¿ ª
æĢ Ĥ
è¾ į
å± į
åĭ ģ
å¥ ļ
éļ ħ
éĴ ´
è¼ Ŀ
å® ¦
èIJ ĥ
çĺ ĭ
æĨ ¶
æĤ ħ
è¾ Ļ
åij ľ
çł º
éĢ ŀ
æµ ļ
éĸ £
èĸ ©
éĻ ĭ
çĤ Ļ
èª ķ
ä¸ Ł
é¹ ½
ç± Į
è´ °
éĭ ª
çľ ©
æĴ IJ
èĨ º
éŀ ĺ
ç¾ ²
çª ®
ç´ IJ
æ® ´
çº ¾
èº į
ç´ ĭ
çĦ ĸ
çĶ º
çī ½
çĤ ¯
ç¼ Ķ
æ¯ ĵ
å¬ °
æ¢ §
äº Ł
è¢ ħ
çį Ħ
è¿ ¥
æ¼ ¾
çĿ ij
ç¸ ¾
é¦ ĭ
é¤ ħ
æ ¹Ħ
æĺ ĩ
æŀ Ń
èĸ °
æŁ ij
æ¦ »
åĻ Ĺ
åĻ ´
æ£ £
åĶ §
çĨ ¹
è¼ ¯
å¢ Ł
é² ²
æĪ Ľ
èī ¦
èĬ ®
åĺ Ł
å¸ ¥
å¿ »
çĮ Ŀ
å¯ µ
è³ ¦
èĽ ¾
æ» ¾
çĤ ķ
éĵ ¬
èĴ ¿
éĴ ¨
çĥ Ļ
ç² ķ
æĥ ¦
æº §
é¢ į
éħ £
å³ ¦
ç± ģ
çĥ ĥ
åĨ Ĺ
åı ģ
çĽ §
ç½ µ
éĴ Ĺ
å¬ ī
è° ı
ç³ §
è¾ Ń
æ· ¬
èŁ Ĵ
è¯ ©
è¦ ĥ
çĻ ĸ
é½ Ĵ
çĪ IJ
ç® į
ç¼ İ
ç£ º
è¯ «
è¤ ²
æĵ ł
èIJ ¦
çĿ ¬
è° į
éĦ °
æł ¾
é¡ ı
ç¸ ±
æ¡ ¨
éĨ ¬
è¥ ²
è® ª
å© º
èį Ł
åĮ Ŀ
çĨ ł
èĽ Ĭ
æ¸ ļ
å´ ½
é² ¤
åķ °
åĮ ķ
ä¸ IJ
è® ¥
åı ½
åı ¼
çļ ¿
è¿ Ĥ
åIJ Ĩ
å± ¹
èĩ ¼
è® ¹
é© ®
çº «
æ± ŀ
æĬ ¡
èĭ ĩ
åIJ ł
åIJ Ń
åIJ ®
å² ĸ
ä½ ĥ
çĭ Ī
åº ĩ
åIJ Ŀ
éĹ °
æ± ¹
å¿ ±
æĭ Ħ
æĭ Ĺ
èĮ ī
èĭ Ľ
èĮ ģ
çŁ ¾
èĻ ı
åij »
åĴ Ħ
å¿ ¿
èĤ ®
çĭ ŀ
çĸ Ł
çĸ Ļ
çĸ ļ
æ³ ŀ
å¸ ļ
å± ī
è¿ ¢
é© ¹
ç İ·
çıĬ ó
çıĬó ł
çıĬół Ħ
çıĬółĦ ģ
æĮ İ
æĭ ´
åŀ Ľ
èį ¤
æ® ĥ
çĽ ¹
åĵ Ĩ
è´ »
æ¯ ¡
çĭ °
çĭ ¡
æŁ Ĵ
æģ ĥ
è¯ ¬
è¢ Ħ
è¯ ²
èļ ¤
èĢ Ļ
åŁ Ĥ
æį İ
æį Į
æ¢ Ĩ
é ħĮ
çł ¾
æ® ī
åĶ ł
æĻ Į
èļ £
èļ ª
èļ ĵ
é¸ ¯
åĶ ģ
åĶ Ĩ
åĢ Ķ
èĪ Ģ
è± º
èĥ °
é¸ µ
é¸ ³
é¦ ģ
ç¾ Ķ
æ¶ £
æ¶ ķ
æĤ ¯
è¯ ½
è° Ĩ
ç¥ Ł
ç» ¢
æį º
æį ¶
æį »
æİ Ĥ
èı ł
èIJ ¤
éħ Ĺ
çľ ¶
åķ Ħ
èļ ¯
èĽ Ģ
åĶ ¬
å¸ ·
éĵ IJ
éĵ Ľ
åģ İ
å¾ Ļ
èĦ ¯
è± ļ
çĮ ĸ
çĹ Ĭ
æ¶ ®
æĥ Ń
æĤ ´
æĥ ĭ
è° ļ
æı ©
æIJ Ģ
æIJ Ķ
æ¦ Ķ
æ¤ Ń
éĽ ³
åĸ ³
è· Ľ
èľ ĵ
èľ Ĵ
é¹ ĥ
éĶ Ħ
çĶ ¥
çŃ ı
çĮ ©
çĮ ¬
çĮ ¾
çĹ ¢
çĹ ª
æĥ °
çª ĺ
è° ¤
éļ ĺ
å© ¿
é¹ ī
çij Ļ
æĸ Ł
æ¤ ¿
éħ ª
éĽ ¹
åĹ ¦
è· ·
è· º
è· ¤
èľ Ī
èľ Ĺ
å¹ Į
é¦ ı
èª Ĭ
æ¼ ĵ
è¤ Ĥ
èĶ Ĺ
èĶ ¼
åħ ¢
è£ ³
èľ »
èĿ ĩ
åĺ Ģ
éĶ ¹
ç® ķ
ç® ©
çĺ ©
çĺ Ł
æ¼ ±
å¯ ¥
éª ¡
æĴ µ
æĴ ¬
è± Į
åĺ ¹
èĿ ł
èĿ Į
èĿ Ĺ
èĿ Ļ
éķ IJ
ç¨ ¼
ç¯ ĵ
èĨ Ľ
é² «
çĺ ª
é² ¨
æĨ Ķ
ç¿ ©
è¤ ¥
ç¼ Ń
åĻ ©
çĵ ¢
éľ İ
è¸ ±
è¹ Ĥ
èŁ Ĩ
é¹ ¦
ç¯ ¡
çĺ ¸
çª ¿
ç¼ °
èĹ IJ
è¹ ĭ
èŁ ĭ
èŁ Ģ
èµ ¡
èĩ Ĭ
é³ Ħ
ç³ ł
æĩ ¦
åļ £
éķ °
é³ į
ç° ¸
çĻ £
é³ ĸ
é¬ ĵ
èł ķ
éľ ¹
èº ı
é» ¯
çĵ ¤
çŁ Ĺ
ä¹ Ĥ
ä¹ ľ
åħ Ģ
å¼ ĭ
åŃ ij
åŃ ĵ
å¹ º
äº ĵ
å »¿
ä¸ ı
åį ħ
ä» ĥ
ä» ī
ä» Ĥ
åĪ Ī
çĪ »
åį ŀ
éĹ ©
è® £
å¤ ¬
çĪ ¿
æ¯ ĭ
éĤ Ĺ
éĤ Ľ
èī ½
èī ¿
åı µ
ä¸ ķ
åĮ ľ
åĬ ¢
åį Ł
åı ±
åı »
ä» ¨
ä» Ł
ä» ¡
ä» «
ä» ŀ
åį ®
æ° IJ
çĬ °
åĪ į
éĤ Ŀ
éĤ Ļ
è® ¦
è® §
è® «
å° »
éĺ ¡
å° ķ
å¼ ģ
èĢ Ĵ
çİ İ
çİ ij
åľ ¬
æī ¦
åľ ª
åľ ¹
æī ª
åľ ®
åľ ¯
èĬ Ĭ
èĬ į
èĬ Ħ
èĬ ¨
èĬ ij
èĬ İ
èĬ Ĺ
äº ĺ
åİ į
å¤ ¼
æĪ į
å° ¥
ä¹ ©
æĹ ¯
æĽ ³
å² Į
å± º
åĩ ¼
åĽ ¡
éĴ ĩ
ç¼ ¶
æ° ĺ
æ° ĸ
çī Ŀ
ä¼ İ
ä¼ Ľ
ä¼ ¢
ä½ ¤
ä» µ
ä¼ ¥
ä¼ §
ä¼ ī
ä¼ «
åĽ Ł
æ± Ĩ
åĪ ĸ
å¤ Ļ
æĹ ®
åĪ İ
çĬ ·
çĬ ¸
èĪ Ľ
åĩ «
é Ĥ¬
é¥ §
æ± Ķ
æ± ľ
æ± Ĭ
å¿ ĸ
å¿ ı
è® ´
è® µ
è® ·
èģ ¿
èī ®
åİ ¾
å¦ ģ
çº ¡
çº £
çº ¥
çº ¨
çİ ķ
çİ Ļ
æĬ Ł
æĬ Ķ
åľ »
åĿ į
æĬ ĥ
ã§ IJ
èĬ «
èĬ ¾
èĭ Ī
èĭ £
èĭ ĭ
èĬ ¼
èĭ Į
èĭ ģ
èĬ ©
èĬ ª
èĬ ¡
èĬ Ł
èĭ Ħ
èĭ İ
èĭ ¡
æĿ Į
æĿ ĵ
æĿ Ī
å¿ ij
åŃ Ľ
éĤ ´
éĤ ³
å¥ ģ
è± ķ
å¿ Ĵ
æ¬ ¤
è½ «
è¿ ĵ
éĤ ¶
å¿ IJ
åį £
éĤ º
æĹ °
åij ĭ
åij Ĵ
åij ĵ
åij Ķ
åij ĸ
æĹ ¸
åIJ ¡
èĻ ¬
åIJ ½
åIJ £
åIJ ²
å¸ ı
å² Ī
å² ĺ
åħ ķ
åĽ µ
åĽ «
éĴ Ĭ
éĴ ĭ
é ĴĮ
è¿ ķ
æ° Ļ
æ° ļ
çī ¤
ä½ ŀ
ä½ ļ
ä½ Ŀ
ä½ Ĺ
å½ ·
ä½ ĺ
ä½ ¥
è± ¸
åĿ Į
èĤ Ł
å¥ Ĥ
åĬ ¬
çĭ ģ
é¸ ł
é¥ ¨
é¥ ©
é¥ «
é¥ ¬
åº ij
åº ĭ
çĸ Ķ
çĸ ĸ
èĤ ĵ
éĹ ±
éĹ ³
çĤ Ģ
æ² £
æ² ħ
æ² Ķ
æ² ¤
æ² ı
æ² ļ
æ± ©
æ± ¨
æ² ¨
æ± ´
æ² Ĩ
æ² ©
æ³ IJ
æĢ ĥ
æĢ Ħ
å¿ ¡
å¿ ¤
å¿ ¾
æĢ ħ
å¿ ª
æĢ Ĩ
å¿ Ń
å¿ ¸
è¯ Ĥ
è¯ ĥ
è¯ ħ
è¯ ĭ
è¯ Į
è¯ Ĵ
éĻ Ĥ
éĻ ī
å¦ ©
å¦ ª
å¦ £
å¦ Ĺ
å¦ «
å§ Ĵ
å¦ ¤
åĬ Ń
åĪ Ń
éĤ °
çº Ń
çº °
çº ´
çİ ¡
çİ Ń
çİ ł
çİ ¢
çİ ¦
çĽ Ĥ
å¿ Ŀ
åĮ ¦
åĿ ©
æĬ ¨
æĭ ¤
åĿ «
æĭ Ī
åŀ Ĩ
æĬ »
åĬ ¼
æĭ ĥ
æĭ Ĭ
åĿ ¼
åĿ »
ã§ Ł
åĿ ¨
åĿ Ń
æĬ ¿
åĿ ³
èĭ ·
èĭ ¤
èĮ ı
èĭ «
èĭ ľ
èĭ ´
èĭ Ĵ
èĭ ĺ
èĮ Į
èĭ »
èĭ ĵ
èĮ ļ
èĮ Ĩ
èĮ ij
èĮ ĵ
èĮ Ķ
èĮ ķ
è ĮĢ
èĭ ķ
æŀ ¥
æŀ ĩ
æĿ ª
æĿ ³
æŀ §
æĿ µ
æŀ ¨
æŀ ŀ
æŀ ĭ
æĿ »
æĿ ·
æĿ ¼
çŁ ¸
ç łĢ
åĪ ³
å¥ Ħ
æ® ģ
éĥ ı
è½ Ń
éĥ ħ
é¸ ¢
çĽ ±
æĺ Ļ
æĿ ²
æĺ ĥ
åĴ Ĥ
åij ¸
æĺ Ģ
æĹ »
æĺ ī
çĤ ħ
çķ Ģ
èĻ ®
åĴ Ģ
åij ·
é» ¾
åij ±
åij ¤
åĴ Ĩ
åĴ Ľ
åij ¶
åij £
åĴ Ŀ
å² ¢
å² ¿
å² ¬
å² «
å¸ Ļ
å² £
å³ ģ
åĪ ¿
å² ·
åī Ģ
å¸ Ķ
å³ Ħ
æ² ĵ
åĽ ¹
ç½ Ķ
éĴ į
éĴ İ
éĴ ı
éĴ Ĵ
éĴ ķ
éĤ ¾
è¿ ®
çī ¦
ç« º
è¿ ¤
ä½ ¶
ä¾ ij
ä¾ ī
èĩ ¾
ä¾ Ĺ
ä¾ ı
ä¾ ©
ä½ »
ä½ ¾
ä¾ ª
ä½ ¼
ä½ ¯
ä¾ ¬
å¸ Ľ
ä¾ Ķ
å¾ Ĥ
åĪ ½
éĥ Ħ
ç± ´
çĵ ®
æĪ Ĺ
èĤ ¼
äı Ŀ
èĤ ±
èĤ «
è¿ ©
éĥ ĩ
çĭ İ
çĭ į
çĭ Ĵ
åĴ İ
é¥ ¯
é¥ ´
åĨ ½
åĨ ¼
åº ĸ
çĸ ł
çĸ Ŀ
åħ ĸ
åĬ ¾
ð¬ ī
ð¬ī ¼
çĤ ĺ
çĤ Ŀ
çĤ Ķ
æ³ Ķ
æ² Ń
æ³ ·
æ³ ±
æ³ ħ
æ³ ł
æ³ º
æ³ ĸ
æ³ «
æ³ ®
æ² ±
æ³ ¯
æĢ Ļ
æĢ µ
æĢ ¦
æĢ Ľ
æĢ ı
æĢ į
ã ¤
㤠ĺ
æĢ ©
æĢ «
æĢ ¿
å® ķ
ç© ¹
å® ĵ
è¯ ĵ
è¯ Ķ
è¯ ĸ
è¯ ĺ
æĪ ¾
è¯ Ļ
æĪ ½
éĥ ĵ
è¡ ©
ç¥ Ĩ
ç¥ İ
ç¥ ĩ
è¯ ľ
è¯ Ł
è¯ £
è¯ ¤
è¯ §
è¯ ¨
æĪ ķ
éĻ Ķ
å¦ ²
å¦ ¯
å§ Ĺ
å¸ ij
åŃ ¥
é© ½
èĻ ±
è¿ ¨
ç» Ģ
ç» ģ
ç» Ĥ
é© ·
é© ¸
ç» ī
ç» Į
éª Ģ
çĶ ¾
çı ı
çı IJ
çı ij
çİ ³
é¡ ¸
çı ī
çı Ī
æĭ ®
åŀ Ń
æĮ Ŀ
æĮ ŀ
åŀ ¤
èµ ³
è´ ²
åŀ ±
åŀ Į
åŀ §
åŀ ĵ
æĮ ¦
åŀ ł
èį ļ
èį ij
è´ ³
èį ľ
èİ Ĵ
èĮ ¼
èĮ ´
èĮ ±
èİ Ľ
èį ŀ
èĮ ¯
èį ı
èį ĩ
èį ĥ
èį ł
èĮ Ń
åŀ ©
èį ¥
èį ¦
èį ¨
èį ©
åī ĭ
èį ª
èį ¬
èį ®
æŁ °
æł ī
æŁ ĺ
æł Ĭ
æŁ ©
æŀ °
æł Į
æŁ Ļ
æŀ µ
æŀ ³
æŁ ŀ
æŁ Ŀ
æł Ģ
æŁ ¢
æł İ
æŁ Ī
æŁ ģ
æŀ ·
æŁ ½
åī Į
éħ Ĭ
éĥ ¦
çĶ Ń
çł Ĺ
çł ĺ
çł Ĵ
æĸ «
çł Ń
çł ľ
èĢ ·
èĻ º
æ® Ĥ
æ® ĩ
æ® Ħ
è½ ±
è½ ²
è½ ³
è½ ¶
è½ ¸
èĻ ¿
æ¯ ĸ
è§ ĩ
å° ľ
åĵ IJ
çľ Ħ
çľ į
ðł ³
ðł³ IJ
éĥ ¢
çľ ĩ
çľ Ĭ
çľ Ī
ç¦ º
åĵ Ĥ
åĴ ´
æĽ ·
æĺ ´
åĴ ¦
åĵ ĵ
åĵ Ķ
çķ İ
åij ²
èĥ Ħ
çķ ĭ
çķ Ī
èĻ ¼
èĻ »
çĽ ħ
åĴ £
åĵ ķ
åī IJ
éĥ §
åĴ »
åĽ ¿
åĴ ¿
åĵ Į
åĵ Ļ
åĵ ļ
åĴ ©
åĴ ¤
åĵ Ŀ
åĵ ı
åĵ ŀ
å³ £
ç½ ĺ
å³ Ĵ
å³ ¤
å³ ĭ
è´ ¶
éĴ ļ
éĴ ¡
éĴ £
éĴ ¤
éĴ «
æ° ¡
çī ¯
éĥ ľ
ç§ ķ
ç§ Ń
ç« ½
ç¬ Ī
ä¿ ¦
ä¿ ¨
ä¿ ħ
åı Ł
åŀ ¡
çī ®
ä¿ £
ä¿ ļ
çļ Ī
ä¿ Ł
éĢ ħ
å¾ ĩ
å¾ ī
èĪ ¢
éĥ Ĺ
ä¿ İ
éĥ ¤
çĪ °
éĥ Ľ
çĵ ´
èĥ ¨
èĥ ª
èĥ Ľ
èĥ Ĥ
èĥ Ļ
èĥ į
èĥ Ĺ
è ĥĿ
æľ IJ
èĥ «
é¸ ¨
åĮ į
çĭ ¨
çĭ ¯
é£ ij
çĭ ©
çĭ ²
è¨ ĩ
éĢ Ħ
æĺ Ŀ
é¥ ·
é¥ ¸
é¥ ¹
åŃ ª
å¨ Ī
åº ¥
çĸ ¬
çĸ £
çĸ ¥
çĸ Ń
åº ł
ç« ij
é£ Ĵ
éĹ ¼
éĹ ¾
éĹ ¿
éĺ Ĥ
ç¾ ij
è¿ ¸
ç± ¼
éħ ĭ
çĤ »
çĥ Ģ
çĤ ·
æ´ ±
æ´ ¹
æ´ §
æ´ Į
æµ ĥ
æ´ ĩ
æ´ Ħ
æ´ Ļ
æ¶ İ
æ´ İ
æ´ «
æµ į
æ´ ®
æ´ µ
æµ Ĵ
æµ Ķ
æµ ķ
æ´ ³
æģ ¸
æģ ĵ
æģ ¹
æģ «
æģ »
æģ Ĥ
æģ ª
æģ ½
å® ¥
æī ĥ
è¡ ²
è¡ ½
è¡ ¿
è¢ Ĥ
ç¥ ľ
ç¥ ĵ
ç¥ ļ
è¯ ®
ç¥ Ĺ
ç¥ ¢
è¯ °
è¯ ³
é¸ ©
æĺ ¶
åĴ «
å¼ Ń
çī ģ
èĥ ¥
éĻ Ł
å§ ®
å¨ Ĩ
å§ Ŀ
å§ £
å§ ĺ
å§ ¹
ç¾ ¿
çĤ ±
çŁ ľ
ç» Ķ
éª ģ
éª ħ
ç» Ĺ
ç» Ľ
éª Ī
èĢ ĸ
æĮ Ī
çı ¥
çı Ļ
é¡ ¼
çı °
çı ©
çı §
çı £
çı ŀ
çIJ ¤
çı ²
æģ ļ
åŁ ķ
åŁ ĺ
åŁ Ļ
åŁ ļ
æĮ ¹
èĢ Ĩ
èĢ Ħ
åŁ Ĵ
æį ĭ
è´ ½
åŀ ¸
æį ĥ
çĽ į
èį ¸
èİ ³
èİ ´
èİ ª
èİ ł
èİ ľ
èİ ħ
èį ¼
èİ ©
èį ½
èİ ¸
èį »
èİ ¨
é¸ ª
èİ ¼
æł ²
æł ³
æ¡ ¡
æ¡ İ
æ¡ ¢
æ¡ ¤
æ¢ ĥ
æł Ŀ
æ¡ ķ
æ¡ ģ
æ¡ §
æ¡ ħ
æł Ł
æ¡ ī
æł ©
éĢ ij
éĢ ĭ
å½ §
é¬ ²
è± ĩ
éħ IJ
éĢ ¦
åİ Ŀ
åŃ ¬
çł Ŀ
çł ¹
çł §
çł ·
çł Ł
çł ¼
çł ¥
çł £
åī ŀ
çł »
è½ ¼
è½ ¾
è¾ Ĥ
é¸ «
è¶ ¸
é¾ Ģ
é¸ ¬
èĻ Ķ
çľ ¬
åĶ Ľ
çľ Ļ
åĵ §
åĵ ½
æĻ ģ
é¸ ®
è¶ µ
è¶ ¿
çķ Ľ
èļ ¨
èļ ľ
èļ į
èļ ĭ
èļ ¬
èļ Ŀ
èļ §
åĶ ¢
åľ Ħ
åĶ £
åĶ ı
çĽ İ
åĶ ij
å´ Ĥ
å´ ĥ
ç½ ¡
ç½ Ł
è§ Ĭ
èµ ħ
éĴ ²
éĴ µ
éĴ ¹
éĴ º
éĴ ½
éĴ ¼
éĴ ¿
éĵ Ģ
éĵ Ħ
éĵ Ĩ
éĵ Ī
éĵ ī
éĵ Ĭ
éĵ ĭ
éĵ Į
é ĵį
ä ¥
ä¥ ½
éĵ İ
æ° ©
æ° ¤
æ° ¦
æ¯ ª
èĪ IJ
ç§ £
ç§ «
çĽ ī
ç¬ Ħ
ç¬ ķ
ç¬ Ĭ
ç¬ ı
ç¬ Ĩ
ä¿ ¸
ä¿ µ
åģ Į
ä¿ ³
ä¿ ¶
åĢ ¬
åĢ ı
æģ ģ
åĢ Ń
ä¿ ¾
åĢ ľ
éļ ¼
éļ ½
åĢ Į
åĢ ¥
èĩ ¬
éĥ «
åĢ ¨
è¡ Ħ
é¢ Ģ
å¾ ķ
èĪ «
è¡ ¾
èĥ ¯
èĥ ±
èĥ ´
èĥ Ń
èĦ į
èĥ ¼
èĦ Ĵ
é¸ ±
é¸ ²
çĭ ·
çĮ ģ
çĭ ³
çĮ ĥ
çĭ º
éĢ ĸ
æ¡ Ģ
é¥ ½
åĩ ĩ
æĮ Ľ
äº ³
çĸ ³
çĸ ´
çĸ ¸
çĸ ½
çĹ Ī
çĸ ±
çĹ Ĥ
çĹ ī
è¡ ®
é¢ ĥ
æģ £
æĹ Ĩ
æĹ Ħ
æĹ ĥ
éĺ ĥ
éĺ Ħ
è¨ ļ
éĺ Ĩ
æģ Ļ
ç² ij
çĥ ľ
çĥ ©
çĥ Ĭ
åī ¡
éĥ ¯
çĥ ¬
æ¶ ij
æµ ¯
æ¶ ŀ
æ¶ Ł
å¨ ij
æ¶ ł
æµ ŀ
æ¶ ĵ
æµ ¥
æ¶ Ķ
æµ ľ
æµ ł
æµ £
æĤ ļ
æ ĤŃ
æĤ Ŀ
æĤ Ĵ
æĤ Į
æĤ Ľ
çª Ī
åī ľ
è¯ ¹
è¯ ¼
è¢ Ĵ
è¢ ¢
è¯ ¿
è° Ģ
è° Ĥ
è° Ħ
è° ĩ
å± IJ
å± Ļ
éĻ ¬
åĭ IJ
å¥ ĺ
çī Ĥ
èļ ©
éĻ ²
å¨ Į
å¨ ī
å¨ ²
å¨ ´
å¨ £
å¨ ĵ
å© Ģ
çķ ļ
éĢ ¡
ç» ł
éª Ĭ
ç» ¡
éª ĭ
ç» ¦
ç» ¨
éª İ
éĤ ķ
é¸ ¶
å½ Ĺ
èĢ ľ
çĦ ĺ
èĪ Ĥ
çIJ ı
çIJ ĩ
éº ¸
æı ¶
åŁ ´
åŁ ¯
æį ¯
æİ ³
æİ ´
åŁ ¸
åŁ µ
èµ §
åŁ ¤
æį Ń
éĢ µ
åŁ Ŀ
åł ĭ
åł į
æİ ¬
é¸ ·
æį ½
æİ Ĭ
åł ī
æİ ¸
æį ©
æİ ®
æĤ «
åŁ Ń
åŁ ½
æİ ĩ
æİ ¼
èģ ĥ
èIJ ģ
èı ĺ
åł ĩ
èIJ ĺ
èIJ ĭ
èı ½
èı ĸ
è IJľ
èIJ ¸
èIJ ij
æ£ »
èı Ķ
èı Ł
èIJ ı
èı ¹
èı ª
èı ħ
èı Ģ
èı °
èı ¡
æ¢ ¿
æ¢ ı
è§ ĭ
æ¡ ´
æ¡ ·
æ£ ģ
æ¡ «
æ£ Ĥ
åķ ¬
éĥ ¾
æķ ķ
è± ī
éĦ Ħ
éħ ŀ
ç¡ İ
ç¡ Ń
ç¡ ĸ
ç¡ Ĺ
ç¡ IJ
ç¡ ĩ
ç¡ Į
é¸ ¸
çĵ ł
åĮ ı
åİ ©
æ® Ĵ
æ® ĵ
æ® į
èµ ī
éĽ ©
è¾ Ħ
åł ij
çľ Ń
çľ ¦
åķ §
æĻ ¡
æĻ ¤
çľ µ
åľ Ĭ
åĸ ı
åķ ī
åĭ ĸ
æĻ ŀ
åĶ µ
æĻ Ĺ
åķ Ń
çķ ¦
è¶ º
åķ ®
è· Ħ
èļ ¶
è ĽĦ
èĽ İ
èĽ Ĩ
èļ °
åľ ī
èļ ±
èĽ ī
èĽ ı
èļ ´
åķ ģ
åķ ķ
åĶ ¿
åķ IJ
åĶ ¼
åĶ ·
åķ ĸ
åķ µ
åķ ¶
åķ ·
åĶ ³
åĶ °
åķ ľ
å¸ »
å´ ļ
å´ ¦
å¸ ¼
å´ ®
å´ ¤
å´ Ĩ
èµ ĩ
èµ Ī
èµ Ĭ
éĵ ij
éĵ Ĵ
éĵ Ĺ
éĵ Ļ
éĵ Ł
éĵ ¡
éĵ ¢
éĵ £
éĵ ¤
éĵ §
éĵ ¨
éĵ ©
éĵ ª
éĵ «
éĵ ¯
éĵ °
éĵ ±
éĵ ³
éĵ µ
éĵ ·
çī ¾
é¸ ¹
ç§ ¾
éĢ ¶
ç¬ º
çŃ ĩ
ç¬ ¸
ç¬ ª
ç¬ ®
ç¬ ł
ç¬ ¥
ç¬ ¤
ç¬ ³
ç¬ ¾
ç¬ ŀ
åģ ¾
åģ ĥ
åģ ķ
åģ Ī
åĤ Ģ
åģ ¬
åģ »
çļ ij
çļ İ
é¸ »
å¾ ľ
èĪ ¸
èĪ »
èĪ ´
èĪ ·
é¾ Ľ
ç¿ İ
èĦ ¬
èĦ ĺ
èĦ ²
åĮ IJ
çĮ Ĺ
çĮ ¡
çĮ ŀ
æĸ Ľ
çĮ ķ
é¦ Ĺ
é¦ ĥ
é¦ Ħ
é¸ ¾
åº ¹
åº ¾
çĹ Ķ
çĹ į
ç¿ Ĭ
æĹ Į
æĹ İ
è¢ ¤
éĺ ĩ
éĺ Ī
éĺ ī
éĺ Ĭ
éĺ ĭ
éĺ į
éĺ ı
ç¾ Ł
ç² Ŀ
çĦ IJ
çĦ ĵ
çĦ Ĺ
æ· ħ
æ· ŀ
æ¸ İ
æ¶ ¿
æ· ĸ
æĮ ²
æ· ł
æ¶ ¸
æ¸ ij
æ· ¦
æ· Ŀ
æ¶ ª
æ· Ļ
æ¶ «
æ¸ Į
æĤ »
æĤ ±
æ ĥĿ
æĥ ĺ
æĥ Ĩ
æĥ ļ
æĥ ĩ
æĥ ®
çª ķ
è° Į
æī Ī
çļ ²
è° ij
è£ Ĩ
è¢ ·
è£ ī
è° Ĵ
è° Ķ
è° ķ
è° ĸ
è° Ĺ
è° Ļ
è° Ŀ
éĢ ¯
éĥ ¿
éļ Ī
ç² ľ
éļ į
éļ Ĺ
å© Ĭ
å¨ ¼
å© ¢
å© µ
èĥ ¬
è¢ Ī
ç¿ Į
æģ ¿
æ¬ ¸
ç» «
éª IJ
ç» ¯
ç» ±
éª Ĵ
ç» ²
éª ĵ
ç» ¶
ç» º
ç» »
ç» ¾
éª ĸ
ç¼ ģ
èĢ ł
çIJ «
çIJ µ
çIJ ¶
çIJ ¥
çIJ ¨
çIJ °
çIJ ®
çIJ ¯
çIJ ¬
çIJ ļ
è¾ ĩ
é¼ ĭ
æı ³
åł ŀ
æIJ ½
æı ¸
æı ł
åł Ļ
è¶ Ħ
æı ĸ
é¢ ī
å¡ Ħ
æı ¿
èĢ ĭ
æı Ħ
èĽ ©
èĽ °
å¡ Ĩ
æij Ĵ
æı Ĩ
æİ ¾
èģ Ĵ
èij ij
èij ļ
éĿ °
éĿ ¸
èij ³
èij º
èij ¸
èIJ ¼
èij ¶
è ĴĮ
èij Ń
æ¥ ®
æ £¼
æ¤ Ł
æ£ ¹
æ¤ ¤
æ£ °
èµ į
æ¤ ĭ
æ¤ ģ
æ¤ ª
æ¤ IJ
é¹ ģ
éħ ¤
éħ ¢
éħ ¡
é¹ Ĥ
æ® ļ
æ® Ľ
éĽ ±
è¾ ĭ
æ¤ ł
è¾ İ
çĿ Ħ
çĿ ĩ
çĿ ĥ
æĪ ¢
åĸ ĭ
åĹ Ĵ
åĸ ĥ
åĸ ±
åĸ ¹
æĻ ·
åĸ Ī
è· ĸ
è· Ĺ
è· ŀ
è· ļ
è· İ
è· ı
è· Ĩ
èĽ ±
èĽ ²
èĽ Ń
èĽ ³
èĽ IJ
èĽ Ķ
èĽ ŀ
èĽ ´
èĽ ĺ
åĸ ģ
åĸ Ł
åķ ¾
åĹ ĸ
åĸ ij
åĹ Ł
åĹ ŀ
åĸ Ļ
åµ ĺ
åµ ĸ
å´ ´
éģ Ħ
è© Ī
åµ İ
å µ¬
åµ Ľ
åµ ¯
åµ Ŀ
åµ «
å¹ Ħ
åµ ĭ
èµ ķ
éĵ »
éĵ ¼
éĵ ¿
éĶ ĥ
éĶ Ĩ
éĶ ĩ
éĶ ī
éĶ ı
éĶ ij
éĶ Ĵ
éĶ Ķ
éĶ ķ
æİ £
çŁ ¬
æ° °
æ¯ ³
æ¯ ½
çĬ Ĭ
çĬ Ħ
çĬ ĭ
é ¹Ħ
çĬ į
åµ ĩ
é» į
ç¨ ĥ
ç¨ Ĥ
çŃ ļ
çŃ µ
çŃ Į
åĤ £
åĤ Ī
èĪ Ħ
çī į
åĤ ¥
åĤ §
éģ ij
åĤ ©
å¾ ¨
åª Ń
çķ ²
å¼ ij
ç¿ ķ
é¹ Ĩ
èħ Ī
èħ ĵ
èħ Ĩ
èħ ´
èħ ļ
èħ ±
é± ¿
é² Ģ
é² Ĥ
çĮ ¢
çĮ ¹
çĮ ¥
é£ ĵ
è§ ŀ
è§ ļ
çĮ ±
é¢ İ
é£ §
é¦ ĩ
é¦ Ĭ
äº µ
èĦ Ķ
è£ Ĵ
çĹ £
çĹ ¨
çĹ ¦
çĹ ŀ
çĹ ¤
çĹ §
èµ ĵ
ç« ¦
çĵ ¿
åķ »
é¢ ı
é¹ ĩ
éĺ ij
éĺ Ĵ
éĺ ķ
ç² ŀ
éģ Ĵ
åŃ ³
çĦ ¯
çĦ ľ
çĦ ±
é¹ Ī
æ¸ «
æ¹ ®
æ¹ İ
æ¹ ľ
æ¹ į
æ¹ «
æº ²
æ¹ Ł
æº Ĩ
æ¹ ²
æ¹ Ķ
æ¹ ī
æ¸ ¥
æ» ģ
æĦ ł
æĥ º
æĦ ¦
æĥ ´
æĦ Ģ
æĦ İ
æĦ Ķ
åĸ ¾
å¯ IJ
è° Ł
è£ ¢
è£ İ
è£ ¥
ç¥ ¾
è° ł
è° ¡
è° ¥
è° §
åŃ ±
å¼ ¼
å· ½
éª ĺ
åª ª
å· ¯
ç¿ ļ
çļ ´
éª Ľ
ç¼ Ĥ
ç¼ ĥ
ç¼ Ħ
å½ ĺ
ç¼ ĩ
ç¼ Ī
ç¼ Į
ç¼ ij
ç¼ Ĵ
ç¼ Ĺ
é£ ¨
èĢ ¢
çij ģ
çij Ĺ
çij Ħ
éģ ¨
éª ľ
éŁ «
é« ¡
å¡ ¬
éĦ ¢
è¶ Ķ
è¶ ij
æij ħ
æij ģ
èľ ĩ
æIJ ĭ
æIJ ª
æIJ IJ
æIJ Ľ
æIJ ł
æij Ī
å½ Ģ
æ¯ Ĥ
æIJ ¦
æIJ ¡
èĵ ģ
æĪ ¡
è ĵį
éĦ ŀ
èĵ IJ
èĵ ¦
é¹ ĭ
èĴ ½
èĵ ĸ
èĵ Ĭ
èĴ ¯
èĵ Ł
èĵ ij
èĴ º
èĵ ł
èĴ Ł
èĴ ¡
èĴ ¹
èĴ ´
èĴ Ĺ
èĵ ¥
æ¥ Ķ
æ¥ Ĥ
æ¥ Ŀ
æ¥ «
æ¥ ¸
æ¤ ´
æ§ Į
æ¥ ¯
çļ Ļ
æ¦ Ī
æ§ İ
æ¦ ī
æ¥ ¦
æ¥ £
æ¥ ¹
æ¤ ½
åī ½
éħ ©
èľ ĥ
ç¢ Ľ
ç¢ ĵ
ç¡ ¼
ç¢ ī
ç¢ ļ
ç¢ ĩ
ç¢ ľ
é¹ Į
è¾ ı
é¾ ĥ
é¾ ħ
è¨ ¾
ç² ²
çĿ ļ
åĹ ª
éŁ ª
åĹ ·
åĹ ī
çĿ ¨
çĿ ¢
éĽ İ
çĿ ¥
åĹ ij
åĹ «
åĹ ¬
åĹ Ķ
åĹ Ŀ
æĪ ¥
åĹ Ħ
çħ ¦
æļ Ħ
éģ ¢
æ ļĮ
è· ¬
è· ¶
è ·¸
è· IJ
è· £
è· ¹
èĽ ¸
èľ Ĭ
èľ į
èľ ī
èľ £
çķ ¹
èĽ ¹
åĹ ¥
åĹ ²
åĹ ³
åĹ Į
åĹ į
åĹ IJ
åĹ ¤
åĹ µ
ç½ ¨
åµ Ĭ
åµ ´
éª °
éĶ Ĺ
éĶ Ľ
éĶ ľ
éĶ Ŀ
éĶ ŀ
éĶ Ł
éĶ ¢
éĶ ¨
éĶ ©
éĶ Ń
éĶ ±
éĽ ī
æ° ²
çĬ ı
æŃ ĥ
ç¨ ŀ
ç¨ Ĺ
ç¨ Ķ
çŃ ł
çŃ ¢
çŃ ®
çŃ ²
çī Ĵ
æķ «
å¾ Ń
æĦ Ĩ
èī Ħ
è§ İ
æ¯ ¹
è² Ĭ
è² ħ
è² ī
é¢ Ķ
èħ ł
èħ ©
èħ ¼
èħ Ń
è ħ§
å¡ į
åª µ
é² ħ
é² Ĩ
é² ĩ
é² Ī
é² ĭ
é² IJ
èĤ Ħ
é¹ IJ
é£ ķ
è§ ¥
éģ Ľ
é¦ IJ
é¹ ij
äº ¶
çĺ ĥ
çĹ ±
çĹ ¼
çĹ ¿
çĺ IJ
çĺ ģ
çĺ Ĩ
éº Ĥ
æŃ Ĩ
æĹ Ĵ
éĺ ĸ
éĺ Ĺ
ç¾ §
è± ¢
ç² ³
çĮ ·
çħ ³
çħ ¨
çħ ħ
çħ Ĭ
çħ ¸
çħ º
æ» Ł
æº ±
æº ĺ
æ¼ Ń
æ» ¢
æº ¥
æº ½
è£ Ł
æº »
æº ·
æ» Ĺ
æ» «
æº ´
æ» ı
æ» ĥ
æ» ¦
æº ı
æ» Ĥ
æ» ĵ
æº Ł
æ» ª
æĦ «
æħ Ĭ
é² İ
éª ŀ
çª ł
çª £
è£ ±
è£ ¨
è£ ¾
è£ °
ç¦ Ĭ
è° ©
è° ª
åª ¾
å« «
åª ²
å« Ĵ
å« Ķ
åª ¸
ç¼ Ļ
ç¼ ľ
ç¼ Ľ
è¾ Ķ
éª Ŀ
ç¼ Ł
ç¼ ¡
ç¼ ¢
ç¼ £
éª Ł
èĢ ¥
çĴ Ī
çij Ń
çį Ĵ
è§ ı
æħ Ŀ
å« ł
åı Ĩ
æij ½
å¢ ģ
æĴ Ĥ
æij ŀ
æĴ Ħ
ç¿ ¥
è¸ ħ
æij Ń
å¢ ī
å¢ Ĵ
æ¦ ĸ
ç¶ ¦
èĶ «
èĶ ·
éĿ º
éĿ ¼
éŀ ħ
éĿ ¿
çĶ į
èĶ ¸
èĶ Ł
èĶ º
æĪ ¬
èķ ĸ
èĶ »
èĵ ¿
æĸ ¡
é¹ ķ
èĵ ¼
æ¦ Ľ
æ¦ §
æ¦ «
æ¦ Ń
æ§ Ķ
æ¦ ±
æ§ ģ
æ§ ł
æ¦ ·
åĥ °
éħ ½
éħ ¹
ç¢ ¡
ç¢ ´
ç¢ £
ç¢ ²
èĩ §
è± ¨
æ® ¡
éľ ģ
èľ ļ
é¾ ĩ
é¾ Ī
ä ģ
äģ ĸ
çĿ ½
åĺ ŀ
åĺ Ī
åĺ Į
åĺ ģ
æļ Ŀ
è¸ Į
è¸ ī
èľ ŀ
èľ ¥
èľ ®
èĿ Ī
èľ ´
èľ ±
èľ ©
èľ ·
èľ ¿
èŀ Ĥ
èľ ¢
åĺ ¡
é¹ Ĺ
åĺ £
åĺ ¤
åĺ ļ
åĹ ¾
åĺ §
ç½ ´
ç½ ±
å¹ Ķ
å¶ Ĥ
å¹ Ľ
èµ Ļ
ç½ Ĥ
éª ·
éª ¶
é¹ ĺ
éĶ ²
éĶ ´
éĶ ¶
éĶ ·
éĶ ¸
éĶ µ
éķ Ĥ
çĬ Ĵ
ç® IJ
ç® ¦
ç® §
ç® ¸
ç® ¬
ç® ħ
ç® ª
ç® ľ
ç® ¢
ç® ĵ
åĥ ĸ
åĦ Ĩ
åĥ ³
åĥ Ń
åĬ ģ
åĥ ®
éŃ ĥ
éŃ Ĩ
çĿ ¾
èī ĭ
éĦ ±
èĨ Ī
èĨ ij
é² ij
é² Ķ
é² ļ
é² Ľ
é² Ł
çį IJ
è§ «
éĽ Ĵ
å¤ ¤
é¦ ij
éĬ ®
å¡ ¾
çĺ Į
çĺ Ĭ
çĺ ĺ
çĺ Ļ
æĹ ĸ
èĨ Ĥ
éĺ ļ
éĦ ¯
é² ŀ
ç² ¿
ç² ¼
ç³ ģ
æ§ Ĭ
é¹ ļ
çĨ ĺ
çĨ ¥
æ½ ¢
æ¼ ķ
æ» ¹
æ¼ ¯
æ¼ ¶
æ½ ĭ
æ½ ´
æ¼ ª
æ¼ ī
æ¼ ©
æ¾ ī
æħ µ
æIJ ´
çª ¨
å¯ ¤
ç¶ ®
è° ®
è¤ ¡
è¤ Ļ
è¤ ĵ
è¤ Ľ
è¤ Ĭ
è° ¯
è° °
è° ²
å± £
é¹ Ľ
å« ±
å« ĸ
å« ¦
å« ļ
å «ĺ
é¼ IJ
çŀ Ģ
é¹ ľ
éª ł
ç¼ ¥
ç¼ ¦
ç¼ §
ç¼ ¨
éª ¢
ç¼ «
èĢ ¦
èĢ §
çĴ ľ
çĴ İ
çĴ ģ
å¥ Ń
é« ¯
é« «
æĴ ·
æĴ ħ
èµ Ń
æĴ ¸
éĭ Ĩ
æĴ Ļ
æĴ º
å¢ Ģ
èģ ©
è§ IJ
éŀ ij
èķ Ļ
éŀ Ĵ
èķ Ī
èķ ¨
èķ ¤
èķ ŀ
èķ º
çŀ ¢
èķ ĥ
èķ ²
èµ ľ
æ§ ¿
æ¨ ¯
æ§ Ń
æ¨ Ĺ
æ¨ ĺ
æ§ ²
éĨ Į
éĨ ħ
éĿ ¥
éŃ ĩ
é¤ į
ç£ Ķ
ç£ Ļ
éľ Ī
è¾ ĺ
é¾ ī
é¾ Ĭ
è§ ij
çŀ Į
ç ŀĭ
çŀ ij
åĺ Ń
åĻ İ
åĻ ¶
é¢ Ļ
æļ ¹
åĻ ĺ
è¸ Ķ
è¸ Ŀ
è¸ Ł
è¸ Ĵ
è¸ ¬
è¸ ®
è¸ ¯
è¸ º
è¸ ŀ
èĿ ½
èĿ ¾
èĿ »
èĿ °
èĿ ®
è ŀĭ
èĿ ĵ
èĿ £
è Ŀ¼
åĺ ¬
é¢ ļ
åĻ į
åĻ Ļ
åĻ Į
åĻ Ķ
é¢ Ľ
å¹ ŀ
å¹ ¡
å¶ Ļ
å¶ Ŀ
éª º
éķ Ĭ
éķ ī
éķ Į
éķ ı
éķ Ĵ
éķ ĵ
éķ Ķ
ç¨ ·
ç® ´
ç¯ ij
ç¯ ģ
ç¯ Į
çī ĸ
åĦ ĭ
èĻ ¢
é¹ ŀ
èĨ ĺ
é² ł
é² ¡
é² ¢
é² £
é² ¥
é² §
é² ©
çį Ĺ
çį ł
è§ ¯
é¦ ĵ
é¦ Ķ
éº ¾
å» Ľ
çĺ Ľ
çĺ ¼
çĺ ¢
çĺ ł
é½ ij
ç¾ °
𥠻
𥻠Ĺ
ç³ Į
ç³ į
ç³ ħ
çĨ ľ
ç Ĩµ
æ¾ į
æ¾ Į
æ½ ¸
æ½ ¦
æ½ ²
éĭ Ī
æ½ Ł
æ½ º
å¯ ®
çª ³
è° ³
è¤ ´
è¤ Ł
è¤ «
è° µ
çĨ ¨
å± ¦
åĭ °
æĪ ®
èĿ ¥
ç¼ ¬
ç¼ ®
ç¼ ¯
éª £
çķ ¿
èĢ ©
èĢ ¨
èĢ ª
çĴ Ł
éĿ Ľ
çĴ ł
çĴ ĺ
èģ ±
èŀ ¯
é« »
é« Ń
é« ¹
æĵ Ģ
çĶ ı
æĵ ŀ
ç¸ ł
ç£ ¬
é¢ ŀ
èķ »
é¢ Ł
èĸ ¤
èĸ ¨
æª ł
èĸ ı
èĸ ®
èĸ ľ
èĸ ħ
æ¨ ¾
æ© Ľ
æ© ĩ
æ¨ µ
æª İ
æ© ¹
æ¨ ½
æ¨ ¨
æ© ¼
å¢ ¼
æ© IJ
ç¿ ®
éĨ IJ
éĨ į
éĨ ļ
ç£ ²
èµ Ŀ
æ® ª
éľ ı
éĮ ¾
è¾ ļ
éģ ½
æ° ħ
çŀ Ł
çŀ ł
çŀ °
åļ Ħ
åļ Ĩ
åĻ ¤
æļ ¾
è¹ Ģ
è¸ µ
è¸ ½
è¹ ī
è¹ ģ
èŀ ¨
èŀ Ī
èŀ ħ
èŀ Ń
èŀ ł
èŀ Ł
åĻ ±
åĻ «
åĻ »
åĻ ¼
ç½ ¹
åľ ľ
ä ¦
ä¦ ĥ
éķ Ĺ
éķ ĺ
éķ ļ
éķ Ľ
éķ Ŀ
éķ ŀ
éķ ł
æ° ĩ
æ° Ĩ
ç© ij
ç¯ Ŀ
ç¯ ¥
ç¯ ¦
ç¯ ª
ç¯ Ļ
çĽ ¥
åĬ ĵ
ç¿ ±
éŃ ī
éŃ Ī
å¾ ¼
æŃ Ļ
èĨ ¦
èĨ Ļ
é² ®
é² ±
é² ³
é² ´
é² µ
é² ·
é² »
çį ´
çį Ń
çį ¬
éĤ Ĥ
é¹ §
å» ¨
èµ Ł
çĺ °
å» ª
çĺ ¿
çĺ µ
çĺ ´
çĻ ĥ
çĺ ³
éº ĩ
éº Ī
å ¬´
å£ ħ
ç³ Ĺ
çĶ ij
çĩ İ
çĩ ł
çĩ Ķ
çĩ §
æ¿ ij
æ¿ ī
æ½ ŀ
æ¾ §
æ¾ ¹
æ¾ ¥
æ¾ ¶
æ¿ Ĥ
è¤ °
çª ¸
å¬ ĸ
çĬ Ł
éļ °
å¬ Ĺ
é¢ ¡
ç¼ ±
ç¼ ²
ç¼ ³
çĴ ©
çĴ ª
èŀ «
æĵ ¤
å£ ķ
è§ ³
ç½ Ħ
æĵ ¢
èĸ ¹
éŀ ¡
éŀ ¬
èĸ ·
èĹ ĵ
èĹ ģ
æª Ħ
æª ©
æĩ ĭ
éĨ ¢
ç¿ ³
ç¤ ħ
ç£ ´
é¹ ©
é¾ ĭ
é¾ Į
è± ³
å£ ij
é» »
åļ ı
åļ ħ
è¹ ij
è¹ Ĵ
è¹ Ĭ
è Ł¥
èŀ ¬
èŀ µ
çĸ ĥ
èŀ ³
èŁ ij
åļ ĵ
ç½ ½
ç½ ¾
å¶ ·
é» ľ
é» Ŀ
é« ģ
é« Ģ
éķ ¡
éķ ¢
éķ £
éķ ¦
éķ §
éķ ©
éķ ª
éķ «
ç½ ħ
ç° Į
ç¯ ¾
ç¯ ¼
ç° ĸ
ç° ĭ
é¼ ¢
åĦ ¡
é¹ ª
é¼ ¾
çļ ¤
éŃ į
é¾ ł
ç¹ ĩ
è² ĺ
éĤ Ī
è² Ķ
èĩ Į
èĨ »
èĩ Ĩ
èĩ ĥ
é² ¼
é² ½
é³ Ģ
é³ ĥ
é³ ħ
é³ ĩ
é³ Ĭ
èŀ ½
çĩ ®
é¹ «
ç³ ľ
ç¸ »
çĻ į
éº ĭ
æĩ ij
æ¿ ¡
æ¿ ®
æ¿ ŀ
æ¿ ł
æ¿ ¯
è¹ ĩ
è¬ ĩ
éĤ ĥ
è¥ ģ
æª Ĺ
æ ĵĺ
åŃ º
éļ ³
å¬ ·
èŁ Ĭ
é¹ ¬
éį ª
éı Ĭ
é¬ Ī
é¬ ĥ
çŀ ½
éŀ ¯
éŀ ¨
éŀ «
éŀ §
éŀ £
èĹ ľ
èĹ ł
éĨ ª
è¹ Ļ
ç¤ ĵ
çĩ ¹
é¤ ®
çŀ ¿
æĽ Ľ
é¢ ¢
èº ĩ
è¹ ļ
èŁ Ľ
èŁ ª
èŁ ł
èŁ ®
é¹ ®
é» ł
é» Ł
é« ħ
é« Ĥ
éķ ¬
éķ Ń
éķ ¯
é¦ ¥
ç° Ł
ç° ª
é¼ ¬
éĽ ł
èī Ł
é³ İ
é³ ı
é³ IJ
çĻ ŀ
çĻ Ķ
ç³ ¨
è¹ ©
éİ ı
éĤ ĭ
é¬ ı
æĶ ī
éŀ ²
éŀ ´
èĹ ¿
èĺ §
èĺ ħ
éĨ ®
éĨ ¯
éħ ĥ
éľ ª
éľ Ń
éľ ¨
é» ¼
åļ ¯
è¹ °
è¹ ¶
è¹ ½
è¹ ¼
è¹ ´
è¹ ¾
è¹ ¿
èł ĸ
èł ĵ
èŁ ¾
èł Ĭ
é» ¢
é« ĭ
é« Į
éķ ²
ç± Ģ
é½ ģ
éŃ ij
èī ¨
é³ ĵ
é³ Ķ
é³ ķ
é³ Ĺ
é³ Ļ
éı ĸ
ç¾ ¸
㸠Ĩ
çĢ £
çĢ Ľ
è¥ ¦
è° ¶
è¥ ŀ
éª ¥
ç¼ µ
çĵ Ĵ
æĶ ĺ
èĺ ©
èĺ ĸ
éĨ ´
éľ °
éħ Ĩ
çŁ į
èº ħ
é¼ į
å· ī
é» ©
é» ¥
é» ª
éķ ³
éķ ´
é» §
çº Ĥ
çĴ º
é¼ ¯
èĩ ľ
é³ ľ
é³ Ŀ
é³ Ł
çį ¾
åŃ Ģ
éª §
ç ĵĺ
é¼ Ļ
éĨ º
ç¤ ´
é¢ ¦
æĽ ©
é³ ¢
éº Ŀ
å¤ Ķ
çĪ Ŀ
çģ ı
ç¦ ³
éIJ ¾
ç¾ ¼
èł ¡
èĢ ±
é¹ ³
æ° į
é¥ ķ
èº IJ
é« ij
éķ µ
ç© °
é¥ Ķ
é¬ »
é¬ Ł
è¶ ±
æĶ «
æĶ ¥
é¢ §
èº ľ
é¼ ¹
çĻ ¯
èł ²
èł ¹
èº ŀ
è¡ ¢
çģ ŀ
è¥ »
çº Ľ
é¬ £
æĶ ®
åĽ Ķ
é¦ ķ
æĪ Ĩ
çĪ ¨
é½ ī
äº į
å° ¢
å½ ³
åį ¬
æ® ³
ðł ϶
æ¯ Į
éĤ ĺ
æĪ ĭ
åľ ¢
æ° ķ
ä¼ ĭ
ä» Ŀ
åĨ ®
æ° ¿
æ± Ī
æ° ¾
å¿ ī
å® Ħ
𬣠Ļ
è® ±
æī ŀ
åľ ²
åľ «
èĬ ı
èĬ ĥ
æľ ³
æľ ¸
ð¨ Ļ
ð¨Ļ ¸
éĤ ¨
åIJ Ĵ
åIJ ĸ
å± ¼
å± ¾
è¾ ¿
éĴ Ĩ
ä» ³
ä¼ £
ä¼ Ī
çĻ ¿
çĶ ª
éĤ ł
çĬ ´
åĨ ±
éĤ ¡
ð¬ĩ ķ
æ± ĭ
ä ľ
äľ £
è® »
𬣠ŀ
åŃ ĸ
ð¬ĺ ĵ
çº ©
çİ Ĵ
çİ ĵ
çİ ĺ
çİ ļ
åĪ ¬
ð«Ń Ł
åĿ ľ
åĿ ī
æī ½
ð«Ń ¢
åĿ ĭ
æī º
ã§ ij
æ¯ IJ
èĬ °
èĬ £
èĭ Ĭ
èĭ ī
èĬ ĺ
èĬ ´
èĬ ł
ð« ĩ
ð«ĩ Ń
èĬ ¤
æĿ ķ
æĿ Ļ
æĿ Ħ
æĿ §
æĿ ©
å° ª
å° ¨
è½ ª
ð«IJ Ħ
åĿ Ĵ
èĬ Ī
æĹ ´
æĹ µ
åij Ļ
ã ķ
ãķ ®
å² į
ð« µ
𫵠·
å² ł
å² ľ
åij ĩ
åĨ ı
è§ ĥ
å² Ļ
ä¼ ¾
ãij ĩ
ä¼ Ń
ä½ ĸ
ä¼ ²
ä½ ģ
é£ ı
çĭ ĥ
éĹ ¶
æ± §
æ± «
𣲠ĺ
𣲠Ĺ
æ² Ħ
æ² ĺ
ð¬ĩ Ļ
æ± Ń
ã³ ĩ
æ² ĩ
å¿ ®
å¿ ³
å¿ º
𬣠¡
ç¥ ĥ
è¯ ĩ
éĤ ²
è¯ İ
è¯ IJ
å± ĥ
ð« ¸
𫸠©
å² Ĭ
éĺ ½
ä¢ º
éĺ ¼
å¦ §
å¦ ĺ
ð¨ ļ
ð¨ļ ķ
çº ®
é© ²
ð«ĺ ľ
çº »
ð¬ĺ ĺ
ð«ĺ Ŀ
çº ¼
çİ ¤
çİ ŀ
çİ ±
çİ Ł
éĤ ½
éĤ ¿
åĿ ¥
åĿ °
åĿ ¬
åĿ ½
å¼ Ĩ
èĢ µ
ä¢ ¼
ð¦ Ń
ð¦Ń ľ
èĮ ĭ
èĭ §
èĭ ¾
èĭ ł
æŀ ħ
ãŃ İ
æŀ ĺ
æŀ į
çŁ ¼
çŁ »
åĮ ¼
𬨠Ĥ
ð¬Ģ ©
ð¬Ģ ª
æĹ ¿
æĺ Ħ
æĺ Ĵ
æĺ Ī
åĴ ī
åĴ ĩ
åĴ į
å² µ
å² ½
å² ¨
å² ŀ
å³ Ĥ
ã Ł
ãŁ ĥ
åĽ ·
𬬠©
éĴ IJ
éĴ Ķ
éĴ ĸ
çī ¥
ä½ ´
åŀ Ī
ä¾ ģ
ä¾ ¹
ä½ ¸
ä½ º
éļ ¹
ãij Ĭ
ä¾ Ĥ
ä½ ½
ä¾ ĺ
éĥ Ī
èĪ ł
éĥ IJ
éĥ ĥ
æĶ ½
èĤ Ń
èĤ ¸
èĤ ·
çĭ ī
çĭ Ŀ
é¥ ³
å¿ ŀ
çĤ Į
çĤ Ĩ
æ³ Ļ
æ² º
æ³ Ĥ
æ³ ľ
æ³ ĥ
æ³ ĩ
æĢ Ĭ
å³ ĥ
ç© ¸
ç¥ ĭ
ç¥ Ĭ
ð«į £
𬣠³
𬠩½
é¸ ¤
å¼ ¢
å¼ ¨
éĻ ij
𬮠¿
éĻ İ
𬯠Ģ
åį º
ä¹ ¸
å¦ Ń
å§ Ī
ð« °
ð«° Ľ
è¿ ³
åı ķ
𬳠µ
é© µ
𬳠¶
ä Į
äĮ ¹
é© º
ð«ł Ĭ
ç» ĭ
ç» IJ
çł ī
èĢ Ķ
ãĽ ĥ
çİ ¶
çı ĩ
çı ħ
ð¬į Ľ
çı ĭ
çİ ¹
çı Į
çİ ¿
éŁ ¨
åŀ ļ
åŀ ¯
åŀ Ļ
åŀ ²
åŁ ı
åŀ į
èĢ ĩ
é¿ į
åŀ İ
åŀ ´
åŀ Ł
åŀ ŀ
æĮ ĵ
åŀ µ
åŀ ı
æĭ ¶
èį ĸ
èį ģ
èį Ļ
èį Ľ
èĮ Ī
èĮ ½
èį Ħ
èĮ º
ð¬ľ ¬
èį ĵ
èĮ ³
𦠰
𦰠¡
èĮ Ľ
èį Ń
ãŃ ķ
æŁ ·
æŁ ĥ
æŁ Ĭ
æŀ ¹
æł IJ
æŁ ĸ
éĥ ļ
åī ħ
ä´ ĵ
è¿ º
åİ ĸ
çł Ĩ
çł ij
çł Ħ
èĢ ı
å¥ ĵ
ä ¶
ä¶ ®
è½ µ
è½ ·
è½ ¹
è½ º
æĺ º
𪠾
𪾠¢
æĺ ½
çĽ ·
åĴ ¡
åĴ º
æĺ ³
æĺ £
æĺ ¤
æĺ «
æĺ ¡
åĴ ¥
æĺ ª
èĻ ·
èĻ ¸
åĵ ĥ
å³ ĺ
èĢ ij
å³ Ľ
𪨠°
å³ Ĺ
å³ §
å¸ ¡
éĴ ĺ
ð«ĵ §
éĴ ľ
𬬠®
𬬠±
𬬠Ń
éĴ ª
éĴ ¬
éĴ Ń
çŁ §
ç§ ¬
ä¿ «
èĪ ģ
ä¿ ľ
ä¿ Ļ
ä¿ į
åŀ ķ
è¡ İ
èĪ £
å¼ ĩ
ä¾ ´
é¸ §
äı ¡
èĥ ł
ð¦ ϶
èĥ Ī
èĥ ©
èĥ £
æľ ı
é£ IJ
è¨ Ħ
é¥ »
åº ¤
çĸ ¢
çĤ £
çĤ Ł
ã ¶
ã¶ ²
æ´ Ń
æ´ ĺ
æ´ ĵ
æ´ ¿
ã³ ļ
æ³ ļ
æµ Ī
æµ ī
æ´ ¸
æ´ ij
æ´ ¢
æ´ Ī
æ´ ļ
æ´ º
æ´ ¨
æµ IJ
ã³ ĺ
æ´ ´
æ´ £
æģ Ķ
å® ¬
çª Ģ
æī Ĥ
è¢ Ĩ
ç¥ ı
ç¥ IJ
ç¥ ķ
åı ļ
éĻ §
éĻ ŀ
å¨ Ģ
å§ ŀ
å§ ±
å§ ¤
å§ ¶
å§ ½
æŀ ²
ç» ĸ
éª ĥ
ð¬ĺ ¡
𬳠½
ð¬ĺ ©
ð«Ħ §
å½ ĸ
éª ī
æģ Ŀ
çı ª
çı Ľ
çı ¹
çIJ Ĭ
çİ ¼
çı ĸ
ðª Ł
ðªŁ Ŀ
çı ½
çı ¦
çı «
çı Ĵ
ð¬į ¤
çı ¢
çı ķ
çı Ŀ
ð«Ń ¼
åŁ Ĺ
åŀ ¾
åŀ º
åŁ Ĩ
åŀ ¿
åŁ Į
åŁ ĩ
èİ °
èĮ Ŀ
ð¬ľ ¯
éĦ Ģ
èİ ¶
èİ Ŀ
äĵ ĸ
èİ Ļ
æł »
æ¡ ł
ð¬ Ĥ
ð¬Ĥ ©
æ¡ Ħ
æ¢ ł
æł ´
æ¢ ´
æł Ĵ
éħ İ
éħ ı
ð«ł Ĩ
çł µ
çł ł
çł «
çł ¬
ç¡ ģ
æģ §
ç¿ ĥ
éĥ ª
ð¨ IJ
ð¨IJ Ī
è¾ Ģ
è¾ ģ
ð¬ Į
ð¬Į Ĺ
åī ķ
èµ Ģ
åĵ ¢
æĻ ħ
æĻ Ĭ
åĶ Ŀ
åĵ ³
åĵ ±
åĨ Ķ
æĻ Ķ
æĻ IJ
çķ ĸ
èļ Ħ
èļ Ĩ
ð« ij
ð«ij ¡
å¸ ±
å´ ģ
å³ ¿
𪨠¶
å´ Ħ
å¸ ¨
å ´Ģ
èµ Ĩ
𬠬¸
éĴ ·
𬬠»
𬬠¹
𬬠¿
ð¬Ń ģ
çľ ļ
çĶ ¡
ç¬ «
åĢ »
åĢ ´
èĦ ©
åĢ ®
åĢ ķ
åĢ ŀ
ð« ¢
ð«¢ ¸
åĢ ĵ
åĢ §
è¡ ĥ
èĻ Ĵ
èĪ Ń
èĪ ¯
èĪ ¥
çĵ ŀ
é¬ ¯
é¸ °
èĦ İ
æľ ĵ
èĥ ²
èĻ ĵ
é± ½
çĭ ´
å³ ±
çĭ »
çľ ¢
ð«Ĺ §
åĭ į
çĹ Ħ
çĸ °
çĹ ĥ
ç« ĺ
ç¾ ĸ
ç¾ ĵ
æ¡ Ĭ
æķ ī
çĥ ł
çĥ Ķ
çĥ ¶
çĥ »
ð¬Ĭ Ī
æ¶ į
æµ ¡
æµ Ń
æµ ¬
æ¶ Ħ
æ¶ ¢
æ¶ IJ
æµ °
æµ Ł
æµ Ľ
æµ ¼
æµ ²
æ¶ ĺ
æĤ Ī
æĤ ĥ
æĤ ¢
ð¬Ĵ Ī
å® §
çª ħ
çª Ĭ
çª İ
æī ħ
æī Ĩ
è¢ ª
è¢ Ĺ
è¢ ¯
ç¥ §
éļ º
åł ²
çĸ į
𨠺
𨺠Ļ
éĻ ´
ç ĥĿ
çł ®
ãĽ ļ
åĵ ¿
ç¿ Ģ
ç¿ Ĥ
åī Ł
𬳠¿
ð«Ħ ¨
ç» ¤
éª į
ð¬ĺ «
ä Ĥ
äĤ ®
çIJ İ
çı ¸
çı µ
çIJ Ħ
çIJ Ī
çIJ Ģ
çı º
æİ Ń
åł İ
åł IJ
åŁ ¼
æİ İ
åŁ «
åł Į
æĻ ¢
ð« ®
ð«® ĥ
æİ ŀ
åŁ ª
å£ ¸
ãĻ į
èģ į
èı Ŀ
èIJ ļ
èı ¥
èİ ¿
äĵ «
åĭ ļ
äĵ ¬
èIJ Ĩ
èı Ĥ
èı į
èı ¼
èIJ £
äĵ ¨
èı ī
äĵ Ľ
æ¢ ¼
æ¢ ½
æ¡ ²
æ¢ ¾
æ¡ ¯
æ¢ £
æ¢ Į
æ¡ ¹
æķ Ķ
åİ £
ç¡ Ķ
é¿ İ
ç¡ Ļ
ç¡ ļ
ç¡ Ĭ
ç¡ į
åĭ Ķ
ä´ ķ
é¾ ģ
éĢ ´
åĶ ª
åķ «
ç¿ Ī
ã «
ã« °
æĻ Ļ
çķ ¤
𬱠ĸ
è¶ ¼
è· Ĥ
èĽ ĥ
èļ ²
ð¬Ł ½
èļ º
åķ ´
äİ ĥ
å´ §
å´ Ł
å´ ŀ
å´ Ĵ
å´ Į
å´ ¡
éĵ ı
ð«ĵ ¯
ð«Ł ¹
éĵ ķ
ð«Ł ¼
éĵ ĸ
éĵ ĺ
éĵ ļ
éĵ ŀ
éĵ ¥
éĵ ´
çī »
çī ¿
ç¨ Ĩ
ç¬ ±
ç¬ ¯
åģ °
åģ ¡
é¸ º
åģ Ń
åģ ²
åģ ģ
ã ¿
ã¿ ł
éĦ ħ
åģ ĵ
å¾ Ľ
è¡ Ĵ
èĪ ³
èĪ ²
é¸ ¼
æĤ Ĩ
éĦ ĥ
çĵ »
ä Ŀ
äĿ Ļ
èĦ ¶
èĦ ŀ
èĦ Ł
äı ²
é± ¾
çĮ ĩ
çĮ Ĭ
çĮ Ħ
è§ ĸ
ðł ħ
ðłħ ¤
åº ±
åº ¼
åº ³
çĹ ĵ
ä´ Ķ
ç« «
åł ĥ
éĺ Į
ç¾ Ŀ
ç¾ ķ
çĦ Ĩ
çĥ º
çĦ Į
æ· ı
ð¬ĩ ¹
æ· Ł
æ· ľ
æ· ´
æ· ¯
æ¹ ´
æ¶ ´
ð¬į ¡
ã ¥
㥠Ħ
æĥ Ľ
æĥ Ķ
æĤ °
æĥ Ļ
å¯ ģ
éĢ Ń
𬤠ĩ
ð«į ¯
è¢ ¼
è£ Ī
ç¥ ²
𬤠Ĭ
ð«į ²
è° ŀ
èī ´
å¼ ¸
å¼ ¶
𬯠İ
éļ ĥ
å© ŀ
å¨ µ
å© ¼
åª ĸ
å© ³
å© į
å© Į
å© «
å© ¤
å© ĺ
å© ł
ð¬ĺ ¬
ð¬ĺ Ń
𬴠Ĥ
ð«ĺ ¦
ç» ¹
ð«Ł ħ
ð¬ĺ ¯
éª ķ
ð«ĺ §
çµ ľ
çı ·
çIJ ²
çIJ ¡
çIJ Ł
çIJ Ķ
çIJ Ń
åł ¾
åł ¼
æı ķ
ãĻ ĺ
åł §
åĸ Ĩ
åł ¨
å¡ ħ
åł ł
çµ ·
𪠣
𪣠»
ð¡ İ
ð¡İ ļ
è ijľ
æĥ İ
èIJ ³
èij Ļ
éĿ ¬
èij ´
èĴ ĩ
èĴ Ī
éĦ ļ
èĴ ī
èĵ ĩ
èIJ ©
èij °
èij İ
éĦ ij
èĴ İ
èij ĸ
èĴ Ħ
èIJ ¹
æ£ ¤
æ£ ½
æ£ «
æ¤ ĵ
æ¤ ij
ð¬ ĥ
ð¬ĥ Ĭ
é¹ Ģ
æ¤ Ĩ
æ£ ĵ
æ£ ¬
æ£ ª
æ¤ Ģ
æ¥ Ĺ
𬠷
𬷠ķ
çĶ ¦
éħ ¦
è§ Į
å¥ ¡
çļ ķ
ç¡ ª
æ¬ ¹
è© Ł
ð«IJ IJ
è¾ Į
æ£ IJ
é¾ Ĥ
𬠹
𬹠¼
é» ¹
çī ļ
çĿ İ
æĻ «
æĻ ª
æĻ ±
ð §
ð§ ¿
ð§¿ ¹
èĽ ij
çķ ¯
æĸ Ŀ
åĸ ¤
å´ ¶
åµ ģ
ð« ¶
ð«¶ ĩ
å´ ¾
åµ ħ
å´ ¿
åµ ļ
ç¿ Ļ
ð«ĸ ®
åľ Į
åľ IJ
èµ ij
èµ Ĵ
é¿ ı
éĵ ¹
ð¬Ń Ĭ
éĵ ½
𨱠ĩ
ð«ĵ ¶
éĶ Ĭ
éĶ į
éĶ İ
ð¬Ń İ
éĶ ĵ
çĬ ĩ
é¢ ĭ
ç¨ Į
çŃ Ģ
çŃ ĺ
çŃ ľ
çŃ ¥
çŃ ħ
åĤ ĥ
åĤ ī
ç¿ Ľ
åĤ Ĵ
åĤ ķ
èĪ ¾
çķ ¬
ð«ĸ ¯
èĦ ¿
èħ ĺ
ä IJ
äIJ ĥ
èħ Ļ
èħ Ĵ
𬱠Ł
é² ĥ
çĮ °
ð« Ľ
ð«Ľ Ń
çĮ ¯
ã º
㺠Ħ
é¦ ī
åĩ ĵ
éĦ Ĺ
ð« ·
ð«· ·
å» ĭ
å» Ĩ
éĦ Į
ç² ¢
éģ Ĩ
æĹ IJ
𬮠±
çĦ ŀ
ð¬Ĭ ¤
æ¬ »
𣠸
𣸠£
æº ļ
æº ģ
æ¹ Ŀ
æ¸ °
æ¹ ĵ
ã ´
ã´ Ķ
æ¸ Ł
æº ł
æ¸ ¼
æº ĩ
æ¹ £
æ¹ ij
æº ŀ
æĦ IJ
æĦ ĥ
æķ ©
çĶ ¯
æ£ ¨
æī Ĭ
è£ £
ç¥ ¼
å© »
åª Ĩ
åª ŀ
ãĽ ¹
åª ĵ
åª Ĥ
åª Ħ
æ¯ µ
çŁ ŀ
𬴠ĥ
ð«ĺ ¨
ç¼ Ĭ
ç¼ IJ
éª Ļ
çij ĥ
çij ĵ
çij ħ
çij Ĩ
ä´ ĸ
çij ĸ
çij Ŀ
çij Ķ
çij Ģ
𤠧
𤧠Ľ
çij ³
çij Ĥ
å¶ ħ
çij ij
éģ ĺ
é« ¢
å¡ ¥
åł ½
èµ ª
æij Ľ
å¡ Ŀ
æIJ Ĵ
æIJ Į
èĴ ±
èĴ ¨
èĵ ı
èĶ Ģ
èĵ ¢
èĵ Ĥ
èĴ »
èĵ £
æ¤ ¹
æ¥ ª
æ¦ ĥ
æ¦ ħ
æ¥ Ĵ
æ¥ ©
æ¦ ĩ
æ¤ ¸
æ¥ Ļ
æŃ ħ
𬠪
𬪠©
ç¢ ĥ
ç¢ ı
ð¬Ĵ Ķ
ç¢ Ī
äĥ ħ
ç¡ ¿
éĦ ł
è¾ Ĵ
𬨠İ
ð«IJ ĵ
é¾ Ĩ
è§ ľ
ä £
ä£ ĺ
æļ ķ
é¹ į
ð« «
ð«« ĩ
㬠Ĭ
æļ ħ
è· ±
èľ IJ
èľ İ
åµ ²
èµ Ĺ
éª ±
éĶ ĸ
ð«ĵ ¹
éĶ ĺ
éĶ ³
éĶ §
éĶ ª
ð¬Ń ļ
éĶ «
éĶ ¬
ð¬Ń Ľ
ç¨ ij
ç¨ Ļ
ä ħ
äħ Ł
ð¬ ķ
ð¬ķ Ĥ
çŃ »
çŃ ¼
çŃ ¶
çŃ ¦
çŃ ¤
åĤ º
é¹ İ
åĥ ĩ
èī ħ
èī ī
è° ¼
è² Ĩ
èħ ½
èħ ¨
èħ ¯
é² ī
é² Ĭ
é² Į
ä² Ł
𬶠ĭ
𬶠į
é² ı
éĽ Ĭ
çĮ º
é£ Ķ
è§ Ł
ð¦ Ŀ¼
é¦ Į
è£ Ľ
å» Ĵ
çĺ ħ
éĦ ĺ
é¹ Ĵ
éĦ ľ
éº Ģ
éĦ £
éĺ ĺ
ð«Ķ ¶
çħ ģ
çħ ĥ
çħ ´
çħ ĭ
çħ Ł
çħ ĵ
æ» ł
æº į
æº ¹
æ» Ĩ
æ» ī
æº ¦
æº µ
æ¼ ·
æ» §
æ» ĺ
æ» į
æĦ Ń
æħ ¥
æħ Ĩ
å¡ ±
ð« ĮĢ
è £¼
ç¦ ĭ
ç¦ Ķ
ç¦ ĺ
ç¦ Ĵ
è° «
é¹ Ķ
ð«ĸ ³
æĦ į
å« Ħ
åª ±
æĪ ¤
åĭ ł
æĪ £
ð«ĺ ª
ð«ĺ ¬
ç¼ ŀ
èĢ ¤
çij §
ð« ŀ
ð«ŀ ©
çij ¨
çij ±
çij ·
çij ¢
æĸ ł
æij ı
å¢ ķ
å¢ Ī
å¢ IJ
å¢ ĺ
æij ´
éĬ İ
ð¡ IJ
ð¡IJ ĵ
å¢ ļ
æĴ ĸ
𪠤
𪤠Ĺ
éĿ ½
éŀ ģ
èĶ Į
èĶ Ī
èĵ °
èĶ ¹
èĶ Ĭ
åĺ ı
æ¦ °
æ¦ ij
æ§ ļ
ð£ Ĺ
ð£Ĺ ĭ
æ§ ľ
æ¦ į
çĸ IJ
𬸠ĺ
éħ º
éħ ¾
éħ ²
éħ ´
ç¢ ¶
äĥ İ
ð¬Ĵ Ĺ
ç¢ ¨
ð¥ Ķ
ð¥Ķ ²
ç¢ ¹
ç¢ ¥
åĬ Ĥ
ð«ļ ĸ
ä´ Ĺ
å¤ ¥
çŀ į
é¹ ĸ
㬠İ
è· ½
èľ ¾
å¹ ĸ
å¶ į
åľ Ļ
𨱠ı
éĶ º
éĶ ¼
éĶ ½
ð¬Ń ¤
éĶ ¾
éĶ ¿
éķ ĥ
éķ Ħ
éķ ħ
é¦ Ŀ
é¹ Ļ
ç® ¨
ç® ĸ
åĬ Ħ
åĥ ¬
åĥ ¦
åĥ Ķ
åĥ İ
æ§ ĥ
ãĻ ¦
é² Ĵ
é² ķ
ð«ļ ķ
é² ĸ
é² Ĺ
é² ĺ
é² Ļ
𬶠IJ
𬶠ı
ð ©½
𩽠¾
å¤ IJ
çį į
é£ Ĺ
𬸠ļ
åĩ ĺ
å» ij
å» Ļ
çĺ Ĺ
çĺ ¥
çĺ ķ
é² Ŀ
éĦ «
çĨ ĩ
æ¼ ¹
æ¼ ĸ
æ½ Ĩ
æ¼ ¤
æ½ ©
æ¼ ¼
æ¼ ´
ã ½
ã½ ı
æ¼ Ī
æ¼ ĭ
æ¼ »
æħ ¬
çª ¬
çª Ń
ã ®
ã® ¾
𬤠Ŀ
è¤ ķ
ç¦ Ľ
ç¦ ļ
éļ ©
å« ķ
å« Ń
å« ľ
å« ª
ð¬ ĻĤ
ã »
ã» ¬
éº ¹
çĴ Ĩ
æ¼ ¦
åı ĩ
å¢ £
å¢ ¦
å¢ ¡
åĬ IJ
èĸ ģ
èķ °
èĶ ĥ
é¼ Ĵ
æ§ ±
é¹ Ŀ
ç£ ı
ç£ ī
æ® £
æħ Ń
éľ ħ
æļ µ
æļ ²
æļ ¶
è¸ ¦
è¸ £
äĹ ĸ
èĿ ĺ
èĿ ²
èĿ ¤
åĻ ĩ
å ĻĤ
åĻ Ģ
ç½ ¶
å¶ ²
å¶ ĵ
ãł ĩ
å¶ Ł
å¶ Ĵ
éķ Ĩ
éķ Ī
éķ ĭ
éķ İ
ð¬Ń ©
éķ ķ
ç¨ ¹
åĦ ĩ
çļ ŀ
çļ Ľ
ä´ ĺ
èī İ
èī ı
é¹ Ł
𩾠ĥ
é² ¦
é² ª
é² ¬
æ© ¥
è§ Ń
é¹ ł
é¹ ¡
ç³ ĩ
ç³ Ī
ç¿ ¦
é¹ ¢
é¹ £
çĨ Ľ
æ½ ĸ
æ½ µ
ã µ
ãµ IJ
æ¾ Ĥ
æ¾ Ľ
çij ¬
æ½ ½
æ½ ¾
æ½ ı
æĨ Ń
æĨ ķ
𬸠£
æĪ Ń
è¤ ¯
ç¦ ¤
ð«į ½
å« ½
éģ ¹
𬴠Ĭ
çĴ ¥
çĴ ²
çĴ Ĵ
æĨ Ļ
æĵ IJ
éĦ ¹
èĸ ³
éŀ Ķ
é» ĩ
ð¬ ŀ
ð¬ŀ Ł
èķ Ĺ
èĸ ¢
èķ ¹
æ© ŀ
æ© ij
æ© ¦
éĨ ij
è§ ±
ç£ ¡
ð¥ ķ
ð¥ķ ¢
ç£ ľ
è± ®
ð«Ł ¦
𬺠Ī
ð«ł ľ
é¹ ¾
èĻ ¤
æļ ¿
æĽ Į
æĽ Ī
㬠ļ
è¹ ħ
è¸ ¶
äĹ Ľ
èŀ Ĺ
çĸ ģ
ãł ĵ
å¹ ª
𪠩
𪩠ĺ
å¶ ¦
ð¬Ń ¬
𨱠ij
ð¬Ń ¯
é¦ ŀ
ç© Ħ
ç¯ ļ
ç¯ ¯
ç° ī
é¼ ½
è¡ ł
çĽ ¦
èŀ £
ç¸ ¢
é² Ń
é² ¯
é² °
é² º
é² ¹
ð«Ĺ ´
äº ¸
çĻ Ģ
çĺ Ń
𬸠¦
ç¾ ±
ç³ Ĵ
çĩ ĭ
çĨ »
çĩ Ĭ
çĩ ļ
çĩ ı
æ¿ ©
æ¿ ĭ
æ¾ ª
æ¾ ½
æ¾ ´
æ¾ Ń
æ¾ ¼
æĨ ·
æĨ º
æĩ Ķ
é» ī
å¬ Ľ
é¹ ¨
ç¿ ¯
ð«Ħ ·
çĴ ±
𤠩½
çĴ ¬
çĴ ®
é« ½
æĵ ¿
èĸ ¿
èĸ ¸
æª ij
æ« Ĩ
æª ŀ
éĨ ¨
ç ¹Ħ
ç£ ¹
ç£ »
çŀ «
çŀ µ
è¹ IJ
èŁ ı
ã ĺ
ãĺ İ
ð¬Ń ³
éķ ¤
ð¬Ń ¶
ð«Ķ į
éķ ¥
éķ ¨
ð¬Ń ¸
𨱠Ķ
ð¬Ń ¼
ð«Ķ İ
çŁ °
ç© Ļ
ç© ľ
ç© Ł
ç° ķ
ç° ĥ
ç° ı
åĦ ¦
éŃ ĭ
æĸ ¶
èī ļ
𬸠ª
è° ¿
ä² ł
𬶠Ł
é² ¾
𬶠ł
é² ¿
é³ ģ
é³ Ĥ
é³ Ī
é³ ī
çį ¯
äĹ ª
é¦ ĺ
è¥ ķ
è¥ ļ
𬶠¨
èŀ ±
çĶ ĵ
å¬ ¬
å¬ ¥
ð¦ Ī
ð¦Ī ¡
ð«Ħ ¸
çĵ Ģ
éĩ IJ
é¬ ¶
çĪ ĩ
éŀ ³
éŀ ®
ð¬Ł ģ
èĹ Ł
èĹ ¦
èĹ ¨
é¹ ²
æª «
é» ¡
ç¤ ŀ
ç¤ Į
ð¥ ĸ
ð¥ĸ ¨
è¹ ¢
è¹ ľ
èŁ «
äĹ ´
åļ ļ
é« ĥ
éķ ®
éķ ±
éħ Ĥ
é¦ §
ç° ł
ç° Ŀ
ç° °
é¼ «
é¼ ©
çļ ¦
èĩ ij
ä² ¢
é³ ij
é³ Ĵ
é¹ ±
é¹ ¯
çĻ Ĺ
ð¦ Ĵ
ð¦Ĵ į
æĹ ŀ
ç¿ ·
åĨ ģ
äİ ĸ
çĢ Ķ
çĢ į
çĢ Į
è¥ ľ
ä´ Ļ
ð¬Ļ Ĭ
åļ Ń
ã °
ã° Ģ
é¬ ·
éĨ Ń
è¹ ¯
èł ĭ
ç¿ ¾
é³ ĺ
åĦ ³
åĦ ´
é¼ Ĺ
𬶠Ń
𩾠Į
é³ ļ
é³ Ľ
éº ij
éº ĸ
èł ĥ
å½ Ł
å¬ ¿
é¬ Ĵ
èĺ ĺ
æ¬ Ĥ
é Ĩµ
é¢ ¥
çĶ Ĺ
ð¨ Ł
ð¨Ł ł
å· ĩ
éħ ħ
é« İ
çĬ ¨
𬶠®
ð¨ Ń
ð¨Ń ī
㸠Į
çĪ Ķ
çĢ ±
çĢ ¹
çĢ ¼
çĢ µ
è¥ «
åŃ ħ
éª ¦
ð¬Ļ ĭ
èĢ °
𤠫
𤫠ī
çĵ ĸ
é¬ ĺ
è¶ ¯
𬺠ĵ
ç½ į
é¼ ±
é³ ł
é³ ¡
é³ £
çĪ Ł
çĪ ļ
çģ Ī
éŁ Ĥ
ç³ µ
èĺ ¼
ç¤ µ
é¹ ´
èº Ķ
çļ Ń
é¾ ¢
é³ ¤
äº ¹
ç± ¥
é¼ ·
ð«ļ Ń
çİ ĥ
éĨ ¾
é½ ĩ
è§ ¿
èł ¼
× §
× ¤
× Ľ
×ķ× ª
× ¡
×Ļ× Ŀ
× ¦
× Ĵ
× ĺ
×ķ× ¨
× Ŀ
×ķ× ľ
× ĸ
๠Ĥ
ï º
ðŁ į
ðŁ IJ
×Ļ× ¨
ï »
ðŁ ij
ðĿ IJ
ðŁ ı
ðŁ Ķ
ðŁ Į
ðŁ İ
ðŁ ĵ
× Ł
ðĿ ij
×ķ× ĵ
ï ¦
Ġ× ķ
×ķ× ij
à¸Ń à¸ĩ
ðĿ ĺ
×Ļ× ª
ðĿ ķ
à¸Ĺ ีà¹Ī
Ø§Ø ¦
ðŁ ¤
×ķ× Ł
ر ÙĬ
×Ļ× ľ
ร ะ
า ย
ï ¯
ï ®
า ม
â ĩ
ðŁ ¥
ï Ń
ðĿ Ļ
×ķ× ł
á ½
Ġ× Ľ
ðŁ ļ
â ļ
ï §
×ij ר
×Ļ× ł
á ´
Ġ× Ĺ
á ¼
ðĿ Ĺ
Ġ× ¢
×Ļ× Ķ
ãģ£ ãģŁ
ãģĵ ãģ¨
á ¸
ÙĬ ÙĨ
ãģª ãģĦ
ا ع
ภ¨
à¹Ī à¸ĩ
×Ļ× ĵ
×ŀ ש
á Ī
׳ ×Ļ
×Ļ× ij
ï ¥
ðĿ ĵ
Ġ× Ļ
× ļ
ั à¸ĩ
â ĵ
ï ¤
ĠاÙĦ Ø£
า à¸ģ
à¹ī à¸Ļ
à¹Ģ ร
×ķ× Ŀ
á ¹
ภ¶
×Ļ× §
ภĭ
à¸Ħ ร
ภĺ
ั à¸ģ
ðŁ ķ
ÙĪ ÙĨ
à¸Ń ย
â Ĭ
ðĿ Ĵ
ĠاÙĦ ع
า à¸Ļ
×Ļ× Ł
ÙĦ ÙĬ
×Ļ× ©
à¸Ľ ระ
à¹Ģ à¸Ľ
Ġ× ł
×ķ× ¡
ภł
Ùħ ÙĨ
×ķ× ¢
×ķ× ŀ
â Į
ðŁ §
à¹ĩ à¸Ļ
ภį
ã İ
á µ
ĠاÙĦ س
×ķ× §
ห ล
ðŁ ĩ
â ı
ðŁ ¦
Ġ×Ķ ×ŀ
ÙĪ Ø§
Ġ× ª
ר ×IJ
à¸Ń à¸Ļ
ภ©
à¹Ī ว
×ķ× ¦
í Ĺ
ã Ħ
ï ¨
ï ¹
â İ
ï ²
ðĿ ļ
ð IJ
à¸Ħ ว
ห à¸Ļ
Ġ× ¨
ب ÙĬ
ร à¹Į
ر ا
ش ر
×ķ× Ĺ
×ķ× ¤
×ķ× ©
×ķ× Ĵ
í Ŀ
â Ľ
à¸ķ ิ
à¹Ģ à¸ģ
ï ³
ï ±
à¸Ķ à¹ī
ë ¹
ï ¬
á ¿
ðŁ Ľ
ðĿ ĸ
à¹Īา à¸ĩ
ู à¹ī
Ġ×Ķ ×IJ
ĠاÙĦ ØŃ
פ ר
ÙĪ Ùħ
à¹Ģ ล
í ĸ
×Ļ× ¢
ì Ī
í ĵ
ðŁ ħ
á ł
à¸Ħว าม
à¸Ī ะ
׳ ×Ķ
Ġ× §
ภŁ
à¹ī à¸ĩ
ห ม
ت Ùħ
׾ ×Ļ
ÙĬ د
à¹Ī à¸Ļ
׊ר
ש ר
à¹Ģ à¸Ĺ
×ŀ ר
ë ĸ
ع ÙĦ
×ŀ ×¢
â ²
׾ ×Ķ
Ġ× ¤
à¸Ń à¸ģ
س ÙĦ
×Ļ× ŀ
ÙĤ ÙĬ
í İ
ت ØŃ
×Ļ× ¡
×Ļ× Ĺ
í Ľ
ï °
â ½
á ī
á Ĭ
á ¨
Ùĩ ا
Ġ׾ ×Ķ
×ķ× IJ
Ùħ ا
à¹īà¸Ń à¸ĩ
ر ب
ĠاÙĦ ج
×ŀ ×ĵ
Ùħ ÙĦ
ت ر
à¹Ģ à¸Ķ
ק ר
í ħ
ì ¼
ê ¿
ã Ī
á IJ
ðŁ Ĺ
ê ¦
á ĭ
ðĿ Ķ
à¹Ģà¸Ľ à¹ĩà¸Ļ
à¹ĥ ห
ม า
ว à¹Īา
ม ี
ี à¹ī
à¹Ħม à¹Ī
ÙĨ ÙĬ
Ø ¤
ร า
×ķ ×Ļ
ãĤĪ ãģĨ
ิ à¸Ķ
×Ļ× ¤
׊׾
ÙĤ د
à¹Ģ ส
×Ļ× ĺ
à¸ģ ล
ר ׼
×ķ× Ľ
×Ļ× Ľ
ë Ī
ë ĥ
ðŁ ĸ
á ħ
â ¼
ã ī
à¹Ħ à¸Ķà¹ī
ת ×Ļ
×Ļ× IJ
ĠاÙĦ Ø¥
à¸ł า
ร ิ
ÙĤ Ø©
ØŃ د
ê »
ì ±
ת ×Ĺ
ì º
â ĭ
á Ħ
á ¾
â µ
â ¾
ĠÙĪ Ø§ÙĦ
׳ ×ķ
Ù Ģ
ÙĬ ا
à¸ģ à¹ĩ
×ŀ ×Ķ
ãģĦ ãĤĭ
ع د
ĠاÙĦ ÙĨ
Ġ×Ķ ×©
Ø ¦
ั à¹īà¸ĩ
ร ัà¸ļ
ÙĪ ÙĤ
ãģ§ ãģį
à¹Ģ à¸ŀ
׼ ׾
×ĺ ר
ั à¸Ķ
à¸Ń า
ì ¢
à¸Ń à¸ļ
à¸ķ ร
à¹Ģ à¸Ĭ
ì Ķ
ãģĹ ãģ¾
ë ģ
ë ķ
ðŁ Ļ
â Ĵ
á ¶
à¹ģ ล
ÙĨ ا
à¹ĥห à¹ī
à¹Ħ à¸Ľ
× £
ั ว
า à¸ĩ
×ĵ ר
×ij ׾
פ ×Ļ
Ġ× ĵ
ĠاÙĦ Ùģ
à¹Ģ à¸Ĥ
ש ×Ķ
×IJ ר
ë ¬
ãģ« ãģª
ÑĢ Ð¾
ว ิ
Ùħ ر
×IJ ת
Ùĥ ر
س ب
ÙĨ ت
ãģĹ ãģĦ
ا ج
à¸Ń รà¹Į
Ùĥ ÙĦ
س Ùħ
ส ิ
×Ļ× ¦
ë Ŀ
í ľ
ì ī
á Ĩ
Ùĩ Ùħ
à¸Ļ ีà¹ī
ãģĤ ãĤĭ
ãģĦ ãģ¦
س ÙĬ
׾ ×IJ
د ر
ãģ ļ
ÙĪ Ø¬
ĠاÙĦ Ø®
ص ر
í ı
à¹īา à¸ĩ
ุ à¸Ķ
×ķ× ĺ
×ij ×¢
í Ĩ
à¸Ĭ า
ร ม
ש ×ŀ
×ŀ ס
ê ´
ì ´
ë ľ
ì ¿
ì ©
ë »
â ¤
ðŁ Ĩ
á Į
á ķ
ذ ا
à¸Ĺ ำ
à¸ķ à¹Ī
ĠاÙĦ ÙĤ
ÙĦ Ùĥ
ู à¹Ī
à¸Ħ ุ
ÙĬ Ùħ
׳ ×Ļ×Ŀ
ืà¹Ī à¸Ń
ÙĪ Ø¹
ãĤ ĩ
ا ÙĤ
Ġ×ij ×¢
à¹Ģ ม
ج Ùħ
á» «
ãģĵãģ¨ ãģĮ
ب د
×ķ× Ķ
ש ׾
Ùĩ ر
à¹Ģ à¸Ļ
ãģ ¹
í ĭ
ì »
ì ½
ë Ń
ì Į
í Ģ
ë Į
ë º
ã Ĭ
à¹ĥ à¸Ļ
Ġ× Ĵ
๠Ĩ
à¸Ī าà¸ģ
ว ย
à¹ĥ à¸Ĭ
à¸ĩ าà¸Ļ
ĠاÙĦ Ø´
ا ØŃ
à¹īา à¸Ļ
ืà¹Ī à¸Ńà¸ĩ
×IJ ×Ļ
ب ÙĦ
ãģ¨ æĢĿ
׳ ס
ãģ¾ ãģĽ
Ùĥ ÙĨ
ע ר
ĠاÙĦ د
ש ת
í ŀ
Ùħ س
ص ÙĦ
×ķ׳ ×Ķ
ار ة
ÙĦ Ùħ
ส ม
Ø£ ÙĨ
ת ר
×IJ ×ŀ
ع ب
خ ت
ãĤ ĥ
ì ¡
ì £
ив а
ส ั
ึ à¸ģ
ì ¸
ë Ĩ
алÑĮ н
ì ³
ì į
ê ¼
ê ½
ì ı
ã Į
ã ı
ï ©
ê ª
á İ
Ġ× ĸ
à¸ģ ัà¸Ļ
×Ļ ×ķ
à¸Ħ à¸Ļ
׳ ×ķת
à¸ľ ูà¹ī
à¹ĥ à¸Ī
ãģĦ ãģŁ
Ùģ Ø±
×ĺ ×Ļ
צ ×Ļ
ãĤĤ ãģ®
ĠاÙĦ ص
ãģ¾ãģĽ ãĤĵ
د ة
×ij ×Ļ
ĠاÙĦ ر
Ġ×ŀ ×IJ
ส ำ
à¹Ģ ห
ع ر
ãģª ãģı
à¸ģร ะ
×ij ×ĵ
à¹Ģ à¸Ī
×Ļ× ļ
×Ĺ ×Ļ
ÙĬ ع
ש ×ij
ÙĨ Ø©
ÙĪ Ø¶
ÙĦ Ùģ
ÙĢ ÙĢ
פ ע
í Ī
×ŀ ×§
ภIJ
ØŃ Ø©
ا ص
Ñĭв а
à¸Ħ ม
ว ั
à¸Ľ ล
ì Ł
í ļ
ë ´
ë ij
ë ī
ë ĩ
ì ¨
ë ±
ë İ
â ¬
á ¥
á Ĺ
á Ľ
á į
Å ©
à¸Ķ ี
ô i
Ġ× ¡
׾ ×ķ
á»Ŀ i
à¸Ħุ à¸ĵ
â y
à¸Ļ า
×Ĺ ×ĵ
×ĵ ×Ļ
ห า
ج ÙĦ
à¹Ģ ว
ãĤĩ ãģĨ
Ùħ Ø©
ĠاÙĦ Ùĥ
Ġ×Ķ ×¢
ج ر
×ĸ ר
ا ط
׼ ת
×ķ׳ ×Ļ×Ŀ
ØŃ Ùħ
ê ¶
ر Ùĥ
Ġ׾ ×¢
×ķ× ĸ
ส ร
צ ׾
Ø ¢
ا ست
à¹Ī ม
خ ر
צ ע
×Ļר ×ķת
اد ة
ش ار
×ŀ ×Ĺ
í Ĵ
à¹Ģร ีย
×Ĺ ×§
Ø§Ø «
ร à¸ĩ
à¹Ģ à¸ķ
à¸Ī ำ
ภĿ
à¹Īา ย
à¸Ħ ล
ÙĤ ÙĪ
иÑĩеÑģ к
à¸ĵ à¹Į
ั ย
Ùħ ع
ë ¨
ë ¿
ë ®
ï ´
ì ¥
ì «
ë µ
á ¡
â į
ð ĵ
â °
à¸Ĥ à¸Ńà¸ĩ
Ù ĭ
à¸ģ ัà¸ļ
ãģ® ãģ§
à¹ī ว
à¸Ńย à¹Īาà¸ĩ
ãģ Ń
á»ĩ t
à¸ķ à¹īà¸Ńà¸ĩ
×ŀ ×Ļ
à¹ģ à¸ļ
×Ĵ ר
ÙĪ Ùģ
ÙĤ ÙĦ
à¸łà¸² à¸ŀ
ר ×Ļ
ล า
ÙĬ س
Ġ× ¦
ÙĬ Ùģ
Ġ× ĺ
à¸ľ ล
á ng
ร ว
Ġ×ŀ ש
×IJ ×ķת
×ĸ ×Ķ
ู à¸ģ
à¸Ļ ัà¸ģ
اÙĨ ÙĬ
د ا
ãģ ³
׼ ף
ãĤī ãĤĮ
ãĤĮ ãģ°
ת ק
ú c
ÙĪ Ø²
×Ļר ×Ķ
Ġn gh
án h
Ġ×ķ ×IJ
á» ħ
ส ุà¸Ķ
ë į°
ا ض
اÙĦ ÙĬ
ب ار
ع Ùħ
à¸ļ า
ت ج
à¸ŀ ร
×ķר ×Ķ
ả ng
Ø® ÙĦ
ภī
ắ c
ש ×Ļ×Ŀ
í Ķ
Ùģ Ø³
×Ļ× Ĵ
п ÑĢ
ĠاÙĦ Ø«
س ط
ร ูà¹ī
ีà¹Ī ย
à¸Ń à¸Ķ
ãģª ãĤĬ
×Ĵ ×ĵ
ãģĦ ãģ¾ãģĹãģŁ
ס ק
خ ص
la ÅŁ
ен но
ب ØŃ
ส à¸Ļ
ภ®
ר×IJ ש
Ùħ ÙĪ
دÙĬ د
ษ า
×ķ× ļ
ãĥ§ ãĥ³
à¸ķ ุ
Ġê µ
ĠÑģв о
צ ×ij
à¸Ń ม
à¸Ľ ร
ت ع
×Ķ ×ª
اÙħ ÙĦ
×ŀ ׳
ç ¶ļ
ภ¤
í į
ë ĺ
ë ¤
ì ij
â ´
ã ĭ
Ġب اÙĦ
á»ģ u
ĠاÙĦ ÙĦ
à¸ķ ัว
ذ Ùĩ
ึ à¸ĩ
à¹ĥà¸Ĭ à¹ī
á»ĵ ng
à¸Ļ ั
ม าà¸ģ
ãĥ Ł
×ŀ ×ķ
à¸Ĺ ย
á»Ļ i
Ạ±
ả o
à¹Ĥ à¸Ķ
×IJ ׾
ส าม
ÙĪ Ø¨
à¸Ĺ ุ
ย ัà¸ĩ
ע ת
×ķ׳ ×ķת
à¸Ĥ ึ
à¸Ĥึ à¹īà¸Ļ
à¸ģ à¹Ī
Ạ«
á»ij c
ãģĹ ãĤĩãģĨ
á»ĭ ch
Ġ×IJ ×ķת
Ġש ×IJ
׼ ×ķ׾
á»Ļ c
ع ة
à¸Ĺ ี
à¹Ģ à¸Ń
Ùĥ ت
ãģ »
Ạ»
ìĹ ħ
à¸Ń à¸Ńà¸ģ
اÙĨ ت
à¹Ħ ร
Ġ×IJ ×Ĺר
ط ر
ÙĨ د
ื à¹īà¸Ń
Ø· ÙĦ
×IJ ×Ķ
uy ên
í ĸī
×ij ×Ķ
à¸Ħ à¹Ī
à¸Ĭ à¹Īว
ãģĤãĤĬ ãģ¾ãģĻ
ÙĬ ب
ק ׾
ãĥ Ļ
Ä ©
س ر
า ว
ãĤ ±
à¸ļ ริ
ר ×Ĵ
á»ĥ u
ØŃ ت
×ķ×ŀ ×Ļ
ب ÙĨ
êµ IJ
ÄŁ u
ãģª ãĤĵ
×ij ×§
Ġפ ר
ắ n
ØŃ ÙĦ
×ij ×Ĺ
ấ u
×ij ×ķ×ĵ
ãĥ ¯
Ġ׾ ×§
ั à¸į
à¸ŀ ิ
×Ĺ ×Ķ
×ĸ ׼
ãĥ¼ãĥ ł
ÑĤ елÑĮ
×ŀ ×Ļ×ĵ
ÙĬ Ø®
Ạ³
ت ص
à¸ĺ ิ
è¾ ¼
ì ĵ
Ùĥ Ø©
ÙĤ ب
à¸Ħ à¹Į
à¹īา ย
à¸ĵ ะ
า ะ
ë Ĵ
ê ¾
ë ·
ì ĩ
ê º
ì ģ
ë Ģ
ì ¾
ë ½
ë ļ
ì Ń
ì İ
á ij
ë Ĺ
ê Ĵ
à ¡
à ¬
ðIJ Į
ã ĩ
ðĿ Ħ
Ġ׾ ×IJ
ãģ¨ ãģĦãģĨ
Ġn hi
×Ļ ×ķת
Ġש ×Ķ
à¹ģล à¹īว
Æ°á»Ľ c
à¸Ķà¹ī วย
à¸Ĺ าà¸ĩ
׳ ת
פ ת
à¹ģ à¸ķà¹Ī
ư ng
à¸Ńย ูà¹Ī
à¹ī ำ
Ġ×IJ ׾
Ùĥ Ùħ
ấ p
ล à¸ĩ
ãģŁ ãĤģ
×Ĵ ׾
ห ร
ĠÑĢ Ðµ
à¹Ģà¸Ĥ à¹īา
ÙĤ ر
Ġ×Ķ ×¡
ÙĪ ÙĬ
สาม าร
สามาร à¸ĸ
Äĥ n
à¸Ń ี
פ ×ķ
×Ļ׳ ×ķ
ว ัà¸Ļ
ặ c
íķ Ļ
×ŀ ת
ê u
Ạ¹
Ùģ ÙĬ
×ŀ צ
à¸Ħ า
ãģĿ ãģĨ
ãĢ ħ
ا ز
ا Ùĩ
ר ×Ļ×Ŀ
ấ n
ห าร
ạ t
ÙĨ Ùĩ
à¹Ģ à¸Ħร
ج Ùĩ
׼ ×Ļ
ắ t
à¸Ħ à¹īา
ر ة
ãĥ ı
Ùĥ ÙĪÙĨ
ứ ng
Ġìļ °
ย à¹Į
à¹Īว à¸Ļ
à¸ģ ำ
ث ر
Ñģ и
ĠاÙĦ Ø·
Ġ×Ķ ×¦
ĠØ ·
ĠاÙĦ ÙĪ
ê¹ Į
ØŃ ÙĬ
ار ات
à¹Ģ à¸ĭ
ب ا
г ÑĢ
ร ี
ืà¸Ń à¸Ļ
ع ت
ÙĤ اÙĦ
د Ùħ
Ø ¡
Ġ×ŀ ×§
×ĵ ×Ļ×Ŀ
×¢ ׾
ãģ Ĵ
ëĭ ĺ
×¢ ×Ķ
Ġìĸ ´
Ñģ ÑĮ
ÙĤ Ø·
ãĥ Ľ
èĢĥ ãģĪ
à¹ģ à¸Ļ
ÙĪ Ø§Øª
â u
ĠìĤ¬ ëŀ
ห ว
ĠاÙĦØ£ Ùħ
Ġ×Ķ ×ŀש
ب ÙĪ
à¸Ĭ à¸Ļ
ãĤĵ ãģ§ãģĻ
ว à¸Ļ
à¸ģร รม
×ŀ ×ķ×ĵ
Ùĥ اÙĨ
×ķ× £
ол ог
ت ÙĨ
à¸ķ à¹Į
ê² ĥ
ר ×ĺ
ừ ng
×ķ×ij ×Ķ
Ùħ ØŃ
ĠÐ §
פ ×Ĵ
ส à¸ĸ
ãģĭ ãĤĬ
ını z
à¹Ģ ย
ãĥ¼ ãĥ³
ãģĬ ãĤĬ
פ ש
ิ à¸ķ
Ø· ÙĨ
×Ļת ×Ļ
×IJ ׳
ç ek
ì ª
×ŀ ×ij
ศ า
ãĤ¹ ãĤ¿
à¸ļ ุ
×ĵ ×ijר
ãģĦ ãģı
ส ะ
à¹Ģ หล
ิ à¸ĩ
à¸ŀ ัà¸Ļ
ãģĦ ãģŁãģł
ãĤĤ ãĤī
à¹ī ม
ãģĵãģ¨ãģĮ ãģ§ãģį
าร à¹Į
ุ à¸ĩ
í ij
ì ¯
ë ¼
í Ĥ
ì ·
ê ¡
á ı
á Ĵ
ðĿ ľ
á ©
ðŁ Ħ
ðIJ ¤
Ġש ׾
Ġ×ŀ ×Ķ
à¹ģล ะ
Ġ׼ ׾
Ạ½
á»Ļ ng
ذ ÙĬ
л е
× ¥
ãģª ãģ©
ĠÙĪ Ø£
หà¸Ļ à¹īา
ãģ¾ ãģ§
à¸ķà¹Ī à¸Ń
à¸Ĺ ัà¹īà¸ĩ
ãģł ãģij
à¹ģà¸ļ à¸ļ
à¹Ģร า
פ ׾
ãģŁ ãģĦ
à¹Ģล ย
ãģ£ãģ¦ ãģĦãĤĭ
ế p
ึ à¹Īà¸ĩ
ê ´Ģ
ê³ Ħ
׼ ×ķ
à¹Ģร ืà¹Īà¸Ńà¸ĩ
×§ ×Ļ
êµ Ń
פ ס
ت ÙĬ
ãĥ Ħ
Ġ×Ķ ×Ĺ
г и
ר×IJ ׾
×ŀ ׾
ĠØ£ ÙĬ
Ġع ÙĦÙĬ
ãģĭ ãģ£ãģŁ
ש ×Ļ
д Ñĥ
×ŀ ף
׳ ×ĺ
׳ ×Ļת
mi ÅŁ
׼ ×Ŀ
Ġ×ij ר
Ġ׾ ×ij
ĠÐ Ľ
ç e
×ķ׳ ×Ļ
ãĤĪãģĨ ãģ«
פ ×ķר
ãĥ į
Ùĥ ÙĬ
×Ĺ ×ª
Ùģ ÙĦ
Ġ×Ķ ×§
Ġ×Ķ ×ij
Ġ×ŀ ס
à¹Īา à¸Ļ
п еÑĢ
à¹Īา ว
Ġ×ij ×IJ
ĠÙĪ Ùĩ
à¸Ļ ำ
Ġ×ij ש
׳ ק
ãģ© ãģĨ
ש ×ķת
×ĵ ×Ķ
à¹Ģ à¸ļ
ÙĨ س
Ġìļ° ë¦¬
ส à¹Īวà¸Ļ
ล ัà¸ĩ
ج ز
Ġ×Ĺ ×Ļ
Ùĥ ثر
ล ะ
Ùĩ د
ĠÙĪ Ø¨
اÙĦ Ùħ
à¹ģ ม
Æ¡ i
Ġ×ij ×Ĺ
ữ a
à¹Ģà¸Ĺ ศ
à¸ķ ัà¹īà¸ĩ
ог да
׾ ק
د د
สร à¹īาà¸ĩ
à¸Ĭ ี
Ùģ Ø¶
à¹ģ ห
uy á»ĩn
ร ัà¸ģ
á»ĩ m
ส า
פ ק
ีย à¸ĩ
à¸ķ à¹Īาà¸ĩ
à¸Ħร ัà¹īà¸ĩ
ØŃ ÙĤ
à¹Ģ à¸Ńà¸ĩ
ائ ÙĬ
×ĺ ×¢
اÙĦ Ø©
ิ à¹Īม
ãĤ ½
د Ùī
Ġר ×IJ
ãģ£ ãģ¨
ãĥĥ ãĥĹ
ÙĬر Ø©
ê± ´
×ŀ ×IJ
×ķ ×ķ
ب ع
ãģ ²
ร าย
×ĵ ×Ŀ
ت Ùģ
à¸ķ à¸ģ
ạ ng
ãĤĴ è¦ĭ
à¸Ĭ ั
ưỠŁ
Æ°á»Ł ng
ج ب
×ķ×ŀ ר
ĠìĤ¬ëŀ Į
ó ng
ร ั
Ġ×Ķ ×ĸ
ר צ
Ġ×Ĺ ×ĵ
ذ ÙĦÙĥ
×ķר ×Ļ
ãģ¡ ãĤĥ
Ùģ Ø¹
Ġ׾ צ
á i
à¹ĩ à¸ļ
ãģ İ
à¸ģ ิ
ạ c
ë© °
ãģª ãĤĭ
×ķ׾ ×Ŀ
à¹ģ à¸Ĺ
×ķ× ¥
м еÑĤ
ü ÅŁ
ÑĢ Ñı
ภĴ
ÑģÑĤ оÑı
ع ÙĪØ¯
Ùħ ار
Ø· Ø©
à¸ŀ ื
к ÑĢ
à¹ģ à¸ģ
à¹Ĥ รà¸ĩ
×ij ×Ļ×ĺ
ê² ł
×ķ׾ ×Ķ
ØŃ ر
ืà¹Ī à¸Ńà¸Ļ
×ķ×ij ר
׊ש
ãĥķãĤ ¡
×ŀ ×ĺ
ú t
Ġd ön
ắ ng
ëł ĩ
ẳ ng
ว à¸ģ
ص د
Ø® Ø·
à¸Ń ั
ãĤı ãĤĮ
سÙĦ اÙħ
à¹Ģร à¹ĩ
×Ļש ×Ļ
ج اÙĦ
ãģij ãĤĭ
à¸Ĭา à¸ķิ
ÙĪØ§ ÙĤ
à¹Ĥ à¸Ļ
ãģ¦ ãģĹãģ¾
اع ة
ãĤŃ ãĥ£
à¸į า
ÙĦا ÙĤ
ิ à¸ģ
ĠÑģ ов
ÑĢаРº
×Ļ׳ ×Ļ
ü ÄŁ
Ã¼ÄŁ ü
×§ ×ij
à¹Ī à¸Ńà¸ĩ
Ġger çek
à¸Ĺ ั
ов аниÑı
×ŀ ׼
س ة
×Ļ× £
le ÅŁ
Ùħ ؤ
ĠìĿ ĺ
à¸IJ าà¸Ļ
ĠÑģ об
Ġêµ Ń
ע צ
з в
ส à¸ĩ
ز ÙĦ
ãģı ãĤĮ
и ÑĢÑĥ
ت أ
п олн
ìĺ Ģ
ÙĨ Ø´
׼ ×IJ
Ùħ Ø´
à¸Ķ à¹Į
ÙĪ ÙĬÙĦ
à¹ģ à¸Ĥ
ãģ£ãģ¦ ãģĹãģ¾
но ÑģÑĤ
в л
Ùħ ÙĤ
را ج
å¤ ī
ë Ľ
â ¸
ì IJ
à »
á ļ
â »
ê Ļ
â §
ð Ĵ
ðĿ ĩ
Ġ×IJ ת
ĠÙĦ ÙĦ
ĠØ£ ÙĨ
Ġ×ķ ×Ķ
ãģ« ãģ¯
Ġ×Ļ ×©
ت Ùĩ
ÃŃ nh
ÙĬ ات
Ġ×ij ×ŀ
à¸Ļั à¹īà¸Ļ
à¸Ļ à¹īำ
Ãł o
à¸ķ าม
ãģ® ãģ¯
d ır
Ġn ghi
ặ t
×ŀ ×Ļ×Ŀ
ãģ¦ ãģĦãĤĭ
Ġ×ij ת
หร ืà¸Ń
Ġس ÙĬ
ãģª ãĤī
à¹Ĥà¸Ķ ย
ı yor
à¸Ńี à¸ģ
á»ĩ nh
Ñĭ м
à¸Ĺุ à¸ģ
Ġ׾ ×Ĺ
Ġ×Ķ ×¨
Ġ×Ķ ×Ļ
à¸ŀ ระ
à¹Ģว ลา
ĠØ º
ẫ n
m Ä±ÅŁ
׼ ×Ķ
á»ij n
ãģ§ ãģĹãĤĩãģĨ
ãĥ ¢
à¸Ľ ี
ס ×Ļ
ãģĵ ãĤį
Ġ׾ פ
ร à¸ĸ
ê¸ Ī
à¸ģ วà¹Īา
ë ¬´
á»į ng
ãĤĵ ãģ§
ãĤĪãģĨ ãģª
á»ĵ i
ãĤ ¬
ส à¹Īà¸ĩ
×Ļ׳ ×Ķ
à¸ĸ ูà¸ģ
à¸Ī ัà¸Ķ
Ġ×Ķ ×Ĵ
ãĥ ľ
×ŀ ×ķת
ÙĪ Ùĥ
ëĭ ¨
ĠØ «
ãģ® ãģĮ
à¹Ģห à¹ĩà¸Ļ
ع ا
à¸Ļ ิ
Å ŀ
à¸Ń ะ
ãģĪ ãĤĭ
Ø« ÙĦ
ØŃÙħ د
à¹Ģà¸ģ ิà¸Ķ
פ שר
פ ×Ķ
ม ิ
ئ ÙĬس
à¸Ĺำ à¹ĥหà¹ī
×¢ ×ĵ
ìĭ ¤
à¸Ĭà¹Īว ย
ĠاÙĦÙħ ÙĨ
ز ÙĬ
ع ÙĬ
Ġ׼ ×IJ
ạ nh
á» ¹
ãĤĵ ãģª
ส ู
צ ר
Æ°á»Ľ ng
×ķ ×ķ×Ķ
à¹Ĥ ล
ĠاÙĦ Ùĩ
ว า
หล าย
Ñī е
à¸Ĥ à¹īà¸Ń
à¹īà¸Ń ย
ب ط
ка Ñı
ĠØ ¢
Ġи Ñģ
ĠاÙĦ غ
à¸ģ า
à¸Ļ à¹Īา
ÙĬ ÙĪ
×ij ×ķר
á»ħ n
ว à¸ĩ
×Ļ× ĸ
ì² Ń
н им
ëŁ °
×Ĵ ×ķר
ص ØŃ
ÙĦ ÙĪ
×Ĺ ×ķת
ส ุ
رÙĬ ÙĤ
ס ×ĺ
Ġ×ŀ ×¢
ãĥĨ ãĤ£
à¸Ħ ิà¸Ķ
ãĤį ãģĨ
à¹Ħ ล
à¸Ļ à¹Į
á»ı i
ÑģÑĤÑĢ Ð¾
ส à¸Ķ
ส าร
ÙĪÙĦ Ø©
ầ m
ร à¹Īว
รà¹Īว ม
ร ุ
ĠاÙĦس ÙĬ
ìĺ ģ
Ġ×ŀ ×ij
פ ×ĺ
à¸ķิ à¸Ķ
×ĺ ×Ļ×Ŀ
Ġë ¬´
ÙĤد Ùħ
Ġdü ÅŁ
ائ ÙĦ
м Ñĭ
ØŃ س
ÙĪ Øµ
×Ļ×§ ×Ķ
ãģ§ãģ¯ ãģªãģĦ
à¹Ģ หม
оÑĢ ÑĤ
í Ĩµ
ãģ IJ
к ÑĢа
ีย ว
ع ار
ئ ة
íĥ Ģ
ãģ«ãģª ãĤĬ
ج ة
ÙĪÙĤ ع
ÑĮ Ñı
×ķצ ×Ķ
ש ×Ŀ
ب ÙĤ
Ġ×Ļ ×Ķ
ÙĬ Ø·
ım ız
д еÑĢж
×Ļש ר×IJ׾
غ ÙĬر
ร à¸Ńà¸ĩ
à¹Ģรีย à¸Ļ
Ġ×Ķ ×ĺ
หม าย
Ùħ Ùĩ
اÙģ Ø©
Ġо ÑĢг
ÙĪ Ùī
ãĥ© ãĤ¤
×ŀ ׳×Ķ
ĠÄij o
Ġг оÑĢ
اÙħ Ø©
æ¥ ½
Ø« ÙĬر
à¸ģิ à¸Ī
á»ĵ n
ÙĨ ب
ÑĢÑĥ д
ìĹ Ī
Ġ×Ĺ ×ijר
ÑĢаР¶
ạ ch
ت ÙĪ
à¹Ĥ ม
×ij ×Ļ×ij
Ġí Ĩµ
aca ģı
جÙĦ س
à¹Ģà¸Ľ ล
ว à¸Ķ
à¸Ń ล
ãģŁ ãĤĬ
à¸Ľ ัà¸į
Ġìķ Į
عر Ùģ
à¹Ħ à¸Ł
Ø£ Ø®
å¤ļ ãģĦ
à¸Ķ ัà¸ĩ
Ø´ Ùģ
ãģ£ãģ¦ ãģĦãģ¾ãģĻ
׼ ×ł×¡
ÑĨ е
еÑģ п
Ùħ اÙħ
à¸ŀื à¹īà¸Ļ
иÑĩеÑģ ки
خ د
Ùĥ ÙĪÙħ
Ġ×Ķ ×¨×IJש
ت اب
é£Ł ãģ¹
ื à¸Ļ
оÑĢ Ð¾
Ġb öl
×ķ×Ĺ ×ĵ
دÙĬ ر
ắ m
د ع
ãģķ ãģĽ
à¸ĺ ร
à¸ĺร รม
ãģĭ ãĤĤ
å¤ļ ãģı
r ä
س ع
×Ļ׾ ×Ķ
ض ر
ĠاÙĦ شر
×ĸ ×ķר
×¢ ×ijר
ạ m
алÑĮ но
ر ÙĨ
اÙħ ج
׼ ×ļ
d ıģ
д ен
ض ا
ÙĦÙĬ Ùħ
Ġê·¸ 룬
تÙħ اع
ار ÙĬØ®
à¹Ĥ à¸ķ
ĠÑģ ÑĢед
Ġ׳ ×ķס
ÙĤ بÙĦ
оÑĤ ов
le ÅŁtir
Ġм еÑģÑĤ
سÙĦ Ùħ
Ġ×¢ צ
ĠاÙĦس ÙĦ
еÑĤ ÑĮ
اب ة
н ак
สà¸ĸ าà¸Ļ
Ġ×ij ׳
à¸ļ ัà¸Ļ
׼ ׳
Ġö ÄŁ
ãģ¨ è¨Ģ
uy ến
di ÄŁ
áºŃ u
ÑĢ Ð°Ñģ
ãĤ· ãĥ§ãĥ³
n ız
×ķ×ĵ ×Ķ
ت س
Ùħ اÙĦ
à¹Ģห à¸ķุ
ย ว
à¸ŀ ัà¸ģ
ãģĦ ãģªãģĦ
Ġк аÑĩ
ล à¹Į
ר׼ ת
ÅŁt ur
×ŀ ×ķס
ãģ ¥
б ол
عÙħ اÙĦ
×ķר ת
ÑĨи он
ศ ึà¸ģ
ภı
ÑĢ ÐµÐ½
اس ÙĬ
ائ ر
à¹Ĥ à¸Ľà¸£
Ġse ç
غ ÙĬ
Ñį ÑĤ
ен н
ãģª ãģ®
×Ļש ×Ķ
×Ļפ ×ķר
ãģŁãĤģ ãģ«
ز ة
Ġç oc
ãĤ¯ ãĥª
ÑĪ ÐµÐ½
ãĤı ãģij
رÙĬ د
ĠÑĢ Ð°ÑģÑģ
Ùĥ ات
ส à¸Ńà¸ļ
ce ÄŁi
ãĤ¿ ãĤ¤
à¸ļ ร
ĠاÙĦ بر
׳ ×ķ×¢
r ün
را ض
ศา ส
à¸ķ รà¹Į
ãģį ãģŁ
×ķ׾ ×ĵ
еÑĢ Ð¸
íĹ ĺ
ắ p
ت عÙĦ
Ùĥ د
иÑĤелÑĮ но
Ø· Ùģ
Ġав ÑĤом
Ġ×ŀ צ
ÑĪи Ñħ
ات Ùģ
ĠÑħ оÑĤ
Ùİ Ø§
ãģı ãĤĭ
×Ķ ×¤
à¹Ĥ à¸Ĺ
à¹ģ à¸ŀ
à¹Ī à¸Ńย
ĠاÙĦÙħ Ø´
à¸ģาร à¸ĵà¹Į
ани з
×Ķ ×ľ
ظ Ùħ
ย ุ
li ÄŁ
à¹Ħ à¸Ĥ
à¸ĸ ืà¸Ń
ö z
ãģij ãģ¦
à¹Ģ à¸ľ
ุ ม
ãĥĹ ãĥ¬
Ġ×Ķ×IJ ×Ĺר
خت ÙĦÙģ
ภİ
ÙĦا ØŃ
Ġdü zen
צ ×Ķ
س اء
×ķר ×ļ
×ķ×ĵ ×Ļ
ÑĢа ÑĦ
ÅŁt ır
ãģ« åħ¥
ãģĪ ãģ°
ص ÙĪÙĦ
ĠÐľ оÑģ
ا Ùĩر
ãģ£ ãģ
ĠлÑİ Ð±
×Ļ×¢ ×Ķ
Ġ×Ķ×ŀ ×§
สิ à¸Ĺ
สิà¸Ĺ à¸ĺิ
×Ļ׳ ×Ŀ
ÙĦا Ùģ
à¸ŀัà¸Ļ à¸ĺ
×ķ×IJ ×Ķ
ม ั
à¸Ĥ à¸ĵะ
д оÑĢ
ãģ¨ ãģª
à¸ģระ à¸Ĺ
ac ı
×ķ׾ ×ķ×Ĵ
Ñĥ ÑĪ
ãĥ¥ ãĥ¼
ãĥ ¦
Ùħ ست
Ġa ÅŁ
ש ק
פ ת×Ĺ
าย à¸Ļ
í ĩ
ë ¢
ï ·
í ī
ì µ
ì ¬
ðĿ Ľ
ì Ĵ
ë Ļ
ê §
á ĸ
â ¨
â ±
á ĺ
ð ĸ
à ł
á Ķ
ðIJ Ń
ữ ng
Å© ng
Ġ×Ķ ×ª
ĠاÙĦ ا
Ġ×ŀ ת
à¸ĸ ึà¸ĩ
ò n
á»ĭ nh
нÑĭ м
Ġc ả
à¸Ķ ู
Ġ à¹ģà¸ķà¹Ī
Ġ×ij ×Ķ
ó i
ãģ¨ ãģĹãģ¦
ú ng
ĠØ °
Ġ×Ķ ×ł
Ġب ÙĨ
ÙĦ اÙĦ
à¹Ħ à¸Ĺย
á»ĩ p
t ı
ม ัà¸Ļ
ằ ng
á»ij t
к ом
à¸ĭ ึà¹Īà¸ĩ
à¸Ħร ัà¸ļ
à¸ļ à¹īาà¸Ļ
ĠاÙĦ ÙĬ
l ü
ÙĪ Ø³
ãģł ãģ£ãģŁ
à¹Ģ à¸ĩ
Ġê³ µ
н Ñĥ
ãĤĪ ãĤĬ
м Ñĥ
à¹Ģà¸Ĥ า
ãĤ Ģ
ни е
ãģ«ãģª ãĤĭ
áºŃ y
ĠÙĪ Ø§
ëł ¤
ש ×ķ
á p
×ĵ ×ķ
ãģ§ ãģĹãģŁ
ع ض
Ñģк ой
æĦŁ ãģĺ
ÑİÑĤ ÑģÑı
Ġ×Ļ ×Ľ×ķ׾
ãĤĵ ãģł
в и
à¹Ģล à¹Īà¸Ļ
ìĿ´ ëĭ¤
ĠÙĦ Ùĩ
à¸Ħ ืà¸Ń
ت Ùĥ
Ùħ ÙĥÙĨ
a ģı
׳ ×ĵ
ë¯ ¼
à¹Ħ ว
สำ ห
สำห รัà¸ļ
Ñģл ед
t ır
ĠÙĦ ÙĬ
ĠاÙĦع ÙħÙĦ
×ij ×ķת
×ij ×Ļ×Ŀ
à¸Ħ ำ
à¹Ģà¸Ħร ืà¹Īà¸Ńà¸ĩ
lı ģı
ืà¸Ń à¸ĩ
ج د
íŀ Ī
ìĭ ¬
×¢ ×ķת
ส ิà¸Ļ
Ñĩ и
ر ض
à¹Ģà¸Ľ ิà¸Ķ
à¸Ħ à¹Īา
ìĦ ł
ÙĪØ± Ø©
×§ ×ĺ
ìľ ł
ع ÙħÙĦ
×IJ ×Ļ×Ŀ
׾ ×Ļ×Ŀ
à¹ĥห à¸į
à¹ĥหà¸į à¹Ī
ừ a
á»į i
ãģ ¶
ÃŃ ch
ãĥĩ ãĤ£
×ķר ×Ļ×Ŀ
Ñģ о
ìķ ½
ов а
Ñĩ аÑģÑĤ
à¹Ģà¸Ī à¹īา
п ÑĢо
Ġ×ŀ ×Ĺ
ãĥ İ
×ķ×Ļ ×ķת
Ġд е
ë§ Ī
ì§ ģ
×Ļפ ×Ķ
ĠاÙĦع اÙĦÙħ
ë¥ ´
ר×IJ ×Ķ
uy á»ĥn
×¢ ×Ļ
ม ืà¸Ń
Ø¥ ÙĨ
ร ู
ĠØ ²
×Ļ ×ķ×Ŀ
à¸ķ à¹īà¸Ļ
ãģ¦ ãģĦãģ¾ãģĻ
Ùħ اÙĨ
ĠÐ ¥
à¸Ľà¸£à¸° à¹Ģà¸Ĺศ
á» ³
׾ ×ij
à¹Ģà¸Ķ à¹ĩ
ãģŁ ãģ¡
à¸Ĺี ม
à¸Ļ ะ
ìĹ °
Ġìł Ģ
ÙĦ Ùĩ
ợ i
ĠاÙĦ ز
د ار
ãĤ³ ãĥ³
м ин
à¹ģห à¹Īà¸ĩ
à¸Ķ ัà¸ļ
׼ ר
ж а
íĸ Ī
×ŀ ×ĸ
ợ i
à¸Ķ า
Ġع بد
à¹ģ ร
×IJת ר
×¢ ׳×Ļ
à¹Ģ à¸Ħ
×ķצ ר
ì§Ģ ë§Į
ائ Ùħ
أ س
uy á»ģn
Ġ×IJ ׳
׊׳×ķ
×ĸ ×Ļ
ร à¹īาà¸Ļ
ĠÐł оÑģ
ĠÐłÐ¾Ñģ Ñģ
رب ÙĬØ©
t ür
ãĤĭ ãģĵãģ¨
ظ ر
б Ñĭ
à¸Ĺีà¹Ī สุà¸Ķ
Ġצ ר
èĩª åĪĨ
л аÑģ
ĠÑı в
ĠÑıв лÑı
à¸ŀร à¹īà¸Ńม
à¸Ńา à¸Ī
à¸ļริ à¸ģาร
Ġç ı
ëį ĺ
ĠاÙĦÙħ ست
ت ش
ש ×ķ×ij
ãĤ ´
Ġyap ıl
ĠاÙĦ ذ
ุ à¹Īม
à¸ĸ à¹īา
ìĦ ¤
ì° ¨
в аÑĢ
à¹Ģà¸ŀ ิà¹Īม
Æ°á»Ľ i
Ùĥ س
à¸Ńย าà¸ģ
ãģ¦ ãĤĤ
Ġг од
ÙĬ ار
à¸ķ à¸Ńà¸Ļ
Ġиг ÑĢ
à¹Ħà¸Ķà¹ī รัà¸ļ
ĠاÙĦÙħ ر
ÙĤ ت
Ġë ĺ
Ġëĺ IJ
ẩ n
ãģĻãĤĭ ãģĵãģ¨
×Ĵ ×Ŀ
Ġ×ij ×ij
ت د
ÙĪ Ø§Ø±
ãĤ ®
п ол
Ġм ог
تر Ùĥ
ÙĪ Ø«
Ġç ık
ا ة
à¹Ģà¸Ķ ียว
มี à¸Ħวาม
Ġ×ŀ ×Ĵ
ص Ùģ
ĠТ ак
Ġ׼ ת
×Ļ×ĵ ×Ļ
ов оÑĢ
ầ y
สิ à¹Īà¸ĩ
ب ت
ür ü
ÙĨ ج
หล ัà¸ģ
×Ļ×Ķ ×Ŀ
ÙĤ ص
з Ñĭ
×Ľ×ª ×ij
ư u
m ız
ĠìĦ ¸
л ог
Ùħ ÙĬÙĦ
ÙĬ ج
íĴ Ī
à¸ŀ à¸ļ
ห ัว
з на
ר ק
à¹Ĥ ร
Ġ×ij ס
ĠBaÅŁ kan
ĠëĶ °
à¸Ń ัà¸Ļ
ีà¹Īย ว
н еÑģ
à¹Ģà¸Ķ ิà¸Ļ
ÙĬ اÙĨ
×ķ׾ ×Ļ
ا خت
צ ×ķת
ãģĵ ãģĵ
ĠاÙĦ اÙĨ
ĠпÑĢо ÑĨ
ãģ¾ ãģł
׼ ס
ĠاÙĦ Ø¢
ÙĬ ز
ĠاÙĦد ÙĪÙĦ
Ġíķĺ ëĤĺ
ض ع
ê» ĺ
ÅĽ wi
ย ิ
ãģ¡ãĤĥ ãĤĵ
ĠÙħ Ø´
à¸ĺ ี
ãģ¨ ãģį
׳×Ļ ×ķת
Ġë ¯
Ġë¯ ¸
Ġs ı
ëĭĪ ê¹Į
Ġп л
غ ÙĦ
à¹ģ รà¸ĩ
ب ÙĬر
ãģĤãĤĬ ãģ¾ãģĽãĤĵ
ê· ¼
Ġy üz
ĠdeÄŁ er
åł´ åIJĪ
á» ¡
м аÑĤ
รา à¸Ĭ
ÙĪØ± ÙĬ
ж ен
ãģ¾ ãĤĬ
ãģ® ä¸Ń
×Ļ×ĵ ×¢
à¸Ń ุ
à¸ļ à¸Ńล
à¸Ľà¸±à¸į หา
ز Ùħ
ÄŁ a
à¸Ń ืà¹Ī
à¸Ńืà¹Ī à¸Ļ
п л
Ġне обÑħодим
׼ ×ij
à¹Ģ ศ
קר ×Ķ
ì² ĺ
ëł ¨
×ŀ×§ ×ķ×Ŀ
jÄħ c
Ùĩ ÙĦ
Ġ×¢ ×ij×ķ×ĵ
à¹Ħม à¹ī
à¸ģล ัà¸ļ
×ķ׼ ׾
×§ ×ĵ
اÙĦ ÙĬØ©
ر Ùĩ
ãģij ãĤĮãģ°
ĠÙĨ Ù쨳
ãĤ¢ ãĥ«
ìĹ Īëĭ¤
×§ ×ķר
н еÑĢ
ب اب
ãĤ ¶
سب ب
ÙĦ ÙĬÙĦ
ص ÙĨ
ص در
ế m
à¸Ĭà¹Īว à¸ĩ
ØŃ ÙĨ
Ġ×ij ×Ĵ
×ŀ ×ķ×¢
׾ ×Ĺ
大 ãģį
ت ب
н еÑĤ
×Ļ×ij ×Ķ
б л
ãĥĹ ãĥª
اص ة
ãģ¤ ãģij
×Ļ×ŀ ×ķש
ãģĮ ãģĤ
ëĭ ´
ãģĭãĤĤ ãģĹ
ãģĭãĤĤãģĹ ãĤĮ
ãģ¡ ãĤī
×ij ×ĺ
Ġba ÄŁ
×Ļ×Ĺ ×¡
×ij ×ķ×¢
ล ี
פע ×Ļ׾
им и
g ÅĤ
Ġим е
خد اÙħ
×IJ ×Ļר
Ġy apt
ãģ¨ ãģĦ
à¸ĩ à¹Īาย
׾×Ļ ×ķ
ØŃد Ø«
را ÙĤ
ĠÄIJ i
اد ر
ãģĵãģ¨ ãĤĤ
×ij ×Ļר
Ġв з
ض اÙģ
ת ×ķ׼
ÑĢ Ð¾Ð¼
ر ات
à¹Ģà¸Ĺ à¹Īา
ãģĺ ãĤĥ
ãģĿ ãģĵ
اج تÙħاع
à¹īà¸Ń à¸Ļ
ÙĤ Ùħ
ë³ ¸
Ä ŀ
ש ×Ļ×ķ
×ij ׳×Ļ
ìľĦ ìĽIJ
à¹ģ à¸Ī
×Ĺ ×ķר
دÙĬ ÙĨØ©
ت ط
ằ m
ò a
ย à¸Ńà¸Ķ
Ġëĭ ¹
สุ à¸Ĥ
×ĵר ×ļ
د ÙĨ
س ÙĬÙĨ
ÙĪÙĤ Ùģ
ÑĨ Ñĭ
г оÑĤов
еж дÑĥ
à¸ŀ วà¸ģ
اÙĤ تص
اÙĤتص اد
cz ÄĻ
ni ÄĻ
ÑĢ ÐµÐ±
ØŃ ÙĪ
à¸Ĺ à¹Į
ãĤĪ ãģŃ
д ж
à¸ģล à¹Īาว
دÙĬ Ø«
ãĤ³ ãĥŁ
ÙĤ ÙĪÙħ
Ġت ØŃ
à¹Ģ à¸ķิ
اÙģ Ø¸
à¸Ī ุ
رÙĬ اض
×ŀש ×ļ
à¹Ĥ ย
еÑĢ Ðµ
ãģ¿ ãģŁãģĦ
ìĿ´ ëĿ¼
ĠاÙĦÙħ ÙĪ
ĠÑģÑĤ о
à¹Ģรà¹ĩ ว
Ġд еÑĤ
ĠÑģ дел
à¹Ģà¸Ĭ ืà¹Īà¸Ń
פ ׳×Ļ
ÙĪØ¶ ÙĪØ¹
×ij ס
à¹ģ à¸Ķ
ó c
ริ ม
ÑĢаР´
ìĪ ł
ãĥ¼ãĤ º
ãģ« ãģĬ
и но
פ ×Ļ׾
à¸Ĭั à¹Īà¸Ļ
×Ĺ×ĵ ש
à¹Ģà¸Ļ ืà¹Īà¸Ńà¸ĩ
׳ ×Ļס
غ رب
ãĤ¸ ãĥ£
ส ัà¸ĩ
à¹Ģ à¸Ĺีà¹Ī
à¹Ģà¸Ĺีà¹Ī ยว
ëŁ ¼
à¹ģ à¸Ł
ãĥ¼ãĤ ·
ãĥ¼ãĤ· ãĥ§ãĥ³
Ġвоз мож
جÙħ ÙĪØ¹
×ijר ×Ļ×Ŀ
ãĥĪ ãĥ©
ĠкаÑĩ еÑģÑĤв
Ø· ÙĬ
ÑĤ Ñı
צ ×ķ×¢
ģ ını
ع ÙĦÙī
ا ذ
ÙĪØ§ÙĤ ع
Ùħ ÙĪØ§
ائ ÙĬÙĦ
к ол
á»ģ m
à¸ľà¸¥ ิà¸ķ
×Ļ׳ ×ĺר
س Ùĥ
ש ×Ļר
ศึà¸ģ ษา
à¸ļ ั
Ñĩ аÑģ
×ķפ ×Ķ
×Ļפ ×ķ׾
ĠاÙĦس اب
رÙĬ ب
ĠاÙĦ بÙĬ
ãĤ¹ ãĥĨ
Ñĩ ен
à¹ģ à¸ľ
Ġ׳ ש
ز ÙĬد
ØŃ اد
ëį Ķ
رÙĪ Ø¹
à¸Ĺุ à¸Ļ
ส มา
c zeÅĦ
×Ļ×ĵ ×Ķ
ãģ§ ãģĤ
Ġçoc uk
خ ب
à¸ļ าย
à¸Ľà¸£à¸° à¸Ĭา
×ŀש ׾
ãģª ãģĭ
à¸ģ าย
ãĥģ ãĥ£
аÑĢ Ð¸
ĠÑĩ а
à¸Ķ ำ
à¸Ĺั à¹Īว
Ñĥ Ñħ
Ġö z
Ġì¢ ĭ
ج رÙĬ
ائ ÙĤ
à¸ł ัย
ط ار
د ارة
Ä© nh
Ø« ÙĨ
zell ik
اÙĦ ت
Ġg eli
ãĥķãĤ ©
ол од
رب ع
שת ×ŀש
à¸ļร ร
íĿ ¬
Ġü rün
Ġê·¸ ëłĩ
ศาส à¸ķรà¹Į
ãģ ľ
×Ļ×ij ׾
ĠпÑĢед ÑģÑĤав
سط ÙĬÙĨ
ãĤĴ 使
Ġпом оÑī
×ķ×§ ר
ãĥ¯ ãĥ¼
Ġyö net
×Ļ×§ ר
à¸Ĥ า
еÑĢи ал
ØŃ Ùģ
Ġ×Ļ ×¦
à¸Ĺ ิ
å£ ²
à¸Ļ à¸Ńà¸ģ
×ķ׼ ר
íĻ ľ
á»§ y
ĠاÙĦÙĤ ر
×Ļ×ij ×ķת
ÅĽ ni
Ùħ شار
ượ t
ĠÙĦ دÙĬ
ÑĤ ел
ĠØ¥ ÙĦÙĬ
عÙĦ ÙĪÙħ
ìķ ĺ
в иÑĤ
à¸Ħ ะ
yr ı
ãģ¨ ãģ£ãģ¦
à¹Ģ à¸ī
à¸ĸ าม
ÙĤ ار
عÙĦ اÙħ
ặ ng
Ùħ ÙĴ
×Ļ×ŀ ת
سب ة
ãĤ¯ ãĥ©
×ķס ×£
ĠпÑĢ Ð¸Ð½
ãģĦ ãĤį
س اس
عت بر
วิ à¸Ĺย
วิà¸Ĺย า
س Ùĥر
ãĤ· ãĥ§
ãģ ģ
ัà¸ģ ษ
×ij ×ķ×Ķ
ห ย
ãģ¾ ãĤĮ
ĠоÑĢг аниз
каз ал
ĠÑģв Ñıз
uy ết
ĠпÑĢо из
Ġ×§ ×ĺ
à¹ģà¸ģ à¹ī
п ÑĥÑģ
Ġê·¸ ê²ĥ
ëĬ IJ
л екÑģ
ãĥ¼ãĥ Ĺ
à¸ķ ำ
ת×Ĺ ×Ļ׾
à¸Ńà¸ĩ à¸Ħà¹Į
Ạµ
׳ צ
Ø£ Ø´
Ø´ Ùĩ
ย ะ
à¸ģ à¸İ
ĠاÙĦØ¥ سÙĦاÙħ
ед ÑĮ
ãģ² ãģ¨
ëıĦ ë¡Ŀ
ãģ© ãģ®
Ñĥ в
еÑĩ ение
ĠاÙĦت ج
ãģ« è¡Į
Ġп озв
ãĤı ãĤĬ
ÙĦ اث
íķĺ ìĺĢ
Ġм аÑĢ
Ġkon uÅŁ
ãĥ¬ ãĤ¹
ãĤĴ æĮģ
ĠоÑģ нов
×Ĺ ×ij
ÙĪØ¬ ÙĪØ¯
פ ×ķף
в оÑĢ
Ġн ик
ãģĭ ãĤĭ
ÅŁtır ma
×Ļס ×ĺ
Ø£ ÙĦ
ห à¹Į
и она
лÑĮ н
Ġг оÑģ
ĠÐľÐ¾Ñģ к
ÑĢ Ð¾Ð±
×ķ×IJ ×Ļ
ãģĬãĤĬ ãģ¾ãģĻ
ãģ£ãģ ±
к л
à¸Ļ à¸Ķà¹Į
رÙĬ Ùģ
اس ب
ĠÑĢ ÐµÑĪ
Ġд ол
ãģ¹ ãģį
×Ļ×ij ×ķר
м еÑī
Ġна ÑĪ
à¹ģ à¸Ľà¸¥
ÑĢ Ð¸ÑĤ
кÑĥ Ñģ
и ÑĢа
аÑĤ ÑĥÑĢ
ÙĪØ§ صÙĦ
à¹Ģà¸ľ ย
à¸Ń ำ
à¹Ģà¸ģ ิà¸Ļ
غ Ùħ
ãģĻ ãģİ
lı kl
ÅĦ sk
ê² ¬
×Ļ׼ ×Ķ
׊ש×ij
ÙĪØ± ÙĬØ©
Ġд ейÑģÑĤв
×Ĺ׾ ×ĺ
Ġ׾ ×ŀ×¢
צ׾ ×Ļ×Ĺ
еÑĩ а
Ùģ Ø§Ø¹
×Ĵ ×Ļ×ĵ
áºŃ m
ÄĻ b
ش ع
ãģı ãĤĬ
à¸ŀ ุ
ед еÑĢ
à¸Ĥ à¸Ļ
à¸Ħ าร
ĠболÑĮ ÑĪ
ãģı ãģªãĤĬ
à¸ĵ า
×ĵ ×ķ×Ĵ
Ġм н
ä¸Ĭ ãģĮ
ç¶ļ ãģį
ฤ ษ
ภĨ
Ø® ÙĬ
à¹Ģà¸Ĺ à¸ŀ
สั ม
à¹Ģส à¸Ļ
à¹Ģสà¸Ļ à¸Ń
ãĥ ´
Ġи ÑģÑĤ
با شر
ĠÑĥ ÑĢов
×ŀ ×ķ×ĸ
ab ı
wa ż
×ķצ ×IJ×Ķ
ÑĤ веÑĢ
à¸ŀัà¸Ļà¸ĺ à¹Į
׳ ×Ĵ×ĵ
ãĤĭ ãģĵãģ¨ãģĮãģ§ãģį
ĠÑĤÑĢ ÐµÐ±
à¸ģร ุà¸ĩ
ØŃت اج
à¹Ģ à¸Ħล
ã Ĩ
ÄĻ tr
Ġszcz eg
Ġר ש
à¸Ĺ à¸ĺ
Ġн ек
Ġнек оÑĤоÑĢ
в ÑĪ
Ð ¬
à¹Īว ย
ล ุ
б ÑĢÑı
หม ูà¹Ī
à¹ģ à¸ķà¸ģ
ר׼ ×Ļ×Ŀ
Ġí ĸī
ã i
Ùĥر Ø©
â Ń
í IJ
ã į
á ģ
â ®
â ¥
ì ®
à ¿
â ¿
á Ĥ
á ¤
â ł
í Ł
ðIJ į
ðIJ °
ðĿ Ĩ
ðŁ Ī
Ġ×¢ ׾
Ġع ÙĨ
ĠÙħ ع
Ġ×ĸ ×Ķ
ĠÙħ ا
Ġm Ãł
Ġd ụ
á»ĩ c
а Ñħ
s ı
íķĺ ê³ł
Ġ×ķ ×ij
ĠÐŁ о
×ķת ר
ĠÙĦ Ùħ
Ġ×ķ ׾
ãģĹãģ¦ ãģĦãĤĭ
Ġ×ŀ ×Ļ
Ġب ÙĬÙĨ
з а
ĠÙĥ اÙĨ
Ġ×Ķ ×Ļ×Ķ
ëħ Ħ
×IJ ×ķ
д и
ĠпеÑĢ Ðµ
d ı
Ġ׾ ש
Ġש ×ŀ
ãģĮ ãģĤãĤĭ
ãģĦ ãģĦ
ÑĢ Ðµ
×§ ×ķ
и ли
м е
ÙĬ ت
ãģ§ ãģĤãĤĭ
Ġв о
à¹ĥ หม
à¹ĥหม à¹Ī
Ġש ×ij
Ġ à¹Ĥà¸Ķย
ÙĬ Ùĩ
ãģ§ãģĻ ãģĮ
ãģ¨ ãģ¯
ר ×ķ
Ġ à¸ĭึà¹Īà¸ĩ
ãģ§ãģį ãĤĭ
м о
à¹Ģà¸ŀ ืà¹Īà¸Ń
צ ×ķ
×ĺ ×ķ
ìķ Ī
Ġh á»į
à¹Ģà¸ĩ ิà¸Ļ
ĠاÙĦ ب
Ġ มี
ë¬ ¼
Ñģ е
ëĵ¤ ìĿ´
Ġë§ IJ
Ġl Ỽ
a ÅĤ
×Ĺ ×ijר
Ġd á»±
ÙĬ Ø«
Ġth á»ĭ
à¸ģà¹Ī à¸Ńà¸Ļ
Ġ×ij ׼׾
ãģ ¸
ã썿ĢĿ ãģĦãģ¾ãģĻ
ả nh
ย า
Ùģ Ø§
ส ี
à¸ķ า
ë² ķ
ãĥª ãĥ¼
รา à¸Ħา
Ġ×ķ ׾×IJ
ãģ¨ ãģĵãĤį
à¹Ģล ืà¸Ń
di ÄŁi
ÙĪ Ø§ÙĨ
Ġ׾×Ķ ×ª
รว ม
פ ×Ļ×Ŀ
à¸ľ ม
ж и
c ı
ÑĢ Ð¾Ð´
Ġkar ÅŁÄ±
×Ĵ ×ķ
ãģ« ãģ¤
ãģ«ãģ¤ ãģĦãģ¦
r Ãł
×Ļ×ķת ר
ĠìĨ Į
×§ ×Ķ
ÑģÑĤв о
ãģij ãģ©
g é
à¸Ķ à¹īาà¸Ļ
çļĦ ãģ«
ĠÙĬ ÙħÙĥÙĨ
ìĨ į
ÙĬ Ùĥ
à¹Ħว à¹ī
Ñģки й
ì m
Ġ׾×IJ ×Ĺר
à¸Ńา หาร
Ġà¹Ģ à¸ŀ
รา ะ
ล ูà¸ģ
ÑģÑĤ а
Ġìľ ł
ÙĤ ÙĪÙĦ
б оÑĢ
Ñģк ого
หล ัà¸ĩ
à¸Ĥ à¹Īาว
à¹Ģม ืà¸Ńà¸ĩ
ê° ģ
t Ãł
ÙĬ ÙĬÙĨ
عر ض
ë° ©
Ġëı Ļ
Ġà¹Ģ à¸Ľ
Ġà¹Ģà¸Ľ à¹ĩà¸Ļ
ç i
li ÄŁi
ìĹIJ ê²Į
ãĤ¿ ãĥ¼
Ġ׾ ת
פ ×ķת
à¸Ĥ à¸Ń
ر س
ìł IJ
à¸ľ à¹Īาà¸Ļ
ÑĦ и
ج ÙĨ
ì¢ ħ
Ġ×Ķ ×¤
Ġn go
á»ĭ a
Ġtá» ķ
Ġê·¸ 리
à¹Ģม ืà¹Īà¸Ń
ذ Ùĥر
ìĸ ij
ìĹ Ń
×ĺ ׾
k ı
Ġع ÙħÙĦ
Ġع ÙĨد
à¸ĭ ืà¹īà¸Ń
Ġê± °
в е
r ü
à¹Ģ à¸Ńา
ส à¹Į
à¸Ī à¸Ļ
ס ת
Ġgi ả
ãĤĭ ãģ¨
à¸ģำ ลัà¸ĩ
н ей
à¸Ī ริ
à¸Īริ à¸ĩ
Ġë į
Ġëį Ķ
à¸Ħà¹Ī ะ
ì n
Ġsü re
Ġqu y
à¸ļ าà¸ĩ
åıĸ ãĤĬ
ר ×Ĺ
×ij ת
ãģĮ ãģĤãĤĬãģ¾ãģĻ
ר ש
ìĹIJ ëĬĶ
Ġ×IJ פשר
ay ı
ãģĮ ãĤī
ØŃ ب
ан Ñģ
س ÙĪ
ĠпÑĢ Ðµ
د ÙĪ
ãģ« ãĤĪ
à¹Ģà¸ģ ม
สู à¸ĩ
m akt
makt ad
maktad ır
Ġön em
×Ļ×ŀ ×Ļ×Ŀ
б о
ÙĪ ÙĬØ©
รู à¸Ľ
à¹Ĥล à¸ģ
Ùħ ÙĬع
ÑģÑĤ Ñĥп
à¹Ĥ à¸Ń
دÙĬ ÙĨ
ì¤ ij
ãģĹãģ ı
à¹Ģส ีย
в Ñĭ
Ùħ ت
íĺ Ħ
ãĥIJ ãĥ¼
ا ش
ק ס
Ġtá» ¥
ล à¸Ķ
Ùģ Ø©
í ijľ
ر ج
k ÅĤad
ĠÅŁ ey
ĠØ£ Ùħ
Ġà¹Ģ ม
Ġب ÙĦ
Ñģ каÑı
ãģ¨ ãģ®
Ġìĭ ¤
ấ m
ห à¹īà¸Ńà¸ĩ
à¸Ĭ ม
d ü
Ġç ek
Ġê³ ł
×Ĵ ×ij
à¸Ĭี วิ
à¸Ĭีวิ à¸ķ
Ù쨶 ÙĦ
ภ¯
ç ı
Ġب Ø´
ĠÙĩ ÙĨا
ãģį ãģ¾ãģĹãģŁ
t ü
Ġìĺ ģ
ĠTür k
к ÑĤ
פר ס
ãģ¨ãģĦãģĨ ãģĵãģ¨
í ĶĦ
à¹ģร à¸ģ
ר ×ķף
Ġar as
×ŀצ ×IJ
Ġtá» ī
س ا
à¸ŀ à¸Ń
ĠاÙĦÙħ ØŃ
ãĥ ¤
ĠاÙĦ است
Ùģ ÙĨ
×Ļ×ŀ ×Ķ
ر ت
ãģ¨ ãĤĤ
Ġна Ñģ
п ÑĢи
Ġ×Ĺ ×ķ
и ла
ÙĬ Ø´
Ġgö z
Ġ×ij ׳×Ļ
ım ı
ĠÑĤ еÑħ
Ġh á»Ļ
غ ر
к он
اØŃ ت
Ġ à¸ŀ
à¸Ń à¸Ńà¸Ļ
à¸Ńà¸Ńà¸Ļ à¹Ħล
à¸Ńà¸Ńà¸Ļà¹Ħล à¸Ļà¹Į
Ñħ о
Ñı в
à¹ģ สà¸Ķ
à¹ģสà¸Ķ à¸ĩ
à¹Ģà¸ŀ ียà¸ĩ
ÑĤ ов
ا ÙĬ
Ġ×Ķ ×ĵ
Ġ×ķ ׼
ãĤī ãģĦ
×ķפ ף
Ġë ¶Ī
ล à¸Ńà¸ĩ
Ø· اÙĦ
Ġн и
ĠÙħ ست
ế c
Ġש ׼
ĠëķĮ 문
วัà¸Ļ à¸Ĺีà¹Ī
×Ļ׾ ×ĵ
ØŃ ا
е ÑĨ
Ġc ứ
×ĵ ×ķר
ĠÙħ ØŃ
ר׼ ×ij
بÙĬ ع
ни и
ĠاÙĦØ£ ÙĪÙĦ
à¸Ħว ร
ã썿ĢĿ ãģĨ
ĠС о
ائ ÙĬØ©
ر اء
оÑģ об
Ġب Ø£ÙĨ
×¢ ×ķ×ĵ
ĠÑĤ е
ãģĵ ãģĨ
ÑģÑĤ ÑĢа
ай н
Ġsö z
ت ÙĨا
à¸Ń ิ
ặ p
ĠìķĦ ëĭĪ
íķ Ń
Ġר×IJ ש
Ġ à¹Ħà¸Ķà¹ī
Ġ×Ĵ ×ĵ
Ġס פר
обÑī е
ĠÙĪ Ø¥
ada ÅŁ
ãģ¡ ãĤĩ
×§ ×ķ׾
ÑĢ ÐµÐ·
ĠdÃ¼ÅŁ ün
Ġ×ij ×IJ×ŀ
Ġìĸ´ ëĸ
ער ×ij
н ее
ĠÑģÑĤÑĢ Ð°Ð½
س اÙĨ
yn ı
ĠاÙĦر ئÙĬس
ãģĹãģ ª
Ġ׳ ת
ãģ«ãģª ãģ£ãģŁ
g ü
åıĹ ãģij
׾ ת
ìł Ī
ëĬĶ ëį°
Ø® ÙĬر
à¸ķà¹īà¸Ńà¸ĩ à¸ģาร
ĠÙĦ Ø£ÙĨ
Ġch á»ĭ
ÙĪ Ø©
à¹ĥ ส
ë¶Ģ íĦ°
íķĺ ë©´
ữ u
à¹Ģหม ืà¸Ńà¸Ļ
б еÑĢ
ĠìĿ´ ìļ©
ĠÑģ еб
wiÄĻ ks
Ġ׳ ×¢
ÑĤ ÑĥÑĢ
Ġngh Ä©
ש ×ķ×ĺ
ti ÄŁi
Ġde ÄŁi
×IJ ×ij
Ġ×ŀ ×ŀ
ãĥĹ ãĥŃ
wa ÅĤ
à¸Ī ึà¸ĩ
Ø® دÙħ
×IJ ×Ŀ
Ä±ÅŁ ı
cz Äħ
ר ×ĵ
ĠÑĢ Ñĥб
خر Ùī
ãģ® æĸ¹
Ġд енÑĮ
×Ĺ ×Ļ×Ŀ
еÑĤ е
ëĤ ľ
×IJ ×Ĵ
×¢ ×ķר
ë³ Ħ
åIJĮ ãģĺ
ãĤ ²
ר ×ļ
×ķש ×IJ
ìľ ¡
ا خ
צ ×Ļ×Ķ
á»± a
ãģĪ ãģ¦
ש×Ķ ×ķ
ан ÑĤ
ลา à¸Ķ
ин г
ë¡ ł
اع د
ÙĪ Ø³Ø·
Ġв оп
Ġвоп ÑĢоÑģ
Ùħ ÙĬÙĨ
à¸Ħ à¸ĩ
×Ļר ×Ļ×Ŀ
c ów
ê² ©
Ġê·¸ 룰
Ġì§ Ħ
Ġש ׾×Ķ
à¹Ģร ิà¹Īม
à¸Ĭ à¸Ńà¸ļ
д еÑĤ
ÑİÑī иÑħ
à¸ļ à¸Ńà¸ģ
æĢĿ ãģĦ
ع ÙĬد
ס ×ŀ
×Ĵ ×Ļ×¢
צ ×ĵ
ب ات
ĠëͰ ëĿ¼
à¸Ī ัà¸ĩ
ãģłãģij ãģ§
×¢ ×Ļר
ĠÑĩ ел
ĠÑĩел ов
ĠÑĩелов ек
ãĥĥ ãĥģ
à¹Ģà¸ģ ีà¹Īยว
à¸Ķ ิ
Ġפ ×¢
×Ļ×ŀ ×Ļ
ë° ĺ
خ ار
×ij ×Ļת
×¢ ×Ļ×Ŀ
ü yor
ãĤģ ãģ¦
к лад
Ġ à¸Īาà¸ģ
à¹Ģà¸Ħ ย
ส à¸Ńà¸ĩ
à¹ģ à¸Ħà¹Ī
ẫ u
หà¸Ļ ัà¸ĩ
ש׾ ×ķ×Ŀ
اÙĨ ÙĬØ©
åĩº ä¼ļ
åĩºä¼ļ ãģĦ
à¸ł าย
à¸ļา à¸Ĺ
à¸Ĭา ว
mu ÅŁ
Ġ׾ק ×ij׾
ãĤ· ãĥ£
Ġİ ÅŁ
×Ĵ×ĵ ×ķ׾
ج عÙĦ
ë³ Ģ
ยิ à¹Īà¸ĩ
à¸Ļ าย
à¸Ļ ีà¹Ī
วิ à¸ĺี
ãĤī ãģªãģĦ
ëł Ī
Ġ문 ìłľ
Ġ à¸ģ
à¸Ĺำ à¸ĩาà¸Ļ
à¹Ģว à¹ĩà¸ļ
ÑĦ е
楽 ãģĹ
สำ à¸Ħ
สำà¸Ħ ัà¸į
ر Ùħ
ãģķãĤĮ ãģ¦
Ġоб ла
ר×IJ ×Ļ
หม à¸Ķ
ÙĨ ÙĬØ©
ли н
Ġe ÄŁ
it im
ëł ¹
ص اÙĦ
ÅĽ l
à¸ľ ิà¸Ķ
ãĥŀ ãĥ³
åħ¥ ãĤĮ
à¹Ģà¸ķ à¸Ńรà¹Į
ار ÙĬ
ĠÐ ¦
d ür
ส วย
ë¦ ½
رÙĥ Ø©
Ġh ã
×Ļת ×Ķ
à¸Ĥ à¸Ļา
à¸Ĥà¸Ļา à¸Ķ
à¸Īำ à¸Ļ
à¸Īำà¸Ļ วà¸Ļ
ש ×ķ×§
Ġд ом
ì± ħ
ãģĭ ãģij
פ ×ķ׾
à¸Ĭ าย
Ñģ моÑĤÑĢ
Ñģл Ñĥж
ש ×IJ׾
кÑĢÑĭ ÑĤ
Ġìŀ ĺ
é«ĺ ãģĦ
ĠÑĢ Ñĥк
ÙĨ ص
д ав
ưỠ¡
ưỡ ng
ر اÙħ
×Ļ׳ ×Ļ×Ŀ
ãĥ© ãĥ¼
ëĦ ¤
Ġت ع
l ke
好 ãģį
æĮģ ãģ¡
Ġë§ İ
Ġy ük
ĠÑģоÑģÑĤ ав
енÑĤ ÑĢ
pe ÅĤ
à¹Ģà¸Ľà¸¥ ีà¹Īย
à¹Ģà¸Ľà¸¥à¸µà¹Īย à¸Ļ
íı ī
ãĤĦ ãģĻ
×Ĺ ×ĸ
×ijר ×Ķ
ë£ ¨
ìĶ Ģ
بØŃ Ø«
à¹Ģà¸ķ à¹ĩ
ów i
ب Ùĩ
ãģį ãģ¾ãģĻ
Ġ×¢ ×ŀ
×Ĵ ×ķ׾
ез д
ÙĬÙģ Ø©
สà¸Ļ à¹ĥà¸Ī
Ġת ׾
Ñı Ñī
Ġس ÙĨ
ĠÙĪØ§ ØŃد
ĠÑģ м
lad ı
ı ld
×Ļר ת
ีย à¸Ļ
ת×Ĺ ×ª
Ġж из
à¸ŀ ั
à¸ŀั à¸Ĵ
à¸ŀัà¸Ĵ à¸Ļา
à¸Ĭ ิ
ا Ø®ÙĦ
ãģ£ãģ¦ ãģĦãģŁ
รั à¸IJ
ãĤģ ãĤĭ
à¹Ĥ à¸ģ
ĠT á»ķ
Ġh akk
ر Ùģ
ìł Ģ
Ñģ об
ãģª ãģijãĤĮãģ°
Ùĩ ÙĪ
Ġë² ķ
ãĤ Ĩ
ĠاÙĦس عÙĪØ¯
Ġ×IJ תר
Ø§Ø º
Ġ׾ ×ĵ
à¹ģ à¸ķ
à¹ģà¸ķ à¹Īà¸ĩ
íĮ Į
Ñĥп иÑĤÑĮ
à¸ŀืà¹īà¸Ļ à¸Ĺีà¹Ī
×ij ת×Ļ
à¹ĩ à¸ģ
ÅĤ at
Ġê°ľ ìĿ¸
ìłķ ë³´
ÑĤ ал
Ġgü ven
Ġİ l
Ġê° ģ
Ġب ت
×ŀ ×ķ׳×Ķ
ĠاÙĦØŃ ÙĥÙĪÙħ
ÙĤ ات
à¹ģ à¸ģà¹Ī
ห าà¸ģ
н ÑĮ
à¸Ľ รัà¸ļ
มา à¸ĵ
Ġне Ñģк
ĠØ ¶
สม ั
สมั à¸Ħร
ãģĮ ãģĤãĤĬ
м еÑģÑĤ
Ġ×IJ צ׾
Ġкомп ани
ס ר
ÙĬÙħ Ø©
ĠÑħ оÑĢо
ĠÑħоÑĢо ÑĪ
Ġ×Ļ ×ķ×ĵ
ü s
×Ĵ ×Ļש
à¸ļ à¸Ĺ
تÙĨ ظ
ว าà¸ĩ
ม หา
Ġ׼ ×ķ׾
à¸Ĥ à¹īาà¸ĩ
ë° ľ
г од
д ан
ãģĭãĤĤãģĹãĤĮ ãģ¾ãģĽãĤĵ
ãģĵ ãģ¡ãĤī
ãĥIJ ãĤ¤
ece ÄŁi
دÙĬ دة
ÙĨ Ùī
Ġëĭ¤ ìĿĮ
ว ี
غ ا
ли з
à¹Ģà¸Ķ ิ
à¹Ģà¸Ķิ ม
ĠÙĬ ست
Ġy ılı
ko ÅĦ
ãģ§ãģĹãĤĩãģĨ ãģĭ
ãģĤ ãģª
ãģĤãģª ãģŁ
ÑĨ ен
ĠÙĪ Ø²
×IJ ×Ļש
à¹Ī à¸Ń
ر ØŃ
ê´ ij
ÑĢа ÑģÑĤ
Ġ×Ķ ×ľ
ãģĹãģ¦ ãĤĤ
×ŀר ׼
×ŀר׼ ×ĸ
éģķ ãģĦ
ãģŁ ãģı
ĠÑģ Ñĥд
в еÑģÑĤи
ĠíķĦ ìļĶ
ãĥķ ãĤ§
ÑĤелÑĮ но
à¹Ģà¸ŀ ืà¹Īà¸Ńà¸Ļ
ÅĤu ż
à¹Ģà¸Ķิà¸Ļ à¸Ĺาà¸ĩ
ש ×ķר
Ġ×ŀ ×ĵ
×ķ×¢ ׾
ÙĦ اÙħ
à¹Ħ à¸ĭ
л ей
кÑĥ ÑĢ
Ạ¢
à¸Ĺ าà¸Ļ
ì§ ij
ĠгоÑĢ Ð¾Ð´
ר ס
׾ ×ķ×Ĵ
mas ını
Ġл ÑĥÑĩ
ล à¹Īา
ìļ ¸
ש ×ĺ
ĠÐĺ н
í Ĥ¤
ÙĪÙĦ ا
ìķ ł
ĠØ£ÙĬ ضا
Ùĥ ار
ĠاÙĦت ع
ส ูà¹Ī
ãĤ ¼
×ij ×Ļ×IJ
ย à¸ģ
ĠØŃ ÙĤ
ر بÙĬ
ãģĺãĤĥ ãģªãģĦ
รัà¸ģ ษา
Ñħод иÑĤ
à¸ķ à¸Ńà¸ļ
׳ ×ĺ×Ļ
ĠاÙĦÙħ ج
تÙħ ع
ов аÑĤÑĮ
ÙĦ ÙĬÙĨ
×Ļ×ŀ ×ķת
Ġm ù
n ÄĻ
Ġد ÙĬ
׼ ש×Ļ×ķ
Ġhi ç
ë ijIJ
ÙĪ Ø§Ø¡
ÙĪ Ø·
ĠاÙĦ بÙĦ
à¹ģม à¹ī
×§ ×ķת
ÙĪØ¬ د
å§ĭ ãĤģ
ÙĬ ئة
Ġë§ ¤
ص بØŃ
פ ×IJ
г оÑĢ
ס ×Ķ
بÙĬ ÙĤ
ย าà¸ģ
Ġн ад
ÙĬ Ùij
Ġب ÙĪ
ס ×ķר
Ùħ ÙĥاÙĨ
ר ×ij
×Ĵ ×ĸ
צ ת
b ilit
л аг
ĠN go
×IJ ×ķר
à¸ķ à¸Ļ
íĬ ¹
à¸Ĺีà¹Ī à¸Ķี
à¸Ľà¸£à¸° à¸Īำ
ов ание
ãģĦ ãģ¤
ãĥĥãĤ¯ ãĤ¹
åIJĪ ãĤı
åIJĪãĤı ãģĽ
×Ļ׳ ×ķ×Ļ
ạ y
Ø« ÙĤ
ĠпÑĢ Ð¾Ð±
ĠпÑĢоб лем
ÅŁ eh
ÅŁeh ir
ع ادة
اÙĨ ÙĪÙĨ
à¸ķัว à¹Ģà¸Ńà¸ĩ
ì¶ ķ
ı lan
б ан
ãĥ³ ãĥī
à¸Ī ี
Ġ×Ķש ׳×Ļ
п оÑĤ
×ķ׾ ×Ļ×Ŀ
ล ัà¸ļ
ĠÑį ÑĤи
×ij×§ ש
ë¹Ħ ìĬ¤
à¸Ńยà¹Īาà¸ĩ à¹Ħร
×Ļ׾ ×Ļ
à¹ĥà¸Ĭ à¹Ī
ĠاÙĦ ÙĥÙĦ
ãĥļ ãĥ¼ãĤ¸
ص ة
ÑĤи ÑĢ
ãĤĵ ãģ©
зÑĭ к
wy ż
Ùĩ ÙĬ
ĠÙħ ÙĦÙĬ
Ġвид е
ظ اÙħ
دا ÙĪÙĦ
×ŀ ת×Ļ
Ġs ık
à¹Ģà¸ķิ ม
ãĤ¢ ãĤ¤
ка Ñħ
צ ×Ļ׾
à¹Ģà¸Ĭ à¹Īà¸Ļ
м аг
маг аз
магаз ин
à¸Ľ ั
à¸Ľà¸± à¸Ī
Ġש ×Ļר×ķת
ีย ม
ãĥĸ ãĥ«
Ġد ÙĪÙĦ
קר ×Ļ×Ŀ
Ùĩ Ùı
ов о
Ġü ret
د ÙĪÙĨ
à¹ģà¸Ļ ว
à¹Ģà¸Ļ ืà¹īà¸Ń
ĠÑĦ оÑĤ
ãĥ ĺ
ãģ¤ ãģĭ
Ñı Ñģ
ĠíķĺëĤĺ ëĭĺ
ائ ع
Ġп лаÑĤ
ìĺ Ī
Ġdost ÄĻp
ÙĪØ¬ Ùĩ
Ġ×Ķ ×Ĺ×Ļ
׳ ×Ļ×§
д ей
í ĽĦ
ı y
بØŃ ر
à¹Ģส ริม
Ġ׾ ×Ĵ
ذÙĩ ب
ج ÙĬÙĦ
رÙĥ ز
Ġë ħ
Ġëħ ¸
פ×Ļ׾ ×ķ
ãģ¾ ãģļ
iri ÅŁ
ĠÙĥ ÙĬÙģ
Ġ×ij צ
Ġêµ IJ
ÑĢоÑģ Ñģ
ĠØ´ ÙĬ
Ġiç er
×Ĵ ×ķ×ij×Ķ
мен но
×¢ ×ij×Ļר
×ķ×ŀ ×Ķ
ãĤī ãģĹãģĦ
ãģ ¼
Ñī ин
è²· ãģĦ
جÙħÙĪØ¹ Ø©
Ġdön em
Ġ×ij ×IJר
в еÑģÑĤ
×ķר ×ķת
س Ùģ
à¹ģà¸Ĺ à¸Ļ
Ġд окÑĥменÑĤ
Ġا ÙĬ
ج اÙĨ
צ×ķ×¢ ×Ļ
ĠоÑģ об
ĠاÙĦÙħ س
ÑĢаР±
à¸ł ู
à¸Ķ าว
л екÑĤ
ع ÙĤ
×ķ×ĵ ×ķת
Ġol u
Ġolu ÅŁtur
ãģ¾ ãģ¾
ед ин
à¹Ģ à¸Ńà¸ģ
ãĤµ ãĤ¤
ëĦ Ī
Ø· ÙĨÙĬ
Ø· ÙĤØ©
ĠÐł аз
ÙĦ Ùij
Ñĩ ем
Ġ׾ ×ĺ
สั à¹Īà¸ĩ
سر ائÙĬÙĦ
Ġפר ×ĺ×Ļ
д еÑģÑĮ
Ġ׳ ׼
اÙĨ ب
ÙĬا Ø©
Ùħ بر
Ġk ı
à¸Ľ à¸ı
à¸Ľà¸ı ิ
à¸ļั à¸ķิ
׳ ת×Ļ
ìĨ ¡
ر اب
à¹ĥ à¸ķ
à¹ĥà¸ķ à¹ī
×Ļ׳ ת
ÙĪ ÙĬر
Ġ×Ķ×ŀ ×Ļ
ей ÑĩаÑģ
×§ ×ķ×ij
در اس
ĠÙħ ÙĤ
رÙĬ ÙĨ
خ اص
ãģĬ éĩij
Ġج دا
ãģĨ ãģ¡
ëħ ¸
ır ım
æ§ ĺ
ãģ« å¯
ãģ«å¯ ¾
ÑĨ ев
Ġv ard
ĠÐIJ н
e ÄŁ
ÑģÑĤв енно
Ð ¨
س د
à¸ģ ุ
à¹ģà¸ľ à¸Ļ
รูà¹ī ส
รูà¹īส ึà¸ģ
ات ØŃاد
Ñij ÑĤ
×Ĺ ×ķ×§
ãģĻ ãģIJ
Ø· ÙĦاÙĤ
Ġ×§ ×ķ×ĵ
à¹ĥà¸Ĭ à¹īà¸ĩ
à¹ĥà¸Ĭà¹īà¸ĩ าà¸Ļ
ãĥ¼ãĤ ¿
Ġs ür
ÑĢ Ð¾Ðº
ë³ ij
สมา à¸Ĭ
สมาà¸Ĭ ิà¸ģ
ãĥķ ãĥ¬
è¾¼ ãģ¿
ãĤ» ãĥ³
Ġê°Ģ ì§Ģ
à¸ľ à¹īา
ÑįÑĤ омÑĥ
иÑĤ ел
à¸ł ั
ภij
ãĥĸ ãĥ©
×Ľ×ª ×ķ×ij
׳ ×Ŀ
ен нÑĭе
×¢ ×¨×Ľ×ª
Ġì Ĥ
ĠìĤ ´
à¸Ĥ à¹īา
׳ ×ķס
ãĥ¬ ãĥĵ
ÑĢ ÐµÑģ
à¹Ģล à¸Ĥ
Ø« اÙĦ
ìĹ Ĩ
ĠÑĩ аÑģÑĤ
า ศ
ãĥª ãĤ¢
u ç
×Ļ׼ ×ķת
ล à¹īาà¸Ļ
i ë
ãĤ¸ ãĤ§
à¸Ī à¸Ń
ÙĪ ØŃد
×Ļצ ×ķ×ij
Ġ×ij ש׾
ок о
ض ة
ذ ر
ĠÑĥ д
İ L
×ķצ ×Ļ×Ŀ
×ĸ ×ŀף
à¸Ľ à¸ģ
íķĻ êµIJ
س اÙħ
à¹Ħ à¸Ķ
ละ à¹Ģà¸Ń
ละà¹Ģà¸Ń ีย
ละà¹Ģà¸Ńีย à¸Ķ
ả y
аÑĨи он
ãĤ¹ ãĤ¯
פ ×ķס
ร à¹Īาà¸ĩ
ен нÑĭй
ع ÙĨ
عÙĦ ÙĨ
ائ Ùģ
d ÄĻ
ؤ ÙĪÙĦ
׾×ķ ×ķ
Ġ×ij ש×ij
ä»Ĭ åĽŀ
ĠاÙĦج ÙĨ
د اد
wa Äĩ
ãĥª ãĥ³
ĠìŀIJ ìĭł
اÙĨ ÙĬا
ãĥ¡ ãĥª
ÙĦ ÙĪÙĨ
à¸Ĺ à¹Īà¸Ńà¸ĩ
à¸Ĺà¹Īà¸Ńà¸ĩ à¹Ģà¸Ĺีà¹Īยว
اÙģ ÙĬ
Ġли ÑĪ
Ùħ ÙĬØ©
оÑĤ веÑĤ
Ñĩ ин
à Ĭ
ãĥ¡ ãĥ³
å® Ł
éļĽ ãģ«
ĠÑĢаР¹
ãĤ¦ ãĥ³
×Ļר ×ķש
×Ļר×ķש ׾×Ļ×Ŀ
ม ะ
Ġar a
каз аÑĤÑĮ
à¸ķ ัà¸Ķ
ÑĥÑİ ÑĤ
Ġü st
×Ĵ ×ķ×ij
×Ĵ×ķ×ij ×ķת
mal ı
ег од
егод нÑı
اÙģ ÙĤ
à¸Ĭ à¹Īà¸Ńà¸ĩ
Ġö zellik
×Ļצ ×ķר
Ġmi ÄĻd
Ġili ÅŁ
Ġна Ñħод
×¢ ×ĸר
׾ ×Ľ×ª
ÙĨت اج
ĠÑģ ем
à¸Ī à¹Īาย
à¸ķร ว
à¸ķรว à¸Ī
פר ×ķ
à¸Ĥ ัà¸ļ
ãģ ŀ
Ġп ло
к олÑĮ
×ŀ×¢ ×ĺ
íķĺ ìĭľ
jÄħ ce
ÙĨ اÙĨ
ลี à¸ģ
н ÑĥÑĤ
Ġоб ÑĢаз
Ùĥ بر
ĠاÙĦÙĪ Ø·ÙĨ
ãģķãģĽ ãģ¦
ÙĤ اء
×ŀ×ĵ ×Ļ׳
y ü
פ ×Ļת
׳ ×ķף
ÙħÙĨ ظ
หà¸Ļ ัà¸ģ
ìŀ Ī
ãĤ« ãĥ¼ãĥī
ع ÙĨÙĬ
п од
ض اء
à¸Ļ à¸ķà¹Į
×ŀש פ
ว à¹Į
ר ×ķ×§
ส ืà¹Īà¸Ń
פק ×Ļ×ĵ
ãģªãĤī ãģªãģĦ
ĠìŬ 룬
ÙĦ ج
Ñī иÑĤ
ãĥĥ ãĤ·
ÙĦÙĬ س
ĠÙĦ Ùħا
ìł ij
×ij ×Ļף
ãĥģ ãĤ§
Ġgü ç
Ġch ứ
×ķצ ×IJ
קר ×ij
à¹Ĥ à¸ŀ
оÑĩ но
סק ×Ļ
ש׾ ×Ŀ
صر Ùģ
ĠL Ãł
×¢ ×Ļת
á» ·
à¹Ĥ à¸Ńà¸ģ
à¹Ĥà¸Ńà¸ģ า
à¹Ĥà¸Ńà¸ģา ส
Ġ×Ķ ×ĵ×ijר
à¸Ļั à¹Īà¸Ļ
ز ر
нак о
íļ į
ãĤĤ ãģ¡
ãĤĤãģ¡ ãĤį
ãĤĤãģ¡ãĤį ãĤĵ
اÙħ ت
عد اد
и нÑĭ
ÅĤy w
à¸Ħ à¸ĵะ
à¸Ĺ ะ
kt ör
×Ļ×Ĺ ×Ķ
Ġм е
Ġме ÑģÑı
׳×Ķ ×Ĵ
ĠÑģ ÑĥÑīеÑģÑĤв
à¸Ļ ัà¸Ļ
ÑĦ ÑĦ
ек ÑĤив
عÙĦÙĪÙħ ات
б Ñĥд
à¸Ļัà¸ģ à¸ĩาà¸Ļ
หà¸Ļà¹īา à¸Ĺีà¹Ī
ÙĤÙĬ ÙĤ
ãĤ· ãĥ³
ãģ« éĸ¢
×IJר ×Ĵ
ĠпÑĢ Ð¾ÑĤ
ĠпÑĢоÑĤ ив
ĠìŀĪ ìĸ´
ÙĤÙĬ ÙĤØ©
ìĹ ĩ
k ür
ãģ«ãģªãĤĬ ãģ¾ãģĹãģŁ
Ġде ÑıÑĤ
ĠдеÑıÑĤ елÑĮ
פ×ķר ×ĺ
à¸Ł à¹īา
à¹Ģ à¸ł
ĠавÑĤом аÑĤ
×ĸ ×Ļ×§
Ġold uk
ع اÙħ
ĠÑĤ оÑĢ
yrı ca
ê Ì
ãĤŃ ãĥ³ãĤ°
ãģ« ãģ¨ãģ£ãģ¦
à¹Ģà¸ī à¸ŀ
à¹Ģà¸īà¸ŀ าะ
ãģ¯ ãģļ
×ŀ ×IJ×Ļ
สะ à¸Ķ
สะà¸Ķ วà¸ģ
ìľ¼ ë©°
à¸ģ ี
ภ¬
Ġ×¢ ×ķש
à¸łà¸² ษา
à¸Ĺ ัà¸Ļ
ac akt
acakt ır
اع دة
ĠÑĥÑģл Ñĥг
ס ר×ĺ
×ķ×ŀ ×ķת
×Ķ ×ķר
×ŀ ×ķ×ij
×ŀ×ķ×ij ף
سÙĬ اس
اتÙģ Ø§ÙĤ
×Ķ ×¦×ľ
Ùħؤ س
Ġp ó
Ġк ни
×Ļ׼ ×ķ׾
à¹Ģหล ืà¸Ń
׼׾ ׼
׳ ×ĸ
ÑĪи е
r ès
ĠاÙĦØŃ ÙĤ
лÑı ÑĢ
ห à¸į
หà¸į ิà¸ĩ
ר×Ĵ ×Ļש
à¹Ģส à¹īà¸Ļ
ש×ij ×ķף
ô tel
ап ÑĢ
апÑĢ Ð¸Ð¼ÐµÑĢ
اب ÙĦ
ĠÑĢаз виÑĤ
Ġп олÑĮз
ĠС еÑĢ
×ķ×ij ×Ļ
r óż
ìĭ Ń
ãĤ¯ ãĥĪ
ãģĹ ãĤĪãģĨ
à¸ģร ม
ØŃ ÙĥÙĪÙħ
à¹Ĥ à¸ļ
à¸Ĺ à¹īาย
ĠM á
ĠÑĤ Ñĭ
à¸Ħร ัว
ÑĢÑĥ б
ạ p
Ġm ÅĤ
ĠmÅĤ od
Ġgör Ã¼ÅŁ
Ġgeli ÅŁ
ươ i
×ŀש ×§
ÙĢÙĢ ÙĢÙĢ
รา ว
ãģĹãģ £
ãģĹãģ£ ãģĭãĤĬ
ĠÐļ он
Ġk ê
à¹Ĥà¸Ĺ ร
èIJ½ ãģ¡
åĩº ãģ¦
ล ัà¸ģษ
Ġ×Ĵ ×ij×ķ×Ķ
ãĥĻ ãĥ«
ê±° ëĤĺ
ë§ IJ
×Ļ׾ ×ĵ×Ļ×Ŀ
ĠëĦ Ī
×ŀר ×Ļ
ร ส
ãĥŃ ãĥ³
и ло
ноÑģÑĤÑĮ Ñİ
×ĸר ×Ĺ
п он
Ġ×Ķש ׾
ê²ł ìĬµëĭĪëĭ¤
Ġki ÅŁ
ĠÐļ и
ว ร
د اع
ÅŁ im
ÙĨ Ùij
в аÑĤ
را Ùĥ
ب اÙĦ
ид е
Ġ×Ķ×ŀ ×Ĺ
ìĸ µ
تÙģ Ø§Ø¹
أ ت
ëĬ ĺ
ש ×Ļת
ست Ùħر
ĠÑĦ ак
ĠاÙĦØ£Ùħ رÙĬ
ëŀ ¨
اس Ùħ
Ġa ÄŁ
Ġç ev
Ùĥ ÙĪØ±
ãģķ ãģ¾
Ġç öz
Ġر س
Äħ da
สà¸Ļ ุ
ãģĹãģ¦ ãģıãĤĮ
н Ñİ
leÅŁ me
ãĤª ãĥ³
ãģ¨ ãģªãĤĬ
ava ÅŁ
×ĺ ×Ļ×ij
ØŃ ض
×ķצ ×IJ×ķת
ÙĨ ÙħÙĪ
ı t
ĠÑħ а
ĠÑħа ÑĢак
ĠÑħаÑĢак ÑĤеÑĢ
Ġd ÅĤ
ãĥĹ ãĥ©
à¸Ĭ ุม
à¹Ī à¸Ńà¸Ļ
×ķ×ij ׾
Ñģ ол
×ĵ ×Ĵ
аÑĢ Ð°ÑĤ
n ivers
Ġgerçek leÅŁtir
ĠاÙĦ ÙĦÙĬ
ระ ยะ
ĠÙħ ختÙĦÙģ
Ġgö nder
Ùģ Ø§Ø±
do ÄŁ
doÄŁ an
ص ÙĦاØŃ
Ġyay ın
ãĥĨ ãĥ³
รว à¸Ī
×Ļ×Ĺ ×Ļ×ĵ
ünk ü
ÑĨи алÑĮн
à¸ļ ู
ม ุ
h ä
Ø® Ùģ
å¢ Ĺ
å¢Ĺ ãģĪ
еÑĩ но
ĠاÙĦس ÙĨ
à¸Ĥ าว
im di
Ð «
à¸Ļà¸Ńà¸ģ à¸Īาà¸ģ
à¸ļา ล
ת ש
Ġdüzen le
мÑĭ Ñģл
ãģı ãģª
ż u
Ġwsp óÅĤ
Ġн аз
ınd aki
تر ة
ÅŁ ek
Ġö d
ĠÙĪ Ùĥ
Ġпозв олÑı
Ġת ×ķ׼
ÙħÙĨ تج
ë§ ī
ĠاÙĦØ« ÙĦاث
аÑĨи Ñİ
ÙĪØ± ÙĪ
Ñĭв аеÑĤ
خص ص
ĠاÙĦÙģ ÙĦ
ĠاÙĦÙģÙĦ سطÙĬÙĨ
إ جر
إجر اء
اÙĨت Ø®
اÙĨتخ اب
ار ÙĬØ©
×ķ Ö
Ø¢ ÙĨ
×ŀ×¢ ×ķת
Ġм ал
Ġ×IJ ×Ĺ
à¸Ĺ à¹īà¸Ńà¸ĩ
ze ÅĽ
Ġë§Į ëĵ¤
رÙĬ ع
äºĭ ãĤĴ
à¸ļริ หาร
׾ ×ŀ×Ļ×ĵ
Ġм Ñĥж
ت رÙĪ
ĠباÙĦ Ø¥
פ ×Ļ×§
ز ÙħØ©
ĠÃ¶ÄŁ renc
ãĥ ¶
اÙħ عة
×§×ij ×ķצ
×ŀ ׳×ķת
رÙĬ Ùħ
Ġо каз
ãģłãģij ãģ©
Ġh ız
Ġש ×IJת
ãĤ¢ ãĥ¼
Ġmożli wo
ìĦ ¼
ÙĪ Ø§Ø¨
ог ÑĢаÑĦ
Ġعبد اÙĦ
ãĤĴ è¡Į
ب ÙĬÙĦ
Ġİ ç
ย าย
ĠÑĥ ÑĩаÑģÑĤ
ÑĦ еÑģÑģ
ÑĦеÑģÑģ иона
Ạ¤
ÙĨ ÙĬÙĨ
عد ÙĦ
สร ร
دÙĬ ÙĦ
×ij ×Ļ×§
czy ÅĤ
ÑĢом е
Ġм ед
ìĻ Ķ
ãĥ© ãĤ¤ãĥ³
ĠÑĤ еп
еÑĢ ÑĮ
i ÄŁi
в ели
ÑĢи ÑģÑĤ
ס ×ķפ
×ŀ׾ ×Ĺ
ĠاÙĦØ¥ ÙĨ
Ġ׾×Ķ ×©
è¶Ĭ ãģĹ
ĠÑĢ Ñĭ
×ķ×IJ ר
رÙĩ اب
פ ×ķ×IJ×Ļ
ĠгоÑģ Ñĥд
ĠгоÑģÑĥд аÑĢ
ĠгоÑģÑĥдаÑĢ ÑģÑĤв
ĠاÙĦØ£Ùħ ÙĬر
Ùħ ج
à¹Ģหม าะ
ÑĢ ÐµÐ²
à¸Ĭี à¸ŀ
ãĥķ ãĥĪ
иÑĩ но
ĠاÙĦÙħ ؤ
Ġi ht
íħ ľ
د ÙĨÙĬ
ر ص
ла ÑģÑĤ
à¹Ģหล à¹Īา
ılı r
ร à¸ĵà¹Į
×ŀש ×Ļ×ļ
Ġd á»ĭ
Ø·Ùģ Ø§ÙĦ
×ĺ ×ķף
Ġ×ij ×Ļ׳
ãģ¾ ãģ£ãģŁ
лож ениÑı
تØŃ ر
ب اØŃ
à¹Ģส ืà¹īà¸Ń
ãģĻ ãģĶ
lt ür
à¸ĩ าม
Ġt ü
ĠпÑĢ Ð¸Ð¼
ĠпÑĢим ен
Ġhay at
ëĥ IJ
ëĭ Į
׳×Ļ ×ķ
вед ен
ìħ ¨
à¸Ī ัย
à¸ģà¹Ī à¸Ń
Ġв од
оÑģÑĤ оÑı
н аÑĤ
à¹ģ หล
سÙħ ÙĬ
à¸Ķำ à¹Ģà¸Ļ
à¸Ķำà¹Ģà¸Ļ ิà¸Ļ
w ód
ö yle
ãĥĢ ãĤ¤
ÑĪи й
меÑī ен
ãģĹãģ¾ ãģĨ
ãĥī ãĥ©
ÙĪØ¶ ØŃ
à¸Ńà¸Ļ ุ
ĠاÙĦ اجتÙħاع
laÅŁ ma
à¸Ħ à¸Ńà¸Ļ
×ŀר ×Ļ×Ŀ
ÙĨ اÙħج
שר ×ķת
اÙĦ Ø£
Ġksi Äħż
Ġа н
ÑĢаР¹
اÙĩر Ø©
×ŀ×ĵ ×Ķ
ä¸Ģ ç·
ä¸Ģç· Ĵ
ä¸Ģç·Ĵ ãģ«
ÑĢиÑĤ оÑĢ
d ıkl
à¹ģ à¸ĸ
à¹ģà¸Ĥ à¹Īà¸ĩ
екÑĤ оÑĢ
×ŀס ×¢
ÑĢак ÑĤи
u ÄŁu
×ķ×ij ת
สู à¸ķร
ĠçalÄ±ÅŁ m
ĠçalÄ±ÅŁm alar
Ġа на
ãĥĽ ãĥ¼ãĥł
Ġböl üm
Ġب ص
ол оÑģ
ĠìķĬ ëĬĶ
à¹Ī ะ
ÙĪ ØªØ±
ä¹ Ĺ
ست خداÙħ
פ×Ļ ×Ļס
פ×Ļ×Ļס ×ij
פ×Ļ×Ļס×ij ×ķ×§
Ġк ÑĢаÑģ
ли к
رÙĬ ØŃ
×ŀש ׾×Ķ
à¹Ģย ีà¹Īย
à¹Ģยีà¹Īย ม
в иÑģ
ом н
ÄŁ un
ãĥŃ ãĥ¼ãĥ³
Ø£ تÙĬ
à¸ķร ี
çͳ ãģĹ
تÙħ ر
ìĹ ĪìĬµëĭĪëĭ¤
ĠÙĪ ØºÙĬر
red ni
ĠاÙĦص Ùģ
Ġна ÑģÑĤоÑı
ĠнаÑģÑĤоÑı Ñī
à¸ķ รา
ĠÑĥÑģл ов
ĠÑĥÑģлов иÑı
ÑĨ еп
×Ķ ×Ĺ׾×ĺ
Ø· ÙĬع
ĠB akan
ĠاÙĦ رÙĪ
илÑĮ но
Ġм еÑĤ
à¸Ķ à¸Ńà¸ģ
ãģĭãĤī ãģªãģĦ
Ġпо ÑģÑĤоÑı
ĠпоÑģÑĤоÑı н
ĠÑĩ аÑģ
ü c
wr ó
б ÑĥÑĢ
ãĥIJ ãĥĥãĤ¯
ãĥ©ãĥ³ ãĥī
Ġо гÑĢ
สั à¸į
สัà¸į à¸įา
มั à¹Īà¸Ļ
à¸Ħ à¸Ńม
al ık
Ġн ед
üm üz
ĠÅĽ wie
é rio
×Ļ×IJ ×Ķ
دÙħ ات
ı rl
ĠоÑĤ з
ĠоÑĤз Ñĭв
ä»ĺ ãģį
Ġkaż de
мин иÑģÑĤ
ãĤ° ãĥ«
ë° ĸ
ез н
اÙĦ Ùģ
Ġש ק׾
Ùħ ض
ãĥĿ ãĥ¼ãĥĪ
ÙħÙĨ ت
ÙĤÙĬ اÙħ
Ø´ ÙĨ
×Ļר ×ķ×¢
ãĤŃãĥ£ ãĥ³
доÑĢ Ð¾Ð²
×ŀ ×Ļת×Ļ
ÙĪÙĦ ÙĪØ¬
Ùĥ اÙģ
ĠÑĢаз лиÑĩ
иÑĤ еÑĤ
н олог
ลà¸ĩ à¸Ĺุà¸Ļ
Ġyak laÅŁ
ãĥ¬ ãĤ¤
ê²ł ëĭ¤
æ±Ĥ ãĤģ
رÙĪ Ùģ
Ġí Ĭ
ĠíĬ ¹
ãģ£ ãģıãĤĬ
à¸Ħวาม à¸Ħิà¸Ķ
×Ķ ×Ļס×ĺ
Ø¥ ÙĤ
ãģ¦ ãģĦ
à¹Ĥ à¸Ĭ
ĠBü yük
ĠФ едеÑĢ
ÑĨи н
ÑĢов а
ĠاÙĦ اÙĤتصاد
Ġch á
à¸ĺ าà¸Ļ
ë¥ ł
à¹Ħ à¸ķ
ÃŃ pio
Ùĭ ا
Ġоб Ñıз
Ùĩ ج
Ġì¤ij ìļĶ
ãģ® ãģ§ãģ¯ãģªãģĦ
بار اة
ãĤ¤ ãĥ«
Ġн оÑĢм
á»ī nh
m ö
mö glich
ÑĨи п
ãĤ¢ ãĤ¯
×Ķ ×Ļ
ÑĨи алÑĮно
ĠÅĽ wi
ت ÙĤ
ĠÑģÑĤо им
بÙĬ عÙĬ
Ġ׾ ש×ŀ
г лÑı
глÑı д
ãģ¦ ãģıãĤĮ
ÄĻd zi
à¸Ĥ ั
à¸Ĥั à¹īà¸Ļ
Ø· ÙĤ
ĠìĹ Ń
ãģ£ãģ¦ãģĹãģ¾ ãģĨ
ĠdeÄŁer l
ĠdeÄŁerl endir
Ġü lk
Ġмн ог
๠ĭ
ë¿ IJ
ĠУ кÑĢа
ÄŁ ini
Ġбез оп
Ġбезоп аÑģ
à¸Ńà¸Ńà¸ģ à¹ģà¸ļà¸ļ
Ø§Ø ¸
ØŃد اث
л еÑĢ
×Ļ× ¥
×Ļ׳×ĺר ׳×ĺ
lar ınız
ØŃÙĬ ØŃ
ż eli
à¸Ń ัà¸ĩ
à¸Ńัà¸ĩ à¸ģ
à¸Ńัà¸ĩà¸ģ ฤษ
ĠоÑĤ лиÑĩ
ั ส
ëŀ į
ож но
ãĤ¹ ãĥĿ
ĠÑħ оÑĩ
Ġк ап
еÑĩ ен
ØŃÙĦ Ø©
ÙĬا Ùĩ
на л
×ķצ ר×Ļ×Ŀ
Ġk ald
åĥ į
ĠاÙĦØ´ خص
Ġз на
Ġwz gl
ż ycz
ê° Ŀ
à¸ŀ ลัà¸ĩ
íģ ¼
Ġö l
Ġb ụ
Ø´ Ùĩر
Ġз ам
Ġд ев
×Ļ×ĺ ת
تعÙĦ ÙĤ
ÙĪÙħ Ø©
ãĤĴ ä½ľ
ãģį ãģ¦
í ĥĿ
ras ında
ãĤĴ æİ¢
ĠÙħ باشر
راج ع
Ġв озд
ÙħØŃ ا
×ķש ר
ĠиÑģÑĤ оÑĢ
ม ัà¸ģ
t ıģ
ث ار
تر ÙĨت
à¹ģà¸Ĥ à¹ĩ
à¹ģà¸Ĥà¹ĩ à¸ĩ
п оÑĩ
Ġ×ij ×IJ×ķת
ë¯ Ģ
ëĿ¼ ëıĦ
à¸Ĭ ัà¸Ķ
ส à¸ķà¹Į
ãĥĭ ãĥĥãĤ¯
ид енÑĤ
Ġг ÑĢÑĥпп
ت خ
Ạł
ย ืà¸Ļ
ย ัà¸Ļ
ó ry
T Ãľ
ãģĹ ãĤĥ
ĠпÑĢов ед
лÑı еÑĤ
Ùħ Ø®
ย à¸Ńม
×Ľ×ł×¡ ת
ĠاÙĦÙħ ÙĨت
Ġol mad
ר׼ ×ĸ×Ļ
Ġв ÑģÑĤÑĢ
ĠиÑģ Ñģлед
ÑĤвеÑĢ Ð¶
بد ÙĪ
еÑĢ ÑĤ
ï» ·
± ħ
สัม à¸ŀัà¸Ļà¸ĺà¹Į
ิ à¹Īà¸Ļ
צ ×Ļ×ij
wiÄĻ t
Ġì° ¸
Ġz wiÄħz
سب ÙĪØ¹
ãĥĥ ãĤ°
à¸Ľà¸¥ à¸Ńà¸Ķ
à¸Ľà¸¥à¸Ńà¸Ķ à¸łà¸±à¸¢
ãĤĤ ãĤĬ
ÙĤد س
Ġspr z
Ġsprz eda
Ġist edi
Ġk hu
Ġд ен
Ġko ÅĦ
Ġ×ij ×Ĺ×Ļ
à¹Ģà¸Ĺ à¹īา
×ķס ×Ļ×£
ãĥĭ ãĥ¥ãĥ¼
ĠпÑĢед оÑģÑĤ
ĠпÑĢедоÑģÑĤ ав
à¹Ĥ à¸Ł
é v
ĠاÙĦص ØŃ
صØŃ اب
à¹Ģà¸Ī à¹ĩà¸ļ
вл ек
วั à¸ķ
à¸ĸ ุ
ãģĵãģ¨ãģĮãģ§ãģį ãģ¾ãģĻ
ÙĤÙĬ ÙĤÙĬ
×ķ׊ר
Ñĭ ÑĪ
ĠоÑĤ но
ĠоÑĤно ÑĪ
об илÑĮ
Ùģ ØŃ
ı nt
ınt ı
Ġ׾ ×ij×ĵ
í İĺìĿ´ì§Ģ
ãĥĬ ãĥ«
ĠÙħ ساء
×Ļ×ĺ ×ij
ÑĮ еÑĢ
ëĦ ·
Ñĭ ÑĤа
ĠоÑĩ еÑĢ
à¸Ķ ืà¹Ī
à¸Ķืà¹Ī ม
ĠN gh
ت عب
ÙĦاÙĤ ات
×ķ׾×ķ×Ĵ ×Ļ×Ķ
ĠìĿ´ ê²ĥ
Ġ×Ķ ×ijר
ìľ µ
à¹Ģà¸Ħล ืà¹Īà¸Ńà¸Ļ
Ùĩ Ø©
à¸Īำ à¹Ģà¸Ľà¹ĩà¸Ļ
å¤ī ãģĪ
wi ÅĽcie
ch od
chod zÄħ
в ÑĢо
×ŀ×Ĺ ×Ļר
Ġy ı
Ġyı ll
ì¡ Į
à¹Ħ หว
ãģªãģı ãģª
Ġзав иÑģ
ĠìĺĪ ìĪĺ
Ùģ Ø°
á»§ ng
à¸ŀุ à¸Ĺà¸ĺ
з н
lay an
ãĤ ¡
à¸ģà¹ĩ à¸ķาม
ĠsaÄŁ lam
ร à¸ĵ
ĠÑģ иÑĤ
ĠÑģиÑĤ Ñĥ
ĠاÙĦت ÙĨ
×Ķ ×ĸ
ĠØ· ÙĪÙĬÙĦ
ta ÅĤ
Ġgö rd
å¤ī ãĤı
ëĥ ¥
à¸Ħà¹Ī à¸Ńย
×IJ ×ķ×ĺ
ëħ IJ
ãĥ©ãĥ³ ãĤ¹
วั à¸Ĵ
วัà¸Ĵ à¸Ļ
Ġol uÅŁ
פע ×ķ׾
Ġszczeg óÅĤ
à¸Ħา สิ
à¸Ħาสิ à¹Ĥà¸Ļ
pow ied
ĠÑĤ еб
หà¸Ļ à¹Īวย
Ġм ил
ØŃ Ùĥ
à¸Ĺ à¸Ķ
ĠмаÑĤ еÑĢиал
ÅĤ ow
à¹Ģà¸ģ ีย
ĠÑģов еÑĢ
ãĤ ©
à¸Ľ ริ
Ġи Ñİ
наÑĩ ен
ÑĢен д
mu ÅŁtur
ĠпÑĢод Ñĥк
з д
Ñı ÑĤи
ÑıÑĤи Ñı
à¹Ģม ีย
رات ÙĬج
Ġam acı
ש ×ķ׾
ש×ķ׾ ×Ĺ
สะ à¸Ńา
สะà¸Ńา à¸Ķ
פ×Ĵ ×¢
عب ة
d ın
íħ Ķ
Ġ×ŀש ×Ĺ×§
Ġfi yat
Ġз аÑı
ĠзаÑı в
à¹Ĥ หล
à¹Ĥหล à¸Ķ
à¸ģรุà¸ĩ à¹Ģà¸Ĺà¸ŀ
צ×Ļ ×Ļף
ìļ ±
Ùħ ب
Ùħب اد
land ır
Ġв еÑģÑĮ
Ġh ük
ĠÐĴ оз
ÑĩиÑĤ Ñĭва
ว ล
×ķצ ×¢
à¸Ĥà¸ĵะ à¸Ĺีà¹Ī
ĠaÅŁ aģı
׾×IJ ×ķ×ŀ×Ļ
tr zym
Ã¤ÃŁ ig
owo ÅĽci
ãģĿ ãĤĤ
Ġroz wiÄħz
ĠgÅĤ ówn
м онÑĤ
×ŀ ×ķ×ŀ
ĠÑģÑĤ ан
ÙĦا ÙĤØ©
p rowad
prowad zi
ĠÑģоÑģÑĤ оÑı
×Ļ×IJ ×ķת
r ı
g ı
ãĥij ãĥij
Ġна лиÑĩ
×Ķ ×¦×¢
Ġ׳ ×Ķ
à¸Ħ ัà¸ļ
ع راض
и ж
Ùĩ ائÙĬ
ãĤī ãģı
ож еÑĤ
Ġоб оÑĢ
ĠобоÑĢ Ñĥд
Ø£ سÙĦ
à¹ĩ à¸Ķ
ÑĢÑĥ ÑĤ
دÙĬ ÙħÙĤ
دÙĬÙħÙĤ را
Ġjest e
×ķ×ķ ×Ļר
×ij×ĵ ×Ļ×§
деÑĢж ива
ãģĬ ãģı
ewn ÄĻtr
ewnÄĻtr zn
à¸ŀ ฤ
Ġ×IJ ×ķ×Ķ
ת×Ĺ ×ķש
Ġz ob
д Ñĥм
ĠÑģ Ñĭ
ÙĬر ا
ĠwiÄĻ ks
à¹ģà¸ķà¸ģ à¸ķà¹Īาà¸ĩ
lar aras
lararas ı
íĺ Ģ
ëī ´
×ķ×Ĵ ׾
ĠоÑĤ меÑĤ
ĠÑĢ Ð°Ð½
ت ÙĥÙĦ
иÑĤелÑĮ н
à¸Ľà¸£à¸° วั
à¸Ľà¸£à¸°à¸§à¸± à¸ķิ
ìŀ ĸ
мож но
pie czeÅĦ
pieczeÅĦ st
ëª »
ìĬ ¨
×ŀס ×ŀ
á» ¦
ศ ิ
ศิ ล
ศิล à¸Ľ
ĠÅļ w
ãĥĥ ãĤ·ãĥ§ãĥ³
unit Ãł
Ġmiesz ka
Ġmieszka ÅĦ
pr zed
przed si
przedsi ÄĻb
przedsiÄĻb ior
à¸Ľà¸£à¸° สิà¸Ĺà¸ĺิ
à¸Ľà¸£à¸°à¸ªà¸´à¸Ĺà¸ĺิ à¸łà¸²à¸ŀ
ย à¹Ī
ìķ Ļ
รว à¸Ķ
รวà¸Ķ à¹Ģรà¹ĩว
å½ĵ ãģŁãĤĬ
äl le
Ñĥ еÑĤÑģÑı
ã n
ëł µ
th è
ãĤĴ åĪ©ç͍
ì µľ
íĵ ¨
à¸Ĺ ัà¸ļ
า à¸Ħม
ãģ ĩ
ëĤ Į
à¹Ģà¸Ľà¸¥ à¹Īา
â ¦
ë ¾
ê Ģ
ê ĩ
â ¡
ðŁ Ł
ã IJ
â º
á Ń
á Ļ
á ĵ
á ²
ðĵ ı
á ¬
â ¯
ä ¨
ê Ŀ
ê «
ð ij
ðĵ ĥ
ðĿ ħ
< unk
s
Ġع ÙĦÙī
Ġm á»Ļt
Ġv Ỽi
Ġng ưá»Ŀi
ĠØ¥ ÙĦÙī
Ġnh ững
Ġth á»ĥ
Ġ×IJ ×ķ
Ġ×¢ ×Ŀ
ا Ùĭ
Ġ à¹ģละ
ĠÙĦ ا
Ġnh ư
ĠاÙĦت ÙĬ
Ġ×Ķ ×ķ×IJ
ĠÄij ến
ĠØ£ ÙĪ
Ġv á»ģ
ĠlÃł m
Ġs ẽ
Ġc Å©ng
Ġ ợ
ĠÄij ó
Ġnhi á»ģu
Ġt ại
Ġtr ên
Ġ×Ĵ ×Ŀ
Ġnh Ãł
Ġ׼ ×Ļ
Ġs á»±
ĠÄij ầu
Ġb á»ĭ
ĠÙĩ ذا
Ġnh ất
Ġph ải
Ġhi á»ĩn
Ġdụ ng
ĠÄij á»Ļng
ĠاÙĦÙĦ Ùĩ
ĠØ Į
ĠÙĥ ÙĦ
Ġvi á»ĩc
Ġn Äĥm
Ġth ì
Ġh á»įc
ĠÙĪ Øª
t é
Ġا ÙĨ
Ġt ôi
Ġ×IJ ׳×Ļ
Ġ׾ ×Ļ
Ġ×ŀ ×ķ
Ġng Ãły
Ġn Æ°á»Ľc
Ġ×Ķ ×Ļ×IJ
Ġ×IJ ×Ļ
Ġh Æ¡n
ĠÙĩ ذÙĩ
ĠÙĪ ÙĬ
ĠاÙĦ ذÙĬ
Ġ×ķ ×ŀ
Ġgi á
Ġnh ân
Ġch ÃŃnh
Ġm ình
ĠÐĿ а
Ġth ế
Ġ×Ļ ×ķתר
Ġ×IJ ×Ŀ
Ġn ên
Ġh ợ
Ġhợ p
Ġc òn
ĠÙĩ ÙĪ
Ġc Æ¡
Ġr ất
ĠVi á»ĩt
Ġب عد
Ġש ×Ļ
Ġth á»Ŀi
Ġc ách
ĠÄij á»ĵng
Ġн о
Ġtr ưá»Ŀng
Ø Ł
ĠÄij á»ĭnh
ĠÄiji á»ģu
×Ļ ×Ļ×Ŀ
Ġth á»±c
n ın
Ġh ình
Ġn ói
Ġc ùng
Ġ×Ķ ×Ķ
ĠØ¥ ÙĨ
Ġ×IJ ×ij׾
Ġnh ưng
Ġbi ết
Ġж е
Ġch úng
ĠÄij ang
Ġذ ÙĦÙĥ
Ġl ên
Ġkh ách
Ġn Ãło
Ġs á»Ń
Ġkh ác
Ġë° ı
Ġl ý
×Ļ ×Ļ
ĠÄij ây
Ġ׾ ×ŀ
Ġc ần
Ġtr ình
Ġph át
ãģ« ãĤĤ
п о
Ġn Äĥng
Ġb á»Ļ
Ġv ụ
ĠÄij á»Ļ
Ñĩ е
Ġnh áºŃn
Ġtr Æ°á»Ľc
Ġ×¢ ×ĵ
Ġh Ãłnh
ĠØ® ÙĦاÙĦ
Ġl ượng
Ġc ấp
Ġtá» ±
Ġv ì
Ġt ư
Ġch ất
Ġ׼ ×ŀ×ķ
Ġg ì
Ġש ׳
Ġt ế
ת ×ķ
Ġnghi á»ĩp
Ġm ặt
ĠÙĥ Ùħا
Ġ×ij ×Ļף
Ġר ×§
Ġth ấy
Ġmá y
ĠÙģ Ùī
Ġd ân
Ġ×IJ ×Ĺ×ĵ
Ġt âm
Ġ׼ ×ļ
Ġ׾ ×ķ
в о
Ġt ác
Ġto Ãłn
ĠÙĪ Ùħ
Ġk ết
Ġ หรืà¸Ń
ĠÙĪØ§ÙĦ Ùħ
ĠÄiji á»ĥm
Ġ×ĸ ×ķ
Ġ×ij ×ķ
׼ ×ķת
Ġh á»Ļi
Ġb ằng
ت Ùĩا
Ġ׼ ×ĵ×Ļ
Ġ×Ķ ×Ŀ
Ġxu ất
ĠÙĤ د
Ġb ảo
Ġt á»ijt
Ġt ình
ĠÙĩ ÙĬ
ĠÄij á»iji
Ġthi ết
Ġhi á»ĩu
Ġti ếp
Ġt ạo
ת ×Ķ
Ġch á»§
o ÅĽÄĩ
Ġgi ú
Ġgiú p
ĠÃ ½
Ġqu ả
Ġlo ại
Ġc ô
ĠÃ ´
Ġô ng
Ġ×Ķ ×ķ
ĠاÙĦÙĬ ÙĪÙħ
ĠtÃŃ nh
г а
Ġph òng
Ġ Äĥn
Ġع اÙħ
Ġv á»ĭ
lar ını
r ÃŃa
Ġt Ỽi
ĠÄij ưá»Ŀng
Ġgi Ỽi
Ġb ản
Ġc ầu
Ġnhi ên
Ġb á»ĩnh
Ġth ưá»Ŀng
Ġ×IJ ×Ļף
ĠÄij á»ģ
Ġh á»ĩ
Ġ×Ļש ר×IJ׾
Ġqu á
ĠÐĹ Ð°
ãģ® ãģ§ãģĻãģĮ
ĠÐŁ ÑĢи
Ġph ần
ĠÙĪ ÙĦا
ĠlỼ n
Ġtr á»ĭ
Ġcả m
Ġм о
Ġd ùng
ĠاÙĦ Ùī
ĠعÙĦÙĬ Ùĩ
ĠìŀĪ ìĬµëĭĪëĭ¤
ÙĬ ÙĤ
ĠÙĤ بÙĦ
Ġho ặc
ĠØŃ ÙĬØ«
Ġ à¸Ĺีà¹Ī
Ġغ ÙĬر
ĠÄij ại
Ġsá»ij ng
нÑĭ ми
Ġth ức
Ġפ ×Ļ
ĠÄiji á»ĩn
ãģª ãģĭãģ£ãģŁ
Ġgi ải
Ġv ẫn
Ġи Ñħ
Ġö nce
Ġv áºŃy
Ġmu á»ijn
Ġ ảnh
à¹ĥà¸Ļ à¸ģาร
ĠQu á»ijc
Ġk ế
׳ ×IJ
Ġס ×Ļ
Ġy êu
ãģ® ãģĭ
ĠÄij ẹ
ĠÄijẹ p
Ġch ức
Ġy ıl
ĠTür kiye
d é
ĠÙĤ اÙĦ
Ġd á»ĭch
ĠolduÄŁ u
Ġch á»įn
Ġت Ùħ
หà¸Ļ ึà¹Īà¸ĩ
ãģķãĤĮ ãģŁ
Ġph áp
ìĽ Ķ
Ġti á»ģn
ãģĹ ãģ¾ãģĹãģŁ
Ġש ׾×IJ
ÙĦ Ø©
Ġ׾פ ׳×Ļ
Ġ×ij ×Ļת
ĠH Ãł
ĠØŃ ت
ĠØŃت Ùī
Ġ×¢ ×ķ×ĵ
Ġn ó
Ġth áng
à¹Ģลืà¸Ń à¸ģ
ר ×Ķ
Ġt Äĥng
Ġcá i
Ġtri á»ĥn
Ġ×IJ×ķת ×ķ
ìłģ ìĿ¸
ĠC ông
Ġ׾×Ķ ×Ļ×ķת
Ġг ода
и Ñİ
Ġب عض
Ġ à¸ģาร
èī¯ ãģĦ
ÙĪ Øª
Ġli ên
ĠÐĿ о
ĠÐĿ е
çļĦ ãģª
ĠÙħ ت
ĠÑĤак же
ĠкоÑĤоÑĢ Ñĭе
Ġ×Ļ ×ĵ×Ļ
Ġtr á»įng
ãĤµ ãĤ¤ãĥĪ
ìłģ ìľ¼ë¡ľ
Ġt áºŃp
Ġש ׾×Ļ
íķĺ ê²Į
Ġt Ãłi
ĠÐ ¯
Ġr á»ĵi
ا Ùĥ
Ġth ương
Ġ×Ķ ×ĸ×Ķ
ĠÙĪ ÙħÙĨ
à¸Ĺีà¹Ī มี
Ġcu á»Ļc
Ġbü yük
ãģ¨ ãģĭ
Ġ×ij ×Ļ×ķתר
Ġl ần
Ġgö re
Ġtr ợ
Ġ×ĺ ×ķ×ij
ÑĤÑĮ ÑģÑı
Ġth á»ijng
Ġ׼ ש
Ġti êu
Ġ×ŀ×IJ ×ķ×ĵ
Ø Ľ
k Äħ
Ġ à¹ĥà¸Ļ
Ġv ấn
Ġש ׾×ķ
ĠÄij á»ģu
Ùģ Øª
Ġê²ĥ ìĿ´
Ġh óa
ĠاÙĦع اÙħ
ĠÙĬ ÙĪÙħ
к ой
Ġbi á»ĩt
ÑģÑĤ о
Ġ×Ķ ×Ļ×ķ
à¸Ĺีà¹Ī à¸Īะ
Ġ×ĵ ×Ļ
Ġ×IJ ×ļ
Ġá n
ص ÙĪØ±
Ġtr ÃŃ
ĠÐŁÑĢ Ð¾
Ġl á»±c
ãģĹãģ¦ ãģĦãģ¾ãģĻ
Ġb Ãłi
Ġ×ĸ ×IJת
Ġb áo
à¸ļ à¸Ļ
ĠëĮĢ íķľ
Ġti ế
Ġtiế ng
Ġb ên
ãģķãĤĮ ãĤĭ
s ión
Ġt ìm
×¢ ×ķ
m é
ни Ñı
ãģ» ãģ©
Ġà¹Ģà¸ŀ ราะ
ب ة
Ġë¶ Ħ
Ġ×IJ ×ĸ
à¸Ĺ à¹Īาà¸Ļ
ת ×Ŀ
Ġth êm
Ġho ạt
y ı
×ĸ ×ķ
Ġgi á»Ŀ
Ġb án
à¸Ĥ าย
Ñĩ а
Ġ à¹Ĩ
ĠاÙĦÙħ ت
ĠоÑĩ енÑĮ
Ġb ất
Ġtr ẻ
ÑĤ ÑĢ
ĠØ£ ÙĨÙĩ
ĠØ« Ùħ
Ġ׼ ×ŀ×Ķ
Ġkh ó
Ġr ằng
ĠÙĪ ÙģÙĬ
ни й
Ġho Ãłn
t ó
Ġ×IJ שר
ĠìĥĿ ê°ģ
Ñģ а
Ġ׼ ×ijר
ĠÑįÑĤ ом
lar ının
Ġch ưa
з и
Ġd ẫn
ĠÐļ ак
ج ÙĪ
ĠбÑĭ ло
ĠÙĬ ت
n ı
ÅĤ am
ĠÙĪÙĩ ÙĪ
×ij ×ķ
п и
ר ת
Ġqu á»ijc
ж д
ĠÄij Æ¡n
Ùĥت ب
Ġm ắt
ระ à¸ļ
ระà¸ļ à¸ļ
ĠÙĥ اÙĨت
Ġth ân
สิà¸Ļ à¸Ħà¹īา
×Ĵ ×Ļ
Ġph ương
à¹Ħมà¹Ī à¹Ħà¸Ķà¹ī
ĠìĦ ±
ĠC ác
Ġ×Ķ×ŀ ×ķ
ĠÑĤ ем
Ġ×ĵ ×ķ
à¸Ńะ à¹Ħร
Ġv Äĥn
ãģª ãģ®ãģ§
ĠN á»Ļi
Ġ×¢ ×ķ
ãĤīãĤĮ ãĤĭ
Ġs áng
Ġgö ster
ãģĵãģ¨ ãĤĴ
Ġtaraf ından
Ġм а
ĠпоÑģл е
Ġ׳ ×Ļת
Ġ׳×Ļת ף
Ġл еÑĤ
Ġ׾ ׳×ķ
Ñģ Ñģ
Ġ×Ļ ×ķ
п е
ĠÙĪ ÙĦÙĥ
ĠÙĪÙĦÙĥ ÙĨ
Ġngo Ãłi
ĠÄij á»ĭa
r zÄħd
dz iaÅĤ
ĠÙħ ر
иÑĤÑĮ ÑģÑı
Ġ×IJ×Ĺר ×Ļ
Ġ׾ ׼׾
à¸Ĥ à¹īà¸Ńม
à¸Ĥà¹īà¸Ńม ูล
Ġб ол
Ġбол ее
جÙħ ع
л еÑĤ
Ġl á»ĭch
ĠÙħ Ø«ÙĦ
Ġ그리 ê³ł
Ġth ứ
ĠdeÄŁ il
ÙĪ ØŃ
Ġש׾ ×ļ
ĠÙħ ØŃÙħد
Ġn ếu
ĠÄij á»ķi
Ġv ừa
Ġm á»įi
Ġо ни
Ġl úc
ĠÙĬ ÙĥÙĪÙĨ
ì§ Ī
Ġש׾ ׳×ķ
ĠÐĶ Ð¾
Ġש ׳×Ļ
ล ิ
×IJ פשר
Ġs ức
ê¶ Į
Ġ ứng
à¹Ħมà¹Ī มี
Ø·ÙĦ ب
ĠÑĩ ем
Ġch uyên
Ġth ÃŃch
Ġ×ķ ×Ļ
íķ ©
ĠÙħ صر
д о
ĠÄij ất
Ġch ế
à¸Ĭ ืà¹Īà¸Ń
Ġìĭ ł
ĠØ¥ ذا
Ġر ئÙĬس
Ġש ×Ļש
Ġgiả m
Ñģ ка
lar ında
Ġs ợ
ĠtÃŃ ch
ĠÙĦ ÙĥÙĨ
Ġب Ùħ
×¢ ×ķ×ij
×¢×ķ×ij ×ĵ
ÅĤÄħ cz
ları na
Ġש ×Ŀ
ĠÙĦ ت
Ġש×Ķ ×ķ×IJ
t ów
Ġëĭ¤ 른
ĠØ£ Ùĥثر
ãģ® ãģ§ãģĻ
׼ ×Ļ×Ŀ
ĠolduÄŁ unu
ãģĭ ãģª
ãĤĤ ãģĨ
ÙĬ ØŃ
Ġnh ìn
Ġngh á»ĩ
ãģ«ãģª ãģ£ãģ¦
п а
Ġquy ết
ÙĦ ÙĤ
t á
Ġlu ôn
ĠÄij ặc
Ġ×IJ ר
Ġtu á»ķi
s ão
ìĻ ¸
ر د
ĠبÙĩ ا
Ġ×Ķ×Ļ ×ķ×Ŀ
×ķ ×ķ×Ļ
ãģ§ãģĻ ãģŃ
ĠÑĤ ого
Ġth á»§
ãģĹãģŁ ãģĦ
ر ÙĤ
Ġb ắt
г Ñĥ
Ġtá» Ń
ÑĪ Ð°
Ġ à¸Ľà¸µ
Ġ×Ķ×IJ ×Ŀ
íı ¬
ż a
Ġ×IJת ×Ķ
Ġn á»Ļi
Ġph ÃŃ
ĠÅŁek ilde
Ġl á»Ŀi
d ıģı
Ġ׼×IJ ף
Ġt üm
Ġm ạnh
ĠM ỹ
ãģĿ ãĤĵãģª
Ġnh á»ı
ãģª ãģĮãĤī
Ġb ình
ı p
à¸ŀ า
ĠÄij ánh
ĠÙĪ ÙĦ
ר ×ķת
Ġ×IJ ×Ļ×ļ
Ġch uyá»ĥn
Ùĥ ا
ãĤĮ ãĤĭ
à¹ģม à¹Ī
ãĤĪ ãģı
ĠÙĪ ÙĤد
íĸ Īëĭ¤
Ġn Æ¡i
ãģ«ãĤĪ ãģ£ãģ¦
Ġvi ết
Ġà¹Ģà¸ŀ ืà¹Īà¸Ń
ëIJĺ ëĬĶ
اد ÙĬ
ĠÙģ Ø¥ÙĨ
ì¦ Ŀ
ĠÄij ặt
Ġh Æ°á»Ľng
Ġx ã
Ġönem li
ãģł ãģ¨
Ġm ẹ
Ġ×ij ×Ļ
Ġ×ĵ ×ijר
Ġv áºŃt
ĠÄij ạo
Ġdá»± ng
ĠÑĤ ом
ĠÙģÙĬ Ùĩا
Ġج ÙħÙĬع
Ġthu áºŃt
st ÄĻp
Ġti ết
Ø´ ÙĬ
Ġе Ñīе
ãģĻãĤĭ ãģ¨
ĠmÃł u
ĠÑįÑĤ ого
Ġv ô
ĠÐŃ ÑĤо
Ġth áºŃt
Ġn ữa
Ġbi ến
Ġn ữ
Ġ׾ ׼×Ŀ
×Ļ ×Ļף
Ġس ت
ĠÐŀ ÑĤ
Ġph ụ
ê¹Į ì§Ģ
Ġ׾ ×ļ
Ġk ỳ
à¹ĥ à¸Ħร
Ġg ây
ĠÙĦ ÙĦÙħ
Ġtụ c
ت ÙĬÙĨ
Ġtr ợ
Ġ׾ פ×Ļ
Ġb á»ij
ĠÐļ а
ĠÄij ình
ow Äħ
s ında
Ġkhi ến
s ız
Ġк огда
ס ׾
ĠбÑĭ л
à¸Ļ à¹īà¸Ńย
обÑĢаР·
Ġê²ĥ ìĿ´ëĭ¤
ëĵ¤ ìĿĢ
ãģ¸ ãģ®
Ġà¹Ģม ืà¹Īà¸Ń
Ġph ục
Ġ׊׾ק
Ġh ết
ĠÄij a
à¹Ģà¸Ķà¹ĩ à¸ģ
íĺ ķ
l ÃŃ
ê¸ ī
Ġع دد
ĠÄij á»ĵ
Ġg ần
Ġ×Ļ ×ķ×Ŀ
Ġs Ä©
ÑĢ Ñıд
Ġquy á»ģn
Ġ×IJ ׾×IJ
Ùĩ Ùħا
׳ ×Ļ×Ķ
׾ ×ķת
Ġ×Ķר ×ij×Ķ
Ġti ên
Ġal ın
Ġd á»ħ
人 ãģĮ
но Ñģ
л ÑģÑı
ĠÄij ưa
ส าว
иÑĢов ан
Ġ×ŀס פר
×Ĵ ף
Ġki ến
ĠÐ ¨
p é
б Ñĥ
ов ой
б а
ĠØ¥ ÙĦا
×IJ ׾×Ļ
Ġx ây
Ġb ợi
Ġש ×ķ
人 ãģ®
×§ ×Ļ×Ŀ
à¹Ģà¸Ķ ืà¸Ńà¸Ļ
Ġkh á
Ġ×ķ ׾×Ķ
×ĵ ×ķת
Ġ×¢ ×ij×ķר
Ġبش ÙĥÙĦ
ĠÙĩÙĨا Ùĥ
ÑĤ ÑĢа
Ġ íķĺëĬĶ
ร à¸Ńà¸ļ
owa ÅĤ
h é
Ġdi á»ħn
Ġ×Ķ ×Ľ×ľ
ĠØ£ س
Ġch uyá»ĩn
ระ à¸Ķัà¸ļ
ĠNh ững
Ġ×IJ ×Ĺת
ĠØŃ ÙĪÙĦ
л ов
׳ ר
Ġ×ķ ׳
Ġch Æ¡i
Ġiç inde
ÑģÑĤв Ñĥ
Ġph á»ij
ĠÑģ Ñĥ
ç§ģ ãģ¯
Ġch ứng
Ġv á»±c
à¹ģ à¸Ń
Ġl áºŃp
Ġtừ ng
å°ij ãģĹ
ĠNg uy
ĠNguy á»ħn
ĠÙģÙĬ Ùĩ
Ġб а
×Ļ ×Ļת
Ġ×ľ×¢ ש×ķת
Ġ×ŀ ׼
Ġnghi á»ĩm
Ġм ного
Ġе е
ëIJĺ ìĸ´
Ġl ợi
Ġ׾ ׾×IJ
Ġ׼ ף
Ġch ÃŃ
ãģ§ ãģ®
×Ĺ ×ķ
ש ×ķ×Ŀ
Ġ×ŀ ר
ĠÐĶ Ð»Ñı
Å ģ
Ġ׼×IJ שר
ĠM á»Ļt
ĠÙĪØ§ÙĦ ت
ĠìĿ´ 룰
ÅŁ a
Ġchi ến
Ġaras ında
Ġ×ij ×IJתר
ãģķãĤĮ ãģ¦ãģĦãĤĭ
Ø´ ÙĥÙĦ
Ġt ượng
Ġت ت
ĠC ó
Ġb á»ı
Ġtá»ī nh
Ġkh ÃŃ
ĠпÑĢ Ð¾ÑģÑĤ
ĠпÑĢоÑģÑĤ о
ĠÙĪ ÙĤاÙĦ
Ġgi áo
ĠN ếu
×IJ ×ŀר
×¢×ł×Ļ ×Ļף
íİ ¸
Ùĩد Ùģ
ĠB á»Ļ
Ġb Ãłn
Ġng uyên
Ġgü zel
ส าย
ì² ľ
×ŀ ×ķר
Ġph ân
ס פק
×§ ×ij׾
ĠاÙĦÙħ تØŃ
ĠاÙĦÙħتØŃ دة
ائ د
Ġ×IJ ×ŀר
Ġki ÅŁi
ì¤ Ģ
Ġtr uyá»ģn
ĠÙĦ Ùĩا
ĠÐľ а
à¸ļริ ษ
à¸ļริษ ั
à¸ļริษั à¸Ĺ
Ġש ׳×Ļ×Ŀ
Ġмен Ñı
ÅŁ e
Ġdi á»ĩn
Ġ×IJ׳ ×Ĺ׳×ķ
k ü
Ġc á»ķ
Ġm á»Ĺi
w ä
Ùħ ÙĬ
Ġhi á»ĥu
ëĭ ¬
Ġ×Ķ ×Ĺ׾
Ġt ên
Ġki á»ĩn
ÙĨ ÙĤÙĦ
Ġv á»ĩ
×ĵ ת
ĠÐłÐ¾ÑģÑģ ии
л Ñĥ
ĠاÙĦع ربÙĬØ©
ĠØ· رÙĬÙĤ
Ġ×Ķ×ij ×Ļת
Ñģ еÑĢ
Ġм не
ä u
Ġtri á»ĩu
ĠÄij á»§
Ġר ×ij
ت ÙĩÙħ
à¸ĭ ี
Ġì§Ģ ê¸Ī
li ÅĽmy
د عÙħ
ãģł ãĤįãģĨ
Ñģки е
Ġh á»ıi
Ġ×§ ×ķ
ÑĢÑĥ Ñģ
ÙĨ ظر
ãģ® ãĤĤ
Ġ×Ķ ×Ľ×Ļ
ĠìĽ IJ
ÙĪ Ùĩ
ĠÙĪ Ùİ
ĠB ạn
п лаÑĤ
Ġ×ŀ ×ŀש
лÑİ Ð±
ĠнÑĥж но
Ġth ư
ãģ µ
ãģı ãĤīãģĦ
ر ش
ר ×ķ×Ĺ
ĠÙĬ تÙħ
Ġצר ×Ļ×ļ
Ġph á
ม à¸Ńà¸ĩ
Ġ×ij×IJ ×ķפף
Ġcả nh
Ġíķľ ëĭ¤
Ġ×Ķ×ŀ ת
à¸ķà¹Īาà¸ĩ à¹Ĩ
มี à¸ģาร
Ñģки Ñħ
ĠÐĴ Ñģе
Ġا ÙĪ
ج ÙĬ
ãģĵãģ¨ ãģ¯
Ġd Ãłi
Ġh á»ĵ
èĩªåĪĨ ãģ®
à¹Ħ หà¸Ļ
ëĵ¤ ìĿĦ
ĠV Äĥn
Ġд аж
Ġдаж е
Ñĭ ми
лаÑģ ÑĮ
ÙĬ ÙĪÙĨ
ÙĨ ÙĪ
c ó
ãģĹãģ¦ ãģĦãģŁ
ãģł ãģĭãĤī
طاÙĦ ب
Ġc á»Ńa
п ÑĢоÑģ
ãģªãģ© ãģ®
รุ à¹Īà¸Ļ
Ġchi ếc
л Ñĭ
ĠÑıвлÑı еÑĤÑģÑı
Ġn á»ķi
ãģ® ãģĬ
Ġ×IJת ×Ŀ
ĠëķĮ문 ìĹIJ
à¸ģล าà¸ĩ
ĠbaÅŁ ka
ìĦ Ŀ
ĠÑĨ ел
Ùģ ÙĤ
ãģ«ãĤĪ ãĤĭ
ÙĤ ا
Ġçı kar
Ġcứ u
ط ا
Ġש ת
à¹Ĥ à¸Ħ
Ġ×ŀ ׾
Ġ×Ķ ×¤×¨
Ġг де
ĠØ® Ø·
åīį ãģ«
c jÄĻ
Ġ׊ש×ķ×ij
ר×Ĵ ×¢
Ġkho ảng
ĠÄij á»Ŀi
ĠÐł е
Ġо на
Ġ×IJ ׳×ķ
ãģ® ãģ«
ĠاÙĦذ ÙĬÙĨ
кÑĥ п
ãĤµ ãĥ¼ãĥ
ãĤµãĥ¼ãĥ ĵ
ãĤµãĥ¼ãĥĵ ãĤ¹
в ал
г е
Ġgi ữa
ĠKh ông
ĠâĹ ĭ
à¸ģล ุà¹Īม
ĠÙħÙĨ ذ
à¸Ń à¹Īาà¸Ļ
ĠÑģп оÑģоб
ĠÄij á»Ļi
Ġdi ÄŁer
Ġ à¸ĸà¹īา
Ùħ Ø«ÙĦ
Ġ×Ķ×IJ ×Ļ
Ġد ÙĪÙĨ
ÙĬر اÙĨ
Ñī и
بÙĨ اء
ĠØ¢ خر
ظ Ùĩر
Ġ×ij ׼
ĠاÙĦÙħ ع
ãĥ Ĵ
Ġt ất
Ġm ục
ĠdoÄŁ ru
ãģŁ ãĤī
Ġס ×ķ
Ġx ác
ร à¸Ń
ĠcÄĥ n
Ġон л
Ġонл айн
Ġk ý
Ġch ân
Ġ à¹Ħมà¹Ī
اØŃ Ø©
r án
׳×Ļ ×Ļ×Ŀ
Ġ×ij ף
ĠÐ ĸ
à¸ķร à¸ĩ
д Ñĭ
Ġs ắc
ÙĦ ت
ãĥŃ ãĥ¼
ĠÙĦ ÙĨ
Ġר ×ķ
Ġd Æ°á»Ľi
à¹Ģ à¸ĺ
à¹Ģà¸ĺ à¸Ń
e ÄŁi
Ġ×ķ ש
ĠÙĦ Ø£
Ġg ặp
Ġc á»ij
ãģ¨ ãģ¦ãĤĤ
رÙĪ Ø³
Ġ׾×Ķ ×Ļ
Ġë³ ¸
ä¸Ĭ ãģĴ
Ġm ức
Ñħ а
Ġìŀ ¬
à¸ī ัà¸Ļ
ÑĢÑĥ ж
Ġaç ık
ÙĪ Ø§ÙĦ
Ġ×ĸ ×ŀף
人 ãģ¯
ع ÙĬÙĨ
Ñı Ñħ
Ġ×Ĵ×ĵ ×ķ׾
ר ×ķ×ij
g ó
ëĿ¼ ê³ł
Ġark adaÅŁ
ÙĨ شر
Ġгод Ñĥ
ĠболÑĮ ÑĪе
ãģ¡ãĤĩ ãģ£ãģ¨
Ġcâ u
Ġs át
íĶ ¼
Ġti ến
íķ´ ìķ¼
ĠÙĪ Ø£ÙĨ
à¸Ļ าà¸Ļ
Ġ×ij×IJ×ŀ צע
Ġ×ij×IJ×ŀצע ×ķת
Ġ׾ ר
Ġqu ản
ĠÙĪØ§ÙĦ Ø£
Ġ×IJ×ķת ×Ķ
Ġìĸ´ëĸ ¤
Ġê²ĥ ìĿĢ
ØŃس ÙĨ
Ġm ất
à¸Ħ ูà¹Ī
ãĥ¬ ãĥ¼
ĠÐĶ Ð°
Ġol ması
Ġthu á»Ļc
׳ ×Ĺ
íĨ ł
Ġsö yle
ãģĿãģĨ ãģ§ãģĻ
Ġت ÙĥÙĪÙĨ
л ÑĥÑĩ
׾ ×Ļ×ļ
ĠØ£ ØŃد
ли ÑģÑĮ
ĠвÑģ его
Ġ×Ķר ×ij
Ġëª »
o ÄŁ
oÄŁ lu
ĠìĦ ł
Ġк аÑĢ
à¸łà¸² à¸Ħ
e ÅĦ
Ġ à¸ģà¹ĩ
Ġa ynı
Ġb Ãł
ãģªãĤĵ ãģ¦
Ġ모 ëĵł
ÙĤر ار
ãģĹãģª ãģĦ
ĠÐĴ о
ĠÙĪÙĩ ÙĬ
ни ки
ãĤĮ ãģŁ
Ġchu ẩn
ר ע
Ùģ Ø±ÙĬÙĤ
ãĤĴ åıĹãģij
ĠÄij úng
б е
׼ ×ķ×Ĺ
п Ñĥ
Ġ×ķ ×Ĵ×Ŀ
×ŀ ׳×Ļ
íĸ ¥
צ ×Ļ×Ŀ
à¸ĭ ิ
Ùĩ ÙĨ
н ем
Ġ×ij×ij ×Ļת
ر ع
Ġ ส
ĠÄIJ Ãł
íķĺ ëĭ¤
Ġ ấy
×Ĺ ×ķ×ĵ
×Ĺ×ķ×ĵ ש
ĠÑĩеÑĢ ÐµÐ·
Ñĥ л
ĠB ình
Ġê²ĥ ìĿĦ
Ġ×Ĵ ר
ä»ĺ ãģij
×Ĺ׾ ×§
Ġت ÙĦÙĥ
à¹ĥส à¹Ī
sz Äħ
ÙĤ اÙħ
د ÙĪØ±
ĠÙģ ÙĤØ·
Ġh ữu
Ġмог ÑĥÑĤ
Ġg á»įi
Ġ×§ ר
à¸Īะ มี
ت ÙĤدÙħ
Ġع بر
Ġ׾×Ķ ×Ŀ
ĠÑģам о
ס ×ĵר
Ġc Ãłng
r ÃŃ
Ġìŀ ¥
ëĵ¤ ìĿĺ
ĠÙĦ Ùĥ
п оÑĢÑĤ
Ġkh ả
ĠÑģеб Ñı
׳ ף
Ġد ÙĪØ±
Ġm ợ
Ġcâ y
Ġf ark
Ġfark lı
а ÑİÑĤ
Ġtr á»±c
wiÄĻks z
Ġthu á»ijc
Ġت ØŃت
ت ÙĦ
ов Ñĭе
ëĤ ł
Ġв ам
بÙĦ غ
Ġê°Ļ ìĿĢ
íĮ IJ
ÙĦ ب
Ġnas ıl
Ġод ин
м ан
ĠعÙĦÙĬ Ùĩا
б и
Ġפ ש×ķ×ĺ
×ijר ×Ļ
Ġש ׳×Ķ
Ġëı Ħ
ĠÄIJ ại
Ġ×IJ×ķת ×Ŀ
ĠاÙĦØŃ ر
Ġб о
à¸Ī ุà¸Ķ
Ġr õ
ĠdeÄŁi ÅŁ
Ġëĭ ¨
ĠÑģлÑĥÑĩ а
ĠÑģлÑĥÑĩа е
Ġ×IJ׳ ש×Ļ×Ŀ
×ĵ ×£
ש×ij ת
Ġש׾ ׼×Ŀ
Ġch ú
nik ów
Ġtan ı
Ġcá o
ĠÄij á
Ġ×IJ ×ĵ×Ŀ
Ġê° ķ
Ġnhi á»ĩm
Ġ׾ ס
Ġ×Ľ×ª ×ij
Ġ×Ķס פר
ĠÄij Äĥng
Ġë ijIJ
à¸ľ ิ
à¸ľà¸´ ว
ج ا
Ġê° IJ
ر أ
ست خدÙħ
ãģ«ãģªãĤĬ ãģ¾ãģĻ
Ġtá» ·
×ĺ ×ķר
г овоÑĢ
Ġв оÑģ
ĠÙħÙĨ Ùĩا
иÑĢов аÑĤÑĮ
ĠÄij ầy
׳ ×Ĵ
ĠÙħ ÙĪ
ĠÙħ ÙĪÙĤع
ר׼ ×Ļ
ت Ùı
ëª ¨
Ġת ×ķ
ÙĬا Ùĭ
à¹ĥ à¸Ķ
ãĤĬ ãģ¾ãģĻ
à¸Ńยูà¹Ī à¹ĥà¸Ļ
ĠØ£ ÙĪÙĦ
ĠØ£ خرÙī
Ġc ư
ص ار
×ŀ׊ש×ij
б ÑĢа
ÅĦ ski
б ÑĢ
ĠÙĬ Ùı
à¸ģ ิà¸Ļ
Ġch á»ijng
Ùħ Ùı
Ġ à¸Ħืà¸Ń
Ġت ÙĨ
t ÃŃ
y Äĩ
Ġm ạng
Ùģ ÙĪ
Ġdü nya
×§ ר×IJ
Ġ×§ ׾
ĠØŃ اÙĦ
c ÃŃa
Ġà¹Ģ รา
Ġר ×ķצ×Ķ
Ġá p
ë° ķ
ا ÙĤØ©
ни Ñİ
Ġ×IJ ׾×ķ
Ġ×ŀס ×ķ
ãģ§ãģ¯ ãģªãģı
Ġtr ả
Ġ×§ שר
mi ÅŁtir
Ġl ưu
Ġh á»Ĺ
ĠбÑĭ ли
Ġl ấy
عÙĦ Ùħ
Ġö zel
æ°Ĺ ãģĮ
Ġ×ĵ ר×ļ
Ùħ د
s ını
׳ ×ķש×IJ
r ów
Ñĩ еÑĢ
êµIJ ìľ¡
ĠÐľ о
л ег
ĠV Ỽi
วัà¸Ļ à¸Ļีà¹ī
ÑİÑī ие
ãģĬ ãģĻ
ãģĬãģĻ ãģĻ
ãģĬãģĻãģĻ ãĤģ
ëı ħ
Ġ×Ļ×Ķ ×Ļ×Ķ
×ŀ ×ĺר
Ñı ми
Ġl á»±a
ĠÄij ấu
à¹Ģส ียà¸ĩ
Ġt ương
ëĵ ±
ĠÑģÑĤ аÑĢ
à¹ĥ à¸ļ
ว ัà¸Ķ
Ġİ stanbul
Ġ à¸Īะ
à¸ķ ลาà¸Ķ
Ġب ÙĬ
à¹ģà¸Ļ ะ
à¹ģà¸Ļะ à¸Ļำ
س اعد
Ġب Ø£
Ġki á»ĥm
ØŃ سب
à¸Ĭั à¹īà¸Ļ
Ġ×ķ ×¢×ķ×ĵ
ов ÑĭÑħ
оÑģ нов
Ġtr Æ°á»Łng
צ ×ij×¢
ĠÃŃ t
Ġk ỹ
cr é
Ñı м
êµ °
ãģĮ ãģªãģĦ
ÙĬÙĦ Ø©
ãĥķ ãĤ£
ر Ùī
ĠÙĬ جب
Ġ×IJ ×£
Ġc á»±c
ãĤīãĤĮ ãģŁ
Ġ à¸ľà¸¹à¹ī
Ġ à¸Ń
lar ımız
Ġkad ın
Ġê·¸ ëŀĺ
Ġê·¸ëŀĺ ìĦľ
ĠëĺIJ ëĬĶ
ĠÄij ả
ĠÄijả m
Ġ×IJ ×ķ×ŀר
Ġy ếu
ci Äħ
ciÄħ g
Ġt á»ij
Ġש×IJ ׳×Ļ
Ġdz iaÅĤa
Ñī а
ĠÄij Ãłn
s ına
ãģĵãĤĮ ãģ¯
Ġ×ij ׾×Ļ
Ġ×ij ×Ļשר×IJ׾
л оÑģÑĮ
Ġgi ữ
ê° IJ
ÑĢ Ð¾Ð½
تج ار
г лав
в ин
Ġh ạn
Ġyapı lan
ب س
Ġ à¸ŀรà¹īà¸Ńม
ê´Ģ 리
mÄ±ÅŁ tır
b ü
r ück
ĠBaÅŁkan ı
ĠÙĦ ÙĬس
Ġs Æ¡
à¸Īัà¸ĩ หว
à¸Īัà¸ĩหว ัà¸Ķ
د اء
Ġ×Ķ ×Ľ
v ÃŃ
ש ×IJר
Ġh Æ°á»Łng
Ġb óng
ĠCh ÃŃnh
Äħ c
à¹Ģà¸ģีà¹Īยว à¸ģัà¸ļ
Ġtá» ©
Ġtứ c
ĠÑĨ веÑĤ
Ġt á»iji
ĠnghÄ© a
ÙĦا عب
د ÙĦ
Ġפע ×Ŀ
h ör
à¸Ĭ ุà¸Ķ
à¸ŀ ู
à¸ŀู à¸Ķ
п аÑģ
ĠÅŁ u
Ġt Æ°á»Łng
خار ج
Ġâ m
ĠинÑĤеÑĢ ÐµÑģ
ен нÑĭÑħ
×IJ ׳×Ļ
بد أ
ëĿ¼ ëĬĶ
ì¹ ´
æĸ¹ ãģĮ
ли в
Ġ à¸Ħà¸Ļ
ער ×ļ
à¸Ĥà¸Ńà¸ĩ à¸Ħุà¸ĵ
п ад
Ġc ạnh
ĠëĤ ¨
ĠÄij âu
Ġbi á»ĥu
ãĤĤ ãģĤãĤĭ
׾ ×Ĵ
Ġ สำหรัà¸ļ
Ġxu á»ijng
ס ×ķ
Ġذ ات
ĠÐľ е
ع اÙĦÙħ
×IJ ס
ب ÙĬØ©
ش ا
и ем
ĠNg ưá»Ŀi
íĺ ij
Ñģл ов
Ġп а
Ġm ẫu
ĠпÑĢоÑĨ еÑģÑģ
ĠNh Ãł
пÑĢо из
пÑĢоиз вод
à¸łà¸²à¸¢ à¹ĥà¸Ļ
Ġ à¸ļาà¸Ĺ
×ŀ ׳×ķ
ĠоÑĢг ан
רצ ×ķ
×ķ×ŀ ×Ļ×Ŀ
Ġyaz ı
Ġd ù
ãĥ¬ ãĥ³
ÙĪÙĦ ÙĬ
ย ู
Ġtr ò
à¹Ģà¸ŀ ลà¸ĩ
Ġ×ŀ ׾×IJ
à¸ķ ล
à¸ķล à¸Ńà¸Ķ
ĠÄij ạt
Ġ×Ĺ×ĵ ש
p óÅĤ
Ġ×ŀ ×ĵ×Ļ
ujÄħ c
×ŀ׳×Ķ ×ľ
Ġש×ij ×ķ
Ġ×Ķ×ŀש פ×ĺ
Ġ×IJ ׾×Ķ
ĠÙĪ Ø°ÙĦÙĥ
à¹Ģà¸ŀ ราะ
ĠÄijo Ãłn
Ġíķ¨ ê»ĺ
Ġd ục
ش ت
Ġ ula
Ġula ÅŁ
Ġqu ý
Ġ×Ķ ×Ĵ×ĵ×ķ׾
à¸ķัà¹īà¸ĩ à¹ģà¸ķà¹Ī
Ġש ר
Ø´ Ùĩد
׳ ש×Ļ×Ŀ
à¸ŀ ล
رÙĪ Ø§
ãĤĮ ãģ¦
Ġн иÑħ
Ġдел а
ãģ§ãģį ãģªãģĦ
ÅĤo ż
×IJ ×Ĺר
ì ½Ķ
ãĤ¢ ãĥĥãĥĹ
د Ù쨹
Ġti á»ĩn
Ġkh á»ı
Ġkhá»ı e
ĠاÙĦع اÙħØ©
ãģ« ãģĤãĤĭ
ĠÄij á»Ļc
ì¡ ±
Ġc ụ
й ÑĤе
Ġзак он
ĠпÑĢо екÑĤ
ìĸ ¸
ÙĦ ØŃ
ĠçalÄ±ÅŁ ma
ãĤĴ ãģĻãĤĭ
Ñħ и
ع اد
Ġ׳ ×ŀצ×IJ
Ġר ×Ļ
à¸Ńà¸Ńà¸ģ มา
ĠT ôi
Ġth ần
ĠÙĬ ا
ล าย
Ġав ÑĤо
Ġsı ra
ĠÙĥ Ø«ÙĬر
Ùħ ÙĬز
ĠاÙĦع ÙĦÙħ
æĸ¹ ãģ¯
×ķ×¢ ×ĵ
Ġобла ÑģÑĤи
×Ļ׾ ×Ļ×Ŀ
ãģĮ åĩº
à¸ĺ ุ
à¸ĺุ ร
à¸ĺุร à¸ģิà¸Ī
ÙĤت ÙĦ
ר×IJ ×ķ
Ġng u
Ġngu á»ĵn
Ġ มา
Ġпл ан
t ório
Ġcu á»iji
Ñģк ом
ĠاÙĦÙħ اض
ĠاÙĦÙħاض ÙĬ
Ġ×ij×¢ ׾
Ġר ×ij×Ļ×Ŀ
Ġlu áºŃn
Ùĥ ÙĪ
à¸Ĺัà¹īà¸ĩ หมà¸Ķ
в ан
Ġtho ại
à¹Ħ à¸Ń
б иÑĢ
ĠاÙĦ ض
ت ا
ĠÑĢ Ð¾Ð´
ĠV Ãł
×ŀ ×Ļף
ĠбÑĭ ла
к ами
ĠÐĶ Ðµ
t ık
קר ×Ļ
ĠeÄŁ itim
ĠÙĥ بÙĬر
ب Ùĥ
ĠÙĦ ÙĪ
в ой
Ġ ãģĵãģ®
ĠÑĤ ÑĢÑĥд
my ÅĽl
Ġs ư
à¸ŀ ีà¹Ī
Ġ à¹ģลà¹īว
×¢ ×§
Ġ×Ĺ×ijר ת
ระ หว
ระหว à¹Īาà¸ĩ
×Ļ ×Ļ×Ķ
ĠاÙĦÙĨ اس
ün ü
Ġ׾ ×ŀ×Ķ
Ġch ương
ĠH á»ĵ
ار ت
ãĤĪãģĨ ãģ§ãģĻ
l á
×§×Ļ ×Ļ×Ŀ
æľ¬ å½ĵ
æľ¬å½ĵ ãģ«
ãģĵãĤĵ ãģª
Ñģ ов
Ġ×ķ ×Ĺ
à¹Ģà¸ģ à¹ĩà¸ļ
Ġк ÑĤо
à¹Ĥร à¸Ħ
ĠØ´ رÙĥØ©
ع زÙĬ
عزÙĬ ز
Ø·ÙĦ ÙĤ
п ÑĥÑģÑĤ
Ùģ ØªØŃ
ëŀ Ģ
Ġhã y
ض Ùħ
ë¦ °
åł´åIJĪ ãģ¯
ãĤª ãĥ¼
Ġh ắn
Ġ×IJ ×ij×Ļ×ij
Ġש׾×Ķ ×Ŀ
Ġ×Ķ×Ļ ×Ļת×Ķ
ĠاÙĦد ÙĪÙĦØ©
ĠاÙĦ ÙĪÙĤ
ĠاÙĦÙĪÙĤ ت
ãģĤ ãģ¾ãĤĬ
Ġta ÅŁÄ±
İ N
ע סק
ãģ¦ ãģĦãģŁ
Ġtá»ķ ng
ĠاÙĦØ¥ ÙĨس
ĠاÙĦØ¥ÙĨس اÙĨ
ÑĢ ÐµÑĪ
Ġg ái
ĠÑĨ ен
ĠÙģ ÙĤد
Ùħ ات
ãģķãĤĵ ãģ®
Ġph ù
×ĺ ×Ķ
ĠÙĪØ§ÙĦ تÙĬ
Ġب Ùĥ
ìĿ´ ëĤĺ
к Ñģ
Ùħ ÙĬر
Ġv ùng
ĠاÙĦØ´ عب
ĠNh ưng
ãĥĢ ãĥ¼
Ġ×Ĺ×Ļ ×Ļ×Ŀ
ĠØ´ خص
×§ ×ķ×ĵ
ê² Ģ
ע ש
×¢ ×ķ׾×Ŀ
צ ×ķר
ع ÙĤد
ĠiÅŁ lem
Ġ×Ķ×ij ×IJ
Ġd ưỡng
à¸Ł รี
Ġph ÃŃa
ãģ®ä¸Ń ãģ§
Ġп и
Ġng Ãłnh
ним а
ĠÙĩ ÙĦ
Ġ×ķ ×IJת
ĠÄij áng
é quipe
ĠÑįÑĤ оÑĤ
Ġgö rev
ë§ ¤
Ġqu ân
å¼ķ ãģį
æĻĤ ãģ«
Ġب Ùħا
×ŀ ×Ļת
Ġü lke
Ġ×ŀ×§ ×ķ×Ŀ
×ij ף
æ°Ĺ æĮģãģ¡
Ġë§İ ìĿĢ
Ġyük sek
ÑĨ енÑĤÑĢ
ĠÙħ جÙĦس
ç§ģ ãģ®
ÙĤد ر
Ġë¶Ģ ë¶Ħ
Ġì° ¨
خر ج
ãģĭ ãģªãĤĬ
ë³´ ëĭ¤
Ġ×ŀ ×Ļ×ĵ×¢
peÅĤ ni
Ġx á»Ń
ìĹIJìĦľ ëĬĶ
ĠباÙĦ Ùħ
ĠÙĪ Ùħا
ĠÑįÑĤ ой
ب ÙĬÙĨ
n ü
ØŃ ز
ØŃز ب
ĠÑĢабоÑĤ а
ĠNh áºŃt
ÙĦ اء
Ġëĵ ¤
Ġëĵ¤ ìĸ´
ãĤĦãģĻ ãģĦ
×Ĺ×ĸ ×§
Ġ×Ķ×Ĺ ×ijר×Ķ
п иÑĤ
ãģĭãĤī ãģ®
Ġë§IJ ìĶĢ
Ġפ ×ķ
ÙĦ Ùİ
à¹Ģà¸ķà¹ĩ ม
ĠÐļ о
Ġm ówi
Ġt ÃŃn
ר×Ĵ ש
פר ק
Ġtr ạng
ĠÐŀ н
×Ĺ ×ķ×¥
ĠعÙĨد Ùħا
Ġب ر
使 ãģĦ
Ġr á»Ļng
ëĮĢ ë¡ľ
íĪ ¬
Ġktóry ch
в ид
ลูà¸ģ à¸Ħà¹īา
Ġmog Äħ
Ġש ×Ĺ
×ij ×Ĺר
ãĥĸ ãĥŃãĤ°
ĠTh Ãłnh
Ġ×Ķ ×¨×Ļ
ĠÑģÑĤ аÑĤÑĮ
ĠH á»Ļi
à¸ļ à¹īาà¸ĩ
çī¹ ãģ«
ĠÄIJ ức
èĢħ ãģ®
×¢ ×ŀ×ķ×ĵ
×ĺר ×Ķ
Ð ¥
ĠÙħ Ùħا
Ġe ÅŁ
ĠнеобÑħодим о
ник ов
Ġüzer inde
a ÅĤa
Ġchá»ĭ u
ĠاÙĦ دÙĬÙĨ
أخ بار
ĠÄij au
ãģĮ å¤ļãģĦ
jÄħ cych
د Ø®ÙĦ
ları nd
larınd an
Ġs ẻ
à¸ŀิ à¹Ģศ
à¸ŀิà¹Ģศ ษ
ת ף
t ıģı
Ġlu áºŃt
ĠÅŀ e
ãĤ« ãĥ¼
ãģ® ãģĤãĤĭ
Ġ×Ķ×IJ תר
ĠاÙĦØ¢ ÙĨ
ıld ı
Ġá o
ĠнаÑĩ ал
Ġvi á»ĩn
Ġ×ij×¢ ×ķ׾×Ŀ
з наÑĩ
×Ļ×ĺ ×Ķ
к ам
ĠÐĺ з
à¹Ģà¸Ĥ ียà¸Ļ
à¸Ļ à¹īà¸Ńà¸ĩ
ÑĤ ÑĢо
à¹Ģ à¸Ł
Ġжиз ни
Ġ สà¹Īวà¸Ļ
Ġv áºŃn
Ġê´Ģ 볨
Ġl âu
ס ×ĺר
ק ש
س ÙĬر
Ġ×IJ×ķת ×Ļ
Ġm ôi
ائ ب
Ġо ÑģÑĤа
Ġm ón
Ġ×ij ×ŀ×§×ķ×Ŀ
Ġد اخÙĦ
Ġ×IJ ×ķר
Ġв аÑģ
Ùĥ Ø´Ùģ
ìĺ ¨
à¸ĸ à¹Īาย
Ġkullan ıl
Ġt ô
ãģ« ãĤĪãĤĬ
ĠëĺIJ íķľ
Ġ×¢×ij×ķ×ĵ ×Ķ
Ġri ê
Ġriê ng
Ġyak ın
ز ا
Å »
×IJ ×ķ׼׾
شار Ùĥ
Ġб еÑģ
× ´
Ġا بÙĨ
ĠTá»ķ ng
ÙĨ ظ
ÅĽwi ad
ãĤµ ãĥ¼
ห าย
ĠG ün
Ġhakk ında
à¹Ģà¸Ĥà¹īา มา
ز ÙĨ
ĠÐł о
Ġbi á»ĥn
ãģ© ãģĵ
Ùģ Ø¹ÙĦ
ز ع
פר ×ĺ
Ġ×Ķ ×Ł
Ø£ ÙĩÙĦ
Ġth ất
ØŃ ÙħÙĦ
Ñĩ Ñĥ
ĠìĤ¬ ìĭ¤
ì° ¸
ĠìľĦ íķ´
ÙĪ Ø¸
ĠÐŁ од
Ġkho ản
ÑĤ ен
ĠÙģ Ø§ÙĦ
Ñģ ад
à¸Ļ à¸Ńà¸Ļ
ĠاÙĦسعÙĪØ¯ ÙĬØ©
" ØĮ
ĠاÙĦ ÙĴ
ãĤī ãģļ
Ġto án
Ġch ắc
׼ ×Ļר
m éd
méd ia
ز ÙĪ
Ġyan ı
פ ׳×Ļ×Ŀ
ØŃ ظ
Ġб еÑģп
ĠбеÑģп лаÑĤ
ĠбеÑģплаÑĤ но
ĠØ£ ÙħاÙħ
à¸Ń าย
à¸Ńาย ุ
ר שת
Ġg á»ĵ
Ġgá»ĵ m
Ġu á»ijng
ص ب
k ır
ãĥij ãĥ¼
Ġ׾×ĵ עת
Ġк ÑĥпиÑĤÑĮ
׾ ×ķ×Ĺ
ÙĪØ¶ ع
ÙĤÙĬ Ùħ
à¸Ľ า
ж ив
à¸Ķ ิà¸Ļ
×IJ ×ķפ
à¹Ģล à¹ĩà¸ģ
ãĥĥ ãĥī
иÑĩеÑģки Ñħ
ĠCh á»§
кÑĢ Ð°Ñģ
ÙĪ ØµÙĦ
p ÅĤat
м оÑĢ
Ġ×Ķ×IJ ×ķ
à¸Ń ิà¸Ļ
Ġíķľ êµŃ
гÑĢ Ðµ
Ġìłľ ê³µ
ì° ½
Ġê°ľìĿ¸ ìłķë³´
Ġngh á»ĭ
à¸ĭ า
ØŃس اب
Ġby ÅĤa
ÙħÙĦ Ùĥ
иÑĩеÑģки е
Ġb ác
ض ØŃ
ê¸ ¸
ש ×ŀ×¢
Ġìĸ´ëĸ »
Ġìĸ´ëĸ» ê²Į
ìĽ Į
ات Ùĩ
à¹Ĥรà¸ĩ à¹ģ
à¹Ĥรà¸ĩà¹ģ รม
خد ÙħØ©
ĠÐł а
׼×ķ׾ ×Ŀ
×ŀש ×Ĺ×§
ĠÙĪ ÙĥاÙĨ
ס ×ķ×£
ĠاÙĦØŃÙĥÙĪÙħ Ø©
Ġ×ij ×ĺ
Ġtr áºŃn
Ġ×Ķ×¢ ×ķ׾×Ŀ
ĠÃŃ ch
t Äħ
ש×ŀ ×ķ
Ġ×Ķר×IJש ×ķף
Ġíķĺ ê³ł
ãģķ ãĤī
ãģķãĤī ãģ«
ãģ« ãģĹãģ¦
Ġ à¸ľà¸¡
ãģ® ãĤĪãģĨãģª
ĠÙĪ ÙĤت
ãĥį ãĥĥãĥĪ
ÙĦ عب
ÙĪ Ø´
ìĺ ¬
Ġ หาà¸ģ
Ġm iaÅĤ
à¸Ĺ à¸Ńà¸ĩ
иÑĤ а
ا صر
ил ÑģÑı
з е
à¸Ľà¸£à¸° มาà¸ĵ
ãģĿãĤĮ ãģ¯
Ġb ır
Ġbır ak
صÙĨ اع
Ð ®
ش عر
Ġ׳ ×Ĵ×ĵ
Ġب سبب
ãĥĿ ãĤ¤
ãĥĿãĤ¤ ãĥ³ãĥĪ
ĠاÙĦج ÙĪ
ĠнеÑģк олÑĮко
Ġki ếm
Ùģ Ùİ
Ġض د
×ij×Ļ×ĺ ×ķ×Ĺ
تاب ع
ÙĨ ز
ĠB ản
Ġaç ıkl
Ġaçıkl ama
Ġ à¸Ħุà¸ĵ
à¸Ĺ า
ÅĤ ów
ط ب
ÙĨ ØŃÙĨ
Ġ×ŀ×§ ×ķר
Ġİ s
Ġдом а
Ġ วัà¸Ļ
Ġd Ãłnh
Ñı н
ми ÑĢ
Ġm ô
ĠvÃł ng
ص اب
s ının
à¸Ħ ืà¸Ļ
خ بر
×ĸ׼ ×ķ
Ġ×ŀ ש×Ķ×ķ
m ü
Ġкомпани и
Ġ×Ķ×¢ ×Ļר
ĠÙĥ ÙĪ
ÙĤÙĦ ب
ĠlỼ p
и ки
׳ ×ij
à¹Ĥ à¸Ħร
à¹Ĥà¸Ħร à¸ĩ
à¹Ĥà¸Ħรà¸ĩ à¸ģาร
×ŀ×ķ×¢ ×ĵ
ÑıÑĤ ÑģÑı
หลัà¸ĩ à¸Īาà¸ģ
ени Ñİ
Ġש ×¢
Ġb Æ°á»Ľc
ãĥ¡ ãĥ¼ãĥ«
ãĤĦ ãĤĬ
Ġ×Ļ×ķ×ĵ ×¢
Ġê´Ģ íķľ
ĠاÙĦØ£ Ùħر
Ġböl ge
ĠÑģв ой
ÙĦ س
Ġ×ŀ×Ļ ×ķ×Ĺ×ĵ
ĠëĤ´ ìļ©
ĠØ£ جÙĦ
ĠÄIJ ông
Ġ×ŀ ×ł×ª
Ġìĭľ ê°Ħ
Ùĥ Ùİ
ãģ¨ãģĦãģĨ ãģ®ãģ¯
Ġnale ży
تÙĨظ ÙĬÙħ
ĠÑģозд а
Ġph é
Ġphé p
ãģ§ãģį ãģ¾ãģĻ
Ġع ÙĦÙħ
大ãģį ãģª
ãĤ² ãĥ¼ãĥł
í ħĮ
Ġ׼×ķ׾ ׾
ĠинÑĤеÑĢ Ð½ÐµÑĤ
ĠT ừ
ãģ¨ ãģªãĤĭ
ز اÙĦ
Ġktóry m
Ġnh é
ìĪ ľ
н ев
д еÑĢ
ãĤ¢ ãĥĹãĥª
i á»ĩu
×ij ×Ļ׾
Ġت س
ĠÄIJ ây
ĠاÙĦØ® اصة
Ġà¹Ģ à¸Ĭ
Ġà¹Ģà¸Ĭ à¹Īà¸Ļ
ص اد
Ġd ạng
س عر
Ġש ×Ļ×ŀ×ķש
×Ĵ ×Ļ×Ŀ
ãģĮãģĤ ãģ£ãģŁ
п ÑĢов
пÑĢов од
Ġ×IJ ×Ļ׳×ķ
Ġ׾ ר×IJ
Ġ׾ר×IJ ×ķת
ĠØ£ Ù쨶ÙĦ
ĠØŃ ÙĦ
ĠØ£ بÙĪ
ê° ķ
Ġì§ ij
ãģ® ãĤĪãģĨãģ«
Ġפ ׳×Ļ
ס ×Ļ×Ŀ
ĠÙĪÙĩ ذا
Ġka ç
Ġé én
Ġê± ´
ë° Ķ
Ñĥ з
à¸Ĥà¸Ńà¸ĩ à¹Ģรา
i ÅĤ
ĠÐľ Ñĭ
Ġch ết
ĠاÙĦØ« اÙĨÙĬ
×IJ ×§
Ġ×ķ ×¢×ľ
ĠاÙĦØ· ب
×ij×ĺ ×Ĺ
Ġج دÙĬدة
Ġع دÙħ
ع ز
สิà¹Īà¸ĩ à¸Ĺีà¹Ī
ãģĻ ãĤĮãģ°
ĠÄij ô
ì£ ł
د ÙĤ
н омÑĥ
Ġk á»ĥ
ãĤ¢ ãĥ³
å¤ļãģı ãģ®
à¸Ľà¸£à¸° à¸ģ
à¸Ľà¸£à¸°à¸ģ à¸Ńà¸ļ
פע×Ļ׾ ×ķת
ĠÑģÑĤ ол
may ı
ãģ¤ ãģĦ
Ġyılı nda
Ġ à¸Īึà¸ĩ
koÅĦ cz
ĠTh ông
Ġак ÑĤив
н ÑģÑĤ
нÑģÑĤ ÑĢÑĥ
ĠÃĸ z
Ġת ×ŀ×Ļ×ĵ
ĠÙĥ ÙĨت
Ñģ иÑģÑĤем
pr és
prés ent
Ġn â
Ġnâ ng
gÅĤ os
ĠÙĪØ² ÙĬر
ØŃ صÙĦ
Ġиме еÑĤ
ØŃ رÙĥØ©
à¸ŀ à¹Īà¸Ń
ãĤĴ ãģĬ
Ġاست خداÙħ
×IJ×Ļר ×ķ×¢
ä»ĸ ãģ®
Ġש×Ķ ×Ŀ
ãģĹãģŁ ãĤī
ש×ŀ ×Ļ
Ñģ ла
m ı
Ġbaz ı
Ġíķĺ ì§Ģë§Į
×ĵ ׾
Ġyapt ıģı
ãĥĬ ãĥ¼
׾ ×Ļ׾×Ķ
ãģ¨ãģĦ ãģ£ãģŁ
änd ig
ĠÅŁ a
ĠÙģÙĬ Ùħا
иÑĤ елÑı
×ŀ ×ķש
à¸Ĥ à¸Ńà¸ļ
l ük
Ġh á»ĵi
Ġëª ħ
ĠاÙĦÙĥ Ø«ÙĬر
צ ×IJ
Ġhaz ır
طر Ùģ
ا ÙĬا
ĠÄij ôi
ен д
ÙĦ غ
×Ĺ ×ĸ×ķר
ĠвÑģ ег
ĠвÑģег да
ëIJĺ ê³ł
×ĵ ×ķ×ĵ
ан а
د ÙĪÙĦØ©
Ġho ạch
ع ÙĦا
عÙĦا ج
Ġ×ķ ×¢×ĵ
×Ķ ×Ŀ
ки й
ÙĦ ÙIJ
Ġ×¢ ׾×Ļ×ķ
ÑİÑī ий
Ġng á»§
صÙĨ ع
ĠاÙĦع راÙĤ
à¸ķà¹Īà¸Ń à¹Ħà¸Ľ
ãģŁãģı ãģķãĤĵ
Ġph ạm
ÙĦ اÙĨ
ات Ùĩا
Ġbö yle
تÙĨ ÙģÙĬ
تÙĨÙģÙĬ ذ
Ġש×Ķ ×Ļ×IJ
Ñģ Ñĥ
ย าว
Ġש ×ķ׳×Ļ×Ŀ
Ġ×ŀ ×ķ׾
ĠÑģ ил
Ġ×IJ×Ĺר ×Ļ×Ŀ
Ġph á»§
ÙĤØ· ع
ĠTh á»§
à¸Ľà¸£à¸°à¹Ģà¸Ĺศ à¹Ħà¸Ĺย
ÙĨ ÙĤ
ĠÄijo ạn
Ġب Ø¥
п ÑĢедел
×ķת ×ķ
Ġy arı
пÑĢ Ðµ
ĠczÄĻ ÅĽci
ØŃ ÙĥÙħ
×ķ׳ ×Ļת
פע ׾
ãĤĴ ãģĹãģ¦
Ġktó rzy
׾ ×Ŀ
ĠÄIJi á»ģu
ĠкоÑĤоÑĢ Ð°Ñı
ĠìĿ´ ìĥģ
ãģĤ ãģ£ãģŁ
Ġ×ŀ×ĵ ×ķ×ijר
פ ×ķ×¢×ľ
d ım
éĢļ ãĤĬ
ĠбÑĥд ÑĥÑĤ
à¹Ģวà¹ĩà¸ļ à¹Ħà¸ĭ
à¹Ģวà¹ĩà¸ļà¹Ħà¸ĭ à¸ķà¹Į
ا خر
×Ĺ ×Ļ׾
Ġ×Ļ ×ľ
Ġ×Ļ׾ ×ĵ×Ļ×Ŀ
×Ĺ ×Ļפ
×Ĺ×Ļפ ×ķש
Ġd òng
Ġש ×ĸ×Ķ
ÑĮ е
ãģĤ ãģ¨
ìŀIJ ê°Ģ
×IJ ×ĵ
Ġü z
Ġüz ere
ظ ÙĦ
Ġ×IJ ×ķ׾×Ļ
Ġ×ij ×Ļ×ķ×Ŀ
ÙĦ ات
Ġm ê
ì¹ ¨
تØŃ د
تØŃد Ø«
ĠØ® اصة
Ġب رÙĨ
ĠبرÙĨ اÙħج
ĠH Ãłn
×Ĺ ×¡
ĠÙĪ ÙĦÙħ
×¢ ×Ŀ
Ġm ı
à¸Ł ัà¸ĩ
ש ×¢×Ķ
ÙĪÙģ ÙĤ
ס ×ij×Ļר
алÑĮ нÑĭй
×Ĺש ×ķ×ij
Ġn Ãłng
ë³ ¼
ĠкоÑĤоÑĢ ÑĭÑħ
Ġ×Ĺ ×ķ×§
t ör
ĠлÑĥÑĩ ÑĪе
ãĥij ãĥ³
ลà¹Īา สุà¸Ķ
Ġج دÙĬد
ÙĬد Ø©
à¸Ĺ รà¸ĩ
ãĤĪãĤĬ ãĤĤ
ÙĦ ÙĦ
ãĤĤ ãģ£ãģ¨
ש×ĺ ×Ĺ
Ġ×ķ ×IJ×Ļ
Ġgi á»ijng
Ø¥ ضاÙģ
ק ת
ë§ Ŀ
Ġzosta ÅĤ
ÑĢ Ð¾Ð·
×Ļפ ×Ļ×Ŀ
Ġ׼׾ ׾
ת×ķ׼ ף
dıģ ını
ÙĤ سÙħ
ĠÑģ ÑĩиÑĤ
ĠÑģÑĩиÑĤ а
×ĺ ×ķת
Ġ ưu
ĠØ¢ ÙĦ
Ġм ом
Ġмом енÑĤ
ĠاÙĦتع ÙĦÙĬÙħ
×¢×ľ ×ķת
Ġch ữa
Ġy ön
Ġtr Ãł
ĠØŃ ÙĬÙĨ
à¸ĭ ั
ĠC á
×¢ ×ĸ
ĠاÙĦØ£ ÙħÙĨ
c ÃŃ
Ġv á»ijn
Ġ à¸Ļาย
об ÑĢа
×§ ×IJ
Ġthi ếu
ãĥŀ ãĥ¼
ส วà¸Ļ
Ġg á»Ń
Ġgá»Ń i
Ġê ¹
Ġê¹ Ģ
Ġthi á»ĩn
ÙĤ ع
w ÄĻ
Ġн ам
ÑĤ ол
Ġs ân
ס ×ķ×Ĵ
Ġgeç ir
ÑĤ он
ев а
ĠÙĪ Ø¶Ø¹
Ġع شر
Ñģ ло
à¸Ī ัà¸ļ
ãĤ· ãĥ¼
ãĤĤ ãģĤãĤĬãģ¾ãģĻ
Ġv ẻ
ĠÄIJ á»ĥ
ر Ù쨹
ĠاÙĦØ£ÙĪÙĦ Ùī
ÑĤ аÑĢ
ãģªãģı ãģ¦
Ùħ Ùİ
qu ÃŃ
×¢×ł×Ļ ×Ļ׳
г ен
Ġh ôm
à¸Ī า
Ġnh Ỽ
ĠاÙĦع ربÙĬ
×IJ ף
Ġl á»Ļ
Ġje ÅĽli
à¹Ģà¸Ĺà¹Īา à¸Ļัà¹īà¸Ļ
ĠØ£ÙĨ Ùĩا
Ġt uy
Ġtuy á»ĩt
Ġت ص
Ġتص ÙĨÙĬ
ĠتصÙĨÙĬ Ùģ
Ġê·¸ëŁ¬ ëĤĺ
о ÑĨен
à¸ģิà¸Ī à¸ģรรม
ãĤĦ ãģ£ãģ¦
Ġkh á»ıi
Ġl á»ĩ
ĠاÙĦÙħج تÙħع
à¸Ńาà¸Ī à¸Īะ
à¸Īะ à¹Ģà¸Ľà¹ĩà¸Ļ
ов Ñĭй
ר ×Ŀ
ร à¹īà¸Ńà¸Ļ
ש ×ŀש
人 ãģ«
Ġüzer ine
פר ×Ļ
du ÄŁu
Ñĩ ик
Ġmù a
Ġ×ŀת ×ķ×ļ
Ġc áºŃp
Ġت ارÙĬØ®
×ij׾ ת×Ļ
Ġì¢ Ģ
ÙĦ ع
ب اÙĨ
Ġch út
Ġ×Ķ×ĸ ×ŀף
n ée
ĠLi ên
ĠÙĦÙĦ Ø£
ØŃد ÙĪØ¯
Ġ×¢ ׼ש×Ļ×ķ
в оз
Ġyapt ı
Ġоб о
à¹ĥหà¹ī à¸ģัà¸ļ
Ġ×ij×Ķ ×Ŀ
ãģı ãģ¦
ر أس
ĠÑģÑĢед ÑģÑĤв
ĠB Ãłi
ãģĵãģ¨ ãģ«
ĠìĤ¬ íļĮ
Ġ모 ëijIJ
×ij ×IJ
Ġtr ắng
ĠاÙĦبÙĦ د
ĠHo Ãłng
ли бо
ĠдÑĢÑĥг иÑħ
İ R
Ñĥм а
ĠJe ÅĽli
ãĤĤ ãģĹ
Ġv òng
Ġ×IJתר ×Ļ×Ŀ
ĠÄij á»įc
Ġв оÑĤ
ãģł ãģĮ
ë° °
à¸Ķู à¹ģล
Ġ×ŀ ׼׾
ìĹIJ ëıĦ
г аз
Ġ׳×ķס פ×Ļ×Ŀ
ãģĵãģ¨ ãģ§
Ġت ÙĪ
ãģ§ ãģĤãĤĬ
à¸Ļั à¹Īà¸ĩ
ĠможеÑĤ е
sz ÄĻ
ãģ® ãģł
ĠÙħÙĨ Ùĩ
Ġb á»ķ
Ġb üt
Ġbüt ün
ë³´ ê³ł
Ġch á»ĵng
à¹ģà¸Ī à¹īà¸ĩ
ĠV ì
ĠØŃ ر
Ġgi ản
ĠÙħ دÙĬÙĨØ©
تط بÙĬÙĤ
à¸Ī ิ
æĹ¥ ãģ®
б ил
à¸ģ à¸Ńà¸ĩ
ê³ ³
ĠØ£ Ùħا
ìĨ IJ
Ġtr ái
ĠвÑģ ем
Ġس ÙĨØ©
ĠÑģай ÑĤ
Ġг оÑĤов
п Ñĭ
ĠëIJ ł
ĠاÙĦØ® Ø·
ĠاÙĦرئÙĬس ÙĬØ©
Ġíķ ©ëĭĪëĭ¤
ĠìķĦëĭĪ ëĿ¼
ĠìĿ´ ëłĩ
ĠìĿ´ëłĩ ê²Į
) ØĮ
h ält
ĠØ£ Ùħر
Ġع Ùħر
à¸ģà¹ĩ à¸Īะ
Ġ à¸Ĺำà¹ĥหà¹ī
Ġc ân
Ġ×ij ׾
Ġ×ij׾ ×ij×ĵ
פ סק
ĠÙĬ ÙĤÙĪÙĦ
н ÑĥÑĤÑĮ
à¹ģ à¸Ħ
Ġ×§ צת
Ġn ằm
Ġh òa
bilit Ãł
ĠìĹĨ ëĭ¤
Ġ׼ פ×Ļ
ÑĢ Ð¾Ð¶
лаг а
Ġ×Ķש ×Ļ
ĠNgo Ãłi
ĠÙĪ Ø¬
ĠÙĪØ¬ ÙĪØ¯
ĠìľĦ íķľ
Ġus ÅĤug
Ġtu ần
d ź
×ŀ ×ķף
ĠاÙĦع دÙĬد
Ġch ẳng
สุà¸Ĥ à¸łà¸²à¸ŀ
Ġ×ij ×ĵר×ļ
ĠÑģеб е
ĠìŀĪ ìĿĦ
ĠاÙĦØŃ اÙĦ
Ġd á
Ġc ưá»Ŀi
Ġnghi ên
ie ÅĦ
ĠD ương
ï¼ ħ
ش د
ãģĦãģ¤ ãĤĤ
ĠвÑĭб оÑĢ
Ġc á»Ļng
ש ×Ļ׳×ķ×Ļ
Ġch ạy
Ġ×ij×¢ ׾×Ļ
اخ بار
íķĺ ë©°
ż Äħ
ج از
Ġ׳ ר×IJ×Ķ
ศ ู
ศู à¸Ļ
ศูà¸Ļ ยà¹Į
×Ĵ ×¢
Ġ×¢ ×ĵ×Ļ
Ġ×¢×ĵ×Ļ ×Ļף
بر ا
ÑĨи й
ĠÄIJ á»ĵng
ÙĤ اÙĨÙĪÙĨ
ĠÄij ứng
ãģĹãģŁ ãĤĬ
Ġ×Ĺ×Ļ ×Ļ
Ġë IJľ
ĠëIJľ ëĭ¤
Ġм еждÑĥ
à¸ŀวà¸ģ à¹Ģà¸Ĥา
ĠB ắc
ล ำ
ë° ±
ĠíĻ ķ
มาà¸ģ ม
มาà¸ģม าย
бан к
à¸Ńา à¸ģาร
Ġh Ãł
Ġ׾ ׳
à¸Ń à¸Ń
Ġë°Ķ ë¡ľ
л ом
m ática
ĠØŃ د
اب ت
à¸Ĺีà¹Ī à¸Ļีà¹Ī
Ġco ÅĽ
ÙģÙĬ دÙĬ
ÙģÙĬدÙĬ ÙĪ
ĠмеÑģÑĤ о
Ġph út
มาà¸ģ à¸ģวà¹Īา
×IJ פ
ب ÙIJ
ĠPh ú
ì± Ħ
ĠÙĪ Ø³ÙĦÙħ
à¸Īี à¸Ļ
поÑĤ ÑĢеб
Ġ×Ĺ×ĵ ש×ķת
Ø´ ÙĪ
Ġעצ ×ŀ×ķ
ĠعÙħÙĦ ÙĬØ©
à¸Ħุà¸ĵ à¸łà¸²à¸ŀ
ãģ¾ãģĻ ãģĮ
دع ÙĪ
طر ÙĤ
à¹Ħมà¹Ī à¸ķà¹īà¸Ńà¸ĩ
ë² Ķ
ìĬ ¹
Ġk ÃŃch
ĠìĹĨ ëĬĶ
ĠÑĤ ам
ĠÙĨ ØŃÙĪ
ĠاÙĦÙĤ اÙĨÙĪÙĨ
×Ĺ ×ķ×Ŀ
Ġk ız
Ġ×ĵ ×Ļף
ĠвÑĢем ени
ãģ£ãģŁ ãĤĬ
ĠØ´ Ùĩر
ĠìĦľ ë¹ĦìĬ¤
×¢ ש×Ķ
Ġgi ác
ĠاÙĦسÙĦ اÙħ
Ġ×IJ ש
ĠполÑĥÑĩ а
à¸Īัà¸Ķ à¸ģาร
к оÑĢ
Ġ×Ķ×ĺ ×ķ×ij
ราย à¸ģาร
주 ìĿĺ
à¹ģà¸ķà¹Ī ละ
Ġê·¸ëŁ° ëį°
à¸Ĺีà¹Ī à¹Ģà¸Ľà¹ĩà¸Ļ
Ġת ×ķ×ļ
بÙĬ اÙĨ
Ð Ļ
oÅĽci Äħ
ÑĤ ок
ĠÃ Ķ
ĠÃĶ ng
à¹Ħมà¹Ī à¹ĥà¸Ĭà¹Ī
ãģ¿ ãģ¦
ÐŁ о
ĠЧ ÑĤо
íĻ ©
×ĺ ×ij×¢
меÑĤ ÑĢ
Ġ×ij ×ŀ×Ķ
Ġ×ij×ŀ×Ķ ×ľ
Ġ×ij×ŀ×Ķ׾ ×ļ
Ñĩ ÑĮ
×§ ש×Ķ
з нак
знак ом
uj ÄĻ
×Ļצ ר
ĠاÙĦÙħ ÙĦÙĥ
ı yla
×IJ×ŀ ת
à¸Ľ ิà¸Ķ
×IJ ×Ĺ×ĵ
ر اد
Ġm áºŃt
ëĭ¤ ëĬĶ
Ġl ạnh
ש׾ ×ķש
ØŃ دÙĬØ«
ت ز
å¹´ ãģ®
Ġк ваÑĢ
ĠкваÑĢ ÑĤиÑĢ
ä½ľ ãĤĬ
رÙĪ Ø¨
ов ан
ĠТ е
à¸Īำ à¸ģ
à¸Īำà¸ģ ัà¸Ķ
ب اط
×Ĵ ת
Ġм аÑĪ
ĠмаÑĪ Ð¸Ð½
×Ļצ ×Ķ
ãģ» ãģ¨
ãģ»ãģ¨ ãĤĵãģ©
ÃŃ do
ĠÑı зÑĭк
à¸ļ ิà¸Ļ
สà¸ĸาà¸Ļ à¸Ĺีà¹Ī
ĠìĹ ´
ãĤ¦ ãĤ§
Ġc Ãł
п ан
åı£ ãĤ³ãĥŁ
Ġر د
اÙĤ ت
ĠÙĥ ب
ĠÙĥب ÙĬرة
ÑģÑĤ ал
ש×ŀ ×Ĺ
pos ición
ĠÙħÙĦÙĬ ÙĪÙĨ
ĠìĿ´ ìķ¼
ĠìĿ´ìķ¼ ê¸°
Ġh út
ĠÅĽw iat
Ġë°© ë²ķ
ĠÑģв еÑĤ
Ġвиде о
ĠاÙĦÙĨ ظاÙħ
Ġtr á»Ŀi
ĠëĮĢ íķ´ìĦľ
ר ×ŀת
ت داÙĪÙĦ
×ķר ×ĵ
ת ×ŀ
ת×ŀ ×ķ׳×ķת
Ġ×ŀ ף
Ġдв а
Ġ×Ķ×§ ×ķ
æĹ¥ ãģ«
Ġ×Ķ×Ĵ ×Ļ×¢
à¹Ģà¸ŀิà¹Īม à¹Ģà¸ķิม
Ùħار س
Ġê²ĥ ìŀħëĭĪëĭ¤
ãģªãģĦ ãģ¨
Ġnhi á»ĩt
ëIJ ©ëĭĪëĭ¤
Ġ×ij׳ ×ķש×IJ
Ġê°Ģ ìŀ¥
Ġv ợ
ĠÄij óng
צ×Ļ׾ ×ķ×Ŀ
ê´Ģ ê³Ħ
в аÑı
×IJ ×Ļ×ĸ
×IJ×Ļ×ĸ ×Ķ
ĠÙĨ ظاÙħ
ÙħØŃ اÙ쨏
Ġt ải
기 ëıĦ
à¸Ľà¸±à¸Ī à¸Īุ
à¸Ľà¸±à¸Īà¸Īุ à¸ļัà¸Ļ
׼ ×ĵ×ķר
ĠìķĦ ìĿ´
׼׳ ×Ļס
à¹Ģ à¸ķร
à¹Ģà¸ķร ียม
Ġngo ại
ĠدÙĪÙĦ ار
Ġr ẻ
Ġkh Äĥn
عد د
ش عب
czy Äĩ
ĠاÙĦ Ùĥر
ĠÑĩеловек а
ĠÙĪ Ø¥ÙĨ
×IJ ×ĺ
Ġth Æ¡
ĠاÙĦ رÙĬاض
оп ÑĢедел
опÑĢедел ен
×Ķ ×ŀש×ļ
ĠÐĿ ово
з Ñĭва
ĠاÙĦدÙĪÙĦ ÙĬ
ĠÄij áp
Ġк ÑĢед
ĠкÑĢед иÑĤ
ов ого
Ġm ôn
à¸Ľà¸£à¸° à¹Ĥย
à¸Ľà¸£à¸°à¹Ĥย à¸Ĭà¸Ļ
à¸Ľà¸£à¸°à¹Ĥยà¸Ĭà¸Ļ à¹Į
ÑģÑĤ е
ĠTh á»ĭ
د ÙĬØ©
×ŀצ ×ķ
Ùģ Ø§Øª
×§ ×ĵ×Ŀ
ìĿ´ëĿ¼ ê³ł
ÙĪ Ø®
Ġ×Ĺ ×ĸ
ĠÑĦоÑĤ о
׾ ×Ļת
ت Ùİ
ÙĪ Ø¨Ø±
й ÑĤи
ĠÃ¶ÄŁ ren
Ġ×Ķ×ĸ ×ķ
Ġv á»įng
ÙĤÙĪ Ø©
ĠT ây
ĠÐĿ и
Ġש ×ķ×ij
ãģ¨è¨Ģ ãĤıãĤĮ
ãģ© ãĤĵãģª
׊צ×Ļ
ï½ ľ
Ġ×ķ×Ķ ×ķ×IJ
ä¸Ģ ãģ¤
ĠÑģÑĤо иÑĤ
ni Äħ
×ĺר ×Ļ
ĠдеÑĤ ей
нÑı ÑĤÑĮ
ĠÑģдел аÑĤÑĮ
Ġë§İ ìĿ´
ä½ķ ãģĭ
ãģĽ ãĤĭ
à¹Ħ หม
à¸ķิà¸Ķ à¸ķà¹Īà¸Ń
Ġ×ij ת×Ĺ
Ġ×ijת×Ĺ ×ķ×Ŀ
ìĻ Ħ
ì§Ģ ëĬĶ
ÑģÑĤ аÑĤ
ÑıÑģ н
ü b
Ġth ả
Ġ×ij×IJ×ŀ ת
Ġt uyến
×ĵ ×Ļר×Ķ
Ġ×IJ ×Ļש×Ļ
×ĸ׼ ר
ãģ° ãģĭãĤĬ
Ġx ét
׼ ×Ļ×ķ
׼×Ļ×ķ ×ķף
diÄŁ ini
ĠاÙĦÙħ ÙĪØ¶ÙĪØ¹
Ġh áºŃu
à¸Īาà¸ģ à¸ģาร
×ijס ×Ļס
Ġ×ŀ×Ĵ ×Ļ×¢
×ij ×Ļ×¢
ĠÙĪ Ø¬Ùĩ
à¹ģà¸Ķ à¸ĩ
à¸Ļ าà¸ĩ
ĠÅŀ a
ì ¡´
ë¡ Ģ
à¸ķ ะ
Ġ×Ķ×Ĺ×Ļ ×Ļ×Ŀ
Ùģ ÙĬد
ãģ§ãģĻ ãģĭãĤī
ê· ľ
ź ni
ĠлÑİ Ð´ÐµÐ¹
Ġyüz de
ıy orum
ĠاÙĦ بØŃر
e ño
п аÑĢ
ÙĬ ÙĤØ©
об ÑĢ
ר ×ķ×ļ
ت ÙĪÙĤع
ĠاÙĦØ´ ÙĬØ®
åĪĿ ãĤģãģ¦
ĠÑĤ елеÑĦ
ĠÑĤелеÑĦ он
Ġth ôi
Ġ×Ļ׼×ķ׾ ×Ļ×Ŀ
ĠÅŁ irk
ĠÅŁirk et
Ġìļ°ë¦¬ ê°Ģ
ĠÄij ông
Ġת ×ķ×ĵ×Ķ
ÑģмоÑĤÑĢ ÐµÑĤÑĮ
ĠÙĦ ÙĩÙħ
Ġ׾ ׼
ĠN ó
ĠØŃ اÙĦØ©
ãģĦ ãģij
קר ×ķ
az ı
ãĤ³ ãĥ¼
ĠÙĦÙĦ ت
s ınız
ĠH ải
기 ìĪł
ยัà¸ĩ à¹Ħมà¹Ī
ëĭ¤ ê³ł
פ ×Ĺ
Ġ׾×Ĵ ×ij×Ļ
Ġع ÙĨÙĩ
Ġк аз
Ġказ ино
ب ÙĪØ±
ÑĦ еÑĢ
Ġê°Ļ ìĿ´
تس جÙĬÙĦ
ĠاÙĦÙħ رÙĥز
ĠTh ái
д аÑĤÑĮ
×ŀ×Ļ ×Ļ׾
Ġpay laÅŁ
ãģ¤ ãģ®
à¹Ģร ืà¸Ń
n ça
׳ ×ķ×Ĺ
Ġ×IJ פ×Ļ׾×ķ
ãģ¨ èĢĥãģĪ
ãģ¨ãģĹãģ¦ ãģ¯
à¹Ģà¸Ī à¸Ń
×ŀ פ
Ġg iriÅŁ
л иÑĤ
ÑĤ елÑı
Ñij н
æ°Ĺ ãģ«
Ġg ó
Ġgó p
åĪĩ ãĤĬ
Ġ×Ķ ×Ĺ×ĵש
ж ал
Ġ×ĵ עת
éģķ ãģĨ
à¹Ģà¸Ĥà¹īา à¹Ħà¸Ľ
Ġס ר×ĺ
e ña
æĸ° ãģĹãģĦ
ر Ùİ
ĠÐIJ ÑĢ
Ġph ản
à¸Īะ à¹Ħà¸Ķà¹ī
Ġ×ijצ ×ķר×Ķ
Ø´ اÙĩ
شاÙĩ د
ÙĪØ± د
à¹Ģà¸Ļืà¹Īà¸Ńà¸ĩ à¸Īาà¸ģ
или ÑģÑĮ
à¹ģละ à¸ģาร
Ġ×Ķ ×ĸ׼
Ġ×Ķ×ĸ׼ ×ķ×Ļ×ķת
ei ÃŁ
ãĥ ¨
ìĥ Ī
ĠÃĩ a
Æ ¯
ש ×Ĵ
ÙĬÙĨ Ø©
ร à¹īà¸Ńà¸ĩ
ãĤµ ãĥ³
ÑĢоÑģÑģ ий
ÑĢоÑģÑģий Ñģк
a ÄŁa
ĠнаÑĩ ина
Ġص ÙĦÙī
à¸Ĺุà¸ģ à¸Ħà¸Ļ
íļĮ ìĤ¬
Ġли ÑĨ
Ø´ ÙĬر
ĠØ´ÙĬ Ø¡
ÙĬÙĨ ا
Ġפ ×Ĺ×ķת
Ġiçer is
Ġiçeris inde
ĠØ£ ØŃÙħد
Ġże by
ì´ Ŀ
Ġп оказ
Ġи менно
หà¸Ļัà¸ĩ ส
หà¸Ļัà¸ĩส ืà¸Ń
ĠÑĤÑĢ Ðµ
สัà¸ĩ à¸Ħม
Ø¥ ÙIJ
ãģĮ å¿ħè¦ģ
ÙĬÙij Ø©
פ צ
íĭ °
ĠÙħ جاÙĦ
׳ פש
к ан
×Ĺ ×ķפ
×Ĺ×ķפ ש
ì²ĺ ëŁ¼
ов аÑı
з ов
Ġh ạ
Ġdzi ÄĻki
×Ļר ×ķ
Ġ׾ ×ŀצ
Ġ׾×ŀצ ×ķ×IJ
×Ļ×ĵ ×ķ
Ġs ợ
Ġ׾×Ķ ×Ĵ×Ļ×¢
×§ ×ij×¢
Ġchi á»ģu
ãĥŀ ãĤ¤
Ġd Ãłng
à¹ģà¸Ł à¸Ļ
Ġü ye
×Ļ׳ ×Ĵ
à¹Ģรีย à¸ģ
ç§ģ ãģĮ
th é
ĠÑĦ илÑĮ
ĠÑĦилÑĮ м
ĠNg Ãły
Ġж ен
Ġжен Ñīин
ج ÙĬد
n ç
à¸Ľ รา
×Ļ×ŀ ×ķ
Ġn á»ģn
×IJ ×ķ׾×Ŀ
Ġвозмож ноÑģÑĤÑĮ
Ġëĭ¤ ìĭľ
è¦ĭ ãģŁ
à¸ĸ à¸Ļ
à¸ĸà¸Ļ à¸Ļ
mız ı
ĠÙħ جÙħÙĪØ¹Ø©
c jÄħ
ĠÐł Ф
à¸ģำ หà¸Ļ
à¸ģำหà¸Ļ à¸Ķ
ĠìŬ 기
land ı
ни ÑĨ
ÑģÑĤв е
Ġ×ĵ ×ijר×Ļ×Ŀ
Ġsk ÅĤad
ãĤĬ ãģ¾ãģĹãģŁ
ĠоÑĤ кÑĢÑĭÑĤ
нÑı ÑĤ
ĠÑģво ей
à¸Ī ิà¸ķ
ĠкаÑĩеÑģÑĤв е
Ġet tiÄŁi
ìĤ¬ íķŃ
ĠاÙĦÙĬ ÙħÙĨ
иÑĩеÑģки й
ë¸ Į
Ġ×ij×IJר ×¥
Ġا سÙħ
Ġиз веÑģÑĤ
r ão
Ġatt ivitÃł
à¹Ģà¸Ľà¹ĩà¸Ļ à¸ģาร
ĠاÙĦد Ùĥت
ĠاÙĦدÙĥت ÙĪØ±
ĠÙĪØ§ØŃد Ø©
ĠÑģ ÑĩеÑĤ
ĠпÑĢ Ð¸Ñĩ
ĠпÑĢиÑĩ ин
ĠÙĪØ² ارة
Ġh uyá»ĩn
ĠÙĥ تاب
à¹ģà¸Ļ à¹Īà¸Ļ
à¹ģà¸Ļà¹Īà¸Ļ à¸Ńà¸Ļ
Ġgün ü
г ÑĢÑĥз
ĠاÙĦØ® اص
Ġgör ül
׾ ×ŀ×ĵ
Ġìłķ ëıĦ
×ķ×ij ×Ļ׾
Ġ×ŀ×§ צ×ķ×¢×Ļ
ĠоÑģоб енно
à¸Ľà¸£à¸° à¸ģา
à¸Ľà¸£à¸°à¸ģา ศ
aca ģını
ë¶ ģ
à¸łà¸¹ มิ
ĠÑį лекÑĤ
ĠÑįлекÑĤ ÑĢо
Ġ×§ ש×Ķ
سÙĦ Ø·
à¸Ĭà¸Ļ ะ
×¢ ×Ļ׾
ĠЧ е
à¹ģà¸Ļ à¹Ī
lı ģ
lıģ ın
Ġ×ŀ×¢ ×¨×Ľ×ª
好ãģį ãģª
มาà¸ģ à¸Ĥึà¹īà¸Ļ
×ŀ×¢ ×ijר
ĠاÙĦÙħ غرب
ĠпеÑĢ Ð¸
ĠпеÑĢи од
Ġnh ạc
ا ÙĪÙĬ
ĠÙĪ Ø¹ÙĦÙī
أخ ذ
ĠC ô
תר ×ij×ķת
×Ĵ ×Ķ
Ġktóre j
×IJ ×Ļת
×ij ×ķ×IJ
д елÑĮ
รี วิ
รีวิ ว
ж Ñĥ
Ġ×ij×Ĺ ×ķ
еÑĪ ÑĮ
ĠØ£ ÙĦÙģ
ĠاÙĦÙĪ Ø·ÙĨÙĬ
ĠاÙĦÙħÙĨ Ø·ÙĤØ©
nÄħ Äĩ
Ġthi ên
иÑĩеÑģк ой
ĠاÙĦÙħ ÙĦ
Ġع Ùħ
ס פר
Ġnh óm
ÙĪØµ Ùģ
ĠCh úng
Ġر ÙĤÙħ
ãģ¾ãģĹãģŁ ãģĮ
al ité
ล ม
ĠëĤ´ ê°Ģ
׾ק ×ķ×Ĺ
ĠS Æ¡n
pos ição
mi ÄĻ
Ġtr ánh
ĠÄIJ á»Ļ
׼ ×Ĺ
ãģĤ ãģ£ãģ¦
à¸Ńย à¹Īา
Ġ×ŀ×Ĺ ×Ļר
Ġ×Ķ ×Ļת×Ķ
à¸Ľ à¹Īา
à¸Ńืà¹Īà¸Ļ à¹Ĩ
Ø´ ÙĤ
×ł×¡ ×Ļ
ë¦ ¼
ãģ¦ãģĹãģ¾ ãģĨ
Ġ×ŀ צ×ij
ãģ« åĩº
ÙħÙĪØ§ Ø·ÙĨ
ยัà¸ĩ มี
алÑĮ нÑĭе
san ız
Ø¥ سرائÙĬÙĦ
ĠvÃł i
ì¤ Ħ
ã썿ĢĿ ãģ£ãģ¦
×Ļ ×ķ׳×Ļ
çĶŁ ãģį
Ġs âu
Ñĩ иÑģÑĤ
Ġl á»ħ
ĠGi á
à¸Ńุ à¸Ľ
à¸Ńà¸¸à¸Ľ à¸ģร
à¸Ńà¸¸à¸Ľà¸ģร à¸ĵà¹Į
Ġnh ẹ
r ö
ס ×ĺ×Ļ
ãģķãĤĵ ãģĮ
Ġd ầu
ع Ùİ
ت را
×Ĵ×ĵ ׾
Ġtécn ica
׼ ׳×Ļ×Ŀ
תק ש
תקש ×ķרת
Ġн его
ét ait
Ġm á»ģm
Ñģ еÑĤ
Ġnh áºŃt
Ġ×ŀ ×¢×ľ
Ġ×Ķ×¢ ×ij×ķ×ĵ
Ġ×Ķ×¢×ij×ķ×ĵ ×Ķ
Ġ×Ĵ ×Ļ׾
ãģ¯ ãģªãģĦ
ائ ØŃ
Ġз деÑģÑĮ
×IJ ×Ļ׳×ĺר
Ùħ ÙIJ
Ġ×Ļ ×Ĺ×ĵ
ر اÙģ
ì²ĺ 리
×ĵ ×¢×ķת
ì¹ ľ
ĠТ о
ĠTh ế
ì¶ ©
Ġ׳׼ ×ķף
عÙĬ Ø´
ни з
Ġج اÙĨب
×ŀ×§ צ×ķ×¢
à¹Ĥ à¸ĭ
Ñģ ÑĥÑĤ
ìĸ´ ìļĶ
ãĤĴè¦ĭ ãģ¦
ار د
Ġaç ıl
ĠاÙĦØŃ ÙĬاة
à¸ģà¹ĩ à¹Ħà¸Ķà¹ī
ãģĿãĤĮ ãĤĴ
عض ÙĪ
Ġг ÑĢаж
ĠгÑĢаж дан
à¸Īะ à¸ķà¹īà¸Ńà¸ĩ
ĠìĿ´ 룬
ĠìĿ´ë٬ íķľ
Ġtr ách
ÙĨ Ùİ
Ġkı sa
à Ķ
ÑĪ ÐºÐ°
ãģ® äºº
ĠÐŁ оÑģ
ĠÐŁÐ¾Ñģ ле
Ñĥ лÑĮ
ÙĪØ§ جÙĩ
ÙĤ رب
à¸Ľà¸ıิ à¸ļัà¸ķิ
ê° Ļ
Ġ×ŀ ׳
ĠÑģво и
بر اÙħج
Ġر ÙĪ
пÑĢ Ð¾Ð´
пÑĢод аж
Ġby ÅĤy
วั ย
Ġgör ün
ĠÃ Ī
ÑİÑī им
ĠÑĤак ой
Ùģ ÙĪØ±
ĠÙģ Ø¹ÙĦ
Ġб ел
ëIJ ł
er ÃŃa
ĠÑģво Ñİ
Ġl ã
Ġlã nh
à¹Ģà¸ŀืà¹Īà¸Ń à¹ĥหà¹ī
ÙĤ ÙĨ
تط ÙĪÙĬر
Ġsay ı
ĠÑģ ейÑĩаÑģ
Ġ×IJ×Ĺר ת
×§ ×ķפ×Ķ
×§×ķר ס
Ġس Ùħ
Ġ×ĺ ×Ļפ×ķ׾
ìĿ´ëĿ¼ ëĬĶ
دراس ة
èµ· ãģĵ
×Ĺ ×Ļ׳
×Ĺ×Ļ׳ ×ķ×ļ
×ĵ ×§
Ġë§ ŀ
Ġком анд
ĠÐij о
Ġиг ÑĢÑĭ
à¸ļ ี
ĠØ£ Ùİ
в ен
ĠاÙĦج دÙĬد
ĠÙĦ Ø¥
Ġ×ķ×IJ ׳×Ļ
Ġ×Ķס ×Ļ
иÑĩеÑģк ого
رÙĪ ØŃ
à¸ģาร ศึà¸ģษา
ĠTr ưá»Ŀng
иг ÑĢа
ıl ması
Ġм аÑģÑģ
ãģ¨ãģį ãģ«
à¸Ĺีà¹Ī à¸ľà¹Īาà¸Ļ
à¸Ĺีà¹Īà¸ľà¹Īาà¸Ļ มา
ĠاÙĦساب ÙĤ
Ġ×ŀ×¢ ×ĺ
в аÑĤÑĮ
m Ã¼ÅŁ
Ġ׾ ׼×ļ
Ġt á»ĭch
Ùģ ÙĩÙħ
تد رÙĬب
Ø´ Ùĥ
Ġ×ij ×ŀ×Ļ
Ġ×ij×ŀ×Ļ ×ķ×Ĺ×ĵ
ÙĤØ· اع
ãģª ãģĹ
×ķצ ×Ļ×IJ
ĠÙĪ Ø³ÙĬ
з Ñĥ
Ġy at
Ġyat ırım
ë§ İ
Ġth ắng
ãģĬ 客
ãģĬ客 æ§ĺ
ĠThi ên
ãģ«å¯¾ ãģĹãģ¦
ÑĢ Ð¸Ñģ
ÙĨت ائ
ÙĨتائ ج
Ġ×ŀ שר
Ġ×ŀשר ×ĵ
Ġتع اÙĦ
ĠتعاÙĦ Ùī
ש ׳×Ļ
Ùĩ اÙħ
×IJ׳ ש×Ļ×Ŀ
Ġżyc ia
ĠÑĢÑĥб лей
ÙĬ ض
Ġkat ıl
ĠÙħ ÙĪØ¶ÙĪØ¹
Ġvard ır
ĠÙħÙĨ Ø·ÙĤØ©
ĠTr ần
Ġв еÑģ
ü p
Ùħ ÙĪÙĨ
ÑĪ Ð»Ð¸
Ġn óng
Ø® ÙĦÙģ
ĠС ÑĤа
Ġд оÑĢ
ĠдоÑĢ Ð¾Ð³
ĠwÅĤa ÅĽnie
eÄŁ in
Ġhi á»ĥm
ĠС ам
ê»ĺ ìĦľ
ĠÑĦ а
ãģ» ãģĨ
ãģ»ãģĨ ãģĮ
×ķפ ×Ļ×¢
ê° Ī
د ÙĪÙĦ
Ġthu ê
Ġch á»Ĺ
Ġëĭ¹ ìĭł
ãģij ãĤĮ
ãģijãĤĮ ãģ©
ë³´ íĺ¸
ãģķãĤĮ ãģ¦ãģĦãģ¾ãģĻ
Ġнад о
ĠìĤ¬ëŀĮ ëĵ¤
à¹Ģà¸Ĥ à¸ķ
สม ัย
z ÅĤ
ت ÙĪØ±
Ġש ת×Ļ
v ê
Ġ×ijת ×ķ×ļ
à¸Ĭ ัย
ãģĦ ãģ£ãģŁ
ìĿ ij
Ġt ầ
Ġtầ ng
ש ׼ר
Ġê¸ Ģ
Ġ×Ķש ׳×Ķ
Ġا ÙĨÙĩ
ç«ĭ ãģ¡
r és
füh ren
ر ØŃÙħ
ê· ¹
ĠâĢ «
Ġsu ất
à¸Ł ิ
ÙĬ Ùĩا
ĠاÙĦ اتØŃاد
Ġt uyá»ĥn
ãģ¾ ãĤĭ
Ġm ại
Ġng ân
ãĤ° ãĥ©
欲 ãģĹãģĦ
س ار
ãĤĤãģ® ãģ§ãģĻ
ки е
Ġseç im
åħ¥ ãĤĬ
ãģªãģ© ãĤĴ
ÑĤ ÑĢи
ĠÑģп еÑĨ
ĠØ£ د
Ġод но
ÑĪ ÐµÐ»
ãĥĩ ãĥ¼ãĤ¿
ãĤ· ãĤ¹ãĥĨ
ãĤ·ãĤ¹ãĥĨ ãĥł
è¡Į ãģį
ã썿ĢĿ ãģ£ãģŁ
à¹Ģà¸ģิà¸Ķ à¸Ĥึà¹īà¸Ļ
ĠÑĤ ож
ĠÑĤож е
Ġs ạch
ĠÑģ ÑĢок
Ġкли енÑĤ
ĠÙħØ´ رÙĪØ¹
Ġalt ında
Ġì ·¨
ä¸Ń ãģ®
ãģķãģĽ ãĤĭ
ãģĻ ãģ¹
ãģĻãģ¹ ãģ¦
ê°ľ ë°ľ
ĠÄij êm
ãģªãģĦ ãģ®ãģ§
ì² ł
×¢ ×ij×ĵ
Ġd ấu
à¸Ħà¸Ļ à¸Ĺีà¹Ī
ĠC ách
تع ÙĦÙĬÙħ
Ġh ại
ãĤ» ãĥķãĥ¬
ĠÙĨÙ쨳 Ùĩ
ĠíĨµ íķ´
ÑĪ Ð»Ð¾
Ġнап ÑĢав
ĠнапÑĢав лен
ÑĢÑĥ Ñĩ
íĶ Į
Ġ×ijר ×Ļ×IJ
ãģ® ãģ¿
ãģ«ãģĬ ãģĦãģ¦
×ij ׳ק
ãĤ¨ ãĥ³
Ø«ÙĦ اث
Ġm ỹ
ĠÑģай ÑĤе
Ġе мÑĥ
ت غÙĬ
تغÙĬ ÙĬر
خص ÙĪØµ
ÑĤе ли
Ġ×ķ׾ ׼ף
פע ×Ŀ
Ġпо ÑįÑĤомÑĥ
ر اÙĨ
иÑĤел ей
пиÑģ ан
×¢ ×¥
ĠìĤ¬ ìĹħ
Ùħ ز
جÙħ ÙĬع
ë©´ ìĦľ
à¸ľà¸¥à¸´à¸ķ à¸łà¸±
à¸ľà¸¥à¸´à¸ķà¸łà¸± à¸ĵ
à¸ľà¸¥à¸´à¸ķà¸łà¸±à¸ĵ à¸ij
à¸ľà¸¥à¸´à¸ķà¸łà¸±à¸ĵà¸ij à¹Į
ĠпÑĢ Ð¸Ð¼ÐµÑĢ
ãĤŃ ãĥ¼
l â
Ġch Äĥm
缮 ãģ®
ãģĦ ãģĭ
ãģ¨è¨Ģ ãģĨ
×ĸ ×ķ×Ĵ
Ġ×ij ×ĵ×Ļ
Ġ×ij×ĵ×Ļ ×ķ×§
ãģĬ åºĹ
à¸ķà¸Ńà¸Ļ à¸Ļีà¹ī
Ġph á»iji
п ÑĤ
สà¸Ļ าม
Ø· ÙĪ
ص اØŃ
صاØŃ ب
ĠD ü
ĠDü nya
Ġп ока
п ал
ĠÄij ảo
ĠاÙĦÙģ ÙĪØ±
ĠاÙĦÙģÙĪØ± Ùĥس
Ġmá u
кÑĢ ÐµÐ¿
ĠاÙĦس اعة
ĠгоÑĢ Ð¾Ð´Ð°
Ùģ ØµÙĦ
ай ÑĤе
Ġд ог
Ġдог овоÑĢ
ĠØ¥ ذ
Ġ×ij׼׾ ׾
ÙĬ تÙĩ
×Ĵ ×ijר
Ġbir ç
Ġbirç ok
문 íĻĶ
ãģĿãģĨ ãģª
را ØŃ
ĠÙħ رة
ĠденÑĮ ги
f ä
à¸Ĥà¹īา ว
ĠÑģов ÑĢем
ĠÑģовÑĢем енн
׾×Ĺ ×¥
èī¯ ãģı
ĠÙģ Ø£
Ġ×ķ ×ĸ×Ķ
Ġз ани
Ġзани ма
Ġê°Ģì§Ģ ê³ł
Ġh Æ¡i
ãģªãģ® ãģĭ
ãĥĨ ãĥ¬ãĥĵ
Ġר ×ij×ķת
à¸ķ ี
Ġ×ijש ×ł×ª
ĠT ại
Ġthu áºŃn
Ñģ ел
Ñij м
dzi Äĩ
ĠÑģ ка
ĠÑģка Ñĩ
ĠÑģкаÑĩ аÑĤÑĮ
×ķ×ŀ ×ķ
г ла
Ġмин ÑĥÑĤ
åĩº ãģĻ
Ġ×Ĺ×Ļ ×Ļ×ij
Ġת ×Ĵ×ķ×ij×Ķ
à¸£à¸¹à¸Ľ à¹ģà¸ļà¸ļ
ни ÑĨа
Ġİ n
ĠØ£ ع
Ġض ÙħÙĨ
Ùħ ثاÙĦ
ĠyaÅŁ an
ĠìŰ 구
ĠL ê
ש׾ ×Ĺ
ãģı ãģªãĤĭ
ìĹĨ ìĿ´
ĠÑĤ ÑĢи
ĠÑĩаÑģÑĤ о
Ġоб ÑĢаÑĤ
п ло
د خ
دخ ÙĪÙĦ
س Ùĩ
à¸Ń าà¸ģ
à¸Ńาà¸ģ าศ
Ġ׼ ×ĸ×Ķ
Ġ×Ķ×¢ סק
ĠاÙĦØ£ ÙĨ
å¹´ ãģ«
×¢ ש×ķ
Ġש ×¢×ķת
Ġm Ãłn
×IJר ×Ļ
sı yla
Ù쨱 ÙĤ
ни Ñħ
Ġت ست
è¦ĭ ãģ¦
ØŃا ÙĪÙĦ
×IJ ×Ļ׼×ķת
ĠbaÅŁ ladı
st Äħ
stÄħ pi
à¸Ĺีà¹Ī à¹Ģรา
ÙĤر ر
ج اب
Ġ×ijר ×ķר
à¹Ģà¸Ĥà¹īา à¹ĥà¸Ī
×ŀ׊קר
al ım
Ġס ×Ļפ×ķר
ãģ§ãģĤ ãĤĮãģ°
Ġש×ŀ ×ķר×ķת
Ġ×ķ ×ŀ×Ķ
ãģĵ ãģĿ
id ée
ä¸ĭ ãģķãģĦ
تÙĨا ÙĪÙĦ
Ġ ลà¹īาà¸Ļ
Ġìļ°ë¦¬ ëĬĶ
اÙĨ ا
ÑģÑĤ ой
б оÑĤ
ĠyaÅŁ am
kö y
Ø¥ ÙĦ
ÑĢ Ñĭв
기 ìĹħ
Ġ×Ķ×ŀ ×ĵ
Ġ×Ķ×ŀ×ĵ ×Ļ׳×Ķ
د ب
×¢ ×Ļ׳×Ļ
×ŀ ת×Ĺ
Ġפ ר×Ļ
ãĥĭ ãĥ¼
اÙħ ÙĬ
Ġnh ằm
ãĤĮ ãģªãģĦ
ت عرÙģ
Ġë§Ī ìĿĮ
ìĵ °
Ġh ấp
ר×Ĵ ×Ļ׾
ب Ùİ
Ġr Äĥng
gl Äħd
ĠÑģиÑģÑĤем Ñĭ
Ġkh óa
ãģ§ãģĻ ãĤĪãģŃ
大ãģį ãģı
기 를
Ġké o
ÙĪ Ø¡
ج اÙħ
جاÙħ ع
Ġ×¢ ×Ļצ×ķ×ij
t éri
Ġת ש
Ġ×IJ ×ij×Ļ
ĠCh ương
à¸ļริ à¹Ģว
à¸ļริà¹Ģว à¸ĵ
ãģ¤ ãģı
Ġ×Ĺ ×ķ׾
עת ×Ļ×ĵ
ש ×Ļ×ŀ×Ķ
ëĤ ¨
Ġש×IJ ×Ļף
ĠÙĪØ§ÙĦ Ø¥
ÑĦ а
Ġkh ám
Ġ×ĺ ×ķ×ij×Ķ
ĠвÑĭ Ñģ
ĠвÑĭÑģ око
ĠاÙĦØŃ دÙĬØ«
人 ãĤĤ
d Ã¼ÄŁÃ¼
×Ļ×Ĺ ×ķ×ĵ
تع ÙĦÙĬ
تعÙĦÙĬ ÙĤ
l ö
تØŃ دÙĬد
н его
ĠÑĥд об
Ġ׾ ×ŀ×Ļ
Ġר ×ķצ×Ļ×Ŀ
Ġج اء
Ġ×ij ×ĸ×ŀף
à¸Ľà¸ģ à¸ķิ
é«ĺ ãģı
à¸Ľà¸¥ า
Ġart ık
Ġbug ün
×§ ׳×Ļ
Ġkho á
ĠÙħ رÙĥز
ĠìŀIJ 기
در جة
×ŀש ר×ĵ
Ġgi ấy
Ġch óng
ק פ
ÙĬب Ø©
ĠczÄĻ sto
в али
Ùĥ ب
ìŁ ģ
ส à¸ļาย
à¸Ľà¸£à¸°à¸Ĭา à¸Ĭà¸Ļ
×Ĵ ×ķ×£
ëŁ ī
ãģ® ãģĵãģ¨
ล à¸Ń
Ġngh á»ī
åŃIJ ãģ©
åŃIJãģ© ãĤĤ
à¹Ħà¸Ķ à¹īà¸Ńย
à¹Ħà¸Ķà¹īà¸Ńย à¹Īาà¸ĩ
×ĵ ×¢
ĠاÙĦت Ùī
ĠÑģов еÑĤ
Ġqual itÃł
åĩº ãģĹ
ĠÑĢÑĥк ов
ĠÑĢÑĥков од
ราย ละà¹Ģà¸Ńียà¸Ķ
ãģªãģĭ ãģªãģĭ
기 ê´Ģ
Ġ×Ĺ ×ķש
Ġ×Ĺ×ķש ×ij
л оÑĤ
à¸Ļะ à¸Ħรัà¸ļ
×§×ij ×ķצ×Ķ
Ġth ái
Ġש ×ij×Ķ
ĠÑĪ ÐºÐ¾Ð»
ĠÙĦ ÙĥÙĦ
à¹ĥà¸Ļ à¸Ĭà¹Īวà¸ĩ
ĠÙħ ÙĥاÙĨ
ë ķĮ
Ġc ải
ĠCh ÃŃ
ÑĥÑĩ а
ìĿ µ
Ġx ảy
à¸Ĭà¸Ļ ิà¸Ķ
Ġc áºŃu
к ÑĢов
ss é
ĠÙĨ ÙĪØ¹
ĠТ а
Ø® Ùħس
פ×ķס ×ĺ
Ġm ắc
ĠÄij em
à¸ģาร à¹ĥà¸Ĭà¹ī
ר ×ķס
ĠÐĽ е
Ġth á»Ń
รà¹Īาà¸ĩ à¸ģาย
üz ü
æĹ¥æľ¬ ãģ®
ê³¼ ìłķ
ש ×Ļ×IJ
ĠìŀĪ ê³ł
×ij ×ķ׾
ìķ ħ
ĠÙĪØ§ÙĦ ا
ĠÐĽ и
ĠвÑģ Ñij
Ġużytk ow
×Ĺ ×ķ׾
ر Ù쨶
Ġson uç
ãģĦ ãģ¾ãģĽãĤĵ
ìĤ¬ ìĹħ
ëĪ Ħ
ÑĤ ек
Ġud ziaÅĤ
л ез
Ġ×Ķ×Ļ ×Ļת×Ļ
ãĤīãĤĮ ãģ¦
Ùħس ؤÙĪÙĦ
ر ار
ÑĤ ан
ĠÄij Ãło
Ġר ×ķ×ij
Ġ×ijש×ij ×Ļ׾
ä»ĬåĽŀ ãģ¯
ãĤ¸ ãĥ¥
Ġ×¢ ×ijר
ãģĽ ãģ¦
п олÑĮ
ak lı
Ġk ÃŃnh
د ت
лож ение
ĠاÙĦÙħ ص
ĠاÙĦÙħص رÙĬ
à¸Īริà¸ĩ à¹Ĩ
ĠاÙĦشر ÙĥØ©
ĠÄij á»ı
ãĥĽ ãĥĨ
ãĥĽãĥĨ ãĥ«
Ñį кон
Ñįкон ом
ĠÙĪ Ø¹ÙĨ
Ġת ׳
Ġ×ª×ł ×IJ×Ļ
ĠاÙĦدÙĪÙĦ ÙĬØ©
Ġì§Ģ ìĹŃ
ãģ§ãģĻ ãģĭ
Ġв аÑĢи
ĠваÑĢи анÑĤ
ĠاÙĦع رب
ел а
Ġt Æ°á»Ľng
sk Äħ
Ġm ặc
ส ัà¸ģ
ãĥĵ ãĥ¼
Ġ×ij ×Ĵ׾
Ġ×ij×Ĵ׾ ׾
ãĥķãĤ¡ ãĥ³
×ij ×Ļצ
×ij×Ļצ ×ķ×¢
ли ÑģÑĤ
à¸Ł ุ
à¸Łà¸¸ à¸ķ
à¸Łà¸¸à¸ķ à¸ļà¸Ńล
à¸Ŀ à¹Īาย
ìŀIJ ìĿĺ
Ġس ÙĪÙģ
Ġש ×Ķת
Ġê± ¸
×¢ ×ij×ķ×ĵ
ãģĻãĤĭ ãģĵãģ¨ãģĮ
ĠÑĩа ÑģÑĤÑĮ
ãĤ¢ ãĥ¡ãĥª
ãĤ¢ãĥ¡ãĥª ãĤ«
Ġtak ım
Ġs Ỽ
ĠsỼ m
שר ×Ķ
è¨Ģ ãģĨ
л ан
ì» ¤
׼ ׳×Ķ
ÙĪÙģ ÙĬ
íĹ Ī
lu ÄŁu
ĠëĮĢ íķ´
Ġ׾×ij ×Ļת
Ġ×Ķר×IJש ×ķ׳×Ķ
ص Ùħ
Ġsö yled
Ġsöyled i
à¸Ľ าà¸ģ
Ġard ından
ãģĪ ãģŁ
à¸Ĺัà¹Īว à¹Ħà¸Ľ
Ġ׳×ķס ×£
б олÑĮ
ãĤĵãģ§ãģĻ ãģijãģ©
ĠлиÑĪ ÑĮ
Ġ×ij ×IJ×Ļ
ĠбÑĭ ÑģÑĤÑĢо
ส ัà¸Ļ
Ġ×ij פ׳×Ļ
л еÑĩ
ĠاÙĦØ® بر
Ġsó c
Ġth ú
Ġп ÑıÑĤ
ãģĬ é¡ĺ
ãģĬé¡ĺ ãģĦ
ÑĤ ин
ãģ«ãģ¤ãģĦãģ¦ ãģ¯
פ ף
Ġдв ÑĥÑħ
à¸į ีà¹Ī
à¸įีà¹Ī à¸Ľ
à¸įีà¹Īà¸Ľ ุ
à¸įีà¹Īà¸Ľà¸¸ à¹Īà¸Ļ
оп еÑĢ
ĠاÙĦب شر
ĠاÙĦÙħ اÙĦ
ıyor uz
تØŃ ÙħÙĬÙĦ
à¸ģ ะ
éĸĵ ãģ«
×Ĺ ×ķש
ĠNg uyên
ãģĦãģ¦ ãģĦãĤĭ
дÑĥ ÑĪ
ש פע
ÑĪ Ñĥ
å®Ł éļĽãģ«
ĠÑĢай он
ĠCh á»ī
ÙĨ صر
Ġìļ ´
Ġìļ´ ìĺģ
Ġ×Ķ×ĵ ×Ļף
ØŃد د
ر ز
ĠاÙĦد Ùħ
ĠPh áp
ÑĤ ÑģÑı
è¦ĭ ãģĪ
Ġti á»ĥu
Ġs á»Ńa
а ÑİÑĤÑģÑı
ĠB á
Ġ×ķ ׼׾
Ð ĸ
ÑĪ Ð¸Ð¼
ìĿ´ ëĬĶ
л ев
d ık
Ġprés ente
Ġara ç
صد ÙĤ
Ġпом ог
ĠاÙĦشر ÙĤ
ĠÙĪØ§ÙĦ ذÙĬ
رÙĬ ا
×ij ׳×ķת
Ġng á»ĵi
ר ×ķפ
ר×ķפ ×IJ
Ġth ấp
ãĤĦ ãģ¯
ãĤĦãģ¯ ãĤĬ
ĠاÙĦج دÙĬدة
éĿŀ常 ãģ«
ÙĬÙĦ ÙĬ
ìª ½
تع اÙħÙĦ
ãģł ã썿ĢĿãģĦãģ¾ãģĻ
Ùħ Ùħ
иÑĤе ли
ãĤµãĤ¤ ãĤº
اد ات
ĠاÙĦÙħ اÙĦÙĬØ©
Ùĥات ب
к ли
веÑĢ Ñħ
ни Ñĩ
Ġ×ľ×¢ ×ij×ķ×ĵ
׾ ×Ļ×Ķ
ØŃ Ùİ
ãĤ¤ ãĥĻ
ãĤ¤ãĥĻ ãĥ³ãĥĪ
Ġת ×Ĵ×ķ×ij×ķת
ÑĦ он
ĠдÑĢÑĥг ие
×IJ ×ĸ×ķר
Ġper ò
ìķ ŀ
åĢŁ ãĤĬ
ר צ×Ļ
×IJ ×ĸ
алÑĮ нÑĭÑħ
Ġê²ĥ ìľ¼ë¡ľ
ĠпÑĢав о
ĠاÙĦØ£ رض
à¹Ģà¸Ĺ à¸Ħ
à¹Ģà¸Ĺà¸Ħ à¹Ĥà¸Ļ
à¹Ģà¸Ĺà¸Ħà¹Ĥà¸Ļ à¹Ĥล
à¹Ģà¸Ĺà¸Ħà¹Ĥà¸Ļà¹Ĥล ย
à¹Ģà¸Ĺà¸Ħà¹Ĥà¸Ļà¹Ĥลย ี
צ ר×Ļ
ĠÐļ Ñĥ
ıl ma
決 ãĤģ
ا ÙĪ
Ġ×ĵ ×§×ķת
à¸Ħร ู
ĠÙħست ÙĪÙī
à¸Ľ à¹īà¸Ńà¸ĩ
à¸Ľà¹īà¸Ńà¸ĩ à¸ģัà¸Ļ
×ĵ ×ķ×ŀ×Ķ
ĠÑģ егоднÑı
س ÙĪÙĤ
ר×Ĺ ×ķ×ij
ĠØ¥ دارة
Ñħ ож
éģİ ãģİ
à¸Ħ à¸Ń
нÑĥ л
×ķ׼ ×Ķ
ÙĪ Ø§ÙģÙĤ
׼׾ ׾
Ġ×Ķ ×ĵ×ķ
Ġl Ä©nh
Ġkh ảo
×IJ×ŀ צע
ë¨ ¸
Ġ׼ ×Ļצ
Ġ׼×Ļצ ×ĵ
Ġдолж нÑĭ
หว ัà¸ĩ
ãĥĩ ãĤ¶
ãĥĩãĤ¶ ãĤ¤ãĥ³
Ġng á»Ŀ
ä¸Ń ãģ«
à¸ģลัà¸ļ มา
جÙħ اÙĦ
à¸Ķัà¸ĩ à¸ģลà¹Īาว
س ÙĥÙĨ
س ÙĨ
Ġözellik le
з еÑĢ
rz ÄĻ
×ŀ ×ķר×Ķ
Ġl ạ
×ŀ ×Ļ׳×Ļ
ר ×Ļת
ãģĿãĤĮ ãģĮ
ãģĭ ãĤĮ
ĠÙĬÙħÙĥÙĨ Ùĥ
öff entlich
г ан
ĠاÙĦØŃ ÙĦ
ĠmiÄĻd zy
ĠÑĩа ÑģÑĤи
ujÄħ cy
ĠbaÄŁ lı
ĠiliÅŁ ki
Ùģ Ø§Ø¡
ãĥª ãĥ³ãĤ°
Ġhã ng
ĠконÑĤ ÑĢ
ĠконÑĤÑĢ Ð¾Ð»
к оп
ש ×Ļ×¢
ש×Ļ×¢ ×ķר
ĠÐĴ аÑĪ
Ġ×Ķ ×ª×§
ÙħÙĨ ع
ĠpolÃŃt ico
Ġг олов
ĠØ¥ ÙĬ
Ø¥ ÙĨتاج
à¸ļ ิ
Ġг овоÑĢ
ĠговоÑĢ Ð¸ÑĤ
Ġph á»ķ
ĠÑģем ÑĮ
ãģ¯ ãģĤãĤĬãģ¾ãģĽãĤĵ
ĠÙĪ Ø§Ø³Øª
×ŀש פ×ĺ
з ем
×ŀ×ĵ ×ijר
Ġíģ °
ĠìĿ´ ë²Ī
ê°Ģ ëĬĶ
Ġì§Ģ ìĽIJ
Ġca ÅĤy
Ġgeli ÅŁtir
Ñģк ое
pos é
Ġkh ô
à¸ķิà¸Ķ à¸ķาม
miss ão
Ġ׾ ×ŀר
Ġ׾×ŀר ×ķת
Ġb ó
à¸ķรวà¸Ī สà¸Ńà¸ļ
Ġngh á»ģ
Ġб из
Ġбиз неÑģ
ÑģÑĤ еÑĢ
ÙĪ Ùİ
楽 ãģĹãģ
楽ãģĹãģ ¿
ãģĵãĤĮ ãģĭãĤī
wiÄħ zan
ส à¸Ńà¸Ļ
Ùħ ÙĪØ±
׳×ĵ ׾
Ġ×Ķ×IJ ×ĵ×Ŀ
Ġм олод
ØŃ Ùħا
ØŃÙħا ÙĬØ©
ÑģÑĤ ÑĢан
Ġbu á»ķi
ת×Ļ ×Ļ×Ŀ
abile ceÄŁi
L İ
à¹Ģย à¸Ńะ
à¸Ī ร
س ÙĥاÙĨ
à¸Ļ ัà¸Ķ
Ġm ấy
ĠÐij а
s ÅĤaw
ĠÙģ ÙĦا
ĠкоÑĤоÑĢ Ð¾Ð¹
Ġпло Ñī
ĠплоÑī ад
ãĤĤ ãģĤãĤĬ
sz czÄĻ
×Ļפ ×ķ
ש×ŀ ת
owa ÅĤa
Ġn ông
צ×ij ×IJ
ĠìŀĪ ìĹĪ
ãģ¾ ãģ¨
ãģ¾ãģ¨ ãĤģ
ÙĤÙĪ Ø§Øª
ãģ¿ ãĤĵãģª
Ġ׼ ×ŀ×¢×ĺ
Ġx úc
ï¼ Ĩ
r ÄĻ
rÄĻ cz
×ĵ ×ŀ×Ļ
Ġt áºŃn
à¸Ķ วà¸ĩ
ê²½ ìłľ
п ÑĥÑĤ
أ ربع
Ġ×ŀ שת×ŀש
ãĤ¿ãĤ¤ ãĥĹ
Ġìłľ ê°Ģ
Ġ׾ ׼ף
ĠобÑĢаз ом
ÙĬÙĥ ا
w ÅĤ
wÅĤ asn
ĠاÙĦÙĪØ·ÙĨ ÙĬØ©
بÙĬ ب
×ŀ ׾×Ļ
к ÑĢаÑĤ
기 ìĹIJ
ÙĤ اد
ĠÙĦ دÙī
à¸Ħวาม รูà¹ī
×ŀ×ĵ×Ļ׳ ×Ļ×ķת
ê² ¨
Ġíĺ Ħìŀ¬
ש ת×Ļ
м ол
Ġmá i
à¸ŀิ ม
à¸ŀิม à¸ŀ
à¸ŀิมà¸ŀ à¹Į
หล วà¸ĩ
Ġx uyên
×Ĺ ×¡×¨
رÙĪ ÙĨ
ãģĿãģĨ ãģĦãģĨ
ãģĿãĤĮ ãģŀ
ãģĿãĤĮãģŀ ãĤĮ
Ġ׼ ש×Ķ
ÐŁ ÑĢав
×ŀ×ij צע
ع رب
Ġbü yü
פ×Ļת ×ķ×Ĺ
à¸Ī à¸ļ
ĠØ£ Ùĥبر
שר ת
×ŀ׼ ש×Ļר
ĠÙĪ Ùħع
ãģ® ãģŁãĤģãģ«
à¸Ļ ัà¸ļ
ì° °
ãĥª ãĥķãĤ©
ãĥªãĥķãĤ© ãĥ¼ãĥł
Ġc ưá»Ŀng
ĠìłĢ íĿ¬
ÙħÙĨظ ÙħØ©
Ġhiç bir
ãģ§ãģ¯ ãģĤãĤĬãģ¾ãģĽãĤĵ
ร à¸Ńย
ëIJľ ëĭ¤
ãģĻãģIJ ãģ«
к ла
Ġürün ler
Ġki á»ĥu
ĠëĤĺ ëĬĶ
ÑĤ ки
Ñģ им
Ġchá»ī nh
ãĤĤ ãģªãģĦ
ศ รี
æĽ¿ ãģĪ
ta ÅŁ
Ġب ÙĥÙĦ
Ġ×ķ ×Ļש
vis ão
ä¼ Ŀ
ä¼Ŀ ãģĪ
ÙĦ د
׾ ×Ļ×ŀ
׾×Ļ×ŀ ×ķ×ĵ
t ória
د Ùij
اÙħ ر
Ġê·¸ëłĩ ê²Į
Ġmateria ÅĤ
à¸Ĺ รา
à¸Ĺรา à¸ļ
ã쮿ĸ¹ ãģĮ
ãģ¦ ãģįãģŁ
ض غ
ضغ ط
ĠÙĬ عÙĨÙĬ
ел о
×IJ×Ķ ×ij×Ķ
×¢ ×ŀ
ÅŁ ık
ìŀIJ ëĬĶ
ãĤ¿ ãĥ³
Ġb áºŃt
×ŀשפ ×Ĺ×Ķ
к ÑĢи
б ли
สั à¸ķ
สัà¸ķ วà¹Į
ĠسÙĨ ÙĪØ§Øª
ĠPh ương
ãģ¦ãģĹãģ¾ ãģ£ãģŁ
ãģª ãģľ
Ġ×ij×IJ ×ķ
Ġc án
س جÙĦ
Ġl ẽ
ãĤ± ãĥ¼ãĤ¹
Ġ×§ ×Ļ×ij׾
à¸ļà¸Ĺ à¸Ħวาม
Ġ×ķ ׼ף
ĠпÑĢедÑģÑĤав лен
Ġn á»iji
Ġcoment ário
ени ем
Ġtá» ı
l Ãł
Ġש×Ķ ×Ļ×Ķ
Ñģл ав
ĠاÙĦ ÙĪÙĦا
ĠاÙĦÙĪÙĦا ÙĬات
ÙĦج ÙĨØ©
×§×ķר ×IJ
бÑĭ ÑĤ
Ġì ¦
Ġì¦ ī
ãģ§ãģĻ ãģĹ
หรืà¸Ń à¹Ħมà¹Ī
за ÑīиÑĤ
ÙģÙĦ سطÙĬÙĨ
Ġmi á»ħn
à¹Ģย à¹ĩà¸Ļ
ĠçalÄ±ÅŁ an
×Ļ×Ĵ ×Ķ
ĠE ÄŁ
ĠEÄŁ itim
ãĥĥãĤ· ãĥ¥
Ġоп Ñĭ
ĠопÑĭ ÑĤ
ر غ
رغ ب
ĠÑģво иÑħ
à¸Ľà¸£à¸° à¸ķ
à¸Ľà¸£à¸°à¸ķ ู
Ġ×ŀ×IJ ×ĵ
׼ ×ķ׳×Ļ×Ŀ
à¸Ļ ี
ĠвÑĭ Ñħод
ãģ®ä¸Ń ãģ«
פ ׾×IJ
ĠÙĪ ÙĦÙĬس
פ×ķר ס
פ×ķרס ×Ŀ
Ùħ سÙĦÙħ
Ġng ôi
×ĵ ×ŀ×ķת
ãĤĴ使 ãģ£ãģ¦
ĠпомоÑī ÑĮÑİ
أ سر
бл ок
ÙĤ Ùĩ
ãģĹãģ¾ ãģĦ
ãģ¨ ãģĹãģŁ
Ġп еÑģ
ãĥī ãĥ«
×Ĺ ×Ŀ
ãģĹãģª ãģĮãĤī
ĠÐŁ ÑĢед
ãĥģãĤ§ ãĥĥãĤ¯
å¼· ãģĦ
ש ×Ļר×ķת
д аеÑĤ
×Ļ×ij ×ķ
Ġgen ç
ил аÑģ
илаÑģ ÑĮ
ĠبÙĦ د
æĤ ª
æĤª ãģĦ
Ġ×ŀ שת
æ§ĺ ãĢħ
æ§ĺãĢħ ãģª
à¸ĺรรม à¸Ĭาà¸ķิ
ĠÙĥ اÙħÙĦ
ĠاÙĦس Ùħ
×ij×ĺ ×Ļ×Ĺ
c á
g ência
ãĤ¹ãĤ¿ ãĥ¼
à¸Ĺำ à¸ģาร
×Ļ׾ ת
Ġ×Ļ ×ķצ×IJ
w ój
à¸ļุ à¸Ħ
à¸ļุà¸Ħ à¸Ħล
ع تÙħ
عتÙħ د
ãģĿãĤĮ ãģ«
ĠاÙĦت ارÙĬØ®
ÙĤر اء
Ġyönet im
ק שר
ĠÑģп оÑĢÑĤ
Ġר×IJש ×ķף
Ġseñ al
Ġch ắn
çĦ¡ ãģĦ
ĠдоÑģÑĤ аÑĤ
ĠдоÑģÑĤаÑĤ оÑĩно
Ġá gua
à¸ģร à¸ĵ
à¸ģรà¸ĵ ี
Ġ×ŀש ×ķ
Ġtr ải
ë² Į
ujÄħ cych
Ù쨱 د
à¹ĥ à¸ģล
à¹ĥà¸ģล à¹ī
ãĤĭ ãģ®ãģ¯
ר×ķ ×ķ×Ĺ
ÙĨ Ùĥ
ĠاÙĦÙĨ ÙĤ
ãģ®ãģ§ ãģĹãĤĩãģĨ
ãģ®ãģ§ãģĹãĤĩãģĨ ãģĭ
Ùħ عرÙģ
ÙħعرÙģ Ø©
ÑĥÑī е
Ġ×ij×¢ ×Ļקר
ت صÙĦ
Ġ×Ķ×IJ ר
Ġ×Ķ×IJר ×¥
ĠÅŀ i
à¸Ĥา à¸Ķ
íŀ ĺ
ãģªãĤĵ ãģ¨
ĠìĤ¬ëŀ ij
l Ã¼ÄŁÃ¼
ب اء
ĠاÙĦØ¢ خر
Ġfam ÃŃlia
ĠTh áng
Ñī ениÑı
ãĤ¯ ãĥŃ
ĠTh ứ
æĽ¸ ãģį
ен ной
ìŀ ¡
бл аг
благ о
п ов
à¹ģ ว
à¸ĩ à¸Ħà¹Į
à¸Ńัà¸Ļ à¸Ķัà¸ļ
ãģĤ ãģĴ
ร à¹īาย
ün ün
Ġ×Ļ׼×ķ׾ ×Ķ
з он
ĠÐľ и
маÑĤ еÑĢиал
Ġë³´ ë©´
ØŃÙģ Ø¸
ê Ìģ
ãģ« ãģĻãĤĭ
Ġת ×IJ
Ġ×Ķס ×ķ
ĠÑģÑĤ оÑĢ
ĠÑģÑĤоÑĢ Ð¾Ð½
ãĥĪ ãĥĥãĥĹ
ÅĤo ÅĽÄĩ
ëħ ¼
ëĵ Ŀ
ĠÙĪØ§ÙĦ ع
ì¶ Ķ
Ġ×Ļצ ×IJ
ĠÑĢаз дел
алÑĮ наÑı
×IJ׳ ש×Ļ
spo ÅĤ
spoÅĤ ec
spoÅĤec zn
Ø¥ عÙĦ
إعÙĦ اÙĨ
ÙĤÙĪ Ùī
íķĺë©´ ìĦľ
تط ÙĪØ±
Ġsi êu
Ỽ t
д ви
дви ж
Ġqu ần
k ıl
ĠпÑĢи зна
ĠH ã
ĠHã y
ĠباÙĦ ت
man ın
ãĤ« ãĥ«
Ġk á»·
×§ ׾×Ļ
ëIJĺ ì§Ģ
تعÙĦ Ùħ
ìĭľ ìĦ¤
ìĭ ¶
íĺ ¼
Ùĥ ÙĬÙģ
売 ãĤĬ
วิ à¸Ĭา
б ал
ĠØ£ ØŃ
Ġдолж ен
รา à¸ĩ
ราà¸ĩ วั
ราà¸ĩวั ล
Ùħ اء
ج ار
Å ļ
Ġ×ŀ×IJ ×ĸ
ר ×ŀ×Ķ
ãģĭãĤĤãģĹãĤĮ ãģªãģĦ
ét ude
czÄħ c
Ġg ór
×ł×¡ ×Ķ
Ùħ ÙĬد
ĠÐŁ еÑĢе
أ خر
ãģĿãģ® å¾Į
à¹Ģà¸Ķียว à¸ģัà¸Ļ
×ŀ ×Ĵ×ķ
×ŀ×Ĵ×ķ ×ķף
д ов
mas ına
×¢ ׳×Ķ
ãĤ± ãĥĥãĥĪ
ס ע
סע ×Ļ×£
ĠT ư
Ġt óc
íĻľ ëıĻ
ĠÐŀ д
ĠÐŀд нако
Ġdol ayı
ؤ Ùĥد
ê³Ħ íļį
׾ ר
в еÑĩ
Ġkh ợi
Ġth á»§y
×ĵ ף
ร à¸ģ
à¸ļั à¸ķร
à¹Ģà¸ģ à¹Īา
ĠاÙĦØ« اÙĦ
ĠاÙĦثاÙĦ Ø«
Ġpod rá
ער ×Ļ
ÙĨج اØŃ
Ġkh ắc
ì¸ ¡
İ M
ãĤ» ãĥĥãĥĪ
ż enia
Ġ׾×Ĺ ×ijר
er Ãł
ì ´Ī
Ġkü ç
Ġküç ük
ات ÙĩÙħ
à¸ĭ à¹Į
Ùħشار ÙĥØ©
ĠاÙĦ بط
Ġd ây
ен нÑĭм
à¸Ĺีà¹Ī à¹Ħมà¹Ī
ÙĤ Ùİ
Ġv ượt
Ġtr ì
Ġwp ÅĤyw
A Åŀ
з о
ĠاÙĦس ÙĬد
à¸Ĺะ à¹Ģล
ĠÑģодеÑĢж а
ع Ø·ÙĬ
ĠاÙĦع ÙĨ
èĢħ ãģĮ
à¹Ģ หà¸Ļ
à¹Ģหà¸Ļ ืà¸Ń
Ġb ÃŃ
Ġüzer inden
ĠV Å©
Ġnu ôi
ÙĨ Ùħ
алÑĮ ного
×¢ ×Ļף
ØŃ ضر
ĠоÑĤ дел
ëª ĩ
ìķ ¡
ĠÙĦدÙĬ Ùĩ
ìĻ ľ
Ġse ktör
Ġвозмож но
ĠÐĶ Ð¶
Ġh ô
äºĭ ãģĮ
иÑĢов ание
алÑĮ ной
Ġ미 êµŃ
ر ØŃÙĦ
ĠÑįк Ñģ
пÑĢав лÑı
Ġnh á»Ŀ
ĠÄij ẩ
ĠÄijẩ y
Ùģ Ùĥر
ĠÙĪØ£ ضاÙģ
ãĥIJ ãĤ¹
ת×ķ׼ ׳×Ļת
ÑĤел ей
ĠØ¥ÙĦÙĬ Ùĩ
ãģ¨è¨Ģ ãģ£ãģ¦
Ġдв е
Ġch ấp
ĠL ö
à¸Ħล ิ
à¸Ħลิ à¸Ľ
Ġس ÙĪØ±
ĠسÙĪØ± ÙĬا
×ŀ×Ĺ ×ķ
st ä
д об
Ġni á»ĩm
ãģ® å¤§
פר×ķ ×Ļ×§
פר×ķ×Ļ×§ ×ĺ
ĠCh âu
Ġ×ŀ×Ķ ×Ŀ
Ñģк им
ĠполÑĥÑĩ иÑĤÑĮ
ÙĬ ÙĪÙħ
Ø« ÙĪØ±
פ×ķ׾ ×Ļ×ĺ
פ×ķ׾×Ļ×ĺ ×Ļ
ĠмеÑģÑı ÑĨ
åħ¨ ãģ¦
ĠاÙĦÙħ جÙĦس
ĠاÙĦت اÙĦÙĬ
Ġ׊ר
åIJij ãģij
׼ ×ŀ×Ķ
б ед
أ عض
أعض اء
ÙĪÙĦ د
วà¹Īา à¸Īะ
Ġb ánh
à¸Ļิ ย
à¸Ļิย ม
à¸Ľà¸£à¸° à¸ģัà¸Ļ
ÑģÑĤав иÑĤÑĮ
à¸ŀ à¸Ļัà¸Ļ
ĠÑį ÑĦÑĦ
ĠÑįÑĦÑĦ екÑĤив
Ġав ÑĤоÑĢ
ĠÄIJ Äĥng
Ġth Æ°á»Łng
ãĤĴ æĦŁãģĺ
à¸ģัà¸ļ à¸ģาร
å¾Į ãģ«
Ġya ÄŁ
ست اÙĨ
Ġli á»ģn
ãģĦ ãģ¾
i êu
à¹Ĥà¸Ķ à¸Ļ
ĠÙĦ ذÙĦÙĥ
à¹Ĥรà¸ĩ à¹Ģรียà¸Ļ
צ ×Ļ×Ĵ
ĠاÙĦÙħ عÙĦÙĪÙħات
ç§ģ ãģŁãģ¡
à¸Ĺีà¹Ī à¸Ħุà¸ĵ
ãģ«ãģª ãģ£ãģ¦ãģĦãĤĭ
×ŀ×ĵ ×Ļ׳×Ķ
ס ׼×Ŀ
Ġв не
à¸ŀ à¸Ļัà¸ģà¸ĩาà¸Ļ
ÑĢ ÐµÐ¹
à¹Ģà¸Īà¹īา หà¸Ļà¹īาà¸Ĺีà¹Ī
ĠHi á»ĩn
Ġméd ico
ĠتØŃ ÙĤÙĬÙĤ
ÑĮ ÑĤе
miÅŁ ti
ÙĤÙĬ ادة
ãĤı ãģĭãĤĬ
มา à¸Īาà¸ģ
ëħ Ģ
ãģ«éĸ¢ ãģĻãĤĭ
×IJר×Ĵ ×ķף
m ètre
Ġעצ ×ŀ×Ļ
ĠCh úa
รูà¹ī à¸Ī
รูà¹īà¸Ī ัà¸ģ
ì£ Ħ
ëĭ µ
à¹ģà¸Ĺ à¹ī
Ġgeç en
Ġlan ça
ĠاÙĦ بØŃØ«
×ĵ ×ŀ×ķ
ãģ¯ ãģĺ
ãģ¯ãģĺ ãĤģ
Ġdön Ã¼ÅŁ
è¿ij ãģı
à¹Ģส ม
à¹Ģสม à¸Ń
ëĿ ½
Ġü ç
á» ŀ
ÑĪ Ð°Ñı
à¸Ĺ ร
ØŃ ÙĤÙĬÙĤØ©
à¸Ĥà¸Ńà¸ĩ à¸ģาร
Ġ무 ìĹĩ
Ġ×Ķ ×Ľ×¨
ĠاÙĦص ÙĬÙĨ
ĠлÑİ Ð´Ð¸
à¸ķ าย
ب ÙĪÙĦ
Ġvi êm
Ġthi á»ĩu
à¸ģ à¸Ķ
Ġ׾ ×ĵ×ijר
פ ׳×Ķ
×IJר ×ij×¢
س Ùī
ĠاÙĦسÙĬ اس
ĠاÙĦسÙĬاس ÙĬØ©
yd ı
ÙĪØŃØ¯ Ø©
ĠдеÑıÑĤелÑĮ ноÑģÑĤи
Ġ×ķ×Ķ ×ŀ
п еÑĩ
пеÑĩ аÑĤ
иÑĢов аниÑı
ĠÑģ ог
ĠÑģог лаÑģ
Ġ׼ ×ĵ
Ġ׼×ĵ ×IJ×Ļ
ĠиÑģполÑĮзов аÑĤÑĮ
ס פ×ķר×ĺ
Ġil çe
exp érience
ĠTh á»Ŀi
İ K
à¹Ħà¸Ł à¸Łà¹īา
ëĵ¤ ìĹIJê²Į
à¸Ľà¸£à¸° à¹Ģà¸ł
à¸Ľà¸£à¸°à¹Ģà¸ł à¸Ĺ
Ġmü mk
Ġmümk ün
Ġ×IJ×ķת ׳×ķ
ìĦ± ìĿĦ
ĠìĿ´ ìľł
زÙĬ ارة
Ġolduk ça
r ób
ĠØ£ ÙĨا
Ġ×Ķ ×ij×Ļ
Ñģ ен
×¢ ×Ļקר
×Ļ×ĵ ×ķ×¢
d zÄħ
Ùħ عÙĦÙĪÙħات
ش اب
Ġpar ça
à¸Ļะ à¸Ħะ
ب اس
ĠÑĤоÑĢ Ð³
ĠÑĤоÑĢг ов
Ġ×Ĺ ×ĵר
׼ ר×ĺ
׼ר×ĺ ×Ļס
ĠA yrıca
ÃªÌ £
ìľ ¨
ĠÑĤак ие
Ġ×ŀצ ×ķ×Ļ
ãĥ©ãĥ³ ãĤŃãĥ³ãĤ°
ש×Ļ×ķ ×ķ×§
åīį ãģ®
ĠB ảo
Ñī Ñĥ
æĹ© ãģı
ĠPh òng
à¸ŀระ ราà¸Ĭ
פ ×Ĺ×ķת
Ġг л
Ġгл аз
à¸Ĺ à¹Īา
Ġd ạy
ÑĢ Ð¾ÑģÑĤ
à¹Ĥà¸Ķย à¹Ģà¸īà¸ŀาะ
Ġqu áºŃn
Ġ×Ĺ×ijר ×ķת
m ême
mÄ±ÅŁ tı
ĠاÙĦت داÙĪÙĦ
Ġn ạn
Ġ×Ķ ×ĵ×Ļ
ĠاÙĦØ· رÙĬÙĤ
×Ĵ ×ķת
Ġ×Ķ ×ĵר×ļ
ujÄħ ce
Ġch ữ
ãĤĤãģ® ãģ®
ë° Ľ
ãģķãĤĵ ãģ¯
Ġyard ım
ĠاÙĦع Ùħ
Ġì§Ħ íĸī
Ġ×Ļ ×Ĺ
Ġ×Ļ×Ĺ ×¡×Ļ
ĠاÙĦÙħ دÙĬÙĨØ©
Ġc ú
à¸ģี ฬ
à¸ģีฬ า
Ġni ên
mis ión
׳×Ļס ×Ļ
׳×Ļס×Ļ ×ķף
Ġвоз ÑĢаÑģÑĤ
Ġ×¢×ķש ×Ķ
ĠÙħ دÙĬر
Ñı ÑģÑĮ
ØŃ جÙħ
íĻĺ ê²½
ĠاÙĦØ£ خرÙī
u ÃŁer
ĠاÙĦعاÙĦÙħ ÙĬØ©
ĠNg á»įc
êµIJ íļĮ
ä¸Ĭ ãģ§
×Ļ×Ķ ×ķ×ĵ
×Ļ×Ķ×ķ×ĵ ×Ļ×Ŀ
Ùħس اعدة
Ġжиз нÑĮ
ĠпоÑĤ омÑĥ
ĠاÙĦÙħ ÙħÙĦ
ĠاÙĦÙħÙħÙĦ ÙĥØ©
ĠG ör
ر ÙIJ
×ŀ×§ ×ķ×ŀ×ķת
åĩºæĿ¥ ãĤĭ
ÑĦ ÑĤ
ĠìĿ´ ìłľ
ĠÑĢ ÐµÐ¼
ĠÑĢем онÑĤ
ת ×ķ×ļ
æĻĤ ãģ¯
ãĤīãĤĮ ãģªãģĦ
alt ı
å®¶ ãģ®
ĠاÙĦØ¥ عÙĦاÙħ
리 ëĬĶ
ãģĭãĤī ãģ¯
ĠH ạ
ãģĤ ãģ®
×ĵ×Ļ ×ķף
رÙĬ س
Ġsoci etÃł
ĠاÙĦÙĥ بÙĬر
Ġ×ij ×ŀס
Ġ×ij×ŀס ×Ĵר
Ġ×ij×ŀס×Ĵר ת
ĠìŀĪ ìľ¼ë©°
Ġn ặng
Ùĩ Ùī
ĠB Ãł
×ŀר ×ķ
Ġj ÄĻ
ĠjÄĻ zy
ĠjÄĻzy k
Ġ׼ ×ŀ×ķ×ijף
×¢ ׾×Ķ
à¸Ĺีà¹Ī à¹Ħà¸Ķà¹ī
ãģ¾ ãģĹãĤĩãģĨ
×ŀס פר
Т Ðŀ
سÙĬاس Ø©
Ġкажд Ñĭй
ë² ł
t ım
y á»ĩn
ร ีà¹Ī
ĠдеÑĤ Ñģк
วิà¸ĺี à¸ģาร
m ówi
×ĺ×¢ ×Ŀ
×Ķצ׾ ×Ĺ×Ķ
ض ÙĬÙģ
ĠÑħоÑĤ Ñı
ãĤĵãģ§ ãģĦãĤĭ
à¸Ħา à¸Ķ
à¸Ħร à¸ļ
Ġк ÑĥÑĢÑģ
ĠbaÅŁ arı
×ijר ×ķ
ÙĬع Ø©
ĠÐĿ Ñĥ
à¸Ħวาม à¹Ģà¸Ľà¹ĩà¸Ļ
Ġ׾ ×ŀש׾
Ġì¢ĭ ìĿĢ
Ùħؤس س
Ùħؤسس ات
Ġpréc is
Ġth ảo
à¸ģà¹ĩ à¸Ħืà¸Ń
Ġש ׼׾
führ ung
ãģĦ ãģ§
à¹ģละ มี
à¸ģà¹ĩ มี
Ġש ש
м ел
Ġкни г
ĠباÙĦ ÙĨ
ĠباÙĦÙĨ سبة
Ġald ı
ÑĤ ай
Ġ×Ĺ×ĵ ש×Ļ×Ŀ
å®Ł ãģ¯
ع ÙĪØ§
ĠìĿĺ 미
из м
ÑĢабоÑĤ аÑĤÑĮ
Ùģ Øµ
Ġ×ij׳ ×ķסף
ãģ¨ãģĹãģ¦ ãĤĤ
à¹Ģà¸Ľà¹ĩà¸Ļ à¸Ĺีà¹Ī
ĠÑģлед ÑĥеÑĤ
èĢĥãģĪ ãģ¦
Ġ׼ ×Ļ×ķ×Ŀ
ÑģÑĤ Ñĭ
׼׾׼ ׾×Ļ
æµģ ãĤĮ
ãĤĴ ãģ¤ãģij
Ñĩ аÑĤ
×Ļ׼ ×ķף
×Ļר ×Ļ
ları yla
ãĤ¤ ãĥ¡
ãĤ¤ãĥ¡ ãĥ¼ãĤ¸
׳×ĸ ×§
Ġci ò
Ġs ın
Ġsın ır
à¸Ļ à¸Ħร
к аÑĤ
Ġl á»Ĺi
ëŀ Į
تÙģ Ø§Øµ
تÙģØ§Øµ ÙĬÙĦ
ëĨ ĵ
ĠÙħ ض
il miÅŁ
بار Ùĥ
ÐĿ Ðĺ
Ġth ẩm
Ġ×IJ×ķת ×ļ
ĠпÑĢин им
ĠпÑĢиним а
Ġyö nt
Ġyönt em
Ġ×ŀ×§ ×ij׾
Ġktó rego
ê· Ģ
شر Ùģ
د اÙħ
ãģĦãĤį ãģĦãĤį
ĠAl ém
Ġgör ü
Ġgörü nt
Ġgörünt ü
د س
ÑĪ ÐºÐ¸
г ÑĢад
Ġl ạc
Ġs ữa
ãĤīãĤĮ ãģ¾ãģĻ
o Ãłi
Ñī ен
ãģĭ ãģªãģĦ
Ġп оп
Ġпоп Ñĥ
ĠпопÑĥ лÑıÑĢ
ĠاÙĦÙħ ÙĪÙĤع
rä g
ï¼ ¡
íķ Ħ
ãĤĴè¦ĭ ãĤĭ
اÙħ ا
ĠاÙĦØŃ رب
ĠÐŁ а
Ġ׾ ×IJתר
Ġt á»ijc
×ij ׾×Ķ
ر ئÙĬس
в Ñĥ
ÙĬ دÙĬ
каз ан
Ġ׊ש×ij×ķף
h ôtel
×¢ ×ķ׳×Ķ
ب ÙĨÙĬ
×ŀ ×ķ׾
Ġд нÑı
éĽ£ ãģĹãģĦ
вед ениÑı
Ġ×ķ ×ŀת
н апÑĢимеÑĢ
ÙĤ ابÙĦ
Ġrésult at
ĠÑĢазвиÑĤ иÑı
ر Ùij
ìłĦ 문
ĠاÙĦÙħ زÙĬد
ĠìľĦ íķ´ìĦľ
ëĨ į
íĻ ķ
ĠThi ết
íĮ ¨
malı dır
Ġcz ÅĤ
ĠczÅĤ owie
ĠczÅĤowie k
ĠÙĦ بÙĨ
ĠÙĦبÙĨ اÙĨ
üs ü
ãģªãĤĵ ãģł
Ġżyc ie
ĠÑħоÑĢоÑĪ Ð¾
æĸ¹ ãģ«
ëĭ¤ ë©´
иÑĩеÑģ каÑı
ער ×Ļ׼
ער×Ļ׼ ת
ãģ¾ãģĽãĤĵ ãģ§ãģĹãģŁ
ĠÑģоб ой
Ġg á»Ĺ
Ġдел аÑĤÑĮ
da Äĩ
аÑĢ Ð°
róż ni
à¹Ģล ีà¹ī
à¹Ģลีà¹ī ย
à¹Ģลีà¹īย à¸ĩ
à¸Ŀ าà¸ģ
Ġت ÙĤ
ĠتÙĤ دÙĬ
ĠتÙĤدÙĬ Ùħ
หà¸Ļ ุà¹Īม
Ġmü cade
Ġmücade le
ì§Ģ 를
ãĤ¤ ãĤ¹
ĠØ£ ساس
jÄħce go
ĠÅŁ eh
н ÑĤеÑĢ
ÑĨи Ñİ
ï» »
ÑİÑī его
à¹Ĥà¸Ľà¸£ à¹ģ
à¹Ĥà¸Ľà¸£à¹ģ à¸ģรม
Ġmie Äĩ
ØŃÙĥÙĪÙħ Ø©
ãģ§ãģĹãģŁ ãģĮ
×Ļס ×Ķ
ãĤĤãģ® ãĤĴ
Ġ×ŀ ×IJת
สุà¸Ķ à¸Ĺà¹īาย
Ġc Å©
ÙĨ سب
ĠпÑĢ Ð¾Ñĩ
Ġд ней
ĠÑįÑĤи Ñħ
׾ ×ŀת
нÑı Ñı
Ñį к
Ġì§Ģ ëĤľ
มหา วิà¸Ĺยา
มหาวิà¸Ĺยา ล
มหาวิà¸Ĺยาล ัย
d ão
ĠMá y
ĠêµŃ ê°Ģ
à¸ļุ รี
×Ĵ ×Ļ׾
ĠÑĤÑĭ ÑģÑı
ĠÑĤÑĭÑģÑı Ñĩ
Ùģ Ùĥ
ĠÐĺ Ñģ
è¡Į ãĤıãĤĮ
פר ×ĵ
ãģ¤ ãģį
à¸Ħร à¸Ńà¸ļ
à¸Ħรà¸Ńà¸ļ à¸Ħรัว
à¸Ĥึà¹īà¸Ļ มา
ä»ĬæĹ¥ ãģ¯
ĠìĤ¬ëŀĮ ìĿ´
עצ ×ŀ×Ķ
п оÑĢ
ĠK ỳ
Ġ Æ¡n
Ġth Äĥm
Ùģ Ø§ÙĤ
ãģļ ãģ«
Ġ׾ קר
Ġ׾קר ×ķ×IJ
اÙģ ÙĬØ©
Ùħ ÙİØ§
г аÑĢ
ص ÙĦا
صÙĦا Ø©
Ġ×ŀ ×ĸ×Ķ
lı ģını
Ġ×IJ ×Ļ׳×Ķ
к ÑĢо
Ġng ươi
Ġв ним
Ġвним ание
jÄħ cy
ÙĢÙĢÙĢÙĢ ÙĢ
Ñģ Ñħод
ãģªãĤĵ ãģĭ
×ŀ ×Ļ׾
Ġ×Ķ×IJ ×Ĺ
ãĤı ãģªãģĦ
ع سÙĥر
ĠìĦ¸ ê³Ħ
ĠÑĩ его
ĠÑģÑĢед ÑģÑĤва
ĠÐł аÑģ
ãģª ãģģ
ÙĨ Ù쨳
ר×Ļ ×ķף
Ñģ Ñĥд
ĠìĿ¸ ê°Ħ
ĠاÙĦÙħ ÙĤبÙĦ
ÙĨ عÙħ
تÙĪ Ù쨱
ש ×ij×¢
ı lm
ılm Ä±ÅŁ
Ġ×ľ×ª ת
تص Ùģ
×Ķפ ×ķ×ļ
à¹ĥà¸Ļ à¸Ľà¸µ
ìĿ´ ê³ł
Ùģ ÙĪØ²
à¸ľà¸¥ à¸ĩาà¸Ļ
ĠGi áo
à¸ļà¸Ńà¸ģ วà¹Īา
Ġd Ä±ÅŁ
ĠdÄ±ÅŁ ında
ì£ ½
Ġdzie ÅĦ
к ÑĨии
и ÑĨе
ãģ® ä¸Ģ
ع ش
пÑĢ ÐµÑģÑģ
หà¸Ļ à¹Īà¸Ńย
ลัà¸ģษ à¸ĵะ
Ġpossibilit Ãł
à¹Ħà¸Ķà¹īรัà¸ļ à¸ģาร
หย ุà¸Ķ
Ġphi ên
çĶŁ ãģ¾ãĤĮ
Ø· ÙĪÙĦ
ÑĦ ин
f ür
ØŃ ÙĬاة
íĸ ĪìĬµëĭĪëĭ¤
׼ ׳×ķת
à¸Ľà¸£à¸° ส
à¸Ľà¸£à¸°à¸ª à¸ļ
à¸Ľà¸£à¸°à¸ªà¸ļ à¸ģารà¸ĵà¹Į
ëIJĺ ìĹĪ
Ġkaż dy
Ġl uyá»ĩn
ĠоÑĢганиз аÑĨии
å°ij ãģªãģı
ÑģÑĤÑĢо ен
Ġtécn ico
×§ ×Ķ׾
Ġ×ķ×IJ ×Ĺ
ĠعÙĦÙĬ Ùĥ
Ñī ение
Ġ×Ķ ×Ļ׾×ĵ×Ļ×Ŀ
ÙĪØ³ ائÙĦ
Ġ×ķ ×Ķת
تÙħ ÙĬز
ĠÑģ казал
Ġпол и
Ġ×Ķ×ŀ ס
ÙĦÙij Ùİ
Ùħؤس سة
Ġ×ŀ ×Ļ×ĵ
ãģ£ ãģ¡
ĠëĦĪ ë¬´
à¸ŀ ี
Ġt ặng
Ġt ấn
ר ש×Ŀ
Ġméd ica
Ġ×¢ ×ķ×ŀ
Ġ×¢×ķ×ŀ ×ĵ
ÑĦ оÑĢ
Ùħر Ø©
Ġvat anda
Ġvatanda ÅŁ
Ġдел о
à¸Ļ ม
ãģ¨ åIJĮãģĺ
Ùģ Ùī
Ñģ оÑĢ
Ġ×Ķס ר×ĺ
Ġép oca
ìłķ ì±ħ
ĠÑģвÑıз ан
ض رب
ĠÙĦ ÙĨا
Ġuży wa
ĠاÙĦج ÙĬØ´
Ñİ ÑĢ
×ijס ×ķ×£
Ġм Ñĥ
ĠмÑĥ зÑĭк
bilit é
Ġma ç
س Ùİ
ت ÙĦÙĥ
ãģ ¬
ÙĬ ÙĦا
ÑĪ Ð»Ð°
ÙĢÙĢ ÙĢ
Ġод ной
зв ан
ĠÑģ ÑĢаз
ĠÑģÑĢаз Ñĥ
ÙĨ ظÙħ
را Ùĩ
ĠÙĦÙĩ ذا
׼ ×ķר
Ġ×Ķש ×ij×ķ×¢
Ġ×Ķש ת
ĠQu ảng
ãĥ« ãĥ¼
ãģĪ ãģªãģĦ
×ĺ ×IJ
Ġmi á»ģn
ĠPh áºŃt
ĠاÙĦس ÙĪÙĤ
Ä Ĥ
ĠاÙĦج Ùħع
ĠاÙĦجÙħع Ø©
ÑİÑī ей
a ÅĤem
عت ÙĤد
Ø£ ÙĦÙħ
Ñģ ке
ĠìĿ´ íķ´
ÙĨس Ø®
è¨Ģ ãģĦ
д обав
سب ÙĤ
×¢×ķר ר
ÑĤи п
ãģĿãģĵ ãģ§
vis ión
عÙĪØ¯ Ø©
ë¨ ¹
×ŀ ×ĸר×Ĺ
ĠØ¥ ØŃ
Ġ׾×ij ×Ļף
Ġ׾צ ×IJת
Ġyard ı
Ġyardı mc
Ġyardımc ı
İ Z
×§ פ×Ķ
tr é
liÄŁ ini
клÑİÑĩ а
Ġüret im
Ġa yrı
ĠkiÅŁ iler
à¸Ħ à¹īà¸Ļ
à¸Ħà¹īà¸Ļ หา
ĠS á»±
Ġ׼ ס
Ġ×Ľ×¡ ×£
ĠÑĤак иÑħ
ĠXu ân
Ġл ег
Ġлег ко
Ø«ÙĤ اÙ쨩
ÐĿ Ðŀ
ãĤ¹ãĤ¿ ãĥĥ
ãĤ¹ãĤ¿ãĥĥ ãĥķ
åIJĪ ãģĦ
Ġ×Ķש ×Ļ×ŀ×ķש
man ız
ĠÐĴ аÑģ
g ün
ìľĦìĽIJ íļĮ
Ġwsp óln
ĠÑģв ое
í ĥģ
à¹Ģà¸Ļ ีย
ÙĪØ¨ Ø©
в Ñıз
ı dır
ëIJĺ ìĹĪëĭ¤
ĠdeÄŁi ÅŁtir
ãĤĭ ãģĵãģ¨ãģĮ
Ġ×Ĺ×ĵ ש×Ķ
ãĤīãĤĮ ãģ¦ãģĦãĤĭ
×Ĺ×Ļ ×Ļ×ij
ĠÐļ аÑĢ
׳×Ļת ×ķ×Ĺ
Ġ×§×ĺ ף
ר ×ĸ
ÙĪ Øº
èªŃ ãģ¿
Ġت ÙĤÙĪÙħ
ĠÙĥ اÙĦ
à¸Ŀ ึà¸ģ
Ġë°ľ ìĥĿ
ológ ico
ر اع
à¹ģà¸ģà¹ī à¹Ħà¸Ĥ
ĠÑĢабоÑĤ Ñĥ
ÙĨÙij Ùİ
à¸Ńยูà¹Ī à¸Ĺีà¹Ī
ĠاÙĦØ« اÙĨÙĬØ©
ĠNh ân
Ñħ ваÑĤ
ö ne
Ġع دة
à¹ģ สà¸ĩ
ÑĤ оп
пÑĥÑģ ка
شر اء
ĠÐļ ом
Ġפע ×ķ׾×Ķ
ìĤ¬ ìĿ´
ìĤ¬ìĿ´ íĬ¸
è¡Į ãģ£ãģ¦
Ġ×Ķ ×Ķת
ĠÑģÑĤ оÑĢо
ĠÑģÑĤоÑĢо нÑĭ
در س
à¸ĭ ู
à¸ķà¹Ī ำ
ĠØ£ بÙĬ
под об
ãģ« ãģ¦
ار تÙģØ§Ø¹
ĠÙħ ؤ
ик ов
ge führt
มืà¸Ń à¸ĸืà¸Ń
ĠÙĦ ÙĤد
ĠØ£ÙĨ Ùij
سÙĬ طر
ãģ¾ãģļ ãģ¯
ס ×ĵ
Ñģк олÑĮко
ãģ¿ãģŁãģĦ ãģª
×ĵר ×Ĵ
×¢ ×Ļ×ĵ
à¹ĥหà¹ī à¸ļริà¸ģาร
ĠÐĶ Ð¸
×ij×¢ ×Ļ×ķת
Ġ×Ķ×Ĺ ×ķ
пиÑģ ÑĮ
ĠاÙĦØ® ÙĦ
б ав
Ġİ lk
ĠاÙĦØ® Ùħ
ĠاÙĦØ®Ùħ ÙĬس
ĠÙĬ ÙĤÙĪÙħ
æĻĤ ãģ®
ĠsÅĤ ow
ĠØ£ ÙĩÙħ
Ø®ÙĦ ÙĤ
ĠØ£ صبØŃ
Ġchứ a
Ġth ác
Ùģ Ø§ÙĦ
Ġch á»Ŀ
ĠاÙĦØ® ار
ĠاÙĦخار ج
ĠاÙĦخارج ÙĬØ©
ط ائر
Ġt Ãł
ĠtÃł u
à¸ģล à¹īà¸Ńà¸ĩ
ĠاÙĦÙħر Ø£
ĠاÙĦÙħرأ Ø©
åħ¨ ãģı
ĠÃĸ n
çļĦ ãģ«ãģ¯
Ġpiè ce
×Ĵ ×Ļ×ij
ĠاÙĦ ÙĪØ§ÙĤع
ä»Ĭ ãģ®
ĠاÙĦÙħ ÙĤ
cz nÄħ
Ù쨹 اÙĦ
ен ного
ĠÑĦак ÑĤ
ìĭł ì²Ń
ĠÐŀ ни
ĠاÙĦبÙĦ اد
ов иÑĩ
ëı Į
ÑĦ ÑĥнкÑĨи
Ġìĸ´ ëĬIJ
ãĥķãĤ© ãĥ¼
d ÃŃ
ил оÑģÑĮ
Ùħ Ùī
ĠاÙĦØ£ÙħرÙĬ Ùĥ
ĠاÙĦØ£ÙħرÙĬÙĥ ÙĬØ©
×ĺ ×Ļפ×ķ׾
íĶĦ ë¡ľê·¸
íĶĦë¡ľê·¸ ëŀ¨
Ġש ×ķ׳×ķת
Ø´ ÙħÙĦ
ĠпаÑĢ Ð°
Ġ×Ķ×Ĺ ×ķ×§
ÙĪØ² ارة
ãģ¨ ãģĻãĤĭ
Ġqu ảng
ĠaÄŁ ır
ĠاÙĦÙĦ ج
ĠاÙĦÙĦج ÙĨØ©
ê¸ ´
ĠT ân
ج ÙħÙĦ
д ол
à¹ģà¸ŀ à¸Ĺย
à¹ģà¸ŀà¸Ĺย à¹Į
Ġר×IJ ש×Ļ
Ñī ей
Ġçev re
Ġкомп лекÑģ
Ġ×ij ×ŀש×ļ
Ġalt ın
ĠØ£ عÙħاÙĦ
ĠÑģво его
ãĤĪ ãģĦ
×Ĺ׾ ×Ļ×ĺ
×ŀ׳ ×¢
Ġר ×ij×Ķ
ĠØ£ÙĬضا Ùĭ
×ĸ ׾
ĠاÙĦسÙĬ اسÙĬ
æĢĿ ãģĨ
קר ק
קרק ע
ĠاÙĦÙģ Ø±ÙĬÙĤ
б иÑĤ
×§ ׳×Ķ
ĠØ¥ ÙĨÙĩ
ĠÐĴ ам
Ðł Ðŀ
ãĥĪ ãĥª
å¿ħè¦ģ ãģª
Ġch âu
ç¶ļ ãģij
Ġçöz üm
gÅĤ ow
ع ÙĤÙĦ
売 ãĤĭ
i ết
à¸Ĭิ à¹īà¸Ļ
ĠØŃÙĤ ÙĪÙĤ
Ø·ÙĦ ع
ĠÄij en
ĠÙĥ اÙ쨩
ãģ® ãģĶ
Ġë ¬
Ġë¬ ¼
Ġ물 ë¡ł
Ġرس ÙĪÙĦ
з ам
зам ен
Ġkullan ıcı
×¢ ×ķ׾
èī² ãĢħ
ÑĪи ÑĢ
Ġ׊ש
Ġwy gl
Ġwygl Äħda
ש ×Ļ×ŀ×ķש
å¿ĺ ãĤĮ
×¢ ×Ļצ×ķ×ij
ĠاÙĦس ÙĪØ±ÙĬ
å°ij ãģªãģĦ
Ġпо иÑģк
สำ à¸Ļัà¸ģà¸ĩาà¸Ļ
Ġ×ŀצ ×ĵ
Ġmü ÅŁ
ĠmÃ¼ÅŁ ter
ĠmÃ¼ÅŁter i
ĠÙħÙĨ ÙĩÙħ
à¸ķำ à¹ģ
à¸ķำà¹ģ หà¸Ļ
à¸ķำà¹ģหà¸Ļ à¹Īà¸ĩ
ÅĽ mie
Ġש ×ł×ª
Ġ×Ķ ×¤×Ļ
פר ש
×¢×ijר ×Ļת
สà¸Ļ ัà¸ļ
สà¸Ļัà¸ļ สà¸Ļุ
สà¸Ļัà¸ļสà¸Ļุ à¸Ļ
è¨Ģ ãģ£ãģ¦
à¸ģาร à¸Īัà¸Ķ
ĠMo że
из аÑĨии
ứ t
ĠÙĪØ¨ عد
ĠdeÄŁ ild
ĠdeÄŁild ir
Ġת ×ŀ
Ġ×ŀ×ŀ ׳×ķ
話 ãĤĴ
ĠÑĨ ена
Ġth úc
×Ļ×ŀ ×ķף
ĠB áo
ãĤĴ åıĸãĤĬ
å®ī ãģĦ
Ġ×¢×ķש ×Ļ×Ŀ
èĩªåĪĨ ãģĮ
l ée
ãĤĭ ãģ®ãģ§
иÑĢÑĥ еÑĤ
ãģ¦ ãĤĭ
ست ر
ĠاÙĦØŃ ÙĬ
×Ļ׾ ×ķת
Ġ×Ĺ ×ij
ÙĤر Ø£
تÙħ ÙĥÙĨ
س ائÙĦ
prü f
ãģĭ ãģijãģ¦
ĠÑģоб ÑģÑĤвенно
ĠìľĦ íķĺìŬ
׾ ×Ļ×ĺ
ãģĮ å¤ļãģı
ÙĬت Ùĩا
ç«ĭ ãģ¦
ม à¸Ńà¸ļ
ìĭľ ìŀ¥
оÑĢ Ð°
Ġs avaÅŁ
×ĺ×Ļ×ij ×Ļ
×ij ׳×ķ
Ùħا ذا
기 ê°Ħ
ãģªãģ© ãģ§
Ġ×ŀ ת×Ĺ×Ļ׾
Ġnhi á»ħ
Ġnhiá»ħ m
ка ÑĢ
каÑĢ ÑĤ
Ġ׾×Ķ ×©×ª×ŀש
׳ ×Ļ×Ĺ
اد ÙĬØ©
ราย à¸ĩาà¸Ļ
Ġprzy kÅĤad
Ñī ий
ØŃض ÙĪØ±
Ġh ôn
à Ŀ
ת ×ķצ×IJ×ķת
راب ط
Ġb ếp
ĠполÑĥÑĩ и
åĩºä¼ļãģĦ ç³»
à¸Ľà¸¥ à¹Īà¸Ńย
ĠاÙĦØ´ باب
اÙĩ ÙĦ
ä»Ĭ ãģ¾ãģ§
رج ع
ãĤ¶ ãĥ¼
ÙĤ Ùģ
ĠGro ÃŁ
ĠíļĮ ìĽIJ
اج ر
Ġ×ij×ŀ קר×Ķ
Ġseg urança
fü hl
ãģ¦ ãģĦãģı
หม à¸Ń
ĠкоÑĤоÑĢ Ð¾Ð¼
ĠN Äĥm
ĠdÅĤ ugo
ÙħÙĨ ØŃ
ש×ķ ×ķ×Ļ
ĠØ£ÙĬ اÙħ
ส à¸łà¸²à¸ŀ
r zÄħ
شر Ùĥات
ãĤĴ èĢĥãģĪ
д аÑĢ
à¸Ľà¸£à¸° à¸Ĭุม
Ġ×ķ×IJ ×ĸ
i á»ĩn
Ġt ươi
ש ×Ļ×Ĺ
à¸Ń à¹Īà¸Ńà¸Ļ
æĽ¸ ãģĦãģ¦
Ġng ữ
×ij×Ļ×ĺ ×Ĺ
×ij×Ļ×ĺ×Ĺ ×ķף
Ġs ẵ
Ġsẵ n
ì§Ģ ëıĦ
ĠпÑĢ ÐµÐ¿
ĠпÑĢеп аÑĢаÑĤ
Ġна ÑĥÑĩ
ĠÃľ nivers
ĠÃľnivers ites
ĠÃľniversites i
Ġ×Ĵ×ĵ ×ķ׾×Ķ
Ġ×Ķ ×ł×ª
Ġ×Ķ×ł×ª ×ij×¢
ãģ§ãģĤ ãģ£ãģŁ
Ġmies iÄħ
ĠmiesiÄħ c
г ÑĢам
гÑĢам м
Ġبش Ø£ÙĨ
ĠÑħ ÑĢ
×§ ×Ļ×ĵ
×§×Ļ×ĵ ×ķ×Ŀ
Ø´ Ùĥر
Ġ á»ķ
Ġá»ķ n
ãģĮãģĤ ãģ£ãģ¦
ãģķãĤĮ ãģ¾ãģĻ
Ġ×Ĺ ×ķ×ĵ
Ġ×Ĺ×ķ×ĵ ש×Ļ×Ŀ
ÙħÙĪØ§ جÙĩ
ÙħÙĪØ§Ø¬Ùĩ Ø©
أش خاص
ب غ
à¹Ģรียà¸Ļ รูà¹ī
ãģĹãģ¦ ãģĦãģı
Ġs ạn
å¿ħ ãģļ
׳ ×Ļ×Ĵ
׳×Ļ×Ĵ ×ķ×ĵ
باÙĦ غ
׊ש×ŀ
×Ĺש×ŀ ׾
Ġnap raw
Ġnapraw dÄĻ
Ø´Ùĩ اد
×IJ ×ķ×Ķ
×IJ×ķ×Ķ ×ij
и ÑĨÑĭ
Ġ×Ķ ×¨×Ľ×ij
ëŀ ij
Ġת ×¢
Ġ×Ķ ×Ļש
Ġ×Ķ×Ļש ר×IJ
Ġ×Ķ×Ļשר×IJ ׾×Ļ
Ø£ ÙħÙĨ
ÑİÑī аÑı
sk ór
LER İ
Ġ×Ķ×IJ×Ĺר ×ķף
×¢ ׳ק
ĠÙĪ ÙĥÙĦ
ãģĵãģĵ ãģ§
Ġqu án
liÄŁ in
à¸ģà¸İ หมาย
Ø· Ùħ
Ø£ جÙĩ
أجÙĩ زة
ĠEr doÄŁan
ãģ§ ãģĬ
Ġв ÑĢа
ĠвÑĢа Ñĩ
ĠPh ó
à¸Ĭั à¹Īว
à¸Ĭัà¹Īว à¹Ĥม
à¸Ĭัà¹Īวà¹Ĥม à¸ĩ
Ġph úc
×Ļפ ×ķת
×¢×Ļ ×ķף
Ġduż o
ãĥģ ãĥ¼ãĥł
ĠÙĬ Ùİ
Ġзад аÑĩ
Ġ×Ĵ×ij×ķ×Ķ ×Ķ
Ġ׼ ׼׾
лож ен
ét at
Ġng Äĥn
èµ· ãģį
ĠTi ến
ص عب
Ġexperi ência
Ø® Ùħ
à¸ģาร à¸Ĺำà¸ĩาà¸Ļ
س ÙĬد
ĠD á»±
ĠкоÑĤоÑĢ Ð¾Ð³Ð¾
lad ıģı
Ġkh á»ķ
Ġê³Ħ ìĨį
Ñī ик
สà¹Īวà¸Ļ à¸ķัว
з оÑĢ
ÙĨ Ùı
Ġ à¸Ķัà¸ĩ
Ġà¸Ķัà¸ĩ à¸Ļัà¹īà¸Ļ
Ġc ấu
ĠÄij á»ijc
о ÑĦ
ĠاÙĦØ£ عÙħاÙĦ
ãģªãģı ãģ¦ãĤĤ
×ķ׼ ×Ļ×Ŀ
à¹ģ à¸Ľ
ĠB ên
ãĥ¯ ãĥ³
Ġgi ám
ĠÅŀ u
Ġd áng
ع ÙĦÙĬ
à¹Ģà¸ģ ษ
à¹Ģà¸ģษ à¸ķร
ÙĪØ¬ ب
н нÑĭе
ÙĤ ضاء
à¸Ħว à¸ļ
à¸Ħวà¸ļ à¸Ħุ
à¸Ħวà¸ļà¸Ħุ ม
ãģ¤ ãģ¤
ĠVi á»ĩc
×ŀ×ij ×ĺ
ש×Ļת ×ķ×£
Ġв едÑĮ
k aza
kaza ÅĤ
à¸ķำ รวà¸Ī
ãĤ¿ ãĥ«
Ġпов Ñĭ
ĠповÑĭ ÑĪен
ĠS ợ
ĠìĦ¤ ëªħ
ĠÃĩ ünkü
ìĥĿ íĻľ
Ö ¾
ãĤĮ ãģ¦ãģĦãĤĭ
Ġ×ij ר×IJש
ר ×ķ×Ĵ
Ġо ÑĦи
ĠоÑĦи ÑĨиалÑĮн
ĠÑĥ ÑģÑĤанов
ĠÑĥÑģÑĤанов лен
ĠاÙĦÙħ صر
ĠاÙĦÙħصر ÙĬØ©
ĠÐŁÐ¾ ÑįÑĤомÑĥ
ÙĨ صÙģ
ĠÙĪØ§ÙĦ ÙĨ
Ġh Ãłi
à¸Ħ ิ
ĠApr ès
ì³ IJ
à¹Ģà¸ĭ ีย
×ĵ ×ŀ×Ķ
activ ité
à¸Ħิà¸Ķ วà¹Īา
ÑĤ ÑĢен
à¹Ģ ฮ
ãĥı ãĤ¤
ãģĮ å¢ĹãģĪ
ен наÑı
Ġìĺ¤ ëĬĺ
ãĥ¢ ãĥ³
Ġкон еÑĩно
ĠÙħÙĤ ابÙĦ
cl é
Ġh ü
Ġth ẳng
ìłģ ìĿ´
ĠÐIJ лекÑģ
ĠÐIJлекÑģ ан
ĠÐIJлекÑģан дÑĢ
ãĥŀãĥ³ ãĤ·ãĥ§ãĥ³
ãģ²ãģ¨ ãģ¤
ãģª ãģĬ
à¹Ģà¸Īà¹īา à¸Ĥà¸Ńà¸ĩ
ëĵľ 리
ش اء
ĠsaÄŁ lık
ĠÅŁ imdi
×Ļ×IJ ׾
تأ Ø«ÙĬر
أ سب
أسب اب
ĠвÑĭполн ен
л ок
ש ×Ļ×ij×Ķ
Ġl ắm
ĠTr Æ°á»Ľc
Ġ×Ķ×¢ ׾
리 를
ĠÑĢ ÐµÐ¶
ĠÑĢеж им
int é
inté gr
×Ĵ ׳×Ļ
ĠاÙĦØ´ عر
Ġmil hões
Ġpeque ño
ãĤ³ ãĥ¼ãĤ¹
×ķ׼ ×Ĺ
à¹Ģà¸Ĭ à¹īา
شر ÙĤ
Ġh ương
รัà¸IJ à¸ļาล
à¸ģล าย
à¸ģลาย à¹Ģà¸Ľà¹ĩà¸Ļ
Ġпод Ñħод
תש ×ķ×ij×Ķ
ãģıãģª ãģ£ãģ¦
ĠاÙĦØ£Ùħ Ùħ
ĠH á»įc
ĠwspóÅĤ pr
ĠwspóÅĤpr ac
Ñĩ Ñĥв
ÑĩÑĥв ÑģÑĤв
ÃŃst ico
à¹Ģà¸ģ าะ
ìĽ Ģ
Ġназ ад
ãĤĭ ãĤĪãģĨãģ«
ĠС Ш
ĠСШ ÐIJ
м он
ĠAs ÃŃ
×ķר ×Ĵ
полн ен
×ŀס ׾
×ŀ×¡×ľ ×ķ׾
à¹Ģลืà¸Ń à¸Ķ
à¹Ģริà¹Īม à¸ķà¹īà¸Ļ
ĠاÙĦØ¥ Ùħ
ĠاÙĦØ¥Ùħ ارات
צ×Ķ ×¨
ãĥ¡ãĥª ãĥĥãĥĪ
ĠпоÑĤ ом
в из
ĠÙģ ØªØ±Ø©
å¾Į ãģ®
ÐĿ ÐIJ
×ŀס ר
ÙĬر ÙĬ
pr é
Ġte ÅŁek
ĠteÅŁek kür
Ġöd eme
د اÙĨ
ãģ¾ ãģĹãģ¦
缮 ãģ«
ĠÑĤ еÑĩение
l ard
lard ır
à¹Ģรา à¸Īะ
ס פ×Ļ
ĠÙĪÙĥ ذÙĦÙĥ
Ġh át
Ġt á»Ļc
à¸Ħุ ย
Ġb ức
ØŃ ÙĬÙĨ
èģŀ ãģĦãģ¦
Ùħؤ شر
ĠNh ư
Ġмен ее
ละ à¸Ħร
Ñģ ин
ĠÑĢ ÐµÐº
ĠÑĢек л
ĠÑĢекл ам
ĠÙģ ÙĩÙĪ
Ġ׾ ×ĸ
×Ļ׳ ×ķת
ĠÅŁ art
ÑģÑĤав ка
Ġíı¬ íķ¨
ãģ«è¡Į ãģı
ï¼ Ŀ
ĠпозволÑı еÑĤ
Ġת×ķ׼ ׾×ķ
ов ал
صÙĦ Ø©
Ġ׾ש ׳×ķת
ĠÐĺ гÑĢ
ÙħÙĨتج ات
Ġsat Ä±ÅŁ
Ñģ ко
ĠاÙĦØ«ÙĦاث اء
Ġ×Ķ×ĵ×ijר ×Ļ×Ŀ
ãģĹãģ¾ ãģĹãĤĩãģĨ
بÙĤ Ùī
åĬĽ ãĤĴ
ĠÃĩ ok
ãĥģ ãĥ¥
à¹Ģà¸Ĭ ืà¹īà¸Ń
ยุ à¸Ħ
ศา ล
Ġ×§×ķ×ĵ ×Ŀ
×ĸר ×Ļ×Ŀ
ãģ® åł´åIJĪ
ĠìķĬ ìķĺ
ãģĤãĤĬãģ¾ãģĻ ãģĮ
×IJ שר
è¡Į ãģı
ãģ» ãģĭ
æ°Ĺ ãģ«ãģªãĤĭ
й деÑĤ
íķĺìĺĢ ëĭ¤
ستÙħر ار
ĠÐŁÑĢ Ðµ
ĠÑģ боÑĢ
ĠìķĦ 무
ç§ģ ãĤĤ
ع ص
Ġн иÑĩ
ĠниÑĩ его
ĠпÑĢи ем
×§ ×ķ×ŀ
ĠìĪĺ ëıĦ
Ġì ¡´
Ġì¡´ ìŀ¬
ĠØ£ Ø«ÙĨ
ĠأثÙĨ اء
ĠÙĪØ§ÙĦ ØŃ
ãģĮ ãģ§ãģįãĤĭ
Ġת ×Ķ
Ġת×Ķ ×Ļ×Ķ
ר ף
ĠÑģвÑıз и
×Ĵ שת
Ñģп екÑĤ
ס ×ij×Ļ×ij
ס×ij×Ļ×ij ×Ķ
ĠíķĦìļĶ íķľ
ت خصص
Ġж ив
Ġжив оÑĤ
ĠMay ıs
تع ا
تعا ÙĪÙĨ
ĠعÙĨ Ùĩا
ów ki
ĠاÙĦÙģÙĦسطÙĬÙĨ ÙĬ
ãģłãģijãģ§ ãģªãģı
ìĿ¸ ì§Ģ
ĠاÙĦس ÙĪØ¯
ĠاÙĦسÙĪØ¯ اÙĨ
إجراء ات
Ġkö tü
Ġ×Ļ ×ª×¨
×Ĵ ×Ļש×Ķ
Ġצ ×ķר×ļ
รà¸ĸ ย
รà¸ĸย à¸Ļà¸ķà¹Į
Ñħ оÑĤ
Ðł ÐIJ
ÙĪ Ø·ÙĨ
Ġsay ısı
ס ×Ĺר
Ùħ ÙĪÙĦ
ãĤĴæĮģ ãģ£ãģ¦
ع اÙĨ
Ġt á»Ļi
ĠвÑĭ ÑĪе
Ġt ầm
ãĥĪ ãĥ¬
×Ļצ ×ķ
ม ุม
س ÙĪØ¯
ìłĦ ìŀIJ
ãĤµ ãĥŃãĥ³
ìĤ° ìĹħ
ĠоÑģнов ан
Ø® Ù쨶
רצ ×Ķ
بÙĬ ض
×ķÖ ¹
ס×Ļ ×Ļ×¢
Ġש ×IJ×Ļ
ĠاÙĦÙĤر Ø¢ÙĨ
ĠТак же
×ŀש ×ŀ×¢×ķת
س ÙĩÙĦ
Ġ×Ķ ×ł×Ķ
ãĤĴ ãģĹãģ¦ãģĦãĤĭ
×Ļ ×Ļס
×Ķ ×ķ×IJ
ĠB ÃŃ
Ġмал о
ĠëͰëĿ¼ ìĦľ
Ġר ×Ĺ×ij
ãģĮ é«ĺãģĦ
ÙĪ Ø§Ø³
ìĤ ¼
׳ ×¢
ãģ£ ãģ¡ãĤĥ
ĠT üm
à¸Ńีà¸ģ à¸Ķà¹īวย
ãģĹãģ¦ ãģıãģłãģķãģĦ
ÙĨØ´ اط
ãĥĹ ãĥ©ãĥ³
али ÑģÑĮ
×ĵ ×ľ×ª
Ġwc zeÅĽ
ĠwczeÅĽ niej
ĠÑįÑĤ им
Ġthá»ĭ t
à¸ļ ัà¸į
à¸ļัà¸į à¸Ĭี
ãģļ ãģ£ãģ¨
ÑĢ Ð¸Ð½
Ġswo jÄħ
íķĺëĬĶ ëį°
Ġë§Įëĵ¤ ìĸ´
تش Ùĥ
تشÙĥ ÙĬÙĦ
ائ Ùĩ
Ġ׾פ ×Ĺ×ķת
ãĥĭ ãĥ¥
ãĥĭãĥ¥ ãĥ¼ãĤ¹
׼×IJ ף
ãģ§ãģį ãģŁ
зв он
Ġsta ÅĤ
×Ĺ×ijר ת×Ļ
ĠØ£ عÙĦÙĨ
à¹ģà¸ļà¸ļ à¸Ļีà¹ī
بد ء
ãĤģ ãģŁ
Ġ×ŀש ×ŀ×¢×ķת
Ġ×ŀש×ŀ×¢×ķת ×Ļ
ör ü
Ġh ạnh
z ähl
ĠL ý
Ġ×ij ×Ķת
Ġ×ij×Ķת ×IJ×Ŀ
б аÑĢ
ì¦ Ī
ä»ĬåĽŀ ãģ®
Ġy ü
Ġyü ks
Ġyüks el
ãĤ½ ãĥ¼
ãģĤ ãĤĮ
ת ׾×ŀ×Ļ×ĵ
ãģ¤ ãģª
×ij ׳×Ļ×Ŀ
Ġx ếp
ĠмÑĥж Ñĩин
ĠاÙĦÙĥ تاب
׼ ×ŀ×ķת
Ġç e
Ġçe ÅŁ
ĠçeÅŁ it
ĠçeÅŁit li
×ĵ ×Ļר×ķת
à¸ļุ à¸į
ĠاÙĦØ¥ ÙĦÙĥ
ĠاÙĦØ¥ÙĦÙĥ ترÙĪ
ĠاÙĦØ¥ÙĦÙĥترÙĪ ÙĨÙĬ
ĠباÙĦØ¥ ض
ĠباÙĦإض اÙ쨩
Ġyö nel
Ġyönel ik
mys ÅĤ
à¸Ķà¹īวย à¸ģาร
à¸ģาร à¸Ĺำ
ов Ñĭм
Ø£ زÙħØ©
æİ¢ ãģĹ
íļ ¨
Ġ×ķ×IJ ×Ŀ
Ġnghi êm
ÑĪ Ð¸Ð½
ка л
Ġcrian ças
èĩªåĪĨ ãģ§
Ġн ай
Ġнай ÑĤи
ĠS á»ij
ĠÃ¶ÄŁrenc iler
ãĥ¶ æľĪ
Ñģ ан
ĠJ á
ĠkonuÅŁ ma
شر ط
ëĪ Ī
ar rière
ضر ÙĪØ±Ø©
ãĥĶ ãĥ³
ע שר
аÑĢ ÑĮ
جÙħ اع
Ġdé co
Ġ×Ļ×Ķ ×ķ×ĵ×Ļ
à¸ŀ ลาà¸Ķ
ĠÙĬ ÙĥÙĨ
Ġج اÙħعة
Ø· بÙĤ
Ġbo ÅŁ
×ķ ×ķ×IJ
×ŀ×ĵ ×¢
×§×ij×ķצ ת
פ ×Ļר
jÄħc ym
ÙħØ´ ا
Ùħشا ÙĥÙĦ
צ פ×ķף
إ ست
×ŀ׼ ר
سÙħ ع
Ġкак ой
ÑĤ воÑĢ
ØŃ ج
Ù쨱 ض
пÑĢав лен
Ġник ак
Ġmi á»ĩ
Ġmiá»ĩ ng
ü ÃŁ
иÑĢов ал
׾ ×ŀ×ķת
次 ãģ®
ÙĦ Ø·
à¸ķ ัà¸Ļ
×Ķ ×ª×Ĺ×Ļ׾
Ġfoto ÄŁ
ĠfotoÄŁ raf
طر ØŃ
à¸Ńà¸Ńà¸ģ à¹Ħà¸Ľ
Ġy ên
Ġп ок
Ġпок Ñĥп
ĠпокÑĥп а
ÑĨ Ñĥ
Ġкомп ÑĮÑİ
ĠкомпÑĮÑİ ÑĤеÑĢ
ĠاÙĦÙĥ رÙĬÙħ
تص Ùħ
تصÙħ ÙĬÙħ
Ġоказ а
Ġzar ówn
Ġzarówn o
ëĮĢ ì¶ľ
ãĤ»ãĥ³ ãĤ¿ãĥ¼
Ġjako ÅĽci
æĤ ©
æĤ© ãģ¿
Ø£ÙĨ ÙĪ
Ø£ÙĨÙĪ Ø§Ø¹
ë¹ ł
Ġìłķ ë§IJ
Ġk ẻ
ĠÑģай ÑĤа
Ġ×Ķ ×¢×¨×ij
Ùĩ ز
pres ión
ĠÑģÑĤ ен
ãģ£ãģ¦ ãĤĭ
Ġhız lı
Ðļ ÐIJ
×ŀשפ ×Ĺת
ĠÙĨ Ùĩا
ĠÙĨÙĩا ÙĬØ©
ãģ¾ ãģĦ
о ÑħÑĢан
ร à¹īà¸Ńย
ล ึà¸ģ
ĠÙĪØ¨ اÙĦ
ãĤĤãģ® ãģĮ
ר׼ ×Ļ×ij
ãĤ¤ ãĥ¤
س ؤ
سؤ اÙĦ
ĠÙĦØ£ÙĨ Ùĩ
ĠkonuÅŁ tu
Ðļ ÑĥпиÑĤÑĮ
Ġש×IJת ×Ķ
ĠÙĪØ§ÙĦ س
Ġmożliwo ÅĽci
Ġpró b
ëĶ °
ãģ© ãĤĮ
ĠÐľ ин
ĠоÑĢганиз м
ãģ«å¯¾ ãģĻãĤĭ
ĠPr é
Ġpriv é
ch è
ãģĦãģŁãģł ãģį
สà¸Ļุ à¸ģ
ajÄħ ce
ĠD zi
ĠDzi ÄĻki
ÅĤat w
r än
rän k
æĿ¥ ãģŁ
Ġ×Ķ×Ļ×Ķ ×ķ×ĵ×Ļ
ãĤ¬ ãĥ¼
ĠÑĢаР´
ĠÑĢад и
к ÑĤив
Ø£ Ùĩد
Ø£Ùĩد اÙģ
ש ×IJ×Ļר
ãģ¦ ãģĦãģªãģĦ
Ġfr üh
Ġок ол
Ġокол о
Ġreg ião
ĠÑĩиÑģ ле
Ġpon iew
Ġponiew aż
ìĦ¼ íĦ°
Ġb ầu
Ġê ·
Ġê· ľ
Ġê·ľ ìłķ
ĠH òa
ĠÑĤ оÑĤ
ãĤĤ å¤ļãģĦ
ĠاÙĦإسÙĦاÙħ ÙĬØ©
ãģĭ ãģĦ
Ñį н
ĠÑĥказ ан
ĠÑĤак ое
ï¼ ³
ëĮĢ íķĻ
Ġgen iÅŁ
ĠاÙĦØ® ÙĬ
ĠاÙĦØ®ÙĬ ارات
ãĤĴè¡Į ãģĨ
ש ×ŀ×Ķ
ĠLÃł m
ÙĪÙĨ ÙĬ
Ġ×IJ ׾×Ļ×ķ
Ä ĺ
à¹Ħมà¹Ī สามารà¸ĸ
人 ãģ¨
بر ز
×Ļס ×ķ×ĵ
×Ĵ ׾×Ļ
ĠÙĬ ÙĨا
ĠÙĬÙĨا ÙĬر
ĠкаÑĢÑĤ ин
Ġt ôn
à¹Ģ à¸ģร
à¸Ħ à¸Ķี
Ġ׾×IJ ×ķר×ļ
ãĤĤãĤī ãģĨ
ãģĭ ãģĭãĤĭ
ани и
Ġara ÅŁtırma
ÙĦاØŃ ظ
ãģĦ ãĤĦ
ĠT Ãłi
Ġ à¸Ļà¸Ńà¸ģà¸Īาà¸ģ
Ġà¸Ļà¸Ńà¸ģà¸Īาà¸ģ à¸Ļีà¹ī
ĠÄIJ ảng
ãģ£ãģ¦ ãģįãģŁ
Ġà¸ĭึà¹Īà¸ĩ à¹Ģà¸Ľà¹ĩà¸Ļ
Ġt ả
Ġmożliwo ÅĽÄĩ
ĠS ản
Ġİ ki
Ġc ắt
س Ø£ÙĦ
Ġbak ım
ش ب
à¸ķ ีà¹ī
à¸ŀ ยาย
à¸ŀยาย าม
สั à¸Ľ
à¸ªà¸±à¸Ľ à¸Ķา
à¸ªà¸±à¸Ľà¸Ķา หà¹Į
ë° Ģ
еÑĢ Ñĭ
Ġc ánh
Ġthu ế
ت بع
ãģ«åħ¥ ãĤĮ
Ñİ ÑģÑĮ
íļĮ ìĿĺ
ç°¡ åį
ç°¡åį ĺ
ç°¡åįĺ ãģ«
Ġtr úc
ĠاÙĦÙĥ ÙĪÙĬ
ĠاÙĦÙĥÙĪÙĬ ت
ãĤıãģij ãģ§ãģĻ
ĠÑģв об
ĠÑģвоб од
ĠÑĥÑĩаÑģÑĤ ник
สิ à¹īà¸Ļ
ĠпÑĢо ÑĦеÑģÑģиона
ĠпÑĢоÑĦеÑģÑģиона лÑĮн
Ñģп оÑĢ
×Ĺ ×ķ×ij×Ķ
Ùħع ÙĨÙī
ĠاÙĦÙģ ØªØ±Ø©
สูà¸ĩ สุà¸Ķ
ãĤı ãģļ
ĠÄij è
ĠÄijè n
æ¯Ķ ãģ¹
า à¸ĺิ
Ġmoż emy
à¹ģ à¸ĭ
à¸Īะ à¹Ħมà¹Ī
Ġs ắp
Ðļ Ðŀ
Ġprá ctica
ÙĪÙĥ اÙĦØ©
è¾¼ ãĤĵãģ§
ológ ica
Ġе Ñī
ĠеÑī Ñij
تع دÙĬÙĦ
ĠØ£ Ùĥد
Ġצר ×Ļ׼
Ġצר×Ļ׼ ×Ļ×Ŀ
Ø« Ùħ
Ġк ÑĢÑĥ
ĠкÑĢÑĥ п
×ij×Ļ×§ ×ķרת
Ġì¡° ê¸Ī
ãģ¨ãģį ãģ¯
Ġb ạc
ĠÑĢаÑģ пол
ĠÑĢаÑģпол ож
ĠÑĢаÑģполож ен
ز ÙĬÙĨ
ĠÐļ ÑĢоме
ĠاÙĦÙĨ ظر
×Ķ ×ķ×ĵ
ĠاÙĦس بت
ã썿ĢĿ ãģĦ
Ġpa ÅĦst
ĠpaÅĦst w
ĠÙĦÙĬ ست
ĠбÑĥд Ñĥ
à¸Ĺัà¸Ļ à¸Ĺี
ร าม
ØŃ صÙĪÙĦ
ãģĹãģ¦ãģıãĤĮ ãĤĭ
ĠاÙĦØ¥ سرائÙĬÙĦ
ĠاÙĦإسرائÙĬÙĦ ÙĬ
ãģĵãĤĮ ãģ¾ãģ§
ìĤ¬ 를
Ġs ürü
à¹Ģว à¸Ńรà¹Į
à¹Ģà¸ĭ à¸Ńรà¹Į
Ġutilis é
ĠÑģиÑģÑĤем а
Ġdw ó
Ġdwó ch
Ġpróp rio
Ġëĵ± ìĿĦ
arr êt
ĠЧ а
×IJ×ŀ ׳×ķת
عار ض
à¹Ģà¸ģม สà¹Į
Ġ׾×Ķ ×ij×Ļף
Ġ׾ ×ij×Ĺ
Ġ׾×ij×Ĺ ×ķר
สา à¸Ĥา
ĠÐľÐ¾Ñģк ве
ب عد
ĠاÙĦÙĤر ار
ĠÄIJ á»ĭa
Ġ×Ĺ ×Ĵ
Ùģ ØªØ±
ÙĪÙĨ Ø©
Ġ×Ķ×ĸ ×IJת
å¸Ĥ ãģ®
ãģ» ãģĹãģĦ
Ġ×ij×¢ ×Ļר
ĠÑĤеп еÑĢÑĮ
ìĬµ ëĭĪê¹Į
à¹Ħม à¹Īว
à¹Ħมà¹Īว à¹Īา
à¹Ħมà¹Īวà¹Īา à¸Īะ
×ŀ ×IJ×Ķ
æĥħ åł±
æĥħåł± ãĤĴ
غ ÙĨ
Ġпо Ñı
ĠпоÑı ви
éģİ ãģĶ
تش غ
تشغ ÙĬÙĦ
в ел
Ġ×Ĺ ×ŀ
ãģ¨ãģªãĤĬ ãģ¾ãģĻ
Ġra ÄŁ
ĠraÄŁ men
ãģĭ ãģ©ãģĨ
ãģĭãģ©ãģĨ ãģĭ
ен ко
ì§Ģ ê³ł
Ġ×IJ׾ ×Ļ×Ķ
ĠØ£ ÙĦ
à¸Īำ หà¸Ļ
à¸Īำหà¸Ļ à¹Īาย
nız ı
Ġ׾ק ×Ĺת
Ø£ ÙĩÙħ
Ø£ÙĩÙħ ÙĬØ©
ت غÙĬر
ש ×Ĺר
ס×ķפ ר
×ĵ ×Ļר
èī¯ ãģĭãģ£ãģŁ
×ŀ׾×Ĺ ×ŀ×Ķ
ÑģÑĤв ие
ÑĤ ÑĢаÑĤ
ĠاÙĦØ£ Ø®
ĠاÙĦأخ ÙĬرة
ĠاÙĦØŃ صÙĪÙĦ
Ġcréd ito
צ ×Ļ×¢
ãĥ¬ ãĥĻãĥ«
بر ÙĬ
ëIJ IJ
ãģł ãģ£ãģ¦
Ġreal tÃł
س Ù쨱
×ķ׳ ×ķ
×Ĵ ×ķ×ĵ
×Ĵ×ķ×ĵ ׾
ฮ า
ãģĹãģ¦ ãģĬãĤĬãģ¾ãģĻ
Ġg Ãł
Ġ׾×ij צע
å¼ķ è¶ĬãģĹ
Ġ×ŀ ×Ļ׾×Ļ
Ġ×ŀ×Ļ׾×Ļ ×ķף
Ùħ در
Ùħدر سة
פ ×ķ×ĺ
à¸Ļà¹īำ มัà¸Ļ
ëģ Ŀ
ع Ùĥس
ĠÙĤ ض
ĠÑĢÑĭ б
خط ط
×ŀ×ķס ×ĵ
Ġ׼׾ ׾×Ļ
ĠкоÑĤоÑĢ Ð¾Ðµ
צ×Ļ ×ķף
ĠмеÑģÑĤ а
ãģĭ ãģ¤
г ÑĢÑĥпп
׾ ×Ļ׾
ת ×ķ×IJר
ë³µ ì§Ģ
à¹ģà¸ľ à¹Īà¸Ļ
Ġ×ij×¢ ת
æĻĤéĸĵ ãĤĴ
ï¼ £
ãģ¨ãģĦãģĨãģĵãģ¨ ãģ§
Ġ׾×Ķ ×§
Ġ׾ ×ĸ×Ķ
ĠìłĢ ëĬĶ
ĠاÙĦØ¥ رÙĩاب
ĠìŀĪëĬĶ ëį°
ĠÑĤ огда
Ġ×Ķ ×¦×Ļ
×ķ׾ ×ĺ
Ġר פ×ķ×IJ×Ļ
ãģĵãģ¨ ãģ§ãģĻ
ĠÄij ÃŃch
ØŃ ÙĬا
Ġ×Ķ×ŀש ×Ĺ×§
ãģľ ãģ²
Ġ×ŀ×IJ פשר
ãģ¿ ãģ¾ãģĹãģŁ
ĠاÙĦØ£ÙħÙĬر ÙĥÙĬ
Ùħج تÙħع
Ġس اب
Ġساب ÙĤ
׼ ×Ļ׾
Ạ¾
ãĥª ãĤ¹ãĥĪ
Ġì ĥ
Ġìĥ Ī
ĠìĥĪ ë¡ľ
ĠìĥĪë¡ľ ìļ´
ĠD á»ĭch
à¹Ģหมาะ สม
ĠاÙĦÙĨ بÙĬ
׾ ׾
ÙĨ ع
Ðĵ лав
Ðĵлав наÑı
Ùħر ض
Ġ×ķ ×ĵ
ت ÙĤÙĬ
تÙĤÙĬ ÙĬÙħ
Ġb ảng
ĠÙģ ÙĤاÙĦ
×¢ ×ŀ×Ļ
д ÑĢа
Ġsu á»ijt
سر عة
Ġc á»Ń
Ġ×Ķ ×Ļ×Ĺ×Ļ×ĵ
سع ÙĬد
à¸Ńา à¸Ĭีà¸ŀ
Ġس ÙĪØ§Ø¡
ãĤ½ ãĥķãĥĪ
Ġл иÑĩно
ĠÐļ оÑĢ
اÙĩ تÙħ
اÙĩتÙħ اÙħ
à¸Ń à¸Ķี
à¸Ńà¸Ķี à¸ķ
ãģIJ ãĤīãģĦ
Ġiht iya
Ġihtiya ç
ãģ¾ãģ§ ãģ®
ìĭľ ìĬ¤
ìĭľìĬ¤ íħľ
ÑĢÑĥ ÑĪ
ãĤĦ ãģ£ãģ±
ãĤĦãģ£ãģ± ãĤĬ
к еÑĢ
Ġ ży
Ġży w
кл он
Ġl ượt
à ¾
да Ñĩи
tür k
غ ÙĪ
ĠигÑĢ Ð¾Ðº
Ġph ê
Ġש ×¢×ľ
ĠاÙĦÙħ دÙĨÙĬ
ĠìŬ룬 ë¶Ħ
ער ×Ļ×Ŀ
Ñħод ÑıÑĤ
Ġx ứ
ÐĹ Ð°
ĠÙģ Ø±Øµ
à¸Īะ à¸Ĺำà¹ĥหà¹ī
íģ ´
×¢ ×ij×ķר
à¹Ģหลà¹Īา à¸Ļีà¹ī
èĢĥãģĪ ãĤĭ
ÑĢ ÐµÑģÑĤ
н нÑĭй
Ġc ầm
دا Ø®ÙĦ
ĠÙħÙĦÙĬ ار
ĠÐIJ л
ĠвÑĢем ен
à¸Ĭà¹Īวย à¹ĥหà¹ī
ר×Ļ ×ķת
ëĵ ¯
飲 ãģ¿
׳ ׾
שת ף
ĠاÙĦسعÙĪØ¯ ÙĬ
u ÃŁ
ìĿ¸ ëį°
ĠìĿ¼ ë°ĺ
ÅĤ ÄĻ
Ġm á»iji
×ŀ ×Ļ׳
ĠاÙĦØ£ Ø·Ù쨧ÙĦ
Ġçı kan
é cole
×§ ×Ļש
×§×Ļש ×ķר
ĠоÑģ ÑĥÑīеÑģÑĤв
ĠоÑģÑĥÑīеÑģÑĤв лÑı
×ij ×IJר
à¹Ħà¸Ľ à¸Ķà¹īวย
Ġ×¢ ×ķ׾×Ķ
à¸ģà¹ĩ à¹Ħมà¹Ī
ãĥ¢ ãĥĩ
ãĥ¢ãĥĩ ãĥ«
تØŃ ÙĪÙĦ
Ġод ного
ת×Ĺ×Ļ׾ ת
Ġت Ø®
Ġch cia
Ġchcia ÅĤ
ãĥIJ ãĥ³
èĢħ ãģ¯
ĠÙħ ØŃÙĦ
Ñģл ож
Ñģлож н
Ġt ÄĻ
Ġçı kt
Ġçıkt ı
ĠC Æ¡
à¹Ħà¸Ķà¹ī à¹Ģลย
ır ken
à¹Ģà¸Ĥà¹īา สูà¹Ī
ÙħØŃ Ùĥ
ÙħØŃÙĥ ÙħØ©
à¸Ħุ à¹īม
à¸Ļà¹Īา à¸Īะ
лÑİ Ð´
де ÑģÑı
деÑģÑı ÑĤ
ĠлÑİб ой
تØŃر ÙĬر
צע ×ĵ
Ġе Ñij
ĠاÙĦØŃ ÙĥÙħ
Ġص باØŃ
à¹Ģà¸ļ à¸Ńรà¹Į
Ġróż nych
ги б
ĠÑģ оÑĤ
ĠÑģоÑĤ ÑĢÑĥд
ĠÑģоÑĤÑĢÑĥд ник
ĠобÑĬ ем
פ ×ĺר
ãģĻãģĶ ãģı
ãģ«éĸ¢ ãģĹãģ¦
в ол
Ø« ÙħاÙĨ
Ġd ần
æĬ ľ
æĬľ ãģij
Ġ×¢ ש
Ġעש ×ķ×Ļ
ס ×ķף
ãģªãģ® ãģ§ãģĻ
ãģ¯ ãģ©ãģĨ
×ŀ×¢ ר×ij
ï¼ °
Ùħ صر
ÙħÙĨ اسب
ÙħÙĨاسب Ø©
ä¸Ĭ ãģ®
×IJ×Ļש ×ķר
ĠìĦ¤ ì¹ĺ
×ŀ×ĵ×Ļ׳ ×ķת
×ŀר ת
ãĤĭ ãģ®ãģĮ
د Ùİ
ĠاÙĦشر Ùĥات
ìĭľ ê°Ħ
ĠÑĢеÑĪ ÐµÐ½Ð¸Ðµ
ãģĻãĤĭ ãģ®ãģ¯
ĠìŀIJìĭł ìĿĺ
׾ ×ŀ×ķ
ãģ¨ãģĵãĤį ãģ§
Ġ×§ צר
Ġmã i
Ġkü ltür
ãĥ©ãĤ¤ ãĥĸ
à¸ľà¸¹à¹ī หà¸įิà¸ĩ
æĻĤéĸĵ ãģĮ
клÑİÑĩ и
diÄŁ iniz
มาà¸ģ à¹Ĩ
تØŃ ÙħÙĦ
Ġh ạt
ãĤ¦ ãĤ£
п ле
×ŀ ׾×IJ
ÅĤ ó
Ġg á»ijc
Ġ×IJ ×ķ×ĵ×ķת
หว าà¸Ļ
ĠاÙĦ ÙĪØ²
ĠاÙĦÙĪØ² راء
ëĵ¤ ê³¼
Ġص ØŃ
ĠصØŃ ÙĬÙ쨩
Ġм м
تد Ø®ÙĦ
Ġpersön lich
Ġز ÙĬ
ĠزÙĬ ادة
ãĤ· ãĤ¢
Ġng ắn
à¸Ħล ิà¸ģ
Ġs ông
Ġtü ket
Ñį ÑĦÑĦ
ÑįÑĦÑĦ екÑĤ
ש ×Ļ×ij
Ġا عت
ت ض
تض ÙħÙĨ
ĠاÙĦÙħØ´ رÙĪØ¹
Ġprodu ção
ĠпÑĢимен Ñı
ни ÑĨÑĭ
주 ëĬĶ
ر Ùı
Ġm Æ¡
Ġhayat ı
ëŁ ½
Ġü cret
Ġyan ında
Ġpr ática
×ij×Ļ×§ ×ķר
Ãľ N
Ñģ оÑĤ
ãĤıãģij ãģ§
Ġдол го
ת ׼×ķ
ĠìķĦ ëĭĮ
ë į°ìĿ´
Ġç iz
Ġcho Äĩ
Ġ×Ķ ×Ļת
Ġ×Ķ×Ļת ר
Ġso át
׼ ×ij×ĵ
à¹Ģล à¹Īา
Ġд еÑĢ
ĠдеÑĢ ÐµÐ²
ãĤĴ åħ¥ãĤĮ
×Ĺ ×ķס
×Ĺ×ķס ר
ج ÙĬÙĨ
t ón
onn é
Ġпол ноÑģÑĤÑĮÑİ
人 ãģŁãģ¡
Ġpr êt
ëł ¸
Ġdéc embre
cı lar
Ġת ת
Ġê²½ìļ° ìĹIJëĬĶ
ÙĪ Ø¹Ø¯
è¦ĭ ãĤĭ
วิ à¸Īัย
ë ¶Ī
ز ÙĪØ§
زÙĪØ§ ج
d ì
ãģ§ãģĻ ãĤĪ
Ġвод о
ĠÙĬ ÙĪØ¬Ø¯
Ñģ оÑģÑĤоÑı
Ðŀ С
ĠÄIJ ó
׊פש
Ġצ ×Ļ×ij×ķר
ĠاÙĦÙĤ Ø·
ĠاÙĦÙĤØ· اع
Ġиме ÑİÑĤ
Ġph áºŃn
×Ľ×¡ פ×Ļ
полн иÑĤелÑĮ
éĻIJ ãĤĬ
ĠÑģ ÑĢав
ĠÑģÑĢав н
ÙħاÙĦ Ùĥ
×ĵר ×ķ×Ŀ
çļĨ ãģķãĤĵ
ØŃÙĤ ÙĤ
à¹ģหล à¹Īà¸ĩ
ĠاÙĦر سÙħÙĬ
оÑĩ ки
×ĺ ×ij×Ĺ
Ġcan lı
Ġ׾ ׾
Ġ׾׾ ×ŀ×ķ×ĵ
×ŀ×ij ×ķ
ת ׼
×ª×Ľ ׳×Ļת
ĠاÙĦÙħ شار
ĠاÙĦÙħشار ÙĥØ©
İ Åŀ
ĠسÙĬ اسÙĬ
в олÑĮ
ĠÑģ пÑĢав
æĿ¥ ãģ¦
פ×ķר ×ķ×Ŀ
สำ à¹Ģรà¹ĩ
สำà¹Ģรà¹ĩ à¸Ī
ĠÅŁ öyle
Ġzosta ÅĤa
ĠH ü
ר ×ķש
د ÙĦÙĬÙĦ
ÑĢи д
ש ף
×ŀ×§ ×ķר
ĠÑĥ Ñĩ
ĠÑĥÑĩ еб
ĠÑį ÑĤа
ков а
à¸ķà¸Ļ à¹Ģà¸Ńà¸ĩ
ÙĨ ÙIJ
à¸Ńีà¸ģ à¸Ħรัà¹īà¸ĩ
ระ à¸ļุ
Ġd ữ
ĠاÙĦØŃ اÙĦÙĬ
׼ ×ķ׼
׼×ķ׼ ×ij
Ġ×ŀ×IJ שר
Ġtr ụ
ÑĤел ем
Ġв ли
Ġвли Ñı
Ġש×IJת ×Ŀ
Ġuw ag
Ġuwag ÄĻ
×ĺ ×Ļת
×IJ ×ĵ×Ŀ
à¸Ķ ุ
Ġ×Ķ×IJ ׾×Ķ
Ġkar Ä±ÅŁ
ĠÄIJ á»iji
да ÑİÑĤ
ãģªãģ® ãģ«
Äħ cych
à¹Ģà¸Ļ à¹īà¸Ļ
ãģĹãģ¦ ãģĹãģ¾ãģĨ
int érieur
ĠfÃŃs ica
ĠÐŁ ол
ãģĹãģ ķ
à¸Ĺำ à¹Ħม
ĠL âm
ĠاÙĦÙħ سÙĦÙħ
ĠاÙĦÙħسÙĦÙħ ÙĬÙĨ
ص ØŃØ©
ìĹ Ħ
à¹Ģà¸Ķà¹ĩ à¸Ķ
ĠÑĥ ÑĩеÑĤ
â Ìģ
Ġب ÙĦا
ĠاÙĦاجتÙħاع ÙĬ
פרס ×Ŀ
ãĥķ ãĥ©
ĠÐļ огда
mie ÅĽci
ĠبÙĬÙĨ Ùħا
Ġ×ŀ×IJ ×ŀר×Ļ×Ŀ
Ġ×ij×IJ ×ĸ×ķר
×ķש ×Ļ×Ŀ
ĠÑģдел а
entr ée
à¹Ģ à¸Ħà¹īา
Ñĥг л
ĠاÙĦÙģ ÙĨÙĬ
ĠÐĴ оÑĤ
à¸Ĺีà¹Ī มา
×ķצ ×Ĵ
ÙĤد رة
Ġëª ©
Ġ목 ìłģ
íıī ê°Ģ
ĠاÙĦØ£ ربع
ĠاÙĦأربع اء
פס ×Ļ×§
ĠÑıвлÑı ÑİÑĤÑģÑı
ب ÙĪÙĨ
ì° ¾
×ŀ×¢ ר׼
×ŀ×¢×¨×Ľ ×ķת
ãĤ· ãĤ§
ĠباÙĦ Ø£
íĸĪ ëįĺ
ĠاÙĦبر ÙĨاÙħج
ĠاÙĦØ£ ØŃد
Ġm Å©
ĠmÅ© i
п аÑĤ
ب ث
ĠÑĨ енÑĭ
Ġ×ijת ׾
è¨Ģ ãĤıãĤĮ
ĠاÙĦÙħ جاÙĦ
ĠìĦ¸ ìĥģ
Ġ×Ĵ ×ķפ
ĠнаÑĪ ÐµÐ¹
Ġкомп аниÑı
б ин
öl ü
×Ļ ×Ļ×ĺ
Ġ×ŀס פ×Ļ×§
ยัà¸ĩ à¸Ħà¸ĩ
ĠЧ и
Ġан ÑĤи
ĠÑģÑĢед и
สà¹Īวà¸Ļ à¹ĥหà¸įà¹Ī
оÑĩ ка
íĬ¹ ë³Ħ
ว à¹Īาà¸ĩ
гоÑĢ Ð¾Ð´
با Ùĥ
à¹Ģส ีà¹Īย
à¹Ģสีà¹Īย à¸ĩ
ãĤĤãĤī ãģĦ
×§ ×ķ×Ŀ
ãģĽ ãģļ
ĠاÙĦÙĤ اÙĩرة
Ġ×ij ׼×ļ
Ùħشار ÙĬع
باØŃ Ø«
Ġпо Ñĩ
ĠпоÑĩ ÑĤи
ĠÑĦоÑĢм а
S İ
Ġ×ŀצ ×Ļ×¢
ล ื
ลื ม
ĠÑĤ еÑĢ
ĠÑĤеÑĢ ÑĢиÑĤоÑĢ
ĠÑĤеÑĢÑĢиÑĤоÑĢ Ð¸Ð¸
Ġв меÑģÑĤ
ĠвмеÑģÑĤ е
dıkl arı
op ération
à¹Ĥ ห
ص دÙĬ
صدÙĬ ÙĤ
íĸī ìłķ
تج ا
تجا ÙĪØ²
Ġsu ç
Ġar ty
Ġarty ku
Ġartyku ÅĤ
ãĤ·ãĥ§ ãĥĥãĥĹ
ש פ
שפ ×Ļ×¢
Ġ×Ķש ×Ļר×ķת
à¹ģà¸ĸ ม
ë¸ Ķ
Ġuk ÅĤad
Ġ×ķ ׼×Ļ
หล าà¸ģ
หลาà¸ģ หลาย
æĸ¹ ãĤĤ
Ġpodr óż
ĠE ÄŁer
Ġком наÑĤ
ĠÑģам ÑĭÑħ
Ġв кÑĥÑģ
б еж
Ġ×ij ×§×ķ
æİĽ ãģij
ãģ¿ ãĤĭãģ¨
ĠiliÅŁ kin
ĠÙĬ عÙħÙĦ
Ġпод аÑĢ
Ġyaz ılı
ãĤĴ å¾Ĺ
Ġwyst ÄĻp
à¸Ĺีà¹Ī à¹ĥà¸Ĭà¹ī
ØŃاد Ø«
ÙĪ ÙĬد
кÑĥ лÑĮÑĤ
кÑĥлÑĮÑĤ ÑĥÑĢ
à¸ģาร à¹ģà¸Ĥà¹Īà¸ĩ
à¸ģารà¹ģà¸Ĥà¹Īà¸ĩ à¸Ĥ
à¸ģารà¹ģà¸Ĥà¹Īà¸ĩà¸Ĥ ัà¸Ļ
ÙħÙĪ Ø¸
ÙħÙĪØ¸ Ùģ
ÙĬÙħ ÙĬ
ãĤĵãģ§ãģĻ ãģĮ
diÄŁ im
diÄŁim iz
ĠÐŁ еÑĢ
ĠÐŁÐµÑĢ Ð²
Ġm ão
ĠÑģ ез
ĠÑģез он
Ġ×Ķ×ŀ ×¢
Ùħ جÙħÙĪØ¹Ø©
ĠинÑĦоÑĢм аÑĨии
i ếc
ã ng
ĠÄij ấy
ãģĶ ç´
ãģĶç´ ¹
ãģĶç´¹ ä»ĭ
Ġad ım
à¹Ħ หล
Ġп ÑĢакÑĤи
ĠпÑĢакÑĤи Ñĩ
ĠпÑĢакÑĤиÑĩ еÑģ
ĠпÑĢакÑĤиÑĩеÑģ ки
ĠاÙĦÙĨ Ù쨳
ĠÑĢабоÑĤ е
ÙĦÙĬ Ùģ
ĠاÙĦجÙĨ ÙĪØ¨
Ġвод Ñĭ
ì¹ Ļ
Ġм иÑĢа
ĠÄij ừng
ĠпÑĢоÑĤив о
ĠÑģÑĤÑĢан Ñĭ
ล ู
ìĤ ¶
kre ÅĽl
Ġbul und
Ġbulund uÄŁu
à¹ģ สà¸Ļ
ãĤ± ãĤ¢
ת×Ĺ ×ķ×ŀ×Ļ
ר׼ ×Ķ
Ġ׾ק ×ķ×Ĺ
Ġ׾ק×ķ×Ĺ ×ķת
Ġ×Ľ×ª ×ķ×ijת
ĠÙĦ ÙĥÙħ
ب شر
Ġr Ãłng
Ġ×ŀ×Ķ ×ŀ
Ġ×IJ×Ĺר ×ķת
Ġб он
Ġбон ÑĥÑģ
ï½ Ĺ
à¹ģ ยà¸ģ
ãģĤãģªãģŁ ãģ®
ĠÑĥÑĩаÑģÑĤ ие
ĠE yl
ĠEyl ül
ĠçalÄ±ÅŁmalar ı
خ طر
ìĿ ½
à¸ģาร à¹ĥà¸Ĭà¹īà¸ĩาà¸Ļ
Ġана лиз
תק ×ij׾
ни ем
Ġİ ns
Ġİns an
ĠبÙĪ Ø§Ø³
ĠبÙĪØ§Ø³ طة
Ġ׳ ×Ľ×ł×¡
Ġ×Ķ×ŀ ×Ļ×ĵ×¢
Ġç o
Ġço ÄŁu
á» ĺ
ĠêµŃ 민
ãĤĤ ãģĦãģĦ
Ġ׼ ׾×Ļ
ĠÑģÑĢед не
g ÅĤo
gÅĤo ÅĽ
Ġneg ó
Ġnegó cio
ĠÑĢ ÐµÐ³Ð¸ÑģÑĤ
ĠÑĢегиÑģÑĤ ÑĢа
ĠÑĢегиÑģÑĤÑĢа ÑĨии
Ġtr á»ĵng
ĠпÑĢ Ñı
ĠпÑĢÑı мо
ëłĪ ìĿ´
Ġk ém
к ле
à¸Ļำ มา
ĠÑĦ ин
ĠÑĦин анÑģ
ĠÑĦинанÑģ ов
Ġki á»ĩm
ยัà¸ĩ à¹Ħ
ยัà¸ĩà¹Ħ à¸ĩ
ย ิà¸ĩ
à¹Ĥ à¸Ľ
ĠполÑĥÑĩ ил
×Ļ×ĸ ×Ŀ
à¹ģละ à¸Ħวาม
Ġво обÑīе
ص ÙĬر
ãĥı ãĥ³
ĠاÙĦÙĤ اد
ĠاÙĦÙĤاد Ùħ
Ġب دÙĪÙĨ
ع ظÙħ
ת ׳×ķ×¢
×ª×ł×ķ×¢ ×Ķ
Ø£ ÙħÙĦ
ãģķ ãģĪ
ÑĤ ем
ÑĤем пеÑĢ
ÑĤемпеÑĢ Ð°ÑĤÑĥÑĢ
Ġ׾ ×Ļצ×ķר
Ġr ÄĻk
ر سÙĦ
ìŀIJ 를
Ġ×Ļצ ×Ļרת
ÙĨ بÙĬ
Ñĩ наÑı
تØŃ ÙĦÙĬÙĦ
Ġм ик
Ġмик ÑĢо
ĠS öz
Ġfor ça
Ñģ он
ĠاÙĦع را
ĠاÙĦعرا ÙĤÙĬ
ĠH á»ĵng
ãģĻãĤĭ ãģŁãĤģãģ«
à¸Ĺีà¹Ī à¸Ńยูà¹Ī
Ġ×ķ×IJ ×£
ص ÙĬد
ĠìķĬ ê³ł
ร ัà¸ĩ
ĠاÙĦت ÙĪØ§ØµÙĦ
à¹Ģม à¸ķร
Ñĥ ÑģÑĤÑĢой
ÑĥÑģÑĤÑĢой ÑģÑĤв
m ıyor
Ġبا سÙħ
Ġ×ķ ׼×ķ
ĠG ül
á» IJ
Ãī tat
غ اÙĦ
Ø¥ ÙĨØ´
Ø¥ÙĨØ´ اء
T İ
à¸Ĥà¹īา ม
Ġtro ch
Ġtroch ÄĻ
إ ص
إص ابة
ĠØ« اÙĨÙĬ
ĠاÙĦص ØŃØ©
Ġ×ĸ×Ķ ×ķ
jÄħ cej
ãĥĢ ãĥ³
ìĿ¸ ìĿ´
Ġв олоÑģ
ëIJĺ ë©´
Ġzak ÅĤad
ãģĻ ãģĵãģ¨
以ä¸Ĭ ãģ®
Ġ×Ķ×ŀ×§ ×ķ×Ŀ
ÙħØ´ اÙĩ
ÙħشاÙĩ دة
Ñĩ ив
ب ش
ย à¹īาย
Ġsür dür
ĠN ẵ
ĠNẵ ng
ĠигÑĢ Ð°ÑĤÑĮ
Ġê·¸ëŁ¬ ë©´
ãĥķ ãĥ«
ล à¹Īะ
Ġtend rá
Ġb Ãły
à¹Ģà¸Ľà¹ĩà¸Ļ à¸ľà¸¹à¹ī
Ġok o
Ġoko ÅĤo
w ÅĤa
wÅĤa ÅĽci
wÅĤaÅĽci w
æĢĿ ãĤı
ĠYa ÅŁ
ĠB á»ĩnh
íı Ń
بÙĬ د
קר ף
à¹Ģศ ร
à¹Ģศร ษ
à¹Ģศรษ à¸IJ
à¹Ģศรษà¸IJ à¸ģิà¸Ī
ĠاÙĦØ£ ÙĪØ±ÙĪ
ĠاÙĦØ£ÙĪØ±ÙĪ Ø¨ÙĬ
fl äche
ä¹Ĺ ãĤĬ
Ġb á»ģn
Ùĩ ب
æľĢ ãĤĤ
Ġsa ç
à¸Ńำ à¹Ģà¸ł
à¸Ńำà¹Ģà¸ł à¸Ń
ĠØ£ ج
ĠاÙĦد اخÙĦ
ĠاÙĦداخÙĦ ÙĬØ©
×ĺ ×ķ×ij
ãĤĤ ãģªãģı
Ġли ÑĨа
à¹ģลà¹īว à¸ģà¹ĩ
×ĸ׼ ×Ļר
Ġqu Ãł
ĠÙĥ ذÙĦÙĥ
صØŃ Ùģ
ĠÃĤ u
ÙĪØ¨ ا
à¹Ģà¸Ľà¸¥à¸µà¹Īยà¸Ļ à¹ģà¸Ľà¸¥
à¹Ģà¸Ľà¸¥à¸µà¹Īยà¸Ļà¹ģà¸Ľà¸¥ à¸ĩ
à¸ķัว à¸Ńยà¹Īาà¸ĩ
Ġráp ida
Ġtas ar
Ġtasar ım
ĠعÙĦÙĬ ÙĩÙħ
ס ×ķ׾
c ılı
cılı k
Ġر غÙħ
ìĭľ íĤ¤
Ġ×IJ׾ ×§
Ġ×IJ׾ק ×ĺר
Ġ×IJ׾ק×ĺר ×ķ׳×Ļ
à¹ģà¸ļ à¹Īà¸ĩ
Ġh ạng
ãģ£ãģ¦ ãģıãĤĮ
ĠÙĨ تÙĬ
ĠÙĨتÙĬ جة
ıkl ı
غ اÙĨ
à¸Ĥà¹īà¸Ń à¸Ħวาม
à¸Ľà¸¥ าย
ĠØ£ Ùħس
à¸Ĺีà¹Ī à¹Ģà¸ģีà¹Īยว
à¸Ĺีà¹Īà¹Ģà¸ģีà¹Īยว à¸Ĥ
à¸Ĺีà¹Īà¹Ģà¸ģีà¹Īยวà¸Ĥ à¹īà¸Ńà¸ĩ
Ġdé fin
Ġdéfin i
ÙģÙĨ اد
ÙģÙĨاد ÙĤ
à¹Ħà¸Ķà¹ī วà¹Īา
ãģªãģĦ ãĤĪãģĨãģ«
Ġpróp ria
ĠPh át
ãĤĦãģĻ ãģı
สวย à¸ĩาม
ê³ł ìļĶ
Ñı еÑĤ
ãģĭãĤĤãģĹãĤĮãģ¾ãģĽãĤĵ ãģĮ
تر جÙħ
ĠкÑĢаÑģ ив
Ġ×ŀ ר×IJש
д еж
ĠÙĬ ÙĪÙĨ
ĠÙĬÙĪÙĨ ÙĬÙĪ
Ñģк оÑĢ
ĠKas ım
ê³Ħ ìķ½
к оÑģ
Ġна ÑĢÑĥ
ĠнаÑĢÑĥ ÑĪен
Ġdu że
acc ès
Ġh á»ĵng
Ġv Å©
ãģĦãģŁ ãģĹãģ¾ãģĻ
Ġ×ĺ ×Ļ
Ġ×ĺ×Ļ ×ķ׾
lıkl arı
Ġqu ê
ëħ¸ ëıĻ
ìķ Ķ
CI ÃĵN
Ġt ắc
press ão
ĠìŀĪ ìľ¼
สิà¸Ĺà¸ĺิ à¹Į
íĥ Ħ
Ġ×Ķ×ŀ ×ŀש׾×Ķ
å¬ī ãģĹãģĦ
ĠÄIJ ặc
ÙĨ زÙĦ
ĠдÑĢÑĥг ой
д ÑĥÑĤ
ìĪ Ļ
Ġth ụ
à¹Ģส ร
à¹Ģสร à¹ĩ
à¹Ģสรà¹ĩ à¸Ī
Ġto plant
Ġtoplant ı
×IJ×ŀ ף
×ķ׾ ת
п омн
Ġyo ÄŁun
ÅĦsk iego
ì° ©
ĠØ« ÙĦاث
ĠØ«ÙĦاث Ø©
Ġl ắng
ë¦ ´
ราà¸Ĭ à¸ģาร
ĠÑģлов а
á» Ĩ
à¸Ķี à¸ģวà¹Īา
ãģĶãģĸ ãģĦãģ¾ãģĻ
Ġд из
Ġдиз айн
fé rence
lıkl ar
ãģªãĤĵ ãģ§ãģĻ
ajÄħ cy
Ġëĭ¤ ìĸij
Ġëĭ¤ìĸij íķľ
×§ ×Ļר
ØŃ ار
ส ูà¹ī
Ġz ro
Ġzro bi
Ġzrobi Äĩ
×ŀ ×Ļ׼×Ķ
à¸Ĭà¹Īวย à¹Ģหลืà¸Ń
ĠÑįÑĤ Ñĥ
ë´ ī
楽 ãģĹãģĦ
س ÙĪØ±
íķĺ ê±°ëĤĺ
Ùħؤ تÙħر
Ġpoc zÄħ
ĠpoczÄħ tk
ĠpoczÄħtk u
Ġع ربÙĬ
اÙĦØ£ ر
اÙĦأر دÙĨ
à¸Ķ ร
Åĵ uvre
ĠÙĪÙĥ اÙĨت
ĠÅĽ redni
خ ضر
Ġch uyến
н ÑĤ
ĠìķĮ ê³ł
Ġv á»Ŀi
Ġ×ij ×Ļ×ĵ×Ļ
×ŀ×ĵ ×ķ×ijר
ÙĪ Ù쨱
ÙĬ Ø¡
׳ ×Ľ×¡
ĠÐĽ а
л он
Ġx ấu
Ùģ ÙĬÙĨ
Ġfé vrier
ĠÐŀ на
ĠV á»ģ
ĠÅŁey ler
ĠполÑĥÑĩ ен
з ад
Ġn ét
à¹Ħà¸Ľ ยัà¸ĩ
×Ĺש×ij ×ķ
à¸ļัà¸Ļ à¸Ĺ
à¸ļัà¸Ļà¸Ĺ ึà¸ģ
Ġgerçek leÅŁ
иÑĩеÑģк ое
ìĪĺ ê°Ģ
ث بت
ãģ¤ ãģ¾ãĤĬ
ĠÑĥÑģловиÑı Ñħ
ëĭ¤ ê°Ģ
ราย à¹Ħà¸Ķà¹ī
׼×IJ ×ij
à¹Ĥà¸Ľà¸£ à¹Ĥม
à¹Ĥà¸Ľà¸£à¹Ĥม à¸Ĭัà¹Īà¸Ļ
j ähr
jähr ige
×§ ׳×Ļ×Ŀ
×ŀ ×ķ×§
×ŀ×ķ×§ ×ĵ
ãģ«è¡Į ãģ£ãģ¦
Ø¢ ÙĦ
вед ение
Ġ׾ ×Ľ×ª×ķ×ij
جÙħ Ùĩ
جÙħÙĩ ÙĪØ±ÙĬØ©
à¸ī à¸ļ
à¸īà¸ļ ัà¸ļ
ĠC òn
à¸ľ สม
ãģªãģ© ãģĮ
×IJ×Ķ ×ij
ĠдейÑģÑĤв иÑı
y ız
à¹Ħมà¹Ī à¹Ģà¸Ħย
ج ÙĪØ²
×Ķ×Ĺ׾×ĺ ×Ķ
f ällt
ãĥĵ ãĤ¸
ãĥĵãĤ¸ ãĥį
ãĥĵãĤ¸ãĥį ãĤ¹
Ġ×IJ ×Ļ׳×Ŀ
ĠнаÑħод иÑĤÑģÑı
Ġdzi ÅĽ
ست Ø·ÙĬع
׾ ×Ļף
Ø® ÙĦاÙģ
Ùĩ ÙIJ
Ġatr ás
íĺ ģ
ãĤĴ ãģĶ
Ġ×Ķ×ŀ ×ķצר
ĠBakan lıģı
ÑİÑī ее
ÙħÙĨ اط
ÙħÙĨاط ÙĤ
Ùģ Ø¯
à¸Ļำ à¹Ħà¸Ľ
Ġв аж
Ġваж но
Ġm ạch
׼ ׳×ķ
بع ث
lan ması
Ġa yr
Ġayr ıl
ìĤ¬ íļĮ
d ÃŃa
p ÅĤyw
اÙħ ÙĬØ©
íĺ ľ
×IJ׳ ×Ĵ׾
×IJ׳×Ĵ׾ ×Ļת
ĠìŀĪëĭ¤ ëĬĶ
Ġس اعة
ĠëĤĺ íĥĢ
b ö
à¸Ħ ัà¸Ļ
ĠdziaÅĤ ania
Ø© Ùĭ
Ġng Å©
׳צ ×Ĺ
ãģ¯ ãģĤãĤĭ
ĠyaÅŁ ında
st ück
car acter
caracter ÃŃsticas
Ġr á»Ńa
ĠÙħختÙĦÙģ Ø©
ãģ«ãģĬ ãģijãĤĭ
à¹ģà¸ŀ à¸ĩ
วิ à¹Īà¸ĩ
ת פ×ķ
سا ÙĩÙħ
使 ãģĨ
Ùĥ رÙĬ
×IJ פ×Ļ
........ .......
ĠÑĤак им
×Ļ׼ ×ķ×Ļ
Ø´ بÙĩ
ج ÙĬر
ãģĿãģ® ãģ¾ãģ¾
ac jÄĻ
ĠاÙĦت رÙĥ
ĠاÙĦترÙĥ ÙĬ
ĠпÑĢав илÑĮно
Ġت عÙħÙĦ
à¸ģล à¹īา
Ġbi ên
Ġ×ij׳×Ļ ×Ļת
Ġкл Ñĥб
Ġ×ŀ ש×Ķ
в ÑĪий
ãģĵãģ¨ãģĮãģ§ãģį ãĤĭ
à¸ŀัà¸Ļà¸ĺ ุ
à¸ŀัà¸Ļà¸ĺุ à¹Į
ר ×ķ×Ŀ
ĠاÙĦÙģ Ø±ÙĨ
ĠاÙĦÙ쨱ÙĨ سÙĬ
à¹Ģà¸Ľà¹ĩà¸Ļ à¸Ħà¸Ļ
ãģĹãģ¦ ãģĬãĤĬ
Ġth ầy
ãĤĵ ãģłãģijãģ©
ìĶ ¨
Ùħ دÙĨ
ت ÙĪÙĨ
ĠмеÑĤ ал
ĠмеÑĤал л
Ġin ÃŃcio
à¸Ńà¸Ńà¸ģ à¸Īาà¸ģ
ëĴ ¤
Ġcu á»ijn
Ġbu á»Ļc
ÙĨ سÙĬ
ä cht
×ŀ ×Ļ׳×Ļ×Ŀ
ãģķ ãģ¦
ãģĮ ãģ§ãģį
ÑĬ ем
Ġtá i
ĠЧ ÑĤ
ĠЧÑĤ обÑĭ
à¸Ľà¸¥ ูà¸ģ
à¸Ĭุม à¸Ĭà¸Ļ
н Ñģкий
Ġv ững
Ġ×Ķ ×ľ×ij
ë le
Ġש ×¢×ijר
в аÑĤÑĮÑģÑı
б ой
ع ÙĪÙĨ
à¹ģà¸Ķ à¸Ļ
Ġספר ×Ļ×Ŀ
Ġt uyên
Ġnhi êu
ĠQu ý
Ġh uyết
ãĤı ãģĭãĤīãģªãģĦ
Ġ×ŀ ׼ף
Ġ×Ķ ×§×ľ
Ġ׾×IJ ×ķר
ĠÄIJi á»ĩn
ش ؤ
شؤ ÙĪÙĨ
Ġ×ŀ׊פש
ĠпоÑģÑĤоÑıн но
×ŀ ×Ļר
ìħ Ķ
Ðŀ Ñģ
ÐŀÑģ нов
×ĸ ×Ļת
ĠH á
ĠÑĩаÑģ ов
×IJ ×ķ׾×Ļ
Ġm át
Ø® رÙĪ
خرÙĪ Ø¬
ÙĤ ضا
ÙĤضا ÙĬا
à¹Ģà¸Ľ à¸Ńรà¹Į
ĠÙĬ ÙĪÙĦ
ĠÙĬÙĪÙĦ ÙĬÙĪ
à¹Ĥà¸Ĺ ษ
׳ פ׾
ת ×ķש
ת×ķש ×ij×Ļ
Ġv ários
×ŀ ר×IJ×Ķ
ëĿ¼ ìĿ´
ÙĨ غ
×ij צע
г он
ĠÄIJ ược
ع Ùı
пÑĥÑģ к
ĠÙĪØ§ÙĦ Ùģ
üc ü
×Ļ×§ ×Ļ×Ŀ
Ġس بÙĬÙĦ
׾×ij ף
ĠاÙĦÙĤ رÙĨ
ס ×ķת
ĠQu áºŃn
ãģĵãĤĮ ãģĮ
ãĥĸ ãĥ©ãĥ³ãĥī
×Ĵ ×ŀר
Ġwarto ÅĽci
ĠÙĪØ¨ ÙĬÙĨ
Ġd ạ
ÐIJ в
ÐIJв ÑĤо
Ġol acaktır
à¸Ļ à¸Ĺà¹Į
Ùħ طار
Ġ×¢ ×§×ij
Ġת פ
ãģĹãģ¦ ãģĦãģ¦
צ ×ŀ×Ĺ
à¸Ī à¸Ńà¸ĩ
Ġö de
ìį ¨
ÙĨ اس
調 ãģ¹
ĠогÑĢ Ð¾Ð¼Ð½
ë³´ íĹĺ
×ĺ ×§
×ĺ×§ ס×ĺ
ĠbaÅŁ v
ĠbaÅŁv uru
Ġpom ys
Ġpomys ÅĤ
ãģ« ä¹Ĺ
Ġש ׼ף
ĠاÙĦÙħس ؤÙĪÙĦ
Ġз ан
Ġзан ÑıÑĤ
Ġd ương
ãĥĹãĥ¬ ãĤ¤
ล à¸ļ
ÑĤи ка
ĠAr alık
Ġнед о
Ġm á»Ļ
Ġor an
Ġoran ı
Ġktó r
Ġktór Äħ
Ġ×Ķ×IJ×Ĺר ×ķ׳×ķת
ائ ÙĨ
ÅĦ s
ÅĦs ka
åĽ½ ãģ®
×ŀ ×ĺ×Ļ
ĠвопÑĢоÑģ Ñĭ
à¸Ńà¸ĩà¸Ħà¹Į à¸ģร
×ŀ ×ķצ×IJ
Ġpó ź
Ġpóź niej
ש×ŀ ×IJ׾
Ġk aps
Ġkaps am
Ġkapsam ında
Ġmá quina
ĠÅĽwie cie
Ġho Ãłng
Ġöz gü
×Ĵ×ķר ×Ŀ
ãģĤ ãģŁãĤĬ
à¸ķัà¸Ķ สิà¸Ļ
à¸ķัà¸Ķสิà¸Ļ à¹ĥà¸Ī
б ÑĢи
ãģ«ãģªãĤĭ ãģ¨
ت ÙĥÙĪÙĨ
Ġ×ķ×Ķ ×Ļ×IJ
Ġchi ếu
ÑģÑĤан ав
ÑģÑĤанав ли
ÑģÑĤанавли ва
×ŀ ×ķ×Ĵ
c ité
ĠK örper
Ġש ×Ĵ×Ŀ
ع ظ
عظ ÙĬÙħ
Ġ×Ķ×IJ ×Ļש×Ļ
Ġmat ière
ĠÙģ ÙĪÙĤ
Ġk to
Ġkto ÅĽ
à¸Ļ à¹Ĥย
à¸Ļà¹Ĥย à¸ļาย
å¾ħ ãģ¡
à¹Ģม à¸Ļ
à¹Ģมà¸Ļ ู
A ÃĩÃĥO
Ġt ù
Ġtù y
ãĥĪ ãĥ³
ĠоÑĤ каз
Ġ×ŀ ×ķצר
ül ü
ãģķãĤĵ ãģ«
Ġ×Ĺ ×ķ×ij
קר ×Ļ×IJ×Ķ
ĠاÙĦØ® دÙħات
ĠÙĦÙħ دة
ر ؤ
رؤ ÙĬØ©
ãĤĴè¦ĭ ãģ¤ãģij
à¸Ł า
Ġréuss i
à¸Ļัà¸ģ à¹Ģรียà¸Ļ
ĠÑĩиÑģ л
à¸ģาร à¹Ģลà¹Īà¸Ļ
Ġhaz ırl
Ġhazırl an
ĠпеÑĢв Ñĭй
ли м
ĠоÑĤзÑĭв Ñĭ
Ġwy jÄħ
ĠwyjÄħ tk
ĠØ£ ÙĤÙĦ
ס ×ļ
Ġê²° ìłķ
Ġ׾×ŀ×¢ ש×Ķ
Ġl ắp
à¹ģà¸ļ ร
à¹ģà¸ļร à¸Ļà¸Ķà¹Į
วà¹Īา à¹Ģà¸Ľà¹ĩà¸Ļ
Ġب دا
Ġبدا ÙĬØ©
ãģ¨ãģĦãģĨ ãģ®ãģĮ
иÑĩеÑģк им
à¸ģาร à¸ŀัà¸Ĵà¸Ļา
Ġb Ãło
Ġmia ÅĤa
y waÄĩ
ĠMär z
ĠÙĨ سبة
Ġéconom ique
×ĸ ×ŀ
×ĸ×ŀ ׳×Ļ×Ŀ
æŃ¢ ãĤģ
Ġt á»§
íķĺ ìĭł
Ġkażde go
stra ÃŁe
à¸Ĭ ีà¹ī
à¹Ģ à¸ļา
ÑĢеÑģ ÑĥÑĢÑģ
ев ой
ش باب
à¸ķà¹Īาà¸ĩ à¸Ľà¸£à¸°à¹Ģà¸Ĺศ
Ġ×IJ ×Ļש
Ġ×IJ×Ļש ×Ļת
×Ļ ×ķפ
×Ļ×ķפ ×Ļ
ĠìļĶ êµ¬
ì¡° ìĤ¬
ãģ£ãģŁ ãĤī
׾ ×Ļ×§
миниÑģÑĤ ÑĢ
ãĤĤãģ® ãģ¯
Ġl ương
Ġна и
Ġнаи бол
Ġнаибол ее
íİ ĺ
à¹ģà¸ŀ à¹ī
ãĤŃ ãĥ¥
ĠкоÑĤоÑĢ Ñĭм
à¹ģà¸Ĺ à¸ĩ
à¹ģà¸Ĺà¸ĩ à¸ļà¸Ńล
Ġ׳ ×Ļ×Ķ
Ġ׳×Ļ×Ķ ×ķ׾
âĤ ª
ĠGi ải
ĠиÑģполÑĮзов а
ëł¥ ìĿĦ
ãģĹãģĭ ãĤĤ
à¸ģà¹ĩ à¸ķà¹īà¸Ńà¸ĩ
ĠÑĢ ÐµÐ±
ĠÑĢеб ен
ĠÑĢебен ка
ت ÙĪØ§ØµÙĦ
ãĤ°ãĥ« ãĥ¼ãĥĹ
ãĤĦ ãĤī
à¹Ģà¸Ľà¸´à¸Ķ à¸ķัว
б ÑĢо
ë°ĸ ìĹIJ
ÙĨ ÙİØ§
×Ķ ×Ĵ
×Ķ×Ĵ ׳×Ķ
à¸Ĺ รั
à¸Ĺรั à¸ŀ
à¸Ĺรัà¸ŀ ยà¹Į
Ġkh á»iji
עצ ×ŀ×ķ
бол езн
Ġë°Ľ ìķĦ
ม à¸Ļ
มà¸Ļ ุ
มà¸Ļุ ษ
มà¸Ļุษ ยà¹Į
âĹ Ĩ
×ŀ צ׾×Ļ×Ĺ
Ñıв ление
Ùħ Ø·ÙĦ
ÙħØ·ÙĦ ÙĪØ¨
Ø® اÙĦÙģ
ت ÙĪÙĤÙģ
ãģ§ãģį ãģ¾ãģĽãĤĵ
оÑģÑĤ ей
м еÑĩа
기 ëĬĶ
תש ע
ص ÙĬب
Ġ×ij×¢ ×ķ×ĵ
à¸Ĥà¸Ńà¸ĩ à¹Ģà¸Ĥา
ÑĤÑı ж
ĠÑĥ пÑĢав
ĠÑĥпÑĢав лениÑı
Ġgén ér
Ġth ÃŃ
פ ×ļ
Ġر Ùħض
ĠرÙħض اÙĨ
Ġtr uyá»ĩn
إ عداد
ãĤµ ãĥĿãĥ¼ãĥĪ
Ġпол но
Ø® اÙħ
ÐŁ еÑĤ
ÐŁÐµÑĤ еÑĢ
ÐŁÐµÑĤеÑĢ Ð±ÑĥÑĢ
ÐŁÐµÑĤеÑĢбÑĥÑĢ Ð³
ÙħÙĨت دÙī
ãģķãĤĮ ãģ¾ãģĹãģŁ
ĠëĮĢ íķĺìŬ
à¸ľà¸¹à¹ī à¸Ĺีà¹Ī
Ġ×ŀ×IJ ×ķ
׾ ׳×ĵ
оÑĩ нÑĭе
ĠнаÑĩ ала
Ġ׾ ×Ļ׾×ĵ×Ļ×Ŀ
ов ое
ãģĻãĤĭãģĵãģ¨ ãģ§
ĠاÙĦÙĨ Ùģ
ĠاÙĦÙĨÙģ Ø·
ìŀĪ ëĬĶ
غ ÙĨÙĬ
פ ×ĵ
ãĤ ¾
ĠCr é
ãģ© ãģ¡ãĤī
Ø« اÙĨ
ÑĢаб аÑĤ
ÑĢабаÑĤ Ñĭва
Ġê°Ļ ëĭ¤
à¸Ī ั
à¸Īั à¸ģร
Ġch ụ
Ġchụ p
Ġм аÑģÑĤ
ĠмаÑģÑĤ еÑĢ
Ġn ắm
ĠÑģÑĤ али
Ġ×Ķ×IJ ×Ļר×ķ×¢
ãĤ½ ãĥ³
åĪĨ ãģĭãĤĬ
ط بع
بد ا
gr áfico
г еÑĢ
à¸Ķำà¹Ģà¸Ļิà¸Ļ à¸ģาร
Ġsal dır
Ġsaldır ı
в ÑĪиÑħ
ãģĭãģ£ãģŁ ãģ§ãģĻ
Ġyapı yor
ĠاÙĦÙģ Øª
צר פת
з доÑĢов
×ij×¢ ׾
Ġ×IJ ×ŀ×Ļת×Ļ
Ġоб Ñĭ
ĠобÑĭ Ñĩ
ĠобÑĭÑĩ но
Ġ׾ ×ķ×ŀר
ت ÙĥÙĨ
تÙĥÙĨ ÙĪÙĦÙĪØ¬
تÙĥÙĨÙĪÙĦÙĪØ¬ ÙĬا
Ġhakk ı
ĠÑĢаР²
ĠÑĢав но
رÙĬ Ùĥ
Ġ×ij ×ŀ×Ļ×ĵ
Ġ×ij×ŀ×Ļ×ĵ ×Ķ
à¹ģà¸ģ à¹īว
Ġìĸ ĺ
Ġìĸĺ 기
ãģĹãģ¦ ãģĦãģ¾ãģĹãģŁ
Ġkı sm
Ġkısm ı
ê± ¸
åĨħ ãģ®
ì§ ķ
à¹Ģหมืà¸Ńà¸Ļ à¸ģัà¸Ļ
ĠÙģ ÙIJ
ĠÙģÙIJ ÙĬ
ÙĤ اعدة
Ġmoż esz
Ùħ صاÙĦ
ÙħصاÙĦ ØŃ
ãģ¾ãģŁ ãģ¯
б ег
Ġs ıc
Ġsıc ak
Ñĩ иÑģ
ÑĩиÑģ лен
Ġн ог
ãĥģãĥ£ ãĥ³
ãĥ« ãĥī
Ġgi ó
Ġs ını
Ġsını f
ив аÑĤÑĮ
Ġqu ên
Ġì łģ
Ġìłģ ìļ©
ĠJo ão
Ùģ Ø§Ø¯
ĠGl ück
à¸Ĺ à¸Ńà¸Ķ
Ġg ói
ï¼ Ĭ
Ġdé tail
ĠدÙĬ سÙħ
ĠدÙĬسÙħ بر
ë¡ľ ìĦľ
×ŀ ×ķ×Ĺ
à¹Ħ ฮ
ĠоÑĤ д
ĠоÑĤд ÑĭÑħ
Ġkh uyến
à¸Ħ à¸Ńย
Ġج ÙĨÙĬ
ĠجÙĨÙĬ Ùĩ
ĠاÙĦد ÙģØ§Ø¹
à¸Ļà¹īำ หà¸Ļัà¸ģ
ĠìĤ¬ëŀĮ ëĵ¤ìĿ´
Ġth ừa
ĠÃ¶ÄŁrenc i
ĠпомоÑī и
ĠczÄĻ ÅĽÄĩ
ש ×ĺר
ĠN hi
ĠNhi á»ģu
׳ צ×Ļ
ĠнаÑĪ ÐµÐ¼
ĠkarÅŁÄ± laÅŁ
Ġ×Ķש ׳×Ļ×Ŀ
ĠÄIJ ưá»Ŀng
Ġtr ú
ĠÑĢазлиÑĩ нÑĭÑħ
ĠاÙĦØ´ Ùĩر
Ġ×ľ×¢ ×ķ׾×Ŀ
ØŃ جر
ĠÄij á»ķ
ĠìĿĺ íķ´
à¸ļ à¹Īà¸Ńย
Ġ×Ķ ×Ļ׾×ĵ
ãģ¨ãģª ãģ£ãģŁ
Ġ×Ĺ×ķ ×ķת
Ġש×Ļר×ķת ×Ļ
Äħ cy
س رÙĬ
K İ
פ ׳×ķ
ÑģÑĤÑĢÑĥк ÑĤÑĥÑĢ
ÑĤ ÑĢÑĥд
Ġ×Ķ ×§×¨
Ġ×Ķקר ×ķ×ij
Ġth áºŃm
èģŀ ãģį
ÙĤÙĪ ÙĬ
клÑİÑĩ ен
ÑĤе Ñħ
ÑĤеÑħ нолог
è¡Į ãģ£ãģŁ
Ġ×ķ×IJ ×Ļף
ĠÅŁek lin
ĠÅŁeklin de
r ô
ÑĢ Ð¾Ð³
Ġнов Ñĭе
Ġס ×ij×Ļ×ij
Ġtecn ologÃŃa
ס ׼
×¡×Ľ ×ķ×Ŀ
ĠÅŀ ub
ĠÅŀub at
Ġ×Ķ×ŀ ׾×IJ
Ġwy pos
Ġwypos aż
ãģ¯ ä½ķ
ãĤ¬ ãĥ³
ê° ĸ
Ġкак ие
Ġçocuk lar
Ġ׾צ ×ĵ
Ġkay ıt
ĠмеÑģÑĤ е
Ùħ دÙĬÙĨØ©
Ġ׼ ×Ĵ
Ġ׼×Ĵ ×ķף
ãģĹãģ¦ ãĤĭ
ĠÙħا ÙĬÙĪ
ãģ£ãģ¦ãģĹãģ¾ ãģ£ãģŁ
ĠпÑĢогÑĢамм Ñĭ
à¹ģล à¸Ļà¸Ķà¹Į
ãĥ¯ ãĤ¤
ער ×ķ×¥
Ñģ ид
ĠB öyle
Ġì²ĺ ìĿĮ
Ġת פק×Ļ×ĵ
ĠTr ên
íĥ Ī
ĠÐłÐ¾ÑģÑģ ий
ĠÐłÐ¾ÑģÑģий Ñģкой
Ġs Ãłn
Ġrè gle
ĠyaklaÅŁ ık
à¹Ģล ิà¸ģ
Ġد ائÙħ
Ġ×ķ ×Ĵ
اب ر
Ġb è
ĠاÙĦ ÙĤدÙħ
ĠÑĢеÑĪ ÐµÐ½Ð¸Ñı
hi ên
ÑĤи к
Ä Ħ
à¸ļรร ยาà¸ģ
à¸ļรรยาà¸ģ าศ
רצ ×ķף
åĭķ ãģį
ĠGä ste
Ġ기 본
ĠÙĬ عرÙģ
ĠS á»Ń
gÅĤ ÄĻb
à¹Ģà¸Ń ส
×IJ×ŀ ×Ļף
Ġп Ñĥнк
ĠпÑĥнк ÑĤ
Ġ×Ļ×ķ×ĵ ×¢×Ļ×Ŀ
ãĤ« ãĥ©ãĥ¼
Ġ×ijס ×ĵר
Ġbu á»ĵn
й ÑĤ
йÑĤ еÑģÑĮ
ãĤĴ æ±ĤãĤģ
Ġ×IJת ׼×Ŀ
Ġ모 르
ظ رÙĪÙģ
Ñĩ еÑģÑĤво
ìĸ´ ìĦľ
Ġод на
Ġkap ı
Ġëħ¸ ëł¥
ĠKü che
ĠاÙĦت Ø´
Ø· ÙĬب
ĠíĬ¹ íŀĪ
ĠвÑĭп ÑĥÑģ
ĠвÑĭпÑĥÑģ к
×ĵ ת×Ļ
Ġu ÄŁ
ĠuÄŁ ra
ائ Ùĩا
Ġtho át
ãģª ãĤĤãģ®
Ñij ÑĢ
기 ê°Ģ
ĠgeliÅŁ me
تØŃ ÙĤ
تØŃÙĤ ÙĤ
Ġоп аÑģ
б ÑĢоÑģ
ห ุ
หุ à¹īà¸Ļ
ì¼ Ģ
ãĤ¹ ãĥŀ
ãĤ¹ãĥŀ ãĥĽ
Ø£ Ù쨱
Ø£Ù쨱 اد
ĠTh á»±c
Ġth ắ
ãĥªãĥ³ ãĤ¯
Ġni á»ģm
ĠHö he
عÙħ ار
ÙĥÙĪØ± ÙĪÙĨ
ÙĥÙĪØ±ÙĪÙĨ ا
ĠÄIJ ến
ĠÑģам ом
ĠÑĤ еле
ĠÄijo án
à¸Ħวามà¸Ħิà¸Ķ à¹Ģหà¹ĩà¸Ļ
Ġд иÑģк
Ø£ Ø·Ù쨧ÙĦ
ม ารà¹Į
à¸Ĺ หาร
à¸Ĺ à¸Ļ
Ġب عÙĬد
ĠاÙĦÙĩ ÙĨد
åĩº ãģĹãģ¦
Ġkar de
Ġkarde ÅŁ
×Ķ×Ļס×ĺ ×ķר
×Ķ×Ļס×ĺ×ķר ×Ļ×Ķ
éģ¸ ãģ³
ع اÙħÙĦ
à¸Ĥ ยาย
Ġtü rl
Ġtürl ü
ĠìĿ¼ ìĿ´
Ġmaté ria
Ġ׼׾ ×ķ×ŀר
ãĥģãĥ£ ãĥ¼
جÙħ اعة
ĠÑģво им
Ø¥ÙĤ اÙħØ©
ä¾ĭ ãģĪãģ°
س اب
آ خر
ÙĤ دÙĬر
×IJ×ŀ ×Ļ
ìĸ »
Ġ׳×ķס פת
ĠÐĴ лад
ĠÐĴлад им
ĠÐĴладим иÑĢ
Ġest ará
ãģĵãģĨ ãģĦãģĨ
ãĤĴ 使ç͍
มา à¸ķร
มาà¸ķร à¸IJาà¸Ļ
ãģ£ãģ ½
Ġn ú
Ġnú i
ย าà¸ĩ
ĠاÙĦج ÙĨس
Ġüst ün
ëľ »
ãĤ» ãĥ«
ãģ¦ãģĦ ãģįãģ¾ãģĻ
Ġ×Ĺ ×ķ×ĸ
Ġ×Ĺ×ķ×ĸ ר
ĠÐĵ лав
à¹Ĥà¸Ĭ à¸Ħ
íı IJ
ÙĨت ظر
Ġ×Ĵ ×ij×Ļ
ع ÙĤب
int ér
intér êt
×ŀ פ×Ĵ
×ŀפ×Ĵ ש
Ġth ù
اÙģ Øª
Ġ×ŀש פ
Ġ×ŀשפ ×ĺ×Ļ
ĠÙħ ÙĪØ§ÙĤع
è¦ ļ
è¦ļ ãģĪ
×ĵ ×Ļף
à¹Ģรืà¹Īà¸Ńà¸ĩ ราว
ãģ¾ ãģĤ
Ġgh ế
иÑĢÑĥ ÑİÑĤ
à¸ģ ว
à¸ģว à¹īาà¸ĩ
Ġпов еÑĢ
ĠповеÑĢ Ñħ
ĠповеÑĢÑħ ноÑģÑĤ
׳ ×ĵר
Ġкон ÑĨе
Ġдолж на
Ġ×Ļש ×Ļר
acaģı z
ìĹ Ķ
Ġn ÃŃvel
Ġö r
Ġör nek
Ùĥ Ùģ
ĠФедеÑĢ Ð°ÑĨии
Ġ구 ìĦ±
หัว à¹ĥà¸Ī
ĠV áºŃy
м ед
мед и
меди ÑĨин
медиÑĨин Ñģк
از ÙĬ
×Ĵ×ij ×ķ׾
ÑĦ ÑĢ
Ġzus ätzlich
à¸ģ à¸ģ
ĠاÙĦاÙĤتصاد ÙĬØ©
Ġh è
lu ÄŁun
ج Ùİ
à¹Ħà¸Ł ลà¹Į
ÄIJ T
ãģĿãģ® ä»ĸ
à¸Ĺิ à¹īà¸ĩ
ĠاÙĦØ£ ÙĪ
ر سÙħ
æ°Ĺ ãģ¥
ìĿ´ ë©°
ÑĮ ев
ص ط
ĠاÙĦاست Ø«
ĠاÙĦاستث Ùħار
à¸Ńา à¸Ħาร
ĠÑĤоÑĩ но
ĠV ân
à¸Ń ร
à¸Ńร à¹Īà¸Ńย
ĠاÙĦس ÙĨØ©
Ġc Æ°á»Ľi
×Ļ×Ķ ×Ł
íį ¼
話 ãģĹ
âĹ ĭ
ĠìķĬ ìĿĢ
ãĥ¡ ãĥ¼ãĤ
ãĥ¡ãĥ¼ãĤ «
ãĥ¡ãĥ¼ãĤ« ãĥ¼
ĠÑĤеп ло
å½¼ ãĤī
Ġİ z
Ġİz mir
íĻ į
Ġr ượ
Ġrượ u
æĢĿãģĦ åĩº
ĠPh ạm
Ġchá u
צ×Ļ ×ķת
ĠìĿ¼ 본
ìĤ¬ ëĬĶ
ĠÑģозд ан
Ġar acı
Ġ×¢ ר
Ġער ×Ļ׼×Ķ
ĠíķĺëĤĺëĭĺ ìĿĺ
dzi ÅĤ
à¸Ľà¸£à¸° à¸ĺาà¸Ļ
Ġser ÃŃa
ĠìŀĪ ëıĦë¡Ŀ
در ج
íķľëĭ¤ ëĬĶ
à¸Ńา à¸Ĺ
à¸Ńาà¸Ĺ ิà¸ķ
à¸Ńาà¸Ĺิà¸ķ ยà¹Į
ÑĤелÑĮ нÑĭй
ĠØ® دÙħات
×ŀ׳ ×ĺ
Ġl ược
ĠS Ãłi
ĠÙĪ Ø§Ø¶
ĠÙĪØ§Ø¶ ØŃ
غ از
ĠdoÄŁ al
Ġ×ijש ×Ŀ
Ġд лин
ĠØ¥ طار
Ġ×ijס פר
ãĤĴ ä¸İ
ãĤĴä¸İ ãģĪ
Ġë²ķ ë¥ł
ĠÑĥ вели
ĠÑĥвели Ñĩи
ส à¹Ħà¸ķ
สà¹Ħà¸ķ ลà¹Į
à¹Ħ à¸ģล
×ij׊ף
ĠìĿ´ íĽĦ
Ġm unic
Ġmunic ÃŃpio
تÙħ Ø«ÙĦ
ĠÄij áo
H ôtel
Ġl á»Ńa
ĠÄij ẳng
Ñĩ ки
Ø´ رÙĪ
شرÙĪ Ø·
ĠìĿ´ 를
ÙĬ Ùĭا
×ŀ׾ ×ļ
×ŀ×Ķ ×Ļר×ķת
ĠобÑıз аÑĤелÑĮ
ĠобÑıзаÑĤелÑĮ но
é nergie
Ġmud ança
Ġm ụ
Ġmụ n
Ġn º
ĠاÙĦت عا
ĠاÙĦتعا ÙĪÙĨ
ĠاÙĦاجتÙħاع ÙĬØ©
Ġп лаÑģÑĤ
Ġëĵ± ìĿĺ
ãĥIJãĤ¤ ãĤ¯
Ùĩج ÙĪÙħ
ĠSa úde
Ġì¤ijìļĶ íķľ
Ġ×Ķצ ×Ļ×ij×ķר
תק ף
ĠاÙĦعاÙĦÙħ ÙĬ
ĠболÑĮÑĪ Ð¾Ð¹
ĠÙĥ ÙĦÙħ
ĠÙĥÙĦÙħ Ø©
ãģ®ãģ§ãģ¯ãģªãģĦ ãģ§ãģĹãĤĩãģĨãģĭ
ĠÙħ باراة
Ġש×IJ ׳
Ġש×IJ׳ ×Ĺ׳×ķ
ãĤ¹ãĤ¿ ãĤ¤ãĥ«
ĠSa ÄŁ
ĠSaÄŁ lık
Ġh ư
׳ ×Ĺ×Ķ
Ġ×ij קר×ij
Ø· عÙħ
ห ิà¸Ļ
à¸Ĺุà¸ģ วัà¸Ļ
à¸Ħรัà¹īà¸ĩ à¸Ĺีà¹Ī
ĠlÃł nh
Ġdonn é
ãģĽ ãģĦ
جز ÙĬرة
доÑĢ Ð¾Ð¶
ì¼ ľ
تÙĨظ ÙĬÙģ
ãĥģ ãĥ§
Ġald ıģı
ج اج
ĠÑĤ омÑĥ
à¸Ľ ิ
Ġ×ijר שת
ãģıãģªãĤĬ ãģ¾ãģĻ
ĠпÑĢин ÑĨип
Ġ׊׾×ķ
ëı ¼
×ķ×Ĵ ש
س س
à¸Ľ ู
Ġh ầu
æĦŁãģĺ ãĤĭ
ï¼ ´
د ÙĪØ§
ĠÑģм ог
scri ção
Ġth áºŃn
Ġר ×ķ×IJ×Ķ
обÑĢаж ен
ĠاÙĦتج ارÙĬØ©
Ø· بÙĬع
jÄħc Äħ
íĸī ìľĦ
Ġнов Ñĭй
Ġ×ŀ ×Ĺ×ĵש
æĮ¯ ãĤĬ
gu é
Ġ×IJ ×Ļר×ķ×¢
Ġ×IJ×Ļר×ķ×¢ ×Ļ×Ŀ
ĠاÙĦ ذÙĩب
×ĵ ×IJ
ت اÙĨ
ãģł ãģĹ
à¸Ńั à¸ķรา
à¹Ĥ à¸Ī
بÙĦ اد
×Ķ×Ļ ×Ļ׳×ķ
ĠÑģп е
ĠÑģпе ÑĨиалÑĮно
ĠÅĽwi ata
ãĤĵãģ§ãģĻ ãĤĪ
شر ÙĥØ©
ĠpÅĤ yt
Ġsitu é
Ġ׼×IJ ׾×Ķ
ס ×ijר
Ġkaż d
Ġkażd ym
ãĤĴæĮģ ãģ¤
׾×Ķ ×ľ
׾×Ķ׾ ף
ĠwÅĤ as
ĠwÅĤas ne
ĠsaÄŁ lan
×ŀ×¢ ׾×Ķ
ĠاÙĦا ÙĪÙĦ
ìĹIJìĦľ ëıĦ
×IJ×Ļר ×ķפ×Ķ
تÙĤ ÙĨÙĬØ©
Ùħ ائ
Ùħائ Ø©
Ġcompañ ÃŃa
Ġsü rek
Ġsürek li
ĠиÑģ кÑĥÑģ
ĠиÑģкÑĥÑģ ÑģÑĤв
ĠB ürger
ת ×Ĺר
ת×Ĺר ×ķת
à¸ŀรà¹īà¸Ńม à¸ģัà¸ļ
Ø´ Ùħ
à¸ĸืà¸Ń วà¹Īา
è¾¼ ãĤĢ
ä¼ij ãģ¿
ĠاÙĦØ£ ب
ĠÑģÑĤоим оÑģÑĤÑĮ
ĠпÑĢав а
may ın
ห วย
ĠاÙĦØ· بÙĬعÙĬ
à¸Ĺีà¹Ī à¸ŀัà¸ģ
ĠEst á
Ñĭва ÑİÑĤ
ب سÙĬ
بسÙĬ Ø·
Ġ×ij×¢ ×ijר
åı¯èĥ½ ãģ§ãģĻ
Ġ×ĵ ×ķ׾
Ġ×ĵ×ķ׾ ר
Ùĩ ÙİØ§
воÑĢ Ð¾ÑĤ
ãģ¦ ãģĦãģ¾ãģĹãģŁ
à¹Ĥà¸Ĺร ศ
à¹Ĥà¸Ĺรศ ั
à¹Ĥà¸Ĺรศั à¸ŀ
à¹Ĥà¸Ĺรศัà¸ŀ à¸Ĺà¹Į
Ġ×§ ׳
ĠاÙĦØ« ÙĨ
ĠاÙĦØ«ÙĨ ائÙĬØ©
Ġco ût
à¸ķิà¸Ķ à¸ķัà¹īà¸ĩ
Ġö rg
Ġörg üt
ĠاÙĦØ® ÙĦÙĬ
ĠاÙĦØ®ÙĦÙĬ ج
Ġb á»įn
×ķ׾×ķ×Ĵ ×Ļ
ëŀ ľ
ĠÐij олÑĮ
ĠÐijолÑĮ ÑĪ
×Ĵ ×ijר×Ļ×Ŀ
ÙĤ ÙĬد
×ij×Ļ×ĺ ×ķ×Ļ
æīĵ ãģ¡
Ġol muÅŁ
f äh
fäh ig
ล าà¸Ļ
ĠÙĤ طر
ש פ×Ķ
èªŃ ãĤĵãģ§
à¸Ĥ วา
Ġchi ếm
ãĤ¤ãĥ³ ãĤ¿
ãĤ¤ãĥ³ãĤ¿ ãĥ¼ãĥ
ãĤ¤ãĥ³ãĤ¿ãĥ¼ãĥ į
ãĤ¤ãĥ³ãĤ¿ãĥ¼ãĥį ãĥĥãĥĪ
Ġ׾ש×ŀ ×ķר
Ġت رÙĥ
ĠترÙĥ ÙĬا
ר ×ķ×ĺ
ã썿ĢĿ ãģĦãģ¾ãģĹãģŁ
ĠاÙĦت ÙĤ
Ġd ư
ãģ¦ãģıãĤĮ ãĤĭ
ãģĹãģŁ ãģĵãģ¨
Ġróż ne
ĠاÙĦØ· ÙģÙĦ
ĠPost é
Ġ×ŀש ×ķ×Ŀ
Ñį ÑĢ
ĠÑĢабоÑĤ аеÑĤ
ãĤ· ãĥª
ãĤ·ãĥª ãĥ¼ãĤº
Ġ×ij×Ķ ×Ĺ׾×ĺ
×§×Ķ ×Ļ׾×Ķ
ãĤ« ãĥ¡
ãĤ«ãĥ¡ ãĥ©
ï¼ ¯
ĠìĤ¬ ìĿ´
Ġk ì
Ġth Æ°á»Ľc
ض بط
ÙĤب ÙĪÙĦ
åĪ¥ ãģ®
Ġparticul ière
ĠÑģво ем
Ġ×¢ סק
Ġעסק ×Ļ×Ŀ
×ij×Ĺ ×Ļר×ķת
×ij ×Ļ׳×ķ
à¸ĭ à¸Ń
Ġ×¢ ×ķ×ijר
ãģłãģ£ãģŁ ãģ®ãģ§
ıld ıģı
Ùħ دار
Ùħدار س
주 ìĭľ
à¸Ńา ศ
à¸Ńาศ ัย
Ġt ấm
à¸ŀิ à¸Ī
à¸ŀิà¸Ī าร
à¸ŀิà¸Īาร à¸ĵา
ÑĤелÑĮ нÑĭе
Ñģк ÑĥÑİ
Ðľ Ðĺ
à¹Ģà¸ģ า
à¹Ģà¸ģา หล
à¹Ģà¸ģาหล ี
×ĵ ×Ĺ
à¹Ģà¸Ĭ ิà¸ĩ
Ġد ÙĤÙĬÙĤØ©
íķĻ ìĥĿ
Ġש×IJ ׾×Ķ
Ġcontr ôle
Ġsit uação
à¸Ĥà¸Ńà¸ĩ à¸ľà¸¹à¹ī
ÙĨ Ø·ÙĤ
ê³¼ íķĻ
หลาย à¸Ħà¸Ļ
Ġn ắng
ÙĤ Ùı
ì¡° ê±´
Ñ ķ
ãĥĥ ãģ¨
×ŀ ×Ļ׾×Ķ
Gr ün
×Ļ ×Ļ×¢
×Ļ×Ļ×¢ ×ķ×¥
×ŀ׳ ׼
ë ŃIJ
×ŀ×¢ ×ŀ×ĵ
สำ à¸Ļัà¸ģ
ج دد
à¸Ħ ัà¸Ķ
Ġ×Ķ×ŀש פ
Ġ×Ķ×ŀשפ ×Ĺ×Ķ
×ŀש ק׾
ÙĦ Ùı
Ġty tu
Ġtytu ÅĤ
ÑĪ ÐµÐ¹
ĠìĿ¼ ë¶Ģ
ÑĪ ÐµÐ½Ð¸Ðµ
Ġph óng
ĠìĹŃ ìĤ¬
ãĤ« ãĥ³
Ġtú i
ĠÙĨ ÙĪÙģ
ĠÙĨÙĪÙģ Ùħبر
gr ün
ĠاÙĦØ´ ÙħاÙĦ
ÅĽwi adc
ÅĽwiadc zenie
ער ×Ķ
Ġ×¢ ×ķ×ij
Ġ×¢×ķ×ij ×ĵ×Ļ×Ŀ
×ĵ×ķ×Ĵ ×ŀ×IJ
ä»Ĭ ãģ¯
Ġv ão
ĠТ ем
Ñģ илÑĮ
Ġch ợ
Ùħ را
Ùħرا ÙĤب
à¹Ħมà¹Ī รูà¹ī
Ġر ائع
×IJ׳ ×Ĺ׳×ķ
สà¹Īà¸ĩ à¹Ģสริม
צ ×Ĺ
ĠìŀĪìĸ´ ìĦľ
Ġkur ulu
Ġkurulu ÅŁ
ĠÃĸ zellik
ĠÃĸzellik le
Ġת ×Ļ×§
Ġgh é
Ġspr zÄĻ
ĠsprzÄĻ t
ער ×ķת
را ØŃØ©
ãģ£ ãģį
ãģ£ãģį ãĤĬ
ĠìķĦ ëŀĺ
stit uição
Ġдолж но
×Ķ ×¨×©
×Ķרש ×ŀ×Ķ
×Ķ׾ ×ļ
ãģ¡ ãģª
ãģ¡ãģª ãģ¿
ãģ¡ãģªãģ¿ ãģ«
פ ×Ĺ×ĵ
ĠاÙĦج ÙħÙĬع
×ij×¢ ׾×Ļ
Ġtr ùng
Ġפ ת×Ĺ
×ŀ׾×Ĺ ×ŀת
ãĥĨ ãĥ¼ãĥ
ãĥĨãĥ¼ãĥ ŀ
Ùħ تاب
Ùħتاب عة
Ġ모 ìĬµ
ÙĬ ص
åIJĪ ãģĨ
ĠY ap
ĠYap ı
ĠÑģ казаÑĤÑĮ
ëª °
à¸Ĺีà¹Ī สำà¸Ħัà¸į
ĠìĹĨ ìĬµëĭĪëĭ¤
Ġnh ắc
Ġülk eler
Ġмног ие
íķĺ ìħ¨
มาà¸ģ à¸Ĺีà¹Īสุà¸Ķ
à¸ģ à¹īา
à¸ģà¹īา ว
Ġİ yi
л еж
леж а
ãĤ¸ ãĥ§
à¸Ĺั à¸ŀ
ا ÙĪØ±
Ġ×Ĺ×ijר ×Ļ
Ġ׾ ש×Ŀ
ì² «
ĠT á»Ń
×ŀ ×ķ׳×Ļ
ÙĤ ÙĪØ¯
à¸ģระ à¹Ģà¸Ľ
à¸ģระà¹Ģà¸Ľ à¹ĭ
à¸ģระà¹Ģà¸Ľà¹ĭ า
ĠпÑĢоблем Ñĭ
Ġaç ıs
Ġaçıs ından
Ġ×Ķ×ŀ ׼
ĠÙħع ظÙħ
ÙĤÙĬ اس
ĠпÑĢод олж
ĠпÑĢодолж а
Ġver diÄŁi
ĠпÑĢед меÑĤ
ãģĦãģ¾ãģĻ ãģĮ
ĠëͰ 른
ĠاÙĦ ÙĤÙĬاÙħ
ĠØ¥ÙĦÙĬ Ùĩا
Т ÐIJ
п оз
ãĤ· ãĥ¥
ä¸ĬãģĮ ãĤĬ
à¹Ģà¸Ķิม à¸ŀัà¸Ļ
à¸ģุ ล
ØŃر ÙĬØ©
×§×ij×ķצ ×ķת
ë¯ ¿
ĠاÙĦÙħ ÙĨا
ĠاÙĦÙħÙĨا Ø·ÙĤ
ĠвÑĭп ол
ĠвÑĭпол нÑı
ãĥĭ ãĤ¢
Ġê²° êµŃ
×Ĺ ×ķ×ŀ
×Ĺ×ķ×ŀ ר×Ļ×Ŀ
ĠУкÑĢа инÑĭ
ห à¸Ńม
ר ×Ļס
ĠÑħоÑĤ ел
ĠобÑĢаз ованиÑı
Ġkh ẳng
Ġm ưa
Ġgör me
Ġgüç lü
سع Ùī
มัà¹Īà¸Ļ à¹ĥà¸Ī
íķĺ ê²łìĬµëĭĪëĭ¤
Ġпол Ñĥ
Ġfün f
ã썿ĢĿ ãģ£ãģ¦ãģĦãģ¾ãģĻ
Ġê·¸ê²ĥ ìĿĢ
ĠdÃ¼ÅŁÃ¼n ce
ìŀ ł
ĠH Æ°á»Ľng
ĠTi á»ĥu
Ġç ift
ãģij ãģ°
à¸Īà¸Ļ à¸ĸึà¸ĩ
à¸Ĺำ à¹Ħà¸Ķà¹ī
ĠìŀIJ ì²´
Ġd õ
Ġdõ i
à¸Ī ัà¸Ļ
à¸Īัà¸Ļ à¸Ĺ
à¸Īัà¸Ļà¸Ĺ รà¹Į
ece ÄŁini
׳×ķ×¢ ר
غ ار
ĠاÙĦØ£ÙħرÙĬ ÙĥÙĬ
داع ش
ĠбезопаÑģ ноÑģÑĤи
Ġб Ñİ
ĠбÑİ Ð´Ð¶
ĠбÑİдж еÑĤ
ãĥĬ ãĤ¤
à¸ŀà¸ļ วà¹Īา
da ÄŁ
×IJ ×ķפף
íĹ Į
ãĥĢãĤ¤ ãĤ¨
ãĥĢãĤ¤ãĤ¨ ãĥĥãĥĪ
ĠëĮĢ íĨµ
ĠëĮĢíĨµ ëł¹
D İ
Ø£ ØŃداث
ĠA ÄŁ
ĠAÄŁ ust
ĠAÄŁust os
ØŃÙĦ ÙĪÙĦ
Ġw ÅĽ
ĠwÅĽ ród
ĠÑģо оÑĤвеÑĤ
ĠÑģооÑĤвеÑĤ ÑģÑĤв
ĠÑģооÑĤвеÑĤÑģÑĤв ии
ĠLu áºŃt
Ġ׼׾ פ×Ļ
Ġв еÑī
ĠвеÑī еÑģÑĤв
×§ ×Ļ×¥
ĠبÙĩ ذا
عا ش
à¹Ģà¸Ľà¹ĩà¸Ļ à¹Ģรืà¹Īà¸Ńà¸ĩ
Т Ðķ
Ġ×ij×IJ ×Ļ׳×ĺר׳×ĺ
س عد
Ġ×Ķ×ĺ ×Ļפ×ķ׾
פ ×Ļס
à¸ĩà¹Īาย à¹Ĩ
ĠGer ät
׾ ×Ļ×ĵ×Ķ
ĠÑĢ Ð¸Ñģк
׾ק ×Ĺ
н наÑı
ר ×Ļ×ĵ
п ÑĢакÑĤи
пÑĢакÑĤи к
à¸Ĥัà¹īà¸Ļ à¸ķà¸Ńà¸Ļ
à¸Ļà¹Īา รัà¸ģ
larınız ı
à¸Ńà¸Ļุ à¸įา
à¸Ńà¸Ļุà¸įา à¸ķ
ĠzdjÄĻ cia
Ġb ây
Ñģ ÑĢ
ÑģÑĢ Ð¾Ñĩ
ãĥĭ ãĥ³ãĤ°
Ġö ner
Ġöner i
Ġнов ÑĭÑħ
دع ÙĪØ©
Ġg ắn
ĠاÙĦÙĦ بÙĨ
ĠاÙĦÙĦبÙĨ اÙĨÙĬ
ãĥĨãĤ£ ãĥ¼
Ġص ØŃÙĬØŃ
ем ÑĭÑħ
çĸ² ãĤĮ
ĠпÑĢо иÑģ
ĠпÑĢоиÑģ ÑħодиÑĤ
ส à¸ķิ
ĠT ết
Ġ×Ķ׾ ׾×ķ
à¹Ģรืà¹Īà¸Ńà¸ĩ à¸Ļีà¹ī
×ŀ×ij ׳×Ķ
Ġconte údo
Ġا خت
Ġاخت ÙĬار
Ùħ سÙĦ
ÙħسÙĦ سÙĦ
ëı Ī
Ġ׾ ×Ļ×ĵ
à¸ŀิ à¸ĺี
ĠÑģов Ñģ
ĠÑģовÑģ ем
ãģĮãģĤãĤĬ ãģ¾ãģĹãģŁ
Ġsó ng
Ø¥ صÙĦاØŃ
ë§ ģ
Ùģ ÙĬر
ĠJe żeli
ìłľ ëıĦ
d ÅĤug
ìĥģ ìĿĦ
Ġc áºŃn
Ġhá»į p
أ ست
أست اذ
Ġ×ŀ ×Ļש×Ķ
Ġ×ŀ×Ļש×Ķ ×ķ
Ġd Ãły
Ġch Ãłng
ãģ¡ãĤĥãĤĵ ãģ¨
ĠÄij ám
Ġsw ój
Ġpoder á
ĠоÑĤлиÑĩ а
Ġpéri ode
ünd ig
×ĺ×¢ ף
ÑģÑĤÑĢо иÑĤелÑĮ
ר ת×Ļ
Ġ×Ļ×Ķ ×Ļ×ķ
׾ ס
ĠاÙĦÙħÙĨ زÙĦ
à¸Ļิ à¹īว
иÑĦ ика
иÑĦика ÑĨи
ðŁĺ ī
Ġad ına
ãĢĤãĢĤ ãĢĤ
×IJ ×Ļף
ס ×Ļר
ĠÙĬ عد
çŃĶ ãģĪ
اÙĦ جز
اÙĦجز ائر
енÑĮ к
ร ห
รห ัส
ĠTürk çe
ê¾ ¸
Ġ×Ļ ×ķ׼׾
Ġש ×ķ׳×Ķ
Ġ×ij×ŀ צ×ij
ĠдейÑģÑĤв иÑĤелÑĮно
ĠبأÙĨ Ùĩ
×ŀ×§ ×ĵ
Ġ×Ķש ×§
Ø®ÙĬ ارات
Ġf ı
Ġfı rs
Ġfırs at
ëij ĺ
ĠìĦľ ìļ¸
Ġ×Ķ×Ĵ ×ķ×£
ر عا
رعا ÙĬØ©
ĠK ết
к Ñģи
ĠÑĥÑģлÑĥг и
ноÑģÑĤ ей
ìļ´ ëıĻ
ĠобÑĬ Ñı
ĠобÑĬÑı вл
н еж
×Ķפ ×ļ
Ġ×ij×¢ ×Ļ׳×Ļ
ëĨ Ĵ
ĠпÑĢоÑĨ ед
ĠпÑĢоÑĨед ÑĥÑĢ
Ġiht iy
Ġihtiy acı
Ġë°Ķ ëŀį
Ġë°Ķëŀį ëĭĪëĭ¤
à¸ģล ัว
ĠÑģл ожно
×§×Ļ ×Ļ×ŀת
ĠÄIJ ình
ĠÙħ ÙĦÙģ
Ġà¹Ĥà¸Ķย มี
Ġkat kı
تØŃ ÙĪÙĬÙĦ
à¹Ħ à¸ŀ
ĠH á»į
ñ e
Ġдо Ñħод
Ġtho ải
íķĺìŬ ìķ¼
ãĤ¹ãĥĿ ãĥ¼ãĥ
ãĤ¹ãĥĿãĥ¼ãĥ Ħ
ĠG òn
Ġk è
Ġkè m
é̲ ãĤģ
ãĤ¹ ãĥ¼ãĥ
ãĤ¹ãĥ¼ãĥ ij
ãĤ¹ãĥ¼ãĥij ãĥ¼
ĠgiÃł u
ĠØ¥ عادة
Ġ׾ ×ķ×§
Ġ׾×ķ×§ ×Ĺ
ĠÑħоÑĩ еÑĤ
×ĺ ׾×ķ×ķ
×ĺ׾×ķ×ķ ×Ļ×ĸ
×ĺ׾×ķ×ķ×Ļ×ĸ ×Ļ×Ķ
Ġth uyết
ãģĿãĤĮ ãģ§
Ġvard ı
à¹Ħร à¹ī
ع بد
ĠRep ública
ãĥ¼ãĤ¿ ãĥ¼
Ġ×ŀ×IJ ×ķת
à¹Ħà¸Ľ à¹ģลà¹īว
Ġyapıl acak
ãĤ¹ãĤ¿ ãĥ¼ãĥĪ
ãģ» ãģ¼
Ġko ÅŁ
ĠмаÑĤ еÑĢи
Ġsiè cle
ĠاÙĦÙħ ختÙĦÙģ
ĠاÙĦÙħختÙĦÙģ Ø©
Ġ׾ק ר×IJ
Ġ׾קר×IJ ת
Ġ×Ķפ ×ķ×¢×ľ
Ġt òa
Ġr Æ¡i
åij¨ ãĤĬ
à¸Ŀ à¸Ļ
j ÅĽÄĩ
ĠìķĬ ìĿĦ
اÙĨت ÙĤاÙĦ
ëĸ ł
ив аеÑĤ
ãĥĪ ãĥ«
ĠاÙĦÙģÙĦسطÙĬÙĨ ÙĬØ©
à¸ģลà¹Īาว วà¹Īา
ا Ùĥت
ĠÃĸ l
ĠÑĢе ÑĪи
ĠÑĢеÑĪи л
Ġ׳×ķס פ×ķת
Ġìłķ ì¹ĺ
вл еÑĩен
Ùħر ØŃÙĦØ©
Ġcome ça
Ġy ık
ìĤ ´
à¸ĺ à¸Ļา
à¸ĺà¸Ļา à¸Ħาร
à¸Ńà¸Ļ า
à¸Ńà¸Ļา à¸Ħ
à¸Ńà¸Ļาà¸Ħ à¸ķ
Ġpeque ña
ä»ķ äºĭãĤĴ
Ġب ذÙĦÙĥ
Ġнов ого
ãģĹãģ¦ ãģĦãģªãģĦ
ĠاÙĦÙħ ÙĬاÙĩ
à¸ģà¹ĩ à¹Ģà¸Ľà¹ĩà¸Ļ
Ġж ÑĥÑĢ
ĠжÑĥÑĢ Ð½Ð°Ð»
в еÑģ
خت ار
Ġ매 ìļ°
ĠM ã
ĠавÑĤомаÑĤ Ñĭ
ضع Ùģ
ĠاÙĦÙģ Ùĥر
ãģ§ãģĻ ãģ®ãģ§
ãĥ¡ãĥ³ ãĥIJãĥ¼
Ġк ÑĢÑĥг
ĠاÙĦسÙĦ طة
à¸Ħรัà¹īà¸ĩ à¹ģรà¸ģ
à¸ģระà¸Ĺ รว
à¸ģระà¸Ĺรว à¸ĩ
ÑĨ ов
éķ· ãģĦ
大ãģį ãģĦ
Ġgeç miÅŁ
ìĦ± ìĿ´
Ġצר ×Ļ׼×Ķ
Ġм оÑī
ĠмоÑī н
Ġ×§ ×Ļש
Ġ×§×Ļש ×ķר×Ļ×Ŀ
ĠNas ıl
г ÑĢан
Ġ×ŀ ×ķצר×Ļ×Ŀ
Ġ×ŀס ×ķ×Ĵ
Ġy ür
Ġyür üt
Ġ׾׊צ×ķ
×ķÖ ¼
ĠìŀĪ ìĹĪëĭ¤
Ġter ör
ĠTh ương
ĠÙĪ ÙĬÙħ
ĠÙĪÙĬÙħ ÙĥÙĨ
ج ÙĪÙĨ
ĠÙĪØºÙĬر Ùĩا
×ŀ פ×ķ
×Ĵ×ķר ×ŀ×Ļ×Ŀ
׼×ij ×Ļש
ĠاÙĦÙĦ غ
ĠاÙĦÙĦغ Ø©
شر Ùĥ
ĠاÙĦر اب
ĠاÙĦراب ع
ĠпÑĢ ÐµÐº
ĠпÑĢек ÑĢаÑģ
ĠпÑĢекÑĢаÑģ н
Ġenerg ÃŃa
×§×ĵ ×ŀ×Ļ
ãģıãģª ãģ£ãģŁ
ĠÄij ứ
ĠÄijứ a
Serv i
Servi ço
Ġkald ır
åĥį ãģį
Ġод еж
Ġодеж д
물 ìĿĦ
ãģĿãģĨ ãģ§
ãģĮãģĤ ãĤĮãģ°
ìĻ ķ
צ×ĵ ×§
Ġart ır
Ġile ti
Ġileti ÅŁim
ãĤĪãģĨ ãģ§
ãĥĪ ãĥ¼
ãĤ¢ ãĥĭ
ãĤ¢ãĥĭ ãĥ¡
×ĺ×Ļ ×Ļ׾
ãĥķ ãĥªãĥ¼
ãĥĿ ãĥ³
ÐŁÑĢ Ð¾
Ġع اÙĦÙĬØ©
ĠÃ¶ÄŁ ret
ĠÃ¶ÄŁret men
ĠкаÑĩеÑģÑĤв а
Ġ×Ķ×ĺ ×ij×¢
Ġзна Ñİ
ãģ¦ ãģıãĤĭ
Ġm ừng
ÙħÙĪ Øª
ש ×ķ×ŀר
×Ĺ׾ ×ij
Ġwzgl ÄĻ
ĠwzglÄĻ du
ë²Ī 째
Ġtá» ĵ
Ġtá»ĵ n
ãĥ¯ãĥ¼ ãĤ¯
Ġpo życz
Ġpożycz k
×Ļ ×ķצר×Ļ×Ŀ
Ùĥر Ùħ
Ġг аÑĢ
ĠгаÑĢ Ð°Ð½
ĠгаÑĢан ÑĤи
ล à¹īาà¸ĩ
Ġìĺģ íĻĶ
×ĺ ×Ļס
Ġth ẻ
ĠìŀĪëĭ¤ ê³ł
اÙĦت ز
اÙĦتز اÙħ
Ġна ÑĪи
is ée
ãģĵãĤĮ ãĤĴ
Ġm ẽ
ض ÙĦ
بÙĪ Øª
Ġ׼ ׼×Ķ
h ợ
ĠاÙĦس ÙĪØ±ÙĬØ©
Ġ×ľ×¢ ×ķ×ŀ
Ġ×ľ×¢×ķ×ŀ ת
ĠbaÅŁ ar
ĠbaÅŁar ılı
е ÑģÑĤÑĮ
à¸Ħร ี
à¸Ħรี ม
ĠìłĦ ì²´
ĠسÙĬ ÙĥÙĪÙĨ
Ġ×ŀ×ĵ ×ķ×¢
ĠëķĮ문 ìĿ´ëĭ¤
Ġc ứng
ger ät
Ġм иÑĢ
ĠмиÑĢ Ðµ
ĠÙĥÙĬÙģ ÙĬØ©
Ġפר ×ĺ×Ļ×Ŀ
Ġgo ÅĽci
иÑĤ еÑģÑĮ
ÑĥÑĪ ÐºÐ¸
ؤ ÙħÙĨ
Ġ×IJ ׼ף
ĠاÙĦر جÙĦ
Ġl á»įc
à¹Ģรีย à¸ģวà¹Īา
ãģĵãģ® ãĤĪãģĨãģª
ë§Į íģ¼
Ġп еÑĩ
ÙĪÙĦ ات
ĠÃľ ye
liÄŁ inde
à¸Ħะ à¹ģà¸Ļ
à¸Ħะà¹ģà¸Ļ à¸Ļ
ãĤĭãģĵãģ¨ ãģ¯
วิ à¹Ģà¸Ħร
วิà¹Ģà¸Ħร าะ
วิà¹Ģà¸Ħราะ หà¹Į
Ġвозмож ноÑģÑĤи
ĠاÙĦÙĨ ساء
ãĥīãĥ© ãĥŀ
Ġgü c
Ġgüc ü
Ġt ưá»Ŀng
Ġacomp aña
ãĤ¤ ãĥ©
×§ צ×ij
ĠY ö
ĠYö net
ĠYönet im
สัม à¸ľ
à¸ªà¸±à¸¡à¸ľ ัส
à¸Ļ าม
ĠÄij ợi
à¹ģหà¹Īà¸ĩ à¸Ĭาà¸ķิ
ãģĿãĤĮ ãģ§ãĤĤ
ät ig
ת ×ķ×Ŀ
ĠbaÅŁ lat
ĠвÑģ ей
ת ×Ļ×§
ת×Ļ×§ ×ķף
ĠNg ô
ĠGesch ä
ĠGeschä fts
Ø£ Ùħ
Ø£Ùħ راض
à¹Ģà¸Ĺ à¸Ħà¸Ļ
à¹Ģà¸Ĺà¸Ħà¸Ļ ิ
à¹Ģà¸Ĺà¸Ħà¸Ļิ à¸Ħ
Ġм енÑĮ
ĠменÑĮ ÑĪе
Ġöl ç
Ġölç ü
ĠÙĬ جعÙĦ
ĠÄij ỡ
ש ×Ļ׾
ש×Ļ׾ ×ķ×ij
ĠGr Ã¶ÃŁe
ĠÙĩ اتÙģ
รà¹īาà¸Ļ à¸Ńาหาร
×Ķ׾ ×Ļ׼
×Ķ׾×Ļ׼ ×Ļ
иÑĢÑĥ ÑİÑī
èĭ¥ ãģĦ
ĠÃĸ zel
ãģĦãģŁ ãĤī
à¸Ħำ à¸ĸาม
Ġzosta ÅĤy
Ġ×Ķס ×Ļפ×ķר
×Ķ ×ķ׾
×Ķ×ķ׾ ×ļ
à¹Ģà¸Ĭà¹Īà¸Ļ à¸ģัà¸Ļ
à¹Ĥ à¸Ĩ
à¹Ĥà¸Ĩ ษ
à¹Ĥà¸Ĩษ à¸ĵา
×IJר צ×ķת
×Ĵר פ×Ļ
Ġao ût
ĠÙĬ رÙĬد
ت ÙĪØ¬
تÙĪØ¬ ÙĬÙĩ
ĠÑįÑĤ ап
ãĤ¹ãĤ¿ ãĥ³
Ġkr ó
Ġkró tk
ãĤĴ使 ãģĨ
ì ·¨
éĸ¢ ãĤı
à¸Ķà¹īวย à¸Ħวาม
à¸Ļำ à¹Ģสà¸Ļà¸Ń
Ġa yrıca
à¸Ī à¹īาà¸ĩ
ĠÑĦоÑĤ огÑĢаÑĦ
Ġв еÑĩ
ĠвеÑĩ еÑĢ
åĩº ãģĹãģŁ
ĠÐ¥ о
Ġ×ŀ ר×Ĵ×Ļש
à¹ĥหà¹ī à¹Ģà¸Ľà¹ĩà¸Ļ
ãĤĴ 缮
ãĤĴ缮 æĮĩ
׾ ×ŀ×Ļ×Ŀ
nÄħ ÅĤ
ĠÑģÑĤ анд
ĠÑģÑĤанд аÑĢÑĤ
ĠSü d
ĠT âm
اخت بار
à¹Ģà¸ģ à¸Ńรà¹Į
Ùħس رØŃ
Ġbi á»ĩn
ب Ùı
Ġص اÙĦ
ĠصاÙĦ ØŃ
ĠPh ụ
íľ ´
ãĥ¬ãĥĵ ãĥ¥ãĥ¼
Ġbụ ng
Ġrég ime
ĠØ£ Ø´Ùĩر
ĠÑĢабоÑĤ ник
à¸Ŀ ัà¸Ļ
اع تÙħ
اعتÙħ اد
Ġзам еÑĤ
ãģ¾ ãģ£ãģ¦
Ġch ặt
æĿ¥ ãĤĭ
ĠاÙĦÙĤ ÙĪØ§Øª
ãģ«åħ¥ ãģ£ãģ¦
تØŃ اÙĦÙģ
Ùħ زÙĬد
ĠÙĬ صÙĦ
ìĹ ¼
à¹Ģà¸Ĭ à¹ĩ
à¹Ģà¸Ĭà¹ĩ à¸Ħ
Ġk á»ĭ
Ġká»ĭ p
ĠìķĦ ì§ģ
×IJ׳ ×Ĵ
Ġобла ÑģÑĤÑĮ
Ġpomoc Äħ
Ġ×ķ ש׾
ëĵł ì§Ģ
ĠGi ám
ĠSt ück
Ġchá y
ĠëĤĺ ìĺ¤
ש ×Ļ×ĺת
×ŀ×ĵ ר
×ŀ×ĵר ×Ļ×ļ
Ġsüre ç
к ва
×ij׾ ×Ļ×Ŀ
×Ķ ×ª×Ļ
×Ķת×Ļ ×Ļ×Ĺס
ÙĤب اÙĦ
Ġס ×ķ×Ĵ
Ġס×ķ×Ĵ ×Ļ
ÑģÑĤ олÑĮ
ä½ķ ãĤĤ
×ĸ׼ ×ķר
è²· ãģĨ
å®ī ãģı
à¸Ħรัà¹īà¸ĩ à¸Ļีà¹ī
kö p
ĠÑģеÑĢ Ð²Ð¸Ñģ
оÑĩ нÑĭÑħ
ê±° ëŀĺ
تأ Ùĥ
تأÙĥ ÙĬد
×ĵ ׾ק
Ġпо Ñĩем
ĠпоÑĩем Ñĥ
пиÑģ аÑĤÑĮ
×ij שר
ĠH Ãłng
ĠT ìm
Ġtr ừ
ãĤ» ãĥĥãĤ¯ãĤ¹
×ķ׳ ×Ĵ
mız da
п Ñģи
ĠìŀĪ ê¸°
Ġr út
ز اÙĨ
تÙĨ ÙĪØ¹
ÙħÙĤ ا
ÙħÙĤا ÙĪÙħØ©
Ġ׾צ ×ķר×ļ
Ġ×ij ×Ļר×ķש׾×Ļ×Ŀ
ãĥ´ ãĤ£
eb ile
ebile ceÄŁi
ãĥ¦ ãĥ¼ãĤ
ãĥ¦ãĥ¼ãĤ ¶
ãĥ¦ãĥ¼ãĤ¶ ãĥ¼
ãĤĴä½ľ ãĤĭ
Ñģ меÑĢ
ÑģмеÑĢ ÑĤ
Ġì§ ģ
Ġì§ģ ìłij
ĠÐŁ аÑĢ
ØŃ اض
ØŃاض ر
Ùħ ÙĥاÙģ
ÙħÙĥاÙģ ØŃØ©
ล ิà¸Ļ
ãģ¦ ãģįãģ¦
ÑĢоÑģ л
ĠÄ°ÅŁ te
ÙĤص ÙĬر
Ġ×ij×Ĵ ×Ļ׾
Ġ×ŀת ×IJ×Ļ×Ŀ
Ġ×Ķ ×Ĺ×ĵ
Ġ×Ķ×Ĺ×ĵ ש×Ķ
ר ×ķ×¢
Ġprodukt ów
ĠÙħ صدر
не ÑĨ
ĠاÙĦعÙħÙĦ ات
Ġçık ma
Ġد بÙĬ
×§ ×Ļף
ת ×IJר
ת×IJר ×Ļ×ļ
׳×Ļ ×Ļ×ĵ
صر اع
l ève
צ ×Ļר
à¸Ķ ัà¸Ļ
à¹ĥหà¹ī à¹Ħà¸Ķà¹ī
ãĤ¿ãĤ¤ ãĥł
Ġgi ảng
С ÐŁ
ĠاÙĦÙħ ØŃÙĦ
ĠاÙĦÙħØŃÙĦ ÙĬØ©
ĠT ất
׾ ×ķ×ĺ
h á»ķ
Ġam éric
Ġaméric ain
Ġ×ijש׾ ×ij
Ġ׾×IJ ×ķ×ŀ×Ļ
Ġpe ça
ĠÑĢаз нÑĭÑħ
ãģĦãĤĭ ãģ¨
ãĥĩ ãĥ³
ס קר
Ġ×Ķ×ŀ×Ĺ ×Ļר
ãģ¨ãģĦãģĨ ãĤĤãģ®
رت بط
ĠиÑģÑĤ оÑĩ
ĠиÑģÑĤоÑĩ ник
สมัà¸Ħร สมาà¸Ĭิà¸ģ
Ġ à¸Ĺัà¹īà¸ĩ
Ġà¸Ĺัà¹īà¸ĩ à¸Ļีà¹ī
ĠT áºŃp
ãģ£ãģ¦ ãģĦãģĨ
ĠاÙĦÙĪ ØµÙĪÙĦ
Ġdéc ada
Ġо ÑĦоÑĢм
ĠоÑĦоÑĢм лен
สำหรัà¸ļ à¸ģาร
Ġog óln
ãģĨãģ¡ ãģ«
Ġvá rias
ãģĻãģİ ãĤĭ
ÙĪ Ùĩا
à¹Ĥà¸Ľà¸£ à¸Ķ
ĠÐłÐ¾ÑģÑģ иÑı
人 ãĢħ
ãģĹãģ¦ ãģįãģŁ
Ġsı rasında
Ġng ôn
س ÙĨØ©
تÙħ تع
×ŀ׼ ×ij×Ļ
Ġnh ấn
×¢ ×ŀ×Ļ×ĵ
á» ¨
ж иÑĤÑĮ
ãĤī ãģĽ
gr áf
gráf ica
ĠÙĤ ÙĪÙĦ
ĠÙĤÙĪÙĦ Ùĩ
ëĭ¨ ì²´
ห à¹īา
หà¹īา ม
使 ãģ£ãģ¦
ת ×Ļ×ij
ת×Ļ×ij ת
i á»ĥu
à¹ģ à¸Ĭม
à¹ģà¸Ĭม à¸Ľ
à¹ģà¸Ĭà¸¡à¸Ľ à¹Į
Ạ¬
ĠëĤĺ ëĿ¼
ĠÙħباشر Ø©
Ġtr Äĥm
سÙĥ ÙĪ
ĠاÙĦذ Ùī
Ġbi ç
Ġbiç im
ت راجع
Ġоб еÑģп
ĠобеÑģп еÑĩ
ĠобеÑģпеÑĩ ива
Ġвозд ÑĥÑħ
Ñĭв аÑĤÑĮ
ÙĦ ØŃÙĤ
ĠMü dü
ĠMüdü rl
ĠMüdürl Ã¼ÄŁÃ¼
Ġyapt ır
Ġפר ס
Ġפרס ×ķ×Ŀ
Ø· ÙĪØ±
ÑģÑĤв оваÑĤÑĮ
ìŀ¥ ìĿĦ
à¸Ĺีà¹Īà¸Ķี à¸Ĺีà¹Īสุà¸Ķ
à¸Ńั ล
ÑĢ Ñİ
Ùħست ÙĤبÙĦ
Ñģл ÑĥÑĪ
ÑģлÑĥÑĪ Ð°
èªį ãĤģ
Ġ׾ ×Ļ×ŀ
Ġ׾×Ļ×ŀ ×ķ×ĵ×Ļ
ת ש×ķ×ij
תש×ķ×ij ×ķת
ĠgerçekleÅŁtir il
ĠاÙĦ اتÙ쨧ÙĤ
ĠÑĥÑĢов не
ĠÑĤ ÑĢав
Ġ×Ķ×ŀ ×ķף
ØŃÙģ Ø§Ø¸
ĠÙħ ÙIJ
ĠÙħÙIJ ÙĨ
ĠÙħÙIJÙĨ ÙĴ
Ġdem ás
×ŀ×ķ×ĸ ×Ļ×§×Ķ
ש ×Ļ×Ĺ×Ķ
Ġb ú
алÑĮ нÑĭм
ãĤı ãģŁ
ãĤıãģŁ ãģĹ
ĠاÙĦÙħÙĪ Ø§Ø¯
ת ׼׳
×ª×Ľ×ł ×ķף
ãĥŃ ãĥĥãĤ¯
hi ếu
ĠÑĥ ме
ÙħØŃا ÙĪÙĦØ©
×IJ ×ķשר
Ġкон кÑĥÑĢ
ĠконкÑĥÑĢ Ñģ
Ġ×ŀ ×ij×Ĺ
Ġ×ŀ×ij×Ĺ ×Ļ×ł×ª
Ġan lam
Ġanlam ı
Ġli á»ĩt
Ġв Ñħод
ĠH ình
ĠÙĨ ÙĬ
ĠÙĨÙĬ ÙĪØ²
ãĤ¸ãĥ£ ãĥ¼
×ij ×Ļ×¥
ÑĤелÑĮ нÑĭÑħ
à¸Ĺุà¸ģ à¸Ńยà¹Īาà¸ĩ
ĠkiÅŁ inin
Ø£ Ùĥثر
ĠиÑģÑĤоÑĢ Ð¸Ð¸
Ġë³Ģ íĻĶ
פ׾ ס×ĺ
×¤×ľ×¡×ĺ ×Ļ׳×Ļ
ĠÑģ еÑĤ
ĠÑģеÑĤ и
dıģ ımız
íķĺ ëıĦë¡Ŀ
×Ķ ×¨
×Ķר ×ij×Ķ
ãģĻãĤĭãģĵãģ¨ ãģ¯
Ġphi ếu
تØŃ سÙĬÙĨ
ĠÅĽ rod
ĠÅĽrod ow
ĠÅĽrodow isk
ĠÑĢаÑģ Ñħод
بر ÙĬد
Ġر ÙĬ
ĠرÙĬ اÙĦ
Ġ×ķ ׼×ļ
ì§Ģ ìļĶ
׼ ×ŀ×ķ
Ġ×¢×ľ ×Ļ×Ķ×Ŀ
f ÃŃcio
Ġkar arı
tıģ ını
ĠС ов
ĠСов еÑĤ
ãģĬéĩij ãĤĴ
м еждÑĥ
междÑĥ на
междÑĥна ÑĢод
междÑĥнаÑĢод н
Ġm á»Ŀi
ĠاÙĦØ¥ ÙĬر
ĠاÙĦØ¥ÙĬر اÙĨÙĬ
ĠاÙĦرÙĪ Ø³ÙĬ
ص ÙĨد
صÙĨد ÙĪÙĤ
ĠاÙĦØ¥ÙĨ ترÙĨت
Ġt ắm
ĠÑĤак ого
Ġ×ij ׾×ķ×Ĵ
Ġü crets
Ġücrets iz
×Ĺ×ĸ ×Ļר
ìĸ´ ìķ¼
ĠPh ần
ï¼ ľ
Ġ×ĺ ×ij×¢
Ġ×ĺ×ij×¢ ×Ļ
×IJ×ŀ ×IJ
اÙĤ ÙĦ
Ġcondi ções
ÙĤات ÙĦ
ĠÑĢезÑĥлÑĮÑĤаÑĤ е
ĠÑģво ими
צ×ij ×Ļ×¢
gé ni
Ġz es
Ġzes po
Ġzespo ÅĤ
ÑĪ Ð¸Ð²
Ġפר×ĺ×Ļ ×ķת
Ùħست Ø´Ùģ
ÙħستشÙģ Ùī
شر ع
Ġko ÅĽci
Ġ×Ķ×IJ ×Ļ׳×ĺר׳×ĺ
ĠЧ еÑĢ
поÑĩ ÑĤ
Ġactiv ités
çŁ¥ ãģ£ãģ¦
Ġ×ij ×ĸ×Ķ
Ġyüz den
ãģªãĤĬ ãģ¾ãģĽãĤĵ
Ġíĺ ¹
Ġíĺ¹ ìĿĢ
Ġ×ŀש ׳×Ķ
ĠÐĴ еÑĢ
Ġ×ij×IJ×ķת ×ķ
éĿ¢ çϽ
éĿ¢çϽ ãģĦ
شر ØŃ
gr ünde
Ùģ Ø´
Ù쨴 ÙĦ
Ġsé jour
ë´ IJ
Ġr ôle
ش عار
ем Ñĭе
ĠاÙĦج سÙħ
алÑĮ ное
Ġìĥģ íĥľ
ï¼ ¤
ë¯Ģ ë¡ľ
ĠÙĨ ÙĤØ·
ĠÙĨÙĤØ· Ø©
ãģĿãģĨ ãģł
ãģĻãĤĭ ãģ®ãģĮ
ห ู
Ġnh á»ĭ
Ġeconóm ica
ס×ĺ ×ķ×ĵ
ס×ĺ×ķ×ĵ ׳×ĺ
มี à¹Ĥà¸Ńà¸ģาส
Ġgest ão
รูà¹ī วà¹Īา
Ġlo ạt
ĠاÙĦÙħ Ùı
ĠاÙĦØŃ ÙħÙĦ
ĠاÙĦعÙħÙĦ ÙĬØ©
Ġê²ĥ ëıĦ
ĠÐľÐ¾Ñģк ва
×§×ĺ ×ķר
Ġпод ÑĢоб
ĠподÑĢоб н
Ġl ưng
ت Ù쨳
تÙ쨳 ÙĬر
ĠاÙĦ بع
ĠاÙĦبع ض
ئ ت
Ðķ ÐĿ
ìŰ 구
à¹ĥหà¹ī à¸Ħุà¸ĵ
ãģĤãĤĬ ãģ¾ãģĹãģŁ
Ġbir ka
Ġbirka ç
Ġİ sl
Ġİsl am
çĹĽ ãģ¿
Ġh ảo
Ġм аÑı
ĠiÅŁ çi
ש ×
×©× ģ
à¸ģาร à¹Ģมืà¸Ńà¸ĩ
×ķ×Ķ ×¨
Ġch ó
ëĨ Ģ
Ġyan lı
Ġyanlı ÅŁ
幸 ãģĽ
×IJר×Ĵ ×ķ׳×Ļ
à¸Ńาà¸Ī าร
à¸Ńาà¸Īาร ยà¹Į
ĠинÑĦоÑĢм аÑĨиÑİ
Ðĵ Ðŀ
׳ ×Ĺש
ĠìķĮ ìķĦ
ĠÑħаÑĢакÑĤеÑĢ Ð¸ÑģÑĤ
ĠÑħаÑĢакÑĤеÑĢиÑģÑĤ ик
à¸Ħุà¸ĵ สามารà¸ĸ
è¦ĭ ãģĪãĤĭ
à¸Ĭัà¸Ķ à¹Ģà¸Ī
à¸Ĭัà¸Ķà¹Ģà¸Ī à¸Ļ
ĠdziaÅĤ al
ĠdziaÅĤal noÅĽci
à¹Ĥà¸ŀ สà¸ķà¹Į
ĠÐļ ол
ĠÙģ ÙĩÙĬ
Ġ×ŀ פ׳×Ļ
Ġ×Ķ×§ שר
Ùħر Ùĥ
ÙħرÙĥ ز
Ġho á
Ġа пп
Ġапп аÑĢаÑĤ
Ġp ami
Ġpami ÄĻ
ĠpamiÄĻ ta
Ġç ünkü
×ĵ ×ķף
ãģ¯ ãģĵãģ¡ãĤī
ĠM Ãł
ĠÙĬ ÙĤدÙħ
ĠпÑĢ ÐµÐ·
ĠпÑĢез иденÑĤ
à¸Ńุ à¸ķ
à¸Ńุà¸ķ สา
à¸Ńุà¸ķสา ห
à¸Ńุà¸ķสาห à¸ģรรม
ì§Ģ ìĽIJ
Ġ×IJפשר ×ķת
sch üt
schüt z
ĠTi ên
Ġsay ılı
ĠгÑĢÑĥпп Ñĭ
оÑĩ нÑĭй
Ġ×ľ×¢ ×ŀ×ķ×ĵ
Ġwr zeÅĽ
ĠwrzeÅĽ nia
ĠÄIJ ầu
à¹Ģà¸Ĥà¹īา รà¹Īวม
nız da
Ø®ÙĬ ص
Ġgü nc
Ġgünc el
ĠÙĦÙĩ ذÙĩ
ĠÙĬ عتبر
lé gi
ãĤı ãģĭãĤĭ
Ġr ừng
ظ Ùĩ
ظÙĩ ÙĪØ±
Ġ×ŀ×ij ×Ļף
Ġ기 íĥĢ
åĪĩ ãĤĮ
lan mÄ±ÅŁ
à¸Ĺีà¹Ī มีà¸Ħวาม
Ġh á»ģ
ت ÙĪØ¬Ùĩ
ĠاÙĦØ¥ دارة
Ġú til
ס פ×ķ
à¸Ħวาม รัà¸ģ
à¹Ĥ ฮ
Ġпол иÑĤ
ĠполиÑĤ ик
Ġsat ın
ĠÅŀ imdi
×ŀ ×ķר×Ļ×Ŀ
ìķĺ ëĭ¤
×Ĺ ×ķ×ķ
×Ĺ×ķ×ķ ×Ļ×Ķ
à¸Ħà¸Ńม à¸ŀิ
à¸Ħà¸Ńมà¸ŀิ ว
à¸Ħà¸Ńมà¸ŀิว à¹Ģà¸ķà¸Ńรà¹Į
Ġا ذا
تخ اذ
ãĤ¨ ãĥ«
Ġpossibilit é
ยืà¸Ļ ยัà¸Ļ
Ġü nivers
Ġünivers ite
ĠاÙĦد ÙĪØ±ÙĬ
ĠìķĬëĬĶ ëĭ¤
ĠìĦľ ë¡ľ
ØŃ اÙĦ
Ġë ¨
Ġë¨ ¼
Ġ먼 ìłĢ
à¸Ĺีà¹Ī à¸ĸูà¸ģ
ì§ ľ
Ġsk óry
лÑĮ ÑĨ
à¹ĥà¸Ĭà¹ī à¹Ģวลา
×ij×§ שת
Ġذ ÙĪ
æĹ¥ ãĢħ
ĠкоÑĤоÑĢ ÑĥÑİ
ĠÑĥÑĢов енÑĮ
ê¹ ¨
à¹Ħ à¸Ĺ
ãĤµ ãĥĹãĥª
ãĤ¸ ãĥ§ãĥ³
ãģĻ ãģ¹ãģį
ĠG ór
ãĥĪ ãĤ¤
ãĥĪãĤ¤ ãĥ¬
ĠyaÅŁ ama
Ġdá»ĭ p
Ġb ữa
à¸ĭ ุ
Ġöl üm
ãģ£ãģ¦ ãģıãĤĭ
à¸ģาร à¸Ħà¹īา
ש ער
ĠÑĤип а
Ġг еÑĢ
ĠгеÑĢ Ð¾
רק ע
Ġu waż
Ġuważ a
ש×ŀ ף
Ġhast alık
ãĤıãĤĮ ãĤĭ
ba ÅŁÄ±
Ñĩ ÑĤо
Ġ×ij ×ŀר׼×ĸ
Ġìļ°ë¦¬ ìĿĺ
ĠÙĥاÙĨ ÙĪØ§
ĠØ£ بر
Ġأبر ÙĬÙĦ
ì¸ µ
à¹Ħà¸Ĥ à¹Ī
ĠÙĪ ÙĦÙĪ
à¸Ĺ ัว
à¸Ĺัว รà¹Į
ĠÙĪØ£ Ùĥد
à¸Ĭ วà¸Ļ
׾ ×ķ×§
æį ¨
æį¨ ãģ¦
Ġİç in
p éri
Ġy al
Ġyal nız
ÑĮÑı н
Ġg ắng
à¸ģà¹ĩ ยัà¸ĩ
ĠУкÑĢа ин
ĠÑģ ами
ĠпÑĢовед ен
à¸ķà¸ģ à¹ģà¸ķà¹Īà¸ĩ
ĠQu ân
é paration
ĠbaÅŁ ında
Ġzn ale
Ġznale ź
Ġznaleź Äĩ
ãĤ± ãĥ¼
ãĥİ ãĥ¼
à¸ĸูà¸ģ à¸ķà¹īà¸Ńà¸ĩ
ëª ¸
Ġëı Į
ĠëıĮ ìķĦ
ĠSch üler
Ġпод гоÑĤов
ĠподгоÑĤов к
ع رÙĪ
عرÙĪ Ø¶
la ÅŁtır
ĠÑģоÑģÑĤав лÑıеÑĤ
ĠпÑĢоиз вод
ĠпÑĢоизвод ÑģÑĤва
ĠоÑģнов е
ĠØ´ ÙħاÙĦ
à¸ģร ี
ĠgörÃ¼ÅŁ me
оÑĩ ек
Ġ×Ĺ×ijר ×Ļ×Ŀ
ÙħØ® اط
Ùħخاط ر
ï¼ Ń
ר פ×IJ
ĠM ẹ
ยà¸Ńม รัà¸ļ
Ġv ết
خ ذ
ĠاÙĦت Ø·
ĠاÙĦتط بÙĬÙĤ
à¸Ļ ึà¸ģ
Ġ×Ķ ×Ľ×ł×¡×ª
ĠогÑĢ Ð°Ð½Ð¸
ĠогÑĢани Ñĩен
ĠÃĩ alÄ±ÅŁ
ĠاÙĦÙħÙĨت دÙī
à¸Īำà¸Ļวà¸Ļ มาà¸ģ
ĠÑĤоÑĢ ÑĢ
ĠÑĤоÑĢÑĢ ÐµÐ½ÑĤ
ĠìĤ´ ìķĦ
à¸ŀลัà¸ĩ à¸ĩาà¸Ļ
à¸Ĭ ัà¸Ļ
ĠÐIJн дÑĢ
Ġréalis é
×ŀש ×IJ
à¹ģ à¸Ĭ
à¹ģà¸Ĭ รà¹Į
Ġб ог
มา à¹ģลà¹īว
ĠاÙĦÙĨ ار
Ġolmad ıģı
×ĵ ×¢×Ķ
ĠÑĥ веÑĢ
ĠÑĥвеÑĢ ÐµÐ½
ãĤĭ ãĤĤãģ®
أ د
أد ÙĪØ§Øª
Ġ×Ķ×ĸ ×ķ×Ĵ
Ø¥ عÙĦاÙħ
h á»ı
ĠNä he
ĠÑĤ еÑģÑĤ
Ġ×ŀ ×ķ׼ר
Ġë¬¸ìłľ ê°Ģ
ת ×ķצ×IJ×Ķ
m ó
mó vel
ĠاÙĦتج ارة
Ġмног иÑħ
обÑī а
Ġ×¢ סק×Ļ
ĠEdu cação
×§ ש×Ļ×Ŀ
é tabl
établ issement
Ġд еле
иÑĢÑĥ еÑĤÑģÑı
آ ثار
Ġ×Ķ×ŀ ר׼×ĸ×Ļ
ãĥIJ ãĥ«
ĠвÑģÑĤÑĢ ÐµÑĩ
ãģĴ ãĤĭ
Ġci Äħ
ĠciÄħ gu
ÙĬ ست
à¸łà¸² ว
à¸łà¸²à¸§ ะ
Ø£ Ùħر
Ġо жи
Ġожи да
Ġ á»§y
ãĥŀ ãĥ«
ر اس
оÑĩ ной
ת ×Ĵ×ķ×ij×ķת
تع رÙĬÙģ
ĠÑģо ÑĨиалÑĮно
ãĤĴ éĸĭ
ĠиÑģÑģлед ова
Ġd ú
Ġdú vida
Ġsk ÅĤ
ĠskÅĤ ada
Ġhä ufig
ĠвÑĭб ÑĢ
ĠвÑĭбÑĢ Ð°ÑĤÑĮ
ãģ®ãģ§ãģ¯ãģªãģĦ ãģĭ
ĠÑģ илÑĮно
ÑĤвеÑĢж ден
ר פ
רפ ×ķ×IJ×Ķ
æĢĿ ãģĦãģ¾ãģĻ
ØŃر ص
ש×ķת ×£
Ùħس جد
à¹Ĥà¸Ĭ วà¹Į
ем ÑģÑı
в ÑĪие
Ġм л
Ġмл н
Ġ׾×Ķ ×ij×Ļ×IJ
ĠÙĬ تعÙĦÙĤ
à¸ķ ูà¹ī
Ġп ÑĢаз
ĠпÑĢаз д
ĠпÑĢазд ник
Ġн ем
Ġнем ного
Ġs Ãłng
تÙĨ سÙĬ
تÙĨسÙĬ ÙĤ
Ġtá» Ŀ
Ġмед и
ãģ« æĪ
ã쫿Π»
à¸Ħว à¹īา
ãģĭ ãģijãĤĭ
×ij׾ ×ķת
ĠÑįк Ñģп
ĠÑįкÑģп еÑĢÑĤ
Ġдев ÑĥÑĪ
ĠдевÑĥÑĪ Ðº
ĠØŃ ص
ÙĨØ´ Ø£
ãģĮãģĤãĤĭ ãģ®ãģ§
Ġت راÙħ
ĠتراÙħ ب
أس ÙĪØ§ÙĤ
Ġ׾פ ׳×ķת
Ġا ï»·
ãģ« ãģı
ãģ«ãģı ãģĦ
ĠØ£ عÙĦÙī
Ġ׾×Ķ ×ŀש×Ļ×ļ
rä u
ש×ŀ ×Ļ×Ŀ
åĪĨ ãģij
ãģĻ ãģ§
ãģĻãģ§ ãģ«
×Ķ׾ ׼×Ķ
×Ĺ׾ ×Ļ×£
Ġì ±ħ
Ġì±ħ ìŀĦ
à¹Ģà¸Ī ริ
à¹Ģà¸Īริ à¸į
éģĬ ãģ³
ج سد
สา à¸ĺ
สาà¸ĺ าร
สาà¸ĺาร à¸ĵ
Ġbas ın
ÑĢаР³
г ад
Ġho ÅŁ
íķ µ
×ij×Ĺ ×Ļר×Ķ
×ŀס ×ļ
Ġìłľ íĴĪ
تÙħ ÙĪÙĬÙĦ
ĠL ưu
ë¡ľ ë¶ĢíĦ°
Ġп об
Ġпоб ед
ÙħÙĨ ذ
常 ãģ«
ÙĤ س
ĠاÙĦÙħ صدر
ĠÙĪØ§ÙĦ است
Ġkh ắp
ĠاÙĦج اÙĨب
Ġng uyá»ĩn
éĸĵ éģķãģĦ
ĠÑģÑĤ ÑĢа
ĠÑģÑĤÑĢа Ñħ
ĠÑģÑĤÑĢаÑħ ов
รี à¸ļ
Ġx ương
Ġì° ¾
Ġì°¾ ìķĦ
Ġng ại
г ал
à¸ĭ ีà¹Ī
Ġ×ij פ×Ļ×Ļס×ij×ķ×§
Ц енÑĤÑĢ
Ġaval iação
Ġeconóm ico
×ĸ ף
ĠÐľ ак
Ġinter és
à¸ģล ิà¹Īà¸Ļ
ÑģÑĤÑĮ Ñİ
ĠÄij ương
å¼· ãģı
ĠKh ách
à¹Ģà¸Ļืà¹īà¸Ń หา
ĠYaz ı
è²· ãģ£ãģ¦
Ðł Ðķ
à¹Ģà¸ŀิà¹Īม à¸Ĥึà¹īà¸Ļ
สม à¸ļู
สมà¸ļู รà¸ĵà¹Į
Ġм иÑĢов
×Ĵ ׳×Ļ×Ŀ
ĠÄij ức
à¸Ń ารà¹Į
ص اص
ãģĬ ãĤĪ
ãģĬãĤĪ ãģ³
ÃªÌ ī
ĠاÙĦÙħؤ تÙħر
ĠاÙĦÙħر ØŃÙĦØ©
สà¸Ńà¸ļ à¸ĸาม
Ġà¸Īาà¸ģ à¸Ļัà¹īà¸Ļ
Ġت عد
ãģĿãģ® ãģŁãĤģ
Ġkh áng
à¸Ļ ิà¸Ķ
ãĥĬ ãĥ³
ëĦ¤ ìļĶ
ĠاÙĦ اØŃت
ĠاÙĦاØŃت ÙĦاÙĦ
ìļ ķ
Ġмод ели
ĠпÑĢоÑĨ енÑĤ
à¸ŀวà¸ģ à¹Ģรา
Ġ×Ķצ ×ĵ
Ġ×Ķצ×ĵ ×ĵ×Ļ×Ŀ
ständ e
׳ ×Ĵר
Ġdot yc
Ġdotyc zÄħ
ĠdotyczÄħ ce
ĠÅĽ wiÄĻt
×ŀר ×Ķ
ãģĻãģĶ ãģĦ
ãĥĩãĤ£ ãĥ³ãĤ°
à¸ģาร สรà¹īาà¸ĩ
ë Ĥ¬
Ġì°¸ ìŬ
Ñģ Ñħ
ÑģÑħ ем
ÙħÙĪ Ø³
Ġn ấu
Ġ׾×ŀ×¢ ׾×Ķ
à¹Ģà¸Ľ à¹īา
à¹Ģà¸Ľà¹īา หมาย
Ġmù i
ائ ز
íĽ Ī
×Ĺ×ij ×ķר×Ķ
à¸ľà¸¹à¹ī à¹ĥà¸Ĭà¹ī
Ġpa ź
Ġpaź dzi
Ġpaździ ern
Ġpaździern ika
ลà¸ĩ à¹Ħà¸Ľ
ÙĤ اع
Ġch áºŃm
Ġözellik leri
ĠÄIJ o
ĠÄIJo Ãłn
ж ение
Ġh ẳ
Ġhẳ n
ĠaÅŁ k
ï½ į
ãĥij ãĤ¹
×Ķ×ķר ×IJ×ķת
ĠÅ »
ĠÅ» y
×ŀ×ĸ ׾
ĠÑĥ кÑĢа
ĠÑĥкÑĢа ин
à¹Ģà¸Ĭ ิ
à¹Ģà¸Ĭิ à¸į
Ðł Ðĺ
ĠzwiÄħz ku
×Ķ×Ĺ׾×ĺ ת
ãĤĵãģ§ãģĻ ãĤĪãģŃ
ãģ¦ ãģĬãĤĬ
лож иÑĤÑĮ
×ŀ ×ķ׳×Ļ×Ŀ
ฮ ิ
ì° ¬
ĠاÙĦÙħØ´ ترÙĥ
ĠdÃ¼ÅŁ ük
аг енÑĤ
ĠاÙĦØ£ سبÙĪØ¹
ĠÙĤ رÙĬب
ин д
инд ив
индив ид
индивид Ñĥ
индивидÑĥ алÑĮн
för der
Ġseç en
Ġseçen ek
Ġét ant
ĠлÑİб им
каз ÑĭваеÑĤ
ว ิà¸Ļ
Ġ×Ķ×ij ×IJ×Ļ×Ŀ
Ġд ов
Ġдов олÑĮ
ĠдоволÑĮ но
×¢×ĵ ×Ļ×£
Ġok re
Ġokre ÅĽ
ĠokreÅĽ lon
Ġت رÙĬد
à¹Ģมืà¹Īà¸Ń วัà¸Ļà¸Ĺีà¹Ī
ãĤĪ ãģĭãģ£ãģŁ
Cum h
Cumh ur
Cumhur ba
Cumhurba ÅŁ
CumhurbaÅŁ kan
CumhurbaÅŁkan ı
Ġn ợ
à¸ľà¸¹à¹ī à¹Ģลà¹Īà¸Ļ
Ġcompl ète
à¹Ģà¸ŀ ศ
د ÙIJ
Ġdü z
Ġdüz ey
ãģ§ãģĤãĤĭ ãģĵãģ¨
ext érieur
× ³
Ġinform ação
ãĤ¯ãĥª ãĥĭãĥĥãĤ¯
ĠPub li
ĠPubli é
ר ×ķ×ĵ
à¸Ħวาม à¸Ľà¸¥à¸Ńà¸Ķà¸łà¸±à¸¢
ĠØ£ÙĬ ض
ĠØ£ÙĬض Ùĭا
ت سبب
ãģ¤ ãĤĤãĤĬ
из ма
à¸Ĥึà¹īà¸Ļ à¹Ħà¸Ľ
Ùĥ ÙIJ
ÙĦ ÙĪÙħ
Ġש צר
Ġשצר ×Ļ×ļ
ãģ¯ ãĤĤãģ¡ãĤįãĤĵ
Ġк ан
Ġкан ал
ãģ«ãģª ãģ£ãģ¦ãģĦãģ¾ãģĻ
ĠاÙĦØ£ Ùĥثر
ت اØŃ
ÙĨت Ùĩ
ÙĨتÙĩ اء
ا ÙĪÙĬØ©
ĠBug ün
н Ñģкого
à¸Ķ à¹Īวà¸Ļ
é volution
ãģ£ãģ¦ ãģĦãģ¾ãģĹãģŁ
ãĤ ħ
ĠV ương
à¸łà¸²à¸ŀ ย
à¸łà¸²à¸ŀย à¸Ļ
à¸łà¸²à¸ŀยà¸Ļ à¸ķรà¹Į
Ġ×Ķ ×¦×ľ×Ļ×Ĺ
ĠاÙĦإسÙĦاÙħ ÙĬ
ÙĦÙĬ ب
Ġed ição
ÑģÑĤÑĢ ÐµÐ»
Ġkh úc
ÙĨÙħÙĪ Ø°
ÙĨÙħÙĪØ° ج
׾ צ×Ķ
ÑģÑĤав ил
à¸ĸ า
สรà¹īาà¸ĩ à¸Ħวาม
ãģĦ ãģ£ãģ±
ãģĦãģ£ãģ± ãģĦ
ÑģÑĤав лен
ĠاÙĦ ÙĤدس
Ġng ược
ب خ
ส หร
สหร ั
สหรั à¸IJ
ĠØ£ غ
Ġأغ سط
Ġأغسط س
ãģĨ ãģ¾
ãģĨãģ¾ ãģı
ĠêµŃ ìłľ
ØŃض ار
Ġd ừng
æĬ¼ ãģĹ
ت ÙĪØ§
تÙĪØ§ جد
ש×ŀ ×Ĺ×Ķ
ãģı ãĤĵ
Ġ×ij×¢ צ
Ġ×ijעצ ×Ŀ
×ŀ ׳×Ļ×ķת
×ķ ×Ļ×ĵ
×ķ×Ļ×ĵ ×IJ×ķ
à¸Ĭ ิà¸ĩ
Ġprac ÄĻ
Ġз аÑĤ
ĠзаÑĤ ем
ĠìŀIJ ìľł
Ġì¤ Ģ
Ġì¤Ģ ë¹Ħ
Ġb áºŃ
ĠbáºŃ c
Ġ×Ķ×ŀ צ×ij
ĠÙĤ ÙĬÙħØ©
à¹Ģà¸Ń à¹Ģà¸Ĭ
à¹Ģà¸Ńà¹Ģà¸Ĭ ีย
Ġperch è
ĠاÙĦع سÙĥر
ĠاÙĦعسÙĥر ÙĬØ©
ج ÙĬب
ëŀ µ
Ùħ Ùĩر
ÙħÙĩر جاÙĨ
Ùħ راÙĥ
ÙħراÙĥ ز
Ġод нако
à¸Ķี à¹Ĩ
Ġצ פ×ķ
Ġkullan ılan
Ġк ино
ãĥĨãĤ£ ãĥ³ãĤ°
ĠGi Ỽi
ت ÙĪØ²
تÙĪØ² ÙĬع
ย ิà¸Ļ
ยิà¸Ļ à¸Ķี
Ġc Åĵur
ĠiÅŁ aret
Ġ×ij×¢ ×ĸר
Ġ×ij×¢×ĸר ת
Ġп аÑĨи
ĠпаÑĨи енÑĤ
ãģ¿ãģŁãģĦ ãģ§ãģĻ
в ез
ли на
од е
Ġ×IJ×ķת ף
dıģ ınız
ĠÐIJ в
ĠÐIJв ÑĤоÑĢ
ï¼ ®
ĠC ần
ĠاÙĦا Ø®
ĠاÙĦاخ بار
Ġê±° ìĿĺ
Ġat enção
Ġgeld iÄŁi
ãĤª ãĤ¹
ãĤªãĤ¹ ãĤ¹
ãĤªãĤ¹ãĤ¹ ãĥ¡
ев Ñĭе
кÑĢÑĭ л
à¹Ģà¸Ĭ ียà¸ĩ
à¹Ģà¸Ĭียà¸ĩ à¹ĥหมà¹Ī
Ġmar ço
ĠاÙĦÙħ ادة
Ġг ол
Ġsprzeda ży
Ġíķ´ ê²°
ĠÐķ го
ê¹ Ģ
Ġ׾ק×ij׾ ת
ĠاÙĦÙģ ÙĨاÙĨ
Ġcomunic ación
à¹Ģสà¹īà¸Ļ à¸Ĺาà¸ĩ
íĺ ¹
à¸Ĭ ำ
à¸Ĭำ ระ
Ġ׼ ×IJ×ŀ
Ġ׼×IJ×ŀ ×ķר
à¸Ĭ à¹Īาà¸ĩ
ز Ùĩر
Ġklient ów
ива ÑİÑĤ
ан г
׳ ×ļ
Ġg á»įn
Ãľ R
ìĺģ ìĥģ
Ġغ زة
ìĿĮ ìĿĦ
Ġbez po
Ġbezpo ÅĽ
ĠbezpoÅĽ redni
ĠاÙĦÙħ ÙĪØ§
ĠاÙĦÙħÙĪØ§ Ø·ÙĨ
ĠاÙĦÙħÙĪØ§Ø·ÙĨ ÙĬÙĨ
ãĤĮ ãģ¾ãģĻ
ĠмаÑĤ Ñĩ
×IJ ×ķף
Ġر سÙħÙĬ
ĠÑįк он
ĠÑįкон ом
ĠÑįконом иÑĩеÑģк
ãĥľ ãĥ¼
Ġд иÑĢ
ĠдиÑĢ ÐµÐºÑĤоÑĢ
ĠÑģк оÑĢо
à¸ļ ำ
à¸ļำ ร
à¸ļำร ุà¸ĩ
ĠÑĦ ÑĥÑĤ
ĠÑĦÑĥÑĤ бол
Ġ×IJ ×Ļ׾
Ġì¤ij êµŃ
ìľ ¤
eÄŁ e
à¹Ħ à¸ģà¹Ī
tra î
traî n
ĠÑĤ ÑĢÑĥб
à¹Ģà¸ļ ื
à¹Ģà¸ļื à¹īà¸Ńà¸ĩ
à¹ģม à¸Ļ
ĠتØŃ دÙĬØ«
Ġ׼ עת
ØŃ اسب
lı ģa
×§×Ļ ×Ļ×ŀ×Ļ×Ŀ
оÑģÑĤ ÑĮÑİ
à¸Ŀ ั
à¸Ŀั à¹Īà¸ĩ
Ø´ غÙĦ
ìĽ ¹
Ġкажд ого
Ġbölüm ü
หà¸Ļ ี
Ġistedi ÄŁi
Ġtr ưng
ãĥ Į
ฮ à¸Ń
Ø£ÙĨ Ø´
Ø£ÙĨØ´ طة
ĠاÙĦÙħ سÙĬ
ĠاÙĦÙħسÙĬ ØŃ
ลัà¸ģษ à¸ĵà¹Į
Ġn á»Ńa
à¸Ĺีà¹Ī à¸ķà¹īà¸Ńà¸ĩà¸ģาร
ÑĪ ÐµÐº
л Ñij
Ġש ×Ļ×Ķ
Ġש×Ļ×Ķ ×Ļ×Ķ
Ġkhu ôn
ĠÑĤÑĢеб ованиÑı
Ġ×ľ×¢ ×ĸ×ķר
ĠاÙĦع Ùħر
ราà¸Ħา à¸ĸูà¸ģ
ÙĩÙı ÙħÙĴ
ü st
üst ü
Ġден ег
Ġn ạ
à¸Ĥà¸Ļ ม
Ġбл аг
Ġблаг од
Ġблагод аÑĢ
ĠблагодаÑĢ Ñı
Ø¥ سÙĦاÙħ
à¸Ļิ ว
çŁ¥ ãĤīãģªãģĦ
Ø« ÙĤØ©
Ġг олоÑģ
×IJ×ķר ×Ĺ
Ġtr ứng
Ġод ном
ĠkoÅĦ cu
Ġ×ķ רק
Wi ÄĻ
WiÄĻ cej
Ġ×IJ ×Ļ׼×ķת
Ġ×IJ×Ļ׼×ķת ×Ļ
Ñģ оÑģ
Ġje żeli
以ä¸ĭ ãģ®
å°ı ãģķ
å°ıãģķ ãģª
олог ии
Ġоб ÑģлÑĥж
ĠобÑģлÑĥж ива
Ùĥت ابة
Ġê´Ģ ìĭ¬
×¢ ש×Ļר
Ġaras ındaki
ĠÑĢай она
ÙĪØ§ جب
Ġ×ij×Ĺ×Ļ ×Ļ
íķ´ ì£¼
Ġg óc
ай л
ĠT ình
æļ® ãĤī
æļ®ãĤī ãģĹ
æĻĤ ãģ«ãģ¯
ĠгоÑĢод е
Ġ׼×IJ ×Ļ׾
Ġ׼×IJ×Ļ׾ ×ķ
ĠC á»Ļng
ãģ©ãģĨ ãģĹãģ¦ãĤĤ
×Ĺ ×ķ×£
تØŃ رÙĥ
ĠÑģлов ам
à¸Īะ à¸Ĭà¹Īวย
ĠاÙĦÙħست ÙĤبÙĦ
ÙĤ ض
ÙĤض ÙĬ
×ijס ×ķפ
×ijס×ķפ ×ķ
iÄĻ Äĩ
ĠY ıl
Ø´ ÙĬØ®
à¸Ħุà¸ĵ à¸Īะ
ש×ŀ ×ķת
Ġت عرض
Ġanál ise
ĠÑģоб иÑĢа
à¹Ģà¸ŀ à¸Ĭ
à¹Ģà¸ŀà¸Ĭ ร
Ġв ели
Ġвели к
สั à¹īà¸Ļ
Ġpop ulação
รà¹Īวม à¸ģัà¸Ļ
×Ĺ ×ŀ
×Ĺ×ŀ ×Ļש×Ļ
ס ×Ļס
åĨħ ãģ§
Ġsob Äħ
ĠY ay
ĠYay ın
ãĥ¡ ãĥĭãĥ¥ãĥ¼
ĠпÑĢедоÑģÑĤав лÑı
ãģł ã썿ĢĿãģĨ
Ġê³ł ê°Ŀ
Ġод ним
à¹ĥà¸Ļ à¹Ģรืà¹Īà¸Ńà¸ĩ
Ġs á»ķ
ĠÐĹ Ð´ÐµÑģÑĮ
Ġизмен ениÑı
ĠìĿ¼ ìĿĦ
ãģªãģ® ãģł
клад Ñĭва
ÑĢ Ð¼Ð°
Ġ×ķ×ij ׼׾
تأ ÙħÙĬÙĨ
ĠпÑĢи ÑıÑĤ
ĠпÑĢиÑıÑĤ н
Ùħ Ùħار
ÙħÙħار سة
ãģ¨ãģª ãģ£ãģ¦
Ġج ÙħÙĬÙĦ
Ġì§ Ī
Ġì§Ī 문
Ġquest ão
i é
ié ndo
หà¹īà¸Ńà¸ĩ à¸ŀัà¸ģ
ãĥij ãĥ¼ãĥĪ
ÑĤвеÑĢж да
н Ñģкой
з ал
มุ à¹Īà¸ĩ
á» Ĭ
Ġ×Ķ×IJ×Ĺר ×ķ׳×Ķ
ĠTh ư
주 민
ĠاÙĦع ب
év én
évén ement
ÙĤÙĪ Ø§Ø¹Ø¯
د Ùı
ĠìķĬ ìĬµëĭĪëĭ¤
Ġë³´ 기
Ġyapıl ması
à¹Ģร าà¸ģ
à¹Ģราà¸ģ à¹ĩ
ØŃ ذر
ÙĤ صر
ãģ¦ãģĹãģ¾ ãģĦãģ¾ãģĹãģŁ
Ġà¹Ģà¸Ľà¹ĩà¸Ļ à¸ķà¹īà¸Ļ
ãģ¨ ãģ«
ãģ¨ãģ« ãģĭ
ãģ¨ãģ«ãģĭ ãģı
н ÑĨе
зв Ñĥк
ãģĹãĤĪãģĨ ãģ¨
ĠاÙĦصØŃ ÙĬØ©
Ġש×Ķ ×Ļ×ķ
ĠDi ÄŁer
ÙĤÙĦ ÙĤ
ãĤ¸ãĥ£ ãĥ³
Ġr á»Ŀi
Ġл еÑĩ
ĠлеÑĩ ениÑı
تب اد
تباد ÙĦ
צ פ×Ķ
à¸Ħวาม à¹Ģหà¹ĩà¸Ļ
ĠØ´ ب
Ġشب ÙĥØ©
ר ×Ļ×§
Ùħ عد
Ùħعد ات
dıģ ında
Ġ×ijש ׳×Ļ×Ŀ
Ġ×Ķ ×Ļשר×IJ׾
Ġ×Ķ×Ļשר×IJ׾ ×Ļת
Ġsı nav
׳צ ×Ļ×Ĵ
วัà¸ķ à¸ĸุ
ĠاÙĦبر ÙĦÙħ
ĠاÙĦبرÙĦÙħ اÙĨ
t ivitÃł
ãĤĵãģł ãĤįãģĨ
×§×Ļ ×Ļ×ŀ
ÙĦÙĬ Ùĥ
ĠÄij ò
ĠÄijò i
ĠÐĺн ÑĤеÑĢ
ĠÐĺнÑĤеÑĢ Ð½ÐµÑĤ
ãģ«ãģ¨ãģ£ãģ¦ ãģ¯
ãģ£ ãģĵ
×§ ×ķס
ست ØŃÙĤ
æķĻ ãģĪãģ¦
ãĥĢ ãĥ¡
ĠÙħÙĨ زÙĦ
à¹Ģà¸ĭ à¹ĩà¸Ļ
使 ãģĪãĤĭ
è¦ĭ ç©į
è¦ĭç©į ãĤĤãĤĬ
Ø£ Ùģ
Ø£Ùģ Ùĥار
Ġиг ÑĢов
ĠигÑĢов Ñĭе
Ġm ÄĻż
ĠmÄĻż czy
ĠmÄĻżczy zn
ĠاÙĦØŃ ÙĤÙĬÙĤÙĬ
ع بر
׼×ķ׾ ׳×ķ
íĿ ¥
×ŀ×IJ ×ķ×Ĺר
خت ص
ãĥŀ ãĥŀ
Ġ×IJ×Ĺ ×ķ×ĸ
í ĮĢ
Ġr á»iji
Ġв ÑĤоÑĢ
ĠвÑĤоÑĢ Ð¾Ð¹
Ġl ẫn
пÑĢ Ð¾Ð¼
пÑĢом ÑĭÑĪ
пÑĢомÑĭÑĪ Ð»ÐµÐ½
пÑĢомÑĭÑĪлен н
ĠоÑĤноÑĪ ÐµÐ½Ð¸Ñı
Ġs ứ
Ġм обилÑĮ
ĠмобилÑĮ н
ĠÑįÑĤ омÑĥ
Ġt ạp
ĠìĤ¬ ê±´
ĠìķĮ 볤
Ùĥ Ùı
ÙĥÙı ÙħÙĴ
Ġ×§ ×ķר×Ķ
ĠÑĦ иÑĢ
ĠÑĦиÑĢ Ð¼
Ġsık ıntı
׳ ׼
׳׼ ×ķף
ÙĪÙĦÙĪØ¬ ÙĬ
ØŃ اÙĨ
Ġlo ạn
Ġ×IJ׾ ×£
Ġm ắn
abh äng
abhäng ig
ĠÑĥÑĢов нÑı
Ġ׾×ij×ĵ ×ķ×§
ÙĬ ÙħÙĨ
lay ın
Ġh ải
Ġзав од
ĠìķĦ 주
สà¸ĸ า
สà¸ĸา à¸ļัà¸Ļ
Ġgüven lik
à¹Ģà¸Ķ à¹Īà¸Ļ
×ij×ĵ ×§
Ġë Ī
ĠëĪ Ħ
ĠëĪĦ 구
éĩįè¦ģ ãģª
รà¸Ńà¸ĩ รัà¸ļ
sch lie
schlie ÃŁen
Ġìĸ ¼
Ġìĸ¼ ë§Ī
Ġìĸ¼ë§Ī ëĤĺ
ÑĤи ки
íķľëĭ¤ ê³ł
ãģłãģ£ãģŁ ãĤī
Ġ×Ķ ×Ļ×ĺ×ij
ãģªãģijãĤĮãģ° ãģªãĤīãģªãģĦ
â Ì
Ã¢Ì £
Ġph ạt
ak Ä±ÅŁ
ãģ¦ãģĹãģ¾ ãģĦãģ¾ãģĻ
à¹Ģà¸ĭ à¹ĩ
ĠС егоднÑı
Ġinsan ların
Ġdévelop pe
ת פר
תפר ×Ļ×ĺ
اÙĨت شار
ê° ij
Fran çois
Ø£ÙĦ ع
Ø£ÙĦع اب
ãĤĴ è¶ħ
ãĤĴè¶ħ ãģĪ
Ġê°Ļ ìĬµëĭĪëĭ¤
ãĤ³ ãĥ¬
ĠмеÑģÑı ÑĨев
íĮ ħ
ĠاÙĦج اÙħعة
ìĿ¸ íĦ°
ìĿ¸íĦ° ëĦ·
×ĵר ×ķש
ĠÙĪØ£ شار
ĠпÑĢав ила
ãģĿãģĵ ãģ«
×Ĺ ×ŀ×ĵ
à¹Ģหà¸ķุ à¸ģารà¸ĵà¹Į
Ġê²½ íĹĺ
ãģ¶ ãĤĬ
׾ ש
׾ש ×ķף
à¹Ģ à¸ĸ
ĠDo ÄŁu
ĠиÑģполÑĮзов ание
Ġçoc uÄŁu
магазин е
ĠÄiji á»ĥn
Ġas lı
Ġaslı nda
Ġdoen ça
Ġس اع
Ġساع ات
ĠиÑģполÑĮзов аниÑı
ר ×ķצ×Ļ×Ŀ
ĠзнаÑĩ иÑĤ
ĠÑĢаР¼
ĠÑĢам каÑħ
거 리
Ġп ÑĭÑĤа
ãĥģ ãĥ³
Ġпо Ñģк
ĠпоÑģк олÑĮ
ĠпоÑģколÑĮ кÑĥ
إ بر
إبر اÙĩ
إبراÙĩ ÙĬÙħ
ĠÑĤÑĢ ÐµÑħ
ĠGen ç
س ÙĪÙģ
Ġve ÃŃculo
ĠNg ân
ĠоÑĩеÑĢ ÐµÐ´ÑĮ
à¸Ħร ึà¹Īà¸ĩ
×IJ ×ij×Ļ
à¸ķ à¹īม
ãĤĴè¡Į ãģĦ
ĠاÙĦساب ÙĤØ©
на ÑĨи
наÑĨи она
наÑĨиона лÑĮн
Ġgest ión
ت ÙĤد
ĠاÙĦبÙĬ اÙĨ
ĠاÙĦبÙĬاÙĨ ات
ĠاÙĦ اÙĨتخاب
ĠاÙĦاÙĨتخاب ات
à¹Ģà¸Ĭ à¹Īา
×ĵ ×IJ×Ĵ
Ġ׾×Ĵ ×ŀר×Ļ
Ġت ØŃتاج
Ġth ôn
à¸ķ à¹īà¸Ńà¸Ļ
à¸ķà¹īà¸Ńà¸Ļ รัà¸ļ
女 ãģ®
女ãģ® åŃIJ
Ġth ợ
Ø· ØŃÙĨ
ารà¹Į à¸Ķ
ת ×ŀ×Ļ×ĵ
ĠÑģам Ñĭм
Ġìĭľ íĸī
إ صد
إصد ار
ĠNgh á»ĩ
ìķ ķ
س ئ
سئ ÙĦ
à¸Ń าร
à¸Ńาร ม
à¸Ńารม à¸ĵà¹Į
à¹ģ ฮ
׳×ĺ ׾
Ġì¢ĭ ìķĦ
×ķ׾ ׾
Ġ×ij ×Ľ×ª×ij
ãĤ« ãĥ©
צע ×Ļר×Ļ×Ŀ
تعب ÙĬر
Ġ×ŀ קר×Ķ
ĠÑĦак ÑĤоÑĢ
Ġت ÙħاÙħ
ĠتÙħاÙħ ا
ëį ķ
Ġv ưá»Ŀ
Ġvưá»Ŀ n
Ġd Ä±ÅŁÄ±
ãģĦ ãģ¡
Ġ׾ק ׳×ķת
ĠاÙĦع ÙĦاÙĤات
п Ñĥб
пÑĥб ли
Ø¥ ÙĬÙħ
Ø¥ÙĬÙħ اÙĨ
à¸Ńำ à¸Ļา
à¸Ńำà¸Ļา à¸Ī
åIJ« ãģ¾ãĤĮ
ãĤĭ ãģŁãĤģãģ«
ס ×Ĵ
ס×Ĵ ׳×ķף
تØŃ دÙĬ
Ġaup rès
ĠاÙĦج Ùĩا
ĠاÙĦجÙĩا ز
Ġ×ŀ ת×Ĺת
ен нÑĥÑİ
Ġз им
à¸ģา à¹ģà¸Ł
Ġ×ijת ×ķר
Ġngh è
Ġnghè o
ĠÐĽ Ñİ
ĠÐĽÑİ Ð±
תק צ×Ļ×ij
×ŀ×¢ ש×Ķ
ĠاÙĦبÙĬ ت
צ ×Ļפ
ĠобÑıз ан
ĠM á»Ĺi
ĠТ ÑĥÑĢ
ĠÙĪØ¨ اÙĦت
ĠÙĪØ¨Ø§ÙĦت اÙĦÙĬ
Ġdéc ision
Ġب د
Ġبد أت
Ġc ục
Ġb ask
Ġbask ı
Ġhat ırl
Ġhatırl a
å°ı ãģķãģĦ
Ġgerçek ten
à¸ľ ัà¸ģ
åı¯èĥ½ ãģª
×ŀ×IJ ס
Ġcr ÃŃtica
ĠìĿĺ ìĽIJ
عÙĤ ÙĪØ¯
×ĺ ׼׳
×ĺ׼׳ ×ķ׾×ķ×Ĵ×Ļ×Ķ
è¨Ģ ãģĪãģ°
ĠÙĤ ÙĨا
ĠÙĤÙĨا Ø©
ĠìĿ´ê²ĥ ìĿĢ
ت صر
à¸Ł ัà¸Ļ
ĠÑĢе ÑĨеп
ĠÑĢеÑĨеп ÑĤ
ĠبÙĨ Ù쨳
ÑĢо ÑĪ
ĠмаÑĢ ÑĤа
Ġson ras
Ġsonras ı
×ķ×ij ש
ãĥª ãĤ¹ãĤ¯
ĠFranç ais
á» ļ
ê° Ķ
Ġ×Ķ×ijר ×Ļת
פ ×Ļצ
פ×Ļצ ×ķ×Ļ
ĠÙĦÙħا ذا
ĠÐļи ев
ĠÑģ мÑĭÑģл
ê¸Ī ìľµ
ãĤ·ãĥ£ ãĥ«
ãĥ© ãĤ¤ãĥĪ
ìĽ ĥ
×ŀ ×Ĺר
ãĨ į
Ġkullan ım
Ġ×IJצ׾ ׳×ķ
Ġt Ãłn
ãĥı ãĥ¼
ãģ¨ ãģ¨ãĤĤ
ãģ¨ãģ¨ãĤĤ ãģ«
ÑĢ ÐµÐ³
ÑĢег и
ÑĢеги он
ãģªãģı ãģªãĤĭ
Ġch ảy
Ġج ÙĩØ©
ÅĦsk iej
à¸Ńี à¹Ģม
à¸Ńีà¹Ģม ล
ãģį ãģ£ãģ¨
ĠìĺĪ ìĤ°
Ġkit abı
Ġedu cação
Ġbul uÅŁ
олог иÑı
Ġкон кÑĢ
ĠконкÑĢ ÐµÑĤ
×Ĵ ×Ļר
ĠпÑĢед лаг
ĠпÑĢедлаг аеÑĤ
ĠY ên
Ġíķľ ë²Ī
Ġ×ŀ ר׼×ĸ×Ļ
à¹Ģà¸Ľà¸´à¸Ķ à¹Ģà¸ľà¸¢
ÑĤвеÑĢ Ð´
ĠH á»ĩ
ĠÐĵ ÑĢ
à¸Ŀ à¹īา
×Ķ ×©×§
×Ķשק ×¢×Ķ
Ġна Ñĥк
ìłIJ ìĿĦ
Ġн елÑĮ
ĠнелÑĮ з
ĠнелÑĮз Ñı
г ин
ĠB öl
ĠBöl ge
Ġв ла
Ġвла ÑģÑĤи
à¹Ģà¸Ļ à¹ĩ
à¹Ģà¸Ļà¹ĩ à¸ķ
ê³ ¨
Ġö ld
Ġöld ür
׼׳ ×¢
ĠاÙĦÙĩ ÙĬئة
ت ارÙĬØ®
ĠÐij ÑĢ
ĠÑģ мож
ĠÑģмож еÑĤе
ĠL úc
à¹Ħà¸Ľ à¸ĸึà¸ĩ
ĠBakan ı
Ġerklä rt
ĠÐIJ на
Ġsc ène
åķı ãģĦ
åķıãģĦ åIJĪãĤıãģĽ
ÙħÙĩ ÙĨد
ÙħÙĩÙĨد س
Ġн азвание
ив аниÑı
ãĤĴ å¤īãģĪ
ä»ĺãģį åIJĪ
ãĥij ãĤ½
ãĥijãĤ½ ãĤ³ãĥ³
æĺİ ãĤī
æĺİãĤī ãģĭ
à¹Ģà¸Ńà¸ģ สาร
à¹Ģà¸ģิà¸Ļ à¹Ħà¸Ľ
л еп
ãģĹãģŁ ãĤĤãģ®
ĠC âm
ĠCâm ara
×§×ķ׾ ׳×ķ×¢
Ġ×ij×Ĵ ×Ļף
Ġoc zy
Ġoczy wiÅĽcie
att ivitÃł
ãĥĵ ãĥ¥ãĥ¼
Ġeduc ación
İ YE
ê¹Į ìļĶ
ãĤ¨ ãĥªãĤ¢
н еÑģÑĤи
Ġm óg
Ġmóg ÅĤ
Ġ×§×ĺ ׳×Ļ×Ŀ
ĠPr ä
Ġ×ľ×¢ ×ij×ķר
بÙĨ Ùī
з ол
зол оÑĤ
Ġwn ÄĻtr
ĠwnÄĻtr z
Ġconstr ução
รัà¸ļ รà¸Ńà¸ĩ
س جÙĨ
Ġ×§ ×ķ׳
ס ×Ļפ×ķר
ĠÙħ دÙī
رض Ùī
п лав
ï¼ ¥
Ġil a
Ġila ç
ãĤĭ ãģ¹ãģį
ĠÙħ ÙĪÙĤÙģ
à¸ģร ุ
à¸ģรุ à¸ĵา
chodzÄħ c
ĠÑĤÑĭ Ñģ
Ðķ вÑĢо
ĠÙĬ ØŃدث
ãĥ¡ ãĤ¤ãĥ³
ĠاÙĦص ØŃÙĬ
ĠÐĶ Ð°Ð½
دع اء
ãĤ´ ãĥ¼ãĥ«
ש ×ł×ª×Ļ
×©×ł×ª×Ļ ×Ļ×Ŀ
à¸Ķà¹īวย à¸ģัà¸Ļ
Ġol acaģı
Ġ×ij ×ŀ×Ĺ×Ļר
×Ķ ×§
×Ķ×§ ×ŀת
ãĥ¢ ãĥİ
ĠçalÄ±ÅŁ tı
Ġjó venes
ãģĦãģı ãĤī
ĠÙħ عدÙĦ
ĠC Å©ng
ĠSeg ún
Ġdönem de
Ġ׾ ×Ļ×ĵ×Ļ
ãģį ãģ¡
ãģįãģ¡ ãĤĵ
ãģįãģ¡ãĤĵ ãģ¨
Ù쨱 ÙĨس
Ù쨱ÙĨس ا
åIJij ãģį
Ġcamp aña
ĠÑģам оÑģÑĤоÑı
ĠÑģамоÑģÑĤоÑı ÑĤелÑĮно
á» Ģ
ÙĤ ÙĪØ§
س ÙĦاØŃ
à¸ģระ à¹ģ
à¸ģระà¹ģ ส
ĠполÑĮз Ñĥ
n qu
nqu ête
รà¹Īวม à¸ģัà¸ļ
ëĬIJ ëĥIJ
à¸Ĺีม à¸Ĭาà¸ķิ
Ġyıll ık
ìĬ ¬
ĠØ£ صØŃاب
ill é
Ġdó la
Ġdóla res
Ġк ож
Ġкож и
ล à¹īà¸Ń
à¹Ģรีย à¸ļร
à¹Ģรียà¸ļร à¹īà¸Ńย
à¹Ģà¸ŀ ิ
à¹Ģà¸ŀิ à¹Īà¸ĩ
ÑĢиÑĤоÑĢ Ð¸
Ġí ijľ
Ġíijľ íĺĦ
ĠпеÑĢ ÐµÐ²
ĠпеÑĢев од
פ×Ĵ ×Ļ×¢×Ķ
ĠdeÄŁerlendir me
Ùģ Ø§Ø¦
ĠвÑĭ год
ınız ı
×ķ׼ ×Ļ×Ĺ
ĠдоÑģÑĤ иг
Ġng Ãłn
æĢĿ ãģ£ãģŁ
ĠÐķ ÑģÑĤÑĮ
ĠاÙĦر غÙħ
ĠzwiÄħz ane
رب ط
à¸Ļ ึà¸ĩ
Ġ׾×Ĺ ×ķ×§
Ġszczeg óln
Ġszczególn ie
Ġبا ستخداÙħ
ĠfÃŃs ico
ע ס
עס ×ķ×§
سÙĦ ÙĪÙĥ
Ġا ØŃد
Ñĩ ÑijÑĤ
×ĸ׼ ×Ķ
Ġl á»ĩnh
ĠÙĪ ØŃت
ĠÙĪØŃØª Ùī
à¸Ħวาม สามารà¸ĸ
à¸Ńยูà¹Ī à¹ģลà¹īว
à¸ģาร à¹Ģà¸Ķิà¸Ļà¸Ĺาà¸ĩ
تخ ذ
צ×Ļ ×ķ×ĵ
ĠاÙĦØ£ س
ĠاÙĦأس ÙĩÙħ
Ġt á»ĩ
ãģ£ãģ¦ ãģĦãģ¦
สร ุ
สรุ à¸Ľ
Ġком ÑĦ
ĠкомÑĦ оÑĢÑĤ
ìĺ¤ ëĬĶ
ĠÑĢаз в
ĠÑĢазв ива
л анд
h änge
ĠبÙĨ سبة
à¹Ģà¸Ĥ ียว
עצ ×Ŀ
Ġ׾ ×ľ×Ľ×ª
Ñģо ÑĨиалÑĮн
Ġëĭ¤ìĿĮ ê³¼
Ġרש ×ķ×ŀ
×ŀר ×Ĺ×ij
س ÙĤØ·
Ġalan ı
ĠÄij á»ĩ
é£Łãģ¹ ãĤĭ
à¸Ķ ึà¸ĩ
Ġgegen über
ĠبÙĩ ذÙĩ
à¸ĸืà¸Ń à¹Ģà¸Ľà¹ĩà¸Ļ
ëķ ħ
à¸Ħà¸Ļ à¹Ħà¸Ĺย
ãĤ¢ ãĤ¦
ãĤ¢ãĤ¦ ãĥĪ
ศ ัà¸ģ
ศัà¸ģ à¸Ķิ
ศัà¸ģà¸Ķิ à¹Į
ÙĤÙĪ Ø§ÙĨ
ÙĤÙĪØ§ÙĨ ÙĬÙĨ
Ġhá»Ļ p
ãģªãģıãģª ãģ£ãģ¦
Ġ×IJ ×ŀ׳
Ġ×IJ×ŀ׳ ×Ŀ
à¹Ģà¸ķ ืà¸Ńà¸Ļ
ĠзавиÑģ им
ĠзавиÑģим оÑģÑĤи
ת ×Ļ×IJ
ת×Ļ×IJ ×ķר
å§ĭãĤģ ãģŁ
Ġng á»į
Ġngá»į t
íĴ į
ê³¼ ìŀ¥
Ġb ại
ãģ§ãģį ãģ¦
Ġcomeç ar
à¸Ľà¸£ าà¸ģ
à¸Ľà¸£à¸²à¸ģ à¸ı
Ġгод Ñĭ
м еÑģ
ĠاÙĦÙħست ÙĪÙī
ĠÑģам Ñĭе
л леÑĢ
ãģ£ãģ¦ãģĹãģ¾ ãģĦãģ¾ãģĻ
ãģ¨ãģ® ãģĵãģ¨
bi ó
à¸ģล à¹Īà¸Ńà¸ĩ
ĠاÙĦز ÙĪØ¬
ãģ«è¡Į ãģ£ãģŁ
à¸Ħà¹Ī à¸Ńà¸Ļ
à¸Ħà¹Īà¸Ńà¸Ļ à¸Ĥà¹īาà¸ĩ
ĠbaÄŁ l
ĠbaÄŁl ant
ĠbaÄŁlant ı
確 ãģĭ
確ãģĭ ãģ«
ãĥľ ãĥ¼ãĥ«
çµĤ ãĤıãĤĬ
ש ×ŀר
à¸Ĺีà¹Ī สามารà¸ĸ
ÙĦ زÙħ
д аеÑĤÑģÑı
รัà¸ļ à¸Ľà¸£à¸°
รัà¸ļà¸Ľà¸£à¸° à¸Ĺาà¸Ļ
å¤ī ãĤıãĤĬ
ï¼ ¢
ĠìĺĪìĪĺ ëĭĺ
ãĤĪãģĨ ãģ¨
มัà¸ģ à¸Īะ
ĠH ương
ÙĨ Ù쨰
×ŀ×ĵ ×ĵ
ĠìĿ¸ ìłķ
Ñħод иÑĤÑĮ
ĠзавиÑģ иÑĤ
×ķ×ĵ ×Ļ×¢
ãģĵãģ¨ãģĮ ãģĤãĤĬãģ¾ãģĻ
ع راÙĤ
سط ØŃ
à¸ģำ à¹Ħร
ëĵ¤ ëıĦ
×Ļצ ×Ļר×Ķ
ãģĨ ãģĵãģ¨
ÙĦا ØŃÙĤ
ãģĦ ãĤĮãģ°
ĠиÑģполÑĮз ÑĥÑİÑĤ
ĠB ợi
Ġשק׾ ×Ļ×Ŀ
ÑĨи кл
ÐIJ Ðŀ
Ġ×ijש ׳×Ķ
ÙĨØ´ Ø·
Ġש ×Ļ׳×ķ×Ļ
Ġש×Ļ׳×ķ×Ļ ×Ļ×Ŀ
Ġpobl ación
ĠH ưng
ระ ว
ระว ัà¸ĩ
رÙĬاض Ø©
ر صد
تÙĤ ÙĦÙĬ
تÙĤÙĦÙĬ د
Ġülk em
Ġülkem iz
à¸Ĭ ะ
ãĤ¯ãĥª ãĥ¼ãĥł
èģŀ ãģĦãģŁ
Ġwa ż
Ġważ ne
ê±° ëĵł
ê±°ëĵł ìļĶ
×ŀ×IJ ×ij×§
×Ĺ×ĵ ש×ķת
ĠW roc
ĠWroc ÅĤaw
ĠKü ltür
s ist
sist ência
×¢×ĸר ×Ķ
Ġg ương
รà¹īาà¸Ļ à¸Ħà¹īา
ĠÙĪØ£ ÙĪØ¶ØŃ
ánd ose
ãĤ· ãĥ¼ãĥ³
×IJ׳ ר×Ĵ
×IJ׳ר×Ĵ ×Ļ×Ķ
ãģªãģĦ ãģ§ãģĻ
Ġkh á»§ng
Ġ문 ìĦľ
Ġ×ij ×ĵ×ijר
×ĵ ×Ļ×ķ
×ĵ×Ļ×ķ ×ķ×Ĺ
Ġré gl
ÙħÙĪ Ø§Ø¯
об оÑĢ
обоÑĢ Ð¾ÑĤ
Ġ×Ķ ×ij׾
Ġ×Ķ×ij׾ ×ķ×Ĵ
ØŃ اÙħ
ĠاÙĦع اص
ĠاÙĦعاص ÙħØ©
пеÑĢ Ð°ÑĤоÑĢ
ت Ø®ÙĦ
تخÙĦ ص
ãģŁãģł ãģĹ
ت سÙħ
à¹Ĥรà¸ĩ à¸ŀ
à¹Ĥรà¸ĩà¸ŀ ยา
à¹Ĥรà¸ĩà¸ŀยา à¸ļาล
ĠY ük
ĠYük sek
Ġש ׳×Ļת
Ġש׳×Ļת ף
liÄŁ e
Ġפ ת
Ġפת ×ķ×Ĺ
Ġbe ÄŁ
ĠbeÄŁ en
Ġ×ŀ ×ķר
Ġ×ŀ×ķר ׼×ij
Ġرس اÙĦØ©
íĨµ ìĭł
Ġaval ia
Ġavalia ções
Ġman h
Ġmanh ã
Ġìķ ŀ
Ġìķŀ ìľ¼ë¡ľ
ÙĤ تر
ÙĤتر ØŃ
à¹Ģà¸ģ ืà¸Ń
à¹Ģà¸ģืà¸Ń à¸ļ
Ġpropos é
Ø£ Ùħا
Ø£Ùħا ÙĥÙĨ
ĠÐŀ Ðŀ
ĠÐŀÐŀ Ðŀ
ÙħÙĤ ار
ÙħÙĤار ÙĨØ©
ëĦ IJ
ãģĦãģŁãģł ãģı
ÙĤ ÙĬÙĦ
Ġна ÑĪиÑħ
ãĤ« ãĥĥãĥĹ
×Ĺ׾ ת
Ġëĭ¤ ë§Į
à¸Ĺัà¹Īว à¹Ĥลà¸ģ
ãĥį ãĤ¿
ØŃس اس
ãģ«ãģª ãĤĮ
ج ائ
جائ زة
é change
é conom
économ ie
Т Ðĺ
סת ׼׾
à¸Ĺัà¹īà¸ĩ สà¸Ńà¸ĩ
ĠاÙĦØ® اÙħ
ĠاÙĦخاÙħ س
×§ ×ĺ×¢
au waż
à¸ľà¸¹à¹ī à¸Ĭาย
à¹ģà¸Ľà¸¥ à¸ģ
åIJĮæĻĤ ãģ«
зн аниÑı
ãģĦãģŁãģł ãģįãģ¾ãģĹãģŁ
Ġ×ŀ×ij ׾×Ļ
à¸Ĥà¸Ń à¹ĥหà¹ī
ĠاÙĦت ربÙĬØ©
Ġdécou vert
Ġżyc iu
apr ès
Ġy ab
Ġyab anc
Ġyabanc ı
ĠbaÅŁ layan
ìĹĪ ëįĺ
Ġhes abı
Ġë§Į ìķ½
ë§ Īëĭ¤
ĠTh ánh
ãĥ´ ãĤ¡
à¸Ľà¸£à¸±à¸ļ à¸Ľà¸£
à¸Ľà¸£à¸±à¸ļà¸Ľà¸£ ุà¸ĩ
ĠM ặc
à¹Ģหà¸ķุ à¸ľà¸¥
ĠÐij ез
Ġcapac itÃł
ÅĤe ÅĽ
ĠпÑĢе им
ĠпÑĢеим ÑĥÑīеÑģÑĤв
ĠÅļ wiÄĻt
Ġpubli é
×ŀ×¢ צ×ij
Ùħشار Ùĥات
à¸łà¸² ษ
à¸łà¸²à¸© ี
Ġdeux ième
ĠÙħØŃ اÙ쨏
ĠÙħØŃاÙ쨏 Ø©
ĠSch ön
ï½ ¤
Ġ×Ķ ×ij×¢
Ġ×Ķ×ij×¢ ×Ļ×Ķ
ĠÙĪØ§ÙĦ ÙĦÙĩ
è¨Ģ ãģ£ãģŁ
à¸ķ à¹īาà¸Ļ
วร รà¸ĵ
à¸Ĺิ ศ
ĠbaÅŁ ına
Ġmog ÄĻ
ש ×Ļפ×ķר
ĠÙĪ Ø¹Ø¯
ĠÙĪØ¹Ø¯ Ùħ
Ġhistó rico
Ġk ısı
ĠìĿ´ ê²Į
ĠPol ÃŃtica
ĠÑģиÑĤÑĥ аÑĨии
ĠkoÅĦ ca
×ij×ĵ ×Ļ×§×Ķ
ĠاÙĦسÙĬ ارات
ãģªãĤī ãģ°
ãĤµ ãĥ©
ãĤĭãģĵãģ¨ãģĮãģ§ãģį ãĤĭ
Ġdecis ão
×ķ ×ķ×ĵ
lä ss
läss ig
Ġ׾ ×Ļשר×IJ׾
ĠÙĬ أتÙĬ
ר ×ķ×ĸ
ö ÄŁ
Ã¶ÄŁ ret
Ã¶ÄŁret im
Ġд ек
Ġдек аб
Ġдекаб ÑĢÑı
Ġש ×Ĺ×ķר
ãģ¦ãģıãĤĮ ãģŁ
عب ارة
Ġélect rique
ĠاÙĦتÙĨ ÙħÙĬØ©
جر Ùī
ĠìĪĺ íĸī
à¸Ĺ ู
ĠÑĢе алÑĮно
Ñģп оÑģоб
à¸Ħล à¹īาย
Ġس عÙĪØ¯
ön ü
ĠÙģ ÙħÙĨ
تÙĥ ÙĪ
تÙĥÙĪ ÙĬÙĨ
ĠкаÑĩ еÑģÑĤво
ĠконÑĤ ак
ĠконÑĤак ÑĤ
Ġsöz leÅŁme
à¸Ń à¹īาà¸ĩ
Ġت ÙĪÙģ
ĠتÙĪÙģ ÙĬر
×Ķ×ĸ ×ĵ
×Ķ×ĸ×ĵ ×ŀ׳×ķת
ĠØ·ÙĪÙĬÙĦ Ø©
Ġtér mino
Ġ×IJ ×Ļפ×Ķ
ãĥĵ ãĥ«
ส à¹Ĥม
สà¹Ĥม สร
ĠاÙĦ اث
ĠاÙĦاث ÙĨÙĬÙĨ
ев иÑĩ
Ġopin ión
à¸Ľ วà¸Ķ
åı¤ ãģĦ
ร à¹Īา
ĠB iaÅĤ
ĠÑģÑĤ ал
ĠÑģÑĤал о
ó logo
ĠìķĦ ëĭĪëĭ¤
Ġ×IJ ×Ļת
Ġ×IJ×Ļת ×ķ
à¹Ģหà¹ĩà¸Ļ วà¹Īา
à¸ļ ารà¹Į
çĦ ¼
çĦ¼ ãģį
ĠìĿ´ìļ© ìŀIJ
ĠнекоÑĤоÑĢ Ñĭе
ks z
ksz taÅĤ
ksztaÅĤ c
ãĤŃãĥ£ ãĥĥãĤ·
ãĤŃãĥ£ãĥĥãĤ· ãĥ³ãĤ°
Ġro ÅĽ
ĠroÅĽ lin
ÑĢаж а
×ij׳×Ļ ×Ļ×Ķ
à¸Ľà¸£ สิ
à¸Ľà¸£à¸ªà¸´ à¸ķ
Ġgörd ü
×ŀ׳×Ķ ×Ļ×Ĵ
å¤īãĤı ãģ£ãģ¦
Ġ×IJ ×Ķ
Ġ×IJ×Ķ ×ijת×Ļ
à¹Ģร à¹Īà¸ĩ
Ġön ünde
Ġê·¸ ëĥ¥
пол иÑĤ
полиÑĤ иÑĩеÑģк
ãĥ¡ ãĥĩãĤ£
ãĥ¡ãĥĩãĤ£ ãĤ¢
ĠDet ay
ĠDetay lı
ĠاÙĦصÙģ ØŃØ©
à¸ģาร à¹Ģà¸ĩิà¸Ļ
Ġìµľ ê·¼
׼ ש׾
ï¼ ©
вÑĪ ÐµÐ³Ð¾
íķĺ ìĭ¤
ĠÐŃ ÑĤ
ĠÐŃÑĤ оÑĤ
ส ื
สื à¸ļ
Ġng ừng
ĠдокÑĥменÑĤ ов
дав аÑĤÑĮ
ĠاÙĦشخص ÙĬØ©
Ġצ ×¢×Ļר
در Ùĥ
س ØŃب
à¹Ħมà¹Ī à¸Ħà¹Īà¸Ńย
Ġ×Ķ×ŀ×§ ×ķ×ŀ×Ļ
สัà¹Īà¸ĩ à¸ĭืà¹īà¸Ń
Ġê·¸ê²ĥ ìĿĦ
ãģĤãĤĭ ãģĦ
ãģĤãĤĭãģĦ ãģ¯
×IJ×ķ×ĺ ×ķ×ij
×IJ×ķ×ĺ×ķ×ij ×ķס
к ÑĨион
ĠÐľ ожно
ãģı ãģł
ãģıãģł ãģķ
ĠинÑĦоÑĢм аÑĨиÑı
ï» Ł
Ġìŀij ìĹħ
Ġ×Ļ ×ķסף
إ دارة
ĠاÙĦØŃ اج
×ł×¡ ×Ļ×¢×Ķ
из аÑĨиÑı
×IJ׾ ×ij
×IJ׾×ij ×ķ×Ŀ
п ед
Ġ×§×ĺ ׳×Ķ
ĠÙĨÙ쨳 Ùĩا
ĠMinist ério
Ġп ен
Ġпен Ñģи
ãĥIJ ãĥ©ãĥ³ãĤ¹
Ġ×Ķת ×ķר×Ķ
Ġt ạm
ĠìĹŃ ìĭľ
ï½ ¡
Ġth á»±
Ġ ısı
ì» ¨
ãģĹãģ£ãģĭãĤĬ ãģ¨
Ġx ưa
Ġc ặp
×Ĺ ×Ļ×ij×ķר
วัà¸Ĵà¸Ļ à¸ĺรรม
st är
stär ke
ĠÑģам Ñĭй
p isa
pisa Äĩ
ĠoluÅŁ an
ĠاÙĦØ¥ ÙħاÙħ
ĠcÄĥ ng
Ġgü nl
Ġgünl ük
Ġ׳ש ×IJר
Ġkhi á»ĥn
ç¶ļ ãģijãĤĭ
stit ución
Ġcapac ité
Ġj aki
Ġjaki ÅĽ
вÑĪ Ð¸Ñģ
вÑĪиÑģ ÑĮ
פע×ķ׾ ×ķת
ĠØŃ ÙĬات
ĠØŃÙĬات Ùĩ
Ġник огда
ÐĽ Ь
Ġ×Ķ×¢ ×ķ×ij
Ġ×Ķ×¢×ķ×ij ×ĵ×Ķ
Ġch Ãło
หลาย à¹Ĩ
ĠÑı н
ĠÑıн ваÑĢ
ĠÑıнваÑĢ Ñı
à¸Īำà¹Ģà¸Ľà¹ĩà¸Ļ à¸ķà¹īà¸Ńà¸ĩ
Ġhö her
ãģķãĤĮãģ¦ ãģĦãģŁ
สà¸ĩ สั
สà¸ĩสั ย
ĠاÙĦ اس
ĠاÙĦاس ÙĦاÙħ
ĠاÙĦØ´ Ùħس
สà¸ĸาà¸Ļ ี
ãĤ¯ãĥ© ãĤ¹
à¸ŀร ร
à¸ŀรร à¸Ħ
p õ
põ e
Ġpor ém
à¸Ľà¸£à¸° สà¸ĩ
à¸Ľà¸£à¸°à¸ªà¸ĩ à¸Ħà¹Į
powied zie
powiedzie Äĩ
Ġмог Ñĥ
Ġж ел
Ġжел ез
ĠاÙĦØ« ÙĤ
ĠاÙĦØ«ÙĤ اÙģÙĬ
ĠпÑĢав ило
Ġgdy ż
פש ×ķ×ĺ
ÑĢабоÑĤ ка
ĠÙĥ رة
ش دد
Ùħار Ùĥ
Ùħ ÙĥØ©
Ġпод пиÑģ
×ĺ×ķ ×ķ×Ĺ
ĠÅĽ c
ĠÅĽc ian
Ġر جاÙĦ
Ġ×ª×ľ ×ķ×Ļ
и ÑĪ
иÑĪ ÑĮ
Ġmé dec
Ġmédec in
ëįĶ ëĿ¼ëıĦ
ĠÑĤеб Ñı
Ġ׾×Ķ ×ķס×Ļ×£
ãģĬ 話
Ġà¹ģà¸ķà¹Ī à¸ģà¹ĩ
د اÙģ
داÙģ Ø¹
ĠC ùng
ãĥ»ãĥ» ãĥ»ãĥ»
ê¶ ģ
Ġdeber ÃŃa
หà¸Ļà¹Īวย à¸ĩาà¸Ļ
Ġva ÌĢ
Ġעצ ×ŀ
Ġעצ×ŀ ×Ŀ
à¹Ģà¸Ĭืà¹Īà¸Ń วà¹Īา
שק ע
Ġ×Ķ ×Ľ×ķ׾
Ġ×Ķ׼×ķ׾ ׾
ни бÑĥд
нибÑĥд ÑĮ
ĠëĦĪ íĿ¬
Ġоб ÑĢаÑī
ĠобÑĢаÑī а
Ġ×¢×ij×ķ×ĵ ת
ĠاÙĦÙħÙĨت خب
ıy ord
ıyord u
ÙĪ Ø°
×Ĺש ×Ļ×ij×ķת
Ġ×Ķ×¢ ×Ļ×§
Ġ×Ķ×¢×Ļ×§ ר×Ļ
ì¢ Į
ยุ à¹Ĥร
ยุà¹Ĥร à¸Ľ
Ġа пÑĢ
ĠапÑĢ ÐµÐ»Ñı
sz ed
szed ÅĤ
д он
à¹Ģà¸ķิ à¸ļ
à¹Ģà¸ķิà¸ļ à¹Ĥà¸ķ
кол о
Ġkażde j
å¸ °
帰 ãĤĬ
Ġмил ли
Ġмилли он
ç¾İåij³ ãģĹãģĦ
ت ÙĤار
تÙĤار ÙĬر
ĠìĿ´ 루
ĠìĿ´ë£¨ ìĸ´
Ġsprzeda ż
×Ķ ×ķצ×IJ×ķת
ãĤ¢ãĤ¯ ãĤ»
ãĤ¢ãĤ¯ãĤ» ãĤ¹
ר ×ķ×¥
ĠгоÑģÑĥдаÑĢÑģÑĤв енн
Ø£ ØŃÙĥ
Ø£ØŃÙĥ اÙħ
ĠoluÅŁ u
ĠA ç
ĠAç ık
ãĤ¸ ãĥ¼
ç´ł æĻ´
ç´łæĻ´ ãĤīãģĹãģĦ
Ġ×ijש×ij ×ķ×¢
ب ذ
بذ ÙĦ
สา à¹Ģหà¸ķุ
Ġpoz osta
Ġpozosta ÅĤ
ØŃر Ùħ
Ġimport ância
leÅŁtir me
Ġд ÑĢев
Ġmó vil
ĠA ynı
Ġна лог
Ġналог ов
Ġ×Ĺ ×Ļפ×Ķ
ĠÑĦоÑĢм Ñĥ
à¸Ĺà¸Ķ สà¸Ńà¸ļ
ĠksiÄħż ki
Ġma ÅĤe
Ùħس Ø£ÙĦ
ÙħسأÙĦ Ø©
ï¼¾ ï¼¾
ç ãeste
év iter
Ġкон ÑģÑĤÑĢÑĥк
ĠконÑģÑĤÑĢÑĥк ÑĨи
ï¾ ŀ
Ġת×ķ׼ ׳
ãĤ¹ãĥĪ ãĥ¬ãĤ¹
ĠاÙĦاÙĤتصاد ÙĬ
×ŀ×ĵ ×Ļ
Ġw ÅĤad
ĠwÅĤad z
Ø® ÙĪÙģ
ĠмаÑĤеÑĢиал ов
ãģ¨ãģ£ãģ¦ ãĤĤ
Ġznaj du
Ġznajdu jÄħ
Ùģ Ø¦Ø©
ãģ©ãģ® ãĤĪãģĨãģª
æĬij ãģĪ
׳ ×Ĺ׾
Ġdü ny
Ġdüny an
Ġdünyan ın
гÑĢ Ð°Ð½Ð¸
гÑĢани Ñĩ
Ġ×Ķש׾ ×Ļש×Ļ
Ġ×Ķ×IJ ש
åıĬ ãģ³
ìĭŃ ìĭľ
ìĭŃìĭľ ìĺ¤
Ġдол л
Ġдолл аÑĢ
Ġпов ÑĤоÑĢ
Ġ×Ĺ ×Ļ׳×Ŀ
ת פת×Ĺ
Ñĥв ели
Ñĥвели Ñĩен
ãĤ« ãĥª
raw id
rawid ÅĤow
×ķ ×ķ׾
ãĥŁ ãĥ¥
ì½ ĺ
ĠBy ÅĤ
Ðľ ÐIJ
ع ÙIJ
ĠÑģовеÑĢ ÑĪ
ĠÑģовеÑĢÑĪ ÐµÐ½Ð½Ð¾
Ġм ой
Ġ×ķ׾×IJ ×Ĺר
æħ £
æħ£ ãĤĮ
ØŃ اÙ쨏
Ġ무 ë£Į
à¸Ħà¸ĵะ à¸ģรรม
à¸Ħà¸ĵะà¸ģรรม à¸ģาร
Ġìĸ´ ëĶĶ
Ġdif eren
Ġdiferen ça
ĠاÙĦØ£ ساس
ĠاÙĦأساس ÙĬØ©
Ġ׾×IJ×Ĺר ×ķ׳×Ķ
ê· ł
Ġ×Ķש׳×Ļ ×Ļ×Ķ
ìľĦìĽIJ ìŀ¥
ลุ à¸ģ
ç iler
Ġ×Ķ×IJ ׾×ķ
èģŀ ãģı
Ġ×ķ×IJ פ×Ļ׾×ķ
ĠÑĢе ализ
ĠÑĢеализ аÑĨи
ระยะ à¹Ģวลา
Ġجدا Ùĭ
تب اع
Ġveh ÃŃculo
Ġдол г
à¸Ľà¸£à¸´ มาà¸ĵ
ì¦ IJ
Ġ׾ ×ŀ×§×ķ×Ŀ
ĠìĤ¬ ì§Ħ
à¸Ĭ à¹īา
Ġ×ŀ×¢ ×ķ׾×Ķ
Ġgö rm
Ġgörm ek
ĠÙĪÙĩ ذÙĩ
пеÑĢ Ð²
пеÑĢв ÑĭÑħ
ê·¸ ëŀĺ
ĠاÙĦبر ÙĬØ·
ĠاÙĦبرÙĬØ· اÙĨÙĬ
ĠиÑİ Ð½Ñı
ĠÐĵ оÑĢ
Ġ׾ ש׾×Ŀ
ÐIJ ÐĿ
Ġназ наÑĩен
о оÑĢ
ооÑĢ Ñĥж
Ġöz elli
Ġözelli ÄŁi
Ġни же
ç¶ļ ãģijãģ¦
Ġа ÑĢенд
Ġkat ılı
Ġkatılı m
ĠØ¥ Ø·ÙĦاÙĤ
ĠÙĪØ¥ ذا
Ġок ÑĤÑı
ĠокÑĤÑı бÑĢÑı
à¹Ĥà¸ķ à¹
à¹Ĥà¸ķ๠Ĭ
à¹Ĥà¸ķà¹Ĭ ะ
Ġolduk ları
Ùħ ÙĪÙĤع
ëĤ ©
ã썿ĢĿ ãģ£ãģ¦ãģĦãĤĭ
Ġש ×Ļ׼×ķ׾
วา à¸Ķ
س ÙĬÙĦ
à¸Ĥ วั
à¸Ĥวั à¸į
تØŃ ÙĥÙħ
ì ĤŃ
Ġconna ît
׳ פת×Ĺ
Ġch ặ
Ġchặ n
ĠÙħ ØŃÙħ
ĠÙħØŃÙħ ÙĪØ¯
ãģ ´
ĠпÑĢодÑĥк ÑĨии
зд ÑĢав
ãģĶ è¦
ãģĶè¦ §
×IJ×ij ×IJ
Ġvé ritable
ĠØ· ÙģÙĦ
ãĥĪãĥ© ãĥĸãĥ«
ê³ ¡
Ġת ×ŀ×ķ׳×Ķ
Ġki ên
ĠÙĤ ادر
Ø¥ÙĤ ÙĦÙĬÙħ
ĠпÑĢед пÑĢи
ĠпÑĢедпÑĢи ÑıÑĤиÑı
Ġb Äĥng
Ġay ında
Ġg ấp
еÑħ ал
Ġgi Ãłnh
Ġд ав
Ġдав но
ìĺĢ ëĭ¤
à¸Ļัà¸ģ à¹Ģà¸ķ
à¸Ļัà¸ģà¹Ģà¸ķ ะ
Ùħست شار
ست راتÙĬج
ستراتÙĬج ÙĬ
رÙħ ز
Ġt Ä©nh
ë¡ Ń
ĠÑĩ еÑĤ
ĠÑĩеÑĤ Ñĭ
ĠÑĩеÑĤÑĭ ÑĢе
ĠEnt ão
Ġص غ
Ġصغ ÙĬرة
×ij×Ļ×ĺ ×ķ׾
خط ÙĪØ·
ĠÑĢазвиÑĤ ие
Ġamacı yla
à¸Ĺี วี
Ġо ÑģÑĤ
ĠоÑģÑĤ алÑĮн
ש×ķ׾׊ף
Ġ׼ ׳×Ļס
Ġ׼׳×Ļס ×Ķ
Ġd áºŃy
ĠyaÅŁ ayan
Ġ×ŀ×Ķ ×ķ×ķ×Ķ
ĠÑĥ Ñģи
ĠÑĥÑģи ли
×ŀ פ×Ļ
ĠпÑĢовед ениÑı
Ġر ب
Ġرب Ùħا
ĠاÙĦØ£ ÙĪØ³Ø·
Ġìľł ì§Ģ
Ġprac ownik
Ġpracownik ów
×ŀס ×ķרת
ÙĤار ب
à¸Ħวาม รูà¹īสึà¸ģ
à¹ģหล ะ
ĠاÙĦÙĨ ÙĤد
Ġ×IJ׾ פ×Ļ
Ùħس ئ
Ùħسئ ÙĪÙĦ
ев ÑĭÑħ
клÑİÑĩ ениÑı
×ij ×Ļ׳
×ij×Ļ׳ ×Ļ×Ķ×Ŀ
ש ×ķ×IJ×Ķ
ĠÅŁ ark
ĠÅŁark ı
Ġsü rec
Ġsürec in
à¹Ģà¸Ħร à¸Ķ
à¹Ģà¸Ħรà¸Ķ ิà¸ķ
ãĥIJ ãĥ¬
ĠØ´ Ø£ÙĨ
à¹Ģà¸Ńา à¹Ħวà¹ī
niÄĻ cie
רצ ×Ĺ
ĠaÅŁ ama
׳ פ×Ĵ×¢
Ġth á»Ŀ
Ġkhu ẩn
diÄŁ inde
ÑıÑī иÑħ
ãĥĺ ãĥ«
Ġüber h
Ġüberh aupt
ĠÑĤÑĢеб ова
ĠdÅĤ ugi
×ĺ ×Ļף
à¸Ĥà¸Ļาà¸Ķ à¹ĥหà¸įà¹Ī
ĠاÙĦØ£ Ùĩ
ĠاÙĦØ£Ùĩ ÙĦÙĬ
ĠMü d
ĠMüd ürü
Ġ×Ļ×Ķ ×ķ×ĵ×Ķ
Ñĭв аеÑĤÑģÑı
س اط
×Ķת ׳×Ķ×Ĵ
×Ķ×ª×ł×Ķ×Ĵ ×ķת
à¸ģาร à¸ľà¸¥à¸´à¸ķ
íĴ Ģ
สà¸ĸาà¸Ļ à¸ģารà¸ĵà¹Į
Ġо ÑĦ
ĠоÑĦ иÑģ
ĠÙĦ عبة
Ġstron ÄĻ
Ġר×IJ ×ķ×Ļ
×Ĺ ×ij׾
ĠÑĢÑĭ н
ĠÑĢÑĭн ке
Ġ׾×ŀ×¢ ף
اس ÙĦ
ห ัà¸Ļ
Ġ×IJ ×Ĺ×Ļ
ĠпÑĢод ол
ê°Ģ ìŀħ
Ġ×ijר ×Ĺ
Ġ×ijר×Ĺ ×ij×Ļ
дж еÑĢ
Ġ׾ ×Ĺ׾
Ġ׾×Ĺ׾ ×ķ×ĺ
Ġ׾×Ĺ׾×ķ×ĺ ×Ļף
ศาส à¸Ļา
ãĤ¢ãĤ¤ ãĥĨ
ãĤ¢ãĤ¤ãĥĨ ãĥł
Ġפר ×ķפ
جز اء
ล à¸Ńย
Ġc iaÅĤa
Ġgi ết
ĠзнаÑĩ иÑĤелÑĮно
Ġolmad ıģ
Ġolmadıģ ını
н д
нд екÑģ
تأ Ùĥد
Ġìĸ ¸
Ġìĸ¸ ìłľ
ay dın
ãĥī ãĥ¬ãĤ¹
Ġs ắt
Ġíĺ¸ íħĶ
Ġë¶ ģ
Ġë¶ģ íķľ
ãĥij ãĤ¤
Ġ×ŀש×Ĺ×§ ×Ļ
à¸Ħà¸Ļ à¸Ńืà¹Īà¸Ļ
Ġиз гоÑĤов
ĠизгоÑĤов лен
à¹Ģà¸ģีย ร
à¹Ģà¸ģียร à¸ķิ
תק שר
ĠÑĢаÑģ ÑĩеÑĤ
ส à¹Ģà¸ķ
Ġl änger
ĠiÅŁ let
ĠiÅŁlet me
Ġع ÙĦÙĬÙĨ
ĠعÙĦÙĬÙĨ ا
é lection
ĠاÙĦغ ربÙĬØ©
íĭ Ģ
ãĤĤãĤī ãģĪ
Ġкни ги
Ø£ سÙħ
أسÙħ اء
Ġth á»ı
Ġthá»ı a
หà¸Ļ ู
Ġ×ł×¢ ש×Ķ
à¸łà¸²à¸¢ à¹ĥà¸ķà¹ī
à¸ŀื à¸Ĭ
رÙĬ Ø·
Ùģ ÙĪØ¶
ãģĤãĤĬãģĮãģ¨ãģĨãģĶãģĸ ãģĦãģ¾ãģĹãģŁ
ש ×ĵ×Ķ
Ġng á»±c
ĠÑģеÑĢ ÑĮ
ĠÑģеÑĢÑĮ езн
T ôi
Ġfiyat ları
ĠвÑģ Ñİ
ĠC ódigo
Ġ×Ķש ×IJ
Ġ×Ķש×IJ ׾×Ķ
ĠP ública
Ø¥ Ø®
إخ ÙĪØ§ÙĨ
ĠзаÑıв ил
ãĥ¦ ãĥ¼
ר×IJ ×Ļת
vol ución
Ġsz ko
Ġszko ÅĤy
جرÙĬ دة
Ġpens é
ìī ¬
ĠBüyük ÅŁehir
ĠØ£Ùħ رÙĬ
ĠØ£ÙħرÙĬ ÙĥÙĬ
à¸Ļัà¸ģ ศึà¸ģษา
Ġtod av
Ġtodav ÃŃa
ĠС ан
ĠСан кÑĤ
íķĺ ìŀIJ
ØŃÙĪ Ø§ÙĦ
׼ ×ķשר
à¹Ģลย à¸Ħรัà¸ļ
Ġal gu
Ġalgu ém
Ùģ Ø²
Ġçek il
Ġ×ĵ ר׼×Ļ×Ŀ
ãĥIJ ãĥ©
à¸ģà¹ĩ สามารà¸ĸ
สà¹Īวà¸Ļ ลà¸Ķ
íı °
ĠP úb
ĠPúb lico
à¹ģà¸Ļว à¸Ĺาà¸ĩ
×IJת ×Ĵר
ش اش
شاش ة
ci ÅĽni
ĠÃľ rün
ÙĦÙĪ ØŃ
ĠاÙĦ بÙĨ
ĠاÙĦبÙĨ Ùĥ
ì¡° ì¹ĺ
Ġorganiz ación
ãģĤãĤĬãģĮãģ¨ãģĨãģĶãģĸ ãģĦãģ¾ãģĻ
s ätze
ĠÑģем ей
ÙĤ صد
ÑģÑĤв еннÑĭе
Ġpréc éd
Ġprécéd ent
à¸ģรุà¸ĩà¹Ģà¸Ĺà¸ŀ ฯ
ãģ¨è¨Ģ ãģĦ
×ij׳×Ļ ×Ļף
ĠØŃ ÙĪ
ĠØŃÙĪ Ø§ÙĦÙĬ
סק ס
ĠsaÄŁlam ak
Ġ׾ צ×Ļ×Ļף
×§×ĵ ש
Ġ×Ķ×ŀ ×¢×¨×Ľ×ª
Ġ׾×Ķ ×¢×ij×Ļר
Ġg ünd
Ġgünd em
ĠнаÑĪ ÐµÐ³Ð¾
à¹ĥà¸Ļ à¸ŀืà¹īà¸Ļà¸Ĺีà¹Ī
à¹Ģà¸Ħร ืà¸Ń
à¹Ģà¸Ħรืà¸Ń à¸Ĥ
à¹Ģà¸Ħรืà¸Ńà¸Ĥ à¹Īาย
ظ اÙĩرة
ÙħÙĨ ظÙħ
ÙħÙĨظÙħ ات
Ùħت از
追 ãģĦ
dı kt
dıkt an
ĠëįĶ ìļ±
ĠÐĿ апÑĢимеÑĢ
tw ór
×ŀ×ķ×¢ צ×Ķ
Ùĥ ÙĪÙĥ
Ð ©
×ŀ×ĺ פ׾
ó lica
訪 ãĤĮ
ĠëĮĢ ë¶Ģ
ĠëĮĢë¶Ģ ë¶Ħ
ãĤ¯ãĥª ãĥĥãĤ¯
ãĤĴ éģ¸
ãĤĴéģ¸ ãģ¶
Ġpow sta
Ġpowsta ÅĤ
Ġraz ón
×ij ×ķ×Ĺר
ĠÑģообÑī ил
Ġ×§ ×ij×ķ×¢
r êt
à¸Ķี à¸Ĥึà¹īà¸Ļ
×ŀס ×¢×ĵ
×ŀסע×ĵ ×ķת
ĠÃĸ sterreich
Ġ׳ ×Ĺש×ij
Ùħباد رة
ì´ ī
×Ĵ ׳×ĺ×Ļ
ä¿¡ ãģĺ
du ÄŁ
duÄŁ unu
Ġph ú
ĠاÙĦØ£ Ø®ÙĬر
Ġت عتبر
landır ıl
ãģ¨ãģ¯ ãģĦ
ãģ¨ãģ¯ãģĦ ãģĪ
ĠاÙĦ Ø·ÙĦ
ĠاÙĦØ·ÙĦ اب
ĠN º
éģ¿ ãģij
اÙĦ Ùħع
اÙĦÙħع رÙĪÙģ
ส à¸łà¸²
éĽ¢ ãĤĮ
ĠпомоÑī ÑĮ
Ġзна еÑĤ
ãĥĹãĥ¬ ãĤ¼
ãĥĹãĥ¬ãĤ¼ ãĥ³ãĥĪ
Ġsup érieur
Ġש׾ ×Ļש×Ļ
ĠاÙĦÙĨ ÙĪØ¹
ãĤĵãģ§ãģĻ ãģŃ
à¸Ńà¸ļ รม
Ġgi á»įng
Ġwzgl ÄĻd
ĠاÙĦÙģ ÙĤر
è rent
Ġ×ŀ×IJ ×Ĺ
Ġ×ŀ×IJ×Ĺ ×ķר×Ļ
×Ĵ ×Ĵ
×Ļ ×Ļ×ij
ÙħÙĦ اب
ÙħÙĦاب س
Ġhük ü
Ġhükü met
Ġ×ŀ×Ĵ ×Ļ×ij
ĠÐŀ Ñĩ
ĠÐŀÑĩ енÑĮ
æĹ© ãģĦ
Ġconstr ucción
Ġth ượng
ï¼ ĭ
Ġcor ação
à¹Ģหล à¹ĩà¸ģ
ĠBaÅŁ b
ĠBaÅŁb akan
éĢ£ ãĤĮ
ãģĻãĤĭ ãģĵãģ¨ãģĮãģ§ãģįãģ¾ãģĻ
ĠÙĤ اÙħت
Ġا Ùĥثر
ÙģØ§Ø¹ ÙĦ
ĠÑĦ оÑĢ
ĠÑĦоÑĢ Ñĥм
غ ذÙĬ
ĠiÅŁ le
ĠiÅŁle ml
ĠiÅŁleml eri
ĠìĤ¬ëŀĮ ìĿĢ
Ġìŀij ìĦ±
Ġë§Ī 볨
Ùħ جÙĦس
หม ู
д в
дв иг
двиг а
à¹Ģสีย à¸Ĭีวิà¸ķ
×Ķת פת×Ĺ
×Ķתפת×Ĺ ×ķת
ĠмеÑĤ ÑĢо
ĠÑģ енÑĤ
ĠÑģенÑĤ Ñı
ĠÑģенÑĤÑı бÑĢÑı
ê³ §
Ġ׾ פע
Ġ×ľ×¤×¢ ×ŀ×Ļ×Ŀ
à¹Ģà¸ļ ีย
詳 ãģĹãģı
çķ° ãģªãĤĭ
Ġİl çe
ĠAt at
ĠAtat ür
ĠAtatür k
รุ à¹Īà¸ĩ
Ġkald ı
Ġ주 ìŀ¥
Ġprés ence
Ġн аб
Ġнаб лÑİ
ĠнаблÑİ Ð´Ð°
ĠÑģам ого
×Ĵ ×ķש
×ŀ×ĺ ×ķפ
×ŀ×ĺ×ķפ ׾
ĠвÑĭб иÑĢа
ĠìŀIJ 리
åĪĨ ãģĭãĤīãģªãģĦ
Ġз Ñĥб
Ġש׼ ×ijר
Ġد ائ
Ġدائ Ùħا
ĠпаÑĢ ÑĤи
ï¼ ²
ĠاÙĬ ضا
ĠÑħ оз
ĠÑħоз Ñı
ĠÑħозÑı й
ĠÑħозÑıй ÑģÑĤв
ĠاÙĦØ£ ج
ĠاÙĦأج ÙĨب
ĠاÙĦأجÙĨب ÙĬØ©
ĠÐĹ Ð½Ð°
ĠAp ós
ĠÑį неÑĢ
ĠÑįнеÑĢ Ð³Ð¸
Ġy ans
Ġyans ı
ĠJust i
ĠJusti ça
Ġpré vu
ม วล
ìŀ¥ ëĭĺ
à¸ģระ à¸ļ
à¸ģระà¸ļ วà¸Ļ
à¸ģระà¸ļวà¸Ļ à¸ģาร
×ŀ ×ŀ
×ŀ×ŀ ×ķצע
Ġh ẹ
Ġhẹ n
зд ание
Ġak ÅŁ
ĠakÅŁ am
×ĺ ×ķפ
Ġgere kt
Ġgerekt i
Ġgerekti ÄŁini
Ġnar z
Ġnarz ÄĻdzi
é po
épo que
ĠTh ần
Ġwys oko
Ġwysoko ÅĽci
à¸ľà¸¹à¹ī à¸Ľ
à¸ľà¸¹à¹īà¸Ľ à¹Īวย
ĠÙĬ بدÙĪ
ÑĤелÑĮ ного
Ġвз глÑıд
Ġjed nÄħ
ĠìĿĺ 견
Ġ à¸Ĥà¸ĵะà¸Ĺีà¹Ī
פ ×Ļ×ĵ
ìĥģ ëĭ´
Ġm ỡ
×Ķ ×ŀ׾
×Ķ×ŀ׾ צ×ķת
ĠÑģоÑģÑĤ о
ĠÑģоÑģÑĤо иÑĤ
Ġав и
Ġави а
ĠL änder
تص ÙĪÙĬر
×ŀ×ĵ ×Ļ×Ķ
ìłĪ ì°¨
ãģ¨ ãĤĬ
ãģ¨ãĤĬ ãģĤ
ãģ¨ãĤĬãģĤ ãģĪ
ãģ¨ãĤĬãģĤãģĪ ãģļ
ĠÑĢ Ñıд
ĠÑĢÑıд ом
ĠNh ất
ĠاÙĦÙĥ اÙħÙĦ
×Ĺ׾ ׾
ĠGi ấy
צ ×ĺר
צ×ĺר ×£
Ġ׾×ij ×ĺ׾
Ġим еÑĤÑĮ
ס×ŀ ×ķ×ļ
Ġparticip ação
íķľëĭ¤ ë©´
ÙħÙĨت دÙĬ
ÙħÙĨتدÙĬ ات
ĠeÄŁ len
g änge
رب ØŃ
ãĤ® ãĥ£
ĠاÙĦر ÙĤÙħ
à¸ĭ à¹īำ
ĠH óa
×ŀר ×Ĺ×§
ØŃÙħ اÙħ
بÙĪ Ùĥ
ĠArt ÃŃculo
ãĥĦ ãĤ¢ãĥ¼
×Ķפ ׼×Ķ
×Ĺ׾ ×ķף
ĠпеÑĢе Ñħод
len miÅŁ
زر اعة
Ġseñ or
ãģ£ãģ¦ ãģįãģ¦
Ø¥ Ø´
إش ارة
Ġpod ÃŃa
ĠÃľ lke
н ÑģкаÑı
Ġadapt é
Ġdüzen len
Ġdüzenlen en
ĠÑģÑĤ ала
ĠÙĬ ØŃتاج
Ġn ier
Ġnier uch
Ġnieruch omo
Ġnieruchomo ÅĽci
ãģĵãģ¨ãģĮ ãģĤãĤĭ
ยà¸Ńà¸Ķ à¹Ģยีà¹Īยม
ĠÙħ ج
ĠÙħج اÙĨÙĬ
Ġз аб
Ġзаб ол
Ġзабол ев
Ġзаболев аниÑı
ĠÅĽ ro
ĠÅĽro dk
ĠÅĽrodk ów
Ġ×Ķ ×ľ×IJ×ķ×ŀ×Ļ
Ġdok ÅĤad
ĠdokÅĤad nie
ãģŁãģı ãģªãģĦ
ãģ¯ãģļ ãģ§ãģĻ
ã썿ĢĿ ãģ£ãģ¦ãģĦãģŁ
é cran
ìĹħ ì²´
trzym aÅĤ
ÑģÑĤв еннÑĭй
ĠNot ÃŃc
ĠNotÃŃc ias
Ùħ رÙĬ
ÙħرÙĬ ض
æ°Ĺ è»
æ°Ĺè» ½
æ°Ĺ軽 ãģ«
ëĵ £
Ġ×ĵ ×ķ×IJר
Ġ׾ ×ŀ׳
Ġ׾×ŀ׳ ×ķ×¢
ĠçalÄ±ÅŁ ıyor
ĠÅŁ idd
ĠÅŁidd et
ĠM ặt
Ġate ÅŁ
ĠполÑĥÑĩ ениÑı
à¹Ģà¸Ħรืà¹Īà¸Ńà¸ĩ มืà¸Ń
Ġgrö ÃŁer
د ائ
دائ رة
Ġbul un
Ġbulun maktadır
à¹Ģห ร
à¹Ģหร ีย
à¹Ģหรีย à¸į
à¸Ļัà¸ģ à¸Ĺà¹Īà¸Ńà¸ĩà¹Ģà¸Ĺีà¹Īยว
Ġalan ında
ĠÑĥ зна
Ġл еÑĩение
売 ãĤĮ
Ġçev ir
Ġdeste ÄŁi
ĠheiÃŁ t
âĸ ²
ØŃ Ø·
à¸Ħำ à¸ķà¸Ńà¸ļ
ãĤªãĥ³ ãĥ©ãĤ¤ãĥ³
Ġ×ij×Ĺ×Ļ ×Ļ×Ŀ
ãĥ¦ ãĥĭ
Ġdüzenle me
Ġmodal itÃł
سر ط
سرط اÙĨ
×ŀ׼ ×ķף
ĠданнÑĭ й
تر ت
ترت ÙĬب
à¸ļาà¸ĩ à¸Ħà¸Ļ
ĠÄIJ á»ĭnh
ม ูล
มูล à¸Ħà¹Īา
ÙĨ ÙĤص
à¸ģาร รัà¸ģษา
ĠÑĦ он
ĠÑĦон д
ãĤĪãģĨ ãģ«ãģªãģ£ãģŁ
Ùħع اÙĦ
ÙħعاÙĦ جة
ĠOs man
ĠOsman lı
иÑĩеÑģк ом
à¸Ńยาà¸ģ à¸Īะ
ãģķãģ¾ ãģĸ
ãģķãģ¾ãģĸ ãģ¾
ãģķãģ¾ãģĸãģ¾ ãģª
Ġת ×ķ׼׾
×¢ צ×ij
ĠاÙĦع سÙĥ
ĠاÙĦعسÙĥ رÙĬ
Ġvé hic
Ġvéhic ule
Ġ×Ļצ ×Ĺ×§
ĠاÙĦÙĪ ØŃ
ĠاÙĦÙĪØŃ ÙĬد
ĠاÙĦع دÙĪ
ĠQu ản
Ġê³µ ëıĻ
بد ÙĦ
ĠÄij ảng
Ġm á»ĩnh
Ġnie zb
Ġniezb ÄĻ
ĠniezbÄĻ dn
Ġyayın lan
обÑī и
Ġgö tür
צ פ
צפ ×ķ×Ļ
ĠÙĦÙĬ بÙĬ
ĠÙĦÙĬبÙĬ ا
ØŃ ÙĪØ§
Ġд об
Ġдоб ÑĢо
иÑĢÑĥ ем
ĠاÙĦØŃÙĥÙĪÙħ ÙĬØ©
m Ã¤ÃŁig
Ġed ición
влек аÑĤелÑĮ
влекаÑĤелÑĮ н
Ġת ש׾×ķ×Ŀ
Ġ×Ķש ×ķ׳×Ļ×Ŀ
มิ à¸ĸุ
มิà¸ĸุ à¸Ļ
มิà¸ĸุà¸Ļ ายà¸Ļ
é£Łãģ¹ ãģ¦
ĠìĪĺ ì§ij
ס ×ij×Ļ
ĠиÑİ Ð»Ñı
Ġà¹Ħà¸Ķà¹ī à¹ģà¸ģà¹Ī
׾×Ĺ ×Ŀ
tr ä
trä gt
ãģĿãĤĤ ãģĿãĤĤ
ÐĿ Ðķ
Ġв нÑĥÑĤ
ĠвнÑĥÑĤ ÑĢи
ãģ¨ ä¸Ģç·Ĵãģ«
ãĤ« ãĥķãĤ§
Ġ×ij×Ĺ ×ĵר
×Ĺ ×ŀש
ãĤ¨ ãĥį
ãĤ¨ãĥį ãĥ«
ãĤ¨ãĥįãĥ« ãĤ®
ãĤ¨ãĥįãĥ«ãĤ® ãĥ¼
à¸Ĥà¸Ńà¸ĩ à¸ķัวà¹Ģà¸Ńà¸ĩ
بÙĤ اء
פס ×Ļ׼
פס×Ļ׼ ×ķ׾×ķ×Ĵ
ãĥ¡ ãĥĥ
ãĥ¡ãĥĥ ãĤ»
ãĥ¡ãĥĥãĤ» ãĥ¼ãĤ¸
ÙĦ ÙĤب
A Äŀ
שק ×Ļ×¢
ÙĤ ساÙħ
×ĵ×ķ×Ĵ ×ŀ×Ķ
æ·± ãģĦ
íĸĪ ëĬĶëį°
ĠrozwiÄħz anie
à¸Ļัà¹Īà¸Ļ à¹Ģà¸Ńà¸ĩ
×Ļצ ×ij
Ġtr ông
à¹ĥà¸Ĭà¹ī à¸ļริà¸ģาร
ĠاÙĦÙħÙĪ Ø³Ùħ
ĠдеÑĤ и
ãģĹãģĭ ãģªãģĦ
ס ×Ļף
Ġréfé rence
à¹ģห à¹īà¸ĩ
ãĤĤãĤī ãģ£ãģŁ
Ġ׾ ר׼
Ġ׾ר׼ ×ķש
شع ÙĪØ±
ĠÐij ог
Ġlaz ım
Ġ×Ļש ׳×Ŀ
Ġп аÑĢÑĤ
ĠпаÑĢÑĤ неÑĢ
ĠÑĥ ника
ĠÑĥника лÑĮн
Ġmaté riel
×ŀר ×§
Ġph ưá»Ŀng
Ġз ай
Ġзай м
Ùģ ÙĤد
Univers itÃł
×¢ ר׼×Ļ×Ŀ
Ġba ño
Ġн оÑı
ĠноÑı бÑĢÑı
à¸Ľ à¹īาย
Ġt ats
Ġtats äch
Ġtatsäch lich
ĠÑĤÑĢ ÐµÑĤÑĮ
Ñį м
ãĥĻ ãĥ¼ãĤ¹
Ġnh á»±a
ìĬ¤ íģ¬
ĠعبداÙĦ ÙĦÙĩ
Ġת ×ķר×Ķ
أش ÙĬ
أشÙĬ اء
ĠÙĦÙĦ غا
ĠÙĦÙĦغا ÙĬØ©
Ùħ ÙĪØ§ÙĤ
ÙħÙĪØ§ÙĤ Ùģ
ĠgÅĤówn a
Ġart Ä±ÅŁ
Ġ×ŀ×§ ×ķ×ŀ×Ļ
ãĤ¯ãĥ© ãĥĸ
Ġس ÙĪÙī
ĠìŬ ìĦ±
اس ر
اسر ائÙĬÙĦ
Ġ׳ ×Ľ×ª×ij
ย à¹īà¸Ńà¸Ļ
Ġdeber á
Ġph ẫu
ÑİÑī ем
ĠÙĦدÙĬ ÙĨا
×ŀ×ĺ ×Ķ
Ġ׳ ×ķ׾×ĵ
ĠвÑģÑĤÑĢ ÐµÑĩа
ãĤīãĤĮ ãģ¦ãģĦãģ¾ãģĻ
ĠcaÅĤ ej
ย ึ
ยึ à¸Ķ
поÑĤ ен
поÑĤен ÑĨи
Ġл иÑĤ
ĠлиÑĤ еÑĢ
ĠлиÑĤеÑĢ Ð°ÑĤÑĥÑĢ
Ġкажд ом
ĠíĮ IJ
ĠíĮIJ ëĭ¨
à¸Ī ู
Ġpres ença
ãģªãĤĵ ãģ§
Ùħ ÙĬاÙĩ
ин ÑĦоÑĢм
инÑĦоÑĢм аÑĨион
инÑĦоÑĢмаÑĨион н
ĠìŀIJ ìŰ
ר׼ ש
Ġöd ül
ç¶ļ ãģı
Ġп Ñģ
ĠпÑģ иÑħ
ĠпÑģиÑħ олог
ت ذÙĥر
Ġìŀħ ìŀ¥
ล à¸Ķà¹Į
ìĦł ê±°
ãģ£ãģ¦ ãģĬãĤĬãģ¾ãģĻ
Ġ×Ļ ×¢
Ġ×Ļ×¢ ×§×ij
ĠاÙĦØ· عاÙħ
ãĥĨ ãĤ¹ãĥĪ
ĠTu ấn
Ġparticip ación
×ŀ×ķ×ŀ ×Ĺ×Ķ
×Ĵר ס×Ķ
ĠاÙĦتÙĨ ÙģÙĬ
ĠاÙĦتÙĨÙģÙĬ ذÙĬ
ĠбезопаÑģ н
ge f
gef ähr
Ø´ ÙĪØ±
Ġmy ÅĽli
ÙĪØ§ Ø´ÙĨ
ÙĪØ§Ø´ÙĨ Ø·ÙĨ
׳×ķס ×¢
Ùĥ Ùĩ
ÙĥÙĩ رب
ÙĥÙĩرب اء
Ġmus iaÅĤ
ìĭ ¸
ãĥĸãĥ© ãĥĥãĤ¯
Ġcré é
ÙĨÙĩ ار
owo ÅĽÄĩ
ÙħØŃا ÙĥÙħ
ĠwÅĤa ÅĽ
ĠwÅĤaÅĽ c
ĠwÅĤaÅĽc iciel
ĠÙĬ ؤ
ĠÙĬؤ دÙĬ
×ŀ×¢ ×ķ׳
×IJ ×ij׾
خط أ
ĠÑħ олод
×ĸ ×ķ׾
ãģĵãĤĮ ãĤī
ãģĵãĤĮãĤī ãģ®
Ġbás ica
ฤ à¸Ķ
ฤà¸Ķ ูà¸ģ
ฤà¸Ķูà¸ģ า
ฤà¸Ķูà¸ģา ล
èIJ½ãģ¡ çĿĢ
ãģªãģĦ ãģĵãģ¨
ص ÙĪÙħ
ÙĨج ØŃ
׳ק ×ķ×ĵ
׳ק×ķ×ĵ ת
кл аÑģÑģ
íķĺìĭľ ëĬĶ
ëĦ ĺ
Ġש×IJ ×Ļ׳×ķ
ĠС ейÑĩаÑģ
may acaģı
Ġyap ılır
Ġcategor ÃŃa
عب اد
ĠТ еп
ĠТеп еÑĢÑĮ
×Ķ×Ļס×ĺ ×ķר×Ļ
h ế
ãĤ³ ãĥ¼ãĥī
Ġcabe ça
ج Ùħا
جÙħا Ùĩ
جÙħاÙĩ ÙĬر
ä½İ ãģĦ
ĠÑĤоваÑĢ Ð¾Ð²
à¸Ĭาว à¸ļà¹īาà¸Ļ
ĠÑģÑĤан ов
ĠÑģÑĤанов иÑĤÑģÑı
ĠавÑĤом обилÑĮ
ĠÑģлÑĥÑĩ ай
à¸Ńั à¸ŀ
ĠG iriÅŁ
ĠìĿ¼ ëĭ¨
ĠпÑĢ Ð¾Ñģ
ĠпÑĢоÑģ моÑĤÑĢ
ãģªãģıãģª ãģ£ãģŁ
มี à¸Ľà¸±à¸įหา
ïº İ
éc oute
ĠÙħ ÙĪØ¬ÙĪØ¯
Ġس رÙĬع
ĠÙĪÙĩ ÙĨا
ĠÙĪÙĩÙĨا Ùĥ
à¸Ħุà¸ĵ สม
à¸Ħุà¸ĵสม à¸ļัà¸ķิ
Ġìļ° ìĦł
à¸ŀระ à¸ŀุà¸Ĺà¸ĺ
好 ãģ¿
ظ ÙĦÙħ
Ġм акÑģ
ĠмакÑģ ималÑĮ
ĠмакÑģималÑĮ но
ãĥª ãĤ¢ãĥ«
à¹ģมà¹ī วà¹Īา
ĠاÙĦØŃ ÙĪØ§Ø±
ãĥĹãĥ© ãĤ¹
Ġع ÙĦاÙĤØ©
Ġíĸī ëıĻ
Ġgönder il
Ġl ãi
ĠsaÄŁ lıkl
ĠsaÄŁlıkl ı
ĠÑĪ Ð°Ð³
Ġ×ij×IJר ×Ķ
prowadzi Äĩ
ãģĦãģı ãģ¤ãģĭ
Ġبت ارÙĬØ®
Ġ×ij×IJ×ķת ×Ķ
Ġmó c
ĠÐľ не
ãĥĹãĥ¬ ãĥ¼
×IJ ×ĸר×Ĺ
åł´åIJĪ ãģ«ãģ¯
使 ãģĪ
à¹Ģร ืà¸Ńà¸Ļ
ĠÐŁ еÑĤ
ĠÐŁÐµÑĤ ÑĢ
ãģ«åħ¥ ãĤĭ
Ùħ ادة
à¹Ģà¸ĩ ืà¹Īà¸Ńà¸Ļ
à¹Ģà¸ĩืà¹Īà¸Ńà¸Ļ à¹Ħà¸Ĥ
ĠÑģоÑģÑĤоÑı ние
ôn ica
ĠÑĦ ев
ĠÑĦев ÑĢа
ĠÑĦевÑĢа лÑı
Ġ×ķ ×ĸ
Ġ×ķ×ĸ ×IJת
à¸Ħร ิ
à¸Ħริ ส
ĠÐķ Ñīе
ãģ£ãģ¦ãģĹãģ¾ ãģĦãģ¾ãģĹãģŁ
ĠпÑĢав иÑĤелÑĮ
ĠпÑĢавиÑĤелÑĮ ÑģÑĤв
Ġtä glich
Ġëĭ¹ ìĭľ
×ŀ×ķ×¢ ×ŀ×ĵ
Ġдв оÑĢ
æī ķ
æīķ ãģĦ
ĠÑģÑĤан еÑĤ
Ġвозд ейÑģÑĤв
ĠвоздейÑģÑĤв и
Ġf ête
à¹Ģส า
תק ×ķ×ķ×Ķ
Ġu yar
Ġuyar ı
à¸ģลัà¸ļ à¹Ħà¸Ľ
Ġgi ưá»Ŀng
Ġв а
Ġва ÑĪи
ĠÄij áºŃu
ĠSpa ÃŁ
ĠìķĦ ë§Ī
à¹Ħà¸Ķà¹ī à¸ĩà¹Īาย
Ġ×Ķ×ŀ ×ijקש
æĸ° ãģŁ
æĸ°ãģŁ ãģª
ılı yor
пл ан
Ġ×Ķ×ijר ×Ļ×IJ×ķת
ĠaÄŁ rı
Ġsay gı
建 ãģ¦
Ġnaj wyż
Ġnajwyż sz
سÙĬاس ات
ãģĬ å¾Ĺ
ĠاÙĦع ÙĦÙĬ
ĠاÙĦعÙĦÙĬ ا
Ġcoraz ón
ì¹ĺ ë£Į
หัว à¸Ĥà¹īà¸Ń
Ġب ØŃÙĬ
ĠبØŃÙĬ Ø«
зв езд
بÙĪ Ø§Ø¨Ø©
ÐĽ Ðĺ
ÙĦا زÙħ
Ġroz p
Ġrozp oc
Ġrozpoc zÄĻ
触 ãĤĮ
ĠاÙĦج ÙħÙĩ
ĠاÙĦجÙħÙĩ ÙĪØ±
Ġsp ÄĻd
ĠspÄĻd z
วิà¸Ĺยา ศาสà¸ķรà¹Į
ив аеÑĤÑģÑı
Ġдан ной
Ġreprés ente
ĠÄij á»ĭch
Ġ×¢×ŀ ×ķ×§
à¸Ńัà¸Ļ à¸ķร
à¸Ńัà¸Ļà¸ķร าย
Ġestr atég
Ġestratég ia
pad ÅĤ
Ġв полн
Ġвполн е
ĠпÑĢедоÑģÑĤав лен
×Ĺ׾ ×ķ×§
×Ĺ׾×ķ×§ ת
ãĤ¢ ãĥĬ
ĠاÙĦغ ذ
ĠاÙĦغذ ائÙĬ
ĠÑĥ зн
ĠÑĥзн аÑĤÑĮ
à¸ĭ à¹īาย
å½ĵ ãģ¦
ØŃÙĬ اء
Ġbás ico
×§×ķ×ij ×¢
ĠاÙĦÙħ باراة
ĠاÙĦÙĩ اتÙģ
Ġ׼ ׳×Ĵ×ĵ
à¸Ľà¸£à¸° หย
à¸Ľà¸£à¸°à¸«à¸¢ ัà¸Ķ
Ðļ ак
à¸Ĺีà¹Ī à¸Ļà¹Īา
à¸Ĺีà¹Īà¸Ļà¹Īา สà¸Ļà¹ĥà¸Ī
ãģ¾ ãģģ
ï½ ¢
Ñģк оп
Ġson rasında
Ġur zÄħd
ĠurzÄħd zenia
׼×ķ ×ķ׳
׼×ķ×ķ׳ ת
Ġ׾×Ķת ×ŀ×ķ×ĵ
Ġ׾×Ķת×ŀ×ķ×ĵ ×ĵ
ĠÑģ ли
ĠÑģли ÑĪ
ĠÑģлиÑĪ ÐºÐ¾Ð¼
ĠÑģÑĤ Ñĥд
ĠÑģÑĤÑĥд енÑĤ
Ġ×Ķ ×ķ×ĵ
Ġ×Ķ×ķ×ĵ ×¢×Ķ
ë¹Ħ ìļ©
à¸Ńยาà¸ģ à¹ĥหà¹ī
Ġb á»ģ
ยุ à¸Ĺà¸ĺ
Ðĺ ÐĿ
س ائر
Ø£ صÙĪÙĦ
ĠاÙĦغ رÙģ
ãģĵãģ¨ãĤĤ ãģĤãĤĬãģ¾ãģĻ
è¾¼ ãģ¾ãĤĮ
ĠاÙĦساب ع
Ġc á»§
ãģĦãģŁãģł ãģĦãģŁ
ì§ ĵ
ìĤ¬ 무
powied ź
تÙģ Ùĥ
تÙģÙĥ ÙĬر
иÑĢов ки
ĠíĨµ íķ´ìĦľ
ãĤ¨ ãĤ¹ãĥĨ
ĠдеÑıÑĤелÑĮ ноÑģÑĤÑĮ
ĠданнÑĭ м
Ġ×¢ ×ķר
Ġ×¢×ķר ׼×Ļ
×ķ×ĵ עת
Ġhayat ını
Ġb Äħd
ĠbÄħd ź
obs ÅĤug
à¹Ģà¸ŀียà¸ĩ à¹ģà¸Ħà¹Ī
à¸ĭ à¹Īา
è²ł ãģij
ĠÑģÑĤÑĢ ÐµÐ¼
ĠÄij á»īnh
ĠÐł ÑĥÑģ
ĠN ữ
Ġ׾×Ķש ×Ļ×Ĵ
Ġjed noc
Ġjednoc ze
Ġjednocze ÅĽnie
Ġ×Ķ×Ĵ ×ij×ķ×Ķ
أخ ÙĦاÙĤ
ĠнаÑģ ел
ĠнаÑģел ениÑı
ĠÙĬ ÙĨب
ĠÙĬÙĨب غÙĬ
ãģĮ ãģĭ
ãģĮãģĭ ãģĭ
×Ĵ עת
Ðŀ Ðł
ĠналиÑĩ ии
Ġë§Ī ì§Ģ
Ġë§Īì§Ģ ë§ī
Ġíĸī ìĤ¬
Ġtre ÅĽci
Ġê°Ģ ì¹ĺ
ì¦ ĺ
Ġана лог
×Ķצע ת
в лад
влад е
ĠÑģдел ал
Ġ׳ ×Ĵ×Ļש
Ġ׳×Ĵ×Ļש ×ķת
полн ение
à¸Ĩ à¹Īา
ĠD ön
׼׾׼ ׾×Ķ
×ŀ×ĸ ×Ĵ
Ùħ Ùģ
ÙħÙģ Ùĩ
ÙħÙģÙĩ ÙĪÙħ
×Ķ ×ĵ
×Ķ×ĵ פס
×Ķ×ĵפס ×Ķ
ãģĻãģİ ãģ¦
Ġг ÑĢ
ĠгÑĢ Ð½
×ŀ×ĺ ×ķס
Ġ기 ìĸµ
ï¾ Ł
ĠpÅĤ yn
ĠGr ünde
ĠBü cher
Ġwed ÅĤug
ãģ¾ãģł ãģ¾ãģł
Ġ׳×Ķ ×ĵר
ĠÙĬست Ø·ÙĬع
ĠHi á»ĩp
ãĤŃãĥ£ãĥ³ ãĥļ
ãĤŃãĥ£ãĥ³ãĥļ ãĥ¼ãĥ³
Ġth á»ķ
Ġeuropé enne
à¸ļ ัà¸ĩ
à¸ļัà¸ĩ à¸Ħัà¸ļ
ĠszczegóÅĤ owo
׳ שק
ãĥķ ãĥ©ãĥ³ãĤ¹
×ŀ×ķ×ŀ ×Ĺ×Ļ
Ġcom ún
Ġç arp
ØŃت ÙĬا
ØŃتÙĬا ج
ØŃتÙĬاج ات
ëĭ´ ëĭ¹
ä½ķ 度
ä½ķ度 ãĤĤ
×ĵ ×ij×§
ãģį ãĤĮ
ãģįãĤĮ ãģĦ
Ġк ам
Ġкам еÑĢ
ĠespecÃŃf ico
Ġtel éfono
à¸ķัà¹īà¸ĩ à¸Ńยูà¹Ī
I Åŀ
ãģ© ãĤĵãģ©
ãģ©ãĤĵãģ© ãĤĵ
עצ ×ŀ×IJ×Ļ
à¸Ķัà¸ĩ à¸Ļีà¹ī
ĠÑĦоÑĢм иÑĢов
ĠÑĦоÑĢмиÑĢов а
×ķ×ŀ ×ij
Ġkullan ımı
Ðľ Ðŀ
×¢ ש×Ļ
עש×Ļ ×Ļ×Ķ
Ġön lem
à¹Ģà¸Ń à¹ĩ
à¹Ģà¸Ńà¹ĩ ม
×ŀשק ×Ļ×¢
ר ×Ļ×Ĺ
à¸Ĥ ัà¸Ķ
ĠíĻ ľ
ĠíĻľ ìļ©
à¸ĭ ะ
ãĤĪãģĨ ãģ«ãģªãĤĬãģ¾ãģĹãģŁ
ĠÑĢаÑģ пÑĢ
ĠÑĢаÑģпÑĢ Ð¾ÑģÑĤ
ĠÑĢаÑģпÑĢоÑģÑĤ ÑĢан
ĠÑĢаÑģпÑĢоÑģÑĤÑĢан ен
׼×Ļ ×ķף
ÙĤب ض
تص رÙĬØŃ
تصرÙĬØŃ ات
Ġо ÑĢи
ĠоÑĢи г
ĠоÑĢиг ина
ĠоÑĢигина л
ĠاÙĦع اÙĦÙĬ
à¹ģหà¹Īà¸ĩ à¸Ļีà¹ī
ãĥķãĤ¡ ãĥ¼
ãģ¦ãģĦ ãģį
ãģ¦ãģĦãģį ãģŁãģĦ
פ תר
פתר ×ķ׳×ķת
Ġ×ij ×Ļ×Ĺ
Ġ×ij×Ļ×Ĺ ×ĵ
Ġod by
Ġodby ÅĤ
ĠоÑĩеÑĢ ÐµÐ´
Ġtr ương
ãĤŃ ãĥ³
×ŀ ×ķפ
×ŀ×ķפ ×¢
ëĵľ 립
ëĵľë¦½ ëĭĪëĭ¤
à¸ŀืà¹īà¸Ļ à¸IJาà¸Ļ
ìŀIJ 격
ĠVi á»ĩn
ĠDes pués
Ġ×IJ׾ ×Ļ׳×ķ
Ġdur ée
íĩ ´
Ġmü zik
i ếu
ĠÑĢаз меÑīен
Ġк Ñĥд
ĠкÑĥд а
غ ض
غض ب
ĠTamb ém
à¸Īัà¸Ķ สà¹Īà¸ĩ
à¸ģาร à¹ģสà¸Ķà¸ĩ
onom ÃŃa
Ġан г
Ġанг ли
Ġангли й
Ġанглий Ñģк
Ġzn al
Ġznal az
Ġznalaz ÅĤ
תר ×Ĵ
תר×Ĵ ×ķ×Ŀ
ĠÑģ нов
ĠÑģнов а
ĠÑĩаÑģ а
Ġcommun auté
ĠespecÃŃf ica
ĠL á»ĭch
Ġli é
Ùģ Ø¬Ø±
à¹Ģà¸ģ à¹Īà¸ĩ
ع اÙĦ
عاÙĦ ج
Ø£ÙĨ ظ
Ø£ÙĨظ ÙħØ©
ES İ
ĠاÙĦØŃ دÙĬد
à¸ŀระ à¸Ńà¸ĩà¸Ħà¹Į
Ġפר שת
Ġдв иж
Ġдвиж ениÑı
ĠاÙĦج ارÙĬ
à¸ĺาà¸Ļ ี
неÑģ ен
ĠاÙĦÙĨ ÙĩائÙĬ
Ġб еÑĢ
ĠбеÑĢ ÐµÐ¼
ĠбеÑĢем енн
Ġdépart ement
à¹Ģà¸Ĺ ีย
à¹Ģà¸Ĺีย à¸ļ
ĠÐľ аÑĢи
ĠнекоÑĤоÑĢ ÑĭÑħ
об еÑģп
обеÑģп еÑĩен
×Ĺ ×ķ×ĸ
×Ĺ×ķ×ĸ ×Ķ
ÙĨت ج
à¸Īะ à¹Ħà¸Ķà¹īรัà¸ļ
á» °
Ġél éments
ع ط
عط اء
Ġt ắt
i á»ĩm
ÑİÑīиÑħ ÑģÑı
ãģĹãģ °
ãģĹãģ° ãĤīãģı
Ġпом ожеÑĤ
à¸Ĥà¸ĵะ à¸Ļีà¹ī
Ġ×¢ שר×ķת
éģķ ãģ£ãģ¦
ĠпÑĢ Ð¾Ð³
ĠпÑĢог н
ĠпÑĢогн оз
Ġt ÅĤ
ĠtÅĤ um
ĠtÅĤum acz
T ür
Tür kiye
ãģį ãģ£
ãģįãģ£ ãģĭãģij
Ġ×Ķ׳ ×ķ׼
Ġ×Ķ׳×ķ׼ ×Ĺ×Ļ
ĠìĥĿ ìĤ°
ĠÑĦоÑĢм Ñĭ
ç¾İ ãģĹãģĦ
à¸Ľà¸£ ึà¸ģ
à¸Ľà¸£à¸¶à¸ģ ษา
Ġlum ière
ãĤª ãĥ¼ãĥĹ
ãĤªãĥ¼ãĥĹ ãĥ³
à¸Ľ ืà¸Ļ
วั สà¸Ķ
วัสà¸Ķ ุ
еÑĢÑĤ в
ÙĥÙĦ Ùģ
ï½ £
à¸ĺรรม à¸Ķา
׳ ×ĺר
ĠпÑĢедÑģÑĤав лÑıеÑĤ
Ġanál isis
Ġb ãi
با ÙĤÙĬ
à¸Ľà¸£à¸° à¹Ģà¸Ķ
à¸Ľà¸£à¸°à¹Ģà¸Ķ à¹ĩà¸Ļ
ĠÑģлÑĥÑĩ аÑı
ĠÑģлÑĥÑĩаÑı Ñħ
ÐĽ ÐIJ
สัà¸ĩ à¹Ģà¸ģ
สัà¸ĩà¹Ģà¸ģ à¸ķ
Ġprz ec
Ġprzec ież
Ùħ صÙĦ
ÙħصÙĦ ØŃØ©
ש×ķ×§ ×ķ׾×ĵ
ĠобоÑĢÑĥд ованиÑı
Ġtr waÅĤ
رÙĪ Ùħ
ìķĪ ëĤ´
ĠNgh á»ĭ
Ø® Ø´
à¸ļา à¸Ħาร
à¸ļาà¸Ħาร à¹Īา
Ġоп ÑĨион
ĠÑģозд аниÑı
ãĤ³ ãĤ¹ãĥĪ
Ġ×Ķ×¢ ׾×Ļ
Ġ×Ķ×¢×ľ×Ļ ×ķף
lä uft
ãĥĻ ãĤ¹ãĥĪ
Ġr ê
Ġrê ve
×IJ ×ij×Ļ×ij
×Ļ ×Ļ×ļ
ë¶ Ļ
ãĤ¤ãĥ³ ãĥī
ÅĤo ży
ÅĤoży Äĩ
ع ائÙĦ
عائÙĦ Ø©
Ø£ ÙĪØ±
Ø£ÙĪØ± اÙĤ
à¸Ĺà¹īà¸Ńà¸ĩ à¸ĸ
à¸Ĺà¹īà¸Ńà¸ĩà¸ĸ ิà¹Īà¸Ļ
Ġä hn
Ġähn lich
ãĥŁ ãĥĭ
à¸ľ ู
à¸ľà¸¹ à¹īà¸Ļ
à¸ľà¸¹à¹īà¸Ļ ำ
ĠмаÑĤеÑĢиал Ñĭ
Ġкап иÑĤ
ĠкапиÑĤ ал
ï¼ ¦
Ġseç il
Ġh ứng
Ġintéress ant
ãģ£ãģ¦ ãģĦãģı
Ġe ÄŁer
ëIJĺ ìĹĪìĬµëĭĪëĭ¤
Ġan laÅŁma
ãģĶ åĪ©ç͍
Ġ×ij ×ĸ׼
Ġ×ij×ĸ׼ ×ķת
ëĿ¼ ë©´
ĠÙĬ ÙĪØ³
ĠÙĬÙĪØ³ Ùģ
أسÙĦ ØŃØ©
ĠGef ühl
ĠноÑĢм алÑĮн
ãĥĻ ãĥ³
ãģķãĤĮ ãĤĭãģĵãģ¨
ĠÐij еÑģ
ãģ¨ãģĦ ãģĪãģ°
ĠÙħ ÙĩÙħ
ĠÙħÙĩÙħ Ø©
ãģ§ãģĹãĤĩãģĨ ãģŃ
ĠêµŃ ëĤ´
à¹Ģม à¹ĩà¸Ķ
×ŀ×ij קר
ĠاÙĦد ÙĨÙĬ
ĠاÙĦدÙĨÙĬ ا
à¸Ĭ ู
к ÑĢÑĥÑĤ
Ġtho áng
Ġ׳ ×ĵר
Ġ׳×ĵר ש
ĠÑĢаÑģÑģ казал
ĠAu ÃŁerdem
פ ×IJר
פ×IJר ×§
Ġ×ŀש×Ĺ×§ ×Ļ×Ŀ
צ ר׼×Ļ×Ŀ
×ŀ×ĵ ×ķ
×ŀ×ĵ×ķ ×Ļ×§
èĭ¦ ãģĹ
ĠÑģ иг
ĠÑģиг нал
ĠM á»įi
Ġtr ữ
Ġnast ÄĻp
ĠnastÄĻp nie
Ġì¶Ķ ì§Ħ
ĠاÙĦÙģ ÙĨد
ĠاÙĦÙģÙĨد ÙĤ
koÅĦ czyÅĤ
ส ีà¹Ī
×§ ×Ļ×ij
×§×Ļ×ij ×ķ×¥
ĠнÑĥж нÑĭ
大 åĪĩ
大åĪĩ ãģª
æıĽ ãģĪ
ת ×ķס
ת×ķס פת
ãģ£ãģ¦ ãģĦãģªãģĦ
Ġм Ñı
ĠмÑı г
ĠмÑıг к
Ġjak ie
Ġjakie ÅĽ
à¸ķำ à¸ļ
à¸ķำà¸ļ ล
ĠìŀĪ ì§Ģ
×ij×ĺ ×IJ
ĠоÑĤлиÑĩ но
ÙĤ ÙIJ
ĠавÑĤом об
ĠавÑĤомоб и
ĠавÑĤомоби лÑı
دÙĬÙħÙĤرا Ø·ÙĬ
ĠاÙĦ ÙĪØ§
ĠاÙĦÙĪØ§ ØŃد
Ġس ÙĪØ±ÙĬØ©
Ø£ غÙĦ
أغÙĦ ب
ĠÑįк ÑĢан
ãĥĹ ãĥ©ãĤ¤
Ġjeste ÅĽ
ãĥIJ ãĥª
Ġ×Ķ×IJ ×ķ×ķ×Ļר
ائ Ùĥ
à¸Ńยà¹Īาà¸ĩ ยิà¹Īà¸ĩ
ÑĢ ÐµÐºÑĤ
Ġum o
Ġumo ż
Ġumoż li
Ġumożli w
Ġumożliw ia
Ġnäch ste
ĠìŀĪ ì§Ģë§Į
ĠпÑĢед н
ĠпÑĢедн аз
ĠпÑĢедназ наÑĩен
Ġma çı
Ġp omi
Ġpomi ÄĻd
ĠpomiÄĻd zy
ĠاÙĦÙĦ ÙĤاء
à¹Ģà¸Ķ à¸Ńะ
Ġнов оÑģÑĤи
×ŀ׊׾×Ķ
رÙĬاض ÙĬ
à¸Ķ à¸Ļ
à¸Ķà¸Ļ à¸ķรี
ب صر
ìĬ¤ íĥĢ
scri pción
Ġnap isa
Ġnapisa ÅĤ
Ġ׳ש ×ŀ×¢
ĠاÙĦÙħØŃ ÙĦÙĬ
Ġhi á»ĥn
×IJ ×Ĺ
×IJ׊ר×IJ×Ļ
Ġг ÑĢаниÑĨ
æīĭ ç¶ļãģį
Ùĥ سب
Ġà¹ģà¸ķà¹Ī à¸ĸà¹īา
à¸Ķาว à¸Ļà¹Į
à¸Ķาวà¸Ļà¹Į à¹Ĥหลà¸Ķ
ãĤĭãģĵãģ¨ãģĮãģ§ãģį ãģ¾ãģĻ
åŁºæľ¬ çļĦãģ«
ÙĪÙĦ اد
rä ume
د ÙģØ§Ø¹
×Ļצ ×¢
ĠO czy
ĠOczy wiÅĽcie
ĠÅ ģ
ĠÅģ a
اÙĦÙĬ اب
اÙĦÙĬاب اÙĨ
áºł I
ĠBir liÄŁi
×Ķ ×ķצ
×Ķ×ķצ ×IJת
ĠÄij ua
Ġê·¸ëŁ¬ ëĭĪê¹Į
Ġréal ité
ع ÙĦاÙĤات
J este
Jeste ÅĽ
Ġмн ож
Ġмнож еÑģÑĤво
ï¼ «
ãĥĹãĥŃ ãĤ¸ãĤ§
ãĥĹãĥŃãĤ¸ãĤ§ ãĤ¯ãĥĪ
ĠÑĦ л
ظ ÙĨ
×Ĵ׾ ×Ĵ׾
ĠmÅĤod zie
ĠmÅĤodzie ż
à¸Ļà¹īำ à¸ķา
à¸Ļà¹īำà¸ķา ล
ÐĽ Ðķ
×ij ×ķ×ĺ
Ġ׾×Ķ ×Ĵ×Ļ×ĵ
ãģĵãģ¨ãĤĤ ãģĤãĤĭ
ز اد
×ŀ×Ļ×ĵ ×¢
ĠgÅĤówn ie
ãĥı ãĤ¦
ãĥıãĤ¦ ãĤ¹
б ел
Ġét ape
ðŁĺ Ģ
Ġмод елÑĮ
a ģını
ש ×Ĺ×§
ש×Ĺ×§ ף
Ġni ño
à¸Ĭ à¹īาà¸ĩ
à¹Ģล ีย
ĠÑĦоÑĢм е
ĠاÙĦØ´ رÙĬÙģ
ĠÑĥд аÑĢ
arr iv
arriv ée
Ġmies iÄĻ
ĠmiesiÄĻ cy
ØŃ رÙĥ
ØŃرÙĥ ات
ĠDi á»ħn
ÐĿ Ы
ãģ¾ãģ£ãģŁ ãģı
Ġ×Ļ ×¨×ķ×§
еÑģÑĤ еÑģÑĤв
еÑģÑĤеÑģÑĤв енн
Ġê·¸ ëŁ¼
ĠاÙĦÙħ تÙĪ
ĠاÙĦÙħتÙĪ Ø³Ø·
Ġbéné fic
Ġbénéfic ie
Ġwy bra
Ġwybra Äĩ
ĠاÙĦز ÙħÙĨ
ĠпÑĢин Ñı
ĠпÑĢинÑı л
Ù쨱 ØŃ
Ġk sz
Ġksz taÅĤ
ĠksztaÅĤ t
ק׾ ×ĺ
×ij×ĵ×Ļ×§ ת
Ġgi ấ
Ġgiấ c
Ġpropriet Ãł
деÑĢж ан
ĠKö ln
ĠGü zel
×Ļפ ×ķ×Ļ
ĠCu á»Ļc
ÑįÑĤ аж
تر ÙĥÙĬ
ترÙĥÙĬ ز
лож ений
Ġп Ñĥ
ĠпÑĥ ÑĤи
اخت ÙĦاÙģ
åĩºãģ¦ ãģıãĤĭ
à¸ļุ à¸ģ
âĿ ¤
ÑĦ ан
פש ×ĺ
à¸ļัà¸Ļ à¹Ģà¸Ĺ
à¸ļัà¸Ļà¹Ģà¸Ĺ ิà¸ĩ
ĠاÙĦس اد
ĠاÙĦساد س
ĠاÙĦÙĤ ÙĪÙħ
ĠاÙĦÙĤÙĪÙħ ÙĬ
Ġyönet ici
Ùĩ ÙĪØ§Øª
ÙĩÙĪØ§Øª Ùģ
Ġrespons ável
Ġпод деÑĢжива
ĠاÙĦسÙĦ Ø·
ĠاÙĦسÙĦØ· ات
ãģĹãģ¦ ãģĬãģı
ãĥļ ãĥĥãĥĪ
à¸Ľ ุà¹Īม
Ġogl Äħda
ÙĨا ÙĤ
ÙĨاÙĤ Ø´
à¸Ħà¸Ńà¸Ļ à¹Ĥà¸Ķ
ĠMü sl
ĠMüsl ü
ĠMüslü man
ĠMo ż
ĠMoż na
Ġnum érique
Ġv á»ı
ĠسÙĬ تÙħ
Ġyer leÅŁ
монÑĤ аж
Ġgo ût
ãģ¦ ãģĬãĤĬãģ¾ãģĻ
ĠKh ánh
Ġе дин
Ġедин ÑģÑĤв
اÙĨ Ø®Ùģ
اÙĨØ®Ùģ Ø§Ø¶
ìĭľ íĹĺ
Ġl ặng
ĠÑĢ Ð¾Ð»ÑĮ
à¸ķัว à¹ģà¸Ĺà¸Ļ
à¸Ħà¹Īา à¹ĥà¸Ĭà¹ī
à¸Ħà¹Īาà¹ĥà¸Ĭà¹ī à¸Īà¹Īาย
Ġver füg
Ġverfüg bar
ìĻĶ ëĭ¤
ãģĦ ãģļ
ãģĦãģļ ãĤĮ
ĠиÑģÑģлед ованиÑı
меÑī а
×Ķ ×Ĺ
×Ķ×Ĺ ×ĸר
à¹ģà¸Ł à¸Ĭัà¹Īà¸Ļ
ت صرÙģ
Ø¥ رÙĩاب
Ġexerc ÃŃcio
Ġé lev
Ġélev é
สัà¸įà¸įา à¸ĵ
Ãĸ Z
ãĥĹ ãĥŃãĤ°
ãĥĹãĥŃãĤ° ãĥ©
ãĥĹãĥŃãĤ°ãĥ© ãĥł
Ġw ewnÄĻtrzn
Ġhen üz
é£Ľ ãģ³
à¹Ģà¸Ķ à¸Ńรà¹Į
Ñģ Ñĥж
ÑģÑĥж ден
شع ÙĪØ¨
ãģ²ãģ¨ ãĤĬ
Ġwy ÅĤÄħ
ĠwyÅĤÄħ cznie
Ġпло Ñħо
ÐĶ Ðķ
Ạ¦
Ù쨹 اÙĦÙĬ
ÙģØ¹Ø§ÙĦÙĬ ات
ĠاÙĦع شر
ÑģÑĤÑĥп ил
Ġy arg
Ġyarg ı
нÑİ Ñİ
×ķ×IJ ×ij
Ġu ç
Ġuç ak
ë² ½
تÙĪ ÙĤÙĬ
تÙĪÙĤÙĬ ع
Ġì¤ij ìĭ¬
׳×Ļ×ķ ×ķ×ĺ
Ø£ ÙĥÙĦ
ç½® ãģĦãģ¦
éłĤ ãģį
Ġ×Ķת ×ij
Ġ×Ķת×ij ×Ļ×¢×Ķ
Ġdür fen
Ùħ ÙĤاÙĦ
ÙħÙĤاÙĦ ات
Ġز ÙħÙĨ
à¸ŀฤ ศ
à¸ŀฤศ à¸Ī
à¸ŀฤศà¸Ī ิà¸ģ
à¸ŀฤศà¸Īิà¸ģ ายà¸Ļ
ĠнеÑģк олÑĮ
ĠнеÑģколÑĮ ки
ĠнеÑģколÑĮки Ñħ
Ġcrian ça
มิ à¸ķร
×ŀ׼ ×Ļר×ķת
à¸ģาร à¸ļริหาร
Ġtélé charg
Ġ×IJ×ķ×Ķ ×ijת
ĠBü ro
ä½ľ ãģ£ãģŁ
ĠKi ÅŁi
ç¾İåij³ ãģĹ
à¹Ģลย à¸Ħà¹Īะ
à¸ŀà¸ļ à¸ģัà¸ļ
à¸Ī à¹īา
Ġç er
Ġçer ç
Ġçerç eve
ãĤĴä½ľ ãģ£ãģ¦
ĠпеÑĢв ÑĥÑİ
×ŀצ ר×Ļ×Ŀ
×IJ׾ ×ķ×Ķ
×IJ׾×ķ×Ķ ×Ļ×Ŀ
Ġagr é
Ġagré able
Ġay ır
İL İ
ãĤ ¥
Ġíĺ Ħ
ĠíĺĦ ìĭ¤
ثاÙĦ Ø«
ת ×ĸ
ת×ĸ ×ķ׳×Ķ
ãģ¨ãģĦ ãģ£ãģ¦
ãģ¨ãģĦãģ£ãģ¦ ãĤĤ
Ġا بÙĪ
ĠÑģоб ак
é£Łãģ¹ ãģŁ
Ġдан ном
à¹Ģล ิ
à¹Ģลิ ศ
Ġí ļ
Ġíļ ¨
Ġíļ¨ ê³¼
ãĤĤãĤī ãģĪãĤĭ
׳ צ׾
ÑĦ ик
ÑĦик Ñģ
Ġjeste ÅĽmy
ת×Ĺ×ķש ×Ķ
à¹Ħมà¹Ī à¸Ħวร
ĠØŃ سÙĬÙĨ
à¸ģาร ลà¸ĩà¸Ĺุà¸Ļ
ë´ ¤
ĠÐĺ менно
à¸ļ à¸Ńรà¹Į
à¸ļà¸Ńรà¹Į à¸Ķ
ĠC ảnh
ìĦľ ë¹ĦìĬ¤
Ġпол ов
Ġполов ин
Ġзам еÑĩа
ãģĦãĤį ãĤĵãģª
Ġ×ij ×Ļ×§
Ġ×ij×Ļ×§ ש
л ÑĥÑĪ
ãĤĴ è¿İ
ãĤĴè¿İ ãģĪ
جرÙĬ ÙħØ©
Ġt ây
ĠاÙĦÙĨ ÙĪ
ĠاÙĦÙĨÙĪ ÙĪÙĬ
ÃĤ N
ì¿ ł
หà¸Ļ าว
Ġ×ij׊ש×ij×ķף
ز ار
à¸Ķ าร
à¸Ķาร า
ĠÅĽ l
ĠÅĽl ub
มีà¸Ħวาม สุà¸Ĥ
Ġn hu
Ġnhu áºŃn
ÙħØŃ طة
à¹Ģสืà¹īà¸Ń à¸ľà¹īา
ĠТ олÑĮко
ĠÙĥ س
ĠÙĥس ارة
ÙħØ´ رÙĪØ¹
niÄĻ cia
×¢ ׼ש×Ļ×ķ
ت ÙĦÙģ
تÙĦÙģ Ø²ÙĬ
تÙĦÙ쨲ÙĬ ÙĪÙĨ
Ġl Æ°á»Ľi
ĠÐľÐ¾Ñģк вÑĭ
Ġré serve
Ġan laÅŁ
ĠanlaÅŁ ıl
Ġed eceÄŁi
รà¸Ńà¸ĩ à¹Ģà¸Ĺà¹īา
Ġب Ø·
Ġبط رÙĬ
ĠبطرÙĬ ÙĤØ©
ãģ¦ãģĹãģ¾ ãģ£ãģ¦
ãĤĤãĤī ãģ£ãģ¦
بر ج
æ± ļ
æ±ļ ãĤĮ
Ġch oc
Ġchoc ia
Ġchocia ż
Ġzob ac
Ġzobac zyÄĩ
пÑĢ Ñı
пÑĢÑı жен
ĠÑĨ иÑĦ
ĠÑĨиÑĦ ÑĢ
Ġм ам
Ġвз ÑıÑĤÑĮ
Ġch ạm
ج سÙħ
ØŃÙħ اس
à¹Ģล à¹Īม
à¸ŀิ ษ
×Ķפ ׼×ķ
à¸Ĭà¹Īà¸Ńà¸ĩ à¸Ĺาà¸ĩ
Ġв ек
Ġвек а
Æ¡ Ìģ
Æ¡Ìģ i
ĠTi á»ģn
Ġtr ầm
мÑĭ ÑĪ
мÑĭÑĪ Ð»
ĠÑĤ Ñĥ
ĠÑĤÑĥ ÑĢиÑģÑĤ
Ġch c
Ġchc Äħ
Ġав г
Ġавг ÑĥÑģÑĤ
ĠавгÑĥÑģÑĤ а
ס ×IJ×ķת
Ġר ×Ĵ׾
à¸ľà¸¥ à¸ģระà¸Ĺ
à¸ľà¸¥à¸ģระà¸Ĺ à¸ļ
å¤īãĤı ãĤĭ
Ġ×Ķ×IJ×Ĺר ×ķ׳×Ļ×Ŀ
سÙģ ÙĬر
ĠÑĩа Ñīе
ãģĦ ãĤī
ãģĦãĤī ãģ£
ãģĦãĤīãģ£ ãģĹãĤĥ
×ķ×ŀ ׳×Ļ×Ŀ
Ġart tır
ĠCh á»ĭ
Ġì¡° ì§ģ
ĠÑĥÑģп еÑħ
Ġ×¢ ×ķס
Ġ×¢×ķס ×§
ĠìĥĿ ëªħ
ÑĨ иÑĤ
Ġreg ión
Ðŀ ÐĿ
ĠdoÄŁ um
ĠyaÅŁ ad
ĠyaÅŁad ıģı
à¸Ĺà¸Ķ ลà¸Ńà¸ĩ
Ġgöz ü
ש ×Ļר×Ķ
дÑĥм ал
Ġda ģı
Ġdaģı t
à¸Ĺีม à¸ĩาà¸Ļ
Ġti á»ģm
ĠاÙĦÙĥ بر
ĠاÙĦÙĥبر Ùī
ì¹ Ń
ĠGü nc
ĠGünc elle
ĠGüncelle me
ê¹ Ĭ
ĠобоÑĢÑĥд ование
ĠÑĢеÑĪ Ð°
á» ¤
Ġп иÑĤ
ĠпиÑĤ аниÑı
à¹Ģรีย à¸ļ
×Ľ×ª ×Ļ×ij×Ķ
Ġп он
Ġпон ÑĢав
ĠпонÑĢав и
Ġ×Ķ ×ķ׾×ĵ
Ġ×Ķ×ķ׾×ĵ ת
Ġê² ģ
Ġê²ģ ëĭĪëĭ¤
ĠпеÑĢв ой
ãĥ©ãĤ¤ ãĥķ
ĠÅŁi ir
kr ÄĻ
krÄĻ c
Ġthi á»ĥu
à¹Ģลย à¸Ĺี
à¹Ģลยà¸Ĺี à¹Ģà¸Ķียว
×ĺ×¢ ׳×ķת
ائ ÙĩÙħ
Ġ×IJ ס×ķר
ĠплаÑĤ еж
تر دد
Ġmożli we
Ġkh Ỽ
ĠkhỼ p
تÙģØ§Ø¹ ÙĦ
ĠÑĪ ÐºÐ¾Ð»ÑĮ
ĠÑĪколÑĮ н
ĠÙĤ صة
Ġmét ier
nÄĻ ÅĤa
หล à¹Īà¸Ń
Ġ á»§ng
Ġprz egl
Ġprzegl Äħd
ĠاÙĦÙħ تعÙĦ
ĠاÙĦÙħتعÙĦ ÙĤØ©
ĠÑģÑĭ н
Ġв олн
ãĥĩ ãĥ¼ãĥĪ
ĠÐŃ ÑĤи
Ġк ÑĢоме
à¸Ħ ารà¹Į
׳ק ×ķ×ĵ×Ķ
Ġ׾ש×ŀ ×ķ×¢
Ġ×ĸ ×ķ׼ר
ï¼ §
ÙĬ ÙİØ§
Ġgi á»ıi
åĥį ãģı
ĠÑģ ни
ĠÑģни жен
à¹ģà¸Ķ à¸Ķ
รุ à¸Ļ
รุà¸Ļ à¹ģรà¸ĩ
Ġhi á»ĩp
ograf ÃŃa
à¹Ģà¸Ī à¸Ńรà¹Į
Ġдв иг
Ġдвиг аÑĤ
ĠдвигаÑĤ ел
Ġü y
Ġüy eler
Ġüyeler i
Ġб Ñĥк
ĠбÑĥк в
ãĤĤ å¤ļãģı
Ġthi á»ĩt
ĠPa ÃŃs
ĠØ· بÙĬعÙĬ
à¹ģà¸Ī à¸ģ
ĠاÙĦص ØŃÙĬØŃ
Ġapp ré
Ġappré ci
Ġdecis ión
Ġë°ĺ ëĵľ
Ġë°ĺëĵľ ìĭľ
ĠÑĤеб е
ãĤ· ãĥ¼ãĤº
ãĤ·ãĥ¼ãĤº ãĥ³
Ġд алÑĮн
ĠìĬ ¤
ĠìĬ¤ ìĬ¤
ĠìĬ¤ìĬ¤ ë¡ľ
ĠTh á»ĥ
Ġkar ÅŁ
ĠkarÅŁ ıs
ĠkarÅŁÄ±s ında
ĠK ön
ĠKön ig
ив ание
×ij ×ķצע
г лаÑģ
Ġtw ó
Ġtwó rc
à¸Ľà¸ģ à¸Ħร
à¸Ľà¸ģà¸Ħร à¸Ńà¸ĩ
ĠG ÅĤ
ĠGÅĤ ówn
ĠUnter stüt
ĠUnterstüt zung
Ġд ÑĥÑħ
ĠдÑĥÑħ ов
Ø£ ÙħاÙĨ
×Ĺש ש
ت ظ
تظ اÙĩر
ĠлÑİб ом
à¸ķ าร
à¸ķาร าà¸ĩ
Ġkr ól
Ø£ ØŃدث
ì¡Į ëĭ¤
Ðļ ÑĥÑĢÑģ
ãĥĥ ãĥĦ
×ŀ×§ ×ķ×ij׾
ĠÑģимв ол
Ġdés orm
Ġdésorm ais
w üns
wüns che
Ñĥ ни
Ñĥни ÑĨип
ÑĥниÑĨип алÑĮн
หลัà¸ģ สูà¸ķร
ÙĨت شر
Ġа л
Ġал к
Ġалк ог
Ġалког ол
ĠÑĥ ÑĩиÑĤÑĭва
à¸ģำ à¸ģัà¸ļ
Ġ׾ פע×ķ׾
ĠìŰ ê²°
s Äħd
ĠاÙĦØ£ ÙĬ
ĠاÙĦØ£ÙĬ اÙħ
غÙĬ اب
Ġна ÑĢ
ĠнаÑĢ ÐºÐ¾
×ŀ×ķ×ĵ ×¢
ĠÑģеÑĢ Ð¸Ð¸
пиÑģ Ñĭва
สิ ว
ç¶ļ ãģĦãģ¦
çͳãģĹ è¾¼ãģ¿
Ġ׾ ×Ĵר
Ġ׾×Ĵר ×ķ×Ŀ
Ġд ем
Ġдем о
Ġë³´ ëĤ´
تÙĩ دÙĬد
ĠÙħØ´ ÙĬرا
Ġdu y
Ġduy á»ĩt
ĠwiÄĻks ze
Ùħع اÙĬ
ÙħعاÙĬ ÙĬر
ĠG da
ĠGda ÅĦsk
Ġr ah
Ġrah ats
Ġrahats ız
ר ×ķצ×Ķ
l ös
lös ung
ĠТак им
ÑĪ ÐµÐ´
ÑĪед ÑĪ
ع زÙĦ
Ġרש ×Ļ×ŀת
Ġ׾×Ķ ×Ļ׼
Ġ׾×Ķ×Ļ׼ ×ł×¡
Ġп ÑĥÑĤ
ĠпÑĥÑĤ еÑĪ
ĠпÑĥÑĤеÑĪ ÐµÑģÑĤв
Ġnot ÃŃcia
Ġal Ä±ÅŁ
ĠalÄ±ÅŁ ver
ĠalÄ±ÅŁver iÅŁ
ĠwÅĤ os
ĠwÅĤos ów
Ġب غ
Ġبغ داد
Ġver öffent
Ġveröffent licht
ĠKh á
Ġt án
ëIJĺ 기
Ġë°© 문
Ùģ ÙĬÙĦ
à¹Ģà¸ģิà¸Ķ à¸Īาà¸ģ
åı¯ æĦĽ
åı¯æĦĽ ãģĦ
à¸ĸ ุà¸ĩ
Ġz ewnÄĻtrzn
à¸łà¸²à¸©à¸² à¸Ńัà¸ĩà¸ģฤษ
Ġmá xima
Ġul us
Ġulus lararası
Ġ׳×Ķ ×ł
à¸Ĥà¹Īาว สาร
ĠìĿĺ ìĤ¬
à¹Ģหล ืà¸Ńà¸ĩ
Ġد ÙĤ
ĠدÙĤ ائÙĤ
สืà¹Īà¸Ń สาร
ë¨ ¼
ĠÑģоÑģÑĤоÑı нии
สมา à¸Ħม
á» Ĥ
ĠÐľÐ¾Ñģ ков
ĠÐľÐ¾Ñģков Ñģк
×ŀס ×ķ×Ĵ׾
ãģĭ ãģĭãĤĬ
ĠTr uyá»ģn
à¹ģà¸Ĥà¹ĩà¸ĩ à¹ģรà¸ĩ
×ŀ×Ĺ ×ĸ×Ļ×§
à¹Ĥà¸ģ à¹ī
ÙĬس ر
ìĶ ©
×IJ ×ķ×§
×IJ×ķ×§ ×ĺ
×IJ×ķ×§×ĺ ×ķ×ijר
Ġprox imité
ÙħÙĨ Ùĩج
ĠاÙĦج ز
ĠاÙĦجز ائ
ĠاÙĦجزائ رÙĬ
ĠÄIJi á»ĥm
Ġден еж
Ġденеж н
ÙģØŃ ص
Ùģ Ø¦
ĠÐij Ñĥд
×Ĵ×Ļ×ĵ ×ķ׾
ĠÐĴ едÑĮ
عÙĦ اÙħØ©
Ġ×IJ×Ĺר ×ķ׳×ķת
ãģĦãģŁãģł ãģĦãģ¦
سÙĦ ØŃ
ØŃ ÙĦÙħ
ز ÙĪØ§Ø±
Ùĥ سر
×ĺ קס
Ġб ан
Ġбан ков
ĠпÑĢ Ð¾Ð¶
ĠпÑĢож ива
li wo
liwo ÅĽci
ĠTi ếp
ĠاÙĦÙħÙĨ اسب
ĠاÙĦØ® ÙĬار
ãģĬ ãģĭ
ãģĬãģĭ ãģĴ
à¸Ķà¸Ńà¸ģ à¹Ħมà¹ī
ä mp
ämp fe
à¸ķัà¹īà¸ĩ à¹ĥà¸Ī
Ġза ÑīиÑĤ
ĠзаÑīиÑĤ Ñĭ
ĠTh ưá»Ŀng
Ġص Ùģ
ĠصÙģ ØŃØ©
×Ĺ×ķר ×£
ãĥIJ ãĥĥãĤ°
Ġ×ĵ ×Ļ×Ĵ
Ġ×ĵ×Ļ×Ĵ ×Ļ×ĺ
Ġ×ĵ×Ļ×Ĵ×Ļ×ĺ ׾×Ļ
Ġ×Ķ×Ĺ ×ķ׾×Ļ×Ŀ
в еÑī
веÑī а
Ġк ÑĥлÑĮÑĤ
ĠкÑĥлÑĮÑĤ Ñĥ
ĠкÑĥлÑĮÑĤÑĥ ÑĢÑĭ
ĠاÙĦاÙĨ ترÙĨت
Ġhö ch
Ġhöch st
Ġíĺ ķ
Ġíĺķ íĥľ
Ġв ой
Ġвой нÑĭ
ÐĽ Ðŀ
ìĭł ìļ©
Ġ×ŀ×ij ×ķס
Ġ×ŀ×ij×ķס ס
×ŀ׳ ×Ļ×¢
Ġfiyat ı
ĠÑģл Ñĥж
ĠÑģлÑĥж бÑĭ
à¸Ĺั ศ
à¸Ĺัศ à¸Ļ
ãģĵãģ¨ãģĮ å¤ļãģĦ
Ġ×Ķ×ŀש ת
Ġ×Ķ×ŀשת ×ŀש
å¯Ħ ãģĽ
×ŀש׾ ×ķ×Ĺ
æĻĤ çĤ¹
æĻĤçĤ¹ ãģ§
à¸ŀร ี
à¸ŀรี à¹Ģมีย
à¸ŀรีà¹Ģมีย รà¹Į
à¸ŀรีà¹Ģมียรà¹Į ลีà¸ģ
Ġdiffic olt
Ġdifficolt Ãł
ãĥ¬ ãĤ¹ãĥĪ
ãĥ¬ãĤ¹ãĥĪ ãĥ©ãĥ³
สม à¹Ģà¸Ķà¹ĩ
สมà¹Ģà¸Ķà¹ĩ à¸Ī
Ġж ид
Ġжид к
Ġzu peÅĤ
ĠzupeÅĤ nie
ĠÙħ جر
ĠÙħجر د
ãģĮ å§ĭ
ãģĮå§ĭ ãģ¾
ãĤŃãĥ£ ãĥ©
Ġ×IJ ×ķ×ķ×Ļר
ãģĬ äºĴ
ãģĬäºĴ ãģĦ
Ġpot rÃł
ĠPa ÅĦst
ĠPaÅĦst wo
Ġب ÙĬاÙĨ
ĠبÙĬاÙĨ ات
Ġин огда
ĠÑĢ Ð°
ĠÑĢа ÑģÑĤв
ĠÑĢаÑģÑĤв оÑĢ
Ġ×ĸ ×ŀ׳
ยิ à¹īม
Ä Ĩ
ãģ¾ ãģķ
ãģ¾ãģķ ãģ«
ãĥķãĤ¡ ãĤ¤ãĥ«
Ġgörd Ã¼ÄŁÃ¼
สà¸ĩ à¸Ħร
สà¸ĩà¸Ħร าม
ĠArk adaÅŁ
ĠrozwiÄħz ania
×ŀ ×ķ×ĺ
pi ÄĻ
piÄĻ t
ص غر
ส ย
สย าม
ãĤĨ ãģ£ãģıãĤĬ
Ġtr ần
Ġeconom ÃŃa
Ġgeh ören
ãĤ·ãĥ§ ãĥ¼
ĠsÅĤ ucha
à¸ŀà¸Ń à¹ĥà¸Ī
ĠоÑĤмеÑĤ ил
ÙĨت ÙĤÙĦ
Ġprop ósito
ĠваÑĪ ÐµÐ³Ð¾
Ġnh ắn
à¹ģà¸ĸ ว
Ġком иÑģ
ĠкомиÑģ Ñģи
waż nie
Ġy avaÅŁ
×ŀ ×Ļ×§
×ŀ×Ļ×§ ×ķ×Ŀ
ש×IJ׾ ת
Ġyıll arda
ĠÐ ®
ĠЮ ÑĢ
×ł×¡ ×Ļ×ij×ķת
ת צ
תצ ×ķ×Ĵ
Ġод нÑĥ
Ġ à¸Ńยà¹Īาà¸ĩà¹Ħร
Ġà¸Ńยà¹Īาà¸ĩà¹Ħร à¸ģà¹ĩà¸ķาม
ëģ ¼
à¹Ħล à¹Ī
تس ÙĦÙĬÙħ
بÙĦ اغ
Ġì ī
Ġìī ½
Ġìī½ ê²Į
ãĥļ ãĥ³
зв ÑĥÑĩ
ĠW äh
ĠWäh rend
Ġ×Ļ ×Ļת
Ġ×Ļ×Ļת ׼ף
Ġkh uyên
Ġv ẽ
Ġа меÑĢ
ĠамеÑĢ Ð¸Ðº
ĠамеÑĢик ан
ĠамеÑĢикан Ñģк
ع جب
ãĥĽãĥ¼ãĥł ãĥļãĥ¼ãĤ¸
Ġник ÑĤо
ĠÙĤ Ùİ
ĠÙĤÙİ Ø§ÙĦ
ĠÙĤÙİØ§ÙĦ Ùİ
ÐIJ ÐĹ
Ùħ جÙħÙĪØ¹
ÙħجÙħÙĪØ¹ ات
Ġnecess itÃł
Ġpob li
Ġpobli żu
Ġph ấn
ĠСо обÑī
ÙħÙĤ اط
ÙħÙĤاط ع
Ġ×Ķצ ×ķר×ļ
la ÅŁtırma
ว ิà¸Ķ
วิà¸Ķ ี
วิà¸Ķี à¹Ĥà¸Ń
Ġ그리 ìĬ¤
Ġ그리ìĬ¤ ëıĦ
ãĤ¿ãĤ¤ ãĥŁ
ãĤ¿ãĤ¤ãĥŁ ãĥ³ãĤ°
×§×ĺ ×Ĵ×ķר
×§×ĺ×Ĵ×ķר ×Ļ×Ķ
Ġ×Ĺ ×ķפ
Ġ×Ĺ×ķפ ש×Ļ
أ جر
Ġим ени
ĠÑĢан ее
à¹Ģà¸ŀืà¹Īà¸Ńà¸Ļ à¹Ĩ
ĠJes ús
Ñģо един
Ñģоедин ен
Ġר ×Ĺ×ķ×§
à¹Ĥà¸ļ รา
à¹Ĥà¸ļรา à¸ĵ
ĠH Æ¡n
Ġth áºŃp
تع ÙĬÙĬÙĨ
Ġtart Ä±ÅŁ
ĠtartÄ±ÅŁ ma
ĠGes pr
ĠGespr äch
תר ×ķפ
תר×ķפ ×ķת
Ġcat égorie
Ġоказ Ñĭва
ĠналиÑĩ ие
Ġprésent é
Ġk ull
Ġkull and
Ġkulland ı
Ġü nl
Ġünl ü
ĠÙģ Ùĥرة
из аÑĤоÑĢ
×IJ ×ķ׳
×IJ×ķ׳ ×Ļ×ij
×IJ×ķ׳×Ļ×ij רס
×IJ×ķ׳×Ļ×ijרס ×Ļ×ĺת
ĠÑĢаÑģÑģ маÑĤ
ĠÑĢаÑģÑģмаÑĤ ÑĢ
ĠÑĢаÑģÑģмаÑĤÑĢ Ð¸Ð²Ð°
تÙĥÙĦ Ùħ
Ùĥت رÙĪ
ÙĥترÙĪ ÙĨÙĬ
ĠÑģо ÑĩеÑĤ
ĠÑģоÑĩеÑĤ а
ãĤĴè¦ĭ ãģĽ
Ġng ừa
ĠÐł еÑģп
ĠÐłÐµÑģп Ñĥб
ĠÐłÐµÑģпÑĥб лик
ãĤ¦ ãĤ©
ãĤ¦ãĤ© ãĥ¼
ĠÐľ еждÑĥ
ĠìŀĪ ê²Į
Ġm â
ĠìļĶ ì²Ń
ض ار
ลุ à¹īà¸Ļ
ëĮĢ íķĻêµIJ
×ĸ ×Ļ׼
×ĸ×Ļ׼ ר×ķף
ãĤ¹ ãĥļ
ãĤ¹ãĥļ ãĥ¼ãĤ¹
ĠкÑĢаÑģ оÑĤ
ï¼ ¨
ê¼ Ń
ãĤĴ éĽĨ
ãĤĴéĽĨ ãĤģ
ë° Ŀ
Ġ×Ķ׳ ×IJ
Ġ×Ķ׳×IJ ש×Ŀ
Ġê°Ģ ìļ´
Ġê°Ģìļ´ ëį°
تÙĥÙĦ Ù쨩
ĠØŃ ÙĤÙĬÙĤÙĬ
Ġh alk
Ġhalk ın
ÑİÑī ÑĥÑİ
ĠÑģп ин
סר×ĺ ף
ĠпеÑĢв ого
Ġпол ож
Ġполож иÑĤелÑĮн
Ġд л
Ġдл иÑĤелÑĮн
ĠV Ä©nh
ê´ ´
ĠÑģÑĭ ÑĢ
ĠíĨµ íķĺìŬ
ë³ij ìĽIJ
à¹Ĥรà¸ĩ à¸ĩาà¸Ļ
รัà¸ļ à¸ľà¸´à¸Ķ
รัà¸ļà¸ľà¸´à¸Ķ à¸Ĭà¸Ńà¸ļ
تج ÙĨب
s ÅĤ
sÅĤ uch
ãĤ¢ãĥ« ãĥIJ
ãĤ¢ãĥ«ãĥIJ ãĥł
ëī´ ìĬ¤
Ġpat ië
Ġpatië nt
Ġìĺ ¤í
Ġìĺ¤í ŀ
Ġìĺ¤íŀ Ī
Ġìĺ¤íŀĪ ëł¤
ĠDer ne
ĠDerne ÄŁi
wró ci
wróci Äĩ
Ġоб Ñī
ĠобÑī еÑģÑĤв
ĠобÑīеÑģÑĤв енно
ĠêµIJ ìĪĺ
tıģ ımız
Ġ×Ķ×ŀש ×Ļ×ij
k örper
Ġпозв ол
Ġпозвол иÑĤ
ĠChi ến
أخ ÙĪ
ĠAy dın
à¸Ķà¹īาà¸Ļ ล
à¸Ķà¹īาà¸Ļล à¹Īาà¸ĩ
Ġdr u
Ġdru ż
Ġdruż yn
Ġë°ľ íijľ
ĠTh ảo
جÙĩ اد
à¸ģระà¸Ĺ ูà¹ī
Ġк ÑĢов
ĠкÑĢов и
Ġiçer ik
Ġnad zie
Ġnadzie jÄĻ
ĠС моÑĤÑĢ
Ġph ức
ج تÙħاع
جتÙħاع ÙĬØ©
ком пон
компон енÑĤ
Ġб ил
Ġбил еÑĤ
ãĥIJ ãĥ³ãĥī
ĠPol ÃŃcia
اÙĦ تÙĩ
اÙĦتÙĩ اب
ØŃر Ùģ
ت خط
تخط ÙĬØ·
ãĤ³ ãĥ¼ãĥ
ãĤ³ãĥ¼ãĥ Ĵ
ãĤ³ãĥ¼ãĥĴ ãĥ¼
・・ ・
à¸ĭ à¸Ńย
Ġcréd it
è²· ãģ£ãģŁ
ĠпоÑĢ Ñıд
ĠпоÑĢÑıд ке
Ġph ó
Ġw ida
Ġwida Äĩ
جر ائÙħ
à¸ľ ี
ĠbÄĻd ÄĻ
Ġ×ŀ פת×Ĺ
ãĥij ãĥ¼ãĥ
ãĥijãĥ¼ãĥ Ĩ
ãĥijãĥ¼ãĥĨ ãĤ£
ãĥijãĥ¼ãĥĨãĤ£ ãĥ¼
ĠKa ż
ĠKaż dy
ĠнеобÑħодим оÑģÑĤи
à¸Ł à¸Ńรà¹Į
à¸Łà¸Ńรà¹Į ม
Ġмал ÑĭÑĪ
Ġпл оÑĤ
ĠÑĥ ÑģÑĤÑĢой
ĠÑĥÑģÑĤÑĢой ÑģÑĤва
à¸ĸ à¸Ńà¸Ļ
ĠoluÅŁtur ul
ĠÅĽwi ad
ĠÅĽwiad om
Ùħع Ùĩد
ĠпÑĢоиз веден
Æ ł
ר ×Ļש
Ùħست Ø«
Ùħستث Ùħر
׳×Ļ ×Ļר
pa ñ
Ġ; -)
Ġë°ľ 견
Ġgör üyor
Ùħؤ ÙĦÙģ
ĠÄIJ á»ģ
ĠاÙĦÙĨ ÙĪØ§Ø¨
×Ĺ×§ ×Ļר×Ķ
Ġm á»ıi
è¿° ãģ¹
ÐĿ ик
ìŀĸ ìķĦ
ìŀĸìķĦ ìļĶ
prowadzi ÅĤ
l óg
lóg ica
פס ×ĺ
פס×ĺ ×Ļ×ij׾
Ġ×ŀ ×ĵ×Ķ
Ġ×ŀ×ĵ×Ķ ×Ļ×Ŀ
ãģĵãģĵ ãģ¾ãģ§
×Ķ ×ª×Ĺ
×Ķת׊׾×Ķ
Ġפ ×ķס
Ġפ×ķס ×ĺ×Ļ×Ŀ
Ġн ев
Ġнев оз
Ġневоз можно
ĠdostÄĻp ny
Ġغ اÙĦ
ĠغاÙĦ ب
Ġbez pieczeÅĦst
ĠbezpieczeÅĦst wa
åĪĨ ãģĭãĤĭ
ĠF ührung
à¸ģ ีà¹ī
gem Ã¤ÃŁ
à¸Ĭà¹Īวà¸ĩ à¹Ģวลา
Ġìļ°ë¦¬ ëĤĺ
Ġìļ°ë¦¬ëĤĺ ëĿ¼
ãģ¥ ãģıãĤĬ
ĠاÙĦÙħ سÙĦ
ĠاÙĦÙħسÙĦ ØŃØ©
Ġlibert é
клÑİÑĩ ение
Ġzam ów
Ġzamów ienia
รà¸ĸ à¹Ħà¸Ł
Ø£ ÙģÙĦ
Ø£ÙģÙĦ اÙħ
Ùħ راج
Ùħراج عة
Ġë¹Ħ êµIJ
ĠاÙĦت اب
ĠاÙĦتاب عة
Ġë§Į ëĤĺ
Ġб Ñĥм
ĠбÑĥм аг
Ġgé nero
Ġìŀĺ 못
×ŀ פ×ķר×ĺ
è²·ãģĦ çī©
ĠÙĦدÙĬ Ùĥ
Ġ×ľ×¢ ×Ļת
Ġ×ľ×¢×Ļת ×Ļ×Ŀ
ĠsÅĤ ab
ĠпÑĢедÑģÑĤав лÑı
ãĤ¿ ãĤ¤ãĥĪ
ãĤ¿ãĤ¤ãĥĪ ãĥ«
Ùħ ص
Ùħص Ø·Ùģ
ÙħصطÙģ Ùī
Ġdifficult é
ãĥĨãĤ£ ãĥĸ
Ġpew noÅĽci
ĠpewnoÅĽci Äħ
Ġ무 ìĬ¨
إ رس
إرس اÙĦ
Ġд алÑĮ
ĠдалÑĮ ÑĪе
Ġ׾ ×ł×¡
Ġ×ľ×ł×¡ ×ķת
หมูà¹Ī à¸ļà¹īาà¸Ļ
×ŀס×ŀ ׼×Ļ
أسÙĦ ÙĪØ¨
Ġzw ÅĤ
ĠzwÅĤ as
ĠzwÅĤas zc
ĠzwÅĤaszc za
ĠпÑĢ ÐµÐ¶
ĠпÑĢеж де
ĠоÑĢганиз аÑĨиÑı
Ġdön emin
Ġdönemin de
Ġ Ủ
ĠỦ y
ä¸ĭ ãģĴ
ĠпоÑģлед ние
Ġgü ne
Ġgüne ÅŁ
Ġ×IJ ×ĸר
Ġ×IJ×ĸר ×Ĺ×Ļ
ãģ§ãģĤ ãĤįãģĨ
ĠÙĨ ÙĤ
ĠÙĨÙĤ اط
æŃ£ ãģĹãģĦ
ĠÑĢ ÐµÐ³
ĠÑĢег иона
ĠFör der
ê²½ ìĺģ
dıkl ar
dıklar ını
trzym aÄĩ
أش Ùĥ
أشÙĥ اÙĦ
×Ķת ×IJ
×Ķת×IJ ×ŀ×Ķ
à¸Ĺำà¹ĥหà¹ī à¹Ģà¸ģิà¸Ķ
ĠGeb ä
ĠGebä ude
ĠСеÑĢ Ð³
ĠСеÑĢг ей
Ġз доÑĢов
ĠздоÑĢов ÑĮÑı
Ġr ãi
ĠпÑĢед ÑĥÑģ
ĠпÑĢедÑĥÑģ моÑĤÑĢ
ĠпÑĢедÑĥÑģмоÑĤÑĢ ÐµÐ½
Ġ×Ķצ ×Ļ×ij
Ġ×Ķצ×Ļ×ij ×ķר×Ļ
Ġdés ir
Ġн оÑĩ
ĠноÑĩ ÑĮ
möglich keiten
Ġ×IJ×Ĺר ×ķ׳×Ļ×Ŀ
Ġsoir ée
ĠNh áºŃn
Ù ª
à¸Ľà¸£à¸°à¸§à¸±à¸ķิ ศาสà¸ķรà¹Į
êµIJ íĨµ
ĠØ£ Ø®ÙĬ
Ġdé cid
Ġdécid é
Ġwy ja
Ġwyja ÅĽni
Ġ สิ
Ġสิ à¸ĩ
Ġสิà¸ĩ หา
Ġสิà¸ĩหา à¸Ħม
à¹ģ à¸Ńรà¹Į
หà¸Ļà¹īา à¸Īà¸Ń
ס תר
Ġê ¶
Ġê¶ Į
Ġê¶Į 리
pl ätze
ب Ø·ÙĦ
ê±´ ìĦ¤
Ġ×IJ ×Ļ×ŀ×Ļ
Ġ×IJ×Ļ×ŀ×Ļ ×Ļ׾
ãģ ½
تر اث
×IJ׾ ×Ļ×ŀ×ķת
Ġdispon ÃŃveis
Ġz ale
Ġzale ży
à¸Ľà¸£à¸°à¸Ĭา สัมà¸ŀัà¸Ļà¸ĺà¹Į
ĠÅļw iat
Ġpor ówn
Ġporówn a
Ġ׾×ĺ ×ķ×ijת
×Ķ×ĸ ×ŀ׳×Ķ
Ġ×Ľ×ª ×ķצ×IJ×Ķ
Ġ×ij ק׾
Ġ×ijק׾ ×ķת
ĠоÑĤ кÑĢ
ĠоÑĤкÑĢ Ñĭва
ãĥij ãĥ¯ãĥ¼
ë¿IJ ë§Į
Ġв ÑģÑı
ĠвÑģÑı к
ãģ¨ãģª ãģ£ãģ¦ãģĦãĤĭ
Ġgi áºŃn
Ġок ÑĢÑĥ
ĠокÑĢÑĥ жа
ĠокÑĢÑĥжа ÑİÑī
ĠUnivers ität
ĠÑĢ Ð¾Ð¶
ĠÑĢож д
ĠÑĢожд ениÑı
Ø® ÙĬÙĦ
Ġкомпани й
ĠÑĢазлиÑĩ нÑĭе
ĠЦ ена
׳×Ļ ×ķ×ĸ
׳×Ļ×ķ×ĸ ׾
׳×Ļ×ķ×ĸ׾ ×ĺר
Ġê³µ ê°Ħ
Ġê°ľ ëħIJ
landır ma
ĠÑĥдал ен
à¸ŀัà¸ģ à¸ľ
à¸ŀัà¸ģà¸ľ à¹Īà¸Ńà¸Ļ
Ġprote cción
Ġb ÅĤ
ĠbÅĤ ÄĻd
à Ī
Ġíĸī ë³µ
ĠÅŁ ü
ĠÅŁÃ¼ phe
Ġí Ķ
ĠíĶ ¼
Ġíͼ íķ´
Ġëĭ¤ 르
à¹Ħมà¹Ī à¹Ģà¸ģิà¸Ļ
ãģ¿ ãģª
ãģ¿ãģª ãģķãĤĵ
ĠпоÑĤ ÑĢеб
ĠпоÑĤÑĢеб иÑĤел
ĠاÙĦÙĥÙĦ اÙħ
ìķĦ ë²Ħ
ìķĦë²Ħ ì§Ģ
ãĤĴ使 ãģ£ãģŁ
Ġbụ i
ĠпоÑĤ еÑĢ
ĠпоÑĤеÑĢ Ñı
ĠØ¢ ÙĦاÙģ
ĠнаÑģÑĤоÑıÑī ее
ãģıãģªãĤĬ ãģ¾ãģĹãģŁ
clus ão
ãĤ³ ãĥĶãĥ¼
צ פ×Ļ
צפ×Ļ ×Ļ×Ķ
Ø® ÙĦا
Ø®ÙĦا ص
ล à¹īำ
ãĥ¯ ãĤ¤ãĥ³
Ġมี à¸Ļา
Ġมีà¸Ļา à¸Ħม
ش خص
شخص ÙĬات
Ġ×ĸ ×§
Ġ×ĸ×§ ×ķ×§
×Ļ ×Ļצ
×Ļ×Ļצ ×Ĵ
èĢĥãģĪ æĸ¹
Ġürün ü
ĠиÑģп ол
ĠиÑģпол ни
Ġcompañ ero
×§ צ×Ķ
×ŀ×¢ ׳×Ļ×§
Ùħ ØŃÙħد
Ġc ámara
Ġп ед
Ġпед аг
Ġпедаг ог
м аÑĢ
маÑĢ Ðº
×Ķת ׳×Ĵ×ĵ
ĠìĨĮ ê°ľ
Ġcom unitÃł
ê³ ¤
ĠNg Ãłi
สà¸ĩ à¸ļ
ĠmieszkaÅĦ ców
ĠÙĨ ÙĩائÙĬ
iv ité
Ġи де
Ġиде алÑĮн
ĠØ£ سبÙĪØ¹
Ġ×Ļ ×¢×ľ
Ġ׾ ר×IJש
Ġ׾ר×IJש ×ķ׳×Ķ
ĠзапиÑģ и
ĠкоÑĢ Ð¿ÑĥÑģ
วà¸ĩ ศ
วà¸ĩศ à¹Į
ĠÐĶ Ð¼
ĠÐĶм иÑĤ
ĠÐĶмиÑĤ ÑĢ
Ġkön nt
Ġböl ges
Ġbölges inde
׼ ×Ļ׼
׼×Ļ׼ ר
ĠاÙĦØ¥ Ø«ÙĨ
ĠاÙĦإثÙĨ ÙĬÙĨ
Ġng á»Ļ
ì¹ ł
د راج
Ġu da
Ġuda ÅĤo
ìº IJ
بر ÙĨاÙħج
ĠÑģÑĥд еб
ĠÑģÑĥдеб н
Ġzun ächst
ĠEduc ación
ãģ¨ãģª ãģ£ãģ¦ãģĦãģ¾ãģĻ
Ġ×Ķ×IJ ×ŀ×Ļת×Ļ
Ġİ nt
Ġİnt ernet
ĠcaÅĤ ego
ãĥĹãĥª ãĥ³
إ بد
إبد اع
ĠпоÑĢ ÑĤал
à¹Ĥà¸ķ à¹ī
Ġ×Ķ×§ ש×ķר
пл од
ĠÙħ د
ĠÙħد رÙĬد
×ŀסע ×ĵ×Ķ
ĠØ´ÙĬ ئ
ĠØ´ÙĬئ ا
à¸ģà¹Īà¸Ń สรà¹īาà¸ĩ
Ġì°¸ ê³ł
à¹Ģà¸Ĺ ร
à¹Ģà¸Ĺร à¸Ķ
Ġ×ij×ŀ קר×Ļ×Ŀ
Ġb ât
Ġbât iment
åij¼ ãģ³
ç´ł æķµ
ç´łæķµ ãģª
przedsiÄĻbior st
przedsiÄĻbiorst w
Ġ×ł×ª ×ķ׳×Ļ×Ŀ
×Ĺ׾ ×ķ×Ŀ
ร วย
Ùħ ÙĪØ¶ÙĪØ¹
ĠÑģоб ÑĢан
вед ÑĥÑī
ĠÑĤе аÑĤ
ĠÑĤеаÑĤ ÑĢ
m eye
meye ceÄŁi
Ġpien iÄħ
ĠpieniÄħ d
ĠpieniÄħd ze
ÑĢез иденÑĤ
ØŃ صر
ìĺ ¥
à¹Ģย ืà¸Ńà¸Ļ
ĠÑĥ ни
ĠÑĥни веÑĢ
ĠÑĥнивеÑĢ Ñģ
ĠÑĥнивеÑĢÑģ иÑĤеÑĤ
ĠاÙĦر ØŃ
ĠاÙĦرØŃ ÙħÙĨ
ĠÑĤеÑħ нолог
ĠÑĤеÑħнолог ии
ìĹIJ ëĦĪ
ìĹIJëĦĪ ì§Ģ
Ġíķ Ń
ĠíķŃ ìĥģ
à¸ĺ า
à¸ĺา à¸ķุ
ĠEspañ ol
×ĵ×Ĵ ש
Ġêµ ī
Ġêµī ìŀ¥
Ġêµīìŀ¥ íŀĪ
ĠÅĤ at
ĠÅĤat wo
Ġk á»ĭch
إ ز
إز اÙĦØ©
ĠдейÑģÑĤв ие
ĠsaÄŁ layan
สุà¸Ķ ยà¸Ńà¸Ķ
Ġzosta Äĩ
Ġdispon ÃŃvel
ïº į
ver ständ
verständ lich
tw or
twor zyÄĩ
ع جز
à¹Ģà¸Ĥ à¹īม
ยà¹Ī à¸Ńม
Ġstrat ég
Ġstratég ie
à¸ľà¸¥ à¹Ħมà¹ī
Ġê°ģ ì¢ħ
ĠÙħ ÙĪØ§
ĠÙħÙĪØ§ ض
ĠÙħÙĪØ§Ø¶ ÙĬع
اØŃ تج
اØŃتج اج
Ġ Ấ
ĠẤ n
×ŀ ×ŀש׾×Ķ
ĠÅŁek il
×ŀ ×Ĺ׾
×ŀ×Ĺ׾ ×ķת
Ġ à¸ĺ
Ġà¸ĺ ัà¸Ļ
Ġà¸ĺัà¸Ļ วา
Ġà¸ĺัà¸Ļวา à¸Ħม
Ġìĭ¤ ìłľ
Ġìĭ¤ìłľ ë¡ľ
ì¤ij ìķĻ
ëįĶ ëĿ¼
ĠÑĪ Ð¸ÑĢ
ĠÑĪиÑĢ Ð¾ÐºÐ¾
Ġsol ución
วาà¸ĩ à¹ģà¸ľà¸Ļ
×IJ×ķ×ĺ ×ķ×ŀ
×IJ×ķ×ĺ×ķ×ŀ ×ĺ×Ļ
ĠÑĢ ÐµÑģÑĤ
ĠÑĢеÑģÑĤ оÑĢ
ĠÑĢеÑģÑĤоÑĢ Ð°Ð½
ëį ¸
ÑĤ ÑĢад
ÑĤÑĢад и
ÑĤÑĢади ÑĨион
ÑĤÑĢадиÑĨион н
มะ à¹Ģรà¹ĩ
มะà¹Ģรà¹ĩ à¸ĩ
à¹Ĥ ส
Ġol masını
×ŀ×ķס ר
ĠоÑĤноÑĪ ÐµÐ½Ð¸Ð¸
Ġê°ĢëĬ¥ ìĦ±
Ġy uk
Ġyuk arı
ìĨ Ķ
ĠÑģ ÑĦ
ĠÑģÑĦ еÑĢе
Ġ×§ ×ķפ
ãĤ± ãĥ¼ãĤ
ãĤ±ãĥ¼ãĤ Ń
âĢķ âĢķ
ĠاÙĦØ£ ÙĦÙħ
ĠاÙĦØ£ÙĦÙħ اÙĨÙĬ
Ả N
ת×ķ׼ ׳×Ļ×ķת
ĠÑģÑĥÑīеÑģÑĤв ÑĥеÑĤ
æĪij ãĢħ
ĠاÙĦص ادر
ĠTr á»įng
Ġа д
Ġад миниÑģÑĤ
ĠадминиÑģÑĤ ÑĢа
ĠадминиÑģÑĤÑĢа ÑĨи
ĠдÑĢÑĥг ими
Ñģп еÑĪ
عÙĦاÙħ ات
Ġа б
Ġаб Ñģол
ĠабÑģол ÑİÑĤ
ĠабÑģолÑİÑĤ но
ฤ à¸Ķู
é tr
étr anger
нÑı ÑĤи
нÑıÑĤи е
×¢ ×ķ׳
×¢×ķ׳ ש
ĠÙĤ ائ
ĠÙĤائ ÙĦا
Ġм аÑģ
ĠмаÑģ ло
ãĥī ãĤ¤
ãĥīãĤ¤ ãĥĦ
å¿ħè¦ģ ãģĮãģĤãĤĬãģ¾ãģĻ
×ŀ×ķ×ĸ ×Ļ×IJ
×ŀ×ķ×ĸ×Ļ×IJ ×ķף
ĠNgo ại
Ġkê nh
à¸ģาร à¸Ńà¸Ńà¸ģà¹ģà¸ļà¸ļ
×ŀ פק
×ŀפק ×ĵ
ÙħÙĨ از
ÙħÙĨاز ÙĦ
ë· °
íĹ ¤
ÙħÙĩ ارات
Ġpropri été
פ×Ĵ ×Ļש×Ķ
Ñĩ ÑĢ
ÑĩÑĢ ÐµÐ¶
ÑĩÑĢеж ден
×Ķ ×ķצ×IJ×Ķ
ØŃÙĥ ÙĬÙħ
ĠíĻ Ī
ĠíĻĪ íİĺìĿ´ì§Ģ
åİ ³
åݳ ãģĹãģĦ
×¢ ×ŀ×ĵ×Ķ
ĠAu ÃŁen
سÙĪ Ø¡
ë¹ Ī
ĠÙĪ Ø®
ĠÙĪØ® اصة
ин ÑĤеÑĢ
инÑĤеÑĢ ÐµÑģ
èĩ´ ãģĹãģ¾ãģĻ
Ġhük üm
à¹Ħà¸Ĥ มัà¸Ļ
Ġdav ran
Ġdavran Ä±ÅŁ
à¹Ģà¸ķ ียà¸ĩ
в ÑĢем
вÑĢем енно
à¹Ģà¸Ĺศ à¸ģา
à¹Ģà¸Ĺศà¸ģา ล
å¼ķ ãģ£
å¼ķãģ£ è¶ĬãģĹ
×IJר ×ķ×Ĺ
×IJר×ķ×Ĺ ×ª
à¹Ģ วิ
à¹Ģวิ รà¹Į
à¸Ńยà¹Īาà¸ĩ รวà¸Ķà¹Ģรà¹ĩว
ĠìŬ íĸī
ĠÑĢан ÑĮ
ĠÑĢанÑĮ ÑĪе
Ġzob ow
Ġzobow iÄħ
ĠzobowiÄħ z
Ġ×ķ׼ ×ŀ×ķ×ijף
ĠاÙĦÙħ Ùĩ
ĠاÙĦÙħÙĩ ÙĨÙĬ
ãĤ¢ ãĤ¸
ãĤ¢ãĤ¸ ãĤ¢
ë°© ìĨ¡
à¸Ńà¸Ńà¸ģ à¸ģำลัà¸ĩ
à¸Ńà¸Ńà¸ģà¸ģำลัà¸ĩ à¸ģาย
am éli
améli orer
å½ĵãģŁãĤĬ åīį
Ġreg elm
Ġregelm Ã¤ÃŁig
ãģĬ åĭ
ãģĬåĭ §
ãģĬåĭ§ ãĤģ
Ġm ưá»Ŀi
بر Ùħج
ĠNat ürlich
ĠD Å©ng
ĠاÙĦر جاÙĦ
Ġthé p
Ġol muÅŁtur
×ŀ×ķס ×Ļ×§×Ķ
f älle
주 íĥĿ
ĠاÙĦÙģ Ø±Øµ
Ġnaj wiÄĻks
ĠnajwiÄĻks zy
Ġça ÄŁ
ĠçaÄŁ rı
ì¸ ł
ĠvÃŃ ct
ĠvÃŃct ima
ĠÑģовеÑĢ ÑĪен
×Ķ×Ļ ×Ļת×Ļ
à¹Ģà¸Ķ ี
à¹Ģà¸Ķี à¹ĭ
à¹Ģà¸Ķีà¹ĭ ยว
ü yü
Ġд оп
Ġдоп олн
Ġдополн иÑĤелÑĮно
à¹ģà¸ķà¸ģà¸ķà¹Īาà¸ĩ à¸ģัà¸Ļ
Ġá l
Ġál bum
à¸Ľà¸£à¸°à¸Īำ à¸Ľà¸µ
ĠÑĦ едеÑĢ
ĠÑĦедеÑĢ Ð°Ð»ÑĮн
Ġobs ÅĤ
ĠobsÅĤ ugi
à¹Ģร ืà¹Ī
à¹Ģรืà¹Ī à¸Ńย
à¹Ģรืà¹Īà¸Ńย à¹Ĩ
ëģ Į
Ġngh ìn
ĠBaÅŁkan lıģı
تأ سÙĬ
تأسÙĬ س
Ġ×ij×ij ×ķקר
Ġ×¢×ij×ķ×ĵ ×ķת
Ġبص ÙĪØ±Ø©
ãĤıãģij ãģ§ãģ¯ãģªãģĦ
führ er
ãĤ¹ ãĤŃ
ãĤ¹ãĤŃ ãĥ«
ĠاÙĦÙĤ ض
ĠاÙĦÙĤض ÙĬØ©
Ġдолж ноÑģÑĤ
ÙģØ§Ø± ÙĤ
Ġcomeç ou
Ġorganis é
Ġxu ân
ĠÑģообÑī аеÑĤ
ĠпÑĢи д
ĠпÑĢид еÑĤÑģÑı
TÃľ RK
ãĥ¬ ãĥ¼ãĤ·ãĥ§ãĥ³
Kh ông
است Ùģ
استÙģ Ø§Ø¯Ø©
ä¸ĬãģĮ ãģ£ãģ¦
Ġum ie
Ġumie jÄĻ
ĠumiejÄĻ tn
ĠumiejÄĻtn oÅĽci
ëĤ ¸
à¹Ģà¸Ļ à¸Ńรà¹Į
×ĵ×ķ ×ķ×Ĺ
ÃŃs imo
I ÃĬ
IÃĬ N
Ġalcan ç
Ġ à¸ķุ
Ġà¸ķุ ลา
Ġà¸ķุลา à¸Ħม
ש׾ ×ĺ×ķף
Ġél è
Ġélè ves
ĠÄij u
ĠÄiju á»ķi
ĠØ£ Ùģ
ĠØ£Ùģ Ø±ÙĬ
ĠØ£Ù쨱ÙĬ ÙĤÙĬ
ĠØ£Ù쨱ÙĬÙĤÙĬ ا
ãĤĴæİ¢ ãģĻ
ĠпÑĢед ложениÑı
ج اد
ĠÑħоÑĤ ÑĮ
Ñģ ал
Ñģал он
à¸Ľà¸£à¸° à¹Ģม
à¸Ľà¸£à¸°à¹Ģม ิà¸Ļ
ãĤŃ ãĥĥãĥģ
ãĤŃãĥĥãĥģ ãĥ³
×ij×ĵ×Ļ×§ ×ķת
Ġch ù
Ġchù a
ÐĴ иде
ÐĴиде о
иÑĢов ка
ĠÑħоÑĤ иÑĤе
Ġspéc ifique
รส à¸Ĭาà¸ķิ
è¾¼ ãĤĵãģł
伸 ãģ³
×Ķצ׾ ×Ĺת
ãģ©ãģ® ãĤĪãģĨãģ«
سع ادة
Ġл ид
Ġлид еÑĢ
ม à¸ĩ
มà¸ĩ à¸Ħล
ØŃ اÙħÙĦ
หล ุà¸Ķ
à¸Ńยà¹Īาà¸ĩ à¸ķà¹Īà¸Ń
à¸Ńยà¹Īาà¸ĩà¸ķà¹Īà¸Ń à¹Ģà¸Ļืà¹Īà¸Ńà¸ĩ
ãģķãģĽãģ¦ éłĤ
تس ÙĪÙĬ
تسÙĪÙĬ ÙĤ
ĠaÅŁaģı d
ĠaÅŁaģıd aki
ĠÑĨ елÑĮ
ĠÑĨелÑĮ Ñİ
ĠAra ÅŁtırma
à¸Ĥัà¸ļ รà¸ĸ
Ùĩ ذÙĩ
ลà¸ĩ à¸Ĺะ
ลà¸ĩà¸Ĺะ à¹Ģà¸ļ
ลà¸ĩà¸Ĺะà¹Ģà¸ļ ียà¸Ļ
تÙĥ اÙħÙĦ
Ġc io
Ġcio è
ãģ¦ ãģĬãģı
ĠاÙĦصØŃ ÙģÙĬ
ĠíĬ¹ ìłķ
полн иÑĤÑĮ
ãĤĵ ãģĺãĤĥãģªãģĦ
ãĤĵãģĺãĤĥãģªãģĦ ãģĭ
ĠاÙĦج Ùĩ
ĠاÙĦجÙĩ ات
ĠÑĥÑģпеÑĪ Ð½Ð¾
Ġв ок
Ġвок ÑĢÑĥг
ĠÑģиÑĤÑĥ аÑĨиÑı
Ġ×Ķ×IJ ×ŀר
Ġ×Ķ×IJ×ŀר ×Ļ×§
Ġ×Ķ×IJ×ŀר×Ļ×§ ×IJ×Ļ
×ŀ ×Ĵ×ĸ
×ŀ×Ĵ×ĸ ×Ļף
Ġак ÑĤÑĥ
ĠакÑĤÑĥ алÑĮн
é ta
éta is
Ġmog ÅĤa
ĠÑĤоÑĩ ки
Ġ×ŀ×Ķ ×ŀ×¢
Ġ×ŀ×Ķ×ŀ×¢ ×¨×Ľ×ª
มี à¸Ľà¸£à¸°à¸ªà¸´à¸Ĺà¸ĺà¸´à¸łà¸²à¸ŀ
×Ļר ×Ļ×ĵ×Ķ
×Ĵר ×ŀ׳
×Ĵר×ŀ׳ ×Ļ×Ķ
Ġг лав
Ġглав ное
Ġ미 ëŀĺ
Ġ׳׼ ×ķ׳×Ķ
ĠÙĪ Ø·ÙĨÙĬ
op port
opport unitÃł
Ġh á»§y
ĠÙĦ تØŃ
ĠÙĦتØŃ ÙĤÙĬÙĤ
Ġó rg
Ġórg ão
ãĤ¹ ãĥĶ
ãĤ¹ãĥĶ ãĥ¼ãĥī
Ġön ü
Ġönü ne
Ùħع اÙħÙĦ
ש×ŀ ×Ļר×Ķ
ĠвеÑģÑĮ ма
ĠwiÄĻks zo
ĠwiÄĻkszo ÅĽÄĩ
Ġاست راتÙĬج
ĠاستراتÙĬج ÙĬØ©
ĠÙģ Ø¥
ĠÙ쨥 ذا
à¹Ģà¸Ĭืà¹Īà¸Ń ม
à¹Ģà¸Ĭืà¹Īà¸Ńม à¸ķà¹Īà¸Ń
Ġ׾ פר
Ġ׾פר ×ĺ×Ļ×Ŀ
Ùħض ÙĬ
ĠGer çek
Ġçocuk ların
ÙĪØ« ائÙĤ
ĠÙħساء Ùĭ
Ġunterstüt zt
Ġpré st
Ġprést amo
ĠÐłÐ°Ð· меÑĢ
ĠÅŁ eker
Ġsé culo
×ij×Ķ ×Ļר
Ø´Ùĩ ÙĪØ±
Ġ à¸Ńีà¸ģ
Ġà¸Ńีà¸ģ à¸Ĺัà¹īà¸ĩ
Ġlleg ó
à¸¨à¸´à¸¥à¸Ľ ะ
æĪij ãģĮ
æĪijãģĮ å®¶
ع ÙĤÙĪ
عÙĤÙĪ Ø¨Ø§Øª
ĠF älle
Ġs ÅĤuż
ĠsÅĤuż b
ĠاÙĦØŃÙĤ ÙĪÙĤ
Ġпл иÑĤ
Ġи ноÑģÑĤ
ĠиноÑģÑĤ ÑĢан
ĠиноÑģÑĤÑĢан н
à¹ĥà¸Ļ à¸Ĥà¸ĵะà¸Ĺีà¹Ī
ãĤ« ãĥĨ
ãĤ«ãĥĨ ãĤ´
ãĤ«ãĥĨãĤ´ ãĥª
à¸Ńิ ส
à¸Ńิส ระ
à¹Ģà¸ľà¸¢ à¹ģ
à¹Ģà¸ľà¸¢à¹ģ à¸ŀร
à¹Ģà¸ľà¸¢à¹ģà¸ŀร à¹Ī
ãģĬ ãģĦ
ãģĬãģĦ ãģĹãģĦ
است ÙĤÙĦ
استÙĤÙĦ اÙĦ
تØŃ ض
تØŃض ÙĬر
åĬ© ãģij
Ùħر اÙģÙĤ
Ġ×ĵ ×ķר
Ġ×ĵ×ķר ש
×ŀת×Ļ ×Ļ×Ĺס
ס ×Ļ׼
ס×Ļ׼ ×ķ×Ŀ
íĮĮ íĬ¸
Ġwy ÅĽ
ĠwyÅĽ w
ĠwyÅĽw iet
ĠwyÅĽwiet l
ĠاÙĦاÙĨ ساÙĨ
ĠStra ÃŁen
ï¼ ¬
ãģ« åŁº
ãģ«åŁº ãģ¥
Ġcap ÃŃtulo
ลุ ย
Ġ×Ķ×ŀ×§ צ×ķ×¢×Ļ
ãģĤãĤĭ ç¨ĭ度
á» ¢
ĠاÙĦ ÙĦا
ĠاÙĦÙĦا زÙħØ©
æķĻ ãģĪ
Ġרש ×IJ×Ļ
з ав
зав иÑģ
завиÑģ им
à¸Ľà¸±à¸Ī à¸Īัย
à¹Ģà¸ĭ ล
à¹Ģà¸ĭล ลà¹Į
Ġdiffé rence
ĠAlt ın
Ġк ÑĢай
ĠкÑĢай не
Ġз ло
Ġgün ümüz
Ġн аÑĤÑĥÑĢ
ĠнаÑĤÑĥÑĢ Ð°Ð»ÑĮн
×Ĵ×ķ׾ ש×Ļ×Ŀ
Ġк аÑĤегоÑĢ
ĠкаÑĤегоÑĢ Ð¸Ð¸
Ġз нак
à¸ģà¹Īà¸Ńà¸Ļ หà¸Ļà¹īา
à¸ģà¹Īà¸Ńà¸Ļหà¸Ļà¹īา à¸Ļีà¹ī
ĠÙħÙĨ ت
ĠÙħÙĨت خب
ãĥĽ ãĥ¼ãĥ«
Ġе вÑĢо
ส ว
สว ม
ĠìľĦ ìĽIJ
ĠìľĦìĽIJ ëĭĺ
ĠاÙĦØŃ ÙĪØ«
ĠاÙĦØŃÙĪØ« ÙĬ
ĠÑģодеÑĢж иÑĤ
ãĥķãĤ¡ ãĥĥãĤ·ãĥ§ãĥ³
Ġ à¸ģัà¸Ļ
Ġà¸ģัà¸Ļ ย
Ġà¸ģัà¸Ļย ายà¸Ļ
ãĤª ãĥª
ãĤªãĥª ãĤ¸
ãĤªãĥªãĤ¸ ãĥĬãĥ«
Ġб ÑĢенд
ãĤĴæĮģ ãģ£ãģ¦ãģĦãĤĭ
Ġinvers ión
Ġê° ĸ
Ġê°ĸ ê³ł
Ġnov itÃł
ê´Ģ ê´ij
Ġà¸ŀ ฤษ
Ġà¸ŀฤษ à¸łà¸²
Ġà¸ŀà¸¤à¸©à¸łà¸² à¸Ħม
×ķר ×Ĺ×Ļ×Ŀ
׼׾ ×ķ׾
Ġng ạc
×Ļ ×Ļש
×Ļ×Ļש ×ķ×ij
f äll
fäll ig
ĠÑĤÑĢеб ÑĥеÑĤÑģÑı
Ġcar á
Ġcará cter
Ġprinc ÃŃpio
ĠÅĤ az
ĠÅĤaz ien
ĠÅĤazien k
Ġgi ãn
ÑģÑĤÑĢа ива
Ùħس اب
Ùħساب ÙĤØ©
à¹Ģà¸Ħรืà¹Īà¸Ńà¸ĩ à¸Ķืà¹Īม
ترÙĥ ÙĬب
vol ução
ĠÐŁ оÑĩ
ĠÐŁÐ¾Ñĩ ем
ĠÐŁÐ¾Ñĩем Ñĥ
казал оÑģÑĮ
ĠпÑĢимен ениÑı
à¹Ģà¸Ĺ ียม
íĮ Ķ
à¸Ĥà¹īà¸Ń à¹Ģสà¸Ļà¸Ń
à¸Ľà¸±à¸į à¸įา
Ġоб ÑĥÑĩ
ĠобÑĥÑĩ ениÑı
ĠÑģеÑĢ Ð¸
ĠÑģеÑĢи ал
Ġingl és
ĠÙĦ Ùĥرة
Ġ×ĺ ׾
Ġ×ĺ׾ פ×ķף
Ġìł ij
Ġìłij ê·¼
×IJ ×ķ×Ĵ
×IJ×ķ×Ĵ ×ķס
×IJ×ķ×Ĵ×ķס ×ĺ
ĠболÑĮÑĪ Ð¾Ðµ
ĠÐļон еÑĩно
×¢×Ļת ×ķ׳
×¢×Ļת×ķ׳ ×IJ×Ļ
Ġкноп к
Ġз н
Ġзн аÑĤÑĮ
ĠÄij á»±
ĠÄijá»± ng
вл аж
влаж н
×ŀ ×Ļ×ĺ×ij
ãĤ¬ ãĤ¤
ãĤ¬ãĤ¤ ãĥī
........ ..
Ġà¸ģ ุม
Ġà¸ģุม à¸łà¸²à¸ŀ
Ġà¸ģà¸¸à¸¡à¸łà¸²à¸ŀ ัà¸Ļ
Ġà¸ģà¸¸à¸¡à¸łà¸²à¸ŀัà¸Ļ à¸ĺ
Ġà¸ģà¸¸à¸¡à¸łà¸²à¸ŀัà¸Ļà¸ĺ à¹Į
be z
bez pieczeÅĦst
bezpieczeÅĦst w
ãĥijãĥij æ´»
ع اط
عاط Ùģ
ĠÄij áºŃm
Ġз ÑĢ
ĠзÑĢ ÐµÐ½Ð¸Ñı
Ġbor ç
Ġнед ел
Ġнедел Ñİ
Ġh á»ı
Ġhá»ı ng
ìŀ¥ ìķł
ìŀ¥ìķł ìĿ¸
ĠاÙĦع ÙĦاÙĤØ©
Ġíģ ¬
Ġíģ¬ ê²Į
à¹Ħร à¹Ī
à¸ļา à¸Ķ
à¸ļาà¸Ķ à¹Ģà¸Īà¹ĩà¸ļ
à¸Ŀ รั
à¸Ŀรั à¹Īà¸ĩ
à¸Ŀรัà¹Īà¸ĩ à¹Ģศ
à¸Ŀรัà¹Īà¸ĩà¹Ģศ ส
ר ×¢×Ļ
רע×Ļ ×ķ׳×ķת
Ġë Į
ĠëĮ ĵ
ĠëĮĵ ê¸Ģ
Ġnaj b
Ġnajb li
Ġnajbli ż
Ġnajbliż sz
ĠиÑģполÑĮз ÑĥеÑĤÑģÑı
Ġcient ÃŃf
ĠcientÃŃf ico
×¢ ×ŀ×§
Ġg ợi
Ø´ ØŃÙĨ
ĠÅĽ m
ĠÅĽm ier
ĠÅĽmier ci
à¸Ħาสิà¹Ĥà¸Ļ à¸Ńà¸Ńà¸Ļà¹Ħลà¸Ļà¹Į
×Ĺש×ij ת×Ļ
Ġn ingu
Ġningu ém
è¾¼ ãĤģ
ãģ ·
ĠÑĥ г
ĠÑĥг ол
ï½ °
פת ×Ļ×Ĺ
פת×Ļ×Ĺ ×ª
Ġ×Ķר×IJש ×ķ׳×Ļ×Ŀ
p ósito
ãĤŃ ãĥ¬ãĤ¤
ãģ© ãģĵãĤį
à¹Ģà¸Ĺà¹Īา à¹Ħ
à¹Ģà¸Ĺà¹Īาà¹Ħ หร
à¹Ģà¸Ĺà¹Īาà¹Ħหร à¹Ī
ĠинÑĤеÑĢ ÑĮеÑĢ
ĠØŃ اج
ĠØŃاج Ø©
สี à¸Ĥาว
ìĸ ¼
Ġn á»Ļ
Ġná»Ļ p
ĠÃŃ nd
ĠÃŃnd ice
สำ รวà¸Ī
Ġкажд ой
Ġhot éis
Ġnast ÄĻ
ĠnastÄĻ pn
Ġ×Ķ×§ ×ķ×ĵ
Ġ×Ķ×§×ķ×ĵ ×Ŀ
פ ×ķפ
פ×ķפ ×ķ׾
פ×ķפ×ķ׾ ר×Ļ
вÑĪ ÐµÐ¹
ãĤ·ãĥ³ ãĥĹ
ãĤ·ãĥ³ãĥĹ ãĥ«
ĠzdjÄĻ Äĩ
ĠгÑĢÑĥпп а
Ġпом еÑī
ĠпомеÑī ениÑı
ãģ©ãģĨ ãģĦãģĨ
ĠиÑģп ÑĭÑĤа
Ġog ÅĤ
ĠogÅĤ os
ĠogÅĤos zen
ĠogÅĤoszen i
สรà¹īาà¸ĩ สรร
สรà¹īาà¸ĩสรร à¸Ħà¹Į
à¸ŀร รà¸ĵ
Ġçık Ä±ÅŁ
ĠÑĩаÑģÑĤ ноÑģÑĤи
Ġ×ķ ×Ļ×ķתר
ç¶ļãģį ãĤĴ
ç¶ļãģįãĤĴ èªŃ
ç¶ļãģįãĤĴèªŃ ãĤĢ
à¸ģร ั
à¸ģรั ม
г ÑĢаÑĦ
Ġв лад
Ġвлад елÑĮ
ĠвладелÑĮ ÑĨ
Ġistedi ÄŁ
ĠistediÄŁ iniz
×ij׾ ×¢
×ij×ľ×¢ ×ĵ×Ļ
ÙħÙĪ Ø§Ùģ
ÙħÙĪØ§Ùģ ÙĤØ©
Ġ×Ļ ×ķר
Ġ×Ļ×ķר ×§
ãĤ«ãĥ¼ãĥī ãĥŃãĥ¼ãĥ³
ĠاÙĦÙħØ´ ÙĥÙĦ
ĠاÙĦÙħØ´ÙĥÙĦ Ø©
ĠêµŃ íļĮ
ס פ×ĺ
ספ×ĺ ×ŀ
ספ×ĺ×ŀ ×ijר
Ġìĸ´ ëłµ
Ùĥ اÙħ
ÙĥاÙħ ÙĬرا
sch lü
schlü sse
ĠØ« ÙĨ
ĠØ«ÙĨ ائÙĬ
ìī ½
ĠÐŀ Ñģоб
ĠÐŀÑģоб енно
Ġин веÑģÑĤи
ĠинвеÑģÑĤи ÑĨи
اØŃ تÙħ
اØŃتÙħ اÙĦ
E Äŀ
EÄŀ İ
íķĺ ê²łëĭ¤
Ġ×IJ ×ijר×Ķ
Ġ×IJ×ijר×Ķ ×Ŀ
Ġ×ij×Ĺ ×Ļ׳×Ŀ
Ø£ ÙĪØ¶
Ø£ÙĪØ¶ اع
Ġdé l
Ġdél ai
Ġ×IJ×ķ×Ķ ×ij×Ļ×Ŀ
ĠÑģо Ñħ
ĠÑģоÑħ ÑĢ
ĠÑģоÑħÑĢ Ð°Ð½Ð¸
ĠдоÑģÑĤ иж
ĠдоÑģÑĤиж ени
สิà¹Īà¸ĩ à¹ģ
สิà¹Īà¸ĩà¹ģ วà¸Ķ
สิà¹Īà¸ĩà¹ģวà¸Ķ ล
สิà¹Īà¸ĩà¹ģวà¸Ķล à¹īà¸Ńม
ĠاÙĦÙħ باشر
ĠÑĦ иг
ĠÑĦиг ÑĥÑĢ
мож ем
׾×ŀ×Ļ×ĵ ×Ķ
Ġcin é
Ġciné ma
Ġb ada
Ġbada ÅĦ
جب ÙĩØ©
Ġд еп
Ġдеп ÑĥÑĤ
ĠдепÑĥÑĤ аÑĤ
Ġdist ância
ĠاÙĦÙħ عار
ĠاÙĦÙħعار ضة
thè se
ü nc
ünc ü
Ġдан ного
ĠBel gi
ĠBelgi ë
Ġ×ij ×ij×§
Ġ×ij×ij×§ ש×Ķ
ย à¹Īาà¸Ļ
Ġsol ução
Ġ×Ķצ ×ĺר
Ġ×Ķצ×ĺר פ×ķ
ĠØ£ÙĨ ØŃ
ĠØ£ÙĨØŃ اء
Ġد ÙħØ´
ĠدÙħØ´ ÙĤ
มั à¹ī
มัà¹ī ย
Ùħ غرب
است عÙħاÙĦ
ĠS ÅĤow
ĠëıĻ ìĭľ
ĠëıĻìĭľ ìĹIJ
ĠÑģ оÑģ
ĠÑģоÑģ ед
ì²Ń ìĨĮ
ì²ŃìĨĮ ëħĦ
Ġг ÑĢаÑĦ
ĠгÑĢаÑĦ ик
Ġìŀij ìĿĢ
Ġyet i
Ġyeti ÅŁtir
ĠìĿ´ê²ĥ ìĿ´
ห à¹Īาà¸ĩ
Ø¥ ÙħÙĥاÙĨ
Ø¥ÙħÙĥاÙĨ ÙĬØ©
است عراض
ÙħØ® در
ĠÑĩ ÑĥÑĤÑĮ
Ùħ دÙĬر
ÙħدÙĬر ÙĬØ©
Ġà¹Ģม ษ
Ġà¹Ģมษ ายà¸Ļ
Ġм еÑħ
ĠмеÑħ аниз
ĠмеÑħаниз м
ĠÑģ Ñĥм
ĠÑģÑĥм мÑĥ
Ġv ö
Ġvö ll
Ġvöll ig
Ġд ÑĢÑĥз
ĠдÑĢÑĥз ÑĮÑı
ãĤĴåĪ©ç͍ ãģĹãģ¦
à¸ļรร à¸Īุ
po życz
×ŀש ׼
×ŀש׼ ×ł×ª
×ŀ×©×Ľ×ł×ª ×IJ
Ġeuropé en
Ġpropri é
Ġproprié taire
Ġkh ấu
ãģĦãģŁãģł ãģijãĤĭ
Ġtec rü
Ġtecrü be
×Ķ ×ij
×Ķ×ij ׳×Ķ
Ġcu Ì
ĠcuÌ ī
ĠcuÌī a
×IJ ×ķ×ķ
×IJ×ķ×ķ ×Ļר×Ķ
Ġ׼×ķ׾ ×ķ
U lus
Ulus lararası
Ġ׳ ×ķת
Ġ׳×ķת ף
ãģ« åIJij
ãģ«åIJij ãģijãģ¦
ë¹ Ľ
à¸Ĺ ัà¸ģษ
à¸Ĺัà¸ģษ ะ
س ÙĤÙĪ
سÙĤÙĪ Ø·
Ġв н
Ġвн еÑĪ
ĠвнеÑĪ Ð½Ðµ
Ġur z
Ġurz ÄĻd
Ġá mb
Ġámb ito
à¸Ń à¸ĺิ
à¸Ńà¸ĺิ à¸ļาย
Ġ ÅĤad
ĠÅĤad n
ê±´ ì¶ķ
wód zt
wództ w
Ġquest ões
Ġש ×§
Ġשק ×Ļ×ij׾
Ġmiejsc owoÅĽci
Ġв ал
Ġвал ÑİÑĤ
hä user
หà¸Ļ à¸Ńà¸ĩ
ãģ¨ åħ±
ãģ¨åħ± ãģ«
ãĥı ãĥ¼ãĥī
Ġê°ľ ìµľ
ĠоÑģнов ном
Ġм ÑıÑģ
اع ت
اعت ÙĤاÙĦ
สà¸ĸ ิ
สà¸ĸิ à¸ķิ
N gu
Ngu á»ĵn
ĠÙħ جÙĦ
ĠÙħجÙĦ Ø©
à¹ģà¸Ĥ à¸Ļ
ĠاÙĦÙĦÙĬ بÙĬ
פע×Ļ׾ ×ķ×Ļ×ķת
Ġ×Ķר פ×ķ×IJ×Ļ
פר ×ķפ
פר×ķפ ×Ļ׾
×§ ׾×IJ
ק׾×IJ ס×Ļ
Ùĥت Ø´Ùģ
ãģ«ãģª ãģ£ãģ¦ãģĹãģ¾ãģĨ
à¹Ģà¸Ħล à¹ĩà¸Ķ
à¹Ģà¸Ħลà¹ĩà¸Ķ ลัà¸ļ
Ġì» ´
Ġì»´ íĵ¨
Ġì»´íĵ¨ íĦ°
Ġ×Ĺ×Ļ ×ķ×ij×Ļ
Ġnä m
Ġnäm lich
åij¼ ãģ°
åij¼ãģ° ãĤĮ
ĠÑĢ Ð¾Ð»
ĠÑĢол и
Ġspécial isé
à¸Ļ วัà¸ķ
à¸Ļวัà¸ķ à¸ģรรม
ÙĨص ÙĪØµ
пеÑĢ ÐµÐ´
пеÑĢед аÑĩ
thè que
Ġר×IJ ×Ļת×Ļ
ãĥĢ ãĤ¦ãĥ³
ãĤı ãģĭ
ãĤıãģĭ ãģ£ãģ¦
беÑĢ ÐµÐ¶
ĠÑģ ек
ĠÑģек ÑĢ
ĠÑģекÑĢ ÐµÑĤ
ĠпоÑģÑĤоÑıн н
à¸Ĥà¸Ļ สà¹Īà¸ĩ
Ġm ük
Ġmük em
Ġmükem mel
еÑĤ еÑģÑĮ
ĠاÙĦسÙĨ ÙĪØ§Øª
ĠìłĦ íĺĢ
Ġ×Ķ×ŀ×§ ×ķר×Ļ
Ġmü d
Ġmüd ah
Ġmüdah ale
Ġwy b
Ġwyb ór
Ġtend ência
إ دار
إدار ÙĬØ©
Ġunterstüt zen
ת ×ijר
ת×ijר ר
Ġdi á
Ġdiá logo
ĠÃĸ nce
ĠÃĸnce ki
ãĤ¹ãĥĿ ãĥĥãĥĪ
ëĦ £
ĠG eli
ĠGeli ÅŁ
ãĤĴ éĢļ
ãĤĴéĢļ ãģĹãģ¦
ĠFuÃŁ ball
Ġsal ari
Ġsalari é
ĠпÑĢодÑĥк ÑĤов
صÙģ ÙĤØ©
รว à¸ļ
รวà¸ļ รวม
à¹ĥà¸Ļ à¸IJาà¸Ļ
à¹ĥà¸Ļà¸IJาà¸Ļ ะ
Ġkay na
Ġkayna ģı
Ġìŀij íĴĪ
ĠвÑĭ ÑĢаж
ĠвÑĭÑĢаж ен
ĠÑģÑĤ еп
ĠÑģÑĤеп ени
ĠاÙĦÙħ ÙĪØ¬ÙĪØ¯
ĠاÙĦÙħÙĪØ¬ÙĪØ¯ Ø©
ล à¹īม
Ġnaj czÄĻ
ĠnajczÄĻ ÅĽcie
ĠnajczÄĻÅĽcie j
Ġz wy
Ġzwy k
Ġzwyk ÅĤ
Ġê·¸ëłĩ ì§Ģ
à¸ģระ à¸Ī
à¸ģระà¸Ī าย
Ġëĭ µ
Ġëĭµ ë³Ģ
ĠÑĢе ак
ĠÑĢеак ÑĨи
ĠÅĽwie ż
ĠÑģÑĤоим оÑģÑĤи
ÙħÙĨ اÙĤ
ÙħÙĨاÙĤ Ø´
ÙħÙĨاÙĤØ´ Ø©
ĠÑħоÑĩ Ñĥ
ãĥľ ãĥ¼ãĥī
Ġróż nic
Ġк ÑĢÑĭ
ĠкÑĢÑĭ ÑĪ
âľ ĵ
ãĤ³ãĥ³ ãĥĨãĥ³
ãĤ³ãĥ³ãĥĨãĥ³ ãĥĦ
ĠпÑĢед поÑĩ
×ŀר ×ij×Ļת
ĠØ´ Ùĥ
ĠØ´Ùĥ را
Ġд ал
Ġдал ек
Ġдалек о
بر ÙĬØ·
برÙĬØ· اÙĨÙĬا
ع ÙĨا
عÙĨا ÙĬØ©
ĠÑĢаÑģÑģ каз
ĠÑĢаÑģÑģказ Ñĭва
Ø£ ÙĦÙĪ
Ø£ÙĦÙĪ Ø§ÙĨ
æĮģ ãģ£ãģ¦
æĮģãģ£ãģ¦ ãģĦ
Ùħباد ئ
×Ķ ×¢×ijר
×Ķ×¢×ijר ת
Ġyay ı
Ġyayı ml
Ġyayıml a
m át
mát icos
à¸ģ ัà¸ĩ
à¸ģัà¸ĩ วล
Ġ׾ פת
Ġ×ľ×¤×ª ×ķ×Ĺ
à¸ŀฤ à¸ķิ
à¸ŀฤà¸ķิ à¸ģรรม
í Ĥ¬
Ġок ÑĢÑĥг
Ġ×ŀצ ×ķ×ķ×Ķ
ÐĽ ени
ÐĽÐµÐ½Ð¸ н
ĠTri á»ģu
ãĤ³ãĥŁ ãĥ¥
ãĤ³ãĥŁãĥ¥ ãĥĭ
ãĤ³ãĥŁãĥ¥ãĥĭ ãĤ±
ãĤ³ãĥŁãĥ¥ãĥĭãĤ± ãĥ¼ãĤ·ãĥ§ãĥ³
Ùĥ ÙĨÙĬ
ÙĥÙĨÙĬ سة
ãĤĴ ä¸Ńå¿ĥ
ãĤĴä¸Ńå¿ĥ ãģ«
ĠmiÄĻd z
ĠmiÄĻdz yn
ĠmiÄĻdzyn ar
ĠmiÄĻdzynar od
ĠmiÄĻdzynarod ow
ÙĦ ÙĨ
ÙĦÙĨ دا
بر ش
برش ÙĦÙĪÙĨ
برشÙĦÙĪÙĨ Ø©
à¸ģระ à¸ķุ
à¸ģระà¸ķุ à¹īà¸Ļ
Ġg ı
Ġgı da
à¸Ľà¸£à¸° à¸Ĺัà¸ļ
à¸Ľà¸£à¸°à¸Ĺัà¸ļ à¹ĥà¸Ī
Ġë¶Ī 구
Ġë¶Ī구 íķĺê³ł
ĠÙĨ Ø·
ĠÙĨØ· اÙĤ
ĠÐľ ожеÑĤ
Pr äs
Präs ident
ĠÑģк оÑĢ
ĠÑģкоÑĢ Ð¾ÑģÑĤÑĮ
Ġ×Ķ×ij ×ķקר
еÑħ аÑĤÑĮ
Ġg ạo
Ġש×IJ ×Ļ׳×Ŀ
Ġ×ij׳ ×ķ×Ĵ
Ġ×ij׳×ķ×Ĵ ×¢
Ġо пиÑģание
Ġucz ni
Ġuczni ów
à¹Ģà¸Ń à¹ĩà¸Ļ
Ġت Ø´
Ġتش رÙĬÙĨ
Ġnh ãn
ë¹ ¨
Ġcaract ère
×¢ ׾×Ļ
×¢×ľ×Ļ ×Ļ×Ķ
楽ãģĹ ãĤģãĤĭ
ĠÑģ аÑħ
ĠÑģаÑħ аÑĢ
дÑĥм аÑĤÑĮ
ĠÐĴоз можно
ص ÙĬاÙĨ
صÙĬاÙĨ Ø©
öm ür
ส ล
สล à¹ĩ
สลà¹ĩ à¸Ń
สลà¹ĩà¸Ń à¸ķ
ë¡ ¯
Ġth ói
gr Ã¶ÃŁe
Ġksi ÄĻ
ĠksiÄĻ g
ĠÑĢ Ð¾Ð¼
ĠÑĢом ан
ÙĤ اسÙħ
×ŀ×ij ×ķ×Ĵ
×ŀ×ij×ķ×Ĵ ר×Ļ×Ŀ
bes ch
besch äft
beschäft ig
×Ķצע ×Ķ
ĠÃģ rea
ĠзаÑıв к
Ä ¹
ĠлÑİб ого
Ġ ม
Ġม à¸ģร
Ġมà¸ģร าà¸Ħม
ÑĦ из
ÑĦиз иÑĩеÑģк
ин ÑĦ
инÑĦ ек
инÑĦек ÑĨи
اÙĦ Ø·
اÙĦØ· ائÙģ
Ġкол л
Ġколл екÑĤив
ез жа
Ġس بØŃ
ĠسبØŃ اÙĨ
ĠسبØŃاÙĨ Ùĩ
sch lä
schlä ge
Ġд и
Ġди аг
Ġдиаг ноÑģÑĤ
ĠоÑĤмеÑĤ иÑĤÑĮ
Т Ь
ĠاÙĦ در
ĠاÙĦدر اسÙĬ
עצ ×ŀ
עצ×ŀ ×IJ×ķת
Ġdém arch
Ġdémarch e
Ġ×ĺ ×ķ×¢
Ġ×ĺ×ķ×¢ ף
Ġfuncion ários
á» µ
׾ ׼×IJ
׾׼×IJ ×ķר×Ķ
à¸ĭ à¹Ī
à¸ĭà¹Ī à¸Ńม
ĠÑĩ Ñĥв
ĠÑĩÑĥв ÑģÑĤво
âĸ ¼
п ÑĥÑī
пÑĥÑī ен
Ġм еÑĢ
ĠмеÑĢ Ð¾Ð¿
ĠмеÑĢоп ÑĢи
ĠмеÑĢопÑĢи ÑıÑĤиÑı
Ġu çu
Ġuçu ÅŁ
ãĤĴåĪ©ç͍ ãģĻãĤĭ
a ÄŁ
aģ lı
ìĺĪ ìĪł
à¹ģ ยà¹Ī
ĠاÙĦÙĥ Ùħ
ĠاÙĦÙĥÙħ بÙĬ
ĠاÙĦÙĥÙħبÙĬ ÙĪØªØ±
ت ÙĪÙĬ
تÙĪÙĬ تر
à¹Ģà¸Ĭ ีà¹Īยว
à¹Ģà¸Ĭีà¹Īยว à¸Ĭา
à¹Ģà¸Ĭีà¹Īยวà¸Ĭา à¸į
á» Ķ
Ġhi ếm
ذا Ùĥرة
Ġ×Ķ×ŀ×Ļ ×ķ×Ĺ×ĵ
ĠìĪ ľ
ĠìĪľ ê°Ħ
ĠK ı
ĠKı sa
Ġgele ceÄŁi
пÑĢо ÑĦеÑģÑģиона
пÑĢоÑĦеÑģÑģиона л
Ġog ó
Ġogó le
ĠgÅĤ ów
ĠgÅĤów ne
ĠÑģÑĤ илÑĮ
×IJ פ׾
×IJפ׾ ×Ļ×§
×IJפ׾×Ļ×§ צ×Ļ×Ķ
สม ารà¹Į
สมารà¹Į à¸Ĺ
สมารà¹Įà¸Ĺ à¹Ĥà¸Ł
สมารà¹Įà¸Ĺà¹Ĥà¸Ł à¸Ļ
Ġth ánh
ÐŁ од
ÐŁÐ¾Ð´ ÑĢоб
ÐŁÐ¾Ð´ÑĢоб нее
ĠاÙĦت ÙĪÙĨ
ĠاÙĦتÙĪÙĨ سÙĬ
Ġbah çe
à¹ģà¸ģà¹ī à¸Ľà¸±à¸įหา
é ducation
eu rop
europ ä
europä ische
ĠK si
ĠKsi ÄĻ
ĠëĦ ĺ
ĠëĦĺ ìĸ´
Ġv üc
Ġvüc ud
Ġyay g
Ġyayg ın
Ġnie kt
Ġniekt óry
Ġniektóry ch
ãģŃ ãģĩ
Ġк аж
Ġкаж еÑĤÑģÑı
к аж
каж еÑĤ
ĠاÙĦ دÙĬÙħÙĤرا
ĠاÙĦدÙĬÙħÙĤرا Ø·
ĠاÙĦدÙĬÙħÙĤراط ÙĬØ©
æŃ ©
æŃ© ãģĦãģ¦
Ġv az
Ġvaz ge
Ġvazge ç
Ġмин ималÑĮ
ĠминималÑĮ н
ãĥij ãĤ¿
ãĥijãĤ¿ ãĥ¼ãĥ³
Ġë Ĭ
ĠëĬ IJ
ĠëĬIJ ëĤĮ
ãģ¡ ãĤĩãģĨ
ãģ¡ãĤĩãģĨ ãģ©
Ġ à¸ģร
Ġà¸ģร à¸ģà¸İ
Ġà¸ģรà¸ģà¸İ าà¸Ħม
تج دÙĬد
ĠØ´ اÙħÙĦ
หลัà¸ģ à¸IJาà¸Ļ
ĠмаÑĢ ÑĪ
ĠмаÑĢÑĪ ÑĢÑĥÑĤ
Ġv ÃŃt
ĠvÃŃt ima
Ġquiz á
ay gı
×ĵ×ijר ×Ļ×ķ
Ġиз д
Ġизд ели
Ġиздели Ñı
п ла
пла Ñĩ
плаÑĩ ива
ä»» ãģĽ
Ġéquip é
ä¹ħ ãģĹãģ
ä¹ħãģĹãģ ¶
ä¹ħãģĹãģ¶ ãĤĬ
Ġк аÑĤ
ĠкаÑĤ ал
ĠкаÑĤал ог
ส à¹īม
ĠÑĢ ÐµÐ¹
ĠÑĢей ÑĤ
ĠÑĢейÑĤ инг
Ġth uyá»ģn
ĠاÙĦÙħ ÙĤدس
esp ère
ãģ«åħ¥ ãģ£ãģŁ
หมาย à¹Ģลà¸Ĥ
ת×Ĺ×ķש ת
à¸Ļ à¹Īะ
Ġpe ÅĤ
ĠpeÅĤ ne
Ġpé rd
Ġpérd ida
หม วà¸Ķ
หมวà¸Ķ หมูà¹Ī
иÑĩеÑģк ÑĥÑİ
çµĤ ãĤı
çµĤãĤı ãģ£ãģŁ
Ġ×Ĵ ×ķ×Ĵ׾
à¸Ĺำ à¸Ħวาม
à¸Ĺำà¸Ħวาม สะà¸Ńาà¸Ķ
Hot éis
Ġз аÑĢ
ĠзаÑĢ ÐµÐ³Ð¸ÑģÑĤ
ĠзаÑĢегиÑģÑĤ ÑĢи
ĠзаÑĢегиÑģÑĤÑĢи ÑĢова
ĠÑģ обÑĭÑĤи
ĠÑģобÑĭÑĤи Ñı
Ġ×ĸ ׼×IJ
ÙħÙĨظ ÙĪÙħØ©
Ġ×Ķ×ŀ צ
Ġ×Ķ×ŀצ ×Ļ×IJ×ķת
Ùħ ÙĥÙĪÙĨ
ÙħÙĥÙĪÙĨ ات
ä¸ĬãģĮ ãĤĭ
Ġm ÄĻ
ĠmÄĻ sk
หรืà¸Ń à¹Ģà¸Ľà¸¥à¹Īา
ëĤ ®
Ġnok tas
Ġnoktas ı
ĠболÑĮÑĪ Ð¸Ð¼
ĠлÑĥÑĩ ÑĪиÑħ
Ø´Ùĩ ÙĬد
à¸Ńำ à¸Ļ
à¸Ńำà¸Ļ วย
à¸Ńำà¸Ļวย à¸Ħวาม
à¸Ńำà¸Ļวยà¸Ħวาม สะà¸Ķวà¸ģ
Ġе в
Ġев ÑĢ
ĠевÑĢ Ð¾Ð¿
ĠевÑĢоп ей
à¸ī าย
ìĦ Ń
Ùħ Ù쨧
ÙħÙ쨧 ÙĪØ¶
ÙħÙ쨧ÙĪØ¶ ات
ë¹ Į
赤 ãģ¡ãĤĥãĤĵ
ĠÑĥдал оÑģÑĮ
ĠÐ¥ оÑĤ
ĠХоÑĤ Ñı
przedsiÄĻbior c
ĠH ôm
íķĺìĺĢ ìĬµëĭĪëĭ¤
Ġн аг
Ġнаг ÑĢÑĥз
ĠнагÑĢÑĥз к
Ġ×ij×Ļ׳ ׾×IJ×ķ×ŀ×Ļ
Ġê°ĢëĬ¥ íķľ
ĠH ữu
à¸Ń ุà¸Ķ
à¸Ńุà¸Ķ ม
ת ×ķפ
ת×ķפ ×¢×Ķ
Ġmi ÅĤo
ĠmiÅĤo ÅĽci
ksi Äħż
ksiÄħż ka
ĠاÙĦÙĦ عبة
à¸ī าà¸ģ
สะ สม
×ŀ תר
×ŀתר ×Ĺש
Ġlég ère
Ġ׾צ פ
Ġ׾צפ ×Ļ×Ķ
ĠиÑģÑĤоÑĢ Ð¸Ñı
Ġ ãĥĪãĥ©
ĠãĥĪãĥ© ãĥĥãĤ¯
ĠãĥĪãĥ©ãĥĥãĤ¯ ãĥIJãĥĥãĤ¯
Ġк а
Ġка ÑĦе
×ŀס×ŀ ×ļ
Ġc üm
Ġcüm le
à¹Ģà¸Ħลืà¹Īà¸Ńà¸Ļ à¹Ħหว
ãģĬ ãģĿ
ãģĬãģĿ ãĤīãģı
ìŀIJ ëıĻ
ìŀIJëıĻ ì°¨
à¸Ńั à¸ķ
à¸Ńัà¸ķ à¹Ĥà¸Ļ
à¸Ńัà¸ķà¹Ĥà¸Ļ มั
à¸Ńัà¸ķà¹Ĥà¸Ļมั à¸ķิ
ĠÅŁ ik
ĠÅŁik ay
ĠÅŁikay et
extr ême
kr ä
krä fte
ëĤ Ļ
íķ ij
ì² Ļ
íĺ Ī
ì° į
âĻ ¡
ìŀ Ķ
ë¢ °
íĿ Ķ
íĿ IJ
âĩ Ĵ
ë§ Ľ
ìĬ Ī
á» Ĵ
ìĺ µ
âĹ İ
í Ĥ¨
ê¿ Ī
ìĪ ¨
ìĽ ¨
ë§ ¥
ï½ Ģ
ï¼ ª
Ạ¨
ãħ İ
Ñ Ĺ
ìĦ ¬
ì¹ ¼
ï¼ ¶
ìĽ ł
ëŁ ´
Å ĥ
ëĤ ¼
ëĭ IJ
âĢ ¹
ë¦ Ń
ì§ IJ
âĢ ¤
à ħ
ëľ ¨
íĦ ¸
íľ ĺ
ê² ģ
ë´ ħ
à ĺ
ëŃ Ķ
ëĺ ij
âĹ ĩ
ìĹ ĺ
ï» ´
ë§ ¹
ï¾ Ŀ
ìĬ ·
íĥ ķ
ï¼ ł
ì» ´
ëł Į
ì½ ľ
ï» ¹
ãħ ł
ì¡ ¸
ëħ ¹
âĤ º
âĸ ¶
íĥ IJ
êµ ´
íij ¸
Ñ Ķ
íĶ ½
Ð ħ
ë° ¤
Ô ģ
ì² ¨
ì¶ ĺ
ë² Ĺ
ë© ¸
ï¼ »
ï¼ ½
ï¼ ·
ì° Į
à Ĵ
íı ´
ìĵ ¸
ì´ Į
ëģ Ķ
ëĶ ©
ëĩ Į
ë© Ģ
ë² ¨
ï¼ µ
ë§ ¡
ëĭ «
ภ¿
ãģ ±
ìĩ ¼
ìº ł
ë® ¤
ê± ±
ì» ¬
âĦ ĥ
ëĶ ±
ëĥ Ī
ìĭ ±
íĻ Ī
ëŀ IJ
ìħ Ģ
ìł ł
Ð Ĩ
ëł ī
ï½ ħ
ï½ ı
íĻ Ģ
ëĽ °
á» ®
í Ĥ¹
ê½ ĥ
ï» ¤
ïº Ķ
êº ¼
ìķ ī
âĻ ¦
ï½ ģ
ìĵ ´
ãĢ ī
ì° ®
ì¤ ĺ
á» ª
ëģ Ħ
ëIJ ¨
ìķ Į
íĿ ĺ
íħ IJ
ãĢ Ī
ê² ª
ëĭ ¥
ê² ¼
á» Į
ë§ ¨
ëģ Ĭ
ë² ¤
ëij Ķ
íĿ ¡
á» ¬
ë¬ ĺ
ãģ ī
ëŀ «
íĶ Ī
í ħį
ìŀ ĥ
ï½ ī
ìģ ľ
âĸ ½
ë¬ »
âĸ ³
ï¼ ¸
ìģ ĺ
ì¶ °
ìĬ ´
ìķ ±
ìĩ Ħ
Ạ®
ï´ ¿
ï´ ¾
âĤ ½
ëĦ ĵ
ë£ ©
ì³ ¤
ê´ ľ
à Ļ
á» ľ
ï¿ £
ëĵ Ń
ë© ĺ
ê» ´
ëł ´
Ð ĥ
ë¬ µ
ì§ Ŀ
ãģ º
ðŁĺ Ĥ
ëŀ ¬
ìł Ĭ
ê´ Ħ
ìŀ Ĭ
íŀ Į
ìĦ ¯
âĪ Ģ
âĸ ¡
ëĢ Į
ëŀ Ļ
ï½ ĥ
Ạ¶
ï¾ Ħ
ïº ĺ
ë¹ ¼
à Į
âĸ ·
ê¸ į
ë© ĭ
ãģ ĥ
ìĺ Ĩ
ìĺ ®
ëª ¬
ë¡ ¤
ëł ¬
ëĬ ¦
âĸ ª
ì¼ ĵ
ìľ Ī
ì§ §
ï½ ½
ëĥ ī
ï¾ Į
ëĺ IJ
ï¼ ĥ
á» Ħ
ì´ ¬
ì¶ ¤
ï¼ ¹
ï» Ń
âĤ «
ï½ ĩ
ìĺ ·
ëĸ ¨
âī «
ë¦ ¿
âľ ¨
Ù ±
ì¯ ¤
ê¹ Ķ
ðŁĺ Ĭ
ìĪ «
ê³ ±
êµ ³
ï½ ĭ
ภĮ
Ä ł
ëĶ ¸
ë° ij
ìħ ĭ
íİ ´
âľ ħ
íĥ ij
ëĪ ĩ
íı ¼
ðŁĺ į
ìĺ Ľ
ï» £
Ñ ĺ
ì© Į
ë¦ ħ
ìĿ į
ï½ ¸
ëį ľ
ãģ ħ
íİ ¼
ëĭ Ŀ
ë¿ Į
ì¼ °
ìĭ «
ë° ¥
íĽ Į
ì¨ Į
ë¹ Ļ
ï½ İ
ë´ Ħ
ìĦ ¹
ï½ ²
ìĮ ĵ
Ò ij
ë° į
ëł Ģ
íĨ ¤
ï½ ¯
ë¤ Ħ
ê½ ¤
ï½ Ĵ
ìķ ¨
ï½ ¼
ê¹ IJ
íģ IJ
âĦ ĸ
ë§ º
ïº ®
ëħ ģ
ê² ¸
ï» ł
íĬ ľ
Å ¹
ë¥ Ń
ëĪ ī
ï½ Ķ
íĮ ¬
ìŀ ĩ
ï ¬ģ
ï» ¨
ëij ¥
ëŀ Ħ
Ù ¬
íĭ ´
ìŀ ī
Ú ¾
ìĽ ħ
ï» ®
ëĭ ī
âī ª
âĹ Ħ
ëĪ Į
íĽ ¼
ì¤ į
Å ¸
ì¤ ¬
ì¾ Į
ï½ ĵ
ï¾ Ĭ
ðŁı »
ï¾ ī
Ð ģ
íĺ IJ
ï¾ Ļ
ê¼ ¬
íŀ IJ
âĢ ¥
ëŁ Ń
ë§ ŀ
ìĥ ¤
ïº Ĵ
íĭ ±
ë½ ij
à ķ
âĪ ļ
ëĤ Ħ
ê¹ Ŀ
ëĨ Ī
Ạº
ìħ Ī
ìĮ į
âĢ ¡
ï¼ ±
ìģ ¨
âĺ º
ëĴ ·
ìĺ ³
ðŁij į
ëª ½
ëĤ Ń
ïº Ń
ë© Ī
á» Ī
íķ Ģ
ëĭ Ļ
ë¦ ĩ
ìķ ¤
ìį ¼
ãĥ µ
Ñ £
ìľ Ĺ
â ŃIJ
ï¾ ĺ
íĹ ¬
ê¾ ¼
ìķ Ĺ
ï» Į
ê± ·
ëħ ķ
ë¡ ±
ìķ Ĭ
ï¾ Ģ
ìĩ ł
íĮ ©
ïº ª
ë§ Ļ
ï¼ ¿
ê¿ Ķ
íİ ľ
ë£ ¸
íĶ Ķ
ï» ³
ëı ķ
ìĭ ¼
á» İ
ë§ ĺ
ì¢ ĭ
íĨ ¡
ï½ ±
íĿ ij
á» ¸
ì¦ Į
ì¹ ¸
ëŃ ĺ
ï¾ Ĺ
ï» ĭ
íĬ Ģ
ë¥ Ļ
ì½ ©
ëģ Ĺ
ëį ´
ìħ ľ
 ¸
ë» IJ
ìĥ µ
ê² IJ
ëĵ ¬
ë£ °
ãħ ĭ
ìĹ ī
á» ĸ
ëĦ Į
ï½ ¶
ë´ ĩ
ëĤ ³
ãĤ ľ
ëĸ »
íİ Ģ
ëį ©
íķ ¸
à ·
ê¼ ¼
ëĶ ľ
ë° ´
ë© į
âĹ ¯
ìĹ ij
ìĻ ¼
ïº ij
ë¶ ķ
ë¡ ¬
ï½ Į
íĨ ¨
ïº ´
ëł ĺ
ê° ¤
ìĪ ²
Ñ ĵ
ìħ ī
ï» ĵ
ëĪ Ķ
ëį §
âĢ ¼
ï» ²
ê° ±
ê¿ Ģ
ëĭ ·
Ạ¸
Ạª
Æ Ĵ
ëį ¤
ìĪ Ń
ï½ Ĥ
ï½ Ī
Å ł
ë£ ¬
Ñ µ
ëĸ ¡
ëĥ Ħ
ìĦ °
ëĵ Ī
ï¾ ĥ
ëĩ ¨
ï½ IJ
êµ ½
ìĹ ½
ëĤ Ģ
ë¬ ¶
ï½ ·
ìı Ł
íĺ Ķ
ê¼ Ī
ëģ Ī
ì¥ IJ
ïº Ĺ
Ä Į
ëĪ ł
ëĸ ¼
íĢ ´
âī ¥
ëĭ Ń
ì± Ļ
ê» ı
ë© ¤
ìĥ ĺ
ëį ®
ë£ ¡
ìĤ ½
ãĪ ľ
Ä ¨
âĢ §
ï½ º
Ä £
ì¦ ī
ï¼ ¼
Û ©
âĪ Ļ
ë° ı
ë¹ ħ
ðŁĺ Ľ
íĪ ´
ðŁĴ ķ
ãĢ Ĵ
ìŀ ĺ
ïº ¤
ï½ ĸ
ë© ľ
ë² ¼
ëĿ Ħ
ëļ ľ
ï» ĺ
ìĥ Į
ï½ Ħ
ì© Ķ
ï½ Ļ
ïº ©
Û ŀ
âĺ İ
ìł ¤
ëIJ ©
Å Ŀ
âŀ ¡
ï» §
Ð ı
ì« ĵ
ê³ ½
É ij
ãĥ ²
ëĤ «
ë¦ ī
ì¢ ģ
ë° Ń
ðŁĺ ģ
ë¹ µ
ì² ©
ì» µ
ðŁĺ ĺ
ë± ħ
âī Ī
ë¹ ļ
ï» ľ
ðŁĻ ı
íģ °
ìĦ ŀ
ï¾ ļ
ìĺ ¹
ë¼ Ī
ëĤ ¯
ëŀ ©
íļ ¡
ï½ ķ
íĥ ĵ
ëĿ ł
ê³ ģ
ëĵ Ģ
ìĹ ł
ï¼ º
ë§ ij
ëĭ ¿
ì¿ ¨
ãİ ¡
Ð Ĭ
íĦ ±
Å ¨
ïº ³
ï¾ ı
âĭ ħ
ê¼ ´
âī ¤
íĮ ģ
Î ©
ê¶ ¤
ìĪ į
âľ ¿
ì½ ¤
ëĪ ħ
íĨ ±
ãħ ľ
áIJ ħ
Å Ĵ
ðŁij ī
ï» ¦
Ð ª
ë¥ ľ
íķ «
ï¾ ĭ
âĻ «
ê¹ ľ
ë° ¸
ëĶ ĺ
íĿ ī
ï¾ ģ
ï¾ Ľ
ëł Ľ
ê² ¹
ì¿ ¼
ï» ¬
âŀ ¤
ðŁĻ ģ
ïº ł
ëĨ ¨
ë¯ ¹
ê¸ ĭ
ë» Ķ
ê¹ ĥ
ëij ij
íĭ ¸
íİ Ļ
âŀ ĸ
ãĥ ½
ì§ ļ
ï½ ¬
ï» ¥
íĮ ½
âĢ Ĵ
ì ĮĢ
ìŃ ī
ëļ ±
ãĤ ŀ
íĭ Ī
ãĤ IJ
ëī ĺ
Î £
ê³ °
ë¹ Ĺ
ï¾ İ
ðŁĺ Ń
íĿ ł
ìĹ ¿
ê° ļ
ì¤ Į
ë§ µ
ï½ ³
ãģ ¢
ï» Ĺ
âī ¦
Ú ¤
ë łģ
ê¼ ½
ï» «
âī §
ì´ Ľ
ìł Ŀ
Ạ°
âĻ £
ìº ĺ
âĪ ĩ
ê² ī
ë° Ł
ï» Ķ
íĸ ĩ
âĸ Ĵ
ðŁij ı
à ŀ
ðŁĺ Ĩ
ïº ¼
âĿ Ĺ
ìº Ķ
ì¹ ©
ëĸ ¤
ëĥ ħ
âĶ ľ
ï½ »
Î Ķ
áĥ ¦
ìŀ İ
âĺ Ģ
âĪ ¼
ðŁĶ ¥
ë° Į
ìł ĸ
íĹ Ľ
Î ķ
ïº ĥ
ë¶ ī
âĪ ŀ
íĥ Ń
à ĭ
âģ Ħ
ãħ ĩ
ëĦ ¥
ëĭ ®
ëł ·
íĮ Ŀ
ìº ¡
ë· Ķ
ì© į
íĤ ´
ëļ «
âĵ Ĵ
íķ į
âĻ Ĥ
ï¾ Ĩ
âĨ ©
ìį ©
ïº ķ
íĿ Ļ
Ñ ľ
íĤ ·
íĿ °
íĥ ±
ëķ IJ
ï¾ Ĵ
× ĥ
ëĮ Ħ
ìĺ ´
ìķ µ
ê¹ ¥
ëŀ Ń
ìª ¼
ãİ Ŀ
ðŁĺ ħ
ëı ĭ
ëª «
ïº ¸
ë® ¬
ë² ħ
ëij ł
ìħ °
ì» ·
ëĶ ª
ëħ Ķ
ãħ ¡
ìĶ »
íķ ı
ëį ±
ïº ¨
ï¾ į
ï½ µ
ì¢ Ģ
íİ Į
ï» °
ïº £
Æ £
ðŁ¤ £
ï· º
ëĤ ļ
âĭ Ĩ
ë³ į
ðŁĺ Ħ
ìĸ Ģ
ìĻ ł
ëĨ Ķ
íĹ ¨
ï» Ľ
ï» Ŀ
á» ¶
ìĸ ĺ
ìİ Ħ
Ú Ĩ
ï» ŀ
ëĢ IJ
ê² Ķ
ï» µ
âĹ ¦
íļ Ł
ê¹ ģ
ê° ĵ
ëĶ ´
ìı ĺ
ëļ Ŀ
á» ł
ëŀ ´
ëĦ ī
âĺ ŀ
ï½ ĺ
Å ½
ë¦ İ
âĸ ¬
ëŃ ī
âĩ Ľ
ìį ¬
ïº Ł
Ë ľ
ë¶ ĵ
ìĽ °
Å ľ
ëŃ ĩ
á» ²
Ë ļ
ëķ Ģ
âĺ ij
ðŁı ¼
ìĸ ½
âĮ Ĵ
Ð İ
É ¾
íĮ ¡
ï¾ ħ
ìŀ Ń
ï½ ¨
ì¹ «
ìľ Į
Ò Ľ
êµ ¿
ëĭ ¦
âĶ Ķ
ï¾ ij
ì§ ĸ
ìº Ħ
ãĢ ĥ
Ê ¼
ê² Ł
ï½ §
Ä ¢
íİ ł
ë§ ·
ê° ĩ
ìĭ ¹
ðŁĴ ¦
ï¾ ľ
ëĬ Ļ
ë² ¡
Å ¿
ðŁĺ ĭ
ðŁĴ ª
ì¿ Ħ
ë© ķ
ìŃ ¤
ëĬ Ħ
ðŁĮ ¸
ãĤ Ŀ
Ç İ
ï½ ļ
Ä Ĺ
ëģ ĵ
ê¶ IJ
áµ ī
ãĥ Ĥ
ê» į
ðŁĺ ¦
ãĢ Ŀ
ðŁ¤ Ĺ
Ñ Ł
ìĹ İ
âľ Į
ìī IJ
à Ĩ
íĹ IJ
ðŁİ ī
Î ij
ï½ Ń
ðŁĴ Ļ
ìĽ ¬
íĢ ĺ
ï» ¢
ðŁĺ İ
íij ¼
íĿ ©
ï» Ħ
íħ Ģ
ëł IJ
ì¥ ¬
Ð ĭ
ìĥ ·
ëľ ¬
ðŁĺ ĥ
ëĦ ¬
ë¥ ¨
ìĽ į
ï½ Ĩ
ï½ ´
ãĥ ħ
à ı
ï» ª
âĻ ł
ëĬ ¬
ë± Ģ
ë° ĭ
ìĥ Ģ
ï½ ¾
ëĤ ±
ì» ¸
ðŁĴ ĸ
ðŁij Į
Ñ ŀ
ì§ ±
Ë Ĩ
ðŁĵ ļ
âŃ ķ
ï¬ Ĥ
ï» ¡
ëij ¬
íĪ ¼
âĸ ¸
ê° ¯
ê¹ ħ
ï½ ®
ëĺ ¥
Ä ¡
íĮ Ł
Ð Į
ìĨ Ł
ïº ĵ
ï» ¼
à Ľ
ãĥ ¾
ëĮ ĵ
íĴ ĭ
ìķ ĵ
ï½ ¹
ëĤ ¡
ðŁij ĩ
Ạ¼
ãĢ Ł
ðŁĮ Ł
íĥ ł
ãĢ Ĩ
âĢ Ł
ë¸ IJ
ðŁĮ ¹
ìł ¼
ðŁĵ Į
ìĶ ¬
âĹ Ģ
ðŁĴ ĵ
ê¹ İ
ìĤ IJ
ìĶ Į
Ñ Ľ
âĶ Ī
ë² ³
ãİ ŀ
Õ ¡
íĤ µ
ðŁ¤ Ķ
ëĢ Ķ
ìĬ IJ
íĻ ī
âľ ¦
ëľ ¯
ìł ¯
ëĶ §
Î ¦
Ë Ī
ìī ¼
âĹ Ĭ
ëľ ©
ëľ °
ï¾ IJ
ë¿ Ķ
ìĹ ®
ì· Į
ïº §
Î Ĵ
ëµ Ļ
ï» Ĭ
ì° Ķ
íİ Ħ
ðŁĴ Ĺ
Ạ´
ì° ¢
íľ ¼
ê½ Ĥ
ì± Ķ
ìī ´
âĸ ¾
íĪ °
ëĭ Ľ
âĿ £
ï½ ª
ðŁĴ ľ
Ë ĺ
ãħ ¤
âĨ Ĺ
íĸ Ħ
âĻ ¬
ìķ °
ïº ľ
âī ¡
ãĢ ĵ
ìij ¥
íĮ į
íī ģ
ë» Ĺ
íľ ł
íľ ©
âľ Ī
íĢ Ħ
ìĸ ĩ
ì¢ ĩ
íŀ Ļ
ëª ¹
ãĤ Ľ
ðŁĺ ±
ëį Ł
๠ħ
êµ ¶
Ù «
ìĶ ģ
âľ ª
ï¾ Ī
ðŁĻ Į
âļ ¡
Î ļ
ì¼ Ī
ï¾ Ķ
ï¾ Ĥ
êµ ī
ïº »
ðŁĴ ĭ
á¹ £
Ó Ļ
ìĨ ľ
ìĹ £
âľ ©
ìľ Ļ
ïº °
Ạ²
ìŀ £
âĿ Į
âĺ ģ
ìķ İ
Ä ½
Û ģ
ãĦ ±
ëŁ ¿
íĮ ¸
ê½ ī
ìı ł
ðŁį Ģ
âĨ Ķ
ëŃ ¡
ï» ģ
ï¼ Ħ
ðŁĴ ¥
âĺ Ľ
íĹ ·
ëij ¡
Î ł
Î ¤
âĦ ĵ
ïº ·
Î Ļ
ëı Ķ
ì§ ¤
âĶ ĥ
ãĦ ·
Ç Ĵ
ðŁ¥ °
ëĶ ķ
ìļ ¥
ì¸ Ħ
íĽ Ķ
ïº ĩ
ïº ¬
ðŁĺ ¢
ë¹ ¡
ìĶ ¹
Å ³
Ë Ŀ
íİ ij
ï¾ ĵ
ðŁĴ ļ
ëĬ ij
êº ¾
íĨ °
à ¿
Ð Ħ
ëĮ IJ
ë½ Ģ
ì· Ħ
ðŁ ĵį
ðŁĻ Ī
âĹ Ī
ê¿ ĩ
ì¼ Ħ
íİ «
ðŁĩ ·
âĶ ĭ
âļ ł
ë± ī
ì į°
ìĻ Ī
É ª
ïº ĭ
ðŁĺ ľ
Î Ł
ðŁ ĻĤ
âļ ½
Å Ī
ë¹ Ķ
íĮ ľ
๠ı
ìĸ ¹
íĪ Ń
ðŁ¥ ĩ
ãĦ ´
ëĶ ¥
ìŃ Ī
âĪ Ĩ
ëĸ ³
ë± ĥ
ìŀ ¦
ï» IJ
Î ľ
âľ §
Ï į
ìł ĵ
âĹ ķ
ëĴ Ģ
ï» Ģ
ðŁĶ ´
ê½ ģ
ëĮ Ī
ëİ Į
ãĤ İ
⦠ģ
ì½ §
ï¯ ¾
âĿ ¯
ภħ
ðŁĻ Ħ
âĿ Ģ
ðŁĶ ¹
âĩ IJ
êµ µ
âĩ Ķ
ë¶ IJ
ðŁĴ Ľ
Î ¾
íĥ ¬
âĿ Ħ
Ò £
ãĢ °
âĪ ij
âĺ ¼
âī ł
Ò ¯
ïº ¯
ê¿ ¨
âľ ĸ
Ê ĸ
íĢ Ģ
ê¾ Ģ
íĹ Ŀ
âĶ £
ãİ ľ
ëĶ Ľ
ëľ ¸
ï º«
ê¿ °
ðŁĩ ¹
Ç IJ
Û Ĵ
ë£ »
ïº ĸ
Ñ ļ
ëĬ ł
Û ķ
ê¹ ¡
ë¿ ľ
ì² ¼
ï¨ ij
ë¥ µ
ìį ¸
íħ ħ
íij ¹
Ö Ģ
ï³ Į
ãħ £
ìij ¤
ì½ ķ
ëķ ł
ðŁĮ ¿
íĥ Ķ
ìĽ ģ
Î ¶
âŀ ľ
ìĬ ĺ
íĽ Ĺ
ë© §
ìī ĺ
Õ ¶
á¹ ĩ
ðŁİ ģ
ï½ ¿
ï¼ Ĥ
á¼ IJ
âľ ķ
âŀ ¢
ëĦ ¨
ì» «
ì¯ Ķ
ì° ľ
ðŁĴ °
íħ Ŀ
ãİ ı
ë³ ¶
Ò ĵ
âĨ ³
ìĥ ´
íģ ĺ
âĸ Ģ
ë² Ļ
ภĥ
á½ ¶
Ä ķ
⬠ĩ
ë¤ ĺ
ðŁİ µ
âľ ļ
ïº ı
Î ¡
âĹ ī
ðŁĴ «
Ð Ī
ìĸ Ħ
ì§ Ļ
ï» ĥ
ðĿij Ĵ
ëŃ Ħ
âĿ ¥
âĿ ĸ
âĺ Ŀ
Ê ¹
Ḡ¥
âĢ ¿
ãħ ħ
ê¸ ģ
ëķ ¡
ëį ¥
âĪ ©
ê» Ħ
ë® Į
Ò ±
âĪ Ĺ
ëł Ļ
ïº Į
Ë IJ
ðŁĺ ³
ðŁij ©
ðŁİ ¶
ì¿ µ
ðŁ¤ ©
ê· ¤
ëĮ Ķ
ïº IJ
Ï İ
ì¶ ¥
ï½ Ĭ
á¹ Ń
ë¤ ¼
âĸ «
ì§ ł
á¼ Ģ
ê» ij
ëĮ ģ
íĢ ¸
âĻ Ľ
ðŁĴ ŀ
âĸ °
ðĿij ĸ
ëĿ ¤
ठ¦
ì´ ĺ
ðŁĺ ĩ
ëĶ ¤
Î Ĺ
ðŁĻ ĩ
Ë Ľ
ì© ¡
âĪ §
Õ ¥
Ñ Ļ
ëIJ ¬
ëĸ Ħ
ðŁĮ ·
ìĹ Į
ðŁĺ ¥
ëĪ ´
ï» ļ
É Ľ
ïº Ħ
ï» ı
Å Į
ë² ļ
ìĭ £
ïº Ģ
Î ĵ
ðŁĺ Į
Ë Ļ
ëŀ ı
ðŁĶ ¸
ðŁĵ ·
ëģ ½
íģ ½
ðŁĴ ¡
ðŁĮ ±
ëº ı
ìģ ł
ìĥ IJ
ëı Ĺ
ì¸ °
ëĪ ķ
Î Ŀ
âģ ī
ðŁĮ ¼
íĮ ł
âĭ ¯
áĥ ĺ
âľ ¤
ê± Ķ
íĮ İ
ðŁĴ ¯
ìı Ļ
íĹ ī
Ù Ń
ì½ °
ïº ¿
ï» ±
ì± Į
âĺ ķ
ðŁİ Ģ
Ä Ŀ
ë° §
ìĤ ¿
áij ķ
ðŁį ĥ
âĩ ¨
Î Ľ
ë§ ´
ë³ ķ
á ijIJ
âĸ ĵ
ðĿ ijľ
âĻ »
íĤ ¥
Õ ¸
ãĪ ±
ëº Ģ
ì² ¸
ïº Ľ
ðŁı Ĩ
ðŁĩ ª
âĿ ĵ
Ä Ģ
ì½ ¥
ðŁĩ §
á½ ·
âľ Ĥ
ìŀ ¼
ï§ ¡
ðŁĵ ¸
âĻ ¯
É Ķ
á½ ¸
âĮ ª
ï» ĸ
ï¥ §
âļ «
âĶ Ĺ
ðŁĮ Ī
ï» ©
ðŁĵ ²
Ï Ī
ðŁĺ ¡
ðĿij İ
ìľ ½
ì§ ¬
ì§ Ĭ
á½ ³
ìĮ ¤
ëĤ į
âī Ĵ
ðŁij ¨
âĺ ĺ
Ó ©
âĤ ĵ
âĪ Ĥ
ï¹ ģ
ðŁĴ IJ
íħ ĥ
ðŁı ½
ê· Ħ
ðŁĺ ı
ðŁĮ º
ðŁĺ Ķ
ï½ «
âľ İ
ëµ Ī
ðŁĩ ¸
âĢ £
âŀ Ķ
ëĺ ĺ
ìĥ ¬
Ê ĥ
⬠ħ
ì© IJ
ðŁĻ Ĩ
ðŁİ Ħ
Ä ¾
⣠¶
áĥ IJ
âĺ »
ì± ķ
ìģ ©
ë½ ķ
ìº £
ðŁij Ī
ðŁĻ ĭ
ï¾ ĸ
Ò ļ
Õ «
ìĮ Ī
ë² §
ðŁĩ ®
ï½ Ŀ
ðŁį ģ
ìĹ ¥
Ä ³
ë½ IJ
íį ½
íĽ ij
âĤ ¹
ãħ ģ
ìĶ ½
ðŁĶ ģ
ठ¯
ê¾ ¹
ëī ľ
âĹ ¡
íķ Į
Î ĺ
ë£ ¹
ìĻ ĵ
ðŁĩ ¦
ðŁij Ģ
âĶ Į
á¿ ¦
ëĦ Ľ
ìĦ £
ìŃ Ļ
ï± ł
Î ŀ
Ê »
á¿ ¶
âĿ Ŀ
ê± Ģ
ëĸ ´
ãĦ ¹
ðŁĴ İ
Ï ¹
⼠ħ
ï» ķ
ãĥ ±
ï½ Ľ
ëĮ ķ
ë¹ ½
ì¥ Ķ
ì¿ ¤
ðŁĸ ¤
Ñ Ĵ
ê¹ į
ëİ Ģ
ìĭ ¯
ë» ¤
ðŁĵ ŀ
ðŁĵ £
ðŁĺ Ŀ
ìį ¹
ìĹ ¡
ì° IJ
á½ IJ
ï» Ī
âľ į
Ä ı
ðŁĮ ŀ
âĦ ¦
ê½ Ŀ
ë» ĺ
ìĪ ±
âĶ ĺ
ðŁĮ »
âĤ ´
âŀ ¨
íIJ ģ
ê ¶Ī
âĺ ¢
ðŁĺ Ī
ï½ ©
âĦ Ĺ
ê° Ń
ê° ¸
ë» ij
ì¥ ´
ì» ¥
ï¤ Ĭ
ï» Ĵ
ðŁĺ ķ
âĺ Ķ
ìĺ IJ
ðŁļ Ĺ
ëĹ Ħ
ë§ ı
Õ ½
âĸ »
⣠µ
ìī °
ï» ij
âĻ ©
Î ¥
ðŁĺ £
âĬ Ĥ
ãħ Ĥ
ìħ ¸
íı Ħ
âľ ½
ì¦ Ļ
âĸ £
ê± į
ê¿ ĭ
ì« Ħ
ìº ĩ
ðŁĩ µ
ðŁij ij
âľ ĺ
ðĿij Ľ
ìį ½
ìº ī
ï¬ µ
ðŁĶ º
âĦ ®
íĥ ¤
ðŁĩ º
ðŁĴ µ
íħ ¨
ï½ ij
Î ¨
ìĥ ¹
ìĸ ķ
ì¹ µ
ðŁĵ ±
ठµ
ðŁij Ĭ
ðŁĴ Ħ
ðŁĴ Ŀ
ãĮ Ķ
ìĻ ģ
Ð ĩ
à® IJ
âĸ ¹
á´ Ľ
âĹ ĺ
ëº ¨
íĥ ī
ìĸ Į
ðŁIJ ¶
ãĤ ij
Ë ĩ
Å ı
á½ ¹
ìħ §
ï¹ °
ðĿij ¡
ðŁĶ Ŀ
ðŁĺ »
ðŁĴ ĥ
ðŁ¤ ¦
ðŁį Ĵ
íĢ µ
âľ Ĩ
ë¹ ´
ï§ ¤
ï» Ļ
á´ Ĺ
ðŁĮ ´
Í ¾
ëĮ ij
ì¨ ĭ
ìµ ¸
ðŁİ Ī
ðŁı ł
á½ ±
Û Ĩ
á¿ ĸ
âĢ Ľ
ì° ¼
íķ ¥
íĹ ´
ðŁĩ ¬
ì° Ŀ
âĪ ł
ï¼ ĩ
âĬ Ļ
âĿ ij
ëĦ ĭ
ëŀ Ĺ
ë° ī
ìĹ Ĭ
ì¢ Ĩ
íĮ ¥
ï° ²
ðŁĵ ĸ
ðŁĺ ®
âļ ª
ðŁĺ ļ
âĿ ŀ
ðĿij Ł
ðŁİ Ĥ
Å ķ
áIJ Ī
êº ½
ì± ł
ïº Ŀ
ê¿ ī
áĥ ł
ðŁı ĥ
ðŁĴ ¸
âĿ ģ
âĹ ¾
Ú ª
á¹ ĥ
íĬ ¬
ðŁĩ ±
íİ Ń
ðŁĺ ŀ
ë¾ °
á¹ Ľ
ëĽ ¸
âĿ Ĥ
êĴ ³
âĶ IJ
íĵ °
âŀ ł
ê´ ĺ
ëħ ĺ
ë» ¥
ì¾ ħ
ðŁĺ IJ
âĪ ª
ðŁij ģ
âĪ ´
âĹ ģ
ëº IJ
ìŀ ¤
ì± Ĺ
ðŁı ¾
Î §
á½ »
âŀ ¥
ìŁ Ī
ï» ī
âĸ Į
ãĥ ®
ðŁ¤ ¤
âĩ ĵ
ì¼ ł
á´ ı
ë§ ¬
ë» £
ðŁĴ ¬
ðŁį ĵ
Ä ¸
Ù ¹
Ê ¿
á½ °
ëķ ľ
ì° ¡
ì° »
íİ į
ðŁİ ¯
ðŁį Ĥ
ðŁij §
âĻ ¢
áĨ ŀ
âĻ §
âļ ľ
âľ ī
ëĵ ¦
ëŃ £
ìĪ ı
ìĵ ±
Å Ń
Ê Ĭ
âĴ ¸
âĩ ©
ðŁĴ Ķ
Õ µ
Ð ī
Ò »
ë§ £
ìĽ ľ
ì¿ ¡
íĽ ħ
íĽ ¤
ïº ¢
âľ ĭ
âĪ Ī
ðŁĮ į
Ê ľ
ëĬ ª
ëĴ ¹
ïº ²
âĸ Ħ
ãħ Ī
ëļ ¤
íİ ©
âĪ ¨
ðŁ¤ ª
áĥ ļ
ê³ ¶
íĬ ķ
ðŁĺ ¬
âĪ «
ðŁij ĭ
Ò IJ
íĬ ¿
ðŁĶ µ
ðŁĴ ¨
ðŁĮ Ļ
ëĩ ©
âľ ³
ë¨ ģ
ëº Ħ
ìĻ ij
ìº ħ
íı Ī
ðĿij Ļ
ðŁĴ ĺ
ãİ ¥
âĿ ı
âľ °
ï¯ ¿
ëµ IJ
ì¼ IJ
ïº ±
Õ ´
ï¬ Ģ
âľ ´
ðŁ¤ Ń
ðŁij Ĩ
⼠Ķ
ê· ĵ
ìĮ Į
ðŁ¤ ·
Û Ķ
ðŁ§ ¡
ðŁĺ ĵ
Î ĸ
âı °
ê² ľ
ëĭ ³
ëİ ħ
ë° Ī
ï® IJ
ðŁı ¡
âĨ ª
âĵ Ķ
âľ Ĭ
Ï ²
Ü IJ
ðŁĩ ³
Ö Ĥ
âľ ı
ìĸ Ĺ
ì« Ļ
ðŁĺ ²
Ä Ń
âĻ Ń
âĶ ı
âĹ Į
ðŁĺ ¯
áµ Ĵ
íĬ ł
Ä ·
Ê ģ
ठŁ
á¹ ģ
á¼ °
á¿ Ĩ
â «
â« ¸
ëį «
ì³ ĩ
ì¼ ¤
íĽ ¨
ðŁĴ Ł
Ê Ģ
Ê ³
ëĵ IJ
âķ °
âĿ ĩ
Ç Ģ
Ç Ķ
É ´
âĺ ļ
âĺ ľ
ê¶ Ĥ
ì« Ĵ
ì± Ī
ðŁĩ ¨
ðŁİ ¥
ðŁĵ Ŀ
Ä §
ðĿ ijIJ
Û Ī
ठ¬
ì¬ IJ
íĹ ¥
âĻ ¨
ðŁį ´
ï¹ ı
Ë ĭ
ðŁ¥ º
âĸ ¨
íĻ ĭ
âĪ ħ
ëģ Ļ
ëŀ ł
ìĨ ¥
âĢ ĸ
ðŁ¤ ĺ
ðŁIJ »
áµ ķ
Ç Ŀ
âĺ ı
ïº ļ
ï» Ĥ
ðŁļ ©
ìĪ Ł
Ë Ĭ
⤠µ
ðŁĴ §
ã ħį
ë© ©
Æ ¬
Î ĩ
âĩ §
âĵ ļ
ìĤ ¯
ìĪ ¯
ëĨ ĭ
âľ ¯
ðŁļ Ģ
Ú ĺ
Ú ¨
âľ Ń
ê² ħ
íĮ °
íľ Ļ
ðŁĮ Ĭ
ðŁİ ĵ
ðŁĺ Ļ
Ë ĥ
ðŁĴ ģ
ðŁij İ
âĺ ¹
ðŁĺ «
ðŁĴ »
ëĤ µ
ìĿ Ĭ
íĮ »
Ò ³
á½ ²
âŀ ŀ
ëĤ ij
ëĿ Ī
ì£ ¤
ï» ¯
ðŁĩ ©
ðŁ¥ ³
âĴ ¼
ðŁ¦ ĭ
âĺ Ĥ
ðŁĺ °
ðŁĻ ĥ
ðŁĺ Ĵ
Û İ
Ï ķ
Ḡ¤
ë£ ½
ìĬ ¥
ðĿij ī
É IJ
ðŁį İ
âķ ¯
âķ ¹
ຠ²
ï¾ ł
ë¹ ķ
ïº Ĩ
Ê º
Ó §
âĨ ł
ëĥ ĩ
ìİ Ī
ìŁ ¤
ï± ¢
âķ ¬
âĺ ł
ðŁİ Ĭ
ãį į
ãİ İ
âĺ °
âľ ĥ
ãħ ī
ë¯ Ī
ë¹ ¤
ìı Ń
ðĿij ¢
ðŁIJ ¾
Å ĭ
ðŁij ¶
âĶ Ľ
ï¿ ¢
áĥ ¡
Ä ¼
Å Ĩ
Ñ IJ
ìĥ Ľ
ìĺ Į
ì± ¤
íħ ģ
íļ ĥ
ï³ Ĭ
ðĿij Ķ
ðŁĩ «
âĭ °
ðŁĺ ¨
âĤ ©
Õ ¬
Ḡį
á» ´
âĨ ĺ
âĺ ¯
ãħ ı
ìł ¬
âĻ Ķ
ðŁĶ Ķ
ðŁĺ ł
ðŁĻ Ĭ
à® ľ
á¹ ħ
âĹ IJ
âĿ Ī
âŀ ½
ìĥ ħ
ðĿij ł
Æ ¢
âĭ Ļ
ê° Ľ
ëĿ µ
ë£ Ł
ìı ľ
ïº ģ
ðŁĴ Ń
âĬ ĥ
ðŁIJ °
ãħ Į
Ü ĵ
âŀ ķ
á½ ģ
ìķ ³
ðĿij Ŀ
ðŁİ ¬
É ¡
ठĹ
áIJ ī
ì© ľ
ì¶ §
ï³ ī
ï» ħ
ðĿIJ ŀ
ठ¶
ðŁĵ ¢
ðŁį ĭ
ðŁĴ ħ
ï¾ ķ
⬠Ĩ
âĪ µ
ðŁ¤ ij
áĥ £
Æ Ħ
Ñ ¹
á¼ Ķ
ê° ł
ê´ Į
ê· IJ
ëĽ ´
ì± ĺ
ï® Ń
ïº ¹
ïº ¾
âľ Ĺ
âĿ ¦
ðŁij ¦
áĥ Ĺ
Ù ²
á½ ´
âĪ ı
âľ ®
ê¹ °
ë² µ
ìĦ Ģ
ì© Ŀ
ïº ŀ
ïº ½
ðŁĩ Ń
Ë Ĥ
ðŁį ij
ðŁį Į
ðŁĶ »
ê¹ ¬
ìĬ Ń
ìľ ·
ðŁĽ ij
Ç §
ë¼ Ľ
ïº ¡
ïº º
ðĿij ļ
ðŁĵ ¦
ðŁĶ İ
ðŁĹ ĵ
áĥ Ķ
âľ Ĵ
âľ ¡
ðŁĮ µ
âĶ ķ
ëĢ Ŀ
ðŁį Ĭ
âĺ ĥ
ìĺ ħ
ঠ¬
ðŁ¦ ģ
âİ ¯
ðŁIJ ķ
Ñ ¿
ॠ¤
༠ĭ
ê· Ī
ì« Į
ðŁĩ °
âĿ ī
ì« Ģ
íĿ Ħ
ðĿIJ ¢
ðŁļ ¨
âĻ ¤
ðŁĺ ©
ðŁį į
ðŁĺ ij
ðŁļ ļ
Ö Ħ
ë «
ë« ¼
ठı
á¿ ·
âĮ ©
âĺ IJ
âŀ £
ê¸ ±
ê¼ ¿
ëĦ Ŀ
ìı ´
ìļ ¤
ì¿ ±
íİ IJ
ðŁĴ ¢
ì´ IJ
âĩ ij
âĶ ĵ
âģ ¾
Ü Ŀ
ðŁ į°
â´ °
Æ ı
Ï Ł
Ú º
Û ĥ
áĦ Ĵ
âĪ Ł
âĿ į
ãĦ ²
ìľ ħ
ì¤ ı
ðŁĩ ²
êº Ħ
ðŁİ ¤
âľ £
⸠Ŀ
ï¸ µ
ຠ§
áĢ Ļ
âķ ł
Õ ¯
âı ©
ðĿij £
ðŁĴ £
Å ĺ
ॠIJ
âģ ĥ
âĮ ĺ
ê» Į
ìĮ Ķ
ðĿij ĺ
ðŁ¤ ĵ
Õ ¿
ठŃ
âĮ ļ
âľ Ŀ
ðŁIJ ¼
Ë Į
âķ ļ
ï¦ Ĺ
âĿ ķ
âķ £
ðŁIJ ±
à® ¤
Ñ ¾
ठļ
ठľ
ìĪ Ħ
ìļ ľ
ðŁİ ®
É Ĵ
Ú ·
ຠį
âĨ µ
â Īĺ
âĿ Ĭ
ë¿ į
ìIJ Ī
ìļ ĺ
ì¯ §
íĥ ¯
ìĸ ı
ï¸ °
ðŁĩ ¯
ðŁ§ ļ
ðŁĺ µ
ðŁĺ ·
ðŁĮ ³
ຠ¥
Ä ī
Ä ¥
âľ ¶
á¿ ¾
âĬ ±
âĺ ¾
ê° ī
ê¼ °
ëº ij
ðŁĶ Ĭ
ðŁĸ IJ
Å ¤
Ò «
à® ®
âĮ Ī
âĹ Ĺ
ëĦ µ
ëħ ľ
ëľ ¹
ðĿij ¥
ðŁĴ ¿
ðŁĽ Ĵ
Ê Ĵ
áŀ ĵ
ðŁIJ Ŀ
ðŁ¦ Ħ
ðŁį ·
âĺ Ł
ï¸ ¶
ðŁ¤ Ł
Ô ±
âĨ ²
âĪ İ
âľ «
ëĩ ½
ëı IJ
ëķ Ħ
ï¦ ³
ï§ Ŀ
ïº Ļ
ðŁij »
ðŁĵ º
êµ ¼
ìĮ ©
ðŁĮ ²
È ±
íĶ ķ
ðŁĺ ¤
ãĮ ¢
Ê Ķ
ठ¡
á¼ Ī
ëİ ĥ
ë© ±
ë® Ī
ðĿIJ «
âĬ ķ
ëĥ ł
ë» ¬
íĭ Ķ
Õ ¤
á¼ ±
âľ ¥
âĺ Ħ
âĪ ¥
âļ ķ
ðŁij Ħ
ðŁİ ħ
ຠĻ
âĶ ¬
á½ µ
Õ ¾
Ö ģ
âĹ Ķ
ê¿ į
ëĸ µ
ë© İ
ë® ´
ìķ ´
áĥ ľ
á¼ ¡
âĶ Ĭ
âķ ®
âĹ ¼
ðŁį ¾
ðŁĽ į
ðŁij Ĺ
ðŁ¤ ŀ
âľ Ħ
Õ Ģ
ঠ²
Ë ī
⣠¨
Ä ¯
Ï Ĭ
á´ ľ
ë¹ ³
ï³ ĭ
ï¿ ł
Ä ª
âĤ ¸
âľ ±
ê» IJ
ëĭ »
ë§ ¸
ìŀ ¿
ì© ¨
ì ŃIJ
ì° ¿
íħ Ł
ðĿIJ §
ðĿij ij
ðŁĮ İ
ðŁĵ ®
ðŁķ Ķ
âĹ Ļ
âĹ »
âŀ §
ìŁ Ŀ
âľ ¬
ãĥ °
âģ Ī
â ĵĺ
ðŁ ĴĮ
ï¬ ĥ
ຠĶ
ìĶ °
ðŁĺ ª
× Ģ
ìĥ ¨
ïŃ ĭ
ðŁį ķ
ðŁĺ ´
Ï ³
á¼ Ħ
á½ ħ
âĩ ¢
âķ Ń
ìĺ »
íĬ ¤
Ü ĺ
⤠´
âĹ į
áŀ Ł
ðŁį º
áŀ ļ
ðŁı Ĭ
ðŁIJ ·
Ê Į
á½ º
âģ »
ê½ Į
ëĪ Ĺ
ë Ĺı
ì¿ °
íĢ ¼
íį ħ
ï· ²
ðŁĮ ı
ðŁį «
ðŁį ³
ðŁİ °
ðŁij °
ðŁĴ ²
ᥠĻ
ðŁIJ Ł
ï¿ ¡
ðŁĹ £
ðŁį ľ
âľ ²
ãİ ¢
ðŁĶ °
á¼ ¸
á½ ij
Ä İ
áĦ Ģ
âĻ ķ
ëł Ŀ
ìĪ ´
ïŃ Ń
Ó ľ
Ô Ģ
ëĢ ľ
ëĥ Ķ
ìĬ Ľ
ì« ij
ìº ¥
ìº ¬
ðĿij ¦
ðŁĶ ¶
ì¾ ¨
ðĿIJ ļ
ðŁį »
ðŁĴ į
ðŁ¤ ¡
ðŁķ Ĭ
â½ ĩ
âĵ IJ
ðŁį Ń
ðŁį ª
ðŁĶ Ĩ
Ò ¡
á´ ĩ
É Ĺ
Ü Ķ
âĦ İ
âĿ ĥ
ëĹ Ģ
ï² Ķ
ïº Ī
ðĿIJ »
ðŁĴ Ĭ
ðŁļ «
Ñ °
Ñ ³
ठ·
âĹ ł
ðŁij ¤
ï¾ ĩ
âĺ ĵ
ðŁį µ
ðŁ¤ ¨
âĸ Ń
à® ´
Ü ¢
Ü ¬
à´ ®
ðŁķ º
Ô ¹
Õ £
à´ ¯
á ´Ģ
âĮ ī
âľ IJ
âŀ ¦
ê¹ ½
ëĮ ľ
ðŁı ¥
ðŁĵ ©
Ò ¹
Ó ĺ
ठħ
âĿ §
Æ Ĺ
âĹ ½
ðŁij «
ðŁİ §
ðŁij £
âľ »
ðŁĻ ħ
ðŁĺ ĸ
ðŁĴ ®
ຠ°
ðŁĶ ľ
ðŁį Ħ
ðŁ¤ Ŀ
á ĥĿ
áŀ Ģ
âĩ ¦
Ê ¾
Ò ®
Õ ¼
ठĨ
âĹ ħ
âļ ĵ
âļ ĸ
ê¿ ©
ë¯ Ħ
ìIJ IJ
ìŀ °
ì§ Ń
íĭ ĭ
íİ ¨
íĻ §
ï² ij
ðŁİ Ĺ
Ù ³
ðŁij ¸
ঠ®
ðŁij ķ
Ú µ
âĢ ¾
âŀ °
ðŁij ¯
ðŁİ ¼
ðŁı ģ
Ä º
Ê ı
Ú ³
âı ±
ê½ Ī
ëĿ Į
ìĮ ī
ìĹ ·
ìŀ ´
íĹ ¹
íľ ¨
ðĿĹ ²
ðŁĮ IJ
ðŁİ Ļ
ðŁı µ
íĽ Ļ
ðĿij ħ
ðŁĺ ¶
âĵ ħ
âķ ¥
ðŁį ı
ï¦ İ
Õ ©
ðĿIJ Ħ
Ó £
Ú ¿
âĻ ļ
ðŁĶ Ĺ
Ḡ«
âĭ ®
âĸ ¦
⼠½
âľ µ
ãħ Ĩ
ãħ Ĭ
ëĦ Ļ
ëĿ ¨
ë¥ Ħ
ìĦ ¦
ì§ °
ì§ ¹
íī Ī
ï§ ij
ï» ĩ
ðŁĮ ¾
ðŁı ĸ
ðŁIJ ij
ðŁĴ ³
ðŁĵ Ĩ
Û ĩ
Ü ķ
á½ ½
ëĦ ľ
à´ ²
à´ ³
ຠŃ
áĥ Ľ
âĿ Ķ
âij ħ
áĥ ¥
ðŁĵ ħ
âŀ ³
á´ µ
ï¹ ¡
ï¹ ¶
Î Ĩ
ठ¥
áī µ
âĿ Ļ
âĿ ±
ëī ł
ëİ ł
ëı Ľ
ë¿ ħ
ìĶ ¸
íij ¯
íŀ ī
íŀ Ľ
ï§ Ħ
ïŃ ĺ
ïº ¦
ï» ¸
ðĿij Ĥ
ðĿij ı
Ï ij
Ú ł
áĢ Ķ
áŀ Ķ
á¹ ¢
ëĦ ¸
ðĿIJ ¨
ðŁĩ ´
Õ °
ðŁij ł
ðŁį Ĩ
ðŁı Ģ
ðŁ ijIJ
ðŁį ĩ
ðŁIJ £
áĪ Ń
Ü ª
ðŁ ĮĢ
áŀ ĺ
âĩ Ħ
ðĿIJ Ģ
Ê Ļ
âĶ ¼
ðŁı ¿
Æ ·
È ł
Ñ ½
âĤ ¨
ê´ Ń
ê¹ »
ëĶ ¨
ìĪ Ģ
ì¾ °
íĨ Ī
ï® §
ï¯ ½
ðŁĶ ħ
ðŁĶ ®
Å ¢
Ê °
Ñ ¸
ठ£
âĬ Ĺ
ëª Ħ
ï¹ ·
ïº ħ
ðĿIJ µ
ðŁĮ ¶
ðŁĵ °
ðŁĶ ·
ðŁĸ Ĵ
ðŁ¤ ²
ëī ©
ðŁİ Ĩ
ðŁ§ IJ
ðŁį ®
âĨ º
âĿ ¢
ðŁij ª
ðŁij ±
âĨ ¡
áŀ ı
Ú ķ
ðŁį ¹
ðŁĴ Ģ
Ë ®
Ó ¨
Ö ħ
ठĩ
âĤ ¡
âĪ ķ
âĺ ī
ê¹ ¼
ê¼ IJ
ì½ ¸
ðĿIJ ¬
ðŁı ħ
ðŁij Ļ
ðŁĴ ī
ðŁ¤ Ļ
È ĺ
É ³
É ¹
Ù º
áĢ Ħ
á¿ ³
âļ ĺ
âĿ Ĩ
ëĨ ī
ìĸ į
ìĺ ĩ
ì¥ ĺ
íĸ ħ
íĻ ij
ï® Ĭ
ï¿ Ń
ðĿĴ IJ
ðĿĹ ¢
ðŁĶ ĸ
ðŁĶ ¨
ðŁļ ij
ðŁļ ²
Æ ¸
âĹ ¥
ðĿIJ Ń
ðŁį ½
âĹ ij
âĵ ĩ
ðŁĶ ±
âľ ¼
ï¹ ĥ
âķ ±
ãĢ Ĺ
ðŁı ĭ
ðŁļ ´
ðĿIJ ®
Ä ļ
Õ ı
Ä ¶
áĥ ij
á¹ ¬
Ä Ī
Ä Ĵ
Ò °
Ó ķ
â IJ
âIJ £
âĹ ¢
âļ Ļ
ãħ Ĺ
ê° ¬
ê³ ª
ê» Ģ
ëĦ ´
ëİ ģ
ëĿ Ķ
ë¬ ½
ëŃ į
ìĩ ³
ì° ¹
íĮ ¹
íŀ Ŀ
ï® ĭ
ï ¶Ī
ðĿĴ Ĥ
ðŁ¥ Ģ
ðŁ¦ ħ
Ê ĺ
á¼ ij
âģ İ
ðŁį ŀ
âĨ ĸ
âĨ Ļ
ðŁİ ĥ
âĦ ¡
âĭ ±
ðŁĶ į
ಠ¨
áµ ĥ
âĶ «
⦠¿
ðŁĩ »
Æ ¤
Ò ı
Ò ·
Û ī
à® ķ
Ḡ³
ï¬ ±
ðŁĨ Ķ
Ú Ń
Û ¦
áħ ¡
âĦ ¹
ê¿ İ
ëķ Ķ
ë¼ ī
ìļ §
ì² µ
ì´ ¨
íĬ Ī
íĸ IJ
ðĿĹ ĺ
ðŁĩ ¿
ðŁİ ĸ
ðŁij ħ
ðŁ ĵĺ
ðŁļ Ļ
ðŁĽ µ
à¶ ½
⼠µ
ðĿIJ ³
ðĿIJ ¸
âļ Ķ
ðŁij Ń
Ó ij
âĶ ¯
ðŁħ ¿
ðŁĺ ¹
ï¿ «
â¼ ¤
ðŁĴ ĩ
ðŁĵ İ
ðŁĸ ĭ
ঠ¸
ðĿIJ į
Ä ²
Ï ĭ
Ñ ¬
Ú ¬
Ü Ĵ
á´ ¬
ï¨ Ħ
É £
Ë ij
Ï µ
Ò Ŀ
Û ¥
Ü ł
๠Ľ
áĥ ķ
áĬ ķ
á¾ ¶
âĤ ·
âĩ ¾
âķ ©
âĸ IJ
âĺ ª
âĺ ®
âĿ ļ
âĿ Ń
âŀ ±
âµ İ
ãı Ĭ
ë© ĵ
ìĹ ¾
ìª Ħ
íĵ Į
íķ ¼
ïŃ ¬
ðĿij Ĩ
ðĿij ŀ
ðĿĸ Ĭ
ðŁİ ¸
ðŁı Ħ
ðŁij µ
ðŁĴ ł
ðŁĶ ĺ
ðŁ¥ Ĥ
Å ª
à· ĥ
á´ ¼
âĬ °
ë³ ı
ë´ £
ï¥ ľ
ðŁĵ Ī
ðŁķ ¯
ðŁ§ Ģ
âĻ IJ
ðŁĨ Ĺ
ðŁĵ ķ
ðŁ§ ģ
Ü «
âĿ IJ
Õ ķ
འķ
âŀ Ŀ
ঠķ
ðĿIJ ¶
É ¢
Î Ħ
áĨ ¢
âĤ ±
Õ į
à¡ ķ
á´ °
Ḡ©
⼠·
âĿ ®
ê¡ ĵ
ëı ¤
ëĹ IJ
ëµ Į
ìij Ī
íı ¿
íĹ µ
ðĿIJ İ
ðŁĨ ĺ
ðŁı Ł
É ¥
Õ »
à¡ Ķ
ठĸ
á´ ¸
âİ Ļ
âİ ¥
âı ³
ëģ ķ
ëĬ ī
ì¡ į
ì¹ ¡
ï¦ ¶
ï¬ Ł
ï® «
ï® ¯
ï± ĥ
ï ·»
ïº µ
ðĿĹ Ķ
ðĿĹ ¡
ðŁİ ¨
ðŁĶ Ĵ
Ú Ľ
ठ§
âŀ ¹
áĢ Ģ
ðŁį ħ
âĹ ¤
ठł
ðŁIJ ¥
áĥ Ĵ
ðŁı Ŀ
ðŁį ¼
ãĮ §
âĿ Ľ
ðŁIJ Ī
ঠ¯
áĢ ŀ
ãĢ ĸ
áŀ Ļ
ঠª
Õ Ĩ
âĬ Ĩ
âľ ¾
ðŁIJ Ĺ
ï¹ ¿
Ä ¦
Ü Ł
ಠł
ಠ¥
áŀ ī
á´ ¥
á´ ©
á½ Ģ
á½ ¡
âĨ ķ
âŀ ¯
ê¡ ij
ëij £
ë± Į
ìĪ ij
ìľ Ķ
ìŀ ½
ì¨ į
ðĿij Ģ
ðŁĮ Į
ðŁį ¦
ðŁį ©
ðŁIJ ļ
ðŁĵ Ĵ
ðŁĵ ¹
ðŁ¥ ij
Ä ĭ
Ë Ĺ
Ñ «
Õ ¢
Ú °
â ĮĢ
âĹ Ĥ
âĹ £
âľ Ľ
âĿ Ĵ
âĿ ĺ
âŀ Ļ
âŀ ²
ãİ į
ê¡ IJ
ëŀ ĸ
ìĬ Ŀ
ìĽ ¤
ì¡ ĭ
ì¨ °
íĹ Ļ
ï¥ ¸
ï³ į
ï» İ
ðĿij ĵ
ðŁĵ Ĭ
ðŁļ ¼
ï¦ ģ
ðĿķ Ĵ
ðŁ ijľ
ðŁij ¿
ðŁĩ ½
à· Ħ
âĸ ´
ãį ī
âĬ ĩ
ðŁ§ ¸
Ú ¡
â¾ ĥ
ðŁĹ »
âĵ ij
ðŁ¤ ¸
ðŁ¤ ¯
êĴ °
ðĿIJ ĵ
âĶ ´
êĴ ±
áĢ ĺ
â ĽĦ
ï¹ ¹
Ó Ķ
áĥ ±
Ü ¡
ß ŀ
âĻ ı
âľ ¸
ìij ¨
ðĿIJ Ŀ
ðĿIJ ¥
ðŁį ī
ðŁij ¼
ðŁ¥ Ŀ
Æ Ķ
Ý ¬
ठ«
ຠļ
á´ ´
á½ ĸ
âĤ ¶
âİ ¢
âĿ ħ
⣠«
ãİ Ľ
ë® ¨
ëº Į
ë¼ ĺ
ìĨ Ŀ
ìľ ³
ìŀ Į
ì£ Ĺ
ìª ĺ
ì» ¹
ï· ¼
ïº Ĥ
ðĿIJ ´
ðĿIJ ¼
ðŁĮ ļ
ðŁı «
ðŁĴ ¤
ðŁĴ ¶
ðŁĴ ¼
Ê ķ
Ê ½
â² Ł
ãī ł
ê¡ Ĵ
ëľ Ģ
ìĥ ¾
ì¸ ¤
ï¥ ģ
ðĿļ Ĭ
ðŁļ ĥ
âŀ Ľ
ìħ ´
áĦ ĭ
âĩ Ĺ
ï§ ·
âĺ ĸ
ðŁIJ ¦
⸠ľ
ðŁĴ ´
ðŁ¤ ļ
ãĬ Ĺ
âĮ Ľ
áĪ Ľ
༠º
â½ ī
ðŁı ¢
âĵ ŀ
âĺ ½
ãĢ Ļ
ðŁ¤ ®
Å IJ
áĥ ¬
ðĿĹ »
ðŁį ĸ
Æ Ĭ
Ê Ł
ß ĭ
ठĭ
áµ Ķ
á¿ ĥ
âĦ ī
âĮ ĭ
âı ²
âĵ Ī
âĵ ¢
âķ Ķ
âļ ij
âĿ ĭ
âĿ İ
â µľ
âµ £
ëĴ Ī
ëľ ģ
ë¶ ĩ
ìį »
ìĺ Ń
ì§ ¢
íĹ Ģ
ï§ Ĭ
ï ¬¸
ï± ¡
ðĿIJ º
ðĿij §
ðĿĺ ¦
ðŁĵ ¥
ðŁĺ Ł
ðŁ¥ IJ
Ä ĸ
É ¨
áĢ IJ
áĥ ĵ
Ạĵ
á¼ ¶
á½ Ħ
âĤ ¤
âĮ ľ
âĮ Ł
âİ ł
⼠¸
âµ į
âµ ı
âµ ĵ
ãĢ ĺ
ë ·¸
íħ ¼
ï¦ Į
ïŃ Ħ
ïŃ İ
ðĿĻ ļ
ðĿļ ĺ
༠ĵ
ëŃ ħ
áIJ Ľ
ãİ ¾
ï¨ Ģ
ðŁĹ ½
âĻ ŀ
Ë ĸ
âĹ ŀ
ðŁ¤ «
ðŁĺ Ĺ
ï½ ¦
ðŁ¤ ¢
âģ ĩ
ãĢ µ
ðŁį Ķ
áĬ ł
ðŁĺ ¼
ðĿĹ ®
ðŁIJ ³
ðĿIJ ĭ
ðŁĨ ļ
ðŁĶ Ľ
Ñ »
Ü ¨
à® ²
âľ ŀ
âµ Ļ
êµ £
ì¸ ¨
ðĿ IJľ
ðĿĺ °
ðŁĶ ½
Ç »
Ç ¿
Ê ĩ
Î IJ
Ð Ģ
Ñ ¡
Ñ ²
Ò Ĵ
Ù ¶
ß ķ
à¶ ±
áIJ ģ
âģ ŀ
âĸ §
⼠Ī
âľ ľ
âľ ¹
⣠¹
⤠ĩ
ê² Ĭ
ê¾ ľ
ë¯ IJ
ë³ IJ
ìħ ©
ìIJ ¬
ìij ¹
ï¤ Ķ
ï¦ ļ
ï¬ ł
ïŃ Ķ
ïº ¶
ðĿĴ ı
ðĿĸ Ĩ
ðĿĹ ¶
ðŁı Ĥ
ðŁIJ ½
ðŁĴ ©
ðŁĵ ½
ðŁĹ ¨
ðŁĹ º
ðŁĺ ¸
ðŁ¥ §
Å Ĺ
Ê İ
Ò Ļ
× ²
ठĪ
á¼ ´
á¿ ij
âµ ī
ãħ ĵ
ì½ ´
ðĿĸ ĵ
ðŁĵ Ĺ
ðŁĶ ª
ðŁĸ į
Ï Ĵ
ðŁij ¬
áĥ Ļ
âĨ ¬
âĶ ¤
⼠¹
âĻ Ł
ðŁļ ¶
ðŁij ¾
âĪ ĭ
ðŁIJ ¯
༠İ
âľ ·
ï¨ Ļ
âĶ »
ðŁij ¹
áĦ ī
ຠª
â¾ ı
â½ ħ
ãİ ĸ
Ñ ´
Õ ®
Ú ¼
áĢ ķ
áĨ ¼
ëŃ ı
ðŁIJ ¸
ðŁļ £
Æ Ŀ
Ô »
áĥ ¢
ðŁį ¯
É ¦
Õ ¦
âĻ ĭ
ï¬ «
ðĿĹ ¦
Ç ļ
É ±
ठī
á´ Ħ
âĻ ĵ
⼠°
⣠ª
ëĥ ĺ
ë¢ ¸
ìĤ ij
ï® Ķ
ðĿķ ĸ
ðĿĹ §
ðŁĩ ¼
ðŁĵ ĭ
ðŁļ ľ
ðŁ¥ ¤
Ä ®
Å ·
ß Ĭ
ॠ¥
à® ª
áŀ Ħ
áµ Ģ
Ḡħ
á¼ ¢
âĪ Ŀ
âĬ ¹
âĴ ¶
âķ ´
⼠±
⼠³
⼠º
âŀ Ł
ãı Ħ
ê¸ Ķ
ê¹ Ł
ëĩ °
ë¹ »
ìĤ ¥
ìĽ »
ì° Ł
íĥ °
íĨ º
íļ ½
ï¤ ´
ï¥ ¾
ï³ Ŀ
ðĿIJ ¦
ðĿĴ ľ
ðĿĴ Ł
ðĿļ Ĺ
ðŁİ Ń
ðŁı ĵ
ðŁı ³
ðŁı º
ðŁIJ į
ðŁij ĥ
ðŁĴ ı
ðŁ¤ ĸ
ðŁ¤ µ
Õ ²
âµ Ķ
ëĺ ¬
ï¦ £
Ê Ĥ
áĨ «
áŀ ij
ðĿĸ İ
ðĿĹ ĸ
áĦ ĥ
âĩ ł
áĢ ¡
འĦ
âŀ ¸
ï¦ Ļ
âĩ ļ
ðŁIJ ¬
ðŁIJ ¢
â¾ Ĵ
ðŁIJ ¤
ðŁĶ «
ãĢ ŀ
ï¸ º
ðŁĺ º
â½ ´
ðŁĨ ķ
âģ ¿
ðŁį ¨
ಠķ
ðŁļ ĺ
áŀ ħ
ঠħ
áŀ ¢
ਠľ
â ļĮ
ãĢ ½
à· ´
âĵ Ľ
áĢ ľ
ìĨ ¨
Ë ©
Ü Ĺ
âĭ ¼
ðŁĻ ī
Å Ĭ
É ĵ
Ê ²
Î °
Ñ ¼
Ô ¿
à¡ IJ
༠ľ
འ¦
á¶ ľ
âĤ ²
âĨ ¨
âĬ ¥
âķ §
âĻ ľ
ãĭ ¡
ë´ ¬
ë¶ ij
ìī ¿
ìİ ħ
ìł ±
ì° §
ï² ¡
ðĿĴ Ľ
ðĿķ £
ðĿĹ ľ
ðŁį ²
ðŁİ ©
ðŁIJ IJ
ðŁIJ ł
ðŁij ½
ðŁĴ ij
ðŁĵ ľ
ðŁķ µ
ðŁ ļĮ
ðŁĽ £
Ê ĭ
Ó ¯
Ù ¸
ß Ķ
ß Ļ
à¡ ĵ
á´ į
Ḡ¿
âı º
âĸ ¥
ë¤ ½
íľ ij
ðĿIJ ¹
ðĿĸ Ķ
ðĿļ İ
ðŁĵ Ħ
ðŁ¦ ·
Æ ĥ
ঠŁ
âĮ Ĥ
âĺ Ń
â² ļ
ëĿ ķ
ðŁİ £
à® ĩ
འĨ
áħ µ
áĹ ľ
âĢ ½
âĮ £
âģ ½
ðŁĵ ¬
ðŁ¤ §
âĩ ª
â½ £
âĹ Ł
ï¨ Ĺ
êĴ ª
ðŁĽ Ģ
Ç Ĥ
ðŁ¥ ¶
ðŁİ į
ï¿ ©
ðŁij Ĵ
áµ Ī
ï¸ ¿
áħ ©
â¾ ¦
à° ¤
á´ ĸ
ਠ¬
ຠĹ
༠»
Ñ º
ਠª
á´ ³
ðĿIJ Ī
à» Ģ
á´ ¿
âĤ į
âĩ ¡
⼠ª
ðĿIJ Ĥ
ðĿĴ ķ
ðŁ IJľ
Ê į
Ñ ±
འĥ
ë® IJ
ìĽ ¡
ìľ ģ
ðĿIJ ¿
ðĿķ ł
ðŁij Ľ
Æ ª
Ï º
Ó ¬
Ù ¿
Ý £
ઠī
à® ¹
འij
áĨ ¯
áµ ĩ
âĩ ¥
âı ª
âĻ °
âļ Ń
âļ ¾
ãħ Ħ
êĢ °
ê° Ĺ
ê² ĭ
ê² »
ê¶ ľ
ê¼ ĩ
ê½ ¹
ëĤ Ł
ëħ Ī
ëĭ ¢
ë§ Ł
ëª Ĩ
ëµ Ģ
ì½ ±
íĩ ĺ
íľ ľ
ï§ ¾
ï± µ
ï² ¢
ï² ¤
ðĿĴ Ĭ
ðĿĺ ¯
ðŁį Ĺ
ðŁı į
ðŁIJ ĺ
ðŁĵ ¡
ðŁĶ ŀ
ðŁ¤ ³
ðŁ¥ ģ
ðŁ¥ Ĺ
ðŁ¦ Ĭ
Ä µ
Æ ¦
Ç µ
É ¯
Î ı
Õ Ħ
Ü ¥
འģ
ᨠł
âķ «
ãİ ī
ë· ´
ìĨ İ
ìİ Į
ì£ µ
íĽ ł
ï§ ª
ï³ ı
ï» º
ðĿij ģ
ðĿij ĩ
ðĿĴ Ĩ
ðŁİ ł
ðŁIJ Ķ
ðŁij Ł
Å ĸ
ठĮ
á¾ ½
ê¦ Ĵ
à® Ł
á´ ±
ðŁı °
ðŁIJ ŀ
འĢ
áĢ ħ
âĬ ¿
ðŁIJ §
ἠģ
â¼ Ī
âĶ ¿
ðŁ¥ ´
â¼ ¿
ðŁ§ ľ
ãħ ¿
âĦ «
ãĢ ³
ãĬ Ļ
â¼ Ģ
ï ¦¬
ðŁı ¬
ðŁĵ »
áĬ Ľ
áĦ ħ
ຠĬ
ຠĽ
áħ ³
ðŁij ®
à® ±
âĺ ĩ
ðĿIJ ı
à´ µ
à» ģ
འı
འ¢
ᥠ±
âĤ £
ï¥ ¦
ïŃ Ļ
ï´ ©
ï¹ Ĥ
ðŁį £
ðŁķ ¹
Ï ĸ
à¶ ¸
ຠ¢
áĭ Ń
âİ Ŀ
âĹ Ŀ
âĻ Ī
âĻ İ
ê½ ¥
ì³ Ķ
ì¼ ij
ï± °
ðĿij ĥ
ðŁĮ ª
ðŁį ¡
Å İ
Ê ¦
Ñ §
Ó İ
Ô ´
Ú Ī
ß ĵ
ß §
ठĶ
áĪ «
áĪ µ
áĹ ©
á´ ł
á¼ ł
âĢ Ĺ
âģ ij
âĦ ı
âĸ ĩ
â² £
ãĦ ³
ãī ®
ê³ Ĺ
ëĦ Ĵ
ëĸ «
ë¡ Ħ
ë¹ °
ë½ ģ
ìĦ ģ
ìĮ ĺ
ìŁ Į
ì³ ī
ì¼ ķ
ï¬ »
ï³ İ
ï¹ ¸
ï¹ ¾
ðĿIJ Ĩ
ðĿij ·
ðĿĽ ¼
ðŁİ ı
ðŁİ ŀ
ðŁIJ Ļ
ðŁij Ĥ
ðŁĵ ģ
ðŁĸ ±
ðŁļ į
ðŁļ §
ðŁĽ ¡
ðŁ¤ Ĵ
ðŁ¥ ŀ
ðŁ¥ ©
ðŁ¦ Ģ
ðŁ¦ ĸ
Ë ¢
Ü ļ
à® µ
áĢ ģ
áī °
âı Ń
âĻ ¿
ê³ ĺ
ëı Ŀ
ëķ ĥ
ìħ Į
ìĴ ¸
ìĽ Ł
íħ Ħ
íľ «
ï§ ĺ
ï¿ ¬
ðŁı ·
ðŁĶ §
ðŁ¥ Ī
Æ ĸ
áŀ ĩ
áŀ ĸ
âģ º
âĹ ľ
âŀ ©
ê¦ Ń
ëĻ ¤
ïŃ ¼
ðĿĻ ĸ
ðĿĻ £
ðĿĻ ¤
ðŁĮ Ŀ
ðŁĶ ij
ðŁĽ ł
ຠĩ
âĺ £
ãĦ ¨
ðĿĸ Ĺ
Ó ĵ
âĨ £
ðŁ¥ ī
ðŁĮ ł
ðŁĺ ½
ãİ ł
Å §
ðŁIJ Ĵ
ï§ IJ
ðŁĺ ¿
âĪ ¬
ðŁIJ ®
⣠±
ಠ¡
â¾ ¼
à° ²
Ë ¶
âĸ ¿
Õ Ī
áŀ İ
áħ ¥
áŀ Ĺ
Õ §
ðŁ¤ IJ
ðŁį ł
ঠ¤
à¶ º
âĻ į
ìĺ Ļ
íĺ ĵ
ï¹ º
ðŁĽ ³
Å ī
á´ İ
âı ľ
âĶ ³
ê¸ ·
ì¡ Ķ
ðĿĴ Ī
ðĿĴ į
ðĿĴ ¹
ðĿĵ ĩ
ðĿķ Ł
ðĿĹ ¹
ðŁĮ ħ
ðŁı ´
Ä Ķ
Ä ¤
Å µ
Ç ¾
Ï ŀ
Ï ¶
Ô ³
Ü Ĩ
ß ©
à¡ Ĵ
ठĺ
à¶ ļ
འĸ
áģ Ĭ
áĥ ŀ
áĦ Ĥ
áĭ «
á´ º
Ḡ£
Ḡª
á¹ Ĥ
á¼ ·
á¿ ĩ
âĩ Į
âı ¬
âĻ Į
â® Ł
â´ »
âµ Ł
ê¦ ķ
ê¦ ª
ê¦ ®
ê² Ħ
ê¾ IJ
ëĥ ij
ëķ ĭ
ë¡ ¸
ë¬ Ģ
ìĩ ¤
ìĪ ©
ìľ ķ
ìŃ ĺ
ì· °
ì ·¸
íľ Ģ
ï¤ £
ï§ į
ï± Ħ
ï³ ij
ðĿIJ ¤
ðĿĴ ĵ
ðĿĴ ¶
ðĿĹ ¼
ðĿĻ Ĭ
ðŁĩ ¾
ðŁĮ Ľ
ðŁĮ ®
ðŁİ ĩ
ðŁİ ²
ðŁı Ľ
ðŁij ¥
ðŁij ´
ðŁĴ Ĩ
ðŁĵ Ĥ
ðŁĵ §
ðŁķ IJ
ðŁĸ ķ
ðŁĺ §
ðŁĻ Ģ
ðŁļ Ĵ
ðŁĽ «
ðŁ¤ ł
ðŁ¥ ļ
ðŁ¥ Ľ
ðŁ¥ £
Ç ¯
È §
Î Ĭ
Ò ²
× °
Û ij
áĥ ©
áĦ Į
áĪ į
áī ¥
áı Ĥ
âģ ±
âĬ ¢
âĹ ĵ
âĿ °
ë¿ ¡
ìĽ ©
íģ Ń
íĨ ³
íĬ Ħ
íĵ ¸
ï¥ £
ï¥ ´
ï± IJ
ï± ¯
ï³ ļ
ðĿĸ ĺ
ðĿĺ Ģ
ðŁIJ Ĭ
ðŁIJ Į
ðŁij ļ
ðŁĵ ĥ
ðŁļ Ľ
ðŁļ ª
ðŁ¤ °
Ä ´
áĥ ®
áĹ ¨
âĻ ®
â² ŀ
ãĪ Ķ
ì ħį
ãħ ĥ
ï¥ ¡
ຠ¡
Õ İ
Õ º
⬠Ľ
â½ ¤
ðĿIJ ²
âŀ µ
áĢ Ľ
âĶ ħ
âĨ Ł
â¼ Ĭ
ðŁĮ ½
ðŁļ ¿
ï¦ Ĭ
ãĦ £
⼠©
ï© Ľ
ðŁį ±
â¾ ¨
à´ ¤
áŀ ģ
ຠŀ
Ê ļ
ðĿIJ Ĵ
à´ ±
áŀ ľ
à® ©
à° Ĺ
à´ ļ
âĩ £
ï¦ ķ
Õ ħ
Æ ĺ
âĤ ¦
âĶ Ħ
ï¦ Ł
ï¦ «
ðĿIJ ģ
ðĿIJ ĥ
ðŁį ¸
ðŁIJ ²
Å ¶
É ĸ
ß ĺ
ภ¦
འĶ
áĨ ·
âģ ķ
âĵ Ĥ
âĿ ľ
ï¥ ¥
ï¬ ®
ðĿĹ Ŀ
ðĿĹ ¿
ðŁİ ¾
ðŁĹ Ŀ
ðŁ¦ Į
Æ ħ
Ç ª
Ò Ĺ
Ü Ľ
ß ł
à¡ ij
áī £
áĬ Ń
á¹ ¡
âŀ ¼
âŀ ¾
â´ ±
ãī ¡
ê³ ¯
ë½ Ī
ìĤ ĺ
ìī ij
ì «ĺ
íĮ ĥ
íĻ °
ï¤ Ĺ
ðŁĮ ¬
ðŁĮ °
ðŁį ¤
Ä »
Å ĩ
Æ ¨
É ķ
Ò ¢
Ò º
Ö į
× ±
Ú ±
Ú ½
Û IJ
ठĽ
à· Ģ
๠ļ
ຠ«
á´ ¹
á ½Ķ
á¾ ³
âĤ Ĵ
âĨ ´
âĩ Ŀ
âī ħ
â Į¨
âĵ ĵ
âĸ ¢
âļ ¬
âŀ Ń
â² Ĵ
ãİ ¿
ê¿ ´
ëĪ ±
ëį ¬
ëİ IJ
ëIJ «
ëĶ «
ë± ģ
ìĥ ¥
íĮ ¼
ïŃ ĵ
ï® ¥
ï² °
ðĿIJ ĩ
ðĿIJ ij
ðĿij Į
ðĿĵ ª
ðĿķ ļ
ðĿĺ ª
ðĿĺ ¼
ðĿļ Ľ
ðŁĩ ¶
ðŁĮ Ħ
ðŁĮ ķ
ðŁĮ ¤
ðŁĮ §
ðŁį ¬
ðŁİ ĭ
ðŁİ »
ðŁı ¨
ðŁIJ ĩ
ðŁij ĵ
ðŁĵ IJ
ðŁĵ Ļ
ðŁĶ ¼
ðŁķ Ĵ
ðŁĸ ı
ðŁĸ ¥
ðŁ¤ ¬
ðŁ¥ Ĭ
ðŁ¥ Ĵ
ß Į
ຠĦ
á¼ µ
âķ ¡
â² ¤
â´ ¼
âµ ¢
ãĪ ¯
ëĵ ¸
ëŁ ĩ
ëº į
ðĿĻ §
ðŁį Ī
ðŁĶ ¬
ðŁĸ Ĭ
ðŁ¤ ¾
Ë ¡
Ü ©
âĮ ¡
âŃ ij
â² ¦
ë© ī
ì¼ Ń
ï¿ ¤
ðĿĴ İ
ðĿĹ ¥
ðŁIJ µ
ðŁķ ¶
ðŁķ ¸
ðŁ¤ ľ
Õ ª
áĪ ĭ
ðŁ¥ µ
ï° ģ
áµ IJ
âķ ĵ
áĢ ĸ
âĭ Ī
É ŀ
âŀ ®
ॠ°
ãĨ ģ
ðŁĴ ±
ðŁı Ń
áĨ ¨
ðŁį ļ
ðŁ¦ IJ
á´ »
âĺ Į
à´ ķ
Õ ±
áħ ®
ðĿIJ Į
Å ¦
ຠķ
âľ Ļ
Ë ³
Ô µ
âķ Ĵ
ðĿĹ Ĺ
ðĿĹ ł
Ú ļ
ঠ§
âĨ Ŀ
âĻ ī
ãĮ »
ì¹ Ĭ
ðĿĹ º
ðŁ§ ĺ
ì³ £
ï¬ Ŀ
ðŁij º
Ç Ł
Î Ī
Î «
Ñ ¥
Ô ²
Õ ¨
Ü ¦
ঠĨ
ঠ¥
áIJ ¢
á¼ ģ
á¼ ĺ
á¼ ¦
âĵ Ŀ
ãĪ °
ãİ Ĺ
ê² ¡
ë¨ Ģ
ì£ Ķ
ì´ ¤
ìµ Ŀ
ï§ ´
ïŃ Ĭ
ï² Ł
ðĿIJ ·
ðĿij ĭ
ðĿĵ ī
ðĿĺ µ
ðŁĴ ·
ðŁĽ ©
ðŁ§ ¹
Å Ķ
Ê ŀ
Ë ¥
Î Į
Ñ ©
Ó IJ
Ó ł
Ú ij
Ú Ĵ
ß ¨
ઠĪ
áIJ ĥ
á¹ ¯
âĤ ĭ
âĤ µ
âĦ ħ
âĦ ł
âĪ £
âī º
âī »
âĬ Ľ
âĮ IJ
âİ ĵ
âĺ ¸
âĻ Ĵ
âļ Ĵ
âľ ĩ
âľ ł
â´ ·
âµ ĸ
ãĦ ¸
ãī ¢
ãī °
êĩ ´
ê´ ¸
êº ł
ëĤ ı
ëĤ ¢
ëIJ Ģ
ëº ´
ìĥ ľ
ìį ħ
ì¤ «
ì± ¦
ìº ij
ì¼ ģ
ì¿ ³
íĤ ģ
íħ ¡
íĴ Ĥ
íĴ ī
íľ Ħ
ïŃ ª
ï® ¬
ï¯ ¦
ï± ª
ï² ı
ï ´Ģ
ï» Ĩ
ï¿ ¦
ðĿij Ĺ
ðĿĸ Ļ
ðŁĮ ¡
ðŁį Ŀ
ðŁį §
ðŁİ «
ðŁı ĺ
ðŁı ª
ðŁIJ ĭ
ðŁIJ Ľ
ðŁIJ º
ðŁij ĸ
ðŁij ŀ
ðŁij ·
ðŁĵ Ģ
ðŁ ĶĦ
ðŁĶ Į
ðŁķ Ļ
ðŁĻ į
ðŁĻ İ
ðŁ¦ į
Ç °
É Ł
Ê Ĩ
Ô ¼
Ú ľ
ঠ¡
ঠ¶
áĴ ĥ
á¼ ©
âĵ ķ
â² Ī
ê° °
ê¹ ł
êº ħ
ëĦ ¹
ë¯ ĵ
íIJ Ī
ï§ ¶
ï® ij
ï² ¨
ðĿĴ ī
ðĿĴ Ķ
ðĿĹ ¨
ðĿĻ ŀ
ðĿļ Ĵ
ðĿļ ķ
ðŁIJ İ
ðŁ¤ ķ
ðŁ§ Ķ
Ï °
Ô Ŀ
âĮ Ĭ
âĴ ¾
ãī £
ïŃ ©
ðĿļ ŀ
Ê ij
ঠ¦
áĦ ĩ
âī ĥ
â² Ģ
ìŁ İ
ðĿij ¶
ðĿĵ ²
ðŁ İ·
ðŁļ ¹
ຠģ
áł ł
ãĦ ļ
ðŁIJ ¿
ἠļ
âķ ³
ðŁIJ Ń
âĴ ¹
ðĿĸ ļ
âĻ ĸ
ãĪ ²
âĨ ¾
áĦ Ĩ
âķ Ľ
ðŁ¤ į
â½ ¥
ðŁ Į¨
âĪ ®
ãĮ ĺ
ãį ij
ï¹ Ģ
âĵ Ĺ
âĬ Ħ
ðŁı ¹
Ë Ĵ
ðŁ¤ ±
ãı ľ
ðŁİ Į
ï¥ Ń
ঠ£
ðŁİ ¹
ãĬ Ł
à´ °
ðĿIJ Ķ
à´ ¨
འļ
âľ º
Õ ·
ðŁij ³
ঠľ
âĺ ĭ
âĻ Ĭ
ãĢ Ľ
È ĭ
à® °
áĥ ¨
âĦ ķ
íij Ģ
ðĿĵ ĥ
ðŁ¦ Ķ
Ä ¿
Å Ģ
Æ ³
É ļ
Ö ĥ
Ü £
ß Ł
ঠŃ
à§ ¡
à¶ »
ຠ£
འĩ
Ḡ¨
á½ Ī
â½ ¬
ê¡ Ķ
ì³ Ħ
ï¨ ī
ðĿIJ ¡
ðĿĺ ¢
ðŁį ¿
ðŁİ Ł
ðŁı ī
ðŁĶ IJ
ðŁļ ħ
ðŁ¤ ½
Æ į
Ç «
Ç ½
È ļ
Î ī
Ó ¤
Ó ª
Õ Ĭ
Ù ¼
Ú ´
ß Ŀ
à¶ ľ
á¼ ķ
á¿ ¥
âİ ŀ
ãĢ ļ
ãī ¤
ê³ ¸
ê· ģ
ëĵ Ħ
ëĵ ķ
ì¨ Ķ
ì± ¨
ðĿIJ ¾
ðĿij »
ðĿĶ ¼
ðĿķ Ŀ
ðĿĺ Ń
ðŁĨ Ļ
ðŁĵ ¤
ðŁĶ Ł
ðŁĹ ¼
Ä ľ
Æ ģ
Æ ¿
Ç ³
Ç ·
É ĥ
É ł
Ê ī
Ê §
Ë ²
Ï ´
Õ ģ
Õ ŀ
Ö ĩ
Û Ĥ
Û ĵ
ß Ĺ
ß ¦
ঠ¹
à® ³
à´ ¸
à» Ĥ
áĪ Ŀ
áĪ ª
áĭ µ
áIJ Ĭ
áĴ ª
áļ ĸ
áŀ Ľ
á´ ¢
áµ ı
áµ Ń
á¶ «
Ḡı
ẠĴ
á¼ ¥
á½ ķ
á½ ¼
âĤ Ĭ
âĦ Ĥ
âĦ ©
âĩ ī
âī £
âĮ ł
âİ Ł
âı ®
âķ ĺ
âĹ ĸ
âĺ ©
âĻ ij
âĻ ²
âļ Ľ
ãĦ Ł
ãī ±
ãİ ļ
ê¡ ķ
êª ĸ
ê° ¹
ê² Ĩ
êµ Ħ
ëĩ ¬
ëĭ ¯
ëı ł
ëĴ ¬
ëĸ Ī
ëĸ ½
ëĺ Ķ
ëŀ ¸
ë¸ ħ
ë» ł
ë¿ Ł
ìĤ µ
ìĬ ī
ìľ °
ìł ĭ
ìł Ķ
ì¥ ¡
ìŃ Ŀ
ì¼ ¬
íĪ ĩ
íī ľ
íį Ħ
íĽ ¾
íĿ £
ï¤ ©
ï¤ ¯
ï¦ ľ
ï¦ §
ï§ ľ
ï¨ Ī
ï¬ ª
ï ¬´
ïŃ ½
ï® ī
ï¯ ŀ
ï° Ĵ
ï± ĩ
ï¿ Ħ
ðĿIJ ħ
ðĿij Ħ
ðĿij º
ðĿĴ Ĺ
ðĿĵ ®
ðĿķ Ľ
ðĿķ ŀ
ðĿĸ ij
ðĿĺ ģ
ðĿĺ Ĩ
ðĿĺ ¶
ðĿĻ ¢
ðĿļ ľ
ðŁĮ ĥ
ðŁĮ ¦
ðŁį Ł
ðŁİ İ
ðŁı Ļ
ðŁIJ ©
ðŁIJ «
ðŁIJ ´
ðŁij Ķ
ðŁĵ ī
ðŁĵ Ľ
ðŁĶ ī
ðŁĸ ¼
ðŁĹ ĥ
ðŁĹ ¯
ðŁļ ĩ
ðŁļ IJ
ðŁļ µ
ðŁ¤ ¶
ðŁ¥ ĭ
ðŁ¥ ĵ
ðŁ¥ ®
ðŁ¦ İ
ðŁ¦ ł
ðŁ§ Ĵ
ðŁ§ ¨
Æ IJ
Ç į
Ó Ģ
Ô Ľ
ಠ°
à´ Ļ
áĢ Ĵ
ê² Ŀ
ê¹ ¹
ë© ¥
ìĸ Ķ
ï¤ ģ
ï¤ ı
ï¦ ī
ï¦ ĵ
ï§ ī
ï² Ŀ
ðĿĹ ŀ
ðĿĹ ±
ðŁĮ ĭ
ðŁį ¶
ঠļ
ìķ ľ
ðĿIJ ¯
ðĿļ Ŀ
à° ¨
འĺ
འł
á¡ ¥
á¾ °
âģ į
âĶ °
⬠ľ
ðĿIJ ł
ðĿij ¯
ðĿĹ Ľ
ðĿĵ »
ðĿĸ Ī
âŀ »
áŀ ł
â¡ ±
â» ij
ðŁ§ µ
ï¦ ¢
ðŁij ĺ
ãĤ Ķ
â¼ Ł
ãĬ ¤
ï¦ Ŀ
ãĮ ¦
âĢ ¸
ðŁĶ Ļ
ã ¹
ã¹ ¦
ï¹ ħ
ï© Į
ãī ¨
ï¸ ½
âį ¥
ðŁļ ī
ðŁ¥ ľ
âĵ ľ
â» Ŀ
ï¨ ľ
ðŁĴ Ĵ
áĦ ij
â¾ ŀ
ï¨ ģ
à´ ª
áĦ İ
âŀ ´
ঠ·
áħ ¬
áŀ §
âĨ ¢
âķ ¦
âľ ij
Ë ¬
Õ IJ
༠Ķ
Ê ¤
Ë ¨
ठŀ
à» ĥ
༠ļ
âĵ ¥
âķ ľ
ðŁIJ ĸ
á¼ Ļ
á¼ ¤
ìĨ °
È Ĥ
Ê ±
à® ļ
áĥ §
á´ ĭ
á´ ®
âĿ ¡
âŀ ·
ëĿ ¡
ï§ ¢
ï¯ ¡
ðĿķ ķ
ðŁħ °
ðŁ¦ ¸
Ç ¸
Ó ŀ
Ô ¶
Ö Ĩ
Ú ģ
Û ĭ
áİ ¥
á¾ ¿
âĶ Ń
âĶ ®
êĢ Ģ
ê± ĺ
ëIJ Ń
ë½ Ħ
ìĶ IJ
ì¸ Į
íģ ł
íĻ ±
ï¥ ī
ï¨ ĸ
ðĿij ´
ðĿĸ Ĵ
ðĿĺ ¨
ðĿ ļĮ
ðŁIJ ¡
ðŁij ¢
ðŁĵ Ķ
Å ħ
Æ İ
È ©
Ò ª
Ô ĥ
áĥ «
Ḡĩ
⼠Ł
ê» Ń
ë¨ Ħ
ìŁ Ģ
ì¤ ´
íļ IJ
ï¤ ³
ðŁŁ ¢
Æ §
È ¼
Ê Ŀ
Ë Ħ
Ë ħ
Ë į
Ë §
Ò ¥
Õ Ķ
Ø ı
Ø ¼
ß IJ
ß ľ
ठĵ
ঠĻ
à® ĵ
à¶ ´
༠į
༠Ĵ
འ£
áĢ Ĥ
áĢ Ĭ
áĦ Ħ
á Īĺ
áĭ Ĭ
áĮ į
áij ĭ
áŀ Ĥ
áł ¢
á¡ Ŀ
á´ ¦
áµ į
áµ ¨
Ḡ¡
Ḡ¯
á¼ £
âģ Ĥ
âĦ ĺ
âĦ ľ
âĦ ³
âĦ µ
âĨ ¦
âĩ Ĩ
âĪ ·
âĬ ļ
âĮ «
âĮ ¯
âİ Ľ
âİ ľ
âİ ¤
âİ ¦
âİ ®
âij ī
âĶ ī
âķ Ļ
âĸ Ĥ
âĹ Ń
âĺ Ĭ
âĺ į
âĺ Ĵ
âļ Ĩ
⼠§
⼠²
âŀ ĺ
⥠Ħ
â´ ³
â´ ½
âµ Ī
ãī ¯
ãİ ij
ã§ ¬
êĻ ¬
ê§ ģ
ê³ ¬
ê´ ŀ
ê» ľ
ëħ ĵ
ëĭ ¼
ëį ĸ
ëĸ ±
ëĿ °
ë¡ ¹
ë¢ ´
ë£ Ģ
ë¤ ł
ë¨ ķ
ëŃ ¥
ìĦ ¶
ìħ ¤
ìĮ ķ
ìį ª
ìı ©
ìĴ Ģ
ìĶ ¯
ìĿ Ķ
ìĿ ľ
ìł Ń
ì§ ¦
ì¨ ©
ì² ¬
ì³ ¥
ì¼ ¯
íĢ «
íĢ Ń
íĥ ¸
íĵ ģ
íķ ¬
íĹ ¸
íĽ ķ
íľ Ń
íĿ Ĺ
ï¤ Į
ï¤ ª
ï§ ¿
ï¬ Ħ
ï¬ ħ
ïŃ ij
ïŃ «
ïŃ º
ï® Ĥ
ï® ¢
ï® ¨
ï° İ
ï° ł
ï² £
ï³ IJ
ï³ Ĵ
ï³ ĺ
ï³ ľ
ï¹ ¼
ï¿ ¨
ðĿIJ ©
ðĿĴ ļ
ðĿķ Ķ
ðĿķ ¤
ðĿĸ Į
ðĿĹ £
ðĿĹ °
ðĿĹ ´
ðĿĺ Ĥ
ðĿĺ ¥
ðĿĺ ®
ðĿĺ ¸
ðĿĻ Ģ
ðĿĽ ¾
ðĿľ ı
ðŁĮ ģ
ðŁĮ ľ
ðŁĮ ¥
ðŁĮ ¯
ðŁį IJ
ðŁİ Ĵ
ðŁı Ķ
ðŁı ķ
ðŁı ®
ðŁIJ Ĥ
ðŁIJ ī
ðŁIJ ¹
ðŁĶ ķ
ðŁĶ ļ
ðŁķ ij
ðŁķ £
ðŁĹ ŀ
ðŁĹ ¡
ðŁĹ ¿
ðŁļ Ĩ
ðŁļ Ĭ
ðŁļ ĵ
ðŁļ ķ
ðŁļ ¾
ðŁĽ ģ
ðŁĽ İ
ðŁĽ ı
ðŁ¤ ´
ðŁ¥ ķ
ðŁ¥ ĸ
ðŁ¥ ł
ðŁ¥ ¥
ðŁ¦ Ĩ
ðŁ¦ ī
ðŁ¦ ļ
ðŁ§ ij
ðŁ§ ¥
ðŁ§ ¿
Å °
Æ º
É §
ઠĩ
à® £
áĪ Ī
áĬ ¤
áĭ ®
áĮ Ī
áĮ µ
ᥠ²
âĵ Ł
êĻ ³
ê° Ĭ
ëķ ģ
ëķ ¨
ìĬ ģ
ï¦ µ
ï¬ ²
ðĿĸ į
ðĿĺ Į
ðĿĺ ³
ðĿĻ ©
ðŁį Ļ
ðŁĸ ĸ
áī ³
áĭ ¨
áĸ ĩ
áŀ Į
á¹ §
âķ ª
âŀ ļ
â² ĺ
ê ķ
êķ ¥
ï¤ ·
ï® £
ï¯ ł
ðĿĴ ĸ
ðĿķ ĺ
ðĿĸ ĩ
ðĿĹ Ł
ðĿĹ ª
ðĿĹ ¯
ðĿĻ ł
ðŁĵ ı
ঠĹ
âĴ »
â² ł
ðĿĵ µ
Ê £
à° ľ
áĬ ¢
áŀ IJ
Ḡ·
âĦ Ľ
âĩ Ģ
âĩ Ĭ
êĴ ¦
ê¦ ł
ï® ¤
ðŁį Ľ
ðŁ¤ Ľ
ᨠ¾
âŀ º
áķ ¯
ἠı
âĩ Ĥ
âĶ ¹
âĻ Ĺ
ðŁĸ ¨
ê¦ ı
ઠ°
áļ ¨
ðŁ¤ ¥
ðŁ§ ¢
ãIJ Ĥ
ãĦ ¥
ðŁĸ Į
â¼ Ĵ
ãĬ §
âį ©
ðŁ¦ ij
âĶ ·
ï© IJ
ï© ¡
ðĵ Ī
ðĵĪ Ĵ
â» Ħ
ï¨ Ĵ
âĦ ª
Ò §
Ú Į
âĢ ¶
⺠ł
â» ģ
âĨ ¸
áĦ IJ
ãħ IJ
à» Ħ
áĹ ª
âĨ ¼
âĩ ĭ
âĩ ĺ
âĮ ij
âĸ ©
ðĿIJ Ĺ
Ä Ĭ
ঠī
ìī ł
É ¤
ß į
ß ı
áµ Ĺ
âĤ ¥
âĵ ī
âĶ ł
âĶ ¨
âķ Ħ
ä ¤
ä¤ Ģ
ê» ¸
ï® ģ
ðĵ Ĥ
ðĵĤ ĥ
ðŁ¦ ķ
Æ Ľ
ঠĩ
ãı ĺ
ï® ¼
Ú ĵ
Ú Ŀ
ঠĵ
à¶ ¯
á´ ħ
á½ Ļ
âģ ¼
âĸ İ
â¼ ©
ä Ķ
äĶ Ģ
ë» ¡
ìĽ ½
íģ Ħ
ï¥ ¼
ï± ī
ï¹ »
ðĿĸ ĭ
ðĿĻ Ī
ðĿĻ ª
ðĿ ϶
ðŁIJ Ħ
ðŁIJ Ĩ
áİ ¢
ḠĮ
âĿ ´
ðŁı ¸
È Ŀ
É ¸
Î ħ
Ï ľ
Ó ¢
Õ ¹
à´ ħ
ຠĪ
áĭ °
áij İ
áł µ
á¡ ł
á´ ī
Ḡµ
á¿ ´
âĵ £
âĶ ¶
â½ ¯
ê² ¥
ê¿ ĺ
ëģ İ
ëİ Ī
ëĶ ¯
ë² °
ìĺ ¯
ìĽ ¸
ìŀ Ĺ
ì§ ĺ
ì¬ ¬
ì· ¬
íģ ħ
íĵ Ķ
íĽ Ŀ
ï¤ ®
ï¤ ¹
ï¥ ²
ï¯ ĸ
ðĿĵ ħ
ðĿĻ Ħ
ðŁĵ ¶
ðŁĹ Ĵ
ðŁ¥ Ķ
ðŁ¥ Ń
Å ®
Å ´
Æ ī
Æ «
Ç ģ
Ç £
Ç º
Ç ¼
È į
È ¯
É ľ
Ê ¬
Ë ģ
Ë ¤
Ë µ
Ï Ľ
Ò ¤
Ò ¬
Ó ı
Ó Ľ
Ó ¡
Ó ³
Ô Į
Ô ¬
Õ ³
Ù »
Ú ī
Ú §
Ü ľ
ß ª
ठĿ
ঠĽ
ਠĨ
ઠķ
ઠ¡
à® İ
à° ¬
ൠ»
ൠ¼
à¶ ł
à¶ Ń
à¶ ¶
à· Ĩ
༠½
áĢ ļ
áħ ¢
áĨ ¸
áĪ Ģ
áĪ ķ
áĪ °
áī ¡
áī ¤
áĬ ¦
áĬ «
áĭ ĭ
áĭ į
áİ ¯
áij Ń
áķ Ĺ
ᣠĽ
ᥠĴ
á© ī
áŃ º
á´ ¡
áµ ĺ
áµ Ľ
á¶ ł
Ḡģ
Ḡĭ
á¹ Ļ
á¹ Ŀ
á¹ ¦
Ạħ
á¼ Ĥ
á½ ĥ
á½ į
á½ §
á¾ ·
âĢ µ
âĤ İ
âĦ Ŀ
âħ Ģ
âĨ ŀ
âĨ §
âĩ ħ
âĪ ĥ
âī ı
âī ½
âĬ ŀ
âĬ ¡
âĬ §
â Ĭ¶
âĭ Ħ
âİ Ĵ
âİ ¡
âİ £
âİ ª
âı İ
âĵ ĥ
âĵ ĸ
âĵ ¨
âķ ĭ
âķ ĸ
âķ ¢
âķ ²
âĸ Ĩ
âĸ Ĭ
âĸ į
âĸ ®
âĺ ¡
âĺ ¦
âĺ ±
âĺ ¿
âĻ ĺ
âĻ Ŀ
âļ °
⼠ij
âŀ ª
⤠Ŀ
⤠¢
⤠·
â§ «
⨠Ń
⨠¯
â± £
â² İ
âµ Ľ
ãħ Ķ
ãĪ ı
ãī ²
ãī ³
ãĬ ij
ãĭ Ľ
ãİ IJ
ê² ¤
ê· ¿
ê¹ ŀ
ê» ¨
ê¼ į
ê¿ ¸
ëĥ ¬
ëĩ IJ
ëĭ ł
ëį ¯
ëĹ Į
ëĹ ij
ë¥ Ģ
ëª ĥ
ëª ¯
ë± ¡
ë³ ĵ
ë³ ½
ë µľ
ìĤ ³
ìħ ¥
ìĩ ½
ìı ¨
ìı ¸
ìķ į
ìĸ ĸ
ìŁ ¨
ì¢ ĥ
ì¢ į
ì¥ ij
ì§ ¼
ì© ĥ
ì® ľ
ì® ¸
ì³ ij
ì´ ¥
ì¾ ĥ
íħ ¦
íĪ ¿
íĵ ½
íķ ³
íĸ ı
íĹ ł
íĿ «
ï¤ ĵ
ï¤ ĺ
ï¥ İ
ï¥ ¶
ï¦ ħ
ï¦ ½
ï§ ĩ
ï¬ Ĩ
ï¬ ³
ï® ĩ
ï® Ī
ï® Ŀ
ï® ©
ï® ±
ï¯ ĺ
ï¯ Ļ
ï¯ ¢
ï¯ £
ï¯ ¤
ï¯ ¥
ï± Ĥ
ï² Ĩ
ï² ª
ï´ ¼
ïº ī
ïº Ĭ
ïº ¥
ðĿij ¨
ðĿij ©
ðĿij ²
ðĿ ĴĮ
ðĿĴ ª
ðĿĴ ®
ðĿĵ Ĥ
ðĿĵ Ī
ðĿĵ ¯
ðĿĶ ¨
ðĿķ Ģ
ðĿķ Ĩ
ðĿķ ¦
ðĿķ §
ðĿķ «
ðĿķ ·
ðĿĹ µ
ðĿĹ ¸
ðĿĺ Ħ
ðĿĺ Ļ
ðĿĺ ł
ðĿĺ ¬
ðĿĻ į
ðĿĻ ij
ðĿĻ ¡
ðĿ ύ
ðĿĻ ·
ðĿļ į
ðĿĽ ¿
ðŁ ĥ
ðŁĥ ı
ðŁħ ĺ
ðŁ ī
ðŁī ij
ðŁİ ¡
ðŁİ ª
ðŁİ ±
ðŁİ ³
ðŁİ º
ðŁı İ
ðŁı Ĺ
ðŁı ļ
ðŁı ŀ
ðŁı ¦
ðŁı §
ðŁIJ ģ
ðŁIJ ħ
ðŁIJ ĵ
ðŁĴ Ĥ
ðŁĵ ij
ðŁĵ ĵ
ðŁĵ ¨
ðŁĵ «
ðŁĶ ĭ
ðŁĶ Ń
ðŁĶ ¯
ðŁķ Ĺ
ðŁļ Ĥ
ðŁļ ¢
ðŁļ ¦
ðŁļ ¬
ðŁĽ ĭ
ðŁĽ Į
ðŁĽ ¬
ðŁĽ ¶
ðŁŁ ¡
ðŁ¥ ĺ
ðŁ¥ Ł
ðŁ¥ ¦
ðŁ¦ ĩ
ðŁ¦ Ī
ðŁ§ Ĭ
ðŁ§ Ĺ
ðŁ§ ¤
Ê ·
Ë ¹
á¹ ļ
á½ ¥
âĦ Ł
ê² ¯
ê» «
ë° ·
ìĥ Ĩ
ìĽ Ŀ
ì¨ ī
ì« ı
ï¯ ķ
ðĿľ ĭ
É ²
Ò Ń
Ó Ī
འĽ
áĭ ĵ
áĻ Ń
áł ©
á¹ ®
âĦ Ĵ
âĨ »
âµ ĥ
ëĢ ¨
ëł §
ìī ¥
ìĮ ľ
ìĹ ¶
ì¨ Ī
ìª ¾
íı ½
íļ Ķ
íĽ µ
ï¤ ¸
ï¦ IJ
ï§ Ĺ
ï§ ļ
ï¬ ¯
ðĿIJ Ĭ
ðĿķ Ĺ
ðĿĹ ļ
ðĿļ ĸ
ðŁħ ´
È ĥ
É Ŀ
Ï ±
Ó Ĺ
ठ¢
áħ ł
áī ¦
áij Į
áĴ ¼
áŀ ¡
áł ¨
áł Ń
ᨠħ
ᨠĶ
á´ ĺ
á¶ ¦
Ḡİ
á¼ ħ
á¼ ¹
âĨ ¯
âĵ İ
ãı Į
ê ī
êī Ĥ
ëĨ §
ëĿ ±
ì¢ ¡
íĪ ½
ï¤ ĩ
ï¤ Ľ
ðĿIJ ķ
ðĿĵ ¸
ðĿĵ ¼
ðĿĹ ķ
ðĿĺ Ī
ðŁı £
ðŁı ¤
ðŁĹ Ħ
Ñ ·
Ò ł
áµ ĸ
á¼ ¨
ë¬ Ħ
ï° ´
âĪ ½
Õ Ń
Ú ¹
ॠŁ
áĢ Ĩ
áŀ Ĵ
ãĢ ¶
ê¦ «
ï¸ ĵ
ðĿIJ Ľ
ðĿĺ Ĺ
ðŁı ľ
ì« Ń
ðŁ§ ŀ
འĤ
âĨ ¿
âĩ ı
âĵ ģ
âĶ §
âķ ģ
âķ ¤
ê¦ Ĺ
ê¦ ¤
ðŁı Ī
áŀ ķ
Ô ½
ઠĹ
ଠĨ
âķ ķ
ï½ ł
â¼ ¦
â¼ ¯
â¾ ·
âĶ ĸ
ଠĵ
âĺ Ĺ
âį ĭ
ï¨ Ŀ
â¼ ¥
ï¦ ª
âĦ Ĭ
ãĢ ´
âį ¢
ð¡ Ī
ð¡Ī ½
ï© ¨
ãĢ »
ãı ĥ
ï¦ ¡
ï¨ ĺ
ðŁIJ ĥ
ðŁĨ ĸ
ðŁĹ ¾
ãĦ ĩ
Þ ĭ
â¼ ¼
ï¨ Ń
Þ Ģ
Þ Ħ
Þ Ī
Þ IJ
âĮ Ħ
â» ĺ
ãŁ ¢
á ħ§
ðIJĮ ¿
Ë »
ಠĹ
áĢ ĩ
áŀ Ĭ
âķ ĩ
ãĩ ¼
ãİ °
Õ Ĵ
Ü Ī
ß ¥
à¿ IJ
áĢ Ł
âĨ ¥
âķ Į
â½ Ģ
â½ °
â¾ Ĭ
ä Ħ
äĦ Ģ
ðĵ IJ
ðĵIJ į
ðŁİ ¦
âĤ ¯
âĬ ĺ
âĦ į
Ê µ
Ñ ¶
Ú ĥ
ঠĶ
à´ ¦
áİ ¶
áĵ ķ
á¹ ¨
âĤ ł
âĩ °
âĹ Ĵ
â¿ Ĭ
ê· ±
ì¹ ķ
íĪ ©
ïŃ Ģ
ðĿĴ ¸
ðĿĵ Ĭ
ðĿĺ ©
Ç ¦
É «
áĬ ¨
È ¹
Ê ¯
Î ª
Ú Ģ
áĮ ¸
áİ »
áı ķ
áı ´
á² Ĥ
á½ ¨
âı Ŀ
âĺ Ļ
ëĥ ¨
ëĦ ¼
ëĪ Ļ
ë£ ħ
ìĶ ¼
ìķ Ŀ
ìļ ¬
ìľ ±
ï¥ Ĥ
ï¦ ¹
ï¬ ¹
ïŃ ģ
ï³ Ī
ðĿĶ ħ
ðĿĺ ¤
ðĿĻ ı
ðĿĻ Ļ
ðŁķ ī
ðŁ§ Ļ
Ḡij
ê´ ¼
ëģ į
ëĹ ´
ëĿ ³
ë° ŀ
ë° ¢
ëµ ĺ
ìĤ Ķ
ìĦ Ħ
ì¼ ļ
íĢ ł
íĬ ±
íĮ ĸ
ï¤ ij
ï¦ ´
ï¦ ¸
ï´ į
ðĿĺ ·
Ä ¬
Å ¬
Æ Ģ
Æ ĭ
Æ ľ
Ç ij
Ç ĺ
Ç ŀ
Ç ¥
Ç ®
É °
É ¶
É ·
É ½
Ê Ī
Ê IJ
Ë İ
Ë Ł
Ë ¦
Ë ¯
Ï IJ
Ï ĵ
Ï ¢
Ï ¤
Ï ª
Ï Ń
Ï ®
Ï »
Ñ ł
Ñ Ń
Ò ¨
Ó Ŀ
Ô ¡
Ô ·
Õ ī
Õ ĵ
Õ ĸ
Õ ļ
Õ Ŀ
Ö İ
Ø ¿
Ú ħ
Ú į
Ú Ķ
Û Ĭ
Û ¾
Ü Ļ
Ý Ĵ
Ý ĺ
ß Ĵ
ß ĸ
ठĬ
ठIJ
ঠı
ঠĸ
à§ Ł
ઠ®
ઠ¹
à® ħ
à® Ĩ
à° ¡
à° °
ಠļ
ಠ®
ಠ¯
à´ Ł
à´ ·
ൠ¾
à¶ ij
à¶ ŀ
༠¼
འĵ
áĢ ĵ
áĤ ¦
áĥ ĸ
áĥ Ń
áĥ ¯
áħ ¨
áħ ª
áĨ °
áĪ ģ
áĪ İ
áĪ ĵ
áĪ ¥
áĪ ²
áĪ ´
áĪ »
áī ł
áī ²
áī ¶
áĬ £
áĬ ¥
áĬ ª
áĭ ĺ
áĭ ²
áĭ ¶
áĮ £
áį ¡
áį £
áİ ¬
áİ ¾
áIJ ¡
áķ ķ
áĸ ±
áĹ IJ
áĹ Ń
áĺ ī
áļ ±
ἠŁ
áŀ ¥
ᣠĶ
áł £
áł ª
áł °
áł ´
ᤠĸ
ᥠ£
á ®
á® ł
á ¯
ᯠĻ
á °
á° į
á´ Ĭ
á´ ¾
áµ ģ
áµ İ
áµ ŀ
áµ ¤
á¶ ħ
á¶ ĺ
á¶ Ł
á¶ ¢
á¶ ¤
á¶ ±
á¶ »
Ḡī
Ḡŀ
Ḡº
á¹ ĵ
á¹ Ĺ
á¹ ª
ẠĬ
Ạı
ẠĽ
á¼ ĥ
á¼ Į
á¼ ¿
á½ Ĥ
á½ ĵ
á½ Ĺ
á½ ¦
á¾ ±
á¾ ´
á¿ ĺ
á¿ Ł
á¿ ¸
âģ ĺ
âĤ ij
âĤ Ľ
âĤ ¿
âĦ ĩ
âĦ ŀ
âĦ ±
âĩ Ł
âĩ ²
âĪ ¤
âĪ ¶
âī Ĥ
âī ¾
âĬ ¨
âĬ ³
âĬ ·
âĭ Į
âĭ ĺ
âĮ ķ
âĮ ¥
âĮ µ
âĮ º
âį £
âį ²
âį µ
âİ ĩ
âı ĥ
âı IJ
âı ł
âı ¤
âı ¶
âı ¸
âı ¹
âij Ĥ
âĴ ·
âĴ º
âĵ ¡
âĵ ¤
âĶ ¾
âĸ ĺ
âĸ µ
âĹ ª
âĹ ·
âĺ ¨
âĺ «
âĺ ²
âĺ ³
âĻ Ĩ
âļ ¤
âļ ¥
⼠ĵ
⼠´
⼠¾
âŀ «
âŀ ¿
⣠·
⤠ij
⤠«
⤠¶
⤠½
â§ ª
⨠Ģ
â ©½
⬠¡
⬠¢
⬠¤
â² ĸ
â² ª
âµ Ģ
⸠®
⸠½
ãĢ ł
ãĢ ·
ãĦ Į
ãĦ ĺ
ãħ ij
ãĪ İ
ãĪ IJ
ãĬ ľ
ãĮ ĵ
ãĮ ł
ãİ Ł
ãİ ¤
ãİ §
㬠®
ä Ī
äĪ Ģ
ä °
ä° Ģ
ê ħ
êħ ī
êĩ Ĺ
ê Ī
êĪ į
ê§ Ĥ
ê§ Ĭ
êª Ģ
ê² Ī
ê² į
ê³ Ģ
êµ ł
ê½ IJ
ê¾ Ī
ê¿ ±
ëĥ ı
ëĦ ij
ëħ ¤
ëĩ ¸
ëĪ ¼
ëī ħ
ëĬ £
ëĭ º
ëį ŀ
ëIJ Į
ëķ ¸
ëĺ ł
ëĻ ĩ
ëĻ Ī
ëľ ½
ëŀ Ķ
ëł ľ
ë£ IJ
ë§ Ģ
ë§ Ĭ
ëª Ģ
ë¬ Ń
ë¯ ¾
ë³ ľ
ë´ Ĭ
ëµ ī
ë· ľ
ë¸ Ģ
ë¹ ĭ
ìģ Ħ
ìĤ £
ìĤ »
ìĦ µ
ìħ Ĵ
ìī Ī
ìī Ķ
ìĬ Į
ìĬ Ļ
ìIJ ´
ìĵ º
ìķ ļ
ìķ º
ìĸ ľ
ìĹ ª
ìĺ ľ
ìĻ ¤
ìļ Ľ
ìļ º
ìĿ ħ
ìĿ ı
ìĿ Ń
ìĿ ¶
ìł Ľ
ì¡ Ī
ì¢ ī
ì¢ Ķ
ì© ł
ìŃ Į
ì¯ ©
ì´ £
ì¸ ķ
ì¹ Ł
ì¾ ¡
ì¿ Ļ
íģ ĩ
íģ ī
íĩ Ģ
íĪ ¶
íĸ ij
íĸ ¤
íĹ ħ
íľ ı
íĿ Ŀ
ï¤ Ĵ
ï¤ ķ
ï¤ ¬
ï¥ ħ
ï¥ ĩ
ï¥ ı
ï¥ ļ
ï¥ Ł
ï¦ Ħ
ï¦ Ī
ï¦ ¨
ï¦ ©
ï¦ ²
ï§ ģ
ï§ ĥ
ï§ Ķ
ï§ ł
ï§ £
ï§ ®
ï ŃIJ
ïŃ ĸ
ïŃ ¦
ïŃ ´
ïŃ µ
ïŃ ¶
ïŃ ¸
ï® Į
ï® İ
ï® ŀ
ï® Ł
ï® ¡
ï® ª
ï¯ Ķ
ï¯ Ĺ
ï¯ ļ
ï¯ Ľ
ï¯ Ŀ
ï¯ Ł
ï¯ §
ï¯ ¨
ï¯ «
ï¯ ¯
ï¯ °
ï¯ ±
ï¯ ²
ï¯ ³
ï¯ ´
ï¯ µ
ï¯ ¶
ï° Ģ
ï± ħ
ï± Ķ
ï± ´
ï² ģ
ï³ ķ
ï· ½
ï¸ ķ
ï¸ ±
ï¹ £
ï¹ ½
ï» į
ï¾ ±
ðĿIJ Ļ
ðĿIJ ½
ðĿij ¤
ðĿij ®
ðĿij µ
ðĿĴ ĥ
ðĿĴ Ħ
ðĿĵ Ń
ðĿĵ ·
ðĿĶ ĸ
ðĿĶ ŀ
ðĿĶ ¢
ðĿĶ ¦
ðĿĶ ¬
ðĿķ Ħ
ðĿķ Ĭ
ðĿķ İ
ðĿķ Ļ
ðĿķ ľ
ðĿķ Ń
ðĿķ ³
ðĿķ ¸
ðĿķ ¾
ðĿ ĸī
ðĿĸ ı
ðĿĺ ĩ
ðĿĺ ī
ðĿĺ ĸ
ðĿĺ Ľ
ðĿĺ ŀ
ðĿĺ «
ðĿĺ ¾
ðĿĻ ĩ
ðĿĻ ī
ðĿĻ ĭ
ðĿĻ İ
ðĿĻ ĺ
ðĿĻ ¥
ðĿļ ĥ
ðĿļ IJ
ðĿļ Ķ
ðĿľ ĥ
ðŁĦ ·
ðŁħ Ŀ
ðŁħ ¾
ðŁĨ Ĥ
ðŁĨ ĵ
ðŁĮ Ĥ
ðŁĮ Ĩ
ðŁĮ ī
ðŁĮ ij
ðŁĮ ĺ
ðŁĮ ©
ðŁĮ «
ðŁį ¢
ðŁį ¥
ðŁİ Ľ
ðŁİ ¢
ðŁİ ´
ðŁij ¡
ðŁĴ ¾
ðŁĵ Ń
ðŁĶ Ī
ðŁĶ ¦
ðŁĶ ²
ðŁĶ ³
ðŁķ ĵ
ðŁķ ķ
ðŁķ ĺ
ðŁķ Ł
ðŁķ ·
ðŁĹ ³
ðŁļ Ħ
ðŁļ Ķ
ðŁļ ĸ
ðŁĽ IJ
ðŁĽ ¤
ðŁĽ ¸
ðŁ ł
ðŁł ³
ðŁ¤ ¹
ðŁ¥ ĥ
ðŁ¥ ¨
ðŁ¥ ª
ðŁ¥ ¾
ðŁ¦ ĥ
ðŁ¦ Ĵ
ðŁ¦ Ļ
ðŁ¦ ¶
ðŁ§ ł
ðŁ§ ª
ðŁ§ Ń
ðŁ§ ²
𣠷
𣷠Ń
ð¦ ĺ
ð¦ĺ Ĵ
Æ ij
Ç Ļ
È ®
Ø ł
Ú Ħ
Ü Ģ
ß ¢
áī Ģ
áĬ IJ
áİ ł
Ạŀ
ëĪ ŀ
ëķ Ł
ë£ ģ
ë¤ Ĺ
ìĦ ¥
ìħ ij
ìĸ IJ
ìĽ Ľ
ì£ ķ
íİ ı
íĽ ĵ
ï¥ º
ï³ Ľ
ï´ «
ðĸ §
ðĸ§ ·
ðĿķ ģ
ðŁIJ ª
ðŁĴ Ī
ðŁĵ ł
ðŁķ Ľ
ðŁķ ´
Ñ Ŀ
Ó Ĭ
ॠ²
ઠª
áĥ ¤
áį IJ
á¶ °
á¼ Ŀ
á½ ©
âĭ ĭ
âĴ ½
âĻ ¾
â ½Ķ
â¾ ¯
ãĦ Ĵ
ãħ ļ
ëIJ į
ë· ģ
ìĭ Ģ
ìļ Ŀ
ì¥ °
ìº ´
íĭ ī
íĿ ½
ï¦ Ģ
ï¦ ¿
ï§ ħ
ï§ ĵ
ïŃ ¯
ï® Ĩ
ðIJ¤ ķ
ðĿIJ Ł
ðĿĴ ħ
ðĿĵ ľ
ðĿĶ °
ðĿĶ »
ðĿĺ į
ðĿĻ ¯
ðŁĦ ½
ðŁħ Ĥ
ðŁħ Ķ
ðŁħ ½
ðŁĵ ´
ðŁ§ ĸ
Ó Ĵ
Ḡ²
ëī ¼
Ç ı
È ĵ
Ê ¸
Õ Ĥ
Û ħ
ß ¡
ß £
à® ¯
à° Ī
ಠ¸
ຠ®
༠ķ
áĢ İ
áĨ ¡
áIJ ĭ
áIJ ķ
áij ¯
áŀ Ĩ
ᨠķ
á© Ī
âģ ħ
âĨ ļ
âĶ İ
âł ©
â² Ĥ
â² Ķ
â² ¨
ãĬ ļ
íĵ ²
ðĿij Ī
ðĿij ¬
ðĿij ¹
ðĿĴ ¾
ðĿĵ ±
ðĿĵ ½
ðĿķ ¯
ðĿķ »
ðĿĺ ½
ðĿļ Ĩ
ðŁĦ °
ðŁIJ ¨
Ò ķ
ಠħ
ï¨ Ĩ
ðĿij °
ðŁĦ ¸
Ô İ
Ø į
Ù µ
ಠ¶
áĢ Ī
áĺ Ĺ
áł ¸
á¡ ¡
ᨠ²
á© ģ
á´ ·
áµ §
âķ ¨
âļ ģ
â¾ Ŀ
ãĢ ¼
ãĦ ı
êĴ «
ê¦ ¥
ê¦ ©
ê¦ ²
ìĺ ¼
íĵ IJ
ðĵ ĩ
ðĵĩ ¼
ðĿķ ¿
ðŁĽ ´
ë¨ ľ
ಠµ
à´ İ
༠Ģ
âĩ ĸ
ãĪ «
âĵ Ģ
áħ ´
áļ ¾
ἠŀ
ἠ«
ᥠ´
âĨ Ľ
âĨ ¶
âĩ ¤
âķ Ł
âĺ ·
âļ IJ
ðŁ§ ´
á¹ ³
âĶ į
âĶ Ĵ
âĶ ©
âĶ ¦
â¾ µ
ઠľ
ઠ¤
âĩ Ļ
âĶ ±
âķ Ģ
â½ Ĭ
ï½ Ł
ଠ¡
ðł ®
ðł® ·
âķ ĥ
â° Ķ
ãĬ ¦
ðŁİ IJ
ãĩ °
â¼ Ŀ
â¾ Ķ
â½ Ĵ
âł Ĵ
ï¨ ¦
ï© Ĵ
ï¨ ²
ï© ĸ
ðĵı ¸
ãĮ ĥ
ðĸ ¤
ðĸ¤ IJ
ï¦ Ń
âĬ ħ
â¾ ³
ä´ ¥
ï© ķ
ðŁĮ Ķ
áŀ ĭ
âļ į
â¼ ĭ
ãİ ĺ
ðIJĮ ²
É ©
áİ ij
âĨ ®
âĩ ĥ
âļ İ
ãĩ ±
ãĭ ©
ãĮ ¶
êĻ ª
ëİ ¬
ï¨ IJ
ï¨ Ľ
ï© Ĭ
ï© į
ðĵ ħ
ðĵħ º
Ï ¡
È ij
É Ĥ
Ô ĵ
ß İ
à´ §
áĢ ī
áĢ ĭ
áĢ ij
áĢ ł
áļ Ļ
ᨠĦ
ᨠ©
ᨠ¹
á© ĵ
ᬠľ
á´ Ļ
áµ ij
âĤ Ń
âĨ °
âľ ģ
â½ IJ
ãĭ ¯
ãĮ ½
íĨ ¢
ï¤ ¿
ðŁ Ĥ
ðŁĤ »
È Ĵ
Í º
Ô ¥
Õ ij
Ú ¶
à§ İ
à¶ ®
ຠĸ
ຠľ
ຠ½
áĥ »
áħ ¯
áĭ ŀ
áĸ ķ
á ´Ī
á¶ Ĩ
Ḡľ
á¹ ¼
á¿ ¨
âĦ ĭ
âĦ Ń
âĪ ±
âĮ ĵ
âĶ ĩ
âĶ ¢
â± ®
â² Ħ
ãĩ ¾
ãĪ ¬
ë¸ ¡
ìIJ ī
íĻ Ľ
ðĿķ ª
Æ ¹
Í ²
Ó ģ
Û ¼
ঠ«
áħ Ł
áī Ĩ
áį Ī
Ạĸ
á½ ī
âĶ ¸
â½ ©
ê ľ
êľ ¥
êµ ħ
ëĤ Ķ
ëĦ ł
ëĩ Ĺ
ëĻ Ŀ
ìļ ¯
ìļ ·
ìŁ Ľ
ì· IJ
íŁ ¬
íŁ ®
íŁ °
ï¦ Ĩ
ï¦ ±
ï² ŀ
ï³ ¤
ï³ ¥
ðIJĮ ¸
ðĿĶ ı
ðĿķ ®
ðĿĺ £
ঠĪ
âı ı
ãĦ ĸ
ê² ĩ
ëĸ ĺ
ëľ ·
ëŀ Ĵ
ë¡ ĵ
ë¢ ī
ë£ ĥ
ë§ ĭ
ë² ĭ
ìĤ ·
ìĪ ķ
ì Į¨
ìĵ »
ìĸ Ĭ
ìĻ ¬
ìĿ »
ì¦ ģ
ìµ ¤
ì· ĥ
íĢ ľ
íħ ī
íį ł
íı ħ
íij ±
íķ ķ
íĸ ł
íĿ ķ
Æ Ļ
Æ ļ
Æ ŀ
Ç ĥ
Ç Ĭ
Ç ľ
Ç ¤
Ç Ń
Ç ¹
È Ģ
È ģ
È ħ
È ī
È Ĺ
È Ł
È ¤
È ¥
È ¨
È µ
È º
È »
É Į
É ®
Ê ħ
Ê ¥
Ê ¨
Ë ĵ
Ë Ķ
Ë ł
Ë £
Ë ¸
Í ´
Ï Ĺ
Ï ĺ
Ï Ļ
Ï ļ
Ï Ŀ
Ï ¨
Ï ¬
Ï ¾
Ï ¿
Ñ ª
Ò Ģ
Ò ľ
Ò ¼
Ò ½
Ó Ĥ
Ó ħ
Ó ĩ
Ó į
Ó ĸ
Ó Ł
Ó «
Ó ±
Ô Ĩ
Ô ĩ
Ô º
Õ ĭ
Ö ī
Ø Ī
Ø Ĭ
Ø ½
Ø ¾
Ù ·
Ú Ĥ
Ú Ĭ
Ú ĸ
Ú Ĺ
Ú £
Ú «
Ú ¸
Û Ģ
Û į
Û ½
Ü ī
Ü ¤
Ý §
Ý ´
Þ ĥ
Þ ¤
Þ ¥
ß ļ
ß Ľ
ß ¤
àł į
àł ĵ
àł ³
à¡ ¢
ॠł
à§ ł
à§ º
ਠĬ
ਠIJ
ਠ®
ਠ¯
ਠ°
ਠ¸
ઠĨ
ઠ³
ઠµ
ઠ½
ଠĮ
ଠĺ
ଠ½
à® ĥ
à® ¸
à° Ĩ
à° ķ
à° ¦
ಠĨ
ಠĬ
ಠĮ
ಠIJ
ಠĽ
ಠ¤
ಠ¦
ಠª
ಠ²
ಠ¹
à´ Ĩ
à´ ı
à´ Ĺ
à´ «
à´ ¹
ൠº
ൠ½
à¶ ħ
à¶ Ĭ
à¶ Ķ
à¶ §
à¶ «
à¶ °
༠Ħ
༠ħ
༠Ĭ
འĻ
འ¡
འ§
à¿ Ģ
à¿ Ļ
áĢ Ŀ
áĢ §
áĢ ©
áĢ ¿
áģ µ
áĤ ģ
áĤ ½
áĥ Ĥ
áĥ ª
áĦ Ĭ
áĦ ¢
áħ ¦
áħ Ń
áĨ ®
áĨ ±
áĨ »
á ĩ
áĩ Ĥ
áĪ ħ
áĪ ī
áĪ Į
áĪ IJ
áĪ Ĵ
áĪ Ļ
áĪ ļ
áĪ ľ
áĪ ŀ
áĪ ©
áĪ ³
áĪ º
áĪ ½
áī ħ
áī ¢
áī ±
áī ´
áĬ ĥ
áĬ į
áĬ ĸ
áĬ ®
áĬ ¸
áĭ Ľ
áĭ Ŀ
áĭ ³
áĮ ģ
áĮ ħ
áĮ ¥
áĮ ¦
á Į¨
áį Ĭ
áį į
áį ķ
áį ĸ
áį ¢
áį ¤
áİ Ĵ
áİ ª
áı ģ
áı IJ
áı Ł
áIJ Ĥ
áIJ ĸ
áIJ Ŀ
áIJ ŀ
áIJ Ł
áIJ ł
áij ĸ
áĴ ĭ
áĴ į
áĴ ¡
áĵ «
áĶ ķ
áķ ĭ
áķ ij
áķ Ļ
áķ ļ
áķ Ľ
áķ ¤
áķ ¦
áķ ®
áķ ¼
áĸ ĵ
áĹ Ĺ
áĹ ¢
áĹ ¯
áĹ ·
áĺ Ħ
áĺ ij
ἠĤ
ἠĻ
áŀ į
áł Ĩ
áł ¡
áł ¦
áł ®
áł ¯
áł ²
áł ·
á¡ į
á¡ ŀ
á¡ ¤
á ¡´
á¡ µ
ᤠĵ
ᥠĸ
ᥠ°
ᨠ¦
ᨠ§
ᨠ¨
ᨠª
ᨠ¬
ᨠ¯
ᨠ³
ᨠµ
á© ĥ
ᬠķ
áŃ £
á ±
á± ļ
á² ł
á´ ĵ
á´ ¶
áµ Ĥ
áµ Į
áµ ¥
áµ ´
á¶ ĩ
ḠĪ
Ḡł
Ḡ§
Ḡ´
Ḡ¾
á¹ Ģ
á¹ ĸ
á¹ Ł
á¹ ł
á¹ «
á¹ ±
á¹ ·
á¹ ¿
ẠĦ
Ạį
Ạij
ẠĹ
á¼ ī
á¼ ĵ
á¼ Ń
á½ ĭ
á½ Ĵ
á½ ł
á½ £
á¾ Ħ
á¾ ı
á¾ ij
á¾ Ĺ
á¾ ¦
á¾ §
á¾ ¾
á¿ Ħ
á¿ ĵ
á¿ ¡
á¿ ¬
âģ ļ
âĤ Į
âĦ ģ
âĦ Ķ
âĦ £
âĦ §
âĦ ¯
âĦ °
âĦ ´
âħ ħ
âĨ ľ
âĨ «
âĨ Ń
âĨ ±
âĨ ¹
âĨ ½
âĩ ĩ
âĩ ľ
âĩ µ
âĪ ī
âĪ Ĭ
âĪ ĸ
âĪ ľ
âĪ ¾
âī Ģ
âī ĭ
âī Į
âī ĵ
âī ľ
âī ´
âī ¿
âĬ Ĭ
âĬ ĭ
âĬ Ķ
âĬ ĸ
âĬ £
âĬ ¦
âĭ İ
âĭ ª
âĭ ²
âĮ ¦
âĮ §
âį º
âİ Ī
âİ ¨
âİ ¬
âİ ³
âİ ¼
âİ ¾
âı Į
âı ļ
âı «
âı ¯
âı µ
âĴ ľ
âĴ Ŀ
âĴ «
âĵ Ħ
âĵ Ĭ
âĵ Ļ
âĵ ©
âĶ ij
âĶ Ļ
âĶ ļ
âĶ ¥
âķ ħ
âķ ī
âķ į
âķ ı
âķ ŀ
âĸ ļ
âĸ ¯
âĹ ĥ
âĹ ļ
âĹ ¬
âĹ ´
âĺ Ī
âĺ ¤
âĺ ¥
âĺ §
âĺ ¬
âĻ ģ
âĻ ±
âļ ĥ
âļ Ħ
âļ ħ
âļ ı
âļ ļ
âļ ŀ
âļ Ł
âļ ±
âļ ²
âľ Ģ
âľ Ł
âľ ¢
âĿ µ
⣠¡
⣠¦
⣠§
⣠³
⣠¾
⣠¿
âł ĩ
⤠Ħ
⤠º
⥠Ĥ
⥠¹
â§ ī
â§ ¼
â§ ½
⨠į
⬠Ĭ
⬠Ł
âŃ ŀ
â® ŀ
â® ³
⯠Ī
⯠ij
â± ł
â± ±
â² Ń
â´ ¹
âµ ķ
⸠¾
â º«
â¼ Ĩ
â¼ ł
â½ Ł
â½ ¼
â¾ Ľ
â¾ §
â¿ ĥ
â¿ »
ãĤ ķ
ãĤ Ł
ãĦ Ľ
ãĦ ¡
ãĦ ¶
ãĦ º
ãħ Ĵ
ãħ Ł
ãĨ Ģ
ãĩ »
ãĪ ij
ãĪ Ń
ãĪ ®
ãĪ ³
ãĪ ¹
ãī ¥
ãī ¦
ãī ¹
ãī ¿
ãĬ ŀ
ãĬ ¨
ãĭ ij
ãĭ ¥
ãĭ ´
ãĭ º
ãİ Ħ
ãİ ķ
ãİ ¯
ãı Ĥ
ãı Ī
ãı ĵ
ãı ĸ
ãı ±
ãIJ ±
ãŁ ģ
ã ¢
㢠¨
ã ¨
㨠³
ã« ª
ã« ´
ã¶ ³
㺠¾
ä Ģ
äĢ Ģ
ä ĭ
äĭ Į
ä ĮĢ
äIJ Ģ
ä łĢ
ä ł
äł ¼
ä §
ä§ ŀ
ä¨ °
ä¨ º
ä ´Ģ
ä ·
ä· ħ
ä ·¸
ê Ĥ
êĤ «
ê Į
êĮ ¼
ê į
êį ²
êĴ µ
ê ĵ
êĵ ½
êĻ Ń
êĿ Ľ
êĿ ¥
ê ŀ
êŀ Ĭ
ê¦ Ĩ
ê¦ ĩ
ê¦ Ł
ê¦ ¨
ê§ Ī
ê ©
ê© Ł
êª ĭ
êª ij
êª ķ
êª Ĺ
êª ľ
êª ®
êª ±
êª »
êª ¼
ê« Ģ
ê« Ŀ
ê° ĥ
ê° ĺ
ê± ľ
ê² ĵ
ê² ļ
ê³ Ļ
ê³ ¾
ê´ Ĺ
ê´ Ļ
êµ Ľ
ê¶ ĥ
ê¶ ķ
ê¶ ¨
ê¸ ©
ê¸ ¿
ê ¹Ħ
ê¹ Ĩ
ê¹ ī
ê¹ ĵ
ê¹ ¢
ê¹ £
ê¹ ¸
êº ³
ê¿ ı
ê¿ ķ
ê¿ §
ëĢ ©
ëģ ħ
ëĥ µ
ëĦ ĸ
ëĦ Ĺ
ëĦ ¢
ëħ Ĥ
ëĨ IJ
ëĩ ľ
ëĪ ĭ
ëĪ ļ
ëī į
ëī ¨
ëĬ ļ
ëĬ ¡
ëĭ ľ
ëĭ ª
ëĮ ĺ
ëĮ ¤
ëĮ ¸
ëİ Ł
ëı ¨
ëIJ Ħ
ëIJ ı
ëIJ ´
ëIJ ¸
ëij ģ
ëij ¿
ëĴ ¨
ëĵ ·
ëĶ ®
ëĶ ²
ëķ §
ëĸ Ķ
ëĸ ª
ëĺ Ń
ëļ Ģ
ëļ ł
ëĽ Ķ
ëĽ ©
ëľ ħ
ëŀ ķ
ëŀ °
ëŁ IJ
ëł ¡
ë¡ ŀ
ë¡ £
ë¡ µ
ë£ Ħ
ë£ į
ë¤ ³
ë¦ į
ë¦ ı
ë¦ ³
ë§ Ħ
ë§ Ĩ
ë§ į
ë§ ľ
ë§ «
ë§ »
ë¨ ®
ë© Ĥ
ë© Ń
ëª ´
ë¬ ľ
ë¬ ł
ë¬ «
ë¬ ¾
ëŃ ¬
ë® ĺ
ë® ¹
ë¯ ķ
ë¯ ľ
ë° ¨
ë° ª
ë± Ķ
ë² ĺ
ë² Ľ
ë² ±
ë² ´
ë´ ½
ëµ ¤
ëµ ¨
ë· Ĺ
ë· ĺ
ë¸ ĵ
ë¸ ľ
ë¹ ª
ëº ĥ
ëº ĺ
ëº µ
ë» ´
ë¼ IJ
ë¾ Ķ
ìģ Ń
ìĤ ł
ìĤ ®
ìĥ ı
ìĥ Ļ
ìĦ º
ìħ ¢
ìĨ Ģ
ìĨ ħ
ìĨ ¤
ìĨ ¦
ìĨ ¬
ìĩ ±
ìĪ µ
ìĭ ¨
ìĭ ´
ìĮ °
ìį ľ
ìİ Ĺ
ìİ ĺ
ìİ ¼
ìij ī
ìij Ŀ
ìij »
ìĴ Ķ
ìĴ ¯
ìĵ ©
ìķ IJ
ìķ ĸ
ìĸ ł
ìĸ ¾
ìĹ ĥ
ìĹ Ĺ
ìĹ ľ
ìĹ ¨
ìĺ Ĥ
ìĺ Ħ
ìĺ ı
ìĺ ¾
ìĺ ¿
ìľ §
ìĿ IJ
ìĿ ĸ
ìĿ ·
ìŀ į
ìŀ ı
ìŀ ¨
ìŀ ª
ìŀ ³
ìł ¡
ìł ´
ìł ¹
ì¡ Ģ
ì¡ ª
ì¡ µ
ì¢ IJ
ì¢ ¨
ì£ Į
ì£ Ļ
ì£ ³
ì¦ ij
ì§ ¥
ì§ ´
ì§ ¾
ì¨ ĵ
ì¨ ķ
ì© °
ì© »
ì© ¼
ìª Ĺ
ì¬ Ķ
ì¬ ĺ
ì® ®
ì¯ ķ
ì¯ ĺ
ì° İ
ì° ¯
ì± ĥ
ì± µ
ì² §
ì² ®
ì² ¯
ì³ ¬
ì´ ĭ
ì´ ¢
ìµ ¥
ì¶ £
ì¸ Ī
ì¸ Ļ
ìº ¤
ìº Ń
ì» ½
ì¼ Ļ
ì½ ¬
ì¾ Ģ
ì¿ ħ
ì¿ ½
íĢ ħ
íģ ¦
íĤ ħ
íĥ ¶
íĥ ¹
íĦ Ķ
íħ £
íĨ Ħ
íĨ §
íĨ ¹
íĩ ¼
íī ¤
íĬ ½
íĭ Ĥ
íĭ ij
íį Ī
íį Ļ
íį ¿
íİ ¶
íIJ Ŀ
íĴ ľ
íĵ Ŀ
íĵ ª
íĵ ±
íĵ ·
íĵ ¼
íĶ Ļ
íĶ ł
íķ ļ
íķ Ľ
íķ ŀ
íķ Ł
íķ §
íķ ¶
íĸ Ĭ
íĸ ĭ
íĸ į
íĸ Ķ
íĸ ĺ
íĸ ¡
íĸ ¬
íĹ £
íĹ ¿
íĺ ĸ
íĺ Ń
íļ °
íĽ į
íĽ ½
íĿ Ł
íĿ Ń
íĿ ´
íŀ ľ
ï¤ ī
ï¤ Ń
ï¤ ²
ï¤ µ
ï¤ ¼
ï¥ Ģ
ï¥ ij
ï¥ Ĵ
ï¥ ķ
ï¥ ĺ
ï¥ Ļ
ï¥ «
ï¥ ¬
ï¥ °
ï ¥¿
ï¦ ĭ
ï¦ ı
ï¦ Ķ
ï¦ ĸ
ï¦ ĺ
ï¦ Ľ
ï¦ ł
ï¦ ®
ï¦ ¯
ï¦ º
ï¦ »
ï¦ ¾
ï§ Ĩ
ï§ ĸ
ï§ Ľ
ï§ ŀ
ï§ Ł
ï§ §
ï§ ³
ï§ º
ï§ ½
ï¨ ĥ
ï¨ ļ
ï¨ ¢
ï© Ł
ï¬ ¤
ï¬ ¬
ï¬ ¼
ïŃ Ĵ
ïŃ ķ
ïŃ Ľ
ïŃ Ŀ
ïŃ ŀ
ïŃ Ł
ïŃ ¤
ïŃ §
ïŃ ¨
ïŃ ®
ïŃ °
ïŃ ±
ïŃ ·
ïŃ ¹
ïŃ »
ï® Ģ
ï® ĥ
ï® Ħ
ï® ħ
ï® į
ï® Ĵ
ï® ĵ
ï® ķ
ï® ¦
ï® ®
ï® °
ï¯ ĵ
ï¯ ľ
ï¯ ©
ï¯ ª
ï¯ ¬
ï¯ Ń
ï¯ ®
ï¯ ·
ï¯ ¹
ï¯ »
ï¯ ¼
ï° ĥ
ï° Į
ï° IJ
ï° ĺ
ï° Ļ
ï° ľ
ï° ŀ
ï° ¢
ï° ®
ï° °
ï° ¼
ï° ¿
ï± Ģ
ï± ģ
ï± Ī
ï± ĭ
ï± ı
ï± Ń
ï² Ģ
ï² ĩ
ï² Ī
ï² ĭ
ï² İ
ï² Ĵ
ï² ľ
ï² ł
ï² ¬
ï² »
ï³ ĩ
ï³ Ķ
ï³ £
ï³ «
ï´ ĺ
ï´ °
ï´ ½
ï ¶
ï¶ °
ï¸ ĸ
ï¸ ´
ï¸ ¹
ï¹ į
ï¹ Ĺ
ï¹ ¢
ï¹ ¤
ï¹ ©
ï¹ ±
ï¾ °
ï¿ Ĥ
ï¿ ®
ðIJĮ °
ðIJĮ ¹
ðIJĮ º
ðIJĮ ½
ðIJį Ĥ
ðIJį ĥ
ðIJį Ħ
ðIJ İ
ðIJİ ¹
ðIJ¤ Ĥ
ðIJ¤ į
ðIJ¤ ı
ðIJ¤ ĵ
ðIJŃ ī
ðIJŃ į
ðIJ° ĩ
ðIJ° °
ðij Ĥ
ðijĤ Ħ
ðij ĺ
ðijĺ ģ
ðĴ Ģ
ðĴĢ ¸
ðĴ ģ
ðĴģ º
ðĴ Ħ
ðĴĦ ·
ðĴ Ĭ
ðĴĬ ij
ðĴ ĭ
ðĴĭ Ĺ
ð ĴĮ
ðĴĮ ¨
ðĵĥ ¢
ðĵĥ °
ðĸ ł
ðĸł ļ
ðĿĦ ĥ
ðĿĦ ħ
ðĿĦ ķ
ðĿĦ Ļ
ðĿĦ ±
ðĿĦ ´
ðĿĦ ¹
ðĿħ İ
ðĿħ ª
ðĿĨ £
ðĿĨ ³
ðĿĨ ¹
ðĿĩ Ĭ
ðĿĩ Ĺ
ðĿĩ ļ
ðĿĩ ľ
ðĿĩ ł
ðĿIJ ī
ðĿIJ ĸ
ðĿIJ ĺ
ðĿIJ £
ðĿIJ ±
ðĿij Ĭ
ðĿij Ń
ðĿij ¼
ðĿij ½
ðĿĴ °
ðĿĴ ·
ðĿĴ ¿
ðĿĵ ģ
ðĿĵ ĭ
ðĿĵ İ
ðĿĵ Ĵ
ðĿ ĵĺ
ðĿĵ ¢
ðĿĵ ¦
ðĿĵ «
ðĿĵ ¿
ðĿĶ İ
ðĿĶ ±
ðĿĶ ´
ðĿĶ ·
ðĿĶ ¸
ðĿĶ ½
ðĿķ Ĥ
ðĿķ ĥ
ðĿķ ĭ
ðĿķ ı
ðĿķ IJ
ðĿķ ¥
ðĿķ ´
ðĿķ º
ðĿĸ IJ
ðĿĸ Ľ
ðĿĸ Ŀ
ðĿĸ ŀ
ðĿĹ ©
ðĿĹ ³
ðĿĹ ½
ðĿĺ Ĭ
ðĿĺ ĭ
ðĿĺ Ķ
ðĿĺ ±
ðĿĺ ´
ðĿĺ ¿
ðĿĻ Ĵ
ðĿĻ Ŀ
ðĿĻ Ł
ðĿĻ ¬
ðĿĻ Ń
ðĿĻ »
ðĿĻ ¾
ðĿļ Ī
ðĿļ ĭ
ðĿļ ij
ðĿļ Ł
ðĿļ ł
ðĿļ £
ðĿĽ ½
ðĿľ Ĥ
ðĿľ Ķ
ðĿľ Ļ
ðŁ Ģ
ðŁĢ Ħ
ðŁĦ ²
ðŁĦ ¶
ðŁħ IJ
ðŁħ ĸ
ðŁħ ļ
ðŁħ Ľ
ðŁħ ¦
ðŁħ ¶
ðŁħ »
ðŁħ ¼
ðŁĨ ĥ
ðŁĨ Ĩ
ðŁĨ İ
ðŁĪ ¯
ðŁĪ ²
ðŁĪ ¹
ðŁĮ ĩ
ðŁĮ ĵ
ðŁį ĺ
ðŁİ ij
ðŁİ ¿
ðŁı ı
ðŁı Ĵ
ðŁı ©
ðŁı ¯
ðŁIJ Ģ
ðŁij Ŀ
ðŁĴ ¹
ðŁĴ º
ðŁĵ Ł
ðŁĵ ª
ðŁĵ ¼
ðŁĶ Ģ
ðŁĶ Ĥ
ðŁĶ ĥ
ðŁĶ ĩ
ðŁĶ ĵ
ðŁĶ ¢
ðŁĶ ¤
ðŁĶ ©
ðŁķ ĸ
ðŁķ ļ
ðŁķ ľ
ðŁķ Ŀ
ðŁķ ŀ
ðŁķ ł
ðŁķ ¢
ðŁķ ³
ðŁĸ ĩ
ðŁĸ ij
ðŁĸ ¶
ðŁĹ ģ
Ñ ¨
Ú İ
á¡ Į
Ḡ°
ẠĢ
á¼ ®
á½ Ŀ
âĦ ¬
âļ §
⼠¤
ã³ ¬
êĻ ĭ
ê¸ ij
ëĶ ī
ëĹ į
ë¡ ij
ë¯ ij
ë» ħ
ë¼ Ŀ
ìĦ IJ
ìī ¡
ìĭ ²
ìı ±
ìĹ ¤
ìĿ ©
ìĿ ¿
ìŁ Ļ
ìł °
ì¥ ī
íĬ Ń
íķ ®
ï® ı
ðŁħ ±
ðŁĨ Ĵ
ðŁķ ĭ
É ĺ
Ê ĵ
Õ ĥ
à´ ´
འħ
áĨ º
áĪ Ĭ
áĪ ¨
áĪ ¾
áī IJ
áĮ ĥ
áĮ ½
áĶ Ń
áł Ĥ
áł ¬
ᨠ¸
á© ĭ
á¶ ı
á¾ Ķ
á¿ IJ
á¿ ļ
âĻ Ļ
âļ Ĥ
âļ Ĺ
â¡ ¢
⤠¦
ëĸ °
ë¤ Ĥ
ë§ ł
ë± ĭ
ë± IJ
ìĽ ¢
ìľ ¾
ì³ ħ
ì» ģ
íģ »
íĥ Ļ
íĵ ĸ
íĵ Ń
íķ ±
íĽ ľ
ï¤ ħ
ï¤ Ĩ
ï¦ ĥ
ï§ ©
ï¨ Ĥ
ðIJ¤ Ķ
ðIJŃ ĵ
ðIJ° ¼
ðĿĵ ŀ
ðĿĵ °
ðĿĻ ľ
ðĿļ ģ
ðŁħ ¢
ðŁı ĩ
È ²
Ê ¶
Ô Ī
Ô ij
Ý ĵ
Ý ¥
ठij
ॠ±
ଠī
à° ³
à° µ
ಠŁ
áĢ ı
áģ ¼
áī ¨
áĬ Ĵ
áĭ ©
áĮ Ħ
áĮ Ķ
áIJ §
á ĴĮ
áĶ ħ
áĶ Ĭ
áł Ħ
ᨠģ
Ḡĥ
Ḡ»
âĶ ŀ
âĺ µ
âļ £
â² ¢
ãĪ ª
ä¶ µ
ê² Ļ
ê² ´
ê³ Ĥ
ë¡ ¼
ìĨ Ĭ
ì¼ ĩ
íĭ į
íĵ ¬
íĵ ®
íĵ ¶
íĵ »
ï¤ ¦
ï¥ ł
ï¥ ±
ïŃ ²
ðIJŃ Ĭ
ðIJ ±ħ
ðĸ ¥
ðĸ¥ ¨
ðĿij ³
ðĿĵ ķ
ðĿĵ ¬
ðĿĵ ¹
ðĿĵ ¾
ðĿĶ ĵ
ðĿķ į
ðĿķ ¡
ðĿķ ±
ðĿĸ ĸ
ðĿĺ ı
ðĿĺ IJ
ðĿĺ ļ
ðĿĻ ®
ðĿĻ °
ðĿĻ ¸
ðĿĻ º
ðĿĻ ¼
ðĿĻ ½
ðĿĻ ¿
ðĿļ Ħ
ðĿļ ı
ðŁħ ħ
ðŁħ ĵ
Æ Ī
àł Į
áĻ ³
á ļĮ
ἠħ
ἠIJ
ᤠĬ
ḠĬ
âĶ ½
âķ Ĭ
⼠ĩ
⼠ı
âĿ ª
âĿ «
⣠°
ãĦ į
ãĦ ĵ
ãĦ §
ãħ ĸ
ãī «
ê¦ Ķ
ï± Ĭ
ຠĤ
áħ £
ᥠĶ
ᥠ¤
âĨ ¤
âĨ ·
âĩ ŀ
âĸ ¤
âŀ ¶
ãĪ ¼
ï¨ ·
ðĵı §
âĶ ²
âĢ ´
âĴ Ł
âĴ ¡
â° Ĥ
â° į
â° İ
â° IJ
â° ij
â° Ł
â° ł
â° ¡
â¼ Ń
ãĬ ¥
âĴ ł
â½ º
ãĩ º
ãĩ ½
ï¨ Ĭ
áķ ·
âį ¨
⺠Ł
â½ Ĺ
================================================
FILE: src/backend/bisheng_langchain/linsight/resource/model_tokenizer/tokenizer.json
================================================
[File too large to display: 10.9 MB]
================================================
FILE: src/backend/bisheng_langchain/linsight/resource/model_tokenizer/tokenizer_config.json
================================================
{
"add_bos_token": false,
"add_prefix_space": false,
"added_tokens_decoder": {
"151643": {
"content": "<|endoftext|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151644": {
"content": "<|im_start|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151645": {
"content": "<|im_end|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151646": {
"content": "<|object_ref_start|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151647": {
"content": "<|object_ref_end|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151648": {
"content": "<|box_start|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151649": {
"content": "<|box_end|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151650": {
"content": "<|quad_start|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151651": {
"content": "<|quad_end|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151652": {
"content": "<|vision_start|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151653": {
"content": "<|vision_end|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151654": {
"content": "<|vision_pad|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151655": {
"content": "<|image_pad|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151656": {
"content": "<|video_pad|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151657": {
"content": "",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151658": {
"content": "",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151659": {
"content": "<|fim_prefix|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151660": {
"content": "<|fim_middle|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151661": {
"content": "<|fim_suffix|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151662": {
"content": "<|fim_pad|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151663": {
"content": "<|repo_name|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151664": {
"content": "<|file_sep|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151665": {
"content": "",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151666": {
"content": "",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151667": {
"content": "",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151668": {
"content": "",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
}
},
"additional_special_tokens": [
"<|im_start|>",
"<|im_end|>",
"<|object_ref_start|>",
"<|object_ref_end|>",
"<|box_start|>",
"<|box_end|>",
"<|quad_start|>",
"<|quad_end|>",
"<|vision_start|>",
"<|vision_end|>",
"<|vision_pad|>",
"<|image_pad|>",
"<|video_pad|>"
],
"bos_token": null,
"chat_template": "{%- if tools %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0].role == 'system' %}\n {{- messages[0].content + '\\n\\n' }}\n {%- endif %}\n {{- \"# Tools\\n\\nYou may call one or more functions to assist with the user query.\\n\\nYou are provided with function signatures within XML tags:\\n\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n\\n\\nFor each function call, return a json object with function name and arguments within XML tags:\\n\\n{\\\"name\\\": , \\\"arguments\\\": }\\n<|im_end|>\\n\" }}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {{- '<|im_start|>system\\n' + messages[0].content + '<|im_end|>\\n' }}\n {%- endif %}\n{%- endif %}\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\n{%- for message in messages[::-1] %}\n {%- set index = (messages|length - 1) - loop.index0 %}\n {%- if ns.multi_step_tool and message.role == \"user\" and message.content is string and not(message.content.startswith('') and message.content.endswith('')) %}\n {%- set ns.multi_step_tool = false %}\n {%- set ns.last_query_index = index %}\n {%- endif %}\n{%- endfor %}\n{%- for message in messages %}\n {%- if message.content is string %}\n {%- set content = message.content %}\n {%- else %}\n {%- set content = '' %}\n {%- endif %}\n {%- if (message.role == \"user\") or (message.role == \"system\" and not loop.first) %}\n {{- '<|im_start|>' + message.role + '\\n' + content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {%- set reasoning_content = '' %}\n {%- if message.reasoning_content is string %}\n {%- set reasoning_content = message.reasoning_content %}\n {%- else %}\n {%- if '' in content %}\n {%- set reasoning_content = content.split('')[0].rstrip('\\n').split('')[-1].lstrip('\\n') %}\n {%- set content = content.split('')[-1].lstrip('\\n') %}\n {%- endif %}\n {%- endif %}\n {%- if loop.index0 > ns.last_query_index %}\n {%- if loop.last or (not loop.last and reasoning_content) %}\n {{- '<|im_start|>' + message.role + '\\n\\n' + reasoning_content.strip('\\n') + '\\n\\n\\n' + content.lstrip('\\n') }}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- if message.tool_calls %}\n {%- for tool_call in message.tool_calls %}\n {%- if (loop.first and content) or (not loop.first) %}\n {{- '\\n' }}\n {%- endif %}\n {%- if tool_call.function %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {{- '\\n{\"name\": \"' }}\n {{- tool_call.name }}\n {{- '\", \"arguments\": ' }}\n {%- if tool_call.arguments is string %}\n {{- tool_call.arguments }}\n {%- else %}\n {{- tool_call.arguments | tojson }}\n {%- endif %}\n {{- '}\\n' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.first or (messages[loop.index0 - 1].role != \"tool\") %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n\\n' }}\n {{- content }}\n {{- '\\n' }}\n {%- if loop.last or (messages[loop.index0 + 1].role != \"tool\") %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n {%- if enable_thinking is defined and enable_thinking is false %}\n {{- '\\n\\n\\n\\n' }}\n {%- endif %}\n{%- endif %}",
"clean_up_tokenization_spaces": false,
"eos_token": "<|im_end|>",
"errors": "replace",
"model_max_length": 131072,
"pad_token": "<|endoftext|>",
"split_special_tokens": false,
"tokenizer_class": "Qwen2Tokenizer",
"unk_token": null
}
================================================
FILE: src/backend/bisheng_langchain/linsight/resource/model_tokenizer/vocab.json
================================================
{"!":0,"\"":1,"#":2,"$":3,"%":4,"&":5,"'":6,"(":7,")":8,"*":9,"+":10,",":11,"-":12,".":13,"/":14,"0":15,"1":16,"2":17,"3":18,"4":19,"5":20,"6":21,"7":22,"8":23,"9":24,":":25,";":26,"<":27,"=":28,">":29,"?":30,"@":31,"A":32,"B":33,"C":34,"D":35,"E":36,"F":37,"G":38,"H":39,"I":40,"J":41,"K":42,"L":43,"M":44,"N":45,"O":46,"P":47,"Q":48,"R":49,"S":50,"T":51,"U":52,"V":53,"W":54,"X":55,"Y":56,"Z":57,"[":58,"\\":59,"]":60,"^":61,"_":62,"`":63,"a":64,"b":65,"c":66,"d":67,"e":68,"f":69,"g":70,"h":71,"i":72,"j":73,"k":74,"l":75,"m":76,"n":77,"o":78,"p":79,"q":80,"r":81,"s":82,"t":83,"u":84,"v":85,"w":86,"x":87,"y":88,"z":89,"{":90,"|":91,"}":92,"~":93,"¡":94,"¢":95,"£":96,"¤":97,"¥":98,"¦":99,"§":100,"¨":101,"©":102,"ª":103,"«":104,"¬":105,"®":106,"¯":107,"°":108,"±":109,"²":110,"³":111,"´":112,"µ":113,"¶":114,"·":115,"¸":116,"¹":117,"º":118,"»":119,"¼":120,"½":121,"¾":122,"¿":123,"À":124,"Á":125,"Â":126,"Ã":127,"Ä":128,"Å":129,"Æ":130,"Ç":131,"È":132,"É":133,"Ê":134,"Ë":135,"Ì":136,"Í":137,"Î":138,"Ï":139,"Ð":140,"Ñ":141,"Ò":142,"Ó":143,"Ô":144,"Õ":145,"Ö":146,"×":147,"Ø":148,"Ù":149,"Ú":150,"Û":151,"Ü":152,"Ý":153,"Þ":154,"ß":155,"à":156,"á":157,"â":158,"ã":159,"ä":160,"å":161,"æ":162,"ç":163,"è":164,"é":165,"ê":166,"ë":167,"ì":168,"í":169,"î":170,"ï":171,"ð":172,"ñ":173,"ò":174,"ó":175,"ô":176,"õ":177,"ö":178,"÷":179,"ø":180,"ù":181,"ú":182,"û":183,"ü":184,"ý":185,"þ":186,"ÿ":187,"Ā":188,"ā":189,"Ă":190,"ă":191,"Ą":192,"ą":193,"Ć":194,"ć":195,"Ĉ":196,"ĉ":197,"Ċ":198,"ċ":199,"Č":200,"č":201,"Ď":202,"ď":203,"Đ":204,"đ":205,"Ē":206,"ē":207,"Ĕ":208,"ĕ":209,"Ė":210,"ė":211,"Ę":212,"ę":213,"Ě":214,"ě":215,"Ĝ":216,"ĝ":217,"Ğ":218,"ğ":219,"Ġ":220,"ġ":221,"Ģ":222,"ģ":223,"Ĥ":224,"ĥ":225,"Ħ":226,"ħ":227,"Ĩ":228,"ĩ":229,"Ī":230,"ī":231,"Ĭ":232,"ĭ":233,"Į":234,"į":235,"İ":236,"ı":237,"IJ":238,"ij":239,"Ĵ":240,"ĵ":241,"Ķ":242,"ķ":243,"ĸ":244,"Ĺ":245,"ĺ":246,"Ļ":247,"ļ":248,"Ľ":249,"ľ":250,"Ŀ":251,"ŀ":252,"Ł":253,"ł":254,"Ń":255,"ĠĠ":256,"ĠĠĠĠ":257,"in":258,"Ġt":259,"ĠĠĠĠĠĠĠĠ":260,"er":261,"ĠĠĠ":262,"on":263,"Ġa":264,"re":265,"at":266,"st":267,"en":268,"or":269,"Ġth":270,"ĊĊ":271,"Ġc":272,"le":273,"Ġs":274,"it":275,"an":276,"ar":277,"al":278,"Ġthe":279,";Ċ":280,"Ġp":281,"Ġf":282,"ou":283,"Ġ=":284,"is":285,"ĠĠĠĠĠĠĠ":286,"ing":287,"es":288,"Ġw":289,"ion":290,"ed":291,"ic":292,"Ġb":293,"Ġd":294,"et":295,"Ġm":296,"Ġo":297,"ĉĉ":298,"ro":299,"as":300,"el":301,"ct":302,"nd":303,"Ġin":304,"Ġh":305,"ent":306,"id":307,"Ġn":308,"am":309,"ĠĠĠĠĠĠĠĠĠĠĠ":310,"Ġto":311,"Ġre":312,"--":313,"Ġ{":314,"Ġof":315,"om":316,");Ċ":317,"im":318,"čĊ":319,"Ġ(":320,"il":321,"//":322,"Ġand":323,"ur":324,"se":325,"Ġl":326,"ex":327,"ĠS":328,"ad":329,"Ġ\"":330,"ch":331,"ut":332,"if":333,"**":334,"Ġ}":335,"em":336,"ol":337,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":338,"th":339,")Ċ":340,"Ġ{Ċ":341,"Ġg":342,"ig":343,"iv":344,",Ċ":345,"ce":346,"od":347,"Ġv":348,"ate":349,"ĠT":350,"ag":351,"ay":352,"Ġ*":353,"ot":354,"us":355,"ĠC":356,"Ġst":357,"ĠI":358,"un":359,"ul":360,"ue":361,"ĠA":362,"ow":363,"Ġ'":364,"ew":365,"Ġ<":366,"ation":367,"()":368,"Ġfor":369,"ab":370,"ort":371,"um":372,"ame":373,"Ġis":374,"pe":375,"tr":376,"ck":377,"âĢ":378,"Ġy":379,"ist":380,"----":381,".ĊĊ":382,"he":383,"Ġe":384,"lo":385,"ĠM":386,"Ġbe":387,"ers":388,"Ġon":389,"Ġcon":390,"ap":391,"ub":392,"ĠP":393,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":394,"ass":395,"int":396,">Ċ":397,"ly":398,"urn":399,"Ġ$":400,";ĊĊ":401,"av":402,"port":403,"ir":404,"->":405,"nt":406,"ction":407,"end":408,"Ġde":409,"ith":410,"out":411,"turn":412,"our":413,"ĠĠĠĠĠ":414,"lic":415,"res":416,"pt":417,"==":418,"Ġthis":419,"Ġwh":420,"Ġif":421,"ĠD":422,"ver":423,"age":424,"ĠB":425,"ht":426,"ext":427,"=\"":428,"Ġthat":429,"****":430,"ĠR":431,"Ġit":432,"ess":433,"ĠF":434,"Ġr":435,"os":436,"and":437,"Ġas":438,"ect":439,"ke":440,"rom":441,"Ġ//":442,"con":443,"ĠL":444,"(\"":445,"qu":446,"lass":447,"Ġwith":448,"iz":449,"de":450,"ĠN":451,"Ġal":452,"op":453,"up":454,"get":455,"Ġ}Ċ":456,"ile":457,"Ġan":458,"ata":459,"ore":460,"ri":461,"Ġpro":462,";čĊ":463,"ĉĉĉĉ":464,"ter":465,"ain":466,"ĠW":467,"ĠE":468,"Ġcom":469,"Ġreturn":470,"art":471,"ĠH":472,"ack":473,"import":474,"ublic":475,"Ġor":476,"est":477,"ment":478,"ĠG":479,"able":480,"Ġ-":481,"ine":482,"ill":483,"ind":484,"ere":485,"::":486,"ity":487,"Ġ+":488,"Ġtr":489,"elf":490,"ight":491,"('":492,"orm":493,"ult":494,"str":495,"..":496,"\",":497,"Ġyou":498,"ype":499,"pl":500,"Ġnew":501,"Ġj":502,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":503,"Ġfrom":504,"Ġex":505,"ĠO":506,"ld":507,"Ġ[":508,"oc":509,":Ċ":510,"Ġse":511,"Ġle":512,"--------":513,".s":514,"{Ċ":515,"',":516,"ant":517,"Ġat":518,"ase":519,".c":520,"Ġch":521,"":522,"ave":523,"ang":524,"Ġare":525,"Ġint":526,"âĢĻ":527,"_t":528,"ert":529,"ial":530,"act":531,"}Ċ":532,"ive":533,"ode":534,"ost":535,"Ġclass":536,"Ġnot":537,"og":538,"ord":539,"alue":540,"all":541,"ff":542,"();Ċ":543,"ont":544,"ime":545,"are":546,"ĠU":547,"Ġpr":548,"Ġ:":549,"ies":550,"ize":551,"ure":552,"Ġby":553,"ire":554,"Ġ}ĊĊ":555,".p":556,"Ġsh":557,"ice":558,"ast":559,"ption":560,"tring":561,"ok":562,"__":563,"cl":564,"##":565,"Ġhe":566,"ard":567,").":568,"Ġ@":569,"iew":570,"ĉĉĉ":571,"Ġwas":572,"ip":573,"this":574,"Ġu":575,"ĠThe":576,"ide":577,"ace":578,"ib":579,"ac":580,"rou":581,"Ġwe":582,"ject":583,"Ġpublic":584,"ak":585,"ve":586,"ath":587,"oid":588,"Ġ=>":589,"ust":590,"que":591,"Ġres":592,"))":593,"'s":594,"Ġk":595,"ans":596,"yst":597,"unction":598,"********":599,"Ġi":600,"Ġus":601,"pp":602,"one":603,"ail":604,"====":605,"name":606,"Ġstr":607,"Ġ/":608,"Ġ&":609,"ach":610,"div":611,"ystem":612,"ell":613,"Ġhave":614,"err":615,"ould":616,"ull":617,"pon":618,"ĠJ":619,"_p":620,"Ġ==":621,"ign":622,"St":623,".Ċ":624,"Ġpl":625,");ĊĊ":626,"form":627,"put":628,"ount":629,"}ĊĊ":630,"dd":631,"ite":632,"Ġget":633,"rr":634,"ome":635,"ĠâĢ":636,"aram":637,"cc":638,"Ġ*/":639,"ER":640,"In":641,"les":642,"_s":643,"ong":644,"ie":645,"Ġcan":646,"ĠV":647,"erv":648,"pr":649,"Ġun":650,"row":651,"ber":652,"Ġdo":653,"ll":654,"Ġel":655,"Ġself":656,"ated":657,"ary":658,"Ġ.":659,"']":660,"ud":661,"Ġen":662,"ĠTh":663,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":664,"te":665,"_c":666,"uct":667,"Ġab":668,"ork":669,".get":670,"Ġ#":671,"aw":672,"ress":673,"ob":674,"Name":675,"app":676,"['":677,"Ġall":678,"ory":679,"ition":680,"ance":681,"ear":682,"Ġcont":683,"vent":684,"ia":685,"Ġwill":686,"IN":687,"ĠĠĠĠĠĠĠĠĠ":688,"return":689,"Ġ":690,"data":691,")ĊĊ":692,"Re":693,"ple":694,"ild":695,"ther":696,"Ġyour":697,"\"Ċ":698,"($":699,"Ġout":700,"),":701,"Ġhas":702,"String":703,"so":704,"Ġup":705,"ax":706,"Ġdef":707,"Ġbo":708,"ge":709,"alse":710,"ON":711,"per":712,"ich":713,"Ġbut":714,"ĠĊ":715,"Ġ_":716,"_m":717,"add":718,"quest":719,"odel":720,"self":721,"ery":722,"ft":723,"ens":724,"////":725,"ake":726,".C":727,"Ġgo":728,"Ġfunction":729,"ĠK":730,"ivate":731,"Ġim":732,"Ġconst":733,".t":734,"Ġ*/Ċ":735,");čĊ":736,"Ġvoid":737,"Ġset":738,"ĠSystem":739,"cri":740,"()Ċ":741,"li":742,"ĉif":743,".m":744,"ally":745,"set":746,"ep":747,"âĢĻs":748,"bo":749,"def":750,"',Ċ":751,"Ġme":752,"Ġ!":753,"atch":754,"\">":755,"\",Ċ":756,"ec":757,"ĠIn":758,"ph":759,"Ġ|":760,"_f":761,"Ġvar":762,"ence":763,"Id":764,"ree":765,"ink":766,"lect":767,"ug":768,"eth":769,"Ġelse":770,"----------------":771,"cont":772,"Ġso":773,"atic":774,"Ġlo":775,"pro":776,"ton":777,"ss":778,"own":779,"abel":780,"oint":781,"ous":782,"eld":783,"ST":784,"The":785,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":786,"RE":787,"\":":788,"olor":789,"tp":790,"eg":791,"key":792,"ude":793,"ĠSt":794,"ound":795,"Ġar":796,"\");Ċ":797,"ener":798,"ser":799,"bject":800,"essage":801,"fer":802,"Ġmore":803,"ations":804,"ents":805,"Ġhis":806,"Ġthey":807,".S":808,"ĠY":809,"use":810,"ne":811,"ish":812,"old":813,"_d":814,"io":815,"ield":816,"Ġper":817,"Cont":818,"ings":819,"####":820,"Ġdata":821,"Ġsa":822,"ef":823,"fo":824,"Ġone":825,"eng":826,"Ġdis":827,"AT":828,"Ġname":829,"Ġtrue":830,"val":831,"led":832,".f":833,"Ġne":834,"Ġend":835,".T":836,"cre":837,"ark":838,"log":839,"Ex":840,"error":841,"_id":842,"urre":843,"ange":844,"Ġnull":845,"rray":846,"Ġmy":847,"pan":848,"ict":849,"ator":850,"View":851,"List":852,"ĉreturn":853,"âĢĿ":854,"Ġpre":855,"Ġx":856,"clude":857,"arg":858,"ov":859,".h":860,"Ġ>":861,"Ġtheir":862,"')":863,"irst":864,"ick":865,"gh":866,"LE":867,"OR":868,"Ġprivate":869,"tem":870,"čĊčĊ":871,"user":872,"Ġ)":873,"com":874,".A":875,"\";Ċ":876,"Ġid":877,"read":878,"Ġwho":879,"_b":880,"\">Ċ":881,"Ġtime":882,"Ġman":883,"ry":884,"========":885,"roup":886,"rop":887,"public":888,"vel":889,"umber":890,"ble":891,"Ġwhich":892,"****************":893,"Ġany":894,"Ġfalse":895,"we":896,"Ġvalue":897,"Ġli":898,"\")":899,"nder":900,"gr":901,"Ġno":902,"param":903,"fig":904,".com":905,"Ġapp":906,"_l":907,"ions":908,".D":909,"ĠCh":910,"Ġabout":911,"Ġadd":912,"Ġsu":913,"Ġstring":914,"ID":915,"Ġover":916,"string":917,".l":918,"ource":919,"_C":920,"]Ċ":921,"Ġqu":922,"ĠString":923,"ca":924,"SE":925,"Ġro":926,"sh":927,"ual":928,"Type":929,"son":930,"new":931,"ern":932,"Ġag":933,"AR":934,"];Ċ":935,"].":936,"Ġ?":937,"ical":938,"Ġdes":939,"uth":940,"ix":941,"ays":942,"Ġtype":943,"'t":944,"ault":945,"Ġinter":946,"var":947,".b":948,"Ġpart":949,".d":950,"urrent":951,"IT":952,"EN":953,"enc":954,"(f":955,"ra":956,"value":957,"cho":958,"utton":959,"ose":960,"Ġ!=":961,"ater":962,"é":963,"reate":964,"oll":965,"pos":966,"yle":967,"ng":968,"AL":969,"using":970,"ames":971,"Ġ{čĊ":972,"ates":973,"ely":974,"Ġwork":975,"Ġem":976,"inal":977,"Ġsp":978,"Ġwhen":979,".set":980,"ĠĠĠĠĠĠ":981,"):Ċ":982,"to":983,"quire":984,"indow":985,"lement":986,"pect":987,"ash":988,"[i":989,"Ġuse":990,".F":991,"pec":992,"Ġad":993,"ove":994,"ception":995,"ength":996,"include":997,"ader":998,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":999,"atus":1000,"Th":1001,"itle":1002,"rit":1003,"void":1004,"().":1005,"(Ċ":1006,"Ġoff":1007,"Ġother":1008,"Ġ&&":1009,"';Ċ":1010,"ms":1011,"Ġbeen":1012,"Ġte":1013,"ml":1014,"co":1015,"nc":1016,"ervice":1017,"Ġ%":1018,"**Ċ":1019,"ann":1020,"ade":1021,"ĊĊĊĊ":1022,"lock":1023,"const":1024,"ponse":1025,"Ġsup":1026,"++":1027,"date":1028,"Ġacc":1029,"Ġhad":1030,"Ġbu":1031,"ĠRe":1032,"Ġwere":1033,"Ġfile":1034,"Ġwould":1035,"ĠâĢľ":1036,"ven":1037,"iss":1038,"Ġour":1039,"class":1040,"raw":1041,"Ġyear":1042,"Data":1043,"Ġval":1044,"Ġsome":1045,"fter":1046,"ys":1047,"Ġ///":1048,"round":1049,"view":1050,"Ġpe":1051,"Ġthere":1052,"Ġsaid":1053,"du":1054,"of":1055,"line":1056,"/*":1057,"duct":1058,"Ġher":1059,"ĠĠĠĠĠĠĠĠĠĠĠĠĠ":1060,"Res":1061,"Ġco":1062,"Ġcomm":1063,"ise":1064,"min":1065,"ĠĠĠĠĊ":1066,"#include":1067,"ethod":1068,".P":1069,"ute":1070,"Ġass":1071,"Int":1072,"ask":1073,"loc":1074,"Ġlike":1075,"ody":1076,"Ġlet":1077,"load":1078,"Ġam":1079,"rol":1080,"Ġgr":1081,"yp":1082,"Ġalso":1083,"ĠIt":1084,"url":1085,"ific":1086,"ors":1087,"_P":1088,"_n":1089,"igh":1090,"Ġthan":1091,"Com":1092,"AN":1093,"UL":1094,"ating":1095,"ĠThis":1096,"ref":1097,"_S":1098,"Ġstatic":1099,"roll":1100,"Ġjust":1101,"Ġresult":1102,"ian":1103,"idth":1104,"Ġthem":1105,"));Ċ":1106,"der":1107,"reak":1108,"Con":1109,"://":1110,"ule":1111,"...":1112,"arch":1113,"ement":1114,"Ġ<<":1115,"ush":1116,"ense":1117,"arr":1118,"Ġinto":1119,"cess":1120,"amp":1121,"ied":1122,"ument":1123,"Ġ\\":1124,"],":1125,"wo":1126,"als":1127,"Ġwhat":1128,"anc":1129,"Value":1130,"='":1131,"olum":1132,"Ġpos":1133,"ages":1134,"ayer":1135,"Ġsc":1136,"ues":1137,"\")Ċ":1138,"_T":1139,"Ġlist":1140,"(s":1141,"Ġcase":1142,"Ch":1143,"ĉĉĉĉĉ":1144,"////////":1145,"ponent":1146,"Ġz":1147,"Ġkn":1148,"let":1149,"DE":1150,"red":1151,"Ġfe":1152,"Ġ},Ċ":1153,"Ġ,":1154,"(t":1155,"Ġfirst":1156,"');Ċ":1157,"word":1158,"Ġimport":1159,"Ġact":1160,"Ġchar":1161,"CT":1162,"ĠTr":1163,"ople":1164,"={":1165,"ĉf":1166,"ient":1167,"cent":1168,".j":1169,"lection":1170,"))Ċ":1171,"Ġonly":1172,"Ġprint":1173,"mer":1174,".W":1175,"ock":1176,"Ġ--":1177,"Text":1178,"Ġop":1179,"ank":1180,"Ġits":1181,"Ġback":1182,"[\"":1183,"Ġneed":1184,"Ġcl":1185,"Ġsub":1186,"Ġla":1187,"((":1188,".\"":1189,"Object":1190,"Ġstart":1191,"file":1192,"(self":1193,"ner":1194,"ey":1195,"Ġuser":1196,"Ġent":1197,"ĠCom":1198,"its":1199,"ĠCon":1200,"ouble":1201,"ower":1202,"item":1203,"very":1204,"ĠWe":1205,"lick":1206,"ĠQ":1207,"php":1208,"ttp":1209,"':":1210,"ics":1211,"Ġunder":1212,"Ġ*Ċ":1213,".L":1214,");":1215,"ices":1216,"Ġreg":1217,")čĊ":1218,"ĉpublic":1219,"SS":1220,"Ġthen":1221,"reat":1222,"ious":1223,".G":1224,"ek":1225,"irect":1226,"heck":1227,"cript":1228,"ning":1229,"ĠUn":1230,"Ġmay":1231,"ĠWh":1232,"Bo":1233,"Item":1234,"struct":1235,".st":1236,"ream":1237,"ible":1238,"loat":1239,"Ġorg":1240,"und":1241,"sum":1242,"_in":1243,"../":1244,"_M":1245,"Ġhow":1246,"rite":1247,"'Ċ":1248,"To":1249,"ww":1250,"Ġpeople":1251,"index":1252,".n":1253,"http":1254,"(m":1255,"ector":1256,"Ġind":1257,"Ġjav":1258,"],Ċ":1259,"ĠHe":1260,"_st":1261,"ful":1262,"ole":1263,"){Ċ":1264,"Ġshould":1265,"opy":1266,"elp":1267,"ier":1268,"_name":1269,"erson":1270,"ION":1271,"ote":1272,"Ġtest":1273,"Ġbet":1274,"rror":1275,"ular":1276,"ãĢ":1277,"ĠÐ":1278,"bs":1279,"ting":1280,"Ġmake":1281,"Tr":1282,"Ġafter":1283,"arget":1284,"RO":1285,"olumn":1286,"rc":1287,"_re":1288,"define":1289,"Ġright":1290,"right":1291,"day":1292,"Ġlong":1293,"[]":1294,"(p":1295,"td":1296,"cond":1297,"ĠPro":1298,"Ġrem":1299,"ptions":1300,"vid":1301,".g":1302,"Ġext":1303,"Ġ__":1304,"')Ċ":1305,"pace":1306,"mp":1307,"Ġmin":1308,"stance":1309,"air":1310,"action":1311,"wh":1312,"type":1313,"util":1314,"ait":1315,"":1316,"IC":1317,"text":1318,"Ġph":1319,"Ġfl":1320,".M":1321,"ccess":1322,"br":1323,"fore":1324,"ersion":1325,"),Ċ":1326,".re":1327,"ateg":1328,"Ġloc":1329,"ins":1330,"-s":1331,"trib":1332,"ĠInt":1333,"Ġarray":1334,",\"":1335,"Pro":1336,"(c":1337,"ession":1338,">ĊĊ":1339,"Ġshe":1340,"\"]":1341,"aph":1342,"Ġexp":1343,"erty":1344,"ĠSe":1345,"Ġpar":1346,"unc":1347,"ET":1348,"Ġread":1349,"print":1350,"Ġrel":1351,"Ġform":1352,"Ġdr":1353,"Exception":1354,"input":1355,"Ġtrans":1356,"########":1357,"order":1358,"By":1359,"Ġaw":1360,"ities":1361,"uff":1362,"play":1363,".add":1364,"ĠâĢĵ":1365,"Ġwant":1366,"Ġcomp":1367,"ments":1368,"Ġ||":1369,"az":1370,"be":1371,"Ġnumber":1372,"Ġrequire":1373,"ĠEx":1374,"Ġcol":1375,"Ġkey":1376,"ember":1377,"Ġtwo":1378,"Ġsize":1379,"Ġwhere":1380,"UT":1381,"result":1382,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":1383,"ough":1384,"orld":1385,"ood":1386,"uch":1387,"ative":1388,"ger":1389,"arent":1390,"Ġ/*":1391,"Ġarg":1392,"Ġwhile":1393,"(this":1394,"Ġrec":1395,"Ġdif":1396,"State":1397,"Ġspec":1398,"ride":1399,"_F":1400,"Ġlook":1401,"AM":1402,"ility":1403,"eter":1404,"âĢĻt":1405,"ĊĊĊ":1406,"ayout":1407,"--------------------------------":1408,"ager":1409,"Ġcould":1410,"Ġbr":1411,"ends":1412,"ures":1413,"Ġknow":1414,"ets":1415,"ĠIf":1416,"ĠSh":1417,".w":1418,"back":1419,"Ġser":1420,"Ġ+=":1421,"Ġfr":1422,"());Ċ":1423,"Ġhand":1424,"Ind":1425,"ULL":1426,"Im":1427,"();ĊĊ":1428,"Ġmost":1429,"Ġtry":1430,"Ġnow":1431,"rough":1432,">čĊ":1433,"ackage":1434,"Ġhim":1435,"._":1436,"ify":1437,"Ġbreak":1438,"Ġ);Ċ":1439,"ren":1440,"#define":1441,"itt":1442,"Ġap":1443,"ĉc":1444,"(n":1445,"ĠYou":1446,":ĊĊ":1447,"-m":1448,"Ġevery":1449,"ustom":1450,"lient":1451,"ocument":1452,"cription":1453,"Error":1454,"-b":1455,"о":1456,"][":1457,"trans":1458,"Ġpoint":1459,"Ġstd":1460,"Ġfil":1461,"Time":1462,"Ġmod":1463,"Ġ->":1464,"Ġerror":1465,"ah":1466,"Ġtext":1467,"roller":1468,"lose":1469,"ql":1470,"Ġpol":1471,">":1472,"Ġshow":1473,"User":1474,"ased":1475,"Ġ{ĊĊ":1476,"Ġfind":1477,"а":1478,"ED":1479,"span":1480,"enu":1481,"Ġcurrent":1482,"Ġused":1483,"cept":1484,"clud":1485,"Ġplay":1486,"Ġlog":1487,"ution":1488,"fl":1489,"Ġsee":1490,"indows":1491,"Ġhelp":1492,"Ġthese":1493,"Ġpass":1494,"Ġdown":1495,"Ġeven":1496,"ason":1497,"uild":1498,"from":1499,"(d":1500,"Ġbl":1501,"label":1502,"else":1503,"е":1504,"Ġ(!":1505,"ized":1506,"(),":1507,"Ġob":1508,"Ġitem":1509,"ump":1510,"UR":1511,"orn":1512,"Ġdon":1513,"Se":1514,"man":1515,"ample":1516,"tn":1517,"================":1518,"He":1519,"gram":1520,"Ġdid":1521,"wn":1522,"_h":1523,"iver":1524,"Ġsm":1525,"Ġthrough":1526,"ĠAn":1527,"che":1528,"Ġinv":1529,"ouse":1530,"Ġes":1531,"ĠNew":1532,"export":1533,"mary":1534,"uto":1535,"ler":1536,"Ġlast":1537,"Ġevent":1538,"try":1539,"ï¼":1540,"ily":1541,"igned":1542,"ines":1543,"ollow":1544,"icense":1545,"sole":1546,"lear":1547,"(int":1548,"Ġagain":1549,"Ġhigh":1550,"html":1551,"Index":1552,"uthor":1553,"Ġ/**Ċ":1554,"Ġline":1555,"Event":1556,"_D":1557,"Ġdoes":1558,"itial":1559,"Ġcr":1560,"ars":1561,"Ġtem":1562,"cause":1563,"face":1564,"Ġ`":1565,"_A":1566,"Button":1567,"ature":1568,"ected":1569,"ES":1570,"ister":1571,"ĉĊ":1572,"Ġbefore":1573,"ale":1574,"other":1575,"Ġbecause":1576,"roid":1577,"Ġed":1578,"ik":1579,"reg":1580,"ĠDe":1581,"Ġdist":1582,"},Ċ":1583,"Ġstate":1584,"Ġcons":1585,"rint":1586,"att":1587,"Ġhere":1588,"ined":1589,"Ġfinal":1590,"Ġ\"\"":1591,"Key":1592,"LO":1593,"Ġdel":1594,"pty":1595,"thing":1596,"ĠAnd":1597,"Ġrun":1598,"ĠX":1599,"ym":1600,".app":1601,"Ġvery":1602,"ces":1603,"_N":1604,"ared":1605,"ward":1606,"list":1607,"ited":1608,"olog":1609,"itch":1610,"Box":1611,"ife":1612,"Ġac":1613,"Ġmodel":1614,"Ġmon":1615,"Ġway":1616,"lete":1617,"Ġcall":1618,"Ġatt":1619,"Ġcal":1620,"vert":1621,"Ġdec":1622,"lease":1623,"oun":1624,"Ġ});Ċ":1625,"fr":1626,"formation":1627,"etail":1628,"Ġnum":1629,"aj":1630,"query":1631,"Ġwell":1632,"Ġobject":1633,"ĠAs":1634,"Ġyears":1635,"Color":1636,"IS":1637,"Ġdefault":1638,"Wh":1639,"Ġins":1640,"aint":1641,"Ġjava":1642,"Ġsim":1643,"ĠAr":1644,"mon":1645,"til":1646,"();čĊ":1647,"):":1648,"Set":1649,"atter":1650,"Ġview":1651,"Ġpres":1652,"array":1653,"We":1654,"At":1655,"Ġbel":1656,"Ġmany":1657,"Man":1658,"ender":1659,"Ġbeing":1660,"Ġgood":1661,"ĉĉĉĉĉĉ":1662,"ational":1663,"ware":1664,".log":1665,"{čĊ":1666,"Ġusing":1667,"_B":1668,"Ġ:=":1669,"_w":1670,"ists":1671,"lish":1672,"Ġstud":1673,"ĠAl":1674,"Ġgu":1675,"config":1676,"uring":1677,"time":1678,"oken":1679,"amespace":1680,"Ġrequest":1681,"Ġchild":1682,"ĠÃ":1683,"lob":1684,"Ġparam":1685,"Ġ}čĊ":1686,"Ġecho":1687,"function":1688,"********************************":1689,"ps":1690,"Element":1691,"alk":1692,"lication":1693,"by":1694,"Size":1695,"rawing":1696,"Ġperson":1697,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":1698,"\\n":1699,"object":1700,"ince":1701,"En":1702,"File":1703,"uf":1704,"ffect":1705,"AC":1706,"Ġstyle":1707,"summary":1708,"Ġque":1709,"_r":1710,"Ġ($":1711,"Model":1712,"ident":1713,"Ġmethod":1714,"IL":1715,"ott":1716,"less":1717,"ING":1718,"Ġ()":1719,"Ġexpect":1720,"ync":1721,"package":1722,"urs":1723,"Ġprot":1724,"./":1725,"pre":1726,"Ġ)Ċ":1727,"ma":1728,"Ġsur":1729,"Ġfound":1730,"Info":1731,"par":1732,"imes":1733,".e":1734,"ains":1735,"Ġpost":1736,"-d":1737,"olean":1738,"Ġsl":1739,"PE":1740,"Ġsuch":1741,"select":1742,"ainer":1743,"Ġthink":1744,"Ġdiffer":1745,".r":1746,"/**Ċ":1747,"FF":1748,"ool":1749,"plate":1750,"qual":1751,"ĠFor":1752,"Ġmuch":1753,"uc":1754,"(new":1755,"odule":1756,"Ġsom":1757,"Ġhttp":1758,"ĠList":1759,"Ġcount":1760,"Ġinst":1761,"char":1762,"mit":1763,".id":1764,"aking":1765,"Ġgener":1766,"px":1767,"vice":1768,"_data":1769,"ĠNULL":1770,"}čĊ":1771,"idd":1772,"ãĢĤ":1773,"Ġmed":1774,"org":1775,"ider":1776,"ache":1777,"work":1778,"Ġcheck":1779,"ween":1780,"Ġ((":1781,"the":1782,"ants":1783,"><":1784,".B":1785,"-c":1786,"Ġopen":1787,"Ġest":1788,"ĠĠĠĠĠĠĠĠĊ":1789,"Ġnext":1790,"IM":1791,"ÑĤ":1792,"OT":1793,"ó":1794,"Ġfollow":1795,"content":1796,"ĠĠĠĠĠĠĠĠĠĠĠĠ":1797,"Ġinclud":1798,"HE":1799,"ĠRes":1800,"Ġhref":1801,"и":1802,"Ġcar":1803,"ypes":1804,"image":1805,"Un":1806,"Ġbool":1807,"AD":1808,"Ġgame":1809,".Form":1810,"rows":1811,"*/":1812,"velop":1813,".Drawing":1814,"Ġpath":1815,"ision":1816,"Ġeach":1817,"ĠPl":1818,"_type":1819,"Path":1820,"nection":1821,"Ġav":1822,"').":1823,"Ġsupport":1824,"ENT":1825,"rem":1826,"\").":1827,"Ġown":1828,"Ġcor":1829,"count":1830,"miss":1831,"ually":1832,"Ġmem":1833,"std":1834,"ience":1835,"search":1836,"\"ĊĊ":1837,"Form":1838,"Ġsex":1839,"ename":1840,"Ġsign":1841,"Ġet":1842,"ĠĠĠĠĠĠĠĠĠĠ":1843,"','":1844,"ĠApp":1845,"Ġthose":1846,"off":1847,"Ġerr":1848,"Ġsystem":1849,"Ġbest":1850,"code":1851,"Ġsame":1852,"Ġdi":1853,"uss":1854,"Ġcreate":1855,"ather":1856,"Array":1857,".in":1858,"fe":1859,"Service":1860,"UN":1861,"ats":1862,"ĠZ":1863,"alth":1864,"Ġmade":1865,"true":1866,"AB":1867,"Ġmark":1868,"rid":1869,"ified":1870,",čĊ":1871,"yn":1872,"press":1873,"Ġgroup":1874,"Ġfin":1875,"ĠLicense":1876,"Field":1877,"eger":1878,"Ġworld":1879,"iness":1880,"ty":1881,"Ġprocess":1882,"(b":1883,"Ġcre":1884,"arn":1885,"ives":1886,"Ġmain":1887,"ideo":1888,"_g":1889,"AG":1890,"valid":1891,"img":1892,"PI":1893,"Ġcolor":1894,"Ġreport":1895,"Ġtake":1896,"rib":1897,"OM":1898,"Ġday":1899,"Request":1900,"Ġsk":1901,"bers":1902,"ĉs":1903,".Add":1904,"oot":1905,"Image":1906,"Ġcomple":1907,"ollection":1908,"Ġtop":1909,"Ġfree":1910,"AS":1911,"De":1912,"ĠOn":1913,"IG":1914,"eta":1915,"Date":1916,"Ġaction":1917,"Over":1918,"itor":1919,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":1920,"not":1921,"Ġindex":1922,"her":1923,"icon":1924,"On":1925,";čĊčĊ":1926,"ivity":1927,"mand":1928,".Windows":1929,"OL":1930,"Ġreal":1931,"Ġmax":1932,"land":1933,"....":1934,"raph":1935,"Ġbuild":1936,"leg":1937,"assword":1938,"?ĊĊ":1939,"â̦":1940,"ook":1941,"uck":1942,"Ġmessage":1943,"test":1944,"ivers":1945,"Ġinput":1946,"Ġart":1947,"Ġbetween":1948,"Get":1949,"enter":1950,"ground":1951,"ene":1952,"á":1953,".length":1954,"Node":1955,"(i":1956,"Class":1957,"for":1958,"ĠâĢĶ":1959,"ten":1960,"oin":1961,"Ġke":1962,"ui":1963,"ĠIN":1964,"Ġtable":1965,"sub":1966,"ĠLe":1967,"Ġhead":1968,"Ġmust":1969,"////////////////":1970,".util":1971,"Context":1972,"Ġorder":1973,"Ġmov":1974,"over":1975,"Ġcontin":1976,"Ġsay":1977,"static":1978,".Text":1979,"ĠclassName":1980,"pany":1981,"Ġter":1982,"head":1983,"rg":1984,"Ġproduct":1985,"This":1986,".âĢĿ":1987,"ĠBut":1988,"loy":1989,"Ġdouble":1990,"sg":1991,"Ġplace":1992,".x":1993,"message":1994,"Ġinformation":1995,"private":1996,"Ġoper":1997,"ced":1998,"db":1999,"\">":2000,"Param":2001,"icle":2002,"Ġweek":2003,"Ġprop":2004,"table":2005,"idget":2006,"place":2007,"Prop":2008,"ĠAll":2009,"els":2010,"box":2011,".ĊĊĊĊ":2012,".R":2013,"ĠTo":2014,"iter":2015,"Sh":2016,"uration":2017,"older":2018,"_list":2019,"come":2020,"Ġsw":2021,"ization":2022,"ĉfor":2023,"bl":2024,"Ġprogram":2025,"(e":2026,"ape":2027,"check":2028,".Forms":2029,"Ġund":2030,"ategory":2031,"ags":2032,"Ġresponse":2033,"US":2034,"request":2035,"Ġstruct":2036,"escription":2037,"Ġcode":2038,"_H":2039,"uffer":2040,"Ġwithout":2041,"lobal":2042,"Manager":2043,"ilter":2044,"PO":2045,"ĉthis":2046,"option":2047,"Ġsol":2048,"Ġ===":2049,"akes":2050,"Controller":2051,"Message":2052,"Ġref":2053,"ever":2054,"ĠSo":2055,"aining":2056,".append":2057,"Ġstill":2058,"Ġprovid":2059,"Ġassert":2060,"med":2061,"Ġcap":2062,"usiness":2063,"Ġrep":2064,"tings":2065,"ved":2066,".N":2067,"api":2068,"OD":2069,"Ġfield":2070,"iven":2071,"oto":2072,"âĢľ":2073,"col":2074,"(x":2075,"ght":2076,"Result":2077,"Code":2078,".is":2079,"link":2080,"Ġcour":2081,"An":2082,"Ġteam":2083,"ĉint":2084,"ift":2085,"Ġsecond":2086,"Ġgoing":2087,"Ġrange":2088,"_E":2089,"ness":2090,"Ġfam":2091,"Ġnil":2092,"ĠCont":2093,"ailable":2094,"utes":2095,"atab":2096,"Ġfact":2097,"Ġvis":2098,"(&":2099,"ĠAN":2100,"Al":2101,"title":2102,"Ġandroid":2103,"CE":2104,"\\\"":2105,"irt":2106,"Ġwrit":2107,"н":2108,"ĉm":2109,"ftware":2110,"ond":2111,"Ġret":2112,"osition":2113,"Ġhome":2114,"Ġleft":2115,"args":2116,"meric":2117,"Ġdirect":2118,"oci":2119,"Pl":2120,"As":2121,"ret":2122,"ado":2123,"Of":2124,"chn":2125,"ĠGet":2126,"ee":2127,"ross":2128,"();":2129,"____":2130,".ph":2131,"It":2132,"oute":2133,"Ġexper":2134,"chool":2135,"www":2136,"},":2137,"Ġallow":2138,"ĠÂ":2139,"())":2140,"size":2141,"ism":2142,"ai":2143,"tract":2144,"ane":2145,"...ĊĊ":2146,"context":2147,"Ġbeg":2148,"CH":2149,"Ġpage":2150,"hip":2151,"no":2152,"core":2153,"sp":2154,"Ġdifferent":2155,"iable":2156,"ĠMe":2157,"_IN":2158,"button":2159,"ĠIs":2160,"ervices":2161,"Ġca":2162,"Ġaround":2163,"App":2164,"ration":2165,"Ġrece":2166,"Ġreally":2167,"Ġimage":2168,"Ġtarget":2169,"Ġdep":2170,"opyright":2171,"tra":2172,"ingle":2173,"ital":2174,"Layout":2175,"Ġboth":2176,"Override":2177,"arm":2178,"=>":2179,"aterial":2180,"iled":2181,"Ġput":2182,"Qu":2183,"ÑĢ":2184,"ung":2185,"map":2186,"ĉĉĉĉĉĉĉĉ":2187,"Ġlevel":2188,"Component":2189,"book":2190,"creen":2191,"_RE":2192,"Ġconfig":2193,"ãģ":2194,"Or":2195,".data":2196,"Ġdocument":2197,"\",\"":2198,"tribute":2199,"ux":2200,"Log":2201,"ference":2202,"post":2203,"_e":2204,"Ġlocal":2205,"andom":2206,"assert":2207,"Val":2208,"lected":2209,"ina":2210,"atabase":2211,"Add":2212,"Ġcontent":2213,".print":2214,"signed":2215,"ric":2216,".\"ĊĊ":2217,"Ġfa":2218,"!ĊĊ":2219,"-f":2220,"ived":2221,"Ġquest":2222,".ex":2223,"Ġfloat":2224,"Ġdevelop":2225,"оÐ":2226,"Map":2227,"ading":2228,"Ġposs":2229,"UE":2230,"namespace":2231,"_O":2232,"ĉb":2233,".Get":2234,">(":2235,"json":2236,"etails":2237,"Ġtoo":2238,"Ġextends":2239,"ĠNone":2240,"Ġfore":2241,"(String":2242,"format":2243,"Ġgreat":2244,"inter":2245,"cale":2246,"Ñģ":2247,"ron":2248,"iving":2249,"Ent":2250,"ency":2251,"xt":2252,"oy":2253,"Ġmonth":2254,"Ġhapp":2255,"Ġsuper":2256,"bar":2257,"default":2258,"_de":2259,"ords":2260,"ln":2261,"({Ċ":2262,"ĠInd":2263,"ases":2264,"Ġtitle":2265,"Ġcontext":2266,"oh":2267,"-p":2268,"Em":2269,"Ġmet":2270,"Test":2271,"Ġlife":2272,"_v":2273,"ĠUS":2274,"UI":2275,"ocation":2276,"md":2277,"Ġ[Ċ":2278,"Ġ]":2279,"sw":2280,"Ġincre":2281,"script":2282,"ential":2283,"ways":2284,".de":2285,"Ġsrc":2286,"Ġcatch":2287,"ĠAmeric":2288,"//Ċ":2289,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":2290,"Ġpay":2291,"plit":2292,"âĢĶ":2293,"Ġcoun":2294,"obj":2295,".php":2296,"Ġchange":2297,"ething":2298,"'re":2299,"aster":2300,"los":2301,"lation":2302,"ĠĠĊ":2303,"Le":2304,"ä":2305,"({":2306,"ready":2307,"ĠNo":2308,"Ġposition":2309,"Ġold":2310,"Ġbook":2311,"abled":2312,"bug":2313,"Hand":2314,"};ĊĊ":2315,"isplay":2316,"aving":2317,"Ġgover":2318,"Ġversion":2319,"System":2320,"nect":2321,"response":2322,"Style":2323,"Up":2324,"angu":2325,"Ġthree":2326,"init":2327,"ero":2328,"Ġlaw":2329,"endif":2330,"Ġbase":2331,"email":2332,"(l":2333,"_V":2334,"Ġconf":2335,"ATE":2336,"Ġduring":2337,"tes":2338,"Ġconsole":2339,"ĠPr":2340,"Ġspe":2341,"ves":2342,"path":2343,"ialog":2344,"dition":2345,"_to":2346,"ards":2347,"Ġagainst":2348,"etwork":2349,"ĠPh":2350,"_L":2351,"cur":2352,"imit":2353,"With":2354,"Ġpower":2355,"ium":2356,"';ĊĊ":2357,"Ġwom":2358,"left":2359,"ources":2360,"atri":2361,"ĠIm":2362,"ĠMan":2363,"orth":2364,"${":2365,"quals":2366,"ese":2367,"_size":2368,"Ġiss":2369,"otal":2370,"-g":2371,"ique":2372,"rame":2373,"Ġwidth":2374,"erg":2375,")(":2376,"ittle":2377,"TR":2378,"ĠThey":2379,"ences":2380,"rl":2381,"ons":2382,"Ġlabel":2383,".y":2384,"-t":2385,"update":2386,"anel":2387,"sc":2388,".to":2389,"Ġproject":2390,"ü":2391,"Ġelement":2392,"Ġsuccess":2393,"ĉĉĊ":2394,".sh":2395,"ram":2396,"ched":2397,"())Ċ":2398,"Ġ(Ċ":2399,"Ġdate":2400,"Ġtot":2401,"_ST":2402,"All":2403,"ification":2404,"ĉvar":2405,"Ġtri":2406,"chem":2407,"my":2408,"Ġbig":2409,"ĠAd":2410,"ĠAt":2411,"ots":2412,"num":2413,"Act":2414,"Ġmap":2415,"era":2416,"cope":2417,".$":2418,",âĢĿ":2419,"Ġpop":2420,"Ġfew":2421,"Ġlen":2422,"uid":2423,"eters":2424,"ules":2425,"ÃŃ":2426,"source":2427,"https":2428,"Ġdem":2429,"Ġear":2430,"################":2431,"Ġmatch":2432,"ories":2433,"aces":2434,"ĠCl":2435,"Ġnode":2436,"irc":2437,"local":2438,"unity":2439,"};Ċ":2440,"Ġanother":2441,"<<":2442,"ogle":2443,"Ġsit":2444,"ework":2445,"TE":2446,".I":2447,"NS":2448,"ology":2449,"ought":2450,".Cont":2451,">>":2452,"Ġcare":2453,"state":2454,"ĉprivate":2455,"Ġeffect":2456,"++)":2457,"_file":2458,"ending":2459,"Line":2460,"For":2461,"ior":2462,"ĠSc":2463,"Ġfun":2464,".Size":2465,"ĉelse":2466,"])":2467,"start":2468,"vious":2469,"Ġ},":2470,"ours":2471,"Ġleg":2472,"Ġservice":2473,"Ġsince":2474,"iron":2475,"Label":2476,"Ġnon":2477,"Ġlos":2478,"iction":2479,"Ġfull":2480,"acter":2481,"board":2482,"gress":2483,"Ġturn":2484,"ither":2485,".size":2486,"Ġbody":2487,"resh":2488,"eturn":2489,"(_":2490,"yles":2491,"ormal":2492,"pi":2493,"Ġsomething":2494,"!--":2495,"uint":2496,"Ġprodu":2497,"Ġstand":2498,"Ġproble":2499,"Ġavailable":2500,"mt":2501,"ĠBl":2502,"Ġ...":2503,"Ġblock":2504,"Input":2505,"Ġkeep":2506,"Count":2507,"open":2508,"Ġ['":2509,"Ġthrow":2510,"uilder":2511,"Action":2512,"Ġthings":2513,"True":2514,"Ġurl":2515,"ĠBo":2516,"printf":2517,"Ġred":2518,"js":2519,".create":2520,"ĠOr":2521,"Status":2522,"Instance":2523,"Ġcontrol":2524,"Ġcome":2525,"Ġcustom":2526,"location":2527,"model":2528,"ĠčĊ":2529,"Ġsource":2530,"Ġeas":2531,".out":2532,"]ĊĊ":2533,"oney":2534,"Ġawait":2535,"Ġpartic":2536,"AP":2537,"ublish":2538,"odes":2539,"_pro":2540,"ply":2541,"riter":2542,"Ġprov":2543,"Ġmill":2544,"HT":2545,"])Ċ":2546,"Ġchang":2547,"Ġask":2548,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":2549,"Ġoutput":2550,"Ġemail":2551,".push":2552,"Ġ}čĊčĊ":2553,"ination":2554,"atrix":2555,"Table":2556,"uccess":2557,"]);Ċ":2558,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":2559,"Ġdisc":2560,"([":2561,"Ġbusiness":2562,"height":2563,".html":2564,"ta":2565,"field":2566,"Ġrequired":2567,"_R":2568,"Ġgovern":2569,"}čĊčĊ":2570,"lex":2571,".,":2572,"ĠSet":2573,"urch":2574,"///":2575,"ts":2576,"af":2577,"Ġmight":2578,"istory":2579,"Str":2580,"Ġnever":2581,"Response":2582,"arse":2583,"ada":2584,"ĠHow":2585,"Ġ*)":2586,"Ġ;":2587,"Ġhard":2588,"Ad":2589,"Ġintern":2590,"used":2591,"(data":2592,"mod":2593,"annel":2594,"Ġnp":2595,"ugg":2596,"Ġ/>Ċ":2597,"Ġcalled":2598,"body":2599,"Ġcho":2600,"(r":2601,"_set":2602,"ird":2603,"Ġ>=":2604,"Ġ};Ċ":2605,"Ġoptions":2606,"ĠGener":2607,"Ġheight":2608,"Point":2609,"You":2610,"ety":2611,"Click":2612,"Ġsmall":2613,"Ġide":2614,"Ġaccess":2615,"anguage":2616,"Ġprotected":2617,"Ġjob":2618,"ĠThere":2619,"Def":2620,"Ġaddress":2621,"Ġuint":2622,"Not":2623,"oo":2624,"aps":2625,"":2759,"ĉĠĠĠ":2760,"\"))":2761,"Content":2762,"_W":2763,"plement":2764,"Ġwon":2765,"Ġvideo":2766,"adi":2767,"point":2768,"%%":2769,"Ġgl":2770,"erved":2771,"viron":2772,"IF":2773,"uted":2774,"ãĥ":2775,"'m":2776,"Ġcert":2777,"Ġprof":2778,"Ġcell":2779,"ari":2780,"Ġplayer":2781,"ais":2782,"Ġcost":2783,"Ġhum":2784,"(R":2785,"Ġoffic":2786,"ks":2787,".text":2788,"atures":2789,"Ġtotal":2790,"Ġ*/ĊĊ":2791,"ope":2792,"Ġstat":2793,"UM":2794,"Ġload":2795,"ights":2796,"Ġclear":2797,"uro":2798,"Ġtechn":2799,"upport":2800,"IR":2801,"Ġrow":2802,"Ġseem":2803,"Ġq":2804,"Ġshort":2805,"ĠNot":2806,"ipp":2807,"Group":2808,"section":2809,"max":2810,"irl":2811,"Ġoverride":2812,"Ġcompany":2813,"Ġdone":2814,"\");čĊ":2815,"Ġgre":2816,".Re":2817,"Ġbelie":2818,"rist":2819,"Ġhealth":2820,"ANT":2821,"()ĊĊ":2822,"ĠBe":2823,".value":2824,"ĠGr":2825,"ottom":2826,"Ġargs":2827,"PT":2828,"status":2829,"func":2830,"uments":2831,"-h":2832,"Number":2833,":čĊ":2834,"ĠLog":2835,"erver":2836,"Ġ),Ċ":2837,"ament":2838,"Ġobj":2839,"inc":2840,"Ġchildren":2841,"icy":2842,"IZ":2843,"ands":2844,"ably":2845,"Ġdistrib":2846,"Ġcur":2847,"erial":2848,"Ġdays":2849,"reated":2850,"rect":2851,"-l":2852,"irm":2853,"idden":2854,"omb":2855,"Ġinitial":2856,".js":2857,"Ġâ":2858,"Query":2859,"Ġonline":2860,"imal":2861,".con":2862,"au":2863,"Url":2864,"control":2865,"irection":2866,"Ġinstance":2867,"ORT":2868,"ĠFr":2869,"where":2870,"Ġjavax":2871,"Ġorgan":2872,"apter":2873,"Ġreason":2874,"options":2875,"ĠMar":2876,"(a":2877,"Ġwithin":2878,".âĢĿĊĊ":2879,"ODE":2880,"_DE":2881,"admin":2882,"ended":2883,"Ġdesign":2884,"ĠData":2885,"une":2886,"ĠFile":2887,"root":2888,"Ġcent":2889,"Ġarr":2890,"_add":2891,"len":2892,"page":2893,",'":2894,"_str":2895,"Ġbro":2896,"ability":2897,"outh":2898,"/c":2899,"pose":2900,"irtual":2901,"earch":2902,"_url":2903,"argin":2904,"Http":2905,"Ġschool":2906,"ava":2907,"Ġconsider":2908,".label":2909,"ĠArray":2910,"web":2911,"opt":2912,".println":2913,"ulation":2914,"Ġfunc":2915,"PL":2916,"Ġ\"\\":2917,"ĠText":2918,"actory":2919,"(function":2920,"null":2921,"Ġeng":2922,"down":2923,"Ġinclude":2924,"ĠEn":2925,"ĠDr":2926,"Ġdb":2927,"!!":2928,"side":2929,"Ġinit":2930,"quired":2931,"ĠShe":2932,"Column":2933,"react":2934,"Ġann":2935,"Ġstop":2936,"Ġlater":2937,"ĠThat":2938,"ention":2939,"df":2940,"UG":2941,"ILE":2942,"Ġclient":2943,"raft":2944,"ffer":2945,"POST":2946,"elper":2947,"Ġlove":2948,"quote":2949,"oud":2950,"Ġjson":2951,"Ġable":2952,"Ġmen":2953,"AX":2954,"ĠCopyright":2955,"ö":2956,"avig":2957,"req":2958,"Client":2959,"});Ċ":2960,".Com":2961,"erc":2962,"ilt":2963,"pecial":2964,"_com":2965,"room":2966,".Name":2967,"Ġgive":2968,"amb":2969,"ike":2970,"Ġcondition":2971,"client":2972,"ators":2973,":\"":2974,"Ġcopy":2975,"uture":2976,"iversity":2977,"ernal":2978,"{{":2979,"ĠCan":2980,"ounc":2981,"do":2982,"Ġocc":2983,"Ġappro":2984,"thers":2985,"ze":2986,"Ġeither":2987,"ĠFl":2988,"Ġimportant":2989,"Ġlead":2990,"attr":2991,"ART":2992,"Equal":2993,"Ġda":2994,"etch":2995,"entity":2996,"Ġfamily":2997,"adding":2998,"Ġoption":2999,"Ġexist":3000,"ica":3001,"ĠObject":3002,"'ve":3003,"vers":3004,"itional":3005,"output":3006,"ĠTrue":3007,"ĠOF":3008,"_time":3009,"Ġoffer":3010,"Ġ});ĊĊ":3011,"HER":3012,"egin":3013,"\"\"":3014,"Ġwater":3015,"Ġche":3016,"ĠMy":3017,"ored":3018,"Ġstep":3019,"ances":3020,"CK":3021,"AY":3022,"à¸":3023,"struction":3024,"(C":3025,"ouch":3026,"Stream":3027,"active":3028,"ama":3029,"Entity":3030,"product":3031,"(){Ċ":3032,"Ġgovernment":3033,"ĠID":3034,"ajor":3035,"And":3036,"Ġdisplay":3037,"л":3038,"Ġtimes":3039,"Ġfour":3040,"Ġfar":3041,"Ġpresent":3042,"ĠNS":3043,"Ġ\\Ċ":3044,"uest":3045,"Ġbas":3046,"echo":3047,"child":3048,"ifier":3049,"Handler":3050,"Ġlib":3051,"Property":3052,"translation":3053,"Ġroom":3054,"Ġonce":3055,"Ġ[]":3056,"center":3057,"================================":3058,"Ġresults":3059,"Ġcontinue":3060,"Ġtalk":3061,"_get":3062,"Ġgrow":3063,".sw":3064,"eb":3065,"ĠPublic":3066,"OP":3067,"ecute":3068,"ols":3069,"Ġ**":3070,"\");ĊĊ":3071,"Ġmass":3072,"ured":3073,".class":3074,"omic":3075,"Ġmean":3076,"ips":3077,"Ġaut":3078,");čĊčĊ":3079,"Ġuntil":3080,"Ġmarket":3081,"Ġarea":3082,"uit":3083,"Ġlength":3084,"ĠWith":3085,"structor":3086,"event":3087,"\"><":3088,"ĠSp":3089,"IV":3090,"Ġmus":3091,"iff":3092,"Ġkind":3093,"author":3094,"ounds":3095,"mb":3096,"_key":3097,"width":3098,"pository":3099,"Ġlight":3100,"uk":3101,"Row":3102,"ohn":3103,"alf":3104,"vironment":3105,"apper":3106,"ollections":3107,"Ġside":3108,"_info":3109,"Ġexample":3110,"imary":3111,"Ġwr":3112,"Ġcamp":3113,"cribe":3114,"\"/":3115,"Ġmiss":3116,"way":3117,"Ġbased":3118,"Ġplan":3119,"Vis":3120,"omain":3121,"unk":3122,"Ġaway":3123,"UP":3124," ":3370,"Ġden":3371,"obile":3372,"change":3373,"ĠĠĠĠĠĠĠĠĠĠĠĠĊ":3374,"ici":3375,"na":3376,"ĠForm":3377,"Ġsort":3378,"Select":3379,"pare":3380,"Ġthought":3381,"_con":3382,"Ġtask":3383,"ocus":3384,"ĠDE":3385,"ĠMin":3386,"Ġopt":3387,"ĉbreak":3388,"umer":3389,"KE":3390,"then":3391,"Ġdet":3392,"ĠTest":3393,"ports":3394,"Ġreview":3395,"('/":3396,"move":3397,"Ġswitch":3398,"ERT":3399,"patch":3400,"annot":3401,"ãĤ":3402,"Ġabove":3403,"itive":3404,"Ġquestion":3405,"ĠQu":3406,"ãĢĤĊĊ":3407,"gle":3408,"Ġword":3409,"Ġprovide":3410,"ĠReturn":3411,"Ġresearch":3412,"ão":3413,"ustr":3414,"Ġpublish":3415,"chema":3416,"}}":3417,"ĠCON":3418,"-in":3419,"allback":3420,"Ġcover":3421,"\\\\":3422,"color":3423,"ĠIS":3424,"Ġwhether":3425,"imate":3426,"isc":3427,"Bar":3428,"Ġdiv":3429,"Be":3430,"ourn":3431,"Ġhaving":3432,"lem":3433,"player":3434,"abs":3435,"amera":3436,"ney":3437,"Ġexc":3438,"gether":3439,"plied":3440,"ao":3441,"[$":3442,"Ġ++":3443,"ipe":3444,"show":3445,"/d":3446,"[:":3447,"agement":3448,"lev":3449,"_ID":3450,"rary":3451,"ades":3452,"_se":3453,"ause":3454,"Ġemploy":3455,"Ġ*/čĊ":3456,"Ġfre":3457,"Ġ'@":3458,"Ġcomplet":3459,"Ġlarge":3460,"ral":3461,"\\x":3462,"Ġfac":3463,">":3578,"Ġface":3579,"CTION":3580,"Ġsave":3581,"Ġtyp":3582,"dev":3583,"(\"#":3584,"AGE":3585,"container":3586,"edit":3587,"QL":3588,"Ġitems":3589,"Ġsocial":3590,"ien":3591,"ĠReact":3592,").ĊĊ":3593,"Ġmar":3594,"Ġredu":3595,"ĠRE":3596,".put":3597,"Ġmajor":3598,"Cell":3599,"next":3600,"Ġexpected":3601,"Ġyet":3602,"Ġindiv":3603,"tributes":3604,"atis":3605,"amed":3606,"Ġfood":3607,"Source":3608,"(string":3609,"Ġ+Ċ":3610,"ites":3611,"dr":3612,"Ġmembers":3613,"Ġcomb":3614,"items":3615,"ĠPer":3616,"TH":3617,"=True":3618,"Ġbar":3619,"_SE":3620,"comm":3621,"(w":3622,")ĊĊĊ":3623,"Ġsend":3624,"Ġinc":3625,"unsigned":3626,"FA":3627,"Ġparams":3628,"apping":3629,"ros":3630,"ugin":3631,"fa":3632,"Ġconnection":3633,"Ġ};ĊĊ":3634,"Ġbecome":3635,"Mode":3636,"Ġev":3637,"Ġdiff":3638,"ĠUnited":3639,"Height":3640,"fully":3641,"images":3642,"Ġmakes":3643,"Ġglobal":3644,"Ġcontact":3645,"':Ċ":3646,"Ġabs":3647,"аÐ":3648,"float":3649,"Ġexcept":3650,"ĠPol":3651,"Child":3652,"typ":3653,"Ġcertain":3654,"ión":3655,"OUT":3656,"Ġimpro":3657,"iles":3658,"Ġ-->Ċ":3659,"ĠPart":3660,"values":3661,"oss":3662,"/**":3663,"ilit":3664,"ĠEvent":3665,"curity":3666,"ster":3667,"Ġcharacter":3668,"Ġnews":3669,"Ġ\",":3670,"Ġdevice":3671,"cel":3672,"login":3673,"heet":3674,"Default":3675,"@\"":3676,"ĉĠ":3677,"click":3678,"(value":3679,"ĠAb":3680,"Ġprevious":3681,"ERROR":3682,"ocal":3683,"Ġmaterial":3684,"Ġbelow":3685,"ĠChrist":3686,"Ġmedia":3687,"cover":3688,"ĠUI":3689,"Ġfail":3690,"Ġblack":3691,"Ġcomponent":3692,"ĠAmerican":3693,"Ġadded":3694,"Ġbuy":3695,"stit":3696,"Ġcame":3697,"Ġdelete":3698,"property":3699,"oding":3700,"Ġcard":3701,"rops":3702,"Ġhttps":3703,"Ġroot":3704,"Ġhandle":3705,"CC":3706,"Back":3707,"emplate":3708,"Ġgetting":3709,"_by":3710,"mail":3711,"_sh":3712,".assert":3713,"ĠDec":3714,"(true":3715,"Ġcomput":3716,"Ġclaim":3717,"'=>":3718,"ĠSub":3719,"Ġair":3720,"ops":3721,"nav":3722,"ements":3723,"(id":3724,"Ġenter":3725,"anged":3726,"End":3727,"Ġlocation":3728,"Ġnight":3729,"Ġdoing":3730,"ĠRed":3731,"lin":3732,"}ĊĊĊ":3733,"vider":3734,"Ġpick":3735,"Ġwatch":3736,"essages":3737,"Ġhuman":3738,"Ġdam":3739,"pend":3740,"dir":3741,"Ġtax":3742,"Ġgirl":3743,"reet":3744,"Ġbox":3745,"Ġstrong":3746,"(v":3747,"rel":3748,"Ġinterface":3749,"Ġmsg":3750,"fect":3751,"_at":3752,"Ġhouse":3753,"Ġtrack":3754,"');ĊĊ":3755,"je":3756,"ĠJohn":3757,"istr":3758,"(S":3759,"ube":3760,"Ġce":3761,"itted":3762,"VER":3763,"*)":3764,"parent":3765,"Ġapplication":3766,"any":3767,".swing":3768,"Ġpack":3769,"\\u":3770,"Ġpract":3771,"Ġsection":3772,"ctx":3773,"Ġunsigned":3774,".Point":3775,"ĠOne":3776,"ı":3777,"iple":3778,"aid":3779,"Ñĥ":3780,"Vector":3781,"byte":3782,"Ġwait":3783,"ĠÃł":3784,"Ã¥":3785,"Ġtogether":3786,"Ġthrows":3787,"FO":3788,"'))":3789,"host":3790,"ising":3791,".view":3792,"Ġterms":3793,"framework":3794,"-r":3795,"Ġapply":3796,"Ġsession":3797,"Options":3798,"uggest":3799,"Ġothers":3800,"witter":3801,"Ġfund":3802,"Init":3803,"__(":3804,"ensor":3805,"GET":3806,"Ġseveral":3807,"ii":3808,"[j":3809,"IO":3810,"Ġtemplate":3811,"Position":3812,"Ġecon":3813,"achine":3814,"Ġil":3815,".spring":3816,"main":3817,"elt":3818,"iment":3819,"Rec":3820,"mm":3821,"ĠUniversity":3822,"ursor":3823,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":3824,"GL":3825,"icture":3826,"ithub":3827,"cer":3828,"cast":3829,"From":3830,"ales":3831,"Ġsubject":3832,"password":3833,"ny":3834,"Ġesc":3835,".write":3836,"ï¼Į":3837,"What":3838,".H":3839,"Ġhistory":3840,"ĠFe":3841,"Ġindividual":3842,"unit":3843,"Ġ-->":3844,"Ġdu":3845,"IST":3846,"Ġusers":3847,"fs":3848,"false":3849,"unt":3850,"Title":3851,"Ġmot":3852,"Ġfuture":3853,"ached":3854,"Ġstarted":3855,"Ġmode":3856,"Ġ'<":3857,"_array":3858,"Ġax":3859,"'];Ċ":3860,"ires":3861,"There":3862,"ught":3863,"tml":3864,"posed":3865,"icult":3866,"Ġtook":3867,"Ġgames":3868,"Ġ}}":3869,"Ġ?>Ċ":3870,"Ġproducts":3871,"Is":3872,"Ġbad":3873,"ĠDes":3874,".path":3875,"'ĊĊ":3876,"ĠPost":3877,"avel":3878,"(:":3879,"Ġneeds":3880,"Ġknown":3881,"Fl":3882,"Ġexec":3883,"Ġseen":3884,"ume":3885,"Ġborder":3886,"Ġlive":3887,"temp":3888,"Per":3889,"Ġvariable":3890,"iet":3891,"ĠDef":3892,"Ġge":3893,"eme":3894,"_back":3895,"first":3896,"Ġprovided":3897,"////////////////////////////////":3898,"Ġfilename":3899,"Ġhope":3900,"uly":3901,"auto":3902,"find":3903,"_string":3904,"btn":3905,"itude":3906,"Attribute":3907,"Ġyoung":3908,".txt":3909,"Ġwebsite":3910,"ĠProp":3911,"Ġey":3912,">();Ċ":3913,"ional":3914,"ARR":3915,"ictionary":3916,"urther":3917,".":3918,"ALL":3919,"Ġstudy":3920,"ili":3921,"Ġnetwork":3922,"yl":3923,"istance":3924,"OK":3925,"NU":3926,"rest":3927,"ĠST":3928,"icrosoft":3929,"Ġlimit":3930,"Ġcut":3931,"():Ċ":3932,"Ġcou":3933,"ogn":3934,"Ġsizeof":3935,"ival":3936,"Ġwent":3937,".z":3938,"Link":3939,"Ġfire":3940,"Ġacross":3941,"Ġcommunity":3942,"region":3943,"NE":3944,"Ref":3945,"Ġofficial":3946,"Ġvisit":3947,"olve":3948,"Ġreceived":3949,"Ġtoken":3950,"Ġmonths":3951,"Ġanim":3952,"Ġparticular":3953,"styles":3954,"ico":3955,"Ġess":3956,".Control":3957,"Ġé":3958,"ball":3959,"Ġlearn":3960,"inding":3961,"Var":3962,"Ġdecl":3963,"(err":3964,"LECT":3965,"One":3966,"pha":3967,"Ġ~":3968,"fort":3969,"asure":3970,"Ġmind":3971,"ĠEnd":3972,"Check":3973,"Ġquick":3974,"\"),":3975,"AND":3976,"utions":3977,"Base":3978,"________":3979,"Ġcomment":3980,"INE":3981,"âĢĻve":3982,"But":3983,"ĠEl":3984,"ĠUs":3985,"Ġadmin":3986,"mark":3987,"ĠName":3988,"`Ċ":3989,"ĠType":3990,"amic":3991,"pc":3992,"loor":3993,"FT":3994,"Ġopp":3995,"cket":3996,")->":3997,"tx":3998,"Ġpur":3999,"uel":4000,"ymbol":4001,"uation":4002,"anger":4003,"Ġbackground":4004,"ecess":4005,"efined":4006,"........":4007,"Ġdescription":4008,"Ġrepresent":4009,"\"));Ċ":4010,"pression":4011,"rowser":4012,"Ġseries":4013,"wards":4014,"($_":4015,"aise":4016,"Ġhot":4017,"acity":4018,"ries":4019,"actions":4020,"Create":4021,"adio":4022,"amples":4023,"Ġoriginal":4024,"ensive":4025,"font":4026,"stream":4027,"using":4028,".springframework":4029,"server":4030,"Ġbill":4031,"ACK":4032,"ilename":4033,"Ġframe":4034,"Ġ=Ċ":4035,"Edit":4036,"adius":4037,"Ġdraw":4038,"anks":4039,"Ġdeter":4040,"Ġcomes":4041,"_int":4042,"Ġforeach":4043,"angle":4044,"Ġelect":4045,"pected":4046,"Header":4047,"istration":4048,"False":4049,"ĠGame":4050,"Ġfilter":4051,"Activity":4052,"Ġlarg":4053,"inition":4054,"Ġ\"<":4055,"ised":4056,"Ġremove":4057,"ĠTrans":4058,"met":4059,"see":4060,"Format":4061,"Command":4062,"ĠEX":4063,"None":4064,"Ġfront":4065,"ASE":4066,"ĠRec":4067,"oundation":4068,"Ġvo":4069,"=\\\"":4070,"(*":4071,"Change":4072,".Write":4073,"group":4074,"ients":4075,"uy":4076,"****************************************************************":4077,"Ġdig":4078,"hr":4079,"(-":4080,"Ġgen":4081,"number":4082,"vec":4083,"urope":4084,"entry":4085,"LL":4086,"Ġste":4087,"Valid":4088,"'],":4089,"_param":4090,"Ġselected":4091,"Ġaccording":4092,"ĠDis":4093,"Ġutil":4094,"Buffer":4095,"_error":4096,"Ġassoci":4097,"_SIZE":4098,"Ġwor":4099,"Ġprintf":4100,"rag":4101,"Âł":4102,"DD":4103,"ĠVal":4104,"Ġactiv":4105,"Eng":4106,"etime":4107,"Ġvirtual":4108,"aign":4109,"aur":4110,"ĠPres":4111,"ĠException":4112,"Ġanything":4113,"ĠOff":4114,"Ġhours":4115,"Ġwar":4116,"Args":4117,"aging":4118,"Ġmodels":4119,"ĠTime":4120,"Ob":4121,"ams":4122,"joy":4123,"Ġearly":4124,".read":4125,"Ġcenter":4126,"ĠInitial":4127,"Ġlanguage":4128,"length":4129,"xy":4130,"Ġsn":4131,"Ġinf":4132,"Post":4133,"Ġago":4134,"Ġeasy":4135,"_code":4136,"ĠANY":4137,"_ch":4138,"Ġdownload":4139,"(T":4140,"aved":4141,"âĢĵ":4142,"Ġstudents":4143,"Ġfig":4144,"light":4145,"xx":4146,"Ġbuffer":4147,"ĠDep":4148,"ĠMath":4149,"ITH":4150,"Ġvari":4151,"Ġdue":4152,"Factory":4153,"Ġpor":4154,"Ġep":4155,"otype":4156,"Ġcannot":4157,"Ġwhite":4158,"čĊ":4424,".annot":4425,"Ġcollection":4426,"'.":4427,"Ġsimilar":4428,"Ġtaken":4429,"(\"%":4430,"Order":4431,"']Ċ":4432,"-md":4433,"ĠTH":4434,"aced":4435,"Ġisn":4436,"/j":4437,"Ġson":4438,"graph":4439,"ĠInteger":4440,"Ġnecess":4441,"reen":4442,"Ġum":4443,"Ġ\\<":4444,"Ġmoment":4445,"Ġbring":4446,"Ġindic":4447,"ysis":4448,"Level":4449,"verse":4450,"urrenc":4451,"_test":4452,"Ġentire":4453,"Down":4454,"Ġ}ĊĊĊ":4455,"(result":4456,"ĠRead":4457,"è":4458,"Mod":4459,"Ġtrying":4460,"\"),Ċ":4461,"Ġmember":4462,"ĠCor":4463,"ODO":4464,"-control":4465,"untime":4466,"ĠSim":4467,"Dialog":4468,"plot":4469,"_on":4470,"Ġphys":4471,"}/":4472,"Ġnamespace":4473,"ĉčĊ":4474,"acc":4475,"Player":4476,"ARE":4477,"Ġfoot":4478,"Ġboard":4479,"part":4480,"Ġsus":4481,"wise":4482,"ĠMc":4483,"Ġpush":4484,"ATA":4485,"Ġplease":4486,"ried":4487,"weet":4488,"bit":4489,"ided":4490,"VE":4491,"ĠSw":4492,"UB":4493,"Ġtypes":4494,"edia":4495,"Ġclos":4496,"acebook":4497,"When":4498,"Ġedit":4499,"igger":4500,"Ġenerg":4501,"Container":4502,"Ġphot":4503,"ĠCount":4504,"ĠEurope":4505,".Is":4506,"ĠRuss":4507,"peed":4508,"ĠStr":4509,"Ġpy":4510,"Ġcult":4511,"Ġdefined":4512,"ccount":4513,"Ġobt":4514,".Location":4515,"Ġthread":4516,"ille":4517,"Ġinstead":4518,"strong":4519,"ĠSec":4520,"URE":4521,"Ġidea":4522,".se":4523,"emy":4524,"selected":4525,"Connection":4526,"acing":4527,"thread":4528,".next":4529,"Ġcoll":4530,"Ġfilm":4531,"istic":4532,"Ġcompet":4533,"Ġconn":4534,"though":4535,"Ġcompan":4536,"ocket":4537,"Ġteach":4538,"=(":4539,"Ġphone":4540,"Ġactive":4541,"delete":4542,"tries":4543,"Ġmo":4544,"Ġdeath":4545,"});ĊĊ":4546,"ocol":4547,"Widget":4548,"Ġarticle":4549,"rodu":4550,"andid":4551,"Ñĭ":4552,"ĠCr":4553,"ka":4554,"():":4555,"lood":4556,"ĉĉĉĊ":4557,"Ġalmost":4558,"Ġsell":4559,"ervlet":4560,"rip":4561,"Unit":4562,"Ġapplic":4563,"Ġconnect":4564,"Ġfeature":4565,"Ġvia":4566,"'),":4567,"Ġlim":4568,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":4569,"ĠGu":4570,"Engine":4571,"Ġens":4572,"Ġenvironment":4573,"block":4574,"HERE":4575,"NULL":4576,"gy":4577,"tag":4578,")).":4579,"exp":4580,"Ġcompl":4581,"Ġinstall":4582,"Ġcomplete":4583,"queue":4584,"atural":4585,"Ġgeneral":4586,"thon":4587,"Ġasked":4588,"ores":4589,"(res":4590,"Ġreserved":4591,"SP":4592,"Ġâ̦":4593,"ÅĤ":4594,"Ġsignific":4595,"Off":4596,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":4597,"ĠAg":4598,"ĠJust":4599,"ĠError":4600,"Ġinfl":4601,"adata":4602,"Ġicon":4603,"asks":4604,"''":4605,"_LO":4606,"?.":4607,"account":4608,"Ġ(*":4609,"')ĊĊ":4610,"rap":4611,"_var":4612,"ĠFOR":4613,"Ġparty":4614,"ĠYour":4615,"cat":4616,"stry":4617,".new":4618,"boot":4619,"ĠNov":4620,"Ġvector":4621,"Ġnormal":4622,"Ġfurther":4623,"Repository":4624,"Ġdatabase":4625,"attle":4626,"Ġmusic":4627,"Ġspeed":4628,"Ġdoc":4629,"process":4630,"IGHT":4631,".parse":4632,"Ġtaking":4633,"Ġviol":4634,"ceed":4635,"ĠAfter":4636,"Ġforward":4637,"Ġcrit":4638,"\"/>Ċ":4639,"rot":4640,"Ġfailed":4641,"efore":4642,"Ġconcern":4643,"oe":4644,"ba":4645,"Ġsender":4646,"Ġterm":4647,"has":4648,"=\"#":4649,"Ġpotential":4650,"Num":4651,"Ġpublished":4652,".close":4653,"ĠImage":4654,"straint":4655,"UD":4656,"ĠOb":4657,"Ġprobably":4658,"lim":4659,"\":Ċ":4660,"olume":4661,"Ġconsum":4662,"ague":4663,"ensions":4664,"Ġinvestig":4665,"-year":4666,"');":4667,"-sm":4668,"Ġenjoy":4669,"orig":4670,"ering":4671,"cp":4672,"leased":4673,"plements":4674,"Ġreturns":4675,"pat":4676,"BO":4677,"ĠHouse":4678,".Label":4679,"Ġweight":4680,"ighb":4681,"Ġconditions":4682,"Ġexception":4683,"description":4684,"Ġtrad":4685,"-to":4686,"Ġ{}":4687,"Ġmodule":4688,"END":4689,".ap":4690,".props":4691,"Ġconstructor":4692,"aves":4693,"Ġfavor":4694,"ĠNow":4695,";i":4696,"ĠMain":4697,"_k":4698,"eries":4699,"âĢĻll":4700,"transform":4701,"imestamp":4702,"Pre":4703,"Ġmer":4704,".res":4705,"stant":4706,"Location":4707,"_NAME":4708,"Ġloss":4709,"ĠĊĊ":4710,"net":4711,"Ġengine":4712,"Block":4713,"Ġissues":4714,"Ġparse":4715,"ĠBar":4716,"Ġstay":4717,"ĠJSON":4718,"Ġdom":4719,"airs":4720,"wner":4721,"Ġlower":4722,"\",čĊ":4723,"ĠDem":4724,"ufact":4725,"Ġps":4726,"Ġperfect":4727,"RL":4728,"Ġeduc":4729,"ls":4730,"emory":4731,"ARRANT":4732,"uge":4733,"Ġexact":4734,".key":4735,"alled":4736,"ech":4737,"ief":4738,"\\/":4739,"oke":4740,"Ġformer":4741,"alloc":4742,"Ġsix":4743,"ida":4744,"Ġmargin":4745,"Ġheart":4746,"ald":4747,"pack":4748,".getElementById":4749,"ĠWARRANT":4750,"Ġrather":4751,"Ġbuilding":4752,"erman":4753,"lice":4754,"Ġquestions":4755,"izes":4756,"lege":4757,"irectory":4758,"Ġje":4759,"Ġcas":4760,"props":4761,"utf":4762,"Ġsecurity":4763,"Ġhowever":4764,"weight":4765,"Ġinside":4766,"Ġpresident":4767,"Char":4768,"ĠWITH":4769,".map":4770,"Ġgraph":4771,"Ġtag":4772,"_status":4773,"Ġattempt":4774,"opp":4775,"uses":4776,"ĉconst":4777,"Ġround":4778,",$":4779,"Ġfriends":4780,"Email":4781,"?>":4782,"Resource":4783,"KEY":4784,"osp":4785,".query":4786,"ĠNorth":4787,"ables":4788,"istrib":4789,"_class":4790,"ello":4791,"That":4792,"к":4793,"pecially":4794,"ĠPresident":4795,"Ġcampaign":4796,"Ġalt":4797,"area":4798,"Ġchall":4799,"Ġopport":4800,".Con":4801,"Ġenergy":4802,"like":4803,".string":4804,"ington":4805,")*":4806,"yy":4807,"Ġprofession":4808,"irth":4809,"Ġseg":4810,"æľ":4811,"Ġhor":4812,"iers":4813,"can":4814,"Ġbehind":4815,"Product":4816,"fg":4817,"ĠSk":4818,".jpg":4819,"?:":4820,"];ĊĊ":4821,"Ġcallback":4822,"ĠHttp":4823,"ÑĮ":4824,"long":4825,"MS":4826,"ATH":4827,"Ġraise":4828,"Ġwanted":4829,"rown":4830,"utor":4831,"lt":4832,"]=":4833,"eline":4834,"MA":4835,"Ġsepar":4836,"cs":4837,"semb":4838,"Dis":4839,"bserv":4840,"ĠWill":4841,"Ġpolicy":4842,"Ġthird":4843,"phone":4844,"Ġbed":4845,"/g":4846,".__":4847,"ĠInc":4848,"izing":4849,".remove":4850,"instance":4851,".type":4852,"Ġserv":4853,"Each":4854,"Ġhar":4855,"ĠMessage":4856,"(key":4857,"SELECT":4858,"Pos":4859,"));čĊ":4860,"Ġrecomm":4861,"Ġtraining":4862,"ĠEnt":4863,"ĠChar":4864,"icht":4865,"(file":4866,"Ġprior":4867,"Game":4868,"Ġexit":4869,"Params":4870,".core":4871,"PC":4872,"nes":4873,"anced":4874,"(request":4875,"Password":4876,"}>Ċ":4877,"Ġmag":4878,"Ġrelease":4879,"Ġshall":4880,"udent":4881,"ĠSouth":4882,"ando":4883,":'":4884,".TabIndex":4885,"sk":4886,"anner":4887,"isset":4888,"Ġoutside":4889,"ledge":4890,"Ġå":4891,"ĠRob":4892,"Ġimm":4893,"!Ċ":4894,"ĠWeb":4895,"Des":4896,"BC":4897,"ancial":4898,"Route":4899,"Dec":4900,"ferences":4901,"Ġpurch":4902,"ĠModel":4903,"ctor":4904,"gn":4905,"_start":4906,"_un":4907,".*":4908,"ises":4909,"Ġground":4910,"Ġunique":4911,"Ġbeaut":4912,"{\"":4913,"Ġpour":4914,"ĠOct":4915,"Ġtree":4916,"sets":4917,"_res":4918,"')->":4919,"_reg":4920,"(\"\\":4921,"Ġbyte":4922,"Bl":4923,"Ġdating":4924,"Ġmatter":4925,"ĠRem":4926,"Ġ'../":4927,"ĠAug":4928,"ĠLa":4929,"Ġ$(":4930,"ournal":4931,"iam":4932,"Ġshows":4933,"write":4934,"Ġball":4935,"Ġsimply":4936,"Ġfast":4937,"Ġmemory":4938,"ASS":4939,"ĠOf":4940,"oved":4941,"ante":4942,"aul":4943,"istry":4944,")));Ċ":4945,"Ġfit":4946,"_":5129,"\")ĊĊ":5130,"ox":5131,"application":5132,"Ġ]Ċ":5133,"ĊĊĊĊĊĊ":5134,"Ġsoon":5135,"ctions":5136,"inger":5137,"Ġjoin":5138,"ĠPe":5139,"Ġë":5140,"Ġlas":5141,".E":5142,"css":5143,"/or":5144,"ĠStart":5145,"ĠTO":5146,"Ġsubs":5147,"conn":5148,"components":5149,"DEBUG":5150,"quare":5151,"Function":5152,"endar":5153,".index":5154,"Ġfill":5155,"ÄĻ":5156,"Ġchoose":5157,"how":5158,"ĠAmerica":5159,"assets":5160,"------------":5161,"ĠValue":5162,"Ġoffice":5163,"Ġveh":5164,"Ġtransform":5165,"ĠArt":5166,"Ġinde":5167,"Ġfn":5168,"Ġimplements":5169,"ango":5170,"plete":5171,"+\"":5172,"tmp":5173,"amily":5174,"Ġhash":5175,"missions":5176,"EST":5177,"gt":5178,"Provider":5179,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":5180,"Ġflag":5181,"Ġparticip":5182,"den":5183,"ĠReturns":5184,"Ġnote":5185,"ür":5186,"pm":5187,"ideos":5188,"Ġspecified":5189,"ĠEN":5190,"ester":5191,"olid":5192,"Ġupon":5193,"(std":5194,"ĉv":5195,"Ġ'\\":5196,"uz":5197,"Ġvert":5198,"Ġvict":5199,"ĉself":5200,"Ġ\"$":5201,".k":5202,"Ġgroups":5203,"github":5204,"lang":5205,"Ġmut":5206,"TO":5207,"Ġve":5208,"ĠPlease":5209,";ĊĊĊ":5210,"access":5211,"Ġ{\"":5212,"rea":5213,"Ġrisk":5214,"icker":5215,"oggle":5216,"ĉwhile":5217,"ANG":5218,".send":5219,"Ġwoman":5220,"Ġgets":5221,"Ġign":5222,"ĠId":5223,"_log":5224,"ONE":5225,"Ġevid":5226,"ĠHar":5227,"_sub":5228,"Ġendl":5229,"Ġincluded":5230,"());ĊĊ":5231,"ĠAp":5232,"igr":5233,"Ġsem":5234,"ĠBlack":5235,"doc":5236,"_table":5237,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":5238,"-up":5239,"Ġcause":5240,"Ġ..":5241,"Ġvan":5242,"_dict":5243,"Ġfocus":5244,"IND":5245,"CESS":5246,".Log":5247,"Ġmultiple":5248,"ido":5249,"Ġregard":5250,"-M":5251,"andler":5252,"ourse":5253,"Ġdeg":5254,".U":5255,"Ġaddition":5256,"Ġvarious":5257,"Ġreceive":5258,"ен":5259,"ĠHT":5260,"Obj":5261,"DF":5262,"Ġincrease":5263,"ĠOpen":5264,"];":5265,"Ġcommit":5266,"?Ċ":5267,"ategories":5268,"atory":5269,"ship":5270,"ĠMich":5271,"Ġhtml":5272,"romise":5273,"Ġleave":5274,"Ġstrateg":5275,"aven":5276,"ĠConsole":5277,"known":5278,"-n":5279,"_LE":5280,".component":5281,"Ġbre":5282,"Session":5283,"iance":5284,"Ġalign":5285,"typedef":5286,"_result":5287,"ĠWHERE":5288,".split":5289,"Ġreading":5290,"FAULT":5291,"Ġclo":5292,"Ġnotice":5293,"_pr":5294,"arter":5295,"Ġlock":5296,"Ġstandard":5297,"etic":5298,"ellow":5299,"Ġpadding":5300,"ĠHis":5301,"Ġstates":5302,"_cast":5303,"(P":5304,"aa":5305,"Ġinternal":5306,"ean":5307,"ĠPRO":5308,"ĠKey":5309,"Ġespecially":5310,"ming":5311,"Ġcross":5312,"Ġnational":5313,"_object":5314,"filter":5315,"Ġscript":5316,".update":5317,"_i":5318,"ĠAssert":5319,"/core":5320,"%%%%":5321,"Ġproblems":5322,"istor":5323,"Ġ.=":5324,"Ġarch":5325,"Ġwritten":5326,"Ġmilit":5327,"MENT":5328,".ch":5329,"cape":5330,"ĠMus":5331,"_config":5332,"ĠAPI":5333,"foot":5334,"Ġimages":5335,"endl":5336,".In":5337,"First":5338,"Ġplatform":5339,".prot":5340,"Option":5341,"ste":5342,"ĠTODO":5343,"Ġforce":5344,".cont":5345,"ĉecho":5346,"ĠDav":5347,"Ptr":5348,"(B":5349,"RT":5350,"ĠBase":5351,"]['":5352,"Ġannounc":5353,"console":5354,"ĠPy":5355,"ds":5356,".as":5357,"Ġprevent":5358,"apan":5359,"Ġ{'":5360,"}":5361,"ĠService":5362,"ĠSen":5363,"ador":5364,"profile":5365,"Top":5366,"Ġiter":5367,"po":5368,"IES":5369,"JSON":5370,"IE":5371,"iant":5372,"ãĢģ":5373,"_j":5374,"ĠSept":5375,"_map":5376,"bum":5377,"(context":5378,"ĠHome":5379,"ians":5380,"GB":5381,"Ġliving":5382,"Ġpattern":5383,"(input":5384,"icient":5385,"Core":5386,"Ġentity":5387,"Ġinteg":5388,"Changed":5389,"Ġuseful":5390,".info":5391,"Ġtool":5392,"(item":5393,"Ġok":5394,"Ġfeed":5395,"IX":5396,"és":5397,"ĠNews":5398,"remove":5399,"erry":5400,"ĉĉĉĉĉĉĉĉĉ":5401,"ipment":5402,"ares":5403,"Do":5404,"Current":5405,".content":5406,".Group":5407,"ustral":5408,"ĠÑģ":5409,"})":5410,"Ġpopular":5411,"Ġstre":5412,"Ġmethods":5413,"_ERROR":5414,"Left":5415,"cal":5416,"bsp":5417,".ToString":5418,"Ġdir":5419,"Ġallowed":5420,"Ġimpact":5421,"\")]Ċ":5422,".config":5423,"Ġelements":5424,"Ġprote":5425,"Ġtrain":5426,".tr":5427,"rs":5428,"ĠRepublic":5429,"ĠTask":5430,"aries":5431,"(D":5432,"(get":5433,"â̦ĊĊ":5434,"Ġrelated":5435,"Ġvers":5436,"Ġsil":5437,"Ġ\"\";Ċ":5438,"Ġcmd":5439,"Ġtechnology":5440,".width":5441,"Float":5442,"ĠUse":5443,"Body":5444,"should":5445,".join":5446,"Font":5447,"llum":5448,"ycle":5449,"ĠBrit":5450,"Ġmit":5451,"Ġscale":5452,"Ġ(_":5453,"ernel":5454,"\"))Ċ":5455,"Ġscore":5456,"/v":5457,"Ġstudent":5458,"UC":5459,".show":5460,"Ġaverage":5461,"Enabled":5462,"(ex":5463,"common":5464,"imation":5465,":@\"":5466,"chie":5467,"Ġ...ĊĊ":5468,"river":5469,"ĠMarch":5470,"category":5471,"fin":5472,"Ġcourt":5473,"в":5474,"Server":5475,"Ġcontainer":5476,"-st":5477,"_for":5478,"Ġparts":5479,"Ġdecision":5480,"obs":5481,"oub":5482,"mitted":5483,"Ġ$('#":5484,"Ġsaw":5485,"Ġapproach":5486,"ICE":5487,"Ġsaying":5488,"Ġanyone":5489,"meta":5490,"SD":5491,"Ġsong":5492,"display":5493,"Oper":5494,"outes":5495,"Ġchannel":5496,"Ġchanged":5497,"ê":5498,"Ġfinally":5499,"_number":5500,"Please":5501,"à¤":5502,"oring":5503,"-re":5504,"Ġkill":5505,"Ġdrug":5506,"window":5507,"Ġconvert":5508,"ombre":5509,"Ġways":5510,"Helper":5511,"ĠFirst":5512,"(__":5513,"urity":5514,"ĠWindows":5515,"ees":5516,"Ġmat":5517,"rapper":5518,"Ġplus":5519,"anges":5520,"\"].":5521,"azon":5522,"/t":5523,"lat":5524,"aste":5525,"Ġprofile":5526,"Ġready":5527,"#ifndef":5528,"rote":5529,"Ġsense":5530,"Gener":5531,"ĠConfig":5532,"omy":5533,"ĠJune":5534,"Ġlatest":5535,"Ġsaf":5536,"Ġregion":5537,"Ġdeep":5538,"witch":5539,"ĠPark":5540,"}`":5541,"ĠFrom":5542,"II":5543,"Ġcv":5544,"Ġreach":5545,"Ġcounter":5546,"ĠWork":5547,"ĠURL":5548,"ĠUpdate":5549,"',čĊ":5550,"Ġimmedi":5551,"close":5552,"ados":5553,"ferred":5554,"Ġweeks":5555,"urg":5556,"Ġdamage":5557,"Ġlost":5558,"ani":5559,"_lo":5560,"Ġhimself":5561,"Ġdog":5562,")]Ċ":5563,"ï¿":5564,"pir":5565,"tt":5566,"Ġpaper":5567,"Ġthems":5568,"second":5569,"Ġstaff":5570,"ĠInput":5571,"\"+":5572,"ĠFacebook":5573,"Ġalloc":5574,"Ġsched":5575,"ACE":5576,"Ġthemselves":5577,"ĠComponent":5578,"Ġdriver":5579,"ja":5580,"(path":5581,"Ġcategory":5582,"alls":5583,"pu":5584,"lluminate":5585,"ĠAction":5586,".button":5587,"ĠGL":5588,"istics":5589,"Ġoil":5590,"Ġstock":5591,">'":5592,"Ġdead":5593,"VAL":5594,"QUE":5595,"************************************************************************":5596,"Ġcharg":5597,"Return":5598,"Ġful":5599,"dom":5600,"Ġrules":5601,"Ġmodify":5602,"Ġeval":5603,"ham":5604,"atement":5605,"\\<":5606,"ula":5607,"=False":5608,"RA":5609,"Ġcontains":5610,"Ġstack":5611,"mar":5612,"Ġ{}Ċ":5613,"Ġundefined":5614,"Ass":5615,"ĠChina":5616,"vey":5617,"*Ċ":5618,"Ġplaying":5619,")/":5620,"actor":5621,"Ġbottom":5622,"lier":5623,"ĠNumber":5624,"Ġcouple":5625,"DC":5626,"ĠSO":5627,"gor":5628,".setText":5629,"success":5630,"command":5631,"Filter":5632,"ĠOur":5633,"_item":5634,"Ġctx":5635,"Ġroad":5636,"Version":5637,"case":5638,"urt":5639,"avior":5640,"ych":5641,"sembly":5642,"ĠProduct":5643,"Ġheld":5644,"afe":5645,"Ġincludes":5646,"&":5789,"CON":5790,"Ġrepl":5791,"Ġregular":5792,"Storage":5793,"ramework":5794,"Ġgoal":5795,"Ġtouch":5796,".widget":5797,"Ġbuilt":5798,"des":5799,"Part":5800,"(re":5801,"Ġworth":5802,"hib":5803,"game":5804,"Ġв":5805,"acion":5806,"ĠWhite":5807,"(type":5808,"(`":5809,"Ġnatural":5810,"Ġinj":5811,"Ġcalcul":5812,"ĠApril":5813,".List":5814,"Ġassociated":5815,"ĉSystem":5816,"~~":5817,"=[":5818,"Ġstorage":5819,"Ġbytes":5820,"Ġtravel":5821,"Ġsou":5822,"Ġpassed":5823,"!=":5824,"ascript":5825,".open":5826,"Ġgrid":5827,"Ġbus":5828,"Ġrecogn":5829,"Ab":5830,"Ġhon":5831,"ĠCenter":5832,"Ġprec":5833,"build":5834,"HTML":5835,"ĠSan":5836,"Ġcountries":5837,"aled":5838,"token":5839,"kt":5840,"Ġqual":5841,"Last":5842,"adow":5843,"Ġmanufact":5844,"idad":5845,"jango":5846,"Next":5847,"xf":5848,".a":5849,"Ġporno":5850,"ĠPM":5851,"erve":5852,"iting":5853,"_th":5854,"ci":5855,"=None":5856,"gs":5857,"Ġlogin":5858,"atives":5859,"']);Ċ":5860,"Äħ":5861,"Ġill":5862,"IA":5863,"children":5864,"DO":5865,"Ġlevels":5866,"Ġ{{":5867,"Ġlooks":5868,"Ġ\"#":5869,"ToString":5870,"Ġnecessary":5871,"ĠĠĠĊ":5872,"cell":5873,"Entry":5874,"Ġ'#":5875,"Ġextrem":5876,"Selector":5877,"Ġplaceholder":5878,"Load":5879,"Ġreleased":5880,"ORE":5881,"Enumer":5882,"ĠTV":5883,"SET":5884,"inq":5885,"Press":5886,"ĠDepartment":5887,"Ġproperties":5888,"Ġrespond":5889,"Search":5890,"ael":5891,"Ġrequ":5892,"ĠBook":5893,"/Ċ":5894,"(st":5895,"Ġfinancial":5896,"icket":5897,"_input":5898,"Ġthreat":5899,"(in":5900,"Strip":5901,"ìĿ":5902,"ção":5903,"Ġevidence":5904,"));":5905,"ĠBro":5906,"Ġ[];Ċ":5907,"Ġou":5908,"buf":5909,"Script":5910,"dat":5911,"Ġrule":5912,"#import":5913,"=\"/":5914,"Serial":5915,"Ġstarting":5916,"[index":5917,"ae":5918,"Ġcontrib":5919,"session":5920,"_new":5921,"utable":5922,"ober":5923,"Ġ\"./":5924,"Ġlogger":5925,"Ġrecently":5926,"Ġreturned":5927,"ččĊ":5928,")))Ċ":5929,"itions":5930,"Ġseek":5931,"Ġcommunic":5932,"Ġ\".":5933,"Ġusername":5934,"ECT":5935,"DS":5936,"Ġotherwise":5937,"ĠGerman":5938,".aw":5939,"Adapter":5940,"ixel":5941,"Ġsystems":5942,"Ġdrop":5943,"Ġstructure":5944,"Ġ$(\"#":5945,"encies":5946,"anning":5947,"ĠLink":5948,"ĠResponse":5949,"Ġstri":5950,"ż":5951,"ĠDB":5952,"æĹ":5953,"android":5954,"submit":5955,"otion":5956,"(@":5957,".test":5958,"ĊĊĊĊĊĊĊĊ":5959,"];čĊ":5960,"Ġdirectly":5961,"Ġ\"%":5962,"ris":5963,"elta":5964,"AIL":5965,"){čĊ":5966,"mine":5967,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":5968,"(k":5969,"bon":5970,"asic":5971,"pite":5972,"___":5973,"Max":5974,"Ġerrors":5975,"ĠWhile":5976,"Ġarguments":5977,"Ġensure":5978,"Right":5979,"-based":5980,"Web":5981,"Ġ-=":5982,"Ġintrodu":5983,"ĠInst":5984,"ĠWash":5985,"ordin":5986,"join":5987,"Database":5988,"Ġgrad":5989,"Ġusually":5990,"ITE":5991,"Props":5992,"?>Ċ":5993,"ĠGo":5994,"@Override":5995,"REF":5996,"Ġip":5997,"ĠAustral":5998,"Ġist":5999,"ViewById":6000,"Ġserious":6001,"Ġcustomer":6002,".prototype":6003,"odo":6004,"cor":6005,"Ġdoor":6006,"ĠWITHOUT":6007,"Ġplant":6008,"Ġbegan":6009,"Ġdistance":6010,"()).":6011,"Ġchance":6012,"Ġord":6013,"came":6014,"pragma":6015,"Ġprotect":6016,"ragment":6017,"ĠNode":6018,"ening":6019,"Ñĩ":6020,"Ġroute":6021,"ĠSchool":6022,"hi":6023,"Ġneighb":6024,"After":6025,"licit":6026,"Ġcontr":6027,"Ġprimary":6028,"AA":6029,".WriteLine":6030,"utils":6031,"Ġbi":6032,"Red":6033,".Linq":6034,".object":6035,"Ġleaders":6036,"unities":6037,"Ġgun":6038,"onth":6039,"ĠDev":6040,"FILE":6041,"Ġcomments":6042,"_len":6043,"arrow":6044,"amount":6045,"Range":6046,"sert":6047,"GridView":6048,"Ġupdated":6049,"ĠMo":6050,"Ġinform":6051,"ociety":6052,"ala":6053,"Access":6054,"Ġhab":6055,"Ġcreat":6056,"_arg":6057,"ĠJanuary":6058,"ĠDay":6059,"\")čĊ":6060,"uple":6061,"document":6062,"gorith":6063,"menu":6064,"ĠOver":6065,"bb":6066,".title":6067,"_out":6068,"Ġled":6069,"uri":6070,"Ġ?>":6071,"gl":6072,"Ġbank":6073,"ayment":6074,"ĉprintf":6075,"MD":6076,"Ġsample":6077,"Ġhands":6078,"ĠVersion":6079,"uario":6080,"Ġoffers":6081,"ityEngine":6082,"Ġshape":6083,"Ġsleep":6084,"_point":6085,"Settings":6086,"Ġachie":6087,"Ġsold":6088,"ota":6089,".bind":6090,"Am":6091,"Ġsafe":6092,"Store":6093,"Ġshared":6094,"Ġpriv":6095,"_VAL":6096,"Ġsens":6097,"){":6098,"Ġremember":6099,"shared":6100,"element":6101,"Ġshoot":6102,"Vert":6103,"cout":6104,"Ġenv":6105,"_label":6106,"Ġ>Ċ":6107,"run":6108,"Ġscene":6109,"(array":6110,"device":6111,"_title":6112,"agon":6113,"]čĊ":6114,"aby":6115,"Ġbecame":6116,"boolean":6117,"Ġpark":6118,"ĠCode":6119,"upload":6120,"riday":6121,"ĠSeptember":6122,"Fe":6123,"Ġsen":6124,"cing":6125,"FL":6126,"Col":6127,"uts":6128,"_page":6129,"inn":6130,"Ġimplied":6131,"aling":6132,"Ġyourself":6133,".Count":6134,"conf":6135,"Ġaud":6136,"_init":6137,".)":6138,"Ġwrote":6139,"NG":6140,".Error":6141,"ä»":6142,".for":6143,"Ġequal":6144,"ĠRequest":6145,"Ġserial":6146,"Ġallows":6147,"XX":6148,"Ġmiddle":6149,"chor":6150,"ø":6151,"erval":6152,".Column":6153,"reading":6154,"Ġescort":6155,"ĠAugust":6156,"Ġquickly":6157,"Ġweap":6158,"ĠCG":6159,"ropri":6160,"ho":6161,"Ġcop":6162,"(struct":6163,"ĠBig":6164,"Ġvs":6165,"Ġfrequ":6166,".Value":6167,"Ġactions":6168,"Ġproper":6169,"Ġinn":6170,"Ġobjects":6171,"Ġmatrix":6172,"avascript":6173,"Ġones":6174,".group":6175,"Ġgreen":6176,"Ġpaint":6177,"ools":6178,"ycl":6179,"encode":6180,"olt":6181,"comment":6182,".api":6183,"Dir":6184,"Ġune":6185,"izont":6186,".position":6187,"Ġdesigned":6188,"_val":6189,"avi":6190,"iring":6191,"tab":6192,"Ġlayer":6193,"Ġviews":6194,"Ġreve":6195,"rael":6196,"ĠON":6197,"rics":6198,"np":6199,"Ġcore":6200,"());čĊ":6201,"Main":6202,"Ġexpert":6203,"ĉĉčĊ":6204,"_en":6205,"Ġ/>":6206,"utter":6207,"IAL":6208,"ails":6209,"ĠKing":6210,"*/ĊĊ":6211,"ĠMet":6212,"_end":6213,"addr":6214,"ora":6215,"Ġir":6216,"Min":6217,"Ġsurpr":6218,"Ġrepe":6219,"Ġdirectory":6220,"PUT":6221,"-S":6222,"Ġelection":6223,"haps":6224,".pre":6225,"cm":6226,"Values":6227,"Ġ\"Ċ":6228,"column":6229,"ivil":6230,"Login":6231,"inue":6232,"Ġbeautiful":6233,"Ġsecret":6234,"(event":6235,"Ġchat":6236,"ums":6237,"Ġorigin":6238,"Ġeffects":6239,"Ġmanagement":6240,"illa":6241,"tk":6242,"Ġsetting":6243,"ĠCour":6244,"Ġmassage":6245,"ĉend":6246,"Ġhappy":6247,"Ġfinish":6248,"Ġcamera":6249,"ĠVer":6250,"ĠDemocr":6251,"ĠHer":6252,"(Q":6253,"cons":6254,"ita":6255,"Ġ'.":6256,"{}":6257,"ĉC":6258,"Ġstuff":6259,"Ġ:Ċ":6260,"ĠAR":6261,"Task":6262,"hidden":6263,"eros":6264,"IGN":6265,"atio":6266,"ĠHealth":6267,"olute":6268,"Enter":6269,"'>":6270,"ĠTwitter":6271,"ĠCounty":6272,"scribe":6273,"Ġ=>Ċ":6274,"Ġhy":6275,"fit":6276,"Ġmilitary":6277,"Ġsale":6278,"required":6279,"non":6280,"bootstrap":6281,"hold":6282,"rim":6283,"-old":6284,"ĠDown":6285,"Ġmention":6286,"contact":6287,"_group":6288,"oday":6289,"Ġtown":6290,"Ġsolution":6291,"uate":6292,"elling":6293,"]->":6294,"otes":6295,"ental":6296,"omen":6297,"ospital":6298,"ĠSup":6299,"_EN":6300,"Ġslow":6301,"SESSION":6302,"Ġblue":6303,"ago":6304,"Ġlives":6305,"Ġ^":6306,".un":6307,"inst":6308,"enge":6309,"Ġcustomers":6310,"Ġcast":6311,"udget":6312,"ï¼ģ":6313,"icens":6314,"Ġdetermin":6315,"Selected":6316,"_pl":6317,"ueue":6318,"Ġdark":6319,"//ĊĊ":6320,"si":6321,"thern":6322,"ĠJapan":6323,"/w":6324,"PU":6325,"ĠEast":6326,"ovie":6327,"Ġpackage":6328,"Ġnor":6329,"Ġapi":6330,"bot":6331,"\"];Ċ":6332,"_post":6333,"ulate":6334,"Ġclub":6335,"'));Ċ":6336,"Ġloop":6337,"PIO":6338,"ione":6339,"shot":6340,"Initial":6341,"Ġplayed":6342,"register":6343,"rought":6344,"_max":6345,"acement":6346,"match":6347,"raphics":6348,"AST":6349,"Ġexisting":6350,"Ġcomplex":6351,"DA":6352,".Ch":6353,".common":6354,"mo":6355,"Ġ'../../":6356,"ito":6357,"Ġanalysis":6358,"Ġdeliver":6359,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ":6360,"idx":6361,"Ãł":6362,"ongo":6363,"ĠEnglish":6364,"Ċ":9992,"_default":9993,"ĠDatabase":9994,"rep":9995,"ESS":9996,"nergy":9997,".Find":9998,"_mask":9999,"Ġrise":10000,"Ġkernel":10001,"::$":10002,".Q":10003,"Ġoffering":10004,"decl":10005,"ĠCS":10006,"Ġlisted":10007,"Ġmostly":10008,"enger":10009,"Ġblocks":10010,"olo":10011,"Ġgoverning":10012,"\\F":10013,"Ġconcent":10014,".getText":10015,"Ġmb":10016,"Ġoccurred":10017,"Ġchanging":10018,"Scene":10019,"_CODE":10020,"Beh":10021,"\"The":10022,"Ġtile":10023,"ĠAssociation":10024,"ĉP":10025,"alty":10026,"_ad":10027,"odies":10028,"iated":10029,"Ġprepared":10030,"possible":10031,"Ġmort":10032,"TEST":10033,"Ġignore":10034,"Ġcalc":10035,"Ġrs":10036,"ĠassertEquals":10037,"Ġsz":10038,"ĠTHIS":10039,".\"Ċ":10040,"Ġcanvas":10041,"java":10042,"Ġdut":10043,"VALID":10044,".sql":10045,".input":10046,"Ġaux":10047,"Sup":10048,"Ġartist":10049,"Vec":10050,"_TIME":10051,".stringify":10052,"etween":10053,"ĠCategory":10054,"Ġ[-":10055,"ĠDevExpress":10056,"ĠJul":10057,"Ġring":10058,".ed":10059,"YY":10060,"Let":10061,"TextField":10062,"Ġflat":10063,"_print":10064,"ĠOTHER":10065,"adian":10066,"Ġchecked":10067,"ele":10068,"Align":10069,"standing":10070,"Ġ[],":10071,"Ġlab":10072,"ucky":10073,"ĠChristmas":10074,"(image":10075,".module":10076,"Ġlots":10077,"Ġslightly":10078,"(final":10079,"erge":10080,"è¿":10081,"ĠPolice":10082,"ĠRight":10083,"Ġaward":10084,"ĠOS":10085,"Ġ{}ĊĊ":10086,"Ġptr":10087,"oves":10088,"icated":10089,"ем":10090,"Ġmanage":10091,"oliday":10092,"Amount":10093,"oolStrip":10094,"tbody":10095,"Nav":10096,"wrap":10097,"BB":10098,"Ġwatching":10099,"arios":10100,"Ġoptional":10101,"_K":10102,"ĠLicensed":10103,".Map":10104,"Timer":10105,"ĠAP":10106,"ĠRev":10107,"(o":10108,",c":10109,"umin":10110,"etailed":10111,"ĠHy":10112,"Ġblank":10113,"agger":10114,"ĠSelf":10115,"()[":10116,".make":10117,"earn":10118,"channel":10119,";Ċ":10133,"World":10134,"Ġpython":10135,"Ġlif":10136,"Ġtrav":10137,"Ġconven":10138,"company":10139,"ĠClub":10140,"Ver":10141,"Btn":10142,"Ġzone":10143,"products":10144,"ĠEduc":10145,"Ġverify":10146,"ĠMil":10147,"ono":10148,"]);ĊĊ":10149,"ENCE":10150,"Ġpacket":10151,"Ġcer":10152,"Ġenumer":10153,"Ġpars":10154,"formed":10155,"Ġoccup":10156,"tre":10157,"Ġexercise":10158,"Day":10159,"_sum":10160,"Ġasking":10161,"aption":10162,"Ġorders":10163,"Ġspending":10164,"ĠERR":10165,".Dis":10166,"ĠUtil":10167,"âĢľI":10168,"\\'":10169,"?)":10170,"/>Ċ":10171,"Ġemot":10172,"Ġinfluence":10173,"ĠAfrica":10174,"atters":10175,"Ùħ":10176,".session":10177,"Ġchief":10178,"ĉĉĉĉĉĉĉĉĉĉĉ":10179,"Ġtom":10180,"cluded":10181,"serial":10182,"_handler":10183,".Type":10184,"aped":10185,"Ġpolicies":10186,"-ex":10187,"-tr":10188,"blank":10189,"merce":10190,"Ġcoverage":10191,"Ġrc":10192,"_matrix":10193,"_box":10194,"Ġcharges":10195,"ĠBoston":10196,"Pe":10197,"Ġcircum":10198,"Ġfilled":10199,"Ġnorth":10200,"ictureBox":10201,"ĉres":10202,"è®":10203,"Ġtermin":10204,"Ġ[â̦":10205,"IRECT":10206,"Ġber":10207,"Ġ\"../../":10208,"retch":10209,".code":10210,"_col":10211,"ĠGovernment":10212,"Ġargv":10213,"ĠLord":10214,"asi":10215,"Exec":10216,"ĉlet":10217,"vertis":10218,"Ġdiscussion":10219,"enance":10220,"outube":10221,"typeof":10222,"Ġserved":10223,"ĠPut":10224,"ĉx":10225,"Ġsweet":10226,"Before":10227,"ategy":10228,".of":10229,"ĠMaterial":10230,"Sort":10231,"ONT":10232,"igital":10233,"Why":10234,"Ġsust":10235,"Ġç":10236,"abet":10237,"Ġsegment":10238,"Ġ[],Ċ":10239,"ĠMuslim":10240,"ĠfindViewById":10241,"cut":10242,"_TEXT":10243,"ĠMary":10244,"Ġloved":10245,"Ġlie":10246,"ĠJO":10247,"Ġisset":10248,"month":10249,"Ġprime":10250,"ti":10251,"ĠCarol":10252,"Use":10253,"ĠPop":10254,"ĠSave":10255,"Interval":10256,"execute":10257,"dy":10258,"ĠIran":10259,"_cont":10260,"ĉT":10261,"Ġphase":10262,"checkbox":10263,"week":10264,"Ġhide":10265,"Ġtil":10266,"Ġju":10267,"Custom":10268,"burg":10269,"/M":10270,"TON":10271,"Ġquant":10272,"Ġrub":10273,"ixels":10274,"Ġinstalled":10275,"Ġdump":10276,"Ġproperly":10277,"(List":10278,"Ġdecide":10279,"apply":10280,"Has":10281,"Ġkeeping":10282,"Ġcitizens":10283,"Ġjoint":10284,"pool":10285,"Socket":10286,"_op":10287,"Ġweapon":10288,"gnore":10289,"ĠExec":10290,"otten":10291,"ĠMS":10292,"Ġ(-":10293,"ĠReview":10294,"Ġexamples":10295,"Ġtight":10296,"!(":10297,"DP":10298,"ĠMessageBox":10299,"Ġphotograph":10300,"URI":10301,"ét":10302,"low":10303,"ĠGrand":10304,".persistence":10305,"Ġmaintain":10306,"Ġnums":10307,"Ġzip":10308,"ials":10309,"ĠGets":10310,"peg":10311,"ĠBuffer":10312,"~~~~":10313,"rastructure":10314,"ĠPL":10315,"uen":10316,"obby":10317,"sizeof":10318,"Ġpic":10319,"Ġseed":10320,"Ġexperienced":10321,"Ġodd":10322,"Ġkick":10323,"Ġprocedure":10324,"avigator":10325,"-on":10326,",j":10327,"ĠAlthough":10328,"ĠuserId":10329,"accept":10330,"Blue":10331,"IColor":10332,"layer":10333,"available":10334,"Ġends":10335,".table":10336,"Ġdataset":10337,"bus":10338,"Ġexplain":10339,"(pro":10340,"ĠCommittee":10341,"Ġnoted":10342,"]:Ċ":10343,"Dim":10344,"stdio":10345,".\",Ċ":10346,"_source":10347,"ĠWeek":10348,"ĠEdge":10349,"Ġoperating":10350,"Ġeste":10351,"ipl":10352,"agination":10353,"Ġproceed":10354,"Ġanimation":10355,".Models":10356,"ĠWatch":10357,"iat":10358,"Ġoppon":10359,"/A":10360,"Report":10361,"Ġsounds":10362,"_buf":10363,"IELD":10364,"Ġbund":10365,"ĉget":10366,".pr":10367,"(tmp":10368,"Ġkid":10369,">ĊĊĊ":10370,"Ġyang":10371,"NotFound":10372,"ÑĨ":10373,"math":10374,"@gmail":10375,"ĠLIMIT":10376,"redients":10377,"Ġvent":10378,"avigate":10379,"Look":10380,"Ġreligious":10381,"Ġrand":10382,"rio":10383,"(GL":10384,"_ip":10385,"uan":10386,"iciency":10387,"ĠChange":10388,">čĊčĊ":10389,"ĠEntity":10390,"Ġrencontre":10391,"ĠRet":10392,"plan":10393,"én":10394,"BOOL":10395,"uries":10396,"train":10397,"Definition":10398,"============":10399,"zz":10400,"Animation":10401,"ĠOK":10402,"_menu":10403,".bl":10404,"_score":10405,"Ġacad":10406,"(System":10407,"Ġrefresh":10408,"'=>$":10409,".Graphics":10410,"amento":10411,"pid":10412,"tc":10413,"Ġtips":10414,"Ġhomes":10415,"Ġfuel":10416,"âĸ":10417,"_helper":10418,"ĠĠčĊ":10419,"ĠRoom":10420,".Close":10421,"_attr":10422,"ĠMount":10423,"ĠEv":10424,"arser":10425,"_top":10426,"eah":10427,"ĠDelete":10428,"ãĢį":10429,"uke":10430,"Ġusage":10431,"aria":10432,"_dev":10433,"Ġtexture":10434,"Ġconversation":10435,"eper":10436,"Bean":10437,"done":10438,"nonatomic":10439,"ĠSecond":10440,"Ġshooting":10441,"_pre":10442,"Components":10443,"Ġ]ĊĊ":10444,"__,":10445,"stitution":10446,".Char":10447,">();ĊĊ":10448,"Ġpresented":10449,"Ġwa":10450,"oker":10451,"-ĊĊ":10452,"iner":10453,"Ġbecoming":10454,"Ġincident":10455,"Att":10456,"Ġrevealed":10457,"forc":10458,"Ġboot":10459,".page":10460,"Enumerator":10461,"_->":10462,"Photo":10463,"Ġspring":10464,".\",":10465,"ĠDictionary":10466,"BJECT":10467,"Ġlocations":10468,"Ġsamples":10469,"InputStream":10470,"ĠBrown":10471,"Ġstats":10472,"quality":10473,"Ñħ":10474,"-dis":10475,"Ġhelping":10476,"Ġped":10477,"(se":10478,"ĠWho":10479,"alian":10480,"internal":10481,"Ġft":10482,">().":10483,"->{":10484,"Ġmine":10485,"Ġsector":10486,"Ġgro":10487,"Ġopportunities":10488,"Ġü":10489,"Ġmp":10490,"Ġalleged":10491,"Ġdoubt":10492,"Mouse":10493,"About":10494,"_part":10495,"Ġchair":10496,"Ġstopped":10497,"loop":10498,"entities":10499,"Ġapps":10500,"ansion":10501,"Ġmental":10502,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":10503,"FR":10504,"Ġdefend":10505,"care":10506,"Ġideal":10507,"/api":10508,"urface":10509,"Ġele":10510,"ulator":10511,"ĠRights":10512,"anguages":10513,"Ġfunds":10514,"Ġadapt":10515,"Attributes":10516,"Ġdeploy":10517,"opts":10518,"Ġvalidation":10519,"Ġconcerns":10520,"uce":10521,".num":10522,"ulture":10523,"ila":10524,"Ġcup":10525,"Ġpure":10526,".Fore":10527,"ĠHashMap":10528,".valueOf":10529,"asm":10530,"MO":10531,"Ġcs":10532,"Ġstores":10533,"Ġ************************************************************************":10534,"Ġcommunication":10535,"mem":10536,".EventHandler":10537,".Status":10538,"_right":10539,".setOn":10540,"Sheet":10541,"Ġidentify":10542,"enerated":10543,"ordered":10544,"Ġ\"[":10545,"Ġswe":10546,"Condition":10547,"ĠAccording":10548,"Ġprepare":10549,"Ġrob":10550,"Pool":10551,"Ġsport":10552,"rv":10553,"ĠRouter":10554,"Ġalternative":10555,"([]":10556,"ĠChicago":10557,"ipher":10558,"ische":10559,"ĠDirector":10560,"kl":10561,"ĠWil":10562,"keys":10563,"Ġmysql":10564,"Ġwelcome":10565,"king":10566,"ĠManager":10567,"Ġcaught":10568,")}Ċ":10569,"Score":10570,"_PR":10571,"Ġsurvey":10572,"hab":10573,"Headers":10574,"ADER":10575,"Ġdecor":10576,"Ġturns":10577,"Ġradius":10578,"errupt":10579,"Cor":10580,"Ġmel":10581,"Ġintr":10582,"(q":10583,"ĠAC":10584,"amos":10585,"MAX":10586,"ĠGrid":10587,"ĠJesus":10588,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":10589,".DE":10590,"Ġts":10591,"Ġlinked":10592,"free":10593,"ĠQt":10594,"Ġ/**čĊ":10595,"Ġfaster":10596,"ctr":10597,"_J":10598,"DT":10599,".Check":10600,"Ġcombination":10601,"Ġintended":10602,"-the":10603,"-type":10604,"ectors":10605,"ami":10606,"uting":10607,"Ġuma":10608,"XML":10609,"UCT":10610,"Ap":10611,"ĠRandom":10612,"Ġran":10613,".sort":10614,"Ġsorted":10615,".Un":10616,"_PER":10617,"itory":10618,"Ġpriority":10619,"ĠGal":10620,"ĠOld":10621,"hot":10622,"ĠDisplay":10623,"(sub":10624,"_TH":10625,"_Y":10626,"ĠCare":10627,"loading":10628,"Kind":10629,"_handle":10630,",,":10631,"rase":10632,"_replace":10633,".addEventListener":10634,"ĠRT":10635,"Ġentered":10636,"gers":10637,"Ġich":10638,"(start":10639,"/app":10640,"Ġbrother":10641,"Memory":10642,"Outlet":10643,"Ġutf":10644,"prec":10645,"Ġnavigation":10646,"ORK":10647,"Ġdst":10648,"Detail":10649,"Ġaudience":10650,"Ġdur":10651,"Ġcluster":10652,"unched":10653,"Ġ],":10654,"Ġcomfortable":10655,".values":10656,"ĠTotal":10657,"Ġsnap":10658,"Ġstandards":10659,"Ġperformed":10660,"hand":10661,"(\"@":10662,"åŃ":10663,"Ġphil":10664,"ibr":10665,"trim":10666,"Ġforget":10667,"Ġdoctor":10668,".TextBox":10669,"icons":10670,",s":10671,"ĠOp":10672,"Sm":10673,"Stop":10674,"ĉList":10675,"ĉu":10676,"Comment":10677,"_VERSION":10678,".Xtra":10679,"Person":10680,"rb":10681,"LOB":10682,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ":10683,"ĠCentral":10684,"ICK":10685,"raq":10686,"Ġputting":10687,"Ġmd":10688,"ĠLove":10689,"Program":10690,"Border":10691,"oor":10692,"Ġallowing":10693,"after":10694,"Ġentries":10695,"ĠMaybe":10696,"]).":10697,"ĠShort":10698,")\\":10699,".now":10700,"friend":10701,"Ġprefer":10702,"ĠGPIO":10703,"osis":10704,"ĠGameObject":10705,"Ġskip":10706,"Ġcompetition":10707,"_match":10708,"lications":10709,"_CONT":10710,".groupBox":10711,"Ġals":10712,"\"We":10713,"_eq":10714,"lan":10715,"_search":10716,"ĠMusic":10717,"asis":10718,"Ġbind":10719,"ĠIsland":10720,"rum":10721,"(E":10722,"Ġseat":10723,"Video":10724,"Ġack":10725,"reek":10726,"={()":10727,"Ġrating":10728,"Ġrestaurant":10729,"DEX":10730,"(buf":10731,"pping":10732,"uality":10733,"Ġleague":10734,"Ġfocused":10735,"apon":10736,"$data":10737,"CLUD":10738,"CLUDING":10739,"Ġabsolute":10740,"(query":10741,"Ġtells":10742,"Ang":10743,"Ġcommunities":10744,"Ġhonest":10745,"oking":10746,"Ġapart":10747,"arity":10748,"/$":10749,"_module":10750,"ĠEnc":10751,".an":10752,".Config":10753,"Cre":10754,"Ġshock":10755,"ĠArab":10756,"IENT":10757,"/re":10758,"Ġretrie":10759,"ycler":10760,"isa":10761,"ĠOrgan":10762,".graph":10763,"Ġí":10764,"ĠBAS":10765,"Enum":10766,"Ġpossibly":10767,"ÑĢаÐ":10768,"ĠJapanese":10769,"Ġcraft":10770,"ĠPlace":10771,"Ġtalent":10772,"Ġfunding":10773,"Ġconfirmed":10774,"Ġcycle":10775,"/x":10776,"GE":10777,"Ġhearing":10778,"Ġplants":10779,"Ġmouth":10780,"pages":10781,"oria":10782,"ĠRemove":10783,"_total":10784,"Ġod":10785,"ollapse":10786,"door":10787,"Ġbought":10788,"Ġaddr":10789,"ARCH":10790,"_dim":10791,"dden":10792,"Ġdecades":10793,"REQUEST":10794,"Ġversions":10795,"fire":10796,"Ġmoves":10797,"fb":10798,"Ġcoffee":10799,".connect":10800,"ĠRow":10801,"Ġschema":10802,"Scope":10803,"-Type":10804,"Ġfighting":10805,"Ġretail":10806,"Ġmodified":10807,"TF":10808,"Files":10809,"nie":10810,"_command":10811,"stone":10812,"ĠÑĤ":10813,"_thread":10814,"Ġbond":10815,"ĠDevelopment":10816,"Ġpt":10817,"FORM":10818,"plet":10819,"Ġidentified":10820,"cpp":10821,"Ġcoding":10822,"oked":10823,"ĠMaster":10824,"IDTH":10825,"Ġresidents":10826,"redit":10827,"ĠPhoto":10828,"=-":10829,"unte":10830,"ateur":10831,"_STATE":10832,"ĠSing":10833,"Ġsheet":10834,".val":10835,"orse":10836,"Ġhers":10837,"Ġdetermined":10838,"Common":10839,"Ġwed":10840,"_queue":10841,"PH":10842,"ĠAtl":10843,"cred":10844,"/LICENSE":10845,"Ġmes":10846,"Ġadvanced":10847,".java":10848,".Sh":10849,"Go":10850,"kill":10851,"fp":10852,"_settings":10853,"Ġpal":10854,"Ġtruck":10855,"Ġcombined":10856,"Ġ\"${":10857,"ĠCorpor":10858,"Ġjoined":10859,"ĠJose":10860,"ĠCup":10861,"uns":10862,"estival":10863,"levision":10864,"Ġbroken":10865,"Ġmarriage":10866,"ĠWestern":10867,"Ġrepresents":10868,"ĠTitle":10869,"Ġss":10870,".Ass":10871,"ongoose":10872,"iento":10873,"<>();Ċ":10874,"Ġabsolutely":10875,"Ġsmooth":10876,"TERN":10877,"ĠUnless":10878,"Word":10879,"Ġmerge":10880,"igan":10881,"ĠVol":10882,"Ġnn":10883,".getId":10884,"Ġз":10885,"Ġsexy":10886,"Ġseeking":10887,"Single":10888,".this":10889,"Ġkom":10890,"bound":10891,";\"":10892,"ĠfontSize":10893,"_df":10894,"Ġinjury":10895,"(H":10896,"Ġissued":10897,"_END":10898,":self":10899,"Ġpatch":10900,"Ġleaves":10901,"Ġadopt":10902,"FileName":10903,"ãĢIJ":10904,"Ġexecutive":10905,"ĠByte":10906,"]))Ċ":10907,"Ġnu":10908,"outing":10909,"cluding":10910,"-R":10911,".options":10912,"Ġsubstant":10913,"avax":10914,"ĠBUT":10915,"Ġtechnical":10916,"Ġtwice":10917,"Ġmás":10918,"Ġunivers":10919,"yr":10920,"Ġdrag":10921,"ĠDC":10922,"Ġsed":10923,"Ġbot":10924,"ĠPal":10925,"ĠHall":10926,"forcement":10927,"Ġauch":10928,".mod":10929,"notation":10930,"_files":10931,".line":10932,"_flag":10933,"[name":10934,"Ġresolution":10935,"Ġbott":10936,"(\"[":10937,"ende":10938,"(arr":10939,"Free":10940,"(@\"":10941,"ĠDistrict":10942,"PEC":10943,":-":10944,"Picker":10945,"ĠJo":10946,"ĠĠĠĠĠĊ":10947,"ĠRiver":10948,"_rows":10949,"Ġhelpful":10950,"Ġmassive":10951,"---Ċ":10952,"Ġmeasures":10953,"ĠRuntime":10954,"Ġworry":10955,"ĠSpec":10956,"ĉD":10957,"ãĢij":10958,"Ġ){Ċ":10959,"Ġworse":10960,"(filename":10961,"Ġlay":10962,"Ġmagic":10963,"ĠTheir":10964,"oul":10965,"stroy":10966,"ĠWhere":10967,"Ġsudden":10968,"Ġdefe":10969,"Ġbinding":10970,"Ġflight":10971,"ĠOnInit":10972,"ĠWomen":10973,"ĠPolicy":10974,"Ġdrugs":10975,"ishing":10976,"('../":10977,"ĠMel":10978,"peat":10979,"tor":10980,"Ġproposed":10981,"Ġstated":10982,"_RES":10983,"Ġeast":10984,"ĠCONDITION":10985,"_desc":10986,"Ġwinning":10987,"folio":10988,"Mapper":10989,"ĠPan":10990,"ĠAnge":10991,".servlet":10992,"Ġcopies":10993,"LM":10994,"Ġvm":10995,"åį":10996,"Ġdictionary":10997,"Seg":10998,"elines":10999,"ĠSend":11000,"Ġiron":11001,"ĠFort":11002,".domain":11003,"Ġdebate":11004,"NotNull":11005,"eq":11006,"acher":11007,"lf":11008,"ĉfmt":11009,"Ġlawy":11010,"ÄŁ":11011,"ĠMen":11012,"Ġtrim":11013,"(NULL":11014,"Ġ!!":11015,"Ġpad":11016,"Ġfollows":11017,"\"][\"":11018,"requ":11019,"ĠEp":11020,".github":11021,"(img":11022,"eto":11023,"('\\":11024,"Services":11025,"umbnail":11026,"_main":11027,"pleted":11028,"fortunately":11029,"Ġwindows":11030,"Ġplane":11031,"ĠConnection":11032,".local":11033,"uard":11034,"}\\":11035,"==\"":11036,"andon":11037,"ĠRoy":11038,"west":11039,"iginal":11040,"emies":11041,"itz":11042,"'):Ċ":11043,"ĠPeter":11044,"Ġtough":11045,"Ġreduced":11046,"Ġcalculate":11047,"Ġrapid":11048,"customer":11049,"Ġefficient":11050,"Ġmedium":11051,"Ġfell":11052,".ref":11053,"ĠCas":11054,"Ġfeedback":11055,"Speed":11056,"(output":11057,"aje":11058,"Ġcategories":11059,"Ġfee":11060,"};":11061,"Ġdeleted":11062,"reh":11063,"Ġproof":11064,"Desc":11065,"Build":11066,"Ġsides":11067,".ArrayList":11068,"-%":11069,"ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ":11070,"ر":11071,".match":11072,"ли":11073,"Ġfeels":11074,"Ġachieve":11075,"Ġclim":11076,"_ON":11077,"ĠCD":11078,"Ġteacher":11079,"_current":11080,"bn":11081,"_PL":11082,"isting":11083,"Enable":11084,"GEN":11085,"Ġtv":11086,"Ġsock":11087,"Ġplays":11088,"Ġdiscount":11089,"ĠKE":11090,"ĠDebug":11091,"Fore":11092,"ĠIraq":11093,"Ġappearance":11094,"Mon":11095,"Ġstyled":11096,"ĠHuman":11097,"iot":11098,"ĠHistory":11099,"Ġsac":11100,"ĠCollection":11101,"Ġrecommended":11102,".Selected":11103,"Ġorganizations":11104,"Ġdiscovered":11105,"cohol":11106,"adas":11107,"ĠThomas":11108,"May":11109,"Ġconserv":11110,"Ġdomin":11111,"ĠFollow":11112,"ĠSection":11113,"ĠThanks":11114,"Username":11115,"Ġrecipe":11116,"Ġwonderful":11117,".sleep":11118,"_if":11119,"ĉĊĉĊ":11120,"orno":11121,"Ġru":11122,"_target":11123,".\"\"":11124,"à¦":11125,"EventArgs":11126,"Ġinputs":11127,"Ġfif":11128,"Ġvision":11129,"cy":11130,"ĠSeries":11131,")(((":11132,"Ġtrading":11133,"Ġmarker":11134,"Begin":11135,"Ġtypically":11136,"Ġcauses":11137,"dropdown":11138,"_DEBUG":11139,"Ġdetect":11140,"country":11141,"!\");Ċ":11142,"ĉR":11143,"appy":11144,"Ġcref":11145,"('<":11146,"\"=>":11147,"ĠLE":11148,"reader":11149,"Ġadministr":11150,"õ":11151,"ucket":11152,"Ġfashion":11153,".char":11154,"izar":11155,"Ġdisable":11156,"Ġsuc":11157,"ĠLive":11158,"issue":11159,"Ġmetadata":11160,"flags":11161,"ĠðŁ":11162,"Ġcommitted":11163,"Ġva":11164,"Ġrough":11165,"Ġ'''Ċ":11166,"Ġhighlight":11167,"_vars":11168,"VO":11169,"Ġencoding":11170,"-Z":11171,"_sign":11172,"$(\"#":11173,"Ġrain":11174,"reatest":11175,"ĠEND":11176,"Selection":11177,"Ġcandidates":11178,"Ġsav":11179,".Empty":11180,"Ġdecisions":11181,"Ġcollabor":11182,"ridge":11183,"feed":11184,"ression":11185,"Ġpersons":11186,"VM":11187,"ega":11188,"_BIT":11189,"According":11190,"acked":11191,"Ġdollars":11192,"_loss":11193,"ĠCost":11194,"}\"Ċ":11195,"Notification":11196,"Ġprostit":11197,"Ġauthority":11198,".rec":11199,"Ġspokes":11200,"ĠToday":11201,"istant":11202,"ĠHead":11203,"âĢĿ.":11204,"ertainment":11205,"cean":11206,"culate":11207,"Ġven":11208,"However":11209,"_arr":11210,"Ġtokens":11211,"Graph":11212,"ĠJud":11213,"ĠVirgin":11214,"ĠSerial":11215,"unning":11216,"Mutable":11217,"agers":11218,".csv":11219,"Ġdeveloping":11220,"Ġinstructions":11221,"Ġpromise":11222,"Ġrequested":11223,"_encode":11224,"/\"":11225,"ĠIcon":11226,"uilt":11227,"-day":11228,"Ġintelligence":11229,".IS":11230,"ĠObservable":11231,"ĠHard":11232,"Bool":11233,"idential":11234,".Anchor":11235,"Ġselling":11236,"CI":11237,"AGES":11238,"tle":11239,"bur":11240,"UFFER":11241,"RY":11242,"Ġbigger":11243,"Ġrat":11244,"Ġfamous":11245,"Ġtypename":11246,"Ġexplained":11247,"}}Ċ":11248,"Ġnuclear":11249,"-N":11250,"Ġcrisis":11251,"ĠEnter":11252,"Ġanswers":11253,"/${":11254,"/pl":11255,"Ġsequ":11256,"_next":11257,"mask":11258,"Ġstanding":11259,"Ġplenty":11260,"ĠCross":11261,"ĉret":11262,"dro":11263,"ĠCast":11264,"=true":11265,"ĠChris":11266,"icio":11267,"ĠMike":11268,"Decimal":11269,"addComponent":11270,"Len":11271,"Ġcock":11272,"Ġ#{":11273,"URN":11274,"":11403,"Ġ*=":11404,"ĠPS":11405,"Ġdangerous":11406,"[p":11407,"OME":11408,"Other":11409,"ĠStringBuilder":11410,"Points":11411,"heading":11412,"Ġcurrency":11413,"Ġpercentage":11414,"_API":11415,"Ġclassic":11416,"thead":11417,"ĠMO":11418,"FE":11419,"Idx":11420,"await":11421,"Ġè":11422,"Ġaccident":11423,"Ġvariant":11424,"Ġmyst":11425,"ĠLand":11426,"ĠBre":11427,"Ġharm":11428,"ĠAcc":11429,"Ġcharged":11430,"iones":11431,"Visibility":11432,"arry":11433,"ĠLanguage":11434,"Ġwalking":11435,"\".ĊĊ":11436,"ifer":11437,"Ġleadership":11438,".From":11439,"ynam":11440,"Ġtimestamp":11441,"ipt":11442,"ĠHas":11443,"REFER":11444,"ĠIts":11445,"Ġlistener":11446,"UTE":11447,"_description":11448,"Ġexperiences":11449,"Ġcreates":11450,"RS":11451,"cart":11452,"black":11453,"Ġchoices":11454,"war":11455,"Ġ'''":11456,"Ġordered":11457,"Ġevening":11458,"Ġpil":11459,"Ġtun":11460,"ĠBad":11461,"(app":11462,"random":11463,"Ġexplicit":11464,"Ġarrived":11465,"Ġfly":11466,"Ġeconom":11467,"-mail":11468,"Ġlists":11469,"Ġarchitect":11470,"ĠPay":11471,"Ġds":11472,"ĠSol":11473,"Ġvehicles":11474,"Hz":11475,"-com":11476,"Ġking":11477,"_equal":11478,"ĠHelp":11479,"Ġabuse":11480,"--;Ċ":11481,"Ġextr":11482,"Ġchemical":11483,"ä¿":11484,"Ġorient":11485,"Ġbreath":11486,"ĠSpace":11487,"(element":11488,"wait":11489,"DED":11490,"igma":11491,"Ġentr":11492,"Ġsob":11493,"-name":11494,"Ġaffected":11495,"ika":11496,"Ġcoal":11497,"_work":11498,"Ġhundreds":11499,"Ġpolitics":11500,"subject":11501,"Ġconsumer":11502,"ANGE":11503,"Ġrepeated":11504,"Send":11505,"Ġ#[":11506,"Ġprotocol":11507,"Ġleads":11508,"useum":11509,"Every":11510,"Import":11511,"(count":11512,"Ġchallenges":11513,"Ġnovel":11514,"Ġdepart":11515,"bits":11516,".Current":11517,"Ġ`${":11518,"oting":11519,"(\\":11520,"Ġcreative":11521,"Ġbuff":11522,"Ġintroduced":11523,"usic":11524,"modules":11525,"Are":11526,"-doc":11527,"language":11528,"_cache":11529,"Ġtod":11530,"?>":11531,"omething":11532,"Ġhun":11533,"åº":11534,"aters":11535,"Intent":11536,"Ġimplemented":11537,"ĠCase":11538,"Children":11539,"Ġnotification":11540,"Renderer":11541,"Wrapper":11542,"Objects":11543,"tl":11544,".Contains":11545,"Plugin":11546,".row":11547,"Ġforg":11548,"Ġpermit":11549,"Ġtargets":11550,"ĠIF":11551,"Ġtip":11552,"sex":11553,"Ġsupports":11554,"Ġfold":11555,"photo":11556,"},čĊ":11557,"Ġgoogle":11558,"$('#":11559,"Ġsharing":11560,"Ġgoods":11561,"vs":11562,"ĠDan":11563,"Rate":11564,"ĠMartin":11565,"Ġmanner":11566,"lie":11567,".The":11568,"Internal":11569,"ĠCONTR":11570,"Mock":11571,"RIGHT":11572,"Ġ'{":11573,"Ġcontrols":11574,"Mat":11575,"Ġmand":11576,"Ġextended":11577,"Ok":11578,"Ġembed":11579,"Ġplanet":11580,"ĠNon":11581,"-ch":11582,")\",":11583,"epar":11584,"Ġbelieved":11585,"ĠEnvironment":11586,"ĠFriend":11587,"-res":11588,"Ġhandling":11589,"nic":11590,"-level":11591,"scri":11592,"Xml":11593,"BE":11594,"ungen":11595,"Ġalter":11596,"[idx":11597,"Pop":11598,"cam":11599,"Ġ(((":11600,"Ġshipping":11601,"Ġbattery":11602,"iddleware":11603,"MC":11604,"Ġimpl":11605,"otation":11606,"ĠLab":11607," |